diff --git a/main.js b/main.js index b6980ab..5c8c534 100644 --- a/main.js +++ b/main.js @@ -46,22 +46,494 @@ var __toBinary = /* @__PURE__ */ (() => { }; })(); -// node_modules/obsidian-dataview/lib/index.js -var require_lib = __commonJS({ - "node_modules/obsidian-dataview/lib/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - require("obsidian"); - var getAPI3 = (app2) => { - var _a2; - if (app2) - return (_a2 = app2.plugins.plugins.dataview) === null || _a2 === void 0 ? void 0 : _a2.api; - else - return window["DataviewAPI"]; - }; - var isPluginEnabled = (app2) => app2.plugins.enabledPlugins.has("dataview"); - exports.getAPI = getAPI3; - exports.isPluginEnabled = isPluginEnabled; +// node_modules/tslib/tslib.js +var require_tslib = __commonJS({ + "node_modules/tslib/tslib.js"(exports, module2) { + var __extends2; + var __assign3; + var __rest3; + var __decorate2; + var __param2; + var __metadata2; + var __awaiter2; + var __generator2; + var __exportStar2; + var __values2; + var __read2; + var __spread2; + var __spreadArrays2; + var __spreadArray3; + var __await2; + var __asyncGenerator2; + var __asyncDelegator2; + var __asyncValues2; + var __makeTemplateObject2; + var __importStar2; + var __importDefault2; + var __classPrivateFieldGet2; + var __classPrivateFieldSet2; + var __classPrivateFieldIn2; + var __createBinding2; + (function(factory) { + var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; + if (typeof define === "function" && define.amd) { + define("tslib", ["exports"], function(exports2) { + factory(createExporter(root, createExporter(exports2))); + }); + } else if (typeof module2 === "object" && typeof module2.exports === "object") { + factory(createExporter(root, createExporter(module2.exports))); + } else { + factory(createExporter(root)); + } + function createExporter(exports2, previous) { + if (exports2 !== root) { + if (typeof Object.create === "function") { + Object.defineProperty(exports2, "__esModule", { value: true }); + } else { + exports2.__esModule = true; + } + } + return function(id2, v3) { + return exports2[id2] = previous ? previous(id2, v3) : v3; + }; + } + })(function(exporter) { + var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d5, b4) { + d5.__proto__ = b4; + } || function(d5, b4) { + for (var p3 in b4) + if (Object.prototype.hasOwnProperty.call(b4, p3)) + d5[p3] = b4[p3]; + }; + __extends2 = function(d5, b4) { + if (typeof b4 !== "function" && b4 !== null) + throw new TypeError("Class extends value " + String(b4) + " is not a constructor or null"); + extendStatics(d5, b4); + function __() { + this.constructor = d5; + } + d5.prototype = b4 === null ? Object.create(b4) : (__.prototype = b4.prototype, new __()); + }; + __assign3 = Object.assign || function(t4) { + for (var s5, i4 = 1, n2 = arguments.length; i4 < n2; i4++) { + s5 = arguments[i4]; + for (var p3 in s5) + if (Object.prototype.hasOwnProperty.call(s5, p3)) + t4[p3] = s5[p3]; + } + return t4; + }; + __rest3 = function(s5, e4) { + var t4 = {}; + for (var p3 in s5) + if (Object.prototype.hasOwnProperty.call(s5, p3) && e4.indexOf(p3) < 0) + t4[p3] = s5[p3]; + if (s5 != null && typeof Object.getOwnPropertySymbols === "function") + for (var i4 = 0, p3 = Object.getOwnPropertySymbols(s5); i4 < p3.length; i4++) { + if (e4.indexOf(p3[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s5, p3[i4])) + t4[p3[i4]] = s5[p3[i4]]; + } + return t4; + }; + __decorate2 = function(decorators, target, key2, desc) { + var c4 = arguments.length, r3 = c4 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key2) : desc, d5; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") + r3 = Reflect.decorate(decorators, target, key2, desc); + else + for (var i4 = decorators.length - 1; i4 >= 0; i4--) + if (d5 = decorators[i4]) + r3 = (c4 < 3 ? d5(r3) : c4 > 3 ? d5(target, key2, r3) : d5(target, key2)) || r3; + return c4 > 3 && r3 && Object.defineProperty(target, key2, r3), r3; + }; + __param2 = function(paramIndex, decorator) { + return function(target, key2) { + decorator(target, key2, paramIndex); + }; + }; + __metadata2 = function(metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") + return Reflect.metadata(metadataKey, metadataValue); + }; + __awaiter2 = function(thisArg, _arguments, P4, generator) { + function adopt(value) { + return value instanceof P4 ? value : new P4(function(resolve) { + resolve(value); + }); + } + return new (P4 || (P4 = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e4) { + reject(e4); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e4) { + reject(e4); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + __generator2 = function(thisArg, body) { + var _4 = { label: 0, sent: function() { + if (t4[0] & 1) + throw t4[1]; + return t4[1]; + }, trys: [], ops: [] }, f4, y5, t4, g4; + return g4 = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g4[Symbol.iterator] = function() { + return this; + }), g4; + function verb(n2) { + return function(v3) { + return step([n2, v3]); + }; + } + function step(op) { + if (f4) + throw new TypeError("Generator is already executing."); + while (g4 && (g4 = 0, op[0] && (_4 = 0)), _4) + try { + if (f4 = 1, y5 && (t4 = op[0] & 2 ? y5["return"] : op[0] ? y5["throw"] || ((t4 = y5["return"]) && t4.call(y5), 0) : y5.next) && !(t4 = t4.call(y5, op[1])).done) + return t4; + if (y5 = 0, t4) + op = [op[0] & 2, t4.value]; + switch (op[0]) { + case 0: + case 1: + t4 = op; + break; + case 4: + _4.label++; + return { value: op[1], done: false }; + case 5: + _4.label++; + y5 = op[1]; + op = [0]; + continue; + case 7: + op = _4.ops.pop(); + _4.trys.pop(); + continue; + default: + if (!(t4 = _4.trys, t4 = t4.length > 0 && t4[t4.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _4 = 0; + continue; + } + if (op[0] === 3 && (!t4 || op[1] > t4[0] && op[1] < t4[3])) { + _4.label = op[1]; + break; + } + if (op[0] === 6 && _4.label < t4[1]) { + _4.label = t4[1]; + t4 = op; + break; + } + if (t4 && _4.label < t4[2]) { + _4.label = t4[2]; + _4.ops.push(op); + break; + } + if (t4[2]) + _4.ops.pop(); + _4.trys.pop(); + continue; + } + op = body.call(thisArg, _4); + } catch (e4) { + op = [6, e4]; + y5 = 0; + } finally { + f4 = t4 = 0; + } + if (op[0] & 5) + throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + __exportStar2 = function(m5, o3) { + for (var p3 in m5) + if (p3 !== "default" && !Object.prototype.hasOwnProperty.call(o3, p3)) + __createBinding2(o3, m5, p3); + }; + __createBinding2 = Object.create ? function(o3, m5, k5, k22) { + if (k22 === void 0) + k22 = k5; + var desc = Object.getOwnPropertyDescriptor(m5, k5); + if (!desc || ("get" in desc ? !m5.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m5[k5]; + } }; + } + Object.defineProperty(o3, k22, desc); + } : function(o3, m5, k5, k22) { + if (k22 === void 0) + k22 = k5; + o3[k22] = m5[k5]; + }; + __values2 = function(o3) { + var s5 = typeof Symbol === "function" && Symbol.iterator, m5 = s5 && o3[s5], i4 = 0; + if (m5) + return m5.call(o3); + if (o3 && typeof o3.length === "number") + return { + next: function() { + if (o3 && i4 >= o3.length) + o3 = void 0; + return { value: o3 && o3[i4++], done: !o3 }; + } + }; + throw new TypeError(s5 ? "Object is not iterable." : "Symbol.iterator is not defined."); + }; + __read2 = function(o3, n2) { + var m5 = typeof Symbol === "function" && o3[Symbol.iterator]; + if (!m5) + return o3; + var i4 = m5.call(o3), r3, ar = [], e4; + try { + while ((n2 === void 0 || n2-- > 0) && !(r3 = i4.next()).done) + ar.push(r3.value); + } catch (error) { + e4 = { error }; + } finally { + try { + if (r3 && !r3.done && (m5 = i4["return"])) + m5.call(i4); + } finally { + if (e4) + throw e4.error; + } + } + return ar; + }; + __spread2 = function() { + for (var ar = [], i4 = 0; i4 < arguments.length; i4++) + ar = ar.concat(__read2(arguments[i4])); + return ar; + }; + __spreadArrays2 = function() { + for (var s5 = 0, i4 = 0, il = arguments.length; i4 < il; i4++) + s5 += arguments[i4].length; + for (var r3 = Array(s5), k5 = 0, i4 = 0; i4 < il; i4++) + for (var a5 = arguments[i4], j4 = 0, jl = a5.length; j4 < jl; j4++, k5++) + r3[k5] = a5[j4]; + return r3; + }; + __spreadArray3 = function(to, from, pack) { + if (pack || arguments.length === 2) + for (var i4 = 0, l3 = from.length, ar; i4 < l3; i4++) { + if (ar || !(i4 in from)) { + if (!ar) + ar = Array.prototype.slice.call(from, 0, i4); + ar[i4] = from[i4]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; + __await2 = function(v3) { + return this instanceof __await2 ? (this.v = v3, this) : new __await2(v3); + }; + __asyncGenerator2 = function(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) + throw new TypeError("Symbol.asyncIterator is not defined."); + var g4 = generator.apply(thisArg, _arguments || []), i4, q5 = []; + return i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { + return this; + }, i4; + function verb(n2) { + if (g4[n2]) + i4[n2] = function(v3) { + return new Promise(function(a5, b4) { + q5.push([n2, v3, a5, b4]) > 1 || resume(n2, v3); + }); + }; + } + function resume(n2, v3) { + try { + step(g4[n2](v3)); + } catch (e4) { + settle(q5[0][3], e4); + } + } + function step(r3) { + r3.value instanceof __await2 ? Promise.resolve(r3.value.v).then(fulfill, reject) : settle(q5[0][2], r3); + } + function fulfill(value) { + resume("next", value); + } + function reject(value) { + resume("throw", value); + } + function settle(f4, v3) { + if (f4(v3), q5.shift(), q5.length) + resume(q5[0][0], q5[0][1]); + } + }; + __asyncDelegator2 = function(o3) { + var i4, p3; + return i4 = {}, verb("next"), verb("throw", function(e4) { + throw e4; + }), verb("return"), i4[Symbol.iterator] = function() { + return this; + }, i4; + function verb(n2, f4) { + i4[n2] = o3[n2] ? function(v3) { + return (p3 = !p3) ? { value: __await2(o3[n2](v3)), done: n2 === "return" } : f4 ? f4(v3) : v3; + } : f4; + } + }; + __asyncValues2 = function(o3) { + if (!Symbol.asyncIterator) + throw new TypeError("Symbol.asyncIterator is not defined."); + var m5 = o3[Symbol.asyncIterator], i4; + return m5 ? m5.call(o3) : (o3 = typeof __values2 === "function" ? __values2(o3) : o3[Symbol.iterator](), i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { + return this; + }, i4); + function verb(n2) { + i4[n2] = o3[n2] && function(v3) { + return new Promise(function(resolve, reject) { + v3 = o3[n2](v3), settle(resolve, reject, v3.done, v3.value); + }); + }; + } + function settle(resolve, reject, d5, v3) { + Promise.resolve(v3).then(function(v4) { + resolve({ value: v4, done: d5 }); + }, reject); + } + }; + __makeTemplateObject2 = function(cooked, raw) { + if (Object.defineProperty) { + Object.defineProperty(cooked, "raw", { value: raw }); + } else { + cooked.raw = raw; + } + return cooked; + }; + var __setModuleDefault = Object.create ? function(o3, v3) { + Object.defineProperty(o3, "default", { enumerable: true, value: v3 }); + } : function(o3, v3) { + o3["default"] = v3; + }; + __importStar2 = function(mod) { + if (mod && mod.__esModule) + return mod; + var result = {}; + if (mod != null) { + for (var k5 in mod) + if (k5 !== "default" && Object.prototype.hasOwnProperty.call(mod, k5)) + __createBinding2(result, mod, k5); + } + __setModuleDefault(result, mod); + return result; + }; + __importDefault2 = function(mod) { + return mod && mod.__esModule ? mod : { "default": mod }; + }; + __classPrivateFieldGet2 = function(receiver, state, kind, f4) { + if (kind === "a" && !f4) + throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f4 : !state.has(receiver)) + throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f4 : kind === "a" ? f4.call(receiver) : f4 ? f4.value : state.get(receiver); + }; + __classPrivateFieldSet2 = function(receiver, state, value, kind, f4) { + if (kind === "m") + throw new TypeError("Private method is not writable"); + if (kind === "a" && !f4) + throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f4 : !state.has(receiver)) + throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return kind === "a" ? f4.call(receiver, value) : f4 ? f4.value = value : state.set(receiver, value), value; + }; + __classPrivateFieldIn2 = function(state, receiver) { + if (receiver === null || typeof receiver !== "object" && typeof receiver !== "function") + throw new TypeError("Cannot use 'in' operator on non-object"); + return typeof state === "function" ? receiver === state : state.has(receiver); + }; + exporter("__extends", __extends2); + exporter("__assign", __assign3); + exporter("__rest", __rest3); + exporter("__decorate", __decorate2); + exporter("__param", __param2); + exporter("__metadata", __metadata2); + exporter("__awaiter", __awaiter2); + exporter("__generator", __generator2); + exporter("__exportStar", __exportStar2); + exporter("__createBinding", __createBinding2); + exporter("__values", __values2); + exporter("__read", __read2); + exporter("__spread", __spread2); + exporter("__spreadArrays", __spreadArrays2); + exporter("__spreadArray", __spreadArray3); + exporter("__await", __await2); + exporter("__asyncGenerator", __asyncGenerator2); + exporter("__asyncDelegator", __asyncDelegator2); + exporter("__asyncValues", __asyncValues2); + exporter("__makeTemplateObject", __makeTemplateObject2); + exporter("__importStar", __importStar2); + exporter("__importDefault", __importDefault2); + exporter("__classPrivateFieldGet", __classPrivateFieldGet2); + exporter("__classPrivateFieldSet", __classPrivateFieldSet2); + exporter("__classPrivateFieldIn", __classPrivateFieldIn2); + }); + } +}); + +// node_modules/classnames/index.js +var require_classnames = __commonJS({ + "node_modules/classnames/index.js"(exports, module2) { + (function() { + "use strict"; + var hasOwn = {}.hasOwnProperty; + var nativeCodeString = "[native code]"; + function classNames8() { + var classes = []; + for (var i4 = 0; i4 < arguments.length; i4++) { + var arg = arguments[i4]; + if (!arg) + continue; + var argType = typeof arg; + if (argType === "string" || argType === "number") { + classes.push(arg); + } else if (Array.isArray(arg)) { + if (arg.length) { + var inner = classNames8.apply(null, arg); + if (inner) { + classes.push(inner); + } + } + } else if (argType === "object") { + if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) { + classes.push(arg.toString()); + continue; + } + for (var key2 in arg) { + if (hasOwn.call(arg, key2) && arg[key2]) { + classes.push(key2); + } + } + } + } + return classes.join(" "); + } + if (typeof module2 !== "undefined" && module2.exports) { + classNames8.default = classNames8; + module2.exports = classNames8; + } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) { + define("classnames", [], function() { + return classNames8; + }); + } else { + window.classNames = classNames8; + } + })(); } }); @@ -753,7 +1225,7 @@ var require_lodash = __commonJS({ return string.match(reUnicodeWord) || []; } var runInContext = function runInContext2(context) { - context = context == null ? root : _5.defaults(root.Object(), context, _5.pick(root, contextProps)); + context = context == null ? root : _4.defaults(root.Object(), context, _4.pick(root, contextProps)); var Array2 = context.Array, Date2 = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError; var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto = Object2.prototype; var coreJsData = context["__core-js_shared__"]; @@ -1009,9 +1481,9 @@ var require_lodash = __commonJS({ return getMapData(this, key2).has(key2); } function mapCacheSet(key2, value) { - var data = getMapData(this, key2), size3 = data.size; + var data = getMapData(this, key2), size2 = data.size; data.set(key2, value); - this.size += data.size == size3 ? 0 : 1; + this.size += data.size == size2 ? 0 : 1; return this; } MapCache2.prototype.clear = mapCacheClear; @@ -2821,19 +3293,19 @@ var require_lodash = __commonJS({ function getView(start, end, transforms) { var index = -1, length = transforms.length; while (++index < length) { - var data = transforms[index], size3 = data.size; + var data = transforms[index], size2 = data.size; switch (data.type) { case "drop": - start += size3; + start += size2; break; case "dropRight": - end -= size3; + end -= size2; break; case "take": - end = nativeMin(end, start + size3); + end = nativeMin(end, start + size2); break; case "takeRight": - start = nativeMax(start, end - size3); + start = nativeMax(start, end - size2); break; } } @@ -3093,15 +3565,15 @@ var require_lodash = __commonJS({ return func.apply(undefined2, arguments); }; } - function shuffleSelf(array, size3) { + function shuffleSelf(array, size2) { var index = -1, length = array.length, lastIndex = length - 1; - size3 = size3 === undefined2 ? length : size3; - while (++index < size3) { + size2 = size2 === undefined2 ? length : size2; + while (++index < size2) { var rand = baseRandom(index, lastIndex), value = array[rand]; array[rand] = array[index]; array[index] = value; } - array.length = size3; + array.length = size2; return array; } var stringToPath = memoizeCapped(function(string) { @@ -3153,19 +3625,19 @@ var require_lodash = __commonJS({ result2.__values__ = wrapper.__values__; return result2; } - function chunk(array, size3, guard) { - if (guard ? isIterateeCall(array, size3, guard) : size3 === undefined2) { - size3 = 1; + function chunk(array, size2, guard) { + if (guard ? isIterateeCall(array, size2, guard) : size2 === undefined2) { + size2 = 1; } else { - size3 = nativeMax(toInteger2(size3), 0); + size2 = nativeMax(toInteger2(size2), 0); } var length = array == null ? 0 : array.length; - if (!length || size3 < 1) { + if (!length || size2 < 1) { return []; } - var index = 0, resIndex = 0, result2 = Array2(nativeCeil(length / size3)); + var index = 0, resIndex = 0, result2 = Array2(nativeCeil(length / size2)); while (index < length) { - result2[resIndex++] = baseSlice(array, index, index += size3); + result2[resIndex++] = baseSlice(array, index, index += size2); } return result2; } @@ -3302,7 +3774,7 @@ var require_lodash = __commonJS({ } return baseIndexOf(array, value, index); } - function initial2(array) { + function initial(array) { var length = array == null ? 0 : array.length; return length ? baseSlice(array, 0, -1) : []; } @@ -3479,7 +3951,7 @@ var require_lodash = __commonJS({ comparator = typeof comparator == "function" ? comparator : undefined2; return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined2, comparator); }); - function uniq6(array) { + function uniq5(array) { return array && array.length ? baseUniq(array) : []; } function uniqBy(array, iteratee2) { @@ -3746,7 +4218,7 @@ var require_lodash = __commonJS({ var func = isArray(collection) ? arrayShuffle : baseShuffle; return func(collection); } - function size2(collection) { + function size(collection) { if (collection == null) { return 0; } @@ -3841,7 +4313,7 @@ var require_lodash = __commonJS({ result2.placeholder = curryRight.placeholder; return result2; } - function debounce5(func, wait, options) { + function debounce3(func, wait, options) { var lastArgs, lastThis, maxWait, result2, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != "function") { throw new TypeError2(FUNC_ERROR_TEXT); @@ -4021,7 +4493,7 @@ var require_lodash = __commonJS({ leading = "leading" in options ? !!options.leading : leading; trailing = "trailing" in options ? !!options.trailing : trailing; } - return debounce5(func, wait, { + return debounce3(func, wait, { "leading": leading, "maxWait": wait, "trailing": trailing @@ -5035,7 +5507,7 @@ var require_lodash = __commonJS({ lodash.create = create; lodash.curry = curry; lodash.curryRight = curryRight; - lodash.debounce = debounce5; + lodash.debounce = debounce3; lodash.defaults = defaults; lodash.defaultsDeep = defaultsDeep; lodash.defer = defer; @@ -5062,7 +5534,7 @@ var require_lodash = __commonJS({ lodash.functions = functions; lodash.functionsIn = functionsIn; lodash.groupBy = groupBy2; - lodash.initial = initial2; + lodash.initial = initial; lodash.intersection = intersection; lodash.intersectionBy = intersectionBy; lodash.intersectionWith = intersectionWith; @@ -5141,7 +5613,7 @@ var require_lodash = __commonJS({ lodash.union = union; lodash.unionBy = unionBy; lodash.unionWith = unionWith; - lodash.uniq = uniq6; + lodash.uniq = uniq5; lodash.uniqBy = uniqBy; lodash.uniqWith = uniqWith; lodash.unset = unset; @@ -5283,7 +5755,7 @@ var require_lodash = __commonJS({ lodash.round = round; lodash.runInContext = runInContext2; lodash.sample = sample; - lodash.size = size2; + lodash.size = size; lodash.snakeCase = snakeCase; lodash.some = some; lodash.sortedIndex = sortedIndex; @@ -5487,510 +5959,38 @@ var require_lodash = __commonJS({ } return lodash; }; - var _5 = runInContext(); + var _4 = runInContext(); if (typeof define == "function" && typeof define.amd == "object" && define.amd) { - root._ = _5; + root._ = _4; define(function() { - return _5; + return _4; }); } else if (freeModule) { - (freeModule.exports = _5)._ = _5; - freeExports._ = _5; + (freeModule.exports = _4)._ = _4; + freeExports._ = _4; } else { - root._ = _5; + root._ = _4; } }).call(exports); } }); -// node_modules/tslib/tslib.js -var require_tslib = __commonJS({ - "node_modules/tslib/tslib.js"(exports, module2) { - var __extends2; - var __assign3; - var __rest3; - var __decorate2; - var __param2; - var __metadata2; - var __awaiter2; - var __generator2; - var __exportStar2; - var __values2; - var __read2; - var __spread2; - var __spreadArrays2; - var __spreadArray3; - var __await2; - var __asyncGenerator2; - var __asyncDelegator2; - var __asyncValues2; - var __makeTemplateObject2; - var __importStar2; - var __importDefault2; - var __classPrivateFieldGet2; - var __classPrivateFieldSet2; - var __classPrivateFieldIn2; - var __createBinding2; - (function(factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; - if (typeof define === "function" && define.amd) { - define("tslib", ["exports"], function(exports2) { - factory(createExporter(root, createExporter(exports2))); - }); - } else if (typeof module2 === "object" && typeof module2.exports === "object") { - factory(createExporter(root, createExporter(module2.exports))); - } else { - factory(createExporter(root)); - } - function createExporter(exports2, previous) { - if (exports2 !== root) { - if (typeof Object.create === "function") { - Object.defineProperty(exports2, "__esModule", { value: true }); - } else { - exports2.__esModule = true; - } - } - return function(id2, v3) { - return exports2[id2] = previous ? previous(id2, v3) : v3; - }; - } - })(function(exporter) { - var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d5, b4) { - d5.__proto__ = b4; - } || function(d5, b4) { - for (var p3 in b4) - if (Object.prototype.hasOwnProperty.call(b4, p3)) - d5[p3] = b4[p3]; - }; - __extends2 = function(d5, b4) { - if (typeof b4 !== "function" && b4 !== null) - throw new TypeError("Class extends value " + String(b4) + " is not a constructor or null"); - extendStatics(d5, b4); - function __() { - this.constructor = d5; - } - d5.prototype = b4 === null ? Object.create(b4) : (__.prototype = b4.prototype, new __()); - }; - __assign3 = Object.assign || function(t4) { - for (var s5, i4 = 1, n2 = arguments.length; i4 < n2; i4++) { - s5 = arguments[i4]; - for (var p3 in s5) - if (Object.prototype.hasOwnProperty.call(s5, p3)) - t4[p3] = s5[p3]; - } - return t4; - }; - __rest3 = function(s5, e4) { - var t4 = {}; - for (var p3 in s5) - if (Object.prototype.hasOwnProperty.call(s5, p3) && e4.indexOf(p3) < 0) - t4[p3] = s5[p3]; - if (s5 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p3 = Object.getOwnPropertySymbols(s5); i4 < p3.length; i4++) { - if (e4.indexOf(p3[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s5, p3[i4])) - t4[p3[i4]] = s5[p3[i4]]; - } - return t4; - }; - __decorate2 = function(decorators, target, key2, desc) { - var c4 = arguments.length, r3 = c4 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key2) : desc, d5; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") - r3 = Reflect.decorate(decorators, target, key2, desc); - else - for (var i4 = decorators.length - 1; i4 >= 0; i4--) - if (d5 = decorators[i4]) - r3 = (c4 < 3 ? d5(r3) : c4 > 3 ? d5(target, key2, r3) : d5(target, key2)) || r3; - return c4 > 3 && r3 && Object.defineProperty(target, key2, r3), r3; - }; - __param2 = function(paramIndex, decorator) { - return function(target, key2) { - decorator(target, key2, paramIndex); - }; - }; - __metadata2 = function(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") - return Reflect.metadata(metadataKey, metadataValue); - }; - __awaiter2 = function(thisArg, _arguments, P3, generator) { - function adopt(value) { - return value instanceof P3 ? value : new P3(function(resolve) { - resolve(value); - }); - } - return new (P3 || (P3 = Promise))(function(resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e4) { - reject(e4); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e4) { - reject(e4); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - __generator2 = function(thisArg, body) { - var _5 = { label: 0, sent: function() { - if (t4[0] & 1) - throw t4[1]; - return t4[1]; - }, trys: [], ops: [] }, f4, y5, t4, g4; - return g4 = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g4[Symbol.iterator] = function() { - return this; - }), g4; - function verb(n2) { - return function(v3) { - return step([n2, v3]); - }; - } - function step(op) { - if (f4) - throw new TypeError("Generator is already executing."); - while (g4 && (g4 = 0, op[0] && (_5 = 0)), _5) - try { - if (f4 = 1, y5 && (t4 = op[0] & 2 ? y5["return"] : op[0] ? y5["throw"] || ((t4 = y5["return"]) && t4.call(y5), 0) : y5.next) && !(t4 = t4.call(y5, op[1])).done) - return t4; - if (y5 = 0, t4) - op = [op[0] & 2, t4.value]; - switch (op[0]) { - case 0: - case 1: - t4 = op; - break; - case 4: - _5.label++; - return { value: op[1], done: false }; - case 5: - _5.label++; - y5 = op[1]; - op = [0]; - continue; - case 7: - op = _5.ops.pop(); - _5.trys.pop(); - continue; - default: - if (!(t4 = _5.trys, t4 = t4.length > 0 && t4[t4.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _5 = 0; - continue; - } - if (op[0] === 3 && (!t4 || op[1] > t4[0] && op[1] < t4[3])) { - _5.label = op[1]; - break; - } - if (op[0] === 6 && _5.label < t4[1]) { - _5.label = t4[1]; - t4 = op; - break; - } - if (t4 && _5.label < t4[2]) { - _5.label = t4[2]; - _5.ops.push(op); - break; - } - if (t4[2]) - _5.ops.pop(); - _5.trys.pop(); - continue; - } - op = body.call(thisArg, _5); - } catch (e4) { - op = [6, e4]; - y5 = 0; - } finally { - f4 = t4 = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - __exportStar2 = function(m5, o3) { - for (var p3 in m5) - if (p3 !== "default" && !Object.prototype.hasOwnProperty.call(o3, p3)) - __createBinding2(o3, m5, p3); - }; - __createBinding2 = Object.create ? function(o3, m5, k5, k22) { - if (k22 === void 0) - k22 = k5; - var desc = Object.getOwnPropertyDescriptor(m5, k5); - if (!desc || ("get" in desc ? !m5.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m5[k5]; - } }; - } - Object.defineProperty(o3, k22, desc); - } : function(o3, m5, k5, k22) { - if (k22 === void 0) - k22 = k5; - o3[k22] = m5[k5]; - }; - __values2 = function(o3) { - var s5 = typeof Symbol === "function" && Symbol.iterator, m5 = s5 && o3[s5], i4 = 0; - if (m5) - return m5.call(o3); - if (o3 && typeof o3.length === "number") - return { - next: function() { - if (o3 && i4 >= o3.length) - o3 = void 0; - return { value: o3 && o3[i4++], done: !o3 }; - } - }; - throw new TypeError(s5 ? "Object is not iterable." : "Symbol.iterator is not defined."); - }; - __read2 = function(o3, n2) { - var m5 = typeof Symbol === "function" && o3[Symbol.iterator]; - if (!m5) - return o3; - var i4 = m5.call(o3), r3, ar = [], e4; - try { - while ((n2 === void 0 || n2-- > 0) && !(r3 = i4.next()).done) - ar.push(r3.value); - } catch (error) { - e4 = { error }; - } finally { - try { - if (r3 && !r3.done && (m5 = i4["return"])) - m5.call(i4); - } finally { - if (e4) - throw e4.error; - } - } - return ar; - }; - __spread2 = function() { - for (var ar = [], i4 = 0; i4 < arguments.length; i4++) - ar = ar.concat(__read2(arguments[i4])); - return ar; - }; - __spreadArrays2 = function() { - for (var s5 = 0, i4 = 0, il = arguments.length; i4 < il; i4++) - s5 += arguments[i4].length; - for (var r3 = Array(s5), k5 = 0, i4 = 0; i4 < il; i4++) - for (var a5 = arguments[i4], j4 = 0, jl = a5.length; j4 < jl; j4++, k5++) - r3[k5] = a5[j4]; - return r3; - }; - __spreadArray3 = function(to, from, pack) { - if (pack || arguments.length === 2) - for (var i4 = 0, l3 = from.length, ar; i4 < l3; i4++) { - if (ar || !(i4 in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i4); - ar[i4] = from[i4]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); - }; - __await2 = function(v3) { - return this instanceof __await2 ? (this.v = v3, this) : new __await2(v3); - }; - __asyncGenerator2 = function(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var g4 = generator.apply(thisArg, _arguments || []), i4, q5 = []; - return i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { - return this; - }, i4; - function verb(n2) { - if (g4[n2]) - i4[n2] = function(v3) { - return new Promise(function(a5, b4) { - q5.push([n2, v3, a5, b4]) > 1 || resume(n2, v3); - }); - }; - } - function resume(n2, v3) { - try { - step(g4[n2](v3)); - } catch (e4) { - settle(q5[0][3], e4); - } - } - function step(r3) { - r3.value instanceof __await2 ? Promise.resolve(r3.value.v).then(fulfill, reject) : settle(q5[0][2], r3); - } - function fulfill(value) { - resume("next", value); - } - function reject(value) { - resume("throw", value); - } - function settle(f4, v3) { - if (f4(v3), q5.shift(), q5.length) - resume(q5[0][0], q5[0][1]); - } - }; - __asyncDelegator2 = function(o3) { - var i4, p3; - return i4 = {}, verb("next"), verb("throw", function(e4) { - throw e4; - }), verb("return"), i4[Symbol.iterator] = function() { - return this; - }, i4; - function verb(n2, f4) { - i4[n2] = o3[n2] ? function(v3) { - return (p3 = !p3) ? { value: __await2(o3[n2](v3)), done: n2 === "return" } : f4 ? f4(v3) : v3; - } : f4; - } - }; - __asyncValues2 = function(o3) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var m5 = o3[Symbol.asyncIterator], i4; - return m5 ? m5.call(o3) : (o3 = typeof __values2 === "function" ? __values2(o3) : o3[Symbol.iterator](), i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { - return this; - }, i4); - function verb(n2) { - i4[n2] = o3[n2] && function(v3) { - return new Promise(function(resolve, reject) { - v3 = o3[n2](v3), settle(resolve, reject, v3.done, v3.value); - }); - }; - } - function settle(resolve, reject, d5, v3) { - Promise.resolve(v3).then(function(v4) { - resolve({ value: v4, done: d5 }); - }, reject); - } - }; - __makeTemplateObject2 = function(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, "raw", { value: raw }); - } else { - cooked.raw = raw; - } - return cooked; - }; - var __setModuleDefault = Object.create ? function(o3, v3) { - Object.defineProperty(o3, "default", { enumerable: true, value: v3 }); - } : function(o3, v3) { - o3["default"] = v3; - }; - __importStar2 = function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k5 in mod) - if (k5 !== "default" && Object.prototype.hasOwnProperty.call(mod, k5)) - __createBinding2(result, mod, k5); - } - __setModuleDefault(result, mod); - return result; - }; - __importDefault2 = function(mod) { - return mod && mod.__esModule ? mod : { "default": mod }; - }; - __classPrivateFieldGet2 = function(receiver, state, kind, f4) { - if (kind === "a" && !f4) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f4 : !state.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f4 : kind === "a" ? f4.call(receiver) : f4 ? f4.value : state.get(receiver); - }; - __classPrivateFieldSet2 = function(receiver, state, value, kind, f4) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f4) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f4 : !state.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f4.call(receiver, value) : f4 ? f4.value = value : state.set(receiver, value), value; - }; - __classPrivateFieldIn2 = function(state, receiver) { - if (receiver === null || typeof receiver !== "object" && typeof receiver !== "function") - throw new TypeError("Cannot use 'in' operator on non-object"); - return typeof state === "function" ? receiver === state : state.has(receiver); - }; - exporter("__extends", __extends2); - exporter("__assign", __assign3); - exporter("__rest", __rest3); - exporter("__decorate", __decorate2); - exporter("__param", __param2); - exporter("__metadata", __metadata2); - exporter("__awaiter", __awaiter2); - exporter("__generator", __generator2); - exporter("__exportStar", __exportStar2); - exporter("__createBinding", __createBinding2); - exporter("__values", __values2); - exporter("__read", __read2); - exporter("__spread", __spread2); - exporter("__spreadArrays", __spreadArrays2); - exporter("__spreadArray", __spreadArray3); - exporter("__await", __await2); - exporter("__asyncGenerator", __asyncGenerator2); - exporter("__asyncDelegator", __asyncDelegator2); - exporter("__asyncValues", __asyncValues2); - exporter("__makeTemplateObject", __makeTemplateObject2); - exporter("__importStar", __importStar2); - exporter("__importDefault", __importDefault2); - exporter("__classPrivateFieldGet", __classPrivateFieldGet2); - exporter("__classPrivateFieldSet", __classPrivateFieldSet2); - exporter("__classPrivateFieldIn", __classPrivateFieldIn2); - }); - } -}); - -// node_modules/classnames/index.js -var require_classnames = __commonJS({ - "node_modules/classnames/index.js"(exports, module2) { - (function() { - "use strict"; - var hasOwn = {}.hasOwnProperty; - var nativeCodeString = "[native code]"; - function classNames8() { - var classes = []; - for (var i4 = 0; i4 < arguments.length; i4++) { - var arg = arguments[i4]; - if (!arg) - continue; - var argType = typeof arg; - if (argType === "string" || argType === "number") { - classes.push(arg); - } else if (Array.isArray(arg)) { - if (arg.length) { - var inner = classNames8.apply(null, arg); - if (inner) { - classes.push(inner); - } - } - } else if (argType === "object") { - if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) { - classes.push(arg.toString()); - continue; - } - for (var key2 in arg) { - if (hasOwn.call(arg, key2) && arg[key2]) { - classes.push(key2); - } - } - } - } - return classes.join(" "); - } - if (typeof module2 !== "undefined" && module2.exports) { - classNames8.default = classNames8; - module2.exports = classNames8; - } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) { - define("classnames", [], function() { - return classNames8; - }); - } else { - window.classNames = classNames8; - } - })(); +// node_modules/obsidian-dataview/lib/index.js +var require_lib = __commonJS({ + "node_modules/obsidian-dataview/lib/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + require("obsidian"); + var getAPI3 = (app2) => { + var _a2; + if (app2) + return (_a2 = app2.plugins.plugins.dataview) === null || _a2 === void 0 ? void 0 : _a2.api; + else + return window["DataviewAPI"]; + }; + var isPluginEnabled = (app2) => app2.plugins.enabledPlugins.has("dataview"); + exports.getAPI = getAPI3; + exports.isPluginEnabled = isPluginEnabled; } }); @@ -6808,7 +6808,7 @@ var require_sql_wasm = __commonJS({ var mb = { open: function(a5) { var b4 = ib[a5.node.rdev]; if (!b4) - throw new P3(43); + throw new P4(43); a5.tty = b4; a5.seekable = false; }, close: function(a5) { @@ -6817,15 +6817,15 @@ var require_sql_wasm = __commonJS({ a5.tty.Xa.fsync(a5.tty); }, read: function(a5, b4, c4, d5) { if (!a5.tty || !a5.tty.Xa.tb) - throw new P3(60); + throw new P4(60); for (var f4 = 0, h5 = 0; h5 < d5; h5++) { try { var k5 = a5.tty.Xa.tb(a5.tty); } catch (q5) { - throw new P3(29); + throw new P4(29); } if (void 0 === k5 && 0 === f4) - throw new P3(6); + throw new P4(6); if (null === k5 || void 0 === k5) break; f4++; @@ -6835,12 +6835,12 @@ var require_sql_wasm = __commonJS({ return f4; }, write: function(a5, b4, c4, d5) { if (!a5.tty || !a5.tty.Xa.jb) - throw new P3(60); + throw new P4(60); try { for (var f4 = 0; f4 < d5; f4++) a5.tty.Xa.jb(a5.tty, b4[c4 + f4]); } catch (h5) { - throw new P3(29); + throw new P4(29); } d5 && (a5.node.timestamp = Date.now()); return f4; @@ -6882,7 +6882,7 @@ var require_sql_wasm = __commonJS({ ); }, createNode: function(a5, b4, c4, d5) { if (24576 === (c4 & 61440) || 4096 === (c4 & 61440)) - throw new P3(63); + throw new P4(63); Q3.Qa || (Q3.Qa = { dir: { node: { Pa: Q3.Ga.Pa, Oa: Q3.Ga.Oa, lookup: Q3.Ga.lookup, ab: Q3.Ga.ab, rename: Q3.Ga.rename, unlink: Q3.Ga.unlink, rmdir: Q3.Ga.rmdir, readdir: Q3.Ga.readdir, symlink: Q3.Ga.symlink }, stream: { Ta: Q3.Ha.Ta } }, file: { node: { Pa: Q3.Ga.Pa, Oa: Q3.Ga.Oa }, stream: { Ta: Q3.Ha.Ta, read: Q3.Ha.read, write: Q3.Ha.write, lb: Q3.Ha.lb, bb: Q3.Ha.bb, cb: Q3.Ha.cb } }, link: { node: { Pa: Q3.Ga.Pa, Oa: Q3.Ga.Oa, readlink: Q3.Ga.readlink }, stream: {} }, pb: { node: { Pa: Q3.Ga.Pa, Oa: Q3.Ga.Oa }, stream: vb @@ -6939,7 +6939,7 @@ var require_sql_wasm = __commonJS({ } if (d5) for (var f4 in d5.Ia) - throw new P3(55); + throw new P4(55); } delete a5.parent.Ia[a5.name]; a5.parent.timestamp = Date.now(); @@ -6953,7 +6953,7 @@ var require_sql_wasm = __commonJS({ }, rmdir: function(a5, b4) { var c4 = yb(a5, b4), d5; for (d5 in c4.Ia) - throw new P3(55); + throw new P4(55); delete a5.Ia[b4]; a5.timestamp = Date.now(); }, readdir: function(a5) { @@ -6967,7 +6967,7 @@ var require_sql_wasm = __commonJS({ return a5; }, readlink: function(a5) { if (40960 !== (a5.mode & 61440)) - throw new P3(28); + throw new P4(28); return a5.link; } }, Ha: { read: function(a5, b4, c4, d5, f4) { var h5 = a5.node.Ia; @@ -7005,14 +7005,14 @@ var require_sql_wasm = __commonJS({ }, Ta: function(a5, b4, c4) { 1 === c4 ? b4 += a5.position : 2 === c4 && 32768 === (a5.node.mode & 61440) && (b4 += a5.node.Ma); if (0 > b4) - throw new P3(28); + throw new P4(28); return b4; }, lb: function(a5, b4, c4) { Q3.qb(a5.node, b4 + c4); a5.node.Ma = Math.max(a5.node.Ma, b4 + c4); }, bb: function(a5, b4, c4, d5, f4) { if (32768 !== (a5.node.mode & 61440)) - throw new P3(43); + throw new P4(43); a5 = a5.node.Ia; if (f4 & 2 || a5.buffer !== Na) { if (0 < c4 || c4 + b4 < a5.length) @@ -7025,25 +7025,25 @@ var require_sql_wasm = __commonJS({ b4 = 65536 * Math.ceil(b4 / 65536); (f4 = zb(65536, b4)) ? (u4.fill(0, f4, f4 + b4), b4 = f4) : b4 = 0; if (!b4) - throw new P3(48); + throw new P4(48); r3.set(a5, b4); } else c4 = false, b4 = a5.byteOffset; return { Fb: b4, vb: c4 }; }, cb: function(a5, b4, c4, d5, f4) { if (32768 !== (a5.node.mode & 61440)) - throw new P3(43); + throw new P4(43); if (f4 & 2) return 0; Q3.Ha.write(a5, b4, 0, d5, c4, false); return 0; - } } }, Ab = null, Bb = {}, R3 = [], Cb = 1, T6 = null, Db = true, P3 = null, xb = {}, U2 = (a5, b4 = {}) => { + } } }, Ab = null, Bb = {}, R3 = [], Cb = 1, T6 = null, Db = true, P4 = null, xb = {}, U2 = (a5, b4 = {}) => { a5 = hb("/", a5); if (!a5) return { path: "", node: null }; b4 = Object.assign({ rb: true, kb: 0 }, b4); if (8 < b4.kb) - throw new P3(32); + throw new P4(32); a5 = db(a5.split("/").filter((k5) => !!k5), false); for (var c4 = Ab, d5 = "/", f4 = 0; f4 < a5.length; f4++) { var h5 = f4 === a5.length - 1; @@ -7055,7 +7055,7 @@ var require_sql_wasm = __commonJS({ if (!h5 || b4.Sa) { for (h5 = 0; 40960 === (c4.mode & 61440); ) if (c4 = Eb(d5), d5 = hb(eb(d5), c4), c4 = U2(d5, { kb: b4.kb + 1 }).node, 40 < h5++) - throw new P3(32); + throw new P4(32); } } return { path: d5, node: c4 }; @@ -7085,7 +7085,7 @@ var require_sql_wasm = __commonJS({ }, yb = (a5, b4) => { var c4; if (c4 = (c4 = Hb(a5, "x")) ? c4 : a5.Ga.lookup ? 0 : 2) - throw new P3(c4, a5); + throw new P4(c4, a5); for (c4 = T6[Fb(a5.id, b4)]; c4; c4 = c4.Wa) { var d5 = c4.name; if (c4.parent.id === a5.id && d5 === b4) @@ -7136,7 +7136,7 @@ var require_sql_wasm = __commonJS({ for (; 4096 >= a5; a5++) if (!R3[a5]) return a5; - throw new P3(33); + throw new P4(33); }, Pb = (a5, b4) => { Ob || (Ob = function() { this.$a = {}; @@ -7161,21 +7161,21 @@ var require_sql_wasm = __commonJS({ a5.Ha = Bb[a5.node.rdev].Ha; a5.Ha.open && a5.Ha.open(a5); }, Ta: () => { - throw new P3(70); + throw new P4(70); } }, lb = (a5, b4) => { Bb[a5] = { Ha: b4 }; }, Qb = (a5, b4) => { var c4 = "/" === b4, d5 = !b4; if (c4 && Ab) - throw new P3(10); + throw new P4(10); if (!c4 && !d5) { var f4 = U2(b4, { rb: false }); b4 = f4.path; f4 = f4.node; if (f4.Va) - throw new P3(10); + throw new P4(10); if (16384 !== (f4.mode & 61440)) - throw new P3(54); + throw new P4(54); } b4 = { type: a5, Kb: {}, ub: b4, Eb: [] }; a5 = a5.Ra(b4); @@ -7186,91 +7186,91 @@ var require_sql_wasm = __commonJS({ var d5 = U2(a5, { parent: true }).node; a5 = fb(a5); if (!a5 || "." === a5 || ".." === a5) - throw new P3(28); + throw new P4(28); var f4 = Lb(d5, a5); if (f4) - throw new P3(f4); + throw new P4(f4); if (!d5.Ga.ab) - throw new P3(63); + throw new P4(63); return d5.Ga.ab(d5, a5, b4, c4); }, V3 = (a5, b4) => ha(a5, (void 0 !== b4 ? b4 : 511) & 1023 | 16384, 0), Rb = (a5, b4, c4) => { "undefined" == typeof c4 && (c4 = b4, b4 = 438); ha(a5, b4 | 8192, c4); }, Sb = (a5, b4) => { if (!hb(a5)) - throw new P3(44); + throw new P4(44); var c4 = U2(b4, { parent: true }).node; if (!c4) - throw new P3(44); + throw new P4(44); b4 = fb(b4); var d5 = Lb(c4, b4); if (d5) - throw new P3(d5); + throw new P4(d5); if (!c4.Ga.symlink) - throw new P3(63); + throw new P4(63); c4.Ga.symlink(c4, b4, a5); }, Tb = (a5) => { var b4 = U2(a5, { parent: true }).node; a5 = fb(a5); var c4 = yb(b4, a5), d5 = Mb(b4, a5, true); if (d5) - throw new P3(d5); + throw new P4(d5); if (!b4.Ga.rmdir) - throw new P3(63); + throw new P4(63); if (c4.Va) - throw new P3(10); + throw new P4(10); b4.Ga.rmdir(b4, a5); Gb(c4); }, ta = (a5) => { var b4 = U2(a5, { parent: true }).node; if (!b4) - throw new P3(44); + throw new P4(44); a5 = fb(a5); var c4 = yb(b4, a5), d5 = Mb(b4, a5, false); if (d5) - throw new P3(d5); + throw new P4(d5); if (!b4.Ga.unlink) - throw new P3(63); + throw new P4(63); if (c4.Va) - throw new P3(10); + throw new P4(10); b4.Ga.unlink(b4, a5); Gb(c4); }, Eb = (a5) => { a5 = U2(a5).node; if (!a5) - throw new P3(44); + throw new P4(44); if (!a5.Ga.readlink) - throw new P3(28); + throw new P4(28); return hb(ea(a5.parent), a5.Ga.readlink(a5)); }, Ub = (a5, b4) => { a5 = U2(a5, { Sa: !b4 }).node; if (!a5) - throw new P3(44); + throw new P4(44); if (!a5.Ga.Pa) - throw new P3(63); + throw new P4(63); return a5.Ga.Pa(a5); }, Vb = (a5) => Ub(a5, true), ia = (a5, b4) => { a5 = "string" == typeof a5 ? U2(a5, { Sa: true }).node : a5; if (!a5.Ga.Oa) - throw new P3(63); + throw new P4(63); a5.Ga.Oa(a5, { mode: b4 & 4095 | a5.mode & -4096, timestamp: Date.now() }); }, Wb = (a5, b4) => { if (0 > b4) - throw new P3(28); + throw new P4(28); a5 = "string" == typeof a5 ? U2(a5, { Sa: true }).node : a5; if (!a5.Ga.Oa) - throw new P3(63); + throw new P4(63); if (16384 === (a5.mode & 61440)) - throw new P3(31); + throw new P4(31); if (32768 !== (a5.mode & 61440)) - throw new P3(28); + throw new P4(28); var c4 = Hb(a5, "w"); if (c4) - throw new P3(c4); + throw new P4(c4); a5.Ga.Oa(a5, { size: b4, timestamp: Date.now() }); }, ja = (a5, b4, c4) => { if ("" === a5) - throw new P3(44); + throw new P4(44); if ("string" == typeof b4) { var d5 = Jb[b4]; if ("undefined" == typeof d5) @@ -7291,16 +7291,16 @@ var require_sql_wasm = __commonJS({ if (b4 & 64) if (f4) { if (b4 & 128) - throw new P3(20); + throw new P4(20); } else f4 = ha(a5, c4, 0), d5 = true; if (!f4) - throw new P3(44); + throw new P4(44); 8192 === (f4.mode & 61440) && (b4 &= -513); if (b4 & 65536 && 16384 !== (f4.mode & 61440)) - throw new P3(54); + throw new P4(54); if (!d5 && (c4 = f4 ? 40960 === (f4.mode & 61440) ? 32 : 16384 === (f4.mode & 61440) && ("r" !== Kb(b4) || b4 & 512) ? 31 : Hb(f4, Kb(b4)) : 44)) - throw new P3(c4); + throw new P4(c4); b4 & 512 && !d5 && Wb(f4, 0); b4 &= -131713; f4 = Pb({ node: f4, path: ea(f4), flags: b4, seekable: true, position: 0, Ha: f4.Ha, Ib: [], error: false }); @@ -7309,7 +7309,7 @@ var require_sql_wasm = __commonJS({ return f4; }, la = (a5) => { if (null === a5.fd) - throw new P3(8); + throw new P4(8); a5.hb && (a5.hb = null); try { a5.Ha.close && a5.Ha.close(a5); @@ -7321,49 +7321,49 @@ var require_sql_wasm = __commonJS({ a5.fd = null; }, Yb = (a5, b4, c4) => { if (null === a5.fd) - throw new P3(8); + throw new P4(8); if (!a5.seekable || !a5.Ha.Ta) - throw new P3(70); + throw new P4(70); if (0 != c4 && 1 != c4 && 2 != c4) - throw new P3(28); + throw new P4(28); a5.position = a5.Ha.Ta(a5, b4, c4); a5.Ib = []; }, Zb = (a5, b4, c4, d5, f4) => { if (0 > d5 || 0 > f4) - throw new P3(28); + throw new P4(28); if (null === a5.fd) - throw new P3(8); + throw new P4(8); if (1 === (a5.flags & 2097155)) - throw new P3(8); + throw new P4(8); if (16384 === (a5.node.mode & 61440)) - throw new P3(31); + throw new P4(31); if (!a5.Ha.read) - throw new P3(28); + throw new P4(28); var h5 = "undefined" != typeof f4; if (!h5) f4 = a5.position; else if (!a5.seekable) - throw new P3(70); + throw new P4(70); b4 = a5.Ha.read(a5, b4, c4, d5, f4); h5 || (a5.position += b4); return b4; }, ka = (a5, b4, c4, d5, f4) => { if (0 > d5 || 0 > f4) - throw new P3(28); + throw new P4(28); if (null === a5.fd) - throw new P3(8); + throw new P4(8); if (0 === (a5.flags & 2097155)) - throw new P3(8); + throw new P4(8); if (16384 === (a5.node.mode & 61440)) - throw new P3(31); + throw new P4(31); if (!a5.Ha.write) - throw new P3(28); + throw new P4(28); a5.seekable && a5.flags & 1024 && Yb(a5, 0, 2); var h5 = "undefined" != typeof f4; if (!h5) f4 = a5.position; else if (!a5.seekable) - throw new P3(70); + throw new P4(70); b4 = a5.Ha.write(a5, b4, c4, d5, f4, void 0); h5 || (a5.position += b4); return b4; @@ -7380,15 +7380,15 @@ var require_sql_wasm = __commonJS({ la(d5); return c4; }, $b = () => { - P3 || (P3 = function(a5, b4) { + P4 || (P4 = function(a5, b4) { this.node = b4; this.Hb = function(c4) { this.Ka = c4; }; this.Hb(a5); this.message = "FS error"; - }, P3.prototype = Error(), P3.prototype.constructor = P3, [44].forEach((a5) => { - xb[a5] = new P3(a5); + }, P4.prototype = Error(), P4.prototype.constructor = P4, [44].forEach((a5) => { + xb[a5] = new P4(a5); xb[a5].stack = ""; })); }, ac, fa = (a5, b4) => { @@ -7410,10 +7410,10 @@ var require_sql_wasm = __commonJS({ try { var S4 = b4(); } catch (nb) { - throw new P3(29); + throw new P4(29); } if (void 0 === S4 && 0 === w5) - throw new P3(6); + throw new P4(6); if (null === S4 || void 0 === S4) break; w5++; @@ -7426,7 +7426,7 @@ var require_sql_wasm = __commonJS({ try { c4(k5[q5 + w5]); } catch (A4) { - throw new P3(29); + throw new P4(29); } x5 && (h5.node.timestamp = Date.now()); return w5; @@ -7439,7 +7439,7 @@ var require_sql_wasm = __commonJS({ a5 = -100 === a5 ? "/" : X3(a5).path; if (0 == b4.length) { if (!c4) - throw new P3(44); + throw new P4(44); return a5; } return z5(a5 + "/" + b4); @@ -7489,7 +7489,7 @@ var require_sql_wasm = __commonJS({ function X3(a5) { a5 = R3[a5]; if (!a5) - throw new P3(8); + throw new P4(8); return a5; } function Jc(a5) { @@ -7686,7 +7686,7 @@ var require_sql_wasm = __commonJS({ b4.Ga = { lookup: (c4, d5) => { var f4 = R3[+d5]; if (!f4) - throw new P3(8); + throw new P4(8); c4 = { parent: null, Ra: { ub: "fake" }, Ga: { readlink: () => f4.path } }; return c4.parent = c4; } }; @@ -7699,7 +7699,7 @@ var require_sql_wasm = __commonJS({ try { return a5 = C3(a5), ia(a5, b4), 0; } catch (c4) { - if ("undefined" == typeof W2 || !(c4 instanceof P3)) + if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return -c4.Ka; } @@ -7718,7 +7718,7 @@ var require_sql_wasm = __commonJS({ c4 & 1 && (a5 += "x"); return a5 && Hb(d5, a5) ? -2 : 0; } catch (f4) { - if ("undefined" == typeof W2 || !(f4 instanceof P3)) + if ("undefined" == typeof W2 || !(f4 instanceof P4)) throw f4; return -f4.Ka; } @@ -7726,11 +7726,11 @@ var require_sql_wasm = __commonJS({ try { var c4 = R3[a5]; if (!c4) - throw new P3(8); + throw new P4(8); ia(c4.node, b4); return 0; } catch (d5) { - if ("undefined" == typeof W2 || !(d5 instanceof P3)) + if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } @@ -7738,15 +7738,15 @@ var require_sql_wasm = __commonJS({ try { var b4 = R3[a5]; if (!b4) - throw new P3(8); + throw new P4(8); var c4 = b4.node; var d5 = "string" == typeof c4 ? U2(c4, { Sa: true }).node : c4; if (!d5.Ga.Oa) - throw new P3(63); + throw new P4(63); d5.Ga.Oa(d5, { timestamp: Date.now() }); return 0; } catch (f4) { - if ("undefined" == typeof W2 || !(f4 instanceof P3)) + if ("undefined" == typeof W2 || !(f4 instanceof P4)) throw f4; return -f4.Ka; } @@ -7779,7 +7779,7 @@ var require_sql_wasm = __commonJS({ return -28; } } catch (h5) { - if ("undefined" == typeof W2 || !(h5 instanceof P3)) + if ("undefined" == typeof W2 || !(h5 instanceof P4)) throw h5; return -h5.Ka; } @@ -7788,7 +7788,7 @@ var require_sql_wasm = __commonJS({ var c4 = X3(a5); return ec(Ub, c4.path, b4); } catch (d5) { - if ("undefined" == typeof W2 || !(d5 instanceof P3)) + if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } @@ -7799,13 +7799,13 @@ var require_sql_wasm = __commonJS({ return -61; var d5 = R3[a5]; if (!d5) - throw new P3(8); + throw new P4(8); if (0 === (d5.flags & 2097155)) - throw new P3(28); + throw new P4(28); Wb(d5.node, b4); return 0; } catch (f4) { - if ("undefined" == typeof W2 || !(f4 instanceof P3)) + if ("undefined" == typeof W2 || !(f4 instanceof P4)) throw f4; return -f4.Ka; } @@ -7819,7 +7819,7 @@ var require_sql_wasm = __commonJS({ t4("/", u4, a5, b4); return c4; } catch (d5) { - if ("undefined" == typeof W2 || !(d5 instanceof P3)) + if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } @@ -7827,7 +7827,7 @@ var require_sql_wasm = __commonJS({ try { return a5 = C3(a5), ec(Vb, a5, b4); } catch (c4) { - if ("undefined" == typeof W2 || !(c4 instanceof P3)) + if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return -c4.Ka; } @@ -7835,7 +7835,7 @@ var require_sql_wasm = __commonJS({ try { return b4 = C3(b4), b4 = dc(a5, b4), b4 = z5(b4), "/" === b4[b4.length - 1] && (b4 = b4.substr(0, b4.length - 1)), V3(b4, c4), 0; } catch (d5) { - if ("undefined" == typeof W2 || !(d5 instanceof P3)) + if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } @@ -7846,7 +7846,7 @@ var require_sql_wasm = __commonJS({ b4 = dc(a5, b4, d5 & 4096); return ec(f4 ? Vb : Ub, b4, c4); } catch (h5) { - if ("undefined" == typeof W2 || !(h5 instanceof P3)) + if ("undefined" == typeof W2 || !(h5 instanceof P4)) throw h5; return -h5.Ka; } @@ -7858,7 +7858,7 @@ var require_sql_wasm = __commonJS({ var f4 = d5 ? Hc() : 0; return ja(b4, c4, f4).fd; } catch (h5) { - if ("undefined" == typeof W2 || !(h5 instanceof P3)) + if ("undefined" == typeof W2 || !(h5 instanceof P4)) throw h5; return -h5.Ka; } @@ -7876,7 +7876,7 @@ var require_sql_wasm = __commonJS({ r3[c4 + h5] = k5; return h5; } catch (q5) { - if ("undefined" == typeof W2 || !(q5 instanceof P3)) + if ("undefined" == typeof W2 || !(q5 instanceof P4)) throw q5; return -q5.Ka; } @@ -7884,7 +7884,7 @@ var require_sql_wasm = __commonJS({ try { return a5 = C3(a5), Tb(a5), 0; } catch (b4) { - if ("undefined" == typeof W2 || !(b4 instanceof P3)) + if ("undefined" == typeof W2 || !(b4 instanceof P4)) throw b4; return -b4.Ka; } @@ -7892,7 +7892,7 @@ var require_sql_wasm = __commonJS({ try { return a5 = C3(a5), ec(Ub, a5, b4); } catch (c4) { - if ("undefined" == typeof W2 || !(c4 instanceof P3)) + if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return -c4.Ka; } @@ -7900,7 +7900,7 @@ var require_sql_wasm = __commonJS({ try { return b4 = C3(b4), b4 = dc(a5, b4), 0 === c4 ? ta(b4) : 512 === c4 ? Tb(b4) : E3("Invalid flags passed to unlinkat"), 0; } catch (d5) { - if ("undefined" == typeof W2 || !(d5 instanceof P3)) + if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return -d5.Ka; } @@ -7922,7 +7922,7 @@ var require_sql_wasm = __commonJS({ q5.Ga.Oa(q5, { timestamp: Math.max(a5, k5) }); return 0; } catch (x5) { - if ("undefined" == typeof W2 || !(x5 instanceof P3)) + if ("undefined" == typeof W2 || !(x5 instanceof P4)) throw x5; return -x5.Ka; } @@ -7947,17 +7947,17 @@ var require_sql_wasm = __commonJS({ try { var k5 = X3(d5); if (0 !== (b4 & 2) && 0 === (c4 & 2) && 2 !== (k5.flags & 2097155)) - throw new P3(2); + throw new P4(2); if (1 === (k5.flags & 2097155)) - throw new P3(2); + throw new P4(2); if (!k5.Ha.bb) - throw new P3(43); + throw new P4(43); var q5 = k5.Ha.bb(k5, a5, f4, b4, c4); var x5 = q5.Fb; F3[h5 >> 2] = q5.vb; return x5; } catch (w5) { - if ("undefined" == typeof W2 || !(w5 instanceof P3)) + if ("undefined" == typeof W2 || !(w5 instanceof P4)) throw w5; return -w5.Ka; } @@ -7969,7 +7969,7 @@ var require_sql_wasm = __commonJS({ k5 && k5.Ha.cb && k5.Ha.cb(k5, q5, h5, b4, d5); } } catch (x5) { - if ("undefined" == typeof W2 || !(x5 instanceof P3)) + if ("undefined" == typeof W2 || !(x5 instanceof P4)) throw x5; return -x5.Ka; } @@ -8029,7 +8029,7 @@ var require_sql_wasm = __commonJS({ la(b4); return 0; } catch (c4) { - if ("undefined" == typeof W2 || !(c4 instanceof P3)) + if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return c4.Ka; } @@ -8039,7 +8039,7 @@ var require_sql_wasm = __commonJS({ r3[b4 >> 0] = c4.tty ? 2 : 16384 === (c4.mode & 61440) ? 3 : 40960 === (c4.mode & 61440) ? 7 : 4; return 0; } catch (d5) { - if ("undefined" == typeof W2 || !(d5 instanceof P3)) + if ("undefined" == typeof W2 || !(d5 instanceof P4)) throw d5; return d5.Ka; } @@ -8065,7 +8065,7 @@ var require_sql_wasm = __commonJS({ J2[d5 >> 2] = w5; return 0; } catch (A4) { - if ("undefined" == typeof W2 || !(A4 instanceof P3)) + if ("undefined" == typeof W2 || !(A4 instanceof P4)) throw A4; return A4.Ka; } @@ -8082,7 +8082,7 @@ var require_sql_wasm = __commonJS({ h5.hb && 0 === b4 && 0 === d5 && (h5.hb = null); return 0; } catch (k5) { - if ("undefined" == typeof W2 || !(k5 instanceof P3)) + if ("undefined" == typeof W2 || !(k5 instanceof P4)) throw k5; return k5.Ka; } @@ -8091,7 +8091,7 @@ var require_sql_wasm = __commonJS({ var b4 = X3(a5); return b4.Ha && b4.Ha.fsync ? b4.Ha.fsync(b4) : 0; } catch (c4) { - if ("undefined" == typeof W2 || !(c4 instanceof P3)) + if ("undefined" == typeof W2 || !(c4 instanceof P4)) throw c4; return c4.Ka; } @@ -8115,7 +8115,7 @@ var require_sql_wasm = __commonJS({ J2[d5 >> 2] = w5; return 0; } catch (A4) { - if ("undefined" == typeof W2 || !(A4 instanceof P3)) + if ("undefined" == typeof W2 || !(A4 instanceof P4)) throw A4; return A4.Ka; } @@ -8382,19578 +8382,16202 @@ __export(main_exports, { default: () => MakeMDPlugin }); module.exports = __toCommonJS(main_exports); -var import_obsidian39 = require("obsidian"); -// src/components/Spaces/FileTreeView.tsx -var import_obsidian29 = require("obsidian"); +// src/cm-extensions/flowEditor/atomic.ts +var import_state6 = require("@codemirror/state"); -// node_modules/preact/dist/preact.module.js -var n; -var l; -var u; -var i; -var t; -var o; -var r; -var f = {}; -var e = []; -var c = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; -function s(n2, l3) { - for (var u4 in l3) - n2[u4] = l3[u4]; - return n2; -} -function a(n2) { - var l3 = n2.parentNode; - l3 && l3.removeChild(n2); -} -function h(l3, u4, i4) { - var t4, o3, r3, f4 = {}; - for (r3 in u4) - "key" == r3 ? t4 = u4[r3] : "ref" == r3 ? o3 = u4[r3] : f4[r3] = u4[r3]; - if (arguments.length > 2 && (f4.children = arguments.length > 3 ? n.call(arguments, 2) : i4), "function" == typeof l3 && null != l3.defaultProps) - for (r3 in l3.defaultProps) - void 0 === f4[r3] && (f4[r3] = l3.defaultProps[r3]); - return v(l3, f4, t4, o3, null); -} -function v(n2, i4, t4, o3, r3) { - var f4 = { type: n2, props: i4, key: t4, ref: o3, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: null == r3 ? ++u : r3 }; - return null == r3 && null != l.vnode && l.vnode(f4), f4; -} -function y() { - return { current: null }; -} -function p(n2) { - return n2.children; -} -function d(n2, l3) { - this.props = n2, this.context = l3; -} -function _(n2, l3) { - if (null == l3) - return n2.__ ? _(n2.__, n2.__.__k.indexOf(n2) + 1) : null; - for (var u4; l3 < n2.__k.length; l3++) - if (null != (u4 = n2.__k[l3]) && null != u4.__e) - return u4.__e; - return "function" == typeof n2.type ? _(n2) : null; +// src/types/types.ts +var eventTypes = { + selectedFileChange: "mkmd-selected-file-change", + activeFileChange: "mkmd-active-file-change", + refreshView: "mkmd-refresh-view", + revealFile: "mkmd-reveal-file", + tagsChange: "mkmd-tags-change", + vaultChange: "mkmd-vault-change", + mdbChange: "mkmd-mdb-change", + spacesChange: "mkmd-spaces-change", + updateSections: "mkmd-update-sections", + settingsChanged: "mkmd-settings-changed", + spawnPortal: "mkmd-portal-spawn", + loadPortal: "mkmd-portal-load", + openFilePortal: "mkmd-portal-file", + focusPortal: "mkmd-portal-focus" +}; + +// src/dispatch/flowDispatch.ts +var createFlowEditorInElement = (id2, el, type, file, ref, from, to) => { + let evt = new CustomEvent(eventTypes.spawnPortal, { + detail: { id: id2, el, file, from, to, ref, type } + }); + activeWindow.dispatchEvent(evt); +}; +var loadFlowEditorByDOM = (el, view, id2) => { + let evt = new CustomEvent(eventTypes.loadPortal, { + detail: { id: id2, el, view } + }); + activeWindow.dispatchEvent(evt); +}; +var focusFlowEditor = (id2, top) => { + let evt = new CustomEvent(eventTypes.focusPortal, { + detail: { id: id2, parent: false, top } + }); + activeWindow.dispatchEvent(evt); +}; +var focusFlowEditorParent = (id2, top) => { + let evt = new CustomEvent(eventTypes.focusPortal, { + detail: { id: id2, parent: true, top } + }); + activeWindow.dispatchEvent(evt); +}; +var openFileFlowEditor = (file, source) => { + console.log(file, source); + let evt = new CustomEvent(eventTypes.openFilePortal, { + detail: { file, source } + }); + activeWindow.dispatchEvent(evt); +}; + +// src/cm-extensions/markSans/callout.tsx +var import_language = require("@codemirror/language"); +var import_state = require("@codemirror/state"); +var import_view = require("@codemirror/view"); + +// src/utils/uuid.js +function genId() { + return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace( + /[018]/g, + (c4) => (c4 ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c4 / 4).toString(16) + ); } -function k(n2) { - var l3, u4; - if (null != (n2 = n2.__) && null != n2.__c) { - for (n2.__e = n2.__c.base = null, l3 = 0; l3 < n2.__k.length; l3++) - if (null != (u4 = n2.__k[l3]) && null != u4.__e) { - n2.__e = n2.__c.base = u4.__e; - break; - } - return k(n2); + +// src/cm-extensions/markSans/callout.tsx +var portalTypeAnnotation = import_state.Annotation.define(); +var flowIDAnnotation = import_state.Annotation.define(); +var flowIDStateField = import_state.StateField.define({ + create: () => void 0, + update(value, tr) { + if (tr.annotation(flowIDAnnotation)) + return tr.annotation(flowIDAnnotation); + return value; } -} -function b(n2) { - (!n2.__d && (n2.__d = true) && t.push(n2) && !g.__r++ || o !== l.debounceRendering) && ((o = l.debounceRendering) || setTimeout)(g); -} -function g() { - for (var n2; g.__r = t.length; ) - n2 = t.sort(function(n3, l3) { - return n3.__v.__b - l3.__v.__b; - }), t = [], n2.some(function(n3) { - var l3, u4, i4, t4, o3, r3; - n3.__d && (o3 = (t4 = (l3 = n3).__v).__e, (r3 = l3.__P) && (u4 = [], (i4 = s({}, t4)).__v = t4.__v + 1, j(r3, t4, i4, l3.__n, void 0 !== r3.ownerSVGElement, null != t4.__h ? [o3] : null, u4, null == o3 ? _(t4) : o3, t4.__h), z(u4, t4), t4.__e != o3 && k(t4))); - }); -} -function w(n2, l3, u4, i4, t4, o3, r3, c4, s5, a5) { - var h5, y5, d5, k5, b4, g4, w5, x5 = i4 && i4.__k || e, C3 = x5.length; - for (u4.__k = [], h5 = 0; h5 < l3.length; h5++) - if (null != (k5 = u4.__k[h5] = null == (k5 = l3[h5]) || "boolean" == typeof k5 ? null : "string" == typeof k5 || "number" == typeof k5 || "bigint" == typeof k5 ? v(null, k5, null, null, k5) : Array.isArray(k5) ? v(p, { children: k5 }, null, null, null) : k5.__b > 0 ? v(k5.type, k5.props, k5.key, k5.ref ? k5.ref : null, k5.__v) : k5)) { - if (k5.__ = u4, k5.__b = u4.__b + 1, null === (d5 = x5[h5]) || d5 && k5.key == d5.key && k5.type === d5.type) - x5[h5] = void 0; - else - for (y5 = 0; y5 < C3; y5++) { - if ((d5 = x5[y5]) && k5.key == d5.key && k5.type === d5.type) { - x5[y5] = void 0; - break; - } - d5 = null; - } - j(n2, k5, d5 = d5 || f, t4, o3, r3, c4, s5, a5), b4 = k5.__e, (y5 = k5.ref) && d5.ref != y5 && (w5 || (w5 = []), d5.ref && w5.push(d5.ref, null, k5), w5.push(y5, k5.__c || b4, k5)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k5.type && k5.__k === d5.__k ? k5.__d = s5 = m(k5, s5, n2) : s5 = A(n2, k5, d5, x5, b4, s5), "function" == typeof u4.type && (u4.__d = s5)) : s5 && d5.__e == s5 && s5.parentNode != n2 && (s5 = _(d5)); +}); +var flowTypeStateField = import_state.StateField.define({ + create: () => "none", + update(value, tr) { + if (tr.annotation(portalTypeAnnotation)) + return tr.annotation(portalTypeAnnotation); + return value; + } +}); +var calloutField = import_state.StateField.define({ + create() { + return import_view.Decoration.none; + }, + update(value, tr) { + if (tr.state.field(flowTypeStateField) != "doc") { + return value; } - for (u4.__e = g4, h5 = C3; h5--; ) - null != x5[h5] && N(x5[h5], x5[h5]); - if (w5) - for (h5 = 0; h5 < w5.length; h5++) - M(w5[h5], w5[++h5], w5[++h5]); -} -function m(n2, l3, u4) { - for (var i4, t4 = n2.__k, o3 = 0; t4 && o3 < t4.length; o3++) - (i4 = t4[o3]) && (i4.__ = n2, l3 = "function" == typeof i4.type ? m(i4, l3, u4) : A(u4, i4, i4, t4, i4.__e, l3)); - return l3; -} -function x(n2, l3) { - return l3 = l3 || [], null == n2 || "boolean" == typeof n2 || (Array.isArray(n2) ? n2.some(function(n3) { - x(n3, l3); - }) : l3.push(n2)), l3; -} -function A(n2, l3, u4, i4, t4, o3) { - var r3, f4, e4; - if (void 0 !== l3.__d) - r3 = l3.__d, l3.__d = void 0; - else if (null == u4 || t4 != o3 || null == t4.parentNode) - n: - if (null == o3 || o3.parentNode !== n2) - n2.appendChild(t4), r3 = null; - else { - for (f4 = o3, e4 = 0; (f4 = f4.nextSibling) && e4 < i4.length; e4 += 1) - if (f4 == t4) - break n; - n2.insertBefore(t4, o3), r3 = o3; + let builder = new import_state.RangeSetBuilder(); + let nodes2 = []; + (0, import_language.syntaxTree)(tr.state).iterate({ + enter: ({ name, from, to }) => { + nodes2.push({ name, from, to }); } - return void 0 !== r3 ? r3 : t4.nextSibling; -} -function C(n2, l3, u4, i4, t4) { - var o3; - for (o3 in u4) - "children" === o3 || "key" === o3 || o3 in l3 || H(n2, o3, null, u4[o3], i4); - for (o3 in l3) - t4 && "function" != typeof l3[o3] || "children" === o3 || "key" === o3 || "value" === o3 || "checked" === o3 || u4[o3] === l3[o3] || H(n2, o3, l3[o3], u4[o3], i4); -} -function $(n2, l3, u4) { - "-" === l3[0] ? n2.setProperty(l3, u4) : n2[l3] = null == u4 ? "" : "number" != typeof u4 || c.test(l3) ? u4 : u4 + "px"; -} -function H(n2, l3, u4, i4, t4) { - var o3; - n: - if ("style" === l3) - if ("string" == typeof u4) - n2.style.cssText = u4; - else { - if ("string" == typeof i4 && (n2.style.cssText = i4 = ""), i4) - for (l3 in i4) - u4 && l3 in u4 || $(n2.style, l3, ""); - if (u4) - for (l3 in u4) - i4 && u4[l3] === i4[l3] || $(n2.style, l3, u4[l3]); + }); + const nextQuote = (ns, to) => { + const nq = ns.find( + (f4) => f4.from == to + 1 && f4.name.contains("HyperMD-quote") + ); + if (nq) { + return nextQuote(ns, nq.to); } - else if ("o" === l3[0] && "n" === l3[1]) - o3 = l3 !== (l3 = l3.replace(/Capture$/, "")), l3 = l3.toLowerCase() in n2 ? l3.toLowerCase().slice(2) : l3.slice(2), n2.l || (n2.l = {}), n2.l[l3 + o3] = u4, u4 ? i4 || n2.addEventListener(l3, o3 ? T : I, o3) : n2.removeEventListener(l3, o3 ? T : I, o3); - else if ("dangerouslySetInnerHTML" !== l3) { - if (t4) - l3 = l3.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); - else if ("href" !== l3 && "list" !== l3 && "form" !== l3 && "tabIndex" !== l3 && "download" !== l3 && l3 in n2) - try { - n2[l3] = null == u4 ? "" : u4; - break n; - } catch (n3) { - } - "function" == typeof u4 || (null == u4 || false === u4 && -1 == l3.indexOf("-") ? n2.removeAttribute(l3) : n2.setAttribute(l3, u4)); + return to; + }; + const previous = value.iter(); + const previousSpecs = []; + while (previous.value !== null) { + previousSpecs.push(previous.value.spec.widget.info); + previous.next(); } -} -function I(n2) { - this.l[n2.type + false](l.event ? l.event(n2) : n2); -} -function T(n2) { - this.l[n2.type + true](l.event ? l.event(n2) : n2); -} -function j(n2, u4, i4, t4, o3, r3, f4, e4, c4) { - var a5, h5, v3, y5, _5, k5, b4, g4, m5, x5, A4, C3, $3, H5, I4, T6 = u4.type; - if (void 0 !== u4.constructor) - return null; - null != i4.__h && (c4 = i4.__h, e4 = u4.__e = i4.__e, u4.__h = null, r3 = [e4]), (a5 = l.__b) && a5(u4); - try { - n: - if ("function" == typeof T6) { - if (g4 = u4.props, m5 = (a5 = T6.contextType) && t4[a5.__c], x5 = a5 ? m5 ? m5.props.value : a5.__ : t4, i4.__c ? b4 = (h5 = u4.__c = i4.__c).__ = h5.__E : ("prototype" in T6 && T6.prototype.render ? u4.__c = h5 = new T6(g4, x5) : (u4.__c = h5 = new d(g4, x5), h5.constructor = T6, h5.render = O), m5 && m5.sub(h5), h5.props = g4, h5.state || (h5.state = {}), h5.context = x5, h5.__n = t4, v3 = h5.__d = true, h5.__h = [], h5._sb = []), null == h5.__s && (h5.__s = h5.state), null != T6.getDerivedStateFromProps && (h5.__s == h5.state && (h5.__s = s({}, h5.__s)), s(h5.__s, T6.getDerivedStateFromProps(g4, h5.__s))), y5 = h5.props, _5 = h5.state, v3) - null == T6.getDerivedStateFromProps && null != h5.componentWillMount && h5.componentWillMount(), null != h5.componentDidMount && h5.__h.push(h5.componentDidMount); - else { - if (null == T6.getDerivedStateFromProps && g4 !== y5 && null != h5.componentWillReceiveProps && h5.componentWillReceiveProps(g4, x5), !h5.__e && null != h5.shouldComponentUpdate && false === h5.shouldComponentUpdate(g4, h5.__s, x5) || u4.__v === i4.__v) { - for (h5.props = g4, h5.state = h5.__s, u4.__v !== i4.__v && (h5.__d = false), h5.__v = u4, u4.__e = i4.__e, u4.__k = i4.__k, u4.__k.forEach(function(n3) { - n3 && (n3.__ = u4); - }), A4 = 0; A4 < h5._sb.length; A4++) - h5.__h.push(h5._sb[A4]); - h5._sb = [], h5.__h.length && f4.push(h5); - break n; - } - null != h5.componentWillUpdate && h5.componentWillUpdate(g4, h5.__s, x5), null != h5.componentDidUpdate && h5.__h.push(function() { - h5.componentDidUpdate(y5, _5, k5); - }); + let index = 0; + nodes2.map(({ name, from, to }) => { + if (name.contains("HyperMD-callout")) { + const existingCallout = previousSpecs[index]; + const endQuote = nextQuote(nodes2, to); + const lineStart = tr.state.doc.lineAt(from).number; + const lineEnd = tr.state.doc.lineAt(endQuote).number; + if (existingCallout) { + builder.add( + from, + endQuote + 1, + calloutBlock( + { from: lineStart, to: lineEnd }, + tr.state.sliceDoc(from, endQuote), + existingCallout.id + ) + ); + } else { + builder.add( + from, + endQuote + 1, + calloutBlock( + { from: lineStart, to: lineEnd }, + tr.state.sliceDoc(from, endQuote), + genId() + ) + ); } - if (h5.context = x5, h5.props = g4, h5.__v = u4, h5.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T6 && T6.prototype.render) { - for (h5.state = h5.__s, h5.__d = false, C3 && C3(u4), a5 = h5.render(h5.props, h5.state, h5.context), H5 = 0; H5 < h5._sb.length; H5++) - h5.__h.push(h5._sb[H5]); - h5._sb = []; - } else - do { - h5.__d = false, C3 && C3(u4), a5 = h5.render(h5.props, h5.state, h5.context), h5.state = h5.__s; - } while (h5.__d && ++$3 < 25); - h5.state = h5.__s, null != h5.getChildContext && (t4 = s(s({}, t4), h5.getChildContext())), v3 || null == h5.getSnapshotBeforeUpdate || (k5 = h5.getSnapshotBeforeUpdate(y5, _5)), I4 = null != a5 && a5.type === p && null == a5.key ? a5.props.children : a5, w(n2, Array.isArray(I4) ? I4 : [I4], u4, i4, t4, o3, r3, f4, e4, c4), h5.base = u4.__e, u4.__h = null, h5.__h.length && f4.push(h5), b4 && (h5.__E = h5.__ = null), h5.__e = false; - } else - null == r3 && u4.__v === i4.__v ? (u4.__k = i4.__k, u4.__e = i4.__e) : u4.__e = L(i4.__e, u4, i4, t4, o3, r3, f4, c4); - (a5 = l.diffed) && a5(u4); - } catch (n3) { - u4.__v = null, (c4 || null != r3) && (u4.__e = e4, u4.__h = !!c4, r3[r3.indexOf(e4)] = null), l.__e(n3, u4, i4); - } -} -function z(n2, u4) { - l.__c && l.__c(u4, n2), n2.some(function(u5) { - try { - n2 = u5.__h, u5.__h = [], n2.some(function(n3) { - n3.call(u5); - }); - } catch (n3) { - l.__e(n3, u5.__v); - } - }); -} -function L(l3, u4, i4, t4, o3, r3, e4, c4) { - var s5, h5, v3, y5 = i4.props, p3 = u4.props, d5 = u4.type, k5 = 0; - if ("svg" === d5 && (o3 = true), null != r3) { - for (; k5 < r3.length; k5++) - if ((s5 = r3[k5]) && "setAttribute" in s5 == !!d5 && (d5 ? s5.localName === d5 : 3 === s5.nodeType)) { - l3 = s5, r3[k5] = null; - break; + index++; } + }); + const dec = builder.finish(); + return dec; + }, + provide: (f4) => import_view.EditorView.decorations.from(f4) +}); +var CalloutWidget = class extends import_view.WidgetType { + constructor(info) { + super(); + this.info = info; } - if (null == l3) { - if (null === d5) - return document.createTextNode(p3); - l3 = o3 ? document.createElementNS("http://www.w3.org/2000/svg", d5) : document.createElement(d5, p3.is && p3), r3 = null, c4 = false; + eq(other) { + return other.info.id === this.info.id; } - if (null === d5) - y5 === p3 || c4 && l3.data === p3 || (l3.data = p3); - else { - if (r3 = r3 && n.call(l3.childNodes), h5 = (y5 = i4.props || f).dangerouslySetInnerHTML, v3 = p3.dangerouslySetInnerHTML, !c4) { - if (null != r3) - for (y5 = {}, k5 = 0; k5 < l3.attributes.length; k5++) - y5[l3.attributes[k5].name] = l3.attributes[k5].value; - (v3 || h5) && (v3 && (h5 && v3.__html == h5.__html || v3.__html === l3.innerHTML) || (l3.innerHTML = v3 && v3.__html || "")); - } - if (C(l3, p3, y5, o3, c4), v3) - u4.__k = []; - else if (k5 = u4.props.children, w(l3, Array.isArray(k5) ? k5 : [k5], u4, i4, t4, o3 && "foreignObject" !== d5, r3, e4, r3 ? r3[0] : i4.__k && _(i4, 0), c4), null != r3) - for (k5 = r3.length; k5--; ) - null != r3[k5] && a(r3[k5]); - c4 || ("value" in p3 && void 0 !== (k5 = p3.value) && (k5 !== l3.value || "progress" === d5 && !k5 || "option" === d5 && k5 !== y5.value) && H(l3, "value", k5, y5.value, false), "checked" in p3 && void 0 !== (k5 = p3.checked) && k5 !== l3.checked && H(l3, "checked", k5, y5.checked, false)); + toDOM() { + const parseTextToCallout = (text2) => { + if (!this.info.text) { + return { icon: "", title: "" }; + } + const stringArray = text2.split("\n"); + const titleRegex = RegExp(/.*\[!(\w*)\]\s(.*)/); + const title = titleRegex.exec(stringArray[0]); + if (!title || title.length < 3) { + return { icon: "", title: "" }; + } + return { + icon: title[1], + title: title[2] + }; + }; + const callOutData = parseTextToCallout(this.info.text); + const div = document.createElement("div"); + div.toggleClass("callout", true); + const divTitle = div.createDiv("div"); + divTitle.toggleClass("callout-title", true); + const div2 = div.createDiv("div"); + div2.toggleClass("callout-content", true); + div2.setAttribute("id", "mk-callout-" + this.info.id); + return div; } - return l3; -} -function M(n2, u4, i4) { - try { - "function" == typeof n2 ? n2(u4) : n2.current = u4; - } catch (n3) { - l.__e(n3, i4); +}; +var calloutBlock = (range, text2, id2) => import_view.Decoration.widget({ + widget: new CalloutWidget({ range, text: text2, id: id2 }), + block: true +}); + +// src/cm-extensions/flowEditor/flowEditor.tsx +var import_state5 = require("@codemirror/state"); +var import_view4 = require("@codemirror/view"); + +// src/cm-extensions/tooltip.ts +var import_view2 = require("@codemirror/view"); +var import_state2 = require("@codemirror/state"); +var ios = typeof navigator != "undefined" && !/Edge\/(\d+)/.exec(navigator.userAgent) && /Apple Computer/.test(navigator.vendor) && (/Mobile\/\w+/.test(navigator.userAgent) || navigator.maxTouchPoints > 2); +var Outside = "-10000px"; +var TooltipViewManager = class { + constructor(view, facet, createTooltipView) { + this.facet = facet; + this.createTooltipView = createTooltipView; + this.input = view.state.facet(facet); + this.tooltips = this.input.filter((t4) => t4); + this.tooltipViews = this.tooltips.map(createTooltipView); } -} -function N(n2, u4, i4) { - var t4, o3; - if (l.unmount && l.unmount(n2), (t4 = n2.ref) && (t4.current && t4.current !== n2.__e || M(t4, null, u4)), null != (t4 = n2.__c)) { - if (t4.componentWillUnmount) - try { - t4.componentWillUnmount(); - } catch (n3) { - l.__e(n3, u4); + update(update) { + let input = update.state.facet(this.facet); + let tooltips2 = input.filter((x5) => x5); + if (input === this.input) { + for (let t4 of this.tooltipViews) + if (t4.update) + t4.update(update); + return false; + } + let tooltipViews = []; + for (let i4 = 0; i4 < tooltips2.length; i4++) { + let tip = tooltips2[i4], known = -1; + if (!tip) + continue; + for (let i5 = 0; i5 < this.tooltips.length; i5++) { + let other = this.tooltips[i5]; + if (other && other.create == tip.create) + known = i5; } - t4.base = t4.__P = null, n2.__c = void 0; + if (known < 0) { + tooltipViews[i4] = this.createTooltipView(tip); + } else { + let tooltipView = tooltipViews[i4] = this.tooltipViews[known]; + if (tooltipView.update) + tooltipView.update(update); + } + } + for (let t4 of this.tooltipViews) + if (tooltipViews.indexOf(t4) < 0) + t4.dom.remove(); + this.input = input; + this.tooltips = tooltips2; + this.tooltipViews = tooltipViews; + return true; } - if (t4 = n2.__k) - for (o3 = 0; o3 < t4.length; o3++) - t4[o3] && N(t4[o3], u4, i4 || "function" != typeof n2.type); - i4 || null == n2.__e || a(n2.__e), n2.__ = n2.__e = n2.__d = void 0; -} -function O(n2, l3, u4) { - return this.constructor(n2, u4); -} -function P(u4, i4, t4) { - var o3, r3, e4; - l.__ && l.__(u4, i4), r3 = (o3 = "function" == typeof t4) ? null : t4 && t4.__k || i4.__k, e4 = [], j(i4, u4 = (!o3 && t4 || i4).__k = h(p, null, [u4]), r3 || f, f, void 0 !== i4.ownerSVGElement, !o3 && t4 ? [t4] : r3 ? null : i4.firstChild ? n.call(i4.childNodes) : null, e4, !o3 && t4 ? t4 : r3 ? r3.__e : i4.firstChild, o3), z(e4, u4); -} -function S(n2, l3) { - P(n2, l3, S); +}; +function tooltips(config = {}) { + return tooltipConfig.of(config); } -function q(l3, u4, i4) { - var t4, o3, r3, f4 = s({}, l3.props); - for (r3 in u4) - "key" == r3 ? t4 = u4[r3] : "ref" == r3 ? o3 = u4[r3] : f4[r3] = u4[r3]; - return arguments.length > 2 && (f4.children = arguments.length > 3 ? n.call(arguments, 2) : i4), v(l3.type, f4, t4 || l3.key, o3 || l3.ref, null); +function windowSpace() { + return { top: 0, left: 0, bottom: innerHeight, right: innerWidth }; } -function B(n2, l3) { - var u4 = { __c: l3 = "__cC" + r++, __: n2, Consumer: function(n3, l4) { - return n3.children(l4); - }, Provider: function(n3) { - var u5, i4; - return this.getChildContext || (u5 = [], (i4 = {})[l3] = this, this.getChildContext = function() { - return i4; - }, this.shouldComponentUpdate = function(n4) { - this.props.value !== n4.value && u5.some(b); - }, this.sub = function(n4) { - u5.push(n4); - var l4 = n4.componentWillUnmount; - n4.componentWillUnmount = function() { - u5.splice(u5.indexOf(n4), 1), l4 && l4.call(n4); - }; - }), n3.children; - } }; - return u4.Provider.__ = u4.Consumer.contextType = u4; -} -n = e.slice, l = { __e: function(n2, l3, u4, i4) { - for (var t4, o3, r3; l3 = l3.__; ) - if ((t4 = l3.__c) && !t4.__) - try { - if ((o3 = t4.constructor) && null != o3.getDerivedStateFromError && (t4.setState(o3.getDerivedStateFromError(n2)), r3 = t4.__d), null != t4.componentDidCatch && (t4.componentDidCatch(n2, i4 || {}), r3 = t4.__d), r3) - return t4.__E = t4; - } catch (l4) { - n2 = l4; - } - throw n2; -} }, u = 0, i = function(n2) { - return null != n2 && void 0 === n2.constructor; -}, d.prototype.setState = function(n2, l3) { - var u4; - u4 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = s({}, this.state), "function" == typeof n2 && (n2 = n2(s({}, u4), this.props)), n2 && s(u4, n2), null != n2 && this.__v && (l3 && this._sb.push(l3), b(this)); -}, d.prototype.forceUpdate = function(n2) { - this.__v && (this.__e = true, n2 && this.__h.push(n2), b(this)); -}, d.prototype.render = p, t = [], g.__r = 0, r = 0; - -// node_modules/preact/hooks/dist/hooks.module.js -var t2; -var r2; -var u2; -var i2; -var o2 = 0; -var f2 = []; -var c2 = []; -var e2 = l.__b; -var a2 = l.__r; -var v2 = l.diffed; -var l2 = l.__c; -var m2 = l.unmount; -function d2(t4, u4) { - l.__h && l.__h(r2, t4, o2 || u4), o2 = 0; - var i4 = r2.__H || (r2.__H = { __: [], __h: [] }); - return t4 >= i4.__.length && i4.__.push({ __V: c2 }), i4.__[t4]; -} -function p2(n2) { - return o2 = 1, y2(B2, n2); -} -function y2(n2, u4, i4) { - var o3 = d2(t2++, 2); - if (o3.t = n2, !o3.__c && (o3.__ = [i4 ? i4(u4) : B2(void 0, u4), function(n3) { - var t4 = o3.__N ? o3.__N[0] : o3.__[0], r3 = o3.t(t4, n3); - t4 !== r3 && (o3.__N = [r3, o3.__[1]], o3.__c.setState({})); - }], o3.__c = r2, !r2.u)) { - r2.u = true; - var f4 = r2.shouldComponentUpdate; - r2.shouldComponentUpdate = function(n3, t4, r3) { - if (!o3.__c.__H) - return true; - var u5 = o3.__c.__H.__.filter(function(n4) { - return n4.__c; - }); - if (u5.every(function(n4) { - return !n4.__N; - })) - return !f4 || f4.call(this, n3, t4, r3); - var i5 = false; - return u5.forEach(function(n4) { - if (n4.__N) { - var t5 = n4.__[0]; - n4.__ = n4.__N, n4.__N = void 0, t5 !== n4.__[0] && (i5 = true); - } - }), !(!i5 && o3.__c.props === n3) && (!f4 || f4.call(this, n3, t4, r3)); +var tooltipConfig = import_state2.Facet.define({ + combine: (values) => { + var _a2, _b2, _c2; + return { + position: ios ? "absolute" : ((_a2 = values.find((conf) => conf.position)) == null ? void 0 : _a2.position) || "fixed", + parent: ((_b2 = values.find((conf) => conf.parent)) == null ? void 0 : _b2.parent) || null, + tooltipSpace: ((_c2 = values.find((conf) => conf.tooltipSpace)) == null ? void 0 : _c2.tooltipSpace) || windowSpace }; } - return o3.__N || o3.__; -} -function h2(u4, i4) { - var o3 = d2(t2++, 3); - !l.__s && z2(o3.__H, i4) && (o3.__ = u4, o3.i = i4, r2.__H.__h.push(o3)); -} -function s2(u4, i4) { - var o3 = d2(t2++, 4); - !l.__s && z2(o3.__H, i4) && (o3.__ = u4, o3.i = i4, r2.__h.push(o3)); -} -function _2(n2) { - return o2 = 5, F(function() { - return { current: n2 }; - }, []); -} -function A2(n2, t4, r3) { - o2 = 6, s2(function() { - return "function" == typeof n2 ? (n2(t4()), function() { - return n2(null); - }) : n2 ? (n2.current = t4(), function() { - return n2.current = null; - }) : void 0; - }, null == r3 ? r3 : r3.concat(n2)); -} -function F(n2, r3) { - var u4 = d2(t2++, 7); - return z2(u4.__H, r3) ? (u4.__V = n2(), u4.i = r3, u4.__h = n2, u4.__V) : u4.__; -} -function T2(n2, t4) { - return o2 = 8, F(function() { - return n2; - }, t4); -} -function q2(n2) { - var u4 = r2.context[n2.__c], i4 = d2(t2++, 9); - return i4.c = n2, u4 ? (null == i4.__ && (i4.__ = true, u4.sub(r2)), u4.props.value) : n2.__; -} -function x2(t4, r3) { - l.useDebugValue && l.useDebugValue(r3 ? r3(t4) : t4); -} -function V() { - var n2 = d2(t2++, 11); - if (!n2.__) { - for (var u4 = r2.__v; null !== u4 && !u4.__m && null !== u4.__; ) - u4 = u4.__; - var i4 = u4.__m || (u4.__m = [0, 0]); - n2.__ = "P" + i4[0] + "-" + i4[1]++; - } - return n2.__; -} -function b2() { - for (var t4; t4 = f2.shift(); ) - if (t4.__P && t4.__H) - try { - t4.__H.__h.forEach(k2), t4.__H.__h.forEach(w2), t4.__H.__h = []; - } catch (r3) { - t4.__H.__h = [], l.__e(r3, t4.__v); +}); +var tooltipPlugin = import_view2.ViewPlugin.fromClass( + class { + constructor(view) { + this.view = view; + this.inView = true; + this.lastTransaction = 0; + this.measureTimeout = -1; + var _a2; + let config = view.state.facet(tooltipConfig); + this.position = config.position; + this.parent = config.parent; + this.classes = view.themeClasses; + this.createContainer(); + this.measureReq = { + read: this.readMeasure.bind(this), + write: this.writeMeasure.bind(this), + key: this + }; + this.manager = new TooltipViewManager( + view, + showTooltip, + (t4) => this.createTooltip(t4) + ); + this.intersectionObserver = typeof IntersectionObserver == "function" ? new IntersectionObserver( + (entries) => { + if (Date.now() > this.lastTransaction - 50 && entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1) + this.measureSoon(); + }, + { threshold: [1] } + ) : null; + this.observeIntersection(); + (_a2 = view.dom.ownerDocument.defaultView) == null ? void 0 : _a2.addEventListener( + "resize", + this.measureSoon = this.measureSoon.bind(this) + ); + this.maybeMeasure(); + } + createContainer() { + if (this.parent) { + this.container = document.createElement("div"); + this.container.style.position = "relative"; + this.container.className = this.view.themeClasses; + this.parent.appendChild(this.container); + } else { + this.container = this.view.dom; } -} -l.__b = function(n2) { - r2 = null, e2 && e2(n2); -}, l.__r = function(n2) { - a2 && a2(n2), t2 = 0; - var i4 = (r2 = n2.__c).__H; - i4 && (u2 === r2 ? (i4.__h = [], r2.__h = [], i4.__.forEach(function(n3) { - n3.__N && (n3.__ = n3.__N), n3.__V = c2, n3.__N = n3.i = void 0; - })) : (i4.__h.forEach(k2), i4.__h.forEach(w2), i4.__h = [])), u2 = r2; -}, l.diffed = function(t4) { - v2 && v2(t4); - var o3 = t4.__c; - o3 && o3.__H && (o3.__H.__h.length && (1 !== f2.push(o3) && i2 === l.requestAnimationFrame || ((i2 = l.requestAnimationFrame) || j2)(b2)), o3.__H.__.forEach(function(n2) { - n2.i && (n2.__H = n2.i), n2.__V !== c2 && (n2.__ = n2.__V), n2.i = void 0, n2.__V = c2; - })), u2 = r2 = null; -}, l.__c = function(t4, r3) { - r3.some(function(t5) { - try { - t5.__h.forEach(k2), t5.__h = t5.__h.filter(function(n2) { - return !n2.__ || w2(n2); - }); - } catch (u4) { - r3.some(function(n2) { - n2.__h && (n2.__h = []); - }), r3 = [], l.__e(u4, t5.__v); } - }), l2 && l2(t4, r3); -}, l.unmount = function(t4) { - m2 && m2(t4); - var r3, u4 = t4.__c; - u4 && u4.__H && (u4.__H.__.forEach(function(n2) { - try { - k2(n2); - } catch (n3) { - r3 = n3; + observeIntersection() { + if (this.intersectionObserver) { + this.intersectionObserver.disconnect(); + for (let tooltip of this.manager.tooltipViews) + this.intersectionObserver.observe(tooltip.dom); + } } - }), u4.__H = void 0, r3 && l.__e(r3, u4.__v)); -}; -var g2 = "function" == typeof requestAnimationFrame; -function j2(n2) { - var t4, r3 = function() { - clearTimeout(u4), g2 && cancelAnimationFrame(t4), setTimeout(n2); - }, u4 = setTimeout(r3, 100); - g2 && (t4 = requestAnimationFrame(r3)); -} -function k2(n2) { - var t4 = r2, u4 = n2.__c; - "function" == typeof u4 && (n2.__c = void 0, u4()), r2 = t4; -} -function w2(n2) { - var t4 = r2; - n2.__c = n2.__(), r2 = t4; -} -function z2(n2, t4) { - return !n2 || n2.length !== t4.length || t4.some(function(t5, r3) { - return t5 !== n2[r3]; - }); -} -function B2(n2, t4) { - return "function" == typeof t4 ? t4(n2) : t4; -} - -// node_modules/preact/compat/dist/compat.module.js -function g3(n2, t4) { - for (var e4 in t4) - n2[e4] = t4[e4]; - return n2; -} -function C2(n2, t4) { - for (var e4 in n2) - if ("__source" !== e4 && !(e4 in t4)) - return true; - for (var r3 in t4) - if ("__source" !== r3 && n2[r3] !== t4[r3]) - return true; - return false; -} -function E(n2, t4) { - return n2 === t4 && (0 !== n2 || 1 / n2 == 1 / t4) || n2 != n2 && t4 != t4; -} -function w3(n2) { - this.props = n2; -} -function R(n2, e4) { - function r3(n3) { - var t4 = this.props.ref, r4 = t4 == n3.ref; - return !r4 && t4 && (t4.call ? t4(null) : t4.current = null), e4 ? !e4(this.props, n3) || !r4 : C2(this.props, n3); - } - function u4(e5) { - return this.shouldComponentUpdate = r3, h(n2, e5); - } - return u4.displayName = "Memo(" + (n2.displayName || n2.name) + ")", u4.prototype.isReactComponent = true, u4.__f = true, u4; -} -(w3.prototype = new d()).isPureReactComponent = true, w3.prototype.shouldComponentUpdate = function(n2, t4) { - return C2(this.props, n2) || C2(this.state, t4); -}; -var x3 = l.__b; -l.__b = function(n2) { - n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x3 && x3(n2); -}; -var N2 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911; -function k3(n2) { - function t4(t5) { - var e4 = g3({}, t5); - return delete e4.ref, n2(e4, t5.ref || null); - } - return t4.$$typeof = N2, t4.render = t4, t4.prototype.isReactComponent = t4.__f = true, t4.displayName = "ForwardRef(" + (n2.displayName || n2.name) + ")", t4; -} -var A3 = function(n2, t4) { - return null == n2 ? null : x(x(n2).map(t4)); -}; -var O2 = { map: A3, forEach: A3, count: function(n2) { - return n2 ? x(n2).length : 0; -}, only: function(n2) { - var t4 = x(n2); - if (1 !== t4.length) - throw "Children.only"; - return t4[0]; -}, toArray: x }; -var T3 = l.__e; -l.__e = function(n2, t4, e4, r3) { - if (n2.then) { - for (var u4, o3 = t4; o3 = o3.__; ) - if ((u4 = o3.__c) && u4.__c) - return null == t4.__e && (t4.__e = e4.__e, t4.__k = e4.__k), u4.__c(n2, t4); - } - T3(n2, t4, e4, r3); -}; -var I2 = l.unmount; -function L2(n2, t4, e4) { - return n2 && (n2.__c && n2.__c.__H && (n2.__c.__H.__.forEach(function(n3) { - "function" == typeof n3.__c && n3.__c(); - }), n2.__c.__H = null), null != (n2 = g3({}, n2)).__c && (n2.__c.__P === e4 && (n2.__c.__P = t4), n2.__c = null), n2.__k = n2.__k && n2.__k.map(function(n3) { - return L2(n3, t4, e4); - })), n2; -} -function U(n2, t4, e4) { - return n2 && (n2.__v = null, n2.__k = n2.__k && n2.__k.map(function(n3) { - return U(n3, t4, e4); - }), n2.__c && n2.__c.__P === t4 && (n2.__e && e4.insertBefore(n2.__e, n2.__d), n2.__c.__e = true, n2.__c.__P = e4)), n2; -} -function D() { - this.__u = 0, this.t = null, this.__b = null; -} -function F2(n2) { - var t4 = n2.__.__c; - return t4 && t4.__a && t4.__a(n2); -} -function M2(n2) { - var e4, r3, u4; - function o3(o4) { - if (e4 || (e4 = n2()).then(function(n3) { - r3 = n3.default || n3; - }, function(n3) { - u4 = n3; - }), u4) - throw u4; - if (!r3) - throw e4; - return h(r3, o4); - } - return o3.displayName = "Lazy", o3.__f = true, o3; -} -function V2() { - this.u = null, this.o = null; -} -l.unmount = function(n2) { - var t4 = n2.__c; - t4 && t4.__R && t4.__R(), t4 && true === n2.__h && (n2.type = null), I2 && I2(n2); -}, (D.prototype = new d()).__c = function(n2, t4) { - var e4 = t4.__c, r3 = this; - null == r3.t && (r3.t = []), r3.t.push(e4); - var u4 = F2(r3.__v), o3 = false, i4 = function() { - o3 || (o3 = true, e4.__R = null, u4 ? u4(l3) : l3()); - }; - e4.__R = i4; - var l3 = function() { - if (!--r3.__u) { - if (r3.state.__a) { - var n3 = r3.state.__a; - r3.__v.__k[0] = U(n3, n3.__c.__P, n3.__c.__O); + measureSoon() { + if (this.measureTimeout < 0) + this.measureTimeout = setTimeout(() => { + this.measureTimeout = -1; + this.maybeMeasure(); + }, 50); + } + update(update) { + if (update.transactions.length) + this.lastTransaction = Date.now(); + let updated = this.manager.update(update); + if (updated) + this.observeIntersection(); + let shouldMeasure = updated || update.geometryChanged; + let newConfig = update.state.facet(tooltipConfig); + if (newConfig.position != this.position) { + this.position = newConfig.position; + for (let t4 of this.manager.tooltipViews) + t4.dom.style.position = this.position; + shouldMeasure = true; } - var t5; - for (r3.setState({ __a: r3.__b = null }); t5 = r3.t.pop(); ) - t5.forceUpdate(); + if (newConfig.parent != this.parent) { + if (this.parent) + this.container.remove(); + this.parent = newConfig.parent; + this.createContainer(); + for (let t4 of this.manager.tooltipViews) + this.container.appendChild(t4.dom); + shouldMeasure = true; + } else if (this.parent && this.view.themeClasses != this.classes) { + this.classes = this.container.className = this.view.themeClasses; + } + if (shouldMeasure) + this.maybeMeasure(); } - }, c4 = true === t4.__h; - r3.__u++ || c4 || r3.setState({ __a: r3.__b = r3.__v.__k[0] }), n2.then(i4, i4); -}, D.prototype.componentWillUnmount = function() { - this.t = []; -}, D.prototype.render = function(n2, e4) { - if (this.__b) { - if (this.__v.__k) { - var r3 = document.createElement("div"), o3 = this.__v.__k[0].__c; - this.__v.__k[0] = L2(this.__b, r3, o3.__O = o3.__P); + createTooltip(tooltip) { + let tooltipView = tooltip.create(this.view); + tooltipView.dom.classList.add("cm-tooltip"); + if (tooltip.arrow && !tooltipView.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")) { + let arrow = document.createElement("div"); + arrow.className = "cm-tooltip-arrow"; + tooltipView.dom.appendChild(arrow); + } + tooltipView.dom.style.position = this.position; + tooltipView.dom.style.top = Outside; + this.container.appendChild(tooltipView.dom); + if (tooltipView.mount) + tooltipView.mount(this.view); + return tooltipView; } - this.__b = null; - } - var i4 = e4.__a && h(p, null, n2.fallback); - return i4 && (i4.__h = null), [h(p, null, e4.__a ? null : n2.children), i4]; -}; -var W = function(n2, t4, e4) { - if (++e4[1] === e4[0] && n2.o.delete(t4), n2.props.revealOrder && ("t" !== n2.props.revealOrder[0] || !n2.o.size)) - for (e4 = n2.u; e4; ) { - for (; e4.length > 3; ) - e4.pop()(); - if (e4[1] < e4[0]) - break; - n2.u = e4 = e4[2]; + destroy() { + var _a2, _b2; + (_a2 = this.view.dom.ownerDocument.defaultView) == null ? void 0 : _a2.removeEventListener( + "resize", + this.measureSoon + ); + for (let { dom } of this.manager.tooltipViews) + dom.remove(); + (_b2 = this.intersectionObserver) == null ? void 0 : _b2.disconnect(); + clearTimeout(this.measureTimeout); } -}; -function P2(n2) { - return this.getChildContext = function() { - return n2.context; - }, n2.children; -} -function $2(n2) { - var e4 = this, r3 = n2.i; - e4.componentWillUnmount = function() { - P(null, e4.l), e4.l = null, e4.i = null; - }, e4.i && e4.i !== r3 && e4.componentWillUnmount(), n2.__v ? (e4.l || (e4.i = r3, e4.l = { nodeType: 1, parentNode: r3, childNodes: [], appendChild: function(n3) { - this.childNodes.push(n3), e4.i.appendChild(n3); - }, insertBefore: function(n3, t4) { - this.childNodes.push(n3), e4.i.appendChild(n3); - }, removeChild: function(n3) { - this.childNodes.splice(this.childNodes.indexOf(n3) >>> 1, 1), e4.i.removeChild(n3); - } }), P(h(P2, { context: e4.context }, n2.__v), e4.l)) : e4.l && e4.componentWillUnmount(); -} -function j3(n2, e4) { - var r3 = h($2, { __v: n2, i: e4 }); - return r3.containerInfo = e4, r3; -} -(V2.prototype = new d()).__a = function(n2) { - var t4 = this, e4 = F2(t4.__v), r3 = t4.o.get(n2); - return r3[0]++, function(u4) { - var o3 = function() { - t4.props.revealOrder ? (r3.push(u4), W(t4, n2, r3)) : u4(); - }; - e4 ? e4(o3) : o3(); - }; -}, V2.prototype.render = function(n2) { - this.u = null, this.o = /* @__PURE__ */ new Map(); - var t4 = x(n2.children); - n2.revealOrder && "b" === n2.revealOrder[0] && t4.reverse(); - for (var e4 = t4.length; e4--; ) - this.o.set(t4[e4], this.u = [1, 0, this.u]); - return n2.children; -}, V2.prototype.componentDidUpdate = V2.prototype.componentDidMount = function() { - var n2 = this; - this.o.forEach(function(t4, e4) { - W(n2, e4, t4); - }); -}; -var z3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; -var B3 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; -var H2 = "undefined" != typeof document; -var Z = function(n2) { - return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/i : /fil|che|ra/i).test(n2); -}; -function Y(n2, t4, e4) { - return null == t4.__k && (t4.textContent = ""), P(n2, t4), "function" == typeof e4 && e4(), n2 ? n2.__c : null; -} -function q3(n2, t4, e4) { - return S(n2, t4), "function" == typeof e4 && e4(), n2 ? n2.__c : null; -} -d.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t4) { - Object.defineProperty(d.prototype, t4, { configurable: true, get: function() { - return this["UNSAFE_" + t4]; - }, set: function(n2) { - Object.defineProperty(this, t4, { configurable: true, writable: true, value: n2 }); - } }); -}); -var G = l.event; -function J() { -} -function K() { - return this.cancelBubble; -} -function Q() { - return this.defaultPrevented; -} -l.event = function(n2) { - return G && (n2 = G(n2)), n2.persist = J, n2.isPropagationStopped = K, n2.isDefaultPrevented = Q, n2.nativeEvent = n2; -}; -var X; -var nn = { configurable: true, get: function() { - return this.class; -} }; -var tn = l.vnode; -l.vnode = function(n2) { - var t4 = n2.type, e4 = n2.props, u4 = e4; - if ("string" == typeof t4) { - var o3 = -1 === t4.indexOf("-"); - for (var i4 in u4 = {}, e4) { - var l3 = e4[i4]; - H2 && "children" === i4 && "noscript" === t4 || "value" === i4 && "defaultValue" in e4 && null == l3 || ("defaultValue" === i4 && "value" in e4 && null == e4.value ? i4 = "value" : "download" === i4 && true === l3 ? l3 = "" : /ondoubleclick/i.test(i4) ? i4 = "ondblclick" : /^onchange(textarea|input)/i.test(i4 + t4) && !Z(e4.type) ? i4 = "oninput" : /^onfocus$/i.test(i4) ? i4 = "onfocusin" : /^onblur$/i.test(i4) ? i4 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i4) ? i4 = i4.toLowerCase() : o3 && B3.test(i4) ? i4 = i4.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : null === l3 && (l3 = void 0), /^oninput$/i.test(i4) && (i4 = i4.toLowerCase(), u4[i4] && (i4 = "oninputCapture")), u4[i4] = l3); + readMeasure() { + let editor = this.view.dom.getBoundingClientRect(); + return { + editor, + parent: this.parent ? this.container.getBoundingClientRect() : editor, + pos: this.manager.tooltips.map((t4, i4) => { + let tv = this.manager.tooltipViews[i4]; + return tv.getCoords ? tv.getCoords(t4.pos) : this.view.coordsAtPos(t4.pos); + }), + size: this.manager.tooltipViews.map( + ({ dom }) => dom.getBoundingClientRect() + ), + space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view) + }; } - "select" == t4 && u4.multiple && Array.isArray(u4.value) && (u4.value = x(e4.children).forEach(function(n3) { - n3.props.selected = -1 != u4.value.indexOf(n3.props.value); - })), "select" == t4 && null != u4.defaultValue && (u4.value = x(e4.children).forEach(function(n3) { - n3.props.selected = u4.multiple ? -1 != u4.defaultValue.indexOf(n3.props.value) : u4.defaultValue == n3.props.value; - })), n2.props = u4, e4.class != e4.className && (nn.enumerable = "className" in e4, null != e4.className && (u4.class = e4.className), Object.defineProperty(u4, "className", nn)); - } - n2.$$typeof = z3, tn && tn(n2); -}; -var en = l.__r; -l.__r = function(n2) { - en && en(n2), X = n2.__c; -}; -var rn = { ReactCurrentDispatcher: { current: { readContext: function(n2) { - return X.__n[n2.__c].props.value; -} } } }; -function on(n2) { - return h.bind(null, n2); -} -function ln(n2) { - return !!n2 && n2.$$typeof === z3; -} -function cn(n2) { - return ln(n2) ? q.apply(null, arguments) : n2; -} -function fn(n2) { - return !!n2.__k && (P(null, n2), true); -} -function an(n2) { - return n2 && (n2.base || 1 === n2.nodeType && n2) || null; -} -var sn = function(n2, t4) { - return n2(t4); -}; -var hn = function(n2, t4) { - return n2(t4); -}; -var vn = p; -function dn(n2) { - n2(); -} -function pn(n2) { - return n2; -} -function mn() { - return [false, dn]; -} -var yn = s2; -function _n(n2, t4) { - var e4 = t4(), r3 = p2({ h: { __: e4, v: t4 } }), u4 = r3[0].h, o3 = r3[1]; - return s2(function() { - u4.__ = e4, u4.v = t4, E(u4.__, t4()) || o3({ h: u4 }); - }, [n2, e4, t4]), h2(function() { - return E(u4.__, u4.v()) || o3({ h: u4 }), n2(function() { - E(u4.__, u4.v()) || o3({ h: u4 }); - }); - }, [n2]), e4; -} -var bn = { useState: p2, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A2, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x2, version: "17.0.2", Children: O2, render: Y, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn, Suspense: D, SuspenseList: V2, lazy: M2, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn }; - -// node_modules/preact/compat/client.mjs -function createRoot(container) { - return { - render(children) { - Y(children, container); - }, - unmount() { - fn(container); + writeMeasure(measured) { + let { editor, space } = measured; + let others = []; + for (let i4 = 0; i4 < this.manager.tooltips.length; i4++) { + let tooltip = this.manager.tooltips[i4], tView = this.manager.tooltipViews[i4], { dom } = tView; + let pos = measured.pos[i4], size = measured.size[i4]; + if (!pos || pos.bottom <= Math.max(editor.top, space.top) || pos.top >= Math.min(editor.bottom, space.bottom) || pos.right < Math.max(editor.left, space.left) - 0.1 || pos.left > Math.min(editor.right, space.right) + 0.1) { + dom.style.top = Outside; + continue; + } + let arrow = tooltip.arrow ? tView.dom.querySelector(".cm-tooltip-arrow") : null; + let arrowHeight = arrow ? 7 /* Size */ : 0; + let width = size.right - size.left, height = size.bottom - size.top; + let offset = tView.offset || noOffset, ltr = this.view.textDirection == import_view2.Direction.LTR; + let left = size.width > space.right - space.left ? ltr ? space.left : space.right - size.width : ltr ? Math.min( + pos.left - (arrow ? 14 /* Offset */ : 0) + offset.x, + space.right - width + ) : Math.max( + space.left, + pos.left - width + (arrow ? 14 /* Offset */ : 0) - offset.x + ); + let above = !!tooltip.above; + if (!tooltip.strictSide && (above ? pos.top - (size.bottom - size.top) - offset.y < space.top : pos.bottom + (size.bottom - size.top) + offset.y > space.bottom) && above == space.bottom - pos.bottom > pos.top - space.top) + above = !above; + let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y; + let right = left + width; + if (tView.overlap !== true) { + for (let r3 of others) + if (r3.left < right && r3.right > left && r3.top < top + height && r3.bottom > top) + top = above ? r3.top - height - 2 - arrowHeight : r3.bottom + arrowHeight + 2; + } + if (this.position == "absolute") { + dom.style.top = top - measured.parent.top + "px"; + dom.style.left = left - measured.parent.left + "px"; + } else { + dom.style.top = top + "px"; + dom.style.left = left + "px"; + } + if (arrow) + arrow.style.left = `${pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Offset */ - 7 /* Size */)}px`; + if (tView.overlap !== true) + others.push({ left, top, right, bottom: top + height }); + dom.classList.toggle("cm-tooltip-above", above); + dom.classList.toggle("cm-tooltip-below", !above); + if (tView.positioned) + tView.positioned(); + } + } + maybeMeasure() { + if (this.manager.tooltips.length) { + if (this.view.inView) + this.view.requestMeasure(this.measureReq); + if (this.inView != this.view.inView) { + this.inView = this.view.inView; + if (!this.inView) + for (let tv of this.manager.tooltipViews) + tv.dom.style.top = Outside; + } + } } - }; -} - -// node_modules/recoil/es/recoil.js -function isPromise(p3) { - return !!p3 && typeof p3.then === "function"; -} -var Recoil_isPromise = isPromise; -function nullthrows(x5, message) { - if (x5 != null) { - return x5; - } - throw new Error(message !== null && message !== void 0 ? message : "Got unexpected null or undefined"); -} -var Recoil_nullthrows = nullthrows; -var Canceled = class { -}; -var CANCELED = new Canceled(); -var loadableAccessors = { - valueMaybe() { - return void 0; - }, - valueOrThrow() { - const error = new Error( - `Loadable expected value, but in "${this.state}" state` - ); - throw error; - }, - errorMaybe() { - return void 0; }, - errorOrThrow() { - const error = new Error( - `Loadable expected error, but in "${this.state}" state` - ); - throw error; + { + eventHandlers: { + scroll() { + this.maybeMeasure(); + } + } + } +); +var baseTheme = import_view2.EditorView.baseTheme({ + ".cm-tooltip": { + zIndex: 100 }, - promiseMaybe() { - return void 0; + "&light .cm-tooltip": { + border: "1px solid #bbb", + backgroundColor: "#f5f5f5" }, - promiseOrThrow() { - const error = new Error( - `Loadable expected promise, but in "${this.state}" state` - ); - throw error; + "&light .cm-tooltip-section:not(:first-child)": { + borderTop: "1px solid #bbb" }, - is(other) { - return other.state === this.state && other.contents === this.contents; + "&dark .cm-tooltip": { + backgroundColor: "#333338", + color: "white" }, - map(map) { - if (this.state === "hasError") { - return this; - } - if (this.state === "hasValue") { - try { - const next = map(this.contents); - return Recoil_isPromise(next) ? loadableWithPromise(next.then((value) => ({ - __value: value - }))) : loadableWithValue(next); - } catch (e4) { - return Recoil_isPromise(e4) ? loadableWithPromise(e4.next(() => map(this.contents))) : loadableWithError(e4); - } - } - if (this.state === "loading") { - return loadableWithPromise( - this.contents.then((value) => ({ - __value: map(value.__value) - })).catch((e4) => { - if (Recoil_isPromise(e4)) { - return e4.then(() => map(this.contents)); - } - throw e4; - }) - ); - } - const error = new Error("Invalid Loadable state"); - throw error; - } -}; -function loadableWithValue(value) { - return Object.freeze({ - state: "hasValue", - contents: value, - ...loadableAccessors, - getValue() { - return this.contents; - }, - toPromise() { - return Promise.resolve(this.contents); - }, - valueMaybe() { - return this.contents; - }, - valueOrThrow() { - return this.contents; - } - }); -} -function loadableWithError(error) { - return Object.freeze({ - state: "hasError", - contents: error, - ...loadableAccessors, - getValue() { - throw this.contents; - }, - toPromise() { - return Promise.reject(this.contents); + ".cm-tooltip-arrow": { + height: `${7 /* Size */}px`, + width: `${7 /* Size */ * 2}px`, + position: "absolute", + zIndex: -1, + overflow: "hidden", + "&:before, &:after": { + content: "''", + position: "absolute", + width: 0, + height: 0, + borderLeft: `${7 /* Size */}px solid transparent`, + borderRight: `${7 /* Size */}px solid transparent` }, - errorMaybe() { - return this.contents; + ".cm-tooltip-above &": { + bottom: `-${7 /* Size */}px`, + "&:before": { + borderTop: `${7 /* Size */}px solid #bbb` + }, + "&:after": { + borderTop: `${7 /* Size */}px solid #f5f5f5`, + bottom: "1px" + } }, - errorOrThrow() { - return this.contents; + ".cm-tooltip-below &": { + top: `-${7 /* Size */}px`, + "&:before": { + borderBottom: `${7 /* Size */}px solid #bbb` + }, + "&:after": { + borderBottom: `${7 /* Size */}px solid #f5f5f5`, + top: "1px" + } } - }); -} -function loadableWithPromise(promise) { - return Object.freeze({ - state: "loading", - contents: promise, - ...loadableAccessors, - getValue() { - throw this.contents.then(({ - __value - }) => __value); - }, - toPromise() { - return this.contents.then(({ - __value - }) => __value); - }, - promiseMaybe() { - return this.contents.then(({ - __value - }) => __value); + }, + "&dark .cm-tooltip .cm-tooltip-arrow": { + "&:before": { + borderTopColor: "#333338", + borderBottomColor: "#333338" }, - promiseOrThrow() { - return this.contents.then(({ - __value - }) => __value); + "&:after": { + borderTopColor: "transparent", + borderBottomColor: "transparent" } - }); -} -function loadableLoading() { - return loadableWithPromise(new Promise(() => { - })); -} -function loadableAll(inputs) { - return inputs.every((i4) => i4.state === "hasValue") ? loadableWithValue(inputs.map((i4) => i4.contents)) : inputs.some((i4) => i4.state === "hasError") ? loadableWithError(Recoil_nullthrows(inputs.find((i4) => i4.state === "hasError"), "Invalid loadable passed to loadableAll").contents) : loadableWithPromise(Promise.all(inputs.map((i4) => i4.contents)).then((value) => ({ - __value: value - }))); -} -var Recoil_Loadable = { - loadableWithValue, - loadableWithError, - loadableWithPromise, - loadableLoading, - loadableAll, - Canceled, - CANCELED -}; -var _useMutableSource; -var useMutableSource = (_useMutableSource = bn.useMutableSource) !== null && _useMutableSource !== void 0 ? _useMutableSource : bn.unstable_useMutableSource; -function mutableSourceExists() { - return useMutableSource && !(typeof window !== "undefined" && window.$disableRecoilValueMutableSource_TEMP_HACK_DO_NOT_USE); -} -var Recoil_mutableSource = { - mutableSourceExists, - useMutableSource -}; -var { - mutableSourceExists: mutableSourceExists$1 -} = Recoil_mutableSource; -var gks = (/* @__PURE__ */ new Map()).set("recoil_hamt_2020", true).set("recoil_memory_managament_2020", true).set("recoil_suppress_rerender_in_callback", true); -function Recoil_gkx(gk) { - var _gks$get; - if (gk === "recoil_early_rendering_2021" && !mutableSourceExists$1()) { - return false; } - return (_gks$get = gks.get(gk)) !== null && _gks$get !== void 0 ? _gks$get : false; -} -Recoil_gkx.setPass = (gk) => { - gks.set(gk, true); -}; -Recoil_gkx.setFail = (gk) => { - gks.set(gk, false); -}; -var Recoil_gkx_1 = Recoil_gkx; -function recoverableViolation(message, projectName, { - error -} = {}) { - if (true) { - console.error(message, error); +}); +var noOffset = { x: 0, y: 0 }; +var showTooltip = import_state2.Facet.define({ + enables: [tooltipPlugin, baseTheme] +}); +var showHoverTooltip = import_state2.Facet.define(); +var HoverTooltipHost = class { + constructor(view) { + this.view = view; + this.mounted = false; + this.dom = document.createElement("div"); + this.dom.classList.add("cm-tooltip-hover"); + this.manager = new TooltipViewManager( + view, + showHoverTooltip, + (t4) => this.createHostedView(t4) + ); } - return null; -} -var recoverableViolation_1 = recoverableViolation; -var Recoil_recoverableViolation = recoverableViolation_1; -function setByAddingToSet(set, v3) { - const next = new Set(set); - next.add(v3); - return next; -} -function setByDeletingFromSet(set, v3) { - const next = new Set(set); - next.delete(v3); - return next; -} -function mapBySettingInMap(map, k5, v3) { - const next = new Map(map); - next.set(k5, v3); - return next; -} -function mapByUpdatingInMap(map, k5, updater) { - const next = new Map(map); - next.set(k5, updater(next.get(k5))); - return next; -} -function mapByDeletingFromMap(map, k5) { - const next = new Map(map); - next.delete(k5); - return next; -} -function mapByDeletingMultipleFromMap(map, ks) { - const next = new Map(map); - ks.forEach((k5) => next.delete(k5)); - return next; -} -var Recoil_CopyOnWrite = { - setByAddingToSet, - setByDeletingFromSet, - mapBySettingInMap, - mapByUpdatingInMap, - mapByDeletingFromMap, - mapByDeletingMultipleFromMap -}; -function* filterIterable(iterable, predicate) { - let index = 0; - for (const value of iterable) { - if (predicate(value, index++)) { - yield value; + static create(view) { + return new HoverTooltipHost(view); + } + createHostedView(tooltip) { + let hostedView = tooltip.create(this.view); + hostedView.dom.classList.add("cm-tooltip-section"); + this.dom.appendChild(hostedView.dom); + if (this.mounted && hostedView.mount) + hostedView.mount(this.view); + return hostedView; + } + mount(view) { + for (let hostedView of this.manager.tooltipViews) { + if (hostedView.mount) + hostedView.mount(view); } + this.mounted = true; } -} -var Recoil_filterIterable = filterIterable; -function mapIterable(iterable, callback) { - return function* () { - let index = 0; - for (const value of iterable) { - yield callback(value, index++); + positioned() { + for (let hostedView of this.manager.tooltipViews) { + if (hostedView.positioned) + hostedView.positioned(); } - }(); -} -var Recoil_mapIterable = mapIterable; -function sprintf(format3, ...args) { - let index = 0; - return format3.replace(/%s/g, () => String(args[index++])); -} -var sprintf_1 = sprintf; -function expectationViolation(format3, ...args) { - if (true) { - const message = sprintf_1.call(null, format3, ...args); - const error = new Error(message); - error.name = "Expectation Violation"; - console.error(error); } -} -var expectationViolation_1 = expectationViolation; -var Recoil_expectationViolation = expectationViolation_1; -function _defineProperty(obj, key2, value) { - if (key2 in obj) { - Object.defineProperty(obj, key2, { - value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key2] = value; + update(update) { + this.manager.update(update); } - return obj; -} -var AbstractRecoilValue = class { - constructor(newKey) { - _defineProperty(this, "key", void 0); - this.key = newKey; - } -}; -var RecoilState = class extends AbstractRecoilValue { -}; -var RecoilValueReadOnly = class extends AbstractRecoilValue { -}; -function isRecoilValue(x5) { - return x5 instanceof RecoilState || x5 instanceof RecoilValueReadOnly; -} -var Recoil_RecoilValue = { - AbstractRecoilValue, - RecoilState, - RecoilValueReadOnly, - isRecoilValue }; -var Recoil_RecoilValue_1 = Recoil_RecoilValue.AbstractRecoilValue; -var Recoil_RecoilValue_2 = Recoil_RecoilValue.RecoilState; -var Recoil_RecoilValue_3 = Recoil_RecoilValue.RecoilValueReadOnly; -var Recoil_RecoilValue_4 = Recoil_RecoilValue.isRecoilValue; -var Recoil_RecoilValue$1 = /* @__PURE__ */ Object.freeze({ - __proto__: null, - AbstractRecoilValue: Recoil_RecoilValue_1, - RecoilState: Recoil_RecoilValue_2, - RecoilValueReadOnly: Recoil_RecoilValue_3, - isRecoilValue: Recoil_RecoilValue_4 -}); -var DefaultValue = class { -}; -var DEFAULT_VALUE = new DefaultValue(); -var RecoilValueNotReady = class extends Error { - constructor(key2) { - super(`Tried to set the value of Recoil selector ${key2} using an updater function, but it is an async selector in a pending or error state; this is not supported.`); +var showHoverTooltipHost = showTooltip.compute( + [showHoverTooltip], + (state) => { + let tooltips2 = state.facet(showHoverTooltip).filter((t4) => t4); + if (tooltips2.length === 0) + return null; + return { + pos: Math.min(...tooltips2.map((t4) => t4.pos)), + end: Math.max( + ...tooltips2.filter((t4) => t4.end != null).map((t4) => t4.end) + ), + create: HoverTooltipHost.create, + above: tooltips2[0].above, + arrow: tooltips2.some((t4) => t4.arrow) + }; } -}; -var nodes = /* @__PURE__ */ new Map(); -var recoilValues = /* @__PURE__ */ new Map(); -function recoilValuesForKeys(keys) { - return Recoil_mapIterable(keys, (key2) => Recoil_nullthrows(recoilValues.get(key2))); -} -function registerNode(node) { - if (nodes.has(node.key)) { - const message = `Duplicate atom key "${node.key}". This is a FATAL ERROR in - production. But it is safe to ignore this warning if it occurred because of - hot module replacement.`; - console.warn(message); +); +var HoverPlugin = class { + constructor(view, source, field, setHover, hoverTime) { + this.view = view; + this.source = source; + this.field = field; + this.setHover = setHover; + this.hoverTime = hoverTime; + this.hoverTimeout = -1; + this.restartTimeout = -1; + this.pending = null; + this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 }; + this.checkHover = this.checkHover.bind(this); + view.dom.addEventListener( + "mouseleave", + this.mouseleave = this.mouseleave.bind(this) + ); + view.dom.addEventListener( + "mousemove", + this.mousemove = this.mousemove.bind(this) + ); } - nodes.set(node.key, node); - const recoilValue = node.set == null ? new Recoil_RecoilValue$1.RecoilValueReadOnly(node.key) : new Recoil_RecoilValue$1.RecoilState(node.key); - recoilValues.set(node.key, recoilValue); - return recoilValue; -} -var NodeMissingError = class extends Error { -}; -function getNode(key2) { - const node = nodes.get(key2); - if (node == null) { - throw new NodeMissingError(`Missing definition for RecoilValue: "${key2}""`); + update() { + if (this.pending) { + this.pending = null; + clearTimeout(this.restartTimeout); + this.restartTimeout = setTimeout(() => this.startHover(), 20); + } } - return node; -} -function getNodeMaybe(key2) { - return nodes.get(key2); -} -var configDeletionHandlers = /* @__PURE__ */ new Map(); -function deleteNodeConfigIfPossible(key2) { - var _node$shouldDeleteCon; - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; + get active() { + return this.view.state.field(this.field); } - const node = nodes.get(key2); - if (node === null || node === void 0 ? void 0 : (_node$shouldDeleteCon = node.shouldDeleteConfigOnRelease) === null || _node$shouldDeleteCon === void 0 ? void 0 : _node$shouldDeleteCon.call(node)) { - var _getConfigDeletionHan; - nodes.delete(key2); - (_getConfigDeletionHan = getConfigDeletionHandler(key2)) === null || _getConfigDeletionHan === void 0 ? void 0 : _getConfigDeletionHan(); - configDeletionHandlers.delete(key2); + checkHover() { + this.hoverTimeout = -1; + if (this.active) + return; + let hovered = Date.now() - this.lastMove.time; + if (hovered < this.hoverTime) + this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered); + else + this.startHover(); } -} -function setConfigDeletionHandler(key2, fn2) { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; + startHover() { + clearTimeout(this.restartTimeout); + let { lastMove } = this; + let pos = this.view.contentDOM.contains(lastMove.target) ? this.view.posAtCoords(lastMove) : null; + if (pos == null) + return; + let posCoords = this.view.coordsAtPos(pos); + if (posCoords == null || lastMove.y < posCoords.top || lastMove.y > posCoords.bottom || lastMove.x < posCoords.left - this.view.defaultCharacterWidth || lastMove.x > posCoords.right + this.view.defaultCharacterWidth) + return; + let bidi = this.view.bidiSpans(this.view.state.doc.lineAt(pos)).find((s5) => s5.from <= pos && s5.to >= pos); + let rtl = bidi && bidi.dir == import_view2.Direction.RTL ? -1 : 1; + let open = this.source( + this.view, + pos, + lastMove.x < posCoords.left ? -rtl : rtl + ); + if (open == null ? void 0 : open.then) { + let pending = this.pending = { pos }; + open.then( + (result) => { + if (this.pending == pending) { + this.pending = null; + if (result) + this.view.dispatch({ effects: this.setHover.of(result) }); + } + }, + (e4) => (0, import_view2.logException)(this.view.state, e4, "hover tooltip") + ); + } else if (open) { + this.view.dispatch({ effects: this.setHover.of(open) }); + } } - if (fn2 === void 0) { - configDeletionHandlers.delete(key2); - } else { - configDeletionHandlers.set(key2, fn2); + mousemove(event) { + var _a2; + this.lastMove = { + x: event.clientX, + y: event.clientY, + target: event.target, + time: Date.now() + }; + if (this.hoverTimeout < 0) + this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime); + let tooltip = this.active; + if (tooltip && !isInTooltip(this.lastMove.target) || this.pending) { + let { pos } = tooltip || this.pending, end = (_a2 = tooltip == null ? void 0 : tooltip.end) != null ? _a2 : pos; + if (pos == end ? this.view.posAtCoords(this.lastMove) != pos : !isOverRange( + this.view, + pos, + end, + event.clientX, + event.clientY, + 6 /* MaxDist */ + )) { + this.view.dispatch({ effects: this.setHover.of(null) }); + this.pending = null; + } + } } -} -function getConfigDeletionHandler(key2) { - return configDeletionHandlers.get(key2); -} -var Recoil_Node = { - nodes, - recoilValues, - registerNode, - getNode, - getNodeMaybe, - deleteNodeConfigIfPossible, - setConfigDeletionHandler, - getConfigDeletionHandler, - recoilValuesForKeys, - NodeMissingError, - DefaultValue, - DEFAULT_VALUE, - RecoilValueNotReady -}; -var RetentionZone = class { -}; -function retentionZone() { - return new RetentionZone(); -} -var Recoil_RetentionZone = { - RetentionZone, - retentionZone -}; -var { - setByAddingToSet: setByAddingToSet$1 -} = Recoil_CopyOnWrite; -var { - getNode: getNode$1, - getNodeMaybe: getNodeMaybe$1, - recoilValuesForKeys: recoilValuesForKeys$1 -} = Recoil_Node; -var { - RetentionZone: RetentionZone$1 -} = Recoil_RetentionZone; -var emptySet = Object.freeze(/* @__PURE__ */ new Set()); -var ReadOnlyRecoilValueError = class extends Error { -}; -function initializeRetentionForNode(store, nodeKey, retainedBy) { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return () => void 0; + mouseleave(e4) { + clearTimeout(this.hoverTimeout); + this.hoverTimeout = -1; + if (this.active && !isInTooltip(e4.relatedTarget)) + this.view.dispatch({ effects: this.setHover.of(null) }); } - const { - nodesRetainedByZone: nodesRetainedByZone2 - } = store.getState().retention; - function addToZone(zone) { - let set = nodesRetainedByZone2.get(zone); - if (!set) { - nodesRetainedByZone2.set(zone, set = /* @__PURE__ */ new Set()); - } - set.add(nodeKey); + destroy() { + clearTimeout(this.hoverTimeout); + this.view.dom.removeEventListener("mouseleave", this.mouseleave); + this.view.dom.removeEventListener("mousemove", this.mousemove); } - if (retainedBy instanceof RetentionZone$1) { - addToZone(retainedBy); - } else if (Array.isArray(retainedBy)) { - for (const zone of retainedBy) { - addToZone(zone); - } +}; +function isInTooltip(elt) { + for (let cur = elt; cur; cur = cur.parentNode) + if (cur.nodeType == 1 && cur.classList.contains("cm-tooltip")) + return true; + return false; +} +function isOverRange(view, from, to, x5, y5, margin) { + let range = document.createRange(); + let fromDOM = view.domAtPos(from), toDOM = view.domAtPos(to); + range.setEnd(toDOM.node, toDOM.offset); + range.setStart(fromDOM.node, fromDOM.offset); + let rects = range.getClientRects(); + range.detach(); + for (let i4 = 0; i4 < rects.length; i4++) { + let rect = rects[i4]; + let dist = Math.max( + rect.top - y5, + y5 - rect.bottom, + rect.left - x5, + x5 - rect.right + ); + if (dist <= margin) + return true; } - return () => { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; - } - const nodesRetainedByZone3 = store.getState().retention.nodesRetainedByZone; - function deleteFromZone(zone) { - const set = nodesRetainedByZone3.get(zone); - if (set) { - set.delete(nodeKey); - } - if (set && set.size === 0) { - nodesRetainedByZone3.delete(zone); + return false; +} +function hoverTooltip(source, options = {}) { + let setHover = import_state2.StateEffect.define(); + let hoverState = import_state2.StateField.define({ + create() { + return null; + }, + update(value, tr) { + if (value && options.hideOnChange && (tr.docChanged || tr.selection)) + return null; + for (let effect of tr.effects) { + if (effect.is(setHover)) { + return effect.value; + } + if (effect.is(closeHoverTooltipEffect)) + return null; } - } - if (retainedBy instanceof RetentionZone$1) { - deleteFromZone(retainedBy); - } else if (Array.isArray(retainedBy)) { - for (const zone of retainedBy) { - deleteFromZone(zone); + if (value && tr.docChanged) { + let newPos = tr.changes.mapPos(value.pos, -1, import_state2.MapMode.TrackDel); + if (newPos == null) + return null; + let copy = Object.assign(/* @__PURE__ */ Object.create(null), value); + copy.pos = newPos; + if (value.end != null) + copy.end = tr.changes.mapPos(value.end); + return copy; } - } - }; -} -function initializeNodeIfNewToStore(store, treeState, key2, trigger) { - const storeState = store.getState(); - if (storeState.nodeCleanupFunctions.has(key2)) { - return; - } - const config = getNode$1(key2); - const retentionCleanup = initializeRetentionForNode(store, key2, config.retainedBy); - const nodeCleanup = config.init(store, treeState, trigger); - storeState.nodeCleanupFunctions.set(key2, () => { - nodeCleanup(); - retentionCleanup(); + return value; + }, + provide: (f4) => showHoverTooltip.from(f4) }); + return [ + hoverState, + import_view2.ViewPlugin.define( + (view) => new HoverPlugin( + view, + source, + hoverState, + setHover, + options.hoverTime || 300 /* Time */ + ) + ), + showHoverTooltipHost + ]; } -function cleanUpNode(store, key2) { - var _state$nodeCleanupFun; - const state = store.getState(); - (_state$nodeCleanupFun = state.nodeCleanupFunctions.get(key2)) === null || _state$nodeCleanupFun === void 0 ? void 0 : _state$nodeCleanupFun(); - state.nodeCleanupFunctions.delete(key2); +var closeHoverTooltipEffect = import_state2.StateEffect.define(); +var closeHoverTooltips = closeHoverTooltipEffect.of(null); + +// node_modules/preact/dist/preact.module.js +var n; +var l; +var u; +var i; +var t; +var o; +var r; +var f = {}; +var e = []; +var c = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; +function s(n2, l3) { + for (var u4 in l3) + n2[u4] = l3[u4]; + return n2; } -function getNodeLoadable(store, state, key2) { - initializeNodeIfNewToStore(store, state, key2, "get"); - return getNode$1(key2).get(store, state); +function a(n2) { + var l3 = n2.parentNode; + l3 && l3.removeChild(n2); } -function peekNodeLoadable(store, state, key2) { - return getNode$1(key2).peek(store, state); +function h(l3, u4, i4) { + var t4, o3, r3, f4 = {}; + for (r3 in u4) + "key" == r3 ? t4 = u4[r3] : "ref" == r3 ? o3 = u4[r3] : f4[r3] = u4[r3]; + if (arguments.length > 2 && (f4.children = arguments.length > 3 ? n.call(arguments, 2) : i4), "function" == typeof l3 && null != l3.defaultProps) + for (r3 in l3.defaultProps) + void 0 === f4[r3] && (f4[r3] = l3.defaultProps[r3]); + return v(l3, f4, t4, o3, null); } -function setUnvalidatedAtomValue_DEPRECATED(state, key2, newValue) { - var _node$invalidate; - const node = getNodeMaybe$1(key2); - node === null || node === void 0 ? void 0 : (_node$invalidate = node.invalidate) === null || _node$invalidate === void 0 ? void 0 : _node$invalidate.call(node, state); - return { - ...state, - atomValues: state.atomValues.clone().delete(key2), - nonvalidatedAtoms: state.nonvalidatedAtoms.clone().set(key2, newValue), - dirtyAtoms: setByAddingToSet$1(state.dirtyAtoms, key2) - }; +function v(n2, i4, t4, o3, r3) { + var f4 = { type: n2, props: i4, key: t4, ref: o3, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: null == r3 ? ++u : r3 }; + return null == r3 && null != l.vnode && l.vnode(f4), f4; } -function setNodeValue(store, state, key2, newValue) { - const node = getNode$1(key2); - if (node.set == null) { - throw new ReadOnlyRecoilValueError(`Attempt to set read-only RecoilValue: ${key2}`); - } - const set = node.set; - initializeNodeIfNewToStore(store, state, key2, "set"); - return set(store, state, newValue); +function y() { + return { current: null }; } -function peekNodeInfo(store, state, key2) { - var _graph$nodeDeps$get, _storeState$nodeToCom, _storeState$nodeToCom2; - const storeState = store.getState(); - const graph2 = store.getGraph(state.version); - const type = storeState.knownAtoms.has(key2) ? "atom" : storeState.knownSelectors.has(key2) ? "selector" : void 0; - const downstreamNodes = Recoil_filterIterable(getDownstreamNodes(store, state, /* @__PURE__ */ new Set([key2])), (nodeKey) => nodeKey !== key2); - return { - loadable: peekNodeLoadable(store, state, key2), - isActive: storeState.knownAtoms.has(key2) || storeState.knownSelectors.has(key2), - isSet: type === "selector" ? false : state.atomValues.has(key2), - isModified: state.dirtyAtoms.has(key2), - type, - deps: recoilValuesForKeys$1((_graph$nodeDeps$get = graph2.nodeDeps.get(key2)) !== null && _graph$nodeDeps$get !== void 0 ? _graph$nodeDeps$get : []), - subscribers: { - nodes: recoilValuesForKeys$1(downstreamNodes), - components: Recoil_mapIterable((_storeState$nodeToCom = (_storeState$nodeToCom2 = storeState.nodeToComponentSubscriptions.get(key2)) === null || _storeState$nodeToCom2 === void 0 ? void 0 : _storeState$nodeToCom2.values()) !== null && _storeState$nodeToCom !== void 0 ? _storeState$nodeToCom : [], ([name]) => ({ - name - })) - } - }; +function p(n2) { + return n2.children; } -function getDownstreamNodes(store, state, keys) { - const visitedNodes = /* @__PURE__ */ new Set(); - const visitingNodes = Array.from(keys); - const graph2 = store.getGraph(state.version); - for (let key2 = visitingNodes.pop(); key2; key2 = visitingNodes.pop()) { - var _graph$nodeToNodeSubs; - visitedNodes.add(key2); - const subscribedNodes = (_graph$nodeToNodeSubs = graph2.nodeToNodeSubscriptions.get(key2)) !== null && _graph$nodeToNodeSubs !== void 0 ? _graph$nodeToNodeSubs : emptySet; - for (const downstreamNode of subscribedNodes) { - if (!visitedNodes.has(downstreamNode)) { - visitingNodes.push(downstreamNode); +function d(n2, l3) { + this.props = n2, this.context = l3; +} +function _(n2, l3) { + if (null == l3) + return n2.__ ? _(n2.__, n2.__.__k.indexOf(n2) + 1) : null; + for (var u4; l3 < n2.__k.length; l3++) + if (null != (u4 = n2.__k[l3]) && null != u4.__e) + return u4.__e; + return "function" == typeof n2.type ? _(n2) : null; +} +function k(n2) { + var l3, u4; + if (null != (n2 = n2.__) && null != n2.__c) { + for (n2.__e = n2.__c.base = null, l3 = 0; l3 < n2.__k.length; l3++) + if (null != (u4 = n2.__k[l3]) && null != u4.__e) { + n2.__e = n2.__c.base = u4.__e; + break; } - } + return k(n2); } - return visitedNodes; } -var Recoil_FunctionalCore = { - getNodeLoadable, - peekNodeLoadable, - setNodeValue, - cleanUpNode, - setUnvalidatedAtomValue_DEPRECATED, - peekNodeInfo, - getDownstreamNodes, - initializeNodeIfNewToStore -}; -var { - CANCELED: CANCELED$1 -} = Recoil_Loadable; -var { - getDownstreamNodes: getDownstreamNodes$1, - getNodeLoadable: getNodeLoadable$1, - setNodeValue: setNodeValue$1 -} = Recoil_FunctionalCore; -var { - getNodeMaybe: getNodeMaybe$2 -} = Recoil_Node; -var { - DefaultValue: DefaultValue$1, - RecoilValueNotReady: RecoilValueNotReady$1 -} = Recoil_Node; -var { - AbstractRecoilValue: AbstractRecoilValue$1, - RecoilState: RecoilState$1, - RecoilValueReadOnly: RecoilValueReadOnly$1, - isRecoilValue: isRecoilValue$1 -} = Recoil_RecoilValue$1; -function getRecoilValueAsLoadable(store, { - key: key2 -}, treeState = store.getState().currentTree) { - var _storeState$nextTree, _storeState$previousT; - const storeState = store.getState(); - if (!(treeState.version === storeState.currentTree.version || treeState.version === ((_storeState$nextTree = storeState.nextTree) === null || _storeState$nextTree === void 0 ? void 0 : _storeState$nextTree.version) || treeState.version === ((_storeState$previousT = storeState.previousTree) === null || _storeState$previousT === void 0 ? void 0 : _storeState$previousT.version))) { - Recoil_recoverableViolation("Tried to read from a discarded tree"); - } - const loadable = getNodeLoadable$1(store, treeState, key2); - if (loadable.state === "loading") { - loadable.contents.catch(() => { - return CANCELED$1; - }); - } - return loadable; -} -function applyAtomValueWrites(atomValues, writes) { - const result = atomValues.clone(); - writes.forEach((v3, k5) => { - if (v3.state === "hasValue" && v3.contents instanceof DefaultValue$1) { - result.delete(k5); - } else { - result.set(k5, v3); - } - }); - return result; -} -function valueFromValueOrUpdater(store, state, { - key: key2 -}, valueOrUpdater) { - if (typeof valueOrUpdater === "function") { - const current = getNodeLoadable$1(store, state, key2); - if (current.state === "loading") { - throw new RecoilValueNotReady$1(key2); - } else if (current.state === "hasError") { - throw current.contents; - } - return valueOrUpdater(current.contents); - } else { - return valueOrUpdater; - } -} -function applyAction(store, state, action) { - if (action.type === "set") { - const { - recoilValue, - valueOrUpdater - } = action; - const newValue = valueFromValueOrUpdater(store, state, recoilValue, valueOrUpdater); - const writes = setNodeValue$1(store, state, recoilValue.key, newValue); - for (const [key2, loadable] of writes.entries()) { - writeLoadableToTreeState(state, key2, loadable); - } - } else if (action.type === "setLoadable") { - const { - recoilValue: { - key: key2 - }, - loadable - } = action; - writeLoadableToTreeState(state, key2, loadable); - } else if (action.type === "markModified") { - const { - recoilValue: { - key: key2 - } - } = action; - state.dirtyAtoms.add(key2); - } else if (action.type === "setUnvalidated") { - var _node$invalidate; - const { - recoilValue: { - key: key2 - }, - unvalidatedValue - } = action; - const node = getNodeMaybe$2(key2); - node === null || node === void 0 ? void 0 : (_node$invalidate = node.invalidate) === null || _node$invalidate === void 0 ? void 0 : _node$invalidate.call(node, state); - state.atomValues.delete(key2); - state.nonvalidatedAtoms.set(key2, unvalidatedValue); - state.dirtyAtoms.add(key2); - } else { - Recoil_recoverableViolation(`Unknown action ${action.type}`); - } -} -function writeLoadableToTreeState(state, key2, loadable) { - if (loadable.state === "hasValue" && loadable.contents instanceof DefaultValue$1) { - state.atomValues.delete(key2); - } else { - state.atomValues.set(key2, loadable); - } - state.dirtyAtoms.add(key2); - state.nonvalidatedAtoms.delete(key2); -} -function applyActionsToStore(store, actions) { - store.replaceState((state) => { - const newState = copyTreeState(state); - for (const action of actions) { - applyAction(store, newState, action); - } - invalidateDownstreams(store, newState); - return newState; - }); +function b(n2) { + (!n2.__d && (n2.__d = true) && t.push(n2) && !g.__r++ || o !== l.debounceRendering) && ((o = l.debounceRendering) || setTimeout)(g); } -function queueOrPerformStateUpdate(store, action) { - if (batchStack.length) { - const actionsByStore = batchStack[batchStack.length - 1]; - let actions = actionsByStore.get(store); - if (!actions) { - actionsByStore.set(store, actions = []); - } - actions.push(action); - } else { - applyActionsToStore(store, [action]); - } +function g() { + for (var n2; g.__r = t.length; ) + n2 = t.sort(function(n3, l3) { + return n3.__v.__b - l3.__v.__b; + }), t = [], n2.some(function(n3) { + var l3, u4, i4, t4, o3, r3; + n3.__d && (o3 = (t4 = (l3 = n3).__v).__e, (r3 = l3.__P) && (u4 = [], (i4 = s({}, t4)).__v = t4.__v + 1, j(r3, t4, i4, l3.__n, void 0 !== r3.ownerSVGElement, null != t4.__h ? [o3] : null, u4, null == o3 ? _(t4) : o3, t4.__h), z(u4, t4), t4.__e != o3 && k(t4))); + }); } -var batchStack = []; -function batchStart() { - const actionsByStore = /* @__PURE__ */ new Map(); - batchStack.push(actionsByStore); - return () => { - for (const [store, actions] of actionsByStore) { - applyActionsToStore(store, actions); - } - const popped = batchStack.pop(); - if (popped !== actionsByStore) { - Recoil_recoverableViolation("Incorrect order of batch popping"); +function w(n2, l3, u4, i4, t4, o3, r3, c4, s5, a5) { + var h5, y5, d5, k5, b4, g4, w5, x5 = i4 && i4.__k || e, C3 = x5.length; + for (u4.__k = [], h5 = 0; h5 < l3.length; h5++) + if (null != (k5 = u4.__k[h5] = null == (k5 = l3[h5]) || "boolean" == typeof k5 ? null : "string" == typeof k5 || "number" == typeof k5 || "bigint" == typeof k5 ? v(null, k5, null, null, k5) : Array.isArray(k5) ? v(p, { children: k5 }, null, null, null) : k5.__b > 0 ? v(k5.type, k5.props, k5.key, k5.ref ? k5.ref : null, k5.__v) : k5)) { + if (k5.__ = u4, k5.__b = u4.__b + 1, null === (d5 = x5[h5]) || d5 && k5.key == d5.key && k5.type === d5.type) + x5[h5] = void 0; + else + for (y5 = 0; y5 < C3; y5++) { + if ((d5 = x5[y5]) && k5.key == d5.key && k5.type === d5.type) { + x5[y5] = void 0; + break; + } + d5 = null; + } + j(n2, k5, d5 = d5 || f, t4, o3, r3, c4, s5, a5), b4 = k5.__e, (y5 = k5.ref) && d5.ref != y5 && (w5 || (w5 = []), d5.ref && w5.push(d5.ref, null, k5), w5.push(y5, k5.__c || b4, k5)), null != b4 ? (null == g4 && (g4 = b4), "function" == typeof k5.type && k5.__k === d5.__k ? k5.__d = s5 = m(k5, s5, n2) : s5 = A(n2, k5, d5, x5, b4, s5), "function" == typeof u4.type && (u4.__d = s5)) : s5 && d5.__e == s5 && s5.parentNode != n2 && (s5 = _(d5)); } - }; -} -function copyTreeState(state) { - return { - ...state, - atomValues: state.atomValues.clone(), - nonvalidatedAtoms: state.nonvalidatedAtoms.clone(), - dirtyAtoms: new Set(state.dirtyAtoms) - }; + for (u4.__e = g4, h5 = C3; h5--; ) + null != x5[h5] && N(x5[h5], x5[h5]); + if (w5) + for (h5 = 0; h5 < w5.length; h5++) + M(w5[h5], w5[++h5], w5[++h5]); } -function invalidateDownstreams(store, state) { - const downstreams = getDownstreamNodes$1(store, state, state.dirtyAtoms); - for (const key2 of downstreams) { - var _getNodeMaybe, _getNodeMaybe$invalid; - (_getNodeMaybe = getNodeMaybe$2(key2)) === null || _getNodeMaybe === void 0 ? void 0 : (_getNodeMaybe$invalid = _getNodeMaybe.invalidate) === null || _getNodeMaybe$invalid === void 0 ? void 0 : _getNodeMaybe$invalid.call(_getNodeMaybe, state); - } +function m(n2, l3, u4) { + for (var i4, t4 = n2.__k, o3 = 0; t4 && o3 < t4.length; o3++) + (i4 = t4[o3]) && (i4.__ = n2, l3 = "function" == typeof i4.type ? m(i4, l3, u4) : A(u4, i4, i4, t4, i4.__e, l3)); + return l3; } -function setRecoilValue(store, recoilValue, valueOrUpdater) { - queueOrPerformStateUpdate(store, { - type: "set", - recoilValue, - valueOrUpdater - }); +function x(n2, l3) { + return l3 = l3 || [], null == n2 || "boolean" == typeof n2 || (Array.isArray(n2) ? n2.some(function(n3) { + x(n3, l3); + }) : l3.push(n2)), l3; } -function setRecoilValueLoadable(store, recoilValue, loadable) { - if (loadable instanceof DefaultValue$1) { - return setRecoilValue(store, recoilValue, loadable); - } - queueOrPerformStateUpdate(store, { - type: "setLoadable", - recoilValue, - loadable - }); +function A(n2, l3, u4, i4, t4, o3) { + var r3, f4, e4; + if (void 0 !== l3.__d) + r3 = l3.__d, l3.__d = void 0; + else if (null == u4 || t4 != o3 || null == t4.parentNode) + n: + if (null == o3 || o3.parentNode !== n2) + n2.appendChild(t4), r3 = null; + else { + for (f4 = o3, e4 = 0; (f4 = f4.nextSibling) && e4 < i4.length; e4 += 1) + if (f4 == t4) + break n; + n2.insertBefore(t4, o3), r3 = o3; + } + return void 0 !== r3 ? r3 : t4.nextSibling; } -function markRecoilValueModified(store, recoilValue) { - queueOrPerformStateUpdate(store, { - type: "markModified", - recoilValue - }); +function C(n2, l3, u4, i4, t4) { + var o3; + for (o3 in u4) + "children" === o3 || "key" === o3 || o3 in l3 || H(n2, o3, null, u4[o3], i4); + for (o3 in l3) + t4 && "function" != typeof l3[o3] || "children" === o3 || "key" === o3 || "value" === o3 || "checked" === o3 || u4[o3] === l3[o3] || H(n2, o3, l3[o3], u4[o3], i4); } -function setUnvalidatedRecoilValue(store, recoilValue, unvalidatedValue) { - queueOrPerformStateUpdate(store, { - type: "setUnvalidated", - recoilValue, - unvalidatedValue - }); +function $(n2, l3, u4) { + "-" === l3[0] ? n2.setProperty(l3, u4) : n2[l3] = null == u4 ? "" : "number" != typeof u4 || c.test(l3) ? u4 : u4 + "px"; } -var subscriptionID = 0; -function subscribeToRecoilValue(store, { - key: key2 -}, callback, componentDebugName = null) { - const subID = subscriptionID++; - const storeState = store.getState(); - if (!storeState.nodeToComponentSubscriptions.has(key2)) { - storeState.nodeToComponentSubscriptions.set(key2, /* @__PURE__ */ new Map()); - } - Recoil_nullthrows(storeState.nodeToComponentSubscriptions.get(key2)).set(subID, [componentDebugName !== null && componentDebugName !== void 0 ? componentDebugName : "", callback]); - if (Recoil_gkx_1("recoil_early_rendering_2021")) { - const nextTree = store.getState().nextTree; - if (nextTree && nextTree.dirtyAtoms.has(key2)) { - callback(nextTree); - } - } - return { - release: () => { - const storeState2 = store.getState(); - const subs = storeState2.nodeToComponentSubscriptions.get(key2); - if (subs === void 0 || !subs.has(subID)) { - Recoil_recoverableViolation(`Subscription missing at release time for atom ${key2}. This is a bug in Recoil.`); - return; - } - subs.delete(subID); - if (subs.size === 0) { - storeState2.nodeToComponentSubscriptions.delete(key2); +function H(n2, l3, u4, i4, t4) { + var o3; + n: + if ("style" === l3) + if ("string" == typeof u4) + n2.style.cssText = u4; + else { + if ("string" == typeof i4 && (n2.style.cssText = i4 = ""), i4) + for (l3 in i4) + u4 && l3 in u4 || $(n2.style, l3, ""); + if (u4) + for (l3 in u4) + i4 && u4[l3] === i4[l3] || $(n2.style, l3, u4[l3]); } - } - }; -} -var Recoil_RecoilValueInterface = { - RecoilValueReadOnly: RecoilValueReadOnly$1, - AbstractRecoilValue: AbstractRecoilValue$1, - RecoilState: RecoilState$1, - getRecoilValueAsLoadable, - setRecoilValue, - setRecoilValueLoadable, - markRecoilValueModified, - setUnvalidatedRecoilValue, - subscribeToRecoilValue, - isRecoilValue: isRecoilValue$1, - applyAtomValueWrites, - batchStart, - writeLoadableToTreeState, - invalidateDownstreams, - copyTreeState, - invalidateDownstreams_FOR_TESTING: invalidateDownstreams -}; -var { - unstable_batchedUpdates -} = bn; -var ReactBatchedUpdates = { - unstable_batchedUpdates -}; -var { - unstable_batchedUpdates: unstable_batchedUpdates$1 -} = ReactBatchedUpdates; -var Recoil_ReactBatchedUpdates = { - unstable_batchedUpdates: unstable_batchedUpdates$1 -}; -var { - batchStart: batchStart$1 -} = Recoil_RecoilValueInterface; -var { - unstable_batchedUpdates: unstable_batchedUpdates$2 -} = Recoil_ReactBatchedUpdates; -var batcher = unstable_batchedUpdates$2; -var setBatcher = (newBatcher) => { - batcher = newBatcher; -}; -var getBatcher = () => batcher; -var batchUpdates = (callback) => { - batcher(() => { - let batchEnd = () => void 0; - try { - batchEnd = batchStart$1(); - callback(); - } finally { - batchEnd(); - } - }); -}; -var Recoil_Batching = { - getBatcher, - setBatcher, - batchUpdates -}; -function enqueueExecution(s5, f4) { - f4(); -} -var Recoil_Queue = { - enqueueExecution -}; -function differenceSets(set, ...setsWithValuesToRemove) { - const ret = /* @__PURE__ */ new Set(); - FIRST: - for (const value of set) { - for (const otherSet of setsWithValuesToRemove) { - if (otherSet.has(value)) { - continue FIRST; + else if ("o" === l3[0] && "n" === l3[1]) + o3 = l3 !== (l3 = l3.replace(/Capture$/, "")), l3 = l3.toLowerCase() in n2 ? l3.toLowerCase().slice(2) : l3.slice(2), n2.l || (n2.l = {}), n2.l[l3 + o3] = u4, u4 ? i4 || n2.addEventListener(l3, o3 ? T : I, o3) : n2.removeEventListener(l3, o3 ? T : I, o3); + else if ("dangerouslySetInnerHTML" !== l3) { + if (t4) + l3 = l3.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); + else if ("href" !== l3 && "list" !== l3 && "form" !== l3 && "tabIndex" !== l3 && "download" !== l3 && l3 in n2) + try { + n2[l3] = null == u4 ? "" : u4; + break n; + } catch (n3) { } - } - ret.add(value); + "function" == typeof u4 || (null == u4 || false === u4 && -1 == l3.indexOf("-") ? n2.removeAttribute(l3) : n2.setAttribute(l3, u4)); } - return ret; -} -var Recoil_differenceSets = differenceSets; -function mapMap(map, callback) { - const result = /* @__PURE__ */ new Map(); - map.forEach((value, key2) => { - result.set(key2, callback(value, key2)); - }); - return result; } -var Recoil_mapMap = mapMap; -function graph() { - return { - nodeDeps: /* @__PURE__ */ new Map(), - nodeToNodeSubscriptions: /* @__PURE__ */ new Map() - }; +function I(n2) { + this.l[n2.type + false](l.event ? l.event(n2) : n2); } -function cloneGraph(graph2) { - return { - nodeDeps: Recoil_mapMap(graph2.nodeDeps, (s5) => new Set(s5)), - nodeToNodeSubscriptions: Recoil_mapMap(graph2.nodeToNodeSubscriptions, (s5) => new Set(s5)) - }; +function T(n2) { + this.l[n2.type + true](l.event ? l.event(n2) : n2); } -function mergeDependencyMapIntoGraph(deps, graph2, olderGraph) { - const { - nodeDeps, - nodeToNodeSubscriptions - } = graph2; - deps.forEach((upstreams, downstream) => { - const existingUpstreams = nodeDeps.get(downstream); - if (existingUpstreams && olderGraph && existingUpstreams !== olderGraph.nodeDeps.get(downstream)) { - return; - } - nodeDeps.set(downstream, new Set(upstreams)); - const addedUpstreams = existingUpstreams == null ? upstreams : Recoil_differenceSets(upstreams, existingUpstreams); - addedUpstreams.forEach((upstream) => { - if (!nodeToNodeSubscriptions.has(upstream)) { - nodeToNodeSubscriptions.set(upstream, /* @__PURE__ */ new Set()); - } - const existing = Recoil_nullthrows(nodeToNodeSubscriptions.get(upstream)); - existing.add(downstream); - }); - if (existingUpstreams) { - const removedUpstreams = Recoil_differenceSets(existingUpstreams, upstreams); - removedUpstreams.forEach((upstream) => { - if (!nodeToNodeSubscriptions.has(upstream)) { - return; - } - const existing = Recoil_nullthrows(nodeToNodeSubscriptions.get(upstream)); - existing.delete(downstream); - if (existing.size === 0) { - nodeToNodeSubscriptions.delete(upstream); +function j(n2, u4, i4, t4, o3, r3, f4, e4, c4) { + var a5, h5, v3, y5, _4, k5, b4, g4, m5, x5, A4, C3, $3, H5, I4, T6 = u4.type; + if (void 0 !== u4.constructor) + return null; + null != i4.__h && (c4 = i4.__h, e4 = u4.__e = i4.__e, u4.__h = null, r3 = [e4]), (a5 = l.__b) && a5(u4); + try { + n: + if ("function" == typeof T6) { + if (g4 = u4.props, m5 = (a5 = T6.contextType) && t4[a5.__c], x5 = a5 ? m5 ? m5.props.value : a5.__ : t4, i4.__c ? b4 = (h5 = u4.__c = i4.__c).__ = h5.__E : ("prototype" in T6 && T6.prototype.render ? u4.__c = h5 = new T6(g4, x5) : (u4.__c = h5 = new d(g4, x5), h5.constructor = T6, h5.render = O), m5 && m5.sub(h5), h5.props = g4, h5.state || (h5.state = {}), h5.context = x5, h5.__n = t4, v3 = h5.__d = true, h5.__h = [], h5._sb = []), null == h5.__s && (h5.__s = h5.state), null != T6.getDerivedStateFromProps && (h5.__s == h5.state && (h5.__s = s({}, h5.__s)), s(h5.__s, T6.getDerivedStateFromProps(g4, h5.__s))), y5 = h5.props, _4 = h5.state, v3) + null == T6.getDerivedStateFromProps && null != h5.componentWillMount && h5.componentWillMount(), null != h5.componentDidMount && h5.__h.push(h5.componentDidMount); + else { + if (null == T6.getDerivedStateFromProps && g4 !== y5 && null != h5.componentWillReceiveProps && h5.componentWillReceiveProps(g4, x5), !h5.__e && null != h5.shouldComponentUpdate && false === h5.shouldComponentUpdate(g4, h5.__s, x5) || u4.__v === i4.__v) { + for (h5.props = g4, h5.state = h5.__s, u4.__v !== i4.__v && (h5.__d = false), h5.__v = u4, u4.__e = i4.__e, u4.__k = i4.__k, u4.__k.forEach(function(n3) { + n3 && (n3.__ = u4); + }), A4 = 0; A4 < h5._sb.length; A4++) + h5.__h.push(h5._sb[A4]); + h5._sb = [], h5.__h.length && f4.push(h5); + break n; + } + null != h5.componentWillUpdate && h5.componentWillUpdate(g4, h5.__s, x5), null != h5.componentDidUpdate && h5.__h.push(function() { + h5.componentDidUpdate(y5, _4, k5); + }); } + if (h5.context = x5, h5.props = g4, h5.__v = u4, h5.__P = n2, C3 = l.__r, $3 = 0, "prototype" in T6 && T6.prototype.render) { + for (h5.state = h5.__s, h5.__d = false, C3 && C3(u4), a5 = h5.render(h5.props, h5.state, h5.context), H5 = 0; H5 < h5._sb.length; H5++) + h5.__h.push(h5._sb[H5]); + h5._sb = []; + } else + do { + h5.__d = false, C3 && C3(u4), a5 = h5.render(h5.props, h5.state, h5.context), h5.state = h5.__s; + } while (h5.__d && ++$3 < 25); + h5.state = h5.__s, null != h5.getChildContext && (t4 = s(s({}, t4), h5.getChildContext())), v3 || null == h5.getSnapshotBeforeUpdate || (k5 = h5.getSnapshotBeforeUpdate(y5, _4)), I4 = null != a5 && a5.type === p && null == a5.key ? a5.props.children : a5, w(n2, Array.isArray(I4) ? I4 : [I4], u4, i4, t4, o3, r3, f4, e4, c4), h5.base = u4.__e, u4.__h = null, h5.__h.length && f4.push(h5), b4 && (h5.__E = h5.__ = null), h5.__e = false; + } else + null == r3 && u4.__v === i4.__v ? (u4.__k = i4.__k, u4.__e = i4.__e) : u4.__e = L(i4.__e, u4, i4, t4, o3, r3, f4, c4); + (a5 = l.diffed) && a5(u4); + } catch (n3) { + u4.__v = null, (c4 || null != r3) && (u4.__e = e4, u4.__h = !!c4, r3[r3.indexOf(e4)] = null), l.__e(n3, u4, i4); + } +} +function z(n2, u4) { + l.__c && l.__c(u4, n2), n2.some(function(u5) { + try { + n2 = u5.__h, u5.__h = [], n2.some(function(n3) { + n3.call(u5); }); + } catch (n3) { + l.__e(n3, u5.__v); } }); } -function saveDependencyMapToStore(dependencyMap, store, version) { - var _storeState$nextTree, _storeState$previousT, _storeState$previousT2, _storeState$previousT3; - const storeState = store.getState(); - if (!(version === storeState.currentTree.version || version === ((_storeState$nextTree = storeState.nextTree) === null || _storeState$nextTree === void 0 ? void 0 : _storeState$nextTree.version) || version === ((_storeState$previousT = storeState.previousTree) === null || _storeState$previousT === void 0 ? void 0 : _storeState$previousT.version))) { - Recoil_recoverableViolation("Tried to save dependencies to a discarded tree"); +function L(l3, u4, i4, t4, o3, r3, e4, c4) { + var s5, h5, v3, y5 = i4.props, p3 = u4.props, d5 = u4.type, k5 = 0; + if ("svg" === d5 && (o3 = true), null != r3) { + for (; k5 < r3.length; k5++) + if ((s5 = r3[k5]) && "setAttribute" in s5 == !!d5 && (d5 ? s5.localName === d5 : 3 === s5.nodeType)) { + l3 = s5, r3[k5] = null; + break; + } } - const graph2 = store.getGraph(version); - mergeDependencyMapIntoGraph(dependencyMap, graph2); - if (version === ((_storeState$previousT2 = storeState.previousTree) === null || _storeState$previousT2 === void 0 ? void 0 : _storeState$previousT2.version)) { - const currentGraph = store.getGraph(storeState.currentTree.version); - mergeDependencyMapIntoGraph(dependencyMap, currentGraph, graph2); + if (null == l3) { + if (null === d5) + return document.createTextNode(p3); + l3 = o3 ? document.createElementNS("http://www.w3.org/2000/svg", d5) : document.createElement(d5, p3.is && p3), r3 = null, c4 = false; } - if (version === ((_storeState$previousT3 = storeState.previousTree) === null || _storeState$previousT3 === void 0 ? void 0 : _storeState$previousT3.version) || version === storeState.currentTree.version) { - var _storeState$nextTree2; - const nextVersion = (_storeState$nextTree2 = storeState.nextTree) === null || _storeState$nextTree2 === void 0 ? void 0 : _storeState$nextTree2.version; - if (nextVersion !== void 0) { - const nextGraph = store.getGraph(nextVersion); - mergeDependencyMapIntoGraph(dependencyMap, nextGraph, graph2); + if (null === d5) + y5 === p3 || c4 && l3.data === p3 || (l3.data = p3); + else { + if (r3 = r3 && n.call(l3.childNodes), h5 = (y5 = i4.props || f).dangerouslySetInnerHTML, v3 = p3.dangerouslySetInnerHTML, !c4) { + if (null != r3) + for (y5 = {}, k5 = 0; k5 < l3.attributes.length; k5++) + y5[l3.attributes[k5].name] = l3.attributes[k5].value; + (v3 || h5) && (v3 && (h5 && v3.__html == h5.__html || v3.__html === l3.innerHTML) || (l3.innerHTML = v3 && v3.__html || "")); } + if (C(l3, p3, y5, o3, c4), v3) + u4.__k = []; + else if (k5 = u4.props.children, w(l3, Array.isArray(k5) ? k5 : [k5], u4, i4, t4, o3 && "foreignObject" !== d5, r3, e4, r3 ? r3[0] : i4.__k && _(i4, 0), c4), null != r3) + for (k5 = r3.length; k5--; ) + null != r3[k5] && a(r3[k5]); + c4 || ("value" in p3 && void 0 !== (k5 = p3.value) && (k5 !== l3.value || "progress" === d5 && !k5 || "option" === d5 && k5 !== y5.value) && H(l3, "value", k5, y5.value, false), "checked" in p3 && void 0 !== (k5 = p3.checked) && k5 !== l3.checked && H(l3, "checked", k5, y5.checked, false)); } + return l3; } -function mergeDepsIntoDependencyMap(from, into) { - from.forEach((upstreamDeps, downstreamNode) => { - if (!into.has(downstreamNode)) { - into.set(downstreamNode, /* @__PURE__ */ new Set()); - } - const deps = Recoil_nullthrows(into.get(downstreamNode)); - upstreamDeps.forEach((dep) => deps.add(dep)); - }); +function M(n2, u4, i4) { + try { + "function" == typeof n2 ? n2(u4) : n2.current = u4; + } catch (n3) { + l.__e(n3, i4); + } } -function addToDependencyMap(downstream, upstream, dependencyMap) { - if (!dependencyMap.has(downstream)) { - dependencyMap.set(downstream, /* @__PURE__ */ new Set()); +function N(n2, u4, i4) { + var t4, o3; + if (l.unmount && l.unmount(n2), (t4 = n2.ref) && (t4.current && t4.current !== n2.__e || M(t4, null, u4)), null != (t4 = n2.__c)) { + if (t4.componentWillUnmount) + try { + t4.componentWillUnmount(); + } catch (n3) { + l.__e(n3, u4); + } + t4.base = t4.__P = null, n2.__c = void 0; } - Recoil_nullthrows(dependencyMap.get(downstream)).add(upstream); + if (t4 = n2.__k) + for (o3 = 0; o3 < t4.length; o3++) + t4[o3] && N(t4[o3], u4, i4 || "function" != typeof n2.type); + i4 || null == n2.__e || a(n2.__e), n2.__ = n2.__e = n2.__d = void 0; } -var Recoil_Graph = { - addToDependencyMap, - cloneGraph, - graph, - mergeDepsIntoDependencyMap, - saveDependencyMapToStore -}; -function createCommonjsModule(fn2, module2) { - return module2 = { exports: {} }, fn2(module2, module2.exports), module2.exports; +function O(n2, l3, u4) { + return this.constructor(n2, u4); } -var hamt_1 = createCommonjsModule(function(module2) { - var _typeof5 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { - return typeof obj; - } : function(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - var hamt = {}; - var SIZE = 5; - var BUCKET_SIZE = Math.pow(2, SIZE); - var MASK = BUCKET_SIZE - 1; - var MAX_INDEX_NODE = BUCKET_SIZE / 2; - var MIN_ARRAY_NODE = BUCKET_SIZE / 4; - var nothing = {}; - var constant = function constant2(x5) { - return function() { - return x5; - }; - }; - var hash = hamt.hash = function(str) { - var type = typeof str === "undefined" ? "undefined" : _typeof5(str); - if (type === "number") - return str; - if (type !== "string") - str += ""; - var hash2 = 0; - for (var i4 = 0, len = str.length; i4 < len; ++i4) { - var c4 = str.charCodeAt(i4); - hash2 = (hash2 << 5) - hash2 + c4 | 0; - } - return hash2; - }; - var popcount = function popcount2(x5) { - x5 -= x5 >> 1 & 1431655765; - x5 = (x5 & 858993459) + (x5 >> 2 & 858993459); - x5 = x5 + (x5 >> 4) & 252645135; - x5 += x5 >> 8; - x5 += x5 >> 16; - return x5 & 127; - }; - var hashFragment = function hashFragment2(shift, h5) { - return h5 >>> shift & MASK; - }; - var toBitmap = function toBitmap2(x5) { - return 1 << x5; - }; - var fromBitmap = function fromBitmap2(bitmap, bit) { - return popcount(bitmap & bit - 1); - }; - var arrayUpdate = function arrayUpdate2(mutate2, at, v3, arr) { - var out = arr; - if (!mutate2) { - var len = arr.length; - out = new Array(len); - for (var i4 = 0; i4 < len; ++i4) { - out[i4] = arr[i4]; +function P(u4, i4, t4) { + var o3, r3, e4; + l.__ && l.__(u4, i4), r3 = (o3 = "function" == typeof t4) ? null : t4 && t4.__k || i4.__k, e4 = [], j(i4, u4 = (!o3 && t4 || i4).__k = h(p, null, [u4]), r3 || f, f, void 0 !== i4.ownerSVGElement, !o3 && t4 ? [t4] : r3 ? null : i4.firstChild ? n.call(i4.childNodes) : null, e4, !o3 && t4 ? t4 : r3 ? r3.__e : i4.firstChild, o3), z(e4, u4); +} +function S(n2, l3) { + P(n2, l3, S); +} +function q(l3, u4, i4) { + var t4, o3, r3, f4 = s({}, l3.props); + for (r3 in u4) + "key" == r3 ? t4 = u4[r3] : "ref" == r3 ? o3 = u4[r3] : f4[r3] = u4[r3]; + return arguments.length > 2 && (f4.children = arguments.length > 3 ? n.call(arguments, 2) : i4), v(l3.type, f4, t4 || l3.key, o3 || l3.ref, null); +} +function B(n2, l3) { + var u4 = { __c: l3 = "__cC" + r++, __: n2, Consumer: function(n3, l4) { + return n3.children(l4); + }, Provider: function(n3) { + var u5, i4; + return this.getChildContext || (u5 = [], (i4 = {})[l3] = this, this.getChildContext = function() { + return i4; + }, this.shouldComponentUpdate = function(n4) { + this.props.value !== n4.value && u5.some(b); + }, this.sub = function(n4) { + u5.push(n4); + var l4 = n4.componentWillUnmount; + n4.componentWillUnmount = function() { + u5.splice(u5.indexOf(n4), 1), l4 && l4.call(n4); + }; + }), n3.children; + } }; + return u4.Provider.__ = u4.Consumer.contextType = u4; +} +n = e.slice, l = { __e: function(n2, l3, u4, i4) { + for (var t4, o3, r3; l3 = l3.__; ) + if ((t4 = l3.__c) && !t4.__) + try { + if ((o3 = t4.constructor) && null != o3.getDerivedStateFromError && (t4.setState(o3.getDerivedStateFromError(n2)), r3 = t4.__d), null != t4.componentDidCatch && (t4.componentDidCatch(n2, i4 || {}), r3 = t4.__d), r3) + return t4.__E = t4; + } catch (l4) { + n2 = l4; } - } - out[at] = v3; - return out; - }; - var arraySpliceOut = function arraySpliceOut2(mutate2, at, arr) { - var newLen = arr.length - 1; - var i4 = 0; - var g4 = 0; - var out = arr; - if (mutate2) { - i4 = g4 = at; - } else { - out = new Array(newLen); - while (i4 < at) { - out[g4++] = arr[i4++]; + throw n2; +} }, u = 0, i = function(n2) { + return null != n2 && void 0 === n2.constructor; +}, d.prototype.setState = function(n2, l3) { + var u4; + u4 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = s({}, this.state), "function" == typeof n2 && (n2 = n2(s({}, u4), this.props)), n2 && s(u4, n2), null != n2 && this.__v && (l3 && this._sb.push(l3), b(this)); +}, d.prototype.forceUpdate = function(n2) { + this.__v && (this.__e = true, n2 && this.__h.push(n2), b(this)); +}, d.prototype.render = p, t = [], g.__r = 0, r = 0; + +// node_modules/preact/hooks/dist/hooks.module.js +var t2; +var r2; +var u2; +var i2; +var o2 = 0; +var f2 = []; +var c2 = []; +var e2 = l.__b; +var a2 = l.__r; +var v2 = l.diffed; +var l2 = l.__c; +var m2 = l.unmount; +function d2(t4, u4) { + l.__h && l.__h(r2, t4, o2 || u4), o2 = 0; + var i4 = r2.__H || (r2.__H = { __: [], __h: [] }); + return t4 >= i4.__.length && i4.__.push({ __V: c2 }), i4.__[t4]; +} +function p2(n2) { + return o2 = 1, y2(B2, n2); +} +function y2(n2, u4, i4) { + var o3 = d2(t2++, 2); + if (o3.t = n2, !o3.__c && (o3.__ = [i4 ? i4(u4) : B2(void 0, u4), function(n3) { + var t4 = o3.__N ? o3.__N[0] : o3.__[0], r3 = o3.t(t4, n3); + t4 !== r3 && (o3.__N = [r3, o3.__[1]], o3.__c.setState({})); + }], o3.__c = r2, !r2.u)) { + r2.u = true; + var f4 = r2.shouldComponentUpdate; + r2.shouldComponentUpdate = function(n3, t4, r3) { + if (!o3.__c.__H) + return true; + var u5 = o3.__c.__H.__.filter(function(n4) { + return n4.__c; + }); + if (u5.every(function(n4) { + return !n4.__N; + })) + return !f4 || f4.call(this, n3, t4, r3); + var i5 = false; + return u5.forEach(function(n4) { + if (n4.__N) { + var t5 = n4.__[0]; + n4.__ = n4.__N, n4.__N = void 0, t5 !== n4.__[0] && (i5 = true); + } + }), !(!i5 && o3.__c.props === n3) && (!f4 || f4.call(this, n3, t4, r3)); + }; + } + return o3.__N || o3.__; +} +function h2(u4, i4) { + var o3 = d2(t2++, 3); + !l.__s && z2(o3.__H, i4) && (o3.__ = u4, o3.i = i4, r2.__H.__h.push(o3)); +} +function s2(u4, i4) { + var o3 = d2(t2++, 4); + !l.__s && z2(o3.__H, i4) && (o3.__ = u4, o3.i = i4, r2.__h.push(o3)); +} +function _2(n2) { + return o2 = 5, F(function() { + return { current: n2 }; + }, []); +} +function A2(n2, t4, r3) { + o2 = 6, s2(function() { + return "function" == typeof n2 ? (n2(t4()), function() { + return n2(null); + }) : n2 ? (n2.current = t4(), function() { + return n2.current = null; + }) : void 0; + }, null == r3 ? r3 : r3.concat(n2)); +} +function F(n2, r3) { + var u4 = d2(t2++, 7); + return z2(u4.__H, r3) ? (u4.__V = n2(), u4.i = r3, u4.__h = n2, u4.__V) : u4.__; +} +function T2(n2, t4) { + return o2 = 8, F(function() { + return n2; + }, t4); +} +function q2(n2) { + var u4 = r2.context[n2.__c], i4 = d2(t2++, 9); + return i4.c = n2, u4 ? (null == i4.__ && (i4.__ = true, u4.sub(r2)), u4.props.value) : n2.__; +} +function x2(t4, r3) { + l.useDebugValue && l.useDebugValue(r3 ? r3(t4) : t4); +} +function P2(n2) { + var u4 = d2(t2++, 10), i4 = p2(); + return u4.__ = n2, r2.componentDidCatch || (r2.componentDidCatch = function(n3, t4) { + u4.__ && u4.__(n3, t4), i4[1](n3); + }), [i4[0], function() { + i4[1](void 0); + }]; +} +function V() { + var n2 = d2(t2++, 11); + if (!n2.__) { + for (var u4 = r2.__v; null !== u4 && !u4.__m && null !== u4.__; ) + u4 = u4.__; + var i4 = u4.__m || (u4.__m = [0, 0]); + n2.__ = "P" + i4[0] + "-" + i4[1]++; + } + return n2.__; +} +function b2() { + for (var t4; t4 = f2.shift(); ) + if (t4.__P && t4.__H) + try { + t4.__H.__h.forEach(k2), t4.__H.__h.forEach(w2), t4.__H.__h = []; + } catch (r3) { + t4.__H.__h = [], l.__e(r3, t4.__v); } +} +l.__b = function(n2) { + r2 = null, e2 && e2(n2); +}, l.__r = function(n2) { + a2 && a2(n2), t2 = 0; + var i4 = (r2 = n2.__c).__H; + i4 && (u2 === r2 ? (i4.__h = [], r2.__h = [], i4.__.forEach(function(n3) { + n3.__N && (n3.__ = n3.__N), n3.__V = c2, n3.__N = n3.i = void 0; + })) : (i4.__h.forEach(k2), i4.__h.forEach(w2), i4.__h = [])), u2 = r2; +}, l.diffed = function(t4) { + v2 && v2(t4); + var o3 = t4.__c; + o3 && o3.__H && (o3.__H.__h.length && (1 !== f2.push(o3) && i2 === l.requestAnimationFrame || ((i2 = l.requestAnimationFrame) || j2)(b2)), o3.__H.__.forEach(function(n2) { + n2.i && (n2.__H = n2.i), n2.__V !== c2 && (n2.__ = n2.__V), n2.i = void 0, n2.__V = c2; + })), u2 = r2 = null; +}, l.__c = function(t4, r3) { + r3.some(function(t5) { + try { + t5.__h.forEach(k2), t5.__h = t5.__h.filter(function(n2) { + return !n2.__ || w2(n2); + }); + } catch (u4) { + r3.some(function(n2) { + n2.__h && (n2.__h = []); + }), r3 = [], l.__e(u4, t5.__v); } - ++i4; - while (i4 <= newLen) { - out[g4++] = arr[i4++]; - } - if (mutate2) { - out.length = newLen; + }), l2 && l2(t4, r3); +}, l.unmount = function(t4) { + m2 && m2(t4); + var r3, u4 = t4.__c; + u4 && u4.__H && (u4.__H.__.forEach(function(n2) { + try { + k2(n2); + } catch (n3) { + r3 = n3; } - return out; + }), u4.__H = void 0, r3 && l.__e(r3, u4.__v)); +}; +var g2 = "function" == typeof requestAnimationFrame; +function j2(n2) { + var t4, r3 = function() { + clearTimeout(u4), g2 && cancelAnimationFrame(t4), setTimeout(n2); + }, u4 = setTimeout(r3, 100); + g2 && (t4 = requestAnimationFrame(r3)); +} +function k2(n2) { + var t4 = r2, u4 = n2.__c; + "function" == typeof u4 && (n2.__c = void 0, u4()), r2 = t4; +} +function w2(n2) { + var t4 = r2; + n2.__c = n2.__(), r2 = t4; +} +function z2(n2, t4) { + return !n2 || n2.length !== t4.length || t4.some(function(t5, r3) { + return t5 !== n2[r3]; + }); +} +function B2(n2, t4) { + return "function" == typeof t4 ? t4(n2) : t4; +} + +// node_modules/preact/compat/dist/compat.module.js +function g3(n2, t4) { + for (var e4 in t4) + n2[e4] = t4[e4]; + return n2; +} +function C2(n2, t4) { + for (var e4 in n2) + if ("__source" !== e4 && !(e4 in t4)) + return true; + for (var r3 in t4) + if ("__source" !== r3 && n2[r3] !== t4[r3]) + return true; + return false; +} +function E(n2, t4) { + return n2 === t4 && (0 !== n2 || 1 / n2 == 1 / t4) || n2 != n2 && t4 != t4; +} +function w3(n2) { + this.props = n2; +} +function R(n2, e4) { + function r3(n3) { + var t4 = this.props.ref, r4 = t4 == n3.ref; + return !r4 && t4 && (t4.call ? t4(null) : t4.current = null), e4 ? !e4(this.props, n3) || !r4 : C2(this.props, n3); + } + function u4(e5) { + return this.shouldComponentUpdate = r3, h(n2, e5); + } + return u4.displayName = "Memo(" + (n2.displayName || n2.name) + ")", u4.prototype.isReactComponent = true, u4.__f = true, u4; +} +(w3.prototype = new d()).isPureReactComponent = true, w3.prototype.shouldComponentUpdate = function(n2, t4) { + return C2(this.props, n2) || C2(this.state, t4); +}; +var x3 = l.__b; +l.__b = function(n2) { + n2.type && n2.type.__f && n2.ref && (n2.props.ref = n2.ref, n2.ref = null), x3 && x3(n2); +}; +var N2 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911; +function k3(n2) { + function t4(t5) { + var e4 = g3({}, t5); + return delete e4.ref, n2(e4, t5.ref || null); + } + return t4.$$typeof = N2, t4.render = t4, t4.prototype.isReactComponent = t4.__f = true, t4.displayName = "ForwardRef(" + (n2.displayName || n2.name) + ")", t4; +} +var A3 = function(n2, t4) { + return null == n2 ? null : x(x(n2).map(t4)); +}; +var O2 = { map: A3, forEach: A3, count: function(n2) { + return n2 ? x(n2).length : 0; +}, only: function(n2) { + var t4 = x(n2); + if (1 !== t4.length) + throw "Children.only"; + return t4[0]; +}, toArray: x }; +var T3 = l.__e; +l.__e = function(n2, t4, e4, r3) { + if (n2.then) { + for (var u4, o3 = t4; o3 = o3.__; ) + if ((u4 = o3.__c) && u4.__c) + return null == t4.__e && (t4.__e = e4.__e, t4.__k = e4.__k), u4.__c(n2, t4); + } + T3(n2, t4, e4, r3); +}; +var I2 = l.unmount; +function L2(n2, t4, e4) { + return n2 && (n2.__c && n2.__c.__H && (n2.__c.__H.__.forEach(function(n3) { + "function" == typeof n3.__c && n3.__c(); + }), n2.__c.__H = null), null != (n2 = g3({}, n2)).__c && (n2.__c.__P === e4 && (n2.__c.__P = t4), n2.__c = null), n2.__k = n2.__k && n2.__k.map(function(n3) { + return L2(n3, t4, e4); + })), n2; +} +function U(n2, t4, e4) { + return n2 && (n2.__v = null, n2.__k = n2.__k && n2.__k.map(function(n3) { + return U(n3, t4, e4); + }), n2.__c && n2.__c.__P === t4 && (n2.__e && e4.insertBefore(n2.__e, n2.__d), n2.__c.__e = true, n2.__c.__P = e4)), n2; +} +function D() { + this.__u = 0, this.t = null, this.__b = null; +} +function F2(n2) { + var t4 = n2.__.__c; + return t4 && t4.__a && t4.__a(n2); +} +function M2(n2) { + var e4, r3, u4; + function o3(o4) { + if (e4 || (e4 = n2()).then(function(n3) { + r3 = n3.default || n3; + }, function(n3) { + u4 = n3; + }), u4) + throw u4; + if (!r3) + throw e4; + return h(r3, o4); + } + return o3.displayName = "Lazy", o3.__f = true, o3; +} +function V2() { + this.u = null, this.o = null; +} +l.unmount = function(n2) { + var t4 = n2.__c; + t4 && t4.__R && t4.__R(), t4 && true === n2.__h && (n2.type = null), I2 && I2(n2); +}, (D.prototype = new d()).__c = function(n2, t4) { + var e4 = t4.__c, r3 = this; + null == r3.t && (r3.t = []), r3.t.push(e4); + var u4 = F2(r3.__v), o3 = false, i4 = function() { + o3 || (o3 = true, e4.__R = null, u4 ? u4(l3) : l3()); }; - var arraySpliceIn = function arraySpliceIn2(mutate2, at, v3, arr) { - var len = arr.length; - if (mutate2) { - var _i = len; - while (_i >= at) { - arr[_i--] = arr[_i]; + e4.__R = i4; + var l3 = function() { + if (!--r3.__u) { + if (r3.state.__a) { + var n3 = r3.state.__a; + r3.__v.__k[0] = U(n3, n3.__c.__P, n3.__c.__O); } - arr[at] = v3; - return arr; + var t5; + for (r3.setState({ __a: r3.__b = null }); t5 = r3.t.pop(); ) + t5.forceUpdate(); } - var i4 = 0, g4 = 0; - var out = new Array(len + 1); - while (i4 < at) { - out[g4++] = arr[i4++]; + }, c4 = true === t4.__h; + r3.__u++ || c4 || r3.setState({ __a: r3.__b = r3.__v.__k[0] }), n2.then(i4, i4); +}, D.prototype.componentWillUnmount = function() { + this.t = []; +}, D.prototype.render = function(n2, e4) { + if (this.__b) { + if (this.__v.__k) { + var r3 = document.createElement("div"), o3 = this.__v.__k[0].__c; + this.__v.__k[0] = L2(this.__b, r3, o3.__O = o3.__P); } - out[at] = v3; - while (i4 < len) { - out[++g4] = arr[i4++]; + this.__b = null; + } + var i4 = e4.__a && h(p, null, n2.fallback); + return i4 && (i4.__h = null), [h(p, null, e4.__a ? null : n2.children), i4]; +}; +var W = function(n2, t4, e4) { + if (++e4[1] === e4[0] && n2.o.delete(t4), n2.props.revealOrder && ("t" !== n2.props.revealOrder[0] || !n2.o.size)) + for (e4 = n2.u; e4; ) { + for (; e4.length > 3; ) + e4.pop()(); + if (e4[1] < e4[0]) + break; + n2.u = e4 = e4[2]; } - return out; - }; - var LEAF = 1; - var COLLISION = 2; - var INDEX = 3; - var ARRAY = 4; - var empty = { - __hamt_isEmpty: true - }; - var isEmptyNode = function isEmptyNode2(x5) { - return x5 === empty || x5 && x5.__hamt_isEmpty; - }; - var Leaf = function Leaf2(edit, hash2, key2, value) { - return { - type: LEAF, - edit, - hash: hash2, - key: key2, - value, - _modify: Leaf__modify +}; +function P3(n2) { + return this.getChildContext = function() { + return n2.context; + }, n2.children; +} +function $2(n2) { + var e4 = this, r3 = n2.i; + e4.componentWillUnmount = function() { + P(null, e4.l), e4.l = null, e4.i = null; + }, e4.i && e4.i !== r3 && e4.componentWillUnmount(), n2.__v ? (e4.l || (e4.i = r3, e4.l = { nodeType: 1, parentNode: r3, childNodes: [], appendChild: function(n3) { + this.childNodes.push(n3), e4.i.appendChild(n3); + }, insertBefore: function(n3, t4) { + this.childNodes.push(n3), e4.i.appendChild(n3); + }, removeChild: function(n3) { + this.childNodes.splice(this.childNodes.indexOf(n3) >>> 1, 1), e4.i.removeChild(n3); + } }), P(h(P3, { context: e4.context }, n2.__v), e4.l)) : e4.l && e4.componentWillUnmount(); +} +function j3(n2, e4) { + var r3 = h($2, { __v: n2, i: e4 }); + return r3.containerInfo = e4, r3; +} +(V2.prototype = new d()).__a = function(n2) { + var t4 = this, e4 = F2(t4.__v), r3 = t4.o.get(n2); + return r3[0]++, function(u4) { + var o3 = function() { + t4.props.revealOrder ? (r3.push(u4), W(t4, n2, r3)) : u4(); }; + e4 ? e4(o3) : o3(); }; - var Collision2 = function Collision3(edit, hash2, children) { - return { - type: COLLISION, - edit, - hash: hash2, - children, - _modify: Collision__modify - }; - }; - var IndexedNode = function IndexedNode2(edit, mask, children) { - return { - type: INDEX, - edit, - mask, - children, - _modify: IndexedNode__modify - }; - }; - var ArrayNode = function ArrayNode2(edit, size2, children) { - return { - type: ARRAY, - edit, - size: size2, - children, - _modify: ArrayNode__modify - }; - }; - var isLeaf = function isLeaf2(node) { - return node === empty || node.type === LEAF || node.type === COLLISION; - }; - var expand = function expand2(edit, frag, child, bitmap, subNodes) { - var arr = []; - var bit = bitmap; - var count3 = 0; - for (var i4 = 0; bit; ++i4) { - if (bit & 1) - arr[i4] = subNodes[count3++]; - bit >>>= 1; - } - arr[frag] = child; - return ArrayNode(edit, count3 + 1, arr); - }; - var pack = function pack2(edit, count3, removed, elements) { - var children = new Array(count3 - 1); - var g4 = 0; - var bitmap = 0; - for (var i4 = 0, len = elements.length; i4 < len; ++i4) { - if (i4 !== removed) { - var elem = elements[i4]; - if (elem && !isEmptyNode(elem)) { - children[g4++] = elem; - bitmap |= 1 << i4; - } - } - } - return IndexedNode(edit, bitmap, children); - }; - var mergeLeaves = function mergeLeaves2(edit, shift, h1, n1, h22, n2) { - if (h1 === h22) - return Collision2(edit, h1, [n2, n1]); - var subH1 = hashFragment(shift, h1); - var subH2 = hashFragment(shift, h22); - return IndexedNode(edit, toBitmap(subH1) | toBitmap(subH2), subH1 === subH2 ? [mergeLeaves2(edit, shift + SIZE, h1, n1, h22, n2)] : subH1 < subH2 ? [n1, n2] : [n2, n1]); - }; - var updateCollisionList = function updateCollisionList2(mutate2, edit, keyEq, h5, list, f4, k5, size2) { - var len = list.length; - for (var i4 = 0; i4 < len; ++i4) { - var child = list[i4]; - if (keyEq(k5, child.key)) { - var value = child.value; - var _newValue = f4(value); - if (_newValue === value) - return list; - if (_newValue === nothing) { - --size2.value; - return arraySpliceOut(mutate2, i4, list); - } - return arrayUpdate(mutate2, i4, Leaf(edit, h5, k5, _newValue), list); - } - } - var newValue = f4(); - if (newValue === nothing) - return list; - ++size2.value; - return arrayUpdate(mutate2, len, Leaf(edit, h5, k5, newValue), list); - }; - var canEditNode = function canEditNode2(edit, node) { - return edit === node.edit; - }; - var Leaf__modify = function Leaf__modify2(edit, keyEq, shift, f4, h5, k5, size2) { - if (keyEq(k5, this.key)) { - var _v = f4(this.value); - if (_v === this.value) - return this; - else if (_v === nothing) { - --size2.value; - return empty; - } - if (canEditNode(edit, this)) { - this.value = _v; - return this; - } - return Leaf(edit, h5, k5, _v); - } - var v3 = f4(); - if (v3 === nothing) - return this; - ++size2.value; - return mergeLeaves(edit, shift, this.hash, this, h5, Leaf(edit, h5, k5, v3)); - }; - var Collision__modify = function Collision__modify2(edit, keyEq, shift, f4, h5, k5, size2) { - if (h5 === this.hash) { - var canEdit = canEditNode(edit, this); - var list = updateCollisionList(canEdit, edit, keyEq, this.hash, this.children, f4, k5, size2); - if (list === this.children) - return this; - return list.length > 1 ? Collision2(edit, this.hash, list) : list[0]; - } - var v3 = f4(); - if (v3 === nothing) - return this; - ++size2.value; - return mergeLeaves(edit, shift, this.hash, this, h5, Leaf(edit, h5, k5, v3)); - }; - var IndexedNode__modify = function IndexedNode__modify2(edit, keyEq, shift, f4, h5, k5, size2) { - var mask = this.mask; - var children = this.children; - var frag = hashFragment(shift, h5); - var bit = toBitmap(frag); - var indx = fromBitmap(mask, bit); - var exists = mask & bit; - var current = exists ? children[indx] : empty; - var child = current._modify(edit, keyEq, shift + SIZE, f4, h5, k5, size2); - if (current === child) - return this; - var canEdit = canEditNode(edit, this); - var bitmap = mask; - var newChildren = void 0; - if (exists && isEmptyNode(child)) { - bitmap &= ~bit; - if (!bitmap) - return empty; - if (children.length <= 2 && isLeaf(children[indx ^ 1])) - return children[indx ^ 1]; - newChildren = arraySpliceOut(canEdit, indx, children); - } else if (!exists && !isEmptyNode(child)) { - if (children.length >= MAX_INDEX_NODE) - return expand(edit, frag, child, mask, children); - bitmap |= bit; - newChildren = arraySpliceIn(canEdit, indx, child, children); - } else { - newChildren = arrayUpdate(canEdit, indx, child, children); - } - if (canEdit) { - this.mask = bitmap; - this.children = newChildren; - return this; - } - return IndexedNode(edit, bitmap, newChildren); - }; - var ArrayNode__modify = function ArrayNode__modify2(edit, keyEq, shift, f4, h5, k5, size2) { - var count3 = this.size; - var children = this.children; - var frag = hashFragment(shift, h5); - var child = children[frag]; - var newChild = (child || empty)._modify(edit, keyEq, shift + SIZE, f4, h5, k5, size2); - if (child === newChild) - return this; - var canEdit = canEditNode(edit, this); - var newChildren = void 0; - if (isEmptyNode(child) && !isEmptyNode(newChild)) { - ++count3; - newChildren = arrayUpdate(canEdit, frag, newChild, children); - } else if (!isEmptyNode(child) && isEmptyNode(newChild)) { - --count3; - if (count3 <= MIN_ARRAY_NODE) - return pack(edit, count3, frag, children); - newChildren = arrayUpdate(canEdit, frag, empty, children); - } else { - newChildren = arrayUpdate(canEdit, frag, newChild, children); - } - if (canEdit) { - this.size = count3; - this.children = newChildren; - return this; +}, V2.prototype.render = function(n2) { + this.u = null, this.o = /* @__PURE__ */ new Map(); + var t4 = x(n2.children); + n2.revealOrder && "b" === n2.revealOrder[0] && t4.reverse(); + for (var e4 = t4.length; e4--; ) + this.o.set(t4[e4], this.u = [1, 0, this.u]); + return n2.children; +}, V2.prototype.componentDidUpdate = V2.prototype.componentDidMount = function() { + var n2 = this; + this.o.forEach(function(t4, e4) { + W(n2, e4, t4); + }); +}; +var z3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; +var B3 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; +var H2 = "undefined" != typeof document; +var Z = function(n2) { + return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/i : /fil|che|ra/i).test(n2); +}; +function Y(n2, t4, e4) { + return null == t4.__k && (t4.textContent = ""), P(n2, t4), "function" == typeof e4 && e4(), n2 ? n2.__c : null; +} +function q3(n2, t4, e4) { + return S(n2, t4), "function" == typeof e4 && e4(), n2 ? n2.__c : null; +} +d.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t4) { + Object.defineProperty(d.prototype, t4, { configurable: true, get: function() { + return this["UNSAFE_" + t4]; + }, set: function(n2) { + Object.defineProperty(this, t4, { configurable: true, writable: true, value: n2 }); + } }); +}); +var G = l.event; +function J() { +} +function K() { + return this.cancelBubble; +} +function Q() { + return this.defaultPrevented; +} +l.event = function(n2) { + return G && (n2 = G(n2)), n2.persist = J, n2.isPropagationStopped = K, n2.isDefaultPrevented = Q, n2.nativeEvent = n2; +}; +var X; +var nn = { configurable: true, get: function() { + return this.class; +} }; +var tn = l.vnode; +l.vnode = function(n2) { + var t4 = n2.type, e4 = n2.props, u4 = e4; + if ("string" == typeof t4) { + var o3 = -1 === t4.indexOf("-"); + for (var i4 in u4 = {}, e4) { + var l3 = e4[i4]; + H2 && "children" === i4 && "noscript" === t4 || "value" === i4 && "defaultValue" in e4 && null == l3 || ("defaultValue" === i4 && "value" in e4 && null == e4.value ? i4 = "value" : "download" === i4 && true === l3 ? l3 = "" : /ondoubleclick/i.test(i4) ? i4 = "ondblclick" : /^onchange(textarea|input)/i.test(i4 + t4) && !Z(e4.type) ? i4 = "oninput" : /^onfocus$/i.test(i4) ? i4 = "onfocusin" : /^onblur$/i.test(i4) ? i4 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i4) ? i4 = i4.toLowerCase() : o3 && B3.test(i4) ? i4 = i4.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : null === l3 && (l3 = void 0), /^oninput$/i.test(i4) && (i4 = i4.toLowerCase(), u4[i4] && (i4 = "oninputCapture")), u4[i4] = l3); } - return ArrayNode(edit, count3, newChildren); - }; - empty._modify = function(edit, keyEq, shift, f4, h5, k5, size2) { - var v3 = f4(); - if (v3 === nothing) - return empty; - ++size2.value; - return Leaf(edit, h5, k5, v3); - }; - function Map2(editable, edit, config, root, size2) { - this._editable = editable; - this._edit = edit; - this._config = config; - this._root = root; - this._size = size2; + "select" == t4 && u4.multiple && Array.isArray(u4.value) && (u4.value = x(e4.children).forEach(function(n3) { + n3.props.selected = -1 != u4.value.indexOf(n3.props.value); + })), "select" == t4 && null != u4.defaultValue && (u4.value = x(e4.children).forEach(function(n3) { + n3.props.selected = u4.multiple ? -1 != u4.defaultValue.indexOf(n3.props.value) : u4.defaultValue == n3.props.value; + })), n2.props = u4, e4.class != e4.className && (nn.enumerable = "className" in e4, null != e4.className && (u4.class = e4.className), Object.defineProperty(u4, "className", nn)); } - Map2.prototype.setTree = function(newRoot, newSize) { - if (this._editable) { - this._root = newRoot; - this._size = newSize; - return this; - } - return newRoot === this._root ? this : new Map2(this._editable, this._edit, this._config, newRoot, newSize); - }; - var tryGetHash = hamt.tryGetHash = function(alt, hash2, key2, map) { - var node = map._root; - var shift = 0; - var keyEq = map._config.keyEq; - while (true) { - switch (node.type) { - case LEAF: { - return keyEq(key2, node.key) ? node.value : alt; - } - case COLLISION: { - if (hash2 === node.hash) { - var children = node.children; - for (var i4 = 0, len = children.length; i4 < len; ++i4) { - var child = children[i4]; - if (keyEq(key2, child.key)) - return child.value; - } - } - return alt; - } - case INDEX: { - var frag = hashFragment(shift, hash2); - var bit = toBitmap(frag); - if (node.mask & bit) { - node = node.children[fromBitmap(node.mask, bit)]; - shift += SIZE; - break; - } - return alt; - } - case ARRAY: { - node = node.children[hashFragment(shift, hash2)]; - if (node) { - shift += SIZE; - break; - } - return alt; - } - default: - return alt; - } + n2.$$typeof = z3, tn && tn(n2); +}; +var en = l.__r; +l.__r = function(n2) { + en && en(n2), X = n2.__c; +}; +var rn = { ReactCurrentDispatcher: { current: { readContext: function(n2) { + return X.__n[n2.__c].props.value; +} } } }; +function on(n2) { + return h.bind(null, n2); +} +function ln(n2) { + return !!n2 && n2.$$typeof === z3; +} +function cn(n2) { + return ln(n2) ? q.apply(null, arguments) : n2; +} +function fn(n2) { + return !!n2.__k && (P(null, n2), true); +} +function an(n2) { + return n2 && (n2.base || 1 === n2.nodeType && n2) || null; +} +var sn = function(n2, t4) { + return n2(t4); +}; +var hn = function(n2, t4) { + return n2(t4); +}; +var vn = p; +function dn(n2) { + n2(); +} +function pn(n2) { + return n2; +} +function mn() { + return [false, dn]; +} +var yn = s2; +function _n(n2, t4) { + var e4 = t4(), r3 = p2({ h: { __: e4, v: t4 } }), u4 = r3[0].h, o3 = r3[1]; + return s2(function() { + u4.__ = e4, u4.v = t4, E(u4.__, t4()) || o3({ h: u4 }); + }, [n2, e4, t4]), h2(function() { + return E(u4.__, u4.v()) || o3({ h: u4 }), n2(function() { + E(u4.__, u4.v()) || o3({ h: u4 }); + }); + }, [n2]), e4; +} +var bn = { useState: p2, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s2, useInsertionEffect: yn, useTransition: mn, useDeferredValue: pn, useSyncExternalStore: _n, startTransition: dn, useRef: _2, useImperativeHandle: A2, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x2, version: "17.0.2", Children: O2, render: Y, hydrate: q3, unmountComponentAtNode: fn, createPortal: j3, createElement: h, createContext: B, createFactory: on, cloneElement: cn, createRef: y, Fragment: p, isValidElement: ln, findDOMNode: an, Component: d, PureComponent: w3, memo: R, forwardRef: k3, flushSync: hn, unstable_batchedUpdates: sn, StrictMode: vn, Suspense: D, SuspenseList: V2, lazy: M2, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: rn }; + +// node_modules/preact/compat/client.mjs +function createRoot(container) { + return { + render(children) { + Y(children, container); + }, + unmount() { + fn(container); } }; - Map2.prototype.tryGetHash = function(alt, hash2, key2) { - return tryGetHash(alt, hash2, key2, this); - }; - var tryGet = hamt.tryGet = function(alt, key2, map) { - return tryGetHash(alt, map._config.hash(key2), key2, map); - }; - Map2.prototype.tryGet = function(alt, key2) { - return tryGet(alt, key2, this); - }; - var getHash = hamt.getHash = function(hash2, key2, map) { - return tryGetHash(void 0, hash2, key2, map); - }; - Map2.prototype.getHash = function(hash2, key2) { - return getHash(hash2, key2, this); - }; - var get = hamt.get = function(key2, map) { - return tryGetHash(void 0, map._config.hash(key2), key2, map); - }; - Map2.prototype.get = function(key2, alt) { - return tryGet(alt, key2, this); - }; - var hasHash = hamt.has = function(hash2, key2, map) { - return tryGetHash(nothing, hash2, key2, map) !== nothing; - }; - Map2.prototype.hasHash = function(hash2, key2) { - return hasHash(hash2, key2, this); - }; - var has = hamt.has = function(key2, map) { - return hasHash(map._config.hash(key2), key2, map); - }; - Map2.prototype.has = function(key2) { - return has(key2, this); - }; - var defKeyCompare = function defKeyCompare2(x5, y5) { - return x5 === y5; - }; - hamt.make = function(config) { - return new Map2(0, 0, { - keyEq: config && config.keyEq || defKeyCompare, - hash: config && config.hash || hash - }, empty, 0); - }; - hamt.empty = hamt.make(); - var isEmpty = hamt.isEmpty = function(map) { - return map && !!isEmptyNode(map._root); - }; - Map2.prototype.isEmpty = function() { - return isEmpty(this); - }; - var modifyHash = hamt.modifyHash = function(f4, hash2, key2, map) { - var size2 = { - value: map._size - }; - var newRoot = map._root._modify(map._editable ? map._edit : NaN, map._config.keyEq, 0, f4, hash2, key2, size2); - return map.setTree(newRoot, size2.value); - }; - Map2.prototype.modifyHash = function(hash2, key2, f4) { - return modifyHash(f4, hash2, key2, this); - }; - var modify = hamt.modify = function(f4, key2, map) { - return modifyHash(f4, map._config.hash(key2), key2, map); - }; - Map2.prototype.modify = function(key2, f4) { - return modify(f4, key2, this); - }; - var setHash = hamt.setHash = function(hash2, key2, value, map) { - return modifyHash(constant(value), hash2, key2, map); - }; - Map2.prototype.setHash = function(hash2, key2, value) { - return setHash(hash2, key2, value, this); - }; - var set = hamt.set = function(key2, value, map) { - return setHash(map._config.hash(key2), key2, value, map); - }; - Map2.prototype.set = function(key2, value) { - return set(key2, value, this); - }; - var del = constant(nothing); - var removeHash = hamt.removeHash = function(hash2, key2, map) { - return modifyHash(del, hash2, key2, map); - }; - Map2.prototype.removeHash = Map2.prototype.deleteHash = function(hash2, key2) { - return removeHash(hash2, key2, this); - }; - var remove = hamt.remove = function(key2, map) { - return removeHash(map._config.hash(key2), key2, map); - }; - Map2.prototype.remove = Map2.prototype.delete = function(key2) { - return remove(key2, this); - }; - var beginMutation = hamt.beginMutation = function(map) { - return new Map2(map._editable + 1, map._edit + 1, map._config, map._root, map._size); - }; - Map2.prototype.beginMutation = function() { - return beginMutation(this); - }; - var endMutation = hamt.endMutation = function(map) { - map._editable = map._editable && map._editable - 1; - return map; - }; - Map2.prototype.endMutation = function() { - return endMutation(this); - }; - var mutate = hamt.mutate = function(f4, map) { - var transient = beginMutation(map); - f4(transient); - return endMutation(transient); - }; - Map2.prototype.mutate = function(f4) { - return mutate(f4, this); - }; - var appk = function appk2(k5) { - return k5 && lazyVisitChildren(k5[0], k5[1], k5[2], k5[3], k5[4]); - }; - var lazyVisitChildren = function lazyVisitChildren2(len, children, i4, f4, k5) { - while (i4 < len) { - var child = children[i4++]; - if (child && !isEmptyNode(child)) - return lazyVisit(child, f4, [len, children, i4, f4, k5]); +} + +// src/utils/codemirror.ts +var import_language2 = require("@codemirror/language"); +var getActiveCM = () => { + let rcm; + app.workspace.iterateLeaves((leaf) => { + var _a2; + const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; + if (cm == null ? void 0 : cm.hasFocus) { + rcm = cm; + return true; } - return appk(k5); - }; - var lazyVisit = function lazyVisit2(node, f4, k5) { - switch (node.type) { - case LEAF: - return { - value: f4(node), - rest: k5 - }; - case COLLISION: - case ARRAY: - case INDEX: - var children = node.children; - return lazyVisitChildren(children.length, children, 0, f4, k5); - default: - return appk(k5); + }, app.workspace["rootSplit"]); + return rcm; +}; +var getActiveMarkdownView = () => { + let rv; + app.workspace.iterateLeaves((leaf) => { + var _a2; + const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; + if (cm == null ? void 0 : cm.hasFocus) { + rv = leaf.view; + return true; } - }; - var DONE = { - done: true - }; - function MapIterator(v3) { - this.v = v3; - } - MapIterator.prototype.next = function() { - if (!this.v) - return DONE; - var v0 = this.v; - this.v = appk(v0.rest); - return v0; - }; - MapIterator.prototype[Symbol.iterator] = function() { - return this; - }; - var visit = function visit2(map, f4) { - return new MapIterator(lazyVisit(map._root, f4)); - }; - var buildPairs = function buildPairs2(x5) { - return [x5.key, x5.value]; - }; - var entries = hamt.entries = function(map) { - return visit(map, buildPairs); - }; - Map2.prototype.entries = Map2.prototype[Symbol.iterator] = function() { - return entries(this); - }; - var buildKeys = function buildKeys2(x5) { - return x5.key; - }; - var keys = hamt.keys = function(map) { - return visit(map, buildKeys); - }; - Map2.prototype.keys = function() { - return keys(this); - }; - var buildValues = function buildValues2(x5) { - return x5.value; - }; - var values = hamt.values = Map2.prototype.values = function(map) { - return visit(map, buildValues); - }; - Map2.prototype.values = function() { - return values(this); - }; - var fold = hamt.fold = function(f4, z5, m5) { - var root = m5._root; - if (root.type === LEAF) - return f4(z5, root.value, root.key); - var toVisit = [root.children]; - var children = void 0; - while (children = toVisit.pop()) { - for (var i4 = 0, len = children.length; i4 < len; ) { - var child = children[i4++]; - if (child && child.type) { - if (child.type === LEAF) - z5 = f4(z5, child.value, child.key); - else - toVisit.push(child.children); - } - } - } - return z5; - }; - Map2.prototype.fold = function(f4, z5) { - return fold(f4, z5, this); - }; - var forEach = hamt.forEach = function(f4, map) { - return fold(function(_5, value, key2) { - return f4(value, key2, map); - }, null, map); - }; - Map2.prototype.forEach = function(f4) { - return forEach(f4, this); - }; - var count2 = hamt.count = function(map) { - return map._size; - }; - Map2.prototype.count = function() { - return count2(this); - }; - Object.defineProperty(Map2.prototype, "size", { - get: Map2.prototype.count - }); - if (module2.exports) { - module2.exports = hamt; - } else { - (void 0).hamt = hamt; - } -}); -var BuiltInMap = class { - constructor(existing) { - _defineProperty(this, "_map", void 0); - this._map = new Map(existing === null || existing === void 0 ? void 0 : existing.entries()); - } - keys() { - return this._map.keys(); - } - entries() { - return this._map.entries(); - } - get(k5) { - return this._map.get(k5); - } - has(k5) { - return this._map.has(k5); - } - set(k5, v3) { - this._map.set(k5, v3); - return this; - } - delete(k5) { - this._map.delete(k5); - return this; - } - clone() { - return persistentMap(this); - } - toMap() { - return new Map(this._map); - } -}; -var HashArrayMappedTrieMap = class { - constructor(existing) { - _defineProperty(this, "_hamt", hamt_1.empty.beginMutation()); - if (existing instanceof HashArrayMappedTrieMap) { - const h5 = existing._hamt.endMutation(); - existing._hamt = h5.beginMutation(); - this._hamt = h5.beginMutation(); - } else if (existing) { - for (const [k5, v3] of existing.entries()) { - this._hamt.set(k5, v3); - } - } - } - keys() { - return this._hamt.keys(); - } - entries() { - return this._hamt.entries(); - } - get(k5) { - return this._hamt.get(k5); - } - has(k5) { - return this._hamt.has(k5); - } - set(k5, v3) { - this._hamt.set(k5, v3); - return this; - } - delete(k5) { - this._hamt.delete(k5); - return this; - } - clone() { - return persistentMap(this); - } - toMap() { - return new Map(this._hamt); - } -}; -function persistentMap(existing) { - if (Recoil_gkx_1("recoil_hamt_2020")) { - return new HashArrayMappedTrieMap(existing); - } else { - return new BuiltInMap(existing); - } -} -var Recoil_PersistentMap = { - persistentMap -}; -var Recoil_PersistentMap_1 = Recoil_PersistentMap.persistentMap; -var Recoil_PersistentMap$1 = /* @__PURE__ */ Object.freeze({ - __proto__: null, - persistentMap: Recoil_PersistentMap_1 -}); -var { - graph: graph$1 -} = Recoil_Graph; -var { - persistentMap: persistentMap$1 -} = Recoil_PersistentMap$1; -var nextTreeStateVersion = 0; -var getNextTreeStateVersion = () => nextTreeStateVersion++; -function makeEmptyTreeState() { - const version = getNextTreeStateVersion(); - return { - version, - stateID: version, - transactionMetadata: {}, - dirtyAtoms: /* @__PURE__ */ new Set(), - atomValues: persistentMap$1(), - nonvalidatedAtoms: persistentMap$1() - }; -} -function makeEmptyStoreState() { - const currentTree = makeEmptyTreeState(); - return { - currentTree, - nextTree: null, - previousTree: null, - commitDepth: 0, - knownAtoms: /* @__PURE__ */ new Set(), - knownSelectors: /* @__PURE__ */ new Set(), - transactionSubscriptions: /* @__PURE__ */ new Map(), - nodeTransactionSubscriptions: /* @__PURE__ */ new Map(), - nodeToComponentSubscriptions: /* @__PURE__ */ new Map(), - queuedComponentCallbacks_DEPRECATED: [], - suspendedComponentResolvers: /* @__PURE__ */ new Set(), - graphsByVersion: (/* @__PURE__ */ new Map()).set(currentTree.version, graph$1()), - versionsUsedByComponent: /* @__PURE__ */ new Map(), - retention: { - referenceCounts: /* @__PURE__ */ new Map(), - nodesRetainedByZone: /* @__PURE__ */ new Map(), - retainablesToCheckForRelease: /* @__PURE__ */ new Set() - }, - nodeCleanupFunctions: /* @__PURE__ */ new Map() - }; -} -var Recoil_State = { - makeEmptyTreeState, - makeEmptyStoreState, - getNextTreeStateVersion + }, app.workspace["rootSplit"]); + return rv; }; -function unionSets(...sets) { - const result = /* @__PURE__ */ new Set(); - for (const set of sets) { - for (const value of set) { - result.add(value); - } - } - return result; +function iterateTreeAtPos(pos, state, iterateFns) { + (0, import_language2.syntaxTree)(state).iterate({ ...iterateFns, from: pos, to: pos }); } -var Recoil_unionSets = unionSets; -function someSet(set, callback, context) { - const iterator = set.entries(); - let current = iterator.next(); - while (!current.done) { - const entry = current.value; - if (callback.call(context, entry[1], entry[0], set)) { - return true; - } - current = iterator.next(); - } - return false; +function iterateTreeInSelection(selection, state, iterateFns) { + (0, import_language2.syntaxTree)(state).iterate({ + ...iterateFns, + from: selection.from, + to: selection.to + }); } -var Recoil_someSet = someSet; -var { - cleanUpNode: cleanUpNode$1 -} = Recoil_FunctionalCore; -var { - deleteNodeConfigIfPossible: deleteNodeConfigIfPossible$1, - getNode: getNode$2 -} = Recoil_Node; -var { - RetentionZone: RetentionZone$2 -} = Recoil_RetentionZone; -var emptySet$1 = /* @__PURE__ */ new Set(); -function releaseRetainablesNowOnCurrentTree(store, retainables) { - const storeState = store.getState(); - const treeState = storeState.currentTree; - if (storeState.nextTree) { - Recoil_recoverableViolation("releaseNodesNowOnCurrentTree should only be called at the end of a batch"); - return; - } - const nodes2 = /* @__PURE__ */ new Set(); - for (const r3 of retainables) { - if (r3 instanceof RetentionZone$2) { - for (const n2 of nodesRetainedByZone(storeState, r3)) { - nodes2.add(n2); - } - } else { - nodes2.add(r3); - } - } - const releasableNodes = findReleasableNodes(store, nodes2); - for (const node of releasableNodes) { - releaseNode(store, treeState, node); - } +function iterateTreeInDocument(state, iterateFns) { + (0, import_language2.syntaxTree)(state).iterate({ ...iterateFns }); } -function findReleasableNodes(store, searchFromNodes) { - const storeState = store.getState(); - const treeState = storeState.currentTree; - const graph2 = store.getGraph(treeState.version); - const releasableNodes = /* @__PURE__ */ new Set(); - const nonReleasableNodes = /* @__PURE__ */ new Set(); - findReleasableNodesInner(searchFromNodes); - return releasableNodes; - function findReleasableNodesInner(searchFromNodes2) { - const releasableNodesFoundThisIteration = /* @__PURE__ */ new Set(); - const downstreams = getDownstreamNodesInTopologicalOrder( - store, - treeState, - searchFromNodes2, - releasableNodes, - nonReleasableNodes - ); - for (const node of downstreams) { - var _storeState$retention; - if (getNode$2(node).retainedBy === "recoilRoot") { - nonReleasableNodes.add(node); - continue; - } - if (((_storeState$retention = storeState.retention.referenceCounts.get(node)) !== null && _storeState$retention !== void 0 ? _storeState$retention : 0) > 0) { - nonReleasableNodes.add(node); - continue; - } - if (zonesThatCouldRetainNode(node).some((z5) => storeState.retention.referenceCounts.get(z5))) { - nonReleasableNodes.add(node); - continue; - } - const nodeChildren = graph2.nodeToNodeSubscriptions.get(node); - if (nodeChildren && Recoil_someSet(nodeChildren, (child) => nonReleasableNodes.has(child))) { - nonReleasableNodes.add(node); - continue; - } - releasableNodes.add(node); - releasableNodesFoundThisIteration.add(node); - } - const parents = /* @__PURE__ */ new Set(); - for (const node of releasableNodesFoundThisIteration) { - for (const parent of (_graph$nodeDeps$get = graph2.nodeDeps.get(node)) !== null && _graph$nodeDeps$get !== void 0 ? _graph$nodeDeps$get : emptySet$1) { - var _graph$nodeDeps$get; - if (!releasableNodes.has(parent)) { - parents.add(parent); + +// src/i18n.ts +var T4 = class { + constructor() { + this.all = { + en: { + commands: { + h1: "Heading 1", + h2: "Heading 2", + h3: "Heading 3", + list: "Bullet List", + "ordered-list": "Numbered List", + todo: "To-do List", + quote: "Quote", + divider: "Divider", + note: "Link to Note", + link: "Web Link", + callout: "Callout", + table: "Table", + codeblock: "Code Block", + emoji: "Emoji", + image: "Image", + flow: "Flow Note", + tag: "Tag", + makeMenu: "Make Menu", + selectStyle: "Style", + toggleKeyboard: "Toggle Keyboard" + }, + styles: { + bold: "Bold", + italics: "Italics", + strikethrough: "Strikethrough", + code: "Code", + link: "Web Link", + blocklink: "Link to Note", + textColor: "Text Color", + highlight: "Highlight" + }, + commandsSuggest: { + noResult: "No result" + }, + commandPalette: { + enable: "Enable", + disabled: "Disable", + openFlow: "Open Flow Editors in Selection", + closeFlow: "Close Flow Editors in Selection", + toggleBold: "Toggle Bold", + toggleItalics: "Toggle Italics" + }, + menu: { + openFilePane: "Open in a new pane", + rename: "Rename", + moveFile: "Move file to...", + duplicate: "Make a copy", + edit: "Edit", + delete: "Delete", + getHelp: "Make.md Community", + openVault: "Open Another Vault", + obSettings: "Obsidian Settings", + commandPalette: "Command Palette", + backToSpace: "Back to Spaces", + newSpace: "New Space", + collapseAllSections: "Collapse All Spaces", + expandAllSections: "Expand All Spaces", + collapseAllFolders: "Collapse All Folders", + expandAllFolders: "Expand All Folders", + spaceTitle: "Add/Remove in Space" + }, + buttons: { + moreOptions: "More Options", + newNote: "New Note", + changeIcon: "Change Sticker", + removeIcon: "Remove Sticker", + rename: "Change Name", + createFolder: "New Folder", + createNote: "New Note", + createSection: "New Space", + cancel: "Cancel", + search: "Search", + toggleFlow: "Toggle Flow", + openFlow: "Open Flow", + hideFlow: "Hide Flow", + openLink: "Open Link" + }, + labels: { + createFolder: "New Folder Name", + rename: "Rename Note", + renameSection: "Rename Space", + createSection: "New Space", + createNote: "New Note Name", + collapse: "Collapse", + expand: "Expand", + findStickers: "Find Sticker", + placeholder: "Type '/' for commands", + noFile: "is not created yet. Click to create." + }, + flowView: { + emptyDoc: "Empty Document", + itemsCount: " Items", + emptyFolder: "This Folder is Empty" + }, + notice: { + duplicateFile: "Folder already contains note with same name", + addedToSection: "Added to Space" + }, + settings: { + sectionSidebar: "Spaces", + sectionEditor: "Maker Mode", + sectionFlow: "Flow Editor", + sectionAdvanced: "Advanced", + spaces: { + name: "Spaces", + desc: `Spaces gives you control over how you organize your files` + }, + spacesStickers: { + name: "Stickers", + desc: `Use Emojis to make it easier to find your notes` + }, + spacesFileExplorerDual: { + name: "Use Spaces Alongside File Explorer", + desc: "This will allow plugins that uses the File Explorer to work while using Spaces" + }, + spacesDeleteOption: { + name: "Delete File Option", + desc: "Select how you want files to be deleted" + }, + spacesDeleteOptions: { + permanant: "Delete Permanently", + trash: "Move to Obsidian Trash", + "system-trash": "Move to System Trash" + }, + hideRibbon: { + name: "App Ribbon", + desc: `Show/hide the left menu aka. ribbon` + }, + sidebarTabs: { + name: "Sidebar Tabs", + desc: `Show/hide other sidebar tabs` + }, + spacesPerformance: { + name: "Spaces Performance Mode", + desc: `Turn on performance mode for Spaces, may affect scrolling appearance. Requires Restart` + }, + inlineStyler: { + name: "Inline Styler", + desc: `Select text to add styling, recommended for Flow Editor` + }, + inlineStylerColor: { + name: "Text and Highlight Colors \u{1F9EA}", + desc: `Select text color and highlight color, (this may change in the future because of the limitations with HTML and Obsidian)` + }, + makeChar: { + name: "Make Menu Trigger", + desc: "Character to open the Make Menu" + }, + mobileMakeBar: { + name: "Make Bar (Mobile)", + desc: "Replaces the mobile toolbar" + }, + editorMarkSans: { + name: "Mark Sans \u{1F9EA}", + desc: `Use the editor without Markdown.` + }, + editorMakePlacholder: { + name: "Make Menu Hint Text", + desc: `Show a hint text on how to open the Make Menu Shortcut` + }, + editorMakeMenu: { + name: "Make Menu Shortcut", + desc: `Open the Make menu to quickly add content` + }, + editorFlowReplace: { + name: "Flow Editor", + desc: `Open your internal links or toggle your embeds in the flow editor.` + }, + editorFlowStyle: { + name: "Flow Editor Style", + desc: "Select a theme for your flow editors", + seamless: "Seamless", + classic: "Classic" + } } } - } - if (parents.size) { - findReleasableNodesInner(parents); - } + }; + this.lang = localStorage.getItem("language"); } -} -function getDownstreamNodesInTopologicalOrder(store, treeState, nodes2, doNotDescendInto1, doNotDescendInto2) { - const graph2 = store.getGraph(treeState.version); - const answer = []; - const visited = /* @__PURE__ */ new Set(); - while (nodes2.size > 0) { - visit(Recoil_nullthrows(nodes2.values().next().value)); + get texts() { + return this.all["en"]; } - return answer; - function visit(node) { - if (doNotDescendInto1.has(node) || doNotDescendInto2.has(node)) { - nodes2.delete(node); - return; - } - if (visited.has(node)) { - return; +}; +var i18n_default = new T4().texts; + +// src/utils/icons.ts +var uiIconSet = { + "mk-ui-close": ` + + `, + "mk-ui-flow-hover": ` + + `, + "mk-ui-folder": ` + + `, + "mk-ui-open-link": ` + + `, + "mk-ui-file": ` + +`, + "mk-ui-expand": ` + +`, + "mk-ui-new-folder": ``, + "mk-ui-new-note": ``, + "mk-ui-collapse": ` + +`, + "mk-ui-options": ` + +`, + "mk-ui-plus": ` + +`, + "mk-ui-collapse-sm": ` + +`, + "mk-ui-search": ` + + +`, + "mk-ui-view-options": ` + + +`, + "mk-ui-clear": ` + + +`, + "mk-ui-new-file": ` + + +`, + "mk-ui-blink": ` + + + + +`, + "mk-ui-spaces": ` + +`, + "mk-ui-tags": ` + +`, + "mk-ui-handle": ` + + + + + + + +`, + "mk-ui-new-space": ` + + +`, + "mk-ui-file-solid": ` + + + +`, + "mk-ui-folder-solid": ` + + +`, + "mk-ui-sync": ` + + +`, + "mk-ui-stack": ` + + +`, + "mk-ui-cut": ` + + +` +}; +var makeIconSet = { + "mk-make-todo": ` + + + + `, + "mk-make-list": ` + + + + + + + + `, + "mk-make-ordered": ` + + + + + + + + `, + "mk-make-h1": ` + + + + `, + "mk-make-h2": ` + + + + `, + "mk-make-h3": ` + + + + `, + "mk-make-quote": ` + + + + + + `, + "mk-make-hr": ` + + + `, + "mk-make-link": ` + + + `, + "mk-make-image": ` + + + + + + `, + "mk-make-codeblock": ` + + + + + `, + "mk-make-callout": ` + + + + `, + "mk-make-note": ` + + + + + + `, + "mk-make-flow": ` + + + `, + "mk-make-tag": ` + + + `, + "mk-make-table": ` + + + + + ` +}; +var mkLogo = ` + + +`; +var markIconSet = { + "mk-mark-strong": ` + + + `, + "mk-mark-em": ` + + `, + "mk-mark-strikethrough": ` + + + + `, + "mk-mark-code": ` + + + + + `, + "mk-mark-link": ` + + `, + "mk-mark-blocklink": ` + + + + + `, + "mk-mark-highlight": ` + + + + + + `, + "mk-make-attach": ` + + + + + `, + "mk-make-keyboard": ` + + + +`, + "mk-make-slash": ` + + + +`, + "mk-make-style": ` + +`, + "mk-mark-color": ` + + +` +}; + +// src/components/FlowEditor/FlowEditorHover.tsx +var FlowEditorHover = (props2) => { + return props2.type == "file" ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.toggle && /* @__PURE__ */ bn.createElement("div", { + "aria-label": i18n_default.buttons.toggleFlow, + onClick: props2.toggleFlow, + className: props2.toggleState ? "mk-toggle-on" : "", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-flow-hover"] } + }), /* @__PURE__ */ bn.createElement("div", { + "aria-label": i18n_default.buttons.openLink, + onClick: props2.openLink, + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-open-link"] } + })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + "aria-label": "Cut Table", + onClick: props2.cutTable, + className: "mk-icon-xsmall", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-cut"] } + }), /* @__PURE__ */ bn.createElement("div", { + "aria-label": "Delete Table", + onClick: props2.deleteTable, + className: "mk-icon-xsmall", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } + })); +}; + +// src/utils/tree.ts +var import_obsidian23 = require("obsidian"); + +// src/components/ContextView/ContextView.tsx +var import_obsidian21 = require("obsidian"); + +// src/utils/contexts/contexts.ts +var import_obsidian = require("obsidian"); +var tagFromString = (tag) => { + let string = tag; + if (string.charAt(0) != "#") + string = "#" + string; + return string.replace(/\//g, "_"); +}; +var stringFromTag = (string) => { + if (string.charAt(0) == "#") { + return string.substring(1, string.length); + } + return string; +}; +var loadTags = (plugin) => { + var _a2; + const folder = plugin.settings.tagContextFolder == "" ? app.vault.getRoot() : getAbstractFileAtPath( + app, + getFolderPathFromString(plugin.settings.tagContextFolder) + ); + return uniq([ + ...Object.keys(app.metadataCache.getTags()), + ...(_a2 = folder == null ? void 0 : folder.children.filter( + (f4) => f4 instanceof import_obsidian.TFile && f4.extension == "mdb" && f4.name.charAt(0) == "#" + ).map((f4) => fileNameToString(f4.name))) != null ? _a2 : [] + ]); +}; +var tagContextFromTag = (plugin, tag) => { + return getFolderPathFromString(plugin.settings.tagContextFolder) + "/" + tagFromString(tag) + ".mdb"; +}; +var folderContextFromFolder = (plugin, folder) => { + return (folder == "/" ? "" : folder + "/") + plugin.settings.folderContextFile + ".mdb"; +}; + +// src/utils/flow/flowEditor.ts +var import_state4 = require("@codemirror/state"); + +// src/cm-extensions/flowEditor/selectiveEditor.ts +var import_state3 = require("@codemirror/state"); +var import_view3 = require("@codemirror/view"); + +// node_modules/tslib/modules/index.js +var import_tslib = __toESM(require_tslib(), 1); +var { + __extends, + __assign, + __rest, + __decorate, + __param, + __metadata, + __awaiter, + __generator, + __exportStar, + __createBinding, + __values, + __read, + __spread, + __spreadArrays, + __spreadArray, + __await, + __asyncGenerator, + __asyncDelegator, + __asyncValues, + __makeTemplateObject, + __importStar, + __importDefault, + __classPrivateFieldGet, + __classPrivateFieldSet, + __classPrivateFieldIn +} = import_tslib.default; + +// src/cm-extensions/flowEditor/selectiveEditor.ts +var editableRange = import_state3.Annotation.define(); +var hiddenLine = import_view3.Decoration.replace({ inclusive: true }); +var hideLine = import_state3.StateField.define({ + create() { + return import_view3.Decoration.none; + }, + update(value, tr) { + var _a2; + let builder = new import_state3.RangeSetBuilder(); + if (((_a2 = tr.state.field(selectiveLinesFacet)) == null ? void 0 : _a2[0]) != void 0) { + builder.add( + tr.state.doc.line(1).from, + tr.state.doc.line(tr.state.field(selectiveLinesFacet)[0]).from, + hiddenLine + ); + builder.add( + tr.state.doc.line( + Math.min(tr.newDoc.lines, tr.state.field(selectiveLinesFacet)[1]) + ).to, + tr.state.doc.line(tr.newDoc.lines).to, + hiddenLine + ); } - const children = graph2.nodeToNodeSubscriptions.get(node); - if (children) { - for (const child of children) { - visit(child); + const dec = builder.finish(); + return dec; + }, + provide: (f4) => import_view3.EditorView.decorations.from(f4) +}); +var selectiveLinesFacet = import_state3.StateField.define({ + create: () => [void 0, void 0], + update(value, tr) { + if (tr.annotation(editableRange)) { + if (tr.annotation(editableRange)[0]) { + return [ + tr.annotation(editableRange)[0], + Math.min(tr.state.doc.lines, tr.annotation(editableRange)[1]) + ]; } + return tr.annotation(editableRange); } - visited.add(node); - nodes2.delete(node); - answer.push(node); - } -} -function releaseNode(store, treeState, node) { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; - } - cleanUpNode$1(store, node); - const storeState = store.getState(); - storeState.knownAtoms.delete(node); - storeState.knownSelectors.delete(node); - storeState.nodeTransactionSubscriptions.delete(node); - storeState.retention.referenceCounts.delete(node); - const zones = zonesThatCouldRetainNode(node); - for (const zone of zones) { - var _storeState$retention2; - (_storeState$retention2 = storeState.retention.nodesRetainedByZone.get(zone)) === null || _storeState$retention2 === void 0 ? void 0 : _storeState$retention2.delete(node); + return value; } - treeState.atomValues.delete(node); - treeState.dirtyAtoms.delete(node); - treeState.nonvalidatedAtoms.delete(node); - const graph2 = storeState.graphsByVersion.get(treeState.version); - if (graph2) { - const deps = graph2.nodeDeps.get(node); - if (deps !== void 0) { - graph2.nodeDeps.delete(node); - for (const dep of deps) { - var _graph$nodeToNodeSubs; - (_graph$nodeToNodeSubs = graph2.nodeToNodeSubscriptions.get(dep)) === null || _graph$nodeToNodeSubs === void 0 ? void 0 : _graph$nodeToNodeSubs.delete(node); +}); +var lineRangeToPosRange = (state, range) => { + return { + from: state.doc.line(range[0]).from, + to: state.doc.line(Math.min(state.doc.lines, range[1])).to + }; +}; +var smartDelete = import_state3.EditorState.transactionFilter.of( + (tr) => { + var _a2; + if (tr.isUserEvent("delete") && !tr.isUserEvent("delete.smart")) { + const initialSelections = tr.startState.selection.ranges.map((range) => ({ + from: range.from, + to: range.to + })); + if (initialSelections.length > 0 && ((_a2 = tr.startState.field(selectiveLinesFacet)) == null ? void 0 : _a2[0])) { + const posRange = lineRangeToPosRange( + tr.startState, + tr.startState.field(selectiveLinesFacet) + ); + const minFrom = Math.max(posRange.from, initialSelections[0].from); + const minTo = Math.min(posRange.to, initialSelections[0].to); + tr.startState.update({ + changes: { + from: Math.min(minFrom, minTo), + to: Math.max(minFrom, minTo) + }, + annotations: import_state3.Transaction.userEvent.of( + `${tr.annotation(import_state3.Transaction.userEvent)}.smart` + ) + }); } } - graph2.nodeToNodeSubscriptions.delete(node); + return tr; } - deleteNodeConfigIfPossible$1(node); -} -function nodesRetainedByZone(storeState, zone) { - var _storeState$retention3; - return (_storeState$retention3 = storeState.retention.nodesRetainedByZone.get(zone)) !== null && _storeState$retention3 !== void 0 ? _storeState$retention3 : emptySet$1; -} -function zonesThatCouldRetainNode(node) { - const retainedBy = getNode$2(node).retainedBy; - if (retainedBy === void 0 || retainedBy === "components" || retainedBy === "recoilRoot") { - return []; - } else if (retainedBy instanceof RetentionZone$2) { - return [retainedBy]; - } else { - return retainedBy; - } -} -function scheduleOrPerformPossibleReleaseOfRetainable(store, retainable) { - const state = store.getState(); - if (state.nextTree) { - state.retention.retainablesToCheckForRelease.add(retainable); - } else { - releaseRetainablesNowOnCurrentTree(store, /* @__PURE__ */ new Set([retainable])); +); +var preventModifyTargetRanges = import_state3.EditorState.transactionFilter.of( + (tr) => { + let newTrans = []; + try { + const selectiveLines = tr.startState.field(selectiveLinesFacet); + if (tr.isUserEvent("input") || tr.isUserEvent("delete") || tr.isUserEvent("move")) { + if (selectiveLines == null ? void 0 : selectiveLines[0]) { + const posRange = lineRangeToPosRange( + tr.startState, + tr.startState.field(selectiveLinesFacet) + ); + if (tr.changes.touchesRange(0, posRange.from - 1) || !tr.changes.touchesRange(posRange.from, posRange.to)) { + return []; + } + } + } + if (tr.state.doc.lines != tr.startState.doc.lines) { + const numberNewLines = tr.state.doc.lines - tr.startState.doc.lines; + if (selectiveLines == null ? void 0 : selectiveLines[0]) { + const posRange = lineRangeToPosRange( + tr.startState, + tr.startState.field(selectiveLinesFacet) + ); + if (tr.changes.touchesRange(0, posRange.from - 1)) { + newTrans.push({ + annotations: [ + editableRange.of([ + selectiveLines[0] + numberNewLines, + selectiveLines[1] + numberNewLines + ]) + ] + }); + } else if (tr.changes.touchesRange(posRange.from - 1, posRange.to)) { + newTrans.push({ + annotations: [ + editableRange.of([ + selectiveLines[0], + selectiveLines[1] + numberNewLines + ]) + ] + }); + } + } + } + } catch (e4) { + return []; + } + return [tr, ...newTrans]; } +); +var readOnlyRangesExtension = [smartDelete, preventModifyTargetRanges]; +var editBlockExtensions = () => [ + readOnlyRangesExtension, + hideLine, + selectiveLinesFacet +]; + +// src/components/ContextView/InlineContextView.tsx +var import_obsidian15 = require("obsidian"); + +// node_modules/@dnd-kit/utilities/dist/utilities.esm.js +function useCombinedRefs(...refs) { + return F( + () => (node) => { + refs.forEach((ref) => ref(node)); + }, + refs + ); } -function updateRetainCount(store, retainable, delta) { - var _map$get; - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; +var canUseDOM = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined"; +function isWindow(element) { + const elementString = Object.prototype.toString.call(element); + return elementString === "[object Window]" || elementString === "[object global]"; +} +function isNode(node) { + return "nodeType" in node; +} +function getWindow(target) { + var _target$ownerDocument, _target$ownerDocument2; + if (!target) { + return window; } - const map = store.getState().retention.referenceCounts; - const newCount = ((_map$get = map.get(retainable)) !== null && _map$get !== void 0 ? _map$get : 0) + delta; - if (newCount === 0) { - updateRetainCountToZero(store, retainable); - } else { - map.set(retainable, newCount); + if (isWindow(target)) { + return target; } + if (!isNode(target)) { + return window; + } + return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window; } -function updateRetainCountToZero(store, retainable) { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; +function isDocument(node) { + const { + Document + } = getWindow(node); + return node instanceof Document; +} +function isHTMLElement(node) { + if (isWindow(node)) { + return false; } - const map = store.getState().retention.referenceCounts; - map.delete(retainable); - scheduleOrPerformPossibleReleaseOfRetainable(store, retainable); + return node instanceof getWindow(node).HTMLElement; } -function releaseScheduledRetainablesNow(store) { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; +function isSVGElement(node) { + return node instanceof getWindow(node).SVGElement; +} +function getOwnerDocument(target) { + if (!target) { + return document; } - const state = store.getState(); - releaseRetainablesNowOnCurrentTree(store, state.retention.retainablesToCheckForRelease); - state.retention.retainablesToCheckForRelease.clear(); + if (isWindow(target)) { + return target.document; + } + if (!isNode(target)) { + return document; + } + if (isDocument(target)) { + return target; + } + if (isHTMLElement(target)) { + return target.ownerDocument; + } + return document; } -function retainedByOptionWithDefault(r3) { - return r3 === void 0 ? "recoilRoot" : r3; +var useIsomorphicLayoutEffect = canUseDOM ? s2 : h2; +function useEvent(handler) { + const handlerRef = _2(handler); + useIsomorphicLayoutEffect(() => { + handlerRef.current = handler; + }); + return T2(function(...args) { + return handlerRef.current == null ? void 0 : handlerRef.current(...args); + }, []); } -var Recoil_Retention = { - updateRetainCount, - updateRetainCountToZero, - releaseScheduledRetainablesNow, - retainedByOptionWithDefault -}; -function* concatIterables(iters) { - for (const iter of iters) { - for (const val of iter) { - yield val; +function useInterval() { + const intervalRef = _2(null); + const set = T2((listener, duration) => { + intervalRef.current = setInterval(listener, duration); + }, []); + const clear = T2(() => { + if (intervalRef.current !== null) { + clearInterval(intervalRef.current); + intervalRef.current = null; } - } + }, []); + return [set, clear]; } -var Recoil_concatIterables = concatIterables; -var isSSR = typeof window === "undefined"; -var isReactNative = typeof navigator !== "undefined" && navigator.product === "ReactNative"; -var Recoil_Environment = { - isSSR, - isReactNative -}; -var { - isSSR: isSSR$1 -} = Recoil_Environment; -var { - batchUpdates: batchUpdates$1 -} = Recoil_Batching; -var { - initializeNodeIfNewToStore: initializeNodeIfNewToStore$1, - peekNodeInfo: peekNodeInfo$1 -} = Recoil_FunctionalCore; -var { - graph: graph$2 -} = Recoil_Graph; -var { - DEFAULT_VALUE: DEFAULT_VALUE$1, - recoilValues: recoilValues$1, - recoilValuesForKeys: recoilValuesForKeys$2 -} = Recoil_Node; -var { - AbstractRecoilValue: AbstractRecoilValue$2, - getRecoilValueAsLoadable: getRecoilValueAsLoadable$1, - setRecoilValue: setRecoilValue$1, - setUnvalidatedRecoilValue: setUnvalidatedRecoilValue$1 -} = Recoil_RecoilValueInterface; -var { - updateRetainCount: updateRetainCount$1 -} = Recoil_Retention; -var { - getNextTreeStateVersion: getNextTreeStateVersion$1, - makeEmptyStoreState: makeEmptyStoreState$1 -} = Recoil_State; -var retainWarning = ` -Recoil Snapshots only last for the duration of the callback they are provided to. To keep a Snapshot longer, do this: - - const release = snapshot.retain(); - try { - await useTheSnapshotAsynchronously(snapshot); - } finally { - release(); - } - -This is currently a DEV-only warning but will become a thrown exception in the next release of Recoil. -`; -var Snapshot = class { - constructor(storeState) { - _defineProperty(this, "_store", void 0); - _defineProperty(this, "_refCount", 0); - _defineProperty(this, "getLoadable", (recoilValue) => { - this.checkRefCount_INTERNAL(); - return getRecoilValueAsLoadable$1(this._store, recoilValue); - }); - _defineProperty(this, "getPromise", (recoilValue) => { - this.checkRefCount_INTERNAL(); - return this.getLoadable(recoilValue).toPromise(); - }); - _defineProperty(this, "getNodes_UNSTABLE", (opt) => { - this.checkRefCount_INTERNAL(); - if ((opt === null || opt === void 0 ? void 0 : opt.isModified) === true) { - if ((opt === null || opt === void 0 ? void 0 : opt.isInitialized) === false) { - return []; - } - const state = this._store.getState().currentTree; - return recoilValuesForKeys$2(state.dirtyAtoms); +function useLatestValue(value, dependencies = [value]) { + const valueRef = _2(value); + useIsomorphicLayoutEffect(() => { + if (valueRef.current !== value) { + valueRef.current = value; + } + }, dependencies); + return valueRef; +} +function useLazyMemo(callback, dependencies) { + const valueRef = _2(); + return F( + () => { + const newValue = callback(valueRef.current); + valueRef.current = newValue; + return newValue; + }, + [...dependencies] + ); +} +function useNodeRef(onChange) { + const onChangeHandler = useEvent(onChange); + const node = _2(null); + const setNodeRef = T2( + (element) => { + if (element !== node.current) { + onChangeHandler == null ? void 0 : onChangeHandler(element, node.current); } - const knownAtoms = this._store.getState().knownAtoms; - const knownSelectors = this._store.getState().knownSelectors; - return (opt === null || opt === void 0 ? void 0 : opt.isInitialized) == null ? recoilValues$1.values() : opt.isInitialized === true ? recoilValuesForKeys$2(Recoil_concatIterables([this._store.getState().knownAtoms, this._store.getState().knownSelectors])) : Recoil_filterIterable(recoilValues$1.values(), ({ - key: key2 - }) => !knownAtoms.has(key2) && !knownSelectors.has(key2)); - }); - _defineProperty(this, "getInfo_UNSTABLE", ({ - key: key2 - }) => { - this.checkRefCount_INTERNAL(); - return peekNodeInfo$1(this._store, this._store.getState().currentTree, key2); - }); - _defineProperty(this, "map", (mapper) => { - this.checkRefCount_INTERNAL(); - const mutableSnapshot = new MutableSnapshot(this, batchUpdates$1); - mapper(mutableSnapshot); - return cloneSnapshot(mutableSnapshot.getStore_INTERNAL()); - }); - _defineProperty(this, "asyncMap", async (mapper) => { - this.checkRefCount_INTERNAL(); - const mutableSnapshot = new MutableSnapshot(this, batchUpdates$1); - await mapper(mutableSnapshot); - return cloneSnapshot(mutableSnapshot.getStore_INTERNAL()); - }); - this._store = { - getState: () => storeState, - replaceState: (replacer) => { - storeState.currentTree = replacer(storeState.currentTree); - }, - getGraph: (version) => { - const graphs = storeState.graphsByVersion; - if (graphs.has(version)) { - return Recoil_nullthrows(graphs.get(version)); - } - const newGraph = graph$2(); - graphs.set(version, newGraph); - return newGraph; - }, - subscribeToTransactions: () => ({ - release: () => { + node.current = element; + }, + [] + ); + return [node, setNodeRef]; +} +function usePrevious(value) { + const ref = _2(); + h2(() => { + ref.current = value; + }, [value]); + return ref.current; +} +var ids = {}; +function useUniqueId(prefix, value) { + return F(() => { + if (value) { + return value; + } + const id2 = ids[prefix] == null ? 0 : ids[prefix] + 1; + ids[prefix] = id2; + return `${prefix}-${id2}`; + }, [prefix, value]); +} +function createAdjustmentFn(modifier) { + return (object, ...adjustments) => { + return adjustments.reduce((accumulator, adjustment) => { + const entries = Object.entries(adjustment); + for (const [key2, valueAdjustment] of entries) { + const value = accumulator[key2]; + if (value != null) { + accumulator[key2] = value + modifier * valueAdjustment; } - }), - addTransactionMetadata: () => { - throw new Error("Cannot subscribe to Snapshots"); } - }; - for (const nodeKey of this._store.getState().nodeCleanupFunctions.keys()) { - initializeNodeIfNewToStore$1(this._store, storeState.currentTree, nodeKey, "get"); - updateRetainCount$1(this._store, nodeKey, 1); - } - this.retain(); - this.autorelease_INTERNAL(); + return accumulator; + }, { + ...object + }); + }; +} +var add = /* @__PURE__ */ createAdjustmentFn(1); +var subtract = /* @__PURE__ */ createAdjustmentFn(-1); +function hasViewportRelativeCoordinates(event) { + return "clientX" in event && "clientY" in event; +} +function isKeyboardEvent(event) { + if (!event) { + return false; } - retain() { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return () => void 0; + const { + KeyboardEvent + } = getWindow(event.target); + return KeyboardEvent && event instanceof KeyboardEvent; +} +function isTouchEvent(event) { + if (!event) { + return false; + } + const { + TouchEvent + } = getWindow(event.target); + return TouchEvent && event instanceof TouchEvent; +} +function getEventCoordinates(event) { + if (isTouchEvent(event)) { + if (event.touches && event.touches.length) { + const { + clientX: x5, + clientY: y5 + } = event.touches[0]; + return { + x: x5, + y: y5 + }; + } else if (event.changedTouches && event.changedTouches.length) { + const { + clientX: x5, + clientY: y5 + } = event.changedTouches[0]; + return { + x: x5, + y: y5 + }; } - this._refCount++; - let released = false; - return () => { - if (!released) { - released = true; - this.release_INTERNAL(); - } + } + if (hasViewportRelativeCoordinates(event)) { + return { + x: event.clientX, + y: event.clientY }; } - autorelease_INTERNAL() { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; - } - if (!isSSR$1) { - window.setTimeout(() => this.release_INTERNAL(), 0); + return null; +} +var CSS = /* @__PURE__ */ Object.freeze({ + Translate: { + toString(transform) { + if (!transform) { + return; + } + const { + x: x5, + y: y5 + } = transform; + return `translate3d(${x5 ? Math.round(x5) : 0}px, ${y5 ? Math.round(y5) : 0}px, 0)`; } - } - release_INTERNAL() { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; + }, + Scale: { + toString(transform) { + if (!transform) { + return; + } + const { + scaleX, + scaleY + } = transform; + return `scaleX(${scaleX}) scaleY(${scaleY})`; } - this._refCount--; - if (this._refCount === 0) - ; - } - checkRefCount_INTERNAL() { - if (Recoil_gkx_1("recoil_memory_managament_2020") && this._refCount <= 0) { - if (true) { - Recoil_recoverableViolation(retainWarning); + }, + Transform: { + toString(transform) { + if (!transform) { + return; } + return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(" "); + } + }, + Transition: { + toString({ + property, + duration, + easing + }) { + return `${property} ${duration}ms ${easing}`; } } - getStore_INTERNAL() { - this.checkRefCount_INTERNAL(); - return this._store; - } - getID() { - this.checkRefCount_INTERNAL(); - return this.getID_INTERNAL(); - } - getID_INTERNAL() { - this.checkRefCount_INTERNAL(); - return this._store.getState().currentTree.stateID; +}); +var SELECTOR = "a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]"; +function findFirstFocusableNode(element) { + if (element.matches(SELECTOR)) { + return element; } + return element.querySelector(SELECTOR); +} + +// node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +var hiddenStyles = { + display: "none" }; -function cloneStoreState(store, treeState, bumpVersion = false) { - const storeState = store.getState(); - const version = bumpVersion ? getNextTreeStateVersion$1() : treeState.version; - return { - currentTree: bumpVersion ? { - version, - stateID: version, - transactionMetadata: { - ...treeState.transactionMetadata - }, - dirtyAtoms: new Set(treeState.dirtyAtoms), - atomValues: treeState.atomValues.clone(), - nonvalidatedAtoms: treeState.nonvalidatedAtoms.clone() - } : treeState, - commitDepth: 0, - nextTree: null, - previousTree: null, - knownAtoms: new Set(storeState.knownAtoms), - knownSelectors: new Set(storeState.knownSelectors), - transactionSubscriptions: /* @__PURE__ */ new Map(), - nodeTransactionSubscriptions: /* @__PURE__ */ new Map(), - nodeToComponentSubscriptions: /* @__PURE__ */ new Map(), - queuedComponentCallbacks_DEPRECATED: [], - suspendedComponentResolvers: /* @__PURE__ */ new Set(), - graphsByVersion: (/* @__PURE__ */ new Map()).set(version, store.getGraph(treeState.version)), - versionsUsedByComponent: /* @__PURE__ */ new Map(), - retention: { - referenceCounts: /* @__PURE__ */ new Map(), - nodesRetainedByZone: /* @__PURE__ */ new Map(), - retainablesToCheckForRelease: /* @__PURE__ */ new Set() - }, - nodeCleanupFunctions: /* @__PURE__ */ new Map() - }; +function HiddenText(_ref) { + let { + id: id2, + value + } = _ref; + return bn.createElement("div", { + id: id2, + style: hiddenStyles + }, value); } -function freshSnapshot(initializeState) { - const snapshot = new Snapshot(makeEmptyStoreState$1()); - return initializeState != null ? snapshot.map(initializeState) : snapshot; +var visuallyHidden = { + position: "fixed", + width: 1, + height: 1, + margin: -1, + border: 0, + padding: 0, + overflow: "hidden", + clip: "rect(0 0 0 0)", + clipPath: "inset(100%)", + whiteSpace: "nowrap" +}; +function LiveRegion(_ref) { + let { + id: id2, + announcement + } = _ref; + return bn.createElement("div", { + id: id2, + style: visuallyHidden, + role: "status", + "aria-live": "assertive", + "aria-atomic": true + }, announcement); } -function cloneSnapshot(store, version = "current") { - const storeState = store.getState(); - const treeState = version === "current" ? storeState.currentTree : Recoil_nullthrows(storeState.previousTree); - return new Snapshot(cloneStoreState(store, treeState)); +function useAnnouncement() { + const [announcement, setAnnouncement] = p2(""); + const announce = T2((value) => { + if (value != null) { + setAnnouncement(value); + } + }, []); + return { + announce, + announcement + }; } -var MutableSnapshot = class extends Snapshot { - constructor(snapshot, batch) { - super(cloneStoreState(snapshot.getStore_INTERNAL(), snapshot.getStore_INTERNAL().getState().currentTree, true)); - _defineProperty(this, "_batch", void 0); - _defineProperty(this, "set", (recoilState, newValueOrUpdater) => { - this.checkRefCount_INTERNAL(); - const store = this.getStore_INTERNAL(); - this._batch(() => { - updateRetainCount$1(store, recoilState.key, 1); - setRecoilValue$1(this.getStore_INTERNAL(), recoilState, newValueOrUpdater); - }); - }); - _defineProperty(this, "reset", (recoilState) => { - this.checkRefCount_INTERNAL(); - const store = this.getStore_INTERNAL(); - this._batch(() => { - updateRetainCount$1(store, recoilState.key, 1); - setRecoilValue$1(this.getStore_INTERNAL(), recoilState, DEFAULT_VALUE$1); - }); - }); - _defineProperty(this, "setUnvalidatedAtomValues_DEPRECATED", (values) => { - this.checkRefCount_INTERNAL(); - const store = this.getStore_INTERNAL(); - batchUpdates$1(() => { - for (const [k5, v3] of values.entries()) { - updateRetainCount$1(store, k5, 1); - setUnvalidatedRecoilValue$1(store, new AbstractRecoilValue$2(k5), v3); - } - }); + +// node_modules/@dnd-kit/core/dist/core.esm.js +var DndMonitorContext = /* @__PURE__ */ B(null); +function useDndMonitor(listener) { + const registerListener = q2(DndMonitorContext); + h2(() => { + if (!registerListener) { + throw new Error("useDndMonitor must be used within a children of "); + } + const unsubscribe = registerListener(listener); + return unsubscribe; + }, [listener, registerListener]); +} +function useDndMonitorProvider() { + const [listeners] = p2(() => /* @__PURE__ */ new Set()); + const registerListener = T2((listener) => { + listeners.add(listener); + return () => listeners.delete(listener); + }, [listeners]); + const dispatch = T2((_ref) => { + let { + type, + event + } = _ref; + listeners.forEach((listener) => { + var _listener$type; + return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event); }); - this._batch = batch; - } -}; -var Recoil_Snapshot = { - Snapshot, - MutableSnapshot, - freshSnapshot, - cloneSnapshot -}; -var Recoil_Snapshot_1 = Recoil_Snapshot.Snapshot; -var Recoil_Snapshot_2 = Recoil_Snapshot.MutableSnapshot; -var Recoil_Snapshot_3 = Recoil_Snapshot.freshSnapshot; -var Recoil_Snapshot_4 = Recoil_Snapshot.cloneSnapshot; -var Recoil_Snapshot$1 = /* @__PURE__ */ Object.freeze({ - __proto__: null, - Snapshot: Recoil_Snapshot_1, - MutableSnapshot: Recoil_Snapshot_2, - freshSnapshot: Recoil_Snapshot_3, - cloneSnapshot: Recoil_Snapshot_4 -}); -var { - getNextTreeStateVersion: getNextTreeStateVersion$2, - makeEmptyStoreState: makeEmptyStoreState$2 -} = Recoil_State; -var { - cleanUpNode: cleanUpNode$2, - getDownstreamNodes: getDownstreamNodes$2, - setNodeValue: setNodeValue$2, - setUnvalidatedAtomValue_DEPRECATED: setUnvalidatedAtomValue_DEPRECATED$1 -} = Recoil_FunctionalCore; -var { - graph: graph$3 -} = Recoil_Graph; -var { - cloneGraph: cloneGraph$1 -} = Recoil_Graph; -var { - applyAtomValueWrites: applyAtomValueWrites$1 -} = Recoil_RecoilValueInterface; -var { - releaseScheduledRetainablesNow: releaseScheduledRetainablesNow$1 -} = Recoil_Retention; -var { - freshSnapshot: freshSnapshot$1 -} = Recoil_Snapshot$1; -var { - useCallback, - useContext, - useEffect, - useMemo, - useRef, - useState -} = bn; -function notInAContext() { - throw new Error("This component must be used inside a component."); + }, [listeners]); + return [dispatch, registerListener]; } -var defaultStore = Object.freeze({ - getState: notInAContext, - replaceState: notInAContext, - getGraph: notInAContext, - subscribeToTransactions: notInAContext, - addTransactionMetadata: notInAContext -}); -var stateReplacerIsBeingExecuted = false; -function startNextTreeIfNeeded(store) { - if (stateReplacerIsBeingExecuted) { - throw new Error("An atom update was triggered within the execution of a state updater function. State updater functions provided to Recoil must be pure functions."); +var defaultScreenReaderInstructions = { + draggable: "\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n " +}; +var defaultAnnouncements = { + onDragStart(_ref) { + let { + active + } = _ref; + return "Picked up draggable item " + active.id + "."; + }, + onDragOver(_ref2) { + let { + active, + over + } = _ref2; + if (over) { + return "Draggable item " + active.id + " was moved over droppable area " + over.id + "."; + } + return "Draggable item " + active.id + " is no longer over a droppable area."; + }, + onDragEnd(_ref3) { + let { + active, + over + } = _ref3; + if (over) { + return "Draggable item " + active.id + " was dropped over droppable area " + over.id; + } + return "Draggable item " + active.id + " was dropped."; + }, + onDragCancel(_ref4) { + let { + active + } = _ref4; + return "Dragging was cancelled. Draggable item " + active.id + " was dropped."; } - const storeState = store.getState(); - if (storeState.nextTree === null) { - if (Recoil_gkx_1("recoil_memory_managament_2020") && Recoil_gkx_1("recoil_release_on_cascading_update_killswitch_2021")) { - if (storeState.commitDepth > 0) { - releaseScheduledRetainablesNow$1(store); +}; +function Accessibility(_ref) { + let { + announcements = defaultAnnouncements, + container, + hiddenTextDescribedById, + screenReaderInstructions = defaultScreenReaderInstructions + } = _ref; + const { + announce, + announcement + } = useAnnouncement(); + const liveRegionId = useUniqueId("DndLiveRegion"); + const [mounted, setMounted] = p2(false); + h2(() => { + setMounted(true); + }, []); + useDndMonitor(F(() => ({ + onDragStart(_ref2) { + let { + active + } = _ref2; + announce(announcements.onDragStart({ + active + })); + }, + onDragMove(_ref3) { + let { + active, + over + } = _ref3; + if (announcements.onDragMove) { + announce(announcements.onDragMove({ + active, + over + })); } + }, + onDragOver(_ref4) { + let { + active, + over + } = _ref4; + announce(announcements.onDragOver({ + active, + over + })); + }, + onDragEnd(_ref5) { + let { + active, + over + } = _ref5; + announce(announcements.onDragEnd({ + active, + over + })); + }, + onDragCancel(_ref6) { + let { + active, + over + } = _ref6; + announce(announcements.onDragCancel({ + active, + over + })); } - const version = storeState.currentTree.version; - const nextVersion = getNextTreeStateVersion$2(); - storeState.nextTree = { - ...storeState.currentTree, - version: nextVersion, - stateID: nextVersion, - dirtyAtoms: /* @__PURE__ */ new Set(), - transactionMetadata: {} - }; - storeState.graphsByVersion.set(nextVersion, cloneGraph$1(Recoil_nullthrows(storeState.graphsByVersion.get(version)))); + }), [announce, announcements])); + if (!mounted) { + return null; } + const markup = bn.createElement(bn.Fragment, null, bn.createElement(HiddenText, { + id: hiddenTextDescribedById, + value: screenReaderInstructions.draggable + }), bn.createElement(LiveRegion, { + id: liveRegionId, + announcement + })); + return container ? j3(markup, container) : markup; } -var AppContext = bn.createContext({ - current: defaultStore -}); -var useStoreRef = () => useContext(AppContext); -var MutableSourceContext = bn.createContext(null); -function useRecoilMutableSource() { - const mutableSource = useContext(MutableSourceContext); - if (mutableSource == null) { - Recoil_expectationViolation("Attempted to use a Recoil hook outside of a . must be an ancestor of any component that uses Recoil hooks."); +var Action; +(function(Action2) { + Action2["DragStart"] = "dragStart"; + Action2["DragMove"] = "dragMove"; + Action2["DragEnd"] = "dragEnd"; + Action2["DragCancel"] = "dragCancel"; + Action2["DragOver"] = "dragOver"; + Action2["RegisterDroppable"] = "registerDroppable"; + Action2["SetDroppableDisabled"] = "setDroppableDisabled"; + Action2["UnregisterDroppable"] = "unregisterDroppable"; +})(Action || (Action = {})); +function noop() { +} +function useSensor(sensor, options) { + return F( + () => ({ + sensor, + options: options != null ? options : {} + }), + [sensor, options] + ); +} +function useSensors() { + for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) { + sensors[_key] = arguments[_key]; } - return mutableSource; + return F( + () => [...sensors].filter((sensor) => sensor != null), + [...sensors] + ); } -function notifyComponents(store, storeState, treeState) { - const dependentNodes = getDownstreamNodes$2(store, treeState, treeState.dirtyAtoms); - for (const key2 of dependentNodes) { - const comps = storeState.nodeToComponentSubscriptions.get(key2); - if (comps) { - for (const [_subID, [_debugName, callback]] of comps) { - callback(treeState); - } - } +var defaultCoordinates = /* @__PURE__ */ Object.freeze({ + x: 0, + y: 0 +}); +function distanceBetween(p1, p22) { + return Math.sqrt(Math.pow(p1.x - p22.x, 2) + Math.pow(p1.y - p22.y, 2)); +} +function getRelativeTransformOrigin(event, rect) { + const eventCoordinates = getEventCoordinates(event); + if (!eventCoordinates) { + return "0 0"; } + const transformOrigin = { + x: (eventCoordinates.x - rect.left) / rect.width * 100, + y: (eventCoordinates.y - rect.top) / rect.height * 100 + }; + return transformOrigin.x + "% " + transformOrigin.y + "%"; } -function sendEndOfBatchNotifications(store) { - const storeState = store.getState(); - const treeState = storeState.currentTree; - const dirtyAtoms = treeState.dirtyAtoms; - if (dirtyAtoms.size) { - for (const [key2, subscriptions] of storeState.nodeTransactionSubscriptions) { - if (dirtyAtoms.has(key2)) { - for (const [_5, subscription] of subscriptions) { - subscription(store); - } - } - } - for (const [_5, subscription] of storeState.transactionSubscriptions) { - subscription(store); +function sortCollisionsAsc(_ref, _ref2) { + let { + data: { + value: a5 } - if (!Recoil_gkx_1("recoil_early_rendering_2021") || storeState.suspendedComponentResolvers.size) { - notifyComponents(store, storeState, treeState); - storeState.suspendedComponentResolvers.forEach((cb) => cb()); - storeState.suspendedComponentResolvers.clear(); + } = _ref; + let { + data: { + value: b4 } - } - storeState.queuedComponentCallbacks_DEPRECATED.forEach((cb) => cb(treeState)); - storeState.queuedComponentCallbacks_DEPRECATED.splice(0, storeState.queuedComponentCallbacks_DEPRECATED.length); + } = _ref2; + return a5 - b4; } -function endBatch(storeRef) { - const storeState = storeRef.current.getState(); - storeState.commitDepth++; - try { - const { - nextTree - } = storeState; - if (nextTree === null) { - return; - } - storeState.previousTree = storeState.currentTree; - storeState.currentTree = nextTree; - storeState.nextTree = null; - sendEndOfBatchNotifications(storeRef.current); - if (storeState.previousTree != null) { - storeState.graphsByVersion.delete(storeState.previousTree.version); - } else { - Recoil_recoverableViolation("Ended batch with no previous state, which is unexpected", "recoil"); +function sortCollisionsDesc(_ref3, _ref4) { + let { + data: { + value: a5 } - storeState.previousTree = null; - if (Recoil_gkx_1("recoil_memory_managament_2020")) { - releaseScheduledRetainablesNow$1(storeRef.current); + } = _ref3; + let { + data: { + value: b4 } - } finally { - storeState.commitDepth--; - } + } = _ref4; + return b4 - a5; } -function Batcher({ - setNotifyBatcherOfChange -}) { - const storeRef = useStoreRef(); - const [_5, setState] = useState([]); - setNotifyBatcherOfChange(() => setState({})); - useEffect(() => { - Recoil_Queue.enqueueExecution("Batcher", () => { - endBatch(storeRef); - }); - }); - useEffect(() => { - return () => { - setNotifyBatcherOfChange(() => { - }); - }; - }, [setNotifyBatcherOfChange]); - return null; +function cornersOfRectangle(_ref5) { + let { + left, + top, + height, + width + } = _ref5; + return [{ + x: left, + y: top + }, { + x: left + width, + y: top + }, { + x: left, + y: top + height + }, { + x: left + width, + y: top + height + }]; } -if (true) { - if (typeof window !== "undefined" && !window.$recoilDebugStates) { - window.$recoilDebugStates = []; +function getFirstCollision(collisions, property) { + if (!collisions || collisions.length === 0) { + return null; } + const [firstCollision] = collisions; + return property ? firstCollision[property] : firstCollision; } -function initialStoreState_DEPRECATED(store, initializeState) { - const initial2 = makeEmptyStoreState$2(); - initializeState({ - set: (atom2, value) => { - const state = initial2.currentTree; - const writes = setNodeValue$2(store, state, atom2.key, value); - const writtenNodes = new Set(writes.keys()); - const nonvalidatedAtoms = state.nonvalidatedAtoms.clone(); - for (const n2 of writtenNodes) { - nonvalidatedAtoms.delete(n2); - } - initial2.currentTree = { - ...state, - dirtyAtoms: Recoil_unionSets(state.dirtyAtoms, writtenNodes), - atomValues: applyAtomValueWrites$1(state.atomValues, writes), - nonvalidatedAtoms - }; - }, - setUnvalidatedAtomValues: (atomValues) => { - atomValues.forEach((v3, k5) => { - initial2.currentTree = setUnvalidatedAtomValue_DEPRECATED$1(initial2.currentTree, k5, v3); - }); - } - }); - return initial2; -} -function initialStoreState(initializeState) { - const snapshot = freshSnapshot$1().map(initializeState); - return snapshot.getStore_INTERNAL().getState(); +function centerOfRectangle(rect, left, top) { + if (left === void 0) { + left = rect.left; + } + if (top === void 0) { + top = rect.top; + } + return { + x: left + rect.width * 0.5, + y: top + rect.height * 0.5 + }; } -var nextID = 0; -function RecoilRoot_INTERNAL({ - initializeState_DEPRECATED, - initializeState, - store_INTERNAL: storeProp, - children -}) { - var _createMutableSource; - let storeState; - const getGraph = (version) => { - const graphs = storeState.current.graphsByVersion; - if (graphs.has(version)) { - return Recoil_nullthrows(graphs.get(version)); +var closestCenter = (_ref) => { + let { + collisionRect, + droppableRects, + droppableContainers + } = _ref; + const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top); + const collisions = []; + for (const droppableContainer of droppableContainers) { + const { + id: id2 + } = droppableContainer; + const rect = droppableRects.get(id2); + if (rect) { + const distBetween = distanceBetween(centerOfRectangle(rect), centerRect); + collisions.push({ + id: id2, + data: { + droppableContainer, + value: distBetween + } + }); } - const newGraph = graph$3(); - graphs.set(version, newGraph); - return newGraph; - }; - const subscribeToTransactions = (callback, key2) => { - if (key2 == null) { - const { - transactionSubscriptions - } = storeRef.current.getState(); - const id2 = nextID++; - transactionSubscriptions.set(id2, callback); - return { - release: () => { - transactionSubscriptions.delete(id2); - } - }; - } else { - const { - nodeTransactionSubscriptions - } = storeRef.current.getState(); - if (!nodeTransactionSubscriptions.has(key2)) { - nodeTransactionSubscriptions.set(key2, /* @__PURE__ */ new Map()); - } - const id2 = nextID++; - Recoil_nullthrows(nodeTransactionSubscriptions.get(key2)).set(id2, callback); - return { - release: () => { - const subs = nodeTransactionSubscriptions.get(key2); - if (subs) { - subs.delete(id2); - if (subs.size === 0) { - nodeTransactionSubscriptions.delete(key2); - } - } + } + return collisions.sort(sortCollisionsAsc); +}; +var closestCorners = (_ref) => { + let { + collisionRect, + droppableRects, + droppableContainers + } = _ref; + const corners = cornersOfRectangle(collisionRect); + const collisions = []; + for (const droppableContainer of droppableContainers) { + const { + id: id2 + } = droppableContainer; + const rect = droppableRects.get(id2); + if (rect) { + const rectCorners = cornersOfRectangle(rect); + const distances = corners.reduce((accumulator, corner, index) => { + return accumulator + distanceBetween(rectCorners[index], corner); + }, 0); + const effectiveDistance = Number((distances / 4).toFixed(4)); + collisions.push({ + id: id2, + data: { + droppableContainer, + value: effectiveDistance } - }; - } - }; - const addTransactionMetadata = (metadata) => { - startNextTreeIfNeeded(storeRef.current); - for (const k5 of Object.keys(metadata)) { - Recoil_nullthrows(storeRef.current.getState().nextTree).transactionMetadata[k5] = metadata[k5]; - } - }; - const replaceState = (replacer) => { - const storeState2 = storeRef.current.getState(); - startNextTreeIfNeeded(storeRef.current); - const nextTree = Recoil_nullthrows(storeState2.nextTree); - let replaced; - try { - stateReplacerIsBeingExecuted = true; - replaced = replacer(nextTree); - } finally { - stateReplacerIsBeingExecuted = false; - } - if (replaced === nextTree) { - return; - } - if (true) { - if (typeof window !== "undefined") { - window.$recoilDebugStates.push(replaced); - } - } - storeState2.nextTree = replaced; - if (Recoil_gkx_1("recoil_early_rendering_2021")) { - notifyComponents(store, storeState2, replaced); - } - Recoil_nullthrows(notifyBatcherOfChange.current)(); - }; - const notifyBatcherOfChange = useRef(null); - const setNotifyBatcherOfChange = useCallback((x5) => { - notifyBatcherOfChange.current = x5; - }, [notifyBatcherOfChange]); - const createMutableSource = (_createMutableSource = bn.createMutableSource) !== null && _createMutableSource !== void 0 ? _createMutableSource : bn.unstable_createMutableSource; - const store = storeProp !== null && storeProp !== void 0 ? storeProp : { - getState: () => storeState.current, - replaceState, - getGraph, - subscribeToTransactions, - addTransactionMetadata - }; - const storeRef = useRef(store); - storeState = useRef(initializeState_DEPRECATED != null ? initialStoreState_DEPRECATED(store, initializeState_DEPRECATED) : initializeState != null ? initialStoreState(initializeState) : makeEmptyStoreState$2()); - const mutableSource = useMemo(() => createMutableSource ? createMutableSource(storeState, () => storeState.current.currentTree.version) : null, [createMutableSource, storeState]); - useEffect(() => () => { - for (const atomKey of storeRef.current.getState().knownAtoms) { - cleanUpNode$2(storeRef.current, atomKey); + }); } - }, []); - return /* @__PURE__ */ bn.createElement(AppContext.Provider, { - value: storeRef - }, /* @__PURE__ */ bn.createElement(MutableSourceContext.Provider, { - value: mutableSource - }, /* @__PURE__ */ bn.createElement(Batcher, { - setNotifyBatcherOfChange - }), children)); -} -function RecoilRoot(props2) { - const { - override, - ...propsExceptOverride - } = props2; - const ancestorStoreRef = useStoreRef(); - if (override === false && ancestorStoreRef.current !== defaultStore) { - return props2.children; } - return /* @__PURE__ */ bn.createElement(RecoilRoot_INTERNAL, propsExceptOverride); -} -var Recoil_RecoilRoot_react = { - useStoreRef, - useRecoilMutableSource, - RecoilRoot, - notifyComponents_FOR_TESTING: notifyComponents, - sendEndOfBatchNotifications_FOR_TESTING: sendEndOfBatchNotifications + return collisions.sort(sortCollisionsAsc); }; -var { - loadableWithValue: loadableWithValue$1 -} = Recoil_Loadable; -var { - DEFAULT_VALUE: DEFAULT_VALUE$2, - getNode: getNode$3 -} = Recoil_Node; -var { - copyTreeState: copyTreeState$1, - getRecoilValueAsLoadable: getRecoilValueAsLoadable$2, - invalidateDownstreams: invalidateDownstreams$1, - writeLoadableToTreeState: writeLoadableToTreeState$1 -} = Recoil_RecoilValueInterface; -function isAtom(recoilValue) { - return getNode$3(recoilValue.key).nodeType === "atom"; +function getIntersectionRatio(entry, target) { + const top = Math.max(target.top, entry.top); + const left = Math.max(target.left, entry.left); + const right = Math.min(target.left + target.width, entry.left + entry.width); + const bottom = Math.min(target.top + target.height, entry.top + entry.height); + const width = right - left; + const height = bottom - top; + if (left < right && top < bottom) { + const targetArea = target.width * target.height; + const entryArea = entry.width * entry.height; + const intersectionArea = width * height; + const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea); + return Number(intersectionRatio.toFixed(4)); + } + return 0; } -var TransactionInterfaceImpl = class { - constructor(store, treeState) { - _defineProperty(this, "_store", void 0); - _defineProperty(this, "_treeState", void 0); - _defineProperty(this, "_changes", void 0); - _defineProperty(this, "get", (recoilValue) => { - if (this._changes.has(recoilValue.key)) { - return this._changes.get(recoilValue.key); - } - if (!isAtom(recoilValue)) { - throw new Error("Reading selectors within atomicUpdate is not supported"); - } - const loadable = getRecoilValueAsLoadable$2(this._store, recoilValue, this._treeState); - if (loadable.state === "hasValue") { - return loadable.contents; - } else if (loadable.state === "hasError") { - throw loadable.contents; - } else { - throw new Error(`Expected Recoil atom ${recoilValue.key} to have a value, but it is in a loading state.`); - } - }); - _defineProperty(this, "set", (recoilState, valueOrUpdater) => { - if (!isAtom(recoilState)) { - throw new Error("Setting selectors within atomicUpdate is not supported"); - } - if (typeof valueOrUpdater === "function") { - const current = this.get(recoilState); - this._changes.set(recoilState.key, valueOrUpdater(current)); - } else { - this._changes.set(recoilState.key, valueOrUpdater); +var rectIntersection = (_ref) => { + let { + collisionRect, + droppableRects, + droppableContainers + } = _ref; + const collisions = []; + for (const droppableContainer of droppableContainers) { + const { + id: id2 + } = droppableContainer; + const rect = droppableRects.get(id2); + if (rect) { + const intersectionRatio = getIntersectionRatio(rect, collisionRect); + if (intersectionRatio > 0) { + collisions.push({ + id: id2, + data: { + droppableContainer, + value: intersectionRatio + } + }); } - }); - _defineProperty(this, "reset", (recoilState) => { - this.set(recoilState, DEFAULT_VALUE$2); - }); - this._store = store; - this._treeState = treeState; - this._changes = /* @__PURE__ */ new Map(); - } - newTreeState_INTERNAL() { - if (this._changes.size === 0) { - return this._treeState; } - const newState = copyTreeState$1(this._treeState); - for (const [k5, v3] of this._changes) { - writeLoadableToTreeState$1(newState, k5, loadableWithValue$1(v3)); - } - invalidateDownstreams$1(this._store, newState); - return newState; } + return collisions.sort(sortCollisionsDesc); }; -function atomicUpdater(store) { - return (fn2) => { - store.replaceState((treeState) => { - const changeset = new TransactionInterfaceImpl(store, treeState); - fn2(changeset); - return changeset.newTreeState_INTERNAL(); - }); +function adjustScale(transform, rect1, rect2) { + return { + ...transform, + scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1, + scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1 }; } -var Recoil_AtomicUpdates = { - atomicUpdater -}; -var Recoil_AtomicUpdates_1 = Recoil_AtomicUpdates.atomicUpdater; -var Recoil_AtomicUpdates$1 = /* @__PURE__ */ Object.freeze({ - __proto__: null, - atomicUpdater: Recoil_AtomicUpdates_1 -}); -function filterMap(map, callback) { - const result = /* @__PURE__ */ new Map(); - for (const [key2, value] of map) { - if (callback(value, key2)) { - result.set(key2, value); - } - } - return result; +function getRectDelta(rect1, rect2) { + return rect1 && rect2 ? { + x: rect1.left - rect2.left, + y: rect1.top - rect2.top + } : defaultCoordinates; } -var Recoil_filterMap = filterMap; -function filterSet(set, callback) { - const result = /* @__PURE__ */ new Set(); - for (const value of set) { - if (callback(value)) { - result.add(value); +function createRectAdjustmentFn(modifier) { + return function adjustClientRect(rect) { + for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + adjustments[_key - 1] = arguments[_key]; } - } - return result; + return adjustments.reduce((acc, adjustment) => ({ + ...acc, + top: acc.top + modifier * adjustment.y, + bottom: acc.bottom + modifier * adjustment.y, + left: acc.left + modifier * adjustment.x, + right: acc.right + modifier * adjustment.x + }), { + ...rect + }); + }; } -var Recoil_filterSet = filterSet; -function invariant(condition, message) { - if (!condition) { - throw new Error(message); +var getAdjustedRect = /* @__PURE__ */ createRectAdjustmentFn(1); +function parseTransform(transform) { + if (transform.startsWith("matrix3d(")) { + const transformArray = transform.slice(9, -1).split(/, /); + return { + x: +transformArray[12], + y: +transformArray[13], + scaleX: +transformArray[0], + scaleY: +transformArray[5] + }; + } else if (transform.startsWith("matrix(")) { + const transformArray = transform.slice(7, -1).split(/, /); + return { + x: +transformArray[4], + y: +transformArray[5], + scaleX: +transformArray[0], + scaleY: +transformArray[3] + }; } + return null; } -var invariant_1 = invariant; -var Recoil_invariant = invariant_1; -function mergeMaps(...maps) { - const result = /* @__PURE__ */ new Map(); - for (let i4 = 0; i4 < maps.length; i4++) { - const iterator = maps[i4].keys(); - let nextKey; - while (!(nextKey = iterator.next()).done) { - result.set(nextKey.value, maps[i4].get(nextKey.value)); - } +function inverseTransform(rect, transform, transformOrigin) { + const parsedTransform = parseTransform(transform); + if (!parsedTransform) { + return rect; } - return result; + const { + scaleX, + scaleY, + x: translateX, + y: translateY + } = parsedTransform; + const x5 = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin); + const y5 = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(" ") + 1)); + const w5 = scaleX ? rect.width / scaleX : rect.width; + const h5 = scaleY ? rect.height / scaleY : rect.height; + return { + width: w5, + height: h5, + top: y5, + right: x5 + w5, + bottom: y5 + h5, + left: x5 + }; } -var Recoil_mergeMaps = mergeMaps; -function shallowArrayEqual(a5, b4) { - if (a5 === b4) { - return true; - } - if (a5.length !== b4.length) { - return false; - } - for (let i4 = 0, l3 = a5.length; i4 < l3; i4++) { - if (a5[i4] !== b4[i4]) { - return false; - } +var defaultOptions = { + ignoreTransform: false +}; +function getClientRect(element, options) { + if (options === void 0) { + options = defaultOptions; } - return true; -} -var Recoil_shallowArrayEqual = shallowArrayEqual; -var UNKNOWN_FUNCTION = ""; -function stackTraceParser(stackString) { - const lines = stackString.split("\n"); - return lines.reduce((stack, line) => { - const parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line); - if (parseResult) { - stack.push(parseResult); + let rect = element.getBoundingClientRect(); + if (options.ignoreTransform) { + const { + getComputedStyle + } = getWindow(element); + const { + transform, + transformOrigin + } = getComputedStyle(element); + if (transform) { + rect = inverseTransform(rect, transform, transformOrigin); } - return stack; - }, []); -} -var chromeRe = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; -var chromeEvalRe = /\((\S*)(?::(\d+))(?::(\d+))\)/; -function parseChrome(line) { - const parts = chromeRe.exec(line); - if (!parts) { - return null; - } - const isNative = parts[2] && parts[2].indexOf("native") === 0; - const isEval = parts[2] && parts[2].indexOf("eval") === 0; - const submatch = chromeEvalRe.exec(parts[2]); - if (isEval && submatch != null) { - parts[2] = submatch[1]; - parts[3] = submatch[2]; - parts[4] = submatch[3]; } + const { + top, + left, + width, + height, + bottom, + right + } = rect; return { - file: !isNative ? parts[2] : null, - methodName: parts[1] || UNKNOWN_FUNCTION, - arguments: isNative ? [parts[2]] : [], - lineNumber: parts[3] ? +parts[3] : null, - column: parts[4] ? +parts[4] : null + top, + left, + width, + height, + bottom, + right }; } -var winjsRe = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i; -function parseWinjs(line) { - const parts = winjsRe.exec(line); - if (!parts) { - return null; - } - return { - file: parts[2], - methodName: parts[1] || UNKNOWN_FUNCTION, - arguments: [], - lineNumber: +parts[3], - column: parts[4] ? +parts[4] : null - }; +function getTransformAgnosticClientRect(element) { + return getClientRect(element, { + ignoreTransform: true + }); } -var geckoRe = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i; -var geckoEvalRe = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; -function parseGecko(line) { - const parts = geckoRe.exec(line); - if (!parts) { - return null; - } - const isEval = parts[3] && parts[3].indexOf(" > eval") > -1; - const submatch = geckoEvalRe.exec(parts[3]); - if (isEval && submatch != null) { - parts[3] = submatch[1]; - parts[4] = submatch[2]; - parts[5] = null; - } +function getWindowClientRect(element) { + const width = element.innerWidth; + const height = element.innerHeight; return { - file: parts[3], - methodName: parts[1] || UNKNOWN_FUNCTION, - arguments: parts[2] ? parts[2].split(",") : [], - lineNumber: parts[4] ? +parts[4] : null, - column: parts[5] ? +parts[5] : null + top: 0, + left: 0, + right: width, + bottom: height, + width, + height }; } -var javaScriptCoreRe = /^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i; -function parseJSC(line) { - const parts = javaScriptCoreRe.exec(line); - if (!parts) { - return null; +function isFixed(node, computedStyle) { + if (computedStyle === void 0) { + computedStyle = getWindow(node).getComputedStyle(node); } - return { - file: parts[3], - methodName: parts[1] || UNKNOWN_FUNCTION, - arguments: [], - lineNumber: +parts[4], - column: parts[5] ? +parts[5] : null - }; + return computedStyle.position === "fixed"; } -var nodeRe = /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i; -function parseNode(line) { - const parts = nodeRe.exec(line); - if (!parts) { - return null; +function isScrollable(element, computedStyle) { + if (computedStyle === void 0) { + computedStyle = getWindow(element).getComputedStyle(element); } - return { - file: parts[2], - methodName: parts[1] || UNKNOWN_FUNCTION, - arguments: [], - lineNumber: +parts[3], - column: parts[4] ? +parts[4] : null - }; + const overflowRegex = /(auto|scroll|overlay)/; + const properties2 = ["overflow", "overflowX", "overflowY"]; + return properties2.some((property) => { + const value = computedStyle[property]; + return typeof value === "string" ? overflowRegex.test(value) : false; + }); } -var Recoil_stackTraceParser = stackTraceParser; -var { - useRef: useRef$1 -} = bn; -function useComponentName() { - const nameRef = useRef$1(); - if (true) { - if (Recoil_gkx_1("recoil_infer_component_names")) { - var _nameRef$current; - if (nameRef.current === void 0) { - const frames = Recoil_stackTraceParser(new Error().stack); - for (const { - methodName - } of frames) { - if (!methodName.match(/\buse[^\b]+$/)) { - return nameRef.current = methodName; - } - } - nameRef.current = null; - } - return (_nameRef$current = nameRef.current) !== null && _nameRef$current !== void 0 ? _nameRef$current : ""; - } - } - return ""; -} -var Recoil_useComponentName = useComponentName; -var { - atomicUpdater: atomicUpdater$1 -} = Recoil_AtomicUpdates$1; -var { - batchUpdates: batchUpdates$2 -} = Recoil_Batching; -var { - DEFAULT_VALUE: DEFAULT_VALUE$3, - getNode: getNode$4, - nodes: nodes$1 -} = Recoil_Node; -var { - useRecoilMutableSource: useRecoilMutableSource$1, - useStoreRef: useStoreRef$1 -} = Recoil_RecoilRoot_react; -var { - isRecoilValue: isRecoilValue$2 -} = Recoil_RecoilValue$1; -var { - AbstractRecoilValue: AbstractRecoilValue$3, - getRecoilValueAsLoadable: getRecoilValueAsLoadable$3, - setRecoilValue: setRecoilValue$2, - setRecoilValueLoadable: setRecoilValueLoadable$1, - setUnvalidatedRecoilValue: setUnvalidatedRecoilValue$2, - subscribeToRecoilValue: subscribeToRecoilValue$1 -} = Recoil_RecoilValueInterface; -var { - updateRetainCount: updateRetainCount$2 -} = Recoil_Retention; -var { - RetentionZone: RetentionZone$3 -} = Recoil_RetentionZone; -var { - Snapshot: Snapshot$1, - cloneSnapshot: cloneSnapshot$1 -} = Recoil_Snapshot$1; -var { - setByAddingToSet: setByAddingToSet$2 -} = Recoil_CopyOnWrite; -var { - isSSR: isSSR$2 -} = Recoil_Environment; -var { - mutableSourceExists: mutableSourceExists$2, - useMutableSource: useMutableSource$1 -} = Recoil_mutableSource; -var { - useCallback: useCallback$1, - useEffect: useEffect$1, - useMemo: useMemo$1, - useRef: useRef$2, - useState: useState$1 -} = bn; -var SUSPENSE_TIMEOUT_MS = 12e4; -function handleLoadable(loadable, recoilValue, storeRef) { - if (loadable.state === "hasValue") { - return loadable.contents; - } else if (loadable.state === "loading") { - const promise = new Promise((resolve) => { - storeRef.current.getState().suspendedComponentResolvers.add(resolve); - }); - throw promise; - } else if (loadable.state === "hasError") { - throw loadable.contents; - } else { - const err = new Error(`Invalid value of loadable atom "${recoilValue.key}"`); - throw err; - } -} -function validateRecoilValue(recoilValue, hookName) { - if (!isRecoilValue$2(recoilValue)) { - throw new Error(`Invalid argument to ${hookName}: expected an atom or selector but got ${String(recoilValue)}`); - } -} -function useRecoilInterface_DEPRECATED() { - const storeRef = useStoreRef$1(); - const [_5, forceUpdate] = useState$1([]); - const recoilValuesUsed = useRef$2(/* @__PURE__ */ new Set()); - recoilValuesUsed.current = /* @__PURE__ */ new Set(); - const previousSubscriptions = useRef$2(/* @__PURE__ */ new Set()); - const subscriptions = useRef$2(/* @__PURE__ */ new Map()); - const unsubscribeFrom = useCallback$1((key2) => { - const sub = subscriptions.current.get(key2); - if (sub) { - sub.release(); - subscriptions.current.delete(key2); - } - }, [subscriptions]); - const componentName = Recoil_useComponentName(); - useEffect$1(() => { - const store = storeRef.current; - function updateState(_state, key2) { - if (!subscriptions.current.has(key2)) { - return; - } - forceUpdate([]); +function getScrollableAncestors(element, limit) { + const scrollParents = []; + function findScrollableAncestors(node) { + if (limit != null && scrollParents.length >= limit) { + return scrollParents; } - Recoil_differenceSets(recoilValuesUsed.current, previousSubscriptions.current).forEach((key2) => { - if (subscriptions.current.has(key2)) { - Recoil_expectationViolation(`Double subscription to RecoilValue "${key2}"`); - return; - } - const sub = subscribeToRecoilValue$1(store, new AbstractRecoilValue$3(key2), (state2) => { - updateState(state2, key2); - }, componentName); - subscriptions.current.set(key2, sub); - const state = store.getState(); - if (state.nextTree) { - store.getState().queuedComponentCallbacks_DEPRECATED.push(() => { - updateState(store.getState(), key2); - }); - } else { - updateState(store.getState(), key2); - } - }); - Recoil_differenceSets(previousSubscriptions.current, recoilValuesUsed.current).forEach((key2) => { - unsubscribeFrom(key2); - }); - previousSubscriptions.current = recoilValuesUsed.current; - }); - useEffect$1(() => { - const subs = subscriptions.current; - return () => subs.forEach((_6, key2) => unsubscribeFrom(key2)); - }, [unsubscribeFrom]); - return useMemo$1(() => { - function useSetRecoilState2(recoilState) { - if (true) { - validateRecoilValue(recoilState, "useSetRecoilState"); - } - return (newValueOrUpdater) => { - setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); - }; + if (!node) { + return scrollParents; } - function useResetRecoilState2(recoilState) { - if (true) { - validateRecoilValue(recoilState, "useResetRecoilState"); - } - return () => setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); + if (isDocument(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) { + scrollParents.push(node.scrollingElement); + return scrollParents; } - function useRecoilValueLoadable2(recoilValue) { - var _storeState$nextTree; - if (true) { - validateRecoilValue(recoilValue, "useRecoilValueLoadable"); - } - if (!recoilValuesUsed.current.has(recoilValue.key)) { - recoilValuesUsed.current = setByAddingToSet$2(recoilValuesUsed.current, recoilValue.key); - } - const storeState = storeRef.current.getState(); - return getRecoilValueAsLoadable$3(storeRef.current, recoilValue, Recoil_gkx_1("recoil_early_rendering_2021") ? (_storeState$nextTree = storeState.nextTree) !== null && _storeState$nextTree !== void 0 ? _storeState$nextTree : storeState.currentTree : storeState.currentTree); + if (!isHTMLElement(node) || isSVGElement(node)) { + return scrollParents; } - function useRecoilValue2(recoilValue) { - if (true) { - validateRecoilValue(recoilValue, "useRecoilValue"); - } - const loadable = useRecoilValueLoadable2(recoilValue); - return handleLoadable(loadable, recoilValue, storeRef); + if (scrollParents.includes(node)) { + return scrollParents; } - function useRecoilState2(recoilState) { - if (true) { - validateRecoilValue(recoilState, "useRecoilState"); + const { + getComputedStyle + } = getWindow(node); + const computedStyle = getComputedStyle(node); + if (node !== element) { + if (isScrollable(node, computedStyle)) { + scrollParents.push(node); } - return [useRecoilValue2(recoilState), useSetRecoilState2(recoilState)]; } - function useRecoilStateLoadable2(recoilState) { - if (true) { - validateRecoilValue(recoilState, "useRecoilStateLoadable"); - } - return [useRecoilValueLoadable2(recoilState), useSetRecoilState2(recoilState)]; + if (isFixed(node, computedStyle)) { + return scrollParents; } - return { - getRecoilValue: useRecoilValue2, - getRecoilValueLoadable: useRecoilValueLoadable2, - getRecoilState: useRecoilState2, - getRecoilStateLoadable: useRecoilStateLoadable2, - getSetRecoilState: useSetRecoilState2, - getResetRecoilState: useResetRecoilState2 - }; - }, [recoilValuesUsed, storeRef]); -} -var recoilComponentGetRecoilValueCount_FOR_TESTING = { - current: 0 -}; -function useRecoilValueLoadable_MUTABLESOURCE(recoilValue) { - if (true) { - validateRecoilValue(recoilValue, "useRecoilValueLoadable"); + return findScrollableAncestors(node.parentNode); } - const storeRef = useStoreRef$1(); - const getLoadable = useCallback$1(() => { - var _storeState$nextTree2; - const store = storeRef.current; - const storeState = store.getState(); - const treeState = Recoil_gkx_1("recoil_early_rendering_2021") ? (_storeState$nextTree2 = storeState.nextTree) !== null && _storeState$nextTree2 !== void 0 ? _storeState$nextTree2 : storeState.currentTree : storeState.currentTree; - return getRecoilValueAsLoadable$3(store, recoilValue, treeState); - }, [storeRef, recoilValue]); - const getLoadableWithTesting = useCallback$1(() => { - if (true) { - recoilComponentGetRecoilValueCount_FOR_TESTING.current++; - } - return getLoadable(); - }, [getLoadable]); - const componentName = Recoil_useComponentName(); - const subscribe = useCallback$1((_storeState, callback) => { - const store = storeRef.current; - const subscription = subscribeToRecoilValue$1(store, recoilValue, () => { - if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { - return callback(); - } - const newLoadable = getLoadable(); - if (!prevLoadableRef.current.is(newLoadable)) { - callback(); - } - prevLoadableRef.current = newLoadable; - }, componentName); - return subscription.release; - }, [storeRef, recoilValue, componentName, getLoadable]); - const source = useRecoilMutableSource$1(); - const loadable = useMutableSource$1(source, getLoadableWithTesting, subscribe); - const prevLoadableRef = useRef$2(loadable); - useEffect$1(() => { - prevLoadableRef.current = loadable; - }); - return loadable; -} -function useRecoilValueLoadable_LEGACY(recoilValue) { - if (true) { - validateRecoilValue(recoilValue, "useRecoilValueLoadable"); + if (!element) { + return scrollParents; } - const storeRef = useStoreRef$1(); - const [_5, forceUpdate] = useState$1([]); - const componentName = Recoil_useComponentName(); - useEffect$1(() => { - const store = storeRef.current; - const storeState = store.getState(); - const subscription = subscribeToRecoilValue$1(store, recoilValue, (_state) => { - var _prevLoadableRef$curr; - if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { - return forceUpdate([]); - } - const newLoadable = getRecoilValueAsLoadable$3(store, recoilValue, store.getState().currentTree); - if (!((_prevLoadableRef$curr = prevLoadableRef.current) === null || _prevLoadableRef$curr === void 0 ? void 0 : _prevLoadableRef$curr.is(newLoadable))) { - forceUpdate(newLoadable); - } - prevLoadableRef.current = newLoadable; - }, componentName); - if (storeState.nextTree) { - store.getState().queuedComponentCallbacks_DEPRECATED.push(() => { - prevLoadableRef.current = null; - forceUpdate([]); - }); - } else { - var _prevLoadableRef$curr2; - if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { - return forceUpdate([]); - } - const newLoadable = getRecoilValueAsLoadable$3(store, recoilValue, store.getState().currentTree); - if (!((_prevLoadableRef$curr2 = prevLoadableRef.current) === null || _prevLoadableRef$curr2 === void 0 ? void 0 : _prevLoadableRef$curr2.is(newLoadable))) { - forceUpdate(newLoadable); - } - prevLoadableRef.current = newLoadable; - } - return subscription.release; - }, [componentName, recoilValue, storeRef]); - const loadable = getRecoilValueAsLoadable$3(storeRef.current, recoilValue); - const prevLoadableRef = useRef$2(loadable); - useEffect$1(() => { - prevLoadableRef.current = loadable; - }); - return loadable; + return findScrollableAncestors(element); } -function useRecoilValueLoadable(recoilValue) { - if (Recoil_gkx_1("recoil_memory_managament_2020")) { - useRetain(recoilValue); +function getFirstScrollableAncestor(node) { + const [firstScrollableAncestor] = getScrollableAncestors(node, 1); + return firstScrollableAncestor != null ? firstScrollableAncestor : null; +} +function getScrollableElement(element) { + if (!canUseDOM || !element) { + return null; } - if (mutableSourceExists$2()) { - return useRecoilValueLoadable_MUTABLESOURCE(recoilValue); - } else { - return useRecoilValueLoadable_LEGACY(recoilValue); + if (isWindow(element)) { + return element; + } + if (!isNode(element)) { + return null; + } + if (isDocument(element) || element === getOwnerDocument(element).scrollingElement) { + return window; + } + if (isHTMLElement(element)) { + return element; } + return null; } -function useRecoilValue(recoilValue) { - if (true) { - validateRecoilValue(recoilValue, "useRecoilValue"); +function getScrollXCoordinate(element) { + if (isWindow(element)) { + return element.scrollX; } - const storeRef = useStoreRef$1(); - const loadable = useRecoilValueLoadable(recoilValue); - return handleLoadable(loadable, recoilValue, storeRef); + return element.scrollLeft; } -function useSetRecoilState(recoilState) { - if (true) { - validateRecoilValue(recoilState, "useSetRecoilState"); +function getScrollYCoordinate(element) { + if (isWindow(element)) { + return element.scrollY; } - const storeRef = useStoreRef$1(); - return useCallback$1((newValueOrUpdater) => { - setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); - }, [storeRef, recoilState]); + return element.scrollTop; } -function useResetRecoilState(recoilState) { - if (true) { - validateRecoilValue(recoilState, "useResetRecoilState"); +function getScrollCoordinates(element) { + return { + x: getScrollXCoordinate(element), + y: getScrollYCoordinate(element) + }; +} +var Direction2; +(function(Direction3) { + Direction3[Direction3["Forward"] = 1] = "Forward"; + Direction3[Direction3["Backward"] = -1] = "Backward"; +})(Direction2 || (Direction2 = {})); +function isDocumentScrollingElement(element) { + if (!canUseDOM || !element) { + return false; } - const storeRef = useStoreRef$1(); - return useCallback$1(() => { - setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); - }, [storeRef, recoilState]); + return element === document.scrollingElement; } -function useRecoilState(recoilState) { - if (true) { - validateRecoilValue(recoilState, "useRecoilState"); +function getScrollPosition(scrollingContainer) { + const minScroll = { + x: 0, + y: 0 + }; + const dimensions = isDocumentScrollingElement(scrollingContainer) ? { + height: window.innerHeight, + width: window.innerWidth + } : { + height: scrollingContainer.clientHeight, + width: scrollingContainer.clientWidth + }; + const maxScroll = { + x: scrollingContainer.scrollWidth - dimensions.width, + y: scrollingContainer.scrollHeight - dimensions.height + }; + const isTop = scrollingContainer.scrollTop <= minScroll.y; + const isLeft = scrollingContainer.scrollLeft <= minScroll.x; + const isBottom = scrollingContainer.scrollTop >= maxScroll.y; + const isRight = scrollingContainer.scrollLeft >= maxScroll.x; + return { + isTop, + isLeft, + isBottom, + isRight, + maxScroll, + minScroll + }; +} +var defaultThreshold = { + x: 0.2, + y: 0.2 +}; +function getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) { + let { + top, + left, + right, + bottom + } = _ref; + if (acceleration === void 0) { + acceleration = 10; } - return [useRecoilValue(recoilState), useSetRecoilState(recoilState)]; + if (thresholdPercentage === void 0) { + thresholdPercentage = defaultThreshold; + } + const { + isTop, + isBottom, + isLeft, + isRight + } = getScrollPosition(scrollContainer); + const direction = { + x: 0, + y: 0 + }; + const speed = { + x: 0, + y: 0 + }; + const threshold = { + height: scrollContainerRect.height * thresholdPercentage.y, + width: scrollContainerRect.width * thresholdPercentage.x + }; + if (!isTop && top <= scrollContainerRect.top + threshold.height) { + direction.y = Direction2.Backward; + speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height); + } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) { + direction.y = Direction2.Forward; + speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height); + } + if (!isRight && right >= scrollContainerRect.right - threshold.width) { + direction.x = Direction2.Forward; + speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width); + } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) { + direction.x = Direction2.Backward; + speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width); + } + return { + direction, + speed + }; } -function useRecoilStateLoadable(recoilState) { - if (true) { - validateRecoilValue(recoilState, "useRecoilStateLoadable"); +function getScrollElementRect(element) { + if (element === document.scrollingElement) { + const { + innerWidth: innerWidth2, + innerHeight: innerHeight2 + } = window; + return { + top: 0, + left: 0, + right: innerWidth2, + bottom: innerHeight2, + width: innerWidth2, + height: innerHeight2 + }; } - return [useRecoilValueLoadable(recoilState), useSetRecoilState(recoilState)]; + const { + top, + left, + right, + bottom + } = element.getBoundingClientRect(); + return { + top, + left, + right, + bottom, + width: element.clientWidth, + height: element.clientHeight + }; } -function useTransactionSubscription(callback) { - const storeRef = useStoreRef$1(); - useEffect$1(() => { - const sub = storeRef.current.subscribeToTransactions(callback); - return sub.release; - }, [callback, storeRef]); +function getScrollOffsets(scrollableAncestors) { + return scrollableAncestors.reduce((acc, node) => { + return add(acc, getScrollCoordinates(node)); + }, defaultCoordinates); } -function externallyVisibleAtomValuesInState(state) { - const atomValues = state.atomValues.toMap(); - const persistedAtomContentsValues = Recoil_mapMap(Recoil_filterMap(atomValues, (v3, k5) => { - const node = getNode$4(k5); - const persistence = node.persistence_UNSTABLE; - return persistence != null && persistence.type !== "none" && v3.state === "hasValue"; - }), (v3) => v3.contents); - return Recoil_mergeMaps(state.nonvalidatedAtoms.toMap(), persistedAtomContentsValues); +function getScrollXOffset(scrollableAncestors) { + return scrollableAncestors.reduce((acc, node) => { + return acc + getScrollXCoordinate(node); + }, 0); } -function useTransactionObservation_DEPRECATED(callback) { - useTransactionSubscription(useCallback$1((store) => { - let previousTree = store.getState().previousTree; - const currentTree = store.getState().currentTree; - if (!previousTree) { - Recoil_recoverableViolation("Transaction subscribers notified without a previous tree being present -- this is a bug in Recoil"); - previousTree = store.getState().currentTree; - } - const atomValues = externallyVisibleAtomValuesInState(currentTree); - const previousAtomValues = externallyVisibleAtomValuesInState(previousTree); - const atomInfo = Recoil_mapMap(nodes$1, (node) => { - var _node$persistence_UNS, _node$persistence_UNS2, _node$persistence_UNS3, _node$persistence_UNS4; - return { - persistence_UNSTABLE: { - type: (_node$persistence_UNS = (_node$persistence_UNS2 = node.persistence_UNSTABLE) === null || _node$persistence_UNS2 === void 0 ? void 0 : _node$persistence_UNS2.type) !== null && _node$persistence_UNS !== void 0 ? _node$persistence_UNS : "none", - backButton: (_node$persistence_UNS3 = (_node$persistence_UNS4 = node.persistence_UNSTABLE) === null || _node$persistence_UNS4 === void 0 ? void 0 : _node$persistence_UNS4.backButton) !== null && _node$persistence_UNS3 !== void 0 ? _node$persistence_UNS3 : false - } - }; - }); - const modifiedAtoms = Recoil_filterSet(currentTree.dirtyAtoms, (k5) => atomValues.has(k5) || previousAtomValues.has(k5)); - callback({ - atomValues, - previousAtomValues, - atomInfo, - modifiedAtoms, - transactionMetadata: { - ...currentTree.transactionMetadata - } - }); - }, [callback])); -} -function useRecoilTransactionObserver(callback) { - useTransactionSubscription(useCallback$1((store) => { - const snapshot = cloneSnapshot$1(store, "current"); - const previousSnapshot = cloneSnapshot$1(store, "previous"); - callback({ - snapshot, - previousSnapshot - }); - }, [callback])); -} -function usePrevious(value) { - const ref = useRef$2(); - useEffect$1(() => { - ref.current = value; - }); - return ref.current; +function getScrollYOffset(scrollableAncestors) { + return scrollableAncestors.reduce((acc, node) => { + return acc + getScrollYCoordinate(node); + }, 0); } -function useRecoilSnapshot() { - const storeRef = useStoreRef$1(); - const [snapshot, setSnapshot] = useState$1(() => cloneSnapshot$1(storeRef.current)); - const previousSnapshot = usePrevious(snapshot); - const timeoutID = useRef$2(); - useEffect$1(() => { - if (timeoutID.current && !isSSR$2) { - window.clearTimeout(timeoutID.current); - } - return snapshot.retain(); - }, [snapshot]); - useTransactionSubscription(useCallback$1((store) => setSnapshot(cloneSnapshot$1(store)), [])); - if (previousSnapshot !== snapshot && !isSSR$2) { - if (timeoutID.current) { - previousSnapshot === null || previousSnapshot === void 0 ? void 0 : previousSnapshot.release_INTERNAL(); - window.clearTimeout(timeoutID.current); - } - snapshot.retain(); - timeoutID.current = window.setTimeout(() => { - snapshot.release_INTERNAL(); - timeoutID.current = null; - }, SUSPENSE_TIMEOUT_MS); +function scrollIntoViewIfNeeded(element, measure) { + if (measure === void 0) { + measure = getClientRect; } - return snapshot; -} -function useGotoRecoilSnapshot() { - const storeRef = useStoreRef$1(); - return useCallback$1((snapshot) => { - var _storeState$nextTree3; - const storeState = storeRef.current.getState(); - const prev = (_storeState$nextTree3 = storeState.nextTree) !== null && _storeState$nextTree3 !== void 0 ? _storeState$nextTree3 : storeState.currentTree; - const next = snapshot.getStore_INTERNAL().getState().currentTree; - batchUpdates$2(() => { - const keysToUpdate = /* @__PURE__ */ new Set(); - for (const keys of [prev.atomValues.keys(), next.atomValues.keys()]) { - for (const key2 of keys) { - var _prev$atomValues$get, _next$atomValues$get; - if (((_prev$atomValues$get = prev.atomValues.get(key2)) === null || _prev$atomValues$get === void 0 ? void 0 : _prev$atomValues$get.contents) !== ((_next$atomValues$get = next.atomValues.get(key2)) === null || _next$atomValues$get === void 0 ? void 0 : _next$atomValues$get.contents) && getNode$4(key2).shouldRestoreFromSnapshots) { - keysToUpdate.add(key2); - } - } - } - keysToUpdate.forEach((key2) => { - setRecoilValueLoadable$1(storeRef.current, new AbstractRecoilValue$3(key2), next.atomValues.has(key2) ? Recoil_nullthrows(next.atomValues.get(key2)) : DEFAULT_VALUE$3); - }); - storeRef.current.replaceState((state) => { - return { - ...state, - stateID: snapshot.getID_INTERNAL() - }; - }); - }); - }, [storeRef]); -} -function useSetUnvalidatedAtomValues() { - const storeRef = useStoreRef$1(); - return (values, transactionMetadata = {}) => { - batchUpdates$2(() => { - storeRef.current.addTransactionMetadata(transactionMetadata); - values.forEach((value, key2) => setUnvalidatedRecoilValue$2(storeRef.current, new AbstractRecoilValue$3(key2), value)); - }); - }; -} -var Sentinel = class { -}; -var SENTINEL = new Sentinel(); -function useRecoilCallback(fn2, deps) { - const storeRef = useStoreRef$1(); - const gotoSnapshot = useGotoRecoilSnapshot(); - return useCallback$1( - (...args) => { - function set(recoilState, newValueOrUpdater) { - setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); - } - function reset(recoilState) { - setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); - } - const snapshot = cloneSnapshot$1(storeRef.current); - const atomicUpdate = atomicUpdater$1(storeRef.current); - let ret = SENTINEL; - batchUpdates$2(() => { - const errMsg = "useRecoilCallback expects a function that returns a function: it accepts a function of the type (RecoilInterface) => T = R and returns a callback function T => R, where RecoilInterface is an object {snapshot, set, ...} and T and R are the argument and return types of the callback you want to create. Please see the docs at recoiljs.org for details."; - if (typeof fn2 !== "function") { - throw new Error(errMsg); - } - const cb = fn2({ - set, - reset, - snapshot, - gotoSnapshot, - transact_UNSTABLE: atomicUpdate - }); - if (typeof cb !== "function") { - throw new Error(errMsg); - } - ret = cb(...args); - }); - !!(ret instanceof Sentinel) ? true ? Recoil_invariant(false, "batchUpdates should return immediately") : Recoil_invariant(false) : void 0; - return ret; - }, - deps != null ? [...deps, storeRef] : void 0 - ); -} -function useRetain(toRetain) { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + if (!element) { return; } - return useRetain_ACTUAL(toRetain); + const { + top, + left, + bottom, + right + } = measure(element); + const firstScrollableAncestor = getFirstScrollableAncestor(element); + if (!firstScrollableAncestor) { + return; + } + if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) { + element.scrollIntoView({ + block: "center", + inline: "center" + }); + } } -function useRetain_ACTUAL(toRetain) { - const array = Array.isArray(toRetain) ? toRetain : [toRetain]; - const retainables = array.map((a5) => a5 instanceof RetentionZone$3 ? a5 : a5.key); - const storeRef = useStoreRef$1(); - useEffect$1(() => { - if (!Recoil_gkx_1("recoil_memory_managament_2020")) { - return; - } - const store = storeRef.current; - if (timeoutID.current && !isSSR$2) { - window.clearTimeout(timeoutID.current); - timeoutID.current = null; - } else { - for (const r3 of retainables) { - updateRetainCount$2(store, r3, 1); - } - } - return () => { - for (const r3 of retainables) { - updateRetainCount$2(store, r3, -1); - } +var properties = [["x", ["left", "right"], getScrollXOffset], ["y", ["top", "bottom"], getScrollYOffset]]; +var Rect = class { + constructor(rect, element) { + this.rect = void 0; + this.width = void 0; + this.height = void 0; + this.top = void 0; + this.bottom = void 0; + this.right = void 0; + this.left = void 0; + const scrollableAncestors = getScrollableAncestors(element); + const scrollOffsets = getScrollOffsets(scrollableAncestors); + this.rect = { + ...rect }; - }, [storeRef, ...retainables]); - const timeoutID = useRef$2(); - const previousRetainables = usePrevious(retainables); - if (!isSSR$2 && (previousRetainables === void 0 || !Recoil_shallowArrayEqual(previousRetainables, retainables))) { - const store = storeRef.current; - for (const r3 of retainables) { - updateRetainCount$2(store, r3, 1); - } - if (previousRetainables) { - for (const r3 of previousRetainables) { - updateRetainCount$2(store, r3, -1); + this.width = rect.width; + this.height = rect.height; + for (const [axis, keys, getScrollOffset] of properties) { + for (const key2 of keys) { + Object.defineProperty(this, key2, { + get: () => { + const currentOffsets = getScrollOffset(scrollableAncestors); + const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets; + return this.rect[key2] + scrollOffsetsDeltla; + }, + enumerable: true + }); } } - if (timeoutID.current) { - window.clearTimeout(timeoutID.current); - } - timeoutID.current = window.setTimeout(() => { - timeoutID.current = null; - for (const r3 of retainables) { - updateRetainCount$2(store, r3, -1); - } - }, SUSPENSE_TIMEOUT_MS); + Object.defineProperty(this, "rect", { + enumerable: false + }); } -} -function useRecoilTransaction(fn2, deps) { - const storeRef = useStoreRef$1(); - return useMemo$1( - () => (...args) => { - const atomicUpdate = atomicUpdater$1(storeRef.current); - atomicUpdate((transactionInterface) => { - fn2(transactionInterface)(...args); - }); - }, - deps != null ? [...deps, storeRef] : void 0 - ); -} -var Recoil_Hooks = { - recoilComponentGetRecoilValueCount_FOR_TESTING, - useGotoRecoilSnapshot, - useRecoilCallback, - useRecoilInterface: useRecoilInterface_DEPRECATED, - useRecoilSnapshot, - useRecoilState, - useRecoilStateLoadable, - useRecoilTransaction, - useRecoilTransactionObserver, - useRecoilValue, - useRecoilValueLoadable, - useRetain, - useResetRecoilState, - useSetRecoilState, - useSetUnvalidatedAtomValues, - useTransactionObservation_DEPRECATED, - useTransactionSubscription_DEPRECATED: useTransactionSubscription }; -var { - peekNodeInfo: peekNodeInfo$2 -} = Recoil_FunctionalCore; -var { - useStoreRef: useStoreRef$2 -} = Recoil_RecoilRoot_react; -function useGetRecoilValueInfo() { - const storeRef = useStoreRef$2(); - return ({ - key: key2 - }) => peekNodeInfo$2(storeRef.current, storeRef.current.getState().currentTree, key2); -} -var Recoil_useGetRecoilValueInfo = useGetRecoilValueInfo; -var { - RecoilRoot: RecoilRoot$1, - useStoreRef: useStoreRef$3 -} = Recoil_RecoilRoot_react; -var { - useMemo: useMemo$2 -} = bn; -function useRecoilBridgeAcrossReactRoots() { - const store = useStoreRef$3().current; - return useMemo$2(() => { - function RecoilBridge({ - children - }) { - return /* @__PURE__ */ bn.createElement(RecoilRoot$1, { - store_INTERNAL: store - }, children); - } - return RecoilBridge; - }, [store]); -} -var Recoil_useRecoilBridgeAcrossReactRoots = useRecoilBridgeAcrossReactRoots; -function isNode(object) { - var _ownerDocument, _doc$defaultView; - if (typeof window === "undefined") { - return false; - } - const doc = object != null ? (_ownerDocument = object.ownerDocument) !== null && _ownerDocument !== void 0 ? _ownerDocument : object : document; - const defaultView = (_doc$defaultView = doc.defaultView) !== null && _doc$defaultView !== void 0 ? _doc$defaultView : window; - return !!(object != null && (typeof defaultView.Node === "function" ? object instanceof defaultView.Node : typeof object === "object" && typeof object.nodeType === "number" && typeof object.nodeName === "string")); -} -var Recoil_isNode = isNode; -var { - isReactNative: isReactNative$1, - isSSR: isSSR$3 -} = Recoil_Environment; -function shouldNotBeFrozen(value) { - if (value === null || typeof value !== "object") { - return true; - } - switch (typeof value.$$typeof) { - case "symbol": - return true; - case "number": - return true; - } - if (value["@@__IMMUTABLE_ITERABLE__@@"] != null || value["@@__IMMUTABLE_KEYED__@@"] != null || value["@@__IMMUTABLE_INDEXED__@@"] != null || value["@@__IMMUTABLE_ORDERED__@@"] != null || value["@@__IMMUTABLE_RECORD__@@"] != null) { - return true; +var Listeners = class { + constructor(target) { + this.target = void 0; + this.listeners = []; + this.removeAll = () => { + this.listeners.forEach((listener) => { + var _this$target; + return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener); + }); + }; + this.target = target; } - if (Recoil_isNode(value)) { - return true; + add(eventName, handler, options) { + var _this$target2; + (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options); + this.listeners.push([eventName, handler, options]); } - if (Recoil_isPromise(value)) { - return true; +}; +function getEventListenerTarget(target) { + const { + EventTarget + } = getWindow(target); + return target instanceof EventTarget ? target : getOwnerDocument(target); +} +function hasExceededDistance(delta, measurement) { + const dx = Math.abs(delta.x); + const dy = Math.abs(delta.y); + if (typeof measurement === "number") { + return Math.sqrt(dx ** 2 + dy ** 2) > measurement; } - if (value instanceof Error) { - return true; + if ("x" in measurement && "y" in measurement) { + return dx > measurement.x && dy > measurement.y; } - if (ArrayBuffer.isView(value)) { - return true; + if ("x" in measurement) { + return dx > measurement.x; } - if (!isSSR$3 && !isReactNative$1 && (value === window || value instanceof Window)) { - return true; + if ("y" in measurement) { + return dy > measurement.y; } return false; } -function deepFreezeValue(value) { - if (typeof value !== "object" || shouldNotBeFrozen(value)) { - return; - } - Object.freeze(value); - for (const key2 in value) { - if (Object.prototype.hasOwnProperty.call(value, key2)) { - const prop = value[key2]; - if (typeof prop === "object" && prop != null && !Object.isFrozen(prop)) { - deepFreezeValue(prop); - } - } - } - Object.seal(value); +var EventName; +(function(EventName2) { + EventName2["Click"] = "click"; + EventName2["DragStart"] = "dragstart"; + EventName2["Keydown"] = "keydown"; + EventName2["ContextMenu"] = "contextmenu"; + EventName2["Resize"] = "resize"; + EventName2["SelectionChange"] = "selectionchange"; + EventName2["VisibilityChange"] = "visibilitychange"; +})(EventName || (EventName = {})); +function preventDefault(event) { + event.preventDefault(); } -var Recoil_deepFreezeValue = deepFreezeValue; -var TIME_WARNING_THRESHOLD_MS = 15; -function stringify(x5, opt, key2) { - if (typeof x5 === "string" && !x5.includes('"') && !x5.includes("\\")) { - return `"${x5}"`; +function stopPropagation(event) { + event.stopPropagation(); +} +var KeyboardCode; +(function(KeyboardCode2) { + KeyboardCode2["Space"] = "Space"; + KeyboardCode2["Down"] = "ArrowDown"; + KeyboardCode2["Right"] = "ArrowRight"; + KeyboardCode2["Left"] = "ArrowLeft"; + KeyboardCode2["Up"] = "ArrowUp"; + KeyboardCode2["Esc"] = "Escape"; + KeyboardCode2["Enter"] = "Enter"; +})(KeyboardCode || (KeyboardCode = {})); +var defaultKeyboardCodes = { + start: [KeyboardCode.Space, KeyboardCode.Enter], + cancel: [KeyboardCode.Esc], + end: [KeyboardCode.Space, KeyboardCode.Enter] +}; +var defaultKeyboardCoordinateGetter = (event, _ref) => { + let { + currentCoordinates + } = _ref; + switch (event.code) { + case KeyboardCode.Right: + return { + ...currentCoordinates, + x: currentCoordinates.x + 25 + }; + case KeyboardCode.Left: + return { + ...currentCoordinates, + x: currentCoordinates.x - 25 + }; + case KeyboardCode.Down: + return { + ...currentCoordinates, + y: currentCoordinates.y + 25 + }; + case KeyboardCode.Up: + return { + ...currentCoordinates, + y: currentCoordinates.y - 25 + }; } - switch (typeof x5) { - case "undefined": - return ""; - case "boolean": - return x5 ? "true" : "false"; - case "number": - case "symbol": - return String(x5); - case "string": - return JSON.stringify(x5); - case "function": - if ((opt === null || opt === void 0 ? void 0 : opt.allowFunctions) !== true) { - throw new Error("Attempt to serialize function in a Recoil cache key"); + return void 0; +}; +var KeyboardSensor = class { + constructor(props2) { + this.props = void 0; + this.autoScrollEnabled = false; + this.referenceCoordinates = void 0; + this.listeners = void 0; + this.windowListeners = void 0; + this.props = props2; + const { + event: { + target } - return `__FUNCTION(${x5.name})__`; - } - if (x5 === null) { - return "null"; - } - if (typeof x5 !== "object") { - var _JSON$stringify; - return (_JSON$stringify = JSON.stringify(x5)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : ""; - } - if (Recoil_isPromise(x5)) { - return "__PROMISE__"; - } - if (Array.isArray(x5)) { - return `[${x5.map((v3, i4) => stringify(v3, opt, i4.toString()))}]`; + } = props2; + this.props = props2; + this.listeners = new Listeners(getOwnerDocument(target)); + this.windowListeners = new Listeners(getWindow(target)); + this.handleKeyDown = this.handleKeyDown.bind(this); + this.handleCancel = this.handleCancel.bind(this); + this.attach(); } - if (typeof x5.toJSON === "function") { - return stringify(x5.toJSON(key2), opt, key2); + attach() { + this.handleStart(); + this.windowListeners.add(EventName.Resize, this.handleCancel); + this.windowListeners.add(EventName.VisibilityChange, this.handleCancel); + setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown)); } - if (x5 instanceof Map) { - const obj = {}; - for (const [k5, v3] of x5) { - obj[typeof k5 === "string" ? k5 : stringify(k5, opt)] = v3; + handleStart() { + const { + activeNode, + onStart + } = this.props; + const node = activeNode.node.current; + if (node) { + scrollIntoViewIfNeeded(node); } - return stringify(obj, opt, key2); - } - if (x5 instanceof Set) { - return stringify(Array.from(x5).sort((a5, b4) => stringify(a5, opt).localeCompare(stringify(b4, opt))), opt, key2); - } - if (Symbol !== void 0 && x5[Symbol.iterator] != null && typeof x5[Symbol.iterator] === "function") { - return stringify(Array.from(x5), opt, key2); + onStart(defaultCoordinates); } - return `{${Object.keys(x5).filter((key3) => x5[key3] !== void 0).sort().map((key3) => `${stringify(key3, opt)}:${stringify(x5[key3], opt, key3)}`).join(",")}}`; -} -function stableStringify(x5, opt = { - allowFunctions: false -}) { - if (true) { - if (typeof window !== "undefined") { - const startTime = window.performance ? window.performance.now() : 0; - const str = stringify(x5, opt); - const endTime = window.performance ? window.performance.now() : 0; - if (endTime - startTime > TIME_WARNING_THRESHOLD_MS) { - console.groupCollapsed(`Recoil: Spent ${endTime - startTime}ms computing a cache key`); - console.warn(x5, str); - console.groupEnd(); + handleKeyDown(event) { + if (isKeyboardEvent(event)) { + const { + active, + context, + options + } = this.props; + const { + keyboardCodes = defaultKeyboardCodes, + coordinateGetter = defaultKeyboardCoordinateGetter, + scrollBehavior = "smooth" + } = options; + const { + code + } = event; + if (keyboardCodes.end.includes(code)) { + this.handleEnd(event); + return; + } + if (keyboardCodes.cancel.includes(code)) { + this.handleCancel(event); + return; + } + const { + collisionRect + } = context.current; + const currentCoordinates = collisionRect ? { + x: collisionRect.left, + y: collisionRect.top + } : defaultCoordinates; + if (!this.referenceCoordinates) { + this.referenceCoordinates = currentCoordinates; + } + const newCoordinates = coordinateGetter(event, { + active, + context: context.current, + currentCoordinates + }); + if (newCoordinates) { + const coordinatesDelta = subtract(newCoordinates, currentCoordinates); + const scrollDelta = { + x: 0, + y: 0 + }; + const { + scrollableAncestors + } = context.current; + for (const scrollContainer of scrollableAncestors) { + const direction = event.code; + const { + isTop, + isRight, + isLeft, + isBottom, + maxScroll, + minScroll + } = getScrollPosition(scrollContainer); + const scrollElementRect = getScrollElementRect(scrollContainer); + const clampedCoordinates = { + x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)), + y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y)) + }; + const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft; + const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop; + if (canScrollX && clampedCoordinates.x !== newCoordinates.x) { + const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x; + const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x; + if (canScrollToNewCoordinates && !coordinatesDelta.y) { + scrollContainer.scrollTo({ + left: newScrollCoordinates, + behavior: scrollBehavior + }); + return; + } + if (canScrollToNewCoordinates) { + scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates; + } else { + scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x; + } + if (scrollDelta.x) { + scrollContainer.scrollBy({ + left: -scrollDelta.x, + behavior: scrollBehavior + }); + } + break; + } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) { + const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y; + const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y; + if (canScrollToNewCoordinates && !coordinatesDelta.x) { + scrollContainer.scrollTo({ + top: newScrollCoordinates, + behavior: scrollBehavior + }); + return; + } + if (canScrollToNewCoordinates) { + scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates; + } else { + scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y; + } + if (scrollDelta.y) { + scrollContainer.scrollBy({ + top: -scrollDelta.y, + behavior: scrollBehavior + }); + } + break; + } + } + this.handleMove(event, add(subtract(newCoordinates, this.referenceCoordinates), scrollDelta)); } - return str; } } - return stringify(x5, opt); -} -var Recoil_stableStringify = stableStringify; -var TreeCache = class { - constructor(options) { - var _options$onHit, _options$onSet, _options$mapNodeValue; - _defineProperty(this, "_numLeafs", void 0); - _defineProperty(this, "_root", void 0); - _defineProperty(this, "_onHit", void 0); - _defineProperty(this, "_onSet", void 0); - _defineProperty(this, "_mapNodeValue", void 0); - this._numLeafs = 0; - this._root = null; - this._onHit = (_options$onHit = options === null || options === void 0 ? void 0 : options.onHit) !== null && _options$onHit !== void 0 ? _options$onHit : () => { - }; - this._onSet = (_options$onSet = options === null || options === void 0 ? void 0 : options.onSet) !== null && _options$onSet !== void 0 ? _options$onSet : () => { - }; - this._mapNodeValue = (_options$mapNodeValue = options === null || options === void 0 ? void 0 : options.mapNodeValue) !== null && _options$mapNodeValue !== void 0 ? _options$mapNodeValue : (val) => val; + handleMove(event, coordinates) { + const { + onMove + } = this.props; + event.preventDefault(); + onMove(coordinates); } - size() { - return this._numLeafs; + handleEnd(event) { + const { + onEnd + } = this.props; + event.preventDefault(); + this.detach(); + onEnd(); } - root() { - return this._root; + handleCancel(event) { + const { + onCancel + } = this.props; + event.preventDefault(); + this.detach(); + onCancel(); } - get(getNodeValue, handlers) { - var _this$getLeafNode; - return (_this$getLeafNode = this.getLeafNode(getNodeValue, handlers)) === null || _this$getLeafNode === void 0 ? void 0 : _this$getLeafNode.value; + detach() { + this.listeners.removeAll(); + this.windowListeners.removeAll(); } - getLeafNode(getNodeValue, handlers) { - return findLeaf(this.root(), (nodeKey) => this._mapNodeValue(getNodeValue(nodeKey)), { - onNodeVisit: (node) => { - handlers === null || handlers === void 0 ? void 0 : handlers.onNodeVisit(node); - if (node.type === "leaf") { - this._onHit(node); - } +}; +KeyboardSensor.activators = [{ + eventName: "onKeyDown", + handler: (event, _ref, _ref2) => { + let { + keyboardCodes = defaultKeyboardCodes, + onActivation + } = _ref; + let { + active + } = _ref2; + const { + code + } = event.nativeEvent; + if (keyboardCodes.start.includes(code)) { + const activator = active.activatorNode.current; + if (activator && event.target !== activator) { + return false; } - }); + event.preventDefault(); + onActivation == null ? void 0 : onActivation({ + event: event.nativeEvent + }); + return true; + } + return false; } - set(route, value, handlers) { - let leafNode; - const newRoot = addLeaf(this.root(), route.map(([nodeKey, nodeValue]) => [nodeKey, this._mapNodeValue(nodeValue)]), null, value, null, { - onNodeVisit: (node) => { - handlers === null || handlers === void 0 ? void 0 : handlers.onNodeVisit(node); - if (node.type === "leaf") { - leafNode = node; +}]; +function isDistanceConstraint(constraint) { + return Boolean(constraint && "distance" in constraint); +} +function isDelayConstraint(constraint) { + return Boolean(constraint && "delay" in constraint); +} +var AbstractPointerSensor = class { + constructor(props2, events2, listenerTarget) { + var _getEventCoordinates; + if (listenerTarget === void 0) { + listenerTarget = getEventListenerTarget(props2.event.target); + } + this.props = void 0; + this.events = void 0; + this.autoScrollEnabled = true; + this.document = void 0; + this.activated = false; + this.initialCoordinates = void 0; + this.timeoutId = null; + this.listeners = void 0; + this.documentListeners = void 0; + this.windowListeners = void 0; + this.props = props2; + this.events = events2; + const { + event + } = props2; + const { + target + } = event; + this.props = props2; + this.events = events2; + this.document = getOwnerDocument(target); + this.documentListeners = new Listeners(this.document); + this.listeners = new Listeners(listenerTarget); + this.windowListeners = new Listeners(getWindow(target)); + this.initialCoordinates = (_getEventCoordinates = getEventCoordinates(event)) != null ? _getEventCoordinates : defaultCoordinates; + this.handleStart = this.handleStart.bind(this); + this.handleMove = this.handleMove.bind(this); + this.handleEnd = this.handleEnd.bind(this); + this.handleCancel = this.handleCancel.bind(this); + this.handleKeydown = this.handleKeydown.bind(this); + this.removeTextSelection = this.removeTextSelection.bind(this); + this.attach(); + } + attach() { + const { + events: events2, + props: { + options: { + activationConstraint } } + } = this; + this.listeners.add(events2.move.name, this.handleMove, { + passive: false }); - if (!this.root()) { - this._root = newRoot; + this.listeners.add(events2.end.name, this.handleEnd); + this.windowListeners.add(EventName.Resize, this.handleCancel); + this.windowListeners.add(EventName.DragStart, preventDefault); + this.windowListeners.add(EventName.VisibilityChange, this.handleCancel); + this.windowListeners.add(EventName.ContextMenu, preventDefault); + this.documentListeners.add(EventName.Keydown, this.handleKeydown); + if (activationConstraint) { + if (isDistanceConstraint(activationConstraint)) { + return; + } + if (isDelayConstraint(activationConstraint)) { + this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay); + return; + } } - this._numLeafs++; - this._onSet(Recoil_nullthrows(leafNode)); + this.handleStart(); } - delete(node) { - if (!this.root()) { - return false; + detach() { + this.listeners.removeAll(); + this.windowListeners.removeAll(); + setTimeout(this.documentListeners.removeAll, 50); + if (this.timeoutId !== null) { + clearTimeout(this.timeoutId); + this.timeoutId = null; } - const root = Recoil_nullthrows(this.root()); - const existsInTree = pruneNodeFromTree(root, node, node.parent); - if (!existsInTree) { - return false; + } + handleStart() { + const { + initialCoordinates + } = this; + const { + onStart + } = this.props; + if (initialCoordinates) { + this.activated = true; + this.documentListeners.add(EventName.Click, stopPropagation, { + capture: true + }); + this.removeTextSelection(); + this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection); + onStart(initialCoordinates); } - if (node === root || root.type === "branch" && !root.branches.size) { - this._root = null; - this._numLeafs = 0; - return true; + } + handleMove(event) { + var _getEventCoordinates2; + const { + activated, + initialCoordinates, + props: props2 + } = this; + const { + onMove, + options: { + activationConstraint + } + } = props2; + if (!initialCoordinates) { + return; } - this._numLeafs -= countDownstreamLeaves(node); - return true; + const coordinates = (_getEventCoordinates2 = getEventCoordinates(event)) != null ? _getEventCoordinates2 : defaultCoordinates; + const delta = subtract(initialCoordinates, coordinates); + if (!activated && activationConstraint) { + if (isDelayConstraint(activationConstraint)) { + if (hasExceededDistance(delta, activationConstraint.tolerance)) { + return this.handleCancel(); + } + return; + } + if (isDistanceConstraint(activationConstraint)) { + if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) { + return this.handleCancel(); + } + if (hasExceededDistance(delta, activationConstraint.distance)) { + return this.handleStart(); + } + return; + } + } + if (event.cancelable) { + event.preventDefault(); + } + onMove(coordinates); } - clear() { - this._numLeafs = 0; - this._root = null; + handleEnd() { + const { + onEnd + } = this.props; + this.detach(); + onEnd(); + } + handleCancel() { + const { + onCancel + } = this.props; + this.detach(); + onCancel(); + } + handleKeydown(event) { + if (event.code === KeyboardCode.Esc) { + this.handleCancel(); + } + } + removeTextSelection() { + var _this$document$getSel; + (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges(); } }; -var findLeaf = (root, getNodeValue, handlers) => { - var _handlers$onNodeVisit; - if (root == null) { - return void 0; +var events = { + move: { + name: "pointermove" + }, + end: { + name: "pointerup" } - handlers === null || handlers === void 0 ? void 0 : (_handlers$onNodeVisit = handlers.onNodeVisit) === null || _handlers$onNodeVisit === void 0 ? void 0 : _handlers$onNodeVisit.call(handlers, root); - if (root.type === "leaf") { - return root; +}; +var PointerSensor = class extends AbstractPointerSensor { + constructor(props2) { + const { + event + } = props2; + const listenerTarget = getOwnerDocument(event.target); + super(props2, events, listenerTarget); } - const nodeValue = getNodeValue(root.nodeKey); - return findLeaf(root.branches.get(nodeValue), getNodeValue, handlers); }; -var addLeaf = (root, route, parent, value, branchKey, handlers) => { - var _handlers$onNodeVisit2; - let node; - if (root == null) { - if (route.length === 0) { - node = { - type: "leaf", - value, - parent, - branchKey - }; - } else { - const [path, ...rest] = route; - const [nodeKey, nodeValue] = path; - node = { - type: "branch", - nodeKey, - parent, - branches: /* @__PURE__ */ new Map(), - branchKey - }; - node.branches.set(nodeValue, addLeaf(null, rest, node, value, nodeValue, handlers)); - } - } else { - node = root; - if (route.length) { - const [path, ...rest] = route; - const [nodeKey, nodeValue] = path; - !(root.type === "branch" && root.nodeKey === nodeKey) ? true ? Recoil_invariant(false, "Existing cache must have a branch midway through the route with matching node key") : Recoil_invariant(false) : void 0; - root.branches.set(nodeValue, addLeaf(root.branches.get(nodeValue), rest, root, value, nodeValue, handlers)); +PointerSensor.activators = [{ + eventName: "onPointerDown", + handler: (_ref, _ref2) => { + let { + nativeEvent: event + } = _ref; + let { + onActivation + } = _ref2; + if (!event.isPrimary || event.button !== 0) { + return false; } + onActivation == null ? void 0 : onActivation({ + event + }); + return true; + } +}]; +var events$1 = { + move: { + name: "mousemove" + }, + end: { + name: "mouseup" } - handlers === null || handlers === void 0 ? void 0 : (_handlers$onNodeVisit2 = handlers.onNodeVisit) === null || _handlers$onNodeVisit2 === void 0 ? void 0 : _handlers$onNodeVisit2.call(handlers, node); - return node; }; -var pruneNodeFromTree = (root, node, parent) => { - if (!parent) { - return root === node; +var MouseButton; +(function(MouseButton2) { + MouseButton2[MouseButton2["RightClick"] = 2] = "RightClick"; +})(MouseButton || (MouseButton = {})); +var MouseSensor = class extends AbstractPointerSensor { + constructor(props2) { + super(props2, events$1, getOwnerDocument(props2.event.target)); } - parent.branches.delete(node.branchKey); - return pruneUpstreamBranches(root, parent, parent.parent); }; -var pruneUpstreamBranches = (root, branchNode, parent) => { - if (!parent) { - return root === branchNode; +MouseSensor.activators = [{ + eventName: "onMouseDown", + handler: (_ref, _ref2) => { + let { + nativeEvent: event + } = _ref; + let { + onActivation + } = _ref2; + if (event.button === MouseButton.RightClick) { + return false; + } + onActivation == null ? void 0 : onActivation({ + event + }); + return true; } - if (branchNode.branches.size === 0) { - parent.branches.delete(branchNode.branchKey); +}]; +var events$2 = { + move: { + name: "touchmove" + }, + end: { + name: "touchend" } - return pruneUpstreamBranches(root, parent, parent.parent); -}; -var countDownstreamLeaves = (node) => node.type === "leaf" ? 1 : Array.from(node.branches.values()).reduce((sum2, currNode) => sum2 + countDownstreamLeaves(currNode), 0); -var Recoil_TreeCache = { - TreeCache }; -var Recoil_TreeCache_1 = Recoil_TreeCache.TreeCache; -var Recoil_TreeCache$1 = /* @__PURE__ */ Object.freeze({ - __proto__: null, - TreeCache: Recoil_TreeCache_1 -}); -var LRUCache = class { - constructor(options) { - var _options$mapKey; - _defineProperty(this, "_maxSize", void 0); - _defineProperty(this, "_size", void 0); - _defineProperty(this, "_head", void 0); - _defineProperty(this, "_tail", void 0); - _defineProperty(this, "_map", void 0); - _defineProperty(this, "_keyMapper", void 0); - this._maxSize = options.maxSize; - this._size = 0; - this._head = null; - this._tail = null; - this._map = /* @__PURE__ */ new Map(); - this._keyMapper = (_options$mapKey = options.mapKey) !== null && _options$mapKey !== void 0 ? _options$mapKey : (v3) => v3; - } - head() { - return this._head; - } - tail() { - return this._tail; - } - size() { - return this._size; - } - maxSize() { - return this._maxSize; - } - has(key2) { - return this._map.has(this._keyMapper(key2)); - } - get(key2) { - const mappedKey = this._keyMapper(key2); - const node = this._map.get(mappedKey); - if (!node) { - return void 0; - } - this.set(key2, node.value); - return node.value; +var TouchSensor = class extends AbstractPointerSensor { + constructor(props2) { + super(props2, events$2); } - set(key2, val) { - const mappedKey = this._keyMapper(key2); - const existingNode = this._map.get(mappedKey); - if (existingNode) { - this.delete(key2); - } - const head = this.head(); - const node = { - key: key2, - right: head, - left: null, - value: val + static setup() { + window.addEventListener(events$2.move.name, noop2, { + capture: false, + passive: false + }); + return function teardown() { + window.removeEventListener(events$2.move.name, noop2); }; - if (head) { - head.left = node; - } else { - this._tail = node; + function noop2() { } - this._map.set(mappedKey, node); - this._head = node; - this._size++; - this._maybeDeleteLRU(); } - _maybeDeleteLRU() { - if (this.size() > this.maxSize()) { - this.deleteLru(); +}; +TouchSensor.activators = [{ + eventName: "onTouchStart", + handler: (_ref, _ref2) => { + let { + nativeEvent: event + } = _ref; + let { + onActivation + } = _ref2; + const { + touches + } = event; + if (touches.length > 1) { + return false; } + onActivation == null ? void 0 : onActivation({ + event + }); + return true; } - deleteLru() { - const tail = this.tail(); - if (tail) { - this.delete(tail.key); +}]; +var AutoScrollActivator; +(function(AutoScrollActivator2) { + AutoScrollActivator2[AutoScrollActivator2["Pointer"] = 0] = "Pointer"; + AutoScrollActivator2[AutoScrollActivator2["DraggableRect"] = 1] = "DraggableRect"; +})(AutoScrollActivator || (AutoScrollActivator = {})); +var TraversalOrder; +(function(TraversalOrder2) { + TraversalOrder2[TraversalOrder2["TreeOrder"] = 0] = "TreeOrder"; + TraversalOrder2[TraversalOrder2["ReversedTreeOrder"] = 1] = "ReversedTreeOrder"; +})(TraversalOrder || (TraversalOrder = {})); +function useAutoScroller(_ref) { + let { + acceleration, + activator = AutoScrollActivator.Pointer, + canScroll, + draggingRect, + enabled, + interval = 5, + order = TraversalOrder.TreeOrder, + pointerCoordinates, + scrollableAncestors, + scrollableAncestorRects, + delta, + threshold + } = _ref; + const scrollIntent = useScrollIntent({ + delta, + disabled: !enabled + }); + const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval(); + const scrollSpeed = _2({ + x: 0, + y: 0 + }); + const scrollDirection = _2({ + x: 0, + y: 0 + }); + const rect = F(() => { + switch (activator) { + case AutoScrollActivator.Pointer: + return pointerCoordinates ? { + top: pointerCoordinates.y, + bottom: pointerCoordinates.y, + left: pointerCoordinates.x, + right: pointerCoordinates.x + } : null; + case AutoScrollActivator.DraggableRect: + return draggingRect; } - } - delete(key2) { - const mappedKey = this._keyMapper(key2); - if (!this._size || !this._map.has(mappedKey)) { + }, [activator, draggingRect, pointerCoordinates]); + const scrollContainerRef = _2(null); + const autoScroll = T2(() => { + const scrollContainer = scrollContainerRef.current; + if (!scrollContainer) { return; } - const node = Recoil_nullthrows(this._map.get(mappedKey)); - const right = node.right; - const left = node.left; - if (right) { - right.left = node.left; + const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x; + const scrollTop = scrollSpeed.current.y * scrollDirection.current.y; + scrollContainer.scrollBy(scrollLeft, scrollTop); + }, []); + const sortedScrollableAncestors = F(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]); + h2( + () => { + if (!enabled || !scrollableAncestors.length || !rect) { + clearAutoScrollInterval(); + return; + } + for (const scrollContainer of sortedScrollableAncestors) { + if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) { + continue; + } + const index = scrollableAncestors.indexOf(scrollContainer); + const scrollContainerRect = scrollableAncestorRects[index]; + if (!scrollContainerRect) { + continue; + } + const { + direction, + speed + } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold); + for (const axis of ["x", "y"]) { + if (!scrollIntent[axis][direction[axis]]) { + speed[axis] = 0; + direction[axis] = 0; + } + } + if (speed.x > 0 || speed.y > 0) { + clearAutoScrollInterval(); + scrollContainerRef.current = scrollContainer; + setAutoScrollInterval(autoScroll, interval); + scrollSpeed.current = speed; + scrollDirection.current = direction; + return; + } + } + scrollSpeed.current = { + x: 0, + y: 0 + }; + scrollDirection.current = { + x: 0, + y: 0 + }; + clearAutoScrollInterval(); + }, + [ + acceleration, + autoScroll, + canScroll, + clearAutoScrollInterval, + enabled, + interval, + JSON.stringify(rect), + JSON.stringify(scrollIntent), + setAutoScrollInterval, + scrollableAncestors, + sortedScrollableAncestors, + scrollableAncestorRects, + JSON.stringify(threshold) + ] + ); +} +var defaultScrollIntent = { + x: { + [Direction2.Backward]: false, + [Direction2.Forward]: false + }, + y: { + [Direction2.Backward]: false, + [Direction2.Forward]: false + } +}; +function useScrollIntent(_ref2) { + let { + delta, + disabled + } = _ref2; + const previousDelta = usePrevious(delta); + return useLazyMemo((previousIntent) => { + if (disabled || !previousDelta || !previousIntent) { + return defaultScrollIntent; } - if (left) { - left.right = node.right; + const direction = { + x: Math.sign(delta.x - previousDelta.x), + y: Math.sign(delta.y - previousDelta.y) + }; + return { + x: { + [Direction2.Backward]: previousIntent.x[Direction2.Backward] || direction.x === -1, + [Direction2.Forward]: previousIntent.x[Direction2.Forward] || direction.x === 1 + }, + y: { + [Direction2.Backward]: previousIntent.y[Direction2.Backward] || direction.y === -1, + [Direction2.Forward]: previousIntent.y[Direction2.Forward] || direction.y === 1 + } + }; + }, [disabled, delta, previousDelta]); +} +function useCachedNode(draggableNodes, id2) { + const draggableNode = id2 !== null ? draggableNodes.get(id2) : void 0; + const node = draggableNode ? draggableNode.node.current : null; + return useLazyMemo((cachedNode) => { + var _ref; + if (id2 === null) { + return null; } - if (node === this.head()) { - this._head = right; + return (_ref = node != null ? node : cachedNode) != null ? _ref : null; + }, [node, id2]); +} +function useCombineActivators(sensors, getSyntheticHandler) { + return F(() => sensors.reduce((accumulator, sensor) => { + const { + sensor: Sensor + } = sensor; + const sensorActivators = Sensor.activators.map((activator) => ({ + eventName: activator.eventName, + handler: getSyntheticHandler(activator.handler, sensor) + })); + return [...accumulator, ...sensorActivators]; + }, []), [sensors, getSyntheticHandler]); +} +var MeasuringStrategy; +(function(MeasuringStrategy2) { + MeasuringStrategy2[MeasuringStrategy2["Always"] = 0] = "Always"; + MeasuringStrategy2[MeasuringStrategy2["BeforeDragging"] = 1] = "BeforeDragging"; + MeasuringStrategy2[MeasuringStrategy2["WhileDragging"] = 2] = "WhileDragging"; +})(MeasuringStrategy || (MeasuringStrategy = {})); +var MeasuringFrequency; +(function(MeasuringFrequency2) { + MeasuringFrequency2["Optimized"] = "optimized"; +})(MeasuringFrequency || (MeasuringFrequency = {})); +var defaultValue = /* @__PURE__ */ new Map(); +function useDroppableMeasuring(containers, _ref) { + let { + dragging, + dependencies, + config + } = _ref; + const [containerIdsScheduledForMeasurement, setContainerIdsScheduledForMeasurement] = p2(null); + const measuringScheduled = containerIdsScheduledForMeasurement != null; + const { + frequency, + measure, + strategy + } = config; + const containersRef = _2(containers); + const disabled = isDisabled(); + const disabledRef = useLatestValue(disabled); + const measureDroppableContainers = T2(function(ids2) { + if (ids2 === void 0) { + ids2 = []; } - if (node === this.tail()) { - this._tail = left; + if (disabledRef.current) { + return; } - this._map.delete(mappedKey); - this._size--; - } - clear() { - this._size = 0; - this._head = null; - this._tail = null; - this._map = /* @__PURE__ */ new Map(); - } -}; -var Recoil_LRUCache = { - LRUCache -}; -var Recoil_LRUCache_1 = Recoil_LRUCache.LRUCache; -var Recoil_LRUCache$1 = /* @__PURE__ */ Object.freeze({ - __proto__: null, - LRUCache: Recoil_LRUCache_1 -}); -var { - LRUCache: LRUCache$1 -} = Recoil_LRUCache$1; -var { - TreeCache: TreeCache$1 -} = Recoil_TreeCache$1; -function treeCacheLRU(maxSize, mapNodeValue = (v3) => v3) { - const lruCache = new LRUCache$1({ - maxSize - }); - const cache = new TreeCache$1({ - mapNodeValue, - onHit: (node) => { - lruCache.set(node, true); + setContainerIdsScheduledForMeasurement((value) => value ? value.concat(ids2) : ids2); + }, [disabledRef]); + const timeoutId = _2(null); + const droppableRects = useLazyMemo((previousValue) => { + if (disabled && !dragging) { + return defaultValue; + } + const ids2 = containerIdsScheduledForMeasurement; + if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || ids2 != null) { + const map = /* @__PURE__ */ new Map(); + for (let container of containers) { + if (!container) { + continue; + } + if (ids2 && ids2.length > 0 && !ids2.includes(container.id) && container.rect.current) { + map.set(container.id, container.rect.current); + continue; + } + const node = container.node.current; + const rect = node ? new Rect(measure(node), node) : null; + container.rect.current = rect; + if (rect) { + map.set(container.id, rect); + } + } + return map; + } + return previousValue; + }, [containers, containerIdsScheduledForMeasurement, dragging, disabled, measure]); + h2(() => { + containersRef.current = containers; + }, [containers]); + h2( + () => { + if (disabled) { + return; + } + requestAnimationFrame(() => measureDroppableContainers()); }, - onSet: (node) => { - const lruNode = lruCache.tail(); - lruCache.set(node, true); - if (lruNode && cache.size() > maxSize) { - cache.delete(lruNode.key); + [dragging, disabled] + ); + h2(() => { + if (measuringScheduled) { + setContainerIdsScheduledForMeasurement(null); + } + }, [measuringScheduled]); + h2( + () => { + if (disabled || typeof frequency !== "number" || timeoutId.current !== null) { + return; } + timeoutId.current = setTimeout(() => { + measureDroppableContainers(); + timeoutId.current = null; + }, frequency); + }, + [frequency, disabled, measureDroppableContainers, ...dependencies] + ); + return { + droppableRects, + measureDroppableContainers, + measuringScheduled + }; + function isDisabled() { + switch (strategy) { + case MeasuringStrategy.Always: + return false; + case MeasuringStrategy.BeforeDragging: + return dragging; + default: + return !dragging; } - }); - return cache; -} -var Recoil_treeCacheLRU = treeCacheLRU; -var { - TreeCache: TreeCache$2 -} = Recoil_TreeCache$1; -var defaultPolicy = { - equality: "reference", - eviction: "keep-all", - maxSize: Infinity -}; -function treeCacheFromPolicy({ - equality = defaultPolicy.equality, - eviction = defaultPolicy.eviction, - maxSize = defaultPolicy.maxSize -} = defaultPolicy) { - const valueMapper = getValueMapper(equality); - const treeCache = getTreeCache(eviction, maxSize, valueMapper); - return treeCache; -} -function getValueMapper(equality) { - switch (equality) { - case "reference": - return (val) => val; - case "value": - return (val) => Recoil_stableStringify(val); } - throw new Error(`Unrecognized equality policy ${equality}`); } -function getTreeCache(eviction, maxSize, mapNodeValue) { - switch (eviction) { - case "keep-all": - return new TreeCache$2({ - mapNodeValue - }); - case "lru": - return Recoil_treeCacheLRU(Recoil_nullthrows(maxSize), mapNodeValue); - case "most-recent": - return Recoil_treeCacheLRU(1, mapNodeValue); - } - throw new Error(`Unrecognized eviction policy ${eviction}`); +function useInitialValue(value, computeFn) { + return useLazyMemo((previousValue) => { + if (!value) { + return null; + } + if (previousValue) { + return previousValue; + } + return typeof computeFn === "function" ? computeFn(value) : value; + }, [computeFn, value]); } -var Recoil_treeCacheFromPolicy = treeCacheFromPolicy; -function startPerfBlock(_id) { - return () => null; +function useInitialRect(node, measure) { + return useInitialValue(node, measure); } -var Recoil_PerformanceTimings = { - startPerfBlock -}; -var { - CANCELED: CANCELED$2, - Canceled: Canceled$1, - loadableWithError: loadableWithError$1, - loadableWithPromise: loadableWithPromise$1, - loadableWithValue: loadableWithValue$2 -} = Recoil_Loadable; -var { - getNodeLoadable: getNodeLoadable$2, - peekNodeLoadable: peekNodeLoadable$1, - setNodeValue: setNodeValue$3 -} = Recoil_FunctionalCore; -var { - saveDependencyMapToStore: saveDependencyMapToStore$1 -} = Recoil_Graph; -var { - DEFAULT_VALUE: DEFAULT_VALUE$4, - RecoilValueNotReady: RecoilValueNotReady$2, - getConfigDeletionHandler: getConfigDeletionHandler$1, - registerNode: registerNode$1 -} = Recoil_Node; -var { - isRecoilValue: isRecoilValue$3 -} = Recoil_RecoilValue$1; -var { - AbstractRecoilValue: AbstractRecoilValue$4 -} = Recoil_RecoilValue$1; -var { - setRecoilValueLoadable: setRecoilValueLoadable$2 -} = Recoil_RecoilValueInterface; -var { - retainedByOptionWithDefault: retainedByOptionWithDefault$1 -} = Recoil_Retention; -var { - cloneSnapshot: cloneSnapshot$2 -} = Recoil_Snapshot$1; -var { - startPerfBlock: startPerfBlock$1 -} = Recoil_PerformanceTimings; -var dependencyStack = []; -var waitingStores = /* @__PURE__ */ new Map(); -var getNewExecutionId = (() => { - let executionId = 0; - return () => executionId++; -})(); -function getInitialExecutionInfo() { - return { - depValuesDiscoveredSoFarDuringAsyncWork: null, - latestLoadable: null, - latestExecutionId: null, - stateVersion: null - }; -} -function selector(options) { - const { - key: key2, - get, - cachePolicy_UNSTABLE: cachePolicy - } = options; - const set = options.set != null ? options.set : void 0; - const cache = Recoil_treeCacheFromPolicy(cachePolicy !== null && cachePolicy !== void 0 ? cachePolicy : { - equality: "reference", - eviction: "keep-all" - }); - const retainedBy = retainedByOptionWithDefault$1(options.retainedBy_UNSTABLE); - const executionInfoMap = /* @__PURE__ */ new Map(); - let liveStoresCount = 0; - function selectorIsLive() { - return !Recoil_gkx_1("recoil_memory_managament_2020") || liveStoresCount > 0; - } - function getExecutionInfo(store) { - if (!executionInfoMap.has(store)) { - executionInfoMap.set(store, getInitialExecutionInfo()); - } - return Recoil_nullthrows(executionInfoMap.get(store)); - } - function selectorInit(store) { - liveStoresCount++; - store.getState().knownSelectors.add(key2); - return () => { - liveStoresCount--; - store.getState().knownSelectors.delete(key2); - executionInfoMap.delete(store); - }; - } - function selectorShouldDeleteConfigOnRelease() { - return getConfigDeletionHandler$1(key2) !== void 0 && !selectorIsLive(); - } - function notifyStoreWhenAsyncSettles(store, loadable, executionId) { - if (loadable.state === "loading") { - let stores = waitingStores.get(executionId); - if (stores == null) { - waitingStores.set(executionId, stores = /* @__PURE__ */ new Set()); - } - stores.add(store); - } - } - function notifyStoresOfSettledAsync(newLoadable, executionId) { - const stores = waitingStores.get(executionId); - if (stores !== void 0) { - for (const store of stores) { - setRecoilValueLoadable$2(store, new AbstractRecoilValue$4(key2), newLoadable); - } - waitingStores.delete(executionId); - } - } - function getCachedNodeLoadable(store, state, key3) { - const isKeyPointingToSelector = store.getState().knownSelectors.has(key3); - if (isKeyPointingToSelector && state.atomValues.has(key3)) { - return Recoil_nullthrows(state.atomValues.get(key3)); - } - const loadable = getNodeLoadable$2(store, state, key3); - if (loadable.state !== "loading" && isKeyPointingToSelector) { - state.atomValues.set(key3, loadable); +function useMutationObserver(_ref) { + let { + callback, + disabled + } = _ref; + const handleMutations = useEvent(callback); + const mutationObserver = F(() => { + if (disabled || typeof window === "undefined" || typeof window.MutationObserver === "undefined") { + return void 0; } - return loadable; - } - function wrapPendingPromise(store, promise, state, depValues, executionId) { - return promise.then((value) => { - if (!selectorIsLive()) { - clearExecutionInfo(store, executionId); - return CANCELED$2; - } - const loadable = loadableWithValue$2(value); - maybeFreezeValue(value); - setCache(state, depValuesToDepRoute(depValues), loadable); - setDepsInStore(store, state, new Set(depValues.keys()), executionId); - setLoadableInStoreToNotifyDeps(store, loadable, executionId); - return { - __value: value, - __key: key2 - }; - }).catch((errorOrPromise) => { - if (!selectorIsLive()) { - clearExecutionInfo(store, executionId); - return CANCELED$2; - } - if (isLatestExecution(store, executionId)) { - updateExecutionInfoDepValues(depValues, store, executionId); - } - if (Recoil_isPromise(errorOrPromise)) { - return wrapPendingDependencyPromise(store, errorOrPromise, state, depValues, executionId); - } - const loadable = loadableWithError$1(errorOrPromise); - maybeFreezeValue(errorOrPromise); - setCache(state, depValuesToDepRoute(depValues), loadable); - setDepsInStore(store, state, new Set(depValues.keys()), executionId); - setLoadableInStoreToNotifyDeps(store, loadable, executionId); - throw errorOrPromise; - }); - } - function wrapPendingDependencyPromise(store, promise, state, existingDeps, executionId) { - return promise.then((resolvedDep) => { - if (!selectorIsLive()) { - clearExecutionInfo(store, executionId); - return CANCELED$2; - } - if (resolvedDep instanceof Canceled$1) { - Recoil_recoverableViolation("Selector was released while it had dependencies"); - return CANCELED$2; + const { + MutationObserver + } = window; + return new MutationObserver(handleMutations); + }, [handleMutations, disabled]); + h2(() => { + return () => mutationObserver == null ? void 0 : mutationObserver.disconnect(); + }, [mutationObserver]); + return mutationObserver; +} +function useResizeObserver(_ref) { + let { + callback, + disabled + } = _ref; + const handleResize = useEvent(callback); + const resizeObserver = F( + () => { + if (disabled || typeof window === "undefined" || typeof window.ResizeObserver === "undefined") { + return void 0; } const { - __key: resolvedDepKey, - __value: depValue - } = resolvedDep !== null && resolvedDep !== void 0 ? resolvedDep : {}; - let bypassSelectorDepCacheOnReevaluation = true; - if (resolvedDepKey != null) { - state.atomValues.set(resolvedDepKey, loadableWithValue$2(depValue)); - bypassSelectorDepCacheOnReevaluation = false; - } - const cachedLoadable = getValFromCacheAndUpdatedDownstreamDeps(store, state); - if (cachedLoadable && cachedLoadable.state === "hasValue") { - setExecutionInfo(cachedLoadable, store); - return { - __value: cachedLoadable.contents, - __key: key2 - }; + ResizeObserver + } = window; + return new ResizeObserver(handleResize); + }, + [disabled] + ); + h2(() => { + return () => resizeObserver == null ? void 0 : resizeObserver.disconnect(); + }, [resizeObserver]); + return resizeObserver; +} +function defaultMeasure(element) { + return new Rect(getClientRect(element), element); +} +function useRect(element, measure, fallbackRect) { + if (measure === void 0) { + measure = defaultMeasure; + } + const [rect, measureRect] = y2(reducer2, null); + const mutationObserver = useMutationObserver({ + callback(records) { + if (!element) { + return; } - if (!isLatestExecution(store, executionId)) { - var _executionInfo$latest; - const executionInfo = getExecutionInfoOfInProgressExecution(state); - if ((executionInfo === null || executionInfo === void 0 ? void 0 : (_executionInfo$latest = executionInfo.latestLoadable) === null || _executionInfo$latest === void 0 ? void 0 : _executionInfo$latest.state) === "loading") { - return executionInfo.latestLoadable.contents; + for (const record of records) { + const { + type, + target + } = record; + if (type === "childList" && target instanceof HTMLElement && target.contains(element)) { + measureRect(); + break; } } - const [loadable, depValues] = evaluateSelectorGetter(store, state, executionId, bypassSelectorDepCacheOnReevaluation); - if (isLatestExecution(store, executionId)) { - updateExecutionInfoDepValues(depValues, store, executionId); - } - maybeFreezeLoadableContents(loadable); - if (loadable.state !== "loading") { - setCache(state, depValuesToDepRoute(depValues), loadable); - setDepsInStore(store, state, new Set(depValues.keys()), executionId); - setLoadableInStoreToNotifyDeps(store, loadable, executionId); - } - if (loadable.state === "hasError") { - throw loadable.contents; - } - if (loadable.state === "hasValue") { - return { - __value: loadable.contents, - __key: key2 - }; - } - return loadable.contents; - }).catch((error) => { - if (!selectorIsLive()) { - clearExecutionInfo(store, executionId); - return CANCELED$2; - } - const loadable = loadableWithError$1(error); - maybeFreezeValue(error); - setCache(state, depValuesToDepRoute(existingDeps), loadableWithError$1(error)); - setDepsInStore(store, state, new Set(existingDeps.keys()), executionId); - setLoadableInStoreToNotifyDeps(store, loadable, executionId); - throw error; - }); - } - function setLoadableInStoreToNotifyDeps(store, loadable, executionId) { - if (isLatestExecution(store, executionId)) { - setExecutionInfo(loadable, store); - notifyStoresOfSettledAsync(loadable, executionId); } - } - function setDepsInStore(store, state, deps, executionId) { - var _store$getState, _store$getState$curre, _store$getState2, _store$getState2$next; - if (isLatestExecution(store, executionId) || state.version === ((_store$getState = store.getState()) === null || _store$getState === void 0 ? void 0 : (_store$getState$curre = _store$getState.currentTree) === null || _store$getState$curre === void 0 ? void 0 : _store$getState$curre.version) || state.version === ((_store$getState2 = store.getState()) === null || _store$getState2 === void 0 ? void 0 : (_store$getState2$next = _store$getState2.nextTree) === null || _store$getState2$next === void 0 ? void 0 : _store$getState2$next.version)) { - var _store$getState$nextT, _store$getState3, _store$getState3$next; - saveDependencyMapToStore$1(/* @__PURE__ */ new Map([[key2, deps]]), store, (_store$getState$nextT = (_store$getState3 = store.getState()) === null || _store$getState3 === void 0 ? void 0 : (_store$getState3$next = _store$getState3.nextTree) === null || _store$getState3$next === void 0 ? void 0 : _store$getState3$next.version) !== null && _store$getState$nextT !== void 0 ? _store$getState$nextT : store.getState().currentTree.version); + }); + const resizeObserver = useResizeObserver({ + callback: measureRect + }); + useIsomorphicLayoutEffect(() => { + measureRect(); + if (element) { + resizeObserver == null ? void 0 : resizeObserver.observe(element); + mutationObserver == null ? void 0 : mutationObserver.observe(document.body, { + childList: true, + subtree: true + }); + } else { + resizeObserver == null ? void 0 : resizeObserver.disconnect(); + mutationObserver == null ? void 0 : mutationObserver.disconnect(); } - } - function setNewDepInStore(store, state, deps, newDepKey, executionId) { - deps.add(newDepKey); - setDepsInStore(store, state, deps, executionId); - } - function evaluateSelectorGetter(store, state, executionId, bypassSelectorDepCache = false) { - const endPerfBlock = startPerfBlock$1(key2); - let result; - let resultIsError = false; - let loadable; - const depValues = /* @__PURE__ */ new Map(); - const deps = /* @__PURE__ */ new Set(); - setDepsInStore(store, state, deps, executionId); - function getRecoilValue(recoilValue) { - const { - key: depKey - } = recoilValue; - setNewDepInStore(store, state, deps, depKey, executionId); - const depLoadable = bypassSelectorDepCache ? getNodeLoadable$2(store, state, depKey) : getCachedNodeLoadable(store, state, depKey); - maybeFreezeLoadableContents(depLoadable); - depValues.set(depKey, depLoadable); - if (depLoadable.state === "hasValue") { - return depLoadable.contents; - } - throw depLoadable.contents; + }, [element]); + return rect; + function reducer2(currentRect) { + if (!element) { + return null; } - let gateCallback = false; - const getCallback = (fn2) => { - return (...args) => { - if (!gateCallback) { - throw new Error("getCallback() should only be called asynchronously after the selector is evalutated. It can be used for selectors to return objects with callbacks that can obtain the current Recoil state without a subscription."); - } - const snapshot = cloneSnapshot$2(store); - const cb = fn2({ - snapshot - }); - if (typeof cb !== "function") { - throw new Error("getCallback() expects a function that returns a function."); - } - return cb(...args); - }; - }; - try { - result = get({ - get: getRecoilValue, - getCallback - }); - result = isRecoilValue$3(result) ? getRecoilValue(result) : result; - gateCallback = true; - if (Recoil_isPromise(result)) { - result = wrapPendingPromise(store, result, state, depValues, executionId).finally(endPerfBlock); - } else { - endPerfBlock(); - } - } catch (errorOrDepPromise) { - result = errorOrDepPromise; - if (Recoil_isPromise(result)) { - result = wrapPendingDependencyPromise(store, result, state, depValues, executionId).finally(endPerfBlock); - } else { - resultIsError = true; - endPerfBlock(); - } + if (element.isConnected === false) { + var _ref; + return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null; } - if (resultIsError) { - loadable = loadableWithError$1(result); - } else if (Recoil_isPromise(result)) { - loadable = loadableWithPromise$1(result); - } else { - loadable = loadableWithValue$2(result); + const newRect = measure(element); + if (JSON.stringify(currentRect) === JSON.stringify(newRect)) { + return currentRect; } - maybeFreezeLoadableContents(loadable); - return [loadable, depValues]; + return newRect; } - function getValFromCacheAndUpdatedDownstreamDeps(store, state) { - const depsAfterCacheDone = /* @__PURE__ */ new Set(); - const executionInfo = getExecutionInfo(store); - const cachedVal = cache.get((nodeKey) => { - !(typeof nodeKey === "string") ? true ? Recoil_invariant(false, "Cache nodeKey is type string") : Recoil_invariant(false) : void 0; - const loadable = getCachedNodeLoadable(store, state, nodeKey); - return loadable.contents; - }, { - onNodeVisit: (node) => { - if (node.type === "branch" && node.nodeKey !== key2 && typeof node.nodeKey === "string") { - depsAfterCacheDone.add(node.nodeKey); - } - } - }); - if (cachedVal) { - setDepsInStore(store, state, depsAfterCacheDone, executionInfo.latestExecutionId); +} +function useRectDelta(rect) { + const initialRect = useInitialValue(rect); + return getRectDelta(rect, initialRect); +} +var defaultValue$1 = []; +function useScrollableAncestors(node) { + const previousNode = _2(node); + const ancestors = useLazyMemo((previousValue) => { + if (!node) { + return defaultValue$1; } - return cachedVal; - } - function depValuesToDepRoute(depValues) { - return Array.from(depValues.entries()).map(([key3, valLoadable]) => [key3, valLoadable.contents]); - } - function getValFromRunningNewExecutionAndUpdatedDeps(store, state) { - const newExecutionId = getNewExecutionId(); - const [loadable, newDepValues] = evaluateSelectorGetter(store, state, newExecutionId); - setExecutionInfo(loadable, store, newDepValues, newExecutionId, state); - maybeSetCacheWithLoadable(state, depValuesToDepRoute(newDepValues), loadable); - notifyStoreWhenAsyncSettles(store, loadable, newExecutionId); - return loadable; - } - function getSelectorValAndUpdatedDeps(store, state) { - const cachedVal = getValFromCacheAndUpdatedDownstreamDeps(store, state); - if (cachedVal != null) { - setExecutionInfo(cachedVal, store); - return cachedVal; + if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) { + return previousValue; } - const inProgressExecutionInfo = getExecutionInfoOfInProgressExecution(state); - if (inProgressExecutionInfo) { - const executionInfo = inProgressExecutionInfo; - notifyStoreWhenAsyncSettles(store, Recoil_nullthrows(executionInfo.latestLoadable), Recoil_nullthrows(executionInfo.latestExecutionId)); - return Recoil_nullthrows(executionInfo.latestLoadable); + return getScrollableAncestors(node); + }, [node]); + h2(() => { + previousNode.current = node; + }, [node]); + return ancestors; +} +function useScrollOffsets(elements) { + const [scrollCoordinates, setScrollCoordinates] = p2(null); + const prevElements = _2(elements); + const handleScroll = T2((event) => { + const scrollingElement = getScrollableElement(event.target); + if (!scrollingElement) { + return; } - return getValFromRunningNewExecutionAndUpdatedDeps(store, state); - } - function getExecutionInfoOfInProgressExecution(state) { - var _Array$from$find; - const [, executionInfo] = (_Array$from$find = Array.from(executionInfoMap.entries()).find(([store, executionInfo2]) => { - return executionInfo2.latestLoadable != null && executionInfo2.latestExecutionId != null && !haveAsyncDepsChanged(store, state); - })) !== null && _Array$from$find !== void 0 ? _Array$from$find : []; - return executionInfo; - } - const mapOfCheckedVersions = /* @__PURE__ */ new Map(); - function haveAsyncDepsChanged(store, state) { - var _executionInfo$depVal, _mapOfCheckedVersions; - const executionInfo = getExecutionInfo(store); - const oldDepValues = (_executionInfo$depVal = executionInfo.depValuesDiscoveredSoFarDuringAsyncWork) !== null && _executionInfo$depVal !== void 0 ? _executionInfo$depVal : /* @__PURE__ */ new Map(); - const cachedDepValuesCheckedForThisVersion = Array(((_mapOfCheckedVersions = mapOfCheckedVersions.get(state.version)) !== null && _mapOfCheckedVersions !== void 0 ? _mapOfCheckedVersions : /* @__PURE__ */ new Map()).entries()); - const isCachedVersionSame = mapOfCheckedVersions.has(state.version) && cachedDepValuesCheckedForThisVersion.length === oldDepValues.size && cachedDepValuesCheckedForThisVersion.every(([nodeKey, nodeVal]) => { - return oldDepValues.get(nodeKey) === nodeVal; + setScrollCoordinates((scrollCoordinates2) => { + if (!scrollCoordinates2) { + return null; + } + scrollCoordinates2.set(scrollingElement, getScrollCoordinates(scrollingElement)); + return new Map(scrollCoordinates2); }); - if (oldDepValues == null || state.version === executionInfo.stateVersion || isCachedVersionSame) { - return false; + }, []); + h2(() => { + const previousElements = prevElements.current; + if (elements !== previousElements) { + cleanup(previousElements); + const entries = elements.map((element) => { + const scrollableElement = getScrollableElement(element); + if (scrollableElement) { + scrollableElement.addEventListener("scroll", handleScroll, { + passive: true + }); + return [scrollableElement, getScrollCoordinates(scrollableElement)]; + } + return null; + }).filter((entry) => entry != null); + setScrollCoordinates(entries.length ? new Map(entries) : null); + prevElements.current = elements; } - mapOfCheckedVersions.set(state.version, new Map(oldDepValues)); - return Array.from(oldDepValues).some(([nodeKey, oldVal]) => { - const loadable = getCachedNodeLoadable(store, state, nodeKey); - return loadable.contents !== oldVal.contents; - }); - } - function setExecutionInfo(loadable, store, depValues, newExecutionId, state) { - const executionInfo = getExecutionInfo(store); - if (loadable.state === "loading") { - executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = depValues; - executionInfo.latestExecutionId = newExecutionId; - executionInfo.latestLoadable = loadable; - executionInfo.stateVersion = state === null || state === void 0 ? void 0 : state.version; - } else { - executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = null; - executionInfo.latestExecutionId = null; - executionInfo.latestLoadable = null; - executionInfo.stateVersion = null; + return () => { + cleanup(elements); + cleanup(previousElements); + }; + function cleanup(elements2) { + elements2.forEach((element) => { + const scrollableElement = getScrollableElement(element); + scrollableElement == null ? void 0 : scrollableElement.removeEventListener("scroll", handleScroll); + }); } - } - function maybeSetCacheWithLoadable(state, depRoute, loadable) { - if (loadable.state !== "loading") { - setCache(state, depRoute, loadable); + }, [handleScroll, elements]); + return F(() => { + if (elements.length) { + return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements); } + return defaultCoordinates; + }, [elements, scrollCoordinates]); +} +function useScrollOffsetsDelta(scrollOffsets, dependencies) { + if (dependencies === void 0) { + dependencies = []; } - function updateExecutionInfoDepValues(depValues, store, executionId) { - const executionInfo = getExecutionInfo(store); - if (isLatestExecution(store, executionId)) { - executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = depValues; + const initialScrollOffsets = _2(null); + h2( + () => { + initialScrollOffsets.current = null; + }, + dependencies + ); + h2(() => { + const hasScrollOffsets = scrollOffsets !== defaultCoordinates; + if (hasScrollOffsets && !initialScrollOffsets.current) { + initialScrollOffsets.current = scrollOffsets; } - } - function clearExecutionInfo(store, executionId) { - if (isLatestExecution(store, executionId)) { - executionInfoMap.delete(store); + if (!hasScrollOffsets && initialScrollOffsets.current) { + initialScrollOffsets.current = null; } + }, [scrollOffsets]); + return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates; +} +function useSensorSetup(sensors) { + h2( + () => { + if (!canUseDOM) { + return; + } + const teardownFns = sensors.map((_ref) => { + let { + sensor + } = _ref; + return sensor.setup == null ? void 0 : sensor.setup(); + }); + return () => { + for (const teardown of teardownFns) { + teardown == null ? void 0 : teardown(); + } + }; + }, + sensors.map((_ref2) => { + let { + sensor + } = _ref2; + return sensor; + }) + ); +} +function useSyntheticListeners(listeners, id2) { + return F(() => { + return listeners.reduce((acc, _ref) => { + let { + eventName, + handler + } = _ref; + acc[eventName] = (event) => { + handler(event, id2); + }; + return acc; + }, {}); + }, [listeners, id2]); +} +function useWindowRect(element) { + return F(() => element ? getWindowClientRect(element) : null, [element]); +} +var defaultValue$2 = []; +function useRects(elements, measure) { + if (measure === void 0) { + measure = getClientRect; } - function isLatestExecution(store, executionId) { - const executionInfo = getExecutionInfo(store); - return executionId === executionInfo.latestExecutionId; + const [firstElement] = elements; + const windowRect = useWindowRect(firstElement ? getWindow(firstElement) : null); + const [rects, measureRects] = y2(reducer2, defaultValue$2); + const resizeObserver = useResizeObserver({ + callback: measureRects + }); + if (elements.length > 0 && rects === defaultValue$2) { + measureRects(); } - function maybeFreezeLoadableContents(loadable) { - if (loadable.state !== "loading") { - maybeFreezeValue(loadable.contents); + useIsomorphicLayoutEffect(() => { + if (elements.length) { + elements.forEach((element) => resizeObserver == null ? void 0 : resizeObserver.observe(element)); + } else { + resizeObserver == null ? void 0 : resizeObserver.disconnect(); + measureRects(); } - } - function maybeFreezeValue(val) { - if (true) { - if (Boolean(options.dangerouslyAllowMutability) === false) { - Recoil_deepFreezeValue(val); - } + }, [elements]); + return rects; + function reducer2() { + if (!elements.length) { + return defaultValue$2; } + return elements.map((element) => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element)); } - function setCache(state, cacheRoute, loadable) { - state.atomValues.set(key2, loadable); - cache.set(cacheRoute, loadable); +} +function getMeasurableNode(node) { + if (!node) { + return null; } - function detectCircularDependencies(fn2) { - if (dependencyStack.includes(key2)) { - const message = `Recoil selector has circular dependencies: ${dependencyStack.slice(dependencyStack.indexOf(key2)).join(" \u2192 ")}`; - return loadableWithError$1(new Error(message)); + if (node.children.length > 1) { + return node; + } + const firstChild = node.children[0]; + return isHTMLElement(firstChild) ? firstChild : node; +} +function useDragOverlayMeasuring(_ref) { + let { + measure + } = _ref; + const [rect, setRect] = p2(null); + const handleResize = T2((entries) => { + for (const { + target + } of entries) { + if (isHTMLElement(target)) { + setRect((rect2) => { + const newRect = measure(target); + return rect2 ? { + ...rect2, + width: newRect.width, + height: newRect.height + } : newRect; + }); + break; + } } - dependencyStack.push(key2); - try { - return fn2(); - } finally { - dependencyStack.pop(); + }, [measure]); + const resizeObserver = useResizeObserver({ + callback: handleResize + }); + const handleNodeChange = T2((element) => { + const node = getMeasurableNode(element); + resizeObserver == null ? void 0 : resizeObserver.disconnect(); + if (node) { + resizeObserver == null ? void 0 : resizeObserver.observe(node); } + setRect(node ? measure(node) : null); + }, [measure, resizeObserver]); + const [nodeRef, setRef] = useNodeRef(handleNodeChange); + return F(() => ({ + nodeRef, + rect, + setRef + }), [rect, nodeRef, setRef]); +} +var defaultSensors = [{ + sensor: PointerSensor, + options: {} +}, { + sensor: KeyboardSensor, + options: {} +}]; +var defaultData = { + current: {} +}; +var defaultMeasuringConfiguration = { + draggable: { + measure: getTransformAgnosticClientRect + }, + droppable: { + measure: getTransformAgnosticClientRect, + strategy: MeasuringStrategy.WhileDragging, + frequency: MeasuringFrequency.Optimized + }, + dragOverlay: { + measure: getClientRect } - function selectorPeek(store, state) { - const cacheVal = cache.get((nodeKey) => { - !(typeof nodeKey === "string") ? true ? Recoil_invariant(false, "Cache nodeKey is type string") : Recoil_invariant(false) : void 0; - const peek = peekNodeLoadable$1(store, state, nodeKey); - return peek === null || peek === void 0 ? void 0 : peek.contents; - }); - return cacheVal; - } - function selectorGet(store, state) { - return detectCircularDependencies(() => getSelectorValAndUpdatedDeps(store, state)); +}; +var DroppableContainersMap = class extends Map { + get(id2) { + var _super$get; + return id2 != null ? (_super$get = super.get(id2)) != null ? _super$get : void 0 : void 0; } - function invalidateSelector(state) { - state.atomValues.delete(key2); + toArray() { + return Array.from(this.values()); } - if (set != null) { - const selectorSet = (store, state, newValue) => { - let syncSelectorSetFinished = false; - const writes = /* @__PURE__ */ new Map(); - function getRecoilValue({ - key: key3 - }) { - if (syncSelectorSetFinished) { - throw new Error("Recoil: Async selector sets are not currently supported."); - } - const loadable = getCachedNodeLoadable(store, state, key3); - maybeFreezeLoadableContents(loadable); - if (loadable.state === "hasValue") { - return loadable.contents; - } else if (loadable.state === "loading") { - throw new RecoilValueNotReady$2(key3); - } else { - throw loadable.contents; - } - } - function setRecoilState(recoilState, valueOrUpdater) { - if (syncSelectorSetFinished) { - throw new Error("Recoil: Async selector sets are not currently supported."); - } - const newValue2 = typeof valueOrUpdater === "function" ? valueOrUpdater(getRecoilValue(recoilState)) : valueOrUpdater; - const upstreamWrites = setNodeValue$3(store, state, recoilState.key, newValue2); - upstreamWrites.forEach((v3, k5) => writes.set(k5, v3)); - } - function resetRecoilState(recoilState) { - setRecoilState(recoilState, DEFAULT_VALUE$4); - } - const ret = set({ - set: setRecoilState, - get: getRecoilValue, - reset: resetRecoilState - }, newValue); - if (ret !== void 0) { - throw Recoil_isPromise(ret) ? new Error("Recoil: Async selector sets are not currently supported.") : new Error("Recoil: selector set should be a void function."); - } - syncSelectorSetFinished = true; - return writes; - }; - return registerNode$1({ - key: key2, - nodeType: "selector", - peek: selectorPeek, - get: selectorGet, - set: selectorSet, - init: selectorInit, - invalidate: invalidateSelector, - shouldDeleteConfigOnRelease: selectorShouldDeleteConfigOnRelease, - dangerouslyAllowMutability: options.dangerouslyAllowMutability, - shouldRestoreFromSnapshots: false, - retainedBy - }); - } else { - return registerNode$1({ - key: key2, - nodeType: "selector", - peek: selectorPeek, - get: selectorGet, - init: selectorInit, - invalidate: invalidateSelector, - shouldDeleteConfigOnRelease: selectorShouldDeleteConfigOnRelease, - dangerouslyAllowMutability: options.dangerouslyAllowMutability, - shouldRestoreFromSnapshots: false, - retainedBy + getEnabled() { + return this.toArray().filter((_ref) => { + let { + disabled + } = _ref; + return !disabled; }); } -} -var Recoil_selector = selector; -var { - loadableWithError: loadableWithError$2, - loadableWithPromise: loadableWithPromise$2, - loadableWithValue: loadableWithValue$3 -} = Recoil_Loadable; -var { - DEFAULT_VALUE: DEFAULT_VALUE$5, - DefaultValue: DefaultValue$2, - getConfigDeletionHandler: getConfigDeletionHandler$2, - registerNode: registerNode$2, - setConfigDeletionHandler: setConfigDeletionHandler$1 -} = Recoil_Node; -var { - isRecoilValue: isRecoilValue$4 -} = Recoil_RecoilValue$1; -var { - markRecoilValueModified: markRecoilValueModified$1, - setRecoilValue: setRecoilValue$3, - setRecoilValueLoadable: setRecoilValueLoadable$3 -} = Recoil_RecoilValueInterface; -var { - retainedByOptionWithDefault: retainedByOptionWithDefault$2 -} = Recoil_Retention; -function baseAtom(options) { - const { - key: key2, - persistence_UNSTABLE: persistence - } = options; - const retainedBy = retainedByOptionWithDefault$2(options.retainedBy_UNSTABLE); - let liveStoresCount = 0; - let defaultLoadable = Recoil_isPromise(options.default) ? loadableWithPromise$2(options.default.then((value) => { - defaultLoadable = loadableWithValue$3(value); - const promiseInfo = { - __key: key2, - __value: value - }; - return promiseInfo; - }).catch((error) => { - defaultLoadable = loadableWithError$2(error); - throw error; - })) : loadableWithValue$3(options.default); - let cachedAnswerForUnvalidatedValue = void 0; - const cleanupEffectsByStore = /* @__PURE__ */ new Map(); - function wrapPendingPromise(store, promise) { - const wrappedPromise = promise.then((value) => { - var _store$getState$nextT, _state$atomValues$get; - const state = (_store$getState$nextT = store.getState().nextTree) !== null && _store$getState$nextT !== void 0 ? _store$getState$nextT : store.getState().currentTree; - if (((_state$atomValues$get = state.atomValues.get(key2)) === null || _state$atomValues$get === void 0 ? void 0 : _state$atomValues$get.contents) === wrappedPromise) { - setRecoilValue$3(store, node, value); + getNodeFor(id2) { + var _this$get$node$curren, _this$get; + return (_this$get$node$curren = (_this$get = this.get(id2)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : void 0; + } +}; +var defaultPublicContext = { + activatorEvent: null, + active: null, + activeNode: null, + activeNodeRect: null, + collisions: null, + containerNodeRect: null, + draggableNodes: /* @__PURE__ */ new Map(), + droppableRects: /* @__PURE__ */ new Map(), + droppableContainers: /* @__PURE__ */ new DroppableContainersMap(), + over: null, + dragOverlay: { + nodeRef: { + current: null + }, + rect: null, + setRef: noop + }, + scrollableAncestors: [], + scrollableAncestorRects: [], + measuringConfiguration: defaultMeasuringConfiguration, + measureDroppableContainers: noop, + windowRect: null, + measuringScheduled: false +}; +var defaultInternalContext = { + activatorEvent: null, + activators: [], + active: null, + activeNodeRect: null, + ariaDescribedById: { + draggable: "" + }, + dispatch: noop, + draggableNodes: /* @__PURE__ */ new Map(), + over: null, + measureDroppableContainers: noop +}; +var InternalContext = /* @__PURE__ */ B(defaultInternalContext); +var PublicContext = /* @__PURE__ */ B(defaultPublicContext); +function getInitialState() { + return { + draggable: { + active: null, + initialCoordinates: { + x: 0, + y: 0 + }, + nodes: /* @__PURE__ */ new Map(), + translate: { + x: 0, + y: 0 } + }, + droppable: { + containers: new DroppableContainersMap() + } + }; +} +function reducer(state, action) { + switch (action.type) { + case Action.DragStart: return { - __key: key2, - __value: value + ...state, + draggable: { + ...state.draggable, + initialCoordinates: action.initialCoordinates, + active: action.active + } }; - }).catch((error) => { - var _store$getState$nextT2, _state$atomValues$get2; - const state = (_store$getState$nextT2 = store.getState().nextTree) !== null && _store$getState$nextT2 !== void 0 ? _store$getState$nextT2 : store.getState().currentTree; - if (((_state$atomValues$get2 = state.atomValues.get(key2)) === null || _state$atomValues$get2 === void 0 ? void 0 : _state$atomValues$get2.contents) === wrappedPromise) { - setRecoilValueLoadable$3(store, node, loadableWithError$2(error)); + case Action.DragMove: + if (!state.draggable.active) { + return state; } - throw error; - }); - return wrappedPromise; - } - function initAtom(store, initState, trigger) { - liveStoresCount++; - const alreadyKnown = store.getState().knownAtoms.has(key2); - store.getState().knownAtoms.add(key2); - if (defaultLoadable.state === "loading") { - const notifyDefaultSubscribers = () => { - var _store$getState$nextT3; - const state = (_store$getState$nextT3 = store.getState().nextTree) !== null && _store$getState$nextT3 !== void 0 ? _store$getState$nextT3 : store.getState().currentTree; - if (!state.atomValues.has(key2)) { - markRecoilValueModified$1(store, node); + return { + ...state, + draggable: { + ...state.draggable, + translate: { + x: action.coordinates.x - state.draggable.initialCoordinates.x, + y: action.coordinates.y - state.draggable.initialCoordinates.y + } } }; - defaultLoadable.contents.then(notifyDefaultSubscribers).catch(notifyDefaultSubscribers); - } - let initValue = DEFAULT_VALUE$5; - let pendingSetSelf = null; - if (options.effects_UNSTABLE != null && !alreadyKnown) { - let duringInit = true; - const setSelf = (effect) => (valueOrUpdater) => { - if (duringInit) { - const currentValue = initValue instanceof DefaultValue$2 || Recoil_isPromise(initValue) ? defaultLoadable.state === "hasValue" ? defaultLoadable.contents : DEFAULT_VALUE$5 : initValue; - initValue = typeof valueOrUpdater === "function" ? valueOrUpdater(currentValue) : valueOrUpdater; - if (Recoil_isPromise(initValue)) { - initValue = initValue.then((value) => { - pendingSetSelf = { - effect, - value - }; - return value; - }); - } - } else { - if (Recoil_isPromise(valueOrUpdater)) { - throw new Error("Setting atoms to async values is not implemented."); - } - if (typeof valueOrUpdater !== "function") { - pendingSetSelf = { - effect, - value: valueOrUpdater - }; + case Action.DragEnd: + case Action.DragCancel: + return { + ...state, + draggable: { + ...state.draggable, + active: null, + initialCoordinates: { + x: 0, + y: 0 + }, + translate: { + x: 0, + y: 0 } - setRecoilValue$3(store, node, typeof valueOrUpdater === "function" ? (currentValue) => { - const newValue = valueOrUpdater(currentValue); - pendingSetSelf = { - effect, - value: newValue - }; - return newValue; - } : valueOrUpdater); } }; - const resetSelf = (effect) => () => setSelf(effect)(DEFAULT_VALUE$5); - const onSet = (effect) => (handler) => { - store.subscribeToTransactions((currentStore) => { - var _currentTree$atomValu; - let { - currentTree, - previousTree - } = currentStore.getState(); - if (!previousTree) { - Recoil_recoverableViolation("Transaction subscribers notified without a next tree being present -- this is a bug in Recoil"); - previousTree = currentTree; - } - const newLoadable = (_currentTree$atomValu = currentTree.atomValues.get(key2)) !== null && _currentTree$atomValu !== void 0 ? _currentTree$atomValu : defaultLoadable; - if (newLoadable.state === "hasValue") { - var _previousTree$atomVal, _pendingSetSelf, _pendingSetSelf2, _pendingSetSelf3; - const newValue = newLoadable.contents; - const oldLoadable = (_previousTree$atomVal = previousTree.atomValues.get(key2)) !== null && _previousTree$atomVal !== void 0 ? _previousTree$atomVal : defaultLoadable; - const oldValue = oldLoadable.state === "hasValue" ? oldLoadable.contents : DEFAULT_VALUE$5; - if (((_pendingSetSelf = pendingSetSelf) === null || _pendingSetSelf === void 0 ? void 0 : _pendingSetSelf.effect) !== effect || ((_pendingSetSelf2 = pendingSetSelf) === null || _pendingSetSelf2 === void 0 ? void 0 : _pendingSetSelf2.value) !== newValue) { - handler(newValue, oldValue); - } else if (((_pendingSetSelf3 = pendingSetSelf) === null || _pendingSetSelf3 === void 0 ? void 0 : _pendingSetSelf3.effect) === effect) { - pendingSetSelf = null; - } - } - }, key2); + case Action.RegisterDroppable: { + const { + element + } = action; + const { + id: id2 + } = element; + const containers = new DroppableContainersMap(state.droppable.containers); + containers.set(id2, element); + return { + ...state, + droppable: { + ...state.droppable, + containers + } }; - for (const effect of (_options$effects_UNST = options.effects_UNSTABLE) !== null && _options$effects_UNST !== void 0 ? _options$effects_UNST : []) { - var _options$effects_UNST; - const cleanup = effect({ - node, - trigger, - setSelf: setSelf(effect), - resetSelf: resetSelf(effect), - onSet: onSet(effect) - }); - if (cleanup != null) { - var _cleanupEffectsByStor; - cleanupEffectsByStore.set(store, [...(_cleanupEffectsByStor = cleanupEffectsByStore.get(store)) !== null && _cleanupEffectsByStor !== void 0 ? _cleanupEffectsByStor : [], cleanup]); + } + case Action.SetDroppableDisabled: { + const { + id: id2, + key: key2, + disabled + } = action; + const element = state.droppable.containers.get(id2); + if (!element || key2 !== element.key) { + return state; + } + const containers = new DroppableContainersMap(state.droppable.containers); + containers.set(id2, { + ...element, + disabled + }); + return { + ...state, + droppable: { + ...state.droppable, + containers } + }; + } + case Action.UnregisterDroppable: { + const { + id: id2, + key: key2 + } = action; + const element = state.droppable.containers.get(id2); + if (!element || key2 !== element.key) { + return state; } - duringInit = false; + const containers = new DroppableContainersMap(state.droppable.containers); + containers.delete(id2); + return { + ...state, + droppable: { + ...state.droppable, + containers + } + }; } - if (!(initValue instanceof DefaultValue$2)) { - var _store$getState$nextT4; - const initLoadable = Recoil_isPromise(initValue) ? loadableWithPromise$2(wrapPendingPromise(store, initValue)) : loadableWithValue$3(initValue); - initState.atomValues.set(key2, initLoadable); - (_store$getState$nextT4 = store.getState().nextTree) === null || _store$getState$nextT4 === void 0 ? void 0 : _store$getState$nextT4.atomValues.set(key2, initLoadable); + default: { + return state; } - return () => { - var _cleanupEffectsByStor2; - liveStoresCount--; - (_cleanupEffectsByStor2 = cleanupEffectsByStore.get(store)) === null || _cleanupEffectsByStor2 === void 0 ? void 0 : _cleanupEffectsByStor2.forEach((cleanup) => cleanup()); - cleanupEffectsByStore.delete(store); - store.getState().knownAtoms.delete(key2); - }; - } - function peekAtom(_store, state) { - var _ref, _state$atomValues$get3, _cachedAnswerForUnval; - return (_ref = (_state$atomValues$get3 = state.atomValues.get(key2)) !== null && _state$atomValues$get3 !== void 0 ? _state$atomValues$get3 : (_cachedAnswerForUnval = cachedAnswerForUnvalidatedValue) === null || _cachedAnswerForUnval === void 0 ? void 0 : _cachedAnswerForUnval[1]) !== null && _ref !== void 0 ? _ref : defaultLoadable; } - function getAtom(_store, state) { - if (state.atomValues.has(key2)) { - return Recoil_nullthrows(state.atomValues.get(key2)); - } else if (state.nonvalidatedAtoms.has(key2)) { - if (cachedAnswerForUnvalidatedValue != null) { - return cachedAnswerForUnvalidatedValue; +} +function RestoreFocus(_ref) { + let { + disabled + } = _ref; + const { + active, + activatorEvent, + draggableNodes + } = q2(InternalContext); + const previousActivatorEvent = usePrevious(activatorEvent); + const previousActiveId = usePrevious(active == null ? void 0 : active.id); + h2(() => { + if (disabled) { + return; + } + if (!activatorEvent && previousActivatorEvent && previousActiveId != null) { + if (!isKeyboardEvent(previousActivatorEvent)) { + return; } - if (persistence == null) { - Recoil_expectationViolation(`Tried to restore a persisted value for atom ${key2} but it has no persistence settings.`); - return defaultLoadable; + if (document.activeElement === previousActivatorEvent.target) { + return; } - const nonvalidatedValue = state.nonvalidatedAtoms.get(key2); - const validatorResult = persistence.validator(nonvalidatedValue, DEFAULT_VALUE$5); - const validatedValueLoadable = validatorResult instanceof DefaultValue$2 ? defaultLoadable : loadableWithValue$3(validatorResult); - cachedAnswerForUnvalidatedValue = validatedValueLoadable; - return cachedAnswerForUnvalidatedValue; - } else { - return defaultLoadable; - } - } - function invalidateAtom() { - cachedAnswerForUnvalidatedValue = void 0; - } - function setAtom(_store, state, newValue) { - if (state.atomValues.has(key2)) { - const existing = Recoil_nullthrows(state.atomValues.get(key2)); - if (existing.state === "hasValue" && newValue === existing.contents) { - return /* @__PURE__ */ new Map(); + const draggableNode = draggableNodes.get(previousActiveId); + if (!draggableNode) { + return; } - } else if (!state.nonvalidatedAtoms.has(key2) && newValue instanceof DefaultValue$2) { - return /* @__PURE__ */ new Map(); - } - if (true) { - if (options.dangerouslyAllowMutability !== true) { - Recoil_deepFreezeValue(newValue); + const { + activatorNode, + node + } = draggableNode; + if (!activatorNode.current && !node.current) { + return; } + requestAnimationFrame(() => { + for (const element of [activatorNode.current, node.current]) { + if (!element) { + continue; + } + const focusableNode = findFirstFocusableNode(element); + if (focusableNode) { + focusableNode.focus(); + break; + } + } + }); } - cachedAnswerForUnvalidatedValue = void 0; - return (/* @__PURE__ */ new Map()).set(key2, loadableWithValue$3(newValue)); - } - function shouldDeleteConfigOnReleaseAtom() { - return getConfigDeletionHandler$2(key2) !== void 0 && liveStoresCount <= 0; - } - const node = registerNode$2({ - key: key2, - nodeType: "atom", - peek: peekAtom, - get: getAtom, - set: setAtom, - init: initAtom, - invalidate: invalidateAtom, - shouldDeleteConfigOnRelease: shouldDeleteConfigOnReleaseAtom, - dangerouslyAllowMutability: options.dangerouslyAllowMutability, - persistence_UNSTABLE: options.persistence_UNSTABLE ? { - type: options.persistence_UNSTABLE.type, - backButton: options.persistence_UNSTABLE.backButton - } : void 0, - shouldRestoreFromSnapshots: true, - retainedBy - }); - return node; + }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]); + return null; } -function atom(options) { - const { - default: optionsDefault, - ...restOptions - } = options; - if (isRecoilValue$4(optionsDefault)) { - return atomWithFallback({ - ...restOptions, - default: optionsDefault - }); - } else { - return baseAtom({ - ...restOptions, - default: optionsDefault +function applyModifiers(modifiers, _ref) { + let { + transform, + ...args + } = _ref; + return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => { + return modifier({ + transform: accumulator, + ...args }); - } -} -function atomWithFallback(options) { - const base = atom({ - ...options, - default: DEFAULT_VALUE$5, - persistence_UNSTABLE: options.persistence_UNSTABLE === void 0 ? void 0 : { - ...options.persistence_UNSTABLE, - validator: (storedValue) => storedValue instanceof DefaultValue$2 ? storedValue : Recoil_nullthrows(options.persistence_UNSTABLE).validator(storedValue, DEFAULT_VALUE$5) - }, - effects_UNSTABLE: options.effects_UNSTABLE - }); - const sel = Recoil_selector({ - key: `${options.key}__withFallback`, - get: ({ - get - }) => { - const baseValue = get(base); - return baseValue instanceof DefaultValue$2 ? options.default : baseValue; - }, - set: ({ - set - }, newValue) => set(base, newValue), - dangerouslyAllowMutability: options.dangerouslyAllowMutability - }); - setConfigDeletionHandler$1(sel.key, getConfigDeletionHandler$2(options.key)); - return sel; -} -var Recoil_atom = atom; -var MapCache = class { - constructor(options) { - var _options$mapKey; - _defineProperty(this, "_map", void 0); - _defineProperty(this, "_keyMapper", void 0); - this._map = /* @__PURE__ */ new Map(); - this._keyMapper = (_options$mapKey = options === null || options === void 0 ? void 0 : options.mapKey) !== null && _options$mapKey !== void 0 ? _options$mapKey : (v3) => v3; - } - size() { - return this._map.size; - } - has(key2) { - return this._map.has(this._keyMapper(key2)); - } - get(key2) { - return this._map.get(this._keyMapper(key2)); - } - set(key2, val) { - this._map.set(this._keyMapper(key2), val); - } - delete(key2) { - this._map.delete(this._keyMapper(key2)); - } - clear() { - this._map.clear(); - } -}; -var Recoil_MapCache = { - MapCache -}; -var Recoil_MapCache_1 = Recoil_MapCache.MapCache; -var Recoil_MapCache$1 = /* @__PURE__ */ Object.freeze({ - __proto__: null, - MapCache: Recoil_MapCache_1 -}); -var { - LRUCache: LRUCache$2 -} = Recoil_LRUCache$1; -var { - MapCache: MapCache$1 -} = Recoil_MapCache$1; -var defaultPolicy$1 = { - equality: "reference", - eviction: "none", - maxSize: Infinity -}; -function cacheFromPolicy({ - equality = defaultPolicy$1.equality, - eviction = defaultPolicy$1.eviction, - maxSize = defaultPolicy$1.maxSize -} = defaultPolicy$1) { - const valueMapper = getValueMapper$1(equality); - const cache = getCache(eviction, maxSize, valueMapper); - return cache; -} -function getValueMapper$1(equality) { - switch (equality) { - case "reference": - return (val) => val; - case "value": - return (val) => Recoil_stableStringify(val); - } - throw new Error(`Unrecognized equality policy ${equality}`); + }, transform) : transform; } -function getCache(eviction, maxSize, mapKey) { - switch (eviction) { - case "keep-all": - return new MapCache$1({ - mapKey - }); - case "lru": - return new LRUCache$2({ - mapKey, - maxSize: Recoil_nullthrows(maxSize) - }); - case "most-recent": - return new LRUCache$2({ - mapKey, - maxSize: 1 - }); - } - throw new Error(`Unrecognized eviction policy ${eviction}`); +function useMeasuringConfiguration(config) { + return F( + () => ({ + draggable: { + ...defaultMeasuringConfiguration.draggable, + ...config == null ? void 0 : config.draggable + }, + droppable: { + ...defaultMeasuringConfiguration.droppable, + ...config == null ? void 0 : config.droppable + }, + dragOverlay: { + ...defaultMeasuringConfiguration.dragOverlay, + ...config == null ? void 0 : config.dragOverlay + } + }), + [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay] + ); } -var Recoil_cacheFromPolicy = cacheFromPolicy; -var { - setConfigDeletionHandler: setConfigDeletionHandler$2 -} = Recoil_Node; -function atomFamily(options) { - var _options$cachePolicyF, _options$cachePolicyF2; - const atomCache = Recoil_cacheFromPolicy({ - equality: (_options$cachePolicyF = (_options$cachePolicyF2 = options.cachePolicyForParams_UNSTABLE) === null || _options$cachePolicyF2 === void 0 ? void 0 : _options$cachePolicyF2.equality) !== null && _options$cachePolicyF !== void 0 ? _options$cachePolicyF : "value", - eviction: "keep-all" - }); - return (params) => { - var _stableStringify; - const cachedAtom = atomCache.get(params); - if (cachedAtom != null) { - return cachedAtom; +function useLayoutShiftScrollCompensation(_ref) { + let { + activeNode, + measure, + initialRect, + config = true + } = _ref; + const initialized = _2(false); + const { + x: x5, + y: y5 + } = typeof config === "boolean" ? { + x: config, + y: config + } : config; + useIsomorphicLayoutEffect(() => { + const disabled = !x5 && !y5; + if (disabled || !activeNode) { + initialized.current = false; + return; } - const { - cachePolicyForParams_UNSTABLE, - ...atomOptions - } = options; - const newAtom = Recoil_atom({ - ...atomOptions, - key: `${options.key}__${(_stableStringify = Recoil_stableStringify(params)) !== null && _stableStringify !== void 0 ? _stableStringify : "void"}`, - default: typeof options.default === "function" ? options.default(params) : options.default, - retainedBy_UNSTABLE: typeof options.retainedBy_UNSTABLE === "function" ? options.retainedBy_UNSTABLE(params) : options.retainedBy_UNSTABLE, - effects_UNSTABLE: typeof options.effects_UNSTABLE === "function" ? options.effects_UNSTABLE(params) : options.effects_UNSTABLE - }); - atomCache.set(params, newAtom); - setConfigDeletionHandler$2(newAtom.key, () => { - atomCache.delete(params); - }); - return newAtom; - }; -} -var Recoil_atomFamily = atomFamily; -var { - setConfigDeletionHandler: setConfigDeletionHandler$3 -} = Recoil_Node; -var nextIndex = 0; -function selectorFamily(options) { - var _options$cachePolicyF, _options$cachePolicyF2; - const selectorCache = Recoil_cacheFromPolicy({ - equality: (_options$cachePolicyF = (_options$cachePolicyF2 = options.cachePolicyForParams_UNSTABLE) === null || _options$cachePolicyF2 === void 0 ? void 0 : _options$cachePolicyF2.equality) !== null && _options$cachePolicyF !== void 0 ? _options$cachePolicyF : "value", - eviction: "keep-all" - }); - return (params) => { - var _stableStringify; - const cachedSelector = selectorCache.get(params); - if (cachedSelector != null) { - return cachedSelector; + if (initialized.current || !initialRect) { + return; } - const myKey = `${options.key}__selectorFamily/${(_stableStringify = Recoil_stableStringify(params, { - allowFunctions: true - })) !== null && _stableStringify !== void 0 ? _stableStringify : "void"}/${nextIndex++}`; - const myGet = (callbacks) => options.get(params)(callbacks); - const myCachePolicy = options.cachePolicy_UNSTABLE; - const retainedBy = typeof options.retainedBy_UNSTABLE === "function" ? options.retainedBy_UNSTABLE(params) : options.retainedBy_UNSTABLE; - let newSelector; - if (options.set != null) { - const set = options.set; - const mySet = (callbacks, newValue) => set(params)(callbacks, newValue); - newSelector = Recoil_selector({ - key: myKey, - get: myGet, - set: mySet, - cachePolicy_UNSTABLE: myCachePolicy, - dangerouslyAllowMutability: options.dangerouslyAllowMutability, - retainedBy_UNSTABLE: retainedBy - }); - } else { - newSelector = Recoil_selector({ - key: myKey, - get: myGet, - cachePolicy_UNSTABLE: myCachePolicy, - dangerouslyAllowMutability: options.dangerouslyAllowMutability, - retainedBy_UNSTABLE: retainedBy - }); + const node = activeNode == null ? void 0 : activeNode.node.current; + if (!node || node.isConnected === false) { + return; } - selectorCache.set(params, newSelector); - setConfigDeletionHandler$3(newSelector.key, () => { - selectorCache.delete(params); - }); - return newSelector; - }; -} -var Recoil_selectorFamily = selectorFamily; -var constantSelector = Recoil_selectorFamily({ - key: "__constant", - get: (constant) => () => constant, - cachePolicyForParams_UNSTABLE: { - equality: "reference" - } -}); -function constSelector(constant) { - return constantSelector(constant); -} -var Recoil_constSelector = constSelector; -var throwingSelector = Recoil_selectorFamily({ - key: "__error", - get: (message) => () => { - throw new Error(message); - }, - cachePolicyForParams_UNSTABLE: { - equality: "reference" - } -}); -function errorSelector(message) { - return throwingSelector(message); -} -var Recoil_errorSelector = errorSelector; -function readOnlySelector(atom2) { - return atom2; -} -var Recoil_readOnlySelector = readOnlySelector; -var { - loadableWithError: loadableWithError$3, - loadableWithPromise: loadableWithPromise$3, - loadableWithValue: loadableWithValue$4 -} = Recoil_Loadable; -function concurrentRequests(getRecoilValue, deps) { - const results = Array(deps.length).fill(void 0); - const exceptions = Array(deps.length).fill(void 0); - for (const [i4, dep] of deps.entries()) { - try { - results[i4] = getRecoilValue(dep); - } catch (e4) { - exceptions[i4] = e4; + const rect = measure(node); + const rectDelta = getRectDelta(rect, initialRect); + if (!x5) { + rectDelta.x = 0; } - } - return [results, exceptions]; -} -function isError(exp) { - return exp != null && !Recoil_isPromise(exp); -} -function unwrapDependencies(dependencies) { - return Array.isArray(dependencies) ? dependencies : Object.getOwnPropertyNames(dependencies).map((key2) => dependencies[key2]); -} -function getValueFromLoadablePromiseResult(result) { - if (result != null && typeof result === "object" && result.hasOwnProperty("__value")) { - return result.__value; - } - return result; -} -function wrapResults(dependencies, results) { - return Array.isArray(dependencies) ? results : Object.getOwnPropertyNames(dependencies).reduce((out, key2, idx) => ({ - ...out, - [key2]: results[idx] - }), {}); -} -function wrapLoadables(dependencies, results, exceptions) { - const output = exceptions.map((exception, idx) => exception == null ? loadableWithValue$4(results[idx]) : Recoil_isPromise(exception) ? loadableWithPromise$3(exception) : loadableWithError$3(exception)); - return wrapResults(dependencies, output); -} -function combineAsyncResultsWithSyncResults(syncResults, asyncResults) { - return asyncResults.map((result, idx) => result === void 0 ? syncResults[idx] : result); + if (!y5) { + rectDelta.y = 0; + } + initialized.current = true; + if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) { + const firstScrollableAncestor = getFirstScrollableAncestor(node); + if (firstScrollableAncestor) { + firstScrollableAncestor.scrollBy({ + top: rectDelta.y, + left: rectDelta.x + }); + } + } + }, [activeNode, x5, y5, initialRect, measure]); } -var waitForNone = Recoil_selectorFamily({ - key: "__waitForNone", - get: (dependencies) => ({ - get - }) => { - const deps = unwrapDependencies(dependencies); - const [results, exceptions] = concurrentRequests(get, deps); - return wrapLoadables(dependencies, results, exceptions); - }, - dangerouslyAllowMutability: true +var ActiveDraggableContext = /* @__PURE__ */ B({ + ...defaultCoordinates, + scaleX: 1, + scaleY: 1 }); -var waitForAny = Recoil_selectorFamily({ - key: "__waitForAny", - get: (dependencies) => ({ - get - }) => { - const deps = unwrapDependencies(dependencies); - const [results, exceptions] = concurrentRequests(get, deps); - if (exceptions.some((exp) => !Recoil_isPromise(exp))) { - return wrapLoadables(dependencies, results, exceptions); +var Status; +(function(Status2) { + Status2[Status2["Uninitialized"] = 0] = "Uninitialized"; + Status2[Status2["Initializing"] = 1] = "Initializing"; + Status2[Status2["Initialized"] = 2] = "Initialized"; +})(Status || (Status = {})); +var DndContext = /* @__PURE__ */ R(function DndContext2(_ref) { + var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect; + let { + id: id2, + accessibility, + autoScroll = true, + children, + sensors = defaultSensors, + collisionDetection = rectIntersection, + measuring, + modifiers, + ...props2 + } = _ref; + const store = y2(reducer, void 0, getInitialState); + const [state, dispatch] = store; + const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider(); + const [status, setStatus] = p2(Status.Uninitialized); + const isInitialized = status === Status.Initialized; + const { + draggable: { + active: activeId, + nodes: draggableNodes, + translate + }, + droppable: { + containers: droppableContainers } - return new Promise((resolve) => { - for (const [i4, exp] of exceptions.entries()) { - if (Recoil_isPromise(exp)) { - exp.then((result) => { - results[i4] = getValueFromLoadablePromiseResult(result); - exceptions[i4] = void 0; - resolve(wrapLoadables(dependencies, results, exceptions)); - }).catch((error) => { - exceptions[i4] = error; - resolve(wrapLoadables(dependencies, results, exceptions)); + } = state; + const node = activeId ? draggableNodes.get(activeId) : null; + const activeRects = _2({ + initial: null, + translated: null + }); + const active = F(() => { + var _node$data; + return activeId != null ? { + id: activeId, + data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData, + rect: activeRects + } : null; + }, [activeId, node]); + const activeRef = _2(null); + const [activeSensor, setActiveSensor] = p2(null); + const [activatorEvent, setActivatorEvent] = p2(null); + const latestProps = useLatestValue(props2, Object.values(props2)); + const draggableDescribedById = useUniqueId("DndDescribedBy", id2); + const enabledDroppableContainers = F(() => droppableContainers.getEnabled(), [droppableContainers]); + const measuringConfiguration = useMeasuringConfiguration(measuring); + const { + droppableRects, + measureDroppableContainers, + measuringScheduled + } = useDroppableMeasuring(enabledDroppableContainers, { + dragging: isInitialized, + dependencies: [translate.x, translate.y], + config: measuringConfiguration.droppable + }); + const activeNode = useCachedNode(draggableNodes, activeId); + const activationCoordinates = F(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]); + const autoScrollOptions = getAutoScrollerOptions(); + const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure); + useLayoutShiftScrollCompensation({ + activeNode: activeId ? draggableNodes.get(activeId) : null, + config: autoScrollOptions.layoutShiftCompensation, + initialRect: initialActiveNodeRect, + measure: measuringConfiguration.draggable.measure + }); + const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect); + const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null); + const sensorContext = _2({ + activatorEvent: null, + active: null, + activeNode, + collisionRect: null, + collisions: null, + droppableRects, + draggableNodes, + draggingNode: null, + draggingNodeRect: null, + droppableContainers, + over: null, + scrollableAncestors: [], + scrollAdjustedTranslate: null + }); + const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id); + const dragOverlay = useDragOverlayMeasuring({ + measure: measuringConfiguration.dragOverlay.measure + }); + const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode; + const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null; + const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); + const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); + const windowRect = useWindowRect(draggingNode ? getWindow(draggingNode) : null); + const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null); + const scrollableAncestorRects = useRects(scrollableAncestors); + const modifiedTranslate = applyModifiers(modifiers, { + transform: { + x: translate.x - nodeRectDelta.x, + y: translate.y - nodeRectDelta.y, + scaleX: 1, + scaleY: 1 + }, + activatorEvent, + active, + activeNodeRect, + containerNodeRect, + draggingNodeRect, + over: sensorContext.current.over, + overlayNodeRect: dragOverlay.rect, + scrollableAncestors, + scrollableAncestorRects, + windowRect + }); + const pointerCoordinates = activationCoordinates ? add(activationCoordinates, translate) : null; + const scrollOffsets = useScrollOffsets(scrollableAncestors); + const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); + const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]); + const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment); + const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null; + const collisions = active && collisionRect ? collisionDetection({ + active, + collisionRect, + droppableRects, + droppableContainers: enabledDroppableContainers, + pointerCoordinates + }) : null; + const overId = getFirstCollision(collisions, "id"); + const [over, setOver] = p2(null); + const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta); + const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect); + const instantiateSensor = T2( + (event, _ref2) => { + let { + sensor: Sensor, + options + } = _ref2; + if (activeRef.current == null) { + return; + } + const activeNode2 = draggableNodes.get(activeRef.current); + if (!activeNode2) { + return; + } + const activatorEvent2 = event.nativeEvent; + const sensorInstance = new Sensor({ + active: activeRef.current, + activeNode: activeNode2, + event: activatorEvent2, + options, + context: sensorContext, + onStart(initialCoordinates) { + const id3 = activeRef.current; + if (id3 == null) { + return; + } + const draggableNode = draggableNodes.get(id3); + if (!draggableNode) { + return; + } + const { + onDragStart + } = latestProps.current; + const event2 = { + active: { + id: id3, + data: draggableNode.data, + rect: activeRects + } + }; + sn(() => { + onDragStart == null ? void 0 : onDragStart(event2); + setStatus(Status.Initializing); + dispatch({ + type: Action.DragStart, + initialCoordinates, + active: id3 + }); + dispatchMonitorEvent({ + type: "onDragStart", + event: event2 + }); }); - } + }, + onMove(coordinates) { + dispatch({ + type: Action.DragMove, + coordinates + }); + }, + onEnd: createHandler(Action.DragEnd), + onCancel: createHandler(Action.DragCancel) + }); + sn(() => { + setActiveSensor(sensorInstance); + setActivatorEvent(event.nativeEvent); + }); + function createHandler(type) { + return async function handler() { + const { + active: active2, + collisions: collisions2, + over: over2, + scrollAdjustedTranslate: scrollAdjustedTranslate2 + } = sensorContext.current; + let event2 = null; + if (active2 && scrollAdjustedTranslate2) { + const { + cancelDrop + } = latestProps.current; + event2 = { + activatorEvent: activatorEvent2, + active: active2, + collisions: collisions2, + delta: scrollAdjustedTranslate2, + over: over2 + }; + if (type === Action.DragEnd && typeof cancelDrop === "function") { + const shouldCancel = await Promise.resolve(cancelDrop(event2)); + if (shouldCancel) { + type = Action.DragCancel; + } + } + } + activeRef.current = null; + sn(() => { + dispatch({ + type + }); + setStatus(Status.Uninitialized); + setOver(null); + setActiveSensor(null); + setActivatorEvent(null); + const eventName = type === Action.DragEnd ? "onDragEnd" : "onDragCancel"; + if (event2) { + const handler2 = latestProps.current[eventName]; + handler2 == null ? void 0 : handler2(event2); + dispatchMonitorEvent({ + type: eventName, + event: event2 + }); + } + }); + }; } - }); - }, - dangerouslyAllowMutability: true -}); -var waitForAll = Recoil_selectorFamily({ - key: "__waitForAll", - get: (dependencies) => ({ - get - }) => { - const deps = unwrapDependencies(dependencies); - const [results, exceptions] = concurrentRequests(get, deps); - if (exceptions.every((exp) => exp == null)) { - return wrapResults(dependencies, results); - } - const error = exceptions.find(isError); - if (error != null) { - throw error; + }, + [draggableNodes] + ); + const bindActivatorToSensorInstantiator = T2((handler, sensor) => { + return (event, active2) => { + const nativeEvent = event.nativeEvent; + const activeDraggableNode = draggableNodes.get(active2); + if (activeRef.current !== null || !activeDraggableNode || nativeEvent.dndKit || nativeEvent.defaultPrevented) { + return; + } + const activationContext = { + active: activeDraggableNode + }; + const shouldActivate = handler(event, sensor.options, activationContext); + if (shouldActivate === true) { + nativeEvent.dndKit = { + capturedBy: sensor.sensor + }; + activeRef.current = active2; + instantiateSensor(event, sensor); + } + }; + }, [draggableNodes, instantiateSensor]); + const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator); + useSensorSetup(sensors); + useIsomorphicLayoutEffect(() => { + if (activeNodeRect && status === Status.Initializing) { + setStatus(Status.Initialized); } - return Promise.all(exceptions).then((exceptionResults) => wrapResults(dependencies, combineAsyncResultsWithSyncResults(results, exceptionResults).map(getValueFromLoadablePromiseResult))); - }, - dangerouslyAllowMutability: true -}); -var waitForAllSettled = Recoil_selectorFamily({ - key: "__waitForAllSettled", - get: (dependencies) => ({ - get - }) => { - const deps = unwrapDependencies(dependencies); - const [results, exceptions] = concurrentRequests(get, deps); - if (exceptions.every((exp) => !Recoil_isPromise(exp))) { - return wrapLoadables(dependencies, results, exceptions); + }, [activeNodeRect, status]); + h2( + () => { + const { + onDragMove + } = latestProps.current; + const { + active: active2, + activatorEvent: activatorEvent2, + collisions: collisions2, + over: over2 + } = sensorContext.current; + if (!active2 || !activatorEvent2) { + return; + } + const event = { + active: active2, + activatorEvent: activatorEvent2, + collisions: collisions2, + delta: { + x: scrollAdjustedTranslate.x, + y: scrollAdjustedTranslate.y + }, + over: over2 + }; + sn(() => { + onDragMove == null ? void 0 : onDragMove(event); + dispatchMonitorEvent({ + type: "onDragMove", + event + }); + }); + }, + [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y] + ); + h2( + () => { + const { + active: active2, + activatorEvent: activatorEvent2, + collisions: collisions2, + droppableContainers: droppableContainers2, + scrollAdjustedTranslate: scrollAdjustedTranslate2 + } = sensorContext.current; + if (!active2 || activeRef.current == null || !activatorEvent2 || !scrollAdjustedTranslate2) { + return; + } + const { + onDragOver + } = latestProps.current; + const overContainer = droppableContainers2.get(overId); + const over2 = overContainer && overContainer.rect.current ? { + id: overContainer.id, + rect: overContainer.rect.current, + data: overContainer.data, + disabled: overContainer.disabled + } : null; + const event = { + active: active2, + activatorEvent: activatorEvent2, + collisions: collisions2, + delta: { + x: scrollAdjustedTranslate2.x, + y: scrollAdjustedTranslate2.y + }, + over: over2 + }; + sn(() => { + setOver(over2); + onDragOver == null ? void 0 : onDragOver(event); + dispatchMonitorEvent({ + type: "onDragOver", + event + }); + }); + }, + [overId] + ); + useIsomorphicLayoutEffect(() => { + sensorContext.current = { + activatorEvent, + active, + activeNode, + collisionRect, + collisions, + droppableRects, + draggableNodes, + draggingNode, + draggingNodeRect, + droppableContainers, + over, + scrollableAncestors, + scrollAdjustedTranslate + }; + activeRects.current = { + initial: draggingNodeRect, + translated: collisionRect + }; + }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]); + useAutoScroller({ + ...autoScrollOptions, + delta: translate, + draggingRect: collisionRect, + pointerCoordinates, + scrollableAncestors, + scrollableAncestorRects + }); + const publicContext = F(() => { + const context = { + active, + activeNode, + activeNodeRect, + activatorEvent, + collisions, + containerNodeRect, + dragOverlay, + draggableNodes, + droppableContainers, + droppableRects, + over, + measureDroppableContainers, + scrollableAncestors, + scrollableAncestorRects, + measuringConfiguration, + measuringScheduled, + windowRect + }; + return context; + }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]); + const internalContext = F(() => { + const context = { + activatorEvent, + activators, + active, + activeNodeRect, + ariaDescribedById: { + draggable: draggableDescribedById + }, + dispatch, + draggableNodes, + over, + measureDroppableContainers + }; + return context; + }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]); + return bn.createElement(DndMonitorContext.Provider, { + value: registerMonitorListener + }, bn.createElement(InternalContext.Provider, { + value: internalContext + }, bn.createElement(PublicContext.Provider, { + value: publicContext + }, bn.createElement(ActiveDraggableContext.Provider, { + value: transform + }, children)), bn.createElement(RestoreFocus, { + disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false + })), bn.createElement(Accessibility, { + ...accessibility, + hiddenTextDescribedById: draggableDescribedById + })); + function getAutoScrollerOptions() { + const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false; + const autoScrollGloballyDisabled = typeof autoScroll === "object" ? autoScroll.enabled === false : autoScroll === false; + const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled; + if (typeof autoScroll === "object") { + return { + ...autoScroll, + enabled + }; } - return Promise.all(exceptions.map((exp, i4) => Recoil_isPromise(exp) ? exp.then((result) => { - results[i4] = getValueFromLoadablePromiseResult(result); - exceptions[i4] = void 0; - }).catch((error) => { - results[i4] = void 0; - exceptions[i4] = error; - }) : null)).then(() => wrapLoadables(dependencies, results, exceptions)); - }, - dangerouslyAllowMutability: true + return { + enabled + }; + } }); -var noWait = Recoil_selectorFamily({ - key: "__noWait", - get: (dependency) => ({ - get - }) => { - try { - return loadableWithValue$4(get(dependency)); - } catch (exception) { - return Recoil_isPromise(exception) ? loadableWithPromise$3(exception) : loadableWithError$3(exception); - } - }, - dangerouslyAllowMutability: true -}); -var Recoil_WaitFor = { - waitForNone, - waitForAny, - waitForAll, - waitForAllSettled, - noWait -}; -var { - batchUpdates: batchUpdates$3, - setBatcher: setBatcher$1 -} = Recoil_Batching; -var { - DefaultValue: DefaultValue$3 -} = Recoil_Node; -var { - RecoilRoot: RecoilRoot$2 -} = Recoil_RecoilRoot_react; -var { - isRecoilValue: isRecoilValue$5 -} = Recoil_RecoilValue$1; -var { - retentionZone: retentionZone$1 -} = Recoil_RetentionZone; -var { - freshSnapshot: freshSnapshot$2 -} = Recoil_Snapshot$1; -var { - useGotoRecoilSnapshot: useGotoRecoilSnapshot$1, - useRecoilCallback: useRecoilCallback$1, - useRecoilSnapshot: useRecoilSnapshot$1, - useRecoilState: useRecoilState$1, - useRecoilStateLoadable: useRecoilStateLoadable$1, - useRecoilTransaction: useRecoilTransaction$1, - useRecoilTransactionObserver: useRecoilTransactionObserver$1, - useRecoilValue: useRecoilValue$1, - useRecoilValueLoadable: useRecoilValueLoadable$1, - useResetRecoilState: useResetRecoilState$1, - useRetain: useRetain$1, - useSetRecoilState: useSetRecoilState$1, - useSetUnvalidatedAtomValues: useSetUnvalidatedAtomValues$1, - useTransactionObservation_DEPRECATED: useTransactionObservation_DEPRECATED$1 -} = Recoil_Hooks; -var { - noWait: noWait$1, - waitForAll: waitForAll$1, - waitForAllSettled: waitForAllSettled$1, - waitForAny: waitForAny$1, - waitForNone: waitForNone$1 -} = Recoil_WaitFor; -var Recoil_index = { - DefaultValue: DefaultValue$3, - RecoilRoot: RecoilRoot$2, - useRecoilBridgeAcrossReactRoots_UNSTABLE: Recoil_useRecoilBridgeAcrossReactRoots, - atom: Recoil_atom, - selector: Recoil_selector, - retentionZone: retentionZone$1, - atomFamily: Recoil_atomFamily, - selectorFamily: Recoil_selectorFamily, - constSelector: Recoil_constSelector, - errorSelector: Recoil_errorSelector, - readOnlySelector: Recoil_readOnlySelector, - useRecoilValue: useRecoilValue$1, - useRecoilValueLoadable: useRecoilValueLoadable$1, - useRecoilState: useRecoilState$1, - useRecoilStateLoadable: useRecoilStateLoadable$1, - useSetRecoilState: useSetRecoilState$1, - useResetRecoilState: useResetRecoilState$1, - useGetRecoilValueInfo_UNSTABLE: Recoil_useGetRecoilValueInfo, - useRetain: useRetain$1, - useRecoilCallback: useRecoilCallback$1, - useRecoilTransaction_UNSTABLE: useRecoilTransaction$1, - useGotoRecoilSnapshot: useGotoRecoilSnapshot$1, - useRecoilSnapshot: useRecoilSnapshot$1, - useRecoilTransactionObserver_UNSTABLE: useRecoilTransactionObserver$1, - useTransactionObservation_UNSTABLE: useTransactionObservation_DEPRECATED$1, - useSetUnvalidatedAtomValues_UNSTABLE: useSetUnvalidatedAtomValues$1, - noWait: noWait$1, - waitForNone: waitForNone$1, - waitForAny: waitForAny$1, - waitForAll: waitForAll$1, - waitForAllSettled: waitForAllSettled$1, - isRecoilValue: isRecoilValue$5, - batchUpdates: batchUpdates$3, - setBatcher: setBatcher$1, - snapshot_UNSTABLE: freshSnapshot$2 -}; -var Recoil_index_1 = Recoil_index.DefaultValue; -var Recoil_index_2 = Recoil_index.RecoilRoot; -var Recoil_index_3 = Recoil_index.useRecoilBridgeAcrossReactRoots_UNSTABLE; -var Recoil_index_4 = Recoil_index.atom; -var Recoil_index_5 = Recoil_index.selector; -var Recoil_index_6 = Recoil_index.retentionZone; -var Recoil_index_7 = Recoil_index.atomFamily; -var Recoil_index_8 = Recoil_index.selectorFamily; -var Recoil_index_9 = Recoil_index.constSelector; -var Recoil_index_10 = Recoil_index.errorSelector; -var Recoil_index_11 = Recoil_index.readOnlySelector; -var Recoil_index_12 = Recoil_index.useRecoilValue; -var Recoil_index_13 = Recoil_index.useRecoilValueLoadable; -var Recoil_index_14 = Recoil_index.useRecoilState; -var Recoil_index_15 = Recoil_index.useRecoilStateLoadable; -var Recoil_index_16 = Recoil_index.useSetRecoilState; -var Recoil_index_17 = Recoil_index.useResetRecoilState; -var Recoil_index_18 = Recoil_index.useGetRecoilValueInfo_UNSTABLE; -var Recoil_index_19 = Recoil_index.useRetain; -var Recoil_index_20 = Recoil_index.useRecoilCallback; -var Recoil_index_21 = Recoil_index.useRecoilTransaction_UNSTABLE; -var Recoil_index_22 = Recoil_index.useGotoRecoilSnapshot; -var Recoil_index_23 = Recoil_index.useRecoilSnapshot; -var Recoil_index_24 = Recoil_index.useRecoilTransactionObserver_UNSTABLE; -var Recoil_index_25 = Recoil_index.useTransactionObservation_UNSTABLE; -var Recoil_index_26 = Recoil_index.useSetUnvalidatedAtomValues_UNSTABLE; -var Recoil_index_27 = Recoil_index.noWait; -var Recoil_index_28 = Recoil_index.waitForNone; -var Recoil_index_29 = Recoil_index.waitForAny; -var Recoil_index_30 = Recoil_index.waitForAll; -var Recoil_index_31 = Recoil_index.waitForAllSettled; -var Recoil_index_32 = Recoil_index.isRecoilValue; -var Recoil_index_33 = Recoil_index.batchUpdates; -var Recoil_index_34 = Recoil_index.setBatcher; -var Recoil_index_35 = Recoil_index.snapshot_UNSTABLE; - -// src/components/ui/modals/modals.ts -var import_obsidian23 = require("obsidian"); - -// src/i18n.ts -var T4 = class { - constructor() { - this.all = { - en: { - commands: { - h1: "Heading 1", - h2: "Heading 2", - h3: "Heading 3", - list: "Bullet List", - "ordered-list": "Numbered List", - todo: "To-do List", - quote: "Quote", - divider: "Divider", - note: "Link to Note", - link: "Web Link", - callout: "Callout", - table: "Table", - codeblock: "Code Block", - emoji: "Emoji", - image: "Image", - flow: "Flow Note", - tag: "Tag", - makeMenu: "Make Menu", - selectStyle: "Style", - toggleKeyboard: "Toggle Keyboard" - }, - styles: { - bold: "Bold", - italics: "Italics", - strikethrough: "Strikethrough", - code: "Code", - link: "Web Link", - blocklink: "Link to Note", - textColor: "Text Color", - highlight: "Highlight" - }, - commandsSuggest: { - noResult: "No result" - }, - commandPalette: { - enable: "Enable", - disabled: "Disable", - openFlow: "Open Flow Editors in Selection", - closeFlow: "Close Flow Editors in Selection", - toggleBold: "Toggle Bold", - toggleItalics: "Toggle Italics" - }, - menu: { - openFilePane: "Open in a new pane", - rename: "Rename", - moveFile: "Move file to...", - duplicate: "Make a copy", - edit: "Edit", - delete: "Delete", - getHelp: "Make.md Community", - openVault: "Open Another Vault", - obSettings: "Obsidian Settings", - commandPalette: "Command Palette", - backToSpace: "Back to Spaces", - newSpace: "New Space", - collapseAllSections: "Collapse All Spaces", - expandAllSections: "Expand All Spaces", - collapseAllFolders: "Collapse All Folders", - expandAllFolders: "Expand All Folders", - spaceTitle: "Add/Remove in Space" - }, - buttons: { - moreOptions: "More Options", - newNote: "New Note", - changeIcon: "Change Sticker", - removeIcon: "Remove Sticker", - rename: "Change Name", - createFolder: "New Folder", - createNote: "New Note", - createSection: "New Space", - cancel: "Cancel", - search: "Search", - toggleFlow: "Toggle Flow", - openFlow: "Open Flow", - hideFlow: "Hide Flow", - openLink: "Open Link" - }, - labels: { - createFolder: "New Folder Name", - rename: "Rename Note", - renameSection: "Rename Space", - createSection: "New Space", - createNote: "New Note Name", - collapse: "Collapse", - expand: "Expand", - findStickers: "Find Sticker", - placeholder: "Type '/' for commands", - noFile: "is not created yet. Click to create." - }, - flowView: { - emptyDoc: "Empty Document", - itemsCount: " Items", - emptyFolder: "This Folder is Empty" - }, - notice: { - duplicateFile: "Folder already contains note with same name", - addedToSection: "Added to Space" - }, - settings: { - sectionSidebar: "Spaces", - sectionEditor: "Maker Mode", - sectionFlow: "Flow Editor", - sectionAdvanced: "Advanced", - spaces: { - name: "Spaces", - desc: `Spaces gives you control over how you organize your files` - }, - spacesStickers: { - name: "Stickers", - desc: `Use Emojis to make it easier to find your notes` - }, - spacesFileExplorerDual: { - name: "Use Spaces Alongside File Explorer", - desc: "This will allow plugins that uses the File Explorer to work while using Spaces" - }, - spacesDeleteOption: { - name: "Delete File Option", - desc: "Select how you want files to be deleted" - }, - spacesDeleteOptions: { - permanant: "Delete Permanently", - trash: "Move to Obsidian Trash", - "system-trash": "Move to System Trash" - }, - hideRibbon: { - name: "App Ribbon", - desc: `Show/hide the left menu aka. ribbon` - }, - sidebarTabs: { - name: "Sidebar Tabs", - desc: `Show/hide other sidebar tabs` - }, - spacesPerformance: { - name: "Spaces Performance Mode", - desc: `Turn on performance mode for Spaces, may affect scrolling appearance. Requires Restart` - }, - inlineStyler: { - name: "Inline Styler", - desc: `Select text to add styling, recommended for Flow Editor` - }, - inlineStylerColor: { - name: "Text and Highlight Colors \u{1F9EA}", - desc: `Select text color and highlight color, (this may change in the future because of the limitations with HTML and Obsidian)` - }, - makeChar: { - name: "Make Menu Trigger", - desc: "Character to open the Make Menu" - }, - mobileMakeBar: { - name: "Make Bar (Mobile)", - desc: "Replaces the mobile toolbar" - }, - editorMarkSans: { - name: "Mark Sans \u{1F9EA}", - desc: `Use the editor without Markdown.` - }, - editorMakePlacholder: { - name: "Make Menu Hint Text", - desc: `Show a hint text on how to open the Make Menu Shortcut` - }, - editorMakeMenu: { - name: "Make Menu Shortcut", - desc: `Open the Make menu to quickly add content` - }, - editorFlowReplace: { - name: "Flow Editor", - desc: `Open your internal links or toggle your embeds in the flow editor.` - }, - editorFlowStyle: { - name: "Flow Editor Style", - desc: "Select a theme for your flow editors", - seamless: "Seamless", - classic: "Classic" - } +var NullContext = /* @__PURE__ */ B(null); +var defaultRole = "button"; +var ID_PREFIX = "Droppable"; +function useDraggable(_ref) { + let { + id: id2, + data, + disabled = false, + attributes + } = _ref; + const key2 = useUniqueId(ID_PREFIX); + const { + activators, + activatorEvent, + active, + activeNodeRect, + ariaDescribedById, + draggableNodes, + over + } = q2(InternalContext); + const { + role = defaultRole, + roleDescription = "draggable", + tabIndex = 0 + } = attributes != null ? attributes : {}; + const isDragging = (active == null ? void 0 : active.id) === id2; + const transform = q2(isDragging ? ActiveDraggableContext : NullContext); + const [node, setNodeRef] = useNodeRef(); + const [activatorNode, setActivatorNodeRef] = useNodeRef(); + const listeners = useSyntheticListeners(activators, id2); + const dataRef = useLatestValue(data); + useIsomorphicLayoutEffect( + () => { + draggableNodes.set(id2, { + id: id2, + key: key2, + node, + activatorNode, + data: dataRef + }); + return () => { + const node2 = draggableNodes.get(id2); + if (node2 && node2.key === key2) { + draggableNodes.delete(id2); } - } - }; - this.lang = localStorage.getItem("language"); - } - get texts() { - return this.all["en"]; - } -}; -var i18n_default = new T4().texts; - -// src/utils/file.ts -var import_obsidian22 = require("obsidian"); - -// src/types/types.ts -var eventTypes = { - selectedFileChange: "mkmd-selected-file-change", - activeFileChange: "mkmd-active-file-change", - refreshView: "mkmd-refresh-view", - revealFile: "mkmd-reveal-file", - tagsChange: "mkmd-tags-change", - vaultChange: "mkmd-vault-change", - mdbChange: "mkmd-mdb-change", - spacesChange: "mkmd-spaces-change", - updateSections: "mkmd-update-sections", - settingsChanged: "mkmd-settings-changed", - spawnPortal: "mkmd-portal-spawn", - loadPortal: "mkmd-portal-load", - openFilePortal: "mkmd-portal-file", - focusPortal: "mkmd-portal-focus" -}; - -// src/components/ContextView/ContextView.tsx -var import_obsidian21 = require("obsidian"); - -// src/components/ui/menus/menu.tsx -var import_obsidian = require("obsidian"); - -// src/components/ui/libs/react-tags/Input.tsx -var SIZER_STYLES = { - position: "absolute", - width: 0, - height: 0, - visibility: "hidden", - overflow: "scroll", - whiteSpace: "pre" -}; -var STYLE_PROPS = [ - "fontSize", - "fontFamily", - "fontWeight", - "fontStyle", - "letterSpacing", - "textTransform" -]; -var Input = k3((props2, input) => { - const { classNames: classNames8, inputAttributes, inputEventHandlers, index } = props2; - const sizer = _2(null); - const [inputWidth, setInputWidth] = p2(null); - const [query, setQuery] = p2(""); - const [placeholderText, setPlaceholderText] = p2(""); - h2(() => { - copyInputStyles(); - updateInputWidth(); - setTimeout(() => { - input.current.focus(); - }, 50); - }, []); - h2(() => { - if (query !== props2.query || placeholderText !== props2.placeholderText) { - setQuery(props2.query); - setPlaceholderText(props2.placeholderText); - updateInputWidth(); - } - }, [props2.query, props2.placeholderText]); - const copyInputStyles = () => { - const inputStyle = window.getComputedStyle(input.current); - STYLE_PROPS.forEach((prop) => { - sizer.current.style[prop] = inputStyle[prop]; - }); - }; - const updateInputWidth = () => { - let _inputWidth; - _inputWidth = Math.ceil(sizer.current.scrollWidth) + 2; - if (_inputWidth !== inputWidth) { - setInputWidth(_inputWidth); - } + }; + }, + [draggableNodes, id2] + ); + const memoizedAttributes = F(() => ({ + role, + tabIndex, + "aria-disabled": disabled, + "aria-pressed": isDragging && role === defaultRole ? true : void 0, + "aria-roledescription": roleDescription, + "aria-describedby": ariaDescribedById.draggable + }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]); + return { + active, + activatorEvent, + activeNodeRect, + attributes: memoizedAttributes, + isDragging, + listeners: disabled ? void 0 : listeners, + node, + over, + setNodeRef, + setActivatorNodeRef, + transform }; - return /* @__PURE__ */ bn.createElement("div", { - className: classNames8.searchWrapper - }, /* @__PURE__ */ bn.createElement("input", { - ...inputAttributes, - ...inputEventHandlers, - ref: input, - value: query, - placeholder: placeholderText, - className: classNames8.searchInput, - role: "combobox", - style: { width: "100%" } - }), /* @__PURE__ */ bn.createElement("div", { - ref: sizer, - style: SIZER_STYLES - }, query || placeholderText)); -}); -var Input_default = Input; - -// src/components/ui/libs/react-tags/concerns/matchers.js -function escapeForRegExp(string) { - return string.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&"); -} -function matchAny(string) { - return new RegExp(escapeForRegExp(string), "gi"); -} -function matchExact(string) { - return new RegExp(`^${escapeForRegExp(string)}$`, "i"); } - -// src/components/ui/libs/react-tags/Suggestions.tsx -function markIt(name, query) { - const regexp = matchAny(query); - return name.replace(regexp, "$&"); +function useDndContext() { + return q2(PublicContext); } -var SuggestionComponent = (props2) => { - const ref = _2(null); - h2(() => { - var _a2; - if (props2.active) { - (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.scrollIntoViewIfNeeded(); - } - }, [props2.active]); - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.item.onToggle && /* @__PURE__ */ bn.createElement("div", null, "Toggle"), /* @__PURE__ */ bn.createElement("span", { - ref, - dangerouslySetInnerHTML: { __html: markIt(props2.item.name, props2.query) } - }), props2.item.description && /* @__PURE__ */ bn.createElement("span", { - className: "mk-description", - ref, - dangerouslySetInnerHTML: { __html: markIt(props2.item.description, props2.query) } - }), props2.item.removeable && /* @__PURE__ */ bn.createElement("div", null, "Remove")); +var ID_PREFIX$1 = "Droppable"; +var defaultResizeObserverConfig = { + timeout: 25 }; -var Suggestions = (props2) => { - const timer = _2(null); - const mouseOver = (e4, index) => { - if (!props2.hoverSelect) { - return; - } - timer.current && clearTimeout(timer.current); - timer.current = setTimeout(() => props2.setIndex(index), 300); - }; - const options = props2.options.map((item, index) => { - const key2 = `${props2.id}-${index}`; - const classNames8 = []; - if (props2.index === index) { - classNames8.push(props2.classNames.suggestionActive); - } - if (item.disabled) { - classNames8.push(props2.classNames.suggestionDisabled); - } - return /* @__PURE__ */ bn.createElement("li", { - id: key2, - key: key2, - role: "option", - className: classNames8.join(" "), - "aria-disabled": Boolean(item.disabled), - onMouseDown: (e4) => e4.preventDefault(), - onClick: () => props2.addTag(item), - onMouseOver: (e4) => mouseOver(e4, index), - onMouseOut: (e4) => props2.hoverSelect && clearTimeout(timer.current) - }, /* @__PURE__ */ bn.createElement(SuggestionComponent, { - item, - query: props2.query, - active: index == props2.index - })); +function useDroppable(_ref) { + let { + data, + disabled = false, + id: id2, + resizeObserverConfig + } = _ref; + const key2 = useUniqueId(ID_PREFIX$1); + const { + active, + dispatch, + over, + measureDroppableContainers + } = q2(InternalContext); + const previous = _2({ + disabled }); - return /* @__PURE__ */ bn.createElement("div", { - className: props2.classNames.suggestions - }, /* @__PURE__ */ bn.createElement("ul", { - role: "listbox", - id: props2.id - }, options)); -}; -var Suggestions_default = Suggestions; - -// src/components/ui/libs/react-tags/concerns/focusNextElement.js -function focusNextElement(scope, currentTarget) { - const interactiveEls = scope.querySelectorAll("a,button,input"); - const currentEl = Array.prototype.findIndex.call( - interactiveEls, - (element) => element === currentTarget + const resizeObserverConnected = _2(false); + const rect = _2(null); + const callbackId = _2(null); + const { + disabled: resizeObserverDisabled, + updateMeasurementsFor, + timeout: resizeObserverTimeout + } = { + ...defaultResizeObserverConfig, + ...resizeObserverConfig + }; + const ids2 = useLatestValue(updateMeasurementsFor != null ? updateMeasurementsFor : id2); + const handleResize = T2( + () => { + if (!resizeObserverConnected.current) { + resizeObserverConnected.current = true; + return; + } + if (callbackId.current != null) { + clearTimeout(callbackId.current); + } + callbackId.current = setTimeout(() => { + measureDroppableContainers(Array.isArray(ids2.current) ? ids2.current : [ids2.current]); + callbackId.current = null; + }, resizeObserverTimeout); + }, + [resizeObserverTimeout] ); - const nextEl = interactiveEls[currentEl - 1] || interactiveEls[currentEl + 1]; - if (nextEl) { - nextEl.focus(); - } -} - -// src/components/ui/libs/react-tags/Tag.tsx -var TagComponent = (props2) => { - return /* @__PURE__ */ bn.createElement("button", { - type: "button", - className: props2.classNames.selectedTag, - onClick: props2.onDelete - }, /* @__PURE__ */ bn.createElement("span", { - className: props2.classNames.selectedTagName - }, props2.tag.name)); -}; -var Tag_default = TagComponent; - -// src/components/ui/libs/react-tags/ReactTags.tsx -var KEYS = { - ENTER: "Enter", - TAB: "Tab", - BACKSPACE: "Backspace", - UP_ARROW: "ArrowUp", - UP_ARROW_COMPAT: "Up", - DOWN_ARROW: "ArrowDown", - DOWN_ARROW_COMPAT: "Down" -}; -var CLASS_NAMES = { - root: "mk-options-menu", - rootFocused: "is-focused", - selected: "mk-options-menu__selected", - selectedTag: "mk-options-menu__selected-tag", - selectedTagName: "mk-options-menu__selected-tag-name", - search: "mk-options-menu__search", - searchWrapper: "mk-options-menu__search-wrapper", - searchInput: "mk-options-menu__search-input", - suggestions: "mk-options-menu__suggestions", - suggestionActive: "is-active", - suggestionDisabled: "is-disabled" -}; -var defaultProps = { - id: "ReactTags", - tags: [], - suggestionsOnly: false, - placeholderText: "Add new tag", - noSuggestionsText: null, - newTagText: null, - suggestions: [], - suggestionsFilter: defaultSuggestionsFilter, - suggestionsTransform: null, - classNames: CLASS_NAMES, - delimiters: [KEYS.ENTER], - minQueryLength: 2, - maxSuggestionsLength: 8, - inputAttributes: {}, - hoverSelect: false -}; -var findMatchIndex = (options, query) => { - return options.findIndex((option) => matchExact(query).test(option.name)); -}; -var pressDelimiter = (props2, query, index, options, addTag) => { - if (query.length >= props2.minQueryLength) { - const match2 = findMatchIndex(options, query); - const _index = index === -1 ? match2 : index; - const tag = _index > -1 ? options[_index] : null; - if (tag) { - addTag(tag); - } else { - addTag({ name: query, value: query }); + const resizeObserver = useResizeObserver({ + callback: handleResize, + disabled: resizeObserverDisabled || !active + }); + const handleNodeChange = T2((newElement, previousElement) => { + if (!resizeObserver) { + return; } - } -}; -function defaultSuggestionsFilter(item, query) { - const regexp = matchAny(query); - return regexp.test(item.name); -} -function getOptions(props2, query) { - let options; - if (props2.suggestionsTransform) { - options = props2.suggestionsTransform(query, props2.suggestions); - } else { - options = props2.suggestions.filter((item) => props2.suggestionsFilter(item, query)); - } - options = options.slice(0, props2.maxSuggestionsLength); - if (props2.newTagText && findMatchIndex(options, query) === -1) { - options.push({ id: 0, name: query, value: query }); - } else if (props2.noSuggestionsText && options.length === 0) { - options.push({ id: 0, name: props2.noSuggestionsText, value: "", disabled: true }); - } - return options; -} -var ReactTags = bn.forwardRef((_props, ref) => { - const props2 = { ...defaultProps, ..._props }; - const [options, setOptions] = p2([]); - const inputRef = _2(null); - const [query, setQuery] = p2(""); - const [focused, setFocused] = p2(false); - const [index, setIndex] = p2(0); - const onComposition = _2(false); - h2(() => { - if (ref) { - ref.current = () => { - var _a2; - if (!focused) { - (_a2 = inputRef == null ? void 0 : inputRef.current) == null ? void 0 : _a2.focus(); - setFocused(true); - return false; - } - return true; - }; + if (previousElement) { + resizeObserver.unobserve(previousElement); + resizeObserverConnected.current = false; } - }, [focused]); - h2(() => { - var _a2; - if (index != -1 && props2.onHover && props2.hoverSelect) { - props2.onHover((_a2 = options[index]) == null ? void 0 : _a2.value); + if (newElement) { + resizeObserver.observe(newElement); } - }, [index, options]); + }, [resizeObserver]); + const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange); + const dataRef = useLatestValue(data); h2(() => { - if (query.length == 0 && props2.defaultSuggestions) { - setOptions(props2.defaultSuggestions); - return; - } - setOptions(getOptions(props2, query)); - }, [query, props2.suggestions]); - const container = _2(null); - const onInput = (e4) => { - if (e4.type === "compositionstart") { - onComposition.current = true; + if (!resizeObserver || !nodeRef.current) { return; } - if (e4.type === "compositionend") { - onComposition.current = false; + resizeObserver.disconnect(); + resizeObserverConnected.current = false; + resizeObserver.observe(nodeRef.current); + }, [nodeRef, resizeObserver]); + useIsomorphicLayoutEffect( + () => { + dispatch({ + type: Action.RegisterDroppable, + element: { + id: id2, + key: key2, + disabled, + node: nodeRef, + rect, + data: dataRef + } + }); + return () => dispatch({ + type: Action.UnregisterDroppable, + key: key2, + id: id2 + }); + }, + [id2] + ); + h2(() => { + if (disabled !== previous.current.disabled) { + dispatch({ + type: Action.SetDroppableDisabled, + id: id2, + key: key2, + disabled + }); + previous.current.disabled = disabled; } - if (onComposition.current) { + }, [id2, key2, disabled, dispatch]); + return { + active, + rect, + isOver: (over == null ? void 0 : over.id) === id2, + node: nodeRef, + over, + setNodeRef + }; +} +function AnimationManager(_ref) { + let { + animation, + children + } = _ref; + const [clonedChildren, setClonedChildren] = p2(null); + const [element, setElement] = p2(null); + const previousChildren = usePrevious(children); + if (!children && !clonedChildren && previousChildren) { + setClonedChildren(previousChildren); + } + useIsomorphicLayoutEffect(() => { + if (!element) { return; } - const _query = e4.target.value; - if (props2.onInput) { - props2.onInput(_query); - } - if (_query.length === query.length + 1 && props2.delimiters.indexOf(query.slice(-1)) > -1) { - pressDelimiter(props2, query, index, options, addTag); - } else if (_query !== query) { - setQuery(_query); + const key2 = clonedChildren == null ? void 0 : clonedChildren.key; + const id2 = clonedChildren == null ? void 0 : clonedChildren.props.id; + if (key2 == null || id2 == null) { + setClonedChildren(null); + return; } + Promise.resolve(animation(id2, element)).then(() => { + setClonedChildren(null); + }); + }, [animation, clonedChildren, element]); + return bn.createElement(bn.Fragment, null, children, clonedChildren ? cn(clonedChildren, { + ref: setElement + }) : null); +} +var defaultTransform = { + x: 0, + y: 0, + scaleX: 1, + scaleY: 1 +}; +function NullifiedContextProvider(_ref) { + let { + children + } = _ref; + return bn.createElement(InternalContext.Provider, { + value: defaultInternalContext + }, bn.createElement(ActiveDraggableContext.Provider, { + value: defaultTransform + }, children)); +} +var baseStyles = { + position: "fixed", + touchAction: "none" +}; +var defaultTransition = (activatorEvent) => { + const isKeyboardActivator = isKeyboardEvent(activatorEvent); + return isKeyboardActivator ? "transform 250ms ease" : void 0; +}; +var PositionedOverlay = /* @__PURE__ */ k3((_ref, ref) => { + let { + as, + activatorEvent, + adjustScale: adjustScale2, + children, + className, + rect, + style, + transform, + transition = defaultTransition + } = _ref; + if (!rect) { + return null; + } + const scaleAdjustedTransform = adjustScale2 ? transform : { + ...transform, + scaleX: 1, + scaleY: 1 }; - const onKeyDown = (e4) => { - if (props2.delimiters.indexOf(e4.key) > -1) { - if (query || index > -1) { - e4.preventDefault(); + const styles = { + ...baseStyles, + width: rect.width, + height: rect.height, + top: rect.top, + left: rect.left, + transform: CSS.Transform.toString(scaleAdjustedTransform), + transformOrigin: adjustScale2 && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : void 0, + transition: typeof transition === "function" ? transition(activatorEvent) : transition, + ...style + }; + return bn.createElement(as, { + className, + style: styles, + ref + }, children); +}); +var defaultDropAnimationSideEffects = (options) => (_ref) => { + let { + active, + dragOverlay + } = _ref; + const originalStyles = {}; + const { + styles, + className + } = options; + if (styles != null && styles.active) { + for (const [key2, value] of Object.entries(styles.active)) { + if (value === void 0) { + continue; } - pressDelimiter(props2, query, index, options, addTag); + originalStyles[key2] = active.node.style.getPropertyValue(key2); + active.node.style.setProperty(key2, value); } - if (e4.key === KEYS.BACKSPACE) { - pressBackspaceKey(); + } + if (styles != null && styles.dragOverlay) { + for (const [key2, value] of Object.entries(styles.dragOverlay)) { + if (value === void 0) { + continue; + } + dragOverlay.node.style.setProperty(key2, value); } - if (e4.key === KEYS.UP_ARROW || e4.key === KEYS.UP_ARROW_COMPAT) { - pressUpKey(e4); + } + if (className != null && className.active) { + active.node.classList.add(className.active); + } + if (className != null && className.dragOverlay) { + dragOverlay.node.classList.add(className.dragOverlay); + } + return function cleanup() { + for (const [key2, value] of Object.entries(originalStyles)) { + active.node.style.setProperty(key2, value); } - if (e4.key === KEYS.DOWN_ARROW || e4.key === KEYS.DOWN_ARROW_COMPAT) { - pressDownKey(e4); + if (className != null && className.active) { + active.node.classList.remove(className.active); } }; - const onBlur = () => { - setFocused(false); - if (props2.onBlur) { - props2.onBlur(); +}; +var defaultKeyframeResolver = (_ref2) => { + let { + transform: { + initial, + final } - }; - const onFocus = () => { - setFocused(true); - if (props2.onFocus) { - props2.onFocus(); + } = _ref2; + return [{ + transform: CSS.Transform.toString(initial) + }, { + transform: CSS.Transform.toString(final) + }]; +}; +var defaultDropAnimationConfiguration = { + duration: 250, + easing: "ease", + keyframes: defaultKeyframeResolver, + sideEffects: /* @__PURE__ */ defaultDropAnimationSideEffects({ + styles: { + active: { + opacity: "0" + } } - }; - const onDeleteTag = (index2, event) => { - if (container.current) { - focusNextElement(container.current, event.currentTarget); + }) +}; +function useDropAnimation(_ref3) { + let { + config, + draggableNodes, + droppableContainers, + measuringConfiguration + } = _ref3; + return useEvent((id2, node) => { + if (config === null) { + return; } - deleteTag(index2); - }; - const addTag = (tag) => { - if (tag.disabled) { + const activeDraggable = draggableNodes.get(id2); + if (!activeDraggable) { return; } - if (props2.onValidate && !props2.onValidate(tag)) { + const activeNode = activeDraggable.node.current; + if (!activeNode) { return; } - props2.onAddition(tag); - clearInput(); - }; - const deleteTag = (i4) => { - props2.onDelete(i4); - }; - const clearInput = () => { - setQuery(""); - setIndex(-1); - }; - const clearSelectedIndex = () => { - setIndex(-1); - }; - const pressUpKey = (e4) => { - e4.preventDefault(); - const size2 = options.length - 1; - setIndex(index <= 0 ? size2 : index - 1); - }; - const pressDownKey = (e4) => { - e4.preventDefault(); - const size2 = options.length - 1; - setIndex((i4) => i4 >= size2 ? 0 : i4 + 1); - }; - function pressBackspaceKey() { - if (!query.length) { - deleteTag(props2.tags.length - 1); + const measurableNode = getMeasurableNode(node); + if (!measurableNode) { + return; } - } - const focusInput = () => { - inputRef.current.focus(); + const { + transform + } = getWindow(node).getComputedStyle(node); + const parsedTransform = parseTransform(transform); + if (!parsedTransform) { + return; + } + const animation = typeof config === "function" ? config : createDefaultDropAnimation(config); + scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure); + return animation({ + active: { + id: id2, + data: activeDraggable.data, + node: activeNode, + rect: measuringConfiguration.draggable.measure(activeNode) + }, + draggableNodes, + dragOverlay: { + node, + rect: measuringConfiguration.dragOverlay.measure(measurableNode) + }, + droppableContainers, + measuringConfiguration, + transform: parsedTransform + }); + }); +} +function createDefaultDropAnimation(options) { + const { + duration, + easing, + sideEffects, + keyframes + } = { + ...defaultDropAnimationConfiguration, + ...options }; - const inputEventHandlers = { - onChange: onInput, - onBlur, - onFocus, - onInput: () => { - }, - onKeyDown, - onCompositionEnd: onInput, - onCompositionStart: onInput + return (_ref4) => { + let { + active, + dragOverlay, + transform, + ...rest + } = _ref4; + if (!duration) { + return; + } + const delta = { + x: dragOverlay.rect.left - active.rect.left, + y: dragOverlay.rect.top - active.rect.top + }; + const scale = { + scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1, + scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1 + }; + const finalTransform = { + x: transform.x - delta.x, + y: transform.y - delta.y, + ...scale + }; + const animationKeyframes = keyframes({ + ...rest, + active, + dragOverlay, + transform: { + initial: transform, + final: finalTransform + } + }); + const [firstKeyframe] = animationKeyframes; + const lastKeyframe = animationKeyframes[animationKeyframes.length - 1]; + if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) { + return; + } + const cleanup = sideEffects == null ? void 0 : sideEffects({ + active, + dragOverlay, + ...rest + }); + const animation = dragOverlay.node.animate(animationKeyframes, { + duration, + easing, + fill: "forwards" + }); + return new Promise((resolve) => { + animation.onfinish = () => { + cleanup == null ? void 0 : cleanup(); + resolve(); + }; + }); }; - const expanded = focused && query.length >= props2.minQueryLength; - const classNames8 = Object.assign({}, CLASS_NAMES, props2.classNames); - const rootClassNames = [classNames8.root]; - focused && rootClassNames.push(classNames8.rootFocused); - return /* @__PURE__ */ bn.createElement("div", { - ref: container, - className: rootClassNames.join(" ") - }, !props2.suggestionsOnly ? /* @__PURE__ */ bn.createElement("div", { - className: classNames8.selected, - "aria-relevant": "additions removals", - "aria-live": "polite" - }, /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.tags.map((tag, i4) => /* @__PURE__ */ bn.createElement(Tag_default, { - key: i4, - tag, - classNames: classNames8, - onDelete: (e4) => onDeleteTag(i4, e4) - }))), /* @__PURE__ */ bn.createElement("div", { - className: classNames8.search - }, /* @__PURE__ */ bn.createElement(Input_default, { - ref: inputRef, - query, - index, - id: props2.id, - classNames: classNames8, - inputAttributes: props2.inputAttributes, - inputEventHandlers, - expanded, - placeholderText: props2.placeholderText - }))) : null, options.length ? /* @__PURE__ */ bn.createElement(Suggestions_default, { - options, - hoverSelect: props2.hoverSelect, - query, - setIndex, - index, - id: props2.id, - classNames: classNames8, - expanded, - addTag - }) : null, query && props2.allowNew && /* @__PURE__ */ bn.createElement("div", { - className: "mk-options-menu__suggestions" - }, /* @__PURE__ */ bn.createElement("ul", null, /* @__PURE__ */ bn.createElement("li", { - onMouseDown: (e4) => e4.preventDefault(), - onClick: () => addTag({ name: query, value: query }) - }, "Add ", query))), props2.previewComponent); +} +var key = 0; +function useKey(id2) { + return F(() => { + if (id2 == null) { + return; + } + key++; + return key; + }, [id2]); +} +var DragOverlay = /* @__PURE__ */ bn.memo((_ref) => { + let { + adjustScale: adjustScale2 = false, + children, + dropAnimation: dropAnimationConfig, + style, + transition, + modifiers, + wrapperElement = "div", + className, + zIndex = 999 + } = _ref; + const { + activatorEvent, + active, + activeNodeRect, + containerNodeRect, + draggableNodes, + droppableContainers, + dragOverlay, + over, + measuringConfiguration, + scrollableAncestors, + scrollableAncestorRects, + windowRect + } = useDndContext(); + const transform = q2(ActiveDraggableContext); + const key2 = useKey(active == null ? void 0 : active.id); + const modifiedTransform = applyModifiers(modifiers, { + activatorEvent, + active, + activeNodeRect, + containerNodeRect, + draggingNodeRect: dragOverlay.rect, + over, + overlayNodeRect: dragOverlay.rect, + scrollableAncestors, + scrollableAncestorRects, + transform, + windowRect + }); + const initialRect = useInitialValue(activeNodeRect); + const dropAnimation = useDropAnimation({ + config: dropAnimationConfig, + draggableNodes, + droppableContainers, + measuringConfiguration + }); + const ref = initialRect ? dragOverlay.setRef : void 0; + return bn.createElement(NullifiedContextProvider, null, bn.createElement(AnimationManager, { + animation: dropAnimation + }, active && key2 ? bn.createElement(PositionedOverlay, { + key: key2, + id: active.id, + ref, + as: wrapperElement, + activatorEvent, + adjustScale: adjustScale2, + className, + transition, + rect: initialRect, + style: { + zIndex, + ...style + }, + transform: modifiedTransform + }, children) : null)); }); -var ReactTags_default = ReactTags; -// node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js -var formatDistanceLocale = { - lessThanXSeconds: { - one: "less than a second", - other: "less than {{count}} seconds" - }, - xSeconds: { - one: "1 second", - other: "{{count}} seconds" - }, - halfAMinute: "half a minute", - lessThanXMinutes: { - one: "less than a minute", - other: "less than {{count}} minutes" - }, - xMinutes: { - one: "1 minute", - other: "{{count}} minutes" - }, - aboutXHours: { - one: "about 1 hour", - other: "about {{count}} hours" - }, - xHours: { - one: "1 hour", - other: "{{count}} hours" - }, - xDays: { - one: "1 day", - other: "{{count}} days" - }, - aboutXWeeks: { - one: "about 1 week", - other: "about {{count}} weeks" - }, - xWeeks: { - one: "1 week", - other: "{{count}} weeks" - }, - aboutXMonths: { - one: "about 1 month", - other: "about {{count}} months" - }, - xMonths: { - one: "1 month", - other: "{{count}} months" - }, - aboutXYears: { - one: "about 1 year", - other: "about {{count}} years" - }, - xYears: { - one: "1 year", - other: "{{count}} years" - }, - overXYears: { - one: "over 1 year", - other: "over {{count}} years" - }, - almostXYears: { - one: "almost 1 year", - other: "almost {{count}} years" +// node_modules/@dnd-kit/sortable/dist/sortable.esm.js +function arrayMove(array, from, to) { + const newArray = array.slice(); + newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0]); + return newArray; +} +function getSortedRects(items, rects) { + return items.reduce((accumulator, id2, index) => { + const rect = rects.get(id2); + if (rect) { + accumulator[index] = rect; + } + return accumulator; + }, Array(items.length)); +} +function isValidIndex(index) { + return index !== null && index >= 0; +} +function itemsEqual(a5, b4) { + if (a5 === b4) { + return true; } -}; -var formatDistance = function formatDistance2(token, count2, options) { - var result; - var tokenValue = formatDistanceLocale[token]; - if (typeof tokenValue === "string") { - result = tokenValue; - } else if (count2 === 1) { - result = tokenValue.one; - } else { - result = tokenValue.other.replace("{{count}}", count2.toString()); + if (a5.length !== b4.length) { + return false; } - if (options !== null && options !== void 0 && options.addSuffix) { - if (options.comparison && options.comparison > 0) { - return "in " + result; - } else { - return result + " ago"; + for (let i4 = 0; i4 < a5.length; i4++) { + if (a5[i4] !== b4[i4]) { + return false; } } - return result; -}; -var formatDistance_default = formatDistance; - -// node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js -function buildFormatLongFn(args) { - return function() { - var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; - var width = options.width ? String(options.width) : args.defaultWidth; - var format3 = args.formats[width] || args.formats[args.defaultWidth]; - return format3; - }; + return true; } - -// node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js -var dateFormats = { - full: "EEEE, MMMM do, y", - long: "MMMM do, y", - medium: "MMM d, y", - short: "MM/dd/yyyy" -}; -var timeFormats = { - full: "h:mm:ss a zzzz", - long: "h:mm:ss a z", - medium: "h:mm:ss a", - short: "h:mm a" -}; -var dateTimeFormats = { - full: "{{date}} 'at' {{time}}", - long: "{{date}} 'at' {{time}}", - medium: "{{date}}, {{time}}", - short: "{{date}}, {{time}}" -}; -var formatLong = { - date: buildFormatLongFn({ - formats: dateFormats, - defaultWidth: "full" - }), - time: buildFormatLongFn({ - formats: timeFormats, - defaultWidth: "full" - }), - dateTime: buildFormatLongFn({ - formats: dateTimeFormats, - defaultWidth: "full" - }) -}; -var formatLong_default = formatLong; - -// node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js -var formatRelativeLocale = { - lastWeek: "'last' eeee 'at' p", - yesterday: "'yesterday at' p", - today: "'today at' p", - tomorrow: "'tomorrow at' p", - nextWeek: "eeee 'at' p", - other: "P" -}; -var formatRelative = function formatRelative2(token, _date, _baseDate, _options) { - return formatRelativeLocale[token]; +function normalizeDisabled(disabled) { + if (typeof disabled === "boolean") { + return { + draggable: disabled, + droppable: disabled + }; + } + return disabled; +} +var defaultScale = { + scaleX: 1, + scaleY: 1 }; -var formatRelative_default = formatRelative; - -// node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js -function buildLocalizeFn(args) { - return function(dirtyIndex, options) { - var context = options !== null && options !== void 0 && options.context ? String(options.context) : "standalone"; - var valuesArray; - if (context === "formatting" && args.formattingValues) { - var defaultWidth = args.defaultFormattingWidth || args.defaultWidth; - var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth; - valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; - } else { - var _defaultWidth = args.defaultWidth; - var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth; - valuesArray = args.values[_width] || args.values[_defaultWidth]; +var horizontalListSortingStrategy = (_ref) => { + var _rects$activeIndex; + let { + rects, + activeNodeRect: fallbackActiveRect, + activeIndex, + overIndex, + index + } = _ref; + const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect; + if (!activeNodeRect) { + return null; + } + const itemGap = getItemGap(rects, index, activeIndex); + if (index === activeIndex) { + const newIndexRect = rects[overIndex]; + if (!newIndexRect) { + return null; } - var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; - return valuesArray[index]; + return { + x: activeIndex < overIndex ? newIndexRect.left + newIndexRect.width - (activeNodeRect.left + activeNodeRect.width) : newIndexRect.left - activeNodeRect.left, + y: 0, + ...defaultScale + }; + } + if (index > activeIndex && index <= overIndex) { + return { + x: -activeNodeRect.width - itemGap, + y: 0, + ...defaultScale + }; + } + if (index < activeIndex && index >= overIndex) { + return { + x: activeNodeRect.width + itemGap, + y: 0, + ...defaultScale + }; + } + return { + x: 0, + y: 0, + ...defaultScale }; -} - -// node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js -var eraValues = { - narrow: ["B", "A"], - abbreviated: ["BC", "AD"], - wide: ["Before Christ", "Anno Domini"] -}; -var quarterValues = { - narrow: ["1", "2", "3", "4"], - abbreviated: ["Q1", "Q2", "Q3", "Q4"], - wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] }; -var monthValues = { - narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], - abbreviated: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - wide: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] +function getItemGap(rects, index, activeIndex) { + const currentRect = rects[index]; + const previousRect = rects[index - 1]; + const nextRect = rects[index + 1]; + if (!currentRect || !previousRect && !nextRect) { + return 0; + } + if (activeIndex < index) { + return previousRect ? currentRect.left - (previousRect.left + previousRect.width) : nextRect.left - (currentRect.left + currentRect.width); + } + return nextRect ? nextRect.left - (currentRect.left + currentRect.width) : currentRect.left - (previousRect.left + previousRect.width); +} +var rectSortingStrategy = (_ref) => { + let { + rects, + activeIndex, + overIndex, + index + } = _ref; + const newRects = arrayMove(rects, overIndex, activeIndex); + const oldRect = rects[index]; + const newRect = newRects[index]; + if (!newRect || !oldRect) { + return null; + } + return { + x: newRect.left - oldRect.left, + y: newRect.top - oldRect.top, + scaleX: newRect.width / oldRect.width, + scaleY: newRect.height / oldRect.height + }; }; -var dayValues = { - narrow: ["S", "M", "T", "W", "T", "F", "S"], - short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], - abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - wide: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] +var defaultScale$1 = { + scaleX: 1, + scaleY: 1 }; -var dayPeriodValues = { - narrow: { - am: "a", - pm: "p", - midnight: "mi", - noon: "n", - morning: "morning", - afternoon: "afternoon", - evening: "evening", - night: "night" - }, - abbreviated: { - am: "AM", - pm: "PM", - midnight: "midnight", - noon: "noon", - morning: "morning", - afternoon: "afternoon", - evening: "evening", - night: "night" - }, - wide: { - am: "a.m.", - pm: "p.m.", - midnight: "midnight", - noon: "noon", - morning: "morning", - afternoon: "afternoon", - evening: "evening", - night: "night" +var verticalListSortingStrategy = (_ref) => { + var _rects$activeIndex; + let { + activeIndex, + activeNodeRect: fallbackActiveRect, + index, + rects, + overIndex + } = _ref; + const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect; + if (!activeNodeRect) { + return null; } -}; -var formattingDayPeriodValues = { - narrow: { - am: "a", - pm: "p", - midnight: "mi", - noon: "n", - morning: "in the morning", - afternoon: "in the afternoon", - evening: "in the evening", - night: "at night" - }, - abbreviated: { - am: "AM", - pm: "PM", - midnight: "midnight", - noon: "noon", - morning: "in the morning", - afternoon: "in the afternoon", - evening: "in the evening", - night: "at night" - }, - wide: { - am: "a.m.", - pm: "p.m.", - midnight: "midnight", - noon: "noon", - morning: "in the morning", - afternoon: "in the afternoon", - evening: "in the evening", - night: "at night" - } -}; -var ordinalNumber = function ordinalNumber2(dirtyNumber, _options) { - var number = Number(dirtyNumber); - var rem100 = number % 100; - if (rem100 > 20 || rem100 < 10) { - switch (rem100 % 10) { - case 1: - return number + "st"; - case 2: - return number + "nd"; - case 3: - return number + "rd"; - } - } - return number + "th"; -}; -var localize = { - ordinalNumber, - era: buildLocalizeFn({ - values: eraValues, - defaultWidth: "wide" - }), - quarter: buildLocalizeFn({ - values: quarterValues, - defaultWidth: "wide", - argumentCallback: function argumentCallback(quarter) { - return quarter - 1; - } - }), - month: buildLocalizeFn({ - values: monthValues, - defaultWidth: "wide" - }), - day: buildLocalizeFn({ - values: dayValues, - defaultWidth: "wide" - }), - dayPeriod: buildLocalizeFn({ - values: dayPeriodValues, - defaultWidth: "wide", - formattingValues: formattingDayPeriodValues, - defaultFormattingWidth: "wide" - }) -}; -var localize_default = localize; - -// node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js -function buildMatchFn(args) { - return function(string) { - var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var width = options.width; - var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; - var matchResult = string.match(matchPattern); - if (!matchResult) { + if (index === activeIndex) { + const overIndexRect = rects[overIndex]; + if (!overIndexRect) { return null; } - var matchedString = matchResult[0]; - var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; - var key2 = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function(pattern) { - return pattern.test(matchedString); - }) : findKey(parsePatterns, function(pattern) { - return pattern.test(matchedString); - }); - var value; - value = args.valueCallback ? args.valueCallback(key2) : key2; - value = options.valueCallback ? options.valueCallback(value) : value; - var rest = string.slice(matchedString.length); return { - value, - rest + x: 0, + y: activeIndex < overIndex ? overIndexRect.top + overIndexRect.height - (activeNodeRect.top + activeNodeRect.height) : overIndexRect.top - activeNodeRect.top, + ...defaultScale$1 }; - }; -} -function findKey(object, predicate) { - for (var key2 in object) { - if (object.hasOwnProperty(key2) && predicate(object[key2])) { - return key2; - } - } - return void 0; -} -function findIndex(array, predicate) { - for (var key2 = 0; key2 < array.length; key2++) { - if (predicate(array[key2])) { - return key2; - } } - return void 0; -} - -// node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js -function buildMatchPatternFn(args) { - return function(string) { - var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var matchResult = string.match(args.matchPattern); - if (!matchResult) - return null; - var matchedString = matchResult[0]; - var parseResult = string.match(args.parsePattern); - if (!parseResult) - return null; - var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; - value = options.valueCallback ? options.valueCallback(value) : value; - var rest = string.slice(matchedString.length); + const itemGap = getItemGap$1(rects, index, activeIndex); + if (index > activeIndex && index <= overIndex) { return { - value, - rest + x: 0, + y: -activeNodeRect.height - itemGap, + ...defaultScale$1 }; - }; -} - -// node_modules/date-fns/esm/locale/en-US/_lib/match/index.js -var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; -var parseOrdinalNumberPattern = /\d+/i; -var matchEraPatterns = { - narrow: /^(b|a)/i, - abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, - wide: /^(before christ|before common era|anno domini|common era)/i -}; -var parseEraPatterns = { - any: [/^b/i, /^(a|c)/i] -}; -var matchQuarterPatterns = { - narrow: /^[1234]/i, - abbreviated: /^q[1234]/i, - wide: /^[1234](th|st|nd|rd)? quarter/i -}; -var parseQuarterPatterns = { - any: [/1/i, /2/i, /3/i, /4/i] -}; -var matchMonthPatterns = { - narrow: /^[jfmasond]/i, - abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, - wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i -}; -var parseMonthPatterns = { - narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i], - any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i] -}; -var matchDayPatterns = { - narrow: /^[smtwf]/i, - short: /^(su|mo|tu|we|th|fr|sa)/i, - abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, - wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i -}; -var parseDayPatterns = { - narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], - any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] -}; -var matchDayPeriodPatterns = { - narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, - any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i -}; -var parseDayPeriodPatterns = { - any: { - am: /^a/i, - pm: /^p/i, - midnight: /^mi/i, - noon: /^no/i, - morning: /morning/i, - afternoon: /afternoon/i, - evening: /evening/i, - night: /night/i } -}; -var match = { - ordinalNumber: buildMatchPatternFn({ - matchPattern: matchOrdinalNumberPattern, - parsePattern: parseOrdinalNumberPattern, - valueCallback: function valueCallback(value) { - return parseInt(value, 10); - } - }), - era: buildMatchFn({ - matchPatterns: matchEraPatterns, - defaultMatchWidth: "wide", - parsePatterns: parseEraPatterns, - defaultParseWidth: "any" - }), - quarter: buildMatchFn({ - matchPatterns: matchQuarterPatterns, - defaultMatchWidth: "wide", - parsePatterns: parseQuarterPatterns, - defaultParseWidth: "any", - valueCallback: function valueCallback2(index) { - return index + 1; - } - }), - month: buildMatchFn({ - matchPatterns: matchMonthPatterns, - defaultMatchWidth: "wide", - parsePatterns: parseMonthPatterns, - defaultParseWidth: "any" - }), - day: buildMatchFn({ - matchPatterns: matchDayPatterns, - defaultMatchWidth: "wide", - parsePatterns: parseDayPatterns, - defaultParseWidth: "any" - }), - dayPeriod: buildMatchFn({ - matchPatterns: matchDayPeriodPatterns, - defaultMatchWidth: "any", - parsePatterns: parseDayPeriodPatterns, - defaultParseWidth: "any" - }) -}; -var match_default = match; - -// node_modules/date-fns/esm/locale/en-US/index.js -var locale = { - code: "en-US", - formatDistance: formatDistance_default, - formatLong: formatLong_default, - formatRelative: formatRelative_default, - localize: localize_default, - match: match_default, - options: { - weekStartsOn: 0, - firstWeekContainsDate: 1 + if (index < activeIndex && index >= overIndex) { + return { + x: 0, + y: activeNodeRect.height + itemGap, + ...defaultScale$1 + }; } + return { + x: 0, + y: 0, + ...defaultScale$1 + }; }; -var en_US_default = locale; - -// node_modules/date-fns/esm/_lib/requiredArgs/index.js -function requiredArgs(required, args) { - if (args.length < required) { - throw new TypeError(required + " argument" + (required > 1 ? "s" : "") + " required, but only " + args.length + " present"); +function getItemGap$1(clientRects, index, activeIndex) { + const currentRect = clientRects[index]; + const previousRect = clientRects[index - 1]; + const nextRect = clientRects[index + 1]; + if (!currentRect) { + return 0; } -} - -// node_modules/date-fns/esm/isDate/index.js -function _typeof(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function _typeof5(obj2) { - return typeof obj2; - }; - } else { - _typeof = function _typeof5(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; + if (activeIndex < index) { + return previousRect ? currentRect.top - (previousRect.top + previousRect.height) : nextRect ? nextRect.top - (currentRect.top + currentRect.height) : 0; } - return _typeof(obj); -} -function isDate(value) { - requiredArgs(1, arguments); - return value instanceof Date || _typeof(value) === "object" && Object.prototype.toString.call(value) === "[object Date]"; + return nextRect ? nextRect.top - (currentRect.top + currentRect.height) : previousRect ? currentRect.top - (previousRect.top + previousRect.height) : 0; } - -// node_modules/date-fns/esm/toDate/index.js -function _typeof2(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof2 = function _typeof5(obj2) { - return typeof obj2; - }; - } else { - _typeof2 = function _typeof5(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; +var ID_PREFIX2 = "Sortable"; +var Context = /* @__PURE__ */ bn.createContext({ + activeIndex: -1, + containerId: ID_PREFIX2, + disableTransforms: false, + items: [], + overIndex: -1, + useDragOverlay: false, + sortedRects: [], + strategy: rectSortingStrategy, + disabled: { + draggable: false, + droppable: false } - return _typeof2(obj); -} -function toDate(argument) { - requiredArgs(1, arguments); - var argStr = Object.prototype.toString.call(argument); - if (argument instanceof Date || _typeof2(argument) === "object" && argStr === "[object Date]") { - return new Date(argument.getTime()); - } else if (typeof argument === "number" || argStr === "[object Number]") { - return new Date(argument); - } else { - if ((typeof argument === "string" || argStr === "[object String]") && typeof console !== "undefined") { - console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"); - console.warn(new Error().stack); +}); +function SortableContext(_ref) { + let { + children, + id: id2, + items: userDefinedItems, + strategy = rectSortingStrategy, + disabled: disabledProp = false + } = _ref; + const { + active, + dragOverlay, + droppableRects, + over, + measureDroppableContainers, + measuringScheduled + } = useDndContext(); + const containerId = useUniqueId(ID_PREFIX2, id2); + const useDragOverlay = Boolean(dragOverlay.rect !== null); + const items = F(() => userDefinedItems.map((item) => typeof item === "object" && "id" in item ? item.id : item), [userDefinedItems]); + const isDragging = active != null; + const activeIndex = active ? items.indexOf(active.id) : -1; + const overIndex = over ? items.indexOf(over.id) : -1; + const previousItemsRef = _2(items); + const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current); + const disableTransforms = overIndex !== -1 && activeIndex === -1 || itemsHaveChanged; + const disabled = normalizeDisabled(disabledProp); + useIsomorphicLayoutEffect(() => { + if (itemsHaveChanged && isDragging && !measuringScheduled) { + measureDroppableContainers(items); } - return new Date(NaN); - } + }, [itemsHaveChanged, items, isDragging, measureDroppableContainers, measuringScheduled]); + h2(() => { + previousItemsRef.current = items; + }, [items]); + const contextValue = F( + () => ({ + activeIndex, + containerId, + disabled, + disableTransforms, + items, + overIndex, + useDragOverlay, + sortedRects: getSortedRects(items, droppableRects), + strategy + }), + [activeIndex, containerId, disabled.draggable, disabled.droppable, disableTransforms, items, overIndex, droppableRects, useDragOverlay, strategy] + ); + return bn.createElement(Context.Provider, { + value: contextValue + }, children); } - -// node_modules/date-fns/esm/isValid/index.js -function isValid(dirtyDate) { - requiredArgs(1, arguments); - if (!isDate(dirtyDate) && typeof dirtyDate !== "number") { +var defaultNewIndexGetter = (_ref) => { + let { + id: id2, + items, + activeIndex, + overIndex + } = _ref; + return arrayMove(items, activeIndex, overIndex).indexOf(id2); +}; +var defaultAnimateLayoutChanges = (_ref2) => { + let { + containerId, + isSorting, + wasDragging, + index, + items, + newIndex, + previousItems, + previousContainerId, + transition + } = _ref2; + if (!transition || !wasDragging) { return false; } - var date = toDate(dirtyDate); - return !isNaN(Number(date)); -} - -// node_modules/date-fns/esm/_lib/toInteger/index.js -function toInteger(dirtyNumber) { - if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { - return NaN; + if (previousItems !== items && index === newIndex) { + return false; } - var number = Number(dirtyNumber); - if (isNaN(number)) { - return number; + if (isSorting) { + return true; } - return number < 0 ? Math.ceil(number) : Math.floor(number); -} - -// node_modules/date-fns/esm/addMilliseconds/index.js -function addMilliseconds(dirtyDate, dirtyAmount) { - requiredArgs(2, arguments); - var timestamp = toDate(dirtyDate).getTime(); - var amount = toInteger(dirtyAmount); - return new Date(timestamp + amount); -} - -// node_modules/date-fns/esm/subMilliseconds/index.js -function subMilliseconds(dirtyDate, dirtyAmount) { - requiredArgs(2, arguments); - var amount = toInteger(dirtyAmount); - return addMilliseconds(dirtyDate, -amount); -} - -// node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js -var MILLISECONDS_IN_DAY = 864e5; -function getUTCDayOfYear(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var timestamp = date.getTime(); - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); - var startOfYearTimestamp = date.getTime(); - var difference = timestamp - startOfYearTimestamp; - return Math.floor(difference / MILLISECONDS_IN_DAY) + 1; + return newIndex !== index && containerId === previousContainerId; +}; +var defaultTransition2 = { + duration: 200, + easing: "ease" +}; +var transitionProperty = "transform"; +var disabledTransition = /* @__PURE__ */ CSS.Transition.toString({ + property: transitionProperty, + duration: 0, + easing: "linear" +}); +var defaultAttributes = { + roleDescription: "sortable" +}; +function useDerivedTransform(_ref) { + let { + disabled, + index, + node, + rect + } = _ref; + const [derivedTransform, setDerivedtransform] = p2(null); + const previousIndex = _2(index); + useIsomorphicLayoutEffect(() => { + if (!disabled && index !== previousIndex.current && node.current) { + const initial = rect.current; + if (initial) { + const current = getClientRect(node.current, { + ignoreTransform: true + }); + const delta = { + x: initial.left - current.left, + y: initial.top - current.top, + scaleX: initial.width / current.width, + scaleY: initial.height / current.height + }; + if (delta.x || delta.y) { + setDerivedtransform(delta); + } + } + } + if (index !== previousIndex.current) { + previousIndex.current = index; + } + }, [disabled, index, node, rect]); + h2(() => { + if (derivedTransform) { + requestAnimationFrame(() => { + setDerivedtransform(null); + }); + } + }, [derivedTransform]); + return derivedTransform; } - -// node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js -function startOfUTCISOWeek(dirtyDate) { - requiredArgs(1, arguments); - var weekStartsOn = 1; - var date = toDate(dirtyDate); - var day = date.getUTCDay(); - var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; - date.setUTCDate(date.getUTCDate() - diff); - date.setUTCHours(0, 0, 0, 0); - return date; -} - -// node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js -function getUTCISOWeekYear(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var year = date.getUTCFullYear(); - var fourthOfJanuaryOfNextYear = new Date(0); - fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4); - fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0); - var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear); - var fourthOfJanuaryOfThisYear = new Date(0); - fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4); - fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0); - var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear); - if (date.getTime() >= startOfNextYear.getTime()) { - return year + 1; - } else if (date.getTime() >= startOfThisYear.getTime()) { - return year; - } else { - return year - 1; +function useSortable(_ref) { + let { + animateLayoutChanges: animateLayoutChanges3 = defaultAnimateLayoutChanges, + attributes: userDefinedAttributes, + disabled: localDisabled, + data: customData, + getNewIndex = defaultNewIndexGetter, + id: id2, + strategy: localStrategy, + resizeObserverConfig, + transition = defaultTransition2 + } = _ref; + const { + items, + containerId, + activeIndex, + disabled: globalDisabled, + disableTransforms, + sortedRects, + overIndex, + useDragOverlay, + strategy: globalStrategy + } = q2(Context); + const disabled = normalizeLocalDisabled(localDisabled, globalDisabled); + const index = items.indexOf(id2); + const data = F(() => ({ + sortable: { + containerId, + index, + items + }, + ...customData + }), [containerId, customData, index, items]); + const itemsAfterCurrentSortable = F(() => items.slice(items.indexOf(id2)), [items, id2]); + const { + rect, + node, + isOver, + setNodeRef: setDroppableNodeRef + } = useDroppable({ + id: id2, + data, + disabled: disabled.droppable, + resizeObserverConfig: { + updateMeasurementsFor: itemsAfterCurrentSortable, + ...resizeObserverConfig + } + }); + const { + active, + activatorEvent, + activeNodeRect, + attributes, + setNodeRef: setDraggableNodeRef, + listeners, + isDragging, + over, + setActivatorNodeRef, + transform + } = useDraggable({ + id: id2, + data, + attributes: { + ...defaultAttributes, + ...userDefinedAttributes + }, + disabled: disabled.draggable + }); + const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef); + const isSorting = Boolean(active); + const displaceItem = isSorting && !disableTransforms && isValidIndex(activeIndex) && isValidIndex(overIndex); + const shouldDisplaceDragSource = !useDragOverlay && isDragging; + const dragSourceDisplacement = shouldDisplaceDragSource && displaceItem ? transform : null; + const strategy = localStrategy != null ? localStrategy : globalStrategy; + const finalTransform = displaceItem ? dragSourceDisplacement != null ? dragSourceDisplacement : strategy({ + rects: sortedRects, + activeNodeRect, + activeIndex, + overIndex, + index + }) : null; + const newIndex = isValidIndex(activeIndex) && isValidIndex(overIndex) ? getNewIndex({ + id: id2, + items, + activeIndex, + overIndex + }) : index; + const activeId = active == null ? void 0 : active.id; + const previous = _2({ + activeId, + items, + newIndex, + containerId + }); + const itemsHaveChanged = items !== previous.current.items; + const shouldAnimateLayoutChanges = animateLayoutChanges3({ + active, + containerId, + isDragging, + isSorting, + id: id2, + index, + items, + newIndex: previous.current.newIndex, + previousItems: previous.current.items, + previousContainerId: previous.current.containerId, + transition, + wasDragging: previous.current.activeId != null + }); + const derivedTransform = useDerivedTransform({ + disabled: !shouldAnimateLayoutChanges, + index, + node, + rect + }); + h2(() => { + if (isSorting && previous.current.newIndex !== newIndex) { + previous.current.newIndex = newIndex; + } + if (containerId !== previous.current.containerId) { + previous.current.containerId = containerId; + } + if (items !== previous.current.items) { + previous.current.items = items; + } + }, [isSorting, newIndex, containerId, items]); + h2(() => { + if (activeId === previous.current.activeId) { + return; + } + if (activeId && !previous.current.activeId) { + previous.current.activeId = activeId; + return; + } + const timeoutId = setTimeout(() => { + previous.current.activeId = activeId; + }, 50); + return () => clearTimeout(timeoutId); + }, [activeId]); + return { + active, + activeIndex, + attributes, + data, + rect, + index, + newIndex, + items, + isOver, + isSorting, + isDragging, + listeners, + node, + overIndex, + over, + setNodeRef, + setActivatorNodeRef, + setDroppableNodeRef, + setDraggableNodeRef, + transform: derivedTransform != null ? derivedTransform : finalTransform, + transition: getTransition() + }; + function getTransition() { + if (derivedTransform || itemsHaveChanged && previous.current.newIndex === index) { + return disabledTransition; + } + if (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent) || !transition) { + return void 0; + } + if (isSorting || shouldAnimateLayoutChanges) { + return CSS.Transition.toString({ + ...transition, + property: transitionProperty + }); + } + return void 0; } } - -// node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js -function startOfUTCISOWeekYear(dirtyDate) { - requiredArgs(1, arguments); - var year = getUTCISOWeekYear(dirtyDate); - var fourthOfJanuary = new Date(0); - fourthOfJanuary.setUTCFullYear(year, 0, 4); - fourthOfJanuary.setUTCHours(0, 0, 0, 0); - var date = startOfUTCISOWeek(fourthOfJanuary); - return date; -} - -// node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js -var MILLISECONDS_IN_WEEK = 6048e5; -function getUTCISOWeek(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); - return Math.round(diff / MILLISECONDS_IN_WEEK) + 1; -} - -// node_modules/date-fns/esm/_lib/defaultOptions/index.js -var defaultOptions = {}; -function getDefaultOptions() { - return defaultOptions; +function normalizeLocalDisabled(localDisabled, globalDisabled) { + var _localDisabled$dragga, _localDisabled$droppa; + if (typeof localDisabled === "boolean") { + return { + draggable: localDisabled, + droppable: false + }; + } + return { + draggable: (_localDisabled$dragga = localDisabled == null ? void 0 : localDisabled.draggable) != null ? _localDisabled$dragga : globalDisabled.draggable, + droppable: (_localDisabled$droppa = localDisabled == null ? void 0 : localDisabled.droppable) != null ? _localDisabled$droppa : globalDisabled.droppable + }; } - -// node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js -function startOfUTCWeek(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; - requiredArgs(1, arguments); - var defaultOptions3 = getDefaultOptions(); - var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); - if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { - throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); +function hasSortableData(entry) { + if (!entry) { + return false; } - var date = toDate(dirtyDate); - var day = date.getUTCDay(); - var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; - date.setUTCDate(date.getUTCDate() - diff); - date.setUTCHours(0, 0, 0, 0); - return date; + const data = entry.data.current; + if (data && "sortable" in data && typeof data.sortable === "object" && "containerId" in data.sortable && "items" in data.sortable && "index" in data.sortable) { + return true; + } + return false; } - -// node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js -function getUTCWeekYear(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var year = date.getUTCFullYear(); - var defaultOptions3 = getDefaultOptions(); - var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); - if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { - throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); +var directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left]; +var sortableKeyboardCoordinates = (event, _ref) => { + let { + context: { + active, + collisionRect, + droppableRects, + droppableContainers, + over, + scrollableAncestors + } + } = _ref; + if (directions.includes(event.code)) { + event.preventDefault(); + if (!active || !collisionRect) { + return; + } + const filteredContainers = []; + droppableContainers.getEnabled().forEach((entry) => { + if (!entry || entry != null && entry.disabled) { + return; + } + const rect = droppableRects.get(entry.id); + if (!rect) { + return; + } + switch (event.code) { + case KeyboardCode.Down: + if (collisionRect.top < rect.top) { + filteredContainers.push(entry); + } + break; + case KeyboardCode.Up: + if (collisionRect.top > rect.top) { + filteredContainers.push(entry); + } + break; + case KeyboardCode.Left: + if (collisionRect.left > rect.left) { + filteredContainers.push(entry); + } + break; + case KeyboardCode.Right: + if (collisionRect.left < rect.left) { + filteredContainers.push(entry); + } + break; + } + }); + const collisions = closestCorners({ + active, + collisionRect, + droppableRects, + droppableContainers: filteredContainers, + pointerCoordinates: null + }); + let closestId = getFirstCollision(collisions, "id"); + if (closestId === (over == null ? void 0 : over.id) && collisions.length > 1) { + closestId = collisions[1].id; + } + if (closestId != null) { + const activeDroppable = droppableContainers.get(active.id); + const newDroppable = droppableContainers.get(closestId); + const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null; + const newNode = newDroppable == null ? void 0 : newDroppable.node.current; + if (newNode && newRect && activeDroppable && newDroppable) { + const newScrollAncestors = getScrollableAncestors(newNode); + const hasDifferentScrollAncestors = newScrollAncestors.some((element, index) => scrollableAncestors[index] !== element); + const hasSameContainer = isSameContainer(activeDroppable, newDroppable); + const isAfterActive = isAfter(activeDroppable, newDroppable); + const offset = hasDifferentScrollAncestors || !hasSameContainer ? { + x: 0, + y: 0 + } : { + x: isAfterActive ? collisionRect.width - newRect.width : 0, + y: isAfterActive ? collisionRect.height - newRect.height : 0 + }; + const rectCoordinates = { + x: newRect.left, + y: newRect.top + }; + const newCoordinates = offset.x && offset.y ? rectCoordinates : subtract(rectCoordinates, offset); + return newCoordinates; + } + } } - var firstWeekOfNextYear = new Date(0); - firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate); - firstWeekOfNextYear.setUTCHours(0, 0, 0, 0); - var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options); - var firstWeekOfThisYear = new Date(0); - firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate); - firstWeekOfThisYear.setUTCHours(0, 0, 0, 0); - var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options); - if (date.getTime() >= startOfNextYear.getTime()) { - return year + 1; - } else if (date.getTime() >= startOfThisYear.getTime()) { - return year; - } else { - return year - 1; + return void 0; +}; +function isSameContainer(a5, b4) { + if (!hasSortableData(a5) || !hasSortableData(b4)) { + return false; } + return a5.data.current.sortable.containerId === b4.data.current.sortable.containerId; } - -// node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js -function startOfUTCWeekYear(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; - requiredArgs(1, arguments); - var defaultOptions3 = getDefaultOptions(); - var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); - var year = getUTCWeekYear(dirtyDate, options); - var firstWeek = new Date(0); - firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate); - firstWeek.setUTCHours(0, 0, 0, 0); - var date = startOfUTCWeek(firstWeek, options); - return date; +function isAfter(a5, b4) { + if (!hasSortableData(a5) || !hasSortableData(b4)) { + return false; + } + if (!isSameContainer(a5, b4)) { + return false; + } + return a5.data.current.sortable.index < b4.data.current.sortable.index; } -// node_modules/date-fns/esm/_lib/getUTCWeek/index.js -var MILLISECONDS_IN_WEEK2 = 6048e5; -function getUTCWeek(dirtyDate, options) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); - return Math.round(diff / MILLISECONDS_IN_WEEK2) + 1; -} +// src/components/ContextView/CardsView/CardsView.tsx +var import_classnames3 = __toESM(require_classnames()); -// node_modules/date-fns/esm/_lib/addLeadingZeros/index.js -function addLeadingZeros(number, targetLength) { - var sign = number < 0 ? "-" : ""; - var output = Math.abs(number).toString(); - while (output.length < targetLength) { - output = "0" + output; - } - return sign + output; -} +// src/utils/contexts/fm.ts +var import_lodash = __toESM(require_lodash()); +var import_obsidian2 = require("obsidian"); +var import_obsidian_dataview = __toESM(require_lib()); -// node_modules/date-fns/esm/_lib/format/lightFormatters/index.js -var formatters = { - y: function y3(date, token) { - var signedYear = date.getUTCFullYear(); - var year = signedYear > 0 ? signedYear : 1 - signedYear; - return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); +// src/utils/contexts/predicate/filter.ts +var stringEqual = (value, filterValue) => { + return value == filterValue; +}; +var stringCompare = (value, filterValue) => { + return (value != null ? value : "").toLowerCase().includes((filterValue != null ? filterValue : "").toLowerCase()); +}; +var greaterThan = (value, filterValue) => { + return parseFloat(value) > parseFloat(filterValue); +}; +var lessThan = (value, filterValue) => { + return parseInt(value) > parseInt(filterValue); +}; +var listIncludes = (value, filterValue) => { + const valueList = value ? splitString(value) : []; + const strings = filterValue ? splitString(filterValue) : []; + return strings.some((f4) => valueList.some((g4) => g4 == f4)); +}; +var filterFnTypes = { + include: { + type: ["text", "file", "link", "link-multi"], + fn: stringCompare, + label: "contains", + valueType: "text" }, - M: function M3(date, token) { - var month = date.getUTCMonth(); - return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); + notInclude: { + type: ["text", "file", "link", "link-multi"], + fn: (v3, f4) => !stringCompare(v3, f4), + label: "does not contain", + valueType: "text" }, - d: function d3(date, token) { - return addLeadingZeros(date.getUTCDate(), token.length); + is: { + type: ["text", "file", "link", "context"], + fn: stringEqual, + label: "is", + valueType: "text" }, - a: function a3(date, token) { - var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? "pm" : "am"; - switch (token) { - case "a": - case "aa": - return dayPeriodEnumValue.toUpperCase(); - case "aaa": - return dayPeriodEnumValue; - case "aaaaa": - return dayPeriodEnumValue[0]; - case "aaaa": - default: - return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; - } + isNot: { + type: ["text", "file", "link", "context"], + fn: (v3, f4) => !stringEqual(v3, f4), + label: "is not", + valueType: "text" }, - h: function h3(date, token) { - return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length); + equal: { + type: ["number"], + fn: stringEqual, + label: "=", + valueType: "number" }, - H: function H3(date, token) { - return addLeadingZeros(date.getUTCHours(), token.length); + isGreatThan: { + type: ["number"], + fn: greaterThan, + label: ">", + valueType: "number" }, - m: function m3(date, token) { - return addLeadingZeros(date.getUTCMinutes(), token.length); + isLessThan: { + type: ["number"], + fn: lessThan, + label: "<", + valueType: "number" }, - s: function s3(date, token) { - return addLeadingZeros(date.getUTCSeconds(), token.length); + isLessThanOrEqual: { + type: ["number"], + fn: (v3, f4) => !greaterThan(v3, f4), + label: "\u2264", + valueType: "number" }, - S: function S2(date, token) { - var numberOfDigits = token.length; - var milliseconds = date.getUTCMilliseconds(); - var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3)); - return addLeadingZeros(fractionalSeconds, token.length); - } -}; -var lightFormatters_default = formatters; - -// node_modules/date-fns/esm/_lib/format/formatters/index.js -var dayPeriodEnum = { - am: "am", - pm: "pm", - midnight: "midnight", - noon: "noon", - morning: "morning", - afternoon: "afternoon", - evening: "evening", - night: "night" -}; -var formatters2 = { - G: function G2(date, token, localize2) { - var era = date.getUTCFullYear() > 0 ? 1 : 0; - switch (token) { - case "G": - case "GG": - case "GGG": - return localize2.era(era, { - width: "abbreviated" - }); - case "GGGGG": - return localize2.era(era, { - width: "narrow" - }); - case "GGGG": - default: - return localize2.era(era, { - width: "wide" - }); - } + isGreatThanOrEqual: { + type: ["number"], + fn: (v3, f4) => !lessThan(v3, f4), + label: "\u2265", + valueType: "number" }, - y: function y4(date, token, localize2) { - if (token === "yo") { - var signedYear = date.getUTCFullYear(); - var year = signedYear > 0 ? signedYear : 1 - signedYear; - return localize2.ordinalNumber(year, { - unit: "year" - }); - } - return lightFormatters_default.y(date, token); + dateBefore: { + type: ["date"], + fn: lessThan, + label: "before", + valueType: "date" }, - Y: function Y2(date, token, localize2, options) { - var signedWeekYear = getUTCWeekYear(date, options); - var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; - if (token === "YY") { - var twoDigitYear = weekYear % 100; - return addLeadingZeros(twoDigitYear, 2); - } - if (token === "Yo") { - return localize2.ordinalNumber(weekYear, { - unit: "year" - }); - } - return addLeadingZeros(weekYear, token.length); + dateAfter: { + type: ["date"], + fn: greaterThan, + label: "after", + valueType: "date" }, - R: function R2(date, token) { - var isoWeekYear = getUTCISOWeekYear(date); - return addLeadingZeros(isoWeekYear, token.length); + isAnyInList: { + type: ["option", "context", "option-multi", "context-multi"], + fn: listIncludes, + label: "is any of", + valueType: "list" }, - u: function u3(date, token) { - var year = date.getUTCFullYear(); - return addLeadingZeros(year, token.length); + isNoneInList: { + type: ["option", "context", "option-multi", "context-multi"], + fn: (v3, f4) => !listIncludes(v3, f4), + label: "is none of", + valueType: "list" }, - Q: function Q2(date, token, localize2) { - var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); - switch (token) { - case "Q": - return String(quarter); - case "QQ": - return addLeadingZeros(quarter, 2); - case "Qo": - return localize2.ordinalNumber(quarter, { - unit: "quarter" - }); - case "QQQ": - return localize2.quarter(quarter, { - width: "abbreviated", - context: "formatting" - }); - case "QQQQQ": - return localize2.quarter(quarter, { - width: "narrow", - context: "formatting" - }); - case "QQQQ": - default: - return localize2.quarter(quarter, { - width: "wide", - context: "formatting" - }); - } + isTrue: { + type: ["boolean"], + fn: (v3, f4) => v3 == "true", + label: "is checked", + valueType: "boolean" }, - q: function q4(date, token, localize2) { - var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); - switch (token) { - case "q": - return String(quarter); - case "qq": - return addLeadingZeros(quarter, 2); - case "qo": - return localize2.ordinalNumber(quarter, { - unit: "quarter" - }); - case "qqq": - return localize2.quarter(quarter, { - width: "abbreviated", - context: "standalone" - }); - case "qqqqq": - return localize2.quarter(quarter, { - width: "narrow", - context: "standalone" - }); - case "qqqq": - default: - return localize2.quarter(quarter, { - width: "wide", - context: "standalone" - }); - } + isFalse: { + type: ["boolean"], + fn: (v3, f4) => v3 != "true", + label: "is unchecked", + valueType: "boolean" + } +}; +var filterReturnForCol = (col, filter, row) => { + if (!col) + return true; + const filterType = filterFnTypes[filter.type]; + let result = true; + if (filterType) { + result = filterType.fn(row[filter.field], filter.value); + } + return result; +}; + +// src/utils/contexts/predicate/sort.ts +var simpleSort = (a5, b4) => { + if (a5 < b4) + return -1; + if (a5 > b4) + return 1; + return 0; +}; +var stringSort = (value, filterValue) => simpleSort(value, filterValue); +var numSort = (value, filterValue) => simpleSort(parseFloat(value), parseFloat(filterValue)); +var boolSort = (value, filterValue) => simpleSort(value == "true" ? 1 : 0, filterValue == "true" ? 1 : 0); +var countSort = (value, filterValue) => simpleSort(splitString(value).length, splitString(filterValue).length); +var normalizedSortForType = (type, desc) => { + return Object.keys(sortFnTypes).find( + (f4) => sortFnTypes[f4].type.some((g4) => g4 == type) && sortFnTypes[f4].desc == desc + ); +}; +var sortFnTypes = { + alphabetical: { + type: ["text", "file", "link", "context"], + fn: stringSort, + label: "A to Z", + desc: false }, - M: function M4(date, token, localize2) { - var month = date.getUTCMonth(); - switch (token) { - case "M": - case "MM": - return lightFormatters_default.M(date, token); - case "Mo": - return localize2.ordinalNumber(month + 1, { - unit: "month" - }); - case "MMM": - return localize2.month(month, { - width: "abbreviated", - context: "formatting" - }); - case "MMMMM": - return localize2.month(month, { - width: "narrow", - context: "formatting" - }); - case "MMMM": - default: - return localize2.month(month, { - width: "wide", - context: "formatting" - }); - } + reverseAlphabetical: { + type: ["text", "file", "link", "context"], + fn: (v3, f4) => stringSort(v3, f4) * -1, + label: "Z to A", + desc: true }, - L: function L3(date, token, localize2) { - var month = date.getUTCMonth(); - switch (token) { - case "L": - return String(month + 1); - case "LL": - return addLeadingZeros(month + 1, 2); - case "Lo": - return localize2.ordinalNumber(month + 1, { - unit: "month" - }); - case "LLL": - return localize2.month(month, { - width: "abbreviated", - context: "standalone" - }); - case "LLLLL": - return localize2.month(month, { - width: "narrow", - context: "standalone" - }); - case "LLLL": - default: - return localize2.month(month, { - width: "wide", - context: "standalone" - }); - } + boolean: { + type: ["boolean"], + fn: boolSort, + label: "Checked \u2192 Unchecked", + desc: false }, - w: function w4(date, token, localize2, options) { - var week = getUTCWeek(date, options); - if (token === "wo") { - return localize2.ordinalNumber(week, { - unit: "week" - }); - } - return addLeadingZeros(week, token.length); + booleanReverse: { + type: ["boolean"], + fn: (v3, f4) => boolSort(v3, f4) * -1, + label: "Unchecked \u2192 Checked", + desc: true }, - I: function I3(date, token, localize2) { - var isoWeek = getUTCISOWeek(date); - if (token === "Io") { - return localize2.ordinalNumber(isoWeek, { - unit: "week" - }); - } - return addLeadingZeros(isoWeek, token.length); + number: { + type: ["number"], + fn: numSort, + label: "1 \u2192 9", + desc: false }, - d: function d4(date, token, localize2) { - if (token === "do") { - return localize2.ordinalNumber(date.getUTCDate(), { - unit: "date" - }); - } - return lightFormatters_default.d(date, token); + reverseNumber: { + type: ["number"], + fn: (v3, f4) => numSort(v3, f4) * -1, + label: "9 \u2192 1", + desc: true }, - D: function D2(date, token, localize2) { - var dayOfYear = getUTCDayOfYear(date); - if (token === "Do") { - return localize2.ordinalNumber(dayOfYear, { - unit: "dayOfYear" + count: { + type: ["option-multi", "context-multi", "link-multi"], + fn: countSort, + label: "Most Items", + desc: true + }, + reverseCount: { + type: ["option-multi", "context-multi", "link-multi"], + fn: (v3, f4) => countSort(v3, f4) * -1, + label: "Least Items", + desc: false + } +}; +var sortReturnForCol = (col, sort, row, row2) => { + if (!col) + return 0; + const sortType = sortFnTypes[sort.type]; + if (sortType) { + return sortType.fn(row[sort.field], row2[sort.field]); + } + return 0; +}; + +// src/utils/contexts/predicate/predicate.tsx +var defaultPredicateFnForType = (type, types) => { + const fnType = Object.keys(types).find( + (f4) => types[f4].type.find((g4) => g4 == type) + ); + return fnType; +}; +var predicateFnsForType = (type, types) => { + const fnTypes = Object.keys(types).filter( + (f4) => types[f4].type.find((g4) => g4 == type) + ); + return fnTypes; +}; +var cleanPredicateType = (type, definedTypes) => { + return type.filter((f4) => Object.keys(definedTypes).find((g4) => g4 == f4.type)); +}; +var validatePredicate = (prevPredicate) => { + if (!prevPredicate) { + return defaultPredicate; + } + return { + ...defaultPredicate, + filters: Array.isArray(prevPredicate.filters) ? cleanPredicateType(prevPredicate.filters, filterFnTypes) : [], + sort: Array.isArray(prevPredicate.sort) ? cleanPredicateType(prevPredicate.sort, sortFnTypes) : [], + groupBy: Array.isArray(prevPredicate.groupBy) ? prevPredicate.groupBy : [], + colsOrder: Array.isArray(prevPredicate.colsOrder) ? prevPredicate.colsOrder : [], + colsHidden: Array.isArray(prevPredicate.colsHidden) ? prevPredicate.colsHidden : [], + colsSize: prevPredicate.colsSize + }; +}; +var defaultPredicate = { + filters: [], + sort: [], + groupBy: [], + colsOrder: [], + colsHidden: [], + colsSize: {} +}; +var splitString = (str) => { + var _a2; + return (_a2 = str == null ? void 0 : str.match(/(\\.|[^,])+/g)) != null ? _a2 : []; +}; + +// src/utils/contexts/fm.ts +var saveContextToFile = (file, cols, context) => { + if (app.fileManager.processFrontMatter) { + app.fileManager.processFrontMatter(file, (frontmatter) => { + Object.keys(context).filter( + (f4) => cols.find((c4) => c4.name == f4) && cols.find((c4) => c4.name == f4).hidden != "true" && !cols.find((c4) => c4.name == f4).type.contains("file") && context[f4] + ).forEach((c4) => { + frontmatter[c4] = context[c4]; }); + }); + } +}; +var frontMatterForFile = (file) => { + let currentCache; + if (file instanceof import_obsidian2.TFile && app.metadataCache.getFileCache(file) !== null) { + currentCache = app.metadataCache.getFileCache(file); + } + return currentCache == null ? void 0 : currentCache.frontmatter; +}; +var frontMatterKeys = (fm) => { + return Object.keys(fm != null ? fm : {}).filter((f4) => f4 != "position"); +}; +var yamlTypeToMDBType = (YAMLtype) => { + switch (YAMLtype) { + case "duration": + return "text"; + break; + case "unknown": + return "text"; + break; + } + return YAMLtype; +}; +var detectYAMLType = (value, key2) => { + if (typeof value === "string") { + if (/\/\/(\S+?(?:jpe?g|png|gif|svg))/gi.test(value) || value.contains("unsplash")) { + return "image"; } - return addLeadingZeros(dayOfYear, token.length); - }, - E: function E2(date, token, localize2) { - var dayOfWeek = date.getUTCDay(); - switch (token) { - case "E": - case "EE": - case "EEE": - return localize2.day(dayOfWeek, { - width: "abbreviated", - context: "formatting" - }); - case "EEEEE": - return localize2.day(dayOfWeek, { - width: "narrow", - context: "formatting" - }); - case "EEEEEE": - return localize2.day(dayOfWeek, { - width: "short", - context: "formatting" - }); - case "EEEE": - default: - return localize2.day(dayOfWeek, { - width: "wide", - context: "formatting" - }); + if (/^\d{4}-\d{2}-\d{2}$/.test(value)) { + return "date"; } - }, - e: function e3(date, token, localize2, options) { - var dayOfWeek = date.getUTCDay(); - var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; - switch (token) { - case "e": - return String(localDayOfWeek); - case "ee": - return addLeadingZeros(localDayOfWeek, 2); - case "eo": - return localize2.ordinalNumber(localDayOfWeek, { - unit: "day" - }); - case "eee": - return localize2.day(dayOfWeek, { - width: "abbreviated", - context: "formatting" - }); - case "eeeee": - return localize2.day(dayOfWeek, { - width: "narrow", - context: "formatting" - }); - case "eeeeee": - return localize2.day(dayOfWeek, { - width: "short", - context: "formatting" - }); - case "eeee": - default: - return localize2.day(dayOfWeek, { - width: "wide", - context: "formatting" - }); + if (key2 == "tag" || key2 == "tags") { + return "tag"; } - }, - c: function c3(date, token, localize2, options) { - var dayOfWeek = date.getUTCDay(); - var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; - switch (token) { - case "c": - return String(localDayOfWeek); - case "cc": - return addLeadingZeros(localDayOfWeek, token.length); - case "co": - return localize2.ordinalNumber(localDayOfWeek, { - unit: "day" - }); - case "ccc": - return localize2.day(dayOfWeek, { - width: "abbreviated", - context: "standalone" - }); - case "ccccc": - return localize2.day(dayOfWeek, { - width: "narrow", - context: "standalone" - }); - case "cccccc": - return localize2.day(dayOfWeek, { - width: "short", - context: "standalone" - }); - case "cccc": - default: - return localize2.day(dayOfWeek, { - width: "wide", - context: "standalone" - }); + return "text"; + } else if (typeof value === "number") { + return "number"; + } else if (typeof value === "boolean") { + return "boolean"; + } else if (!value) { + return "unknown"; + } else if (Array.isArray(value)) { + if (key2 == "tag" || key2 == "tags") { + return "tag-multi"; } - }, - i: function i3(date, token, localize2) { - var dayOfWeek = date.getUTCDay(); - var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; - switch (token) { - case "i": - return String(isoDayOfWeek); - case "ii": - return addLeadingZeros(isoDayOfWeek, token.length); - case "io": - return localize2.ordinalNumber(isoDayOfWeek, { - unit: "day" - }); - case "iii": - return localize2.day(dayOfWeek, { - width: "abbreviated", - context: "formatting" - }); - case "iiiii": - return localize2.day(dayOfWeek, { - width: "narrow", - context: "formatting" - }); - case "iiiiii": - return localize2.day(dayOfWeek, { - width: "short", - context: "formatting" - }); - case "iiii": - default: - return localize2.day(dayOfWeek, { - width: "wide", - context: "formatting" - }); + const types = uniq(value.map((f4) => detectYAMLType(f4, key2))); + if (types.length == 1 && types[0] == "link") { + return "link-multi"; } - }, - a: function a4(date, token, localize2) { - var hours = date.getUTCHours(); - var dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; - switch (token) { - case "a": - case "aa": - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "abbreviated", - context: "formatting" - }); - case "aaa": - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "abbreviated", - context: "formatting" - }).toLowerCase(); - case "aaaaa": - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "narrow", - context: "formatting" - }); - case "aaaa": - default: - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "wide", - context: "formatting" - }); - } - }, - b: function b3(date, token, localize2) { - var hours = date.getUTCHours(); - var dayPeriodEnumValue; - if (hours === 12) { - dayPeriodEnumValue = dayPeriodEnum.noon; - } else if (hours === 0) { - dayPeriodEnumValue = dayPeriodEnum.midnight; - } else { - dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; - } - switch (token) { - case "b": - case "bb": - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "abbreviated", - context: "formatting" - }); - case "bbb": - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "abbreviated", - context: "formatting" - }).toLowerCase(); - case "bbbbb": - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "narrow", - context: "formatting" - }); - case "bbbb": - default: - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "wide", - context: "formatting" - }); - } - }, - B: function B4(date, token, localize2) { - var hours = date.getUTCHours(); - var dayPeriodEnumValue; - if (hours >= 17) { - dayPeriodEnumValue = dayPeriodEnum.evening; - } else if (hours >= 12) { - dayPeriodEnumValue = dayPeriodEnum.afternoon; - } else if (hours >= 4) { - dayPeriodEnumValue = dayPeriodEnum.morning; - } else { - dayPeriodEnumValue = dayPeriodEnum.night; - } - switch (token) { - case "B": - case "BB": - case "BBB": - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "abbreviated", - context: "formatting" - }); - case "BBBBB": - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "narrow", - context: "formatting" - }); - case "BBBB": - default: - return localize2.dayPeriod(dayPeriodEnumValue, { - width: "wide", - context: "formatting" - }); - } - }, - h: function h4(date, token, localize2) { - if (token === "ho") { - var hours = date.getUTCHours() % 12; - if (hours === 0) - hours = 12; - return localize2.ordinalNumber(hours, { - unit: "hour" - }); - } - return lightFormatters_default.h(date, token); - }, - H: function H4(date, token, localize2) { - if (token === "Ho") { - return localize2.ordinalNumber(date.getUTCHours(), { - unit: "hour" - }); - } - return lightFormatters_default.H(date, token); - }, - K: function K2(date, token, localize2) { - var hours = date.getUTCHours() % 12; - if (token === "Ko") { - return localize2.ordinalNumber(hours, { - unit: "hour" - }); - } - return addLeadingZeros(hours, token.length); - }, - k: function k4(date, token, localize2) { - var hours = date.getUTCHours(); - if (hours === 0) - hours = 24; - if (token === "ko") { - return localize2.ordinalNumber(hours, { - unit: "hour" - }); - } - return addLeadingZeros(hours, token.length); - }, - m: function m4(date, token, localize2) { - if (token === "mo") { - return localize2.ordinalNumber(date.getUTCMinutes(), { - unit: "minute" - }); - } - return lightFormatters_default.m(date, token); - }, - s: function s4(date, token, localize2) { - if (token === "so") { - return localize2.ordinalNumber(date.getUTCSeconds(), { - unit: "second" - }); - } - return lightFormatters_default.s(date, token); - }, - S: function S3(date, token) { - return lightFormatters_default.S(date, token); - }, - X: function X2(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timezoneOffset = originalDate.getTimezoneOffset(); - if (timezoneOffset === 0) { - return "Z"; - } - switch (token) { - case "X": - return formatTimezoneWithOptionalMinutes(timezoneOffset); - case "XXXX": - case "XX": - return formatTimezone(timezoneOffset); - case "XXXXX": - case "XXX": - default: - return formatTimezone(timezoneOffset, ":"); - } - }, - x: function x4(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timezoneOffset = originalDate.getTimezoneOffset(); - switch (token) { - case "x": - return formatTimezoneWithOptionalMinutes(timezoneOffset); - case "xxxx": - case "xx": - return formatTimezone(timezoneOffset); - case "xxxxx": - case "xxx": - default: - return formatTimezone(timezoneOffset, ":"); - } - }, - O: function O3(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timezoneOffset = originalDate.getTimezoneOffset(); - switch (token) { - case "O": - case "OO": - case "OOO": - return "GMT" + formatTimezoneShort(timezoneOffset, ":"); - case "OOOO": - default: - return "GMT" + formatTimezone(timezoneOffset, ":"); - } - }, - z: function z4(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timezoneOffset = originalDate.getTimezoneOffset(); - switch (token) { - case "z": - case "zz": - case "zzz": - return "GMT" + formatTimezoneShort(timezoneOffset, ":"); - case "zzzz": - default: - return "GMT" + formatTimezone(timezoneOffset, ":"); - } - }, - t: function t3(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timestamp = Math.floor(originalDate.getTime() / 1e3); - return addLeadingZeros(timestamp, token.length); - }, - T: function T5(date, token, _localize, options) { - var originalDate = options._originalDate || date; - var timestamp = originalDate.getTime(); - return addLeadingZeros(timestamp, token.length); + return "option-multi"; + } else if (value.isLuxonDateTime) { + return "date"; + } else if (value.isLuxonDuration) { + return "duration"; + } else if (value.type == "file") { + return "link"; } + return "text"; }; -function formatTimezoneShort(offset, dirtyDelimiter) { - var sign = offset > 0 ? "-" : "+"; - var absOffset = Math.abs(offset); - var hours = Math.floor(absOffset / 60); - var minutes = absOffset % 60; - if (minutes === 0) { - return sign + String(hours); - } - var delimiter = dirtyDelimiter || ""; - return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); -} -function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) { - if (offset % 60 === 0) { - var sign = offset > 0 ? "-" : "+"; - return sign + addLeadingZeros(Math.abs(offset) / 60, 2); - } - return formatTimezone(offset, dirtyDelimiter); -} -function formatTimezone(offset, dirtyDelimiter) { - var delimiter = dirtyDelimiter || ""; - var sign = offset > 0 ? "-" : "+"; - var absOffset = Math.abs(offset); - var hours = addLeadingZeros(Math.floor(absOffset / 60), 2); - var minutes = addLeadingZeros(absOffset % 60, 2); - return sign + hours + delimiter + minutes; -} -var formatters_default = formatters2; - -// node_modules/date-fns/esm/_lib/format/longFormatters/index.js -var dateLongFormatter = function dateLongFormatter2(pattern, formatLong2) { - switch (pattern) { - case "P": - return formatLong2.date({ - width: "short" - }); - case "PP": - return formatLong2.date({ - width: "medium" - }); - case "PPP": - return formatLong2.date({ - width: "long" - }); - case "PPPP": - default: - return formatLong2.date({ - width: "full" - }); - } +var mergeTableData = (mdb, yamlmdb, types) => { + return { + ...mdb, + cols: [ + ...mdb.cols, + ...yamlmdb.cols.filter( + (f4) => !mdb.cols.find((g4) => g4.name.toLowerCase() == f4.toLowerCase()) + ).map((f4) => ({ + name: f4, + schemaId: mdb.schema.id, + type: yamlTypeToMDBType(types[f4]) + })) + ].filter(onlyUniqueProp("name")), + rows: mdb.rows.map((r3) => { + const fmRow = yamlmdb.rows.find((f4) => f4.File == r3.File); + if (fmRow) { + return { + ...r3, + ...fmRow + }; + } + return r3; + }) + }; }; -var timeLongFormatter = function timeLongFormatter2(pattern, formatLong2) { - switch (pattern) { - case "p": - return formatLong2.time({ - width: "short" - }); - case "pp": - return formatLong2.time({ - width: "medium" - }); - case "ppp": - return formatLong2.time({ - width: "long" - }); - case "pppp": - default: - return formatLong2.time({ - width: "full" - }); - } +var guestimateTypes = (_files, dv) => { + const dataViewAPI = (0, import_obsidian_dataview.getAPI)(); + const typesArray = _files.map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4).map((k5) => { + const fm = dv ? dataViewAPI.page(k5.path) : frontMatterForFile(k5); + const fmKeys = dv ? Object.keys(fm != null ? fm : {}).filter( + (f4, i4, self2) => !self2.find( + (g4, j4) => g4.toLowerCase().replace(/\s/g, "-") == f4.toLowerCase().replace(/\s/g, "-") && i4 > j4 + ) ? true : false + ).filter((f4) => f4 != "file") : frontMatterKeys(fm); + return fmKeys.reduce( + (pk, ck) => ({ ...pk, [ck]: detectYAMLType(fm[ck], ck) }), + {} + ); + }); + const types = typesArray.reduce( + (p3, c4) => { + const newSet = Object.keys(c4).reduce( + (pk, ck) => { + var _a2; + return { ...pk, [ck]: [...(_a2 = p3 == null ? void 0 : p3[ck]) != null ? _a2 : [], c4[ck]] }; + }, + { ...p3 } + ); + return newSet; + }, + {} + ); + const guessType = (ts) => { + return import_lodash.default.head((0, import_lodash.default)(ts).countBy().entries().maxBy(import_lodash.default.last)); + }; + const guessedTypes = Object.keys(types).reduce((p3, c4) => { + return { ...p3, [c4]: guessType(types[c4]) }; + }, {}); + return guessedTypes; }; -var dateTimeLongFormatter = function dateTimeLongFormatter2(pattern, formatLong2) { - var matchResult = pattern.match(/(P+)(p+)?/) || []; - var datePattern = matchResult[1]; - var timePattern = matchResult[2]; - if (!timePattern) { - return dateLongFormatter(pattern, formatLong2); +var saveFrontmatterValue = (path, key2, value, type, forceSave) => { + const afile = getAbstractFileAtPath(app, path); + if (afile && app.fileManager.processFrontMatter) { + app.fileManager.processFrontMatter(afile, (frontmatter) => { + if (key2 in frontmatter || forceSave) { + if (type == "number") { + frontmatter[key2] = parseInt(value); + } else if (type == "boolean") + frontmatter[key2] = value == "true"; + else if (type.contains("multi")) { + frontmatter[key2] = splitString(value); + } else { + frontmatter[key2] = value; + } + } + }); } - var dateTimeFormat; - switch (datePattern) { - case "P": - dateTimeFormat = formatLong2.dateTime({ - width: "short" - }); +}; +var parseFrontMatter = (field, value, dv) => { + const YAMLtype = detectYAMLType(value, field); + switch (YAMLtype) { + case "number": + return value.toString(); break; - case "PP": - dateTimeFormat = formatLong2.dateTime({ - width: "medium" - }); + case "boolean": + return value ? "true" : "false"; break; - case "PPP": - dateTimeFormat = formatLong2.dateTime({ - width: "long" - }); + case "date": + if (!dv) { + return value; + } else { + return new Date(value.ts).toDateString(); + } break; - case "PPPP": - default: - dateTimeFormat = formatLong2.dateTime({ - width: "full" - }); + case "duration": + return Object.keys(value.values).reduce( + (p3, c4) => [ + ...p3, + ...value.values[c4] > 0 ? [value.values[c4] + " " + c4] : [] + ], + [] + ).join(", "); + break; + case "option-multi": + case "link-multi": + case "tag-multi": + return value.join(","); + break; + case "link": + return value.path; + break; + case "text": + case "tag": + case "image": + return value; break; } - return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); -}; -var longFormatters = { - p: timeLongFormatter, - P: dateTimeLongFormatter + return ""; }; -var longFormatters_default = longFormatters; -// node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js -function getTimezoneOffsetInMilliseconds(date) { - var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())); - utcDate.setUTCFullYear(date.getFullYear()); - return date.getTime() - utcDate.getTime(); -} +// src/utils/ui/selection.ts +var selectNextIndex = (currIndex, array) => { + if (!currIndex && array.length > 0) + return array[0]; + const pos = array.indexOf(currIndex); + if (pos < array.length - 1) + return array[pos + 1]; + return currIndex; +}; +var selectPrevIndex = (currIndex, array) => { + const pos = array.indexOf(currIndex); + if (pos > 0) + return array[pos - 1]; + return array[0]; +}; +var selectRange = (currSel, newSel, array) => { + const lastIndex = array.findIndex((f4) => f4 == currSel); + const newIndex = array.findIndex((f4) => f4 == newSel); + if (lastIndex < newIndex) { + return array.filter((f4, i4) => i4 > lastIndex && i4 <= newIndex); + } + return array.filter((f4, i4) => i4 < lastIndex && i4 >= newIndex); +}; -// node_modules/date-fns/esm/_lib/protectedTokens/index.js -var protectedDayOfYearTokens = ["D", "DD"]; -var protectedWeekYearTokens = ["YY", "YYYY"]; -function isProtectedDayOfYearToken(token) { - return protectedDayOfYearTokens.indexOf(token) !== -1; +// src/components/ui/libs/react-tags/concerns/matchers.js +function escapeForRegExp(string) { + return string.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&"); } -function isProtectedWeekYearToken(token) { - return protectedWeekYearTokens.indexOf(token) !== -1; +function matchAny(string) { + return new RegExp(escapeForRegExp(string), "gi"); } -function throwProtectedError(token, format3, input) { - if (token === "YYYY") { - throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format3, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); - } else if (token === "YY") { - throw new RangeError("Use `yy` instead of `YY` (in `".concat(format3, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); - } else if (token === "D") { - throw new RangeError("Use `d` instead of `D` (in `".concat(format3, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); - } else if (token === "DD") { - throw new RangeError("Use `dd` instead of `DD` (in `".concat(format3, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); - } +function matchExact(string) { + return new RegExp(`^${escapeForRegExp(string)}$`, "i"); } -// node_modules/date-fns/esm/_lib/defaultLocale/index.js -var defaultLocale_default = en_US_default; +// src/components/ContextView/MDBContext.tsx +var import_obsidian5 = require("obsidian"); -// node_modules/date-fns/esm/format/index.js -var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; -var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; -var escapedStringRegExp = /^'([^]*?)'?$/; -var doubleQuoteRegExp = /''/g; -var unescapedLatinCharacterRegExp = /[a-zA-Z]/; -function format(dirtyDate, dirtyFormatStr, options) { - var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4; - requiredArgs(2, arguments); - var formatStr = String(dirtyFormatStr); - var defaultOptions3 = getDefaultOptions(); - var locale2 = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions3.locale) !== null && _ref !== void 0 ? _ref : defaultLocale_default; - var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions3.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); - if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { - throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); - } - var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions3.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions3.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); - if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { - throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); - } - if (!locale2.localize) { - throw new RangeError("locale must contain localize property"); - } - if (!locale2.formatLong) { - throw new RangeError("locale must contain formatLong property"); - } - var originalDate = toDate(dirtyDate); - if (!isValid(originalDate)) { - throw new RangeError("Invalid time value"); - } - var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate); - var utcDate = subMilliseconds(originalDate, timezoneOffset); - var formatterOptions = { - firstWeekContainsDate, - weekStartsOn, - locale: locale2, - _originalDate: originalDate - }; - var result = formatStr.match(longFormattingTokensRegExp).map(function(substring) { - var firstCharacter = substring[0]; - if (firstCharacter === "p" || firstCharacter === "P") { - var longFormatter = longFormatters_default[firstCharacter]; - return longFormatter(substring, locale2.formatLong); - } - return substring; - }).join("").match(formattingTokensRegExp).map(function(substring) { - if (substring === "''") { - return "'"; - } - var firstCharacter = substring[0]; - if (firstCharacter === "'") { - return cleanEscapedString(substring); - } - var formatter = formatters_default[firstCharacter]; - if (formatter) { - if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) { - throwProtectedError(substring, dirtyFormatStr, String(dirtyDate)); - } - if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) { - throwProtectedError(substring, dirtyFormatStr, String(dirtyDate)); - } - return formatter(utcDate, substring, locale2.localize, formatterOptions); - } - if (firstCharacter.match(unescapedLatinCharacterRegExp)) { - throw new RangeError("Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"); +// src/schemas/mdb.ts +var fieldTypes = [ + { + type: "unknown", + label: "", + restricted: true + }, + { + type: "preview", + label: "Preview", + restricted: true + }, + { + type: "text", + label: "Text" + }, + { + type: "number", + label: "Number" + }, + { + type: "boolean", + label: "Yes/No" + }, + { + type: "date", + label: "Date" + }, + { + type: "option", + label: "Option", + multi: true, + multiType: "option-multi" + }, + { + type: "file", + label: "File", + restricted: true + }, + { + type: "fileprop", + label: "File Property" + }, + { + type: "link", + label: "Link", + multi: true, + multiType: "link-multi" + }, + { + type: "context", + label: "Context", + multi: true, + multiType: "context-multi" + }, + { + type: "tag", + label: "Tag", + multi: true, + multiType: "tag-multi" + }, + { + type: "image", + label: "Image", + multi: true, + multiType: "image-multi" + } +]; +var defaultFileDBSchema = { + id: "files", + name: "Files", + type: "db", + primary: "true" +}; +var defaultFileListSchema = { + id: "filesView", + name: "Files", + type: "list", + def: "files" +}; +var defaultFileTableSchema = { + id: "filesView", + name: "Files", + type: "table", + def: "files" +}; +var defaultFolderSchema = { + uniques: ["id"], + cols: ["id", "name", "type", "def", "predicate", "primary"], + rows: [defaultFileDBSchema, defaultFileListSchema] +}; +var defaultTagSchema = { + uniques: ["id"], + cols: ["id", "name", "type", "def", "predicate", "primary"], + rows: [defaultFileDBSchema, defaultFileTableSchema] +}; +var fieldSchema = { + uniques: ["name,schemaId"], + cols: [ + "name", + "schemaId", + "type", + "value", + "attrs", + "hidden", + "unique", + "primary" + ] +}; +var defaultFolderFields = { + ...fieldSchema, + rows: [ + { + name: "_id", + schemaId: "files", + type: "id", + unique: "true", + hidden: "true" + }, + { + name: "_source", + schemaId: "files", + type: "source", + hidden: "true" + }, + { + name: "Preview", + schemaId: "files", + type: "preview" + }, + { + name: "File", + schemaId: "files", + type: "file", + primary: "true" + }, + { + name: "Created", + schemaId: "files", + type: "fileprop", + value: "ctime" } - return substring; - }).join(""); - return result; -} -function cleanEscapedString(input) { - var matched = input.match(escapedStringRegExp); - if (!matched) { - return input; + ] +}; +var defaultTableFields = [ + { + name: "Name", + schemaId: "", + type: "text" } - return matched[1].replace(doubleQuoteRegExp, "'"); -} - -// node_modules/date-fns/esm/endOfMonth/index.js -function endOfMonth(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var month = date.getMonth(); - date.setFullYear(date.getFullYear(), month + 1, 0); - date.setHours(23, 59, 59, 999); - return date; -} - -// node_modules/date-fns/esm/startOfDay/index.js -function startOfDay(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - date.setHours(0, 0, 0, 0); - return date; -} - -// node_modules/date-fns/esm/startOfMonth/index.js -function startOfMonth(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - date.setDate(1); - date.setHours(0, 0, 0, 0); - return date; -} - -// node_modules/date-fns/esm/isSameYear/index.js -function isSameYear(dirtyDateLeft, dirtyDateRight) { - requiredArgs(2, arguments); - var dateLeft = toDate(dirtyDateLeft); - var dateRight = toDate(dirtyDateRight); - return dateLeft.getFullYear() === dateRight.getFullYear(); -} - -// node_modules/date-fns/esm/getDaysInMonth/index.js -function getDaysInMonth(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var year = date.getFullYear(); - var monthIndex = date.getMonth(); - var lastDayOfMonth2 = new Date(0); - lastDayOfMonth2.setFullYear(year, monthIndex + 1, 0); - lastDayOfMonth2.setHours(0, 0, 0, 0); - return lastDayOfMonth2.getDate(); -} - -// node_modules/date-fns/esm/setMonth/index.js -function setMonth(dirtyDate, dirtyMonth) { - requiredArgs(2, arguments); - var date = toDate(dirtyDate); - var month = toInteger(dirtyMonth); - var year = date.getFullYear(); - var day = date.getDate(); - var dateWithDesiredMonth = new Date(0); - dateWithDesiredMonth.setFullYear(year, month, 15); - dateWithDesiredMonth.setHours(0, 0, 0, 0); - var daysInMonth = getDaysInMonth(dateWithDesiredMonth); - date.setMonth(month, Math.min(day, daysInMonth)); - return date; -} +]; +var defaultTagFields = { + ...fieldSchema, + rows: [ + { + name: "_id", + schemaId: "files", + type: "id", + unique: "true", + hidden: "true" + }, + { + name: "_source", + schemaId: "files", + type: "source", + hidden: "true" + }, + { + name: "_sourceId", + schemaId: "files", + type: "sourceid", + hidden: "true" + }, + { + name: "File", + schemaId: "files", + type: "file", + primary: "true" + } + ] +}; +var defaultFolderMDBTable = { + schema: defaultFileDBSchema, + cols: defaultFolderFields.rows, + rows: [] +}; +var defaultTagMDBTable = { + schema: defaultFileDBSchema, + cols: defaultTagFields.rows, + rows: [] +}; +var fieldsToTable = (fields, schemas) => { + return fields.filter((s5) => schemas.find((g4) => g4.id == s5.schemaId && g4.type == "db")).reduce((p3, c4) => { + return { + ...p3, + ...p3[c4.schemaId] ? { + [c4.schemaId]: { + uniques: c4.unique == "true" ? [...p3[c4.schemaId].uniques, c4.name] : p3[c4.schemaId].uniques, + cols: [...p3[c4.schemaId].cols, c4.name], + rows: [] + } + } : { + [c4.schemaId]: { + uniques: c4.unique == "true" ? [c4.name] : [], + cols: [c4.name], + rows: [] + } + } + }; + }, {}); +}; +var defaultFolderTables = { + m_schema: defaultFolderSchema, + m_fields: defaultFolderFields, + ...fieldsToTable( + defaultFolderFields.rows, + defaultFolderSchema.rows + ) +}; +var defaultTagTables = { + m_schema: defaultTagSchema, + m_fields: defaultTagFields, + ...fieldsToTable( + defaultTagFields.rows, + defaultTagSchema.rows + ) +}; -// node_modules/date-fns/esm/setYear/index.js -function setYear(dirtyDate, dirtyYear) { - requiredArgs(2, arguments); - var date = toDate(dirtyDate); - var year = toInteger(dirtyYear); - if (isNaN(date.getTime())) { - return new Date(NaN); - } - date.setFullYear(year); - return date; -} +// src/utils/array.ts +var insert = (arr, index, newItem) => [ + ...arr.slice(0, index), + newItem, + ...arr.slice(index) +]; -// node_modules/date-fns/esm/startOfYear/index.js -function startOfYear(dirtyDate) { - requiredArgs(1, arguments); - var cleanDate = toDate(dirtyDate); - var date = new Date(0); - date.setFullYear(cleanDate.getFullYear(), 0, 1); - date.setHours(0, 0, 0, 0); - return date; -} +// src/utils/sanitize.ts +var sanitizeTableName = (name) => { + return name == null ? void 0 : name.replace(/[^a-z0-9+]+/gi, ""); +}; +var sanitizeColumnName = (name) => { + return name == null ? void 0 : name.replace(/'/g, `''`).replace(/[^\w ]/g, ""); +}; +var sanitizeSQLStatement = (name) => { + return name == null ? void 0 : name.replace(/'/g, `''`); +}; -// node_modules/date-fns/esm/addMonths/index.js -function addMonths(dirtyDate, dirtyAmount) { - requiredArgs(2, arguments); - var date = toDate(dirtyDate); - var amount = toInteger(dirtyAmount); - if (isNaN(amount)) { - return new Date(NaN); +// src/dispatch/mdb.ts +var import_obsidian3 = require("obsidian"); +var dispatchDatabaseFileChanged = (dbPath, tag) => { + let evt = new CustomEvent(eventTypes.mdbChange, { detail: { dbPath, tag } }); + window.dispatchEvent(evt); +}; +var processFolderDB = async (plugin, folderPath, processor, fallback) => { + let tags = []; + const dbPath = folderContextFromFolder(plugin, folderPath); + const dbFileExists = getAbstractFileAtPath(app, dbPath); + if (dbFileExists) { + const folderDB = await getMDBTable(plugin, "files", dbPath, false); + if (folderDB) { + tags.push(...folderDB.schema.def.split("&")); + const newDB = await processor(folderDB, dbPath); + const promises = tags.map((tag) => { + const tagdbPath = tagContextFromTag(plugin, tag); + const tagFileExists = getAbstractFileAtPath(app, tagdbPath); + if (tagFileExists) { + return consolidateRowsToTag( + plugin, + tagdbPath, + "files", + dbPath, + newDB.rows + ).then((f4) => { + }); + } + }); + return Promise.all(promises); + } else if (fallback) { + await fallback(); + } + } else if (fallback) { + await fallback(); } - if (!amount) { - return date; +}; +var saveDB = async (plugin, dbPath, newTable) => { + return saveMDBToPath(plugin, dbPath, newTable); +}; +var renameRow = (folder, filePath, toFilePath) => { + return { + ...folder, + rows: folder.rows.map( + (f4) => f4.File == filePath && f4._source == "folder" ? { ...f4, File: toFilePath } : f4 + ) + }; +}; +var removeRows = (folder, source) => { + return { ...folder, rows: folder.rows.filter((f4) => f4._source != source) }; +}; +var removeRow = (folder, filePath) => { + return { + ...folder, + rows: folder.rows.filter( + (f4) => f4.File != filePath && f4._source == "folder" + ) + }; +}; +var insertRow = (folder, row, parent) => { + const existingRow = folder.rows.find( + (f4) => f4.File == row.File || parent + "/" + f4.File + ".md" == row.File + ); + if (existingRow) { + return { + ...folder, + rows: folder.rows.map( + (f4) => f4.File == existingRow.File ? { ...f4, File: row.File, _source: "folder", ...row } : f4 + ) + }; } - var dayOfMonth = date.getDate(); - var endOfDesiredMonth = new Date(date.getTime()); - endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0); - var daysInMonth = endOfDesiredMonth.getDate(); - if (dayOfMonth >= daysInMonth) { - return endOfDesiredMonth; - } else { - date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth); - return date; + return { ...folder, rows: [...folder.rows, row] }; +}; +var insertRows = (folder, rows) => { + const newRows = rows.filter( + (row) => { + var _a2; + return ((_a2 = row.File) == null ? void 0 : _a2.length) > 0 && !folder.rows.some((f4) => f4.File == row.File && f4._source == "folder"); + } + ); + return { ...folder, rows: [...folder.rows, ...newRows] }; +}; +var saveContextToFrontmatter = (file, cols, context) => { + const afile = getAbstractFileAtPath(app, file); + if (afile && afile instanceof import_obsidian3.TFile) + saveContextToFile(afile, cols, context); +}; +var removeSourceFromTag = async (plugin, tag, source) => { + const dbPath = tagContextFromTag(plugin, tag); + const tagFileExists = getAbstractFileAtPath(app, dbPath); + if (tagFileExists) { + const tagDB = await getMDBTable(plugin, "files", dbPath, true); + const files = tagDB.rows.filter((f4) => f4._source == source); + files.forEach( + (row) => saveContextToFrontmatter( + row["File"], + tagDB.cols, + tagDB.cols.reduce((p3, c4) => ({ ...p3, [c4.name]: row[c4.name] }), {}) + ) + ); + await saveDB(plugin, dbPath, removeRows(tagDB, source)); } -} - -// node_modules/date-fns/esm/isBefore/index.js -function isBefore(dirtyDate, dirtyDateToCompare) { - requiredArgs(2, arguments); - var date = toDate(dirtyDate); - var dateToCompare = toDate(dirtyDateToCompare); - return date.getTime() < dateToCompare.getTime(); -} - -// node_modules/date-fns/esm/isSameMonth/index.js -function isSameMonth(dirtyDateLeft, dirtyDateRight) { - requiredArgs(2, arguments); - var dateLeft = toDate(dirtyDateLeft); - var dateRight = toDate(dirtyDateRight); - return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth(); -} - -// node_modules/date-fns/esm/differenceInCalendarMonths/index.js -function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) { - requiredArgs(2, arguments); - var dateLeft = toDate(dirtyDateLeft); - var dateRight = toDate(dirtyDateRight); - var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear(); - var monthDiff = dateLeft.getMonth() - dateRight.getMonth(); - return yearDiff * 12 + monthDiff; -} - -// node_modules/date-fns/esm/addDays/index.js -function addDays(dirtyDate, dirtyAmount) { - requiredArgs(2, arguments); - var date = toDate(dirtyDate); - var amount = toInteger(dirtyAmount); - if (isNaN(amount)) { - return new Date(NaN); +}; +var initiateContextIfNotExists = async (plugin, tag) => { + const dbPath = tagContextFromTag(plugin, tag); + const tagFileExists = getAbstractFileAtPath(app, dbPath); + if (tagFileExists) + return false; + return createDefaultDB(plugin, dbPath, true); +}; +var insertContextItems = async (plugin, newPaths, t4) => { + const saveNewContextRows = async (tag, path) => { + const newRow = newPaths.map((newPath) => ({ File: newPath })); + await saveDB(plugin, path, insertRows(tag, newRow)); + }; + const dbPath = tagContextFromTag(plugin, t4); + const tagFileExists = getAbstractFileAtPath(app, dbPath); + if (!tagFileExists) { + await createDefaultDB(plugin, dbPath, true); } - if (!amount) { - return date; + await getMDBTable(plugin, "files", dbPath, true).then( + (tagDB) => saveNewContextRows(tagDB, dbPath).then((f4) => { + }) + ); +}; +var fileToFM = (file, cols) => { + const fm = frontMatterForFile(file); + const fmKeys = frontMatterKeys(fm).filter((f4) => cols.some((g4) => f4 == g4)); + return fmKeys.reduce( + (p3, c4) => ({ ...p3, [c4]: parseFrontMatter(c4, fm[c4], false) }), + {} + ); +}; +var onMetadataChange = async (plugin, file) => { + const folderPath = getFolderPathFromString(file.path); + let tags = []; + const dbPath = folderContextFromFolder(plugin, folderPath); + const dbFileExists = getAbstractFileAtPath(app, dbPath); + if (dbFileExists) { + const folderDB = await getMDBTable(plugin, "files", dbPath, false); + if (folderDB) { + tags.push(...folderDB.schema.def.split("&")); + const newDB = { + ...folderDB, + rows: folderDB.rows.map( + (f4) => f4.File == file.path && f4._source == "folder" ? { + ...f4, + ...fileToFM( + file, + folderDB.cols.map((f5) => f5.name) + ) + } : f4 + ) + }; + await saveDB(plugin, dbPath, newDB); + const promises = tags.map((tag) => { + const tagdbPath = tagContextFromTag(plugin, tag); + const tagFileExists = getAbstractFileAtPath(app, tagdbPath); + if (tagFileExists) { + return getMDBTable(plugin, "files", tagdbPath, false).then( + (tagDB) => { + const newDB2 = { + ...tagDB, + rows: tagDB.rows.map( + (f4) => f4.File == file.path && f4._source == dbPath ? { + ...f4, + ...fileToFM( + file, + tagDB.cols.map((f5) => f5.name) + ) + } : f4 + ) + }; + return saveDB(plugin, tagdbPath, newDB2); + } + ); + } + }); + await Promise.all(promises); + } } - date.setDate(date.getDate() + amount); - return date; -} - -// node_modules/date-fns/esm/startOfWeek/index.js -function startOfWeek(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; - requiredArgs(1, arguments); - var defaultOptions3 = getDefaultOptions(); - var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); - if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { - throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); - } - var date = toDate(dirtyDate); - var day = date.getDay(); - var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; - date.setDate(date.getDate() - diff); - date.setHours(0, 0, 0, 0); - return date; -} - -// node_modules/date-fns/esm/startOfISOWeek/index.js -function startOfISOWeek(dirtyDate) { - requiredArgs(1, arguments); - return startOfWeek(dirtyDate, { - weekStartsOn: 1 +}; +var onFileCreated = async (plugin, newPath) => { + const newFolderPath = getFolderPathFromString(newPath); + await processFolderDB(plugin, newFolderPath, async (folder, path) => { + const amendedFolderDB = insertRow( + folder, + newRowByDBRow({ File: newPath, _source: "folder" }), + newFolderPath + ); + await saveDB(plugin, path, amendedFolderDB); + return amendedFolderDB; }); -} - -// node_modules/date-fns/esm/getTime/index.js -function getTime(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var timestamp = date.getTime(); - return timestamp; -} - -// node_modules/date-fns/esm/getUnixTime/index.js -function getUnixTime(dirtyDate) { - requiredArgs(1, arguments); - return Math.floor(getTime(dirtyDate) / 1e3); -} - -// node_modules/date-fns/esm/isSameDay/index.js -function isSameDay(dirtyDateLeft, dirtyDateRight) { - requiredArgs(2, arguments); - var dateLeftStartOfDay = startOfDay(dirtyDateLeft); - var dateRightStartOfDay = startOfDay(dirtyDateRight); - return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime(); -} - -// node_modules/date-fns/esm/getISOWeekYear/index.js -function getISOWeekYear(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var year = date.getFullYear(); - var fourthOfJanuaryOfNextYear = new Date(0); - fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); - fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); - var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); - var fourthOfJanuaryOfThisYear = new Date(0); - fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); - fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); - var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); - if (date.getTime() >= startOfNextYear.getTime()) { - return year + 1; - } else if (date.getTime() >= startOfThisYear.getTime()) { - return year; +}; +var onFileChanged = async (plugin, oldPath, newPath) => { + const oldFolderPath = getFolderPathFromString(oldPath); + const newFolderPath = getFolderPathFromString(newPath); + if (oldFolderPath == newFolderPath) { + await processFolderDB(plugin, oldFolderPath, async (folder, path) => { + const amendedFolderDB = renameRow(folder, oldPath, newPath); + await saveDB(plugin, path, amendedFolderDB); + return amendedFolderDB; + }); } else { - return year - 1; + await processFolderDB( + plugin, + oldFolderPath, + async (folder, path) => { + const amendedFolderDB = removeRow(folder, oldPath); + await saveDB(plugin, path, amendedFolderDB); + const dbPath = folderContextFromFolder(plugin, newFolderPath); + const fromDBRow = folder.rows.find((f4) => f4.File == oldPath); + const toDBFileExists = getAbstractFileAtPath(app, dbPath); + if (toDBFileExists) { + const toFolderDB = await getMDBTable(plugin, "files", dbPath, false); + if (toFolderDB) { + const [newDBCols, fmDBCols] = Object.keys(fromDBRow).reduce( + (p3, c4) => fromDBRow[c4].length == 0 ? p3 : toFolderDB.cols.find((f4) => f4.name == fromDBRow[c4]) ? [[...p3[0], c4], p3[1]] : [p3[0], [...p3[1], c4]], + [[], []] + ); + const newRow = { + ...newDBCols.reduce((p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), {}), + File: newPath + }; + await saveDB( + plugin, + dbPath, + insertRow(toFolderDB, newRowByDBRow(newRow), newFolderPath) + ); + saveContextToFrontmatter( + newPath, + folder.cols, + fmDBCols.reduce((p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), {}) + ); + } + } else { + saveContextToFrontmatter( + newPath, + folder.cols, + Object.keys(fromDBRow).reduce( + (p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), + {} + ) + ); + } + return amendedFolderDB; + }, + async () => { + const dbPath = folderContextFromFolder(plugin, newFolderPath); + const toDBFileExists = getAbstractFileAtPath(app, dbPath); + if (toDBFileExists) { + const toFolderDB = await getMDBTable(plugin, "files", dbPath, false); + } + } + ); } -} - -// node_modules/date-fns/esm/startOfISOWeekYear/index.js -function startOfISOWeekYear(dirtyDate) { - requiredArgs(1, arguments); - var year = getISOWeekYear(dirtyDate); - var fourthOfJanuary = new Date(0); - fourthOfJanuary.setFullYear(year, 0, 4); - fourthOfJanuary.setHours(0, 0, 0, 0); - var date = startOfISOWeek(fourthOfJanuary); - return date; -} - -// node_modules/date-fns/esm/differenceInCalendarDays/index.js -var MILLISECONDS_IN_DAY2 = 864e5; -function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) { - requiredArgs(2, arguments); - var startOfDayLeft = startOfDay(dirtyDateLeft); - var startOfDayRight = startOfDay(dirtyDateRight); - var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft); - var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); - return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY2); -} - -// node_modules/date-fns/esm/addWeeks/index.js -function addWeeks(dirtyDate, dirtyAmount) { - requiredArgs(2, arguments); - var amount = toInteger(dirtyAmount); - var days = amount * 7; - return addDays(dirtyDate, days); -} - -// node_modules/date-fns/esm/addYears/index.js -function addYears(dirtyDate, dirtyAmount) { - requiredArgs(2, arguments); - var amount = toInteger(dirtyAmount); - return addMonths(dirtyDate, amount * 12); -} - -// node_modules/date-fns/esm/max/index.js -function _typeof3(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof3 = function _typeof5(obj2) { - return typeof obj2; - }; - } else { - _typeof3 = function _typeof5(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; +}; +var onFileDeleted = async (plugin, oldPath) => { + const oldFolderPath = getFolderPathFromString(oldPath); + await processFolderDB(plugin, oldFolderPath, async (folder, path) => { + const amendedFolderDB = removeRow(folder, oldPath); + await saveDB(plugin, path, amendedFolderDB); + return amendedFolderDB; + }); +}; +var onFolderChanged = async (plugin, oldPath, newPath) => { + await processFolderDB(plugin, newPath, async (folder, path) => { + const newDB = { + ...folder, + rows: folder.rows.map( + (f4) => getFolderPathFromString(f4["File"]) == oldPath ? { ...f4, File: f4["File"].replace(oldPath, newPath) } : f4 + ) }; - } - return _typeof3(obj); -} -function max(dirtyDatesArray) { - requiredArgs(1, arguments); - var datesArray; - if (dirtyDatesArray && typeof dirtyDatesArray.forEach === "function") { - datesArray = dirtyDatesArray; - } else if (_typeof3(dirtyDatesArray) === "object" && dirtyDatesArray !== null) { - datesArray = Array.prototype.slice.call(dirtyDatesArray); - } else { - return new Date(NaN); - } - var result; - datesArray.forEach(function(dirtyDate) { - var currentDate = toDate(dirtyDate); - if (result === void 0 || result < currentDate || isNaN(Number(currentDate))) { - result = currentDate; - } + await saveDB(plugin, path, newDB); + return newDB; }); - return result || new Date(NaN); -} +}; +var onFolderDeleted = async (oldPath) => { +}; -// node_modules/date-fns/esm/min/index.js -function _typeof4(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof4 = function _typeof5(obj2) { - return typeof obj2; - }; - } else { - _typeof4 = function _typeof5(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; +// src/utils/db/db.ts +var import_obsidian4 = require("obsidian"); +var getDBFile = async (path) => { + if (!await app.vault.adapter.exists((0, import_obsidian4.normalizePath)(path))) { + return null; } - return _typeof4(obj); -} -function min(dirtyDatesArray) { - requiredArgs(1, arguments); - var datesArray; - if (dirtyDatesArray && typeof dirtyDatesArray.forEach === "function") { - datesArray = dirtyDatesArray; - } else if (_typeof4(dirtyDatesArray) === "object" && dirtyDatesArray !== null) { - datesArray = Array.prototype.slice.call(dirtyDatesArray); - } else { - return new Date(NaN); + const file = await app.vault.adapter.readBinary( + (0, import_obsidian4.normalizePath)(path) + ); + return file; +}; +var getDB = async (sqlJS, path) => { + const buf = await getDBFile(path); + if (buf) { + return new sqlJS.Database(new Uint8Array(buf)); } - var result; - datesArray.forEach(function(dirtyDate) { - var currentDate = toDate(dirtyDate); - if (result === void 0 || result > currentDate || isNaN(currentDate.getDate())) { - result = currentDate; - } - }); - return result || new Date(NaN); -} - -// node_modules/date-fns/esm/compareAsc/index.js -function compareAsc(dirtyDateLeft, dirtyDateRight) { - requiredArgs(2, arguments); - var dateLeft = toDate(dirtyDateLeft); - var dateRight = toDate(dirtyDateRight); - var diff = dateLeft.getTime() - dateRight.getTime(); - if (diff < 0) { - return -1; - } else if (diff > 0) { - return 1; - } else { - return diff; + return new sqlJS.Database(); +}; +var saveDBAndKeepAlive = (db, path) => { + const results = saveDBFile(path, db.export().buffer); + return results; +}; +var saveDBFile = async (path, binary) => { + const file = app.vault.adapter.writeBinary( + (0, import_obsidian4.normalizePath)(path), + binary + ); + return file; +}; +var dbResultsToDBTables = (res) => { + return res.reduce( + (p3, c4, i4) => [ + ...p3, + { + cols: c4.columns, + rows: c4 ? c4.values.map( + (r3) => c4.columns.reduce( + (prev, curr, index) => ({ ...prev, [curr]: r3[index] }), + {} + ) + ) : [] + } + ], + [] + ); +}; +var selectDB = (db, table, condition, fields) => { + const fieldsStr = fields != null ? fields : "*"; + const sqlstr = condition ? `SELECT ${fieldsStr} FROM "${table}" WHERE ${condition};` : `SELECT ${fieldsStr} FROM ${table};`; + let tables; + try { + tables = dbResultsToDBTables(db.exec(sqlstr)); + } catch (e4) { + return null; } -} - -// node_modules/date-fns/esm/differenceInCalendarWeeks/index.js -var MILLISECONDS_IN_WEEK3 = 6048e5; -function differenceInCalendarWeeks(dirtyDateLeft, dirtyDateRight, options) { - requiredArgs(2, arguments); - var startOfWeekLeft = startOfWeek(dirtyDateLeft, options); - var startOfWeekRight = startOfWeek(dirtyDateRight, options); - var timestampLeft = startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft); - var timestampRight = startOfWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekRight); - return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK3); -} - -// node_modules/date-fns/esm/differenceInMilliseconds/index.js -function differenceInMilliseconds(dateLeft, dateRight) { - requiredArgs(2, arguments); - return toDate(dateLeft).getTime() - toDate(dateRight).getTime(); -} - -// node_modules/date-fns/esm/_lib/roundingMethods/index.js -var roundingMap = { - ceil: Math.ceil, - round: Math.round, - floor: Math.floor, - trunc: function trunc(value) { - return value < 0 ? Math.ceil(value) : Math.floor(value); + if (tables.length == 1) + return tables[0]; + return null; +}; +var updateDB = (db, tables, updateCol, updateRef) => { + const sqlstr = Object.keys(tables).map((t4) => { + const tableFields = tables[t4].cols.filter((f4) => f4 != updateRef); + const rowsQuery = tables[t4].rows.reduce((prev, curr) => { + var _a2; + return `${prev} UPDATE "${t4}" SET ${tableFields.map((c4) => { + var _a3; + return `${c4}='${(_a3 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a3 : ""}'`; + }).join(", ")} WHERE ${updateCol}='${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[updateRef])) != null ? _a2 : ""}';`; + }, ""); + return rowsQuery; + }).join("; "); + try { + db.exec(sqlstr); + } catch (e4) { + console.log(e4); } }; -var defaultRoundingMethod = "trunc"; -function getRoundingMethod(method) { - return method ? roundingMap[method] : roundingMap[defaultRoundingMethod]; -} - -// node_modules/date-fns/esm/endOfDay/index.js -function endOfDay(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - date.setHours(23, 59, 59, 999); - return date; -} - -// node_modules/date-fns/esm/isLastDayOfMonth/index.js -function isLastDayOfMonth(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - return endOfDay(date).getTime() === endOfMonth(date).getTime(); -} - -// node_modules/date-fns/esm/differenceInMonths/index.js -function differenceInMonths(dirtyDateLeft, dirtyDateRight) { - requiredArgs(2, arguments); - var dateLeft = toDate(dirtyDateLeft); - var dateRight = toDate(dirtyDateRight); - var sign = compareAsc(dateLeft, dateRight); - var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight)); - var result; - if (difference < 1) { - result = 0; - } else { - if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) { - dateLeft.setDate(30); - } - dateLeft.setMonth(dateLeft.getMonth() - sign * difference); - var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; - if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) { - isLastMonthNotFull = false; - } - result = sign * (difference - Number(isLastMonthNotFull)); +var execQuery = (db, sqlstr) => { + try { + db.exec(sqlstr); + } catch (e4) { + console.log(e4); } - return result === 0 ? 0 : result; -} - -// node_modules/date-fns/esm/differenceInSeconds/index.js -function differenceInSeconds(dateLeft, dateRight, options) { - requiredArgs(2, arguments); - var diff = differenceInMilliseconds(dateLeft, dateRight) / 1e3; - return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff); -} - -// node_modules/date-fns/esm/endOfWeek/index.js -function endOfWeek(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; - requiredArgs(1, arguments); - var defaultOptions3 = getDefaultOptions(); - var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); - if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { - throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); +}; +var deleteFromDB = (db, table, condition) => { + const sqlstr = `DELETE FROM "${table}" WHERE ${condition};`; + try { + db.exec(sqlstr); + } catch (e4) { + console.log(e4); } - var date = toDate(dirtyDate); - var day = date.getDay(); - var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); - date.setDate(date.getDate() + diff); - date.setHours(23, 59, 59, 999); - return date; -} - -// node_modules/date-fns/esm/endOfISOWeek/index.js -function endOfISOWeek(dirtyDate) { - requiredArgs(1, arguments); - return endOfWeek(dirtyDate, { - weekStartsOn: 1 - }); -} - -// node_modules/date-fns/esm/_lib/assign/index.js -function assign(target, object) { - if (target == null) { - throw new TypeError("assign requires that input parameter not be null or undefined"); +}; +var dropTable = (db, table) => { + const sqlstr = `DROP TABLE IF EXISTS "${table}";`; + try { + db.exec(sqlstr); + } catch (e4) { + console.log(e4); } - for (var property in object) { - if (Object.prototype.hasOwnProperty.call(object, property)) { - ; - target[property] = object[property]; - } +}; +var insertIntoDB = (db, tables) => { + const sqlstr = Object.keys(tables).map((t4) => { + const tableFields = tables[t4].cols; + const rowsQuery = tables[t4].rows.reduce((prev, curr) => { + return `${prev} INSERT INTO "${t4}" VALUES (${tableFields.map((c4) => { + var _a2; + return `'${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a2 : ""}'`; + }).join(", ")});`; + }, ""); + return rowsQuery; + }).join("; "); + try { + db.exec(`BEGIN TRANSACTION; ${sqlstr} COMMIT;`); + } catch (e4) { + console.log(e4); } - return target; -} - -// node_modules/date-fns/esm/_lib/cloneObject/index.js -function cloneObject(object) { - return assign({}, object); -} +}; +var replaceDB = (db, tables) => { + const sqlstr = Object.keys(tables).map((t4) => { + const tableFields = tables[t4].cols; + const fieldQuery = uniq(tableFields).map((f4) => `'${sanitizeSQLStatement(f4)}' char`).join(", "); + const rowsQuery = tables[t4].rows.reduce((prev, curr) => { + return `${prev} REPLACE INTO "${t4}" VALUES (${tableFields.map((c4) => { + var _a2; + return `'${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a2 : ""}'`; + }).join(", ")});`; + }, ""); + const idxQuery = tables[t4].uniques.filter((f4) => f4).reduce((p3, c4) => { + return `${p3} CREATE UNIQUE INDEX IF NOT EXISTS idx_${t4}_${c4.replace( + /,/g, + "_" + )} ON ${t4}(${c4});`; + }, ""); + const insertQuery = `CREATE TABLE IF NOT EXISTS "${t4}" (${fieldQuery}); ${idxQuery} BEGIN TRANSACTION; ${rowsQuery} COMMIT;`; + return `DROP TABLE IF EXISTS "${t4}"; ${fieldQuery.length > 0 ? insertQuery : ""}`; + }).join("; "); + try { + db.exec(sqlstr); + } catch (e4) { + console.log(e4); + } +}; +var saveDBToPath = async (plugin, path, tables) => { + const sqlJS = await plugin.sqlJS(); + let db = await getDB(sqlJS, path); + replaceDB(db, tables); + await saveDBFile(path, db.export().buffer); + dispatchDatabaseFileChanged(path); + db.close(); + return true; +}; -// node_modules/date-fns/esm/formatDistance/index.js -var MINUTES_IN_DAY = 1440; -var MINUTES_IN_ALMOST_TWO_DAYS = 2520; -var MINUTES_IN_MONTH = 43200; -var MINUTES_IN_TWO_MONTHS = 86400; -function formatDistance3(dirtyDate, dirtyBaseDate, options) { - var _ref, _options$locale; - requiredArgs(2, arguments); - var defaultOptions3 = getDefaultOptions(); - var locale2 = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions3.locale) !== null && _ref !== void 0 ? _ref : defaultLocale_default; - if (!locale2.formatDistance) { - throw new RangeError("locale must contain formatDistance property"); +// src/utils/contexts/mdb.ts +var dbTableToMDBTable = (table, schema, fields) => { + var _a2; + return { + schema, + cols: fields, + rows: (_a2 = table == null ? void 0 : table.rows) != null ? _a2 : [] + }; +}; +var updateFieldsToSchema = (fields, tag) => { + if (tag) { + return [ + ...fields, + ...defaultTagFields.rows.filter( + (f4) => !fields.some((g4) => g4.name == f4.name && g4.schemaId == f4.schemaId) + ) + ]; } - var comparison = compareAsc(dirtyDate, dirtyBaseDate); - if (isNaN(comparison)) { - throw new RangeError("Invalid time value"); + return [ + ...fields, + ...defaultFolderFields.rows.filter( + (f4) => !fields.some((g4) => g4.name == f4.name && g4.schemaId == f4.schemaId) + ) + ]; +}; +var getMDBTable = async (plugin, table, path, tag) => { + const sqlJS = await plugin.sqlJS(); + const buf = await getDBFile(path); + if (!buf) { + return null; } - var localizeOptions = assign(cloneObject(options), { - addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix), - comparison - }); - var dateLeft; - var dateRight; - if (comparison > 0) { - dateLeft = toDate(dirtyBaseDate); - dateRight = toDate(dirtyDate); - } else { - dateLeft = toDate(dirtyDate); - dateRight = toDate(dirtyBaseDate); + const db = new sqlJS.Database(new Uint8Array(buf)); + await sanitizeTableSchema(plugin, db, path, tag); + let fieldsTables; + let schema; + try { + fieldsTables = dbResultsToDBTables( + db.exec(`SELECT * FROM m_fields WHERE schemaId = '${table}'`) + ); + schema = dbResultsToDBTables( + db.exec(`SELECT * FROM m_schema WHERE id = '${table}'`) + )[0].rows[0]; + } catch (e4) { + return null; } - var seconds = differenceInSeconds(dateRight, dateLeft); - var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1e3; - var minutes = Math.round((seconds - offsetInSeconds) / 60); - var months; - if (minutes < 2) { - if (options !== null && options !== void 0 && options.includeSeconds) { - if (seconds < 5) { - return locale2.formatDistance("lessThanXSeconds", 5, localizeOptions); - } else if (seconds < 10) { - return locale2.formatDistance("lessThanXSeconds", 10, localizeOptions); - } else if (seconds < 20) { - return locale2.formatDistance("lessThanXSeconds", 20, localizeOptions); - } else if (seconds < 40) { - return locale2.formatDistance("halfAMinute", 0, localizeOptions); - } else if (seconds < 60) { - return locale2.formatDistance("lessThanXMinutes", 1, localizeOptions); - } else { - return locale2.formatDistance("xMinutes", 1, localizeOptions); - } - } else { - if (minutes === 0) { - return locale2.formatDistance("lessThanXMinutes", 1, localizeOptions); - } else { - return locale2.formatDistance("xMinutes", minutes, localizeOptions); - } - } - } else if (minutes < 45) { - return locale2.formatDistance("xMinutes", minutes, localizeOptions); - } else if (minutes < 90) { - return locale2.formatDistance("aboutXHours", 1, localizeOptions); - } else if (minutes < MINUTES_IN_DAY) { - var hours = Math.round(minutes / 60); - return locale2.formatDistance("aboutXHours", hours, localizeOptions); - } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) { - return locale2.formatDistance("xDays", 1, localizeOptions); - } else if (minutes < MINUTES_IN_MONTH) { - var days = Math.round(minutes / MINUTES_IN_DAY); - return locale2.formatDistance("xDays", days, localizeOptions); - } else if (minutes < MINUTES_IN_TWO_MONTHS) { - months = Math.round(minutes / MINUTES_IN_MONTH); - return locale2.formatDistance("aboutXMonths", months, localizeOptions); + if (fieldsTables.length == 0) { + return { + schema, + cols: [], + rows: [] + }; } - months = differenceInMonths(dateRight, dateLeft); - if (months < 12) { - var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH); - return locale2.formatDistance("xMonths", nearestMonth, localizeOptions); - } else { - var monthsSinceStartOfYear = months % 12; - var years = Math.floor(months / 12); - if (monthsSinceStartOfYear < 3) { - return locale2.formatDistance("aboutXYears", years, localizeOptions); - } else if (monthsSinceStartOfYear < 9) { - return locale2.formatDistance("overXYears", years, localizeOptions); - } else { - return locale2.formatDistance("almostXYears", years + 1, localizeOptions); - } + const fields = fieldsTables[0].rows.filter( + (f4) => f4.name.length > 0 + ); + const dbTable = dbResultsToDBTables( + db.exec( + `SELECT ${fields.reduce((p3, c4) => [...p3, `"${c4.name}"`], []).join(", ")} FROM "${table}"` + ) + ); + db.close(); + return dbTableToMDBTable( + dbTable[0], + schema, + schema.primary ? updateFieldsToSchema(fields, tag) : fields + ); +}; +var deleteMDBTable = async (plugin, path, mdb) => { + const sqlJS = await plugin.sqlJS(); + const buf = await getDBFile(path); + if (!buf) { + return false; } -} - -// node_modules/date-fns/esm/getISOWeek/index.js -var MILLISECONDS_IN_WEEK4 = 6048e5; -function getISOWeek(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime(); - return Math.round(diff / MILLISECONDS_IN_WEEK4) + 1; -} - -// node_modules/date-fns/esm/getWeekYear/index.js -function getWeekYear(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var year = date.getFullYear(); - var defaultOptions3 = getDefaultOptions(); - var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); - if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { - throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); + const db = new sqlJS.Database(new Uint8Array(buf)); + deleteFromDB(db, "m_schema", `id = '${sanitizeSQLStatement(mdb)}'`); + deleteFromDB(db, "m_schema", `def = '${sanitizeSQLStatement(mdb)}'`); + deleteFromDB(db, "m_fields", `schemaId = '${sanitizeSQLStatement(mdb)}'`); + dropTable(db, mdb); + await saveDBFile(path, db.export().buffer); + db.close(); + return true; +}; +var getMDBTableSchemas = async (plugin, path, tag) => { + const sqlJS = await plugin.sqlJS(); + const buf = await getDBFile(path); + if (!buf) { + return null; } - var firstWeekOfNextYear = new Date(0); - firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); - firstWeekOfNextYear.setHours(0, 0, 0, 0); - var startOfNextYear = startOfWeek(firstWeekOfNextYear, options); - var firstWeekOfThisYear = new Date(0); - firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); - firstWeekOfThisYear.setHours(0, 0, 0, 0); - var startOfThisYear = startOfWeek(firstWeekOfThisYear, options); - if (date.getTime() >= startOfNextYear.getTime()) { - return year + 1; - } else if (date.getTime() >= startOfThisYear.getTime()) { - return year; - } else { - return year - 1; + const db = new sqlJS.Database(new Uint8Array(buf)); + await sanitizeTableSchema(plugin, db, path, tag); + const tables = db.exec(`SELECT * FROM m_schema`); + db.close(); + return tables[0].values.map((f4) => { + const [id2, name, type, def, predicate, primary] = f4; + return { id: id2, name, type, def, predicate, primary }; + }); +}; +var saveMDBToPath = async (plugin, path, mdb) => { + var _a2, _b2; + const sqlJS = await plugin.sqlJS(); + const buf = await getDBFile(path); + if (!buf) { + return null; } -} - -// node_modules/date-fns/esm/startOfWeekYear/index.js -function startOfWeekYear(dirtyDate, options) { - var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; - requiredArgs(1, arguments); - var defaultOptions3 = getDefaultOptions(); - var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); - var year = getWeekYear(dirtyDate, options); - var firstWeek = new Date(0); - firstWeek.setFullYear(year, 0, firstWeekContainsDate); - firstWeek.setHours(0, 0, 0, 0); - var date = startOfWeek(firstWeek, options); - return date; -} - -// node_modules/date-fns/esm/getWeek/index.js -var MILLISECONDS_IN_WEEK5 = 6048e5; -function getWeek(dirtyDate, options) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var diff = startOfWeek(date, options).getTime() - startOfWeekYear(date, options).getTime(); - return Math.round(diff / MILLISECONDS_IN_WEEK5) + 1; -} - -// node_modules/date-fns/esm/lastDayOfMonth/index.js -function lastDayOfMonth(dirtyDate) { - requiredArgs(1, arguments); - var date = toDate(dirtyDate); - var month = date.getMonth(); - date.setFullYear(date.getFullYear(), month + 1, 0); - date.setHours(0, 0, 0, 0); - return date; -} - -// node_modules/date-fns/esm/getWeeksInMonth/index.js -function getWeeksInMonth(date, options) { - requiredArgs(1, arguments); - return differenceInCalendarWeeks(lastDayOfMonth(date), startOfMonth(date), options) + 1; -} - -// node_modules/date-fns/esm/isAfter/index.js -function isAfter(dirtyDate, dirtyDateToCompare) { - requiredArgs(2, arguments); - var date = toDate(dirtyDate); - var dateToCompare = toDate(dirtyDateToCompare); - return date.getTime() > dateToCompare.getTime(); -} - -// node_modules/date-fns/esm/subDays/index.js -function subDays(dirtyDate, dirtyAmount) { - requiredArgs(2, arguments); - var amount = toInteger(dirtyAmount); - return addDays(dirtyDate, -amount); -} - -// node_modules/react-day-picker/dist/index.esm.js -var __assign = function() { - __assign = Object.assign || function __assign3(t4) { - for (var s5, i4 = 1, n2 = arguments.length; i4 < n2; i4++) { - s5 = arguments[i4]; - for (var p3 in s5) - if (Object.prototype.hasOwnProperty.call(s5, p3)) - t4[p3] = s5[p3]; + const db = new sqlJS.Database(new Uint8Array(buf)); + const fieldsTables = dbResultsToDBTables( + db.exec(`SELECT * FROM m_fields WHERE schemaId != '${mdb.schema.id}'`) + ); + const tables = { + m_fields: { + uniques: fieldSchema.uniques, + cols: fieldSchema.cols, + rows: [...(_b2 = (_a2 = fieldsTables[0]) == null ? void 0 : _a2.rows) != null ? _b2 : [], ...mdb.cols] + }, + [mdb.schema.id]: { + uniques: mdb.cols.filter((c4) => c4.unique == "true").map((c4) => c4.name), + cols: mdb.cols.map((c4) => c4.name), + rows: mdb.rows } - return t4; }; - return __assign.apply(this, arguments); -}; -function __rest(s5, e4) { - var t4 = {}; - for (var p3 in s5) - if (Object.prototype.hasOwnProperty.call(s5, p3) && e4.indexOf(p3) < 0) - t4[p3] = s5[p3]; - if (s5 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p3 = Object.getOwnPropertySymbols(s5); i4 < p3.length; i4++) { - if (e4.indexOf(p3[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s5, p3[i4])) - t4[p3[i4]] = s5[p3[i4]]; - } - return t4; -} -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) - for (var i4 = 0, l3 = from.length, ar; i4 < l3; i4++) { - if (ar || !(i4 in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i4); - ar[i4] = from[i4]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} -function isDayPickerMultiple(props2) { - return props2.mode === "multiple"; -} -function isDayPickerRange(props2) { - return props2.mode === "range"; -} -function isDayPickerSingle(props2) { - return props2.mode === "single"; -} -var defaultClassNames = { - root: "rdp", - multiple_months: "rdp-multiple_months", - with_weeknumber: "rdp-with_weeknumber", - vhidden: "rdp-vhidden", - button_reset: "rdp-button_reset", - button: "rdp-button", - caption: "rdp-caption", - caption_start: "rdp-caption_start", - caption_end: "rdp-caption_end", - caption_between: "rdp-caption_between", - caption_label: "rdp-caption_label", - caption_dropdowns: "rdp-caption_dropdowns", - dropdown: "rdp-dropdown", - dropdown_month: "rdp-dropdown_month", - dropdown_year: "rdp-dropdown_year", - dropdown_icon: "rdp-dropdown_icon", - months: "rdp-months", - month: "rdp-month", - table: "rdp-table", - tbody: "rdp-tbody", - tfoot: "rdp-tfoot", - head: "rdp-head", - head_row: "rdp-head_row", - head_cell: "rdp-head_cell", - nav: "rdp-nav", - nav_button: "rdp-nav_button", - nav_button_previous: "rdp-nav_button_previous", - nav_button_next: "rdp-nav_button_next", - nav_icon: "rdp-nav_icon", - row: "rdp-row", - weeknumber: "rdp-weeknumber", - cell: "rdp-cell", - day: "rdp-day", - day_today: "rdp-day_today", - day_outside: "rdp-day_outside", - day_selected: "rdp-day_selected", - day_disabled: "rdp-day_disabled", - day_hidden: "rdp-day_hidden", - day_range_start: "rdp-day_range_start", - day_range_end: "rdp-day_range_end", - day_range_middle: "rdp-day_range_middle" -}; -function formatCaption(month, options) { - return format(month, "LLLL y", options); -} -function formatDay(day, options) { - return format(day, "d", options); -} -function formatMonthCaption(month, options) { - return format(month, "LLLL", options); -} -function formatWeekNumber(weekNumber) { - return "".concat(weekNumber); -} -function formatWeekdayName(weekday, options) { - return format(weekday, "cccccc", options); -} -function formatYearCaption(year, options) { - return format(year, "yyyy", options); -} -var formatters3 = /* @__PURE__ */ Object.freeze({ - __proto__: null, - formatCaption, - formatDay, - formatMonthCaption, - formatWeekNumber, - formatWeekdayName, - formatYearCaption -}); -var labelDay = function(day, activeModifiers, options) { - return format(day, "do MMMM (EEEE)", options); -}; -var labelMonthDropdown = function() { - return "Month: "; -}; -var labelNext = function() { - return "Go to next month"; -}; -var labelPrevious = function() { - return "Go to previous month"; + return saveDBToPath(plugin, path, tables); }; -var labelWeekday = function(day, options) { - return format(day, "cccc", options); +var optionValuesForColumn = (column, table) => { + var _a2; + return uniq( + (_a2 = table == null ? void 0 : table.rows.reduce((p3, c4) => { + return [...p3, ...splitString(c4[column])]; + }, [])) != null ? _a2 : [] + ); }; -var labelWeekNumber = function(n2) { - return "Week n. ".concat(n2); +var createDefaultDB = async (plugin, path, tag) => { + const sqlJS = await plugin.sqlJS(); + const table = tag ? defaultTagTables : defaultFolderTables; + return saveDBToPath(plugin, path, table); }; -var labelYearDropdown = function() { - return "Year: "; +var sanitizeTableSchema = async (plugin, db, path, tag) => { + const sqlJS = await plugin.sqlJS(); + const tableRes = db.exec( + `SELECT name FROM sqlite_master WHERE type='table';` + ); + if (!tableRes[0] || !tableRes[0].values.some((f4) => f4[0] == "m_schema") || !tableRes[0].values.some((f4) => f4[0] == "m_fields") || !tableRes[0].values.some((f4) => f4[0] == "files")) { + await createDefaultDB(plugin, path, tag); + } }; -var labels = /* @__PURE__ */ Object.freeze({ - __proto__: null, - labelDay, - labelMonthDropdown, - labelNext, - labelPrevious, - labelWeekday, - labelWeekNumber, - labelYearDropdown +var newRowByDBRow = (row) => ({ + _id: genId(), + ...row }); -function getDefaultContextValues() { - var captionLayout = "buttons"; - var classNames8 = defaultClassNames; - var locale2 = en_US_default; - var modifiersClassNames = {}; - var modifiers = {}; - var numberOfMonths = 1; - var styles = {}; - var today = new Date(); - return { - captionLayout, - classNames: classNames8, - formatters: formatters3, - labels, - locale: locale2, - modifiersClassNames, - modifiers, - numberOfMonths, - styles, - today, - mode: "default" +var rowWithID = (row, tag) => { + return row._id && row._id.length > 0 ? row : { + ...newRowByDBRow({ ...row, _source: tag ? "tag" : "folder" }) }; -} -function parseFromToProps(props2) { - var fromYear = props2.fromYear, toYear = props2.toYear, fromMonth = props2.fromMonth, toMonth = props2.toMonth; - var fromDate = props2.fromDate, toDate2 = props2.toDate; - if (fromMonth) { - fromDate = startOfMonth(fromMonth); - } else if (fromYear) { - fromDate = new Date(fromYear, 0, 1); - } - if (toMonth) { - toDate2 = endOfMonth(toMonth); - } else if (toYear) { - toDate2 = new Date(toYear, 11, 31); +}; +var createNewRow = (mdb, row, index) => { + if (index) { + return { + ...mdb, + rows: insert(mdb.rows, index, newRowByDBRow(row)) + }; } return { - fromDate: fromDate ? startOfDay(fromDate) : void 0, - toDate: toDate2 ? startOfDay(toDate2) : void 0 + ...mdb, + rows: [...mdb.rows, newRowByDBRow(row)] }; -} -var DayPickerContext = B(void 0); -function DayPickerProvider(props2) { - var _a2; - var initialProps = props2.initialProps; - var defaultContextValues = getDefaultContextValues(); - var _b2 = parseFromToProps(initialProps), fromDate = _b2.fromDate, toDate2 = _b2.toDate; - var captionLayout = (_a2 = initialProps.captionLayout) !== null && _a2 !== void 0 ? _a2 : defaultContextValues.captionLayout; - if (captionLayout !== "buttons" && (!fromDate || !toDate2)) { - captionLayout = "buttons"; - } - var onSelect; - if (isDayPickerSingle(initialProps) || isDayPickerMultiple(initialProps) || isDayPickerRange(initialProps)) { - onSelect = initialProps.onSelect; +}; +var consolidateFilesToTable = async (plugin, path, table, files, tag) => { + const sqlJS = await plugin.sqlJS(); + const isTag = tag ? true : false; + let db = new sqlJS.Database(); + if (getAbstractFileAtPath(app, path)) { + const buf = await getDBFile(path); + db = new sqlJS.Database(new Uint8Array(buf)); + } else { + await createDefaultDB(plugin, path, false); } - var value = __assign(__assign(__assign({}, defaultContextValues), initialProps), { captionLayout, classNames: __assign(__assign({}, defaultContextValues.classNames), initialProps.classNames), components: __assign({}, initialProps.components), formatters: __assign(__assign({}, defaultContextValues.formatters), initialProps.formatters), fromDate, labels: __assign(__assign({}, defaultContextValues.labels), initialProps.labels), mode: initialProps.mode || defaultContextValues.mode, modifiers: __assign(__assign({}, defaultContextValues.modifiers), initialProps.modifiers), modifiersClassNames: __assign(__assign({}, defaultContextValues.modifiersClassNames), initialProps.modifiersClassNames), onSelect, styles: __assign(__assign({}, defaultContextValues.styles), initialProps.styles), toDate: toDate2 }); - return bn.createElement(DayPickerContext.Provider, { value }, props2.children); -} -function useDayPicker() { - var context = q2(DayPickerContext); - if (!context) { - throw new Error("useDayPicker must be used within a DayPickerProvider."); + const mdbTable = await getMDBTable(plugin, table, path, isTag); + const missingFiles = files.filter((f4) => !mdbTable.rows.some((g4) => g4.File == f4 && g4._source != "")).map((f4) => ({ File: f4 })); + const mergeDuplicates = (rows, tag2) => { + const mergeFields = (row, row2) => { + return { ...row, ...row2 }; + }; + return rows.reduce((p3, c4) => { + const findIndex2 = p3.findIndex((f4) => f4._source != "" && f4.File == c4.File); + if (findIndex2 != -1) { + return p3.map((f4, i4) => i4 == findIndex2 ? mergeFields(f4, c4) : f4); + } + return [...p3, c4]; + }, []); + }; + let linkedFolderContexts = [""]; + if (tag) { + const contexts = uniq( + mdbTable.rows.map((f4) => f4._source).filter((f4) => f4 != "" && f4 != "tag") + ); + const promises = contexts.map( + (context) => getMDBTable(plugin, "files", context, false).then((f4) => [f4, context]) + ); + const results = await Promise.all(promises); + linkedFolderContexts.push( + ...results.filter(([f4, g4]) => { + var _a2, _b2; + return (_b2 = (_a2 = f4 == null ? void 0 : f4.schema) == null ? void 0 : _a2.def) == null ? void 0 : _b2.split("&").some((h5) => h5 == tag); + }).map(([f4, g4]) => g4) + ); } - return context; -} -function CaptionLabel(props2) { - var _a2 = useDayPicker(), locale2 = _a2.locale, classNames8 = _a2.classNames, styles = _a2.styles, formatCaption2 = _a2.formatters.formatCaption; - return bn.createElement("h2", { className: classNames8.caption_label, style: styles.caption_label, "aria-live": "polite", "aria-atomic": "true", id: props2.id }, formatCaption2(props2.displayMonth, { locale: locale2 })); -} -function IconDropdown(props2) { - return bn.createElement( - "svg", - __assign({ width: "8px", height: "8px", viewBox: "0 0 120 120", "data-testid": "iconDropdown" }, props2), - bn.createElement("path", { d: "M4.22182541,48.2218254 C8.44222828,44.0014225 15.2388494,43.9273804 19.5496459,47.9996989 L19.7781746,48.2218254 L60,88.443 L100.221825,48.2218254 C104.442228,44.0014225 111.238849,43.9273804 115.549646,47.9996989 L115.778175,48.2218254 C119.998577,52.4422283 120.07262,59.2388494 116.000301,63.5496459 L115.778175,63.7781746 L67.7781746,111.778175 C63.5577717,115.998577 56.7611506,116.07262 52.4503541,112.000301 L52.2218254,111.778175 L4.22182541,63.7781746 C-0.0739418023,59.4824074 -0.0739418023,52.5175926 4.22182541,48.2218254 Z", fill: "currentColor", fillRule: "nonzero" }) - ); -} -function Dropdown(props2) { - var _a2, _b2; - var onChange = props2.onChange, value = props2.value, children = props2.children, caption = props2.caption, className = props2.className, style = props2.style; - var dayPicker = useDayPicker(); - var IconDropdownComponent = (_b2 = (_a2 = dayPicker.components) === null || _a2 === void 0 ? void 0 : _a2.IconDropdown) !== null && _b2 !== void 0 ? _b2 : IconDropdown; - return bn.createElement( - "div", - { className, style }, - bn.createElement("span", { className: dayPicker.classNames.vhidden }, props2["aria-label"]), - bn.createElement("select", { name: props2.name, "aria-label": props2["aria-label"], className: dayPicker.classNames.dropdown, style: dayPicker.styles.dropdown, value, onChange }, children), - bn.createElement( - "div", - { className: dayPicker.classNames.caption_label, style: dayPicker.styles.caption_label, "aria-hidden": "true" }, - caption, - bn.createElement(IconDropdownComponent, { className: dayPicker.classNames.dropdown_icon, style: dayPicker.styles.dropdown_icon }) - ) + const nonLinkedRows = mdbTable.rows.filter( + (f4) => linkedFolderContexts.some((g4) => g4 == f4._source) && !missingFiles.some((g4) => f4.File == g4.File) ); -} -function MonthsDropdown(props2) { - var _a2; - var _b2 = useDayPicker(), fromDate = _b2.fromDate, toDate2 = _b2.toDate, styles = _b2.styles, locale2 = _b2.locale, formatMonthCaption2 = _b2.formatters.formatMonthCaption, classNames8 = _b2.classNames, components = _b2.components, labelMonthDropdown2 = _b2.labels.labelMonthDropdown; - if (!fromDate) - return bn.createElement(bn.Fragment, null); - if (!toDate2) - return bn.createElement(bn.Fragment, null); - var dropdownMonths = []; - if (isSameYear(fromDate, toDate2)) { - var date = startOfMonth(fromDate); - for (var month = fromDate.getMonth(); month <= toDate2.getMonth(); month++) { - dropdownMonths.push(setMonth(date, month)); - } + const newRows = [ + ...nonLinkedRows, + ...[ + ...mergeDuplicates( + mdbTable.rows.filter( + (f4) => (f4._source != "" || missingFiles.some((g4) => f4.File == g4.File)) && files.some((g4) => g4 == f4.File) + ), + isTag + ), + ...missingFiles + ].map((f4) => rowWithID(f4, isTag)) + ]; + const newMDBTable = { + ...mdbTable, + cols: [ + ...(isTag ? defaultTagFields : defaultFolderFields).rows, + ...mdbTable.cols + ].filter(onlyUniqueProp("name")), + rows: newRows + }; + await saveMDBToPath(plugin, path, newMDBTable); + return newMDBTable; +}; +var consolidateRowsToTag = async (plugin, path, table, source, rows) => { + const sqlJS = await plugin.sqlJS(); + let db = new sqlJS.Database(); + if (getAbstractFileAtPath(app, path)) { + const buf = await getDBFile(path); + db = new sqlJS.Database(new Uint8Array(buf)); } else { - var date = startOfMonth(new Date()); - for (var month = 0; month <= 11; month++) { - dropdownMonths.push(setMonth(date, month)); - } + await createDefaultDB(plugin, path, true); } - var handleChange = function(e4) { - var selectedMonth = Number(e4.target.value); - var newMonth = setMonth(startOfMonth(props2.displayMonth), selectedMonth); - props2.onChange(newMonth); - }; - var DropdownComponent2 = (_a2 = components === null || components === void 0 ? void 0 : components.Dropdown) !== null && _a2 !== void 0 ? _a2 : Dropdown; - return bn.createElement(DropdownComponent2, { name: "months", "aria-label": labelMonthDropdown2(), className: classNames8.dropdown_month, style: styles.dropdown_month, onChange: handleChange, value: props2.displayMonth.getMonth(), caption: formatMonthCaption2(props2.displayMonth, { locale: locale2 }) }, dropdownMonths.map(function(m5) { - return bn.createElement("option", { key: m5.getMonth(), value: m5.getMonth() }, formatMonthCaption2(m5, { locale: locale2 })); - })); -} -function YearsDropdown(props2) { - var _a2; - var displayMonth = props2.displayMonth; - var _b2 = useDayPicker(), fromDate = _b2.fromDate, toDate2 = _b2.toDate, locale2 = _b2.locale, styles = _b2.styles, classNames8 = _b2.classNames, components = _b2.components, formatYearCaption2 = _b2.formatters.formatYearCaption, labelYearDropdown2 = _b2.labels.labelYearDropdown; - var years = []; - if (!fromDate) - return bn.createElement(bn.Fragment, null); - if (!toDate2) - return bn.createElement(bn.Fragment, null); - var fromYear = fromDate.getFullYear(); - var toYear = toDate2.getFullYear(); - for (var year = fromYear; year <= toYear; year++) { - years.push(setYear(startOfYear(new Date()), year)); - } - var handleChange = function(e4) { - var newMonth = setYear(startOfMonth(displayMonth), Number(e4.target.value)); - props2.onChange(newMonth); - }; - var DropdownComponent2 = (_a2 = components === null || components === void 0 ? void 0 : components.Dropdown) !== null && _a2 !== void 0 ? _a2 : Dropdown; - return bn.createElement(DropdownComponent2, { name: "years", "aria-label": labelYearDropdown2(), className: classNames8.dropdown_year, style: styles.dropdown_year, onChange: handleChange, value: displayMonth.getFullYear(), caption: formatYearCaption2(displayMonth, { locale: locale2 }) }, years.map(function(year2) { - return bn.createElement("option", { key: year2.getFullYear(), value: year2.getFullYear() }, formatYearCaption2(year2, { locale: locale2 })); - })); -} -function useControlledValue(defaultValue2, controlledValue) { - var _a2 = p2(defaultValue2), uncontrolledValue = _a2[0], setValue = _a2[1]; - var value = controlledValue === void 0 ? uncontrolledValue : controlledValue; - return [value, setValue]; -} -function getInitialMonth(context) { - var month = context.month, defaultMonth = context.defaultMonth, today = context.today; - var initialMonth = month || defaultMonth || today || new Date(); - var toDate2 = context.toDate, fromDate = context.fromDate, _a2 = context.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; - if (toDate2 && differenceInCalendarMonths(toDate2, initialMonth) < 0) { - var offset = -1 * (numberOfMonths - 1); - initialMonth = addMonths(toDate2, offset); - } - if (fromDate && differenceInCalendarMonths(initialMonth, fromDate) < 0) { - initialMonth = fromDate; - } - return startOfMonth(initialMonth); -} -function useNavigationState() { - var context = useDayPicker(); - var initialMonth = getInitialMonth(context); - var _a2 = useControlledValue(initialMonth, context.month), month = _a2[0], setMonth2 = _a2[1]; - var goToMonth = function(date) { - var _a3; - if (context.disableNavigation) - return; - var month2 = startOfMonth(date); - setMonth2(month2); - (_a3 = context.onMonthChange) === null || _a3 === void 0 ? void 0 : _a3.call(context, month2); - }; - return [month, goToMonth]; -} -function getDisplayMonths(month, _a2) { - var reverseMonths = _a2.reverseMonths, numberOfMonths = _a2.numberOfMonths; - var start = startOfMonth(month); - var end = startOfMonth(addMonths(start, numberOfMonths)); - var monthsDiff = differenceInCalendarMonths(end, start); - var months = []; - for (var i4 = 0; i4 < monthsDiff; i4++) { - var nextMonth = addMonths(start, i4); - months.push(nextMonth); - } - if (reverseMonths) - months = months.reverse(); - return months; -} -function getNextMonth(startingMonth, options) { - if (options.disableNavigation) { - return void 0; - } - var toDate2 = options.toDate, pagedNavigation = options.pagedNavigation, _a2 = options.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; - var offset = pagedNavigation ? numberOfMonths : 1; - var month = startOfMonth(startingMonth); - if (!toDate2) { - return addMonths(month, offset); - } - var monthsDiff = differenceInCalendarMonths(toDate2, startingMonth); - if (monthsDiff < numberOfMonths) { - return void 0; - } - return addMonths(month, offset); -} -function getPreviousMonth(startingMonth, options) { - if (options.disableNavigation) { - return void 0; - } - var fromDate = options.fromDate, pagedNavigation = options.pagedNavigation, _a2 = options.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; - var offset = pagedNavigation ? numberOfMonths : 1; - var month = startOfMonth(startingMonth); - if (!fromDate) { - return addMonths(month, -offset); - } - var monthsDiff = differenceInCalendarMonths(month, fromDate); - if (monthsDiff <= 0) { - return void 0; - } - return addMonths(month, -offset); -} -var NavigationContext = B(void 0); -function NavigationProvider(props2) { - var dayPicker = useDayPicker(); - var _a2 = useNavigationState(), currentMonth = _a2[0], goToMonth = _a2[1]; - var displayMonths = getDisplayMonths(currentMonth, dayPicker); - var nextMonth = getNextMonth(currentMonth, dayPicker); - var previousMonth = getPreviousMonth(currentMonth, dayPicker); - var isDateDisplayed = function(date) { - return displayMonths.some(function(displayMonth) { - return isSameMonth(date, displayMonth); - }); - }; - var goToDate = function(date, refDate) { - if (isDateDisplayed(date)) { - return; - } - if (refDate && isBefore(date, refDate)) { - goToMonth(addMonths(date, 1 + dayPicker.numberOfMonths * -1)); - } else { - goToMonth(date); + const mdbTable = await getMDBTable(plugin, table, path, true); + const prevRows = mdbTable.rows.map((f4) => { + if (f4._source != source) { + return f4; } - }; - var value = { - currentMonth, - displayMonths, - goToMonth, - goToDate, - previousMonth, - nextMonth, - isDateDisplayed - }; - return bn.createElement(NavigationContext.Provider, { value }, props2.children); -} -function useNavigation() { - var context = q2(NavigationContext); - if (!context) { - throw new Error("useNavigation must be used within a NavigationProvider"); - } - return context; -} -function CaptionDropdowns(props2) { - var _a2; - var _b2 = useDayPicker(), classNames8 = _b2.classNames, styles = _b2.styles, components = _b2.components; - var goToMonth = useNavigation().goToMonth; - var handleMonthChange = function(newMonth) { - goToMonth(newMonth); - }; - var CaptionLabelComponent = (_a2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a2 !== void 0 ? _a2 : CaptionLabel; - var captionLabel = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); - return bn.createElement( - "div", - { className: classNames8.caption_dropdowns, style: styles.caption_dropdowns }, - bn.createElement("div", { className: classNames8.vhidden }, captionLabel), - bn.createElement(MonthsDropdown, { onChange: handleMonthChange, displayMonth: props2.displayMonth }), - bn.createElement(YearsDropdown, { onChange: handleMonthChange, displayMonth: props2.displayMonth }) - ); -} -function IconLeft(props2) { - return bn.createElement( - "svg", - __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props2), - bn.createElement("path", { d: "M69.490332,3.34314575 C72.6145263,0.218951416 77.6798462,0.218951416 80.8040405,3.34314575 C83.8617626,6.40086786 83.9268205,11.3179931 80.9992143,14.4548388 L80.8040405,14.6568542 L35.461,60 L80.8040405,105.343146 C83.8617626,108.400868 83.9268205,113.317993 80.9992143,116.454839 L80.8040405,116.656854 C77.7463184,119.714576 72.8291931,119.779634 69.6923475,116.852028 L69.490332,116.656854 L18.490332,65.6568542 C15.4326099,62.5991321 15.367552,57.6820069 18.2951583,54.5451612 L18.490332,54.3431458 L69.490332,3.34314575 Z", fill: "currentColor", fillRule: "nonzero" }) + const row = rows.find((g4) => g4._id == f4._sourceId); + return row ? { ...f4, File: row["File"] } : f4; + }).filter( + (f4) => f4._source != source || rows.some((g4) => g4._id == f4._sourceId) ); -} -function IconRight(props2) { - return bn.createElement( - "svg", - __assign({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props2), - bn.createElement("path", { d: "M49.8040405,3.34314575 C46.6798462,0.218951416 41.6145263,0.218951416 38.490332,3.34314575 C35.4326099,6.40086786 35.367552,11.3179931 38.2951583,14.4548388 L38.490332,14.6568542 L83.8333725,60 L38.490332,105.343146 C35.4326099,108.400868 35.367552,113.317993 38.2951583,116.454839 L38.490332,116.656854 C41.5480541,119.714576 46.4651794,119.779634 49.602025,116.852028 L49.8040405,116.656854 L100.804041,65.6568542 C103.861763,62.5991321 103.926821,57.6820069 100.999214,54.5451612 L100.804041,54.3431458 L49.8040405,3.34314575 Z", fill: "currentColor" }) + const missingRows = rows.filter( + (f4) => !mdbTable.rows.some((g4) => g4._source == source && g4._sourceId == f4._id) + ).map( + (f4) => newRowByDBRow({ File: f4.File, _source: source, _sourceId: f4._id }) ); -} -var Button = k3(function(props2, ref) { - var _a2 = useDayPicker(), classNames8 = _a2.classNames, styles = _a2.styles; - var classNamesArr = [classNames8.button_reset, classNames8.button]; - if (props2.className) { - classNamesArr.push(props2.className); - } - var className = classNamesArr.join(" "); - var style = __assign(__assign({}, styles.button_reset), styles.button); - if (props2.style) { - Object.assign(style, props2.style); + const newRows = [...prevRows, ...missingRows]; + const newMDBTable = { + ...mdbTable, + cols: [...defaultTagFields.rows, ...mdbTable.cols].filter( + onlyUniqueProp("name") + ), + rows: newRows + }; + await saveMDBToPath(plugin, path, newMDBTable); + return newMDBTable; +}; + +// src/components/ContextView/MDBContext.tsx +var MDBContext = B({ + tables: [], + cols: [], + sortedColumns: [], + data: [], + filteredData: [], + tableData: null, + contextTable: {}, + selectedRows: [], + selectRows: () => { + }, + setContextTable: () => { + }, + predicate: defaultPredicate, + savePredicate: () => { + }, + saveDB: () => null, + saveContextDB: () => null, + schema: null, + dbSchema: null, + setSchema: () => { + }, + setDBSchema: () => { + }, + dbPath: null, + isFolderContext: false, + folderPath: "", + saveColumn: () => false, + newColumn: () => false, + delColumn: () => { + }, + saveSchema: () => null, + deleteSchema: () => null, + tagContexts: [], + dbFileExists: false, + searchString: "", + setSearchString: () => { + }, + loadContextFields: () => { } - return bn.createElement("button", __assign({}, props2, { ref, type: "button", className, style })); }); -function Navigation(props2) { - var _a2, _b2; - var _c2 = useDayPicker(), dir = _c2.dir, locale2 = _c2.locale, classNames8 = _c2.classNames, styles = _c2.styles, _d2 = _c2.labels, labelPrevious2 = _d2.labelPrevious, labelNext2 = _d2.labelNext, components = _c2.components; - if (!props2.nextMonth && !props2.previousMonth) { - return bn.createElement(bn.Fragment, null); - } - var previousLabel = labelPrevious2(props2.previousMonth, { locale: locale2 }); - var previousClassName = [ - classNames8.nav_button, - classNames8.nav_button_previous - ].join(" "); - var nextLabel = labelNext2(props2.nextMonth, { locale: locale2 }); - var nextClassName = [ - classNames8.nav_button, - classNames8.nav_button_next - ].join(" "); - var IconRightComponent = (_a2 = components === null || components === void 0 ? void 0 : components.IconRight) !== null && _a2 !== void 0 ? _a2 : IconRight; - var IconLeftComponent = (_b2 = components === null || components === void 0 ? void 0 : components.IconLeft) !== null && _b2 !== void 0 ? _b2 : IconLeft; - return bn.createElement( - "div", - { className: classNames8.nav, style: styles.nav }, - !props2.hidePrevious && bn.createElement(Button, { name: "previous-month", "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_previous, disabled: !props2.previousMonth, onClick: props2.onPreviousClick }, dir === "rtl" ? bn.createElement(IconRightComponent, { className: classNames8.nav_icon, style: styles.nav_icon }) : bn.createElement(IconLeftComponent, { className: classNames8.nav_icon, style: styles.nav_icon })), - !props2.hideNext && bn.createElement(Button, { name: "next-month", "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !props2.nextMonth, onClick: props2.onNextClick }, dir === "rtl" ? bn.createElement(IconLeftComponent, { className: classNames8.nav_icon, style: styles.nav_icon }) : bn.createElement(IconRightComponent, { className: classNames8.nav_icon, style: styles.nav_icon })) +var MDBProvider = (props2) => { + var _a2, _b2, _c2; + const { dbPath } = props2; + const [dbFileExists, setDBFileExists] = p2(false); + const [schema, setSchema] = p2(null); + const [searchString, setSearchString] = p2(null); + const [schemaTable, setSchemaTable] = p2(null); + const tables = (_a2 = schemaTable == null ? void 0 : schemaTable.rows) != null ? _a2 : []; + const [tableData, setTableData] = p2(null); + const [dbSchema, setDBSchema] = p2(null); + const [contextTable, setContextTable] = p2({}); + const [predicate, setPredicate] = p2(defaultPredicate); + const [selectedRows, setSelectedRows] = p2([]); + const defaultSchema = props2.tag ? defaultTagSchema : defaultFolderSchema; + const folderPath = (_c2 = (_b2 = props2.folder) != null ? _b2 : props2.tag) != null ? _c2 : ""; + const isFolderContext = props2.folder ? true : false; + const tagContexts = F( + () => { + var _a3, _b3, _c3; + return ((_a3 = dbSchema == null ? void 0 : dbSchema.def) == null ? void 0 : _a3.length) > 0 ? (_c3 = (_b3 = dbSchema == null ? void 0 : dbSchema.def) == null ? void 0 : _b3.split("&")) != null ? _c3 : [] : []; + }, + [dbSchema] ); -} -function CaptionNavigation(props2) { - var _a2; - var _b2; - var _c2 = useDayPicker(), numberOfMonths = _c2.numberOfMonths, dir = _c2.dir, components = _c2.components; - var _d2 = useNavigation(), previousMonth = _d2.previousMonth, nextMonth = _d2.nextMonth, goToMonth = _d2.goToMonth, displayMonths = _d2.displayMonths; - var displayIndex = displayMonths.findIndex(function(month) { - return isSameMonth(props2.displayMonth, month); - }); - var isFirst = displayIndex === 0; - var isLast = displayIndex === displayMonths.length - 1; - if (dir === "rtl") { - _a2 = [isFirst, isLast], isLast = _a2[0], isFirst = _a2[1]; - } - var hideNext = numberOfMonths > 1 && (isFirst || !isLast); - var hidePrevious = numberOfMonths > 1 && (isLast || !isFirst); - var handlePreviousClick = function() { - if (!previousMonth) - return; - goToMonth(previousMonth); - }; - var handleNextClick = function() { - if (!nextMonth) - return; - goToMonth(nextMonth); - }; - var CaptionLabelComponent = (_b2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _b2 !== void 0 ? _b2 : CaptionLabel; - var captionLabel = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); - return bn.createElement( - bn.Fragment, - null, - captionLabel, - bn.createElement(Navigation, { displayMonth: props2.displayMonth, hideNext, hidePrevious, nextMonth, previousMonth, onPreviousClick: handlePreviousClick, onNextClick: handleNextClick }) + const cols = F( + () => { + var _a3; + return [ + ...(_a3 = tableData == null ? void 0 : tableData.cols.map((f4) => ({ ...f4, table: "" }))) != null ? _a3 : [], + ...tagContexts.reduce( + (p3, c4) => { + var _a4, _b3; + return [ + ...p3, + ...(_b3 = (_a4 = contextTable[c4]) == null ? void 0 : _a4.cols.filter((f4) => f4.name != "File" && f4.type != "fileprop").map((f4) => ({ ...f4, table: c4 }))) != null ? _b3 : [] + ]; + }, + [] + ) + ]; + }, + [tableData, schema, contextTable, tagContexts] ); -} -function Caption(props2) { - var _a2; - var _b2 = useDayPicker(), classNames8 = _b2.classNames, disableNavigation = _b2.disableNavigation, styles = _b2.styles, captionLayout = _b2.captionLayout, components = _b2.components; - var CaptionLabelComponent = (_a2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a2 !== void 0 ? _a2 : CaptionLabel; - var caption; - if (disableNavigation) { - caption = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); - } else if (captionLayout === "dropdown") { - caption = bn.createElement(CaptionDropdowns, { displayMonth: props2.displayMonth, id: props2.id }); - } else { - caption = bn.createElement(CaptionNavigation, { displayMonth: props2.displayMonth, id: props2.id }); - } - return bn.createElement("div", { className: classNames8.caption, style: styles.caption }, caption); -} -function Footer() { - var _a2 = useDayPicker(), footer = _a2.footer, styles = _a2.styles, tfoot = _a2.classNames.tfoot; - if (!footer) - return bn.createElement(bn.Fragment, null); - return bn.createElement( - "tfoot", - { className: tfoot, style: styles.tfoot }, - bn.createElement( - "tr", - null, - bn.createElement("td", { colSpan: 8 }, footer) - ) + const data = F( + () => { + var _a3; + return (_a3 = tableData == null ? void 0 : tableData.rows.map((r3, index) => ({ + _index: index.toString(), + ...(dbSchema == null ? void 0 : dbSchema.primary) ? { ...appendFileMetadataForRow(r3, tableData.cols) } : r3, + ...tagContexts.reduce((p3, c4) => { + var _a4, _b3, _c3, _d2; + const contextRowIndexByFile = (_b3 = (_a4 = contextTable[c4]) == null ? void 0 : _a4.rows.findIndex((f4) => f4.File == r3.File)) != null ? _b3 : -1; + const contextRowsByFile = (_d2 = (_c3 = contextTable[c4]) == null ? void 0 : _c3.rows[contextRowIndexByFile]) != null ? _d2 : {}; + const contextRowsWithKeysAppended = Object.keys( + contextRowsByFile + ).reduce((pa, ca) => ({ ...pa, [ca + c4]: contextRowsByFile[ca] }), { + ["_index" + c4]: contextRowIndexByFile.toString() + }); + return { ...p3, ...contextRowsWithKeysAppended }; + }, {}) + }))) != null ? _a3 : []; + }, + [tableData, schema, contextTable] ); -} -function getWeekdays(locale2, weekStartsOn, ISOWeek) { - var start = ISOWeek ? startOfISOWeek(new Date()) : startOfWeek(new Date(), { locale: locale2, weekStartsOn }); - var days = []; - for (var i4 = 0; i4 < 7; i4++) { - var day = addDays(start, i4); - days.push(day); - } - return days; -} -function HeadRow() { - var _a2 = useDayPicker(), classNames8 = _a2.classNames, styles = _a2.styles, showWeekNumber = _a2.showWeekNumber, locale2 = _a2.locale, weekStartsOn = _a2.weekStartsOn, ISOWeek = _a2.ISOWeek, formatWeekdayName2 = _a2.formatters.formatWeekdayName, labelWeekday2 = _a2.labels.labelWeekday; - var weekdays = getWeekdays(locale2, weekStartsOn, ISOWeek); - return bn.createElement( - "tr", - { style: styles.head_row, className: classNames8.head_row }, - showWeekNumber && bn.createElement("th", { scope: "col", style: styles.head_cell, className: classNames8.head_cell }), - weekdays.map(function(weekday, i4) { - return bn.createElement( - "th", - { key: i4, scope: "col", className: classNames8.head_cell, style: styles.head_cell }, - bn.createElement("span", { "aria-hidden": true }, formatWeekdayName2(weekday, { locale: locale2 })), - bn.createElement("span", { className: classNames8.vhidden }, labelWeekday2(weekday, { locale: locale2 })) - ); - }) + const sortedColumns = F( + () => cols.filter((f4) => f4.hidden != "true").sort( + (a5, b4) => predicate.colsOrder.findIndex((x5) => x5 == a5.name + a5.table) - predicate.colsOrder.findIndex((x5) => x5 == b4.name + b4.table) + ), + [cols, predicate] ); -} -function Head() { - var _a2; - var _b2 = useDayPicker(), classNames8 = _b2.classNames, styles = _b2.styles, components = _b2.components; - var HeadRowComponent = (_a2 = components === null || components === void 0 ? void 0 : components.HeadRow) !== null && _a2 !== void 0 ? _a2 : HeadRow; - return bn.createElement( - "thead", - { style: styles.head, className: classNames8.head }, - bn.createElement(HeadRowComponent, null) + const filteredData = F( + () => data.filter((f4) => { + return predicate.filters.reduce((p3, c4) => { + return p3 ? filterReturnForCol( + cols.find((col) => col.name + col.table == c4.field), + c4, + f4 + ) : p3; + }, true); + }).filter( + (f4) => (searchString == null ? void 0 : searchString.length) > 0 ? matchAny(searchString).test( + Object.keys(f4).filter((g4) => g4.charAt(0) != "_").map((g4) => f4[g4]).join("|") + ) : true + ).sort((a5, b4) => { + return predicate.sort.reduce((p3, c4) => { + return p3 == 0 ? sortReturnForCol( + cols.find((col) => col.name + col.table == c4.field), + c4, + a5, + b4 + ) : p3; + }, 0); + }), + [predicate, data, cols, searchString] ); -} -function DayContent(props2) { - var _a2 = useDayPicker(), locale2 = _a2.locale, formatDay2 = _a2.formatters.formatDay; - return bn.createElement(bn.Fragment, null, formatDay2(props2.date, { locale: locale2 })); -} -var SelectMultipleContext = B(void 0); -function SelectMultipleProvider(props2) { - if (!isDayPickerMultiple(props2.initialProps)) { - var emptyContextValue = { - selected: void 0, - modifiers: { - disabled: [] - } - }; - return bn.createElement(SelectMultipleContext.Provider, { value: emptyContextValue }, props2.children); - } - return bn.createElement(SelectMultipleProviderInternal, { initialProps: props2.initialProps, children: props2.children }); -} -function SelectMultipleProviderInternal(_a2) { - var initialProps = _a2.initialProps, children = _a2.children; - var selected = initialProps.selected, min3 = initialProps.min, max3 = initialProps.max; - var onDayClick = function(day, activeModifiers, e4) { - var _a3, _b2; - (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); - var isMinSelected = Boolean(activeModifiers.selected && min3 && (selected === null || selected === void 0 ? void 0 : selected.length) === min3); - if (isMinSelected) { + const deleteSchema = async (table) => { + if (table.primary) return; + const deleteResult = await deleteMDBTable(props2.plugin, dbPath, table.id); + if (deleteResult) { + const newSchemaTable = { + ...schemaTable, + rows: schemaTable.rows.filter( + (f4) => f4.id != table.id && f4.def != table.id + ) + }; + setSchemaTable(newSchemaTable); + if (dbSchema.id == table.id) { + setDBSchema( + newSchemaTable.rows.find((g4) => g4.type == "db") + ); + } } - var isMaxSelected = Boolean(!activeModifiers.selected && max3 && (selected === null || selected === void 0 ? void 0 : selected.length) === max3); - if (isMaxSelected) { - return; + }; + const saveSchema = async (table) => { + const newSchema = schemaTable.rows.find((f4) => f4.id == table.id) ? true : false; + const newSchemaTable = newSchema ? { + ...schemaTable, + rows: schemaTable.rows.map((f4) => f4.id == table.id ? table : f4) + } : { + ...schemaTable, + rows: [...schemaTable.rows, table] + }; + await saveDBToPath(props2.plugin, dbPath, { m_schema: newSchemaTable }); + if (table.id == (schema == null ? void 0 : schema.id)) { + setSchema(table); } - var selectedDays = selected ? __spreadArray([], selected, true) : []; - if (activeModifiers.selected) { - var index = selectedDays.findIndex(function(selectedDay) { - return isSameDay(day, selectedDay); - }); - selectedDays.splice(index, 1); - } else { - selectedDays.push(day); + if (table.id == (dbSchema == null ? void 0 : dbSchema.id)) { + setDBSchema(table); + setTableData((f4) => ({ + ...f4, + schema: table + })); } - (_b2 = initialProps.onSelect) === null || _b2 === void 0 ? void 0 : _b2.call(initialProps, selectedDays, day, activeModifiers, e4); - }; - var modifiers = { - disabled: [] + setSchemaTable(newSchemaTable); }; - if (selected) { - modifiers.disabled.push(function(day) { - var isMaxSelected = max3 && selected.length > max3 - 1; - var isSelected = selected.some(function(selectedDay) { - return isSameDay(selectedDay, day); - }); - return Boolean(isMaxSelected && !isSelected); + const syncAllMetadata = (f4) => { + const files = f4.rows.map((f5) => f5.File); + const importYAML = (files2, fmKeys) => { + return files2.map((f5) => getAbstractFileAtPath(app, f5)).filter((f5) => f5).reduce( + (p3, c4) => { + const fm = frontMatterForFile(c4); + if (!fm) + return p3; + return { + uniques: [], + cols: uniq([...p3.cols, ...fmKeys]), + rows: [ + ...p3.rows, + { + File: c4.path, + ...fmKeys.reduce((p4, c5) => { + const value = parseFrontMatter(c5, fm[c5], false); + if ((value == null ? void 0 : value.length) > 0) + return { ...p4, [c5]: value }; + return p4; + }, {}) + } + ] + }; + }, + { uniques: [], cols: [], rows: [] } + ); + }; + const yamlTableData = importYAML( + files, + f4.cols.filter((f5) => !f5.type.contains("file")).map((f5) => f5.name) + ); + saveDB2({ + ...f4, + rows: f4.rows.map((r3) => { + const fmRow = yamlTableData.rows.find((f5) => f5.File == r3.File); + if (fmRow) { + return { + ...r3, + ...fmRow + }; + } + return r3; + }) }); - } - var contextValue = { - selected, - onDayClick, - modifiers }; - return bn.createElement(SelectMultipleContext.Provider, { value: contextValue }, children); -} -function useSelectMultiple() { - var context = q2(SelectMultipleContext); - if (!context) { - throw new Error("useSelectMultiple must be used within a SelectMultipleProvider"); - } - return context; -} -function addToRange(day, range) { - var _a2 = range || {}, from = _a2.from, to = _a2.to; - if (!from) { - return { from: day, to: void 0 }; - } - if (!to && isSameDay(from, day)) { - return { from, to: day }; - } - if (!to && isBefore(day, from)) { - return { from: day, to: from }; - } - if (!to) { - return { from, to: day }; - } - if (isSameDay(to, day) && isSameDay(from, day)) { - return void 0; - } - if (isSameDay(to, day)) { - return { from: to, to: void 0 }; - } - if (isSameDay(from, day)) { - return void 0; - } - if (isAfter(from, day)) { - return { from: day, to }; - } - return { from, to: day }; -} -var SelectRangeContext = B(void 0); -function SelectRangeProvider(props2) { - if (!isDayPickerRange(props2.initialProps)) { - var emptyContextValue = { - selected: void 0, - modifiers: { - range_start: [], - range_end: [], - range_middle: [], - disabled: [] + h2(() => { + if (props2.schema && schemaTable && (dbSchema == null ? void 0 : dbSchema.id) != props2.schema) { + const preselectSchema = schemaTable.rows.find( + (g4) => g4.id == props2.schema + ); + if (preselectSchema) { + if (preselectSchema.type == "db") { + setDBSchema(preselectSchema); + return; + } else { + const preselectDBSchema = schemaTable.rows.find( + (g4) => g4.id == preselectSchema.def + ); + if (preselectDBSchema) { + setDBSchema(preselectDBSchema); + return; + } + } + } else { + const newSchema = { + id: uniqueNameFromString( + sanitizeTableName(props2.schema), + schemaTable.rows.map((g4) => g4.id) + ), + name: props2.schema, + type: "db" + }; + setDBSchema(newSchema); + saveSchema(newSchema).then( + (f4) => saveDB2({ + schema: newSchema, + cols: defaultTableFields.map((g4) => ({ + ...g4, + schemaId: newSchema.id + })), + rows: [] + }) + ); } - }; - return bn.createElement(SelectRangeContext.Provider, { value: emptyContextValue }, props2.children); - } - return bn.createElement(SelectRangeProviderInternal, { initialProps: props2.initialProps, children: props2.children }); -} -function SelectRangeProviderInternal(_a2) { - var initialProps = _a2.initialProps, children = _a2.children; - var selected = initialProps.selected; - var _b2 = selected || {}, selectedFrom = _b2.from, selectedTo = _b2.to; - var min3 = initialProps.min; - var max3 = initialProps.max; - var onDayClick = function(day, activeModifiers, e4) { - var _a3, _b3; - (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); - var newRange = addToRange(day, selected); - (_b3 = initialProps.onSelect) === null || _b3 === void 0 ? void 0 : _b3.call(initialProps, newRange, day, activeModifiers, e4); - }; - var modifiers = { - range_start: [], - range_end: [], - range_middle: [], - disabled: [] - }; - if (selectedFrom) { - modifiers.range_start = [selectedFrom]; - if (!selectedTo) { - modifiers.range_end = [selectedFrom]; + } + }, [schemaTable]); + const loadTables = async () => { + if (getAbstractFileAtPath(app, props2.dbPath)) { + setDBFileExists(true); + getMDBTableSchemas( + props2.plugin, + props2.dbPath, + props2.tag ? true : false + ).then((f4) => { + setSchemaTable({ + ...defaultSchema, + rows: f4 + }); + if (!props2.schema) + setDBSchema(f4 == null ? void 0 : f4.find((g4) => g4.type == "db")); + }); } else { - modifiers.range_end = [selectedTo]; - if (!isSameDay(selectedFrom, selectedTo)) { - modifiers.range_middle = [ - { - after: selectedFrom, - before: selectedTo + if (props2.schema) { + saveDB2(props2.tag ? defaultTagMDBTable : defaultFolderMDBTable).then( + (f4) => { + setSchemaTable(defaultSchema); } - ]; + ); + } else { + setSchemaTable(defaultSchema); + setDBSchema(defaultFileDBSchema); } } - } - if (min3) { - if (selectedFrom && !selectedTo) { - modifiers.disabled.push({ - after: subDays(selectedFrom, min3 - 1), - before: addDays(selectedFrom, min3 - 1) - }); + }; + const refreshTags = async (evt) => { + if (!dbFileExists) { + loadDefaultTableData(); + } else { + if (dbSchema.primary) { + runDef(); + } else { + getMDBData(); + } } - if (selectedFrom && selectedTo) { - modifiers.disabled.push({ - after: selectedFrom, - before: addDays(selectedFrom, min3 - 1) - }); + }; + const refreshSpace = async (evt) => { + if (!dbFileExists) { + loadDefaultTableData(); } - } - if (max3) { - if (selectedFrom && !selectedTo) { - modifiers.disabled.push({ - before: addDays(selectedFrom, -max3 + 1) - }); - modifiers.disabled.push({ - after: addDays(selectedFrom, max3 - 1) - }); + }; + const getMDBData = () => { + getMDBTable(props2.plugin, dbSchema.id, dbPath, !isFolderContext).then( + (f4) => setTableData(f4) + ); + }; + const refreshMDB = async (evt) => { + if (!dbFileExists) { + return; } - if (selectedFrom && selectedTo) { - var selectedCount = differenceInCalendarDays(selectedTo, selectedFrom) + 1; - var offset = max3 - selectedCount; - modifiers.disabled.push({ - before: subDays(selectedFrom, offset) + if (evt.detail.dbPath == dbPath) { + if (dbSchema) + getMDBTable(props2.plugin, dbSchema.id, dbPath, !isFolderContext).then( + (f4) => setTableData(f4) + ); + } else { + const tag = Object.keys(contextTable).find( + (t4) => tagContextFromTag(props2.plugin, t4) == evt.detail.dbPath + ); + if (tag) + loadContextFields(tag); + } + }; + h2(() => { + window.addEventListener(eventTypes.mdbChange, refreshMDB); + window.addEventListener(eventTypes.spacesChange, refreshSpace); + window.addEventListener(eventTypes.tagsChange, refreshTags); + return () => { + window.removeEventListener(eventTypes.mdbChange, refreshMDB); + window.removeEventListener(eventTypes.spacesChange, refreshSpace); + window.removeEventListener(eventTypes.tagsChange, refreshTags); + }; + }, [contextTable, dbSchema, dbPath]); + h2(() => { + loadTables(); + }, [dbPath]); + const saveDB2 = async (newTable) => { + var _a3; + if (!dbFileExists) { + const defaultFields = isFolderContext ? defaultFolderFields : defaultTagFields; + const defaultTable = isFolderContext ? defaultFolderTables : defaultTagTables; + const dbField = { + ...defaultTable, + m_fields: { + uniques: defaultFields.uniques, + cols: defaultFields.cols, + rows: [...(_a3 = defaultFields.rows) != null ? _a3 : [], ...newTable.cols] + }, + [newTable.schema.id]: { + uniques: newTable.cols.filter((c4) => c4.unique == "true").map((c4) => c4.name), + cols: newTable.cols.map((c4) => c4.name), + rows: newTable.rows + } + }; + await saveDBToPath(props2.plugin, dbPath, dbField).then((f4) => { + setDBFileExists(true); + f4 ? setTableData(newTable) : new import_obsidian5.Notice("DB ERROR"); }); - modifiers.disabled.push({ - after: addDays(selectedTo, offset) + } else { + await saveMDBToPath(props2.plugin, dbPath, newTable).then((f4) => { + setDBFileExists(true); + f4 ? setTableData(newTable) : new import_obsidian5.Notice("DB ERROR"); }); } - } - return bn.createElement(SelectRangeContext.Provider, { value: { selected, onDayClick, modifiers } }, children); -} -function useSelectRange() { - var context = q2(SelectRangeContext); - if (!context) { - throw new Error("useSelectRange must be used within a SelectRangeProvider"); - } - return context; -} -function matcherToArray(matcher) { - if (Array.isArray(matcher)) { - return __spreadArray([], matcher, true); - } else if (matcher !== void 0) { - return [matcher]; - } else { - return []; - } -} -function getCustomModifiers(dayModifiers) { - var customModifiers = {}; - Object.entries(dayModifiers).forEach(function(_a2) { - var modifier = _a2[0], matcher = _a2[1]; - customModifiers[modifier] = matcherToArray(matcher); - }); - return customModifiers; -} -var InternalModifier; -(function(InternalModifier2) { - InternalModifier2["Outside"] = "outside"; - InternalModifier2["Disabled"] = "disabled"; - InternalModifier2["Selected"] = "selected"; - InternalModifier2["Hidden"] = "hidden"; - InternalModifier2["Today"] = "today"; - InternalModifier2["RangeStart"] = "range_start"; - InternalModifier2["RangeEnd"] = "range_end"; - InternalModifier2["RangeMiddle"] = "range_middle"; -})(InternalModifier || (InternalModifier = {})); -var Selected = InternalModifier.Selected; -var Disabled = InternalModifier.Disabled; -var Hidden = InternalModifier.Hidden; -var Today = InternalModifier.Today; -var RangeEnd = InternalModifier.RangeEnd; -var RangeMiddle = InternalModifier.RangeMiddle; -var RangeStart = InternalModifier.RangeStart; -var Outside = InternalModifier.Outside; -function getInternalModifiers(dayPicker, selectMultiple, selectRange2) { - var _a2; - var internalModifiers = (_a2 = {}, _a2[Selected] = matcherToArray(dayPicker.selected), _a2[Disabled] = matcherToArray(dayPicker.disabled), _a2[Hidden] = matcherToArray(dayPicker.hidden), _a2[Today] = [dayPicker.today], _a2[RangeEnd] = [], _a2[RangeMiddle] = [], _a2[RangeStart] = [], _a2[Outside] = [], _a2); - if (dayPicker.fromDate) { - internalModifiers[Disabled].push({ before: dayPicker.fromDate }); - } - if (dayPicker.toDate) { - internalModifiers[Disabled].push({ after: dayPicker.toDate }); - } - if (isDayPickerMultiple(dayPicker)) { - internalModifiers[Disabled] = internalModifiers[Disabled].concat(selectMultiple.modifiers[Disabled]); - } else if (isDayPickerRange(dayPicker)) { - internalModifiers[Disabled] = internalModifiers[Disabled].concat(selectRange2.modifiers[Disabled]); - internalModifiers[RangeStart] = selectRange2.modifiers[RangeStart]; - internalModifiers[RangeMiddle] = selectRange2.modifiers[RangeMiddle]; - internalModifiers[RangeEnd] = selectRange2.modifiers[RangeEnd]; - } - return internalModifiers; -} -var ModifiersContext = B(void 0); -function ModifiersProvider(props2) { - var dayPicker = useDayPicker(); - var selectMultiple = useSelectMultiple(); - var selectRange2 = useSelectRange(); - var internalModifiers = getInternalModifiers(dayPicker, selectMultiple, selectRange2); - var customModifiers = getCustomModifiers(dayPicker.modifiers); - var modifiers = __assign(__assign({}, internalModifiers), customModifiers); - return bn.createElement(ModifiersContext.Provider, { value: modifiers }, props2.children); -} -function useModifiers() { - var context = q2(ModifiersContext); - if (!context) { - throw new Error("useModifiers must be used within a ModifiersProvider"); - } - return context; -} -function isDateInterval(matcher) { - return Boolean(matcher && typeof matcher === "object" && "before" in matcher && "after" in matcher); -} -function isDateRange(value) { - return Boolean(value && typeof value === "object" && "from" in value); -} -function isDateAfterType(value) { - return Boolean(value && typeof value === "object" && "after" in value); -} -function isDateBeforeType(value) { - return Boolean(value && typeof value === "object" && "before" in value); -} -function isDayOfWeekType(value) { - return Boolean(value && typeof value === "object" && "dayOfWeek" in value); -} -function isDateInRange(date, range) { - var _a2; - var from = range.from, to = range.to; - if (!from) { - return false; - } - if (!to && isSameDay(from, date)) { - return true; - } - if (!to) { - return false; - } - var isRangeInverted = differenceInCalendarDays(to, from) < 0; - if (isRangeInverted) { - _a2 = [to, from], from = _a2[0], to = _a2[1]; - } - var isInRange = differenceInCalendarDays(date, from) >= 0 && differenceInCalendarDays(to, date) >= 0; - return isInRange; -} -function isDateType(value) { - return isDate(value); -} -function isArrayOfDates(value) { - return Array.isArray(value) && value.every(isDate); -} -function isMatch(day, matchers) { - return matchers.some(function(matcher) { - if (typeof matcher === "boolean") { - return matcher; - } - if (isDateType(matcher)) { - return isSameDay(day, matcher); - } - if (isArrayOfDates(matcher)) { - return matcher.includes(day); - } - if (isDateRange(matcher)) { - return isDateInRange(day, matcher); - } - if (isDayOfWeekType(matcher)) { - return matcher.dayOfWeek.includes(day.getDay()); - } - if (isDateInterval(matcher)) { - var diffBefore = differenceInCalendarDays(matcher.before, day); - var diffAfter = differenceInCalendarDays(matcher.after, day); - var isDayBefore = diffBefore > 0; - var isDayAfter = diffAfter < 0; - var isClosedInterval = isAfter(matcher.before, matcher.after); - if (isClosedInterval) { - return isDayAfter && isDayBefore; + }; + h2(() => { + var _a3; + if (!schemaTable || !dbSchema) + return; + const _schema = (schema == null ? void 0 : schema.def) == dbSchema.id ? schema : (_a3 = schemaTable.rows.find((f4) => f4.def == dbSchema.id)) != null ? _a3 : { + ...dbSchema, + id: uniqueNameFromString( + dbSchema.id + "View", + schemaTable.rows.map((f4) => f4.id) + ), + type: "table", + def: dbSchema.id + }; + if (_schema) { + setSchema(_schema); + if (dbFileExists) { + if (dbSchema.primary) { + runDef(); + } else { + getMDBData(); + } } else { - return isDayBefore || isDayAfter; + loadDefaultTableData(); } } - if (isDateAfterType(matcher)) { - return differenceInCalendarDays(day, matcher.after) > 0; - } - if (isDateBeforeType(matcher)) { - return differenceInCalendarDays(matcher.before, day) > 0; - } - if (typeof matcher === "function") { - return matcher(day); - } - return false; - }); -} -function getActiveModifiers(day, modifiers, displayMonth) { - var matchedModifiers = Object.keys(modifiers).reduce(function(result, key2) { - var modifier = modifiers[key2]; - if (isMatch(day, modifier)) { - result.push(key2); - } - return result; - }, []); - var activeModifiers = {}; - matchedModifiers.forEach(function(modifier) { - return activeModifiers[modifier] = true; - }); - if (displayMonth && !isSameMonth(day, displayMonth)) { - activeModifiers.outside = true; - } - return activeModifiers; -} -function getInitialFocusTarget(displayMonths, modifiers) { - var firstDayInMonth = startOfMonth(displayMonths[0]); - var lastDayInMonth = endOfMonth(displayMonths[displayMonths.length - 1]); - var firstFocusableDay; - var today; - var date = firstDayInMonth; - while (date <= lastDayInMonth) { - var activeModifiers = getActiveModifiers(date, modifiers); - var isFocusable = !activeModifiers.disabled && !activeModifiers.hidden; - if (!isFocusable) { - date = addDays(date, 1); - continue; + }, [dbSchema]); + h2(() => { + if (dbFileExists) + parsePredicate(schema.predicate); + }, [schema]); + h2(() => { + if (dbFileExists && tableData) + getContextTags(tableData); + }, [tableData]); + const selectRows = (lastSelected, rows) => { + if (lastSelected) { + const path = tableData.rows[parseInt(lastSelected)].File; + let evt = new CustomEvent(eventTypes.selectedFileChange, { + detail: { filePath: path } + }); + window.dispatchEvent(evt); + } else { + let evt = new CustomEvent(eventTypes.selectedFileChange, { + detail: { filePath: null } + }); + window.dispatchEvent(evt); } - if (activeModifiers.selected) { - return date; + setSelectedRows(rows); + }; + const loadDefaultTableData = () => { + let files; + if (props2.folder) { + files = folderChildren( + props2.plugin, + getAbstractFileAtPath(props2.plugin.app, props2.folder) + ); + setTableData({ + ...isFolderContext ? defaultFolderMDBTable : defaultTagMDBTable, + rows: files.map( + (f4) => newRowByDBRow({ _source: "folder", File: f4.path }) + ) + }); + } else if (props2.tag) { + files = getAllFilesForTag(props2.tag).map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4); + setTableData({ + ...isFolderContext ? defaultFolderMDBTable : defaultTagMDBTable, + rows: files.map((f4) => newRowByDBRow({ _source: "tag", File: f4.path })) + }); } - if (activeModifiers.today && !today) { - today = date; + }; + const getContextTags = async (_tableData) => { + const contextFields = _tableData.cols.filter((f4) => f4.type.contains("context")).map((f4) => f4.value).filter((f4) => !tagContexts.some((g4) => g4 == f4)); + for (let c4 of contextFields) { + loadContextFields(c4); } - if (!firstFocusableDay) { - firstFocusableDay = date; + }; + const runDef = async () => { + let files; + if (props2.folder) { + files = folderChildren( + props2.plugin, + getAbstractFileAtPath(props2.plugin.app, props2.folder) + ); + consolidateFilesToTable( + props2.plugin, + dbPath, + dbSchema.id, + files.map((f4) => f4.path) + ).then((f4) => { + for (let c4 of tagContexts) { + loadTagContext(c4, f4.rows); + } + setTableData(f4); + return f4; + }).then((f4) => syncAllMetadata(f4)); + } else if (props2.tag) { + files = getAllFilesForTag(props2.tag).map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4); + consolidateFilesToTable( + props2.plugin, + dbPath, + dbSchema.id, + files.map((f4) => f4.path), + props2.tag + ).then((f4) => { + for (let c4 of tagContexts) { + loadTagContext(c4, f4.rows); + } + setTableData(f4); + return f4; + }).then((f4) => syncAllMetadata(f4)); } - date = addDays(date, 1); - } - if (today) { - return today; - } else { - return firstFocusableDay; - } -} -var MAX_RETRY = 365; -function getNextFocus(focusedDay, options) { - var moveBy = options.moveBy, direction = options.direction, context = options.context, modifiers = options.modifiers, _a2 = options.retry, retry = _a2 === void 0 ? { count: 0, lastFocused: focusedDay } : _a2; - var weekStartsOn = context.weekStartsOn, fromDate = context.fromDate, toDate2 = context.toDate, locale2 = context.locale; - var moveFns = { - day: addDays, - week: addWeeks, - month: addMonths, - year: addYears, - startOfWeek: function(date) { - return context.ISOWeek ? startOfISOWeek(date) : startOfWeek(date, { locale: locale2, weekStartsOn }); - }, - endOfWeek: function(date) { - return context.ISOWeek ? endOfISOWeek(date) : endOfWeek(date, { locale: locale2, weekStartsOn }); + }; + const loadTagContext = async (tag, files) => { + consolidateRowsToTag( + props2.plugin, + tagContextFromTag(props2.plugin, tag), + dbSchema.id, + dbPath, + files + ).then((f4) => { + if (f4) { + const contextFields = f4.cols.filter((g4) => g4.type.contains("context")).map((g4) => g4.value).filter((g4) => !tagContexts.some((h5) => h5 == g4)); + for (let c4 of contextFields) { + loadContextFields(c4); + } + setContextTable((t4) => ({ + ...t4, + [tag]: f4 + })); + } + }); + }; + const loadContextFields = async (tag) => { + getMDBTable( + props2.plugin, + "files", + tagContextFromTag(props2.plugin, tag), + true + ).then((f4) => { + setContextTable((t4) => ({ + ...t4, + [tag]: f4 + })); + }); + }; + const tagExists = (currentCache, findTag) => { + let currentTags = []; + if ((0, import_obsidian5.getAllTags)(currentCache)) { + currentTags = (0, import_obsidian5.getAllTags)(currentCache); } + return currentTags.find((tag) => tag.toLowerCase() == findTag.toLowerCase()) ? true : false; }; - var newFocusedDay = moveFns[moveBy](focusedDay, direction === "after" ? 1 : -1); - if (direction === "before" && fromDate) { - newFocusedDay = max([fromDate, newFocusedDay]); - } else if (direction === "after" && toDate2) { - newFocusedDay = min([toDate2, newFocusedDay]); - } - var isFocusable = true; - if (modifiers) { - var activeModifiers = getActiveModifiers(newFocusedDay, modifiers); - isFocusable = !activeModifiers.disabled && !activeModifiers.hidden; - } - if (isFocusable) { - return newFocusedDay; - } else { - if (retry.count > MAX_RETRY) { - return retry.lastFocused; - } - return getNextFocus(newFocusedDay, { - moveBy, - direction, - context, - modifiers, - retry: __assign(__assign({}, retry), { count: retry.count + 1 }) - }); - } -} -var FocusContext = B(void 0); -function FocusProvider(props2) { - var navigation = useNavigation(); - var modifiers = useModifiers(); - var _a2 = p2(), focusedDay = _a2[0], setFocusedDay = _a2[1]; - var _b2 = p2(), lastFocused = _b2[0], setLastFocused = _b2[1]; - var initialFocusTarget = getInitialFocusTarget(navigation.displayMonths, modifiers); - var focusTarget = (focusedDay !== null && focusedDay !== void 0 ? focusedDay : lastFocused && navigation.isDateDisplayed(lastFocused)) ? lastFocused : initialFocusTarget; - var blur = function() { - setLastFocused(focusedDay); - setFocusedDay(void 0); + const getAllFilesForTag = (tag) => { + let tagsCache = []; + (() => { + app.vault.getMarkdownFiles().forEach((tfile) => { + let currentCache; + if (app.metadataCache.getFileCache(tfile) !== null) { + currentCache = app.metadataCache.getFileCache(tfile); + } + let relativePath = tfile.path; + const hasTag = tagExists(currentCache, tag); + if (hasTag) { + tagsCache.push(relativePath); + } + }); + })(); + return tagsCache; }; - var focus = function(date) { - setFocusedDay(date); + const saveContextDB = async (newTable, context) => { + const dbPath2 = tagContextFromTag(props2.plugin, context); + await saveMDBToPath(props2.plugin, dbPath2, newTable).then( + (f4) => f4 ? setContextTable((t4) => ({ + ...t4, + [context]: newTable + })) : new import_obsidian5.Notice("Database Error") + ); }; - var context = useDayPicker(); - var moveFocus = function(moveBy, direction) { - if (!focusedDay) - return; - var nextFocused = getNextFocus(focusedDay, { - moveBy, - direction, - context, - modifiers + const savePredicate = (newPredicate) => { + const cleanedPredicate = validatePredicate(newPredicate); + saveSchema({ + ...schema, + predicate: JSON.stringify(cleanedPredicate) }); - if (isSameDay(focusedDay, nextFocused)) - return void 0; - navigation.goToDate(nextFocused, focusedDay); - focus(nextFocused); + setPredicate(cleanedPredicate); }; - var value = { - focusedDay, - focusTarget, - blur, - focus, - focusDayAfter: function() { - return moveFocus("day", "after"); - }, - focusDayBefore: function() { - return moveFocus("day", "before"); - }, - focusWeekAfter: function() { - return moveFocus("week", "after"); - }, - focusWeekBefore: function() { - return moveFocus("week", "before"); - }, - focusMonthBefore: function() { - return moveFocus("month", "before"); - }, - focusMonthAfter: function() { - return moveFocus("month", "after"); - }, - focusYearBefore: function() { - return moveFocus("year", "before"); - }, - focusYearAfter: function() { - return moveFocus("year", "after"); - }, - focusStartOfWeek: function() { - return moveFocus("startOfWeek", "before"); - }, - focusEndOfWeek: function() { - return moveFocus("endOfWeek", "after"); - } + h2(() => { + setPredicate((p3) => ({ + ...p3, + colsOrder: uniq([ + ...p3.colsOrder, + ...cols.filter((f4) => f4.hidden != "true").map((c4) => c4.name + c4.table) + ]) + })); + }, [cols]); + const parsePredicate = (predicateStr) => { + const newPredicate = safelyParseJSON(predicateStr); + setPredicate(validatePredicate(newPredicate)); }; - return bn.createElement(FocusContext.Provider, { value }, props2.children); -} -function useFocusContext() { - var context = q2(FocusContext); - if (!context) { - throw new Error("useFocusContext must be used within a FocusProvider"); - } - return context; -} -function useActiveModifiers(day, displayMonth) { - var modifiers = useModifiers(); - var activeModifiers = getActiveModifiers(day, modifiers, displayMonth); - return activeModifiers; -} -var SelectSingleContext = B(void 0); -function SelectSingleProvider(props2) { - if (!isDayPickerSingle(props2.initialProps)) { - var emptyContextValue = { - selected: void 0 + const delColumn = (column) => { + let mdbtable; + const table = column.table; + if (table == "") { + mdbtable = tableData; + } else if (contextTable[table]) { + mdbtable = contextTable[table]; + } + const newFields = mdbtable.cols.filter( + (f4, i4) => f4.name != column.name + ); + const newTable = { + ...mdbtable, + cols: newFields, + rows: mdbtable.rows.map((r3) => { + const { [column.name]: val, ...rest } = r3; + return rest; + }) }; - return bn.createElement(SelectSingleContext.Provider, { value: emptyContextValue }, props2.children); - } - return bn.createElement(SelectSingleProviderInternal, { initialProps: props2.initialProps, children: props2.children }); -} -function SelectSingleProviderInternal(_a2) { - var initialProps = _a2.initialProps, children = _a2.children; - var onDayClick = function(day, activeModifiers, e4) { - var _a3, _b2, _c2; - (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); - if (activeModifiers.selected && !initialProps.required) { - (_b2 = initialProps.onSelect) === null || _b2 === void 0 ? void 0 : _b2.call(initialProps, void 0, day, activeModifiers, e4); - return; + if (table == "") { + saveDB2(newTable); + } else if (contextTable[table]) { + saveContextDB(newTable, table); } - (_c2 = initialProps.onSelect) === null || _c2 === void 0 ? void 0 : _c2.call(initialProps, day, day, activeModifiers, e4); }; - var contextValue = { - selected: initialProps.selected, - onDayClick + const newColumn = (col) => { + return saveColumn(col); }; - return bn.createElement(SelectSingleContext.Provider, { value: contextValue }, children); -} -function useSelectSingle() { - var context = q2(SelectSingleContext); - if (!context) { - throw new Error("useSelectSingle must be used within a SelectSingleProvider"); - } - return context; -} -function useDayEventHandlers(date, activeModifiers) { - var dayPicker = useDayPicker(); - var single = useSelectSingle(); - var multiple = useSelectMultiple(); - var range = useSelectRange(); - var _a2 = useFocusContext(), focusDayAfter = _a2.focusDayAfter, focusDayBefore = _a2.focusDayBefore, focusWeekAfter = _a2.focusWeekAfter, focusWeekBefore = _a2.focusWeekBefore, blur = _a2.blur, focus = _a2.focus, focusMonthBefore = _a2.focusMonthBefore, focusMonthAfter = _a2.focusMonthAfter, focusYearBefore = _a2.focusYearBefore, focusYearAfter = _a2.focusYearAfter, focusStartOfWeek = _a2.focusStartOfWeek, focusEndOfWeek = _a2.focusEndOfWeek; - var onClick = function(e4) { - var _a3, _b2, _c2, _d2; - if (isDayPickerSingle(dayPicker)) { - (_a3 = single.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(single, date, activeModifiers, e4); - } else if (isDayPickerMultiple(dayPicker)) { - (_b2 = multiple.onDayClick) === null || _b2 === void 0 ? void 0 : _b2.call(multiple, date, activeModifiers, e4); - } else if (isDayPickerRange(dayPicker)) { - (_c2 = range.onDayClick) === null || _c2 === void 0 ? void 0 : _c2.call(range, date, activeModifiers, e4); - } else { - (_d2 = dayPicker.onDayClick) === null || _d2 === void 0 ? void 0 : _d2.call(dayPicker, date, activeModifiers, e4); + const saveColumn = (newColumn2, oldColumn) => { + let mdbtable; + const column = { + ...newColumn2, + name: sanitizeColumnName(newColumn2.name) + }; + const table = column.table; + if (table == "") { + mdbtable = tableData; + } else if (contextTable[table]) { + mdbtable = contextTable[table]; } + if (column.name == "") { + new import_obsidian5.Notice("No Column Name"); + return false; + } + if (!oldColumn && mdbtable.cols.find( + (f4) => f4.name.toLowerCase() == column.name.toLowerCase() + ) || oldColumn && oldColumn.name != column.name && mdbtable.cols.find( + (f4) => f4.name.toLowerCase() == column.name.toLowerCase() + )) { + new import_obsidian5.Notice("Duplicate Column Name"); + return false; + } + const oldFieldIndex = oldColumn ? mdbtable.cols.findIndex((f4) => f4.name == oldColumn.name) : -1; + const newFields = oldFieldIndex == -1 ? [...mdbtable.cols, column] : mdbtable.cols.map((f4, i4) => i4 == oldFieldIndex ? column : f4); + const newTable = { + ...mdbtable, + cols: newFields, + rows: mdbtable.rows.map( + (f4) => oldColumn ? { + ...f4, + [column.name]: f4[oldColumn.name], + oldColumn: void 0 + } : f4 + ) + }; + if (oldColumn) + savePredicate({ + filters: predicate.filters.map( + (f4) => f4.field == oldColumn.name + oldColumn.table ? { ...f4, field: newColumn2.name + newColumn2.table } : f4 + ), + sort: predicate.sort.map( + (f4) => f4.field == oldColumn.name + oldColumn.table ? { ...f4, field: newColumn2.name + newColumn2.table } : f4 + ), + groupBy: predicate.groupBy.map( + (f4) => f4 == oldColumn.name + oldColumn.table ? newColumn2.name + newColumn2.table : f4 + ), + colsHidden: predicate.colsHidden.map( + (f4) => f4 == oldColumn.name + oldColumn.table ? newColumn2.name + newColumn2.table : f4 + ), + colsOrder: predicate.colsOrder.map( + (f4) => f4 == oldColumn.name + oldColumn.table ? newColumn2.name + newColumn2.table : f4 + ), + colsSize: { + ...predicate.colsSize, + [newColumn2.name + newColumn2.table]: predicate.colsSize[oldColumn.name + oldColumn.table], + [oldColumn.name + oldColumn.table]: void 0 + } + }); + if (table == "") { + syncAllMetadata(newTable); + } else if (contextTable[table]) { + saveContextDB(newTable, table); + } + return true; }; - var onFocus = function(e4) { - var _a3; - focus(date); - (_a3 = dayPicker.onDayFocus) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onBlur = function(e4) { - var _a3; - blur(); - (_a3 = dayPicker.onDayBlur) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onMouseEnter = function(e4) { - var _a3; - (_a3 = dayPicker.onDayMouseEnter) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onMouseLeave = function(e4) { - var _a3; - (_a3 = dayPicker.onDayMouseLeave) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onTouchCancel = function(e4) { - var _a3; - (_a3 = dayPicker.onDayTouchCancel) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onTouchEnd = function(e4) { - var _a3; - (_a3 = dayPicker.onDayTouchEnd) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onTouchMove = function(e4) { - var _a3; - (_a3 = dayPicker.onDayTouchMove) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onTouchStart = function(e4) { - var _a3; - (_a3 = dayPicker.onDayTouchStart) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onKeyUp = function(e4) { - var _a3; - (_a3 = dayPicker.onDayKeyUp) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); - }; - var onKeyDown = function(e4) { - var _a3; - switch (e4.key) { - case "ArrowLeft": - e4.preventDefault(); - e4.stopPropagation(); - dayPicker.dir === "rtl" ? focusDayAfter() : focusDayBefore(); - break; - case "ArrowRight": - e4.preventDefault(); - e4.stopPropagation(); - dayPicker.dir === "rtl" ? focusDayBefore() : focusDayAfter(); - break; - case "ArrowDown": - e4.preventDefault(); - e4.stopPropagation(); - focusWeekAfter(); - break; - case "ArrowUp": - e4.preventDefault(); - e4.stopPropagation(); - focusWeekBefore(); - break; - case "PageUp": - e4.preventDefault(); - e4.stopPropagation(); - e4.shiftKey ? focusYearBefore() : focusMonthBefore(); - break; - case "PageDown": - e4.preventDefault(); - e4.stopPropagation(); - e4.shiftKey ? focusYearAfter() : focusMonthAfter(); - break; - case "Home": - e4.preventDefault(); - e4.stopPropagation(); - focusStartOfWeek(); - break; - case "End": - e4.preventDefault(); - e4.stopPropagation(); - focusEndOfWeek(); - break; + return /* @__PURE__ */ bn.createElement(MDBContext.Provider, { + value: { + data, + filteredData, + loadContextFields, + selectedRows, + selectRows, + tableData, + cols, + sortedColumns, + contextTable, + setContextTable, + predicate, + savePredicate, + saveDB: saveDB2, + saveContextDB, + schema, + dbPath, + saveColumn, + delColumn, + newColumn, + tagContexts, + tables, + setSchema, + saveSchema, + deleteSchema, + dbFileExists, + dbSchema, + searchString, + setSearchString, + folderPath, + isFolderContext, + setDBSchema } - (_a3 = dayPicker.onDayKeyDown) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }, props2.children); +}; + +// src/components/ContextView/CardsView/KanbanCard.tsx +var import_classnames = __toESM(require_classnames()); + +// src/components/FlowEditor/FlowView.tsx +var FlowView = (props2) => { + const ref = _2(null); + const loadFile = () => { + const div = ref.current; + const type = viewTypeByString(props2.path); + const portalType = type == "tag" || type == "folder" ? "context" : "doc"; + spawnLeafFromFile(props2.plugin, props2.path, div, portalType); }; - var eventHandlers = { - onClick, - onFocus, - onBlur, - onKeyDown, - onKeyUp, - onMouseEnter, - onMouseLeave, - onTouchCancel, - onTouchEnd, - onTouchMove, - onTouchStart + const toggleFlow = () => { + if (props2.load) { + loadFile(); + } else { + ref.current.empty(); + } }; - return eventHandlers; + h2(() => { + toggleFlow(); + }, [props2.load, props2.path]); + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-flowspace-editor", + ref + }); +}; + +// node_modules/@tanstack/table-core/build/lib/index.mjs +function functionalUpdate(updater, input) { + return typeof updater === "function" ? updater(input) : updater; } -function useSelectedDays() { - var dayPicker = useDayPicker(); - var single = useSelectSingle(); - var multiple = useSelectMultiple(); - var range = useSelectRange(); - var selectedDays = isDayPickerSingle(dayPicker) ? single.selected : isDayPickerMultiple(dayPicker) ? multiple.selected : isDayPickerRange(dayPicker) ? range.selected : void 0; - return selectedDays; +function makeStateUpdater(key2, instance) { + return (updater) => { + instance.setState((old) => { + return { + ...old, + [key2]: functionalUpdate(updater, old[key2]) + }; + }); + }; } -function isInternalModifier(modifier) { - return Object.values(InternalModifier).includes(modifier); +function isFunction(d5) { + return d5 instanceof Function; } -function getDayClassNames(dayPicker, activeModifiers) { - var classNames8 = [dayPicker.classNames.day]; - Object.keys(activeModifiers).forEach(function(modifier) { - var customClassName = dayPicker.modifiersClassNames[modifier]; - if (customClassName) { - classNames8.push(customClassName); - } else if (isInternalModifier(modifier)) { - var internalClassName = dayPicker.classNames["day_".concat(modifier)]; - if (internalClassName) { - classNames8.push(internalClassName); +function flattenBy(arr, getChildren) { + const flat = []; + const recurse = (subArr) => { + subArr.forEach((item) => { + flat.push(item); + const children = getChildren(item); + if (children == null ? void 0 : children.length) { + recurse(children); } - } - }); - return classNames8; + }); + }; + recurse(arr); + return flat; } -function getDayStyle(dayPicker, activeModifiers) { - var style = __assign({}, dayPicker.styles.day); - Object.keys(activeModifiers).forEach(function(modifier) { +function memo(getDeps, fn2, opts) { + let deps = []; + let result; + return () => { var _a2; - style = __assign(__assign({}, style), (_a2 = dayPicker.modifiersStyles) === null || _a2 === void 0 ? void 0 : _a2[modifier]); - }); - return style; -} -function useDayRender(day, displayMonth, buttonRef) { - var _a2; - var _b2, _c2; - var dayPicker = useDayPicker(); - var focusContext = useFocusContext(); - var activeModifiers = useActiveModifiers(day, displayMonth); - var eventHandlers = useDayEventHandlers(day, activeModifiers); - var selectedDays = useSelectedDays(); - var isButton = Boolean(dayPicker.onDayClick || dayPicker.mode !== "default"); - h2(function() { - var _a3; - if (activeModifiers.outside) - return; - if (!focusContext.focusedDay) - return; - if (!isButton) - return; - if (isSameDay(focusContext.focusedDay, day)) { - (_a3 = buttonRef.current) === null || _a3 === void 0 ? void 0 : _a3.focus(); + let depTime; + if (opts.key && opts.debug) + depTime = Date.now(); + const newDeps = getDeps(); + const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep); + if (!depsChanged) { + return result; } - }, [ - focusContext.focusedDay, - day, - buttonRef, - isButton, - activeModifiers.outside - ]); - var className = getDayClassNames(dayPicker, activeModifiers).join(" "); - var style = getDayStyle(dayPicker, activeModifiers); - var ariaLabel = dayPicker.labels.labelDay(day, activeModifiers, { - locale: dayPicker.locale - }); - var isHidden = Boolean(activeModifiers.outside && !dayPicker.showOutsideDays || activeModifiers.hidden); - var DayContentComponent = (_c2 = (_b2 = dayPicker.components) === null || _b2 === void 0 ? void 0 : _b2.DayContent) !== null && _c2 !== void 0 ? _c2 : DayContent; - var children = bn.createElement(DayContentComponent, { date: day, displayMonth, activeModifiers }); - var divProps = { - style, - className, - children, - "aria-label": ariaLabel - }; - var isFocusTarget = focusContext.focusTarget && isSameDay(focusContext.focusTarget, day) && !activeModifiers.outside; - var isFocused = focusContext.focusedDay && isSameDay(focusContext.focusedDay, day); - var buttonProps = __assign(__assign(__assign({}, divProps), (_a2 = { disabled: activeModifiers.disabled }, _a2["aria-pressed"] = activeModifiers.selected, _a2["aria-label"] = ariaLabel, _a2.tabIndex = isFocused || isFocusTarget ? 0 : -1, _a2)), eventHandlers); - var dayRender = { - isButton, - isHidden, - activeModifiers, - selectedDays, - buttonProps, - divProps - }; - return dayRender; -} -function Day(props2) { - var buttonRef = _2(null); - var dayRender = useDayRender(props2.date, props2.displayMonth, buttonRef); - if (dayRender.isHidden) { - return bn.createElement(bn.Fragment, null); - } - if (!dayRender.isButton) { - return bn.createElement("div", __assign({}, dayRender.divProps)); - } - return bn.createElement(Button, __assign({ name: "day", ref: buttonRef }, dayRender.buttonProps)); -} -function WeekNumber(props2) { - var weekNumber = props2.number, dates = props2.dates; - var _a2 = useDayPicker(), onWeekNumberClick = _a2.onWeekNumberClick, styles = _a2.styles, classNames8 = _a2.classNames, locale2 = _a2.locale, labelWeekNumber2 = _a2.labels.labelWeekNumber, formatWeekNumber2 = _a2.formatters.formatWeekNumber; - var content = formatWeekNumber2(Number(weekNumber), { locale: locale2 }); - if (!onWeekNumberClick) { - return bn.createElement("span", { className: classNames8.weeknumber, style: styles.weeknumber }, content); - } - var label = labelWeekNumber2(Number(weekNumber), { locale: locale2 }); - var handleClick = function(e4) { - onWeekNumberClick(weekNumber, dates, e4); - }; - return bn.createElement(Button, { name: "week-number", "aria-label": label, className: classNames8.weeknumber, style: styles.weeknumber, onClick: handleClick }, content); -} -function Row(props2) { - var _a2, _b2; - var _c2 = useDayPicker(), styles = _c2.styles, classNames8 = _c2.classNames, showWeekNumber = _c2.showWeekNumber, components = _c2.components; - var DayComponent = (_a2 = components === null || components === void 0 ? void 0 : components.Day) !== null && _a2 !== void 0 ? _a2 : Day; - var WeeknumberComponent = (_b2 = components === null || components === void 0 ? void 0 : components.WeekNumber) !== null && _b2 !== void 0 ? _b2 : WeekNumber; - var weekNumberCell; - if (showWeekNumber) { - weekNumberCell = bn.createElement( - "td", - { className: classNames8.cell, style: styles.cell }, - bn.createElement(WeeknumberComponent, { number: props2.weekNumber, dates: props2.dates }) - ); - } - return bn.createElement( - "tr", - { className: classNames8.row, style: styles.row }, - weekNumberCell, - props2.dates.map(function(date) { - return bn.createElement( - "td", - { className: classNames8.cell, style: styles.cell, key: getUnixTime(date) }, - bn.createElement(DayComponent, { displayMonth: props2.displayMonth, date }) - ); - }) - ); -} -function daysToMonthWeeks(fromDate, toDate2, options) { - var toWeek = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? endOfISOWeek(toDate2) : endOfWeek(toDate2, options); - var fromWeek = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? startOfISOWeek(fromDate) : startOfWeek(fromDate, options); - var nOfDays = differenceInCalendarDays(toWeek, fromWeek); - var days = []; - for (var i4 = 0; i4 <= nOfDays; i4++) { - days.push(addDays(fromWeek, i4)); - } - var weeksInMonth = days.reduce(function(result, date) { - var weekNumber = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? getISOWeek(date) : getWeek(date, options); - var existingWeek = result.find(function(value) { - return value.weekNumber === weekNumber; - }); - if (existingWeek) { - existingWeek.dates.push(date); - return result; + deps = newDeps; + let resultTime; + if (opts.key && opts.debug) + resultTime = Date.now(); + result = fn2(...newDeps); + (_a2 = opts == null ? void 0 : opts.onChange) == null ? void 0 : _a2.call(opts, result); + if (opts.key && opts.debug) { + if (opts == null ? void 0 : opts.debug()) { + const depEndTime = Math.round((Date.now() - depTime) * 100) / 100; + const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100; + const resultFpsPercentage = resultEndTime / 16; + const pad = (str, num) => { + str = String(str); + while (str.length < num) { + str = " " + str; + } + return str; + }; + console.info(`%c\u23F1 ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, ` + font-size: .6rem; + font-weight: bold; + color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key); + } } - result.push({ - weekNumber, - dates: [date] - }); return result; - }, []); - return weeksInMonth; + }; } -function getMonthWeeks(month, options) { - var weeksInMonth = daysToMonthWeeks(startOfMonth(month), endOfMonth(month), options); - if (options === null || options === void 0 ? void 0 : options.useFixedWeeks) { - var nrOfMonthWeeks = getWeeksInMonth(month, options); - if (nrOfMonthWeeks < 6) { - var lastWeek = weeksInMonth[weeksInMonth.length - 1]; - var lastDate = lastWeek.dates[lastWeek.dates.length - 1]; - var toDate2 = addWeeks(lastDate, 6 - nrOfMonthWeeks); - var extraWeeks = daysToMonthWeeks(addWeeks(lastDate, 1), toDate2, options); - weeksInMonth.push.apply(weeksInMonth, extraWeeks); +function createColumn(table, columnDef, depth, parent) { + var _ref, _resolvedColumnDef$id; + const defaultColumn = table._getDefaultColumnDef(); + const resolvedColumnDef = { + ...defaultColumn, + ...columnDef + }; + const accessorKey = resolvedColumnDef.accessorKey; + let id2 = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? accessorKey.replace(".", "_") : void 0) != null ? _ref : typeof resolvedColumnDef.header === "string" ? resolvedColumnDef.header : void 0; + let accessorFn; + if (resolvedColumnDef.accessorFn) { + accessorFn = resolvedColumnDef.accessorFn; + } else if (accessorKey) { + if (accessorKey.includes(".")) { + accessorFn = (originalRow) => { + let result = originalRow; + for (const key2 of accessorKey.split(".")) { + result = result[key2]; + if (result === void 0) { + throw new Error(`"${key2}" in deeply nested key "${accessorKey}" returned undefined.`); + } + } + return result; + }; + } else { + accessorFn = (originalRow) => originalRow[resolvedColumnDef.accessorKey]; } } - return weeksInMonth; + if (!id2) { + if (true) { + throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`); + } + throw new Error(); + } + let column = { + id: `${String(id2)}`, + accessorFn, + parent, + depth, + columnDef: resolvedColumnDef, + columns: [], + getFlatColumns: memo(() => [true], () => { + var _a2; + return [column, ...(_a2 = column.columns) == null ? void 0 : _a2.flatMap((d5) => d5.getFlatColumns())]; + }, { + key: false, + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugColumns; + } + }), + getLeafColumns: memo(() => [table._getOrderColumnsFn()], (orderColumns2) => { + var _a2; + if ((_a2 = column.columns) == null ? void 0 : _a2.length) { + let leafColumns = column.columns.flatMap((column2) => column2.getLeafColumns()); + return orderColumns2(leafColumns); + } + return [column]; + }, { + key: false, + debug: () => { + var _table$options$debugA2; + return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugColumns; + } + }) + }; + column = table._features.reduce((obj, feature) => { + var _a2; + return Object.assign(obj, (_a2 = feature.createColumn) == null ? void 0 : _a2.call(feature, column, table)); + }, column); + return column; } -function Table(props2) { - var _a2, _b2, _c2; - var _d2 = useDayPicker(), locale2 = _d2.locale, classNames8 = _d2.classNames, styles = _d2.styles, hideHead = _d2.hideHead, fixedWeeks = _d2.fixedWeeks, components = _d2.components, weekStartsOn = _d2.weekStartsOn, firstWeekContainsDate = _d2.firstWeekContainsDate, ISOWeek = _d2.ISOWeek; - var weeks = getMonthWeeks(props2.displayMonth, { - useFixedWeeks: Boolean(fixedWeeks), - ISOWeek, - locale: locale2, - weekStartsOn, - firstWeekContainsDate +function createHeader(table, column, options) { + var _options$id; + const id2 = (_options$id = options.id) != null ? _options$id : column.id; + let header = { + id: id2, + column, + index: options.index, + isPlaceholder: !!options.isPlaceholder, + placeholderId: options.placeholderId, + depth: options.depth, + subHeaders: [], + colSpan: 0, + rowSpan: 0, + headerGroup: null, + getLeafHeaders: () => { + const leafHeaders = []; + const recurseHeader = (h5) => { + if (h5.subHeaders && h5.subHeaders.length) { + h5.subHeaders.map(recurseHeader); + } + leafHeaders.push(h5); + }; + recurseHeader(header); + return leafHeaders; + }, + getContext: () => ({ + table, + header, + column + }) + }; + table._features.forEach((feature) => { + var _a2; + Object.assign(header, (_a2 = feature.createHeader) == null ? void 0 : _a2.call(feature, header, table)); }); - var HeadComponent = (_a2 = components === null || components === void 0 ? void 0 : components.Head) !== null && _a2 !== void 0 ? _a2 : Head; - var RowComponent = (_b2 = components === null || components === void 0 ? void 0 : components.Row) !== null && _b2 !== void 0 ? _b2 : Row; - var FooterComponent = (_c2 = components === null || components === void 0 ? void 0 : components.Footer) !== null && _c2 !== void 0 ? _c2 : Footer; - return bn.createElement( - "table", - { className: classNames8.table, style: styles.table, role: "grid", "aria-labelledby": props2["aria-labelledby"] }, - !hideHead && bn.createElement(HeadComponent, null), - bn.createElement("tbody", { className: classNames8.tbody, style: styles.tbody }, weeks.map(function(week) { - return bn.createElement(RowComponent, { displayMonth: props2.displayMonth, key: week.weekNumber, dates: week.dates, weekNumber: week.weekNumber }); - })), - bn.createElement(FooterComponent, null) - ); -} -function canUseDOM() { - return !!(typeof window !== "undefined" && window.document && window.document.createElement); -} -var useIsomorphicLayoutEffect = canUseDOM() ? s2 : h2; -var serverHandoffComplete = false; -var id = 0; -function genId() { - return "react-day-picker-".concat(++id); + return header; } -function useId(providedId) { +var Headers = { + createTable: (table) => { + return { + getHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => { + var _left$map$filter, _right$map$filter; + const leftColumns = (_left$map$filter = left == null ? void 0 : left.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _left$map$filter : []; + const rightColumns = (_right$map$filter = right == null ? void 0 : right.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _right$map$filter : []; + const centerColumns = leafColumns.filter((column) => !(left == null ? void 0 : left.includes(column.id)) && !(right == null ? void 0 : right.includes(column.id))); + const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table); + return headerGroups; + }, { + key: "getHeaderGroups", + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugHeaders; + } + }), + getCenterHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => { + leafColumns = leafColumns.filter((column) => !(left == null ? void 0 : left.includes(column.id)) && !(right == null ? void 0 : right.includes(column.id))); + return buildHeaderGroups(allColumns, leafColumns, table, "center"); + }, { + key: "getCenterHeaderGroups", + debug: () => { + var _table$options$debugA2; + return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugHeaders; + } + }), + getLeftHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => { + var _left$map$filter2; + const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : []; + return buildHeaderGroups(allColumns, orderedLeafColumns, table, "left"); + }, { + key: "getLeftHeaderGroups", + debug: () => { + var _table$options$debugA3; + return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugHeaders; + } + }), + getRightHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => { + var _right$map$filter2; + const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : []; + return buildHeaderGroups(allColumns, orderedLeafColumns, table, "right"); + }, { + key: "getRightHeaderGroups", + debug: () => { + var _table$options$debugA4; + return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugHeaders; + } + }), + getFooterGroups: memo(() => [table.getHeaderGroups()], (headerGroups) => { + return [...headerGroups].reverse(); + }, { + key: "getFooterGroups", + debug: () => { + var _table$options$debugA5; + return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugHeaders; + } + }), + getLeftFooterGroups: memo(() => [table.getLeftHeaderGroups()], (headerGroups) => { + return [...headerGroups].reverse(); + }, { + key: "getLeftFooterGroups", + debug: () => { + var _table$options$debugA6; + return (_table$options$debugA6 = table.options.debugAll) != null ? _table$options$debugA6 : table.options.debugHeaders; + } + }), + getCenterFooterGroups: memo(() => [table.getCenterHeaderGroups()], (headerGroups) => { + return [...headerGroups].reverse(); + }, { + key: "getCenterFooterGroups", + debug: () => { + var _table$options$debugA7; + return (_table$options$debugA7 = table.options.debugAll) != null ? _table$options$debugA7 : table.options.debugHeaders; + } + }), + getRightFooterGroups: memo(() => [table.getRightHeaderGroups()], (headerGroups) => { + return [...headerGroups].reverse(); + }, { + key: "getRightFooterGroups", + debug: () => { + var _table$options$debugA8; + return (_table$options$debugA8 = table.options.debugAll) != null ? _table$options$debugA8 : table.options.debugHeaders; + } + }), + getFlatHeaders: memo(() => [table.getHeaderGroups()], (headerGroups) => { + return headerGroups.map((headerGroup) => { + return headerGroup.headers; + }).flat(); + }, { + key: "getFlatHeaders", + debug: () => { + var _table$options$debugA9; + return (_table$options$debugA9 = table.options.debugAll) != null ? _table$options$debugA9 : table.options.debugHeaders; + } + }), + getLeftFlatHeaders: memo(() => [table.getLeftHeaderGroups()], (left) => { + return left.map((headerGroup) => { + return headerGroup.headers; + }).flat(); + }, { + key: "getLeftFlatHeaders", + debug: () => { + var _table$options$debugA10; + return (_table$options$debugA10 = table.options.debugAll) != null ? _table$options$debugA10 : table.options.debugHeaders; + } + }), + getCenterFlatHeaders: memo(() => [table.getCenterHeaderGroups()], (left) => { + return left.map((headerGroup) => { + return headerGroup.headers; + }).flat(); + }, { + key: "getCenterFlatHeaders", + debug: () => { + var _table$options$debugA11; + return (_table$options$debugA11 = table.options.debugAll) != null ? _table$options$debugA11 : table.options.debugHeaders; + } + }), + getRightFlatHeaders: memo(() => [table.getRightHeaderGroups()], (left) => { + return left.map((headerGroup) => { + return headerGroup.headers; + }).flat(); + }, { + key: "getRightFlatHeaders", + debug: () => { + var _table$options$debugA12; + return (_table$options$debugA12 = table.options.debugAll) != null ? _table$options$debugA12 : table.options.debugHeaders; + } + }), + getCenterLeafHeaders: memo(() => [table.getCenterFlatHeaders()], (flatHeaders) => { + return flatHeaders.filter((header) => { + var _a2; + return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); + }); + }, { + key: "getCenterLeafHeaders", + debug: () => { + var _table$options$debugA13; + return (_table$options$debugA13 = table.options.debugAll) != null ? _table$options$debugA13 : table.options.debugHeaders; + } + }), + getLeftLeafHeaders: memo(() => [table.getLeftFlatHeaders()], (flatHeaders) => { + return flatHeaders.filter((header) => { + var _a2; + return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); + }); + }, { + key: "getLeftLeafHeaders", + debug: () => { + var _table$options$debugA14; + return (_table$options$debugA14 = table.options.debugAll) != null ? _table$options$debugA14 : table.options.debugHeaders; + } + }), + getRightLeafHeaders: memo(() => [table.getRightFlatHeaders()], (flatHeaders) => { + return flatHeaders.filter((header) => { + var _a2; + return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); + }); + }, { + key: "getRightLeafHeaders", + debug: () => { + var _table$options$debugA15; + return (_table$options$debugA15 = table.options.debugAll) != null ? _table$options$debugA15 : table.options.debugHeaders; + } + }), + getLeafHeaders: memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => { + var _a2, _b2, _c2; + var _left$0$headers, _center$0$headers, _right$0$headers; + return [...(_left$0$headers = (_a2 = left[0]) == null ? void 0 : _a2.headers) != null ? _left$0$headers : [], ...(_center$0$headers = (_b2 = center[0]) == null ? void 0 : _b2.headers) != null ? _center$0$headers : [], ...(_right$0$headers = (_c2 = right[0]) == null ? void 0 : _c2.headers) != null ? _right$0$headers : []].map((header) => { + return header.getLeafHeaders(); + }).flat(); + }, { + key: "getLeafHeaders", + debug: () => { + var _table$options$debugA16; + return (_table$options$debugA16 = table.options.debugAll) != null ? _table$options$debugA16 : table.options.debugHeaders; + } + }) + }; + } +}; +function buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) { var _a2; - var initialId = providedId !== null && providedId !== void 0 ? providedId : serverHandoffComplete ? genId() : null; - var _b2 = p2(initialId), id2 = _b2[0], setId = _b2[1]; - useIsomorphicLayoutEffect(function() { - if (id2 === null) { - setId(genId()); + var _headerGroups$0$heade; + let maxDepth = 0; + const findMaxDepth = function(columns, depth) { + if (depth === void 0) { + depth = 1; } - }, []); - h2(function() { - if (serverHandoffComplete === false) { - serverHandoffComplete = true; + maxDepth = Math.max(maxDepth, depth); + columns.filter((column) => column.getIsVisible()).forEach((column) => { + var _a3; + if ((_a3 = column.columns) == null ? void 0 : _a3.length) { + findMaxDepth(column.columns, depth + 1); + } + }, 0); + }; + findMaxDepth(allColumns); + let headerGroups = []; + const createHeaderGroup = (headersToGroup, depth) => { + const headerGroup = { + depth, + id: [headerFamily, `${depth}`].filter(Boolean).join("_"), + headers: [] + }; + const pendingParentHeaders = []; + headersToGroup.forEach((headerToGroup) => { + const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]; + const isLeafHeader = headerToGroup.column.depth === headerGroup.depth; + let column; + let isPlaceholder = false; + if (isLeafHeader && headerToGroup.column.parent) { + column = headerToGroup.column.parent; + } else { + column = headerToGroup.column; + isPlaceholder = true; + } + if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) { + latestPendingParentHeader.subHeaders.push(headerToGroup); + } else { + const header = createHeader(table, column, { + id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join("_"), + isPlaceholder, + placeholderId: isPlaceholder ? `${pendingParentHeaders.filter((d5) => d5.column === column).length}` : void 0, + depth, + index: pendingParentHeaders.length + }); + header.subHeaders.push(headerToGroup); + pendingParentHeaders.push(header); + } + headerGroup.headers.push(headerToGroup); + headerToGroup.headerGroup = headerGroup; + }); + headerGroups.push(headerGroup); + if (depth > 0) { + createHeaderGroup(pendingParentHeaders, depth - 1); } - }, []); - return (_a2 = providedId !== null && providedId !== void 0 ? providedId : id2) !== null && _a2 !== void 0 ? _a2 : void 0; -} -function Month(props2) { - var _a2; - var _b2; - var dayPicker = useDayPicker(); - var dir = dayPicker.dir, classNames8 = dayPicker.classNames, styles = dayPicker.styles, components = dayPicker.components; - var displayMonths = useNavigation().displayMonths; - var captionId = useId(dayPicker.id ? "".concat(dayPicker.id, "-").concat(props2.displayIndex) : void 0); - var className = [classNames8.month]; - var style = styles.month; - var isStart = props2.displayIndex === 0; - var isEnd = props2.displayIndex === displayMonths.length - 1; - var isCenter = !isStart && !isEnd; - if (dir === "rtl") { - _a2 = [isStart, isEnd], isEnd = _a2[0], isStart = _a2[1]; - } - if (isStart) { - className.push(classNames8.caption_start); - style = __assign(__assign({}, style), styles.caption_start); - } - if (isEnd) { - className.push(classNames8.caption_end); - style = __assign(__assign({}, style), styles.caption_end); - } - if (isCenter) { - className.push(classNames8.caption_between); - style = __assign(__assign({}, style), styles.caption_between); - } - var CaptionComponent = (_b2 = components === null || components === void 0 ? void 0 : components.Caption) !== null && _b2 !== void 0 ? _b2 : Caption; - return bn.createElement( - "div", - { key: props2.displayIndex, className: className.join(" "), style }, - bn.createElement(CaptionComponent, { id: captionId, displayMonth: props2.displayMonth }), - bn.createElement(Table, { "aria-labelledby": captionId, displayMonth: props2.displayMonth }) - ); -} -function Root() { - var dayPicker = useDayPicker(); - var focusContext = useFocusContext(); - var navigation = useNavigation(); - var _a2 = p2(false), hasInitialFocus = _a2[0], setHasInitialFocus = _a2[1]; - h2(function() { - if (!dayPicker.initialFocus) - return; - if (!focusContext.focusTarget) - return; - if (hasInitialFocus) - return; - focusContext.focus(focusContext.focusTarget); - setHasInitialFocus(true); - }, [ - dayPicker.initialFocus, - hasInitialFocus, - focusContext.focus, - focusContext.focusTarget, - focusContext - ]); - var classNames8 = [dayPicker.classNames.root, dayPicker.className]; - if (dayPicker.numberOfMonths > 1) { - classNames8.push(dayPicker.classNames.multiple_months); - } - if (dayPicker.showWeekNumber) { - classNames8.push(dayPicker.classNames.with_weeknumber); - } - var style = __assign(__assign({}, dayPicker.styles.root), dayPicker.style); - return bn.createElement( - "div", - { className: classNames8.join(" "), style, dir: dayPicker.dir }, - bn.createElement("div", { className: dayPicker.classNames.months, style: dayPicker.styles.months }, navigation.displayMonths.map(function(month, i4) { - return bn.createElement(Month, { key: i4, displayIndex: i4, displayMonth: month }); - })) - ); -} -function RootProvider(props2) { - var children = props2.children, initialProps = __rest(props2, ["children"]); - return bn.createElement( - DayPickerProvider, - { initialProps }, - bn.createElement( - NavigationProvider, - null, - bn.createElement( - SelectSingleProvider, - { initialProps }, - bn.createElement( - SelectMultipleProvider, - { initialProps }, - bn.createElement( - SelectRangeProvider, - { initialProps }, - bn.createElement( - ModifiersProvider, - null, - bn.createElement(FocusProvider, null, children) - ) - ) - ) - ) - ) - ); -} -function DayPicker(props2) { - return bn.createElement( - RootProvider, - __assign({}, props2), - bn.createElement(Root, null) - ); + }; + const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, { + depth: maxDepth, + index + })); + createHeaderGroup(bottomHeaders, maxDepth - 1); + headerGroups.reverse(); + const recurseHeadersForSpans = (headers) => { + const filteredHeaders = headers.filter((header) => header.column.getIsVisible()); + return filteredHeaders.map((header) => { + let colSpan = 0; + let rowSpan = 0; + let childRowSpans = [0]; + if (header.subHeaders && header.subHeaders.length) { + childRowSpans = []; + recurseHeadersForSpans(header.subHeaders).forEach((_ref) => { + let { + colSpan: childColSpan, + rowSpan: childRowSpan + } = _ref; + colSpan += childColSpan; + childRowSpans.push(childRowSpan); + }); + } else { + colSpan = 1; + } + const minChildRowSpan = Math.min(...childRowSpans); + rowSpan = rowSpan + minChildRowSpan; + header.colSpan = colSpan; + header.rowSpan = rowSpan; + return { + colSpan, + rowSpan + }; + }); + }; + recurseHeadersForSpans((_headerGroups$0$heade = (_a2 = headerGroups[0]) == null ? void 0 : _a2.headers) != null ? _headerGroups$0$heade : []); + return headerGroups; } - -// src/utils/contexts/predicate/filter.ts -var stringEqual = (value, filterValue) => { - return value == filterValue; -}; -var stringCompare = (value, filterValue) => { - return (value != null ? value : "").toLowerCase().includes((filterValue != null ? filterValue : "").toLowerCase()); -}; -var greaterThan = (value, filterValue) => { - return parseFloat(value) > parseFloat(filterValue); -}; -var lessThan = (value, filterValue) => { - return parseInt(value) > parseInt(filterValue); -}; -var listIncludes = (value, filterValue) => { - const valueList = value ? splitString(value) : []; - const strings = filterValue ? splitString(filterValue) : []; - return strings.some((f4) => valueList.some((g4) => g4 == f4)); +var defaultColumnSizing = { + size: 150, + minSize: 20, + maxSize: Number.MAX_SAFE_INTEGER }; -var filterFnTypes = { - "include": { - type: ["text", "file", "link", "link-multi"], - fn: stringCompare, - label: "contains", - valueType: "text" - }, - "notInclude": { - type: ["text", "file", "link", "link-multi"], - fn: (v3, f4) => !stringCompare(v3, f4), - label: "does not contain", - valueType: "text" - }, - "is": { - type: ["text", "file", "link", "context"], - fn: stringEqual, - label: "is", - valueType: "text" - }, - "isNot": { - type: ["text", "file", "link", "context"], - fn: (v3, f4) => !stringEqual(v3, f4), - label: "is not", - valueType: "text" - }, - "equal": { - type: ["number"], - fn: stringEqual, - label: "=", - valueType: "number" - }, - "isGreatThan": { - type: ["number"], - fn: greaterThan, - label: ">", - valueType: "number" - }, - "isLessThan": { - type: ["number"], - fn: lessThan, - label: "<", - valueType: "number" - }, - "isLessThanOrEqual": { - type: ["number"], - fn: (v3, f4) => !greaterThan(v3, f4), - label: "\u2264", - valueType: "number" - }, - "isGreatThanOrEqual": { - type: ["number"], - fn: (v3, f4) => !lessThan(v3, f4), - label: "\u2265", - valueType: "number" - }, - "dateBefore": { - type: ["date"], - fn: lessThan, - label: "before", - valueType: "date" +var getDefaultColumnSizingInfoState = () => ({ + startOffset: null, + startSize: null, + deltaOffset: null, + deltaPercentage: null, + isResizingColumn: false, + columnSizingStart: [] +}); +var ColumnSizing = { + getDefaultColumnDef: () => { + return defaultColumnSizing; }, - "dateAfter": { - type: ["date"], - fn: greaterThan, - label: "after", - valueType: "date" + getInitialState: (state) => { + return { + columnSizing: {}, + columnSizingInfo: getDefaultColumnSizingInfoState(), + ...state + }; }, - "isAnyInList": { - type: ["option", "context", "option-multi", "context-multi"], - fn: listIncludes, - label: "is any of", - valueType: "list" + getDefaultOptions: (table) => { + return { + columnResizeMode: "onEnd", + onColumnSizingChange: makeStateUpdater("columnSizing", table), + onColumnSizingInfoChange: makeStateUpdater("columnSizingInfo", table) + }; }, - "isNoneInList": { - type: ["option", "context", "option-multi", "context-multi"], - fn: (v3, f4) => !listIncludes(v3, f4), - label: "is none of", - valueType: "list" + createColumn: (column, table) => { + return { + getSize: () => { + var _column$columnDef$min, _ref, _column$columnDef$max; + const columnSize = table.getState().columnSizing[column.id]; + return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize); + }, + getStart: (position) => { + const columns = !position ? table.getVisibleLeafColumns() : position === "left" ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns(); + const index = columns.findIndex((d5) => d5.id === column.id); + if (index > 0) { + const prevSiblingColumn = columns[index - 1]; + return prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize(); + } + return 0; + }, + resetSize: () => { + table.setColumnSizing((_ref2) => { + let { + [column.id]: _4, + ...rest + } = _ref2; + return rest; + }); + }, + getCanResize: () => { + var _column$columnDef$ena, _table$options$enable; + return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true); + }, + getIsResizing: () => { + return table.getState().columnSizingInfo.isResizingColumn === column.id; + } + }; }, - "isTrue": { - type: ["boolean"], - fn: (v3, f4) => v3 == "true", - label: "is checked", - valueType: "boolean" + createHeader: (header, table) => { + return { + getSize: () => { + let sum2 = 0; + const recurse = (header2) => { + if (header2.subHeaders.length) { + header2.subHeaders.forEach(recurse); + } else { + var _header$column$getSiz; + sum2 += (_header$column$getSiz = header2.column.getSize()) != null ? _header$column$getSiz : 0; + } + }; + recurse(header); + return sum2; + }, + getStart: () => { + if (header.index > 0) { + const prevSiblingHeader = header.headerGroup.headers[header.index - 1]; + return prevSiblingHeader.getStart() + prevSiblingHeader.getSize(); + } + return 0; + }, + getResizeHandler: () => { + const column = table.getColumn(header.column.id); + const canResize = column.getCanResize(); + return (e4) => { + var _a2; + if (!canResize) { + return; + } + (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); + if (isTouchStartEvent(e4)) { + if (e4.touches && e4.touches.length > 1) { + return; + } + } + const startSize = header.getSize(); + const columnSizingStart = header ? header.getLeafHeaders().map((d5) => [d5.column.id, d5.column.getSize()]) : [[column.id, column.getSize()]]; + const clientX = isTouchStartEvent(e4) ? Math.round(e4.touches[0].clientX) : e4.clientX; + const newColumnSizing = {}; + const updateOffset = (eventType, clientXPos) => { + if (typeof clientXPos !== "number") { + return; + } + table.setColumnSizingInfo((old) => { + var _old$startOffset, _old$startSize; + const deltaOffset = clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0); + const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999); + old.columnSizingStart.forEach((_ref3) => { + let [columnId, headerSize] = _ref3; + newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100; + }); + return { + ...old, + deltaOffset, + deltaPercentage + }; + }); + if (table.options.columnResizeMode === "onChange" || eventType === "end") { + table.setColumnSizing((old) => ({ + ...old, + ...newColumnSizing + })); + } + }; + const onMove = (clientXPos) => updateOffset("move", clientXPos); + const onEnd = (clientXPos) => { + updateOffset("end", clientXPos); + table.setColumnSizingInfo((old) => ({ + ...old, + isResizingColumn: false, + startOffset: null, + startSize: null, + deltaOffset: null, + deltaPercentage: null, + columnSizingStart: [] + })); + }; + const mouseEvents = { + moveHandler: (e5) => onMove(e5.clientX), + upHandler: (e5) => { + document.removeEventListener("mousemove", mouseEvents.moveHandler); + document.removeEventListener("mouseup", mouseEvents.upHandler); + onEnd(e5.clientX); + } + }; + const touchEvents = { + moveHandler: (e5) => { + if (e5.cancelable) { + e5.preventDefault(); + e5.stopPropagation(); + } + onMove(e5.touches[0].clientX); + return false; + }, + upHandler: (e5) => { + var _a3; + document.removeEventListener("touchmove", touchEvents.moveHandler); + document.removeEventListener("touchend", touchEvents.upHandler); + if (e5.cancelable) { + e5.preventDefault(); + e5.stopPropagation(); + } + onEnd((_a3 = e5.touches[0]) == null ? void 0 : _a3.clientX); + } + }; + const passiveIfSupported = passiveEventSupported() ? { + passive: false + } : false; + if (isTouchStartEvent(e4)) { + document.addEventListener("touchmove", touchEvents.moveHandler, passiveIfSupported); + document.addEventListener("touchend", touchEvents.upHandler, passiveIfSupported); + } else { + document.addEventListener("mousemove", mouseEvents.moveHandler, passiveIfSupported); + document.addEventListener("mouseup", mouseEvents.upHandler, passiveIfSupported); + } + table.setColumnSizingInfo((old) => ({ + ...old, + startOffset: clientX, + startSize, + deltaOffset: 0, + deltaPercentage: 0, + columnSizingStart, + isResizingColumn: column.id + })); + }; + } + }; }, - "isFalse": { - type: ["boolean"], - fn: (v3, f4) => v3 != "true", - label: "is unchecked", - valueType: "boolean" + createTable: (table) => { + return { + setColumnSizing: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onColumnSizingChange) == null ? void 0 : _b2.call(_a2, updater); + }, + setColumnSizingInfo: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onColumnSizingInfoChange) == null ? void 0 : _b2.call(_a2, updater); + }, + resetColumnSizing: (defaultState) => { + var _table$initialState$c; + table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {}); + }, + resetHeaderSizeInfo: (defaultState) => { + var _table$initialState$c2; + table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState()); + }, + getTotalSize: () => { + var _a2; + var _table$getHeaderGroup; + return (_table$getHeaderGroup = (_a2 = table.getHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { + return sum2 + header.getSize(); + }, 0)) != null ? _table$getHeaderGroup : 0; + }, + getLeftTotalSize: () => { + var _a2; + var _table$getLeftHeaderG; + return (_table$getLeftHeaderG = (_a2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { + return sum2 + header.getSize(); + }, 0)) != null ? _table$getLeftHeaderG : 0; + }, + getCenterTotalSize: () => { + var _a2; + var _table$getCenterHeade; + return (_table$getCenterHeade = (_a2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { + return sum2 + header.getSize(); + }, 0)) != null ? _table$getCenterHeade : 0; + }, + getRightTotalSize: () => { + var _a2; + var _table$getRightHeader; + return (_table$getRightHeader = (_a2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { + return sum2 + header.getSize(); + }, 0)) != null ? _table$getRightHeader : 0; + } + }; } }; -var filterReturnForCol = (col, filter, row) => { - if (!col) - return true; - const filterType = filterFnTypes[filter.type]; - let result = true; - if (filterType) { - result = filterType.fn(row[filter.field], filter.value); +var passiveSupported = null; +function passiveEventSupported() { + if (typeof passiveSupported === "boolean") + return passiveSupported; + let supported = false; + try { + const options = { + get passive() { + supported = true; + return false; + } + }; + const noop2 = () => { + }; + window.addEventListener("test", noop2, options); + window.removeEventListener("test", noop2); + } catch (err) { + supported = false; } - return result; -}; - -// src/utils/contexts/predicate/sort.ts -var simpleSort = (a5, b4) => { - if (a5 < b4) - return -1; - if (a5 > b4) - return 1; - return 0; -}; -var stringSort = (value, filterValue) => simpleSort(value, filterValue); -var numSort = (value, filterValue) => simpleSort(parseFloat(value), parseFloat(filterValue)); -var boolSort = (value, filterValue) => simpleSort(value == "true" ? 1 : 0, filterValue == "true" ? 1 : 0); -var countSort = (value, filterValue) => simpleSort(splitString(value).length, splitString(filterValue).length); -var normalizedSortForType = (type, desc) => { - return Object.keys(sortFnTypes).find((f4) => sortFnTypes[f4].type.some((g4) => g4 == type) && sortFnTypes[f4].desc == desc); -}; -var sortFnTypes = { - "alphabetical": { - type: ["text", "file", "link", "context"], - fn: stringSort, - label: "A to Z", - desc: false - }, - "reverseAlphabetical": { - type: ["text", "file", "link", "context"], - fn: (v3, f4) => stringSort(v3, f4) * -1, - label: "Z to A", - desc: true - }, - "boolean": { - type: ["boolean"], - fn: boolSort, - label: "Checked \u2192 Unchecked", - desc: false - }, - "booleanReverse": { - type: ["boolean"], - fn: (v3, f4) => boolSort(v3, f4) * -1, - label: "Unchecked \u2192 Checked", - desc: true + passiveSupported = supported; + return passiveSupported; +} +function isTouchStartEvent(e4) { + return e4.type === "touchstart"; +} +var Expanding = { + getInitialState: (state) => { + return { + expanded: {}, + ...state + }; }, - "number": { - type: ["number"], - fn: numSort, - label: "1 \u2192 9", - desc: false + getDefaultOptions: (table) => { + return { + onExpandedChange: makeStateUpdater("expanded", table), + paginateExpandedRows: true + }; }, - "reverseNumber": { - type: ["number"], - fn: (v3, f4) => numSort(v3, f4) * -1, - label: "9 \u2192 1", - desc: true - }, - "count": { - type: ["option-multi", "context-multi", "link-multi"], - fn: countSort, - label: "Most Items", - desc: true + createTable: (table) => { + let registered = false; + let queued = false; + return { + _autoResetExpanded: () => { + var _ref, _table$options$autoRe; + if (!registered) { + table._queue(() => { + registered = true; + }); + return; + } + if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) { + if (queued) + return; + queued = true; + table._queue(() => { + table.resetExpanded(); + queued = false; + }); + } + }, + setExpanded: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onExpandedChange) == null ? void 0 : _b2.call(_a2, updater); + }, + toggleAllRowsExpanded: (expanded) => { + if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) { + table.setExpanded(true); + } else { + table.setExpanded({}); + } + }, + resetExpanded: (defaultState) => { + var _a2; + var _table$initialState$e; + table.setExpanded(defaultState ? {} : (_table$initialState$e = (_a2 = table.initialState) == null ? void 0 : _a2.expanded) != null ? _table$initialState$e : {}); + }, + getCanSomeRowsExpand: () => { + return table.getRowModel().flatRows.some((row) => row.getCanExpand()); + }, + getToggleAllRowsExpandedHandler: () => { + return (e4) => { + var _a2; + (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); + table.toggleAllRowsExpanded(); + }; + }, + getIsSomeRowsExpanded: () => { + const expanded = table.getState().expanded; + return expanded === true || Object.values(expanded).some(Boolean); + }, + getIsAllRowsExpanded: () => { + const expanded = table.getState().expanded; + if (typeof expanded === "boolean") { + return expanded === true; + } + if (!Object.keys(expanded).length) { + return false; + } + if (table.getRowModel().flatRows.some((row) => !row.getIsExpanded())) { + return false; + } + return true; + }, + getExpandedDepth: () => { + let maxDepth = 0; + const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded); + rowIds.forEach((id2) => { + const splitId = id2.split("."); + maxDepth = Math.max(maxDepth, splitId.length); + }); + return maxDepth; + }, + getPreExpandedRowModel: () => table.getSortedRowModel(), + getExpandedRowModel: () => { + if (!table._getExpandedRowModel && table.options.getExpandedRowModel) { + table._getExpandedRowModel = table.options.getExpandedRowModel(table); + } + if (table.options.manualExpanding || !table._getExpandedRowModel) { + return table.getPreExpandedRowModel(); + } + return table._getExpandedRowModel(); + } + }; }, - "reverseCount": { - type: ["option-multi", "context-multi", "link-multi"], - fn: (v3, f4) => countSort(v3, f4) * -1, - label: "Least Items", - desc: false + createRow: (row, table) => { + return { + toggleExpanded: (expanded) => { + table.setExpanded((old) => { + var _expanded; + const exists = old === true ? true : !!(old == null ? void 0 : old[row.id]); + let oldExpanded = {}; + if (old === true) { + Object.keys(table.getRowModel().rowsById).forEach((rowId) => { + oldExpanded[rowId] = true; + }); + } else { + oldExpanded = old; + } + expanded = (_expanded = expanded) != null ? _expanded : !exists; + if (!exists && expanded) { + return { + ...oldExpanded, + [row.id]: true + }; + } + if (exists && !expanded) { + const { + [row.id]: _4, + ...rest + } = oldExpanded; + return rest; + } + return old; + }); + }, + getIsExpanded: () => { + var _a2, _b2; + var _table$options$getIsR; + const expanded = table.getState().expanded; + return !!((_table$options$getIsR = (_b2 = (_a2 = table.options).getIsRowExpanded) == null ? void 0 : _b2.call(_a2, row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id])); + }, + getCanExpand: () => { + var _a2, _b2, _c2; + var _table$options$getRow, _table$options$enable; + return (_table$options$getRow = (_b2 = (_a2 = table.options).getRowCanExpand) == null ? void 0 : _b2.call(_a2, row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_c2 = row.subRows) == null ? void 0 : _c2.length); + }, + getToggleExpandedHandler: () => { + const canExpand = row.getCanExpand(); + return () => { + if (!canExpand) + return; + row.toggleExpanded(); + }; + } + }; } }; -var sortReturnForCol = (col, sort, row, row2) => { - if (!col) - return 0; - const sortType = sortFnTypes[sort.type]; - if (sortType) { - return sortType.fn(row[sort.field], row2[sort.field]); - } - return 0; +var includesString = (row, columnId, filterValue) => { + var _a2; + const search = filterValue.toLowerCase(); + return Boolean((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.toLowerCase().includes(search)); }; - -// src/utils/contexts/predicate/predicate.tsx -var defaultPredicateFnForType = (type, types) => { - const fnType = Object.keys(types).find((f4) => types[f4].type.find((g4) => g4 == type)); - return fnType; +includesString.autoRemove = (val) => testFalsey(val); +var includesStringSensitive = (row, columnId, filterValue) => { + var _a2; + return Boolean((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(filterValue)); }; -var predicateFnsForType = (type, types) => { - const fnTypes = Object.keys(types).filter((f4) => types[f4].type.find((g4) => g4 == type)); - return fnTypes; +includesStringSensitive.autoRemove = (val) => testFalsey(val); +var equalsString = (row, columnId, filterValue) => { + var _a2; + return ((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.toLowerCase()) === filterValue.toLowerCase(); }; -var cleanPredicateType = (type, definedTypes) => { - return type.filter((f4) => Object.keys(definedTypes).find((g4) => g4 == f4.type)); +equalsString.autoRemove = (val) => testFalsey(val); +var arrIncludes = (row, columnId, filterValue) => { + var _a2; + return (_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(filterValue); }; -var validatePredicate = (prevPredicate) => { - if (!prevPredicate) { - return defaultPredicate; +arrIncludes.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); +var arrIncludesAll = (row, columnId, filterValue) => { + return !filterValue.some((val) => { + var _a2; + return !((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(val)); + }); +}; +arrIncludesAll.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); +var arrIncludesSome = (row, columnId, filterValue) => { + return filterValue.some((val) => { + var _a2; + return (_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(val); + }); +}; +arrIncludesSome.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); +var equals = (row, columnId, filterValue) => { + return row.getValue(columnId) === filterValue; +}; +equals.autoRemove = (val) => testFalsey(val); +var weakEquals = (row, columnId, filterValue) => { + return row.getValue(columnId) == filterValue; +}; +weakEquals.autoRemove = (val) => testFalsey(val); +var inNumberRange = (row, columnId, filterValue) => { + let [min3, max3] = filterValue; + const rowValue = row.getValue(columnId); + return rowValue >= min3 && rowValue <= max3; +}; +inNumberRange.resolveFilterValue = (val) => { + let [unsafeMin, unsafeMax] = val; + let parsedMin = typeof unsafeMin !== "number" ? parseFloat(unsafeMin) : unsafeMin; + let parsedMax = typeof unsafeMax !== "number" ? parseFloat(unsafeMax) : unsafeMax; + let min3 = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin; + let max3 = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax; + if (min3 > max3) { + const temp = min3; + min3 = max3; + max3 = temp; } - return { - ...defaultPredicate, - filters: Array.isArray(prevPredicate.filters) ? cleanPredicateType(prevPredicate.filters, filterFnTypes) : [], - sort: Array.isArray(prevPredicate.sort) ? cleanPredicateType(prevPredicate.sort, sortFnTypes) : [], - groupBy: Array.isArray(prevPredicate.groupBy) ? prevPredicate.groupBy : [], - colsOrder: Array.isArray(prevPredicate.colsOrder) ? prevPredicate.colsOrder : [], - colsHidden: Array.isArray(prevPredicate.colsHidden) ? prevPredicate.colsHidden : [], - colsSize: prevPredicate.colsSize - }; + return [min3, max3]; }; -var defaultPredicate = { filters: [], sort: [], groupBy: [], colsOrder: [], colsHidden: [], colsSize: {} }; -var splitString = (str) => { - var _a2; - return (_a2 = str == null ? void 0 : str.match(/(\\.|[^,])+/g)) != null ? _a2 : []; +inNumberRange.autoRemove = (val) => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]); +var filterFns = { + includesString, + includesStringSensitive, + equalsString, + arrIncludes, + arrIncludesAll, + arrIncludesSome, + equals, + weakEquals, + inNumberRange }; - -// src/components/ui/menus/menu.tsx -var OptionMenu = bn.forwardRef((props2, ref) => { - var _a2; - const initialOptions = props2.options.map((o3, i4) => { +function testFalsey(val) { + return val === void 0 || val === null || val === ""; +} +var Filters = { + getDefaultColumnDef: () => { return { - ...o3, - id: i4 + 1 + filterFn: "auto" }; - }); - h2(() => { - setSuggestions(props2.options.map((o3, i4) => { - return { - ...o3, - id: i4 + 1 - }; - })); - }, [props2.options]); - const [suggestions, setSuggestions] = p2(initialOptions); - const [tags, setTags] = p2(props2.value.map((v3) => { - var _a3; - return (_a3 = initialOptions.find((f4) => f4.value == v3)) != null ? _a3 : { id: 0, name: v3, value: v3 }; - })); - const onDelete = T2((tagIndex) => { - const newTags = tags.filter((_5, i4) => i4 !== tagIndex); - setTags(newTags); - props2.saveOptions(suggestions.map((f4) => f4.value), newTags.map((f4) => f4.value)); - }, [suggestions, tags]); - const onAddition = T2((newTag) => { - let tag = newTag; - let newSuggestions = suggestions; - let newTags = tags; - if (!suggestions.find((s5) => s5.value == newTag.value)) { - tag = { - id: suggestions.length + 1, - name: newTag.name, - value: newTag.name - }; - newSuggestions = [...suggestions, tag]; - setSuggestions(newSuggestions); - } - if (props2.multi) { - if (!tags.find((t4) => t4.value == tag.value)) { - newTags = [...tags, tag]; - setTags(newTags); + }, + getInitialState: (state) => { + return { + columnFilters: [], + globalFilter: void 0, + ...state + }; + }, + getDefaultOptions: (table) => { + return { + onColumnFiltersChange: makeStateUpdater("columnFilters", table), + onGlobalFilterChange: makeStateUpdater("globalFilter", table), + filterFromLeafRows: false, + maxLeafRowFilterDepth: 100, + globalFilterFn: "auto", + getColumnCanGlobalFilter: (column) => { + var _a2, _b2; + const value = (_b2 = (_a2 = table.getCoreRowModel().flatRows[0]) == null ? void 0 : _a2._getAllCellsByColumnId()[column.id]) == null ? void 0 : _b2.getValue(); + return typeof value === "string" || typeof value === "number"; } - } else { - newTags = [tag]; - setTags(newTags); - } - props2.saveOptions(newSuggestions.map((f4) => f4.value), newTags.map((f4) => f4.value)); - if (!props2.multi) { - props2.hide(); - } - }, [tags, suggestions]); - const onValidation = T2((newTag) => { - if (!props2.editable && !suggestions.find((s5) => s5.value == newTag.value)) { - return false; - } - if (newTag.name.length == 0) { - return false; + }; + }, + createColumn: (column, table) => { + return { + getAutoFilterFn: () => { + const firstRow = table.getCoreRowModel().flatRows[0]; + const value = firstRow == null ? void 0 : firstRow.getValue(column.id); + if (typeof value === "string") { + return filterFns.includesString; + } + if (typeof value === "number") { + return filterFns.inNumberRange; + } + if (typeof value === "boolean") { + return filterFns.equals; + } + if (value !== null && typeof value === "object") { + return filterFns.equals; + } + if (Array.isArray(value)) { + return filterFns.arrIncludes; + } + return filterFns.weakEquals; + }, + getFilterFn: () => { + var _a2; + var _table$options$filter; + return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === "auto" ? column.getAutoFilterFn() : (_table$options$filter = (_a2 = table.options.filterFns) == null ? void 0 : _a2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn]; + }, + getCanFilter: () => { + var _column$columnDef$ena, _table$options$enable, _table$options$enable2; + return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn; + }, + getCanGlobalFilter: () => { + var _a2, _b2; + var _column$columnDef$ena2, _table$options$enable3, _table$options$enable4, _table$options$getCol; + return ((_column$columnDef$ena2 = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena2 : true) && ((_table$options$enable3 = table.options.enableGlobalFilter) != null ? _table$options$enable3 : true) && ((_table$options$enable4 = table.options.enableFilters) != null ? _table$options$enable4 : true) && ((_table$options$getCol = (_b2 = (_a2 = table.options).getColumnCanGlobalFilter) == null ? void 0 : _b2.call(_a2, column)) != null ? _table$options$getCol : true) && !!column.accessorFn; + }, + getIsFiltered: () => column.getFilterIndex() > -1, + getFilterValue: () => { + var _a2, _b2; + return (_b2 = (_a2 = table.getState().columnFilters) == null ? void 0 : _a2.find((d5) => d5.id === column.id)) == null ? void 0 : _b2.value; + }, + getFilterIndex: () => { + var _a2; + var _table$getState$colum; + return (_table$getState$colum = (_a2 = table.getState().columnFilters) == null ? void 0 : _a2.findIndex((d5) => d5.id === column.id)) != null ? _table$getState$colum : -1; + }, + setFilterValue: (value) => { + table.setColumnFilters((old) => { + const filterFn = column.getFilterFn(); + const previousfilter = old == null ? void 0 : old.find((d5) => d5.id === column.id); + const newFilter = functionalUpdate(value, previousfilter ? previousfilter.value : void 0); + if (shouldAutoRemoveFilter(filterFn, newFilter, column)) { + var _old$filter; + return (_old$filter = old == null ? void 0 : old.filter((d5) => d5.id !== column.id)) != null ? _old$filter : []; + } + const newFilterObj = { + id: column.id, + value: newFilter + }; + if (previousfilter) { + var _old$map; + return (_old$map = old == null ? void 0 : old.map((d5) => { + if (d5.id === column.id) { + return newFilterObj; + } + return d5; + })) != null ? _old$map : []; + } + if (old == null ? void 0 : old.length) { + return [...old, newFilterObj]; + } + return [newFilterObj]; + }); + }, + _getFacetedRowModel: table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id), + getFacetedRowModel: () => { + if (!column._getFacetedRowModel) { + return table.getPreFilteredRowModel(); + } + return column._getFacetedRowModel(); + }, + _getFacetedUniqueValues: table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id), + getFacetedUniqueValues: () => { + if (!column._getFacetedUniqueValues) { + return /* @__PURE__ */ new Map(); + } + return column._getFacetedUniqueValues(); + }, + _getFacetedMinMaxValues: table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id), + getFacetedMinMaxValues: () => { + if (!column._getFacetedMinMaxValues) { + return void 0; + } + return column._getFacetedMinMaxValues(); + } + }; + }, + createRow: (row, table) => { + return { + columnFilters: {}, + columnFiltersMeta: {} + }; + }, + createTable: (table) => { + return { + getGlobalAutoFilterFn: () => { + return filterFns.includesString; + }, + getGlobalFilterFn: () => { + var _a2; + var _table$options$filter2; + const { + globalFilterFn + } = table.options; + return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === "auto" ? table.getGlobalAutoFilterFn() : (_table$options$filter2 = (_a2 = table.options.filterFns) == null ? void 0 : _a2[globalFilterFn]) != null ? _table$options$filter2 : filterFns[globalFilterFn]; + }, + setColumnFilters: (updater) => { + var _a2, _b2; + const leafColumns = table.getAllLeafColumns(); + const updateFn = (old) => { + var _a3; + return (_a3 = functionalUpdate(updater, old)) == null ? void 0 : _a3.filter((filter) => { + const column = leafColumns.find((d5) => d5.id === filter.id); + if (column) { + const filterFn = column.getFilterFn(); + if (shouldAutoRemoveFilter(filterFn, filter.value, column)) { + return false; + } + } + return true; + }); + }; + (_b2 = (_a2 = table.options).onColumnFiltersChange) == null ? void 0 : _b2.call(_a2, updateFn); + }, + setGlobalFilter: (updater) => { + var _a2, _b2; + (_b2 = (_a2 = table.options).onGlobalFilterChange) == null ? void 0 : _b2.call(_a2, updater); + }, + resetGlobalFilter: (defaultState) => { + table.setGlobalFilter(defaultState ? void 0 : table.initialState.globalFilter); + }, + resetColumnFilters: (defaultState) => { + var _a2; + var _table$initialState$c; + table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_a2 = table.initialState) == null ? void 0 : _a2.columnFilters) != null ? _table$initialState$c : []); + }, + getPreFilteredRowModel: () => table.getCoreRowModel(), + getFilteredRowModel: () => { + if (!table._getFilteredRowModel && table.options.getFilteredRowModel) { + table._getFilteredRowModel = table.options.getFilteredRowModel(table); + } + if (table.options.manualFiltering || !table._getFilteredRowModel) { + return table.getPreFilteredRowModel(); + } + return table._getFilteredRowModel(); + }, + _getGlobalFacetedRowModel: table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, "__global__"), + getGlobalFacetedRowModel: () => { + if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) { + return table.getPreFilteredRowModel(); + } + return table._getGlobalFacetedRowModel(); + }, + _getGlobalFacetedUniqueValues: table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, "__global__"), + getGlobalFacetedUniqueValues: () => { + if (!table._getGlobalFacetedUniqueValues) { + return /* @__PURE__ */ new Map(); + } + return table._getGlobalFacetedUniqueValues(); + }, + _getGlobalFacetedMinMaxValues: table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, "__global__"), + getGlobalFacetedMinMaxValues: () => { + if (!table._getGlobalFacetedMinMaxValues) { + return; + } + return table._getGlobalFacetedMinMaxValues(); + } + }; + } +}; +function shouldAutoRemoveFilter(filterFn, value, column) { + return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === "undefined" || typeof value === "string" && !value; +} +var sum = (columnId, _leafRows, childRows) => { + return childRows.reduce((sum2, next) => { + const nextValue = next.getValue(columnId); + return sum2 + (typeof nextValue === "number" ? nextValue : 0); + }, 0); +}; +var min = (columnId, _leafRows, childRows) => { + let min3; + childRows.forEach((row) => { + const value = row.getValue(columnId); + if (value != null && (min3 > value || min3 === void 0 && value >= value)) { + min3 = value; } - return true; - }, [suggestions]); - return /* @__PURE__ */ bn.createElement(ReactTags_default, { - tags: props2.multi ? tags : [], - suggestions, - ref, - onDelete, - onAddition, - onValidate: onValidation, - defaultSuggestions: props2.defaultOptions, - placeholderText: (_a2 = props2.placeholder) != null ? _a2 : "", - minQueryLength: 0, - onHover: props2.onHover, - hoverSelect: props2.onHover ? true : false, - maxSuggestionsLength: props2.showAll ? Math.min(50, props2.options.length) : 8, - suggestionsOnly: !props2.searchable && !props2.editable, - allowNew: props2.editable, - previewComponent: props2.previewComponent - }); -}); -var inputMenuItem = (menuItem, value, setValue) => { - const frag = document.createDocumentFragment(); - const spanEl = frag.createEl("span"); - const inputEl = frag.createEl("input"); - inputEl.value = value; - inputEl.addEventListener("click", (e4) => { - e4.stopImmediatePropagation(); }); - inputEl.addEventListener("mousedown", (e4) => { - e4.stopImmediatePropagation(); + return min3; +}; +var max = (columnId, _leafRows, childRows) => { + let max3; + childRows.forEach((row) => { + const value = row.getValue(columnId); + if (value != null && (max3 < value || max3 === void 0 && value >= value)) { + max3 = value; + } }); - inputEl.addEventListener("mouseup", (e4) => { - e4.stopImmediatePropagation(); - }); - inputEl.addEventListener("blur", (e4) => { - setValue(inputEl.value); - }); - menuItem.dom.toggleClass("mk-menu-input", true); - menuItem.setTitle(frag); - return menuItem; -}; -var showSelectMenu = (point, optionProps) => { - const menu = new import_obsidian.Menu(); - menu.dom.toggleClass("mk-menu", true); - menu.setUseNativeMenu(false); - const frag = document.createDocumentFragment(); - const div = frag.createDiv("mk-options-container"); - div.style.minHeight = Math.min(200, (optionProps.options.length + (optionProps.searchable ? 1 : 0)) * 28).toString() + "px"; - div.addEventListener("click", (e4) => { - e4.stopImmediatePropagation(); - }); - div.addEventListener("mousedown", (e4) => { - e4.stopImmediatePropagation(); - }); - div.addEventListener("mouseup", (e4) => { - e4.stopImmediatePropagation(); - }); - div.addEventListener("keydown", (e4) => { - }); - menu.onHide(() => optionProps.onHide && optionProps.onHide()); - const root = createRoot(div); - root.render(/* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(OptionMenu, { - hide: () => { - menu.hide(); - optionProps.onHide && optionProps.onHide(); - }, - ...optionProps - }))); - menu.addItem((item) => { - item.setTitle(frag); - }); - const keys = [...menu.scope.keys]; - for (let i4 = 0; i4 < keys.length; i4++) { - if (keys[i4].key != "Escape") { - menu.scope.unregister(keys[i4]); - } - } - menu.showAtPosition(point); - return menu; + return max3; }; -var showDatePickerMenu = (point, value, setValue, format3) => { - const menu = new import_obsidian.Menu(); - menu.dom.toggleClass("mk-menu", true); - menu.setUseNativeMenu(false); - const frag = document.createDocumentFragment(); - const div = frag.createEl("div"); - div.addEventListener("click", (e4) => { - e4.stopImmediatePropagation(); - }); - div.addEventListener("mousedown", (e4) => { - e4.stopImmediatePropagation(); - }); - div.addEventListener("mouseup", (e4) => { - e4.stopImmediatePropagation(); - }); - div.addEventListener("keydown", (e4) => { - }); - const setDate = (date) => { - setValue(date); - menu.hide(); - }; - const root = createRoot(div); - root.render(/* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(DayPicker, { - mode: "single", - selected: value, - onSelect: setDate - }))); - menu.addItem((item) => { - item.setTitle(frag); - }); - const keys = [...menu.scope.keys]; - for (let i4 = 0; i4 < keys.length; i4++) { - if (keys[i4].key != "Escape") { - menu.scope.unregister(keys[i4]); +var extent = (columnId, _leafRows, childRows) => { + let min3; + let max3; + childRows.forEach((row) => { + const value = row.getValue(columnId); + if (value != null) { + if (min3 === void 0) { + if (value >= value) + min3 = max3 = value; + } else { + if (min3 > value) + min3 = value; + if (max3 < value) + max3 = value; + } } - } - menu.showAtPosition(point); - return menu; -}; -var disclosureMenuItem = (menuItem, multi, editable, title, value, options, saveOptions) => { - const frag = document.createDocumentFragment(); - const div = frag.createDiv("title"); - div.textContent = title; - const div2 = frag.createDiv("disclosure"); - div2.textContent = value; - menuItem.setTitle(frag); - menuItem.onClick((ev) => { - var _a2; - ev.stopPropagation(); - const offset = menuItem.dom.getBoundingClientRect(); - showSelectMenu({ x: offset.right + 10, y: offset.top }, { multi, editable, value: (_a2 = splitString(value)) != null ? _a2 : [], options, saveOptions, searchable: true, showAll: true }); }); - return menuItem; -}; - -// src/components/ContextView/FilterBar/FilterBar.tsx -var import_obsidian10 = require("obsidian"); - -// src/utils/icons.ts -var uiIconSet = { - "mk-ui-close": ` - - `, - "mk-ui-flow-hover": ` - - `, - "mk-ui-folder": ` - - `, - "mk-ui-open-link": ` - - `, - "mk-ui-file": ` - -`, - "mk-ui-expand": ` - -`, - "mk-ui-new-folder": ``, - "mk-ui-new-note": ``, - "mk-ui-collapse": ` - -`, - "mk-ui-options": ` - -`, - "mk-ui-plus": ` - -`, - "mk-ui-collapse-sm": ` - -`, - "mk-ui-search": ` - - -`, - "mk-ui-view-options": ` - - -`, - "mk-ui-clear": ` - - -`, - "mk-ui-new-file": ` - - -`, - "mk-ui-blink": ` - - - - -`, - "mk-ui-spaces": ` - -`, - "mk-ui-tags": ` - -`, - "mk-ui-handle": ` - - - - - - - -`, - "mk-ui-new-space": ` - - -`, - "mk-ui-file-solid": ` - - - -`, - "mk-ui-folder-solid": ` - - -`, - "mk-ui-sync": ` - - -`, - "mk-ui-stack": ` - - -` -}; -var makeIconSet = { - "mk-make-todo": ` - - - - `, - "mk-make-list": ` - - - - - - - - `, - "mk-make-ordered": ` - - - - - - - - `, - "mk-make-h1": ` - - - - `, - "mk-make-h2": ` - - - - `, - "mk-make-h3": ` - - - - `, - "mk-make-quote": ` - - - - - - `, - "mk-make-hr": ` - - - `, - "mk-make-link": ` - - - `, - "mk-make-image": ` - - - - - - `, - "mk-make-codeblock": ` - - - - - `, - "mk-make-callout": ` - - - - `, - "mk-make-note": ` - - - - - - `, - "mk-make-flow": ` - - - `, - "mk-make-tag": ` - - - `, - "mk-make-table": ` - - - - - ` -}; -var mkLogo = ` - - -`; -var markIconSet = { - "mk-mark-strong": ` - - - `, - "mk-mark-em": ` - - `, - "mk-mark-strikethrough": ` - - - - `, - "mk-mark-code": ` - - - - - `, - "mk-mark-link": ` - - `, - "mk-mark-blocklink": ` - - - - - `, - "mk-mark-highlight": ` - - - - - - `, - "mk-make-attach": ` - - - - - `, - "mk-make-keyboard": ` - - - -`, - "mk-make-slash": ` - - - -`, - "mk-make-style": ` - -`, - "mk-mark-color": ` - - -` + return [min3, max3]; }; - -// src/utils/tree.ts -var import_obsidian2 = require("obsidian"); -var uniq = (a5) => [...new Set(a5)]; -var uniqCaseInsensitive = (a5) => [...new Map(a5.map((s5) => [s5.toLowerCase(), s5])).values()]; -var uniqueNameFromString = (name, cols) => { - let newName = name; - if (cols.includes(newName)) { - let append = 1; - while (cols.includes(newName)) { - newName = name + append.toString(); - append += 1; +var mean = (columnId, leafRows) => { + let count2 = 0; + let sum2 = 0; + leafRows.forEach((row) => { + let value = row.getValue(columnId); + if (value != null && (value = +value) >= value) { + ++count2, sum2 += value; } - } - return newName; -}; -var onlyUniqueProp = (prop) => (value, index, self2) => { - return self2.findIndex((v3) => value[prop] == v3[prop]) === index; + }); + if (count2) + return sum2 / count2; + return; }; -var fileNameToString = (filename) => filename.substring(0, filename.lastIndexOf(".")) || filename; -var removeLeadingSlash = (path) => path.charAt(0) == "/" ? path.substring(1) : path; -var filePathToString = (filename) => removeLeadingSlash(filename.substring(filename.lastIndexOf("/"), filename.lastIndexOf("."))) || filename; -var folderPathToString = (filename) => removeLeadingSlash(filename.substring(filename.lastIndexOf("/"))) || filename; -var safelyParseJSON = (json) => { - var parsed; - try { - parsed = JSON.parse(json); - } catch (e4) { +var median = (columnId, leafRows) => { + if (!leafRows.length) { + return; } - return parsed; + let min3 = 0; + let max3 = 0; + leafRows.forEach((row) => { + let value = row.getValue(columnId); + if (typeof value === "number") { + min3 = Math.min(min3, value); + max3 = Math.max(max3, value); + } + }); + return (min3 + max3) / 2; }; -var nodeIsAncestorOfTarget = (node, target) => { - var _a2, _b2, _c2; - if (((_a2 = node.item) == null ? void 0 : _a2.folder) == "false") - return false; - return (_c2 = target.item) == null ? void 0 : _c2.path.contains(((_b2 = node.item) == null ? void 0 : _b2.path) + "/"); +var unique = (columnId, leafRows) => { + return Array.from(new Set(leafRows.map((d5) => d5.getValue(columnId))).values()); }; -var excludeVaultItemPredicate = (plugin) => (f4, index, folder) => !(f4.folder != "true" && plugin.settings.hiddenExtensions.find((e4) => fileExtensionForFile(f4.path) == e4)) && !plugin.settings.hiddenFiles.find((e4) => e4 == f4.path) && (!plugin.settings.enableFolderNote || !plugin.settings.folderNoteInsideFolder && !folder.some((g4) => g4.path + ".md" == f4.path) || plugin.settings.folderNoteInsideFolder && !(f4.parent + "/" + folderPathToString(f4.parent) + ".md" == f4.path)); -var excludeFilePredicate = (plugin) => (f4, index, folder) => !(f4 instanceof import_obsidian2.TFile && plugin.settings.hiddenExtensions.find((e4) => f4.extension == e4)) && !plugin.settings.hiddenFiles.find((e4) => e4 == f4.path) && (!plugin.settings.enableFolderNote || !plugin.settings.folderNoteInsideFolder && !folder.some((g4) => g4.path + ".md" == f4.path) || plugin.settings.folderNoteInsideFolder && !(f4.parent.path + "/" + f4.parent.name + ".md" == f4.path)); -var folderChildren = (plugin, f4, exclusionList) => { - var _a2, _b2; - return (_b2 = (_a2 = f4 == null ? void 0 : f4.children) == null ? void 0 : _a2.filter(excludeFilePredicate(plugin))) != null ? _b2 : []; +var uniqueCount = (columnId, leafRows) => { + return new Set(leafRows.map((d5) => d5.getValue(columnId))).size; }; -var compareByField = (field, dir) => (_a2, _b2) => { - const a5 = dir ? _a2 : _b2; - const b4 = dir ? _b2 : _a2; - if (a5[field] < b4[field]) { - return -1; - } - if (a5[field] > b4[field]) { - return 1; - } - return 0; +var count = (_columnId, leafRows) => { + return leafRows.length; }; -var internalPluginLoaded = (pluginName, app2) => { - var _a2; - return (_a2 = app2.internalPlugins.plugins[pluginName]) == null ? void 0 : _a2._loaded; +var aggregationFns = { + sum, + min, + max, + extent, + mean, + median, + unique, + uniqueCount, + count }; -function selectElementContents(el) { - var range = document.createRange(); - range.selectNodeContents(el); - var sel = window.getSelection(); - sel.removeAllRanges(); - sel.addRange(range); -} - -// src/components/ContextView/FilterBar/FilterBar.tsx -var import_obsidian_dataview2 = __toESM(require_lib()); - -// src/components/ContextView/MDBContext.tsx -var import_obsidian7 = require("obsidian"); - -// src/schemas/mdb.ts -var fieldTypes = [ - { - type: "unknown", - label: "", - restricted: true - }, - { - type: "preview", - label: "Preview", - restricted: true - }, - { - type: "text", - label: "Text" - }, - { - type: "number", - label: "Number" - }, - { - type: "boolean", - label: "Yes/No" - }, - { - type: "date", - label: "Date" - }, - { - type: "option", - label: "Option", - multi: true, - multiType: "option-multi" +var Grouping = { + getDefaultColumnDef: () => { + return { + aggregatedCell: (props2) => { + var _a2, _b2; + var _toString; + return (_toString = (_b2 = (_a2 = props2.getValue()) == null ? void 0 : _a2.toString) == null ? void 0 : _b2.call(_a2)) != null ? _toString : null; + }, + aggregationFn: "auto" + }; }, - { - type: "file", - label: "File", - restricted: true + getInitialState: (state) => { + return { + grouping: [], + ...state + }; }, - { - type: "fileprop", - label: "File Property" + getDefaultOptions: (table) => { + return { + onGroupingChange: makeStateUpdater("grouping", table), + groupedColumnMode: "reorder" + }; }, - { - type: "link", - label: "Link", - multi: true, - multiType: "link-multi" - }, - { - type: "context", - label: "Context", - multi: true, - multiType: "context-multi" - }, - { - type: "tag", - label: "Tag", - multi: true, - multiType: "tag-multi" + createColumn: (column, table) => { + return { + toggleGrouping: () => { + table.setGrouping((old) => { + if (old == null ? void 0 : old.includes(column.id)) { + return old.filter((d5) => d5 !== column.id); + } + return [...old != null ? old : [], column.id]; + }); + }, + getCanGroup: () => { + var _ref, _ref2, _ref3, _column$columnDef$ena; + return (_ref = (_ref2 = (_ref3 = (_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) != null ? _ref3 : table.options.enableGrouping) != null ? _ref2 : true) != null ? _ref : !!column.accessorFn; + }, + getIsGrouped: () => { + var _a2; + return (_a2 = table.getState().grouping) == null ? void 0 : _a2.includes(column.id); + }, + getGroupedIndex: () => { + var _a2; + return (_a2 = table.getState().grouping) == null ? void 0 : _a2.indexOf(column.id); + }, + getToggleGroupingHandler: () => { + const canGroup = column.getCanGroup(); + return () => { + if (!canGroup) + return; + column.toggleGrouping(); + }; + }, + getAutoAggregationFn: () => { + const firstRow = table.getCoreRowModel().flatRows[0]; + const value = firstRow == null ? void 0 : firstRow.getValue(column.id); + if (typeof value === "number") { + return aggregationFns.sum; + } + if (Object.prototype.toString.call(value) === "[object Date]") { + return aggregationFns.extent; + } + }, + getAggregationFn: () => { + var _a2; + var _table$options$aggreg; + if (!column) { + throw new Error(); + } + return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === "auto" ? column.getAutoAggregationFn() : (_table$options$aggreg = (_a2 = table.options.aggregationFns) == null ? void 0 : _a2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn]; + } + }; }, - { - type: "image", - label: "Image", - multi: true, - multiType: "image-multi" - } -]; -var defaultFileDBSchema = { - id: "files", - name: "Files", - type: "db", - primary: "true" -}; -var defaultFileListSchema = { - id: "filesView", - name: "Files", - type: "list", - def: "files" -}; -var defaultFileTableSchema = { - id: "filesView", - name: "Files", - type: "table", - def: "files" -}; -var defaultFolderSchema = { - uniques: ["id"], - cols: ["id", "name", "type", "def", "predicate", "primary"], - rows: [defaultFileDBSchema, defaultFileListSchema] -}; -var defaultTagSchema = { - uniques: ["id"], - cols: ["id", "name", "type", "def", "predicate", "primary"], - rows: [defaultFileDBSchema, defaultFileTableSchema] -}; -var fieldSchema = { - uniques: ["name,schemaId"], - cols: ["name", "schemaId", "type", "value", "attrs", "hidden", "unique", "primary"] -}; -var defaultFolderFields = { - ...fieldSchema, - rows: [ - { - name: "_id", - schemaId: "files", - type: "id", - unique: "true", - hidden: "true" - }, - { - name: "_source", - schemaId: "files", - type: "source", - hidden: "true" - }, - { - name: "Preview", - schemaId: "files", - type: "preview" - }, - { - name: "File", - schemaId: "files", - type: "file", - primary: "true" - }, - { - name: "Created", - schemaId: "files", - type: "fileprop", - value: "ctime" - } - ] -}; -var defaultTableFields = [ - { - name: "Name", - schemaId: "", - type: "text" - } -]; -var defaultTagFields = { - ...fieldSchema, - rows: [ - { - name: "_id", - schemaId: "files", - type: "id", - unique: "true", - hidden: "true" - }, - { - name: "_source", - schemaId: "files", - type: "source", - hidden: "true" - }, - { - name: "_sourceId", - schemaId: "files", - type: "sourceid", - hidden: "true" - }, - { - name: "File", - schemaId: "files", - type: "file", - primary: "true" - } - ] -}; -var defaultFolderMDBTable = { - schema: defaultFileDBSchema, - cols: defaultFolderFields.rows, - rows: [] -}; -var defaultTagMDBTable = { - schema: defaultFileDBSchema, - cols: defaultTagFields.rows, - rows: [] -}; -var fieldsToTable = (fields, schemas) => { - return fields.filter((s5) => schemas.find((g4) => g4.id == s5.schemaId && g4.type == "db")).reduce((p3, c4) => { + createTable: (table) => { return { - ...p3, - ...p3[c4.schemaId] ? { - [c4.schemaId]: { - uniques: c4.unique == "true" ? [...p3[c4.schemaId].uniques, c4.name] : p3[c4.schemaId].uniques, - cols: [...p3[c4.schemaId].cols, c4.name], - rows: [] + setGrouping: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onGroupingChange) == null ? void 0 : _b2.call(_a2, updater); + }, + resetGrouping: (defaultState) => { + var _a2; + var _table$initialState$g; + table.setGrouping(defaultState ? [] : (_table$initialState$g = (_a2 = table.initialState) == null ? void 0 : _a2.grouping) != null ? _table$initialState$g : []); + }, + getPreGroupedRowModel: () => table.getFilteredRowModel(), + getGroupedRowModel: () => { + if (!table._getGroupedRowModel && table.options.getGroupedRowModel) { + table._getGroupedRowModel = table.options.getGroupedRowModel(table); } - } : { - [c4.schemaId]: { - uniques: c4.unique == "true" ? [c4.name] : [], - cols: [c4.name], - rows: [] + if (table.options.manualGrouping || !table._getGroupedRowModel) { + return table.getPreGroupedRowModel(); } + return table._getGroupedRowModel(); + } + }; + }, + createRow: (row) => { + return { + getIsGrouped: () => !!row.groupingColumnId, + _groupingValuesCache: {} + }; + }, + createCell: (cell, column, row, table) => { + return { + getIsGrouped: () => column.getIsGrouped() && column.id === row.groupingColumnId, + getIsPlaceholder: () => !cell.getIsGrouped() && column.getIsGrouped(), + getIsAggregated: () => { + var _a2; + return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_a2 = row.subRows) == null ? void 0 : _a2.length); } }; - }, {}); -}; -var defaultFolderTables = { - m_schema: defaultFolderSchema, - m_fields: defaultFolderFields, - ...fieldsToTable(defaultFolderFields.rows, defaultFolderSchema.rows) -}; -var defaultTagTables = { - m_schema: defaultTagSchema, - m_fields: defaultTagFields, - ...fieldsToTable(defaultTagFields.rows, defaultTagSchema.rows) -}; - -// src/dispatch/mdb.ts -var import_obsidian5 = require("obsidian"); - -// src/utils/contexts/contexts.ts -var import_obsidian3 = require("obsidian"); -var tagFromString = (tag) => { - let string = tag; - if (string.charAt(0) != "#") - string = "#" + string; - return string.replace(/\//g, "_"); -}; -var stringFromTag = (string) => { - if (string.charAt(0) == "#") { - return string.substring(1, string.length); - } - return string; -}; -var loadTags = (plugin) => { - var _a2; - const folder = plugin.settings.tagContextFolder == "" ? app.vault.getRoot() : getAbstractFileAtPath(app, getFolderPathFromString2(plugin.settings.tagContextFolder)); - return uniq([...Object.keys(app.metadataCache.getTags()), ...(_a2 = folder == null ? void 0 : folder.children.filter((f4) => f4 instanceof import_obsidian3.TFile && f4.extension == "mdb" && f4.name.charAt(0) == "#").map((f4) => fileNameToString(f4.name))) != null ? _a2 : []]); -}; -var tagContextFromTag = (plugin, tag) => { - return getFolderPathFromString2(plugin.settings.tagContextFolder) + "/" + tagFromString(tag) + ".mdb"; -}; -var folderContextFromFolder = (plugin, folder) => { - return folder + "/" + plugin.settings.folderContextFile + ".mdb"; -}; - -// src/utils/contexts/fm.ts -var import_lodash = __toESM(require_lodash()); -var import_obsidian4 = require("obsidian"); -var import_obsidian_dataview = __toESM(require_lib()); -var saveContextToFile = (file, cols, context) => { - if (app.fileManager.processFrontMatter) { - app.fileManager.processFrontMatter(file, (frontmatter) => { - Object.keys(context).filter((f4) => cols.find((c4) => c4.name == f4) && cols.find((c4) => c4.name == f4).hidden != "true" && !cols.find((c4) => c4.name == f4).type.contains("file") && context[f4]).forEach((c4) => { - frontmatter[c4] = context[c4]; - }); - }); - } -}; -var frontMatterForFile = (file) => { - let currentCache; - if (file instanceof import_obsidian4.TFile && app.metadataCache.getFileCache(file) !== null) { - currentCache = app.metadataCache.getFileCache(file); } - return currentCache == null ? void 0 : currentCache.frontmatter; }; -var frontMatterKeys = (fm) => { - return Object.keys(fm != null ? fm : {}).filter((f4) => f4 != "position"); -}; -var yamlTypeToMDBType = (YAMLtype) => { - switch (YAMLtype) { - case "duration": - return "text"; - break; - case "unknown": - return "text"; - break; +function orderColumns(leafColumns, grouping, groupedColumnMode) { + if (!(grouping == null ? void 0 : grouping.length) || !groupedColumnMode) { + return leafColumns; } - return YAMLtype; -}; -var detectYAMLType = (value, key2) => { - if (typeof value === "string") { - if (/\/\/(\S+?(?:jpe?g|png|gif|svg))/ig.test(value) || value.contains("unsplash")) { - return "image"; - } - if (/^\d{4}-\d{2}-\d{2}$/.test(value)) { - return "date"; - } - if (key2 == "tag" || key2 == "tags") { - return "tag"; - } - return "text"; - } else if (typeof value === "number") { - return "number"; - } else if (typeof value === "boolean") { - return "boolean"; - } else if (!value) { - return "unknown"; - } else if (Array.isArray(value)) { - if (key2 == "tag" || key2 == "tags") { - return "tag-multi"; - } - const types = uniq(value.map((f4) => detectYAMLType(f4, key2))); - if (types.length == 1 && types[0] == "link") { - return "link-multi"; - } - return "option-multi"; - } else if (value.isLuxonDateTime) { - return "date"; - } else if (value.isLuxonDuration) { - return "duration"; - } else if (value.type == "file") { - return "link"; + const nonGroupingColumns = leafColumns.filter((col) => !grouping.includes(col.id)); + if (groupedColumnMode === "remove") { + return nonGroupingColumns; } - return "text"; -}; -var mergeTableData = (mdb, yamlmdb, types) => { - return { - ...mdb, - cols: [...mdb.cols, ...yamlmdb.cols.filter((f4) => !mdb.cols.find((g4) => g4.name.toLowerCase() == f4.toLowerCase())).map((f4) => ({ name: f4, schemaId: mdb.schema.id, type: yamlTypeToMDBType(types[f4]) }))].filter(onlyUniqueProp("name")), - rows: mdb.rows.map((r3) => { - const fmRow = yamlmdb.rows.find((f4) => f4.File == r3.File); - if (fmRow) { - return { - ...r3, - ...fmRow - }; - } - return r3; - }) - }; -}; -var guestimateTypes = (_files, dv) => { - const dataViewAPI = (0, import_obsidian_dataview.getAPI)(); - const typesArray = _files.map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4).map((k5) => { - const fm = dv ? dataViewAPI.page(k5.path) : frontMatterForFile(k5); - const fmKeys = dv ? Object.keys(fm != null ? fm : {}).filter((f4, i4, self2) => !self2.find((g4, j4) => g4.toLowerCase().replace(/\s/g, "-") == f4.toLowerCase().replace(/\s/g, "-") && i4 > j4) ? true : false).filter((f4) => f4 != "file") : frontMatterKeys(fm); - return fmKeys.reduce((pk, ck) => ({ ...pk, [ck]: detectYAMLType(fm[ck], ck) }), {}); - }); - const types = typesArray.reduce((p3, c4) => { - const newSet = Object.keys(c4).reduce((pk, ck) => { - var _a2; - return { ...pk, [ck]: [...(_a2 = p3 == null ? void 0 : p3[ck]) != null ? _a2 : [], c4[ck]] }; - }, { ...p3 }); - return newSet; - }, {}); - const guessType = (ts) => { - return import_lodash.default.head((0, import_lodash.default)(ts).countBy().entries().maxBy(import_lodash.default.last)); - }; - const guessedTypes = Object.keys(types).reduce((p3, c4) => { - return { ...p3, [c4]: guessType(types[c4]) }; - }, {}); - return guessedTypes; -}; -var saveFrontmatterValue = (path, key2, value, type, forceSave) => { - const afile = getAbstractFileAtPath(app, path); - if (afile && app.fileManager.processFrontMatter) { - app.fileManager.processFrontMatter(afile, (frontmatter) => { - if (key2 in frontmatter || forceSave) { - if (type == "number") { - frontmatter[key2] = parseInt(value); - } else if (type == "boolean") - frontmatter[key2] = value == "true"; - else if (type.contains("multi")) { - frontmatter[key2] = splitString(value); + const groupingColumns = grouping.map((g4) => leafColumns.find((col) => col.id === g4)).filter(Boolean); + return [...groupingColumns, ...nonGroupingColumns]; +} +var Ordering = { + getInitialState: (state) => { + return { + columnOrder: [], + ...state + }; + }, + getDefaultOptions: (table) => { + return { + onColumnOrderChange: makeStateUpdater("columnOrder", table) + }; + }, + createTable: (table) => { + return { + setColumnOrder: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onColumnOrderChange) == null ? void 0 : _b2.call(_a2, updater); + }, + resetColumnOrder: (defaultState) => { + var _table$initialState$c; + table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []); + }, + _getOrderColumnsFn: memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => (columns) => { + let orderedColumns = []; + if (!(columnOrder == null ? void 0 : columnOrder.length)) { + orderedColumns = columns; } else { - frontmatter[key2] = value; + const columnOrderCopy = [...columnOrder]; + const columnsCopy = [...columns]; + while (columnsCopy.length && columnOrderCopy.length) { + const targetColumnId = columnOrderCopy.shift(); + const foundIndex = columnsCopy.findIndex((d5) => d5.id === targetColumnId); + if (foundIndex > -1) { + orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]); + } + } + orderedColumns = [...orderedColumns, ...columnsCopy]; } - } - }); + return orderColumns(orderedColumns, grouping, groupedColumnMode); + }, { + key: "getOrderColumnsFn" + }) + }; } }; -var parseFrontMatter = (field, value, dv) => { - const YAMLtype = detectYAMLType(value, field); - switch (YAMLtype) { - case "number": - return value.toString(); - break; - case "boolean": - return value ? "true" : "false"; - break; - case "date": - if (!dv) { - return value; - } else { - return new Date(value.ts).toDateString(); +var defaultPageIndex = 0; +var defaultPageSize = 10; +var getDefaultPaginationState = () => ({ + pageIndex: defaultPageIndex, + pageSize: defaultPageSize +}); +var Pagination = { + getInitialState: (state) => { + return { + ...state, + pagination: { + ...getDefaultPaginationState(), + ...state == null ? void 0 : state.pagination } - break; - case "duration": - return Object.keys(value.values).reduce((p3, c4) => [...p3, ...value.values[c4] > 0 ? [value.values[c4] + " " + c4] : []], []).join(", "); - break; - case "option-multi": - case "link-multi": - case "tag-multi": - return value.join(","); - break; - case "link": - return value.path; - break; - case "text": - case "tag": - case "image": - return value; - break; - } - return ""; -}; - -// src/dispatch/mdb.ts -var dispatchDatabaseFileChanged = (dbPath, tag) => { - let evt = new CustomEvent(eventTypes.mdbChange, { detail: { dbPath, tag } }); - window.dispatchEvent(evt); -}; -var processFolderDB = async (plugin, folderPath, processor, fallback) => { - let tags = []; - const dbPath = folderContextFromFolder(plugin, folderPath); - const dbFileExists = getAbstractFileAtPath(app, dbPath); - if (dbFileExists) { - const folderDB = await getMDBTable(plugin, "files", dbPath, false); - if (folderDB) { - tags.push(...folderDB.schema.def.split("&")); - const newDB = await processor(folderDB, dbPath); - const promises = tags.map((tag) => { - const tagdbPath = tagContextFromTag(plugin, tag); - const tagFileExists = getAbstractFileAtPath(app, tagdbPath); - if (tagFileExists) { - return consolidateRowsToTag(plugin, tagdbPath, "files", dbPath, newDB.rows).then((f4) => { + }; + }, + getDefaultOptions: (table) => { + return { + onPaginationChange: makeStateUpdater("pagination", table) + }; + }, + createTable: (table) => { + let registered = false; + let queued = false; + return { + _autoResetPageIndex: () => { + var _ref, _table$options$autoRe; + if (!registered) { + table._queue(() => { + registered = true; }); + return; } - }); - return Promise.all(promises); - } else if (fallback) { - await fallback(); - } - } else if (fallback) { - await fallback(); - } -}; -var saveDB = async (plugin, dbPath, newTable) => { - return saveMDBToPath(plugin, dbPath, newTable); -}; -var renameRow = (folder, filePath, toFilePath) => { - return { - ...folder, - rows: folder.rows.map((f4) => f4.File == filePath && f4._source == "folder" ? { ...f4, "File": toFilePath } : f4) - }; -}; -var removeRows = (folder, source) => { - return { - ...folder, - rows: folder.rows.filter((f4) => f4._source != source) - }; -}; -var removeRow = (folder, filePath) => { - return { - ...folder, - rows: folder.rows.filter((f4) => f4.File != filePath && f4._source == "folder") - }; -}; -var insertRow = (folder, row, parent) => { - const existingRow = folder.rows.find((f4) => f4.File == row.File || parent + "/" + f4.File + ".md" == row.File); - if (existingRow) { - return { - ...folder, - rows: folder.rows.map((f4) => f4.File == existingRow.File ? { ...f4, File: row.File, _source: "folder", ...row } : f4) - }; - } - return { - ...folder, - rows: [...folder.rows, row] - }; -}; -var insertRows = (folder, rows) => { - const newRows = rows.filter((row) => { - var _a2; - return ((_a2 = row.File) == null ? void 0 : _a2.length) > 0 && !folder.rows.some((f4) => f4.File == row.File && f4._source == "folder"); - }); - return { - ...folder, - rows: [...folder.rows, ...newRows] - }; -}; -var saveContextToFrontmatter = (file, cols, context) => { - const afile = getAbstractFileAtPath(app, file); - if (afile && afile instanceof import_obsidian5.TFile) - saveContextToFile(afile, cols, context); -}; -var removeSourceFromTag = async (plugin, tag, source) => { - const dbPath = tagContextFromTag(plugin, tag); - const tagFileExists = getAbstractFileAtPath(app, dbPath); - if (tagFileExists) { - const tagDB = await getMDBTable(plugin, "files", dbPath, true); - const files = tagDB.rows.filter((f4) => f4._source == source); - files.forEach( - (row) => saveContextToFrontmatter(row["File"], tagDB.cols, tagDB.cols.reduce((p3, c4) => ({ ...p3, [c4.name]: row[c4.name] }), {})) - ); - await saveDB(plugin, dbPath, removeRows(tagDB, source)); - } -}; -var initiateContextIfNotExists = async (plugin, tag) => { - const dbPath = tagContextFromTag(plugin, tag); - const tagFileExists = getAbstractFileAtPath(app, dbPath); - if (tagFileExists) - return false; - return createDefaultDB(plugin, dbPath, true); -}; -var insertContextItems = async (plugin, newPaths, t4) => { - const saveNewContextRows = async (tag, path) => { - const newRow = newPaths.map((newPath) => ({ "File": newPath })); - await saveDB(plugin, path, insertRows(tag, newRow)); - }; - const dbPath = tagContextFromTag(plugin, t4); - const tagFileExists = getAbstractFileAtPath(app, dbPath); - if (!tagFileExists) { - await createDefaultDB(plugin, dbPath, true); - } - await getMDBTable(plugin, "files", dbPath, true).then((tagDB) => saveNewContextRows(tagDB, dbPath).then((f4) => { - })); -}; -var fileToFM = (file, cols) => { - const fm = frontMatterForFile(file); - const fmKeys = frontMatterKeys(fm).filter((f4) => cols.some((g4) => f4 == g4)); - return fmKeys.reduce((p3, c4) => ({ ...p3, [c4]: parseFrontMatter(c4, fm[c4], false) }), {}); -}; -var onMetadataChange = async (plugin, file) => { - const folderPath = getFolderPathFromString2(file.path); - let tags = []; - const dbPath = folderContextFromFolder(plugin, folderPath); - const dbFileExists = getAbstractFileAtPath(app, dbPath); - if (dbFileExists) { - const folderDB = await getMDBTable(plugin, "files", dbPath, false); - if (folderDB) { - tags.push(...folderDB.schema.def.split("&")); - const newDB = { - ...folderDB, - rows: folderDB.rows.map((f4) => f4.File == file.path && f4._source == "folder" ? { ...f4, ...fileToFM(file, folderDB.cols.map((f5) => f5.name)) } : f4) - }; - await saveDB(plugin, dbPath, newDB); - const promises = tags.map((tag) => { - const tagdbPath = tagContextFromTag(plugin, tag); - const tagFileExists = getAbstractFileAtPath(app, tagdbPath); - if (tagFileExists) { - return getMDBTable(plugin, "files", tagdbPath, false).then((tagDB) => { - const newDB2 = { - ...tagDB, - rows: tagDB.rows.map((f4) => f4.File == file.path && f4._source == dbPath ? { ...f4, ...fileToFM(file, tagDB.cols.map((f5) => f5.name)) } : f4) - }; - return saveDB(plugin, tagdbPath, newDB2); + if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) { + if (queued) + return; + queued = true; + table._queue(() => { + table.resetPageIndex(); + queued = false; }); } - }); - await Promise.all(promises); - } - } -}; -var onFileCreated = async (plugin, newPath) => { - const newFolderPath = getFolderPathFromString2(newPath); - await processFolderDB(plugin, newFolderPath, async (folder, path) => { - const amendedFolderDB = insertRow(folder, newRowByDBRow({ File: newPath, _source: "folder" }), newFolderPath); - await saveDB(plugin, path, amendedFolderDB); - return amendedFolderDB; - }); -}; -var onFileChanged = async (plugin, oldPath, newPath) => { - const oldFolderPath = getFolderPathFromString2(oldPath); - const newFolderPath = getFolderPathFromString2(newPath); - if (oldFolderPath == newFolderPath) { - await processFolderDB(plugin, oldFolderPath, async (folder, path) => { - const amendedFolderDB = renameRow(folder, oldPath, newPath); - await saveDB(plugin, path, amendedFolderDB); - return amendedFolderDB; - }); - } else { - await processFolderDB(plugin, oldFolderPath, async (folder, path) => { - const amendedFolderDB = removeRow(folder, oldPath); - await saveDB(plugin, path, amendedFolderDB); - const dbPath = folderContextFromFolder(plugin, newFolderPath); - const fromDBRow = folder.rows.find((f4) => f4.File == oldPath); - const toDBFileExists = getAbstractFileAtPath(app, dbPath); - if (toDBFileExists) { - const toFolderDB = await getMDBTable(plugin, "files", dbPath, false); - if (toFolderDB) { - const [newDBCols, fmDBCols] = Object.keys(fromDBRow).reduce((p3, c4) => fromDBRow[c4].length == 0 ? p3 : toFolderDB.cols.find((f4) => f4.name == fromDBRow[c4]) ? [[...p3[0], c4], p3[1]] : [p3[0], [...p3[1], c4]], [[], []]); - const newRow = { ...newDBCols.reduce((p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), {}), "File": newPath }; - await saveDB(plugin, dbPath, insertRow(toFolderDB, newRowByDBRow(newRow), newFolderPath)); - saveContextToFrontmatter(newPath, folder.cols, fmDBCols.reduce((p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), {})); + }, + setPagination: (updater) => { + var _a2, _b2; + const safeUpdater = (old) => { + let newState = functionalUpdate(updater, old); + return newState; + }; + return (_b2 = (_a2 = table.options).onPaginationChange) == null ? void 0 : _b2.call(_a2, safeUpdater); + }, + resetPagination: (defaultState) => { + var _table$initialState$p; + table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState()); + }, + setPageIndex: (updater) => { + table.setPagination((old) => { + let pageIndex = functionalUpdate(updater, old.pageIndex); + const maxPageIndex = typeof table.options.pageCount === "undefined" || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1; + pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex)); + return { + ...old, + pageIndex + }; + }); + }, + resetPageIndex: (defaultState) => { + var _a2, _b2; + var _table$initialState$p2; + table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_b2 = (_a2 = table.initialState) == null ? void 0 : _a2.pagination) == null ? void 0 : _b2.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex); + }, + resetPageSize: (defaultState) => { + var _a2, _b2; + var _table$initialState$p3; + table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_b2 = (_a2 = table.initialState) == null ? void 0 : _a2.pagination) == null ? void 0 : _b2.pageSize) != null ? _table$initialState$p3 : defaultPageSize); + }, + setPageSize: (updater) => { + table.setPagination((old) => { + const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize)); + const topRowIndex = old.pageSize * old.pageIndex; + const pageIndex = Math.floor(topRowIndex / pageSize); + return { + ...old, + pageIndex, + pageSize + }; + }); + }, + setPageCount: (updater) => table.setPagination((old) => { + var _table$options$pageCo; + let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1); + if (typeof newPageCount === "number") { + newPageCount = Math.max(-1, newPageCount); } - } else { - saveContextToFrontmatter(newPath, folder.cols, Object.keys(fromDBRow).reduce((p3, c4) => ({ ...p3, [c4]: fromDBRow[c4] }), {})); - } - return amendedFolderDB; - }, async () => { - const dbPath = folderContextFromFolder(plugin, newFolderPath); - const toDBFileExists = getAbstractFileAtPath(app, dbPath); - if (toDBFileExists) { - const toFolderDB = await getMDBTable(plugin, "files", dbPath, false); + return { + ...old, + pageCount: newPageCount + }; + }), + getPageOptions: memo(() => [table.getPageCount()], (pageCount) => { + let pageOptions = []; + if (pageCount && pageCount > 0) { + pageOptions = [...new Array(pageCount)].fill(null).map((_4, i4) => i4); + } + return pageOptions; + }, { + key: "getPageOptions", + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; + } + }), + getCanPreviousPage: () => table.getState().pagination.pageIndex > 0, + getCanNextPage: () => { + const { + pageIndex + } = table.getState().pagination; + const pageCount = table.getPageCount(); + if (pageCount === -1) { + return true; + } + if (pageCount === 0) { + return false; + } + return pageIndex < pageCount - 1; + }, + previousPage: () => { + return table.setPageIndex((old) => old - 1); + }, + nextPage: () => { + return table.setPageIndex((old) => { + return old + 1; + }); + }, + getPrePaginationRowModel: () => table.getExpandedRowModel(), + getPaginationRowModel: () => { + if (!table._getPaginationRowModel && table.options.getPaginationRowModel) { + table._getPaginationRowModel = table.options.getPaginationRowModel(table); + } + if (table.options.manualPagination || !table._getPaginationRowModel) { + return table.getPrePaginationRowModel(); + } + return table._getPaginationRowModel(); + }, + getPageCount: () => { + var _table$options$pageCo2; + return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getPrePaginationRowModel().rows.length / table.getState().pagination.pageSize); } - }); - } -}; -var onFileDeleted = async (plugin, oldPath) => { - const oldFolderPath = getFolderPathFromString2(oldPath); - await processFolderDB(plugin, oldFolderPath, async (folder, path) => { - const amendedFolderDB = removeRow(folder, oldPath); - await saveDB(plugin, path, amendedFolderDB); - return amendedFolderDB; - }); -}; -var onFolderChanged = async (plugin, oldPath, newPath) => { - await processFolderDB(plugin, newPath, async (folder, path) => { - const newDB = { - ...folder, - rows: folder.rows.map((f4) => getFolderPathFromString2(f4["File"]) == oldPath ? { ...f4, "File": f4["File"].replace(oldPath, newPath) } : f4) }; - await saveDB(plugin, path, newDB); - return newDB; - }); -}; -var onFolderDeleted = async (oldPath) => { -}; - -// src/utils/db/db.ts -var import_obsidian6 = require("obsidian"); - -// src/utils/sanitize.ts -var sanitizeTableName = (name) => { - return name == null ? void 0 : name.replace(/[^a-z0-9+]+/gi, ""); -}; -var sanitizeColumnName = (name) => { - return name == null ? void 0 : name.replace(/'/g, `''`).replace(/[^\w ]/g, ""); -}; -var sanitizeSQLStatement = (name) => { - return name == null ? void 0 : name.replace(/'/g, `''`); -}; - -// src/utils/db/db.ts -var getDBFile = async (path) => { - if (!await app.vault.adapter.exists((0, import_obsidian6.normalizePath)(path))) { - return null; - } - const file = await app.vault.adapter.readBinary((0, import_obsidian6.normalizePath)(path)); - return file; -}; -var getDB = async (sqlJS, path) => { - const buf = await getDBFile(path); - if (buf) { - return new sqlJS.Database(new Uint8Array(buf)); - } - return new sqlJS.Database(); -}; -var saveDBAndKeepAlive = (db, path) => { - const results = saveDBFile(path, db.export().buffer); - return results; -}; -var saveDBFile = async (path, binary) => { - const file = app.vault.adapter.writeBinary((0, import_obsidian6.normalizePath)(path), binary); - return file; -}; -var dbResultsToDBTables = (res) => { - return res.reduce((p3, c4, i4) => [ - ...p3, - { - cols: c4.columns, - rows: c4 ? c4.values.map((r3) => c4.columns.reduce((prev, curr, index) => ({ ...prev, [curr]: r3[index] }), {})) : [] - } - ], []); -}; -var selectDB = (db, table, condition, fields) => { - const fieldsStr = fields != null ? fields : "*"; - const sqlstr = condition ? `SELECT ${fieldsStr} FROM "${table}" WHERE ${condition};` : `SELECT ${fieldsStr} FROM ${table};`; - let tables; - try { - tables = dbResultsToDBTables(db.exec(sqlstr)); - } catch (e4) { - return null; - } - if (tables.length == 1) - return tables[0]; - return null; -}; -var updateDB = (db, tables, updateCol, updateRef) => { - const sqlstr = Object.keys(tables).map((t4) => { - const tableFields = tables[t4].cols.filter((f4) => f4 != updateRef); - const rowsQuery = tables[t4].rows.reduce((prev, curr) => { - var _a2; - return `${prev} UPDATE "${t4}" SET ${tableFields.map((c4) => { - var _a3; - return `${c4}='${(_a3 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a3 : ""}'`; - }).join(", ")} WHERE ${updateCol}='${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[updateRef])) != null ? _a2 : ""}';`; - }, ""); - return rowsQuery; - }).join("; "); - db.exec(sqlstr); -}; -var execQuery = (db, sqlstr) => { - db.exec(sqlstr); -}; -var deleteFromDB = (db, table, condition) => { - const sqlstr = `DELETE FROM "${table}" WHERE ${condition};`; - db.exec(sqlstr); -}; -var dropTable = (db, table) => { - const sqlstr = `DROP TABLE IF EXISTS "${table}";`; - db.exec(sqlstr); -}; -var insertIntoDB = (db, tables) => { - const sqlstr = Object.keys(tables).map((t4) => { - const tableFields = tables[t4].cols; - const rowsQuery = tables[t4].rows.reduce((prev, curr) => { - return `${prev} INSERT INTO "${t4}" VALUES (${tableFields.map((c4) => { - var _a2; - return `'${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a2 : ""}'`; - }).join(", ")});`; - }, ""); - return rowsQuery; - }).join("; "); - db.exec(`BEGIN TRANSACTION; ${sqlstr} COMMIT;`); -}; -var replaceDB = (db, tables) => { - const sqlstr = Object.keys(tables).map((t4) => { - const tableFields = tables[t4].cols; - const fieldQuery = uniq(tableFields).map((f4) => `'${sanitizeSQLStatement(f4)}' char`).join(", "); - const rowsQuery = tables[t4].rows.reduce((prev, curr) => { - return `${prev} REPLACE INTO "${t4}" VALUES (${tableFields.map((c4) => { - var _a2; - return `'${(_a2 = sanitizeSQLStatement(curr == null ? void 0 : curr[c4])) != null ? _a2 : ""}'`; - }).join(", ")});`; - }, ""); - const idxQuery = tables[t4].uniques.filter((f4) => f4).reduce((p3, c4) => { - return `${p3} CREATE UNIQUE INDEX IF NOT EXISTS idx_${t4}_${c4.replace(/,/g, "_")} ON ${t4}(${c4});`; - }, ""); - return `DROP TABLE IF EXISTS "${t4}"; CREATE TABLE IF NOT EXISTS "${t4}" (${fieldQuery}); ${idxQuery} BEGIN TRANSACTION; ${rowsQuery} COMMIT;`; - }).join("; "); - db.exec(sqlstr); -}; -var saveDBToPath = async (plugin, path, tables) => { - const sqlJS = await plugin.sqlJS(); - let db = await getDB(sqlJS, path); - replaceDB(db, tables); - await saveDBFile(path, db.export().buffer); - dispatchDatabaseFileChanged(path); - db.close(); - return true; -}; - -// src/utils/uuid.js -function genId2() { - return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace( - /[018]/g, - (c4) => (c4 ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c4 / 4).toString(16) - ); -} - -// src/utils/contexts/mdb.ts -var dbTableToMDBTable = (table, schema, fields) => { - var _a2; - return { - schema, - cols: fields, - rows: (_a2 = table == null ? void 0 : table.rows) != null ? _a2 : [] - }; -}; -var updateFieldsToSchema = (fields, tag) => { - if (tag) { - return [...fields, ...defaultTagFields.rows.filter((f4) => !fields.some((g4) => g4.name == f4.name && g4.schemaId == f4.schemaId))]; } - return [...fields, ...defaultFolderFields.rows.filter((f4) => !fields.some((g4) => g4.name == f4.name && g4.schemaId == f4.schemaId))]; }; -var getMDBTable = async (plugin, table, path, tag) => { - const sqlJS = await plugin.sqlJS(); - const buf = await getDBFile(path); - if (!buf) { - return null; - } - const db = new sqlJS.Database(new Uint8Array(buf)); - await sanitizeTableSchema(plugin, db, path, tag); - let fieldsTables; - let schema; - try { - fieldsTables = dbResultsToDBTables(db.exec(`SELECT * FROM m_fields WHERE schemaId = '${table}'`)); - schema = dbResultsToDBTables(db.exec(`SELECT * FROM m_schema WHERE id = '${table}'`))[0].rows[0]; - } catch (e4) { - return null; - } - if (fieldsTables.length == 0) { +var getDefaultPinningState = () => ({ + left: [], + right: [] +}); +var Pinning = { + getInitialState: (state) => { return { - schema, - cols: [], - rows: [] + columnPinning: getDefaultPinningState(), + ...state }; - } - const fields = fieldsTables[0].rows.filter((f4) => f4.name.length > 0); - const dbTable = dbResultsToDBTables(db.exec(`SELECT ${fields.reduce((p3, c4) => [...p3, `"${c4.name}"`], []).join(", ")} FROM "${table}"`)); - db.close(); - return dbTableToMDBTable(dbTable[0], schema, schema.primary ? updateFieldsToSchema(fields, tag) : fields); -}; -var deleteMDBTable = async (plugin, path, mdb) => { - const sqlJS = await plugin.sqlJS(); - const buf = await getDBFile(path); - if (!buf) { - return false; - } - const db = new sqlJS.Database(new Uint8Array(buf)); - deleteFromDB(db, "m_schema", `id = '${sanitizeSQLStatement(mdb)}'`); - deleteFromDB(db, "m_schema", `def = '${sanitizeSQLStatement(mdb)}'`); - deleteFromDB(db, "m_fields", `schemaId = '${sanitizeSQLStatement(mdb)}'`); - dropTable(db, mdb); - await saveDBFile(path, db.export().buffer); - db.close(); - return true; -}; -var getMDBTableSchemas = async (plugin, path, tag) => { - const sqlJS = await plugin.sqlJS(); - const buf = await getDBFile(path); - if (!buf) { - return null; - } - const db = new sqlJS.Database(new Uint8Array(buf)); - await sanitizeTableSchema(plugin, db, path, tag); - const tables = db.exec(`SELECT * FROM m_schema`); - db.close(); - return tables[0].values.map((f4) => { - const [id2, name, type, def, predicate, primary] = f4; - return { id: id2, name, type, def, predicate, primary }; - }); -}; -var saveMDBToPath = async (plugin, path, mdb) => { - var _a2, _b2; - const sqlJS = await plugin.sqlJS(); - const buf = await getDBFile(path); - if (!buf) { - return null; - } - const db = new sqlJS.Database(new Uint8Array(buf)); - const fieldsTables = dbResultsToDBTables(db.exec(`SELECT * FROM m_fields WHERE schemaId != '${mdb.schema.id}'`)); - const tables = { - m_fields: { - uniques: fieldSchema.uniques, - cols: fieldSchema.cols, - rows: [...(_b2 = (_a2 = fieldsTables[0]) == null ? void 0 : _a2.rows) != null ? _b2 : [], ...mdb.cols] - }, - [mdb.schema.id]: { - uniques: mdb.cols.filter((c4) => c4.unique == "true").map((c4) => c4.name), - cols: mdb.cols.map((c4) => c4.name), - rows: mdb.rows - } - }; - return saveDBToPath(plugin, path, tables); -}; -var optionValuesForColumn = (column, table) => { - var _a2; - return uniq((_a2 = table == null ? void 0 : table.rows.reduce((p3, c4) => { - return [...p3, ...splitString(c4[column])]; - }, [])) != null ? _a2 : []); -}; -var createDefaultDB = async (plugin, path, tag) => { - const sqlJS = await plugin.sqlJS(); - const table = tag ? defaultTagTables : defaultFolderTables; - return saveDBToPath(plugin, path, table); -}; -var sanitizeTableSchema = async (plugin, db, path, tag) => { - const sqlJS = await plugin.sqlJS(); - const tableRes = db.exec(`SELECT name FROM sqlite_master WHERE type='table';`); - if (!tableRes[0] || !tableRes[0].values.some((f4) => f4[0] == "m_schema") || !tableRes[0].values.some((f4) => f4[0] == "m_fields") || !tableRes[0].values.some((f4) => f4[0] == "files")) { - await createDefaultDB(plugin, path, tag); - } -}; -var newRowByDBRow = (row) => ({ - _id: genId2(), - ...row -}); -var rowWithID = (row, tag) => { - return row._id && row._id.length > 0 ? row : { - ...newRowByDBRow({ ...row, _source: tag ? "tag" : "folder" }) - }; -}; -var createNewRow = (mdb, row) => { - return { - ...mdb, - rows: [...mdb.rows, newRowByDBRow(row)] - }; -}; -var consolidateFilesToTable = async (plugin, path, table, files, tag) => { - const sqlJS = await plugin.sqlJS(); - const isTag = tag ? true : false; - let db = new sqlJS.Database(); - ; - if (getAbstractFileAtPath(app, path)) { - const buf = await getDBFile(path); - db = new sqlJS.Database(new Uint8Array(buf)); - } else { - await createDefaultDB(plugin, path, false); - } - const mdbTable = await getMDBTable(plugin, table, path, isTag); - const missingFiles = files.filter((f4) => !mdbTable.rows.some((g4) => g4.File == f4 && g4._source != "")).map((f4) => ({ File: f4 })); - const mergeDuplicates = (rows, tag2) => { - const mergeFields = (row, row2) => { - return { ...row, ...row2 }; + }, + getDefaultOptions: (table) => { + return { + onColumnPinningChange: makeStateUpdater("columnPinning", table) }; - return rows.reduce((p3, c4) => { - const findIndex2 = p3.findIndex((f4) => f4._source != "" && f4.File == c4.File); - if (findIndex2 != -1) { - return p3.map((f4, i4) => i4 == findIndex2 ? mergeFields(f4, c4) : f4); - } - return [...p3, c4]; - }, []); - }; - let linkedFolderContexts = [""]; - if (tag) { - const contexts = uniq(mdbTable.rows.map((f4) => f4._source).filter((f4) => f4 != "" && f4 != "tag")); - const promises = contexts.map((context) => getMDBTable(plugin, "files", context, false).then((f4) => [f4, context])); - const results = await Promise.all(promises); - linkedFolderContexts.push(...results.filter(([f4, g4]) => { - var _a2, _b2; - return (_b2 = (_a2 = f4 == null ? void 0 : f4.schema) == null ? void 0 : _a2.def) == null ? void 0 : _b2.split("&").some((h5) => h5 == tag); - }).map(([f4, g4]) => g4)); - } - const nonLinkedRows = mdbTable.rows.filter((f4) => linkedFolderContexts.some((g4) => g4 == f4._source) && !missingFiles.some((g4) => f4.File == g4.File)); - const newRows = [...nonLinkedRows, ...[...mergeDuplicates(mdbTable.rows.filter((f4) => (f4._source != "" || missingFiles.some((g4) => f4.File == g4.File)) && files.some((g4) => g4 == f4.File)), isTag), ...missingFiles].map((f4) => rowWithID(f4, isTag))]; - const newMDBTable = { - ...mdbTable, - cols: [...(isTag ? defaultTagFields : defaultFolderFields).rows, ...mdbTable.cols].filter(onlyUniqueProp("name")), - rows: newRows - }; - await saveMDBToPath(plugin, path, newMDBTable); - return newMDBTable; -}; -var consolidateRowsToTag = async (plugin, path, table, source, rows) => { - const sqlJS = await plugin.sqlJS(); - let db = new sqlJS.Database(); - ; - if (getAbstractFileAtPath(app, path)) { - const buf = await getDBFile(path); - db = new sqlJS.Database(new Uint8Array(buf)); - } else { - await createDefaultDB(plugin, path, true); - } - const mdbTable = await getMDBTable(plugin, table, path, true); - const prevRows = mdbTable.rows.map((f4) => { - if (f4._source != source) { - return f4; - } - const row = rows.find((g4) => g4._id == f4._sourceId); - return row ? { ...f4, File: row["File"] } : f4; - }).filter((f4) => f4._source != source || rows.some((g4) => g4._id == f4._sourceId)); - const missingRows = rows.filter((f4) => !mdbTable.rows.some((g4) => g4._source == source && g4._sourceId == f4._id)).map((f4) => newRowByDBRow({ File: f4.File, _source: source, _sourceId: f4._id })); - const newRows = [...prevRows, ...missingRows]; - const newMDBTable = { - ...mdbTable, - cols: [...defaultTagFields.rows, ...mdbTable.cols].filter(onlyUniqueProp("name")), - rows: newRows - }; - await saveMDBToPath(plugin, path, newMDBTable); - return newMDBTable; -}; - -// src/components/ContextView/MDBContext.tsx -var MDBContext = B({ - tables: [], - cols: [], - sortedColumns: [], - data: [], - filteredData: [], - tableData: null, - contextTable: {}, - selectedRows: [], - selectRows: () => { - }, - setContextTable: () => { - }, - predicate: defaultPredicate, - savePredicate: () => { - }, - saveDB: () => null, - saveContextDB: () => null, - schema: null, - dbSchema: null, - setSchema: () => { - }, - setDBSchema: () => { - }, - dbPath: null, - isFolderContext: false, - folderPath: "", - saveColumn: () => false, - newColumn: () => false, - delColumn: () => { - }, - saveSchema: () => null, - deleteSchema: () => null, - tagContexts: [], - dbFileExists: false, - searchString: "", - setSearchString: () => { }, - loadContextFields: () => { - } -}); -var MDBProvider = (props2) => { - var _a2, _b2, _c2; - const { dbPath } = props2; - const [dbFileExists, setDBFileExists] = p2(false); - const [schema, setSchema] = p2(null); - const [searchString, setSearchString] = p2(null); - const [schemaTable, setSchemaTable] = p2(null); - const tables = (_a2 = schemaTable == null ? void 0 : schemaTable.rows) != null ? _a2 : []; - const [tableData, setTableData] = p2(null); - const [dbSchema, setDBSchema] = p2(null); - const [contextTable, setContextTable] = p2({}); - const [predicate, setPredicate] = p2(defaultPredicate); - const [selectedRows, setSelectedRows] = p2([]); - const defaultSchema = props2.tag ? defaultTagSchema : defaultFolderSchema; - const folderPath = (_c2 = (_b2 = props2.folder) != null ? _b2 : props2.tag) != null ? _c2 : ""; - const isFolderContext = props2.folder ? true : false; - const tagContexts = F(() => { - var _a3, _b3, _c3; - return ((_a3 = dbSchema == null ? void 0 : dbSchema.def) == null ? void 0 : _a3.length) > 0 ? (_c3 = (_b3 = dbSchema == null ? void 0 : dbSchema.def) == null ? void 0 : _b3.split("&")) != null ? _c3 : [] : []; - }, [dbSchema]); - const cols = F( - () => { - var _a3; - return [ - ...(_a3 = tableData == null ? void 0 : tableData.cols.map((f4) => ({ ...f4, table: "" }))) != null ? _a3 : [], - ...tagContexts.reduce((p3, c4) => { - var _a4, _b3; - return [...p3, ...(_b3 = (_a4 = contextTable[c4]) == null ? void 0 : _a4.cols.filter((f4) => f4.name != "File" && f4.type != "fileprop").map((f4) => ({ ...f4, table: c4 }))) != null ? _b3 : []]; - }, []) - ]; - }, - [tableData, schema, contextTable, tagContexts] - ); - const data = F(() => { - var _a3; - return (_a3 = tableData == null ? void 0 : tableData.rows.map((r3, index) => ({ - "_index": index.toString(), - ...dbSchema.primary ? { ...appendFileMetadataForRow(r3, tableData.cols) } : r3, - ...tagContexts.reduce((p3, c4) => { - var _a4, _b3, _c3, _d2; - const contextRowIndexByFile = (_b3 = (_a4 = contextTable[c4]) == null ? void 0 : _a4.rows.findIndex((f4) => f4.File == r3.File)) != null ? _b3 : -1; - const contextRowsByFile = (_d2 = (_c3 = contextTable[c4]) == null ? void 0 : _c3.rows[contextRowIndexByFile]) != null ? _d2 : {}; - const contextRowsWithKeysAppended = Object.keys(contextRowsByFile).reduce((pa, ca) => ({ ...pa, [ca + c4]: contextRowsByFile[ca] }), { ["_index" + c4]: contextRowIndexByFile.toString() }); - return { ...p3, ...contextRowsWithKeysAppended }; - }, {}) - }))) != null ? _a3 : []; - }, [tableData, schema, contextTable]); - const sortedColumns = F(() => cols.filter((f4) => f4.hidden != "true").sort((a5, b4) => predicate.colsOrder.findIndex((x5) => x5 == a5.name + a5.table) - predicate.colsOrder.findIndex((x5) => x5 == b4.name + b4.table)), [cols, predicate]); - const filteredData = F( - () => data.filter((f4) => { - return predicate.filters.reduce((p3, c4) => { - return p3 ? filterReturnForCol(cols.find((col) => col.name + col.table == c4.field), c4, f4) : p3; - }, true); - }).filter((f4) => (searchString == null ? void 0 : searchString.length) > 0 ? matchAny(searchString).test(Object.keys(f4).filter((g4) => g4.charAt(0) != "_").map((g4) => f4[g4]).join("|")) : true).sort((a5, b4) => { - return predicate.sort.reduce((p3, c4) => { - return p3 == 0 ? sortReturnForCol(cols.find((col) => col.name + col.table == c4.field), c4, a5, b4) : p3; - }, 0); - }), - [predicate, data, cols, searchString] - ); - const deleteSchema = async (table) => { - if (table.primary) - return; - const deleteResult = await deleteMDBTable(props2.plugin, dbPath, table.id); - if (deleteResult) { - const newSchemaTable = { - ...schemaTable, - rows: schemaTable.rows.filter((f4) => f4.id != table.id && f4.def != table.id) - }; - setSchemaTable(newSchemaTable); - if (dbSchema.id == table.id) { - setDBSchema(newSchemaTable.rows.find((g4) => g4.type == "db")); - } - } - }; - const saveSchema = async (table) => { - const newSchema = schemaTable.rows.find((f4) => f4.id == table.id) ? true : false; - const newSchemaTable = newSchema ? { - ...schemaTable, - rows: schemaTable.rows.map((f4) => f4.id == table.id ? table : f4) - } : { - ...schemaTable, - rows: [...schemaTable.rows, table] - }; - await saveDBToPath(props2.plugin, dbPath, { m_schema: newSchemaTable }); - if (table.id == (schema == null ? void 0 : schema.id)) { - setSchema(table); - } - if (table.id == (dbSchema == null ? void 0 : dbSchema.id)) { - setDBSchema(table); - setTableData((f4) => ({ - ...f4, - schema: table - })); - } - setSchemaTable(newSchemaTable); - }; - const syncAllMetadata = (f4) => { - const files = f4.rows.map((f5) => f5.File); - const importYAML = (files2, fmKeys) => { - return files2.map((f5) => getAbstractFileAtPath(app, f5)).filter((f5) => f5).reduce((p3, c4) => { - const fm = frontMatterForFile(c4); - if (!fm) - return p3; - return { - uniques: [], - cols: uniq([...p3.cols, ...fmKeys]), - rows: [...p3.rows, { - File: c4.path, - ...fmKeys.reduce((p4, c5) => { - const value = parseFrontMatter(c5, fm[c5], false); - if ((value == null ? void 0 : value.length) > 0) - return { ...p4, [c5]: value }; - return p4; - }, {}) - }] - }; - }, { uniques: [], cols: [], rows: [] }); - }; - const yamlTableData = importYAML(files, f4.cols.filter((f5) => !f5.type.contains("file")).map((f5) => f5.name)); - saveDB2({ - ...f4, - rows: f4.rows.map((r3) => { - const fmRow = yamlTableData.rows.find((f5) => f5.File == r3.File); - if (fmRow) { + createColumn: (column, table) => { + return { + pin: (position) => { + const columnIds = column.getLeafColumns().map((d5) => d5.id).filter(Boolean); + table.setColumnPinning((old) => { + var _old$left3, _old$right3; + if (position === "right") { + var _old$left, _old$right; + return { + left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), + right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), ...columnIds] + }; + } + if (position === "left") { + var _old$left2, _old$right2; + return { + left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), ...columnIds], + right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))) + }; + } return { - ...r3, - ...fmRow + left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), + right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))) }; - } - return r3; - }) - }); - }; - h2(() => { - if (props2.schema && schemaTable && (dbSchema == null ? void 0 : dbSchema.id) != props2.schema) { - const preselectSchema = schemaTable.rows.find((g4) => g4.id == props2.schema); - if (preselectSchema) { - if (preselectSchema.type == "db") { - setDBSchema(preselectSchema); - return; - } else { - const preselectDBSchema = schemaTable.rows.find((g4) => g4.id == preselectSchema.def); - if (preselectDBSchema) { - setDBSchema(preselectDBSchema); - return; - } - } - } else { - const newSchema = { - id: uniqueNameFromString(sanitizeTableName(props2.schema), schemaTable.rows.map((g4) => g4.id)), - name: props2.schema, - type: "db" - }; - setDBSchema(newSchema); - saveSchema(newSchema).then((f4) => saveDB2({ - schema: newSchema, - cols: defaultTableFields.map((g4) => ({ ...g4, schemaId: newSchema.id })), - rows: [] - })); - } - } - }, [schemaTable]); - const loadTables = async () => { - if (getAbstractFileAtPath(app, props2.dbPath)) { - setDBFileExists(true); - getMDBTableSchemas(props2.plugin, props2.dbPath, props2.tag ? true : false).then((f4) => { - setSchemaTable({ - ...defaultSchema, - rows: f4 }); - if (!props2.schema) - setDBSchema(f4 == null ? void 0 : f4.find((g4) => g4.type == "db")); - }); - } else { - if (props2.schema) { - saveDB2(props2.tag ? defaultTagMDBTable : defaultFolderMDBTable).then((f4) => { - setSchemaTable(defaultSchema); + }, + getCanPin: () => { + const leafColumns = column.getLeafColumns(); + return leafColumns.some((d5) => { + var _d$columnDef$enablePi, _table$options$enable; + return ((_d$columnDef$enablePi = d5.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_table$options$enable = table.options.enablePinning) != null ? _table$options$enable : true); }); - } else { - setSchemaTable(defaultSchema); - setDBSchema(defaultFileDBSchema); - } - } - }; - const refreshTags = async (evt) => { - if (!dbFileExists) { - loadDefaultTableData(); - } else { - if (dbSchema.primary) { - runDef(); - } else { - getMDBData(); + }, + getIsPinned: () => { + const leafColumnIds = column.getLeafColumns().map((d5) => d5.id); + const { + left, + right + } = table.getState().columnPinning; + const isLeft = leafColumnIds.some((d5) => left == null ? void 0 : left.includes(d5)); + const isRight = leafColumnIds.some((d5) => right == null ? void 0 : right.includes(d5)); + return isLeft ? "left" : isRight ? "right" : false; + }, + getPinnedIndex: () => { + var _a2, _b2; + var _table$getState$colum; + const position = column.getIsPinned(); + return position ? (_table$getState$colum = (_b2 = (_a2 = table.getState().columnPinning) == null ? void 0 : _a2[position]) == null ? void 0 : _b2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0; } - } - }; - const refreshSpace = async (evt) => { - if (!dbFileExists) { - loadDefaultTableData(); - } - }; - const getMDBData = () => { - getMDBTable(props2.plugin, dbSchema.id, dbPath, !isFolderContext).then( - (f4) => setTableData(f4) - ); - }; - const refreshMDB = async (evt) => { - if (!dbFileExists) { - return; - } - if (evt.detail.dbPath == dbPath) { - if (dbSchema) - getMDBTable(props2.plugin, dbSchema.id, dbPath, !isFolderContext).then( - (f4) => setTableData(f4) - ); - } else { - const tag = Object.keys(contextTable).find((t4) => tagContextFromTag(props2.plugin, t4) == evt.detail.dbPath); - if (tag) - loadContextFields(tag); - } - }; - h2(() => { - window.addEventListener(eventTypes.mdbChange, refreshMDB); - window.addEventListener(eventTypes.spacesChange, refreshSpace); - window.addEventListener(eventTypes.tagsChange, refreshTags); - return () => { - window.removeEventListener(eventTypes.mdbChange, refreshMDB); - window.removeEventListener(eventTypes.spacesChange, refreshSpace); - window.removeEventListener(eventTypes.tagsChange, refreshTags); }; - }, [contextTable, dbSchema, dbPath]); - h2(() => { - loadTables(); - }, [dbPath]); - const saveDB2 = async (newTable) => { - var _a3; - if (!dbFileExists) { - const defaultFields = isFolderContext ? defaultFolderFields : defaultTagFields; - const defaultTable = isFolderContext ? defaultFolderTables : defaultTagTables; - const dbField = { - ...defaultTable, - m_fields: { - uniques: defaultFields.uniques, - cols: defaultFields.cols, - rows: [...(_a3 = defaultFields.rows) != null ? _a3 : [], ...newTable.cols] - }, - [newTable.schema.id]: { - uniques: newTable.cols.filter((c4) => c4.unique == "true").map((c4) => c4.name), - cols: newTable.cols.map((c4) => c4.name), - rows: newTable.rows + }, + createRow: (row, table) => { + return { + getCenterVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => { + const leftAndRight = [...left != null ? left : [], ...right != null ? right : []]; + return allCells.filter((d5) => !leftAndRight.includes(d5.column.id)); + }, { + key: false, + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; } - }; - await saveDBToPath(props2.plugin, dbPath, dbField).then((f4) => { - setDBFileExists(true); - f4 ? setTableData(newTable) : new import_obsidian7.Notice("DB ERROR"); - }); - } else { - await saveMDBToPath(props2.plugin, dbPath, newTable).then((f4) => { - setDBFileExists(true); - f4 ? setTableData(newTable) : new import_obsidian7.Notice("DB ERROR"); - }); - } - }; - h2(() => { - var _a3; - if (!schemaTable || !dbSchema) - return; - const _schema = (schema == null ? void 0 : schema.def) == dbSchema.id ? schema : (_a3 = schemaTable.rows.find((f4) => f4.def == dbSchema.id)) != null ? _a3 : { - ...dbSchema, - id: uniqueNameFromString(dbSchema.id + "View", schemaTable.rows.map((f4) => f4.id)), - type: "table", - def: dbSchema.id - }; - if (_schema) { - setSchema(_schema); - if (dbFileExists) { - if (dbSchema.primary) { - runDef(); - } else { - getMDBData(); + }), + getLeftVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, ,], (allCells, left) => { + const cells = (left != null ? left : []).map((columnId) => allCells.find((cell) => cell.column.id === columnId)).filter(Boolean).map((d5) => ({ + ...d5, + position: "left" + })); + return cells; + }, { + key: false, + debug: () => { + var _table$options$debugA2; + return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; } - } else { - loadDefaultTableData(); - } - } - }, [dbSchema]); - h2(() => { - if (dbFileExists) - parsePredicate(schema.predicate); - }, [schema]); - h2(() => { - if (dbFileExists && tableData) - getContextTags(tableData); - }, [tableData]); - const selectRows = (lastSelected, rows) => { - if (lastSelected) { - const path = tableData.rows[parseInt(lastSelected)].File; - let evt = new CustomEvent(eventTypes.selectedFileChange, { detail: { filePath: path } }); - window.dispatchEvent(evt); - } else { - let evt = new CustomEvent(eventTypes.selectedFileChange, { detail: { filePath: null } }); - window.dispatchEvent(evt); - } - setSelectedRows(rows); - }; - const loadDefaultTableData = () => { - let files; - if (props2.folder) { - files = folderChildren(props2.plugin, getAbstractFileAtPath(props2.plugin.app, props2.folder)); - setTableData({ ...isFolderContext ? defaultFolderMDBTable : defaultTagMDBTable, rows: files.map((f4) => newRowByDBRow({ _source: "folder", "File": f4.path })) }); - } else if (props2.tag) { - files = getAllFilesForTag(props2.tag).map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4); - setTableData({ ...isFolderContext ? defaultFolderMDBTable : defaultTagMDBTable, rows: files.map((f4) => newRowByDBRow({ _source: "tag", "File": f4.path })) }); - } - }; - const getContextTags = async (_tableData) => { - const contextFields = _tableData.cols.filter((f4) => f4.type.contains("context")).map((f4) => f4.value).filter((f4) => !tagContexts.some((g4) => g4 == f4)); - for (let c4 of contextFields) { - loadContextFields(c4); - } - }; - const runDef = async () => { - let files; - if (props2.folder) { - files = folderChildren(props2.plugin, getAbstractFileAtPath(props2.plugin.app, props2.folder)); - consolidateFilesToTable(props2.plugin, dbPath, dbSchema.id, files.map((f4) => f4.path)).then((f4) => { - for (let c4 of tagContexts) { - loadTagContext(c4, f4.rows); + }), + getRightVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => { + const cells = (right != null ? right : []).map((columnId) => allCells.find((cell) => cell.column.id === columnId)).filter(Boolean).map((d5) => ({ + ...d5, + position: "right" + })); + return cells; + }, { + key: false, + debug: () => { + var _table$options$debugA3; + return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugRows; } - setTableData(f4); - return f4; - }).then((f4) => syncAllMetadata(f4)); - } else if (props2.tag) { - files = getAllFilesForTag(props2.tag).map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4); - consolidateFilesToTable(props2.plugin, dbPath, dbSchema.id, files.map((f4) => f4.path), props2.tag).then((f4) => { - for (let c4 of tagContexts) { - loadTagContext(c4, f4.rows); + }) + }; + }, + createTable: (table) => { + return { + setColumnPinning: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onColumnPinningChange) == null ? void 0 : _b2.call(_a2, updater); + }, + resetColumnPinning: (defaultState) => { + var _a2; + var _table$initialState$c; + return table.setColumnPinning(defaultState ? getDefaultPinningState() : (_table$initialState$c = (_a2 = table.initialState) == null ? void 0 : _a2.columnPinning) != null ? _table$initialState$c : getDefaultPinningState()); + }, + getIsSomeColumnsPinned: (position) => { + var _a2, _b2, _c2; + const pinningState = table.getState().columnPinning; + if (!position) { + return Boolean(((_a2 = pinningState.left) == null ? void 0 : _a2.length) || ((_b2 = pinningState.right) == null ? void 0 : _b2.length)); } - setTableData(f4); - return f4; - }).then((f4) => syncAllMetadata(f4)); - } - }; - const loadTagContext = async (tag, files) => { - consolidateRowsToTag(props2.plugin, tagContextFromTag(props2.plugin, tag), dbSchema.id, dbPath, files).then( - (f4) => { - if (f4) { - const contextFields = f4.cols.filter((g4) => g4.type.contains("context")).map((g4) => g4.value).filter((g4) => !tagContexts.some((h5) => h5 == g4)); - for (let c4 of contextFields) { - loadContextFields(c4); - } - setContextTable((t4) => ({ - ...t4, - [tag]: f4 - })); + return Boolean((_c2 = pinningState[position]) == null ? void 0 : _c2.length); + }, + getLeftLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => { + return (left != null ? left : []).map((columnId) => allColumns.find((column) => column.id === columnId)).filter(Boolean); + }, { + key: "getLeftLeafColumns", + debug: () => { + var _table$options$debugA4; + return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugColumns; } - } - ); - }; - const loadContextFields = async (tag) => { - getMDBTable(props2.plugin, "files", tagContextFromTag(props2.plugin, tag), true).then((f4) => { - setContextTable((t4) => ({ - ...t4, - [tag]: f4 - })); - }); - }; - const tagExists = (currentCache, findTag) => { - let currentTags = []; - if ((0, import_obsidian7.getAllTags)(currentCache)) { - currentTags = (0, import_obsidian7.getAllTags)(currentCache); - } - return currentTags.find((tag) => tag.toLowerCase() == findTag.toLowerCase()) ? true : false; - }; - const getAllFilesForTag = (tag) => { - let tagsCache = []; - (() => { - app.vault.getMarkdownFiles().forEach((tfile) => { - let currentCache; - if (app.metadataCache.getFileCache(tfile) !== null) { - currentCache = app.metadataCache.getFileCache(tfile); + }), + getRightLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => { + return (right != null ? right : []).map((columnId) => allColumns.find((column) => column.id === columnId)).filter(Boolean); + }, { + key: "getRightLeafColumns", + debug: () => { + var _table$options$debugA5; + return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugColumns; } - let relativePath = tfile.path; - const hasTag = tagExists(currentCache, tag); - if (hasTag) { - tagsCache.push(relativePath); + }), + getCenterLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => { + const leftAndRight = [...left != null ? left : [], ...right != null ? right : []]; + return allColumns.filter((d5) => !leftAndRight.includes(d5.id)); + }, { + key: "getCenterLeafColumns", + debug: () => { + var _table$options$debugA6; + return (_table$options$debugA6 = table.options.debugAll) != null ? _table$options$debugA6 : table.options.debugColumns; } - }); - })(); - return tagsCache; - }; - const saveContextDB = async (newTable, context) => { - const dbPath2 = tagContextFromTag(props2.plugin, context); - await saveMDBToPath(props2.plugin, dbPath2, newTable).then((f4) => f4 ? setContextTable((t4) => ({ - ...t4, - [context]: newTable - })) : new import_obsidian7.Notice("Database Error")); - }; - const savePredicate = (newPredicate) => { - const cleanedPredicate = validatePredicate(newPredicate); - saveSchema({ - ...schema, - predicate: JSON.stringify(cleanedPredicate) - }); - setPredicate(cleanedPredicate); - }; - h2(() => { - setPredicate((p3) => ({ ...p3, colsOrder: uniq([...p3.colsOrder, ...cols.filter((f4) => f4.hidden != "true").map((c4) => c4.name + c4.table)]) })); - }, [cols]); - const parsePredicate = (predicateStr) => { - const newPredicate = safelyParseJSON(predicateStr); - setPredicate(validatePredicate(newPredicate)); - }; - const delColumn = (column) => { - let mdbtable; - const table = column.table; - if (table == "") { - mdbtable = tableData; - } else if (contextTable[table]) { - mdbtable = contextTable[table]; - } - const newFields = mdbtable.cols.filter((f4, i4) => f4.name != column.name); - const newTable = { - ...mdbtable, - cols: newFields, - rows: mdbtable.rows.map((r3) => { - const { [column.name]: val, ...rest } = r3; - return rest; }) }; - if (table == "") { - saveDB2(newTable); - } else if (contextTable[table]) { - saveContextDB(newTable, table); - } - }; - const newColumn = (col) => { - return saveColumn(col); - }; - const saveColumn = (newColumn2, oldColumn) => { - let mdbtable; - const column = { - ...newColumn2, - name: sanitizeColumnName(newColumn2.name) + } +}; +var RowSelection = { + getInitialState: (state) => { + return { + rowSelection: {}, + ...state }; - const table = column.table; - if (table == "") { - mdbtable = tableData; - } else if (contextTable[table]) { - mdbtable = contextTable[table]; - } - if (column.name == "") { - new import_obsidian7.Notice("No Column Name"); - return false; - } - if (!oldColumn && mdbtable.cols.find((f4) => f4.name.toLowerCase() == column.name.toLowerCase()) || oldColumn && oldColumn.name != column.name && mdbtable.cols.find((f4) => f4.name.toLowerCase() == column.name.toLowerCase())) { - new import_obsidian7.Notice("Duplicate Column Name"); - return false; - } - const oldFieldIndex = oldColumn ? mdbtable.cols.findIndex((f4) => f4.name == oldColumn.name) : -1; - const newFields = oldFieldIndex == -1 ? [...mdbtable.cols, column] : mdbtable.cols.map((f4, i4) => i4 == oldFieldIndex ? column : f4); - const newTable = { - ...mdbtable, - cols: newFields, - rows: mdbtable.rows.map((f4) => oldColumn ? { - ...f4, - [column.name]: f4[oldColumn.name], - oldColumn: void 0 - } : f4) + }, + getDefaultOptions: (table) => { + return { + onRowSelectionChange: makeStateUpdater("rowSelection", table), + enableRowSelection: true, + enableMultiRowSelection: true, + enableSubRowSelection: true }; - if (oldColumn) - savePredicate({ - filters: predicate.filters.map((f4) => f4.field == oldColumn.name + oldColumn.table ? { ...f4, field: newColumn2.name + newColumn2.table } : f4), - sort: predicate.sort.map((f4) => f4.field == oldColumn.name + oldColumn.table ? { ...f4, field: newColumn2.name + newColumn2.table } : f4), - groupBy: predicate.groupBy.map((f4) => f4 == oldColumn.name + oldColumn.table ? newColumn2.name + newColumn2.table : f4), - colsHidden: predicate.colsHidden.map((f4) => f4 == oldColumn.name + oldColumn.table ? newColumn2.name + newColumn2.table : f4), - colsOrder: predicate.colsOrder.map((f4) => f4 == oldColumn.name + oldColumn.table ? newColumn2.name + newColumn2.table : f4), - colsSize: { - ...predicate.colsSize, - [newColumn2.name + newColumn2.table]: predicate.colsSize[oldColumn.name + oldColumn.table], - [oldColumn.name + oldColumn.table]: void 0 + }, + createTable: (table) => { + return { + setRowSelection: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onRowSelectionChange) == null ? void 0 : _b2.call(_a2, updater); + }, + resetRowSelection: (defaultState) => { + var _table$initialState$r; + return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {}); + }, + toggleAllRowsSelected: (value) => { + table.setRowSelection((old) => { + value = typeof value !== "undefined" ? value : !table.getIsAllRowsSelected(); + const rowSelection = { + ...old + }; + const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows; + if (value) { + preGroupedFlatRows.forEach((row) => { + if (!row.getCanSelect()) { + return; + } + rowSelection[row.id] = true; + }); + } else { + preGroupedFlatRows.forEach((row) => { + delete rowSelection[row.id]; + }); + } + return rowSelection; + }); + }, + toggleAllPageRowsSelected: (value) => table.setRowSelection((old) => { + const resolvedValue = typeof value !== "undefined" ? value : !table.getIsAllPageRowsSelected(); + const rowSelection = { + ...old + }; + table.getRowModel().rows.forEach((row) => { + mutateRowIsSelected(rowSelection, row.id, resolvedValue, table); + }); + return rowSelection; + }), + getPreSelectedRowModel: () => table.getCoreRowModel(), + getSelectedRowModel: memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => { + if (!Object.keys(rowSelection).length) { + return { + rows: [], + flatRows: [], + rowsById: {} + }; } - }); - if (table == "") { - syncAllMetadata(newTable); - } else if (contextTable[table]) { - saveContextDB(newTable, table); + return selectRowsFn(table, rowModel); + }, { + key: "getSelectedRowModel", + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; + } + }), + getFilteredSelectedRowModel: memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => { + if (!Object.keys(rowSelection).length) { + return { + rows: [], + flatRows: [], + rowsById: {} + }; + } + return selectRowsFn(table, rowModel); + }, { + key: false, + debug: () => { + var _table$options$debugA2; + return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugTable; + } + }), + getGroupedSelectedRowModel: memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => { + if (!Object.keys(rowSelection).length) { + return { + rows: [], + flatRows: [], + rowsById: {} + }; + } + return selectRowsFn(table, rowModel); + }, { + key: false, + debug: () => { + var _table$options$debugA3; + return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugTable; + } + }), + getIsAllRowsSelected: () => { + const preGroupedFlatRows = table.getFilteredRowModel().flatRows; + const { + rowSelection + } = table.getState(); + let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length); + if (isAllRowsSelected) { + if (preGroupedFlatRows.some((row) => row.getCanSelect() && !rowSelection[row.id])) { + isAllRowsSelected = false; + } + } + return isAllRowsSelected; + }, + getIsAllPageRowsSelected: () => { + const paginationFlatRows = table.getPaginationRowModel().flatRows; + const { + rowSelection + } = table.getState(); + let isAllPageRowsSelected = !!paginationFlatRows.length; + if (isAllPageRowsSelected && paginationFlatRows.some((row) => !rowSelection[row.id])) { + isAllPageRowsSelected = false; + } + return isAllPageRowsSelected; + }, + getIsSomeRowsSelected: () => { + var _table$getState$rowSe; + const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length; + return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length; + }, + getIsSomePageRowsSelected: () => { + const paginationFlatRows = table.getPaginationRowModel().flatRows; + return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.some((d5) => d5.getIsSelected() || d5.getIsSomeSelected()); + }, + getToggleAllRowsSelectedHandler: () => { + return (e4) => { + table.toggleAllRowsSelected(e4.target.checked); + }; + }, + getToggleAllPageRowsSelectedHandler: () => { + return (e4) => { + table.toggleAllPageRowsSelected(e4.target.checked); + }; + } + }; + }, + createRow: (row, table) => { + return { + toggleSelected: (value) => { + const isSelected = row.getIsSelected(); + table.setRowSelection((old) => { + value = typeof value !== "undefined" ? value : !isSelected; + if (isSelected === value) { + return old; + } + const selectedRowIds = { + ...old + }; + mutateRowIsSelected(selectedRowIds, row.id, value, table); + return selectedRowIds; + }); + }, + getIsSelected: () => { + const { + rowSelection + } = table.getState(); + return isRowSelected(row, rowSelection); + }, + getIsSomeSelected: () => { + const { + rowSelection + } = table.getState(); + return isSubRowSelected(row, rowSelection) === "some"; + }, + getIsAllSubRowsSelected: () => { + const { + rowSelection + } = table.getState(); + return isSubRowSelected(row, rowSelection) === "all"; + }, + getCanSelect: () => { + var _table$options$enable; + if (typeof table.options.enableRowSelection === "function") { + return table.options.enableRowSelection(row); + } + return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true; + }, + getCanSelectSubRows: () => { + var _table$options$enable2; + if (typeof table.options.enableSubRowSelection === "function") { + return table.options.enableSubRowSelection(row); + } + return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true; + }, + getCanMultiSelect: () => { + var _table$options$enable3; + if (typeof table.options.enableMultiRowSelection === "function") { + return table.options.enableMultiRowSelection(row); + } + return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true; + }, + getToggleSelectedHandler: () => { + const canSelect = row.getCanSelect(); + return (e4) => { + var _a2; + if (!canSelect) + return; + row.toggleSelected((_a2 = e4.target) == null ? void 0 : _a2.checked); + }; + } + }; + } +}; +var mutateRowIsSelected = (selectedRowIds, id2, value, table) => { + var _a2; + const row = table.getRow(id2); + if (value) { + if (!row.getCanMultiSelect()) { + Object.keys(selectedRowIds).forEach((key2) => delete selectedRowIds[key2]); } - return true; - }; - return /* @__PURE__ */ bn.createElement(MDBContext.Provider, { - value: { - data, - filteredData, - loadContextFields, - selectedRows, - selectRows, - tableData, - cols, - sortedColumns, - contextTable, - setContextTable, - predicate, - savePredicate, - saveDB: saveDB2, - saveContextDB, - schema, - dbPath, - saveColumn, - delColumn, - newColumn, - tagContexts, - tables, - setSchema, - saveSchema, - deleteSchema, - dbFileExists, - dbSchema, - searchString, - setSearchString, - folderPath, - isFolderContext, - setDBSchema + if (row.getCanSelect()) { + selectedRowIds[id2] = true; } - }, props2.children); -}; - -// src/components/ContextView/FilterBar/SearchBar.tsx -var SearchBar = (props2) => { - const clearSearch = () => { - props2.setSearchString(""); - }; - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-view-search" - }, /* @__PURE__ */ bn.createElement("button", { - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-search"] } - }), /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("input", { - onChange: (e4) => props2.setSearchString(e4.target.value), - placeholder: "Type to search...", - className: "mk-search-bar" - }), /* @__PURE__ */ bn.createElement("button", { - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-clear"] }, - onClick: () => clearSearch() - }))); -}; - -// src/components/ContextView/FilterBar/FilterBar.tsx -var import_lodash3 = __toESM(require_lodash()); - -// src/components/ui/modals/syncMetadata.tsx -var import_obsidian8 = require("obsidian"); -var SyncMetadataModal = class extends import_obsidian8.Modal { - constructor(plugin, files, syncColumns) { - super(plugin.app); - this.plugin = plugin; - this.files = files; - let closeButton = this.modalEl.querySelector(".modal-close-button"); - closeButton.style.display = "none"; - this.syncColumns = syncColumns; - } - onOpen() { - let { contentEl } = this; - let myModal = this; - let headerText; - const headerEl = contentEl.createEl("div", { text: headerText }); - headerEl.addClass("modal-title"); - headerEl.innerHTML = "Hidden Files"; - const root = createRoot(contentEl); - root.render(/* @__PURE__ */ bn.createElement(SyncMetadataComponent, { - plugin: this.plugin, - files: this.files, - syncColumns: this.syncColumns, - close: () => this.close() - })); + } else { + delete selectedRowIds[id2]; } - onClose() { - let { contentEl } = this; - contentEl.empty(); + if (((_a2 = row.subRows) == null ? void 0 : _a2.length) && row.getCanSelectSubRows()) { + row.subRows.forEach((row2) => mutateRowIsSelected(selectedRowIds, row2.id, value, table)); } }; -var SyncMetadataComponent = (props2) => { - const { plugin } = props2; - const cols = props2.files.reduce((p3, c4) => { - const fm = frontMatterForFile(c4); - const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); - return uniq([...p3, ...fmKeys]); - }, []); - const [syncColumns, setSyncColumns] = p2(cols); - const [table, setTable] = p2(""); - const toggleColumn = (column) => { - if (syncColumns.find((f4) => f4 == column)) { - setSyncColumns((s5) => s5.filter((f4) => f4 != column)); - } else { - setSyncColumns((s5) => [...s5, column]); - } +function selectRowsFn(table, rowModel) { + const rowSelection = table.getState().rowSelection; + const newSelectedFlatRows = []; + const newSelectedRowsById = {}; + const recurseRows = function(rows, depth) { + return rows.map((row) => { + var _a2; + const isSelected = isRowSelected(row, rowSelection); + if (isSelected) { + newSelectedFlatRows.push(row); + newSelectedRowsById[row.id] = row; + } + if ((_a2 = row.subRows) == null ? void 0 : _a2.length) { + row = { + ...row, + subRows: recurseRows(row.subRows) + }; + } + if (isSelected) { + return row; + } + }).filter(Boolean); }; - const saveContexts = (_5, value) => { - setTable(tagFromString(value[0])); + return { + rows: recurseRows(rowModel.rows), + flatRows: newSelectedFlatRows, + rowsById: newSelectedRowsById }; - const showContextMenu = (e4) => { - const offset = e4.target.getBoundingClientRect(); - const f4 = loadTags(props2.plugin); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: true, - value: [], - options: [{ name: "Folder", value: "" }, ...f4.map((m5) => ({ name: m5, value: m5 }))], - saveOptions: saveContexts, - placeholder: "Select Tag", - searchable: true, - showAll: true +} +function isRowSelected(row, selection) { + var _selection$row$id; + return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false; +} +function isSubRowSelected(row, selection, table) { + if (row.subRows && row.subRows.length) { + let allChildrenSelected = true; + let someSelected = false; + row.subRows.forEach((subRow) => { + if (someSelected && !allChildrenSelected) { + return; + } + if (isRowSelected(subRow, selection)) { + someSelected = true; + } else { + allChildrenSelected = false; + } }); - }; - const sync = () => { - props2.syncColumns(syncColumns, table); - props2.close(); - }; - return /* @__PURE__ */ bn.createElement("div", { - className: "modal-content" - }, /* @__PURE__ */ bn.createElement("div", { - className: "setting-item setting-item-heading" - }, "Sync Fields"), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item" - }, "Contexts defines and syncs the same fields across your notes depending on their folder or tag."), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item" - }, /* @__PURE__ */ bn.createElement("div", { - className: "setting-item-info" - }, /* @__PURE__ */ bn.createElement("div", { - className: "setting-item-name" - }, "Select Context"), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item-description" - }, "Select which folder or tag context you want to sync the fields.")), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item-control" - }, /* @__PURE__ */ bn.createElement("button", { - onClick: (e4) => showContextMenu(e4) - }, table == "" ? "Current Folder" : table))), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item" - }, /* @__PURE__ */ bn.createElement("div", { - className: "setting-item-info" - }, /* @__PURE__ */ bn.createElement("div", { - className: "setting-item-name" - }, "Select Fields"), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item-description" - }, "Select which fields from your notes to start syncing with the context."), cols.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { - className: "mobile-option-setting-item" - }, /* @__PURE__ */ bn.createElement("input", { - type: "checkbox", - checked: syncColumns.some((g4) => g4 == f4), - onChange: () => toggleColumn(f4) - }), /* @__PURE__ */ bn.createElement("span", { - className: "mobile-option-setting-item-name" - }, f4))))), /* @__PURE__ */ bn.createElement("button", { - style: { marginRight: 8 }, - onClick: () => sync() - }, "Sync"), /* @__PURE__ */ bn.createElement("button", { - onClick: () => props2.close() - }, "Cancel")); + return allChildrenSelected ? "all" : someSelected ? "some" : false; + } + return false; +} +var reSplitAlphaNumeric = /([0-9]+)/gm; +var alphanumeric = (rowA, rowB, columnId) => { + return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase()); }; - -// src/components/ContextView/FilterBar/TagSelector.tsx -var import_lodash2 = __toESM(require_lodash()); -var import_obsidian9 = require("obsidian"); -var TagSelector = (props2) => { - const { data, tagContexts, dbFileExists, setContextTable, saveDB: saveDB2, tableData, contextTable, dbSchema, dbPath, saveContextDB, saveSchema, loadContextFields } = q2(MDBContext); - const removeContext = (value) => { - const removeTags = value.map((f4) => tagFromString(f4)); - const tags = tagContexts.filter((f4) => !removeTags.some((t4) => t4 == f4)); - removeTags.forEach((t4) => { - removeSourceFromTag(props2.plugin, t4, dbPath); - }); - saveSchema({ - ...dbSchema, - def: tags.join("&") - }); - }; - const saveContexts = async (_5, value) => { - const tags = (0, import_lodash2.uniq)([...tagContexts, ...value.map((f4) => tagFromString(f4))]); - tags.forEach((tag) => { - initiateContextIfNotExists(props2.plugin, tag).then((f4) => { - if (f4) { - return consolidateRowsToTag(props2.plugin, tagContextFromTag(props2.plugin, tag), dbSchema.id, dbPath, tableData.rows); +var alphanumericCaseSensitive = (rowA, rowB, columnId) => { + return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId))); +}; +var text = (rowA, rowB, columnId) => { + return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase()); +}; +var textCaseSensitive = (rowA, rowB, columnId) => { + return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId))); +}; +var datetime = (rowA, rowB, columnId) => { + const a5 = rowA.getValue(columnId); + const b4 = rowB.getValue(columnId); + return a5 > b4 ? 1 : a5 < b4 ? -1 : 0; +}; +var basic = (rowA, rowB, columnId) => { + return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId)); +}; +function compareBasic(a5, b4) { + return a5 === b4 ? 0 : a5 > b4 ? 1 : -1; +} +function toString(a5) { + if (typeof a5 === "number") { + if (isNaN(a5) || a5 === Infinity || a5 === -Infinity) { + return ""; + } + return String(a5); + } + if (typeof a5 === "string") { + return a5; + } + return ""; +} +function compareAlphanumeric(aStr, bStr) { + const a5 = aStr.split(reSplitAlphaNumeric).filter(Boolean); + const b4 = bStr.split(reSplitAlphaNumeric).filter(Boolean); + while (a5.length && b4.length) { + const aa = a5.shift(); + const bb = b4.shift(); + const an2 = parseInt(aa, 10); + const bn2 = parseInt(bb, 10); + const combo = [an2, bn2].sort(); + if (isNaN(combo[0])) { + if (aa > bb) { + return 1; + } + if (bb > aa) { + return -1; + } + continue; + } + if (isNaN(combo[1])) { + return isNaN(an2) ? -1 : 1; + } + if (an2 > bn2) { + return 1; + } + if (bn2 > an2) { + return -1; + } + } + return a5.length - b4.length; +} +var sortingFns = { + alphanumeric, + alphanumericCaseSensitive, + text, + textCaseSensitive, + datetime, + basic +}; +var Sorting = { + getInitialState: (state) => { + return { + sorting: [], + ...state + }; + }, + getDefaultColumnDef: () => { + return { + sortingFn: "auto" + }; + }, + getDefaultOptions: (table) => { + return { + onSortingChange: makeStateUpdater("sorting", table), + isMultiSortEvent: (e4) => { + return e4.shiftKey; + } + }; + }, + createColumn: (column, table) => { + return { + getAutoSortingFn: () => { + const firstRows = table.getFilteredRowModel().flatRows.slice(10); + let isString = false; + for (const row of firstRows) { + const value = row == null ? void 0 : row.getValue(column.id); + if (Object.prototype.toString.call(value) === "[object Date]") { + return sortingFns.datetime; + } + if (typeof value === "string") { + isString = true; + if (value.split(reSplitAlphaNumeric).length > 1) { + return sortingFns.alphanumeric; + } + } } - }).then((f4) => loadContextFields(tag)); - }); - saveSchema({ - ...dbSchema, - def: tags.join("&") - }); - }; - const showContextMenu = (e4) => { - const offset = e4.target.getBoundingClientRect(); - const f4 = loadTags(props2.plugin); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: true, - value: [], - options: f4.map((m5) => ({ name: m5, value: m5 })), - saveOptions: saveContexts, - placeholder: "Select Context", - searchable: true, - showAll: true - }); - }; - const showTagMenu = (e4, tag) => { - const menu = new import_obsidian9.Menu(); - menu.addItem((menuItem) => { - menuItem.setIcon("file-up"); - menuItem.setTitle("Goto Tag"); - menuItem.onClick(() => { - openTag(tag, app, e4.metaKey); - }); - }); - menu.addItem((menuItem) => { - menuItem.setIcon("file-up"); - menuItem.setTitle("Remove Tag"); - menuItem.onClick(() => { - removeContext([tag]); - }); - }); - const offset = e4.target.getBoundingClientRect(); - menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); - }; - const saveMetadata = (keys, table) => { - const files = data.map((f4) => f4.File); - const importYAML = (files2, fmKeys) => { - return files2.map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4).reduce((p3, c4) => { - const fm = frontMatterForFile(c4); - if (!fm) { - return p3; + if (isString) { + return sortingFns.text; } - return { - uniques: [], - cols: (0, import_lodash2.uniq)([...p3.cols, ...fmKeys]), - rows: [...p3.rows, { - File: c4.path, - ...fmKeys.reduce((p4, c5) => ({ ...p4, [c5]: parseFrontMatter(c5, fm[c5], false) }), {}) - }] + return sortingFns.basic; + }, + getAutoSortDir: () => { + const firstRow = table.getFilteredRowModel().flatRows[0]; + const value = firstRow == null ? void 0 : firstRow.getValue(column.id); + if (typeof value === "string") { + return "asc"; + } + return "desc"; + }, + getSortingFn: () => { + var _a2; + var _table$options$sortin; + if (!column) { + throw new Error(); + } + return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === "auto" ? column.getAutoSortingFn() : (_table$options$sortin = (_a2 = table.options.sortingFns) == null ? void 0 : _a2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn]; + }, + toggleSorting: (desc, multi) => { + const nextSortingOrder = column.getNextSortingOrder(); + const hasManualValue = typeof desc !== "undefined" && desc !== null; + table.setSorting((old) => { + const existingSorting = old == null ? void 0 : old.find((d5) => d5.id === column.id); + const existingIndex = old == null ? void 0 : old.findIndex((d5) => d5.id === column.id); + let newSorting = []; + let sortAction; + let nextDesc = hasManualValue ? desc : nextSortingOrder === "desc"; + if ((old == null ? void 0 : old.length) && column.getCanMultiSort() && multi) { + if (existingSorting) { + sortAction = "toggle"; + } else { + sortAction = "add"; + } + } else { + if ((old == null ? void 0 : old.length) && existingIndex !== old.length - 1) { + sortAction = "replace"; + } else if (existingSorting) { + sortAction = "toggle"; + } else { + sortAction = "replace"; + } + } + if (sortAction === "toggle") { + if (!hasManualValue) { + if (!nextSortingOrder) { + sortAction = "remove"; + } + } + } + if (sortAction === "add") { + var _table$options$maxMul; + newSorting = [...old, { + id: column.id, + desc: nextDesc + }]; + newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER)); + } else if (sortAction === "toggle") { + newSorting = old.map((d5) => { + if (d5.id === column.id) { + return { + ...d5, + desc: nextDesc + }; + } + return d5; + }); + } else if (sortAction === "remove") { + newSorting = old.filter((d5) => d5.id !== column.id); + } else { + newSorting = [{ + id: column.id, + desc: nextDesc + }]; + } + return newSorting; + }); + }, + getFirstSortDir: () => { + var _ref, _column$columnDef$sor; + const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === "desc"; + return sortDescFirst ? "desc" : "asc"; + }, + getNextSortingOrder: (multi) => { + var _table$options$enable, _table$options$enable2; + const firstSortDirection = column.getFirstSortDir(); + const isSorted = column.getIsSorted(); + if (!isSorted) { + return firstSortDirection; + } + if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true)) { + return false; + } + return isSorted === "desc" ? "asc" : "desc"; + }, + getCanSort: () => { + var _column$columnDef$ena, _table$options$enable3; + return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn; + }, + getCanMultiSort: () => { + var _ref2, _column$columnDef$ena2; + return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn; + }, + getIsSorted: () => { + var _a2; + const columnSort = (_a2 = table.getState().sorting) == null ? void 0 : _a2.find((d5) => d5.id === column.id); + return !columnSort ? false : columnSort.desc ? "desc" : "asc"; + }, + getSortIndex: () => { + var _a2; + var _table$getState$sorti; + return (_table$getState$sorti = (_a2 = table.getState().sorting) == null ? void 0 : _a2.findIndex((d5) => d5.id === column.id)) != null ? _table$getState$sorti : -1; + }, + clearSorting: () => { + table.setSorting((old) => (old == null ? void 0 : old.length) ? old.filter((d5) => d5.id !== column.id) : []); + }, + getToggleSortingHandler: () => { + const canSort = column.getCanSort(); + return (e4) => { + var _a2, _b2, _c2, _d2; + if (!canSort) + return; + (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); + (_d2 = column.toggleSorting) == null ? void 0 : _d2.call(column, void 0, column.getCanMultiSort() ? (_c2 = (_b2 = table.options).isMultiSortEvent) == null ? void 0 : _c2.call(_b2, e4) : false); }; - }, { uniques: [], cols: [], rows: [] }); + } }; - const yamlTableData = importYAML(files, keys); - const yamlTypes = guestimateTypes(files, false); - if (table == "") { - const newTable = mergeTableData(tableData, yamlTableData, yamlTypes); - saveDB2(newTable); - } else { - if (!dbFileExists) { - saveDB2(tableData).then(() => saveContext(yamlTableData, yamlTypes, table)); - } else { - saveContext(yamlTableData, yamlTypes, table); + }, + createTable: (table) => { + return { + setSorting: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onSortingChange) == null ? void 0 : _b2.call(_a2, updater); + }, + resetSorting: (defaultState) => { + var _a2; + var _table$initialState$s; + table.setSorting(defaultState ? [] : (_table$initialState$s = (_a2 = table.initialState) == null ? void 0 : _a2.sorting) != null ? _table$initialState$s : []); + }, + getPreSortedRowModel: () => table.getGroupedRowModel(), + getSortedRowModel: () => { + if (!table._getSortedRowModel && table.options.getSortedRowModel) { + table._getSortedRowModel = table.options.getSortedRowModel(table); + } + if (table.options.manualSorting || !table._getSortedRowModel) { + return table.getPreSortedRowModel(); + } + return table._getSortedRowModel(); } - } - }; - const saveContext = (yamlTableData, yamlTypes, table) => { - if (contextTable[table]) { - const newTable = mergeTableData(contextTable[table], yamlTableData, yamlTypes); - saveContextDB(newTable, table); - saveSchema({ - ...dbSchema, - def: (0, import_lodash2.uniq)([...tagContexts, table]).join("&") - }); - } else { - consolidateRowsToTag(props2.plugin, tagContextFromTag(props2.plugin, table), dbSchema.id, dbPath, tableData.rows).then( - (f4) => { - if (f4) { - const newTable = mergeTableData(f4, yamlTableData, yamlTypes); - return saveContextDB(newTable, table); - } + }; + } +}; +var Visibility = { + getInitialState: (state) => { + return { + columnVisibility: {}, + ...state + }; + }, + getDefaultOptions: (table) => { + return { + onColumnVisibilityChange: makeStateUpdater("columnVisibility", table) + }; + }, + createColumn: (column, table) => { + return { + toggleVisibility: (value) => { + if (column.getCanHide()) { + table.setColumnVisibility((old) => ({ + ...old, + [column.id]: value != null ? value : !column.getIsVisible() + })); } - ).then(() => { - saveSchema({ - ...dbSchema, - def: (0, import_lodash2.uniq)([...tagContexts, table]).join("&") + }, + getIsVisible: () => { + var _a2; + var _table$getState$colum; + return (_table$getState$colum = (_a2 = table.getState().columnVisibility) == null ? void 0 : _a2[column.id]) != null ? _table$getState$colum : true; + }, + getCanHide: () => { + var _column$columnDef$ena, _table$options$enable; + return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true); + }, + getToggleVisibilityHandler: () => { + return (e4) => { + var _a2; + (_a2 = column.toggleVisibility) == null ? void 0 : _a2.call(column, e4.target.checked); + }; + } + }; + }, + createRow: (row, table) => { + return { + _getAllVisibleCells: memo(() => [row.getAllCells(), table.getState().columnVisibility], (cells) => { + return cells.filter((cell) => cell.column.getIsVisible()); + }, { + key: false, + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; + } + }), + getVisibleCells: memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], { + key: "row.getVisibleCells", + debug: () => { + var _table$options$debugA2; + return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; + } + }) + }; + }, + createTable: (table) => { + const makeVisibleColumnsMethod = (key2, getColumns) => { + return memo(() => [getColumns(), getColumns().filter((d5) => d5.getIsVisible()).map((d5) => d5.id).join("_")], (columns) => { + return columns.filter((d5) => { + var _a2; + return (_a2 = d5.getIsVisible) == null ? void 0 : _a2.call(d5); }); + }, { + key: key2, + debug: () => { + var _table$options$debugA3; + return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugColumns; + } }); - } - }; - const syncMetadata = () => { - let vaultChangeModal = new SyncMetadataModal(props2.plugin, data.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4), saveMetadata); - vaultChangeModal.open(); - }; - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-tag-selector" - }, tagContexts.map((f4) => /* @__PURE__ */ bn.createElement("button", { - onContextMenu: (e4) => showTagMenu(e4, f4), - onClick: (e4) => openTag(f4, app, e4.metaKey) - }, f4)), /* @__PURE__ */ bn.createElement("button", { - "aria-label": "Add Tag", - onClick: (e4) => showContextMenu(e4) - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-icon-xsmall", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-plus"] } - }), !dbFileExists && "Tag"), /* @__PURE__ */ bn.createElement("button", { - "aria-label": "Sync Fields", - onClick: (e4) => syncMetadata() - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-icon-xsmall", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-sync"] } - }), !dbFileExists && "Sync Fields")); + }; + return { + getVisibleFlatColumns: makeVisibleColumnsMethod("getVisibleFlatColumns", () => table.getAllFlatColumns()), + getVisibleLeafColumns: makeVisibleColumnsMethod("getVisibleLeafColumns", () => table.getAllLeafColumns()), + getLeftVisibleLeafColumns: makeVisibleColumnsMethod("getLeftVisibleLeafColumns", () => table.getLeftLeafColumns()), + getRightVisibleLeafColumns: makeVisibleColumnsMethod("getRightVisibleLeafColumns", () => table.getRightLeafColumns()), + getCenterVisibleLeafColumns: makeVisibleColumnsMethod("getCenterVisibleLeafColumns", () => table.getCenterLeafColumns()), + setColumnVisibility: (updater) => { + var _a2, _b2; + return (_b2 = (_a2 = table.options).onColumnVisibilityChange) == null ? void 0 : _b2.call(_a2, updater); + }, + resetColumnVisibility: (defaultState) => { + var _table$initialState$c; + table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {}); + }, + toggleAllColumnsVisible: (value) => { + var _value; + value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible(); + table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => { + var _a2; + return { + ...obj, + [column.id]: !value ? !((_a2 = column.getCanHide) == null ? void 0 : _a2.call(column)) : value + }; + }, {})); + }, + getIsAllColumnsVisible: () => !table.getAllLeafColumns().some((column) => { + var _a2; + return !((_a2 = column.getIsVisible) == null ? void 0 : _a2.call(column)); + }), + getIsSomeColumnsVisible: () => table.getAllLeafColumns().some((column) => { + var _a2; + return (_a2 = column.getIsVisible) == null ? void 0 : _a2.call(column); + }), + getToggleAllColumnsVisibilityHandler: () => { + return (e4) => { + var _a2; + table.toggleAllColumnsVisible((_a2 = e4.target) == null ? void 0 : _a2.checked); + }; + } + }; + } }; - -// src/hooks/useLongPress.tsx -function isMouseEvent(e4) { - return e4 && "screenX" in e4; -} - -// src/components/ContextView/FilterBar/FilterBar.tsx -var FilterBar = (props2) => { - const { folderNoteOpen, viewFolderNote } = props2; - const ctxRef = _2(null); - const { tables, data, setDBSchema, loadContextFields, cols, isFolderContext, deleteSchema, saveSchema, saveDB: saveDB2, saveContextDB, setSchema, setSearchString, predicate, tagContexts, savePredicate, schema, dbSchema, dbPath, contextTable, tableData } = q2(MDBContext); - const filteredCols = cols.filter((f4) => f4.hidden != "true"); - const dataViewAPI = (0, import_obsidian_dataview2.getAPI)(); - const saveViewType = (type) => { - saveSchema({ - ...schema, - type - }); - }; - const selectView = (_dbschema, value) => { - viewFolderNote && folderNoteOpen && viewFolderNote(false); - setDBSchema(_dbschema); - value && setSchema(tables.find((f4) => f4.id == value)); +var features = [Headers, Visibility, Ordering, Pinning, Filters, Sorting, Grouping, Expanding, Pagination, RowSelection, ColumnSizing]; +function createTable(options) { + var _options$initialState; + if (options.debugAll || options.debugTable) { + console.info("Creating Table Instance..."); + } + let table = { + _features: features }; - const openView = (e4, _dbschema) => { - const views = tables.filter((f4) => f4.type != "db" && f4.def == _dbschema.id); - if (views.length == 0) { - selectView(_dbschema); - return; + const defaultOptions3 = table._features.reduce((obj, feature) => { + var _a2; + return Object.assign(obj, (_a2 = feature.getDefaultOptions) == null ? void 0 : _a2.call(feature, table)); + }, {}); + const mergeOptions = (options2) => { + if (table.options.mergeOptions) { + return table.options.mergeOptions(defaultOptions3, options2); } - selectView(_dbschema, views[0].id); - return; + return { + ...defaultOptions3, + ...options2 + }; }; - const showViewMenu = (e4, _dbschema) => { - const views = tables.filter((f4) => f4.type != "db" && f4.def == _dbschema.id); - const offset = e4.target.getBoundingClientRect(); - showSelectMenu( - { x: offset.left, y: offset.top + 30 }, - { - multi: false, - editable: false, - value: tagContexts, - options: views.map((m5) => ({ name: m5.name, value: m5.id })), - saveOptions: (_5, value) => selectView(_dbschema, value[0]), - placeholder: "Select View", - searchable: false, - showAll: true - } - ); - }; - const clearFilters = () => { - savePredicate({ - ...predicate, - filters: [], - sort: [] - }); - }; - const clearHiddenCols = () => { - savePredicate({ - ...predicate, - colsHidden: [] - }); - }; - const removeFilter = (filter) => { - const newFilters = [...predicate.filters.filter((f4) => f4.field != filter.field)]; - savePredicate({ - ...predicate, - filters: newFilters - }); - }; - const showFilterMenu = (e4) => { - const menu = new import_obsidian10.Menu(); - menu.addItem((item) => { - item.setTitle("Table View"); - item.setIcon("table-2"); - item.onClick(() => { - saveViewType("table"); - }); - }); - menu.addItem((item) => { - item.setTitle("Card View"); - item.setIcon("layout-grid"); - item.onClick(() => { - saveViewType("card"); - }); - }); - menu.addItem((item) => { - item.setTitle("List View"); - item.setIcon("layout-list"); - item.onClick(() => { - saveViewType("list"); - }); - }); - menu.addItem((item) => { - item.setTitle("Flow View"); - item.setIcon("infinity"); - item.onClick(() => { - saveViewType("flow"); - }); - }); - menu.addSeparator(); - menu.addItem((item) => { - item.setTitle("Group By"); - item.setIcon("columns"); - item.onClick(() => { - showGroupByMenu(e4); - }); - }); - menu.addItem((item) => { - item.setTitle("Sort By"); - item.setIcon("sort-desc"); - item.onClick(() => { - showSortMenu(e4); - }); - }); - menu.addSeparator(); - menu.addItem((item) => { - item.setTitle("New Filter"); - item.setIcon("filter"); - item.onClick(() => { - showAddFilterMenu(e4); - }); - }); - menu.addItem((item) => { - item.setTitle("Clear Filters"); - item.setIcon("x-square"); - item.onClick(() => { - clearFilters(); - }); - }); - menu.addSeparator(); - menu.addItem((item) => { - item.setTitle("Unhide All Fields"); - item.setIcon("eye"); - item.onClick(() => { - clearHiddenCols(); - }); - }); - const offset = e4.target.getBoundingClientRect(); - menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); + const coreInitialState = {}; + let initialState = { + ...coreInitialState, + ...(_options$initialState = options.initialState) != null ? _options$initialState : {} }; - const addSort = (_5, sort) => { + table._features.forEach((feature) => { var _a2; - const field = sort[0]; - const fieldType = (_a2 = filteredCols.find((f4) => f4.name + f4.table == field)) == null ? void 0 : _a2.type; - if (fieldType) { - const type = defaultPredicateFnForType(fieldType, sortFnTypes); - const newSort = { - field, - type + var _feature$getInitialSt; + initialState = (_feature$getInitialSt = (_a2 = feature.getInitialState) == null ? void 0 : _a2.call(feature, initialState)) != null ? _feature$getInitialSt : initialState; + }); + const queued = []; + let queuedTimeout = false; + const coreInstance = { + _features: features, + options: { + ...defaultOptions3, + ...options + }, + initialState, + _queue: (cb) => { + queued.push(cb); + if (!queuedTimeout) { + queuedTimeout = true; + Promise.resolve().then(() => { + while (queued.length) { + queued.shift()(); + } + queuedTimeout = false; + }).catch((error) => setTimeout(() => { + throw error; + })); + } + }, + reset: () => { + table.setState(table.initialState); + }, + setOptions: (updater) => { + const newOptions = functionalUpdate(updater, table.options); + table.options = mergeOptions(newOptions); + }, + getState: () => { + return table.options.state; + }, + setState: (updater) => { + var _a2, _b2; + (_b2 = (_a2 = table.options).onStateChange) == null ? void 0 : _b2.call(_a2, updater); + }, + _getRowId: (row, index, parent) => { + var _a2, _b2; + var _table$options$getRow; + return (_table$options$getRow = (_b2 = (_a2 = table.options).getRowId) == null ? void 0 : _b2.call(_a2, row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join(".") : index}`; + }, + getCoreRowModel: () => { + if (!table._getCoreRowModel) { + table._getCoreRowModel = table.options.getCoreRowModel(table); + } + return table._getCoreRowModel(); + }, + getRowModel: () => { + return table.getPaginationRowModel(); + }, + getRow: (id2) => { + const row = table.getRowModel().rowsById[id2]; + if (!row) { + if (true) { + throw new Error(`getRow expected an ID, but got ${id2}`); + } + throw new Error(); + } + return row; + }, + _getDefaultColumnDef: memo(() => [table.options.defaultColumn], (defaultColumn) => { + var _defaultColumn; + defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {}; + return { + header: (props2) => { + const resolvedColumnDef = props2.header.column.columnDef; + if (resolvedColumnDef.accessorKey) { + return resolvedColumnDef.accessorKey; + } + if (resolvedColumnDef.accessorFn) { + return resolvedColumnDef.id; + } + return null; + }, + cell: (props2) => { + var _a2, _b2; + var _props$renderValue$to; + return (_props$renderValue$to = (_b2 = (_a2 = props2.renderValue()) == null ? void 0 : _a2.toString) == null ? void 0 : _b2.call(_a2)) != null ? _props$renderValue$to : null; + }, + ...table._features.reduce((obj, feature) => { + var _a2; + return Object.assign(obj, (_a2 = feature.getDefaultColumnDef) == null ? void 0 : _a2.call(feature)); + }, {}), + ...defaultColumn }; - savePredicate({ - ...predicate, - sort: [...predicate.sort.filter((s5) => s5.field != newSort.field), newSort] - }); - } - }; - const saveGroupBy = (_5, groupBy2) => { - savePredicate({ - ...predicate, - groupBy: groupBy2 - }); - }; - const removeSort = (sort) => { - const newSort = [...predicate.sort.filter((f4) => f4.field != sort.field)]; - savePredicate({ - ...predicate, - sort: newSort - }); - }; - const addFilter = (_5, filter) => { - var _a2; - const field = filter[0]; - const fieldType = (_a2 = filteredCols.find((f4) => f4.name + f4.table == field)) == null ? void 0 : _a2.type; - if (fieldType) { - const type = defaultPredicateFnForType(fieldType, filterFnTypes); - const newFilter = fieldType == "boolean" ? { - field, - type, - value: "true" - } : { - field, - type, - value: "" + }, { + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugColumns; + }, + key: "getDefaultColumnDef" + }), + _getColumnDefs: () => table.options.columns, + getAllColumns: memo(() => [table._getColumnDefs()], (columnDefs) => { + const recurseColumns = function(columnDefs2, parent, depth) { + if (depth === void 0) { + depth = 0; + } + return columnDefs2.map((columnDef) => { + const column = createColumn(table, columnDef, depth, parent); + const groupingColumnDef = columnDef; + column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : []; + return column; + }); }; - savePredicate({ - ...predicate, - filters: [...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter] + return recurseColumns(columnDefs); + }, { + key: "getAllColumns", + debug: () => { + var _table$options$debugA2; + return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugColumns; + } + }), + getAllFlatColumns: memo(() => [table.getAllColumns()], (allColumns) => { + return allColumns.flatMap((column) => { + return column.getFlatColumns(); }); + }, { + key: "getAllFlatColumns", + debug: () => { + var _table$options$debugA3; + return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugColumns; + } + }), + _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], (flatColumns) => { + return flatColumns.reduce((acc, column) => { + acc[column.id] = column; + return acc; + }, {}); + }, { + key: "getAllFlatColumnsById", + debug: () => { + var _table$options$debugA4; + return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugColumns; + } + }), + getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns2) => { + let leafColumns = allColumns.flatMap((column) => column.getLeafColumns()); + return orderColumns2(leafColumns); + }, { + key: "getAllLeafColumns", + debug: () => { + var _table$options$debugA5; + return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugColumns; + } + }), + getColumn: (columnId) => { + const column = table._getAllFlatColumnsById()[columnId]; + if (!column) { + if (true) { + console.warn(`[Table] Column with id ${columnId} does not exist.`); + } + throw new Error(); + } + return column; } }; - const changeSortMenu = (e4, sort) => { + Object.assign(table, coreInstance); + table._features.forEach((feature) => { var _a2; - const offset = e4.target.getBoundingClientRect(); - const saveSort = (_5, newType) => { - const type = newType[0]; - const newSort = { - ...sort, - type - }; - savePredicate({ - ...predicate, - sort: [...predicate.sort.filter((s5) => s5.field != newSort.field), newSort] - }); - }; - const fieldType = (_a2 = filteredCols.find((f4) => f4.name + f4.table == sort.field)) == null ? void 0 : _a2.type; - const sortsForType = predicateFnsForType(fieldType, sortFnTypes); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - options: sortsForType.map((f4) => ({ - name: sortFnTypes[f4].label, - value: f4 - })), - saveOptions: saveSort, - placeholder: "Select Sort", - searchable: false, - showAll: true - }); + return Object.assign(table, (_a2 = feature.createTable) == null ? void 0 : _a2.call(feature, table)); + }); + return table; +} +function createCell(table, row, column, columnId) { + const getRenderValue = () => { + var _cell$getValue; + return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue; }; - const showColsMenu = (e4) => { - const offset = e4.target.getBoundingClientRect(); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - options: filteredCols.map((f4) => ({ - name: f4.name + f4.table, - value: f4.name + f4.table - })), - saveOptions: addFilter, - placeholder: "Select Field", - searchable: false, - showAll: true - }); + const cell = { + id: `${row.id}_${column.id}`, + row, + column, + getValue: () => row.getValue(columnId), + renderValue: getRenderValue, + getContext: memo(() => [table, column, row, cell], (table2, column2, row2, cell2) => ({ + table: table2, + column: column2, + row: row2, + cell: cell2, + getValue: cell2.getValue, + renderValue: cell2.renderValue + }), { + key: "cell.getContext", + debug: () => table.options.debugAll + }) }; - const changeFilterMenu = (e4, filter) => { + table._features.forEach((feature) => { var _a2; - const offset = e4.target.getBoundingClientRect(); - const saveFilter = (_5, newType) => { - const type = newType[0]; - const newFilter = { - ...filter, - type - }; - savePredicate({ - ...predicate, - filters: [...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter] + Object.assign(cell, (_a2 = feature.createCell) == null ? void 0 : _a2.call(feature, cell, column, row, table)); + }, {}); + return cell; +} +var createRow = (table, id2, original, rowIndex, depth, subRows) => { + var _a2; + let row = { + id: id2, + index: rowIndex, + original, + depth, + _valuesCache: {}, + _uniqueValuesCache: {}, + getValue: (columnId) => { + if (row._valuesCache.hasOwnProperty(columnId)) { + return row._valuesCache[columnId]; + } + const column = table.getColumn(columnId); + if (!column.accessorFn) { + return void 0; + } + row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex); + return row._valuesCache[columnId]; + }, + getUniqueValues: (columnId) => { + if (row._uniqueValuesCache.hasOwnProperty(columnId)) { + return row._uniqueValuesCache[columnId]; + } + const column = table.getColumn(columnId); + if (!column.accessorFn) { + return void 0; + } + if (!column.columnDef.getUniqueValues) { + row._uniqueValuesCache[columnId] = [row.getValue(columnId)]; + return row._uniqueValuesCache[columnId]; + } + row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex); + return row._uniqueValuesCache[columnId]; + }, + renderValue: (columnId) => { + var _row$getValue; + return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue; + }, + subRows: subRows != null ? subRows : [], + getLeafRows: () => flattenBy(row.subRows, (d5) => d5.subRows), + getAllCells: memo(() => [table.getAllLeafColumns()], (leafColumns) => { + return leafColumns.map((column) => { + return createCell(table, row, column, column.id); }); - }; - const fieldType = (_a2 = filteredCols.find((f4) => f4.name + f4.table == filter.field)) == null ? void 0 : _a2.type; - const filtersForType = predicateFnsForType(fieldType, filterFnTypes); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - options: filtersForType.map((f4) => ({ - name: filterFnTypes[f4].label, - value: f4 - })), - saveOptions: saveFilter, - placeholder: "Select Filter", - searchable: false, - showAll: true - }); - }; - const showAddFilterMenu = (e4) => { - const offset = e4.target.getBoundingClientRect(); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - options: filteredCols.map((f4) => ({ - name: f4.name + f4.table, - value: f4.name + f4.table - })), - saveOptions: addFilter, - placeholder: "Select Field", - searchable: false, - showAll: true - }); - }; - const showSortMenu = (e4) => { - const offset = e4.target.getBoundingClientRect(); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - options: filteredCols.map((f4) => ({ - name: f4.name + f4.table, - value: f4.name + f4.table - })), - saveOptions: addSort, - placeholder: "Select Sort", - searchable: false, - showAll: true - }); - }; - const showGroupByMenu = (e4) => { - const offset = e4.target.getBoundingClientRect(); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - options: filteredCols.filter((f4) => f4.primary != "true").map((f4) => ({ - name: f4.name + f4.table, - value: f4.name + f4.table - })), - saveOptions: saveGroupBy, - placeholder: "Group By", - searchable: false, - showAll: true - }); + }, { + key: "row.getAllCells", + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; + } + }), + _getAllCellsByColumnId: memo(() => [row.getAllCells()], (allCells) => { + return allCells.reduce((acc, cell) => { + acc[cell.column.id] = cell; + return acc; + }, {}); + }, { + key: false, + debug: () => { + var _table$options$debugA2; + return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; + } + }) }; - const showFMMenu = (e4) => { - const saveFM = () => { - data.forEach((f4) => { - const file = getAbstractFileAtPath(app, f4.File); - if (file && file instanceof import_obsidian10.TFile) { - saveContextToFile(file, cols, f4); + for (let i4 = 0; i4 < table._features.length; i4++) { + const feature = table._features[i4]; + Object.assign(row, (_a2 = feature == null ? void 0 : feature.createRow) == null ? void 0 : _a2.call(feature, row, table)); + } + return row; +}; +function getCoreRowModel() { + return (table) => memo(() => [table.options.data], (data) => { + const rowModel = { + rows: [], + flatRows: [], + rowsById: {} + }; + const accessRows = function(originalRows, depth, parent) { + var _a2; + if (depth === void 0) { + depth = 0; + } + const rows = []; + for (let i4 = 0; i4 < originalRows.length; i4++) { + const row = createRow(table, table._getRowId(originalRows[i4], i4, parent), originalRows[i4], i4, depth); + rowModel.flatRows.push(row); + rowModel.rowsById[row.id] = row; + rows.push(row); + if (table.options.getSubRows) { + row.originalSubRows = table.options.getSubRows(originalRows[i4], i4); + if ((_a2 = row.originalSubRows) == null ? void 0 : _a2.length) { + row.subRows = accessRows(row.originalSubRows, depth + 1, row); + } } - }); + } + return rows; }; - const getFM = async () => { - const table = tableData; - const files = data.map((c4) => c4.File); - const importDV = (files2) => { - return files2.reduce((p3, c4) => { - const dvValues = dataViewAPI.page(c4); - const fmKeys = uniqCaseInsensitive(Object.keys(dvValues != null ? dvValues : {}).filter((f4, i4, self2) => !self2.find((g4, j4) => g4.toLowerCase().replace(/\s/g, "-") == f4.toLowerCase().replace(/\s/g, "-") && i4 > j4) ? true : false).filter((f4) => f4 != "file")); - return { - uniques: [], - cols: uniqCaseInsensitive([...p3.cols, ...fmKeys]), - rows: [...p3.rows, { - File: c4, - ...fmKeys.reduce((p4, c5) => ({ ...p4, [c5]: parseFrontMatter(c5, dvValues[c5], true) }), {}) - }] - }; - }, { uniques: [], cols: [], rows: [] }); - }; - const importYAML = (files2) => { - return files2.map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4).reduce((p3, c4) => { - const fm = frontMatterForFile(c4); - const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); - return { - uniques: [], - cols: (0, import_lodash3.uniq)([...p3.cols, ...fmKeys]), - rows: [...p3.rows, { - File: c4.path, - ...fmKeys.reduce((p4, c5) => ({ ...p4, [c5]: parseFrontMatter(c5, fm[c5], false) }), {}) - }] - }; - }, { uniques: [], cols: [], rows: [] }); - }; - const yamlTableData = dataViewAPI ? importDV(files) : importYAML(files); - const yamlTypes = guestimateTypes(files, dataViewAPI ? true : false); - const newTable2 = mergeTableData(table, yamlTableData, yamlTypes); - saveDB2(newTable2); - }; - const menu = new import_obsidian10.Menu(); - if (dataViewAPI) { - menu.addItem((menuItem) => { - menuItem.setIcon("file-up"); - menuItem.setTitle("Import All Dataview Fields"); - menuItem.onClick(() => { - getFM(); - }); - }); + rowModel.rows = accessRows(data); + return rowModel; + }, { + key: "getRowModel", + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; + }, + onChange: () => { + table._autoResetPageIndex(); } - if (app.fileManager.processFrontMatter) { - menu.addItem((menuItem) => { - menuItem.setIcon("file-down"); - menuItem.setTitle("Save All Fields to Files"); - menuItem.onClick(() => { - saveFM(); - }); - }); + }); +} +function getGroupedRowModel() { + return (table) => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => { + if (!rowModel.rows.length || !grouping.length) { + return rowModel; } - ; - menu.addItem((menuItem) => { - menuItem.setIcon("log-in"); - menuItem.setTitle("Merge Fields"); - menuItem.onClick(() => { - showMergeColumnModal(); + const existingGrouping = grouping.filter((columnId) => table.getColumn(columnId)); + const groupedFlatRows = []; + const groupedRowsById = {}; + const groupUpRecursively = function(rows, depth, parentId) { + if (depth === void 0) { + depth = 0; + } + if (depth >= existingGrouping.length) { + return rows.map((row) => { + row.depth = depth; + groupedFlatRows.push(row); + groupedRowsById[row.id] = row; + if (row.subRows) { + row.subRows = groupUpRecursively(row.subRows, depth + 1); + } + return row; + }); + } + const columnId = existingGrouping[depth]; + const rowGroupsMap = groupBy(rows, columnId); + const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => { + let [groupingValue, groupedRows2] = _ref; + let id2 = `${columnId}:${groupingValue}`; + id2 = parentId ? `${parentId}>${id2}` : id2; + const subRows = groupUpRecursively(groupedRows2, depth + 1, id2); + const leafRows = depth ? flattenBy(groupedRows2, (row2) => row2.subRows) : groupedRows2; + const row = createRow(table, id2, leafRows[0].original, index, depth); + Object.assign(row, { + groupingColumnId: columnId, + groupingValue, + subRows, + leafRows, + getValue: (columnId2) => { + if (existingGrouping.includes(columnId2)) { + if (row._valuesCache.hasOwnProperty(columnId2)) { + return row._valuesCache[columnId2]; + } + if (groupedRows2[0]) { + var _groupedRows$0$getVal; + row._valuesCache[columnId2] = (_groupedRows$0$getVal = groupedRows2[0].getValue(columnId2)) != null ? _groupedRows$0$getVal : void 0; + } + return row._valuesCache[columnId2]; + } + if (row._groupingValuesCache.hasOwnProperty(columnId2)) { + return row._groupingValuesCache[columnId2]; + } + const column = table.getColumn(columnId2); + const aggregateFn = column.getAggregationFn(); + if (aggregateFn) { + row._groupingValuesCache[columnId2] = aggregateFn(columnId2, leafRows, groupedRows2); + return row._groupingValuesCache[columnId2]; + } + } + }); + subRows.forEach((subRow) => { + groupedFlatRows.push(subRow); + groupedRowsById[subRow.id] = subRow; + }); + return row; }); + return aggregatedGroupedRows; + }; + const groupedRows = groupUpRecursively(rowModel.rows, 0, ""); + groupedRows.forEach((subRow) => { + groupedFlatRows.push(subRow); + groupedRowsById[subRow.id] = subRow; }); - const offset = e4.target.getBoundingClientRect(); - menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); - }; - const mergeColumn = (fromCol, toCol) => { - const fromTable = fromCol.table == "" ? tableData : contextTable[fromCol.table]; - if (toCol.table == "") { - saveDB2({ - ...tableData, - rows: tableData.rows.map((r3, i4) => { - const foundRow = fromTable.rows.find((f4) => f4.File == r3.File); - return foundRow ? { ...r3, [toCol.name]: foundRow[fromCol.name] } : r3; - }) + return { + rows: groupedRows, + flatRows: groupedFlatRows, + rowsById: groupedRowsById + }; + }, { + key: "getGroupedRowModel", + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; + }, + onChange: () => { + table._queue(() => { + table._autoResetExpanded(); + table._autoResetPageIndex(); }); + } + }); +} +function groupBy(rows, columnId) { + const groupMap = /* @__PURE__ */ new Map(); + return rows.reduce((map, row) => { + const resKey = `${row.getValue(columnId)}`; + const previous = map.get(resKey); + if (!previous) { + map.set(resKey, [row]); } else { - saveContextDB({ - ...contextTable[toCol.table], - rows: contextTable[toCol.table].rows.map((r3, i4) => { - const foundRow = fromTable.rows.find((f4) => f4.File == r3.File); - return foundRow ? { ...r3, [toCol.name]: foundRow[fromCol.name] } : r3; - }) - }, toCol.table); + previous.push(row); } - }; - const showMergeColumnModal = () => { + return map; + }, groupMap); +} +function getExpandedRowModel() { + return (table) => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => { + if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) { + return rowModel; + } + if (!paginateExpandedRows) { + return rowModel; + } + return expandRows(rowModel); + }, { + key: "getExpandedRowModel", + debug: () => { + var _table$options$debugA; + return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; + } + }); +} +function expandRows(rowModel) { + const expandedRows = []; + const handleRow = (row) => { var _a2; - let vaultChangeModal = new MergeColumnModal( - [ - ...(_a2 = filteredCols == null ? void 0 : filteredCols.map((f4) => ({ ...f4, table: "" }))) != null ? _a2 : [], - ...tagContexts.reduce((p3, c4) => { - var _a3, _b2; - return [...p3, ...(_b2 = (_a3 = contextTable[c4]) == null ? void 0 : _a3.cols.filter((f4) => f4.name != "File" && f4.hidden != "true" && f4.type != "fileprop").map((f4) => ({ ...f4, table: c4 }))) != null ? _b2 : []]; - }, []) - ], - mergeColumn - ); - vaultChangeModal.open(); - }; - const showSaveViewModal = () => { - let vaultChangeModal = new SaveViewModal(schema, saveSchema, "new view"); - vaultChangeModal.open(); - }; - const selectFilterValue = (e4, filter) => { - var _a2, _b2, _c2; - switch (filterFnTypes[filter.type].valueType) { - case "text": - case "number": - { - const menu = new import_obsidian10.Menu(); - menu.setUseNativeMenu(false); - const saveFilterValue = (value) => { - const newFilter = { - ...filter, - value - }; - savePredicate({ - ...predicate, - filters: [...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter] - }); - }; - menu.addItem((menuItem) => { - inputMenuItem(menuItem, filter.value, (value) => saveFilterValue(value)); - menuItem.setIcon("type"); - }); - const offset = e4.target.getBoundingClientRect(); - menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); - } - break; - case "date": { - const saveValue = (date2) => { - const newFilter = { - ...filter, - value: date2.valueOf().toString() - }; - savePredicate({ - ...predicate, - filters: [...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter] - }); - }; - const offset = e4.target.getBoundingClientRect(); - const date = new Date(filter.value); - showDatePickerMenu({ x: offset.left, y: offset.top + 30 }, date.getTime() ? date : null, saveValue); - break; - } - case "list": - { - const col = cols.find((f4) => f4.name + f4.table == filter.field); - const saveOptions = (options, values) => { - const newFilter = { - ...filter, - value: values.join(",") - }; - savePredicate({ - ...predicate, - filters: [...predicate.filters.filter((s5) => s5.field != newFilter.field), newFilter] - }); - }; - if (col.type.startsWith("option")) { - const offset = e4.target.getBoundingClientRect(); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: true, - editable: false, - value: splitString(filter.value), - options: splitString(col.value).map((f4) => ({ - name: f4, - value: f4 - })), - saveOptions, - placeholder: "Select Options", - searchable: true, - showAll: true - }); - } else if (col.type.startsWith("context")) { - const contextData = (_b2 = (_a2 = contextTable[col.table]) == null ? void 0 : _a2.rows) != null ? _b2 : []; - const offset = e4.target.getBoundingClientRect(); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: true, - editable: false, - value: splitString(filter.value), - options: (_c2 = contextData.map((f4) => ({ name: filePathToString(f4["File"]), value: f4["File"] }))) != null ? _c2 : [], - saveOptions, - placeholder: "Select Options", - searchable: true, - showAll: true - }); - } - } - break; + expandedRows.push(row); + if (((_a2 = row.subRows) == null ? void 0 : _a2.length) && row.getIsExpanded()) { + row.subRows.forEach(handleRow); } }; - const saveNewSchemas = (_schema) => { - const newSchema = { - ..._schema, - id: uniqueNameFromString(sanitizeTableName(_schema.id), tables.map((f4) => f4.id)) - }; - saveSchema(newSchema).then((f4) => saveDB2({ - schema: newSchema, - cols: defaultTableFields.map((f5) => ({ ...f5, schemaId: newSchema.id })), - rows: [] - })); + rowModel.rows.forEach(handleRow); + return { + rows: expandedRows, + flatRows: rowModel.flatRows, + rowsById: rowModel.rowsById }; - const newTable = (e4) => { - let vaultChangeModal = new SaveViewModal({ - id: "", - name: "", - type: "db" - }, saveNewSchemas, "new table"); - vaultChangeModal.open(); +} + +// node_modules/@tanstack/react-table/build/lib/index.mjs +function flexRender(Comp, props2) { + return !Comp ? null : isReactComponent(Comp) ? /* @__PURE__ */ h(Comp, props2) : Comp; +} +function isReactComponent(component) { + return isClassComponent(component) || typeof component === "function" || isExoticComponent(component); +} +function isClassComponent(component) { + return typeof component === "function" && (() => { + const proto = Object.getPrototypeOf(component); + return proto.prototype && proto.prototype.isReactComponent; + })(); +} +function isExoticComponent(component) { + return typeof component === "object" && typeof component.$$typeof === "symbol" && ["react.memo", "react.forward_ref"].includes(component.$$typeof.description); +} +function useReactTable(options) { + const resolvedOptions = { + state: {}, + onStateChange: () => { + }, + renderFallbackValue: null, + ...options }; - const viewContextMenu = (e4, _schema) => { - const fileMenu = new import_obsidian10.Menu(); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Rename Table"); - menuItem.onClick(() => { - let vaultChangeModal = new SaveViewModal(_schema, (s5) => saveSchema(s5), "rename table"); - vaultChangeModal.open(); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Delete Table"); - menuItem.onClick(() => { - deleteSchema(_schema); - }); - }); - if (isMouseEvent(e4)) { - fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); - } else { - fileMenu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); + const [tableRef] = p2(() => ({ + current: createTable(resolvedOptions) + })); + const [state, setState] = p2(() => tableRef.current.initialState); + tableRef.current.setOptions((prev) => ({ + ...prev, + ...options, + state: { + ...state, + ...options.state + }, + onStateChange: (updater) => { + var _a2; + setState(updater); + (_a2 = options.onStateChange) == null ? void 0 : _a2.call(options, updater); } - }; - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, isFolderContext && /* @__PURE__ */ bn.createElement(TagSelector, { - plugin: props2.plugin - }), /* @__PURE__ */ bn.createElement("div", { - className: "mk-view-selector" - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-table-selector" - }, viewFolderNote && /* @__PURE__ */ bn.createElement("button", { - className: `mk-folder-note ${folderNoteOpen ? "mk-is-active" : ""}`, - onClick: () => viewFolderNote(true) - }, props2.folderNoteName), tables.filter((f4) => f4.type == "db").map((f4) => /* @__PURE__ */ bn.createElement("div", { - className: `${!folderNoteOpen && (dbSchema == null ? void 0 : dbSchema.id) == f4.id ? "mk-is-active" : ""}`, - onContextMenu: (e4) => !f4.primary && viewContextMenu(e4, f4) - }, /* @__PURE__ */ bn.createElement("button", { - onClick: (e4) => openView(e4, f4) - }, f4.name), tables.filter((g4) => g4.type != "db" && g4.def == f4.id).length > 1 && /* @__PURE__ */ bn.createElement("button", { - className: "mk-icon-xsmall mk-collapse", - onClick: (e4) => showViewMenu(e4, f4), - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse"] } - }))), isFolderContext && /* @__PURE__ */ bn.createElement("button", { - onClick: (e4) => newTable(e4) - }, "+ Table")), /* @__PURE__ */ bn.createElement("span", null), !props2.folderNoteOpen && /* @__PURE__ */ bn.createElement("div", { - className: "mk-view-options" - }, /* @__PURE__ */ bn.createElement(SearchBar, { - setSearchString - }), /* @__PURE__ */ bn.createElement("button", { - onClick: (e4) => showFilterMenu(e4), - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-view-options"] } - }), /* @__PURE__ */ bn.createElement("button", { - onClick: (e4) => showFMMenu(e4), - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-options"] } - }))), (predicate.filters.length > 0 || predicate.sort.length > 0 || predicate.groupBy.length > 0) && !folderNoteOpen && /* @__PURE__ */ bn.createElement("div", { - className: "mk-filter-bar" - }, predicate.groupBy.length > 0 && /* @__PURE__ */ bn.createElement("div", { - className: "mk-filter" - }, /* @__PURE__ */ bn.createElement("span", null, "Group By"), /* @__PURE__ */ bn.createElement("span", { - onClick: (e4) => showGroupByMenu(e4) - }, predicate.groupBy[0]), /* @__PURE__ */ bn.createElement("div", { - onClick: () => saveGroupBy(null, []), - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } - })), predicate.sort.map((f4) => /* @__PURE__ */ bn.createElement("div", { - className: "mk-filter" - }, /* @__PURE__ */ bn.createElement("span", null, f4.field), /* @__PURE__ */ bn.createElement("span", { - onClick: (e4) => changeSortMenu(e4, f4) - }, sortFnTypes[f4.type].label), /* @__PURE__ */ bn.createElement("div", { - onClick: () => removeSort(f4), - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } - }))), predicate.filters.map((f4) => /* @__PURE__ */ bn.createElement("div", { - className: "mk-filter" - }, /* @__PURE__ */ bn.createElement("span", null, f4.field), /* @__PURE__ */ bn.createElement("span", { - onClick: (e4) => changeFilterMenu(e4, f4) - }, filterFnTypes[f4.type].label), /* @__PURE__ */ bn.createElement(FilterValueSpan, { - col: cols.find((c4) => c4.name + c4.table == f4.field), - filter: f4, - selectFilterValue - }), /* @__PURE__ */ bn.createElement("div", { - onClick: () => removeFilter(f4), - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } - }))), /* @__PURE__ */ bn.createElement("span", null), /* @__PURE__ */ bn.createElement("button", { - className: "mk-filter-add mk-icon-small", - onClick: () => showSaveViewModal() - }, /* @__PURE__ */ bn.createElement("div", { - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-stack"] } - }), "Save View"))); -}; -var FilterValueSpan = (props2) => { - var _a2; - const { filter, selectFilterValue } = props2; - const fieldType = (_a2 = props2.col) == null ? void 0 : _a2.type; - if (fieldType == "boolean" || !fieldType) { - return /* @__PURE__ */ bn.createElement(bn.Fragment, null); - } else if (filter.value.length == 0) { - return /* @__PURE__ */ bn.createElement("span", { - onClick: (e4) => selectFilterValue(e4, filter) - }, "Select"); - } else if (fieldType.startsWith("option") || fieldType.startsWith("context")) { - const options = splitString(filter.value); - return /* @__PURE__ */ bn.createElement("span", { - onClick: (e4) => selectFilterValue(e4, filter) - }, " ", options.map((f4) => /* @__PURE__ */ bn.createElement("span", null, f4))); - } - return /* @__PURE__ */ bn.createElement("span", { - onClick: (e4) => selectFilterValue(e4, filter) - }, filter.value); -}; + })); + return tableRef.current; +} -// src/cm-extensions/markSans/callout.tsx -var import_view = require("@codemirror/view"); -var import_language = require("@codemirror/language"); -var import_state = require("@codemirror/state"); -var portalTypeAnnotation = import_state.Annotation.define(); -var flowIDAnnotation = import_state.Annotation.define(); -var flowIDStateField = import_state.StateField.define({ - create: () => void 0, - update(value, tr) { - if (tr.annotation(flowIDAnnotation)) - return tr.annotation(flowIDAnnotation); - return value; - } -}); -var flowTypeStateField = import_state.StateField.define({ - create: () => "none", - update(value, tr) { - if (tr.annotation(portalTypeAnnotation)) - return tr.annotation(portalTypeAnnotation); - return value; +// src/components/ui/menus/menu.tsx +var import_obsidian6 = require("obsidian"); + +// src/components/ui/libs/react-tags/concerns/focusNextElement.js +function focusNextElement(scope, currentTarget) { + const interactiveEls = scope.querySelectorAll("a,button,input"); + const currentEl = Array.prototype.findIndex.call( + interactiveEls, + (element) => element === currentTarget + ); + const nextEl = interactiveEls[currentEl - 1] || interactiveEls[currentEl + 1]; + if (nextEl) { + nextEl.focus(); } -}); -var calloutField = import_state.StateField.define({ - create() { - return import_view.Decoration.none; - }, - update(value, tr) { - if (tr.state.field(flowTypeStateField) != "doc") { - return value; - } - let builder = new import_state.RangeSetBuilder(); - let nodes2 = []; - (0, import_language.syntaxTree)(tr.state).iterate({ - enter: ({ name, from, to }) => { - nodes2.push({ name, from, to }); - } - }); - const nextQuote = (ns, to) => { - const nq = ns.find( - (f4) => f4.from == to + 1 && f4.name.contains("HyperMD-quote") - ); - if (nq) { - return nextQuote(ns, nq.to); +} + +// src/components/ui/libs/react-tags/Input.tsx +var SIZER_STYLES = { + position: "absolute", + width: 0, + height: 0, + visibility: "hidden", + overflow: "scroll", + whiteSpace: "pre" +}; +var STYLE_PROPS = [ + "fontSize", + "fontFamily", + "fontWeight", + "fontStyle", + "letterSpacing", + "textTransform" +]; +var Input = k3( + (props2, input) => { + const { classNames: classNames8, inputAttributes, inputEventHandlers, index } = props2; + const sizer = _2(null); + const [inputWidth, setInputWidth] = p2(null); + const [query, setQuery] = p2(""); + const [placeholderText, setPlaceholderText] = p2(""); + h2(() => { + copyInputStyles(); + updateInputWidth(); + setTimeout(() => { + input.current.focus(); + }, 50); + }, []); + h2(() => { + if (query !== props2.query || placeholderText !== props2.placeholderText) { + setQuery(props2.query); + setPlaceholderText(props2.placeholderText); + updateInputWidth(); + } + }, [props2.query, props2.placeholderText]); + const copyInputStyles = () => { + const inputStyle = window.getComputedStyle(input.current); + STYLE_PROPS.forEach((prop) => { + sizer.current.style[prop] = inputStyle[prop]; + }); + }; + const updateInputWidth = () => { + let _inputWidth; + _inputWidth = Math.ceil(sizer.current.scrollWidth) + 2; + if (_inputWidth !== inputWidth) { + setInputWidth(_inputWidth); } - return to; }; - const previous = value.iter(); - const previousSpecs = []; - while (previous.value !== null) { - previousSpecs.push(previous.value.spec.widget.info); - previous.next(); + return /* @__PURE__ */ bn.createElement("div", { + className: classNames8.searchWrapper + }, /* @__PURE__ */ bn.createElement("input", { + ...inputAttributes, + ...inputEventHandlers, + ref: input, + value: query, + placeholder: placeholderText, + className: classNames8.searchInput, + role: "combobox", + style: { width: "100%" } + }), /* @__PURE__ */ bn.createElement("div", { + ref: sizer, + style: SIZER_STYLES + }, query || placeholderText)); + } +); +var Input_default = Input; + +// src/components/ui/libs/react-tags/Suggestions.tsx +function markIt(name, query) { + const regexp = matchAny(query); + return name.replace(regexp, "$&"); +} +var SuggestionComponent = (props2) => { + const ref = _2(null); + h2(() => { + var _a2; + if (props2.active) { + (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.scrollIntoViewIfNeeded(); } - let index = 0; - nodes2.map(({ name, from, to }) => { - if (name.contains("HyperMD-callout")) { - const existingCallout = previousSpecs[index]; - const endQuote = nextQuote(nodes2, to); - const lineStart = tr.state.doc.lineAt(from).number; - const lineEnd = tr.state.doc.lineAt(endQuote).number; - if (existingCallout) { - builder.add( - from, - endQuote + 1, - calloutBlock( - { from: lineStart, to: lineEnd }, - tr.state.sliceDoc(from, endQuote), - existingCallout.id - ) - ); - } else { - builder.add( - from, - endQuote + 1, - calloutBlock( - { from: lineStart, to: lineEnd }, - tr.state.sliceDoc(from, endQuote), - genId2() - ) - ); - } - index++; - } - }); - const dec = builder.finish(); - return dec; - }, - provide: (f4) => import_view.EditorView.decorations.from(f4) -}); -var CalloutWidget = class extends import_view.WidgetType { - constructor(info) { - super(); - this.info = info; - } - eq(other) { - return other.info.id === this.info.id; - } - toDOM() { - const parseTextToCallout = (text2) => { - if (!this.info.text) { - return { icon: "", title: "" }; - } - const stringArray = text2.split("\n"); - const titleRegex = RegExp(/.*\[!(\w*)\]\s(.*)/); - const title = titleRegex.exec(stringArray[0]); - if (!title || title.length < 3) { - return { icon: "", title: "" }; - } - return { - icon: title[1], - title: title[2] - }; - }; - const callOutData = parseTextToCallout(this.info.text); - const div = document.createElement("div"); - div.toggleClass("callout", true); - const divTitle = div.createDiv("div"); - divTitle.toggleClass("callout-title", true); - const div2 = div.createDiv("div"); - div2.toggleClass("callout-content", true); - div2.setAttribute("id", "mk-callout-" + this.info.id); - return div; - } -}; -var calloutBlock = (range, text2, id2) => import_view.Decoration.widget({ - widget: new CalloutWidget({ range, text: text2, id: id2 }), - block: true -}); - -// src/cm-extensions/flowEditor/flowEditor.tsx -var import_view3 = require("@codemirror/view"); -var import_state3 = require("@codemirror/state"); - -// src/utils/codemirror.ts -var import_language2 = require("@codemirror/language"); -var getActiveCM = () => { - let rcm; - app.workspace.iterateLeaves((leaf) => { - var _a2; - const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; - if (cm == null ? void 0 : cm.hasFocus) { - rcm = cm; - return true; + }, [props2.active]); + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.item.onToggle && /* @__PURE__ */ bn.createElement("div", null, "Toggle"), /* @__PURE__ */ bn.createElement("span", { + ref, + dangerouslySetInnerHTML: { + __html: markIt(props2.item.name, props2.query) } - }, app.workspace["rootSplit"]); - return rcm; -}; -var getActiveMarkdownView = () => { - let rv; - app.workspace.iterateLeaves((leaf) => { - var _a2; - const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; - if (cm == null ? void 0 : cm.hasFocus) { - rv = leaf.view; - return true; + }), props2.item.description && /* @__PURE__ */ bn.createElement("span", { + className: "mk-description", + ref, + dangerouslySetInnerHTML: { + __html: markIt(props2.item.description, props2.query) } - }, app.workspace["rootSplit"]); - return rv; + }), props2.item.removeable && /* @__PURE__ */ bn.createElement("div", null, "Remove")); }; -function iterateTreeAtPos(pos, state, iterateFns) { - (0, import_language2.syntaxTree)(state).iterate({ ...iterateFns, from: pos, to: pos }); -} -function iterateTreeInSelection(selection, state, iterateFns) { - (0, import_language2.syntaxTree)(state).iterate({ - ...iterateFns, - from: selection.from, - to: selection.to +var Suggestions = (props2) => { + const timer = _2(null); + const mouseOver = (e4, index) => { + if (!props2.hoverSelect) { + return; + } + timer.current && clearTimeout(timer.current); + timer.current = setTimeout(() => props2.setIndex(index), 300); + }; + const options = props2.options.map((item, index) => { + const key2 = `${props2.id}-${index}`; + const classNames8 = []; + if (props2.index === index) { + classNames8.push(props2.classNames.suggestionActive); + } + if (item.disabled) { + classNames8.push(props2.classNames.suggestionDisabled); + } + return /* @__PURE__ */ bn.createElement("li", { + id: key2, + key: key2, + role: "option", + className: classNames8.join(" "), + "aria-disabled": Boolean(item.disabled), + onMouseDown: (e4) => e4.preventDefault(), + onClick: () => props2.addTag(item), + onMouseOver: (e4) => mouseOver(e4, index), + onMouseOut: (e4) => props2.hoverSelect && clearTimeout(timer.current) + }, /* @__PURE__ */ bn.createElement(SuggestionComponent, { + item, + query: props2.query, + active: index == props2.index + })); }); -} -function iterateTreeInDocument(state, iterateFns) { - (0, import_language2.syntaxTree)(state).iterate({ ...iterateFns }); -} + return /* @__PURE__ */ bn.createElement("div", { + className: props2.classNames.suggestions + }, /* @__PURE__ */ bn.createElement("ul", { + role: "listbox", + id: props2.id + }, options)); +}; +var Suggestions_default = Suggestions; -// src/cm-extensions/tooltip.ts -var import_view2 = require("@codemirror/view"); -var import_state2 = require("@codemirror/state"); -var ios = typeof navigator != "undefined" && !/Edge\/(\d+)/.exec(navigator.userAgent) && /Apple Computer/.test(navigator.vendor) && (/Mobile\/\w+/.test(navigator.userAgent) || navigator.maxTouchPoints > 2); -var Outside2 = "-10000px"; -var TooltipViewManager = class { - constructor(view, facet, createTooltipView) { - this.facet = facet; - this.createTooltipView = createTooltipView; - this.input = view.state.facet(facet); - this.tooltips = this.input.filter((t4) => t4); - this.tooltipViews = this.tooltips.map(createTooltipView); - } - update(update) { - let input = update.state.facet(this.facet); - let tooltips3 = input.filter((x5) => x5); - if (input === this.input) { - for (let t4 of this.tooltipViews) - if (t4.update) - t4.update(update); - return false; - } - let tooltipViews = []; - for (let i4 = 0; i4 < tooltips3.length; i4++) { - let tip = tooltips3[i4], known = -1; - if (!tip) - continue; - for (let i5 = 0; i5 < this.tooltips.length; i5++) { - let other = this.tooltips[i5]; - if (other && other.create == tip.create) - known = i5; - } - if (known < 0) { - tooltipViews[i4] = this.createTooltipView(tip); - } else { - let tooltipView = tooltipViews[i4] = this.tooltipViews[known]; - if (tooltipView.update) - tooltipView.update(update); - } +// src/components/ui/libs/react-tags/Tag.tsx +var TagComponent = (props2) => { + return /* @__PURE__ */ bn.createElement("button", { + type: "button", + className: props2.classNames.selectedTag, + onClick: props2.onDelete + }, /* @__PURE__ */ bn.createElement("span", { + className: props2.classNames.selectedTagName + }, props2.tag.name)); +}; +var Tag_default = TagComponent; + +// src/components/ui/libs/react-tags/ReactTags.tsx +var KEYS = { + ENTER: "Enter", + TAB: "Tab", + BACKSPACE: "Backspace", + UP_ARROW: "ArrowUp", + UP_ARROW_COMPAT: "Up", + DOWN_ARROW: "ArrowDown", + DOWN_ARROW_COMPAT: "Down" +}; +var CLASS_NAMES = { + root: "mk-options-menu", + rootFocused: "is-focused", + selected: "mk-options-menu__selected", + selectedTag: "mk-options-menu__selected-tag", + selectedTagName: "mk-options-menu__selected-tag-name", + search: "mk-options-menu__search", + searchWrapper: "mk-options-menu__search-wrapper", + searchInput: "mk-options-menu__search-input", + suggestions: "mk-options-menu__suggestions", + suggestionActive: "is-active", + suggestionDisabled: "is-disabled" +}; +var defaultProps = { + id: "ReactTags", + tags: [], + suggestionsOnly: false, + placeholderText: "Add new tag", + noSuggestionsText: null, + newTagText: null, + suggestions: [], + suggestionsFilter: defaultSuggestionsFilter, + suggestionsTransform: null, + classNames: CLASS_NAMES, + delimiters: [KEYS.ENTER], + minQueryLength: 2, + maxSuggestionsLength: 8, + inputAttributes: {}, + hoverSelect: false +}; +var findMatchIndex = (options, query) => { + return options.findIndex((option) => matchExact(query).test(option.name)); +}; +var pressDelimiter = (props2, query, index, options, addTag) => { + if (query.length >= props2.minQueryLength) { + const match2 = findMatchIndex(options, query); + const _index = index === -1 ? match2 : index; + const tag = _index > -1 ? options[_index] : null; + if (tag) { + addTag(tag); + } else { + addTag({ name: query, value: query }); } - for (let t4 of this.tooltipViews) - if (tooltipViews.indexOf(t4) < 0) - t4.dom.remove(); - this.input = input; - this.tooltips = tooltips3; - this.tooltipViews = tooltipViews; - return true; } }; -function tooltips(config = {}) { - return tooltipConfig.of(config); -} -function windowSpace() { - return { top: 0, left: 0, bottom: innerHeight, right: innerWidth }; +function defaultSuggestionsFilter(item, query) { + const regexp = matchAny(query); + return regexp.test(item.name); } -var tooltipConfig = import_state2.Facet.define({ - combine: (values) => { - var _a2, _b2, _c2; - return { - position: ios ? "absolute" : ((_a2 = values.find((conf) => conf.position)) == null ? void 0 : _a2.position) || "fixed", - parent: ((_b2 = values.find((conf) => conf.parent)) == null ? void 0 : _b2.parent) || null, - tooltipSpace: ((_c2 = values.find((conf) => conf.tooltipSpace)) == null ? void 0 : _c2.tooltipSpace) || windowSpace - }; +function getOptions(props2, query) { + let options; + if (props2.suggestionsTransform) { + options = props2.suggestionsTransform(query, props2.suggestions); + } else { + options = props2.suggestions.filter( + (item) => props2.suggestionsFilter(item, query) + ); } -}); -var tooltipPlugin = import_view2.ViewPlugin.fromClass( - class { - constructor(view) { - this.view = view; - this.inView = true; - this.lastTransaction = 0; - this.measureTimeout = -1; - var _a2; - let config = view.state.facet(tooltipConfig); - this.position = config.position; - this.parent = config.parent; - this.classes = view.themeClasses; - this.createContainer(); - this.measureReq = { - read: this.readMeasure.bind(this), - write: this.writeMeasure.bind(this), - key: this + options = options.slice(0, props2.maxSuggestionsLength); + if (props2.newTagText && findMatchIndex(options, query) === -1) { + options.push({ id: 0, name: query, value: query }); + } else if (props2.noSuggestionsText && options.length === 0) { + options.push({ + id: 0, + name: props2.noSuggestionsText, + value: "", + disabled: true + }); + } + return options; +} +var ReactTags = bn.forwardRef((_props, ref) => { + const props2 = { ...defaultProps, ..._props }; + const [options, setOptions] = p2([]); + const inputRef = _2(null); + const [query, setQuery] = p2(""); + const [focused, setFocused] = p2(false); + const [index, setIndex] = p2(0); + const onComposition = _2(false); + h2(() => { + if (ref) { + ref.current = () => { + var _a2; + if (!focused) { + (_a2 = inputRef == null ? void 0 : inputRef.current) == null ? void 0 : _a2.focus(); + setFocused(true); + return false; + } + return true; }; - this.manager = new TooltipViewManager( - view, - showTooltip, - (t4) => this.createTooltip(t4) - ); - this.intersectionObserver = typeof IntersectionObserver == "function" ? new IntersectionObserver( - (entries) => { - if (Date.now() > this.lastTransaction - 50 && entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1) - this.measureSoon(); - }, - { threshold: [1] } - ) : null; - this.observeIntersection(); - (_a2 = view.dom.ownerDocument.defaultView) == null ? void 0 : _a2.addEventListener( - "resize", - this.measureSoon = this.measureSoon.bind(this) - ); - this.maybeMeasure(); } - createContainer() { - if (this.parent) { - this.container = document.createElement("div"); - this.container.style.position = "relative"; - this.container.className = this.view.themeClasses; - this.parent.appendChild(this.container); - } else { - this.container = this.view.dom; - } + }, [focused]); + h2(() => { + var _a2; + if (index != -1 && props2.onHover && props2.hoverSelect) { + props2.onHover((_a2 = options[index]) == null ? void 0 : _a2.value); } - observeIntersection() { - if (this.intersectionObserver) { - this.intersectionObserver.disconnect(); - for (let tooltip of this.manager.tooltipViews) - this.intersectionObserver.observe(tooltip.dom); - } + }, [index, options]); + h2(() => { + if (query.length == 0 && props2.defaultSuggestions) { + setOptions(props2.defaultSuggestions); + return; } - measureSoon() { - if (this.measureTimeout < 0) - this.measureTimeout = setTimeout(() => { - this.measureTimeout = -1; - this.maybeMeasure(); - }, 50); + setOptions(getOptions(props2, query)); + }, [query, props2.suggestions]); + const container = _2(null); + const onInput = (e4) => { + if (e4.type === "compositionstart") { + onComposition.current = true; + return; } - update(update) { - if (update.transactions.length) - this.lastTransaction = Date.now(); - let updated = this.manager.update(update); - if (updated) - this.observeIntersection(); - let shouldMeasure = updated || update.geometryChanged; - let newConfig = update.state.facet(tooltipConfig); - if (newConfig.position != this.position) { - this.position = newConfig.position; - for (let t4 of this.manager.tooltipViews) - t4.dom.style.position = this.position; - shouldMeasure = true; - } - if (newConfig.parent != this.parent) { - if (this.parent) - this.container.remove(); - this.parent = newConfig.parent; - this.createContainer(); - for (let t4 of this.manager.tooltipViews) - this.container.appendChild(t4.dom); - shouldMeasure = true; - } else if (this.parent && this.view.themeClasses != this.classes) { - this.classes = this.container.className = this.view.themeClasses; - } - if (shouldMeasure) - this.maybeMeasure(); + if (e4.type === "compositionend") { + onComposition.current = false; } - createTooltip(tooltip) { - let tooltipView = tooltip.create(this.view); - tooltipView.dom.classList.add("cm-tooltip"); - if (tooltip.arrow && !tooltipView.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")) { - let arrow = document.createElement("div"); - arrow.className = "cm-tooltip-arrow"; - tooltipView.dom.appendChild(arrow); - } - tooltipView.dom.style.position = this.position; - tooltipView.dom.style.top = Outside2; - this.container.appendChild(tooltipView.dom); - if (tooltipView.mount) - tooltipView.mount(this.view); - return tooltipView; + if (onComposition.current) { + return; } - destroy() { - var _a2, _b2; - (_a2 = this.view.dom.ownerDocument.defaultView) == null ? void 0 : _a2.removeEventListener( - "resize", - this.measureSoon - ); - for (let { dom } of this.manager.tooltipViews) - dom.remove(); - (_b2 = this.intersectionObserver) == null ? void 0 : _b2.disconnect(); - clearTimeout(this.measureTimeout); + const _query = e4.target.value; + if (props2.onInput) { + props2.onInput(_query); } - readMeasure() { - let editor = this.view.dom.getBoundingClientRect(); - return { - editor, - parent: this.parent ? this.container.getBoundingClientRect() : editor, - pos: this.manager.tooltips.map((t4, i4) => { - let tv = this.manager.tooltipViews[i4]; - return tv.getCoords ? tv.getCoords(t4.pos) : this.view.coordsAtPos(t4.pos); - }), - size: this.manager.tooltipViews.map( - ({ dom }) => dom.getBoundingClientRect() - ), - space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view) - }; + if (_query.length === query.length + 1 && props2.delimiters.indexOf(query.slice(-1)) > -1) { + pressDelimiter(props2, query, index, options, addTag); + } else if (_query !== query) { + setQuery(_query); } - writeMeasure(measured) { - let { editor, space } = measured; - let others = []; - for (let i4 = 0; i4 < this.manager.tooltips.length; i4++) { - let tooltip = this.manager.tooltips[i4], tView = this.manager.tooltipViews[i4], { dom } = tView; - let pos = measured.pos[i4], size2 = measured.size[i4]; - if (!pos || pos.bottom <= Math.max(editor.top, space.top) || pos.top >= Math.min(editor.bottom, space.bottom) || pos.right < Math.max(editor.left, space.left) - 0.1 || pos.left > Math.min(editor.right, space.right) + 0.1) { - dom.style.top = Outside2; - continue; - } - let arrow = tooltip.arrow ? tView.dom.querySelector(".cm-tooltip-arrow") : null; - let arrowHeight = arrow ? 7 /* Size */ : 0; - let width = size2.right - size2.left, height = size2.bottom - size2.top; - let offset = tView.offset || noOffset, ltr = this.view.textDirection == import_view2.Direction.LTR; - let left = size2.width > space.right - space.left ? ltr ? space.left : space.right - size2.width : ltr ? Math.min( - pos.left - (arrow ? 14 /* Offset */ : 0) + offset.x, - space.right - width - ) : Math.max( - space.left, - pos.left - width + (arrow ? 14 /* Offset */ : 0) - offset.x - ); - let above = !!tooltip.above; - if (!tooltip.strictSide && (above ? pos.top - (size2.bottom - size2.top) - offset.y < space.top : pos.bottom + (size2.bottom - size2.top) + offset.y > space.bottom) && above == space.bottom - pos.bottom > pos.top - space.top) - above = !above; - let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y; - let right = left + width; - if (tView.overlap !== true) { - for (let r3 of others) - if (r3.left < right && r3.right > left && r3.top < top + height && r3.bottom > top) - top = above ? r3.top - height - 2 - arrowHeight : r3.bottom + arrowHeight + 2; - } - if (this.position == "absolute") { - dom.style.top = top - measured.parent.top + "px"; - dom.style.left = left - measured.parent.left + "px"; - } else { - dom.style.top = top + "px"; - dom.style.left = left + "px"; - } - if (arrow) - arrow.style.left = `${pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Offset */ - 7 /* Size */)}px`; - if (tView.overlap !== true) - others.push({ left, top, right, bottom: top + height }); - dom.classList.toggle("cm-tooltip-above", above); - dom.classList.toggle("cm-tooltip-below", !above); - if (tView.positioned) - tView.positioned(); + }; + const onKeyDown = (e4) => { + if (props2.delimiters.indexOf(e4.key) > -1) { + if (query || index > -1) { + e4.preventDefault(); } + pressDelimiter(props2, query, index, options, addTag); } - maybeMeasure() { - if (this.manager.tooltips.length) { - if (this.view.inView) - this.view.requestMeasure(this.measureReq); - if (this.inView != this.view.inView) { - this.inView = this.view.inView; - if (!this.inView) - for (let tv of this.manager.tooltipViews) - tv.dom.style.top = Outside2; - } - } + if (e4.key === KEYS.BACKSPACE) { + pressBackspaceKey(); } - }, - { - eventHandlers: { - scroll() { - this.maybeMeasure(); - } + if (e4.key === KEYS.UP_ARROW || e4.key === KEYS.UP_ARROW_COMPAT) { + pressUpKey(e4); + } + if (e4.key === KEYS.DOWN_ARROW || e4.key === KEYS.DOWN_ARROW_COMPAT) { + pressDownKey(e4); + } + }; + const onBlur = () => { + setFocused(false); + if (props2.onBlur) { + props2.onBlur(); + } + }; + const onFocus = () => { + setFocused(true); + if (props2.onFocus) { + props2.onFocus(); + } + }; + const onDeleteTag = (index2, event) => { + if (container.current) { + focusNextElement(container.current, event.currentTarget); + } + deleteTag(index2); + }; + const addTag = (tag) => { + if (tag.disabled) { + return; + } + if (props2.onValidate && !props2.onValidate(tag)) { + return; + } + props2.onAddition(tag); + clearInput(); + }; + const deleteTag = (i4) => { + props2.onDelete(i4); + }; + const clearInput = () => { + setQuery(""); + setIndex(-1); + }; + const clearSelectedIndex = () => { + setIndex(-1); + }; + const pressUpKey = (e4) => { + e4.preventDefault(); + const size = options.length - 1; + setIndex(index <= 0 ? size : index - 1); + }; + const pressDownKey = (e4) => { + e4.preventDefault(); + const size = options.length - 1; + setIndex((i4) => i4 >= size ? 0 : i4 + 1); + }; + function pressBackspaceKey() { + if (!query.length) { + deleteTag(props2.tags.length - 1); } } -); -var baseTheme = import_view2.EditorView.baseTheme({ - ".cm-tooltip": { - zIndex: 100 + const focusInput = () => { + inputRef.current.focus(); + }; + const inputEventHandlers = { + onChange: onInput, + onBlur, + onFocus, + onInput: () => { + }, + onKeyDown, + onCompositionEnd: onInput, + onCompositionStart: onInput + }; + const expanded = focused && query.length >= props2.minQueryLength; + const classNames8 = Object.assign({}, CLASS_NAMES, props2.classNames); + const rootClassNames = [classNames8.root]; + focused && rootClassNames.push(classNames8.rootFocused); + return /* @__PURE__ */ bn.createElement("div", { + ref: container, + className: rootClassNames.join(" ") + }, !props2.suggestionsOnly ? /* @__PURE__ */ bn.createElement("div", { + className: classNames8.selected, + "aria-relevant": "additions removals", + "aria-live": "polite" + }, /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.tags.map((tag, i4) => /* @__PURE__ */ bn.createElement(Tag_default, { + key: i4, + tag, + classNames: classNames8, + onDelete: (e4) => onDeleteTag(i4, e4) + }))), /* @__PURE__ */ bn.createElement("div", { + className: classNames8.search + }, /* @__PURE__ */ bn.createElement(Input_default, { + ref: inputRef, + query, + index, + id: props2.id, + classNames: classNames8, + inputAttributes: props2.inputAttributes, + inputEventHandlers, + expanded, + placeholderText: props2.placeholderText + }))) : null, options.length ? /* @__PURE__ */ bn.createElement(Suggestions_default, { + options, + hoverSelect: props2.hoverSelect, + query, + setIndex, + index, + id: props2.id, + classNames: classNames8, + expanded, + addTag + }) : null, query && props2.allowNew && /* @__PURE__ */ bn.createElement("div", { + className: "mk-options-menu__suggestions" + }, /* @__PURE__ */ bn.createElement("ul", null, /* @__PURE__ */ bn.createElement("li", { + onMouseDown: (e4) => e4.preventDefault(), + onClick: () => addTag({ name: query, value: query }) + }, "Add ", query))), props2.previewComponent); +}); +var ReactTags_default = ReactTags; + +// node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js +var formatDistanceLocale = { + lessThanXSeconds: { + one: "less than a second", + other: "less than {{count}} seconds" }, - "&light .cm-tooltip": { - border: "1px solid #bbb", - backgroundColor: "#f5f5f5" + xSeconds: { + one: "1 second", + other: "{{count}} seconds" }, - "&light .cm-tooltip-section:not(:first-child)": { - borderTop: "1px solid #bbb" + halfAMinute: "half a minute", + lessThanXMinutes: { + one: "less than a minute", + other: "less than {{count}} minutes" }, - "&dark .cm-tooltip": { - backgroundColor: "#333338", - color: "white" + xMinutes: { + one: "1 minute", + other: "{{count}} minutes" }, - ".cm-tooltip-arrow": { - height: `${7 /* Size */}px`, - width: `${7 /* Size */ * 2}px`, - position: "absolute", - zIndex: -1, - overflow: "hidden", - "&:before, &:after": { - content: "''", - position: "absolute", - width: 0, - height: 0, - borderLeft: `${7 /* Size */}px solid transparent`, - borderRight: `${7 /* Size */}px solid transparent` - }, - ".cm-tooltip-above &": { - bottom: `-${7 /* Size */}px`, - "&:before": { - borderTop: `${7 /* Size */}px solid #bbb` - }, - "&:after": { - borderTop: `${7 /* Size */}px solid #f5f5f5`, - bottom: "1px" - } - }, - ".cm-tooltip-below &": { - top: `-${7 /* Size */}px`, - "&:before": { - borderBottom: `${7 /* Size */}px solid #bbb` - }, - "&:after": { - borderBottom: `${7 /* Size */}px solid #f5f5f5`, - top: "1px" - } - } + aboutXHours: { + one: "about 1 hour", + other: "about {{count}} hours" }, - "&dark .cm-tooltip .cm-tooltip-arrow": { - "&:before": { - borderTopColor: "#333338", - borderBottomColor: "#333338" - }, - "&:after": { - borderTopColor: "transparent", - borderBottomColor: "transparent" - } - } -}); -var noOffset = { x: 0, y: 0 }; -var showTooltip = import_state2.Facet.define({ - enables: [tooltipPlugin, baseTheme] -}); -var showHoverTooltip = import_state2.Facet.define(); -var HoverTooltipHost = class { - constructor(view) { - this.view = view; - this.mounted = false; - this.dom = document.createElement("div"); - this.dom.classList.add("cm-tooltip-hover"); - this.manager = new TooltipViewManager( - view, - showHoverTooltip, - (t4) => this.createHostedView(t4) - ); - } - static create(view) { - return new HoverTooltipHost(view); + xHours: { + one: "1 hour", + other: "{{count}} hours" + }, + xDays: { + one: "1 day", + other: "{{count}} days" + }, + aboutXWeeks: { + one: "about 1 week", + other: "about {{count}} weeks" + }, + xWeeks: { + one: "1 week", + other: "{{count}} weeks" + }, + aboutXMonths: { + one: "about 1 month", + other: "about {{count}} months" + }, + xMonths: { + one: "1 month", + other: "{{count}} months" + }, + aboutXYears: { + one: "about 1 year", + other: "about {{count}} years" + }, + xYears: { + one: "1 year", + other: "{{count}} years" + }, + overXYears: { + one: "over 1 year", + other: "over {{count}} years" + }, + almostXYears: { + one: "almost 1 year", + other: "almost {{count}} years" } - createHostedView(tooltip) { - let hostedView = tooltip.create(this.view); - hostedView.dom.classList.add("cm-tooltip-section"); - this.dom.appendChild(hostedView.dom); - if (this.mounted && hostedView.mount) - hostedView.mount(this.view); - return hostedView; +}; +var formatDistance = function formatDistance2(token, count2, options) { + var result; + var tokenValue = formatDistanceLocale[token]; + if (typeof tokenValue === "string") { + result = tokenValue; + } else if (count2 === 1) { + result = tokenValue.one; + } else { + result = tokenValue.other.replace("{{count}}", count2.toString()); } - mount(view) { - for (let hostedView of this.manager.tooltipViews) { - if (hostedView.mount) - hostedView.mount(view); + if (options !== null && options !== void 0 && options.addSuffix) { + if (options.comparison && options.comparison > 0) { + return "in " + result; + } else { + return result + " ago"; } - this.mounted = true; } - positioned() { - for (let hostedView of this.manager.tooltipViews) { - if (hostedView.positioned) - hostedView.positioned(); + return result; +}; +var formatDistance_default = formatDistance; + +// node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js +function buildFormatLongFn(args) { + return function() { + var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + var width = options.width ? String(options.width) : args.defaultWidth; + var format2 = args.formats[width] || args.formats[args.defaultWidth]; + return format2; + }; +} + +// node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js +var dateFormats = { + full: "EEEE, MMMM do, y", + long: "MMMM do, y", + medium: "MMM d, y", + short: "MM/dd/yyyy" +}; +var timeFormats = { + full: "h:mm:ss a zzzz", + long: "h:mm:ss a z", + medium: "h:mm:ss a", + short: "h:mm a" +}; +var dateTimeFormats = { + full: "{{date}} 'at' {{time}}", + long: "{{date}} 'at' {{time}}", + medium: "{{date}}, {{time}}", + short: "{{date}}, {{time}}" +}; +var formatLong = { + date: buildFormatLongFn({ + formats: dateFormats, + defaultWidth: "full" + }), + time: buildFormatLongFn({ + formats: timeFormats, + defaultWidth: "full" + }), + dateTime: buildFormatLongFn({ + formats: dateTimeFormats, + defaultWidth: "full" + }) +}; +var formatLong_default = formatLong; + +// node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js +var formatRelativeLocale = { + lastWeek: "'last' eeee 'at' p", + yesterday: "'yesterday at' p", + today: "'today at' p", + tomorrow: "'tomorrow at' p", + nextWeek: "eeee 'at' p", + other: "P" +}; +var formatRelative = function formatRelative2(token, _date, _baseDate, _options) { + return formatRelativeLocale[token]; +}; +var formatRelative_default = formatRelative; + +// node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js +function buildLocalizeFn(args) { + return function(dirtyIndex, options) { + var context = options !== null && options !== void 0 && options.context ? String(options.context) : "standalone"; + var valuesArray; + if (context === "formatting" && args.formattingValues) { + var defaultWidth = args.defaultFormattingWidth || args.defaultWidth; + var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth; + valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; + } else { + var _defaultWidth = args.defaultWidth; + var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth; + valuesArray = args.values[_width] || args.values[_defaultWidth]; } - } - update(update) { - this.manager.update(update); - } + var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; + return valuesArray[index]; + }; +} + +// node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js +var eraValues = { + narrow: ["B", "A"], + abbreviated: ["BC", "AD"], + wide: ["Before Christ", "Anno Domini"] }; -var showHoverTooltipHost = showTooltip.compute( - [showHoverTooltip], - (state) => { - let tooltips3 = state.facet(showHoverTooltip).filter((t4) => t4); - if (tooltips3.length === 0) - return null; - return { - pos: Math.min(...tooltips3.map((t4) => t4.pos)), - end: Math.max( - ...tooltips3.filter((t4) => t4.end != null).map((t4) => t4.end) - ), - create: HoverTooltipHost.create, - above: tooltips3[0].above, - arrow: tooltips3.some((t4) => t4.arrow) - }; +var quarterValues = { + narrow: ["1", "2", "3", "4"], + abbreviated: ["Q1", "Q2", "Q3", "Q4"], + wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] +}; +var monthValues = { + narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], + abbreviated: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + wide: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] +}; +var dayValues = { + narrow: ["S", "M", "T", "W", "T", "F", "S"], + short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], + abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + wide: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] +}; +var dayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" } -); -var HoverPlugin = class { - constructor(view, source, field, setHover, hoverTime) { - this.view = view; - this.source = source; - this.field = field; - this.setHover = setHover; - this.hoverTime = hoverTime; - this.hoverTimeout = -1; - this.restartTimeout = -1; - this.pending = null; - this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 }; - this.checkHover = this.checkHover.bind(this); - view.dom.addEventListener( - "mouseleave", - this.mouseleave = this.mouseleave.bind(this) - ); - view.dom.addEventListener( - "mousemove", - this.mousemove = this.mousemove.bind(this) - ); +}; +var formattingDayPeriodValues = { + narrow: { + am: "a", + pm: "p", + midnight: "mi", + noon: "n", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + abbreviated: { + am: "AM", + pm: "PM", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" + }, + wide: { + am: "a.m.", + pm: "p.m.", + midnight: "midnight", + noon: "noon", + morning: "in the morning", + afternoon: "in the afternoon", + evening: "in the evening", + night: "at night" } - update() { - if (this.pending) { - this.pending = null; - clearTimeout(this.restartTimeout); - this.restartTimeout = setTimeout(() => this.startHover(), 20); +}; +var ordinalNumber = function ordinalNumber2(dirtyNumber, _options) { + var number = Number(dirtyNumber); + var rem100 = number % 100; + if (rem100 > 20 || rem100 < 10) { + switch (rem100 % 10) { + case 1: + return number + "st"; + case 2: + return number + "nd"; + case 3: + return number + "rd"; } } - get active() { - return this.view.state.field(this.field); - } - checkHover() { - this.hoverTimeout = -1; - if (this.active) - return; - let hovered = Date.now() - this.lastMove.time; - if (hovered < this.hoverTime) - this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered); - else - this.startHover(); - } - startHover() { - clearTimeout(this.restartTimeout); - let { lastMove } = this; - let pos = this.view.contentDOM.contains(lastMove.target) ? this.view.posAtCoords(lastMove) : null; - if (pos == null) - return; - let posCoords = this.view.coordsAtPos(pos); - if (posCoords == null || lastMove.y < posCoords.top || lastMove.y > posCoords.bottom || lastMove.x < posCoords.left - this.view.defaultCharacterWidth || lastMove.x > posCoords.right + this.view.defaultCharacterWidth) - return; - let bidi = this.view.bidiSpans(this.view.state.doc.lineAt(pos)).find((s5) => s5.from <= pos && s5.to >= pos); - let rtl = bidi && bidi.dir == import_view2.Direction.RTL ? -1 : 1; - let open = this.source( - this.view, - pos, - lastMove.x < posCoords.left ? -rtl : rtl - ); - if (open == null ? void 0 : open.then) { - let pending = this.pending = { pos }; - open.then( - (result) => { - if (this.pending == pending) { - this.pending = null; - if (result) - this.view.dispatch({ effects: this.setHover.of(result) }); - } - }, - (e4) => (0, import_view2.logException)(this.view.state, e4, "hover tooltip") - ); - } else if (open) { - this.view.dispatch({ effects: this.setHover.of(open) }); + return number + "th"; +}; +var localize = { + ordinalNumber, + era: buildLocalizeFn({ + values: eraValues, + defaultWidth: "wide" + }), + quarter: buildLocalizeFn({ + values: quarterValues, + defaultWidth: "wide", + argumentCallback: function argumentCallback(quarter) { + return quarter - 1; } - } - mousemove(event) { - var _a2; - this.lastMove = { - x: event.clientX, - y: event.clientY, - target: event.target, - time: Date.now() + }), + month: buildLocalizeFn({ + values: monthValues, + defaultWidth: "wide" + }), + day: buildLocalizeFn({ + values: dayValues, + defaultWidth: "wide" + }), + dayPeriod: buildLocalizeFn({ + values: dayPeriodValues, + defaultWidth: "wide", + formattingValues: formattingDayPeriodValues, + defaultFormattingWidth: "wide" + }) +}; +var localize_default = localize; + +// node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js +function buildMatchFn(args) { + return function(string) { + var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + var width = options.width; + var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; + var matchResult = string.match(matchPattern); + if (!matchResult) { + return null; + } + var matchedString = matchResult[0]; + var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; + var key2 = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function(pattern) { + return pattern.test(matchedString); + }) : findKey(parsePatterns, function(pattern) { + return pattern.test(matchedString); + }); + var value; + value = args.valueCallback ? args.valueCallback(key2) : key2; + value = options.valueCallback ? options.valueCallback(value) : value; + var rest = string.slice(matchedString.length); + return { + value, + rest }; - if (this.hoverTimeout < 0) - this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime); - let tooltip = this.active; - if (tooltip && !isInTooltip(this.lastMove.target) || this.pending) { - let { pos } = tooltip || this.pending, end = (_a2 = tooltip == null ? void 0 : tooltip.end) != null ? _a2 : pos; - if (pos == end ? this.view.posAtCoords(this.lastMove) != pos : !isOverRange( - this.view, - pos, - end, - event.clientX, - event.clientY, - 6 /* MaxDist */ - )) { - this.view.dispatch({ effects: this.setHover.of(null) }); - this.pending = null; - } + }; +} +function findKey(object, predicate) { + for (var key2 in object) { + if (object.hasOwnProperty(key2) && predicate(object[key2])) { + return key2; } } - mouseleave(e4) { - clearTimeout(this.hoverTimeout); - this.hoverTimeout = -1; - if (this.active && !isInTooltip(e4.relatedTarget)) - this.view.dispatch({ effects: this.setHover.of(null) }); - } - destroy() { - clearTimeout(this.hoverTimeout); - this.view.dom.removeEventListener("mouseleave", this.mouseleave); - this.view.dom.removeEventListener("mousemove", this.mousemove); - } -}; -function isInTooltip(elt) { - for (let cur = elt; cur; cur = cur.parentNode) - if (cur.nodeType == 1 && cur.classList.contains("cm-tooltip")) - return true; - return false; + return void 0; } -function isOverRange(view, from, to, x5, y5, margin) { - let range = document.createRange(); - let fromDOM = view.domAtPos(from), toDOM = view.domAtPos(to); - range.setEnd(toDOM.node, toDOM.offset); - range.setStart(fromDOM.node, fromDOM.offset); - let rects = range.getClientRects(); - range.detach(); - for (let i4 = 0; i4 < rects.length; i4++) { - let rect = rects[i4]; - let dist = Math.max( - rect.top - y5, - y5 - rect.bottom, - rect.left - x5, - x5 - rect.right - ); - if (dist <= margin) - return true; +function findIndex(array, predicate) { + for (var key2 = 0; key2 < array.length; key2++) { + if (predicate(array[key2])) { + return key2; + } } - return false; + return void 0; } -function hoverTooltip(source, options = {}) { - let setHover = import_state2.StateEffect.define(); - let hoverState = import_state2.StateField.define({ - create() { + +// node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js +function buildMatchPatternFn(args) { + return function(string) { + var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + var matchResult = string.match(args.matchPattern); + if (!matchResult) return null; - }, - update(value, tr) { - if (value && options.hideOnChange && (tr.docChanged || tr.selection)) - return null; - for (let effect of tr.effects) { - if (effect.is(setHover)) { - return effect.value; - } - if (effect.is(closeHoverTooltipEffect)) - return null; - } - if (value && tr.docChanged) { - let newPos = tr.changes.mapPos(value.pos, -1, import_state2.MapMode.TrackDel); - if (newPos == null) - return null; - let copy = Object.assign(/* @__PURE__ */ Object.create(null), value); - copy.pos = newPos; - if (value.end != null) - copy.end = tr.changes.mapPos(value.end); - return copy; - } - return value; - }, - provide: (f4) => showHoverTooltip.from(f4) - }); - return [ - hoverState, - import_view2.ViewPlugin.define( - (view) => new HoverPlugin( - view, - source, - hoverState, - setHover, - options.hoverTime || 300 /* Time */ - ) - ), - showHoverTooltipHost - ]; + var matchedString = matchResult[0]; + var parseResult = string.match(args.parsePattern); + if (!parseResult) + return null; + var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; + value = options.valueCallback ? options.valueCallback(value) : value; + var rest = string.slice(matchedString.length); + return { + value, + rest + }; + }; } -var closeHoverTooltipEffect = import_state2.StateEffect.define(); -var closeHoverTooltips = closeHoverTooltipEffect.of(null); -// src/dispatch/flowDispatch.ts -var createFlowEditorInElement = (id2, el, type, file, ref, from, to) => { - let evt = new CustomEvent(eventTypes.spawnPortal, { - detail: { id: id2, el, file, from, to, ref, type } - }); - activeWindow.dispatchEvent(evt); +// node_modules/date-fns/esm/locale/en-US/_lib/match/index.js +var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; +var parseOrdinalNumberPattern = /\d+/i; +var matchEraPatterns = { + narrow: /^(b|a)/i, + abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, + wide: /^(before christ|before common era|anno domini|common era)/i }; -var loadFlowEditorByDOM = (el, view, id2) => { - let evt = new CustomEvent(eventTypes.loadPortal, { - detail: { id: id2, el, view } - }); - activeWindow.dispatchEvent(evt); +var parseEraPatterns = { + any: [/^b/i, /^(a|c)/i] }; -var focusFlowEditor = (id2, top) => { - let evt = new CustomEvent(eventTypes.focusPortal, { - detail: { id: id2, parent: false, top } - }); - activeWindow.dispatchEvent(evt); +var matchQuarterPatterns = { + narrow: /^[1234]/i, + abbreviated: /^q[1234]/i, + wide: /^[1234](th|st|nd|rd)? quarter/i }; -var focusFlowEditorParent = (id2, top) => { - let evt = new CustomEvent(eventTypes.focusPortal, { - detail: { id: id2, parent: true, top } - }); - activeWindow.dispatchEvent(evt); +var parseQuarterPatterns = { + any: [/1/i, /2/i, /3/i, /4/i] }; -var openFileFlowEditor = (file, source) => { - let evt = new CustomEvent(eventTypes.openFilePortal, { - detail: { file, source } - }); - activeWindow.dispatchEvent(evt); +var matchMonthPatterns = { + narrow: /^[jfmasond]/i, + abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, + wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i +}; +var parseMonthPatterns = { + narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i], + any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i] +}; +var matchDayPatterns = { + narrow: /^[smtwf]/i, + short: /^(su|mo|tu|we|th|fr|sa)/i, + abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, + wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i +}; +var parseDayPatterns = { + narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], + any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] +}; +var matchDayPeriodPatterns = { + narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, + any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i +}; +var parseDayPeriodPatterns = { + any: { + am: /^a/i, + pm: /^p/i, + midnight: /^mi/i, + noon: /^no/i, + morning: /morning/i, + afternoon: /afternoon/i, + evening: /evening/i, + night: /night/i + } +}; +var match = { + ordinalNumber: buildMatchPatternFn({ + matchPattern: matchOrdinalNumberPattern, + parsePattern: parseOrdinalNumberPattern, + valueCallback: function valueCallback(value) { + return parseInt(value, 10); + } + }), + era: buildMatchFn({ + matchPatterns: matchEraPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseEraPatterns, + defaultParseWidth: "any" + }), + quarter: buildMatchFn({ + matchPatterns: matchQuarterPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseQuarterPatterns, + defaultParseWidth: "any", + valueCallback: function valueCallback2(index) { + return index + 1; + } + }), + month: buildMatchFn({ + matchPatterns: matchMonthPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseMonthPatterns, + defaultParseWidth: "any" + }), + day: buildMatchFn({ + matchPatterns: matchDayPatterns, + defaultMatchWidth: "wide", + parsePatterns: parseDayPatterns, + defaultParseWidth: "any" + }), + dayPeriod: buildMatchFn({ + matchPatterns: matchDayPeriodPatterns, + defaultMatchWidth: "any", + parsePatterns: parseDayPeriodPatterns, + defaultParseWidth: "any" + }) }; +var match_default = match; -// src/components/FlowEditor/FlowEditorHover.tsx -var FlowEditorHover = (props2) => { - return props2.type == "file" ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.toggle && /* @__PURE__ */ bn.createElement("div", { - "aria-label": i18n_default.buttons.toggleFlow, - onClick: props2.toggleFlow, - className: props2.toggleState ? "mk-toggle-on" : "", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-flow-hover"] } - }), /* @__PURE__ */ bn.createElement("div", { - "aria-label": i18n_default.buttons.openLink, - onClick: props2.openLink, - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-open-link"] } - })) : /* @__PURE__ */ bn.createElement("div", { - "aria-label": "Delete Table", - onClick: props2.deleteTable, - className: "mk-icon-xsmall", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } - }); +// node_modules/date-fns/esm/locale/en-US/index.js +var locale = { + code: "en-US", + formatDistance: formatDistance_default, + formatLong: formatLong_default, + formatRelative: formatRelative_default, + localize: localize_default, + match: match_default, + options: { + weekStartsOn: 0, + firstWeekContainsDate: 1 + } }; +var en_US_default = locale; -// src/cm-extensions/flowEditor/flowEditor.tsx -var toggleFlowEditor = import_state3.Annotation.define(); -var cacheFlowEditorHeight = import_state3.Annotation.define(); -var preloadFlowEditor = import_state3.EditorState.transactionFilter.of( - (tr) => { - let newTrans = []; - const value = tr.state.field(flowEditorInfo, false); - if (value && !tr.annotation(toggleFlowEditor)) { - newTrans.push( - ...value.filter((f4) => f4.expandedState == 1).map((f4) => { - if (tr.state.field(flowTypeStateField) == "doc") { - return { - annotations: toggleFlowEditor.of([f4.id, 2]) - }; - } else { - return { - annotations: toggleFlowEditor.of([f4.id, 0]) - }; - } - }) - ); - } - return [tr, ...newTrans]; +// node_modules/date-fns/esm/_lib/requiredArgs/index.js +function requiredArgs(required, args) { + if (args.length < required) { + throw new TypeError(required + " argument" + (required > 1 ? "s" : "") + " required, but only " + args.length + " present"); } -); -var internalLinkToggle = import_view3.ViewPlugin.fromClass(class { - constructor(view) { +} + +// node_modules/date-fns/esm/isDate/index.js +function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof5(obj2) { + return typeof obj2; + }; + } else { + _typeof = function _typeof5(obj2) { + return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; + }; } -}, { - eventHandlers: { - mousedown: (e4, view) => { - let pos = view.posAtDOM(e4.target); - let { from: lineFrom, to: lineTo, text: text2 } = view.state.doc.lineAt(pos); - for (let match2 of text2.matchAll(/(?!\!)\[\[([^\]]+)\]\]/g)) { - const stateField = view.state.field(flowEditorInfo, false); - const info = stateField.find((f4) => f4.to == match2.index + match2[1].length + 2); - if (info) { - view.dispatch({ - annotations: toggleFlowEditor.of([info.id, 2]) - }); - } - } - } + return _typeof(obj); +} +function isDate(value) { + requiredArgs(1, arguments); + return value instanceof Date || _typeof(value) === "object" && Object.prototype.toString.call(value) === "[object Date]"; +} + +// node_modules/date-fns/esm/toDate/index.js +function _typeof2(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof2 = function _typeof5(obj2) { + return typeof obj2; + }; + } else { + _typeof2 = function _typeof5(obj2) { + return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; + }; } -}); -var internalLinkHover = hoverTooltip((view, pos, side) => { - let { from: lineFrom, to: lineTo, text: text2 } = view.state.doc.lineAt(pos); - let hovObject = null; - iterateTreeInSelection({ from: lineFrom, to: lineTo }, view.state, { - enter: ({ name, from, to }) => { - if (name.contains("hmd-internal-link") && pos <= to && pos >= from) { - const stateField = view.state.field(flowEditorInfo, false); - const info = stateField.find((f4) => f4.to == to); - if (info) { - hovObject = { - pos: pos - 5, - end: to, - above: true, - create(view2) { - let dom = document.createElement("div"); - dom.toggleClass("mk-flow-hover", true); - dom.toggleClass("menu", true); - const openHoverDiv = dom.createDiv(); - openHoverDiv.setAttribute( - "aria-label", - info.expandedState == 0 ? i18n_default.buttons.openFlow : i18n_default.buttons.hideFlow - ); - openHoverDiv.addEventListener("click", () => { - view2.dispatch({ - annotations: toggleFlowEditor.of([info.id, 2]) - }); - }); - const icon = openHoverDiv.createDiv(); - icon.innerHTML = uiIconSet["mk-ui-flow-hover"]; - openHoverDiv.insertAdjacentText( - "beforeend", - info.expandedState == 0 ? i18n_default.buttons.openFlow : i18n_default.buttons.hideFlow - ); - return { dom }; - } - }; - return false; - } - } - } - }); - return hovObject; -}); -var flowEditorInfo = import_state3.StateField.define({ - create() { - return []; - }, - update(value, tr) { - var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; - let newValues = []; - const previous = value; - let usedContainers = []; - let str = tr.newDoc.sliceString(0); - const reverseExpandedState = (state) => { - const news = state != 2 ? 2 : 0; - return news; - }; - for (let match2 of str.matchAll(/(?:!\[!\[|!!\[\[)([^\]]+)\]\]/g)) { - const link = match2[1]; - const existingLinks = previous.filter((f4) => f4.link == link); - const offset = usedContainers.filter((f4) => f4 == link).length; - const existingInfo = existingLinks[offset]; - const id2 = existingInfo ? existingInfo.id : genId2(); - usedContainers.push(link); - const info = { - id: id2, - link: match2[1], - startOfLineFix: false, - from: match2.index + 4, - to: match2.index + 4 + match2[1].length, - embed: 1, - height: existingInfo ? ((_a2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _a2[0]) == id2 && ((_b2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _b2[1]) != 0 ? (_c2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _c2[1] : existingInfo.height : -1, - expandedState: existingInfo ? ((_d2 = tr.annotation(toggleFlowEditor)) == null ? void 0 : _d2[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 1 - }; - newValues.push(info); - } - for (let match2 of str.matchAll(/(?!\!)\[\[([^\]]+)\]\]/g)) { - const link = match2[1]; - const existingLinks = previous.filter((f4) => f4.link == link); - const offset = usedContainers.filter((f4) => f4 == link).length; - const existingInfo = existingLinks[offset]; - const id2 = existingInfo ? existingInfo.id : genId2(); - usedContainers.push(link); - const info = { - id: id2, - link: match2[1], - startOfLineFix: false, - from: match2.index + 2, - to: match2.index + 2 + match2[1].length, - embed: 0, - height: existingInfo ? ((_e2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _e2[0]) == id2 && ((_f = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _f[1]) != 0 ? (_g = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _g[1] : existingInfo.height : -1, - expandedState: existingInfo ? ((_h = tr.annotation(toggleFlowEditor)) == null ? void 0 : _h[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 0 - }; - newValues.push(info); - } - for (let match2 of str.matchAll(/(?!\!)\!\[\[([^\]]+)\]\]/g)) { - const link = match2[1]; - const existingLinks = previous.filter((f4) => f4.link == link); - const offset = usedContainers.filter((f4) => f4 == link).length; - const existingInfo = existingLinks[offset]; - const id2 = existingInfo ? existingInfo.id : genId2(); - usedContainers.push(link); - const info = { - id: id2, - link: match2[1], - startOfLineFix: false, - from: match2.index + 3, - to: match2.index + 3 + match2[1].length, - embed: 2, - height: existingInfo ? ((_i = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _i[0]) == id2 && ((_j = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _j[1]) != 0 ? (_k = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _k[1] : existingInfo.height : -1, - expandedState: existingInfo ? ((_l = tr.annotation(toggleFlowEditor)) == null ? void 0 : _l[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 1 - }; - newValues.push(info); - } - newValues.sort(compareByField("from", true)); - return newValues; - } -}); -var flowEditorRangeset = (state) => { - let builder = new import_state3.RangeSetBuilder(); - const infoFields = state.field(flowEditorInfo); - for (let info of infoFields) { - const { from, to, embed: embedType, expandedState } = info; - const lineFix = from - 3 == state.doc.lineAt(from).from && to + 2 == state.doc.lineAt(from).to; - if (expandedState == 2) { - if (embedType == 1) { - if (!(state.selection.main.from == from - 4 && state.selection.main.to == to + 2 || state.selection.main.from >= from - 3 && state.selection.main.to <= to + 1)) { - builder.add(from - 4, from - 3, flowEditorSelector(info)); - if (lineFix) { - builder.add(from - 3, to + 2, flowEditorWidgetDecoration(info)); - } else { - builder.add(from - 3, to + 2, flowEditorDecoration(info)); - } - } - } else if (embedType == 0) { - builder.add(to + 2, to + 2, flowEditorDecoration(info)); - } + return _typeof2(obj); +} +function toDate(argument) { + requiredArgs(1, arguments); + var argStr = Object.prototype.toString.call(argument); + if (argument instanceof Date || _typeof2(argument) === "object" && argStr === "[object Date]") { + return new Date(argument.getTime()); + } else if (typeof argument === "number" || argStr === "[object Number]") { + return new Date(argument); + } else { + if ((typeof argument === "string" || argStr === "[object String]") && typeof console !== "undefined") { + console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"); + console.warn(new Error().stack); } + return new Date(NaN); } - const dec = builder.finish(); - return dec; -}; -var flowEditorField = import_state3.StateField.define({ - create(state) { - return flowEditorRangeset(state); - }, - update(value, tr) { - return flowEditorRangeset(tr.state); - }, - provide: (f4) => import_view3.EditorView.decorations.from(f4) -}); -var FlowEditorWidget = class extends import_view3.WidgetType { - constructor(info) { - super(); - this.info = info; +} + +// node_modules/date-fns/esm/isValid/index.js +function isValid(dirtyDate) { + requiredArgs(1, arguments); + if (!isDate(dirtyDate) && typeof dirtyDate !== "number") { + return false; } - eq(other) { - return other.info.id === this.info.id; + var date = toDate(dirtyDate); + return !isNaN(Number(date)); +} + +// node_modules/date-fns/esm/_lib/toInteger/index.js +function toInteger(dirtyNumber) { + if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { + return NaN; } - toDOM(view) { - const div = document.createElement("div"); - div.toggleClass("mk-floweditor-container", true); - div.toggleClass("mk-floweditor-fix", this.info.startOfLineFix); - div.setAttribute("id", "mk-flow-" + this.info.id); - const placeholder2 = div.createDiv("mk-floweditor-placeholder"); - placeholder2.style.setProperty("height", this.info.height + "px"); - loadFlowEditorByDOM(div, view, this.info.id); - return div; + var number = Number(dirtyNumber); + if (isNaN(number)) { + return number; } - get estimatedHeight() { - return this.info.height; + return number < 0 ? Math.ceil(number) : Math.floor(number); +} + +// node_modules/date-fns/esm/addMilliseconds/index.js +function addMilliseconds(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var timestamp = toDate(dirtyDate).getTime(); + var amount = toInteger(dirtyAmount); + return new Date(timestamp + amount); +} + +// node_modules/date-fns/esm/subMilliseconds/index.js +function subMilliseconds(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + return addMilliseconds(dirtyDate, -amount); +} + +// node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js +var MILLISECONDS_IN_DAY = 864e5; +function getUTCDayOfYear(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var timestamp = date.getTime(); + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + var startOfYearTimestamp = date.getTime(); + var difference = timestamp - startOfYearTimestamp; + return Math.floor(difference / MILLISECONDS_IN_DAY) + 1; +} + +// node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js +function startOfUTCISOWeek(dirtyDate) { + requiredArgs(1, arguments); + var weekStartsOn = 1; + var date = toDate(dirtyDate); + var day = date.getUTCDay(); + var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + date.setUTCDate(date.getUTCDate() - diff); + date.setUTCHours(0, 0, 0, 0); + return date; +} + +// node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js +function getUTCISOWeekYear(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var year = date.getUTCFullYear(); + var fourthOfJanuaryOfNextYear = new Date(0); + fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0); + var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear); + var fourthOfJanuaryOfThisYear = new Date(0); + fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0); + var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear); + if (date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; } -}; -var FlowEditorSelector = class extends import_view3.WidgetType { - constructor(info) { - super(); - this.info = info; - this.flowInfo = info; +} + +// node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js +function startOfUTCISOWeekYear(dirtyDate) { + requiredArgs(1, arguments); + var year = getUTCISOWeekYear(dirtyDate); + var fourthOfJanuary = new Date(0); + fourthOfJanuary.setUTCFullYear(year, 0, 4); + fourthOfJanuary.setUTCHours(0, 0, 0, 0); + var date = startOfUTCISOWeek(fourthOfJanuary); + return date; +} + +// node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js +var MILLISECONDS_IN_WEEK = 6048e5; +function getUTCISOWeek(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); + return Math.round(diff / MILLISECONDS_IN_WEEK) + 1; +} + +// node_modules/date-fns/esm/_lib/defaultOptions/index.js +var defaultOptions2 = {}; +function getDefaultOptions() { + return defaultOptions2; +} + +// node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js +function startOfUTCWeek(dirtyDate, options) { + var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; + requiredArgs(1, arguments); + var defaultOptions3 = getDefaultOptions(); + var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } - eq(other) { - return false; + var date = toDate(dirtyDate); + var day = date.getUTCDay(); + var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + date.setUTCDate(date.getUTCDate() - diff); + date.setUTCHours(0, 0, 0, 0); + return date; +} + +// node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js +function getUTCWeekYear(dirtyDate, options) { + var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var year = date.getUTCFullYear(); + var defaultOptions3 = getDefaultOptions(); + var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); + if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { + throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); } - toDOM(view) { - const div = document.createElement("div"); - div.toggleClass("mk-floweditor-selector", true); - const reactEl = createRoot(div); - const type = this.info.link.contains("/#^") ? "table" : "file"; - reactEl.render( - /* @__PURE__ */ bn.createElement(FlowEditorHover, { - toggle: true, - type, - toggleState: true, - deleteTable: () => { - view.dispatch({ - changes: { from: this.info.from - 4, to: this.info.to + 2 } - }); - }, - toggleFlow: () => { - view.dispatch({ - changes: { from: this.info.from - 4, to: this.info.from - 3 } - }); - }, - openLink: () => { - openFileFlowEditor(this.flowInfo.link, "/"); - } - }) - ); - return div; + var firstWeekOfNextYear = new Date(0); + firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setUTCHours(0, 0, 0, 0); + var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options); + var firstWeekOfThisYear = new Date(0); + firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setUTCHours(0, 0, 0, 0); + var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options); + if (date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; } -}; -var flowEditorSelector = (info) => import_view3.Decoration.replace({ - widget: new FlowEditorSelector(info), - inclusive: true, - block: false -}); -var flowEditorDecoration = (info) => import_view3.Decoration.replace({ - widget: new FlowEditorWidget(info), - inclusive: true, - block: false -}); -var flowEditorWidgetDecoration = (info) => import_view3.Decoration.widget({ - widget: new FlowEditorWidget(info), - block: true -}); +} -// src/utils/flow/flowEditor.ts -var import_obsidian20 = require("obsidian"); -var import_state6 = require("@codemirror/state"); +// node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js +function startOfUTCWeekYear(dirtyDate, options) { + var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; + requiredArgs(1, arguments); + var defaultOptions3 = getDefaultOptions(); + var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); + var year = getUTCWeekYear(dirtyDate, options); + var firstWeek = new Date(0); + firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate); + firstWeek.setUTCHours(0, 0, 0, 0); + var date = startOfUTCWeek(firstWeek, options); + return date; +} -// src/cm-extensions/flowEditor/selectiveEditor.ts -var import_state4 = require("@codemirror/state"); -var import_view4 = require("@codemirror/view"); +// node_modules/date-fns/esm/_lib/getUTCWeek/index.js +var MILLISECONDS_IN_WEEK2 = 6048e5; +function getUTCWeek(dirtyDate, options) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); + return Math.round(diff / MILLISECONDS_IN_WEEK2) + 1; +} -// node_modules/tslib/modules/index.js -var import_tslib = __toESM(require_tslib(), 1); -var { - __extends, - __assign: __assign2, - __rest: __rest2, - __decorate, - __param, - __metadata, - __awaiter, - __generator, - __exportStar, - __createBinding, - __values, - __read, - __spread, - __spreadArrays, - __spreadArray: __spreadArray2, - __await, - __asyncGenerator, - __asyncDelegator, - __asyncValues, - __makeTemplateObject, - __importStar, - __importDefault, - __classPrivateFieldGet, - __classPrivateFieldSet, - __classPrivateFieldIn -} = import_tslib.default; +// node_modules/date-fns/esm/_lib/addLeadingZeros/index.js +function addLeadingZeros(number, targetLength) { + var sign = number < 0 ? "-" : ""; + var output = Math.abs(number).toString(); + while (output.length < targetLength) { + output = "0" + output; + } + return sign + output; +} -// src/cm-extensions/flowEditor/selectiveEditor.ts -var editableRange = import_state4.Annotation.define(); -var hiddenLine = import_view4.Decoration.replace({ inclusive: true }); -var hideLine = import_state4.StateField.define({ - create() { - return import_view4.Decoration.none; +// node_modules/date-fns/esm/_lib/format/lightFormatters/index.js +var formatters = { + y: function y3(date, token) { + var signedYear = date.getUTCFullYear(); + var year = signedYear > 0 ? signedYear : 1 - signedYear; + return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); }, - update(value, tr) { - var _a2; - let builder = new import_state4.RangeSetBuilder(); - if (((_a2 = tr.state.field(selectiveLinesFacet)) == null ? void 0 : _a2[0]) != void 0) { - builder.add( - tr.state.doc.line(1).from, - tr.state.doc.line(tr.state.field(selectiveLinesFacet)[0]).from, - hiddenLine - ); - builder.add( - tr.state.doc.line( - Math.min(tr.newDoc.lines, tr.state.field(selectiveLinesFacet)[1]) - ).to, - tr.state.doc.line(tr.newDoc.lines).to, - hiddenLine - ); - } - const dec = builder.finish(); - return dec; + M: function M3(date, token) { + var month = date.getUTCMonth(); + return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); }, - provide: (f4) => import_view4.EditorView.decorations.from(f4) -}); -var selectiveLinesFacet = import_state4.StateField.define({ - create: () => [void 0, void 0], - update(value, tr) { - if (tr.annotation(editableRange)) { - if (tr.annotation(editableRange)[0]) { - return [ - tr.annotation(editableRange)[0], - Math.min(tr.state.doc.lines, tr.annotation(editableRange)[1]) - ]; - } - return tr.annotation(editableRange); + d: function d3(date, token) { + return addLeadingZeros(date.getUTCDate(), token.length); + }, + a: function a3(date, token) { + var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return dayPeriodEnumValue.toUpperCase(); + case "aaa": + return dayPeriodEnumValue; + case "aaaaa": + return dayPeriodEnumValue[0]; + case "aaaa": + default: + return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; } - return value; + }, + h: function h3(date, token) { + return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length); + }, + H: function H3(date, token) { + return addLeadingZeros(date.getUTCHours(), token.length); + }, + m: function m3(date, token) { + return addLeadingZeros(date.getUTCMinutes(), token.length); + }, + s: function s3(date, token) { + return addLeadingZeros(date.getUTCSeconds(), token.length); + }, + S: function S2(date, token) { + var numberOfDigits = token.length; + var milliseconds = date.getUTCMilliseconds(); + var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3)); + return addLeadingZeros(fractionalSeconds, token.length); } -}); -var lineRangeToPosRange = (state, range) => { - return { - from: state.doc.line(range[0]).from, - to: state.doc.line(Math.min(state.doc.lines, range[1])).to - }; }; -var smartDelete = import_state4.EditorState.transactionFilter.of( - (tr) => { - var _a2; - if (tr.isUserEvent("delete") && !tr.isUserEvent("delete.smart")) { - const initialSelections = tr.startState.selection.ranges.map((range) => ({ - from: range.from, - to: range.to - })); - if (initialSelections.length > 0 && ((_a2 = tr.startState.field(selectiveLinesFacet)) == null ? void 0 : _a2[0])) { - const posRange = lineRangeToPosRange( - tr.startState, - tr.startState.field(selectiveLinesFacet) - ); - const minFrom = Math.max(posRange.from, initialSelections[0].from); - const minTo = Math.min(posRange.to, initialSelections[0].to); - tr.startState.update({ - changes: { - from: Math.min(minFrom, minTo), - to: Math.max(minFrom, minTo) - }, - annotations: import_state4.Transaction.userEvent.of( - `${tr.annotation(import_state4.Transaction.userEvent)}.smart` - ) +var lightFormatters_default = formatters; + +// node_modules/date-fns/esm/_lib/format/formatters/index.js +var dayPeriodEnum = { + am: "am", + pm: "pm", + midnight: "midnight", + noon: "noon", + morning: "morning", + afternoon: "afternoon", + evening: "evening", + night: "night" +}; +var formatters2 = { + G: function G2(date, token, localize2) { + var era = date.getUTCFullYear() > 0 ? 1 : 0; + switch (token) { + case "G": + case "GG": + case "GGG": + return localize2.era(era, { + width: "abbreviated" + }); + case "GGGGG": + return localize2.era(era, { + width: "narrow" + }); + case "GGGG": + default: + return localize2.era(era, { + width: "wide" }); - } } - return tr; - } -); -var preventModifyTargetRanges = import_state4.EditorState.transactionFilter.of( - (tr) => { - let newTrans = []; - try { - const selectiveLines = tr.startState.field(selectiveLinesFacet); - if (tr.isUserEvent("input") || tr.isUserEvent("delete") || tr.isUserEvent("move")) { - if (selectiveLines == null ? void 0 : selectiveLines[0]) { - const posRange = lineRangeToPosRange( - tr.startState, - tr.startState.field(selectiveLinesFacet) - ); - if (tr.changes.touchesRange(0, posRange.from - 1) || !tr.changes.touchesRange(posRange.from, posRange.to)) { - return []; - } - } - } - if (tr.state.doc.lines != tr.startState.doc.lines) { - const numberNewLines = tr.state.doc.lines - tr.startState.doc.lines; - if (selectiveLines == null ? void 0 : selectiveLines[0]) { - const posRange = lineRangeToPosRange( - tr.startState, - tr.startState.field(selectiveLinesFacet) - ); - if (tr.changes.touchesRange(0, posRange.from - 1)) { - newTrans.push({ - annotations: [ - editableRange.of([ - selectiveLines[0] + numberNewLines, - selectiveLines[1] + numberNewLines - ]) - ] - }); - } else if (tr.changes.touchesRange(posRange.from - 1, posRange.to)) { - newTrans.push({ - annotations: [ - editableRange.of([ - selectiveLines[0], - selectiveLines[1] + numberNewLines - ]) - ] - }); - } - } - } - } catch (e4) { - return []; + }, + y: function y4(date, token, localize2) { + if (token === "yo") { + var signedYear = date.getUTCFullYear(); + var year = signedYear > 0 ? signedYear : 1 - signedYear; + return localize2.ordinalNumber(year, { + unit: "year" + }); } - return [tr, ...newTrans]; - } -); -var readOnlyRangesExtension = [smartDelete, preventModifyTargetRanges]; -var editBlockExtensions = () => [ - readOnlyRangesExtension, - hideLine, - selectiveLinesFacet -]; - -// src/components/FlowEditor/FlowEditor.tsx -var import_obsidian11 = require("obsidian"); -var popovers = /* @__PURE__ */ new WeakMap(); -var mouseCoords = { x: 0, y: 0 }; -function nosuper(base) { - const derived = function() { - return Object.setPrototypeOf(new import_obsidian11.Component(), new.target.prototype); - }; - derived.prototype = base.prototype; - return Object.setPrototypeOf(derived, base); -} -var _a, _b, _c, _d, _e; -var FlowEditor = class extends nosuper(import_obsidian11.HoverPopover) { - constructor(parent, targetEl, plugin, waitTime, onShowCallback) { - super(); - this.targetEl = targetEl; - this.plugin = plugin; - this.onShowCallback = onShowCallback; - this.abortController = this.addChild(new import_obsidian11.Component()); - this.detaching = false; - this.opening = false; - this.rootSplit = new import_obsidian11.WorkspaceSplit( - window.app.workspace, - "vertical" - ); - this.targetRect = (_a = this.targetEl) == null ? void 0 : _a.getBoundingClientRect(); - this.oldPopover = (_b = this.parent) == null ? void 0 : _b.flowEditor; - this.document = (_e = (_d = (_c = this.targetEl) == null ? void 0 : _c.ownerDocument) != null ? _d : window.activeDocument) != null ? _e : window.document; - this.id = genId2(); - this.hoverEl = this.document.defaultView.createDiv({ - cls: "mk-floweditor mk-hover-popover", - attr: { id: "he" + this.id } - }); - if (waitTime === void 0) { - waitTime = 300; + return lightFormatters_default.y(date, token); + }, + Y: function Y2(date, token, localize2, options) { + var signedWeekYear = getUTCWeekYear(date, options); + var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; + if (token === "YY") { + var twoDigitYear = weekYear % 100; + return addLeadingZeros(twoDigitYear, 2); } - this.onTarget = true; - this.parent = parent; - this.waitTime = waitTime; - this.state = import_obsidian11.PopoverState.Showing; - const { hoverEl } = this; - this.abortController.load(); - this.timer = window.setTimeout(this.show.bind(this), waitTime); - this.setActive = this._setActive.bind(this); - if (hoverEl) { - hoverEl.addEventListener("mousedown", this.setActive); + if (token === "Yo") { + return localize2.ordinalNumber(weekYear, { + unit: "year" + }); } - popovers.set(this.hoverEl, this); - this.hoverEl.addClass("hover-editor"); - this.containerEl = this.hoverEl.createDiv("popover-content"); - this.setTitleBar(); - this.hoverEl.style.height = "auto"; - this.hoverEl.style.width = "100%"; - this.hoverEl.addEventListener("keydown", (e4) => e4.stopPropagation()); - } - static activeWindows() { - const windows = [window]; - const { floatingSplit } = app.workspace; - if (floatingSplit) { - for (const split of floatingSplit.children) { - if (split.win) - windows.push(split.win); - } + return addLeadingZeros(weekYear, token.length); + }, + R: function R2(date, token) { + var isoWeekYear = getUTCISOWeekYear(date); + return addLeadingZeros(isoWeekYear, token.length); + }, + u: function u3(date, token) { + var year = date.getUTCFullYear(); + return addLeadingZeros(year, token.length); + }, + Q: function Q2(date, token, localize2) { + var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); + switch (token) { + case "Q": + return String(quarter); + case "QQ": + return addLeadingZeros(quarter, 2); + case "Qo": + return localize2.ordinalNumber(quarter, { + unit: "quarter" + }); + case "QQQ": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "formatting" + }); + case "QQQQQ": + return localize2.quarter(quarter, { + width: "narrow", + context: "formatting" + }); + case "QQQQ": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "formatting" + }); } - return windows; - } - static containerForDocument(doc) { - if (doc !== document && app.workspace.floatingSplit) - for (const container of app.workspace.floatingSplit.children) { - if (container.doc === doc) - return container; - } - return app.workspace.rootSplit; - } - static activePopovers() { - return this.activeWindows().flatMap(this.popoversForWindow); - } - static popoversForWindow(win) { - var _a2, _b2; - return Array.prototype.slice.call( - (_b2 = (_a2 = win == null ? void 0 : win.document) == null ? void 0 : _a2.body.querySelectorAll(".mk-hover-popover")) != null ? _b2 : [] - ).map((el) => popovers.get(el)).filter((he) => he); - } - static forLeaf(leaf) { - const el = leaf && document.body.matchParent.call(leaf.containerEl, ".mk-hover-popover"); - return el ? popovers.get(el) : void 0; - } - _setActive() { - this.plugin.app.workspace.setActiveLeaf(this.leaves()[0], { focus: true }); - } - getDefaultMode() { - var _a2, _b2; - return ((_b2 = (_a2 = this.parent) == null ? void 0 : _a2.view) == null ? void 0 : _b2.getMode) ? this.parent.view.getMode() : "preview"; - } - updateLeaves() { - if (this.onTarget && this.targetEl && !this.document.contains(this.targetEl)) { - this.onTarget = false; - this.transition(); + }, + q: function q4(date, token, localize2) { + var quarter = Math.ceil((date.getUTCMonth() + 1) / 3); + switch (token) { + case "q": + return String(quarter); + case "qq": + return addLeadingZeros(quarter, 2); + case "qo": + return localize2.ordinalNumber(quarter, { + unit: "quarter" + }); + case "qqq": + return localize2.quarter(quarter, { + width: "abbreviated", + context: "standalone" + }); + case "qqqqq": + return localize2.quarter(quarter, { + width: "narrow", + context: "standalone" + }); + case "qqqq": + default: + return localize2.quarter(quarter, { + width: "wide", + context: "standalone" + }); } - let leafCount = 0; - this.plugin.app.workspace.iterateLeaves((leaf) => { - leafCount++; - }, this.rootSplit); - if (leafCount === 0) { - this.hide(); - } else if (leafCount > 1) { + }, + M: function M4(date, token, localize2) { + var month = date.getUTCMonth(); + switch (token) { + case "M": + case "MM": + return lightFormatters_default.M(date, token); + case "Mo": + return localize2.ordinalNumber(month + 1, { + unit: "month" + }); + case "MMM": + return localize2.month(month, { + width: "abbreviated", + context: "formatting" + }); + case "MMMMM": + return localize2.month(month, { + width: "narrow", + context: "formatting" + }); + case "MMMM": + default: + return localize2.month(month, { + width: "wide", + context: "formatting" + }); } - this.hoverEl.setAttribute("data-leaf-count", leafCount.toString()); - } - setTitleBar() { - this.titleEl = this.document.defaultView.createDiv("mk-flow-titlebar"); - this.containerEl.prepend(this.titleEl); - } - attachLeaf() { - this.rootSplit.getRoot = () => this.plugin.app.workspace[this.document === document ? "rootSplit" : "floatingSplit"]; - this.rootSplit.getContainer = () => FlowEditor.containerForDocument(this.document); - this.titleEl.insertAdjacentElement("afterend", this.rootSplit.containerEl); - const leaf = this.plugin.app.workspace.createLeafInParent( - this.rootSplit, - 0 - ); - this.updateLeaves(); - return leaf; - } - onload() { - super.onload(); - this.registerEvent( - this.plugin.app.workspace.on("layout-change", this.updateLeaves, this) - ); - this.registerEvent( - app.workspace.on("layout-change", () => { - this.rootSplit.children.forEach((item, index) => { - if (item instanceof import_obsidian11.WorkspaceTabs) { - this.rootSplit.replaceChild(index, item.children[0]); - } + }, + L: function L3(date, token, localize2) { + var month = date.getUTCMonth(); + switch (token) { + case "L": + return String(month + 1); + case "LL": + return addLeadingZeros(month + 1, 2); + case "Lo": + return localize2.ordinalNumber(month + 1, { + unit: "month" + }); + case "LLL": + return localize2.month(month, { + width: "abbreviated", + context: "standalone" + }); + case "LLLLL": + return localize2.month(month, { + width: "narrow", + context: "standalone" + }); + case "LLLL": + default: + return localize2.month(month, { + width: "wide", + context: "standalone" }); - }) - ); - } - leaves() { - const leaves = []; - this.plugin.app.workspace.iterateLeaves((leaf) => { - leaves.push(leaf); - }, this.rootSplit); - return leaves; - } - onShow() { - var _a2, _b2; - const closeDelay = 600; - setTimeout(() => this.waitTime = closeDelay, closeDelay); - (_a2 = this.oldPopover) == null ? void 0 : _a2.hide(); - this.oldPopover = null; - this.hoverEl.toggleClass("is-new", true); - this.document.body.addEventListener( - "click", - () => { - this.hoverEl.toggleClass("is-new", false); - }, - { once: true, capture: true } - ); - if (this.parent) { - this.parent.flowEditor = this; } - const viewHeaderEl = this.hoverEl.querySelector(".view-header"); - viewHeaderEl == null ? void 0 : viewHeaderEl.remove(); - const sizer = this.hoverEl.querySelector(".workspace-leaf"); - this.hoverEl.appendChild(sizer); - const inlineTitle = this.hoverEl.querySelector(".inline-title"); - inlineTitle == null ? void 0 : inlineTitle.remove(); - (_b2 = this.onShowCallback) == null ? void 0 : _b2.call(this); - this.onShowCallback = void 0; - } - transition() { - if (this.shouldShow()) { - if (this.state === import_obsidian11.PopoverState.Hiding) { - this.state = import_obsidian11.PopoverState.Shown; - clearTimeout(this.timer); - } - } else { - if (this.state === import_obsidian11.PopoverState.Showing) { - this.hide(); - } else { - if (this.state === import_obsidian11.PopoverState.Shown) { - this.state = import_obsidian11.PopoverState.Hiding; - this.timer = window.setTimeout(() => { - if (this.shouldShow()) { - this.transition(); - } else { - this.hide(); - } - }, this.waitTime); - } - } + }, + w: function w4(date, token, localize2, options) { + var week = getUTCWeek(date, options); + if (token === "wo") { + return localize2.ordinalNumber(week, { + unit: "week" + }); } - } - shouldShow() { - return this.shouldShowSelf() || this.shouldShowChild(); - } - shouldShowChild() { - return FlowEditor.activePopovers().some((popover) => { - if (popover !== this && popover.targetEl && this.hoverEl.contains(popover.targetEl)) { - return popover.shouldShow(); - } - return false; - }); - } - shouldShowSelf() { - return !this.detaching && !!(this.onTarget || this.state == import_obsidian11.PopoverState.Shown || this.document.querySelector( - `body>.modal-container, body > #he${this.id} ~ .menu, body > #he${this.id} ~ .suggestion-container` - )); - } - show() { - if (!this.targetEl || this.document.body.contains(this.targetEl)) { - this.state = import_obsidian11.PopoverState.Shown; - this.timer = 0; - this.shownPos = mouseCoords; - this.targetEl.replaceChildren(this.hoverEl); - this.onShow(); - app.workspace.onLayoutChange(); - this.load(); - } else { - this.hide(); + return addLeadingZeros(week, token.length); + }, + I: function I3(date, token, localize2) { + var isoWeek = getUTCISOWeek(date); + if (token === "Io") { + return localize2.ordinalNumber(isoWeek, { + unit: "week" + }); } - } - onHide() { - var _a2; - this.oldPopover = null; - if (((_a2 = this.parent) == null ? void 0 : _a2.flowEditor) === this) { - this.parent.flowEditor = null; + return addLeadingZeros(isoWeek, token.length); + }, + d: function d4(date, token, localize2) { + if (token === "do") { + return localize2.ordinalNumber(date.getUTCDate(), { + unit: "date" + }); } - } - hide() { - var _a2; - this.onTarget = false; - this.detaching = true; - if (this.timer) { - clearTimeout(this.timer); - this.timer = 0; + return lightFormatters_default.d(date, token); + }, + D: function D2(date, token, localize2) { + var dayOfYear = getUTCDayOfYear(date); + if (token === "Do") { + return localize2.ordinalNumber(dayOfYear, { + unit: "dayOfYear" + }); } - this.hoverEl.hide(); - if (this.opening) - return; - const leaves = this.leaves(); - if (leaves.length) { - leaves.forEach((leaf) => leaf.detach()); - } else { - this.parent = null; - (_a2 = this.abortController) == null ? void 0 : _a2.unload(); - this.abortController = void 0; - return this.nativeHide(); + return addLeadingZeros(dayOfYear, token.length); + }, + E: function E2(date, token, localize2) { + var dayOfWeek = date.getUTCDay(); + switch (token) { + case "E": + case "EE": + case "EEE": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + case "EEEEE": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + case "EEEEEE": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + case "EEEE": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); } - } - nativeHide() { - var _a2; - const { hoverEl, targetEl } = this; - this.state = import_obsidian11.PopoverState.Hidden; - hoverEl.detach(); - if (targetEl) { - const parent = targetEl.matchParent(".mk-hover-popover"); - if (parent) - (_a2 = popovers.get(parent)) == null ? void 0 : _a2.transition(); + }, + e: function e3(date, token, localize2, options) { + var dayOfWeek = date.getUTCDay(); + var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + case "e": + return String(localDayOfWeek); + case "ee": + return addLeadingZeros(localDayOfWeek, 2); + case "eo": + return localize2.ordinalNumber(localDayOfWeek, { + unit: "day" + }); + case "eee": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + case "eeeee": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + case "eeeeee": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + case "eeee": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); } - this.onHide(); - this.unload(); - } - resolveLink(linkText, sourcePath) { - const link = (0, import_obsidian11.parseLinktext)(linkText); - const tFile = link ? this.plugin.app.metadataCache.getFirstLinkpathDest( - link.path, - sourcePath != null ? sourcePath : "" - ) : null; - return tFile; - } - async openFile(file, openState, useLeaf) { - if (this.detaching) - return; - const leaf = useLeaf != null ? useLeaf : this.attachLeaf(); - this.opening = true; - try { - await leaf.openFile(file, openState); - } catch (e4) { - console.error(e4); - } finally { - this.opening = false; - if (this.detaching) - this.hide(); + }, + c: function c3(date, token, localize2, options) { + var dayOfWeek = date.getUTCDay(); + var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; + switch (token) { + case "c": + return String(localDayOfWeek); + case "cc": + return addLeadingZeros(localDayOfWeek, token.length); + case "co": + return localize2.ordinalNumber(localDayOfWeek, { + unit: "day" + }); + case "ccc": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "standalone" + }); + case "ccccc": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "standalone" + }); + case "cccccc": + return localize2.day(dayOfWeek, { + width: "short", + context: "standalone" + }); + case "cccc": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "standalone" + }); } - this.plugin.app.workspace.setActiveLeaf(leaf); - return leaf; - } - buildState(parentMode, eState) { - return { - active: false, - state: {}, - eState - }; - } - buildEphemeralState(file, link) { - const cache = this.plugin.app.metadataCache.getFileCache(file); - const subpath = cache ? (0, import_obsidian11.resolveSubpath)(cache, (link == null ? void 0 : link.subpath) || "") : void 0; - const eState = { subpath: link == null ? void 0 : link.subpath }; - if (subpath) { - eState.line = subpath.start.line; - eState.startLoc = subpath.start; - eState.endLoc = subpath.end || void 0; + }, + i: function i3(date, token, localize2) { + var dayOfWeek = date.getUTCDay(); + var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + switch (token) { + case "i": + return String(isoDayOfWeek); + case "ii": + return addLeadingZeros(isoDayOfWeek, token.length); + case "io": + return localize2.ordinalNumber(isoDayOfWeek, { + unit: "day" + }); + case "iii": + return localize2.day(dayOfWeek, { + width: "abbreviated", + context: "formatting" + }); + case "iiiii": + return localize2.day(dayOfWeek, { + width: "narrow", + context: "formatting" + }); + case "iiiiii": + return localize2.day(dayOfWeek, { + width: "short", + context: "formatting" + }); + case "iiii": + default: + return localize2.day(dayOfWeek, { + width: "wide", + context: "formatting" + }); } - return eState; - } -}; - -// src/cm-extensions/flowEditor/atomic.ts -var import_state5 = require("@codemirror/state"); -var arrowKeyAnnotation = import_state5.Annotation.define(); -var atomicSelect = import_state5.EditorState.transactionFilter.of( - (tr) => { - if (tr.isUserEvent("delete") || tr.isUserEvent("input")) { - return tr; + }, + a: function a4(date, token, localize2) { + var hours = date.getUTCHours(); + var dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; + switch (token) { + case "a": + case "aa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "aaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "aaaaa": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "aaaa": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); } - const flowID = tr.startState.field(flowIDStateField, false); - if (tr.annotation(arrowKeyAnnotation) && flowID) { - const oldSel = tr.startState.selection.main; - const lineRange = tr.state.field(selectiveLinesFacet, false); - const posRange = lineRange && lineRange[0] != void 0 ? lineRangeToPosRange(tr.startState, lineRange) : { from: 0, to: tr.startState.doc.length }; - if (oldSel.from <= posRange.from && tr.annotation(arrowKeyAnnotation) == 3) { - focusFlowEditorParent(flowID, true); - } - if (oldSel.to >= posRange.to && tr.annotation(arrowKeyAnnotation) == 4) { - focusFlowEditorParent(flowID, false); - } - return tr; + }, + b: function b3(date, token, localize2) { + var hours = date.getUTCHours(); + var dayPeriodEnumValue; + if (hours === 12) { + dayPeriodEnumValue = dayPeriodEnum.noon; + } else if (hours === 0) { + dayPeriodEnumValue = dayPeriodEnum.midnight; + } else { + dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; } - const selection = tr.newSelection.main; - if (selection.from == 0 && selection.to == 0 || selection.from != selection.to) - return tr; - const flowEditors = tr.state.field(flowEditorInfo, false); - if (flowEditors) { - for (let info of flowEditors) { - if (info.embed == 1) { - if (info.from - 3 <= selection.from && info.to + 2 >= selection.to && info.expandedState == 2) { - const top = tr.annotation(arrowKeyAnnotation) == 1 || tr.startState.selection.main.from > selection.from ? false : true; - focusFlowEditor(info.id, top); - return { - selection: import_state5.EditorSelection.single(info.from - 4) - }; - break; - } - } - } + switch (token) { + case "b": + case "bb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "bbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }).toLowerCase(); + case "bbbbb": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "bbbb": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); } - return tr; - } -); - -// src/components/ContextView/InlineContextView.tsx -var import_obsidian19 = require("obsidian"); - -// node_modules/@dnd-kit/utilities/dist/utilities.esm.js -function useCombinedRefs(...refs) { - return F( - () => (node) => { - refs.forEach((ref) => ref(node)); - }, - refs - ); -} -var canUseDOM2 = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined"; -function isWindow(element) { - const elementString = Object.prototype.toString.call(element); - return elementString === "[object Window]" || elementString === "[object global]"; -} -function isNode2(node) { - return "nodeType" in node; -} -function getWindow(target) { - var _target$ownerDocument, _target$ownerDocument2; - if (!target) { - return window; - } - if (isWindow(target)) { - return target; - } - if (!isNode2(target)) { - return window; - } - return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window; -} -function isDocument(node) { - const { - Document - } = getWindow(node); - return node instanceof Document; -} -function isHTMLElement(node) { - if (isWindow(node)) { - return false; - } - return node instanceof getWindow(node).HTMLElement; -} -function isSVGElement(node) { - return node instanceof getWindow(node).SVGElement; -} -function getOwnerDocument(target) { - if (!target) { - return document; - } - if (isWindow(target)) { - return target.document; - } - if (!isNode2(target)) { - return document; - } - if (isDocument(target)) { - return target; - } - if (isHTMLElement(target)) { - return target.ownerDocument; - } - return document; -} -var useIsomorphicLayoutEffect2 = canUseDOM2 ? s2 : h2; -function useEvent(handler) { - const handlerRef = _2(handler); - useIsomorphicLayoutEffect2(() => { - handlerRef.current = handler; - }); - return T2(function(...args) { - return handlerRef.current == null ? void 0 : handlerRef.current(...args); - }, []); -} -function useInterval() { - const intervalRef = _2(null); - const set = T2((listener, duration) => { - intervalRef.current = setInterval(listener, duration); - }, []); - const clear = T2(() => { - if (intervalRef.current !== null) { - clearInterval(intervalRef.current); - intervalRef.current = null; + }, + B: function B4(date, token, localize2) { + var hours = date.getUTCHours(); + var dayPeriodEnumValue; + if (hours >= 17) { + dayPeriodEnumValue = dayPeriodEnum.evening; + } else if (hours >= 12) { + dayPeriodEnumValue = dayPeriodEnum.afternoon; + } else if (hours >= 4) { + dayPeriodEnumValue = dayPeriodEnum.morning; + } else { + dayPeriodEnumValue = dayPeriodEnum.night; } - }, []); - return [set, clear]; -} -function useLatestValue(value, dependencies = [value]) { - const valueRef = _2(value); - useIsomorphicLayoutEffect2(() => { - if (valueRef.current !== value) { - valueRef.current = value; + switch (token) { + case "B": + case "BB": + case "BBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "abbreviated", + context: "formatting" + }); + case "BBBBB": + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "narrow", + context: "formatting" + }); + case "BBBB": + default: + return localize2.dayPeriod(dayPeriodEnumValue, { + width: "wide", + context: "formatting" + }); } - }, dependencies); - return valueRef; -} -function useLazyMemo(callback, dependencies) { - const valueRef = _2(); - return F( - () => { - const newValue = callback(valueRef.current); - valueRef.current = newValue; - return newValue; - }, - [...dependencies] - ); -} -function useNodeRef(onChange) { - const onChangeHandler = useEvent(onChange); - const node = _2(null); - const setNodeRef = T2( - (element) => { - if (element !== node.current) { - onChangeHandler == null ? void 0 : onChangeHandler(element, node.current); - } - node.current = element; - }, - [] - ); - return [node, setNodeRef]; -} -function usePrevious2(value) { - const ref = _2(); - h2(() => { - ref.current = value; - }, [value]); - return ref.current; -} -var ids = {}; -function useUniqueId(prefix, value) { - return F(() => { - if (value) { - return value; + }, + h: function h4(date, token, localize2) { + if (token === "ho") { + var hours = date.getUTCHours() % 12; + if (hours === 0) + hours = 12; + return localize2.ordinalNumber(hours, { + unit: "hour" + }); } - const id2 = ids[prefix] == null ? 0 : ids[prefix] + 1; - ids[prefix] = id2; - return `${prefix}-${id2}`; - }, [prefix, value]); -} -function createAdjustmentFn(modifier) { - return (object, ...adjustments) => { - return adjustments.reduce((accumulator, adjustment) => { - const entries = Object.entries(adjustment); - for (const [key2, valueAdjustment] of entries) { - const value = accumulator[key2]; - if (value != null) { - accumulator[key2] = value + modifier * valueAdjustment; - } - } - return accumulator; - }, { - ...object - }); - }; -} -var add = /* @__PURE__ */ createAdjustmentFn(1); -var subtract = /* @__PURE__ */ createAdjustmentFn(-1); -function hasViewportRelativeCoordinates(event) { - return "clientX" in event && "clientY" in event; -} -function isKeyboardEvent(event) { - if (!event) { - return false; - } - const { - KeyboardEvent - } = getWindow(event.target); - return KeyboardEvent && event instanceof KeyboardEvent; -} -function isTouchEvent(event) { - if (!event) { - return false; - } - const { - TouchEvent - } = getWindow(event.target); - return TouchEvent && event instanceof TouchEvent; -} -function getEventCoordinates(event) { - if (isTouchEvent(event)) { - if (event.touches && event.touches.length) { - const { - clientX: x5, - clientY: y5 - } = event.touches[0]; - return { - x: x5, - y: y5 - }; - } else if (event.changedTouches && event.changedTouches.length) { - const { - clientX: x5, - clientY: y5 - } = event.changedTouches[0]; - return { - x: x5, - y: y5 - }; + return lightFormatters_default.h(date, token); + }, + H: function H4(date, token, localize2) { + if (token === "Ho") { + return localize2.ordinalNumber(date.getUTCHours(), { + unit: "hour" + }); } - } - if (hasViewportRelativeCoordinates(event)) { - return { - x: event.clientX, - y: event.clientY - }; - } - return null; -} -var CSS = /* @__PURE__ */ Object.freeze({ - Translate: { - toString(transform) { - if (!transform) { - return; - } - const { - x: x5, - y: y5 - } = transform; - return `translate3d(${x5 ? Math.round(x5) : 0}px, ${y5 ? Math.round(y5) : 0}px, 0)`; + return lightFormatters_default.H(date, token); + }, + K: function K2(date, token, localize2) { + var hours = date.getUTCHours() % 12; + if (token === "Ko") { + return localize2.ordinalNumber(hours, { + unit: "hour" + }); } + return addLeadingZeros(hours, token.length); }, - Scale: { - toString(transform) { - if (!transform) { - return; - } - const { - scaleX, - scaleY - } = transform; - return `scaleX(${scaleX}) scaleY(${scaleY})`; + k: function k4(date, token, localize2) { + var hours = date.getUTCHours(); + if (hours === 0) + hours = 24; + if (token === "ko") { + return localize2.ordinalNumber(hours, { + unit: "hour" + }); } + return addLeadingZeros(hours, token.length); }, - Transform: { - toString(transform) { - if (!transform) { - return; - } - return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(" "); + m: function m4(date, token, localize2) { + if (token === "mo") { + return localize2.ordinalNumber(date.getUTCMinutes(), { + unit: "minute" + }); } + return lightFormatters_default.m(date, token); }, - Transition: { - toString({ - property, - duration, - easing - }) { - return `${property} ${duration}ms ${easing}`; + s: function s4(date, token, localize2) { + if (token === "so") { + return localize2.ordinalNumber(date.getUTCSeconds(), { + unit: "second" + }); } - } -}); -var SELECTOR = "a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]"; -function findFirstFocusableNode(element) { - if (element.matches(SELECTOR)) { - return element; - } - return element.querySelector(SELECTOR); -} - -// node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js -var hiddenStyles = { - display: "none" -}; -function HiddenText(_ref) { - let { - id: id2, - value - } = _ref; - return bn.createElement("div", { - id: id2, - style: hiddenStyles - }, value); -} -var visuallyHidden = { - position: "fixed", - width: 1, - height: 1, - margin: -1, - border: 0, - padding: 0, - overflow: "hidden", - clip: "rect(0 0 0 0)", - clipPath: "inset(100%)", - whiteSpace: "nowrap" -}; -function LiveRegion(_ref) { - let { - id: id2, - announcement - } = _ref; - return bn.createElement("div", { - id: id2, - style: visuallyHidden, - role: "status", - "aria-live": "assertive", - "aria-atomic": true - }, announcement); -} -function useAnnouncement() { - const [announcement, setAnnouncement] = p2(""); - const announce = T2((value) => { - if (value != null) { - setAnnouncement(value); + return lightFormatters_default.s(date, token); + }, + S: function S3(date, token) { + return lightFormatters_default.S(date, token); + }, + X: function X2(date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timezoneOffset = originalDate.getTimezoneOffset(); + if (timezoneOffset === 0) { + return "Z"; } - }, []); - return { - announce, - announcement - }; -} - -// node_modules/@dnd-kit/core/dist/core.esm.js -var DndMonitorContext = /* @__PURE__ */ B(null); -function useDndMonitor(listener) { - const registerListener = q2(DndMonitorContext); - h2(() => { - if (!registerListener) { - throw new Error("useDndMonitor must be used within a children of "); + switch (token) { + case "X": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + case "XXXX": + case "XX": + return formatTimezone(timezoneOffset); + case "XXXXX": + case "XXX": + default: + return formatTimezone(timezoneOffset, ":"); } - const unsubscribe = registerListener(listener); - return unsubscribe; - }, [listener, registerListener]); -} -function useDndMonitorProvider() { - const [listeners] = p2(() => /* @__PURE__ */ new Set()); - const registerListener = T2((listener) => { - listeners.add(listener); - return () => listeners.delete(listener); - }, [listeners]); - const dispatch = T2((_ref) => { - let { - type, - event - } = _ref; - listeners.forEach((listener) => { - var _listener$type; - return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event); - }); - }, [listeners]); - return [dispatch, registerListener]; -} -var defaultScreenReaderInstructions = { - draggable: "\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n " -}; -var defaultAnnouncements = { - onDragStart(_ref) { - let { - active - } = _ref; - return "Picked up draggable item " + active.id + "."; }, - onDragOver(_ref2) { - let { - active, - over - } = _ref2; - if (over) { - return "Draggable item " + active.id + " was moved over droppable area " + over.id + "."; + x: function x4(date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timezoneOffset = originalDate.getTimezoneOffset(); + switch (token) { + case "x": + return formatTimezoneWithOptionalMinutes(timezoneOffset); + case "xxxx": + case "xx": + return formatTimezone(timezoneOffset); + case "xxxxx": + case "xxx": + default: + return formatTimezone(timezoneOffset, ":"); } - return "Draggable item " + active.id + " is no longer over a droppable area."; }, - onDragEnd(_ref3) { - let { - active, - over - } = _ref3; - if (over) { - return "Draggable item " + active.id + " was dropped over droppable area " + over.id; + O: function O3(date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timezoneOffset = originalDate.getTimezoneOffset(); + switch (token) { + case "O": + case "OO": + case "OOO": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + case "OOOO": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); } - return "Draggable item " + active.id + " was dropped."; }, - onDragCancel(_ref4) { - let { - active - } = _ref4; - return "Dragging was cancelled. Draggable item " + active.id + " was dropped."; + z: function z4(date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timezoneOffset = originalDate.getTimezoneOffset(); + switch (token) { + case "z": + case "zz": + case "zzz": + return "GMT" + formatTimezoneShort(timezoneOffset, ":"); + case "zzzz": + default: + return "GMT" + formatTimezone(timezoneOffset, ":"); + } + }, + t: function t3(date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timestamp = Math.floor(originalDate.getTime() / 1e3); + return addLeadingZeros(timestamp, token.length); + }, + T: function T5(date, token, _localize, options) { + var originalDate = options._originalDate || date; + var timestamp = originalDate.getTime(); + return addLeadingZeros(timestamp, token.length); } }; -function Accessibility(_ref) { - let { - announcements = defaultAnnouncements, - container, - hiddenTextDescribedById, - screenReaderInstructions = defaultScreenReaderInstructions - } = _ref; - const { - announce, - announcement - } = useAnnouncement(); - const liveRegionId = useUniqueId("DndLiveRegion"); - const [mounted, setMounted] = p2(false); - h2(() => { - setMounted(true); - }, []); - useDndMonitor(F(() => ({ - onDragStart(_ref2) { - let { - active - } = _ref2; - announce(announcements.onDragStart({ - active - })); - }, - onDragMove(_ref3) { - let { - active, - over - } = _ref3; - if (announcements.onDragMove) { - announce(announcements.onDragMove({ - active, - over - })); - } - }, - onDragOver(_ref4) { - let { - active, - over - } = _ref4; - announce(announcements.onDragOver({ - active, - over - })); - }, - onDragEnd(_ref5) { - let { - active, - over - } = _ref5; - announce(announcements.onDragEnd({ - active, - over - })); - }, - onDragCancel(_ref6) { - let { - active, - over - } = _ref6; - announce(announcements.onDragCancel({ - active, - over - })); - } - }), [announce, announcements])); - if (!mounted) { - return null; +function formatTimezoneShort(offset, dirtyDelimiter) { + var sign = offset > 0 ? "-" : "+"; + var absOffset = Math.abs(offset); + var hours = Math.floor(absOffset / 60); + var minutes = absOffset % 60; + if (minutes === 0) { + return sign + String(hours); } - const markup = bn.createElement(bn.Fragment, null, bn.createElement(HiddenText, { - id: hiddenTextDescribedById, - value: screenReaderInstructions.draggable - }), bn.createElement(LiveRegion, { - id: liveRegionId, - announcement - })); - return container ? j3(markup, container) : markup; + var delimiter = dirtyDelimiter || ""; + return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); } -var Action; -(function(Action2) { - Action2["DragStart"] = "dragStart"; - Action2["DragMove"] = "dragMove"; - Action2["DragEnd"] = "dragEnd"; - Action2["DragCancel"] = "dragCancel"; - Action2["DragOver"] = "dragOver"; - Action2["RegisterDroppable"] = "registerDroppable"; - Action2["SetDroppableDisabled"] = "setDroppableDisabled"; - Action2["UnregisterDroppable"] = "unregisterDroppable"; -})(Action || (Action = {})); -function noop() { +function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) { + if (offset % 60 === 0) { + var sign = offset > 0 ? "-" : "+"; + return sign + addLeadingZeros(Math.abs(offset) / 60, 2); + } + return formatTimezone(offset, dirtyDelimiter); } -function useSensor(sensor, options) { - return F( - () => ({ - sensor, - options: options != null ? options : {} - }), - [sensor, options] - ); +function formatTimezone(offset, dirtyDelimiter) { + var delimiter = dirtyDelimiter || ""; + var sign = offset > 0 ? "-" : "+"; + var absOffset = Math.abs(offset); + var hours = addLeadingZeros(Math.floor(absOffset / 60), 2); + var minutes = addLeadingZeros(absOffset % 60, 2); + return sign + hours + delimiter + minutes; } -function useSensors() { - for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) { - sensors[_key] = arguments[_key]; +var formatters_default = formatters2; + +// node_modules/date-fns/esm/_lib/format/longFormatters/index.js +var dateLongFormatter = function dateLongFormatter2(pattern, formatLong2) { + switch (pattern) { + case "P": + return formatLong2.date({ + width: "short" + }); + case "PP": + return formatLong2.date({ + width: "medium" + }); + case "PPP": + return formatLong2.date({ + width: "long" + }); + case "PPPP": + default: + return formatLong2.date({ + width: "full" + }); } - return F( - () => [...sensors].filter((sensor) => sensor != null), - [...sensors] - ); +}; +var timeLongFormatter = function timeLongFormatter2(pattern, formatLong2) { + switch (pattern) { + case "p": + return formatLong2.time({ + width: "short" + }); + case "pp": + return formatLong2.time({ + width: "medium" + }); + case "ppp": + return formatLong2.time({ + width: "long" + }); + case "pppp": + default: + return formatLong2.time({ + width: "full" + }); + } +}; +var dateTimeLongFormatter = function dateTimeLongFormatter2(pattern, formatLong2) { + var matchResult = pattern.match(/(P+)(p+)?/) || []; + var datePattern = matchResult[1]; + var timePattern = matchResult[2]; + if (!timePattern) { + return dateLongFormatter(pattern, formatLong2); + } + var dateTimeFormat; + switch (datePattern) { + case "P": + dateTimeFormat = formatLong2.dateTime({ + width: "short" + }); + break; + case "PP": + dateTimeFormat = formatLong2.dateTime({ + width: "medium" + }); + break; + case "PPP": + dateTimeFormat = formatLong2.dateTime({ + width: "long" + }); + break; + case "PPPP": + default: + dateTimeFormat = formatLong2.dateTime({ + width: "full" + }); + break; + } + return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); +}; +var longFormatters = { + p: timeLongFormatter, + P: dateTimeLongFormatter +}; +var longFormatters_default = longFormatters; + +// node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js +function getTimezoneOffsetInMilliseconds(date) { + var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())); + utcDate.setUTCFullYear(date.getFullYear()); + return date.getTime() - utcDate.getTime(); } -var defaultCoordinates = /* @__PURE__ */ Object.freeze({ - x: 0, - y: 0 -}); -function distanceBetween(p1, p22) { - return Math.sqrt(Math.pow(p1.x - p22.x, 2) + Math.pow(p1.y - p22.y, 2)); + +// node_modules/date-fns/esm/_lib/protectedTokens/index.js +var protectedDayOfYearTokens = ["D", "DD"]; +var protectedWeekYearTokens = ["YY", "YYYY"]; +function isProtectedDayOfYearToken(token) { + return protectedDayOfYearTokens.indexOf(token) !== -1; } -function getRelativeTransformOrigin(event, rect) { - const eventCoordinates = getEventCoordinates(event); - if (!eventCoordinates) { - return "0 0"; +function isProtectedWeekYearToken(token) { + return protectedWeekYearTokens.indexOf(token) !== -1; +} +function throwProtectedError(token, format2, input) { + if (token === "YYYY") { + throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format2, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); + } else if (token === "YY") { + throw new RangeError("Use `yy` instead of `YY` (in `".concat(format2, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); + } else if (token === "D") { + throw new RangeError("Use `d` instead of `D` (in `".concat(format2, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); + } else if (token === "DD") { + throw new RangeError("Use `dd` instead of `DD` (in `".concat(format2, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")); } - const transformOrigin = { - x: (eventCoordinates.x - rect.left) / rect.width * 100, - y: (eventCoordinates.y - rect.top) / rect.height * 100 - }; - return transformOrigin.x + "% " + transformOrigin.y + "%"; } -function sortCollisionsAsc(_ref, _ref2) { - let { - data: { - value: a5 + +// node_modules/date-fns/esm/_lib/defaultLocale/index.js +var defaultLocale_default = en_US_default; + +// node_modules/date-fns/esm/format/index.js +var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; +var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; +var escapedStringRegExp = /^'([^]*?)'?$/; +var doubleQuoteRegExp = /''/g; +var unescapedLatinCharacterRegExp = /[a-zA-Z]/; +function format(dirtyDate, dirtyFormatStr, options) { + var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4; + requiredArgs(2, arguments); + var formatStr = String(dirtyFormatStr); + var defaultOptions3 = getDefaultOptions(); + var locale2 = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions3.locale) !== null && _ref !== void 0 ? _ref : defaultLocale_default; + var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions3.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1); + if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { + throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); + } + var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions3.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions3.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0); + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); + } + if (!locale2.localize) { + throw new RangeError("locale must contain localize property"); + } + if (!locale2.formatLong) { + throw new RangeError("locale must contain formatLong property"); + } + var originalDate = toDate(dirtyDate); + if (!isValid(originalDate)) { + throw new RangeError("Invalid time value"); + } + var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate); + var utcDate = subMilliseconds(originalDate, timezoneOffset); + var formatterOptions = { + firstWeekContainsDate, + weekStartsOn, + locale: locale2, + _originalDate: originalDate + }; + var result = formatStr.match(longFormattingTokensRegExp).map(function(substring) { + var firstCharacter = substring[0]; + if (firstCharacter === "p" || firstCharacter === "P") { + var longFormatter = longFormatters_default[firstCharacter]; + return longFormatter(substring, locale2.formatLong); } - } = _ref; - let { - data: { - value: b4 + return substring; + }).join("").match(formattingTokensRegExp).map(function(substring) { + if (substring === "''") { + return "'"; } - } = _ref2; - return a5 - b4; -} -function sortCollisionsDesc(_ref3, _ref4) { - let { - data: { - value: a5 + var firstCharacter = substring[0]; + if (firstCharacter === "'") { + return cleanEscapedString(substring); } - } = _ref3; - let { - data: { - value: b4 + var formatter = formatters_default[firstCharacter]; + if (formatter) { + if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) { + throwProtectedError(substring, dirtyFormatStr, String(dirtyDate)); + } + if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) { + throwProtectedError(substring, dirtyFormatStr, String(dirtyDate)); + } + return formatter(utcDate, substring, locale2.localize, formatterOptions); } - } = _ref4; - return b4 - a5; + if (firstCharacter.match(unescapedLatinCharacterRegExp)) { + throw new RangeError("Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"); + } + return substring; + }).join(""); + return result; } -function cornersOfRectangle(_ref5) { - let { - left, - top, - height, - width - } = _ref5; - return [{ - x: left, - y: top - }, { - x: left + width, - y: top - }, { - x: left, - y: top + height - }, { - x: left + width, - y: top + height - }]; -} -function getFirstCollision(collisions, property) { - if (!collisions || collisions.length === 0) { - return null; +function cleanEscapedString(input) { + var matched = input.match(escapedStringRegExp); + if (!matched) { + return input; } - const [firstCollision] = collisions; - return property ? firstCollision[property] : firstCollision; + return matched[1].replace(doubleQuoteRegExp, "'"); } -function centerOfRectangle(rect, left, top) { - if (left === void 0) { - left = rect.left; - } - if (top === void 0) { - top = rect.top; - } - return { - x: left + rect.width * 0.5, - y: top + rect.height * 0.5 - }; + +// node_modules/date-fns/esm/endOfMonth/index.js +function endOfMonth(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var month = date.getMonth(); + date.setFullYear(date.getFullYear(), month + 1, 0); + date.setHours(23, 59, 59, 999); + return date; } -var closestCenter = (_ref) => { - let { - collisionRect, - droppableRects, - droppableContainers - } = _ref; - const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top); - const collisions = []; - for (const droppableContainer of droppableContainers) { - const { - id: id2 - } = droppableContainer; - const rect = droppableRects.get(id2); - if (rect) { - const distBetween = distanceBetween(centerOfRectangle(rect), centerRect); - collisions.push({ - id: id2, - data: { - droppableContainer, - value: distBetween - } - }); - } - } - return collisions.sort(sortCollisionsAsc); -}; -var closestCorners = (_ref) => { - let { - collisionRect, - droppableRects, - droppableContainers - } = _ref; - const corners = cornersOfRectangle(collisionRect); - const collisions = []; - for (const droppableContainer of droppableContainers) { - const { - id: id2 - } = droppableContainer; - const rect = droppableRects.get(id2); - if (rect) { - const rectCorners = cornersOfRectangle(rect); - const distances = corners.reduce((accumulator, corner, index) => { - return accumulator + distanceBetween(rectCorners[index], corner); - }, 0); - const effectiveDistance = Number((distances / 4).toFixed(4)); - collisions.push({ - id: id2, - data: { - droppableContainer, - value: effectiveDistance - } - }); - } - } - return collisions.sort(sortCollisionsAsc); -}; -function getIntersectionRatio(entry, target) { - const top = Math.max(target.top, entry.top); - const left = Math.max(target.left, entry.left); - const right = Math.min(target.left + target.width, entry.left + entry.width); - const bottom = Math.min(target.top + target.height, entry.top + entry.height); - const width = right - left; - const height = bottom - top; - if (left < right && top < bottom) { - const targetArea = target.width * target.height; - const entryArea = entry.width * entry.height; - const intersectionArea = width * height; - const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea); - return Number(intersectionRatio.toFixed(4)); - } - return 0; + +// node_modules/date-fns/esm/startOfDay/index.js +function startOfDay(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setHours(0, 0, 0, 0); + return date; } -var rectIntersection = (_ref) => { - let { - collisionRect, - droppableRects, - droppableContainers - } = _ref; - const collisions = []; - for (const droppableContainer of droppableContainers) { - const { - id: id2 - } = droppableContainer; - const rect = droppableRects.get(id2); - if (rect) { - const intersectionRatio = getIntersectionRatio(rect, collisionRect); - if (intersectionRatio > 0) { - collisions.push({ - id: id2, - data: { - droppableContainer, - value: intersectionRatio - } - }); - } - } - } - return collisions.sort(sortCollisionsDesc); -}; -function adjustScale(transform, rect1, rect2) { - return { - ...transform, - scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1, - scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1 - }; + +// node_modules/date-fns/esm/startOfMonth/index.js +function startOfMonth(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setDate(1); + date.setHours(0, 0, 0, 0); + return date; } -function getRectDelta(rect1, rect2) { - return rect1 && rect2 ? { - x: rect1.left - rect2.left, - y: rect1.top - rect2.top - } : defaultCoordinates; + +// node_modules/date-fns/esm/isSameYear/index.js +function isSameYear(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + return dateLeft.getFullYear() === dateRight.getFullYear(); } -function createRectAdjustmentFn(modifier) { - return function adjustClientRect(rect) { - for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - adjustments[_key - 1] = arguments[_key]; - } - return adjustments.reduce((acc, adjustment) => ({ - ...acc, - top: acc.top + modifier * adjustment.y, - bottom: acc.bottom + modifier * adjustment.y, - left: acc.left + modifier * adjustment.x, - right: acc.right + modifier * adjustment.x - }), { - ...rect - }); - }; + +// node_modules/date-fns/esm/getDaysInMonth/index.js +function getDaysInMonth(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var year = date.getFullYear(); + var monthIndex = date.getMonth(); + var lastDayOfMonth2 = new Date(0); + lastDayOfMonth2.setFullYear(year, monthIndex + 1, 0); + lastDayOfMonth2.setHours(0, 0, 0, 0); + return lastDayOfMonth2.getDate(); } -var getAdjustedRect = /* @__PURE__ */ createRectAdjustmentFn(1); -function parseTransform(transform) { - if (transform.startsWith("matrix3d(")) { - const transformArray = transform.slice(9, -1).split(/, /); - return { - x: +transformArray[12], - y: +transformArray[13], - scaleX: +transformArray[0], - scaleY: +transformArray[5] - }; - } else if (transform.startsWith("matrix(")) { - const transformArray = transform.slice(7, -1).split(/, /); - return { - x: +transformArray[4], - y: +transformArray[5], - scaleX: +transformArray[0], - scaleY: +transformArray[3] - }; - } - return null; + +// node_modules/date-fns/esm/setMonth/index.js +function setMonth(dirtyDate, dirtyMonth) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var month = toInteger(dirtyMonth); + var year = date.getFullYear(); + var day = date.getDate(); + var dateWithDesiredMonth = new Date(0); + dateWithDesiredMonth.setFullYear(year, month, 15); + dateWithDesiredMonth.setHours(0, 0, 0, 0); + var daysInMonth = getDaysInMonth(dateWithDesiredMonth); + date.setMonth(month, Math.min(day, daysInMonth)); + return date; } -function inverseTransform(rect, transform, transformOrigin) { - const parsedTransform = parseTransform(transform); - if (!parsedTransform) { - return rect; + +// node_modules/date-fns/esm/setYear/index.js +function setYear(dirtyDate, dirtyYear) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var year = toInteger(dirtyYear); + if (isNaN(date.getTime())) { + return new Date(NaN); } - const { - scaleX, - scaleY, - x: translateX, - y: translateY - } = parsedTransform; - const x5 = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin); - const y5 = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(" ") + 1)); - const w5 = scaleX ? rect.width / scaleX : rect.width; - const h5 = scaleY ? rect.height / scaleY : rect.height; - return { - width: w5, - height: h5, - top: y5, - right: x5 + w5, - bottom: y5 + h5, - left: x5 - }; + date.setFullYear(year); + return date; } -var defaultOptions2 = { - ignoreTransform: false -}; -function getClientRect(element, options) { - if (options === void 0) { - options = defaultOptions2; + +// node_modules/date-fns/esm/startOfYear/index.js +function startOfYear(dirtyDate) { + requiredArgs(1, arguments); + var cleanDate = toDate(dirtyDate); + var date = new Date(0); + date.setFullYear(cleanDate.getFullYear(), 0, 1); + date.setHours(0, 0, 0, 0); + return date; +} + +// node_modules/date-fns/esm/addMonths/index.js +function addMonths(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var amount = toInteger(dirtyAmount); + if (isNaN(amount)) { + return new Date(NaN); } - let rect = element.getBoundingClientRect(); - if (options.ignoreTransform) { - const { - getComputedStyle - } = getWindow(element); - const { - transform, - transformOrigin - } = getComputedStyle(element); - if (transform) { - rect = inverseTransform(rect, transform, transformOrigin); - } + if (!amount) { + return date; } - const { - top, - left, - width, - height, - bottom, - right - } = rect; - return { - top, - left, - width, - height, - bottom, - right - }; -} -function getTransformAgnosticClientRect(element) { - return getClientRect(element, { - ignoreTransform: true - }); -} -function getWindowClientRect(element) { - const width = element.innerWidth; - const height = element.innerHeight; - return { - top: 0, - left: 0, - right: width, - bottom: height, - width, - height - }; -} -function isFixed(node, computedStyle) { - if (computedStyle === void 0) { - computedStyle = getWindow(node).getComputedStyle(node); + var dayOfMonth = date.getDate(); + var endOfDesiredMonth = new Date(date.getTime()); + endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0); + var daysInMonth = endOfDesiredMonth.getDate(); + if (dayOfMonth >= daysInMonth) { + return endOfDesiredMonth; + } else { + date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth); + return date; } - return computedStyle.position === "fixed"; } -function isScrollable(element, computedStyle) { - if (computedStyle === void 0) { - computedStyle = getWindow(element).getComputedStyle(element); - } - const overflowRegex = /(auto|scroll|overlay)/; - const properties2 = ["overflow", "overflowX", "overflowY"]; - return properties2.some((property) => { - const value = computedStyle[property]; - return typeof value === "string" ? overflowRegex.test(value) : false; - }); + +// node_modules/date-fns/esm/isBefore/index.js +function isBefore(dirtyDate, dirtyDateToCompare) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var dateToCompare = toDate(dirtyDateToCompare); + return date.getTime() < dateToCompare.getTime(); } -function getScrollableAncestors(element, limit) { - const scrollParents = []; - function findScrollableAncestors(node) { - if (limit != null && scrollParents.length >= limit) { - return scrollParents; - } - if (!node) { - return scrollParents; - } - if (isDocument(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) { - scrollParents.push(node.scrollingElement); - return scrollParents; - } - if (!isHTMLElement(node) || isSVGElement(node)) { - return scrollParents; - } - if (scrollParents.includes(node)) { - return scrollParents; - } - const { - getComputedStyle - } = getWindow(node); - const computedStyle = getComputedStyle(node); - if (node !== element) { - if (isScrollable(node, computedStyle)) { - scrollParents.push(node); - } - } - if (isFixed(node, computedStyle)) { - return scrollParents; - } - return findScrollableAncestors(node.parentNode); - } - if (!element) { - return scrollParents; - } - return findScrollableAncestors(element); + +// node_modules/date-fns/esm/isSameMonth/index.js +function isSameMonth(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth(); } -function getFirstScrollableAncestor(node) { - const [firstScrollableAncestor] = getScrollableAncestors(node, 1); - return firstScrollableAncestor != null ? firstScrollableAncestor : null; + +// node_modules/date-fns/esm/differenceInCalendarMonths/index.js +function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear(); + var monthDiff = dateLeft.getMonth() - dateRight.getMonth(); + return yearDiff * 12 + monthDiff; } -function getScrollableElement(element) { - if (!canUseDOM2 || !element) { - return null; - } - if (isWindow(element)) { - return element; - } - if (!isNode2(element)) { - return null; - } - if (isDocument(element) || element === getOwnerDocument(element).scrollingElement) { - return window; + +// node_modules/date-fns/esm/addDays/index.js +function addDays(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var amount = toInteger(dirtyAmount); + if (isNaN(amount)) { + return new Date(NaN); } - if (isHTMLElement(element)) { - return element; + if (!amount) { + return date; } - return null; + date.setDate(date.getDate() + amount); + return date; } -function getScrollXCoordinate(element) { - if (isWindow(element)) { - return element.scrollX; + +// node_modules/date-fns/esm/startOfWeek/index.js +function startOfWeek(dirtyDate, options) { + var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; + requiredArgs(1, arguments); + var defaultOptions3 = getDefaultOptions(); + var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } - return element.scrollLeft; + var date = toDate(dirtyDate); + var day = date.getDay(); + var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; + date.setDate(date.getDate() - diff); + date.setHours(0, 0, 0, 0); + return date; } -function getScrollYCoordinate(element) { - if (isWindow(element)) { - return element.scrollY; - } - return element.scrollTop; + +// node_modules/date-fns/esm/startOfISOWeek/index.js +function startOfISOWeek(dirtyDate) { + requiredArgs(1, arguments); + return startOfWeek(dirtyDate, { + weekStartsOn: 1 + }); } -function getScrollCoordinates(element) { - return { - x: getScrollXCoordinate(element), - y: getScrollYCoordinate(element) - }; + +// node_modules/date-fns/esm/getTime/index.js +function getTime(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var timestamp = date.getTime(); + return timestamp; } -var Direction2; -(function(Direction3) { - Direction3[Direction3["Forward"] = 1] = "Forward"; - Direction3[Direction3["Backward"] = -1] = "Backward"; -})(Direction2 || (Direction2 = {})); -function isDocumentScrollingElement(element) { - if (!canUseDOM2 || !element) { - return false; - } - return element === document.scrollingElement; + +// node_modules/date-fns/esm/getUnixTime/index.js +function getUnixTime(dirtyDate) { + requiredArgs(1, arguments); + return Math.floor(getTime(dirtyDate) / 1e3); } -function getScrollPosition(scrollingContainer) { - const minScroll = { - x: 0, - y: 0 - }; - const dimensions = isDocumentScrollingElement(scrollingContainer) ? { - height: window.innerHeight, - width: window.innerWidth - } : { - height: scrollingContainer.clientHeight, - width: scrollingContainer.clientWidth - }; - const maxScroll = { - x: scrollingContainer.scrollWidth - dimensions.width, - y: scrollingContainer.scrollHeight - dimensions.height - }; - const isTop = scrollingContainer.scrollTop <= minScroll.y; - const isLeft = scrollingContainer.scrollLeft <= minScroll.x; - const isBottom = scrollingContainer.scrollTop >= maxScroll.y; - const isRight = scrollingContainer.scrollLeft >= maxScroll.x; - return { - isTop, - isLeft, - isBottom, - isRight, - maxScroll, - minScroll - }; + +// node_modules/date-fns/esm/isSameDay/index.js +function isSameDay(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeftStartOfDay = startOfDay(dirtyDateLeft); + var dateRightStartOfDay = startOfDay(dirtyDateRight); + return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime(); } -var defaultThreshold = { - x: 0.2, - y: 0.2 -}; -function getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) { - let { - top, - left, - right, - bottom - } = _ref; - if (acceleration === void 0) { - acceleration = 10; - } - if (thresholdPercentage === void 0) { - thresholdPercentage = defaultThreshold; - } - const { - isTop, - isBottom, - isLeft, - isRight - } = getScrollPosition(scrollContainer); - const direction = { - x: 0, - y: 0 - }; - const speed = { - x: 0, - y: 0 - }; - const threshold = { - height: scrollContainerRect.height * thresholdPercentage.y, - width: scrollContainerRect.width * thresholdPercentage.x - }; - if (!isTop && top <= scrollContainerRect.top + threshold.height) { - direction.y = Direction2.Backward; - speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height); - } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) { - direction.y = Direction2.Forward; - speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height); - } - if (!isRight && right >= scrollContainerRect.right - threshold.width) { - direction.x = Direction2.Forward; - speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width); - } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) { - direction.x = Direction2.Backward; - speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width); + +// node_modules/date-fns/esm/getISOWeekYear/index.js +function getISOWeekYear(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var year = date.getFullYear(); + var fourthOfJanuaryOfNextYear = new Date(0); + fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); + fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); + var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); + var fourthOfJanuaryOfThisYear = new Date(0); + fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); + fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); + var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); + if (date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; } - return { - direction, - speed - }; } -function getScrollElementRect(element) { - if (element === document.scrollingElement) { - const { - innerWidth: innerWidth2, - innerHeight: innerHeight2 - } = window; - return { - top: 0, - left: 0, - right: innerWidth2, - bottom: innerHeight2, - width: innerWidth2, - height: innerHeight2 - }; - } - const { - top, - left, - right, - bottom - } = element.getBoundingClientRect(); - return { - top, - left, - right, - bottom, - width: element.clientWidth, - height: element.clientHeight - }; + +// node_modules/date-fns/esm/startOfISOWeekYear/index.js +function startOfISOWeekYear(dirtyDate) { + requiredArgs(1, arguments); + var year = getISOWeekYear(dirtyDate); + var fourthOfJanuary = new Date(0); + fourthOfJanuary.setFullYear(year, 0, 4); + fourthOfJanuary.setHours(0, 0, 0, 0); + var date = startOfISOWeek(fourthOfJanuary); + return date; } -function getScrollOffsets(scrollableAncestors) { - return scrollableAncestors.reduce((acc, node) => { - return add(acc, getScrollCoordinates(node)); - }, defaultCoordinates); + +// node_modules/date-fns/esm/differenceInCalendarDays/index.js +var MILLISECONDS_IN_DAY2 = 864e5; +function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var startOfDayLeft = startOfDay(dirtyDateLeft); + var startOfDayRight = startOfDay(dirtyDateRight); + var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft); + var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); + return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY2); } -function getScrollXOffset(scrollableAncestors) { - return scrollableAncestors.reduce((acc, node) => { - return acc + getScrollXCoordinate(node); - }, 0); + +// node_modules/date-fns/esm/addWeeks/index.js +function addWeeks(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + var days = amount * 7; + return addDays(dirtyDate, days); } -function getScrollYOffset(scrollableAncestors) { - return scrollableAncestors.reduce((acc, node) => { - return acc + getScrollYCoordinate(node); - }, 0); + +// node_modules/date-fns/esm/addYears/index.js +function addYears(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + return addMonths(dirtyDate, amount * 12); } -function scrollIntoViewIfNeeded(element, measure) { - if (measure === void 0) { - measure = getClientRect; - } - if (!element) { - return; - } - const { - top, - left, - bottom, - right - } = measure(element); - const firstScrollableAncestor = getFirstScrollableAncestor(element); - if (!firstScrollableAncestor) { - return; + +// node_modules/date-fns/esm/max/index.js +function _typeof3(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof3 = function _typeof5(obj2) { + return typeof obj2; + }; + } else { + _typeof3 = function _typeof5(obj2) { + return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; + }; } - if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) { - element.scrollIntoView({ - block: "center", - inline: "center" - }); + return _typeof3(obj); +} +function max2(dirtyDatesArray) { + requiredArgs(1, arguments); + var datesArray; + if (dirtyDatesArray && typeof dirtyDatesArray.forEach === "function") { + datesArray = dirtyDatesArray; + } else if (_typeof3(dirtyDatesArray) === "object" && dirtyDatesArray !== null) { + datesArray = Array.prototype.slice.call(dirtyDatesArray); + } else { + return new Date(NaN); } + var result; + datesArray.forEach(function(dirtyDate) { + var currentDate = toDate(dirtyDate); + if (result === void 0 || result < currentDate || isNaN(Number(currentDate))) { + result = currentDate; + } + }); + return result || new Date(NaN); } -var properties = [["x", ["left", "right"], getScrollXOffset], ["y", ["top", "bottom"], getScrollYOffset]]; -var Rect = class { - constructor(rect, element) { - this.rect = void 0; - this.width = void 0; - this.height = void 0; - this.top = void 0; - this.bottom = void 0; - this.right = void 0; - this.left = void 0; - const scrollableAncestors = getScrollableAncestors(element); - const scrollOffsets = getScrollOffsets(scrollableAncestors); - this.rect = { - ...rect + +// node_modules/date-fns/esm/min/index.js +function _typeof4(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof4 = function _typeof5(obj2) { + return typeof obj2; }; - this.width = rect.width; - this.height = rect.height; - for (const [axis, keys, getScrollOffset] of properties) { - for (const key2 of keys) { - Object.defineProperty(this, key2, { - get: () => { - const currentOffsets = getScrollOffset(scrollableAncestors); - const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets; - return this.rect[key2] + scrollOffsetsDeltla; - }, - enumerable: true - }); - } - } - Object.defineProperty(this, "rect", { - enumerable: false - }); - } -}; -var Listeners = class { - constructor(target) { - this.target = void 0; - this.listeners = []; - this.removeAll = () => { - this.listeners.forEach((listener) => { - var _this$target; - return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener); - }); + } else { + _typeof4 = function _typeof5(obj2) { + return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; - this.target = target; - } - add(eventName, handler, options) { - var _this$target2; - (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options); - this.listeners.push([eventName, handler, options]); } -}; -function getEventListenerTarget(target) { - const { - EventTarget - } = getWindow(target); - return target instanceof EventTarget ? target : getOwnerDocument(target); + return _typeof4(obj); } -function hasExceededDistance(delta, measurement) { - const dx = Math.abs(delta.x); - const dy = Math.abs(delta.y); - if (typeof measurement === "number") { - return Math.sqrt(dx ** 2 + dy ** 2) > measurement; - } - if ("x" in measurement && "y" in measurement) { - return dx > measurement.x && dy > measurement.y; - } - if ("x" in measurement) { - return dx > measurement.x; +function min2(dirtyDatesArray) { + requiredArgs(1, arguments); + var datesArray; + if (dirtyDatesArray && typeof dirtyDatesArray.forEach === "function") { + datesArray = dirtyDatesArray; + } else if (_typeof4(dirtyDatesArray) === "object" && dirtyDatesArray !== null) { + datesArray = Array.prototype.slice.call(dirtyDatesArray); + } else { + return new Date(NaN); } - if ("y" in measurement) { - return dy > measurement.y; + var result; + datesArray.forEach(function(dirtyDate) { + var currentDate = toDate(dirtyDate); + if (result === void 0 || result > currentDate || isNaN(currentDate.getDate())) { + result = currentDate; + } + }); + return result || new Date(NaN); +} + +// node_modules/date-fns/esm/compareAsc/index.js +function compareAsc(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + var diff = dateLeft.getTime() - dateRight.getTime(); + if (diff < 0) { + return -1; + } else if (diff > 0) { + return 1; + } else { + return diff; } - return false; } -var EventName; -(function(EventName2) { - EventName2["Click"] = "click"; - EventName2["DragStart"] = "dragstart"; - EventName2["Keydown"] = "keydown"; - EventName2["ContextMenu"] = "contextmenu"; - EventName2["Resize"] = "resize"; - EventName2["SelectionChange"] = "selectionchange"; - EventName2["VisibilityChange"] = "visibilitychange"; -})(EventName || (EventName = {})); -function preventDefault(event) { - event.preventDefault(); + +// node_modules/date-fns/esm/differenceInCalendarWeeks/index.js +var MILLISECONDS_IN_WEEK3 = 6048e5; +function differenceInCalendarWeeks(dirtyDateLeft, dirtyDateRight, options) { + requiredArgs(2, arguments); + var startOfWeekLeft = startOfWeek(dirtyDateLeft, options); + var startOfWeekRight = startOfWeek(dirtyDateRight, options); + var timestampLeft = startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft); + var timestampRight = startOfWeekRight.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekRight); + return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK3); } -function stopPropagation(event) { - event.stopPropagation(); + +// node_modules/date-fns/esm/differenceInMilliseconds/index.js +function differenceInMilliseconds(dateLeft, dateRight) { + requiredArgs(2, arguments); + return toDate(dateLeft).getTime() - toDate(dateRight).getTime(); } -var KeyboardCode; -(function(KeyboardCode2) { - KeyboardCode2["Space"] = "Space"; - KeyboardCode2["Down"] = "ArrowDown"; - KeyboardCode2["Right"] = "ArrowRight"; - KeyboardCode2["Left"] = "ArrowLeft"; - KeyboardCode2["Up"] = "ArrowUp"; - KeyboardCode2["Esc"] = "Escape"; - KeyboardCode2["Enter"] = "Enter"; -})(KeyboardCode || (KeyboardCode = {})); -var defaultKeyboardCodes = { - start: [KeyboardCode.Space, KeyboardCode.Enter], - cancel: [KeyboardCode.Esc], - end: [KeyboardCode.Space, KeyboardCode.Enter] -}; -var defaultKeyboardCoordinateGetter = (event, _ref) => { - let { - currentCoordinates - } = _ref; - switch (event.code) { - case KeyboardCode.Right: - return { - ...currentCoordinates, - x: currentCoordinates.x + 25 - }; - case KeyboardCode.Left: - return { - ...currentCoordinates, - x: currentCoordinates.x - 25 - }; - case KeyboardCode.Down: - return { - ...currentCoordinates, - y: currentCoordinates.y + 25 - }; - case KeyboardCode.Up: - return { - ...currentCoordinates, - y: currentCoordinates.y - 25 - }; + +// node_modules/date-fns/esm/_lib/roundingMethods/index.js +var roundingMap = { + ceil: Math.ceil, + round: Math.round, + floor: Math.floor, + trunc: function trunc(value) { + return value < 0 ? Math.ceil(value) : Math.floor(value); } - return void 0; }; -var KeyboardSensor = class { - constructor(props2) { - this.props = void 0; - this.autoScrollEnabled = false; - this.referenceCoordinates = void 0; - this.listeners = void 0; - this.windowListeners = void 0; - this.props = props2; - const { - event: { - target - } - } = props2; - this.props = props2; - this.listeners = new Listeners(getOwnerDocument(target)); - this.windowListeners = new Listeners(getWindow(target)); - this.handleKeyDown = this.handleKeyDown.bind(this); - this.handleCancel = this.handleCancel.bind(this); - this.attach(); - } - attach() { - this.handleStart(); - this.windowListeners.add(EventName.Resize, this.handleCancel); - this.windowListeners.add(EventName.VisibilityChange, this.handleCancel); - setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown)); - } - handleStart() { - const { - activeNode, - onStart - } = this.props; - const node = activeNode.node.current; - if (node) { - scrollIntoViewIfNeeded(node); +var defaultRoundingMethod = "trunc"; +function getRoundingMethod(method) { + return method ? roundingMap[method] : roundingMap[defaultRoundingMethod]; +} + +// node_modules/date-fns/esm/endOfDay/index.js +function endOfDay(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + date.setHours(23, 59, 59, 999); + return date; +} + +// node_modules/date-fns/esm/isLastDayOfMonth/index.js +function isLastDayOfMonth(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + return endOfDay(date).getTime() === endOfMonth(date).getTime(); +} + +// node_modules/date-fns/esm/differenceInMonths/index.js +function differenceInMonths(dirtyDateLeft, dirtyDateRight) { + requiredArgs(2, arguments); + var dateLeft = toDate(dirtyDateLeft); + var dateRight = toDate(dirtyDateRight); + var sign = compareAsc(dateLeft, dateRight); + var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight)); + var result; + if (difference < 1) { + result = 0; + } else { + if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) { + dateLeft.setDate(30); } - onStart(defaultCoordinates); + dateLeft.setMonth(dateLeft.getMonth() - sign * difference); + var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; + if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) { + isLastMonthNotFull = false; + } + result = sign * (difference - Number(isLastMonthNotFull)); } - handleKeyDown(event) { - if (isKeyboardEvent(event)) { - const { - active, - context, - options - } = this.props; - const { - keyboardCodes = defaultKeyboardCodes, - coordinateGetter = defaultKeyboardCoordinateGetter, - scrollBehavior = "smooth" - } = options; - const { - code - } = event; - if (keyboardCodes.end.includes(code)) { - this.handleEnd(event); - return; - } - if (keyboardCodes.cancel.includes(code)) { - this.handleCancel(event); - return; - } - const { - collisionRect - } = context.current; - const currentCoordinates = collisionRect ? { - x: collisionRect.left, - y: collisionRect.top - } : defaultCoordinates; - if (!this.referenceCoordinates) { - this.referenceCoordinates = currentCoordinates; - } - const newCoordinates = coordinateGetter(event, { - active, - context: context.current, - currentCoordinates - }); - if (newCoordinates) { - const coordinatesDelta = subtract(newCoordinates, currentCoordinates); - const scrollDelta = { - x: 0, - y: 0 - }; - const { - scrollableAncestors - } = context.current; - for (const scrollContainer of scrollableAncestors) { - const direction = event.code; - const { - isTop, - isRight, - isLeft, - isBottom, - maxScroll, - minScroll - } = getScrollPosition(scrollContainer); - const scrollElementRect = getScrollElementRect(scrollContainer); - const clampedCoordinates = { - x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)), - y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y)) - }; - const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft; - const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop; - if (canScrollX && clampedCoordinates.x !== newCoordinates.x) { - const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x; - const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x; - if (canScrollToNewCoordinates && !coordinatesDelta.y) { - scrollContainer.scrollTo({ - left: newScrollCoordinates, - behavior: scrollBehavior - }); - return; - } - if (canScrollToNewCoordinates) { - scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates; - } else { - scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x; - } - if (scrollDelta.x) { - scrollContainer.scrollBy({ - left: -scrollDelta.x, - behavior: scrollBehavior - }); - } - break; - } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) { - const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y; - const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y; - if (canScrollToNewCoordinates && !coordinatesDelta.x) { - scrollContainer.scrollTo({ - top: newScrollCoordinates, - behavior: scrollBehavior - }); - return; - } - if (canScrollToNewCoordinates) { - scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates; - } else { - scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y; - } - if (scrollDelta.y) { - scrollContainer.scrollBy({ - top: -scrollDelta.y, - behavior: scrollBehavior - }); - } - break; - } - } - this.handleMove(event, add(subtract(newCoordinates, this.referenceCoordinates), scrollDelta)); - } - } - } - handleMove(event, coordinates) { - const { - onMove - } = this.props; - event.preventDefault(); - onMove(coordinates); - } - handleEnd(event) { - const { - onEnd - } = this.props; - event.preventDefault(); - this.detach(); - onEnd(); - } - handleCancel(event) { - const { - onCancel - } = this.props; - event.preventDefault(); - this.detach(); - onCancel(); + return result === 0 ? 0 : result; +} + +// node_modules/date-fns/esm/differenceInSeconds/index.js +function differenceInSeconds(dateLeft, dateRight, options) { + requiredArgs(2, arguments); + var diff = differenceInMilliseconds(dateLeft, dateRight) / 1e3; + return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff); +} + +// node_modules/date-fns/esm/endOfWeek/index.js +function endOfWeek(dirtyDate, options) { + var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; + requiredArgs(1, arguments); + var defaultOptions3 = getDefaultOptions(); + var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0); + if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { + throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } - detach() { - this.listeners.removeAll(); - this.windowListeners.removeAll(); + var date = toDate(dirtyDate); + var day = date.getDay(); + var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); + date.setDate(date.getDate() + diff); + date.setHours(23, 59, 59, 999); + return date; +} + +// node_modules/date-fns/esm/endOfISOWeek/index.js +function endOfISOWeek(dirtyDate) { + requiredArgs(1, arguments); + return endOfWeek(dirtyDate, { + weekStartsOn: 1 + }); +} + +// node_modules/date-fns/esm/_lib/assign/index.js +function assign(target, object) { + if (target == null) { + throw new TypeError("assign requires that input parameter not be null or undefined"); } -}; -KeyboardSensor.activators = [{ - eventName: "onKeyDown", - handler: (event, _ref, _ref2) => { - let { - keyboardCodes = defaultKeyboardCodes, - onActivation - } = _ref; - let { - active - } = _ref2; - const { - code - } = event.nativeEvent; - if (keyboardCodes.start.includes(code)) { - const activator = active.activatorNode.current; - if (activator && event.target !== activator) { - return false; - } - event.preventDefault(); - onActivation == null ? void 0 : onActivation({ - event: event.nativeEvent - }); - return true; + for (var property in object) { + if (Object.prototype.hasOwnProperty.call(object, property)) { + ; + target[property] = object[property]; } - return false; } -}]; -function isDistanceConstraint(constraint) { - return Boolean(constraint && "distance" in constraint); + return target; } -function isDelayConstraint(constraint) { - return Boolean(constraint && "delay" in constraint); + +// node_modules/date-fns/esm/_lib/cloneObject/index.js +function cloneObject(object) { + return assign({}, object); } -var AbstractPointerSensor = class { - constructor(props2, events2, listenerTarget) { - var _getEventCoordinates; - if (listenerTarget === void 0) { - listenerTarget = getEventListenerTarget(props2.event.target); - } - this.props = void 0; - this.events = void 0; - this.autoScrollEnabled = true; - this.document = void 0; - this.activated = false; - this.initialCoordinates = void 0; - this.timeoutId = null; - this.listeners = void 0; - this.documentListeners = void 0; - this.windowListeners = void 0; - this.props = props2; - this.events = events2; - const { - event - } = props2; - const { - target - } = event; - this.props = props2; - this.events = events2; - this.document = getOwnerDocument(target); - this.documentListeners = new Listeners(this.document); - this.listeners = new Listeners(listenerTarget); - this.windowListeners = new Listeners(getWindow(target)); - this.initialCoordinates = (_getEventCoordinates = getEventCoordinates(event)) != null ? _getEventCoordinates : defaultCoordinates; - this.handleStart = this.handleStart.bind(this); - this.handleMove = this.handleMove.bind(this); - this.handleEnd = this.handleEnd.bind(this); - this.handleCancel = this.handleCancel.bind(this); - this.handleKeydown = this.handleKeydown.bind(this); - this.removeTextSelection = this.removeTextSelection.bind(this); - this.attach(); - } - attach() { - const { - events: events2, - props: { - options: { - activationConstraint - } - } - } = this; - this.listeners.add(events2.move.name, this.handleMove, { - passive: false - }); - this.listeners.add(events2.end.name, this.handleEnd); - this.windowListeners.add(EventName.Resize, this.handleCancel); - this.windowListeners.add(EventName.DragStart, preventDefault); - this.windowListeners.add(EventName.VisibilityChange, this.handleCancel); - this.windowListeners.add(EventName.ContextMenu, preventDefault); - this.documentListeners.add(EventName.Keydown, this.handleKeydown); - if (activationConstraint) { - if (isDistanceConstraint(activationConstraint)) { - return; - } - if (isDelayConstraint(activationConstraint)) { - this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay); - return; - } - } - this.handleStart(); + +// node_modules/date-fns/esm/formatDistance/index.js +var MINUTES_IN_DAY = 1440; +var MINUTES_IN_ALMOST_TWO_DAYS = 2520; +var MINUTES_IN_MONTH = 43200; +var MINUTES_IN_TWO_MONTHS = 86400; +function formatDistance3(dirtyDate, dirtyBaseDate, options) { + var _ref, _options$locale; + requiredArgs(2, arguments); + var defaultOptions3 = getDefaultOptions(); + var locale2 = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions3.locale) !== null && _ref !== void 0 ? _ref : defaultLocale_default; + if (!locale2.formatDistance) { + throw new RangeError("locale must contain formatDistance property"); } - detach() { - this.listeners.removeAll(); - this.windowListeners.removeAll(); - setTimeout(this.documentListeners.removeAll, 50); - if (this.timeoutId !== null) { - clearTimeout(this.timeoutId); - this.timeoutId = null; - } + var comparison = compareAsc(dirtyDate, dirtyBaseDate); + if (isNaN(comparison)) { + throw new RangeError("Invalid time value"); } - handleStart() { - const { - initialCoordinates - } = this; - const { - onStart - } = this.props; - if (initialCoordinates) { - this.activated = true; - this.documentListeners.add(EventName.Click, stopPropagation, { - capture: true - }); - this.removeTextSelection(); - this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection); - onStart(initialCoordinates); - } + var localizeOptions = assign(cloneObject(options), { + addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix), + comparison + }); + var dateLeft; + var dateRight; + if (comparison > 0) { + dateLeft = toDate(dirtyBaseDate); + dateRight = toDate(dirtyDate); + } else { + dateLeft = toDate(dirtyDate); + dateRight = toDate(dirtyBaseDate); } - handleMove(event) { - var _getEventCoordinates2; - const { - activated, - initialCoordinates, - props: props2 - } = this; - const { - onMove, - options: { - activationConstraint - } - } = props2; - if (!initialCoordinates) { - return; - } - const coordinates = (_getEventCoordinates2 = getEventCoordinates(event)) != null ? _getEventCoordinates2 : defaultCoordinates; - const delta = subtract(initialCoordinates, coordinates); - if (!activated && activationConstraint) { - if (isDelayConstraint(activationConstraint)) { - if (hasExceededDistance(delta, activationConstraint.tolerance)) { - return this.handleCancel(); - } - return; + var seconds = differenceInSeconds(dateRight, dateLeft); + var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1e3; + var minutes = Math.round((seconds - offsetInSeconds) / 60); + var months; + if (minutes < 2) { + if (options !== null && options !== void 0 && options.includeSeconds) { + if (seconds < 5) { + return locale2.formatDistance("lessThanXSeconds", 5, localizeOptions); + } else if (seconds < 10) { + return locale2.formatDistance("lessThanXSeconds", 10, localizeOptions); + } else if (seconds < 20) { + return locale2.formatDistance("lessThanXSeconds", 20, localizeOptions); + } else if (seconds < 40) { + return locale2.formatDistance("halfAMinute", 0, localizeOptions); + } else if (seconds < 60) { + return locale2.formatDistance("lessThanXMinutes", 1, localizeOptions); + } else { + return locale2.formatDistance("xMinutes", 1, localizeOptions); } - if (isDistanceConstraint(activationConstraint)) { - if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) { - return this.handleCancel(); - } - if (hasExceededDistance(delta, activationConstraint.distance)) { - return this.handleStart(); - } - return; + } else { + if (minutes === 0) { + return locale2.formatDistance("lessThanXMinutes", 1, localizeOptions); + } else { + return locale2.formatDistance("xMinutes", minutes, localizeOptions); } } - if (event.cancelable) { - event.preventDefault(); - } - onMove(coordinates); - } - handleEnd() { - const { - onEnd - } = this.props; - this.detach(); - onEnd(); - } - handleCancel() { - const { - onCancel - } = this.props; - this.detach(); - onCancel(); - } - handleKeydown(event) { - if (event.code === KeyboardCode.Esc) { - this.handleCancel(); - } - } - removeTextSelection() { - var _this$document$getSel; - (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges(); - } -}; -var events = { - move: { - name: "pointermove" - }, - end: { - name: "pointerup" - } -}; -var PointerSensor = class extends AbstractPointerSensor { - constructor(props2) { - const { - event - } = props2; - const listenerTarget = getOwnerDocument(event.target); - super(props2, events, listenerTarget); + } else if (minutes < 45) { + return locale2.formatDistance("xMinutes", minutes, localizeOptions); + } else if (minutes < 90) { + return locale2.formatDistance("aboutXHours", 1, localizeOptions); + } else if (minutes < MINUTES_IN_DAY) { + var hours = Math.round(minutes / 60); + return locale2.formatDistance("aboutXHours", hours, localizeOptions); + } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) { + return locale2.formatDistance("xDays", 1, localizeOptions); + } else if (minutes < MINUTES_IN_MONTH) { + var days = Math.round(minutes / MINUTES_IN_DAY); + return locale2.formatDistance("xDays", days, localizeOptions); + } else if (minutes < MINUTES_IN_TWO_MONTHS) { + months = Math.round(minutes / MINUTES_IN_MONTH); + return locale2.formatDistance("aboutXMonths", months, localizeOptions); } -}; -PointerSensor.activators = [{ - eventName: "onPointerDown", - handler: (_ref, _ref2) => { - let { - nativeEvent: event - } = _ref; - let { - onActivation - } = _ref2; - if (!event.isPrimary || event.button !== 0) { - return false; + months = differenceInMonths(dateRight, dateLeft); + if (months < 12) { + var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH); + return locale2.formatDistance("xMonths", nearestMonth, localizeOptions); + } else { + var monthsSinceStartOfYear = months % 12; + var years = Math.floor(months / 12); + if (monthsSinceStartOfYear < 3) { + return locale2.formatDistance("aboutXYears", years, localizeOptions); + } else if (monthsSinceStartOfYear < 9) { + return locale2.formatDistance("overXYears", years, localizeOptions); + } else { + return locale2.formatDistance("almostXYears", years + 1, localizeOptions); } - onActivation == null ? void 0 : onActivation({ - event - }); - return true; } -}]; -var events$1 = { - move: { - name: "mousemove" - }, - end: { - name: "mouseup" +} + +// node_modules/date-fns/esm/getISOWeek/index.js +var MILLISECONDS_IN_WEEK4 = 6048e5; +function getISOWeek(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime(); + return Math.round(diff / MILLISECONDS_IN_WEEK4) + 1; +} + +// node_modules/date-fns/esm/getWeekYear/index.js +function getWeekYear(dirtyDate, options) { + var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var year = date.getFullYear(); + var defaultOptions3 = getDefaultOptions(); + var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); + if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { + throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); } -}; -var MouseButton; -(function(MouseButton2) { - MouseButton2[MouseButton2["RightClick"] = 2] = "RightClick"; -})(MouseButton || (MouseButton = {})); -var MouseSensor = class extends AbstractPointerSensor { - constructor(props2) { - super(props2, events$1, getOwnerDocument(props2.event.target)); + var firstWeekOfNextYear = new Date(0); + firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); + firstWeekOfNextYear.setHours(0, 0, 0, 0); + var startOfNextYear = startOfWeek(firstWeekOfNextYear, options); + var firstWeekOfThisYear = new Date(0); + firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); + firstWeekOfThisYear.setHours(0, 0, 0, 0); + var startOfThisYear = startOfWeek(firstWeekOfThisYear, options); + if (date.getTime() >= startOfNextYear.getTime()) { + return year + 1; + } else if (date.getTime() >= startOfThisYear.getTime()) { + return year; + } else { + return year - 1; } -}; -MouseSensor.activators = [{ - eventName: "onMouseDown", - handler: (_ref, _ref2) => { - let { - nativeEvent: event - } = _ref; - let { - onActivation - } = _ref2; - if (event.button === MouseButton.RightClick) { - return false; - } - onActivation == null ? void 0 : onActivation({ - event - }); - return true; - } -}]; -var events$2 = { - move: { - name: "touchmove" - }, - end: { - name: "touchend" - } -}; -var TouchSensor = class extends AbstractPointerSensor { - constructor(props2) { - super(props2, events$2); - } - static setup() { - window.addEventListener(events$2.move.name, noop2, { - capture: false, - passive: false - }); - return function teardown() { - window.removeEventListener(events$2.move.name, noop2); - }; - function noop2() { - } - } -}; -TouchSensor.activators = [{ - eventName: "onTouchStart", - handler: (_ref, _ref2) => { - let { - nativeEvent: event - } = _ref; - let { - onActivation - } = _ref2; - const { - touches - } = event; - if (touches.length > 1) { - return false; - } - onActivation == null ? void 0 : onActivation({ - event - }); - return true; - } -}]; -var AutoScrollActivator; -(function(AutoScrollActivator2) { - AutoScrollActivator2[AutoScrollActivator2["Pointer"] = 0] = "Pointer"; - AutoScrollActivator2[AutoScrollActivator2["DraggableRect"] = 1] = "DraggableRect"; -})(AutoScrollActivator || (AutoScrollActivator = {})); -var TraversalOrder; -(function(TraversalOrder2) { - TraversalOrder2[TraversalOrder2["TreeOrder"] = 0] = "TreeOrder"; - TraversalOrder2[TraversalOrder2["ReversedTreeOrder"] = 1] = "ReversedTreeOrder"; -})(TraversalOrder || (TraversalOrder = {})); -function useAutoScroller(_ref) { - let { - acceleration, - activator = AutoScrollActivator.Pointer, - canScroll, - draggingRect, - enabled, - interval = 5, - order = TraversalOrder.TreeOrder, - pointerCoordinates, - scrollableAncestors, - scrollableAncestorRects, - delta, - threshold - } = _ref; - const scrollIntent = useScrollIntent({ - delta, - disabled: !enabled - }); - const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval(); - const scrollSpeed = _2({ - x: 0, - y: 0 - }); - const scrollDirection = _2({ - x: 0, - y: 0 - }); - const rect = F(() => { - switch (activator) { - case AutoScrollActivator.Pointer: - return pointerCoordinates ? { - top: pointerCoordinates.y, - bottom: pointerCoordinates.y, - left: pointerCoordinates.x, - right: pointerCoordinates.x - } : null; - case AutoScrollActivator.DraggableRect: - return draggingRect; - } - }, [activator, draggingRect, pointerCoordinates]); - const scrollContainerRef = _2(null); - const autoScroll = T2(() => { - const scrollContainer = scrollContainerRef.current; - if (!scrollContainer) { - return; - } - const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x; - const scrollTop = scrollSpeed.current.y * scrollDirection.current.y; - scrollContainer.scrollBy(scrollLeft, scrollTop); - }, []); - const sortedScrollableAncestors = F(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]); - h2( - () => { - if (!enabled || !scrollableAncestors.length || !rect) { - clearAutoScrollInterval(); - return; - } - for (const scrollContainer of sortedScrollableAncestors) { - if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) { - continue; - } - const index = scrollableAncestors.indexOf(scrollContainer); - const scrollContainerRect = scrollableAncestorRects[index]; - if (!scrollContainerRect) { - continue; - } - const { - direction, - speed - } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold); - for (const axis of ["x", "y"]) { - if (!scrollIntent[axis][direction[axis]]) { - speed[axis] = 0; - direction[axis] = 0; - } - } - if (speed.x > 0 || speed.y > 0) { - clearAutoScrollInterval(); - scrollContainerRef.current = scrollContainer; - setAutoScrollInterval(autoScroll, interval); - scrollSpeed.current = speed; - scrollDirection.current = direction; - return; - } - } - scrollSpeed.current = { - x: 0, - y: 0 - }; - scrollDirection.current = { - x: 0, - y: 0 - }; - clearAutoScrollInterval(); - }, - [ - acceleration, - autoScroll, - canScroll, - clearAutoScrollInterval, - enabled, - interval, - JSON.stringify(rect), - JSON.stringify(scrollIntent), - setAutoScrollInterval, - scrollableAncestors, - sortedScrollableAncestors, - scrollableAncestorRects, - JSON.stringify(threshold) - ] - ); } -var defaultScrollIntent = { - x: { - [Direction2.Backward]: false, - [Direction2.Forward]: false - }, - y: { - [Direction2.Backward]: false, - [Direction2.Forward]: false - } -}; -function useScrollIntent(_ref2) { - let { - delta, - disabled - } = _ref2; - const previousDelta = usePrevious2(delta); - return useLazyMemo((previousIntent) => { - if (disabled || !previousDelta || !previousIntent) { - return defaultScrollIntent; - } - const direction = { - x: Math.sign(delta.x - previousDelta.x), - y: Math.sign(delta.y - previousDelta.y) - }; - return { - x: { - [Direction2.Backward]: previousIntent.x[Direction2.Backward] || direction.x === -1, - [Direction2.Forward]: previousIntent.x[Direction2.Forward] || direction.x === 1 - }, - y: { - [Direction2.Backward]: previousIntent.y[Direction2.Backward] || direction.y === -1, - [Direction2.Forward]: previousIntent.y[Direction2.Forward] || direction.y === 1 - } - }; - }, [disabled, delta, previousDelta]); + +// node_modules/date-fns/esm/startOfWeekYear/index.js +function startOfWeekYear(dirtyDate, options) { + var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2; + requiredArgs(1, arguments); + var defaultOptions3 = getDefaultOptions(); + var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions3.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions3.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1); + var year = getWeekYear(dirtyDate, options); + var firstWeek = new Date(0); + firstWeek.setFullYear(year, 0, firstWeekContainsDate); + firstWeek.setHours(0, 0, 0, 0); + var date = startOfWeek(firstWeek, options); + return date; } -function useCachedNode(draggableNodes, id2) { - const draggableNode = id2 !== null ? draggableNodes.get(id2) : void 0; - const node = draggableNode ? draggableNode.node.current : null; - return useLazyMemo((cachedNode) => { - var _ref; - if (id2 === null) { - return null; - } - return (_ref = node != null ? node : cachedNode) != null ? _ref : null; - }, [node, id2]); + +// node_modules/date-fns/esm/getWeek/index.js +var MILLISECONDS_IN_WEEK5 = 6048e5; +function getWeek(dirtyDate, options) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var diff = startOfWeek(date, options).getTime() - startOfWeekYear(date, options).getTime(); + return Math.round(diff / MILLISECONDS_IN_WEEK5) + 1; } -function useCombineActivators(sensors, getSyntheticHandler) { - return F(() => sensors.reduce((accumulator, sensor) => { - const { - sensor: Sensor - } = sensor; - const sensorActivators = Sensor.activators.map((activator) => ({ - eventName: activator.eventName, - handler: getSyntheticHandler(activator.handler, sensor) - })); - return [...accumulator, ...sensorActivators]; - }, []), [sensors, getSyntheticHandler]); + +// node_modules/date-fns/esm/lastDayOfMonth/index.js +function lastDayOfMonth(dirtyDate) { + requiredArgs(1, arguments); + var date = toDate(dirtyDate); + var month = date.getMonth(); + date.setFullYear(date.getFullYear(), month + 1, 0); + date.setHours(0, 0, 0, 0); + return date; } -var MeasuringStrategy; -(function(MeasuringStrategy3) { - MeasuringStrategy3[MeasuringStrategy3["Always"] = 0] = "Always"; - MeasuringStrategy3[MeasuringStrategy3["BeforeDragging"] = 1] = "BeforeDragging"; - MeasuringStrategy3[MeasuringStrategy3["WhileDragging"] = 2] = "WhileDragging"; -})(MeasuringStrategy || (MeasuringStrategy = {})); -var MeasuringFrequency; -(function(MeasuringFrequency2) { - MeasuringFrequency2["Optimized"] = "optimized"; -})(MeasuringFrequency || (MeasuringFrequency = {})); -var defaultValue = /* @__PURE__ */ new Map(); -function useDroppableMeasuring(containers, _ref) { - let { - dragging, - dependencies, - config - } = _ref; - const [containerIdsScheduledForMeasurement, setContainerIdsScheduledForMeasurement] = p2(null); - const measuringScheduled = containerIdsScheduledForMeasurement != null; - const { - frequency, - measure, - strategy - } = config; - const containersRef = _2(containers); - const disabled = isDisabled(); - const disabledRef = useLatestValue(disabled); - const measureDroppableContainers = T2(function(ids2) { - if (ids2 === void 0) { - ids2 = []; - } - if (disabledRef.current) { - return; - } - setContainerIdsScheduledForMeasurement((value) => value ? value.concat(ids2) : ids2); - }, [disabledRef]); - const timeoutId = _2(null); - const droppableRects = useLazyMemo((previousValue) => { - if (disabled && !dragging) { - return defaultValue; - } - const ids2 = containerIdsScheduledForMeasurement; - if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || ids2 != null) { - const map = /* @__PURE__ */ new Map(); - for (let container of containers) { - if (!container) { - continue; - } - if (ids2 && ids2.length > 0 && !ids2.includes(container.id) && container.rect.current) { - map.set(container.id, container.rect.current); - continue; - } - const node = container.node.current; - const rect = node ? new Rect(measure(node), node) : null; - container.rect.current = rect; - if (rect) { - map.set(container.id, rect); - } - } - return map; - } - return previousValue; - }, [containers, containerIdsScheduledForMeasurement, dragging, disabled, measure]); - h2(() => { - containersRef.current = containers; - }, [containers]); - h2( - () => { - if (disabled) { - return; - } - requestAnimationFrame(() => measureDroppableContainers()); - }, - [dragging, disabled] - ); - h2(() => { - if (measuringScheduled) { - setContainerIdsScheduledForMeasurement(null); + +// node_modules/date-fns/esm/getWeeksInMonth/index.js +function getWeeksInMonth(date, options) { + requiredArgs(1, arguments); + return differenceInCalendarWeeks(lastDayOfMonth(date), startOfMonth(date), options) + 1; +} + +// node_modules/date-fns/esm/isAfter/index.js +function isAfter2(dirtyDate, dirtyDateToCompare) { + requiredArgs(2, arguments); + var date = toDate(dirtyDate); + var dateToCompare = toDate(dirtyDateToCompare); + return date.getTime() > dateToCompare.getTime(); +} + +// node_modules/date-fns/esm/subDays/index.js +function subDays(dirtyDate, dirtyAmount) { + requiredArgs(2, arguments); + var amount = toInteger(dirtyAmount); + return addDays(dirtyDate, -amount); +} + +// node_modules/react-day-picker/dist/index.esm.js +var __assign2 = function() { + __assign2 = Object.assign || function __assign3(t4) { + for (var s5, i4 = 1, n2 = arguments.length; i4 < n2; i4++) { + s5 = arguments[i4]; + for (var p3 in s5) + if (Object.prototype.hasOwnProperty.call(s5, p3)) + t4[p3] = s5[p3]; } - }, [measuringScheduled]); - h2( - () => { - if (disabled || typeof frequency !== "number" || timeoutId.current !== null) { - return; - } - timeoutId.current = setTimeout(() => { - measureDroppableContainers(); - timeoutId.current = null; - }, frequency); - }, - [frequency, disabled, measureDroppableContainers, ...dependencies] - ); - return { - droppableRects, - measureDroppableContainers, - measuringScheduled + return t4; }; - function isDisabled() { - switch (strategy) { - case MeasuringStrategy.Always: - return false; - case MeasuringStrategy.BeforeDragging: - return dragging; - default: - return !dragging; + return __assign2.apply(this, arguments); +}; +function __rest2(s5, e4) { + var t4 = {}; + for (var p3 in s5) + if (Object.prototype.hasOwnProperty.call(s5, p3) && e4.indexOf(p3) < 0) + t4[p3] = s5[p3]; + if (s5 != null && typeof Object.getOwnPropertySymbols === "function") + for (var i4 = 0, p3 = Object.getOwnPropertySymbols(s5); i4 < p3.length; i4++) { + if (e4.indexOf(p3[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s5, p3[i4])) + t4[p3[i4]] = s5[p3[i4]]; } - } + return t4; } -function useInitialValue(value, computeFn) { - return useLazyMemo((previousValue) => { - if (!value) { - return null; - } - if (previousValue) { - return previousValue; +function __spreadArray2(to, from, pack) { + if (pack || arguments.length === 2) + for (var i4 = 0, l3 = from.length, ar; i4 < l3; i4++) { + if (ar || !(i4 in from)) { + if (!ar) + ar = Array.prototype.slice.call(from, 0, i4); + ar[i4] = from[i4]; + } } - return typeof computeFn === "function" ? computeFn(value) : value; - }, [computeFn, value]); -} -function useInitialRect(node, measure) { - return useInitialValue(node, measure); + return to.concat(ar || Array.prototype.slice.call(from)); } -function useMutationObserver(_ref) { - let { - callback, - disabled - } = _ref; - const handleMutations = useEvent(callback); - const mutationObserver = F(() => { - if (disabled || typeof window === "undefined" || typeof window.MutationObserver === "undefined") { - return void 0; - } - const { - MutationObserver - } = window; - return new MutationObserver(handleMutations); - }, [handleMutations, disabled]); - h2(() => { - return () => mutationObserver == null ? void 0 : mutationObserver.disconnect(); - }, [mutationObserver]); - return mutationObserver; +function isDayPickerMultiple(props2) { + return props2.mode === "multiple"; } -function useResizeObserver(_ref) { - let { - callback, - disabled - } = _ref; - const handleResize = useEvent(callback); - const resizeObserver = F( - () => { - if (disabled || typeof window === "undefined" || typeof window.ResizeObserver === "undefined") { - return void 0; - } - const { - ResizeObserver - } = window; - return new ResizeObserver(handleResize); - }, - [disabled] - ); - h2(() => { - return () => resizeObserver == null ? void 0 : resizeObserver.disconnect(); - }, [resizeObserver]); - return resizeObserver; +function isDayPickerRange(props2) { + return props2.mode === "range"; } -function defaultMeasure(element) { - return new Rect(getClientRect(element), element); +function isDayPickerSingle(props2) { + return props2.mode === "single"; } -function useRect(element, measure, fallbackRect) { - if (measure === void 0) { - measure = defaultMeasure; - } - const [rect, measureRect] = y2(reducer2, null); - const mutationObserver = useMutationObserver({ - callback(records) { - if (!element) { - return; - } - for (const record of records) { - const { - type, - target - } = record; - if (type === "childList" && target instanceof HTMLElement && target.contains(element)) { - measureRect(); - break; - } - } - } - }); - const resizeObserver = useResizeObserver({ - callback: measureRect - }); - useIsomorphicLayoutEffect2(() => { - measureRect(); - if (element) { - resizeObserver == null ? void 0 : resizeObserver.observe(element); - mutationObserver == null ? void 0 : mutationObserver.observe(document.body, { - childList: true, - subtree: true - }); - } else { - resizeObserver == null ? void 0 : resizeObserver.disconnect(); - mutationObserver == null ? void 0 : mutationObserver.disconnect(); - } - }, [element]); - return rect; - function reducer2(currentRect) { - if (!element) { - return null; - } - if (element.isConnected === false) { - var _ref; - return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null; - } - const newRect = measure(element); - if (JSON.stringify(currentRect) === JSON.stringify(newRect)) { - return currentRect; - } - return newRect; - } +var defaultClassNames = { + root: "rdp", + multiple_months: "rdp-multiple_months", + with_weeknumber: "rdp-with_weeknumber", + vhidden: "rdp-vhidden", + button_reset: "rdp-button_reset", + button: "rdp-button", + caption: "rdp-caption", + caption_start: "rdp-caption_start", + caption_end: "rdp-caption_end", + caption_between: "rdp-caption_between", + caption_label: "rdp-caption_label", + caption_dropdowns: "rdp-caption_dropdowns", + dropdown: "rdp-dropdown", + dropdown_month: "rdp-dropdown_month", + dropdown_year: "rdp-dropdown_year", + dropdown_icon: "rdp-dropdown_icon", + months: "rdp-months", + month: "rdp-month", + table: "rdp-table", + tbody: "rdp-tbody", + tfoot: "rdp-tfoot", + head: "rdp-head", + head_row: "rdp-head_row", + head_cell: "rdp-head_cell", + nav: "rdp-nav", + nav_button: "rdp-nav_button", + nav_button_previous: "rdp-nav_button_previous", + nav_button_next: "rdp-nav_button_next", + nav_icon: "rdp-nav_icon", + row: "rdp-row", + weeknumber: "rdp-weeknumber", + cell: "rdp-cell", + day: "rdp-day", + day_today: "rdp-day_today", + day_outside: "rdp-day_outside", + day_selected: "rdp-day_selected", + day_disabled: "rdp-day_disabled", + day_hidden: "rdp-day_hidden", + day_range_start: "rdp-day_range_start", + day_range_end: "rdp-day_range_end", + day_range_middle: "rdp-day_range_middle" +}; +function formatCaption(month, options) { + return format(month, "LLLL y", options); } -function useRectDelta(rect) { - const initialRect = useInitialValue(rect); - return getRectDelta(rect, initialRect); +function formatDay(day, options) { + return format(day, "d", options); } -var defaultValue$1 = []; -function useScrollableAncestors(node) { - const previousNode = _2(node); - const ancestors = useLazyMemo((previousValue) => { - if (!node) { - return defaultValue$1; - } - if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) { - return previousValue; - } - return getScrollableAncestors(node); - }, [node]); - h2(() => { - previousNode.current = node; - }, [node]); - return ancestors; +function formatMonthCaption(month, options) { + return format(month, "LLLL", options); } -function useScrollOffsets(elements) { - const [scrollCoordinates, setScrollCoordinates] = p2(null); - const prevElements = _2(elements); - const handleScroll = T2((event) => { - const scrollingElement = getScrollableElement(event.target); - if (!scrollingElement) { - return; - } - setScrollCoordinates((scrollCoordinates2) => { - if (!scrollCoordinates2) { - return null; - } - scrollCoordinates2.set(scrollingElement, getScrollCoordinates(scrollingElement)); - return new Map(scrollCoordinates2); - }); - }, []); - h2(() => { - const previousElements = prevElements.current; - if (elements !== previousElements) { - cleanup(previousElements); - const entries = elements.map((element) => { - const scrollableElement = getScrollableElement(element); - if (scrollableElement) { - scrollableElement.addEventListener("scroll", handleScroll, { - passive: true - }); - return [scrollableElement, getScrollCoordinates(scrollableElement)]; - } - return null; - }).filter((entry) => entry != null); - setScrollCoordinates(entries.length ? new Map(entries) : null); - prevElements.current = elements; - } - return () => { - cleanup(elements); - cleanup(previousElements); - }; - function cleanup(elements2) { - elements2.forEach((element) => { - const scrollableElement = getScrollableElement(element); - scrollableElement == null ? void 0 : scrollableElement.removeEventListener("scroll", handleScroll); - }); - } - }, [handleScroll, elements]); - return F(() => { - if (elements.length) { - return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements); - } - return defaultCoordinates; - }, [elements, scrollCoordinates]); +function formatWeekNumber(weekNumber) { + return "".concat(weekNumber); } -function useScrollOffsetsDelta(scrollOffsets, dependencies) { - if (dependencies === void 0) { - dependencies = []; - } - const initialScrollOffsets = _2(null); - h2( - () => { - initialScrollOffsets.current = null; - }, - dependencies - ); - h2(() => { - const hasScrollOffsets = scrollOffsets !== defaultCoordinates; - if (hasScrollOffsets && !initialScrollOffsets.current) { - initialScrollOffsets.current = scrollOffsets; - } - if (!hasScrollOffsets && initialScrollOffsets.current) { - initialScrollOffsets.current = null; - } - }, [scrollOffsets]); - return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates; +function formatWeekdayName(weekday, options) { + return format(weekday, "cccccc", options); } -function useSensorSetup(sensors) { - h2( - () => { - if (!canUseDOM2) { - return; - } - const teardownFns = sensors.map((_ref) => { - let { - sensor - } = _ref; - return sensor.setup == null ? void 0 : sensor.setup(); - }); - return () => { - for (const teardown of teardownFns) { - teardown == null ? void 0 : teardown(); - } - }; - }, - sensors.map((_ref2) => { - let { - sensor - } = _ref2; - return sensor; - }) - ); +function formatYearCaption(year, options) { + return format(year, "yyyy", options); } -function useSyntheticListeners(listeners, id2) { - return F(() => { - return listeners.reduce((acc, _ref) => { - let { - eventName, - handler - } = _ref; - acc[eventName] = (event) => { - handler(event, id2); - }; - return acc; - }, {}); - }, [listeners, id2]); +var formatters3 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + formatCaption, + formatDay, + formatMonthCaption, + formatWeekNumber, + formatWeekdayName, + formatYearCaption +}); +var labelDay = function(day, activeModifiers, options) { + return format(day, "do MMMM (EEEE)", options); +}; +var labelMonthDropdown = function() { + return "Month: "; +}; +var labelNext = function() { + return "Go to next month"; +}; +var labelPrevious = function() { + return "Go to previous month"; +}; +var labelWeekday = function(day, options) { + return format(day, "cccc", options); +}; +var labelWeekNumber = function(n2) { + return "Week n. ".concat(n2); +}; +var labelYearDropdown = function() { + return "Year: "; +}; +var labels = /* @__PURE__ */ Object.freeze({ + __proto__: null, + labelDay, + labelMonthDropdown, + labelNext, + labelPrevious, + labelWeekday, + labelWeekNumber, + labelYearDropdown +}); +function getDefaultContextValues() { + var captionLayout = "buttons"; + var classNames8 = defaultClassNames; + var locale2 = en_US_default; + var modifiersClassNames = {}; + var modifiers = {}; + var numberOfMonths = 1; + var styles = {}; + var today = new Date(); + return { + captionLayout, + classNames: classNames8, + formatters: formatters3, + labels, + locale: locale2, + modifiersClassNames, + modifiers, + numberOfMonths, + styles, + today, + mode: "default" + }; } -function useWindowRect(element) { - return F(() => element ? getWindowClientRect(element) : null, [element]); +function parseFromToProps(props2) { + var fromYear = props2.fromYear, toYear = props2.toYear, fromMonth = props2.fromMonth, toMonth = props2.toMonth; + var fromDate = props2.fromDate, toDate2 = props2.toDate; + if (fromMonth) { + fromDate = startOfMonth(fromMonth); + } else if (fromYear) { + fromDate = new Date(fromYear, 0, 1); + } + if (toMonth) { + toDate2 = endOfMonth(toMonth); + } else if (toYear) { + toDate2 = new Date(toYear, 11, 31); + } + return { + fromDate: fromDate ? startOfDay(fromDate) : void 0, + toDate: toDate2 ? startOfDay(toDate2) : void 0 + }; } -var defaultValue$2 = []; -function useRects(elements, measure) { - if (measure === void 0) { - measure = getClientRect; +var DayPickerContext = B(void 0); +function DayPickerProvider(props2) { + var _a2; + var initialProps = props2.initialProps; + var defaultContextValues = getDefaultContextValues(); + var _b2 = parseFromToProps(initialProps), fromDate = _b2.fromDate, toDate2 = _b2.toDate; + var captionLayout = (_a2 = initialProps.captionLayout) !== null && _a2 !== void 0 ? _a2 : defaultContextValues.captionLayout; + if (captionLayout !== "buttons" && (!fromDate || !toDate2)) { + captionLayout = "buttons"; } - const [firstElement] = elements; - const windowRect = useWindowRect(firstElement ? getWindow(firstElement) : null); - const [rects, measureRects] = y2(reducer2, defaultValue$2); - const resizeObserver = useResizeObserver({ - callback: measureRects - }); - if (elements.length > 0 && rects === defaultValue$2) { - measureRects(); + var onSelect; + if (isDayPickerSingle(initialProps) || isDayPickerMultiple(initialProps) || isDayPickerRange(initialProps)) { + onSelect = initialProps.onSelect; } - useIsomorphicLayoutEffect2(() => { - if (elements.length) { - elements.forEach((element) => resizeObserver == null ? void 0 : resizeObserver.observe(element)); - } else { - resizeObserver == null ? void 0 : resizeObserver.disconnect(); - measureRects(); + var value = __assign2(__assign2(__assign2({}, defaultContextValues), initialProps), { captionLayout, classNames: __assign2(__assign2({}, defaultContextValues.classNames), initialProps.classNames), components: __assign2({}, initialProps.components), formatters: __assign2(__assign2({}, defaultContextValues.formatters), initialProps.formatters), fromDate, labels: __assign2(__assign2({}, defaultContextValues.labels), initialProps.labels), mode: initialProps.mode || defaultContextValues.mode, modifiers: __assign2(__assign2({}, defaultContextValues.modifiers), initialProps.modifiers), modifiersClassNames: __assign2(__assign2({}, defaultContextValues.modifiersClassNames), initialProps.modifiersClassNames), onSelect, styles: __assign2(__assign2({}, defaultContextValues.styles), initialProps.styles), toDate: toDate2 }); + return bn.createElement(DayPickerContext.Provider, { value }, props2.children); +} +function useDayPicker() { + var context = q2(DayPickerContext); + if (!context) { + throw new Error("useDayPicker must be used within a DayPickerProvider."); + } + return context; +} +function CaptionLabel(props2) { + var _a2 = useDayPicker(), locale2 = _a2.locale, classNames8 = _a2.classNames, styles = _a2.styles, formatCaption2 = _a2.formatters.formatCaption; + return bn.createElement("h2", { className: classNames8.caption_label, style: styles.caption_label, "aria-live": "polite", "aria-atomic": "true", id: props2.id }, formatCaption2(props2.displayMonth, { locale: locale2 })); +} +function IconDropdown(props2) { + return bn.createElement( + "svg", + __assign2({ width: "8px", height: "8px", viewBox: "0 0 120 120", "data-testid": "iconDropdown" }, props2), + bn.createElement("path", { d: "M4.22182541,48.2218254 C8.44222828,44.0014225 15.2388494,43.9273804 19.5496459,47.9996989 L19.7781746,48.2218254 L60,88.443 L100.221825,48.2218254 C104.442228,44.0014225 111.238849,43.9273804 115.549646,47.9996989 L115.778175,48.2218254 C119.998577,52.4422283 120.07262,59.2388494 116.000301,63.5496459 L115.778175,63.7781746 L67.7781746,111.778175 C63.5577717,115.998577 56.7611506,116.07262 52.4503541,112.000301 L52.2218254,111.778175 L4.22182541,63.7781746 C-0.0739418023,59.4824074 -0.0739418023,52.5175926 4.22182541,48.2218254 Z", fill: "currentColor", fillRule: "nonzero" }) + ); +} +function Dropdown(props2) { + var _a2, _b2; + var onChange = props2.onChange, value = props2.value, children = props2.children, caption = props2.caption, className = props2.className, style = props2.style; + var dayPicker = useDayPicker(); + var IconDropdownComponent = (_b2 = (_a2 = dayPicker.components) === null || _a2 === void 0 ? void 0 : _a2.IconDropdown) !== null && _b2 !== void 0 ? _b2 : IconDropdown; + return bn.createElement( + "div", + { className, style }, + bn.createElement("span", { className: dayPicker.classNames.vhidden }, props2["aria-label"]), + bn.createElement("select", { name: props2.name, "aria-label": props2["aria-label"], className: dayPicker.classNames.dropdown, style: dayPicker.styles.dropdown, value, onChange }, children), + bn.createElement( + "div", + { className: dayPicker.classNames.caption_label, style: dayPicker.styles.caption_label, "aria-hidden": "true" }, + caption, + bn.createElement(IconDropdownComponent, { className: dayPicker.classNames.dropdown_icon, style: dayPicker.styles.dropdown_icon }) + ) + ); +} +function MonthsDropdown(props2) { + var _a2; + var _b2 = useDayPicker(), fromDate = _b2.fromDate, toDate2 = _b2.toDate, styles = _b2.styles, locale2 = _b2.locale, formatMonthCaption2 = _b2.formatters.formatMonthCaption, classNames8 = _b2.classNames, components = _b2.components, labelMonthDropdown2 = _b2.labels.labelMonthDropdown; + if (!fromDate) + return bn.createElement(bn.Fragment, null); + if (!toDate2) + return bn.createElement(bn.Fragment, null); + var dropdownMonths = []; + if (isSameYear(fromDate, toDate2)) { + var date = startOfMonth(fromDate); + for (var month = fromDate.getMonth(); month <= toDate2.getMonth(); month++) { + dropdownMonths.push(setMonth(date, month)); } - }, [elements]); - return rects; - function reducer2() { - if (!elements.length) { - return defaultValue$2; + } else { + var date = startOfMonth(new Date()); + for (var month = 0; month <= 11; month++) { + dropdownMonths.push(setMonth(date, month)); } - return elements.map((element) => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element)); } + var handleChange = function(e4) { + var selectedMonth = Number(e4.target.value); + var newMonth = setMonth(startOfMonth(props2.displayMonth), selectedMonth); + props2.onChange(newMonth); + }; + var DropdownComponent2 = (_a2 = components === null || components === void 0 ? void 0 : components.Dropdown) !== null && _a2 !== void 0 ? _a2 : Dropdown; + return bn.createElement(DropdownComponent2, { name: "months", "aria-label": labelMonthDropdown2(), className: classNames8.dropdown_month, style: styles.dropdown_month, onChange: handleChange, value: props2.displayMonth.getMonth(), caption: formatMonthCaption2(props2.displayMonth, { locale: locale2 }) }, dropdownMonths.map(function(m5) { + return bn.createElement("option", { key: m5.getMonth(), value: m5.getMonth() }, formatMonthCaption2(m5, { locale: locale2 })); + })); } -function getMeasurableNode(node) { - if (!node) { - return null; - } - if (node.children.length > 1) { - return node; +function YearsDropdown(props2) { + var _a2; + var displayMonth = props2.displayMonth; + var _b2 = useDayPicker(), fromDate = _b2.fromDate, toDate2 = _b2.toDate, locale2 = _b2.locale, styles = _b2.styles, classNames8 = _b2.classNames, components = _b2.components, formatYearCaption2 = _b2.formatters.formatYearCaption, labelYearDropdown2 = _b2.labels.labelYearDropdown; + var years = []; + if (!fromDate) + return bn.createElement(bn.Fragment, null); + if (!toDate2) + return bn.createElement(bn.Fragment, null); + var fromYear = fromDate.getFullYear(); + var toYear = toDate2.getFullYear(); + for (var year = fromYear; year <= toYear; year++) { + years.push(setYear(startOfYear(new Date()), year)); } - const firstChild = node.children[0]; - return isHTMLElement(firstChild) ? firstChild : node; + var handleChange = function(e4) { + var newMonth = setYear(startOfMonth(displayMonth), Number(e4.target.value)); + props2.onChange(newMonth); + }; + var DropdownComponent2 = (_a2 = components === null || components === void 0 ? void 0 : components.Dropdown) !== null && _a2 !== void 0 ? _a2 : Dropdown; + return bn.createElement(DropdownComponent2, { name: "years", "aria-label": labelYearDropdown2(), className: classNames8.dropdown_year, style: styles.dropdown_year, onChange: handleChange, value: displayMonth.getFullYear(), caption: formatYearCaption2(displayMonth, { locale: locale2 }) }, years.map(function(year2) { + return bn.createElement("option", { key: year2.getFullYear(), value: year2.getFullYear() }, formatYearCaption2(year2, { locale: locale2 })); + })); } -function useDragOverlayMeasuring(_ref) { - let { - measure - } = _ref; - const [rect, setRect] = p2(null); - const handleResize = T2((entries) => { - for (const { - target - } of entries) { - if (isHTMLElement(target)) { - setRect((rect2) => { - const newRect = measure(target); - return rect2 ? { - ...rect2, - width: newRect.width, - height: newRect.height - } : newRect; - }); - break; - } - } - }, [measure]); - const resizeObserver = useResizeObserver({ - callback: handleResize - }); - const handleNodeChange = T2((element) => { - const node = getMeasurableNode(element); - resizeObserver == null ? void 0 : resizeObserver.disconnect(); - if (node) { - resizeObserver == null ? void 0 : resizeObserver.observe(node); - } - setRect(node ? measure(node) : null); - }, [measure, resizeObserver]); - const [nodeRef, setRef] = useNodeRef(handleNodeChange); - return F(() => ({ - nodeRef, - rect, - setRef - }), [rect, nodeRef, setRef]); +function useControlledValue(defaultValue2, controlledValue) { + var _a2 = p2(defaultValue2), uncontrolledValue = _a2[0], setValue = _a2[1]; + var value = controlledValue === void 0 ? uncontrolledValue : controlledValue; + return [value, setValue]; } -var defaultSensors = [{ - sensor: PointerSensor, - options: {} -}, { - sensor: KeyboardSensor, - options: {} -}]; -var defaultData = { - current: {} -}; -var defaultMeasuringConfiguration = { - draggable: { - measure: getTransformAgnosticClientRect - }, - droppable: { - measure: getTransformAgnosticClientRect, - strategy: MeasuringStrategy.WhileDragging, - frequency: MeasuringFrequency.Optimized - }, - dragOverlay: { - measure: getClientRect +function getInitialMonth(context) { + var month = context.month, defaultMonth = context.defaultMonth, today = context.today; + var initialMonth = month || defaultMonth || today || new Date(); + var toDate2 = context.toDate, fromDate = context.fromDate, _a2 = context.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; + if (toDate2 && differenceInCalendarMonths(toDate2, initialMonth) < 0) { + var offset = -1 * (numberOfMonths - 1); + initialMonth = addMonths(toDate2, offset); } -}; -var DroppableContainersMap = class extends Map { - get(id2) { - var _super$get; - return id2 != null ? (_super$get = super.get(id2)) != null ? _super$get : void 0 : void 0; + if (fromDate && differenceInCalendarMonths(initialMonth, fromDate) < 0) { + initialMonth = fromDate; } - toArray() { - return Array.from(this.values()); + return startOfMonth(initialMonth); +} +function useNavigationState() { + var context = useDayPicker(); + var initialMonth = getInitialMonth(context); + var _a2 = useControlledValue(initialMonth, context.month), month = _a2[0], setMonth2 = _a2[1]; + var goToMonth = function(date) { + var _a3; + if (context.disableNavigation) + return; + var month2 = startOfMonth(date); + setMonth2(month2); + (_a3 = context.onMonthChange) === null || _a3 === void 0 ? void 0 : _a3.call(context, month2); + }; + return [month, goToMonth]; +} +function getDisplayMonths(month, _a2) { + var reverseMonths = _a2.reverseMonths, numberOfMonths = _a2.numberOfMonths; + var start = startOfMonth(month); + var end = startOfMonth(addMonths(start, numberOfMonths)); + var monthsDiff = differenceInCalendarMonths(end, start); + var months = []; + for (var i4 = 0; i4 < monthsDiff; i4++) { + var nextMonth = addMonths(start, i4); + months.push(nextMonth); } - getEnabled() { - return this.toArray().filter((_ref) => { - let { - disabled - } = _ref; - return !disabled; - }); + if (reverseMonths) + months = months.reverse(); + return months; +} +function getNextMonth(startingMonth, options) { + if (options.disableNavigation) { + return void 0; } - getNodeFor(id2) { - var _this$get$node$curren, _this$get; - return (_this$get$node$curren = (_this$get = this.get(id2)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : void 0; + var toDate2 = options.toDate, pagedNavigation = options.pagedNavigation, _a2 = options.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; + var offset = pagedNavigation ? numberOfMonths : 1; + var month = startOfMonth(startingMonth); + if (!toDate2) { + return addMonths(month, offset); } -}; -var defaultPublicContext = { - activatorEvent: null, - active: null, - activeNode: null, - activeNodeRect: null, - collisions: null, - containerNodeRect: null, - draggableNodes: /* @__PURE__ */ new Map(), - droppableRects: /* @__PURE__ */ new Map(), - droppableContainers: /* @__PURE__ */ new DroppableContainersMap(), - over: null, - dragOverlay: { - nodeRef: { - current: null - }, - rect: null, - setRef: noop - }, - scrollableAncestors: [], - scrollableAncestorRects: [], - measuringConfiguration: defaultMeasuringConfiguration, - measureDroppableContainers: noop, - windowRect: null, - measuringScheduled: false -}; -var defaultInternalContext = { - activatorEvent: null, - activators: [], - active: null, - activeNodeRect: null, - ariaDescribedById: { - draggable: "" - }, - dispatch: noop, - draggableNodes: /* @__PURE__ */ new Map(), - over: null, - measureDroppableContainers: noop -}; -var InternalContext = /* @__PURE__ */ B(defaultInternalContext); -var PublicContext = /* @__PURE__ */ B(defaultPublicContext); -function getInitialState() { - return { - draggable: { - active: null, - initialCoordinates: { - x: 0, - y: 0 - }, - nodes: /* @__PURE__ */ new Map(), - translate: { - x: 0, - y: 0 - } - }, - droppable: { - containers: new DroppableContainersMap() - } - }; + var monthsDiff = differenceInCalendarMonths(toDate2, startingMonth); + if (monthsDiff < numberOfMonths) { + return void 0; + } + return addMonths(month, offset); } -function reducer(state, action) { - switch (action.type) { - case Action.DragStart: - return { - ...state, - draggable: { - ...state.draggable, - initialCoordinates: action.initialCoordinates, - active: action.active - } - }; - case Action.DragMove: - if (!state.draggable.active) { - return state; - } - return { - ...state, - draggable: { - ...state.draggable, - translate: { - x: action.coordinates.x - state.draggable.initialCoordinates.x, - y: action.coordinates.y - state.draggable.initialCoordinates.y - } - } - }; - case Action.DragEnd: - case Action.DragCancel: - return { - ...state, - draggable: { - ...state.draggable, - active: null, - initialCoordinates: { - x: 0, - y: 0 - }, - translate: { - x: 0, - y: 0 - } - } - }; - case Action.RegisterDroppable: { - const { - element - } = action; - const { - id: id2 - } = element; - const containers = new DroppableContainersMap(state.droppable.containers); - containers.set(id2, element); - return { - ...state, - droppable: { - ...state.droppable, - containers - } - }; - } - case Action.SetDroppableDisabled: { - const { - id: id2, - key: key2, - disabled - } = action; - const element = state.droppable.containers.get(id2); - if (!element || key2 !== element.key) { - return state; - } - const containers = new DroppableContainersMap(state.droppable.containers); - containers.set(id2, { - ...element, - disabled - }); - return { - ...state, - droppable: { - ...state.droppable, - containers - } - }; - } - case Action.UnregisterDroppable: { - const { - id: id2, - key: key2 - } = action; - const element = state.droppable.containers.get(id2); - if (!element || key2 !== element.key) { - return state; - } - const containers = new DroppableContainersMap(state.droppable.containers); - containers.delete(id2); - return { - ...state, - droppable: { - ...state.droppable, - containers - } - }; - } - default: { - return state; - } +function getPreviousMonth(startingMonth, options) { + if (options.disableNavigation) { + return void 0; + } + var fromDate = options.fromDate, pagedNavigation = options.pagedNavigation, _a2 = options.numberOfMonths, numberOfMonths = _a2 === void 0 ? 1 : _a2; + var offset = pagedNavigation ? numberOfMonths : 1; + var month = startOfMonth(startingMonth); + if (!fromDate) { + return addMonths(month, -offset); } + var monthsDiff = differenceInCalendarMonths(month, fromDate); + if (monthsDiff <= 0) { + return void 0; + } + return addMonths(month, -offset); } -function RestoreFocus(_ref) { - let { - disabled - } = _ref; - const { - active, - activatorEvent, - draggableNodes - } = q2(InternalContext); - const previousActivatorEvent = usePrevious2(activatorEvent); - const previousActiveId = usePrevious2(active == null ? void 0 : active.id); - h2(() => { - if (disabled) { +var NavigationContext = B(void 0); +function NavigationProvider(props2) { + var dayPicker = useDayPicker(); + var _a2 = useNavigationState(), currentMonth = _a2[0], goToMonth = _a2[1]; + var displayMonths = getDisplayMonths(currentMonth, dayPicker); + var nextMonth = getNextMonth(currentMonth, dayPicker); + var previousMonth = getPreviousMonth(currentMonth, dayPicker); + var isDateDisplayed = function(date) { + return displayMonths.some(function(displayMonth) { + return isSameMonth(date, displayMonth); + }); + }; + var goToDate = function(date, refDate) { + if (isDateDisplayed(date)) { return; } - if (!activatorEvent && previousActivatorEvent && previousActiveId != null) { - if (!isKeyboardEvent(previousActivatorEvent)) { - return; - } - if (document.activeElement === previousActivatorEvent.target) { - return; - } - const draggableNode = draggableNodes.get(previousActiveId); - if (!draggableNode) { - return; - } - const { - activatorNode, - node - } = draggableNode; - if (!activatorNode.current && !node.current) { - return; - } - requestAnimationFrame(() => { - for (const element of [activatorNode.current, node.current]) { - if (!element) { - continue; - } - const focusableNode = findFirstFocusableNode(element); - if (focusableNode) { - focusableNode.focus(); - break; - } - } - }); + if (refDate && isBefore(date, refDate)) { + goToMonth(addMonths(date, 1 + dayPicker.numberOfMonths * -1)); + } else { + goToMonth(date); } - }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]); - return null; + }; + var value = { + currentMonth, + displayMonths, + goToMonth, + goToDate, + previousMonth, + nextMonth, + isDateDisplayed + }; + return bn.createElement(NavigationContext.Provider, { value }, props2.children); } -function applyModifiers(modifiers, _ref) { - let { - transform, - ...args - } = _ref; - return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => { - return modifier({ - transform: accumulator, - ...args - }); - }, transform) : transform; +function useNavigation() { + var context = q2(NavigationContext); + if (!context) { + throw new Error("useNavigation must be used within a NavigationProvider"); + } + return context; } -function useMeasuringConfiguration(config) { - return F( - () => ({ - draggable: { - ...defaultMeasuringConfiguration.draggable, - ...config == null ? void 0 : config.draggable - }, - droppable: { - ...defaultMeasuringConfiguration.droppable, - ...config == null ? void 0 : config.droppable - }, - dragOverlay: { - ...defaultMeasuringConfiguration.dragOverlay, - ...config == null ? void 0 : config.dragOverlay - } - }), - [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay] +function CaptionDropdowns(props2) { + var _a2; + var _b2 = useDayPicker(), classNames8 = _b2.classNames, styles = _b2.styles, components = _b2.components; + var goToMonth = useNavigation().goToMonth; + var handleMonthChange = function(newMonth) { + goToMonth(newMonth); + }; + var CaptionLabelComponent = (_a2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a2 !== void 0 ? _a2 : CaptionLabel; + var captionLabel = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); + return bn.createElement( + "div", + { className: classNames8.caption_dropdowns, style: styles.caption_dropdowns }, + bn.createElement("div", { className: classNames8.vhidden }, captionLabel), + bn.createElement(MonthsDropdown, { onChange: handleMonthChange, displayMonth: props2.displayMonth }), + bn.createElement(YearsDropdown, { onChange: handleMonthChange, displayMonth: props2.displayMonth }) ); } -function useLayoutShiftScrollCompensation(_ref) { - let { - activeNode, - measure, - initialRect, - config = true - } = _ref; - const initialized = _2(false); - const { - x: x5, - y: y5 - } = typeof config === "boolean" ? { - x: config, - y: config - } : config; - useIsomorphicLayoutEffect2(() => { - const disabled = !x5 && !y5; - if (disabled || !activeNode) { - initialized.current = false; +function IconLeft(props2) { + return bn.createElement( + "svg", + __assign2({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props2), + bn.createElement("path", { d: "M69.490332,3.34314575 C72.6145263,0.218951416 77.6798462,0.218951416 80.8040405,3.34314575 C83.8617626,6.40086786 83.9268205,11.3179931 80.9992143,14.4548388 L80.8040405,14.6568542 L35.461,60 L80.8040405,105.343146 C83.8617626,108.400868 83.9268205,113.317993 80.9992143,116.454839 L80.8040405,116.656854 C77.7463184,119.714576 72.8291931,119.779634 69.6923475,116.852028 L69.490332,116.656854 L18.490332,65.6568542 C15.4326099,62.5991321 15.367552,57.6820069 18.2951583,54.5451612 L18.490332,54.3431458 L69.490332,3.34314575 Z", fill: "currentColor", fillRule: "nonzero" }) + ); +} +function IconRight(props2) { + return bn.createElement( + "svg", + __assign2({ width: "16px", height: "16px", viewBox: "0 0 120 120" }, props2), + bn.createElement("path", { d: "M49.8040405,3.34314575 C46.6798462,0.218951416 41.6145263,0.218951416 38.490332,3.34314575 C35.4326099,6.40086786 35.367552,11.3179931 38.2951583,14.4548388 L38.490332,14.6568542 L83.8333725,60 L38.490332,105.343146 C35.4326099,108.400868 35.367552,113.317993 38.2951583,116.454839 L38.490332,116.656854 C41.5480541,119.714576 46.4651794,119.779634 49.602025,116.852028 L49.8040405,116.656854 L100.804041,65.6568542 C103.861763,62.5991321 103.926821,57.6820069 100.999214,54.5451612 L100.804041,54.3431458 L49.8040405,3.34314575 Z", fill: "currentColor" }) + ); +} +var Button = k3(function(props2, ref) { + var _a2 = useDayPicker(), classNames8 = _a2.classNames, styles = _a2.styles; + var classNamesArr = [classNames8.button_reset, classNames8.button]; + if (props2.className) { + classNamesArr.push(props2.className); + } + var className = classNamesArr.join(" "); + var style = __assign2(__assign2({}, styles.button_reset), styles.button); + if (props2.style) { + Object.assign(style, props2.style); + } + return bn.createElement("button", __assign2({}, props2, { ref, type: "button", className, style })); +}); +function Navigation(props2) { + var _a2, _b2; + var _c2 = useDayPicker(), dir = _c2.dir, locale2 = _c2.locale, classNames8 = _c2.classNames, styles = _c2.styles, _d2 = _c2.labels, labelPrevious2 = _d2.labelPrevious, labelNext2 = _d2.labelNext, components = _c2.components; + if (!props2.nextMonth && !props2.previousMonth) { + return bn.createElement(bn.Fragment, null); + } + var previousLabel = labelPrevious2(props2.previousMonth, { locale: locale2 }); + var previousClassName = [ + classNames8.nav_button, + classNames8.nav_button_previous + ].join(" "); + var nextLabel = labelNext2(props2.nextMonth, { locale: locale2 }); + var nextClassName = [ + classNames8.nav_button, + classNames8.nav_button_next + ].join(" "); + var IconRightComponent = (_a2 = components === null || components === void 0 ? void 0 : components.IconRight) !== null && _a2 !== void 0 ? _a2 : IconRight; + var IconLeftComponent = (_b2 = components === null || components === void 0 ? void 0 : components.IconLeft) !== null && _b2 !== void 0 ? _b2 : IconLeft; + return bn.createElement( + "div", + { className: classNames8.nav, style: styles.nav }, + !props2.hidePrevious && bn.createElement(Button, { name: "previous-month", "aria-label": previousLabel, className: previousClassName, style: styles.nav_button_previous, disabled: !props2.previousMonth, onClick: props2.onPreviousClick }, dir === "rtl" ? bn.createElement(IconRightComponent, { className: classNames8.nav_icon, style: styles.nav_icon }) : bn.createElement(IconLeftComponent, { className: classNames8.nav_icon, style: styles.nav_icon })), + !props2.hideNext && bn.createElement(Button, { name: "next-month", "aria-label": nextLabel, className: nextClassName, style: styles.nav_button_next, disabled: !props2.nextMonth, onClick: props2.onNextClick }, dir === "rtl" ? bn.createElement(IconLeftComponent, { className: classNames8.nav_icon, style: styles.nav_icon }) : bn.createElement(IconRightComponent, { className: classNames8.nav_icon, style: styles.nav_icon })) + ); +} +function CaptionNavigation(props2) { + var _a2; + var _b2; + var _c2 = useDayPicker(), numberOfMonths = _c2.numberOfMonths, dir = _c2.dir, components = _c2.components; + var _d2 = useNavigation(), previousMonth = _d2.previousMonth, nextMonth = _d2.nextMonth, goToMonth = _d2.goToMonth, displayMonths = _d2.displayMonths; + var displayIndex = displayMonths.findIndex(function(month) { + return isSameMonth(props2.displayMonth, month); + }); + var isFirst = displayIndex === 0; + var isLast = displayIndex === displayMonths.length - 1; + if (dir === "rtl") { + _a2 = [isFirst, isLast], isLast = _a2[0], isFirst = _a2[1]; + } + var hideNext = numberOfMonths > 1 && (isFirst || !isLast); + var hidePrevious = numberOfMonths > 1 && (isLast || !isFirst); + var handlePreviousClick = function() { + if (!previousMonth) return; - } - if (initialized.current || !initialRect) { + goToMonth(previousMonth); + }; + var handleNextClick = function() { + if (!nextMonth) + return; + goToMonth(nextMonth); + }; + var CaptionLabelComponent = (_b2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _b2 !== void 0 ? _b2 : CaptionLabel; + var captionLabel = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); + return bn.createElement( + bn.Fragment, + null, + captionLabel, + bn.createElement(Navigation, { displayMonth: props2.displayMonth, hideNext, hidePrevious, nextMonth, previousMonth, onPreviousClick: handlePreviousClick, onNextClick: handleNextClick }) + ); +} +function Caption(props2) { + var _a2; + var _b2 = useDayPicker(), classNames8 = _b2.classNames, disableNavigation = _b2.disableNavigation, styles = _b2.styles, captionLayout = _b2.captionLayout, components = _b2.components; + var CaptionLabelComponent = (_a2 = components === null || components === void 0 ? void 0 : components.CaptionLabel) !== null && _a2 !== void 0 ? _a2 : CaptionLabel; + var caption; + if (disableNavigation) { + caption = bn.createElement(CaptionLabelComponent, { id: props2.id, displayMonth: props2.displayMonth }); + } else if (captionLayout === "dropdown") { + caption = bn.createElement(CaptionDropdowns, { displayMonth: props2.displayMonth, id: props2.id }); + } else { + caption = bn.createElement(CaptionNavigation, { displayMonth: props2.displayMonth, id: props2.id }); + } + return bn.createElement("div", { className: classNames8.caption, style: styles.caption }, caption); +} +function Footer() { + var _a2 = useDayPicker(), footer = _a2.footer, styles = _a2.styles, tfoot = _a2.classNames.tfoot; + if (!footer) + return bn.createElement(bn.Fragment, null); + return bn.createElement( + "tfoot", + { className: tfoot, style: styles.tfoot }, + bn.createElement( + "tr", + null, + bn.createElement("td", { colSpan: 8 }, footer) + ) + ); +} +function getWeekdays(locale2, weekStartsOn, ISOWeek) { + var start = ISOWeek ? startOfISOWeek(new Date()) : startOfWeek(new Date(), { locale: locale2, weekStartsOn }); + var days = []; + for (var i4 = 0; i4 < 7; i4++) { + var day = addDays(start, i4); + days.push(day); + } + return days; +} +function HeadRow() { + var _a2 = useDayPicker(), classNames8 = _a2.classNames, styles = _a2.styles, showWeekNumber = _a2.showWeekNumber, locale2 = _a2.locale, weekStartsOn = _a2.weekStartsOn, ISOWeek = _a2.ISOWeek, formatWeekdayName2 = _a2.formatters.formatWeekdayName, labelWeekday2 = _a2.labels.labelWeekday; + var weekdays = getWeekdays(locale2, weekStartsOn, ISOWeek); + return bn.createElement( + "tr", + { style: styles.head_row, className: classNames8.head_row }, + showWeekNumber && bn.createElement("th", { scope: "col", style: styles.head_cell, className: classNames8.head_cell }), + weekdays.map(function(weekday, i4) { + return bn.createElement( + "th", + { key: i4, scope: "col", className: classNames8.head_cell, style: styles.head_cell }, + bn.createElement("span", { "aria-hidden": true }, formatWeekdayName2(weekday, { locale: locale2 })), + bn.createElement("span", { className: classNames8.vhidden }, labelWeekday2(weekday, { locale: locale2 })) + ); + }) + ); +} +function Head() { + var _a2; + var _b2 = useDayPicker(), classNames8 = _b2.classNames, styles = _b2.styles, components = _b2.components; + var HeadRowComponent = (_a2 = components === null || components === void 0 ? void 0 : components.HeadRow) !== null && _a2 !== void 0 ? _a2 : HeadRow; + return bn.createElement( + "thead", + { style: styles.head, className: classNames8.head }, + bn.createElement(HeadRowComponent, null) + ); +} +function DayContent(props2) { + var _a2 = useDayPicker(), locale2 = _a2.locale, formatDay2 = _a2.formatters.formatDay; + return bn.createElement(bn.Fragment, null, formatDay2(props2.date, { locale: locale2 })); +} +var SelectMultipleContext = B(void 0); +function SelectMultipleProvider(props2) { + if (!isDayPickerMultiple(props2.initialProps)) { + var emptyContextValue = { + selected: void 0, + modifiers: { + disabled: [] + } + }; + return bn.createElement(SelectMultipleContext.Provider, { value: emptyContextValue }, props2.children); + } + return bn.createElement(SelectMultipleProviderInternal, { initialProps: props2.initialProps, children: props2.children }); +} +function SelectMultipleProviderInternal(_a2) { + var initialProps = _a2.initialProps, children = _a2.children; + var selected = initialProps.selected, min3 = initialProps.min, max3 = initialProps.max; + var onDayClick = function(day, activeModifiers, e4) { + var _a3, _b2; + (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); + var isMinSelected = Boolean(activeModifiers.selected && min3 && (selected === null || selected === void 0 ? void 0 : selected.length) === min3); + if (isMinSelected) { return; } - const node = activeNode == null ? void 0 : activeNode.node.current; - if (!node || node.isConnected === false) { + var isMaxSelected = Boolean(!activeModifiers.selected && max3 && (selected === null || selected === void 0 ? void 0 : selected.length) === max3); + if (isMaxSelected) { return; } - const rect = measure(node); - const rectDelta = getRectDelta(rect, initialRect); - if (!x5) { - rectDelta.x = 0; - } - if (!y5) { - rectDelta.y = 0; - } - initialized.current = true; - if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) { - const firstScrollableAncestor = getFirstScrollableAncestor(node); - if (firstScrollableAncestor) { - firstScrollableAncestor.scrollBy({ - top: rectDelta.y, - left: rectDelta.x - }); - } + var selectedDays = selected ? __spreadArray2([], selected, true) : []; + if (activeModifiers.selected) { + var index = selectedDays.findIndex(function(selectedDay) { + return isSameDay(day, selectedDay); + }); + selectedDays.splice(index, 1); + } else { + selectedDays.push(day); } - }, [activeNode, x5, y5, initialRect, measure]); + (_b2 = initialProps.onSelect) === null || _b2 === void 0 ? void 0 : _b2.call(initialProps, selectedDays, day, activeModifiers, e4); + }; + var modifiers = { + disabled: [] + }; + if (selected) { + modifiers.disabled.push(function(day) { + var isMaxSelected = max3 && selected.length > max3 - 1; + var isSelected = selected.some(function(selectedDay) { + return isSameDay(selectedDay, day); + }); + return Boolean(isMaxSelected && !isSelected); + }); + } + var contextValue = { + selected, + onDayClick, + modifiers + }; + return bn.createElement(SelectMultipleContext.Provider, { value: contextValue }, children); } -var ActiveDraggableContext = /* @__PURE__ */ B({ - ...defaultCoordinates, - scaleX: 1, - scaleY: 1 -}); -var Status; -(function(Status2) { - Status2[Status2["Uninitialized"] = 0] = "Uninitialized"; - Status2[Status2["Initializing"] = 1] = "Initializing"; - Status2[Status2["Initialized"] = 2] = "Initialized"; -})(Status || (Status = {})); -var DndContext = /* @__PURE__ */ R(function DndContext2(_ref) { - var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect; - let { - id: id2, - accessibility, - autoScroll = true, - children, - sensors = defaultSensors, - collisionDetection = rectIntersection, - measuring, - modifiers, - ...props2 - } = _ref; - const store = y2(reducer, void 0, getInitialState); - const [state, dispatch] = store; - const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider(); - const [status, setStatus] = p2(Status.Uninitialized); - const isInitialized = status === Status.Initialized; - const { - draggable: { - active: activeId, - nodes: draggableNodes, - translate - }, - droppable: { - containers: droppableContainers - } - } = state; - const node = activeId ? draggableNodes.get(activeId) : null; - const activeRects = _2({ - initial: null, - translated: null - }); - const active = F(() => { - var _node$data; - return activeId != null ? { - id: activeId, - data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData, - rect: activeRects - } : null; - }, [activeId, node]); - const activeRef = _2(null); - const [activeSensor, setActiveSensor] = p2(null); - const [activatorEvent, setActivatorEvent] = p2(null); - const latestProps = useLatestValue(props2, Object.values(props2)); - const draggableDescribedById = useUniqueId("DndDescribedBy", id2); - const enabledDroppableContainers = F(() => droppableContainers.getEnabled(), [droppableContainers]); - const measuringConfiguration = useMeasuringConfiguration(measuring); - const { - droppableRects, - measureDroppableContainers, - measuringScheduled - } = useDroppableMeasuring(enabledDroppableContainers, { - dragging: isInitialized, - dependencies: [translate.x, translate.y], - config: measuringConfiguration.droppable - }); - const activeNode = useCachedNode(draggableNodes, activeId); - const activationCoordinates = F(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]); - const autoScrollOptions = getAutoScrollerOptions(); - const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure); - useLayoutShiftScrollCompensation({ - activeNode: activeId ? draggableNodes.get(activeId) : null, - config: autoScrollOptions.layoutShiftCompensation, - initialRect: initialActiveNodeRect, - measure: measuringConfiguration.draggable.measure - }); - const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect); - const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null); - const sensorContext = _2({ - activatorEvent: null, - active: null, - activeNode, - collisionRect: null, - collisions: null, - droppableRects, - draggableNodes, - draggingNode: null, - draggingNodeRect: null, - droppableContainers, - over: null, - scrollableAncestors: [], - scrollAdjustedTranslate: null - }); - const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id); - const dragOverlay = useDragOverlayMeasuring({ - measure: measuringConfiguration.dragOverlay.measure - }); - const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode; - const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null; - const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); - const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); - const windowRect = useWindowRect(draggingNode ? getWindow(draggingNode) : null); - const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null); - const scrollableAncestorRects = useRects(scrollableAncestors); - const modifiedTranslate = applyModifiers(modifiers, { - transform: { - x: translate.x - nodeRectDelta.x, - y: translate.y - nodeRectDelta.y, - scaleX: 1, - scaleY: 1 - }, - activatorEvent, - active, - activeNodeRect, - containerNodeRect, - draggingNodeRect, - over: sensorContext.current.over, - overlayNodeRect: dragOverlay.rect, - scrollableAncestors, - scrollableAncestorRects, - windowRect - }); - const pointerCoordinates = activationCoordinates ? add(activationCoordinates, translate) : null; - const scrollOffsets = useScrollOffsets(scrollableAncestors); - const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); - const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]); - const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment); - const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null; - const collisions = active && collisionRect ? collisionDetection({ - active, - collisionRect, - droppableRects, - droppableContainers: enabledDroppableContainers, - pointerCoordinates - }) : null; - const overId = getFirstCollision(collisions, "id"); - const [over, setOver] = p2(null); - const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta); - const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect); - const instantiateSensor = T2( - (event, _ref2) => { - let { - sensor: Sensor, - options - } = _ref2; - if (activeRef.current == null) { - return; - } - const activeNode2 = draggableNodes.get(activeRef.current); - if (!activeNode2) { - return; +function useSelectMultiple() { + var context = q2(SelectMultipleContext); + if (!context) { + throw new Error("useSelectMultiple must be used within a SelectMultipleProvider"); + } + return context; +} +function addToRange(day, range) { + var _a2 = range || {}, from = _a2.from, to = _a2.to; + if (!from) { + return { from: day, to: void 0 }; + } + if (!to && isSameDay(from, day)) { + return { from, to: day }; + } + if (!to && isBefore(day, from)) { + return { from: day, to: from }; + } + if (!to) { + return { from, to: day }; + } + if (isSameDay(to, day) && isSameDay(from, day)) { + return void 0; + } + if (isSameDay(to, day)) { + return { from: to, to: void 0 }; + } + if (isSameDay(from, day)) { + return void 0; + } + if (isAfter2(from, day)) { + return { from: day, to }; + } + return { from, to: day }; +} +var SelectRangeContext = B(void 0); +function SelectRangeProvider(props2) { + if (!isDayPickerRange(props2.initialProps)) { + var emptyContextValue = { + selected: void 0, + modifiers: { + range_start: [], + range_end: [], + range_middle: [], + disabled: [] } - const activatorEvent2 = event.nativeEvent; - const sensorInstance = new Sensor({ - active: activeRef.current, - activeNode: activeNode2, - event: activatorEvent2, - options, - context: sensorContext, - onStart(initialCoordinates) { - const id3 = activeRef.current; - if (id3 == null) { - return; - } - const draggableNode = draggableNodes.get(id3); - if (!draggableNode) { - return; + }; + return bn.createElement(SelectRangeContext.Provider, { value: emptyContextValue }, props2.children); + } + return bn.createElement(SelectRangeProviderInternal, { initialProps: props2.initialProps, children: props2.children }); +} +function SelectRangeProviderInternal(_a2) { + var initialProps = _a2.initialProps, children = _a2.children; + var selected = initialProps.selected; + var _b2 = selected || {}, selectedFrom = _b2.from, selectedTo = _b2.to; + var min3 = initialProps.min; + var max3 = initialProps.max; + var onDayClick = function(day, activeModifiers, e4) { + var _a3, _b3; + (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); + var newRange = addToRange(day, selected); + (_b3 = initialProps.onSelect) === null || _b3 === void 0 ? void 0 : _b3.call(initialProps, newRange, day, activeModifiers, e4); + }; + var modifiers = { + range_start: [], + range_end: [], + range_middle: [], + disabled: [] + }; + if (selectedFrom) { + modifiers.range_start = [selectedFrom]; + if (!selectedTo) { + modifiers.range_end = [selectedFrom]; + } else { + modifiers.range_end = [selectedTo]; + if (!isSameDay(selectedFrom, selectedTo)) { + modifiers.range_middle = [ + { + after: selectedFrom, + before: selectedTo } - const { - onDragStart - } = latestProps.current; - const event2 = { - active: { - id: id3, - data: draggableNode.data, - rect: activeRects - } - }; - sn(() => { - onDragStart == null ? void 0 : onDragStart(event2); - setStatus(Status.Initializing); - dispatch({ - type: Action.DragStart, - initialCoordinates, - active: id3 - }); - dispatchMonitorEvent({ - type: "onDragStart", - event: event2 - }); - }); - }, - onMove(coordinates) { - dispatch({ - type: Action.DragMove, - coordinates - }); - }, - onEnd: createHandler(Action.DragEnd), - onCancel: createHandler(Action.DragCancel) + ]; + } + } + } + if (min3) { + if (selectedFrom && !selectedTo) { + modifiers.disabled.push({ + after: subDays(selectedFrom, min3 - 1), + before: addDays(selectedFrom, min3 - 1) }); - sn(() => { - setActiveSensor(sensorInstance); - setActivatorEvent(event.nativeEvent); + } + if (selectedFrom && selectedTo) { + modifiers.disabled.push({ + after: selectedFrom, + before: addDays(selectedFrom, min3 - 1) }); - function createHandler(type) { - return async function handler() { - const { - active: active2, - collisions: collisions2, - over: over2, - scrollAdjustedTranslate: scrollAdjustedTranslate2 - } = sensorContext.current; - let event2 = null; - if (active2 && scrollAdjustedTranslate2) { - const { - cancelDrop - } = latestProps.current; - event2 = { - activatorEvent: activatorEvent2, - active: active2, - collisions: collisions2, - delta: scrollAdjustedTranslate2, - over: over2 - }; - if (type === Action.DragEnd && typeof cancelDrop === "function") { - const shouldCancel = await Promise.resolve(cancelDrop(event2)); - if (shouldCancel) { - type = Action.DragCancel; - } - } - } - activeRef.current = null; - sn(() => { - dispatch({ - type - }); - setStatus(Status.Uninitialized); - setOver(null); - setActiveSensor(null); - setActivatorEvent(null); - const eventName = type === Action.DragEnd ? "onDragEnd" : "onDragCancel"; - if (event2) { - const handler2 = latestProps.current[eventName]; - handler2 == null ? void 0 : handler2(event2); - dispatchMonitorEvent({ - type: eventName, - event: event2 - }); - } - }); - }; - } - }, - [draggableNodes] - ); - const bindActivatorToSensorInstantiator = T2((handler, sensor) => { - return (event, active2) => { - const nativeEvent = event.nativeEvent; - const activeDraggableNode = draggableNodes.get(active2); - if (activeRef.current !== null || !activeDraggableNode || nativeEvent.dndKit || nativeEvent.defaultPrevented) { - return; - } - const activationContext = { - active: activeDraggableNode - }; - const shouldActivate = handler(event, sensor.options, activationContext); - if (shouldActivate === true) { - nativeEvent.dndKit = { - capturedBy: sensor.sensor - }; - activeRef.current = active2; - instantiateSensor(event, sensor); - } - }; - }, [draggableNodes, instantiateSensor]); - const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator); - useSensorSetup(sensors); - useIsomorphicLayoutEffect2(() => { - if (activeNodeRect && status === Status.Initializing) { - setStatus(Status.Initialized); } - }, [activeNodeRect, status]); - h2( - () => { - const { - onDragMove - } = latestProps.current; - const { - active: active2, - activatorEvent: activatorEvent2, - collisions: collisions2, - over: over2 - } = sensorContext.current; - if (!active2 || !activatorEvent2) { - return; - } - const event = { - active: active2, - activatorEvent: activatorEvent2, - collisions: collisions2, - delta: { - x: scrollAdjustedTranslate.x, - y: scrollAdjustedTranslate.y - }, - over: over2 - }; - sn(() => { - onDragMove == null ? void 0 : onDragMove(event); - dispatchMonitorEvent({ - type: "onDragMove", - event - }); + } + if (max3) { + if (selectedFrom && !selectedTo) { + modifiers.disabled.push({ + before: addDays(selectedFrom, -max3 + 1) }); - }, - [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y] - ); - h2( - () => { - const { - active: active2, - activatorEvent: activatorEvent2, - collisions: collisions2, - droppableContainers: droppableContainers2, - scrollAdjustedTranslate: scrollAdjustedTranslate2 - } = sensorContext.current; - if (!active2 || activeRef.current == null || !activatorEvent2 || !scrollAdjustedTranslate2) { - return; - } - const { - onDragOver - } = latestProps.current; - const overContainer = droppableContainers2.get(overId); - const over2 = overContainer && overContainer.rect.current ? { - id: overContainer.id, - rect: overContainer.rect.current, - data: overContainer.data, - disabled: overContainer.disabled - } : null; - const event = { - active: active2, - activatorEvent: activatorEvent2, - collisions: collisions2, - delta: { - x: scrollAdjustedTranslate2.x, - y: scrollAdjustedTranslate2.y - }, - over: over2 - }; - sn(() => { - setOver(over2); - onDragOver == null ? void 0 : onDragOver(event); - dispatchMonitorEvent({ - type: "onDragOver", - event - }); + modifiers.disabled.push({ + after: addDays(selectedFrom, max3 - 1) }); - }, - [overId] - ); - useIsomorphicLayoutEffect2(() => { - sensorContext.current = { - activatorEvent, - active, - activeNode, - collisionRect, - collisions, - droppableRects, - draggableNodes, - draggingNode, - draggingNodeRect, - droppableContainers, - over, - scrollableAncestors, - scrollAdjustedTranslate - }; - activeRects.current = { - initial: draggingNodeRect, - translated: collisionRect - }; - }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]); - useAutoScroller({ - ...autoScrollOptions, - delta: translate, - draggingRect: collisionRect, - pointerCoordinates, - scrollableAncestors, - scrollableAncestorRects - }); - const publicContext = F(() => { - const context = { - active, - activeNode, - activeNodeRect, - activatorEvent, - collisions, - containerNodeRect, - dragOverlay, - draggableNodes, - droppableContainers, - droppableRects, - over, - measureDroppableContainers, - scrollableAncestors, - scrollableAncestorRects, - measuringConfiguration, - measuringScheduled, - windowRect - }; - return context; - }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]); - const internalContext = F(() => { - const context = { - activatorEvent, - activators, - active, - activeNodeRect, - ariaDescribedById: { - draggable: draggableDescribedById - }, - dispatch, - draggableNodes, - over, - measureDroppableContainers - }; - return context; - }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]); - return bn.createElement(DndMonitorContext.Provider, { - value: registerMonitorListener - }, bn.createElement(InternalContext.Provider, { - value: internalContext - }, bn.createElement(PublicContext.Provider, { - value: publicContext - }, bn.createElement(ActiveDraggableContext.Provider, { - value: transform - }, children)), bn.createElement(RestoreFocus, { - disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false - })), bn.createElement(Accessibility, { - ...accessibility, - hiddenTextDescribedById: draggableDescribedById - })); - function getAutoScrollerOptions() { - const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false; - const autoScrollGloballyDisabled = typeof autoScroll === "object" ? autoScroll.enabled === false : autoScroll === false; - const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled; - if (typeof autoScroll === "object") { - return { - ...autoScroll, - enabled - }; } - return { - enabled - }; - } -}); -var NullContext = /* @__PURE__ */ B(null); -var defaultRole = "button"; -var ID_PREFIX = "Droppable"; -function useDraggable(_ref) { - let { - id: id2, - data, - disabled = false, - attributes - } = _ref; - const key2 = useUniqueId(ID_PREFIX); - const { - activators, - activatorEvent, - active, - activeNodeRect, - ariaDescribedById, - draggableNodes, - over - } = q2(InternalContext); - const { - role = defaultRole, - roleDescription = "draggable", - tabIndex = 0 - } = attributes != null ? attributes : {}; - const isDragging = (active == null ? void 0 : active.id) === id2; - const transform = q2(isDragging ? ActiveDraggableContext : NullContext); - const [node, setNodeRef] = useNodeRef(); - const [activatorNode, setActivatorNodeRef] = useNodeRef(); - const listeners = useSyntheticListeners(activators, id2); - const dataRef = useLatestValue(data); - useIsomorphicLayoutEffect2( - () => { - draggableNodes.set(id2, { - id: id2, - key: key2, - node, - activatorNode, - data: dataRef + if (selectedFrom && selectedTo) { + var selectedCount = differenceInCalendarDays(selectedTo, selectedFrom) + 1; + var offset = max3 - selectedCount; + modifiers.disabled.push({ + before: subDays(selectedFrom, offset) }); - return () => { - const node2 = draggableNodes.get(id2); - if (node2 && node2.key === key2) { - draggableNodes.delete(id2); - } - }; - }, - [draggableNodes, id2] - ); - const memoizedAttributes = F(() => ({ - role, - tabIndex, - "aria-disabled": disabled, - "aria-pressed": isDragging && role === defaultRole ? true : void 0, - "aria-roledescription": roleDescription, - "aria-describedby": ariaDescribedById.draggable - }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]); - return { - active, - activatorEvent, - activeNodeRect, - attributes: memoizedAttributes, - isDragging, - listeners: disabled ? void 0 : listeners, - node, - over, - setNodeRef, - setActivatorNodeRef, - transform - }; + modifiers.disabled.push({ + after: addDays(selectedTo, offset) + }); + } + } + return bn.createElement(SelectRangeContext.Provider, { value: { selected, onDayClick, modifiers } }, children); } -function useDndContext() { - return q2(PublicContext); +function useSelectRange() { + var context = q2(SelectRangeContext); + if (!context) { + throw new Error("useSelectRange must be used within a SelectRangeProvider"); + } + return context; } -var ID_PREFIX$1 = "Droppable"; -var defaultResizeObserverConfig = { - timeout: 25 -}; -function useDroppable(_ref) { - let { - data, - disabled = false, - id: id2, - resizeObserverConfig - } = _ref; - const key2 = useUniqueId(ID_PREFIX$1); - const { - active, - dispatch, - over, - measureDroppableContainers - } = q2(InternalContext); - const previous = _2({ - disabled - }); - const resizeObserverConnected = _2(false); - const rect = _2(null); - const callbackId = _2(null); - const { - disabled: resizeObserverDisabled, - updateMeasurementsFor, - timeout: resizeObserverTimeout - } = { - ...defaultResizeObserverConfig, - ...resizeObserverConfig - }; - const ids2 = useLatestValue(updateMeasurementsFor != null ? updateMeasurementsFor : id2); - const handleResize = T2( - () => { - if (!resizeObserverConnected.current) { - resizeObserverConnected.current = true; - return; - } - if (callbackId.current != null) { - clearTimeout(callbackId.current); - } - callbackId.current = setTimeout(() => { - measureDroppableContainers(Array.isArray(ids2.current) ? ids2.current : [ids2.current]); - callbackId.current = null; - }, resizeObserverTimeout); - }, - [resizeObserverTimeout] - ); - const resizeObserver = useResizeObserver({ - callback: handleResize, - disabled: resizeObserverDisabled || !active +function matcherToArray(matcher) { + if (Array.isArray(matcher)) { + return __spreadArray2([], matcher, true); + } else if (matcher !== void 0) { + return [matcher]; + } else { + return []; + } +} +function getCustomModifiers(dayModifiers) { + var customModifiers = {}; + Object.entries(dayModifiers).forEach(function(_a2) { + var modifier = _a2[0], matcher = _a2[1]; + customModifiers[modifier] = matcherToArray(matcher); }); - const handleNodeChange = T2((newElement, previousElement) => { - if (!resizeObserver) { - return; - } - if (previousElement) { - resizeObserver.unobserve(previousElement); - resizeObserverConnected.current = false; - } - if (newElement) { - resizeObserver.observe(newElement); - } - }, [resizeObserver]); - const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange); - const dataRef = useLatestValue(data); - h2(() => { - if (!resizeObserver || !nodeRef.current) { - return; - } - resizeObserver.disconnect(); - resizeObserverConnected.current = false; - resizeObserver.observe(nodeRef.current); - }, [nodeRef, resizeObserver]); - useIsomorphicLayoutEffect2( - () => { - dispatch({ - type: Action.RegisterDroppable, - element: { - id: id2, - key: key2, - disabled, - node: nodeRef, - rect, - data: dataRef - } - }); - return () => dispatch({ - type: Action.UnregisterDroppable, - key: key2, - id: id2 - }); - }, - [id2] - ); - h2(() => { - if (disabled !== previous.current.disabled) { - dispatch({ - type: Action.SetDroppableDisabled, - id: id2, - key: key2, - disabled - }); - previous.current.disabled = disabled; - } - }, [id2, key2, disabled, dispatch]); - return { - active, - rect, - isOver: (over == null ? void 0 : over.id) === id2, - node: nodeRef, - over, - setNodeRef - }; + return customModifiers; } -function AnimationManager(_ref) { - let { - animation, - children - } = _ref; - const [clonedChildren, setClonedChildren] = p2(null); - const [element, setElement] = p2(null); - const previousChildren = usePrevious2(children); - if (!children && !clonedChildren && previousChildren) { - setClonedChildren(previousChildren); +var InternalModifier; +(function(InternalModifier2) { + InternalModifier2["Outside"] = "outside"; + InternalModifier2["Disabled"] = "disabled"; + InternalModifier2["Selected"] = "selected"; + InternalModifier2["Hidden"] = "hidden"; + InternalModifier2["Today"] = "today"; + InternalModifier2["RangeStart"] = "range_start"; + InternalModifier2["RangeEnd"] = "range_end"; + InternalModifier2["RangeMiddle"] = "range_middle"; +})(InternalModifier || (InternalModifier = {})); +var Selected = InternalModifier.Selected; +var Disabled = InternalModifier.Disabled; +var Hidden = InternalModifier.Hidden; +var Today = InternalModifier.Today; +var RangeEnd = InternalModifier.RangeEnd; +var RangeMiddle = InternalModifier.RangeMiddle; +var RangeStart = InternalModifier.RangeStart; +var Outside2 = InternalModifier.Outside; +function getInternalModifiers(dayPicker, selectMultiple, selectRange2) { + var _a2; + var internalModifiers = (_a2 = {}, _a2[Selected] = matcherToArray(dayPicker.selected), _a2[Disabled] = matcherToArray(dayPicker.disabled), _a2[Hidden] = matcherToArray(dayPicker.hidden), _a2[Today] = [dayPicker.today], _a2[RangeEnd] = [], _a2[RangeMiddle] = [], _a2[RangeStart] = [], _a2[Outside2] = [], _a2); + if (dayPicker.fromDate) { + internalModifiers[Disabled].push({ before: dayPicker.fromDate }); } - useIsomorphicLayoutEffect2(() => { - if (!element) { - return; - } - const key2 = clonedChildren == null ? void 0 : clonedChildren.key; - const id2 = clonedChildren == null ? void 0 : clonedChildren.props.id; - if (key2 == null || id2 == null) { - setClonedChildren(null); - return; - } - Promise.resolve(animation(id2, element)).then(() => { - setClonedChildren(null); - }); - }, [animation, clonedChildren, element]); - return bn.createElement(bn.Fragment, null, children, clonedChildren ? cn(clonedChildren, { - ref: setElement - }) : null); + if (dayPicker.toDate) { + internalModifiers[Disabled].push({ after: dayPicker.toDate }); + } + if (isDayPickerMultiple(dayPicker)) { + internalModifiers[Disabled] = internalModifiers[Disabled].concat(selectMultiple.modifiers[Disabled]); + } else if (isDayPickerRange(dayPicker)) { + internalModifiers[Disabled] = internalModifiers[Disabled].concat(selectRange2.modifiers[Disabled]); + internalModifiers[RangeStart] = selectRange2.modifiers[RangeStart]; + internalModifiers[RangeMiddle] = selectRange2.modifiers[RangeMiddle]; + internalModifiers[RangeEnd] = selectRange2.modifiers[RangeEnd]; + } + return internalModifiers; } -var defaultTransform = { - x: 0, - y: 0, - scaleX: 1, - scaleY: 1 -}; -function NullifiedContextProvider(_ref) { - let { - children - } = _ref; - return bn.createElement(InternalContext.Provider, { - value: defaultInternalContext - }, bn.createElement(ActiveDraggableContext.Provider, { - value: defaultTransform - }, children)); +var ModifiersContext = B(void 0); +function ModifiersProvider(props2) { + var dayPicker = useDayPicker(); + var selectMultiple = useSelectMultiple(); + var selectRange2 = useSelectRange(); + var internalModifiers = getInternalModifiers(dayPicker, selectMultiple, selectRange2); + var customModifiers = getCustomModifiers(dayPicker.modifiers); + var modifiers = __assign2(__assign2({}, internalModifiers), customModifiers); + return bn.createElement(ModifiersContext.Provider, { value: modifiers }, props2.children); } -var baseStyles = { - position: "fixed", - touchAction: "none" -}; -var defaultTransition = (activatorEvent) => { - const isKeyboardActivator = isKeyboardEvent(activatorEvent); - return isKeyboardActivator ? "transform 250ms ease" : void 0; -}; -var PositionedOverlay = /* @__PURE__ */ k3((_ref, ref) => { - let { - as, - activatorEvent, - adjustScale: adjustScale2, - children, - className, - rect, - style, - transform, - transition = defaultTransition - } = _ref; - if (!rect) { - return null; +function useModifiers() { + var context = q2(ModifiersContext); + if (!context) { + throw new Error("useModifiers must be used within a ModifiersProvider"); } - const scaleAdjustedTransform = adjustScale2 ? transform : { - ...transform, - scaleX: 1, - scaleY: 1 - }; - const styles = { - ...baseStyles, - width: rect.width, - height: rect.height, - top: rect.top, - left: rect.left, - transform: CSS.Transform.toString(scaleAdjustedTransform), - transformOrigin: adjustScale2 && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : void 0, - transition: typeof transition === "function" ? transition(activatorEvent) : transition, - ...style - }; - return bn.createElement(as, { - className, - style: styles, - ref - }, children); -}); -var defaultDropAnimationSideEffects = (options) => (_ref) => { - let { - active, - dragOverlay - } = _ref; - const originalStyles = {}; - const { - styles, - className - } = options; - if (styles != null && styles.active) { - for (const [key2, value] of Object.entries(styles.active)) { - if (value === void 0) { - continue; - } - originalStyles[key2] = active.node.style.getPropertyValue(key2); - active.node.style.setProperty(key2, value); - } + return context; +} +function isDateInterval(matcher) { + return Boolean(matcher && typeof matcher === "object" && "before" in matcher && "after" in matcher); +} +function isDateRange(value) { + return Boolean(value && typeof value === "object" && "from" in value); +} +function isDateAfterType(value) { + return Boolean(value && typeof value === "object" && "after" in value); +} +function isDateBeforeType(value) { + return Boolean(value && typeof value === "object" && "before" in value); +} +function isDayOfWeekType(value) { + return Boolean(value && typeof value === "object" && "dayOfWeek" in value); +} +function isDateInRange(date, range) { + var _a2; + var from = range.from, to = range.to; + if (!from) { + return false; } - if (styles != null && styles.dragOverlay) { - for (const [key2, value] of Object.entries(styles.dragOverlay)) { - if (value === void 0) { - continue; - } - dragOverlay.node.style.setProperty(key2, value); - } + if (!to && isSameDay(from, date)) { + return true; } - if (className != null && className.active) { - active.node.classList.add(className.active); + if (!to) { + return false; } - if (className != null && className.dragOverlay) { - dragOverlay.node.classList.add(className.dragOverlay); + var isRangeInverted = differenceInCalendarDays(to, from) < 0; + if (isRangeInverted) { + _a2 = [to, from], from = _a2[0], to = _a2[1]; } - return function cleanup() { - for (const [key2, value] of Object.entries(originalStyles)) { - active.node.style.setProperty(key2, value); + var isInRange = differenceInCalendarDays(date, from) >= 0 && differenceInCalendarDays(to, date) >= 0; + return isInRange; +} +function isDateType(value) { + return isDate(value); +} +function isArrayOfDates(value) { + return Array.isArray(value) && value.every(isDate); +} +function isMatch(day, matchers) { + return matchers.some(function(matcher) { + if (typeof matcher === "boolean") { + return matcher; } - if (className != null && className.active) { - active.node.classList.remove(className.active); + if (isDateType(matcher)) { + return isSameDay(day, matcher); } - }; -}; -var defaultKeyframeResolver = (_ref2) => { - let { - transform: { - initial: initial2, - final + if (isArrayOfDates(matcher)) { + return matcher.includes(day); } - } = _ref2; - return [{ - transform: CSS.Transform.toString(initial2) - }, { - transform: CSS.Transform.toString(final) - }]; -}; -var defaultDropAnimationConfiguration = { - duration: 250, - easing: "ease", - keyframes: defaultKeyframeResolver, - sideEffects: /* @__PURE__ */ defaultDropAnimationSideEffects({ - styles: { - active: { - opacity: "0" - } + if (isDateRange(matcher)) { + return isDateInRange(day, matcher); } - }) -}; -function useDropAnimation(_ref3) { - let { - config, - draggableNodes, - droppableContainers, - measuringConfiguration - } = _ref3; - return useEvent((id2, node) => { - if (config === null) { - return; + if (isDayOfWeekType(matcher)) { + return matcher.dayOfWeek.includes(day.getDay()); } - const activeDraggable = draggableNodes.get(id2); - if (!activeDraggable) { - return; + if (isDateInterval(matcher)) { + var diffBefore = differenceInCalendarDays(matcher.before, day); + var diffAfter = differenceInCalendarDays(matcher.after, day); + var isDayBefore = diffBefore > 0; + var isDayAfter = diffAfter < 0; + var isClosedInterval = isAfter2(matcher.before, matcher.after); + if (isClosedInterval) { + return isDayAfter && isDayBefore; + } else { + return isDayBefore || isDayAfter; + } } - const activeNode = activeDraggable.node.current; - if (!activeNode) { - return; + if (isDateAfterType(matcher)) { + return differenceInCalendarDays(day, matcher.after) > 0; } - const measurableNode = getMeasurableNode(node); - if (!measurableNode) { - return; + if (isDateBeforeType(matcher)) { + return differenceInCalendarDays(matcher.before, day) > 0; } - const { - transform - } = getWindow(node).getComputedStyle(node); - const parsedTransform = parseTransform(transform); - if (!parsedTransform) { - return; + if (typeof matcher === "function") { + return matcher(day); } - const animation = typeof config === "function" ? config : createDefaultDropAnimation(config); - scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure); - return animation({ - active: { - id: id2, - data: activeDraggable.data, - node: activeNode, - rect: measuringConfiguration.draggable.measure(activeNode) - }, - draggableNodes, - dragOverlay: { - node, - rect: measuringConfiguration.dragOverlay.measure(measurableNode) - }, - droppableContainers, - measuringConfiguration, - transform: parsedTransform - }); + return false; }); } -function createDefaultDropAnimation(options) { - const { - duration, - easing, - sideEffects, - keyframes - } = { - ...defaultDropAnimationConfiguration, - ...options - }; - return (_ref4) => { - let { - active, - dragOverlay, - transform, - ...rest - } = _ref4; - if (!duration) { - return; - } - const delta = { - x: dragOverlay.rect.left - active.rect.left, - y: dragOverlay.rect.top - active.rect.top - }; - const scale = { - scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1, - scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1 - }; - const finalTransform = { - x: transform.x - delta.x, - y: transform.y - delta.y, - ...scale - }; - const animationKeyframes = keyframes({ - ...rest, - active, - dragOverlay, - transform: { - initial: transform, - final: finalTransform - } - }); - const [firstKeyframe] = animationKeyframes; - const lastKeyframe = animationKeyframes[animationKeyframes.length - 1]; - if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) { - return; +function getActiveModifiers(day, modifiers, displayMonth) { + var matchedModifiers = Object.keys(modifiers).reduce(function(result, key2) { + var modifier = modifiers[key2]; + if (isMatch(day, modifier)) { + result.push(key2); } - const cleanup = sideEffects == null ? void 0 : sideEffects({ - active, - dragOverlay, - ...rest - }); - const animation = dragOverlay.node.animate(animationKeyframes, { - duration, - easing, - fill: "forwards" - }); - return new Promise((resolve) => { - animation.onfinish = () => { - cleanup == null ? void 0 : cleanup(); - resolve(); - }; - }); - }; + return result; + }, []); + var activeModifiers = {}; + matchedModifiers.forEach(function(modifier) { + return activeModifiers[modifier] = true; + }); + if (displayMonth && !isSameMonth(day, displayMonth)) { + activeModifiers.outside = true; + } + return activeModifiers; } -var key = 0; -function useKey(id2) { - return F(() => { - if (id2 == null) { - return; +function getInitialFocusTarget(displayMonths, modifiers) { + var firstDayInMonth = startOfMonth(displayMonths[0]); + var lastDayInMonth = endOfMonth(displayMonths[displayMonths.length - 1]); + var firstFocusableDay; + var today; + var date = firstDayInMonth; + while (date <= lastDayInMonth) { + var activeModifiers = getActiveModifiers(date, modifiers); + var isFocusable = !activeModifiers.disabled && !activeModifiers.hidden; + if (!isFocusable) { + date = addDays(date, 1); + continue; } - key++; - return key; - }, [id2]); + if (activeModifiers.selected) { + return date; + } + if (activeModifiers.today && !today) { + today = date; + } + if (!firstFocusableDay) { + firstFocusableDay = date; + } + date = addDays(date, 1); + } + if (today) { + return today; + } else { + return firstFocusableDay; + } } -var DragOverlay = /* @__PURE__ */ bn.memo((_ref) => { - let { - adjustScale: adjustScale2 = false, - children, - dropAnimation: dropAnimationConfig, - style, - transition, - modifiers, - wrapperElement = "div", - className, - zIndex = 999 - } = _ref; - const { - activatorEvent, - active, - activeNodeRect, - containerNodeRect, - draggableNodes, - droppableContainers, - dragOverlay, - over, - measuringConfiguration, - scrollableAncestors, - scrollableAncestorRects, - windowRect - } = useDndContext(); - const transform = q2(ActiveDraggableContext); - const key2 = useKey(active == null ? void 0 : active.id); - const modifiedTransform = applyModifiers(modifiers, { - activatorEvent, - active, - activeNodeRect, - containerNodeRect, - draggingNodeRect: dragOverlay.rect, - over, - overlayNodeRect: dragOverlay.rect, - scrollableAncestors, - scrollableAncestorRects, - transform, - windowRect - }); - const initialRect = useInitialValue(activeNodeRect); - const dropAnimation = useDropAnimation({ - config: dropAnimationConfig, - draggableNodes, - droppableContainers, - measuringConfiguration - }); - const ref = initialRect ? dragOverlay.setRef : void 0; - return bn.createElement(NullifiedContextProvider, null, bn.createElement(AnimationManager, { - animation: dropAnimation - }, active && key2 ? bn.createElement(PositionedOverlay, { - key: key2, - id: active.id, - ref, - as: wrapperElement, - activatorEvent, - adjustScale: adjustScale2, - className, - transition, - rect: initialRect, - style: { - zIndex, - ...style +var MAX_RETRY = 365; +function getNextFocus(focusedDay, options) { + var moveBy = options.moveBy, direction = options.direction, context = options.context, modifiers = options.modifiers, _a2 = options.retry, retry = _a2 === void 0 ? { count: 0, lastFocused: focusedDay } : _a2; + var weekStartsOn = context.weekStartsOn, fromDate = context.fromDate, toDate2 = context.toDate, locale2 = context.locale; + var moveFns = { + day: addDays, + week: addWeeks, + month: addMonths, + year: addYears, + startOfWeek: function(date) { + return context.ISOWeek ? startOfISOWeek(date) : startOfWeek(date, { locale: locale2, weekStartsOn }); }, - transform: modifiedTransform - }, children) : null)); -}); - -// node_modules/@dnd-kit/sortable/dist/sortable.esm.js -function arrayMove(array, from, to) { - const newArray = array.slice(); - newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0]); - return newArray; -} -function getSortedRects(items, rects) { - return items.reduce((accumulator, id2, index) => { - const rect = rects.get(id2); - if (rect) { - accumulator[index] = rect; + endOfWeek: function(date) { + return context.ISOWeek ? endOfISOWeek(date) : endOfWeek(date, { locale: locale2, weekStartsOn }); } - return accumulator; - }, Array(items.length)); -} -function isValidIndex(index) { - return index !== null && index >= 0; -} -function itemsEqual(a5, b4) { - if (a5 === b4) { - return true; + }; + var newFocusedDay = moveFns[moveBy](focusedDay, direction === "after" ? 1 : -1); + if (direction === "before" && fromDate) { + newFocusedDay = max2([fromDate, newFocusedDay]); + } else if (direction === "after" && toDate2) { + newFocusedDay = min2([toDate2, newFocusedDay]); } - if (a5.length !== b4.length) { - return false; + var isFocusable = true; + if (modifiers) { + var activeModifiers = getActiveModifiers(newFocusedDay, modifiers); + isFocusable = !activeModifiers.disabled && !activeModifiers.hidden; } - for (let i4 = 0; i4 < a5.length; i4++) { - if (a5[i4] !== b4[i4]) { - return false; + if (isFocusable) { + return newFocusedDay; + } else { + if (retry.count > MAX_RETRY) { + return retry.lastFocused; } + return getNextFocus(newFocusedDay, { + moveBy, + direction, + context, + modifiers, + retry: __assign2(__assign2({}, retry), { count: retry.count + 1 }) + }); } - return true; -} -function normalizeDisabled(disabled) { - if (typeof disabled === "boolean") { - return { - draggable: disabled, - droppable: disabled - }; - } - return disabled; } -var defaultScale = { - scaleX: 1, - scaleY: 1 -}; -var horizontalListSortingStrategy = (_ref) => { - var _rects$activeIndex; - let { - rects, - activeNodeRect: fallbackActiveRect, - activeIndex, - overIndex, - index - } = _ref; - const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect; - if (!activeNodeRect) { - return null; - } - const itemGap = getItemGap(rects, index, activeIndex); - if (index === activeIndex) { - const newIndexRect = rects[overIndex]; - if (!newIndexRect) { - return null; +var FocusContext = B(void 0); +function FocusProvider(props2) { + var navigation = useNavigation(); + var modifiers = useModifiers(); + var _a2 = p2(), focusedDay = _a2[0], setFocusedDay = _a2[1]; + var _b2 = p2(), lastFocused = _b2[0], setLastFocused = _b2[1]; + var initialFocusTarget = getInitialFocusTarget(navigation.displayMonths, modifiers); + var focusTarget = (focusedDay !== null && focusedDay !== void 0 ? focusedDay : lastFocused && navigation.isDateDisplayed(lastFocused)) ? lastFocused : initialFocusTarget; + var blur = function() { + setLastFocused(focusedDay); + setFocusedDay(void 0); + }; + var focus = function(date) { + setFocusedDay(date); + }; + var context = useDayPicker(); + var moveFocus = function(moveBy, direction) { + if (!focusedDay) + return; + var nextFocused = getNextFocus(focusedDay, { + moveBy, + direction, + context, + modifiers + }); + if (isSameDay(focusedDay, nextFocused)) + return void 0; + navigation.goToDate(nextFocused, focusedDay); + focus(nextFocused); + }; + var value = { + focusedDay, + focusTarget, + blur, + focus, + focusDayAfter: function() { + return moveFocus("day", "after"); + }, + focusDayBefore: function() { + return moveFocus("day", "before"); + }, + focusWeekAfter: function() { + return moveFocus("week", "after"); + }, + focusWeekBefore: function() { + return moveFocus("week", "before"); + }, + focusMonthBefore: function() { + return moveFocus("month", "before"); + }, + focusMonthAfter: function() { + return moveFocus("month", "after"); + }, + focusYearBefore: function() { + return moveFocus("year", "before"); + }, + focusYearAfter: function() { + return moveFocus("year", "after"); + }, + focusStartOfWeek: function() { + return moveFocus("startOfWeek", "before"); + }, + focusEndOfWeek: function() { + return moveFocus("endOfWeek", "after"); } - return { - x: activeIndex < overIndex ? newIndexRect.left + newIndexRect.width - (activeNodeRect.left + activeNodeRect.width) : newIndexRect.left - activeNodeRect.left, - y: 0, - ...defaultScale - }; - } - if (index > activeIndex && index <= overIndex) { - return { - x: -activeNodeRect.width - itemGap, - y: 0, - ...defaultScale - }; + }; + return bn.createElement(FocusContext.Provider, { value }, props2.children); +} +function useFocusContext() { + var context = q2(FocusContext); + if (!context) { + throw new Error("useFocusContext must be used within a FocusProvider"); } - if (index < activeIndex && index >= overIndex) { - return { - x: activeNodeRect.width + itemGap, - y: 0, - ...defaultScale + return context; +} +function useActiveModifiers(day, displayMonth) { + var modifiers = useModifiers(); + var activeModifiers = getActiveModifiers(day, modifiers, displayMonth); + return activeModifiers; +} +var SelectSingleContext = B(void 0); +function SelectSingleProvider(props2) { + if (!isDayPickerSingle(props2.initialProps)) { + var emptyContextValue = { + selected: void 0 }; + return bn.createElement(SelectSingleContext.Provider, { value: emptyContextValue }, props2.children); } - return { - x: 0, - y: 0, - ...defaultScale + return bn.createElement(SelectSingleProviderInternal, { initialProps: props2.initialProps, children: props2.children }); +} +function SelectSingleProviderInternal(_a2) { + var initialProps = _a2.initialProps, children = _a2.children; + var onDayClick = function(day, activeModifiers, e4) { + var _a3, _b2, _c2; + (_a3 = initialProps.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(initialProps, day, activeModifiers, e4); + if (activeModifiers.selected && !initialProps.required) { + (_b2 = initialProps.onSelect) === null || _b2 === void 0 ? void 0 : _b2.call(initialProps, void 0, day, activeModifiers, e4); + return; + } + (_c2 = initialProps.onSelect) === null || _c2 === void 0 ? void 0 : _c2.call(initialProps, day, day, activeModifiers, e4); }; -}; -function getItemGap(rects, index, activeIndex) { - const currentRect = rects[index]; - const previousRect = rects[index - 1]; - const nextRect = rects[index + 1]; - if (!currentRect || !previousRect && !nextRect) { - return 0; - } - if (activeIndex < index) { - return previousRect ? currentRect.left - (previousRect.left + previousRect.width) : nextRect.left - (currentRect.left + currentRect.width); - } - return nextRect ? nextRect.left - (currentRect.left + currentRect.width) : currentRect.left - (previousRect.left + previousRect.width); + var contextValue = { + selected: initialProps.selected, + onDayClick + }; + return bn.createElement(SelectSingleContext.Provider, { value: contextValue }, children); } -var rectSortingStrategy = (_ref) => { - let { - rects, - activeIndex, - overIndex, - index - } = _ref; - const newRects = arrayMove(rects, overIndex, activeIndex); - const oldRect = rects[index]; - const newRect = newRects[index]; - if (!newRect || !oldRect) { - return null; +function useSelectSingle() { + var context = q2(SelectSingleContext); + if (!context) { + throw new Error("useSelectSingle must be used within a SelectSingleProvider"); } - return { - x: newRect.left - oldRect.left, - y: newRect.top - oldRect.top, - scaleX: newRect.width / oldRect.width, - scaleY: newRect.height / oldRect.height - }; -}; -var defaultScale$1 = { - scaleX: 1, - scaleY: 1 -}; -var verticalListSortingStrategy = (_ref) => { - var _rects$activeIndex; - let { - activeIndex, - activeNodeRect: fallbackActiveRect, - index, - rects, - overIndex - } = _ref; - const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect; - if (!activeNodeRect) { - return null; - } - if (index === activeIndex) { - const overIndexRect = rects[overIndex]; - if (!overIndexRect) { - return null; + return context; +} +function useDayEventHandlers(date, activeModifiers) { + var dayPicker = useDayPicker(); + var single = useSelectSingle(); + var multiple = useSelectMultiple(); + var range = useSelectRange(); + var _a2 = useFocusContext(), focusDayAfter = _a2.focusDayAfter, focusDayBefore = _a2.focusDayBefore, focusWeekAfter = _a2.focusWeekAfter, focusWeekBefore = _a2.focusWeekBefore, blur = _a2.blur, focus = _a2.focus, focusMonthBefore = _a2.focusMonthBefore, focusMonthAfter = _a2.focusMonthAfter, focusYearBefore = _a2.focusYearBefore, focusYearAfter = _a2.focusYearAfter, focusStartOfWeek = _a2.focusStartOfWeek, focusEndOfWeek = _a2.focusEndOfWeek; + var onClick = function(e4) { + var _a3, _b2, _c2, _d2; + if (isDayPickerSingle(dayPicker)) { + (_a3 = single.onDayClick) === null || _a3 === void 0 ? void 0 : _a3.call(single, date, activeModifiers, e4); + } else if (isDayPickerMultiple(dayPicker)) { + (_b2 = multiple.onDayClick) === null || _b2 === void 0 ? void 0 : _b2.call(multiple, date, activeModifiers, e4); + } else if (isDayPickerRange(dayPicker)) { + (_c2 = range.onDayClick) === null || _c2 === void 0 ? void 0 : _c2.call(range, date, activeModifiers, e4); + } else { + (_d2 = dayPicker.onDayClick) === null || _d2 === void 0 ? void 0 : _d2.call(dayPicker, date, activeModifiers, e4); } - return { - x: 0, - y: activeIndex < overIndex ? overIndexRect.top + overIndexRect.height - (activeNodeRect.top + activeNodeRect.height) : overIndexRect.top - activeNodeRect.top, - ...defaultScale$1 - }; + }; + var onFocus = function(e4) { + var _a3; + focus(date); + (_a3 = dayPicker.onDayFocus) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onBlur = function(e4) { + var _a3; + blur(); + (_a3 = dayPicker.onDayBlur) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onMouseEnter = function(e4) { + var _a3; + (_a3 = dayPicker.onDayMouseEnter) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onMouseLeave = function(e4) { + var _a3; + (_a3 = dayPicker.onDayMouseLeave) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onTouchCancel = function(e4) { + var _a3; + (_a3 = dayPicker.onDayTouchCancel) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onTouchEnd = function(e4) { + var _a3; + (_a3 = dayPicker.onDayTouchEnd) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onTouchMove = function(e4) { + var _a3; + (_a3 = dayPicker.onDayTouchMove) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onTouchStart = function(e4) { + var _a3; + (_a3 = dayPicker.onDayTouchStart) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onKeyUp = function(e4) { + var _a3; + (_a3 = dayPicker.onDayKeyUp) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var onKeyDown = function(e4) { + var _a3; + switch (e4.key) { + case "ArrowLeft": + e4.preventDefault(); + e4.stopPropagation(); + dayPicker.dir === "rtl" ? focusDayAfter() : focusDayBefore(); + break; + case "ArrowRight": + e4.preventDefault(); + e4.stopPropagation(); + dayPicker.dir === "rtl" ? focusDayBefore() : focusDayAfter(); + break; + case "ArrowDown": + e4.preventDefault(); + e4.stopPropagation(); + focusWeekAfter(); + break; + case "ArrowUp": + e4.preventDefault(); + e4.stopPropagation(); + focusWeekBefore(); + break; + case "PageUp": + e4.preventDefault(); + e4.stopPropagation(); + e4.shiftKey ? focusYearBefore() : focusMonthBefore(); + break; + case "PageDown": + e4.preventDefault(); + e4.stopPropagation(); + e4.shiftKey ? focusYearAfter() : focusMonthAfter(); + break; + case "Home": + e4.preventDefault(); + e4.stopPropagation(); + focusStartOfWeek(); + break; + case "End": + e4.preventDefault(); + e4.stopPropagation(); + focusEndOfWeek(); + break; + } + (_a3 = dayPicker.onDayKeyDown) === null || _a3 === void 0 ? void 0 : _a3.call(dayPicker, date, activeModifiers, e4); + }; + var eventHandlers = { + onClick, + onFocus, + onBlur, + onKeyDown, + onKeyUp, + onMouseEnter, + onMouseLeave, + onTouchCancel, + onTouchEnd, + onTouchMove, + onTouchStart + }; + return eventHandlers; +} +function useSelectedDays() { + var dayPicker = useDayPicker(); + var single = useSelectSingle(); + var multiple = useSelectMultiple(); + var range = useSelectRange(); + var selectedDays = isDayPickerSingle(dayPicker) ? single.selected : isDayPickerMultiple(dayPicker) ? multiple.selected : isDayPickerRange(dayPicker) ? range.selected : void 0; + return selectedDays; +} +function isInternalModifier(modifier) { + return Object.values(InternalModifier).includes(modifier); +} +function getDayClassNames(dayPicker, activeModifiers) { + var classNames8 = [dayPicker.classNames.day]; + Object.keys(activeModifiers).forEach(function(modifier) { + var customClassName = dayPicker.modifiersClassNames[modifier]; + if (customClassName) { + classNames8.push(customClassName); + } else if (isInternalModifier(modifier)) { + var internalClassName = dayPicker.classNames["day_".concat(modifier)]; + if (internalClassName) { + classNames8.push(internalClassName); + } + } + }); + return classNames8; +} +function getDayStyle(dayPicker, activeModifiers) { + var style = __assign2({}, dayPicker.styles.day); + Object.keys(activeModifiers).forEach(function(modifier) { + var _a2; + style = __assign2(__assign2({}, style), (_a2 = dayPicker.modifiersStyles) === null || _a2 === void 0 ? void 0 : _a2[modifier]); + }); + return style; +} +function useDayRender(day, displayMonth, buttonRef) { + var _a2; + var _b2, _c2; + var dayPicker = useDayPicker(); + var focusContext = useFocusContext(); + var activeModifiers = useActiveModifiers(day, displayMonth); + var eventHandlers = useDayEventHandlers(day, activeModifiers); + var selectedDays = useSelectedDays(); + var isButton = Boolean(dayPicker.onDayClick || dayPicker.mode !== "default"); + h2(function() { + var _a3; + if (activeModifiers.outside) + return; + if (!focusContext.focusedDay) + return; + if (!isButton) + return; + if (isSameDay(focusContext.focusedDay, day)) { + (_a3 = buttonRef.current) === null || _a3 === void 0 ? void 0 : _a3.focus(); + } + }, [ + focusContext.focusedDay, + day, + buttonRef, + isButton, + activeModifiers.outside + ]); + var className = getDayClassNames(dayPicker, activeModifiers).join(" "); + var style = getDayStyle(dayPicker, activeModifiers); + var ariaLabel = dayPicker.labels.labelDay(day, activeModifiers, { + locale: dayPicker.locale + }); + var isHidden = Boolean(activeModifiers.outside && !dayPicker.showOutsideDays || activeModifiers.hidden); + var DayContentComponent = (_c2 = (_b2 = dayPicker.components) === null || _b2 === void 0 ? void 0 : _b2.DayContent) !== null && _c2 !== void 0 ? _c2 : DayContent; + var children = bn.createElement(DayContentComponent, { date: day, displayMonth, activeModifiers }); + var divProps = { + style, + className, + children, + "aria-label": ariaLabel + }; + var isFocusTarget = focusContext.focusTarget && isSameDay(focusContext.focusTarget, day) && !activeModifiers.outside; + var isFocused = focusContext.focusedDay && isSameDay(focusContext.focusedDay, day); + var buttonProps = __assign2(__assign2(__assign2({}, divProps), (_a2 = { disabled: activeModifiers.disabled }, _a2["aria-pressed"] = activeModifiers.selected, _a2["aria-label"] = ariaLabel, _a2.tabIndex = isFocused || isFocusTarget ? 0 : -1, _a2)), eventHandlers); + var dayRender = { + isButton, + isHidden, + activeModifiers, + selectedDays, + buttonProps, + divProps + }; + return dayRender; +} +function Day(props2) { + var buttonRef = _2(null); + var dayRender = useDayRender(props2.date, props2.displayMonth, buttonRef); + if (dayRender.isHidden) { + return bn.createElement(bn.Fragment, null); } - const itemGap = getItemGap$1(rects, index, activeIndex); - if (index > activeIndex && index <= overIndex) { - return { - x: 0, - y: -activeNodeRect.height - itemGap, - ...defaultScale$1 - }; + if (!dayRender.isButton) { + return bn.createElement("div", __assign2({}, dayRender.divProps)); } - if (index < activeIndex && index >= overIndex) { - return { - x: 0, - y: activeNodeRect.height + itemGap, - ...defaultScale$1 - }; + return bn.createElement(Button, __assign2({ name: "day", ref: buttonRef }, dayRender.buttonProps)); +} +function WeekNumber(props2) { + var weekNumber = props2.number, dates = props2.dates; + var _a2 = useDayPicker(), onWeekNumberClick = _a2.onWeekNumberClick, styles = _a2.styles, classNames8 = _a2.classNames, locale2 = _a2.locale, labelWeekNumber2 = _a2.labels.labelWeekNumber, formatWeekNumber2 = _a2.formatters.formatWeekNumber; + var content = formatWeekNumber2(Number(weekNumber), { locale: locale2 }); + if (!onWeekNumberClick) { + return bn.createElement("span", { className: classNames8.weeknumber, style: styles.weeknumber }, content); } - return { - x: 0, - y: 0, - ...defaultScale$1 + var label = labelWeekNumber2(Number(weekNumber), { locale: locale2 }); + var handleClick = function(e4) { + onWeekNumberClick(weekNumber, dates, e4); }; -}; -function getItemGap$1(clientRects, index, activeIndex) { - const currentRect = clientRects[index]; - const previousRect = clientRects[index - 1]; - const nextRect = clientRects[index + 1]; - if (!currentRect) { - return 0; - } - if (activeIndex < index) { - return previousRect ? currentRect.top - (previousRect.top + previousRect.height) : nextRect ? nextRect.top - (currentRect.top + currentRect.height) : 0; - } - return nextRect ? nextRect.top - (currentRect.top + currentRect.height) : previousRect ? currentRect.top - (previousRect.top + previousRect.height) : 0; + return bn.createElement(Button, { name: "week-number", "aria-label": label, className: classNames8.weeknumber, style: styles.weeknumber, onClick: handleClick }, content); } -var ID_PREFIX2 = "Sortable"; -var Context = /* @__PURE__ */ bn.createContext({ - activeIndex: -1, - containerId: ID_PREFIX2, - disableTransforms: false, - items: [], - overIndex: -1, - useDragOverlay: false, - sortedRects: [], - strategy: rectSortingStrategy, - disabled: { - draggable: false, - droppable: false +function Row(props2) { + var _a2, _b2; + var _c2 = useDayPicker(), styles = _c2.styles, classNames8 = _c2.classNames, showWeekNumber = _c2.showWeekNumber, components = _c2.components; + var DayComponent = (_a2 = components === null || components === void 0 ? void 0 : components.Day) !== null && _a2 !== void 0 ? _a2 : Day; + var WeeknumberComponent = (_b2 = components === null || components === void 0 ? void 0 : components.WeekNumber) !== null && _b2 !== void 0 ? _b2 : WeekNumber; + var weekNumberCell; + if (showWeekNumber) { + weekNumberCell = bn.createElement( + "td", + { className: classNames8.cell, style: styles.cell }, + bn.createElement(WeeknumberComponent, { number: props2.weekNumber, dates: props2.dates }) + ); } -}); -function SortableContext(_ref) { - let { - children, - id: id2, - items: userDefinedItems, - strategy = rectSortingStrategy, - disabled: disabledProp = false - } = _ref; - const { - active, - dragOverlay, - droppableRects, - over, - measureDroppableContainers, - measuringScheduled - } = useDndContext(); - const containerId = useUniqueId(ID_PREFIX2, id2); - const useDragOverlay = Boolean(dragOverlay.rect !== null); - const items = F(() => userDefinedItems.map((item) => typeof item === "object" && "id" in item ? item.id : item), [userDefinedItems]); - const isDragging = active != null; - const activeIndex = active ? items.indexOf(active.id) : -1; - const overIndex = over ? items.indexOf(over.id) : -1; - const previousItemsRef = _2(items); - const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current); - const disableTransforms = overIndex !== -1 && activeIndex === -1 || itemsHaveChanged; - const disabled = normalizeDisabled(disabledProp); - useIsomorphicLayoutEffect2(() => { - if (itemsHaveChanged && isDragging && !measuringScheduled) { - measureDroppableContainers(items); - } - }, [itemsHaveChanged, items, isDragging, measureDroppableContainers, measuringScheduled]); - h2(() => { - previousItemsRef.current = items; - }, [items]); - const contextValue = F( - () => ({ - activeIndex, - containerId, - disabled, - disableTransforms, - items, - overIndex, - useDragOverlay, - sortedRects: getSortedRects(items, droppableRects), - strategy - }), - [activeIndex, containerId, disabled.draggable, disabled.droppable, disableTransforms, items, overIndex, droppableRects, useDragOverlay, strategy] + return bn.createElement( + "tr", + { className: classNames8.row, style: styles.row }, + weekNumberCell, + props2.dates.map(function(date) { + return bn.createElement( + "td", + { className: classNames8.cell, style: styles.cell, key: getUnixTime(date) }, + bn.createElement(DayComponent, { displayMonth: props2.displayMonth, date }) + ); + }) ); - return bn.createElement(Context.Provider, { - value: contextValue - }, children); } -var defaultNewIndexGetter = (_ref) => { - let { - id: id2, - items, - activeIndex, - overIndex - } = _ref; - return arrayMove(items, activeIndex, overIndex).indexOf(id2); -}; -var defaultAnimateLayoutChanges = (_ref2) => { - let { - containerId, - isSorting, - wasDragging, - index, - items, - newIndex, - previousItems, - previousContainerId, - transition - } = _ref2; - if (!transition || !wasDragging) { - return false; - } - if (previousItems !== items && index === newIndex) { - return false; - } - if (isSorting) { - return true; +function daysToMonthWeeks(fromDate, toDate2, options) { + var toWeek = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? endOfISOWeek(toDate2) : endOfWeek(toDate2, options); + var fromWeek = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? startOfISOWeek(fromDate) : startOfWeek(fromDate, options); + var nOfDays = differenceInCalendarDays(toWeek, fromWeek); + var days = []; + for (var i4 = 0; i4 <= nOfDays; i4++) { + days.push(addDays(fromWeek, i4)); } - return newIndex !== index && containerId === previousContainerId; -}; -var defaultTransition2 = { - duration: 200, - easing: "ease" -}; -var transitionProperty = "transform"; -var disabledTransition = /* @__PURE__ */ CSS.Transition.toString({ - property: transitionProperty, - duration: 0, - easing: "linear" -}); -var defaultAttributes = { - roleDescription: "sortable" -}; -function useDerivedTransform(_ref) { - let { - disabled, - index, - node, - rect - } = _ref; - const [derivedTransform, setDerivedtransform] = p2(null); - const previousIndex = _2(index); - useIsomorphicLayoutEffect2(() => { - if (!disabled && index !== previousIndex.current && node.current) { - const initial2 = rect.current; - if (initial2) { - const current = getClientRect(node.current, { - ignoreTransform: true - }); - const delta = { - x: initial2.left - current.left, - y: initial2.top - current.top, - scaleX: initial2.width / current.width, - scaleY: initial2.height / current.height - }; - if (delta.x || delta.y) { - setDerivedtransform(delta); - } - } + var weeksInMonth = days.reduce(function(result, date) { + var weekNumber = (options === null || options === void 0 ? void 0 : options.ISOWeek) ? getISOWeek(date) : getWeek(date, options); + var existingWeek = result.find(function(value) { + return value.weekNumber === weekNumber; + }); + if (existingWeek) { + existingWeek.dates.push(date); + return result; } - if (index !== previousIndex.current) { - previousIndex.current = index; + result.push({ + weekNumber, + dates: [date] + }); + return result; + }, []); + return weeksInMonth; +} +function getMonthWeeks(month, options) { + var weeksInMonth = daysToMonthWeeks(startOfMonth(month), endOfMonth(month), options); + if (options === null || options === void 0 ? void 0 : options.useFixedWeeks) { + var nrOfMonthWeeks = getWeeksInMonth(month, options); + if (nrOfMonthWeeks < 6) { + var lastWeek = weeksInMonth[weeksInMonth.length - 1]; + var lastDate = lastWeek.dates[lastWeek.dates.length - 1]; + var toDate2 = addWeeks(lastDate, 6 - nrOfMonthWeeks); + var extraWeeks = daysToMonthWeeks(addWeeks(lastDate, 1), toDate2, options); + weeksInMonth.push.apply(weeksInMonth, extraWeeks); } - }, [disabled, index, node, rect]); - h2(() => { - if (derivedTransform) { - requestAnimationFrame(() => { - setDerivedtransform(null); - }); + } + return weeksInMonth; +} +function Table(props2) { + var _a2, _b2, _c2; + var _d2 = useDayPicker(), locale2 = _d2.locale, classNames8 = _d2.classNames, styles = _d2.styles, hideHead = _d2.hideHead, fixedWeeks = _d2.fixedWeeks, components = _d2.components, weekStartsOn = _d2.weekStartsOn, firstWeekContainsDate = _d2.firstWeekContainsDate, ISOWeek = _d2.ISOWeek; + var weeks = getMonthWeeks(props2.displayMonth, { + useFixedWeeks: Boolean(fixedWeeks), + ISOWeek, + locale: locale2, + weekStartsOn, + firstWeekContainsDate + }); + var HeadComponent = (_a2 = components === null || components === void 0 ? void 0 : components.Head) !== null && _a2 !== void 0 ? _a2 : Head; + var RowComponent = (_b2 = components === null || components === void 0 ? void 0 : components.Row) !== null && _b2 !== void 0 ? _b2 : Row; + var FooterComponent = (_c2 = components === null || components === void 0 ? void 0 : components.Footer) !== null && _c2 !== void 0 ? _c2 : Footer; + return bn.createElement( + "table", + { className: classNames8.table, style: styles.table, role: "grid", "aria-labelledby": props2["aria-labelledby"] }, + !hideHead && bn.createElement(HeadComponent, null), + bn.createElement("tbody", { className: classNames8.tbody, style: styles.tbody }, weeks.map(function(week) { + return bn.createElement(RowComponent, { displayMonth: props2.displayMonth, key: week.weekNumber, dates: week.dates, weekNumber: week.weekNumber }); + })), + bn.createElement(FooterComponent, null) + ); +} +function canUseDOM2() { + return !!(typeof window !== "undefined" && window.document && window.document.createElement); +} +var useIsomorphicLayoutEffect2 = canUseDOM2() ? s2 : h2; +var serverHandoffComplete = false; +var id = 0; +function genId2() { + return "react-day-picker-".concat(++id); +} +function useId(providedId) { + var _a2; + var initialId = providedId !== null && providedId !== void 0 ? providedId : serverHandoffComplete ? genId2() : null; + var _b2 = p2(initialId), id2 = _b2[0], setId = _b2[1]; + useIsomorphicLayoutEffect2(function() { + if (id2 === null) { + setId(genId2()); } - }, [derivedTransform]); - return derivedTransform; + }, []); + h2(function() { + if (serverHandoffComplete === false) { + serverHandoffComplete = true; + } + }, []); + return (_a2 = providedId !== null && providedId !== void 0 ? providedId : id2) !== null && _a2 !== void 0 ? _a2 : void 0; } -function useSortable(_ref) { - let { - animateLayoutChanges: animateLayoutChanges3 = defaultAnimateLayoutChanges, - attributes: userDefinedAttributes, - disabled: localDisabled, - data: customData, - getNewIndex = defaultNewIndexGetter, - id: id2, - strategy: localStrategy, - resizeObserverConfig, - transition = defaultTransition2 - } = _ref; - const { - items, - containerId, - activeIndex, - disabled: globalDisabled, - disableTransforms, - sortedRects, - overIndex, - useDragOverlay, - strategy: globalStrategy - } = q2(Context); - const disabled = normalizeLocalDisabled(localDisabled, globalDisabled); - const index = items.indexOf(id2); - const data = F(() => ({ - sortable: { - containerId, - index, - items - }, - ...customData - }), [containerId, customData, index, items]); - const itemsAfterCurrentSortable = F(() => items.slice(items.indexOf(id2)), [items, id2]); - const { - rect, - node, - isOver, - setNodeRef: setDroppableNodeRef - } = useDroppable({ - id: id2, - data, - disabled: disabled.droppable, - resizeObserverConfig: { - updateMeasurementsFor: itemsAfterCurrentSortable, - ...resizeObserverConfig +function Month(props2) { + var _a2; + var _b2; + var dayPicker = useDayPicker(); + var dir = dayPicker.dir, classNames8 = dayPicker.classNames, styles = dayPicker.styles, components = dayPicker.components; + var displayMonths = useNavigation().displayMonths; + var captionId = useId(dayPicker.id ? "".concat(dayPicker.id, "-").concat(props2.displayIndex) : void 0); + var className = [classNames8.month]; + var style = styles.month; + var isStart = props2.displayIndex === 0; + var isEnd = props2.displayIndex === displayMonths.length - 1; + var isCenter = !isStart && !isEnd; + if (dir === "rtl") { + _a2 = [isStart, isEnd], isEnd = _a2[0], isStart = _a2[1]; + } + if (isStart) { + className.push(classNames8.caption_start); + style = __assign2(__assign2({}, style), styles.caption_start); + } + if (isEnd) { + className.push(classNames8.caption_end); + style = __assign2(__assign2({}, style), styles.caption_end); + } + if (isCenter) { + className.push(classNames8.caption_between); + style = __assign2(__assign2({}, style), styles.caption_between); + } + var CaptionComponent = (_b2 = components === null || components === void 0 ? void 0 : components.Caption) !== null && _b2 !== void 0 ? _b2 : Caption; + return bn.createElement( + "div", + { key: props2.displayIndex, className: className.join(" "), style }, + bn.createElement(CaptionComponent, { id: captionId, displayMonth: props2.displayMonth }), + bn.createElement(Table, { "aria-labelledby": captionId, displayMonth: props2.displayMonth }) + ); +} +function Root() { + var dayPicker = useDayPicker(); + var focusContext = useFocusContext(); + var navigation = useNavigation(); + var _a2 = p2(false), hasInitialFocus = _a2[0], setHasInitialFocus = _a2[1]; + h2(function() { + if (!dayPicker.initialFocus) + return; + if (!focusContext.focusTarget) + return; + if (hasInitialFocus) + return; + focusContext.focus(focusContext.focusTarget); + setHasInitialFocus(true); + }, [ + dayPicker.initialFocus, + hasInitialFocus, + focusContext.focus, + focusContext.focusTarget, + focusContext + ]); + var classNames8 = [dayPicker.classNames.root, dayPicker.className]; + if (dayPicker.numberOfMonths > 1) { + classNames8.push(dayPicker.classNames.multiple_months); + } + if (dayPicker.showWeekNumber) { + classNames8.push(dayPicker.classNames.with_weeknumber); + } + var style = __assign2(__assign2({}, dayPicker.styles.root), dayPicker.style); + return bn.createElement( + "div", + { className: classNames8.join(" "), style, dir: dayPicker.dir }, + bn.createElement("div", { className: dayPicker.classNames.months, style: dayPicker.styles.months }, navigation.displayMonths.map(function(month, i4) { + return bn.createElement(Month, { key: i4, displayIndex: i4, displayMonth: month }); + })) + ); +} +function RootProvider(props2) { + var children = props2.children, initialProps = __rest2(props2, ["children"]); + return bn.createElement( + DayPickerProvider, + { initialProps }, + bn.createElement( + NavigationProvider, + null, + bn.createElement( + SelectSingleProvider, + { initialProps }, + bn.createElement( + SelectMultipleProvider, + { initialProps }, + bn.createElement( + SelectRangeProvider, + { initialProps }, + bn.createElement( + ModifiersProvider, + null, + bn.createElement(FocusProvider, null, children) + ) + ) + ) + ) + ) + ); +} +function DayPicker(props2) { + return bn.createElement( + RootProvider, + __assign2({}, props2), + bn.createElement(Root, null) + ); +} + +// src/components/ui/menus/menu.tsx +var OptionMenu = bn.forwardRef( + (props2, ref) => { + var _a2; + const initialOptions = props2.options.map((o3, i4) => { + return { + ...o3, + id: i4 + 1 + }; + }); + h2(() => { + setSuggestions( + props2.options.map((o3, i4) => { + return { + ...o3, + id: i4 + 1 + }; + }) + ); + }, [props2.options]); + const [suggestions, setSuggestions] = p2(initialOptions); + const [tags, setTags] = p2( + props2.value.map( + (v3) => { + var _a3; + return (_a3 = initialOptions.find((f4) => f4.value == v3)) != null ? _a3 : { + id: 0, + name: v3, + value: v3 + }; + } + ) + ); + const onDelete = T2( + (tagIndex) => { + const newTags = tags.filter((_4, i4) => i4 !== tagIndex); + setTags(newTags); + props2.saveOptions( + suggestions.map((f4) => f4.value), + newTags.map((f4) => f4.value) + ); + }, + [suggestions, tags] + ); + const onAddition = T2( + (newTag) => { + let tag = newTag; + let newSuggestions = suggestions; + let newTags = tags; + if (!suggestions.find((s5) => s5.value == newTag.value)) { + tag = { + id: suggestions.length + 1, + name: newTag.name, + value: newTag.name + }; + newSuggestions = [...suggestions, tag]; + setSuggestions(newSuggestions); + } + if (props2.multi) { + if (!tags.find((t4) => t4.value == tag.value)) { + newTags = [...tags, tag]; + setTags(newTags); + } + } else { + newTags = [tag]; + setTags(newTags); + } + props2.saveOptions( + newSuggestions.map((f4) => f4.value), + newTags.map((f4) => f4.value) + ); + if (!props2.multi) { + props2.hide(); + } + }, + [tags, suggestions] + ); + const onValidation = T2( + (newTag) => { + if (!props2.editable && !suggestions.find((s5) => s5.value == newTag.value)) { + return false; + } + if (newTag.name.length == 0) { + return false; + } + return true; + }, + [suggestions] + ); + return /* @__PURE__ */ bn.createElement(ReactTags_default, { + tags: props2.multi ? tags : [], + suggestions, + ref, + onDelete, + onAddition, + onValidate: onValidation, + defaultSuggestions: props2.defaultOptions, + placeholderText: (_a2 = props2.placeholder) != null ? _a2 : "", + minQueryLength: 0, + onHover: props2.onHover, + hoverSelect: props2.onHover ? true : false, + maxSuggestionsLength: props2.showAll ? Math.min(50, props2.options.length) : 8, + suggestionsOnly: !props2.searchable && !props2.editable, + allowNew: props2.editable, + previewComponent: props2.previewComponent + }); + } +); +var inputMenuItem = (menuItem, value, setValue) => { + const frag = document.createDocumentFragment(); + const spanEl = frag.createEl("span"); + const inputEl = frag.createEl("input"); + inputEl.value = value; + inputEl.addEventListener("click", (e4) => { + e4.stopImmediatePropagation(); + }); + inputEl.addEventListener("mousedown", (e4) => { + e4.stopImmediatePropagation(); + }); + inputEl.addEventListener("mouseup", (e4) => { + e4.stopImmediatePropagation(); + }); + inputEl.addEventListener("blur", (e4) => { + setValue(inputEl.value); + }); + menuItem.dom.toggleClass("mk-menu-input", true); + menuItem.setTitle(frag); + return menuItem; +}; +var showSelectMenu = (point, optionProps) => { + const menu = new import_obsidian6.Menu(); + menu.dom.toggleClass("mk-menu", true); + menu.setUseNativeMenu(false); + const frag = document.createDocumentFragment(); + const div = frag.createDiv("mk-options-container"); + div.style.minHeight = Math.min( + 200, + (optionProps.options.length + (optionProps.searchable ? 1 : 0)) * 28 + ).toString() + "px"; + div.addEventListener("click", (e4) => { + e4.stopImmediatePropagation(); + }); + div.addEventListener("mousedown", (e4) => { + e4.stopImmediatePropagation(); + }); + div.addEventListener("mouseup", (e4) => { + e4.stopImmediatePropagation(); + }); + div.addEventListener("keydown", (e4) => { + }); + menu.onHide(() => optionProps.onHide && optionProps.onHide()); + const root = createRoot(div); + root.render( + /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(OptionMenu, { + hide: () => { + menu.hide(); + optionProps.onHide && optionProps.onHide(); + }, + ...optionProps + })) + ); + menu.addItem((item) => { + item.setTitle(frag); + }); + const keys = [...menu.scope.keys]; + for (let i4 = 0; i4 < keys.length; i4++) { + if (keys[i4].key != "Escape") { + menu.scope.unregister(keys[i4]); } + } + menu.showAtPosition(point); + return menu; +}; +var showDatePickerMenu = (point, value, setValue, format2) => { + const menu = new import_obsidian6.Menu(); + menu.dom.toggleClass("mk-menu", true); + menu.setUseNativeMenu(false); + const frag = document.createDocumentFragment(); + const div = frag.createEl("div"); + div.addEventListener("click", (e4) => { + e4.stopImmediatePropagation(); }); - const { - active, - activatorEvent, - activeNodeRect, - attributes, - setNodeRef: setDraggableNodeRef, - listeners, - isDragging, - over, - setActivatorNodeRef, - transform - } = useDraggable({ - id: id2, - data, - attributes: { - ...defaultAttributes, - ...userDefinedAttributes - }, - disabled: disabled.draggable + div.addEventListener("mousedown", (e4) => { + e4.stopImmediatePropagation(); }); - const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef); - const isSorting = Boolean(active); - const displaceItem = isSorting && !disableTransforms && isValidIndex(activeIndex) && isValidIndex(overIndex); - const shouldDisplaceDragSource = !useDragOverlay && isDragging; - const dragSourceDisplacement = shouldDisplaceDragSource && displaceItem ? transform : null; - const strategy = localStrategy != null ? localStrategy : globalStrategy; - const finalTransform = displaceItem ? dragSourceDisplacement != null ? dragSourceDisplacement : strategy({ - rects: sortedRects, - activeNodeRect, - activeIndex, - overIndex, - index - }) : null; - const newIndex = isValidIndex(activeIndex) && isValidIndex(overIndex) ? getNewIndex({ - id: id2, - items, - activeIndex, - overIndex - }) : index; - const activeId = active == null ? void 0 : active.id; - const previous = _2({ - activeId, - items, - newIndex, - containerId + div.addEventListener("mouseup", (e4) => { + e4.stopImmediatePropagation(); }); - const itemsHaveChanged = items !== previous.current.items; - const shouldAnimateLayoutChanges = animateLayoutChanges3({ - active, - containerId, - isDragging, - isSorting, - id: id2, - index, - items, - newIndex: previous.current.newIndex, - previousItems: previous.current.items, - previousContainerId: previous.current.containerId, - transition, - wasDragging: previous.current.activeId != null + div.addEventListener("keydown", (e4) => { }); - const derivedTransform = useDerivedTransform({ - disabled: !shouldAnimateLayoutChanges, - index, - node, - rect + const setDate = (date) => { + setValue(date); + menu.hide(); + }; + const root = createRoot(div); + root.render( + /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(DayPicker, { + mode: "single", + selected: value, + onSelect: setDate + })) + ); + menu.addItem((item) => { + item.setTitle(frag); }); + const keys = [...menu.scope.keys]; + for (let i4 = 0; i4 < keys.length; i4++) { + if (keys[i4].key != "Escape") { + menu.scope.unregister(keys[i4]); + } + } + menu.showAtPosition(point); + return menu; +}; +var disclosureMenuItem = (menuItem, multi, editable, title, value, options, saveOptions) => { + const frag = document.createDocumentFragment(); + const div = frag.createDiv("title"); + div.textContent = title; + const div2 = frag.createDiv("disclosure"); + div2.textContent = value; + menuItem.setTitle(frag); + menuItem.onClick((ev) => { + var _a2; + ev.stopPropagation(); + const offset = menuItem.dom.getBoundingClientRect(); + showSelectMenu( + { x: offset.right + 10, y: offset.top }, + { + multi, + editable, + value: (_a2 = splitString(value)) != null ? _a2 : [], + options, + saveOptions, + searchable: true, + showAll: true + } + ); + }); + return menuItem; +}; + +// src/components/ContextView/DataTypeView/OptionCell.tsx +var OptionCell = (props2) => { + var _a2, _b2; + const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => f4); + const initialOptions = [ + ...(_b2 = splitString(props2.options).filter((f4) => f4).map((t4) => ({ name: t4, value: t4 }))) != null ? _b2 : [], + ...initialValue.map((f4) => ({ name: f4, value: f4 })) + ].filter(onlyUniqueProp("value")); + const [options, setOptions] = p2(initialOptions); + const [value, setValue] = p2(initialValue); + const [saveState, setSaveState] = p2(false); h2(() => { - if (isSorting && previous.current.newIndex !== newIndex) { - previous.current.newIndex = newIndex; + var _a3; + setValue( + (props2.multi ? (_a3 = splitString(props2.initialValue)) != null ? _a3 : [] : [props2.initialValue]).filter((f4) => f4) + ); + }, [props2.initialValue]); + const removeValue = (v3) => { + const newValues = value.filter((f4) => f4 != v3); + setValue(newValues); + props2.saveOptions( + options.map((f4) => f4.value).join(","), + newValues.join(",") + ); + }; + const saveOptions = (_options, _value) => { + if (!props2.multi) { + setOptions( + _options.filter((f4) => f4.length > 0).map((t4) => ({ name: t4, value: t4 })) + ); + setValue(_value); + } else { + setOptions(_options.map((t4) => ({ name: t4, value: t4 }))); + setValue(_value); } - if (containerId !== previous.current.containerId) { - previous.current.containerId = containerId; + }; + h2(() => { + if (saveState) { + props2.saveOptions( + options.filter((f4) => f4.value.length > 0).map((f4) => f4.value).join(","), + value.join(",") + ); + props2.setEditMode(null); + setSaveState(false); } - if (items !== previous.current.items) { - previous.current.items = items; + }, [saveState]); + const menuProps = () => ({ + multi: props2.multi, + editable: true, + value, + options: !props2.multi ? [{ name: "None", value: "" }, ...options] : options, + saveOptions, + placeholder: "Select Option", + searchable: true, + showAll: true, + onHide: () => { + setSaveState(true); } - }, [isSorting, newIndex, containerId, items]); + }); + return /* @__PURE__ */ bn.createElement(OptionCellBase, { + value, + menuProps, + multi: props2.multi, + editMode: props2.editMode, + removeValue + }); +}; +var OptionCellBase = (props2) => { + const { + value, + menuProps, + removeValue, + getLabelString, + openItem, + valueClass + } = props2; + const menuRef = _2(null); h2(() => { - if (activeId === previous.current.activeId) { - return; - } - if (activeId && !previous.current.activeId) { - previous.current.activeId = activeId; - return; + if (props2.editMode == 2) { + if (!menuRef.current) + showMenu(); } - const timeoutId = setTimeout(() => { - previous.current.activeId = activeId; - }, 50); - return () => clearTimeout(timeoutId); - }, [activeId]); - return { - active, - activeIndex, - attributes, - data, - rect, - index, - newIndex, - items, - isOver, - isSorting, - isDragging, - listeners, - node, - overIndex, - over, - setNodeRef, - setActivatorNodeRef, - setDroppableNodeRef, - setDraggableNodeRef, - transform: derivedTransform != null ? derivedTransform : finalTransform, - transition: getTransition() + }, [props2.editMode]); + const ref = _2(null); + const showMenu = () => { + const offset = ref.current.getBoundingClientRect(); + menuRef.current = showSelectMenu( + { x: offset.left - 4, y: offset.bottom - 4 }, + menuProps() + ); }; - function getTransition() { - if (derivedTransform || itemsHaveChanged && previous.current.newIndex === index) { - return disabledTransition; - } - if (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent) || !transition) { - return void 0; + const editable = props2.editMode > 0; + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-option", + ref + }, value.length > 0 ? value.map((o3) => /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-option-item" + }, (getLabelString ? getLabelString(o3).length > 0 : o3.length > 0) ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: valueClass && valueClass(o3), + onClick: () => openItem && openItem(o3) + }, getLabelString ? getLabelString(o3) : o3), editable && props2.multi ? /* @__PURE__ */ bn.createElement("div", { + className: "mk-icon-xsmall", + onClick: () => removeValue(o3), + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-close"] } - if (isSorting || shouldAnimateLayoutChanges) { - return CSS.Transition.toString({ - ...transition, - property: transitionProperty - }); + }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)) : /* @__PURE__ */ bn.createElement("div", null, "Select"), editable && !props2.multi && value.length > 0 ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("span", null), /* @__PURE__ */ bn.createElement("div", { + onClick: (e4) => editable && !props2.multi && showMenu(), + className: "mk-cell-option-select mk-icon-xxsmall mk-icon-rotated", + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-collapse-sm"] } - return void 0; - } -} -function normalizeLocalDisabled(localDisabled, globalDisabled) { - var _localDisabled$dragga, _localDisabled$droppa; - if (typeof localDisabled === "boolean") { - return { - draggable: localDisabled, - droppable: false - }; - } - return { - draggable: (_localDisabled$dragga = localDisabled == null ? void 0 : localDisabled.draggable) != null ? _localDisabled$dragga : globalDisabled.draggable, - droppable: (_localDisabled$droppa = localDisabled == null ? void 0 : localDisabled.droppable) != null ? _localDisabled$droppa : globalDisabled.droppable - }; -} -function hasSortableData(entry) { - if (!entry) { - return false; - } - const data = entry.data.current; - if (data && "sortable" in data && typeof data.sortable === "object" && "containerId" in data.sortable && "items" in data.sortable && "index" in data.sortable) { - return true; - } - return false; -} -var directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left]; -var sortableKeyboardCoordinates = (event, _ref) => { - let { - context: { - active, - collisionRect, - droppableRects, - droppableContainers, - over, - scrollableAncestors - } - } = _ref; - if (directions.includes(event.code)) { - event.preventDefault(); - if (!active || !collisionRect) { - return; - } - const filteredContainers = []; - droppableContainers.getEnabled().forEach((entry) => { - if (!entry || entry != null && entry.disabled) { - return; - } - const rect = droppableRects.get(entry.id); - if (!rect) { - return; - } - switch (event.code) { - case KeyboardCode.Down: - if (collisionRect.top < rect.top) { - filteredContainers.push(entry); - } - break; - case KeyboardCode.Up: - if (collisionRect.top > rect.top) { - filteredContainers.push(entry); - } - break; - case KeyboardCode.Left: - if (collisionRect.left > rect.left) { - filteredContainers.push(entry); - } - break; - case KeyboardCode.Right: - if (collisionRect.left < rect.left) { - filteredContainers.push(entry); - } - break; - } - }); - const collisions = closestCorners({ - active, - collisionRect, - droppableRects, - droppableContainers: filteredContainers, - pointerCoordinates: null - }); - let closestId = getFirstCollision(collisions, "id"); - if (closestId === (over == null ? void 0 : over.id) && collisions.length > 1) { - closestId = collisions[1].id; - } - if (closestId != null) { - const activeDroppable = droppableContainers.get(active.id); - const newDroppable = droppableContainers.get(closestId); - const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null; - const newNode = newDroppable == null ? void 0 : newDroppable.node.current; - if (newNode && newRect && activeDroppable && newDroppable) { - const newScrollAncestors = getScrollableAncestors(newNode); - const hasDifferentScrollAncestors = newScrollAncestors.some((element, index) => scrollableAncestors[index] !== element); - const hasSameContainer = isSameContainer(activeDroppable, newDroppable); - const isAfterActive = isAfter2(activeDroppable, newDroppable); - const offset = hasDifferentScrollAncestors || !hasSameContainer ? { - x: 0, - y: 0 - } : { - x: isAfterActive ? collisionRect.width - newRect.width : 0, - y: isAfterActive ? collisionRect.height - newRect.height : 0 - }; - const rectCoordinates = { - x: newRect.left, - y: newRect.top - }; - const newCoordinates = offset.x && offset.y ? rectCoordinates : subtract(rectCoordinates, offset); - return newCoordinates; - } - } - } - return void 0; -}; -function isSameContainer(a5, b4) { - if (!hasSortableData(a5) || !hasSortableData(b4)) { - return false; - } - return a5.data.current.sortable.containerId === b4.data.current.sortable.containerId; -} -function isAfter2(a5, b4) { - if (!hasSortableData(a5) || !hasSortableData(b4)) { - return false; - } - if (!isSameContainer(a5, b4)) { - return false; - } - return a5.data.current.sortable.index < b4.data.current.sortable.index; -} - -// src/components/ContextView/CardsView/KanbanColumn.tsx -var import_classnames = __toESM(require_classnames()); - -// src/components/ContextView/DataTypeView/TextCell.tsx -var TextCell = (props2) => { - const { initialValue, saveValue } = props2; - const [value, setValue] = bn.useState(initialValue); - const ref = _2(null); - const onBlur = () => { - if (initialValue != value) - saveValue(value); - }; - const onKeyDown = (e4) => { - e4.stopPropagation(); - if (e4.key == "Enter") { - e4.target.blur(); - props2.setEditMode(null); - } - if (e4.key == "Escape") { - setValue(initialValue); - e4.target.blur(); - props2.setEditMode(null); - } - }; - bn.useEffect(() => { - setValue(initialValue); - }, [initialValue]); - h2(() => { - var _a2; - if (props2.editMode == 2) { - (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.focus(); - } - }, [props2.editMode]); - return props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { - onClick: (e4) => e4.stopPropagation(), - className: "mk-cell-text", - ref, - type: "text", - value, - onChange: (e4) => setValue(e4.target.value), - onKeyDown, - onBlur - }) : /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-text" - }, value); -}; - -// src/components/ContextView/DataTypeView/NumberCell.tsx -var NumberCell = (props2) => { - const { initialValue, saveValue } = props2; - const [value, setValue] = bn.useState(initialValue); - const ref = _2(null); - const onBlur = () => { - if (initialValue != value) - saveValue(value); - }; - const onKeyDown = (e4) => { - e4.stopPropagation(); - if (e4.key == "Enter") { - e4.target.blur(); - props2.setEditMode(null); - } - if (e4.key == "Escape") { - setValue(initialValue); - e4.target.blur(); - props2.setEditMode(null); - } - }; - bn.useEffect(() => { - setValue(initialValue); - }, [initialValue]); - h2(() => { - var _a2; - if (props2.editMode == 2) { - (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.focus(); - } - }, [props2.editMode]); - return props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { - className: "mk-cell-text", - type: "number", - step: "any", - ref, - value, - onChange: (e4) => setValue(e4.target.value), - onKeyDown, - onBlur - }) : /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-text" - }, value); -}; - -// src/components/ContextView/DataTypeView/FilePropertyCell.tsx -var FilePropertyCell = (props2) => { - const { property } = props2; - const file = getAbstractFileAtPath(app, props2.file); - const [cache, setCache] = p2(null); - const initialValue = file ? appendFileMetaData(property, file) : ""; - if (property == "folder") { - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-fileprop", - onClick: () => { - openTFolder(getAbstractFileAtPath(app, initialValue), app, false); - } - }, folderPathToString(initialValue)); - } - if (property == "extension") { - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-fileprop" - }, initialValue); - } else if (property == "ctime" || property == "mtime") { - const date = new Date(parseInt(initialValue)).getTime() ? new Date(parseInt(initialValue)) : null; - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-fileprop" - }, date && formatDistance3(new Date(date), new Date(), { addSuffix: true })); - } else if (property == "size") { - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-fileprop" - }, initialValue); - } - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-fileprop" - }); -}; - -// src/components/ContextView/DataTypeView/OptionCell.tsx -var OptionCell = (props2) => { - var _a2, _b2; - const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => f4); - const initialOptions = [...(_b2 = splitString(props2.options).filter((f4) => f4).map((t4) => ({ name: t4, value: t4 }))) != null ? _b2 : [], ...initialValue.map((f4) => ({ name: f4, value: f4 }))].filter(onlyUniqueProp("value")); - const [options, setOptions] = p2(initialOptions); - const [value, setValue] = p2(initialValue); - const [saveState, setSaveState] = p2(false); - h2(() => { - var _a3; - setValue((props2.multi ? (_a3 = splitString(props2.initialValue)) != null ? _a3 : [] : [props2.initialValue]).filter((f4) => f4)); - }, [props2.initialValue]); - const removeValue = (v3) => { - const newValues = value.filter((f4) => f4 != v3); - setValue(newValues); - props2.saveOptions(options.map((f4) => f4.value).join(","), newValues.join(",")); - }; - const saveOptions = (_options, _value) => { - if (!props2.multi) { - setOptions(_options.filter((f4) => f4.length > 0).map((t4) => ({ name: t4, value: t4 }))); - setValue(_value); - } else { - setOptions(_options.map((t4) => ({ name: t4, value: t4 }))); - setValue(_value); - } - }; - h2(() => { - if (saveState) { - props2.saveOptions(options.filter((f4) => f4.value.length > 0).map((f4) => f4.value).join(","), value.join(",")); - props2.setEditMode(null); - setSaveState(false); - } - }, [saveState]); - const menuProps = () => ({ - multi: props2.multi, - editable: true, - value, - options: !props2.multi ? [{ name: "None", value: "" }, ...options] : options, - saveOptions, - placeholder: "Select Option", - searchable: true, - showAll: true, - onHide: () => { - setSaveState(true); - } - }); - return /* @__PURE__ */ bn.createElement(OptionCellBase, { - value, - menuProps, - multi: props2.multi, - editMode: props2.editMode, - removeValue - }); -}; -var OptionCellBase = (props2) => { - const { value, menuProps, removeValue, getLabelString, openItem, valueClass } = props2; - const menuRef = _2(null); - h2(() => { - if (props2.editMode == 2) { - if (!menuRef.current) - showMenu(); - } - }, [props2.editMode]); - const ref = _2(null); - const showMenu = () => { - const offset = ref.current.getBoundingClientRect(); - menuRef.current = showSelectMenu({ x: offset.left - 4, y: offset.bottom - 4 }, menuProps()); - }; - const editable = props2.editMode > 0; - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-option", - ref - }, value.length > 0 ? value.map((o3) => /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-option-item" - }, (getLabelString ? getLabelString(o3).length > 0 : o3.length > 0) ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: valueClass && valueClass(o3), - onClick: () => openItem && openItem(o3) - }, getLabelString ? getLabelString(o3) : o3), editable && props2.multi ? /* @__PURE__ */ bn.createElement("div", { - className: "mk-icon-xsmall", - onClick: () => removeValue(o3), - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } - }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)) : /* @__PURE__ */ bn.createElement("div", null, "Select"), editable && !props2.multi && value.length > 0 ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("span", null), /* @__PURE__ */ bn.createElement("div", { - onClick: (e4) => editable && !props2.multi && showMenu(), - className: "mk-cell-option-select mk-icon-xxsmall mk-icon-rotated", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse-sm"] } })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null))) : editable && !props2.multi ? /* @__PURE__ */ bn.createElement("div", { className: "mk-cell-option-item" }, /* @__PURE__ */ bn.createElement("div", { @@ -27975,7 +24599,10 @@ var ContextCell = (props2) => { label: fileNameToString(folderPathToString(f4)) })); const ref = _2(null); - const options = (_c2 = (_b2 = props2.contextTable) == null ? void 0 : _b2.rows.map((f4) => ({ name: fileNameToString(folderPathToString(f4["File"])), value: f4["File"] }))) != null ? _c2 : []; + const options = (_c2 = (_b2 = props2.contextTable) == null ? void 0 : _b2.rows.map((f4) => ({ + name: fileNameToString(folderPathToString(f4["File"])), + value: f4["File"] + }))) != null ? _c2 : []; const [value, setValue] = p2(initialValue); const removeValue = (v3) => { const newValues = value.filter((f4) => f4.path != v3.path); @@ -27984,24 +24611,33 @@ var ContextCell = (props2) => { }; h2(() => { var _a3; - setValue((props2.multi ? (_a3 = splitString(props2.initialValue)) != null ? _a3 : [] : [props2.initialValue]).filter((f4) => (f4 == null ? void 0 : f4.length) > 0).map((f4) => ({ - path: f4, - label: fileNameToString(folderPathToString(f4)) - }))); + setValue( + (props2.multi ? (_a3 = splitString(props2.initialValue)) != null ? _a3 : [] : [props2.initialValue]).filter((f4) => (f4 == null ? void 0 : f4.length) > 0).map((f4) => ({ + path: f4, + label: fileNameToString(folderPathToString(f4)) + })) + ); }, [props2.initialValue]); const saveOptions = (_options, _value) => { insertContextItems(props2.plugin, _options, props2.contextTag); if (!props2.multi) { - setValue(_value.map((f4) => ({ - path: f4, - label: fileNameToString(folderPathToString(f4)) - }))); + setValue( + _value.map((f4) => ({ + path: f4, + label: fileNameToString(folderPathToString(f4)) + })) + ); props2.saveValue(_value.join(",")); } else { const newValue = _value[0]; if (newValue) { const newValues = uniq([...value.map((f4) => f4.path), newValue]); - setValue(newValues.map((f4) => ({ label: fileNameToString(folderPathToString(f4)), path: f4 }))); + setValue( + newValues.map((f4) => ({ + label: fileNameToString(folderPathToString(f4)), + path: f4 + })) + ); props2.saveValue(newValues.join(",")); } } @@ -28009,7 +24645,7 @@ var ContextCell = (props2) => { const openLink = async (o3) => { const file = getAbstractFileAtPath(app, o3.path); if (file) { - openAFile(file, app, false); + openAFile(file, props2.plugin, false); } }; const menuProps = () => { @@ -28037,3233 +24673,65 @@ var ContextCell = (props2) => { }); }; -// node_modules/@tanstack/table-core/build/lib/index.mjs -function functionalUpdate(updater, input) { - return typeof updater === "function" ? updater(input) : updater; -} -function makeStateUpdater(key2, instance) { - return (updater) => { - instance.setState((old) => { - return { - ...old, - [key2]: functionalUpdate(updater, old[key2]) - }; - }); - }; -} -function isFunction(d5) { - return d5 instanceof Function; -} -function flattenBy(arr, getChildren) { - const flat = []; - const recurse = (subArr) => { - subArr.forEach((item) => { - flat.push(item); - const children = getChildren(item); - if (children == null ? void 0 : children.length) { - recurse(children); - } - }); +// src/components/ContextView/DataTypeView/DateCell.tsx +var DateCell = (props2) => { + const [value, setValue] = p2(props2.initialValue); + h2(() => { + setValue(props2.initialValue); + }, [props2.initialValue]); + const date = F(() => { + const dateTime = Date.parse(value); + return dateTime > 0 ? new Date(dateTime + new Date().getTimezoneOffset() * 60 * 1e3) : null; + }, [value]); + const saveValue = (date2) => { + const newValue = format(date2, "yyyy-MM-dd"); + props2.saveValue(newValue); + setValue(newValue); + props2.setEditMode(null); }; - recurse(arr); - return flat; -} -function memo(getDeps, fn2, opts) { - let deps = []; - let result; - return () => { - var _a2; - let depTime; - if (opts.key && opts.debug) - depTime = Date.now(); - const newDeps = getDeps(); - const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep); - if (!depsChanged) { - return result; - } - deps = newDeps; - let resultTime; - if (opts.key && opts.debug) - resultTime = Date.now(); - result = fn2(...newDeps); - (_a2 = opts == null ? void 0 : opts.onChange) == null ? void 0 : _a2.call(opts, result); - if (opts.key && opts.debug) { - if (opts == null ? void 0 : opts.debug()) { - const depEndTime = Math.round((Date.now() - depTime) * 100) / 100; - const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100; - const resultFpsPercentage = resultEndTime / 16; - const pad = (str, num) => { - str = String(str); - while (str.length < num) { - str = " " + str; - } - return str; - }; - console.info(`%c\u23F1 ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, ` - font-size: .6rem; - font-weight: bold; - color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key); + const menuRef = _2(null); + const ref = _2(null); + h2(() => { + if (props2.editMode == 2 /* EditModeActive */) { + if (ref.current) { + showPicker(); + ref.current.focus(); } } - return result; - }; -} -function createColumn(table, columnDef, depth, parent) { - var _ref, _resolvedColumnDef$id; - const defaultColumn = table._getDefaultColumnDef(); - const resolvedColumnDef = { - ...defaultColumn, - ...columnDef + }, [props2.editMode]); + const showPicker = (e4) => { + const offset = e4 ? e4.target.getBoundingClientRect() : ref.current.getBoundingClientRect(); + menuRef.current = showDatePickerMenu( + { x: offset.left - 4, y: offset.bottom - 4 }, + date, + saveValue + ); }; - const accessorKey = resolvedColumnDef.accessorKey; - let id2 = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? accessorKey.replace(".", "_") : void 0) != null ? _ref : typeof resolvedColumnDef.header === "string" ? resolvedColumnDef.header : void 0; - let accessorFn; - if (resolvedColumnDef.accessorFn) { - accessorFn = resolvedColumnDef.accessorFn; - } else if (accessorKey) { - if (accessorKey.includes(".")) { - accessorFn = (originalRow) => { - let result = originalRow; - for (const key2 of accessorKey.split(".")) { - result = result[key2]; - if (result === void 0) { - throw new Error(`"${key2}" in deeply nested key "${accessorKey}" returned undefined.`); - } - } - return result; - }; - } else { - accessorFn = (originalRow) => originalRow[resolvedColumnDef.accessorKey]; - } - } - if (!id2) { - if (true) { - throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`); + const onKeyDown = (e4) => { + e4.stopPropagation(); + if (e4.key == "Enter" || e4.key == "Escape") { + e4.target.blur(); + saveValue(date); + menuRef.current.hide(); } - throw new Error(); - } - let column = { - id: `${String(id2)}`, - accessorFn, - parent, - depth, - columnDef: resolvedColumnDef, - columns: [], - getFlatColumns: memo(() => [true], () => { - var _a2; - return [column, ...(_a2 = column.columns) == null ? void 0 : _a2.flatMap((d5) => d5.getFlatColumns())]; - }, { - key: false, - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugColumns; - } - }), - getLeafColumns: memo(() => [table._getOrderColumnsFn()], (orderColumns2) => { - var _a2; - if ((_a2 = column.columns) == null ? void 0 : _a2.length) { - let leafColumns = column.columns.flatMap((column2) => column2.getLeafColumns()); - return orderColumns2(leafColumns); - } - return [column]; - }, { - key: false, - debug: () => { - var _table$options$debugA2; - return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugColumns; - } - }) - }; - column = table._features.reduce((obj, feature) => { - var _a2; - return Object.assign(obj, (_a2 = feature.createColumn) == null ? void 0 : _a2.call(feature, column, table)); - }, column); - return column; -} -function createHeader(table, column, options) { - var _options$id; - const id2 = (_options$id = options.id) != null ? _options$id : column.id; - let header = { - id: id2, - column, - index: options.index, - isPlaceholder: !!options.isPlaceholder, - placeholderId: options.placeholderId, - depth: options.depth, - subHeaders: [], - colSpan: 0, - rowSpan: 0, - headerGroup: null, - getLeafHeaders: () => { - const leafHeaders = []; - const recurseHeader = (h5) => { - if (h5.subHeaders && h5.subHeaders.length) { - h5.subHeaders.map(recurseHeader); - } - leafHeaders.push(h5); - }; - recurseHeader(header); - return leafHeaders; - }, - getContext: () => ({ - table, - header, - column - }) }; - table._features.forEach((feature) => { - var _a2; - Object.assign(header, (_a2 = feature.createHeader) == null ? void 0 : _a2.call(feature, header, table)); - }); - return header; -} -var Headers = { - createTable: (table) => { - return { - getHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => { - var _left$map$filter, _right$map$filter; - const leftColumns = (_left$map$filter = left == null ? void 0 : left.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _left$map$filter : []; - const rightColumns = (_right$map$filter = right == null ? void 0 : right.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _right$map$filter : []; - const centerColumns = leafColumns.filter((column) => !(left == null ? void 0 : left.includes(column.id)) && !(right == null ? void 0 : right.includes(column.id))); - const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table); - return headerGroups; - }, { - key: "getHeaderGroups", - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugHeaders; - } - }), - getCenterHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => { - leafColumns = leafColumns.filter((column) => !(left == null ? void 0 : left.includes(column.id)) && !(right == null ? void 0 : right.includes(column.id))); - return buildHeaderGroups(allColumns, leafColumns, table, "center"); - }, { - key: "getCenterHeaderGroups", - debug: () => { - var _table$options$debugA2; - return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugHeaders; - } - }), - getLeftHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => { - var _left$map$filter2; - const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : []; - return buildHeaderGroups(allColumns, orderedLeafColumns, table, "left"); - }, { - key: "getLeftHeaderGroups", - debug: () => { - var _table$options$debugA3; - return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugHeaders; - } - }), - getRightHeaderGroups: memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => { - var _right$map$filter2; - const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map((columnId) => leafColumns.find((d5) => d5.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : []; - return buildHeaderGroups(allColumns, orderedLeafColumns, table, "right"); - }, { - key: "getRightHeaderGroups", - debug: () => { - var _table$options$debugA4; - return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugHeaders; - } - }), - getFooterGroups: memo(() => [table.getHeaderGroups()], (headerGroups) => { - return [...headerGroups].reverse(); - }, { - key: "getFooterGroups", - debug: () => { - var _table$options$debugA5; - return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugHeaders; - } - }), - getLeftFooterGroups: memo(() => [table.getLeftHeaderGroups()], (headerGroups) => { - return [...headerGroups].reverse(); - }, { - key: "getLeftFooterGroups", - debug: () => { - var _table$options$debugA6; - return (_table$options$debugA6 = table.options.debugAll) != null ? _table$options$debugA6 : table.options.debugHeaders; - } - }), - getCenterFooterGroups: memo(() => [table.getCenterHeaderGroups()], (headerGroups) => { - return [...headerGroups].reverse(); - }, { - key: "getCenterFooterGroups", - debug: () => { - var _table$options$debugA7; - return (_table$options$debugA7 = table.options.debugAll) != null ? _table$options$debugA7 : table.options.debugHeaders; - } - }), - getRightFooterGroups: memo(() => [table.getRightHeaderGroups()], (headerGroups) => { - return [...headerGroups].reverse(); - }, { - key: "getRightFooterGroups", - debug: () => { - var _table$options$debugA8; - return (_table$options$debugA8 = table.options.debugAll) != null ? _table$options$debugA8 : table.options.debugHeaders; - } - }), - getFlatHeaders: memo(() => [table.getHeaderGroups()], (headerGroups) => { - return headerGroups.map((headerGroup) => { - return headerGroup.headers; - }).flat(); - }, { - key: "getFlatHeaders", - debug: () => { - var _table$options$debugA9; - return (_table$options$debugA9 = table.options.debugAll) != null ? _table$options$debugA9 : table.options.debugHeaders; - } - }), - getLeftFlatHeaders: memo(() => [table.getLeftHeaderGroups()], (left) => { - return left.map((headerGroup) => { - return headerGroup.headers; - }).flat(); - }, { - key: "getLeftFlatHeaders", - debug: () => { - var _table$options$debugA10; - return (_table$options$debugA10 = table.options.debugAll) != null ? _table$options$debugA10 : table.options.debugHeaders; - } - }), - getCenterFlatHeaders: memo(() => [table.getCenterHeaderGroups()], (left) => { - return left.map((headerGroup) => { - return headerGroup.headers; - }).flat(); - }, { - key: "getCenterFlatHeaders", - debug: () => { - var _table$options$debugA11; - return (_table$options$debugA11 = table.options.debugAll) != null ? _table$options$debugA11 : table.options.debugHeaders; - } - }), - getRightFlatHeaders: memo(() => [table.getRightHeaderGroups()], (left) => { - return left.map((headerGroup) => { - return headerGroup.headers; - }).flat(); - }, { - key: "getRightFlatHeaders", - debug: () => { - var _table$options$debugA12; - return (_table$options$debugA12 = table.options.debugAll) != null ? _table$options$debugA12 : table.options.debugHeaders; - } - }), - getCenterLeafHeaders: memo(() => [table.getCenterFlatHeaders()], (flatHeaders) => { - return flatHeaders.filter((header) => { - var _a2; - return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); - }); - }, { - key: "getCenterLeafHeaders", - debug: () => { - var _table$options$debugA13; - return (_table$options$debugA13 = table.options.debugAll) != null ? _table$options$debugA13 : table.options.debugHeaders; - } - }), - getLeftLeafHeaders: memo(() => [table.getLeftFlatHeaders()], (flatHeaders) => { - return flatHeaders.filter((header) => { - var _a2; - return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); - }); - }, { - key: "getLeftLeafHeaders", - debug: () => { - var _table$options$debugA14; - return (_table$options$debugA14 = table.options.debugAll) != null ? _table$options$debugA14 : table.options.debugHeaders; - } - }), - getRightLeafHeaders: memo(() => [table.getRightFlatHeaders()], (flatHeaders) => { - return flatHeaders.filter((header) => { - var _a2; - return !((_a2 = header.subHeaders) == null ? void 0 : _a2.length); - }); - }, { - key: "getRightLeafHeaders", - debug: () => { - var _table$options$debugA15; - return (_table$options$debugA15 = table.options.debugAll) != null ? _table$options$debugA15 : table.options.debugHeaders; - } - }), - getLeafHeaders: memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => { - var _a2, _b2, _c2; - var _left$0$headers, _center$0$headers, _right$0$headers; - return [...(_left$0$headers = (_a2 = left[0]) == null ? void 0 : _a2.headers) != null ? _left$0$headers : [], ...(_center$0$headers = (_b2 = center[0]) == null ? void 0 : _b2.headers) != null ? _center$0$headers : [], ...(_right$0$headers = (_c2 = right[0]) == null ? void 0 : _c2.headers) != null ? _right$0$headers : []].map((header) => { - return header.getLeafHeaders(); - }).flat(); - }, { - key: "getLeafHeaders", - debug: () => { - var _table$options$debugA16; - return (_table$options$debugA16 = table.options.debugAll) != null ? _table$options$debugA16 : table.options.debugHeaders; - } - }) - }; - } -}; -function buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) { - var _a2; - var _headerGroups$0$heade; - let maxDepth = 0; - const findMaxDepth = function(columns, depth) { - if (depth === void 0) { - depth = 1; - } - maxDepth = Math.max(maxDepth, depth); - columns.filter((column) => column.getIsVisible()).forEach((column) => { - var _a3; - if ((_a3 = column.columns) == null ? void 0 : _a3.length) { - findMaxDepth(column.columns, depth + 1); - } - }, 0); - }; - findMaxDepth(allColumns); - let headerGroups = []; - const createHeaderGroup = (headersToGroup, depth) => { - const headerGroup = { - depth, - id: [headerFamily, `${depth}`].filter(Boolean).join("_"), - headers: [] - }; - const pendingParentHeaders = []; - headersToGroup.forEach((headerToGroup) => { - const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]; - const isLeafHeader = headerToGroup.column.depth === headerGroup.depth; - let column; - let isPlaceholder = false; - if (isLeafHeader && headerToGroup.column.parent) { - column = headerToGroup.column.parent; - } else { - column = headerToGroup.column; - isPlaceholder = true; - } - if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) { - latestPendingParentHeader.subHeaders.push(headerToGroup); - } else { - const header = createHeader(table, column, { - id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join("_"), - isPlaceholder, - placeholderId: isPlaceholder ? `${pendingParentHeaders.filter((d5) => d5.column === column).length}` : void 0, - depth, - index: pendingParentHeaders.length - }); - header.subHeaders.push(headerToGroup); - pendingParentHeaders.push(header); - } - headerGroup.headers.push(headerToGroup); - headerToGroup.headerGroup = headerGroup; - }); - headerGroups.push(headerGroup); - if (depth > 0) { - createHeaderGroup(pendingParentHeaders, depth - 1); - } - }; - const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, { - depth: maxDepth, - index - })); - createHeaderGroup(bottomHeaders, maxDepth - 1); - headerGroups.reverse(); - const recurseHeadersForSpans = (headers) => { - const filteredHeaders = headers.filter((header) => header.column.getIsVisible()); - return filteredHeaders.map((header) => { - let colSpan = 0; - let rowSpan = 0; - let childRowSpans = [0]; - if (header.subHeaders && header.subHeaders.length) { - childRowSpans = []; - recurseHeadersForSpans(header.subHeaders).forEach((_ref) => { - let { - colSpan: childColSpan, - rowSpan: childRowSpan - } = _ref; - colSpan += childColSpan; - childRowSpans.push(childRowSpan); - }); - } else { - colSpan = 1; - } - const minChildRowSpan = Math.min(...childRowSpans); - rowSpan = rowSpan + minChildRowSpan; - header.colSpan = colSpan; - header.rowSpan = rowSpan; - return { - colSpan, - rowSpan - }; - }); - }; - recurseHeadersForSpans((_headerGroups$0$heade = (_a2 = headerGroups[0]) == null ? void 0 : _a2.headers) != null ? _headerGroups$0$heade : []); - return headerGroups; -} -var defaultColumnSizing = { - size: 150, - minSize: 20, - maxSize: Number.MAX_SAFE_INTEGER + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-date", + onClick: (e4) => !value && showPicker(e4) + }, props2.editMode == 2 ? /* @__PURE__ */ bn.createElement("input", { + onClick: (e4) => e4.stopPropagation(), + className: "mk-cell-text", + ref, + type: "text", + value, + onChange: (e4) => setValue(e4.target.value), + onMouseDown: () => showPicker(), + onKeyDown + }) : /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-date-value", + onClick: (e4) => showPicker(e4) + }, date ? format(date, "MMM dd") : value)); }; -var getDefaultColumnSizingInfoState = () => ({ - startOffset: null, - startSize: null, - deltaOffset: null, - deltaPercentage: null, - isResizingColumn: false, - columnSizingStart: [] -}); -var ColumnSizing = { - getDefaultColumnDef: () => { - return defaultColumnSizing; - }, - getInitialState: (state) => { - return { - columnSizing: {}, - columnSizingInfo: getDefaultColumnSizingInfoState(), - ...state - }; - }, - getDefaultOptions: (table) => { - return { - columnResizeMode: "onEnd", - onColumnSizingChange: makeStateUpdater("columnSizing", table), - onColumnSizingInfoChange: makeStateUpdater("columnSizingInfo", table) - }; - }, - createColumn: (column, table) => { - return { - getSize: () => { - var _column$columnDef$min, _ref, _column$columnDef$max; - const columnSize = table.getState().columnSizing[column.id]; - return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize); - }, - getStart: (position) => { - const columns = !position ? table.getVisibleLeafColumns() : position === "left" ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns(); - const index = columns.findIndex((d5) => d5.id === column.id); - if (index > 0) { - const prevSiblingColumn = columns[index - 1]; - return prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize(); - } - return 0; - }, - resetSize: () => { - table.setColumnSizing((_ref2) => { - let { - [column.id]: _5, - ...rest - } = _ref2; - return rest; - }); - }, - getCanResize: () => { - var _column$columnDef$ena, _table$options$enable; - return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true); - }, - getIsResizing: () => { - return table.getState().columnSizingInfo.isResizingColumn === column.id; - } - }; - }, - createHeader: (header, table) => { - return { - getSize: () => { - let sum2 = 0; - const recurse = (header2) => { - if (header2.subHeaders.length) { - header2.subHeaders.forEach(recurse); - } else { - var _header$column$getSiz; - sum2 += (_header$column$getSiz = header2.column.getSize()) != null ? _header$column$getSiz : 0; - } - }; - recurse(header); - return sum2; - }, - getStart: () => { - if (header.index > 0) { - const prevSiblingHeader = header.headerGroup.headers[header.index - 1]; - return prevSiblingHeader.getStart() + prevSiblingHeader.getSize(); - } - return 0; - }, - getResizeHandler: () => { - const column = table.getColumn(header.column.id); - const canResize = column.getCanResize(); - return (e4) => { - var _a2; - if (!canResize) { - return; - } - (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); - if (isTouchStartEvent(e4)) { - if (e4.touches && e4.touches.length > 1) { - return; - } - } - const startSize = header.getSize(); - const columnSizingStart = header ? header.getLeafHeaders().map((d5) => [d5.column.id, d5.column.getSize()]) : [[column.id, column.getSize()]]; - const clientX = isTouchStartEvent(e4) ? Math.round(e4.touches[0].clientX) : e4.clientX; - const newColumnSizing = {}; - const updateOffset = (eventType, clientXPos) => { - if (typeof clientXPos !== "number") { - return; - } - table.setColumnSizingInfo((old) => { - var _old$startOffset, _old$startSize; - const deltaOffset = clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0); - const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999); - old.columnSizingStart.forEach((_ref3) => { - let [columnId, headerSize] = _ref3; - newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100; - }); - return { - ...old, - deltaOffset, - deltaPercentage - }; - }); - if (table.options.columnResizeMode === "onChange" || eventType === "end") { - table.setColumnSizing((old) => ({ - ...old, - ...newColumnSizing - })); - } - }; - const onMove = (clientXPos) => updateOffset("move", clientXPos); - const onEnd = (clientXPos) => { - updateOffset("end", clientXPos); - table.setColumnSizingInfo((old) => ({ - ...old, - isResizingColumn: false, - startOffset: null, - startSize: null, - deltaOffset: null, - deltaPercentage: null, - columnSizingStart: [] - })); - }; - const mouseEvents = { - moveHandler: (e5) => onMove(e5.clientX), - upHandler: (e5) => { - document.removeEventListener("mousemove", mouseEvents.moveHandler); - document.removeEventListener("mouseup", mouseEvents.upHandler); - onEnd(e5.clientX); - } - }; - const touchEvents = { - moveHandler: (e5) => { - if (e5.cancelable) { - e5.preventDefault(); - e5.stopPropagation(); - } - onMove(e5.touches[0].clientX); - return false; - }, - upHandler: (e5) => { - var _a3; - document.removeEventListener("touchmove", touchEvents.moveHandler); - document.removeEventListener("touchend", touchEvents.upHandler); - if (e5.cancelable) { - e5.preventDefault(); - e5.stopPropagation(); - } - onEnd((_a3 = e5.touches[0]) == null ? void 0 : _a3.clientX); - } - }; - const passiveIfSupported = passiveEventSupported() ? { - passive: false - } : false; - if (isTouchStartEvent(e4)) { - document.addEventListener("touchmove", touchEvents.moveHandler, passiveIfSupported); - document.addEventListener("touchend", touchEvents.upHandler, passiveIfSupported); - } else { - document.addEventListener("mousemove", mouseEvents.moveHandler, passiveIfSupported); - document.addEventListener("mouseup", mouseEvents.upHandler, passiveIfSupported); - } - table.setColumnSizingInfo((old) => ({ - ...old, - startOffset: clientX, - startSize, - deltaOffset: 0, - deltaPercentage: 0, - columnSizingStart, - isResizingColumn: column.id - })); - }; - } - }; - }, - createTable: (table) => { - return { - setColumnSizing: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onColumnSizingChange) == null ? void 0 : _b2.call(_a2, updater); - }, - setColumnSizingInfo: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onColumnSizingInfoChange) == null ? void 0 : _b2.call(_a2, updater); - }, - resetColumnSizing: (defaultState) => { - var _table$initialState$c; - table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {}); - }, - resetHeaderSizeInfo: (defaultState) => { - var _table$initialState$c2; - table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState()); - }, - getTotalSize: () => { - var _a2; - var _table$getHeaderGroup; - return (_table$getHeaderGroup = (_a2 = table.getHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { - return sum2 + header.getSize(); - }, 0)) != null ? _table$getHeaderGroup : 0; - }, - getLeftTotalSize: () => { - var _a2; - var _table$getLeftHeaderG; - return (_table$getLeftHeaderG = (_a2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { - return sum2 + header.getSize(); - }, 0)) != null ? _table$getLeftHeaderG : 0; - }, - getCenterTotalSize: () => { - var _a2; - var _table$getCenterHeade; - return (_table$getCenterHeade = (_a2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { - return sum2 + header.getSize(); - }, 0)) != null ? _table$getCenterHeade : 0; - }, - getRightTotalSize: () => { - var _a2; - var _table$getRightHeader; - return (_table$getRightHeader = (_a2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _a2.headers.reduce((sum2, header) => { - return sum2 + header.getSize(); - }, 0)) != null ? _table$getRightHeader : 0; - } - }; - } -}; -var passiveSupported = null; -function passiveEventSupported() { - if (typeof passiveSupported === "boolean") - return passiveSupported; - let supported = false; - try { - const options = { - get passive() { - supported = true; - return false; - } - }; - const noop2 = () => { - }; - window.addEventListener("test", noop2, options); - window.removeEventListener("test", noop2); - } catch (err) { - supported = false; - } - passiveSupported = supported; - return passiveSupported; -} -function isTouchStartEvent(e4) { - return e4.type === "touchstart"; -} -var Expanding = { - getInitialState: (state) => { - return { - expanded: {}, - ...state - }; - }, - getDefaultOptions: (table) => { - return { - onExpandedChange: makeStateUpdater("expanded", table), - paginateExpandedRows: true - }; - }, - createTable: (table) => { - let registered = false; - let queued = false; - return { - _autoResetExpanded: () => { - var _ref, _table$options$autoRe; - if (!registered) { - table._queue(() => { - registered = true; - }); - return; - } - if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) { - if (queued) - return; - queued = true; - table._queue(() => { - table.resetExpanded(); - queued = false; - }); - } - }, - setExpanded: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onExpandedChange) == null ? void 0 : _b2.call(_a2, updater); - }, - toggleAllRowsExpanded: (expanded) => { - if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) { - table.setExpanded(true); - } else { - table.setExpanded({}); - } - }, - resetExpanded: (defaultState) => { - var _a2; - var _table$initialState$e; - table.setExpanded(defaultState ? {} : (_table$initialState$e = (_a2 = table.initialState) == null ? void 0 : _a2.expanded) != null ? _table$initialState$e : {}); - }, - getCanSomeRowsExpand: () => { - return table.getRowModel().flatRows.some((row) => row.getCanExpand()); - }, - getToggleAllRowsExpandedHandler: () => { - return (e4) => { - var _a2; - (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); - table.toggleAllRowsExpanded(); - }; - }, - getIsSomeRowsExpanded: () => { - const expanded = table.getState().expanded; - return expanded === true || Object.values(expanded).some(Boolean); - }, - getIsAllRowsExpanded: () => { - const expanded = table.getState().expanded; - if (typeof expanded === "boolean") { - return expanded === true; - } - if (!Object.keys(expanded).length) { - return false; - } - if (table.getRowModel().flatRows.some((row) => !row.getIsExpanded())) { - return false; - } - return true; - }, - getExpandedDepth: () => { - let maxDepth = 0; - const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded); - rowIds.forEach((id2) => { - const splitId = id2.split("."); - maxDepth = Math.max(maxDepth, splitId.length); - }); - return maxDepth; - }, - getPreExpandedRowModel: () => table.getSortedRowModel(), - getExpandedRowModel: () => { - if (!table._getExpandedRowModel && table.options.getExpandedRowModel) { - table._getExpandedRowModel = table.options.getExpandedRowModel(table); - } - if (table.options.manualExpanding || !table._getExpandedRowModel) { - return table.getPreExpandedRowModel(); - } - return table._getExpandedRowModel(); - } - }; - }, - createRow: (row, table) => { - return { - toggleExpanded: (expanded) => { - table.setExpanded((old) => { - var _expanded; - const exists = old === true ? true : !!(old == null ? void 0 : old[row.id]); - let oldExpanded = {}; - if (old === true) { - Object.keys(table.getRowModel().rowsById).forEach((rowId) => { - oldExpanded[rowId] = true; - }); - } else { - oldExpanded = old; - } - expanded = (_expanded = expanded) != null ? _expanded : !exists; - if (!exists && expanded) { - return { - ...oldExpanded, - [row.id]: true - }; - } - if (exists && !expanded) { - const { - [row.id]: _5, - ...rest - } = oldExpanded; - return rest; - } - return old; - }); - }, - getIsExpanded: () => { - var _a2, _b2; - var _table$options$getIsR; - const expanded = table.getState().expanded; - return !!((_table$options$getIsR = (_b2 = (_a2 = table.options).getIsRowExpanded) == null ? void 0 : _b2.call(_a2, row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id])); - }, - getCanExpand: () => { - var _a2, _b2, _c2; - var _table$options$getRow, _table$options$enable; - return (_table$options$getRow = (_b2 = (_a2 = table.options).getRowCanExpand) == null ? void 0 : _b2.call(_a2, row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_c2 = row.subRows) == null ? void 0 : _c2.length); - }, - getToggleExpandedHandler: () => { - const canExpand = row.getCanExpand(); - return () => { - if (!canExpand) - return; - row.toggleExpanded(); - }; - } - }; - } -}; -var includesString = (row, columnId, filterValue) => { - var _a2; - const search = filterValue.toLowerCase(); - return Boolean((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.toLowerCase().includes(search)); -}; -includesString.autoRemove = (val) => testFalsey(val); -var includesStringSensitive = (row, columnId, filterValue) => { - var _a2; - return Boolean((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(filterValue)); -}; -includesStringSensitive.autoRemove = (val) => testFalsey(val); -var equalsString = (row, columnId, filterValue) => { - var _a2; - return ((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.toLowerCase()) === filterValue.toLowerCase(); -}; -equalsString.autoRemove = (val) => testFalsey(val); -var arrIncludes = (row, columnId, filterValue) => { - var _a2; - return (_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(filterValue); -}; -arrIncludes.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); -var arrIncludesAll = (row, columnId, filterValue) => { - return !filterValue.some((val) => { - var _a2; - return !((_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(val)); - }); -}; -arrIncludesAll.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); -var arrIncludesSome = (row, columnId, filterValue) => { - return filterValue.some((val) => { - var _a2; - return (_a2 = row.getValue(columnId)) == null ? void 0 : _a2.includes(val); - }); -}; -arrIncludesSome.autoRemove = (val) => testFalsey(val) || !(val == null ? void 0 : val.length); -var equals = (row, columnId, filterValue) => { - return row.getValue(columnId) === filterValue; -}; -equals.autoRemove = (val) => testFalsey(val); -var weakEquals = (row, columnId, filterValue) => { - return row.getValue(columnId) == filterValue; -}; -weakEquals.autoRemove = (val) => testFalsey(val); -var inNumberRange = (row, columnId, filterValue) => { - let [min3, max3] = filterValue; - const rowValue = row.getValue(columnId); - return rowValue >= min3 && rowValue <= max3; -}; -inNumberRange.resolveFilterValue = (val) => { - let [unsafeMin, unsafeMax] = val; - let parsedMin = typeof unsafeMin !== "number" ? parseFloat(unsafeMin) : unsafeMin; - let parsedMax = typeof unsafeMax !== "number" ? parseFloat(unsafeMax) : unsafeMax; - let min3 = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin; - let max3 = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax; - if (min3 > max3) { - const temp = min3; - min3 = max3; - max3 = temp; - } - return [min3, max3]; -}; -inNumberRange.autoRemove = (val) => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]); -var filterFns = { - includesString, - includesStringSensitive, - equalsString, - arrIncludes, - arrIncludesAll, - arrIncludesSome, - equals, - weakEquals, - inNumberRange -}; -function testFalsey(val) { - return val === void 0 || val === null || val === ""; -} -var Filters = { - getDefaultColumnDef: () => { - return { - filterFn: "auto" - }; - }, - getInitialState: (state) => { - return { - columnFilters: [], - globalFilter: void 0, - ...state - }; - }, - getDefaultOptions: (table) => { - return { - onColumnFiltersChange: makeStateUpdater("columnFilters", table), - onGlobalFilterChange: makeStateUpdater("globalFilter", table), - filterFromLeafRows: false, - maxLeafRowFilterDepth: 100, - globalFilterFn: "auto", - getColumnCanGlobalFilter: (column) => { - var _a2, _b2; - const value = (_b2 = (_a2 = table.getCoreRowModel().flatRows[0]) == null ? void 0 : _a2._getAllCellsByColumnId()[column.id]) == null ? void 0 : _b2.getValue(); - return typeof value === "string" || typeof value === "number"; - } - }; - }, - createColumn: (column, table) => { - return { - getAutoFilterFn: () => { - const firstRow = table.getCoreRowModel().flatRows[0]; - const value = firstRow == null ? void 0 : firstRow.getValue(column.id); - if (typeof value === "string") { - return filterFns.includesString; - } - if (typeof value === "number") { - return filterFns.inNumberRange; - } - if (typeof value === "boolean") { - return filterFns.equals; - } - if (value !== null && typeof value === "object") { - return filterFns.equals; - } - if (Array.isArray(value)) { - return filterFns.arrIncludes; - } - return filterFns.weakEquals; - }, - getFilterFn: () => { - var _a2; - var _table$options$filter; - return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === "auto" ? column.getAutoFilterFn() : (_table$options$filter = (_a2 = table.options.filterFns) == null ? void 0 : _a2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn]; - }, - getCanFilter: () => { - var _column$columnDef$ena, _table$options$enable, _table$options$enable2; - return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn; - }, - getCanGlobalFilter: () => { - var _a2, _b2; - var _column$columnDef$ena2, _table$options$enable3, _table$options$enable4, _table$options$getCol; - return ((_column$columnDef$ena2 = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena2 : true) && ((_table$options$enable3 = table.options.enableGlobalFilter) != null ? _table$options$enable3 : true) && ((_table$options$enable4 = table.options.enableFilters) != null ? _table$options$enable4 : true) && ((_table$options$getCol = (_b2 = (_a2 = table.options).getColumnCanGlobalFilter) == null ? void 0 : _b2.call(_a2, column)) != null ? _table$options$getCol : true) && !!column.accessorFn; - }, - getIsFiltered: () => column.getFilterIndex() > -1, - getFilterValue: () => { - var _a2, _b2; - return (_b2 = (_a2 = table.getState().columnFilters) == null ? void 0 : _a2.find((d5) => d5.id === column.id)) == null ? void 0 : _b2.value; - }, - getFilterIndex: () => { - var _a2; - var _table$getState$colum; - return (_table$getState$colum = (_a2 = table.getState().columnFilters) == null ? void 0 : _a2.findIndex((d5) => d5.id === column.id)) != null ? _table$getState$colum : -1; - }, - setFilterValue: (value) => { - table.setColumnFilters((old) => { - const filterFn = column.getFilterFn(); - const previousfilter = old == null ? void 0 : old.find((d5) => d5.id === column.id); - const newFilter = functionalUpdate(value, previousfilter ? previousfilter.value : void 0); - if (shouldAutoRemoveFilter(filterFn, newFilter, column)) { - var _old$filter; - return (_old$filter = old == null ? void 0 : old.filter((d5) => d5.id !== column.id)) != null ? _old$filter : []; - } - const newFilterObj = { - id: column.id, - value: newFilter - }; - if (previousfilter) { - var _old$map; - return (_old$map = old == null ? void 0 : old.map((d5) => { - if (d5.id === column.id) { - return newFilterObj; - } - return d5; - })) != null ? _old$map : []; - } - if (old == null ? void 0 : old.length) { - return [...old, newFilterObj]; - } - return [newFilterObj]; - }); - }, - _getFacetedRowModel: table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id), - getFacetedRowModel: () => { - if (!column._getFacetedRowModel) { - return table.getPreFilteredRowModel(); - } - return column._getFacetedRowModel(); - }, - _getFacetedUniqueValues: table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id), - getFacetedUniqueValues: () => { - if (!column._getFacetedUniqueValues) { - return /* @__PURE__ */ new Map(); - } - return column._getFacetedUniqueValues(); - }, - _getFacetedMinMaxValues: table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id), - getFacetedMinMaxValues: () => { - if (!column._getFacetedMinMaxValues) { - return void 0; - } - return column._getFacetedMinMaxValues(); - } - }; - }, - createRow: (row, table) => { - return { - columnFilters: {}, - columnFiltersMeta: {} - }; - }, - createTable: (table) => { - return { - getGlobalAutoFilterFn: () => { - return filterFns.includesString; - }, - getGlobalFilterFn: () => { - var _a2; - var _table$options$filter2; - const { - globalFilterFn - } = table.options; - return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === "auto" ? table.getGlobalAutoFilterFn() : (_table$options$filter2 = (_a2 = table.options.filterFns) == null ? void 0 : _a2[globalFilterFn]) != null ? _table$options$filter2 : filterFns[globalFilterFn]; - }, - setColumnFilters: (updater) => { - var _a2, _b2; - const leafColumns = table.getAllLeafColumns(); - const updateFn = (old) => { - var _a3; - return (_a3 = functionalUpdate(updater, old)) == null ? void 0 : _a3.filter((filter) => { - const column = leafColumns.find((d5) => d5.id === filter.id); - if (column) { - const filterFn = column.getFilterFn(); - if (shouldAutoRemoveFilter(filterFn, filter.value, column)) { - return false; - } - } - return true; - }); - }; - (_b2 = (_a2 = table.options).onColumnFiltersChange) == null ? void 0 : _b2.call(_a2, updateFn); - }, - setGlobalFilter: (updater) => { - var _a2, _b2; - (_b2 = (_a2 = table.options).onGlobalFilterChange) == null ? void 0 : _b2.call(_a2, updater); - }, - resetGlobalFilter: (defaultState) => { - table.setGlobalFilter(defaultState ? void 0 : table.initialState.globalFilter); - }, - resetColumnFilters: (defaultState) => { - var _a2; - var _table$initialState$c; - table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_a2 = table.initialState) == null ? void 0 : _a2.columnFilters) != null ? _table$initialState$c : []); - }, - getPreFilteredRowModel: () => table.getCoreRowModel(), - getFilteredRowModel: () => { - if (!table._getFilteredRowModel && table.options.getFilteredRowModel) { - table._getFilteredRowModel = table.options.getFilteredRowModel(table); - } - if (table.options.manualFiltering || !table._getFilteredRowModel) { - return table.getPreFilteredRowModel(); - } - return table._getFilteredRowModel(); - }, - _getGlobalFacetedRowModel: table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, "__global__"), - getGlobalFacetedRowModel: () => { - if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) { - return table.getPreFilteredRowModel(); - } - return table._getGlobalFacetedRowModel(); - }, - _getGlobalFacetedUniqueValues: table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, "__global__"), - getGlobalFacetedUniqueValues: () => { - if (!table._getGlobalFacetedUniqueValues) { - return /* @__PURE__ */ new Map(); - } - return table._getGlobalFacetedUniqueValues(); - }, - _getGlobalFacetedMinMaxValues: table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, "__global__"), - getGlobalFacetedMinMaxValues: () => { - if (!table._getGlobalFacetedMinMaxValues) { - return; - } - return table._getGlobalFacetedMinMaxValues(); - } - }; - } -}; -function shouldAutoRemoveFilter(filterFn, value, column) { - return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === "undefined" || typeof value === "string" && !value; -} -var sum = (columnId, _leafRows, childRows) => { - return childRows.reduce((sum2, next) => { - const nextValue = next.getValue(columnId); - return sum2 + (typeof nextValue === "number" ? nextValue : 0); - }, 0); -}; -var min2 = (columnId, _leafRows, childRows) => { - let min3; - childRows.forEach((row) => { - const value = row.getValue(columnId); - if (value != null && (min3 > value || min3 === void 0 && value >= value)) { - min3 = value; - } - }); - return min3; -}; -var max2 = (columnId, _leafRows, childRows) => { - let max3; - childRows.forEach((row) => { - const value = row.getValue(columnId); - if (value != null && (max3 < value || max3 === void 0 && value >= value)) { - max3 = value; - } - }); - return max3; -}; -var extent = (columnId, _leafRows, childRows) => { - let min3; - let max3; - childRows.forEach((row) => { - const value = row.getValue(columnId); - if (value != null) { - if (min3 === void 0) { - if (value >= value) - min3 = max3 = value; - } else { - if (min3 > value) - min3 = value; - if (max3 < value) - max3 = value; - } - } - }); - return [min3, max3]; -}; -var mean = (columnId, leafRows) => { - let count2 = 0; - let sum2 = 0; - leafRows.forEach((row) => { - let value = row.getValue(columnId); - if (value != null && (value = +value) >= value) { - ++count2, sum2 += value; - } - }); - if (count2) - return sum2 / count2; - return; -}; -var median = (columnId, leafRows) => { - if (!leafRows.length) { - return; - } - let min3 = 0; - let max3 = 0; - leafRows.forEach((row) => { - let value = row.getValue(columnId); - if (typeof value === "number") { - min3 = Math.min(min3, value); - max3 = Math.max(max3, value); - } - }); - return (min3 + max3) / 2; -}; -var unique = (columnId, leafRows) => { - return Array.from(new Set(leafRows.map((d5) => d5.getValue(columnId))).values()); -}; -var uniqueCount = (columnId, leafRows) => { - return new Set(leafRows.map((d5) => d5.getValue(columnId))).size; -}; -var count = (_columnId, leafRows) => { - return leafRows.length; -}; -var aggregationFns = { - sum, - min: min2, - max: max2, - extent, - mean, - median, - unique, - uniqueCount, - count -}; -var Grouping = { - getDefaultColumnDef: () => { - return { - aggregatedCell: (props2) => { - var _a2, _b2; - var _toString; - return (_toString = (_b2 = (_a2 = props2.getValue()) == null ? void 0 : _a2.toString) == null ? void 0 : _b2.call(_a2)) != null ? _toString : null; - }, - aggregationFn: "auto" - }; - }, - getInitialState: (state) => { - return { - grouping: [], - ...state - }; - }, - getDefaultOptions: (table) => { - return { - onGroupingChange: makeStateUpdater("grouping", table), - groupedColumnMode: "reorder" - }; - }, - createColumn: (column, table) => { - return { - toggleGrouping: () => { - table.setGrouping((old) => { - if (old == null ? void 0 : old.includes(column.id)) { - return old.filter((d5) => d5 !== column.id); - } - return [...old != null ? old : [], column.id]; - }); - }, - getCanGroup: () => { - var _ref, _ref2, _ref3, _column$columnDef$ena; - return (_ref = (_ref2 = (_ref3 = (_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) != null ? _ref3 : table.options.enableGrouping) != null ? _ref2 : true) != null ? _ref : !!column.accessorFn; - }, - getIsGrouped: () => { - var _a2; - return (_a2 = table.getState().grouping) == null ? void 0 : _a2.includes(column.id); - }, - getGroupedIndex: () => { - var _a2; - return (_a2 = table.getState().grouping) == null ? void 0 : _a2.indexOf(column.id); - }, - getToggleGroupingHandler: () => { - const canGroup = column.getCanGroup(); - return () => { - if (!canGroup) - return; - column.toggleGrouping(); - }; - }, - getAutoAggregationFn: () => { - const firstRow = table.getCoreRowModel().flatRows[0]; - const value = firstRow == null ? void 0 : firstRow.getValue(column.id); - if (typeof value === "number") { - return aggregationFns.sum; - } - if (Object.prototype.toString.call(value) === "[object Date]") { - return aggregationFns.extent; - } - }, - getAggregationFn: () => { - var _a2; - var _table$options$aggreg; - if (!column) { - throw new Error(); - } - return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === "auto" ? column.getAutoAggregationFn() : (_table$options$aggreg = (_a2 = table.options.aggregationFns) == null ? void 0 : _a2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn]; - } - }; - }, - createTable: (table) => { - return { - setGrouping: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onGroupingChange) == null ? void 0 : _b2.call(_a2, updater); - }, - resetGrouping: (defaultState) => { - var _a2; - var _table$initialState$g; - table.setGrouping(defaultState ? [] : (_table$initialState$g = (_a2 = table.initialState) == null ? void 0 : _a2.grouping) != null ? _table$initialState$g : []); - }, - getPreGroupedRowModel: () => table.getFilteredRowModel(), - getGroupedRowModel: () => { - if (!table._getGroupedRowModel && table.options.getGroupedRowModel) { - table._getGroupedRowModel = table.options.getGroupedRowModel(table); - } - if (table.options.manualGrouping || !table._getGroupedRowModel) { - return table.getPreGroupedRowModel(); - } - return table._getGroupedRowModel(); - } - }; - }, - createRow: (row) => { - return { - getIsGrouped: () => !!row.groupingColumnId, - _groupingValuesCache: {} - }; - }, - createCell: (cell, column, row, table) => { - return { - getIsGrouped: () => column.getIsGrouped() && column.id === row.groupingColumnId, - getIsPlaceholder: () => !cell.getIsGrouped() && column.getIsGrouped(), - getIsAggregated: () => { - var _a2; - return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_a2 = row.subRows) == null ? void 0 : _a2.length); - } - }; - } -}; -function orderColumns(leafColumns, grouping, groupedColumnMode) { - if (!(grouping == null ? void 0 : grouping.length) || !groupedColumnMode) { - return leafColumns; - } - const nonGroupingColumns = leafColumns.filter((col) => !grouping.includes(col.id)); - if (groupedColumnMode === "remove") { - return nonGroupingColumns; - } - const groupingColumns = grouping.map((g4) => leafColumns.find((col) => col.id === g4)).filter(Boolean); - return [...groupingColumns, ...nonGroupingColumns]; -} -var Ordering = { - getInitialState: (state) => { - return { - columnOrder: [], - ...state - }; - }, - getDefaultOptions: (table) => { - return { - onColumnOrderChange: makeStateUpdater("columnOrder", table) - }; - }, - createTable: (table) => { - return { - setColumnOrder: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onColumnOrderChange) == null ? void 0 : _b2.call(_a2, updater); - }, - resetColumnOrder: (defaultState) => { - var _table$initialState$c; - table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []); - }, - _getOrderColumnsFn: memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => (columns) => { - let orderedColumns = []; - if (!(columnOrder == null ? void 0 : columnOrder.length)) { - orderedColumns = columns; - } else { - const columnOrderCopy = [...columnOrder]; - const columnsCopy = [...columns]; - while (columnsCopy.length && columnOrderCopy.length) { - const targetColumnId = columnOrderCopy.shift(); - const foundIndex = columnsCopy.findIndex((d5) => d5.id === targetColumnId); - if (foundIndex > -1) { - orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]); - } - } - orderedColumns = [...orderedColumns, ...columnsCopy]; - } - return orderColumns(orderedColumns, grouping, groupedColumnMode); - }, { - key: "getOrderColumnsFn" - }) - }; - } -}; -var defaultPageIndex = 0; -var defaultPageSize = 10; -var getDefaultPaginationState = () => ({ - pageIndex: defaultPageIndex, - pageSize: defaultPageSize -}); -var Pagination = { - getInitialState: (state) => { - return { - ...state, - pagination: { - ...getDefaultPaginationState(), - ...state == null ? void 0 : state.pagination - } - }; - }, - getDefaultOptions: (table) => { - return { - onPaginationChange: makeStateUpdater("pagination", table) - }; - }, - createTable: (table) => { - let registered = false; - let queued = false; - return { - _autoResetPageIndex: () => { - var _ref, _table$options$autoRe; - if (!registered) { - table._queue(() => { - registered = true; - }); - return; - } - if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) { - if (queued) - return; - queued = true; - table._queue(() => { - table.resetPageIndex(); - queued = false; - }); - } - }, - setPagination: (updater) => { - var _a2, _b2; - const safeUpdater = (old) => { - let newState = functionalUpdate(updater, old); - return newState; - }; - return (_b2 = (_a2 = table.options).onPaginationChange) == null ? void 0 : _b2.call(_a2, safeUpdater); - }, - resetPagination: (defaultState) => { - var _table$initialState$p; - table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState()); - }, - setPageIndex: (updater) => { - table.setPagination((old) => { - let pageIndex = functionalUpdate(updater, old.pageIndex); - const maxPageIndex = typeof table.options.pageCount === "undefined" || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1; - pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex)); - return { - ...old, - pageIndex - }; - }); - }, - resetPageIndex: (defaultState) => { - var _a2, _b2; - var _table$initialState$p2; - table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_b2 = (_a2 = table.initialState) == null ? void 0 : _a2.pagination) == null ? void 0 : _b2.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex); - }, - resetPageSize: (defaultState) => { - var _a2, _b2; - var _table$initialState$p3; - table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_b2 = (_a2 = table.initialState) == null ? void 0 : _a2.pagination) == null ? void 0 : _b2.pageSize) != null ? _table$initialState$p3 : defaultPageSize); - }, - setPageSize: (updater) => { - table.setPagination((old) => { - const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize)); - const topRowIndex = old.pageSize * old.pageIndex; - const pageIndex = Math.floor(topRowIndex / pageSize); - return { - ...old, - pageIndex, - pageSize - }; - }); - }, - setPageCount: (updater) => table.setPagination((old) => { - var _table$options$pageCo; - let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1); - if (typeof newPageCount === "number") { - newPageCount = Math.max(-1, newPageCount); - } - return { - ...old, - pageCount: newPageCount - }; - }), - getPageOptions: memo(() => [table.getPageCount()], (pageCount) => { - let pageOptions = []; - if (pageCount && pageCount > 0) { - pageOptions = [...new Array(pageCount)].fill(null).map((_5, i4) => i4); - } - return pageOptions; - }, { - key: "getPageOptions", - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; - } - }), - getCanPreviousPage: () => table.getState().pagination.pageIndex > 0, - getCanNextPage: () => { - const { - pageIndex - } = table.getState().pagination; - const pageCount = table.getPageCount(); - if (pageCount === -1) { - return true; - } - if (pageCount === 0) { - return false; - } - return pageIndex < pageCount - 1; - }, - previousPage: () => { - return table.setPageIndex((old) => old - 1); - }, - nextPage: () => { - return table.setPageIndex((old) => { - return old + 1; - }); - }, - getPrePaginationRowModel: () => table.getExpandedRowModel(), - getPaginationRowModel: () => { - if (!table._getPaginationRowModel && table.options.getPaginationRowModel) { - table._getPaginationRowModel = table.options.getPaginationRowModel(table); - } - if (table.options.manualPagination || !table._getPaginationRowModel) { - return table.getPrePaginationRowModel(); - } - return table._getPaginationRowModel(); - }, - getPageCount: () => { - var _table$options$pageCo2; - return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getPrePaginationRowModel().rows.length / table.getState().pagination.pageSize); - } - }; - } -}; -var getDefaultPinningState = () => ({ - left: [], - right: [] -}); -var Pinning = { - getInitialState: (state) => { - return { - columnPinning: getDefaultPinningState(), - ...state - }; - }, - getDefaultOptions: (table) => { - return { - onColumnPinningChange: makeStateUpdater("columnPinning", table) - }; - }, - createColumn: (column, table) => { - return { - pin: (position) => { - const columnIds = column.getLeafColumns().map((d5) => d5.id).filter(Boolean); - table.setColumnPinning((old) => { - var _old$left3, _old$right3; - if (position === "right") { - var _old$left, _old$right; - return { - left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), - right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), ...columnIds] - }; - } - if (position === "left") { - var _old$left2, _old$right2; - return { - left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), ...columnIds], - right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))) - }; - } - return { - left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))), - right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter((d5) => !(columnIds == null ? void 0 : columnIds.includes(d5))) - }; - }); - }, - getCanPin: () => { - const leafColumns = column.getLeafColumns(); - return leafColumns.some((d5) => { - var _d$columnDef$enablePi, _table$options$enable; - return ((_d$columnDef$enablePi = d5.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_table$options$enable = table.options.enablePinning) != null ? _table$options$enable : true); - }); - }, - getIsPinned: () => { - const leafColumnIds = column.getLeafColumns().map((d5) => d5.id); - const { - left, - right - } = table.getState().columnPinning; - const isLeft = leafColumnIds.some((d5) => left == null ? void 0 : left.includes(d5)); - const isRight = leafColumnIds.some((d5) => right == null ? void 0 : right.includes(d5)); - return isLeft ? "left" : isRight ? "right" : false; - }, - getPinnedIndex: () => { - var _a2, _b2; - var _table$getState$colum; - const position = column.getIsPinned(); - return position ? (_table$getState$colum = (_b2 = (_a2 = table.getState().columnPinning) == null ? void 0 : _a2[position]) == null ? void 0 : _b2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0; - } - }; - }, - createRow: (row, table) => { - return { - getCenterVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => { - const leftAndRight = [...left != null ? left : [], ...right != null ? right : []]; - return allCells.filter((d5) => !leftAndRight.includes(d5.column.id)); - }, { - key: false, - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; - } - }), - getLeftVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, ,], (allCells, left) => { - const cells = (left != null ? left : []).map((columnId) => allCells.find((cell) => cell.column.id === columnId)).filter(Boolean).map((d5) => ({ - ...d5, - position: "left" - })); - return cells; - }, { - key: false, - debug: () => { - var _table$options$debugA2; - return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; - } - }), - getRightVisibleCells: memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => { - const cells = (right != null ? right : []).map((columnId) => allCells.find((cell) => cell.column.id === columnId)).filter(Boolean).map((d5) => ({ - ...d5, - position: "right" - })); - return cells; - }, { - key: false, - debug: () => { - var _table$options$debugA3; - return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugRows; - } - }) - }; - }, - createTable: (table) => { - return { - setColumnPinning: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onColumnPinningChange) == null ? void 0 : _b2.call(_a2, updater); - }, - resetColumnPinning: (defaultState) => { - var _a2; - var _table$initialState$c; - return table.setColumnPinning(defaultState ? getDefaultPinningState() : (_table$initialState$c = (_a2 = table.initialState) == null ? void 0 : _a2.columnPinning) != null ? _table$initialState$c : getDefaultPinningState()); - }, - getIsSomeColumnsPinned: (position) => { - var _a2, _b2, _c2; - const pinningState = table.getState().columnPinning; - if (!position) { - return Boolean(((_a2 = pinningState.left) == null ? void 0 : _a2.length) || ((_b2 = pinningState.right) == null ? void 0 : _b2.length)); - } - return Boolean((_c2 = pinningState[position]) == null ? void 0 : _c2.length); - }, - getLeftLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => { - return (left != null ? left : []).map((columnId) => allColumns.find((column) => column.id === columnId)).filter(Boolean); - }, { - key: "getLeftLeafColumns", - debug: () => { - var _table$options$debugA4; - return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugColumns; - } - }), - getRightLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => { - return (right != null ? right : []).map((columnId) => allColumns.find((column) => column.id === columnId)).filter(Boolean); - }, { - key: "getRightLeafColumns", - debug: () => { - var _table$options$debugA5; - return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugColumns; - } - }), - getCenterLeafColumns: memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => { - const leftAndRight = [...left != null ? left : [], ...right != null ? right : []]; - return allColumns.filter((d5) => !leftAndRight.includes(d5.id)); - }, { - key: "getCenterLeafColumns", - debug: () => { - var _table$options$debugA6; - return (_table$options$debugA6 = table.options.debugAll) != null ? _table$options$debugA6 : table.options.debugColumns; - } - }) - }; - } -}; -var RowSelection = { - getInitialState: (state) => { - return { - rowSelection: {}, - ...state - }; - }, - getDefaultOptions: (table) => { - return { - onRowSelectionChange: makeStateUpdater("rowSelection", table), - enableRowSelection: true, - enableMultiRowSelection: true, - enableSubRowSelection: true - }; - }, - createTable: (table) => { - return { - setRowSelection: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onRowSelectionChange) == null ? void 0 : _b2.call(_a2, updater); - }, - resetRowSelection: (defaultState) => { - var _table$initialState$r; - return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {}); - }, - toggleAllRowsSelected: (value) => { - table.setRowSelection((old) => { - value = typeof value !== "undefined" ? value : !table.getIsAllRowsSelected(); - const rowSelection = { - ...old - }; - const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows; - if (value) { - preGroupedFlatRows.forEach((row) => { - if (!row.getCanSelect()) { - return; - } - rowSelection[row.id] = true; - }); - } else { - preGroupedFlatRows.forEach((row) => { - delete rowSelection[row.id]; - }); - } - return rowSelection; - }); - }, - toggleAllPageRowsSelected: (value) => table.setRowSelection((old) => { - const resolvedValue = typeof value !== "undefined" ? value : !table.getIsAllPageRowsSelected(); - const rowSelection = { - ...old - }; - table.getRowModel().rows.forEach((row) => { - mutateRowIsSelected(rowSelection, row.id, resolvedValue, table); - }); - return rowSelection; - }), - getPreSelectedRowModel: () => table.getCoreRowModel(), - getSelectedRowModel: memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => { - if (!Object.keys(rowSelection).length) { - return { - rows: [], - flatRows: [], - rowsById: {} - }; - } - return selectRowsFn(table, rowModel); - }, { - key: "getSelectedRowModel", - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; - } - }), - getFilteredSelectedRowModel: memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => { - if (!Object.keys(rowSelection).length) { - return { - rows: [], - flatRows: [], - rowsById: {} - }; - } - return selectRowsFn(table, rowModel); - }, { - key: false, - debug: () => { - var _table$options$debugA2; - return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugTable; - } - }), - getGroupedSelectedRowModel: memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => { - if (!Object.keys(rowSelection).length) { - return { - rows: [], - flatRows: [], - rowsById: {} - }; - } - return selectRowsFn(table, rowModel); - }, { - key: false, - debug: () => { - var _table$options$debugA3; - return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugTable; - } - }), - getIsAllRowsSelected: () => { - const preGroupedFlatRows = table.getFilteredRowModel().flatRows; - const { - rowSelection - } = table.getState(); - let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length); - if (isAllRowsSelected) { - if (preGroupedFlatRows.some((row) => row.getCanSelect() && !rowSelection[row.id])) { - isAllRowsSelected = false; - } - } - return isAllRowsSelected; - }, - getIsAllPageRowsSelected: () => { - const paginationFlatRows = table.getPaginationRowModel().flatRows; - const { - rowSelection - } = table.getState(); - let isAllPageRowsSelected = !!paginationFlatRows.length; - if (isAllPageRowsSelected && paginationFlatRows.some((row) => !rowSelection[row.id])) { - isAllPageRowsSelected = false; - } - return isAllPageRowsSelected; - }, - getIsSomeRowsSelected: () => { - var _table$getState$rowSe; - const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length; - return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length; - }, - getIsSomePageRowsSelected: () => { - const paginationFlatRows = table.getPaginationRowModel().flatRows; - return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.some((d5) => d5.getIsSelected() || d5.getIsSomeSelected()); - }, - getToggleAllRowsSelectedHandler: () => { - return (e4) => { - table.toggleAllRowsSelected(e4.target.checked); - }; - }, - getToggleAllPageRowsSelectedHandler: () => { - return (e4) => { - table.toggleAllPageRowsSelected(e4.target.checked); - }; - } - }; - }, - createRow: (row, table) => { - return { - toggleSelected: (value) => { - const isSelected = row.getIsSelected(); - table.setRowSelection((old) => { - value = typeof value !== "undefined" ? value : !isSelected; - if (isSelected === value) { - return old; - } - const selectedRowIds = { - ...old - }; - mutateRowIsSelected(selectedRowIds, row.id, value, table); - return selectedRowIds; - }); - }, - getIsSelected: () => { - const { - rowSelection - } = table.getState(); - return isRowSelected(row, rowSelection); - }, - getIsSomeSelected: () => { - const { - rowSelection - } = table.getState(); - return isSubRowSelected(row, rowSelection) === "some"; - }, - getIsAllSubRowsSelected: () => { - const { - rowSelection - } = table.getState(); - return isSubRowSelected(row, rowSelection) === "all"; - }, - getCanSelect: () => { - var _table$options$enable; - if (typeof table.options.enableRowSelection === "function") { - return table.options.enableRowSelection(row); - } - return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true; - }, - getCanSelectSubRows: () => { - var _table$options$enable2; - if (typeof table.options.enableSubRowSelection === "function") { - return table.options.enableSubRowSelection(row); - } - return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true; - }, - getCanMultiSelect: () => { - var _table$options$enable3; - if (typeof table.options.enableMultiRowSelection === "function") { - return table.options.enableMultiRowSelection(row); - } - return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true; - }, - getToggleSelectedHandler: () => { - const canSelect = row.getCanSelect(); - return (e4) => { - var _a2; - if (!canSelect) - return; - row.toggleSelected((_a2 = e4.target) == null ? void 0 : _a2.checked); - }; - } - }; - } -}; -var mutateRowIsSelected = (selectedRowIds, id2, value, table) => { - var _a2; - const row = table.getRow(id2); - if (value) { - if (!row.getCanMultiSelect()) { - Object.keys(selectedRowIds).forEach((key2) => delete selectedRowIds[key2]); - } - if (row.getCanSelect()) { - selectedRowIds[id2] = true; - } - } else { - delete selectedRowIds[id2]; - } - if (((_a2 = row.subRows) == null ? void 0 : _a2.length) && row.getCanSelectSubRows()) { - row.subRows.forEach((row2) => mutateRowIsSelected(selectedRowIds, row2.id, value, table)); - } -}; -function selectRowsFn(table, rowModel) { - const rowSelection = table.getState().rowSelection; - const newSelectedFlatRows = []; - const newSelectedRowsById = {}; - const recurseRows = function(rows, depth) { - return rows.map((row) => { - var _a2; - const isSelected = isRowSelected(row, rowSelection); - if (isSelected) { - newSelectedFlatRows.push(row); - newSelectedRowsById[row.id] = row; - } - if ((_a2 = row.subRows) == null ? void 0 : _a2.length) { - row = { - ...row, - subRows: recurseRows(row.subRows) - }; - } - if (isSelected) { - return row; - } - }).filter(Boolean); - }; - return { - rows: recurseRows(rowModel.rows), - flatRows: newSelectedFlatRows, - rowsById: newSelectedRowsById - }; -} -function isRowSelected(row, selection) { - var _selection$row$id; - return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false; -} -function isSubRowSelected(row, selection, table) { - if (row.subRows && row.subRows.length) { - let allChildrenSelected = true; - let someSelected = false; - row.subRows.forEach((subRow) => { - if (someSelected && !allChildrenSelected) { - return; - } - if (isRowSelected(subRow, selection)) { - someSelected = true; - } else { - allChildrenSelected = false; - } - }); - return allChildrenSelected ? "all" : someSelected ? "some" : false; - } - return false; -} -var reSplitAlphaNumeric = /([0-9]+)/gm; -var alphanumeric = (rowA, rowB, columnId) => { - return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase()); -}; -var alphanumericCaseSensitive = (rowA, rowB, columnId) => { - return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId))); -}; -var text = (rowA, rowB, columnId) => { - return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase()); -}; -var textCaseSensitive = (rowA, rowB, columnId) => { - return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId))); -}; -var datetime = (rowA, rowB, columnId) => { - const a5 = rowA.getValue(columnId); - const b4 = rowB.getValue(columnId); - return a5 > b4 ? 1 : a5 < b4 ? -1 : 0; -}; -var basic = (rowA, rowB, columnId) => { - return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId)); -}; -function compareBasic(a5, b4) { - return a5 === b4 ? 0 : a5 > b4 ? 1 : -1; -} -function toString(a5) { - if (typeof a5 === "number") { - if (isNaN(a5) || a5 === Infinity || a5 === -Infinity) { - return ""; - } - return String(a5); - } - if (typeof a5 === "string") { - return a5; - } - return ""; -} -function compareAlphanumeric(aStr, bStr) { - const a5 = aStr.split(reSplitAlphaNumeric).filter(Boolean); - const b4 = bStr.split(reSplitAlphaNumeric).filter(Boolean); - while (a5.length && b4.length) { - const aa = a5.shift(); - const bb = b4.shift(); - const an2 = parseInt(aa, 10); - const bn2 = parseInt(bb, 10); - const combo = [an2, bn2].sort(); - if (isNaN(combo[0])) { - if (aa > bb) { - return 1; - } - if (bb > aa) { - return -1; - } - continue; - } - if (isNaN(combo[1])) { - return isNaN(an2) ? -1 : 1; - } - if (an2 > bn2) { - return 1; - } - if (bn2 > an2) { - return -1; - } - } - return a5.length - b4.length; -} -var sortingFns = { - alphanumeric, - alphanumericCaseSensitive, - text, - textCaseSensitive, - datetime, - basic -}; -var Sorting = { - getInitialState: (state) => { - return { - sorting: [], - ...state - }; - }, - getDefaultColumnDef: () => { - return { - sortingFn: "auto" - }; - }, - getDefaultOptions: (table) => { - return { - onSortingChange: makeStateUpdater("sorting", table), - isMultiSortEvent: (e4) => { - return e4.shiftKey; - } - }; - }, - createColumn: (column, table) => { - return { - getAutoSortingFn: () => { - const firstRows = table.getFilteredRowModel().flatRows.slice(10); - let isString = false; - for (const row of firstRows) { - const value = row == null ? void 0 : row.getValue(column.id); - if (Object.prototype.toString.call(value) === "[object Date]") { - return sortingFns.datetime; - } - if (typeof value === "string") { - isString = true; - if (value.split(reSplitAlphaNumeric).length > 1) { - return sortingFns.alphanumeric; - } - } - } - if (isString) { - return sortingFns.text; - } - return sortingFns.basic; - }, - getAutoSortDir: () => { - const firstRow = table.getFilteredRowModel().flatRows[0]; - const value = firstRow == null ? void 0 : firstRow.getValue(column.id); - if (typeof value === "string") { - return "asc"; - } - return "desc"; - }, - getSortingFn: () => { - var _a2; - var _table$options$sortin; - if (!column) { - throw new Error(); - } - return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === "auto" ? column.getAutoSortingFn() : (_table$options$sortin = (_a2 = table.options.sortingFns) == null ? void 0 : _a2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn]; - }, - toggleSorting: (desc, multi) => { - const nextSortingOrder = column.getNextSortingOrder(); - const hasManualValue = typeof desc !== "undefined" && desc !== null; - table.setSorting((old) => { - const existingSorting = old == null ? void 0 : old.find((d5) => d5.id === column.id); - const existingIndex = old == null ? void 0 : old.findIndex((d5) => d5.id === column.id); - let newSorting = []; - let sortAction; - let nextDesc = hasManualValue ? desc : nextSortingOrder === "desc"; - if ((old == null ? void 0 : old.length) && column.getCanMultiSort() && multi) { - if (existingSorting) { - sortAction = "toggle"; - } else { - sortAction = "add"; - } - } else { - if ((old == null ? void 0 : old.length) && existingIndex !== old.length - 1) { - sortAction = "replace"; - } else if (existingSorting) { - sortAction = "toggle"; - } else { - sortAction = "replace"; - } - } - if (sortAction === "toggle") { - if (!hasManualValue) { - if (!nextSortingOrder) { - sortAction = "remove"; - } - } - } - if (sortAction === "add") { - var _table$options$maxMul; - newSorting = [...old, { - id: column.id, - desc: nextDesc - }]; - newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER)); - } else if (sortAction === "toggle") { - newSorting = old.map((d5) => { - if (d5.id === column.id) { - return { - ...d5, - desc: nextDesc - }; - } - return d5; - }); - } else if (sortAction === "remove") { - newSorting = old.filter((d5) => d5.id !== column.id); - } else { - newSorting = [{ - id: column.id, - desc: nextDesc - }]; - } - return newSorting; - }); - }, - getFirstSortDir: () => { - var _ref, _column$columnDef$sor; - const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === "desc"; - return sortDescFirst ? "desc" : "asc"; - }, - getNextSortingOrder: (multi) => { - var _table$options$enable, _table$options$enable2; - const firstSortDirection = column.getFirstSortDir(); - const isSorted = column.getIsSorted(); - if (!isSorted) { - return firstSortDirection; - } - if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true)) { - return false; - } - return isSorted === "desc" ? "asc" : "desc"; - }, - getCanSort: () => { - var _column$columnDef$ena, _table$options$enable3; - return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn; - }, - getCanMultiSort: () => { - var _ref2, _column$columnDef$ena2; - return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn; - }, - getIsSorted: () => { - var _a2; - const columnSort = (_a2 = table.getState().sorting) == null ? void 0 : _a2.find((d5) => d5.id === column.id); - return !columnSort ? false : columnSort.desc ? "desc" : "asc"; - }, - getSortIndex: () => { - var _a2; - var _table$getState$sorti; - return (_table$getState$sorti = (_a2 = table.getState().sorting) == null ? void 0 : _a2.findIndex((d5) => d5.id === column.id)) != null ? _table$getState$sorti : -1; - }, - clearSorting: () => { - table.setSorting((old) => (old == null ? void 0 : old.length) ? old.filter((d5) => d5.id !== column.id) : []); - }, - getToggleSortingHandler: () => { - const canSort = column.getCanSort(); - return (e4) => { - var _a2, _b2, _c2, _d2; - if (!canSort) - return; - (_a2 = e4.persist) == null ? void 0 : _a2.call(e4); - (_d2 = column.toggleSorting) == null ? void 0 : _d2.call(column, void 0, column.getCanMultiSort() ? (_c2 = (_b2 = table.options).isMultiSortEvent) == null ? void 0 : _c2.call(_b2, e4) : false); - }; - } - }; - }, - createTable: (table) => { - return { - setSorting: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onSortingChange) == null ? void 0 : _b2.call(_a2, updater); - }, - resetSorting: (defaultState) => { - var _a2; - var _table$initialState$s; - table.setSorting(defaultState ? [] : (_table$initialState$s = (_a2 = table.initialState) == null ? void 0 : _a2.sorting) != null ? _table$initialState$s : []); - }, - getPreSortedRowModel: () => table.getGroupedRowModel(), - getSortedRowModel: () => { - if (!table._getSortedRowModel && table.options.getSortedRowModel) { - table._getSortedRowModel = table.options.getSortedRowModel(table); - } - if (table.options.manualSorting || !table._getSortedRowModel) { - return table.getPreSortedRowModel(); - } - return table._getSortedRowModel(); - } - }; - } -}; -var Visibility = { - getInitialState: (state) => { - return { - columnVisibility: {}, - ...state - }; - }, - getDefaultOptions: (table) => { - return { - onColumnVisibilityChange: makeStateUpdater("columnVisibility", table) - }; - }, - createColumn: (column, table) => { - return { - toggleVisibility: (value) => { - if (column.getCanHide()) { - table.setColumnVisibility((old) => ({ - ...old, - [column.id]: value != null ? value : !column.getIsVisible() - })); - } - }, - getIsVisible: () => { - var _a2; - var _table$getState$colum; - return (_table$getState$colum = (_a2 = table.getState().columnVisibility) == null ? void 0 : _a2[column.id]) != null ? _table$getState$colum : true; - }, - getCanHide: () => { - var _column$columnDef$ena, _table$options$enable; - return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true); - }, - getToggleVisibilityHandler: () => { - return (e4) => { - var _a2; - (_a2 = column.toggleVisibility) == null ? void 0 : _a2.call(column, e4.target.checked); - }; - } - }; - }, - createRow: (row, table) => { - return { - _getAllVisibleCells: memo(() => [row.getAllCells(), table.getState().columnVisibility], (cells) => { - return cells.filter((cell) => cell.column.getIsVisible()); - }, { - key: false, - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; - } - }), - getVisibleCells: memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], { - key: "row.getVisibleCells", - debug: () => { - var _table$options$debugA2; - return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; - } - }) - }; - }, - createTable: (table) => { - const makeVisibleColumnsMethod = (key2, getColumns) => { - return memo(() => [getColumns(), getColumns().filter((d5) => d5.getIsVisible()).map((d5) => d5.id).join("_")], (columns) => { - return columns.filter((d5) => { - var _a2; - return (_a2 = d5.getIsVisible) == null ? void 0 : _a2.call(d5); - }); - }, { - key: key2, - debug: () => { - var _table$options$debugA3; - return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugColumns; - } - }); - }; - return { - getVisibleFlatColumns: makeVisibleColumnsMethod("getVisibleFlatColumns", () => table.getAllFlatColumns()), - getVisibleLeafColumns: makeVisibleColumnsMethod("getVisibleLeafColumns", () => table.getAllLeafColumns()), - getLeftVisibleLeafColumns: makeVisibleColumnsMethod("getLeftVisibleLeafColumns", () => table.getLeftLeafColumns()), - getRightVisibleLeafColumns: makeVisibleColumnsMethod("getRightVisibleLeafColumns", () => table.getRightLeafColumns()), - getCenterVisibleLeafColumns: makeVisibleColumnsMethod("getCenterVisibleLeafColumns", () => table.getCenterLeafColumns()), - setColumnVisibility: (updater) => { - var _a2, _b2; - return (_b2 = (_a2 = table.options).onColumnVisibilityChange) == null ? void 0 : _b2.call(_a2, updater); - }, - resetColumnVisibility: (defaultState) => { - var _table$initialState$c; - table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {}); - }, - toggleAllColumnsVisible: (value) => { - var _value; - value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible(); - table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => { - var _a2; - return { - ...obj, - [column.id]: !value ? !((_a2 = column.getCanHide) == null ? void 0 : _a2.call(column)) : value - }; - }, {})); - }, - getIsAllColumnsVisible: () => !table.getAllLeafColumns().some((column) => { - var _a2; - return !((_a2 = column.getIsVisible) == null ? void 0 : _a2.call(column)); - }), - getIsSomeColumnsVisible: () => table.getAllLeafColumns().some((column) => { - var _a2; - return (_a2 = column.getIsVisible) == null ? void 0 : _a2.call(column); - }), - getToggleAllColumnsVisibilityHandler: () => { - return (e4) => { - var _a2; - table.toggleAllColumnsVisible((_a2 = e4.target) == null ? void 0 : _a2.checked); - }; - } - }; - } -}; -var features = [Headers, Visibility, Ordering, Pinning, Filters, Sorting, Grouping, Expanding, Pagination, RowSelection, ColumnSizing]; -function createTable(options) { - var _options$initialState; - if (options.debugAll || options.debugTable) { - console.info("Creating Table Instance..."); - } - let table = { - _features: features - }; - const defaultOptions3 = table._features.reduce((obj, feature) => { - var _a2; - return Object.assign(obj, (_a2 = feature.getDefaultOptions) == null ? void 0 : _a2.call(feature, table)); - }, {}); - const mergeOptions = (options2) => { - if (table.options.mergeOptions) { - return table.options.mergeOptions(defaultOptions3, options2); - } - return { - ...defaultOptions3, - ...options2 - }; - }; - const coreInitialState = {}; - let initialState = { - ...coreInitialState, - ...(_options$initialState = options.initialState) != null ? _options$initialState : {} - }; - table._features.forEach((feature) => { - var _a2; - var _feature$getInitialSt; - initialState = (_feature$getInitialSt = (_a2 = feature.getInitialState) == null ? void 0 : _a2.call(feature, initialState)) != null ? _feature$getInitialSt : initialState; - }); - const queued = []; - let queuedTimeout = false; - const coreInstance = { - _features: features, - options: { - ...defaultOptions3, - ...options - }, - initialState, - _queue: (cb) => { - queued.push(cb); - if (!queuedTimeout) { - queuedTimeout = true; - Promise.resolve().then(() => { - while (queued.length) { - queued.shift()(); - } - queuedTimeout = false; - }).catch((error) => setTimeout(() => { - throw error; - })); - } - }, - reset: () => { - table.setState(table.initialState); - }, - setOptions: (updater) => { - const newOptions = functionalUpdate(updater, table.options); - table.options = mergeOptions(newOptions); - }, - getState: () => { - return table.options.state; - }, - setState: (updater) => { - var _a2, _b2; - (_b2 = (_a2 = table.options).onStateChange) == null ? void 0 : _b2.call(_a2, updater); - }, - _getRowId: (row, index, parent) => { - var _a2, _b2; - var _table$options$getRow; - return (_table$options$getRow = (_b2 = (_a2 = table.options).getRowId) == null ? void 0 : _b2.call(_a2, row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join(".") : index}`; - }, - getCoreRowModel: () => { - if (!table._getCoreRowModel) { - table._getCoreRowModel = table.options.getCoreRowModel(table); - } - return table._getCoreRowModel(); - }, - getRowModel: () => { - return table.getPaginationRowModel(); - }, - getRow: (id2) => { - const row = table.getRowModel().rowsById[id2]; - if (!row) { - if (true) { - throw new Error(`getRow expected an ID, but got ${id2}`); - } - throw new Error(); - } - return row; - }, - _getDefaultColumnDef: memo(() => [table.options.defaultColumn], (defaultColumn) => { - var _defaultColumn; - defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {}; - return { - header: (props2) => { - const resolvedColumnDef = props2.header.column.columnDef; - if (resolvedColumnDef.accessorKey) { - return resolvedColumnDef.accessorKey; - } - if (resolvedColumnDef.accessorFn) { - return resolvedColumnDef.id; - } - return null; - }, - cell: (props2) => { - var _a2, _b2; - var _props$renderValue$to; - return (_props$renderValue$to = (_b2 = (_a2 = props2.renderValue()) == null ? void 0 : _a2.toString) == null ? void 0 : _b2.call(_a2)) != null ? _props$renderValue$to : null; - }, - ...table._features.reduce((obj, feature) => { - var _a2; - return Object.assign(obj, (_a2 = feature.getDefaultColumnDef) == null ? void 0 : _a2.call(feature)); - }, {}), - ...defaultColumn - }; - }, { - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugColumns; - }, - key: "getDefaultColumnDef" - }), - _getColumnDefs: () => table.options.columns, - getAllColumns: memo(() => [table._getColumnDefs()], (columnDefs) => { - const recurseColumns = function(columnDefs2, parent, depth) { - if (depth === void 0) { - depth = 0; - } - return columnDefs2.map((columnDef) => { - const column = createColumn(table, columnDef, depth, parent); - const groupingColumnDef = columnDef; - column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : []; - return column; - }); - }; - return recurseColumns(columnDefs); - }, { - key: "getAllColumns", - debug: () => { - var _table$options$debugA2; - return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugColumns; - } - }), - getAllFlatColumns: memo(() => [table.getAllColumns()], (allColumns) => { - return allColumns.flatMap((column) => { - return column.getFlatColumns(); - }); - }, { - key: "getAllFlatColumns", - debug: () => { - var _table$options$debugA3; - return (_table$options$debugA3 = table.options.debugAll) != null ? _table$options$debugA3 : table.options.debugColumns; - } - }), - _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], (flatColumns) => { - return flatColumns.reduce((acc, column) => { - acc[column.id] = column; - return acc; - }, {}); - }, { - key: "getAllFlatColumnsById", - debug: () => { - var _table$options$debugA4; - return (_table$options$debugA4 = table.options.debugAll) != null ? _table$options$debugA4 : table.options.debugColumns; - } - }), - getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns2) => { - let leafColumns = allColumns.flatMap((column) => column.getLeafColumns()); - return orderColumns2(leafColumns); - }, { - key: "getAllLeafColumns", - debug: () => { - var _table$options$debugA5; - return (_table$options$debugA5 = table.options.debugAll) != null ? _table$options$debugA5 : table.options.debugColumns; - } - }), - getColumn: (columnId) => { - const column = table._getAllFlatColumnsById()[columnId]; - if (!column) { - if (true) { - console.warn(`[Table] Column with id ${columnId} does not exist.`); - } - throw new Error(); - } - return column; - } - }; - Object.assign(table, coreInstance); - table._features.forEach((feature) => { - var _a2; - return Object.assign(table, (_a2 = feature.createTable) == null ? void 0 : _a2.call(feature, table)); - }); - return table; -} -function createCell(table, row, column, columnId) { - const getRenderValue = () => { - var _cell$getValue; - return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue; - }; - const cell = { - id: `${row.id}_${column.id}`, - row, - column, - getValue: () => row.getValue(columnId), - renderValue: getRenderValue, - getContext: memo(() => [table, column, row, cell], (table2, column2, row2, cell2) => ({ - table: table2, - column: column2, - row: row2, - cell: cell2, - getValue: cell2.getValue, - renderValue: cell2.renderValue - }), { - key: "cell.getContext", - debug: () => table.options.debugAll - }) - }; - table._features.forEach((feature) => { - var _a2; - Object.assign(cell, (_a2 = feature.createCell) == null ? void 0 : _a2.call(feature, cell, column, row, table)); - }, {}); - return cell; -} -var createRow = (table, id2, original, rowIndex, depth, subRows) => { - var _a2; - let row = { - id: id2, - index: rowIndex, - original, - depth, - _valuesCache: {}, - _uniqueValuesCache: {}, - getValue: (columnId) => { - if (row._valuesCache.hasOwnProperty(columnId)) { - return row._valuesCache[columnId]; - } - const column = table.getColumn(columnId); - if (!column.accessorFn) { - return void 0; - } - row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex); - return row._valuesCache[columnId]; - }, - getUniqueValues: (columnId) => { - if (row._uniqueValuesCache.hasOwnProperty(columnId)) { - return row._uniqueValuesCache[columnId]; - } - const column = table.getColumn(columnId); - if (!column.accessorFn) { - return void 0; - } - if (!column.columnDef.getUniqueValues) { - row._uniqueValuesCache[columnId] = [row.getValue(columnId)]; - return row._uniqueValuesCache[columnId]; - } - row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex); - return row._uniqueValuesCache[columnId]; - }, - renderValue: (columnId) => { - var _row$getValue; - return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue; - }, - subRows: subRows != null ? subRows : [], - getLeafRows: () => flattenBy(row.subRows, (d5) => d5.subRows), - getAllCells: memo(() => [table.getAllLeafColumns()], (leafColumns) => { - return leafColumns.map((column) => { - return createCell(table, row, column, column.id); - }); - }, { - key: "row.getAllCells", - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugRows; - } - }), - _getAllCellsByColumnId: memo(() => [row.getAllCells()], (allCells) => { - return allCells.reduce((acc, cell) => { - acc[cell.column.id] = cell; - return acc; - }, {}); - }, { - key: false, - debug: () => { - var _table$options$debugA2; - return (_table$options$debugA2 = table.options.debugAll) != null ? _table$options$debugA2 : table.options.debugRows; - } - }) - }; - for (let i4 = 0; i4 < table._features.length; i4++) { - const feature = table._features[i4]; - Object.assign(row, (_a2 = feature == null ? void 0 : feature.createRow) == null ? void 0 : _a2.call(feature, row, table)); - } - return row; -}; -function getCoreRowModel() { - return (table) => memo(() => [table.options.data], (data) => { - const rowModel = { - rows: [], - flatRows: [], - rowsById: {} - }; - const accessRows = function(originalRows, depth, parent) { - var _a2; - if (depth === void 0) { - depth = 0; - } - const rows = []; - for (let i4 = 0; i4 < originalRows.length; i4++) { - const row = createRow(table, table._getRowId(originalRows[i4], i4, parent), originalRows[i4], i4, depth); - rowModel.flatRows.push(row); - rowModel.rowsById[row.id] = row; - rows.push(row); - if (table.options.getSubRows) { - row.originalSubRows = table.options.getSubRows(originalRows[i4], i4); - if ((_a2 = row.originalSubRows) == null ? void 0 : _a2.length) { - row.subRows = accessRows(row.originalSubRows, depth + 1, row); - } - } - } - return rows; - }; - rowModel.rows = accessRows(data); - return rowModel; - }, { - key: "getRowModel", - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; - }, - onChange: () => { - table._autoResetPageIndex(); - } - }); -} -function getGroupedRowModel() { - return (table) => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => { - if (!rowModel.rows.length || !grouping.length) { - return rowModel; - } - const existingGrouping = grouping.filter((columnId) => table.getColumn(columnId)); - const groupedFlatRows = []; - const groupedRowsById = {}; - const groupUpRecursively = function(rows, depth, parentId) { - if (depth === void 0) { - depth = 0; - } - if (depth >= existingGrouping.length) { - return rows.map((row) => { - row.depth = depth; - groupedFlatRows.push(row); - groupedRowsById[row.id] = row; - if (row.subRows) { - row.subRows = groupUpRecursively(row.subRows, depth + 1); - } - return row; - }); - } - const columnId = existingGrouping[depth]; - const rowGroupsMap = groupBy(rows, columnId); - const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => { - let [groupingValue, groupedRows2] = _ref; - let id2 = `${columnId}:${groupingValue}`; - id2 = parentId ? `${parentId}>${id2}` : id2; - const subRows = groupUpRecursively(groupedRows2, depth + 1, id2); - const leafRows = depth ? flattenBy(groupedRows2, (row2) => row2.subRows) : groupedRows2; - const row = createRow(table, id2, leafRows[0].original, index, depth); - Object.assign(row, { - groupingColumnId: columnId, - groupingValue, - subRows, - leafRows, - getValue: (columnId2) => { - if (existingGrouping.includes(columnId2)) { - if (row._valuesCache.hasOwnProperty(columnId2)) { - return row._valuesCache[columnId2]; - } - if (groupedRows2[0]) { - var _groupedRows$0$getVal; - row._valuesCache[columnId2] = (_groupedRows$0$getVal = groupedRows2[0].getValue(columnId2)) != null ? _groupedRows$0$getVal : void 0; - } - return row._valuesCache[columnId2]; - } - if (row._groupingValuesCache.hasOwnProperty(columnId2)) { - return row._groupingValuesCache[columnId2]; - } - const column = table.getColumn(columnId2); - const aggregateFn = column.getAggregationFn(); - if (aggregateFn) { - row._groupingValuesCache[columnId2] = aggregateFn(columnId2, leafRows, groupedRows2); - return row._groupingValuesCache[columnId2]; - } - } - }); - subRows.forEach((subRow) => { - groupedFlatRows.push(subRow); - groupedRowsById[subRow.id] = subRow; - }); - return row; - }); - return aggregatedGroupedRows; - }; - const groupedRows = groupUpRecursively(rowModel.rows, 0, ""); - groupedRows.forEach((subRow) => { - groupedFlatRows.push(subRow); - groupedRowsById[subRow.id] = subRow; - }); - return { - rows: groupedRows, - flatRows: groupedFlatRows, - rowsById: groupedRowsById - }; - }, { - key: "getGroupedRowModel", - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; - }, - onChange: () => { - table._queue(() => { - table._autoResetExpanded(); - table._autoResetPageIndex(); - }); - } - }); -} -function groupBy(rows, columnId) { - const groupMap = /* @__PURE__ */ new Map(); - return rows.reduce((map, row) => { - const resKey = `${row.getValue(columnId)}`; - const previous = map.get(resKey); - if (!previous) { - map.set(resKey, [row]); - } else { - previous.push(row); - } - return map; - }, groupMap); -} -function getExpandedRowModel() { - return (table) => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => { - if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) { - return rowModel; - } - if (!paginateExpandedRows) { - return rowModel; - } - return expandRows(rowModel); - }, { - key: "getExpandedRowModel", - debug: () => { - var _table$options$debugA; - return (_table$options$debugA = table.options.debugAll) != null ? _table$options$debugA : table.options.debugTable; - } - }); -} -function expandRows(rowModel) { - const expandedRows = []; - const handleRow = (row) => { - var _a2; - expandedRows.push(row); - if (((_a2 = row.subRows) == null ? void 0 : _a2.length) && row.getIsExpanded()) { - row.subRows.forEach(handleRow); - } - }; - rowModel.rows.forEach(handleRow); - return { - rows: expandedRows, - flatRows: rowModel.flatRows, - rowsById: rowModel.rowsById - }; -} - -// node_modules/@tanstack/react-table/build/lib/index.mjs -function flexRender(Comp, props2) { - return !Comp ? null : isReactComponent(Comp) ? /* @__PURE__ */ h(Comp, props2) : Comp; -} -function isReactComponent(component) { - return isClassComponent(component) || typeof component === "function" || isExoticComponent(component); -} -function isClassComponent(component) { - return typeof component === "function" && (() => { - const proto = Object.getPrototypeOf(component); - return proto.prototype && proto.prototype.isReactComponent; - })(); -} -function isExoticComponent(component) { - return typeof component === "object" && typeof component.$$typeof === "symbol" && ["react.memo", "react.forward_ref"].includes(component.$$typeof.description); -} -function useReactTable(options) { - const resolvedOptions = { - state: {}, - onStateChange: () => { - }, - renderFallbackValue: null, - ...options - }; - const [tableRef] = p2(() => ({ - current: createTable(resolvedOptions) - })); - const [state, setState] = p2(() => tableRef.current.initialState); - tableRef.current.setOptions((prev) => ({ - ...prev, - ...options, - state: { - ...state, - ...options.state - }, - onStateChange: (updater) => { - var _a2; - setState(updater); - (_a2 = options.onStateChange) == null ? void 0 : _a2.call(options, updater); - } - })); - return tableRef.current; -} - -// src/hooks/useCombinedRef.tsx -function useCombinedRefs2(...refs) { - return F( - () => (node) => { - refs.forEach((ref) => ref(node)); - }, - refs - ); -} - -// src/components/ContextView/TableView/ColumnHeader.tsx -var import_obsidian12 = require("obsidian"); -var filePropTypes = [ - { - name: "Created", - value: "ctime" - }, - { - name: "Last Edited", - value: "mtime" - }, - { - name: "Extension", - value: "extension" - }, - { - name: "Size", - value: "size" - }, - { - name: "Note Preview", - value: "preview" - }, - { - name: "Folder", - value: "folder" - } -]; -var ColumnHeader = (props2) => { - const [field, setField] = p2(props2.column); - const [saveHook, setSaveHook] = p2(false); - const menuRef = _2(null); - const { loadContextFields, tableData, contextTable, cols, newColumn } = q2(MDBContext); - h2(() => { - setField(props2.column); - }, [props2.column]); - const { attributes, listeners, setNodeRef: setDraggableNodeRef, transform } = useDraggable({ - id: field.name + field.table, - data: { name: field.name } - }); - const { setNodeRef: setDroppableNodeRef } = useDroppable({ - id: field.name + field.table, - data: { name: field.name } - }); - h2(() => { - if (saveHook) { - if (field.name.length > 0) { - if (field.name != props2.column.name || field.type != props2.column.type || field.value != props2.column.value || field.attrs != props2.column.attrs) { - const saveResult = props2.saveColumn(field, props2.column); - if (saveResult) { - if (props2.isNew) { - setField(props2.column); - menuRef.current.hide(); - } - } - } - } - setSaveHook(false); - } - }, [saveHook]); - h2(() => { - if (menuRef.current) - showMenu(props2.editable); - }, [field]); - const saveMenu = (menu) => { - setTimeout(() => { - if (menuRef.current == menu) { - menuRef.current.hide(); - menuRef.current = null; - } - }, 100); - setSaveHook(true); - }; - const saveContext = (options, value) => { - const newContext = tagFromString(value[0]); - initiateContextIfNotExists(props2.plugin, newContext).then((f4) => { - if (f4) { - return insertContextItems(props2.plugin, optionValuesForColumn(field.name, field.table == "" ? tableData : contextTable[field.table]), newContext); - } - }).then((f4) => loadContextFields(newContext)); - const newField = { - ...field, - value: newContext != null ? newContext : "" - }; - setField(newField); - props2.saveColumn(newField, props2.column); - }; - const saveField = (options, value) => { - var _a2; - const newField = { - ...field, - value: (_a2 = value[0]) != null ? _a2 : "" - }; - setField(newField); - props2.saveColumn(newField, props2.column); - }; - const showNewMenu = (e4) => { - const offset = ref.current.getBoundingClientRect(); - const files = tableData.rows.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4 instanceof import_obsidian12.TFile); - const types = guestimateTypes(files.map((f4) => f4.path), false); - const fmFields = files.reduce((p3, c4) => { - const fm = frontMatterForFile(c4); - const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); - return uniq([...p3, ...fmKeys]); - }, []).filter((f4) => !cols.some((g4) => g4.name == f4)); - const allTypes = [...fmFields.map((f4) => ({ - name: f4, - description: "Sync Frontmatter Field", - value: "fm." + f4 + "." + yamlTypeToMDBType(types[f4]) - })), ...fieldTypes.filter((f4) => f4.restricted != true).map((f4) => ({ - name: f4.label, - description: "New Field", - value: "type." + f4.type + "." + f4.label - }))]; - const saveOptions = (_5, values) => { - const newValue = values[0]; - const newType = newValue.split("."); - if (newType[0] == "fm") { - newColumn({ name: uniqueNameFromString(newType[1], tableData.cols.map((f4) => f4.name)), schemaId: tableData.schema.id, table: "", type: newType[2] }); - } else if (newType[0] == "type") { - newColumn({ name: uniqueNameFromString(newType[2], tableData.cols.map((f4) => f4.name)), schemaId: tableData.schema.id, table: "", type: newType[1] }); - } - }; - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - saveOptions, - placeholder: "Select Field", - searchable: true, - options: allTypes, - showAll: true - }); - }; - const showMenu = (editable) => { - var _a2; - if (menuRef.current) { - menuRef.current.hide(); - } - setSaveHook(false); - const fieldType = (_a2 = fieldTypes.find((f4) => f4.type == field.type || f4.multiType == field.type)) != null ? _a2 : fieldTypes[0]; - const menu = new import_obsidian12.Menu(); - menu.setUseNativeMenu(false); - menuRef.current = menu; - if (editable) { - menu.addItem((menuItem) => { - var _a3; - inputMenuItem(menuItem, (_a3 = field == null ? void 0 : field.name) != null ? _a3 : "", (value) => setField((f4) => ({ ...f4, name: value }))); - menuItem.setIcon("type"); - }); - const getNewValueForType = (f4, value) => { - if (value[0].startsWith("option")) { - return optionValuesForColumn(f4.name, f4.table == "" ? tableData : contextTable[f4.table]).join(","); - } - return value[0] == fieldType.type || value[0] == fieldType.multiType ? f4.value : null; - }; - const selectOption = (options, value) => { - setField((f4) => { - var _a3; - return { - ...f4, - type: (_a3 = value[0]) != null ? _a3 : "", - value: getNewValueForType(f4, value) - }; - }); - }; - menu.addSeparator(); - menu.addItem((menuItem) => { - disclosureMenuItem( - menuItem, - false, - false, - "Type", - fieldType.label, - fieldTypes.filter((f4) => !f4.restricted).map((f4, i4) => ({ id: i4 + 1, name: f4.label, value: f4.type, icon: "" })), - selectOption - ); - }); - if (fieldType.type == "context") { - menu.addItem((menuItem) => { - var _a3; - const f4 = loadTags(props2.plugin); - disclosureMenuItem(menuItem, false, true, "Context", (_a3 = field.value) != null ? _a3 : "", f4.map((m5) => ({ name: m5, value: m5 })), saveContext); - }); - } - if (fieldType.type == "fileprop") { - menu.addItem((menuItem) => { - var _a3, _b2; - disclosureMenuItem(menuItem, false, false, "Property", (_b2 = (_a3 = filePropTypes.find((f4) => f4.value == field.value)) == null ? void 0 : _a3.name) != null ? _b2 : "", filePropTypes, saveField); - }); - } - if (fieldType.multi) { - const docFrag = document.createDocumentFragment(); - const titleDiv = docFrag.createDiv("title"); - titleDiv.textContent = "Multiple"; - const div = docFrag.createDiv("toggle"); - const toggle = new import_obsidian12.ToggleComponent(div); - toggle.setValue(field.type == fieldType.multiType); - menu.addItem((menuItem) => { - menuItem.setTitle(docFrag); - menuItem.onClick(() => { - toggle.setValue(field.type != fieldType.multiType); - setField((f4) => ({ - ...f4, - type: field.type == fieldType.multiType ? fieldType.type : fieldType.multiType - })); - }); - }); - } - if (!props2.isNew) { - menu.addSeparator(); - menu.addItem((menuItem) => { - menuItem.setTitle("Hide Field"); - menuItem.onClick(() => { - props2.hide(props2.column.name + props2.column.table); - }); - menuItem.setIcon("eye-off"); - }); - menu.addItem((menuItem) => { - menuItem.setTitle("Delete Field"); - menuItem.onClick(() => { - props2.deleteColumn(props2.column); - }); - menuItem.setIcon("trash-2"); - }); - menu.addSeparator(); - } - } - const sortableString = normalizedSortForType(props2.column.type, false); - if (!props2.isNew && sortableString) { - menu.addItem((menuItem) => { - menuItem.setTitle("Sort Ascending"); - menuItem.setIcon("sort-asc"); - menuItem.onClick(() => { - props2.sort({ - field: props2.column.name + props2.column.table, - type: normalizedSortForType(props2.column.type, false) - }); - }); - }); - menu.addItem((menuItem) => { - menuItem.setTitle("Sort Descending"); - menuItem.setIcon("sort-desc"); - menuItem.onClick(() => { - props2.sort({ - field: props2.column.name + props2.column.table, - type: normalizedSortForType(props2.column.type, true) - }); - }); - }); - } else { - menu.addSeparator(); - menu.addItem((menuItem) => { - menuItem.setTitle("Save Field"); - menuItem.setIcon("checkmark"); - menuItem.onClick(() => { - }); - }); - } - menu.onHide(() => { - saveMenu(menu); - }); - const offset = ref.current.getBoundingClientRect(); - menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); - }; - const toggleMenu = (e4) => { - if (menuRef.current) { - menuRef.current.hide(); - return; - } - if (props2.isNew) { - showNewMenu(e4); - } else { - showMenu(props2.editable); - } - }; - const ref = _2(null); - const setNodeRef = useCombinedRefs2(setDroppableNodeRef, setDraggableNodeRef); - return /* @__PURE__ */ bn.createElement("div", { - ref: setNodeRef, - ...listeners, - ...attributes, - className: "mk-col-header", - onClick: (e4) => { - toggleMenu(e4); - } - }, /* @__PURE__ */ bn.createElement("div", { - ref - }, props2.column.name.length > 0 ? field.name : "+", /* @__PURE__ */ bn.createElement("span", { - className: "mk-col-header-context", - "aria-label": props2.column.table.length > 0 ? props2.column.table : "" - }, props2.column.table.length > 0 ? "#" : ""))); -}; - -// src/components/ContextView/DataTypeView/FileCell.tsx -var import_obsidian16 = require("obsidian"); - -// src/components/ui/menus/fileMenu.tsx -var import_obsidian15 = require("obsidian"); // src/components/StickerMenu/emojis/default.ts var emojis = { @@ -35103,8819 +28571,17079 @@ var emojis = { "1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff" ] }, - { n: ["family"], u: "1f46a" }, + { n: ["family"], u: "1f46a" }, + { + n: ["man-woman-boy", "family: man, woman, boy"], + u: "1f468-200d-1f469-200d-1f466" + }, + { + n: ["man-woman-girl", "family: man, woman, girl"], + u: "1f468-200d-1f469-200d-1f467" + }, + { + n: ["man-woman-girl-boy", "family: man, woman, girl, boy"], + u: "1f468-200d-1f469-200d-1f467-200d-1f466" + }, + { + n: ["man-woman-boy-boy", "family: man, woman, boy, boy"], + u: "1f468-200d-1f469-200d-1f466-200d-1f466" + }, + { + n: ["man-woman-girl-girl", "family: man, woman, girl, girl"], + u: "1f468-200d-1f469-200d-1f467-200d-1f467" + }, + { + n: ["man-man-boy", "family: man, man, boy"], + u: "1f468-200d-1f468-200d-1f466" + }, + { + n: ["man-man-girl", "family: man, man, girl"], + u: "1f468-200d-1f468-200d-1f467" + }, + { + n: ["man-man-girl-boy", "family: man, man, girl, boy"], + u: "1f468-200d-1f468-200d-1f467-200d-1f466" + }, + { + n: ["man-man-boy-boy", "family: man, man, boy, boy"], + u: "1f468-200d-1f468-200d-1f466-200d-1f466" + }, + { + n: ["man-man-girl-girl", "family: man, man, girl, girl"], + u: "1f468-200d-1f468-200d-1f467-200d-1f467" + }, + { + n: ["woman-woman-boy", "family: woman, woman, boy"], + u: "1f469-200d-1f469-200d-1f466" + }, + { + n: ["woman-woman-girl", "family: woman, woman, girl"], + u: "1f469-200d-1f469-200d-1f467" + }, + { + n: ["woman-woman-girl-boy", "family: woman, woman, girl, boy"], + u: "1f469-200d-1f469-200d-1f467-200d-1f466" + }, + { + n: ["woman-woman-boy-boy", "family: woman, woman, boy, boy"], + u: "1f469-200d-1f469-200d-1f466-200d-1f466" + }, + { + n: ["woman-woman-girl-girl", "family: woman, woman, girl, girl"], + u: "1f469-200d-1f469-200d-1f467-200d-1f467" + }, + { n: ["man-boy", "family: man, boy"], u: "1f468-200d-1f466" }, + { + n: ["man-boy-boy", "family: man, boy, boy"], + u: "1f468-200d-1f466-200d-1f466" + }, + { n: ["man-girl", "family: man, girl"], u: "1f468-200d-1f467" }, + { + n: ["man-girl-boy", "family: man, girl, boy"], + u: "1f468-200d-1f467-200d-1f466" + }, { - n: ["man-woman-boy", "family: man, woman, boy"], - u: "1f468-200d-1f469-200d-1f466" + n: ["man-girl-girl", "family: man, girl, girl"], + u: "1f468-200d-1f467-200d-1f467" }, + { n: ["woman-boy", "family: woman, boy"], u: "1f469-200d-1f466" }, { - n: ["man-woman-girl", "family: man, woman, girl"], - u: "1f468-200d-1f469-200d-1f467" + n: ["woman-boy-boy", "family: woman, boy, boy"], + u: "1f469-200d-1f466-200d-1f466" }, + { n: ["woman-girl", "family: woman, girl"], u: "1f469-200d-1f467" }, { - n: ["man-woman-girl-boy", "family: man, woman, girl, boy"], - u: "1f468-200d-1f469-200d-1f467-200d-1f466" + n: ["woman-girl-boy", "family: woman, girl, boy"], + u: "1f469-200d-1f467-200d-1f466" }, { - n: ["man-woman-boy-boy", "family: man, woman, boy, boy"], - u: "1f468-200d-1f469-200d-1f466-200d-1f466" + n: ["woman-girl-girl", "family: woman, girl, girl"], + u: "1f469-200d-1f467-200d-1f467" + }, + { n: ["speaking head", "speaking head in silhouette"], u: "1f5e3-fe0f" }, + { n: ["bust in silhouette"], u: "1f464" }, + { n: ["busts in silhouette"], u: "1f465" }, + { n: ["people hugging"], u: "1fac2" }, + { n: ["footprints"], u: "1f463" } + ], + animals_nature: [ + { n: ["monkey face"], u: "1f435" }, + { n: ["monkey"], u: "1f412" }, + { n: ["gorilla"], u: "1f98d" }, + { n: ["orangutan"], u: "1f9a7" }, + { n: ["dog", "dog face"], u: "1f436" }, + { n: ["dog", "dog2"], u: "1f415" }, + { n: ["guide dog"], u: "1f9ae" }, + { n: ["service dog"], u: "1f415-200d-1f9ba" }, + { n: ["poodle"], u: "1f429" }, + { n: ["wolf", "wolf face"], u: "1f43a" }, + { n: ["fox face"], u: "1f98a" }, + { n: ["raccoon"], u: "1f99d" }, + { n: ["cat", "cat face"], u: "1f431" }, + { n: ["cat", "cat2"], u: "1f408" }, + { n: ["black cat"], u: "1f408-200d-2b1b" }, + { n: ["lion face"], u: "1f981" }, + { n: ["tiger", "tiger face"], u: "1f42f" }, + { n: ["tiger", "tiger2"], u: "1f405" }, + { n: ["leopard"], u: "1f406" }, + { n: ["horse", "horse face"], u: "1f434" }, + { n: ["horse", "racehorse"], u: "1f40e" }, + { n: ["unicorn face"], u: "1f984" }, + { n: ["zebra face"], u: "1f993" }, + { n: ["deer"], u: "1f98c" }, + { n: ["bison"], u: "1f9ac" }, + { n: ["cow", "cow face"], u: "1f42e" }, + { n: ["ox"], u: "1f402" }, + { n: ["water buffalo"], u: "1f403" }, + { n: ["cow", "cow2"], u: "1f404" }, + { n: ["pig", "pig face"], u: "1f437" }, + { n: ["pig", "pig2"], u: "1f416" }, + { n: ["boar"], u: "1f417" }, + { n: ["pig nose"], u: "1f43d" }, + { n: ["ram"], u: "1f40f" }, + { n: ["sheep"], u: "1f411" }, + { n: ["goat"], u: "1f410" }, + { n: ["dromedary camel"], u: "1f42a" }, + { n: ["camel", "bactrian camel"], u: "1f42b" }, + { n: ["llama"], u: "1f999" }, + { n: ["giraffe face"], u: "1f992" }, + { n: ["elephant"], u: "1f418" }, + { n: ["mammoth"], u: "1f9a3" }, + { n: ["rhinoceros"], u: "1f98f" }, + { n: ["hippopotamus"], u: "1f99b" }, + { n: ["mouse", "mouse face"], u: "1f42d" }, + { n: ["mouse", "mouse2"], u: "1f401" }, + { n: ["rat"], u: "1f400" }, + { n: ["hamster", "hamster face"], u: "1f439" }, + { n: ["rabbit", "rabbit face"], u: "1f430" }, + { n: ["rabbit", "rabbit2"], u: "1f407" }, + { n: ["chipmunk"], u: "1f43f-fe0f" }, + { n: ["beaver"], u: "1f9ab" }, + { n: ["hedgehog"], u: "1f994" }, + { n: ["bat"], u: "1f987" }, + { n: ["bear", "bear face"], u: "1f43b" }, + { n: ["polar bear"], u: "1f43b-200d-2744-fe0f" }, + { n: ["koala"], u: "1f428" }, + { n: ["panda face"], u: "1f43c" }, + { n: ["sloth"], u: "1f9a5" }, + { n: ["otter"], u: "1f9a6" }, + { n: ["skunk"], u: "1f9a8" }, + { n: ["kangaroo"], u: "1f998" }, + { n: ["badger"], u: "1f9a1" }, + { n: ["feet", "paw prints"], u: "1f43e" }, + { n: ["turkey"], u: "1f983" }, + { n: ["chicken"], u: "1f414" }, + { n: ["rooster"], u: "1f413" }, + { n: ["hatching chick"], u: "1f423" }, + { n: ["baby chick"], u: "1f424" }, + { n: ["hatched chick", "front-facing baby chick"], u: "1f425" }, + { n: ["bird"], u: "1f426" }, + { n: ["penguin"], u: "1f427" }, + { n: ["dove", "dove of peace"], u: "1f54a-fe0f" }, + { n: ["eagle"], u: "1f985" }, + { n: ["duck"], u: "1f986" }, + { n: ["swan"], u: "1f9a2" }, + { n: ["owl"], u: "1f989" }, + { n: ["dodo"], u: "1f9a4" }, + { n: ["feather"], u: "1fab6" }, + { n: ["flamingo"], u: "1f9a9" }, + { n: ["peacock"], u: "1f99a" }, + { n: ["parrot"], u: "1f99c" }, + { n: ["frog", "frog face"], u: "1f438" }, + { n: ["crocodile"], u: "1f40a" }, + { n: ["turtle"], u: "1f422" }, + { n: ["lizard"], u: "1f98e" }, + { n: ["snake"], u: "1f40d" }, + { n: ["dragon face"], u: "1f432" }, + { n: ["dragon"], u: "1f409" }, + { n: ["sauropod"], u: "1f995" }, + { n: ["t-rex"], u: "1f996" }, + { n: ["whale", "spouting whale"], u: "1f433" }, + { n: ["whale", "whale2"], u: "1f40b" }, + { n: ["dolphin", "flipper"], u: "1f42c" }, + { n: ["seal"], u: "1f9ad" }, + { n: ["fish"], u: "1f41f" }, + { n: ["tropical fish"], u: "1f420" }, + { n: ["blowfish"], u: "1f421" }, + { n: ["shark"], u: "1f988" }, + { n: ["octopus"], u: "1f419" }, + { n: ["shell", "spiral shell"], u: "1f41a" }, + { n: ["coral"], u: "1fab8" }, + { n: ["snail"], u: "1f40c" }, + { n: ["butterfly"], u: "1f98b" }, + { n: ["bug"], u: "1f41b" }, + { n: ["ant"], u: "1f41c" }, + { n: ["bee", "honeybee"], u: "1f41d" }, + { n: ["beetle"], u: "1fab2" }, + { n: ["ladybug", "lady beetle"], u: "1f41e" }, + { n: ["cricket"], u: "1f997" }, + { n: ["cockroach"], u: "1fab3" }, + { n: ["spider"], u: "1f577-fe0f" }, + { n: ["spider web"], u: "1f578-fe0f" }, + { n: ["scorpion"], u: "1f982" }, + { n: ["mosquito"], u: "1f99f" }, + { n: ["fly"], u: "1fab0" }, + { n: ["worm"], u: "1fab1" }, + { n: ["microbe"], u: "1f9a0" }, + { n: ["bouquet"], u: "1f490" }, + { n: ["cherry blossom"], u: "1f338" }, + { n: ["white flower"], u: "1f4ae" }, + { n: ["lotus"], u: "1fab7" }, + { n: ["rosette"], u: "1f3f5-fe0f" }, + { n: ["rose"], u: "1f339" }, + { n: ["wilted flower"], u: "1f940" }, + { n: ["hibiscus"], u: "1f33a" }, + { n: ["sunflower"], u: "1f33b" }, + { n: ["blossom"], u: "1f33c" }, + { n: ["tulip"], u: "1f337" }, + { n: ["seedling"], u: "1f331" }, + { n: ["potted plant"], u: "1fab4" }, + { n: ["evergreen tree"], u: "1f332" }, + { n: ["deciduous tree"], u: "1f333" }, + { n: ["palm tree"], u: "1f334" }, + { n: ["cactus"], u: "1f335" }, + { n: ["ear of rice"], u: "1f33e" }, + { n: ["herb"], u: "1f33f" }, + { n: ["shamrock"], u: "2618-fe0f" }, + { n: ["four leaf clover"], u: "1f340" }, + { n: ["maple leaf"], u: "1f341" }, + { n: ["fallen leaf"], u: "1f342" }, + { n: ["leaves", "leaf fluttering in wind"], u: "1f343" }, + { n: ["empty nest"], u: "1fab9" }, + { n: ["nest with eggs"], u: "1faba" } + ], + food_drink: [ + { n: ["grapes"], u: "1f347" }, + { n: ["melon"], u: "1f348" }, + { n: ["watermelon"], u: "1f349" }, + { n: ["tangerine"], u: "1f34a" }, + { n: ["lemon"], u: "1f34b" }, + { n: ["banana"], u: "1f34c" }, + { n: ["pineapple"], u: "1f34d" }, + { n: ["mango"], u: "1f96d" }, + { n: ["apple", "red apple"], u: "1f34e" }, + { n: ["green apple"], u: "1f34f" }, + { n: ["pear"], u: "1f350" }, + { n: ["peach"], u: "1f351" }, + { n: ["cherries"], u: "1f352" }, + { n: ["strawberry"], u: "1f353" }, + { n: ["blueberries"], u: "1fad0" }, + { n: ["kiwifruit"], u: "1f95d" }, + { n: ["tomato"], u: "1f345" }, + { n: ["olive"], u: "1fad2" }, + { n: ["coconut"], u: "1f965" }, + { n: ["avocado"], u: "1f951" }, + { n: ["eggplant", "aubergine"], u: "1f346" }, + { n: ["potato"], u: "1f954" }, + { n: ["carrot"], u: "1f955" }, + { n: ["corn", "ear of maize"], u: "1f33d" }, + { n: ["hot pepper"], u: "1f336-fe0f" }, + { n: ["bell pepper"], u: "1fad1" }, + { n: ["cucumber"], u: "1f952" }, + { n: ["leafy green"], u: "1f96c" }, + { n: ["broccoli"], u: "1f966" }, + { n: ["garlic"], u: "1f9c4" }, + { n: ["onion"], u: "1f9c5" }, + { n: ["mushroom"], u: "1f344" }, + { n: ["peanuts"], u: "1f95c" }, + { n: ["beans"], u: "1fad8" }, + { n: ["chestnut"], u: "1f330" }, + { n: ["bread"], u: "1f35e" }, + { n: ["croissant"], u: "1f950" }, + { n: ["baguette bread"], u: "1f956" }, + { n: ["flatbread"], u: "1fad3" }, + { n: ["pretzel"], u: "1f968" }, + { n: ["bagel"], u: "1f96f" }, + { n: ["pancakes"], u: "1f95e" }, + { n: ["waffle"], u: "1f9c7" }, + { n: ["cheese wedge"], u: "1f9c0" }, + { n: ["meat on bone"], u: "1f356" }, + { n: ["poultry leg"], u: "1f357" }, + { n: ["cut of meat"], u: "1f969" }, + { n: ["bacon"], u: "1f953" }, + { n: ["hamburger"], u: "1f354" }, + { n: ["fries", "french fries"], u: "1f35f" }, + { n: ["pizza", "slice of pizza"], u: "1f355" }, + { n: ["hotdog", "hot dog"], u: "1f32d" }, + { n: ["sandwich"], u: "1f96a" }, + { n: ["taco"], u: "1f32e" }, + { n: ["burrito"], u: "1f32f" }, + { n: ["tamale"], u: "1fad4" }, + { n: ["stuffed flatbread"], u: "1f959" }, + { n: ["falafel"], u: "1f9c6" }, + { n: ["egg"], u: "1f95a" }, + { n: ["cooking", "fried egg"], u: "1f373" }, + { n: ["shallow pan of food"], u: "1f958" }, + { n: ["stew", "pot of food"], u: "1f372" }, + { n: ["fondue"], u: "1fad5" }, + { n: ["bowl with spoon"], u: "1f963" }, + { n: ["green salad"], u: "1f957" }, + { n: ["popcorn"], u: "1f37f" }, + { n: ["butter"], u: "1f9c8" }, + { n: ["salt", "salt shaker"], u: "1f9c2" }, + { n: ["canned food"], u: "1f96b" }, + { n: ["bento", "bento box"], u: "1f371" }, + { n: ["rice cracker"], u: "1f358" }, + { n: ["rice ball"], u: "1f359" }, + { n: ["rice", "cooked rice"], u: "1f35a" }, + { n: ["curry", "curry and rice"], u: "1f35b" }, + { n: ["ramen", "steaming bowl"], u: "1f35c" }, + { n: ["spaghetti"], u: "1f35d" }, + { n: ["sweet potato", "roasted sweet potato"], u: "1f360" }, + { n: ["oden"], u: "1f362" }, + { n: ["sushi"], u: "1f363" }, + { n: ["fried shrimp"], u: "1f364" }, + { n: ["fish cake", "fish cake with swirl design"], u: "1f365" }, + { n: ["moon cake"], u: "1f96e" }, + { n: ["dango"], u: "1f361" }, + { n: ["dumpling"], u: "1f95f" }, + { n: ["fortune cookie"], u: "1f960" }, + { n: ["takeout box"], u: "1f961" }, + { n: ["crab"], u: "1f980" }, + { n: ["lobster"], u: "1f99e" }, + { n: ["shrimp"], u: "1f990" }, + { n: ["squid"], u: "1f991" }, + { n: ["oyster"], u: "1f9aa" }, + { n: ["icecream", "soft ice cream"], u: "1f366" }, + { n: ["shaved ice"], u: "1f367" }, + { n: ["ice cream"], u: "1f368" }, + { n: ["doughnut"], u: "1f369" }, + { n: ["cookie"], u: "1f36a" }, + { n: ["birthday", "birthday cake"], u: "1f382" }, + { n: ["cake", "shortcake"], u: "1f370" }, + { n: ["cupcake"], u: "1f9c1" }, + { n: ["pie"], u: "1f967" }, + { n: ["chocolate bar"], u: "1f36b" }, + { n: ["candy"], u: "1f36c" }, + { n: ["lollipop"], u: "1f36d" }, + { n: ["custard"], u: "1f36e" }, + { n: ["honey pot"], u: "1f36f" }, + { n: ["baby bottle"], u: "1f37c" }, + { n: ["glass of milk"], u: "1f95b" }, + { n: ["coffee", "hot beverage"], u: "2615" }, + { n: ["teapot"], u: "1fad6" }, + { n: ["tea", "teacup without handle"], u: "1f375" }, + { n: ["sake", "sake bottle and cup"], u: "1f376" }, + { n: ["champagne", "bottle with popping cork"], u: "1f37e" }, + { n: ["wine glass"], u: "1f377" }, + { n: ["cocktail", "cocktail glass"], u: "1f378" }, + { n: ["tropical drink"], u: "1f379" }, + { n: ["beer", "beer mug"], u: "1f37a" }, + { n: ["beers", "clinking beer mugs"], u: "1f37b" }, + { n: ["clinking glasses"], u: "1f942" }, + { n: ["tumbler glass"], u: "1f943" }, + { n: ["pouring liquid"], u: "1fad7" }, + { n: ["cup with straw"], u: "1f964" }, + { n: ["bubble tea"], u: "1f9cb" }, + { n: ["beverage box"], u: "1f9c3" }, + { n: ["mate drink"], u: "1f9c9" }, + { n: ["ice cube"], u: "1f9ca" }, + { n: ["chopsticks"], u: "1f962" }, + { n: ["knife fork plate", "fork and knife with plate"], u: "1f37d-fe0f" }, + { n: ["fork and knife"], u: "1f374" }, + { n: ["spoon"], u: "1f944" }, + { n: ["hocho", "knife"], u: "1f52a" }, + { n: ["jar"], u: "1fad9" }, + { n: ["amphora"], u: "1f3fa" } + ], + travel_places: [ + { n: ["earth africa", "earth globe europe-africa"], u: "1f30d" }, + { n: ["earth americas", "earth globe americas"], u: "1f30e" }, + { n: ["earth asia", "earth globe asia-australia"], u: "1f30f" }, + { n: ["globe with meridians"], u: "1f310" }, + { n: ["world map"], u: "1f5fa-fe0f" }, + { n: ["japan", "silhouette of japan"], u: "1f5fe" }, + { n: ["compass"], u: "1f9ed" }, + { n: ["snow-capped mountain", "snow capped mountain"], u: "1f3d4-fe0f" }, + { n: ["mountain"], u: "26f0-fe0f" }, + { n: ["volcano"], u: "1f30b" }, + { n: ["mount fuji"], u: "1f5fb" }, + { n: ["camping"], u: "1f3d5-fe0f" }, + { n: ["beach with umbrella"], u: "1f3d6-fe0f" }, + { n: ["desert"], u: "1f3dc-fe0f" }, + { n: ["desert island"], u: "1f3dd-fe0f" }, + { n: ["national park"], u: "1f3de-fe0f" }, + { n: ["stadium"], u: "1f3df-fe0f" }, + { n: ["classical building"], u: "1f3db-fe0f" }, + { n: ["building construction"], u: "1f3d7-fe0f" }, + { n: ["brick", "bricks"], u: "1f9f1" }, + { n: ["rock"], u: "1faa8" }, + { n: ["wood"], u: "1fab5" }, + { n: ["hut"], u: "1f6d6" }, + { n: ["houses", "house buildings"], u: "1f3d8-fe0f" }, + { n: ["derelict house", "derelict house building"], u: "1f3da-fe0f" }, + { n: ["house", "house building"], u: "1f3e0" }, + { n: ["house with garden"], u: "1f3e1" }, + { n: ["office", "office building"], u: "1f3e2" }, + { n: ["post office", "japanese post office"], u: "1f3e3" }, + { n: ["european post office"], u: "1f3e4" }, + { n: ["hospital"], u: "1f3e5" }, + { n: ["bank"], u: "1f3e6" }, + { n: ["hotel"], u: "1f3e8" }, + { n: ["love hotel"], u: "1f3e9" }, + { n: ["convenience store"], u: "1f3ea" }, + { n: ["school"], u: "1f3eb" }, + { n: ["department store"], u: "1f3ec" }, + { n: ["factory"], u: "1f3ed" }, + { n: ["japanese castle"], u: "1f3ef" }, + { n: ["european castle"], u: "1f3f0" }, + { n: ["wedding"], u: "1f492" }, + { n: ["tokyo tower"], u: "1f5fc" }, + { n: ["statue of liberty"], u: "1f5fd" }, + { n: ["church"], u: "26ea" }, + { n: ["mosque"], u: "1f54c" }, + { n: ["hindu temple"], u: "1f6d5" }, + { n: ["synagogue"], u: "1f54d" }, + { n: ["shinto shrine"], u: "26e9-fe0f" }, + { n: ["kaaba"], u: "1f54b" }, + { n: ["fountain"], u: "26f2" }, + { n: ["tent"], u: "26fa" }, + { n: ["foggy"], u: "1f301" }, + { n: ["night with stars"], u: "1f303" }, + { n: ["cityscape"], u: "1f3d9-fe0f" }, + { n: ["sunrise over mountains"], u: "1f304" }, + { n: ["sunrise"], u: "1f305" }, + { n: ["city sunset", "cityscape at dusk"], u: "1f306" }, + { n: ["city sunrise", "sunset over buildings"], u: "1f307" }, + { n: ["bridge at night"], u: "1f309" }, + { n: ["hotsprings", "hot springs"], u: "2668-fe0f" }, + { n: ["carousel horse"], u: "1f3a0" }, + { n: ["playground slide"], u: "1f6dd" }, + { n: ["ferris wheel"], u: "1f3a1" }, + { n: ["roller coaster"], u: "1f3a2" }, + { n: ["barber", "barber pole"], u: "1f488" }, + { n: ["circus tent"], u: "1f3aa" }, + { n: ["steam locomotive"], u: "1f682" }, + { n: ["railway car"], u: "1f683" }, + { n: ["high-speed train", "bullettrain side"], u: "1f684" }, + { + n: ["bullettrain front", "high-speed train with bullet nose"], + u: "1f685" + }, + { n: ["train", "train2"], u: "1f686" }, + { n: ["metro"], u: "1f687" }, + { n: ["light rail"], u: "1f688" }, + { n: ["station"], u: "1f689" }, + { n: ["tram"], u: "1f68a" }, + { n: ["monorail"], u: "1f69d" }, + { n: ["mountain railway"], u: "1f69e" }, + { n: ["train", "tram car"], u: "1f68b" }, + { n: ["bus"], u: "1f68c" }, + { n: ["oncoming bus"], u: "1f68d" }, + { n: ["trolleybus"], u: "1f68e" }, + { n: ["minibus"], u: "1f690" }, + { n: ["ambulance"], u: "1f691" }, + { n: ["fire engine"], u: "1f692" }, + { n: ["police car"], u: "1f693" }, + { n: ["oncoming police car"], u: "1f694" }, + { n: ["taxi"], u: "1f695" }, + { n: ["oncoming taxi"], u: "1f696" }, + { n: ["car", "red car", "automobile"], u: "1f697" }, + { n: ["oncoming automobile"], u: "1f698" }, + { n: ["blue car", "recreational vehicle"], u: "1f699" }, + { n: ["pickup truck"], u: "1f6fb" }, + { n: ["truck", "delivery truck"], u: "1f69a" }, + { n: ["articulated lorry"], u: "1f69b" }, + { n: ["tractor"], u: "1f69c" }, + { n: ["racing car"], u: "1f3ce-fe0f" }, + { n: ["motorcycle", "racing motorcycle"], u: "1f3cd-fe0f" }, + { n: ["motor scooter"], u: "1f6f5" }, + { n: ["manual wheelchair"], u: "1f9bd" }, + { n: ["motorized wheelchair"], u: "1f9bc" }, + { n: ["auto rickshaw"], u: "1f6fa" }, + { n: ["bike", "bicycle"], u: "1f6b2" }, + { n: ["scooter"], u: "1f6f4" }, + { n: ["skateboard"], u: "1f6f9" }, + { n: ["roller skate"], u: "1f6fc" }, + { n: ["busstop", "bus stop"], u: "1f68f" }, + { n: ["motorway"], u: "1f6e3-fe0f" }, + { n: ["railway track"], u: "1f6e4-fe0f" }, + { n: ["oil drum"], u: "1f6e2-fe0f" }, + { n: ["fuelpump", "fuel pump"], u: "26fd" }, + { n: ["wheel"], u: "1f6de" }, + { n: ["rotating light", "police cars revolving light"], u: "1f6a8" }, + { n: ["traffic light", "horizontal traffic light"], u: "1f6a5" }, + { n: ["vertical traffic light"], u: "1f6a6" }, + { n: ["octagonal sign"], u: "1f6d1" }, + { n: ["construction", "construction sign"], u: "1f6a7" }, + { n: ["anchor"], u: "2693" }, + { n: ["ring buoy"], u: "1f6df" }, + { n: ["boat", "sailboat"], u: "26f5" }, + { n: ["canoe"], u: "1f6f6" }, + { n: ["speedboat"], u: "1f6a4" }, + { n: ["passenger ship"], u: "1f6f3-fe0f" }, + { n: ["ferry"], u: "26f4-fe0f" }, + { n: ["motor boat"], u: "1f6e5-fe0f" }, + { n: ["ship"], u: "1f6a2" }, + { n: ["airplane"], u: "2708-fe0f" }, + { n: ["small airplane"], u: "1f6e9-fe0f" }, + { n: ["airplane departure"], u: "1f6eb" }, + { n: ["airplane arriving"], u: "1f6ec" }, + { n: ["parachute"], u: "1fa82" }, + { n: ["seat"], u: "1f4ba" }, + { n: ["helicopter"], u: "1f681" }, + { n: ["suspension railway"], u: "1f69f" }, + { n: ["mountain cableway"], u: "1f6a0" }, + { n: ["aerial tramway"], u: "1f6a1" }, + { n: ["satellite"], u: "1f6f0-fe0f" }, + { n: ["rocket"], u: "1f680" }, + { n: ["flying saucer"], u: "1f6f8" }, + { n: ["bellhop bell"], u: "1f6ce-fe0f" }, + { n: ["luggage"], u: "1f9f3" }, + { n: ["hourglass"], u: "231b" }, + { n: ["hourglass flowing sand", "hourglass with flowing sand"], u: "23f3" }, + { n: ["watch"], u: "231a" }, + { n: ["alarm clock"], u: "23f0" }, + { n: ["stopwatch"], u: "23f1-fe0f" }, + { n: ["timer clock"], u: "23f2-fe0f" }, + { n: ["mantelpiece clock"], u: "1f570-fe0f" }, + { n: ["clock12", "clock face twelve oclock"], u: "1f55b" }, + { n: ["clock1230", "clock face twelve-thirty"], u: "1f567" }, + { n: ["clock1", "clock face one oclock"], u: "1f550" }, + { n: ["clock130", "clock face one-thirty"], u: "1f55c" }, + { n: ["clock2", "clock face two oclock"], u: "1f551" }, + { n: ["clock230", "clock face two-thirty"], u: "1f55d" }, + { n: ["clock3", "clock face three oclock"], u: "1f552" }, + { n: ["clock330", "clock face three-thirty"], u: "1f55e" }, + { n: ["clock4", "clock face four oclock"], u: "1f553" }, + { n: ["clock430", "clock face four-thirty"], u: "1f55f" }, + { n: ["clock5", "clock face five oclock"], u: "1f554" }, + { n: ["clock530", "clock face five-thirty"], u: "1f560" }, + { n: ["clock6", "clock face six oclock"], u: "1f555" }, + { n: ["clock630", "clock face six-thirty"], u: "1f561" }, + { n: ["clock7", "clock face seven oclock"], u: "1f556" }, + { n: ["clock730", "clock face seven-thirty"], u: "1f562" }, + { n: ["clock8", "clock face eight oclock"], u: "1f557" }, + { n: ["clock830", "clock face eight-thirty"], u: "1f563" }, + { n: ["clock9", "clock face nine oclock"], u: "1f558" }, + { n: ["clock930", "clock face nine-thirty"], u: "1f564" }, + { n: ["clock10", "clock face ten oclock"], u: "1f559" }, + { n: ["clock1030", "clock face ten-thirty"], u: "1f565" }, + { n: ["clock11", "clock face eleven oclock"], u: "1f55a" }, + { n: ["clock1130", "clock face eleven-thirty"], u: "1f566" }, + { n: ["new moon", "new moon symbol"], u: "1f311" }, + { n: ["waxing crescent moon", "waxing crescent moon symbol"], u: "1f312" }, + { n: ["first quarter moon", "first quarter moon symbol"], u: "1f313" }, + { + n: ["moon", "waxing gibbous moon", "waxing gibbous moon symbol"], + u: "1f314" + }, + { n: ["full moon", "full moon symbol"], u: "1f315" }, + { n: ["waning gibbous moon", "waning gibbous moon symbol"], u: "1f316" }, + { n: ["last quarter moon", "last quarter moon symbol"], u: "1f317" }, + { n: ["waning crescent moon", "waning crescent moon symbol"], u: "1f318" }, + { n: ["crescent moon"], u: "1f319" }, + { n: ["new moon with face"], u: "1f31a" }, + { n: ["first quarter moon with face"], u: "1f31b" }, + { n: ["last quarter moon with face"], u: "1f31c" }, + { n: ["thermometer"], u: "1f321-fe0f" }, + { n: ["sunny", "black sun with rays"], u: "2600-fe0f" }, + { n: ["full moon with face"], u: "1f31d" }, + { n: ["sun with face"], u: "1f31e" }, + { n: ["ringed planet"], u: "1fa90" }, + { n: ["star", "white medium star"], u: "2b50" }, + { n: ["star2", "glowing star"], u: "1f31f" }, + { n: ["stars", "shooting star"], u: "1f320" }, + { n: ["milky way"], u: "1f30c" }, + { n: ["cloud"], u: "2601-fe0f" }, + { n: ["partly sunny", "sun behind cloud"], u: "26c5" }, + { + n: ["thunder cloud and rain", "cloud with lightning and rain"], + u: "26c8-fe0f" + }, + { + n: ["mostly sunny", "sun small cloud", "sun behind small cloud"], + u: "1f324-fe0f" }, { - n: ["man-woman-girl-girl", "family: man, woman, girl, girl"], - u: "1f468-200d-1f469-200d-1f467-200d-1f467" + n: ["barely sunny", "sun behind cloud", "sun behind large cloud"], + u: "1f325-fe0f" }, + { n: ["partly sunny rain", "sun behind rain cloud"], u: "1f326-fe0f" }, + { n: ["rain cloud", "cloud with rain"], u: "1f327-fe0f" }, + { n: ["snow cloud", "cloud with snow"], u: "1f328-fe0f" }, { - n: ["man-man-boy", "family: man, man, boy"], - u: "1f468-200d-1f468-200d-1f466" + n: ["lightning", "lightning cloud", "cloud with lightning"], + u: "1f329-fe0f" }, + { n: ["tornado", "tornado cloud"], u: "1f32a-fe0f" }, + { n: ["fog"], u: "1f32b-fe0f" }, + { n: ["wind face", "wind blowing face"], u: "1f32c-fe0f" }, + { n: ["cyclone"], u: "1f300" }, + { n: ["rainbow"], u: "1f308" }, + { n: ["closed umbrella"], u: "1f302" }, + { n: ["umbrella"], u: "2602-fe0f" }, + { n: ["umbrella with rain drops"], u: "2614" }, + { n: ["umbrella on ground"], u: "26f1-fe0f" }, + { n: ["zap", "high voltage sign"], u: "26a1" }, + { n: ["snowflake"], u: "2744-fe0f" }, + { n: ["snowman"], u: "2603-fe0f" }, + { n: ["snowman without snow"], u: "26c4" }, + { n: ["comet"], u: "2604-fe0f" }, + { n: ["fire"], u: "1f525" }, + { n: ["droplet"], u: "1f4a7" }, + { n: ["ocean", "water wave"], u: "1f30a" } + ], + activities: [ + { n: ["jack-o-lantern", "jack o lantern"], u: "1f383" }, + { n: ["christmas tree"], u: "1f384" }, + { n: ["fireworks"], u: "1f386" }, + { n: ["sparkler", "firework sparkler"], u: "1f387" }, + { n: ["firecracker"], u: "1f9e8" }, + { n: ["sparkles"], u: "2728" }, + { n: ["balloon"], u: "1f388" }, + { n: ["tada", "party popper"], u: "1f389" }, + { n: ["confetti ball"], u: "1f38a" }, + { n: ["tanabata tree"], u: "1f38b" }, + { n: ["bamboo", "pine decoration"], u: "1f38d" }, + { n: ["dolls", "japanese dolls"], u: "1f38e" }, + { n: ["flags", "carp streamer"], u: "1f38f" }, + { n: ["wind chime"], u: "1f390" }, + { n: ["rice scene", "moon viewing ceremony"], u: "1f391" }, + { n: ["red envelope", "red gift envelope"], u: "1f9e7" }, + { n: ["ribbon"], u: "1f380" }, + { n: ["gift", "wrapped present"], u: "1f381" }, + { n: ["reminder ribbon"], u: "1f397-fe0f" }, + { n: ["admission tickets"], u: "1f39f-fe0f" }, + { n: ["ticket"], u: "1f3ab" }, + { n: ["medal", "military medal"], u: "1f396-fe0f" }, + { n: ["trophy"], u: "1f3c6" }, + { n: ["sports medal"], u: "1f3c5" }, + { n: ["first place medal"], u: "1f947" }, + { n: ["second place medal"], u: "1f948" }, + { n: ["third place medal"], u: "1f949" }, + { n: ["soccer", "soccer ball"], u: "26bd" }, + { n: ["baseball"], u: "26be" }, + { n: ["softball"], u: "1f94e" }, + { n: ["basketball", "basketball and hoop"], u: "1f3c0" }, + { n: ["volleyball"], u: "1f3d0" }, + { n: ["football", "american football"], u: "1f3c8" }, + { n: ["rugby football"], u: "1f3c9" }, + { n: ["tennis", "tennis racquet and ball"], u: "1f3be" }, + { n: ["flying disc"], u: "1f94f" }, + { n: ["bowling"], u: "1f3b3" }, + { n: ["cricket bat and ball"], u: "1f3cf" }, + { n: ["field hockey stick and ball"], u: "1f3d1" }, + { n: ["ice hockey stick and puck"], u: "1f3d2" }, + { n: ["lacrosse", "lacrosse stick and ball"], u: "1f94d" }, + { n: ["table tennis paddle and ball"], u: "1f3d3" }, + { n: ["badminton racquet and shuttlecock"], u: "1f3f8" }, + { n: ["boxing glove"], u: "1f94a" }, + { n: ["martial arts uniform"], u: "1f94b" }, + { n: ["goal net"], u: "1f945" }, + { n: ["golf", "flag in hole"], u: "26f3" }, + { n: ["ice skate"], u: "26f8-fe0f" }, + { n: ["fishing pole and fish"], u: "1f3a3" }, + { n: ["diving mask"], u: "1f93f" }, + { n: ["running shirt with sash"], u: "1f3bd" }, + { n: ["ski", "ski and ski boot"], u: "1f3bf" }, + { n: ["sled"], u: "1f6f7" }, + { n: ["curling stone"], u: "1f94c" }, + { n: ["dart", "direct hit"], u: "1f3af" }, + { n: ["yo-yo"], u: "1fa80" }, + { n: ["kite"], u: "1fa81" }, + { n: ["8ball", "billiards"], u: "1f3b1" }, + { n: ["crystal ball"], u: "1f52e" }, + { n: ["magic wand"], u: "1fa84" }, + { n: ["nazar amulet"], u: "1f9ff" }, + { n: ["hamsa"], u: "1faac" }, + { n: ["video game"], u: "1f3ae" }, + { n: ["joystick"], u: "1f579-fe0f" }, + { n: ["slot machine"], u: "1f3b0" }, + { n: ["game die"], u: "1f3b2" }, + { n: ["jigsaw", "jigsaw puzzle piece"], u: "1f9e9" }, + { n: ["teddy bear"], u: "1f9f8" }, + { n: ["pinata"], u: "1fa85" }, + { n: ["mirror ball"], u: "1faa9" }, + { n: ["nesting dolls"], u: "1fa86" }, + { n: ["spades", "black spade suit"], u: "2660-fe0f" }, + { n: ["hearts", "black heart suit"], u: "2665-fe0f" }, + { n: ["diamonds", "black diamond suit"], u: "2666-fe0f" }, + { n: ["clubs", "black club suit"], u: "2663-fe0f" }, + { n: ["chess pawn"], u: "265f-fe0f" }, + { n: ["black joker", "playing card black joker"], u: "1f0cf" }, + { n: ["mahjong", "mahjong tile red dragon"], u: "1f004" }, + { n: ["flower playing cards"], u: "1f3b4" }, + { n: ["performing arts"], u: "1f3ad" }, + { n: ["framed picture", "frame with picture"], u: "1f5bc-fe0f" }, + { n: ["art", "artist palette"], u: "1f3a8" }, + { n: ["thread", "spool of thread"], u: "1f9f5" }, + { n: ["sewing needle"], u: "1faa1" }, + { n: ["yarn", "ball of yarn"], u: "1f9f6" }, + { n: ["knot"], u: "1faa2" } + ], + objects: [ + { n: ["eyeglasses"], u: "1f453" }, + { n: ["sunglasses", "dark sunglasses"], u: "1f576-fe0f" }, + { n: ["goggles"], u: "1f97d" }, + { n: ["lab coat"], u: "1f97c" }, + { n: ["safety vest"], u: "1f9ba" }, + { n: ["necktie"], u: "1f454" }, + { n: ["shirt", "tshirt", "t-shirt"], u: "1f455" }, + { n: ["jeans"], u: "1f456" }, + { n: ["scarf"], u: "1f9e3" }, + { n: ["gloves"], u: "1f9e4" }, + { n: ["coat"], u: "1f9e5" }, + { n: ["socks"], u: "1f9e6" }, + { n: ["dress"], u: "1f457" }, + { n: ["kimono"], u: "1f458" }, + { n: ["sari"], u: "1f97b" }, + { n: ["one-piece swimsuit"], u: "1fa71" }, + { n: ["briefs"], u: "1fa72" }, + { n: ["shorts"], u: "1fa73" }, + { n: ["bikini"], u: "1f459" }, + { n: ["womans clothes"], u: "1f45a" }, + { n: ["purse"], u: "1f45b" }, + { n: ["handbag"], u: "1f45c" }, + { n: ["pouch"], u: "1f45d" }, + { n: ["shopping bags"], u: "1f6cd-fe0f" }, + { n: ["school satchel"], u: "1f392" }, + { n: ["thong sandal"], u: "1fa74" }, + { n: ["shoe", "mans shoe"], u: "1f45e" }, + { n: ["athletic shoe"], u: "1f45f" }, + { n: ["hiking boot"], u: "1f97e" }, + { n: ["flat shoe", "womans flat shoe"], u: "1f97f" }, + { n: ["high heel", "high-heeled shoe"], u: "1f460" }, + { n: ["sandal", "womans sandal"], u: "1f461" }, + { n: ["ballet shoes"], u: "1fa70" }, + { n: ["boot", "womans boots"], u: "1f462" }, + { n: ["crown"], u: "1f451" }, + { n: ["womans hat"], u: "1f452" }, + { n: ["tophat", "top hat"], u: "1f3a9" }, + { n: ["mortar board", "graduation cap"], u: "1f393" }, + { n: ["billed cap"], u: "1f9e2" }, + { n: ["military helmet"], u: "1fa96" }, { - n: ["man-man-girl", "family: man, man, girl"], - u: "1f468-200d-1f468-200d-1f467" + n: ["rescue worker\u2019s helmet", "helmet with white cross"], + u: "26d1-fe0f" }, + { n: ["prayer beads"], u: "1f4ff" }, + { n: ["lipstick"], u: "1f484" }, + { n: ["ring"], u: "1f48d" }, + { n: ["gem", "gem stone"], u: "1f48e" }, + { n: ["mute", "speaker with cancellation stroke"], u: "1f507" }, + { n: ["speaker"], u: "1f508" }, + { n: ["sound", "speaker with one sound wave"], u: "1f509" }, + { n: ["loud sound", "speaker with three sound waves"], u: "1f50a" }, + { n: ["loudspeaker", "public address loudspeaker"], u: "1f4e2" }, + { n: ["mega", "cheering megaphone"], u: "1f4e3" }, + { n: ["postal horn"], u: "1f4ef" }, + { n: ["bell"], u: "1f514" }, + { n: ["no bell", "bell with cancellation stroke"], u: "1f515" }, + { n: ["musical score"], u: "1f3bc" }, + { n: ["musical note"], u: "1f3b5" }, + { n: ["notes", "multiple musical notes"], u: "1f3b6" }, + { n: ["studio microphone"], u: "1f399-fe0f" }, + { n: ["level slider"], u: "1f39a-fe0f" }, + { n: ["control knobs"], u: "1f39b-fe0f" }, + { n: ["microphone"], u: "1f3a4" }, + { n: ["headphone", "headphones"], u: "1f3a7" }, + { n: ["radio"], u: "1f4fb" }, + { n: ["saxophone"], u: "1f3b7" }, + { n: ["accordion"], u: "1fa97" }, + { n: ["guitar"], u: "1f3b8" }, + { n: ["musical keyboard"], u: "1f3b9" }, + { n: ["trumpet"], u: "1f3ba" }, + { n: ["violin"], u: "1f3bb" }, + { n: ["banjo"], u: "1fa95" }, + { n: ["drum with drumsticks"], u: "1f941" }, + { n: ["long drum"], u: "1fa98" }, + { n: ["iphone", "mobile phone"], u: "1f4f1" }, { - n: ["man-man-girl-boy", "family: man, man, girl, boy"], - u: "1f468-200d-1f468-200d-1f467-200d-1f466" + n: ["calling", "mobile phone with rightwards arrow at left"], + u: "1f4f2" }, + { n: ["phone", "telephone", "black telephone"], u: "260e-fe0f" }, + { n: ["telephone receiver"], u: "1f4de" }, + { n: ["pager"], u: "1f4df" }, + { n: ["fax", "fax machine"], u: "1f4e0" }, + { n: ["battery"], u: "1f50b" }, + { n: ["low battery"], u: "1faab" }, + { n: ["electric plug"], u: "1f50c" }, + { n: ["computer", "personal computer"], u: "1f4bb" }, + { n: ["desktop computer"], u: "1f5a5-fe0f" }, + { n: ["printer"], u: "1f5a8-fe0f" }, + { n: ["keyboard"], u: "2328-fe0f" }, + { n: ["computer mouse", "three button mouse"], u: "1f5b1-fe0f" }, + { n: ["trackball"], u: "1f5b2-fe0f" }, + { n: ["minidisc"], u: "1f4bd" }, + { n: ["floppy disk"], u: "1f4be" }, + { n: ["cd", "optical disc"], u: "1f4bf" }, + { n: ["dvd"], u: "1f4c0" }, + { n: ["abacus"], u: "1f9ee" }, + { n: ["movie camera"], u: "1f3a5" }, + { n: ["film frames"], u: "1f39e-fe0f" }, + { n: ["film projector"], u: "1f4fd-fe0f" }, + { n: ["clapper", "clapper board"], u: "1f3ac" }, + { n: ["tv", "television"], u: "1f4fa" }, + { n: ["camera"], u: "1f4f7" }, + { n: ["camera with flash"], u: "1f4f8" }, + { n: ["video camera"], u: "1f4f9" }, + { n: ["vhs", "videocassette"], u: "1f4fc" }, + { n: ["mag", "left-pointing magnifying glass"], u: "1f50d" }, + { n: ["mag right", "right-pointing magnifying glass"], u: "1f50e" }, + { n: ["candle"], u: "1f56f-fe0f" }, + { n: ["bulb", "electric light bulb"], u: "1f4a1" }, + { n: ["flashlight", "electric torch"], u: "1f526" }, + { n: ["lantern", "izakaya lantern"], u: "1f3ee" }, + { n: ["diya lamp"], u: "1fa94" }, + { n: ["notebook with decorative cover"], u: "1f4d4" }, + { n: ["closed book"], u: "1f4d5" }, + { n: ["book", "open book"], u: "1f4d6" }, + { n: ["green book"], u: "1f4d7" }, + { n: ["blue book"], u: "1f4d8" }, + { n: ["orange book"], u: "1f4d9" }, + { n: ["books"], u: "1f4da" }, + { n: ["notebook"], u: "1f4d3" }, + { n: ["ledger"], u: "1f4d2" }, + { n: ["page with curl"], u: "1f4c3" }, + { n: ["scroll"], u: "1f4dc" }, + { n: ["page facing up"], u: "1f4c4" }, + { n: ["newspaper"], u: "1f4f0" }, + { n: ["rolled-up newspaper", "rolled up newspaper"], u: "1f5de-fe0f" }, + { n: ["bookmark tabs"], u: "1f4d1" }, + { n: ["bookmark"], u: "1f516" }, + { n: ["label"], u: "1f3f7-fe0f" }, + { n: ["moneybag", "money bag"], u: "1f4b0" }, + { n: ["coin"], u: "1fa99" }, + { n: ["yen", "banknote with yen sign"], u: "1f4b4" }, + { n: ["dollar", "banknote with dollar sign"], u: "1f4b5" }, + { n: ["euro", "banknote with euro sign"], u: "1f4b6" }, + { n: ["pound", "banknote with pound sign"], u: "1f4b7" }, + { n: ["money with wings"], u: "1f4b8" }, + { n: ["credit card"], u: "1f4b3" }, + { n: ["receipt"], u: "1f9fe" }, + { n: ["chart", "chart with upwards trend and yen sign"], u: "1f4b9" }, + { n: ["email", "envelope"], u: "2709-fe0f" }, + { n: ["e-mail", "e-mail symbol"], u: "1f4e7" }, + { n: ["incoming envelope"], u: "1f4e8" }, { - n: ["man-man-boy-boy", "family: man, man, boy, boy"], - u: "1f468-200d-1f468-200d-1f466-200d-1f466" + n: ["envelope with arrow", "envelope with downwards arrow above"], + u: "1f4e9" }, + { n: ["outbox tray"], u: "1f4e4" }, + { n: ["inbox tray"], u: "1f4e5" }, + { n: ["package"], u: "1f4e6" }, + { n: ["mailbox", "closed mailbox with raised flag"], u: "1f4eb" }, + { n: ["mailbox closed", "closed mailbox with lowered flag"], u: "1f4ea" }, + { n: ["mailbox with mail", "open mailbox with raised flag"], u: "1f4ec" }, { - n: ["man-man-girl-girl", "family: man, man, girl, girl"], - u: "1f468-200d-1f468-200d-1f467-200d-1f467" + n: ["mailbox with no mail", "open mailbox with lowered flag"], + u: "1f4ed" }, + { n: ["postbox"], u: "1f4ee" }, + { n: ["ballot box with ballot"], u: "1f5f3-fe0f" }, + { n: ["pencil", "pencil2"], u: "270f-fe0f" }, + { n: ["black nib"], u: "2712-fe0f" }, + { n: ["fountain pen", "lower left fountain pen"], u: "1f58b-fe0f" }, + { n: ["pen", "lower left ballpoint pen"], u: "1f58a-fe0f" }, + { n: ["paintbrush", "lower left paintbrush"], u: "1f58c-fe0f" }, + { n: ["crayon", "lower left crayon"], u: "1f58d-fe0f" }, + { n: ["memo", "pencil"], u: "1f4dd" }, + { n: ["briefcase"], u: "1f4bc" }, + { n: ["file folder"], u: "1f4c1" }, + { n: ["open file folder"], u: "1f4c2" }, + { n: ["card index dividers"], u: "1f5c2-fe0f" }, + { n: ["date", "calendar"], u: "1f4c5" }, + { n: ["calendar", "tear-off calendar"], u: "1f4c6" }, + { n: ["spiral notepad", "spiral note pad"], u: "1f5d2-fe0f" }, + { n: ["spiral calendar", "spiral calendar pad"], u: "1f5d3-fe0f" }, + { n: ["card index"], u: "1f4c7" }, + { n: ["chart with upwards trend"], u: "1f4c8" }, + { n: ["chart with downwards trend"], u: "1f4c9" }, + { n: ["bar chart"], u: "1f4ca" }, + { n: ["clipboard"], u: "1f4cb" }, + { n: ["pushpin"], u: "1f4cc" }, + { n: ["round pushpin"], u: "1f4cd" }, + { n: ["paperclip"], u: "1f4ce" }, + { n: ["linked paperclips"], u: "1f587-fe0f" }, + { n: ["straight ruler"], u: "1f4cf" }, + { n: ["triangular ruler"], u: "1f4d0" }, + { n: ["scissors", "black scissors"], u: "2702-fe0f" }, + { n: ["card file box"], u: "1f5c3-fe0f" }, + { n: ["file cabinet"], u: "1f5c4-fe0f" }, + { n: ["wastebasket"], u: "1f5d1-fe0f" }, + { n: ["lock"], u: "1f512" }, + { n: ["unlock", "open lock"], u: "1f513" }, + { n: ["lock with ink pen"], u: "1f50f" }, + { n: ["closed lock with key"], u: "1f510" }, + { n: ["key"], u: "1f511" }, + { n: ["old key"], u: "1f5dd-fe0f" }, + { n: ["hammer"], u: "1f528" }, + { n: ["axe"], u: "1fa93" }, + { n: ["pick"], u: "26cf-fe0f" }, + { n: ["hammer and pick"], u: "2692-fe0f" }, + { n: ["hammer and wrench"], u: "1f6e0-fe0f" }, + { n: ["dagger", "dagger knife"], u: "1f5e1-fe0f" }, + { n: ["crossed swords"], u: "2694-fe0f" }, + { n: ["gun", "pistol"], u: "1f52b" }, + { n: ["boomerang"], u: "1fa83" }, + { n: ["bow and arrow"], u: "1f3f9" }, + { n: ["shield"], u: "1f6e1-fe0f" }, + { n: ["carpentry saw"], u: "1fa9a" }, + { n: ["wrench"], u: "1f527" }, + { n: ["screwdriver"], u: "1fa9b" }, + { n: ["nut and bolt"], u: "1f529" }, + { n: ["gear"], u: "2699-fe0f" }, + { n: ["clamp", "compression"], u: "1f5dc-fe0f" }, + { n: ["scales", "balance scale"], u: "2696-fe0f" }, + { n: ["probing cane"], u: "1f9af" }, + { n: ["link", "link symbol"], u: "1f517" }, + { n: ["chains"], u: "26d3-fe0f" }, + { n: ["hook"], u: "1fa9d" }, + { n: ["toolbox"], u: "1f9f0" }, + { n: ["magnet"], u: "1f9f2" }, + { n: ["ladder"], u: "1fa9c" }, + { n: ["alembic"], u: "2697-fe0f" }, + { n: ["test tube"], u: "1f9ea" }, + { n: ["petri dish"], u: "1f9eb" }, + { n: ["dna", "dna double helix"], u: "1f9ec" }, + { n: ["microscope"], u: "1f52c" }, + { n: ["telescope"], u: "1f52d" }, + { n: ["satellite antenna"], u: "1f4e1" }, + { n: ["syringe"], u: "1f489" }, + { n: ["drop of blood"], u: "1fa78" }, + { n: ["pill"], u: "1f48a" }, + { n: ["adhesive bandage"], u: "1fa79" }, + { n: ["crutch"], u: "1fa7c" }, + { n: ["stethoscope"], u: "1fa7a" }, + { n: ["x-ray"], u: "1fa7b" }, + { n: ["door"], u: "1f6aa" }, + { n: ["elevator"], u: "1f6d7" }, + { n: ["mirror"], u: "1fa9e" }, + { n: ["window"], u: "1fa9f" }, + { n: ["bed"], u: "1f6cf-fe0f" }, + { n: ["couch and lamp"], u: "1f6cb-fe0f" }, + { n: ["chair"], u: "1fa91" }, + { n: ["toilet"], u: "1f6bd" }, + { n: ["plunger"], u: "1faa0" }, + { n: ["shower"], u: "1f6bf" }, + { n: ["bathtub"], u: "1f6c1" }, + { n: ["mouse trap"], u: "1faa4" }, + { n: ["razor"], u: "1fa92" }, + { n: ["lotion bottle"], u: "1f9f4" }, + { n: ["safety pin"], u: "1f9f7" }, + { n: ["broom"], u: "1f9f9" }, + { n: ["basket"], u: "1f9fa" }, + { n: ["roll of paper"], u: "1f9fb" }, + { n: ["bucket"], u: "1faa3" }, + { n: ["soap", "bar of soap"], u: "1f9fc" }, + { n: ["bubbles"], u: "1fae7" }, + { n: ["toothbrush"], u: "1faa5" }, + { n: ["sponge"], u: "1f9fd" }, + { n: ["fire extinguisher"], u: "1f9ef" }, + { n: ["shopping trolley"], u: "1f6d2" }, + { n: ["smoking", "smoking symbol"], u: "1f6ac" }, + { n: ["coffin"], u: "26b0-fe0f" }, + { n: ["headstone"], u: "1faa6" }, + { n: ["funeral urn"], u: "26b1-fe0f" }, + { n: ["moyai"], u: "1f5ff" }, + { n: ["placard"], u: "1faa7" }, + { n: ["identification card"], u: "1faaa" } + ], + symbols: [ + { n: ["atm", "automated teller machine"], u: "1f3e7" }, { - n: ["woman-woman-boy", "family: woman, woman, boy"], - u: "1f469-200d-1f469-200d-1f466" + n: ["put litter in its place", "put litter in its place symbol"], + u: "1f6ae" }, + { n: ["potable water", "potable water symbol"], u: "1f6b0" }, + { n: ["wheelchair", "wheelchair symbol"], u: "267f" }, + { n: ["mens", "mens symbol"], u: "1f6b9" }, + { n: ["womens", "womens symbol"], u: "1f6ba" }, + { n: ["restroom"], u: "1f6bb" }, + { n: ["baby symbol"], u: "1f6bc" }, + { n: ["wc", "water closet"], u: "1f6be" }, + { n: ["passport control"], u: "1f6c2" }, + { n: ["customs"], u: "1f6c3" }, + { n: ["baggage claim"], u: "1f6c4" }, + { n: ["left luggage"], u: "1f6c5" }, + { n: ["warning", "warning sign"], u: "26a0-fe0f" }, + { n: ["children crossing"], u: "1f6b8" }, + { n: ["no entry"], u: "26d4" }, + { n: ["no entry sign"], u: "1f6ab" }, + { n: ["no bicycles"], u: "1f6b3" }, + { n: ["no smoking", "no smoking symbol"], u: "1f6ad" }, + { n: ["do not litter", "do not litter symbol"], u: "1f6af" }, + { n: ["non-potable water", "non-potable water symbol"], u: "1f6b1" }, + { n: ["no pedestrians"], u: "1f6b7" }, + { n: ["no mobile phones"], u: "1f4f5" }, + { n: ["underage", "no one under eighteen symbol"], u: "1f51e" }, + { n: ["radioactive", "radioactive sign"], u: "2622-fe0f" }, + { n: ["biohazard", "biohazard sign"], u: "2623-fe0f" }, + { n: ["arrow up", "upwards black arrow"], u: "2b06-fe0f" }, + { n: ["north east arrow", "arrow upper right"], u: "2197-fe0f" }, + { n: ["arrow right", "black rightwards arrow"], u: "27a1-fe0f" }, + { n: ["south east arrow", "arrow lower right"], u: "2198-fe0f" }, + { n: ["arrow down", "downwards black arrow"], u: "2b07-fe0f" }, + { n: ["south west arrow", "arrow lower left"], u: "2199-fe0f" }, + { n: ["arrow left", "leftwards black arrow"], u: "2b05-fe0f" }, + { n: ["north west arrow", "arrow upper left"], u: "2196-fe0f" }, + { n: ["up down arrow", "arrow up down"], u: "2195-fe0f" }, + { n: ["left right arrow"], u: "2194-fe0f" }, + { n: ["leftwards arrow with hook"], u: "21a9-fe0f" }, + { n: ["arrow right hook", "rightwards arrow with hook"], u: "21aa-fe0f" }, { - n: ["woman-woman-girl", "family: woman, woman, girl"], - u: "1f469-200d-1f469-200d-1f467" + n: ["arrow heading up", "arrow pointing rightwards then curving upwards"], + u: "2934-fe0f" }, { - n: ["woman-woman-girl-boy", "family: woman, woman, girl, boy"], - u: "1f469-200d-1f469-200d-1f467-200d-1f466" + n: [ + "arrow heading down", + "arrow pointing rightwards then curving downwards" + ], + u: "2935-fe0f" }, { - n: ["woman-woman-boy-boy", "family: woman, woman, boy, boy"], - u: "1f469-200d-1f469-200d-1f466-200d-1f466" + n: [ + "arrows clockwise", + "clockwise downwards and upwards open circle arrows" + ], + u: "1f503" }, { - n: ["woman-woman-girl-girl", "family: woman, woman, girl, girl"], - u: "1f469-200d-1f469-200d-1f467-200d-1f467" + n: [ + "arrows counterclockwise", + "anticlockwise downwards and upwards open circle arrows" + ], + u: "1f504" }, - { n: ["man-boy", "family: man, boy"], u: "1f468-200d-1f466" }, + { n: ["back", "back with leftwards arrow above"], u: "1f519" }, + { n: ["end", "end with leftwards arrow above"], u: "1f51a" }, { - n: ["man-boy-boy", "family: man, boy, boy"], - u: "1f468-200d-1f466-200d-1f466" + n: ["on", "on with exclamation mark with left right arrow above"], + u: "1f51b" }, - { n: ["man-girl", "family: man, girl"], u: "1f468-200d-1f467" }, + { n: ["soon", "soon with rightwards arrow above"], u: "1f51c" }, + { n: ["top", "top with upwards arrow above"], u: "1f51d" }, + { n: ["place of worship"], u: "1f6d0" }, + { n: ["atom symbol"], u: "269b-fe0f" }, + { n: ["om", "om symbol"], u: "1f549-fe0f" }, + { n: ["star of david"], u: "2721-fe0f" }, + { n: ["wheel of dharma"], u: "2638-fe0f" }, + { n: ["yin yang"], u: "262f-fe0f" }, + { n: ["latin cross"], u: "271d-fe0f" }, + { n: ["orthodox cross"], u: "2626-fe0f" }, + { n: ["star and crescent"], u: "262a-fe0f" }, + { n: ["peace symbol"], u: "262e-fe0f" }, + { n: ["menorah with nine branches"], u: "1f54e" }, + { n: ["six pointed star", "six pointed star with middle dot"], u: "1f52f" }, + { n: ["aries"], u: "2648" }, + { n: ["taurus"], u: "2649" }, + { n: ["gemini"], u: "264a" }, + { n: ["cancer"], u: "264b" }, + { n: ["leo"], u: "264c" }, + { n: ["virgo"], u: "264d" }, + { n: ["libra"], u: "264e" }, + { n: ["scorpius"], u: "264f" }, + { n: ["sagittarius"], u: "2650" }, + { n: ["capricorn"], u: "2651" }, + { n: ["aquarius"], u: "2652" }, + { n: ["pisces"], u: "2653" }, + { n: ["ophiuchus"], u: "26ce" }, + { n: ["twisted rightwards arrows"], u: "1f500" }, { - n: ["man-girl-boy", "family: man, girl, boy"], - u: "1f468-200d-1f467-200d-1f466" + n: ["repeat", "clockwise rightwards and leftwards open circle arrows"], + u: "1f501" }, { - n: ["man-girl-girl", "family: man, girl, girl"], - u: "1f468-200d-1f467-200d-1f467" + n: [ + "repeat one", + "clockwise rightwards and leftwards open circle arrows with circled one overlay" + ], + u: "1f502" }, - { n: ["woman-boy", "family: woman, boy"], u: "1f469-200d-1f466" }, + { n: ["arrow forward", "black right-pointing triangle"], u: "25b6-fe0f" }, + { n: ["fast forward", "black right-pointing double triangle"], u: "23e9" }, { - n: ["woman-boy-boy", "family: woman, boy, boy"], - u: "1f469-200d-1f466-200d-1f466" + n: [ + "next track button", + "black right pointing double triangle with vertical bar" + ], + u: "23ed-fe0f" }, - { n: ["woman-girl", "family: woman, girl"], u: "1f469-200d-1f467" }, { - n: ["woman-girl-boy", "family: woman, girl, boy"], - u: "1f469-200d-1f467-200d-1f466" + n: [ + "play or pause button", + "black right pointing triangle with double vertical bar" + ], + u: "23ef-fe0f" }, + { n: ["arrow backward", "black left-pointing triangle"], u: "25c0-fe0f" }, + { n: ["rewind", "black left-pointing double triangle"], u: "23ea" }, { - n: ["woman-girl-girl", "family: woman, girl, girl"], - u: "1f469-200d-1f467-200d-1f467" + n: [ + "last track button", + "black left pointing double triangle with vertical bar" + ], + u: "23ee-fe0f" }, - { n: ["speaking head", "speaking head in silhouette"], u: "1f5e3-fe0f" }, - { n: ["bust in silhouette"], u: "1f464" }, - { n: ["busts in silhouette"], u: "1f465" }, - { n: ["people hugging"], u: "1fac2" }, - { n: ["footprints"], u: "1f463" } - ], - animals_nature: [ - { n: ["monkey face"], u: "1f435" }, - { n: ["monkey"], u: "1f412" }, - { n: ["gorilla"], u: "1f98d" }, - { n: ["orangutan"], u: "1f9a7" }, - { n: ["dog", "dog face"], u: "1f436" }, - { n: ["dog", "dog2"], u: "1f415" }, - { n: ["guide dog"], u: "1f9ae" }, - { n: ["service dog"], u: "1f415-200d-1f9ba" }, - { n: ["poodle"], u: "1f429" }, - { n: ["wolf", "wolf face"], u: "1f43a" }, - { n: ["fox face"], u: "1f98a" }, - { n: ["raccoon"], u: "1f99d" }, - { n: ["cat", "cat face"], u: "1f431" }, - { n: ["cat", "cat2"], u: "1f408" }, - { n: ["black cat"], u: "1f408-200d-2b1b" }, - { n: ["lion face"], u: "1f981" }, - { n: ["tiger", "tiger face"], u: "1f42f" }, - { n: ["tiger", "tiger2"], u: "1f405" }, - { n: ["leopard"], u: "1f406" }, - { n: ["horse", "horse face"], u: "1f434" }, - { n: ["horse", "racehorse"], u: "1f40e" }, - { n: ["unicorn face"], u: "1f984" }, - { n: ["zebra face"], u: "1f993" }, - { n: ["deer"], u: "1f98c" }, - { n: ["bison"], u: "1f9ac" }, - { n: ["cow", "cow face"], u: "1f42e" }, - { n: ["ox"], u: "1f402" }, - { n: ["water buffalo"], u: "1f403" }, - { n: ["cow", "cow2"], u: "1f404" }, - { n: ["pig", "pig face"], u: "1f437" }, - { n: ["pig", "pig2"], u: "1f416" }, - { n: ["boar"], u: "1f417" }, - { n: ["pig nose"], u: "1f43d" }, - { n: ["ram"], u: "1f40f" }, - { n: ["sheep"], u: "1f411" }, - { n: ["goat"], u: "1f410" }, - { n: ["dromedary camel"], u: "1f42a" }, - { n: ["camel", "bactrian camel"], u: "1f42b" }, - { n: ["llama"], u: "1f999" }, - { n: ["giraffe face"], u: "1f992" }, - { n: ["elephant"], u: "1f418" }, - { n: ["mammoth"], u: "1f9a3" }, - { n: ["rhinoceros"], u: "1f98f" }, - { n: ["hippopotamus"], u: "1f99b" }, - { n: ["mouse", "mouse face"], u: "1f42d" }, - { n: ["mouse", "mouse2"], u: "1f401" }, - { n: ["rat"], u: "1f400" }, - { n: ["hamster", "hamster face"], u: "1f439" }, - { n: ["rabbit", "rabbit face"], u: "1f430" }, - { n: ["rabbit", "rabbit2"], u: "1f407" }, - { n: ["chipmunk"], u: "1f43f-fe0f" }, - { n: ["beaver"], u: "1f9ab" }, - { n: ["hedgehog"], u: "1f994" }, - { n: ["bat"], u: "1f987" }, - { n: ["bear", "bear face"], u: "1f43b" }, - { n: ["polar bear"], u: "1f43b-200d-2744-fe0f" }, - { n: ["koala"], u: "1f428" }, - { n: ["panda face"], u: "1f43c" }, - { n: ["sloth"], u: "1f9a5" }, - { n: ["otter"], u: "1f9a6" }, - { n: ["skunk"], u: "1f9a8" }, - { n: ["kangaroo"], u: "1f998" }, - { n: ["badger"], u: "1f9a1" }, - { n: ["feet", "paw prints"], u: "1f43e" }, - { n: ["turkey"], u: "1f983" }, - { n: ["chicken"], u: "1f414" }, - { n: ["rooster"], u: "1f413" }, - { n: ["hatching chick"], u: "1f423" }, - { n: ["baby chick"], u: "1f424" }, - { n: ["hatched chick", "front-facing baby chick"], u: "1f425" }, - { n: ["bird"], u: "1f426" }, - { n: ["penguin"], u: "1f427" }, - { n: ["dove", "dove of peace"], u: "1f54a-fe0f" }, - { n: ["eagle"], u: "1f985" }, - { n: ["duck"], u: "1f986" }, - { n: ["swan"], u: "1f9a2" }, - { n: ["owl"], u: "1f989" }, - { n: ["dodo"], u: "1f9a4" }, - { n: ["feather"], u: "1fab6" }, - { n: ["flamingo"], u: "1f9a9" }, - { n: ["peacock"], u: "1f99a" }, - { n: ["parrot"], u: "1f99c" }, - { n: ["frog", "frog face"], u: "1f438" }, - { n: ["crocodile"], u: "1f40a" }, - { n: ["turtle"], u: "1f422" }, - { n: ["lizard"], u: "1f98e" }, - { n: ["snake"], u: "1f40d" }, - { n: ["dragon face"], u: "1f432" }, - { n: ["dragon"], u: "1f409" }, - { n: ["sauropod"], u: "1f995" }, - { n: ["t-rex"], u: "1f996" }, - { n: ["whale", "spouting whale"], u: "1f433" }, - { n: ["whale", "whale2"], u: "1f40b" }, - { n: ["dolphin", "flipper"], u: "1f42c" }, - { n: ["seal"], u: "1f9ad" }, - { n: ["fish"], u: "1f41f" }, - { n: ["tropical fish"], u: "1f420" }, - { n: ["blowfish"], u: "1f421" }, - { n: ["shark"], u: "1f988" }, - { n: ["octopus"], u: "1f419" }, - { n: ["shell", "spiral shell"], u: "1f41a" }, - { n: ["coral"], u: "1fab8" }, - { n: ["snail"], u: "1f40c" }, - { n: ["butterfly"], u: "1f98b" }, - { n: ["bug"], u: "1f41b" }, - { n: ["ant"], u: "1f41c" }, - { n: ["bee", "honeybee"], u: "1f41d" }, - { n: ["beetle"], u: "1fab2" }, - { n: ["ladybug", "lady beetle"], u: "1f41e" }, - { n: ["cricket"], u: "1f997" }, - { n: ["cockroach"], u: "1fab3" }, - { n: ["spider"], u: "1f577-fe0f" }, - { n: ["spider web"], u: "1f578-fe0f" }, - { n: ["scorpion"], u: "1f982" }, - { n: ["mosquito"], u: "1f99f" }, - { n: ["fly"], u: "1fab0" }, - { n: ["worm"], u: "1fab1" }, - { n: ["microbe"], u: "1f9a0" }, - { n: ["bouquet"], u: "1f490" }, - { n: ["cherry blossom"], u: "1f338" }, - { n: ["white flower"], u: "1f4ae" }, - { n: ["lotus"], u: "1fab7" }, - { n: ["rosette"], u: "1f3f5-fe0f" }, - { n: ["rose"], u: "1f339" }, - { n: ["wilted flower"], u: "1f940" }, - { n: ["hibiscus"], u: "1f33a" }, - { n: ["sunflower"], u: "1f33b" }, - { n: ["blossom"], u: "1f33c" }, - { n: ["tulip"], u: "1f337" }, - { n: ["seedling"], u: "1f331" }, - { n: ["potted plant"], u: "1fab4" }, - { n: ["evergreen tree"], u: "1f332" }, - { n: ["deciduous tree"], u: "1f333" }, - { n: ["palm tree"], u: "1f334" }, - { n: ["cactus"], u: "1f335" }, - { n: ["ear of rice"], u: "1f33e" }, - { n: ["herb"], u: "1f33f" }, - { n: ["shamrock"], u: "2618-fe0f" }, - { n: ["four leaf clover"], u: "1f340" }, - { n: ["maple leaf"], u: "1f341" }, - { n: ["fallen leaf"], u: "1f342" }, - { n: ["leaves", "leaf fluttering in wind"], u: "1f343" }, - { n: ["empty nest"], u: "1fab9" }, - { n: ["nest with eggs"], u: "1faba" } - ], - food_drink: [ - { n: ["grapes"], u: "1f347" }, - { n: ["melon"], u: "1f348" }, - { n: ["watermelon"], u: "1f349" }, - { n: ["tangerine"], u: "1f34a" }, - { n: ["lemon"], u: "1f34b" }, - { n: ["banana"], u: "1f34c" }, - { n: ["pineapple"], u: "1f34d" }, - { n: ["mango"], u: "1f96d" }, - { n: ["apple", "red apple"], u: "1f34e" }, - { n: ["green apple"], u: "1f34f" }, - { n: ["pear"], u: "1f350" }, - { n: ["peach"], u: "1f351" }, - { n: ["cherries"], u: "1f352" }, - { n: ["strawberry"], u: "1f353" }, - { n: ["blueberries"], u: "1fad0" }, - { n: ["kiwifruit"], u: "1f95d" }, - { n: ["tomato"], u: "1f345" }, - { n: ["olive"], u: "1fad2" }, - { n: ["coconut"], u: "1f965" }, - { n: ["avocado"], u: "1f951" }, - { n: ["eggplant", "aubergine"], u: "1f346" }, - { n: ["potato"], u: "1f954" }, - { n: ["carrot"], u: "1f955" }, - { n: ["corn", "ear of maize"], u: "1f33d" }, - { n: ["hot pepper"], u: "1f336-fe0f" }, - { n: ["bell pepper"], u: "1fad1" }, - { n: ["cucumber"], u: "1f952" }, - { n: ["leafy green"], u: "1f96c" }, - { n: ["broccoli"], u: "1f966" }, - { n: ["garlic"], u: "1f9c4" }, - { n: ["onion"], u: "1f9c5" }, - { n: ["mushroom"], u: "1f344" }, - { n: ["peanuts"], u: "1f95c" }, - { n: ["beans"], u: "1fad8" }, - { n: ["chestnut"], u: "1f330" }, - { n: ["bread"], u: "1f35e" }, - { n: ["croissant"], u: "1f950" }, - { n: ["baguette bread"], u: "1f956" }, - { n: ["flatbread"], u: "1fad3" }, - { n: ["pretzel"], u: "1f968" }, - { n: ["bagel"], u: "1f96f" }, - { n: ["pancakes"], u: "1f95e" }, - { n: ["waffle"], u: "1f9c7" }, - { n: ["cheese wedge"], u: "1f9c0" }, - { n: ["meat on bone"], u: "1f356" }, - { n: ["poultry leg"], u: "1f357" }, - { n: ["cut of meat"], u: "1f969" }, - { n: ["bacon"], u: "1f953" }, - { n: ["hamburger"], u: "1f354" }, - { n: ["fries", "french fries"], u: "1f35f" }, - { n: ["pizza", "slice of pizza"], u: "1f355" }, - { n: ["hotdog", "hot dog"], u: "1f32d" }, - { n: ["sandwich"], u: "1f96a" }, - { n: ["taco"], u: "1f32e" }, - { n: ["burrito"], u: "1f32f" }, - { n: ["tamale"], u: "1fad4" }, - { n: ["stuffed flatbread"], u: "1f959" }, - { n: ["falafel"], u: "1f9c6" }, - { n: ["egg"], u: "1f95a" }, - { n: ["cooking", "fried egg"], u: "1f373" }, - { n: ["shallow pan of food"], u: "1f958" }, - { n: ["stew", "pot of food"], u: "1f372" }, - { n: ["fondue"], u: "1fad5" }, - { n: ["bowl with spoon"], u: "1f963" }, - { n: ["green salad"], u: "1f957" }, - { n: ["popcorn"], u: "1f37f" }, - { n: ["butter"], u: "1f9c8" }, - { n: ["salt", "salt shaker"], u: "1f9c2" }, - { n: ["canned food"], u: "1f96b" }, - { n: ["bento", "bento box"], u: "1f371" }, - { n: ["rice cracker"], u: "1f358" }, - { n: ["rice ball"], u: "1f359" }, - { n: ["rice", "cooked rice"], u: "1f35a" }, - { n: ["curry", "curry and rice"], u: "1f35b" }, - { n: ["ramen", "steaming bowl"], u: "1f35c" }, - { n: ["spaghetti"], u: "1f35d" }, - { n: ["sweet potato", "roasted sweet potato"], u: "1f360" }, - { n: ["oden"], u: "1f362" }, - { n: ["sushi"], u: "1f363" }, - { n: ["fried shrimp"], u: "1f364" }, - { n: ["fish cake", "fish cake with swirl design"], u: "1f365" }, - { n: ["moon cake"], u: "1f96e" }, - { n: ["dango"], u: "1f361" }, - { n: ["dumpling"], u: "1f95f" }, - { n: ["fortune cookie"], u: "1f960" }, - { n: ["takeout box"], u: "1f961" }, - { n: ["crab"], u: "1f980" }, - { n: ["lobster"], u: "1f99e" }, - { n: ["shrimp"], u: "1f990" }, - { n: ["squid"], u: "1f991" }, - { n: ["oyster"], u: "1f9aa" }, - { n: ["icecream", "soft ice cream"], u: "1f366" }, - { n: ["shaved ice"], u: "1f367" }, - { n: ["ice cream"], u: "1f368" }, - { n: ["doughnut"], u: "1f369" }, - { n: ["cookie"], u: "1f36a" }, - { n: ["birthday", "birthday cake"], u: "1f382" }, - { n: ["cake", "shortcake"], u: "1f370" }, - { n: ["cupcake"], u: "1f9c1" }, - { n: ["pie"], u: "1f967" }, - { n: ["chocolate bar"], u: "1f36b" }, - { n: ["candy"], u: "1f36c" }, - { n: ["lollipop"], u: "1f36d" }, - { n: ["custard"], u: "1f36e" }, - { n: ["honey pot"], u: "1f36f" }, - { n: ["baby bottle"], u: "1f37c" }, - { n: ["glass of milk"], u: "1f95b" }, - { n: ["coffee", "hot beverage"], u: "2615" }, - { n: ["teapot"], u: "1fad6" }, - { n: ["tea", "teacup without handle"], u: "1f375" }, - { n: ["sake", "sake bottle and cup"], u: "1f376" }, - { n: ["champagne", "bottle with popping cork"], u: "1f37e" }, - { n: ["wine glass"], u: "1f377" }, - { n: ["cocktail", "cocktail glass"], u: "1f378" }, - { n: ["tropical drink"], u: "1f379" }, - { n: ["beer", "beer mug"], u: "1f37a" }, - { n: ["beers", "clinking beer mugs"], u: "1f37b" }, - { n: ["clinking glasses"], u: "1f942" }, - { n: ["tumbler glass"], u: "1f943" }, - { n: ["pouring liquid"], u: "1fad7" }, - { n: ["cup with straw"], u: "1f964" }, - { n: ["bubble tea"], u: "1f9cb" }, - { n: ["beverage box"], u: "1f9c3" }, - { n: ["mate drink"], u: "1f9c9" }, - { n: ["ice cube"], u: "1f9ca" }, - { n: ["chopsticks"], u: "1f962" }, - { n: ["knife fork plate", "fork and knife with plate"], u: "1f37d-fe0f" }, - { n: ["fork and knife"], u: "1f374" }, - { n: ["spoon"], u: "1f944" }, - { n: ["hocho", "knife"], u: "1f52a" }, - { n: ["jar"], u: "1fad9" }, - { n: ["amphora"], u: "1f3fa" } - ], - travel_places: [ - { n: ["earth africa", "earth globe europe-africa"], u: "1f30d" }, - { n: ["earth americas", "earth globe americas"], u: "1f30e" }, - { n: ["earth asia", "earth globe asia-australia"], u: "1f30f" }, - { n: ["globe with meridians"], u: "1f310" }, - { n: ["world map"], u: "1f5fa-fe0f" }, - { n: ["japan", "silhouette of japan"], u: "1f5fe" }, - { n: ["compass"], u: "1f9ed" }, - { n: ["snow-capped mountain", "snow capped mountain"], u: "1f3d4-fe0f" }, - { n: ["mountain"], u: "26f0-fe0f" }, - { n: ["volcano"], u: "1f30b" }, - { n: ["mount fuji"], u: "1f5fb" }, - { n: ["camping"], u: "1f3d5-fe0f" }, - { n: ["beach with umbrella"], u: "1f3d6-fe0f" }, - { n: ["desert"], u: "1f3dc-fe0f" }, - { n: ["desert island"], u: "1f3dd-fe0f" }, - { n: ["national park"], u: "1f3de-fe0f" }, - { n: ["stadium"], u: "1f3df-fe0f" }, - { n: ["classical building"], u: "1f3db-fe0f" }, - { n: ["building construction"], u: "1f3d7-fe0f" }, - { n: ["brick", "bricks"], u: "1f9f1" }, - { n: ["rock"], u: "1faa8" }, - { n: ["wood"], u: "1fab5" }, - { n: ["hut"], u: "1f6d6" }, - { n: ["houses", "house buildings"], u: "1f3d8-fe0f" }, - { n: ["derelict house", "derelict house building"], u: "1f3da-fe0f" }, - { n: ["house", "house building"], u: "1f3e0" }, - { n: ["house with garden"], u: "1f3e1" }, - { n: ["office", "office building"], u: "1f3e2" }, - { n: ["post office", "japanese post office"], u: "1f3e3" }, - { n: ["european post office"], u: "1f3e4" }, - { n: ["hospital"], u: "1f3e5" }, - { n: ["bank"], u: "1f3e6" }, - { n: ["hotel"], u: "1f3e8" }, - { n: ["love hotel"], u: "1f3e9" }, - { n: ["convenience store"], u: "1f3ea" }, - { n: ["school"], u: "1f3eb" }, - { n: ["department store"], u: "1f3ec" }, - { n: ["factory"], u: "1f3ed" }, - { n: ["japanese castle"], u: "1f3ef" }, - { n: ["european castle"], u: "1f3f0" }, - { n: ["wedding"], u: "1f492" }, - { n: ["tokyo tower"], u: "1f5fc" }, - { n: ["statue of liberty"], u: "1f5fd" }, - { n: ["church"], u: "26ea" }, - { n: ["mosque"], u: "1f54c" }, - { n: ["hindu temple"], u: "1f6d5" }, - { n: ["synagogue"], u: "1f54d" }, - { n: ["shinto shrine"], u: "26e9-fe0f" }, - { n: ["kaaba"], u: "1f54b" }, - { n: ["fountain"], u: "26f2" }, - { n: ["tent"], u: "26fa" }, - { n: ["foggy"], u: "1f301" }, - { n: ["night with stars"], u: "1f303" }, - { n: ["cityscape"], u: "1f3d9-fe0f" }, - { n: ["sunrise over mountains"], u: "1f304" }, - { n: ["sunrise"], u: "1f305" }, - { n: ["city sunset", "cityscape at dusk"], u: "1f306" }, - { n: ["city sunrise", "sunset over buildings"], u: "1f307" }, - { n: ["bridge at night"], u: "1f309" }, - { n: ["hotsprings", "hot springs"], u: "2668-fe0f" }, - { n: ["carousel horse"], u: "1f3a0" }, - { n: ["playground slide"], u: "1f6dd" }, - { n: ["ferris wheel"], u: "1f3a1" }, - { n: ["roller coaster"], u: "1f3a2" }, - { n: ["barber", "barber pole"], u: "1f488" }, - { n: ["circus tent"], u: "1f3aa" }, - { n: ["steam locomotive"], u: "1f682" }, - { n: ["railway car"], u: "1f683" }, - { n: ["high-speed train", "bullettrain side"], u: "1f684" }, + { n: ["arrow up small", "up-pointing small red triangle"], u: "1f53c" }, + { n: ["arrow double up", "black up-pointing double triangle"], u: "23eb" }, + { n: ["arrow down small", "down-pointing small red triangle"], u: "1f53d" }, { - n: ["bullettrain front", "high-speed train with bullet nose"], - u: "1f685" + n: ["arrow double down", "black down-pointing double triangle"], + u: "23ec" }, - { n: ["train", "train2"], u: "1f686" }, - { n: ["metro"], u: "1f687" }, - { n: ["light rail"], u: "1f688" }, - { n: ["station"], u: "1f689" }, - { n: ["tram"], u: "1f68a" }, - { n: ["monorail"], u: "1f69d" }, - { n: ["mountain railway"], u: "1f69e" }, - { n: ["train", "tram car"], u: "1f68b" }, - { n: ["bus"], u: "1f68c" }, - { n: ["oncoming bus"], u: "1f68d" }, - { n: ["trolleybus"], u: "1f68e" }, - { n: ["minibus"], u: "1f690" }, - { n: ["ambulance"], u: "1f691" }, - { n: ["fire engine"], u: "1f692" }, - { n: ["police car"], u: "1f693" }, - { n: ["oncoming police car"], u: "1f694" }, - { n: ["taxi"], u: "1f695" }, - { n: ["oncoming taxi"], u: "1f696" }, - { n: ["car", "red car", "automobile"], u: "1f697" }, - { n: ["oncoming automobile"], u: "1f698" }, - { n: ["blue car", "recreational vehicle"], u: "1f699" }, - { n: ["pickup truck"], u: "1f6fb" }, - { n: ["truck", "delivery truck"], u: "1f69a" }, - { n: ["articulated lorry"], u: "1f69b" }, - { n: ["tractor"], u: "1f69c" }, - { n: ["racing car"], u: "1f3ce-fe0f" }, - { n: ["motorcycle", "racing motorcycle"], u: "1f3cd-fe0f" }, - { n: ["motor scooter"], u: "1f6f5" }, - { n: ["manual wheelchair"], u: "1f9bd" }, - { n: ["motorized wheelchair"], u: "1f9bc" }, - { n: ["auto rickshaw"], u: "1f6fa" }, - { n: ["bike", "bicycle"], u: "1f6b2" }, - { n: ["scooter"], u: "1f6f4" }, - { n: ["skateboard"], u: "1f6f9" }, - { n: ["roller skate"], u: "1f6fc" }, - { n: ["busstop", "bus stop"], u: "1f68f" }, - { n: ["motorway"], u: "1f6e3-fe0f" }, - { n: ["railway track"], u: "1f6e4-fe0f" }, - { n: ["oil drum"], u: "1f6e2-fe0f" }, - { n: ["fuelpump", "fuel pump"], u: "26fd" }, - { n: ["wheel"], u: "1f6de" }, - { n: ["rotating light", "police cars revolving light"], u: "1f6a8" }, - { n: ["traffic light", "horizontal traffic light"], u: "1f6a5" }, - { n: ["vertical traffic light"], u: "1f6a6" }, - { n: ["octagonal sign"], u: "1f6d1" }, - { n: ["construction", "construction sign"], u: "1f6a7" }, - { n: ["anchor"], u: "2693" }, - { n: ["ring buoy"], u: "1f6df" }, - { n: ["boat", "sailboat"], u: "26f5" }, - { n: ["canoe"], u: "1f6f6" }, - { n: ["speedboat"], u: "1f6a4" }, - { n: ["passenger ship"], u: "1f6f3-fe0f" }, - { n: ["ferry"], u: "26f4-fe0f" }, - { n: ["motor boat"], u: "1f6e5-fe0f" }, - { n: ["ship"], u: "1f6a2" }, - { n: ["airplane"], u: "2708-fe0f" }, - { n: ["small airplane"], u: "1f6e9-fe0f" }, - { n: ["airplane departure"], u: "1f6eb" }, - { n: ["airplane arriving"], u: "1f6ec" }, - { n: ["parachute"], u: "1fa82" }, - { n: ["seat"], u: "1f4ba" }, - { n: ["helicopter"], u: "1f681" }, - { n: ["suspension railway"], u: "1f69f" }, - { n: ["mountain cableway"], u: "1f6a0" }, - { n: ["aerial tramway"], u: "1f6a1" }, - { n: ["satellite"], u: "1f6f0-fe0f" }, - { n: ["rocket"], u: "1f680" }, - { n: ["flying saucer"], u: "1f6f8" }, - { n: ["bellhop bell"], u: "1f6ce-fe0f" }, - { n: ["luggage"], u: "1f9f3" }, - { n: ["hourglass"], u: "231b" }, - { n: ["hourglass flowing sand", "hourglass with flowing sand"], u: "23f3" }, - { n: ["watch"], u: "231a" }, - { n: ["alarm clock"], u: "23f0" }, - { n: ["stopwatch"], u: "23f1-fe0f" }, - { n: ["timer clock"], u: "23f2-fe0f" }, - { n: ["mantelpiece clock"], u: "1f570-fe0f" }, - { n: ["clock12", "clock face twelve oclock"], u: "1f55b" }, - { n: ["clock1230", "clock face twelve-thirty"], u: "1f567" }, - { n: ["clock1", "clock face one oclock"], u: "1f550" }, - { n: ["clock130", "clock face one-thirty"], u: "1f55c" }, - { n: ["clock2", "clock face two oclock"], u: "1f551" }, - { n: ["clock230", "clock face two-thirty"], u: "1f55d" }, - { n: ["clock3", "clock face three oclock"], u: "1f552" }, - { n: ["clock330", "clock face three-thirty"], u: "1f55e" }, - { n: ["clock4", "clock face four oclock"], u: "1f553" }, - { n: ["clock430", "clock face four-thirty"], u: "1f55f" }, - { n: ["clock5", "clock face five oclock"], u: "1f554" }, - { n: ["clock530", "clock face five-thirty"], u: "1f560" }, - { n: ["clock6", "clock face six oclock"], u: "1f555" }, - { n: ["clock630", "clock face six-thirty"], u: "1f561" }, - { n: ["clock7", "clock face seven oclock"], u: "1f556" }, - { n: ["clock730", "clock face seven-thirty"], u: "1f562" }, - { n: ["clock8", "clock face eight oclock"], u: "1f557" }, - { n: ["clock830", "clock face eight-thirty"], u: "1f563" }, - { n: ["clock9", "clock face nine oclock"], u: "1f558" }, - { n: ["clock930", "clock face nine-thirty"], u: "1f564" }, - { n: ["clock10", "clock face ten oclock"], u: "1f559" }, - { n: ["clock1030", "clock face ten-thirty"], u: "1f565" }, - { n: ["clock11", "clock face eleven oclock"], u: "1f55a" }, - { n: ["clock1130", "clock face eleven-thirty"], u: "1f566" }, - { n: ["new moon", "new moon symbol"], u: "1f311" }, - { n: ["waxing crescent moon", "waxing crescent moon symbol"], u: "1f312" }, - { n: ["first quarter moon", "first quarter moon symbol"], u: "1f313" }, - { - n: ["moon", "waxing gibbous moon", "waxing gibbous moon symbol"], - u: "1f314" + { n: ["pause button", "double vertical bar"], u: "23f8-fe0f" }, + { n: ["stop button", "black square for stop"], u: "23f9-fe0f" }, + { n: ["record button", "black circle for record"], u: "23fa-fe0f" }, + { n: ["eject", "eject button"], u: "23cf-fe0f" }, + { n: ["cinema"], u: "1f3a6" }, + { n: ["low brightness", "low brightness symbol"], u: "1f505" }, + { n: ["high brightness", "high brightness symbol"], u: "1f506" }, + { n: ["signal strength", "antenna with bars"], u: "1f4f6" }, + { n: ["vibration mode"], u: "1f4f3" }, + { n: ["mobile phone off"], u: "1f4f4" }, + { n: ["female sign"], u: "2640-fe0f" }, + { n: ["male sign"], u: "2642-fe0f" }, + { n: ["transgender symbol"], u: "26a7-fe0f" }, + { n: ["heavy multiplication x"], u: "2716-fe0f" }, + { n: ["heavy plus sign"], u: "2795" }, + { n: ["heavy minus sign"], u: "2796" }, + { n: ["heavy division sign"], u: "2797" }, + { n: ["heavy equals sign"], u: "1f7f0" }, + { n: ["infinity"], u: "267e-fe0f" }, + { n: ["bangbang", "double exclamation mark"], u: "203c-fe0f" }, + { n: ["interrobang", "exclamation question mark"], u: "2049-fe0f" }, + { n: ["question", "black question mark ornament"], u: "2753" }, + { n: ["grey question", "white question mark ornament"], u: "2754" }, + { n: ["grey exclamation", "white exclamation mark ornament"], u: "2755" }, + { + n: [ + "exclamation", + "heavy exclamation mark", + "heavy exclamation mark symbol" + ], + u: "2757" }, - { n: ["full moon", "full moon symbol"], u: "1f315" }, - { n: ["waning gibbous moon", "waning gibbous moon symbol"], u: "1f316" }, - { n: ["last quarter moon", "last quarter moon symbol"], u: "1f317" }, - { n: ["waning crescent moon", "waning crescent moon symbol"], u: "1f318" }, - { n: ["crescent moon"], u: "1f319" }, - { n: ["new moon with face"], u: "1f31a" }, - { n: ["first quarter moon with face"], u: "1f31b" }, - { n: ["last quarter moon with face"], u: "1f31c" }, - { n: ["thermometer"], u: "1f321-fe0f" }, - { n: ["sunny", "black sun with rays"], u: "2600-fe0f" }, - { n: ["full moon with face"], u: "1f31d" }, - { n: ["sun with face"], u: "1f31e" }, - { n: ["ringed planet"], u: "1fa90" }, - { n: ["star", "white medium star"], u: "2b50" }, - { n: ["star2", "glowing star"], u: "1f31f" }, - { n: ["stars", "shooting star"], u: "1f320" }, - { n: ["milky way"], u: "1f30c" }, - { n: ["cloud"], u: "2601-fe0f" }, - { n: ["partly sunny", "sun behind cloud"], u: "26c5" }, + { n: ["wavy dash"], u: "3030-fe0f" }, + { n: ["currency exchange"], u: "1f4b1" }, + { n: ["heavy dollar sign"], u: "1f4b2" }, + { n: ["medical symbol", "staff of aesculapius"], u: "2695-fe0f" }, + { n: ["recycle", "black universal recycling symbol"], u: "267b-fe0f" }, + { n: ["fleur-de-lis", "fleur de lis"], u: "269c-fe0f" }, + { n: ["trident", "trident emblem"], u: "1f531" }, + { n: ["name badge"], u: "1f4db" }, + { n: ["beginner", "japanese symbol for beginner"], u: "1f530" }, + { n: ["o", "heavy large circle"], u: "2b55" }, + { n: ["white check mark", "white heavy check mark"], u: "2705" }, + { n: ["ballot box with check"], u: "2611-fe0f" }, + { n: ["heavy check mark"], u: "2714-fe0f" }, + { n: ["x", "cross mark"], u: "274c" }, + { n: ["negative squared cross mark"], u: "274e" }, + { n: ["curly loop"], u: "27b0" }, + { n: ["loop", "double curly loop"], u: "27bf" }, + { n: ["part alternation mark"], u: "303d-fe0f" }, + { n: ["eight spoked asterisk"], u: "2733-fe0f" }, + { n: ["eight pointed black star"], u: "2734-fe0f" }, + { n: ["sparkle"], u: "2747-fe0f" }, + { n: ["copyright", "copyright sign"], u: "00a9-fe0f" }, + { n: ["registered", "registered sign"], u: "00ae-fe0f" }, + { n: ["tm", "trade mark sign"], u: "2122-fe0f" }, + { n: ["hash", "hash key"], u: "0023-fe0f-20e3" }, + { n: ["keycap: *", "keycap star"], u: "002a-fe0f-20e3" }, + { n: ["zero", "keycap 0"], u: "0030-fe0f-20e3" }, + { n: ["one", "keycap 1"], u: "0031-fe0f-20e3" }, + { n: ["two", "keycap 2"], u: "0032-fe0f-20e3" }, + { n: ["three", "keycap 3"], u: "0033-fe0f-20e3" }, + { n: ["four", "keycap 4"], u: "0034-fe0f-20e3" }, + { n: ["five", "keycap 5"], u: "0035-fe0f-20e3" }, + { n: ["six", "keycap 6"], u: "0036-fe0f-20e3" }, + { n: ["seven", "keycap 7"], u: "0037-fe0f-20e3" }, + { n: ["eight", "keycap 8"], u: "0038-fe0f-20e3" }, + { n: ["nine", "keycap 9"], u: "0039-fe0f-20e3" }, + { n: ["keycap ten"], u: "1f51f" }, { - n: ["thunder cloud and rain", "cloud with lightning and rain"], - u: "26c8-fe0f" + n: ["capital abcd", "input symbol for latin capital letters"], + u: "1f520" }, + { n: ["abcd", "input symbol for latin small letters"], u: "1f521" }, + { n: ["1234", "input symbol for numbers"], u: "1f522" }, + { n: ["symbols", "input symbol for symbols"], u: "1f523" }, + { n: ["abc", "input symbol for latin letters"], u: "1f524" }, + { n: ["a", "negative squared latin capital letter a"], u: "1f170-fe0f" }, + { n: ["ab", "negative squared ab"], u: "1f18e" }, + { n: ["b", "negative squared latin capital letter b"], u: "1f171-fe0f" }, + { n: ["cl", "squared cl"], u: "1f191" }, + { n: ["cool", "squared cool"], u: "1f192" }, + { n: ["free", "squared free"], u: "1f193" }, + { n: ["information source"], u: "2139-fe0f" }, + { n: ["id", "squared id"], u: "1f194" }, + { n: ["m", "circled latin capital letter m"], u: "24c2-fe0f" }, + { n: ["new", "squared new"], u: "1f195" }, + { n: ["ng", "squared ng"], u: "1f196" }, + { n: ["o2", "negative squared latin capital letter o"], u: "1f17e-fe0f" }, + { n: ["ok", "squared ok"], u: "1f197" }, { - n: ["mostly sunny", "sun small cloud", "sun behind small cloud"], - u: "1f324-fe0f" + n: ["parking", "negative squared latin capital letter p"], + u: "1f17f-fe0f" }, + { n: ["sos", "squared sos"], u: "1f198" }, + { n: ["up", "squared up with exclamation mark"], u: "1f199" }, + { n: ["vs", "squared vs"], u: "1f19a" }, + { n: ["koko", "squared katakana koko"], u: "1f201" }, + { n: ["sa", "squared katakana sa"], u: "1f202-fe0f" }, + { n: ["u6708", "squared cjk unified ideograph-6708"], u: "1f237-fe0f" }, + { n: ["u6709", "squared cjk unified ideograph-6709"], u: "1f236" }, + { n: ["u6307", "squared cjk unified ideograph-6307"], u: "1f22f" }, + { n: ["ideograph advantage", "circled ideograph advantage"], u: "1f250" }, + { n: ["u5272", "squared cjk unified ideograph-5272"], u: "1f239" }, + { n: ["u7121", "squared cjk unified ideograph-7121"], u: "1f21a" }, + { n: ["u7981", "squared cjk unified ideograph-7981"], u: "1f232" }, + { n: ["accept", "circled ideograph accept"], u: "1f251" }, + { n: ["u7533", "squared cjk unified ideograph-7533"], u: "1f238" }, + { n: ["u5408", "squared cjk unified ideograph-5408"], u: "1f234" }, + { n: ["u7a7a", "squared cjk unified ideograph-7a7a"], u: "1f233" }, { - n: ["barely sunny", "sun behind cloud", "sun behind large cloud"], - u: "1f325-fe0f" + n: ["congratulations", "circled ideograph congratulation"], + u: "3297-fe0f" }, - { n: ["partly sunny rain", "sun behind rain cloud"], u: "1f326-fe0f" }, - { n: ["rain cloud", "cloud with rain"], u: "1f327-fe0f" }, - { n: ["snow cloud", "cloud with snow"], u: "1f328-fe0f" }, + { n: ["secret", "circled ideograph secret"], u: "3299-fe0f" }, + { n: ["u55b6", "squared cjk unified ideograph-55b6"], u: "1f23a" }, + { n: ["u6e80", "squared cjk unified ideograph-6e80"], u: "1f235" }, + { n: ["red circle", "large red circle"], u: "1f534" }, + { n: ["large orange circle"], u: "1f7e0" }, + { n: ["large yellow circle"], u: "1f7e1" }, + { n: ["large green circle"], u: "1f7e2" }, + { n: ["large blue circle"], u: "1f535" }, + { n: ["large purple circle"], u: "1f7e3" }, + { n: ["large brown circle"], u: "1f7e4" }, + { n: ["black circle", "medium black circle"], u: "26ab" }, + { n: ["white circle", "medium white circle"], u: "26aa" }, + { n: ["large red square"], u: "1f7e5" }, + { n: ["large orange square"], u: "1f7e7" }, + { n: ["large yellow square"], u: "1f7e8" }, + { n: ["large green square"], u: "1f7e9" }, + { n: ["large blue square"], u: "1f7e6" }, + { n: ["large purple square"], u: "1f7ea" }, + { n: ["large brown square"], u: "1f7eb" }, + { n: ["black large square"], u: "2b1b" }, + { n: ["white large square"], u: "2b1c" }, + { n: ["black medium square"], u: "25fc-fe0f" }, + { n: ["white medium square"], u: "25fb-fe0f" }, + { n: ["black medium small square"], u: "25fe" }, + { n: ["white medium small square"], u: "25fd" }, + { n: ["black small square"], u: "25aa-fe0f" }, + { n: ["white small square"], u: "25ab-fe0f" }, + { n: ["large orange diamond"], u: "1f536" }, + { n: ["large blue diamond"], u: "1f537" }, + { n: ["small orange diamond"], u: "1f538" }, + { n: ["small blue diamond"], u: "1f539" }, + { n: ["small red triangle", "up-pointing red triangle"], u: "1f53a" }, { - n: ["lightning", "lightning cloud", "cloud with lightning"], - u: "1f329-fe0f" + n: ["small red triangle down", "down-pointing red triangle"], + u: "1f53b" }, - { n: ["tornado", "tornado cloud"], u: "1f32a-fe0f" }, - { n: ["fog"], u: "1f32b-fe0f" }, - { n: ["wind face", "wind blowing face"], u: "1f32c-fe0f" }, - { n: ["cyclone"], u: "1f300" }, - { n: ["rainbow"], u: "1f308" }, - { n: ["closed umbrella"], u: "1f302" }, - { n: ["umbrella"], u: "2602-fe0f" }, - { n: ["umbrella with rain drops"], u: "2614" }, - { n: ["umbrella on ground"], u: "26f1-fe0f" }, - { n: ["zap", "high voltage sign"], u: "26a1" }, - { n: ["snowflake"], u: "2744-fe0f" }, - { n: ["snowman"], u: "2603-fe0f" }, - { n: ["snowman without snow"], u: "26c4" }, - { n: ["comet"], u: "2604-fe0f" }, - { n: ["fire"], u: "1f525" }, - { n: ["droplet"], u: "1f4a7" }, - { n: ["ocean", "water wave"], u: "1f30a" } - ], - activities: [ - { n: ["jack-o-lantern", "jack o lantern"], u: "1f383" }, - { n: ["christmas tree"], u: "1f384" }, - { n: ["fireworks"], u: "1f386" }, - { n: ["sparkler", "firework sparkler"], u: "1f387" }, - { n: ["firecracker"], u: "1f9e8" }, - { n: ["sparkles"], u: "2728" }, - { n: ["balloon"], u: "1f388" }, - { n: ["tada", "party popper"], u: "1f389" }, - { n: ["confetti ball"], u: "1f38a" }, - { n: ["tanabata tree"], u: "1f38b" }, - { n: ["bamboo", "pine decoration"], u: "1f38d" }, - { n: ["dolls", "japanese dolls"], u: "1f38e" }, - { n: ["flags", "carp streamer"], u: "1f38f" }, - { n: ["wind chime"], u: "1f390" }, - { n: ["rice scene", "moon viewing ceremony"], u: "1f391" }, - { n: ["red envelope", "red gift envelope"], u: "1f9e7" }, - { n: ["ribbon"], u: "1f380" }, - { n: ["gift", "wrapped present"], u: "1f381" }, - { n: ["reminder ribbon"], u: "1f397-fe0f" }, - { n: ["admission tickets"], u: "1f39f-fe0f" }, - { n: ["ticket"], u: "1f3ab" }, - { n: ["medal", "military medal"], u: "1f396-fe0f" }, - { n: ["trophy"], u: "1f3c6" }, - { n: ["sports medal"], u: "1f3c5" }, - { n: ["first place medal"], u: "1f947" }, - { n: ["second place medal"], u: "1f948" }, - { n: ["third place medal"], u: "1f949" }, - { n: ["soccer", "soccer ball"], u: "26bd" }, - { n: ["baseball"], u: "26be" }, - { n: ["softball"], u: "1f94e" }, - { n: ["basketball", "basketball and hoop"], u: "1f3c0" }, - { n: ["volleyball"], u: "1f3d0" }, - { n: ["football", "american football"], u: "1f3c8" }, - { n: ["rugby football"], u: "1f3c9" }, - { n: ["tennis", "tennis racquet and ball"], u: "1f3be" }, - { n: ["flying disc"], u: "1f94f" }, - { n: ["bowling"], u: "1f3b3" }, - { n: ["cricket bat and ball"], u: "1f3cf" }, - { n: ["field hockey stick and ball"], u: "1f3d1" }, - { n: ["ice hockey stick and puck"], u: "1f3d2" }, - { n: ["lacrosse", "lacrosse stick and ball"], u: "1f94d" }, - { n: ["table tennis paddle and ball"], u: "1f3d3" }, - { n: ["badminton racquet and shuttlecock"], u: "1f3f8" }, - { n: ["boxing glove"], u: "1f94a" }, - { n: ["martial arts uniform"], u: "1f94b" }, - { n: ["goal net"], u: "1f945" }, - { n: ["golf", "flag in hole"], u: "26f3" }, - { n: ["ice skate"], u: "26f8-fe0f" }, - { n: ["fishing pole and fish"], u: "1f3a3" }, - { n: ["diving mask"], u: "1f93f" }, - { n: ["running shirt with sash"], u: "1f3bd" }, - { n: ["ski", "ski and ski boot"], u: "1f3bf" }, - { n: ["sled"], u: "1f6f7" }, - { n: ["curling stone"], u: "1f94c" }, - { n: ["dart", "direct hit"], u: "1f3af" }, - { n: ["yo-yo"], u: "1fa80" }, - { n: ["kite"], u: "1fa81" }, - { n: ["8ball", "billiards"], u: "1f3b1" }, - { n: ["crystal ball"], u: "1f52e" }, - { n: ["magic wand"], u: "1fa84" }, - { n: ["nazar amulet"], u: "1f9ff" }, - { n: ["hamsa"], u: "1faac" }, - { n: ["video game"], u: "1f3ae" }, - { n: ["joystick"], u: "1f579-fe0f" }, - { n: ["slot machine"], u: "1f3b0" }, - { n: ["game die"], u: "1f3b2" }, - { n: ["jigsaw", "jigsaw puzzle piece"], u: "1f9e9" }, - { n: ["teddy bear"], u: "1f9f8" }, - { n: ["pinata"], u: "1fa85" }, - { n: ["mirror ball"], u: "1faa9" }, - { n: ["nesting dolls"], u: "1fa86" }, - { n: ["spades", "black spade suit"], u: "2660-fe0f" }, - { n: ["hearts", "black heart suit"], u: "2665-fe0f" }, - { n: ["diamonds", "black diamond suit"], u: "2666-fe0f" }, - { n: ["clubs", "black club suit"], u: "2663-fe0f" }, - { n: ["chess pawn"], u: "265f-fe0f" }, - { n: ["black joker", "playing card black joker"], u: "1f0cf" }, - { n: ["mahjong", "mahjong tile red dragon"], u: "1f004" }, - { n: ["flower playing cards"], u: "1f3b4" }, - { n: ["performing arts"], u: "1f3ad" }, - { n: ["framed picture", "frame with picture"], u: "1f5bc-fe0f" }, - { n: ["art", "artist palette"], u: "1f3a8" }, - { n: ["thread", "spool of thread"], u: "1f9f5" }, - { n: ["sewing needle"], u: "1faa1" }, - { n: ["yarn", "ball of yarn"], u: "1f9f6" }, - { n: ["knot"], u: "1faa2" } + { n: ["diamond shape with a dot inside"], u: "1f4a0" }, + { n: ["radio button"], u: "1f518" }, + { n: ["white square button"], u: "1f533" }, + { n: ["black square button"], u: "1f532" } ], - objects: [ - { n: ["eyeglasses"], u: "1f453" }, - { n: ["sunglasses", "dark sunglasses"], u: "1f576-fe0f" }, - { n: ["goggles"], u: "1f97d" }, - { n: ["lab coat"], u: "1f97c" }, - { n: ["safety vest"], u: "1f9ba" }, - { n: ["necktie"], u: "1f454" }, - { n: ["shirt", "tshirt", "t-shirt"], u: "1f455" }, - { n: ["jeans"], u: "1f456" }, - { n: ["scarf"], u: "1f9e3" }, - { n: ["gloves"], u: "1f9e4" }, - { n: ["coat"], u: "1f9e5" }, - { n: ["socks"], u: "1f9e6" }, - { n: ["dress"], u: "1f457" }, - { n: ["kimono"], u: "1f458" }, - { n: ["sari"], u: "1f97b" }, - { n: ["one-piece swimsuit"], u: "1fa71" }, - { n: ["briefs"], u: "1fa72" }, - { n: ["shorts"], u: "1fa73" }, - { n: ["bikini"], u: "1f459" }, - { n: ["womans clothes"], u: "1f45a" }, - { n: ["purse"], u: "1f45b" }, - { n: ["handbag"], u: "1f45c" }, - { n: ["pouch"], u: "1f45d" }, - { n: ["shopping bags"], u: "1f6cd-fe0f" }, - { n: ["school satchel"], u: "1f392" }, - { n: ["thong sandal"], u: "1fa74" }, - { n: ["shoe", "mans shoe"], u: "1f45e" }, - { n: ["athletic shoe"], u: "1f45f" }, - { n: ["hiking boot"], u: "1f97e" }, - { n: ["flat shoe", "womans flat shoe"], u: "1f97f" }, - { n: ["high heel", "high-heeled shoe"], u: "1f460" }, - { n: ["sandal", "womans sandal"], u: "1f461" }, - { n: ["ballet shoes"], u: "1fa70" }, - { n: ["boot", "womans boots"], u: "1f462" }, - { n: ["crown"], u: "1f451" }, - { n: ["womans hat"], u: "1f452" }, - { n: ["tophat", "top hat"], u: "1f3a9" }, - { n: ["mortar board", "graduation cap"], u: "1f393" }, - { n: ["billed cap"], u: "1f9e2" }, - { n: ["military helmet"], u: "1fa96" }, + flags: [ + { n: ["chequered flag", "checkered flag"], u: "1f3c1" }, + { n: ["triangular flag on post"], u: "1f6a9" }, + { n: ["crossed flags"], u: "1f38c" }, + { n: ["waving black flag"], u: "1f3f4" }, + { n: ["white flag", "waving white flag"], u: "1f3f3-fe0f" }, + { n: ["rainbow flag", "rainbow-flag"], u: "1f3f3-fe0f-200d-1f308" }, + { n: ["transgender flag"], u: "1f3f3-fe0f-200d-26a7-fe0f" }, + { n: ["pirate flag"], u: "1f3f4-200d-2620-fe0f" }, + { n: ["flag-ac", "ascension island flag"], u: "1f1e6-1f1e8" }, + { n: ["flag-ad", "andorra flag"], u: "1f1e6-1f1e9" }, + { n: ["flag-ae", "united arab emirates flag"], u: "1f1e6-1f1ea" }, + { n: ["flag-af", "afghanistan flag"], u: "1f1e6-1f1eb" }, + { n: ["flag-ag", "antigua & barbuda flag"], u: "1f1e6-1f1ec" }, + { n: ["flag-ai", "anguilla flag"], u: "1f1e6-1f1ee" }, + { n: ["flag-al", "albania flag"], u: "1f1e6-1f1f1" }, + { n: ["flag-am", "armenia flag"], u: "1f1e6-1f1f2" }, + { n: ["flag-ao", "angola flag"], u: "1f1e6-1f1f4" }, + { n: ["flag-aq", "antarctica flag"], u: "1f1e6-1f1f6" }, + { n: ["flag-ar", "argentina flag"], u: "1f1e6-1f1f7" }, + { n: ["flag-as", "american samoa flag"], u: "1f1e6-1f1f8" }, + { n: ["flag-at", "austria flag"], u: "1f1e6-1f1f9" }, + { n: ["flag-au", "australia flag"], u: "1f1e6-1f1fa" }, + { n: ["flag-aw", "aruba flag"], u: "1f1e6-1f1fc" }, + { n: ["flag-ax", "\xE5land islands flag"], u: "1f1e6-1f1fd" }, + { n: ["flag-az", "azerbaijan flag"], u: "1f1e6-1f1ff" }, + { n: ["flag-ba", "bosnia & herzegovina flag"], u: "1f1e7-1f1e6" }, + { n: ["flag-bb", "barbados flag"], u: "1f1e7-1f1e7" }, + { n: ["flag-bd", "bangladesh flag"], u: "1f1e7-1f1e9" }, + { n: ["flag-be", "belgium flag"], u: "1f1e7-1f1ea" }, + { n: ["flag-bf", "burkina faso flag"], u: "1f1e7-1f1eb" }, + { n: ["flag-bg", "bulgaria flag"], u: "1f1e7-1f1ec" }, + { n: ["flag-bh", "bahrain flag"], u: "1f1e7-1f1ed" }, + { n: ["flag-bi", "burundi flag"], u: "1f1e7-1f1ee" }, + { n: ["flag-bj", "benin flag"], u: "1f1e7-1f1ef" }, + { n: ["flag-bl", "st. barth\xE9lemy flag"], u: "1f1e7-1f1f1" }, + { n: ["flag-bm", "bermuda flag"], u: "1f1e7-1f1f2" }, + { n: ["flag-bn", "brunei flag"], u: "1f1e7-1f1f3" }, + { n: ["flag-bo", "bolivia flag"], u: "1f1e7-1f1f4" }, + { n: ["flag-bq", "caribbean netherlands flag"], u: "1f1e7-1f1f6" }, + { n: ["flag-br", "brazil flag"], u: "1f1e7-1f1f7" }, + { n: ["flag-bs", "bahamas flag"], u: "1f1e7-1f1f8" }, + { n: ["flag-bt", "bhutan flag"], u: "1f1e7-1f1f9" }, + { n: ["flag-bv", "bouvet island flag"], u: "1f1e7-1f1fb" }, + { n: ["flag-bw", "botswana flag"], u: "1f1e7-1f1fc" }, + { n: ["flag-by", "belarus flag"], u: "1f1e7-1f1fe" }, + { n: ["flag-bz", "belize flag"], u: "1f1e7-1f1ff" }, + { n: ["flag-ca", "canada flag"], u: "1f1e8-1f1e6" }, + { n: ["flag-cc", "cocos (keeling) islands flag"], u: "1f1e8-1f1e8" }, + { n: ["flag-cd", "congo - kinshasa flag"], u: "1f1e8-1f1e9" }, + { n: ["flag-cf", "central african republic flag"], u: "1f1e8-1f1eb" }, + { n: ["flag-cg", "congo - brazzaville flag"], u: "1f1e8-1f1ec" }, + { n: ["flag-ch", "switzerland flag"], u: "1f1e8-1f1ed" }, + { n: ["flag-ci", "c\xF4te d\u2019ivoire flag"], u: "1f1e8-1f1ee" }, + { n: ["flag-ck", "cook islands flag"], u: "1f1e8-1f1f0" }, + { n: ["flag-cl", "chile flag"], u: "1f1e8-1f1f1" }, + { n: ["flag-cm", "cameroon flag"], u: "1f1e8-1f1f2" }, + { n: ["cn", "flag-cn", "china flag"], u: "1f1e8-1f1f3" }, + { n: ["flag-co", "colombia flag"], u: "1f1e8-1f1f4" }, + { n: ["flag-cp", "clipperton island flag"], u: "1f1e8-1f1f5" }, + { n: ["flag-cr", "costa rica flag"], u: "1f1e8-1f1f7" }, + { n: ["flag-cu", "cuba flag"], u: "1f1e8-1f1fa" }, + { n: ["flag-cv", "cape verde flag"], u: "1f1e8-1f1fb" }, + { n: ["flag-cw", "cura\xE7ao flag"], u: "1f1e8-1f1fc" }, + { n: ["flag-cx", "christmas island flag"], u: "1f1e8-1f1fd" }, + { n: ["flag-cy", "cyprus flag"], u: "1f1e8-1f1fe" }, + { n: ["flag-cz", "czechia flag"], u: "1f1e8-1f1ff" }, + { n: ["de", "flag-de", "germany flag"], u: "1f1e9-1f1ea" }, + { n: ["flag-dg", "diego garcia flag"], u: "1f1e9-1f1ec" }, + { n: ["flag-dj", "djibouti flag"], u: "1f1e9-1f1ef" }, + { n: ["flag-dk", "denmark flag"], u: "1f1e9-1f1f0" }, + { n: ["flag-dm", "dominica flag"], u: "1f1e9-1f1f2" }, + { n: ["flag-do", "dominican republic flag"], u: "1f1e9-1f1f4" }, + { n: ["flag-dz", "algeria flag"], u: "1f1e9-1f1ff" }, + { n: ["flag-ea", "ceuta & melilla flag"], u: "1f1ea-1f1e6" }, + { n: ["flag-ec", "ecuador flag"], u: "1f1ea-1f1e8" }, + { n: ["flag-ee", "estonia flag"], u: "1f1ea-1f1ea" }, + { n: ["flag-eg", "egypt flag"], u: "1f1ea-1f1ec" }, + { n: ["flag-eh", "western sahara flag"], u: "1f1ea-1f1ed" }, + { n: ["flag-er", "eritrea flag"], u: "1f1ea-1f1f7" }, + { n: ["es", "flag-es", "spain flag"], u: "1f1ea-1f1f8" }, + { n: ["flag-et", "ethiopia flag"], u: "1f1ea-1f1f9" }, + { n: ["flag-eu", "european union flag"], u: "1f1ea-1f1fa" }, + { n: ["flag-fi", "finland flag"], u: "1f1eb-1f1ee" }, + { n: ["flag-fj", "fiji flag"], u: "1f1eb-1f1ef" }, + { n: ["flag-fk", "falkland islands flag"], u: "1f1eb-1f1f0" }, + { n: ["flag-fm", "micronesia flag"], u: "1f1eb-1f1f2" }, + { n: ["flag-fo", "faroe islands flag"], u: "1f1eb-1f1f4" }, + { n: ["fr", "flag-fr", "france flag"], u: "1f1eb-1f1f7" }, + { n: ["flag-ga", "gabon flag"], u: "1f1ec-1f1e6" }, + { n: ["gb", "uk", "flag-gb", "united kingdom flag"], u: "1f1ec-1f1e7" }, + { n: ["flag-gd", "grenada flag"], u: "1f1ec-1f1e9" }, + { n: ["flag-ge", "georgia flag"], u: "1f1ec-1f1ea" }, + { n: ["flag-gf", "french guiana flag"], u: "1f1ec-1f1eb" }, + { n: ["flag-gg", "guernsey flag"], u: "1f1ec-1f1ec" }, + { n: ["flag-gh", "ghana flag"], u: "1f1ec-1f1ed" }, + { n: ["flag-gi", "gibraltar flag"], u: "1f1ec-1f1ee" }, + { n: ["flag-gl", "greenland flag"], u: "1f1ec-1f1f1" }, + { n: ["flag-gm", "gambia flag"], u: "1f1ec-1f1f2" }, + { n: ["flag-gn", "guinea flag"], u: "1f1ec-1f1f3" }, + { n: ["flag-gp", "guadeloupe flag"], u: "1f1ec-1f1f5" }, + { n: ["flag-gq", "equatorial guinea flag"], u: "1f1ec-1f1f6" }, + { n: ["flag-gr", "greece flag"], u: "1f1ec-1f1f7" }, + { + n: ["flag-gs", "south georgia & south sandwich islands flag"], + u: "1f1ec-1f1f8" + }, + { n: ["flag-gt", "guatemala flag"], u: "1f1ec-1f1f9" }, + { n: ["flag-gu", "guam flag"], u: "1f1ec-1f1fa" }, + { n: ["flag-gw", "guinea-bissau flag"], u: "1f1ec-1f1fc" }, + { n: ["flag-gy", "guyana flag"], u: "1f1ec-1f1fe" }, + { n: ["flag-hk", "hong kong sar china flag"], u: "1f1ed-1f1f0" }, + { n: ["flag-hm", "heard & mcdonald islands flag"], u: "1f1ed-1f1f2" }, + { n: ["flag-hn", "honduras flag"], u: "1f1ed-1f1f3" }, + { n: ["flag-hr", "croatia flag"], u: "1f1ed-1f1f7" }, + { n: ["flag-ht", "haiti flag"], u: "1f1ed-1f1f9" }, + { n: ["flag-hu", "hungary flag"], u: "1f1ed-1f1fa" }, + { n: ["flag-ic", "canary islands flag"], u: "1f1ee-1f1e8" }, + { n: ["flag-id", "indonesia flag"], u: "1f1ee-1f1e9" }, + { n: ["flag-ie", "ireland flag"], u: "1f1ee-1f1ea" }, + { n: ["flag-il", "israel flag"], u: "1f1ee-1f1f1" }, + { n: ["flag-im", "isle of man flag"], u: "1f1ee-1f1f2" }, + { n: ["flag-in", "india flag"], u: "1f1ee-1f1f3" }, + { n: ["flag-io", "british indian ocean territory flag"], u: "1f1ee-1f1f4" }, + { n: ["flag-iq", "iraq flag"], u: "1f1ee-1f1f6" }, + { n: ["flag-ir", "iran flag"], u: "1f1ee-1f1f7" }, + { n: ["flag-is", "iceland flag"], u: "1f1ee-1f1f8" }, + { n: ["it", "flag-it", "italy flag"], u: "1f1ee-1f1f9" }, + { n: ["flag-je", "jersey flag"], u: "1f1ef-1f1ea" }, + { n: ["flag-jm", "jamaica flag"], u: "1f1ef-1f1f2" }, + { n: ["flag-jo", "jordan flag"], u: "1f1ef-1f1f4" }, + { n: ["jp", "flag-jp", "japan flag"], u: "1f1ef-1f1f5" }, + { n: ["flag-ke", "kenya flag"], u: "1f1f0-1f1ea" }, + { n: ["flag-kg", "kyrgyzstan flag"], u: "1f1f0-1f1ec" }, + { n: ["flag-kh", "cambodia flag"], u: "1f1f0-1f1ed" }, + { n: ["flag-ki", "kiribati flag"], u: "1f1f0-1f1ee" }, + { n: ["flag-km", "comoros flag"], u: "1f1f0-1f1f2" }, + { n: ["flag-kn", "st. kitts & nevis flag"], u: "1f1f0-1f1f3" }, + { n: ["flag-kp", "north korea flag"], u: "1f1f0-1f1f5" }, + { n: ["kr", "flag-kr", "south korea flag"], u: "1f1f0-1f1f7" }, + { n: ["flag-kw", "kuwait flag"], u: "1f1f0-1f1fc" }, + { n: ["flag-ky", "cayman islands flag"], u: "1f1f0-1f1fe" }, + { n: ["flag-kz", "kazakhstan flag"], u: "1f1f0-1f1ff" }, + { n: ["flag-la", "laos flag"], u: "1f1f1-1f1e6" }, + { n: ["flag-lb", "lebanon flag"], u: "1f1f1-1f1e7" }, + { n: ["flag-lc", "st. lucia flag"], u: "1f1f1-1f1e8" }, + { n: ["flag-li", "liechtenstein flag"], u: "1f1f1-1f1ee" }, + { n: ["flag-lk", "sri lanka flag"], u: "1f1f1-1f1f0" }, + { n: ["flag-lr", "liberia flag"], u: "1f1f1-1f1f7" }, + { n: ["flag-ls", "lesotho flag"], u: "1f1f1-1f1f8" }, + { n: ["flag-lt", "lithuania flag"], u: "1f1f1-1f1f9" }, + { n: ["flag-lu", "luxembourg flag"], u: "1f1f1-1f1fa" }, + { n: ["flag-lv", "latvia flag"], u: "1f1f1-1f1fb" }, + { n: ["flag-ly", "libya flag"], u: "1f1f1-1f1fe" }, + { n: ["flag-ma", "morocco flag"], u: "1f1f2-1f1e6" }, + { n: ["flag-mc", "monaco flag"], u: "1f1f2-1f1e8" }, + { n: ["flag-md", "moldova flag"], u: "1f1f2-1f1e9" }, + { n: ["flag-me", "montenegro flag"], u: "1f1f2-1f1ea" }, + { n: ["flag-mf", "st. martin flag"], u: "1f1f2-1f1eb" }, + { n: ["flag-mg", "madagascar flag"], u: "1f1f2-1f1ec" }, + { n: ["flag-mh", "marshall islands flag"], u: "1f1f2-1f1ed" }, + { n: ["flag-mk", "north macedonia flag"], u: "1f1f2-1f1f0" }, + { n: ["flag-ml", "mali flag"], u: "1f1f2-1f1f1" }, + { n: ["flag-mm", "myanmar (burma) flag"], u: "1f1f2-1f1f2" }, + { n: ["flag-mn", "mongolia flag"], u: "1f1f2-1f1f3" }, + { n: ["flag-mo", "macao sar china flag"], u: "1f1f2-1f1f4" }, + { n: ["flag-mp", "northern mariana islands flag"], u: "1f1f2-1f1f5" }, + { n: ["flag-mq", "martinique flag"], u: "1f1f2-1f1f6" }, + { n: ["flag-mr", "mauritania flag"], u: "1f1f2-1f1f7" }, + { n: ["flag-ms", "montserrat flag"], u: "1f1f2-1f1f8" }, + { n: ["flag-mt", "malta flag"], u: "1f1f2-1f1f9" }, + { n: ["flag-mu", "mauritius flag"], u: "1f1f2-1f1fa" }, + { n: ["flag-mv", "maldives flag"], u: "1f1f2-1f1fb" }, + { n: ["flag-mw", "malawi flag"], u: "1f1f2-1f1fc" }, + { n: ["flag-mx", "mexico flag"], u: "1f1f2-1f1fd" }, + { n: ["flag-my", "malaysia flag"], u: "1f1f2-1f1fe" }, + { n: ["flag-mz", "mozambique flag"], u: "1f1f2-1f1ff" }, + { n: ["flag-na", "namibia flag"], u: "1f1f3-1f1e6" }, + { n: ["flag-nc", "new caledonia flag"], u: "1f1f3-1f1e8" }, + { n: ["flag-ne", "niger flag"], u: "1f1f3-1f1ea" }, + { n: ["flag-nf", "norfolk island flag"], u: "1f1f3-1f1eb" }, + { n: ["flag-ng", "nigeria flag"], u: "1f1f3-1f1ec" }, + { n: ["flag-ni", "nicaragua flag"], u: "1f1f3-1f1ee" }, + { n: ["flag-nl", "netherlands flag"], u: "1f1f3-1f1f1" }, + { n: ["flag-no", "norway flag"], u: "1f1f3-1f1f4" }, + { n: ["flag-np", "nepal flag"], u: "1f1f3-1f1f5" }, + { n: ["flag-nr", "nauru flag"], u: "1f1f3-1f1f7" }, + { n: ["flag-nu", "niue flag"], u: "1f1f3-1f1fa" }, + { n: ["flag-nz", "new zealand flag"], u: "1f1f3-1f1ff" }, + { n: ["flag-om", "oman flag"], u: "1f1f4-1f1f2" }, + { n: ["flag-pa", "panama flag"], u: "1f1f5-1f1e6" }, + { n: ["flag-pe", "peru flag"], u: "1f1f5-1f1ea" }, + { n: ["flag-pf", "french polynesia flag"], u: "1f1f5-1f1eb" }, + { n: ["flag-pg", "papua new guinea flag"], u: "1f1f5-1f1ec" }, + { n: ["flag-ph", "philippines flag"], u: "1f1f5-1f1ed" }, + { n: ["flag-pk", "pakistan flag"], u: "1f1f5-1f1f0" }, + { n: ["flag-pl", "poland flag"], u: "1f1f5-1f1f1" }, + { n: ["flag-pm", "st. pierre & miquelon flag"], u: "1f1f5-1f1f2" }, + { n: ["flag-pn", "pitcairn islands flag"], u: "1f1f5-1f1f3" }, + { n: ["flag-pr", "puerto rico flag"], u: "1f1f5-1f1f7" }, + { n: ["flag-ps", "palestinian territories flag"], u: "1f1f5-1f1f8" }, + { n: ["flag-pt", "portugal flag"], u: "1f1f5-1f1f9" }, + { n: ["flag-pw", "palau flag"], u: "1f1f5-1f1fc" }, + { n: ["flag-py", "paraguay flag"], u: "1f1f5-1f1fe" }, + { n: ["flag-qa", "qatar flag"], u: "1f1f6-1f1e6" }, + { n: ["flag-re", "r\xE9union flag"], u: "1f1f7-1f1ea" }, + { n: ["flag-ro", "romania flag"], u: "1f1f7-1f1f4" }, + { n: ["flag-rs", "serbia flag"], u: "1f1f7-1f1f8" }, + { n: ["ru", "flag-ru", "russia flag"], u: "1f1f7-1f1fa" }, + { n: ["flag-rw", "rwanda flag"], u: "1f1f7-1f1fc" }, + { n: ["flag-sa", "saudi arabia flag"], u: "1f1f8-1f1e6" }, + { n: ["flag-sb", "solomon islands flag"], u: "1f1f8-1f1e7" }, + { n: ["flag-sc", "seychelles flag"], u: "1f1f8-1f1e8" }, + { n: ["flag-sd", "sudan flag"], u: "1f1f8-1f1e9" }, + { n: ["flag-se", "sweden flag"], u: "1f1f8-1f1ea" }, + { n: ["flag-sg", "singapore flag"], u: "1f1f8-1f1ec" }, + { n: ["flag-sh", "st. helena flag"], u: "1f1f8-1f1ed" }, + { n: ["flag-si", "slovenia flag"], u: "1f1f8-1f1ee" }, + { n: ["flag-sj", "svalbard & jan mayen flag"], u: "1f1f8-1f1ef" }, + { n: ["flag-sk", "slovakia flag"], u: "1f1f8-1f1f0" }, + { n: ["flag-sl", "sierra leone flag"], u: "1f1f8-1f1f1" }, + { n: ["flag-sm", "san marino flag"], u: "1f1f8-1f1f2" }, + { n: ["flag-sn", "senegal flag"], u: "1f1f8-1f1f3" }, + { n: ["flag-so", "somalia flag"], u: "1f1f8-1f1f4" }, + { n: ["flag-sr", "suriname flag"], u: "1f1f8-1f1f7" }, + { n: ["flag-ss", "south sudan flag"], u: "1f1f8-1f1f8" }, + { n: ["flag-st", "s\xE3o tom\xE9 & pr\xEDncipe flag"], u: "1f1f8-1f1f9" }, + { n: ["flag-sv", "el salvador flag"], u: "1f1f8-1f1fb" }, + { n: ["flag-sx", "sint maarten flag"], u: "1f1f8-1f1fd" }, + { n: ["flag-sy", "syria flag"], u: "1f1f8-1f1fe" }, + { n: ["flag-sz", "eswatini flag"], u: "1f1f8-1f1ff" }, + { n: ["flag-ta", "tristan da cunha flag"], u: "1f1f9-1f1e6" }, + { n: ["flag-tc", "turks & caicos islands flag"], u: "1f1f9-1f1e8" }, + { n: ["flag-td", "chad flag"], u: "1f1f9-1f1e9" }, + { n: ["flag-tf", "french southern territories flag"], u: "1f1f9-1f1eb" }, + { n: ["flag-tg", "togo flag"], u: "1f1f9-1f1ec" }, + { n: ["flag-th", "thailand flag"], u: "1f1f9-1f1ed" }, + { n: ["flag-tj", "tajikistan flag"], u: "1f1f9-1f1ef" }, + { n: ["flag-tk", "tokelau flag"], u: "1f1f9-1f1f0" }, + { n: ["flag-tl", "timor-leste flag"], u: "1f1f9-1f1f1" }, + { n: ["flag-tm", "turkmenistan flag"], u: "1f1f9-1f1f2" }, + { n: ["flag-tn", "tunisia flag"], u: "1f1f9-1f1f3" }, + { n: ["flag-to", "tonga flag"], u: "1f1f9-1f1f4" }, + { n: ["flag-tr", "turkey flag"], u: "1f1f9-1f1f7" }, + { n: ["flag-tt", "trinidad & tobago flag"], u: "1f1f9-1f1f9" }, + { n: ["flag-tv", "tuvalu flag"], u: "1f1f9-1f1fb" }, + { n: ["flag-tw", "taiwan flag"], u: "1f1f9-1f1fc" }, + { n: ["flag-tz", "tanzania flag"], u: "1f1f9-1f1ff" }, + { n: ["flag-ua", "ukraine flag"], u: "1f1fa-1f1e6" }, + { n: ["flag-ug", "uganda flag"], u: "1f1fa-1f1ec" }, + { n: ["flag-um", "u.s. outlying islands flag"], u: "1f1fa-1f1f2" }, + { n: ["flag-un", "united nations flag"], u: "1f1fa-1f1f3" }, + { n: ["us", "flag-us", "united states flag"], u: "1f1fa-1f1f8" }, + { n: ["flag-uy", "uruguay flag"], u: "1f1fa-1f1fe" }, + { n: ["flag-uz", "uzbekistan flag"], u: "1f1fa-1f1ff" }, + { n: ["flag-va", "vatican city flag"], u: "1f1fb-1f1e6" }, + { n: ["flag-vc", "st. vincent & grenadines flag"], u: "1f1fb-1f1e8" }, + { n: ["flag-ve", "venezuela flag"], u: "1f1fb-1f1ea" }, + { n: ["flag-vg", "british virgin islands flag"], u: "1f1fb-1f1ec" }, + { n: ["flag-vi", "u.s. virgin islands flag"], u: "1f1fb-1f1ee" }, + { n: ["flag-vn", "vietnam flag"], u: "1f1fb-1f1f3" }, + { n: ["flag-vu", "vanuatu flag"], u: "1f1fb-1f1fa" }, + { n: ["flag-wf", "wallis & futuna flag"], u: "1f1fc-1f1eb" }, + { n: ["flag-ws", "samoa flag"], u: "1f1fc-1f1f8" }, + { n: ["flag-xk", "kosovo flag"], u: "1f1fd-1f1f0" }, + { n: ["flag-ye", "yemen flag"], u: "1f1fe-1f1ea" }, + { n: ["flag-yt", "mayotte flag"], u: "1f1fe-1f1f9" }, + { n: ["flag-za", "south africa flag"], u: "1f1ff-1f1e6" }, + { n: ["flag-zm", "zambia flag"], u: "1f1ff-1f1f2" }, + { n: ["flag-zw", "zimbabwe flag"], u: "1f1ff-1f1fc" }, { - n: ["rescue worker\u2019s helmet", "helmet with white cross"], - u: "26d1-fe0f" + n: ["england flag", "flag-england"], + u: "1f3f4-e0067-e0062-e0065-e006e-e0067-e007f" }, - { n: ["prayer beads"], u: "1f4ff" }, - { n: ["lipstick"], u: "1f484" }, - { n: ["ring"], u: "1f48d" }, - { n: ["gem", "gem stone"], u: "1f48e" }, - { n: ["mute", "speaker with cancellation stroke"], u: "1f507" }, - { n: ["speaker"], u: "1f508" }, - { n: ["sound", "speaker with one sound wave"], u: "1f509" }, - { n: ["loud sound", "speaker with three sound waves"], u: "1f50a" }, - { n: ["loudspeaker", "public address loudspeaker"], u: "1f4e2" }, - { n: ["mega", "cheering megaphone"], u: "1f4e3" }, - { n: ["postal horn"], u: "1f4ef" }, - { n: ["bell"], u: "1f514" }, - { n: ["no bell", "bell with cancellation stroke"], u: "1f515" }, - { n: ["musical score"], u: "1f3bc" }, - { n: ["musical note"], u: "1f3b5" }, - { n: ["notes", "multiple musical notes"], u: "1f3b6" }, - { n: ["studio microphone"], u: "1f399-fe0f" }, - { n: ["level slider"], u: "1f39a-fe0f" }, - { n: ["control knobs"], u: "1f39b-fe0f" }, - { n: ["microphone"], u: "1f3a4" }, - { n: ["headphone", "headphones"], u: "1f3a7" }, - { n: ["radio"], u: "1f4fb" }, - { n: ["saxophone"], u: "1f3b7" }, - { n: ["accordion"], u: "1fa97" }, - { n: ["guitar"], u: "1f3b8" }, - { n: ["musical keyboard"], u: "1f3b9" }, - { n: ["trumpet"], u: "1f3ba" }, - { n: ["violin"], u: "1f3bb" }, - { n: ["banjo"], u: "1fa95" }, - { n: ["drum with drumsticks"], u: "1f941" }, - { n: ["long drum"], u: "1fa98" }, - { n: ["iphone", "mobile phone"], u: "1f4f1" }, { - n: ["calling", "mobile phone with rightwards arrow at left"], - u: "1f4f2" + n: ["scotland flag", "flag-scotland"], + u: "1f3f4-e0067-e0062-e0073-e0063-e0074-e007f" }, - { n: ["phone", "telephone", "black telephone"], u: "260e-fe0f" }, - { n: ["telephone receiver"], u: "1f4de" }, - { n: ["pager"], u: "1f4df" }, - { n: ["fax", "fax machine"], u: "1f4e0" }, - { n: ["battery"], u: "1f50b" }, - { n: ["low battery"], u: "1faab" }, - { n: ["electric plug"], u: "1f50c" }, - { n: ["computer", "personal computer"], u: "1f4bb" }, - { n: ["desktop computer"], u: "1f5a5-fe0f" }, - { n: ["printer"], u: "1f5a8-fe0f" }, - { n: ["keyboard"], u: "2328-fe0f" }, - { n: ["computer mouse", "three button mouse"], u: "1f5b1-fe0f" }, - { n: ["trackball"], u: "1f5b2-fe0f" }, - { n: ["minidisc"], u: "1f4bd" }, - { n: ["floppy disk"], u: "1f4be" }, - { n: ["cd", "optical disc"], u: "1f4bf" }, - { n: ["dvd"], u: "1f4c0" }, - { n: ["abacus"], u: "1f9ee" }, - { n: ["movie camera"], u: "1f3a5" }, - { n: ["film frames"], u: "1f39e-fe0f" }, - { n: ["film projector"], u: "1f4fd-fe0f" }, - { n: ["clapper", "clapper board"], u: "1f3ac" }, - { n: ["tv", "television"], u: "1f4fa" }, - { n: ["camera"], u: "1f4f7" }, - { n: ["camera with flash"], u: "1f4f8" }, - { n: ["video camera"], u: "1f4f9" }, - { n: ["vhs", "videocassette"], u: "1f4fc" }, - { n: ["mag", "left-pointing magnifying glass"], u: "1f50d" }, - { n: ["mag right", "right-pointing magnifying glass"], u: "1f50e" }, - { n: ["candle"], u: "1f56f-fe0f" }, - { n: ["bulb", "electric light bulb"], u: "1f4a1" }, - { n: ["flashlight", "electric torch"], u: "1f526" }, - { n: ["lantern", "izakaya lantern"], u: "1f3ee" }, - { n: ["diya lamp"], u: "1fa94" }, - { n: ["notebook with decorative cover"], u: "1f4d4" }, - { n: ["closed book"], u: "1f4d5" }, - { n: ["book", "open book"], u: "1f4d6" }, - { n: ["green book"], u: "1f4d7" }, - { n: ["blue book"], u: "1f4d8" }, - { n: ["orange book"], u: "1f4d9" }, - { n: ["books"], u: "1f4da" }, - { n: ["notebook"], u: "1f4d3" }, - { n: ["ledger"], u: "1f4d2" }, - { n: ["page with curl"], u: "1f4c3" }, - { n: ["scroll"], u: "1f4dc" }, - { n: ["page facing up"], u: "1f4c4" }, - { n: ["newspaper"], u: "1f4f0" }, - { n: ["rolled-up newspaper", "rolled up newspaper"], u: "1f5de-fe0f" }, - { n: ["bookmark tabs"], u: "1f4d1" }, - { n: ["bookmark"], u: "1f516" }, - { n: ["label"], u: "1f3f7-fe0f" }, - { n: ["moneybag", "money bag"], u: "1f4b0" }, - { n: ["coin"], u: "1fa99" }, - { n: ["yen", "banknote with yen sign"], u: "1f4b4" }, - { n: ["dollar", "banknote with dollar sign"], u: "1f4b5" }, - { n: ["euro", "banknote with euro sign"], u: "1f4b6" }, - { n: ["pound", "banknote with pound sign"], u: "1f4b7" }, - { n: ["money with wings"], u: "1f4b8" }, - { n: ["credit card"], u: "1f4b3" }, - { n: ["receipt"], u: "1f9fe" }, - { n: ["chart", "chart with upwards trend and yen sign"], u: "1f4b9" }, - { n: ["email", "envelope"], u: "2709-fe0f" }, - { n: ["e-mail", "e-mail symbol"], u: "1f4e7" }, - { n: ["incoming envelope"], u: "1f4e8" }, { - n: ["envelope with arrow", "envelope with downwards arrow above"], - u: "1f4e9" + n: ["wales flag", "flag-wales"], + u: "1f3f4-e0067-e0062-e0077-e006c-e0073-e007f" + } + ] +}; + +// src/components/Spaces/TreeView/FileStickerMenu/FileStickerMenu.tsx +var import_obsidian8 = require("obsidian"); + +// src/schemas/spaces.ts +var vaultSchema = { + uniques: ["path"], + cols: ["path", "parent", "created", "sticker", "color", "folder", "rank"], + rows: [] +}; +var spaceSchema = { + uniques: ["name"], + cols: ["name", "sticker", "color", "pinned", "sort", "def", "rank"], + rows: [] +}; +var spaceItemsSchema = { + uniques: [], + cols: ["space", "path", "rank"], + rows: [] +}; + +// src/dispatch/spaces.ts +var dispatchSpaceDatabaseFileChanged = (type) => { + let evt = new CustomEvent(eventTypes.spacesChange, { + detail: { + changeType: type + } + }); + window.dispatchEvent(evt); +}; +var onFileCreated2 = async (plugin, newPath, folder) => { + var _a2; + const parent = (_a2 = getAbstractFileAtPath(app, newPath).parent) == null ? void 0 : _a2.path; + const db = plugin.spaceDBInstance(); + insertIntoDB(db, { + vault: { + ...vaultSchema, + rows: [ + { + path: newPath, + parent, + created: Math.trunc(Date.now() / 1e3).toString(), + folder: folder ? "true" : "false" + } + ] + } + }); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("vault"); +}; +var onFileDeleted2 = (plugin, oldPath) => { + const db = plugin.spaceDBInstance(); + deleteFromDB(db, "vault", `path = '${sanitizeSQLStatement(oldPath)}'`); + deleteFromDB(db, "spaceItems", `path = '${sanitizeSQLStatement(oldPath)}'`); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("vault"); +}; +var onFileChanged2 = (plugin, oldPath, newPath) => { + const newFolderPath = getFolderPathFromString(newPath); + const db = plugin.spaceDBInstance(); + updateDB( + db, + { + vault: { + uniques: [], + cols: ["path", "parent"], + rows: [{ path: newPath, oldPath, parent: newFolderPath }] + } }, - { n: ["outbox tray"], u: "1f4e4" }, - { n: ["inbox tray"], u: "1f4e5" }, - { n: ["package"], u: "1f4e6" }, - { n: ["mailbox", "closed mailbox with raised flag"], u: "1f4eb" }, - { n: ["mailbox closed", "closed mailbox with lowered flag"], u: "1f4ea" }, - { n: ["mailbox with mail", "open mailbox with raised flag"], u: "1f4ec" }, + "path", + "oldPath" + ); + updateDB( + db, { - n: ["mailbox with no mail", "open mailbox with lowered flag"], - u: "1f4ed" + spaceItems: { + uniques: [], + cols: ["path"], + rows: [{ path: newPath, oldPath }] + } }, - { n: ["postbox"], u: "1f4ee" }, - { n: ["ballot box with ballot"], u: "1f5f3-fe0f" }, - { n: ["pencil", "pencil2"], u: "270f-fe0f" }, - { n: ["black nib"], u: "2712-fe0f" }, - { n: ["fountain pen", "lower left fountain pen"], u: "1f58b-fe0f" }, - { n: ["pen", "lower left ballpoint pen"], u: "1f58a-fe0f" }, - { n: ["paintbrush", "lower left paintbrush"], u: "1f58c-fe0f" }, - { n: ["crayon", "lower left crayon"], u: "1f58d-fe0f" }, - { n: ["memo", "pencil"], u: "1f4dd" }, - { n: ["briefcase"], u: "1f4bc" }, - { n: ["file folder"], u: "1f4c1" }, - { n: ["open file folder"], u: "1f4c2" }, - { n: ["card index dividers"], u: "1f5c2-fe0f" }, - { n: ["date", "calendar"], u: "1f4c5" }, - { n: ["calendar", "tear-off calendar"], u: "1f4c6" }, - { n: ["spiral notepad", "spiral note pad"], u: "1f5d2-fe0f" }, - { n: ["spiral calendar", "spiral calendar pad"], u: "1f5d3-fe0f" }, - { n: ["card index"], u: "1f4c7" }, - { n: ["chart with upwards trend"], u: "1f4c8" }, - { n: ["chart with downwards trend"], u: "1f4c9" }, - { n: ["bar chart"], u: "1f4ca" }, - { n: ["clipboard"], u: "1f4cb" }, - { n: ["pushpin"], u: "1f4cc" }, - { n: ["round pushpin"], u: "1f4cd" }, - { n: ["paperclip"], u: "1f4ce" }, - { n: ["linked paperclips"], u: "1f587-fe0f" }, - { n: ["straight ruler"], u: "1f4cf" }, - { n: ["triangular ruler"], u: "1f4d0" }, - { n: ["scissors", "black scissors"], u: "2702-fe0f" }, - { n: ["card file box"], u: "1f5c3-fe0f" }, - { n: ["file cabinet"], u: "1f5c4-fe0f" }, - { n: ["wastebasket"], u: "1f5d1-fe0f" }, - { n: ["lock"], u: "1f512" }, - { n: ["unlock", "open lock"], u: "1f513" }, - { n: ["lock with ink pen"], u: "1f50f" }, - { n: ["closed lock with key"], u: "1f510" }, - { n: ["key"], u: "1f511" }, - { n: ["old key"], u: "1f5dd-fe0f" }, - { n: ["hammer"], u: "1f528" }, - { n: ["axe"], u: "1fa93" }, - { n: ["pick"], u: "26cf-fe0f" }, - { n: ["hammer and pick"], u: "2692-fe0f" }, - { n: ["hammer and wrench"], u: "1f6e0-fe0f" }, - { n: ["dagger", "dagger knife"], u: "1f5e1-fe0f" }, - { n: ["crossed swords"], u: "2694-fe0f" }, - { n: ["gun", "pistol"], u: "1f52b" }, - { n: ["boomerang"], u: "1fa83" }, - { n: ["bow and arrow"], u: "1f3f9" }, - { n: ["shield"], u: "1f6e1-fe0f" }, - { n: ["carpentry saw"], u: "1fa9a" }, - { n: ["wrench"], u: "1f527" }, - { n: ["screwdriver"], u: "1fa9b" }, - { n: ["nut and bolt"], u: "1f529" }, - { n: ["gear"], u: "2699-fe0f" }, - { n: ["clamp", "compression"], u: "1f5dc-fe0f" }, - { n: ["scales", "balance scale"], u: "2696-fe0f" }, - { n: ["probing cane"], u: "1f9af" }, - { n: ["link", "link symbol"], u: "1f517" }, - { n: ["chains"], u: "26d3-fe0f" }, - { n: ["hook"], u: "1fa9d" }, - { n: ["toolbox"], u: "1f9f0" }, - { n: ["magnet"], u: "1f9f2" }, - { n: ["ladder"], u: "1fa9c" }, - { n: ["alembic"], u: "2697-fe0f" }, - { n: ["test tube"], u: "1f9ea" }, - { n: ["petri dish"], u: "1f9eb" }, - { n: ["dna", "dna double helix"], u: "1f9ec" }, - { n: ["microscope"], u: "1f52c" }, - { n: ["telescope"], u: "1f52d" }, - { n: ["satellite antenna"], u: "1f4e1" }, - { n: ["syringe"], u: "1f489" }, - { n: ["drop of blood"], u: "1fa78" }, - { n: ["pill"], u: "1f48a" }, - { n: ["adhesive bandage"], u: "1fa79" }, - { n: ["crutch"], u: "1fa7c" }, - { n: ["stethoscope"], u: "1fa7a" }, - { n: ["x-ray"], u: "1fa7b" }, - { n: ["door"], u: "1f6aa" }, - { n: ["elevator"], u: "1f6d7" }, - { n: ["mirror"], u: "1fa9e" }, - { n: ["window"], u: "1fa9f" }, - { n: ["bed"], u: "1f6cf-fe0f" }, - { n: ["couch and lamp"], u: "1f6cb-fe0f" }, - { n: ["chair"], u: "1fa91" }, - { n: ["toilet"], u: "1f6bd" }, - { n: ["plunger"], u: "1faa0" }, - { n: ["shower"], u: "1f6bf" }, - { n: ["bathtub"], u: "1f6c1" }, - { n: ["mouse trap"], u: "1faa4" }, - { n: ["razor"], u: "1fa92" }, - { n: ["lotion bottle"], u: "1f9f4" }, - { n: ["safety pin"], u: "1f9f7" }, - { n: ["broom"], u: "1f9f9" }, - { n: ["basket"], u: "1f9fa" }, - { n: ["roll of paper"], u: "1f9fb" }, - { n: ["bucket"], u: "1faa3" }, - { n: ["soap", "bar of soap"], u: "1f9fc" }, - { n: ["bubbles"], u: "1fae7" }, - { n: ["toothbrush"], u: "1faa5" }, - { n: ["sponge"], u: "1f9fd" }, - { n: ["fire extinguisher"], u: "1f9ef" }, - { n: ["shopping trolley"], u: "1f6d2" }, - { n: ["smoking", "smoking symbol"], u: "1f6ac" }, - { n: ["coffin"], u: "26b0-fe0f" }, - { n: ["headstone"], u: "1faa6" }, - { n: ["funeral urn"], u: "26b1-fe0f" }, - { n: ["moyai"], u: "1f5ff" }, - { n: ["placard"], u: "1faa7" }, - { n: ["identification card"], u: "1faaa" } - ], - symbols: [ - { n: ["atm", "automated teller machine"], u: "1f3e7" }, + "path", + "oldPath" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("vault"); +}; +var onFolderChanged2 = (plugin, oldPath, newPath) => { + const newFolderPath = getFolderFromPath(app, newPath).parent.path; + const db = plugin.spaceDBInstance(); + updateDB( + db, + { + vault: { + uniques: [], + cols: ["path", "parent"], + rows: [{ path: newPath, oldPath, parent: newFolderPath }] + } + }, + "path", + "oldPath" + ); + execQuery( + db, + `UPDATE vault SET parent=REPLACE(parent,'${sanitizeSQLStatement( + oldPath + )}','${sanitizeSQLStatement( + newPath + )}') WHERE parent LIKE '${sanitizeSQLStatement(oldPath)}%';` + ); + execQuery( + db, + `UPDATE vault SET path=REPLACE(path,'${sanitizeSQLStatement( + oldPath + )}','${sanitizeSQLStatement( + newPath + )}') WHERE path LIKE '${sanitizeSQLStatement(oldPath)}%/';` + ); + updateDB( + db, + { + spaceItems: { + uniques: [], + cols: ["path"], + rows: [{ path: newPath, oldPath }] + } + }, + "path", + "oldPath" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("vault"); +}; +var onFolderDeleted2 = (plugin, oldPath) => { + const db = plugin.spaceDBInstance(); + deleteFromDB( + db, + "vault", + `path = '${sanitizeSQLStatement( + oldPath + )}' OR parent LIKE '${sanitizeSQLStatement(oldPath)}%'` + ); + deleteFromDB(db, "spaceItems", `path = '${sanitizeSQLStatement(oldPath)}'`); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("vault"); +}; + +// src/utils/spaces/spaces.ts +var import_obsidian7 = require("obsidian"); +var rebuildIndex = async (plugin) => { + console.time("Reindex Spaces Data"); + const db = plugin.spaceDBInstance(); + indexCurrentFileTree(db); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("vault"); + console.timeEnd("Reindex Spaces Data"); +}; +var spaceItemToTreeNode = (space, collapsed, sortable) => { + return { + id: space.name, + spaceItem: space, + parentId: null, + depth: 0, + index: 0, + space: space.name, + item: null, + collapsed, + sortable + }; +}; +var vaulItemToTreeNode = (item, space, path, depth, i4, collapsed, sortable) => ({ + item, + file: getAbstractFileAtPath(app, item.path), + space, + id: (space == "/" ? "" : space) + "//" + item.path, + parentId: (space == "/" ? "" : space) + "//" + path, + depth, + index: i4, + collapsed, + sortable +}); +var folderSortFn = (sortStrategy, direction) => (a5, b4) => { + if (sortStrategy == "rank") { + return a5.rank.localeCompare(b4.rank, void 0, { numeric: true }); + } + const sortFns = [ + compareByField("folder", false), + compareByField(sortStrategy, direction) + ]; + return sortFns.reduce((p3, c4) => { + return p3 == 0 ? c4(a5, b4) : p3; + }, 0); +}; +var flattenedTreeFromVaultItems = (root, space, vaultItems, openNodes, depth, sortStrategy, direction) => { + if (!vaultItems[root]) { + return []; + } + const flattenTree = (path, vaultItems2, openNodes2, depth2, index) => { + let items = []; + let i4 = index; + vaultItems2[path].sort(folderSortFn(sortStrategy, direction)).forEach((item) => { + const collapsed = !openNodes2.includes(item.path); + const node = vaulItemToTreeNode( + item, + space, + path, + depth2, + i4, + collapsed, + sortStrategy == "rank" + ); + if (node.file) + items.push(node); + i4 = i4 + 1; + if (vaultItems2[item.path] && !collapsed) { + items.push( + ...flattenTree(item.path, vaultItems2, openNodes2, depth2 + 1, i4) + ); + } + }); + return items; + }; + return flattenTree(root, vaultItems, openNodes, depth, 0); +}; +var vaultItemForPath = (plugin, path) => { + var _a2; + if (!path) + return null; + const db = plugin.spaceDBInstance(); + const table = selectDB(db, "vault", `path='${sanitizeSQLStatement(path)}'`); + return (_a2 = table == null ? void 0 : table.rows) == null ? void 0 : _a2[0]; +}; +var saveFileSticker = (plugin, path, sticker) => { + const db = plugin.spaceDBInstance(); + updateDB( + db, + { + vault: { + ...vaultSchema, + cols: ["path", "sticker"], + rows: [{ path, sticker }] + } + }, + "path", + "path" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("sticker"); +}; +var saveFileColor = (plugin, path, color) => { + const db = plugin.spaceDBInstance(); + updateDB( + db, + { + vault: { + ...vaultSchema, + cols: ["path", "color"], + rows: [{ path, color }] + } + }, + "path", + "path" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("sticker"); +}; +var saveSpaceSticker = (plugin, name, sticker) => { + const db = plugin.spaceDBInstance(); + updateDB( + db, + { + spaces: { + ...spaceSchema, + cols: ["name", "sticker"], + rows: [{ name, sticker }] + } + }, + "name", + "name" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var updateFileRank = (plugin, item, vaultTree, rank) => { + const db = plugin.spaceDBInstance(); + if (Object.keys(vaultTree).includes(item.parent)) { + let fixedRank = rank; + if (parseInt(item.rank) > rank) + fixedRank = rank + 1; + const newItems = insert( + vaultTree[item.parent].filter((f4) => f4.path != item.path), + fixedRank, + item + ).map((f4, index) => ({ path: f4.path, rank: index.toString() })); + updateDB( + db, + { + vault: { + ...vaultSchema, + cols: ["path", "rank"], + rows: newItems + } + }, + "path", + "path" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("vault"); + } +}; +var moveAFileToNewParentAtIndex = (plugin, item, newParent, vaultTree, index) => { + var _a2; + const currFile = getAbstractFileAtPath(app, item.path); + const newPath = newParent == "/" ? currFile.name : newParent + "/" + currFile.name; + const newItem = { + ...item, + path: newPath, + parent: newParent, + rank: index.toString() + }; + if (Object.keys(vaultTree).includes(newParent)) { + vaultTree[newParent] = insert(vaultTree[newParent], index, newItem); + const db = plugin.spaceDBInstance(); + const table = selectDB( + db, + "vault", + `parent='${sanitizeSQLStatement(newParent)}'` + ); + const rows = insert( + (_a2 = table == null ? void 0 : table.rows.sort( + (a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true }) + )) != null ? _a2 : [], + index, + newItem + ).map((f4, index2) => ({ ...f4, rank: index2.toString() })); + insertIntoDB(db, { + vault: { + ...vaultSchema, + rows: [newItem] + } + }); + deleteFromDB(db, "vault", `path='${sanitizeSQLStatement(item.path)}'`); + updateDB( + db, + { + vault: { + ...vaultSchema, + cols: ["path", "rank"], + rows + } + }, + "path", + "path" + ); + plugin.saveSpacesDB(); + const afile = getAbstractFileAtPath(app, item.path); + app.fileManager.renameFile(afile, newPath); + } else { + const afile = getAbstractFileAtPath(app, item.path); + app.fileManager.renameFile(afile, newPath); + } +}; +var insertSpaceAtIndex = (plugin, space, pinned, rank, def) => { + const db = plugin.spaceDBInstance(); + let newSpace = { name: space, pinned: pinned ? "true" : "false", def }; + const spaces2 = retrieveSpaces(plugin); + const spaceExists = spaces2.find((f4) => f4.name == space); + let fixedRank = rank; + if (spaceExists) { + updateDB( + db, + { + spaces: { + ...spaceSchema, + rows: [{ ...spaceExists, ...newSpace }] + } + }, + "name", + "name" + ); + if (parseInt(spaceExists.rank) < rank) + fixedRank = rank - 1; + } else { + insertIntoDB(db, { + spaces: { + ...spaceSchema, + rows: [newSpace] + } + }); + } + const newSpaces = insert( + spaces2.filter((f4) => f4.name != space), + fixedRank, + newSpace + ).map((f4, index) => ({ name: f4.name, rank: index.toString() })); + updateDB( + db, { - n: ["put litter in its place", "put litter in its place symbol"], - u: "1f6ae" + spaces: { + ...spaceSchema, + cols: ["name", "rank"], + rows: newSpaces + } }, - { n: ["potable water", "potable water symbol"], u: "1f6b0" }, - { n: ["wheelchair", "wheelchair symbol"], u: "267f" }, - { n: ["mens", "mens symbol"], u: "1f6b9" }, - { n: ["womens", "womens symbol"], u: "1f6ba" }, - { n: ["restroom"], u: "1f6bb" }, - { n: ["baby symbol"], u: "1f6bc" }, - { n: ["wc", "water closet"], u: "1f6be" }, - { n: ["passport control"], u: "1f6c2" }, - { n: ["customs"], u: "1f6c3" }, - { n: ["baggage claim"], u: "1f6c4" }, - { n: ["left luggage"], u: "1f6c5" }, - { n: ["warning", "warning sign"], u: "26a0-fe0f" }, - { n: ["children crossing"], u: "1f6b8" }, - { n: ["no entry"], u: "26d4" }, - { n: ["no entry sign"], u: "1f6ab" }, - { n: ["no bicycles"], u: "1f6b3" }, - { n: ["no smoking", "no smoking symbol"], u: "1f6ad" }, - { n: ["do not litter", "do not litter symbol"], u: "1f6af" }, - { n: ["non-potable water", "non-potable water symbol"], u: "1f6b1" }, - { n: ["no pedestrians"], u: "1f6b7" }, - { n: ["no mobile phones"], u: "1f4f5" }, - { n: ["underage", "no one under eighteen symbol"], u: "1f51e" }, - { n: ["radioactive", "radioactive sign"], u: "2622-fe0f" }, - { n: ["biohazard", "biohazard sign"], u: "2623-fe0f" }, - { n: ["arrow up", "upwards black arrow"], u: "2b06-fe0f" }, - { n: ["north east arrow", "arrow upper right"], u: "2197-fe0f" }, - { n: ["arrow right", "black rightwards arrow"], u: "27a1-fe0f" }, - { n: ["south east arrow", "arrow lower right"], u: "2198-fe0f" }, - { n: ["arrow down", "downwards black arrow"], u: "2b07-fe0f" }, - { n: ["south west arrow", "arrow lower left"], u: "2199-fe0f" }, - { n: ["arrow left", "leftwards black arrow"], u: "2b05-fe0f" }, - { n: ["north west arrow", "arrow upper left"], u: "2196-fe0f" }, - { n: ["up down arrow", "arrow up down"], u: "2195-fe0f" }, - { n: ["left right arrow"], u: "2194-fe0f" }, - { n: ["leftwards arrow with hook"], u: "21a9-fe0f" }, - { n: ["arrow right hook", "rightwards arrow with hook"], u: "21aa-fe0f" }, + "name", + "name" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var insertSpaceItemAtIndex = (plugin, spaceName, path, rank) => { + var _a2; + const db = plugin.spaceDBInstance(); + const space = retrieveSpaces(plugin).find((f4) => f4.name == spaceName); + if (!space) + return; + let newSpace = { + space: space.name, + path, + rank: rank.toString() + }; + const spaceItems = retrieveSpaceItems(plugin, [space]); + const spaceExists = (_a2 = spaceItems[space.name]) != null ? _a2 : []; + const pathExists = spaceExists.find((f4) => f4.path == path); + let fixedRank = rank; + if (!pathExists) { + insertIntoDB(db, { + spaceItems: { + ...spaceItemsSchema, + rows: [newSpace] + } + }); + fixedRank = rank + 1; + } else { + if (parseInt(pathExists.rank) > rank) + fixedRank = rank + 1; + } + const newSpaceItems = insert( + spaceExists.filter((f4) => f4.path != path), + fixedRank, + newSpace + ).map((f4, index) => ({ + space: f4.space, + path: f4.path, + rank: index.toString() + })); + updateDB( + db, { - n: ["arrow heading up", "arrow pointing rightwards then curving upwards"], - u: "2934-fe0f" + spaceItems: { + ...spaceItemsSchema, + rows: newSpaceItems + } }, + `space='${space.name}' AND path`, + "path" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var renameSpace = (plugin, space, newName) => { + const db = plugin.spaceDBInstance(); + updateDB( + db, { - n: [ - "arrow heading down", - "arrow pointing rightwards then curving downwards" - ], - u: "2935-fe0f" + spaces: { + ...spaceSchema, + cols: ["name"], + rows: [{ oldName: space, name: newName }] + } }, + "name", + "oldName" + ); + updateDB( + db, { - n: [ - "arrows clockwise", - "clockwise downwards and upwards open circle arrows" - ], - u: "1f503" + spaceItems: { + ...spaceItemsSchema, + cols: ["space"], + rows: [{ oldSpace: space, space: newName }] + } }, + "space", + "oldSpace" + ); + plugin.saveSpacesDB(); + plugin.settings.expandedSpaces = plugin.settings.expandedSpaces.map( + (f4) => f4 == space ? newName : f4 + ); + plugin.saveSettings(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var removeSpace = (plugin, space) => { + const db = plugin.spaceDBInstance(); + deleteFromDB(db, "spaces", `name='${sanitizeSQLStatement(space)}'`); + deleteFromDB(db, "spaceItems", `space='${sanitizeSQLStatement(space)}'`); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var updateSpaceSort = (plugin, space, sort) => { + const db = plugin.spaceDBInstance(); + updateDB( + db, { - n: [ - "arrows counterclockwise", - "anticlockwise downwards and upwards open circle arrows" - ], - u: "1f504" + spaces: { + ...spaceSchema, + cols: ["name", "sort"], + rows: [{ name: space, sort: JSON.stringify(sort) }] + } }, - { n: ["back", "back with leftwards arrow above"], u: "1f519" }, - { n: ["end", "end with leftwards arrow above"], u: "1f51a" }, + "name", + "name" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var toggleSpacePin = (plugin, space, state) => { + const db = plugin.spaceDBInstance(); + updateDB( + db, { - n: ["on", "on with exclamation mark with left right arrow above"], - u: "1f51b" + spaces: { + ...spaceSchema, + cols: ["name", "pinned"], + rows: [{ name: space, pinned: state ? "true" : "false" }] + } }, - { n: ["soon", "soon with rightwards arrow above"], u: "1f51c" }, - { n: ["top", "top with upwards arrow above"], u: "1f51d" }, - { n: ["place of worship"], u: "1f6d0" }, - { n: ["atom symbol"], u: "269b-fe0f" }, - { n: ["om", "om symbol"], u: "1f549-fe0f" }, - { n: ["star of david"], u: "2721-fe0f" }, - { n: ["wheel of dharma"], u: "2638-fe0f" }, - { n: ["yin yang"], u: "262f-fe0f" }, - { n: ["latin cross"], u: "271d-fe0f" }, - { n: ["orthodox cross"], u: "2626-fe0f" }, - { n: ["star and crescent"], u: "262a-fe0f" }, - { n: ["peace symbol"], u: "262e-fe0f" }, - { n: ["menorah with nine branches"], u: "1f54e" }, - { n: ["six pointed star", "six pointed star with middle dot"], u: "1f52f" }, - { n: ["aries"], u: "2648" }, - { n: ["taurus"], u: "2649" }, - { n: ["gemini"], u: "264a" }, - { n: ["cancer"], u: "264b" }, - { n: ["leo"], u: "264c" }, - { n: ["virgo"], u: "264d" }, - { n: ["libra"], u: "264e" }, - { n: ["scorpius"], u: "264f" }, - { n: ["sagittarius"], u: "2650" }, - { n: ["capricorn"], u: "2651" }, - { n: ["aquarius"], u: "2652" }, - { n: ["pisces"], u: "2653" }, - { n: ["ophiuchus"], u: "26ce" }, - { n: ["twisted rightwards arrows"], u: "1f500" }, + "name", + "name" + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var addPathsToSpace = (plugin, space, paths) => { + const db = plugin.spaceDBInstance(); + insertIntoDB(db, { + spaceItems: { + ...spaceItemsSchema, + rows: [...paths.map((p3) => ({ space, path: p3 }))] + } + }); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var removePathsFromSpace = (plugin, space, paths) => { + const db = plugin.spaceDBInstance(); + paths.forEach( + (path) => deleteFromDB( + db, + "spaceItems", + `space='${sanitizeSQLStatement(space)}' AND path='${sanitizeSQLStatement( + path + )}'` + ) + ); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("space"); +}; +var retrieveSpaces = (plugin) => { + const db = plugin.spaceDBInstance(); + const table = selectDB(db, "spaces"); + if (table) { + return table.rows.sort( + (a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true }) + ); + } + return []; +}; +var retrieveSpaceItems = (plugin, spaces2) => { + const db = plugin.spaceDBInstance(); + let retrievedSpaces = {}; + spaces2.forEach((space) => { + var _a2, _b2, _c2, _d2; + const table = selectDB( + db, + "spaceItems", + `space='${sanitizeSQLStatement(space.name)}'` + ); + let rows = (_a2 = table == null ? void 0 : table.rows) != null ? _a2 : []; + if (((_b2 = space.def) == null ? void 0 : _b2.length) > 0) { + const spaceItems = ((_d2 = (_c2 = selectDB(db, "vault", `parent='${sanitizeSQLStatement(space.def)}'`)) == null ? void 0 : _c2.rows) != null ? _d2 : []).filter(excludeVaultItemPredicate(plugin)); + const extraItems = rows.filter( + (f4) => !spaceItems.some((g4) => g4.path == f4.path) + ); + rows = rows.filter((f4) => !extraItems.some((g4) => f4.path == g4.path)); + extraItems.forEach( + (row) => deleteFromDB( + db, + "spaceItems", + `space='${sanitizeSQLStatement( + space.name + )}' AND path='${sanitizeSQLStatement(row.path)}'` + ) + ); + spaceItems.forEach((row) => { + if (!rows.some((f4) => f4.path == row.path)) { + const newItem = { space: space.name, path: row.path, rank: "0" }; + insertIntoDB(db, { + spaceItems: { + ...spaceItemsSchema, + rows: [newItem] + } + }); + rows.push(newItem); + } + }); + } + retrievedSpaces[space.name] = rows.sort( + (a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true }) + ); + }); + return retrievedSpaces; +}; +var retrieveFolders = async (plugin, paths) => { + const db = plugin.spaceDBInstance(); + let retrievedFolders = {}; + paths.forEach((folder) => { + const table = selectDB( + db, + "vault", + `parent='${sanitizeSQLStatement(folder)}'` + ); + if (table) { + retrievedFolders[folder] = table.rows.filter( + excludeVaultItemPredicate(plugin) + ); + } + }); + return retrievedFolders; +}; +var migrateIndex = async (plugin) => { + console.time("Migrate Spaces Data"); + const db = plugin.spaceDBInstance(); + initiateDB(db); + indexCurrentFileTree(db); + mergeCurrentRanks(db, plugin.settings.folderRank); + mergeExistingFileIcons(db, plugin.settings.fileIcons); + mergeSpaces(db, plugin.settings.spaces); + plugin.saveSpacesDB(); + dispatchSpaceDatabaseFileChanged("vault"); + plugin.settings.folderRank = null; + plugin.settings.fileIcons = null; + plugin.settings.spaces = null; + plugin.saveSettings(); + console.timeEnd("Migrate Spaces Data"); +}; +var initiateDB = (db) => { + replaceDB(db, { + vault: vaultSchema, + spaces: spaceSchema, + spaceItems: spaceItemsSchema + }); +}; +var indexCurrentFileTree = (db) => { + var _a2, _b2; + let treeItems = []; + import_obsidian7.Vault.recurseChildren(app.vault.getRoot(), (file) => { + var _a3; + treeItems.push({ + path: file.path, + parent: (_a3 = file.parent) == null ? void 0 : _a3.path, + created: file instanceof import_obsidian7.TFile ? file.stat.ctime.toString() : void 0, + folder: file instanceof import_obsidian7.TFolder ? "true" : "false" + }); + }); + const currentPaths = (_b2 = (_a2 = selectDB(db, "vault")) == null ? void 0 : _a2.rows) != null ? _b2 : []; + const deleteRows = currentPaths.filter( + (item) => !treeItems.some((i4) => i4.path == item.path) + ); + const fixRows = currentPaths.filter( + (item) => treeItems.some((i4) => i4.path == item.path && i4.parent != item.parent) + ).map((item) => ({ + ...item, + ...treeItems.find((i4) => i4.path == item.path) + })); + const newRows = treeItems.filter( + (item) => !currentPaths.some((i4) => i4.path == item.path) + ); + fixRows.forEach((row) => { + updateDB(db, { vault: { ...vaultSchema, rows: [row] } }, "path", "path"); + }); + deleteRows.forEach((path) => { + deleteFromDB(db, "vault", `path='${sanitizeSQLStatement(path.path)}'`); + }); + deleteRows.forEach((path) => { + deleteFromDB(db, "spaceItems", `path='${sanitizeSQLStatement(path.path)}'`); + }); + const chunkSize = 20; + for (let i4 = 0; i4 < newRows.length; i4 += chunkSize) { + const chunk = newRows.slice(i4, i4 + chunkSize); + insertIntoDB(db, { + vault: { + ...vaultSchema, + rows: chunk + } + }); + } +}; +var mergeExistingFileIcons = (db, fileIcons) => { + const dbRows = fileIcons.map(([path, sticker]) => ({ + path, + sticker + })); + updateDB( + db, { - n: ["repeat", "clockwise rightwards and leftwards open circle arrows"], - u: "1f501" + vault: { + uniques: [], + cols: ["sticker"], + rows: dbRows + } }, + "path", + "path" + ); +}; +var mergeCurrentRanks = (db, ranks) => { + const flattenStringTreeChildren = (path, children) => { + const dbRows2 = []; + children.forEach((item, index) => { + dbRows2.push({ + path: path + item.node, + rank: index.toString() + }); + if (item.children.length > 0) { + dbRows2.push( + ...flattenStringTreeChildren(path + item.node + "/", item.children) + ); + } + }); + return dbRows2; + }; + const dbRows = flattenStringTreeChildren("", ranks.children); + updateDB( + db, { - n: [ - "repeat one", - "clockwise rightwards and leftwards open circle arrows with circled one overlay" - ], - u: "1f502" + vault: { + uniques: [], + cols: ["rank"], + rows: dbRows + } }, - { n: ["arrow forward", "black right-pointing triangle"], u: "25b6-fe0f" }, - { n: ["fast forward", "black right-pointing double triangle"], u: "23e9" }, - { - n: [ - "next track button", - "black right pointing double triangle with vertical bar" + "path", + "path" + ); +}; +var mergeSpaces = (db, sectionTrees) => { + let spaces2 = []; + let spaceItems = []; + sectionTrees.forEach((space, index) => { + spaces2.push({ name: space.section, rank: index.toString() }); + spaceItems.push( + ...space.children.map((f4, index2) => ({ + space: space.section, + path: f4, + rank: index2.toString() + })) + ); + }); + insertIntoDB(db, { + spaces: { + ...spaceSchema, + rows: spaces2 + }, + spaceItems: { + ...spaceItemsSchema, + rows: spaceItems + } + }); +}; + +// src/utils/emoji.ts +var unifiedToNative = (unified) => { + let unicodes = unified.split("-"); + let codePoints = unicodes.map((u4) => `0x${u4}`); + return String.fromCodePoint(...codePoints); +}; +var saveFileIcons = (plugin, files, icon) => { + files.forEach((file) => { + saveFileSticker(plugin, file, icon); + }); +}; +var saveFileColors = (plugin, files, icon) => { + files.forEach((file) => { + saveFileColor(plugin, file, icon); + }); +}; +var saveSpaceIcon = (plugin, space, icon) => { + saveSpaceSticker(plugin, space, icon); +}; +var removeSpaceIcon = (plugin, space) => { + saveSpaceSticker(plugin, space, ""); +}; +var saveFileIcon = (plugin, data, icon) => { + saveFileSticker(plugin, data.path, icon); +}; +var removeFileIcons = (plugin, files) => { + files.forEach((file) => { + saveFileSticker(plugin, file, ""); + }); +}; +var removeFileIcon = (plugin, data) => { + saveFileSticker(plugin, data.path, ""); +}; + +// src/components/Spaces/TreeView/FileStickerMenu/FileStickerMenu.tsx +var StickerModal = class extends import_obsidian8.FuzzySuggestModal { + constructor(app2, setIcon) { + super(app2); + this.setIcon = setIcon; + this.resultContainerEl.toggleClass("mk-sticker-modal", true); + this.inputEl.focus(); + this.emptyStateText = i18n_default.labels.findStickers; + this.limit = 0; + } + renderSuggestion(item, el) { + el.innerHTML = unifiedToNative(item.item.unicode); + el.setAttr("aria-label", item.item.label); + } + getItemText(item) { + return item.label + item.desc; + } + getItems() { + const allEmojis = Object.keys(emojis).reduce( + (p3, c4) => [ + ...p3, + ...emojis[c4].map((e4) => ({ + label: e4.n[0], + desc: e4.n[1], + variants: e4.v, + unicode: e4.u + })) ], - u: "23ed-fe0f" + [] + ); + return allEmojis; + } + onChooseItem(item, evt) { + this.setIcon(item.unicode); + } +}; + +// src/components/FileSticker/FileSticker.tsx +var FileSticker = (props2) => { + const [vaultItem, setVaultItem] = p2( + vaultItemForPath(props2.plugin, props2.filePath) + ); + const reloadIcon = (e4) => { + if (e4.detail.changeType == "sticker") + setVaultItem(vaultItemForPath(props2.plugin, props2.filePath)); + }; + h2(() => { + if ((vaultItem == null ? void 0 : vaultItem.path) != props2.filePath) { + setVaultItem(vaultItemForPath(props2.plugin, props2.filePath)); + } + window.addEventListener(eventTypes.spacesChange, reloadIcon); + return () => { + window.removeEventListener(eventTypes.spacesChange, reloadIcon); + }; + }, [props2.filePath]); + const triggerStickerMenu = (e4) => { + e4.stopPropagation(); + let vaultChangeModal = new StickerModal( + props2.plugin.app, + (emoji) => saveFileSticker(props2.plugin, props2.filePath, emoji) + ); + vaultChangeModal.open(); + }; + const color = vaultItem == null ? void 0 : vaultItem.color; + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-file-icon" + }, /* @__PURE__ */ bn.createElement("button", { + "aria-label": i18n_default.buttons.changeIcon, + style: (color == null ? void 0 : color.length) > 0 ? { + "--label-color": `${vaultItem.color}`, + "--icon-color": `#ffffff` + } : { + "--icon-color": `var(--text-muted)` + }, + dangerouslySetInnerHTML: (vaultItem == null ? void 0 : vaultItem.sticker) ? { __html: unifiedToNative(vaultItem.sticker) } : (vaultItem == null ? void 0 : vaultItem.folder) == "true" ? { + __html: color ? uiIconSet["mk-ui-folder-solid"] : uiIconSet["mk-ui-folder"] + } : { + __html: color ? uiIconSet["mk-ui-file-solid"] : uiIconSet["mk-ui-file"] + }, + onClick: (e4) => triggerStickerMenu(e4) + })); +}; + +// src/components/ui/modals/modals.ts +var import_obsidian9 = require("obsidian"); +var SaveViewModal = class extends import_obsidian9.Modal { + constructor(schema, saveSchema, action) { + super(app); + this.schema = schema; + this.saveSchema = saveSchema; + this.action = action; + } + onOpen() { + let { contentEl } = this; + let myModal = this; + let headerText; + if (this.action == "new view") + headerText = "Save View"; + if (this.action == "new table") + headerText = "Save Table"; + if (this.action == "rename view") + headerText = "Rename View"; + if (this.action == "rename table") + headerText = "Rename Table"; + const headerEl = contentEl.createEl("div", { text: headerText }); + headerEl.addClass("modal-title"); + const inputEl = contentEl.createEl("input"); + inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; + inputEl.focus(); + let changeButtonText; + if (this.action == "new view") + changeButtonText = "Save View"; + if (this.action == "new table") + changeButtonText = "Save Table"; + if (this.action == "rename view") + changeButtonText = "Rename View"; + if (this.action == "rename table") + changeButtonText = "Rename Table"; + const changeButton = contentEl.createEl("button", { + text: changeButtonText + }); + const cancelButton = contentEl.createEl("button", { + text: i18n_default.buttons.cancel + }); + cancelButton.style.cssText = "float: right;"; + cancelButton.addEventListener("click", () => { + myModal.close(); + }); + const onClickAction = async () => { + let newName = inputEl.value; + if (this.action == "new view" || this.action == "new table") { + this.saveSchema({ ...this.schema, id: newName, name: newName }); + } else { + this.saveSchema({ ...this.schema, name: newName }); + } + myModal.close(); + }; + changeButton.addEventListener("click", onClickAction); + inputEl.addEventListener("keydown", (e4) => { + if (e4.key === "Enter") { + e4.preventDefault(); + onClickAction(); + } + }); + } + onClose() { + let { contentEl } = this; + contentEl.empty(); + } +}; +var MergeColumnModal = class extends import_obsidian9.Modal { + constructor(columns, mergeColumn) { + super(app); + this.columns = columns; + this.mergeColumn = mergeColumn; + } + onOpen() { + let { contentEl } = this; + let myModal = this; + let headerText = "Merge Field"; + const headerEl = contentEl.createEl("div", { text: headerText }); + headerEl.addClass("modal-title"); + const containerEl = contentEl.createEl("div"); + containerEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; + const select = containerEl.createEl("select"); + for (var i4 = 0; i4 < this.columns.length; i4++) { + var opt = document.createElement("option"); + opt.value = i4.toString(); + opt.innerHTML = this.columns[i4].name + this.columns[i4].table; + select.appendChild(opt); + } + const select2 = containerEl.createEl("select"); + for (var i4 = 0; i4 < this.columns.length; i4++) { + var opt = document.createElement("option"); + opt.value = i4.toString(); + opt.innerHTML = this.columns[i4].name + this.columns[i4].table; + select2.appendChild(opt); + } + let changeButtonText = "Merge"; + const changeButton = contentEl.createEl("button", { + text: changeButtonText + }); + const cancelButton = contentEl.createEl("button", { + text: i18n_default.buttons.cancel + }); + cancelButton.style.cssText = "float: right;"; + cancelButton.addEventListener("click", () => { + myModal.close(); + }); + const onClickAction = async () => { + this.mergeColumn( + this.columns[parseInt(select.value)], + this.columns[parseInt(select2.value)] + ); + myModal.close(); + }; + changeButton.addEventListener("click", onClickAction); + } + onClose() { + let { contentEl } = this; + contentEl.empty(); + } +}; +var VaultChangeModal = class extends import_obsidian9.Modal { + constructor(plugin, file, action, space) { + super(plugin.app); + this.file = file; + this.action = action; + this.plugin = plugin; + this.space = space; + } + onOpen() { + let { contentEl } = this; + let myModal = this; + let headerText; + if (this.action === "rename") { + headerText = i18n_default.labels.rename; + } else if (this.action === "create folder") { + headerText = i18n_default.labels.createFolder; + } else if (this.action === "create note") { + headerText = i18n_default.labels.createNote; + } + const headerEl = contentEl.createEl("div", { text: headerText }); + headerEl.addClass("modal-title"); + const inputEl = contentEl.createEl("input"); + inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; + if (this.action === "rename") { + if (this.file.name.endsWith(".md")) { + inputEl.value = this.file.name.substring( + 0, + this.file.name.lastIndexOf(".") + ); + } else { + inputEl.value = this.file.name; + } + } + inputEl.focus(); + let changeButtonText; + if (this.action === "rename") { + changeButtonText = i18n_default.buttons.rename; + } else if (this.action === "create folder") { + changeButtonText = i18n_default.buttons.createFolder; + } else if (this.action === "create note") { + changeButtonText = i18n_default.buttons.createNote; + } + const changeButton = contentEl.createEl("button", { + text: changeButtonText + }); + const cancelButton = contentEl.createEl("button", { + text: i18n_default.buttons.cancel + }); + cancelButton.style.cssText = "float: right;"; + cancelButton.addEventListener("click", () => { + myModal.close(); + }); + const onClickAction = async () => { + let newName = inputEl.value; + if (this.action === "rename") { + if (this.file.name.endsWith(".md")) + newName = newName + ".md"; + this.app.fileManager.renameFile( + this.file, + this.file.parent.path == "/" ? newName : this.file.parent.path + "/" + newName + ); + } else if (this.action === "create folder") { + const path = !this.file || this.file.path == "/" ? newName : this.file.path + "/" + newName; + if (getAbstractFileAtPath(app, path)) { + new import_obsidian9.Notice("Folder already exists"); + return; + } + this.app.vault.createFolder(path); + if (this.space != "/") + addPathsToSpace(this.plugin, this.space, [path]); + } + myModal.close(); + }; + changeButton.addEventListener("click", onClickAction); + inputEl.addEventListener("keydown", (e4) => { + if (e4.key === "Enter") + onClickAction(); + }); + } + onClose() { + let { contentEl } = this; + contentEl.empty(); + } +}; +var MoveSuggestionModal = class extends import_obsidian9.FuzzySuggestModal { + constructor(app2, files) { + super(app2); + this.files = files; + } + getItemText(item) { + return item.path; + } + getItems() { + return getAllFoldersInVault(this.app); + } + onChooseItem(item, evt) { + this.files.forEach((f4) => { + const file = getAbstractFileAtPath(app, f4); + if (file) { + this.app.vault.rename(file, item.path + "/" + file.name); + } + }); + } +}; +function getAllFoldersInVault(app2) { + let folders = []; + let rootFolder = app2.vault.getRoot(); + folders.push(rootFolder); + function recursiveFx(folder) { + for (let child of folder.children) { + if (child instanceof import_obsidian9.TFolder) { + let childFolder = child; + folders.push(childFolder); + if (childFolder.children) + recursiveFx(childFolder); + } + } + } + recursiveFx(rootFolder); + return folders; +} +var SectionChangeModal = class extends import_obsidian9.Modal { + constructor(plugin, space, action) { + super(plugin.app); + this.space = space; + this.action = action; + this.plugin = plugin; + } + onOpen() { + let { contentEl } = this; + let myModal = this; + let headerText; + if (this.action === "rename") { + headerText = i18n_default.labels.renameSection; + } else if (this.action === "create") { + headerText = i18n_default.labels.createSection; + } + const headerEl = contentEl.createEl("div", { text: headerText }); + headerEl.addClass("modal-title"); + const inputEl = contentEl.createEl("input"); + inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; + if (this.action === "rename") { + inputEl.value = this.space; + } + inputEl.focus(); + let changeButtonText; + if (this.action === "rename") { + changeButtonText = i18n_default.buttons.rename; + } else if (this.action === "create") { + changeButtonText = i18n_default.buttons.createSection; + } + const changeButton = contentEl.createEl("button", { + text: changeButtonText + }); + const cancelButton = contentEl.createEl("button", { + text: i18n_default.buttons.cancel + }); + cancelButton.style.cssText = "float: right;"; + cancelButton.addEventListener("click", () => { + myModal.close(); + }); + const onClickAction = async () => { + let newName = inputEl.value.replace(/\//g, ""); + if (newName.length == 0) { + new import_obsidian9.Notice("Enter a name for your space"); + return; + } + if (retrieveSpaces(this.plugin).find((f4) => f4.name == newName)) { + new import_obsidian9.Notice("Space name already exists"); + return; + } + if (this.action === "rename") { + renameSpace(this.plugin, this.space, newName); + } else if (this.action === "create") { + insertSpaceAtIndex(this.plugin, newName, false, 0); + } + myModal.close(); + }; + changeButton.addEventListener("click", onClickAction); + inputEl.addEventListener("keydown", (e4) => { + if (e4.key === "Enter") + onClickAction(); + }); + } + onClose() { + let { contentEl } = this; + contentEl.empty(); + } +}; + +// src/hooks/useLongPress.tsx +function isMouseEvent(e4) { + return e4 && "screenX" in e4; +} + +// src/components/ui/menus/fileMenu.tsx +var import_obsidian10 = require("obsidian"); + +// src/utils/color.ts +var colors = [ + ["Red", "#eb3b5a"], + ["Orange", "#fa8231"], + ["Yellow", "#f7b731"], + ["Green", "#20bf6b"], + ["Turquoise", "#0fb9b1"], + ["Teal", "#2d98da"], + ["Blue", "#3867d6"], + ["Purple", "#8854d0"], + ["Charcoal", "#4b6584"] +]; + +// src/components/ui/menus/fileMenu.tsx +var triggerSectionMenu = (plugin, spaceName, spaces2, e4) => { + const fileMenu = new import_obsidian10.Menu(); + const space = spaces2.find((f4) => f4.name == spaceName); + fileMenu.addItem((menuItem) => { + var _a2; + const pinned = ((_a2 = spaces2.find((f4) => f4.name == spaceName)) == null ? void 0 : _a2.pinned) == "true"; + if (pinned) { + menuItem.setTitle("Unpin Space"); + } else { + menuItem.setTitle("Pin Space"); + } + menuItem.setIcon("pin"); + menuItem.onClick((ev) => { + toggleSpacePin(plugin, spaceName, !pinned); + }); + }); + if (plugin.settings.spacesStickers) { + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.buttons.changeIcon); + menuItem.setIcon("lucide-sticker"); + menuItem.onClick((ev) => { + let vaultChangeModal = new StickerModal( + plugin.app, + (emoji) => saveSpaceIcon(plugin, spaceName, emoji) + ); + vaultChangeModal.open(); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.buttons.removeIcon); + menuItem.setIcon("lucide-file-minus"); + menuItem.onClick((ev) => { + removeSpaceIcon(plugin, spaceName); + }); + }); + } + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Collapse All"); + menuItem.setIcon("lucide-chevrons-down-up"); + menuItem.onClick((ev) => { + plugin.settings.expandedFolders = { + ...plugin.settings.expandedFolders, + [spaceName]: [] + }; + plugin.saveSettings(); + }); + }); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + const sortOption = ["rank", true]; + menuItem.setTitle("Custom Sort"); + menuItem.setChecked( + space.sort == JSON.stringify(sortOption) || space.sort == "" + ); + menuItem.onClick((ev) => { + updateSpaceSort(plugin, spaceName, sortOption); + }); + }); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + const sortOption = ["path", true]; + menuItem.setTitle("File Name (A to Z)"); + menuItem.setChecked(space.sort == JSON.stringify(sortOption)); + menuItem.onClick((ev) => { + updateSpaceSort(plugin, spaceName, sortOption); + }); + }); + fileMenu.addItem((menuItem) => { + const sortOption = ["path", false]; + menuItem.setTitle("File Name (Z to A)"); + menuItem.setChecked(space.sort == JSON.stringify(sortOption)); + menuItem.onClick((ev) => { + updateSpaceSort(plugin, spaceName, sortOption); + }); + }); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + const sortOption = ["created", false]; + menuItem.setTitle("Created Time (new to old)"); + menuItem.setChecked(space.sort == JSON.stringify(sortOption)); + menuItem.onClick((ev) => { + updateSpaceSort(plugin, spaceName, sortOption); + }); + }); + fileMenu.addItem((menuItem) => { + const sortOption = ["created", true]; + menuItem.setTitle("Created Time (old to new)"); + menuItem.setChecked(space.sort == JSON.stringify(sortOption)); + menuItem.onClick((ev) => { + updateSpaceSort(plugin, spaceName, sortOption); + }); + }); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.menu.edit); + menuItem.setIcon("pencil"); + menuItem.onClick((ev) => { + let vaultChangeModal = new SectionChangeModal( + plugin, + space.name, + "rename" + ); + vaultChangeModal.open(); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Delete Space"); + menuItem.setIcon("trash"); + menuItem.onClick((ev) => { + removeSpace(plugin, space.name); + }); + }); + if (isMouseEvent(e4)) { + fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + } else { + fileMenu.showAtPosition({ + x: e4.nativeEvent.locationX, + y: e4.nativeEvent.locationY + }); + } + return false; +}; +var triggerMultiFileMenu = (plugin, selectedFiles2, e4) => { + const files = selectedFiles2.map((s5) => s5.item.path); + const spaces2 = retrieveSpaces(plugin); + const spaceItems = retrieveSpaceItems(plugin, spaces2); + const fileMenu = new import_obsidian10.Menu(); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.menu.spaceTitle); + menuItem.setDisabled(true); + }); + spaces2.map((f4) => { + fileMenu.addItem((menuItem) => { + const allIn = files.reduce( + (p3, c4) => { + var _a2; + return p3 ? (_a2 = spaceItems[f4.name]) == null ? void 0 : _a2.some((g4) => g4.path == c4) : p3; + }, + true + ); + if (allIn) { + menuItem.setIcon("checkmark"); + menuItem.setTitle(f4.name); + } else { + menuItem.setTitle(f4.name); + menuItem.setIcon("plus"); + } + menuItem.onClick((ev) => { + if (allIn) { + removePathsFromSpace(plugin, f4.name, files); + } else { + addPathsToSpace(plugin, f4.name, files); + } + }); + }); + }); + if (plugin.settings.spacesStickers) { + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setIcon("palette"); + disclosureMenuItem( + menuItem, + false, + false, + "Change Color", + "", + [ + { name: "None", value: "" }, + ...colors.map((f4) => ({ name: f4[0], value: f4[1] })) + ], + (_4, values) => { + saveFileColors(plugin, files, values[0]); + } + ); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.buttons.changeIcon); + menuItem.setIcon("lucide-sticker"); + menuItem.onClick((ev) => { + let vaultChangeModal = new StickerModal( + plugin.app, + (emoji) => saveFileIcons(plugin, files, emoji) + ); + vaultChangeModal.open(); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.buttons.removeIcon); + menuItem.setIcon("lucide-file-minus"); + menuItem.onClick((ev) => { + removeFileIcons(plugin, files); + }); + }); + } + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Delete Files"); + menuItem.setIcon("trash"); + menuItem.onClick((ev) => { + deleteFiles(plugin, files); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setIcon("go-to-file"); + menuItem.setTitle(i18n_default.menu.openFilePane); + menuItem.onClick((ev) => { + files.forEach( + (file) => openAFile(getAbstractFileAtPath(app, file), plugin, true) + ); + }); + }); + if (!internalPluginLoaded("file-explorer", plugin.app)) { + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.menu.moveFile); + menuItem.setIcon("paper-plane"); + menuItem.onClick((ev) => { + let fileMoveSuggester = new MoveSuggestionModal(plugin.app, files); + fileMoveSuggester.open(); + }); + }); + } + if (isMouseEvent(e4)) { + fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + } else { + fileMenu.showAtPosition({ + x: e4.nativeEvent.locationX, + y: e4.nativeEvent.locationY + }); + } + return false; +}; +var triggerFileMenu = (plugin, file, isFolder, e4) => { + const spaces2 = retrieveSpaces(plugin); + const spaceItems = retrieveSpaceItems(plugin, spaces2); + const fileMenu = new import_obsidian10.Menu(); + if (isFolder) { + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setIcon("edit"); + menuItem.setTitle(i18n_default.buttons.createNote); + menuItem.onClick((ev) => { + newFileInFolder(plugin, file); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setIcon("folder-plus"); + menuItem.setTitle(i18n_default.buttons.createFolder); + menuItem.onClick((ev) => { + let vaultChangeModal = new VaultChangeModal( + plugin, + file, + "create folder", + "/" + ); + vaultChangeModal.open(); + }); + }); + } + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.menu.spaceTitle); + menuItem.setDisabled(true); + }); + spaces2.map((f4, i4) => { + var _a2; + const itemExists = (_a2 = spaceItems[f4.name]) == null ? void 0 : _a2.some((g4) => g4.path == file.path); + fileMenu.addItem((menuItem) => { + var _a3; + menuItem.setTitle(f4.name); + if (((_a3 = f4.def) == null ? void 0 : _a3.length) > 0) { + menuItem.setDisabled(true); + menuItem.setIcon("folder"); + } else { + if (itemExists) { + menuItem.setIcon("checkmark"); + } else { + menuItem.setIcon("plus"); + } + menuItem.onClick((ev) => { + if (!itemExists) { + insertSpaceItemAtIndex(plugin, f4.name, file.path, 0); + } else { + removePathsFromSpace(plugin, f4.name, [file.path]); + } + }); + } + }); + }); + if (isFolder) { + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Make Folder Space"); + menuItem.setIcon("plus-square"); + menuItem.onClick((ev) => { + insertSpaceAtIndex(plugin, file.name, false, 0, file.path); + }); + }); + } + if (plugin.settings.spacesStickers) { + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setIcon("palette"); + disclosureMenuItem( + menuItem, + false, + false, + "Change Color", + "", + [ + { name: "None", value: "" }, + ...colors.map((f4) => ({ name: f4[0], value: f4[1] })) + ], + (_4, values) => { + saveFileColor(plugin, file.path, values[0]); + } + ); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.buttons.changeIcon); + menuItem.setIcon("lucide-sticker"); + menuItem.onClick((ev) => { + let vaultChangeModal = new StickerModal( + plugin.app, + (emoji) => saveFileIcon(plugin, file, emoji) + ); + vaultChangeModal.open(); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.buttons.removeIcon); + menuItem.setIcon("lucide-file-minus"); + menuItem.onClick((ev) => { + removeFileIcon(plugin, file); + }); + }); + } + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.menu.rename); + menuItem.setIcon("pencil"); + menuItem.onClick((ev) => { + let vaultChangeModal = new VaultChangeModal(plugin, file, "rename"); + vaultChangeModal.open(); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Delete"); + menuItem.setIcon("trash"); + menuItem.onClick((ev) => { + let deleteOption = plugin.settings.deleteFileOption; + if (deleteOption === "permanent") { + plugin.app.vault.delete(file, true); + } else if (deleteOption === "system-trash") { + plugin.app.vault.trash(file, true); + } else if (deleteOption === "trash") { + plugin.app.vault.trash(file, false); + } + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setIcon("go-to-file"); + menuItem.setTitle(i18n_default.menu.openFilePane); + menuItem.onClick((ev) => { + openFileInNewPane(plugin, { ...file, isFolder }); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.menu.duplicate); + menuItem.setIcon("documents"); + menuItem.onClick((ev) => { + if (file.basename && file.extension) + plugin.app.vault.copy( + file, + `${file.parent.path}/${file.basename} 1.${file.extension}` + ); + }); + }); + if (!internalPluginLoaded("file-explorer", plugin.app)) { + fileMenu.addItem((menuItem) => { + menuItem.setTitle(i18n_default.menu.moveFile); + menuItem.setIcon("paper-plane"); + menuItem.onClick((ev) => { + let fileMoveSuggester = new MoveSuggestionModal(plugin.app, [ + file.path + ]); + fileMoveSuggester.open(); + }); + }); + } + plugin.app.workspace.trigger("file-menu", fileMenu, file, "file-explorer"); + if (isMouseEvent(e4)) { + fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + } else { + fileMenu.showAtPosition({ + x: e4.nativeEvent.locationX, + y: e4.nativeEvent.locationY + }); + } + return false; +}; + +// src/components/ContextView/DataTypeView/FileCell.tsx +var import_obsidian11 = require("obsidian"); +var FileCell = (props2) => { + var _a2; + const fileOrCleanPath = (f4) => { + if (!f4) + return { + path: "" + }; + const isInFolder = !props2.isFolder || f4.includes(props2.folder); + const fileExists2 = getAbstractFileAtPath(app, f4); + const cleanPath = (path) => path.replace(props2.folder + "/", "").replace(".md", ""); + return isInFolder ? fileExists2 ? { path: f4, file: fileExists2 } : { path: cleanPath(f4) } : { path: f4 }; + }; + const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).map((f4) => fileOrCleanPath(f4)); + const [value, setValue] = p2(initialValue); + const ref = _2(null); + const onKeyDown = (e4) => { + e4.stopPropagation(); + e4.key == "Enter" && e4.target.blur(); + }; + const fileExists = (name) => { + if (!name) + return false; + return getAbstractFileAtPath(app, `${props2.folder}/${name}.md`) ? true : false; + }; + const onBlur = () => { + var _a3; + if (!ref.current) + return; + if (fileExists((_a3 = ref.current) == null ? void 0 : _a3.value)) { + new import_obsidian11.Notice("File Already Exists"); + } else { + props2.saveValue(ref.current.value); + props2.setEditMode(null); + } + }; + const newFile = async (file) => { + const filePath = file.path.replace(/\//g, "").replace(/\./g, ""); + const path = `${props2.folder}/${filePath}.md`; + if (filePath.length == 0) { + return; + } + if (fileExists(path)) { + new import_obsidian11.Notice("File Already Exists"); + } else { + await createNewMarkdownFile( + props2.plugin, + getAbstractFileAtPath(app, props2.folder), + filePath + ); + } + }; + const deleteRow = () => { + props2.deleteRow(); + }; + h2(() => { + var _a3; + if (props2.editMode == 2) { + (_a3 = ref == null ? void 0 : ref.current) == null ? void 0 : _a3.focus(); + } + }, [props2.editMode]); + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-file" + }, value.map((v3, i4) => { + var _a3; + if (props2.editMode == 0) { + if (v3.file) { + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-file-title" + }, v3 ? v3.file instanceof import_obsidian11.TFile ? fileNameToString(v3.file.name) : v3.file.name : "", (v3 == null ? void 0 : v3.file) instanceof import_obsidian11.TFile && v3.file.extension != "md" && /* @__PURE__ */ bn.createElement("span", { + className: "nav-file-tag" + }, (_a3 = v3.file) == null ? void 0 : _a3.extension), /* @__PURE__ */ bn.createElement("button", { + "aria-label": "Toggle Flow", + className: "mk-cell-file-flow mk-inline-button", + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-flow-hover"] + }, + onClick: () => props2.openFlow && props2.openFlow() + })); + } else { + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-file-title" + }, v3.path); + } + } + if (v3.file) { + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-file-item", + onContextMenu: (e4) => triggerFileMenu( + props2.plugin, + v3.file, + v3.file instanceof import_obsidian11.TFolder, + e4 + ) + }, /* @__PURE__ */ bn.createElement(FileSticker, { + plugin: props2.plugin, + filePath: v3.file.path + }), /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-file-name", + onClick: (e4) => openFile( + { ...v3.file, isFolder: v3.file instanceof import_obsidian11.TFolder }, + props2.plugin, + e4.ctrlKey || e4.metaKey + ) + }, v3 ? v3.file instanceof import_obsidian11.TFile ? fileNameToString(v3.file.name) : v3.file.name : ""))); + } + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-file-item" + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-file-icon" + }, /* @__PURE__ */ bn.createElement("button", { + onClick: (e4) => newFile(v3), + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-new-file"] + } + })), props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { + className: "mk-cell-file-name", + type: "text", + placeholder: "Untitled", + ref, + value: v3.path, + onKeyDown, + onBlur + }) : /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-file-name" + }, v3.path))); + })); +}; + +// src/components/ContextView/DataTypeView/FilePropertyCell.tsx +var FilePropertyCell = (props2) => { + const { property } = props2; + const file = getAbstractFileAtPath(app, props2.file); + const [cache, setCache] = p2(null); + const initialValue = file ? appendFileMetaData(property, file) : ""; + if (property == "folder") { + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-fileprop", + onClick: () => { + openTFolder( + getAbstractFileAtPath(app, initialValue), + props2.plugin, + false + ); + } + }, folderPathToString(initialValue)); + } + if (property == "extension") { + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-fileprop" + }, initialValue); + } else if (property == "ctime" || property == "mtime") { + const date = new Date(parseInt(initialValue)).getTime() ? new Date(parseInt(initialValue)) : null; + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-fileprop" + }, date && formatDistance3(new Date(date), new Date(), { addSuffix: true })); + } else if (property == "size") { + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-fileprop" + }, initialValue); + } + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-fileprop" + }); +}; + +// src/components/ContextView/DataTypeView/NumberCell.tsx +var NumberCell = (props2) => { + const { initialValue, saveValue } = props2; + const [value, setValue] = bn.useState(initialValue); + const ref = _2(null); + const onBlur = () => { + if (initialValue != value) + saveValue(value); + }; + const onKeyDown = (e4) => { + e4.stopPropagation(); + if (e4.key == "Enter") { + e4.target.blur(); + props2.setEditMode(null); + } + if (e4.key == "Escape") { + setValue(initialValue); + e4.target.blur(); + props2.setEditMode(null); + } + }; + bn.useEffect(() => { + setValue(initialValue); + }, [initialValue]); + h2(() => { + var _a2; + if (props2.editMode == 2) { + (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.focus(); + } + }, [props2.editMode]); + return props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { + className: "mk-cell-text", + type: "number", + step: "any", + ref, + value, + onChange: (e4) => setValue(e4.target.value), + onKeyDown, + onBlur + }) : /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-number" + }, value); +}; + +// src/components/ContextView/DataTypeView/TextCell.tsx +var TextCell = (props2) => { + const { initialValue, saveValue } = props2; + const [value, setValue] = bn.useState(initialValue); + const ref = _2(null); + const onBlur = () => { + if (initialValue != value) + saveValue(value); + }; + const onKeyDown = (e4) => { + e4.stopPropagation(); + if (e4.key == "Enter") { + e4.target.blur(); + props2.setEditMode(null); + } + if (e4.key == "Escape") { + setValue(initialValue); + e4.target.blur(); + props2.setEditMode(null); + } + }; + bn.useEffect(() => { + setValue(initialValue); + }, [initialValue]); + h2(() => { + var _a2; + if (props2.editMode == 2) { + (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.focus(); + } + }, [props2.editMode]); + return props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { + onClick: (e4) => e4.stopPropagation(), + className: "mk-cell-text", + ref, + type: "text", + value, + onChange: (e4) => setValue(e4.target.value), + onKeyDown, + onBlur + }) : /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-text" + }, value); +}; + +// src/hooks/useCombinedRef.tsx +function useCombinedRefs2(...refs) { + return F( + () => (node) => { + refs.forEach((ref) => ref(node)); }, - { - n: [ - "play or pause button", - "black right pointing triangle with double vertical bar" - ], - u: "23ef-fe0f" + refs + ); +} + +// src/components/ContextView/TableView/ColumnHeader.tsx +var import_obsidian12 = require("obsidian"); +var filePropTypes = [ + { + name: "Created", + value: "ctime" + }, + { + name: "Last Edited", + value: "mtime" + }, + { + name: "Extension", + value: "extension" + }, + { + name: "Size", + value: "size" + }, + { + name: "Note Preview", + value: "preview" + }, + { + name: "Folder", + value: "folder" + } +]; +var ColumnHeader = (props2) => { + const [field, setField] = p2(props2.column); + const [saveHook, setSaveHook] = p2(false); + const menuRef = _2(null); + const { loadContextFields, tableData, contextTable, cols, newColumn } = q2(MDBContext); + h2(() => { + setField(props2.column); + }, [props2.column]); + const { + attributes, + listeners, + setNodeRef: setDraggableNodeRef, + transform + } = useDraggable({ + id: field.name + field.table, + data: { name: field.name } + }); + const { setNodeRef: setDroppableNodeRef } = useDroppable({ + id: field.name + field.table, + data: { name: field.name } + }); + h2(() => { + if (saveHook) { + if (field.name.length > 0) { + if (field.name != props2.column.name || field.type != props2.column.type || field.value != props2.column.value || field.attrs != props2.column.attrs) { + const saveResult = props2.saveColumn(field, props2.column); + if (saveResult) { + if (props2.isNew) { + setField(props2.column); + menuRef.current.hide(); + } + } + } + } + setSaveHook(false); + } + }, [saveHook]); + h2(() => { + if (menuRef.current) + showMenu(props2.editable); + }, [field]); + const saveMenu = (menu) => { + setTimeout(() => { + if (menuRef.current == menu) { + menuRef.current.hide(); + menuRef.current = null; + } + }, 100); + setSaveHook(true); + }; + const saveContext = (options, value) => { + const newContext = tagFromString(value[0]); + initiateContextIfNotExists(props2.plugin, newContext).then((f4) => { + if (f4) { + return insertContextItems( + props2.plugin, + optionValuesForColumn( + field.name, + field.table == "" ? tableData : contextTable[field.table] + ), + newContext + ); + } + }).then((f4) => loadContextFields(newContext)); + const newField = { + ...field, + value: newContext != null ? newContext : "" + }; + setField(newField); + props2.saveColumn(newField, props2.column); + }; + const saveField = (options, value) => { + var _a2; + const newField = { + ...field, + value: (_a2 = value[0]) != null ? _a2 : "" + }; + setField(newField); + props2.saveColumn(newField, props2.column); + }; + const showNewMenu = (e4) => { + const offset = ref.current.getBoundingClientRect(); + const files = tableData.rows.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4 instanceof import_obsidian12.TFile); + const types = guestimateTypes( + files.map((f4) => f4.path), + false + ); + const fmFields = files.reduce((p3, c4) => { + const fm = frontMatterForFile(c4); + const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); + return uniq([...p3, ...fmKeys]); + }, []).filter((f4) => !cols.some((g4) => g4.name == f4)); + const allTypes = [ + ...fmFields.map((f4) => ({ + name: f4, + description: "Sync Frontmatter Field", + value: "fm." + f4 + "." + yamlTypeToMDBType(types[f4]) + })), + ...fieldTypes.filter((f4) => f4.restricted != true).map((f4) => ({ + name: f4.label, + description: "New Field", + value: "type." + f4.type + "." + f4.label + })) + ]; + const saveOptions = (_4, values) => { + const newValue = values[0]; + const newType = newValue.split("."); + if (newType[0] == "fm") { + newColumn({ + name: uniqueNameFromString( + newType[1], + tableData.cols.map((f4) => f4.name) + ), + schemaId: tableData.schema.id, + table: "", + type: newType[2] + }); + } else if (newType[0] == "type") { + newColumn({ + name: uniqueNameFromString( + newType[2], + tableData.cols.map((f4) => f4.name) + ), + schemaId: tableData.schema.id, + table: "", + type: newType[1] + }); + } + }; + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + saveOptions, + placeholder: "Select Field", + searchable: true, + options: allTypes, + showAll: true + } + ); + }; + const showMenu = (editable) => { + var _a2; + if (menuRef.current) { + menuRef.current.hide(); + } + setSaveHook(false); + const fieldType = (_a2 = fieldTypes.find( + (f4) => f4.type == field.type || f4.multiType == field.type + )) != null ? _a2 : fieldTypes[0]; + const menu = new import_obsidian12.Menu(); + menu.setUseNativeMenu(false); + menuRef.current = menu; + if (editable) { + menu.addItem((menuItem) => { + var _a3; + inputMenuItem( + menuItem, + (_a3 = field == null ? void 0 : field.name) != null ? _a3 : "", + (value) => setField((f4) => ({ ...f4, name: value })) + ); + menuItem.setIcon("type"); + }); + const getNewValueForType = (f4, value) => { + if (value[0].startsWith("option")) { + return optionValuesForColumn( + f4.name, + f4.table == "" ? tableData : contextTable[f4.table] + ).join(","); + } + return value[0] == fieldType.type || value[0] == fieldType.multiType ? f4.value : null; + }; + const selectOption = (options, value) => { + setField((f4) => { + var _a3; + return { + ...f4, + type: (_a3 = value[0]) != null ? _a3 : "", + value: getNewValueForType(f4, value) + }; + }); + }; + menu.addSeparator(); + menu.addItem((menuItem) => { + disclosureMenuItem( + menuItem, + false, + false, + "Type", + fieldType.label, + fieldTypes.filter((f4) => !f4.restricted).map((f4, i4) => ({ + id: i4 + 1, + name: f4.label, + value: f4.type, + icon: "" + })), + selectOption + ); + }); + if (fieldType.type == "context") { + menu.addItem((menuItem) => { + var _a3; + const f4 = loadTags(props2.plugin); + disclosureMenuItem( + menuItem, + false, + true, + "Context", + (_a3 = field.value) != null ? _a3 : "", + f4.map((m5) => ({ name: m5, value: m5 })), + saveContext + ); + }); + } + if (fieldType.type == "fileprop") { + menu.addItem((menuItem) => { + var _a3, _b2; + disclosureMenuItem( + menuItem, + false, + false, + "Property", + (_b2 = (_a3 = filePropTypes.find((f4) => f4.value == field.value)) == null ? void 0 : _a3.name) != null ? _b2 : "", + filePropTypes, + saveField + ); + }); + } + if (fieldType.multi) { + const docFrag = document.createDocumentFragment(); + const titleDiv = docFrag.createDiv("title"); + titleDiv.textContent = "Multiple"; + const div = docFrag.createDiv("toggle"); + const toggle = new import_obsidian12.ToggleComponent(div); + toggle.setValue(field.type == fieldType.multiType); + menu.addItem((menuItem) => { + menuItem.setTitle(docFrag); + menuItem.onClick(() => { + toggle.setValue(field.type != fieldType.multiType); + setField((f4) => ({ + ...f4, + type: field.type == fieldType.multiType ? fieldType.type : fieldType.multiType + })); + }); + }); + } + if (!props2.isNew) { + menu.addSeparator(); + menu.addItem((menuItem) => { + menuItem.setTitle("Hide Field"); + menuItem.onClick(() => { + props2.hide(props2.column.name + props2.column.table); + }); + menuItem.setIcon("eye-off"); + }); + menu.addItem((menuItem) => { + menuItem.setTitle("Delete Field"); + menuItem.onClick(() => { + props2.deleteColumn(props2.column); + }); + menuItem.setIcon("trash-2"); + }); + menu.addSeparator(); + } + } + const sortableString = normalizedSortForType(props2.column.type, false); + if (!props2.isNew && sortableString) { + menu.addItem((menuItem) => { + menuItem.setTitle("Sort Ascending"); + menuItem.setIcon("sort-asc"); + menuItem.onClick(() => { + props2.sort({ + field: props2.column.name + props2.column.table, + type: normalizedSortForType(props2.column.type, false) + }); + }); + }); + menu.addItem((menuItem) => { + menuItem.setTitle("Sort Descending"); + menuItem.setIcon("sort-desc"); + menuItem.onClick(() => { + props2.sort({ + field: props2.column.name + props2.column.table, + type: normalizedSortForType(props2.column.type, true) + }); + }); + }); + } else { + menu.addSeparator(); + menu.addItem((menuItem) => { + menuItem.setTitle("Save Field"); + menuItem.setIcon("checkmark"); + menuItem.onClick(() => { + }); + }); + } + menu.onHide(() => { + saveMenu(menu); + }); + const offset = ref.current.getBoundingClientRect(); + menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); + }; + const toggleMenu = (e4) => { + if (menuRef.current) { + menuRef.current.hide(); + return; + } + if (props2.isNew) { + showNewMenu(e4); + } else { + showMenu(props2.editable); + } + }; + const ref = _2(null); + const setNodeRef = useCombinedRefs2(setDroppableNodeRef, setDraggableNodeRef); + return /* @__PURE__ */ bn.createElement("div", { + ref: setNodeRef, + ...listeners, + ...attributes, + className: "mk-col-header", + onClick: (e4) => { + toggleMenu(e4); + } + }, /* @__PURE__ */ bn.createElement("div", { + ref + }, props2.column.name.length > 0 ? field.name : "+", /* @__PURE__ */ bn.createElement("span", { + className: "mk-col-header-context", + "aria-label": props2.column.table.length > 0 ? props2.column.table : "" + }, props2.column.table.length > 0 ? "#" : ""))); +}; + +// src/components/ContextView/TableView/TableView.tsx +var import_lodash2 = __toESM(require_lodash()); +var import_obsidian13 = require("obsidian"); + +// src/components/ContextView/DataTypeView/ImageCell.tsx +var ImageCell = (props2) => { + const { initialValue, saveValue } = props2; + const [value, setValue] = bn.useState(initialValue); + const ref = _2(null); + h2(() => { + if (props2.editMode == 2 /* EditModeActive */) { + ref.current.focus(); + } + }, []); + const file = F(() => getAbstractFileAtPath(app, value), [value]); + const onBlur = (e4) => { + const newValue = e4.target.value; + if (initialValue != newValue) { + setValue(newValue); + saveValue(newValue); + } + }; + const onKeyDown = (e4) => { + e4.stopPropagation(); + if (e4.key == "Enter" || e4.key == "Escape") { + e4.target.blur(); + props2.setEditMode(null); + } + }; + bn.useEffect(() => { + setValue(initialValue); + }, [initialValue]); + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.editMode >= 2 && /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement("input", { + className: "mk-cell-text", + type: "text", + ref, + value, + onKeyDown, + onBlur + })), props2.editMode > 0 && /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement("img", { + src: file ? app.vault.getResourcePath(file) : value + }))); +}; + +// src/components/ContextView/DataTypeView/LinkCell.tsx +var LinkCell = (props2) => { + var _a2; + const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => f4); + const stringValueToLink = (strings) => strings.map((f4) => { + const match2 = /\[\[(.*?)\]\]/g.exec(f4); + const stringValue = (match2 == null ? void 0 : match2.length) > 1 ? match2[1].substring(0, match2[1].indexOf("|")) : f4; + return { + label: filePathToString(stringValue), + value: stringValue + }; + }); + const resolveLinks = (links) => links.map((f4) => ({ + value: f4.value, + label: filePathToString(f4.value), + file: getFileFromString(f4.value, getFolderPathFromString(props2.file)) + })); + const ref = _2(null); + const [value, setValue] = p2( + resolveLinks(stringValueToLink(initialValue)) + ); + const removeValue = (v3) => { + const newValues = value.filter((f4) => f4.value != v3.value); + setValue(newValues); + props2.saveValue(newValues.map((f4) => f4.value).join(",")); + }; + const saveOptions = (_4, _value) => { + if (props2.multi) { + setValue(resolveLinks(stringValueToLink(_value))); + props2.saveValue(_value.join(",")); + } else { + const newValue = _value[0]; + if (newValue) { + const newValues = uniq([...value.map((f4) => f4.value), newValue]); + setValue(resolveLinks(stringValueToLink(newValues))); + props2.saveValue(newValues.join(",")); + } + } + }; + const menuProps = () => { + const options = getAllAbstractFilesInVault(props2.plugin, app).map((f4) => ({ + name: fileNameToString(f4.name), + value: f4.path + })); + const _options = !props2.multi ? [{ name: "None", value: "" }, ...options] : options; + return { + multi: false, + editable: false, + value: value.map((f4) => f4.value), + options: _options, + saveOptions, + placeholder: "Find Note", + detail: true, + searchable: true, + onHide: () => props2.setEditMode(null) + }; + }; + const openLink = async (o3) => { + if (o3.file) { + openTFile(o3.file, props2.plugin, false); + } else { + const file = await app.fileManager.createNewMarkdownFile( + app.vault.getRoot(), + o3.value + ); + openTFile(file, props2.plugin, false); + setValue(resolveLinks(value)); + } + }; + const editable = props2.editMode != 0; + return /* @__PURE__ */ bn.createElement(OptionCellBase, { + menuProps, + getLabelString: (o3) => o3.label, + valueClass: (o3) => o3.file ? "mk-cell-link-item" : "mk-cell-link-unresolved", + openItem: openLink, + value, + multi: props2.multi, + editMode: props2.editMode, + removeValue + }); +}; + +// src/components/ContextView/DataTypeView/TagCell.tsx +var TagCell = (props2) => { + var _a2; + const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => (f4 == null ? void 0 : f4.length) > 0); + const ref = _2(null); + const [value, setValue] = p2(initialValue); + const removeValue = (v3) => { + const newValues = value.filter((f4) => f4 != v3); + setValue(newValues); + props2.saveValue(newValues.join(",")); + }; + const saveOptions = (_options, _value) => { + if (!props2.multi) { + setValue(_value); + props2.saveValue(_value.join(",")); + } else { + const newValue = _value[0]; + if (newValue) { + const newValues = uniq([...value, newValue]); + setValue(newValues); + props2.saveValue(newValues.join(",")); + } + } + }; + const menuProps = () => { + const options = loadTags(props2.plugin).map((f4) => ({ + name: f4, + value: stringFromTag(f4) + })); + const _options = !props2.multi ? [{ name: "None", value: "" }, ...options] : options; + return { + multi: false, + editable: true, + value, + options: _options, + saveOptions, + placeholder: "Find Tag", + searchable: true, + showAll: true, + onHide: () => props2.setEditMode(null) + }; + }; + return /* @__PURE__ */ bn.createElement(OptionCellBase, { + menuProps, + value, + multi: props2.multi, + editMode: props2.editMode, + removeValue + }); +}; + +// src/components/ContextView/TableView/TableView.tsx +var TableView = (props2) => { + const { + selectedRows, + selectRows, + tableData, + sortedColumns: cols, + filteredData: data, + tagContexts, + folderPath, + saveSchema, + searchString, + dbSchema, + contextTable, + setContextTable, + predicate, + savePredicate, + saveDB: saveDB2, + saveContextDB, + schema, + dbPath, + saveColumn, + delColumn, + newColumn, + isFolderContext + } = q2(MDBContext); + const [activeId, setActiveId] = p2(null); + const [lastSelectedIndex, setLastSelectedIndex] = p2(null); + const [selectedColumn, setSelectedColumn] = p2(null); + const [currentEdit, setCurrentEdit] = p2(null); + const [overId, setOverId] = p2(null); + const [openFlows, setOpenFlows] = p2([]); + const [selectNewOnRefresh, setSelectNewOnRefresh] = p2(false); + const [colsSize, setColsSize] = p2({}); + const ref = _2(null); + h2(() => { + setColsSize({ ...predicate.colsSize, "+": 30 }); + }, [predicate]); + h2(() => { + setCurrentEdit(null); + }, [selectedColumn, lastSelectedIndex]); + h2(() => { + if (currentEdit == null) { + ref.current.focus(); + } + }, [currentEdit]); + const saveColsSize = (colSize) => { + const newColSize = colSize(colsSize); + setColsSize(newColSize); + debouncedSavePredicate(newColSize); + }; + const debouncedSavePredicate = T2( + (0, import_lodash2.debounce)( + (nextValue) => savePredicate({ + ...predicate, + colsSize: nextValue + }), + 1e3 + ), + [predicate] + ); + const newRow = (index, data2) => { + saveDB2(createNewRow(tableData, { File: "", ...data2 != null ? data2 : {} }, index)); + }; + const deleteRow = (rowIndex) => { + const row = tableData.rows.find((f4, i4) => i4 == rowIndex); + if (row._source == "folder") { + deleteFile(props2.plugin, getAbstractFileAtPath(app, row.File)); + } + if (row) { + saveDB2({ + ...tableData, + rows: tableData.rows.filter((f4, i4) => i4 != rowIndex) + }); + } + }; + const toggleFlow = (path) => { + setOpenFlows( + (f4) => f4.find((p3) => p3 == path) ? f4.filter((p3) => p3 != path) : uniq([...f4, path]) + ); + }; + const selectItem = (modifier, index) => { + if (modifier == 3) { + const file = getAbstractFileAtPath( + app, + tableData.rows[parseInt(index)].File + ); + if (file) + openAFile(file, props2.plugin, false); + return; + } + if (modifier == 2) { + selectedRows.some((f4) => f4 == index) ? selectRows( + null, + selectedRows.filter((f4) => f4 != index) + ) : selectRows(index, uniq([...selectedRows, index])); + } else if (modifier == 1) { + selectRows( + index, + uniq([ + ...selectedRows, + ...selectRange( + lastSelectedIndex, + index, + data.map((f4) => f4._index) + ) + ]) + ); + } else { + selectRows(index, [index]); + } + setLastSelectedIndex(index); + }; + const onKeyDown = (e4) => { + const setCellValue = (value) => { + var _a2; + const columnTuple = selectedColumn.split("#"); + updateData(parseInt(lastSelectedIndex), columnTuple[0], (_a2 = columnTuple[1]) != null ? _a2 : "", value, ""); + }; + const clearCell = () => { + setCellValue(""); + }; + const copyCell = () => { + navigator.clipboard.writeText(tableData.rows[parseInt(lastSelectedIndex)][selectedColumn]); + }; + const nextRow = () => { + const newIndex = selectNextIndex( + lastSelectedIndex, + data.map((f4) => f4._index) + ); + selectRows(newIndex, [newIndex]); + setLastSelectedIndex(newIndex); + }; + const lastRow = () => { + const newIndex = selectPrevIndex( + lastSelectedIndex, + data.map((f4) => f4._index) + ); + selectRows(newIndex, [newIndex]); + setLastSelectedIndex(newIndex); + }; + if (e4.key == "c" && e4.metaKey) { + copyCell(); + } + if (e4.key == "x" && e4.metaKey) { + copyCell(); + clearCell(); + } + if (e4.key == "v" && e4.metaKey) { + navigator.clipboard.readText().then((f4) => setCellValue(f4)); + } + if (e4.key == "Escape") { + selectRows(null, []); + setLastSelectedIndex(null); + } + if (e4.key == "Backspace" || e4.key == "Delete") { + clearCell(); + } + if (e4.key == "Enter") { + if (selectedColumn && lastSelectedIndex) { + if (e4.shiftKey) { + newRow(parseInt(lastSelectedIndex) + 1); + nextRow(); + } else { + setCurrentEdit([selectedColumn, lastSelectedIndex]); + } + } + return; + } + if (e4.key == "ArrowDown") { + nextRow(); + e4.preventDefault(); + } + if (e4.key == "ArrowUp") { + lastRow(); + e4.preventDefault(); + } + if (e4.key == "ArrowLeft") { + const newIndex = selectPrevIndex( + selectedColumn, + columns.map((f4) => f4.accessorKey).filter((f4) => f4 != "+") + ); + setSelectedColumn(newIndex); + } + if (e4.key == "ArrowRight") { + const newIndex = selectNextIndex( + selectedColumn, + columns.map((f4) => f4.accessorKey).filter((f4) => f4 != "+") + ); + setSelectedColumn(newIndex); + } + }; + h2(() => { + if (selectNewOnRefresh) { + const lastIndex = data.length - 1; + selectItem(0, data[lastIndex]._index); + setSelectedColumn("File"); + setCurrentEdit(["File", data[lastIndex]._index]); + setSelectNewOnRefresh(false); + } + }, [data]); + const columns = F( + () => { + var _a2; + return [ + ...(_a2 = cols == null ? void 0 : cols.filter((f4) => f4.type != "preview").map((f4) => { + return { + header: f4.name, + accessorKey: f4.name + f4.table, + meta: { + table: f4.table, + editable: f4.primary != "true", + schemaId: dbSchema == null ? void 0 : dbSchema.id + }, + cell: ({ + getValue, + row: { index }, + column: { id: id2 }, + cell, + table: table2 + }) => { + const initialValue = getValue(); + const rowIndex = f4.table == "" ? index : parseInt(data[index]["_index" + f4.table]); + const saveValue = (value) => { + var _a3; + if (initialValue != value) + (_a3 = table2.options.meta) == null ? void 0 : _a3.updateData( + rowIndex, + f4.name, + f4.table, + value + ); + }; + const saveFieldValue = (fieldValue, value) => { + var _a3; + (_a3 = table2.options.meta) == null ? void 0 : _a3.updateFieldValue( + rowIndex, + f4.name, + f4.table, + fieldValue, + value + ); + }; + const editMode = !cell.getIsGrouped() ? platformIsMobile() ? 3 /* EditModeAlways */ : currentEdit && currentEdit[0] == f4.name + f4.table && currentEdit[1] == index ? 2 /* EditModeActive */ : 1 /* EditModeView */ : -1 /* EditModeReadOnly */; + const cellProps = { + initialValue, + saveValue, + plugin: props2.plugin, + setEditMode: setCurrentEdit, + editMode + }; + const fieldType = fieldTypes.find((t4) => f4.type == t4.type) || fieldTypes.find((t4) => f4.type == t4.multiType); + if (!fieldType) { + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, initialValue); + } + if (fieldType.type == "file") { + return /* @__PURE__ */ bn.createElement(FileCell, { + ...cellProps, + multi: fieldType.multiType == f4.type, + folder: folderPath, + isFolder: isFolderContext, + openFlow: () => toggleFlow(initialValue), + deleteRow: () => deleteRow(index) + }); + } else if (fieldType.type == "boolean") { + return /* @__PURE__ */ bn.createElement(BooleanCell, { + ...cellProps, + column: f4 + }); + } else if (fieldType.type == "option") { + return /* @__PURE__ */ bn.createElement(OptionCell, { + ...cellProps, + options: f4.value, + multi: fieldType.multiType == f4.type, + saveOptions: saveFieldValue + }); + } else if (fieldType.type == "date") { + return /* @__PURE__ */ bn.createElement(DateCell, { + ...cellProps + }); + } else if (fieldType.type == "context") { + return /* @__PURE__ */ bn.createElement(ContextCell, { + ...cellProps, + multi: fieldType.multiType == f4.type, + contextTable: contextTable[f4.value], + contextTag: f4.value + }); + } else if (fieldType.type == "fileprop") { + return /* @__PURE__ */ bn.createElement(FilePropertyCell, { + ...cellProps, + property: f4.value, + file: data[index]["File"] + }); + } else if (fieldType.type == "tag") { + return /* @__PURE__ */ bn.createElement(TagCell, { + ...cellProps, + multi: fieldType.multiType == f4.type + }); + } else if (fieldType.type == "number") { + return /* @__PURE__ */ bn.createElement(NumberCell, { + ...cellProps + }); + } else if (fieldType.type == "link") { + return /* @__PURE__ */ bn.createElement(LinkCell, { + ...cellProps, + multi: fieldType.multiType == f4.type, + file: data[index]["File"] + }); + } else if (fieldType.type == "image") { + return /* @__PURE__ */ bn.createElement(ImageCell, { + ...cellProps + }); + } else { + return /* @__PURE__ */ bn.createElement(TextCell, { + ...cellProps + }); + } + } + }; + })) != null ? _a2 : [], + { + header: "+", + meta: { schemaId: dbSchema == null ? void 0 : dbSchema.id }, + accessorKey: "+", + size: 20, + cell: () => /* @__PURE__ */ bn.createElement(bn.Fragment, null) + } + ]; }, - { n: ["arrow backward", "black left-pointing triangle"], u: "25c0-fe0f" }, - { n: ["rewind", "black left-pointing double triangle"], u: "23ea" }, - { - n: [ - "last track button", - "black left pointing double triangle with vertical bar" - ], - u: "23ee-fe0f" + [cols, currentEdit, predicate, contextTable, toggleFlow, openFlows] + ); + const updateData = (index, column, table2, value, file) => { + var _a2; + const col = cols.find((f4) => f4.table == table2 && f4.name == column); + saveFrontmatterValue( + (_a2 = tableData.rows[index]) == null ? void 0 : _a2.File, + column, + value, + col.type + ); + if (table2 == "") { + saveDB2({ + ...tableData, + rows: tableData.rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column]: value + } : r3 + ) + }); + } else if (contextTable[table2]) { + saveContextDB( + { + ...contextTable[table2], + rows: contextTable[table2].rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column]: value + } : r3 + ) + }, + table2 + ); + } + }; + const groupBy2 = F( + () => { + var _a2; + return ((_a2 = predicate.groupBy) == null ? void 0 : _a2.length) > 0 && cols.find((f4) => f4.name + f4.table == predicate.groupBy[0]) ? predicate.groupBy : []; }, - { n: ["arrow up small", "up-pointing small red triangle"], u: "1f53c" }, - { n: ["arrow double up", "black up-pointing double triangle"], u: "23eb" }, - { n: ["arrow down small", "down-pointing small red triangle"], u: "1f53d" }, - { - n: ["arrow double down", "black down-pointing double triangle"], - u: "23ec" + [predicate, cols] + ); + const table = useReactTable({ + data, + columns, + columnResizeMode: "onChange", + state: { + columnVisibility: predicate.colsHidden.reduce( + (p3, c4) => ({ ...p3, [c4]: false }), + {} + ), + columnOrder: predicate.colsOrder, + columnSizing: { + ...columns.reduce((p3, c4) => ({ ...p3, [c4.accessorKey]: 150 }), {}), + ...colsSize + }, + grouping: groupBy2, + expanded: true }, - { n: ["pause button", "double vertical bar"], u: "23f8-fe0f" }, - { n: ["stop button", "black square for stop"], u: "23f9-fe0f" }, - { n: ["record button", "black circle for record"], u: "23fa-fe0f" }, - { n: ["eject", "eject button"], u: "23cf-fe0f" }, - { n: ["cinema"], u: "1f3a6" }, - { n: ["low brightness", "low brightness symbol"], u: "1f505" }, - { n: ["high brightness", "high brightness symbol"], u: "1f506" }, - { n: ["signal strength", "antenna with bars"], u: "1f4f6" }, - { n: ["vibration mode"], u: "1f4f3" }, - { n: ["mobile phone off"], u: "1f4f4" }, - { n: ["female sign"], u: "2640-fe0f" }, - { n: ["male sign"], u: "2642-fe0f" }, - { n: ["transgender symbol"], u: "26a7-fe0f" }, - { n: ["heavy multiplication x"], u: "2716-fe0f" }, - { n: ["heavy plus sign"], u: "2795" }, - { n: ["heavy minus sign"], u: "2796" }, - { n: ["heavy division sign"], u: "2797" }, - { n: ["heavy equals sign"], u: "1f7f0" }, - { n: ["infinity"], u: "267e-fe0f" }, - { n: ["bangbang", "double exclamation mark"], u: "203c-fe0f" }, - { n: ["interrobang", "exclamation question mark"], u: "2049-fe0f" }, - { n: ["question", "black question mark ornament"], u: "2753" }, - { n: ["grey question", "white question mark ornament"], u: "2754" }, - { n: ["grey exclamation", "white exclamation mark ornament"], u: "2755" }, - { - n: [ - "exclamation", - "heavy exclamation mark", - "heavy exclamation mark symbol" - ], - u: "2757" + onColumnSizingChange: saveColsSize, + getCoreRowModel: getCoreRowModel(), + getExpandedRowModel: getExpandedRowModel(), + getGroupedRowModel: getGroupedRowModel(), + meta: { + updateData, + updateFieldValue: (index, column, table2, fieldValue, value) => { + var _a2; + const col = cols.find((f4) => f4.table == table2 && f4.name == column); + saveFrontmatterValue( + (_a2 = tableData.rows[index]) == null ? void 0 : _a2.File, + column, + value, + col.type + ); + if (table2 == "") { + const newTable = { + ...tableData, + cols: tableData.cols.map( + (m5) => m5.name == column ? { + ...m5, + value: fieldValue + } : m5 + ), + rows: tableData.rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column]: value + } : r3 + ) + }; + saveDB2(newTable); + } else if (contextTable[table2]) { + saveContextDB( + { + ...contextTable[table2], + cols: contextTable[table2].cols.map( + (m5) => m5.name == column ? { + ...m5, + value: fieldValue + } : m5 + ), + rows: contextTable[table2].rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column]: value + } : r3 + ) + }, + table2 + ); + } + } + } + }); + const sensors = useSensors( + useSensor(MouseSensor, { + activationConstraint: { + distance: 10 + } + }), + useSensor(TouchSensor, { + activationConstraint: { + delay: 250, + tolerance: 5 + } + }) + ); + const measuring = { + droppable: { + strategy: MeasuringStrategy.Always + } + }; + function handleDragStart(event) { + const { + active: { id: activeId2 } + } = event; + setActiveId(activeId2); + setOverId(overId); + document.body.style.setProperty("cursor", "grabbing"); + } + function handleDragOver({ over }) { + var _a2; + const overId2 = over == null ? void 0 : over.id; + if (overId2) { + setOverId((_a2 = over == null ? void 0 : over.id) != null ? _a2 : null); + } + } + const saveFilter = (filter) => { + savePredicate({ + ...predicate, + filters: [ + ...predicate.filters.filter((s5) => s5.field != filter.field), + filter + ] + }); + }; + const saveSort = (sort) => { + savePredicate({ + ...predicate, + sort: [sort] + }); + }; + const hideCol = (col) => { + savePredicate({ + ...predicate, + colsHidden: [...predicate.colsHidden.filter((s5) => s5 != col), col] + }); + }; + const selectCell = (e4, index, column) => { + if (platformIsMobile() || column == "+") + return; + selectItem(0, data[index]["_index"]); + setSelectedColumn(column); + if (e4.detail === 1) { + } else if (e4.detail === 2) { + setCurrentEdit([column, data[index]["_index"]]); + } + }; + const showContextMenu = (e4, index) => { + e4.preventDefault(); + const menu = new import_obsidian13.Menu(); + menu.addItem((item) => { + item.setIcon("trash"); + item.setTitle("Delete Item"); + item.onClick(() => { + deleteRow(index); + }); + }); + if (isMouseEvent(e4)) { + menu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + } else { + menu.showAtPosition({ + x: e4.nativeEvent.locationX, + y: e4.nativeEvent.locationY + }); + } + }; + function handleDragEnd({ active, over }) { + resetState(); + savePredicate({ + ...predicate, + colsOrder: arrayMove( + predicate.colsOrder, + predicate.colsOrder.findIndex((f4) => f4 == activeId), + predicate.colsOrder.findIndex((f4) => f4 == overId) + ) + }); + } + function handleDragCancel() { + resetState(); + } + function resetState() { + setOverId(null); + setActiveId(null); + document.body.style.setProperty("cursor", ""); + } + return /* @__PURE__ */ bn.createElement(DndContext, { + sensors, + collisionDetection: closestCenter, + measuring, + onDragStart: handleDragStart, + onDragOver: handleDragOver, + onDragEnd: handleDragEnd, + onDragCancel: handleDragCancel + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-table", + ref, + tabIndex: 1, + onKeyDown + }, /* @__PURE__ */ bn.createElement("table", { + ...{} + }, /* @__PURE__ */ bn.createElement("thead", null, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ bn.createElement("tr", { + key: headerGroup.id + }, /* @__PURE__ */ bn.createElement("th", null), headerGroup.headers.map((header) => { + var _a2; + return /* @__PURE__ */ bn.createElement("th", { + className: "mk-th", + key: header.id, + style: { + minWidth: header.column.getIsGrouped() ? "0px" : (_a2 = colsSize[header.column.columnDef.accessorKey]) != null ? _a2 : "150px" + } + }, header.isPlaceholder ? null : header.column.columnDef.header != "+" ? header.column.getIsGrouped() ? /* @__PURE__ */ bn.createElement(bn.Fragment, null) : /* @__PURE__ */ bn.createElement(ColumnHeader, { + plugin: props2.plugin, + editable: header.column.columnDef.meta.editable, + column: cols.find( + (f4) => f4.name == header.column.columnDef.header && f4.table == header.column.columnDef.meta.table + ), + saveColumn, + deleteColumn: delColumn, + hide: hideCol, + filter: saveFilter, + sort: saveSort + }) : /* @__PURE__ */ bn.createElement(ColumnHeader, { + plugin: props2.plugin, + isNew: true, + editable: true, + column: { + name: "", + schemaId: header.column.columnDef.meta.schemaId, + type: "text", + table: "" + }, + saveColumn: newColumn, + deleteColumn: delColumn + }), /* @__PURE__ */ bn.createElement("div", { + ...{ + onMouseDown: header.getResizeHandler(), + onTouchStart: header.getResizeHandler(), + className: `mk-resizer ${header.column.getIsResizing() ? "isResizing" : ""}` + } + })); + })))), /* @__PURE__ */ bn.createElement("tbody", null, table.getRowModel().rows.map((row) => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("tr", { + className: (selectedRows == null ? void 0 : selectedRows.some( + (f4) => f4 == data[row.index]["_index"] + )) && "mk-is-active", + onContextMenu: (e4) => { + const rowIndex = parseInt( + data[row.index]["_index"] + ); + showContextMenu(e4, rowIndex); }, - { n: ["wavy dash"], u: "3030-fe0f" }, - { n: ["currency exchange"], u: "1f4b1" }, - { n: ["heavy dollar sign"], u: "1f4b2" }, - { n: ["medical symbol", "staff of aesculapius"], u: "2695-fe0f" }, - { n: ["recycle", "black universal recycling symbol"], u: "267b-fe0f" }, - { n: ["fleur-de-lis", "fleur de lis"], u: "269c-fe0f" }, - { n: ["trident", "trident emblem"], u: "1f531" }, - { n: ["name badge"], u: "1f4db" }, - { n: ["beginner", "japanese symbol for beginner"], u: "1f530" }, - { n: ["o", "heavy large circle"], u: "2b55" }, - { n: ["white check mark", "white heavy check mark"], u: "2705" }, - { n: ["ballot box with check"], u: "2611-fe0f" }, - { n: ["heavy check mark"], u: "2714-fe0f" }, - { n: ["x", "cross mark"], u: "274c" }, - { n: ["negative squared cross mark"], u: "274e" }, - { n: ["curly loop"], u: "27b0" }, - { n: ["loop", "double curly loop"], u: "27bf" }, - { n: ["part alternation mark"], u: "303d-fe0f" }, - { n: ["eight spoked asterisk"], u: "2733-fe0f" }, - { n: ["eight pointed black star"], u: "2734-fe0f" }, - { n: ["sparkle"], u: "2747-fe0f" }, - { n: ["copyright", "copyright sign"], u: "00a9-fe0f" }, - { n: ["registered", "registered sign"], u: "00ae-fe0f" }, - { n: ["tm", "trade mark sign"], u: "2122-fe0f" }, - { n: ["hash", "hash key"], u: "0023-fe0f-20e3" }, - { n: ["keycap: *", "keycap star"], u: "002a-fe0f-20e3" }, - { n: ["zero", "keycap 0"], u: "0030-fe0f-20e3" }, - { n: ["one", "keycap 1"], u: "0031-fe0f-20e3" }, - { n: ["two", "keycap 2"], u: "0032-fe0f-20e3" }, - { n: ["three", "keycap 3"], u: "0033-fe0f-20e3" }, - { n: ["four", "keycap 4"], u: "0034-fe0f-20e3" }, - { n: ["five", "keycap 5"], u: "0035-fe0f-20e3" }, - { n: ["six", "keycap 6"], u: "0036-fe0f-20e3" }, - { n: ["seven", "keycap 7"], u: "0037-fe0f-20e3" }, - { n: ["eight", "keycap 8"], u: "0038-fe0f-20e3" }, - { n: ["nine", "keycap 9"], u: "0039-fe0f-20e3" }, - { n: ["keycap ten"], u: "1f51f" }, - { - n: ["capital abcd", "input symbol for latin capital letters"], - u: "1f520" + key: row.id + }, /* @__PURE__ */ bn.createElement("td", null), row.getVisibleCells().map( + (cell) => { + var _a2, _b2; + return cell.getIsGrouped() ? /* @__PURE__ */ bn.createElement("td", { + className: "mk-td-group", + colSpan: cols.length + 1 + }, /* @__PURE__ */ bn.createElement("div", { + ...{ + onClick: row.getToggleExpandedHandler(), + style: { + display: "flex", + alignItems: "center", + cursor: "normal" + } + } + }, flexRender( + cell.column.columnDef.cell, + cell.getContext() + ), " ", "(", row.subRows.length, ")")) : cell.getIsAggregated() ? flexRender( + (_a2 = cell.column.columnDef.aggregatedCell) != null ? _a2 : cell.column.columnDef.cell, + cell.getContext() + ) : /* @__PURE__ */ bn.createElement("td", { + onClick: (e4) => selectCell( + e4, + cell.row.index, + cell.column.columnDef.accessorKey + ), + className: `${cell.column.columnDef.accessorKey == selectedColumn ? "mk-selected-cell " : ""} mk-td ${cell.getIsPlaceholder() ? "mk-td-empty" : ""}`, + key: cell.id, + style: { + minWidth: cell.getIsPlaceholder() ? "0px" : (_b2 = colsSize[cell.column.columnDef.accessorKey]) != null ? _b2 : "50px" + } + }, cell.getIsPlaceholder() ? null : flexRender( + cell.column.columnDef.cell, + cell.getContext() + )); + } + ))))), /* @__PURE__ */ bn.createElement("tfoot", null, isFolderContext ? /* @__PURE__ */ bn.createElement("tr", null, /* @__PURE__ */ bn.createElement("th", { + className: "mk-row-new", + colSpan: cols.length + 2, + onClick: () => { + newRow(); + } + }, "+ New")) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), table.getFooterGroups().map((footerGroup) => /* @__PURE__ */ bn.createElement("tr", { + key: footerGroup.id + }, footerGroup.headers.map((header) => /* @__PURE__ */ bn.createElement("th", { + key: header.id + }, header.isPlaceholder ? null : flexRender( + header.column.columnDef.footer, + header.getContext() + ))))))), j3( + /* @__PURE__ */ bn.createElement(DragOverlay, { + dropAnimation: null, + zIndex: 1600 + }, activeId ? /* @__PURE__ */ bn.createElement(ColumnHeader, { + plugin: props2.plugin, + editable: false, + column: { + name: activeId, + schemaId: tableData.schema.id, + type: "text", + table: "" + }, + saveColumn: newColumn, + deleteColumn: delColumn + }) : null), + document.body + ))); +}; + +// src/components/ContextView/DataTypeView/BooleanCell.tsx +var BooleanCell = (props2) => { + const { initialValue, saveValue } = props2; + const [value, setValue] = bn.useState(initialValue == "true"); + const onChange = () => { + if (props2.editMode == -1 /* EditModeReadOnly */) { + return; + } + setValue(!value); + saveValue(!value ? "true" : "false"); + }; + h2(() => { + if (props2.editMode == 2 /* EditModeActive */) { + setValue(!value); + saveValue(!value ? "true" : "false"); + props2.setEditMode(null); + } + }, [props2.editMode]); + bn.useEffect(() => { + setValue(initialValue == "true"); + }, [initialValue]); + if (props2.editMode < 1 /* EditModeView */) { + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-option-item" + }, /* @__PURE__ */ bn.createElement("input", { + type: "checkbox", + checked: value, + onChange + }), /* @__PURE__ */ bn.createElement("div", null, props2.column.name)); + } + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-cell-text" + }, /* @__PURE__ */ bn.createElement("input", { + type: "checkbox", + checked: value, + onChange + })); +}; + +// src/components/ContextView/DataTypeView/PreviewCell.tsx +var PreviewCell = (props2) => { + const [vaultItem, setVaultItem] = p2(null); + const previewImage = F(() => { + if (!props2.row || !props2.columns) + return null; + const imageCol = props2.columns.find((f4) => f4.type == "image"); + if (!imageCol) + return null; + return props2.row[imageCol.name + imageCol.table]; + }, [props2.row, props2.columns]); + const previewFile = F(() => { + return getAbstractFileAtPath(app, previewImage); + }, [previewImage]); + const loadIcon = () => { + setVaultItem(vaultItemForPath(props2.plugin, props2.file)); + }; + h2(() => { + loadIcon(); + window.addEventListener(eventTypes.spacesChange, loadIcon); + return () => { + window.removeEventListener(eventTypes.spacesChange, loadIcon); + }; + }, [props2.file]); + return previewImage ? /* @__PURE__ */ bn.createElement("div", { + className: "mk-file-preview", + style: { + backgroundSize: "cover", + backgroundImage: `url(${previewFile ? app.vault.getResourcePath(previewFile) : previewImage})` + } + }) : /* @__PURE__ */ bn.createElement("div", { + className: "mk-file-preview", + style: (vaultItem == null ? void 0 : vaultItem.color.length) > 0 ? { + "--label-color": `${vaultItem.color}`, + "--icon-color": `#ffffff` + } : { + "--label-color": `var(--background-secondary-alt)`, + "--icon-color": `var(--text-muted)` + } + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-file-icon", + dangerouslySetInnerHTML: (vaultItem == null ? void 0 : vaultItem.sticker) ? { __html: unifiedToNative(vaultItem.sticker) } : (vaultItem == null ? void 0 : vaultItem.folder) == "true" ? { __html: uiIconSet["mk-ui-folder"] } : { __html: uiIconSet["mk-ui-file"] } + })); +}; + +// src/components/ContextView/DataTypeView/DataTypeView.tsx +var DataTypeView = (props2) => { + const { initialValue, index, column, file } = props2; + const { tableData, saveDB: saveDB2, saveContextDB, contextTable } = q2(MDBContext); + const table = column.table; + const updateData = (column2, value) => { + var _a2; + const col = (_a2 = table == "" ? tableData : contextTable[table]) == null ? void 0 : _a2.cols.find( + (f4) => f4.name == column2 + ); + if (col) + saveFrontmatterValue(file, column2, value, col.type); + if (table == "") { + saveDB2({ + ...tableData, + rows: tableData.rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column2]: value + } : r3 + ) + }); + } else if (contextTable[table]) { + saveContextDB( + { + ...contextTable[table], + rows: contextTable[table].rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column2]: value + } : r3 + ) + }, + table + ); + } + }; + const updateFieldValue = (column2, fieldValue, value) => { + const col = tableData.cols.find((f4) => f4.name == column2); + saveFrontmatterValue(file, column2, value, col.type); + if (table == "") { + const newTable = { + ...tableData, + cols: tableData.cols.map( + (m5) => m5.name == column2 ? { + ...m5, + value: fieldValue + } : m5 + ), + rows: tableData.rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column2]: value + } : r3 + ) + }; + saveDB2(newTable); + } else if (contextTable[table]) { + saveContextDB( + { + ...contextTable[table], + cols: contextTable[table].cols.map( + (m5) => m5.name == column2 ? { + ...m5, + value: fieldValue + } : m5 + ), + rows: contextTable[table].rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column2]: value + } : r3 + ) + }, + table + ); + } + }; + const saveValue = (value) => { + updateData(column.name, value); + }; + const saveFieldValue = (fieldValue, value) => { + updateFieldValue(column.name, fieldValue, value); + }; + const viewProps = { + initialValue, + saveValue, + editMode: props2.editable == true ? 3 : 0, + setEditMode: () => { }, - { n: ["abcd", "input symbol for latin small letters"], u: "1f521" }, - { n: ["1234", "input symbol for numbers"], u: "1f522" }, - { n: ["symbols", "input symbol for symbols"], u: "1f523" }, - { n: ["abc", "input symbol for latin letters"], u: "1f524" }, - { n: ["a", "negative squared latin capital letter a"], u: "1f170-fe0f" }, - { n: ["ab", "negative squared ab"], u: "1f18e" }, - { n: ["b", "negative squared latin capital letter b"], u: "1f171-fe0f" }, - { n: ["cl", "squared cl"], u: "1f191" }, - { n: ["cool", "squared cool"], u: "1f192" }, - { n: ["free", "squared free"], u: "1f193" }, - { n: ["information source"], u: "2139-fe0f" }, - { n: ["id", "squared id"], u: "1f194" }, - { n: ["m", "circled latin capital letter m"], u: "24c2-fe0f" }, - { n: ["new", "squared new"], u: "1f195" }, - { n: ["ng", "squared ng"], u: "1f196" }, - { n: ["o2", "negative squared latin capital letter o"], u: "1f17e-fe0f" }, - { n: ["ok", "squared ok"], u: "1f197" }, - { - n: ["parking", "negative squared latin capital letter p"], - u: "1f17f-fe0f" + plugin: props2.plugin + }; + const fieldType = fieldTypes.find((t4) => column.type == t4.type) || fieldTypes.find((t4) => column.type == t4.multiType); + if (!fieldType) { + return /* @__PURE__ */ bn.createElement(bn.Fragment, null); + } + if (fieldType.type == "preview") { + return /* @__PURE__ */ bn.createElement(PreviewCell, { + ...viewProps, + file, + row: props2.row, + columns: props2.cols + }); + } else if (fieldType.type == "file") { + return /* @__PURE__ */ bn.createElement(FileCell, { + isFolder: false, + ...viewProps, + multi: fieldType.multiType == column.type, + openFlow: props2.openFlow + }); + } else if (fieldType.type == "boolean") { + return /* @__PURE__ */ bn.createElement(BooleanCell, { + ...viewProps, + column + }); + } else if (fieldType.type == "option") { + return /* @__PURE__ */ bn.createElement(OptionCell, { + ...viewProps, + options: column.value, + multi: fieldType.multiType == column.type, + saveOptions: saveFieldValue + }); + } else if (fieldType.type == "date") { + return /* @__PURE__ */ bn.createElement(DateCell, { + ...viewProps + }); + } else if (fieldType.type == "context") { + return /* @__PURE__ */ bn.createElement(ContextCell, { + ...viewProps, + multi: fieldType.multiType == column.type, + contextTable: contextTable[column.value], + contextTag: column.value + }); + } else if (fieldType.type == "fileprop") { + return /* @__PURE__ */ bn.createElement(FilePropertyCell, { + ...viewProps, + property: column.value, + file + }); + } else if (fieldType.type == "number") { + return /* @__PURE__ */ bn.createElement(NumberCell, { + ...viewProps + }); + } else if (fieldType.type == "link") { + return /* @__PURE__ */ bn.createElement(LinkCell, { + ...viewProps, + multi: fieldType.multiType == column.type, + file + }); + } else if (fieldType.type == "tag") { + return /* @__PURE__ */ bn.createElement(TagCell, { + ...viewProps, + multi: fieldType.multiType == column.type + }); + } else if (fieldType.type == "image") { + return /* @__PURE__ */ bn.createElement(ImageCell, { + ...viewProps + }); + } + return /* @__PURE__ */ bn.createElement(TextCell, { + ...viewProps + }); +}; + +// src/components/ContextView/CardsView/KanbanCard.tsx +var KanbanCard = bn.memo( + bn.forwardRef( + ({ + color, + dragOverlay, + dragging, + disabled, + fadeIn, + handle, + height, + index, + listeners, + selected, + onSelect, + onRemove, + renderItem, + plugin, + id: id2, + sorting, + style, + transition, + transform, + value, + cols, + wrapperStyle, + ...props2 + }, ref) => { + const onClickHandler = (e4) => { + if (!onSelect) { + return; + } + if (e4.detail === 1) { + onSelect(e4.shiftKey ? 1 : e4.metaKey ? 2 : 0, value["_index"]); + } else if (e4.detail === 2) { + onSelect(3, value["_index"]); + } + }; + h2(() => { + if (!dragOverlay) { + return; + } + document.body.style.cursor = "grabbing"; + return () => { + document.body.style.cursor = ""; + }; + }, [dragOverlay]); + const [openFlow, setOpenFlow] = p2(false); + return renderItem ? renderItem({ + dragOverlay: Boolean(dragOverlay), + dragging: Boolean(dragging), + sorting: Boolean(sorting), + index, + fadeIn: Boolean(fadeIn), + listeners, + ref, + style, + transform, + transition, + value + }) : /* @__PURE__ */ bn.createElement("li", { + className: (0, import_classnames.default)( + "mk-list-item", + fadeIn && "fadeIn", + sorting && "sorting", + dragOverlay && "dragOverlay", + selected && "mk-is-active" + ), + onClick: onClickHandler, + style: { + ...wrapperStyle, + transition, + "--translate-x": transform ? `${Math.round(transform.x)}px` : void 0, + "--translate-y": transform ? `${Math.round(transform.y)}px` : void 0, + "--scale-x": (transform == null ? void 0 : transform.scaleX) ? `${transform.scaleX}` : void 0, + "--scale-y": (transform == null ? void 0 : transform.scaleY) ? `${transform.scaleY}` : void 0, + "--index": index, + "--color": color + }, + ref + }, value && cols.filter((f4) => f4.type == "preview" && f4.table == "").map((f4) => /* @__PURE__ */ bn.createElement(DataTypeView, { + row: value, + cols, + plugin, + initialValue: value[f4.name + f4.table], + column: f4, + index: parseInt(id2), + file: value["File"], + editable: false + })), /* @__PURE__ */ bn.createElement("div", { + className: "mk-list-content" + }, /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames.default)( + "mk-list-fields", + dragging && "dragging", + handle && "withHandle", + dragOverlay && "dragOverlay", + disabled && "disabled", + color && "color" + ), + style, + "data-cypress": "draggable-item", + ...listeners, + ...props2, + tabIndex: !handle ? 0 : void 0 + }, value && cols.map((f4) => { + var _a2; + return ((_a2 = value[f4.name + f4.table]) == null ? void 0 : _a2.length) > 0 || f4.type == "fileprop" ? /* @__PURE__ */ bn.createElement(DataTypeView, { + openFlow: () => setOpenFlow((o3) => !o3), + plugin, + initialValue: value[f4.name + f4.table], + column: f4, + index: parseInt(id2), + file: value["File"], + editable: false + }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); + })), /* @__PURE__ */ bn.createElement(FlowView, { + plugin, + path: value.File, + load: openFlow + }))); + } + ) +); + +// src/components/ContextView/CardsView/KanbanColumn.tsx +var import_classnames2 = __toESM(require_classnames()); +var KanbanColumn = k3( + ({ + id: id2, + children, + columns = 1, + handleProps, + horizontal, + hover, + onClick, + onRemove, + plugin, + field, + label, + file, + placeholder: placeholder2, + style, + scrollable, + shadow, + unstyled, + ...props2 + }, ref) => { + const Component2 = "div"; + return /* @__PURE__ */ bn.createElement(Component2, { + ...props2, + ref, + style: { + ...style, + "--columns": columns + }, + className: (0, import_classnames2.default)( + "mk-list-group", + unstyled && "unstyled", + horizontal && "horizontal", + hover && "hover", + placeholder2 && "placeholder", + scrollable && "scrollable", + shadow && "shadow" + ), + onClick, + tabIndex: onClick ? 0 : void 0 + }, label != null && field ? /* @__PURE__ */ bn.createElement("div", { + className: "mk-list-group-header" + }, /* @__PURE__ */ bn.createElement(DataTypeView, { + initialValue: label, + plugin, + index: parseInt(id2) * -1, + file, + column: field, + editable: false + }), /* @__PURE__ */ bn.createElement("div", { + className: "Actions", + ...handleProps + })) : null, placeholder2 ? children : /* @__PURE__ */ bn.createElement("ul", null, children)); + } +); + +// src/components/ContextView/CardsView/CardsView.tsx +var animateLayoutChanges = (args) => args.isSorting || args.wasDragging ? defaultAnimateLayoutChanges(args) : true; +function DroppableContainer({ + children, + columns = 1, + disabled, + id: id2, + items, + style, + ...props2 +}) { + var _a2; + const { + active, + attributes, + isDragging, + listeners, + over, + setNodeRef, + transition, + transform + } = useSortable({ + id: id2, + data: { + type: "container" }, - { n: ["sos", "squared sos"], u: "1f198" }, - { n: ["up", "squared up with exclamation mark"], u: "1f199" }, - { n: ["vs", "squared vs"], u: "1f19a" }, - { n: ["koko", "squared katakana koko"], u: "1f201" }, - { n: ["sa", "squared katakana sa"], u: "1f202-fe0f" }, - { n: ["u6708", "squared cjk unified ideograph-6708"], u: "1f237-fe0f" }, - { n: ["u6709", "squared cjk unified ideograph-6709"], u: "1f236" }, - { n: ["u6307", "squared cjk unified ideograph-6307"], u: "1f22f" }, - { n: ["ideograph advantage", "circled ideograph advantage"], u: "1f250" }, - { n: ["u5272", "squared cjk unified ideograph-5272"], u: "1f239" }, - { n: ["u7121", "squared cjk unified ideograph-7121"], u: "1f21a" }, - { n: ["u7981", "squared cjk unified ideograph-7981"], u: "1f232" }, - { n: ["accept", "circled ideograph accept"], u: "1f251" }, - { n: ["u7533", "squared cjk unified ideograph-7533"], u: "1f238" }, - { n: ["u5408", "squared cjk unified ideograph-5408"], u: "1f234" }, - { n: ["u7a7a", "squared cjk unified ideograph-7a7a"], u: "1f233" }, - { - n: ["congratulations", "circled ideograph congratulation"], - u: "3297-fe0f" + animateLayoutChanges + }); + const isOverContainer = over ? id2 === over.id && ((_a2 = active == null ? void 0 : active.data.current) == null ? void 0 : _a2.type) !== "container" || items.includes(over.id) : false; + return /* @__PURE__ */ bn.createElement(KanbanColumn, { + id: id2, + ref: disabled ? void 0 : setNodeRef, + style: { + ...style, + transition, + transform: CSS.Translate.toString(transform), + opacity: isDragging ? 0.5 : void 0 }, - { n: ["secret", "circled ideograph secret"], u: "3299-fe0f" }, - { n: ["u55b6", "squared cjk unified ideograph-55b6"], u: "1f23a" }, - { n: ["u6e80", "squared cjk unified ideograph-6e80"], u: "1f235" }, - { n: ["red circle", "large red circle"], u: "1f534" }, - { n: ["large orange circle"], u: "1f7e0" }, - { n: ["large yellow circle"], u: "1f7e1" }, - { n: ["large green circle"], u: "1f7e2" }, - { n: ["large blue circle"], u: "1f535" }, - { n: ["large purple circle"], u: "1f7e3" }, - { n: ["large brown circle"], u: "1f7e4" }, - { n: ["black circle", "medium black circle"], u: "26ab" }, - { n: ["white circle", "medium white circle"], u: "26aa" }, - { n: ["large red square"], u: "1f7e5" }, - { n: ["large orange square"], u: "1f7e7" }, - { n: ["large yellow square"], u: "1f7e8" }, - { n: ["large green square"], u: "1f7e9" }, - { n: ["large blue square"], u: "1f7e6" }, - { n: ["large purple square"], u: "1f7ea" }, - { n: ["large brown square"], u: "1f7eb" }, - { n: ["black large square"], u: "2b1b" }, - { n: ["white large square"], u: "2b1c" }, - { n: ["black medium square"], u: "25fc-fe0f" }, - { n: ["white medium square"], u: "25fb-fe0f" }, - { n: ["black medium small square"], u: "25fe" }, - { n: ["white medium small square"], u: "25fd" }, - { n: ["black small square"], u: "25aa-fe0f" }, - { n: ["white small square"], u: "25ab-fe0f" }, - { n: ["large orange diamond"], u: "1f536" }, - { n: ["large blue diamond"], u: "1f537" }, - { n: ["small orange diamond"], u: "1f538" }, - { n: ["small blue diamond"], u: "1f539" }, - { n: ["small red triangle", "up-pointing red triangle"], u: "1f53a" }, - { - n: ["small red triangle down", "down-pointing red triangle"], - u: "1f53b" + hover: isOverContainer, + handleProps: { + ...attributes, + ...listeners }, - { n: ["diamond shape with a dot inside"], u: "1f4a0" }, - { n: ["radio button"], u: "1f518" }, - { n: ["white square button"], u: "1f533" }, - { n: ["black square button"], u: "1f532" } - ], - flags: [ - { n: ["chequered flag", "checkered flag"], u: "1f3c1" }, - { n: ["triangular flag on post"], u: "1f6a9" }, - { n: ["crossed flags"], u: "1f38c" }, - { n: ["waving black flag"], u: "1f3f4" }, - { n: ["white flag", "waving white flag"], u: "1f3f3-fe0f" }, - { n: ["rainbow flag", "rainbow-flag"], u: "1f3f3-fe0f-200d-1f308" }, - { n: ["transgender flag"], u: "1f3f3-fe0f-200d-26a7-fe0f" }, - { n: ["pirate flag"], u: "1f3f4-200d-2620-fe0f" }, - { n: ["flag-ac", "ascension island flag"], u: "1f1e6-1f1e8" }, - { n: ["flag-ad", "andorra flag"], u: "1f1e6-1f1e9" }, - { n: ["flag-ae", "united arab emirates flag"], u: "1f1e6-1f1ea" }, - { n: ["flag-af", "afghanistan flag"], u: "1f1e6-1f1eb" }, - { n: ["flag-ag", "antigua & barbuda flag"], u: "1f1e6-1f1ec" }, - { n: ["flag-ai", "anguilla flag"], u: "1f1e6-1f1ee" }, - { n: ["flag-al", "albania flag"], u: "1f1e6-1f1f1" }, - { n: ["flag-am", "armenia flag"], u: "1f1e6-1f1f2" }, - { n: ["flag-ao", "angola flag"], u: "1f1e6-1f1f4" }, - { n: ["flag-aq", "antarctica flag"], u: "1f1e6-1f1f6" }, - { n: ["flag-ar", "argentina flag"], u: "1f1e6-1f1f7" }, - { n: ["flag-as", "american samoa flag"], u: "1f1e6-1f1f8" }, - { n: ["flag-at", "austria flag"], u: "1f1e6-1f1f9" }, - { n: ["flag-au", "australia flag"], u: "1f1e6-1f1fa" }, - { n: ["flag-aw", "aruba flag"], u: "1f1e6-1f1fc" }, - { n: ["flag-ax", "\xE5land islands flag"], u: "1f1e6-1f1fd" }, - { n: ["flag-az", "azerbaijan flag"], u: "1f1e6-1f1ff" }, - { n: ["flag-ba", "bosnia & herzegovina flag"], u: "1f1e7-1f1e6" }, - { n: ["flag-bb", "barbados flag"], u: "1f1e7-1f1e7" }, - { n: ["flag-bd", "bangladesh flag"], u: "1f1e7-1f1e9" }, - { n: ["flag-be", "belgium flag"], u: "1f1e7-1f1ea" }, - { n: ["flag-bf", "burkina faso flag"], u: "1f1e7-1f1eb" }, - { n: ["flag-bg", "bulgaria flag"], u: "1f1e7-1f1ec" }, - { n: ["flag-bh", "bahrain flag"], u: "1f1e7-1f1ed" }, - { n: ["flag-bi", "burundi flag"], u: "1f1e7-1f1ee" }, - { n: ["flag-bj", "benin flag"], u: "1f1e7-1f1ef" }, - { n: ["flag-bl", "st. barth\xE9lemy flag"], u: "1f1e7-1f1f1" }, - { n: ["flag-bm", "bermuda flag"], u: "1f1e7-1f1f2" }, - { n: ["flag-bn", "brunei flag"], u: "1f1e7-1f1f3" }, - { n: ["flag-bo", "bolivia flag"], u: "1f1e7-1f1f4" }, - { n: ["flag-bq", "caribbean netherlands flag"], u: "1f1e7-1f1f6" }, - { n: ["flag-br", "brazil flag"], u: "1f1e7-1f1f7" }, - { n: ["flag-bs", "bahamas flag"], u: "1f1e7-1f1f8" }, - { n: ["flag-bt", "bhutan flag"], u: "1f1e7-1f1f9" }, - { n: ["flag-bv", "bouvet island flag"], u: "1f1e7-1f1fb" }, - { n: ["flag-bw", "botswana flag"], u: "1f1e7-1f1fc" }, - { n: ["flag-by", "belarus flag"], u: "1f1e7-1f1fe" }, - { n: ["flag-bz", "belize flag"], u: "1f1e7-1f1ff" }, - { n: ["flag-ca", "canada flag"], u: "1f1e8-1f1e6" }, - { n: ["flag-cc", "cocos (keeling) islands flag"], u: "1f1e8-1f1e8" }, - { n: ["flag-cd", "congo - kinshasa flag"], u: "1f1e8-1f1e9" }, - { n: ["flag-cf", "central african republic flag"], u: "1f1e8-1f1eb" }, - { n: ["flag-cg", "congo - brazzaville flag"], u: "1f1e8-1f1ec" }, - { n: ["flag-ch", "switzerland flag"], u: "1f1e8-1f1ed" }, - { n: ["flag-ci", "c\xF4te d\u2019ivoire flag"], u: "1f1e8-1f1ee" }, - { n: ["flag-ck", "cook islands flag"], u: "1f1e8-1f1f0" }, - { n: ["flag-cl", "chile flag"], u: "1f1e8-1f1f1" }, - { n: ["flag-cm", "cameroon flag"], u: "1f1e8-1f1f2" }, - { n: ["cn", "flag-cn", "china flag"], u: "1f1e8-1f1f3" }, - { n: ["flag-co", "colombia flag"], u: "1f1e8-1f1f4" }, - { n: ["flag-cp", "clipperton island flag"], u: "1f1e8-1f1f5" }, - { n: ["flag-cr", "costa rica flag"], u: "1f1e8-1f1f7" }, - { n: ["flag-cu", "cuba flag"], u: "1f1e8-1f1fa" }, - { n: ["flag-cv", "cape verde flag"], u: "1f1e8-1f1fb" }, - { n: ["flag-cw", "cura\xE7ao flag"], u: "1f1e8-1f1fc" }, - { n: ["flag-cx", "christmas island flag"], u: "1f1e8-1f1fd" }, - { n: ["flag-cy", "cyprus flag"], u: "1f1e8-1f1fe" }, - { n: ["flag-cz", "czechia flag"], u: "1f1e8-1f1ff" }, - { n: ["de", "flag-de", "germany flag"], u: "1f1e9-1f1ea" }, - { n: ["flag-dg", "diego garcia flag"], u: "1f1e9-1f1ec" }, - { n: ["flag-dj", "djibouti flag"], u: "1f1e9-1f1ef" }, - { n: ["flag-dk", "denmark flag"], u: "1f1e9-1f1f0" }, - { n: ["flag-dm", "dominica flag"], u: "1f1e9-1f1f2" }, - { n: ["flag-do", "dominican republic flag"], u: "1f1e9-1f1f4" }, - { n: ["flag-dz", "algeria flag"], u: "1f1e9-1f1ff" }, - { n: ["flag-ea", "ceuta & melilla flag"], u: "1f1ea-1f1e6" }, - { n: ["flag-ec", "ecuador flag"], u: "1f1ea-1f1e8" }, - { n: ["flag-ee", "estonia flag"], u: "1f1ea-1f1ea" }, - { n: ["flag-eg", "egypt flag"], u: "1f1ea-1f1ec" }, - { n: ["flag-eh", "western sahara flag"], u: "1f1ea-1f1ed" }, - { n: ["flag-er", "eritrea flag"], u: "1f1ea-1f1f7" }, - { n: ["es", "flag-es", "spain flag"], u: "1f1ea-1f1f8" }, - { n: ["flag-et", "ethiopia flag"], u: "1f1ea-1f1f9" }, - { n: ["flag-eu", "european union flag"], u: "1f1ea-1f1fa" }, - { n: ["flag-fi", "finland flag"], u: "1f1eb-1f1ee" }, - { n: ["flag-fj", "fiji flag"], u: "1f1eb-1f1ef" }, - { n: ["flag-fk", "falkland islands flag"], u: "1f1eb-1f1f0" }, - { n: ["flag-fm", "micronesia flag"], u: "1f1eb-1f1f2" }, - { n: ["flag-fo", "faroe islands flag"], u: "1f1eb-1f1f4" }, - { n: ["fr", "flag-fr", "france flag"], u: "1f1eb-1f1f7" }, - { n: ["flag-ga", "gabon flag"], u: "1f1ec-1f1e6" }, - { n: ["gb", "uk", "flag-gb", "united kingdom flag"], u: "1f1ec-1f1e7" }, - { n: ["flag-gd", "grenada flag"], u: "1f1ec-1f1e9" }, - { n: ["flag-ge", "georgia flag"], u: "1f1ec-1f1ea" }, - { n: ["flag-gf", "french guiana flag"], u: "1f1ec-1f1eb" }, - { n: ["flag-gg", "guernsey flag"], u: "1f1ec-1f1ec" }, - { n: ["flag-gh", "ghana flag"], u: "1f1ec-1f1ed" }, - { n: ["flag-gi", "gibraltar flag"], u: "1f1ec-1f1ee" }, - { n: ["flag-gl", "greenland flag"], u: "1f1ec-1f1f1" }, - { n: ["flag-gm", "gambia flag"], u: "1f1ec-1f1f2" }, - { n: ["flag-gn", "guinea flag"], u: "1f1ec-1f1f3" }, - { n: ["flag-gp", "guadeloupe flag"], u: "1f1ec-1f1f5" }, - { n: ["flag-gq", "equatorial guinea flag"], u: "1f1ec-1f1f6" }, - { n: ["flag-gr", "greece flag"], u: "1f1ec-1f1f7" }, - { - n: ["flag-gs", "south georgia & south sandwich islands flag"], - u: "1f1ec-1f1f8" + columns, + ...props2 + }, children); +} +var PLACEHOLDER_ID = "placeholder"; +var CardsView = ({ + adjustScale: adjustScale2 = false, + itemCount = 3, + cancelDrop, + columns, + handle = false, + items: initialItems, + containerStyle, + getItemStyles = () => ({}), + wrapperStyle = () => ({}), + minimal = false, + modifiers, + renderItem, + strategy = verticalListSortingStrategy, + vertical = false, + scrollable, + plugin +}) => { + var _a2, _b2; + const { + tableData, + filteredData, + selectedRows, + selectRows, + sortedColumns: cols, + predicate, + tagContexts, + contextTable, + schema, + saveDB: saveDB2, + saveContextDB + } = q2(MDBContext); + const groupBy2 = ((_a2 = predicate.groupBy) == null ? void 0 : _a2.length) > 0 ? cols.find((f4) => f4.name + f4.table == predicate.groupBy[0]) : null; + const displayCols = (_b2 = cols == null ? void 0 : cols.filter( + (f4) => !(f4.name == (groupBy2 == null ? void 0 : groupBy2.name) && f4.table == groupBy2.table) + )) != null ? _b2 : []; + const viewType = schema.type; + const items = F(() => { + var _a3, _b3; + if (groupBy2) { + const options = uniq([ + "", + ...(_a3 = splitString(groupBy2.value)) != null ? _a3 : [], + ...filteredData.reduce( + (p3, c4) => { + var _a4; + return [...p3, (_a4 = c4[groupBy2.name + groupBy2.table]) != null ? _a4 : ""]; + }, + [] + ) + ]); + return options.reduce( + (p3, c4) => { + return { + ...p3, + [c4]: filteredData.filter((r3) => r3[groupBy2.name + groupBy2.table] == c4).map((r3) => r3._index) + }; + }, + { "": [] } + ); + } + return { + "": (_b3 = filteredData == null ? void 0 : filteredData.map((r3) => r3._index)) != null ? _b3 : [] + }; + }, [filteredData, predicate]); + const containers = F( + () => Object.keys(items).map((f4, i4) => "-" + i4.toString()), + [items] + ); + const [activeId, setActiveId] = p2(null); + const [overId, setOverId] = p2(null); + const recentlyMovedToNewContainer = _2(false); + const isSortingContainer = activeId ? containers.includes(activeId) : false; + const [lastSelectedIndex, setLastSelectedIndex] = p2(null); + const sensors = useSensors( + useSensor(MouseSensor, { + activationConstraint: { + distance: 10 + } + }), + useSensor(TouchSensor, { + activationConstraint: { + delay: 250, + tolerance: 5 + } + }), + useSensor(KeyboardSensor, { + coordinateGetter: sortableKeyboardCoordinates + }) + ); + const findContainer = (id2) => { + if (id2.charAt(0) == "-") { + return id2; + } + return "-" + Object.keys(items).findIndex((key2) => items[key2].includes(id2)).toString(); + }; + const getIndex = (id2) => { + const container = findContainer(id2); + if (!container) { + return -1; + } + const index = items[Object.keys(items)[parseInt(container) * -1]].indexOf(id2); + return index; + }; + const resetState = () => { + setActiveId(null); + setOverId(null); + }; + const onDragCancel = () => { + resetState(); + }; + h2(() => { + requestAnimationFrame(() => { + recentlyMovedToNewContainer.current = false; + }); + }, [items]); + const saveFieldValue = (table, fieldValue, column) => { + if (table == "") { + const newTable = { + ...tableData, + cols: tableData.cols.map( + (m5) => m5.name == column ? { + ...m5, + value: fieldValue + } : m5 + ) + }; + saveDB2(newTable); + } else if (contextTable[table]) { + saveContextDB( + { + ...contextTable[table], + cols: contextTable[table].cols.map( + (m5) => m5.name == column ? { + ...m5, + value: fieldValue + } : m5 + ) + }, + table + ); + } + }; + const saveValue = (table, value, index, column) => { + var _a3; + const col = cols.find((f4) => f4.table == table && f4.name == column); + saveFrontmatterValue((_a3 = tableData.rows[index]) == null ? void 0 : _a3.File, column, value, col.type); + if (table == "") { + const newTable = { + ...tableData, + rows: tableData.rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column]: value + } : r3 + ) + }; + saveDB2(newTable); + } else if (contextTable[table]) { + saveContextDB( + { + ...contextTable[table], + rows: contextTable[table].rows.map( + (r3, i4) => i4 == index ? { + ...r3, + [column]: value + } : r3 + ) + }, + table + ); + } + }; + const selectItem = (modifier, index) => { + if (platformIsMobile()) { + const file = getAbstractFileAtPath( + app, + tableData.rows[parseInt(index)].File + ); + if (file) + openAFile(file, plugin, false); + return; + } + if (modifier == 3) { + const file = getAbstractFileAtPath( + app, + tableData.rows[parseInt(index)].File + ); + if (file) + openAFile(file, plugin, false); + return; + } + if (modifier == 2) { + selectedRows.some((f4) => f4 == index) ? selectRows( + null, + selectedRows.filter((f4) => f4 != index) + ) : selectRows(index, uniq([...selectedRows, index])); + } else if (modifier == 1) { + selectRows( + index, + uniq([ + ...selectedRows, + ...selectRange( + lastSelectedIndex, + index, + filteredData.map((f4) => f4._index) + ) + ]) + ); + } else { + selectRows(index, [index]); + } + setLastSelectedIndex(index); + }; + const onKeyDown = (e4) => { + if (e4.key == "Escape") { + selectRows(null, []); + setLastSelectedIndex(null); + } + if (e4.key == "Enter") { + const file = getAbstractFileAtPath( + app, + tableData.rows[parseInt(lastSelectedIndex)].File + ); + if (file) + openAFile(file, plugin, false); + return; + } + if (e4.key == "ArrowDown") { + const newIndex = selectNextIndex( + lastSelectedIndex, + filteredData.map((f4) => f4._index) + ); + selectRows(newIndex, [newIndex]); + setLastSelectedIndex(newIndex); + } + if (e4.key == "ArrowUp") { + const newIndex = selectPrevIndex( + lastSelectedIndex, + filteredData.map((f4) => f4._index) + ); + selectRows(newIndex, [newIndex]); + setLastSelectedIndex(newIndex); + } + }; + return /* @__PURE__ */ bn.createElement(DndContext, { + sensors, + collisionDetection: closestCenter, + measuring: { + droppable: { + strategy: MeasuringStrategy.Always + } }, - { n: ["flag-gt", "guatemala flag"], u: "1f1ec-1f1f9" }, - { n: ["flag-gu", "guam flag"], u: "1f1ec-1f1fa" }, - { n: ["flag-gw", "guinea-bissau flag"], u: "1f1ec-1f1fc" }, - { n: ["flag-gy", "guyana flag"], u: "1f1ec-1f1fe" }, - { n: ["flag-hk", "hong kong sar china flag"], u: "1f1ed-1f1f0" }, - { n: ["flag-hm", "heard & mcdonald islands flag"], u: "1f1ed-1f1f2" }, - { n: ["flag-hn", "honduras flag"], u: "1f1ed-1f1f3" }, - { n: ["flag-hr", "croatia flag"], u: "1f1ed-1f1f7" }, - { n: ["flag-ht", "haiti flag"], u: "1f1ed-1f1f9" }, - { n: ["flag-hu", "hungary flag"], u: "1f1ed-1f1fa" }, - { n: ["flag-ic", "canary islands flag"], u: "1f1ee-1f1e8" }, - { n: ["flag-id", "indonesia flag"], u: "1f1ee-1f1e9" }, - { n: ["flag-ie", "ireland flag"], u: "1f1ee-1f1ea" }, - { n: ["flag-il", "israel flag"], u: "1f1ee-1f1f1" }, - { n: ["flag-im", "isle of man flag"], u: "1f1ee-1f1f2" }, - { n: ["flag-in", "india flag"], u: "1f1ee-1f1f3" }, - { n: ["flag-io", "british indian ocean territory flag"], u: "1f1ee-1f1f4" }, - { n: ["flag-iq", "iraq flag"], u: "1f1ee-1f1f6" }, - { n: ["flag-ir", "iran flag"], u: "1f1ee-1f1f7" }, - { n: ["flag-is", "iceland flag"], u: "1f1ee-1f1f8" }, - { n: ["it", "flag-it", "italy flag"], u: "1f1ee-1f1f9" }, - { n: ["flag-je", "jersey flag"], u: "1f1ef-1f1ea" }, - { n: ["flag-jm", "jamaica flag"], u: "1f1ef-1f1f2" }, - { n: ["flag-jo", "jordan flag"], u: "1f1ef-1f1f4" }, - { n: ["jp", "flag-jp", "japan flag"], u: "1f1ef-1f1f5" }, - { n: ["flag-ke", "kenya flag"], u: "1f1f0-1f1ea" }, - { n: ["flag-kg", "kyrgyzstan flag"], u: "1f1f0-1f1ec" }, - { n: ["flag-kh", "cambodia flag"], u: "1f1f0-1f1ed" }, - { n: ["flag-ki", "kiribati flag"], u: "1f1f0-1f1ee" }, - { n: ["flag-km", "comoros flag"], u: "1f1f0-1f1f2" }, - { n: ["flag-kn", "st. kitts & nevis flag"], u: "1f1f0-1f1f3" }, - { n: ["flag-kp", "north korea flag"], u: "1f1f0-1f1f5" }, - { n: ["kr", "flag-kr", "south korea flag"], u: "1f1f0-1f1f7" }, - { n: ["flag-kw", "kuwait flag"], u: "1f1f0-1f1fc" }, - { n: ["flag-ky", "cayman islands flag"], u: "1f1f0-1f1fe" }, - { n: ["flag-kz", "kazakhstan flag"], u: "1f1f0-1f1ff" }, - { n: ["flag-la", "laos flag"], u: "1f1f1-1f1e6" }, - { n: ["flag-lb", "lebanon flag"], u: "1f1f1-1f1e7" }, - { n: ["flag-lc", "st. lucia flag"], u: "1f1f1-1f1e8" }, - { n: ["flag-li", "liechtenstein flag"], u: "1f1f1-1f1ee" }, - { n: ["flag-lk", "sri lanka flag"], u: "1f1f1-1f1f0" }, - { n: ["flag-lr", "liberia flag"], u: "1f1f1-1f1f7" }, - { n: ["flag-ls", "lesotho flag"], u: "1f1f1-1f1f8" }, - { n: ["flag-lt", "lithuania flag"], u: "1f1f1-1f1f9" }, - { n: ["flag-lu", "luxembourg flag"], u: "1f1f1-1f1fa" }, - { n: ["flag-lv", "latvia flag"], u: "1f1f1-1f1fb" }, - { n: ["flag-ly", "libya flag"], u: "1f1f1-1f1fe" }, - { n: ["flag-ma", "morocco flag"], u: "1f1f2-1f1e6" }, - { n: ["flag-mc", "monaco flag"], u: "1f1f2-1f1e8" }, - { n: ["flag-md", "moldova flag"], u: "1f1f2-1f1e9" }, - { n: ["flag-me", "montenegro flag"], u: "1f1f2-1f1ea" }, - { n: ["flag-mf", "st. martin flag"], u: "1f1f2-1f1eb" }, - { n: ["flag-mg", "madagascar flag"], u: "1f1f2-1f1ec" }, - { n: ["flag-mh", "marshall islands flag"], u: "1f1f2-1f1ed" }, - { n: ["flag-mk", "north macedonia flag"], u: "1f1f2-1f1f0" }, - { n: ["flag-ml", "mali flag"], u: "1f1f2-1f1f1" }, - { n: ["flag-mm", "myanmar (burma) flag"], u: "1f1f2-1f1f2" }, - { n: ["flag-mn", "mongolia flag"], u: "1f1f2-1f1f3" }, - { n: ["flag-mo", "macao sar china flag"], u: "1f1f2-1f1f4" }, - { n: ["flag-mp", "northern mariana islands flag"], u: "1f1f2-1f1f5" }, - { n: ["flag-mq", "martinique flag"], u: "1f1f2-1f1f6" }, - { n: ["flag-mr", "mauritania flag"], u: "1f1f2-1f1f7" }, - { n: ["flag-ms", "montserrat flag"], u: "1f1f2-1f1f8" }, - { n: ["flag-mt", "malta flag"], u: "1f1f2-1f1f9" }, - { n: ["flag-mu", "mauritius flag"], u: "1f1f2-1f1fa" }, - { n: ["flag-mv", "maldives flag"], u: "1f1f2-1f1fb" }, - { n: ["flag-mw", "malawi flag"], u: "1f1f2-1f1fc" }, - { n: ["flag-mx", "mexico flag"], u: "1f1f2-1f1fd" }, - { n: ["flag-my", "malaysia flag"], u: "1f1f2-1f1fe" }, - { n: ["flag-mz", "mozambique flag"], u: "1f1f2-1f1ff" }, - { n: ["flag-na", "namibia flag"], u: "1f1f3-1f1e6" }, - { n: ["flag-nc", "new caledonia flag"], u: "1f1f3-1f1e8" }, - { n: ["flag-ne", "niger flag"], u: "1f1f3-1f1ea" }, - { n: ["flag-nf", "norfolk island flag"], u: "1f1f3-1f1eb" }, - { n: ["flag-ng", "nigeria flag"], u: "1f1f3-1f1ec" }, - { n: ["flag-ni", "nicaragua flag"], u: "1f1f3-1f1ee" }, - { n: ["flag-nl", "netherlands flag"], u: "1f1f3-1f1f1" }, - { n: ["flag-no", "norway flag"], u: "1f1f3-1f1f4" }, - { n: ["flag-np", "nepal flag"], u: "1f1f3-1f1f5" }, - { n: ["flag-nr", "nauru flag"], u: "1f1f3-1f1f7" }, - { n: ["flag-nu", "niue flag"], u: "1f1f3-1f1fa" }, - { n: ["flag-nz", "new zealand flag"], u: "1f1f3-1f1ff" }, - { n: ["flag-om", "oman flag"], u: "1f1f4-1f1f2" }, - { n: ["flag-pa", "panama flag"], u: "1f1f5-1f1e6" }, - { n: ["flag-pe", "peru flag"], u: "1f1f5-1f1ea" }, - { n: ["flag-pf", "french polynesia flag"], u: "1f1f5-1f1eb" }, - { n: ["flag-pg", "papua new guinea flag"], u: "1f1f5-1f1ec" }, - { n: ["flag-ph", "philippines flag"], u: "1f1f5-1f1ed" }, - { n: ["flag-pk", "pakistan flag"], u: "1f1f5-1f1f0" }, - { n: ["flag-pl", "poland flag"], u: "1f1f5-1f1f1" }, - { n: ["flag-pm", "st. pierre & miquelon flag"], u: "1f1f5-1f1f2" }, - { n: ["flag-pn", "pitcairn islands flag"], u: "1f1f5-1f1f3" }, - { n: ["flag-pr", "puerto rico flag"], u: "1f1f5-1f1f7" }, - { n: ["flag-ps", "palestinian territories flag"], u: "1f1f5-1f1f8" }, - { n: ["flag-pt", "portugal flag"], u: "1f1f5-1f1f9" }, - { n: ["flag-pw", "palau flag"], u: "1f1f5-1f1fc" }, - { n: ["flag-py", "paraguay flag"], u: "1f1f5-1f1fe" }, - { n: ["flag-qa", "qatar flag"], u: "1f1f6-1f1e6" }, - { n: ["flag-re", "r\xE9union flag"], u: "1f1f7-1f1ea" }, - { n: ["flag-ro", "romania flag"], u: "1f1f7-1f1f4" }, - { n: ["flag-rs", "serbia flag"], u: "1f1f7-1f1f8" }, - { n: ["ru", "flag-ru", "russia flag"], u: "1f1f7-1f1fa" }, - { n: ["flag-rw", "rwanda flag"], u: "1f1f7-1f1fc" }, - { n: ["flag-sa", "saudi arabia flag"], u: "1f1f8-1f1e6" }, - { n: ["flag-sb", "solomon islands flag"], u: "1f1f8-1f1e7" }, - { n: ["flag-sc", "seychelles flag"], u: "1f1f8-1f1e8" }, - { n: ["flag-sd", "sudan flag"], u: "1f1f8-1f1e9" }, - { n: ["flag-se", "sweden flag"], u: "1f1f8-1f1ea" }, - { n: ["flag-sg", "singapore flag"], u: "1f1f8-1f1ec" }, - { n: ["flag-sh", "st. helena flag"], u: "1f1f8-1f1ed" }, - { n: ["flag-si", "slovenia flag"], u: "1f1f8-1f1ee" }, - { n: ["flag-sj", "svalbard & jan mayen flag"], u: "1f1f8-1f1ef" }, - { n: ["flag-sk", "slovakia flag"], u: "1f1f8-1f1f0" }, - { n: ["flag-sl", "sierra leone flag"], u: "1f1f8-1f1f1" }, - { n: ["flag-sm", "san marino flag"], u: "1f1f8-1f1f2" }, - { n: ["flag-sn", "senegal flag"], u: "1f1f8-1f1f3" }, - { n: ["flag-so", "somalia flag"], u: "1f1f8-1f1f4" }, - { n: ["flag-sr", "suriname flag"], u: "1f1f8-1f1f7" }, - { n: ["flag-ss", "south sudan flag"], u: "1f1f8-1f1f8" }, - { n: ["flag-st", "s\xE3o tom\xE9 & pr\xEDncipe flag"], u: "1f1f8-1f1f9" }, - { n: ["flag-sv", "el salvador flag"], u: "1f1f8-1f1fb" }, - { n: ["flag-sx", "sint maarten flag"], u: "1f1f8-1f1fd" }, - { n: ["flag-sy", "syria flag"], u: "1f1f8-1f1fe" }, - { n: ["flag-sz", "eswatini flag"], u: "1f1f8-1f1ff" }, - { n: ["flag-ta", "tristan da cunha flag"], u: "1f1f9-1f1e6" }, - { n: ["flag-tc", "turks & caicos islands flag"], u: "1f1f9-1f1e8" }, - { n: ["flag-td", "chad flag"], u: "1f1f9-1f1e9" }, - { n: ["flag-tf", "french southern territories flag"], u: "1f1f9-1f1eb" }, - { n: ["flag-tg", "togo flag"], u: "1f1f9-1f1ec" }, - { n: ["flag-th", "thailand flag"], u: "1f1f9-1f1ed" }, - { n: ["flag-tj", "tajikistan flag"], u: "1f1f9-1f1ef" }, - { n: ["flag-tk", "tokelau flag"], u: "1f1f9-1f1f0" }, - { n: ["flag-tl", "timor-leste flag"], u: "1f1f9-1f1f1" }, - { n: ["flag-tm", "turkmenistan flag"], u: "1f1f9-1f1f2" }, - { n: ["flag-tn", "tunisia flag"], u: "1f1f9-1f1f3" }, - { n: ["flag-to", "tonga flag"], u: "1f1f9-1f1f4" }, - { n: ["flag-tr", "turkey flag"], u: "1f1f9-1f1f7" }, - { n: ["flag-tt", "trinidad & tobago flag"], u: "1f1f9-1f1f9" }, - { n: ["flag-tv", "tuvalu flag"], u: "1f1f9-1f1fb" }, - { n: ["flag-tw", "taiwan flag"], u: "1f1f9-1f1fc" }, - { n: ["flag-tz", "tanzania flag"], u: "1f1f9-1f1ff" }, - { n: ["flag-ua", "ukraine flag"], u: "1f1fa-1f1e6" }, - { n: ["flag-ug", "uganda flag"], u: "1f1fa-1f1ec" }, - { n: ["flag-um", "u.s. outlying islands flag"], u: "1f1fa-1f1f2" }, - { n: ["flag-un", "united nations flag"], u: "1f1fa-1f1f3" }, - { n: ["us", "flag-us", "united states flag"], u: "1f1fa-1f1f8" }, - { n: ["flag-uy", "uruguay flag"], u: "1f1fa-1f1fe" }, - { n: ["flag-uz", "uzbekistan flag"], u: "1f1fa-1f1ff" }, - { n: ["flag-va", "vatican city flag"], u: "1f1fb-1f1e6" }, - { n: ["flag-vc", "st. vincent & grenadines flag"], u: "1f1fb-1f1e8" }, - { n: ["flag-ve", "venezuela flag"], u: "1f1fb-1f1ea" }, - { n: ["flag-vg", "british virgin islands flag"], u: "1f1fb-1f1ec" }, - { n: ["flag-vi", "u.s. virgin islands flag"], u: "1f1fb-1f1ee" }, - { n: ["flag-vn", "vietnam flag"], u: "1f1fb-1f1f3" }, - { n: ["flag-vu", "vanuatu flag"], u: "1f1fb-1f1fa" }, - { n: ["flag-wf", "wallis & futuna flag"], u: "1f1fc-1f1eb" }, - { n: ["flag-ws", "samoa flag"], u: "1f1fc-1f1f8" }, - { n: ["flag-xk", "kosovo flag"], u: "1f1fd-1f1f0" }, - { n: ["flag-ye", "yemen flag"], u: "1f1fe-1f1ea" }, - { n: ["flag-yt", "mayotte flag"], u: "1f1fe-1f1f9" }, - { n: ["flag-za", "south africa flag"], u: "1f1ff-1f1e6" }, - { n: ["flag-zm", "zambia flag"], u: "1f1ff-1f1f2" }, - { n: ["flag-zw", "zimbabwe flag"], u: "1f1ff-1f1fc" }, - { - n: ["england flag", "flag-england"], - u: "1f3f4-e0067-e0062-e0065-e006e-e0067-e007f" + onDragStart: ({ active }) => { + setActiveId(active.id); + }, + onDragOver: ({ active, over }) => { + const overId2 = over == null ? void 0 : over.id; + if (overId2) + setOverId(overId2); + }, + onDragEnd: ({ active, over }) => { + if (active.id in items && (over == null ? void 0 : over.id)) { + return; + } + const activeContainer = findContainer(active.id); + if (!activeContainer) { + resetState(); + return; + } + const overId2 = over == null ? void 0 : over.id; + if (!overId2) { + resetState(); + return; + } + if (overId2 === PLACEHOLDER_ID) { + return; + } + const overContainer = findContainer(overId2); + if (overContainer) { + const activeIndex = items[Object.keys(items)[parseInt(activeContainer) * -1]].indexOf(active.id); + const overIndex = items[Object.keys(items)[parseInt(overContainer) * -1]].indexOf(overId2); + if (activeContainer != overContainer) { + saveValue( + groupBy2.table, + Object.keys(items)[parseInt(overContainer) * -1], + groupBy2.table == "" ? parseInt(activeId) : parseInt( + filteredData.find((f4) => f4._index == activeId)["_index" + groupBy2.table] + ), + groupBy2.name + ); + } + } + resetState(); + }, + cancelDrop, + onDragCancel, + modifiers + }, /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames3.default)( + viewType == "card" ? "mk-cards-container" : "mk-list-container", + viewType == "card" && containers.length == 1 && "mk-cards-grid" + ), + onKeyDown + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-list-view" + }, /* @__PURE__ */ bn.createElement(SortableContext, { + items: [...containers, PLACEHOLDER_ID], + strategy: vertical ? verticalListSortingStrategy : horizontalListSortingStrategy + }, containers.map((containerId) => /* @__PURE__ */ bn.createElement(DroppableContainer, { + key: containerId, + id: containerId, + plugin, + label: minimal ? void 0 : `${Object.keys(items)[parseInt(containerId) * -1]}`, + field: groupBy2, + columns, + items: items[Object.keys(items)[parseInt(containerId) * -1]], + scrollable, + style: containerStyle, + unstyled: minimal + }, /* @__PURE__ */ bn.createElement(SortableContext, { + items: items[Object.keys(items)[parseInt(containerId) * -1]], + strategy + }, items[Object.keys(items)[parseInt(containerId) * -1]].map( + (value, index) => { + return /* @__PURE__ */ bn.createElement(SortableItem, { + disabled: isSortingContainer, + key: value, + id: value, + plugin, + value: filteredData.find((f4) => f4._index == value), + cols: displayCols, + index, + handle, + style: getItemStyles, + wrapperStyle, + renderItem, + onSelect: selectItem, + selected: selectedRows == null ? void 0 : selectedRows.some((f4) => f4 == value), + containerId, + getIndex + }); + } + ))))))), j3( + /* @__PURE__ */ bn.createElement(DragOverlay, { + adjustScale: adjustScale2 + }, activeId ? containers.includes(activeId) ? renderContainerDragOverlay(activeId) : renderSortableItemDragOverlay(activeId) : null), + document.body + )); + function renderSortableItemDragOverlay(id2) { + return /* @__PURE__ */ bn.createElement("div", { + className: viewType == "card" ? "mk-cards-container" : "mk-list-container" + }, /* @__PURE__ */ bn.createElement(KanbanCard, { + plugin, + value: filteredData.find((f4) => f4._index == id2), + handle, + id: id2, + cols: displayCols, + style: getItemStyles({ + containerId: findContainer(id2), + overIndex: -1, + index: getIndex(id2), + value: id2, + isSorting: true, + isDragging: true, + isDragOverlay: true + }), + color: getColor(id2), + wrapperStyle: wrapperStyle({ index: 0 }), + renderItem, + dragOverlay: true + })); + } + function renderContainerDragOverlay(containerId) { + return /* @__PURE__ */ bn.createElement(KanbanColumn, { + id: containerId, + plugin, + label: `Column ${containerId}`, + field: groupBy2, + columns, + style: { + height: "100%" + }, + shadow: true, + unstyled: false + }, items[Object.keys(items)[parseInt(containerId) * -1]].map( + (item, index) => /* @__PURE__ */ bn.createElement(KanbanCard, { + key: item, + id: item, + plugin, + value: filteredData.find((f4) => f4._index == item), + cols: displayCols, + handle, + style: getItemStyles({ + containerId, + overIndex: -1, + index: getIndex(item), + value: item, + isDragging: false, + isSorting: false, + isDragOverlay: false + }), + color: getColor(item), + selected: selectedRows.some((f4) => f4 == item), + onSelect: selectItem, + wrapperStyle: wrapperStyle({ index }), + renderItem + }) + )); + } + function getNextContainerId() { + const containeIds = Object.keys(items); + const lastContaineId = containeIds[containeIds.length - 1]; + return String.fromCharCode(lastContaineId.charCodeAt(0) + 1); + } +}; +function getColor(id2) { + switch (id2[0]) { + case "A": + return "#7193f1"; + case "B": + return "#ffda6c"; + case "C": + return "#00bcd4"; + case "D": + return "#ef769f"; + } + return void 0; +} +function SortableItem({ + disabled, + id: id2, + plugin, + index, + handle, + renderItem, + style, + containerId, + onSelect, + selected, + getIndex, + cols, + value, + wrapperStyle +}) { + const { + setNodeRef, + listeners, + isDragging, + isSorting, + over, + overIndex, + transform, + transition + } = useSortable({ + id: id2 + }); + const mounted = useMountStatus(); + const mountedWhileDragging = isDragging && !mounted; + return /* @__PURE__ */ bn.createElement(KanbanCard, { + ref: disabled ? void 0 : setNodeRef, + value, + plugin, + id: id2, + cols, + dragging: isDragging, + sorting: isSorting, + handle, + index, + wrapperStyle: wrapperStyle({ index }), + style: style({ + index, + value: id2, + isDragging, + isSorting, + overIndex: over ? getIndex(over.id) : overIndex, + containerId + }), + onSelect, + selected, + color: getColor(id2), + transition, + transform, + fadeIn: mountedWhileDragging, + listeners, + renderItem + }); +} +function useMountStatus() { + const [isMounted, setIsMounted] = p2(false); + h2(() => { + const timeout = setTimeout(() => setIsMounted(true), 500); + return () => clearTimeout(timeout); + }, []); + return isMounted; +} + +// src/components/ContextView/FlowListView/FlowListView.tsx +var import_obsidian14 = require("obsidian"); +var FlowListView = (props2) => { + const { + filteredData: data + } = q2(MDBContext); + const flowItems = F(() => { + return data.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4 instanceof import_obsidian14.TFile && f4.extension == "md"); + }, [data]); + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-flow-container" + }, flowItems.map((f4) => /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement("span", null, fileNameToString(f4.name)), /* @__PURE__ */ bn.createElement(FlowView, { + plugin: props2.plugin, + path: f4.path, + load: true + })))); +}; + +// src/components/ContextView/ContextListView.tsx +var ContextListView = (props2) => { + const { schema } = q2(MDBContext); + const [error, resetError] = P2(); + if (error) + console.log(error); + return schema ? schema.type == "flow" ? /* @__PURE__ */ bn.createElement(FlowListView, { + plugin: props2.plugin + }) : schema.type == "table" ? /* @__PURE__ */ bn.createElement(TableView, { + plugin: props2.plugin + }) : /* @__PURE__ */ bn.createElement(CardsView, { + plugin: props2.plugin + }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); +}; + +// src/components/ContextView/InlineContextViewComponent.tsx +var InlineContextViewComponent = (props2) => { + const type = viewTypeByString(props2.path); + const path = type == "tag" ? tagContextFromTag(props2.plugin, props2.path) : folderContextFromFolder(props2.plugin, props2.path); + const folder = type == "tag" ? null : props2.path; + const tag = type == "tag" ? props2.path : null; + return /* @__PURE__ */ bn.createElement(MDBProvider, { + plugin: props2.plugin, + dbPath: path, + folder, + tag, + schema: props2.schema + }, path && /* @__PURE__ */ bn.createElement(ContextListView, { + plugin: props2.plugin + })); +}; + +// src/components/ContextView/InlineContextView.tsx +var INLINE_CONTEXT_VIEW_TYPE = "make-inline-context"; +var InlineContextView = class extends import_obsidian15.ItemView { + constructor(leaf, plugin) { + super(leaf); + this.navigation = true; + this.plugin = plugin; + } + getViewType() { + return INLINE_CONTEXT_VIEW_TYPE; + } + getDisplayText() { + return this.file; + } + async onClose() { + this.destroy(); + } + destroy() { + if (this.root) + this.root.unmount(); + } + async onOpen() { + this.destroy(); + } + async setState(state, result) { + var _a2, _b2; + this.file = state.file; + this.ref = state.ref ? state.ref.substring(1, state.ref.length) : null; + this.constructInlineContext(this.file); + await super.setState(state, result); + const type = viewTypeByString(this.file); + const title = type == "tag" ? this.file : (_b2 = (_a2 = getAbstractFileAtPath(app, this.file)) == null ? void 0 : _a2.name) != null ? _b2 : this.file; + this.leaf.tabHeaderInnerTitleEl.innerText = title; + this.leaf.view.titleEl = title; + const headerEl = this.leaf.view.headerEl; + if (headerEl) { + headerEl.querySelector(".view-header-title").innerText = title; + } + return; + } + getState() { + let state = super.getState(); + state.file = this.file; + return state; + } + constructInlineContext(file) { + this.destroy(); + this.root = createRoot(this.contentEl); + this.root.render( + /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement(InlineContextViewComponent, { + plugin: this.plugin, + path: this.file, + schema: this.ref + })) + ); + } +}; + +// src/components/FlowEditor/FlowEditor.tsx +var import_obsidian16 = require("obsidian"); +var popovers = /* @__PURE__ */ new WeakMap(); +var mouseCoords = { x: 0, y: 0 }; +function nosuper(base) { + const derived = function() { + return Object.setPrototypeOf(new import_obsidian16.Component(), new.target.prototype); + }; + derived.prototype = base.prototype; + return Object.setPrototypeOf(derived, base); +} +var _a, _b, _c, _d, _e; +var FlowEditor = class extends nosuper(import_obsidian16.HoverPopover) { + constructor(parent, targetEl, plugin, waitTime, onShowCallback) { + super(); + this.targetEl = targetEl; + this.plugin = plugin; + this.onShowCallback = onShowCallback; + this.abortController = this.addChild(new import_obsidian16.Component()); + this.detaching = false; + this.opening = false; + this.rootSplit = new import_obsidian16.WorkspaceSplit( + window.app.workspace, + "vertical" + ); + this.targetRect = (_a = this.targetEl) == null ? void 0 : _a.getBoundingClientRect(); + this.oldPopover = (_b = this.parent) == null ? void 0 : _b.flowEditor; + this.document = (_e = (_d = (_c = this.targetEl) == null ? void 0 : _c.ownerDocument) != null ? _d : window.activeDocument) != null ? _e : window.document; + this.id = genId(); + this.hoverEl = this.document.defaultView.createDiv({ + cls: "mk-floweditor mk-hover-popover", + attr: { id: "he" + this.id } + }); + if (waitTime === void 0) { + waitTime = 300; + } + this.onTarget = true; + this.parent = parent; + this.waitTime = waitTime; + this.state = import_obsidian16.PopoverState.Showing; + const { hoverEl } = this; + this.abortController.load(); + this.timer = window.setTimeout(this.show.bind(this), waitTime); + this.setActive = this._setActive.bind(this); + if (hoverEl) { + hoverEl.addEventListener("mousedown", this.setActive); + } + popovers.set(this.hoverEl, this); + this.hoverEl.addClass("hover-editor"); + this.containerEl = this.hoverEl.createDiv("popover-content"); + this.setTitleBar(); + this.hoverEl.style.height = "auto"; + this.hoverEl.style.width = "100%"; + this.hoverEl.addEventListener("keydown", (e4) => e4.stopPropagation()); + } + static activeWindows() { + const windows = [window]; + const { floatingSplit } = app.workspace; + if (floatingSplit) { + for (const split of floatingSplit.children) { + if (split.win) + windows.push(split.win); + } + } + return windows; + } + static containerForDocument(doc) { + if (doc !== document && app.workspace.floatingSplit) + for (const container of app.workspace.floatingSplit.children) { + if (container.doc === doc) + return container; + } + return app.workspace.rootSplit; + } + static activePopovers() { + return this.activeWindows().flatMap(this.popoversForWindow); + } + static popoversForWindow(win) { + var _a2, _b2; + return Array.prototype.slice.call( + (_b2 = (_a2 = win == null ? void 0 : win.document) == null ? void 0 : _a2.body.querySelectorAll(".mk-hover-popover")) != null ? _b2 : [] + ).map((el) => popovers.get(el)).filter((he) => he); + } + static forLeaf(leaf) { + const el = leaf && document.body.matchParent.call(leaf.containerEl, ".mk-hover-popover"); + return el ? popovers.get(el) : void 0; + } + _setActive() { + this.plugin.app.workspace.setActiveLeaf(this.leaves()[0], { focus: true }); + } + getDefaultMode() { + var _a2, _b2; + return ((_b2 = (_a2 = this.parent) == null ? void 0 : _a2.view) == null ? void 0 : _b2.getMode) ? this.parent.view.getMode() : "preview"; + } + updateLeaves() { + if (this.onTarget && this.targetEl && !this.document.contains(this.targetEl)) { + this.onTarget = false; + this.transition(); + } + let leafCount = 0; + this.plugin.app.workspace.iterateLeaves((leaf) => { + leafCount++; + }, this.rootSplit); + if (leafCount === 0) { + this.hide(); + } else if (leafCount > 1) { + } + this.hoverEl.setAttribute("data-leaf-count", leafCount.toString()); + } + setTitleBar() { + this.titleEl = this.document.defaultView.createDiv("mk-flow-titlebar"); + this.containerEl.prepend(this.titleEl); + } + attachLeaf() { + this.rootSplit.getRoot = () => this.plugin.app.workspace[this.document === document ? "rootSplit" : "floatingSplit"]; + this.rootSplit.getContainer = () => FlowEditor.containerForDocument(this.document); + this.titleEl.insertAdjacentElement("afterend", this.rootSplit.containerEl); + let leaf = this.plugin.app.workspace.createLeafInParent( + this.rootSplit, + 0 + ); + this.updateLeaves(); + return leaf; + } + onload() { + super.onload(); + this.registerEvent( + this.plugin.app.workspace.on("layout-change", this.updateLeaves, this) + ); + this.registerEvent( + app.workspace.on("layout-change", () => { + this.rootSplit.children.forEach((item, index) => { + if (item instanceof import_obsidian16.WorkspaceTabs) { + this.rootSplit.replaceChild(index, item.children[0]); + } + }); + }) + ); + } + leaves() { + const leaves = []; + this.plugin.app.workspace.iterateLeaves((leaf) => { + leaves.push(leaf); + }, this.rootSplit); + return leaves; + } + onShow() { + var _a2, _b2; + const closeDelay = 600; + setTimeout(() => this.waitTime = closeDelay, closeDelay); + (_a2 = this.oldPopover) == null ? void 0 : _a2.hide(); + this.oldPopover = null; + this.hoverEl.toggleClass("is-new", true); + this.document.body.addEventListener( + "click", + () => { + this.hoverEl.toggleClass("is-new", false); + }, + { once: true, capture: true } + ); + if (this.parent) { + this.parent.flowEditor = this; + } + const viewHeaderEl = this.hoverEl.querySelector(".view-header"); + viewHeaderEl == null ? void 0 : viewHeaderEl.remove(); + const sizer = this.hoverEl.querySelector(".workspace-leaf"); + this.hoverEl.appendChild(sizer); + const inlineTitle = this.hoverEl.querySelector(".inline-title"); + inlineTitle == null ? void 0 : inlineTitle.remove(); + (_b2 = this.onShowCallback) == null ? void 0 : _b2.call(this); + this.onShowCallback = void 0; + } + transition() { + if (this.shouldShow()) { + if (this.state === import_obsidian16.PopoverState.Hiding) { + this.state = import_obsidian16.PopoverState.Shown; + clearTimeout(this.timer); + } + } else { + if (this.state === import_obsidian16.PopoverState.Showing) { + this.hide(); + } else { + if (this.state === import_obsidian16.PopoverState.Shown) { + this.state = import_obsidian16.PopoverState.Hiding; + this.timer = window.setTimeout(() => { + if (this.shouldShow()) { + this.transition(); + } else { + this.hide(); + } + }, this.waitTime); + } + } + } + } + shouldShow() { + return this.shouldShowSelf() || this.shouldShowChild(); + } + shouldShowChild() { + return FlowEditor.activePopovers().some((popover) => { + if (popover !== this && popover.targetEl && this.hoverEl.contains(popover.targetEl)) { + return popover.shouldShow(); + } + return false; + }); + } + shouldShowSelf() { + return !this.detaching && !!(this.onTarget || this.state == import_obsidian16.PopoverState.Shown || this.document.querySelector( + `body>.modal-container, body > #he${this.id} ~ .menu, body > #he${this.id} ~ .suggestion-container` + )); + } + show() { + if (!this.targetEl || this.document.body.contains(this.targetEl)) { + this.state = import_obsidian16.PopoverState.Shown; + this.timer = 0; + this.shownPos = mouseCoords; + this.targetEl.replaceChildren(this.hoverEl); + this.onShow(); + app.workspace.onLayoutChange(); + this.load(); + } else { + this.hide(); + } + } + onHide() { + var _a2; + this.oldPopover = null; + if (((_a2 = this.parent) == null ? void 0 : _a2.flowEditor) === this) { + this.parent.flowEditor = null; + } + } + hide() { + var _a2; + this.onTarget = false; + this.detaching = true; + if (this.timer) { + clearTimeout(this.timer); + this.timer = 0; + } + this.hoverEl.hide(); + if (this.opening) + return; + const leaves = this.leaves(); + if (leaves.length) { + leaves.forEach((leaf) => leaf.detach()); + } else { + this.parent = null; + (_a2 = this.abortController) == null ? void 0 : _a2.unload(); + this.abortController = void 0; + return this.nativeHide(); + } + } + nativeHide() { + var _a2; + const { hoverEl, targetEl } = this; + this.state = import_obsidian16.PopoverState.Hidden; + hoverEl.detach(); + if (targetEl) { + const parent = targetEl.matchParent(".mk-hover-popover"); + if (parent) + (_a2 = popovers.get(parent)) == null ? void 0 : _a2.transition(); + } + this.onHide(); + this.unload(); + } + resolveLink(linkText, sourcePath) { + const link = (0, import_obsidian16.parseLinktext)(linkText); + const tFile = link ? this.plugin.app.metadataCache.getFirstLinkpathDest( + link.path, + sourcePath != null ? sourcePath : "" + ) : null; + return tFile; + } + async openFile(file, openState, useLeaf) { + if (this.detaching) + return; + const leaf = useLeaf != null ? useLeaf : this.attachLeaf(); + this.opening = true; + try { + await leaf.openFile(file, openState); + } catch (e4) { + console.error(e4); + } finally { + this.opening = false; + if (this.detaching) + this.hide(); + } + this.plugin.app.workspace.setActiveLeaf(leaf); + return leaf; + } + buildState(parentMode, eState) { + return { + active: false, + state: {}, + eState + }; + } + buildEphemeralState(file, link) { + const cache = this.plugin.app.metadataCache.getFileCache(file); + const subpath = cache ? (0, import_obsidian16.resolveSubpath)(cache, (link == null ? void 0 : link.subpath) || "") : void 0; + const eState = { subpath: link == null ? void 0 : link.subpath }; + if (subpath) { + eState.line = subpath.start.line; + eState.startLoc = subpath.start; + eState.endLoc = subpath.end || void 0; + } + return eState; + } +}; + +// src/utils/flow/flowEditor.ts +var import_obsidian17 = require("obsidian"); +var parseOutReferences = (ostr) => { + const str = ostr.split("|")[0]; + const refIndex = str.lastIndexOf("#"); + return refIndex != -1 ? [str.substring(0, refIndex), str.substring(refIndex + 1)] : [str, void 0]; +}; +var getFileFromString = (url, source) => { + return app.metadataCache.getFirstLinkpathDest(url, source != null ? source : ""); +}; +var getLineRangeFromRef = (file, ref, plugin) => { + var _a2; + if (!ref) { + return [void 0, void 0]; + } + const cache = app.metadataCache.getFileCache(file); + const headings = cache.headings; + const blocks = cache.blocks; + const sections = cache.sections; + if (blocks && ref.charAt(0) == "^" && blocks[ref.substring(1)]) { + return [ + blocks[ref.substring(1)].position.start.line + 1, + blocks[ref.substring(1)].position.end.line + 1 + ]; + } + const heading = headings == null ? void 0 : headings.find((f4) => f4.heading.replace("#", " ") == ref); + if (heading) { + const index = headings.findIndex((f4) => f4.heading == heading.heading); + const level = (_a2 = headings[index]) == null ? void 0 : _a2.level; + const nextIndex2 = headings.findIndex( + (f4, i4) => i4 > index && f4.level <= level + ); + const start = plugin.settings.editorFlowStyle == "classic" ? heading.position.start.line + 1 : heading.position.start.line + 2; + if (index < headings.length - 1 && nextIndex2 != -1) { + return [start, headings[nextIndex2].position.end.line]; + } + return [start, sections[sections.length - 1].position.end.line + 1]; + } + return [void 0, void 0]; +}; +var loadFlowEditorByDOM2 = (make, el, view, id2) => { + setTimeout(async () => { + let counter = 0; + while (!el.parentElement && counter++ <= 50) + await sleep(50); + if (!el.parentElement) + return; + let dom = el; + while (!dom.hasClass("mk-floweditor") && !dom.hasClass("workspace") && dom.parentElement) { + dom = dom.parentElement; + } + if (!dom.hasClass("mk-floweditor") && !dom.hasClass("workspace") && !(dom.nodeName == "HTML")) { + return; + } + setTimeout(async () => { + var _a2; + let leafFound = false; + if (app.workspace.activeEditor) { + if (app.workspace.activeEditor.editMode.cm.dom == view.dom) { + leafFound = true; + loadFlowEditorsForLeafForID( + app.workspace.activeEditor.editMode.cm, + (_a2 = app.workspace.activeEditor.file) == null ? void 0 : _a2.path, + make, + id2 + ); + } + } + if (!leafFound) { + app.workspace.iterateLeaves((leaf) => { + var _a3, _b2; + const cm = (_a3 = leaf.view.editor) == null ? void 0 : _a3.cm; + if (cm && view.dom == cm.dom) { + leafFound = true; + loadFlowEditorsForLeafForID( + cm, + (_b2 = leaf.view.file) == null ? void 0 : _b2.path, + make, + id2 + ); + } + }, app.workspace["rootSplit"]); + } + }); + }); +}; +var loadFlowEditorsForLeafForID = (cm, source, make, id2) => { + const stateField = cm.state.field(flowEditorInfo, false); + if (!stateField) + return; + const flowInfo = stateField.find((f4) => f4.id == id2); + if (flowInfo && flowInfo.expandedState == 2) { + loadFlowEditor(cm, flowInfo, source, make); + } +}; +var loadFlowEditor = (cm, flowEditorInfo2, source, make) => { + const dom = cm.dom.querySelector( + "#mk-flow-" + flowEditorInfo2.id + ); + const [link, ref] = parseOutReferences(flowEditorInfo2.link); + if (dom) { + if (link.charAt(0) == "#") { + if (!dom.hasAttribute("ready")) { + dom.setAttribute("ready", ""); + createFlowEditorInElement( + flowEditorInfo2.id, + dom, + ref ? "block" : "flow", + link + ); + } + return; + } + if (link.charAt(link.length - 1) == "/") { + const folder = getAbstractFileAtPath( + app, + link.substring(0, link.length - 1) + ); + if (!dom.hasAttribute("ready") && folder) { + dom.setAttribute("ready", ""); + createFlowEditorInElement( + flowEditorInfo2.id, + dom, + "context", + folder.path, + ref + ); + return; + } + } + const file = getFileFromString(link, source); + const aFile = getAbstractFileAtPath(app, link); + if (file) { + const selectiveRange = getLineRangeFromRef(file, ref, make); + if (!dom.hasAttribute("ready")) { + dom.setAttribute("ready", ""); + createFlowEditorInElement( + flowEditorInfo2.id, + dom, + ref ? "block" : "flow", + file.path, + ref, + selectiveRange[0], + selectiveRange[1] + ); + } + } else { + if (aFile instanceof import_obsidian17.TFolder) { + if (!dom.hasAttribute("ready")) { + dom.setAttribute("ready", ""); + createFlowEditorInElement( + flowEditorInfo2.id, + dom, + ref ? "block" : "flow", + link + ); + } + return; + } + dom.empty(); + const createDiv = dom.createDiv("file-embed"); + createDiv.toggleClass("mod-empty", true); + const createFile = async (e4) => { + e4.stopPropagation(); + e4.stopImmediatePropagation(); + await app.fileManager.createNewMarkdownFile(app.vault.getRoot(), link); + loadFlowEditor(cm, flowEditorInfo2, source, make); + }; + createDiv.setText(`"${link}" ` + i18n_default.labels.noFile); + createDiv.addEventListener("click", createFile); + } + } +}; +var focusPortal = async (plugin, evt) => { + const { id: id2, parent, top } = evt.detail; + if (parent) { + app.workspace.iterateLeaves((leaf) => { + var _a2; + const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; + if (cm) { + const stateField = cm.state.field(flowEditorInfo, false); + if (stateField) { + const foundInfo = stateField.find((f4) => f4.id == id2); + if (foundInfo) { + cm.focus(); + if (top) { + cm.dispatch({ + selection: import_state4.EditorSelection.single(foundInfo.from - 4), + annotations: arrowKeyAnnotation.of(1) + }); + } else { + if (foundInfo.to + 2 == cm.state.doc.length) { + cm.dispatch({ + changes: [ + { + from: foundInfo.to + 2, + to: foundInfo.to + 2, + insert: cm.state.lineBreak + } + ], + selection: import_state4.EditorSelection.single(foundInfo.to + 3), + annotations: arrowKeyAnnotation.of(2) + }); + } else { + cm.dispatch({ + selection: import_state4.EditorSelection.single(foundInfo.to + 3), + annotations: arrowKeyAnnotation.of(2) + }); + } + } + } + } + } + }, app.workspace["rootSplit"]); + } else { + app.workspace.iterateLeaves((leaf) => { + var _a2; + const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; + if (cm) { + const stateField = cm.state.field(flowIDStateField, false); + if (stateField && stateField == id2) { + cm.focus(); + const lineRange = cm.state.field(selectiveLinesFacet, false); + const posRange = lineRange && lineRange[0] != void 0 ? lineRangeToPosRange(cm.state, lineRange) : { from: 0, to: cm.state.doc.length }; + if (top) { + cm.dispatch({ + selection: import_state4.EditorSelection.single(posRange.from) + }); + } else { + cm.dispatch({ + selection: import_state4.EditorSelection.single(posRange.to) + }); + } + } + } + }, app.workspace["rootSplit"]); + } +}; +var openFileFromPortal = (plugin, evt) => { + const { file: fullLink, source } = evt.detail; + const [link, ref] = parseOutReferences(fullLink); + const file = getFileFromString(link, source); + openAFile(file, plugin, false); +}; +var spawnLeafFromFile = async (plugin, file, el, type, ref) => { + if (type == "context") { + const newLeaf2 = spawnPortal(plugin, el); + newLeaf2.setViewState({ + type: INLINE_CONTEXT_VIEW_TYPE, + state: { file, ref } + }); + return newLeaf2; + } + let portalFile = plugin.app.vault.getAbstractFileByPath(file); + const newLeaf = spawnPortal(plugin, el, portalFile.name); + await newLeaf.openFile(portalFile, { active: false }); + if (newLeaf.view.setMode) + newLeaf.view.setMode(newLeaf.view.editMode); + return newLeaf; +}; +var spawnNewPortal = async (plugin, evt) => { + var _a2, _b2, _c2; + const { file, el, ref, from, to, type } = evt.detail; + const newLeaf = await spawnLeafFromFile(plugin, file, el, type, ref); + if (!((_a2 = newLeaf == null ? void 0 : newLeaf.view) == null ? void 0 : _a2.editor)) { + return; + } + const view = (_b2 = newLeaf.view.editor) == null ? void 0 : _b2.cm; + view.dispatch({ + annotations: [ + portalTypeAnnotation.of(evt.detail.type), + flowIDAnnotation.of(evt.detail.id) + ] + }); + view.dom.addEventListener("keydown", (e4) => { + if (e4.key == "ArrowUp") { + if (e4.metaKey == true) { + view.dispatch({ + annotations: arrowKeyAnnotation.of(3) + }); + } else { + view.dispatch({ + annotations: arrowKeyAnnotation.of(1) + }); + } + } + if (e4.key == "ArrowDown") { + if (e4.metaKey == true) { + view.dispatch({ + annotations: arrowKeyAnnotation.of(4) + }); + } else { + view.dispatch({ + annotations: arrowKeyAnnotation.of(2) + }); + } + } + }); + if (from && to) { + (_c2 = newLeaf.view.editor) == null ? void 0 : _c2.cm.dispatch({ + annotations: [editableRange.of([from, to])] + }); + } +}; +var spawnPortal = (plugin, initiatingEl, fileName, onShowCallback) => { + const parent = plugin.app.workspace.activeLeaf; + if (!initiatingEl) + initiatingEl = parent.containerEl; + const hoverPopover = new FlowEditor( + parent, + initiatingEl, + plugin, + void 0, + onShowCallback + ); + if (fileName) + hoverPopover.titleEl.textContent = fileName.substring( + 0, + fileName.lastIndexOf(".") + ); + return hoverPopover.attachLeaf(); +}; + +// src/components/ContextView/FilterBar/FilterBar.tsx +var import_lodash4 = __toESM(require_lodash()); +var import_obsidian20 = require("obsidian"); +var import_obsidian_dataview2 = __toESM(require_lib()); + +// src/components/ContextView/FilterBar/SearchBar.tsx +var SearchBar = (props2) => { + const clearSearch = () => { + props2.setSearchString(""); + }; + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-view-search" + }, /* @__PURE__ */ bn.createElement("button", { + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-search"] } + }), /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("input", { + onChange: (e4) => props2.setSearchString(e4.target.value), + placeholder: "Type to search...", + className: "mk-search-bar" + }), /* @__PURE__ */ bn.createElement("button", { + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-clear"] }, + onClick: () => clearSearch() + }))); +}; + +// src/components/ui/modals/syncMetadata.tsx +var import_obsidian18 = require("obsidian"); +var SyncMetadataModal = class extends import_obsidian18.Modal { + constructor(plugin, files, syncColumns) { + super(plugin.app); + this.plugin = plugin; + this.files = files; + let closeButton = this.modalEl.querySelector( + ".modal-close-button" + ); + closeButton.style.display = "none"; + this.syncColumns = syncColumns; + } + onOpen() { + let { contentEl } = this; + let myModal = this; + let headerText; + const headerEl = contentEl.createEl("div", { text: headerText }); + headerEl.addClass("modal-title"); + headerEl.innerHTML = "Hidden Files"; + const root = createRoot(contentEl); + root.render( + /* @__PURE__ */ bn.createElement(SyncMetadataComponent, { + plugin: this.plugin, + files: this.files, + syncColumns: this.syncColumns, + close: () => this.close() + }) + ); + } + onClose() { + let { contentEl } = this; + contentEl.empty(); + } +}; +var SyncMetadataComponent = (props2) => { + const { plugin } = props2; + const cols = props2.files.reduce((p3, c4) => { + const fm = frontMatterForFile(c4); + const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); + return uniq([...p3, ...fmKeys]); + }, []); + const [syncColumns, setSyncColumns] = p2(cols); + const [table, setTable] = p2(""); + const toggleColumn = (column) => { + if (syncColumns.find((f4) => f4 == column)) { + setSyncColumns((s5) => s5.filter((f4) => f4 != column)); + } else { + setSyncColumns((s5) => [...s5, column]); + } + }; + const saveContexts = (_4, value) => { + setTable(tagFromString(value[0])); + }; + const showContextMenu = (e4) => { + const offset = e4.target.getBoundingClientRect(); + const f4 = loadTags(props2.plugin); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: true, + value: [], + options: [ + { name: "Folder", value: "" }, + ...f4.map((m5) => ({ name: m5, value: m5 })) + ], + saveOptions: saveContexts, + placeholder: "Select Tag", + searchable: true, + showAll: true + } + ); + }; + const sync = () => { + props2.syncColumns(syncColumns, table); + props2.close(); + }; + return /* @__PURE__ */ bn.createElement("div", { + className: "modal-content" + }, /* @__PURE__ */ bn.createElement("div", { + className: "setting-item setting-item-heading" + }, "Sync Fields"), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item" + }, "Contexts defines and syncs the same fields across your notes depending on their folder or tag."), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item" + }, /* @__PURE__ */ bn.createElement("div", { + className: "setting-item-info" + }, /* @__PURE__ */ bn.createElement("div", { + className: "setting-item-name" + }, "Select Context"), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item-description" + }, "Select which folder or tag context you want to sync the fields.")), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item-control" + }, /* @__PURE__ */ bn.createElement("button", { + onClick: (e4) => showContextMenu(e4) + }, table == "" ? "Current Folder" : table))), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item" + }, /* @__PURE__ */ bn.createElement("div", { + className: "setting-item-info" + }, /* @__PURE__ */ bn.createElement("div", { + className: "setting-item-name" + }, "Select Fields"), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item-description" + }, "Select which fields from your notes to start syncing with the context."), cols.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { + className: "mobile-option-setting-item" + }, /* @__PURE__ */ bn.createElement("input", { + type: "checkbox", + checked: syncColumns.some((g4) => g4 == f4), + onChange: () => toggleColumn(f4) + }), /* @__PURE__ */ bn.createElement("span", { + className: "mobile-option-setting-item-name" + }, f4))))), /* @__PURE__ */ bn.createElement("button", { + style: { marginRight: 8 }, + onClick: () => sync() + }, "Sync"), /* @__PURE__ */ bn.createElement("button", { + onClick: () => props2.close() + }, "Cancel")); +}; + +// src/components/ContextView/FilterBar/TagSelector.tsx +var import_lodash3 = __toESM(require_lodash()); +var import_obsidian19 = require("obsidian"); +var TagSelector = (props2) => { + const { + data, + tagContexts, + dbFileExists, + setContextTable, + saveDB: saveDB2, + tableData, + contextTable, + dbSchema, + dbPath, + saveContextDB, + saveSchema, + loadContextFields + } = q2(MDBContext); + const removeContext = (value) => { + const removeTags = value.map((f4) => tagFromString(f4)); + const tags = tagContexts.filter((f4) => !removeTags.some((t4) => t4 == f4)); + removeTags.forEach((t4) => { + removeSourceFromTag(props2.plugin, t4, dbPath); + }); + saveSchema({ + ...dbSchema, + def: tags.join("&") + }); + }; + const saveContexts = async (_4, value) => { + const tags = (0, import_lodash3.uniq)([...tagContexts, ...value.map((f4) => tagFromString(f4))]); + tags.forEach((tag) => { + initiateContextIfNotExists(props2.plugin, tag).then((f4) => { + if (f4) { + return consolidateRowsToTag( + props2.plugin, + tagContextFromTag(props2.plugin, tag), + dbSchema.id, + dbPath, + tableData.rows + ); + } + }).then((f4) => loadContextFields(tag)); + }); + saveSchema({ + ...dbSchema, + def: tags.join("&") + }); + }; + const showContextMenu = (e4) => { + const offset = e4.target.getBoundingClientRect(); + const f4 = loadTags(props2.plugin); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: true, + value: [], + options: f4.map((m5) => ({ name: m5, value: m5 })), + saveOptions: saveContexts, + placeholder: "Select Context", + searchable: true, + showAll: true + } + ); + }; + const showTagMenu = (e4, tag) => { + const menu = new import_obsidian19.Menu(); + menu.addItem((menuItem) => { + menuItem.setIcon("file-up"); + menuItem.setTitle("Goto Tag"); + menuItem.onClick(() => { + openTag(tag, props2.plugin, e4.metaKey); + }); + }); + menu.addItem((menuItem) => { + menuItem.setIcon("file-up"); + menuItem.setTitle("Remove Tag"); + menuItem.onClick(() => { + removeContext([tag]); + }); + }); + const offset = e4.target.getBoundingClientRect(); + menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); + }; + const saveMetadata = (keys, table) => { + const files = data.map((f4) => f4.File); + const importYAML = (files2, fmKeys) => { + return files2.map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4).reduce( + (p3, c4) => { + const fm = frontMatterForFile(c4); + if (!fm) { + return p3; + } + return { + uniques: [], + cols: (0, import_lodash3.uniq)([...p3.cols, ...fmKeys]), + rows: [ + ...p3.rows, + { + File: c4.path, + ...fmKeys.reduce( + (p4, c5) => ({ + ...p4, + [c5]: parseFrontMatter(c5, fm[c5], false) + }), + {} + ) + } + ] + }; + }, + { uniques: [], cols: [], rows: [] } + ); + }; + const yamlTableData = importYAML(files, keys); + const yamlTypes = guestimateTypes(files, false); + if (table == "") { + const newTable = mergeTableData(tableData, yamlTableData, yamlTypes); + saveDB2(newTable); + } else { + if (!dbFileExists) { + saveDB2(tableData).then( + () => saveContext(yamlTableData, yamlTypes, table) + ); + } else { + saveContext(yamlTableData, yamlTypes, table); + } + } + }; + const saveContext = (yamlTableData, yamlTypes, table) => { + if (contextTable[table]) { + const newTable = mergeTableData( + contextTable[table], + yamlTableData, + yamlTypes + ); + saveContextDB(newTable, table); + saveSchema({ + ...dbSchema, + def: (0, import_lodash3.uniq)([...tagContexts, table]).join("&") + }); + } else { + consolidateRowsToTag( + props2.plugin, + tagContextFromTag(props2.plugin, table), + dbSchema.id, + dbPath, + tableData.rows + ).then((f4) => { + if (f4) { + const newTable = mergeTableData(f4, yamlTableData, yamlTypes); + return saveContextDB(newTable, table); + } + }).then(() => { + saveSchema({ + ...dbSchema, + def: (0, import_lodash3.uniq)([...tagContexts, table]).join("&") + }); + }); + } + }; + const syncMetadata = () => { + let vaultChangeModal = new SyncMetadataModal( + props2.plugin, + data.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4), + saveMetadata + ); + vaultChangeModal.open(); + }; + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-tag-selector" + }, tagContexts.map((f4) => /* @__PURE__ */ bn.createElement("button", { + onContextMenu: (e4) => showTagMenu(e4, f4), + onClick: (e4) => openTag(f4, props2.plugin, e4.metaKey) + }, f4)), /* @__PURE__ */ bn.createElement("button", { + "aria-label": "Add Tag", + onClick: (e4) => showContextMenu(e4) + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-icon-xsmall", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-plus"] } + }), !dbFileExists && "Tag"), /* @__PURE__ */ bn.createElement("button", { + "aria-label": "Sync Fields", + onClick: (e4) => syncMetadata() + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-icon-xsmall", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-sync"] } + }), !dbFileExists && "Sync Fields")); +}; + +// src/components/ContextView/FilterBar/FilterBar.tsx +var FilterBar = (props2) => { + const { folderNoteOpen, viewFolderNote } = props2; + const ctxRef = _2(null); + const { + tables, + data, + setDBSchema, + loadContextFields, + cols, + isFolderContext, + deleteSchema, + saveSchema, + saveDB: saveDB2, + saveContextDB, + setSchema, + setSearchString, + predicate, + tagContexts, + savePredicate, + schema, + dbSchema, + dbPath, + contextTable, + tableData + } = q2(MDBContext); + const filteredCols = cols.filter((f4) => f4.hidden != "true"); + const dataViewAPI = (0, import_obsidian_dataview2.getAPI)(); + const saveViewType = (type) => { + saveSchema({ + ...schema, + type + }); + }; + const selectView = (_dbschema, value) => { + viewFolderNote && folderNoteOpen && viewFolderNote(false); + setDBSchema(_dbschema); + value && setSchema(tables.find((f4) => f4.id == value)); + }; + const openView = (e4, _dbschema) => { + const views = tables.filter((f4) => f4.type != "db" && f4.def == _dbschema.id); + if (views.length == 0) { + selectView(_dbschema); + return; + } + selectView(_dbschema, views[0].id); + return; + }; + const showViewMenu = (e4, _dbschema) => { + const views = tables.filter((f4) => f4.type != "db" && f4.def == _dbschema.id); + const offset = e4.target.getBoundingClientRect(); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: tagContexts, + options: views.map((m5) => ({ name: m5.name, value: m5.id })), + saveOptions: (_4, value) => selectView(_dbschema, value[0]), + placeholder: "Select View", + searchable: false, + showAll: true + } + ); + }; + const clearFilters = () => { + savePredicate({ + ...predicate, + filters: [], + sort: [] + }); + }; + const clearHiddenCols = () => { + savePredicate({ + ...predicate, + colsHidden: [] + }); + }; + const removeFilter = (filter) => { + const newFilters = [ + ...predicate.filters.filter((f4) => f4.field != filter.field) + ]; + savePredicate({ + ...predicate, + filters: newFilters + }); + }; + const showFilterMenu = (e4) => { + const menu = new import_obsidian20.Menu(); + menu.addItem((item) => { + item.setTitle("Table View"); + item.setIcon("table-2"); + item.onClick(() => { + saveViewType("table"); + }); + }); + menu.addItem((item) => { + item.setTitle("Card View"); + item.setIcon("layout-grid"); + item.onClick(() => { + saveViewType("card"); + }); + }); + menu.addItem((item) => { + item.setTitle("List View"); + item.setIcon("layout-list"); + item.onClick(() => { + saveViewType("list"); + }); + }); + menu.addItem((item) => { + item.setTitle("Flow View"); + item.setIcon("infinity"); + item.onClick(() => { + saveViewType("flow"); + }); + }); + menu.addSeparator(); + menu.addItem((item) => { + item.setTitle("Group By"); + item.setIcon("columns"); + item.onClick(() => { + showGroupByMenu(e4); + }); + }); + menu.addItem((item) => { + item.setTitle("Sort By"); + item.setIcon("sort-desc"); + item.onClick(() => { + showSortMenu(e4); + }); + }); + menu.addSeparator(); + menu.addItem((item) => { + item.setTitle("New Filter"); + item.setIcon("filter"); + item.onClick(() => { + showAddFilterMenu(e4); + }); + }); + menu.addItem((item) => { + item.setTitle("Clear Filters"); + item.setIcon("x-square"); + item.onClick(() => { + clearFilters(); + }); + }); + menu.addSeparator(); + menu.addItem((item) => { + item.setTitle("Unhide All Fields"); + item.setIcon("eye"); + item.onClick(() => { + clearHiddenCols(); + }); + }); + const offset = e4.target.getBoundingClientRect(); + menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); + }; + const addSort = (_4, sort) => { + var _a2; + const field = sort[0]; + const fieldType = (_a2 = filteredCols.find((f4) => f4.name + f4.table == field)) == null ? void 0 : _a2.type; + if (fieldType) { + const type = defaultPredicateFnForType(fieldType, sortFnTypes); + const newSort = { + field, + type + }; + savePredicate({ + ...predicate, + sort: [ + ...predicate.sort.filter((s5) => s5.field != newSort.field), + newSort + ] + }); + } + }; + const saveGroupBy = (_4, groupBy2) => { + savePredicate({ + ...predicate, + groupBy: groupBy2 + }); + }; + const removeSort = (sort) => { + const newSort = [...predicate.sort.filter((f4) => f4.field != sort.field)]; + savePredicate({ + ...predicate, + sort: newSort + }); + }; + const addFilter = (_4, filter) => { + var _a2; + const field = filter[0]; + const fieldType = (_a2 = filteredCols.find((f4) => f4.name + f4.table == field)) == null ? void 0 : _a2.type; + if (fieldType) { + const type = defaultPredicateFnForType(fieldType, filterFnTypes); + const newFilter = fieldType == "boolean" ? { + field, + type, + value: "true" + } : { + field, + type, + value: "" + }; + savePredicate({ + ...predicate, + filters: [ + ...predicate.filters.filter((s5) => s5.field != newFilter.field), + newFilter + ] + }); + } + }; + const changeSortMenu = (e4, sort) => { + var _a2; + const offset = e4.target.getBoundingClientRect(); + const saveSort = (_4, newType) => { + const type = newType[0]; + const newSort = { + ...sort, + type + }; + savePredicate({ + ...predicate, + sort: [ + ...predicate.sort.filter((s5) => s5.field != newSort.field), + newSort + ] + }); + }; + const fieldType = (_a2 = filteredCols.find( + (f4) => f4.name + f4.table == sort.field + )) == null ? void 0 : _a2.type; + const sortsForType = predicateFnsForType(fieldType, sortFnTypes); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + options: sortsForType.map((f4) => ({ + name: sortFnTypes[f4].label, + value: f4 + })), + saveOptions: saveSort, + placeholder: "Select Sort", + searchable: false, + showAll: true + } + ); + }; + const showColsMenu = (e4) => { + const offset = e4.target.getBoundingClientRect(); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + options: filteredCols.map((f4) => ({ + name: f4.name + f4.table, + value: f4.name + f4.table + })), + saveOptions: addFilter, + placeholder: "Select Field", + searchable: false, + showAll: true + } + ); + }; + const changeFilterMenu = (e4, filter) => { + var _a2; + const offset = e4.target.getBoundingClientRect(); + const saveFilter = (_4, newType) => { + const type = newType[0]; + const newFilter = { + ...filter, + type + }; + savePredicate({ + ...predicate, + filters: [ + ...predicate.filters.filter((s5) => s5.field != newFilter.field), + newFilter + ] + }); + }; + const fieldType = (_a2 = filteredCols.find( + (f4) => f4.name + f4.table == filter.field + )) == null ? void 0 : _a2.type; + const filtersForType = predicateFnsForType(fieldType, filterFnTypes); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + options: filtersForType.map((f4) => ({ + name: filterFnTypes[f4].label, + value: f4 + })), + saveOptions: saveFilter, + placeholder: "Select Filter", + searchable: false, + showAll: true + } + ); + }; + const showAddFilterMenu = (e4) => { + const offset = e4.target.getBoundingClientRect(); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + options: filteredCols.map((f4) => ({ + name: f4.name + f4.table, + value: f4.name + f4.table + })), + saveOptions: addFilter, + placeholder: "Select Field", + searchable: false, + showAll: true + } + ); + }; + const showSortMenu = (e4) => { + const offset = e4.target.getBoundingClientRect(); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + options: filteredCols.map((f4) => ({ + name: f4.name + f4.table, + value: f4.name + f4.table + })), + saveOptions: addSort, + placeholder: "Select Sort", + searchable: false, + showAll: true + } + ); + }; + const showGroupByMenu = (e4) => { + const offset = e4.target.getBoundingClientRect(); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + options: filteredCols.filter((f4) => f4.primary != "true").map((f4) => ({ + name: f4.name + f4.table, + value: f4.name + f4.table + })), + saveOptions: saveGroupBy, + placeholder: "Group By", + searchable: false, + showAll: true + } + ); + }; + const showFMMenu = (e4) => { + const saveFM = () => { + data.forEach((f4) => { + const file = getAbstractFileAtPath(app, f4.File); + if (file && file instanceof import_obsidian20.TFile) { + saveContextToFile(file, cols, f4); + } + }); + }; + const getFM = async () => { + const table = tableData; + const files = data.map((c4) => c4.File); + const importDV = (files2) => { + return files2.reduce( + (p3, c4) => { + const dvValues = dataViewAPI.page(c4); + const fmKeys = uniqCaseInsensitive( + Object.keys(dvValues != null ? dvValues : {}).filter( + (f4, i4, self2) => !self2.find( + (g4, j4) => g4.toLowerCase().replace(/\s/g, "-") == f4.toLowerCase().replace(/\s/g, "-") && i4 > j4 + ) ? true : false + ).filter((f4) => f4 != "file") + ); + return { + uniques: [], + cols: uniqCaseInsensitive([...p3.cols, ...fmKeys]), + rows: [ + ...p3.rows, + { + File: c4, + ...fmKeys.reduce( + (p4, c5) => ({ + ...p4, + [c5]: parseFrontMatter(c5, dvValues[c5], true) + }), + {} + ) + } + ] + }; + }, + { uniques: [], cols: [], rows: [] } + ); + }; + const importYAML = (files2) => { + return files2.map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4).reduce( + (p3, c4) => { + const fm = frontMatterForFile(c4); + const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); + return { + uniques: [], + cols: (0, import_lodash4.uniq)([...p3.cols, ...fmKeys]), + rows: [ + ...p3.rows, + { + File: c4.path, + ...fmKeys.reduce( + (p4, c5) => ({ + ...p4, + [c5]: parseFrontMatter(c5, fm[c5], false) + }), + {} + ) + } + ] + }; + }, + { uniques: [], cols: [], rows: [] } + ); + }; + const yamlTableData = dataViewAPI ? importDV(files) : importYAML(files); + const yamlTypes = guestimateTypes(files, dataViewAPI ? true : false); + const newTable2 = mergeTableData(table, yamlTableData, yamlTypes); + saveDB2(newTable2); + }; + const menu = new import_obsidian20.Menu(); + if (dataViewAPI) { + menu.addItem((menuItem) => { + menuItem.setIcon("file-up"); + menuItem.setTitle("Import All Dataview Fields"); + menuItem.onClick(() => { + getFM(); + }); + }); + } + if (app.fileManager.processFrontMatter) { + menu.addItem((menuItem) => { + menuItem.setIcon("file-down"); + menuItem.setTitle("Save All Fields to Files"); + menuItem.onClick(() => { + saveFM(); + }); + }); + } + menu.addItem((menuItem) => { + menuItem.setIcon("log-in"); + menuItem.setTitle("Merge Fields"); + menuItem.onClick(() => { + showMergeColumnModal(); + }); + }); + const offset = e4.target.getBoundingClientRect(); + menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); + }; + const mergeColumn = (fromCol, toCol) => { + const fromTable = fromCol.table == "" ? tableData : contextTable[fromCol.table]; + if (toCol.table == "") { + saveDB2({ + ...tableData, + rows: tableData.rows.map((r3, i4) => { + const foundRow = fromTable.rows.find((f4) => f4.File == r3.File); + return foundRow ? { ...r3, [toCol.name]: foundRow[fromCol.name] } : r3; + }) + }); + } else { + saveContextDB( + { + ...contextTable[toCol.table], + rows: contextTable[toCol.table].rows.map((r3, i4) => { + const foundRow = fromTable.rows.find((f4) => f4.File == r3.File); + return foundRow ? { ...r3, [toCol.name]: foundRow[fromCol.name] } : r3; + }) + }, + toCol.table + ); + } + }; + const showMergeColumnModal = () => { + var _a2; + let vaultChangeModal = new MergeColumnModal( + [ + ...(_a2 = filteredCols == null ? void 0 : filteredCols.map((f4) => ({ ...f4, table: "" }))) != null ? _a2 : [], + ...tagContexts.reduce( + (p3, c4) => { + var _a3, _b2; + return [ + ...p3, + ...(_b2 = (_a3 = contextTable[c4]) == null ? void 0 : _a3.cols.filter( + (f4) => f4.name != "File" && f4.hidden != "true" && f4.type != "fileprop" + ).map((f4) => ({ ...f4, table: c4 }))) != null ? _b2 : [] + ]; + }, + [] + ) + ], + mergeColumn + ); + vaultChangeModal.open(); + }; + const showSaveViewModal = () => { + let vaultChangeModal = new SaveViewModal(schema, saveSchema, "new view"); + vaultChangeModal.open(); + }; + const selectFilterValue = (e4, filter) => { + var _a2, _b2, _c2; + switch (filterFnTypes[filter.type].valueType) { + case "text": + case "number": + { + const menu = new import_obsidian20.Menu(); + menu.setUseNativeMenu(false); + const saveFilterValue = (value) => { + const newFilter = { + ...filter, + value + }; + savePredicate({ + ...predicate, + filters: [ + ...predicate.filters.filter((s5) => s5.field != newFilter.field), + newFilter + ] + }); + }; + menu.addItem((menuItem) => { + inputMenuItem( + menuItem, + filter.value, + (value) => saveFilterValue(value) + ); + menuItem.setIcon("type"); + }); + const offset = e4.target.getBoundingClientRect(); + menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); + } + break; + case "date": { + const saveValue = (date2) => { + const newFilter = { + ...filter, + value: date2.valueOf().toString() + }; + savePredicate({ + ...predicate, + filters: [ + ...predicate.filters.filter((s5) => s5.field != newFilter.field), + newFilter + ] + }); + }; + const offset = e4.target.getBoundingClientRect(); + const date = new Date(filter.value); + showDatePickerMenu( + { x: offset.left, y: offset.top + 30 }, + date.getTime() ? date : null, + saveValue + ); + break; + } + case "list": + { + const col = cols.find((f4) => f4.name + f4.table == filter.field); + const saveOptions = (options, values) => { + const newFilter = { + ...filter, + value: values.join(",") + }; + savePredicate({ + ...predicate, + filters: [ + ...predicate.filters.filter((s5) => s5.field != newFilter.field), + newFilter + ] + }); + }; + if (col.type.startsWith("option")) { + const offset = e4.target.getBoundingClientRect(); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: true, + editable: false, + value: splitString(filter.value), + options: splitString(col.value).map((f4) => ({ + name: f4, + value: f4 + })), + saveOptions, + placeholder: "Select Options", + searchable: true, + showAll: true + } + ); + } else if (col.type.startsWith("context")) { + const contextData = (_b2 = (_a2 = contextTable[col.table]) == null ? void 0 : _a2.rows) != null ? _b2 : []; + const offset = e4.target.getBoundingClientRect(); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: true, + editable: false, + value: splitString(filter.value), + options: (_c2 = contextData.map((f4) => ({ + name: filePathToString(f4["File"]), + value: f4["File"] + }))) != null ? _c2 : [], + saveOptions, + placeholder: "Select Options", + searchable: true, + showAll: true + } + ); + } + } + break; + } + }; + const saveNewSchemas = (_schema) => { + const newSchema = { + ..._schema, + id: uniqueNameFromString( + sanitizeTableName(_schema.id), + tables.map((f4) => f4.id) + ) + }; + saveSchema(newSchema).then( + (f4) => saveDB2({ + schema: newSchema, + cols: defaultTableFields.map((f5) => ({ ...f5, schemaId: newSchema.id })), + rows: [] + }) + ); + }; + const newTable = (e4) => { + let vaultChangeModal = new SaveViewModal( + { + id: "", + name: "", + type: "db" + }, + saveNewSchemas, + "new table" + ); + vaultChangeModal.open(); + }; + const viewContextMenu = (e4, _schema) => { + const fileMenu = new import_obsidian20.Menu(); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Rename Table"); + menuItem.onClick(() => { + let vaultChangeModal = new SaveViewModal( + _schema, + (s5) => saveSchema(s5), + "rename table" + ); + vaultChangeModal.open(); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Delete Table"); + menuItem.onClick(() => { + deleteSchema(_schema); + }); + }); + if (isMouseEvent(e4)) { + fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + } else { + fileMenu.showAtPosition({ + x: e4.nativeEvent.locationX, + y: e4.nativeEvent.locationY + }); + } + }; + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, isFolderContext && /* @__PURE__ */ bn.createElement(TagSelector, { + plugin: props2.plugin + }), /* @__PURE__ */ bn.createElement("div", { + className: "mk-view-selector" + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-table-selector" + }, viewFolderNote && /* @__PURE__ */ bn.createElement("button", { + className: `mk-folder-note ${folderNoteOpen ? "mk-is-active" : ""}`, + onClick: () => viewFolderNote(true) + }, props2.folderNoteName), tables.filter((f4) => f4.type == "db").map((f4) => /* @__PURE__ */ bn.createElement("div", { + className: `${!folderNoteOpen && (dbSchema == null ? void 0 : dbSchema.id) == f4.id ? "mk-is-active" : ""}`, + onContextMenu: (e4) => !f4.primary && viewContextMenu(e4, f4) + }, /* @__PURE__ */ bn.createElement("button", { + onClick: (e4) => openView(e4, f4) + }, f4.name), tables.filter((g4) => g4.type != "db" && g4.def == f4.id).length > 1 && /* @__PURE__ */ bn.createElement("button", { + className: "mk-icon-xsmall mk-collapse", + onClick: (e4) => showViewMenu(e4, f4), + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-collapse"] + } + }))), isFolderContext && /* @__PURE__ */ bn.createElement("button", { + onClick: (e4) => newTable(e4) + }, "+ Table")), /* @__PURE__ */ bn.createElement("span", null), !props2.folderNoteOpen && /* @__PURE__ */ bn.createElement("div", { + className: "mk-view-options" + }, /* @__PURE__ */ bn.createElement(SearchBar, { + setSearchString + }), /* @__PURE__ */ bn.createElement("button", { + onClick: (e4) => showFilterMenu(e4), + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-view-options"] + } + }), /* @__PURE__ */ bn.createElement("button", { + onClick: (e4) => showFMMenu(e4), + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-options"] } + }))), (predicate.filters.length > 0 || predicate.sort.length > 0 || predicate.groupBy.length > 0) && !folderNoteOpen && /* @__PURE__ */ bn.createElement("div", { + className: "mk-filter-bar" + }, predicate.groupBy.length > 0 && /* @__PURE__ */ bn.createElement("div", { + className: "mk-filter" + }, /* @__PURE__ */ bn.createElement("span", null, "Group By"), /* @__PURE__ */ bn.createElement("span", { + onClick: (e4) => showGroupByMenu(e4) + }, predicate.groupBy[0]), /* @__PURE__ */ bn.createElement("div", { + onClick: () => saveGroupBy(null, []), + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } + })), predicate.sort.map((f4) => /* @__PURE__ */ bn.createElement("div", { + className: "mk-filter" + }, /* @__PURE__ */ bn.createElement("span", null, f4.field), /* @__PURE__ */ bn.createElement("span", { + onClick: (e4) => changeSortMenu(e4, f4) + }, sortFnTypes[f4.type].label), /* @__PURE__ */ bn.createElement("div", { + onClick: () => removeSort(f4), + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } + }))), predicate.filters.map((f4) => /* @__PURE__ */ bn.createElement("div", { + className: "mk-filter" + }, /* @__PURE__ */ bn.createElement("span", null, f4.field), /* @__PURE__ */ bn.createElement("span", { + onClick: (e4) => changeFilterMenu(e4, f4) + }, filterFnTypes[f4.type].label), /* @__PURE__ */ bn.createElement(FilterValueSpan, { + col: cols.find((c4) => c4.name + c4.table == f4.field), + filter: f4, + selectFilterValue + }), /* @__PURE__ */ bn.createElement("div", { + onClick: () => removeFilter(f4), + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } + }))), /* @__PURE__ */ bn.createElement("span", null), /* @__PURE__ */ bn.createElement("button", { + className: "mk-filter-add mk-icon-small", + onClick: () => showSaveViewModal() + }, /* @__PURE__ */ bn.createElement("div", { + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-stack"] } + }), "Save View"))); +}; +var FilterValueSpan = (props2) => { + var _a2; + const { filter, selectFilterValue } = props2; + const fieldType = (_a2 = props2.col) == null ? void 0 : _a2.type; + if (fieldType == "boolean" || !fieldType) { + return /* @__PURE__ */ bn.createElement(bn.Fragment, null); + } else if (filter.value.length == 0) { + return /* @__PURE__ */ bn.createElement("span", { + onClick: (e4) => selectFilterValue(e4, filter) + }, "Select"); + } else if (fieldType.startsWith("option") || fieldType.startsWith("context")) { + const options = splitString(filter.value); + return /* @__PURE__ */ bn.createElement("span", { + onClick: (e4) => selectFilterValue(e4, filter) + }, " ", options.map((f4) => /* @__PURE__ */ bn.createElement("span", null, f4))); + } + return /* @__PURE__ */ bn.createElement("span", { + onClick: (e4) => selectFilterValue(e4, filter) + }, filter.value); +}; + +// src/components/ContextView/FolderContextViewComponent.tsx +var FolderContextViewComponent = (props2) => { + var _a2; + const folder = (_a2 = props2.folder) == null ? void 0 : _a2.path; + const path = folderContextFromFolder(props2.plugin, folder); + const ref = _2(null); + const [flowOpen, setFlowOpen] = p2(false); + const folderNotePath = props2.plugin.settings.folderNoteInsideFolder ? `${props2.folder.path}/${props2.folder.name}.md` : props2.folder && props2.folder.parent.path == "/" ? `${props2.folder.name}.md` : `${props2.folder.parent.path}/${props2.folder.name}.md`; + const loadFile = async () => { + const folderNote = getAbstractFileAtPath(app, folderNotePath); + if (folderNote) { + const div = ref.current; + const newLeaf = spawnPortal(props2.plugin, div); + newLeaf.openFile(folderNote); + } else { + const div = ref.current; + const newFile = await app.fileManager.createNewMarkdownFile( + app.vault.getRoot(), + folderNotePath + ); + const newLeaf = spawnPortal(props2.plugin, div); + newLeaf.openFile(newFile); + } + }; + h2(() => { + if (flowOpen) { + loadFile(); + } else { + if (ref.current) + ref.current.empty(); + } + }, [flowOpen]); + const viewFolderNote = (open) => { + setFlowOpen(open); + }; + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-scroller" + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-header" + }, /* @__PURE__ */ bn.createElement("div", { + className: "inline-title" + }, props2.folder.name)), props2.plugin.settings.enableFolderNote ? /* @__PURE__ */ bn.createElement(MDBProvider, { + plugin: props2.plugin, + dbPath: path, + folder + }, /* @__PURE__ */ bn.createElement(FilterBar, { + plugin: props2.plugin, + folderNoteName: props2.folder.name, + folderNoteOpen: flowOpen, + viewFolderNote + }), path && !flowOpen && /* @__PURE__ */ bn.createElement(ContextListView, { + plugin: props2.plugin + }), flowOpen && /* @__PURE__ */ bn.createElement("div", { + className: "mk-flowspace-editor mk-foldernote", + ref + })) : /* @__PURE__ */ bn.createElement(MDBProvider, { + plugin: props2.plugin, + dbPath: path, + folder + }, /* @__PURE__ */ bn.createElement(FilterBar, { + plugin: props2.plugin + }), /* @__PURE__ */ bn.createElement(ContextListView, { + plugin: props2.plugin + }))); +}; + +// src/components/ContextView/TagContextViewComponent.tsx +var TagContextViewComponent = (props2) => { + const path = tagContextFromTag(props2.plugin, props2.tag); + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-scroller" + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-header" + }, /* @__PURE__ */ bn.createElement("div", { + className: "inline-title" + }, props2.tag)), /* @__PURE__ */ bn.createElement(MDBProvider, { + plugin: props2.plugin, + dbPath: path, + tag: props2.tag + }, /* @__PURE__ */ bn.createElement(FilterBar, { + plugin: props2.plugin + }), /* @__PURE__ */ bn.createElement(ContextListView, { + plugin: props2.plugin + }))); +}; + +// src/components/ContextView/ContextView.tsx +var CONTEXT_VIEW_TYPE = "make-folder-view"; +var ContextView = class extends import_obsidian21.ItemView { + constructor(leaf, plugin, viewType) { + super(leaf); + this.navigation = true; + this.plugin = plugin; + this.viewType = viewType; + } + getViewType() { + return this.viewType; + } + getDisplayText() { + var _a2; + if (this.type == "tag") { + return this.tag; + } + return (_a2 = this.folder) == null ? void 0 : _a2.name; + } + async onClose() { + this.destroy(); + } + destroy() { + if (this.root) + this.root.unmount(); + } + async onOpen() { + this.destroy(); + } + async setState(state, result) { + this.type = state.type; + if (state.type == "folder") { + const folder = getAbstractFileAtPath( + this.plugin.app, + state.folder + ); + if (!folder) { + return; + } + this.folder = folder; + this.constructFolderContext(folder); + await super.setState(state, result); + this.leaf.tabHeaderInnerTitleEl.innerText = folder.name; + this.leaf.view.titleEl = folder.name; + const headerEl = this.leaf.view.headerEl; + if (headerEl) { + headerEl.querySelector(".view-header-title").innerText = folder.name; + } + } else if (state.type == "tag") { + this.tag = state.tag; + this.constructTagContext(this.tag); + await super.setState(state, result); + this.leaf.tabHeaderInnerTitleEl.innerText = this.tag; + this.leaf.view.titleEl = this.tag; + const headerEl = this.leaf.view.headerEl; + if (headerEl) { + headerEl.querySelector(".view-header-title").innerText = this.tag; + } + } + result.history = true; + return; + } + getState() { + var _a2; + let state = super.getState(); + state.type = this.type; + if (state.type == "folder") { + state.folder = (_a2 = this.folder) == null ? void 0 : _a2.path; + } else { + state.tag = this.tag; + } + return state; + } + constructTagContext(tag) { + this.destroy(); + this.root = createRoot(this.contentEl); + this.root.render( + /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-view" + }, /* @__PURE__ */ bn.createElement(TagContextViewComponent, { + type: "tag", + tag: this.tag, + plugin: this.plugin + })) + ); + } + constructFolderContext(folder) { + this.destroy(); + this.root = createRoot(this.contentEl); + this.root.render( + /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-view" + }, folder && /* @__PURE__ */ bn.createElement(FolderContextViewComponent, { + type: "folder", + folder, + plugin: this.plugin + })) + ); + } +}; + +// src/utils/file.ts +var import_obsidian22 = require("obsidian"); +var defaultNoteFolder = (plugin, activeFile2) => { + var _a2; + return (_a2 = plugin.settings.newFileLocation == "folder" ? getFolderFromPath(app, plugin.settings.newFileFolderPath) : plugin.settings.newFileLocation == "current" && activeFile2 ? getFolderFromPath(app, activeFile2) : plugin.app.vault.getRoot()) != null ? _a2 : plugin.app.vault.getRoot(); +}; +var defaultConfigFile = async (app2) => { + return await app2.vault.adapter.read( + (0, import_obsidian22.normalizePath)(app2.vault.configDir + "/app.json") + ); +}; +var fileExtensionForFile = (path) => path.split(".").pop(); +var appendFileMetadataForRow = (row, fields) => { + const file = getAbstractFileAtPath(app, row.File); + if (!file) { + return row; + } + return { + ...row, + ...fields.filter((f4) => f4.type == "fileprop").reduce( + (p3, c4) => ({ ...p3, [c4.name]: appendFileMetaData(c4.value, file) }), + {} + ) + }; +}; +var appendFileMetaData = (propType, file) => { + let value = ""; + if (file) { + if (propType == "folder") { + value = file.parent.path; + } + if (file instanceof import_obsidian22.TFile) { + if (propType == "ctime") { + value = file.stat.ctime.toString(); + } else if (propType == "mtime") { + value = file.stat.mtime.toString(); + } else if (propType == "extension") { + value = file.extension; + } else if (propType == "size") { + value = file.stat.size.toString(); + } + } else if (propType == "extension") { + value = "Folder"; + } + } + return value; +}; +var viewTypeByString = (file) => { + if (file.charAt(0) == "#") { + return "tag"; + } + const portalFile = app.vault.getAbstractFileByPath(file); + if (portalFile instanceof import_obsidian22.TFolder) { + return "folder"; + } + if (portalFile instanceof import_obsidian22.TFile) { + return "file"; + } + return null; +}; +function getAllAbstractFilesInVault(plugin, app2) { + let files = []; + let rootFolder = app2.vault.getRoot(); + function recursiveFx(folder) { + for (let child of folderChildren(plugin, folder)) { + if (child instanceof import_obsidian22.TFolder) { + let childFolder = child; + if (childFolder.children) + recursiveFx(childFolder); + } + files.push(child); + } + } + recursiveFx(rootFolder); + return files; +} +var getFolderFromPath = (app2, path) => { + if (!path) + return null; + const file = path.slice(-1) == "/" ? path.substring(0, path.length - 1) : path; + const afile = getAbstractFileAtPath(app2, file); + if (!afile) + return null; + return afile instanceof import_obsidian22.TFolder ? afile : afile.parent; +}; +var getFolderPathFromString = (file) => { + var _a2; + return (_a2 = getFolderFromPath(app, file)) == null ? void 0 : _a2.path; +}; +var deleteFiles = (plugin, files) => { + files.forEach((f4) => { + const file = getAbstractFileAtPath(app, f4); + deleteFile(plugin, file); + }); +}; +var deleteFile = (plugin, file) => { + let deleteOption = plugin.settings.deleteFileOption; + if (deleteOption === "permanent") { + plugin.app.vault.delete(file, true); + } else if (deleteOption === "system-trash") { + plugin.app.vault.trash(file, true); + } else if (deleteOption === "trash") { + plugin.app.vault.trash(file, false); + } +}; +var openFile = async (file, plugin, newLeaf) => { + openAFile(getAbstractFileAtPath(plugin.app, file.path), plugin, newLeaf); +}; +var openAFile = async (file, plugin, newLeaf) => { + if (file instanceof import_obsidian22.TFolder) { + openTFolder(file, plugin, newLeaf); + } else if (file instanceof import_obsidian22.TFile) { + openTFile(file, plugin, newLeaf); + } + let evt = new CustomEvent(eventTypes.activeFileChange, { + detail: { filePath: file.path } + }); + window.dispatchEvent(evt); +}; +var openTFile = async (file, plugin, newLeaf) => { + let leaf = app.workspace.getLeaf(newLeaf); + app.workspace.setActiveLeaf(leaf, { focus: true }); + await leaf.openFile(file, { eState: { focus: true } }); +}; +var openTFolder = async (file, plugin, newLeaf) => { + let leaf = app.workspace.getLeaf(newLeaf); + const viewType = CONTEXT_VIEW_TYPE; + app.workspace.setActiveLeaf(leaf, { focus: true }); + await leaf.setViewState({ + type: viewType, + state: { type: "folder", folder: file.path } + }); + await app.workspace.requestSaveLayout(); + if (platformIsMobile()) { + app.workspace.leftSplit.collapse(); + } +}; +var openTag = async (tag, plugin, newLeaf) => { + let leaf = app.workspace.getLeaf(newLeaf); + const viewType = CONTEXT_VIEW_TYPE; + app.workspace.setActiveLeaf(leaf, { focus: true }); + await leaf.setViewState({ type: viewType, state: { type: "tag", tag } }); + await app.workspace.requestSaveLayout(); + if (platformIsMobile()) { + app.workspace.leftSplit.collapse(); + } +}; +var getAbstractFileAtPath = (app2, path) => { + return app2.vault.getAbstractFileByPath(path); +}; +var openFileInNewPane = (plugin, file) => { + openFile(file, plugin, true); +}; +var createNewMarkdownFile = async (plugin, folder, newFileName, content) => { + const newFile = await app.fileManager.createNewMarkdownFile( + folder, + newFileName + ); + if (content && content !== "") + await app.vault.modify(newFile, content); + await openFile(newFile, plugin, false); + const titleEl = app.workspace.activeLeaf.view.containerEl.querySelector( + ".inline-title" + ); + if (titleEl) { + titleEl.focus(); + selectElementContents(titleEl); + } + let evt = new CustomEvent(eventTypes.activeFileChange, { + detail: { filePath: newFile.path } + }); + window.dispatchEvent(evt); + return newFile; +}; +var platformIsMobile = () => { + return import_obsidian22.Platform.isMobile; +}; +var newFileInFolder = async (plugin, data) => { + await createNewMarkdownFile( + plugin, + data.parent.children.find((f4) => f4.name == data.name), + "", + "" + ); +}; + +// src/utils/tree.ts +var uniq = (a5) => [...new Set(a5)]; +var uniqCaseInsensitive = (a5) => [ + ...new Map(a5.map((s5) => [s5.toLowerCase(), s5])).values() +]; +var uniqueNameFromString = (name, cols) => { + let newName = name; + if (cols.includes(newName)) { + let append = 1; + while (cols.includes(newName)) { + newName = name + append.toString(); + append += 1; + } + } + return newName; +}; +var onlyUniqueProp = (prop) => (value, index, self2) => { + return self2.findIndex((v3) => value[prop] == v3[prop]) === index; +}; +var fileNameToString = (filename) => filename.substring(0, filename.lastIndexOf(".")) || filename; +var removeLeadingSlash = (path) => path.charAt(0) == "/" ? path.substring(1) : path; +var filePathToString = (filename) => removeLeadingSlash( + filename.substring(filename.lastIndexOf("/"), filename.lastIndexOf(".")) +) || filename; +var folderPathToString = (filename) => removeLeadingSlash(filename.substring(filename.lastIndexOf("/"))) || filename; +var safelyParseJSON = (json) => { + var parsed; + try { + parsed = JSON.parse(json); + } catch (e4) { + } + return parsed; +}; +var nodeIsAncestorOfTarget = (node, target) => { + var _a2, _b2, _c2; + if (((_a2 = node.item) == null ? void 0 : _a2.folder) == "false") + return false; + return (_c2 = target.item) == null ? void 0 : _c2.path.contains(((_b2 = node.item) == null ? void 0 : _b2.path) + "/"); +}; +var excludeVaultItemPredicate = (plugin) => (f4, index, folder) => !(f4.folder != "true" && plugin.settings.hiddenExtensions.find( + (e4) => fileExtensionForFile(f4.path) == e4 +)) && !plugin.settings.hiddenFiles.find((e4) => e4 == f4.path) && (!plugin.settings.enableFolderNote || !plugin.settings.folderNoteInsideFolder && !folder.some((g4) => g4.path + ".md" == f4.path) || plugin.settings.folderNoteInsideFolder && !(f4.parent + "/" + folderPathToString(f4.parent) + ".md" == f4.path)); +var excludeFilePredicate = (plugin) => (f4, index, folder) => !(f4 instanceof import_obsidian23.TFile && plugin.settings.hiddenExtensions.find((e4) => f4.extension == e4)) && !plugin.settings.hiddenFiles.find((e4) => e4 == f4.path) && (!plugin.settings.enableFolderNote || !plugin.settings.folderNoteInsideFolder && !folder.some((g4) => g4.path + ".md" == f4.path) || plugin.settings.folderNoteInsideFolder && !(f4.parent.path + "/" + f4.parent.name + ".md" == f4.path)); +var folderChildren = (plugin, f4, exclusionList) => { + var _a2, _b2; + return (_b2 = (_a2 = f4 == null ? void 0 : f4.children) == null ? void 0 : _a2.filter(excludeFilePredicate(plugin))) != null ? _b2 : []; +}; +var compareByField = (field, dir) => (_a2, _b2) => { + const a5 = dir ? _a2 : _b2; + const b4 = dir ? _b2 : _a2; + if (a5[field] < b4[field]) { + return -1; + } + if (a5[field] > b4[field]) { + return 1; + } + return 0; +}; +var internalPluginLoaded = (pluginName, app2) => { + var _a2; + return (_a2 = app2.internalPlugins.plugins[pluginName]) == null ? void 0 : _a2._loaded; +}; +function selectElementContents(el) { + var range = document.createRange(); + range.selectNodeContents(el); + var sel = window.getSelection(); + sel.removeAllRanges(); + sel.addRange(range); +} + +// src/cm-extensions/flowEditor/flowEditor.tsx +var toggleFlowEditor = import_state5.Annotation.define(); +var cacheFlowEditorHeight = import_state5.Annotation.define(); +var preloadFlowEditor = import_state5.EditorState.transactionFilter.of( + (tr) => { + let newTrans = []; + const value = tr.state.field(flowEditorInfo, false); + if (value && !tr.annotation(toggleFlowEditor)) { + newTrans.push( + ...value.filter((f4) => f4.expandedState == 1).map((f4) => { + if (tr.state.field(flowTypeStateField) == "doc") { + return { + annotations: toggleFlowEditor.of([f4.id, 2]) + }; + } else { + return { + annotations: toggleFlowEditor.of([f4.id, 0]) + }; + } + }) + ); + } + return [tr, ...newTrans]; + } +); +var internalLinkToggle = import_view4.ViewPlugin.fromClass( + class { + constructor(view) { + } + }, + { + eventHandlers: { + mousedown: (e4, view) => { + let pos = view.posAtDOM(e4.target); + let { from: lineFrom, to: lineTo, text: text2 } = view.state.doc.lineAt(pos); + for (let match2 of text2.matchAll(/(?!\!)\[\[([^\]]+)\]\]/g)) { + const stateField = view.state.field(flowEditorInfo, false); + const info = stateField.find( + (f4) => f4.to == lineFrom + match2.index + match2[1].length + 2 + ); + if (info) { + e4.preventDefault(); + view.dispatch({ + annotations: toggleFlowEditor.of([info.id, 2]) + }); + } + } + } + } + } +); +var internalLinkHover = hoverTooltip((view, pos, side) => { + let { from: lineFrom, to: lineTo, text: text2 } = view.state.doc.lineAt(pos); + let hovObject = null; + iterateTreeInSelection({ from: lineFrom, to: lineTo }, view.state, { + enter: ({ name, from, to }) => { + if (name.contains("hmd-internal-link") && pos <= to && pos >= from) { + const stateField = view.state.field(flowEditorInfo, false); + const info = stateField.find((f4) => f4.to == to); + if (info) { + hovObject = { + pos: pos - 5, + end: to, + above: true, + create(view2) { + let dom = document.createElement("div"); + dom.toggleClass("mk-flow-hover", true); + dom.toggleClass("menu", true); + const openHoverDiv = dom.createDiv(); + openHoverDiv.setAttribute( + "aria-label", + info.expandedState == 0 ? i18n_default.buttons.openFlow : i18n_default.buttons.hideFlow + ); + openHoverDiv.addEventListener("click", () => { + view2.dispatch({ + annotations: toggleFlowEditor.of([info.id, 2]) + }); + }); + const icon = openHoverDiv.createDiv(); + icon.innerHTML = uiIconSet["mk-ui-flow-hover"]; + openHoverDiv.insertAdjacentText( + "beforeend", + info.expandedState == 0 ? i18n_default.buttons.openFlow : i18n_default.buttons.hideFlow + ); + return { dom }; + } + }; + return false; + } + } + } + }); + return hovObject; +}); +var flowEditorInfo = import_state5.StateField.define({ + create() { + return []; + }, + update(value, tr) { + var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let newValues = []; + const previous = value; + let usedContainers = []; + let str = tr.newDoc.sliceString(0); + const reverseExpandedState = (state) => { + const news = state != 2 ? 2 : 0; + return news; + }; + for (let match2 of str.matchAll(/(?:!\[!\[|!!\[\[)([^\]]+)\]\]/g)) { + const link = match2[1]; + const existingLinks = previous.filter((f4) => f4.link == link); + const offset = usedContainers.filter((f4) => f4 == link).length; + const existingInfo = existingLinks[offset]; + const id2 = existingInfo ? existingInfo.id : genId(); + usedContainers.push(link); + const info = { + id: id2, + link: match2[1], + startOfLineFix: false, + from: match2.index + 4, + to: match2.index + 4 + match2[1].length, + embed: 1, + height: existingInfo ? ((_a2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _a2[0]) == id2 && ((_b2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _b2[1]) != 0 ? (_c2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _c2[1] : existingInfo.height : -1, + expandedState: existingInfo ? ((_d2 = tr.annotation(toggleFlowEditor)) == null ? void 0 : _d2[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 1 + }; + newValues.push(info); + } + for (let match2 of str.matchAll(/(?!\!)\[\[([^\]]+)\]\]/g)) { + const link = match2[1]; + const existingLinks = previous.filter((f4) => f4.link == link); + const offset = usedContainers.filter((f4) => f4 == link).length; + const existingInfo = existingLinks[offset]; + const id2 = existingInfo ? existingInfo.id : genId(); + usedContainers.push(link); + const info = { + id: id2, + link: match2[1], + startOfLineFix: false, + from: match2.index + 2, + to: match2.index + 2 + match2[1].length, + embed: 0, + height: existingInfo ? ((_e2 = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _e2[0]) == id2 && ((_f = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _f[1]) != 0 ? (_g = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _g[1] : existingInfo.height : -1, + expandedState: existingInfo ? ((_h = tr.annotation(toggleFlowEditor)) == null ? void 0 : _h[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 0 + }; + newValues.push(info); + } + for (let match2 of str.matchAll(/(?!\!)\!\[\[([^\]]+)\]\]/g)) { + const link = match2[1]; + const existingLinks = previous.filter((f4) => f4.link == link); + const offset = usedContainers.filter((f4) => f4 == link).length; + const existingInfo = existingLinks[offset]; + const id2 = existingInfo ? existingInfo.id : genId(); + usedContainers.push(link); + const info = { + id: id2, + link: match2[1], + startOfLineFix: false, + from: match2.index + 3, + to: match2.index + 3 + match2[1].length, + embed: 2, + height: existingInfo ? ((_i = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _i[0]) == id2 && ((_j = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _j[1]) != 0 ? (_k = tr.annotation(cacheFlowEditorHeight)) == null ? void 0 : _k[1] : existingInfo.height : -1, + expandedState: existingInfo ? ((_l = tr.annotation(toggleFlowEditor)) == null ? void 0 : _l[0]) == id2 ? reverseExpandedState(existingInfo.expandedState) : existingInfo.expandedState : 1 + }; + newValues.push(info); + } + newValues.sort(compareByField("from", true)); + return newValues; + } +}); +var flowEditorRangeset = (state) => { + let builder = new import_state5.RangeSetBuilder(); + const infoFields = state.field(flowEditorInfo); + for (let info of infoFields) { + const { from, to, embed: embedType, expandedState } = info; + const lineFix = from - 3 == state.doc.lineAt(from).from && to + 2 == state.doc.lineAt(from).to; + if (expandedState == 2) { + if (embedType == 1) { + if (!(state.selection.main.from == from - 4 && state.selection.main.to == to + 2 || state.selection.main.from >= from - 3 && state.selection.main.to <= to + 1)) { + builder.add(from - 4, from - 3, flowEditorSelector(info)); + if (lineFix) { + builder.add(from - 3, to + 2, flowEditorWidgetDecoration(info)); + } else { + builder.add(from - 3, to + 2, flowEditorDecoration(info)); + } + } + } else if (embedType == 0) { + builder.add(to + 2, to + 2, flowEditorDecoration(info)); + } + } + } + const dec = builder.finish(); + return dec; +}; +var flowEditorField = import_state5.StateField.define({ + create(state) { + return flowEditorRangeset(state); + }, + update(value, tr) { + return flowEditorRangeset(tr.state); + }, + provide: (f4) => import_view4.EditorView.decorations.from(f4) +}); +var FlowEditorWidget = class extends import_view4.WidgetType { + constructor(info) { + super(); + this.info = info; + } + eq(other) { + return other.info.id === this.info.id; + } + toDOM(view) { + const div = document.createElement("div"); + div.toggleClass("mk-floweditor-container", true); + div.toggleClass("mk-floweditor-fix", this.info.startOfLineFix); + div.setAttribute("id", "mk-flow-" + this.info.id); + const placeholder2 = div.createDiv("mk-floweditor-placeholder"); + placeholder2.style.setProperty("height", this.info.height + "px"); + loadFlowEditorByDOM(div, view, this.info.id); + return div; + } + get estimatedHeight() { + return this.info.height; + } +}; +var FlowEditorSelector = class extends import_view4.WidgetType { + constructor(info) { + super(); + this.info = info; + this.flowInfo = info; + } + eq(other) { + return false; + } + toDOM(view) { + const div = document.createElement("div"); + div.toggleClass("mk-floweditor-selector", true); + const reactEl = createRoot(div); + const type = this.info.link.contains("/#^") ? "table" : "file"; + reactEl.render( + /* @__PURE__ */ bn.createElement(FlowEditorHover, { + toggle: true, + type, + toggleState: true, + cutTable: () => { + navigator.clipboard.writeText(`![![${this.info.link}]]`); + view.dispatch({ + changes: { from: this.info.from - 4, to: this.info.to + 2 } + }); + }, + deleteTable: () => { + view.dispatch({ + changes: { from: this.info.from - 4, to: this.info.to + 2 } + }); + }, + toggleFlow: () => { + view.dispatch({ + changes: { from: this.info.from - 4, to: this.info.from - 3 } + }); + }, + openLink: () => { + openFileFlowEditor(this.flowInfo.link, "/"); + } + }) + ); + return div; + } +}; +var flowEditorSelector = (info) => import_view4.Decoration.replace({ + widget: new FlowEditorSelector(info), + inclusive: true, + block: false +}); +var flowEditorDecoration = (info) => import_view4.Decoration.replace({ + widget: new FlowEditorWidget(info), + inclusive: true, + block: false +}); +var flowEditorWidgetDecoration = (info) => import_view4.Decoration.widget({ + widget: new FlowEditorWidget(info), + block: true +}); + +// src/cm-extensions/flowEditor/atomic.ts +var arrowKeyAnnotation = import_state6.Annotation.define(); +var atomicSelect = import_state6.EditorState.transactionFilter.of( + (tr) => { + if (tr.isUserEvent("delete") || tr.isUserEvent("input")) { + return tr; + } + const flowID = tr.startState.field(flowIDStateField, false); + if (tr.annotation(arrowKeyAnnotation) && flowID) { + const oldSel = tr.startState.selection.main; + const lineRange = tr.state.field(selectiveLinesFacet, false); + const posRange = lineRange && lineRange[0] != void 0 ? lineRangeToPosRange(tr.startState, lineRange) : { from: 0, to: tr.startState.doc.length }; + if (oldSel.from <= posRange.from && tr.annotation(arrowKeyAnnotation) == 3) { + focusFlowEditorParent(flowID, true); + } + if (oldSel.to >= posRange.to && tr.annotation(arrowKeyAnnotation) == 4) { + focusFlowEditorParent(flowID, false); + } + return tr; + } + const selection = tr.newSelection.main; + if (selection.from == 0 && selection.to == 0 || selection.from != selection.to) + return tr; + const flowEditors = tr.state.field(flowEditorInfo, false); + if (flowEditors) { + for (let info of flowEditors) { + if (info.embed == 1) { + if (info.from - 3 <= selection.from && info.to + 2 >= selection.to && info.expandedState == 2) { + const top = tr.annotation(arrowKeyAnnotation) == 1 || tr.startState.selection.main.from > selection.from ? false : true; + focusFlowEditor(info.id, top); + return { + selection: import_state6.EditorSelection.single(info.from - 4) + }; + break; + } + } + } + } + return tr; + } +); + +// src/cm-extensions/markSans/hr.ts +var import_state7 = require("@codemirror/state"); +var import_view5 = require("@codemirror/view"); +var resetLine = import_view5.Decoration.line({ class: "mk-reset" }); +var needsReset = (state, typeString, from, to) => { + const length = to - from; + if (typeString.contains("HyperMD-header")) { + if (parseInt(typeString.replace(/.*HyperMD-header-(\d+).*/, "$1")) == length) { + return true; + } + let truefalse = true; + iterateTreeInSelection({ from, to }, state, { + enter: ({ type, from: from2, to: to2 }) => { + if (type.name.contains("formatting-header")) { + truefalse = false; + } + } + }); + return truefalse; + } + return false; +}; +var hrResetFix = import_state7.StateField.define({ + create() { + return import_view5.Decoration.none; + }, + update(value, tr) { + let builder = new import_state7.RangeSetBuilder(); + iterateTreeInDocument(tr.state, { + enter: ({ type, from, to }) => { + if (needsReset(tr.state, type.name, from, to)) { + builder.add(from, from, resetLine); + } + } + }); + const dec = builder.finish(); + return dec; + }, + provide: (f4) => import_view5.EditorView.decorations.from(f4) +}); +var hrDecorations = (state) => { + let builder = new import_state7.RangeSetBuilder(); + let nodes2 = []; + iterateTreeInDocument(state, { + enter: ({ name, from, to }) => { + if (name.contains("formatting-header") && state.sliceDoc(from, to) == "---" && !(state.selection.main.from >= from && state.selection.main.to <= to)) { + builder.add(from, to, hr); + } + } + }); + const dec = builder.finish(); + return dec; +}; +var hrField = import_state7.StateField.define({ + create(state) { + return hrDecorations(state); + }, + update(value, tr) { + if (!tr.docChanged) + return value; + return hrDecorations(tr.state); + }, + provide: (f4) => import_view5.EditorView.decorations.from(f4) +}); +var HRWidget = class extends import_view5.WidgetType { + constructor() { + super(); + } + eq(other) { + return true; + } + toDOM() { + const div = document.createElement("hr"); + return div; + } +}; +var hr = import_view5.Decoration.replace({ + widget: new HRWidget(), + block: false +}); + +// src/cm-extensions/inlineStylerView/marks.ts +var import_state8 = require("@codemirror/state"); + +// src/cm-extensions/markSans/obsidianSyntax.ts +var oMarks = [ + { + mark: "em", + formatting: "formatting-em", + altFormatting: "em_formatting_formatting-strong", + formatChar: "*" + }, + { + mark: "strong", + formatting: "formatting-strong", + formatChar: "**" + }, + { + mark: "strikethrough", + formatting: "formatting-strikethrough", + formatChar: "~~" + }, + { + mark: "inline-code", + formatting: "formatting-code", + formatChar: "`" + } +]; + +// src/cm-extensions/inlineStylerView/marks.ts +var toggleMark = import_state8.Annotation.define(); +var trimSpace = (pos, moveDirLeft, state) => { + if (moveDirLeft && state.sliceDoc(pos, pos + 1) == " ") + return pos + 1; + if (!moveDirLeft && state.sliceDoc(pos - 1, pos) == " ") + return pos - 1; + return pos; +}; +var newPosAfterFormatting = (pos, moveDirLeft, state) => { + const line = state.doc.lineAt(pos); + const start = moveDirLeft ? line.from : pos; + const end = moveDirLeft ? pos : line.to; + let newPos = start; + let lastFormatPos = start; + let exitFormatRange = false; + iterateTreeInSelection({ from: start, to: end }, state, { + enter: (node) => { + if (exitFormatRange) + return false; + if (node.name.contains("formatting")) { + if (!moveDirLeft && node.from > start) { + return false; + } + if (moveDirLeft) { + newPos = node.from; + lastFormatPos = node.to; + } else { + newPos = node.to; + } + } + } + }); + if (moveDirLeft && lastFormatPos < pos) { + newPos = pos; + } + return newPos; +}; +var expandRange = (selection, state) => { + const from = trimSpace( + newPosAfterFormatting(selection.from, true, state), + true, + state + ); + const to = trimSpace( + newPosAfterFormatting(selection.to, false, state), + false, + state + ); + return { from, to }; +}; +var addMarkAtPos = (pos, mark) => ({ + changes: { from: pos, to: pos, insert: mark.formatChar } +}); +var rangeIsMark = (state, mark, selection) => posIsMark(selection.from, state, mark.mark) && posIsMark(selection.to, state, mark.mark); +var posIsMark = (pos, state, markString) => { + let isMark = false; + iterateTreeAtPos(pos, state, { + enter: ({ name, from, to }) => { + if (nodeNameContainsMark(name, markString)) + isMark = true; + } + }); + return isMark; +}; +var nodeNameContainsMark = (name, markString) => { + return name.contains(markString); +}; +var edgeIsMark = (pos, state, mark) => posIsMark(pos, state, mark.mark); +var edgeIsMarkFormat = (pos, state, mark) => posIsMark(pos, state, mark.formatting) ? true : mark.altFormatting ? posIsMark(pos, state, mark.altFormatting) : false; +var transactionChangesForMark = (range, mark, state) => { + let newTrans = []; + if (rangeIsMark(state, mark, range)) { + if (edgeIsMarkFormat(range.from, state, mark) && !edgeIsMarkFormat(range.to, state, mark)) { + newTrans.push(addMarkAtPos(range.to, mark)); + } + if (edgeIsMarkFormat(range.to, state, mark) && !edgeIsMarkFormat(range.from, state, mark)) { + newTrans.push(addMarkAtPos(range.from, mark)); + } + } else if (edgeIsMark(range.from, state, mark)) { + if (edgeIsMarkFormat(range.from, state, mark) && !edgeIsMark(range.from - 1, state, mark)) { + newTrans.push(addMarkAtPos(range.from, mark)); + } + newTrans.push(addMarkAtPos(range.to, mark)); + } else if (edgeIsMark(range.to, state, mark)) { + if (edgeIsMarkFormat(range.to, state, mark) && !edgeIsMark(range.to + 1, state, mark)) { + newTrans.push(addMarkAtPos(range.to, mark)); + } + newTrans.push(addMarkAtPos(range.from, mark)); + } else { + newTrans.push(addMarkAtPos(range.to, mark)); + newTrans.push(addMarkAtPos(range.from, mark)); + } + return newTrans; +}; +var removeAllInternalMarks = (sel, state, mark) => { + let returnTrans = []; + iterateTreeInSelection({ from: sel.from, to: sel.to }, state, { + enter: ({ name, from, to }) => { + if (nodeNameContainsMark(name, mark.formatting) || (mark.altFormatting ? nodeNameContainsMark(name, mark.altFormatting) : false)) + returnTrans.push({ + from, + to: from + mark.formatChar.length + }); + } + }); + return { + changes: returnTrans + }; +}; +var toggleMarkExtension = import_state8.EditorState.transactionFilter.of( + (tr) => { + if (!tr.annotation(toggleMark)) + return tr; + const markToggle = tr.annotation(toggleMark); + const mark = oMarks.find((f4) => f4.mark == markToggle); + if (!mark) { + return tr; + } + const selection = tr.startState.selection.main; + let newTrans = []; + if (selection.head == selection.anchor) { + if (tr.startState.sliceDoc( + selection.head - mark.formatChar.length, + selection.head + ) == mark.formatChar && tr.startState.sliceDoc( + selection.head, + selection.head + mark.formatChar.length + ) == mark.formatChar) { + newTrans.push({ + changes: { + from: selection.head - mark.formatChar.length, + to: selection.head + mark.formatChar.length + } + }); + } else { + newTrans.push({ + changes: { + from: selection.head, + insert: mark.formatChar + mark.formatChar + }, + selection: { + anchor: selection.head + mark.formatChar.length, + head: selection.head + mark.formatChar.length + } + }); + } + return [tr, ...newTrans]; + } + const range = expandRange(selection, tr.startState); + newTrans.push(removeAllInternalMarks(range, tr.startState, mark)); + let newFrom = range.from; + let newTo = range.to; + newTrans.push(...transactionChangesForMark(range, mark, tr.startState)); + return [tr, ...newTrans, { selection: { anchor: newFrom, head: newTo } }]; + } +); + +// src/cm-extensions/markSans/selection.ts +var import_state9 = require("@codemirror/state"); +var makerDelete = import_state9.EditorState.transactionFilter.of( + (tr) => { + let newTrans = []; + if (tr.isUserEvent("delete.forward")) { + } + if (tr.isUserEvent("delete.backward") && !tr.isUserEvent("delete.selection") && !tr.isUserEvent("delete.selection.smart")) { + const selection = tr.newSelection.main; + iterateTreeInSelection(selection, tr.startState, { + enter: ({ type, from, to }) => { + const mark = positionMarkOffset(type.name, from, to, tr.startState); + if (mark) { + if (!hasReset(tr.startState, from, to)) { + newTrans.push( + pointDeletion(tr, mark.from, mark.to, selection.from) + ); + } + } + } + }); + } + return [tr, ...newTrans]; + } +); +var reverseSel = (t4) => { + const sel = t4.selection; + return { selection: import_state9.EditorSelection.single(sel.main.head, sel.main.anchor) }; +}; +var selFromTo = (from, to) => { + return { selection: import_state9.EditorSelection.single(from, to) }; +}; +var delFromTo = (tr, from, to) => { + return { + changes: { from, to }, + annotations: import_state9.Transaction.userEvent.of( + `${tr.annotation(import_state9.Transaction.userEvent)}.smart` + ) + }; +}; +var pointDeletion = (tr, from, to, pos) => checkMarkMiddle(from, to, pos) ? deleteMark(tr, from, pos) : null; +var deleteMark = (tr, from, pos) => from == 0 ? delFromTo(tr, from, pos) : delFromTo(tr, from, pos); +var changeSelectionToEndPrevLine = (from, head) => selFromTo(from, head - 1); +var changeSelectionToAfterMark = (head, to) => selFromTo(head, to); +var changeSelectionToMark = (to, head) => selFromTo(to, head); +var rangeBeginsInMark = (from, to, pos) => pos >= from && pos < to; +var rangeEndsAtMark = (from, to, pos) => pos == from; +var pointSelection = (from, to, pos, left) => checkLineStart(from, pos) ? to - from == 1 && left ? selectPreviousLine(from, pos) : selectLineStart(to) : checkMarkMiddle(from, to, pos) ? left && checkMarkMiddleRightMost(from, to, pos) ? selectPreviousLine(from, pos) : selectLineStart(to) : null; +var checkLineStart = (from, pos) => from == pos; +var checkMarkMiddle = (from, to, pos) => pos > from && pos < to; +var checkMarkMiddleRightMost = (from, to, pos) => pos == to - 1; +var selectPreviousLine = (from, pos) => from == 0 ? selFromTo(pos, pos) : selFromTo(from - 1, from - 1); +var selectLineStart = (to) => selFromTo(to, to); +var positionMarkOffset = (typeString, from, to, state) => { + if (typeString.contains("HyperMD-header")) { + return { + from, + to: from + parseInt(typeString.replace(/.*HyperMD-header-(\d+).*/, "$1")) + 1 + }; + } + if (typeString.contains("HyperMD-task-line")) { + return { + from, + to: from + parseInt(typeString.replace(/.*HyperMD-list-line-(\d+).*/, "$1")) + 5 + }; + } + if (typeString.contains("formatting-list-ol")) { + let returnMark = void 0; + iterateTreeInSelection({ from, to }, state, { + enter: ({ type, from: from2, to: to2 }) => { + if (type.name.contains("HyperMD-list-line")) { + returnMark = { + from: from2, + to: from2 + parseInt(type.name.replace(/.*HyperMD-list-line-(\d+).*/, "$1")) + 2 + }; + } + } + }); + return returnMark; + } + if (typeString.contains("HyperMD-list-line")) { + return { + from, + to: from + parseInt(typeString.replace(/.*HyperMD-list-line-(\d+).*/, "$1")) + 1 + }; + } + if (typeString.contains("HyperMD-quote") && !typeString.contains("HyperMD-quote-lazy")) { + return { from, to: from + 1 }; + } + return void 0; +}; +var rangeSelection = (from, to, anchor, head) => { + const minFrom = Math.min(anchor, head); + const maxTo = Math.max(anchor, head); + if (rangeEndsAtMark(from, to, maxTo)) { + const newSel = changeSelectionToAfterMark(minFrom, to); + return minFrom == anchor ? newSel : reverseSel(newSel); + } + if (rangeBeginsInMark(from, to, maxTo)) { + const newSel = changeSelectionToEndPrevLine(minFrom, from); + return minFrom == anchor ? newSel : reverseSel(newSel); + } + if (rangeBeginsInMark(from, to, minFrom)) { + const newSel = changeSelectionToMark(to, maxTo); + return minFrom == head ? newSel : reverseSel(newSel); + } + return null; +}; +var hasReset = (state, from, to) => { + var _a2; + let trueFalse = false; + (_a2 = state.field(hrResetFix, false)) == null ? void 0 : _a2.between(from, to, (f4, t4, v3) => { + trueFalse = true; + }); + return trueFalse; +}; +var makerSelect = import_state9.EditorState.transactionFilter.of( + (tr) => { + let newTrans = []; + if (tr.isUserEvent("delete") || tr.isUserEvent("input")) { + return tr; + } + const selection = tr.newSelection.main; + if (selection.from == 0 && selection.to == 0) + return tr; + iterateTreeInSelection(selection, tr.state, { + enter: ({ type, from, to }) => { + const mark = positionMarkOffset(type.name, from, to, tr.state); + if (mark) { + if (!hasReset(tr.state, from, to)) { + const newSel = selection.from != selection.to ? rangeSelection( + mark.from, + mark.to, + selection.from, + selection.to + ) : pointSelection( + mark.from, + mark.to, + selection.from, + tr.startState.selection.main.from == selection.from + 1 + ); + if (newSel) + newTrans.push(newSel); + } + } + } + }); + return [tr, ...newTrans]; + } +); + +// src/cm-extensions/inlineStylerView/inlineStyler.tsx +var import_state10 = require("@codemirror/state"); + +// src/cm-extensions/inlineStylerView/InlineMenu.tsx +var import_classnames4 = __toESM(require_classnames()); + +// src/cm-extensions/inlineStylerView/Mark.tsx +var Mark = (props2) => { + const { i: i4, style, active, toggleMarkAction } = props2; + return /* @__PURE__ */ bn.createElement("div", { + key: i4, + "aria-label": !platformIsMobile() ? i18n_default.styles[style.label] : void 0, + className: `mk-mark ${style.mark && active ? "mk-mark-active" : ""}`, + dangerouslySetInnerHTML: { __html: markIconSet[style.icon] }, + onMouseDown: (e4) => toggleMarkAction(e4, style) + }); +}; + +// src/cm-extensions/inlineStylerView/styles/default.ts +var default_default = [ + { + label: "bold", + value: `****`, + insertOffset: 2, + icon: "mk-mark-strong", + mark: "strong" + }, + { + label: "italics", + value: "**", + insertOffset: 1, + icon: "mk-mark-em", + mark: "em" + }, + { + label: "strikethrough", + value: "~~~~", + insertOffset: 2, + icon: "mk-mark-strikethrough", + mark: "strikethrough" + }, + { + label: "code", + value: "``", + insertOffset: 1, + icon: "mk-mark-code", + mark: "inline-code" + }, + { + label: "link", + value: "[]()", + insertOffset: 1, + cursorOffset: 2, + icon: "mk-mark-link" + }, + { + label: "blocklink", + value: "[[]]", + insertOffset: 2, + icon: "mk-mark-blocklink" + } +]; + +// src/cm-extensions/inlineStylerView/styles/index.ts +function resolveStyles() { + return default_default; +} + +// src/cm-extensions/inlineStylerView/InlineMenu.tsx +var loadStylerIntoContainer = (el, plugin) => { + const root = createRoot(el); + root.render( + /* @__PURE__ */ bn.createElement(InlineMenuComponent, { + mobile: true, + activeMarks: [], + plugin + }) + ); +}; +var InlineMenuComponent = (props2) => { + const [mode, setMode] = p2(props2.mobile ? 0 : 1); + const [colorMode, setColorMode] = p2(null); + const makeMenu = (e4) => { + var _a2; + e4.preventDefault(); + const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); + if (!cm) + return; + const end = cm.state.selection.main.to; + const insertChars = cm.state.sliceDoc(end - 1, end) == cm.state.lineBreak ? props2.plugin.settings.menuTriggerChar : cm.state.lineBreak + props2.plugin.settings.menuTriggerChar; + cm.dispatch({ + changes: { + from: end, + to: end, + insert: insertChars + }, + selection: { + head: end + insertChars.length, + anchor: end + insertChars.length + } + }); + }; + const toggleMarkAction = (e4, s5) => { + var _a2; + e4.preventDefault(); + const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); + if (!cm) + return; + if (s5.mark) { + cm.dispatch({ + annotations: toggleMark.of(s5.mark) + }); + return; + } + const selection = cm.state.selection.main; + const selectedText = cm.state.sliceDoc(selection.from, selection.to); + cm.dispatch({ + changes: { + from: selection.from, + to: selection.to, + insert: s5.value.substring(0, s5.insertOffset) + selectedText + s5.value.substring(s5.insertOffset) + }, + selection: s5.cursorOffset ? { + anchor: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length + s5.cursorOffset, + head: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length + s5.cursorOffset + } : { + anchor: selection.from + s5.value.substring(0, s5.insertOffset).length, + head: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length + } + }); + }; + const makeMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + "aria-label": !platformIsMobile() ? i18n_default.commands.makeMenu : void 0, + onMouseDown: (e4) => { + makeMenu(e4); }, - { - n: ["scotland flag", "flag-scotland"], - u: "1f3f4-e0067-e0062-e0073-e0063-e0074-e007f" + className: "mk-mark", + dangerouslySetInnerHTML: { __html: markIconSet["mk-make-slash"] } + }), /* @__PURE__ */ bn.createElement("div", { + "aria-label": !platformIsMobile() ? i18n_default.commands.selectStyle : void 0, + onMouseDown: () => { + setMode(1); }, - { - n: ["wales flag", "flag-wales"], - u: "1f3f4-e0067-e0062-e0077-e006c-e0073-e007f" + className: "mk-mark", + dangerouslySetInnerHTML: { __html: markIconSet["mk-make-style"] } + }), /* @__PURE__ */ bn.createElement("div", { + "aria-label": !platformIsMobile() ? i18n_default.commands.image : void 0, + onMouseDown: () => { + const view = getActiveMarkdownView(); + props2.plugin.app.commands.commands["editor:attach-file"].editorCallback(view.editor, view); + }, + className: "mk-mark", + dangerouslySetInnerHTML: { __html: markIconSet["mk-make-attach"] } + }), /* @__PURE__ */ bn.createElement("div", { + "aria-label": !platformIsMobile() ? i18n_default.commands.toggleKeyboard : void 0, + onMouseDown: () => { + const view = getActiveMarkdownView(); + props2.plugin.app.commands.commands["editor:toggle-keyboard"].editorCallback(view.editor, view); + }, + className: "mk-mark", + dangerouslySetInnerHTML: { __html: markIconSet["mk-make-keyboard"] } + })); + const colorsMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: "mk-mark", + onMouseDown: () => { + setColorMode(null); + setMode(1); + }, + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } + }), colors.map((c4, i4) => /* @__PURE__ */ bn.createElement("div", { + key: i4, + onMouseDown: () => { + var _a2; + setMode(1); + setColorMode(null); + const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); + if (!cm) + return; + const selection = cm.state.selection.main; + const selectedText = cm.state.sliceDoc( + selection.from, + selection.to + ); + cm.dispatch({ + changes: { + from: selection.from, + to: selection.to, + insert: colorMode.prefix + c4[1] + colorMode.suffix + selectedText + colorMode.closeTag + } + }); + }, + className: "mk-color", + style: { background: c4[1] } + }))); + const marksMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.mobile ? /* @__PURE__ */ bn.createElement("div", { + className: "mk-mark", + onMouseDown: () => { + setMode(0); + }, + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } + }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), resolveStyles().map((s5, i4) => { + return /* @__PURE__ */ bn.createElement(Mark, { + i: i4, + style: s5, + active: props2.activeMarks.find((f4) => f4 == s5.mark) ? true : false, + toggleMarkAction + }); + }), props2.plugin.settings.inlineStylerColors ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: "mk-divider" + }), /* @__PURE__ */ bn.createElement("div", { + "aria-label": !platformIsMobile() ? i18n_default.styles.textColor : void 0, + onMouseDown: () => { + setMode(2); + setColorMode({ + prefix: ``, + closeTag: "" + }); + }, + className: "mk-mark", + dangerouslySetInnerHTML: { __html: markIconSet["mk-mark-color"] } + }), /* @__PURE__ */ bn.createElement("div", { + "aria-label": !platformIsMobile() ? i18n_default.styles.highlight : void 0, + onMouseDown: () => { + setMode(2); + setColorMode({ + prefix: ``, + closeTag: "" + }); + }, + className: "mk-mark", + dangerouslySetInnerHTML: { + __html: markIconSet["mk-mark-highlight"] + } + })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)); + return /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames4.default)("mk-style-menu", props2.mobile ? "" : "menu"), + onMouseDown: (e4) => e4.preventDefault() + }, mode == 0 && props2.mobile ? makeMode() : mode == 2 ? colorsMode() : marksMode()); +}; + +// src/cm-extensions/inlineStylerView/inlineStyler.tsx +var cursorTooltipField = (plugin) => import_state10.StateField.define({ + create: getCursorTooltips(plugin), + update(tooltips2, tr) { + if (!tr.docChanged && !tr.selection) + return tooltips2; + return getCursorTooltips(plugin)(tr.state); + }, + provide: (f4) => showTooltip.computeN([f4], (state) => state.field(f4)) +}); +var getCursorTooltips = (plugin) => (state) => { + return state.selection.ranges.filter((range) => !range.empty).map((range) => { + const expandedRange = expandRange(range, state); + let line = state.doc.lineAt(range.head); + let activeMarks = oMarks.map((f4) => rangeIsMark(state, f4, expandedRange) ? f4.mark : "").filter((f4) => f4 != ""); + return { + pos: Math.min(range.head, range.anchor), + above: true, + strictSide: true, + arrow: false, + create: (view) => { + let dom = document.createElement("div"); + dom.className = "cm-tooltip-cursor"; + const reactElement = createRoot(dom); + reactElement.render( + /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(InlineMenuComponent, { + plugin, + cm: view, + activeMarks, + mobile: false + })) + ); + return { dom }; + } + }; + }); +}; +function cursorTooltip(plugin) { + return cursorTooltipField(plugin); +} + +// src/cm-extensions/flowEditor/flowViewUpdates.ts +var import_view6 = require("@codemirror/view"); +var flowViewUpdates = import_view6.EditorView.updateListener.of((v3) => { + if (v3.heightChanged) { + app.workspace.iterateRootLeaves((leaf) => { + var _a2, _b2; + const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; + if (cm && v3.view.dom == cm.dom && cm.state.field(flowTypeStateField, false)) { + if ((_b2 = leaf.containerEl.parentElement) == null ? void 0 : _b2.hasClass("workspace-tab-container")) { + if (cm.state.field(flowTypeStateField, false) != "doc") { + cm.dispatch({ + annotations: portalTypeAnnotation.of("doc") + }); + } + } + } + }); + } + if (v3.heightChanged) { + const flowID = v3.state.field(flowIDStateField, false); + if (flowID) { + app.workspace.iterateLeaves((leaf) => { + var _a2; + const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; + if (cm) { + const stateField = cm.state.field(flowEditorInfo, false); + if (stateField) { + if (stateField.find((f4) => f4.id == flowID)) { + cm.dispatch({ + annotations: cacheFlowEditorHeight.of([ + flowID, + v3.view.contentHeight + ]) + }); + } + } + } + }, app.workspace["rootSplit"]); + } + } +}); + +// src/cm-extensions/placeholder.ts +var import_view7 = require("@codemirror/view"); +var import_state11 = require("@codemirror/state"); +var placeholderLine = import_view7.Decoration.line({ + attributes: { "data-ph": i18n_default.labels.placeholder }, + class: "cm-placeholder" +}); +var placeholder = import_state11.StateField.define({ + create() { + return import_view7.Decoration.none; + }, + update(value, tr) { + let builder = new import_state11.RangeSetBuilder(); + const currentLine = tr.state.doc.lineAt(tr.state.selection.main.head); + if ((currentLine == null ? void 0 : currentLine.length) == 0) + builder.add(currentLine.from, currentLine.from, placeholderLine); + const dec = builder.finish(); + return dec; + }, + provide: (f4) => import_view7.EditorView.decorations.from(f4) +}); + +// src/cm-extensions/cmExtensions.ts +var cmExtensions = (plugin, mobile) => { + let extensions = []; + extensions.push(...[toggleMarkExtension, tooltips({ parent: document.body })]); + if (!mobile && plugin.settings.inlineStyler) { + extensions.push(cursorTooltip(plugin)); + } + if (plugin.settings.markSans) { + if (!mobile) { + extensions.push( + hrResetFix, + makerSelect, + makerDelete, + hrField + ); + } + } + if (plugin.settings.makeMenuPlaceholder) + extensions.push(placeholder); + if (plugin.settings.editorFlow) { + extensions.push( + flowTypeStateField, + atomicSelect, + editBlockExtensions(), + preloadFlowEditor, + flowEditorField, + flowEditorInfo, + flowIDStateField, + flowViewUpdates + ); + if (plugin.settings.internalLinkClickFlow) { + extensions.push(internalLinkToggle); + } else { + extensions.push(internalLinkHover); + } + } + return extensions; +}; + +// src/components/MakeMenu/MakeMenu.tsx +var import_obsidian24 = require("obsidian"); + +// src/components/MakeMenu/commands/default.ts +var default_default2 = [ + { + label: "todo", + value: "- [ ] ", + icon: "mk-make-todo" + }, + { + label: "list", + value: `- `, + icon: "mk-make-list" + }, + { + label: "ordered-list", + value: `1. `, + icon: "mk-make-ordered" + }, + { + label: "h1", + value: "# ", + icon: "mk-make-h1" + }, + { + label: "h2", + value: "## ", + icon: "mk-make-h2" + }, + { + label: "h3", + value: "### ", + icon: "mk-make-h3" + }, + { + label: "quote", + value: "> ", + icon: "mk-make-quote" + }, + { + label: "divider", + value: ` +--- +`, + icon: "mk-make-hr" + }, + { + label: "link", + value: "", + offset: [-1, 1], + icon: "mk-make-link" + }, + { + label: "image", + value: "![](Paste Link)", + offset: [-1, 4], + icon: "mk-make-image" + }, + { + label: "codeblock", + value: ` +\`\`\` +Type/Paste Your Code +\`\`\``, + offset: [-4, 5], + icon: "mk-make-codeblock" + }, + { + label: "callout", + value: `> [!NOTE] +> Content`, + offset: [-7, 12], + icon: "mk-make-callout" + }, + { + label: "note", + value: "[[Note Name]]", + offset: [-2, 2], + icon: "mk-make-note" + }, + { + label: "table", + value: "table", + icon: "mk-make-table" + }, + { + label: "flow", + value: `!![[Note Name]]`, + offset: [-2, 4], + icon: "mk-make-flow" + }, + { + label: "tag", + value: "#tag", + offset: [0, 1], + icon: "mk-make-tag" + } +]; + +// src/components/MakeMenu/commands/index.ts +function resolveCommands(plugin) { + return default_default2; +} + +// src/components/MakeMenu/MakeMenu.tsx +var MakeMenu = class extends import_obsidian24.EditorSuggest { + constructor(app2, plugin) { + super(app2); + this.inCmd = false; + this.cmdStartCh = 0; + this.plugin = plugin; + } + resetInfos() { + this.cmdStartCh = 0; + this.inCmd = false; + } + onTrigger(cursor, editor, _file) { + const currentLine = editor.getLine(cursor.line).slice(0, cursor.ch); + const triggerCharLength = this.plugin.settings.menuTriggerChar.length; + this.file = _file; + if (!this.inCmd && currentLine.slice(0, triggerCharLength) !== this.plugin.settings.menuTriggerChar && currentLine.slice(-2 - triggerCharLength) !== "- " + this.plugin.settings.menuTriggerChar) { + this.resetInfos(); + return null; + } + if (!this.inCmd) { + this.cmdStartCh = currentLine.length - triggerCharLength; + this.inCmd = true; + } + const currentCmd = currentLine.slice(this.cmdStartCh, cursor.ch); + if (currentCmd.includes(" ") || !currentCmd.includes(this.plugin.settings.menuTriggerChar)) { + this.resetInfos(); + return null; + } + return { + start: cursor, + end: cursor, + query: currentCmd.slice(triggerCharLength) + }; + } + getSuggestions(context) { + const suggestions = resolveCommands(this.plugin).filter( + ({ label }) => label.toLowerCase().includes(context.query.toLowerCase()) || i18n_default.commands[label] && i18n_default.commands[label].toLowerCase().includes(context.query.toLowerCase()) + ); + return suggestions.length > 0 ? suggestions : [{ label: i18n_default.commandsSuggest.noResult, value: "", icon: "" }]; + } + renderSuggestion(value, el) { + if (value.value == "") { + el.setText(i18n_default.commandsSuggest.noResult); + return; + } + const div = el.createDiv("mk-slash-item"); + const icon = div.createDiv("mk-slash-icon"); + icon.innerHTML = makeIconSet[value.icon]; + const title = div.createDiv(); + title.setText(i18n_default.commands[value.label]); + } + selectSuggestion(cmd, _evt) { + if (cmd.label === i18n_default.commandsSuggest.noResult) + return; + if (cmd.value == "table") { + this.plugin.createTable(this.file.parent.path).then((f4) => { + this.context.editor.replaceRange( + `![![${this.file.parent.path}/#^${f4}]]`, + { ...this.context.start, ch: this.cmdStartCh }, + this.context.end + ); + this.context.editor.setSelection({ + line: this.context.start.line, + ch: 0 + }); + this.resetInfos(); + this.close(); + }); + } else { + this.context.editor.replaceRange( + cmd.value, + { ...this.context.start, ch: this.cmdStartCh }, + this.context.end + ); + if (cmd.offset) { + this.context.editor.setSelection( + { ...this.context.start, ch: this.cmdStartCh + cmd.offset[1] }, + { + ...this.context.end, + ch: this.cmdStartCh + cmd.value.length + cmd.offset[0] + } + ); + } + this.resetInfos(); + this.close(); + } + } +}; + +// src/components/StickerMenu/StickerMenu.tsx +var import_obsidian25 = require("obsidian"); +var StickerMenu = class extends import_obsidian25.EditorSuggest { + constructor(app2, plugin) { + super(app2); + this.inCmd = false; + this.cmdStartCh = 0; + this.plugin = plugin; + this.emojis = Object.keys(emojis).reduce( + (p3, c4) => [ + ...p3, + ...emojis[c4].map((e4) => ({ + label: e4.n[0], + desc: e4.n[1], + variants: e4.v, + unicode: e4.u + })) + ], + [] + ); + } + resetInfos() { + this.cmdStartCh = 0; + this.inCmd = false; + } + onTrigger(cursor, editor, _file) { + const currentLine = editor.getLine(cursor.line).slice(0, cursor.ch); + if (!this.inCmd && !(currentLine.slice(-2) == " " + this.plugin.settings.emojiTriggerChar || currentLine[0] == this.plugin.settings.emojiTriggerChar)) { + this.resetInfos(); + return null; } - ] + if (!this.inCmd) { + this.cmdStartCh = currentLine.length - 1; + this.inCmd = true; + } + const currentCmd = currentLine.slice(this.cmdStartCh, cursor.ch); + if (currentCmd.includes(" ") || !currentCmd.includes(this.plugin.settings.emojiTriggerChar)) { + this.resetInfos(); + return null; + } + this.suggestEl.classList.toggle("mk-emoji-menu", true); + return { start: cursor, end: cursor, query: currentCmd.slice(1) }; + } + getSuggestions(context) { + const suggestions = this.emojis.filter( + ({ label, desc }) => label.includes(context.query) || (desc == null ? void 0 : desc.includes(context.query)) + ); + return suggestions.length > 0 ? suggestions : [{ label: i18n_default.commandsSuggest.noResult, unicode: "", desc: "" }]; + } + renderSuggestion(value, el) { + const div = document.createElement("div"); + div.setAttribute("aria-label", value.label); + const reactElement = createRoot(div); + reactElement.render( + /* @__PURE__ */ bn.createElement(bn.Fragment, null, value.unicode.length > 0 ? unifiedToNative(value.unicode) : i18n_default.commandsSuggest.noResult) + ); + el.appendChild(div); + } + selectSuggestion(cmd, _evt) { + if (cmd.label === i18n_default.commandsSuggest.noResult) + return; + this.context.editor.replaceRange( + unifiedToNative(cmd.unicode), + { ...this.context.start, ch: this.cmdStartCh }, + this.context.end + ); + this.resetInfos(); + this.close(); + } }; -// src/schemas/spaces.ts -var vaultSchema = { - uniques: ["path"], - cols: ["path", "parent", "created", "sticker", "color", "folder", "rank"], - rows: [] -}; -var spaceSchema = { - uniques: ["name"], - cols: ["name", "sticker", "color", "pinned", "sort", "def", "rank"], - rows: [] -}; -var spaceItemsSchema = { - uniques: [], - cols: ["space", "path", "rank"], - rows: [] -}; +// src/main.ts +var import_obsidian39 = require("obsidian"); -// src/dispatch/spaces.ts -var dispatchSpaceDatabaseFileChanged = (type) => { - let evt = new CustomEvent(eventTypes.spacesChange, { - detail: { - changeType: type +// src/utils/flow/markdownPost.tsx +var getCMFromElement = (el) => { + let dom = el; + while (!dom.hasClass("cm-editor") && dom.parentElement) { + dom = dom.parentElement; + } + if (!dom.hasClass("cm-editor")) { + return; + } + let rcm; + app.workspace.iterateLeaves((leaf) => { + var _a2; + const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; + if (cm && dom == cm.dom) { + rcm = cm; + return true; } - }); - window.dispatchEvent(evt); + }, app.workspace["rootSplit"]); + return rcm; }; -var onFileCreated2 = async (plugin, newPath, folder) => { - var _a2; - const parent = (_a2 = getAbstractFileAtPath(app, newPath).parent) == null ? void 0 : _a2.path; - const db = plugin.spaceDBInstance(); - insertIntoDB(db, { - "vault": { - ...vaultSchema, - rows: [{ - path: newPath, - parent, - created: Math.trunc(Date.now() / 1e3).toString(), - folder: folder ? "true" : "false" - }] +var replaceAllEmbed = (el, ctx) => { + let dom = el; + setTimeout(async () => { + let counter = 0; + while (!el.parentElement && counter++ <= 50) + await sleep(50); + if (!el.parentElement) + return; + while (!dom.hasClass("markdown-embed") && dom.parentElement) { + dom = dom.parentElement; + } + if (dom) { + var nodes2 = dom.querySelectorAll(".markdown-embed-link"); + for (var i4 = 0; i4 < nodes2.length; i4++) { + if (nodes2[i4].parentNode === dom) { + dom.removeChild(nodes2[i4]); + const div = dom.createDiv("mk-floweditor-selector"); + const reactEl = createRoot(div); + reactEl.render( + /* @__PURE__ */ bn.createElement(FlowEditorHover, { + toggle: true, + type: "file", + toggleState: false, + toggleFlow: (e4) => { + const cm = getCMFromElement(dom); + const pos = cm == null ? void 0 : cm.posAtDOM(dom); + if (!cm) + return; + iterateTreeInSelection( + { from: pos - 3, to: pos + 4 }, + cm.state, + { + enter: (node) => { + if (node.name.contains("hmd-internal-link")) { + if (cm.state.sliceDoc(node.from - 4, node.from - 3) != "!") { + if (cm.state.sliceDoc(node.to + 2, node.to + 3) != cm.state.lineBreak) { + cm.dispatch({ + changes: [ + { + from: node.from - 3, + to: node.from - 3, + insert: "!" + }, + { + from: node.to + 2, + to: node.to + 2, + insert: cm.state.lineBreak + } + ] + }); + } else { + cm.dispatch({ + changes: { + from: node.from - 3, + to: node.from - 3, + insert: "!" + } + }); + } + } + } + } + } + ); + e4.stopPropagation(); + }, + openLink: (e4) => { + e4.stopPropagation(); + openFileFlowEditor(ctx.sourcePath, "/"); + } + }) + ); + } + } } }); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("vault"); }; -var onFileDeleted2 = (plugin, oldPath) => { - const db = plugin.spaceDBInstance(); - deleteFromDB(db, "vault", `path = '${sanitizeSQLStatement(oldPath)}'`); - deleteFromDB(db, "spaceItems", `path = '${sanitizeSQLStatement(oldPath)}'`); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("vault"); + +// src/components/Spaces/FileTreeView.tsx +var import_obsidian31 = require("obsidian"); + +// node_modules/recoil/es/recoil.js +function isPromise(p3) { + return !!p3 && typeof p3.then === "function"; +} +var Recoil_isPromise = isPromise; +function nullthrows(x5, message) { + if (x5 != null) { + return x5; + } + throw new Error(message !== null && message !== void 0 ? message : "Got unexpected null or undefined"); +} +var Recoil_nullthrows = nullthrows; +var Canceled = class { }; -var onFileChanged2 = (plugin, oldPath, newPath) => { - const newFolderPath = getFolderPathFromString2(newPath); - const db = plugin.spaceDBInstance(); - updateDB(db, { - "vault": { - uniques: [], - cols: ["path", "parent"], - rows: [{ path: newPath, oldPath, parent: newFolderPath }] - } - }, "path", "oldPath"); - updateDB(db, { - "spaceItems": { - uniques: [], - cols: ["path"], - rows: [{ path: newPath, oldPath }] - } - }, "path", "oldPath"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("vault"); +var CANCELED = new Canceled(); +var loadableAccessors = { + valueMaybe() { + return void 0; + }, + valueOrThrow() { + const error = new Error( + `Loadable expected value, but in "${this.state}" state` + ); + throw error; + }, + errorMaybe() { + return void 0; + }, + errorOrThrow() { + const error = new Error( + `Loadable expected error, but in "${this.state}" state` + ); + throw error; + }, + promiseMaybe() { + return void 0; + }, + promiseOrThrow() { + const error = new Error( + `Loadable expected promise, but in "${this.state}" state` + ); + throw error; + }, + is(other) { + return other.state === this.state && other.contents === this.contents; + }, + map(map) { + if (this.state === "hasError") { + return this; + } + if (this.state === "hasValue") { + try { + const next = map(this.contents); + return Recoil_isPromise(next) ? loadableWithPromise(next.then((value) => ({ + __value: value + }))) : loadableWithValue(next); + } catch (e4) { + return Recoil_isPromise(e4) ? loadableWithPromise(e4.next(() => map(this.contents))) : loadableWithError(e4); + } + } + if (this.state === "loading") { + return loadableWithPromise( + this.contents.then((value) => ({ + __value: map(value.__value) + })).catch((e4) => { + if (Recoil_isPromise(e4)) { + return e4.then(() => map(this.contents)); + } + throw e4; + }) + ); + } + const error = new Error("Invalid Loadable state"); + throw error; + } }; -var onFolderChanged2 = (plugin, oldPath, newPath) => { - const newFolderPath = getFolderFromPath(app, newPath).parent.path; - const db = plugin.spaceDBInstance(); - updateDB(db, { - "vault": { - uniques: [], - cols: ["path", "parent"], - rows: [{ path: newPath, oldPath, parent: newFolderPath }] - } - }, "path", "oldPath"); - execQuery(db, `UPDATE vault SET parent=REPLACE(parent,'${sanitizeSQLStatement(oldPath)}','${sanitizeSQLStatement(newPath)}') WHERE parent LIKE '${sanitizeSQLStatement(oldPath)}%';`); - execQuery(db, `UPDATE vault SET path=REPLACE(path,'${sanitizeSQLStatement(oldPath)}','${sanitizeSQLStatement(newPath)}') WHERE path LIKE '${sanitizeSQLStatement(oldPath)}%/';`); - updateDB(db, { - "spaceItems": { - uniques: [], - cols: ["path"], - rows: [{ path: newPath, oldPath }] - } - }, "path", "oldPath"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("vault"); +function loadableWithValue(value) { + return Object.freeze({ + state: "hasValue", + contents: value, + ...loadableAccessors, + getValue() { + return this.contents; + }, + toPromise() { + return Promise.resolve(this.contents); + }, + valueMaybe() { + return this.contents; + }, + valueOrThrow() { + return this.contents; + } + }); +} +function loadableWithError(error) { + return Object.freeze({ + state: "hasError", + contents: error, + ...loadableAccessors, + getValue() { + throw this.contents; + }, + toPromise() { + return Promise.reject(this.contents); + }, + errorMaybe() { + return this.contents; + }, + errorOrThrow() { + return this.contents; + } + }); +} +function loadableWithPromise(promise) { + return Object.freeze({ + state: "loading", + contents: promise, + ...loadableAccessors, + getValue() { + throw this.contents.then(({ + __value + }) => __value); + }, + toPromise() { + return this.contents.then(({ + __value + }) => __value); + }, + promiseMaybe() { + return this.contents.then(({ + __value + }) => __value); + }, + promiseOrThrow() { + return this.contents.then(({ + __value + }) => __value); + } + }); +} +function loadableLoading() { + return loadableWithPromise(new Promise(() => { + })); +} +function loadableAll(inputs) { + return inputs.every((i4) => i4.state === "hasValue") ? loadableWithValue(inputs.map((i4) => i4.contents)) : inputs.some((i4) => i4.state === "hasError") ? loadableWithError(Recoil_nullthrows(inputs.find((i4) => i4.state === "hasError"), "Invalid loadable passed to loadableAll").contents) : loadableWithPromise(Promise.all(inputs.map((i4) => i4.contents)).then((value) => ({ + __value: value + }))); +} +var Recoil_Loadable = { + loadableWithValue, + loadableWithError, + loadableWithPromise, + loadableLoading, + loadableAll, + Canceled, + CANCELED }; -var onFolderDeleted2 = (plugin, oldPath) => { - const db = plugin.spaceDBInstance(); - deleteFromDB(db, "vault", `path = '${sanitizeSQLStatement(oldPath)}' OR parent LIKE '${sanitizeSQLStatement(oldPath)}%'`); - deleteFromDB(db, "spaceItems", `path = '${sanitizeSQLStatement(oldPath)}'`); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("vault"); +var _useMutableSource; +var useMutableSource = (_useMutableSource = bn.useMutableSource) !== null && _useMutableSource !== void 0 ? _useMutableSource : bn.unstable_useMutableSource; +function mutableSourceExists() { + return useMutableSource && !(typeof window !== "undefined" && window.$disableRecoilValueMutableSource_TEMP_HACK_DO_NOT_USE); +} +var Recoil_mutableSource = { + mutableSourceExists, + useMutableSource }; - -// src/utils/spaces/spaces.ts -var import_obsidian13 = require("obsidian"); - -// src/utils/array.ts -var insert = (arr, index, newItem) => [ - ...arr.slice(0, index), - newItem, - ...arr.slice(index) -]; - -// src/utils/spaces/spaces.ts -var rebuildIndex = async (plugin) => { - console.time("Reindex Spaces Data"); - const db = plugin.spaceDBInstance(); - indexCurrentFileTree(db); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("vault"); - console.timeEnd("Reindex Spaces Data"); +var { + mutableSourceExists: mutableSourceExists$1 +} = Recoil_mutableSource; +var gks = (/* @__PURE__ */ new Map()).set("recoil_hamt_2020", true).set("recoil_memory_managament_2020", true).set("recoil_suppress_rerender_in_callback", true); +function Recoil_gkx(gk) { + var _gks$get; + if (gk === "recoil_early_rendering_2021" && !mutableSourceExists$1()) { + return false; + } + return (_gks$get = gks.get(gk)) !== null && _gks$get !== void 0 ? _gks$get : false; +} +Recoil_gkx.setPass = (gk) => { + gks.set(gk, true); }; -var spaceItemToTreeNode = (space, collapsed, sortable) => { - return { id: space.name, spaceItem: space, parentId: null, depth: 0, index: 0, space: space.name, item: null, collapsed, sortable }; +Recoil_gkx.setFail = (gk) => { + gks.set(gk, false); }; -var vaulItemToTreeNode = (item, space, path, depth, i4, collapsed, sortable) => ({ - item, - file: getAbstractFileAtPath(app, item.path), - space, - id: (space == "/" ? "" : space) + "//" + item.path, - parentId: (space == "/" ? "" : space) + "//" + path, - depth, - index: i4, - collapsed, - sortable -}); -var folderSortFn = (sortStrategy, direction) => (a5, b4) => { - if (sortStrategy == "rank") { - return a5.rank.localeCompare(b4.rank, void 0, { numeric: true }); +var Recoil_gkx_1 = Recoil_gkx; +function recoverableViolation(message, projectName, { + error +} = {}) { + if (true) { + console.error(message, error); } - const sortFns = [compareByField("folder", false), compareByField(sortStrategy, direction)]; - return sortFns.reduce((p3, c4) => { - return p3 == 0 ? c4(a5, b4) : p3; - }, 0); + return null; +} +var recoverableViolation_1 = recoverableViolation; +var Recoil_recoverableViolation = recoverableViolation_1; +function setByAddingToSet(set, v3) { + const next = new Set(set); + next.add(v3); + return next; +} +function setByDeletingFromSet(set, v3) { + const next = new Set(set); + next.delete(v3); + return next; +} +function mapBySettingInMap(map, k5, v3) { + const next = new Map(map); + next.set(k5, v3); + return next; +} +function mapByUpdatingInMap(map, k5, updater) { + const next = new Map(map); + next.set(k5, updater(next.get(k5))); + return next; +} +function mapByDeletingFromMap(map, k5) { + const next = new Map(map); + next.delete(k5); + return next; +} +function mapByDeletingMultipleFromMap(map, ks) { + const next = new Map(map); + ks.forEach((k5) => next.delete(k5)); + return next; +} +var Recoil_CopyOnWrite = { + setByAddingToSet, + setByDeletingFromSet, + mapBySettingInMap, + mapByUpdatingInMap, + mapByDeletingFromMap, + mapByDeletingMultipleFromMap }; -var flattenedTreeFromVaultItems = (root, space, vaultItems, openNodes, depth, sortStrategy, direction) => { - if (!vaultItems[root]) { - return []; +function* filterIterable(iterable, predicate) { + let index = 0; + for (const value of iterable) { + if (predicate(value, index++)) { + yield value; + } } - const flattenTree = (path, vaultItems2, openNodes2, depth2, index) => { - let items = []; - let i4 = index; - vaultItems2[path].sort(folderSortFn(sortStrategy, direction)).forEach((item) => { - const collapsed = !openNodes2.includes(item.path); - const node = vaulItemToTreeNode(item, space, path, depth2, i4, collapsed, sortStrategy == "rank"); - if (node.file) - items.push(node); - i4 = i4 + 1; - if (vaultItems2[item.path] && !collapsed) { - items.push(...flattenTree(item.path, vaultItems2, openNodes2, depth2 + 1, i4)); - } +} +var Recoil_filterIterable = filterIterable; +function mapIterable(iterable, callback) { + return function* () { + let index = 0; + for (const value of iterable) { + yield callback(value, index++); + } + }(); +} +var Recoil_mapIterable = mapIterable; +function sprintf(format2, ...args) { + let index = 0; + return format2.replace(/%s/g, () => String(args[index++])); +} +var sprintf_1 = sprintf; +function expectationViolation(format2, ...args) { + if (true) { + const message = sprintf_1.call(null, format2, ...args); + const error = new Error(message); + error.name = "Expectation Violation"; + console.error(error); + } +} +var expectationViolation_1 = expectationViolation; +var Recoil_expectationViolation = expectationViolation_1; +function _defineProperty(obj, key2, value) { + if (key2 in obj) { + Object.defineProperty(obj, key2, { + value, + enumerable: true, + configurable: true, + writable: true }); - return items; - }; - return flattenTree(root, vaultItems, openNodes, depth, 0); + } else { + obj[key2] = value; + } + return obj; +} +var AbstractRecoilValue = class { + constructor(newKey) { + _defineProperty(this, "key", void 0); + this.key = newKey; + } }; -var vaultItemForPath = (plugin, path) => { - var _a2; - if (!path) - return null; - const db = plugin.spaceDBInstance(); - const table = selectDB(db, "vault", `path='${sanitizeSQLStatement(path)}'`); - return (_a2 = table == null ? void 0 : table.rows) == null ? void 0 : _a2[0]; +var RecoilState = class extends AbstractRecoilValue { }; -var saveFileSticker = (plugin, path, sticker) => { - const db = plugin.spaceDBInstance(); - updateDB(db, { - vault: { - ...vaultSchema, - cols: ["path", "sticker"], - rows: [{ path, sticker }] - } - }, "path", "path"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("sticker"); +var RecoilValueReadOnly = class extends AbstractRecoilValue { }; -var saveFileColor = (plugin, path, color) => { - const db = plugin.spaceDBInstance(); - updateDB(db, { - vault: { - ...vaultSchema, - cols: ["path", "color"], - rows: [{ path, color }] - } - }, "path", "path"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("sticker"); +function isRecoilValue(x5) { + return x5 instanceof RecoilState || x5 instanceof RecoilValueReadOnly; +} +var Recoil_RecoilValue = { + AbstractRecoilValue, + RecoilState, + RecoilValueReadOnly, + isRecoilValue }; -var saveSpaceSticker = (plugin, name, sticker) => { - const db = plugin.spaceDBInstance(); - updateDB(db, { - spaces: { - ...spaceSchema, - cols: ["name", "sticker"], - rows: [{ name, sticker }] - } - }, "name", "name"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("space"); +var Recoil_RecoilValue_1 = Recoil_RecoilValue.AbstractRecoilValue; +var Recoil_RecoilValue_2 = Recoil_RecoilValue.RecoilState; +var Recoil_RecoilValue_3 = Recoil_RecoilValue.RecoilValueReadOnly; +var Recoil_RecoilValue_4 = Recoil_RecoilValue.isRecoilValue; +var Recoil_RecoilValue$1 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + AbstractRecoilValue: Recoil_RecoilValue_1, + RecoilState: Recoil_RecoilValue_2, + RecoilValueReadOnly: Recoil_RecoilValue_3, + isRecoilValue: Recoil_RecoilValue_4 +}); +var DefaultValue = class { }; -var updateFileRank = (plugin, item, vaultTree, rank) => { - const db = plugin.spaceDBInstance(); - if (Object.keys(vaultTree).includes(item.parent)) { - let fixedRank = rank; - if (parseInt(item.rank) > rank) - fixedRank = rank + 1; - const newItems = insert(vaultTree[item.parent].filter((f4) => f4.path != item.path), fixedRank, item).map((f4, index) => ({ path: f4.path, rank: index.toString() })); - updateDB(db, { - vault: { - ...vaultSchema, - cols: ["path", "rank"], - rows: newItems - } - }, "path", "path"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("vault"); +var DEFAULT_VALUE = new DefaultValue(); +var RecoilValueNotReady = class extends Error { + constructor(key2) { + super(`Tried to set the value of Recoil selector ${key2} using an updater function, but it is an async selector in a pending or error state; this is not supported.`); } }; -var moveAFileToNewParentAtIndex = (plugin, item, newParent, vaultTree, index) => { - var _a2; - const currFile = getAbstractFileAtPath(app, item.path); - const newPath = newParent == "/" ? currFile.name : newParent + "/" + currFile.name; - const newItem = { - ...item, - path: newPath, - parent: newParent, - rank: index.toString() - }; - if (Object.keys(vaultTree).includes(newParent)) { - vaultTree[newParent] = insert(vaultTree[newParent], index, newItem); - const db = plugin.spaceDBInstance(); - const table = selectDB(db, "vault", `parent='${sanitizeSQLStatement(newParent)}'`); - const rows = insert((_a2 = table == null ? void 0 : table.rows.sort((a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true }))) != null ? _a2 : [], index, newItem).map((f4, index2) => ({ ...f4, rank: index2.toString() })); - insertIntoDB(db, { - vault: { - ...vaultSchema, - rows: [newItem] - } - }); - deleteFromDB(db, "vault", `path='${sanitizeSQLStatement(item.path)}'`); - updateDB(db, { - vault: { - ...vaultSchema, - cols: ["path", "rank"], - rows - } - }, "path", "path"); - plugin.saveSpacesDB(); - const afile = getAbstractFileAtPath(app, item.path); - app.fileManager.renameFile( - afile, - newPath - ); - } else { - const afile = getAbstractFileAtPath(app, item.path); - app.fileManager.renameFile( - afile, - newPath - ); +var nodes = /* @__PURE__ */ new Map(); +var recoilValues = /* @__PURE__ */ new Map(); +function recoilValuesForKeys(keys) { + return Recoil_mapIterable(keys, (key2) => Recoil_nullthrows(recoilValues.get(key2))); +} +function registerNode(node) { + if (nodes.has(node.key)) { + const message = `Duplicate atom key "${node.key}". This is a FATAL ERROR in + production. But it is safe to ignore this warning if it occurred because of + hot module replacement.`; + console.warn(message); } + nodes.set(node.key, node); + const recoilValue = node.set == null ? new Recoil_RecoilValue$1.RecoilValueReadOnly(node.key) : new Recoil_RecoilValue$1.RecoilState(node.key); + recoilValues.set(node.key, recoilValue); + return recoilValue; +} +var NodeMissingError = class extends Error { }; -var insertSpaceAtIndex = (plugin, space, pinned, rank, def) => { - const db = plugin.spaceDBInstance(); - let newSpace = { name: space, pinned: pinned ? "true" : "false", def }; - const spaces2 = retrieveSpaces(plugin); - const spaceExists = spaces2.find((f4) => f4.name == space); - let fixedRank = rank; - if (spaceExists) { - updateDB(db, { - spaces: { - ...spaceSchema, - rows: [{ ...spaceExists, ...newSpace }] - } - }, "name", "name"); - if (parseInt(spaceExists.rank) < rank) - fixedRank = rank - 1; - } else { - insertIntoDB(db, { - spaces: { - ...spaceSchema, - rows: [newSpace] - } - }); +function getNode(key2) { + const node = nodes.get(key2); + if (node == null) { + throw new NodeMissingError(`Missing definition for RecoilValue: "${key2}""`); } - const newSpaces = insert(spaces2.filter((f4) => f4.name != space), fixedRank, newSpace).map((f4, index) => ({ name: f4.name, rank: index.toString() })); - updateDB(db, { - spaces: { - ...spaceSchema, - cols: ["name", "rank"], - rows: newSpaces - } - }, "name", "name"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("space"); -}; -var insertSpaceItemAtIndex = (plugin, spaceName, path, rank) => { - var _a2; - const db = plugin.spaceDBInstance(); - const space = retrieveSpaces(plugin).find((f4) => f4.name == spaceName); - if (!space) + return node; +} +function getNodeMaybe(key2) { + return nodes.get(key2); +} +var configDeletionHandlers = /* @__PURE__ */ new Map(); +function deleteNodeConfigIfPossible(key2) { + var _node$shouldDeleteCon; + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; - let newSpace = { space: space.name, path, rank: rank.toString() }; - const spaceItems = retrieveSpaceItems(plugin, [space]); - const spaceExists = (_a2 = spaceItems[space.name]) != null ? _a2 : []; - const pathExists = spaceExists.find((f4) => f4.path == path); - let fixedRank = rank; - if (!pathExists) { - insertIntoDB(db, { - spaceItems: { - ...spaceItemsSchema, - rows: [newSpace] - } - }); - fixedRank = rank + 1; + } + const node = nodes.get(key2); + if (node === null || node === void 0 ? void 0 : (_node$shouldDeleteCon = node.shouldDeleteConfigOnRelease) === null || _node$shouldDeleteCon === void 0 ? void 0 : _node$shouldDeleteCon.call(node)) { + var _getConfigDeletionHan; + nodes.delete(key2); + (_getConfigDeletionHan = getConfigDeletionHandler(key2)) === null || _getConfigDeletionHan === void 0 ? void 0 : _getConfigDeletionHan(); + configDeletionHandlers.delete(key2); + } +} +function setConfigDeletionHandler(key2, fn2) { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; + } + if (fn2 === void 0) { + configDeletionHandlers.delete(key2); } else { - if (parseInt(pathExists.rank) > rank) - fixedRank = rank + 1; + configDeletionHandlers.set(key2, fn2); } - const newSpaceItems = insert(spaceExists.filter((f4) => f4.path != path), fixedRank, newSpace).map((f4, index) => ({ space: f4.space, path: f4.path, rank: index.toString() })); - updateDB(db, { - spaceItems: { - ...spaceItemsSchema, - rows: newSpaceItems - } - }, `space='${space.name}' AND path`, "path"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("space"); -}; -var renameSpace = (plugin, space, newName) => { - const db = plugin.spaceDBInstance(); - updateDB(db, { - spaces: { - ...spaceSchema, - cols: ["name"], - rows: [{ oldName: space, name: newName }] - } - }, "name", "oldName"); - updateDB(db, { - spaceItems: { - ...spaceItemsSchema, - cols: ["space"], - rows: [{ oldSpace: space, space: newName }] - } - }, "space", "oldSpace"); - plugin.saveSpacesDB(); - plugin.settings.expandedSpaces = plugin.settings.expandedSpaces.map((f4) => f4 == space ? newName : f4); - plugin.saveSettings(); - dispatchSpaceDatabaseFileChanged("space"); -}; -var removeSpace = (plugin, space) => { - const db = plugin.spaceDBInstance(); - deleteFromDB(db, "spaces", `name='${sanitizeSQLStatement(space)}'`); - deleteFromDB(db, "spaceItems", `space='${sanitizeSQLStatement(space)}'`); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("space"); -}; -var updateSpaceSort = (plugin, space, sort) => { - const db = plugin.spaceDBInstance(); - updateDB(db, { - spaces: { - ...spaceSchema, - cols: ["name", "sort"], - rows: [{ name: space, sort: JSON.stringify(sort) }] - } - }, "name", "name"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("space"); +} +function getConfigDeletionHandler(key2) { + return configDeletionHandlers.get(key2); +} +var Recoil_Node = { + nodes, + recoilValues, + registerNode, + getNode, + getNodeMaybe, + deleteNodeConfigIfPossible, + setConfigDeletionHandler, + getConfigDeletionHandler, + recoilValuesForKeys, + NodeMissingError, + DefaultValue, + DEFAULT_VALUE, + RecoilValueNotReady }; -var toggleSpacePin = (plugin, space, state) => { - const db = plugin.spaceDBInstance(); - updateDB(db, { - spaces: { - ...spaceSchema, - cols: ["name", "pinned"], - rows: [{ name: space, pinned: state ? "true" : "false" }] - } - }, "name", "name"); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("space"); +var RetentionZone = class { }; -var addPathsToSpace = (plugin, space, paths) => { - const db = plugin.spaceDBInstance(); - insertIntoDB(db, { - spaceItems: { - ...spaceItemsSchema, - rows: [...paths.map((p3) => ({ space, path: p3 }))] - } - }); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("space"); +function retentionZone() { + return new RetentionZone(); +} +var Recoil_RetentionZone = { + RetentionZone, + retentionZone }; -var removePathsFromSpace = (plugin, space, paths) => { - const db = plugin.spaceDBInstance(); - paths.forEach((path) => deleteFromDB(db, "spaceItems", `space='${sanitizeSQLStatement(space)}' AND path='${sanitizeSQLStatement(path)}'`)); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("space"); +var { + setByAddingToSet: setByAddingToSet$1 +} = Recoil_CopyOnWrite; +var { + getNode: getNode$1, + getNodeMaybe: getNodeMaybe$1, + recoilValuesForKeys: recoilValuesForKeys$1 +} = Recoil_Node; +var { + RetentionZone: RetentionZone$1 +} = Recoil_RetentionZone; +var emptySet = Object.freeze(/* @__PURE__ */ new Set()); +var ReadOnlyRecoilValueError = class extends Error { }; -var retrieveSpaces = (plugin) => { - const db = plugin.spaceDBInstance(); - const table = selectDB(db, "spaces"); - if (table) { - return table.rows.sort((a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true })); +function initializeRetentionForNode(store, nodeKey, retainedBy) { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return () => void 0; } - return []; -}; -var retrieveSpaceItems = (plugin, spaces2) => { - const db = plugin.spaceDBInstance(); - let retrievedSpaces = {}; - spaces2.forEach((space) => { - var _a2, _b2, _c2, _d2; - const table = selectDB(db, "spaceItems", `space='${sanitizeSQLStatement(space.name)}'`); - let rows = (_a2 = table == null ? void 0 : table.rows) != null ? _a2 : []; - if (((_b2 = space.def) == null ? void 0 : _b2.length) > 0) { - const spaceItems = ((_d2 = (_c2 = selectDB(db, "vault", `parent='${sanitizeSQLStatement(space.def)}'`)) == null ? void 0 : _c2.rows) != null ? _d2 : []).filter(excludeVaultItemPredicate(plugin)); - const extraItems = rows.filter((f4) => !spaceItems.some((g4) => g4.path == f4.path)); - rows = rows.filter((f4) => !extraItems.some((g4) => f4.path == g4.path)); - extraItems.forEach( - (row) => deleteFromDB(db, "spaceItems", `space='${sanitizeSQLStatement(space.name)}' AND path='${sanitizeSQLStatement(row.path)}'`) - ); - spaceItems.forEach((row) => { - if (!rows.some((f4) => f4.path == row.path)) { - const newItem = { space: space.name, path: row.path, rank: "0" }; - insertIntoDB(db, { - spaceItems: { - ...spaceItemsSchema, - rows: [newItem] - } - }); - rows.push(newItem); - } - }); + const { + nodesRetainedByZone: nodesRetainedByZone2 + } = store.getState().retention; + function addToZone(zone) { + let set = nodesRetainedByZone2.get(zone); + if (!set) { + nodesRetainedByZone2.set(zone, set = /* @__PURE__ */ new Set()); } - retrievedSpaces[space.name] = rows.sort((a5, b4) => a5.rank.localeCompare(b4.rank, void 0, { numeric: true })); - }); - return retrievedSpaces; -}; -var retrieveFolders = async (plugin, paths) => { - const db = plugin.spaceDBInstance(); - let retrievedFolders = {}; - paths.forEach((folder) => { - const table = selectDB(db, "vault", `parent='${sanitizeSQLStatement(folder)}'`); - if (table) { - retrievedFolders[folder] = table.rows.filter(excludeVaultItemPredicate(plugin)); + set.add(nodeKey); + } + if (retainedBy instanceof RetentionZone$1) { + addToZone(retainedBy); + } else if (Array.isArray(retainedBy)) { + for (const zone of retainedBy) { + addToZone(zone); } - }); - return retrievedFolders; -}; -var migrateIndex = async (plugin) => { - console.time("Migrate Spaces Data"); - const db = plugin.spaceDBInstance(); - initiateDB(db); - indexCurrentFileTree(db); - mergeCurrentRanks(db, plugin.settings.folderRank); - mergeExistingFileIcons(db, plugin.settings.fileIcons); - mergeSpaces(db, plugin.settings.spaces); - plugin.saveSpacesDB(); - dispatchSpaceDatabaseFileChanged("vault"); - plugin.settings.folderRank = null; - plugin.settings.fileIcons = null; - plugin.settings.spaces = null; - plugin.saveSettings(); - console.timeEnd("Migrate Spaces Data"); -}; -var initiateDB = (db) => { - replaceDB(db, { - vault: vaultSchema, - spaces: spaceSchema, - spaceItems: spaceItemsSchema - }); -}; -var indexCurrentFileTree = (db) => { - var _a2, _b2; - let treeItems = []; - import_obsidian13.Vault.recurseChildren(app.vault.getRoot(), (file) => { - var _a3; - treeItems.push({ path: file.path, parent: (_a3 = file.parent) == null ? void 0 : _a3.path, created: file instanceof import_obsidian13.TFile ? file.stat.ctime.toString() : void 0, folder: file instanceof import_obsidian13.TFolder ? "true" : "false" }); - }); - const currentPaths = (_b2 = (_a2 = selectDB(db, "vault")) == null ? void 0 : _a2.rows) != null ? _b2 : []; - const deleteRows = currentPaths.filter((item) => !treeItems.some((i4) => i4.path == item.path)); - const fixRows = currentPaths.filter((item) => treeItems.some((i4) => i4.path == item.path && i4.parent != item.parent)).map((item) => ({ ...item, ...treeItems.find((i4) => i4.path == item.path) })); - const newRows = treeItems.filter((item) => !currentPaths.some((i4) => i4.path == item.path)); - fixRows.forEach((row) => { - updateDB(db, { vault: { ...vaultSchema, rows: [row] } }, "path", "path"); - }); - deleteRows.forEach((path) => { - deleteFromDB(db, "vault", `path='${sanitizeSQLStatement(path.path)}'`); - }); - deleteRows.forEach((path) => { - deleteFromDB(db, "spaceItems", `path='${sanitizeSQLStatement(path.path)}'`); - }); - const chunkSize = 20; - for (let i4 = 0; i4 < newRows.length; i4 += chunkSize) { - const chunk = newRows.slice(i4, i4 + chunkSize); - insertIntoDB(db, { - "vault": { - ...vaultSchema, - rows: chunk - } - }); } -}; -var mergeExistingFileIcons = (db, fileIcons) => { - const dbRows = fileIcons.map(([path, sticker]) => ({ path, sticker })); - updateDB(db, { - "vault": { - uniques: [], - cols: ["sticker"], - rows: dbRows + return () => { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; } - }, "path", "path"); -}; -var mergeCurrentRanks = (db, ranks) => { - const flattenStringTreeChildren = (path, children) => { - const dbRows2 = []; - children.forEach((item, index) => { - dbRows2.push({ - path: path + item.node, - rank: index.toString() - }); - if (item.children.length > 0) { - dbRows2.push(...flattenStringTreeChildren(path + item.node + "/", item.children)); + const nodesRetainedByZone3 = store.getState().retention.nodesRetainedByZone; + function deleteFromZone(zone) { + const set = nodesRetainedByZone3.get(zone); + if (set) { + set.delete(nodeKey); + } + if (set && set.size === 0) { + nodesRetainedByZone3.delete(zone); } - }); - return dbRows2; - }; - const dbRows = flattenStringTreeChildren("", ranks.children); - updateDB(db, { - "vault": { - uniques: [], - cols: ["rank"], - rows: dbRows } - }, "path", "path"); -}; -var mergeSpaces = (db, sectionTrees) => { - let spaces2 = []; - let spaceItems = []; - sectionTrees.forEach((space, index) => { - spaces2.push({ name: space.section, rank: index.toString() }); - spaceItems.push(...space.children.map((f4, index2) => ({ space: space.section, path: f4, rank: index2.toString() }))); - }); - insertIntoDB(db, { - "spaces": { - ...spaceSchema, - rows: spaces2 - }, - "spaceItems": { - ...spaceItemsSchema, - rows: spaceItems + if (retainedBy instanceof RetentionZone$1) { + deleteFromZone(retainedBy); + } else if (Array.isArray(retainedBy)) { + for (const zone of retainedBy) { + deleteFromZone(zone); + } } - }); -}; - -// src/utils/emoji.ts -var unifiedToNative = (unified) => { - let unicodes = unified.split("-"); - let codePoints = unicodes.map((u4) => `0x${u4}`); - return String.fromCodePoint(...codePoints); -}; -var saveFileIcons = (plugin, files, icon) => { - files.forEach((file) => { - saveFileSticker(plugin, file, icon); - }); -}; -var saveFileColors = (plugin, files, icon) => { - files.forEach((file) => { - saveFileColor(plugin, file, icon); - }); -}; -var saveSpaceIcon = (plugin, space, icon) => { - saveSpaceSticker(plugin, space, icon); -}; -var removeSpaceIcon = (plugin, space) => { - saveSpaceSticker(plugin, space, ""); -}; -var saveFileIcon = (plugin, data, icon) => { - saveFileSticker(plugin, data.path, icon); -}; -var removeFileIcons = (plugin, files) => { - files.forEach((file) => { - saveFileSticker(plugin, file, ""); - }); -}; -var removeFileIcon = (plugin, data) => { - saveFileSticker(plugin, data.path, ""); -}; - -// src/components/Spaces/TreeView/FileStickerMenu/FileStickerMenu.tsx -var import_obsidian14 = require("obsidian"); -var StickerModal = class extends import_obsidian14.FuzzySuggestModal { - constructor(app2, setIcon3) { - super(app2); - this.setIcon = setIcon3; - this.resultContainerEl.toggleClass("mk-sticker-modal", true); - this.inputEl.focus(); - this.emptyStateText = i18n_default.labels.findStickers; - this.limit = 0; + }; +} +function initializeNodeIfNewToStore(store, treeState, key2, trigger) { + const storeState = store.getState(); + if (storeState.nodeCleanupFunctions.has(key2)) { + return; } - renderSuggestion(item, el) { - el.innerHTML = unifiedToNative(item.item.unicode); - el.setAttr("aria-label", item.item.label); + const config = getNode$1(key2); + const retentionCleanup = initializeRetentionForNode(store, key2, config.retainedBy); + const nodeCleanup = config.init(store, treeState, trigger); + storeState.nodeCleanupFunctions.set(key2, () => { + nodeCleanup(); + retentionCleanup(); + }); +} +function cleanUpNode(store, key2) { + var _state$nodeCleanupFun; + const state = store.getState(); + (_state$nodeCleanupFun = state.nodeCleanupFunctions.get(key2)) === null || _state$nodeCleanupFun === void 0 ? void 0 : _state$nodeCleanupFun(); + state.nodeCleanupFunctions.delete(key2); +} +function getNodeLoadable(store, state, key2) { + initializeNodeIfNewToStore(store, state, key2, "get"); + return getNode$1(key2).get(store, state); +} +function peekNodeLoadable(store, state, key2) { + return getNode$1(key2).peek(store, state); +} +function setUnvalidatedAtomValue_DEPRECATED(state, key2, newValue) { + var _node$invalidate; + const node = getNodeMaybe$1(key2); + node === null || node === void 0 ? void 0 : (_node$invalidate = node.invalidate) === null || _node$invalidate === void 0 ? void 0 : _node$invalidate.call(node, state); + return { + ...state, + atomValues: state.atomValues.clone().delete(key2), + nonvalidatedAtoms: state.nonvalidatedAtoms.clone().set(key2, newValue), + dirtyAtoms: setByAddingToSet$1(state.dirtyAtoms, key2) + }; +} +function setNodeValue(store, state, key2, newValue) { + const node = getNode$1(key2); + if (node.set == null) { + throw new ReadOnlyRecoilValueError(`Attempt to set read-only RecoilValue: ${key2}`); } - getItemText(item) { - return item.label + item.desc; + const set = node.set; + initializeNodeIfNewToStore(store, state, key2, "set"); + return set(store, state, newValue); +} +function peekNodeInfo(store, state, key2) { + var _graph$nodeDeps$get, _storeState$nodeToCom, _storeState$nodeToCom2; + const storeState = store.getState(); + const graph2 = store.getGraph(state.version); + const type = storeState.knownAtoms.has(key2) ? "atom" : storeState.knownSelectors.has(key2) ? "selector" : void 0; + const downstreamNodes = Recoil_filterIterable(getDownstreamNodes(store, state, /* @__PURE__ */ new Set([key2])), (nodeKey) => nodeKey !== key2); + return { + loadable: peekNodeLoadable(store, state, key2), + isActive: storeState.knownAtoms.has(key2) || storeState.knownSelectors.has(key2), + isSet: type === "selector" ? false : state.atomValues.has(key2), + isModified: state.dirtyAtoms.has(key2), + type, + deps: recoilValuesForKeys$1((_graph$nodeDeps$get = graph2.nodeDeps.get(key2)) !== null && _graph$nodeDeps$get !== void 0 ? _graph$nodeDeps$get : []), + subscribers: { + nodes: recoilValuesForKeys$1(downstreamNodes), + components: Recoil_mapIterable((_storeState$nodeToCom = (_storeState$nodeToCom2 = storeState.nodeToComponentSubscriptions.get(key2)) === null || _storeState$nodeToCom2 === void 0 ? void 0 : _storeState$nodeToCom2.values()) !== null && _storeState$nodeToCom !== void 0 ? _storeState$nodeToCom : [], ([name]) => ({ + name + })) + } + }; +} +function getDownstreamNodes(store, state, keys) { + const visitedNodes = /* @__PURE__ */ new Set(); + const visitingNodes = Array.from(keys); + const graph2 = store.getGraph(state.version); + for (let key2 = visitingNodes.pop(); key2; key2 = visitingNodes.pop()) { + var _graph$nodeToNodeSubs; + visitedNodes.add(key2); + const subscribedNodes = (_graph$nodeToNodeSubs = graph2.nodeToNodeSubscriptions.get(key2)) !== null && _graph$nodeToNodeSubs !== void 0 ? _graph$nodeToNodeSubs : emptySet; + for (const downstreamNode of subscribedNodes) { + if (!visitedNodes.has(downstreamNode)) { + visitingNodes.push(downstreamNode); + } + } } - getItems() { - const allEmojis = Object.keys(emojis).reduce( - (p3, c4) => [ - ...p3, - ...emojis[c4].map((e4) => ({ - label: e4.n[0], - desc: e4.n[1], - variants: e4.v, - unicode: e4.u - })) - ], - [] - ); - return allEmojis; + return visitedNodes; +} +var Recoil_FunctionalCore = { + getNodeLoadable, + peekNodeLoadable, + setNodeValue, + cleanUpNode, + setUnvalidatedAtomValue_DEPRECATED, + peekNodeInfo, + getDownstreamNodes, + initializeNodeIfNewToStore +}; +var { + CANCELED: CANCELED$1 +} = Recoil_Loadable; +var { + getDownstreamNodes: getDownstreamNodes$1, + getNodeLoadable: getNodeLoadable$1, + setNodeValue: setNodeValue$1 +} = Recoil_FunctionalCore; +var { + getNodeMaybe: getNodeMaybe$2 +} = Recoil_Node; +var { + DefaultValue: DefaultValue$1, + RecoilValueNotReady: RecoilValueNotReady$1 +} = Recoil_Node; +var { + AbstractRecoilValue: AbstractRecoilValue$1, + RecoilState: RecoilState$1, + RecoilValueReadOnly: RecoilValueReadOnly$1, + isRecoilValue: isRecoilValue$1 +} = Recoil_RecoilValue$1; +function getRecoilValueAsLoadable(store, { + key: key2 +}, treeState = store.getState().currentTree) { + var _storeState$nextTree, _storeState$previousT; + const storeState = store.getState(); + if (!(treeState.version === storeState.currentTree.version || treeState.version === ((_storeState$nextTree = storeState.nextTree) === null || _storeState$nextTree === void 0 ? void 0 : _storeState$nextTree.version) || treeState.version === ((_storeState$previousT = storeState.previousTree) === null || _storeState$previousT === void 0 ? void 0 : _storeState$previousT.version))) { + Recoil_recoverableViolation("Tried to read from a discarded tree"); } - onChooseItem(item, evt) { - this.setIcon(item.unicode); + const loadable = getNodeLoadable$1(store, treeState, key2); + if (loadable.state === "loading") { + loadable.contents.catch(() => { + return CANCELED$1; + }); } -}; - -// src/utils/color.ts -var colors = [ - ["Red", "#eb3b5a"], - ["Orange", "#fa8231"], - ["Yellow", "#f7b731"], - ["Green", "#20bf6b"], - ["Turquoise", "#0fb9b1"], - ["Teal", "#2d98da"], - ["Blue", "#3867d6"], - ["Purple", "#8854d0"], - ["Charcoal", "#4b6584"] -]; - -// src/components/ui/menus/fileMenu.tsx -var triggerSectionMenu = (plugin, spaceName, spaces2, e4) => { - const fileMenu = new import_obsidian15.Menu(); - const space = spaces2.find((f4) => f4.name == spaceName); - fileMenu.addItem((menuItem) => { - var _a2; - const pinned = ((_a2 = spaces2.find((f4) => f4.name == spaceName)) == null ? void 0 : _a2.pinned) == "true"; - if (pinned) { - menuItem.setTitle("Unpin Space"); + return loadable; +} +function applyAtomValueWrites(atomValues, writes) { + const result = atomValues.clone(); + writes.forEach((v3, k5) => { + if (v3.state === "hasValue" && v3.contents instanceof DefaultValue$1) { + result.delete(k5); } else { - menuItem.setTitle("Pin Space"); + result.set(k5, v3); } - menuItem.setIcon("pin"); - menuItem.onClick((ev) => { - toggleSpacePin(plugin, spaceName, !pinned); - }); - }); - if (plugin.settings.spacesStickers) { - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.buttons.changeIcon); - menuItem.setIcon("lucide-sticker"); - menuItem.onClick((ev) => { - let vaultChangeModal = new StickerModal( - plugin.app, - (emoji) => saveSpaceIcon(plugin, spaceName, emoji) - ); - vaultChangeModal.open(); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.buttons.removeIcon); - menuItem.setIcon("lucide-file-minus"); - menuItem.onClick((ev) => { - removeSpaceIcon(plugin, spaceName); - }); - }); - } - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Collapse All"); - menuItem.setIcon("lucide-chevrons-down-up"); - menuItem.onClick((ev) => { - plugin.settings.expandedFolders = { - ...plugin.settings.expandedFolders, - [spaceName]: [] - }; - plugin.saveSettings(); - }); - }); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - const sortOption = ["rank", true]; - menuItem.setTitle("Custom Sort"); - menuItem.setChecked(space.sort == JSON.stringify(sortOption) || space.sort == ""); - menuItem.onClick((ev) => { - updateSpaceSort(plugin, spaceName, sortOption); - }); - }); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - const sortOption = ["path", true]; - menuItem.setTitle("File Name (A to Z)"); - menuItem.setChecked(space.sort == JSON.stringify(sortOption)); - menuItem.onClick((ev) => { - updateSpaceSort(plugin, spaceName, sortOption); - }); - }); - fileMenu.addItem((menuItem) => { - const sortOption = ["path", false]; - menuItem.setTitle("File Name (Z to A)"); - menuItem.setChecked(space.sort == JSON.stringify(sortOption)); - menuItem.onClick((ev) => { - updateSpaceSort(plugin, spaceName, sortOption); - }); - }); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - const sortOption = ["created", false]; - menuItem.setTitle("Created Time (new to old)"); - menuItem.setChecked(space.sort == JSON.stringify(sortOption)); - menuItem.onClick((ev) => { - updateSpaceSort(plugin, spaceName, sortOption); - }); - }); - fileMenu.addItem((menuItem) => { - const sortOption = ["created", true]; - menuItem.setTitle("Created Time (old to new)"); - menuItem.setChecked(space.sort == JSON.stringify(sortOption)); - menuItem.onClick((ev) => { - updateSpaceSort(plugin, spaceName, sortOption); - }); - }); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.menu.edit); - menuItem.setIcon("pencil"); - menuItem.onClick((ev) => { - let vaultChangeModal = new SectionChangeModal( - plugin, - space.name, - "rename" - ); - vaultChangeModal.open(); - }); }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Delete Space"); - menuItem.setIcon("trash"); - menuItem.onClick((ev) => { - removeSpace(plugin, space.name); - }); - }); - if (isMouseEvent(e4)) { - fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + return result; +} +function valueFromValueOrUpdater(store, state, { + key: key2 +}, valueOrUpdater) { + if (typeof valueOrUpdater === "function") { + const current = getNodeLoadable$1(store, state, key2); + if (current.state === "loading") { + throw new RecoilValueNotReady$1(key2); + } else if (current.state === "hasError") { + throw current.contents; + } + return valueOrUpdater(current.contents); } else { - fileMenu.showAtPosition({ - x: e4.nativeEvent.locationX, - y: e4.nativeEvent.locationY - }); + return valueOrUpdater; } - return false; -}; -var triggerMultiFileMenu = (plugin, selectedFiles2, e4) => { - const files = selectedFiles2.map((s5) => s5.item.path); - const spaces2 = retrieveSpaces(plugin); - const spaceItems = retrieveSpaceItems(plugin, spaces2); - const fileMenu = new import_obsidian15.Menu(); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.menu.spaceTitle); - menuItem.setDisabled(true); - }); - spaces2.map((f4) => { - fileMenu.addItem((menuItem) => { - const allIn = files.reduce((p3, c4) => { - var _a2; - return p3 ? (_a2 = spaceItems[f4.name]) == null ? void 0 : _a2.some((g4) => g4.path == c4) : p3; - }, true); - if (allIn) { - menuItem.setIcon("checkmark"); - menuItem.setTitle(f4.name); - } else { - menuItem.setTitle(f4.name); - menuItem.setIcon("plus"); +} +function applyAction(store, state, action) { + if (action.type === "set") { + const { + recoilValue, + valueOrUpdater + } = action; + const newValue = valueFromValueOrUpdater(store, state, recoilValue, valueOrUpdater); + const writes = setNodeValue$1(store, state, recoilValue.key, newValue); + for (const [key2, loadable] of writes.entries()) { + writeLoadableToTreeState(state, key2, loadable); + } + } else if (action.type === "setLoadable") { + const { + recoilValue: { + key: key2 + }, + loadable + } = action; + writeLoadableToTreeState(state, key2, loadable); + } else if (action.type === "markModified") { + const { + recoilValue: { + key: key2 } - menuItem.onClick((ev) => { - if (allIn) { - removePathsFromSpace(plugin, f4.name, files); - } else { - addPathsToSpace(plugin, f4.name, files); - } - }); - }); - }); - if (plugin.settings.spacesStickers) { - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setIcon("palette"); - disclosureMenuItem(menuItem, false, false, "Change Color", "", [{ name: "None", value: "" }, ...colors.map((f4) => ({ name: f4[0], value: f4[1] }))], (_5, values) => { - saveFileColors(plugin, files, values[0]); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.buttons.changeIcon); - menuItem.setIcon("lucide-sticker"); - menuItem.onClick((ev) => { - let vaultChangeModal = new StickerModal( - plugin.app, - (emoji) => saveFileIcons(plugin, files, emoji) - ); - vaultChangeModal.open(); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.buttons.removeIcon); - menuItem.setIcon("lucide-file-minus"); - menuItem.onClick((ev) => { - removeFileIcons(plugin, files); - }); - }); + } = action; + state.dirtyAtoms.add(key2); + } else if (action.type === "setUnvalidated") { + var _node$invalidate; + const { + recoilValue: { + key: key2 + }, + unvalidatedValue + } = action; + const node = getNodeMaybe$2(key2); + node === null || node === void 0 ? void 0 : (_node$invalidate = node.invalidate) === null || _node$invalidate === void 0 ? void 0 : _node$invalidate.call(node, state); + state.atomValues.delete(key2); + state.nonvalidatedAtoms.set(key2, unvalidatedValue); + state.dirtyAtoms.add(key2); + } else { + Recoil_recoverableViolation(`Unknown action ${action.type}`); } - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Delete Files"); - menuItem.setIcon("trash"); - menuItem.onClick((ev) => { - deleteFiles(plugin, files); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setIcon("go-to-file"); - menuItem.setTitle(i18n_default.menu.openFilePane); - menuItem.onClick((ev) => { - files.forEach((file) => openAFile(getAbstractFileAtPath(app, file), app, true)); - }); - }); - if (!internalPluginLoaded("file-explorer", plugin.app)) { - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.menu.moveFile); - menuItem.setIcon("paper-plane"); - menuItem.onClick((ev) => { - let fileMoveSuggester = new MoveSuggestionModal(plugin.app, files); - fileMoveSuggester.open(); - }); - }); +} +function writeLoadableToTreeState(state, key2, loadable) { + if (loadable.state === "hasValue" && loadable.contents instanceof DefaultValue$1) { + state.atomValues.delete(key2); + } else { + state.atomValues.set(key2, loadable); } - if (isMouseEvent(e4)) { - fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + state.dirtyAtoms.add(key2); + state.nonvalidatedAtoms.delete(key2); +} +function applyActionsToStore(store, actions) { + store.replaceState((state) => { + const newState = copyTreeState(state); + for (const action of actions) { + applyAction(store, newState, action); + } + invalidateDownstreams(store, newState); + return newState; + }); +} +function queueOrPerformStateUpdate(store, action) { + if (batchStack.length) { + const actionsByStore = batchStack[batchStack.length - 1]; + let actions = actionsByStore.get(store); + if (!actions) { + actionsByStore.set(store, actions = []); + } + actions.push(action); } else { - fileMenu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); + applyActionsToStore(store, [action]); } - return false; -}; -var triggerFileMenu = (plugin, file, isFolder, e4) => { - const spaces2 = retrieveSpaces(plugin); - const spaceItems = retrieveSpaceItems(plugin, spaces2); - const fileMenu = new import_obsidian15.Menu(); - if (isFolder) { - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setIcon("edit"); - menuItem.setTitle(i18n_default.buttons.createNote); - menuItem.onClick((ev) => { - newFileInFolder(plugin, file); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setIcon("folder-plus"); - menuItem.setTitle(i18n_default.buttons.createFolder); - menuItem.onClick((ev) => { - let vaultChangeModal = new VaultChangeModal(plugin, file, "create folder", "/"); - vaultChangeModal.open(); - }); - }); +} +var batchStack = []; +function batchStart() { + const actionsByStore = /* @__PURE__ */ new Map(); + batchStack.push(actionsByStore); + return () => { + for (const [store, actions] of actionsByStore) { + applyActionsToStore(store, actions); + } + const popped = batchStack.pop(); + if (popped !== actionsByStore) { + Recoil_recoverableViolation("Incorrect order of batch popping"); + } + }; +} +function copyTreeState(state) { + return { + ...state, + atomValues: state.atomValues.clone(), + nonvalidatedAtoms: state.nonvalidatedAtoms.clone(), + dirtyAtoms: new Set(state.dirtyAtoms) + }; +} +function invalidateDownstreams(store, state) { + const downstreams = getDownstreamNodes$1(store, state, state.dirtyAtoms); + for (const key2 of downstreams) { + var _getNodeMaybe, _getNodeMaybe$invalid; + (_getNodeMaybe = getNodeMaybe$2(key2)) === null || _getNodeMaybe === void 0 ? void 0 : (_getNodeMaybe$invalid = _getNodeMaybe.invalidate) === null || _getNodeMaybe$invalid === void 0 ? void 0 : _getNodeMaybe$invalid.call(_getNodeMaybe, state); } - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.menu.spaceTitle); - menuItem.setDisabled(true); +} +function setRecoilValue(store, recoilValue, valueOrUpdater) { + queueOrPerformStateUpdate(store, { + type: "set", + recoilValue, + valueOrUpdater }); - spaces2.map((f4, i4) => { - var _a2; - const itemExists = (_a2 = spaceItems[f4.name]) == null ? void 0 : _a2.some((g4) => g4.path == file.path); - fileMenu.addItem((menuItem) => { - var _a3; - menuItem.setTitle(f4.name); - if (((_a3 = f4.def) == null ? void 0 : _a3.length) > 0) { - menuItem.setDisabled(true); - menuItem.setIcon("folder"); - } else { - if (itemExists) { - menuItem.setIcon("checkmark"); - } else { - menuItem.setIcon("plus"); - } - menuItem.onClick((ev) => { - if (!itemExists) { - insertSpaceItemAtIndex(plugin, f4.name, file.path, 0); - } else { - removePathsFromSpace(plugin, f4.name, [file.path]); - } - }); - } - }); +} +function setRecoilValueLoadable(store, recoilValue, loadable) { + if (loadable instanceof DefaultValue$1) { + return setRecoilValue(store, recoilValue, loadable); + } + queueOrPerformStateUpdate(store, { + type: "setLoadable", + recoilValue, + loadable }); - if (isFolder) { - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Make Folder Space"); - menuItem.setIcon("plus-square"); - menuItem.onClick((ev) => { - insertSpaceAtIndex(plugin, file.name, false, 0, file.path); - }); - }); +} +function markRecoilValueModified(store, recoilValue) { + queueOrPerformStateUpdate(store, { + type: "markModified", + recoilValue + }); +} +function setUnvalidatedRecoilValue(store, recoilValue, unvalidatedValue) { + queueOrPerformStateUpdate(store, { + type: "setUnvalidated", + recoilValue, + unvalidatedValue + }); +} +var subscriptionID = 0; +function subscribeToRecoilValue(store, { + key: key2 +}, callback, componentDebugName = null) { + const subID = subscriptionID++; + const storeState = store.getState(); + if (!storeState.nodeToComponentSubscriptions.has(key2)) { + storeState.nodeToComponentSubscriptions.set(key2, /* @__PURE__ */ new Map()); } - if (plugin.settings.spacesStickers) { - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setIcon("palette"); - disclosureMenuItem(menuItem, false, false, "Change Color", "", [{ name: "None", value: "" }, ...colors.map((f4) => ({ name: f4[0], value: f4[1] }))], (_5, values) => { - saveFileColor(plugin, file.path, values[0]); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.buttons.changeIcon); - menuItem.setIcon("lucide-sticker"); - menuItem.onClick((ev) => { - let vaultChangeModal = new StickerModal( - plugin.app, - (emoji) => saveFileIcon(plugin, file, emoji) - ); - vaultChangeModal.open(); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.buttons.removeIcon); - menuItem.setIcon("lucide-file-minus"); - menuItem.onClick((ev) => { - removeFileIcon(plugin, file); - }); - }); + Recoil_nullthrows(storeState.nodeToComponentSubscriptions.get(key2)).set(subID, [componentDebugName !== null && componentDebugName !== void 0 ? componentDebugName : "", callback]); + if (Recoil_gkx_1("recoil_early_rendering_2021")) { + const nextTree = store.getState().nextTree; + if (nextTree && nextTree.dirtyAtoms.has(key2)) { + callback(nextTree); + } } - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.menu.rename); - menuItem.setIcon("pencil"); - menuItem.onClick((ev) => { - let vaultChangeModal = new VaultChangeModal(plugin, file, "rename"); - vaultChangeModal.open(); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Delete"); - menuItem.setIcon("trash"); - menuItem.onClick((ev) => { - let deleteOption = plugin.settings.deleteFileOption; - if (deleteOption === "permanent") { - plugin.app.vault.delete(file, true); - } else if (deleteOption === "system-trash") { - plugin.app.vault.trash(file, true); - } else if (deleteOption === "trash") { - plugin.app.vault.trash(file, false); + return { + release: () => { + const storeState2 = store.getState(); + const subs = storeState2.nodeToComponentSubscriptions.get(key2); + if (subs === void 0 || !subs.has(subID)) { + Recoil_recoverableViolation(`Subscription missing at release time for atom ${key2}. This is a bug in Recoil.`); + return; } - }); + subs.delete(subID); + if (subs.size === 0) { + storeState2.nodeToComponentSubscriptions.delete(key2); + } + } + }; +} +var Recoil_RecoilValueInterface = { + RecoilValueReadOnly: RecoilValueReadOnly$1, + AbstractRecoilValue: AbstractRecoilValue$1, + RecoilState: RecoilState$1, + getRecoilValueAsLoadable, + setRecoilValue, + setRecoilValueLoadable, + markRecoilValueModified, + setUnvalidatedRecoilValue, + subscribeToRecoilValue, + isRecoilValue: isRecoilValue$1, + applyAtomValueWrites, + batchStart, + writeLoadableToTreeState, + invalidateDownstreams, + copyTreeState, + invalidateDownstreams_FOR_TESTING: invalidateDownstreams +}; +var { + unstable_batchedUpdates +} = bn; +var ReactBatchedUpdates = { + unstable_batchedUpdates +}; +var { + unstable_batchedUpdates: unstable_batchedUpdates$1 +} = ReactBatchedUpdates; +var Recoil_ReactBatchedUpdates = { + unstable_batchedUpdates: unstable_batchedUpdates$1 +}; +var { + batchStart: batchStart$1 +} = Recoil_RecoilValueInterface; +var { + unstable_batchedUpdates: unstable_batchedUpdates$2 +} = Recoil_ReactBatchedUpdates; +var batcher = unstable_batchedUpdates$2; +var setBatcher = (newBatcher) => { + batcher = newBatcher; +}; +var getBatcher = () => batcher; +var batchUpdates = (callback) => { + batcher(() => { + let batchEnd = () => void 0; + try { + batchEnd = batchStart$1(); + callback(); + } finally { + batchEnd(); + } }); - fileMenu.addItem((menuItem) => { - menuItem.setIcon("go-to-file"); - menuItem.setTitle(i18n_default.menu.openFilePane); - menuItem.onClick((ev) => { - openFileInNewPane(plugin, { ...file, isFolder }); - }); +}; +var Recoil_Batching = { + getBatcher, + setBatcher, + batchUpdates +}; +function enqueueExecution(s5, f4) { + f4(); +} +var Recoil_Queue = { + enqueueExecution +}; +function differenceSets(set, ...setsWithValuesToRemove) { + const ret = /* @__PURE__ */ new Set(); + FIRST: + for (const value of set) { + for (const otherSet of setsWithValuesToRemove) { + if (otherSet.has(value)) { + continue FIRST; + } + } + ret.add(value); + } + return ret; +} +var Recoil_differenceSets = differenceSets; +function mapMap(map, callback) { + const result = /* @__PURE__ */ new Map(); + map.forEach((value, key2) => { + result.set(key2, callback(value, key2)); }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.menu.duplicate); - menuItem.setIcon("documents"); - menuItem.onClick((ev) => { - if (file.basename && file.extension) - plugin.app.vault.copy(file, `${file.parent.path}/${file.basename} 1.${file.extension}`); + return result; +} +var Recoil_mapMap = mapMap; +function graph() { + return { + nodeDeps: /* @__PURE__ */ new Map(), + nodeToNodeSubscriptions: /* @__PURE__ */ new Map() + }; +} +function cloneGraph(graph2) { + return { + nodeDeps: Recoil_mapMap(graph2.nodeDeps, (s5) => new Set(s5)), + nodeToNodeSubscriptions: Recoil_mapMap(graph2.nodeToNodeSubscriptions, (s5) => new Set(s5)) + }; +} +function mergeDependencyMapIntoGraph(deps, graph2, olderGraph) { + const { + nodeDeps, + nodeToNodeSubscriptions + } = graph2; + deps.forEach((upstreams, downstream) => { + const existingUpstreams = nodeDeps.get(downstream); + if (existingUpstreams && olderGraph && existingUpstreams !== olderGraph.nodeDeps.get(downstream)) { + return; + } + nodeDeps.set(downstream, new Set(upstreams)); + const addedUpstreams = existingUpstreams == null ? upstreams : Recoil_differenceSets(upstreams, existingUpstreams); + addedUpstreams.forEach((upstream) => { + if (!nodeToNodeSubscriptions.has(upstream)) { + nodeToNodeSubscriptions.set(upstream, /* @__PURE__ */ new Set()); + } + const existing = Recoil_nullthrows(nodeToNodeSubscriptions.get(upstream)); + existing.add(downstream); }); - }); - if (!internalPluginLoaded("file-explorer", plugin.app)) { - fileMenu.addItem((menuItem) => { - menuItem.setTitle(i18n_default.menu.moveFile); - menuItem.setIcon("paper-plane"); - menuItem.onClick((ev) => { - let fileMoveSuggester = new MoveSuggestionModal(plugin.app, [file.path]); - fileMoveSuggester.open(); + if (existingUpstreams) { + const removedUpstreams = Recoil_differenceSets(existingUpstreams, upstreams); + removedUpstreams.forEach((upstream) => { + if (!nodeToNodeSubscriptions.has(upstream)) { + return; + } + const existing = Recoil_nullthrows(nodeToNodeSubscriptions.get(upstream)); + existing.delete(downstream); + if (existing.size === 0) { + nodeToNodeSubscriptions.delete(upstream); + } }); - }); + } + }); +} +function saveDependencyMapToStore(dependencyMap, store, version) { + var _storeState$nextTree, _storeState$previousT, _storeState$previousT2, _storeState$previousT3; + const storeState = store.getState(); + if (!(version === storeState.currentTree.version || version === ((_storeState$nextTree = storeState.nextTree) === null || _storeState$nextTree === void 0 ? void 0 : _storeState$nextTree.version) || version === ((_storeState$previousT = storeState.previousTree) === null || _storeState$previousT === void 0 ? void 0 : _storeState$previousT.version))) { + Recoil_recoverableViolation("Tried to save dependencies to a discarded tree"); } - plugin.app.workspace.trigger("file-menu", fileMenu, file, "file-explorer"); - if (isMouseEvent(e4)) { - fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); - } else { - fileMenu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); + const graph2 = store.getGraph(version); + mergeDependencyMapIntoGraph(dependencyMap, graph2); + if (version === ((_storeState$previousT2 = storeState.previousTree) === null || _storeState$previousT2 === void 0 ? void 0 : _storeState$previousT2.version)) { + const currentGraph = store.getGraph(storeState.currentTree.version); + mergeDependencyMapIntoGraph(dependencyMap, currentGraph, graph2); } - return false; + if (version === ((_storeState$previousT3 = storeState.previousTree) === null || _storeState$previousT3 === void 0 ? void 0 : _storeState$previousT3.version) || version === storeState.currentTree.version) { + var _storeState$nextTree2; + const nextVersion = (_storeState$nextTree2 = storeState.nextTree) === null || _storeState$nextTree2 === void 0 ? void 0 : _storeState$nextTree2.version; + if (nextVersion !== void 0) { + const nextGraph = store.getGraph(nextVersion); + mergeDependencyMapIntoGraph(dependencyMap, nextGraph, graph2); + } + } +} +function mergeDepsIntoDependencyMap(from, into) { + from.forEach((upstreamDeps, downstreamNode) => { + if (!into.has(downstreamNode)) { + into.set(downstreamNode, /* @__PURE__ */ new Set()); + } + const deps = Recoil_nullthrows(into.get(downstreamNode)); + upstreamDeps.forEach((dep) => deps.add(dep)); + }); +} +function addToDependencyMap(downstream, upstream, dependencyMap) { + if (!dependencyMap.has(downstream)) { + dependencyMap.set(downstream, /* @__PURE__ */ new Set()); + } + Recoil_nullthrows(dependencyMap.get(downstream)).add(upstream); +} +var Recoil_Graph = { + addToDependencyMap, + cloneGraph, + graph, + mergeDepsIntoDependencyMap, + saveDependencyMapToStore }; - -// src/components/FileSticker/FileSticker.tsx -var FileSticker = (props2) => { - const [vaultItem, setVaultItem] = p2(vaultItemForPath(props2.plugin, props2.filePath)); - const reloadIcon = (e4) => { - if (e4.detail.changeType == "sticker") - setVaultItem(vaultItemForPath(props2.plugin, props2.filePath)); +function createCommonjsModule(fn2, module2) { + return module2 = { exports: {} }, fn2(module2, module2.exports), module2.exports; +} +var hamt_1 = createCommonjsModule(function(module2) { + var _typeof5 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - h2(() => { - if ((vaultItem == null ? void 0 : vaultItem.path) != props2.filePath) { - setVaultItem(vaultItemForPath(props2.plugin, props2.filePath)); + var hamt = {}; + var SIZE = 5; + var BUCKET_SIZE = Math.pow(2, SIZE); + var MASK = BUCKET_SIZE - 1; + var MAX_INDEX_NODE = BUCKET_SIZE / 2; + var MIN_ARRAY_NODE = BUCKET_SIZE / 4; + var nothing = {}; + var constant = function constant2(x5) { + return function() { + return x5; + }; + }; + var hash = hamt.hash = function(str) { + var type = typeof str === "undefined" ? "undefined" : _typeof5(str); + if (type === "number") + return str; + if (type !== "string") + str += ""; + var hash2 = 0; + for (var i4 = 0, len = str.length; i4 < len; ++i4) { + var c4 = str.charCodeAt(i4); + hash2 = (hash2 << 5) - hash2 + c4 | 0; } - window.addEventListener(eventTypes.spacesChange, reloadIcon); - return () => { - window.removeEventListener(eventTypes.spacesChange, reloadIcon); + return hash2; + }; + var popcount = function popcount2(x5) { + x5 -= x5 >> 1 & 1431655765; + x5 = (x5 & 858993459) + (x5 >> 2 & 858993459); + x5 = x5 + (x5 >> 4) & 252645135; + x5 += x5 >> 8; + x5 += x5 >> 16; + return x5 & 127; + }; + var hashFragment = function hashFragment2(shift, h5) { + return h5 >>> shift & MASK; + }; + var toBitmap = function toBitmap2(x5) { + return 1 << x5; + }; + var fromBitmap = function fromBitmap2(bitmap, bit) { + return popcount(bitmap & bit - 1); + }; + var arrayUpdate = function arrayUpdate2(mutate2, at, v3, arr) { + var out = arr; + if (!mutate2) { + var len = arr.length; + out = new Array(len); + for (var i4 = 0; i4 < len; ++i4) { + out[i4] = arr[i4]; + } + } + out[at] = v3; + return out; + }; + var arraySpliceOut = function arraySpliceOut2(mutate2, at, arr) { + var newLen = arr.length - 1; + var i4 = 0; + var g4 = 0; + var out = arr; + if (mutate2) { + i4 = g4 = at; + } else { + out = new Array(newLen); + while (i4 < at) { + out[g4++] = arr[i4++]; + } + } + ++i4; + while (i4 <= newLen) { + out[g4++] = arr[i4++]; + } + if (mutate2) { + out.length = newLen; + } + return out; + }; + var arraySpliceIn = function arraySpliceIn2(mutate2, at, v3, arr) { + var len = arr.length; + if (mutate2) { + var _i = len; + while (_i >= at) { + arr[_i--] = arr[_i]; + } + arr[at] = v3; + return arr; + } + var i4 = 0, g4 = 0; + var out = new Array(len + 1); + while (i4 < at) { + out[g4++] = arr[i4++]; + } + out[at] = v3; + while (i4 < len) { + out[++g4] = arr[i4++]; + } + return out; + }; + var LEAF = 1; + var COLLISION = 2; + var INDEX = 3; + var ARRAY = 4; + var empty = { + __hamt_isEmpty: true + }; + var isEmptyNode = function isEmptyNode2(x5) { + return x5 === empty || x5 && x5.__hamt_isEmpty; + }; + var Leaf = function Leaf2(edit, hash2, key2, value) { + return { + type: LEAF, + edit, + hash: hash2, + key: key2, + value, + _modify: Leaf__modify }; - }, [props2.filePath]); - const triggerStickerMenu = (e4) => { - e4.stopPropagation(); - let vaultChangeModal = new StickerModal(props2.plugin.app, (emoji) => saveFileSticker(props2.plugin, props2.filePath, emoji)); - vaultChangeModal.open(); }; - const color = vaultItem == null ? void 0 : vaultItem.color; - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-file-icon" - }, /* @__PURE__ */ bn.createElement("button", { - "aria-label": i18n_default.buttons.changeIcon, - style: (color == null ? void 0 : color.length) > 0 ? { - "--label-color": `${vaultItem.color}`, - "--icon-color": `#ffffff` - } : { - "--icon-color": `var(--text-muted)` - }, - dangerouslySetInnerHTML: (vaultItem == null ? void 0 : vaultItem.sticker) ? { __html: unifiedToNative(vaultItem.sticker) } : (vaultItem == null ? void 0 : vaultItem.folder) == "true" ? { __html: color ? uiIconSet["mk-ui-folder-solid"] : uiIconSet["mk-ui-folder"] } : { __html: color ? uiIconSet["mk-ui-file-solid"] : uiIconSet["mk-ui-file"] }, - onClick: (e4) => triggerStickerMenu(e4) - })); -}; - -// src/components/ContextView/DataTypeView/FileCell.tsx -var FileCell = (props2) => { - var _a2; - const fileOrCleanPath = (f4) => { - if (!f4) - return { - path: "" - }; - const isInFolder = !props2.isFolder || f4.includes(props2.folder); - const fileExists2 = getAbstractFileAtPath(app, f4); - const cleanPath = (path) => path.replace(props2.folder + "/", "").replace(".md", ""); - return isInFolder ? fileExists2 ? { path: f4, file: fileExists2 } : { path: cleanPath(f4) } : { path: f4 }; + var Collision = function Collision2(edit, hash2, children) { + return { + type: COLLISION, + edit, + hash: hash2, + children, + _modify: Collision__modify + }; }; - const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).map((f4) => fileOrCleanPath(f4)); - const [value, setValue] = p2(initialValue); - const ref = _2(null); - const onKeyDown = (e4) => { - e4.stopPropagation(); - e4.key == "Enter" && e4.target.blur(); + var IndexedNode = function IndexedNode2(edit, mask, children) { + return { + type: INDEX, + edit, + mask, + children, + _modify: IndexedNode__modify + }; + }; + var ArrayNode = function ArrayNode2(edit, size, children) { + return { + type: ARRAY, + edit, + size, + children, + _modify: ArrayNode__modify + }; + }; + var isLeaf = function isLeaf2(node) { + return node === empty || node.type === LEAF || node.type === COLLISION; + }; + var expand = function expand2(edit, frag, child, bitmap, subNodes) { + var arr = []; + var bit = bitmap; + var count3 = 0; + for (var i4 = 0; bit; ++i4) { + if (bit & 1) + arr[i4] = subNodes[count3++]; + bit >>>= 1; + } + arr[frag] = child; + return ArrayNode(edit, count3 + 1, arr); + }; + var pack = function pack2(edit, count3, removed, elements) { + var children = new Array(count3 - 1); + var g4 = 0; + var bitmap = 0; + for (var i4 = 0, len = elements.length; i4 < len; ++i4) { + if (i4 !== removed) { + var elem = elements[i4]; + if (elem && !isEmptyNode(elem)) { + children[g4++] = elem; + bitmap |= 1 << i4; + } + } + } + return IndexedNode(edit, bitmap, children); }; - const fileExists = (name) => { - if (!name) - return false; - return getAbstractFileAtPath(app, `${props2.folder}/${name}.md`) ? true : false; + var mergeLeaves = function mergeLeaves2(edit, shift, h1, n1, h22, n2) { + if (h1 === h22) + return Collision(edit, h1, [n2, n1]); + var subH1 = hashFragment(shift, h1); + var subH2 = hashFragment(shift, h22); + return IndexedNode(edit, toBitmap(subH1) | toBitmap(subH2), subH1 === subH2 ? [mergeLeaves2(edit, shift + SIZE, h1, n1, h22, n2)] : subH1 < subH2 ? [n1, n2] : [n2, n1]); }; - const onBlur = () => { - var _a3; - if (!ref.current) - return; - if (fileExists((_a3 = ref.current) == null ? void 0 : _a3.value)) { - new import_obsidian16.Notice("File Already Exists"); - } else { - props2.saveValue(ref.current.value); - props2.setEditMode(null); + var updateCollisionList = function updateCollisionList2(mutate2, edit, keyEq, h5, list, f4, k5, size) { + var len = list.length; + for (var i4 = 0; i4 < len; ++i4) { + var child = list[i4]; + if (keyEq(k5, child.key)) { + var value = child.value; + var _newValue = f4(value); + if (_newValue === value) + return list; + if (_newValue === nothing) { + --size.value; + return arraySpliceOut(mutate2, i4, list); + } + return arrayUpdate(mutate2, i4, Leaf(edit, h5, k5, _newValue), list); + } } + var newValue = f4(); + if (newValue === nothing) + return list; + ++size.value; + return arrayUpdate(mutate2, len, Leaf(edit, h5, k5, newValue), list); }; - const newFile = async (file) => { - const filePath = file.path.replace(/\//g, "").replace(/\./g, ""); - const path = `${props2.folder}/${filePath}.md`; - if (filePath.length == 0) { - return; - } - if (fileExists(path)) { - new import_obsidian16.Notice("File Already Exists"); - } else { - await createNewMarkdownFile(app, getAbstractFileAtPath(app, props2.folder), filePath); + var canEditNode = function canEditNode2(edit, node) { + return edit === node.edit; + }; + var Leaf__modify = function Leaf__modify2(edit, keyEq, shift, f4, h5, k5, size) { + if (keyEq(k5, this.key)) { + var _v = f4(this.value); + if (_v === this.value) + return this; + else if (_v === nothing) { + --size.value; + return empty; + } + if (canEditNode(edit, this)) { + this.value = _v; + return this; + } + return Leaf(edit, h5, k5, _v); } + var v3 = f4(); + if (v3 === nothing) + return this; + ++size.value; + return mergeLeaves(edit, shift, this.hash, this, h5, Leaf(edit, h5, k5, v3)); }; - const deleteRow = () => { - props2.deleteRow(); + var Collision__modify = function Collision__modify2(edit, keyEq, shift, f4, h5, k5, size) { + if (h5 === this.hash) { + var canEdit = canEditNode(edit, this); + var list = updateCollisionList(canEdit, edit, keyEq, this.hash, this.children, f4, k5, size); + if (list === this.children) + return this; + return list.length > 1 ? Collision(edit, this.hash, list) : list[0]; + } + var v3 = f4(); + if (v3 === nothing) + return this; + ++size.value; + return mergeLeaves(edit, shift, this.hash, this, h5, Leaf(edit, h5, k5, v3)); }; - h2(() => { - var _a3; - if (props2.editMode == 2) { - (_a3 = ref == null ? void 0 : ref.current) == null ? void 0 : _a3.focus(); + var IndexedNode__modify = function IndexedNode__modify2(edit, keyEq, shift, f4, h5, k5, size) { + var mask = this.mask; + var children = this.children; + var frag = hashFragment(shift, h5); + var bit = toBitmap(frag); + var indx = fromBitmap(mask, bit); + var exists = mask & bit; + var current = exists ? children[indx] : empty; + var child = current._modify(edit, keyEq, shift + SIZE, f4, h5, k5, size); + if (current === child) + return this; + var canEdit = canEditNode(edit, this); + var bitmap = mask; + var newChildren = void 0; + if (exists && isEmptyNode(child)) { + bitmap &= ~bit; + if (!bitmap) + return empty; + if (children.length <= 2 && isLeaf(children[indx ^ 1])) + return children[indx ^ 1]; + newChildren = arraySpliceOut(canEdit, indx, children); + } else if (!exists && !isEmptyNode(child)) { + if (children.length >= MAX_INDEX_NODE) + return expand(edit, frag, child, mask, children); + bitmap |= bit; + newChildren = arraySpliceIn(canEdit, indx, child, children); + } else { + newChildren = arrayUpdate(canEdit, indx, child, children); } - }, [props2.editMode]); - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-file" - }, value.map((v3, i4) => { - var _a3; - if (props2.editMode == 0) { - if (v3.file) { - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-file-title" - }, v3 ? v3.file instanceof import_obsidian16.TFile ? fileNameToString(v3.file.name) : v3.file.name : "", (v3 == null ? void 0 : v3.file) instanceof import_obsidian16.TFile && v3.file.extension != "md" && /* @__PURE__ */ bn.createElement("span", { - className: "nav-file-tag" - }, (_a3 = v3.file) == null ? void 0 : _a3.extension), /* @__PURE__ */ bn.createElement("button", { - "aria-label": "Toggle Flow", - className: "mk-cell-file-flow mk-inline-button", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-flow-hover"] }, - onClick: () => props2.openFlow && props2.openFlow() - })); - } else { - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-file-title" - }, v3.path); - } + if (canEdit) { + this.mask = bitmap; + this.children = newChildren; + return this; } - if (v3.file) { - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-file-item", - onContextMenu: (e4) => triggerFileMenu(props2.plugin, v3.file, v3.file instanceof import_obsidian16.TFolder, e4) - }, /* @__PURE__ */ bn.createElement(FileSticker, { - plugin: props2.plugin, - filePath: v3.file.path - }), /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-file-name", - onClick: (e4) => openFile2({ ...v3.file, isFolder: v3.file instanceof import_obsidian16.TFolder }, app, e4.ctrlKey || e4.metaKey) - }, v3 ? v3.file instanceof import_obsidian16.TFile ? fileNameToString(v3.file.name) : v3.file.name : ""))); + return IndexedNode(edit, bitmap, newChildren); + }; + var ArrayNode__modify = function ArrayNode__modify2(edit, keyEq, shift, f4, h5, k5, size) { + var count3 = this.size; + var children = this.children; + var frag = hashFragment(shift, h5); + var child = children[frag]; + var newChild = (child || empty)._modify(edit, keyEq, shift + SIZE, f4, h5, k5, size); + if (child === newChild) + return this; + var canEdit = canEditNode(edit, this); + var newChildren = void 0; + if (isEmptyNode(child) && !isEmptyNode(newChild)) { + ++count3; + newChildren = arrayUpdate(canEdit, frag, newChild, children); + } else if (!isEmptyNode(child) && isEmptyNode(newChild)) { + --count3; + if (count3 <= MIN_ARRAY_NODE) + return pack(edit, count3, frag, children); + newChildren = arrayUpdate(canEdit, frag, empty, children); + } else { + newChildren = arrayUpdate(canEdit, frag, newChild, children); } - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-file-item" - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-file-icon" - }, /* @__PURE__ */ bn.createElement("button", { - onClick: (e4) => newFile(v3), - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-file"] } - })), props2.editMode > 1 ? /* @__PURE__ */ bn.createElement("input", { - className: "mk-cell-file-name", - type: "text", - placeholder: "Untitled", - ref, - value: v3.path, - onKeyDown, - onBlur - }) : /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-file-name" - }, v3.path))); - })); -}; - -// src/components/ContextView/DataTypeView/BooleanCell.tsx -var BooleanCell = (props2) => { - const { initialValue, saveValue } = props2; - const [value, setValue] = bn.useState(initialValue == "true"); - const onChange = () => { - if (props2.editMode == -1 /* EditModeReadOnly */) { - return; + if (canEdit) { + this.size = count3; + this.children = newChildren; + return this; } - setValue(!value); - saveValue(!value ? "true" : "false"); + return ArrayNode(edit, count3, newChildren); }; - h2(() => { - if (props2.editMode == 2 /* EditModeActive */) { - setValue(!value); - saveValue(!value ? "true" : "false"); - props2.setEditMode(null); - } - }, [props2.editMode]); - bn.useEffect(() => { - setValue(initialValue == "true"); - }, [initialValue]); - if (props2.editMode < 1 /* EditModeView */) { - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-option-item" - }, /* @__PURE__ */ bn.createElement("input", { - type: "checkbox", - checked: value, - onChange - }), /* @__PURE__ */ bn.createElement("div", null, props2.column.name)); + empty._modify = function(edit, keyEq, shift, f4, h5, k5, size) { + var v3 = f4(); + if (v3 === nothing) + return empty; + ++size.value; + return Leaf(edit, h5, k5, v3); + }; + function Map2(editable, edit, config, root, size) { + this._editable = editable; + this._edit = edit; + this._config = config; + this._root = root; + this._size = size; } - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-text" - }, /* @__PURE__ */ bn.createElement("input", { - type: "checkbox", - checked: value, - onChange - })); -}; - -// src/components/ContextView/DataTypeView/LinkCell.tsx -var LinkCell = (props2) => { - var _a2; - const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => f4); - const stringValueToLink = (strings) => strings.map((f4) => { - const match2 = /\[\[(.*?)\]\]/g.exec(f4); - const stringValue = (match2 == null ? void 0 : match2.length) > 1 ? match2[1].substring(0, match2[1].indexOf("|")) : f4; - return { - label: filePathToString(stringValue), - value: stringValue - }; - }); - const resolveLinks = (links) => links.map((f4) => ({ - value: f4.value, - label: filePathToString(f4.value), - file: getFileFromString(f4.value, getFolderPathFromString2(props2.file)) - })); - const ref = _2(null); - const [value, setValue] = p2(resolveLinks(stringValueToLink(initialValue))); - const removeValue = (v3) => { - const newValues = value.filter((f4) => f4.value != v3.value); - setValue(newValues); - props2.saveValue(newValues.map((f4) => f4.value).join(",")); + Map2.prototype.setTree = function(newRoot, newSize) { + if (this._editable) { + this._root = newRoot; + this._size = newSize; + return this; + } + return newRoot === this._root ? this : new Map2(this._editable, this._edit, this._config, newRoot, newSize); }; - const saveOptions = (_5, _value) => { - if (props2.multi) { - setValue(resolveLinks(stringValueToLink(_value))); - props2.saveValue(_value.join(",")); - } else { - const newValue = _value[0]; - if (newValue) { - const newValues = uniq([...value.map((f4) => f4.value), newValue]); - setValue(resolveLinks(stringValueToLink(newValues))); - props2.saveValue(newValues.join(",")); + var tryGetHash = hamt.tryGetHash = function(alt, hash2, key2, map) { + var node = map._root; + var shift = 0; + var keyEq = map._config.keyEq; + while (true) { + switch (node.type) { + case LEAF: { + return keyEq(key2, node.key) ? node.value : alt; + } + case COLLISION: { + if (hash2 === node.hash) { + var children = node.children; + for (var i4 = 0, len = children.length; i4 < len; ++i4) { + var child = children[i4]; + if (keyEq(key2, child.key)) + return child.value; + } + } + return alt; + } + case INDEX: { + var frag = hashFragment(shift, hash2); + var bit = toBitmap(frag); + if (node.mask & bit) { + node = node.children[fromBitmap(node.mask, bit)]; + shift += SIZE; + break; + } + return alt; + } + case ARRAY: { + node = node.children[hashFragment(shift, hash2)]; + if (node) { + shift += SIZE; + break; + } + return alt; + } + default: + return alt; } } }; - const menuProps = () => { - const options = getAllAbstractFilesInVault(props2.plugin, app).map((f4) => ({ name: fileNameToString(f4.name), value: f4.path })); - const _options = !props2.multi ? [{ name: "None", value: "" }, ...options] : options; - return { - multi: false, - editable: false, - value: value.map((f4) => f4.value), - options: _options, - saveOptions, - placeholder: "Find Note", - detail: true, - searchable: true, - onHide: () => props2.setEditMode(null) + Map2.prototype.tryGetHash = function(alt, hash2, key2) { + return tryGetHash(alt, hash2, key2, this); + }; + var tryGet = hamt.tryGet = function(alt, key2, map) { + return tryGetHash(alt, map._config.hash(key2), key2, map); + }; + Map2.prototype.tryGet = function(alt, key2) { + return tryGet(alt, key2, this); + }; + var getHash = hamt.getHash = function(hash2, key2, map) { + return tryGetHash(void 0, hash2, key2, map); + }; + Map2.prototype.getHash = function(hash2, key2) { + return getHash(hash2, key2, this); + }; + var get = hamt.get = function(key2, map) { + return tryGetHash(void 0, map._config.hash(key2), key2, map); + }; + Map2.prototype.get = function(key2, alt) { + return tryGet(alt, key2, this); + }; + var hasHash = hamt.has = function(hash2, key2, map) { + return tryGetHash(nothing, hash2, key2, map) !== nothing; + }; + Map2.prototype.hasHash = function(hash2, key2) { + return hasHash(hash2, key2, this); + }; + var has = hamt.has = function(key2, map) { + return hasHash(map._config.hash(key2), key2, map); + }; + Map2.prototype.has = function(key2) { + return has(key2, this); + }; + var defKeyCompare = function defKeyCompare2(x5, y5) { + return x5 === y5; + }; + hamt.make = function(config) { + return new Map2(0, 0, { + keyEq: config && config.keyEq || defKeyCompare, + hash: config && config.hash || hash + }, empty, 0); + }; + hamt.empty = hamt.make(); + var isEmpty = hamt.isEmpty = function(map) { + return map && !!isEmptyNode(map._root); + }; + Map2.prototype.isEmpty = function() { + return isEmpty(this); + }; + var modifyHash = hamt.modifyHash = function(f4, hash2, key2, map) { + var size = { + value: map._size }; + var newRoot = map._root._modify(map._editable ? map._edit : NaN, map._config.keyEq, 0, f4, hash2, key2, size); + return map.setTree(newRoot, size.value); }; - const openLink = async (o3) => { - if (o3.file) { - openTFile(o3.file, app, false); - } else { - const file = await app.fileManager.createNewMarkdownFile(app.vault.getRoot(), o3.value); - openTFile(file, app, false); - setValue(resolveLinks(value)); + Map2.prototype.modifyHash = function(hash2, key2, f4) { + return modifyHash(f4, hash2, key2, this); + }; + var modify = hamt.modify = function(f4, key2, map) { + return modifyHash(f4, map._config.hash(key2), key2, map); + }; + Map2.prototype.modify = function(key2, f4) { + return modify(f4, key2, this); + }; + var setHash = hamt.setHash = function(hash2, key2, value, map) { + return modifyHash(constant(value), hash2, key2, map); + }; + Map2.prototype.setHash = function(hash2, key2, value) { + return setHash(hash2, key2, value, this); + }; + var set = hamt.set = function(key2, value, map) { + return setHash(map._config.hash(key2), key2, value, map); + }; + Map2.prototype.set = function(key2, value) { + return set(key2, value, this); + }; + var del = constant(nothing); + var removeHash = hamt.removeHash = function(hash2, key2, map) { + return modifyHash(del, hash2, key2, map); + }; + Map2.prototype.removeHash = Map2.prototype.deleteHash = function(hash2, key2) { + return removeHash(hash2, key2, this); + }; + var remove = hamt.remove = function(key2, map) { + return removeHash(map._config.hash(key2), key2, map); + }; + Map2.prototype.remove = Map2.prototype.delete = function(key2) { + return remove(key2, this); + }; + var beginMutation = hamt.beginMutation = function(map) { + return new Map2(map._editable + 1, map._edit + 1, map._config, map._root, map._size); + }; + Map2.prototype.beginMutation = function() { + return beginMutation(this); + }; + var endMutation = hamt.endMutation = function(map) { + map._editable = map._editable && map._editable - 1; + return map; + }; + Map2.prototype.endMutation = function() { + return endMutation(this); + }; + var mutate = hamt.mutate = function(f4, map) { + var transient = beginMutation(map); + f4(transient); + return endMutation(transient); + }; + Map2.prototype.mutate = function(f4) { + return mutate(f4, this); + }; + var appk = function appk2(k5) { + return k5 && lazyVisitChildren(k5[0], k5[1], k5[2], k5[3], k5[4]); + }; + var lazyVisitChildren = function lazyVisitChildren2(len, children, i4, f4, k5) { + while (i4 < len) { + var child = children[i4++]; + if (child && !isEmptyNode(child)) + return lazyVisit(child, f4, [len, children, i4, f4, k5]); } + return appk(k5); }; - const editable = props2.editMode != 0; - return /* @__PURE__ */ bn.createElement(OptionCellBase, { - menuProps, - getLabelString: (o3) => o3.label, - valueClass: (o3) => o3.file ? "mk-cell-link-item" : "mk-cell-link-unresolved", - openItem: openLink, - value, - multi: props2.multi, - editMode: props2.editMode, - removeValue - }); -}; - -// src/components/ContextView/TableView/TableView.tsx -var import_lodash4 = __toESM(require_lodash()); -var import_obsidian17 = require("obsidian"); - -// src/utils/ui/selection.ts -var selectNextIndex = (currIndex, array) => { - if (!currIndex && array.length > 0) - return array[0]; - const pos = array.indexOf(currIndex); - if (pos < array.length - 1) - return array[pos + 1]; - return currIndex; -}; -var selectPrevIndex = (currIndex, array) => { - const pos = array.indexOf(currIndex); - if (pos > 0) - return array[pos - 1]; - return array[0]; -}; -var selectRange = (currSel, newSel, array) => { - const lastIndex = array.findIndex((f4) => f4 == currSel); - const newIndex = array.findIndex((f4) => f4 == newSel); - if (lastIndex < newIndex) { - return array.filter((f4, i4) => i4 > lastIndex && i4 <= newIndex); - } - return array.filter((f4, i4) => i4 < lastIndex && i4 >= newIndex); -}; - -// src/components/ContextView/DataTypeView/ImageCell.tsx -var ImageCell = (props2) => { - const { initialValue, saveValue } = props2; - const [value, setValue] = bn.useState(initialValue); - const ref = _2(null); - h2( - () => { - if (props2.editMode == 2 /* EditModeActive */) { - ref.current.focus(); - } - }, - [] - ); - const file = F(() => getAbstractFileAtPath(app, value), [value]); - const onBlur = (e4) => { - const newValue = e4.target.value; - if (initialValue != newValue) { - setValue(newValue); - saveValue(newValue); + var lazyVisit = function lazyVisit2(node, f4, k5) { + switch (node.type) { + case LEAF: + return { + value: f4(node), + rest: k5 + }; + case COLLISION: + case ARRAY: + case INDEX: + var children = node.children; + return lazyVisitChildren(children.length, children, 0, f4, k5); + default: + return appk(k5); } }; - const onKeyDown = (e4) => { - e4.stopPropagation(); - if (e4.key == "Enter" || e4.key == "Escape") { - e4.target.blur(); - props2.setEditMode(null); - } + var DONE = { + done: true + }; + function MapIterator(v3) { + this.v = v3; + } + MapIterator.prototype.next = function() { + if (!this.v) + return DONE; + var v0 = this.v; + this.v = appk(v0.rest); + return v0; + }; + MapIterator.prototype[Symbol.iterator] = function() { + return this; }; - bn.useEffect(() => { - setValue(initialValue); - }, [initialValue]); - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, " ", props2.editMode >= 2 && /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement("input", { - className: "mk-cell-text", - type: "text", - ref, - value, - onKeyDown, - onBlur - })), props2.editMode > 0 && /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement("img", { - src: file ? app.vault.getResourcePath(file) : value - }))); -}; - -// src/components/ContextView/DataTypeView/TagCell.tsx -var TagCell = (props2) => { - var _a2; - const initialValue = (props2.multi ? (_a2 = splitString(props2.initialValue)) != null ? _a2 : [] : [props2.initialValue]).filter((f4) => (f4 == null ? void 0 : f4.length) > 0); - const ref = _2(null); - const [value, setValue] = p2(initialValue); - const removeValue = (v3) => { - const newValues = value.filter((f4) => f4 != v3); - setValue(newValues); - props2.saveValue(newValues.join(",")); + var visit = function visit2(map, f4) { + return new MapIterator(lazyVisit(map._root, f4)); }; - const saveOptions = (_options, _value) => { - if (!props2.multi) { - setValue(_value); - props2.saveValue(_value.join(",")); - } else { - const newValue = _value[0]; - if (newValue) { - const newValues = uniq([...value, newValue]); - setValue(newValues); - props2.saveValue(newValues.join(",")); + var buildPairs = function buildPairs2(x5) { + return [x5.key, x5.value]; + }; + var entries = hamt.entries = function(map) { + return visit(map, buildPairs); + }; + Map2.prototype.entries = Map2.prototype[Symbol.iterator] = function() { + return entries(this); + }; + var buildKeys = function buildKeys2(x5) { + return x5.key; + }; + var keys = hamt.keys = function(map) { + return visit(map, buildKeys); + }; + Map2.prototype.keys = function() { + return keys(this); + }; + var buildValues = function buildValues2(x5) { + return x5.value; + }; + var values = hamt.values = Map2.prototype.values = function(map) { + return visit(map, buildValues); + }; + Map2.prototype.values = function() { + return values(this); + }; + var fold = hamt.fold = function(f4, z5, m5) { + var root = m5._root; + if (root.type === LEAF) + return f4(z5, root.value, root.key); + var toVisit = [root.children]; + var children = void 0; + while (children = toVisit.pop()) { + for (var i4 = 0, len = children.length; i4 < len; ) { + var child = children[i4++]; + if (child && child.type) { + if (child.type === LEAF) + z5 = f4(z5, child.value, child.key); + else + toVisit.push(child.children); + } } } + return z5; }; - const menuProps = () => { - const options = loadTags(props2.plugin).map((f4) => ({ name: f4, value: stringFromTag(f4) })); - const _options = !props2.multi ? [{ name: "None", value: "" }, ...options] : options; - return { - multi: false, - editable: true, - value, - options: _options, - saveOptions, - placeholder: "Find Tag", - searchable: true, - showAll: true, - onHide: () => props2.setEditMode(null) - }; + Map2.prototype.fold = function(f4, z5) { + return fold(f4, z5, this); }; - return /* @__PURE__ */ bn.createElement(OptionCellBase, { - menuProps, - value, - multi: props2.multi, - editMode: props2.editMode, - removeValue - }); -}; - -// src/components/ContextView/TableView/TableView.tsx -var TableView = (props2) => { - const { selectedRows, selectRows, tableData, sortedColumns: cols, filteredData: data, tagContexts, folderPath, saveSchema, searchString, dbSchema, contextTable, setContextTable, predicate, savePredicate, saveDB: saveDB2, saveContextDB, schema, dbPath, saveColumn, delColumn, newColumn, isFolderContext } = q2(MDBContext); - const [activeId, setActiveId] = p2(null); - const [lastSelectedIndex, setLastSelectedIndex] = p2(null); - const [selectedColumn, setSelectedColumn] = p2(null); - const [currentEdit, setCurrentEdit] = p2(null); - const [overId, setOverId] = p2(null); - const [openFlows, setOpenFlows] = p2([]); - const [selectNewOnRefresh, setSelectNewOnRefresh] = p2(false); - const [colsSize, setColsSize] = p2({}); - const ref = _2(null); - h2(() => { - setColsSize({ ...predicate.colsSize, "+": 30 }); - }, [predicate]); - h2(() => { - setCurrentEdit(null); - }, [selectedColumn, lastSelectedIndex]); - h2(() => { - if (currentEdit == null) { - ref.current.focus(); - } - }, [currentEdit]); - const saveColsSize = (colSize) => { - const newColSize = colSize(colsSize); - setColsSize(newColSize); - debouncedSavePredicate(newColSize); + var forEach = hamt.forEach = function(f4, map) { + return fold(function(_4, value, key2) { + return f4(value, key2, map); + }, null, map); }; - const debouncedSavePredicate = T2( - (0, import_lodash4.debounce)((nextValue) => savePredicate({ - ...predicate, - colsSize: nextValue - }), 1e3), - [predicate] - ); - const newRow = () => { - saveDB2(createNewRow(tableData, { File: "" })); - setSelectNewOnRefresh(true); + Map2.prototype.forEach = function(f4) { + return forEach(f4, this); }; - const deleteRow = (rowIndex) => { - const row = tableData.rows.find((f4, i4) => i4 == rowIndex); - if (row._source == "folder") { - deleteFile(props2.plugin, getAbstractFileAtPath(app, row.File)); - } - if (row) { - saveDB2({ - ...tableData, - rows: tableData.rows.filter((f4, i4) => i4 != rowIndex) - }); - } + var count2 = hamt.count = function(map) { + return map._size; }; - const toggleFlow = (path) => { - setOpenFlows((f4) => f4.find((p3) => p3 == path) ? f4.filter((p3) => p3 != path) : uniq([...f4, path])); + Map2.prototype.count = function() { + return count2(this); }; - const selectItem = (modifier, index) => { - if (modifier == 3) { - const file = getAbstractFileAtPath(app, tableData.rows[parseInt(index)].File); - if (file) - openAFile(file, app, false); - return; - } - if (modifier == 2) { - selectedRows.some((f4) => f4 == index) ? selectRows(null, selectedRows.filter((f4) => f4 != index)) : selectRows(index, uniq([...selectedRows, index])); - } else if (modifier == 1) { - selectRows(index, uniq([...selectedRows, ...selectRange(lastSelectedIndex, index, data.map((f4) => f4._index))])); - } else { - selectRows(index, [index]); + Object.defineProperty(Map2.prototype, "size", { + get: Map2.prototype.count + }); + if (module2.exports) { + module2.exports = hamt; + } else { + (void 0).hamt = hamt; + } +}); +var BuiltInMap = class { + constructor(existing) { + _defineProperty(this, "_map", void 0); + this._map = new Map(existing === null || existing === void 0 ? void 0 : existing.entries()); + } + keys() { + return this._map.keys(); + } + entries() { + return this._map.entries(); + } + get(k5) { + return this._map.get(k5); + } + has(k5) { + return this._map.has(k5); + } + set(k5, v3) { + this._map.set(k5, v3); + return this; + } + delete(k5) { + this._map.delete(k5); + return this; + } + clone() { + return persistentMap(this); + } + toMap() { + return new Map(this._map); + } +}; +var HashArrayMappedTrieMap = class { + constructor(existing) { + _defineProperty(this, "_hamt", hamt_1.empty.beginMutation()); + if (existing instanceof HashArrayMappedTrieMap) { + const h5 = existing._hamt.endMutation(); + existing._hamt = h5.beginMutation(); + this._hamt = h5.beginMutation(); + } else if (existing) { + for (const [k5, v3] of existing.entries()) { + this._hamt.set(k5, v3); + } } - setLastSelectedIndex(index); + } + keys() { + return this._hamt.keys(); + } + entries() { + return this._hamt.entries(); + } + get(k5) { + return this._hamt.get(k5); + } + has(k5) { + return this._hamt.has(k5); + } + set(k5, v3) { + this._hamt.set(k5, v3); + return this; + } + delete(k5) { + this._hamt.delete(k5); + return this; + } + clone() { + return persistentMap(this); + } + toMap() { + return new Map(this._hamt); + } +}; +function persistentMap(existing) { + if (Recoil_gkx_1("recoil_hamt_2020")) { + return new HashArrayMappedTrieMap(existing); + } else { + return new BuiltInMap(existing); + } +} +var Recoil_PersistentMap = { + persistentMap +}; +var Recoil_PersistentMap_1 = Recoil_PersistentMap.persistentMap; +var Recoil_PersistentMap$1 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + persistentMap: Recoil_PersistentMap_1 +}); +var { + graph: graph$1 +} = Recoil_Graph; +var { + persistentMap: persistentMap$1 +} = Recoil_PersistentMap$1; +var nextTreeStateVersion = 0; +var getNextTreeStateVersion = () => nextTreeStateVersion++; +function makeEmptyTreeState() { + const version = getNextTreeStateVersion(); + return { + version, + stateID: version, + transactionMetadata: {}, + dirtyAtoms: /* @__PURE__ */ new Set(), + atomValues: persistentMap$1(), + nonvalidatedAtoms: persistentMap$1() }; - const onKeyDown = (e4) => { - if (e4.key == "Escape") { - selectRows(null, []); - setLastSelectedIndex(null); - } - if (e4.key == "Enter") { - if (selectedColumn && lastSelectedIndex) - setCurrentEdit([selectedColumn, lastSelectedIndex]); - return; - } - if (e4.key == "ArrowDown") { - const newIndex = selectNextIndex(lastSelectedIndex, data.map((f4) => f4._index)); - selectRows(newIndex, [newIndex]); - setLastSelectedIndex(newIndex); - } - if (e4.key == "ArrowUp") { - const newIndex = selectPrevIndex(lastSelectedIndex, data.map((f4) => f4._index)); - selectRows(newIndex, [newIndex]); - setLastSelectedIndex(newIndex); +} +function makeEmptyStoreState() { + const currentTree = makeEmptyTreeState(); + return { + currentTree, + nextTree: null, + previousTree: null, + commitDepth: 0, + knownAtoms: /* @__PURE__ */ new Set(), + knownSelectors: /* @__PURE__ */ new Set(), + transactionSubscriptions: /* @__PURE__ */ new Map(), + nodeTransactionSubscriptions: /* @__PURE__ */ new Map(), + nodeToComponentSubscriptions: /* @__PURE__ */ new Map(), + queuedComponentCallbacks_DEPRECATED: [], + suspendedComponentResolvers: /* @__PURE__ */ new Set(), + graphsByVersion: (/* @__PURE__ */ new Map()).set(currentTree.version, graph$1()), + versionsUsedByComponent: /* @__PURE__ */ new Map(), + retention: { + referenceCounts: /* @__PURE__ */ new Map(), + nodesRetainedByZone: /* @__PURE__ */ new Map(), + retainablesToCheckForRelease: /* @__PURE__ */ new Set() + }, + nodeCleanupFunctions: /* @__PURE__ */ new Map() + }; +} +var Recoil_State = { + makeEmptyTreeState, + makeEmptyStoreState, + getNextTreeStateVersion +}; +function unionSets(...sets) { + const result = /* @__PURE__ */ new Set(); + for (const set of sets) { + for (const value of set) { + result.add(value); } - if (e4.key == "ArrowLeft") { - const newIndex = selectPrevIndex(selectedColumn, columns.map((f4) => f4.accessorKey).filter((f4) => f4 != "+")); - setSelectedColumn(newIndex); + } + return result; +} +var Recoil_unionSets = unionSets; +function someSet(set, callback, context) { + const iterator = set.entries(); + let current = iterator.next(); + while (!current.done) { + const entry = current.value; + if (callback.call(context, entry[1], entry[0], set)) { + return true; } - if (e4.key == "ArrowRight") { - const newIndex = selectNextIndex(selectedColumn, columns.map((f4) => f4.accessorKey).filter((f4) => f4 != "+")); - setSelectedColumn(newIndex); + current = iterator.next(); + } + return false; +} +var Recoil_someSet = someSet; +var { + cleanUpNode: cleanUpNode$1 +} = Recoil_FunctionalCore; +var { + deleteNodeConfigIfPossible: deleteNodeConfigIfPossible$1, + getNode: getNode$2 +} = Recoil_Node; +var { + RetentionZone: RetentionZone$2 +} = Recoil_RetentionZone; +var emptySet$1 = /* @__PURE__ */ new Set(); +function releaseRetainablesNowOnCurrentTree(store, retainables) { + const storeState = store.getState(); + const treeState = storeState.currentTree; + if (storeState.nextTree) { + Recoil_recoverableViolation("releaseNodesNowOnCurrentTree should only be called at the end of a batch"); + return; + } + const nodes2 = /* @__PURE__ */ new Set(); + for (const r3 of retainables) { + if (r3 instanceof RetentionZone$2) { + for (const n2 of nodesRetainedByZone(storeState, r3)) { + nodes2.add(n2); + } + } else { + nodes2.add(r3); } - }; - h2(() => { - if (selectNewOnRefresh) { - const lastIndex = data.length - 1; - selectItem(0, data[lastIndex]._index); - setSelectedColumn("File"); - setCurrentEdit(["File", data[lastIndex]._index]); - setSelectNewOnRefresh(false); + } + const releasableNodes = findReleasableNodes(store, nodes2); + for (const node of releasableNodes) { + releaseNode(store, treeState, node); + } +} +function findReleasableNodes(store, searchFromNodes) { + const storeState = store.getState(); + const treeState = storeState.currentTree; + const graph2 = store.getGraph(treeState.version); + const releasableNodes = /* @__PURE__ */ new Set(); + const nonReleasableNodes = /* @__PURE__ */ new Set(); + findReleasableNodesInner(searchFromNodes); + return releasableNodes; + function findReleasableNodesInner(searchFromNodes2) { + const releasableNodesFoundThisIteration = /* @__PURE__ */ new Set(); + const downstreams = getDownstreamNodesInTopologicalOrder( + store, + treeState, + searchFromNodes2, + releasableNodes, + nonReleasableNodes + ); + for (const node of downstreams) { + var _storeState$retention; + if (getNode$2(node).retainedBy === "recoilRoot") { + nonReleasableNodes.add(node); + continue; + } + if (((_storeState$retention = storeState.retention.referenceCounts.get(node)) !== null && _storeState$retention !== void 0 ? _storeState$retention : 0) > 0) { + nonReleasableNodes.add(node); + continue; + } + if (zonesThatCouldRetainNode(node).some((z5) => storeState.retention.referenceCounts.get(z5))) { + nonReleasableNodes.add(node); + continue; + } + const nodeChildren = graph2.nodeToNodeSubscriptions.get(node); + if (nodeChildren && Recoil_someSet(nodeChildren, (child) => nonReleasableNodes.has(child))) { + nonReleasableNodes.add(node); + continue; + } + releasableNodes.add(node); + releasableNodesFoundThisIteration.add(node); } - }, [data]); - const columns = F(() => { - var _a2; - return [...(_a2 = cols == null ? void 0 : cols.filter((f4) => f4.type != "preview").map((f4) => { - return { - header: f4.name, - accessorKey: f4.name + f4.table, - meta: { - table: f4.table, - editable: f4.primary != "true", - schemaId: dbSchema == null ? void 0 : dbSchema.id - }, - cell: ({ getValue, row: { index }, column: { id: id2 }, cell, table: table2 }) => { - const initialValue = getValue(); - const rowIndex = f4.table == "" ? index : parseInt(data[index]["_index" + f4.table]); - const saveValue = (value) => { - var _a3; - if (initialValue != value) - (_a3 = table2.options.meta) == null ? void 0 : _a3.updateData(rowIndex, f4.name, f4.table, value); - }; - const saveFieldValue = (fieldValue, value) => { - var _a3; - (_a3 = table2.options.meta) == null ? void 0 : _a3.updateFieldValue(rowIndex, f4.name, f4.table, fieldValue, value); - }; - const editMode = !cell.getIsGrouped() ? platformIsMobile() ? 3 /* EditModeAlways */ : currentEdit && currentEdit[0] == f4.name + f4.table && currentEdit[1] == index ? 2 /* EditModeActive */ : 1 /* EditModeView */ : -1 /* EditModeReadOnly */; - const cellProps = { - initialValue, - saveValue, - plugin: props2.plugin, - setEditMode: setCurrentEdit, - editMode - }; - const fieldType = fieldTypes.find((t4) => f4.type == t4.type) || fieldTypes.find((t4) => f4.type == t4.multiType); - if (!fieldType) { - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, initialValue); - } - if (fieldType.type == "file") { - return /* @__PURE__ */ bn.createElement(FileCell, { - ...cellProps, - multi: fieldType.multiType == f4.type, - folder: folderPath, - isFolder: isFolderContext, - openFlow: () => toggleFlow(initialValue), - deleteRow: () => deleteRow(index) - }); - } else if (fieldType.type == "boolean") { - return /* @__PURE__ */ bn.createElement(BooleanCell, { - ...cellProps, - column: f4 - }); - } else if (fieldType.type == "option") { - return /* @__PURE__ */ bn.createElement(OptionCell, { - ...cellProps, - options: f4.value, - multi: fieldType.multiType == f4.type, - saveOptions: saveFieldValue - }); - } else if (fieldType.type == "date") { - return /* @__PURE__ */ bn.createElement(DateCell, { - ...cellProps - }); - } else if (fieldType.type == "context") { - return /* @__PURE__ */ bn.createElement(ContextCell, { - ...cellProps, - multi: fieldType.multiType == f4.type, - contextTable: contextTable[f4.value], - contextTag: f4.value - }); - } else if (fieldType.type == "fileprop") { - return /* @__PURE__ */ bn.createElement(FilePropertyCell, { - ...cellProps, - property: f4.value, - file: data[index]["File"] - }); - } else if (fieldType.type == "tag") { - return /* @__PURE__ */ bn.createElement(TagCell, { - ...cellProps, - multi: fieldType.multiType == f4.type - }); - } else if (fieldType.type == "number") { - return /* @__PURE__ */ bn.createElement(NumberCell, { - ...cellProps - }); - } else if (fieldType.type == "link") { - return /* @__PURE__ */ bn.createElement(LinkCell, { - ...cellProps, - multi: fieldType.multiType == f4.type, - file: data[index]["File"] - }); - } else if (fieldType.type == "image") { - return /* @__PURE__ */ bn.createElement(ImageCell, { - ...cellProps - }); - } else { - return /* @__PURE__ */ bn.createElement(TextCell, { - ...cellProps - }); - } - } - }; - })) != null ? _a2 : [], { header: "+", meta: { schemaId: dbSchema == null ? void 0 : dbSchema.id }, accessorKey: "+", size: 20, cell: () => /* @__PURE__ */ bn.createElement(bn.Fragment, null) }]; - }, [cols, currentEdit, predicate, contextTable, toggleFlow, openFlows]); - const changeColSize = (size2) => { - savePredicate({ - ...predicate, - colsSize: size2 - }); - }; - const groupBy2 = F(() => { - var _a2; - return ((_a2 = predicate.groupBy) == null ? void 0 : _a2.length) > 0 && cols.find((f4) => f4.name + f4.table == predicate.groupBy[0]) ? predicate.groupBy : []; - }, [predicate, cols]); - const table = useReactTable({ - data, - columns, - columnResizeMode: "onChange", - state: { - columnVisibility: predicate.colsHidden.reduce((p3, c4) => ({ ...p3, [c4]: false }), {}), - columnOrder: predicate.colsOrder, - columnSizing: { ...columns.reduce((p3, c4) => ({ ...p3, [c4.accessorKey]: 150 }), {}), ...colsSize }, - grouping: groupBy2, - expanded: true - }, - onColumnSizingChange: saveColsSize, - getCoreRowModel: getCoreRowModel(), - getExpandedRowModel: getExpandedRowModel(), - getGroupedRowModel: getGroupedRowModel(), - meta: { - updateData: (index, column, table2, value, file) => { - var _a2; - const col = cols.find((f4) => f4.table == table2 && f4.name == column); - saveFrontmatterValue((_a2 = tableData.rows[index]) == null ? void 0 : _a2.File, column, value, col.type); - if (table2 == "") { - saveDB2({ - ...tableData, - rows: tableData.rows.map((r3, i4) => i4 == index ? { - ...r3, - [column]: value - } : r3) - }); - } else if (contextTable[table2]) { - saveContextDB({ - ...contextTable[table2], - rows: contextTable[table2].rows.map((r3, i4) => i4 == index ? { - ...r3, - [column]: value - } : r3) - }, table2); - } - }, - updateFieldValue: (index, column, table2, fieldValue, value) => { - var _a2; - const col = cols.find((f4) => f4.table == table2 && f4.name == column); - saveFrontmatterValue((_a2 = tableData.rows[index]) == null ? void 0 : _a2.File, column, value, col.type); - if (table2 == "") { - const newTable = { - ...tableData, - cols: tableData.cols.map((m5) => m5.name == column ? { - ...m5, - value: fieldValue - } : m5), - rows: tableData.rows.map((r3, i4) => i4 == index ? { - ...r3, - [column]: value - } : r3) - }; - saveDB2(newTable); - } else if (contextTable[table2]) { - saveContextDB({ - ...contextTable[table2], - cols: contextTable[table2].cols.map((m5) => m5.name == column ? { - ...m5, - value: fieldValue - } : m5), - rows: contextTable[table2].rows.map((r3, i4) => i4 == index ? { - ...r3, - [column]: value - } : r3) - }, table2); + const parents = /* @__PURE__ */ new Set(); + for (const node of releasableNodesFoundThisIteration) { + for (const parent of (_graph$nodeDeps$get = graph2.nodeDeps.get(node)) !== null && _graph$nodeDeps$get !== void 0 ? _graph$nodeDeps$get : emptySet$1) { + var _graph$nodeDeps$get; + if (!releasableNodes.has(parent)) { + parents.add(parent); } } } - }); - const sensors = useSensors( - useSensor(MouseSensor, { - activationConstraint: { - distance: 10 - } - }), - useSensor(TouchSensor, { - activationConstraint: { - delay: 250, - tolerance: 5 - } - }) - ); - const measuring = { - droppable: { - strategy: MeasuringStrategy.Always + if (parents.size) { + findReleasableNodesInner(parents); } - }; - function handleDragStart(event) { - const { active: { id: activeId2 } } = event; - setActiveId(activeId2); - setOverId(overId); - document.body.style.setProperty("cursor", "grabbing"); } - function handleDragOver({ over }) { - var _a2; - const overId2 = over == null ? void 0 : over.id; - if (overId2) { - setOverId((_a2 = over == null ? void 0 : over.id) != null ? _a2 : null); - } +} +function getDownstreamNodesInTopologicalOrder(store, treeState, nodes2, doNotDescendInto1, doNotDescendInto2) { + const graph2 = store.getGraph(treeState.version); + const answer = []; + const visited = /* @__PURE__ */ new Set(); + while (nodes2.size > 0) { + visit(Recoil_nullthrows(nodes2.values().next().value)); } - const saveFilter = (filter) => { - savePredicate({ - ...predicate, - filters: [...predicate.filters.filter((s5) => s5.field != filter.field), filter] - }); - }; - const saveSort = (sort) => { - savePredicate({ - ...predicate, - sort: [sort] - }); - }; - const hideCol = (col) => { - savePredicate({ - ...predicate, - colsHidden: [...predicate.colsHidden.filter((s5) => s5 != col), col] - }); - }; - const selectCell = (e4, index, column) => { - if (platformIsMobile() || column == "+") + return answer; + function visit(node) { + if (doNotDescendInto1.has(node) || doNotDescendInto2.has(node)) { + nodes2.delete(node); return; - selectItem(0, data[index]["_index"]); - setSelectedColumn(column); - if (e4.detail === 1) { - } else if (e4.detail === 2) { - setCurrentEdit([column, data[index]["_index"]]); } - }; - const showContextMenu = (e4, index) => { - const menu = new import_obsidian17.Menu(); - menu.addItem((item) => { - item.setTitle("Delete Item"); - item.onClick(() => { - deleteRow(index); - }); - }); - if (isMouseEvent(e4)) { - menu.showAtPosition({ x: e4.pageX, y: e4.pageY }); - } else { - menu.showAtPosition({ x: e4.nativeEvent.locationX, y: e4.nativeEvent.locationY }); + if (visited.has(node)) { + return; } - }; - function handleDragEnd({ active, over }) { - resetState(); - savePredicate({ ...predicate, colsOrder: arrayMove(predicate.colsOrder, predicate.colsOrder.findIndex((f4) => f4 == activeId), predicate.colsOrder.findIndex((f4) => f4 == overId)) }); + const children = graph2.nodeToNodeSubscriptions.get(node); + if (children) { + for (const child of children) { + visit(child); + } + } + visited.add(node); + nodes2.delete(node); + answer.push(node); } - function handleDragCancel() { - resetState(); +} +function releaseNode(store, treeState, node) { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; } - function resetState() { - setOverId(null); - setActiveId(null); - document.body.style.setProperty("cursor", ""); + cleanUpNode$1(store, node); + const storeState = store.getState(); + storeState.knownAtoms.delete(node); + storeState.knownSelectors.delete(node); + storeState.nodeTransactionSubscriptions.delete(node); + storeState.retention.referenceCounts.delete(node); + const zones = zonesThatCouldRetainNode(node); + for (const zone of zones) { + var _storeState$retention2; + (_storeState$retention2 = storeState.retention.nodesRetainedByZone.get(zone)) === null || _storeState$retention2 === void 0 ? void 0 : _storeState$retention2.delete(node); } - return /* @__PURE__ */ bn.createElement(DndContext, { - sensors, - collisionDetection: closestCenter, - measuring, - onDragStart: handleDragStart, - onDragOver: handleDragOver, - onDragEnd: handleDragEnd, - onDragCancel: handleDragCancel - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-table", - ref, - tabIndex: 1, - onKeyDown - }, /* @__PURE__ */ bn.createElement("table", { - ...{} - }, /* @__PURE__ */ bn.createElement("thead", null, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ bn.createElement("tr", { - key: headerGroup.id - }, headerGroup.headers.map((header) => { - var _a2; - return /* @__PURE__ */ bn.createElement("th", { - className: "mk-th", - key: header.id, - style: { - minWidth: header.column.getIsGrouped() ? "0px" : (_a2 = colsSize[header.column.columnDef.accessorKey]) != null ? _a2 : "150px" - } - }, header.isPlaceholder ? null : header.column.columnDef.header != "+" ? header.column.getIsGrouped() ? /* @__PURE__ */ bn.createElement(bn.Fragment, null) : /* @__PURE__ */ bn.createElement(ColumnHeader, { - plugin: props2.plugin, - editable: header.column.columnDef.meta.editable, - column: cols.find((f4) => f4.name == header.column.columnDef.header && f4.table == header.column.columnDef.meta.table), - saveColumn, - deleteColumn: delColumn, - hide: hideCol, - filter: saveFilter, - sort: saveSort - }) : /* @__PURE__ */ bn.createElement(ColumnHeader, { - plugin: props2.plugin, - isNew: true, - editable: true, - column: { name: "", schemaId: header.column.columnDef.meta.schemaId, type: "text", table: "" }, - saveColumn: newColumn, - deleteColumn: delColumn - }), /* @__PURE__ */ bn.createElement("div", { - ...{ - onMouseDown: header.getResizeHandler(), - onTouchStart: header.getResizeHandler(), - className: `mk-resizer ${header.column.getIsResizing() ? "isResizing" : ""}` - } - })); - })))), /* @__PURE__ */ bn.createElement("tbody", null, table.getRowModel().rows.map((row) => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("tr", { - className: (selectedRows == null ? void 0 : selectedRows.some((f4) => f4 == data[row.index]["_index"])) && "mk-is-active", - onContextMenu: (e4) => { - const rowIndex = parseInt(data[row.index]["_index"]); - showContextMenu(e4, rowIndex); - }, - key: row.id - }, row.getVisibleCells().map((cell) => { - var _a2, _b2; - return cell.getIsGrouped() ? /* @__PURE__ */ bn.createElement("td", { - className: "mk-td-group", - colSpan: cols.length + 1 - }, /* @__PURE__ */ bn.createElement("div", { - ...{ - onClick: row.getToggleExpandedHandler(), - style: { - display: "flex", - alignItems: "center", - cursor: "normal" - } - } - }, flexRender( - cell.column.columnDef.cell, - cell.getContext() - ), " ", "(", row.subRows.length, ")")) : cell.getIsAggregated() ? flexRender( - (_a2 = cell.column.columnDef.aggregatedCell) != null ? _a2 : cell.column.columnDef.cell, - cell.getContext() - ) : /* @__PURE__ */ bn.createElement("td", { - onClick: (e4) => selectCell(e4, cell.row.index, cell.column.columnDef.accessorKey), - className: `${cell.column.columnDef.accessorKey == selectedColumn ? "mk-selected-cell " : ""} mk-td ${cell.getIsPlaceholder() ? "mk-td-empty" : ""}`, - key: cell.id, - style: { - minWidth: cell.getIsPlaceholder() ? "0px" : (_b2 = colsSize[cell.column.columnDef.accessorKey]) != null ? _b2 : "50px" + treeState.atomValues.delete(node); + treeState.dirtyAtoms.delete(node); + treeState.nonvalidatedAtoms.delete(node); + const graph2 = storeState.graphsByVersion.get(treeState.version); + if (graph2) { + const deps = graph2.nodeDeps.get(node); + if (deps !== void 0) { + graph2.nodeDeps.delete(node); + for (const dep of deps) { + var _graph$nodeToNodeSubs; + (_graph$nodeToNodeSubs = graph2.nodeToNodeSubscriptions.get(dep)) === null || _graph$nodeToNodeSubs === void 0 ? void 0 : _graph$nodeToNodeSubs.delete(node); } - }, cell.getIsPlaceholder() ? null : flexRender(cell.column.columnDef.cell, cell.getContext())); - }))))), /* @__PURE__ */ bn.createElement("tfoot", null, isFolderContext ? /* @__PURE__ */ bn.createElement("tr", null, /* @__PURE__ */ bn.createElement("th", { - className: "mk-row-new", - colSpan: cols.length + 1, - onClick: () => { - newRow(); } - }, "+ New")) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), table.getFooterGroups().map((footerGroup) => /* @__PURE__ */ bn.createElement("tr", { - key: footerGroup.id - }, footerGroup.headers.map((header) => /* @__PURE__ */ bn.createElement("th", { - key: header.id - }, header.isPlaceholder ? null : flexRender( - header.column.columnDef.footer, - header.getContext() - ))))))), j3( - /* @__PURE__ */ bn.createElement(DragOverlay, { - dropAnimation: null, - zIndex: 1600 - }, activeId ? /* @__PURE__ */ bn.createElement(ColumnHeader, { - plugin: props2.plugin, - editable: false, - column: { name: activeId, schemaId: tableData.schema.id, type: "text", table: "" }, - saveColumn: newColumn, - deleteColumn: delColumn - }) : null), - document.body - ))); + graph2.nodeToNodeSubscriptions.delete(node); + } + deleteNodeConfigIfPossible$1(node); +} +function nodesRetainedByZone(storeState, zone) { + var _storeState$retention3; + return (_storeState$retention3 = storeState.retention.nodesRetainedByZone.get(zone)) !== null && _storeState$retention3 !== void 0 ? _storeState$retention3 : emptySet$1; +} +function zonesThatCouldRetainNode(node) { + const retainedBy = getNode$2(node).retainedBy; + if (retainedBy === void 0 || retainedBy === "components" || retainedBy === "recoilRoot") { + return []; + } else if (retainedBy instanceof RetentionZone$2) { + return [retainedBy]; + } else { + return retainedBy; + } +} +function scheduleOrPerformPossibleReleaseOfRetainable(store, retainable) { + const state = store.getState(); + if (state.nextTree) { + state.retention.retainablesToCheckForRelease.add(retainable); + } else { + releaseRetainablesNowOnCurrentTree(store, /* @__PURE__ */ new Set([retainable])); + } +} +function updateRetainCount(store, retainable, delta) { + var _map$get; + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; + } + const map = store.getState().retention.referenceCounts; + const newCount = ((_map$get = map.get(retainable)) !== null && _map$get !== void 0 ? _map$get : 0) + delta; + if (newCount === 0) { + updateRetainCountToZero(store, retainable); + } else { + map.set(retainable, newCount); + } +} +function updateRetainCountToZero(store, retainable) { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; + } + const map = store.getState().retention.referenceCounts; + map.delete(retainable); + scheduleOrPerformPossibleReleaseOfRetainable(store, retainable); +} +function releaseScheduledRetainablesNow(store) { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; + } + const state = store.getState(); + releaseRetainablesNowOnCurrentTree(store, state.retention.retainablesToCheckForRelease); + state.retention.retainablesToCheckForRelease.clear(); +} +function retainedByOptionWithDefault(r3) { + return r3 === void 0 ? "recoilRoot" : r3; +} +var Recoil_Retention = { + updateRetainCount, + updateRetainCountToZero, + releaseScheduledRetainablesNow, + retainedByOptionWithDefault +}; +function* concatIterables(iters) { + for (const iter of iters) { + for (const val of iter) { + yield val; + } + } +} +var Recoil_concatIterables = concatIterables; +var isSSR = typeof window === "undefined"; +var isReactNative = typeof navigator !== "undefined" && navigator.product === "ReactNative"; +var Recoil_Environment = { + isSSR, + isReactNative }; +var { + isSSR: isSSR$1 +} = Recoil_Environment; +var { + batchUpdates: batchUpdates$1 +} = Recoil_Batching; +var { + initializeNodeIfNewToStore: initializeNodeIfNewToStore$1, + peekNodeInfo: peekNodeInfo$1 +} = Recoil_FunctionalCore; +var { + graph: graph$2 +} = Recoil_Graph; +var { + DEFAULT_VALUE: DEFAULT_VALUE$1, + recoilValues: recoilValues$1, + recoilValuesForKeys: recoilValuesForKeys$2 +} = Recoil_Node; +var { + AbstractRecoilValue: AbstractRecoilValue$2, + getRecoilValueAsLoadable: getRecoilValueAsLoadable$1, + setRecoilValue: setRecoilValue$1, + setUnvalidatedRecoilValue: setUnvalidatedRecoilValue$1 +} = Recoil_RecoilValueInterface; +var { + updateRetainCount: updateRetainCount$1 +} = Recoil_Retention; +var { + getNextTreeStateVersion: getNextTreeStateVersion$1, + makeEmptyStoreState: makeEmptyStoreState$1 +} = Recoil_State; +var retainWarning = ` +Recoil Snapshots only last for the duration of the callback they are provided to. To keep a Snapshot longer, do this: -// src/components/ContextView/DataTypeView/DateCell.tsx -var DateCell = (props2) => { - const [value, setValue] = p2(props2.initialValue); - h2(() => { - setValue(props2.initialValue); - }, [props2.initialValue]); - const date = F(() => { - const dateTime = Date.parse(value); - return dateTime > 0 ? new Date(dateTime + new Date().getTimezoneOffset() * 60 * 1e3) : null; - }, [value]); - const saveValue = (date2) => { - const newValue = format(date2, "yyyy-MM-dd"); - props2.saveValue(newValue); - setValue(newValue); - props2.setEditMode(null); - }; - const menuRef = _2(null); - const ref = _2(null); - h2(() => { - if (props2.editMode == 2 /* EditModeActive */) { - if (ref.current) { - showPicker(); - ref.current.focus(); + const release = snapshot.retain(); + try { + await useTheSnapshotAsynchronously(snapshot); + } finally { + release(); + } + +This is currently a DEV-only warning but will become a thrown exception in the next release of Recoil. +`; +var Snapshot = class { + constructor(storeState) { + _defineProperty(this, "_store", void 0); + _defineProperty(this, "_refCount", 0); + _defineProperty(this, "getLoadable", (recoilValue) => { + this.checkRefCount_INTERNAL(); + return getRecoilValueAsLoadable$1(this._store, recoilValue); + }); + _defineProperty(this, "getPromise", (recoilValue) => { + this.checkRefCount_INTERNAL(); + return this.getLoadable(recoilValue).toPromise(); + }); + _defineProperty(this, "getNodes_UNSTABLE", (opt) => { + this.checkRefCount_INTERNAL(); + if ((opt === null || opt === void 0 ? void 0 : opt.isModified) === true) { + if ((opt === null || opt === void 0 ? void 0 : opt.isInitialized) === false) { + return []; + } + const state = this._store.getState().currentTree; + return recoilValuesForKeys$2(state.dirtyAtoms); + } + const knownAtoms = this._store.getState().knownAtoms; + const knownSelectors = this._store.getState().knownSelectors; + return (opt === null || opt === void 0 ? void 0 : opt.isInitialized) == null ? recoilValues$1.values() : opt.isInitialized === true ? recoilValuesForKeys$2(Recoil_concatIterables([this._store.getState().knownAtoms, this._store.getState().knownSelectors])) : Recoil_filterIterable(recoilValues$1.values(), ({ + key: key2 + }) => !knownAtoms.has(key2) && !knownSelectors.has(key2)); + }); + _defineProperty(this, "getInfo_UNSTABLE", ({ + key: key2 + }) => { + this.checkRefCount_INTERNAL(); + return peekNodeInfo$1(this._store, this._store.getState().currentTree, key2); + }); + _defineProperty(this, "map", (mapper) => { + this.checkRefCount_INTERNAL(); + const mutableSnapshot = new MutableSnapshot(this, batchUpdates$1); + mapper(mutableSnapshot); + return cloneSnapshot(mutableSnapshot.getStore_INTERNAL()); + }); + _defineProperty(this, "asyncMap", async (mapper) => { + this.checkRefCount_INTERNAL(); + const mutableSnapshot = new MutableSnapshot(this, batchUpdates$1); + await mapper(mutableSnapshot); + return cloneSnapshot(mutableSnapshot.getStore_INTERNAL()); + }); + this._store = { + getState: () => storeState, + replaceState: (replacer) => { + storeState.currentTree = replacer(storeState.currentTree); + }, + getGraph: (version) => { + const graphs = storeState.graphsByVersion; + if (graphs.has(version)) { + return Recoil_nullthrows(graphs.get(version)); + } + const newGraph = graph$2(); + graphs.set(version, newGraph); + return newGraph; + }, + subscribeToTransactions: () => ({ + release: () => { + } + }), + addTransactionMetadata: () => { + throw new Error("Cannot subscribe to Snapshots"); } + }; + for (const nodeKey of this._store.getState().nodeCleanupFunctions.keys()) { + initializeNodeIfNewToStore$1(this._store, storeState.currentTree, nodeKey, "get"); + updateRetainCount$1(this._store, nodeKey, 1); } - }, [props2.editMode]); - const showPicker = (e4) => { - const offset = e4 ? e4.target.getBoundingClientRect() : ref.current.getBoundingClientRect(); - menuRef.current = showDatePickerMenu({ x: offset.left - 4, y: offset.bottom - 4 }, date, saveValue); - }; - const onKeyDown = (e4) => { - e4.stopPropagation(); - if (e4.key == "Enter" || e4.key == "Escape") { - e4.target.blur(); - saveValue(date); - menuRef.current.hide(); + this.retain(); + this.autorelease_INTERNAL(); + } + retain() { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return () => void 0; } - }; - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-date", - onClick: (e4) => !value && showPicker(e4) - }, props2.editMode == 2 ? /* @__PURE__ */ bn.createElement("input", { - onClick: (e4) => e4.stopPropagation(), - className: "mk-cell-text", - ref, - type: "text", - value, - onChange: (e4) => setValue(e4.target.value), - onMouseDown: () => showPicker(), - onKeyDown - }) : /* @__PURE__ */ bn.createElement("div", { - className: "mk-cell-date-value", - onClick: (e4) => showPicker(e4) - }, date ? format(date, "MMM dd") : value)); -}; - -// src/components/ContextView/DataTypeView/PreviewCell.tsx -var PreviewCell = (props2) => { - const [vaultItem, setVaultItem] = p2(null); - const previewImage = F(() => { - if (!props2.row || !props2.columns) - return null; - const imageCol = props2.columns.find((f4) => f4.type == "image"); - if (!imageCol) - return null; - return props2.row[imageCol.name + imageCol.table]; - }, [props2.row, props2.columns]); - const previewFile = F(() => { - return getAbstractFileAtPath(app, previewImage); - }, [previewImage]); - const loadIcon = () => { - setVaultItem(vaultItemForPath(props2.plugin, props2.file)); - }; - h2(() => { - loadIcon(); - window.addEventListener(eventTypes.spacesChange, loadIcon); + this._refCount++; + let released = false; return () => { - window.removeEventListener(eventTypes.spacesChange, loadIcon); + if (!released) { + released = true; + this.release_INTERNAL(); + } }; - }, [props2.file]); - return previewImage ? /* @__PURE__ */ bn.createElement("div", { - className: "mk-file-preview", - style: { "backgroundSize": "cover", "backgroundImage": `url(${previewFile ? app.vault.getResourcePath(previewFile) : previewImage})` } - }) : /* @__PURE__ */ bn.createElement("div", { - className: "mk-file-preview", - style: (vaultItem == null ? void 0 : vaultItem.color.length) > 0 ? { - "--label-color": `${vaultItem.color}`, - "--icon-color": `#ffffff` - } : { - "--label-color": `var(--background-secondary-alt)`, - "--icon-color": `var(--text-muted)` + } + autorelease_INTERNAL() { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; } - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-file-icon", - dangerouslySetInnerHTML: (vaultItem == null ? void 0 : vaultItem.sticker) ? { __html: unifiedToNative(vaultItem.sticker) } : (vaultItem == null ? void 0 : vaultItem.folder) == "true" ? { __html: uiIconSet["mk-ui-folder"] } : { __html: uiIconSet["mk-ui-file"] } - })); -}; - -// src/components/ContextView/DataTypeView/DataTypeView.tsx -var DataTypeView = (props2) => { - const { initialValue, index, column, file } = props2; - const { tableData, saveDB: saveDB2, saveContextDB, contextTable } = q2(MDBContext); - const table = column.table; - const updateData = (column2, value) => { - var _a2; - const col = (_a2 = table == "" ? tableData : contextTable[table]) == null ? void 0 : _a2.cols.find((f4) => f4.name == column2); - if (col) - saveFrontmatterValue(file, column2, value, col.type); - if (table == "") { - saveDB2({ - ...tableData, - rows: tableData.rows.map((r3, i4) => i4 == index ? { - ...r3, - [column2]: value - } : r3) - }); - } else if (contextTable[table]) { - saveContextDB({ - ...contextTable[table], - rows: contextTable[table].rows.map((r3, i4) => i4 == index ? { - ...r3, - [column2]: value - } : r3) - }, table); + if (!isSSR$1) { + window.setTimeout(() => this.release_INTERNAL(), 0); } - }; - const updateFieldValue = (column2, fieldValue, value) => { - const col = tableData.cols.find((f4) => f4.name == column2); - saveFrontmatterValue(file, column2, value, col.type); - if (table == "") { - const newTable = { - ...tableData, - cols: tableData.cols.map((m5) => m5.name == column2 ? { - ...m5, - value: fieldValue - } : m5), - rows: tableData.rows.map((r3, i4) => i4 == index ? { - ...r3, - [column2]: value - } : r3) - }; - saveDB2(newTable); - } else if (contextTable[table]) { - saveContextDB({ - ...contextTable[table], - cols: contextTable[table].cols.map((m5) => m5.name == column2 ? { - ...m5, - value: fieldValue - } : m5), - rows: contextTable[table].rows.map((r3, i4) => i4 == index ? { - ...r3, - [column2]: value - } : r3) - }, table); + } + release_INTERNAL() { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; } - }; - const saveValue = (value) => { - updateData(column.name, value); - }; - const saveFieldValue = (fieldValue, value) => { - updateFieldValue(column.name, fieldValue, value); - }; - const viewProps = { - initialValue, - saveValue, - editMode: props2.editable == true ? 3 : 0, - setEditMode: () => { + this._refCount--; + if (this._refCount === 0) + ; + } + checkRefCount_INTERNAL() { + if (Recoil_gkx_1("recoil_memory_managament_2020") && this._refCount <= 0) { + if (true) { + Recoil_recoverableViolation(retainWarning); + } + } + } + getStore_INTERNAL() { + this.checkRefCount_INTERNAL(); + return this._store; + } + getID() { + this.checkRefCount_INTERNAL(); + return this.getID_INTERNAL(); + } + getID_INTERNAL() { + this.checkRefCount_INTERNAL(); + return this._store.getState().currentTree.stateID; + } +}; +function cloneStoreState(store, treeState, bumpVersion = false) { + const storeState = store.getState(); + const version = bumpVersion ? getNextTreeStateVersion$1() : treeState.version; + return { + currentTree: bumpVersion ? { + version, + stateID: version, + transactionMetadata: { + ...treeState.transactionMetadata + }, + dirtyAtoms: new Set(treeState.dirtyAtoms), + atomValues: treeState.atomValues.clone(), + nonvalidatedAtoms: treeState.nonvalidatedAtoms.clone() + } : treeState, + commitDepth: 0, + nextTree: null, + previousTree: null, + knownAtoms: new Set(storeState.knownAtoms), + knownSelectors: new Set(storeState.knownSelectors), + transactionSubscriptions: /* @__PURE__ */ new Map(), + nodeTransactionSubscriptions: /* @__PURE__ */ new Map(), + nodeToComponentSubscriptions: /* @__PURE__ */ new Map(), + queuedComponentCallbacks_DEPRECATED: [], + suspendedComponentResolvers: /* @__PURE__ */ new Set(), + graphsByVersion: (/* @__PURE__ */ new Map()).set(version, store.getGraph(treeState.version)), + versionsUsedByComponent: /* @__PURE__ */ new Map(), + retention: { + referenceCounts: /* @__PURE__ */ new Map(), + nodesRetainedByZone: /* @__PURE__ */ new Map(), + retainablesToCheckForRelease: /* @__PURE__ */ new Set() }, - plugin: props2.plugin + nodeCleanupFunctions: /* @__PURE__ */ new Map() }; - const fieldType = fieldTypes.find((t4) => column.type == t4.type) || fieldTypes.find((t4) => column.type == t4.multiType); - if (!fieldType) { - return /* @__PURE__ */ bn.createElement(bn.Fragment, null); - } - if (fieldType.type == "preview") { - return /* @__PURE__ */ bn.createElement(PreviewCell, { - ...viewProps, - file, - row: props2.row, - columns: props2.cols - }); - } else if (fieldType.type == "file") { - return /* @__PURE__ */ bn.createElement(FileCell, { - isFolder: false, - ...viewProps, - multi: fieldType.multiType == column.type, - openFlow: props2.openFlow - }); - } else if (fieldType.type == "boolean") { - return /* @__PURE__ */ bn.createElement(BooleanCell, { - ...viewProps, - column - }); - } else if (fieldType.type == "option") { - return /* @__PURE__ */ bn.createElement(OptionCell, { - ...viewProps, - options: column.value, - multi: fieldType.multiType == column.type, - saveOptions: saveFieldValue - }); - } else if (fieldType.type == "date") { - return /* @__PURE__ */ bn.createElement(DateCell, { - ...viewProps - }); - } else if (fieldType.type == "context") { - return /* @__PURE__ */ bn.createElement(ContextCell, { - ...viewProps, - multi: fieldType.multiType == column.type, - contextTable: contextTable[column.value], - contextTag: column.value - }); - } else if (fieldType.type == "fileprop") { - return /* @__PURE__ */ bn.createElement(FilePropertyCell, { - ...viewProps, - property: column.value, - file - }); - } else if (fieldType.type == "number") { - return /* @__PURE__ */ bn.createElement(NumberCell, { - ...viewProps - }); - } else if (fieldType.type == "link") { - return /* @__PURE__ */ bn.createElement(LinkCell, { - ...viewProps, - multi: fieldType.multiType == column.type, - file +} +function freshSnapshot(initializeState) { + const snapshot = new Snapshot(makeEmptyStoreState$1()); + return initializeState != null ? snapshot.map(initializeState) : snapshot; +} +function cloneSnapshot(store, version = "current") { + const storeState = store.getState(); + const treeState = version === "current" ? storeState.currentTree : Recoil_nullthrows(storeState.previousTree); + return new Snapshot(cloneStoreState(store, treeState)); +} +var MutableSnapshot = class extends Snapshot { + constructor(snapshot, batch) { + super(cloneStoreState(snapshot.getStore_INTERNAL(), snapshot.getStore_INTERNAL().getState().currentTree, true)); + _defineProperty(this, "_batch", void 0); + _defineProperty(this, "set", (recoilState, newValueOrUpdater) => { + this.checkRefCount_INTERNAL(); + const store = this.getStore_INTERNAL(); + this._batch(() => { + updateRetainCount$1(store, recoilState.key, 1); + setRecoilValue$1(this.getStore_INTERNAL(), recoilState, newValueOrUpdater); + }); }); - } else if (fieldType.type == "tag") { - return /* @__PURE__ */ bn.createElement(TagCell, { - ...viewProps, - multi: fieldType.multiType == column.type + _defineProperty(this, "reset", (recoilState) => { + this.checkRefCount_INTERNAL(); + const store = this.getStore_INTERNAL(); + this._batch(() => { + updateRetainCount$1(store, recoilState.key, 1); + setRecoilValue$1(this.getStore_INTERNAL(), recoilState, DEFAULT_VALUE$1); + }); }); - } else if (fieldType.type == "image") { - return /* @__PURE__ */ bn.createElement(ImageCell, { - ...viewProps + _defineProperty(this, "setUnvalidatedAtomValues_DEPRECATED", (values) => { + this.checkRefCount_INTERNAL(); + const store = this.getStore_INTERNAL(); + batchUpdates$1(() => { + for (const [k5, v3] of values.entries()) { + updateRetainCount$1(store, k5, 1); + setUnvalidatedRecoilValue$1(store, new AbstractRecoilValue$2(k5), v3); + } + }); }); + this._batch = batch; } - return /* @__PURE__ */ bn.createElement(TextCell, { - ...viewProps - }); }; - -// src/components/ContextView/CardsView/KanbanColumn.tsx -var KanbanColumn = k3( - ({ - id: id2, - children, - columns = 1, - handleProps, - horizontal, - hover, - onClick, - onRemove, - plugin, - field, - label, - file, - placeholder: placeholder2, - style, - scrollable, - shadow, - unstyled, - ...props2 - }, ref) => { - const Component3 = "div"; - return /* @__PURE__ */ bn.createElement(Component3, { - ...props2, - ref, - style: { - ...style, - "--columns": columns - }, - className: (0, import_classnames.default)( - "mk-list-group", - unstyled && "unstyled", - horizontal && "horizontal", - hover && "hover", - placeholder2 && "placeholder", - scrollable && "scrollable", - shadow && "shadow" - ), - onClick, - tabIndex: onClick ? 0 : void 0 - }, label != null && field ? /* @__PURE__ */ bn.createElement("div", { - className: "mk-list-group-header" - }, /* @__PURE__ */ bn.createElement(DataTypeView, { - initialValue: label, - plugin, - index: parseInt(id2) * -1, - file, - column: field, - editable: false - }), /* @__PURE__ */ bn.createElement("div", { - className: "Actions", - ...handleProps - })) : null, placeholder2 ? children : /* @__PURE__ */ bn.createElement("ul", null, children)); +var Recoil_Snapshot = { + Snapshot, + MutableSnapshot, + freshSnapshot, + cloneSnapshot +}; +var Recoil_Snapshot_1 = Recoil_Snapshot.Snapshot; +var Recoil_Snapshot_2 = Recoil_Snapshot.MutableSnapshot; +var Recoil_Snapshot_3 = Recoil_Snapshot.freshSnapshot; +var Recoil_Snapshot_4 = Recoil_Snapshot.cloneSnapshot; +var Recoil_Snapshot$1 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + Snapshot: Recoil_Snapshot_1, + MutableSnapshot: Recoil_Snapshot_2, + freshSnapshot: Recoil_Snapshot_3, + cloneSnapshot: Recoil_Snapshot_4 +}); +var { + getNextTreeStateVersion: getNextTreeStateVersion$2, + makeEmptyStoreState: makeEmptyStoreState$2 +} = Recoil_State; +var { + cleanUpNode: cleanUpNode$2, + getDownstreamNodes: getDownstreamNodes$2, + setNodeValue: setNodeValue$2, + setUnvalidatedAtomValue_DEPRECATED: setUnvalidatedAtomValue_DEPRECATED$1 +} = Recoil_FunctionalCore; +var { + graph: graph$3 +} = Recoil_Graph; +var { + cloneGraph: cloneGraph$1 +} = Recoil_Graph; +var { + applyAtomValueWrites: applyAtomValueWrites$1 +} = Recoil_RecoilValueInterface; +var { + releaseScheduledRetainablesNow: releaseScheduledRetainablesNow$1 +} = Recoil_Retention; +var { + freshSnapshot: freshSnapshot$1 +} = Recoil_Snapshot$1; +var { + useCallback, + useContext, + useEffect, + useMemo, + useRef: useRef2, + useState +} = bn; +function notInAContext() { + throw new Error("This component must be used inside a component."); +} +var defaultStore = Object.freeze({ + getState: notInAContext, + replaceState: notInAContext, + getGraph: notInAContext, + subscribeToTransactions: notInAContext, + addTransactionMetadata: notInAContext +}); +var stateReplacerIsBeingExecuted = false; +function startNextTreeIfNeeded(store) { + if (stateReplacerIsBeingExecuted) { + throw new Error("An atom update was triggered within the execution of a state updater function. State updater functions provided to Recoil must be pure functions."); } -); - -// src/components/ContextView/CardsView/KanbanCard.tsx -var import_classnames2 = __toESM(require_classnames()); - -// src/components/FlowEditor/FlowView.tsx -var FlowView = (props2) => { - const ref = _2(null); - const loadFile = () => { - const div = ref.current; - const type = viewTypeByString(props2.path); - const portalType = type == "tag" || type == "folder" ? "context" : "doc"; - spawnLeafFromFile(props2.plugin, props2.path, div, portalType); - }; - const toggleFlow = () => { - if (props2.load) { - loadFile(); - } else { - ref.current.empty(); + const storeState = store.getState(); + if (storeState.nextTree === null) { + if (Recoil_gkx_1("recoil_memory_managament_2020") && Recoil_gkx_1("recoil_release_on_cascading_update_killswitch_2021")) { + if (storeState.commitDepth > 0) { + releaseScheduledRetainablesNow$1(store); + } } - }; - h2(() => { - toggleFlow(); - }, [props2.load, props2.path]); - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-flowspace-editor", - ref - }); -}; - -// src/components/ContextView/CardsView/KanbanCard.tsx -var KanbanCard = bn.memo( - bn.forwardRef( - ({ - color, - dragOverlay, - dragging, - disabled, - fadeIn, - handle, - height, - index, - listeners, - selected, - onSelect, - onRemove, - renderItem, - plugin, - id: id2, - sorting, - style, - transition, - transform, - value, - cols, - wrapperStyle, - ...props2 - }, ref) => { - const onClickHandler = (e4) => { - if (!onSelect) { - return; - } - if (e4.detail === 1) { - onSelect(e4.shiftKey ? 1 : e4.metaKey ? 2 : 0, value["_index"]); - } else if (e4.detail === 2) { - onSelect(3, value["_index"]); - } - }; - h2(() => { - if (!dragOverlay) { - return; + const version = storeState.currentTree.version; + const nextVersion = getNextTreeStateVersion$2(); + storeState.nextTree = { + ...storeState.currentTree, + version: nextVersion, + stateID: nextVersion, + dirtyAtoms: /* @__PURE__ */ new Set(), + transactionMetadata: {} + }; + storeState.graphsByVersion.set(nextVersion, cloneGraph$1(Recoil_nullthrows(storeState.graphsByVersion.get(version)))); + } +} +var AppContext = bn.createContext({ + current: defaultStore +}); +var useStoreRef = () => useContext(AppContext); +var MutableSourceContext = bn.createContext(null); +function useRecoilMutableSource() { + const mutableSource = useContext(MutableSourceContext); + if (mutableSource == null) { + Recoil_expectationViolation("Attempted to use a Recoil hook outside of a . must be an ancestor of any component that uses Recoil hooks."); + } + return mutableSource; +} +function notifyComponents(store, storeState, treeState) { + const dependentNodes = getDownstreamNodes$2(store, treeState, treeState.dirtyAtoms); + for (const key2 of dependentNodes) { + const comps = storeState.nodeToComponentSubscriptions.get(key2); + if (comps) { + for (const [_subID, [_debugName, callback]] of comps) { + callback(treeState); + } + } + } +} +function sendEndOfBatchNotifications(store) { + const storeState = store.getState(); + const treeState = storeState.currentTree; + const dirtyAtoms = treeState.dirtyAtoms; + if (dirtyAtoms.size) { + for (const [key2, subscriptions] of storeState.nodeTransactionSubscriptions) { + if (dirtyAtoms.has(key2)) { + for (const [_4, subscription] of subscriptions) { + subscription(store); } - document.body.style.cursor = "grabbing"; - return () => { - document.body.style.cursor = ""; - }; - }, [dragOverlay]); - const [openFlow, setOpenFlow] = p2(false); - return renderItem ? renderItem({ - dragOverlay: Boolean(dragOverlay), - dragging: Boolean(dragging), - sorting: Boolean(sorting), - index, - fadeIn: Boolean(fadeIn), - listeners, - ref, - style, - transform, - transition, - value - }) : /* @__PURE__ */ bn.createElement("li", { - className: (0, import_classnames2.default)( - "mk-list-item", - fadeIn && "fadeIn", - sorting && "sorting", - dragOverlay && "dragOverlay", - selected && "mk-is-active" - ), - onClick: onClickHandler, - style: { - ...wrapperStyle, - transition, - "--translate-x": transform ? `${Math.round(transform.x)}px` : void 0, - "--translate-y": transform ? `${Math.round(transform.y)}px` : void 0, - "--scale-x": (transform == null ? void 0 : transform.scaleX) ? `${transform.scaleX}` : void 0, - "--scale-y": (transform == null ? void 0 : transform.scaleY) ? `${transform.scaleY}` : void 0, - "--index": index, - "--color": color - }, - ref - }, value && cols.filter((f4) => f4.type == "preview" && f4.table == "").map((f4) => /* @__PURE__ */ bn.createElement(DataTypeView, { - row: value, - cols, - plugin, - initialValue: value[f4.name + f4.table], - column: f4, - index: parseInt(id2), - file: value["File"], - editable: false - })), /* @__PURE__ */ bn.createElement("div", { - className: "mk-list-content" - }, /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames2.default)( - "mk-list-fields", - dragging && "dragging", - handle && "withHandle", - dragOverlay && "dragOverlay", - disabled && "disabled", - color && "color" - ), - style, - "data-cypress": "draggable-item", - ...listeners, - ...props2, - tabIndex: !handle ? 0 : void 0 - }, value && cols.map((f4) => { - var _a2; - return ((_a2 = value[f4.name + f4.table]) == null ? void 0 : _a2.length) > 0 || f4.type == "fileprop" ? /* @__PURE__ */ bn.createElement(DataTypeView, { - openFlow: () => setOpenFlow((o3) => !o3), - plugin, - initialValue: value[f4.name + f4.table], - column: f4, - index: parseInt(id2), - file: value["File"], - editable: false - }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); - })), /* @__PURE__ */ bn.createElement(FlowView, { - plugin, - path: value.File, - load: openFlow - }))); + } + } + for (const [_4, subscription] of storeState.transactionSubscriptions) { + subscription(store); + } + if (!Recoil_gkx_1("recoil_early_rendering_2021") || storeState.suspendedComponentResolvers.size) { + notifyComponents(store, storeState, treeState); + storeState.suspendedComponentResolvers.forEach((cb) => cb()); + storeState.suspendedComponentResolvers.clear(); + } + } + storeState.queuedComponentCallbacks_DEPRECATED.forEach((cb) => cb(treeState)); + storeState.queuedComponentCallbacks_DEPRECATED.splice(0, storeState.queuedComponentCallbacks_DEPRECATED.length); +} +function endBatch(storeRef) { + const storeState = storeRef.current.getState(); + storeState.commitDepth++; + try { + const { + nextTree + } = storeState; + if (nextTree === null) { + return; } - ) -); - -// src/components/ContextView/CardsView/CardsView.tsx -var import_classnames3 = __toESM(require_classnames()); -var animateLayoutChanges = (args) => args.isSorting || args.wasDragging ? defaultAnimateLayoutChanges(args) : true; -function DroppableContainer({ - children, - columns = 1, - disabled, - id: id2, - items, - style, - ...props2 + storeState.previousTree = storeState.currentTree; + storeState.currentTree = nextTree; + storeState.nextTree = null; + sendEndOfBatchNotifications(storeRef.current); + if (storeState.previousTree != null) { + storeState.graphsByVersion.delete(storeState.previousTree.version); + } else { + Recoil_recoverableViolation("Ended batch with no previous state, which is unexpected", "recoil"); + } + storeState.previousTree = null; + if (Recoil_gkx_1("recoil_memory_managament_2020")) { + releaseScheduledRetainablesNow$1(storeRef.current); + } + } finally { + storeState.commitDepth--; + } +} +function Batcher({ + setNotifyBatcherOfChange }) { - var _a2; - const { - active, - attributes, - isDragging, - listeners, - over, - setNodeRef, - transition, - transform - } = useSortable({ - id: id2, - data: { - type: "container" - }, - animateLayoutChanges + const storeRef = useStoreRef(); + const [_4, setState] = useState([]); + setNotifyBatcherOfChange(() => setState({})); + useEffect(() => { + Recoil_Queue.enqueueExecution("Batcher", () => { + endBatch(storeRef); + }); }); - const isOverContainer = over ? id2 === over.id && ((_a2 = active == null ? void 0 : active.data.current) == null ? void 0 : _a2.type) !== "container" || items.includes(over.id) : false; - return /* @__PURE__ */ bn.createElement(KanbanColumn, { - id: id2, - ref: disabled ? void 0 : setNodeRef, - style: { - ...style, - transition, - transform: CSS.Translate.toString(transform), - opacity: isDragging ? 0.5 : void 0 - }, - hover: isOverContainer, - handleProps: { - ...attributes, - ...listeners + useEffect(() => { + return () => { + setNotifyBatcherOfChange(() => { + }); + }; + }, [setNotifyBatcherOfChange]); + return null; +} +if (true) { + if (typeof window !== "undefined" && !window.$recoilDebugStates) { + window.$recoilDebugStates = []; + } +} +function initialStoreState_DEPRECATED(store, initializeState) { + const initial = makeEmptyStoreState$2(); + initializeState({ + set: (atom2, value) => { + const state = initial.currentTree; + const writes = setNodeValue$2(store, state, atom2.key, value); + const writtenNodes = new Set(writes.keys()); + const nonvalidatedAtoms = state.nonvalidatedAtoms.clone(); + for (const n2 of writtenNodes) { + nonvalidatedAtoms.delete(n2); + } + initial.currentTree = { + ...state, + dirtyAtoms: Recoil_unionSets(state.dirtyAtoms, writtenNodes), + atomValues: applyAtomValueWrites$1(state.atomValues, writes), + nonvalidatedAtoms + }; }, - columns, - ...props2 - }, children); + setUnvalidatedAtomValues: (atomValues) => { + atomValues.forEach((v3, k5) => { + initial.currentTree = setUnvalidatedAtomValue_DEPRECATED$1(initial.currentTree, k5, v3); + }); + } + }); + return initial; } -var PLACEHOLDER_ID = "placeholder"; -var CardsView = ({ - adjustScale: adjustScale2 = false, - itemCount = 3, - cancelDrop, - columns, - handle = false, - items: initialItems, - containerStyle, - getItemStyles = () => ({}), - wrapperStyle = () => ({}), - minimal = false, - modifiers, - renderItem, - strategy = verticalListSortingStrategy, - vertical = false, - scrollable, - plugin -}) => { - var _a2, _b2; - const { tableData, filteredData, selectedRows, selectRows, sortedColumns: cols, predicate, tagContexts, contextTable, schema, saveDB: saveDB2, saveContextDB } = q2(MDBContext); - const groupBy2 = ((_a2 = predicate.groupBy) == null ? void 0 : _a2.length) > 0 ? cols.find((f4) => f4.name + f4.table == predicate.groupBy[0]) : null; - const displayCols = (_b2 = cols == null ? void 0 : cols.filter((f4) => !(f4.name == (groupBy2 == null ? void 0 : groupBy2.name) && f4.table == groupBy2.table))) != null ? _b2 : []; - const viewType = schema.type; - const items = F(() => { - var _a3, _b3; - if (groupBy2) { - const options = uniq([ - "", - ...(_a3 = splitString(groupBy2.value)) != null ? _a3 : [], - ...filteredData.reduce((p3, c4) => { - var _a4; - return [...p3, (_a4 = c4[groupBy2.name + groupBy2.table]) != null ? _a4 : ""]; - }, []) - ]); - return options.reduce((p3, c4) => { - return { ...p3, [c4]: filteredData.filter((r3) => r3[groupBy2.name + groupBy2.table] == c4).map((r3) => r3._index) }; - }, { "": [] }); +function initialStoreState(initializeState) { + const snapshot = freshSnapshot$1().map(initializeState); + return snapshot.getStore_INTERNAL().getState(); +} +var nextID = 0; +function RecoilRoot_INTERNAL({ + initializeState_DEPRECATED, + initializeState, + store_INTERNAL: storeProp, + children +}) { + var _createMutableSource; + let storeState; + const getGraph = (version) => { + const graphs = storeState.current.graphsByVersion; + if (graphs.has(version)) { + return Recoil_nullthrows(graphs.get(version)); } - return { - "": (_b3 = filteredData == null ? void 0 : filteredData.map((r3) => r3._index)) != null ? _b3 : [] - }; - }, [filteredData, predicate]); - const containers = F(() => Object.keys(items).map((f4, i4) => "-" + i4.toString()), [items]); - const [activeId, setActiveId] = p2(null); - const [overId, setOverId] = p2(null); - const recentlyMovedToNewContainer = _2(false); - const isSortingContainer = activeId ? containers.includes(activeId) : false; - const [lastSelectedIndex, setLastSelectedIndex] = p2(null); - const sensors = useSensors( - useSensor(MouseSensor, { - activationConstraint: { - distance: 10 - } - }), - useSensor(TouchSensor, { - activationConstraint: { - delay: 250, - tolerance: 5 + const newGraph = graph$3(); + graphs.set(version, newGraph); + return newGraph; + }; + const subscribeToTransactions = (callback, key2) => { + if (key2 == null) { + const { + transactionSubscriptions + } = storeRef.current.getState(); + const id2 = nextID++; + transactionSubscriptions.set(id2, callback); + return { + release: () => { + transactionSubscriptions.delete(id2); + } + }; + } else { + const { + nodeTransactionSubscriptions + } = storeRef.current.getState(); + if (!nodeTransactionSubscriptions.has(key2)) { + nodeTransactionSubscriptions.set(key2, /* @__PURE__ */ new Map()); } - }), - useSensor(KeyboardSensor, { - coordinateGetter: sortableKeyboardCoordinates - }) - ); - const findContainer = (id2) => { - if (id2.charAt(0) == "-") { - return id2; + const id2 = nextID++; + Recoil_nullthrows(nodeTransactionSubscriptions.get(key2)).set(id2, callback); + return { + release: () => { + const subs = nodeTransactionSubscriptions.get(key2); + if (subs) { + subs.delete(id2); + if (subs.size === 0) { + nodeTransactionSubscriptions.delete(key2); + } + } + } + }; } - return "-" + Object.keys(items).findIndex((key2) => items[key2].includes(id2)).toString(); }; - const getIndex = (id2) => { - const container = findContainer(id2); - if (!container) { - return -1; + const addTransactionMetadata = (metadata) => { + startNextTreeIfNeeded(storeRef.current); + for (const k5 of Object.keys(metadata)) { + Recoil_nullthrows(storeRef.current.getState().nextTree).transactionMetadata[k5] = metadata[k5]; } - const index = items[Object.keys(items)[parseInt(container) * -1]].indexOf(id2); - return index; }; - const resetState = () => { - setActiveId(null); - setOverId(null); + const replaceState = (replacer) => { + const storeState2 = storeRef.current.getState(); + startNextTreeIfNeeded(storeRef.current); + const nextTree = Recoil_nullthrows(storeState2.nextTree); + let replaced; + try { + stateReplacerIsBeingExecuted = true; + replaced = replacer(nextTree); + } finally { + stateReplacerIsBeingExecuted = false; + } + if (replaced === nextTree) { + return; + } + if (true) { + if (typeof window !== "undefined") { + window.$recoilDebugStates.push(replaced); + } + } + storeState2.nextTree = replaced; + if (Recoil_gkx_1("recoil_early_rendering_2021")) { + notifyComponents(store, storeState2, replaced); + } + Recoil_nullthrows(notifyBatcherOfChange.current)(); }; - const onDragCancel = () => { - resetState(); + const notifyBatcherOfChange = useRef2(null); + const setNotifyBatcherOfChange = useCallback((x5) => { + notifyBatcherOfChange.current = x5; + }, [notifyBatcherOfChange]); + const createMutableSource = (_createMutableSource = bn.createMutableSource) !== null && _createMutableSource !== void 0 ? _createMutableSource : bn.unstable_createMutableSource; + const store = storeProp !== null && storeProp !== void 0 ? storeProp : { + getState: () => storeState.current, + replaceState, + getGraph, + subscribeToTransactions, + addTransactionMetadata }; - h2(() => { - requestAnimationFrame(() => { - recentlyMovedToNewContainer.current = false; + const storeRef = useRef2(store); + storeState = useRef2(initializeState_DEPRECATED != null ? initialStoreState_DEPRECATED(store, initializeState_DEPRECATED) : initializeState != null ? initialStoreState(initializeState) : makeEmptyStoreState$2()); + const mutableSource = useMemo(() => createMutableSource ? createMutableSource(storeState, () => storeState.current.currentTree.version) : null, [createMutableSource, storeState]); + useEffect(() => () => { + for (const atomKey of storeRef.current.getState().knownAtoms) { + cleanUpNode$2(storeRef.current, atomKey); + } + }, []); + return /* @__PURE__ */ bn.createElement(AppContext.Provider, { + value: storeRef + }, /* @__PURE__ */ bn.createElement(MutableSourceContext.Provider, { + value: mutableSource + }, /* @__PURE__ */ bn.createElement(Batcher, { + setNotifyBatcherOfChange + }), children)); +} +function RecoilRoot(props2) { + const { + override, + ...propsExceptOverride + } = props2; + const ancestorStoreRef = useStoreRef(); + if (override === false && ancestorStoreRef.current !== defaultStore) { + return props2.children; + } + return /* @__PURE__ */ bn.createElement(RecoilRoot_INTERNAL, propsExceptOverride); +} +var Recoil_RecoilRoot_react = { + useStoreRef, + useRecoilMutableSource, + RecoilRoot, + notifyComponents_FOR_TESTING: notifyComponents, + sendEndOfBatchNotifications_FOR_TESTING: sendEndOfBatchNotifications +}; +var { + loadableWithValue: loadableWithValue$1 +} = Recoil_Loadable; +var { + DEFAULT_VALUE: DEFAULT_VALUE$2, + getNode: getNode$3 +} = Recoil_Node; +var { + copyTreeState: copyTreeState$1, + getRecoilValueAsLoadable: getRecoilValueAsLoadable$2, + invalidateDownstreams: invalidateDownstreams$1, + writeLoadableToTreeState: writeLoadableToTreeState$1 +} = Recoil_RecoilValueInterface; +function isAtom(recoilValue) { + return getNode$3(recoilValue.key).nodeType === "atom"; +} +var TransactionInterfaceImpl = class { + constructor(store, treeState) { + _defineProperty(this, "_store", void 0); + _defineProperty(this, "_treeState", void 0); + _defineProperty(this, "_changes", void 0); + _defineProperty(this, "get", (recoilValue) => { + if (this._changes.has(recoilValue.key)) { + return this._changes.get(recoilValue.key); + } + if (!isAtom(recoilValue)) { + throw new Error("Reading selectors within atomicUpdate is not supported"); + } + const loadable = getRecoilValueAsLoadable$2(this._store, recoilValue, this._treeState); + if (loadable.state === "hasValue") { + return loadable.contents; + } else if (loadable.state === "hasError") { + throw loadable.contents; + } else { + throw new Error(`Expected Recoil atom ${recoilValue.key} to have a value, but it is in a loading state.`); + } }); - }, [items]); - const saveFieldValue = (table, fieldValue, column) => { - if (table == "") { - const newTable = { - ...tableData, - cols: tableData.cols.map((m5) => m5.name == column ? { - ...m5, - value: fieldValue - } : m5) - }; - saveDB2(newTable); - } else if (contextTable[table]) { - saveContextDB({ - ...contextTable[table], - cols: contextTable[table].cols.map((m5) => m5.name == column ? { - ...m5, - value: fieldValue - } : m5) - }, table); + _defineProperty(this, "set", (recoilState, valueOrUpdater) => { + if (!isAtom(recoilState)) { + throw new Error("Setting selectors within atomicUpdate is not supported"); + } + if (typeof valueOrUpdater === "function") { + const current = this.get(recoilState); + this._changes.set(recoilState.key, valueOrUpdater(current)); + } else { + this._changes.set(recoilState.key, valueOrUpdater); + } + }); + _defineProperty(this, "reset", (recoilState) => { + this.set(recoilState, DEFAULT_VALUE$2); + }); + this._store = store; + this._treeState = treeState; + this._changes = /* @__PURE__ */ new Map(); + } + newTreeState_INTERNAL() { + if (this._changes.size === 0) { + return this._treeState; + } + const newState = copyTreeState$1(this._treeState); + for (const [k5, v3] of this._changes) { + writeLoadableToTreeState$1(newState, k5, loadableWithValue$1(v3)); + } + invalidateDownstreams$1(this._store, newState); + return newState; + } +}; +function atomicUpdater(store) { + return (fn2) => { + store.replaceState((treeState) => { + const changeset = new TransactionInterfaceImpl(store, treeState); + fn2(changeset); + return changeset.newTreeState_INTERNAL(); + }); + }; +} +var Recoil_AtomicUpdates = { + atomicUpdater +}; +var Recoil_AtomicUpdates_1 = Recoil_AtomicUpdates.atomicUpdater; +var Recoil_AtomicUpdates$1 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + atomicUpdater: Recoil_AtomicUpdates_1 +}); +function filterMap(map, callback) { + const result = /* @__PURE__ */ new Map(); + for (const [key2, value] of map) { + if (callback(value, key2)) { + result.set(key2, value); + } + } + return result; +} +var Recoil_filterMap = filterMap; +function filterSet(set, callback) { + const result = /* @__PURE__ */ new Set(); + for (const value of set) { + if (callback(value)) { + result.add(value); + } + } + return result; +} +var Recoil_filterSet = filterSet; +function invariant(condition, message) { + if (!condition) { + throw new Error(message); + } +} +var invariant_1 = invariant; +var Recoil_invariant = invariant_1; +function mergeMaps(...maps) { + const result = /* @__PURE__ */ new Map(); + for (let i4 = 0; i4 < maps.length; i4++) { + const iterator = maps[i4].keys(); + let nextKey; + while (!(nextKey = iterator.next()).done) { + result.set(nextKey.value, maps[i4].get(nextKey.value)); + } + } + return result; +} +var Recoil_mergeMaps = mergeMaps; +function shallowArrayEqual(a5, b4) { + if (a5 === b4) { + return true; + } + if (a5.length !== b4.length) { + return false; + } + for (let i4 = 0, l3 = a5.length; i4 < l3; i4++) { + if (a5[i4] !== b4[i4]) { + return false; + } + } + return true; +} +var Recoil_shallowArrayEqual = shallowArrayEqual; +var UNKNOWN_FUNCTION = ""; +function stackTraceParser(stackString) { + const lines = stackString.split("\n"); + return lines.reduce((stack, line) => { + const parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line); + if (parseResult) { + stack.push(parseResult); } + return stack; + }, []); +} +var chromeRe = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; +var chromeEvalRe = /\((\S*)(?::(\d+))(?::(\d+))\)/; +function parseChrome(line) { + const parts = chromeRe.exec(line); + if (!parts) { + return null; + } + const isNative = parts[2] && parts[2].indexOf("native") === 0; + const isEval = parts[2] && parts[2].indexOf("eval") === 0; + const submatch = chromeEvalRe.exec(parts[2]); + if (isEval && submatch != null) { + parts[2] = submatch[1]; + parts[3] = submatch[2]; + parts[4] = submatch[3]; + } + return { + file: !isNative ? parts[2] : null, + methodName: parts[1] || UNKNOWN_FUNCTION, + arguments: isNative ? [parts[2]] : [], + lineNumber: parts[3] ? +parts[3] : null, + column: parts[4] ? +parts[4] : null + }; +} +var winjsRe = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i; +function parseWinjs(line) { + const parts = winjsRe.exec(line); + if (!parts) { + return null; + } + return { + file: parts[2], + methodName: parts[1] || UNKNOWN_FUNCTION, + arguments: [], + lineNumber: +parts[3], + column: parts[4] ? +parts[4] : null + }; +} +var geckoRe = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i; +var geckoEvalRe = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; +function parseGecko(line) { + const parts = geckoRe.exec(line); + if (!parts) { + return null; + } + const isEval = parts[3] && parts[3].indexOf(" > eval") > -1; + const submatch = geckoEvalRe.exec(parts[3]); + if (isEval && submatch != null) { + parts[3] = submatch[1]; + parts[4] = submatch[2]; + parts[5] = null; + } + return { + file: parts[3], + methodName: parts[1] || UNKNOWN_FUNCTION, + arguments: parts[2] ? parts[2].split(",") : [], + lineNumber: parts[4] ? +parts[4] : null, + column: parts[5] ? +parts[5] : null }; - const saveValue = (table, value, index, column) => { - var _a3; - const col = cols.find((f4) => f4.table == table && f4.name == column); - saveFrontmatterValue((_a3 = tableData.rows[index]) == null ? void 0 : _a3.File, column, value, col.type); - if (table == "") { - const newTable = { - ...tableData, - rows: tableData.rows.map((r3, i4) => i4 == index ? { - ...r3, - [column]: value - } : r3) - }; - saveDB2(newTable); - } else if (contextTable[table]) { - saveContextDB({ - ...contextTable[table], - rows: contextTable[table].rows.map((r3, i4) => i4 == index ? { - ...r3, - [column]: value - } : r3) - }, table); - } +} +var javaScriptCoreRe = /^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i; +function parseJSC(line) { + const parts = javaScriptCoreRe.exec(line); + if (!parts) { + return null; + } + return { + file: parts[3], + methodName: parts[1] || UNKNOWN_FUNCTION, + arguments: [], + lineNumber: +parts[4], + column: parts[5] ? +parts[5] : null }; - const selectItem = (modifier, index) => { - if (platformIsMobile()) { - const file = getAbstractFileAtPath(app, tableData.rows[parseInt(index)].File); - if (file) - openAFile(file, app, false); - return; - } - if (modifier == 3) { - const file = getAbstractFileAtPath(app, tableData.rows[parseInt(index)].File); - if (file) - openAFile(file, app, false); - return; - } - if (modifier == 2) { - selectedRows.some((f4) => f4 == index) ? selectRows(null, selectedRows.filter((f4) => f4 != index)) : selectRows(index, uniq([...selectedRows, index])); - } else if (modifier == 1) { - selectRows(index, uniq([...selectedRows, ...selectRange(lastSelectedIndex, index, filteredData.map((f4) => f4._index))])); - } else { - selectRows(index, [index]); - } - setLastSelectedIndex(index); +} +var nodeRe = /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i; +function parseNode(line) { + const parts = nodeRe.exec(line); + if (!parts) { + return null; + } + return { + file: parts[2], + methodName: parts[1] || UNKNOWN_FUNCTION, + arguments: [], + lineNumber: +parts[3], + column: parts[4] ? +parts[4] : null }; - const onKeyDown = (e4) => { - if (e4.key == "Escape") { - selectRows(null, []); - setLastSelectedIndex(null); +} +var Recoil_stackTraceParser = stackTraceParser; +var { + useRef: useRef$1 +} = bn; +function useComponentName() { + const nameRef = useRef$1(); + if (true) { + if (Recoil_gkx_1("recoil_infer_component_names")) { + var _nameRef$current; + if (nameRef.current === void 0) { + const frames = Recoil_stackTraceParser(new Error().stack); + for (const { + methodName + } of frames) { + if (!methodName.match(/\buse[^\b]+$/)) { + return nameRef.current = methodName; + } + } + nameRef.current = null; + } + return (_nameRef$current = nameRef.current) !== null && _nameRef$current !== void 0 ? _nameRef$current : ""; } - if (e4.key == "Enter") { - const file = getAbstractFileAtPath(app, tableData.rows[parseInt(lastSelectedIndex)].File); - if (file) - openAFile(file, app, false); - return; + } + return ""; +} +var Recoil_useComponentName = useComponentName; +var { + atomicUpdater: atomicUpdater$1 +} = Recoil_AtomicUpdates$1; +var { + batchUpdates: batchUpdates$2 +} = Recoil_Batching; +var { + DEFAULT_VALUE: DEFAULT_VALUE$3, + getNode: getNode$4, + nodes: nodes$1 +} = Recoil_Node; +var { + useRecoilMutableSource: useRecoilMutableSource$1, + useStoreRef: useStoreRef$1 +} = Recoil_RecoilRoot_react; +var { + isRecoilValue: isRecoilValue$2 +} = Recoil_RecoilValue$1; +var { + AbstractRecoilValue: AbstractRecoilValue$3, + getRecoilValueAsLoadable: getRecoilValueAsLoadable$3, + setRecoilValue: setRecoilValue$2, + setRecoilValueLoadable: setRecoilValueLoadable$1, + setUnvalidatedRecoilValue: setUnvalidatedRecoilValue$2, + subscribeToRecoilValue: subscribeToRecoilValue$1 +} = Recoil_RecoilValueInterface; +var { + updateRetainCount: updateRetainCount$2 +} = Recoil_Retention; +var { + RetentionZone: RetentionZone$3 +} = Recoil_RetentionZone; +var { + Snapshot: Snapshot$1, + cloneSnapshot: cloneSnapshot$1 +} = Recoil_Snapshot$1; +var { + setByAddingToSet: setByAddingToSet$2 +} = Recoil_CopyOnWrite; +var { + isSSR: isSSR$2 +} = Recoil_Environment; +var { + mutableSourceExists: mutableSourceExists$2, + useMutableSource: useMutableSource$1 +} = Recoil_mutableSource; +var { + useCallback: useCallback$1, + useEffect: useEffect$1, + useMemo: useMemo$1, + useRef: useRef$2, + useState: useState$1 +} = bn; +var SUSPENSE_TIMEOUT_MS = 12e4; +function handleLoadable(loadable, recoilValue, storeRef) { + if (loadable.state === "hasValue") { + return loadable.contents; + } else if (loadable.state === "loading") { + const promise = new Promise((resolve) => { + storeRef.current.getState().suspendedComponentResolvers.add(resolve); + }); + throw promise; + } else if (loadable.state === "hasError") { + throw loadable.contents; + } else { + const err = new Error(`Invalid value of loadable atom "${recoilValue.key}"`); + throw err; + } +} +function validateRecoilValue(recoilValue, hookName) { + if (!isRecoilValue$2(recoilValue)) { + throw new Error(`Invalid argument to ${hookName}: expected an atom or selector but got ${String(recoilValue)}`); + } +} +function useRecoilInterface_DEPRECATED() { + const storeRef = useStoreRef$1(); + const [_4, forceUpdate] = useState$1([]); + const recoilValuesUsed = useRef$2(/* @__PURE__ */ new Set()); + recoilValuesUsed.current = /* @__PURE__ */ new Set(); + const previousSubscriptions = useRef$2(/* @__PURE__ */ new Set()); + const subscriptions = useRef$2(/* @__PURE__ */ new Map()); + const unsubscribeFrom = useCallback$1((key2) => { + const sub = subscriptions.current.get(key2); + if (sub) { + sub.release(); + subscriptions.current.delete(key2); } - if (e4.key == "ArrowDown") { - const newIndex = selectNextIndex(lastSelectedIndex, filteredData.map((f4) => f4._index)); - selectRows(newIndex, [newIndex]); - setLastSelectedIndex(newIndex); + }, [subscriptions]); + const componentName = Recoil_useComponentName(); + useEffect$1(() => { + const store = storeRef.current; + function updateState(_state, key2) { + if (!subscriptions.current.has(key2)) { + return; + } + forceUpdate([]); } - if (e4.key == "ArrowUp") { - const newIndex = selectPrevIndex(lastSelectedIndex, filteredData.map((f4) => f4._index)); - selectRows(newIndex, [newIndex]); - setLastSelectedIndex(newIndex); + Recoil_differenceSets(recoilValuesUsed.current, previousSubscriptions.current).forEach((key2) => { + if (subscriptions.current.has(key2)) { + Recoil_expectationViolation(`Double subscription to RecoilValue "${key2}"`); + return; + } + const sub = subscribeToRecoilValue$1(store, new AbstractRecoilValue$3(key2), (state2) => { + updateState(state2, key2); + }, componentName); + subscriptions.current.set(key2, sub); + const state = store.getState(); + if (state.nextTree) { + store.getState().queuedComponentCallbacks_DEPRECATED.push(() => { + updateState(store.getState(), key2); + }); + } else { + updateState(store.getState(), key2); + } + }); + Recoil_differenceSets(previousSubscriptions.current, recoilValuesUsed.current).forEach((key2) => { + unsubscribeFrom(key2); + }); + previousSubscriptions.current = recoilValuesUsed.current; + }); + useEffect$1(() => { + const subs = subscriptions.current; + return () => subs.forEach((_5, key2) => unsubscribeFrom(key2)); + }, [unsubscribeFrom]); + return useMemo$1(() => { + function useSetRecoilState2(recoilState) { + if (true) { + validateRecoilValue(recoilState, "useSetRecoilState"); + } + return (newValueOrUpdater) => { + setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); + }; } - }; - return /* @__PURE__ */ bn.createElement(DndContext, { - sensors, - collisionDetection: closestCenter, - measuring: { - droppable: { - strategy: MeasuringStrategy.Always + function useResetRecoilState2(recoilState) { + if (true) { + validateRecoilValue(recoilState, "useResetRecoilState"); } - }, - onDragStart: ({ active }) => { - setActiveId(active.id); - }, - onDragOver: ({ active, over }) => { - const overId2 = over == null ? void 0 : over.id; - if (overId2) - setOverId(overId2); - }, - onDragEnd: ({ active, over }) => { - if (active.id in items && (over == null ? void 0 : over.id)) { - return; + return () => setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); + } + function useRecoilValueLoadable2(recoilValue) { + var _storeState$nextTree; + if (true) { + validateRecoilValue(recoilValue, "useRecoilValueLoadable"); } - const activeContainer = findContainer(active.id); - if (!activeContainer) { - resetState(); - return; + if (!recoilValuesUsed.current.has(recoilValue.key)) { + recoilValuesUsed.current = setByAddingToSet$2(recoilValuesUsed.current, recoilValue.key); } - const overId2 = over == null ? void 0 : over.id; - if (!overId2) { - resetState(); - return; + const storeState = storeRef.current.getState(); + return getRecoilValueAsLoadable$3(storeRef.current, recoilValue, Recoil_gkx_1("recoil_early_rendering_2021") ? (_storeState$nextTree = storeState.nextTree) !== null && _storeState$nextTree !== void 0 ? _storeState$nextTree : storeState.currentTree : storeState.currentTree); + } + function useRecoilValue2(recoilValue) { + if (true) { + validateRecoilValue(recoilValue, "useRecoilValue"); } - if (overId2 === PLACEHOLDER_ID) { - return; + const loadable = useRecoilValueLoadable2(recoilValue); + return handleLoadable(loadable, recoilValue, storeRef); + } + function useRecoilState2(recoilState) { + if (true) { + validateRecoilValue(recoilState, "useRecoilState"); } - const overContainer = findContainer(overId2); - if (overContainer) { - const activeIndex = items[Object.keys(items)[parseInt(activeContainer) * -1]].indexOf(active.id); - const overIndex = items[Object.keys(items)[parseInt(overContainer) * -1]].indexOf(overId2); - if (activeContainer != overContainer) { - saveValue( - groupBy2.table, - Object.keys(items)[parseInt(overContainer) * -1], - groupBy2.table == "" ? parseInt(activeId) : parseInt(filteredData.find((f4) => f4._index == activeId)["_index" + groupBy2.table]), - groupBy2.name - ); - } + return [useRecoilValue2(recoilState), useSetRecoilState2(recoilState)]; + } + function useRecoilStateLoadable2(recoilState) { + if (true) { + validateRecoilValue(recoilState, "useRecoilStateLoadable"); } - resetState(); - }, - cancelDrop, - onDragCancel, - modifiers - }, /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames3.default)(viewType == "card" ? "mk-cards-container" : "mk-list-container", viewType == "card" && containers.length == 1 && "mk-cards-grid"), - onKeyDown - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-list-view" - }, /* @__PURE__ */ bn.createElement(SortableContext, { - items: [...containers, PLACEHOLDER_ID], - strategy: vertical ? verticalListSortingStrategy : horizontalListSortingStrategy - }, containers.map((containerId) => /* @__PURE__ */ bn.createElement(DroppableContainer, { - key: containerId, - id: containerId, - plugin, - label: minimal ? void 0 : `${Object.keys(items)[parseInt(containerId) * -1]}`, - field: groupBy2, - columns, - items: items[Object.keys(items)[parseInt(containerId) * -1]], - scrollable, - style: containerStyle, - unstyled: minimal - }, /* @__PURE__ */ bn.createElement(SortableContext, { - items: items[Object.keys(items)[parseInt(containerId) * -1]], - strategy - }, items[Object.keys(items)[parseInt(containerId) * -1]].map((value, index) => { - return /* @__PURE__ */ bn.createElement(SortableItem, { - disabled: isSortingContainer, - key: value, - id: value, - plugin, - value: filteredData.find((f4) => f4._index == value), - cols: displayCols, - index, - handle, - style: getItemStyles, - wrapperStyle, - renderItem, - onSelect: selectItem, - selected: selectedRows == null ? void 0 : selectedRows.some((f4) => f4 == value), - containerId, - getIndex - }); - }))))))), j3( - /* @__PURE__ */ bn.createElement(DragOverlay, { - adjustScale: adjustScale2 - }, activeId ? containers.includes(activeId) ? renderContainerDragOverlay(activeId) : renderSortableItemDragOverlay(activeId) : null), - document.body - )); - function renderSortableItemDragOverlay(id2) { - return /* @__PURE__ */ bn.createElement("div", { - className: viewType == "card" ? "mk-cards-container" : "mk-list-container" - }, /* @__PURE__ */ bn.createElement(KanbanCard, { - plugin, - value: filteredData.find((f4) => f4._index == id2), - handle, - id: id2, - cols: displayCols, - style: getItemStyles({ - containerId: findContainer(id2), - overIndex: -1, - index: getIndex(id2), - value: id2, - isSorting: true, - isDragging: true, - isDragOverlay: true - }), - color: getColor(id2), - wrapperStyle: wrapperStyle({ index: 0 }), - renderItem, - dragOverlay: true - })); - } - function renderContainerDragOverlay(containerId) { - return /* @__PURE__ */ bn.createElement(KanbanColumn, { - id: containerId, - plugin, - label: `Column ${containerId}`, - field: groupBy2, - columns, - style: { - height: "100%" - }, - shadow: true, - unstyled: false - }, items[Object.keys(items)[parseInt(containerId) * -1]].map((item, index) => /* @__PURE__ */ bn.createElement(KanbanCard, { - key: item, - id: item, - plugin, - value: filteredData.find((f4) => f4._index == item), - cols: displayCols, - handle, - style: getItemStyles({ - containerId, - overIndex: -1, - index: getIndex(item), - value: item, - isDragging: false, - isSorting: false, - isDragOverlay: false - }), - color: getColor(item), - selected: selectedRows.some((f4) => f4 == item), - onSelect: selectItem, - wrapperStyle: wrapperStyle({ index }), - renderItem - }))); - } - function getNextContainerId() { - const containeIds = Object.keys(items); - const lastContaineId = containeIds[containeIds.length - 1]; - return String.fromCharCode(lastContaineId.charCodeAt(0) + 1); - } -}; -function getColor(id2) { - switch (id2[0]) { - case "A": - return "#7193f1"; - case "B": - return "#ffda6c"; - case "C": - return "#00bcd4"; - case "D": - return "#ef769f"; - } - return void 0; -} -function SortableItem({ - disabled, - id: id2, - plugin, - index, - handle, - renderItem, - style, - containerId, - onSelect, - selected, - getIndex, - cols, - value, - wrapperStyle -}) { - const { - setNodeRef, - listeners, - isDragging, - isSorting, - over, - overIndex, - transform, - transition - } = useSortable({ - id: id2 - }); - const mounted = useMountStatus(); - const mountedWhileDragging = isDragging && !mounted; - return /* @__PURE__ */ bn.createElement(KanbanCard, { - ref: disabled ? void 0 : setNodeRef, - value, - plugin, - id: id2, - cols, - dragging: isDragging, - sorting: isSorting, - handle, - index, - wrapperStyle: wrapperStyle({ index }), - style: style({ - index, - value: id2, - isDragging, - isSorting, - overIndex: over ? getIndex(over.id) : overIndex, - containerId - }), - onSelect, - selected, - color: getColor(id2), - transition, - transform, - fadeIn: mountedWhileDragging, - listeners, - renderItem - }); -} -function useMountStatus() { - const [isMounted, setIsMounted] = p2(false); - h2(() => { - const timeout = setTimeout(() => setIsMounted(true), 500); - return () => clearTimeout(timeout); - }, []); - return isMounted; -} - -// src/components/ContextView/FlowListView/FlowListView.tsx -var import_obsidian18 = require("obsidian"); -var FlowListView = (props2) => { - const { tableData, sortedColumns: cols, filteredData: data, tagContexts, folderPath, saveSchema, searchString, dbSchema, contextTable, setContextTable, predicate, savePredicate, saveDB: saveDB2, saveContextDB, schema, dbPath, saveColumn, delColumn, newColumn, isFolderContext } = q2(MDBContext); - const flowItems = F(() => { - return data.map((f4) => getAbstractFileAtPath(app, f4.File)).filter((f4) => f4 instanceof import_obsidian18.TFile && f4.extension == "md"); - }, [data]); - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-flow-container" - }, flowItems.map((f4) => /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement("span", null, fileNameToString(f4.name)), /* @__PURE__ */ bn.createElement(FlowView, { - plugin: props2.plugin, - path: f4.path, - load: true - })))); -}; - -// src/components/ContextView/ContextListView.tsx -var ContextListView = (props2) => { - const { schema } = q2(MDBContext); - return schema ? schema.type == "flow" ? /* @__PURE__ */ bn.createElement(FlowListView, { - plugin: props2.plugin - }) : schema.type == "table" ? /* @__PURE__ */ bn.createElement(TableView, { - plugin: props2.plugin - }) : /* @__PURE__ */ bn.createElement(CardsView, { - plugin: props2.plugin - }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); -}; - -// src/components/ContextView/InlineContextViewComponent.tsx -var InlineContextViewComponent = (props2) => { - const type = viewTypeByString(props2.path); - const path = type == "tag" ? tagContextFromTag(props2.plugin, props2.path) : folderContextFromFolder(props2.plugin, props2.path); - const folder = type == "tag" ? null : props2.path; - const tag = type == "tag" ? props2.path : null; - return /* @__PURE__ */ bn.createElement(MDBProvider, { - plugin: props2.plugin, - dbPath: path, - folder, - tag, - schema: props2.schema - }, path && /* @__PURE__ */ bn.createElement(ContextListView, { - plugin: props2.plugin - })); + return [useRecoilValueLoadable2(recoilState), useSetRecoilState2(recoilState)]; + } + return { + getRecoilValue: useRecoilValue2, + getRecoilValueLoadable: useRecoilValueLoadable2, + getRecoilState: useRecoilState2, + getRecoilStateLoadable: useRecoilStateLoadable2, + getSetRecoilState: useSetRecoilState2, + getResetRecoilState: useResetRecoilState2 + }; + }, [recoilValuesUsed, storeRef]); +} +var recoilComponentGetRecoilValueCount_FOR_TESTING = { + current: 0 }; - -// src/components/ContextView/InlineContextView.tsx -var INLINE_CONTEXT_VIEW_TYPE = "make-inline-context"; -var InlineContextView = class extends import_obsidian19.ItemView { - constructor(leaf, plugin) { - super(leaf); - this.navigation = true; - this.plugin = plugin; - } - getViewType() { - return INLINE_CONTEXT_VIEW_TYPE; - } - getDisplayText() { - return this.file; - } - async onClose() { - this.destroy(); - } - destroy() { - if (this.root) - this.root.unmount(); +function useRecoilValueLoadable_MUTABLESOURCE(recoilValue) { + if (true) { + validateRecoilValue(recoilValue, "useRecoilValueLoadable"); } - async onOpen() { - this.destroy(); + const storeRef = useStoreRef$1(); + const getLoadable = useCallback$1(() => { + var _storeState$nextTree2; + const store = storeRef.current; + const storeState = store.getState(); + const treeState = Recoil_gkx_1("recoil_early_rendering_2021") ? (_storeState$nextTree2 = storeState.nextTree) !== null && _storeState$nextTree2 !== void 0 ? _storeState$nextTree2 : storeState.currentTree : storeState.currentTree; + return getRecoilValueAsLoadable$3(store, recoilValue, treeState); + }, [storeRef, recoilValue]); + const getLoadableWithTesting = useCallback$1(() => { + if (true) { + recoilComponentGetRecoilValueCount_FOR_TESTING.current++; + } + return getLoadable(); + }, [getLoadable]); + const componentName = Recoil_useComponentName(); + const subscribe = useCallback$1((_storeState, callback) => { + const store = storeRef.current; + const subscription = subscribeToRecoilValue$1(store, recoilValue, () => { + if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { + return callback(); + } + const newLoadable = getLoadable(); + if (!prevLoadableRef.current.is(newLoadable)) { + callback(); + } + prevLoadableRef.current = newLoadable; + }, componentName); + return subscription.release; + }, [storeRef, recoilValue, componentName, getLoadable]); + const source = useRecoilMutableSource$1(); + const loadable = useMutableSource$1(source, getLoadableWithTesting, subscribe); + const prevLoadableRef = useRef$2(loadable); + useEffect$1(() => { + prevLoadableRef.current = loadable; + }); + return loadable; +} +function useRecoilValueLoadable_LEGACY(recoilValue) { + if (true) { + validateRecoilValue(recoilValue, "useRecoilValueLoadable"); } - async setState(state, result) { - var _a2, _b2; - this.file = state.file; - this.ref = state.ref ? state.ref.substring(1, state.ref.length) : null; - this.constructInlineContext(this.file); - await super.setState(state, result); - const type = viewTypeByString(this.file); - const title = type == "tag" ? this.file : (_b2 = (_a2 = getAbstractFileAtPath(app, this.file)) == null ? void 0 : _a2.name) != null ? _b2 : this.file; - this.leaf.tabHeaderInnerTitleEl.innerText = title; - this.leaf.view.titleEl = title; - const headerEl = this.leaf.view.headerEl; - if (headerEl) { - headerEl.querySelector(".view-header-title").innerText = title; + const storeRef = useStoreRef$1(); + const [_4, forceUpdate] = useState$1([]); + const componentName = Recoil_useComponentName(); + useEffect$1(() => { + const store = storeRef.current; + const storeState = store.getState(); + const subscription = subscribeToRecoilValue$1(store, recoilValue, (_state) => { + var _prevLoadableRef$curr; + if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { + return forceUpdate([]); + } + const newLoadable = getRecoilValueAsLoadable$3(store, recoilValue, store.getState().currentTree); + if (!((_prevLoadableRef$curr = prevLoadableRef.current) === null || _prevLoadableRef$curr === void 0 ? void 0 : _prevLoadableRef$curr.is(newLoadable))) { + forceUpdate(newLoadable); + } + prevLoadableRef.current = newLoadable; + }, componentName); + if (storeState.nextTree) { + store.getState().queuedComponentCallbacks_DEPRECATED.push(() => { + prevLoadableRef.current = null; + forceUpdate([]); + }); + } else { + var _prevLoadableRef$curr2; + if (!Recoil_gkx_1("recoil_suppress_rerender_in_callback")) { + return forceUpdate([]); + } + const newLoadable = getRecoilValueAsLoadable$3(store, recoilValue, store.getState().currentTree); + if (!((_prevLoadableRef$curr2 = prevLoadableRef.current) === null || _prevLoadableRef$curr2 === void 0 ? void 0 : _prevLoadableRef$curr2.is(newLoadable))) { + forceUpdate(newLoadable); + } + prevLoadableRef.current = newLoadable; } - return; + return subscription.release; + }, [componentName, recoilValue, storeRef]); + const loadable = getRecoilValueAsLoadable$3(storeRef.current, recoilValue); + const prevLoadableRef = useRef$2(loadable); + useEffect$1(() => { + prevLoadableRef.current = loadable; + }); + return loadable; +} +function useRecoilValueLoadable(recoilValue) { + if (Recoil_gkx_1("recoil_memory_managament_2020")) { + useRetain(recoilValue); } - getState() { - let state = super.getState(); - state.file = this.file; - return state; + if (mutableSourceExists$2()) { + return useRecoilValueLoadable_MUTABLESOURCE(recoilValue); + } else { + return useRecoilValueLoadable_LEGACY(recoilValue); } - constructInlineContext(file) { - this.destroy(); - this.root = createRoot(this.contentEl); - this.root.render( - /* @__PURE__ */ bn.createElement("div", null, /* @__PURE__ */ bn.createElement(InlineContextViewComponent, { - plugin: this.plugin, - path: this.file, - schema: this.ref - })) - ); +} +function useRecoilValue(recoilValue) { + if (true) { + validateRecoilValue(recoilValue, "useRecoilValue"); } -}; - -// src/utils/flow/flowEditor.ts -var parseOutReferences = (ostr) => { - const str = ostr.split("|")[0]; - const refIndex = str.lastIndexOf("#"); - return refIndex != -1 ? [str.substring(0, refIndex), str.substring(refIndex + 1)] : [str, void 0]; -}; -var getFileFromString = (url, source) => { - return app.metadataCache.getFirstLinkpathDest(url, source != null ? source : ""); -}; -var getLineRangeFromRef = (file, ref, plugin) => { - var _a2; - if (!ref) { - return [void 0, void 0]; + const storeRef = useStoreRef$1(); + const loadable = useRecoilValueLoadable(recoilValue); + return handleLoadable(loadable, recoilValue, storeRef); +} +function useSetRecoilState(recoilState) { + if (true) { + validateRecoilValue(recoilState, "useSetRecoilState"); } - const cache = app.metadataCache.getFileCache(file); - const headings = cache.headings; - const blocks = cache.blocks; - const sections = cache.sections; - if (blocks && ref.charAt(0) == "^" && blocks[ref.substring(1)]) { - return [ - blocks[ref.substring(1)].position.start.line + 1, - blocks[ref.substring(1)].position.end.line + 1 - ]; + const storeRef = useStoreRef$1(); + return useCallback$1((newValueOrUpdater) => { + setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); + }, [storeRef, recoilState]); +} +function useResetRecoilState(recoilState) { + if (true) { + validateRecoilValue(recoilState, "useResetRecoilState"); } - const heading = headings == null ? void 0 : headings.find((f4) => f4.heading.replace("#", " ") == ref); - if (heading) { - const index = headings.findIndex((f4) => f4.heading == heading.heading); - const level = (_a2 = headings[index]) == null ? void 0 : _a2.level; - const nextIndex2 = headings.findIndex( - (f4, i4) => i4 > index && f4.level <= level - ); - const start = plugin.settings.editorFlowStyle == "classic" ? heading.position.start.line + 1 : heading.position.start.line + 2; - if (index < headings.length - 1 && nextIndex2 != -1) { - return [start, headings[nextIndex2].position.end.line]; - } - return [start, sections[sections.length - 1].position.end.line + 1]; + const storeRef = useStoreRef$1(); + return useCallback$1(() => { + setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); + }, [storeRef, recoilState]); +} +function useRecoilState(recoilState) { + if (true) { + validateRecoilValue(recoilState, "useRecoilState"); } - return [void 0, void 0]; -}; -var loadFlowEditorByDOM2 = (make, el, view, id2) => { - setTimeout(async () => { - let counter = 0; - while (!el.parentElement && counter++ <= 50) - await sleep(50); - if (!el.parentElement) - return; - let dom = el; - while (!dom.hasClass("mk-floweditor") && !dom.hasClass("workspace") && dom.parentElement) { - dom = dom.parentElement; - } - if (!dom.hasClass("mk-floweditor") && !dom.hasClass("workspace") && !(dom.nodeName == "HTML")) { - return; + return [useRecoilValue(recoilState), useSetRecoilState(recoilState)]; +} +function useRecoilStateLoadable(recoilState) { + if (true) { + validateRecoilValue(recoilState, "useRecoilStateLoadable"); + } + return [useRecoilValueLoadable(recoilState), useSetRecoilState(recoilState)]; +} +function useTransactionSubscription(callback) { + const storeRef = useStoreRef$1(); + useEffect$1(() => { + const sub = storeRef.current.subscribeToTransactions(callback); + return sub.release; + }, [callback, storeRef]); +} +function externallyVisibleAtomValuesInState(state) { + const atomValues = state.atomValues.toMap(); + const persistedAtomContentsValues = Recoil_mapMap(Recoil_filterMap(atomValues, (v3, k5) => { + const node = getNode$4(k5); + const persistence = node.persistence_UNSTABLE; + return persistence != null && persistence.type !== "none" && v3.state === "hasValue"; + }), (v3) => v3.contents); + return Recoil_mergeMaps(state.nonvalidatedAtoms.toMap(), persistedAtomContentsValues); +} +function useTransactionObservation_DEPRECATED(callback) { + useTransactionSubscription(useCallback$1((store) => { + let previousTree = store.getState().previousTree; + const currentTree = store.getState().currentTree; + if (!previousTree) { + Recoil_recoverableViolation("Transaction subscribers notified without a previous tree being present -- this is a bug in Recoil"); + previousTree = store.getState().currentTree; } - setTimeout(async () => { - var _a2; - let leafFound = false; - if (app.workspace.activeEditor) { - if (app.workspace.activeEditor.editMode.cm.dom == view.dom) { - leafFound = true; - loadFlowEditorsForLeafForID(app.workspace.activeEditor.editMode.cm, (_a2 = app.workspace.activeEditor.file) == null ? void 0 : _a2.path, make, id2); + const atomValues = externallyVisibleAtomValuesInState(currentTree); + const previousAtomValues = externallyVisibleAtomValuesInState(previousTree); + const atomInfo = Recoil_mapMap(nodes$1, (node) => { + var _node$persistence_UNS, _node$persistence_UNS2, _node$persistence_UNS3, _node$persistence_UNS4; + return { + persistence_UNSTABLE: { + type: (_node$persistence_UNS = (_node$persistence_UNS2 = node.persistence_UNSTABLE) === null || _node$persistence_UNS2 === void 0 ? void 0 : _node$persistence_UNS2.type) !== null && _node$persistence_UNS !== void 0 ? _node$persistence_UNS : "none", + backButton: (_node$persistence_UNS3 = (_node$persistence_UNS4 = node.persistence_UNSTABLE) === null || _node$persistence_UNS4 === void 0 ? void 0 : _node$persistence_UNS4.backButton) !== null && _node$persistence_UNS3 !== void 0 ? _node$persistence_UNS3 : false } + }; + }); + const modifiedAtoms = Recoil_filterSet(currentTree.dirtyAtoms, (k5) => atomValues.has(k5) || previousAtomValues.has(k5)); + callback({ + atomValues, + previousAtomValues, + atomInfo, + modifiedAtoms, + transactionMetadata: { + ...currentTree.transactionMetadata } - if (!leafFound) { - app.workspace.iterateLeaves((leaf) => { - var _a3, _b2; - const cm = (_a3 = leaf.view.editor) == null ? void 0 : _a3.cm; - if (cm && view.dom == cm.dom) { - leafFound = true; - loadFlowEditorsForLeafForID(cm, (_b2 = leaf.view.file) == null ? void 0 : _b2.path, make, id2); - } - }, app.workspace["rootSplit"]); - } }); + }, [callback])); +} +function useRecoilTransactionObserver(callback) { + useTransactionSubscription(useCallback$1((store) => { + const snapshot = cloneSnapshot$1(store, "current"); + const previousSnapshot = cloneSnapshot$1(store, "previous"); + callback({ + snapshot, + previousSnapshot + }); + }, [callback])); +} +function usePrevious2(value) { + const ref = useRef$2(); + useEffect$1(() => { + ref.current = value; }); -}; -var loadFlowEditorsForLeafForID = (cm, source, make, id2) => { - const stateField = cm.state.field(flowEditorInfo, false); - if (!stateField) - return; - const flowInfo = stateField.find((f4) => f4.id == id2); - if (flowInfo && flowInfo.expandedState == 2) { - loadFlowEditor(cm, flowInfo, source, make); - } -}; -var loadFlowEditor = (cm, flowEditorInfo2, source, make) => { - const dom = cm.dom.querySelector( - "#mk-flow-" + flowEditorInfo2.id - ); - const [link, ref] = parseOutReferences(flowEditorInfo2.link); - if (dom) { - if (link.charAt(0) == "#") { - if (!dom.hasAttribute("ready")) { - dom.setAttribute("ready", ""); - createFlowEditorInElement( - flowEditorInfo2.id, - dom, - ref ? "block" : "flow", - link - ); - } - return; - } - if (link.charAt(link.length - 1) == "/") { - const folder = getAbstractFileAtPath(app, link.substring(0, link.length - 1)); - if (!dom.hasAttribute("ready") && folder) { - dom.setAttribute("ready", ""); - createFlowEditorInElement( - flowEditorInfo2.id, - dom, - "context", - folder.path, - ref - ); - return; - } + return ref.current; +} +function useRecoilSnapshot() { + const storeRef = useStoreRef$1(); + const [snapshot, setSnapshot] = useState$1(() => cloneSnapshot$1(storeRef.current)); + const previousSnapshot = usePrevious2(snapshot); + const timeoutID = useRef$2(); + useEffect$1(() => { + if (timeoutID.current && !isSSR$2) { + window.clearTimeout(timeoutID.current); } - const file = getFileFromString(link, source); - const aFile = getAbstractFileAtPath(app, link); - if (file) { - const selectiveRange = getLineRangeFromRef(file, ref, make); - if (!dom.hasAttribute("ready")) { - dom.setAttribute("ready", ""); - createFlowEditorInElement( - flowEditorInfo2.id, - dom, - ref ? "block" : "flow", - file.path, - ref, - selectiveRange[0], - selectiveRange[1] - ); - } - } else { - if (aFile instanceof import_obsidian20.TFolder) { - if (!dom.hasAttribute("ready")) { - dom.setAttribute("ready", ""); - createFlowEditorInElement( - flowEditorInfo2.id, - dom, - ref ? "block" : "flow", - link - ); - } - return; - } - dom.empty(); - const createDiv = dom.createDiv("file-embed"); - createDiv.toggleClass("mod-empty", true); - const createFile = async (e4) => { - e4.stopPropagation(); - e4.stopImmediatePropagation(); - await app.fileManager.createNewMarkdownFile(app.vault.getRoot(), link); - loadFlowEditor(cm, flowEditorInfo2, source, make); - }; - createDiv.setText(`"${link}" ` + i18n_default.labels.noFile); - createDiv.addEventListener("click", createFile); + return snapshot.retain(); + }, [snapshot]); + useTransactionSubscription(useCallback$1((store) => setSnapshot(cloneSnapshot$1(store)), [])); + if (previousSnapshot !== snapshot && !isSSR$2) { + if (timeoutID.current) { + previousSnapshot === null || previousSnapshot === void 0 ? void 0 : previousSnapshot.release_INTERNAL(); + window.clearTimeout(timeoutID.current); } + snapshot.retain(); + timeoutID.current = window.setTimeout(() => { + snapshot.release_INTERNAL(); + timeoutID.current = null; + }, SUSPENSE_TIMEOUT_MS); } -}; -var focusPortal = async (plugin, evt) => { - const { id: id2, parent, top } = evt.detail; - if (parent) { - app.workspace.iterateLeaves((leaf) => { - var _a2; - const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; - if (cm) { - const stateField = cm.state.field(flowEditorInfo, false); - if (stateField) { - const foundInfo = stateField.find((f4) => f4.id == id2); - if (foundInfo) { - cm.focus(); - if (top) { - cm.dispatch({ - selection: import_state6.EditorSelection.single(foundInfo.from - 4), - annotations: arrowKeyAnnotation.of(1) - }); - } else { - if (foundInfo.to + 2 == cm.state.doc.length) { - cm.dispatch({ - changes: [ - { - from: foundInfo.to + 2, - to: foundInfo.to + 2, - insert: cm.state.lineBreak - } - ], - selection: import_state6.EditorSelection.single(foundInfo.to + 3), - annotations: arrowKeyAnnotation.of(2) - }); - } else { - cm.dispatch({ - selection: import_state6.EditorSelection.single(foundInfo.to + 3), - annotations: arrowKeyAnnotation.of(2) - }); - } - } - } - } - } - }, app.workspace["rootSplit"]); - } else { - app.workspace.iterateLeaves((leaf) => { - var _a2; - const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; - if (cm) { - const stateField = cm.state.field(flowIDStateField, false); - if (stateField && stateField == id2) { - cm.focus(); - const lineRange = cm.state.field(selectiveLinesFacet, false); - const posRange = lineRange && lineRange[0] != void 0 ? lineRangeToPosRange(cm.state, lineRange) : { from: 0, to: cm.state.doc.length }; - if (top) { - cm.dispatch({ - selection: import_state6.EditorSelection.single(posRange.from) - }); - } else { - cm.dispatch({ - selection: import_state6.EditorSelection.single(posRange.to) - }); + return snapshot; +} +function useGotoRecoilSnapshot() { + const storeRef = useStoreRef$1(); + return useCallback$1((snapshot) => { + var _storeState$nextTree3; + const storeState = storeRef.current.getState(); + const prev = (_storeState$nextTree3 = storeState.nextTree) !== null && _storeState$nextTree3 !== void 0 ? _storeState$nextTree3 : storeState.currentTree; + const next = snapshot.getStore_INTERNAL().getState().currentTree; + batchUpdates$2(() => { + const keysToUpdate = /* @__PURE__ */ new Set(); + for (const keys of [prev.atomValues.keys(), next.atomValues.keys()]) { + for (const key2 of keys) { + var _prev$atomValues$get, _next$atomValues$get; + if (((_prev$atomValues$get = prev.atomValues.get(key2)) === null || _prev$atomValues$get === void 0 ? void 0 : _prev$atomValues$get.contents) !== ((_next$atomValues$get = next.atomValues.get(key2)) === null || _next$atomValues$get === void 0 ? void 0 : _next$atomValues$get.contents) && getNode$4(key2).shouldRestoreFromSnapshots) { + keysToUpdate.add(key2); } } } - }, app.workspace["rootSplit"]); - } -}; -var openFileFromPortal = (plugin, evt) => { - const { file: fullLink, source } = evt.detail; - const [link, ref] = parseOutReferences(fullLink); - const file = getFileFromString(link, source); - openFile2({ ...file, isFolder: false }, plugin.app, false); -}; -var spawnLeafFromFile = async (plugin, file, el, type, ref) => { - if (type == "context") { - const newLeaf2 = spawnPortal2(plugin, el); - newLeaf2.setViewState({ type: INLINE_CONTEXT_VIEW_TYPE, state: { file, ref } }); - return newLeaf2; - } - let portalFile = plugin.app.vault.getAbstractFileByPath(file); - const newLeaf = spawnPortal2(plugin, el, portalFile.name); - await newLeaf.openFile(portalFile); - if (newLeaf.view.setMode) - newLeaf.view.setMode(newLeaf.view.editMode); - return newLeaf; + keysToUpdate.forEach((key2) => { + setRecoilValueLoadable$1(storeRef.current, new AbstractRecoilValue$3(key2), next.atomValues.has(key2) ? Recoil_nullthrows(next.atomValues.get(key2)) : DEFAULT_VALUE$3); + }); + storeRef.current.replaceState((state) => { + return { + ...state, + stateID: snapshot.getID_INTERNAL() + }; + }); + }); + }, [storeRef]); +} +function useSetUnvalidatedAtomValues() { + const storeRef = useStoreRef$1(); + return (values, transactionMetadata = {}) => { + batchUpdates$2(() => { + storeRef.current.addTransactionMetadata(transactionMetadata); + values.forEach((value, key2) => setUnvalidatedRecoilValue$2(storeRef.current, new AbstractRecoilValue$3(key2), value)); + }); + }; +} +var Sentinel = class { }; -var spawnNewPortal = async (plugin, evt) => { - var _a2, _b2, _c2; - const { file, el, ref, from, to, type } = evt.detail; - const newLeaf = await spawnLeafFromFile(plugin, file, el, type, ref); - if (!((_a2 = newLeaf == null ? void 0 : newLeaf.view) == null ? void 0 : _a2.editor)) { +var SENTINEL = new Sentinel(); +function useRecoilCallback(fn2, deps) { + const storeRef = useStoreRef$1(); + const gotoSnapshot = useGotoRecoilSnapshot(); + return useCallback$1( + (...args) => { + function set(recoilState, newValueOrUpdater) { + setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater); + } + function reset(recoilState) { + setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$3); + } + const snapshot = cloneSnapshot$1(storeRef.current); + const atomicUpdate = atomicUpdater$1(storeRef.current); + let ret = SENTINEL; + batchUpdates$2(() => { + const errMsg = "useRecoilCallback expects a function that returns a function: it accepts a function of the type (RecoilInterface) => T = R and returns a callback function T => R, where RecoilInterface is an object {snapshot, set, ...} and T and R are the argument and return types of the callback you want to create. Please see the docs at recoiljs.org for details."; + if (typeof fn2 !== "function") { + throw new Error(errMsg); + } + const cb = fn2({ + set, + reset, + snapshot, + gotoSnapshot, + transact_UNSTABLE: atomicUpdate + }); + if (typeof cb !== "function") { + throw new Error(errMsg); + } + ret = cb(...args); + }); + !!(ret instanceof Sentinel) ? true ? Recoil_invariant(false, "batchUpdates should return immediately") : Recoil_invariant(false) : void 0; + return ret; + }, + deps != null ? [...deps, storeRef] : void 0 + ); +} +function useRetain(toRetain) { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { return; } - const view = (_b2 = newLeaf.view.editor) == null ? void 0 : _b2.cm; - view.dispatch({ - annotations: [ - portalTypeAnnotation.of(evt.detail.type), - flowIDAnnotation.of(evt.detail.id) - ] - }); - view.dom.addEventListener("keydown", (e4) => { - if (e4.key == "ArrowUp") { - if (e4.metaKey == true) { - view.dispatch({ - annotations: arrowKeyAnnotation.of(3) - }); - } else { - view.dispatch({ - annotations: arrowKeyAnnotation.of(1) - }); + return useRetain_ACTUAL(toRetain); +} +function useRetain_ACTUAL(toRetain) { + const array = Array.isArray(toRetain) ? toRetain : [toRetain]; + const retainables = array.map((a5) => a5 instanceof RetentionZone$3 ? a5 : a5.key); + const storeRef = useStoreRef$1(); + useEffect$1(() => { + if (!Recoil_gkx_1("recoil_memory_managament_2020")) { + return; + } + const store = storeRef.current; + if (timeoutID.current && !isSSR$2) { + window.clearTimeout(timeoutID.current); + timeoutID.current = null; + } else { + for (const r3 of retainables) { + updateRetainCount$2(store, r3, 1); } } - if (e4.key == "ArrowDown") { - if (e4.metaKey == true) { - view.dispatch({ - annotations: arrowKeyAnnotation.of(4) - }); - } else { - view.dispatch({ - annotations: arrowKeyAnnotation.of(2) - }); + return () => { + for (const r3 of retainables) { + updateRetainCount$2(store, r3, -1); } + }; + }, [storeRef, ...retainables]); + const timeoutID = useRef$2(); + const previousRetainables = usePrevious2(retainables); + if (!isSSR$2 && (previousRetainables === void 0 || !Recoil_shallowArrayEqual(previousRetainables, retainables))) { + const store = storeRef.current; + for (const r3 of retainables) { + updateRetainCount$2(store, r3, 1); } - }); - if (from && to) { - (_c2 = newLeaf.view.editor) == null ? void 0 : _c2.cm.dispatch({ - annotations: [editableRange.of([from, to])] - }); + if (previousRetainables) { + for (const r3 of previousRetainables) { + updateRetainCount$2(store, r3, -1); + } + } + if (timeoutID.current) { + window.clearTimeout(timeoutID.current); + } + timeoutID.current = window.setTimeout(() => { + timeoutID.current = null; + for (const r3 of retainables) { + updateRetainCount$2(store, r3, -1); + } + }, SUSPENSE_TIMEOUT_MS); } -}; -var spawnPortal2 = (plugin, initiatingEl, fileName, onShowCallback) => { - const parent = plugin.app.workspace.activeLeaf; - if (!initiatingEl) - initiatingEl = parent.containerEl; - const hoverPopover = new FlowEditor( - parent, - initiatingEl, - plugin, - void 0, - onShowCallback +} +function useRecoilTransaction(fn2, deps) { + const storeRef = useStoreRef$1(); + return useMemo$1( + () => (...args) => { + const atomicUpdate = atomicUpdater$1(storeRef.current); + atomicUpdate((transactionInterface) => { + fn2(transactionInterface)(...args); + }); + }, + deps != null ? [...deps, storeRef] : void 0 ); - if (fileName) - hoverPopover.titleEl.textContent = fileName.substring( - 0, - fileName.lastIndexOf(".") - ); - return hoverPopover.attachLeaf(); +} +var Recoil_Hooks = { + recoilComponentGetRecoilValueCount_FOR_TESTING, + useGotoRecoilSnapshot, + useRecoilCallback, + useRecoilInterface: useRecoilInterface_DEPRECATED, + useRecoilSnapshot, + useRecoilState, + useRecoilStateLoadable, + useRecoilTransaction, + useRecoilTransactionObserver, + useRecoilValue, + useRecoilValueLoadable, + useRetain, + useResetRecoilState, + useSetRecoilState, + useSetUnvalidatedAtomValues, + useTransactionObservation_DEPRECATED, + useTransactionSubscription_DEPRECATED: useTransactionSubscription }; - -// src/components/ContextView/FolderContextViewComponent.tsx -var FolderContextViewComponent = (props2) => { - var _a2; - const folder = (_a2 = props2.folder) == null ? void 0 : _a2.path; - const path = folderContextFromFolder(props2.plugin, folder); - const ref = _2(null); - const [flowOpen, setFlowOpen] = p2(false); - const folderNotePath = props2.plugin.settings.folderNoteInsideFolder ? `${props2.folder.path}/${props2.folder.name}.md` : props2.folder && props2.folder.parent.path == "/" ? `${props2.folder.name}.md` : `${props2.folder.parent.path}/${props2.folder.name}.md`; - const loadFile = async () => { - const folderNote = getAbstractFileAtPath(app, folderNotePath); - if (folderNote) { - const div = ref.current; - const newLeaf = spawnPortal2(props2.plugin, div); - newLeaf.openFile(folderNote); - } else { - const div = ref.current; - const newFile = await app.fileManager.createNewMarkdownFile(app.vault.getRoot(), folderNotePath); - const newLeaf = spawnPortal2(props2.plugin, div); - newLeaf.openFile(newFile); - } - }; - h2(() => { - if (flowOpen) { - loadFile(); - } else { - if (ref.current) - ref.current.empty(); +var { + peekNodeInfo: peekNodeInfo$2 +} = Recoil_FunctionalCore; +var { + useStoreRef: useStoreRef$2 +} = Recoil_RecoilRoot_react; +function useGetRecoilValueInfo() { + const storeRef = useStoreRef$2(); + return ({ + key: key2 + }) => peekNodeInfo$2(storeRef.current, storeRef.current.getState().currentTree, key2); +} +var Recoil_useGetRecoilValueInfo = useGetRecoilValueInfo; +var { + RecoilRoot: RecoilRoot$1, + useStoreRef: useStoreRef$3 +} = Recoil_RecoilRoot_react; +var { + useMemo: useMemo$2 +} = bn; +function useRecoilBridgeAcrossReactRoots() { + const store = useStoreRef$3().current; + return useMemo$2(() => { + function RecoilBridge({ + children + }) { + return /* @__PURE__ */ bn.createElement(RecoilRoot$1, { + store_INTERNAL: store + }, children); } - }, [flowOpen]); - const viewFolderNote = (open) => { - setFlowOpen(open); - }; - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-scroller" - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-header" - }, /* @__PURE__ */ bn.createElement("div", { - className: "inline-title" - }, props2.folder.name)), props2.plugin.settings.enableFolderNote ? /* @__PURE__ */ bn.createElement(MDBProvider, { - plugin: props2.plugin, - dbPath: path, - folder - }, /* @__PURE__ */ bn.createElement(FilterBar, { - plugin: props2.plugin, - folderNoteName: props2.folder.name, - folderNoteOpen: flowOpen, - viewFolderNote - }), path && !flowOpen && /* @__PURE__ */ bn.createElement(ContextListView, { - plugin: props2.plugin - }), flowOpen && /* @__PURE__ */ bn.createElement("div", { - className: "mk-flowspace-editor mk-foldernote", - ref - })) : /* @__PURE__ */ bn.createElement(MDBProvider, { - plugin: props2.plugin, - dbPath: path, - folder - }, /* @__PURE__ */ bn.createElement(FilterBar, { - plugin: props2.plugin - }), /* @__PURE__ */ bn.createElement(ContextListView, { - plugin: props2.plugin - }))); -}; - -// src/components/ContextView/TagContextViewComponent.tsx -var TagContextViewComponent = (props2) => { - const path = tagContextFromTag(props2.plugin, props2.tag); - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-scroller" - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-header" - }, /* @__PURE__ */ bn.createElement("div", { - className: "inline-title" - }, props2.tag)), /* @__PURE__ */ bn.createElement(MDBProvider, { - plugin: props2.plugin, - dbPath: path, - tag: props2.tag - }, /* @__PURE__ */ bn.createElement(FilterBar, { - plugin: props2.plugin - }), /* @__PURE__ */ bn.createElement(ContextListView, { - plugin: props2.plugin - }))); -}; - -// src/components/ContextView/ContextView.tsx -var CONTEXT_VIEW_TYPE = "make-folder-view"; -var ContextView = class extends import_obsidian21.ItemView { - constructor(leaf, plugin, viewType) { - super(leaf); - this.navigation = true; - this.plugin = plugin; - this.viewType = viewType; + return RecoilBridge; + }, [store]); +} +var Recoil_useRecoilBridgeAcrossReactRoots = useRecoilBridgeAcrossReactRoots; +function isNode2(object) { + var _ownerDocument, _doc$defaultView; + if (typeof window === "undefined") { + return false; } - getViewType() { - return this.viewType; + const doc = object != null ? (_ownerDocument = object.ownerDocument) !== null && _ownerDocument !== void 0 ? _ownerDocument : object : document; + const defaultView = (_doc$defaultView = doc.defaultView) !== null && _doc$defaultView !== void 0 ? _doc$defaultView : window; + return !!(object != null && (typeof defaultView.Node === "function" ? object instanceof defaultView.Node : typeof object === "object" && typeof object.nodeType === "number" && typeof object.nodeName === "string")); +} +var Recoil_isNode = isNode2; +var { + isReactNative: isReactNative$1, + isSSR: isSSR$3 +} = Recoil_Environment; +function shouldNotBeFrozen(value) { + if (value === null || typeof value !== "object") { + return true; } - getDisplayText() { - var _a2; - if (this.type == "tag") { - return this.tag; - } - return (_a2 = this.folder) == null ? void 0 : _a2.name; + switch (typeof value.$$typeof) { + case "symbol": + return true; + case "number": + return true; } - async onClose() { - this.destroy(); + if (value["@@__IMMUTABLE_ITERABLE__@@"] != null || value["@@__IMMUTABLE_KEYED__@@"] != null || value["@@__IMMUTABLE_INDEXED__@@"] != null || value["@@__IMMUTABLE_ORDERED__@@"] != null || value["@@__IMMUTABLE_RECORD__@@"] != null) { + return true; } - destroy() { - if (this.root) - this.root.unmount(); + if (Recoil_isNode(value)) { + return true; } - async onOpen() { - this.destroy(); + if (Recoil_isPromise(value)) { + return true; } - async setState(state, result) { - this.type = state.type; - if (state.type == "folder") { - const folder = getAbstractFileAtPath(this.plugin.app, state.folder); - if (!folder) { - return; - } - this.folder = folder; - this.constructFolderContext(folder); - await super.setState(state, result); - this.leaf.tabHeaderInnerTitleEl.innerText = folder.name; - this.leaf.view.titleEl = folder.name; - const headerEl = this.leaf.view.headerEl; - if (headerEl) { - headerEl.querySelector(".view-header-title").innerText = folder.name; + if (value instanceof Error) { + return true; + } + if (ArrayBuffer.isView(value)) { + return true; + } + if (!isSSR$3 && !isReactNative$1 && (value === window || value instanceof Window)) { + return true; + } + return false; +} +function deepFreezeValue(value) { + if (typeof value !== "object" || shouldNotBeFrozen(value)) { + return; + } + Object.freeze(value); + for (const key2 in value) { + if (Object.prototype.hasOwnProperty.call(value, key2)) { + const prop = value[key2]; + if (typeof prop === "object" && prop != null && !Object.isFrozen(prop)) { + deepFreezeValue(prop); } - } else if (state.type == "tag") { - this.tag = state.tag; - this.constructTagContext(this.tag); - await super.setState(state, result); - this.leaf.tabHeaderInnerTitleEl.innerText = this.tag; - this.leaf.view.titleEl = this.tag; - const headerEl = this.leaf.view.headerEl; - if (headerEl) { - headerEl.querySelector(".view-header-title").innerText = this.tag; + } + } + Object.seal(value); +} +var Recoil_deepFreezeValue = deepFreezeValue; +var TIME_WARNING_THRESHOLD_MS = 15; +function stringify(x5, opt, key2) { + if (typeof x5 === "string" && !x5.includes('"') && !x5.includes("\\")) { + return `"${x5}"`; + } + switch (typeof x5) { + case "undefined": + return ""; + case "boolean": + return x5 ? "true" : "false"; + case "number": + case "symbol": + return String(x5); + case "string": + return JSON.stringify(x5); + case "function": + if ((opt === null || opt === void 0 ? void 0 : opt.allowFunctions) !== true) { + throw new Error("Attempt to serialize function in a Recoil cache key"); } + return `__FUNCTION(${x5.name})__`; + } + if (x5 === null) { + return "null"; + } + if (typeof x5 !== "object") { + var _JSON$stringify; + return (_JSON$stringify = JSON.stringify(x5)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : ""; + } + if (Recoil_isPromise(x5)) { + return "__PROMISE__"; + } + if (Array.isArray(x5)) { + return `[${x5.map((v3, i4) => stringify(v3, opt, i4.toString()))}]`; + } + if (typeof x5.toJSON === "function") { + return stringify(x5.toJSON(key2), opt, key2); + } + if (x5 instanceof Map) { + const obj = {}; + for (const [k5, v3] of x5) { + obj[typeof k5 === "string" ? k5 : stringify(k5, opt)] = v3; } - result.history = true; - return; + return stringify(obj, opt, key2); } - getState() { - var _a2; - let state = super.getState(); - state.type = this.type; - if (state.type == "folder") { - state.folder = (_a2 = this.folder) == null ? void 0 : _a2.path; - } else { - state.tag = this.tag; + if (x5 instanceof Set) { + return stringify(Array.from(x5).sort((a5, b4) => stringify(a5, opt).localeCompare(stringify(b4, opt))), opt, key2); + } + if (Symbol !== void 0 && x5[Symbol.iterator] != null && typeof x5[Symbol.iterator] === "function") { + return stringify(Array.from(x5), opt, key2); + } + return `{${Object.keys(x5).filter((key3) => x5[key3] !== void 0).sort().map((key3) => `${stringify(key3, opt)}:${stringify(x5[key3], opt, key3)}`).join(",")}}`; +} +function stableStringify(x5, opt = { + allowFunctions: false +}) { + if (true) { + if (typeof window !== "undefined") { + const startTime = window.performance ? window.performance.now() : 0; + const str = stringify(x5, opt); + const endTime = window.performance ? window.performance.now() : 0; + if (endTime - startTime > TIME_WARNING_THRESHOLD_MS) { + console.groupCollapsed(`Recoil: Spent ${endTime - startTime}ms computing a cache key`); + console.warn(x5, str); + console.groupEnd(); + } + return str; } - return state; } - constructTagContext(tag) { - this.destroy(); - this.root = createRoot(this.contentEl); - this.root.render( - /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-view" - }, /* @__PURE__ */ bn.createElement(TagContextViewComponent, { - type: "tag", - tag: this.tag, - plugin: this.plugin - })) - ); + return stringify(x5, opt); +} +var Recoil_stableStringify = stableStringify; +var TreeCache = class { + constructor(options) { + var _options$onHit, _options$onSet, _options$mapNodeValue; + _defineProperty(this, "_numLeafs", void 0); + _defineProperty(this, "_root", void 0); + _defineProperty(this, "_onHit", void 0); + _defineProperty(this, "_onSet", void 0); + _defineProperty(this, "_mapNodeValue", void 0); + this._numLeafs = 0; + this._root = null; + this._onHit = (_options$onHit = options === null || options === void 0 ? void 0 : options.onHit) !== null && _options$onHit !== void 0 ? _options$onHit : () => { + }; + this._onSet = (_options$onSet = options === null || options === void 0 ? void 0 : options.onSet) !== null && _options$onSet !== void 0 ? _options$onSet : () => { + }; + this._mapNodeValue = (_options$mapNodeValue = options === null || options === void 0 ? void 0 : options.mapNodeValue) !== null && _options$mapNodeValue !== void 0 ? _options$mapNodeValue : (val) => val; } - constructFolderContext(folder) { - this.destroy(); - this.root = createRoot(this.contentEl); - this.root.render( - /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-view" - }, folder && /* @__PURE__ */ bn.createElement(FolderContextViewComponent, { - type: "folder", - folder, - plugin: this.plugin - })) - ); + size() { + return this._numLeafs; + } + root() { + return this._root; + } + get(getNodeValue, handlers) { + var _this$getLeafNode; + return (_this$getLeafNode = this.getLeafNode(getNodeValue, handlers)) === null || _this$getLeafNode === void 0 ? void 0 : _this$getLeafNode.value; + } + getLeafNode(getNodeValue, handlers) { + return findLeaf(this.root(), (nodeKey) => this._mapNodeValue(getNodeValue(nodeKey)), { + onNodeVisit: (node) => { + handlers === null || handlers === void 0 ? void 0 : handlers.onNodeVisit(node); + if (node.type === "leaf") { + this._onHit(node); + } + } + }); } -}; - -// src/utils/file.ts -var defaultNoteFolder = (plugin, activeFile2) => { - var _a2; - return (_a2 = plugin.settings.newFileLocation == "folder" ? getFolderFromPath(app, plugin.settings.newFileFolderPath) : plugin.settings.newFileLocation == "current" && activeFile2 ? getFolderFromPath(app, activeFile2) : plugin.app.vault.getRoot()) != null ? _a2 : plugin.app.vault.getRoot(); -}; -var defaultConfigFile = async (app2) => { - return await app2.vault.adapter.read((0, import_obsidian22.normalizePath)(app2.vault.configDir + "/app.json")); -}; -var fileExtensionForFile = (path) => path.split(".").pop(); -var appendFileMetadataForRow = (row, fields) => { - const file = getAbstractFileAtPath(app, row.File); - if (!file) { - return row; + set(route, value, handlers) { + let leafNode; + const newRoot = addLeaf(this.root(), route.map(([nodeKey, nodeValue]) => [nodeKey, this._mapNodeValue(nodeValue)]), null, value, null, { + onNodeVisit: (node) => { + handlers === null || handlers === void 0 ? void 0 : handlers.onNodeVisit(node); + if (node.type === "leaf") { + leafNode = node; + } + } + }); + if (!this.root()) { + this._root = newRoot; + } + this._numLeafs++; + this._onSet(Recoil_nullthrows(leafNode)); } - return { ...row, ...fields.filter((f4) => f4.type == "fileprop").reduce((p3, c4) => ({ ...p3, [c4.name]: appendFileMetaData(c4.value, file) }), {}) }; -}; -var appendFileMetaData = (propType, file) => { - let value = ""; - if (file) { - if (propType == "folder") { - value = file.parent.path; + delete(node) { + if (!this.root()) { + return false; } - if (file instanceof import_obsidian22.TFile) { - if (propType == "ctime") { - value = file.stat.ctime.toString(); - } else if (propType == "mtime") { - value = file.stat.mtime.toString(); - } else if (propType == "extension") { - value = file.extension; - } else if (propType == "size") { - value = file.stat.size.toString(); - } - } else if (propType == "extension") { - value = "Folder"; + const root = Recoil_nullthrows(this.root()); + const existsInTree = pruneNodeFromTree(root, node, node.parent); + if (!existsInTree) { + return false; + } + if (node === root || root.type === "branch" && !root.branches.size) { + this._root = null; + this._numLeafs = 0; + return true; } + this._numLeafs -= countDownstreamLeaves(node); + return true; } - return value; -}; -var viewTypeByString = (file) => { - if (file.charAt(0) == "#") { - return "tag"; + clear() { + this._numLeafs = 0; + this._root = null; } - const portalFile = app.vault.getAbstractFileByPath(file); - if (portalFile instanceof import_obsidian22.TFolder) { - return "folder"; +}; +var findLeaf = (root, getNodeValue, handlers) => { + var _handlers$onNodeVisit; + if (root == null) { + return void 0; } - if (portalFile instanceof import_obsidian22.TFile) { - return "file"; + handlers === null || handlers === void 0 ? void 0 : (_handlers$onNodeVisit = handlers.onNodeVisit) === null || _handlers$onNodeVisit === void 0 ? void 0 : _handlers$onNodeVisit.call(handlers, root); + if (root.type === "leaf") { + return root; } - return null; + const nodeValue = getNodeValue(root.nodeKey); + return findLeaf(root.branches.get(nodeValue), getNodeValue, handlers); }; -function getAllAbstractFilesInVault(plugin, app2) { - let files = []; - let rootFolder = app2.vault.getRoot(); - function recursiveFx(folder) { - for (let child of folderChildren(plugin, folder)) { - if (child instanceof import_obsidian22.TFolder) { - let childFolder = child; - if (childFolder.children) - recursiveFx(childFolder); - } - files.push(child); +var addLeaf = (root, route, parent, value, branchKey, handlers) => { + var _handlers$onNodeVisit2; + let node; + if (root == null) { + if (route.length === 0) { + node = { + type: "leaf", + value, + parent, + branchKey + }; + } else { + const [path, ...rest] = route; + const [nodeKey, nodeValue] = path; + node = { + type: "branch", + nodeKey, + parent, + branches: /* @__PURE__ */ new Map(), + branchKey + }; + node.branches.set(nodeValue, addLeaf(null, rest, node, value, nodeValue, handlers)); + } + } else { + node = root; + if (route.length) { + const [path, ...rest] = route; + const [nodeKey, nodeValue] = path; + !(root.type === "branch" && root.nodeKey === nodeKey) ? true ? Recoil_invariant(false, "Existing cache must have a branch midway through the route with matching node key") : Recoil_invariant(false) : void 0; + root.branches.set(nodeValue, addLeaf(root.branches.get(nodeValue), rest, root, value, nodeValue, handlers)); } } - recursiveFx(rootFolder); - return files; -} -var getFolderFromPath = (app2, path) => { - if (!path) - return null; - const file = path.slice(-1) == "/" ? path.substring(0, path.length - 1) : path; - const afile = getAbstractFileAtPath(app2, file); - if (!afile) - return null; - return afile instanceof import_obsidian22.TFolder ? afile : afile.parent; -}; -var getFolderPathFromString2 = (file) => { - var _a2; - return (_a2 = getFolderFromPath(app, file)) == null ? void 0 : _a2.path; -}; -var deleteFiles = (plugin, files) => { - files.forEach((f4) => { - const file = getAbstractFileAtPath(app, f4); - deleteFile(plugin, file); - }); -}; -var deleteFile = (plugin, file) => { - let deleteOption = plugin.settings.deleteFileOption; - if (deleteOption === "permanent") { - plugin.app.vault.delete(file, true); - } else if (deleteOption === "system-trash") { - plugin.app.vault.trash(file, true); - } else if (deleteOption === "trash") { - plugin.app.vault.trash(file, false); - } -}; -var openFile2 = async (file, app2, newLeaf) => { - openAFile(getAbstractFileAtPath(app2, file.path), app2, newLeaf); + handlers === null || handlers === void 0 ? void 0 : (_handlers$onNodeVisit2 = handlers.onNodeVisit) === null || _handlers$onNodeVisit2 === void 0 ? void 0 : _handlers$onNodeVisit2.call(handlers, node); + return node; }; -var openAFile = async (file, app2, newLeaf) => { - if (file instanceof import_obsidian22.TFolder) { - openTFolder(file, app2, newLeaf); - } else if (file instanceof import_obsidian22.TFile) { - openTFile(file, app2, newLeaf); +var pruneNodeFromTree = (root, node, parent) => { + if (!parent) { + return root === node; } - let evt = new CustomEvent(eventTypes.activeFileChange, { detail: { filePath: file.path } }); - window.dispatchEvent(evt); -}; -var openTFile = async (file, app2, newLeaf) => { - let leaf = app2.workspace.getLeaf(newLeaf); - app2.workspace.setActiveLeaf(leaf, { focus: true }); - await leaf.openFile(file, { eState: { focus: true } }); + parent.branches.delete(node.branchKey); + return pruneUpstreamBranches(root, parent, parent.parent); }; -var openTFolder = async (file, app2, newLeaf) => { - let leaf = app2.workspace.getLeaf(newLeaf); - const viewType = CONTEXT_VIEW_TYPE; - app2.workspace.setActiveLeaf(leaf, { focus: true }); - await leaf.setViewState({ type: viewType, state: { type: "folder", folder: file.path } }); - await app2.workspace.requestSaveLayout(); - if (platformIsMobile()) { - app2.workspace.leftSplit.collapse(); +var pruneUpstreamBranches = (root, branchNode, parent) => { + if (!parent) { + return root === branchNode; } -}; -var openTag = async (tag, app2, newLeaf) => { - let leaf = app2.workspace.getLeaf(newLeaf); - const viewType = CONTEXT_VIEW_TYPE; - app2.workspace.setActiveLeaf(leaf, { focus: true }); - await leaf.setViewState({ type: viewType, state: { type: "tag", tag } }); - await app2.workspace.requestSaveLayout(); - if (platformIsMobile()) { - app2.workspace.leftSplit.collapse(); + if (branchNode.branches.size === 0) { + parent.branches.delete(branchNode.branchKey); } + return pruneUpstreamBranches(root, parent, parent.parent); }; -var getAbstractFileAtPath = (app2, path) => { - return app2.vault.getAbstractFileByPath(path); -}; -var openFileInNewPane = (plugin, file) => { - openFile2(file, plugin.app, true); +var countDownstreamLeaves = (node) => node.type === "leaf" ? 1 : Array.from(node.branches.values()).reduce((sum2, currNode) => sum2 + countDownstreamLeaves(currNode), 0); +var Recoil_TreeCache = { + TreeCache }; -var createNewMarkdownFile = async (app2, folder, newFileName, content) => { - const newFile = await app2.fileManager.createNewMarkdownFile(folder, newFileName); - if (content && content !== "") - await app2.vault.modify(newFile, content); - await openFile2(newFile, app2, false); - const titleEl = app2.workspace.activeLeaf.view.containerEl.querySelector(".inline-title"); - if (titleEl) { - titleEl.focus(); - selectElementContents(titleEl); +var Recoil_TreeCache_1 = Recoil_TreeCache.TreeCache; +var Recoil_TreeCache$1 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + TreeCache: Recoil_TreeCache_1 +}); +var LRUCache = class { + constructor(options) { + var _options$mapKey; + _defineProperty(this, "_maxSize", void 0); + _defineProperty(this, "_size", void 0); + _defineProperty(this, "_head", void 0); + _defineProperty(this, "_tail", void 0); + _defineProperty(this, "_map", void 0); + _defineProperty(this, "_keyMapper", void 0); + this._maxSize = options.maxSize; + this._size = 0; + this._head = null; + this._tail = null; + this._map = /* @__PURE__ */ new Map(); + this._keyMapper = (_options$mapKey = options.mapKey) !== null && _options$mapKey !== void 0 ? _options$mapKey : (v3) => v3; } - let evt = new CustomEvent(eventTypes.activeFileChange, { detail: { filePath: newFile.path } }); - window.dispatchEvent(evt); - return newFile; -}; -var platformIsMobile = () => { - return import_obsidian22.Platform.isMobile; -}; -var newFileInFolder = async (plugin, data) => { - await createNewMarkdownFile( - plugin.app, - data.parent.children.find((f4) => f4.name == data.name), - "", - "" - ); -}; - -// src/components/ui/modals/modals.ts -var SaveViewModal = class extends import_obsidian23.Modal { - constructor(schema, saveSchema, action) { - super(app); - this.schema = schema; - this.saveSchema = saveSchema; - this.action = action; + head() { + return this._head; } - onOpen() { - let { contentEl } = this; - let myModal = this; - let headerText; - if (this.action == "new view") - headerText = "Save View"; - if (this.action == "new table") - headerText = "Save Table"; - if (this.action == "rename view") - headerText = "Rename View"; - if (this.action == "rename table") - headerText = "Rename Table"; - const headerEl = contentEl.createEl("div", { text: headerText }); - headerEl.addClass("modal-title"); - const inputEl = contentEl.createEl("input"); - inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; - inputEl.focus(); - let changeButtonText; - if (this.action == "new view") - changeButtonText = "Save View"; - if (this.action == "new table") - changeButtonText = "Save Table"; - if (this.action == "rename view") - changeButtonText = "Rename View"; - if (this.action == "rename table") - changeButtonText = "Rename Table"; - const changeButton = contentEl.createEl("button", { text: changeButtonText }); - const cancelButton = contentEl.createEl("button", { text: i18n_default.buttons.cancel }); - cancelButton.style.cssText = "float: right;"; - cancelButton.addEventListener("click", () => { - myModal.close(); - }); - const onClickAction = async () => { - let newName = inputEl.value; - if (this.action == "new view" || this.action == "new table") { - this.saveSchema({ ...this.schema, id: newName, name: newName }); - } else { - this.saveSchema({ ...this.schema, name: newName }); - } - myModal.close(); - }; - changeButton.addEventListener("click", onClickAction); - inputEl.addEventListener("keydown", (e4) => { - if (e4.key === "Enter") { - e4.preventDefault(); - onClickAction(); - } - ; - }); + tail() { + return this._tail; } - onClose() { - let { contentEl } = this; - contentEl.empty(); + size() { + return this._size; } -}; -var MergeColumnModal = class extends import_obsidian23.Modal { - constructor(columns, mergeColumn) { - super(app); - this.columns = columns; - this.mergeColumn = mergeColumn; + maxSize() { + return this._maxSize; } - onOpen() { - let { contentEl } = this; - let myModal = this; - let headerText = "Merge Field"; - const headerEl = contentEl.createEl("div", { text: headerText }); - headerEl.addClass("modal-title"); - const containerEl = contentEl.createEl("div"); - containerEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; - const select = containerEl.createEl("select"); - for (var i4 = 0; i4 < this.columns.length; i4++) { - var opt = document.createElement("option"); - opt.value = i4.toString(); - opt.innerHTML = this.columns[i4].name + this.columns[i4].table; - select.appendChild(opt); + has(key2) { + return this._map.has(this._keyMapper(key2)); + } + get(key2) { + const mappedKey = this._keyMapper(key2); + const node = this._map.get(mappedKey); + if (!node) { + return void 0; } - const select2 = containerEl.createEl("select"); - for (var i4 = 0; i4 < this.columns.length; i4++) { - var opt = document.createElement("option"); - opt.value = i4.toString(); - opt.innerHTML = this.columns[i4].name + this.columns[i4].table; - select2.appendChild(opt); + this.set(key2, node.value); + return node.value; + } + set(key2, val) { + const mappedKey = this._keyMapper(key2); + const existingNode = this._map.get(mappedKey); + if (existingNode) { + this.delete(key2); } - let changeButtonText = "Merge"; - const changeButton = contentEl.createEl("button", { text: changeButtonText }); - const cancelButton = contentEl.createEl("button", { text: i18n_default.buttons.cancel }); - cancelButton.style.cssText = "float: right;"; - cancelButton.addEventListener("click", () => { - myModal.close(); - }); - const onClickAction = async () => { - this.mergeColumn(this.columns[parseInt(select.value)], this.columns[parseInt(select2.value)]); - myModal.close(); + const head = this.head(); + const node = { + key: key2, + right: head, + left: null, + value: val }; - changeButton.addEventListener("click", onClickAction); + if (head) { + head.left = node; + } else { + this._tail = node; + } + this._map.set(mappedKey, node); + this._head = node; + this._size++; + this._maybeDeleteLRU(); } - onClose() { - let { contentEl } = this; - contentEl.empty(); + _maybeDeleteLRU() { + if (this.size() > this.maxSize()) { + this.deleteLru(); + } } -}; -var VaultChangeModal = class extends import_obsidian23.Modal { - constructor(plugin, file, action, space) { - super(plugin.app); - this.file = file; - this.action = action; - this.plugin = plugin; - this.space = space; + deleteLru() { + const tail = this.tail(); + if (tail) { + this.delete(tail.key); + } } - onOpen() { - let { contentEl } = this; - let myModal = this; - let headerText; - if (this.action === "rename") { - headerText = i18n_default.labels.rename; - } else if (this.action === "create folder") { - headerText = i18n_default.labels.createFolder; - } else if (this.action === "create note") { - headerText = i18n_default.labels.createNote; + delete(key2) { + const mappedKey = this._keyMapper(key2); + if (!this._size || !this._map.has(mappedKey)) { + return; } - const headerEl = contentEl.createEl("div", { text: headerText }); - headerEl.addClass("modal-title"); - const inputEl = contentEl.createEl("input"); - inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; - if (this.action === "rename") { - if (this.file.name.endsWith(".md")) { - inputEl.value = this.file.name.substring( - 0, - this.file.name.lastIndexOf(".") - ); - } else { - inputEl.value = this.file.name; - } + const node = Recoil_nullthrows(this._map.get(mappedKey)); + const right = node.right; + const left = node.left; + if (right) { + right.left = node.left; } - inputEl.focus(); - let changeButtonText; - if (this.action === "rename") { - changeButtonText = i18n_default.buttons.rename; - } else if (this.action === "create folder") { - changeButtonText = i18n_default.buttons.createFolder; - } else if (this.action === "create note") { - changeButtonText = i18n_default.buttons.createNote; + if (left) { + left.right = node.right; } - const changeButton = contentEl.createEl("button", { - text: changeButtonText - }); - const cancelButton = contentEl.createEl("button", { - text: i18n_default.buttons.cancel - }); - cancelButton.style.cssText = "float: right;"; - cancelButton.addEventListener("click", () => { - myModal.close(); - }); - const onClickAction = async () => { - let newName = inputEl.value; - if (this.action === "rename") { - if (this.file.name.endsWith(".md")) - newName = newName + ".md"; - this.app.fileManager.renameFile( - this.file, - this.file.parent.path == "/" ? newName : this.file.parent.path + "/" + newName - ); - } else if (this.action === "create folder") { - const path = !this.file || this.file.path == "/" ? newName : this.file.path + "/" + newName; - this.app.vault.createFolder(path); - if (this.space != "/") - addPathsToSpace(this.plugin, this.space, [path]); + if (node === this.head()) { + this._head = right; + } + if (node === this.tail()) { + this._tail = left; + } + this._map.delete(mappedKey); + this._size--; + } + clear() { + this._size = 0; + this._head = null; + this._tail = null; + this._map = /* @__PURE__ */ new Map(); + } +}; +var Recoil_LRUCache = { + LRUCache +}; +var Recoil_LRUCache_1 = Recoil_LRUCache.LRUCache; +var Recoil_LRUCache$1 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + LRUCache: Recoil_LRUCache_1 +}); +var { + LRUCache: LRUCache$1 +} = Recoil_LRUCache$1; +var { + TreeCache: TreeCache$1 +} = Recoil_TreeCache$1; +function treeCacheLRU(maxSize, mapNodeValue = (v3) => v3) { + const lruCache = new LRUCache$1({ + maxSize + }); + const cache = new TreeCache$1({ + mapNodeValue, + onHit: (node) => { + lruCache.set(node, true); + }, + onSet: (node) => { + const lruNode = lruCache.tail(); + lruCache.set(node, true); + if (lruNode && cache.size() > maxSize) { + cache.delete(lruNode.key); } - myModal.close(); - }; - changeButton.addEventListener("click", onClickAction); - inputEl.addEventListener("keydown", (e4) => { - if (e4.key === "Enter") - onClickAction(); - }); + } + }); + return cache; +} +var Recoil_treeCacheLRU = treeCacheLRU; +var { + TreeCache: TreeCache$2 +} = Recoil_TreeCache$1; +var defaultPolicy = { + equality: "reference", + eviction: "keep-all", + maxSize: Infinity +}; +function treeCacheFromPolicy({ + equality = defaultPolicy.equality, + eviction = defaultPolicy.eviction, + maxSize = defaultPolicy.maxSize +} = defaultPolicy) { + const valueMapper = getValueMapper(equality); + const treeCache = getTreeCache(eviction, maxSize, valueMapper); + return treeCache; +} +function getValueMapper(equality) { + switch (equality) { + case "reference": + return (val) => val; + case "value": + return (val) => Recoil_stableStringify(val); } - onClose() { - let { contentEl } = this; - contentEl.empty(); + throw new Error(`Unrecognized equality policy ${equality}`); +} +function getTreeCache(eviction, maxSize, mapNodeValue) { + switch (eviction) { + case "keep-all": + return new TreeCache$2({ + mapNodeValue + }); + case "lru": + return Recoil_treeCacheLRU(Recoil_nullthrows(maxSize), mapNodeValue); + case "most-recent": + return Recoil_treeCacheLRU(1, mapNodeValue); } + throw new Error(`Unrecognized eviction policy ${eviction}`); +} +var Recoil_treeCacheFromPolicy = treeCacheFromPolicy; +function startPerfBlock(_id) { + return () => null; +} +var Recoil_PerformanceTimings = { + startPerfBlock }; -var MoveSuggestionModal = class extends import_obsidian23.FuzzySuggestModal { - constructor(app2, files) { - super(app2); - this.files = files; +var { + CANCELED: CANCELED$2, + Canceled: Canceled$1, + loadableWithError: loadableWithError$1, + loadableWithPromise: loadableWithPromise$1, + loadableWithValue: loadableWithValue$2 +} = Recoil_Loadable; +var { + getNodeLoadable: getNodeLoadable$2, + peekNodeLoadable: peekNodeLoadable$1, + setNodeValue: setNodeValue$3 +} = Recoil_FunctionalCore; +var { + saveDependencyMapToStore: saveDependencyMapToStore$1 +} = Recoil_Graph; +var { + DEFAULT_VALUE: DEFAULT_VALUE$4, + RecoilValueNotReady: RecoilValueNotReady$2, + getConfigDeletionHandler: getConfigDeletionHandler$1, + registerNode: registerNode$1 +} = Recoil_Node; +var { + isRecoilValue: isRecoilValue$3 +} = Recoil_RecoilValue$1; +var { + AbstractRecoilValue: AbstractRecoilValue$4 +} = Recoil_RecoilValue$1; +var { + setRecoilValueLoadable: setRecoilValueLoadable$2 +} = Recoil_RecoilValueInterface; +var { + retainedByOptionWithDefault: retainedByOptionWithDefault$1 +} = Recoil_Retention; +var { + cloneSnapshot: cloneSnapshot$2 +} = Recoil_Snapshot$1; +var { + startPerfBlock: startPerfBlock$1 +} = Recoil_PerformanceTimings; +var dependencyStack = []; +var waitingStores = /* @__PURE__ */ new Map(); +var getNewExecutionId = (() => { + let executionId = 0; + return () => executionId++; +})(); +function getInitialExecutionInfo() { + return { + depValuesDiscoveredSoFarDuringAsyncWork: null, + latestLoadable: null, + latestExecutionId: null, + stateVersion: null + }; +} +function selector(options) { + const { + key: key2, + get, + cachePolicy_UNSTABLE: cachePolicy + } = options; + const set = options.set != null ? options.set : void 0; + const cache = Recoil_treeCacheFromPolicy(cachePolicy !== null && cachePolicy !== void 0 ? cachePolicy : { + equality: "reference", + eviction: "keep-all" + }); + const retainedBy = retainedByOptionWithDefault$1(options.retainedBy_UNSTABLE); + const executionInfoMap = /* @__PURE__ */ new Map(); + let liveStoresCount = 0; + function selectorIsLive() { + return !Recoil_gkx_1("recoil_memory_managament_2020") || liveStoresCount > 0; } - getItemText(item) { - return item.path; + function getExecutionInfo(store) { + if (!executionInfoMap.has(store)) { + executionInfoMap.set(store, getInitialExecutionInfo()); + } + return Recoil_nullthrows(executionInfoMap.get(store)); } - getItems() { - return getAllFoldersInVault(this.app); + function selectorInit(store) { + liveStoresCount++; + store.getState().knownSelectors.add(key2); + return () => { + liveStoresCount--; + store.getState().knownSelectors.delete(key2); + executionInfoMap.delete(store); + }; } - onChooseItem(item, evt) { - this.files.forEach((f4) => { - const file = getAbstractFileAtPath(app, f4); - if (file) { - this.app.vault.rename( - file, - item.path + "/" + file.name - ); - } - }); + function selectorShouldDeleteConfigOnRelease() { + return getConfigDeletionHandler$1(key2) !== void 0 && !selectorIsLive(); } -}; -function getAllFoldersInVault(app2) { - let folders = []; - let rootFolder = app2.vault.getRoot(); - folders.push(rootFolder); - function recursiveFx(folder) { - for (let child of folder.children) { - if (child instanceof import_obsidian23.TFolder) { - let childFolder = child; - folders.push(childFolder); - if (childFolder.children) - recursiveFx(childFolder); + function notifyStoreWhenAsyncSettles(store, loadable, executionId) { + if (loadable.state === "loading") { + let stores = waitingStores.get(executionId); + if (stores == null) { + waitingStores.set(executionId, stores = /* @__PURE__ */ new Set()); } + stores.add(store); } } - recursiveFx(rootFolder); - return folders; -} -var SectionChangeModal = class extends import_obsidian23.Modal { - constructor(plugin, space, action) { - super(plugin.app); - this.space = space; - this.action = action; - this.plugin = plugin; - } - onOpen() { - let { contentEl } = this; - let myModal = this; - let headerText; - if (this.action === "rename") { - headerText = i18n_default.labels.renameSection; - } else if (this.action === "create") { - headerText = i18n_default.labels.createSection; + function notifyStoresOfSettledAsync(newLoadable, executionId) { + const stores = waitingStores.get(executionId); + if (stores !== void 0) { + for (const store of stores) { + setRecoilValueLoadable$2(store, new AbstractRecoilValue$4(key2), newLoadable); + } + waitingStores.delete(executionId); } - const headerEl = contentEl.createEl("div", { text: headerText }); - headerEl.addClass("modal-title"); - const inputEl = contentEl.createEl("input"); - inputEl.style.cssText = "width: 100%; height: 2.5em; margin-bottom: 15px;"; - if (this.action === "rename") { - inputEl.value = this.space; + } + function getCachedNodeLoadable(store, state, key3) { + const isKeyPointingToSelector = store.getState().knownSelectors.has(key3); + if (isKeyPointingToSelector && state.atomValues.has(key3)) { + return Recoil_nullthrows(state.atomValues.get(key3)); } - inputEl.focus(); - let changeButtonText; - if (this.action === "rename") { - changeButtonText = i18n_default.buttons.rename; - } else if (this.action === "create") { - changeButtonText = i18n_default.buttons.createSection; + const loadable = getNodeLoadable$2(store, state, key3); + if (loadable.state !== "loading" && isKeyPointingToSelector) { + state.atomValues.set(key3, loadable); } - const changeButton = contentEl.createEl("button", { - text: changeButtonText - }); - const cancelButton = contentEl.createEl("button", { - text: i18n_default.buttons.cancel - }); - cancelButton.style.cssText = "float: right;"; - cancelButton.addEventListener("click", () => { - myModal.close(); - }); - const onClickAction = async () => { - let newName = inputEl.value.replace(/\//g, ""); - if (newName.length == 0) { - new import_obsidian23.Notice("Enter a name for your space"); - return; + return loadable; + } + function wrapPendingPromise(store, promise, state, depValues, executionId) { + return promise.then((value) => { + if (!selectorIsLive()) { + clearExecutionInfo(store, executionId); + return CANCELED$2; } - if (retrieveSpaces(this.plugin).find((f4) => f4.name == newName)) { - new import_obsidian23.Notice("Space name already exists"); - return; + const loadable = loadableWithValue$2(value); + maybeFreezeValue(value); + setCache(state, depValuesToDepRoute(depValues), loadable); + setDepsInStore(store, state, new Set(depValues.keys()), executionId); + setLoadableInStoreToNotifyDeps(store, loadable, executionId); + return { + __value: value, + __key: key2 + }; + }).catch((errorOrPromise) => { + if (!selectorIsLive()) { + clearExecutionInfo(store, executionId); + return CANCELED$2; } - if (this.action === "rename") { - renameSpace(this.plugin, this.space, newName); - } else if (this.action === "create") { - insertSpaceAtIndex(this.plugin, newName, false, 0); + if (isLatestExecution(store, executionId)) { + updateExecutionInfoDepValues(depValues, store, executionId); } - myModal.close(); - }; - changeButton.addEventListener("click", onClickAction); - inputEl.addEventListener("keydown", (e4) => { - if (e4.key === "Enter") - onClickAction(); - }); - } - onClose() { - let { contentEl } = this; - contentEl.empty(); - } -}; - -// src/components/Spaces/MainMenu.tsx -var import_obsidian25 = require("obsidian"); - -// src/components/ui/modals/hiddenFiles.tsx -var import_obsidian24 = require("obsidian"); -var HiddenItemsModal = class extends import_obsidian24.Modal { - constructor(plugin) { - super(plugin.app); - this.plugin = plugin; - } - onOpen() { - let { contentEl } = this; - let myModal = this; - let headerText; - const headerEl = contentEl.createEl("div", { text: headerText }); - headerEl.addClass("modal-title"); - headerEl.innerHTML = "Hidden Files"; - const listEl = contentEl.createEl("div"); - const root = createRoot(listEl); - root.render(/* @__PURE__ */ bn.createElement(HiddenFiles, { - plugin: this.plugin - })); - const cancelButton = contentEl.createEl("button", { - text: "Close" - }); - cancelButton.style.cssText = "float: right;"; - cancelButton.addEventListener("click", () => { - myModal.close(); - }); - const onClickAction = async () => { - myModal.close(); - }; - } - onClose() { - let { contentEl } = this; - let event = new CustomEvent(eventTypes.vaultChange); - window.dispatchEvent(event); - contentEl.empty(); - } -}; -var HiddenFiles = (props2) => { - const { plugin } = props2; - const ref = _2(null); - const [hiddenFiles, setHiddenFiles] = p2(plugin.settings.hiddenFiles); - const [hiddenExtensions, setHiddenExtensions] = p2(plugin.settings.hiddenExtensions); - const saveExtension = (value) => { - plugin.settings.hiddenExtensions = [...plugin.settings.hiddenExtensions, value]; - plugin.saveSettings(); - }; - const saveFile = (_5, value) => { - plugin.settings.hiddenFiles = [...plugin.settings.hiddenFiles, ...value]; - plugin.saveSettings(); - }; - const removeExtension = (index) => { - plugin.settings.hiddenExtensions = plugin.settings.hiddenExtensions.filter((f4, i4) => i4 != index); - plugin.saveSettings(); - }; - const removeItem = (index) => { - plugin.settings.hiddenFiles = plugin.settings.hiddenFiles.filter((f4, i4) => i4 != index); - plugin.saveSettings(); - }; - const addExtension = () => { - if ((ref == null ? void 0 : ref.current.value.length) > 0) { - saveExtension(ref.current.value); - ref.current.empty(); - } - }; - const settingsChanged = () => { - setHiddenFiles(plugin.settings.hiddenFiles); - setHiddenExtensions(plugin.settings.hiddenExtensions); - }; - h2(() => { - window.addEventListener(eventTypes.settingsChanged, settingsChanged); - return () => { - window.removeEventListener(eventTypes.settingsChanged, settingsChanged); - }; - }, []); - const addMenu = (e4) => { - const offset = e4.target.getBoundingClientRect(); - const options = getAllAbstractFilesInVault(props2.plugin, app).map((f4) => ({ name: fileNameToString(f4.name), value: f4.path })); - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - options, - saveOptions: saveFile, - placeholder: "Find Note", - detail: true, - searchable: true + if (Recoil_isPromise(errorOrPromise)) { + return wrapPendingDependencyPromise(store, errorOrPromise, state, depValues, executionId); + } + const loadable = loadableWithError$1(errorOrPromise); + maybeFreezeValue(errorOrPromise); + setCache(state, depValuesToDepRoute(depValues), loadable); + setDepsInStore(store, state, new Set(depValues.keys()), executionId); + setLoadableInStoreToNotifyDeps(store, loadable, executionId); + throw errorOrPromise; }); - }; - return /* @__PURE__ */ bn.createElement("div", { - className: "modal-content" - }, /* @__PURE__ */ bn.createElement("div", { - className: "setting-item setting-item-heading" - }, "Extensions"), /* @__PURE__ */ bn.createElement("div", null, hiddenExtensions.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { - className: "mobile-option-setting-item" - }, /* @__PURE__ */ bn.createElement("span", { - className: "mobile-option-setting-item-name" - }, f4), /* @__PURE__ */ bn.createElement("div", { - className: "clickable-icon mobile-option-setting-item-option-icon", - "aria-label": "Delete", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] }, - onClick: () => removeExtension(index) - })))), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item" - }, /* @__PURE__ */ bn.createElement("input", { - placeholder: "Add Extension", - type: "text", - ref - }), /* @__PURE__ */ bn.createElement("button", { - onClick: (e4) => addExtension() - }, "+ Add")), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item setting-item-heading" - }, "Files"), /* @__PURE__ */ bn.createElement("div", null, hiddenFiles.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { - className: "mobile-option-setting-item" - }, /* @__PURE__ */ bn.createElement("span", { - className: "mobile-option-setting-item-name" - }, f4), /* @__PURE__ */ bn.createElement("div", { - className: "clickable-icon mobile-option-setting-item-option-icon", - "aria-label": "Delete", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] }, - onClick: () => removeItem(index) - })))), /* @__PURE__ */ bn.createElement("div", { - className: "setting-item" - }, /* @__PURE__ */ bn.createElement("button", { - onClick: (e4) => addMenu(e4) - }, "+ Add File"))); -}; - -// src/recoil/pluginState.ts -var activeFile = Recoil_index_4({ - key: "spacesActiveFile", - default: null, - dangerouslyAllowMutability: true -}); -var selectedFiles = Recoil_index_4({ - key: "spacesSelectedFiles", - default: [], - dangerouslyAllowMutability: true -}); -var activeView = Recoil_index_4({ - key: "spacesActiveView", - default: "root", - dangerouslyAllowMutability: true -}); -var activeViewSpace = Recoil_index_4({ - key: "spacesActiveSpace", - default: "", - dangerouslyAllowMutability: true -}); -var spaces = Recoil_index_4({ - key: "spaces", - default: [], - dangerouslyAllowMutability: true -}); -var expandedFolders = Recoil_index_4({ - key: "expandedFolders", - default: {} -}); - -// src/components/Spaces/MainMenu.tsx -var replaceMobileMainMenu = (plugin) => { - if (platformIsMobile()) { - const header = app.workspace.containerEl.querySelector( - ".workspace-drawer.mod-left .workspace-drawer-header-left" - ); - header.empty(); - if (!plugin.settings.spacesCompactMode) { - const reactEl = createRoot(header); - reactEl.render(/* @__PURE__ */ bn.createElement(Recoil_index_2, null, /* @__PURE__ */ bn.createElement(MainMenu, { - plugin - }))); - } } -}; -var MainMenu = (props2) => { - var _a2; - const { plugin } = props2; - const [activeView2, setActiveView] = Recoil_index_14(activeView); - const [spaces2, setSpaces] = Recoil_index_14(spaces); - const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14(activeViewSpace); - const activeSpace = spaces2.find((f4) => f4.name == activeViewSpace2); - const ref = _2(); - const toggleSections = (collapse) => { - const newSections = collapse ? [] : ["/", ...spaces2.map((f4) => f4.name)]; - plugin.settings.expandedSpaces = newSections; - plugin.saveSettings(); - }; - const newSection = () => { - let vaultChangeModal = new SectionChangeModal(plugin, "", "create"); - vaultChangeModal.open(); - }; - h2(() => { - refreshLeafs(); - }, []); - const refreshLeafs = () => { - let leafs = []; - let spaceActive = true; - if (plugin.app.workspace.leftSplit && platformIsMobile()) { - const mobileDrawer = plugin.app.workspace.leftSplit; - const leaves = mobileDrawer.children; - const index = leaves.reduce((p3, c4, i4) => { - return c4.getViewState().type == FILE_TREE_VIEW_TYPE ? i4 : p3; - }, -1); - spaceActive = index == mobileDrawer.currentTab; - leafs.push(...leaves.filter((l3, i4) => i4 != index)); - } - return { leafs, spaceActive }; - }; - const showMenu = (e4) => { - const { spaceActive, leafs } = refreshLeafs(); - const menu = new import_obsidian25.Menu(); - !spaceActive && menu.addItem((menuItem) => { - menuItem.setIcon("lucide-arrow-left"); - menuItem.setTitle(i18n_default.menu.backToSpace); - menuItem.onClick((ev) => { - const leaves = plugin.app.workspace.getLeavesOfType(FILE_TREE_VIEW_TYPE); - if (leaves.length > 0) { - plugin.app.workspace.revealLeaf(leaves[0]); + function wrapPendingDependencyPromise(store, promise, state, existingDeps, executionId) { + return promise.then((resolvedDep) => { + if (!selectorIsLive()) { + clearExecutionInfo(store, executionId); + return CANCELED$2; + } + if (resolvedDep instanceof Canceled$1) { + Recoil_recoverableViolation("Selector was released while it had dependencies"); + return CANCELED$2; + } + const { + __key: resolvedDepKey, + __value: depValue + } = resolvedDep !== null && resolvedDep !== void 0 ? resolvedDep : {}; + let bypassSelectorDepCacheOnReevaluation = true; + if (resolvedDepKey != null) { + state.atomValues.set(resolvedDepKey, loadableWithValue$2(depValue)); + bypassSelectorDepCacheOnReevaluation = false; + } + const cachedLoadable = getValFromCacheAndUpdatedDownstreamDeps(store, state); + if (cachedLoadable && cachedLoadable.state === "hasValue") { + setExecutionInfo(cachedLoadable, store); + return { + __value: cachedLoadable.contents, + __key: key2 + }; + } + if (!isLatestExecution(store, executionId)) { + var _executionInfo$latest; + const executionInfo = getExecutionInfoOfInProgressExecution(state); + if ((executionInfo === null || executionInfo === void 0 ? void 0 : (_executionInfo$latest = executionInfo.latestLoadable) === null || _executionInfo$latest === void 0 ? void 0 : _executionInfo$latest.state) === "loading") { + return executionInfo.latestLoadable.contents; } - }); + } + const [loadable, depValues] = evaluateSelectorGetter(store, state, executionId, bypassSelectorDepCacheOnReevaluation); + if (isLatestExecution(store, executionId)) { + updateExecutionInfoDepValues(depValues, store, executionId); + } + maybeFreezeLoadableContents(loadable); + if (loadable.state !== "loading") { + setCache(state, depValuesToDepRoute(depValues), loadable); + setDepsInStore(store, state, new Set(depValues.keys()), executionId); + setLoadableInStoreToNotifyDeps(store, loadable, executionId); + } + if (loadable.state === "hasError") { + throw loadable.contents; + } + if (loadable.state === "hasValue") { + return { + __value: loadable.contents, + __key: key2 + }; + } + return loadable.contents; + }).catch((error) => { + if (!selectorIsLive()) { + clearExecutionInfo(store, executionId); + return CANCELED$2; + } + const loadable = loadableWithError$1(error); + maybeFreezeValue(error); + setCache(state, depValuesToDepRoute(existingDeps), loadableWithError$1(error)); + setDepsInStore(store, state, new Set(existingDeps.keys()), executionId); + setLoadableInStoreToNotifyDeps(store, loadable, executionId); + throw error; }); - if (plugin.settings.spacesCompactMode) { - menu.addItem((menuItem) => { - menuItem.setTitle("Spaces"); - menuItem.onClick((ev) => { - setActiveView("root"); - }); - }); - menu.addItem((menuItem) => { - menuItem.setTitle("Tags"); - menuItem.onClick((ev) => { - setActiveView("tags"); - }); - }); - menu.addSeparator(); - spaces2.filter((f4) => f4.pinned == "true").forEach((space) => { - menu.addItem((menuItem) => { - menuItem.setTitle(space.name); - menuItem.onClick((ev) => { - setActiveView("space"); - setActiveViewSpace(space.name); - }); - }); - }); - menu.addSeparator(); + } + function setLoadableInStoreToNotifyDeps(store, loadable, executionId) { + if (isLatestExecution(store, executionId)) { + setExecutionInfo(loadable, store); + notifyStoresOfSettledAsync(loadable, executionId); } - menu.addItem((menuItem) => { - menuItem.setIcon("plus"); - menuItem.setTitle(i18n_default.menu.newSpace); - menuItem.onClick((ev) => { - newSection(); - }); - }); - menu.addItem((menuItem) => { - menuItem.setIcon("lucide-chevrons-down-up"); - menuItem.setTitle(i18n_default.menu.collapseAllSections); - menuItem.onClick((ev) => { - toggleSections(true); - }); - }); - menu.addItem((menuItem) => { - menuItem.setIcon("lucide-chevrons-up-down"); - menuItem.setTitle(i18n_default.menu.expandAllSections); - menuItem.onClick((ev) => { - toggleSections(false); - }); - }); - menu.addSeparator(); - menu.addItem((menuItem) => { - menuItem.setIcon("eye-off"); - menuItem.setTitle("Manage Hidden Files"); - menuItem.onClick((ev) => { - let vaultChangeModal = new HiddenItemsModal(plugin); - vaultChangeModal.open(); - }); - }); - menu.addSeparator(); - leafs.map( - (l3) => menu.addItem((menuItem) => { - menuItem.setIcon(l3.view.icon); - menuItem.setTitle(l3.getDisplayText()); - menuItem.onClick((ev) => { - plugin.app.workspace.revealLeaf(l3); + } + function setDepsInStore(store, state, deps, executionId) { + var _store$getState, _store$getState$curre, _store$getState2, _store$getState2$next; + if (isLatestExecution(store, executionId) || state.version === ((_store$getState = store.getState()) === null || _store$getState === void 0 ? void 0 : (_store$getState$curre = _store$getState.currentTree) === null || _store$getState$curre === void 0 ? void 0 : _store$getState$curre.version) || state.version === ((_store$getState2 = store.getState()) === null || _store$getState2 === void 0 ? void 0 : (_store$getState2$next = _store$getState2.nextTree) === null || _store$getState2$next === void 0 ? void 0 : _store$getState2$next.version)) { + var _store$getState$nextT, _store$getState3, _store$getState3$next; + saveDependencyMapToStore$1(/* @__PURE__ */ new Map([[key2, deps]]), store, (_store$getState$nextT = (_store$getState3 = store.getState()) === null || _store$getState3 === void 0 ? void 0 : (_store$getState3$next = _store$getState3.nextTree) === null || _store$getState3$next === void 0 ? void 0 : _store$getState3$next.version) !== null && _store$getState$nextT !== void 0 ? _store$getState$nextT : store.getState().currentTree.version); + } + } + function setNewDepInStore(store, state, deps, newDepKey, executionId) { + deps.add(newDepKey); + setDepsInStore(store, state, deps, executionId); + } + function evaluateSelectorGetter(store, state, executionId, bypassSelectorDepCache = false) { + const endPerfBlock = startPerfBlock$1(key2); + let result; + let resultIsError = false; + let loadable; + const depValues = /* @__PURE__ */ new Map(); + const deps = /* @__PURE__ */ new Set(); + setDepsInStore(store, state, deps, executionId); + function getRecoilValue(recoilValue) { + const { + key: depKey + } = recoilValue; + setNewDepInStore(store, state, deps, depKey, executionId); + const depLoadable = bypassSelectorDepCache ? getNodeLoadable$2(store, state, depKey) : getCachedNodeLoadable(store, state, depKey); + maybeFreezeLoadableContents(depLoadable); + depValues.set(depKey, depLoadable); + if (depLoadable.state === "hasValue") { + return depLoadable.contents; + } + throw depLoadable.contents; + } + let gateCallback = false; + const getCallback = (fn2) => { + return (...args) => { + if (!gateCallback) { + throw new Error("getCallback() should only be called asynchronously after the selector is evalutated. It can be used for selectors to return objects with callbacks that can obtain the current Recoil state without a subscription."); + } + const snapshot = cloneSnapshot$2(store); + const cb = fn2({ + snapshot }); - }) - ); - menu.addItem((menuItem) => { - menuItem.setIcon("lucide-settings"); - menuItem.setTitle(i18n_default.menu.obSettings); - menuItem.onClick((ev) => { - plugin.app.commands.commands["app:open-settings"].callback(); - }); - }); - menu.addItem((menuItem) => { - menuItem.setIcon("vault"); - menuItem.setTitle(i18n_default.menu.openVault); - menuItem.onClick((ev) => { - plugin.app.commands.commands["app:open-vault"].callback(); - }); - }); - menu.addSeparator(); - menu.addItem((menuItem) => { - menuItem.setIcon("mk-logo"); - menuItem.setTitle(i18n_default.menu.getHelp); - menuItem.onClick((ev) => { - window.open("https://make.md/community"); - }); - }); - const offset = ref.current.getBoundingClientRect(); - menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); - }; - const currentViewName = activeView2 == "root" ? "Spaces" : activeView2 == "tags" ? "Tags" : activeViewSpace2; - const currentViewIcon = activeView2 == "root" ? uiIconSet["mk-ui-spaces"] : activeView2 == "tags" ? uiIconSet["mk-ui-tags"] : ((_a2 = activeSpace == null ? void 0 : activeSpace.sticker) == null ? void 0 : _a2.length) > 0 ? unifiedToNative(activeSpace.sticker) : activeSpace == null ? void 0 : activeSpace.name.charAt(0); - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-main-menu-container" - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-main-menu-button", - ref, - onClick: (e4) => showMenu(e4) - }, plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: "mk-main-menu-icon", - dangerouslySetInnerHTML: { __html: currentViewIcon } - }), currentViewName) : plugin.app.vault.getName(), /* @__PURE__ */ bn.createElement("div", { - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-expand"] } - }))); -}; - -// src/hooks/ForceUpdate.tsx -function useForceUpdate() { - const [value, setValue] = p2(0); - return () => setValue((value2) => value2 + 1); -} - -// src/components/Spaces/TreeView/FileExplorerVirtualized.tsx -var import_obsidian28 = require("obsidian"); - -// src/components/Spaces/TreeView/FolderTreeView.tsx -var import_obsidian27 = require("obsidian"); -var import_classnames5 = __toESM(require_classnames()); - -// src/components/Spaces/TreeView/SectionView.tsx -var import_obsidian26 = require("obsidian"); -var import_classnames4 = __toESM(require_classnames()); -var SectionItem = k3( - ({ - childCount, - clone, - data, - depth, - disableSelection, - disableInteraction, - ghost, - handleProps, - indentationWidth, - indicator, - collapsed, - style, - onCollapse, - wrapperRef, - plugin, - disabled - }, ref) => { - var _a2, _b2; - const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); - const [spaces2, setSpaces] = Recoil_index_14(spaces); - const space = spaces2.find((f4) => f4.name == data.space); - const newFolderInSection = () => { - var _a3; - let vaultChangeModal = new VaultChangeModal( - plugin, - ((_a3 = space == null ? void 0 : space.def) == null ? void 0 : _a3.length) > 0 ? getFolderFromPath(app, space.def) : defaultNoteFolder(plugin, activeFile2), - "create folder", - data.space - ); - vaultChangeModal.open(); - }; - const newFileInSection = async () => { - var _a3; - const newFile = await createNewMarkdownFile( - plugin.app, - ((_a3 = space == null ? void 0 : space.def) == null ? void 0 : _a3.length) > 0 ? getFolderFromPath(app, space.def) : defaultNoteFolder(plugin, activeFile2), - "" - ); - if (data.space != "/") - addPathsToSpace(plugin, data.space, [newFile.path]); - }; - const triggerMenu = (e4) => { - data.space == "/" ? triggerVaultMenu(e4) : triggerSectionMenu(plugin, data.space, spaces2, e4); - }; - const triggerVaultMenu = (e4) => { - const refreshFileList = () => { - let event = new CustomEvent(eventTypes.vaultChange); - window.dispatchEvent(event); + if (typeof cb !== "function") { + throw new Error("getCallback() expects a function that returns a function."); + } + return cb(...args); }; - const fileMenu = new import_obsidian26.Menu(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Collapse All"); - menuItem.setIcon("lucide-chevrons-down-up"); - menuItem.onClick((ev) => { - plugin.settings.expandedFolders = { - ...plugin.settings.expandedFolders, - "/": [] - }; - plugin.saveSettings(); - }); - }); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Custom Sort"); - menuItem.setChecked(plugin.settings.vaultSort[0] == "rank"); - menuItem.onClick((ev) => { - plugin.settings.vaultSort = ["rank", true]; - plugin.saveSettings(); - refreshFileList(); - }); - }); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("File Name (A to Z)"); - menuItem.setChecked(plugin.settings.vaultSort[0] == "path" && plugin.settings.vaultSort[1] == true); - menuItem.onClick((ev) => { - plugin.settings.vaultSort = ["path", true]; - plugin.saveSettings(); - refreshFileList(); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("File Name (Z to A)"); - menuItem.setChecked(plugin.settings.vaultSort[0] == "path" && plugin.settings.vaultSort[1] == false); - menuItem.onClick((ev) => { - plugin.settings.vaultSort = ["path", false]; - plugin.saveSettings(); - refreshFileList(); - }); - }); - fileMenu.addSeparator(); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Created Time (new to old)"); - menuItem.setChecked(plugin.settings.vaultSort[0] == "created" && plugin.settings.vaultSort[1] == false); - menuItem.onClick((ev) => { - plugin.settings.vaultSort = ["created", false]; - plugin.saveSettings(); - refreshFileList(); - }); - }); - fileMenu.addItem((menuItem) => { - menuItem.setTitle("Created Time (old to new)"); - menuItem.setChecked(plugin.settings.vaultSort[0] == "created" && plugin.settings.vaultSort[1] == true); - menuItem.onClick((ev) => { - plugin.settings.vaultSort = ["created", true]; - plugin.saveSettings(); - refreshFileList(); - }); + }; + try { + result = get({ + get: getRecoilValue, + getCallback }); - if (isMouseEvent(e4)) { - fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + result = isRecoilValue$3(result) ? getRecoilValue(result) : result; + gateCallback = true; + if (Recoil_isPromise(result)) { + result = wrapPendingPromise(store, result, state, depValues, executionId).finally(endPerfBlock); } else { - fileMenu.showAtPosition({ - x: e4.nativeEvent.locationX, - y: e4.nativeEvent.locationY - }); + endPerfBlock(); + } + } catch (errorOrDepPromise) { + result = errorOrDepPromise; + if (Recoil_isPromise(result)) { + result = wrapPendingDependencyPromise(store, result, state, depValues, executionId).finally(endPerfBlock); + } else { + resultIsError = true; + endPerfBlock(); + } + } + if (resultIsError) { + loadable = loadableWithError$1(result); + } else if (Recoil_isPromise(result)) { + loadable = loadableWithPromise$1(result); + } else { + loadable = loadableWithValue$2(result); + } + maybeFreezeLoadableContents(loadable); + return [loadable, depValues]; + } + function getValFromCacheAndUpdatedDownstreamDeps(store, state) { + const depsAfterCacheDone = /* @__PURE__ */ new Set(); + const executionInfo = getExecutionInfo(store); + const cachedVal = cache.get((nodeKey) => { + !(typeof nodeKey === "string") ? true ? Recoil_invariant(false, "Cache nodeKey is type string") : Recoil_invariant(false) : void 0; + const loadable = getCachedNodeLoadable(store, state, nodeKey); + return loadable.contents; + }, { + onNodeVisit: (node) => { + if (node.type === "branch" && node.nodeKey !== key2 && typeof node.nodeKey === "string") { + depsAfterCacheDone.add(node.nodeKey); + } } + }); + if (cachedVal) { + setDepsInStore(store, state, depsAfterCacheDone, executionInfo.latestExecutionId); + } + return cachedVal; + } + function depValuesToDepRoute(depValues) { + return Array.from(depValues.entries()).map(([key3, valLoadable]) => [key3, valLoadable.contents]); + } + function getValFromRunningNewExecutionAndUpdatedDeps(store, state) { + const newExecutionId = getNewExecutionId(); + const [loadable, newDepValues] = evaluateSelectorGetter(store, state, newExecutionId); + setExecutionInfo(loadable, store, newDepValues, newExecutionId, state); + maybeSetCacheWithLoadable(state, depValuesToDepRoute(newDepValues), loadable); + notifyStoreWhenAsyncSettles(store, loadable, newExecutionId); + return loadable; + } + function getSelectorValAndUpdatedDeps(store, state) { + const cachedVal = getValFromCacheAndUpdatedDownstreamDeps(store, state); + if (cachedVal != null) { + setExecutionInfo(cachedVal, store); + return cachedVal; + } + const inProgressExecutionInfo = getExecutionInfoOfInProgressExecution(state); + if (inProgressExecutionInfo) { + const executionInfo = inProgressExecutionInfo; + notifyStoreWhenAsyncSettles(store, Recoil_nullthrows(executionInfo.latestLoadable), Recoil_nullthrows(executionInfo.latestExecutionId)); + return Recoil_nullthrows(executionInfo.latestLoadable); + } + return getValFromRunningNewExecutionAndUpdatedDeps(store, state); + } + function getExecutionInfoOfInProgressExecution(state) { + var _Array$from$find; + const [, executionInfo] = (_Array$from$find = Array.from(executionInfoMap.entries()).find(([store, executionInfo2]) => { + return executionInfo2.latestLoadable != null && executionInfo2.latestExecutionId != null && !haveAsyncDepsChanged(store, state); + })) !== null && _Array$from$find !== void 0 ? _Array$from$find : []; + return executionInfo; + } + const mapOfCheckedVersions = /* @__PURE__ */ new Map(); + function haveAsyncDepsChanged(store, state) { + var _executionInfo$depVal, _mapOfCheckedVersions; + const executionInfo = getExecutionInfo(store); + const oldDepValues = (_executionInfo$depVal = executionInfo.depValuesDiscoveredSoFarDuringAsyncWork) !== null && _executionInfo$depVal !== void 0 ? _executionInfo$depVal : /* @__PURE__ */ new Map(); + const cachedDepValuesCheckedForThisVersion = Array(((_mapOfCheckedVersions = mapOfCheckedVersions.get(state.version)) !== null && _mapOfCheckedVersions !== void 0 ? _mapOfCheckedVersions : /* @__PURE__ */ new Map()).entries()); + const isCachedVersionSame = mapOfCheckedVersions.has(state.version) && cachedDepValuesCheckedForThisVersion.length === oldDepValues.size && cachedDepValuesCheckedForThisVersion.every(([nodeKey, nodeVal]) => { + return oldDepValues.get(nodeKey) === nodeVal; + }); + if (oldDepValues == null || state.version === executionInfo.stateVersion || isCachedVersionSame) { return false; - }; - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames4.default)( - "mk-tree-wrapper", - "mk-section-wrapper", - clone && "mk-clone", - ghost && "mk-ghost", - disableSelection && "mk-disable-selection", - disableInteraction && "mk-disable-interaction" - ), - ref: wrapperRef, - style: { - ...style, - ...indicator ? { "--spacing": `${indentationWidth * depth}px` } : {} + } + mapOfCheckedVersions.set(state.version, new Map(oldDepValues)); + return Array.from(oldDepValues).some(([nodeKey, oldVal]) => { + const loadable = getCachedNodeLoadable(store, state, nodeKey); + return loadable.contents !== oldVal.contents; + }); + } + function setExecutionInfo(loadable, store, depValues, newExecutionId, state) { + const executionInfo = getExecutionInfo(store); + if (loadable.state === "loading") { + executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = depValues; + executionInfo.latestExecutionId = newExecutionId; + executionInfo.latestLoadable = loadable; + executionInfo.stateVersion = state === null || state === void 0 ? void 0 : state.version; + } else { + executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = null; + executionInfo.latestExecutionId = null; + executionInfo.latestLoadable = null; + executionInfo.stateVersion = null; + } + } + function maybeSetCacheWithLoadable(state, depRoute, loadable) { + if (loadable.state !== "loading") { + setCache(state, depRoute, loadable); + } + } + function updateExecutionInfoDepValues(depValues, store, executionId) { + const executionInfo = getExecutionInfo(store); + if (isLatestExecution(store, executionId)) { + executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = depValues; + } + } + function clearExecutionInfo(store, executionId) { + if (isLatestExecution(store, executionId)) { + executionInfoMap.delete(store); + } + } + function isLatestExecution(store, executionId) { + const executionInfo = getExecutionInfo(store); + return executionId === executionInfo.latestExecutionId; + } + function maybeFreezeLoadableContents(loadable) { + if (loadable.state !== "loading") { + maybeFreezeValue(loadable.contents); + } + } + function maybeFreezeValue(val) { + if (true) { + if (Boolean(options.dangerouslyAllowMutability) === false) { + Recoil_deepFreezeValue(val); } - }, /* @__PURE__ */ bn.createElement("div", { - onContextMenu: (e4) => triggerMenu(e4), - className: (0, import_classnames4.default)( - "mk-section", - indicator ? indicator.state == 2 /* Bottom */ ? "mk-indicator-bottom" : indicator.state == 1 /* Top */ ? "mk-indicator-top" : indicator.state == 3 /* Row */ ? "mk-indicator-row" : "" : "" - ) - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-section-title", - onClick: (e4) => onCollapse(data), - ref, - ...handleProps - }, ((_a2 = data.spaceItem) == null ? void 0 : _a2.sticker) ? /* @__PURE__ */ bn.createElement("div", { - dangerouslySetInnerHTML: { __html: unifiedToNative((_b2 = data.spaceItem) == null ? void 0 : _b2.sticker) } - }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), /* @__PURE__ */ bn.createElement("div", { - className: "mk-tree-text" - }, data.id == "/" ? plugin.app.vault.getName() : data.space), /* @__PURE__ */ bn.createElement("div", { - className: `mk-collapse ${collapsed ? "mk-collapsed" : ""}`, - dangerouslySetInnerHTML: { - __html: uiIconSet["mk-ui-collapse-sm"] + } + } + function setCache(state, cacheRoute, loadable) { + state.atomValues.set(key2, loadable); + cache.set(cacheRoute, loadable); + } + function detectCircularDependencies(fn2) { + if (dependencyStack.includes(key2)) { + const message = `Recoil selector has circular dependencies: ${dependencyStack.slice(dependencyStack.indexOf(key2)).join(" \u2192 ")}`; + return loadableWithError$1(new Error(message)); + } + dependencyStack.push(key2); + try { + return fn2(); + } finally { + dependencyStack.pop(); + } + } + function selectorPeek(store, state) { + const cacheVal = cache.get((nodeKey) => { + !(typeof nodeKey === "string") ? true ? Recoil_invariant(false, "Cache nodeKey is type string") : Recoil_invariant(false) : void 0; + const peek = peekNodeLoadable$1(store, state, nodeKey); + return peek === null || peek === void 0 ? void 0 : peek.contents; + }); + return cacheVal; + } + function selectorGet(store, state) { + return detectCircularDependencies(() => getSelectorValAndUpdatedDeps(store, state)); + } + function invalidateSelector(state) { + state.atomValues.delete(key2); + } + if (set != null) { + const selectorSet = (store, state, newValue) => { + let syncSelectorSetFinished = false; + const writes = /* @__PURE__ */ new Map(); + function getRecoilValue({ + key: key3 + }) { + if (syncSelectorSetFinished) { + throw new Error("Recoil: Async selector sets are not currently supported."); + } + const loadable = getCachedNodeLoadable(store, state, key3); + maybeFreezeLoadableContents(loadable); + if (loadable.state === "hasValue") { + return loadable.contents; + } else if (loadable.state === "loading") { + throw new RecoilValueNotReady$2(key3); + } else { + throw loadable.contents; + } } - })), /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-buttons" - }, /* @__PURE__ */ bn.createElement("button", { - "aria-label": i18n_default.buttons.createFolder, - onClick: () => { - newFolderInSection(); - }, - dangerouslySetInnerHTML: { - __html: uiIconSet["mk-ui-new-folder"] + function setRecoilState(recoilState, valueOrUpdater) { + if (syncSelectorSetFinished) { + throw new Error("Recoil: Async selector sets are not currently supported."); + } + const newValue2 = typeof valueOrUpdater === "function" ? valueOrUpdater(getRecoilValue(recoilState)) : valueOrUpdater; + const upstreamWrites = setNodeValue$3(store, state, recoilState.key, newValue2); + upstreamWrites.forEach((v3, k5) => writes.set(k5, v3)); } - }), /* @__PURE__ */ bn.createElement("button", { - "aria-label": i18n_default.buttons.newNote, - onClick: () => { - newFileInSection(); - }, - dangerouslySetInnerHTML: { - __html: uiIconSet["mk-ui-new-note"] + function resetRecoilState(recoilState) { + setRecoilState(recoilState, DEFAULT_VALUE$4); } - }))))); - } -); -SectionItem.displayName = "SectionItem"; - -// src/components/Spaces/TreeView/FolderTreeView.tsx -var animateLayoutChanges2 = ({ - isSorting, - wasDragging -}) => isSorting || wasDragging ? false : true; -var SortableTreeItem = ({ - id: id2, - data, - depth, - disabled, - style, - ...props2 -}) => { - const { - attributes, - isDragging, - isSorting, - listeners, - setDraggableNodeRef, - setDroppableNodeRef, - transform, - transition - } = useSortable({ - id: id2, - animateLayoutChanges: animateLayoutChanges2, - disabled, - data - }); - const memoListeners = F(() => { - return { - ...attributes, - ...listeners + const ret = set({ + set: setRecoilState, + get: getRecoilValue, + reset: resetRecoilState + }, newValue); + if (ret !== void 0) { + throw Recoil_isPromise(ret) ? new Error("Recoil: Async selector sets are not currently supported.") : new Error("Recoil: selector set should be a void function."); + } + syncSelectorSetFinished = true; + return writes; }; - }, [isSorting]); - if (data.parentId == null) { - return /* @__PURE__ */ bn.createElement(SectionItem, { - ref: setDraggableNodeRef, - wrapperRef: setDroppableNodeRef, - data, - depth, - ghost: isDragging, - disableInteraction: isSorting, - disabled, - style, - handleProps: memoListeners, - ...props2 + return registerNode$1({ + key: key2, + nodeType: "selector", + peek: selectorPeek, + get: selectorGet, + set: selectorSet, + init: selectorInit, + invalidate: invalidateSelector, + shouldDeleteConfigOnRelease: selectorShouldDeleteConfigOnRelease, + dangerouslyAllowMutability: options.dangerouslyAllowMutability, + shouldRestoreFromSnapshots: false, + retainedBy }); } else { - return /* @__PURE__ */ bn.createElement(TreeItem, { - ref: setDraggableNodeRef, - wrapperRef: setDroppableNodeRef, - data, - depth, - ghost: isDragging, - disableInteraction: isSorting, - disabled, - style, - handleProps: memoListeners, - ...props2 + return registerNode$1({ + key: key2, + nodeType: "selector", + peek: selectorPeek, + get: selectorGet, + init: selectorInit, + invalidate: invalidateSelector, + shouldDeleteConfigOnRelease: selectorShouldDeleteConfigOnRelease, + dangerouslyAllowMutability: options.dangerouslyAllowMutability, + shouldRestoreFromSnapshots: false, + retainedBy }); } -}; -var TreeItem = k3( - ({ - childCount, - clone, - data, - depth, - disableSelection, - disableInteraction, - ghost, - handleProps, - active, - indentationWidth, - indicator, - collapsed, - selected, - onCollapse, - onSelectRange, - wrapperRef, - style, - plugin, - disabled - }, ref) => { - var _a2; - const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); - const [selectedFiles2, setSelectedFiles] = Recoil_index_14(selectedFiles); - const openFileAtTarget = (file, e4) => { - if (e4.shiftKey) { - onSelectRange(file.id); - return; - } - openAFile(getAbstractFileAtPath(app, file.item.path), plugin.app, e4.ctrlKey || e4.metaKey); - setActiveFile(file.item.path); - setSelectedFiles([file]); +} +var Recoil_selector = selector; +var { + loadableWithError: loadableWithError$2, + loadableWithPromise: loadableWithPromise$2, + loadableWithValue: loadableWithValue$3 +} = Recoil_Loadable; +var { + DEFAULT_VALUE: DEFAULT_VALUE$5, + DefaultValue: DefaultValue$2, + getConfigDeletionHandler: getConfigDeletionHandler$2, + registerNode: registerNode$2, + setConfigDeletionHandler: setConfigDeletionHandler$1 +} = Recoil_Node; +var { + isRecoilValue: isRecoilValue$4 +} = Recoil_RecoilValue$1; +var { + markRecoilValueModified: markRecoilValueModified$1, + setRecoilValue: setRecoilValue$3, + setRecoilValueLoadable: setRecoilValueLoadable$3 +} = Recoil_RecoilValueInterface; +var { + retainedByOptionWithDefault: retainedByOptionWithDefault$2 +} = Recoil_Retention; +function baseAtom(options) { + const { + key: key2, + persistence_UNSTABLE: persistence + } = options; + const retainedBy = retainedByOptionWithDefault$2(options.retainedBy_UNSTABLE); + let liveStoresCount = 0; + let defaultLoadable = Recoil_isPromise(options.default) ? loadableWithPromise$2(options.default.then((value) => { + defaultLoadable = loadableWithValue$3(value); + const promiseInfo = { + __key: key2, + __value: value }; - const dragStarted = (e4) => { - if (selectedFiles2.length > 1) { - const files = selectedFiles2.map((f4) => f4.file).filter((f4) => f4); - app.dragManager.onDragStart(e4, { - icon: "lucide-files", - source: void 0, - title: files.length + " Files", - type: "files", - files - }); - app.dragManager.dragFiles(e4, files, true); - return; + return promiseInfo; + }).catch((error) => { + defaultLoadable = loadableWithError$2(error); + throw error; + })) : loadableWithValue$3(options.default); + let cachedAnswerForUnvalidatedValue = void 0; + const cleanupEffectsByStore = /* @__PURE__ */ new Map(); + function wrapPendingPromise(store, promise) { + const wrappedPromise = promise.then((value) => { + var _store$getState$nextT, _state$atomValues$get; + const state = (_store$getState$nextT = store.getState().nextTree) !== null && _store$getState$nextT !== void 0 ? _store$getState$nextT : store.getState().currentTree; + if (((_state$atomValues$get = state.atomValues.get(key2)) === null || _state$atomValues$get === void 0 ? void 0 : _state$atomValues$get.contents) === wrappedPromise) { + setRecoilValue$3(store, node, value); } - const file = getAbstractFileAtPath(app, data.item.path); - if (file instanceof import_obsidian27.TFolder) { - app.dragManager.onDragStart(e4, { - icon: "lucide-folder", - source: void 0, - title: file.name, - type: "folder", - file + return { + __key: key2, + __value: value + }; + }).catch((error) => { + var _store$getState$nextT2, _state$atomValues$get2; + const state = (_store$getState$nextT2 = store.getState().nextTree) !== null && _store$getState$nextT2 !== void 0 ? _store$getState$nextT2 : store.getState().currentTree; + if (((_state$atomValues$get2 = state.atomValues.get(key2)) === null || _state$atomValues$get2 === void 0 ? void 0 : _state$atomValues$get2.contents) === wrappedPromise) { + setRecoilValueLoadable$3(store, node, loadableWithError$2(error)); + } + throw error; + }); + return wrappedPromise; + } + function initAtom(store, initState, trigger) { + liveStoresCount++; + const alreadyKnown = store.getState().knownAtoms.has(key2); + store.getState().knownAtoms.add(key2); + if (defaultLoadable.state === "loading") { + const notifyDefaultSubscribers = () => { + var _store$getState$nextT3; + const state = (_store$getState$nextT3 = store.getState().nextTree) !== null && _store$getState$nextT3 !== void 0 ? _store$getState$nextT3 : store.getState().currentTree; + if (!state.atomValues.has(key2)) { + markRecoilValueModified$1(store, node); + } + }; + defaultLoadable.contents.then(notifyDefaultSubscribers).catch(notifyDefaultSubscribers); + } + let initValue = DEFAULT_VALUE$5; + let pendingSetSelf = null; + if (options.effects_UNSTABLE != null && !alreadyKnown) { + let duringInit = true; + const setSelf = (effect) => (valueOrUpdater) => { + if (duringInit) { + const currentValue = initValue instanceof DefaultValue$2 || Recoil_isPromise(initValue) ? defaultLoadable.state === "hasValue" ? defaultLoadable.contents : DEFAULT_VALUE$5 : initValue; + initValue = typeof valueOrUpdater === "function" ? valueOrUpdater(currentValue) : valueOrUpdater; + if (Recoil_isPromise(initValue)) { + initValue = initValue.then((value) => { + pendingSetSelf = { + effect, + value + }; + return value; + }); + } + } else { + if (Recoil_isPromise(valueOrUpdater)) { + throw new Error("Setting atoms to async values is not implemented."); + } + if (typeof valueOrUpdater !== "function") { + pendingSetSelf = { + effect, + value: valueOrUpdater + }; + } + setRecoilValue$3(store, node, typeof valueOrUpdater === "function" ? (currentValue) => { + const newValue = valueOrUpdater(currentValue); + pendingSetSelf = { + effect, + value: newValue + }; + return newValue; + } : valueOrUpdater); + } + }; + const resetSelf = (effect) => () => setSelf(effect)(DEFAULT_VALUE$5); + const onSet = (effect) => (handler) => { + store.subscribeToTransactions((currentStore) => { + var _currentTree$atomValu; + let { + currentTree, + previousTree + } = currentStore.getState(); + if (!previousTree) { + Recoil_recoverableViolation("Transaction subscribers notified without a next tree being present -- this is a bug in Recoil"); + previousTree = currentTree; + } + const newLoadable = (_currentTree$atomValu = currentTree.atomValues.get(key2)) !== null && _currentTree$atomValu !== void 0 ? _currentTree$atomValu : defaultLoadable; + if (newLoadable.state === "hasValue") { + var _previousTree$atomVal, _pendingSetSelf, _pendingSetSelf2, _pendingSetSelf3; + const newValue = newLoadable.contents; + const oldLoadable = (_previousTree$atomVal = previousTree.atomValues.get(key2)) !== null && _previousTree$atomVal !== void 0 ? _previousTree$atomVal : defaultLoadable; + const oldValue = oldLoadable.state === "hasValue" ? oldLoadable.contents : DEFAULT_VALUE$5; + if (((_pendingSetSelf = pendingSetSelf) === null || _pendingSetSelf === void 0 ? void 0 : _pendingSetSelf.effect) !== effect || ((_pendingSetSelf2 = pendingSetSelf) === null || _pendingSetSelf2 === void 0 ? void 0 : _pendingSetSelf2.value) !== newValue) { + handler(newValue, oldValue); + } else if (((_pendingSetSelf3 = pendingSetSelf) === null || _pendingSetSelf3 === void 0 ? void 0 : _pendingSetSelf3.effect) === effect) { + pendingSetSelf = null; + } + } + }, key2); + }; + for (const effect of (_options$effects_UNST = options.effects_UNSTABLE) !== null && _options$effects_UNST !== void 0 ? _options$effects_UNST : []) { + var _options$effects_UNST; + const cleanup = effect({ + node, + trigger, + setSelf: setSelf(effect), + resetSelf: resetSelf(effect), + onSet: onSet(effect) }); - app.dragManager.dragFolder(e4, file, true); - return; + if (cleanup != null) { + var _cleanupEffectsByStor; + cleanupEffectsByStore.set(store, [...(_cleanupEffectsByStor = cleanupEffectsByStore.get(store)) !== null && _cleanupEffectsByStor !== void 0 ? _cleanupEffectsByStor : [], cleanup]); + } } - app.dragManager.onDragStart(e4, { - icon: "lucide-file", - source: void 0, - title: file.name, - type: "file", - file - }); - app.dragManager.dragFile(e4, file, true); + duringInit = false; + } + if (!(initValue instanceof DefaultValue$2)) { + var _store$getState$nextT4; + const initLoadable = Recoil_isPromise(initValue) ? loadableWithPromise$2(wrapPendingPromise(store, initValue)) : loadableWithValue$3(initValue); + initState.atomValues.set(key2, initLoadable); + (_store$getState$nextT4 = store.getState().nextTree) === null || _store$getState$nextT4 === void 0 ? void 0 : _store$getState$nextT4.atomValues.set(key2, initLoadable); + } + return () => { + var _cleanupEffectsByStor2; + liveStoresCount--; + (_cleanupEffectsByStor2 = cleanupEffectsByStore.get(store)) === null || _cleanupEffectsByStor2 === void 0 ? void 0 : _cleanupEffectsByStor2.forEach((cleanup) => cleanup()); + cleanupEffectsByStore.delete(store); + store.getState().knownAtoms.delete(key2); }; - const innerProps = !platformIsMobile() ? { - draggable: true, - onDragStart: dragStarted - } : handleProps; - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames5.default)( - "mk-tree-wrapper", - clone && "mk-clone", - ghost && "mk-ghost", - disableSelection && "mk-disable-selection", - disableInteraction && "mk-disable-interaction" - ), - ref: wrapperRef, - style - }, /* @__PURE__ */ bn.createElement("div", { - className: indicator && (0, import_classnames5.default)( - "nav-file", - indicator.state == 2 /* Bottom */ ? "mk-indicator-bottom" : indicator.state == 1 /* Top */ ? "mk-indicator-top" : indicator.state == 3 /* Row */ ? "mk-indicator-row" : "" - ), - style: indicator ? { - "--spacing": `${indentationWidth * indicator.depth}px` - } : {} - }, !platformIsMobile() && /* @__PURE__ */ bn.createElement("div", { - className: "mk-drag-handle", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-handle"] }, - ...handleProps - }), /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames5.default)( - `mk-tree-item ${data.item.folder == "true" ? "nav-folder-title" : "nav-file-title"} ${active && "is-active"} ${selected && "is-selected"}` - ), - ref, - style: { - "--spacing": `${indentationWidth * depth - 28}px` - }, - onClick: (e4) => openFileAtTarget(data, e4), - "data-path": data.item.path, - onContextMenu: (e4) => selectedFiles2.length > 1 && selectedFiles2.some((f4) => f4.id == data.id) ? triggerMultiFileMenu(plugin, selectedFiles2, e4) : triggerFileMenu(plugin, data.file, data.item.folder == "true", e4), - ...innerProps - }, data.item.folder == "true" && /* @__PURE__ */ bn.createElement("button", { - "aria-label": `${collapsed ? i18n_default.labels.expand : i18n_default.labels.collapse}`, - className: `mk-collapse ${collapsed ? "mk-collapsed" : ""}`, - onClick: (e4) => { - onCollapse(data); - e4.stopPropagation(); - }, - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse"] } - }), plugin.settings.spacesStickers && /* @__PURE__ */ bn.createElement(FileSticker, { - plugin, - filePath: data.item.path - }), /* @__PURE__ */ bn.createElement("div", { - className: `mk-tree-text ${data.item.folder == "true" ? "nav-folder-title-content" : "nav-file-title-content"}` - }, data.file ? data.item.folder == "true" ? data.file.name : fileNameToString(data.file.name) : "", data.item.folder == "false" && data.file && data.file.extension != "md" && /* @__PURE__ */ bn.createElement("span", { - className: "nav-file-tag" - }, (_a2 = data.file) == null ? void 0 : _a2.extension)), !clone ? /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-buttons" - }, /* @__PURE__ */ bn.createElement("button", { - "aria-label": i18n_default.buttons.moreOptions, - onClick: (e4) => { - triggerFileMenu(plugin, data.file, data.item.folder == "true", e4); - e4.stopPropagation(); - }, - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-options"] } - }), data.item.folder == "true" && /* @__PURE__ */ bn.createElement("button", { - "aria-label": i18n_default.buttons.newNote, - onClick: (e4) => { - newFileInFolder(plugin, data.file); - e4.stopPropagation(); - }, - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-plus"] } - })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null))))); - } -); -TreeItem.displayName = "TreeItem"; - -// src/utils/ui/dnd.ts -function getMaxDepth({ previousItem }) { - var _a2; - if (previousItem) { - if (((_a2 = previousItem.item) == null ? void 0 : _a2.folder) == "true") - return previousItem.depth + 1; - return previousItem.depth; } - return 0; -} -function getMinDepth({ nextItem }) { - if (nextItem) { - return nextItem.depth; + function peekAtom(_store, state) { + var _ref, _state$atomValues$get3, _cachedAnswerForUnval; + return (_ref = (_state$atomValues$get3 = state.atomValues.get(key2)) !== null && _state$atomValues$get3 !== void 0 ? _state$atomValues$get3 : (_cachedAnswerForUnval = cachedAnswerForUnvalidatedValue) === null || _cachedAnswerForUnval === void 0 ? void 0 : _cachedAnswerForUnval[1]) !== null && _ref !== void 0 ? _ref : defaultLoadable; } - return 0; -} -function getDragDepth(offset, indentationWidth) { - return Math.round(offset / indentationWidth) + 1; -} -function getProjection(items, activeItem, overItemIndex, previousItem, nextItem, dragDepth) { - const activeIsSection = activeItem.parentId == null; - const overIsSection = previousItem.parentId == null; - if (activeIsSection) { - if (overIsSection) { - return { depth: 0, maxDepth: 0, minDepth: 0, overId: previousItem.id, parentId: null }; + function getAtom(_store, state) { + if (state.atomValues.has(key2)) { + return Recoil_nullthrows(state.atomValues.get(key2)); + } else if (state.nonvalidatedAtoms.has(key2)) { + if (cachedAnswerForUnvalidatedValue != null) { + return cachedAnswerForUnvalidatedValue; + } + if (persistence == null) { + Recoil_expectationViolation(`Tried to restore a persisted value for atom ${key2} but it has no persistence settings.`); + return defaultLoadable; + } + const nonvalidatedValue = state.nonvalidatedAtoms.get(key2); + const validatorResult = persistence.validator(nonvalidatedValue, DEFAULT_VALUE$5); + const validatedValueLoadable = validatorResult instanceof DefaultValue$2 ? defaultLoadable : loadableWithValue$3(validatorResult); + cachedAnswerForUnvalidatedValue = validatedValueLoadable; + return cachedAnswerForUnvalidatedValue; + } else { + return defaultLoadable; } - return null; } - if (nodeIsAncestorOfTarget(activeItem, previousItem)) { - return null; + function invalidateAtom() { + cachedAnswerForUnvalidatedValue = void 0; } - if (activeItem.space != previousItem.space) { - if (previousItem.space == "/") { - return null; + function setAtom(_store, state, newValue) { + if (state.atomValues.has(key2)) { + const existing = Recoil_nullthrows(state.atomValues.get(key2)); + if (existing.state === "hasValue" && newValue === existing.contents) { + return /* @__PURE__ */ new Map(); + } + } else if (!state.nonvalidatedAtoms.has(key2) && newValue instanceof DefaultValue$2) { + return /* @__PURE__ */ new Map(); + } + if (true) { + if (options.dangerouslyAllowMutability !== true) { + Recoil_deepFreezeValue(newValue); + } } + cachedAnswerForUnvalidatedValue = void 0; + return (/* @__PURE__ */ new Map()).set(key2, loadableWithValue$3(newValue)); + } + function shouldDeleteConfigOnReleaseAtom() { + return getConfigDeletionHandler$2(key2) !== void 0 && liveStoresCount <= 0; + } + const node = registerNode$2({ + key: key2, + nodeType: "atom", + peek: peekAtom, + get: getAtom, + set: setAtom, + init: initAtom, + invalidate: invalidateAtom, + shouldDeleteConfigOnRelease: shouldDeleteConfigOnReleaseAtom, + dangerouslyAllowMutability: options.dangerouslyAllowMutability, + persistence_UNSTABLE: options.persistence_UNSTABLE ? { + type: options.persistence_UNSTABLE.type, + backButton: options.persistence_UNSTABLE.backButton + } : void 0, + shouldRestoreFromSnapshots: true, + retainedBy + }); + return node; +} +function atom(options) { + const { + default: optionsDefault, + ...restOptions + } = options; + if (isRecoilValue$4(optionsDefault)) { + return atomWithFallback({ + ...restOptions, + default: optionsDefault + }); + } else { + return baseAtom({ + ...restOptions, + default: optionsDefault + }); } - const projectedDepth = dragDepth; - const maxDepth = getMaxDepth({ - previousItem +} +function atomWithFallback(options) { + const base = atom({ + ...options, + default: DEFAULT_VALUE$5, + persistence_UNSTABLE: options.persistence_UNSTABLE === void 0 ? void 0 : { + ...options.persistence_UNSTABLE, + validator: (storedValue) => storedValue instanceof DefaultValue$2 ? storedValue : Recoil_nullthrows(options.persistence_UNSTABLE).validator(storedValue, DEFAULT_VALUE$5) + }, + effects_UNSTABLE: options.effects_UNSTABLE }); - const minDepth = getMinDepth({ nextItem }); - let depth = projectedDepth; - if (projectedDepth >= maxDepth) { - depth = maxDepth; - } else if (projectedDepth < minDepth) { - depth = minDepth; + const sel = Recoil_selector({ + key: `${options.key}__withFallback`, + get: ({ + get + }) => { + const baseValue = get(base); + return baseValue instanceof DefaultValue$2 ? options.default : baseValue; + }, + set: ({ + set + }, newValue) => set(base, newValue), + dangerouslyAllowMutability: options.dangerouslyAllowMutability + }); + setConfigDeletionHandler$1(sel.key, getConfigDeletionHandler$2(options.key)); + return sel; +} +var Recoil_atom = atom; +var MapCache = class { + constructor(options) { + var _options$mapKey; + _defineProperty(this, "_map", void 0); + _defineProperty(this, "_keyMapper", void 0); + this._map = /* @__PURE__ */ new Map(); + this._keyMapper = (_options$mapKey = options === null || options === void 0 ? void 0 : options.mapKey) !== null && _options$mapKey !== void 0 ? _options$mapKey : (v3) => v3; } - if (previousItem.space != "/" && depth > 1) { - return null; + size() { + return this._map.size; } - if (depth <= activeItem.depth && activeItem.space == previousItem.space) { - if (!activeItem.sortable || !previousItem.sortable) { - return null; - } + has(key2) { + return this._map.has(this._keyMapper(key2)); } - return { depth, maxDepth, minDepth, overId: previousItem.id, parentId: getParentId() }; - function getParentId() { - var _a2, _b2; - if (depth === 0) { - return previousItem.space == "/" ? "/" : previousItem.space + "//"; - } - if (!previousItem) { - return "/"; - } - if (depth === previousItem.depth || depth > previousItem.depth && ((_a2 = previousItem.item) == null ? void 0 : _a2.folder) != "true") { - return previousItem.parentId; - } - if (depth > previousItem.depth) { - return previousItem.id; - } - const newParent = (_b2 = items.slice(0, overItemIndex).reverse().find((item) => item.depth === depth)) == null ? void 0 : _b2.parentId; - return newParent != null ? newParent : null; + get(key2) { + return this._map.get(this._keyMapper(key2)); } -} - -// node_modules/@tanstack/react-virtual/build/esm/index.js -function _extends() { - _extends = Object.assign || function(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4]; - for (var key2 in source) { - if (Object.prototype.hasOwnProperty.call(source, key2)) { - target[key2] = source[key2]; - } - } - } - return target; - }; - return _extends.apply(this, arguments); -} -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) - return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key2, i4; - for (i4 = 0; i4 < sourceKeys.length; i4++) { - key2 = sourceKeys[i4]; - if (excluded.indexOf(key2) >= 0) - continue; - target[key2] = source[key2]; + set(key2, val) { + this._map.set(this._keyMapper(key2), val); } - return target; -} -var props = ["bottom", "height", "left", "right", "top", "width"]; -var rectChanged = function rectChanged2(a5, b4) { - if (a5 === void 0) { - a5 = {}; + delete(key2) { + this._map.delete(this._keyMapper(key2)); } - if (b4 === void 0) { - b4 = {}; + clear() { + this._map.clear(); } - return props.some(function(prop) { - return a5[prop] !== b4[prop]; - }); }; -var observedNodes = /* @__PURE__ */ new Map(); -var rafId; -var run = function run2() { - var changedStates = []; - observedNodes.forEach(function(state, node) { - var newRect = node.getBoundingClientRect(); - if (rectChanged(newRect, state.rect)) { - state.rect = newRect; - changedStates.push(state); - } - }); - changedStates.forEach(function(state) { - state.callbacks.forEach(function(cb) { - return cb(state.rect); - }); - }); - rafId = window.requestAnimationFrame(run2); +var Recoil_MapCache = { + MapCache }; -function observeRect(node, cb) { - return { - observe: function observe() { - var wasEmpty = observedNodes.size === 0; - if (observedNodes.has(node)) { - observedNodes.get(node).callbacks.push(cb); - } else { - observedNodes.set(node, { - rect: void 0, - hasRectChanged: false, - callbacks: [cb] - }); - } - if (wasEmpty) - run(); - }, - unobserve: function unobserve() { - var state = observedNodes.get(node); - if (state) { - var index = state.callbacks.indexOf(cb); - if (index >= 0) - state.callbacks.splice(index, 1); - if (!state.callbacks.length) - observedNodes["delete"](node); - if (!observedNodes.size) - cancelAnimationFrame(rafId); - } - } - }; +var Recoil_MapCache_1 = Recoil_MapCache.MapCache; +var Recoil_MapCache$1 = /* @__PURE__ */ Object.freeze({ + __proto__: null, + MapCache: Recoil_MapCache_1 +}); +var { + LRUCache: LRUCache$2 +} = Recoil_LRUCache$1; +var { + MapCache: MapCache$1 +} = Recoil_MapCache$1; +var defaultPolicy$1 = { + equality: "reference", + eviction: "none", + maxSize: Infinity +}; +function cacheFromPolicy({ + equality = defaultPolicy$1.equality, + eviction = defaultPolicy$1.eviction, + maxSize = defaultPolicy$1.maxSize +} = defaultPolicy$1) { + const valueMapper = getValueMapper$1(equality); + const cache = getCache(eviction, maxSize, valueMapper); + return cache; } -var useIsomorphicLayoutEffect3 = typeof window !== "undefined" ? s2 : h2; -function rectReducer(state, action) { - var rect = action.rect; - if (state.height !== rect.height || state.width !== rect.width) { - return rect; +function getValueMapper$1(equality) { + switch (equality) { + case "reference": + return (val) => val; + case "value": + return (val) => Recoil_stableStringify(val); } - return state; + throw new Error(`Unrecognized equality policy ${equality}`); } -var useRect2 = function useRect3(nodeRef, initialRect) { - if (initialRect === void 0) { - initialRect = { - width: 0, - height: 0 - }; - } - var _React$useState = bn.useState(nodeRef.current), element = _React$useState[0], setElement = _React$useState[1]; - var _React$useReducer = bn.useReducer(rectReducer, initialRect), rect = _React$useReducer[0], dispatch = _React$useReducer[1]; - var initialRectSet = bn.useRef(false); - useIsomorphicLayoutEffect3(function() { - if (nodeRef.current !== element) { - setElement(nodeRef.current); - } - }); - useIsomorphicLayoutEffect3(function() { - if (element && !initialRectSet.current) { - initialRectSet.current = true; - var _rect = element.getBoundingClientRect(); - dispatch({ - rect: _rect +function getCache(eviction, maxSize, mapKey) { + switch (eviction) { + case "keep-all": + return new MapCache$1({ + mapKey }); - } - }, [element]); - bn.useEffect(function() { - if (!element) { - return; - } - var observer = observeRect(element, function(rect2) { - dispatch({ - rect: rect2 + case "lru": + return new LRUCache$2({ + mapKey, + maxSize: Recoil_nullthrows(maxSize) + }); + case "most-recent": + return new LRUCache$2({ + mapKey, + maxSize: 1 }); - }); - observer.observe(); - return function() { - observer.unobserve(); - }; - }, [element]); - return rect; -}; -var _excluded = ["align"]; -var defaultEstimateSize = function defaultEstimateSize2() { - return 50; -}; -var defaultKeyExtractor = function defaultKeyExtractor2(index) { - return index; -}; -var defaultMeasureSize = function defaultMeasureSize2(el, horizontal) { - var key2 = horizontal ? "offsetWidth" : "offsetHeight"; - return el[key2]; -}; -var defaultRangeExtractor = function defaultRangeExtractor2(range) { - var start = Math.max(range.start - range.overscan, 0); - var end = Math.min(range.end + range.overscan, range.size - 1); - var arr = []; - for (var _i = start; _i <= end; _i++) { - arr.push(_i); } - return arr; -}; -var useVirtual = function useVirtual2(_ref) { - var _measurements; - var _ref$size = _ref.size, size2 = _ref$size === void 0 ? 0 : _ref$size, _ref$estimateSize = _ref.estimateSize, estimateSize = _ref$estimateSize === void 0 ? defaultEstimateSize : _ref$estimateSize, _ref$overscan = _ref.overscan, overscan = _ref$overscan === void 0 ? 1 : _ref$overscan, _ref$paddingStart = _ref.paddingStart, paddingStart = _ref$paddingStart === void 0 ? 0 : _ref$paddingStart, _ref$paddingEnd = _ref.paddingEnd, paddingEnd = _ref$paddingEnd === void 0 ? 0 : _ref$paddingEnd, parentRef = _ref.parentRef, _ref$horizontal = _ref.horizontal, horizontal = _ref$horizontal === void 0 ? false : _ref$horizontal, scrollToFn = _ref.scrollToFn, useObserver = _ref.useObserver, initialRect = _ref.initialRect, onScrollElement = _ref.onScrollElement, scrollOffsetFn = _ref.scrollOffsetFn, _ref$keyExtractor = _ref.keyExtractor, keyExtractor = _ref$keyExtractor === void 0 ? defaultKeyExtractor : _ref$keyExtractor, _ref$measureSize = _ref.measureSize, measureSize = _ref$measureSize === void 0 ? defaultMeasureSize : _ref$measureSize, _ref$rangeExtractor = _ref.rangeExtractor, rangeExtractor = _ref$rangeExtractor === void 0 ? defaultRangeExtractor : _ref$rangeExtractor; - var sizeKey = horizontal ? "width" : "height"; - var scrollKey = horizontal ? "scrollLeft" : "scrollTop"; - var latestRef = _2({ - outerSize: 0, - scrollOffset: 0, - measurements: [], - totalSize: 0 + throw new Error(`Unrecognized eviction policy ${eviction}`); +} +var Recoil_cacheFromPolicy = cacheFromPolicy; +var { + setConfigDeletionHandler: setConfigDeletionHandler$2 +} = Recoil_Node; +function atomFamily(options) { + var _options$cachePolicyF, _options$cachePolicyF2; + const atomCache = Recoil_cacheFromPolicy({ + equality: (_options$cachePolicyF = (_options$cachePolicyF2 = options.cachePolicyForParams_UNSTABLE) === null || _options$cachePolicyF2 === void 0 ? void 0 : _options$cachePolicyF2.equality) !== null && _options$cachePolicyF !== void 0 ? _options$cachePolicyF : "value", + eviction: "keep-all" }); - var _React$useState = p2(0), scrollOffset = _React$useState[0], setScrollOffset = _React$useState[1]; - latestRef.current.scrollOffset = scrollOffset; - var useMeasureParent = useObserver || useRect2; - var _useMeasureParent = useMeasureParent(parentRef, initialRect), outerSize = _useMeasureParent[sizeKey]; - latestRef.current.outerSize = outerSize; - var defaultScrollToFn = T2(function(offset) { - if (parentRef.current) { - parentRef.current[scrollKey] = offset; - } - }, [parentRef, scrollKey]); - var resolvedScrollToFn = scrollToFn || defaultScrollToFn; - var scrollTo = T2(function(offset) { - resolvedScrollToFn(offset, defaultScrollToFn); - }, [defaultScrollToFn, resolvedScrollToFn]); - var _React$useState2 = p2({}), measuredCache = _React$useState2[0], setMeasuredCache = _React$useState2[1]; - var measure = T2(function() { - return setMeasuredCache({}); - }, []); - var pendingMeasuredCacheIndexesRef = _2([]); - var measurements = F(function() { - var min3 = pendingMeasuredCacheIndexesRef.current.length > 0 ? Math.min.apply(Math, pendingMeasuredCacheIndexesRef.current) : 0; - pendingMeasuredCacheIndexesRef.current = []; - var measurements2 = latestRef.current.measurements.slice(0, min3); - for (var _i2 = min3; _i2 < size2; _i2++) { - var key2 = keyExtractor(_i2); - var measuredSize = measuredCache[key2]; - var _start = measurements2[_i2 - 1] ? measurements2[_i2 - 1].end : paddingStart; - var _size = typeof measuredSize === "number" ? measuredSize : estimateSize(_i2); - var _end = _start + _size; - measurements2[_i2] = { - index: _i2, - start: _start, - size: _size, - end: _end, - key: key2 - }; - } - return measurements2; - }, [estimateSize, measuredCache, paddingStart, size2, keyExtractor]); - var totalSize = (((_measurements = measurements[size2 - 1]) == null ? void 0 : _measurements.end) || paddingStart) + paddingEnd; - latestRef.current.measurements = measurements; - latestRef.current.totalSize = totalSize; - var element = onScrollElement ? onScrollElement.current : parentRef.current; - var scrollOffsetFnRef = _2(scrollOffsetFn); - scrollOffsetFnRef.current = scrollOffsetFn; - useIsomorphicLayoutEffect3(function() { - if (!element) { - setScrollOffset(0); - return; + return (params) => { + var _stableStringify; + const cachedAtom = atomCache.get(params); + if (cachedAtom != null) { + return cachedAtom; } - var onScroll = function onScroll2(event) { - var offset = scrollOffsetFnRef.current ? scrollOffsetFnRef.current(event) : element[scrollKey]; - setScrollOffset(offset); - }; - onScroll(); - element.addEventListener("scroll", onScroll, { - capture: false, - passive: true - }); - return function() { - element.removeEventListener("scroll", onScroll); - }; - }, [element, scrollKey]); - var _calculateRange = calculateRange(latestRef.current), start = _calculateRange.start, end = _calculateRange.end; - var indexes = F(function() { - return rangeExtractor({ - start, - end, - overscan, - size: measurements.length + const { + cachePolicyForParams_UNSTABLE, + ...atomOptions + } = options; + const newAtom = Recoil_atom({ + ...atomOptions, + key: `${options.key}__${(_stableStringify = Recoil_stableStringify(params)) !== null && _stableStringify !== void 0 ? _stableStringify : "void"}`, + default: typeof options.default === "function" ? options.default(params) : options.default, + retainedBy_UNSTABLE: typeof options.retainedBy_UNSTABLE === "function" ? options.retainedBy_UNSTABLE(params) : options.retainedBy_UNSTABLE, + effects_UNSTABLE: typeof options.effects_UNSTABLE === "function" ? options.effects_UNSTABLE(params) : options.effects_UNSTABLE }); - }, [start, end, overscan, measurements.length, rangeExtractor]); - var measureSizeRef = _2(measureSize); - measureSizeRef.current = measureSize; - var virtualItems = F(function() { - var virtualItems2 = []; - var _loop = function _loop2(k6, len2) { - var i4 = indexes[k6]; - var measurement = measurements[i4]; - var item = _extends({}, measurement, { - measureRef: function measureRef(el) { - if (el) { - var measuredSize = measureSizeRef.current(el, horizontal); - if (measuredSize !== item.size) { - var _scrollOffset = latestRef.current.scrollOffset; - if (item.start < _scrollOffset) { - defaultScrollToFn(_scrollOffset + (measuredSize - item.size)); - } - pendingMeasuredCacheIndexesRef.current.push(i4); - setMeasuredCache(function(old) { - var _extends2; - return _extends({}, old, (_extends2 = {}, _extends2[item.key] = measuredSize, _extends2)); - }); - } - } - } - }); - virtualItems2.push(item); - }; - for (var k5 = 0, len = indexes.length; k5 < len; k5++) { - _loop(k5); - } - return virtualItems2; - }, [indexes, defaultScrollToFn, horizontal, measurements]); - var mountedRef = _2(false); - useIsomorphicLayoutEffect3(function() { - if (mountedRef.current) { - setMeasuredCache({}); - } - mountedRef.current = true; - }, [estimateSize]); - var scrollToOffset = T2(function(toOffset, _temp) { - var _ref2 = _temp === void 0 ? { - align: "start" - } : _temp, align = _ref2.align; - var _latestRef$current = latestRef.current, scrollOffset2 = _latestRef$current.scrollOffset, outerSize2 = _latestRef$current.outerSize; - if (align === "auto") { - if (toOffset <= scrollOffset2) { - align = "start"; - } else if (toOffset >= scrollOffset2 + outerSize2) { - align = "end"; - } else { - align = "start"; - } - } - if (align === "start") { - scrollTo(toOffset); - } else if (align === "end") { - scrollTo(toOffset - outerSize2); - } else if (align === "center") { - scrollTo(toOffset - outerSize2 / 2); - } - }, [scrollTo]); - var tryScrollToIndex = T2(function(index, _temp2) { - var _ref3 = _temp2 === void 0 ? { - align: "auto" - } : _temp2, align = _ref3.align, rest = _objectWithoutPropertiesLoose(_ref3, _excluded); - var _latestRef$current2 = latestRef.current, measurements2 = _latestRef$current2.measurements, scrollOffset2 = _latestRef$current2.scrollOffset, outerSize2 = _latestRef$current2.outerSize; - var measurement = measurements2[Math.max(0, Math.min(index, size2 - 1))]; - if (!measurement) { - return; - } - if (align === "auto") { - if (measurement.end >= scrollOffset2 + outerSize2) { - align = "end"; - } else if (measurement.start <= scrollOffset2) { - align = "start"; - } else { - return; - } - } - var toOffset = align === "center" ? measurement.start + measurement.size / 2 : align === "end" ? measurement.end : measurement.start; - scrollToOffset(toOffset, _extends({ - align - }, rest)); - }, [scrollToOffset, size2]); - var scrollToIndex = T2(function(index, options) { - tryScrollToIndex(index, options); - requestAnimationFrame(function() { - tryScrollToIndex(index, options); + atomCache.set(params, newAtom); + setConfigDeletionHandler$2(newAtom.key, () => { + atomCache.delete(params); }); - }, [tryScrollToIndex]); - return { - virtualItems, - totalSize, - scrollToOffset, - scrollToIndex, - measure + return newAtom; }; -}; -var findNearestBinarySearch = function findNearestBinarySearch2(low, high, getCurrentValue, value) { - while (low <= high) { - var middle = (low + high) / 2 | 0; - var currentValue = getCurrentValue(middle); - if (currentValue < value) { - low = middle + 1; - } else if (currentValue > value) { - high = middle - 1; +} +var Recoil_atomFamily = atomFamily; +var { + setConfigDeletionHandler: setConfigDeletionHandler$3 +} = Recoil_Node; +var nextIndex = 0; +function selectorFamily(options) { + var _options$cachePolicyF, _options$cachePolicyF2; + const selectorCache = Recoil_cacheFromPolicy({ + equality: (_options$cachePolicyF = (_options$cachePolicyF2 = options.cachePolicyForParams_UNSTABLE) === null || _options$cachePolicyF2 === void 0 ? void 0 : _options$cachePolicyF2.equality) !== null && _options$cachePolicyF !== void 0 ? _options$cachePolicyF : "value", + eviction: "keep-all" + }); + return (params) => { + var _stableStringify; + const cachedSelector = selectorCache.get(params); + if (cachedSelector != null) { + return cachedSelector; + } + const myKey = `${options.key}__selectorFamily/${(_stableStringify = Recoil_stableStringify(params, { + allowFunctions: true + })) !== null && _stableStringify !== void 0 ? _stableStringify : "void"}/${nextIndex++}`; + const myGet = (callbacks) => options.get(params)(callbacks); + const myCachePolicy = options.cachePolicy_UNSTABLE; + const retainedBy = typeof options.retainedBy_UNSTABLE === "function" ? options.retainedBy_UNSTABLE(params) : options.retainedBy_UNSTABLE; + let newSelector; + if (options.set != null) { + const set = options.set; + const mySet = (callbacks, newValue) => set(params)(callbacks, newValue); + newSelector = Recoil_selector({ + key: myKey, + get: myGet, + set: mySet, + cachePolicy_UNSTABLE: myCachePolicy, + dangerouslyAllowMutability: options.dangerouslyAllowMutability, + retainedBy_UNSTABLE: retainedBy + }); } else { - return middle; + newSelector = Recoil_selector({ + key: myKey, + get: myGet, + cachePolicy_UNSTABLE: myCachePolicy, + dangerouslyAllowMutability: options.dangerouslyAllowMutability, + retainedBy_UNSTABLE: retainedBy + }); } + selectorCache.set(params, newSelector); + setConfigDeletionHandler$3(newSelector.key, () => { + selectorCache.delete(params); + }); + return newSelector; + }; +} +var Recoil_selectorFamily = selectorFamily; +var constantSelector = Recoil_selectorFamily({ + key: "__constant", + get: (constant) => () => constant, + cachePolicyForParams_UNSTABLE: { + equality: "reference" } - if (low > 0) { - return low - 1; - } else { - return 0; +}); +function constSelector(constant) { + return constantSelector(constant); +} +var Recoil_constSelector = constSelector; +var throwingSelector = Recoil_selectorFamily({ + key: "__error", + get: (message) => () => { + throw new Error(message); + }, + cachePolicyForParams_UNSTABLE: { + equality: "reference" } -}; -function calculateRange(_ref4) { - var measurements = _ref4.measurements, outerSize = _ref4.outerSize, scrollOffset = _ref4.scrollOffset; - var size2 = measurements.length - 1; - var getOffset = function getOffset2(index) { - return measurements[index].start; - }; - var start = findNearestBinarySearch(0, size2, getOffset, scrollOffset); - var end = start; - while (end < size2 && measurements[end].end < scrollOffset + outerSize) { - end++; +}); +function errorSelector(message) { + return throwingSelector(message); +} +var Recoil_errorSelector = errorSelector; +function readOnlySelector(atom2) { + return atom2; +} +var Recoil_readOnlySelector = readOnlySelector; +var { + loadableWithError: loadableWithError$3, + loadableWithPromise: loadableWithPromise$3, + loadableWithValue: loadableWithValue$4 +} = Recoil_Loadable; +function concurrentRequests(getRecoilValue, deps) { + const results = Array(deps.length).fill(void 0); + const exceptions = Array(deps.length).fill(void 0); + for (const [i4, dep] of deps.entries()) { + try { + results[i4] = getRecoilValue(dep); + } catch (e4) { + exceptions[i4] = e4; + } } - return { - start, - end - }; + return [results, exceptions]; } - -// src/components/Spaces/TreeView/FileExplorerVirtualized.tsx -var import_lodash5 = __toESM(require_lodash()); -var VirtualizedList = bn.memo( - (props2) => { - const { flattenedTree, projected, vRef, selectedFiles: selectedFiles2, activeFile: activeFile2, selectRange: selectRange2, handleCollapse, plugin, indentationWidth } = props2; - const parentRef = bn.useRef(null); - const rowHeight = (index) => platformIsMobile() ? flattenedTree[index].parentId == null ? 52 : 40 : flattenedTree[index].parentId == null ? 40 : 29; - const rowVirtualizer = useVirtual({ - size: flattenedTree.length, - paddingEnd: 24, - parentRef, - estimateSize: bn.useCallback((index) => rowHeight(index), [flattenedTree]), - overscan: plugin.settings.spacesPerformance ? 0 : 20 - }); - vRef.current = rowVirtualizer; - rowVirtualizer.scrollToIndex; - return /* @__PURE__ */ bn.createElement("div", { - ref: parentRef, - style: { - width: `100%`, - height: `100%`, - overflow: "auto" - } - }, /* @__PURE__ */ bn.createElement("div", { - style: { - height: `${rowVirtualizer.totalSize}px`, - width: "100%", - position: "relative" - } - }, rowVirtualizer.virtualItems.map((virtualRow) => { - var _a2; - return /* @__PURE__ */ bn.createElement("div", { - key: virtualRow.index, - ref: virtualRow.measureRef, - style: { - position: "absolute", - top: 0, - left: 0, - width: "100%", - height: `${rowHeight(virtualRow.index)}px`, - transform: `translateY(${virtualRow.start}px)` - } - }, /* @__PURE__ */ bn.createElement(SortableTreeItem, { - key: flattenedTree[virtualRow.index].id, - id: flattenedTree[virtualRow.index].id, - data: flattenedTree[virtualRow.index], - disabled: false, - depth: flattenedTree[virtualRow.index].depth, - childCount: 0, - indentationWidth, - indicator: (projected == null ? void 0 : projected.overId) == flattenedTree[virtualRow.index].id ? flattenedTree[virtualRow.index].parentId == null && projected.parentId == null ? { state: 1 /* Top */, depth: projected.depth } : { state: 2 /* Bottom */, depth: projected.depth } : null, - plugin, - style: {}, - onSelectRange: selectRange2, - active: activeFile2 == ((_a2 = flattenedTree[virtualRow.index].item) == null ? void 0 : _a2.path), - selected: selectedFiles2.some((g4) => g4.id == flattenedTree[virtualRow.index].id), - collapsed: flattenedTree[virtualRow.index].collapsed, - onCollapse: handleCollapse - })); - }))); +function isError(exp) { + return exp != null && !Recoil_isPromise(exp); +} +function unwrapDependencies(dependencies) { + return Array.isArray(dependencies) ? dependencies : Object.getOwnPropertyNames(dependencies).map((key2) => dependencies[key2]); +} +function getValueFromLoadablePromiseResult(result) { + if (result != null && typeof result === "object" && result.hasOwnProperty("__value")) { + return result.__value; } -); -var FileExplorerComponent = (props2) => { - const { plugin } = props2; - const indentationWidth = 24; - const isMobile = platformIsMobile(); - const [vaultItems, setVaultItems] = p2({}); - const [expandedFolders2, setExpandedFolders] = p2(plugin.settings.expandedFolders); - const [expandedSpaces, setExpandedSpaces] = p2(plugin.settings.expandedSpaces); - const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); - const [spaces2, setSpaces] = Recoil_index_14(spaces); - const [vaultSort, setVaultSort] = p2(plugin.settings.vaultSort.length == 2 ? plugin.settings.vaultSort : ["rank", true]); - const [selectedFiles2, setSelectedFiles] = Recoil_index_14(selectedFiles); - const nextTreeScrollPath = _2(null); - const activeSpaces = F(() => props2.activeSpace ? spaces2.filter((f4) => f4.name == props2.activeSpace) : spaces2.filter((f4) => f4.pinned != "true"), [spaces2, props2.activeSpace]); - const [offsetLeft, setOffsetLeft] = p2(0); - const listRef = _2(null); - const forceUpdate = useForceUpdate(); - const treeForSpace = (space) => { - var _a2, _b2; - let tree = []; - const spaceCollapsed = !expandedSpaces.includes(space.name); - const spaceSort = (_a2 = safelyParseJSON(space.sort)) != null ? _a2 : ["rank", true]; - tree.push(spaceItemToTreeNode(space, spaceCollapsed, spaceSort)); - if (!spaceCollapsed) - ((_b2 = vaultItems[space.name + "/"]) != null ? _b2 : []).sort(folderSortFn(spaceSort[0], spaceSort[1])).forEach((item) => { - var _a3, _b3; - const itemCollapsed = !((_a3 = expandedFolders2[space.name]) == null ? void 0 : _a3.includes(item.path)); - tree.push(vaulItemToTreeNode(item, space.name, "", 1, 0, itemCollapsed, spaceSort[0] == "rank" || spaceSort[0] == "")); - if (!itemCollapsed) - tree.push(...flattenedTreeFromVaultItems(item.path, space.name, vaultItems, (_b3 = expandedFolders2[space.name]) != null ? _b3 : [], 2, spaceSort[0], spaceSort[1])); - }); - return tree; - }; - const flattenedTree = F(() => { - var _a2; - let tree = []; - activeSpaces.forEach((space) => { - tree.push(...treeForSpace(space)); - }); - if (!props2.activeSpace) { - const vaultCollapsed = !expandedSpaces.includes("/"); - tree.push({ id: "/", parentId: null, depth: 0, index: 0, space: "/", item: null, collapsed: vaultCollapsed, sortable: vaultSort[0] == "rank" }); - if (!vaultCollapsed) - tree.push(...flattenedTreeFromVaultItems("/", "/", vaultItems, (_a2 = expandedFolders2["/"]) != null ? _a2 : [], 1, vaultSort[0], vaultSort[1])); + return result; +} +function wrapResults(dependencies, results) { + return Array.isArray(dependencies) ? results : Object.getOwnPropertyNames(dependencies).reduce((out, key2, idx) => ({ + ...out, + [key2]: results[idx] + }), {}); +} +function wrapLoadables(dependencies, results, exceptions) { + const output = exceptions.map((exception, idx) => exception == null ? loadableWithValue$4(results[idx]) : Recoil_isPromise(exception) ? loadableWithPromise$3(exception) : loadableWithError$3(exception)); + return wrapResults(dependencies, output); +} +function combineAsyncResultsWithSyncResults(syncResults, asyncResults) { + return asyncResults.map((result, idx) => result === void 0 ? syncResults[idx] : result); +} +var waitForNone = Recoil_selectorFamily({ + key: "__waitForNone", + get: (dependencies) => ({ + get + }) => { + const deps = unwrapDependencies(dependencies); + const [results, exceptions] = concurrentRequests(get, deps); + return wrapLoadables(dependencies, results, exceptions); + }, + dangerouslyAllowMutability: true +}); +var waitForAny = Recoil_selectorFamily({ + key: "__waitForAny", + get: (dependencies) => ({ + get + }) => { + const deps = unwrapDependencies(dependencies); + const [results, exceptions] = concurrentRequests(get, deps); + if (exceptions.some((exp) => !Recoil_isPromise(exp))) { + return wrapLoadables(dependencies, results, exceptions); } - if (nextTreeScrollPath.current) { - const index = tree.findIndex((f4) => { - var _a3; - return ((_a3 = f4.item) == null ? void 0 : _a3.path) == nextTreeScrollPath.current; - }); - if (index != -1) { - listRef.current.scrollToIndex(index); - nextTreeScrollPath.current = null; + return new Promise((resolve) => { + for (const [i4, exp] of exceptions.entries()) { + if (Recoil_isPromise(exp)) { + exp.then((result) => { + results[i4] = getValueFromLoadablePromiseResult(result); + exceptions[i4] = void 0; + resolve(wrapLoadables(dependencies, results, exceptions)); + }).catch((error) => { + exceptions[i4] = error; + resolve(wrapLoadables(dependencies, results, exceptions)); + }); + } } + }); + }, + dangerouslyAllowMutability: true +}); +var waitForAll = Recoil_selectorFamily({ + key: "__waitForAll", + get: (dependencies) => ({ + get + }) => { + const deps = unwrapDependencies(dependencies); + const [results, exceptions] = concurrentRequests(get, deps); + if (exceptions.every((exp) => exp == null)) { + return wrapResults(dependencies, results); } - return tree; - ; - }, [vaultItems, activeSpaces, expandedSpaces, expandedFolders2, vaultSort, props2.activeSpace]); - h2(() => { - if (selectedFiles2.length <= 1) { - if (!selectedFiles2[0] || selectedFiles2[0].item.path != activeFile2) - setSelectedFiles([]); - if (plugin.settings.revealActiveFile) - revealFile(getAbstractFileAtPath(app, activeFile2)); + const error = exceptions.find(isError); + if (error != null) { + throw error; } - window.addEventListener(eventTypes.activeFileChange, changeActiveFile); - return () => { - window.removeEventListener(eventTypes.activeFileChange, changeActiveFile); - }; - }, [activeFile2]); - h2(() => { - window.addEventListener(eventTypes.spacesChange, spaceChangeEvent); - window.addEventListener(eventTypes.refreshView, forceUpdate); - window.addEventListener(eventTypes.settingsChanged, settingsChanged); - window.addEventListener(eventTypes.revealFile, handleRevealFileEvent); - return () => { - window.removeEventListener(eventTypes.spacesChange, spaceChangeEvent); - window.removeEventListener(eventTypes.refreshView, forceUpdate); - window.removeEventListener(eventTypes.settingsChanged, settingsChanged); - window.removeEventListener(eventTypes.revealFile, handleRevealFileEvent); - }; - }, []); - const revealFile = (file) => { - var _a2, _b2; - if (!file) - return; - const folders = file.path.split("/"); - const openPaths = folders.reduce((p3, c4, index) => [...p3, index == 0 ? c4 : `${p3[index]}/${c4}`], ["/"]).slice(0, -1); - const newOpenFolders = [ - ...(_b2 = (_a2 = expandedFolders2["/"]) == null ? void 0 : _a2.filter((f4) => !openPaths.find((g4) => g4 == f4))) != null ? _b2 : [], - ...openPaths - ]; - plugin.settings.expandedFolders = { - ...expandedFolders2, - "/": newOpenFolders - }; - nextTreeScrollPath.current = file.path; - plugin.saveSettings(); - }; - const handleRevealFileEvent = (evt) => { - if (evt.detail) - revealFile(evt.detail.file); - }; - h2(() => { - const spaceItems = retrieveSpaceItems(plugin, spaces2); - setVaultItems((g4) => ({ ...g4, ...Object.keys(spaceItems).reduce((p3, c4) => ({ - ...p3, - [c4 + "/"]: spaceItems[c4].map((f4) => { - var _a2; - return { - ...(_a2 = vaultItemForPath(plugin, f4.path)) != null ? _a2 : {}, - ...f4 - }; - }) - }), {}) })); - }, [spaces2]); - const retrieveData = async (folders) => { - setSpaces(retrieveSpaces(plugin)); - retrieveFolders(plugin, folders).then((f4) => setVaultItems((g4) => ({ ...g4, ...f4 }))); - }; - const flatFolders = F(() => { - let allFolders = []; - if (expandedSpaces.includes("/")) - allFolders.push("/"); - expandedSpaces.forEach((space) => { - var _a2; - allFolders.push(...(_a2 = expandedFolders2[space]) != null ? _a2 : []); - }); - console.log(allFolders); - return allFolders; - }, [expandedSpaces, expandedFolders2]); - h2(() => { - const newFolders = flatFolders; - retrieveData(newFolders); - }, [flatFolders]); - const refreshVault = T2((0, import_lodash5.debounce)(() => retrieveData(flatFolders), 100, { leading: true, trailing: true }), []); - const spaceChangeEvent = (evt) => { - if (evt.detail.changeType == "vault" || evt.detail.changeType == "space") { - refreshVault(); + return Promise.all(exceptions).then((exceptionResults) => wrapResults(dependencies, combineAsyncResultsWithSyncResults(results, exceptionResults).map(getValueFromLoadablePromiseResult))); + }, + dangerouslyAllowMutability: true +}); +var waitForAllSettled = Recoil_selectorFamily({ + key: "__waitForAllSettled", + get: (dependencies) => ({ + get + }) => { + const deps = unwrapDependencies(dependencies); + const [results, exceptions] = concurrentRequests(get, deps); + if (exceptions.every((exp) => !Recoil_isPromise(exp))) { + return wrapLoadables(dependencies, results, exceptions); } - }; - const changeActiveFile = (evt) => { - let filePath = evt.detail.filePath; - setActiveFile(filePath); - }; - const settingsChanged = () => { - setVaultSort(plugin.settings.vaultSort); - setExpandedFolders(plugin.settings.expandedFolders); - setExpandedSpaces(plugin.settings.expandedSpaces); - }; - h2(() => { - settingsChanged(); - }, []); - const [activeId, setActiveId] = p2(null); - const [overId, setOverId] = p2(null); - const [currentPosition, setCurrentPosition] = p2(null); - h2(() => { - if (!expandedSpaces.includes(props2.activeSpace)) { - plugin.settings.expandedSpaces = uniq([...plugin.settings.expandedSpaces, props2.activeSpace]); - plugin.saveSettings(); + return Promise.all(exceptions.map((exp, i4) => Recoil_isPromise(exp) ? exp.then((result) => { + results[i4] = getValueFromLoadablePromiseResult(result); + exceptions[i4] = void 0; + }).catch((error) => { + results[i4] = void 0; + exceptions[i4] = error; + }) : null)).then(() => wrapLoadables(dependencies, results, exceptions)); + }, + dangerouslyAllowMutability: true +}); +var noWait = Recoil_selectorFamily({ + key: "__noWait", + get: (dependency) => ({ + get + }) => { + try { + return loadableWithValue$4(get(dependency)); + } catch (exception) { + return Recoil_isPromise(exception) ? loadableWithPromise$3(exception) : loadableWithError$3(exception); } - }, [props2.activeSpace]); - const sortedIds = F( - () => flattenedTree.map(({ id: id2 }) => id2), - [flattenedTree] - ); - const selectRange2 = (fromId) => { - const startIndex = sortedIds.findIndex((f4) => f4 == fromId); - const selectedFilesStartIndex = sortedIds.findIndex((f4) => { - var _a2; - return f4 == ((_a2 = selectedFiles2[0]) == null ? void 0 : _a2.id); + }, + dangerouslyAllowMutability: true +}); +var Recoil_WaitFor = { + waitForNone, + waitForAny, + waitForAll, + waitForAllSettled, + noWait +}; +var { + batchUpdates: batchUpdates$3, + setBatcher: setBatcher$1 +} = Recoil_Batching; +var { + DefaultValue: DefaultValue$3 +} = Recoil_Node; +var { + RecoilRoot: RecoilRoot$2 +} = Recoil_RecoilRoot_react; +var { + isRecoilValue: isRecoilValue$5 +} = Recoil_RecoilValue$1; +var { + retentionZone: retentionZone$1 +} = Recoil_RetentionZone; +var { + freshSnapshot: freshSnapshot$2 +} = Recoil_Snapshot$1; +var { + useGotoRecoilSnapshot: useGotoRecoilSnapshot$1, + useRecoilCallback: useRecoilCallback$1, + useRecoilSnapshot: useRecoilSnapshot$1, + useRecoilState: useRecoilState$1, + useRecoilStateLoadable: useRecoilStateLoadable$1, + useRecoilTransaction: useRecoilTransaction$1, + useRecoilTransactionObserver: useRecoilTransactionObserver$1, + useRecoilValue: useRecoilValue$1, + useRecoilValueLoadable: useRecoilValueLoadable$1, + useResetRecoilState: useResetRecoilState$1, + useRetain: useRetain$1, + useSetRecoilState: useSetRecoilState$1, + useSetUnvalidatedAtomValues: useSetUnvalidatedAtomValues$1, + useTransactionObservation_DEPRECATED: useTransactionObservation_DEPRECATED$1 +} = Recoil_Hooks; +var { + noWait: noWait$1, + waitForAll: waitForAll$1, + waitForAllSettled: waitForAllSettled$1, + waitForAny: waitForAny$1, + waitForNone: waitForNone$1 +} = Recoil_WaitFor; +var Recoil_index = { + DefaultValue: DefaultValue$3, + RecoilRoot: RecoilRoot$2, + useRecoilBridgeAcrossReactRoots_UNSTABLE: Recoil_useRecoilBridgeAcrossReactRoots, + atom: Recoil_atom, + selector: Recoil_selector, + retentionZone: retentionZone$1, + atomFamily: Recoil_atomFamily, + selectorFamily: Recoil_selectorFamily, + constSelector: Recoil_constSelector, + errorSelector: Recoil_errorSelector, + readOnlySelector: Recoil_readOnlySelector, + useRecoilValue: useRecoilValue$1, + useRecoilValueLoadable: useRecoilValueLoadable$1, + useRecoilState: useRecoilState$1, + useRecoilStateLoadable: useRecoilStateLoadable$1, + useSetRecoilState: useSetRecoilState$1, + useResetRecoilState: useResetRecoilState$1, + useGetRecoilValueInfo_UNSTABLE: Recoil_useGetRecoilValueInfo, + useRetain: useRetain$1, + useRecoilCallback: useRecoilCallback$1, + useRecoilTransaction_UNSTABLE: useRecoilTransaction$1, + useGotoRecoilSnapshot: useGotoRecoilSnapshot$1, + useRecoilSnapshot: useRecoilSnapshot$1, + useRecoilTransactionObserver_UNSTABLE: useRecoilTransactionObserver$1, + useTransactionObservation_UNSTABLE: useTransactionObservation_DEPRECATED$1, + useSetUnvalidatedAtomValues_UNSTABLE: useSetUnvalidatedAtomValues$1, + noWait: noWait$1, + waitForNone: waitForNone$1, + waitForAny: waitForAny$1, + waitForAll: waitForAll$1, + waitForAllSettled: waitForAllSettled$1, + isRecoilValue: isRecoilValue$5, + batchUpdates: batchUpdates$3, + setBatcher: setBatcher$1, + snapshot_UNSTABLE: freshSnapshot$2 +}; +var Recoil_index_1 = Recoil_index.DefaultValue; +var Recoil_index_2 = Recoil_index.RecoilRoot; +var Recoil_index_3 = Recoil_index.useRecoilBridgeAcrossReactRoots_UNSTABLE; +var Recoil_index_4 = Recoil_index.atom; +var Recoil_index_5 = Recoil_index.selector; +var Recoil_index_6 = Recoil_index.retentionZone; +var Recoil_index_7 = Recoil_index.atomFamily; +var Recoil_index_8 = Recoil_index.selectorFamily; +var Recoil_index_9 = Recoil_index.constSelector; +var Recoil_index_10 = Recoil_index.errorSelector; +var Recoil_index_11 = Recoil_index.readOnlySelector; +var Recoil_index_12 = Recoil_index.useRecoilValue; +var Recoil_index_13 = Recoil_index.useRecoilValueLoadable; +var Recoil_index_14 = Recoil_index.useRecoilState; +var Recoil_index_15 = Recoil_index.useRecoilStateLoadable; +var Recoil_index_16 = Recoil_index.useSetRecoilState; +var Recoil_index_17 = Recoil_index.useResetRecoilState; +var Recoil_index_18 = Recoil_index.useGetRecoilValueInfo_UNSTABLE; +var Recoil_index_19 = Recoil_index.useRetain; +var Recoil_index_20 = Recoil_index.useRecoilCallback; +var Recoil_index_21 = Recoil_index.useRecoilTransaction_UNSTABLE; +var Recoil_index_22 = Recoil_index.useGotoRecoilSnapshot; +var Recoil_index_23 = Recoil_index.useRecoilSnapshot; +var Recoil_index_24 = Recoil_index.useRecoilTransactionObserver_UNSTABLE; +var Recoil_index_25 = Recoil_index.useTransactionObservation_UNSTABLE; +var Recoil_index_26 = Recoil_index.useSetUnvalidatedAtomValues_UNSTABLE; +var Recoil_index_27 = Recoil_index.noWait; +var Recoil_index_28 = Recoil_index.waitForNone; +var Recoil_index_29 = Recoil_index.waitForAny; +var Recoil_index_30 = Recoil_index.waitForAll; +var Recoil_index_31 = Recoil_index.waitForAllSettled; +var Recoil_index_32 = Recoil_index.isRecoilValue; +var Recoil_index_33 = Recoil_index.batchUpdates; +var Recoil_index_34 = Recoil_index.setBatcher; +var Recoil_index_35 = Recoil_index.snapshot_UNSTABLE; + +// src/components/ui/modals/hiddenFiles.tsx +var import_obsidian26 = require("obsidian"); +var HiddenItemsModal = class extends import_obsidian26.Modal { + constructor(plugin) { + super(plugin.app); + this.plugin = plugin; + } + onOpen() { + let { contentEl } = this; + let myModal = this; + let headerText; + const headerEl = contentEl.createEl("div", { text: headerText }); + headerEl.addClass("modal-title"); + headerEl.innerHTML = "Hidden Files"; + const listEl = contentEl.createEl("div"); + const root = createRoot(listEl); + root.render(/* @__PURE__ */ bn.createElement(HiddenFiles, { + plugin: this.plugin + })); + const cancelButton = contentEl.createEl("button", { + text: "Close" }); - const selectedFilesEndIndex = sortedIds.findIndex((f4) => { - var _a2; - return f4 == ((_a2 = selectedFiles2[selectedFiles2.length - 1]) == null ? void 0 : _a2.id); + cancelButton.style.cssText = "float: right;"; + cancelButton.addEventListener("click", () => { + myModal.close(); }); - if (startIndex < selectedFilesStartIndex) { - setSelectedFiles(flattenedTree.slice(startIndex, selectedFilesEndIndex + 1).filter((f4) => f4.item)); - } else { - setSelectedFiles(flattenedTree.slice(selectedFilesStartIndex, startIndex + 1).filter((f4) => f4.item)); - } - }; - const activeItem = activeId ? flattenedTree.find(({ id: id2 }) => id2 === activeId) : null; - const overIndex = overId ? flattenedTree.findIndex(({ id: id2 }) => id2 === overId) : null; - const overItem = flattenedTree[overIndex]; - const nextItem = flattenedTree[overIndex + 1]; - const dragDepth = F(() => { - return getDragDepth(offsetLeft, indentationWidth); - }, [offsetLeft]); - const projected = F(() => { - return activeId && overId ? getProjection( - flattenedTree, - activeItem, - overIndex, - overItem, - nextItem, - dragDepth - ) : null; - }, [flattenedTree, activeItem, overItem, nextItem, overIndex, dragDepth]); - function handleDragStart(event) { - const { - active: { id: activeId2 } - } = event; - const activeItem2 = flattenedTree.find(({ id: id2 }) => id2 === activeId2); - if (activeItem2.parentId == null && activeItem2.space == "/") - return; - setActiveId(activeId2); - setOverId(activeId2); - if (activeItem2) { - setCurrentPosition({ - parentId: activeItem2.parentId, - overId: activeId2 - }); - } - document.body.style.setProperty("cursor", "grabbing"); - } - function handleDragMove({ delta }) { - setOffsetLeft(Math.max(1, delta.x)); - } - function handleDragOver({ over }) { - var _a2; - const overId2 = over == null ? void 0 : over.id; - if (overId2) { - setOverId((_a2 = over == null ? void 0 : over.id) != null ? _a2 : null); - } - } - function handleDragEnd({ active, over }) { - resetState(); - moveFile(active, over); - } - const moveFile = async (active, over) => { - var _a2, _b2; - if (projected) { - const clonedItems = flattenedTree; - const overIndex2 = clonedItems.findIndex(({ id: id2 }) => id2 === over.id); - const overItem2 = clonedItems[overIndex2]; - const activeIndex = clonedItems.findIndex(({ id: id2 }) => id2 === active.id); - const activeTreeItem = clonedItems[activeIndex]; - const activeIsSection = activeTreeItem.parentId == null; - const overIsSection = overItem2.parentId == null; - const overSpace = activeSpaces.find((f4) => f4.name == overItem2.space); - if (activeIsSection) { - if (overIsSection) { - insertSpaceAtIndex(plugin, activeTreeItem.space, false, overSpace ? parseInt(overSpace.rank) : spaces2.length); - return; - } - } - const { depth, overId: overId2, parentId } = projected; - const parentItem = clonedItems.find(({ id: id2 }) => id2 === parentId); - if (overItem2.space != activeItem.space || overItem2.space != "/") { - if (overItem2.space == "/") { - return; - } - if (parentId != overItem2.space + "//" && parentId != null) { - return; - } - if (activeItem.space != overItem2.space && ((_a2 = overSpace == null ? void 0 : overSpace.def) == null ? void 0 : _a2.length) > 0) { - moveAFileToNewParentAtIndex(plugin, activeTreeItem.item, overSpace.def, vaultItems, parseInt(overItem2.item.rank)); - } else { - insertSpaceItemAtIndex(plugin, overItem2.space, activeItem.item.path, parseInt((_b2 = overItem2.item) == null ? void 0 : _b2.rank)); - } - return; - } - if (parentId != activeTreeItem.parentId) { - const newParent = parentItem ? parentItem.item.folder == "true" ? parentItem.item.path : parentItem.item.parent : "/"; - const newPath = newParent == "/" ? activeItem.file.name : `${newParent}/${activeItem.file.name}`; - if (plugin.app.vault.getAbstractFileByPath(newPath)) { - new import_obsidian28.Notice(i18n_default.notice.duplicateFile); - return; - } - moveAFileToNewParentAtIndex(plugin, activeTreeItem.item, newParent, vaultItems, parseInt(overItem2.item.rank)); - } else { - updateFileRank(plugin, activeTreeItem.item, vaultItems, parseInt(overItem2.item.rank)); - } - } - }; - const adjustTranslate = ({ transform }) => { - return { - ...transform, - x: transform.x, - y: transform.y - 10 + const onClickAction = async () => { + myModal.close(); }; - }; - function handleDragCancel() { - resetState(); } - const handleCollapse = T2( - (folder) => { - var _a2; - if (folder.parentId == null) { - if (plugin.settings.expandedSpaces.includes(folder.space)) - plugin.settings.expandedSpaces = plugin.settings.expandedSpaces.filter((f4) => f4 != folder.space); - else - plugin.settings.expandedSpaces = [...plugin.settings.expandedSpaces, folder.space]; - plugin.saveSettings(); - } else { - const openFolders = (_a2 = expandedFolders2[folder.space]) != null ? _a2 : []; - const folderOpen = openFolders == null ? void 0 : openFolders.includes(folder.item.path); - const newOpenFolders = !folderOpen ? [...openFolders, folder.item.path] : openFolders.filter( - (openFolder) => folder.item.path !== openFolder - ); - plugin.settings.expandedFolders = { - ...expandedFolders2, - [folder.space]: newOpenFolders - }; - plugin.saveSettings(); - } - }, - [plugin, expandedFolders2, expandedSpaces] - ); - function resetState() { - setOverId(null); - setActiveId(null); - setOffsetLeft(0); - document.body.style.setProperty("cursor", ""); + onClose() { + let { contentEl } = this; + let event = new CustomEvent(eventTypes.vaultChange); + window.dispatchEvent(event); + contentEl.empty(); } - useDndMonitor({ - onDragStart: handleDragStart, - onDragMove: handleDragMove, - onDragOver: handleDragOver, - onDragEnd: handleDragEnd, - onDragCancel: handleDragCancel - }); - return /* @__PURE__ */ bn.createElement("div", { - className: "mk-file-tree" - }, /* @__PURE__ */ bn.createElement(SortableContext, { - items: sortedIds, - strategy: verticalListSortingStrategy - }, /* @__PURE__ */ bn.createElement(VirtualizedList, { - vRef: listRef, - flattenedTree, - projected, - handleCollapse, - activeFile: activeFile2, - plugin, - selectedFiles: selectedFiles2, - selectRange: selectRange2, - indentationWidth - }), j3( - /* @__PURE__ */ bn.createElement(DragOverlay, { - dropAnimation: null, - modifiers: [adjustTranslate], - zIndex: 1600 - }, activeId ? /* @__PURE__ */ bn.createElement(SortableTreeItem, { - id: activeId, - data: flattenedTree.find((f4) => f4.id == activeId), - indicator: null, - depth: 0, - disabled: false, - plugin, - selected: false, - active: false, - clone: true, - childCount: 0, - style: {}, - indentationWidth - }) : null), - document.body - ))); }; - -// src/components/Spaces/TagContextList/TagContextList.tsx -var TagContextList = (props2) => { - const [tags, setTags] = p2([]); - const openContext = async (tag) => { - openTag(tag, app, false); +var HiddenFiles = (props2) => { + const { plugin } = props2; + const ref = _2(null); + const [hiddenFiles, setHiddenFiles] = p2(plugin.settings.hiddenFiles); + const [hiddenExtensions, setHiddenExtensions] = p2( + plugin.settings.hiddenExtensions + ); + const saveExtension = (value) => { + plugin.settings.hiddenExtensions = [ + ...plugin.settings.hiddenExtensions, + value + ]; + plugin.saveSettings(); + }; + const saveFile = (_4, value) => { + plugin.settings.hiddenFiles = [...plugin.settings.hiddenFiles, ...value]; + plugin.saveSettings(); + }; + const removeExtension = (index) => { + plugin.settings.hiddenExtensions = plugin.settings.hiddenExtensions.filter( + (f4, i4) => i4 != index + ); + plugin.saveSettings(); + }; + const removeItem = (index) => { + plugin.settings.hiddenFiles = plugin.settings.hiddenFiles.filter( + (f4, i4) => i4 != index + ); + plugin.saveSettings(); + }; + const addExtension = () => { + if ((ref == null ? void 0 : ref.current.value.length) > 0) { + saveExtension(ref.current.value); + ref.current.empty(); + } + }; + const settingsChanged = () => { + setHiddenFiles(plugin.settings.hiddenFiles); + setHiddenExtensions(plugin.settings.hiddenExtensions); }; h2(() => { - window.addEventListener(eventTypes.tagsChange, refreshTags); + window.addEventListener(eventTypes.settingsChanged, settingsChanged); return () => { - window.removeEventListener(eventTypes.tagsChange, refreshTags); + window.removeEventListener(eventTypes.settingsChanged, settingsChanged); }; }, []); - const refreshTags = () => { - const f4 = loadTags(props2.plugin); - setTags(f4); + const addMenu = (e4) => { + const offset = e4.target.getBoundingClientRect(); + const options = getAllAbstractFilesInVault(props2.plugin, app).map((f4) => ({ + name: fileNameToString(f4.name), + value: f4.path + })); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + options, + saveOptions: saveFile, + placeholder: "Find Note", + detail: true, + searchable: true + } + ); }; - h2(() => { - refreshTags(); - }, []); return /* @__PURE__ */ bn.createElement("div", { - className: "tag-container" + className: "modal-content" }, /* @__PURE__ */ bn.createElement("div", { - className: "tree-item" - }, tags.map((f4) => /* @__PURE__ */ bn.createElement("div", { - className: "tree-item-self is-clickable", - onClick: () => openContext(f4) - }, f4)))); + className: "setting-item setting-item-heading" + }, "Extensions"), /* @__PURE__ */ bn.createElement("div", null, hiddenExtensions.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { + className: "mobile-option-setting-item" + }, /* @__PURE__ */ bn.createElement("span", { + className: "mobile-option-setting-item-name" + }, f4), /* @__PURE__ */ bn.createElement("div", { + className: "clickable-icon mobile-option-setting-item-option-icon", + "aria-label": "Delete", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] }, + onClick: () => removeExtension(index) + })))), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item" + }, /* @__PURE__ */ bn.createElement("input", { + placeholder: "Add Extension", + type: "text", + ref + }), /* @__PURE__ */ bn.createElement("button", { + onClick: (e4) => addExtension() + }, "+ Add")), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item setting-item-heading" + }, "Files"), /* @__PURE__ */ bn.createElement("div", null, hiddenFiles.map((f4, index) => /* @__PURE__ */ bn.createElement("div", { + className: "mobile-option-setting-item" + }, /* @__PURE__ */ bn.createElement("span", { + className: "mobile-option-setting-item-name" + }, f4), /* @__PURE__ */ bn.createElement("div", { + className: "clickable-icon mobile-option-setting-item-option-icon", + "aria-label": "Delete", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] }, + onClick: () => removeItem(index) + })))), /* @__PURE__ */ bn.createElement("div", { + className: "setting-item" + }, /* @__PURE__ */ bn.createElement("button", { + onClick: (e4) => addMenu(e4) + }, "+ Add File"))); }; -// src/components/Spaces/SpaceSwitcher/SpaceSwitcher.tsx -var import_classnames6 = __toESM(require_classnames()); -var SpaceSwitcher = (props2) => { +// src/components/Spaces/MainMenu.tsx +var import_obsidian27 = require("obsidian"); + +// src/recoil/pluginState.ts +var activeFile = Recoil_index_4({ + key: "spacesActiveFile", + default: null, + dangerouslyAllowMutability: true +}); +var selectedFiles = Recoil_index_4({ + key: "spacesSelectedFiles", + default: [], + dangerouslyAllowMutability: true +}); +var activeView = Recoil_index_4({ + key: "spacesActiveView", + default: "root", + dangerouslyAllowMutability: true +}); +var activeViewSpace = Recoil_index_4({ + key: "spacesActiveSpace", + default: "", + dangerouslyAllowMutability: true +}); +var spaces = Recoil_index_4({ + key: "spaces", + default: [], + dangerouslyAllowMutability: true +}); +var expandedFolders = Recoil_index_4({ + key: "expandedFolders", + default: {} +}); + +// src/components/Spaces/MainMenu.tsx +var replaceMobileMainMenu = (plugin) => { + if (platformIsMobile()) { + const header = app.workspace.containerEl.querySelector( + ".workspace-drawer.mod-left .workspace-drawer-header-left" + ); + header.empty(); + if (!plugin.settings.spacesCompactMode) { + const reactEl = createRoot(header); + reactEl.render( + /* @__PURE__ */ bn.createElement(Recoil_index_2, null, /* @__PURE__ */ bn.createElement(MainMenu, { + plugin + })) + ); + } + } +}; +var MainMenu = (props2) => { + var _a2; + const { plugin } = props2; const [activeView2, setActiveView] = Recoil_index_14(activeView); const [spaces2, setSpaces] = Recoil_index_14(spaces); - const [activeFile2, setActiveFile] = Recoil_index_14( - activeFile + const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14( + activeViewSpace ); - const folder = defaultNoteFolder(props2.plugin, activeFile2); - const { plugin } = props2; - const newFile = async () => { - await createNewMarkdownFile(props2.plugin.app, folder, "", ""); + const activeSpace = spaces2.find((f4) => f4.name == activeViewSpace2); + const ref = _2(); + const toggleSections = (collapse) => { + const newSections = collapse ? [] : ["/", ...spaces2.map((f4) => f4.name)]; + plugin.settings.expandedSpaces = newSections; + plugin.saveSettings(); }; - const pinnedSpaces = F(() => spaces2.filter((f4) => f4.pinned == "true"), [spaces2]); - const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14(activeViewSpace); const newSection = () => { - let vaultChangeModal = new SectionChangeModal(props2.plugin, "", "create"); + let vaultChangeModal = new SectionChangeModal(plugin, "", "create"); vaultChangeModal.open(); }; - return props2.plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement("div", { - className: "mk-flow-bar-compact" - }, /* @__PURE__ */ bn.createElement(MainMenu, { - plugin: props2.plugin - }), /* @__PURE__ */ bn.createElement("button", { - "aria-label": i18n_default.buttons.newNote, - className: "mk-inline-button", - onClick: () => newFile() - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-icon-small", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-note"] } - })), /* @__PURE__ */ bn.createElement("button", { - "aria-label": "Blink", - className: "mk-inline-button", - onClick: () => props2.plugin.quickOpen() - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-icon-small", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-blink"] } - }))) : /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: "mk-flow-bar" - }, /* @__PURE__ */ bn.createElement("button", { - "aria-label": i18n_default.buttons.newNote, - className: "mk-new-note", - onClick: () => newFile() - }, /* @__PURE__ */ bn.createElement("div", { - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-note"] } - }), /* @__PURE__ */ bn.createElement("p", null, i18n_default.buttons.newNote)), /* @__PURE__ */ bn.createElement("button", { - "aria-label": "Blink", - className: "mk-button-blink", - onClick: () => props2.plugin.quickOpen() - }, /* @__PURE__ */ bn.createElement("div", { - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-blink"] } - }))), /* @__PURE__ */ bn.createElement("div", { - className: "mk-sidebar-switcher" - }, /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames6.default)("mk-sidebar-item", pinnedSpaces.length == 0 && "mk-sidebar-expanded", activeView2 == "root" && "mk-sidebar-item-active"), - onClick: () => setActiveView("root") - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-icon-small", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-spaces"] } - }, " "), pinnedSpaces.length == 0 && /* @__PURE__ */ bn.createElement("div", null, "Spaces")), /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames6.default)("mk-sidebar-item", pinnedSpaces.length == 0 && "mk-sidebar-expanded", activeView2 == "tags" && "mk-sidebar-item-active"), - onClick: () => setActiveView("tags") - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-icon-small", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-tags"] } - }, " "), " ", pinnedSpaces.length == 0 && /* @__PURE__ */ bn.createElement("div", null, "Contexts")), /* @__PURE__ */ bn.createElement("div", { - className: "mk-sidebar-spaces" - }, pinnedSpaces.map((pin) => { - var _a2; - return /* @__PURE__ */ bn.createElement("div", { - onContextMenu: (e4) => triggerSectionMenu(props2.plugin, pin.name, spaces2, e4), - className: (0, import_classnames6.default)("mk-sidebar-item mk-sidebar-space", activeView2 == "space" && activeViewSpace2 == pin.name && "mk-sidebar-item-active"), - onClick: () => (setActiveView("space"), setActiveViewSpace(pin.name)), - dangerouslySetInnerHTML: ((_a2 = pin.sticker) == null ? void 0 : _a2.length) > 0 ? { __html: unifiedToNative(pin.sticker) } : null - }, pin.name.substring(0, 1)); - })), /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames6.default)("mk-sidebar-item"), - onClick: () => newSection() - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-icon-small", - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-space"] } - }, " ")))); -}; - -// src/components/Spaces/MainList.tsx -var MainList = (props2) => { - const [activeView2, setActiveView] = Recoil_index_14(activeView); - const [spaces2, setSpaces] = Recoil_index_14(spaces); - const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14(activeViewSpace); h2(() => { - if (activeView2 == "space" && !spaces2.some((f4) => f4.name == activeViewSpace2 && f4.pinned == "true")) { - setActiveView("root"); - } - }, [spaces2]); - const sensors = useSensors( - useSensor(MouseSensor, { - activationConstraint: { - distance: 10 - } - }), - useSensor(TouchSensor, { - activationConstraint: { - delay: 250, - tolerance: 5 - } - }) - ); - const measuring = { - droppable: { - strategy: MeasuringStrategy.Always + refreshLeafs(); + }, []); + const refreshLeafs = () => { + let leafs = []; + let spaceActive = true; + if (plugin.app.workspace.leftSplit && platformIsMobile()) { + const mobileDrawer = plugin.app.workspace.leftSplit; + const leaves = mobileDrawer.children; + const index = leaves.reduce((p3, c4, i4) => { + return c4.getViewState().type == FILE_TREE_VIEW_TYPE ? i4 : p3; + }, -1); + spaceActive = index == mobileDrawer.currentTab; + leafs.push(...leaves.filter((l3, i4) => i4 != index)); } + return { leafs, spaceActive }; }; - const viewForState = (viewType, space) => { - if (viewType == "root") { - return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { - plugin: props2.plugin + const showMenu = (e4) => { + const { spaceActive, leafs } = refreshLeafs(); + const menu = new import_obsidian27.Menu(); + !spaceActive && menu.addItem((menuItem) => { + menuItem.setIcon("lucide-arrow-left"); + menuItem.setTitle(i18n_default.menu.backToSpace); + menuItem.onClick((ev) => { + const leaves = plugin.app.workspace.getLeavesOfType(FILE_TREE_VIEW_TYPE); + if (leaves.length > 0) { + plugin.app.workspace.revealLeaf(leaves[0]); + } + }); + }); + if (plugin.settings.spacesCompactMode) { + menu.addItem((menuItem) => { + menuItem.setTitle("Spaces"); + menuItem.onClick((ev) => { + setActiveView("root"); + }); + }); + menu.addItem((menuItem) => { + menuItem.setTitle("Tags"); + menuItem.onClick((ev) => { + setActiveView("tags"); + }); + }); + menu.addSeparator(); + spaces2.filter((f4) => f4.pinned == "true").forEach((space) => { + menu.addItem((menuItem) => { + menuItem.setTitle(space.name); + menuItem.onClick((ev) => { + setActiveView("space"); + setActiveViewSpace(space.name); + }); + }); + }); + menu.addSeparator(); + } + menu.addItem((menuItem) => { + menuItem.setIcon("plus"); + menuItem.setTitle(i18n_default.menu.newSpace); + menuItem.onClick((ev) => { + newSection(); + }); + }); + menu.addItem((menuItem) => { + menuItem.setIcon("lucide-chevrons-down-up"); + menuItem.setTitle(i18n_default.menu.collapseAllSections); + menuItem.onClick((ev) => { + toggleSections(true); }); - } else if (viewType == "tags") { - return /* @__PURE__ */ bn.createElement(TagContextList, { - plugin: props2.plugin + }); + menu.addItem((menuItem) => { + menuItem.setIcon("lucide-chevrons-up-down"); + menuItem.setTitle(i18n_default.menu.expandAllSections); + menuItem.onClick((ev) => { + toggleSections(false); }); - } else if (viewType == "space") { - return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { - plugin: props2.plugin, - activeSpace: space + }); + menu.addSeparator(); + menu.addItem((menuItem) => { + menuItem.setIcon("eye-off"); + menuItem.setTitle("Manage Hidden Files"); + menuItem.onClick((ev) => { + let vaultChangeModal = new HiddenItemsModal(plugin); + vaultChangeModal.open(); + }); + }); + menu.addSeparator(); + leafs.map( + (l3) => menu.addItem((menuItem) => { + menuItem.setIcon(l3.view.icon); + menuItem.setTitle(l3.getDisplayText()); + menuItem.onClick((ev) => { + plugin.app.workspace.revealLeaf(l3); + }); + }) + ); + menu.addItem((menuItem) => { + menuItem.setIcon("lucide-settings"); + menuItem.setTitle(i18n_default.menu.obSettings); + menuItem.onClick((ev) => { + plugin.app.commands.commands["app:open-settings"].callback(); + }); + }); + menu.addItem((menuItem) => { + menuItem.setIcon("vault"); + menuItem.setTitle(i18n_default.menu.openVault); + menuItem.onClick((ev) => { + plugin.app.commands.commands["app:open-vault"].callback(); + }); + }); + menu.addSeparator(); + menu.addItem((menuItem) => { + menuItem.setIcon("mk-logo"); + menuItem.setTitle(i18n_default.menu.getHelp); + menuItem.onClick((ev) => { + window.open("https://make.md/community"); }); - } - return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { - plugin: props2.plugin }); + const offset = ref.current.getBoundingClientRect(); + menu.showAtPosition({ x: offset.left, y: offset.top + 30 }); }; - return /* @__PURE__ */ bn.createElement(DndContext, { - sensors, - collisionDetection: closestCenter, - measuring - }, /* @__PURE__ */ bn.createElement(SpaceSwitcher, { - plugin: props2.plugin - }), viewForState(activeView2, activeViewSpace2)); + const currentViewName = activeView2 == "root" ? "Spaces" : activeView2 == "tags" ? "Tags" : activeViewSpace2; + const currentViewIcon = activeView2 == "root" ? uiIconSet["mk-ui-spaces"] : activeView2 == "tags" ? uiIconSet["mk-ui-tags"] : ((_a2 = activeSpace == null ? void 0 : activeSpace.sticker) == null ? void 0 : _a2.length) > 0 ? unifiedToNative(activeSpace.sticker) : activeSpace == null ? void 0 : activeSpace.name.charAt(0); + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-main-menu-container" + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-main-menu-button", + ref, + onClick: (e4) => showMenu(e4) + }, plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: "mk-main-menu-icon", + dangerouslySetInnerHTML: { __html: currentViewIcon } + }), currentViewName) : plugin.app.vault.getName(), /* @__PURE__ */ bn.createElement("div", { + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-expand"] } + }))); }; -// src/components/Spaces/FileTreeView.tsx -var FILE_TREE_VIEW_TYPE = "mk-file-view"; -var VIEW_DISPLAY_TEXT = "Spaces"; -var ICON = "layout-grid"; -var FileTreeView = class extends import_obsidian29.ItemView { - constructor(leaf, plugin) { - super(leaf); - this.navigation = false; - this.plugin = plugin; - } - revealInFolder(file) { - if (file instanceof import_obsidian29.TFolder) { - this.plugin.app.workspace.activeLeaf.setViewState({ - type: CONTEXT_VIEW_TYPE, - state: { type: "folder", folder: file.path } - }); - this.plugin.app.workspace.requestSaveLayout(); - } else { - let evt = new CustomEvent(eventTypes.revealFile, { - detail: { file } - }); - window.dispatchEvent(evt); +// node_modules/@tanstack/react-virtual/build/esm/index.js +function _extends() { + _extends = Object.assign || function(target) { + for (var i4 = 1; i4 < arguments.length; i4++) { + var source = arguments[i4]; + for (var key2 in source) { + if (Object.prototype.hasOwnProperty.call(source, key2)) { + target[key2] = source[key2]; + } + } } + return target; + }; + return _extends.apply(this, arguments); +} +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) + return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key2, i4; + for (i4 = 0; i4 < sourceKeys.length; i4++) { + key2 = sourceKeys[i4]; + if (excluded.indexOf(key2) >= 0) + continue; + target[key2] = source[key2]; } - getViewType() { - return FILE_TREE_VIEW_TYPE; - } - getDisplayText() { - return VIEW_DISPLAY_TEXT; + return target; +} +var props = ["bottom", "height", "left", "right", "top", "width"]; +var rectChanged = function rectChanged2(a5, b4) { + if (a5 === void 0) { + a5 = {}; } - getIcon() { - return ICON; + if (b4 === void 0) { + b4 = {}; } - async onClose() { - let leafs = this.app.workspace.getLeavesOfType(FILE_TREE_VIEW_TYPE); - if (leafs.length == 0) { - let leaf = this.app.workspace.getLeftLeaf(false); - await leaf.setViewState({ type: FILE_TREE_VIEW_TYPE }); + return props.some(function(prop) { + return a5[prop] !== b4[prop]; + }); +}; +var observedNodes = /* @__PURE__ */ new Map(); +var rafId; +var run = function run2() { + var changedStates = []; + observedNodes.forEach(function(state, node) { + var newRect = node.getBoundingClientRect(); + if (rectChanged(newRect, state.rect)) { + state.rect = newRect; + changedStates.push(state); } - this.destroy(); - } - destroy() { - if (this.root) - this.root.unmount(); - } - async onOpen() { - this.destroy(); - this.constructFileTree(this.app.vault.getRoot().path, ""); + }); + changedStates.forEach(function(state) { + state.callbacks.forEach(function(cb) { + return cb(state.rect); + }); + }); + rafId = window.requestAnimationFrame(run2); +}; +function observeRect(node, cb) { + return { + observe: function observe() { + var wasEmpty = observedNodes.size === 0; + if (observedNodes.has(node)) { + observedNodes.get(node).callbacks.push(cb); + } else { + observedNodes.set(node, { + rect: void 0, + hasRectChanged: false, + callbacks: [cb] + }); + } + if (wasEmpty) + run(); + }, + unobserve: function unobserve() { + var state = observedNodes.get(node); + if (state) { + var index = state.callbacks.indexOf(cb); + if (index >= 0) + state.callbacks.splice(index, 1); + if (!state.callbacks.length) + observedNodes["delete"](node); + if (!observedNodes.size) + cancelAnimationFrame(rafId); + } + } + }; +} +var useIsomorphicLayoutEffect3 = typeof window !== "undefined" ? s2 : h2; +function rectReducer(state, action) { + var rect = action.rect; + if (state.height !== rect.height || state.width !== rect.width) { + return rect; } - constructFileTree(folderPath, vaultChange) { - this.destroy(); - this.root = createRoot(this.contentEl); - this.root.render( - /* @__PURE__ */ bn.createElement("div", { - className: "mk-sidebar" - }, /* @__PURE__ */ bn.createElement(Recoil_index_2, null, !platformIsMobile() && !this.plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement(MainMenu, { - plugin: this.plugin - }) : null, /* @__PURE__ */ bn.createElement(MainList, { - plugin: this.plugin - }))) - ); + return state; +} +var useRect2 = function useRect3(nodeRef, initialRect) { + if (initialRect === void 0) { + initialRect = { + width: 0, + height: 0 + }; } + var _React$useState = bn.useState(nodeRef.current), element = _React$useState[0], setElement = _React$useState[1]; + var _React$useReducer = bn.useReducer(rectReducer, initialRect), rect = _React$useReducer[0], dispatch = _React$useReducer[1]; + var initialRectSet = bn.useRef(false); + useIsomorphicLayoutEffect3(function() { + if (nodeRef.current !== element) { + setElement(nodeRef.current); + } + }); + useIsomorphicLayoutEffect3(function() { + if (element && !initialRectSet.current) { + initialRectSet.current = true; + var _rect = element.getBoundingClientRect(); + dispatch({ + rect: _rect + }); + } + }, [element]); + bn.useEffect(function() { + if (!element) { + return; + } + var observer = observeRect(element, function(rect2) { + dispatch({ + rect: rect2 + }); + }); + observer.observe(); + return function() { + observer.unobserve(); + }; + }, [element]); + return rect; }; - -// src/settings.ts -var import_obsidian30 = require("obsidian"); -var DEFAULT_SETTINGS = { - filePreviewOnHover: false, - markSans: false, - makeMenuPlaceholder: true, - mobileMakeBar: true, - inlineStyler: true, - inlineStylerColors: false, - editorFlow: true, - internalLinkClickFlow: true, - saveAllContextToFrontmatter: false, - editorFlowStyle: "seamless", - autoOpenFileContext: false, - spacesCompactMode: false, - spacesEnabled: true, - spacesPerformance: false, - enableFolderNote: true, - revealActiveFile: false, - spacesStickers: true, - spacesDisablePatch: false, - folderNoteInsideFolder: true, - sidebarTabs: true, - showRibbon: true, - deleteFileOption: "trash", - expandedFolders: {}, - expandedSpaces: ["/"], - folderRank: { - node: "root", - children: [], - isFolder: true - }, - openFolders: [], - fileIcons: [], - spaces: [], - pinnedSpaces: [], - menuTriggerChar: "/", - emojiTriggerChar: ":", - folderContextFile: "context", - tagContextFolder: "Context", - hiddenFiles: ["Context"], - hiddenExtensions: ["mdb"], - vaultSort: ["rank", true], - newFileLocation: "root", - newFileFolderPath: "" +var _excluded = ["align"]; +var defaultEstimateSize = function defaultEstimateSize2() { + return 50; }; -var MakeMDPluginSettingsTab = class extends import_obsidian30.PluginSettingTab { - constructor(app2, plugin) { - super(app2, plugin); - this.plugin = plugin; - } - refreshView() { - let evt = new CustomEvent(eventTypes.refreshView, {}); - window.dispatchEvent(evt); +var defaultKeyExtractor = function defaultKeyExtractor2(index) { + return index; +}; +var defaultMeasureSize = function defaultMeasureSize2(el, horizontal) { + var key2 = horizontal ? "offsetWidth" : "offsetHeight"; + return el[key2]; +}; +var defaultRangeExtractor = function defaultRangeExtractor2(range) { + var start = Math.max(range.start - range.overscan, 0); + var end = Math.min(range.end + range.overscan, range.size - 1); + var arr = []; + for (var _i = start; _i <= end; _i++) { + arr.push(_i); } - display() { - let { containerEl } = this; - containerEl.empty(); - containerEl.createEl("h2", { text: "Appearance" }); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.sidebarTabs.name).setDesc(i18n_default.settings.sidebarTabs.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.sidebarTabs).onChange((value) => { - this.plugin.settings.sidebarTabs = value; - this.plugin.saveSettings(); - document.body.classList.toggle("mk-hide-tabs", !value); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.hideRibbon.name).setDesc(i18n_default.settings.hideRibbon.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.showRibbon).onChange((value) => { - this.plugin.settings.showRibbon = value; - this.plugin.saveSettings(); - document.body.classList.toggle("mk-hide-ribbon", !value); - }) - ); - new import_obsidian30.Setting(containerEl).setName("Compact Mode").setDesc("Display the Spaces menu in a more compact format").addToggle( - (toggle) => toggle.setValue(this.plugin.settings.spacesCompactMode).onChange((value) => { - this.plugin.settings.spacesCompactMode = value; - this.plugin.detachFileTreeLeafs(); - this.plugin.saveSettings(); - }) - ); - containerEl.createEl("h2", { text: i18n_default.settings.sectionSidebar }); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.spaces.name).setDesc(i18n_default.settings.spaces.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.spacesEnabled).onChange((value) => { - this.plugin.settings.spacesEnabled = value; - this.plugin.saveSettings(); - if (value) { - this.plugin.openFileTreeLeaf(true); - } else { - this.plugin.detachFileTreeLeafs(); - } - this.refreshView(); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.spacesStickers.name).setDesc(i18n_default.settings.spacesStickers.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.spacesStickers).onChange((value) => { - this.plugin.settings.spacesStickers = value; - this.plugin.saveSettings(); - this.refreshView(); - }) - ); - new import_obsidian30.Setting(containerEl).setName("Enable Folder Note").setDesc("Access the folder note in the folder page and hide the folder note from spaces").addToggle( - (toggle) => toggle.setValue(this.plugin.settings.enableFolderNote).onChange((value) => { - this.plugin.settings.enableFolderNote = value; - this.plugin.saveSettings(); - }) - ); - new import_obsidian30.Setting(containerEl).setName("Reveal Active File").setDesc("Automatically reveal the active file in Spaces").addToggle( - (toggle) => toggle.setValue(this.plugin.settings.revealActiveFile).onChange((value) => { - this.plugin.settings.revealActiveFile = value; - this.plugin.saveSettings(); - }) - ); - containerEl.createEl("h2", { text: "Context" }); - new import_obsidian30.Setting(containerEl).setName("Auto Open File Context").setDesc("Automatically open file context panel in the right panel").addToggle( - (toggle) => toggle.setValue(this.plugin.settings.autoOpenFileContext).onChange((value) => { - this.plugin.settings.autoOpenFileContext = value; - this.plugin.saveSettings(); - }) - ); - new import_obsidian30.Setting(containerEl).setName("Save All Context Fields to Frontmatter").setDesc("Turn on to automatically save all context fields to frontmatter fields, not just existing frontmatter fields.").addToggle( - (toggle) => toggle.setValue(this.plugin.settings.autoOpenFileContext).onChange((value) => { - this.plugin.settings.autoOpenFileContext = value; - this.plugin.saveSettings(); - }) - ); - containerEl.createEl("h2", { text: i18n_default.settings.sectionFlow }); - new import_obsidian30.Setting(containerEl).setName("Open Flow Editor on Internal Link Click").setDesc("Turn on to toggle Flow Editor directly by clicking on internal links, otherwise a tooltip will be shown").addToggle( - (toggle) => toggle.setValue(this.plugin.settings.internalLinkClickFlow).onChange((value) => { - this.plugin.settings.internalLinkClickFlow = value; - this.plugin.saveSettings(); - this.refreshView(); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.editorFlowReplace.name).setDesc(i18n_default.settings.editorFlowReplace.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.editorFlow).onChange((value) => { - this.plugin.settings.editorFlow = value; - this.plugin.saveSettings(); - this.refreshView(); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.editorFlowStyle.name).setDesc(i18n_default.settings.editorFlowStyle.desc).addDropdown((dropdown) => { - dropdown.addOption("classic", i18n_default.settings.editorFlowStyle.classic); - dropdown.addOption("seamless", i18n_default.settings.editorFlowStyle.seamless); - dropdown.addOption("minimal", "Minimal"); - dropdown.setValue(this.plugin.settings.editorFlowStyle).onChange(async (value) => { - this.plugin.settings.editorFlowStyle = value; - document.body.classList.toggle("mk-flow-classic", false); - document.body.classList.toggle("mk-flow-seamless", false); - document.body.classList.toggle("mk-flow-minimal", false); - if (value == "seamless") - document.body.classList.toggle("mk-flow-seamless", true); - if (value == "classic") - document.body.classList.toggle("mk-flow-classic", true); - if (value == "minimal") - document.body.classList.toggle("mk-flow-minimal", true); - }); + return arr; +}; +var useVirtual = function useVirtual2(_ref) { + var _measurements; + var _ref$size = _ref.size, size = _ref$size === void 0 ? 0 : _ref$size, _ref$estimateSize = _ref.estimateSize, estimateSize = _ref$estimateSize === void 0 ? defaultEstimateSize : _ref$estimateSize, _ref$overscan = _ref.overscan, overscan = _ref$overscan === void 0 ? 1 : _ref$overscan, _ref$paddingStart = _ref.paddingStart, paddingStart = _ref$paddingStart === void 0 ? 0 : _ref$paddingStart, _ref$paddingEnd = _ref.paddingEnd, paddingEnd = _ref$paddingEnd === void 0 ? 0 : _ref$paddingEnd, parentRef = _ref.parentRef, _ref$horizontal = _ref.horizontal, horizontal = _ref$horizontal === void 0 ? false : _ref$horizontal, scrollToFn = _ref.scrollToFn, useObserver = _ref.useObserver, initialRect = _ref.initialRect, onScrollElement = _ref.onScrollElement, scrollOffsetFn = _ref.scrollOffsetFn, _ref$keyExtractor = _ref.keyExtractor, keyExtractor = _ref$keyExtractor === void 0 ? defaultKeyExtractor : _ref$keyExtractor, _ref$measureSize = _ref.measureSize, measureSize = _ref$measureSize === void 0 ? defaultMeasureSize : _ref$measureSize, _ref$rangeExtractor = _ref.rangeExtractor, rangeExtractor = _ref$rangeExtractor === void 0 ? defaultRangeExtractor : _ref$rangeExtractor; + var sizeKey = horizontal ? "width" : "height"; + var scrollKey = horizontal ? "scrollLeft" : "scrollTop"; + var latestRef = _2({ + outerSize: 0, + scrollOffset: 0, + measurements: [], + totalSize: 0 + }); + var _React$useState = p2(0), scrollOffset = _React$useState[0], setScrollOffset = _React$useState[1]; + latestRef.current.scrollOffset = scrollOffset; + var useMeasureParent = useObserver || useRect2; + var _useMeasureParent = useMeasureParent(parentRef, initialRect), outerSize = _useMeasureParent[sizeKey]; + latestRef.current.outerSize = outerSize; + var defaultScrollToFn = T2(function(offset) { + if (parentRef.current) { + parentRef.current[scrollKey] = offset; + } + }, [parentRef, scrollKey]); + var resolvedScrollToFn = scrollToFn || defaultScrollToFn; + var scrollTo = T2(function(offset) { + resolvedScrollToFn(offset, defaultScrollToFn); + }, [defaultScrollToFn, resolvedScrollToFn]); + var _React$useState2 = p2({}), measuredCache = _React$useState2[0], setMeasuredCache = _React$useState2[1]; + var measure = T2(function() { + return setMeasuredCache({}); + }, []); + var pendingMeasuredCacheIndexesRef = _2([]); + var measurements = F(function() { + var min3 = pendingMeasuredCacheIndexesRef.current.length > 0 ? Math.min.apply(Math, pendingMeasuredCacheIndexesRef.current) : 0; + pendingMeasuredCacheIndexesRef.current = []; + var measurements2 = latestRef.current.measurements.slice(0, min3); + for (var _i2 = min3; _i2 < size; _i2++) { + var key2 = keyExtractor(_i2); + var measuredSize = measuredCache[key2]; + var _start = measurements2[_i2 - 1] ? measurements2[_i2 - 1].end : paddingStart; + var _size = typeof measuredSize === "number" ? measuredSize : estimateSize(_i2); + var _end = _start + _size; + measurements2[_i2] = { + index: _i2, + start: _start, + size: _size, + end: _end, + key: key2 + }; + } + return measurements2; + }, [estimateSize, measuredCache, paddingStart, size, keyExtractor]); + var totalSize = (((_measurements = measurements[size - 1]) == null ? void 0 : _measurements.end) || paddingStart) + paddingEnd; + latestRef.current.measurements = measurements; + latestRef.current.totalSize = totalSize; + var element = onScrollElement ? onScrollElement.current : parentRef.current; + var scrollOffsetFnRef = _2(scrollOffsetFn); + scrollOffsetFnRef.current = scrollOffsetFn; + useIsomorphicLayoutEffect3(function() { + if (!element) { + setScrollOffset(0); + return; + } + var onScroll = function onScroll2(event) { + var offset = scrollOffsetFnRef.current ? scrollOffsetFnRef.current(event) : element[scrollKey]; + setScrollOffset(offset); + }; + onScroll(); + element.addEventListener("scroll", onScroll, { + capture: false, + passive: true }); - containerEl.createEl("h2", { text: i18n_default.settings.sectionEditor }); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.makeChar.name).setDesc(i18n_default.settings.makeChar.desc).addText((text2) => { - text2.setValue(this.plugin.settings.menuTriggerChar).onChange(async (value) => { - if (value.trim().length < 1) { - text2.setValue(this.plugin.settings.menuTriggerChar); - return; - } - let char = value[0]; - if (value.trim().length === 2) { - char = value.replace(this.plugin.settings.menuTriggerChar, ""); - } - text2.setValue(char); - this.plugin.settings.menuTriggerChar = char; - await this.plugin.saveSettings(); - }); + return function() { + element.removeEventListener("scroll", onScroll); + }; + }, [element, scrollKey]); + var _calculateRange = calculateRange(latestRef.current), start = _calculateRange.start, end = _calculateRange.end; + var indexes = F(function() { + return rangeExtractor({ + start, + end, + overscan, + size: measurements.length }); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.editorMakePlacholder.name).setDesc(i18n_default.settings.editorMakePlacholder.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.makeMenuPlaceholder).onChange((value) => { - this.plugin.settings.makeMenuPlaceholder = value; - this.plugin.saveSettings(); - this.refreshView(); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.mobileMakeBar.name).setDesc(i18n_default.settings.mobileMakeBar.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.mobileMakeBar).onChange((value) => { - this.plugin.settings.mobileMakeBar = value; - this.plugin.saveSettings(); - this.refreshView(); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.inlineStyler.name).setDesc(i18n_default.settings.inlineStyler.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.inlineStyler).onChange((value) => { - this.plugin.settings.inlineStyler = value; - this.plugin.saveSettings(); - this.refreshView(); - }) - ); - containerEl.createEl("h2", { text: i18n_default.settings.sectionAdvanced }); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.spacesFileExplorerDual.name).setDesc(i18n_default.settings.spacesFileExplorerDual.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.spacesDisablePatch).onChange((value) => { - this.plugin.settings.spacesDisablePatch = value; - this.plugin.saveSettings(); - }) - ); - new import_obsidian30.Setting(containerEl).setName("Folder Note Location Inside Folder").setDesc("Turn on to have folder notes inside the folder, turn off to have it outside").addToggle( - (toggle) => toggle.setValue(this.plugin.settings.folderNoteInsideFolder).onChange((value) => { - this.plugin.settings.folderNoteInsideFolder = value; - this.plugin.saveSettings(); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.spacesPerformance.name).setDesc(i18n_default.settings.spacesPerformance.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.spacesPerformance).onChange((value) => { - this.plugin.settings.spacesPerformance = value; - this.plugin.saveSettings(); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.spacesDeleteOption.name).setDesc(i18n_default.settings.spacesDeleteOption.desc).addDropdown((dropdown) => { - dropdown.addOption( - "permanent", - i18n_default.settings.spacesDeleteOptions.permanant - ); - dropdown.addOption("trash", i18n_default.settings.spacesDeleteOptions.trash); - dropdown.addOption( - "system-trash", - i18n_default.settings.spacesDeleteOptions["system-trash"] - ); - dropdown.setValue(this.plugin.settings.deleteFileOption); - dropdown.onChange((option) => { - this.plugin.settings.deleteFileOption = option; - this.plugin.saveSettings(); + }, [start, end, overscan, measurements.length, rangeExtractor]); + var measureSizeRef = _2(measureSize); + measureSizeRef.current = measureSize; + var virtualItems = F(function() { + var virtualItems2 = []; + var _loop = function _loop2(k6, len2) { + var i4 = indexes[k6]; + var measurement = measurements[i4]; + var item = _extends({}, measurement, { + measureRef: function measureRef(el) { + if (el) { + var measuredSize = measureSizeRef.current(el, horizontal); + if (measuredSize !== item.size) { + var _scrollOffset = latestRef.current.scrollOffset; + if (item.start < _scrollOffset) { + defaultScrollToFn(_scrollOffset + (measuredSize - item.size)); + } + pendingMeasuredCacheIndexesRef.current.push(i4); + setMeasuredCache(function(old) { + var _extends2; + return _extends({}, old, (_extends2 = {}, _extends2[item.key] = measuredSize, _extends2)); + }); + } + } + } }); + virtualItems2.push(item); + }; + for (var k5 = 0, len = indexes.length; k5 < len; k5++) { + _loop(k5); + } + return virtualItems2; + }, [indexes, defaultScrollToFn, horizontal, measurements]); + var mountedRef = _2(false); + useIsomorphicLayoutEffect3(function() { + if (mountedRef.current) { + setMeasuredCache({}); + } + mountedRef.current = true; + }, [estimateSize]); + var scrollToOffset = T2(function(toOffset, _temp) { + var _ref2 = _temp === void 0 ? { + align: "start" + } : _temp, align = _ref2.align; + var _latestRef$current = latestRef.current, scrollOffset2 = _latestRef$current.scrollOffset, outerSize2 = _latestRef$current.outerSize; + if (align === "auto") { + if (toOffset <= scrollOffset2) { + align = "start"; + } else if (toOffset >= scrollOffset2 + outerSize2) { + align = "end"; + } else { + align = "start"; + } + } + if (align === "start") { + scrollTo(toOffset); + } else if (align === "end") { + scrollTo(toOffset - outerSize2); + } else if (align === "center") { + scrollTo(toOffset - outerSize2 / 2); + } + }, [scrollTo]); + var tryScrollToIndex = T2(function(index, _temp2) { + var _ref3 = _temp2 === void 0 ? { + align: "auto" + } : _temp2, align = _ref3.align, rest = _objectWithoutPropertiesLoose(_ref3, _excluded); + var _latestRef$current2 = latestRef.current, measurements2 = _latestRef$current2.measurements, scrollOffset2 = _latestRef$current2.scrollOffset, outerSize2 = _latestRef$current2.outerSize; + var measurement = measurements2[Math.max(0, Math.min(index, size - 1))]; + if (!measurement) { + return; + } + if (align === "auto") { + if (measurement.end >= scrollOffset2 + outerSize2) { + align = "end"; + } else if (measurement.start <= scrollOffset2) { + align = "start"; + } else { + return; + } + } + var toOffset = align === "center" ? measurement.start + measurement.size / 2 : align === "end" ? measurement.end : measurement.start; + scrollToOffset(toOffset, _extends({ + align + }, rest)); + }, [scrollToOffset, size]); + var scrollToIndex = T2(function(index, options) { + tryScrollToIndex(index, options); + requestAnimationFrame(function() { + tryScrollToIndex(index, options); }); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.inlineStylerColor.name).setDesc(i18n_default.settings.inlineStylerColor.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.inlineStylerColors).onChange((value) => { - this.plugin.settings.inlineStylerColors = value; - this.plugin.saveSettings(); - this.refreshView(); - }) - ); - new import_obsidian30.Setting(containerEl).setName(i18n_default.settings.editorMarkSans.name).setDesc(i18n_default.settings.editorMarkSans.desc).addToggle( - (toggle) => toggle.setValue(this.plugin.settings.markSans).onChange((value) => { - this.plugin.settings.markSans = value; - this.plugin.saveSettings(); - this.refreshView(); - }) - ); + }, [tryScrollToIndex]); + return { + virtualItems, + totalSize, + scrollToOffset, + scrollToIndex, + measure + }; +}; +var findNearestBinarySearch = function findNearestBinarySearch2(low, high, getCurrentValue, value) { + while (low <= high) { + var middle = (low + high) / 2 | 0; + var currentValue = getCurrentValue(middle); + if (currentValue < value) { + low = middle + 1; + } else if (currentValue > value) { + high = middle - 1; + } else { + return middle; + } + } + if (low > 0) { + return low - 1; + } else { + return 0; } }; - -// src/components/MakeMenu/MakeMenu.tsx -var import_obsidian31 = require("obsidian"); - -// src/components/MakeMenu/commands/default.ts -var default_default = [ - { - label: "todo", - value: "- [ ] ", - icon: "mk-make-todo" - }, - { - label: "list", - value: `- `, - icon: "mk-make-list" - }, - { - label: "ordered-list", - value: `1. `, - icon: "mk-make-ordered" - }, - { - label: "h1", - value: "# ", - icon: "mk-make-h1" - }, - { - label: "h2", - value: "## ", - icon: "mk-make-h2" - }, - { - label: "h3", - value: "### ", - icon: "mk-make-h3" - }, - { - label: "quote", - value: "> ", - icon: "mk-make-quote" - }, - { - label: "divider", - value: ` ---- -`, - icon: "mk-make-hr" - }, - { - label: "link", - value: "", - offset: [-1, 1], - icon: "mk-make-link" - }, - { - label: "image", - value: "![](Paste Link)", - offset: [-1, 4], - icon: "mk-make-image" - }, - { - label: "codeblock", - value: ` -\`\`\` -Type/Paste Your Code -\`\`\``, - offset: [-4, 5], - icon: "mk-make-codeblock" - }, - { - label: "callout", - value: `> [!NOTE] -> Content`, - offset: [-7, 12], - icon: "mk-make-callout" - }, - { - label: "note", - value: "[[Note Name]]", - offset: [-2, 2], - icon: "mk-make-note" - }, - { - label: "table", - value: "table", - icon: "mk-make-table" - }, - { - label: "flow", - value: `!![[Note Name]]`, - offset: [-2, 4], - icon: "mk-make-flow" - }, - { - label: "tag", - value: "#tag", - offset: [0, 1], - icon: "mk-make-tag" +function calculateRange(_ref4) { + var measurements = _ref4.measurements, outerSize = _ref4.outerSize, scrollOffset = _ref4.scrollOffset; + var size = measurements.length - 1; + var getOffset = function getOffset2(index) { + return measurements[index].start; + }; + var start = findNearestBinarySearch(0, size, getOffset, scrollOffset); + var end = start; + while (end < size && measurements[end].end < scrollOffset + outerSize) { + end++; } -]; - -// src/components/MakeMenu/commands/index.ts -function resolveCommands(plugin) { - return default_default; + return { + start, + end + }; } -// src/components/MakeMenu/MakeMenu.tsx -var MakeMenu = class extends import_obsidian31.EditorSuggest { - constructor(app2, plugin) { - super(app2); - this.inCmd = false; - this.cmdStartCh = 0; - this.plugin = plugin; - } - resetInfos() { - this.cmdStartCh = 0; - this.inCmd = false; +// src/components/Spaces/TreeView/FolderTreeView.tsx +var import_obsidian29 = require("obsidian"); +var import_classnames6 = __toESM(require_classnames()); + +// src/components/Spaces/TreeView/SectionView.tsx +var import_classnames5 = __toESM(require_classnames()); +var import_obsidian28 = require("obsidian"); +var SectionItem = k3( + ({ + childCount, + clone, + data, + depth, + disableSelection, + disableInteraction, + ghost, + handleProps, + indentationWidth, + indicator, + collapsed, + style, + onCollapse, + wrapperRef, + plugin, + disabled + }, ref) => { + var _a2, _b2; + const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); + const [spaces2, setSpaces] = Recoil_index_14(spaces); + const space = spaces2.find((f4) => f4.name == data.space); + const newFolderInSection = () => { + var _a3; + let vaultChangeModal = new VaultChangeModal( + plugin, + ((_a3 = space == null ? void 0 : space.def) == null ? void 0 : _a3.length) > 0 ? getFolderFromPath(app, space.def) : defaultNoteFolder(plugin, activeFile2), + "create folder", + data.space + ); + vaultChangeModal.open(); + }; + const newFileInSection = async () => { + var _a3; + const newFile = await createNewMarkdownFile( + plugin, + ((_a3 = space == null ? void 0 : space.def) == null ? void 0 : _a3.length) > 0 ? getFolderFromPath(app, space.def) : defaultNoteFolder(plugin, activeFile2), + "" + ); + if (data.space != "/") + addPathsToSpace(plugin, data.space, [newFile.path]); + }; + const triggerMenu = (e4) => { + data.space == "/" ? triggerVaultMenu(e4) : triggerSectionMenu(plugin, data.space, spaces2, e4); + }; + const triggerVaultMenu = (e4) => { + const refreshFileList = () => { + let event = new CustomEvent(eventTypes.vaultChange); + window.dispatchEvent(event); + }; + const fileMenu = new import_obsidian28.Menu(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Collapse All"); + menuItem.setIcon("lucide-chevrons-down-up"); + menuItem.onClick((ev) => { + plugin.settings.expandedFolders = { + ...plugin.settings.expandedFolders, + "/": [] + }; + plugin.saveSettings(); + }); + }); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Custom Sort"); + menuItem.setChecked(plugin.settings.vaultSort[0] == "rank"); + menuItem.onClick((ev) => { + plugin.settings.vaultSort = ["rank", true]; + plugin.saveSettings(); + refreshFileList(); + }); + }); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("File Name (A to Z)"); + menuItem.setChecked( + plugin.settings.vaultSort[0] == "path" && plugin.settings.vaultSort[1] == true + ); + menuItem.onClick((ev) => { + plugin.settings.vaultSort = ["path", true]; + plugin.saveSettings(); + refreshFileList(); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("File Name (Z to A)"); + menuItem.setChecked( + plugin.settings.vaultSort[0] == "path" && plugin.settings.vaultSort[1] == false + ); + menuItem.onClick((ev) => { + plugin.settings.vaultSort = ["path", false]; + plugin.saveSettings(); + refreshFileList(); + }); + }); + fileMenu.addSeparator(); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Created Time (new to old)"); + menuItem.setChecked( + plugin.settings.vaultSort[0] == "created" && plugin.settings.vaultSort[1] == false + ); + menuItem.onClick((ev) => { + plugin.settings.vaultSort = ["created", false]; + plugin.saveSettings(); + refreshFileList(); + }); + }); + fileMenu.addItem((menuItem) => { + menuItem.setTitle("Created Time (old to new)"); + menuItem.setChecked( + plugin.settings.vaultSort[0] == "created" && plugin.settings.vaultSort[1] == true + ); + menuItem.onClick((ev) => { + plugin.settings.vaultSort = ["created", true]; + plugin.saveSettings(); + refreshFileList(); + }); + }); + if (isMouseEvent(e4)) { + fileMenu.showAtPosition({ x: e4.pageX, y: e4.pageY }); + } else { + fileMenu.showAtPosition({ + x: e4.nativeEvent.locationX, + y: e4.nativeEvent.locationY + }); + } + return false; + }; + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames5.default)( + "mk-tree-wrapper", + "mk-section-wrapper", + clone && "mk-clone", + ghost && "mk-ghost", + disableSelection && "mk-disable-selection", + disableInteraction && "mk-disable-interaction" + ), + ref: wrapperRef, + style: { + ...style, + ...indicator ? { "--spacing": `${indentationWidth * depth}px` } : {} + } + }, /* @__PURE__ */ bn.createElement("div", { + onContextMenu: (e4) => triggerMenu(e4), + className: (0, import_classnames5.default)( + "mk-section", + indicator ? indicator.state == 2 /* Bottom */ ? "mk-indicator-bottom" : indicator.state == 1 /* Top */ ? "mk-indicator-top" : indicator.state == 3 /* Row */ ? "mk-indicator-row" : "" : "" + ) + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-section-title", + onClick: (e4) => onCollapse(data), + ref, + ...handleProps + }, ((_a2 = data.spaceItem) == null ? void 0 : _a2.sticker) ? /* @__PURE__ */ bn.createElement("div", { + dangerouslySetInnerHTML: { + __html: unifiedToNative((_b2 = data.spaceItem) == null ? void 0 : _b2.sticker) + } + }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), /* @__PURE__ */ bn.createElement("div", { + className: "mk-tree-text" + }, data.id == "/" ? plugin.app.vault.getName() : data.space), /* @__PURE__ */ bn.createElement("div", { + className: `mk-collapse ${collapsed ? "mk-collapsed" : ""}`, + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-collapse-sm"] + } + })), /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-buttons" + }, /* @__PURE__ */ bn.createElement("button", { + "aria-label": i18n_default.buttons.createFolder, + onClick: () => { + newFolderInSection(); + }, + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-new-folder"] + } + }), /* @__PURE__ */ bn.createElement("button", { + "aria-label": i18n_default.buttons.newNote, + onClick: () => { + newFileInSection(); + }, + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-new-note"] + } + }))))); } - onTrigger(cursor, editor, _file) { - const currentLine = editor.getLine(cursor.line).slice(0, cursor.ch); - const triggerCharLength = this.plugin.settings.menuTriggerChar.length; - this.file = _file; - if (!this.inCmd && currentLine.slice(0, triggerCharLength) !== this.plugin.settings.menuTriggerChar && currentLine.slice(-2 - triggerCharLength) !== "- " + this.plugin.settings.menuTriggerChar) { - this.resetInfos(); - return null; - } - if (!this.inCmd) { - this.cmdStartCh = currentLine.length - triggerCharLength; - this.inCmd = true; - } - const currentCmd = currentLine.slice(this.cmdStartCh, cursor.ch); - if (currentCmd.includes(" ") || !currentCmd.includes(this.plugin.settings.menuTriggerChar)) { - this.resetInfos(); - return null; - } +); +SectionItem.displayName = "SectionItem"; + +// src/components/Spaces/TreeView/FolderTreeView.tsx +var animateLayoutChanges2 = ({ + isSorting, + wasDragging +}) => isSorting || wasDragging ? false : true; +var SortableTreeItem = ({ + id: id2, + data, + depth, + disabled, + style, + ...props2 +}) => { + const { + attributes, + isDragging, + isSorting, + listeners, + setDraggableNodeRef, + setDroppableNodeRef, + transform, + transition + } = useSortable({ + id: id2, + animateLayoutChanges: animateLayoutChanges2, + disabled, + data + }); + const memoListeners = F(() => { return { - start: cursor, - end: cursor, - query: currentCmd.slice(triggerCharLength) + ...attributes, + ...listeners }; + }, [isSorting]); + if (data.parentId == null) { + return /* @__PURE__ */ bn.createElement(SectionItem, { + ref: setDraggableNodeRef, + wrapperRef: setDroppableNodeRef, + data, + depth, + ghost: isDragging, + disableInteraction: isSorting, + disabled, + style, + handleProps: memoListeners, + ...props2 + }); + } else { + return /* @__PURE__ */ bn.createElement(TreeItem, { + ref: setDraggableNodeRef, + wrapperRef: setDroppableNodeRef, + data, + depth, + ghost: isDragging, + disableInteraction: isSorting, + disabled, + style, + handleProps: memoListeners, + ...props2 + }); } - getSuggestions(context) { - const suggestions = resolveCommands(this.plugin).filter( - ({ label }) => label.toLowerCase().includes(context.query.toLowerCase()) || i18n_default.commands[label] && i18n_default.commands[label].toLowerCase().includes(context.query.toLowerCase()) +}; +var TreeItem = k3( + ({ + childCount, + clone, + data, + depth, + disableSelection, + disableInteraction, + ghost, + handleProps, + active, + indentationWidth, + indicator, + collapsed, + selected, + onCollapse, + onSelectRange, + wrapperRef, + style, + plugin, + disabled + }, ref) => { + var _a2; + const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); + const [selectedFiles2, setSelectedFiles] = Recoil_index_14( + selectedFiles ); - return suggestions.length > 0 ? suggestions : [{ label: i18n_default.commandsSuggest.noResult, value: "", icon: "" }]; - } - renderSuggestion(value, el) { - if (value.value == "") { - el.setText(i18n_default.commandsSuggest.noResult); - return; - } - const div = el.createDiv("mk-slash-item"); - const icon = div.createDiv("mk-slash-icon"); - icon.innerHTML = makeIconSet[value.icon]; - const title = div.createDiv(); - title.setText(i18n_default.commands[value.label]); - } - selectSuggestion(cmd, _evt) { - if (cmd.label === i18n_default.commandsSuggest.noResult) - return; - if (cmd.value == "table") { - this.plugin.createTable(this.file.parent.path).then((f4) => { - this.context.editor.replaceRange( - `![![${this.file.parent.path}/#^${f4}]]`, - { ...this.context.start, ch: this.cmdStartCh }, - this.context.end - ); - this.context.editor.setSelection( - { line: this.context.start.line, ch: 0 } - ); - this.resetInfos(); - this.close(); - }); - } else { - this.context.editor.replaceRange( - cmd.value, - { ...this.context.start, ch: this.cmdStartCh }, - this.context.end + const openFileAtTarget = (file, e4) => { + if (e4.shiftKey) { + onSelectRange(file.id); + return; + } + openAFile( + getAbstractFileAtPath(app, file.item.path), + plugin, + e4.ctrlKey || e4.metaKey ); - if (cmd.offset) { - this.context.editor.setSelection( - { ...this.context.start, ch: this.cmdStartCh + cmd.offset[1] }, - { - ...this.context.end, - ch: this.cmdStartCh + cmd.value.length + cmd.offset[0] - } - ); + setActiveFile(file.item.path); + setSelectedFiles([file]); + }; + const dragStarted = (e4) => { + if (selectedFiles2.length > 1) { + const files = selectedFiles2.map((f4) => f4.file).filter((f4) => f4); + app.dragManager.onDragStart(e4, { + icon: "lucide-files", + source: void 0, + title: files.length + " Files", + type: "files", + files + }); + app.dragManager.dragFiles(e4, files, true); + return; } - this.resetInfos(); - this.close(); - } - } -}; - -// src/components/StickerMenu/StickerMenu.tsx -var import_obsidian32 = require("obsidian"); -var StickerMenu = class extends import_obsidian32.EditorSuggest { - constructor(app2, plugin) { - super(app2); - this.inCmd = false; - this.cmdStartCh = 0; - this.plugin = plugin; - this.emojis = Object.keys(emojis).reduce( - (p3, c4) => [ - ...p3, - ...emojis[c4].map((e4) => ({ - label: e4.n[0], - desc: e4.n[1], - variants: e4.v, - unicode: e4.u - })) - ], - [] - ); - } - resetInfos() { - this.cmdStartCh = 0; - this.inCmd = false; - } - onTrigger(cursor, editor, _file) { - const currentLine = editor.getLine(cursor.line).slice(0, cursor.ch); - if (!this.inCmd && !(currentLine.slice(-2) == " " + this.plugin.settings.emojiTriggerChar || currentLine[0] == this.plugin.settings.emojiTriggerChar)) { - this.resetInfos(); - return null; - } - if (!this.inCmd) { - this.cmdStartCh = currentLine.length - 1; - this.inCmd = true; - } - const currentCmd = currentLine.slice(this.cmdStartCh, cursor.ch); - if (currentCmd.includes(" ") || !currentCmd.includes(this.plugin.settings.emojiTriggerChar)) { - this.resetInfos(); - return null; - } - this.suggestEl.classList.toggle("mk-emoji-menu", true); - return { start: cursor, end: cursor, query: currentCmd.slice(1) }; - } - getSuggestions(context) { - const suggestions = this.emojis.filter( - ({ label, desc }) => label.includes(context.query) || (desc == null ? void 0 : desc.includes(context.query)) - ); - return suggestions.length > 0 ? suggestions : [{ label: i18n_default.commandsSuggest.noResult, unicode: "", desc: "" }]; - } - renderSuggestion(value, el) { - const div = document.createElement("div"); - div.setAttribute("aria-label", value.label); - const reactElement = createRoot(div); - reactElement.render( - /* @__PURE__ */ bn.createElement(bn.Fragment, null, value.unicode.length > 0 ? unifiedToNative(value.unicode) : i18n_default.commandsSuggest.noResult) - ); - el.appendChild(div); - } - selectSuggestion(cmd, _evt) { - if (cmd.label === i18n_default.commandsSuggest.noResult) - return; - this.context.editor.replaceRange( - unifiedToNative(cmd.unicode), - { ...this.context.start, ch: this.cmdStartCh }, - this.context.end - ); - this.resetInfos(); - this.close(); - } -}; - -// src/cm-extensions/markSans/hr.ts -var import_view5 = require("@codemirror/view"); -var import_state7 = require("@codemirror/state"); -var resetLine = import_view5.Decoration.line({ class: "mk-reset" }); -var needsReset = (state, typeString, from, to) => { - const length = to - from; - if (typeString.contains("HyperMD-header")) { - if (parseInt(typeString.replace(/.*HyperMD-header-(\d+).*/, "$1")) == length) { - return true; - } - let truefalse = true; - iterateTreeInSelection({ from, to }, state, { - enter: ({ type, from: from2, to: to2 }) => { - if (type.name.contains("formatting-header")) { - truefalse = false; - } + const file = getAbstractFileAtPath(app, data.item.path); + if (file instanceof import_obsidian29.TFolder) { + app.dragManager.onDragStart(e4, { + icon: "lucide-folder", + source: void 0, + title: file.name, + type: "folder", + file + }); + app.dragManager.dragFolder(e4, file, true); + return; } - }); - return truefalse; - } - return false; -}; -var hrResetFix = import_state7.StateField.define({ - create() { - return import_view5.Decoration.none; - }, - update(value, tr) { - let builder = new import_state7.RangeSetBuilder(); - iterateTreeInDocument(tr.state, { - enter: ({ type, from, to }) => { - if (needsReset(tr.state, type.name, from, to)) { - builder.add(from, from, resetLine); - } + app.dragManager.onDragStart(e4, { + icon: "lucide-file", + source: void 0, + title: file.name, + type: "file", + file + }); + app.dragManager.dragFile(e4, file, true); + }; + const innerProps = !platformIsMobile() ? { + draggable: true, + onDragStart: dragStarted + } : handleProps; + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames6.default)( + "mk-tree-wrapper", + clone && "mk-clone", + ghost && "mk-ghost", + disableSelection && "mk-disable-selection", + disableInteraction && "mk-disable-interaction" + ), + ref: wrapperRef, + style + }, /* @__PURE__ */ bn.createElement("div", { + className: indicator && (0, import_classnames6.default)( + "nav-file", + indicator.state == 2 /* Bottom */ ? "mk-indicator-bottom" : indicator.state == 1 /* Top */ ? "mk-indicator-top" : indicator.state == 3 /* Row */ ? "mk-indicator-row" : "" + ), + style: indicator ? { + "--spacing": `${indentationWidth * indicator.depth}px` + } : {} + }, !platformIsMobile() && /* @__PURE__ */ bn.createElement("div", { + className: "mk-drag-handle", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-handle"] }, + ...handleProps + }), /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames6.default)( + `mk-tree-item ${data.item.folder == "true" ? "nav-folder-title" : "nav-file-title"} ${active && "is-active"} ${selected && "is-selected"}` + ), + ref, + style: { + "--spacing": `${indentationWidth * depth - 28}px` + }, + onClick: (e4) => openFileAtTarget(data, e4), + "data-path": data.item.path, + onContextMenu: (e4) => selectedFiles2.length > 1 && selectedFiles2.some((f4) => f4.id == data.id) ? triggerMultiFileMenu(plugin, selectedFiles2, e4) : triggerFileMenu( + plugin, + data.file, + data.item.folder == "true", + e4 + ), + ...innerProps + }, data.item.folder == "true" && /* @__PURE__ */ bn.createElement("button", { + "aria-label": `${collapsed ? i18n_default.labels.expand : i18n_default.labels.collapse}`, + className: `mk-collapse ${collapsed ? "mk-collapsed" : ""}`, + onClick: (e4) => { + onCollapse(data); + e4.stopPropagation(); + }, + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-collapse"] } - }); - const dec = builder.finish(); - return dec; - }, - provide: (f4) => import_view5.EditorView.decorations.from(f4) -}); -var hrDecorations = (state) => { - let builder = new import_state7.RangeSetBuilder(); - let nodes2 = []; - iterateTreeInDocument(state, { - enter: ({ name, from, to }) => { - if (name.contains("formatting-header") && state.sliceDoc(from, to) == "---" && !(state.selection.main.from >= from && state.selection.main.to <= to)) { - builder.add(from, to, hr); + }), plugin.settings.spacesStickers && /* @__PURE__ */ bn.createElement(FileSticker, { + plugin, + filePath: data.item.path + }), /* @__PURE__ */ bn.createElement("div", { + className: `mk-tree-text ${data.item.folder == "true" ? "nav-folder-title-content" : "nav-file-title-content"}` + }, data.file ? data.item.folder == "true" ? data.file.name : fileNameToString(data.file.name) : "", data.item.folder == "false" && data.file && data.file.extension != "md" && /* @__PURE__ */ bn.createElement("span", { + className: "nav-file-tag" + }, (_a2 = data.file) == null ? void 0 : _a2.extension)), !clone ? /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-buttons" + }, /* @__PURE__ */ bn.createElement("button", { + "aria-label": i18n_default.buttons.moreOptions, + onClick: (e4) => { + triggerFileMenu( + plugin, + data.file, + data.item.folder == "true", + e4 + ); + e4.stopPropagation(); + }, + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-options"] } - } - }); - const dec = builder.finish(); - return dec; -}; -var hrField = import_state7.StateField.define({ - create(state) { - return hrDecorations(state); - }, - update(value, tr) { - if (!tr.docChanged) - return value; - return hrDecorations(tr.state); - }, - provide: (f4) => import_view5.EditorView.decorations.from(f4) -}); -var HRWidget = class extends import_view5.WidgetType { - constructor() { - super(); - } - eq(other) { - return true; - } - toDOM() { - const div = document.createElement("hr"); - return div; + }), data.item.folder == "true" && /* @__PURE__ */ bn.createElement("button", { + "aria-label": i18n_default.buttons.newNote, + onClick: (e4) => { + newFileInFolder(plugin, data.file); + e4.stopPropagation(); + }, + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-plus"] + } + })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null))))); } -}; -var hr = import_view5.Decoration.replace({ - widget: new HRWidget(), - block: false -}); +); +TreeItem.displayName = "TreeItem"; -// src/cm-extensions/inlineStylerView/marks.ts -var import_state8 = require("@codemirror/state"); +// src/hooks/ForceUpdate.tsx +function useForceUpdate() { + const [value, setValue] = p2(0); + return () => setValue((value2) => value2 + 1); +} -// src/cm-extensions/markSans/obsidianSyntax.ts -var oMarks = [ - { - mark: "em", - formatting: "formatting-em", - altFormatting: "em_formatting_formatting-strong", - formatChar: "*" - }, - { - mark: "strong", - formatting: "formatting-strong", - formatChar: "**" - }, - { - mark: "strikethrough", - formatting: "formatting-strikethrough", - formatChar: "~~" - }, - { - mark: "inline-code", - formatting: "formatting-code", - formatChar: "`" - } -]; +// src/components/Spaces/TreeView/FileExplorerVirtualized.tsx +var import_obsidian30 = require("obsidian"); -// src/cm-extensions/inlineStylerView/marks.ts -var toggleMark = import_state8.Annotation.define(); -var trimSpace = (pos, moveDirLeft, state) => { - if (moveDirLeft && state.sliceDoc(pos, pos + 1) == " ") - return pos + 1; - if (!moveDirLeft && state.sliceDoc(pos - 1, pos) == " ") - return pos - 1; - return pos; -}; -var newPosAfterFormatting = (pos, moveDirLeft, state) => { - const line = state.doc.lineAt(pos); - const start = moveDirLeft ? line.from : pos; - const end = moveDirLeft ? pos : line.to; - let newPos = start; - let lastFormatPos = start; - let exitFormatRange = false; - iterateTreeInSelection({ from: start, to: end }, state, { - enter: (node) => { - if (exitFormatRange) - return false; - if (node.name.contains("formatting")) { - if (!moveDirLeft && node.from > start) { - return false; - } - if (moveDirLeft) { - newPos = node.from; - lastFormatPos = node.to; - } else { - newPos = node.to; - } - } - } - }); - if (moveDirLeft && lastFormatPos < pos) { - newPos = pos; +// src/utils/ui/dnd.ts +function getMaxDepth({ previousItem }) { + var _a2; + if (previousItem) { + if (((_a2 = previousItem.item) == null ? void 0 : _a2.folder) == "true") + return previousItem.depth + 1; + return previousItem.depth; } - return newPos; -}; -var expandRange = (selection, state) => { - const from = trimSpace( - newPosAfterFormatting(selection.from, true, state), - true, - state - ); - const to = trimSpace( - newPosAfterFormatting(selection.to, false, state), - false, - state - ); - return { from, to }; -}; -var addMarkAtPos = (pos, mark) => ({ - changes: { from: pos, to: pos, insert: mark.formatChar } -}); -var rangeIsMark = (state, mark, selection) => posIsMark(selection.from, state, mark.mark) && posIsMark(selection.to, state, mark.mark); -var posIsMark = (pos, state, markString) => { - let isMark = false; - iterateTreeAtPos(pos, state, { - enter: ({ name, from, to }) => { - if (nodeNameContainsMark(name, markString)) - isMark = true; - } - }); - return isMark; -}; -var nodeNameContainsMark = (name, markString) => { - return name.contains(markString); -}; -var edgeIsMark = (pos, state, mark) => posIsMark(pos, state, mark.mark); -var edgeIsMarkFormat = (pos, state, mark) => posIsMark(pos, state, mark.formatting) ? true : mark.altFormatting ? posIsMark(pos, state, mark.altFormatting) : false; -var transactionChangesForMark = (range, mark, state) => { - let newTrans = []; - if (rangeIsMark(state, mark, range)) { - if (edgeIsMarkFormat(range.from, state, mark) && !edgeIsMarkFormat(range.to, state, mark)) { - newTrans.push(addMarkAtPos(range.to, mark)); - } - if (edgeIsMarkFormat(range.to, state, mark) && !edgeIsMarkFormat(range.from, state, mark)) { - newTrans.push(addMarkAtPos(range.from, mark)); - } - } else if (edgeIsMark(range.from, state, mark)) { - if (edgeIsMarkFormat(range.from, state, mark) && !edgeIsMark(range.from - 1, state, mark)) { - newTrans.push(addMarkAtPos(range.from, mark)); - } - newTrans.push(addMarkAtPos(range.to, mark)); - } else if (edgeIsMark(range.to, state, mark)) { - if (edgeIsMarkFormat(range.to, state, mark) && !edgeIsMark(range.to + 1, state, mark)) { - newTrans.push(addMarkAtPos(range.to, mark)); + return 0; +} +function getMinDepth({ nextItem }) { + if (nextItem) { + return nextItem.depth; + } + return 0; +} +function getDragDepth(offset, indentationWidth) { + return Math.round(offset / indentationWidth) + 1; +} +function getProjection(items, activeItem, overItemIndex, previousItem, nextItem, dragDepth) { + const activeIsSection = activeItem.parentId == null; + const overIsSection = previousItem.parentId == null; + if (activeIsSection) { + if (overIsSection) { + return { + depth: 0, + maxDepth: 0, + minDepth: 0, + overId: previousItem.id, + parentId: null + }; } - newTrans.push(addMarkAtPos(range.from, mark)); - } else { - newTrans.push(addMarkAtPos(range.to, mark)); - newTrans.push(addMarkAtPos(range.from, mark)); + return null; } - return newTrans; -}; -var removeAllInternalMarks = (sel, state, mark) => { - let returnTrans = []; - iterateTreeInSelection({ from: sel.from, to: sel.to }, state, { - enter: ({ name, from, to }) => { - if (nodeNameContainsMark(name, mark.formatting) || (mark.altFormatting ? nodeNameContainsMark(name, mark.altFormatting) : false)) - returnTrans.push({ - from, - to: from + mark.formatChar.length - }); + if (nodeIsAncestorOfTarget(activeItem, previousItem)) { + return null; + } + if (activeItem.space != previousItem.space) { + if (previousItem.space == "/") { + return null; } + } + const projectedDepth = dragDepth; + const maxDepth = getMaxDepth({ + previousItem }); + const minDepth = getMinDepth({ nextItem }); + let depth = projectedDepth; + if (projectedDepth >= maxDepth) { + depth = maxDepth; + } else if (projectedDepth < minDepth) { + depth = minDepth; + } + if (previousItem.space != "/" && depth > 1) { + return null; + } + if (depth <= activeItem.depth && activeItem.space == previousItem.space) { + if (!activeItem.sortable || !previousItem.sortable) { + return null; + } + } return { - changes: returnTrans + depth, + maxDepth, + minDepth, + overId: previousItem.id, + parentId: getParentId() }; -}; -var toggleMarkExtension = import_state8.EditorState.transactionFilter.of( - (tr) => { - if (!tr.annotation(toggleMark)) - return tr; - const markToggle = tr.annotation(toggleMark); - const mark = oMarks.find((f4) => f4.mark == markToggle); - if (!mark) { - return tr; + function getParentId() { + var _a2, _b2; + if (depth === 0) { + return previousItem.space == "/" ? "/" : previousItem.space + "//"; } - const selection = tr.startState.selection.main; - let newTrans = []; - if (selection.head == selection.anchor) { - if (tr.startState.sliceDoc( - selection.head - mark.formatChar.length, - selection.head - ) == mark.formatChar && tr.startState.sliceDoc( - selection.head, - selection.head + mark.formatChar.length - ) == mark.formatChar) { - newTrans.push({ - changes: { - from: selection.head - mark.formatChar.length, - to: selection.head + mark.formatChar.length - } - }); - } else { - newTrans.push({ - changes: { - from: selection.head, - insert: mark.formatChar + mark.formatChar - }, - selection: { - anchor: selection.head + mark.formatChar.length, - head: selection.head + mark.formatChar.length - } - }); - } - return [tr, ...newTrans]; + if (!previousItem) { + return "/"; } - const range = expandRange(selection, tr.startState); - newTrans.push(removeAllInternalMarks(range, tr.startState, mark)); - let newFrom = range.from; - let newTo = range.to; - newTrans.push(...transactionChangesForMark(range, mark, tr.startState)); - return [tr, ...newTrans, { selection: { anchor: newFrom, head: newTo } }]; + if (depth === previousItem.depth || depth > previousItem.depth && ((_a2 = previousItem.item) == null ? void 0 : _a2.folder) != "true") { + return previousItem.parentId; + } + if (depth > previousItem.depth) { + return previousItem.id; + } + const newParent = (_b2 = items.slice(0, overItemIndex).reverse().find((item) => item.depth === depth)) == null ? void 0 : _b2.parentId; + return newParent != null ? newParent : null; } -); +} -// src/cm-extensions/markSans/selection.ts -var import_state9 = require("@codemirror/state"); -var makerDelete = import_state9.EditorState.transactionFilter.of( - (tr) => { - let newTrans = []; - if (tr.isUserEvent("delete.forward")) { - } - if (tr.isUserEvent("delete.backward") && !tr.isUserEvent("delete.selection") && !tr.isUserEvent("delete.selection.smart")) { - const selection = tr.newSelection.main; - iterateTreeInSelection(selection, tr.startState, { - enter: ({ type, from, to }) => { - const mark = positionMarkOffset(type.name, from, to, tr.startState); - if (mark) { - if (!hasReset(tr.startState, from, to)) { - newTrans.push( - pointDeletion(tr, mark.from, mark.to, selection.from) - ); - } - } +// src/components/Spaces/TreeView/FileExplorerVirtualized.tsx +var VirtualizedList = bn.memo( + (props2) => { + const { + flattenedTree, + projected, + vRef, + selectedFiles: selectedFiles2, + activeFile: activeFile2, + selectRange: selectRange2, + handleCollapse, + plugin, + indentationWidth + } = props2; + const parentRef = bn.useRef(null); + const rowHeight = (index) => platformIsMobile() ? flattenedTree[index].parentId == null ? 52 : 40 : flattenedTree[index].parentId == null ? 40 : 29; + const rowVirtualizer = useVirtual({ + size: flattenedTree.length, + paddingEnd: 24, + parentRef, + estimateSize: bn.useCallback( + (index) => rowHeight(index), + [flattenedTree] + ), + overscan: plugin.settings.spacesPerformance ? 0 : 20 + }); + vRef.current = rowVirtualizer; + rowVirtualizer.scrollToIndex; + return /* @__PURE__ */ bn.createElement("div", { + ref: parentRef, + style: { + width: `100%`, + height: `100%`, + overflow: "auto" + } + }, /* @__PURE__ */ bn.createElement("div", { + style: { + height: `${rowVirtualizer.totalSize}px`, + width: "100%", + position: "relative" + } + }, rowVirtualizer.virtualItems.map((virtualRow) => { + var _a2; + return /* @__PURE__ */ bn.createElement("div", { + key: virtualRow.index, + ref: virtualRow.measureRef, + style: { + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: `${rowHeight(virtualRow.index)}px`, + transform: `translateY(${virtualRow.start}px)` } - }); - } - return [tr, ...newTrans]; + }, /* @__PURE__ */ bn.createElement(SortableTreeItem, { + key: flattenedTree[virtualRow.index].id, + id: flattenedTree[virtualRow.index].id, + data: flattenedTree[virtualRow.index], + disabled: false, + depth: flattenedTree[virtualRow.index].depth, + childCount: 0, + indentationWidth, + indicator: (projected == null ? void 0 : projected.overId) == flattenedTree[virtualRow.index].id ? flattenedTree[virtualRow.index].parentId == null && projected.parentId == null ? { state: 1 /* Top */, depth: projected.depth } : { state: 2 /* Bottom */, depth: projected.depth } : null, + plugin, + style: {}, + onSelectRange: selectRange2, + active: activeFile2 == ((_a2 = flattenedTree[virtualRow.index].item) == null ? void 0 : _a2.path), + selected: selectedFiles2.some( + (g4) => g4.id == flattenedTree[virtualRow.index].id + ), + collapsed: flattenedTree[virtualRow.index].collapsed, + onCollapse: handleCollapse + })); + }))); } ); -var reverseSel = (t4) => { - const sel = t4.selection; - return { selection: import_state9.EditorSelection.single(sel.main.head, sel.main.anchor) }; -}; -var selFromTo = (from, to) => { - return { selection: import_state9.EditorSelection.single(from, to) }; -}; -var delFromTo = (tr, from, to) => { - return { - changes: { from, to }, - annotations: import_state9.Transaction.userEvent.of( - `${tr.annotation(import_state9.Transaction.userEvent)}.smart` - ) +var FileExplorerComponent = (props2) => { + const { plugin } = props2; + const indentationWidth = 24; + const isMobile = platformIsMobile(); + const [vaultItems, setVaultItems] = p2({}); + const [expandedFolders2, setExpandedFolders] = p2(plugin.settings.expandedFolders); + const [expandedSpaces, setExpandedSpaces] = p2( + plugin.settings.expandedSpaces + ); + const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); + const [spaces2, setSpaces] = Recoil_index_14(spaces); + const [vaultSort, setVaultSort] = p2( + plugin.settings.vaultSort.length == 2 ? plugin.settings.vaultSort : ["rank", true] + ); + const [selectedFiles2, setSelectedFiles] = Recoil_index_14( + selectedFiles + ); + const nextTreeScrollPath = _2(null); + const activeSpaces = F( + () => props2.activeSpace ? spaces2.filter((f4) => f4.name == props2.activeSpace) : spaces2.filter((f4) => f4.pinned != "true"), + [spaces2, props2.activeSpace] + ); + const [offsetLeft, setOffsetLeft] = p2(0); + const listRef = _2(null); + const forceUpdate = useForceUpdate(); + const treeForSpace = (space) => { + var _a2, _b2; + let tree = []; + const spaceCollapsed = !expandedSpaces.includes(space.name); + const spaceSort = (_a2 = safelyParseJSON(space.sort)) != null ? _a2 : ["rank", true]; + tree.push(spaceItemToTreeNode(space, spaceCollapsed, spaceSort)); + if (!spaceCollapsed) + ((_b2 = vaultItems[space.name + "/"]) != null ? _b2 : []).sort(folderSortFn(spaceSort[0], spaceSort[1])).forEach((item) => { + var _a3, _b3; + const itemCollapsed = !((_a3 = expandedFolders2[space.name]) == null ? void 0 : _a3.includes( + item.path + )); + tree.push( + vaulItemToTreeNode( + item, + space.name, + "", + 1, + 0, + itemCollapsed, + spaceSort[0] == "rank" || spaceSort[0] == "" + ) + ); + if (!itemCollapsed) + tree.push( + ...flattenedTreeFromVaultItems( + item.path, + space.name, + vaultItems, + (_b3 = expandedFolders2[space.name]) != null ? _b3 : [], + 2, + spaceSort[0], + spaceSort[1] + ) + ); + }); + return tree; }; -}; -var pointDeletion = (tr, from, to, pos) => checkMarkMiddle(from, to, pos) ? deleteMark(tr, from, pos) : null; -var deleteMark = (tr, from, pos) => from == 0 ? delFromTo(tr, from, pos) : delFromTo(tr, from, pos); -var changeSelectionToEndPrevLine = (from, head) => selFromTo(from, head - 1); -var changeSelectionToAfterMark = (head, to) => selFromTo(head, to); -var changeSelectionToMark = (to, head) => selFromTo(to, head); -var rangeBeginsInMark = (from, to, pos) => pos >= from && pos < to; -var rangeEndsAtMark = (from, to, pos) => pos == from; -var pointSelection = (from, to, pos, left) => checkLineStart(from, pos) ? to - from == 1 && left ? selectPreviousLine(from, pos) : selectLineStart(to) : checkMarkMiddle(from, to, pos) ? left && checkMarkMiddleRightMost(from, to, pos) ? selectPreviousLine(from, pos) : selectLineStart(to) : null; -var checkLineStart = (from, pos) => from == pos; -var checkMarkMiddle = (from, to, pos) => pos > from && pos < to; -var checkMarkMiddleRightMost = (from, to, pos) => pos == to - 1; -var selectPreviousLine = (from, pos) => from == 0 ? selFromTo(pos, pos) : selFromTo(from - 1, from - 1); -var selectLineStart = (to) => selFromTo(to, to); -var positionMarkOffset = (typeString, from, to, state) => { - if (typeString.contains("HyperMD-header")) { - return { - from, - to: from + parseInt(typeString.replace(/.*HyperMD-header-(\d+).*/, "$1")) + 1 - }; - } - if (typeString.contains("HyperMD-task-line")) { - return { - from, - to: from + parseInt(typeString.replace(/.*HyperMD-list-line-(\d+).*/, "$1")) + 5 - }; - } - if (typeString.contains("formatting-list-ol")) { - let returnMark = void 0; - iterateTreeInSelection({ from, to }, state, { - enter: ({ type, from: from2, to: to2 }) => { - if (type.name.contains("HyperMD-list-line")) { - returnMark = { - from: from2, - to: from2 + parseInt(type.name.replace(/.*HyperMD-list-line-(\d+).*/, "$1")) + 2 - }; - } - } + const flattenedTree = F(() => { + var _a2; + let tree = []; + activeSpaces.forEach((space) => { + tree.push(...treeForSpace(space)); }); - return returnMark; - } - if (typeString.contains("HyperMD-list-line")) { - return { - from, - to: from + parseInt(typeString.replace(/.*HyperMD-list-line-(\d+).*/, "$1")) + 1 - }; - } - if (typeString.contains("HyperMD-quote") && !typeString.contains("HyperMD-quote-lazy")) { - return { from, to: from + 1 }; - } - return void 0; -}; -var rangeSelection = (from, to, anchor, head) => { - const minFrom = Math.min(anchor, head); - const maxTo = Math.max(anchor, head); - if (rangeEndsAtMark(from, to, maxTo)) { - const newSel = changeSelectionToAfterMark(minFrom, to); - return minFrom == anchor ? newSel : reverseSel(newSel); - } - if (rangeBeginsInMark(from, to, maxTo)) { - const newSel = changeSelectionToEndPrevLine(minFrom, from); - return minFrom == anchor ? newSel : reverseSel(newSel); - } - if (rangeBeginsInMark(from, to, minFrom)) { - const newSel = changeSelectionToMark(to, maxTo); - return minFrom == head ? newSel : reverseSel(newSel); - } - return null; -}; -var hasReset = (state, from, to) => { - var _a2; - let trueFalse = false; - (_a2 = state.field(hrResetFix, false)) == null ? void 0 : _a2.between(from, to, (f4, t4, v3) => { - trueFalse = true; - }); - return trueFalse; -}; -var makerSelect = import_state9.EditorState.transactionFilter.of( - (tr) => { - let newTrans = []; - if (tr.isUserEvent("delete") || tr.isUserEvent("input")) { - return tr; + if (!props2.activeSpace) { + const vaultCollapsed = !expandedSpaces.includes("/"); + tree.push({ + id: "/", + parentId: null, + depth: 0, + index: 0, + space: "/", + item: null, + collapsed: vaultCollapsed, + sortable: vaultSort[0] == "rank" + }); + if (!vaultCollapsed) + tree.push( + ...flattenedTreeFromVaultItems( + "/", + "/", + vaultItems, + (_a2 = expandedFolders2["/"]) != null ? _a2 : [], + 1, + vaultSort[0], + vaultSort[1] + ) + ); } - const selection = tr.newSelection.main; - if (selection.from == 0 && selection.to == 0) - return tr; - iterateTreeInSelection(selection, tr.state, { - enter: ({ type, from, to }) => { - const mark = positionMarkOffset(type.name, from, to, tr.state); - if (mark) { - if (!hasReset(tr.state, from, to)) { - const newSel = selection.from != selection.to ? rangeSelection( - mark.from, - mark.to, - selection.from, - selection.to - ) : pointSelection( - mark.from, - mark.to, - selection.from, - tr.startState.selection.main.from == selection.from + 1 - ); - if (newSel) - newTrans.push(newSel); - } + if (nextTreeScrollPath.current) { + const index = tree.findIndex( + (f4) => { + var _a3; + return ((_a3 = f4.item) == null ? void 0 : _a3.path) == nextTreeScrollPath.current; } + ); + if (index != -1) { + listRef.current.scrollToIndex(index); + nextTreeScrollPath.current = null; } + } + return tree; + }, [ + vaultItems, + activeSpaces, + expandedSpaces, + expandedFolders2, + vaultSort, + props2.activeSpace + ]); + h2(() => { + if (selectedFiles2.length <= 1) { + if (!selectedFiles2[0] || selectedFiles2[0].item.path != activeFile2) + setSelectedFiles([]); + if (plugin.settings.revealActiveFile) + revealFile(getAbstractFileAtPath(app, activeFile2)); + } + window.addEventListener(eventTypes.activeFileChange, changeActiveFile); + return () => { + window.removeEventListener(eventTypes.activeFileChange, changeActiveFile); + }; + }, [activeFile2]); + h2(() => { + window.addEventListener(eventTypes.refreshView, forceUpdate); + window.addEventListener(eventTypes.settingsChanged, settingsChanged); + window.addEventListener(eventTypes.revealFile, handleRevealFileEvent); + return () => { + window.removeEventListener(eventTypes.refreshView, forceUpdate); + window.removeEventListener(eventTypes.settingsChanged, settingsChanged); + window.removeEventListener(eventTypes.revealFile, handleRevealFileEvent); + }; + }, []); + const revealFile = (file) => { + var _a2, _b2; + if (!file) + return; + const folders = file.path.split("/"); + const openPaths = folders.reduce( + (p3, c4, index) => [...p3, index == 0 ? c4 : `${p3[index]}/${c4}`], + ["/"] + ).slice(0, -1); + const newOpenFolders = [ + ...(_b2 = (_a2 = expandedFolders2["/"]) == null ? void 0 : _a2.filter((f4) => !openPaths.find((g4) => g4 == f4))) != null ? _b2 : [], + ...openPaths + ]; + plugin.settings.expandedFolders = { + ...expandedFolders2, + "/": newOpenFolders + }; + nextTreeScrollPath.current = file.path; + plugin.saveSettings(); + }; + const handleRevealFileEvent = (evt) => { + if (evt.detail) + revealFile(evt.detail.file); + }; + h2(() => { + const spaceItems = retrieveSpaceItems(plugin, spaces2); + setVaultItems((g4) => ({ + ...g4, + ...Object.keys(spaceItems).reduce( + (p3, c4) => ({ + ...p3, + [c4 + "/"]: spaceItems[c4].map((f4) => { + var _a2; + return { + ...(_a2 = vaultItemForPath(plugin, f4.path)) != null ? _a2 : {}, + ...f4 + }; + }) + }), + {} + ) + })); + }, [spaces2]); + const retrieveData = async (folders) => { + setSpaces(retrieveSpaces(plugin)); + retrieveFolders(plugin, folders).then( + (f4) => setVaultItems((g4) => ({ ...g4, ...f4 })) + ); + }; + const flatFolders = F(() => { + let allFolders = []; + if (expandedSpaces.includes("/")) + allFolders.push("/"); + expandedSpaces.forEach((space) => { + var _a2; + allFolders.push(...(_a2 = expandedFolders2[space]) != null ? _a2 : []); }); - return [tr, ...newTrans]; - } -); - -// src/cm-extensions/inlineStylerView/inlineStyler.tsx -var import_state10 = require("@codemirror/state"); - -// src/cm-extensions/inlineStylerView/styles/default.ts -var default_default2 = [ - { - label: "bold", - value: `****`, - insertOffset: 2, - icon: "mk-mark-strong", - mark: "strong" - }, - { - label: "italics", - value: "**", - insertOffset: 1, - icon: "mk-mark-em", - mark: "em" - }, - { - label: "strikethrough", - value: "~~~~", - insertOffset: 2, - icon: "mk-mark-strikethrough", - mark: "strikethrough" - }, - { - label: "code", - value: "``", - insertOffset: 1, - icon: "mk-mark-code", - mark: "inline-code" - }, - { - label: "link", - value: "[]()", - insertOffset: 1, - cursorOffset: 2, - icon: "mk-mark-link" - }, - { - label: "blocklink", - value: "[[]]", - insertOffset: 2, - icon: "mk-mark-blocklink" - } -]; - -// src/cm-extensions/inlineStylerView/styles/index.ts -function resolveStyles() { - return default_default2; -} - -// src/cm-extensions/inlineStylerView/Mark.tsx -var Mark = (props2) => { - const { i: i4, style, active, toggleMarkAction } = props2; - return /* @__PURE__ */ bn.createElement("div", { - key: i4, - "aria-label": !platformIsMobile() ? i18n_default.styles[style.label] : void 0, - className: `mk-mark ${style.mark && active ? "mk-mark-active" : ""}`, - dangerouslySetInnerHTML: { __html: markIconSet[style.icon] }, - onMouseDown: (e4) => toggleMarkAction(e4, style) - }); -}; - -// src/cm-extensions/inlineStylerView/InlineMenu.tsx -var import_classnames7 = __toESM(require_classnames()); -var loadStylerIntoContainer = (el, plugin) => { - const root = createRoot(el); - root.render( - /* @__PURE__ */ bn.createElement(InlineMenuComponent, { - mobile: true, - activeMarks: [], - plugin - }) + return allFolders; + }, [expandedSpaces, expandedFolders2]); + h2(() => { + const newFolders = flatFolders; + retrieveData(newFolders); + window.addEventListener(eventTypes.spacesChange, spaceChangeEvent); + return () => { + window.removeEventListener(eventTypes.spacesChange, spaceChangeEvent); + }; + }, [flatFolders]); + const spaceChangeEvent = (evt) => { + if (evt.detail.changeType == "vault" || evt.detail.changeType == "space") { + retrieveData(flatFolders); + } + }; + const changeActiveFile = (evt) => { + let filePath = evt.detail.filePath; + setActiveFile(filePath); + }; + const settingsChanged = () => { + setVaultSort(plugin.settings.vaultSort); + setExpandedFolders(plugin.settings.expandedFolders); + setExpandedSpaces(plugin.settings.expandedSpaces); + }; + h2(() => { + settingsChanged(); + }, []); + const [activeId, setActiveId] = p2(null); + const [overId, setOverId] = p2(null); + const [currentPosition, setCurrentPosition] = p2(null); + h2(() => { + if (!expandedSpaces.includes(props2.activeSpace)) { + plugin.settings.expandedSpaces = uniq([ + ...plugin.settings.expandedSpaces, + props2.activeSpace + ]); + plugin.saveSettings(); + } + }, [props2.activeSpace]); + const sortedIds = F( + () => flattenedTree.map(({ id: id2 }) => id2), + [flattenedTree] ); -}; -var InlineMenuComponent = (props2) => { - const [mode, setMode] = p2(props2.mobile ? 0 : 1); - const [colorMode, setColorMode] = p2(null); - const makeMenu = (e4) => { - var _a2; - e4.preventDefault(); - const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); - if (!cm) - return; - const end = cm.state.selection.main.to; - const insertChars = cm.state.sliceDoc(end - 1, end) == cm.state.lineBreak ? props2.plugin.settings.menuTriggerChar : cm.state.lineBreak + props2.plugin.settings.menuTriggerChar; - cm.dispatch({ - changes: { - from: end, - to: end, - insert: insertChars - }, - selection: { - head: end + insertChars.length, - anchor: end + insertChars.length + const selectRange2 = (fromId) => { + const startIndex = sortedIds.findIndex((f4) => f4 == fromId); + const selectedFilesStartIndex = sortedIds.findIndex( + (f4) => { + var _a2; + return f4 == ((_a2 = selectedFiles2[0]) == null ? void 0 : _a2.id); } - }); + ); + const selectedFilesEndIndex = sortedIds.findIndex( + (f4) => { + var _a2; + return f4 == ((_a2 = selectedFiles2[selectedFiles2.length - 1]) == null ? void 0 : _a2.id); + } + ); + if (startIndex < selectedFilesStartIndex) { + setSelectedFiles( + flattenedTree.slice(startIndex, selectedFilesEndIndex + 1).filter((f4) => f4.item) + ); + } else { + setSelectedFiles( + flattenedTree.slice(selectedFilesStartIndex, startIndex + 1).filter((f4) => f4.item) + ); + } }; - const toggleMarkAction = (e4, s5) => { - var _a2; - e4.preventDefault(); - const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); - if (!cm) + const activeItem = activeId ? flattenedTree.find(({ id: id2 }) => id2 === activeId) : null; + const overIndex = overId ? flattenedTree.findIndex(({ id: id2 }) => id2 === overId) : null; + const overItem = flattenedTree[overIndex]; + const nextItem = flattenedTree[overIndex + 1]; + const dragDepth = F(() => { + return getDragDepth(offsetLeft, indentationWidth); + }, [offsetLeft]); + const projected = F(() => { + return activeId && overId ? getProjection( + flattenedTree, + activeItem, + overIndex, + overItem, + nextItem, + dragDepth + ) : null; + }, [flattenedTree, activeItem, overItem, nextItem, overIndex, dragDepth]); + function handleDragStart(event) { + const { + active: { id: activeId2 } + } = event; + const activeItem2 = flattenedTree.find(({ id: id2 }) => id2 === activeId2); + if (activeItem2.parentId == null && activeItem2.space == "/") return; - if (s5.mark) { - cm.dispatch({ - annotations: toggleMark.of(s5.mark) + setActiveId(activeId2); + setOverId(activeId2); + if (activeItem2) { + setCurrentPosition({ + parentId: activeItem2.parentId, + overId: activeId2 }); - return; } - const selection = cm.state.selection.main; - const selectedText = cm.state.sliceDoc(selection.from, selection.to); - cm.dispatch({ - changes: { - from: selection.from, - to: selection.to, - insert: s5.value.substring(0, s5.insertOffset) + selectedText + s5.value.substring(s5.insertOffset) - }, - selection: s5.cursorOffset ? { - anchor: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length + s5.cursorOffset, - head: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length + s5.cursorOffset - } : { - anchor: selection.from + s5.value.substring(0, s5.insertOffset).length, - head: selection.from + s5.value.substring(0, s5.insertOffset).length + selectedText.length + document.body.style.setProperty("cursor", "grabbing"); + } + function handleDragMove({ delta }) { + setOffsetLeft(Math.max(1, delta.x)); + } + function handleDragOver({ over }) { + var _a2; + const overId2 = over == null ? void 0 : over.id; + if (overId2) { + setOverId((_a2 = over == null ? void 0 : over.id) != null ? _a2 : null); + } + } + function handleDragEnd({ active, over }) { + resetState(); + moveFile(active, over); + } + const moveFile = async (active, over) => { + var _a2, _b2; + if (projected) { + const clonedItems = flattenedTree; + const overIndex2 = clonedItems.findIndex(({ id: id2 }) => id2 === over.id); + const overItem2 = clonedItems[overIndex2]; + const activeIndex = clonedItems.findIndex(({ id: id2 }) => id2 === active.id); + const activeTreeItem = clonedItems[activeIndex]; + const activeIsSection = activeTreeItem.parentId == null; + const overIsSection = overItem2.parentId == null; + const overSpace = activeSpaces.find( + (f4) => f4.name == overItem2.space + ); + if (activeIsSection) { + if (overIsSection) { + insertSpaceAtIndex( + plugin, + activeTreeItem.space, + false, + overSpace ? parseInt(overSpace.rank) : spaces2.length + ); + return; + } } - }); - }; - const makeMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - "aria-label": !platformIsMobile() ? i18n_default.commands.makeMenu : void 0, - onMouseDown: (e4) => { - makeMenu(e4); - }, - className: "mk-mark", - dangerouslySetInnerHTML: { __html: markIconSet["mk-make-slash"] } - }), /* @__PURE__ */ bn.createElement("div", { - "aria-label": !platformIsMobile() ? i18n_default.commands.selectStyle : void 0, - onMouseDown: () => { - setMode(1); - }, - className: "mk-mark", - dangerouslySetInnerHTML: { __html: markIconSet["mk-make-style"] } - }), /* @__PURE__ */ bn.createElement("div", { - "aria-label": !platformIsMobile() ? i18n_default.commands.image : void 0, - onMouseDown: () => { - const view = getActiveMarkdownView(); - props2.plugin.app.commands.commands["editor:attach-file"].editorCallback(view.editor, view); - }, - className: "mk-mark", - dangerouslySetInnerHTML: { __html: markIconSet["mk-make-attach"] } - }), /* @__PURE__ */ bn.createElement("div", { - "aria-label": !platformIsMobile() ? i18n_default.commands.toggleKeyboard : void 0, - onMouseDown: () => { - const view = getActiveMarkdownView(); - props2.plugin.app.commands.commands["editor:toggle-keyboard"].editorCallback(view.editor, view); - }, - className: "mk-mark", - dangerouslySetInnerHTML: { __html: markIconSet["mk-make-keyboard"] } - })); - const colorsMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: "mk-mark", - onMouseDown: () => { - setColorMode(null); - setMode(1); - }, - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } - }), colors.map((c4, i4) => /* @__PURE__ */ bn.createElement("div", { - key: i4, - onMouseDown: () => { - var _a2; - setMode(1); - setColorMode(null); - const cm = (_a2 = props2.cm) != null ? _a2 : getActiveCM(); - if (!cm) + const { depth, overId: overId2, parentId } = projected; + const parentItem = clonedItems.find(({ id: id2 }) => id2 === parentId); + if (overItem2.space != activeItem.space || overItem2.space != "/") { + if (overItem2.space == "/") { + return; + } + if (parentId != overItem2.space + "//" && parentId != null) { + return; + } + if (activeItem.space != overItem2.space && ((_a2 = overSpace == null ? void 0 : overSpace.def) == null ? void 0 : _a2.length) > 0) { + moveAFileToNewParentAtIndex( + plugin, + activeTreeItem.item, + overSpace.def, + vaultItems, + parseInt(overItem2.item.rank) + ); + } else { + insertSpaceItemAtIndex( + plugin, + overItem2.space, + activeItem.item.path, + parseInt((_b2 = overItem2.item) == null ? void 0 : _b2.rank) + ); + } return; - const selection = cm.state.selection.main; - const selectedText = cm.state.sliceDoc( - selection.from, - selection.to - ); - cm.dispatch({ - changes: { - from: selection.from, - to: selection.to, - insert: colorMode.prefix + c4 + colorMode.suffix + selectedText + colorMode.closeTag + } + if (parentId != activeTreeItem.parentId) { + const newParent = parentItem ? parentItem.item.folder == "true" ? parentItem.item.path : parentItem.item.parent : "/"; + const newPath = newParent == "/" ? activeItem.file.name : `${newParent}/${activeItem.file.name}`; + if (plugin.app.vault.getAbstractFileByPath(newPath)) { + new import_obsidian30.Notice(i18n_default.notice.duplicateFile); + return; } - }); - }, - className: "mk-color", - style: { background: c4[1] } - }))); - const marksMode = () => /* @__PURE__ */ bn.createElement(bn.Fragment, null, props2.mobile ? /* @__PURE__ */ bn.createElement("div", { - className: "mk-mark", - onMouseDown: () => { - setMode(0); - }, - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-close"] } - }) : /* @__PURE__ */ bn.createElement(bn.Fragment, null), resolveStyles().map((s5, i4) => { - return /* @__PURE__ */ bn.createElement(Mark, { - i: i4, - style: s5, - active: props2.activeMarks.find((f4) => f4 == s5.mark) ? true : false, - toggleMarkAction - }); - }), props2.plugin.settings.inlineStylerColors ? /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { - className: "mk-divider" - }), /* @__PURE__ */ bn.createElement("div", { - "aria-label": !platformIsMobile() ? i18n_default.styles.textColor : void 0, - onMouseDown: () => { - setMode(2); - setColorMode({ - prefix: ``, - closeTag: "" - }); - }, - className: "mk-mark", - dangerouslySetInnerHTML: { __html: markIconSet["mk-mark-color"] } - }), /* @__PURE__ */ bn.createElement("div", { - "aria-label": !platformIsMobile() ? i18n_default.styles.highlight : void 0, - onMouseDown: () => { - setMode(2); - setColorMode({ - prefix: ``, - closeTag: "" - }); - }, - className: "mk-mark", - dangerouslySetInnerHTML: { - __html: markIconSet["mk-mark-highlight"] + moveAFileToNewParentAtIndex( + plugin, + activeTreeItem.item, + newParent, + vaultItems, + parseInt(overItem2.item.rank) + ); + } else { + updateFileRank( + plugin, + activeTreeItem.item, + vaultItems, + parseInt(overItem2.item.rank) + ); + } } - })) : /* @__PURE__ */ bn.createElement(bn.Fragment, null)); - return /* @__PURE__ */ bn.createElement("div", { - className: (0, import_classnames7.default)("mk-style-menu", props2.mobile ? "" : "menu"), - onMouseDown: (e4) => e4.preventDefault() - }, mode == 0 && props2.mobile ? makeMode() : mode == 2 ? colorsMode() : marksMode()); -}; - -// src/cm-extensions/inlineStylerView/inlineStyler.tsx -var cursorTooltipField = (plugin) => import_state10.StateField.define({ - create: getCursorTooltips(plugin), - update(tooltips3, tr) { - if (!tr.docChanged && !tr.selection) - return tooltips3; - return getCursorTooltips(plugin)(tr.state); - }, - provide: (f4) => showTooltip.computeN([f4], (state) => state.field(f4)) -}); -var getCursorTooltips = (plugin) => (state) => { - return state.selection.ranges.filter((range) => !range.empty).map((range) => { - const expandedRange = expandRange(range, state); - let line = state.doc.lineAt(range.head); - let activeMarks = oMarks.map((f4) => rangeIsMark(state, f4, expandedRange) ? f4.mark : "").filter((f4) => f4 != ""); + }; + const adjustTranslate = ({ transform }) => { return { - pos: Math.min(range.head, range.anchor), - above: true, - strictSide: true, - arrow: false, - create: (view) => { - let dom = document.createElement("div"); - dom.className = "cm-tooltip-cursor"; - const reactElement = createRoot(dom); - reactElement.render( - /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(InlineMenuComponent, { - plugin, - cm: view, - activeMarks, - mobile: false - })) + ...transform, + x: transform.x, + y: transform.y - 10 + }; + }; + function handleDragCancel() { + resetState(); + } + const handleCollapse = T2( + (folder) => { + var _a2; + if (folder.parentId == null) { + if (plugin.settings.expandedSpaces.includes(folder.space)) + plugin.settings.expandedSpaces = plugin.settings.expandedSpaces.filter((f4) => f4 != folder.space); + else + plugin.settings.expandedSpaces = [ + ...plugin.settings.expandedSpaces, + folder.space + ]; + plugin.saveSettings(); + } else { + const openFolders = (_a2 = expandedFolders2[folder.space]) != null ? _a2 : []; + const folderOpen = openFolders == null ? void 0 : openFolders.includes(folder.item.path); + const newOpenFolders = !folderOpen ? [...openFolders, folder.item.path] : openFolders.filter( + (openFolder) => folder.item.path !== openFolder ); - return { dom }; + plugin.settings.expandedFolders = { + ...expandedFolders2, + [folder.space]: newOpenFolders + }; + plugin.saveSettings(); } - }; + }, + [plugin, expandedFolders2, expandedSpaces] + ); + function resetState() { + setOverId(null); + setActiveId(null); + setOffsetLeft(0); + document.body.style.setProperty("cursor", ""); + } + useDndMonitor({ + onDragStart: handleDragStart, + onDragMove: handleDragMove, + onDragOver: handleDragOver, + onDragEnd: handleDragEnd, + onDragCancel: handleDragCancel }); + return /* @__PURE__ */ bn.createElement("div", { + className: "mk-file-tree" + }, /* @__PURE__ */ bn.createElement(SortableContext, { + items: sortedIds, + strategy: verticalListSortingStrategy + }, /* @__PURE__ */ bn.createElement(VirtualizedList, { + vRef: listRef, + flattenedTree, + projected, + handleCollapse, + activeFile: activeFile2, + plugin, + selectedFiles: selectedFiles2, + selectRange: selectRange2, + indentationWidth + }), j3( + /* @__PURE__ */ bn.createElement(DragOverlay, { + dropAnimation: null, + modifiers: [adjustTranslate], + zIndex: 1600 + }, activeId ? /* @__PURE__ */ bn.createElement(SortableTreeItem, { + id: activeId, + data: flattenedTree.find((f4) => f4.id == activeId), + indicator: null, + depth: 0, + disabled: false, + plugin, + selected: false, + active: false, + clone: true, + childCount: 0, + style: {}, + indentationWidth + }) : null), + document.body + ))); +}; + +// src/components/Spaces/SpaceSwitcher/SpaceSwitcher.tsx +var import_classnames7 = __toESM(require_classnames()); +var SpaceSwitcher = (props2) => { + const [activeView2, setActiveView] = Recoil_index_14(activeView); + const [spaces2, setSpaces] = Recoil_index_14(spaces); + const [activeFile2, setActiveFile] = Recoil_index_14(activeFile); + const folder = defaultNoteFolder(props2.plugin, activeFile2); + const { plugin } = props2; + const newFile = async () => { + await createNewMarkdownFile(props2.plugin, folder, "", ""); + }; + const pinnedSpaces = F( + () => spaces2.filter((f4) => f4.pinned == "true"), + [spaces2] + ); + const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14( + activeViewSpace + ); + const newSection = () => { + let vaultChangeModal = new SectionChangeModal(props2.plugin, "", "create"); + vaultChangeModal.open(); + }; + return props2.plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement("div", { + className: "mk-flow-bar-compact" + }, /* @__PURE__ */ bn.createElement(MainMenu, { + plugin: props2.plugin + }), /* @__PURE__ */ bn.createElement("button", { + "aria-label": i18n_default.buttons.newNote, + className: "mk-inline-button", + onClick: () => newFile() + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-icon-small", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-note"] } + })), /* @__PURE__ */ bn.createElement("button", { + "aria-label": "Blink", + className: "mk-inline-button", + onClick: () => props2.plugin.quickOpen() + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-icon-small", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-blink"] } + }))) : /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { + className: "mk-flow-bar" + }, /* @__PURE__ */ bn.createElement("button", { + "aria-label": i18n_default.buttons.newNote, + className: "mk-new-note", + onClick: () => newFile() + }, /* @__PURE__ */ bn.createElement("div", { + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-note"] } + }), /* @__PURE__ */ bn.createElement("p", null, i18n_default.buttons.newNote)), /* @__PURE__ */ bn.createElement("button", { + "aria-label": "Blink", + className: "mk-button-blink", + onClick: () => props2.plugin.quickOpen() + }, /* @__PURE__ */ bn.createElement("div", { + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-blink"] } + }))), /* @__PURE__ */ bn.createElement("div", { + className: "mk-sidebar-switcher" + }, /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames7.default)( + "mk-sidebar-item", + pinnedSpaces.length == 0 && "mk-sidebar-expanded", + activeView2 == "root" && "mk-sidebar-item-active" + ), + onClick: () => setActiveView("root") + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-icon-small", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-spaces"] } + }, " "), pinnedSpaces.length == 0 && /* @__PURE__ */ bn.createElement("div", null, "Spaces")), /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames7.default)( + "mk-sidebar-item", + pinnedSpaces.length == 0 && "mk-sidebar-expanded", + activeView2 == "tags" && "mk-sidebar-item-active" + ), + onClick: () => setActiveView("tags") + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-icon-small", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-tags"] } + }, " "), " ", pinnedSpaces.length == 0 && /* @__PURE__ */ bn.createElement("div", null, "Contexts")), /* @__PURE__ */ bn.createElement("div", { + className: "mk-sidebar-spaces" + }, pinnedSpaces.map((pin) => { + var _a2; + return /* @__PURE__ */ bn.createElement("div", { + onContextMenu: (e4) => triggerSectionMenu(props2.plugin, pin.name, spaces2, e4), + className: (0, import_classnames7.default)( + "mk-sidebar-item mk-sidebar-space", + activeView2 == "space" && activeViewSpace2 == pin.name && "mk-sidebar-item-active" + ), + onClick: () => (setActiveView("space"), setActiveViewSpace(pin.name)), + dangerouslySetInnerHTML: ((_a2 = pin.sticker) == null ? void 0 : _a2.length) > 0 ? { __html: unifiedToNative(pin.sticker) } : null + }, pin.name.substring(0, 1)); + })), /* @__PURE__ */ bn.createElement("div", { + className: (0, import_classnames7.default)("mk-sidebar-item"), + onClick: () => newSection() + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-icon-small", + dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-new-space"] } + }, " ")))); +}; + +// src/components/Spaces/TagContextList/TagContextList.tsx +var TagContextList = (props2) => { + const [tags, setTags] = p2([]); + const openContext = async (tag) => { + openTag(tag, props2.plugin, false); + }; + h2(() => { + window.addEventListener(eventTypes.tagsChange, refreshTags); + return () => { + window.removeEventListener(eventTypes.tagsChange, refreshTags); + }; + }, []); + const refreshTags = () => { + const f4 = loadTags(props2.plugin); + setTags(f4); + }; + h2(() => { + refreshTags(); + }, []); + return /* @__PURE__ */ bn.createElement("div", { + className: "tag-container" + }, /* @__PURE__ */ bn.createElement("div", { + className: "tree-item" + }, tags.map((f4) => /* @__PURE__ */ bn.createElement("div", { + className: "tree-item-self is-clickable", + onClick: () => openContext(f4) + }, f4)))); }; -function cursorTooltip(plugin) { - return cursorTooltipField(plugin); -} -// src/cm-extensions/flowEditor/flowViewUpdates.ts -var import_view6 = require("@codemirror/view"); -var flowViewUpdates = import_view6.EditorView.updateListener.of((v3) => { - if (v3.heightChanged) { - app.workspace.iterateRootLeaves((leaf) => { - var _a2, _b2; - const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; - if (cm && v3.view.dom == cm.dom && cm.state.field(flowTypeStateField, false)) { - if ((_b2 = leaf.containerEl.parentElement) == null ? void 0 : _b2.hasClass("workspace-tab-container")) { - if (cm.state.field(flowTypeStateField, false) != "doc") { - cm.dispatch({ - annotations: portalTypeAnnotation.of("doc") - }); - } - } +// src/components/Spaces/MainList.tsx +var MainList = (props2) => { + const [activeView2, setActiveView] = Recoil_index_14(activeView); + const [spaces2, setSpaces] = Recoil_index_14(spaces); + const [activeViewSpace2, setActiveViewSpace] = Recoil_index_14( + activeViewSpace + ); + const [error, resetError] = P2(); + if (error) + console.log(error); + h2(() => { + if (activeView2 == "space" && !spaces2.some((f4) => f4.name == activeViewSpace2 && f4.pinned == "true")) { + setActiveView("root"); + } + }, [spaces2]); + const sensors = useSensors( + useSensor(MouseSensor, { + activationConstraint: { + distance: 10 + } + }), + useSensor(TouchSensor, { + activationConstraint: { + delay: 250, + tolerance: 5 } + }) + ); + const measuring = { + droppable: { + strategy: MeasuringStrategy.Always + } + }; + const viewForState = (viewType, space) => { + if (viewType == "root") { + return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { + plugin: props2.plugin + }); + } else if (viewType == "tags") { + return /* @__PURE__ */ bn.createElement(TagContextList, { + plugin: props2.plugin + }); + } else if (viewType == "space") { + return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { + plugin: props2.plugin, + activeSpace: space + }); + } + return /* @__PURE__ */ bn.createElement(FileExplorerComponent, { + plugin: props2.plugin }); + }; + return /* @__PURE__ */ bn.createElement(DndContext, { + sensors, + collisionDetection: closestCenter, + measuring + }, /* @__PURE__ */ bn.createElement(SpaceSwitcher, { + plugin: props2.plugin + }), viewForState(activeView2, activeViewSpace2)); +}; + +// src/components/Spaces/FileTreeView.tsx +var FILE_TREE_VIEW_TYPE = "mk-file-view"; +var VIEW_DISPLAY_TEXT = "Spaces"; +var ICON = "layout-grid"; +var FileTreeView = class extends import_obsidian31.ItemView { + constructor(leaf, plugin) { + super(leaf); + this.navigation = false; + this.plugin = plugin; } - if (v3.heightChanged) { - const flowID = v3.state.field(flowIDStateField, false); - if (flowID) { - app.workspace.iterateLeaves((leaf) => { - var _a2; - const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; - if (cm) { - const stateField = cm.state.field(flowEditorInfo, false); - if (stateField) { - if (stateField.find((f4) => f4.id == flowID)) { - cm.dispatch({ - annotations: cacheFlowEditorHeight.of([ - flowID, - v3.view.contentHeight - ]) - }); - } - } - } - }, app.workspace["rootSplit"]); + revealInFolder(file) { + if (file instanceof import_obsidian31.TFolder) { + this.plugin.app.workspace.activeLeaf.setViewState({ + type: CONTEXT_VIEW_TYPE, + state: { type: "folder", folder: file.path } + }); + this.plugin.app.workspace.requestSaveLayout(); + } else { + let evt = new CustomEvent(eventTypes.revealFile, { + detail: { file } + }); + window.dispatchEvent(evt); } } -}); - -// src/cm-extensions/placeholder.ts -var import_view7 = require("@codemirror/view"); -var import_state11 = require("@codemirror/state"); -var placeholderLine = import_view7.Decoration.line({ - attributes: { "data-ph": i18n_default.labels.placeholder }, - class: "cm-placeholder" -}); -var placeholder = import_state11.StateField.define({ - create() { - return import_view7.Decoration.none; - }, - update(value, tr) { - let builder = new import_state11.RangeSetBuilder(); - const currentLine = tr.state.doc.lineAt(tr.state.selection.main.head); - if ((currentLine == null ? void 0 : currentLine.length) == 0) - builder.add(currentLine.from, currentLine.from, placeholderLine); - const dec = builder.finish(); - return dec; - }, - provide: (f4) => import_view7.EditorView.decorations.from(f4) -}); - -// src/cm-extensions/cmExtensions.ts -var cmExtensions = (plugin, mobile) => { - let extensions = [toggleMarkExtension, tooltips({ parent: document.body })]; - if (!mobile && plugin.settings.inlineStyler) { - extensions.push(cursorTooltip(plugin)); + getViewType() { + return FILE_TREE_VIEW_TYPE; } - if (plugin.settings.markSans) { - if (!mobile) { - extensions.push( - hrResetFix, - makerSelect, - makerDelete, - hrField - ); + getDisplayText() { + return VIEW_DISPLAY_TEXT; + } + getIcon() { + return ICON; + } + async onClose() { + let leafs = this.app.workspace.getLeavesOfType(FILE_TREE_VIEW_TYPE); + if (leafs.length == 0) { + let leaf = this.app.workspace.getLeftLeaf(false); + await leaf.setViewState({ type: FILE_TREE_VIEW_TYPE }); } + this.destroy(); } - if (plugin.settings.makeMenuPlaceholder) - extensions.push(placeholder); - if (plugin.settings.editorFlow) { - extensions.push( - flowTypeStateField, - atomicSelect, - editBlockExtensions(), - preloadFlowEditor, - flowEditorField, - flowEditorInfo, - flowIDStateField, - flowViewUpdates - ); + destroy() { + if (this.root) + this.root.unmount(); } - if (plugin.settings.internalLinkClickFlow) { - extensions.push(internalLinkToggle); - } else { - extensions.push(internalLinkHover); + async onOpen() { + this.destroy(); + this.constructFileTree(this.app.vault.getRoot().path, ""); + } + constructFileTree(folderPath, vaultChange) { + this.destroy(); + this.root = createRoot(this.contentEl); + this.root.render( + /* @__PURE__ */ bn.createElement("div", { + className: "mk-sidebar" + }, /* @__PURE__ */ bn.createElement(Recoil_index_2, null, !platformIsMobile() && !this.plugin.settings.spacesCompactMode ? /* @__PURE__ */ bn.createElement(MainMenu, { + plugin: this.plugin + }) : null, /* @__PURE__ */ bn.createElement(MainList, { + plugin: this.plugin + }))) + ); } - return extensions; }; -// src/utils/flow/markdownPost.tsx -var getCMFromElement = (el) => { - let dom = el; - while (!dom.hasClass("cm-editor") && dom.parentElement) { - dom = dom.parentElement; +// src/settings.ts +var import_obsidian32 = require("obsidian"); +var DEFAULT_SETTINGS = { + filePreviewOnHover: false, + markSans: false, + makeMenuPlaceholder: true, + mobileMakeBar: true, + inlineStyler: true, + inlineStylerColors: false, + editorFlow: true, + internalLinkClickFlow: true, + saveAllContextToFrontmatter: false, + editorFlowStyle: "seamless", + autoOpenFileContext: false, + spacesCompactMode: false, + spacesEnabled: true, + spacesPerformance: false, + enableFolderNote: true, + revealActiveFile: false, + spacesStickers: true, + spacesDisablePatch: false, + folderNoteInsideFolder: true, + sidebarTabs: true, + showRibbon: true, + deleteFileOption: "trash", + expandedFolders: {}, + expandedSpaces: ["/"], + folderRank: { + node: "root", + children: [], + isFolder: true + }, + openFolders: [], + fileIcons: [], + spaces: [], + pinnedSpaces: [], + menuTriggerChar: "/", + emojiTriggerChar: ":", + folderContextFile: "context", + tagContextFolder: "Context", + hiddenFiles: ["Context"], + hiddenExtensions: ["mdb"], + vaultSort: ["rank", true], + newFileLocation: "root", + newFileFolderPath: "" +}; +var MakeMDPluginSettingsTab = class extends import_obsidian32.PluginSettingTab { + constructor(app2, plugin) { + super(app2, plugin); + this.plugin = plugin; } - if (!dom.hasClass("cm-editor")) { - return; + refreshView() { + let evt = new CustomEvent(eventTypes.refreshView, {}); + window.dispatchEvent(evt); } - let rcm; - app.workspace.iterateLeaves((leaf) => { - var _a2; - const cm = (_a2 = leaf.view.editor) == null ? void 0 : _a2.cm; - if (cm && dom == cm.dom) { - rcm = cm; - return true; - } - }, app.workspace["rootSplit"]); - return rcm; -}; -var replaceAllEmbed = (el, ctx) => { - let dom = el; - setTimeout(async () => { - let counter = 0; - while (!el.parentElement && counter++ <= 50) - await sleep(50); - if (!el.parentElement) - return; - while (!dom.hasClass("markdown-embed") && dom.parentElement) { - dom = dom.parentElement; - } - if (dom) { - var nodes2 = dom.querySelectorAll(".markdown-embed-link"); - for (var i4 = 0; i4 < nodes2.length; i4++) { - if (nodes2[i4].parentNode === dom) { - dom.removeChild(nodes2[i4]); - const div = dom.createDiv("mk-floweditor-selector"); - const reactEl = createRoot(div); - reactEl.render( - /* @__PURE__ */ bn.createElement(FlowEditorHover, { - toggle: true, - type: "file", - toggleState: false, - toggleFlow: (e4) => { - const cm = getCMFromElement(dom); - const pos = cm == null ? void 0 : cm.posAtDOM(dom); - if (!cm) - return; - iterateTreeInSelection( - { from: pos - 3, to: pos + 4 }, - cm.state, - { - enter: (node) => { - if (node.name.contains("hmd-internal-link")) { - if (cm.state.sliceDoc(node.from - 4, node.from - 3) != "!") { - if (cm.state.sliceDoc(node.to + 2, node.to + 3) != cm.state.lineBreak) { - cm.dispatch({ - changes: [ - { - from: node.from - 3, - to: node.from - 3, - insert: "!" - }, - { - from: node.to + 2, - to: node.to + 2, - insert: cm.state.lineBreak - } - ] - }); - } else { - cm.dispatch({ - changes: { - from: node.from - 3, - to: node.from - 3, - insert: "!" - } - }); - } - } - } - } - } - ); - e4.stopPropagation(); - }, - openLink: (e4) => { - e4.stopPropagation(); - openFileFlowEditor(ctx.sourcePath, "/"); - } - }) - ); + display() { + let { containerEl } = this; + containerEl.empty(); + containerEl.createEl("h2", { text: "Appearance" }); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.sidebarTabs.name).setDesc(i18n_default.settings.sidebarTabs.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.sidebarTabs).onChange((value) => { + this.plugin.settings.sidebarTabs = value; + this.plugin.saveSettings(); + document.body.classList.toggle("mk-hide-tabs", !value); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.hideRibbon.name).setDesc(i18n_default.settings.hideRibbon.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.showRibbon).onChange((value) => { + this.plugin.settings.showRibbon = value; + this.plugin.saveSettings(); + document.body.classList.toggle("mk-hide-ribbon", !value); + }) + ); + new import_obsidian32.Setting(containerEl).setName("Compact Mode").setDesc("Display the Spaces menu in a more compact format").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.spacesCompactMode).onChange((value) => { + this.plugin.settings.spacesCompactMode = value; + this.plugin.detachFileTreeLeafs(); + this.plugin.saveSettings(); + }) + ); + containerEl.createEl("h2", { text: i18n_default.settings.sectionSidebar }); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.spaces.name).setDesc(i18n_default.settings.spaces.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.spacesEnabled).onChange((value) => { + this.plugin.settings.spacesEnabled = value; + this.plugin.saveSettings(); + if (value) { + this.plugin.openFileTreeLeaf(true); + } else { + this.plugin.detachFileTreeLeafs(); } - } - } - }); -}; - -// node_modules/monkey-around/mjs/index.js -function around(obj, factories) { - const removers = Object.keys(factories).map((key2) => around1(obj, key2, factories[key2])); - return removers.length === 1 ? removers[0] : function() { - removers.forEach((r3) => r3()); - }; -} -function around1(obj, method, createWrapper) { - const original = obj[method], hadOwn = obj.hasOwnProperty(method); - let current = createWrapper(original); - if (original) - Object.setPrototypeOf(current, original); - Object.setPrototypeOf(wrapper, current); - obj[method] = wrapper; - return remove; - function wrapper(...args) { - if (current === original && obj[method] === wrapper) - remove(); - return current.apply(this, args); - } - function remove() { - if (obj[method] === wrapper) { - if (hadOwn) - obj[method] = original; - else - delete obj[method]; - } - if (current === original) - return; - current = original; - Object.setPrototypeOf(wrapper, original || Function); + this.refreshView(); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.spacesStickers.name).setDesc(i18n_default.settings.spacesStickers.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.spacesStickers).onChange((value) => { + this.plugin.settings.spacesStickers = value; + this.plugin.saveSettings(); + this.refreshView(); + }) + ); + new import_obsidian32.Setting(containerEl).setName("Enable Folder Note").setDesc( + "Access the folder note in the folder page and hide the folder note from spaces" + ).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.enableFolderNote).onChange((value) => { + this.plugin.settings.enableFolderNote = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian32.Setting(containerEl).setName("Reveal Active File").setDesc("Automatically reveal the active file in Spaces").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.revealActiveFile).onChange((value) => { + this.plugin.settings.revealActiveFile = value; + this.plugin.saveSettings(); + }) + ); + containerEl.createEl("h2", { text: "Context" }); + new import_obsidian32.Setting(containerEl).setName("Auto Open File Context").setDesc("Automatically open file context panel in the right panel").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.autoOpenFileContext).onChange((value) => { + this.plugin.settings.autoOpenFileContext = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian32.Setting(containerEl).setName("Save All Context Fields to Frontmatter").setDesc( + "Turn on to automatically save all context fields to frontmatter fields, not just existing frontmatter fields." + ).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.autoOpenFileContext).onChange((value) => { + this.plugin.settings.autoOpenFileContext = value; + this.plugin.saveSettings(); + }) + ); + containerEl.createEl("h2", { text: i18n_default.settings.sectionFlow }); + new import_obsidian32.Setting(containerEl).setName("Open Flow Editor on Internal Link Click").setDesc( + "Turn on to toggle Flow Editor directly by clicking on internal links, otherwise a tooltip will be shown" + ).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.internalLinkClickFlow).onChange((value) => { + this.plugin.settings.internalLinkClickFlow = value; + this.plugin.saveSettings(); + this.refreshView(); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.editorFlowReplace.name).setDesc(i18n_default.settings.editorFlowReplace.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.editorFlow).onChange((value) => { + this.plugin.settings.editorFlow = value; + this.plugin.saveSettings(); + this.refreshView(); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.editorFlowStyle.name).setDesc(i18n_default.settings.editorFlowStyle.desc).addDropdown((dropdown) => { + dropdown.addOption("classic", i18n_default.settings.editorFlowStyle.classic); + dropdown.addOption("seamless", i18n_default.settings.editorFlowStyle.seamless); + dropdown.addOption("minimal", "Minimal"); + dropdown.setValue(this.plugin.settings.editorFlowStyle).onChange(async (value) => { + this.plugin.settings.editorFlowStyle = value; + document.body.classList.toggle("mk-flow-classic", false); + document.body.classList.toggle("mk-flow-seamless", false); + document.body.classList.toggle("mk-flow-minimal", false); + if (value == "seamless") + document.body.classList.toggle("mk-flow-seamless", true); + if (value == "classic") + document.body.classList.toggle("mk-flow-classic", true); + if (value == "minimal") + document.body.classList.toggle("mk-flow-minimal", true); + }); + }); + containerEl.createEl("h2", { text: i18n_default.settings.sectionEditor }); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.makeChar.name).setDesc(i18n_default.settings.makeChar.desc).addText((text2) => { + text2.setValue(this.plugin.settings.menuTriggerChar).onChange(async (value) => { + if (value.trim().length < 1) { + text2.setValue(this.plugin.settings.menuTriggerChar); + return; + } + let char = value[0]; + if (value.trim().length === 2) { + char = value.replace(this.plugin.settings.menuTriggerChar, ""); + } + text2.setValue(char); + this.plugin.settings.menuTriggerChar = char; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.editorMakePlacholder.name).setDesc(i18n_default.settings.editorMakePlacholder.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.makeMenuPlaceholder).onChange((value) => { + this.plugin.settings.makeMenuPlaceholder = value; + this.plugin.saveSettings(); + this.refreshView(); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.mobileMakeBar.name).setDesc(i18n_default.settings.mobileMakeBar.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.mobileMakeBar).onChange((value) => { + this.plugin.settings.mobileMakeBar = value; + this.plugin.saveSettings(); + this.refreshView(); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.inlineStyler.name).setDesc(i18n_default.settings.inlineStyler.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.inlineStyler).onChange((value) => { + this.plugin.settings.inlineStyler = value; + this.plugin.saveSettings(); + this.refreshView(); + }) + ); + containerEl.createEl("h2", { text: i18n_default.settings.sectionAdvanced }); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.spacesFileExplorerDual.name).setDesc(i18n_default.settings.spacesFileExplorerDual.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.spacesDisablePatch).onChange((value) => { + this.plugin.settings.spacesDisablePatch = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian32.Setting(containerEl).setName("Folder Note Location Inside Folder").setDesc( + "Turn on to have folder notes inside the folder, turn off to have it outside" + ).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.folderNoteInsideFolder).onChange((value) => { + this.plugin.settings.folderNoteInsideFolder = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.spacesPerformance.name).setDesc(i18n_default.settings.spacesPerformance.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.spacesPerformance).onChange((value) => { + this.plugin.settings.spacesPerformance = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.spacesDeleteOption.name).setDesc(i18n_default.settings.spacesDeleteOption.desc).addDropdown((dropdown) => { + dropdown.addOption( + "permanent", + i18n_default.settings.spacesDeleteOptions.permanant + ); + dropdown.addOption("trash", i18n_default.settings.spacesDeleteOptions.trash); + dropdown.addOption( + "system-trash", + i18n_default.settings.spacesDeleteOptions["system-trash"] + ); + dropdown.setValue(this.plugin.settings.deleteFileOption); + dropdown.onChange((option) => { + this.plugin.settings.deleteFileOption = option; + this.plugin.saveSettings(); + }); + }); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.inlineStylerColor.name).setDesc(i18n_default.settings.inlineStylerColor.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.inlineStylerColors).onChange((value) => { + this.plugin.settings.inlineStylerColors = value; + this.plugin.saveSettings(); + this.refreshView(); + }) + ); + new import_obsidian32.Setting(containerEl).setName(i18n_default.settings.editorMarkSans.name).setDesc(i18n_default.settings.editorMarkSans.desc).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.markSans).onChange((value) => { + this.plugin.settings.markSans = value; + this.plugin.saveSettings(); + this.refreshView(); + }) + ); } -} +}; -// src/utils/spaces/patches.ts +// src/components/Blink/Blink.tsx var import_obsidian33 = require("obsidian"); -var patchFileExplorer = (plugin) => { - plugin.register( - around(import_obsidian33.Workspace.prototype, { - getLeavesOfType(old) { - return function(type) { - if (type == "file-explorer") { - return old.call(this, FILE_TREE_VIEW_TYPE); - } - return old.call(this, type); - }; + +// src/components/Blink/BlinkComponent.tsx +var BlinkComponent = bn.forwardRef( + (props2, ref) => { + const [previewPath, setPreviewPath] = p2(null); + const [allItems, setAllItems] = p2([]); + const defaultOptions3 = F( + () => app.workspace.getLastOpenFiles().filter((f4) => getAbstractFileAtPath(app, f4)).map((f4) => ({ + description: f4, + value: f4, + name: filePathToString(f4) + })), + [] + ); + h2(() => { + const allTags = loadTags(props2.plugin).map((f4) => ({ + value: f4, + name: f4 + })); + const allNotes = getAllAbstractFilesInVault( + props2.plugin, + app + ).map((f4) => ({ + name: fileNameToString(f4.name), + description: f4.path, + value: f4.path + })); + setAllItems([...allNotes, ...allTags]); + }, []); + const loadPreview = (path) => { + if (previewPath != path && getAbstractFileAtPath(app, path)) { + setPreviewPath(path); } - }) - ); -}; -var patchWorkspace = (plugin) => { - let layoutChanging = false; - const uninstaller = around(import_obsidian33.Workspace.prototype, { - changeLayout(old) { - return async function(workspace) { - layoutChanging = true; - try { - await old.call(this, workspace); - } finally { - layoutChanging = false; - } - }; - }, - iterateLeaves(old) { - return function(arg1, arg2) { - if (old.call(this, arg1, arg2)) - return true; - let cb = typeof arg1 === "function" ? arg1 : arg2; - let parent = typeof arg1 === "function" ? arg2 : arg1; - if (!parent) - return false; - if (layoutChanging) - return false; - if (parent === app.workspace.rootSplit || import_obsidian33.WorkspaceContainer && parent instanceof import_obsidian33.WorkspaceContainer) { - for (const popover of FlowEditor.popoversForWindow( - parent.win - )) { - if (old.call(this, cb, popover.rootSplit)) - return true; - } - } - return false; - }; - }, - getDropLocation(old) { - return function getDropLocation(event) { - for (const popover of FlowEditor.activePopovers()) { - const dropLoc = this.recursiveGetTarget(event, popover.rootSplit); - if (dropLoc) { - return dropLoc; + }; + const hoverItem = (item) => { + loadPreview(item); + }; + const selectItem = (item) => { + if (!item) + return; + const type = viewTypeByString(item); + if (type == "file" || type == "folder") { + openAFile(getAbstractFileAtPath(app, item), props2.plugin, false); + } + if (type == "tag") { + openTag(item, props2.plugin, false); + } + }; + const optionProps = { + multi: false, + editable: false, + onHover: hoverItem, + value: [], + options: allItems, + defaultOptions: defaultOptions3, + saveOptions: (_4, items) => selectItem(items[0]), + placeholder: "Quickly Search a File, Folder, Tag... Press Tab to Edit", + searchable: true, + showAll: true + }; + return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(OptionMenu, { + ref, + ...optionProps, + hide: props2.hide, + previewComponent: previewPath && /* @__PURE__ */ bn.createElement("div", { + className: "mk-blink-preview" + }, /* @__PURE__ */ bn.createElement(FlowView, { + plugin: props2.plugin, + path: previewPath, + load: true + })) + })); + } +); + +// src/components/Blink/Blink.tsx +var Blink = class extends import_obsidian33.Modal { + constructor(app2, plugin) { + super(app2); + this.ref = bn.createRef(); + this.plugin = plugin; + this.modalEl.toggleClass("mk-blink-modal", true); + this.modalEl.toggleClass("modal", false); + this.modalEl.toggleClass("prompt", true); + const keys = [...this.scope.keys]; + for (let i4 = 0; i4 < keys.length; i4++) { + if (keys[i4].key == "Escape") { + this.scope.unregister(keys[i4]); + this.scope.register([], "Escape", () => { + var _a2; + const blurred = (_a2 = this.ref) == null ? void 0 : _a2.current(); + if (blurred) { + this.close(); } - } - return old.call(this, event); - }; - }, - onDragLeaf(old) { - return function(event, leaf) { - const hoverPopover = FlowEditor.forLeaf(leaf); - return old.call(this, event, leaf); - }; + }); + } } - }); - plugin.register(uninstaller); + this.root = createRoot(this.modalEl); + this.root.render( + /* @__PURE__ */ bn.createElement(BlinkComponent, { + ref: this.ref, + plugin, + hide: () => this.close() + }) + ); + } }; -// wasm-binary:/Users/cen/Documents/GitHub/make-md/src/utils/db/sqljs/sql-wasm.wasm -var sql_wasm_exports = {}; -__export(sql_wasm_exports, { - default: () => sql_wasm_default -}); -var sql_wasm_default = __toBinary("AGFzbQEAAAABrQRHYAJ/fwF/YAF/AX9gA39/fwBgAX8AYAN/f38Bf2ACf38AYAR/f39/AX9gBX9/f39/AX9gBH9/f38AYAZ/f39/f38Bf2AFf39/f38AYAJ/fgF/YAR/f39+AX9gBn9/f39/fwBgB39/f39/f38Bf2AAAX9gAXwBfGABfgF/YAJ/fgBgA39/fgF/YAJ/fwF+YAAAYAF/AX5gBH9+f38Bf2AHf39/f39/fwBgCX9/f39/f39/fwF/YAh/f39/f39/fwF/YAN/fn8Bf2ACf3wAYAV/fn5+fgBgCX9/f39/f39/fwBgBX9/f39+AGAFf39+f38Bf2ADf39+AGADf35/AGADf35+AX9gAAF8YAF/AXxgBH9+fn8AYAh/f39/f39/fwBgBH5+fn4Bf2ALf39/f39/f39/f38AYAN8fH8BfGACfHwBfGAEf39+fwBgBn9/f35/fwF/YAF+AX5gBX9+f39/AX9gAn9+AX5gBn9/f39/fgF/YAR/f39/AX5gAn5+AXxgCH9+fn9/f39/AX9gAn58AX9gC39/f39/f39/f39/AX9gAnx/AXxgAXwBf2ACfH8Bf2AHf39/f35/fwF+YAl/fn9+fn5+f38Bf2AEf39/fgBgAnx+AX9gCn9/f39/f39/f38Bf2ADf398AX9gB39/f39/fHwAYAF8AX5gBX9+fn5/AX9gCH9/fn5+f39/AX9gBH9+f38AYA1/f39/f39/f39/f39/AGACf38BfALNASIBYQFhAAgBYQFiAAQBYQFjAAEBYQFkACQBYQFlACQBYQFmAAEBYQFnAAQBYQFoAAABYQFpAAABYQFqAAUBYQFrAAcBYQFsAAQBYQFtAAABYQFuAAIBYQFvAAYBYQFwAAQBYQFxAA8BYQFyAAYBYQFzAAEBYQF0AAYBYQF1AAYBYQF2AAYBYQF3AAkBYQF4AAkBYQF5AAQBYQF6AAABYQFBAAABYQFCAAABYQFDAAEBYQFEAAYBYQFFAAABYQFGAAABYQFHAAABYQFIAAYDkw+RDwYDBwQCBQQBBQEEAQUBAAEBDgUGBAkFBQEEBAECCAULAQECBQEABAMAEQMAAAMlBAYABgALARMDAAAcAQUWAQcDEgIABQMGAQAGAgILCAQEAQAABBEBCAYMAAQAAgEFBQwFAQQAAAIKAwQCCwEAEgUBAgMABAABFAoFAwMBAQACAAIdAAMGBCYEAgYGAxEEEgoDBQIZAAoTFRUABQIABgAGAAYBAQYLAAAFABECAgoEBAURBQgTBSACAQEECAUCBAELBQAEAR0IBQAPBQAECAEEBQQCBwMDAQEIERQBCAABDgQBAQcBBwoBAAABAwgBMgsDAQUUFAEDGgYABAYECwUHARsBAwMBBgMABgMDBAUGAwAEAQMnAwQAAAEFBgACAQABAgYAAQQKAwQFARMEAAcBAQUBAxcHBAMCAgAAAQAABAEBAggAAggGAgMDAAUDAQIAAAYAAAUBAAACAwAmBAgEAQAXBAADAwQGBQUAAQEEAwoFAAgHBQICEQIXBAMGAgAEAgMEBAMFAwMDBQAAAAEbBQEFBAIEBgECAQAIBDMoBQkFAwgAGQMABQIDBgs0BAECBAMNAgQHAR4AAgYHAQgCAwUABQcHCgIJKQgFBgQFNQgTBAADBgYBBAAFBQYAAQkINgUAAAAFAQUCBQUAAAQBAAoBARAqKwEQHDcQAQUGCwMDBAYCBQMDAwMHAgAABQgCDQQGBQIAGAEACgICGgEAAgYKAAADDgYFCAUFAQEABQEBBAUFBwAFGAgHAQEECwUIAwgFARYHAwcEBgMABAAWAQMDAQQAARoHARYGAwEFAAEFAQMDAgUBBQ0FAB0BAwIGBAYBAwUfBAABAAQYBgQDAQEAAgQBBAMBAwUBAAAAAQQUCQ4JBQUCAwQABQoIAQcFAQkCBggEAR4IAgAaAAUEAw0EAykFAQADBAYFCAUFAAIABQUEBAgOBAQNDQICBgIKGAIGBQMABQABBAEBAhIOBAcFAwcAAQQFAAAMBQEAAQQBBiwDAAAEBRIFCQMEAAAEAAEDBAADAwUDAwQDBwACAwMDAwADAAMGAAMFAAEBOAcGCwYEAAgDAwQtBSwFAQQPAi4BBjkQEBIdKAMQAwMBAQIACAIDBQUHAAIDBDo7BgEABgcMAAALAgMFAAEDAwECAw4AAQEBAQMDBQMBAwMDBwADAwEKBwUDAQUKAAECAAYBAAYECgEABgIUAAgTBC0BBAUFAgsFBQACDQIFBg4GChYICAUBBgoDBAoCCAgABQcFAwAFBh4NDgIFBQUVCAECBQgFAgYBBQAFCAIDBgMBAwMBAwACBAUCAgIHBQIIBgYEAgIDBAgCBQoICgMDAgMEAQEIAgQADAQGADwACQAEBgIGAgAEBAAABQI9AAUBAQIDAQEIBQEDAQAAAQAAIAAGAwEHBgMGAAEWBgABBAYAEgEBFAEBBAMCAQUABQMDBQAHAwEDAgEGBgYBAQYEAQEBAAENAT4CAAAAIAUDAAQDBgEEAAcGAAAMCgEBBgUSDAQBCwEBAQMBBwEABAUGAwAGAwMvAA8DAQILFwADAAEDAQEEAAEAAQMJBwAHAgUABBkZBQIDAAUVFQQCBwcEAQ4DAQYGBQEbBQEDBQQEAAc/AAEAAAEBCBwCAQEAAUAFQQABEBAqBAEFADAAARArAgMCBQMFAS4FAAEFAQEABgUhCQkGCRMDCAAjCAAACgIEBgdCBwcCAQAhBA4ABAcHAQIFBwYNCgADAAEGBAEBBAEBMA4BAQEBAwAGAwgAAAQBBAAEQwAGGQMAAQABBgACAAYAAwUBBQMDBgEBAQMGAQUABQQFAQADERwAAgMCAgECAggIAAEFBQ0BAAoABSceDQYGBgcFBQANAAcAAAEFRAUGBQAABQEvAQUDBAICAgcfBSMLIwAKBAgaAAUIChgJAgACCgMABQMIBQUFBgUAAgAABAABBgoGBgIAAgEEBAMAAAAFBAAABQICBQABBgQAAAAACQADBQIIAAQDAgQEAgAFAgUYBQQIAQEFAgMCBA1FAA0DBQAEAQcBAAAJAAAECQkJBAQEAAADBAYGBgQDBwAAAgIAAgAMDAEGBgMbFwEEAAALDAwBAAAAAAEAAQ8ABBsXJQAGBwEBBAAAAAALDAwBAAcHAAYCAAEBAAEARgIEAQABBAQAMQAAAAsABAQAAQAPAQMPDyIDAwMiAwABAAIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgEAAAQBAQcBAAkABAEHAQABAAkEBAQDBAQEBAICAgIBAAAABwEBBgAEAQcBAAEACQkBCQQJBAAAAAYGAAAABAEHAQABAAkJBgQCAQEDAQMFCAIEBQQDAQEAAwEABAAEBQQCAAYGBwMDAgIDAwICAgICAgICAgICAgICAgICAgMCAwICAwMCAgMCAwMDAgMCAwIAAgICAAACAQAAAgICAwMCAgMCAwMCAwICAgICAgICAgICAgICAgICAgICAgICAgIDAwICAgICAgICAwICAgIAAAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAABQAAAAUAAAAAAAAFBQAFBAUBcADSAwUHAQGAAoCAAgYJAX8BQYCtxAILB5YCNAFJAgABSgDgBwFLACMBTADUDAFNACsBTgCDDQFPAJcDAVAAQwFRAJgBAVIAOgFTAGkBVACPDQFVAI0CAVYAYAFXAC8BWAC+AwFZAFwBWgBkAV8AgAEBJADwDAJhYQBZAmJhAD8CY2EA5wkCZGEARwJlYQCDBQJmYQDkCQJnYQCMAgJoYQDJAQJpYQDvDAJqYQCLAgJrYQD7AgJsYQCCBQJtYQDRAgJuYQDiCQJvYQB1AnBhAOEJAnFhAO4MAnJhAO0MAnNhAM0CAnRhAPYBAnVhAOsMAnZhAOoMAndhAMMJAnhhAOYMAnlhAPkBAnphAPgBAkFhAQACQmEAuw0CQ2EA8wkCRGEAhg0CRWEAhQ0CRmEAhA0JowcBAEEBC9EDyweGBSOvDNEI1QnpDOgM5wy8CeUM5AyrBOwMvQyGC7wMuwy2DLUMtAyzDLIMsQypDKsM8AOmDKUMowyiDKEMOZUMsg/WBKIPoQ+wD6APnw+eD50PnA+bDyeuD9MBZvMCmg+ZD5gPeNsLqw+MD4sPsQ/xC/8Big+vD60PrA+qD6kPqA8upw/zAqYPpQ+kD6MPlw+WD5UPlA+TD5EPkg+PD44PkA+ND4YP1Q7UDtEO0A7MDu4Khw6EDvcN9g3yDfEN8w2HA/UN9A3sDcgK2wHTDdUN1A3SDdEN0A3PDc4NsAyuDK0MrAyqDKgMpwykDKsIoAyfDJ4M4wzJDMgM4gzhDOAM3wzeDN0M3AyuCdsM2gzZDNgM1wzWDIYF1QzTDNIM0QyBDYIN+wzzDP0M/Az+DPYM8QyADfIM0Az5DPQM/wyHDfgM9wzPDPUM+gzODPMC8wLNDMwMywyiCcoMxwzGDMUMxAzzAsMMwgzBDMAMvwy+DLoMuQy4DJUJ8wK3DJ0MnAzTBJsMmgyZDJQImAyXDJYMiQ+ID4cPhQ+ED4MPgg+BD4AP/w7+Dv0O/A77DvoO+Q74DvcO9g71DvQO8w7yDvEO8A7vDu4O7Q7sDusO6g7pDugO5w7mDuUO5A7jDuIO4Q7gDt8O3g7dDtwO2w7aDtkO2A7XDtYO0g7PDs4OzQ7LDsoOyQ7IDscOxg6CC8UOgQuCC8QOgQvDDsIOwQ7ADr8Ovg69DrwOuw6GBboOuQ64DrcO/wr+CvwKtg61DrQOsw6yDrEOsA6vDq4OrQ6sDqsOqg6pDqgOpw6mDqUOpA6jDqIOoQ6gDp8Ong6dDpwOmw6aDpkOmA6XDpYOlQ6UDpMO7AqSDusKhgWRDpAOjw6ODtMOjQ6MDosOig7oCokOiA6GDoUO6w3qDekNggfoDecN5g3lDcEK5A3jDeIN4Q3gDb4K6wrfDd4N3Q3cDfMC2w3aDYMO3QqCDokHgQ6ADv8N/g39DfwN+w3bCvoN+Q34DfAN0wTLCokH7w3uDdMEywqJB+0N2Q3YDdcN1g3NDcwNyw3KDckNyA2LCscNxg3FDcQNww3TBIoKwg3BDcANvw2+Db0NvA2QDY4NjA2IDboNuQ24DbcNtg21DbQNsw2yDbENsA2vDa4NrQ2sDasNqg2pDagNpw2mDaUNpA2jDaINoQ2gDZ8Nng2dDZwNmw2aDZkNmA2XDZYNlQ2UDZMNkg2RDY0Niw2KDYkNCpyVIZEPDgAgACABIAIgA0EAECQLLgAgAARAQYD0AygCAARAQQAgABCBAhCEBUEJQQEQhAULIABBpPQDKAIAEQMACwt0AQF/IAAoAmwiBSAAKAJwTgRAIAAQ2AkEf0EBBSAAIAEgAiADIAQQJAsPCyAAIAVBAWo2AmwgACgCaCAFQRRsaiIAQQA2AhAgACAENgIMIAAgAzYCCCAAIAI2AgQgAEEAOwECIAAgAToAACAAQQA6AAEgBQszAQF/IAIEQCAAIQMDQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLIAALnwEBAn8jAEEQayIEJAAgACgCACIDQX42AkQgBCACNgIMIAMgASACEJEDIQEgAygCREF+TARAIANBfzYCRAsCQCADLQBbBEAgAyABECcgAy0AV0UNASAAQQc2AgwgACAAKAIkQQFqNgIkDAELIAAgACgCJEEBajYCJCADIAAoAgQQJyAAQQA2AogCIABBATYCDCAAIAE2AgQLIARBEGokAAsNACABBEAgACABEF4LCykBAX8gAgRAIAAhAwNAIAMgAToAACADQQFqIQMgAkEBayICDQALCyAACw8AQQsgAEG4ywAQiAVBCwsOACAAIAEgACgCbBDXAwsJACAAQQEQjgULDgAgACABIAJBAEEAECQLKQAgACgAACIAQRh0IABBCHRBgID8B3FyIABBCHZBgP4DcSAAQRh2cnILDgAgAQRAIAAgARDuAwsLEgAgAC8BEEE/cUHg6QFqLQAAC1QBAn8DQAJAAkAgAC0AACICIAEtAAAiA0YEQCACDQFBACECDAILIAJBwOcBai0AACADQcDnAWotAABrIgINAQsgAUEBaiEBIABBAWohAAwBCwsgAgsWACAARQRAQQAPCyAAED1B/////wNxCxMAIAAgACgCOEEBayIANgI4IAALGwAgACAAIAEgAiADIAQQJCIAIAUgBhDWASAAC4YBAQN/IAFBf3MhAiAAKAIMIgEoAjggASgCPGpBAEgEQCAAIQMgASIAIAAoAgAgACgCQEEKIAAoAjhrIgRBAnStEPQDIgE2AkACQCABRQRAIABBADYCPAwBCyAAIAQ2AjwgASACQQJ0aiADKAJsNgIACw8LIAEoAkAgAkECdGogACgCbDYCAAtaAQF/IAAoAgBCNBBWIgQEQCAEQQBBNBAoIgRB//8DOwEiIAQgAToAACAAKAIAIAQgAiADEIEIIAAgBCgCGBDHBBogBA8LIAAoAgAgAhAuIAAoAgAgAxAuIAQLFgAgAUUEQEEADwsgACABIAJBABDJBws4ACAAIAEgAiADIAQQJCEBIAAoAgAtAFdFBEAgACgCaCABQRRsaiIAIAU2AhAgAEH9AToAAQsgAQskAQF/IAAoAmwiAkEASgRAIAAoAmggAkEUbGpBEmsgATsBAAsLSwEDfyABBEAgAUEIaiECIAEoAgAhAwNAIAAgAigCABAuIAAgAigCBBAnIAJBEGohAiADQQFKIQQgA0EBayEDIAQNAAsgACABEF4LCzoBAn8gAEUEQEEADwsgACgCACEBIAApA4gBQgBVBEAgASAAEN4HCyAAEIcKIQIgABCFCiABIAIQogEL9AEBAX8gAUUEQAJ/IAAoAgAiAULYABBWIgBFBEAgASACEC4gAAwBCyAAQoGAgIDAADcCACAAIAI2AgggAEIANwIMIABBADYCFCAACw8LIAEoAgAiAyABKAIETgRAAn8gACgCACEDIAEgASgCBCIAQQF0NgIEIAMgASAAQQV0QQhyrRC5ASIARQRAIAMgARA5IAMgAhAuIAAMAQsgACAAKAIAIgFBAWo2AgAgACABQQR0aiIBQQA2AhQgAUIANwIMIAEgAjYCCCAACw8LIAEgA0EBajYCACABIANBBHRqIgBBADYCFCAAQgA3AgwgACACNgIIIAELKAEBfyMAQRBrIgMkACADIAI2AgwgACABIAIQkQMhACADQRBqJAAgAAtpAQN/AkAgACIBQQNxBEADQCABLQAARQ0CIAFBAWoiAUEDcQ0ACwsDQCABIgJBBGohASACKAIAIgNBf3MgA0GBgoQIa3FBgIGChHhxRQ0ACwNAIAIiAUEBaiECIAEtAAANAAsLIAEgAGsLJAEBfyMAQRBrIgMkACADIAI2AgwgACABIAIQuwMgA0EQaiQACw8AIAAgASACQQEgAxCUBAswAQF/AkAgAUUNACAALQATIgJBB0sNACAAIAJBAWo6ABMgACACQQJ0aiABNgKYAQsLGgAgACABEI0BIgAEQCAAQQAgAacQKBoLIAALNAEBfyAAKAIIIgEEfyABBQJAIAAoAnQNACAAKAIALQBQQQhxDQAgAEEBOgAXCyAAENsJCwupFwEWfyAAEPUHBEBBhKYFEJ8BDwsgACgCACEMAkADQAJ/IAAoAgAhBQJAAkAgAC0AlQEiAkECRg0AA0ACQAJAIAJB/wFxQQFrDgMAAwEDCyAALQCWAUEDcQRAIABBETYCJEEBIQIgACwAlAFBAE4NBCAAEOMGIQIMBAsgBSgCuAEiAkUEQCAFQQA2AqgCCwJAIAUtAF5BggFxRQ0AIAUtALEBDQAgACgCxAFFDQAgBSgCACAAQYgBahDlBhogBSgCuAEhAgsgBSACQQFqNgK4ASAALQCWASIBQcAAcQR/IAEFIAUgBSgCwAFBAWo2AsABIAAtAJYBC0EYdEEYdUEASARAIAUgBSgCvAFBAWo2ArwBCyAAQQI6AJUBIABBADYCIAwCCyAAEDoaIAAtAJUBIQIMAAsACwJAIAAtAJYBQQxxBEBBACEBQQAhA0EAIQtBACENIwBBEGsiDiQAIAAoAgAhDyAAKAJYIgdBKGohEUEBIQQgAC0AlgFBDHFBBEcEQCAPLQAjQQFxIQQLIBFBCBCpAyAAQQA2AngCQCAAKAIkQQdGBEAgDxBPQQEhBAwBCyAALQCWAUEMcUEIRiEWIAAoAmwhEAJAIAQEfyAAKAJYQegCagVBAAsiCkUNACAKLQAQQRBxBEAgCigCCCENIAooAgxBAnYhAwsDQCABIANGDQEgDSABQQJ0aigCACgCBCAQaiEQIAFBAWohAQwACwALIABB6ABqIQkgACgCICEIA0ACQCAIIgJBAWohCCACIBBOBEAgAEEANgIkQeUAIQQgAiEBDAELIAkhBAJAIAAoAmwiBiACIgFKDQAgAiAGayEBQQAhBgNAIAEgDSAGQQJ0aigCACIEKAIEIgtIDQEgBkEBaiEGIAEgC2shAQwACwALIAQoAgAhCwJAIApFDQAgCyABQRRsaiISLQABQfwBRw0AQQAhBiADQQAgA0EAShshEyADQQFqIgRBAnQhFANAAkAgBiATRwR/IA0gBkECdGooAgAgEigCEEcNASAGBSATCyADRw0CIAAgCiAUIANBAEcQvwMiBjYCJCAGBEBBASEEDAQLIAooAggiDSADQQJ0aiASKAIQNgIAIAogFDYCDCAKIAovARBBwOQDcUEQcjsBECASKAIQKAIEIBBqIRAgBCEDDAILIAZBAWohBgwACwALQQAhBCAWRQ0AIAsgAUEUbGotAAAiBkG5AUYNACAGQcAARyACQQBMcg0BCwsgACAINgIgIA4gATYCDCAOIAs2AgggBA0AIA4oAgwhBCAOKAIIIQggDygCqAIEQCAAQQk2AiQgAEEJENMCQQAQkwFBASEEDAELQQAhAyMAQdABayIBJAAgAUG4AWpBAEEAQQBBgJTr3AMQmgFBuNUAIQkCQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkAgCCAEQRRsaiIKIgIsAAFBD2oODgMJBAYIBwsAAgsKDQUBCwsgASACKAIQIgIvAQY2AhAgAUG4AWpBw/wAIAFBEGoQPgNAIAIvAQYgA0sEQCACKAIQIANqLQAAIQkgASACIANBAnRqKAIUIgYEfyAGKAIABUGt5QELIgZBmJ0BIAZB8PoBEJUBGzYCCCABQfe7AUGt5QEgCUECcRs2AgQgAUH+uwFBreUBIAlBAXEbNgIAIAFBuAFqQecsIAEQPiADQQFqIQMMAQsLIAFBuAFqQZTQAUEBEEQMDQsgAigCECICLQAEIQMgASACKAIANgIgIAEgA0ECdEGA+wFqKAIANgIkIAFBuAFqQesuIAFBIGoQPgwMCyACKAIQIgIoAiAhAyABIAIsAAA2AjQgASADNgIwIAFBuAFqQcnAASABQTBqED4MCwsgAigCECgCBCICKAIgIQMgASACLAAANgJEIAEgAzYCQCABQbgBakHJwAEgAUFAaxA+DAoLIAEgAigCECkDADcDUCABQbgBakHp7gAgAUHQAGoQPgwJCyABIAIoAhA2AmAgAUG4AWpBpIMBIAFB4ABqED4MCAsgASACKAIQKwMAOQNwIAFBuAFqQZjdACABQfAAahA+DAcLIAIoAhAiAi8BECIDQQJxBEAgAkEIagwFCyADQSRxBEAgASACKQMANwOQASABQbgBakHp7gAgAUGQAWoQPgwHCyADQQhxBEAgASACKwMAOQOAASABQbgBakGY3QAgAUGAAWoQPgwHC0GCmAFB7sEBIANBAXEbIQkMBQsgASACKAIQKAIINgKgASABQbgBakGxyQAgAUGgAWoQPgwFCyACKAIQIgIoAgAhCUEBIQMDQCADIAlNBEAgASACIANBAnRqKAIANgK0ASABQdsAQSwgA0EBRhs2ArABIAFBuAFqQagOIAFBsAFqED4gA0EBaiEDDAELCyABQbgBakGnigFBARBEDAQLIAIoAhAMAQsgAkEQagsoAgAiCUUNAQsgAUG4AWogCRDVAQsgAS0AzAFBB3EEQCAPEE8LIAFBuAFqEMUBIQMgAUHQAWokAEEIIQEgBwJ/IAAtAJYBQQxxQQhGBEAgESAIIARBFGxqIgE0AgQQkAEgB0HQAGogATQCCBCQASAHQfgAaiABNAIMEJABQQQhAUEEDAELIBEgBKwQkAEgB0HQAGogCi0AAEECdEGQ+wFqKAIAQn9BAUEAENkBGiAHQfgAaiAIIARBFGxqIgI0AgQQkAEgB0GgAWogAjQCCBCQASAHQcgBaiACNAIMEJABIAdBmAJqIAIzAQIQkAEgB0HAAmoQYkEGC0EobGogA0J/QQFBAxDZARogACARNgJ4IAAgATsBkAEgAEEHQQAgDy0AVyIBGzYCJEEBQeQAIAEbIQQLIA5BEGokACAEIQEMAQsgBSAFKALEAUEBajYCxAEgABDoCSEBIAUgBSgCxAFBAWs2AsQBCyABQeQARgRAIAVB5AA2AkBB5AAMAgsgACkDiAFCAFUEQCAFIAAQ3gcLQeUAIQICQCABQeUARgRAIAUtAFVFDQFBACECQQAhAQNAIAUoAhQgAkoEQAJAIAJBBHQiAyAFKAIQaigCBCIERQ0AIAQQTCAEEI4BKALoASIEBH8gBCgCDCEIIARBADYCDCAIBUEACyIEQQBMDQAgBSgCjAIiCEUgAXINACAFKAKQAiAFIAUoAhAgA2ooAgAgBCAIEQYAIQELIAJBAWohAgwBCwsgACABNgIkQQFB5QAgARshAgwBCyABIQIgACwAlAFBAE4NACAAEOMGIQILIAUgAjYCQCAAKAIAIAAoAiQQogFBB0cNACAAQQc2AiQgAkEHIAAsAJQBQQBOGyECCyAFKAJIIAJxCyIBQRFHDQEgFUEyRgRAQREPCyAAKAIgIQUjAEEQayIDJAAgABDnCSEBAkAgACgCACICIAFBfyAALQCUASAAIANBDGpBABDJBCIIBEAgCEEHRw0BIAIQTwwBCyADKAIMIQQjAEHwAWsiASQAIAEgBEHwARAlIQkgBCAAQfABECUhAiAAIAlB8AEQJSEBIAIoAgghByACIAEoAgg2AgggASAHNgIIIAIoAgQhByACIAEoAgQ2AgQgASAHNgIEIAIoAsQBIQcgAiABKALEATYCxAEgASAHNgLEASACKALIASEHIAIgASgCyAE2AsgBIAEgBzYCyAEgASACKALgATYC4AEgASACLQCUAToAlAEgAUGgAWogAkGgAWpBJBAlGiABIAEoArQBQQFqNgK0ASAJQfABaiQAQQAhAQNAIAQuARAgAUoEQCABQShsIgIgACgCZGogBCgCZCACahDdCSABQQFqIQEMAQsLIARBADYCJCAEEJgCGgsgA0EQaiQAAkAgCARAIAwoAqACECshASAMIAAoAnwQJyAMLQBXDQEgACAMIAEQWjYCfCAAIAwgCBCiASIANgIkIAAPCyAVQQFqIRUgABA6GiAFQQBIDQEgAEH+AToAkwEMAQsLQQchASAAQQc2AiQgAEEANgJ8CyABC2MBAn8gACgCECIDIAJqIgQgACgCCE8EQCAAIAIQtwYiAkEASgRAIAAoAgQgACgCEGogASACECUaIAAgACgCECACajYCEAsPCyACBEAgACAENgIQIAAoAgQgA2ogASACECUaCwspACAAIAFBCHRBgID8B3EgAUEYdHIgAUEIdkGA/gNxIAFBGHZycjYAAAs9AQF/IAAtABMiAUUEQCAAIAAoAixBAWoiADYCLCAADwsgACABQQFrIgE6ABMgACABQf8BcUECdGooApgBC3EBAX8gACgCCCICLgEQQQBOBEACfyAAKAIIIQIgAUEATARAIAIQYiACQQA2AghBAAwBCyAC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ACgCWCABKAIIQShsaiIALQARQZABcQRAIAAQYiAAQQQ7ARAgAA8LIABBBDsBECAAC3ABA38jAEEQayIEJABB7PUDKAIABEAgBCACNgIMIwBB8AFrIgMkACADQdgBaiIFQQAgA0HSAUEAEJoBIAUgASACELsDQez1AygCACEBQfD1AygCACAAIAUQxQEgARECACADQfABaiQACyAEQRBqJAALCgAgACgCACgCFAsNACAAKAIAIAGsEJABC80BAQN/IAEEQCABQQhqIQIDQCABKAIAIARKBEAgAigCBCIDBEAgACADEF4LIAAgAigCCBAnIAIoAgwiAwRAIAAgAxBeCyACLwAlIgNBAnEEfyAAIAIoAjgQJyACLwAlBSADC0EEcQRAIAAgAigCOBA5CyAAIAIoAhAQ0wEgAigCFCIDBEAgACADEGYLIAIoAiwhAwJAIAItACZBBHEEQCAAIAMQ7QEMAQsgA0UNACAAIAMQLgsgAkFAayECIARBAWohBAwBCwsgACABEF4LCxUAIAAgASACIAMgACgCACgCCBEMAAs/AQF+AkAgACkDECICIAApAwhaBEAgAEEBEMoDDQEgACkDECECCyAAIAJCAXw3AxAgACgCBCACp2ogAToAAAsL4gEBAX8DQAJAIAAoAgRBgMAQcQRAIABBDGohAAwBCwJ/IAAtAAAiAUGwAUYEQCAALQACIQELAkACQAJAAkACQAJAIAFBsQFrDgICAQALIAFBigFHBEACQCABQacBaw4DAAUABAsgACgCLCIBRQ0EIAEgAC4BIBC8BAwGCyAAKAIUKAIcQQhqIQAMBgsgACgCDCgCFCgCHCAALgEgQQR0akEIaiEADAULIAAoAhRBCGohAAwECyABQSRGDQELIAAtAAEMAQsgACgCCEEAENEEC0EYdEEYdQ8LIAAoAgAhAAwACwALZQEBfyABEJ4BIQMCQCAALQAXRSADRXINACADLQAAQbABRg0AIAMQygVFDQAgAkEANgIAIAAgA0F/EMkFDwsgAiAAEEYiASAAIAMgARDvASIDRwR/IAAgARBAQQAFIAELNgIAIAMLNwEBfyABQQBIBEAgACgCbEEBayEBC0HwpwQhAiAAKAIALQBXBH9B8KcEBSAAKAJoIAFBFGxqCwt7AQN/AkAgAUEASA0AIAAoAhxBIHFFDQAgACgCBCEEA0Ag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KAIkIAIQNjYCJCADIAAgASgCKCACEHA2AiggAyAAIAEoAiwgAhA2NgIsIAMgACABKAIwIAIQcDYCMCABLQAAIQUgAyAENgI4IAMgBToAACADQQA2AjQgACABKAI8IAIQNiEEIANCADcCCCADIAQ2AjwgASgCBCEEIANCfzcCFCADIARBX3E2AgQgAyABLwECOwECIAAgASgCQBDnCyEEIANBADYCRCADIAQ2AkAgASgCSCEHIwBBEGsiBSQAIAVBADYCDCAFQQxqIQQDQAJAIAdFDQAgBCAAQQAgBxDlCyIENgIAIARFDQAgBEEkaiEEIAcoAiQhBwwBCwsgBSgCDCEEIAVBEGokACADIAQ2AkgCQCABKAJEBEAgAC0AVwRAIAMgASgCEDYCEAwCCyMAQSBrIgQkACAEQQA2AgwgBEHAADYCCCAEQcEANgIEIAQgAzYCGCAEQQA2AgAgBCADEGoaIARBIGokAAsgAC0AVyEEIAMgASgCEDYCECAERQ0CCyADQQA2AjggACADEGYLIAYoAgwhACAGQRBqJAAgAA8LIAggAzYCACABKAI0IQEgA0E0aiEIIAMhBAwACwALeQEBfyABBH8gAkUEQCABDwsgACgCACEDAkAgASgCBEGBgICAAnFBgICAgAJHBEAgAigCBEGBgICAAnFBgICAgAJHDQELIAAtANABQQFLDQAgACABENcHIAAgAhDXByADQZsBQeK7ARBxDwsgAEEsIAEgAhA1BSACCwu7AwEDfwJAIAFFDQACQCAABEAgACgCkAQNAQsgASABKAIYQQFrIgI2AhggAg0BCyAAIQIgASgCCCEAA0AgAARAIAAoAhQhAwJAIAIEQCACKAKQBA0BCyABLQArQQFGDQAgACgCGEEYaiAAKAIAQQAQqAEaCyACIAAQ2gQgAyEADAELCwJAAkACQAJAIAEtACsOAgABAgsgASgCMCEAA0AgAARAAkAgAgRAIAIoApAEDQELIAAoAgwhAwJAIAAoAhAiBARAIAQgAzYCDAwBCyABKAI8QThqIAMgACADGygCCCADEKgBGgsgACgCDCIDRQ0AIAMgACgCEDYCEAsgAiAAKAIcEPEDIAIgACgCIBDxAyAAKAIEIQMgAiAAECcgAyEADAELCwwCC0EAIQACQCACBEAgAigCkAQNAQtBACABEK8IGgsgASgCMARA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KAKgAiABQQEQxgULIARBEGokAAs7AQF/IAAoAgAiAi0AV0UEQCACIAAoAmggAUEUbGoiACwAASAAKAIQEIwEIABBADYCECAAQbgBOwEACwvCAQEBfwJAIAAoAgAtAFcNACABLQAEQYABcQ0AIwBBIGsiAyQAIANBxwA2AgQgAyAANgIAIAAtABYEQCADQQA2AgwgA0HIADYCCCADIAEQahoLIANBADsBFCADQT82AgwgA0HJADYCCCADIAEQahogA0EgaiQAIAAoAiQNACAAIAEgAhDaCyAAKAIkDQAjAEEgayICJAAgAkHKADYCDCACQTI2AgggAkHHADYCBCACIAA2AgAgAiABEGoaIAJBIGokAAsLRQEBfyAAKAIAQgwQjQEiAwRAIAMgACgCgAE2AgAgACADNgKAASADIAE2AgggAyACNgIEIAIPCyAAKAIAIAIgAREFAEEACw8AQQ4gAEGN6AAQiAVBDgsUAQF/EOwBBH9BAAUgACABEMgBCwtIAQF/IABBASABdCICIAAoApgBcjYCmAECQCABQQFGDQAgACgCACgCECABQQR0aigCBC0ACUUNACAAIAAoApwBIAJyNgKcAQsLHQEBfxDsAQR/QQAFIAAgAUEAIAFBAEobrRDIAQsLZQEDfyACRQRAQQAPCwJAIAAtAAAiA0UNAANAAkAgAS0AACIFRQ0AIAJBAWsiAkUgAyAFR3INACABQQFqIQEgAC0AASEDIABBAWohACADDQEMAgsLIAMhBAsgBEH/AXEgAS0AAGsLcgECfwJAIAAoAgAgACgCDGoiAkEATARAQQEhAiAALQAQQRBxRQ0BC0EHIQEgACACQQEQvwMNAEEAIQEgACgCCCAAKAIMakEAIAAoAgAQKBogACAAKAIMIAAoAgBqNgIMIAAgAC8BEEH/8wNxOwEQCyABC8kKAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhCECQgAhASACUARAQoCAgICAgOD//wAhCgwDCyAKQoCAgICAgMD//wCEIQoMAgsgASALhFAEQEIAIQEMAgsgAiADhFAEQEIAIQEMAgsgC0L///////8/WARAIAVB0ABqIAEgDSABIA0gDVAiBht5IAZBBnStfKciBkEPaxCpAUEQIAZrIQYgBSkDWCINQiCIIQ4gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAwgAyAMIAxQIggbeSAIQQZ0rXynIghBD2sQqQEgBiAIa0EQaiEGIAUpA0ghDCAFKQNAIQMLIANCD4YiC0KAgP7/D4MiAiABQiCIIgR+IhAgC0IgiCITIAFC/////w+DIgF+fCIPQiCGIhEgASACfnwiCyARVK0gAiANQv////8PgyINfiIVIAQgE358IhEgDEIPhiISIANCMYiEQv////8PgyIDIAF+fCIUIA8gEFStQiCGIA9CIIiEfCIPIAIgDkKAgASEIgx+IhYgDSATfnwiDiASQiCIQoCAgIAIhCICIAF+fCIQIAMgBH58IhJCIIZ8Ihd8IQEgByAJaiAGakH//wBrIQYCQCACIAR+IhggDCATfnwiBCAYVK0gBCAEIAMgDX58IgRWrXwgAiAMfnwgBCAEIBEgFVStIBEgFFatfHwiBFatfCADIAx+IgMgAiANfnwiAiADVK1CIIYgAkIgiIR8IAQgAkIghnwiAiAEVK18IAIgAiAQIBJWrSAOIBZUrSAOIBBWrXx8QiCGIBJCIIiEfCICVq18IAIgAiAPIBRUrSAPIBdWrXx8IgJWrXwiBEKAgICAgIDAAINQRQRAIAZBAWohBgwBCyALQj+IIQMgBEIBhiACQj+IhCEEIAJCAYYgAUI/iIQhAiALQgGGIQsgAyABQgGGhCEBCyAGQf//AU4EQCAKQoCAgICAgMD//wCEIQpCACEBDAELAn4gBkEATARAQQEgBmsiB0GAAU8EQEIAIQEM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IAhBFGxqIgEuARIgAhAkGiABLgEQIgFBAEgNISAAKAIEIAFB//8DcUEMbGotAAVBxQBHDSEgBkHXACACECwaDCELIAEtAARBIHEEQCAAIAEoAgwgAhDvASEDAn8gASgCLCIABEAgACABLgEgELwEDAELIAEtAAELIgBBGHRBGHVBwgBIDSIgBkHgACADQQFBACAAQf8BcUEBdEHc+AJqQX8QMxoMIgsgASgCHCIFQQBIBEAgACgCNCIDQQBIBEAgAS8BICIEQRB0QRB1IghBAEgEQCADQX9zIQMMJAsgASgCLCIFIAgQhwEgA2shAyAFKAIEIARBDGxqIgEvAQoiBEHgAHEEQCAEQYACcQRAIAcgASgCADYCACAAQeDcASAHECZBACEDDCULIAEgBEGAAnIiAjsBCiABIARBgAFxBH8gACAFIAEgAxDQByABLwEKBSACC0H//ANxOwEKDCQLIAEtAAVBxQBHDSMgBkHRACADIAIQIhogBkHXACACECwaDCILIANBAWshBQsgAS0AAiEDIAAoAgggASgCLCAFIAEuASAgAhCJAQJAIANFDQAgACgCCEF/EIYBIgAtAABB3gBHDQAgACADOwECCyACIQMgASgCLA0hIAEtAAFBxQBHDSEgBkHXACADECwaDCELIAAgAUEAIAIQ+QsMHwsgBkHHACABELsEIAIQIhoMHgsgBiABKAIIQQAgAhDPBwwdCyAGIAIgASgCCBCwARoMHAsgBkHNACABKAIIQQJqIgAQMUEBayIBQQJtIAJBACAGKAIAIAAgARCTCEF6EDMaDBsLIAZBzgAgAS4BICACECIaIAEoAggtAAFFDRogACgC4AEiACABLgEgEOAJIQEgAEEANgIAIAYgAUF/EIgBDBoLIAEoAhwhAwwaCyACIAAgASgCDCACEO8BIgBHBEAgBkHRACAAIAIQIhoLIAZB2AAgAiABKAIIQQAQ0QQQIhoMGAtBNUE0IAVBLUYbIQVBASEIQYABDAELQQALIQsgASgCDCIDEP4BBEAjAEEQayIDJAAgASgCECEGIAAoAgghBCABKAIMIg0QkgEhCiAAEDIhCAJAIAAoAiQNACABKAIEIQEgBhCSASAKRwRAIABB6vMAQQAQJgwBCyABQQp2QQFxIREgACANEPULIRIgACAGEPULIRMgBEHHAEEBIAIQIhpBNUE2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IQQDQAJAIAAgBEsEQCAELQAAQTBGDQELQQAhAgNAAkAgAiAEaiIIIABPIgkNACAILQAAIghBMGtB/wFxQQlLDQAgAiAFaiECIApCCn4gCK1C/wGDfEIwfSEKDAELCyABQv///////////wBCgICAgICAgICAfyAHGyAKQgAgCn0gBxsgCkIAUxs3AwACfyACRQRAQX8gAyAERg0BGgsgBiAGDQAaIAYgCQ0AGiACIQMDQEEBIAMgBGotAABBwOoBai0AAEEBcUUNARogBCADIAVqIgNqIABJDQALQQALIQMCQCACIAVBE2wiBkkNAEEBIQAgAiAGTQRAQQAhAEEAIQIDQCACIABBEUtyRQRAIAQgACAFbGosAAAgAEHXuAFqLAAAa0EKbCECIABBAWohAAwBCwsgAgR/IAIFIAQgBUESbGosAABBOGsLIgBBAEgNAQsgAUL///////////8AQoCAgICAgICAgH8gBxs3AwBBAkEDIAMgBxsgABshAwsgAw8LIAQgBWohBAwACwALpwECA38BfgJAIAAtAABBMEcNACAALQABQSByQfgARw0AQQIhAgNAIAIiA0EBaiECIAAgA2otAAAiBEEwRg0ACyADIQIDQCAEQcDqAWotAABBCHEEQCAEQRh0QRh1EIcCrSAFQgSGfCEFIAAgAkEBaiICai0AACEEDAELCyABIAU3AwBBAiACIANrQRBKQQF0IAAgAmotAAAbDwsgACABIAAQMUEBEPUCC40DAQR/AkACQCAABEAgAUEBayECAkADQCAAKAIAQaEfTwRAIAAoAggiAUUNAiACIAIgAW4iAyABbGshAiAAIANBAnRqIgNBDGooAgAiAA0BIAMgARCBBCIANgIMIAANAQwFCwsgACACQQN2aiIAQQxqIAAtAAxBASACQQdxdHI6AABBAA8LIAJBAWohBAJAIABBDGoiAyACQf0AcCIBQQJ0aigCACICBEADQCACIARGBEBBAA8LIANBACABQQFqIgEgAUH8AEsbIgFBAnRqKAIAIgINAAsgACgCBCICQT5JDQEMAwsgACgCBCICQfwATw0CCyAAIAJBAWo2AgQgAyABQQJ0aiAENgIAC0EADwtBACEBQQBC9AMQjQEiAkUNACACIANB9AMQJSEFIANBAEH0AxAoGiAAIAAoAgBB/ABqQf0AbjYCCCAAIAQQ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IAAoAiAQXgsgACAAKAIUIAGsEI0BIgE2AiALIAFFBEAgABBiIABBADYCGCAAQQA2AghBBw8LIAAgACgCFCABEKsCNgIYAkAgAkUNACAAKAIIIgFFDQAgACgCICABIAAoAgwQJRoLIAAgAC8BECIBQYAgcQR/IAAoAgggACgCJBEDACAALwEQBSABC0H/nwJxOwEQIAAgACgCIDYCCEEAC9MDAgJ+An8jAEEgayIEJAACQCABQv///////////wCDIgNCgICAgICAwIA8fSADQoCAgICAgMD/wwB9VARAIAFCBIYgAEI8iIQhAyAAQv//////////D4MiAEKBgICAgICAgAhaBEAgA0KBgICAgICAgMAAfCECDAILIANCgICAgICAgIBAfSECIABCgICAgICAgIAIUg0BIAIgA0IBg3whAgwBCyAAUCADQoCAgICAgMD//wBUIANCgICAgICAwP//AFEbRQRAIAFCBIYgAEI8iIRC/////////wODQoCAgICAgID8/wCEIQIMAQtCgICAgICAgPj/ACECIANC////////v//DAFYNAEIAIQIgA0IwiKciBUGR9wBJDQAgBEEQaiAAIAFC////////P4NCgICAgICAwACEIgIgBUGB9wBrEKkBIAQgACACQYH4ACAFaxD/AiAEKQMIQgSGIAQpAwAiAEI8iIQhAiAEKQMQIAQpAxiEQgBSrSAAQv//////////D4OEIgBCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyAAQoCAgICAgICACFINACACQgGDIAJ8IQILIARBIGokACACIAFCgICAgICAgICAf4OEvwvTAQIBfwJ+QX8hBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LIAAgAlYgASADVSABIANRGw0AIAAgAoUgASADhYRCAFIhBAsgBAvMAQEGfxC7ASAAEPcBIAAtABhBAXEEQCAALQCxAUUhBAsgBEUhBgNAIAMgACgCFE5FBEAgACgCECAD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AkAgASgCECICBH8gAgUgASgCDCEDIAFBACABMwE0QgF8EI0BIgI2AhAgAkUNAUEAIQIDQCACIAEvATRPRQRAAn8gASgCBCACQQF0ai8BACIAQRB0QRB1IgRBAE4EQCADKAIEIABBDGxqLQAFDAELQcQAIARBf0YNABogASgCKCACQQR0aigCCBCEAQshACABKAIQIAJqIABBGHRBGHUiAEHBACAAQcEAShsiAEHDACAAQcMASRs6AAAgAkEBaiECDAELCyABKAIQIAJqQQA6AAAgASgCEAsPCyAAEE9BAAsOACAAIAEQhgEgAjYCDAvJAQECfwJAAkAgACgCAC0AIUHAAHFFDQAgAS0AKw0AAkAgAkUEQEEBIQQgARCPAw0DIAEoAjBBAEchBQwBCyABQTBqIQBBASEEA0AgACgCACIABEAgASAAIAIgAxCTCwRAQQEhBSAEQQIgASgCACAAKAIIEFMbIQQLIABBBGohAAwBCwsgARCPAyEAA0AgAEUNAQJAIAEgACACIAMQpgdFDQBBASEFIAAtABpFDQBBAg8LIAAoAgwhAAwACwALIAUNAQtBACEECyAEC6UDAQl/An8CQAJAIAEoAjhFBEAgACgCACgCECgCHCIHBH8gBygCMEEARwVBAAtFDQELIAAtAJcBRQ0BC0EAIARFDQEaIARBADYCAEEADwsgAyEJIwBBEGsiCCQAAkACQCAAIgMgASIHEM8LIgFFDQACQCADKAIALQAiQQRxDQAgBygCOCIGRQ0AIAEgBkYNASABIQADQCAAIgUoAiAiAEEAIAAgBkcbDQALIAVBADYCIAtB35gBQeaYASACQYABRhshCkEAIQUgAkH/AEYhCyACQYEBRyEMIAEhAANAAkACQCAALQAIIgYgAkcNACAAKAIQIAkQpQdFDQAgBSAALQAJciEFDAELIAZBlgFGBEAgACACOgAIQQJBASAHLQArQQFHIg0bIQYgCyANckUEQCAIIAo2AgAgA0GZKSAIECZBASEGCyAAIAY6AAkgBSAGciEFDAELIAAtAApFIAxyIAZB/wBHcg0AIAMoAnQNACAFIAAtAAlyIQULIAAoAiAiAA0ACwwBC0EAIQELIAQEQCAEIAU2AgALIAhBEGokACABQQAgBRsLCyoBAX9BqpYBIQEgAEGHAWsiAEECTQR/IABBAnRB1K4DaigCAAVBqpYBCwsTACAAKAIIQc8AIAEgAiADECQaC4oCAQV/IwBBEGsiBiQAAkAgASgCCA0AIAEoAjwiB0UNACAAIAAoAixBAWoiBDYCLCABIAQ2AgggABBCIQUCQCAHKAIMIgMgBkEMahDdAgRAIAVBxwAgBigCDCIDIAQQIhogA0UEQCAFIAIQWxoMAgsgA0EASA0BIAEuAQIgA60Q1AEiAkwNASABIAI7AQIgASABKAIEQYCAAXI2AgQMAQsgACADIAQQbSAFQQwgBBAsGiAFQRAgBCACECIaCyAHKAIQIgJFDQAgASAAKAIsIgNBAWoiATYCDCAAIANBAmoiAzYCLCAAIAIgARBtIAVBDCABECwaIAVBoAEgBCADIAEQJBoLIAZBEGokAAsQACAAQQA2AhwgAEEAOgATC1ABA38gACgCACEDA0AgAiADKAIUTkUEQAJAIAMoAhAgAkEEdGoiBCgCBEUNACABBEAgASAEKAIAEDANAQsgACACELQBCyACQQFqIQIMAQsLC0MBA38gACgCACICIAItAFQiAyABIAItALEBIgQQqQIhAgJAIAQNACACBEAgAigCDA0BCyAAIAMgAiABEPYFIQILIAILHwAgAEHEACABECwaIAAoAgwiAEEANgIcIABBADoAEwvFAQECfyMAQfAAayIFJAAgBUIANwMgIAVCADcDGCAFQgA3AxAgBUEoakEAQcgAECgaIAEEQCAFQQE2AiggASgCACEGIAVBfzYCWCAFQUBrIAE2AgAgBSAGNgI4IAIgAkGAgBByIAEoAjwgACgCACgCECgCHEYbIQILIAUgADYCCCAFIAJBgIAEcjYCICAFIAVBKGo2AgwCf0EBIAVBCGogAxCgAQ0AGkEAIARFDQAaIAVBCGogBBCAAgshAiAFQfAAaiQAIAILSwACQCABBEAgASADNgIMIAEgAjYCCCAERQ0BIAEgACgCACAEKAIAIAQ1AgQQ1wE2AgQgAQ8LIAAoAgAgAhA5IAAoAgAgAxA5CyABC/FIAhR/An4jAEHAA2siBiQAIAAoAgAhBwJAIAAQQiIFRQ0AIAVBpgFBAUEBECIaIABBAjYCLCAAIAEgAiAGQbwDahC+AiIIQQBIDQAgBygCECEBIAhBAUYEQCAAEO0LDQELIAcgBigCvAMQdCIURQ0AAkAgAEETIBQCfyAEBEAgBiADNgKAAyAHQc6OASAGQYADahA8DAELIAcgAxB0CyIJIAIoAgQEfyABIAhBBHRqKAIABUEACyIEEGENACAGQQA2AqwDIAYgCTYCqAMgBiAUNgKkAyAGQQA2AqADIAdBADYCxAMCfwJAIARFBEBBACEDDAELQQAgByAEEOcCIgNBAEgNARoLIAcoAhAgA0EEdGooAgQLIgMEfyADEEwgAxCOASgCQCEDIAcoAsQDIQogA0EOIAZBoANqEIYDIQMgByAKNgLEAyADBUEBCyIDQQxHBEAgA0UEQCAFQQEQiwQgBUEAQQAgBigCoANBfxCJAiAFIAYoAqADENEFIAYoAqADECMMAgsgBigCoAMiAQRAIAYgATYCACAAQfbAACAGECYgBigCoAMQIwsgACADNgIMIAAgACgCJEEBajYCJAwBCyAUEJUIIgtFDQAgCy0ABSIKQQFxBEAgABCKAg0BIAstAAUhCgsgCkECcSAKQQRxQQAgCRtyRQRAIAUgCxCLDAtBfyEDQQAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCALLQAEQQFrDisRGwcPFQkKHyUaFSYAHSAhJBMIKCceBQYVBAMLIxYBIgIXFA4QKQwNEhgZFQsgBSAIEOQBIAlFBEAgACAAKAIsQQJqNgIsIAVBCUHQ/gIQzwIiACAINgIEIABBsHA2AnwgACAINgIYDCoLIAkQhQIQ5wQhAiAAQQAgCBC1ASAFQeQAIAhBAyACECQaIAEgCEEEdGoiACgCDCACNgJQIAAoAgQgAhD9AwwpCyABIAhBBHRqKAIEIQAgCUUEQCAFIAAEfiAAEIQCrAVCAAsQsQEMKQsgByAJEIUCIgE2AmQgACABQQBBABCLA0EHRw0oIAcQTwwoCyABIAhBBHRqKAIEIQACQCAJRQ0AIAlB4REQU0UEQEECIQMMAQsgCUEAEIAEIQMLAkAgAigCBA0AQQAhAiADQQBIDQADQCACIAcoAhRODQEgBygCECACQQR0aigCBCADENAFGiACQQFqIQIMAAsACyAFIAAgAxDQBa0QsQEMJwsgBkIANwOYAyAAIAgQtAEgACAAKAIsQQFqIgA2AiwCQCAULQAAQd8BcUHQAEYEQCAFQbEBIAggABAiGgwBC0EAIQECQCAJRQ0AIAkgBkGYA2oQ9gINACAGKQOYAyIZQgBTDQAgGUL+////DyAZQv7///8PVBunIQELIAVBsgEgCCAAIAEQJBoLIAVB1AAgAEEBECIaDCYLAn8CQCAJRQ0AQQEgCUHK3wAQMEUNARogCUHG1wAQMA0AQQAMAQtBfwshACAFQcrfAEHG1wACfyACKAIEIgIgAEF/R3JFBEAgBy0AWQwBCyACRQRAQQIhAgNAIAcoAhQgAkoEQCAHKAIQIAJBBHRqKAIEEI4BIAAQ1gcaIAJBAWohAgwBCwsgByAAOgBZCyABIAhBBHRqKAIEEI4BIAAQ1gcLQQFGGxDRBQwlCwJAAkAgCUUNAEEAIQQgCRAxIQADQCAEENUIIgFFDQEgCSABIAAQSARAIARBAWohBAwBCwsgBEECRw0BIActACNBEHENAEECIQQMAQtBfyEEIAIoAgQNACACQQE2AgRBACEICyAHKAIUIQEDQCABQQBKBEAgBygCECABQQFrIgFBBHRqKAIERQ0BIAEgCEcEQCACKAIEDQILIAUgARDkASAFQQQgAUEBIAQQJBoMAQsLIAVB1ABBAUEBECIaDCQLIAEgCEEEdGooAgQQjgEhACAGQn43A5gDIAkEfiAJIAZBmANqEPYCGiAGKQOYAyIZQn8gGUIAWRsFQn4LIhlCf1kEQCAAIBk3A7ABIAAoAugBIgEEQCABIBk3AxALCyAFIAApA7ABELEBDCMLIAEgCEEEdGooAgQhACAJRQRAIAUgABCJBq0QsQEMIwsgBwJ/QQAgCUGc5gAQMEUNABpBASAJQabWABAwRQ0AGkECIAlBo9cAEDBFDQAaIAkQhQIiAUH/AXFBACABQQNJGwsiAToAWiAAIAEQiAYNIiABQQFrIgFBAUsNIiAFKAJsIQIgBUEFQYD/AhDPAiIAIAg2AgQgACABNgJcIAAgCDYCVCAAIAJBBGo2AjAgACAINgIYIAUgCBDkAQwiCyAGQQA2ApgDAkACQCAJRQ0AIAkgBkGYA2oQ0AJFDQAgBigCmAMiAkEASg0BC0H/////ByECCyAAQQAgCBC1ASAFQccAIAJBARAiGiAFQT0gCBAsIQAgBUHUAEEBECwaIAVB1gBBAUF/ECIaIAVBMUEBIAAQIhogBSAAECoMIQsgCUUEQCAFIAEgCEEEdGooAgw0AlAQsQEMIQsgCRCFAiEAIAEgCEEEdGoiASgCDCAANgJQIAEoAgQgABD9AwwgCyAJRQRAIAUgBy0AIEEgcQR+IAEgCEEEdGooAgRBABDZBKwFQgALELEBDCALIAZBATYCmAMCQCAJIAZBmANqENACRQRAIAYoApgDIQIMAQsgASAIQQR0aigCBCAGKAKYAyICENkEGgsgCSACQQBHEIAEIQAgByAHKQMgQl+DIABBAEetQgWGhDcDICAHENUHDB8LIAVCABCxAQweCyAJRQRAIAUgBzEAVhCxAQweCyAJLQAAQTBrIgFB/wFxQQJLBEAgCUG26AAQMAR/IAlBogkQMEVBAXQFQQELIQELAkAgACgCACICLQBWIAFGDQAgABCKDA0AIAIgAToAVgsMHQsgCUUEQCAFQfylBCgCABDRBQwdCwJAIAktAABFDQAgBygCACAJQQEgBkGYA2oQxQJFBEAgBigCmAMNAQsgAEHACEEAECYMHQsgBy0AVkEBTQRAIAAQigwaC0H8pQQoAgAQIyAJLQAABEAgBiAJNgIQQfylBEH2wAAgBkEQahBKNgIADB0LQfylBEEANgIADBwLIAlFBEAgBSABIAhBBHRqMQAIQgF9ELEBDBwLIActAFVFBEAgAEHWzgBBABAmDBwLIAhBAUYNGyAJQQBBARC1CSEAIAEgCEEEdGoiAUEBOgAJIAEgAEEBakEHcSIAQQEgABs6AAggBxDVBwwbCyAJRQRAIAUgCxCLDCAFIAspAwggBykDIINCAFKtELEBDBsLIAspAwgiGSAZQv//foMgBy0AVRshGQJAIAlBABCABARAIAcgBykDICAZhDcDIAwBCyAHIAcpAyAgGUJ/hYM3AyAgGUKAgCBRBEAgB0IANwOIBAwBCyAZQgGDUA0AIAlB4RcQUw0AIAcQsgILIAVBpgEQVRogBxDVBwwaCyAJRQ0ZIAAgBBDkAyAAQQIgCSAEEKwCIghFDRkgCBByIQwgAEEHNgIsIAAgCBC7AhogCCgCBCEAQQAhAQNAIAEgCC4BIiIDTg0aAkACfyAALwEKIgJB4gBxRQRAQQAhDUEADAELIAspAwhQBEAgCkEBaiEKDAILIAJBIHEEQEECIQ1BAQwBC0EDQQEgAkHAAHEiBBshDSAEQQZ2CyEOAkAgAkEBcSIERSAMRXINAEEBIQIgA0EAIANBAEobQQFqIQQDfyACIARGDQEgDCgCBCACQQF0akECay4BACABRgR/IAIFIAJBAWohAgwBCwshBAsgCCAAEJcBIQJB5dkAQYTaACALKQMIUBshDyAAKAIAIRAgAEGt5QEQ+AQhEUEAIQMgAC0ABEEPcUEARyESIA4gAkVyRQRAIAIoAgghAwsgBiANNgI4IAYgBDYCNCAGIAM2AjAgBiASNgIsIAYgETYCKCAGIBA2AiQgBiABIAprNgIgIAVBASAPIAZBIGoQ8AELIABBDGohACABQQFqIQEMAAsACwJAIAlFDQAgCSAGQZgDahD2Ag0AIAYpA5gDIhlCAFMNACAHIBmnQf////8HcTYC7AMLIAUgBzQC7AMQsQEMGAsCQCAJRQ0AIAkgBkGYA2oQ9gINACAGKQOYAyIZQgBTDQAgByAZp0H/////B3EQvQkaCyAFIAdBfxC9CawQsQEMFwsCQCAJRQ0AIAkgBkGYA2oQ9gINAEJ/ENUGIRkgBikDmAMiGkIAVyAZUEUgGSAaV3FyDQAgGhDVBhoLIAVCfxDVBhCxAQwWCwJAIAlFDQAgCSAGQZgDahD2Ag0AIAYpA5gDEIgKGgsgBUJ/EIgKELEBDBULIAkEQAJAIAkQhQIiAEEASgRAIAdBByAHEMYJIAcgADYC8AMMAQsgB0EAQQAQxgkLCyAFIAc0AvADELEBDBQLAkAgCUUEQEH+/wMhAgwBCyAJEIUCIgJBAnFFDRQLIAAgACgCKCIKQQFqNgIoIAghAyAERQRAIAcoAhRBAWshAwsgAkEBcSIMQQJyIQ4DQCADIAhOBEACQCAIQQFGDQAgACAIELQBIAhBBHQiDyAHKAIQaigCDEEQaiEEA0AgBCgCACIERQ0BIAQoAggiAi0AHUEBcUUNACACQQhqIQEgAi8BJkEuaiELAkADQCABKAIAIg0EQCANQRRqIQEgDS0AN0GAAXENAQwCCwsgC0H//wNxRQ0AIAAgCiAIIAJB8AAQ0AEgBUEgIAogDiAFKAJsaiALQRB0QRB1ECQaCyAHKAIQIA9qKAIAIQEgBiACKAIANgL0AiAGIAE2AvACIAdBudsBIAZB8AJqEDwhASAMBEAgBUH1AEEAIAAQRiICQQAgAUF6EDMaIAVB1AAgAkEBECIaBSAFQZQBQQBBAEEAIAFBehAzGgsMAAsACyAIQQFqIQgMAQsLIAVBpgEQVRoMEwtBACEAIAcQ9wEDQCAHKAIUIABKBEAgBygCECAAQQR0aigCBCIBBEAgARCOASgC5AEoAixBlPUDKAIAEQMACyAAQQFqIQAMAQsLDBILIAkEQCAHIAkQhQIQwAkLIAUgBygCjAJBCUYEfiAHNAKQAgVCAAsQsQEMEQsgCEEMIAIoAgAbIQECf0EAIAlFDQAaQQEgCUGm1gAQMEUNABpBAiAJQaMSEDBFDQAaQQBBAyAJQbjhABAwGwshAiAAQQM2AiwgBUEDIAEgAkEBECQaIAVB1ABBAUEDECIaDBALIABBATYCLEEAIQIDQCACELEJIgBFDQIgBUEBIAAQsAEaIAVB1ABBAUEBECIaIAJBAWohAgwACwALIAsoAgghASAFIAgQ5AECQCAJRQ0AIAstAAVBCHENACAFQQJBmIADEM8CIgAgCDYCBCAAIAE2AhwgACAINgIYIAkQhQIhASAAQQE7ARYgACABNgIgDA8LIAVBA0GggAMQzwIiACAINgIEIAAgATYCICAAIAg2AhgLIAUoAmwiAEEBIABBAUobIQFBASEAAkADQCAAIAFGDQEgAEEUbCECIABBAWohACACIAUoAmgiA2otAABBpgFHDQALIANBuAE6ABQLDA0LIAlFBEAgABCKAg0NIAUgACgCAC0AVEEDdEHQ/wJqKAIAENEFDA0LIActABhBwABxDQxB0P8CIQICQANAIAIoAgAiAUUNASAJIAEQMARAIAJBCGohAgwBCwsgBygCECgCDCACLQAEIgFBAiABGyIBOgBNIAcgARC+BiACKAIADQ0LIAYgCTYC4AIgAEGOOiAGQeACahAmDAwLIBQtAAAhASACKAIAIQIgAEEGNgIsQeQAIRAgBkHkADYCmAMgCEF/IAIbIRECQCAJRQ0AIAkgBkGYA2oQ0AIEQCAGQeQAIAYoApgDIgIgAkEATBsiEDYCmAMMAQsgAEEAIAkgEUEATgR/IAcoAhAgEUEEdGooAgAFQQALEKwCIQ4gBigCmAMhEAsgAUFfcSEXIAVBxwAgEEEBa0EBECIaIA5BAEchGANAAkAgDyAHKAIUTg0AAkAgDyARRyARQQBOcQ0AIAAgDxC0AUEAIQEgD0EEdCILIAcoAhBqKAIMQRBqIgohAkEAIQgDQCACKAIAIgIEQCAOQQAgAigCCCIEIA5HGw0BIARBCGohAyAEKAIcQX9zQQd2QQFxIAFqIQFBACEEA0AgAygCACIDBEAgBEEBaiEEIANBFGohAyABQQFqIQEMAQsLIAQgCCAEIAhKGyEIDAELCyABRQ0AIAcgASAYakECdEEEaq0QViIDRQ0BIA4EfyADQQA2AgRBAQVBAAshBCAKIQIDQCACKAIAIgIEQCAOQQAgAigCCCIBIA5HGw0BIAEtABxBgAFxRQRAIAMgBEEBaiIEQQJ0aiABKAIUNgIACyABQQhqIQEDQCABKAIAIgFFDQIgAyAEQQFqIgRBAnRqIAEoAiw2AgAgAUEUaiEBDAALAAsLIAMgBDYCACAAIAAoAiwiASAIQQhqIgIgASACShs2AiwgABDjAyAFQZsBQQIgBEEBIANBchAzGiAFIA9B/wFxEDggBUEyQQIQLCEBIAYgBygCECALaigCADYC0AIgBUH1AEEAQQNBACAHQZblASAGQdACahA8QXoQMxogBUHvAEECQQNBAxAkGiAFENoDGiAFIAEQKgNAIAooAgAiCkUNASAKKAIIIgwtACsgDkUgDCAORnJFcg0AQQAhAkEAIQ0gDC0AHEGAAXEEQCAMEHIhDQsgACAMQfAAQQBBAUEAIAZBlANqIAZBkANqEMAEGiAFQccAQQBBBxAiGiAMQQhqIgshAQNAIAEoAgAiAQRAIAVBxwBBACACQQhqECIaIAJBAWohAiABQRRqIQEMAQsLIAVBIyAGKAKUA0EAECIaIAVB1gBBB0EBECIhEiAXQf8BcUHRAEYiCEUEQCAFQd4AIAYoApQDIAwuASRBAWtBAxAkGiAFQYABEDgLIAwoAhxBgIAEcSEEQQAhAgNAIAwuASIgAkoEQAJAIAIgDC4BIEYNAEEBIAJBDGwiFiAMKAIEaiIBLQAEQQ9xIAQbRQ0AQQAhAyAEBEAgABAyIQMLIAUgDCAGKAKUAyACQQMQiQEgBUF/EIYBLQAAQd4ARgRAIAVBgAEQOAsgAS0ABEEPcQRAIAVBM0EDECwhEyAMKAIAIRUgBiABKAIANgK0AiAGIBU2ArACIAVB9QBBAEEDQQAgB0GsLiAGQbACahA8QXoQMxoCQAJAIARFDQAgAS0ABEHwAXFBEEYNACAFIAMQWxoMAQsgBRDaAxoLIAUgExAqCyAMLQAeQQFxRQ0AIAEtAARBBHYiE0EBRg0AIAVBEUEDQQAgE0Gf/wJqLAAAECQhEyABLQAEQQJ2QTxxQZz8A2ooAgAhASAMKAIAIRUgBiAMKAIEIBZqKAIANgKoAiAGIBU2AqQCIAYgATYCoAIgBUH1AEEAQQNBACAHQZYuIAZBoAJqEDxBehAzGiAFIAMQNCAFENoDGiAFIBMQKgsgAkEBaiECDAELCwJAIAwoAhAiAUUNACAHLQAhQQJxDQAgByABQQAQcCEBIActAFdFBEAgABAyIQMgABAyIQQgACAGKAKUA0EBajYCNCABKAIAIQIDQCACQQJOBEAgACABIAJBAWsiAkEEdGooAgggA0EAEHgMAQsLIAAgASgCCCAEQRAQ/wEgBSADEDQgAEEANgI0IAYgDCgCADYCwAIgBUH1AEEAQQNBACAHQbcwIAZBwAJqEDxBehAzGiAFENoDGiAFIAQQNAsgByABEDkLIAgEQCAFQSYgBigClAMgEhAiGiAFIBJBAWsQKgwBBUF/IQhBACEDIAshAkEAIQQDQCACKAIAIgEEQCAAEDIhAiABIA1HBEAgACABIAYoApQDQQBBACAGQYwDaiAEIAgQzwUhCCAFQdYAIANBCGpBARAiGiAFQRwgBigCkAMgA2ogAiAIIAEvATQQNyECIAVBA0Hg4AEQsAEaIAVB7wBBB0EDQQMQJBogBUEEQcvgARCwARogBUHvAEEEQQNBAxAkGiAFQQQgASgCABCwASEWIAVB7wBBBEEDQQMQJBogBRDaAyETIAUgAhAqIAEtADYEQEEAIQIgABAyIQQDQCABLwEyIAJLBEACQCABKAIEIAJBAXRqLgEAIhVBAE4EQCAMKAIEIBVB//8DcUEMbGotAARBD3ENAQsgBUEyIAIgCGogBBAiGgsgAkEBaiECDAELCyAFQSYgBigCkAMgA2oQLCECIAUgBBBbGiAFIAIQKiAFQSggBigCkAMgA2ogBCAIIAEvATIQNxogBUEDQZPgARCwARogBSAWEFsaIAUgBBA0CyAFIBMQKiAAIAYoAowDENQHIAEhBAsgA0EBaiEDIAFBFGohAgwBCwsgBUEmIAYoApQDIBIQIhogBSASQQFrECogBUECQa7gARCwARpBACEBA0AgCygCACICRQ0CIAIgDUcEQCAFQeIAIAYoApADIAFqQQMQIhogBUE1IAFBCGpBAEEDECQhAyAFQZABEDggBUEEIAIoAgAQsAEaIAVB7wBBBEECQQMQJBogBRDaAxogBSADECoLIAFBAWohASACQRRqIQsMAAsACwALAAsgD0EBaiEPDAELCyAFQQdBsP8CEM8CIgAEQCAAQf8BOgBlIABB+NcANgI4IABB/wE6ACkgAEEBIBBrNgIIIABBCxDTAjYCdAsgBUEAIAUoAmxBAmsQ3QMMCwsgCUUNCiAHQZXrAEECQQFBgIEDQbzqASAJQQAQgAQiABsiAUE+QQBBAEEAQQBBABCEBBogB0GV6wBBA0EBIAFBPkEAQQBBAEEAQQAQhAQaIAdBlesAQQJBAUEAEIgCIgFBDEEEIAAbIgAgASgCBHI2AgQgB0GV6wBBA0EBQQAQiAIiASABKAIEIAByNgIEDAoLIAAgACgCLCIBQQVqIgw2AiwgAUEDaiERIAFBAmohEiABQQFqIQ8gBygCECAIQQR0aigCDCgCECELA0AgC0UNCgJ/IAkEQCAAQQAgCSAEEKwCIQhBAAwBCyALKAIIIQggCygCAAshCyAIRQ0AIAgtACsNACAIQTBqIgIoAgBFDQAgBygCECAHIAgoAjwQTiIDQQR0aigCACEEIAAgAxC0ASAAIAMgCCgCFEEAIAgoAgAQsgEgDCAILgEiaiIBIAAoAixKBEAgACABNgIsCyAAQQAgAyAIQfAAENABIAUgDyAIKAIAELABGkEBIQogAiEBA0AgASgCACINBEACQCAHIA0oAgggBBB8IgFFDQAgBkEANgKYAyAAIAMgASgCFEEAIAEoAgAQsgEgACABIA0gBkGYA2pBABDZAw0NIAYoApgDIg5FBEAgACAKIAMgAUHwABDQAQwBCyAFQfAAIAogDigCLCADECQaIAAgDhC9AQsgDUEEaiEBIApBAWohCgwBCwsgCiAAKAIoSgRAIAAgCjYCKAtBASENIAVBI0EAECwhEANAIAIoAgAiAQRAIAcgASgCCCAEEHwhDiAGQQA2ApQDIAZBADYCmAMgDgRAIAAgDiABIAZBmANqIAZBlANqENkDGgsgABAyIQogASgCFCIDIAxqIgIgACgCLEoEQCAAIAI2AiwLQQAhAgNAIAIgA0gEQCAFIAhBACAGKAKUAyIDIAJBAnRqIAEgAkEDdGpBJGogAxsoAgAgAiAMaiIDEIkBIAVBMiADIAoQIhogAkEBaiECIAEoAhQhAwwBCwsCQCAGKAKYAyICBEAgBUHgACAMIANBACAHIAIQ3AMgASgCFBAzGiAFQRwgDSAKIAwgASgCFBA3GgwBCyAORQ0AIAVBHSANIAUoAmxBAmogDBAkGiAFIAoQWxoLIAVBywBBhwEgCCgCHEGAAXEbQQAgEhAiGiABKAIIIQIgBiANQQFrNgKUAiAGIAI2ApACIAUgEUGKjAEgBkGQAmoQ8AEgBUHUACAPQQQQIhogBSAKEDQgByAGKAKUAxAnIAFBBGohAiANQQFqIQ0MAQsLIAVBJkEAIBBBAWoQIhogBSAQECoMAAsACyAJRQ0IIAcgCSAEEHwiBEUNCCAELQArDQggBCgCMCICRQ0IIAcgBCgCPBBOIQEgAEEINgIsIAAgARC0AUEAIQMDQCACRQ0JQQAhAQNAIAIoAhQgAUoEQCAEKAIEIAIgAUEDdGoiACgCJEEMbGooAgAhCCAAKAIoIQAgAigCCCEKIAItABoQiQwhCyACLQAZIQ0gBkGHmQE2AowCIAYgDRCJDDYCiAIgBiALNgKEAiAGIAA2AoACIAYgCDYC/AEgBiAKNgL4ASAGIAE2AvQBIAYgAzYC8AEgBUEBQcMeIAZB8AFqEPABIAFBAWohAQwBCwsgA0EBaiEDIAIoAgQhAgwACwALA0AgCkHCAEYNCCAGIApBBHRB4IsCaigCADYC4AEgBUEBQffAACAGQeABahDwASAKQQFqIQoMAAsACyAAQQE2AiwgB0GIA2ohAgNAIAIoAgAiAkUNByAGIAIoAggoAgQ2AtABIAVBAUH3wAAgBkHQAWoQ8AEMAAsACyAHKAIYIQEgAEEGNgIsIAFBBXZBAXEhAEEAIQQDQCAEQRdHBEAgBEECdEGApgRqIQIDQCACKAIAIgEEQCAFIAFBASAAEIgMIAFBJGohAgwBCwsgBEEBaiEEDAELCyAHQaQDaiECA0AgAigCACICRQ0GIAUgAigCCEEAIAAQiAwMAAsACyAAQQI2AiwgB0G0A2ohAkEAIQEDQCACKAIAIgJFDQUgBiACKAIIKAIANgLEASAGIAE2AsABIAVBAUH4JiAGQcABahDwASABQQFqIQEMAAsACyAAQQM2AixBACECA0AgAiAHKAIUTg0EIAcoAhAgAkEEdGoiACgCBCIBBEAgACgCACEAIAYgARC0CTYCuAEgBiAANgK0ASAGIAI2ArABIAVBAUHMHiAGQbABahDwAQsgAkEBaiECDAALAAsgCUUNAiAHIAkgBBB8IgFFDQIgByABKAI8EE4hAiAAQQU2AiwgACACELQBIAFBCGohAkEAIQEDQCACKAIAIgBFDQMgAC8ANyECIAAtADYhAyAAKAIAIQQgBiAAKAIkQQBHNgKgASAGIAQ2ApQBIAYgA0EARzYCmAEgBiACQQNxQQJ0QZT/AmooAgA2ApwBIAYgATYCkAEgBUEBQezZACAGQZABahDwASAAQRRqIQIgAUEBaiEBDAALAAsgCUUNASAHIAkgBBCfAiIBRQRAIABBAiAJIAQQrAIiAUUNAiABLQAcQYABcUUNAiABEHIiAUUNAgsgByABKAIYEE4hAiABQTJBNCALKQMIUCIDG2ovAQAhBCAAQQNBBiADGzYCLCABKAIMIQggACACELQBQQAhAgNAIAIgBEYNAiAGIAEoAgQgAkEBdGouAQAiA0EATgR/IAgoAgQgA0EMbGooAgAFQQALNgKIASAGIAM2AoQBIAYgAjYCgAEgBUEBQYSMASAGQYABahDwASALKQMIUEUEQCABKAIcIAJqLQAAIQMgASgCICACQQJ0aigCACEKIAYgAiABLwEySTYCeCAGIAo2AnQgBiADNgJwIAVBBEGJjAEgBkHwAGoQ8AELIAVB1ABBASAAKAIsECIaIAJBAWohAgwACwALIABBBjYCLCAAIAQQ5AMDQCANIAcoAhRODQEgBygCECEAAkAgBARAIAQgACANQQR0aigCABBTDQELIAAgDUEEdCIKaigCDCIIKAIMIQADQCAIQRBqIQECQANAIAEhAiAARQ0BA0AgAigCACICRQRAQQAhAAwCCyACKAIIIgMvASINAAsLIAYgAygCADYCYCAHQYPbASAGQeAAahA8IgEEQCAGQQA2ApgDIAcgASAGQZgDahDHBhogBigCmAMQmAEaIAcgARAnCyAHLQBXBEAgBygCiAJB9QhBABAmIAcoAogCQQc2AgwLIABBAWshACAHKAIQIApqKAIMIQgMAQsLIAhBEGohAQNAIAEoAgAiAUUNASABKAIIIQIgCQRAIAkgAigCABBTDQELQZIOIQACQAJAAkAgAi0AK0EBaw4CAAIBC0GV1wAhAAwBC0GSDUGQ6gAgAi0AHUEQcRshAAsgBygCECAKaigCACEIAn8CQCACKAIAIgNBm4kBQQcQSA0AQbyIASADQQdqIgtB2cMAEDBFDQEaIAtBxsMAEDANAEGpiAEhAwsgAwshAyACLgEiIQsgBiACKAIcIgJBEHZBAXE2AlQgBiACQQd2QQFxNgJQIAYgCzYCTCAGIAA2AkggBiADNgJEIAYgCDYCQCAFQQFBjNoAIAZBQGsQ8AEMAAsACyANQQFqIQ0MAAsACyAHIBQQJyAHIAkQJwsgBkHAA2okAAsvACABBEAgASACNgIUIAEgASgCBEGAoIACcjYCBCAAIAEQywQPCyAAKAIAIAIQZgthAQF/IABCMBBBIgZFBEAgACABEDkgACACEC4gACADEDkgACAEEC4gACAFENIEIAYPCyAGIAQ2AgwgBiADNgIIIAYgAjYCBCAGIAE2AgAgBiAFNgIQIAYgA0EARzoAFCAGC6QXAQx/IwBB4AFrIgwkACAAKAIAIQ0gDEEANgKkASAMQQA2AqABAkAgACgCJA0AIApBAkcEQCAALQDQAUEBRg0BCyAAEIoCDQAgACAEEMYEDQACQAJAAkACfyADBEAgACABIAIgDEGkAWoQvgIiEEEASA0FAkAgDS0AsQENACAAIAMQlQMhASACKAIEIAFFcg0AQQEgECABKAI8IA0oAhAoAhxGGyEQCyAMQagBaiIBIAAgEEHpCyAMKAKkASITEMUEIAEgAxDkBRogAEEAIANBCGoQnQIiAkUNBQJAIBBBAUcNACANKAIQKAIcIAIoAjxGDQAgDCACKAIANgKQASAAQcTeASAMQZABahAmDAMLQQAgAi0AHEGAAXFFDQEaIAIQcgwBCyAAKALsASICRQ0EIA0gAigCPBBOIRBBAAshEiANKAIQIQ8CQCACKAIAIgtBm4kBQQcQSCADRXINACANLQCxAQ0AIAwgCzYCACAAQfjxACAMECYMAQsCQAJAAkAgAi0AK0EBaw4CAQACCyAAQb3xAEEAECYMAwsgAEHW8QBBABAmDAILIA8gEEEEdGohEQJAAkACQCATBEAgDSATEHQiDkUNBCAAIA5B6QsgAigCABDKBA0FIAAtANABQQFLDQMCQCANLQCxAQ0AIA0gDkEAEHxFDQAgDCAONgKAASAAQdg0IAxBgAFqECYMBgsgDSAOIBEoAgAQnwJFDQEgCUUEQCAMIA42AnAgAEHgGiAMQfAAahAmDAYLIAAgEBC0ASAAEMgEDAULIAJBCGohDkEBIQEDQCAOKAIAIgkEQCABQQFqIQEgCUEUaiEODAELCyAMIAE2AmQgDCALNgJgIA1BoPsAIAxB4ABqEDwiDkUNAyAALQDQAUUNASAOIA4tAAdBAWo6AAcLIAAtANABQQFLDQELIABBEkG/wwBB0sMAIBBBAUYiARtBACARKAIAIgkQYQ0CIABBA0EBIAEbIA4gAigCACAJEGENAgsCQCAERQRAIAIoAgQgAi4BIkEMbGpBDGsiASABLwEKQQhyOwEKIAxBmAFqIgQgASgCABCUA0EAIQEgAEEAIA1BOyAEQQAQeRA7IgRFDQQgBCAIQX8Q8AUMAQsgACAEQekLEIUIIAAoAiQNAgtBACEIIAQoAgAiCUEAIAlBAEobIQtBACEBA0AgASALRkUEQCAEIAFBBHRqKAIIIhEtAABB8QBGBEAgESgCCBAxIAhqQQFqIQgLIAFBAWohAQwBCwsgDhAxIRFBASEBIA0gEgR/IBIvATIFQQELIAlqQRB0QRB1IAggEWpBAWogDEGgAWoQ8AchCwJAAkAgDS0AVwRAIAQhAQwBCyALIAwoAqABIgE2AgAgDCABIBFBAWoiCWoiCDYCoAEgASAOIAkQJRogCyAFOgA2IAsgAjYCDCALIApBA3EiFCALLwA3QfT/A3EgBUEAR0EDdHJyOwA3IAsgEEEEdCIBIA0oAhBqKAIMNgIYIAsgBCgCADsBMiAHBEAgACACQQIgB0EAEOcDGiALIAc2AiQLIAEgD2ooAgwtAEwhByAEIQEgAC0A0AFBAk8EQCALIAQ2AihBACEBCyAEQQhqIQkgB0EDSyEVQQAhBANAIAsvATIgBEsEQCAJKAIAEPEHQQAhByAAIAJBICAJKAIAQQAQ5wMaIAAoAiQNAwJAIAkoAgAQvAIiDy0AAEGnAUcEQCAAKALsASACRgRAIABB9xtBABAmDAYLIAsoAihFBEAgCyABNgIoQQAhAQsgCygCBCAEQQF0akH+/wM7AQAgCyALLwA3Qff/A3E7ADdBfiERDAELAkAgDy4BICIRQQBIBEAgAi4BICERDAELIAIoAgQiDyARQQxsIhZqLQAEQQ9xBH8gDwUgCyALLwA3Qff/A3E7ADcgAigCBAsgFmotAApBIHFFDQAgCyALLwA3QYAIcjsANwsgCygCBCAEQQF0aiAROwEACwJAIAkoAgAiDy0AAEHxAEYEQCAMIAggDygCCCIPIA8QMUEBaiIPECUgD2oiDzYCoAEMAQsgEUEASARAIAghD0EAIQgMAQsgCCEPIAIoAgQgEUEMbGoQqAIhCAsgCEHw+gEgCBshCCANLQCxAUUEQCAAIAgQ5QNFDQQLIAsoAiAgBEECdGogCDYCACALKAIcIARqIAktAAhBACAVGzoAACAJQRBqIQkgBEEBaiEEIA8hCAwBCwsCQCASBEBBACEHA0AgByASLwEyTw0CAkAgCyALLwEyIBIgBxDEBARAIAsgCy8BNEEBazsBNAwBCyALKAIEIARBAXRqIBIoAgQgB0EBdGovAQA7AQAgCygCICAEQQJ0aiASKAIgIAdBAnRqKAIANgIAIAsoAhwgBGogEigCHCAHai0AADoAACAEQQFqIQQLIAdBAWohBwwACwALIAsoAgQgBEEBdGpB//8DOwEAIAsoAiAgBEECdGpB8PoBNgIACyALELoIIAAoAuwBRQRAIAsQ9gcLIAsQ7wcCQCADRQ0AIAsvATQgAi4BIkgNACALIAsvADciB0EgcjsAN0EAIQQgAi4BIiIIQQAgCEEAShshCANAIAQgCEYNAQJAIAQgAi4BIEYNACALIARBEHRBEHUQnAJBAE4NACALIAdB3/8DcTsANwwCCyAEQQFqIQQMAAsACwJAAkACQCACIAAoAuwBRw0AIAJBCGohBANAIAQoAgAiB0UNAQJAAkAgBy8BMiIJIAsvATJHDQBBACEEA0AgBCAJRg0CIARBAXQiCCAHKAIEai8BACALKAIEIAhqLwEARw0BIARBAnQhCCAEQQFqIQQgCCAHKAIgaigCACAIIAsoAiBqKAIAEDBFDQALCyAHQRRqIQQMAQsLAkAgBy0ANiIEIAstADYiBUYNACAEQQtGIAVBC0ZyBH8gBAUgDEEANgJQIABBnvkAIAxB0ABqECYgBy0ANgtB/wFxQQtHDQAgByALLQA2OgA2CyAKQQJGBEAgByAHLwA3Qfz/A3EgFHI7ADcLQQAhByAALQDQAUECSQ0EIAsgACgC8AE2AhQMAQsCQCAALQDQAUEBSw0AIA0tALEBBEACQCADRQ0AIAsgDSgCrAE2AiwgCxC7CEUNAEEAIQcgAEH06wBBABAmIABB56UHECk2AgwMBgsgCygCGEEYaiALKAIAIAsQqAEEQCANEE9BACEHDAYLIA0gDSgCGEEBcjYCGAwBCyADRQRAIAIoAhxBgAFxDQELIAAgACgCLEEBaiIHNgIsIAAQQiIERQRAQQAhBwwECyAAQQEgEBC1ASALIARBuAEQVTYCLCAEQZMBIBAgB0ECECQaIAYEfyATKAIAIgYgACgCyAEgACgCxAEgBmtqIghBAWsiCWotAAAhCiAMIAY2AkggDEHXmAFBreUBIAUbNgJAIAwgCSAIIApBO0YbNgJEIA1BlSwgDEFAaxA8BUEACyEKIA0oAhAgEEEEdGooAgAhBSALKAIAIQYgAigCACEIIAwgCjYCMCAMIAc2AiwgDCAINgIoIAwgBjYCJCAMIAU2AiAgAEHVpAEgDEEgahBsIA0gChAnIAMEQCAAIAsgBxDjBSAAIBAQvQIgDCALKAIANgIQIAQgECANQZ3RASAMQRBqEDxBABCWAyAEQaYBQQBBARAiGgsgBCALKAIsECoLAkAgAwRAIA0tALEBRQ0BCyALIAIoAgg2AhQgAiALNgIIDAILQQAhByAALQDQAUECSQ0CCyAAIAs2AvABC0EAIQcMBAsgC0UNAwsgDSALENoEDAILQQAhDgsgBCEBCyACQQhqIQoCQANAIAoiAigCACIERQ0BIARBFGohCiAELQA2QQVHDQALA0AgCigCACIARQ0BIAAtADZBBUYNASACIAA2AgAgBCAAKAIUNgIUIAAgBDYCFCAAQRRqIQIMAAsACyABIQQLIA0gBxAuIA0gBBA5IA0gAxCBASANIA4QJyAMQeABaiQAC/sBAQV/IwBBQGoiBCQAIAAoAgAhBQJAIAAoAuwBIgZFDQAgBigCBCAGLgEiQQFrQQxsaiEHIAEgBS0AsQEEfyAFLQCwAUEBRwVBAAtBBGpBABDSBUUEQCAEIAcoAgA2AgAgAEG2FSAEECYMAQsgBy0ACkHgAHEEQCAAQe7RAEEAECYMAQsgBEEIaiIIQQBBNBAoGiAEQbUBOgAIIAUgAiADEOcFIQIgBCABNgIUIAQgAjYCECAEQYDAADYCDCAFIAhBARA2IQIgBSAEKAIQECcgACAGIAcgAhDpBQsgAC0A0AFBAk8EQCAAIAEQ5gULIAUgARAuIARBQGskAAuqAQEBfwJAIAEtAAZBgQFxDQACQCABKAIMIgJFDQAgAS0AAEGyAUYNACAAIAIQ7gMLIAEoAhAiAgRAIAAgAhDuAwwBCyABKAIUIQIgAS0ABUEQcQRAIAAgAhBmDAELIAAgAhA5IAEtAAdBAXFFDQAgACABKAIsENcECyABKAIEIgJBgIAIcQR/IAAgASgCCBAnIAEoAgQFIAILQYCAgMAAcUUEQCAAIAEQXgsLRgEBfyMAQRBrIgQkACAEIAM2AgwCQCAAIAIgAxCRAyIDRQRAQQchAgwBCyAAIAEgAxCKBiECIAAgAxAnCyAEQRBqJAAgAgsNACAAIAEgAkEAEKADCzgBAX8gAQRAIAAgASgCHCICKAIUEC4gACACKAIYEDkgACACKAIIEGYgACABKAIMEC4gACABECcLC2ICA38DfiMAQSBrIgIkACACIAAQ2wYgAkEQaiABEJwEIAIpAwAiACACKQMIIgUgAikDECIGIAIpAxgiBxDdBiEDIAAgBSAGIAcQwQMhBCACQSBqJABBfyAEQQBKIANBAEgbC6ICAQl/IwBBEGsiBiQAIANBADoAFiADKAIEIQQCQCACLAAAIgVBAE4EQCAGIAVB/wFxIgs2AgxBASEHDAELIAIgBkEMahDKASEHIAYoAgwhCwsgCyEFA0AgASAFSSAHIAtPckUEQAJAIAIgB2oiCCwAACIKQQBOBEAgCkH/AXEhCEEBIQoMAQsgCCAGQQhqEMoBIQogBigCCCEICyAEIAAtAAQ6ABIgACgCDCEMIARBADYCGCAEIAw2AhQgBEEANgIIIAIgBWogCCAEEPwCIARBKGohBCAHIApqIQcgCBC6AyAFaiEFIAMvARQgCUEBaiIJQf//A3FLDQELCyAJQf//A3FFIAEgBU9yRQRAIARBKGsQYgsgAyAJOwEUIAZBEGokAAsbAQF/IAAgASACELkBIgNFBEAgACABECcLIAMLygEBBX8CQAJAIAAoApQDRQ0AIAJBAWohBwNAIAQNAiAGIAAoAvwCTg0BQQAhBAJAIAAoApQDIAZBAnRqKAIAIgUoAghFDQAgBSgCBCgCACIDKAIAQQJIDQAgBRDKBgJAAkACQAJAIAEOAwACAQILIAMoAlAhAyAFIAc2AhQMAgsgAygCWCEDDAELIAMoAlQhAwsCQCADRQ0AIAUoAhQgAkwNACAFKAIIIAIgAxEAACEECyAFEO0CCyAGQQFqIQYMAAsAC0EAIQQLIAQLXQACQAJAIAEEQCAAKAIAIgEpA4gEIAEpA4AEfEIAVQ0BDAILIAApA0BCAFcNAQsgAEECOgCSASAAQZMGNgIkIABB4fYAQQAQkwFBAUGTBiAALACUAUEAThsPC0EACygBAX8CQCAARQ0AIAAgACgCAEEBayIBNgIAIAENACAAKAIMIAAQXgsLSwAgACABIAIgAxCsASIARQRAIAIoAgAiACgCSC4BHkECTgRAIAAQSSACQQA2AgBB45wEECkPCyAAQQA6AABBAA8LIAJBADYCACAAC6sBAQN/IwBBEGsiBCQAAkAgACgCACAAIAEQwwEiBSAEQQxqQQAQpwEiAA0AIAQoAgwiACgCBCEGAkAgBUF/cyABakEFbCIBQQBIBEAgABCmAUHVkgQhAQwBCyACIAEgBmoiAS0AADoAACADBEAgAyABQQFqEC02AgALIAAQpgFBACEAQd2SBCEBIAItAABBBmtB/wFxQfoBSw0BCyABECkhAAsgBEEQaiQAIAALhAEBA38CQEGspwQoAgAgAEgNAEHEpwQoAgAiA0UNAEHEpwQgAygCADYCAEHIpwRByKcEKAIAIgFBAWs2AgBBzKcEIAFBtKcEKAIATDYCAEEHIAAQgQVBAUEBEI0EIAMPCyAArBB2IgEEfyABEIECIQJBByAAEIEFQQIgAhCNBCABBUEACwvGBQICfwF+An8gAC0AEUEBTQRAQQAgAC0AEkECSQ0BGgsgABD/CAJAIAAoAkQiBCgCAEUNACAEEKUGBEAgBBCUAQwBCwJAAkACQAJAIAAtAAUiA0EBaw4DAgEAAQtBACEDAkAgACkDUFANACAEQgAQkgIiAw0AQQAhAyAALQAIRQ0AIAAoAkQgAC0AChDrASEDCyAAQgA3A1AMAwsgAC0ABEUgA0EFRnINAQsgAQR/QQEFIAAtAAxBAEcLIQQjAEEQayIDJAACQCAAKQNQUARAQQAhAQwBCyAAKAJEIQECfyAERSAAKQOwASIFQgBScUUEQCABQgAQkgIMAQsgAUGA+gFBHEIAEHoLIgENAEEAIQEgAC0AB0UEQCAAKAJEIAAtAApBEHIQ6wEhAQsgASAFQgBXcg0AIAAoAkQgA0EIahC8ASIBDQBBACEBIAMpAwggBVcNACAAKAJEIAUQkgIhAQsgA0EQaiQAIAEhAyAAQgA3A1AMAQsgAC0ADCEBIAQQlAFBACEDIAENACAAKAIAIAAoArwBIAAtAAkQ9AEhAwsgACgCPBDKAiAAQQA2AjAgAEEANgI8IANFBEACQAJAIAAtAA9FBEAgACACEPIKRQ0BCyAAKALkARCMBwwBCyAAKALkASIEIQEDQCABKAIAIgEEQCABIAEvARxB8/8DcTsBHCABQSBqIQEMAQsLIAQgBCgCBDYCCAsgACgC5AEgACgCHBD+CAsCQCAAKALoASIBBEAgARCpBgwBCyACRSADcg0AQQAhAyAAKAIcIgEgACgCJE8NACAAIAEQhgchAwsgAkUgA3JFBEBBACAAKAJAQRZBABCGAyIBIAFBDEYbIQMLAn9BACAALQAEDQAaIAAoAugBIgEEQEEAIAFBABCkBkUNARoLIABBARDuAgshASAAQQA6ABQgAEEBOgARIAMgASADGwsLLQACQAJAIAFB/wFxQQprDgQAAQEAAQsgAEEGOgARIAAgATYCLCAAEPUECyABCzMBAX8gACgCBCECIAAQTCACKAIAKALkASIAIAE2AhAgACgCLCAAEPMEQfj0AygCABEFAAvlAQEDfyAAKAIMIQICQCABQQFxRQ0AIAAgAigCCEYEQCACIAAoAiQ2AggLIAAoAiQhAwJAAkAgACgCICIERQRAIAIgAzYCBCADRQ0BDAILIAQgAzYCJCAAKAIkIgMNASACIAQ2AgAMAgsgAkECOgAhIAJBADYCAAwBCyADIAQ2AiALAkAgAUECcUUNACAAQQA2AiQgACACKAIAIgE2AiACQCABBEAgASAANgIkDAELIAIgADYCBCACLQAgRQ0AIAJBAToAIQsgAiAANgIAIAIoAggNACAALQAcQQhxDQAgAiAANgIICwtrAQJ/IwBBMGsiBCQAIAAoAggoAigoAgwiAEEATgRAIAQgATsBECAEIAOsNwMgIAQgAqw3AxggBCAEQRBqNgIAIARBADsBEkEFQQAgAEEGIARB+PkDKAIAEQQAQX9GGyEFCyAEQTBqJAAgBQsOACAAQQEgARC1CUEARwsYAQF/QoAEEK8BIgEEQCABIAA2AgALIAEL7hIBEH8jAEHwAGsiDiQAAn8CQAJAIAEEQCABLQAAIQggAUHwrQEQlQFFBEAgCEUhBwwDCyAIDQELQQEhByACEKQHDQELQQAgBUGAAXFFDQEaCyAEQQJyIQRBAQshEEEHIQgCQEIwEK8BIglFDQAgCSACNgIAIAlBADoACCAJQQE2AiQgCSAJNgIgAkACQAJAAkACQAJAIAcgECAFQf95cUGABHIiBiAGIAUgBxsgEBsgBSAFQYACcUEIdhsiDEHAAHFFcXIgDEGAgAhxRXJFBEAgACgCCEEBaiIFIAEQMUEBaiIGIAUgBkobrBB2IQcgCUEBOgAJIAdFDQYCQCAQBEAgByABIAYQJRoMAQsgACABIAUgBxCgCSIIQYAEckGABEYNACAHECMMBwtB0KcEIQUCQANAIAUoAgAiBUUNAQJAAkAgByAFKAIAIghBABC5BhCVAQ0AIAAgCCgCAEcNACACKAIUIQgDQCAIQQBMDQIgAigCECAIQQFrIghBBHRqKAIEIgZFDQAgBigCBCAFRw0ACyAHECMgCRAjQRMhCAwLCyAFQcgAaiEFDAELCyAJIAU2AgQgBSAFKAJEQQFqNgJECyAHECMgBQ0BC0LcABCvASIFRQRAQQchCAwEC0EAIQgjAEEQayINJAAgDUGAIDYCDCAAKAIEIgdBwAAgB0HAAEobIQYgBUEANgIAAkACQAJ/AkACQCAEQQJxIhEEQCABRQRAQQEhEkEBIRMMAwsgAS0AAEUEQEEBIRMgASEIDAMLQQAgARBaIgpFDQFBASESQQEhEyAKEDEMAwtBASEPAkAgAUUEQEEBIRIMAQsgAS0AAEUEQCABIQgMAQtBACAAKAIIQQFqIghBAXSsEI0BIgpFDQEgCkEAOgAAIAxBB3RBH3VBjgxxIQ8gACABIAggChCgCSEHIAoQMSELIAEQMSABakEBaiIUIQgDQCAILQAABEAgCBA9IAhqQQFqIggQPSAIakEBaiEIDAELCwJAAkAgDyAHIAdBgARGGyIHDQAgCCAUa0EBaiEPIAAoAgggC0EIak4NAUGnygMQ4gEiBw0ADAELQQAgChAnDAYLIAEhCAwECwwDC0EHIQcMAwtBAAshC0EBIQ8LQQchByALQQNsIAZBB2pBeHEiFUEBdGogD2ogACgCBEEHakF4cWpBugJqrRCvASIGRQRAQQAgChAnDAELIAYgBkGgAmoiBzYCQCAGIAZB8AFqNgLkASAGIAcgACgCBEEHakF4cWoiBzYCSCAGIAcgFWoiBzYCRCAHIBVqIgcgBjYAACAGIAdBCGoiBzYCuAECQAJAIAtBAEoEQCAHIAogCxAlIAtqQQFqIQcgBiAUBH8gByAUIA8QJRogDwVBAQsgB2oiBzYCvAEgByAKIAsQJSALaiIHQq3Uvaunztuw7AA3AAAgBiAHQQlqIgc2AuwBIAcgCiALECUgC2pBre6F4wY2AAAMAQsgBkEANgLsASAGQQA2ArwBIAtFDQELQQAgChAnCyAGIAw2ApgBIAYgADYCAEEAIQsCQAJAAn8CQAJAIBINACAILQAARQ0AIA1BADYCCCAAIAYoArgBIAYoAkAgDCANQQhqEIYCIQcgBiANKAIIIgBBB3ZBAXEiCDoAECAHDQMgBigCQBDxAiEHAkAgAEEBcSIKDQAgBhC1BiAGKAKcASIAIA0oAgxNDQAgAEGBwABPBEAgDUGAwAA2AgwMAQsgDSAANgIMCyAGIAYoArgBQaPYAEEAEPcEOgANAkAgB0GAwABxDQAgBigCuAFBu+gAQQAQ9wQNAEEBIQtBAAwDC0EBIQwMAQtBACEICyAGQQE6AA0gBkGBCDsAESAMQQFxIQpBAQshDCAGIA1BDGpBfxC2AyIHDQAgDSgCDCEHIAYoAuQBQQBBMBAoIgAgBjYCKCAAQQBBDiARGzYCJCAAQQI6ACEgACARQQF2RToAICAAQoGAgICACzcCGCAAQuSAgIAQNwIQIAAgBxCdCSIHRQ0BCyAGKAJAEJQBIAYoAuABEKYCIAYQIwwBCyAGQf////8DNgKgASAGIAw6AAwgBiAMOgATIAYgDDoABCAGIBM6AA8gBiAKOgAOIAYgDDoAByAGIARBAXEiB0U6AAYgCwRAIAZBgYCI0AA2AggLIAZCfzcDsAEgBkHYADsBlAEgBhC1BkECIQACQCAHRQRAQQQhACAIIBFyRQ0BCyAGIAA6AAULIAZBDzYC2AEgBhD1BCAFIAY2AgBBACEHCyANQRBqJAAgByIIDQIgBSgCACACKQMwNwOIASAFKAIAIQAgDkEAQeQAECghCCAAKAJAIgAoAgAEf0EAIAAgCEHkAEIAEIIBIgAgAEGKBEYbBUEACyIIDQIgBSACNgIEIAUgBDoAECAFKAIAIgAgBTYCxAEgAEEQNgLAASAAKAJAQQ8gAEHAAWoQ8gIgCSAFNgIEIAVCADcCCCAFKAIAIgctAA4EQCAFIAUvARhBAXI7ARgLIAUgDi0AEUEQdCAOLQAQQQh0ciIANgIkIAVBJGohCAJAQQAgAEGBgARrQf+DfE8gAEEBayAAcRtFBEBBACEEIAhBADYCACABRSAQcg0BIAVBADsAEQwBCyAOLQAUIQQgBSAFLwEYQQJyOwEYIAUgDkE0ahAtQQBHOgARIAUgDkFAaxAtQQBHOgASCyAHIAggBBC2AyIIDQIgBUEBNgJEIAUgBSgCJCAEazYCKCAJLQAJRQ0EIAVB0KcEKAIANgJIQdCnBCAFNgIADAELIAktAAlFDQMLQQAhASACKAIUIgBBACAAQQBKGyEAA0AgACABRg0DAkAgAigCECABQQR0aigCBCIERQ0AIAQtAAlFDQADQCAEIgEoAhwiBA0ACwJAIAkoAgQiACABKAIESQRAIAkgATYCGCABQRxqIQRBACECIAkhAQwBCwNAIAEiAigCGCIBRQRAIAlBADYCGCACQRhqIQQgCSEBDAILIAEoAgQgAEkNAAsgCSACNgIcIAkgATYCGCACQRhqIQQgCSECCyABIAI2AhwgBCAJNgIADAQLIAFBAWohAQwACwALIAUoAgAiAEUNACAAQQAQnwkLIAUQIyAJECMgA0EANgIADAILIAMgCTYCAEEAIQggCUEAQQAQnglFBEAgCUGwcBD9AwsgBSgCACgCQCIAKAIARQ0BIABBHiAFQQRqEPICDAELIAkQIwsgDkHwAGokACAIC4gCAQZ/QQIhBQJAAkAgAkEEayIEDgUBAAAAAQALIAIhBSAEQXxLDQBBysoKEJ8BGg8LAkAgACAFIAFBABCpAiIGRQ0AIAYoAgxFDQAgACgCuAEEQCAAQQVB3R1BABDeAQ8LIABBABDMAiAFIAYtAARB9wFxRw0AIABBrANqIAEQjwEhCEEAIQQDQCAEQQNGDQEgCCAEQRRsaiIHLQAEIAYtAARGBEAgBygCECIJBEAgBygCCCAJEQMACyAHQQA2AgwLIARBAWohBAwACwALIAAgBSABQQEQqQIiAUUEQA8LIAFBADYCECABQQA2AgggASADNgIMIAEgBSACQQhxcjoABCAAQQAQkQELmQMBA38CQCABRSAFQQAgBxtyIAdFIAZBAEdGIAJBgAFrQf9+SXIgCEUgCUVzcnJFBEAgARAxQYACSA0BC0HZwwoQnwEPCyADQYCQ4AFxIQwCQAJAAkACQAJAIANBB3EiA0EBaw4FAwMDAAECC0ECIQMMAgsgACABIAIgDEEBciAEIAUgBiAHIAggCSAKEIQEIgsNAiAAIAEgAiAMQQJyIAQgBSAGIAcgCCAJIAoQhAQiCw0CQQMhAwwBC0EBIQMLQQAhCwJAAkAgACABIAIgA0EAEIgCIg1FDQAgDSgCBEEDcSADRw0AIA0sAAAgAkcNACAAKAK4AQRAIABBBUGeHUEAEN4BQQUPCyAAQQAQzAIMAQsgBSAHckUNAQsgACABIAIgA0EBEIgCIgFFBEBBBw8LIAAgARCRCiAKBEAgCiAKKAIAQQFqNgIACyABIAo2AiQgASAJNgIcIAEgCDYCGCABIAc2AhQgASAENgIIIAEgAjoAACABIAUgBiAFGzYCECABIAEoAgRBA3EgDHJBgICAAXM2AgQLIAsLhwEBBH8gAUEAIAFBAEobIQRBACEBA0AgASAERkUEQAJAIAAgAUEobGoiAygCICICEDEgAiwAAGpBF28iBSACEMEJIgIEQCADIAIoAgw2AgwgAkEMaiECDAELIANBADYCDCADIAVBAnRBgKYEaiICKAIANgIkCyACIAM2AgAgAUEBaiEBDAELCwsqACAAIAFBEEEMIAEoAgRBgAhxIgAbaigCACABQQxBECAAG2ooAgAQywILnqkBAiJ/AX4jAEHwCWsiESQAIAAoAgAiEygCfCEZIBMoArgBRQRAIBNBADYCqAILIAAgATYC6AEgAEEANgIMIBFBMGoiAkEANgIIIAIgADYCBCACIAJBrAlqNgK4CSACIAJBCGo2AgAgEygCiAIhHiATIAA2AogCQX8hFwNAAkAgGSABIBFB7AlqEI8EIhprIhlBAEgEQCAAQRI2AgwgACAAKAIkQQFqNgIkDAELAkAgESgC7AkiAkGkAUgEQCACIRcMAQsgEygCqAIEQCAAQQk2AgwgACAAKAIkQQFqNgIkDAILIAJBtwFGBEAgASAaaiEBDAMLIAEtAABFBEBBACEaQQAhBQJAAkAgFw4CBAEAC0EBIQULIBEgBTYC7AkgBSEXDAELIBECfwJAAkACQAJAIAJBpAFrDgMDAAECCyMAQRBrIgUkACAFIAFBBGo2AgxBOyECIBdBF0YEQEGlAUGlAUE7IAVBDGoQ0AQiAkEWRhsgAkE7RhshAgsgBUEQaiQAIAIMAwsjAEEQayICJAAgAiABQQZqNgIMAn8gF0EXRgRAQaYBIAJBDGoQ0ARBFkYNARoLQTsLIQUgAkEQaiQAIAUMAgsgESAaNgIsIBEgATYCKCARIBFBKGo2AiAgAEHx3wEgEUEgahAmDAMLIwBBEGsiAiQAIAIgAUEGajYCDEE7IQUgAkEMahDQBEE7RgRAQaQBQTsgAkEMahDQBEEYRhshBQsgAkEQaiQAIAULIhc2AuwJCyAAIBo2AsgBIAAgATYCxAEgESAAKQLEATcDGCMAQSBrIhQkACARQTBqIhIoAgQhBCASKAIALwEAIQICQANAIBdB//8DcSEFIAJB//8DcSIGQb8ETQR/IAZBAXRBkJwCai8BACEHAn8CQANAIAcgBSICaiIFQQF0QZClAmovAQAgAkYNASACQQF0QfCVAmovAQAiBQ0ACyACQf//A3FFIAdB5QBqIgJBAXRBkKUCai8BAEHlAEdyRQRAIAJBAXRB8MgCagwCCyAGQQF0QeDpAmoMAQsgBUEBdEHwyAJqCy8BAAUgBgtB//8DcSIFQdsJTwRAAkAgBUGVjwJqLQAADQAgEigCACASKAK4CUkNACASEJIIDAMLIBQgESkCGDcDAEEAIQJBACEGQQAhCkEAIQhBACEHQQAhCyMAQbABayINJAAgEigCACEDAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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AjYCACACIANBCGsoAgAgAygCBBDwBQybAQsgA0EUayICIARBACACKAIAEDsiAjYCACACIANBCGsoAgAgAygCBBDwBQyaAQsgA0EANgIEDJkBCyADQQE2AgQMmAELIANBfzYCEAyXAQsgA0EIa0EANgIADJYBCyADQQhrQQE2AgAMlQELIANBADYCEAyUAQsgA0EIayADKAIENgIADJMBCyADQQhrIARBlAEgAygCBEEAEDU2AgAMkgELIANBIGsgBEGUASADQRRrKAIAIAMoAgQQNTYCAAyRAQsgA0EgayAEQZQBIAMoAgQgA0EUaygCABA1NgIADJABCyAEIANBFGsiAigCACADQQhrEPIFIAQgAigCACADKAIEEO8FDI8BCyAEIAMoAgQQzQQgA0EIa0EANgIADI4BCyAEIAMoAgQQzQQgA0EgayADQRRrKAIANgIADI0BCyAEIANBOGsiAigCACADQSxrEPIFIAQgA0EUayIGKAIAQaMREIUIAkAgA0EIaygCACIFRQRAIAIoAgAhBQwBCyAFKAIAQQJOBEAgBEEAIAVBAEEAQQBBAEGAEEEAELYBIQUgDUIANwOQASAEQQBBAEEAIA1BkAFqIAVBABCCAiEFCyACIAQgAigCACAFEIQIIgU2AgALIAQgBSAGKAIAIAMoAgQgA0HEAGsoAgBBABDuBQyMAQsgA0EsayICIAQgAigCACADKAIEEDsiAjYCACAEIAIgA0EUa0EBEOYCDIsBCyADQcQAayICIAQgAigCACADQSBrKAIAIAMoAgQQgwg2AgAMigELIAQgBEEAIAMoAgQQOyICIANBFGsiBUEBEOYCIAUgAjYCAAyJAQsgA0EsayAEQQAgA0EgaygCACADKAIEEIMINgIADIgBCyAEIANBIGsoAgAgA0EIaygCACADQRRrKAIAIANBOGsoAgAgAygCBBDtBQyHAQsgBCADQSxrKAIAQQAgA0EgaygCACADQcQAaygCAEEAEO0FDIYBCyADQQA2AhAMhQELIANBCGtBADYCACAEIAMoAgQQzQQMhAELIANBgAFrIAQoAgAgA0HcAGsoAgAgA0HEAGsoAgAgA0EUaygCACADQQhrKAIAIAMoAgQQ6wM2AgAMgwELIANB3ABrIAQoAgAgA0E4aygCACADQSBrKAIAQQBBACADKAIEEOsDNgIADIIBCyADQSxrIAQoAgBBAEEAQQBBAEEAEOsDNgIADIEBCyADQdAAayAEKAIAQQBBACADQRRrKAIAIANBCGsoAgBBABDrAzYCAAyAAQsgBCADKAIEEM0EDH8LIANBADYCEAx+CyADQRRrIANBCGsoAgA2AgAMfQsgA0EUayICIAQgAigCACADQQRqEOwFNgIADHwLIAMgBEEAIANBBGoQ7AU2AgQMewsgA0EUayADQQhrKAIANgIADHoLIA0gAykCBDcDQCADIARBOyANQUBrEIMCNgIEDHkLIA0gA0EUayICKQIANwNQIARBOyANQdAAahCDAiEFIA0gAykCBDcDSCACIARBjQEgBSAEQTsgDUHIAGoQgwIQNTYCAAx4CyANIANBLGsiBSkCADcDaCAEQTsgDUHoAGoQgwIhAiANIANBFGspAgA3A2AgBEE7IA1B4ABqEIMCIQYgDSADKQIENwNYIARBjQEgBiAEQTsgDUHYAGoQgwIQNSEGIAQtANABQQJPBEAgBEEAIAIQowELIAUgBEGNASACIAYQNTYCAAx3CyADLwECIQIgDSADKQIENwNwIAMgBCACIA1B8ABqEIMCNgIEDHYLIAQoAgBBmwEgA0EEakEBEHkiAgRAIAIgAygCBCAEKALoAWs2AiQLIAMgAjYCBAx1CwJAIAMoAgQiAi0AAEEjRgRAIAItAAFBOmtBdUsNAQsgAygCCCEHIA0gAykCBDcDeCADIARBnAEgDUH4AGoQgwIiCTYCBCMAQRBrIgokAAJAIAlFDQAgBCgCACELAkACQCAJKAIIIgIwAAEiJFAEQCAEIAQvAcwBQQFqIgU7AcwBDAELAkACQCACLQAAQT9GBEAgB0ECRgR+ICRCMH0FIAJBAWogCkEIaiAHQQFrQQEQ9QJBAEchBiAKKQMICyIkQgBXIAZyICQgCygCnAEiBaxVcg0EICSnQRB0QRB1IgUgBC4BzAFMDQEgBCAFOwHMASAEKALgASEGDAILIAQoAuABIgYgAiAHEN4JIgVB//8DcQ0CIAQgBC8BzAFBAWoiBTsBzAEMAQsgBCgC4AEiBiAFEOAJDQELIAQCfyACIQggBUEQdEEQdSEQAkAgBiICIAsgAiAHQQRtQQNqIgysIAIEfiACKAIEIg4gDGoiDyACKAIAIgZMBEAgAiEGDAILIAasQgGGBUIKC3wiJEIChhC5ASIGRQ0BGgJ/IAIEQCAGKAIEDAELIAZBAjYCBEECCyEOIAYgJD4CACAMIA5qIQ8LIAYgDkECdGoiAiAQNgIAIAIgDDYCBCAGIA82AgQgAkEIaiAIIAcQJSAHakEAOgAAIAYLNgLgAQsgCSAFOwEgIAsoApwBIAVBEHRBEHVODQEgBEHTKkEAECYgBCgCACAJEPgCDAELIAogBTYCACAEQbf7ACAKECYgBCgCACAJEPgCCyAKQRBqJAAMdQsgDSADKQIEIiQ3A5ABIAQtABJFBEAgDSANQZABajYCgAEgBEGawgAgDUGAAWoQJiADQQA2AgQMdQsgAyAEQbABQQBBABA1IgI2AgQgAkUNdCAkp0EBaiACQRxqENACGgx0CyADQRRrIgIgBCACKAIAIANBBGpBARCCCDYCAAxzCyADQThrIAQoAgBBJCADQQhrQQEQeSICNgIAIAQoAgAgAiADQSBrKAIAQQAQgQgMcgsgA0EsayICIAQgA0EIaygCACACIANBFGsoAgAQngI2AgAMcQsgA0EgayICIARBACACQQAQngI2AgAMcAsgBCAEIANBFGsoAgAgA0E4ayICIANBIGsoAgAQngIiBSADKAIEEIAIIAIgBTYCAAxvCyAEIARBACADQSxrIgJBABCeAiIFIAMoAgQQgAggAiAFNgIADG4LIAMgBEEAIANBBGpBABCeAjYCBAxtCyAEIANBIGsoAgAgA0EIaygCABA7IQIgA0EsayIGIARBsQFBAEEAEDUiBTYCACAFBEAgBSACNgIUIAIoAgBFDW0gBigCACIFIAUoAgQgAigCCCgCBEGIhIACcXI2AgQMbQsgBCgCACACEDkMbAsgA0EUayICIAQgAigCACADKAIEENIBNgIADGsLIANBFGsiAiAEIANBCmsvAQAgAigCACADKAIEEDU2AgAMagsgA0EMayICIAMpAgQiJDcCBCACICRCIIinQYCAgIB4cjYCCAxpCyADQQRrIgIgAigCACIGQf////8HcTYCACADQRRrIgIgBCAEIARBACADKAIEEDsgAigCABA7IANBCGtBABCeAiIFNgIAIAZBAEgEQCACIARBEyAFQQAQNSIFNgIACyAFRQ1oIAUgBSgCBEGAAnI2AgQMaAsgA0EcayICIAIoAgAiBkH/////B3E2AgAgA0EsayICIAQgBCAE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AyAFENQGCyAGQfABaiQAC0gBAn8CfyABQR9NBEAgACgCBCECIAAMAQsgAUEgayEBIABBBGoLKAIAIQMgACACIAF2NgIEIAAgAkEgIAFrdCADIAF2cjYCAAtCAQJ/AkAgAEUNAAJAIAAvARAiA0GCBHFBggRHDQAgAC0AEiABRw0AIAAoAggPCyADQQFxDQAgACABEO4JIQILIAILzAkCBH4EfyMAQfAAayIKJAAgBEL///////////8AgyEFAkACQCABUCIJIAJC////////////AIMiBkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAGUBtFBEAgA0IAUiAFQoCAgICAgMD//wB9IghCgICAgICAwICAf1YgCEKAgICAgIDAgIB/URsNAQsgCSAGQoCAgICAgMD//wBUIAZCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgBUKAgICAgIDA//8AVCAFQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAGQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiCRshBEIAIAEgCRshAwwCCyADIAVCgICAgICAwP//AIWEUA0BIAEgBoRQBEAgAyAFhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAFhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAFIAZWIAUgBlEbIgwbIQUgBCACIAwbIghC////////P4MhBiACIAQgDBsiB0IwiKdB//8BcSELIAhCMIinQf//AXEiCUUEQCAKQeAAaiAFIAYgBSAGIAZQIgkbeSAJQQZ0rXynIglBD2sQqQEgCikDaCEGIAopA2AhBUEQIAlrIQkLIAEgAyAMGyEDIAdC////////P4MhBCALRQRAIApB0ABqIAMgBCADIAQgBFAiCxt5IAtBBnStfKciC0EPaxCpAUEQIAtrIQsgCikDWCEEIAopA1AhAwsgBEIDhiADQj2IhEKAgICAgICABIQhAiAGQgOGIAVCPYiEIQQgA0IDhiEBIAcgCIUhAwJAIAkgC0YNACAJIAtrIgtB/wBLBEBCACECQgEhAQwBCyAKQUBrIAEgAkGAASALaxCpASAKQTBqIAEgAiALEP8CIAopAzAgCikD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KAIAIgE2AgwgASADNgIIIAIgAzYCCCADIgIoAgghAwsgAkEANgIICyAEQQFqIQQMAAsACwNAIAMEQCADKAIIIQEgAxAjIAEhAwwBCwsgCCECCyAJECMMAwUgBCgCDCEEDAELAAsACyAKQQJHDQIgBiACKAIMIgg2AgggBiACKAIQIgM2AgQgAkIANwIMIAhBADYCCCADQQA2AggCQCAGQQhqIAFBAWsiARCbBSIFBH8gAwUgBkEEaiABEJsFIgVFDQEgBigCBAsQjgIgBigCCBCOAgwBCyACIAYoAggiATYCDCABIAI2AgggAiAGKAIEIgE2AhAgASACNgIIQQAhBQsgBQ0AQQAhBQwBCyACEI4CQQAhAgsgACACNgIAIAZBEGokACAFC+ABAQN/IwBBEGsiAyQAAkACQANAIAENASAAKAKAAiACSgRAQQAgACAAKAKYAiACQX8Q9QYiASABQeUARhshASACQQFqIQIMAQsLIAAQpARBACEBIAAtAO0BRQ0BIAAoAjBB/wFHDQEgACgCNEUNAUEAIQIgA0EANgIMIABBFiADQQxqQQAQUiIBDQEgAygCDCIBQQFBAhB1GgJAAkACQCABEENB5ABrDgIAAQILQQggAUEAEL8BIgIgAkEBRhshAgsgACACNgIwCyABEDohAQwBCyAAEKQECyADQRBqJAAgAQuYAQEDfyABLQAHRQRAQQAPCwJAAkAgARDCCiICDQAgASgCACIDIAMoAjhBAWo2AjggASgCDEEBIAEpAyAQWBogAUEAOgAHIAEoAgwQQyECIAMgAygCOEEBazYCOCACQeQARg0BIAEoAgwQOiICDQAgASgCACgCKA0BIAFBAToABkGLAiECCyAABEAgACACENgBCyACIQQLIAQLGQAgACABIAIQ1AoiAEUEQEEADwsgACgCCAuEBAICfwR+IwBBEGsiByQAIAcgAygCACIINgIMAkAgCEUEQEIBIQlCf0IBIAAbIQsgASACaiECQQAhAANAIAEgAkkEQCAHIAEgBxClASABaiIANgIIIAcpAwAhDEEAIAdBCGoQ6gEgCSAMfiAKfCEKIAcoAgghAQNAAkAgASACTw0AIAEtAAANACABQQFqIQEMAQsLIAcgATYCCCALIQkMAQsLIAUgAiAAazYCACADIAA2AgAgBCAKNwMADAELIwBBEGsiCCQA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hUKAgICAgICAgIB/gyENIARCMIinQf//AXEhCAJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAhB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiDEKAgICAgIDA//8AVCAMQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQ0MAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhDSADIQEMAgsgASAMQoCAgICAgMD//wCFhFAEQCADIAJCgICAgICAwP//AIWEUARAQgAhAUKAgICAgIDg//8AIQ0MAwsgDUKAgICAgIDA//8AhCENQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAQgAhAQwCCyABIAyEUARAQoCAgICAgOD//wAgDSACIAOEUBshDUIAIQEMAgsgAiADhFAEQCANQoCAgICAgMD//wCEIQ1CACEBDAILIAxC////////P1gEQCAFQcACaiABIAogASAKIApQIgYbeSAGQQZ0rXynIgZBD2sQqQFBECAGayEGIAUpA8gCIQogBSkDwAIhAQsgAkL///////8/Vg0AIAVBsAJqIAMgCyADIAsgC1AiBxt5IAdBBnStfKciB0EPaxCpASAGIAdqQRBrIQYgBSkDuAIhCyAFKQOwAiEDCyAFQaACaiALQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABCkASAFQZACakIAIAUpA6gCfUIAIARCABCkASAFQYACaiAFKQOYAkIBhiAFKQOQAkI/iIQiBEIAIAJCABCkASAFQfABaiAEQgBCACAFKQOIAn1CABCkASAFQeABaiAFKQP4AUIBhiAFKQPwAUI/iIQiBEIAIAJCABCkASAFQdABaiAEQgBCACAFKQPoAX1CABCkASAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABCkASAFQbABaiAEQgBCACAFKQPIAX1CABCkASAFQaABaiACQgAgBSkDuAFCAYYgBSkDsAFCP4iEQgF9IgJCABCkASAFQZABaiADQg+GQgAgAkIAEKQBIAVB8ABqIAJCAEIAIAUpA6gBIAUpA6ABIgwgBSkDmAF8IgQgDFStfCAEQgFWrXx9QgAQpAEgBUGAAWpCASAEfUIAIAJCABCkASAGIAkgCGtqIQYCfyAFKQNwIhNCAYYiDiAFKQOIASIPQgGGIAUpA4ABQj+IhHwiEELn7AB9IhRCIIgiAiAKQoCAgICAgMAAhCIVQgGGIhZCIIgiBH4iESABQgGGIgxCIIgiCyAQIBRWrSAOIBBWrSAFKQN4QgGGIBNCP4iEIA9CP4h8fHxCAX0iE0IgiCIQfnwiDiARVK0gDiAOIBNC/////w+DIhMgAUI/iCIXIApCAYaEQv////8PgyIKfnwiDlatfCAEIBB+fCAEIBN+IhEgCiAQfnwiDyARVK1CIIYgD0IgiIR8IA4gDiAPQiCGfCIOVq18IA4gDiAUQv////8PgyIUIAp+IhEgAiALfnwiDyARVK0gDyAPIBMgDEL+////D4MiEX58Ig9WrXx8Ig5WrXwgDiAEIBR+IhggECARfnwiBCACIAp+fCIKIAsgE358IhBCIIggCiAQVq0gBCAYVK0gBCAKVq18fEIghoR8IgQgDlStfCAEIA8gAiARfiICIAsgFH58IgtCIIggAiALVq1CIIaEfCICIA9UrSACIBBCIIZ8IAJUrXx8IgIgBFStfCIEQv////////8AWARAIBYgF4QhFSAFQdAAaiACIAQgAyASEKQBIAFCMYYgBSkDWH0gBSkDUCIBQgBSrX0hCkIAIAF9IQsgBkH+/wBqDAELIAVB4ABqIARCP4YgAkIBiIQiAiAEQgGIIgQgAyASEKQBIAFCMIYgBSkDaH0gBSkDYCIMQgBSrX0hCkIAIAx9IQsgASEMIAZB//8AagsiBkH//wFOBEAgDUKAgICAgIDA//8AhCENQgAhAQwBCwJ+IAZBAEoEQCAKQgGGIAtCP4iEIQogBEL///////8/gyAGrUIwhoQhDCALQgGGDAELIAZBj39MBEBCACEBDAILIAVBQGsgAiAEQQEgBmsQ/wIgBUEwaiAMIBUgBkHwAGoQqQEgBUEgaiADIBIgBSkDQCICIAUpA0giDBCkASAFKQM4IAUpAyhCAYYgBSkDICIBQj+IhH0gBSkDMCIEIAFCAYYiAVStfSEKIAQgAX0LIQQgBUEQaiADIBJCA0IAEKQBIAUgAyASQgVCABCkASAMIAIgAiADIAJCAYMiASAEfCIDVCAKIAEgA1atfCIBIBJWIAEgElEbrXwiAlatfCIEIAIgAiAEQoCAgICAgMD//wBUIAMgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgJWrXwiBCACIARCgICAgICAwP//AFQgAyAFKQMAViABIAUpAwgiA1YgASADURtxrXwiASACVK18IA2EIQ0LIAAgATcDACAAIA03AwggBUHQAmokAAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEBBfyEEIAAgAlQgASADUyABIANRGw0BIAAgAoUgASADhYRCAFIPC0F/IQQgACACViABIANVIAEgA1EbDQAgACAChSABIAOFhEIAUiEECyAECzUAIAAtABFBkAFxBEAgABCHBQsgACgCGARAIAAoAhQgACgCIBBeIABBADYCGAsgAEEANgIIC5gEAwN8An4CfwJ8AkAgAL0iBEI0iKdB/w9xIgZByQdrQT9JBEAgBiEHDAELIAZByAdNBEAgAEQAAAAAAADwP6APCyAGQYkISQ0ARAAAAAAAAAAAIARCgICAgICAgHhRDQEaIAZB/w9GBEAgAEQAAAAAAADwP6APCyAEQgBTBEBEAAAAAAAAABAQ/wkPC0QAAAAAAAAAcBD/CQ8LQYC3AysDACAAokGItwMrAwAiAaAiAiABoSIBQZi3AysDAKIgAUGQtwMrAwCiIACgoCIBIAGiIgAgAKIgAUG4twMrAwCiQbC3AysDAKCiIAAgAUGotwMrAwCiQaC3AysDAKCiIAK9IgWnQQR0QfAPcSIGQfC3A2orAwAgAaCgoCEAIAZB+LcDaikDACAFQi2GfCEEIAdFBEACfCAFQoCAgIAIg1AEQCAEQoCAgICAgICIP32/IgEgAKIgAaBEAAAAAAAAAH+iDAELIwBBEGshByAEQoCAgICAgIDwP3y/IgIgAKIiASACoCIDRAAAAAAAAPA/YwR8IAdCgICAgICAgAg3AwggByAHKwMIRAAAAAAAABAAojkDCEQAAAAAAAAAACADRAAAAAAAAPA/oCIAIAEgAiADoaAgA0QAAAAAAADwPyAAoaCgoEQAAAAAAADwv6AiACAARAAAAAAAAAAAYRsFIAMLRAAAAAAAABAAogsPCyAEvyIBIACiIAGgCws0AQF/IAAEQCAAKAIIEPgBIAAoAgAiAQRAIAEQ4AYLIAAoAgQiAQRAIAEQ4AYLIAAQ+AELC38CAn8CfgJAIABBABBHIgFFDQAgASgCOCICRQ0AIAFBADYCPCACQaMDIAEQgwogASgCOBCCCiABKAI4EPgBIAEpAzBQBEAgASkDACEDIAEpAygiBEIBUQRAIAAgAxBjDwsgACADuSAEuaMQXA8LIAAgASsDCCABKQMouaMQXAsLOAECfwNAAkAgAEF/Rg0AIAAtAAAiAkUNACABQQFqIQEgAkGwtANqLQAAIABqQQFqIQAMAQsLIAELgwEBA38gACgCJCECIAAoAgAhAQJAIAAoAnwEQCABIAEtAFhBAWo6AFgQuwEgASgCoAIiA0UEQCABIAEQ4wIiAzYCoAILIAMgACgCfEF/EMYFELoBIAEgAS0AWEEBazoAWAwBCyABKAKgAiIARQ0AIAAQYgsgAUF/NgJEIAEgAjYCQCACC7gBAQN/IAAoAgghAyAAKAIQIAFBAnRqIAI2AgACQAJAAkAgAyABQQxsaiIDLQAAQQZrDgIAAQILQQEhAgNAIAIgAygCBEsNAiAAIAEgAmogARDkBiADIAJBDGxqENwBIAJqIQIMAAsACyADQQxqIQRBASECA0AgAiADKAIESw0BIAAoAhAgASACaiIFQQJ0aiABNgIAIAAgBUEBaiABEOQGIAQgAkEMbGoQ3AEgAmpBAWohAgwACwALC4cBAgJ/AXwjAEEQayICJAACQAJAIAAoAgBBAkgNACAAKAJIIgNFDQAgACABIAMRAAAhAAwBCyAAIAJBCGogACgCQBEAACEAIAECfiACKwMIRAAAAABwmZRBoiIEmUQAAAAAAADgQ2MEQCAEsAwBC0KAgICAgICAgIB/CzcDAAsgAkEQaiQAIAALaQIBfwF+IwBBEGsiBCQAAkAgASkDCCABKQMQIACsfFgEQCABIAAQygMNAQsgBCADNgIMIAAgASgCBCABKAIQaiACIAMQgwkaIAEgASgCBCABKQMQIgWnahA9rCAFfDcDEAsgBEEQaiQAC48BAQJ/IwBBEGsiAyQAAkAgAkUEQCABQSQQgwEMAQsgACABIAAoAjAgAkECdGooAgAiBBDnBiAAKAIoIgAgBEEMbGoiBC0AAEEGRgRAIAMgBCgCCDYCAEEeIAFBnYoBIAMQ5gYMAQsgASAAIAJBDGxqIgAtAAFBBnZBAXFBDGwgAGpBDGsQiQoLIANBEGokAAtJAQF/IAAoAggiAQRAIAEgACgCACgCDCgCEBEBABogAEEANgIICyAAKAIEECMgAEIANwIMIABBADYCBCAAQgA3AhQgAEIANwIcCzMBAX8gASABKAIIQQFrIgI2AgggAkUEQCABKAIQIgIEQCABKAIMIAIRAwALIAAgARAnCwsrAQF/IAEoAhQiAgRAIAIgAigCHEGAgAFyNgIcIAAgAhDTASABQQA2AhQLC5sBAgR/AX4jAEEQayIGJAACQCABKAIAIgVFBEAgACABEK0KIgANASABKAIAIQULQYsCIQAgBUEAEMkBIQcgBUEAEIwCIgFFDQAgByABIAEgB2oiBSAGQQhqEJoFIghIIAYpAwgiCUIAV3INACACIAk3AwAgAwRAIAMgASAIajYCAAtBACEAIARFDQAgBCAFNgIACyAGQRBqJAAgAAt4AQF/QQEhAgJAAkACQAJAAkACQAJAIAFB7ABrDggBBAUEBQQEAQALIAFB4QBrDgMAAQQCCyAAKAIEDwsgACgCCCAAKAIEQR9qQSBtbA8LIAFB+QBGDQILIAAoAgQgACgCCGxBA2whAgsgAg8LIAAoAgggACgCBGwLhgECAn8CfiMAQRBrIgMkACADIAAoAgAiBDYCDAJAIARFDQAgAyABKQMAIgU3AwAgAqwhBgNAIAMoAgwhAgJAIAUgBlMEQCACLQAAQQJPDQFCfyEFQQAhAgsgASAFNwMAIAAgAjYCAAwCCyADQQxqIAMQoAQgAykDACEFDAALAAsgA0EQaiQACwkAIAAoAhgQIwtRACAAQQhqQQBBKBAoGiAAIAI2AgQgACABNgIAIAFFBEAgAEEBNgIIQQAPCyAAIAEtAAAEfyABQQFqIABBEGoQpQFBAWoFQQELNgIIIAAQlgULawAgAqwgBHwgBEIDhnwiBCADrHwgBEIDhnwiBCAFrHwgBEIDhnwiBCAGrHwgBEIDhnwhBEEAIQIgAUEAIAFBAEobIQEDQCABIAJGRQRAIAAgAmowAAAgBEIJfnwhBCACQQFqIQIMAQsLIAQLuAEBAn8jAEEgayIJJAACQCAAQQsgCUEcakEAEFIiCg0AIAkoAhwiAEEBIAEQWBogAEECIAIQdRogAEEDIAMQWBogAEEEIAQQWBoCQCAGUARAIABBBSAFEFgaDAELIAkgBjcDCCAJIAU3AwBB0O4AIAkQSiICRQRAQQchCgwCCyAAQQUgAkF/QQMQ4QkaCyAAQQYgByAIQQAQ0QIaIAAQQxogABA6IQogAEEGEPoCGgsgCUEgaiQAIAoLnwQCCH8CfiMAQRBrIgYkAAJAAkACQAJAAkAgASgCACIFRQRAIAAoAugBIQgMAQsgBSgCICEEIAMgBSgCECIJIAUoAhQgAiADEKEEIgprIgdBAEwEQEGLAiEDDAULIAqsIgwQzQEgBCAHamogB60iDRDNAWoiCyAAKALoASIISgR/IAkNASAFIAsQVyIANgIkIABFDQIgBSgCEAUgCQsEQCAFKAIkIARqIAwQbiAEaiEECyAFKAIkIARqIA0QbiAEaiIAIAUoAiRqIAIgCmogBxAlGiAFIAAgB2o2AiAgBSAFKAIMQQFqNgIMIAUoAhwhBCADIAUoAhhKBEAgBCADQQF0IgAQ5QEiBEUNAiAFIAQ2AhwgBSAANgIYCyAFIAQ2AhAgBCACIAMQJRogBSADNgIUQQAhAwwECyAGIAhBKGoQVyIENgIMIARFDQAgBEIANwIAIARBCzYCICAEQgA3AhggBEIANwIQIARCADcCCCAEIARBKGo2AiQgBUUNASAGIAUoAgA2AgggACAGQQhqIAIgAxDyBiEDIAYoAgghACAFKAIARQRAIAUgADYCAAsgBSAENgIEIAUoAgghAiAEIAA2AgAgBCACNgIIIAQgBSgCHDYCHCAEIAUoAhg2AhggBUEANgIcDAILQQchAwwCCyAEIAQ2AgggACAGQQxqIAIgAxDyBiEDIAYoAgwhBAsgASAENgIACyAGQRBqJAAgAwtLAQN/IAAoAgAhAQNAIAEsAAAiA0EwSCADQTlLciACQcqZs+YASnJFBEAgAUEBaiEBIAJBCmwgA2pBMGshAgwBCwsgACABNgIAIAILGwAgACgCLEUEQEEADwsgASAAKAIYQQFqEL8BC4QPAg1/Bn4jAEHgAGsiCCQAIAhBADYCXCAIQQA2AlggCEIANwMIAkAgACABIAIgA0EAQQBBAUEAIAhBEGoQyAMiBA0AIAgoAhQiBkUNACAIAn8CQCADQX9GDQAjAEEQayIFJAAgAEEPIAVBDGpBABBSIgRFBEAgBSgCDCIEQQEgACABIAJBABCRAhBYGiAEQQIgACABIAJB/wcQkQIQWBogBBBDQeQARgRAIAggBEEAEJkBNwMICyAEEDohBAsgBUEQaiQAIAQNAiADQX5HDQACQCAGQQFHDQAgCCgCECgCACgCOA0AQeUAIQQMAwsgCEIANwNQIAhCADcDSCAIKQMIIhUhEkEDDAELIAAgASACIANBAWoiCRCRAiESQQAhBSMAQRBrIgQkAAJAIABBCCAEQQxqQQAQUiIGDQAgBCgCDCIGQQEgACABIAIgCRCRAhBYGiAGEENB5ABGBEAgBkEAEL8BIQULIAYQOiIGDQBBACEGIAggBUEQTgR/IAAgASACIAkQ9QYhBkEABSAFCzYCXAsgBEEQaiQAIAYiBA0BIAhCADcDUCAIQgA3A0hBAUEBQQMgCCkDCCIVIBJZGyADQX9GGws2AlQgACAIQRBqIAhByABqEKUEIQQDQAJAAkACQCAEDQAgACAIQRBqEMcDIgRB5ABGDQEgBA0AIANBf0cEQCAIKAIQIQYgCCgCFCEJQQAhB0EAIQQjAEEQayIFJAAgBUEANgIMA0AgBCAHIAlOckUEQCAAIAYgB0ECdGooAgAQmgohBCAHQQFqIQcMAQsLAkAgBA0AAkAgA0F+RgRAIABBGiAFQQxqQQAQUiIEDQIgBSgCDCIHQQEgACABIAJBABCRAhBYGiAHQQIgACABIAJB/wcQkQIQWBoMAQsgAEEQIAVBDGpBABBSIgQNASAFKAIMIgdBASAAIAEgAiADEJECEFgaCyAHEEMaIAcQOiEECyAFQRBqJAAgBCAIKAJYIgdFcg0FDAMLIAgoAlgiBw0CQQAhB0EAIQQMBAsgCCgCWCEHDAMLIAgoAjghDCAIKAI8IQcgCCgCQCEPIAgoAkQhDSMAQRBrIg4kAAJAIAgoAlgiBkUEQEEHIQVBwAAQVyIGRQ0BIAggBkEAQcAAECgiBDYCWCAEIAAoAugBEFciCTYCMCAJRQ0BIAQgACgC6AE2AiggAEEKIA5BDGpBABBSIgUNASAOKAIMIgUQQ0HkAEYEQCAEIAVBABCZASIRNwMIIAQgETcDEAsgBRA6IgUNAQsgBigCLCEJQYsCIQUgByAGKAIYIAYoAhwgDCAHEKEEIgtrIgRBAEwNACALrBDNASEKIAStEM0BIAogDawiExDNASANaiIQIARqamohCgJAIAlBAEwNACAAKALoASAJIApqTg0AIAYpAxAiEUL///////////8AUQ0BIAYgEUIBfDcDECAAIBEgBigCMCAJENcCIgUNASAAIAAoAjRBAWo2AjQgACAGIAwgC0EBahDyBiIFDQFBACEJIAZBADYCHCAHrBDNASAHIBBqakEBaiEKIAchBEEAIQsLIAYgBikDOCAKrHw3AzggBigCMCEFAkAgBigCKCAKSARAIAUgChDlASIFRQ0BIAYgCjYCKCAGIAU2AjALIAUgCWogC6wQbiAJaiIFIAYoAjBqIASsEG4hCSAFIAlqIgUgBigCMGogCyAMaiAEECUaIAQgBWoiBCAGKAIwaiATEG4hBSAEIAVqIgQgBigCMGogDyANECUaIAYgBCANajYCLAJAIAcgBigCIEwEQCAGKAIYIQUMAQsgBigCJCAHQQF0IgQQ5QEiBUUNASAGIAU2AiQgBiAENgIgIAYgBTYCGAsgBSAMIAcQJRogBiAHNgIcQQAhBQwBC0EHIQULIA5BEGokACAFIQQMAQsLIAgoAlwhCSMAQRBrIgEkAAJAIAcoAgAEQCABQgA3AwggAUEANgIEIAFBADYCACAHIAcpAxAiFkIBfDcDECAAIBYgBygCMCAHKAIsENcCIgINASAHKAIAIQIgBykDCCEUIAcpAxAhEUEBIQYDQAJAIAIoAgBFBEAgAiAGIBQQlwohBCABIBFCAX03AwggASACKAIgIARrNgIAIAEgBCACKAIkajYCBEEAIQQMAQsgAkEIaiEKQQAhBCARIRMDQCAKKAIAIgVFIARyRQRAIAVBBGohCiAAIBMgBSAGIBQQlwoiBCAFKAIkaiAFKAIgIARrENcCIQQgFCAFKAIMQQFqrHwhFCATQgF8IRMMAQsLIAQNACAGQQFqIQYgAigCACECIBEhFCATIREMAQsLIAQiAg0BIAAgEiAJIAcpAwggFiABKQMIIAcpAzggASgCBCABKAIAEPEGIQIMAQsgACASIAlCAEIAQgAgBykDOCAHKAIwIAcoAiwQ8QYhAgsgACAAKAI0QQFqNgI0IAFBEGokACACIgQNACADQX9HBEBBACEEIBIgFVkNAQsgACASIAcpAzgQmwohBAsgBwRAIAcoAjAQIyAHKAIkECMgBygCABCYCiAHECMLIAhBEGoQiAMgCEHgAGokACAEC/QCAQh/IwBBIGsiBSQAIAVBADYCHCAFQQA2AhggBUEANgIUIAVBADYCDAJAIAJFBEAgBEEANgIADAELIAAoAiQiBigCACEJIAYgASACQX8gBUEIahDYAiIGDQAgCSgCFCELIAUoAgghCkEAIQFBACECA0ACQCACDQAgCiAFQRBqIAVBDGogBUEcaiAFQRhqIAVBFGogCxEJACICDQBBASECIAEgBSgCFCIHQQFqIAEgB0obIQEgB0EASA0AIAUoAhAiCEUNACAFKAIMIgxBAEwNAEEBIQYgACADIAcgACgChAJBBGogCCAMEJYKIQIDQCACDQIgBiAAKAKAAk4NAkEAIQIgACgChAIgBkEYbGoiBygCACIIIAUoAgxMBEAgACADIAUoAhQgB0EEaiAFKAIQIAgQlgohAgsgBkEBaiEGDAALAAsLIAogCSgCEBEBABogBCAEKAIAIAFqNgIAQQAgAiACQeUARhshBgsgBUEgaiQAIAYLbgIBfwF+AkACQAJAIAApA5ACIgUgA1UNACADIAVRBEAgACgCnAJFDQELIAAoApgCIAJHDQAgACgCjAIgACgCiAJMDQELIAAQnAUiBA0BCyAAIAE2ApwCIAAgAjYCmAIgACADNwOQAkEAIQQLIAQLlgUCDX8DfiMAQRBrIgUkACAFIAEoAgAiAjYCDCACRQRAAkAgACgCHEUNACAFQQAgABCdBSICNgIMIAINACMAQSBrIgMkAAJAIAAoAhxFDQAgAEEcaiEIIAAoAgAiCSgCJCIMKAIAIQsgACgCDEEAEJkBIREDQCAJNAIYIRAgBCECAkADQCAPIBBZIAJyDQEgCSgCICAPp2otAAAEQCAPQgF8IQ9BACECDAELCyAAKAIMIA9CAXwiEKcQiwIhAiADQQA2AhggDCAAKAIUIAJBfyADQRhqENgCIQQgAygCGCEKA0AgBEUEQCADQQA2AhAgA0EANgIMIANBADYCCCADQQA2AgQgAyAKIANBFGogA0EQaiADQQxqIANBCGogA0EEaiALKAIUEQkAIgQ2AhwgCCECA0AgAigCACICRSAEcg0CIAIoAgAhBkEAIQQCQCACKAIEIgcgCSgCGEggDyAHrVJxDQAgBigCDEEAIAMoAgQiDRsNACAGKAIEIgcgAygCECIORwRAIAYoAghFIAcgDk5yDQELIAMoAhQgBigCACAHEFENACACQQxqIBEgDyANrCADQRxqEKQKGiADKAIcIQQLIAJBCGohAgwACwALCyAKBEAgCiALKAIQEQEAGgsgBEHlAEYEQCADQQA2AhxBACEECyAQIQ8MAQsLA0AgCCgCACICRSAEcg0BIAIoAgwEfyACQQxqQgAQogQFQQALIQQgAkEIaiEIDAALAAsgA0EgaiQAIAUgBDYCDAsgACAAKAIQIAVBDGoQggMhBCAAQRxqIQADQCAAKAIAIgAEQCAAKAIMECMgAEEANgIMIABBCGohAAwBCwsgASAFKAIMIgI2AgAgBEUhBAsgBUEQaiQAIAJFIARxCzYBAX8gAUUEQEEADwsgACgCACICQQFqIAGsEG4hASACQQE6AAAgACACIAFBAWoiAGo2AgAgAAsXAQF/IAAgARDjASICRQRAIAAQIwsgAgu1AQEEfwJAAkAgAUUNACACKAIADQAgASgCAEEFRgRAIAEoAhQiBSgCQCIERQ0CIARBACAEQQBKGyEGA0ACQCABIAMgBkcEfyAFIANBGGxqKAJYDQEgAwUgBgsgBEY6ACIMBAsgA0EBaiEDDAALAAsgACABKAIMIAIQ+wYgACABKAIQIAIQ+wYgASABKAIMLQAiBH8gASgCEC0AIkEARwVBAAs6ACILDwsgAiAAQQEgBRCuCjYCAAsLACAAEIgDIAAQIwtDAQJ/IwBBEGsiAiQAIAEoAgwhAyACIAEpAxA3AwAgACADQZymASACEPsBIAAoAgBFBEAgAUEBOgDtAQsgAkEQaiQAC+0BAQV/A0AgACwAACEEQQAhAgJAA0AgAg0BAkACQAJAIARBIkYgBEEnRnINACAAIQIgBEHbAEYNASAEQeAARg0AIAQNAkEADwsgACECA0AgAiIDQQFqIQIgAy0AASIFRQ0DIAUgBEH/AXEiBkcNACADQQJqIQIgBiADLQACRg0ACwwCCwNAAkAgAiIDQQFqIQIgAy0AASIFQd0ARg0AIAUNAQsLIANBAmogAiAFGyECDAELIAQQ/wYEQANAIAIsAAEhAyACQQFqIQIgAxD/Bg0ADAILAAsLIABBAWohAAwBCwsgASACIABrNgIAIAALIQEBf0EBIQEgAEGAAXEEf0EBBSAAQdCqA2otAABBAEcLC54BAQJ/IAAtABEiAUEGRgRAIAAoAiwaDwsgAUECTwR/AkAgACgC6AEEQCAAQQJBfxCBCSIBIAAgAC0AFEEAEPsDIAEbIQIMAQsgACgCRCgCAEEAIAFBAkcbRQRAIABBAEEAEPsDIQIgAC0ADyABQQNJcg0BIABBBjoAESAAQQQ2AiwgABD1BA8LIABBABCACSECCyAAIAIQ/AMFQQALGguYAQECfyAALQAIBEAgACgCACIBKALcAUUEQCABIAAoAgwiATYC3AEgARA6GiAAQQA2AgwLIABBADoACAsgACgCDBCYARogACICKAIcIQADQCAABEAgACgCCCEBIAAoAgwQIyAAECMgASEADAELCyACQQA2AhwgAigCLBAjIAIoAlwQuQogAigCEBCOAiACQQRqQQBB3AAQKBoLcQEBfyAAKALcARCYARoDQCABQShGRQRAIAAgAUECdGooAjwQmAEaIAFBAWohAQwBCwsgACgC+AEQIyAAKALgARAjIAAoAuQBECMgACgCKBAjIAAoAiwQIyAAKAIkIgEgASgCACgCCBEBABogABAjQQALiwEBAn8jAEEQayIEJAAgACgCBCEDIAAQTAJAIAFFBEBBACECIANBAEEAENkCIgFFDQELIAAgASACEMAKGgsgAC0ACEECRgRAIAMoAgAQgAcgA0EBIARBDGpBABCsAUUEQCADIAQoAgwiARCzCiABEKMECyADQQE6ABQgAxDMCgsgABDJCiAEQRBqJAALKAAgAC0ABUUEQCAAKAIoECMgACgCNBD/BCAAQQA2AjQLIABBADYCKAunBgIKfwJ+IwBBEGsiByQAAn8gAywAACILQQBIBEAgAyAHQQxqEHMaIAcoAgwMAQsgC0H/AXELIQ8gASEOIAIhDSAFIQsgBiEMIwBBEGsiCSQAQYsCIQgCQCADIAlBCGoiARCEAyADaiICIAEQhAMgAmoiCiADIARqIhBLDQBBACECQQAhBEEAIQEDQAJAAkAgCiAQSQRAIAsgDHJFBEBBACEIDAILQQAhCCAJQQA2AgACQAJ/IARBAXEEQAJAIAosAAAiBEEASARAIAogCRBzIQQgCSgCACEIDAELIAkgBEH/AXEiCDYCAEEBIQQLIAEgCEgNAiAEIApqIQoLIAosAAAiAUEASARAIAogCUEEahBzDAELIAkgAUH/AXE2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EWtBFG1BAWo2AiBB5AAhFgyZAQsgDCAFKAIMIgFBKGxqIQsgDCAFKAIEIg5BKGxqIgYvARAiAiAMIAUoAggiCUEobGoiAy8BEHJBAXEEQCALEGIMnQELAkACQCACQRJxRQRAIAYgEkEAEKYDRQ0BDKEBCyACQYAIcUUNASAGEOcBDaABCyAGLwEQQX1xIQILAkACQCADLwEQIg1BEnFFBEAgAyASQQAQpgNFDQEMoQELIA1BgAhxRQ0BIAMQ5wENoAELIAMvARBBfXEhDQsgDCAJQShsaiIPKAIMIAwgDkEobGoiECgCDGoiCiAHKAJ4Sg2NASALIApBAmogASAJRiILEL8DDZ4BIAwgAUEobGoiASABLwEQQcDkA3FBAnI7ARAgC0UEQCABKAIIIAwgCUEobGooAgggDygCDBAlGiADIA07ARALIAEoAgggDygCDGogDCAOQShsaigCCCAQKAIMECUaIAYgAjsBECAKQX5xIAogEkEBSxsiAiABKAIIakEAOgAAIAIgASgCCGpBADoAASABIAEvARBBgARyOwEQIAEgEjoAEiABIAI2AgwMnAELIAwgBSgCBEEobGoiARDcCCEDIAwgBSgCCEEobGoiAhDcCCEKIAwgBSgCDCIJQShsaiEGAkACQCADIApxQQRxBEAgASkDACEqIAggAikDACIrNwOoAgJAAkACQAJAAkACQCAFLQAAQeoAaw4EAAECAwQLIAhBqAJqICoQ4QRFDQQMBgsCfyAIQagCaiEDAn8gKkKAgICAgICAgIB/UQRAQQEgAykDACIqQgBZDQEaIAMgKkKAgICAgICAgIB/hTcDAEEADAILIANCACAqfRDhBAsLRQ0DDAULIAgpA6gCISsCQAJAICpCAFUEQEEBIQMgK0L///////////8AICqAVQ0CICtCAEKAgICAgICAgIB/ICqAfVkNAQwCCyAqQgBZDQAgK0IAVQRAQQEhA0IAQoCAgICAgICAgH8gK4B9ICpYDQEMAgsgK0IAWQ0AQQEhAyAqQoCAgICAgICAgH9RICtCgICAgICAgICAf1FyDQFCACArfUL///////////8AQgAgKn2AVg0BCyAIICogK343A6gCQQAhAwsgA0UNAgwECyAqUA0EICpCf1EgK0KAgICAgICAgIB/UXENAyAIICsgKn83A6gCDAELICpQDQMg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bkEBaiADRwR/IBsgAyAKQQxqQQIQpwEiAkUEQCABIAMgCigCDCgCBEEAEM0LIQIgCigCDBCmAQsgASgCEAUgAwtBAWo2AhAgGUEBaiEZDAELCwJAAkAgAkHlAEYNACACDQEgASANNgIkIAEgDSABKAIQIgJrQQFqNgIgIAIgDUsNAEEAIQIgASgCKA0BIAEgASgCGBCOARCACyIDKAIANgIsIAMgATYCACABQQE2AigMAQsCQCANDQBBASENIAEoAgQiAhBMIAIoAgQiAkEANgIwIAIQoAciAkHlAEYNACACDQELIAEoAgRBASABKAIIQQFqELUEIgINACABKAIAIgIEQCACELICCyAdQQVGBEAgASgCBEECEMILIgINAQsCQCAVIBpIBEBBkPkDKAIAIQIgASgCBCgCBCgCJCEDIBMoAkAhGSATIApBDGoQtQcgDSAaIBVtIh1qQQFrIB1tIh0gHSACIANuQQFqRmshAyANrCEqIAooAgwhDUEAIQIDQCACIAMgDUtyRQRAQQAhAgJAIANBkPkDKAIAIAEoAgQoAgQoAiRuQQFqRg0AIBMgAyAKQQhqQQAQpwEiAg0AIAooAggQXSECIAooAggQpgELIANBAWohAwwBCwsgKiAVrCIsfiErIAJFBEAgE0EAQQEQsQchAgsgK0GQ+QMoAgAiAyAaaqwiKiAqICtVGyEyIAMgFWqsISoDQCACICogMllyRQRAIApBADYCCCAbICogLH+nQQFqIApBCGpBABCnASICRQRAIBkgCigCCCgCBCAVICoQeiECCyAKKAIIEKYBICogLHwhKgwBCwsgAg0BIwBBEGsiAiQAAkAgGSACQQhqELwBIgMNAEEAIQMgAikDCCArVw0AIBkgKxCSAiEDCyACQRBqJAAgAyICDQEgE0EAEK4HIQIMAQsgEyAVIBptIA1sEKYLIBNBAEEAELEHIQILIAINACABKAIEQQAQrwQiAkHlACACGyECCyAcRQRAIAEoAhhBABCxBRogASgCGEEAEK8EGgsgAUEHIAIgAkGKGEYbNgIcCyAKQRBqJAAgAQR/IAEoAhQhAyABKAIYEEwgASgCAARAIAEoAhgiAiACKAIQQQFrNgIQCyABKAIoBEAgASgCGBCOARCACyEKA0AgCiICKAIAIg1BLGohCiABIA1HDQALIAIgASgCLDYCAAsg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QCAGQQFqIANBIGoQcxogAygCIAwBCyAEQf8BcQsiBEUNAQtB/////wchBQJAIAMoAiQiBy0AAA4CAwACCwJ/IAcsAAEiBUEASARAIAdBAWogA0EcahBzGiADKAIcDAELIAVB/wFxCyIFDQILQYsCIQUMBgtBACEFCyAEIAVHDQIgA0IANwMQIANCADcDCCADQgA3AwAgAyAHIANBLGogBBD5BiIEajYCJCADIAQgBmo2AiggA0EoaiADQRBqEMQDIANBJGogA0EIahDEAyADKQMQIghCAlkEQCADKQMIIglCAVUNAgsgAygCJCEEIAMoAighBgsgAyADKAIsIgdBAWo2AixBACEFIAdBADoAACAAIAMoAiw2AgAgASAGQQFqNgIAIAIgBEEBajYCAAwDCwNAIANBLGogAyAIIAkgCCAJUxsQqgogAyADKQMAQgJ9NwMAAkAgCCAJUQRAIANBKGogA0EQahCYBSADQSRqIANBCGoQmAUMAQsgCCAJUwRAIANBKGogA0EQahCYBQwBCyADQSRqIANBCGoQmAULIAMpAxAiCEL///////////8AUiADKQMIIglC////////////AFJyDQALDAELIAQgBUgEQCADIANBLGoiBSAEEPkGIAZqNgIoIAUgA0EoahCwAgwBCyADIANBLGoiBCAFEPkGIAdqNgIkIAQgA0EkahCwAgsgAygCKCEGDAELCyADQTBqJAAgBQvxAwIDfwJ+IwBBMGsiByQAIAdCADcDKCAHQgA3AyAgB0IANwMYIAcgATYCFCAHIAM2AhAgB0EANgIIIAVBADYCACAGQQA2AgACQCACrCAErHxCEXwQSyIIRQRAQQchAQwBCyAHIAg2AgwgB0EUaiABIAJqIgJBACAHQShqEOkBIAdBEGogAyAEaiIDQQAgB0EgahDpAQJAAkADQCAHKAIUIgEgBygCECIEckUNAQJAQQBBAUF/QQAgBykDKCIKIAcpAyAiC1IbIAogC1UbIglrIAkgABsiCSAERSABRXJyRQRAIAdBDGoiASAAIAdBGGogB0EIaiAKEJkFIAEgB0EUaiAHQRBqEKsKIgENASAHQRRqIAIgACAHQShqEOkBIAdBEGogAyAAIAdBIGoQ6QEMAgtBACAEIAFBAEcgCUEASHEbRQRAIAdBDGoiASAAIAdBGGogB0EIaiAKEJkF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AzYCHEEBIQQLIAEgAzYCACACIARB9sAAQQAgAxsgARDeASACIAEoAhwQJyACIAQQogEhAiABQSBqJAAgAiEBIAYQIyAAIAFFOgDtAUEACyEAIAVBEGokACAAC5oBAQV/AkADQCAARQ0BIAAQTCAAKAIEQQhqIQQDQCAEKAIAIgMEQAJAAkAgAkUNACADLQABQQFxDQACQCADLQAADgMAAgACCyADEO4IIgRFDQEgByAEIAUbIQdBACECIAQhAUEBIQUMBAsgAxDkBCADIAE2AgQgA0EEOgAACyADEKwDIANBGGohBAwBCwsLIAdBACAFGyEGCyAGC7ICAgN/AX4gAC8BBEEBTQRAIAAoAgAiASABKAI4QQFqNgI4An8gACgCDBBDQeQARwRAIABBAToABiAAKAIMEDoMAQsgACAAKAIMQQAQmQE3AyBBAAshACABIAEoAjhBAWs2AjggAA8LIwBBEGsiASQAIAFBADYCDAJAAkAgACgCECICBEADQCAALQAHRQRAIAAoAgwQOhoLIAAgAiABQQxqEKsBIAItACAhAyAAQQE2AlggAEEBOgAHIAAgAzoABiAAIAIpAxg3AyAgA0UEQCAAIAFBDGoQ+AYNAQsLIAEoAgwiAg0CDAELIABBAToABgsgACkDICEEAkAgAC0ANEUEQEEAIQIgBCAAKQNQVQ0BDAILQQAhAiAEIAApA0hZDQELIABBAToABgsgAUEQaiQAIAILpwEBBH8jAEEQayIEJAACQCAAKAIMDQAgAEEMaiEBAkAgACgCACICKALcASIDBEAgASADNgIAIAJBADYC3AEMAQsgBCACKALgATYCAEGdowEgBBBKIgNFBEBBByEBDAILIAIgAigCOEEBajYCOCACKAIMIANBASABEMYGIQEgAiACKAI4QQFrNgI4IAMQIyABDQELIABBAToACEEAIQELIARBEGokACABCxwAAkAgAEUNACAAEPkCQQFHDQAgABBfIQELIAELhyECGX8BfiMAQYABayIIJAAgBCgCAC0AAyEXIAhBADYCbCAIQQA2AmggCEEANgJkIAQoAgQQPSEbIAQoAggQPSEMIAggA0ECdEEIayIJrSIgEEsiCjYCcAJAAkAgCkUNACAKQQAgCRAoIRMgIBBLIhVFDQAgG0EBaiEcIAxBAWohGCAVQQAgCRAoIRkgF0E0RyEa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QCACQf8DQfz6AygCABEAACICQQBIBEBBBSECQYSoBCgCACIBQRRGDQEgARD2BCIDQQVGDQEgACABEJsBIAMPCyAAIAE6ABALIAILGAAgAEEAEKIJGiAAKAIYECMgABC4BkEACwsAIAFBADYCAEEACwkAIAAQuAZBAAuPAQECfwJ/QbzwAy4BACIARQRAQYSoBEEcNgIAQX8MAQsCQAJAIABBfkoNAEHpoAwhAQJAAkACQAJAAkACQAJAIABB/wFxQQFrDgsIAAECAwQEBQUGAwcLQYCACAwIC0GAgAIMBwtBgIAEDAYLQf////8HDAULQQEMBAsQEEEQdgwDC0EADAILIAAhAQsgAQsLrwEBA38jAEGgBGsiAyQAIAMgADYCAEGABCADQRBqQfbAACADEMQBIgIQPSEAAkADQCAAQQBKBEAgACACaiEEIABBAWshACAELQAAQS9HDQEMAgsLIAItAABBL0cEQCACQS46AAALIAJBAWohBAtBACEAIARBADoAACABIAJBAEEAEKcDIgE2AgAgAUEASARAQZiyAhDiAUHZCCACQZiyAhDCASEACyADQaAEaiQAIAALdQEBfyMAQRBrIgMkACADIAI2AgAjAEEQayICJAAgAgJ+IAFBwABxRQRAQgAgAUGAgIQCcUGAgIQCRw0BGgsgAiADQQRqNgIMIAM1AgALNwMAQZx/IAAgAUGAgAJyIAIQFRB3IQAgAkEQaiQAIANBEGokACAACwQAQQALCwAgA0EANgIAQQALBgAgABBQC4YBAQV/AkAgACgCJCICRQ0AIAIoAgAiA0EgaiEEA0AgBCIFKAIAIgZBBGohBCACIAZHDQALIAUgAigCBDYCACACECMgAEEANgIkIAMgAygCHEEBayIENgIcIAQNAAJAIAFFDQAgAygCDEEASA0AIAMoAghB5PoDKAIAEQEAGgsgABClCQtBAAuPBAEIf0GKKCEEAkAgACgCJCIFRQ0AIAUoAgAiBkUNAEEBIAEgAmoiBHRBASABdCIKayEHIAZBJGohBgJAIANBAXEEQCAHIAUvAQoiCCAFLwEMIglycUUNASABIAQgASAEShshCyABIQRBASEDA0AgBCALRkUEQEEAIAMgBiAEQQJ0aigCACAIIAR2QQFxShshAyAEQQFqIQQMAQsLAkAgAwRAIABBAiABQfgAaiACEP8D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AwRAIAAtADQNASAAKAIAKAIIECNB/ZUBQQAQSiEBIAAoAgAgATYCCEEBQQcgARshAgwBCyAALQAVBEACfyAFIAUoAgBBAnStEEsiBjYCECAGRQRAIAVBAToAFEEHDAELIAVBAEEAEOQGQQALDQELAkAgAUEDRgRAQQAhAiADQQA2AgwgBCgCBBArIgFFDQMgACAEKAIEEGAiAqxCAXwQSyIENgIcIARFBEBBByECDAQLIAQgASACQQFqECUaAkACQCABLQAAQSRHBEAgAyABNgIMDAELQQAhAiAFQQAgACgCHEEBakEAIANBDGoQkwchBCADKAIMIgFFDQELIAAoAgAoAggQIyABEPAKIQEgACgCACABNgIIIAAQkQVBAUEHIAAoAgAoAggbIQIMBAsgBEUNAyAAKAIoIQIMAQsgACgCKCICIQQLIAAgBCACa0EMbSICNgIIIAAgAjYCDCAAIAQtAAAiAToAFCABQQZPBEBBACECIARBADYCCCAAIAAoAgwiBUEBaiIBIAQoAgRqNgIQIAAtABUEQCAAIAAoAigiBCAAKAIwIAVBAnRqKAIAQQxsai0AADoAFCAFRQ0DIAQgBUEBayIBQQxsai0AAUHAAHFFDQMgACABNgIMDAMLIAAgATYCDAwCCyAAIAJBAWo2AhBBACECDAELIAAQkQULIANBEGokACACCw0AIAAQkQUgABAjQQALkAIBB38jAEEQayIEQn83AgggASgCACIAQQAgAEEAShshByABKAIEIQADQCADIAdGRQRAAkAgACgCACIGQQhIDQBBASAGQQhrIgh0IQYgAC0ABUUEQCACIAZyIQIMAQsgAC0ABEECRw0AIARBCGogCEECdGogAzYCACAFIAZyIQULIABBDGohACADQQFqIQMMAQsLQRMhACACIAVBf3NxRQRAQQAhACABAn9BACAEKAIIIgJBAEgNABogAUKAgICAgICA+D83AyggASgCECIFIAJBA3RqIgJBAToABCACQQE2AgBBASAEKAIMIgRBAEgNABogBSAEQQN0aiIDQQE6AAQgA0ECNgIAQQMLNgIUCyAAC0AAIABBzMMBEIgEIgIEfyACBSAEQQwQVyIBNgIAIAFFBEBBBw8LIAFCADcCACABQQA2AgggAEECQQAQzQlBAAsLDgAgASAANAIMNwMAQQALYgACQAJAAkAC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ACEQDAILIAUgARCEAyAFaiEFIAEpAwAhECAALQDvAQRAIBIgEH0hEkIAIRAMAgsgECASfCESQgAhEAUgASgCQCABKAJEIAkgAyASIAEoAgggECAVfEICfSIQpxDwBiAUhSEUCwwACwALAAsgAUEYahCIAyAEIAU2AiwgAUHgAGokACATIBSFIRMgA0EBaiEDDAALAAsgAhA6IQMgAQRAIAEhAwwDCyADDQIgACgCJCgCACEKIARBADYCJCAEIAAoAuABNgIAAkBBrDUgBBBKIgFFBEBBByEDIARBBzYCLAwBCyAEIAAoAgwgAUF/IARBJGpBABCXAyIDNgIsIAEQIwsDQAJAIAMNACAEKAIkEENB5ABHDQBBACEDIAQoAiRBABCZASEQIAAgBCgCJBD0BiEJQQAhAQNAIAMNAiABIAAoAhhODQIgACgCICABai0AAARAIAFBAWohAUEAIQMMAQsgBCgCJCABQQFqIgIQiwIhAyAEQQA2AiAgACgCJCAJIANBfyAEQSBqENgCIQUgBCgCICEIA0AgBUUEQCAEQQA2AhggBEEANgIUIARBADYCECAEQQA2AgwgCCAEQRxqIARBGGogBEEUaiAEQRBqIARBDGogCigCFBEJACIFDQEgBCgCHCILIAQoAhgiDCAJQQAgECABIAQoAgwiDhDwBiARhSERQQEhAyAAKAKAAiINQQEgDUEBShshDQNAIAMgDUYNAiAMIAAoAoQCIANBGGxqKAIAIg9OBEAgCyAPIAkgAyAQIAEgDhDwBiARhSERCyADQQFqIQMMAAsACwsgCARAIAggCigCEBEBABoLQQAgBSAFQeUARhshAyACIQEMAAsACwsgBCgCJBCYARoMAgsgBCgCLCEBDAALAAsgBiARIBNRNgIMIARBMGokACADIQEgBigCDCECIAZBEGokACABQYsCIAEgAnIbDAILIAJBzKQBQQYQSEUEQCMAQRBrIgMkACADIAJBBmo2AgggA0EIahDzBiEGQQghAQJAIAMoAggiBC0AACIFQSxGBEBBASECIAQtAAFFDQEgAyAEQQFqNgIIIANBCGoQ8wYhASADKAIILQAAIQULQQEhAiAFIAFBAkhyDQAgA0EANgIMAkAgAC0A7QFFBEAgA0EMaiAAEP0GIAMoAgwiAg0BCyAAIAYgARC9CiECCyAAEJMCCyADQRBqJAAgAgwCC0EBIQEgA0ELSQ0AIAJByKQBQQoQSA0AIwBBEGsiASQAIAEgAkEKajYCDCABQQA2AgggAUEANgIEIABBCEEIIAFBDGoQ8wYiAiACQRBKGyACQQFGGzYCMAJAIAAtAO0BRQRAIAFBCGogABD9BiABKAIIIgINAQsgAEEXIAFBBGpBABBSIgINACABKAIEIgJBAUECEHUaIAJBAiAAKAIwEHUaIAIQQxogAhA6IQILIAFBEGokACACIQELIAELNgIMQQAhBQwCCyAEQQJ0IAJqKAIQEGlBAE4NACAHQRM2AgxBACEFDAELIAA0AhhCA4ZCCHwQSyIFRQRAIAdBBzYCDEEAIQUMAQsgBUEAIAAoAhhBAWoiCkEDdBAoIQlBACEEIwBBEGsiBiQAAkAgACgCjAINACAAQRAgBkEMakEAEFIiBA0AIAYoAgwiBEEBEPoCGiAEEEMaIAQQOiEECyAGQRBqJAAgByAENgIMIAQNAAJAIAFBAkgNACAAKAIoDQAgACgCGEECdCACaigCDCIEEC9BBUYEQCACKAIEIQQLIAQQL0EFRg0AIAIoAgAiBhAvQQVHBEAgBhBfIAQQX1ENAQsgBwJ/IAAoAgwtAFxBv+wBai0AAEEFRgRAIAAgBCAHQQhqIAkQogoMAQtBASEIIAAgAiADEKEKCyIENgIMIAQNAQsgCkECdCAJaiEEIAIoAgAiBhAvQQVHBH8gByAAIAYgB0EIaiAJEKIKIgY2AgwgBkUFQQELRSABQQJIckUEQCAAKAIYQQJ0IAJqKAIQEGkhAQJAAkAgCA0AIAcgACACIAMQoQoiBjYCDCAGRQ0AIAZBE0cNASAAKAIoDQEgB0GLAjYCDAwBCyAHIABBACABIAMpAwAQ9wYiAzYCDCADDQBBAiEDA0ACQCAAKAIYQQJqIANMBEBBACEGDAELIANBAmsiBiAAKAIgai0AAEUEQCAAIAEgAiADQQJ0aiIIKAIAECsgBiAEIAZBAnRqEPYGIgYNASAIKAIAEGAhBiAEIAAoAhhBAnRqIgggBiAIKAIAajYCAAsgA0EBaiEDDAELCyAHIAY2AgwLIAAtAO4BBEAgB0EMaiAAIAQQoAoLIAcgBygCCEEBajYCCAsgAC0A7AFFDQAgB0EMaiAAIAQgCSAHKAIIEJ8KCyAFECMgABCTAiAHKAIMIQAgB0EQaiQAIAALDgAgASAAKQMgNwMAQQALsQEBAn8CQAJAAkACQAJAAkAgAiAAKAIAIgQoAhgiA2sOAwABAgMLIAEoAgAiARCcASABQQE7ARAgASAAQY/CAEEAEOkJQQAPCyABIAApAyAQYwwCCyAAKAIQBEAgASAANAIUEGMMAgsgAyECIAQoAiwNACABQQAQgAFBAA8LQQAgABCdBSIDDQEgACgCDCIAEOQJQQFrIAJMDQAgASAAIAJBAWoQ4wkQywELQQAhAwsgAwscACAALQAGRQRAQQAPCyAAEIEHIABBAToABkEBC80JAg5/AX4jAEEwayIIJABBASEDAkAgACgCACIGKAI4DQAgAUH//wNxIgsEfyAEKAIAIQlBAQVBAAshAyABQYCABHEEQCAEIANBAnRqKAIAIQUgA0EBaiEDCyABQYCACHEEQCAEIANBAnRqKAIAIQwgA0EBaiEDCyABQYCAEHEEQCAEIANBAnRqKAIAIQoLIAAQgQcgACAMQoCAgICAgICAgH8Qwwo3A0ggACAKQv///////////wAQwwo3A1ACfyACBEAgAi0AAEHEAEYMAQsgBi0A7wELIQIgACABOwEEIAAgAjoANCALQQJPBEAgCRArIgJFBEBBByEDIAkQL0EFRw0CC0EAIQMgAEEANgIUIAUEQCAAIAUQaSIDNgIUCyAGKAIkIQ8gBigCHCEQIAYtAOwBIREgBigCGCESIAZBCGohDSMAQSBrIgUkACAAQRBqIQcjAEEwayIEJAAgBEEANgIoIARCADcDICAEIAtBAms2AhwgBCASNgIYIAQgEDYCECAEIAM2AgwgBCAPNgIIIAQgETYCFAJAIAJFBEAgB0EANgIADAELIARBCGogAiACED0gByAEQSxqELQKIgNBASADIAQoAigbIAMbIQ4LIARBMGokAAJAAkAgDiIEDQBBACEDIAcoAgBFDQEgB0EMEJsFIgQNACAHKAIAQQwQuAoiBEUNAQsgBygCABCOAiAHQQA2AgBBASEDIARBAUcEQCAEIgNBEkcNASAFQQw2AgAgDUGKwQEgBRDOAUEBIQMMAQsgBSACNgIQIA1B/IkBIAVBEGoQzgELIAVBIGokACADDQEjAEEgayIFJAAgACgCACECIAVBADYCHCAFQQA2AhggBUEANgIUIAAgACgCECAFQRhqIAVBFGogBUEc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BBCjAkUgA0EBR3JFBEAgACACKAIEEMsBDAELIAAgAxDYAQsgAUFAaxCsBAsgBCAHNgLoAiABQdACaiQAC/ECAQZ/IwBBoAJrIgEkACAAEH8hBCACKAIAEGkhAyACKAIEECshBiACKAIIEGkhBSAEKAIQIANBBHRqKAIAIQIgBCgC6AIhCCAEQQA2AugCAkAgAUEQaiACIAQgBiADQQFGEK0EIgINAAJAAkAgASgC/AEiAkUNACACLgEiIgNBAUYNACADIAVKDQELQafsBhApIQIMAQsgAUEQakEAIAVBDGwiByACKAIEaigCABCWASEDAkAgAi4BIkEBayAFSgRAIAFBEGpBACAHIAIoAgRqKAIMEJYBKAIEIQUgAygCBCECDAELIAYgAigCLGohBSADKAIEIQIDQCACLQAAIgdFIAdBLEZyDQEgAyACQQFrIgI2AgQMAAsACyABIAU2AgggASAGNgIEIAEgAiAGazYCACAAIARB4CwgARA8IgJBf0F/ED8gAhAjQQAhAgsgAUEQahCsBCAEIAg2AugCIAIEQCAAIAIQ2AELIAFBoAJqJAALmQMCB38CfiMAQbACayIBJAAgABB/IQMgAigCABArIQUgAigCBBArIQQgAigCEBBpIQcgAykDICELIAIoAhQQKyEGIAIoAhgQaSEIIAMoAugCIQkgA0EANgLoAiAFRSAERXJFBEAgAykDICEKIAgEQCADIApC/////3mDNwMgCyABQSBqIAUgAyAEIAcQrQQhBCADIAMpAyAgCkKAgICABoOENwMgAkACQCAEDQACQCALQoCAgCCDIgpCAFINACABKAKMAiIERQ0AIAQtACtBAkcNACABQQA2AhwgAUIANwIUIAFCADcCDCABQgA3AgQgASABQSBqIgU2AgAgBSAEKAIsIAEQ4AEgASgCLEEAIAEoAkQbIQQMAQsgASgClAIiBEUNASADIApQBH8gAUEgahCuBSIEDQEgASgClAIFIAQLKAIYEE4gAyAFEOcCRw0BIABBARCAAQwBCyAERSAGRXINACADEKMCDQAgACAGIAIoAgggAigCDCABQSBqEJgHCyABQSBqEKwECyADIAk2AugCIAFBsAJqJAALQAEBfwJAIAEtAABBpwFHDQAgAS0AB0EDcQ0AIAAoAhgiAigCDCABKAIsRw0AIAAoAgAgAiABQSxqEJYBGgtBAAt2AQR/QQEhAiABLwEGQaAIcQR/QQEFIAEoAiAiA0UEQEECDwsgACgCGCEEQQAhAgNAIAMoAgAgAkoEQCADIAJBBnRqIgUoAhggBCgCDEYEQCAAKAIAIAQgBSgCEBCWARoLIAJBAWohAgwBCwsgACABEL8HQQALC7kHAgl/AX4jAEHwAmsiASQAIAAQfyEGIAIoAgAQKyEDIAIoAgwQKyEIIAIoAhAQKyEHIAIoAhQQKyEKIAIoAhgQaSEEIApFIAhFIAdFcnJFBEAgBigC6AIhCyAGQQA2AugCIAYQ9wEgAUEANgJYIAFCADcDUCABQgA3A0ggBiAHIAMQfCEFIAFBADYCPCABQgA3AjQgASAFNgJUIAFB2gA2AjAgAUHbADYCLCABIAFByABqNgJAIAEgAUHgAGoiBTYCKAJAIAUgAyAGIAggBBCtBCIDDQAgBikDICIMp0GAgIAgcSEFAkACQCABKALMAiIEBEAgBC0AKyIDQQJGBEAgBQ0DIAQoAiwhAyABQQA2AiQgAUIANwIcIAFCADcCFCABQgA3AgwgASABQeAAaiIFNgIIIAMgAygCBEH///9+cTYCBCAFIAQoAiwgAUEIahDgASABKAKEAQ0CIAFBKGogBCgCLBBqGgwDCwJAIAxCgIABg1AgBUEAR3EgA0EBRnINACAEQTBqIQMDQCADKAIAIgNFDQEgAygCCCIJIAcQU0UEQCABQeAAaiABQcgAaiAJEJYBGgsgA0EEaiEDDAALAAsgByAEKAIAIgMQUw0CIAEgBDYCVCABQeAAaiABQcgAaiAFBH8gAwUgAUEoaiAEKAIQEGUaIAQoAgALEJYBGgwCCyABKALQAiIDBEAgAUHgAGogAUHIAGogAygCABCWARogBQ0CIAFBKGogASgC0AIoAiQQTRoMAgsCQCABKALUAiIEKAIEIgMgBxBTDQAgASgCVCgCPCAEKAIYRw0AIAFB4ABqIAFByABqIAMQlgEaCyAFDQEgAUHgAGoQrgUiAw0CIAFBKGogBBCaByAEQRxqIQMDQCADKAIAIgRFDQICQCAEKAIMIgNFDQAgAyAHEFMNACABQeAAaiABQcgAaiADEJYBGgtBACEDAkAgBCgCECIFRQ0AA0AgAyAFKAIATg0BIAUgA0EGdGooAhAiCSAHEFNFBEAgAUHgAGogAUHIAGogCRCWARogBCgCECEFCyADQQFqIQMMAAsACyAEQShqIQMMAAsACyABKAJsIgMNAQsgACABQcgAaiAIIApBARCZByEDCwJAAkACQCADDgICAAELIAYQowJFDQAgACACKAIMEMsBDAELIAEoAmQEQCAAQa3lASACKAIEIAIoAgggAUHgAGoQmAcMAQsgACADENgBCyABQeAAahCsBCAGIAEoAkgQrQUgBiALNgLoAgsgAUHwAmokAAsHACAAKAIwC4IBAQJ/IAAoAhghAgJAIAEtAAAiA0GnAUcEQCADQc0ARw0BIAIoAgggAS4BIEcNASAAKAIAIgAoAnggAigCDEcNASAAIAIgARCWARoMAQsgAigCCCABLgEgRw0AIAEtAAdBA3ENACACKAIMIAEoAixHDQAgACgCACACIAEQlgEaC0EACyABAX9BASECIAEvAQZBoAhxBH9BAQUgACABEL8HQQALC6EJAQx/IwBB0AJrIgEkACAAEH8hBiACKAIAECshCyACKAIMECshByACKAIQECshCCACKAIUEGkhBSACKAIYECshDCACKAIcEGkhDSACKAIgEGkhBAJAIAtFIAhFciAMRSAFQQBIcnINACAGKALoAiEOIAYQ9wEgBiAIIAcQfCIDRQ0AIAUgAy4BIk4NACADKAIEIAVBDGxqKAIAIQkgAUEANgLIAiABQgA3A8ACIAFCADcDuAIgAUF/IAUgBSADLgEgRhs2AsACIAZBADYC6AIgAUEoaiIKIAcgBiALIAQQrQQhBCABQQA2AhwgAUIANwIUIAFB2AA2AhAgAUHZADYCDCABIAM2AsQCIAEgAUG4Amo2AiAgASAKNgIIAkAgBA0AAkACQCABKAKUAiIEBEACQAJAIAQtACsOAwEEAAQLIAQoAiwiAyADKAIEQf///35xNgIEIAFBADYCNCABQShqIANBABDgAUEHIAEoAjQgBi0AVxsiBA0EIAFBCGogAxBqGgwDCyAIIAQoAgAQUyEHIAEgBDYCxAIgBw0BIAQuASIgBUoEQCABQShqIAFBuAJqIAQoAgQgBUEMbGooAgAQlgEaCyABKALAAkEASARAIAFBKGogAUG4AmogASgClAJBIGoQlgEaCyABQQhqIAEoApQCKAIQEGUaIAEoApQCQQhqIQMDQCADKAIAIgMEQCABQQhqIAMoAigQZRogA0EU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QAJAIAIgBUYNACADIAogAkECdCIIaigCACIETwRAIAcgBiAIaigCACAEEFFFDQELIAJBAWohAgwBCwsgAiAFTw0BIAQgB2ohByADIARrIgMNAAtBACEDCwJAIAFBAnFFIANFckUEQANAIAMhAUEAIQIDQCACIAVGDQMCQCAKIAJBAnQiCGooAgAiBCABTQRAIAcgASAEayIDaiAGIAhqKAIAIAQQUUUNAQsgAkEBaiECDAELC0EAIQEgAw0ADAILAAsgAyEBCyAJRQ0BIAYQIwwBCyADIQELIAAgByABQX8QPwsLFAAgACACKAIAEGkQsQlBf0EAED8LoQEBBH8gAigCABArIgEEQCAAAn8jAEEQayICJAAgAkEMahCyCSABQQBBByABQauJAUEHEEgbaiIEEDEhASACKAIMIgBBACAAQQBKGyEFQQAhAANAAkAgACAFRwRAIAQgAEECdEGwrQNqKAIAIgYgARBIDQEgASAGai0AABCABQ0BQQEhAwsgAkEQaiQAIAMMAgsgAEEBaiEADAALAAsQgAELCw0AIABBgAhBf0EAED8LzgECAn8CfiMAQTBrIgEkACABQRhqIgRBAEEAQQAgAigCABCNAiICKAIUQeQAbEHkAGoQmgEgASACQQRBCCACLQAYG2o1AgA3AxAgBEGjDiABQRBqED4DQCADIAIoAhRORQRAIAEgAigCICADQQJ0aigCAEEBaq0iBSACKAIIIgStfEIBfSAFgCIGQgJRBH5CAkIBIARBCmytIAVCC35WGwUgBgs3AwAgAUEYakGiDiABED4gA0EBaiEDDAELCyAAIAFBGGoQnQcgAUEwaiQAC44CAQN/IAIoAgAQjQIhASACKAIEEGkhAgJAIAEoAggEQCACQQAgAkEAShshBANAIAMgBEYEQANAIAIgASgCEE4NBCACQQJ0IgMgASgCIGoiBCAEKAIAQQFqNgIAIAEoAhwgA2pBATYCACACQQFqIQIMAAsABSABKAIcIANBAnRqIgUgBSgCAEEBajYCACADQQFqIQMMAQsACwALQQAhAgNAIAIgASgCEE4NASABKAIcIAJBAnRqQQE2AgAgAkEBaiECDAALAAsgASABKAIIQQFqIgI2AggCQCABKAIMIgNFDQAgAiADIAEtABgiA0EBamxNDQAgASADQQFqOgAYIAAgASgCICgCAEEA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QCACQacBaw4GAQECAgIAAgsgAS0AB0EBcUUNASADIQIDQCACKAIAIgBFDQEgAEEkaiECQQEhBCABKAIsIABHDQALDAILQQIhBCAFKAIAIgAtAFcNAQJ/AkACQCADKAIIIgIEf0EAIQADQCACKAIAIABKBEBBACACIABBBHRqKAIIIAFBfxBrRQ0EIABBAWohACADKAIIIQIMAQsLIAUoAgAFIAALIAFBABA2IgBFDQAgAC0AAEGoAUcNACAAQawBOgAACyADIAUgAygCCCAAEDsiAjYCCEF/IQBBAQwBCyADKAIIIQJBAAshBiACBEAgASABKAIEIgJBgICAwAByNgIEIAUoAgAgARAuIAFBAEE0ECgiAUGnAToAACABIAYEfyADKAIIKAIAQQFrBSAACzsBICABIAMoAgAoAjA2AhwgAygCDCEAIAEgAkGABHE2AgQgASAANgIsCyAFKAIALQBXDQELQQAhBAsgBAswAQJ/IAEgACgCGCICKAIQIgNGBEBBAA8LIAIgATYCECAAIAEQahogAiADNgIQQQELqgEBA38CQCABKAIEQYCABXENACABKAIoIgJFDQAgAS4BIiEDIAAoAgAiBCgCACEAAkAgAS0AAEGpAUYEQCACKAIcIANBFGxqKAIEIAFHDQIgACABQQAQNiIBRQ0CIAIoAhwgA0EUbGogATYCBAwBCyACKAIoIANBFGxqKAIAIAFHDQEgACABQQAQNiIBRQ0BIAIoAiggA0EUbGogATYCAAsgBCABENcHC0EAC9wGAQh/IAAoAhgiAygCCCEEIAMoAgAhBQJAAkACQAJAIAEtAABBpwFrDgMAAQADCyADKAIEIgBFDQEgACgCACIDQQAgA0EAShshAyAAQQhqIQBBASEGA0AgAiADRg0DIAEoAhwiByAAKAIoRgRAQQAhACAEKAIgIgJBACACQQBKGyEDIAQoAhwhAgJAA0AgACADRwRAIAcgAigCCEYEQCACLwEQIAEvASBGDQMLIAJBFGohAiAAQQFqIQAMAQsLIAUoAgAhAiMAQRBrIgAkACAEIAIgBCgCHCAEQSBqIABBDGoQlAs2AhwgACgCDCECIABBEGokACACIgBBAEgNACAEKAIcIABBFGxqIgMgASgCLDYCACADIAEoAhwiBzYCCCADIAEvASAiCDsBECAFIAUoAixBAWoiAjYC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QQFGDQILIAAtAABBpwFHDQAgACgCLCIARQ0AIAAtACtBAUYNAQtBACECCyACCzIAAkAgACgCACIAKAKIAkUNACABKAI0DQAgARDIBygCQCIBRQ0AIAAgASgCCDYCiAILCwMAAQsLACAAQQA7ARRBAgsmACAAKAIQKAIcQShqQdzcAEEAEKgBGiAAIAEoAgQQOSAAIAEQJwsLloQExwIAQYAIC+feATMuMzkuMwB7fQAlcy4legBhZmZpbml0eQBSZWFsQWZmaW5pdHkAYnVzeQB0ZW1wX3N0b3JlX2RpcmVjdG9yeQBub3QgYSB3cml0YWJsZSBkaXJlY3RvcnkAb3BlbkRpcmVjdG9yeQBzaHJpbmtfbWVtb3J5AG91dCBvZiBtZW1vcnkAZmFpbGVkIHRvIGFsbG9jYXRlICV1IGJ5dGVzIG9mIG1lbW9yeQBIQVZJTkcgY2xhdXNlIG9uIGEgbm9uLWFnZ3JlZ2F0ZSBxdWVyeQBJbnRDb3B5AFNDb3B5AFZEZXN0cm95AE11bHRpcGx5AHF1ZXJ5X29ubHkAdW5saWtlbHkAdGFibGUgIiVzIiBoYXMgbW9yZSB0aGFuIG9uZSBwcmltYXJ5IGtleQBmb3JlaWduIGtleQBqc29uX2dyb3VwX2FycmF5AGpzb25fYXJyYXkAanVsaWFuZGF5AGZ0czRhdXgAdW5peABzcWxpdGVfcmVuYW1lX3F1b3RlZml4AHByZWZpeABMSUtFIG9yIEdMT0IgcGF0dGVybiB0b28gY29tcGxleABoZXgAY2hhcmluZGV4AE9wZW5BdXRvaW5kZXgAYXV0b21hdGljX2luZGV4AGF1dG8taW5kZXgAb3JwaGFuIGluZGV4AERyb3BJbmRleABpZHgAUmVvcGVuSWR4AHBjeABtYXgATWVtTWF4ACUwMngAMHgAIEZST00gJyVxJy4nJXElcycgQVMgeABDUkVBVEUgVEFCTEUgeABydwBwc293AGltcGxpZXNfbm9ubnVsbF9yb3cAbm93AGludGVnZXIgb3ZlcmZsb3cAcGFyc2VyIHN0YWNrIG92ZXJmbG93AHdpbmRvdwBzaGFkb3cAUmVzdWx0Um93AElmTnVsbFJvdwBuZXcAbm8gc3VjaCB2aWV3AGNhbm5vdCBtb2RpZnkgJXMgYmVjYXVzZSBpdCBpcyBhIHZpZXcAQ2Fubm90IGFkZCBhIGNvbHVtbiB0byBhIHZpZXcAY2Fubm90IFVQU0VSVCBhIHZpZXcAUHJldgBzdGRldgAgJWxsdQAlYyV1ACUuKno6JXUARnJhZ21lbnRhdGlvbiBvZiAlZCBieXRlcyByZXBvcnRlZCBhcyAlZCBvbiBwYWdlICV1AE11bHRpcGxlIHVzZXMgZm9yIGJ5dGUgJXUgb2YgcGFnZSAldQB1bmFibGUgdG8gdXNlIGZ1bmN0aW9uICVzIGluIHRoZSByZXF1ZXN0ZWQgY29udGV4dABTb3J0ZXJOZXh0AFZOZXh0AGluY29tcGxldGUgaW5wdXQAYnVzeV90aW1lb3V0AGxvY2FsaG9zdABjYW5ub3QgZHJvcCBjb2x1bW4gIiVzIjogbm8gb3RoZXIgY29sdW1ucyBleGlzdABwZXJzaXN0AGZvcmVpZ25fa2V5X2xpc3QAaW5kZXhfbGlzdABmdW5jdGlvbl9saXN0AGNvbGxhdGlvbl9saXN0AGRhdGFiYXNlX2xpc3QAbW9kdWxlX2xpc3QAUFJBR01BIHRhYmxlX2xpc3QAcHJhZ21hX2xpc3QAc2V0IGxpc3QAVmFsdWVMaXN0AHNxbGl0ZV9yZW5hbWVfdGVzdABSb3dTZXRUZXN0AFNlcXVlbmNlVGVzdABmYXN0AExhc3QAQ2FzdABzcXJ0AFNvcnRlclNvcnQAanNvbl9pbnNlcnQASWR4SW5zZXJ0AFNvcnRlckluc2VydAByZXN0YXJ0AGNvdABCaXROb3QASWZOb3QAUGFnZWNvdW50AGZyZWVsaXN0X2NvdW50AG1heF9wYWdlX2NvdW50AFJlc2V0Q291bnQAd2FsX2F1dG9jaGVja3BvaW50AHdhbF9jaGVja3BvaW50AENoZWNrcG9pbnQAU2F2ZXBvaW50AGEgQ0hFQ0sgY29uc3RyYWludAAlc09OIENPTkZMSUNUIGNsYXVzZSBkb2VzIG5vdCBtYXRjaCBhbnkgUFJJTUFSWSBLRVkgb3IgVU5JUVVFIGNvbnN0cmFpbnQAQ3Vyc29ySGludABfY29udGVudABwYXJlbnQARElTVElOQ1QgYWdncmVnYXRlcyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgYXJndW1lbnQAY29tbWVudABBUEkgY2FsbGVkIHdpdGggZmluYWxpemVkIHByZXBhcmVkIHN0YXRlbWVudABBUEkgY2FsbGVkIHdpdGggTlVMTCBwcmVwYXJlZCBzdGF0ZW1lbnQATWF4UGdjbnQAZGVmYXVsdCB2YWx1ZSBvZiBjb2x1bW4gWyVzXSBpcyBub3QgY29uc3RhbnQATXVzdEJlSW50AENhbm5vdCBhZGQgYSBjb2x1bW4gd2l0aCBub24tY29uc3RhbnQgZGVmYXVsdABIYWx0AGxhbm9pdABzdGF0X2luaXQASW5pdABBdXRvQ29tbWl0AGFuYWx5c2lzX2xpbWl0AHNvZnRfaGVhcF9saW1pdABoYXJkX2hlYXBfbGltaXQAam91cm5hbF9zaXplX2xpbWl0AE9mZnNldExpbWl0AFNlZWtIaXQAT04gY2xhdXNlIHJlZmVyZW5jZXMgdGFibGVzIHRvIGl0cyByaWdodABTaGlmdFJpZ2h0AGhnaHQAU2hpZnRMZWZ0AE9mZnNldAByZXNldABqc29uX3NldAB0b28gbWFueSBjb2x1bW5zIGluIHJlc3VsdCBzZXQAJXIgT1JERVIgQlkgdGVybSBkb2VzIG5vdCBtYXRjaCBhbnkgY29sdW1uIGluIHRoZSByZXN1bHQgc2V0AHNuaXBwZXQAc3RhdF9nZXQAc3FsaXRlX2NvbXBpbGVvcHRpb25fZ2V0AHN0cmljdABOb0NvbmZsaWN0AGpzb25fZ3JvdXBfb2JqZWN0AGpzb25fb2JqZWN0AGpzb25fZXh0cmFjdABTdWJ0cmFjdABsc3RhdABmc3RhdAAlc19zdGF0AHRibCxpZHgsc3RhdAB1bnN1cHBvcnRlZCBmaWxlIGZvcm1hdABncm91cF9jb25jYXQAQ29uY2F0AEx0AEd0AGRlZmVyX2ZvcmVpZ25fa2V5cwBhbHdheXMAcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdmlld3MAc3RhdHVzAHN5bmNocm9ub3VzAGluZGV4ICVzIGFscmVhZHkgZXhpc3RzAG91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzACVzICVUIGFscmVhZHkgZXhpc3RzAHRyaWdnZXIgJVQgYWxyZWFkeSBleGlzdHMATm90RXhpc3RzAGlnbm9yZV9jaGVja19jb25zdHJhaW50cwBDSEVDSyBjb25zdHJhaW50cwBleHByZXNzaW9ucyBwcm9oaWJpdGVkIGluIFBSSU1BUlkgS0VZIGFuZCBVTklRVUUgY29uc3RyYWludHMAanNvbl9vYmplY3QoKSByZXF1aXJlcyBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMAanNvbl8lcygpIG5lZWRzIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzACVzX3NlZ21lbnRzAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IHVzZXItZnVuY3Rpb24gZHVlIHRvIGFjdGl2ZSBzdGF0ZW1lbnRzAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IGNvbGxhdGlvbiBzZXF1ZW5jZSBkdWUgdG8gYWN0aXZlIHN0YXRlbWVudHMAb2Zmc2V0cwByZXZlcnNlX3Vub3JkZXJlZF9zZWxlY3RzAGlpc3Nzc3NzAGlzcwBzZXNzAHVuY29tcHJlc3MAY2Fubm90IG9wZW4gc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IHJlbGVhc2Ugc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IGNvbW1pdCB0cmFuc2FjdGlvbiAtIFNRTCBzdGF0ZW1lbnRzIGluIHByb2dyZXNzAGNhbm5vdCBWQUNVVU0gLSBTUUwgc3RhdGVtZW50cyBpbiBwcm9ncmVzcwBhY2Nlc3MAcGFyYW1ldGVycwByZWN1cnNpdmVfdHJpZ2dlcnMAdGhlIElOREVYRUQgQlkgY2xhdXNlIGlzIG5vdCBhbGxvd2VkIG9uIFVQREFURSBvciBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIE5PVCBJTkRFWEVEIGNsYXVzZSBpcyBub3QgYWxsb3dlZCBvbiBVUERBVEUgb3IgREVMRVRFIHN0YXRlbWVudHMgd2l0aGluIHRyaWdnZXJzAHF1YWxpZmllZCB0YWJsZSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgb24gSU5TRVJULCBVUERBVEUsIGFuZCBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAQ2hpbGQgcGFnZSBkZXB0aCBkaWZmZXJzAHVuYWJsZSB0byBjbG9zZSBkdWUgdG8gdW5maW5hbGl6ZWQgc3RhdGVtZW50cyBvciB1bmZpbmlzaGVkIGJhY2t1cHMAYWNvcwBJZlBvcwBjb21waWxlX29wdGlvbnMARElTVElOQ1QgaXMgbm90IHN1cHBvcnRlZCBmb3Igd2luZG93IGZ1bmN0aW9ucwBGSUxURVIgY2xhdXNlIG1heSBvbmx5IGJlIHVzZWQgd2l0aCBhZ2dyZWdhdGUgd2luZG93IGZ1bmN0aW9ucwBub24tZGV0ZXJtaW5pc3RpYyBmdW5jdGlvbnMAaW5kZXggZXhwcmVzc2lvbnMAU0VMRUNUcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgJXMgZG8gbm90IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHJlc3VsdCBjb2x1bW5zAHZpcnR1YWwgdGFibGVzIGNhbm5vdCB1c2UgY29tcHV0ZWQgY29sdW1ucwBnZW5lcmF0ZWQgY29sdW1ucwB0YWJsZSAlcyBoYXMgJWQgdmFsdWVzIGZvciAlZCBjb2x1bW5zAHJhZGlhbnMAYWxsIFZBTFVFUyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHRlcm1zAGVtcHR5X3Jlc3VsdF9jYWxsYmFja3MATG9hZEFuYWx5c2lzAGZsZ3MAZmxhZ3MAdmZzACVkIGNvbHVtbnMgYXNzaWduZWQgJWQgdmFsdWVzAEpTT04gY2Fubm90IGhvbGQgQkxPQiB2YWx1ZXMAZmFpbGVkIG1lbW9yeSByZXNpemUgJXUgdG8gJXUgYnl0ZXMAcGFydGlhbCBpbmRleCBXSEVSRSBjbGF1c2VzAHNob3J0X2NvbHVtbl9uYW1lcwBmdWxsX2NvbHVtbl9uYW1lcwB1bmFibGUgdG8gb3BlbiBhIHRlbXBvcmFyeSBkYXRhYmFzZSBmaWxlIGZvciBzdG9yaW5nIHRlbXBvcmFyeSB0YWJsZXMAY2Fubm90IGNyZWF0ZSB0cmlnZ2VycyBvbiB2aXJ0dWFsIHRhYmxlcwAlcyBSRVRVUk5JTkcgaXMgbm90IGF2YWlsYWJsZSBvbiB2aXJ0dWFsIHRhYmxlcwBjYW5ub3Qgam9pbiB1c2luZyBjb2x1bW4gJXMgLSBjb2x1bW4gbm90IHByZXNlbnQgaW4gYm90aCB0YWJsZXMAQVVUT0lOQ1JFTUVOVCBub3QgYWxsb3dlZCBvbiBXSVRIT1VUIFJPV0lEIHRhYmxlcwAlcyBjYW5ub3QgdXNlIHZhcmlhYmxlcwB0b28gbWFueSBTUUwgdmFyaWFibGVzAHN1YnF1ZXJpZXMAY2Fubm90IHVzZSB3aW5kb3cgZnVuY3Rpb25zIGluIHJlY3Vyc2l2ZSBxdWVyaWVzAGNvdW50X2NoYW5nZXMAdG90YWxfY2hhbmdlcwBkZWdyZWVzAFJFVFVSTklORyBtYXkgbm90IHVzZSAiVEFCTEUuKiIgd2lsZGNhcmRzAHRocmVhZHMAYWJzAC4lLipzAENSRUFURSAlcyAlLipzAENSRUFURSVzIElOREVYICUuKnMAaW52YWxpZCB1cmkgYXV0aG9yaXR5OiAlLipzAHVua25vd24gdGFibGUgb3B0aW9uOiAlLipzACUuKnMlcwAsJXMlcyVzAFNDQU4gJXMlcyVzAHNxbGl0ZV9hbHRlcnRhYl8lcwBTQ0FOICVkIENPTlNUQU5UIFJPVyVzACVRJXMAIFZJUlRVQUwgVEFCTEUgSU5ERVggJWQ6JXMAJXM6ICVzLiVzLiVzAG1pc3NpbmcgZGF0YXR5cGUgZm9yICVzLiVzAGNhbm5vdCBzdG9yZSAlcyB2YWx1ZSBpbiAlcyBjb2x1bW4gJXMuJXMAbm9uLSVzIHZhbHVlIGluICVzLiVzAE5VTEwgdmFsdWUgaW4gJXMuJXMAJXM6ICVzLiVzAG5vIHN1Y2ggdGFibGUgY29sdW1uOiAlcy4lcwAuLiVzACUuMThzLSVzACBVU0lORyBJTlRFR0VSIFBSSU1BUlkgS0VZICglcwB1c2UgRFJPUCBWSUVXIHRvIGRlbGV0ZSB2aWV3ICVzAGlsbGVnYWwgZmlyc3QgYXJndW1lbnQgdG8gJXMAbWlzdXNlIG9mIGFsaWFzZWQgd2luZG93IGZ1bmN0aW9uICVzAHRvbyBtYW55IGNvbHVtbnMgb24gJXMAdG9vIG1hbnkgY29sdW1ucyBpbiAlcwAlcyBwcm9oaWJpdGVkIGluICVzAENIRUNLIGNvbnN0cmFpbnQgZmFpbGVkIGluICVzAG5vbi1kZXRlcm1pbmlzdGljIHVzZSBvZiAlcygpIGluICVzAHJlY292ZXJlZCAlZCBwYWdlcyBmcm9tICVzAG1pc3VzZSBvZiBhbGlhc2VkIGFnZ3JlZ2F0ZSAlcwAlcyAlVCBjYW5ub3QgcmVmZXJlbmNlIG9iamVjdHMgaW4gZGF0YWJhc2UgJXMAY2Fubm90IGRldGFjaCBkYXRhYmFzZSAlcwBhIEpPSU4gY2xhdXNlIGlzIHJlcXVpcmVkIGJlZm9yZSAlcwBjYW5ub3Qgb3BlbiB2YWx1ZSBvZiB0eXBlICVzAGNhbm5vdCBmc3RhdCBkYiBmaWxlICVzAHJlY292ZXJlZCAlZCBmcmFtZXMgZnJvbSBXQUwgZmlsZSAlcwBQUklNQVJZIEtFWSBtaXNzaW5nIG9uIHRhYmxlICVzAHVzZSBEUk9QIFRBQkxFIHRvIGRlbGV0ZSB0YWJsZSAlcwBTRUxFQ1QgJXMgT1JERVIgQlkgcm93aWQgJXMAU0VMRUNUICVzIFdIRVJFIHJvd2lkIEJFVFdFRU4gJWxsZCBBTkQgJWxsZCBPUkRFUiBCWSByb3dpZCAlcwB0aGVyZSBpcyBhbHJlYWR5IGFuIGluZGV4IG5hbWVkICVzAHRhYmxlICVTIGhhcyBubyBjb2x1bW4gbmFtZWQgJXMAdGhlcmUgaXMgYWxyZWFkeSBhIHRhYmxlIG5hbWVkICVzAHN0YXRlbWVudCBhYm9ydHMgYXQgJWQ6IFslc10gJXMAQ09WRVJJTkcgSU5ERVggJXMAU0VMRUNUICVzAHVuc3VwcG9ydGVkIHVzZSBvZiBOVUxMUyAlcwBVU0UgVEVNUCBCLVRSRUUgRk9SICVzAC0tIFRSSUdHRVIgJXMAUklHSFQtSk9JTiAlcwA+PyBBTkQgJXMAJXo6ICVzAHJlY3Vyc2l2ZSByZWZlcmVuY2UgaW4gYSBzdWJxdWVyeTogJXMAdnRhYmxlIGNvbnN0cnVjdG9yIGNhbGxlZCByZWN1cnNpdmVseTogJXMAbm8gc3VjaCBpbmRleDogJXMAbm8gc3VjaCB3aW5kb3c6ICVzAGNhbm5vdCBvdmVycmlkZSAlcyBvZiB3aW5kb3c6ICVzAGNhbm5vdCBvcGVuIHZpZXc6ICVzAG5vIHN1Y2ggc2F2ZXBvaW50OiAlcwBubyBzdWNoIHZmczogJXMAbXVsdGlwbGUgcmVjdXJzaXZlIHJlZmVyZW5jZXM6ICVzAGVycm9yIGluICVzICVzJXMlczogJXMAZXJyb3IgaW4gJXMgJXMgYWZ0ZXIgJXM6ICVzAHVua25vd24gdG9rZW5pemVyOiAlcwBlcnJvciBwYXJzaW5nIHByZWZpeCBwYXJhbWV0ZXI6ICVzAHVucmVjb2duaXplZCBwYXJhbWV0ZXI6ICVzAHVucmVjb2duaXplZCBvcmRlcjogJXMAdW5yZWNvZ25pemVkIG1hdGNoaW5mbzogJXMAbm8gc3VjaCBjb2x1bW46ICVzAGZpbGUgcmVuYW1lZCB3aGlsZSBvcGVuOiAlcwBmaWxlIHVubGlua2VkIHdoaWxlIG9wZW46ICVzAHVuc3VwcG9ydGVkIGVuY29kaW5nOiAlcwBjYW5ub3QgbGltaXQgV0FMIHNpemU6ICVzAE1KIGRlbGV0ZTogJXMAdGFyZ2V0IG9iamVjdC9hbGlhcyBtYXkgbm90IGFwcGVhciBpbiBGUk9NIGNsYXVzZTogJXMAb2JqZWN0IG5hbWUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZTogJXMAdW5rbm93biBkYXRhYmFzZTogJXMAdW5hYmxlIHRvIG9wZW4gZGF0YWJhc2U6ICVzAG5vIHN1Y2ggZGF0YWJhc2U6ICVzAHRoZXJlIGlzIGFscmVhZHkgYW5vdGhlciB0YWJsZSBvciBpbmRleCB3aXRoIHRoaXMgbmFtZTogJXMAZHVwbGljYXRlIGNvbHVtbiBuYW1lOiAlcwBkdXBsaWNhdGUgV0lUSCB0YWJsZSBuYW1lOiAlcwBubyBzdWNoIG1vZHVsZTogJXMAbXVsdGlwbGUgbGlua3MgdG8gZmlsZTogJXMAY2Fubm90IG9wZW4gdmlydHVhbCB0YWJsZTogJXMAbm8gc3VjaCB0YWJsZTogJXMAbXVsdGlwbGUgcmVmZXJlbmNlcyB0byByZWN1cnNpdmUgdGFibGU6ICVzAG5vIHN1Y2ggJXMgbW9kZTogJXMATUogY29sbGlkZTogJXMAbm8gc3VjaCBjb2xsYXRpb24gc2VxdWVuY2U6ICVzAGNpcmN1bGFyIHJlZmVyZW5jZTogJXMAY2Fubm90IG9wZW4gdGFibGUgd2l0aG91dCByb3dpZDogJXMAJXMgbW9kZSBub3QgYWxsb3dlZDogJXMAdnRhYmxlIGNvbnN0cnVjdG9yIGZhaWxlZDogJXMAYXV0b21hdGljIGV4dGVuc2lvbiBsb2FkaW5nIGZhaWxlZDogJXMAZGF0YWJhc2UgdGFibGUgaXMgbG9ja2VkOiAlcwBkYXRhYmFzZSBzY2hlbWEgaXMgbG9ja2VkOiAlcwB2dGFibGUgY29uc3RydWN0b3IgZGlkIG5vdCBkZWNsYXJlIHNjaGVtYTogJXMAYWJvcnQgYXQgJWQgaW4gWyVzXTogJXMALS0gJXMAJXogLSAlcwBvc191bml4LmM6JWQ6ICglZCkgJXMoJXMpIC0gJXMAd3IAcmlnaHRzdHIAbGVmdHN0cgBpbnN0cgBzdWJzdHIAZXhwcl9pbXBsaWVzX2V4cHIAaW52YWxpZCBhcmd1bWVudHMgdG8gZnRzNGF1eCBjb25zdHJ1Y3RvcgBtaXNzaW5nICVzIHBhcmFtZXRlciBpbiBmdHM0IGNvbnN0cnVjdG9yAHRoZSAiLiIgb3BlcmF0b3IAZnRzM2N1cnNvcgBuZWFyICIlVCI6IHN5bnRheCBlcnJvcgB1bmtub3duIGVycm9yAGRvbWFpbiBlcnJvcgBub3QgYW4gZXJyb3IAU1FMIGxvZ2ljIGVycm9yAGRpc2sgSS9PIGVycm9yAGZsb29yAHJtZGlyAG1rZGlyAHNlZ2RpcgBmdHMzX3Rva2VuaXplcgB1bmtub3duIHRva2VuaXplcgBwb3dlcgBsb3dlcgBzcWxpdGVfdGVtcF9tYXN0ZXIAc3FsaXRlX21hc3RlcgBwb3J0ZXIAUmVzZXRTb3J0ZXIARmtDb3VudGVyAEFQSSBjYWxsIHdpdGggJXMgZGF0YWJhc2UgY29ubmVjdGlvbiBwb2ludGVyAHN0cmZpbHRlcgBWRmlsdGVyAEVTQ0FQRSBleHByZXNzaW9uIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyAHVwcGVyAHByb3BlcgBJZlNtYWxsZXIAY2Fubm90IHVzZSBSRVRVUk5JTkcgaW4gYSB0cmlnZ2VyAERyb3BUcmlnZ2VyAHNlY29uZCBhcmd1bWVudCB0byBudGhfdmFsdWUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAYXJndW1lbnQgb2YgbnRpbGUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAZnJhbWUgc3RhcnRpbmcgb2Zmc2V0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcgBmcmFtZSBlbmRpbmcgb2Zmc2V0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcgBJbnRlZ2VyAFJvd2lkICVsbGQgb3V0IG9mIG9yZGVyAFJlbWFpbmRlcgBmcmFtZSBzdGFydGluZyBvZmZzZXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcgBhZGRyAHBhZHIAY2hhcgB5ZWFyAENsZWFyAEJpdE9yAHNlcQBDb2xsU2VxAEVsc2VFcQByZWdleHAAT3BlbkR1cABOb29wAEp1bXAAL3Vzci90bXAAL3Zhci90bXAAdGVtcABjdXJyZW50X3RpbWVzdGFtcABBZ2dTdGVwAG1vZGVTdGVwAHZhcmlhbmNlU3RlcABtdW5tYXAAbW1hcABtcmVtYXAAdnRhYjolcABzc2Vuc3VvAGlsc3VvAGF1dG8AR290bwBpbnRvAGluY3JlbWVudGFsX3ZhY3V1bSBlbmFibGVkIHdpdGggYSBtYXggcm9vdHBhZ2Ugb2YgemVybwBJZk5vdFplcm8ARGVjckp1bXBaZXJvAEZrSWZaZXJvAHNlcW5vAGluZGV4X3hpbmZvAHRhYmxlX3hpbmZvAG1hdGNoaW5mbwBpbmRleF9pbmZvAHRhYmxlX2luZm8AT3BlblBzZXVkbwBmY2hvd24AQmVnaW5TdWJydG4AUmV0dXJuAGpzb24Abm8gcXVlcnkgc29sdXRpb24AaW5kZXggY29ycnVwdGlvbgBkYXRhYmFzZSBjb3JydXB0aW9uAGZyZWUgc3BhY2UgY29ycnVwdGlvbgB1bmtub3duIGNvbHVtbiAiJXMiIGluIGZvcmVpZ24ga2V5IGRlZmluaXRpb24AJXMueEJlc3RJbmRleCBtYWxmdW5jdGlvbgBhdXRob3JpemVyIG1hbGZ1bmN0aW9uACUjVCgpIG1heSBub3QgYmUgdXNlZCBhcyBhIHdpbmRvdyBmdW5jdGlvbgAnJXMnIGlzIG5vdCBhIGZ1bmN0aW9uAEZ1bmN0aW9uAGNhbm5vdCBzdGFydCBhIHRyYW5zYWN0aW9uIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCBjaGFuZ2UgJXMgd2FsIG1vZGUgZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgB0ZW1wb3Jhcnkgc3RvcmFnZSBjYW5ub3QgYmUgY2hhbmdlZCBmcm9tIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCBWQUNVVU0gZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgBTYWZldHkgbGV2ZWwgbWF5IG5vdCBiZSBjaGFuZ2VkIGluc2lkZSBhIHRyYW5zYWN0aW9uAFRyYW5zYWN0aW9uAFBlcm11dGF0aW9uAHVua25vd24gb3BlcmF0aW9uAHVuc3VwcG9ydGVkIGZyYW1lIHNwZWNpZmljYXRpb24AUkFOR0Ugd2l0aCBvZmZzZXQgUFJFQ0VESU5HL0ZPTExPV0lORyByZXF1aXJlcyBvbmUgT1JERVIgQlkgZXhwcmVzc2lvbgB0b28gbWFueSBsZXZlbHMgb2YgdHJpZ2dlciByZWN1cnNpb24AdXNlcl92ZXJzaW9uAHNxbGl0ZV92ZXJzaW9uAGRhdGFfdmVyc2lvbgBzY2hlbWFfdmVyc2lvbgBzcWxpdGVfZHJvcF9jb2x1bW4Ac3FsaXRlX3JlbmFtZV9jb2x1bW4AYWZ0ZXIgZHJvcCBjb2x1bW4Abm8gc3VjaCBjb2x1bW4AbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBub24tZ2VuZXJhdGVkIGNvbHVtbgBjYW5ub3QgdXNlIERFRkFVTFQgb24gYSBnZW5lcmF0ZWQgY29sdW1uAGFkZCBjb2x1bW4AQ2Fubm90IGFkZCBhIFBSSU1BUlkgS0VZIGNvbHVtbgBDYW5ub3QgYWRkIGEgVU5JUVVFIGNvbHVtbgBjYW5ub3QgYWRkIGEgU1RPUkVEIGNvbHVtbgBWQ29sdW1uAGJ1aWx0aW4AYXNpbgBhdCBtb3N0ICVkIHRhYmxlcyBpbiBhIGpvaW4AbWluAG9yaWdpbgBWQmVnaW4AbWFpbgBFeHBsYWluAHNpZ24Ac3NlbgBvcGVuAElmTm90T3BlbgBTb3J0ZXJPcGVuAFZPcGVuAGhpZGRlbgBhdGFuAG1lZGlhbgBTZWVrU2NhbgBWSW5pdEluAGF1dG9fdmFjdXVtAGluY3JlbWVudGFsX3ZhY3V1bQBJbmNyVmFjdXVtAHN1bQBkcm9wIGNvbHVtbiBmcm9tAC9kZXYvdXJhbmRvbQBBZGRJbW0AcnRyaW0AbHRyaW0AcmVhZG9ubHlfc2htACVzLXNobQB0bmVtAFJBSVNFKCkgbWF5IG9ubHkgYmUgdXNlZCB3aXRoaW4gYSB0cmlnZ2VyLXByb2dyYW0AUHJvZ3JhbQBQYXJhbQBmdWwAZmNudGwAaW9jdGwAaWdvbABsb2NraW5nIHByb3RvY29sAG5jb2wAbm90bnVsbABpZm51bGwAL2Rldi9udWxsAGRhdGFiYXNlIG9yIGRpc2sgaXMgZnVsbABOb3ROdWxsAFNvZnROdWxsAElzTnVsbABaZXJvT3JOdWxsAEhhbHRJZk51bGwAY29sbABjYWNoZV9zcGlsbABSb3dDZWxsAGNlaWwAZGV0YWlsAHBhZGwAdW5peC1leGNsAHRibAB3YWwAdmlydHVhbAB0b3RhbABpbmNyZW1lbnRhbABPcGVuRXBoZW1lcmFsAEFnZ0ZpbmFsAG5vcm1hbABJbmRleCBhbHJlYWR5IG9wdGltYWwAcGFydGlhbAByZWFsAFJlYWwAcGsAb2sAdW5saW5rAHJlYWRsaW5rAEZpbmlzaFNlZWsARGVmZXJyZWRTZWVrAG5vbG9jawBDdXJzb3JVbmxvY2sAYmxvY2sAJXMubG9jawBDdXJzb3JMb2NrAFRhYmxlTG9jawBpbnRlZ3JpdHlfY2hlY2sAZm9yZWlnbl9rZXlfY2hlY2sAcXVpY2tfY2hlY2sAY2VsbF9zaXplX2NoZWNrAGludGVncml0eS1jaGVjawBGa0NoZWNrAFR5cGVDaGVjawBJbnRlZ3JpdHlDawByZXppAG5vaXRhemkAaXRpdmkAc3NlbmV2aQBpdGkAaXNzaXNpAGlzaXNpAHBpAG5vaQBnbmkAc2lzc2lpAGlzc2lzaWkAc3NzaWlpAHNlaQBpdGljaQBldGFjaQBsYWNpAGNvdGgAbW9udGgAanNvbl9hcnJheV9sZW5ndGgAb3ZlcmZsb3cgbGlzdCBsZW5ndGgAd2R0aABzdGF0X3B1c2gAYWNvc2gAYXNpbmgAYXRhbmgAanNvbl9wYXRjaABkYXRhdHlwZSBtaXNtYXRjaABhcmd1bWVudCB0eXBlIG1pc21hdGNoAGFiYnJldmlhdGVkIHF1ZXJ5IGFsZ29yaXRobSBzZWFyY2gAdW5peGVwb2NoAHNxbGl0ZV9hdHRhY2gAc3FsaXRlX2RldGFjaABqc29uX2VhY2gAYXZnAG5hcmcAc3FsaXRlX2xvZwBzdGF0ZW1lbnQgdG9vIGxvbmcAY2Fubm90IG9wZW4gJXMgY29sdW1uIGZvciB3cml0aW5nAHN1YnN0cmluZwBTdHJpbmcAc3FsaXRlX3JldHVybmluZwBlbmNvZGluZwBzdHJpbmcgb3IgYmxvYiB0b28gYmlnAFJlbGVhc2VSZWcAJS4xNmcAJSEuMTVnAHNzZW5sdWYAcHJpbnRmAHR5cGVvZgBtb2Rlb2YAb3V0IG9mAHJlbmFtZSBjb2x1bW5zIG9mAG51bGxpZgBpaWYAb2ZmADAxMjM0NTY3ODlhYmNkZWYASWYAJTA2LjNmACUuKmYAZ2V0cGFnZXNpemUAZG9jc2l6ZQBtbWFwX3NpemUAZGVmYXVsdF9jYWNoZV9zaXplAFBSQUdNQSAlUS5wYWdlX3NpemUAZnRzM3Rva2VuaXplAG9wdGltaXplAGpzb25fcmVtb3ZlAE1vdmUAY2Fubm90IGNvbW1pdCAtIG5vIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZQBjYW5ub3Qgcm9sbGJhY2sgLSBubyB0cmFuc2FjdGlvbiBpcyBhY3RpdmUAZXhjbHVzaXZlAHRydWUASXNUcnVlAHVuaXF1ZQBkZmx0X3ZhbHVlAENhbm5vdCBhZGQgYSBSRUZFUkVOQ0VTIGNvbHVtbiB3aXRoIG5vbi1OVUxMIGRlZmF1bHQgdmFsdWUAQWdnVmFsdWUAanNvbl9xdW90ZQBwd3JpdGUAT3BlbldyaXRlAG9uX2RlbGV0ZQBzZWN1cmVfZGVsZXRlAElkeERlbGV0ZQBwcml2YXRlAGFnZ3JlZ2F0ZQBWQ3JlYXRlAG9uX3VwZGF0ZQBWVXBkYXRlAGN1cnJlbnRfZGF0ZQBmYWxsb2NhdGUAZnRydW5jYXRlAHJlcGxpY2F0ZQBiYWQgcGFyYW1ldGVyIG9yIG90aGVyIEFQSSBtaXN1c2UAdG9vIG1hbnkgdGVybXMgaW4gJXMgQlkgY2xhdXNlAHRvbyBtYW55IHRlcm1zIGluIE9SREVSIEJZIGNsYXVzZQBhZ2dyZWdhdGUgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgR1JPVVAgQlkgY2xhdXNlAFBBUlRJVElPTiBjbGF1c2UAYSBOQVRVUkFMIGpvaW4gbWF5IG5vdCBoYXZlIGFuIE9OIG9yIFVTSU5HIGNsYXVzZQBkYXRhYmFzZSAlcyBpcyBhbHJlYWR5IGluIHVzZQBBZ2dJbnZlcnNlAHJldmVyc2UAY2xvc2UAQ2xvc2UAZmFsc2UAYXR0ZW1wdCB0byB3cml0ZSBhIHJlYWRvbmx5IGRhdGFiYXNlAGNvcnJ1cHQgZGF0YWJhc2UAYXR0YWNoZWQgZGF0YWJhc2VzIG11c3QgdXNlIHRoZSBzYW1lIHRleHQgZW5jb2RpbmcgYXMgbWFpbiBkYXRhYmFzZQBmaWxlIGlzIG5vdCBhIGRhdGFiYXNlAHRlbXBfc3RvcmUAJXMgY2xhdXNlIHNob3VsZCBjb21lIGFmdGVyICVzIG5vdCBiZWZvcmUARXhwaXJlAHNxdWFyZQBleHByX2NvbXBhcmUAU29ydGVyQ29tcGFyZQBzdWJ0eXBlAENsclN1YnR5cGUAanNvbl90eXBlAElzTnVsbE9yVHlwZQBJZk5vSG9wZQBpbHRuZQB1bml4LW5vbmUASW5pdENvcm91dGluZQBFbmRDb3JvdXRpbmUAaWNuZQBsb2NhbHRpbWUAc3RyZnRpbWUAZGF0ZXRpbWUAY3VycmVudF90aW1lAHRuZW1lAGFmdGVyIHJlbmFtZQBub24tdGV4dCBmaWxlbmFtZQBWUmVuYW1lAGFtYmlndW91cyBjb2x1bW4gbmFtZQB0ZW1wb3JhcnkgdHJpZ2dlciBtYXkgbm90IGhhdmUgcXVhbGlmaWVkIG5hbWUAc2ltcGxlAGxvd2VyX3F1YXJ0aWxlAHVwcGVyX3F1YXJ0aWxlAHVuaXgtZG90ZmlsZQBjYW5ub3Qgb3BlbiBmaWxlAHVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGZpbGUAaW1tdXRhYmxlAEFib3J0YWJsZQBsZWdhY3lfYWx0ZXJfdGFibGUAc3FsaXRlX3JlbmFtZV90YWJsZQBjYW5ub3QgY3JlYXRlIHRyaWdnZXIgb24gc3lzdGVtIHRhYmxlAHZpcnR1YWwgdGFibGUAbm8gc3VjaCB0YWJsZQBudW1iZXIgb2YgY29sdW1ucyBpbiBmb3JlaWduIGtleSBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHJlZmVyZW5jZWQgdGFibGUAbG9jYWwgdGltZSB1bmF2YWlsYWJsZQBhbm90aGVyIHJvdyBhdmFpbGFibGUAbm8gbW9yZSByb3dzIGF2YWlsYWJsZQBWYXJpYWJsZQBEcm9wVGFibGUAdXRmMTZsZQBVVEYxNmxlAFVURi0xNmxlAGNhc2Vfc2Vuc2l0aXZlX2xpa2UAU2V0Q29va2llAFJlYWRDb29raWUAY2FjaGUAY29sdW1uIGluZGV4IG91dCBvZiByYW5nZQBub3RpZmljYXRpb24gbWVzc2FnZQB3YXJuaW5nIG1lc3NhZ2UAaW52YWxpZCByb290cGFnZQBFeHRlbmRzIG9mZiBlbmQgb2YgcGFnZQBqc29uX3RyZWUAQ3JlYXRlQnRyZWUAZGVlAGpvdXJuYWxfbW9kZQBsb2NraW5nX21vZGUAb3Bjb2RlAHVuaWNvZGUASm91cm5hbE1vZGUARGl2aWRlAGNvYWxlc2NlAHNxbGl0ZV9zZXF1ZW5jZQBTZXF1ZW5jZQBkaWZmZXJlbmNlAHZhcmlhbmNlAE9uY2UAVHJhY2UAanNvbl9yZXBsYWNlAHV0ZjE2YmUAVVRGMTZiZQBVVEYtMTZiZQBOZQBMZQBHZQAyMGM6MjBlADIwYjoyMGUAJSEuMjBlAGdldGN3ZABNYWtlUmVjb3JkAHRoc3RuZHJkAGxpa2VsaWhvb2QAZmNobW9kAHJvdW5kAE5vdEZvdW5kAFJld2luZABTZWVrRW5kAEJpdEFuZABvbGQAJWxsZCAlbGxkAG5vIHN1Y2ggcm93aWQ6ICVsbGQAcmVidWlsZABZaWVsZABsYXN0X2luc2VydF9yb3dpZAAlcy5yb3dpZABTRUxFQ1QqRlJPTSIldyIuJXMgT1JERVIgQlkgcm93aWQAU0VMRUNUKkZST00iJXciLiVzIFdIRVJFICVzIE9SREVSIEJZIHJvd2lkAElkeFJvd2lkAE5ld1Jvd2lkAFNlZWtSb3dpZABnZXRldWlkAGludmFsaWQAanNvbl92YWxpZABma2lkAF9fbGFuZ2lkACV6LCBsYW5naWQAbGFuZ3VhZ2VpZABkb2NpZABhcHBsaWNhdGlvbl9pZABzcWxpdGVfc291cmNlX2lkAG5vdCBhdXRob3JpemVkAEluZGV4IG9wdGltaXplZABub3RpbmRleGVkAHVuYWJsZSB0byBpZGVudGlmeSB0aGUgb2JqZWN0IHRvIGJlIHJlaW5kZXhlZAB2aWV3cyBtYXkgbm90IGJlIGluZGV4ZWQAdmlydHVhbCB0YWJsZXMgbWF5IG5vdCBiZSBpbmRleGVkAHRhYmxlICVzIG1heSBub3QgYmUgaW5kZXhlZAByZWFkX3VuY29tbWl0dGVkAHJlY3Vyc2l2ZSBhZ2dyZWdhdGUgcXVlcmllcyBub3Qgc3VwcG9ydGVkAHF1ZXJ5IGFib3J0ZWQAcm93cyBpbnNlcnRlZABpbnRlcnJ1cHRlZABjaGVja3BvaW50ZWQAYWNjZXNzIHRvICV6IGlzIHByb2hpYml0ZWQAYWNjZXNzIHRvIHZpZXcgIiVzIiBwcm9oaWJpdGVkAHJvd3MgZGVsZXRlZABnZW5lcmF0ZWQAcm93cyB1cGRhdGVkAG5vdHVzZWQAcm93IHZhbHVlIG1pc3VzZWQAc3FsaXRlX2NvbXBpbGVvcHRpb25fdXNlZABQYWdlICVkIGlzIG5ldmVyIHVzZWQAQ29sdW1uc1VzZWQAc3RvcmVkAHZpcnR1YWwgdGFibGVzIG1heSBub3QgYmUgYWx0ZXJlZAB2aWV3ICVzIG1heSBub3QgYmUgYWx0ZXJlZAB0YWJsZSAlcyBtYXkgbm90IGJlIGFsdGVyZWQAc2hhcmVkAGluZGV4IGFzc29jaWF0ZWQgd2l0aCBVTklRVUUgb3IgUFJJTUFSWSBLRVkgY29uc3RyYWludCBjYW5ub3QgYmUgZHJvcHBlZAB0YWJsZSAlcyBtYXkgbm90IGJlIGRyb3BwZWQAdmlldyAlcyBpcyBjaXJjdWxhcmx5IGRlZmluZWQAdW5vcGVuZWQAZGF0YWJhc2UgZGlzayBpbWFnZSBpcyBtYWxmb3JtZWQAJXMgY29uc3RyYWludCBmYWlsZWQARk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWQAbGFyZ2UgZmlsZSBzdXBwb3J0IGlzIGRpc2FibGVkAGZ0czN0b2tlbml6ZSBkaXNhYmxlZABkYXRhYmFzZSAlcyBpcyBsb2NrZWQAZGF0YWJhc2UgaXMgbG9ja2VkAGRhdGFiYXNlIHRhYmxlIGlzIGxvY2tlZABhdXRob3JpemF0aW9uIGRlbmllZABhY2Nlc3MgcGVybWlzc2lvbiBkZW5pZWQAdGFibGUgJVMgaGFzICVkIGNvbHVtbnMgYnV0ICVkIHZhbHVlcyB3ZXJlIHN1cHBsaWVkAHRlbXBvcmFyeSB0YWJsZSBuYW1lIG11c3QgYmUgdW5xdWFsaWZpZWQAdGFibGUgJXMgbWF5IG5vdCBiZSBtb2RpZmllZABjb25mbGljdGluZyBPTiBDT05GTElDVCBjbGF1c2VzIHNwZWNpZmllZABubyB0YWJsZXMgc3BlY2lmaWVkAGRhdGFiYXNlIGlzIGFscmVhZHkgYXR0YWNoZWQAZGF0YWJhc2Ugc2NoZW1hIGhhcyBjaGFuZ2VkAGV4Y2x1ZGVkAFBvaW50ZXIgbWFwIHBhZ2UgJWQgaXMgcmVmZXJlbmNlZABSb3dTZXRBZGQARmlsdGVyQWRkAHByZWFkAFJvd1NldFJlYWQAT3BlblJlYWQAJTA0ZAAlMDNkACUwMmQANDBmLTIxYS0yMWQAc3FsaXRlX3N0YXQlZABjb2x1bW4lZABzcWxpdGVfYXV0b2luZGV4XyVzXyVkAHZhcmlhYmxlIG51bWJlciBtdXN0IGJlIGJldHdlZW4gPzEgYW5kID8lZABGYWlsZWQgdG8gcmVhZCBwdHJtYXAga2V5PSVkAHVuYWJsZSB0byBnZXQgdGhlIHBhZ2UuIGVycm9yIGNvZGU9JWQAT2Zmc2V0ICVkIG91dCBvZiByYW5nZSAlZC4uJWQAayglZABVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgcm9vdHBhZ2U9JWQgV0hFUkUgIyVkIEFORCByb290cGFnZT0jJWQAVVBEQVRFICVRLnNxbGl0ZV9tYXN0ZXIgU0VUIHR5cGU9JyVzJywgbmFtZT0lUSwgdGJsX25hbWU9JVEsIHJvb3RwYWdlPSMlZCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgdHlwZT0ndGFibGUnLCBuYW1lPSVRLCB0YmxfbmFtZT0lUSwgcm9vdHBhZ2U9MCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZAB0b28gbWFueSBhdHRhY2hlZCBkYXRhYmFzZXMgLSBtYXggJWQAdG9vIG1hbnkgYXJndW1lbnRzIG9uICVzKCkgLSBtYXggJWQAZXhwZWN0ZWQgJWQgY29sdW1ucyBmb3IgJyVzJyBidXQgZ290ICVkAGF0dGVtcHQgdG8gb3BlbiAiJXMiIGFzIGZpbGUgZGVzY3JpcHRvciAlZABpbnZhbGlkIHBhZ2UgbnVtYmVyICVkAGZhaWxlZCB0byBnZXQgcGFnZSAlZAAybmQgcmVmZXJlbmNlIHRvIHBhZ2UgJWQAZnJlZWxpc3QgbGVhZiBjb3VudCB0b28gYmlnIG9uIHBhZ2UgJWQAYnRyZWVJbml0UGFnZSgpIHJldHVybnMgZXJyb3IgY29kZSAlZAAlcyBpcyAlZCBidXQgc2hvdWxkIGJlICVkACVyICVzIEJZIHRlcm0gb3V0IG9mIHJhbmdlIC0gc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgJWQAc3ViLXNlbGVjdCByZXR1cm5zICVkIGNvbHVtbnMgLSBleHBlY3RlZCAlZABJTiguLi4pIGVsZW1lbnQgaGFzICVkIHRlcm0lcyAtIGV4cGVjdGVkICVkACVzTElTVCBTVUJRVUVSWSAlZABSRVVTRSBMSVNUIFNVQlFVRVJZICVkACVzU0NBTEFSIFNVQlFVRVJZICVkAFJFVVNFIFNVQlFVRVJZICVkAElOREVYICVkAHRvbyBtYW55IEZST00gY2xhdXNlIHRlcm1zLCBtYXg6ICVkAHJ3YwB1dGMAZGVzYwBhc2MAY2hlY2twb2ludF9mdWxsZnN5bmMAZnVsbF9mc3luYwBjaGFyaW5kZXhGdW5jAHNxcnRGdW5jAGNvdEZ1bmMAcmlnaHRGdW5jAGxlZnRGdW5jAGFjb3NGdW5jAGZsb29yRnVuYwBwb3dlckZ1bmMAc3RyZmlsdGVyRnVuYwBwcm9wZXJGdW5jAHBhZHJGdW5jAGV4cEZ1bmMAYXNpbkZ1bmMAc2lnbkZ1bmMAYXRhbkZ1bmMAY2VpbEZ1bmMAcGFkbEZ1bmMAY290aEZ1bmMAYWNvc2hGdW5jAGFzaW5oRnVuYwBhdGFuaEZ1bmMAbG9nRnVuYwByYWQyZGVnRnVuYwByZXZlcnNlRnVuYwBQdXJlRnVuYwBzcXVhcmVGdW5jAGRpZmZlcmVuY2VGdW5jAGRlZzJyYWRGdW5jAHBhZGNGdW5jAGF0bjJGdW5jAGxvZzEwRnVuYwBlbmMAbnVtZXJpYwAxPT1hcmdjAFNxbEV4ZWMAcGFkYwAlLjRjJXMlLjE2YwBzcWxpdGUtc3JjL3NxbGl0ZS1hbWFsZ2FtYXRpb24tMzM5MDMwMC9leHRlbnNpb24tZnVuY3Rpb25zLmMAJXMvZXRpbHFzXyVsbHglYwB1bnJlY29nbml6ZWQgbWF0Y2hpbmZvIHJlcXVlc3Q6ICVjAEdvc3ViAGdsb2IAemVyb2Jsb2IAcmFuZG9tYmxvYgBCbG9iAGlsYgBpdGlsaWIAbWVtZGIAQVRUQUNIICVRIEFTIHZhY3V1bV9kYgByb3RhAGV2aXRhAGxhbm9pdGEAZXRhAFJvd0RhdGEAU29ydGVyRGF0YQBpY25hAHNxbGl0ZV90ZW1wX3NjaGVtYQBzcWxpdGVfc2NoZW1hAHdyaXRhYmxlX3NjaGVtYQB0cnVzdGVkX3NjaGVtYQBjb3JydXB0IHNjaGVtYQBQYXJzZVNjaGVtYQBpbGxhAGV6aWxhAGl0aWxhAG1zaWxhAHNxbGl0ZV8AcHJhZ21hXwBTUUxJVEVfAF9ST1dJRF8AJXMgYXQgbGluZSAlZCBvZiBbJS4xMHNdAGJpbmQgb24gYSBidXN5IHByZXBhcmVkIHN0YXRlbWVudDogWyVzXQBtYWxmb3JtZWQgTUFUQ0ggZXhwcmVzc2lvbjogWyVzXQBbJWRdAFtdAFswXQAkWwBMRUZULU1PU1QgU1VCUVVFUlkAQ09NUE9VTkQgUVVFUlkAQU5ZAGdlbmVyYXRlZCBjb2x1bW5zIGNhbm5vdCBiZSBwYXJ0IG9mIHRoZSBQUklNQVJZIEtFWQBBVVRPSU5DUkVNRU5UIGlzIG9ubHkgYWxsb3dlZCBvbiBhbiBJTlRFR0VSIFBSSU1BUlkgS0VZAGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVkARk9SRUlHTiBLRVkAUklHSFQgUEFSVCBPRiBPUkRFUiBCWQBHUk9VUCBCWQBpaXNYAGlzaVgAQVVUT01BVElDIFBBUlRJQUwgQ09WRVJJTkcgSU5ERVgAQVVUT01BVElDIENPVkVSSU5HIElOREVYAC1taiUwNlg5JTAyWABTQ0FOIENPTlNUQU5UIFJPVwBWSUVXAGpzb25fb2JqZWN0KCkgbGFiZWxzIG11c3QgYmUgVEVYVABGSVJTVABMQVNUAEVYQ0VQVABOT1QAIElOVABJZHhMVABTZWVrTFQAU0VUIERFRkFVTFQATVVURVhfT01JVABDT01NSVQATElNSVQAUklHSFQASWR4R1QAU2Vla0dUAExFRlQARElTVElOQ1QAUkVTVFJJQ1QASU5URVJTRUNUAHRvbyBtYW55IHRlcm1zIGluIGNvbXBvdW5kIFNFTEVDVAB1bmtub3duIGpvaW4gdHlwZTogJVQlcyVUJXMlVAAtJVQAdG9vIG1hbnkgYXJndW1lbnRzIG9uIGZ1bmN0aW9uICVUAHVua25vd24gZGF0YWJhc2UgJVQAZm9yZWlnbiBrZXkgb24gJXMgc2hvdWxkIHJlZmVyZW5jZSBvbmx5IG9uZSBjb2x1bW4gb2YgdGFibGUgJVQAQ1JFQVRFIFZJUlRVQUwgVEFCTEUgJVQAaGV4IGxpdGVyYWwgdG9vIGJpZzogJXMlI1QAbm8gc3VjaCBmdW5jdGlvbjogJSNUAG5vdCBhdXRob3JpemVkIHRvIHVzZSBmdW5jdGlvbjogJSNUAERFRkFVTFRfUkVDVVJTSVZFX1RSSUdHRVJTAElOUwBFTkFCTEVfRlRTM19QQVJFTlRIRVNJUwBESVNBQkxFX0xGUwAlcyAlUwBubyBzdWNoIGluZGV4OiAlUwBjYW5ub3QgY3JlYXRlICVzIHRyaWdnZXIgb24gdmlldzogJVMAbm8gc3VjaCB0cmlnZ2VyOiAlUwBjYW5ub3QgY3JlYXRlIElOU1RFQUQgT0YgdHJpZ2dlciBvbiB0YWJsZTogJVMATUFURVJJQUxJWkUgJSFTAENPLVJPVVRJTkUgJSFTAFVTSU5HIElOREVYICVzIEZPUiBJTi1PUEVSQVRPUgBVU0lORyBST1dJRCBTRUFSQ0ggT04gVEFCTEUgJXMgRk9SIElOLU9QRVJBVE9SAE1VTFRJLUlOREVYIE9SAFNRTElURV9UTVBESVIAQUZURVIASU5URUdFUgBPUkRFUgBORUFSAERFTEVURSBGUk9NICVRLiVzIFdIRVJFICVzPSVRAG5hbWU9JVEgQU5EIHNxbD0lUQBERUxFVEUgRlJPTSAlUS5zcWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0lUQAsIHguJVEAU0VMRUNUICogRlJPTSAlUS4lUQBVUERBVEUgIiV3Ii5zcWxpdGVfc2VxdWVuY2Ugc2V0IG5hbWUgPSAlUSBXSEVSRSBuYW1lID0gJVEAVVBEQVRFICIldyIuc3FsaXRlX21hc3RlciBTRVQgc3FsID0gcHJpbnRmKCclJS4lZHMsICcsc3FsKSB8fCAlUSB8fCBzdWJzdHIoc3FsLDErbGVuZ3RoKHByaW50ZignJSUuJWRzJyxzcWwpKSkgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAlUQBTRVRVUABHUk9VUABSRUNVUlNJVkUgU1RFUABOYU4AbWFsZm9ybWVkIEpTT04ATk8gQUNUSU9OAE9NSVRfTE9BRF9FWFRFTlNJT04AVU5JT04AIExFRlQtSk9JTgBCRUdJTgAsYXJnIEhJRERFTgAsc2NoZW1hIEhJRERFTgBTQ0FOAERFRkFVTFRfQVVUT1ZBQ1VVTQAgTlVNAFJUUklNAENhbm5vdCBhZGQgYSBOT1QgTlVMTCBjb2x1bW4gd2l0aCBkZWZhdWx0IHZhbHVlIE5VTEwATk9UIE5VTEwAU0VUIE5VTEwAU0VMRUNUIDEgRlJPTSAlUS4nJXFfc2VnbWVudHMnIFdIRVJFIGJsb2NraWQ9PyBBTkQgYmxvY2sgSVMgTlVMTABVTklPTiBBTEwAIFJFQUwAQ0hFQ0sAYWJvcnQgZHVlIHRvIFJPTExCQUNLAE1BVENIAFNFQVJDSABVU0lORwBFTkFCTEVfTk9STUFMSVpFACBVTklRVUUAREVMRVRFAFVQREFURQBSRUxFQVNFAE5PQ0FTRQBCRUZPUkUAQ1JFAE5PTkUASWR4TEUAU2Vla0xFAFRBQkxFADE2TEUASWR4R0UAU2Vla0dFACVzIFVTSU5HIFRFTVAgQi1UUkVFAENBU0NBREUAMTZCRQBBTkQAUk9XSUQAT0lEAERFU0MAU0VMRUNUIGlkeCwgc3RhcnRfYmxvY2ssIGxlYXZlc19lbmRfYmxvY2ssIGVuZF9ibG9jaywgcm9vdCBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDAFNFTEVDVCBpZHgsIHN0YXJ0X2Jsb2NrLCBsZWF2ZXNfZW5kX2Jsb2NrLCBlbmRfYmxvY2ssIHJvb3QgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID9PUkRFUiBCWSBsZXZlbCBERVNDLCBpZHggQVNDAFNFTEVDVCBsZXZlbCwgaWR4LCBlbmRfYmxvY2sgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID8gT1JERVIgQlkgbGV2ZWwgREVTQywgaWR4IEFTQwBTRUxFQ1QgaWR4IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWw9PyBPUkRFUiBCWSAxIEFTQwBTWVNURU1fTUFMTE9DAEJMT0IAQkJCAFVQREFURSBPUiBGQUlMICVRLiclcV9zZWdkaXInIFNFVCBsZXZlbD0tMSxpZHg9PyBXSEVSRSBsZXZlbD0/IEFORCBpZHg9PwBVUERBVEUgJVEuJyVxX3NlZ2RpcicgU0VUIGlkeCA9ID8gV0hFUkUgbGV2ZWw9PyBBTkQgaWR4PT8AJXM9PwBTRUxFQ1QgJXMgV0hFUkUgcm93aWQ9PwBTRUxFQ1Qgc2l6ZSBGUk9NICVRLiclcV9kb2NzaXplJyBXSEVSRSBkb2NpZD0/AFNFTEVDVCB2YWx1ZSBGUk9NICVRLiclcV9zdGF0JyBXSEVSRSBpZD0/AD8sPyw/AERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBTRUxFQ1QgbWF4KGxldmVsKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnIFdIRVJFIGJsb2NraWQgQkVUV0VFTiA/IEFORCA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgc3RhcnRfYmxvY2sgPSA/LCByb290ID0gP1dIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBTRUxFQ1QgaWR4LCBzdGFydF9ibG9jaywgbGVhdmVzX2VuZF9ibG9jaywgZW5kX2Jsb2NrLCByb290IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8AU0VMRUNUIGNvdW50KCopIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/AFNFTEVDVCAlcyBXSEVSRSByb3dpZCA9ID8AREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkID0gPwBERUxFVEUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQgPSA/ACwgPwA8ZXhwcj4APGI+ADxiPi4uLjwvYj4ALT4+AC0+AHNlcGFyYXRvcnM9AHRva2VuY2hhcnM9AGF1dG9tZXJnZT0APABJTlNFUlQgSU5UTyAlUS5zcWxpdGVfbWFzdGVyIFZBTFVFUygnaW5kZXgnLCVRLCVRLCMlZCwlUSk7AENSRUFURSBUQUJMRSAlUS4nJXFfc2VnbWVudHMnKGJsb2NraWQgSU5URUdFUiBQUklNQVJZIEtFWSwgYmxvY2sgQkxPQik7AENSRUFURSBUQUJMRSAlUS4nJXFfZG9jc2l6ZScoZG9jaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgc2l6ZSBCTE9CKTsAQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJVEuJyVxX3N0YXQnKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIHZhbHVlIEJMT0IpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ2RpcicobGV2ZWwgSU5URUdFUixpZHggSU5URUdFUixzdGFydF9ibG9jayBJTlRFR0VSLGxlYXZlc19lbmRfYmxvY2sgSU5URUdFUixlbmRfYmxvY2sgSU5URUdFUixyb290IEJMT0IsUFJJTUFSWSBLRVkobGV2ZWwsIGlkeCkpOwBVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgdGJsX25hbWUgPSAlUSwgbmFtZSA9IENBU0UgV0hFTiB0eXBlPSd0YWJsZScgVEhFTiAlUSBXSEVOIG5hbWUgTElLRSAnc3FsaXRlWF9hdXRvaW5kZXglJScgRVNDQVBFICdYJyAgICAgIEFORCB0eXBlPSdpbmRleCcgVEhFTiAnc3FsaXRlX2F1dG9pbmRleF8nIHx8ICVRIHx8IHN1YnN0cihuYW1lLCVkKzE4KSBFTFNFIG5hbWUgRU5EIFdIRVJFIHRibF9uYW1lPSVRIENPTExBVEUgbm9jYXNlIEFORCAodHlwZT0ndGFibGUnIE9SIHR5cGU9J2luZGV4JyBPUiB0eXBlPSd0cmlnZ2VyJyk7AERST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zZWdtZW50cyc7RFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX3NlZ2Rpcic7RFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX2RvY3NpemUnO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zdGF0JzslcyBEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfY29udGVudCc7AEFMVEVSIFRBQkxFICVRLiclcV9jb250ZW50JyAgUkVOQU1FIFRPICclcV9jb250ZW50JzsAQUxURVIgVEFCTEUgJVEuJyVxX3N0YXQnICBSRU5BTUUgVE8gJyVxX3N0YXQnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc2VnbWVudHMnIFJFTkFNRSBUTyAnJXFfc2VnbWVudHMnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc2VnZGlyJyAgIFJFTkFNRSBUTyAnJXFfc2VnZGlyJzsAQUxURVIgVEFCTEUgJVEuJyVxX2RvY3NpemUnICBSRU5BTUUgVE8gJyVxX2RvY3NpemUnOwA6bWVtb3J5OgBmaWxlOgBTdHJpbmc4AHV0ZjgAMjAyMi0wOS0wNSAxMTowMjoyMyA0NjM1ZjRhNjljOGMyYThkZjI0MmIzODRhOTkyYWVhNzEyMjRlMzlhMmNjYWI0MmQ4YzBiMDYwMmYxZTgyNmU4AFVURjgAVVRGLTgATUFYX0ZVTkNUSU9OX0FSRz0xMjcAREVGQVVMVF9TRUNUT1JfU0laRT00MDk2AERFRkFVTFRfUEFHRV9TSVpFPTQwOTYATUFYX1ZBUklBQkxFX05VTUJFUj0zMjc2NgBNQVhfUEFHRV9TSVpFPTY1NTM2AFVURjE2AFVURi0xNgBwNQB0b28gbWFueSByZWZlcmVuY2VzIHRvICIlcyI6IG1heCA2NTUzNQBzcWxpdGVfc3RhdDQAZnRzNABwNABERUZBVUxUX0ZJTEVfRk9STUFUPTQASW50NjQAcHdyaXRlNjQAcHJlYWQ2NABNQUxMT0NfU09GVF9MSU1JVD0xMDI0AHNxbGl0ZV9zdGF0MwBTQVZFUE9JTlQgZnRzMwBST0xMQkFDSyBUTyBmdHMzAFJFTEVBU0UgZnRzMwBwMwBFTkFCTEVfRlRTMwBNQVhfUEFHRV9DT1VOVD0xMDczNzQxODIzAHAyAGF0bjIAYXRhbjIAcmVtb3ZlX2RpYWNyaXRpY3M9MgBERUZBVUxUX1NZTkNIUk9OT1VTPTIAREVGQVVMVF9XQUxfU1lOQ0hST05PVVM9MgBhcmdjPT0zIHx8YXJnYz09MgBNQVhfREVGQVVMVF9QQUdFX1NJWkU9ODE5MgBTRUxFQ1QgdGJsLGlkeCxzdGF0IEZST00gJVEuc3FsaXRlX3N0YXQxAEFnZ1N0ZXAxAHJlbW92ZV9kaWFjcml0aWNzPTEAQVRPTUlDX0lOVFJJTlNJQ1M9MQBURU1QX1NUT1JFPTEAYXJnYz09MQB1bmljb2RlNjEAVVBEQVRFIE9SIEZBSUwgJVEuJyVxX3NlZ2RpcicgU0VUIGxldmVsPT8gV0hFUkUgbGV2ZWw9LTEAREVGQVVMVF9KT1VSTkFMX1NJWkVfTElNSVQ9LTEAU0VMRUNUIGxldmVsLCBjb3VudCgqKSBBUyBjbnQgRlJPTSAlUS4nJXFfc2VnZGlyJyAgIEdST1VQIEJZIGxldmVsIEhBVklORyBjbnQ+PT8gIE9SREVSIEJZIChsZXZlbCAlJSAxMDI0KSBBU0MsIDIgREVTQyBMSU1JVCAxAFNFTEVDVCAoU0VMRUNUIG1heChpZHgpIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/KSArIDEAU0VMRUNUJ0lOU0VSVCBJTlRPIHZhY3V1bV9kYi4nfHxxdW90ZShuYW1lKXx8JyBTRUxFQ1QqRlJPTSIldyIuJ3x8cXVvdGUobmFtZSlGUk9NIHZhY3V1bV9kYi5zcWxpdGVfc2NoZW1hIFdIRVJFIHR5cGU9J3RhYmxlJ0FORCBjb2FsZXNjZShyb290cGFnZSwxKT4wAFNFTEVDVCBzcWwgRlJPTSAiJXciLnNxbGl0ZV9zY2hlbWEgV0hFUkUgdHlwZT0ndGFibGUnQU5EIG5hbWU8PidzcWxpdGVfc2VxdWVuY2UnIEFORCBjb2FsZXNjZShyb290cGFnZSwxKT4wAHJlbW92ZV9kaWFjcml0aWNzPTAATUFYX1dPUktFUl9USFJFQURTPTAAREVGQVVMVF9XT1JLRVJfVEhSRUFEUz0wAE1BWF9NTUFQX1NJWkU9MABERUZBVUxUX01NQVBfU0laRT0wAFRIUkVBRFNBRkU9MAA5MjIzMzcyMDM2ODU0Nzc1ODAAREVGQVVMVF9QQ0FDSEVfSU5JVFNaPTIwAGxvZzEwAE1BWF9BVFRBQ0hFRD0xMABNQVhfQ09NUE9VTkRfU0VMRUNUPTUwMAA/MDAwAE1BWF9DT0xVTU49MjAwMABERUZBVUxUX0NBQ0hFX1NJWkU9LTIwMDAAREVGQVVMVF9XQUxfQVVUT0NIRUNLUE9JTlQ9MTAwMABNQVhfRVhQUl9ERVBUSD0xMDAwAE1BWF9UUklHR0VSX0RFUFRIPTEwMDAATUFYX0xJS0VfUEFUVEVSTl9MRU5HVEg9NTAwMDAATUFYX1ZEQkVfT1A9MjUwMDAwMDAwAE1BWF9MRU5HVEg9MTAwMDAwMDAwMABNQVhfU1FMX0xFTkdUSD0xMDAwMDAwMDAwAHNlY29uZCBhcmd1bWVudCB0byAlI1QoKSBtdXN0IGJlIGEgY29uc3RhbnQgYmV0d2VlbiAwLjAgYW5kIDEuMABDT01QSUxFUj1jbGFuZy0xNi4wLjAAL3Byb2Mvc2VsZi9mZC8AJVEuAE4uACQuAC0tACwAbm9za2lwc2NhbioAdW5vcmRlcmVkKgBzej1bMC05XSoAKHN1YnF1ZXJ5LSV1KQAoam9pbi0ldSkAQ1JFQVRFIFRBQkxFIHgodHlwZSB0ZXh0LG5hbWUgdGV4dCx0YmxfbmFtZSB0ZXh0LHJvb3RwYWdlIGludCxzcWwgdGV4dCkAQ1JFQVRFIFRBQkxFICVRLiVzKCVzKQBhdXRvbWF0aWMgaW5kZXggb24gJXMoJXMpAEFOWSglcykASU5TRVJUIElOVE8gJVEuJyVxX2NvbnRlbnQnIFZBTFVFUyglcykAQ1JFQVRFIFRBQkxFICVRLiclcV9jb250ZW50JyglcykAbWFsZm9ybWVkIGRhdGFiYXNlIHNjaGVtYSAoJXMpAE1FUkdFICglcykAQ1JFQVRFIFRBQkxFICVRLnNxbGl0ZV9zZXF1ZW5jZShuYW1lLHNlcSkAQ1JFQVRFIFRBQkxFIHgoaW5wdXQsIHRva2VuLCBzdGFydCwgZW5kLCBwb3NpdGlvbikAVVBEQVRFICIldyIuc3FsaXRlX21hc3RlciBTRVQgc3FsID0gc3FsaXRlX2Ryb3BfY29sdW1uKCVkLCBzcWwsICVkKSBXSEVSRSAodHlwZT09J3RhYmxlJyBBTkQgdGJsX25hbWU9JVEgQ09MTEFURSBub2Nhc2UpAG1lbWRiKCVwLCVsbGQpAEJhZCBwdHIgbWFwIGVudHJ5IGtleT0lZCBleHBlY3RlZD0oJWQsJWQpIGdvdD0oJWQsJWQpACVzKCVkKQB6ZXJvYmxvYiglZCkAbWF4IHJvb3RwYWdlICglZCkgZGlzYWdyZWVzIHdpdGggaGVhZGVyICglZCkARlRTIGV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpAEV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpAChibG9iKQBVU0UgVEVNUCBCLVRSRUUgRk9SICVzKERJU1RJTkNUKQBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX2NvbHVtbihzcWwsIHR5cGUsIG5hbWUsICVRLCAlUSwgJWQsICVRLCAlZCwgJWQpIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcgIEFORCAodHlwZSAhPSAnaW5kZXgnIE9SIHRibF9uYW1lID0gJVEpAENSRUFURSBUQUJMRSB4KGtleSx2YWx1ZSx0eXBlLGF0b20saWQscGFyZW50LGZ1bGxrZXkscGF0aCxqc29uIEhJRERFTixyb290IEhJRERFTikAQ1JFQVRFIFRBQkxFIHgodGVybSwgY29sLCBkb2N1bWVudHMsIG9jY3VycmVuY2VzLCBsYW5ndWFnZWlkIEhJRERFTikAQ1JFQVRFIFRBQkxFIHgoJXMgJVEgSElEREVOLCBkb2NpZCBISURERU4sICVRIEhJRERFTikAKE5VTEwpACVjPykAU0VMRUNUIE5PVCBFWElTVFMoU0VMRUNUIGRvY2lkIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkIT0/KQBSRVBMQUNFIElOVE8gJVEuJyVxX3NlZ2RpcicgVkFMVUVTKD8sPyw/LD8sPyw/KQBSRVBMQUNFIElOVE8gJVEuJyVxX3N0YXQnIFZBTFVFUyg/LD8pAFJFUExBQ0UgSU5UTyAlUS4nJXFfZG9jc2l6ZScgVkFMVUVTKD8sPykALCVzKD8pAFJFUExBQ0UgSU5UTyAlUS4nJXFfc2VnbWVudHMnKGJsb2NraWQsIGJsb2NrKSBWQUxVRVMoPywgPykAU0VMRUNUIGNvYWxlc2NlKChTRUxFQ1QgbWF4KGJsb2NraWQpIEZST00gJVEuJyVxX3NlZ21lbnRzJykgKyAxLCAxKQBJTlNFUlQgSU5UTyB2YWN1dW1fZGIuc3FsaXRlX3NjaGVtYSBTRUxFQ1QqRlJPTSAiJXciLnNxbGl0ZV9zY2hlbWEgV0hFUkUgdHlwZSBJTigndmlldycsJ3RyaWdnZXInKSBPUih0eXBlPSd0YWJsZSdBTkQgcm9vdHBhZ2U9MCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiBzbmlwcGV0KCkAbWlzdXNlIG9mIGFnZ3JlZ2F0ZTogJXMoKQBtaXN1c2Ugb2YgJXMgZnVuY3Rpb24gJSNUKCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiAlI1QoKQB1bnNhZmUgdXNlIG9mICUjVCgpAEZJTFRFUiBtYXkgbm90IGJlIHVzZWQgd2l0aCBub24tYWdncmVnYXRlICUjVCgpAHVua25vd24gZnVuY3Rpb246ICUjVCgpAG1pc3VzZSBvZiBhZ2dyZWdhdGU6ICUjVCgpAGFtYmlndW91cyByZWZlcmVuY2UgdG8gJXMgaW4gVVNJTkcoKQBVUERBVEUgdGVtcC5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX2NvbHVtbihzcWwsIHR5cGUsIG5hbWUsICVRLCAlUSwgJWQsICVRLCAlZCwgMSkgV0hFUkUgdHlwZSBJTiAoJ3RyaWdnZXInLCAndmlldycpAFVQREFURSBzcWxpdGVfdGVtcF9zY2hlbWEgU0VUIHNxbCA9IHNxbGl0ZV9yZW5hbWVfdGFibGUoJVEsIHR5cGUsIG5hbWUsIHNxbCwgJVEsICVRLCAxKSwgdGJsX25hbWUgPSBDQVNFIFdIRU4gdGJsX25hbWU9JVEgQ09MTEFURSBub2Nhc2UgQU5EICAgc3FsaXRlX3JlbmFtZV90ZXN0KCVRLCBzcWwsIHR5cGUsIG5hbWUsIDEsICdhZnRlciByZW5hbWUnLCAwKSBUSEVOICVRIEVMU0UgdGJsX25hbWUgRU5EIFdIRVJFIHR5cGUgSU4gKCd2aWV3JywgJ3RyaWdnZXInKQAsJXMoeC4nYyVkJXEnKQBJTlNFUlQgSU5UTyAlUS5zcWxpdGVfbWFzdGVyIFZBTFVFUygndHJpZ2dlcicsJVEsJVEsMCwnQ1JFQVRFIFRSSUdHRVIgJXEnKQBTRUxFQ1QgMiAqIHRvdGFsKDEgKyBsZWF2ZXNfZW5kX2Jsb2NrIC0gc3RhcnRfYmxvY2spICAgRlJPTSAoU0VMRUNUICogRlJPTSAlUS4nJXFfc2VnZGlyJyAgICAgICAgIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDIExJTUlUID8gICkACikAQkxPT00gRklMVEVSIE9OICVTICgAU0VMRUNUIHNxbCBGUk9NICIldyIuc3FsaXRlX3NjaGVtYSBXSEVSRSB0eXBlPSdpbmRleCcAREVMRVRFIEZST00gJVEuc3FsaXRlX21hc3RlciBXSEVSRSBuYW1lPSVRIEFORCB0eXBlPSdpbmRleCcAbmFtZT0nJXEnIEFORCB0eXBlPSdpbmRleCcAREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnAERFTEVURSBGUk9NICVRLiclcV9zdGF0JwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInAFNFTEVDVCA/IFVOSU9OIFNFTEVDVCBsZXZlbCAvICgxMDI0ICogPykgRlJPTSAlUS4nJXFfc2VnZGlyJwBTRUxFQ1QgbWF4KCBsZXZlbCAlJSAxMDI0ICkgRlJPTSAlUS4nJXFfc2VnZGlyJwBERUxFVEUgRlJPTSAlUS5zcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9JVEgQU5EIHR5cGU9J3RyaWdnZXInAERFTEVURSBGUk9NICVRLnNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JVEgYW5kIHR5cGUhPSd0cmlnZ2VyJwB0YmxfbmFtZT0nJXEnIEFORCB0eXBlIT0ndHJpZ2dlcicAJyUuKnEnACV6LCAnYyVkJXEnAHR5cGU9J3RyaWdnZXInIEFORCBuYW1lPSclcScALCB4LiclcScAaW5kZXggJyVxJwBKU09OIHBhdGggZXJyb3IgbmVhciAnJXEnAERFTEVURSBGUk9NICVRLiclcV9kb2NzaXplJwBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3RhYmxlKCVRLCB0eXBlLCBuYW1lLCBzcWwsICVRLCAlUSwgJWQpIFdIRVJFICh0eXBlIT0naW5kZXgnIE9SIHRibF9uYW1lPSVRIENPTExBVEUgbm9jYXNlKUFORCAgIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcAU0VMRUNUIENBU0UgV0hFTiBxdWlja19jaGVjayBHTE9CICdDSEVDSyonIFRIRU4gcmFpc2UoQUJPUlQsJ0NIRUNLIGNvbnN0cmFpbnQgZmFpbGVkJykgRUxTRSByYWlzZShBQk9SVCwnTk9UIE5VTEwgY29uc3RyYWludCBmYWlsZWQnKSBFTkQgIEZST00gcHJhZ21hX3F1aWNrX2NoZWNrKCVRLCVRKSBXSEVSRSBxdWlja19jaGVjayBHTE9CICdDSEVDSyonIE9SIHF1aWNrX2NoZWNrIEdMT0IgJ05VTEwqJwBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3F1b3RlZml4KCVRLCBzcWwpV0hFUkUgbmFtZSBOT1QgTElLRSAnc3FsaXRlWF8lJScgRVNDQVBFICdYJyBBTkQgc3FsIE5PVCBMSUtFICdjcmVhdGUgdmlydHVhbCUlJwBVUERBVEUgdGVtcC5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3F1b3RlZml4KCd0ZW1wJywgc3FsKVdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScAc3FsaXRlXF8lACQAU0VMRUNUKkZST00iJXciAFNFTEVDVCByYWlzZShBQk9SVCwlUSkgRlJPTSAiJXciLiIldyIAQU5BTFlaRSAiJXciLiIldyIAZm9yZWlnbiBrZXkgbWlzbWF0Y2ggLSAiJXciIHJlZmVyZW5jaW5nICIldyIAZG91YmxlLXF1b3RlZCBzdHJpbmcgbGl0ZXJhbDogIiV3IgBzeW50YXggZXJyb3IgYWZ0ZXIgY29sdW1uIG5hbWUgIiUuKnMiACVjIiVzIgAoIiVzIgBjYW5ub3QgJXMgJXMgIiVzIgBnZW5lcmF0ZWQgY29sdW1uIGxvb3Agb24gIiVzIgBjYW5ub3QgSU5TRVJUIGludG8gZ2VuZXJhdGVkIGNvbHVtbiAiJXMiAGVycm9yIGluIGdlbmVyYXRlZCBjb2x1bW4gIiVzIgBjYW5ub3QgVVBEQVRFIGdlbmVyYXRlZCBjb2x1bW4gIiVzIgAlcyBpbiAiJXMiAFVQU0VSVCBub3QgaW1wbGVtZW50ZWQgZm9yIHZpcnR1YWwgdGFibGUgIiVzIgB1bnNhZmUgdXNlIG9mIHZpcnR1YWwgdGFibGUgIiVzIgBjYW5ub3QgY3JlYXRlIGEgVEVNUCBpbmRleCBvbiBub24tVEVNUCB0YWJsZSAiJXMiAG5vIHN1Y2ggaW5kZXg6ICIlcyIAdW5rbm93biBkYXRhdHlwZSBmb3IgJXMuJXM6ICIlcyIAY2Fubm90IGRyb3AgJXMgY29sdW1uOiAiJXMiAG5vIHN1Y2ggY29sdW1uOiAiJXMiAG5vIHN1Y2ggY29sdW1uOiAiJVQiAHVucmVjb2duaXplZCB0b2tlbjogIiVUIgB3ZWVrZGF5IABub24tdW5pcXVlIGVudHJ5IGluIGluZGV4IAB3cm9uZyAjIG9mIGVudHJpZXMgaW4gaW5kZXggACBtaXNzaW5nIGZy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KQAAcUQAANYzAAD2MgAA9CoAAHkgAAB2DAAALSUAAEE4AADWMwAAr0EAAFkrAAA1BQAA1jMAAIApAAD2MgAAEEMAAAYuAACAEwAAjSsAAPkFAABaLQAAywsAAHsTAAArJAAA1jMAAOAvAACtKQAA4ysAABA1AADeNwAAFgoAABs4AAArJAAA1jMAADY0AAAmBAAAEi4AAHc5AAB3MgAATQ0AADAvAADoBwAAAwIBAEH0lQILJzsAOwA7ADsAAAA7ADsAOwAAADsAOwA7ADsAAAAAAAAAOwAAAAAAOwBBpJYCCys7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAAAAAAAAAOwA7AEHolgILUTsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwBB8JgCC5QD//3//QD////+/v79+/r/AP3/APv+AP3+//4A/Pr+AAD+/fz8/P39+/78/P/+/fwA/wD+/v39/f7+///+/f4A/v4A//75+/v2AAD9AP7///z+APf8//38//3//v/39vz7//8AAPv9+/4AAP7+APv6+Pr6AP7//f/9+/3//v38/vwAAP3+AP37/f//AP7+AAD9AP4A/vz8+gD+AP7+/Pf7+f37+fgA/vT3+/j+/v8A/f3//f///fv//////fr7/Pr7//v9/f39/f39/f79+/79/fz6+/7+/v3//vv//vv9+/v8+/v8/gD/AAD9/wD99P8AAP37/QD+/P79/gD9+/r7+v7++/X//gD///0A/v3+/f3+9/j6/fz6/////Pr9AP7//f/9+vn6//j//PgA//3//v3//v36//3//fv7+vz7//4A/fr///7//v7+AP7+/v/+/v///P77//7///79AP/+/wD+//z+//////////4A/vz+/v3/AP/////+//8A////////////AP3/AP8AAP///f4A/P4AQZCcAgvWLHAGxQX4BEIBQgEBACcFxgXTBS0HLQctB9cBAAAAANYARQQtBy0HLQctBy0HLQctBy0HLQctBy0HLQctBw8BDwHDBMME2ABYAAEAAQABAAEAAQAoAG8AAgFpAdUBAAJHAm4CtQLcAiMDSgORAzEERQRFBEUERQRFBEUERQRFBEUERQRFBEUERQRFBEUERQRFBEUEWQRFBMAEvQO9A2MGfgbxBi0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HiQC1ALUAtQC1ALUAtQC1AF4ArgFCAEEAcABuARUCFQLkAu0EFQIVAk8ATwAVApwBnAGcAU0AnAF7AHEAcQAWABYAMggyCEgBSAFIAe8A1AHUAdQB1AH3A/cDmQFuAWkEogQVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCyQNtAm0CFQKCAhQDFAPMBMwENgM2A0MA+gQyCDIIMggyCDIIMggyCBsFugO6A0kC2AGAAoMBtwIaAh0CvAIVAhUCFQIVAhUCFQIVAhUCFQIVAt4AFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCmwSbBJsEFQIVAhUCNQIVAhUCFQKUA3gEFQIVAggFFQIVAhUCFQIVAhUCFQIVAn8CMgXRADQENAQ0BDQERALRANEAIQUAA5UDiQKdBCQFlQEkBdYE+QCdBJ0E+QCdBJUB1gRZBdAB6wT0A/QD9ANYBVgFWAVYBbgAuAAuBYgDBwXIBbAGsAZhBmEG3QbdBmEGbwZzBvcG5Ab/Bv8G/wb/BmEGDgeNBnMGcwaNBvcG5AaNBuQGjQZhBg4HigbzBmEGDgcfB2EGDgdhBg4HHwfEBsQGxAYCBzAHMAcfB8QGygbEBgIHxAbEBqUGNAfeBt4GHwdhBv0G/QYPBw8HzgbYBlUHYQbPBs4G3wblBo0GVwdpB2kHegd6B3oHMggyCDIIMggyCDIIMggyCDIIMggyCDIIMggyCDIIzwBHBEsBbAKHAyYDMgTLBZgFyQUqBVoFcgXrBQsFCgYLBhUGOwY+Bj8GmgWtBVIGtgUfBtEFbAZ2BlAGfAYMBg0GkgaVBj0G5gKVB5kHhwf7BpEHlAeOB5AHHQcSBygHkgeSB5YHHgebByAHnQewByQHMQeSBzIHeAeTB5IHIgeBB4IHhQeGBzoHSQecBzMHvge8B6wHUAcjB4gHsgeJB4MHpgc4B10HuQe/B8EHTwdYB8AHlwfCB8MHxAfGB5oHowfHB3cHxQfKB58HyAfMB1EHzgfQB9EH0gfTB9QHzweNB2IH2QfaB3YH1QfcB2QH2wfWB9cH2AfdB54HqgelB94HsQegB98H5wfqB+sH6QfsB+IHeQd7B+8H2wfxB/QH9Qf2B/cH+Af7BwMI/Af9B/4H/wcBCAIIAAiYB48HoQeiB6QHBAgHCAUIGQgaCMEAwQDBABIBEwEUAcEAEgETARQBwQDfANsA4QDOANIA0wDUAMEAEwDbAOkA2ADYANkA2ADZAMEAJwHYANkAHwDBANgA2QDBAOQA1QDmACcAzgDYANkAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAwQATALkAugC7ALwAvQC+AP0AEgETARQBwwDBAMUAwQAFARIBEwEUAf0AzADuAMwAUQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQASARMBFAEGAWYAZwBoAGkAagBrAGwAbQBuAG8AcABxAO8A8ADvAPAA0gDTANQAOgE7AToBOwA8AVYA/ABYAPwAEwA6ATsBAAEBAXEAGQBIACgBigCLAAoBZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAUQAkATsAJAEqAWwAbQBuAG8AcABxAEUAdAB1AHYASABqAGsAwQBvAHAAcQA2ADcAOAA5ADoAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAeAAZANgA2QCRAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAOcAigCLAHQAdQB2AKQAmQATAJsANgA3ADgAOQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQCAAIEALgAvADAAMQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDYAMEAGQA7AMEAEwClAKYAwQBDABgAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEASQDYANkAOwDYANkAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAeQCRADsAwQB0AHUAdgB3ABEBzAB6AHsAfAATABQAhgAWAIgAiQATAIQAfwCAAIEAGAAWABcAdAB1AHYAJADBAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAO8A8AA3ATgB1wBqAGsA8QATADsA2ADZAN8A/ABzAHQAdQB2AJcAeAAaAEcAwQA0ATUBwQCVAIAAOQHYAA0BUQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQD9ANgA2QBkAF8AmQA7AJsABQFqAGsAGQDBAGUAwQDBAOcAcgAZAHQAdQB2AHEAMAF5AMEAzAA7AHcAeAB5AHoAewB8AH0A2ADZAMEA2ADZAIMAigCLAOYAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAmQCaAJsAnACdAO8A8AB0AHUAdgBMAMEAFwATABkAFgD9ABcA/AD9AGwAVwDMAFkABQHGAFwABQF0AHUAdgDBADIBMwHYANkAlgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA7AMEA2ADZABMA7wDwABsBFwBqAGsAbABtAG4AbwBwAHEASQD8AP0AjgA0ATUBigCLAFEAOQGRACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADMBZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAGQF0AHUAdgAdARcAwQAZAHcAOwDBAHoAewB8ADsAfwDLADsAzQATAAwBhAAZABcAFgDBAIoAiwD5AMwA+wBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQATABYAFwA7ABcAGQDvAPAAdAB1AHYAwQALAHQAdQB2AHQAdQB2APwADQEWAMEADwArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQARAY8AwQB2AI8AZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEATAB2ADsA8QB0AHUAdgAwAdgA2QAkAY8APABZAPEAEwBcAMEAwQAXABYANwE4AecAZQAWAI8AZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAEwDBAMEAOwAXAHQAdQB2ADsAyQAVAPEAMAEWAM4AfwCAAIEAwQCAAIEA6wDsADABKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAFgDBANgA2QDBAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAOcAwQDBAMEAdAB1AHYA2ADZAHQAdQB2AOIAUADBABMA6wDsADABFwDTANQA5wDMANgA2QDNAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ABMAwQB7AEwA7wDwAMEA/QDvAPAA7wDwAMEAagBrAMEAWQD8AMEAXAA7APwAjQD8ACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ABwBoQDYANkAwQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQDnAMEAEAC7ALwAvQC+AAcACAAJADUBwwAZAMUAOQETAH8AgACBAAYBzAAWAHUAGADYANkABwFmAGcAaABpAGoAawBsAG0AbgBvAHAAcQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDBAO8A8ADBADsAEwC8AP0AvgBNAOIATwDBAMMA/ADFAMEAEwAtAS4BwQDBAMwA2ADZAOIA2ADZAAoBzACfAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEADADvAPAA6AAqAe4AdQD9AO8A8ADuAAMBBAHBAPwAGwAfAMEAwQCOAMwA/ADBAMEAJwAGAcEAZAAKARYBKgDMAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHUAnwDYANkAeQDYANkAPwDBAMEAwQDvAPAAcwB0AMEAKgFJAO4A7gDnABMA7wDwAPwAFgAYANMA1AAYAMEA2ADZANgA2QD8AJkAmgCbAP0AEAATAJAA1QAMASsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AO4AEwA7AMEAOwArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQAWABcAwQAZAMEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAHAFNAMEATwBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQAeAcEAwQDBAHUAIwF1AOgAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAzAAWABcAQgAZANgA2QAjAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAMEADAFVAGUAwQA1ATUB8AATADkBOQFeANAA0QDBAO8A8ADBAEIA/AATAAwB9ADYANkAwQBKANUA/AChABMABwH+ACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDBANgA2QAFADsAwQATAPQACgALAAwADQAOAGUANQERAJIA/gA5AcEAwQBMAHMA2ADZADUBDAAHAR4AOQEgAC4AVwAuAFkAggDBAFwAKAAWAAcBGwDYANkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKgCWACMB2ADZAHQAdQB2ABMAFADBABYARgAEAXQAwQAYAAgBwQAHAU4APwA9AFEAdAAkAMEABAHBAB0AwQAIAcEAIQCRAMEAOwAwANgA2QBiANgA2QDBAHMAwQBzAMEAOwDYANkA2ADZANgA2QDYANkA/wDYANkARwDBAIMAwQAZAEEA2ADZANgA2QDYANkA0ADRAFUAhQDBAGQAwQBaAIoAiwCKAIsA2ADZANgA2QDBAGQAwQBsAIcAdAB1AGoAawCMAHkA2ADZANgA2QByAKIAdAB1AHYAKwEsAXkA2ADZANgA2QDBAPQAwQCHAPQAwQAAAQEBjAD0AMEA/gDBAMEA/gCZAJoAmwCNAP4AlQCWAAIB2ADZANgA2QCZAJoAmwCcAJ0AAAABAAIA2ADZAAUAcwCeAMEAoAAKAAsADAANAA4AwQA7ABEAfgDBABMAFACBABYAwQAWABYAGADBABcAHgAZACAAEwAUAJAAFgAkANgA2QAoAMEA2ADZAMEAmACBANgA2QDBACQA2ADZAMEAYwDBAMEANQDBAMEAOwAXAMEAGQDYANkAwQDYANkAmABGADsARwA7AHUAwQDYANkATgDYANkAUQDYANkAPgFHAFUAwQCFAMEAwQBaABcAFwAZABkAeAB5AGIAVQDBAGQAwQAXAFoAGQB5AGoAawATANgA2QDYANkAZAByAIMAdAB1AHYAagBrAHkA2ADZANgA2QDBAHIAdQB0AHUAdgCFAMEAeQDBAMEAigCLAMEAFwDBABkAFwAXABkAGQAHAAgA2ADZAMEAwQCZAJoAmwCcAJ0A2ADZAMEAogDYANkA2ADZAJkAmgCbAJwAnQABAAIAwQDBAAUAEwAUADsAFgAKAAsADAANAA4AwQBhABEAwQAXAMEAGQAgASQAwQDyANgA2QDsABcAHgAZACAAEwAUABcAFgAZANgA2QAoANgA2QDYANkAwQA7ANgA2QDBACQAUwBUAJkAmQCbAJsAFwBHABkAFwDBABkAwQDBAMEAdQDBAMEAwQBGAMEAwQA7AMEA/wD/AB8BTgD/APMAUQC/AP8AKQFHAA8BZAAlAfUACwHWAPYAagBrAGwA9gAPAWIA9QAlAXIA3AB0AHUAdgALAQ8BeQAPAeEA2wDlANsAZADbAAMBAwEDAQMBagBrAPkAxAA8ABgBjQDzAHIA+QB0AHUAdgCFAPUAeQDIACkBigCLAJkAmgCbAJwAnQApAcgAJgATABQAlwAWAMgAlgCMACYBJgEWABABKwDqABIAogAOAcgAJADtAJkAmgCbAJwAnQDtABsB7QDtABIAxwCVAPYAEAEOARAByACeAPYA9gDqADsA6gD2AMcAIgE+ACEByADHABYA3QBzAEcAyADIAMcAxwDdANoA2gATABQAQAAWANoA4wAWAOAAfgDgAKUA3QAYADEByABxADgBJADaANwA2gBkABoB2gBbANoAPQFqAGsA3QDjABoBPQFSAJQAcgAJAXQAdQB2ADsAkQB5ABYAFQGeAMgACQEZAMoAkwD6AEcAFwENAJIAwgDCAPkA+AD6AIwA9wD2AAYAwADAAMAALwEvAdUAzwAsAdUAmQCaAJsAnACdANUA1QBkANUA3gDPANYA1gBqAGsABADeAM8AAwAWAKMAcgAPAHQAdQB2ABAAFwB5ABcAiwCXAIIAGQCOABAAGAAUAJAAAQCOAIIAggA9ADUANQAlAJcANQA1AIIAdAAiAAEAjQAFABYAcwChAI0AmQCaAJsAnACdABkARABEAEsAKQBzABgAgwAUABMAfQAWAGAAFgAWAEMAFwAWAEMAOwAYABYAHABDABcAFgAWAJUAFwAXABcAdAAXABkAJQBhAI0AFwAXABYAjwAZAEsAWAAiACIAIgAiAFYASwBdABcAIgAWACIAGQAYACIAGQAXAI4AFwCOACwAFwAXABcACwAXABkAFgAWABYADwAXABcAFgAWABkAAQABAI0AGQAXAIcAPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AY0AjQA/AY0APwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AQBB8MgCC+QgOALQADgCdgBzAOUAOAJ2AHMA5QA4AiIFeQENBZgBMgIyAjICOAKZAXoBIgX8BCkAKQApACkA0AD2BUcARwDLA6MBKQApAOsBLwEXAS8BzAONAUcARwB9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfADcAZkB2QQBAAEAPwICAN0EJgJ2AHMA5QA9AeABkgDgAQwCdgBzAOUAEQIvBaEBCwKOAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AHYAcwDlAEcBegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBHAEcARwBHAG6AboBugEfBngBIQaoBHcBiwQ1AosENQKZAR8GGQIDAeIAvAFlAJEAwQE8AS8C8AB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAF9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACOACYBqARTAcABeAB4AHgAdwB0ALwBfwCoBKkEqgSUALkBuAE4AncAdAC8AXwAfAB8AHwAdQB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHGAXEADQANACICegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBpgE8AS8CqASpBKoElQDIBJkByAR8AHwAfAB8AHoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AdEBVgENBA0EGwQeBH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AP8ECgLeAKgEOAKZAeAAAgKvAFIAUwB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHvAxAAEACoBIUAhQB9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfAB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAERBCICqAR1AagEqQSqBPwAmgWPAfgB9QH0AW8AMAI2AgQAngOeA7EB8wFUAcwBSAFoAYoB1QSoBKkEqgQzAjgCegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBHAEcAXEBLAZHBrkBuAGaAJkBvQFHAEcABgU1AsUEqASpBKoEVQDHBA8BLQIfAgMCGQY4AmIAxgQGAP4E2AGOAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ACYCDQANAAME+wHIBKgEyAQlAm0AbQDeADgC1gSvADgCqwFuAMUAvQE6AjkCrgEQBvkDRQEnAqgEDgEfAXAB/gFrAf0BAQFHAEcAHwJHAEcAZwE8AS8CTQZ6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAH5A/kD+wP8AxsAHAEcAagEqQSqBIYEOAJMBpkBhQO+ACYCZAE1AiYCqQMVAgUChgQEAp0BhgQoAqgEqQSqBDgCIAISBjMAMwDWAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AKgE2gGHAIcAmQEcARwB0gX5AXkAeQB4AHgAeAB3AHQAvAHvAzUCBgLZAB0CGQY8AS8CjgAGABQCfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAEwZ6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHlAagEqQSqBOIBGQHzBL0D/ACoBHUB+AH1AfQBqARUATsCqAQ7ApkBJAHzAb0DbAO/AOABPAEvAoABIgF8AXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AX0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AJkBigFwBKgEZQNkABwBHAGoBKkEqgR1AUUEqASpBKoEqASpBKoENQLHASAAdQHpAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AJkFvwM4AuQAvgN6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAGGBOQAqASdAKgEqQSqBBEGDQANAC0BvQPQBIYEmQCZAYYEdQEvBpgEBQBxASwGrQHWBAMAvQN6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAF9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACZAdAANwKoBAQEqASpBKoEqASEAVQDmwAQBh4BkgFKBEoE6AE4AtEBVgEnBScFEAZ9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACBADgCDQANAHYBegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBLgE4AsUBEAKoBKkEqgQNAA0AqASpBKoEEQXPAfMEmQElBSUFEAb0A8UBxAHIACsBRwBHAPEEegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAmQHjADEEhgQcARwBowE4ARYBFgEdAR0BiwWWAZUBfgGGBDUCOAKGBKwENQJABjUCfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAxQHKBQ0ADQAABnoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AckAOAJiATIGPwICAN0ESANJA0oDGgY9AbwEkgAGAJkB/wD+AP0AzgAvBQkArAQGAUcARwCoAXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AX0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ADgCHAEcATgCvQSZAT4COQHdBF0BEAVgAaMBPQE1ApIA6wENAmsGiwFzAesBLwVGAEYADwVHAEcA8AAtBWgAUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfAB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAFaBBwBHAGsAcAB9QW9BLcBHAEcAdEFSAU3AdoBNQJbBMsD6wHrAdkA7wQ1AgIGOALMA88AOAIDBPAAfwFcBAcCegB6AHoAegB5AHkAeAB4AHgAdwB0ALwB+gNrAEcARwD5Aw0ADQCQAzgC1wU4AhwBHAFhAA4C6wHAAZEDLgUqBSECmQEcARwBNQKXANEA1wXZBQYBwgE3ADcAOAA4ADUC+QP5A/sDuwFMAZkBDwIMACcBfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAWwGZAWAD/gW9BH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AHEEaQbaAWkGcwF9AHIAUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfADXBUkB2gFLAXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AcsAiwU4Ag4FYAPQAb0EtAF6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAEpAnEEagYbAmoGDwAPAHwDegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBOAIqARoCbwSLBRcGGAYzBZkBBgAGAJEE9ASfAUABHAEcAYsF/AE1Ag0CLAHJASsAKwA4An0DDAA1AkoB3gGpAZcBfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ADgCOQA5ACABqASLBfABygGIAYgBhwERAYUBbwQWBlEDkQSXAQYAOAJBAYYE1gEsACwAFQZaBKoB6gAGAEMBAAEcAgABhgSvATgChgRCAREA5wFbBDoAOgB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAFcBNgA4QE7ADsAqASpBKoEbwAwAkQBBADsAMgBDgI4Au0AyAE4ArUBqAAsAqQBjQDfATMCOAIlATgCRwQ4AiUBOAJHBBMCOAJoAwgAPAA8AOsAPQA9ADgCngE4Ap4BOAK9AT4APgAtAC0ALgAuAC8ALwDHADEAMQAtAjgCZwE4AmQA5gEyADIAPwA/AEAAQAAxAp8BFwKaATgCAwQ4AhYCPAEvAjwBLwJBAEEADgAOADgCAwQ4AgACpANoA/oDbQBtAKMD+QNCAEIAgwCDAG4AwwG9AToCOQKgAbEA+QOEAIQAQwBDADgC0wE4AqQD1wFUBRsB4gCjAzsBUwWXATgCywGXAfkD+QP7A+8AlwFWANUARgU0ADQARABEAPkD+QP7A/wDGwAxBpwEvwFFAEUAIAFhAGwABQZqAIgBiAGHAREBhQE4Am8DUQNzAzgCbwAwAtIBBAA4ApgAHgAmADgCbATqAIwBQwFvADACDwIEADMCNQA1AEIBOAKjAKMAOAJRAdQBpACkAE0BMwJMAEwAOAIhAeoFOAIfAOkFOAK9AVIB4wFkADYANgBYAUgASAAoAewAOAQtAr0BbwNQBYYAhgCoAEkASQCNAKEAoQAmBi0CFwI4Aj8BOAJcARgC8QPZAQUBBQF7A3oD6wAXAjgCAwQ4AtsBFgIFAW8BbQBtAAkCiACIAIIAggADBG4AbgG9AToCOQJtAG0A+QOiAKIAnACcADgCbgA4BL0BOgI5ApoBXwH5AzgCYQE8AS8COAJXATgCZADxAWUBAgFkAIIDgwOMAIwAYwEeBfkD+QP7A/wDGwCLAIsAagHDAYkAiQCKAIoA+QP5A/sD/AMbAJwEvwE4AnQBIAFvADAC/QMEAIgBiAGHAREBhQE4AnUEUQM4AjQEOAICAewBMwI4AtMASwBLACsCwgPqAAUBQwFvADACoQMEAHEATQBNAEIBSgBKACoAKgBdBb0BMAAwAIoFMwLOA88DRARDBEQEQwReAy0ClgCiA0IFcQBOBSoCkAX9A/sE8gTmBOwA5QTnBL0BOQY/BTQBFAGoADUBCwCNAIkBNgHoAC0CfQUDBE8BIwF4BdsAUAFtAG0AqAMpAYIF6wBVAd0BbgD2Ab0BOgI5AnEFgQX5A5ABDQVtAd8AzgUDBM0FSwVMBUoFSQVtAG0AzAA8BtAELgIJAdoAbgDNAL0BOgI5ApoBgwH5A/0FswA8AS8C+QP5A/sD/AMbAOYA+wXNBE8AMAJVAAQAogHXACQCUQBUALwAfgWtALUAzQHDASMAzgEzArcA+QP5A/sD/AMbALgA0wW5ALoA7wHyAGIAjgGEBSQAgwXkAVsA1QGRAYYFvQHAAMgF9gDeBeoBWgEVAfgAxADtAf8BLQJeAegE+QD6AJMBIQUgBW8AMAKwAQQAHwUYBV0ASwZzA0oG4ACUAbIBCAIHAbMBKwYzAgMFAgVsAQMEMgEBBQgBSQYdBm0AbQByARcFMwEcBrYBgABuAGIFvQE6AjkCvQEiAvkDCgC6BWkAfQFhBSIAPAJjADgFLQI6AaIEEgIQARIBewHSADcFIwKBAYIBEwE9AuME3gSbAZwB7gWlALIA7wX5A/kD+wP8AxsA7QXsBQMETgCTAKYA3ADdAG0AbQBEAzABpwC+AdQAPgFuAOcAvQE6AjkCkABCBPkDQARGAbQAqQC8BLYATgHuAJMD8QBQBLsAqgCrAKUBVwBYAKcBvQBZAFoArABTBPMATwT0AJ4AEgD1AFkB9wD5A/kD+wP8AxsABQFIBMEAygTpAcIAJQBuAVMD7gH7AMMA+gFcABMA8gFmARQA9wFxA2kBXgB+AzEBnwABAicAXwCWBKAAIATGA3cEYACuAHYE4QAYARoBxgDAA3EAjASIBAQBFQAWABcAigSQBI8EfAQYACEAGQDKAB4CGgBkAC8EZgAhBGcABwAfBCMEWQQkBFgECgELARwAKACGAf4DXwNwAB0ANAKeBJ0EDAGwAI8AnQPaBNoE2gTaBNoE2gTaBNoE2gTaBNoE2gTaBNoEDQFCBtoEQQYAQeDpAguBCW8GbwZvBsMF2ARHBdgE2ATYBMMFwwXDBdgEZQVlBfgF+QTYBNgE2ATYBNgE2ATYBNgE2ATYBMIF2ATYBNgE2AQbBhsG2ATYBNgE2ATYBNgE2ATYBG4F2AR1BdgE2ATYBNgE2ATEBcUF2ATYBNgE9wX5BdQFfAV7BXoFeQXmBVkFcwVsBXAFvgW/Bb0FwQXFBcQF2ARvBZ4FrgWdBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEpgWtBawFqwW0BaoFpwWgBZ8FoQWiBdgE2ATwBNgE2ATtBCMF2ATYBNgE2ATYBAsGCgbYBKMF2AT5BJgFlwWxBaQFsAWvBf8FPwY+BtUF2ATYBNgE2ATYBNgEGwbYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEWwUbBhsG2AT5BBsGGwZcBVwF9QT1BF8F2AQGBj4FPgU+BT4FRwU+BdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBPwF+gXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ARDBdgE2ATYBNgE2ATYBNgE2ATYBNgE2AQ4BtgE4QUxBUMFQwVDBUMFRQUyBTAFPQX6BN8EZwZ/BXQFRAV0BWQGcgV/BX8FcgV/BUQFZAYKBU8GBQVlBWUFZQVbBVsFWwVbBV8FXwXABUQFPQXYBGcGZwZNBU0FZgZmBk0F1QVXBogFJgUsBSwFLAUsBU0F6gRyBVcGVwZyBYgFJgVyBSYFcgVNBeoE5QVhBk0F6gTLBU0F6gRNBeoEywUkBSQFJAUZBdgE2ATLBSQFCgUkBRkFJAUkBS0G2ATPBc8FywVNBSUGJQZoBWgFbQVfBcYFTQXYBG0FawVpBXIFHAU7BjsGNwY3BjcGbAZsBgYGSAb5BPkE+QT5BEgGDAUMBfoE+gT5BEgG2ATYBNgE2ATYBNgEQwbYBAEG1gVRBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2AQMBtgE2ATYBNgE2ATYBNgE2ATYBNgEjQXYBNsEAwbYBNgE2ATYBNgE2ATYBNgEdgV3BVIF2ATYBNgE2ATYBNgE2ASFBdgE2ATYBIAF2ATYBNgE2ATYBNgE2ATYBGMG2ATYBNgE2ATYBNgE5AXjBdgE2ARPBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgECAXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEagXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEKgZgBdgE2ATYBNgEWgbYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEUwY0BY8F2ASOBZIF7gTYBOQE2ATYBAkAQYDzAgvnBr0AvQC8AL4AvwC/AL8AvwC+AL4AvgC+AL4AwwDFAMcAxwDGAMYAxADEAMsAywDNAM0AzgDQANAA0ADRANUA1gDXANcA1wDXANcA1wDXANcA1wDXANcA1wDXAOAA4ADcANwA3gDeAOEA4QDhAOEA4gDiAOIA4gDiAN8A3wDjAOMA4wDKAOUA5gDmAOYA5gDmAOkA2gDaAOoA6gDrAOsAvgDtAO0AvgC+AL4AzADMAMwA7wDyAPIA8gDwAPAA/AD8APMA8wDzAP4A9AD0APQA/wD/APUA9QABAQEBAAEAAQABAAEAAcgAyADuAO4ABgEGAQYBBgECAQIBAgECAQMBAwEDAQgBBAEEAfkA+QDnAOcA2wDbANsACQEJAQkB9wD3APgA+AD6APoA+gD6AL4A9gD2AAsBCwELAQsBvgAMAQwBDAEMAb4AvgAPAQ8BDwEPAQ8BDwEQAQ0BDQEOAQ4BBwEHAdkA2QDZANkA2QDYANgA2ADZANkA2QDZANkA2QDZANgA2QDZANkA2QDZANkA2QDZANkAEgHZANkA2QDZANkA2QDZANkA2QDZANkA2QATARMB2QAUARQB2QDZANkA2QDZANkAFwEXARgBGAEWARYBBQH9AP0AFQEVAb4AGQEZAd0A3QDoAOgAGgEaAb4AvgC+ABsBGwG+AL4AvgC+AL4A0wDUAL4AHQEfAR8BHwEgASABIAEiASIBHgEeASQBJQElASMBIwEjASMB2QDZAOwA7ADsAL4AvgC+ACcBJwG+AL4AvgC+AL4AvgC+ACgBvgC+AL4AKgEsAS0BLQEuAQoBCgExATEBMQEwAfEA8QAyATIBMwE0ATQBNAE0ATQBNAE1ATUBNQE5ATsBOwE8ATwBOgE6AT0BPQE+AT4BPgH7ABEBEQERATgBOAE3AbkAugC6ALsAuwC7AMAAwADAAMIAwgC+AMsAyQDJAMEAwQDBANAA0QDSANIAzwDP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IGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZAAAAAAApQJbAPABtQWMBSUBgwYdA5QE/wDHAzEDCwa8AY8BfwPKBCsA2gavAEIDTgPcAQ4EFQChBg0BlAILAjgGZAK8Av8CXQPnBAsHzwLLBe8F2wXhAh4GRQKFAIICbANvBPEA8wMYBdkA2gNMBlQCewGdA70EAABRABUCuwCzA20A/wGFBC8F+QQ4AGUBRgGfALcGqAFzAlMBAEGY7wMLDCEEAAAAAAAAAAAvAgBBuO8DCwY1BEcEVgQAQc7vAwsCoAQAQeLvAwuIAUYFYAVuBWEGAADPAQAAAAAAAAAAyQbpBvkGAAAAAAL/AARkACAAAAT//wYAAQABAAEA//8B/wH//////wH/Af8B/wH/Af8B/wH/Af//////Cv8gAP//A/8B/wT/HgAAAQX//////2MAAAhjAOgDAgAAAP//////AAAAAf8B//////////////8AQfnwAwsBBABBhvEDC0QB/wH//////wABIAAEAIAAAAj//wH/Af////////8B/wb/B/8I/wn//////7wCvAIBAP//AQABAP//AAD//////////wBB2vEDCwEUAEH68QMLHv//AQAK////////////Af8B/wAAAAAAAAH/Af8B/wBBqvIDC0gB/wAAAAAAAAH/Af8BAAAAAQAAAAH//////wAAAAAB////AAAAAP////////////8oAAr//////wEACv////8A//////////8AQdbzAwscAf8B////AQD//////////////////wr//////wBBgPQDCx8BAAAAAQAAAQABAAD+//9/AAAAALAEAAAoAAAAAAABAEHA9QMLARQAQcz1AwsB+gBB+/UDCwFAAEGM9gMLCP7//3////9/AEGs9gMLKQcAAAADAAAANAAAAAACAAAAAAAAZwUAANR0AABzAAAAdAAAAHUAAAB2AEHo9gMLRXcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAAB+AAAAAwAAADQAAAAAAgAAAAAAABczAADYdAAAcwAAAHQAAAB1AAAAdgBBwPcDC0V3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAAMAAAA0AAAAAAIAAAAAAAAANAAA3HQAAHMAAAB0AAAAdQAAAHYAQZj4AwtFdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAADAAAANAAAAAACAAAAAAAAgysAANR0AABzAAAAdAAAAHUAAAB2AEHw+AMLJHcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAAB+AAAAAAAAQABBoPkDC27SKQAAlAAAAAAAAADdMQAAlQAAAAAAAAArEAAAlgAAAAAAAAD6NgAAlwAAAAAAAADYDAAAmAAAAAAAAADCDAAAmQAAAAAAAAC3MAAAmgAAAAAAAADSKgAAmwAAAAAAAABVPQAA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"); - -// src/utils/db/sqljs.js -var import_sql = __toESM(require_sql_wasm()); -var loadSQL = async () => { - const sql = await (0, import_sql.default)({ - wasmBinary: sql_wasm_default - }); - return sql; +// src/components/ContextView/MDBFileViewer.tsx +var import_obsidian34 = require("obsidian"); +var MDB_FILE_VIEWER_TYPE = "make-mdb-viewer"; +var MDBFileViewer = class extends import_obsidian34.FileView { + constructor(leaf, plugin) { + super(leaf); + this.navigation = true; + this.plugin = plugin; + } + getViewType() { + return MDB_FILE_VIEWER_TYPE; + } + getDisplayText() { + var _a2; + return (_a2 = this.file) == null ? void 0 : _a2.name; + } + async onClose() { + this.destroy(); + } + destroy() { + if (this.root) + this.root.unmount(); + } + async onOpen() { + this.destroy(); + } + async setState(state, result) { + this.file = getAbstractFileAtPath(app, state.file); + this.constructInlineContext(); + await super.setState(state, result); + this.leaf.tabHeaderInnerTitleEl.innerText = this.file.name; + this.leaf.view.titleEl = this.file.name; + const headerEl = this.leaf.view.headerEl; + if (headerEl) { + headerEl.querySelector(".view-header-title").innerText = this.file.name; + } + return; + } + getState() { + let state = super.getState(); + state.file = this.file.path; + return state; + } + constructInlineContext() { + const mdbTypeByDBPath = (dbpath) => { + var _a2; + return dbpath.endsWith(((_a2 = this.plugin) == null ? void 0 : _a2.settings.folderContextFile) + ".mdb") ? "folder" : "tag"; + }; + const type = mdbTypeByDBPath(this.file.path); + const folder = type == "tag" ? null : getFolderFromPath(app, this.file.path); + const tag = type == "tag" ? filePathToString(this.file.path).replace(".mdb", "") : null; + this.destroy(); + this.root = createRoot(this.contentEl); + this.root.render( + /* @__PURE__ */ bn.createElement("div", { + className: "mk-folder-view" + }, tag ? /* @__PURE__ */ bn.createElement(TagContextViewComponent, { + type: "tag", + tag, + plugin: this.plugin + }) : /* @__PURE__ */ bn.createElement(FolderContextViewComponent, { + type: "folder", + folder, + plugin: this.plugin + })) + ); + } }; // src/components/FileContextView/FileContextView.tsx -var import_obsidian35 = require("obsidian"); +var import_obsidian36 = require("obsidian"); // src/components/FileContextView/FileContextList.tsx -var import_obsidian34 = require("obsidian"); -var import_lodash6 = __toESM(require_lodash()); +var import_lodash5 = __toESM(require_lodash()); +var import_obsidian35 = require("obsidian"); var FileContextList = (props2) => { const { path } = props2; - const { tableData, newColumn, tagContexts, contextTable, folderPath, isFolderContext, setContextTable, saveDB: saveDB2, saveContextDB, dbPath } = q2(MDBContext); - const fileContext = F( - () => { - const td = tableData ? { - "folder": { - cols: tableData.cols.filter((f4) => f4.name != "File" && f4.type != "fileprop" && f4.hidden != "true" && f4.type != "preview"), - data: tableData.rows.find((r3) => r3.File == path), - dataIndex: tableData.rows.findIndex((r3) => r3.File == path) - } - } : {}; - const tags = tagContexts.reduce((p3, c4) => contextTable[c4] ? { + const { + tableData, + newColumn, + tagContexts, + contextTable, + folderPath, + isFolderContext, + setContextTable, + saveDB: saveDB2, + saveContextDB, + dbPath + } = q2(MDBContext); + const fileContext = F(() => { + const td = tableData ? { + folder: { + cols: tableData.cols.filter( + (f4) => f4.name != "File" && f4.type != "fileprop" && f4.hidden != "true" && f4.type != "preview" + ), + data: tableData.rows.find((r3) => r3.File == path), + dataIndex: tableData.rows.findIndex((r3) => r3.File == path) + } + } : {}; + const tags = tagContexts.reduce( + (p3, c4) => contextTable[c4] ? { ...p3, [c4]: { - cols: contextTable[c4].cols.filter((f4) => f4.name != "File" && f4.type != "fileprop" && f4.hidden != "true" && f4.type != "preview"), - data: contextTable[c4].rows.find((r3, index) => index == parseInt(props2.path)), - dataIndex: contextTable[c4].rows.findIndex((r3) => r3.File == path) + cols: contextTable[c4].cols.filter( + (f4) => f4.name != "File" && f4.type != "fileprop" && f4.hidden != "true" && f4.type != "preview" + ), + data: contextTable[c4].rows.find( + (r3, index) => index == parseInt(props2.path) + ), + dataIndex: contextTable[c4].rows.findIndex( + (r3) => r3.File == path + ) } - } : p3, {}); - return { - ...tags, - ...td - }; - }, - [tableData, contextTable, tagContexts, path] - ); + } : p3, + {} + ); + return { + ...tags, + ...td + }; + }, [tableData, contextTable, tagContexts, path]); const showNewMenu = (e4) => { const offset = e4.target.getBoundingClientRect(); - const files = [path].map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4 instanceof import_obsidian34.TFile); - const types = guestimateTypes(files.map((f4) => f4.path), false); + const files = [path].map((f4) => getAbstractFileAtPath(app, f4)).filter((f4) => f4 instanceof import_obsidian35.TFile); + const types = guestimateTypes( + files.map((f4) => f4.path), + false + ); const fmFields = files.reduce((p3, c4) => { const fm = frontMatterForFile(c4); const fmKeys = uniqCaseInsensitive(frontMatterKeys(fm)); - return (0, import_lodash6.uniq)([...p3, ...fmKeys]); + return (0, import_lodash5.uniq)([...p3, ...fmKeys]); }, []).filter((f4) => !tableData.cols.some((g4) => g4.name == f4)); - const allTypes = [...fmFields.map((f4) => ({ - name: f4, - description: "Sync Frontmatter Field", - value: "fm." + f4 + "." + yamlTypeToMDBType(types[f4]) - })), ...fieldTypes.filter((f4) => f4.restricted != true).map((f4) => ({ - name: f4.label, - description: "New Field", - value: "type." + f4.type - }))]; + const allTypes = [ + ...fmFields.map((f4) => ({ + name: f4, + description: "Sync Frontmatter Field", + value: "fm." + f4 + "." + yamlTypeToMDBType(types[f4]) + })), + ...fieldTypes.filter((f4) => f4.restricted != true).map((f4) => ({ + name: f4.label, + description: "New Field", + value: "type." + f4.type + })) + ]; const uniqueNameFromString2 = (name, cols) => { let newName = name; if (cols.includes(newName)) { @@ -43927,54 +45655,71 @@ var FileContextList = (props2) => { } return newName; }; - const saveOptions = (_5, values) => { + const saveOptions = (_4, values) => { const newValue = values[0]; const newType = newValue.split("."); if (newType[0] == "fm") { - newColumn({ name: uniqueNameFromString2(newType[1], tableData.cols.map((f4) => f4.name)), schemaId: tableData.schema.id, table: "", type: newType[2] }); + newColumn({ + name: uniqueNameFromString2( + newType[1], + tableData.cols.map((f4) => f4.name) + ), + schemaId: tableData.schema.id, + table: "", + type: newType[2] + }); } else if (newType[0] == "type") { - newColumn({ name: uniqueNameFromString2(newType[1], tableData.cols.map((f4) => f4.name)), schemaId: tableData.schema.id, table: "", type: newType[1] }); + newColumn({ + name: uniqueNameFromString2( + newType[1], + tableData.cols.map((f4) => f4.name) + ), + schemaId: tableData.schema.id, + table: "", + type: newType[1] + }); } }; - showSelectMenu({ x: offset.left, y: offset.top + 30 }, { - multi: false, - editable: false, - value: [], - saveOptions, - placeholder: "Select Field", - searchable: true, - options: allTypes, - showAll: true - }); + showSelectMenu( + { x: offset.left, y: offset.top + 30 }, + { + multi: false, + editable: false, + value: [], + saveOptions, + placeholder: "Select Field", + searchable: true, + options: allTypes, + showAll: true + } + ); }; return /* @__PURE__ */ bn.createElement(bn.Fragment, null, fileContext.folder && fileContext.folder.data && /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-section" }, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-title" - }, isFolderContext ? folderPathToString(folderPath) : folderPath), fileContext.folder.cols.map( - (f4, i4) => /* @__PURE__ */ bn.createElement("div", { - key: i4, - className: "mk-file-context-row" - }, /* @__PURE__ */ bn.createElement("div", { - className: "mk-file-context-field" - }, f4.name), /* @__PURE__ */ bn.createElement("div", { - className: "mk-file-context-value" - }, /* @__PURE__ */ bn.createElement(DataTypeView, { - plugin: props2.plugin, - initialValue: fileContext.folder.data[f4.name], - index: fileContext.folder.dataIndex, - file: fileContext.folder.data["File"], - column: { ...f4, table: "" }, - editable: true - }))) - ), /* @__PURE__ */ bn.createElement("div", { + }, isFolderContext ? folderPathToString(folderPath) : folderPath), fileContext.folder.cols.map((f4, i4) => /* @__PURE__ */ bn.createElement("div", { + key: i4, + className: "mk-file-context-row" + }, /* @__PURE__ */ bn.createElement("div", { + className: "mk-file-context-field" + }, f4.name), /* @__PURE__ */ bn.createElement("div", { + className: "mk-file-context-value" + }, /* @__PURE__ */ bn.createElement(DataTypeView, { + plugin: props2.plugin, + initialValue: fileContext.folder.data[f4.name], + index: fileContext.folder.dataIndex, + file: fileContext.folder.data["File"], + column: { ...f4, table: "" }, + editable: true + })))), /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-field-new", onClick: (e4) => showNewMenu(e4) }, "+ New Field"))); }; // src/components/FileContextView/FileContextView.tsx -var import_obsidian36 = require("obsidian"); +var import_obsidian37 = require("obsidian"); // src/components/FileContextView/Backlinks.tsx var Backlinks = (props2) => { @@ -43982,7 +45727,11 @@ var Backlinks = (props2) => { h2(() => { if (!props2.path) return; - setBacklinks(Object.keys(app.metadataCache.resolvedLinks).filter((f4) => props2.path in app.metadataCache.resolvedLinks[f4])); + setBacklinks( + Object.keys(app.metadataCache.resolvedLinks).filter( + (f4) => props2.path in app.metadataCache.resolvedLinks[f4] + ) + ); }, [props2.path]); return /* @__PURE__ */ bn.createElement("div", null, backlinks.map((f4) => /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-title" @@ -43997,7 +45746,7 @@ var Backlinks = (props2) => { var FILE_CONTEXT_VIEW_TYPE = "make-context-view"; var ICON2 = "component"; var VIEW_DISPLAY_TEXT2 = "File Context"; -var FileContextLeafView = class extends import_obsidian36.ItemView { +var FileContextLeafView = class extends import_obsidian37.ItemView { constructor(leaf, plugin) { super(leaf); this.navigation = false; @@ -44041,7 +45790,7 @@ var FileContextLeafView = class extends import_obsidian36.ItemView { } }; var allTagsForFile = async (plugin, file) => { - var _a2, _b2, _c2, _d2, _e2, _f; + var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; let rt = []; const dbPath = folderContextFromFolder(plugin, file == null ? void 0 : file.parent.path); const dbFileExists = getAbstractFileAtPath(app, dbPath); @@ -44051,25 +45800,34 @@ var allTagsForFile = async (plugin, file) => { rt.push(...folderDB.schema.def.split("&")); } } - if (file instanceof import_obsidian35.TFile) { - const fCache = app.metadataCache.getFileCache(file); + if (file instanceof import_obsidian36.TFile) { + const fCache = app.metadataCache.getCache(file.path); if (fCache && fCache.tags) rt.push(...(_b2 = (_a2 = fCache.tags) == null ? void 0 : _a2.map((f4) => f4.tag)) != null ? _b2 : []); if (fCache && ((_c2 = fCache.frontmatter) == null ? void 0 : _c2.tags)) - rt.push(...(typeof ((_d2 = fCache.frontmatter) == null ? void 0 : _d2.tags) === "string" ? [fCache.frontmatter.tags] : Array.isArray((_e2 = fCache.frontmatter) == null ? void 0 : _e2.tags) ? (_f = fCache.frontmatter) == null ? void 0 : _f.tags : []).filter((f4) => typeof f4 === "string").map((f4) => "#" + f4)); + rt.push( + ...(typeof ((_d2 = fCache.frontmatter) == null ? void 0 : _d2.tags) === "string" ? [fCache.frontmatter.tags] : Array.isArray((_e2 = fCache.frontmatter) == null ? void 0 : _e2.tags) ? (_f = fCache.frontmatter) == null ? void 0 : _f.tags : []).filter((f4) => typeof f4 === "string").map((f4) => "#" + f4) + ); + if (fCache && ((_g = fCache.frontmatter) == null ? void 0 : _g.tag)) + rt.push( + ...(typeof ((_h = fCache.frontmatter) == null ? void 0 : _h.tag) === "string" ? [fCache.frontmatter.tag] : Array.isArray((_i = fCache.frontmatter) == null ? void 0 : _i.tag) ? (_j = fCache.frontmatter) == null ? void 0 : _j.tag : []).filter((f4) => typeof f4 === "string").map((f4) => "#" + f4) + ); } return uniq(rt); }; var FileContextView = (props2) => { const [activeFilePath, setActiveFilePath] = p2(null); const [selectedFilePath, setSelectedFilePath] = p2(null); - const path = F(() => selectedFilePath != null ? selectedFilePath : activeFilePath, [selectedFilePath, activeFilePath]); + const path = F( + () => selectedFilePath != null ? selectedFilePath : activeFilePath, + [selectedFilePath, activeFilePath] + ); const file = F(() => { const afile = getAbstractFileAtPath(app, path); return afile; }, [path]); const folderNoteFile = F(() => { - if (file instanceof import_obsidian36.TFolder) { + if (file instanceof import_obsidian37.TFolder) { const afile2 = getAbstractFileAtPath(app, path + ".md"); return afile2; } @@ -44078,7 +45836,7 @@ var FileContextView = (props2) => { const folderPath = file == null ? void 0 : file.parent.path; const dbPath = folderContextFromFolder(props2.plugin, folderPath); const [tags, setTags] = p2([]); - const [expandedSections, setExpandedSections] = p2({ "context": true }); + const [expandedSections, setExpandedSections] = p2({ context: true }); h2(() => { allTagsForFile(props2.plugin, file).then((t4) => setTags(t4)); }, [file]); @@ -44096,7 +45854,10 @@ var FileContextView = (props2) => { props2.plugin.activeFileChange(); return () => { window.removeEventListener(eventTypes.activeFileChange, changeActiveFile); - window.removeEventListener(eventTypes.selectedFileChange, changeSelectedFile); + window.removeEventListener( + eventTypes.selectedFileChange, + changeSelectedFile + ); }; }, []); return file ? /* @__PURE__ */ bn.createElement("div", { @@ -44135,7 +45896,10 @@ var FileContextView = (props2) => { path: file.path })))), folderNoteFile && /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement("div", { onClick: (e4) => { - setExpandedSections((f4) => ({ ...f4, backlinks: !f4["backlinks"] })); + setExpandedSections((f4) => ({ + ...f4, + backlinks: !f4["backlinks"] + })); e4.stopPropagation(); }, className: "mk-section-title" @@ -44143,7 +45907,9 @@ var FileContextView = (props2) => { className: "mk-tree-text" }, "Backlinks"), /* @__PURE__ */ bn.createElement("button", { className: `mk-collapse mk-inline-button ${!expandedSections["backlinks"] ? "mk-collapsed" : ""}`, - dangerouslySetInnerHTML: { __html: uiIconSet["mk-ui-collapse-sm"] } + dangerouslySetInnerHTML: { + __html: uiIconSet["mk-ui-collapse-sm"] + } })), expandedSections["backlinks"] && /* @__PURE__ */ bn.createElement("div", { className: "mk-file-context-component" }, /* @__PURE__ */ bn.createElement(Backlinks, { @@ -44152,181 +45918,144 @@ var FileContextView = (props2) => { })))) : /* @__PURE__ */ bn.createElement(bn.Fragment, null); }; -// src/components/Blink/Blink.tsx -var import_obsidian37 = require("obsidian"); +// wasm-binary:/Users/cen/Documents/GitHub/make-md/src/utils/db/sqljs/sql-wasm.wasm +var sql_wasm_exports = {}; +__export(sql_wasm_exports, { + default: () => sql_wasm_default +}); +var sql_wasm_default = __toBinary("AGFzbQEAAAABrQRHYAJ/fwF/YAF/AX9gA39/fwBgAX8AYAN/f38Bf2ACf38AYAR/f39/AX9gBX9/f39/AX9gBH9/f38AYAZ/f39/f38Bf2AFf39/f38AYAJ/fgF/YAR/f39+AX9gBn9/f39/fwBgB39/f39/f38Bf2AAAX9gAXwBfGABfgF/YAJ/fgBgA39/fgF/YAJ/fwF+YAAAYAF/AX5gBH9+f38Bf2AHf39/f39/fwBgCX9/f39/f39/fwF/YAh/f39/f39/fwF/YAN/fn8Bf2ACf3wAYAV/fn5+fgBgCX9/f39/f39/fwBgBX9/f39+AGAFf39+f38Bf2ADf39+AGADf35/AGADf35+AX9gAAF8YAF/AXxgBH9+fn8AYAh/f39/f39/fwBgBH5+fn4Bf2ALf39/f39/f39/f38AYAN8fH8BfGACfHwBfGAEf39+fwBgBn9/f35/fwF/YAF+AX5gBX9+f39/AX9gAn9+AX5gBn9/f39/fgF/YAR/f39/AX5gAn5+AXxgCH9+fn9/f39/AX9gAn58AX9gC39/f39/f39/f39/AX9gAnx/AXxgAXwBf2ACfH8Bf2AHf39/f35/fwF+YAl/fn9+fn5+f38Bf2AEf39/fgBgAnx+AX9gCn9/f39/f39/f38Bf2ADf398AX9gB39/f39/fHwAYAF8AX5gBX9+fn5/AX9gCH9/fn5+f39/AX9gBH9+f38AYA1/f39/f39/f39/f39/AGACf38BfALNASIBYQFhAAgBYQFiAAQBYQFjAAEBYQFkACQBYQFlACQBYQFmAAEBYQFnAAQBYQFoAAABYQFpAAABYQFqAAUBYQFrAAcBYQFsAAQBYQFtAAABYQFuAAIBYQFvAAYBYQFwAAQBYQFxAA8BYQFyAAYBYQFzAAEBYQF0AAYBYQF1AAYBYQF2AAYBYQF3AAkBYQF4AAkBYQF5AAQBYQF6AAABYQFBAAABYQFCAAABYQFDAAEBYQFEAAYBYQFFAAABYQFGAAABYQFHAAABYQFIAAYDkw+RDwYDBwQCBQQBBQEEAQUBAAEBDgUGBAkFBQEEBAECCAULAQECBQEABAMAEQMAAAMlBAYABgALARMDAAAcAQUWAQcDEgIABQMGAQAGAgILCAQEAQAABBEBCAYMAAQAAgEFBQwFAQQAAAIKAwQCCwEAEgUBAgMABAAB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CEUgAXINACAFKAKQAiAFIAUoAhAgA2ooAgAgBCAIEQYAIQELIAJBAWohAgwBCwsgACABNgIkQQFB5QAgARshAgwBCyABIQIgACwAlAFBAE4NACAAEOMGIQILIAUgAjYCQCAAKAIAIAAoAiQQogFBB0cNACAAQQc2AiQgAkEHIAAsAJQBQQBOGyECCyAFKAJIIAJxCyIBQRFHDQEgFUEyRgRAQREPCyAAKAIgIQUjAEEQayIDJAAgABDnCSEBAkAgACgCACICIAFBfyAALQCUASAAIANBDGpBABDJBCIIBEAgCEEHRw0BIAIQTwwBCyADKAIMIQQjAEHwAWsiASQAIAEgBEHwARAlIQkgBCAAQfABECUhAiAAIAlB8AEQJSEBIAIoAgghByACIAEoAgg2AgggASAHNgIIIAIoAgQhByACIAEoAgQ2AgQgASAHNgIEIAIoAsQBIQcgAiABKALEATYCxAEgASAHNgLEASACKALIASEHIAIgASgCyAE2AsgBIAEgBzYCyAEgASACKALgATYC4AEgASACLQCUAToAlAEgAUGgAWogAkGgAWpBJBAlGiABIAEoArQBQQFqNgK0ASAJQfABaiQAQQAhAQNAIAQuARAgAUoEQCABQShsIgIgACgCZGogBCgCZCACahDdCSABQQFqIQEMAQsLIARBADYCJCAEEJgCGgsgA0EQaiQAAkAgCARAIAwoAqACECshASAMIAAoAnwQJyAMLQBXDQEgACAMIAEQWjYCfCAAIAwgCBCiASIANgIkIAAPCyAVQQFqIRUgABA6GiAFQQBIDQEgAEH+AToAkwEMAQsLQQchASAAQQc2AiQgAEEANgJ8CyABC2MBAn8gACgCECIDIAJqIgQgACgCCE8EQCAAIAIQtwYiAkEASgRAIAAoAgQgACgCEGogASACECUaIAAgACgCECACajYCEAsPCyACBEAgACAENgIQIAAoAgQgA2ogASACECUaCwspACAAIAFBCHRBgID8B3EgAUEYdHIgAUEIdkGA/gNxIAFBGHZycjYAAAs9AQF/IAAtABMiAUUEQCAAIAAoAixBAWoiADYCLCAADwsgACABQQFrIgE6ABMgACABQf8BcUECdGooApgBC3EBAX8gACgCCCICLgEQQQBOBEACfyAAKAIIIQIgAUEATARAIAIQYiACQQA2AghBAAwBCyAC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ACgCWCABKAIIQShsaiIALQARQZABcQRAIAAQYiAAQQQ7ARAgAA8LIABBBDsBECAAC3ABA38jAEEQayIEJABB7PUDKAIABEAgBCACNgIMIwBB8AFrIgMkACADQdgBaiIFQQAgA0HSAUEAEJoBIAUgASACELsDQez1AygCACEBQfD1AygCACAAIAUQxQEgARECACADQfABaiQACyAEQRBqJAALCgAgACgCACgCFAsNACAAKAIAIAGsEJABC80BAQN/IAEEQCABQQhqIQIDQCABKAIAIARKBEAgAigCBCIDBEAgACADEF4LIAAgAigCCBAnIAIoAgwiAwRAIAAgAxBeCyACLwAlIgNBAnEEfyAAIAIoAjgQJyACLwAlBSADC0EEcQRAIAAgAigCOBA5CyAAIAIoAhAQ0wEgAigCFCIDBEAgACADEGYLIAIoAiwhAwJAIAItACZBBHEEQCAAIAMQ7QEMAQsgA0UNACAAIAMQLgsgAkFAayECIARBAWohBAwBCwsgACABEF4LCxUAIAAgASACIAMgACgCACgCCBEMAAs/AQF+AkAgACkDECICIAApAwhaBEAgAEEBEMoDDQEgACkDECECCyAAIAJCAXw3AxAgACgCBCACp2ogAToAAAsL4gEBAX8DQAJAIAAoAgRBgMAQcQRAIABBDGohAAwBCwJ/IAAtAAAiAUGwAUYEQCAALQACIQELAkACQAJAAkACQAJAIAFBsQFrDgICAQALIAFBigFHBEACQCABQacBaw4DAAUABAsgACgCLCIBRQ0EIAEgAC4BIBC8BAwGCyAAKAIUKAIcQQhqIQAMBgsgACgCDCgCFCgCHCAALgEgQQR0akEIaiEADAULIAAoAhRBCGohAAwECyABQSRGDQELIAAtAAEMAQsgACgCCEEAENEEC0EYdEEYdQ8LIAAoAgAhAAwACwALZQEBfyABEJ4BIQMCQCAALQAXRSADRXINACADLQAAQbABRg0AIAMQygVFDQAgAkEANgIAIAAgA0F/EMkFDwsgAiAAEEYiASAAIAMgARDvASIDRwR/IAAgARBAQQAFIAELNgIAIAMLNwEBfyABQQBIBEAgACgCbEEBayEBC0HwpwQhAiAAKAIALQBXBH9B8KcEBSAAKAJoIAFBFGxqCwt7AQN/AkAgAUEASA0AIAAoAhxBIHFFDQAgACgCBCEEA0Ag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KAIkIAIQNjYCJCADIAAgASgCKCACEHA2AiggAyAAIAEoAiwgAhA2NgIsIAMgACABKAIwIAIQcDYCMCABLQAAIQUgAyAENgI4IAMgBToAACADQQA2AjQgACABKAI8IAIQNiEEIANCADcCCCADIAQ2AjwgASgCBCEEIANCfzcCFCADIARBX3E2AgQgAyABLwECOwECIAAgASgCQBDnCyEEIANBADYCRCADIAQ2AkAgASgCSCEHIwBBEGsiBSQAIAVBADYCDCAFQQxqIQQDQAJAIAdFDQAgBCAAQQAgBxDlCyIENgIAIARFDQAgBEEkaiEEIAcoAiQhBwwBCwsgBSgCDCEEIAVBEGokACADIAQ2AkgCQCABKAJEBEAgAC0AVwRAIAMgASgCEDYCEAwCCyMAQSBrIgQkACAEQQA2AgwgBEHAADYCCCAEQcEANgIEIAQgAzYCGCAEQQA2AgAgBCADEGoaIARBIGokAAsgAC0AVyEEIAMgASgCEDYCECAERQ0CCyADQQA2AjggACADEGYLIAYoAgwhACAGQRBqJAAgAA8LIAggAzYCACABKAI0IQEgA0E0aiEIIAMhBAwACwALeQEBfyABBH8gAkUEQCABDwsgACgCACEDAkAgASgCBEGBgICAAnFBgICAgAJHBEAgAigCBEGBgICAAnFBgICAgAJHDQELIAAtANABQQFLDQAgACABENcHIAAgAhDXByADQZsBQeK7ARBxDwsgAEEsIAEgAhA1BSACCwu7AwEDfwJAIAFFDQACQCAABEAgACgCkAQNAQsgASABKAIYQQFrIgI2AhggAg0BCyAAIQIgASgCCCEAA0AgAARAIAAoAhQhAwJAIAIEQCACKAKQBA0BCyABLQArQQFGDQAgACgCGEEYaiAAKAIAQQAQqAEaCyACIAAQ2gQgAyEADAELCwJAAkACQAJAIAEtACsOAgABAgsgASgCMCEAA0AgAARAAkAgAgRAIAIoApAEDQELIAAoAgwhAwJAIAAoAhAiBARAIAQgAzYCDAwBCyABKAI8QThqIAMgACADGygCCCADEKgBGgsgACgCDCIDRQ0AIAMgACgCEDYCEAsgAiAAKAIcEPEDIAIgACgCIBDxAyAAKAIEIQMgAiAAECcgAyEADAELCwwCC0EAIQACQCACBEAgAigCkAQNAQtBACABEK8IGgsgASgCMARA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KAKgAiABQQEQxgULIARBEGokAAs7AQF/IAAoAgAiAi0AV0UEQCACIAAoAmggAUEUbGoiACwAASAAKAIQEIwEIABBADYCECAAQbgBOwEACwvCAQEBfwJAIAAoAgAtAFcNACABLQAEQYABcQ0AIwBBIGsiAyQAIANBxwA2AgQgAyAANgIAIAAtABYEQCADQQA2AgwgA0HIADYCCCADIAEQahoLIANBADsBFCADQT82AgwgA0HJADYCCCADIAEQahogA0EgaiQAIAAoAiQNACAAIAEgAhDaCyAAKAIkDQAjAEEgayICJAAgAkHKADYCDCACQTI2AgggAkHHADYCBCACIAA2AgAgAiABEGoaIAJBIGokAAsLRQEBfyAAKAIAQgwQjQEiAwRAIAMgACgCgAE2AgAgACADNgKAASADIAE2AgggAyACNgIEIAIPCyAAKAIAIAIgAREFAEEACw8AQQ4gAEGN6AAQiAVBDgsUAQF/EOwBBH9BAAUgACABEMgBCwtIAQF/IABBASABdCICIAAoApgBcjYCmAECQCABQQFGDQAgACgCACgCECABQQR0aigCBC0ACUUNACAAIAAoApwBIAJyNgKcAQsLHQEBfxDsAQR/QQAFIAAgAUEAIAFBAEobrRDIAQsLZQEDfyACRQRAQQAPCwJAIAAtAAAiA0UNAANAAkAgAS0AACIFRQ0AIAJBAWsiAkUgAyAFR3INACABQQFqIQEgAC0AASEDIABBAWohACADDQEMAgsLIAMhBAsgBEH/AXEgAS0AAGsLcgECfwJAIAAoAgAgACgCDGoiAkEATARAQQEhAiAALQAQQRBxRQ0BC0EHIQEgACACQQEQvwMNAEEAIQEgACgCCCAAKAIMakEAIAAoAgAQKBogACAAKAIMIAAoAgBqNgIMIAAgAC8BEEH/8wNxOwEQCyABC8kKAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhCECQgAhASACUARAQoCAgICAgOD//wAhCgwDCyAKQoCAgICAgMD//wCEIQoMAgsgASALhFAEQEIAIQEMAgsgAiADhFAEQEIAIQEMAgsgC0L///////8/WARAIAVB0ABqIAEgDSABIA0gDVAiBht5IAZBBnStfKciBkEPaxCpAUEQIAZrIQYgBSkDWCINQiCIIQ4gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAwgAyAMIAxQIggbeSAIQQZ0rXynIghBD2sQqQEgBiAIa0EQaiEGIAUpA0ghDCAFKQNAIQMLIANCD4YiC0KAgP7/D4MiAiABQiCIIgR+IhAgC0IgiCITIAFC/////w+DIgF+fCIPQiCGIhEgASACfnwiCyARVK0gAiANQv////8PgyINfiIVIAQgE358IhEgDEIPhiISIANCMYiEQv////8PgyIDIAF+fCIUIA8gEFStQiCGIA9CIIiEfCIPIAIgDkKAgASEIgx+IhYgDSATfnwiDiASQiCIQoCAgIAIhCICIAF+fCIQIAMgBH58IhJCIIZ8Ihd8IQEgByAJaiAGakH//wBrIQYCQCACIAR+IhggDCATfnwiBCAYVK0gBCAEIAMgDX58IgRWrXwgAiAMfnwgBCAEIBEgFVStIBEgFFatfHwiBFatfCADIAx+IgMgAiANfnwiAiADVK1CIIYgAkIgiIR8IAQgAkIghnwiAiAEVK18IAIgAiAQIBJWrSAOIBZUrSAOIBBWrXx8QiCGIBJCIIiEfCICVq18IAIgAiAPIBRUrSAPIBdWrXx8IgJWrXwiBEKAgICAgIDAAINQRQRAIAZBAWohBgwBCyALQj+IIQMgBEIBhiACQj+IhCEEIAJCAYYgAUI/iIQhAiALQgGGIQsgAyABQgGGhCEBCyAGQf//AU4EQCAKQoCAgICAgMD//wCEIQpCACEBDAELAn4gBkEATARAQQEgBmsiB0GAAU8EQEIAIQEM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IAhBFGxqIgEuARIgAhAkGiABLgEQIgFBAEgNISAAKAIEIAFB//8DcUEMbGotAAVBxQBHDSEgBkHXACACECwaDCELIAEtAARBIHEEQCAAIAEoAgwgAhDvASEDAn8gASgCLCIABEAgACABLgEgELwEDAELIAEtAAELIgBBGHRBGHVBwgBIDSIgBkHgACADQQFBACAAQf8BcUEBdEHc+AJqQX8QMxoMIgsgASgCHCIFQQBIBEAgACgCNCIDQQBIBEAgAS8BICIEQRB0QRB1IghBAEgEQCADQX9zIQMMJAsgASgCLCIFIAgQhwEgA2shAyAFKAIEIARBDGxqIgEvAQoiBEHgAHEEQCAEQYACcQRAIAcgASgCADYCACAAQeDcASAHECZBACEDDCULIAEgBEGAAnIiAjsBCiABIARBgAFxBH8gACAFIAEgAxDQByABLwEKBSACC0H//ANxOwEKDCQLIAEtAAVBxQBHDSMgBkHRACADIAIQIhogBkHXACACECwaDCILIANBAWshBQsgAS0AAiEDIAAoAgggASgCLCAFIAEuASAgAhCJAQJAIANFDQAgACgCCEF/EIYBIgAtAABB3gBHDQAgACADOwECCyACIQMgASgCLA0hIAEtAAFBxQBHDSEgBkHXACADECwaDCELIAAgAUEAIAIQ+QsMHwsgBkHHACABELsEIAIQIhoMHgsgBiABKAIIQQAgAhDPBwwdCyAGIAIgASgCCBCwARoMHAsgBkHNACABKAIIQQJqIgAQMUEBayIBQQJtIAJBACAGKAIAIAAgARCTCEF6EDMaDBsLIAZBzgAgAS4BICACECIaIAEoAggtAAFFDRogACgC4AEiACABLgEgEOAJIQEgAEEANgIAIAYgAUF/EIgBDBoLIAEoAhwhAwwaCyACIAAgASgCDCACEO8BIgBHBEAgBkHRACAAIAIQIhoLIAZB2AAgAiABKAIIQQAQ0QQQIhoMGAtBNUE0IAVBLUYbIQVBASEIQYABDAELQQALIQsgASgCDCIDEP4BBEAjAEEQayIDJAAgASgCECEGIAAoAgghBCABKAIMIg0QkgEhCiAAEDIhCAJAIAAoAiQNACABKAIEIQEgBhCSASAKRwRAIABB6vMAQQAQJgwBCyABQQp2QQFxIREgACANEPULIRIgACAGEPULIRMgBEHHAEEBIAIQIhpBNUE2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IQQDQAJAIAAgBEsEQCAELQAAQTBGDQELQQAhAgNAAkAgAiAEaiIIIABPIgkNACAILQAAIghBMGtB/wFxQQlLDQAgAiAFaiECIApCCn4gCK1C/wGDfEIwfSEKDAELCyABQv///////////wBCgICAgICAgICAfyAHGyAKQgAgCn0gBxsgCkIAUxs3AwACfyACRQRAQX8gAyAERg0BGgsgBiAGDQAaIAYgCQ0AGiACIQMDQEEBIAMgBGotAABBwOoBai0AAEEBcUUNARogBCADIAVqIgNqIABJDQALQQALIQMCQCACIAVBE2wiBkkNAEEBIQAgAiAGTQRAQQAhAEEAIQIDQCACIABBEUtyRQRAIAQgACAFbGosAAAgAEHXuAFqLAAAa0EKbCECIABBAWohAAwBCwsgAgR/IAIFIAQgBUESbGosAABBOGsLIgBBAEgNAQsgAUL///////////8AQoCAgICAgICAgH8gBxs3AwBBAkEDIAMgBxsgABshAwsgAw8LIAQgBWohBAwACwALpwECA38BfgJAIAAtAABBMEcNACAALQABQSByQfgARw0AQQIhAgNAIAIiA0EBaiECIAAgA2otAAAiBEEwRg0ACyADIQIDQCAEQcDqAWotAABBCHEEQCAEQRh0QRh1EIcCrSAFQgSGfCEFIAAgAkEBaiICai0AACEEDAELCyABIAU3AwBBAiACIANrQRBKQQF0IAAgAmotAAAbDwsgACABIAAQMUEBEPUCC40DAQR/AkACQCAABEAgAUEBayECAkADQCAAKAIAQaEfTwRAIAAoAggiAUUNAiACIAIgAW4iAyABbGshAiAAIANBAnRqIgNBDGooAgAiAA0BIAMgARCBBCIANgIMIAANAQwFCwsgACACQQN2aiIAQQxqIAAtAAxBASACQQdxdHI6AABBAA8LIAJBAWohBAJAIABBDGoiAyACQf0AcCIBQQJ0aigCACICBEADQCACIARGBEBBAA8LIANBACABQQFqIgEgAUH8AEsbIgFBAnRqKAIAIgINAAsgACgCBCICQT5JDQEMAwsgACgCBCICQfwATw0CCyAAIAJBAWo2AgQgAyABQQJ0aiAENgIAC0EADwtBACEBQQBC9AMQjQEiAkUNACACIANB9AMQJSEFIANBAEH0AxAoGiAAIAAoAgBB/ABqQf0AbjYCCCAAIAQQ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IAAoAiAQXgsgACAAKAIUIAGsEI0BIgE2AiALIAFFBEAgABBiIABBADYCGCAAQQA2AghBBw8LIAAgACgCFCABEKsCNgIYAkAgAkUNACAAKAIIIgFFDQAgACgCICABIAAoAgwQJRoLIAAgAC8BECIBQYAgcQR/IAAoAgggACgCJBEDACAALwEQBSABC0H/nwJxOwEQIAAgACgCIDYCCEEAC9MDAgJ+An8jAEEgayIEJAACQCABQv///////////wCDIgNCgICAgICAwIA8fSADQoCAgICAgMD/wwB9VARAIAFCBIYgAEI8iIQhAyAAQv//////////D4MiAEKBgICAgICAgAhaBEAgA0KBgICAgICAgMAAfCECDAILIANCgICAgICAgIBAfSECIABCgICAgICAgIAIUg0BIAIgA0IBg3whAgwBCyAAUCADQoCAgICAgMD//wBUIANCgICAgICAwP//AFEbRQRAIAFCBIYgAEI8iIRC/////////wODQoCAgICAgID8/wCEIQIMAQtCgICAgICAgPj/ACECIANC////////v//DAFYNAEIAIQIgA0IwiKciBUGR9wBJDQAgBEEQaiAAIAFC////////P4NCgICAgICAwACEIgIgBUGB9wBrEKkBIAQgACACQYH4ACAFaxD/AiAEKQMIQgSGIAQpAwAiAEI8iIQhAiAEKQMQIAQpAxiEQgBSrSAAQv//////////D4OEIgBCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyAAQoCAgICAgICACFINACACQgGDIAJ8IQILIARBIGokACACIAFCgICAgICAgICAf4OEvwvTAQIBfwJ+QX8hBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LIAAgAlYgASADVSABIANRGw0AIAAgAoUgASADhYRCAFIhBAsgBAvMAQEGfxC7ASAAEPcBIAAtABhBAXEEQCAALQCxAUUhBAsgBEUhBgNAIAMgACgCFE5FBEAgACgCECAD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AkAgASgCECICBH8gAgUgASgCDCEDIAFBACABMwE0QgF8EI0BIgI2AhAgAkUNAUEAIQIDQCACIAEvATRPRQRAAn8gASgCBCACQQF0ai8BACIAQRB0QRB1IgRBAE4EQCADKAIEIABBDGxqLQAFDAELQcQAIARBf0YNABogASgCKCACQQR0aigCCBCEAQshACABKAIQIAJqIABBGHRBGHUiAEHBACAAQcEAShsiAEHDACAAQcMASRs6AAAgAkEBaiECDAELCyABKAIQIAJqQQA6AAAgASgCEAsPCyAAEE9BAAsOACAAIAEQhgEgAjYCDAvJAQECfwJAAkAgACgCAC0AIUHAAHFFDQAgAS0AKw0AAkAgAkUEQEEBIQQgARCPAw0DIAEoAjBBAEchBQwBCyABQTBqIQBBASEEA0AgACgCACIABEAgASAAIAIgAxCTCwRAQQEhBSAEQQIgASgCACAAKAIIEFMbIQQLIABBBGohAAwBCwsgARCPAyEAA0AgAEUNAQJAIAEgACACIAMQpgdFDQBBASEFIAAtABpFDQBBAg8LIAAoAgwhAAwACwALIAUNAQtBACEECyAEC6UDAQl/An8CQAJAIAEoAjhFBEAgACgCACgCECgCHCIHBH8gBygCMEEARwVBAAtFDQELIAAtAJcBRQ0BC0EAIARFDQEaIARBADYCAEEADwsgAyEJIwBBEGsiCCQAAkACQCAAIgMgASIHEM8LIgFFDQACQCADKAIALQAiQQRxDQAgBygCOCIGRQ0AIAEgBkYNASABIQADQCAAIgUoAiAiAEEAIAAgBkcbDQALIAVBADYCIAtB35gBQeaYASACQYABRhshCkEAIQUgAkH/AEYhCyACQYEBRyEMIAEhAANAAkACQCAALQAIIgYgAkcNACAAKAIQIAkQpQdFDQAgBSAALQAJciEFDAELIAZBlgFGBEAgACACOgAIQQJBASAHLQArQQFHIg0bIQYgCyANckUEQCAIIAo2AgAgA0GZKSAIECZBASEGCyAAIAY6AAkgBSAGciEFDAELIAAtAApFIAxyIAZB/wBHcg0AIAMoAnQNACAFIAAtAAlyIQULIAAoAiAiAA0ACwwBC0EAIQELIAQEQCAEIAU2AgALIAhBEGokACABQQAgBRsLCyoBAX9BqpYBIQEgAEGHAWsiAEECTQR/IABBAnRB1K4DaigC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AiABQQZqNgIMAn8gF0EXRgRAQaYBIAJBDGoQ0ARBFkYNARoLQTsLIQUgAkEQaiQAIAUMAgsgESAaNgIsIBEgATYCKCARIBFBKGo2AiAgAEHx3wEgEUEgahAmDAMLIwBBEGsiAiQAIAIgAUEGajYCDEE7IQUgAkEMahDQBEE7RgRAQaQBQTsgAkEMahDQBEEYRhshBQsgAkEQaiQAIAULIhc2AuwJCyAAIBo2AsgBIAAgATYCxAEgESAAKQLEATcDGCMAQSBrIhQkACARQTBqIhIoAgQhBCASKAIALwEAIQICQANAIBdB//8DcSEFIAJB//8DcSIGQb8ETQR/IAZBAXRBkJwCai8BACEHAn8CQANAIAcgBSICaiIFQQF0QZClAmovAQAgAkYNASACQQF0QfCVAmovAQAiBQ0ACyACQf//A3FFIAdB5QBqIgJBAXRBkKUCai8BAEHlAEdyRQRAIAJBAXRB8MgCagwCCyAGQQF0QeDpAmoMAQsgBUEBdEHwyAJqCy8BAAUgBgtB//8DcSIFQdsJTwRAAkAgBUGVjwJqLQAADQAgEigCACASKAK4CUkNACASEJIIDAMLIBQgESkCGDcDAEEAIQJBACEGQQAhCkEAIQhBACEHQQAhCyMAQbABayINJAAgEigCACEDAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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AjYCACACIANBCGsoAgAgAygCBBDwBQybAQsgA0EUayICIARBACACKAIAEDsiAjYCACACIANBCGsoAgAgAygCBBDwBQyaAQsgA0EANgIEDJkBCyADQQE2AgQMmAELIANBfzYCEAyXAQsgA0EIa0EANgIADJYBCyADQQhrQQE2AgAMlQELIANBADYCEAyUAQsgA0EIayADKAIENgIADJMBCyADQQhrIARBlAEgAygCBEEAEDU2AgAMkgELIANBIGsgBEGUASADQRRrKAIAIAMoAgQQNTYCAAyRAQsgA0EgayAEQZQBIAMoAgQgA0EUaygCABA1NgIADJABCyAEIANBFGsiAigCACADQQhrEPIFIAQgAigCACADKAIEEO8FDI8BCyAEIAMoAgQQzQQgA0EIa0EANgIADI4BCyAEIAMoAgQQzQQgA0EgayADQRRrKAIANgIADI0BCyAEIANBOGsiAigCACADQSxrEPIFIAQgA0EUayIGKAIAQaMREIUIAkAgA0EIaygCACIFRQRAIAIoAgAhBQwBCyAFKAIAQQJOBEAgBEEAIAVBAEEAQQBBAEGAEEEAELYBIQUgDUIANwOQASAEQQBBAEEAIA1BkAFqIAVBABCCAiEFCyACIAQgAigCACAFEIQIIgU2AgALIAQgBSAGKAIAIAMoAgQgA0HEAGsoAgBBABDuBQyMAQsgA0EsayICIAQgAigCACADKAIEEDsiAjYCACAEIAIgA0EUa0EBEOYCDIsBCyADQcQAayICIAQgAigCACADQSBrKAIAIAMoAgQQgwg2AgAMigELIAQgBEEAIAMoAgQQOyICIANBFGsiBUEBEOYCIAUgAjYCAAyJAQsgA0EsayAEQQAgA0EgaygCACADKAIEEIMINgIADIgBCyAEIANBIGsoAgAgA0EIaygCACADQRRrKAIAIANBOGsoAgAgAygCBBDtBQyHAQsgBCADQSxrKAIAQQAgA0EgaygCACADQcQAaygCAEEAEO0FDIYBCyADQQA2AhAMhQELIANBCGtBADYCACAEIAMoAgQQzQQMhAELIANBgAFrIAQoAgAgA0HcAGsoAgAgA0HEAGsoAgAgA0EUaygCACADQQhrKAIAIAMoAgQQ6wM2AgAMgwELIANB3ABrIAQoAgAgA0E4aygCACADQSBrKAIAQQBBACADKAIEEOsDNgIADIIBCyADQSxrIAQoAgBBAEEAQQBBAEEAEOsDNgIADIEBCyADQdAAayAEKAIAQQBBACADQRRrKAIAIANBCGsoAgBBABDrAzYCAAyAAQsgBCADKAIEEM0EDH8LIANBADYCEAx+CyADQRRrIANBCGsoAgA2AgAMfQsgA0EUayICIAQgAigCACADQQRqEOwFNgIADHwLIAMgBEEAIANBBGoQ7AU2AgQMewsgA0EUayADQQhrKAIANgIADHoLIA0gAykCBDcDQCADIARBOyANQUBrEIMCNgIEDHkLIA0gA0EUayICKQIANwNQIARBOyANQdAAahCDAiEFIA0gAykCBDcDSCACIARBjQEgBSAEQTsgDUHIAGoQgwIQNTYCAAx4CyANIANBLGsiBSkCADcDaCAEQTsgDUHoAGoQgwIhAiANIANBFGspAgA3A2AgBEE7IA1B4ABqEIMCIQYgDSADKQIENwNYIARBjQEgBiAEQTsgDUHYAGoQgwIQNSEGIAQtANABQQJPBEAgBEEAIAIQowELIAUgBEGNASACIAYQNTYCAAx3CyADLwECIQIgDSADKQIENwNwIAMgBCACIA1B8ABqEIMCNgIEDHYLIAQoAgBBmwEgA0EEakEBEHkiAgRAIAIgAygCBCAEKALoAWs2AiQLIAMgAjYCBAx1CwJAIAMoAgQiAi0AAEEjRgRAIAItAAFBOmtBdUsNAQsgAygCCCEHIA0gAykCBDcDeCADIARBnAEgDUH4AGoQgwIiCTYCBCMAQRBrIgokAAJAIAlFDQAgBCgCACELAkACQCAJKAIIIgIwAAEiJFAEQCAEIAQvAcwBQQFqIgU7AcwBDAELAkACQCACLQAAQT9GBEAgB0ECRgR+ICRCMH0FIAJBAWogCkEIaiAHQQFrQQEQ9QJBAEchBiAKKQMICyIkQgBXIAZyICQgCygCnAEiBaxVcg0EICSnQRB0QRB1IgUgBC4BzAFMDQEgBCAFOwHMASAEKALgASEGDAILIAQoAuABIgYgAiAHEN4JIgVB//8DcQ0CIAQgBC8BzAFBAWoiBTsBzAEMAQsgBCgC4AEiBiAFEOAJDQELIAQCfyACIQggBUEQdEEQdSEQAkAgBiICIAsgAiAHQQRtQQNqIgysIAIEfiACKAIEIg4gDGoiDyACKAIAIgZMBEAgAiEGDAILIAasQgGGBUIKC3wiJEIChhC5ASIGRQ0BGgJ/IAIEQCAGKAIEDAELIAZBAjYCBEECCyEOIAYgJD4CACAMIA5qIQ8LIAYgDkECdGoiAiAQNgIAIAIgDDYCBCAGIA82AgQgAkEIaiAIIAcQJSAHakEAOgAAIAYLNgLgAQsgCSAFOwEgIAsoApwBIAVBEHRBEHVODQEgBEHTKkEAECYgBCgCACAJEPgCDAELIAogBTYCACAEQbf7ACAKECYgBCgCACAJEPgCCyAKQRBqJAAMdQsgDSADKQIEIiQ3A5ABIAQtABJFBEAgDSANQZABajYCgAEgBEGawgAgDUGAAWoQJiADQQA2AgQMdQsgAyAEQbABQQBBABA1IgI2AgQgAkUNdCAkp0EBaiACQRxqENACGgx0CyADQRRrIgIgBCACKAIAIANBBGpBARCCCDYCAAxzCyADQThrIAQoAgBBJCADQQhrQQEQeSICNgIAIAQoAgAgAiADQSBrKAIAQQAQgQgMcgsgA0EsayICIAQgA0EIaygCACACIANBFGsoAgAQngI2AgAMcQsgA0EgayICIARBACACQQAQngI2AgAMcAsgBCAEIANBFGsoAgAgA0E4ayICIANBIGsoAgAQngIiBSADKAIEEIAIIAIgBTYCAAxvCyAEIARBACADQSxrIgJBABCeAiIFIAMoAgQQgAggAiAFNgIADG4LIAMgBEEAIANBBGpBABCeAjYCBAxtCyAEIANBIGsoAgAgA0EIaygCABA7IQIgA0EsayIGIARBsQFBAEEAEDUiBTYCACAFBEAgBSACNgIUIAIoAgBFDW0gBigCACIFIAUoAgQgAigCCCgCBEGIhIACcXI2AgQMbQsgBCgCACACEDkMbAsgA0EUayICIAQgAigCACADKAIEENIBNgIADGsLIANBFGsiAiAEIANBCmsvAQAgAigCACADKAIEEDU2AgAMagsgA0EMayICIAMpAgQiJDcCBCACICRCIIinQYCAgIB4cjYCCAxpCyADQQRrIgIgAigCACIGQf////8HcTYCACADQRRrIgIgBCAEIARBACADKAIEEDsgAigCABA7IANBCGtBABCeAiIFNgIAIAZBAEgEQCACIARBEyAFQQAQNSIFNgIACyAFRQ1oIAUgBSgCBEGAAnI2AgQMaAsgA0EcayICIAIoAgAiBkH/////B3E2AgAgA0EsayICIAQgBCAE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AyAFENQGCyAGQfABaiQAC0gBAn8CfyABQR9NBEAgACgCBCECIAAMAQsgAUEgayEBIABBBGoLKAIAIQMgACACIAF2NgIEIAAgAkEgIAFrdCADIAF2cjYCAAtCAQJ/AkAgAEUNAAJAIAAvARAiA0GCBHFBggRHDQAgAC0AEiABRw0AIAAoAggPCyADQQFxDQAgACABEO4JIQILIAILzAkCBH4EfyMAQfAAayIKJAAgBEL///////////8AgyEFAkACQCABUCIJIAJC////////////AIMiBkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAGUBtFBEAgA0IAUiAFQoCAgICAgMD//wB9IghCgICAgICAwICAf1YgCEKAgICAgIDAgIB/URsNAQsgCSAGQoCAgICAgMD//wBUIAZCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgBUKAgICAgIDA//8AVCAFQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAGQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiCRshBEIAIAEgCRshAwwCCyADIAVCgICAgICAwP//AIWEUA0BIAEgBoRQBEAgAyAFhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAFhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAFIAZWIAUgBlEbIgwbIQUgBCACIAwbIghC////////P4MhBiACIAQgDBsiB0IwiKdB//8BcSELIAhCMIinQf//AXEiCUUEQCAKQeAAaiAFIAYgBSAGIAZQIgkbeSAJQQZ0rXynIglBD2sQqQEgCikDaCEGIAopA2AhBUEQIAlrIQkLIAEgAyAMGyEDIAdC////////P4MhBCALRQRAIApB0ABqIAMgBCADIAQgBFAiCxt5IAtBBnStfKciC0EPaxCpAUEQIAtrIQsgCikDWCEEIAopA1AhAwsgBEIDhiADQj2IhEKAgICAgICABIQhAiAGQgOGIAVCPYiEIQQgA0IDhiEBIAcgCIUhAwJAIAkgC0YNACAJIAtrIgtB/wBLBEBCACECQgEhAQwBCyAKQUBrIAEgAkGAASALaxCpASAKQTBqIAEgAiALEP8CIAopAzAgCikD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KAIAIgE2AgwgASADNgIIIAIgAzYCCCADIgIoAgghAwsgAkEANgIICyAEQQFqIQQMAAsACwNAIAMEQCADKAIIIQEgAxAjIAEhAwwBCwsgCCECCyAJECMMAwUgBCgCDCEEDAELAAsACyAKQQJHDQIgBiACKAIMIgg2AgggBiACKAIQIgM2AgQgAkIANwIMIAhBADYCCCADQQA2AggCQCAGQQhqIAFBAWsiARCbBSIFBH8gAwUgBkEEaiABEJsFIgVFDQEgBigCBAsQjgIgBigCCBCOAgwBCyACIAYoAggiATYCDCABIAI2AgggAiAGKAIEIgE2AhAgASACNgIIQQAhBQsgBQ0AQQAhBQwBCyACEI4CQQAhAgsgACACNgIAIAZBEGokACAFC+ABAQN/IwBBEGsiAyQAAkACQANAIAENASAAKAKAAiACSgRAQQAgACAAKAKYAiACQX8Q9QYiASABQeUARhshASACQQFqIQIMAQsLIAAQpARBACEBIAAtAO0BRQ0BIAAoAjBB/wFHDQEgACgCNEUNAUEAIQIgA0EANgIMIABBFiADQQxqQQAQUiIBDQEgAygCDCIBQQFBAhB1GgJAAkACQCABEENB5ABrDgIAAQILQQggAUEAEL8BIgIgAkEBRhshAgsgACACNgIwCyABEDohAQwBCyAAEKQECyADQRBqJAAgAQuYAQEDfyABLQAHRQRAQQAPCwJAAkAgARDCCiICDQAgASgCACIDIAMoAjhBAWo2AjggASgCDEEBIAEpAyAQWBogAUEAOgAHIAEoAgwQQyECIAMgAygCOEEBazYCOCACQeQARg0BIAEoAgwQOiICDQAgASgCACgCKA0BIAFBAToABkGLAiECCyAABEAgACACENgBCyACIQQLIAQLGQAgACABIAIQ1AoiAEUEQEEADwsgACgCCAuEBAICfwR+IwBBEGsiByQAIAcgAygCACIINgIMAkAgCEUEQEIBIQlCf0IBIAAbIQsgASACaiECQQAhAANAIAEgAkkEQCAHIAEgBxClASABaiIANgIIIAcpAwAhDEEAIAdBCGoQ6gEgCSAMfiAKfCEKIAcoAgghAQNAAkAgASACTw0AIAEtAAANACABQQFqIQEMAQsLIAcgATYCCCALIQkMAQsLIAUgAiAAazYCACADIAA2AgAgBCAKNwMADAELIwBBEGsiCCQA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hUKAgICAgICAgIB/gyENIARCMIinQf//AXEhCAJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAhB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiDEKAgICAgIDA//8AVCAMQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQ0MAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhDSADIQEMAgsgASAMQoCAgICAgMD//wCFhFAEQCADIAJCgICAgICAwP//AIWEUARAQgAhAUKAgICAgIDg//8AIQ0MAwsgDUKAgICAgIDA//8AhCENQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAQgAhAQwCCyABIAyEUARAQoCAgICAgOD//wAgDSACIAOEUBshDUIAIQEMAgsgAiADhFAEQCANQoCAgICAgMD//wCEIQ1CACEBDAILIAxC////////P1gEQCAFQcACaiABIAogASAKIApQIgYbeSAGQQZ0rXynIgZBD2sQqQFBECAGayEGIAUpA8gCIQogBSkDwAIhAQsgAkL///////8/Vg0AIAVBsAJqIAMgCyADIAsgC1AiBxt5IAdBBnStfKciB0EPaxCpASAGIAdqQRBrIQYgBSkDuAIhCyAFKQOwAiEDCyAFQaACaiALQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABCkASAFQZACakIAIAUpA6gCfUIAIARCABCkASAFQYACaiAFKQOYAkIBhiAFKQOQAkI/iIQiBEIAIAJCABCkASAFQfABaiAEQgBCACAFKQOIAn1CABCkASAFQeABaiAFKQP4AUIBhiAFKQPwAUI/iIQiBEIAIAJCABCkASAFQdABaiAEQgBCACAFKQPoAX1CABCkASAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABCkASAFQbABaiAEQgBCACAFKQPIAX1CABCkASAFQaABaiACQgAgBSkDuAFCAYYgBSkDsAFCP4iEQgF9IgJCABCkASAFQZABaiADQg+GQgAgAkIAEKQBIAVB8ABqIAJCAEIAIAUpA6gBIAUpA6ABIgwgBSkDmAF8IgQgDFStfCAEQgFWrXx9QgAQpAEgBUGAAWpCASAEfUIAIAJCABCkASAGIAkgCGtqIQYCfyAFKQNwIhNCAYYiDiAFKQOIASIPQgGGIAUpA4ABQj+IhHwiEELn7AB9IhRCIIgiAiAKQoCAgICAgMAAhCIVQgGGIhZCIIgiBH4iESABQgGGIgxCIIgiCyAQIBRWrSAOIBBWrSAFKQN4QgGGIBNCP4iEIA9CP4h8fHxCAX0iE0IgiCIQfnwiDiARVK0gDiAOIBNC/////w+DIhMgAUI/iCIXIApCAYaEQv////8PgyIKfnwiDlatfCAEIBB+fCAEIBN+IhEgCiAQfnwiDyARVK1CIIYgD0IgiIR8IA4gDiAPQiCGfCIOVq18IA4gDiAUQv////8PgyIUIAp+IhEgAiALfnwiDyARVK0gDyAPIBMgDEL+////D4MiEX58Ig9WrXx8Ig5WrXwgDiAEIBR+IhggECARfnwiBCACIAp+fCIKIAsgE358IhBCIIggCiAQVq0gBCAYVK0gBCAKVq18fEIghoR8IgQgDlStfCAEIA8gAiARfiICIAsgFH58IgtCIIggAiALVq1CIIaEfCICIA9UrSACIBBCIIZ8IAJUrXx8IgIgBFStfCIEQv////////8AWARAIBYgF4QhFSAFQdAAaiACIAQgAyASEKQBIAFCMYYgBSkDWH0gBSkDUCIBQgBSrX0hCkIAIAF9IQsgBkH+/wBqDAELIAVB4ABqIARCP4YgAkIBiIQiAiAEQgGIIgQgAyASEKQBIAFCMIYgBSkDaH0gBSkDYCIMQgBSrX0hCkIAIAx9IQsgASEMIAZB//8AagsiBkH//wFOBEAgDUKAgICAgIDA//8AhCENQgAhAQwBCwJ+IAZBAEoEQCAKQgGGIAtCP4iEIQogBEL///////8/gyAGrUIwhoQhDCALQgGGDAELIAZBj39MBEBCACEBDAILIAVBQGsgAiAEQQEgBmsQ/wIgBUEwaiAMIBUgBkHwAGoQqQEgBUEgaiADIBIgBSkDQCICIAUpA0giDBCkASAFKQM4IAUpAyhCAYYgBSkDICIBQj+IhH0gBSkDMCIEIAFCAYYiAVStfSEKIAQgAX0LIQQgBUEQaiADIBJCA0IAEKQBIAUgAyASQgVCABCkASAMIAIgAiADIAJCAYMiASAEfCIDVCAKIAEgA1atfCIBIBJWIAEgElEbrXwiAlatfCIEIAIgAiAEQoCAgICAgMD//wBUIAMgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgJWrXwiBCACIARCgICAgICAwP//AFQgAyAFKQMAViABIAUpAwgiA1YgASADURtxrXwiASACVK18IA2EIQ0LIAAgATcDACAAIA03AwggBUHQAmokAAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEBBfyEEIAAgAlQgASADUyABIANRGw0BIAAgAoUgASADhYRCAFIPC0F/IQQgACACViABIANVIAEgA1EbDQAgACAChSABIAOFhEIAUiEECyAECzUAIAAtABFBkAFxBEAgABCHBQsgACgCGARAIAAoAhQgACgCIBBeIABBADYCGAsgAEEANgIIC5gEAwN8An4CfwJ8AkAgAL0iBEI0iKdB/w9xIgZByQdrQT9JBEAgBiEHDAELIAZByAdNBEAgAEQAAAAAAADwP6APCyAGQYkISQ0ARAAAAAAAAAAAIARCgICAgICAgHhRDQEaIAZB/w9GBEAgAEQAAAAAAADwP6APCyAEQgBTBEBEAAAAAAAAABAQ/wkPC0QAAAAAAAAAcBD/CQ8LQYC3AysDACAAokGItwMrAwAiAaAiAiABoSIBQZi3AysDAKIgAUGQtwMrAwCiIACgoCIBIAGiIgAgAKIgAUG4twMrAwCiQbC3AysDAKCiIAAgAUGotwMrAwCiQaC3AysDAKCiIAK9IgWnQQR0QfAPcSIGQfC3A2orAwAgAaCgoCEAIAZB+LcDaikDACAFQi2GfCEEIAdFBEACfCAFQoCAgIAIg1AEQCAEQoCAgICAgICIP32/IgEgAKIgAaBEAAAAAAAAAH+iDAELIwBBEGshByAEQoCAgICAgIDwP3y/IgIgAKIiASACoCIDRAAAAAAAAPA/YwR8IAdCgICAgICAgAg3AwggByAHKwMIRAAAAAAAABAAojkDCEQAAAAAAAAAACADRAAAAAAAAPA/oCIAIAEgAiADoaAgA0QAAAAAAADwPyAAoaCgoEQAAAAA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AEcLC54BAQJ/IAAtABEiAUEGRgRAIAAoAiwaDwsgAUECTwR/AkAgACgC6AEEQCAAQQJBfxCBCSIBIAAgAC0AFEEAEPsDIAEbIQIMAQsgACgCRCgCAEEAIAFBAkcbRQRAIABBAEEAEPsDIQIgAC0ADyABQQNJcg0BIABBBjoAESAAQQQ2AiwgABD1BA8LIABBABCACSECCyAAIAIQ/AMFQQALGguYAQECfyAALQAIBEAgACgCACIBKALcAUUEQCABIAAoAgwiATYC3AEgARA6GiAAQQA2AgwLIABBADoACAsgACgCDBCYARogACICKAIcIQADQCAABEAgACgCCCEBIAAoAgwQIyAAECMgASEADAELCyACQQA2AhwgAigCLBAjIAIoAlwQuQogAigCEBCOAiACQQRqQQBB3AAQKBoLcQEBfyAAKALcARCYARoDQCABQShGRQRAIAAgAUECdGooAjwQmAEaIAFBAWohAQwBCwsgACgC+AEQIyAAKALgARAjIAAoAuQBECMgACgCKBAjIAAoAiwQIyAAKAIkIgEgASgCACgCCBEBABogABAjQQALiwEBAn8jAEEQayIEJAAgACgCBCEDIAAQTAJAIAFFBEBBACECIANBAEEAENkCIgFFDQELIAAgASACEMAKGgsgAC0ACEECRgRAIAMoAgAQgAcgA0EBIARBDGpBABCsAUUEQCADIAQoAgwiARCzCiABEKMECyADQQE6ABQgAxDMCgsgABDJCiAEQRBqJAALKAAgAC0ABUUEQCAAKAIoECMgACgCNBD/BCAAQQA2AjQLIABBADYCKAunBgIKfwJ+IwBBEGsiByQAAn8gAywAACILQQBIBEAgAyAHQQxqEHMaIAcoAgwMAQsgC0H/AXELIQ8gASEOIAIhDSAFIQsgBiEMIwBBEGsiCSQAQYsCIQgCQCADIAlBCGoiARCEAyADaiICIAEQhAMgAmoiCiADIARqIhBLDQBBACECQQAhBEEAIQEDQAJAAkAgCiAQSQRAIAsgDHJFBEBBACEIDAILQQAhCCAJQQA2AgACQAJ/IARBAXEEQAJAIAosAAAiBEEASARAIAogCRBzIQQgCSgCACEIDAELIAkgBEH/AXEiCDYCAEEBIQQLIAEgCEgNAiAEIApqIQoLIAosAAAiAUEASARAIAogCUEEahBzDAELIAkgAUH/AXE2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EWtBFG1BAWo2AiBB5AAhFgyZAQsgDCAFKAIMIgFBKGxqIQsgDCAFKAIEIg5BKGxqIgYvARAiAiAMIAUoAggiCUEobGoiAy8BEHJBAXEEQCALEGIMnQELAkACQCACQRJxRQRAIAYgEkEAEKYDRQ0BDKEBCyACQYAIcUUNASAGEOcBDaABCyAGLwEQQX1xIQILAkACQCADLwEQIg1BEnFFBEAgAyASQQAQpgNFDQEMoQELIA1BgAhxRQ0BIAMQ5wENoAELIAMvARBBfXEhDQsgDCAJQShsaiIPKAIMIAwgDkEobGoiECgCDGoiCiAHKAJ4Sg2NASALIApBAmogASAJRiILEL8DDZ4BIAwgAUEobGoiASABLwEQQcDkA3FBAnI7ARAgC0UEQCABKAIIIAwgCUEobGooAgggDygCDBAlGiADIA07ARALIAEoAgggDygCDGogDCAOQShsaigCCCAQKAIMECUaIAYgAjsBECAKQX5xIAogEkEBSxsiAiABKAIIakEAOgAAIAIgASgCCGpBADoAASABIAEvARBBgARyOwEQIAEgEjoAEiABIAI2AgwMnAELIAwgBSgCBEEobGoiARDcCCEDIAwgBSgCCEEobGoiAhDcCCEKIAwgBSgCDCIJQShsaiEGAkACQCADIApxQQRxBEAgASkDACEqIAggAikDACIrNwOoAgJAAkACQAJAAkACQCAFLQAAQeoAaw4EAAECAwQLIAhBqAJqICoQ4QRFDQQMBgsCfyAIQagCaiEDAn8gKkKAgICAgICAgIB/UQRAQQEgAykDACIqQgBZDQEaIAMgKkKAgICAgICAgIB/hTcDAEEADAILIANCACAqfRDhBAsLRQ0DDAULIAgpA6gCISsCQAJAICpCAFUEQEEBIQMgK0L///////////8AICqAVQ0CICtCAEKAgICAgICAgIB/ICqAfVkNAQwCCyAqQgBZDQAgK0IAVQRAQQEhA0IAQoCAgICAgICAgH8gK4B9ICpYDQEMAgsgK0IAWQ0AQQEhAyAqQoCAgICAgICAgH9RICtCgICAgICAgICAf1FyDQFCACArfUL///////////8AQgAgKn2AVg0BCyAIICogK343A6gCQQAhAwsgA0UNAgwECyAqUA0EICpCf1EgK0KAgICAgICAgIB/UXENAyAIICsgKn83A6gCDAELICpQDQMg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bkEBaiADRwR/IBsgAyAKQQxqQQIQpwEiAkUEQCABIAMgCigCDCgCBEEAEM0LIQIgCigCDBCmAQsgASgCEAUgAwtBAWo2AhAgGUEBaiEZDAELCwJAAkAgAkHlAEYNACACDQEgASANNgIkIAEgDSABKAIQIgJrQQFqNgIgIAIgDUsNAEEAIQIgASgCKA0BIAEgASgCGBCOARCACyIDKAIANgIsIAMgATYCACABQQE2AigMAQsCQCANDQBBASENIAEoAgQiAhBMIAIoAgQiAkEANgIwIAIQoAciAkHlAEYNACACDQELIAEoAgRBASABKAIIQQFqELUEIgINACABKAIAIgIEQCACELICCyAdQQVGBEAgASgCBEECEMILIgINAQsCQCAVIBpIBEBBkPkDKAIAIQIgASgCBCgCBCgCJCEDIBMoAkAhGSATIApBDGoQtQcgDSAaIBVtIh1qQQFrIB1tIh0gHSACIANuQQFqRmshAyANrCEqIAooAgwhDUEAIQIDQCACIAMgDUtyRQRAQQAhAgJAIANBkPkDKAIAIAEoAgQoAgQoAiRuQQFqRg0AIBMgAyAKQQhqQQAQpwEiAg0AIAooAggQXSECIAooAggQpgELIANBAWohAwwBCwsgKiAVrCIsfiErIAJFBEAgE0EAQQEQsQchAgsgK0GQ+QMoAgAiAyAaaqwiKiAqICtVGyEyIAMgFWqsISoDQCACICogMllyRQRAIApBADYCCCAbICogLH+nQQFqIApBCGpBABCnASICRQRAIBkgCigCCCgCBCAVICoQeiECCyAKKAIIEKYBICogLHwhKgwBCwsgAg0BIwBBEGsiAiQAAkAgGSACQQhqELwBIgMNAEEAIQMgAikDCCArVw0AIBkgKxCSAiEDCyACQRBqJAAgAyICDQEgE0EAEK4HIQIMAQsgEyAVIBptIA1sEKYLIBNBAEEAELEHIQILIAINACABKAIEQQAQrwQiAkHlACACGyECCyAcRQRAIAEoAhhBABCxBRogASgCGEEAEK8EGgsgAUEHIAIgAkGKGEYbNgIcCyAKQRBqJAAgAQR/IAEoAhQhAyABKAIYEEwgASgCAARAIAEoAhgiAiACKAIQQQFrNgIQCyABKAIoBEAgASgCGBCOARCACyEKA0AgCiICKAIAIg1BLGohCiABIA1HDQALIAIgASgCLDYCAAsg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QCAGQQFqIANBIGoQcxogAygCIAwBCyAEQf8BcQsiBEUNAQtB/////wchBQJAIAMoAiQiBy0AAA4CAwACCwJ/IAcsAAEiBUEASARAIAdBAWogA0EcahBzGiADKAIcDAELIAVB/wFxCyIFDQILQYsCIQUMBgtBACEFCyAEIAVHDQIgA0IANwMQIANCADcDCCADQgA3AwAgAyAHIANBLGogBBD5BiIEajYCJCADIAQgBmo2AiggA0EoaiADQRBqEMQDIANBJGogA0EIahDEAyADKQMQIghCAlkEQCADKQMIIglCAVUNAgsgAygCJCEEIAMoAighBgsgAyADKAIsIgdBAWo2AixBACEFIAdBADoAACAAIAMoAiw2AgAgASAGQQFqNgIAIAIgBEEBajYCAAwDCwNAIANBLGogAyAIIAkgCCAJUxsQqgogAyADKQMAQgJ9NwMAAkAgCCAJUQRAIANBKGogA0EQahCYBSADQSRqIANBCGoQmAUMAQsgCCAJUwRAIANBKGogA0EQahCYBQwBCyADQSRqIANBCGoQmAULIAMpAxAiCEL///////////8AUiADKQMIIglC////////////AFJyDQALDAELIAQgBUgEQCADIANBLGoiBSAEEPkGIAZqNgIoIAUgA0EoahCwAgwBCyADIANBLGoiBCAFEPkGIAdqNgIkIAQgA0EkahCwAgsgAygCKCEGDAELCyADQTBqJAAgBQvxAwIDfwJ+IwBBMGsiByQAIAdCADcDKCAHQgA3AyAgB0IANwMYIAcgATYCFCAHIAM2AhAgB0EANgIIIAVBADYCACAGQQA2AgACQCACrCAErHxCEXwQSyIIRQRAQQchAQwBCyAHIAg2AgwgB0EUaiABIAJqIgJBACAHQShqEOkBIAdBEGogAyAEaiIDQQAgB0EgahDpAQJAAkADQCAHKAIUIgEgBygCECIEckUNAQJAQQBBAUF/QQAgBykDKCIKIAcpAyAiC1IbIAogC1UbIglrIAkgABsiCSAERSABRXJyRQRAIAdBDGoiASAAIAdBGGogB0EIaiAKEJkFIAEgB0EUaiAHQRBqEKsKIgENASAHQRRqIAIgACAHQShqEOkBIAdBEGogAyAAIAdBIGoQ6QEMAgtBACAEIAFBAEcgCUEASHEbRQRAIAdBDGoiASAAIAdBGGogB0EIaiAKEJkF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AzYCHEEBIQQLIAEgAzYCACACIARB9sAAQQAgAxsgARDeASACIAEoAhwQJyACIAQQogEhAiABQSBqJAAgAiEBIAYQIyAAIAFFOgDtAUEACyEAIAVBEGokACAAC5oBAQV/AkADQCAARQ0BIAAQTCAAKAIEQQhqIQQDQCAEKAIAIgMEQAJAAkAgAkUNACADLQABQQFxDQACQCADLQAADgMAAgACCyADEO4IIgRFDQEgByAEIAUbIQdBACECIAQhAUEBIQUMBAsgAxDkBCADIAE2AgQgA0EEOgAACyADEKwDIANBGGohBAwBCwsLIAdBACAFGyEGCyAGC7ICAgN/AX4gAC8BBEEBTQRAIAAoAgAiASABKAI4QQFqNgI4An8gACgCDBBDQeQARwRAIABBAToABiAAKAIMEDoMAQsgACAAKAIMQQAQmQE3AyBBAAshACABIAEoAjhBAWs2AjggAA8LIwBBEGsiASQAIAFBADYCDAJAAkAgACgCECICBEADQCAALQAHRQRAIAAoAgwQOhoLIAAgAiABQQxqEKsBIAItACAhAyAAQQE2AlggAEEBOgAHIAAgAzoABiAAIAIpAxg3AyAgA0UEQCAAIAFBDGoQ+AYNAQsLIAEoAgwiAg0CDAELIABBAToABgsgACkDICEEAkAgAC0ANEUEQEEAIQIgBCAAKQNQVQ0BDAILQQAhAiAEIAApA0hZDQELIABBAToABgsgAUEQaiQAIAILpwEBBH8jAEEQayIEJAACQCAAKAIMDQAgAEEMaiEBAkAgACgCACICKALcASIDBEAgASADNgIAIAJBADYC3AEMAQsgBCACKALgATYCAEGdowEgBBBKIgNFBEBBByEBDAILIAIgAigCOEEBajYCOCACKAIMIANBASABEMYGIQEgAiACKAI4QQFrNgI4IAMQIyABDQELIABBAToACEEAIQELIARBEGokACABCxwAAkAgAEUNACAAEPkCQQFHDQAgABBfIQELIAELhyECGX8BfiMAQYABayIIJAAgBCgCAC0AAyEXIAhBADYCbCAIQQA2AmggCEEANgJkIAQoAgQQPSEbIAQoAggQPSEMIAggA0ECdEEIayIJrSIgEEsiCjYCcAJAAkAgCkUNACAKQQAgCRAoIRMgIBBLIhVFDQAgG0EBaiEcIAxBAWohGCAVQQAgCRAoIRkgF0E0RyEa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QCACQf8DQfz6AygCABEAACICQQBIBEBBBSECQYSoBCgCACIBQRRGDQEgARD2BCIDQQVGDQEgACABEJsBIAMPCyAAIAE6ABALIAILGAAgAEEAEKIJGiAAKAIYECMgABC4BkEACwsAIAFBADYCAEEACwkAIAAQuAZBAAuPAQECfwJ/QbzwAy4BACIARQRAQYSoBEEcNgIAQX8MAQsCQAJAIABBfkoNAEHpoAwhAQJAAkACQAJAAkACQAJAIABB/wFxQQFrDgsIAAECAwQEBQUGAwcLQYCACAwIC0GAgAIMBwtBgIAEDAYLQf////8HDAULQQEMBAsQEEEQdgwDC0EADAILIAAhAQsgAQsLrwEBA38jAEGgBGsiAyQAIAMgADYCAEGABCADQRBqQfbAACADEMQBIgIQPSEAAkADQCAAQQBKBEAgACACaiEEIABBAWshACAELQAAQS9HDQEMAgsLIAItAABBL0cEQCACQS46AAALIAJBAWohBAtBACEAIARBADoAACABIAJBAEEAEKcDIgE2AgAgAUEASARAQZiyAhDiAUHZCCACQZiyAhDCASEACyADQaAEaiQAIAALdQEBfyMAQRBrIgMkACADIAI2AgAjAEEQayICJAAgAgJ+IAFBwABxRQRAQgAgAUGAgIQCcUGAgIQCRw0BGgsgAiADQQRqNgIMIAM1AgALNwMAQZx/IAAgAUGAgAJyIAIQFRB3IQAgAkEQaiQAIANBEGokACAACwQAQQALCwAgA0EANgIAQQALBgAgABBQC4YBAQV/AkAgACgCJCICRQ0AIAIoAgAiA0EgaiEEA0AgBCIFKAIAIgZBBGohBCACIAZHDQALIAUgAigCBDYCACACECMgAEEANgIkIAMgAygCHEEBayIENgIcIAQNAAJAIAFFDQAgAygCDEEASA0AIAMoAghB5PoDKAIAEQEAGgsgABClCQtBAAuPBAEIf0GKKCEEAkAgACgCJCIFRQ0AIAUoAgAiBkUNAEEBIAEgAmoiBHRBASABdCIKayEHIAZBJGohBgJAIANBAXEEQCAHIAUvAQoiCCAFLwEMIglycUUNASABIAQgASAEShshCyABIQRBASEDA0AgBCALRkUEQEEAIAMgBiAEQQJ0aigCACAIIAR2QQFxShshAyAEQQFqIQQMAQsLAkAgAwRAIABBAiABQfgAaiACEP8D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AwRAIAAtADQNASAAKAIAKAIIECNB/ZUBQQAQSiEBIAAoAgAgATYCCEEBQQcgARshAgwBCyAALQAVBEACfyAFIAUoAgBBAnStEEsiBjYCECAGRQRAIAVBAToAFEEHDAELIAVBAEEAEOQGQQALDQELAkAgAUEDRgRAQQAhAiADQQA2AgwgBCgCBBArIgFFDQMgACAEKAIEEGAiAqxCAXwQSyIENgIcIARFBEBBByECDAQLIAQgASACQQFqECUaAkACQCABLQAAQSRHBEAgAyABNgIMDAELQQAhAiAFQQAgACgCHEEBakEAIANBDGoQkwchBCADKAIMIgFFDQELIAAoAgAoAggQIyABEPAKIQEgACgCACABNgIIIAAQkQVBAUEHIAAoAgAoAggbIQIMBAsgBEUNAyAAKAIoIQIMAQsgACgCKCICIQQLIAAgBCACa0EMbSICNgIIIAAgAjYCDCAAIAQtAAAiAToAFCABQQZPBEBBACECIARBADYCCCAAIAAoAgwiBUEBaiIBIAQoAgRqNgIQIAAtABUEQCAAIAAoAigiBCAAKAIwIAVBAnRqKAIAQQxsai0AADoAFCAFRQ0DIAQgBUEBayIBQQxsai0AAUHAAHFFDQMgACABNgIMDAMLIAAgATYCDAwCCyAAIAJBAWo2AhBBACECDAELIAAQkQULIANBEGokACACCw0AIAAQkQUgABAjQQALkAIBB38jAEEQayIEQn83AgggASgCACIAQQAgAEEAShshByABKAIEIQADQCADIAdGRQRAAkAgACgCACIGQQhIDQBBASAGQQhrIgh0IQYgAC0ABUUEQCACIAZyIQIMAQsgAC0ABEECRw0AIARBCGogCEECdGogAzYCACAFIAZyIQULIABBDGohACADQQFqIQMMAQsLQRMhACACIAVBf3NxRQRAQQAhACABAn9BACAEKAIIIgJBAEgNABogAUKAgICAgICA+D83AyggASgCECIFIAJBA3RqIgJBAToABCACQQE2AgBBASAEKAIMIgRBAEgNABogBSAEQQN0aiIDQQE6AAQgA0ECNgIAQQMLNgIUCyAAC0AAIABBzMMBEIgEIgIEfyACBSAEQQwQVyIBNgIAIAFFBEBBBw8LIAFCADcCACABQQA2AgggAEECQQAQzQlBAAsLDgAgASAANAIMNwMAQQALYgACQAJAAkAC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ACEQDAILIAUgARCEAyAFaiEFIAEpAwAhECAALQDvAQRAIBIgEH0hEkIAIRAMAgsgECASfCESQgAhEAUgASgCQCABKAJEIAkgAyASIAEoAgggECAVfEICfSIQpxDwBiAUhSEUCwwACwALAAsgAUEYahCIAyAEIAU2AiwgAUHgAGokACATIBSFIRMgA0EBaiEDDAALAAsgAhA6IQMgAQRAIAEhAwwDCyADDQIgACgCJCgCACEKIARBADYCJCAEIAAoAuABNgIAAkBBrDUgBBBKIgFFBEBBByEDIARBBzYCLAwBCyAEIAAoAgwgAUF/IARBJGpBABCXAyIDNgIsIAEQIwsDQAJAIAMNACAEKAIkEENB5ABHDQBBACEDIAQoAiRBABCZASEQIAAgBCgCJBD0BiEJQQAhAQNAIAMNAiABIAAoAhhODQIgACgCICABai0AAARAIAFBAWohAUEAIQMMAQsgBCgCJCABQQFqIgIQiwIhAyAEQQA2AiAgACgCJCAJIANBfyAEQSBqENgCIQUgBCgCICEIA0AgBUUEQCAEQQA2AhggBEEANgIUIARBADYCECAEQQA2AgwgCCAEQRxqIARBGGogBEEUaiAEQRBqIARBDGogCigCFBEJACIFDQEgBCgCHCILIAQoAhgiDCAJQQAgECABIAQoAgwiDhDwBiARhSERQQEhAyAAKAKAAiINQQEgDUEBShshDQNAIAMgDUYNAiAMIAAoAoQCIANBGGxqKAIAIg9OBEAgCyAPIAkgAyAQIAEgDhDwBiARhSERCyADQQFqIQMMAAsACwsgCARAIAggCigCEBEBABoLQQAgBSAFQeUARhshAyACIQEMAAsACwsgBCgCJBCYARoMAgsgBCgCLCEBDAALAAsgBiARIBNRNgIMIARBMGokACADIQEgBigCDCECIAZBEGokACABQYsCIAEgAnIbDAILIAJBzKQBQQYQSEUEQCMAQRBrIgMkACADIAJBBmo2AgggA0EIahDzBiEGQQghAQJAIAMoAggiBC0AACIFQSxGBEBBASECIAQtAAFFDQEgAyAEQQFqNgIIIANBCGoQ8wYhASADKAIILQAAIQULQQEhAiAFIAFBAkhyDQAgA0EANgIMAkAgAC0A7QFFBEAgA0EMaiAAEP0GIAMoAgwiAg0BCyAAIAYgARC9CiECCyAAEJMCCyADQRBqJAAgAgwCC0EBIQEgA0ELSQ0AIAJByKQBQQoQSA0AIwBBEGsiASQAIAEgAkEKajYCDCABQQA2AgggAUEANgIEIABBCEEIIAFBDGoQ8wYiAiACQRBKGyACQQFGGzYCMAJAIAAtAO0BRQRAIAFBCGogABD9BiABKAIIIgINAQsgAEEXIAFBBGpBABBSIgINACABKAIEIgJBAUECEHUaIAJBAiAAKAIwEHUaIAIQQxogAhA6IQILIAFBEGokACACIQELIAELNgIMQQAhBQwCCyAEQQJ0IAJqKAIQEGlBAE4NACAHQRM2AgxBACEFDAELIAA0AhhCA4ZCCHwQSyIFRQRAIAdBBzYCDEEAIQUMAQsgBUEAIAAoAhhBAWoiCkEDdBAoIQlBACEEIwBBEGsiBiQAAkAgACgCjAINACAAQRAgBkEMakEAEFIiBA0AIAYoAgwiBEEBEPoCGiAEEEMaIAQQOiEECyAGQRBqJAAgByAENgIMIAQNAAJAIAFBAkgNACAAKAIoDQAgACgCGEECdCACaigCDCIEEC9BBUYEQCACKAIEIQQLIAQQL0EFRg0AIAIoAgAiBhAvQQVHBEAgBhBfIAQQX1ENAQsgBwJ/IAAoAgwtAFxBv+wBai0AAEEFRgRAIAAgBCAHQQhqIAkQogoMAQtBASEIIAAgAiADEKEKCyIENgIMIAQNAQsgCkECdCAJaiEEIAIoAgAiBhAvQQVHBH8gByAAIAYgB0EIaiAJEKIKIgY2AgwgBkUFQQELRSABQQJIckUEQCAAKAIYQQJ0IAJqKAIQEGkhAQJAAkAgCA0AIAcgACACIAMQoQoiBjYCDCAGRQ0AIAZBE0cNASAAKAIoDQEgB0GLAjYCDAwBCyAHIABBACABIAMpAwAQ9wYiAzYCDCADDQBBAiEDA0ACQCAAKAIYQQJqIANMBEBBACEGDAELIANBAmsiBiAAKAIgai0AAEUEQCAAIAEgAiADQQJ0aiIIKAIAECsgBiAEIAZBAnRqEPYGIgYNASAIKAIAEGAhBiAEIAAoAhhBAnRqIgggBiAIKAIAajYCAAsgA0EBaiEDDAELCyAHIAY2AgwLIAAtAO4BBEAgB0EMaiAAIAQQoAoLIAcgBygCCEEBajYCCAsgAC0A7AFFDQAgB0EMaiAAIAQgCSAHKAIIEJ8KCyAFECMgABCTAiAHKAIMIQAgB0EQaiQAIAALDgAgASAAKQMgNwMAQQALsQEBAn8CQAJAAkACQAJAAkAgAiAAKAIAIgQoAhgiA2sOAwABAgMLIAEoAgAiARCcASABQQE7ARAgASAAQY/CAEEAEOkJQQAPCyABIAApAyAQYwwCCyAAKAIQBEAgASAANAIUEGMMAgsgAyECIAQoAiwNACABQQAQgAFBAA8LQQAgABCdBSIDDQEgACgCDCIAEOQJQQFrIAJMDQAgASAAIAJBAWoQ4wkQywELQQAhAwsgAwscACAALQAGRQRAQQAPCyAAEIEHIABBAToABkEBC80JAg5/AX4jAEEwayIIJABBASEDAkAgACgCACIGKAI4DQAgAUH//wNxIgsEfyAEKAIAIQlBAQVBAAshAyABQYCABHEEQCAEIANBAnRqKAIAIQUgA0EBaiEDCyABQYCACHEEQCAEIANBAnRqKAIAIQwgA0EBaiEDCyABQYCAEHEEQCAEIANBAnRqKAIAIQoLIAAQgQcgACAMQoCAgICAgICAgH8Qwwo3A0ggACAKQv///////////wAQwwo3A1ACfyACBEAgAi0AAEHEAEYMAQsgBi0A7wELIQIgACABOwEEIAAgAjoANCALQQJPBEAgCRArIgJFBEBBByEDIAkQL0EFRw0CC0EAIQMgAEEANgIUIAUEQCAAIAUQaSIDNgIUCyAGKAIkIQ8gBigCHCEQIAYtAOwBIREgBigCGCESIAZBCGohDSMAQSBrIgUkACAAQRBqIQcjAEEwayIEJAAgBEEANgIoIARCADcDICAEIAtBAms2AhwgBCASNgIYIAQgEDYCECAEIAM2AgwgBCAPNgIIIAQgETYCFAJAIAJFBEAgB0EANgIADAELIARBCGogAiACED0gByAEQSxqELQKIgNBASADIAQoAigbIAMbIQ4LIARBMGokAAJAAkAgDiIEDQBBACEDIAcoAgBFDQEgB0EMEJsFIgQNACAHKAIAQQwQuAoiBEUNAQsgBygCABCOAiAHQQA2AgBBASEDIARBAUcEQCAEIgNBEkcNASAFQQw2AgAgDUGKwQEgBRDOAUEBIQMMAQsgBSACNgIQIA1B/IkBIAVBEGoQzgELIAVBIGokACADDQEjAEEgayIFJAAgACgCACECIAVBADYCHCAFQQA2AhggBUEANgIUIAAgACgCECAFQRhqIAVBFGogBUEc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BBCjAkUgA0EBR3JFBEAgACACKAIEEMsBDAELIAAgAxDYAQsgAUFAaxCsBAsgBCAHNgLoAiABQdACaiQAC/ECAQZ/IwBBoAJrIgEkACAAEH8hBCACKAIAEGkhAyACKAIEECshBiACKAIIEGkhBSAEKAIQIANBBHRqKAIAIQIgBCgC6AIhCCAEQQA2AugCAkAgAUEQaiACIAQgBiADQQFGEK0EIgINAAJAAkAgASgC/AEiAkUNACACLgEiIgNBAUYNACADIAVKDQELQafsBhApIQIMAQsgAUEQakEAIAVBDGwiByACKAIEaigCABCWASEDAkAgAi4BIkEBayAFSgRAIAFBEGpBACAHIAIoAgRqKAIMEJYBKAIEIQUgAygCBCECDAELIAYgAigCLGohBSADKAIEIQIDQCACLQAAIgdFIAdBLEZyDQEgAyACQQFrIgI2AgQMAAsACyABIAU2AgggASAGNgIEIAEgAiAGazYCACAAIARB4CwgARA8IgJBf0F/ED8gAhAjQQAhAgsgAUEQahCsBCAEIAg2AugCIAIEQCAAIAIQ2AELIAFBoAJqJAALmQMCB38CfiMAQbACayIBJAAgABB/IQMgAigCABArIQUgAigCBBArIQQgAigCEBBpIQcgAykDICELIAIoAhQQKyEGIAIoAhgQaSEIIAMoAugCIQkgA0EANgLoAiAFRSAERXJFBEAgAykDICEKIAgEQCADIApC/////3mDNwMgCyABQSBqIAUgAyAEIAcQrQQhBCADIAMpAyAgCkKAgICABoOENwMgAkACQCAEDQACQCALQoCAgCCDIgpCAFINACABKAKMAiIERQ0AIAQtACtBAkcNACABQQA2AhwgAUIANwIUIAFCADcCDCABQgA3AgQgASABQSBqIgU2AgAgBSAEKAIsIAEQ4AEgASgCLEEAIAEoAkQbIQQMAQsgASgClAIiBEUNASADIApQBH8gAUEgahCuBSIEDQEgASgClAIFIAQLKAIYEE4gAyAFEOcCRw0BIABBARCAAQwBCyAERSAGRXINACADEKMCDQAgACAGIAIoAgggAigCDCABQSBqEJgHCyABQSBqEKwECyADIAk2AugCIAFBsAJqJAALQAEBfwJAIAEtAABBpwFHDQAgAS0AB0EDcQ0AIAAoAhgiAigCDCABKAIsRw0AIAAoAgAgAiABQSxqEJYBGgtBAAt2AQR/QQEhAiABLwEGQaAIcQR/QQEFIAEoAiAiA0UEQEECDwsgACgCGCEEQQAhAgNAIAMoAgAgAkoEQCADIAJBBnRqIgUoAhggBCgCDEYEQCAAKAIAIAQgBSgCEBCWARoLIAJBAWohAgwBCwsgACABEL8HQQALC7kHAgl/AX4jAEHwAmsiASQAIAAQfyEGIAIoAgAQKyEDIAIoAgwQKyEIIAIoAhAQKyEHIAIoAhQQKyEKIAIoAhgQaSEEIApFIAhFIAdFcnJFBEAgBigC6AIhCyAGQQA2AugCIAYQ9wEgAUEANgJYIAFCADcDUCABQgA3A0ggBiAHIAMQfCEFIAFBADYCPCABQgA3AjQgASAFNgJUIAFB2gA2AjAgAUHbADYCLCABIAFByABqNgJAIAEgAUHgAGoiBTYCKAJAIAUgAyAGIAggBBCtBCIDDQAgBikDICIMp0GAgIAgcSEFAkACQCABKALMAiIEBEAgBC0AKyIDQQJGBEAgBQ0DIAQoAiwhAyABQQA2AiQgAUIANwIcIAFCADcCFCABQgA3AgwgASABQeAAaiIFNgIIIAMgAygCBEH///9+cTYCBCAFIAQoAiwgAUEIahDgASABKAKEAQ0CIAFBKGogBCgCLBBqGgwDCwJAIAxCgIABg1AgBUEAR3EgA0EBRnINACAEQTBqIQMDQCADKAIAIgNFDQEgAygCCCIJIAcQU0UEQCABQeAAaiABQcgAaiAJEJYBGgsgA0EEaiEDDAALAAsgByAEKAIAIgMQUw0CIAEgBDYCVCABQeAAaiABQcgAaiAFBH8gAwUgAUEoaiAEKAIQEGUaIAQoAgALEJYBGgwCCyABKALQAiIDBEAgAUHgAGogAUHIAGogAygCABCWARogBQ0CIAFBKGogASgC0AIoAiQQTRoMAgsCQCABKALUAiIEKAIEIgMgBxBTDQAgASgCVCgCPCAEKAIYRw0AIAFB4ABqIAFByABqIAMQlgEaCyAFDQEgAUHgAGoQrgUiAw0CIAFBKGogBBCaByAEQRxqIQMDQCADKAIAIgRFDQICQCAEKAIMIgNFDQAgAyAHEFMNACABQeAAaiABQcgAaiADEJYBGgtBACEDAkAgBCgCECIFRQ0AA0AgAyAFKAIATg0BIAUgA0EGdGooAhAiCSAHEFNFBEAgAUHgAGogAUHIAGogCRCWARogBCgCECEFCyADQQFqIQMMAAsACyAEQShqIQMMAAsACyABKAJsIgMNAQsgACABQcgAaiAIIApBARCZByEDCwJAAkACQCADDgICAAELIAYQowJFDQAgACACKAIMEMsBDAELIAEoAmQEQCAAQa3lASACKAIEIAIoAgggAUHgAGoQmAcMAQsgACADENgBCyABQeAAahCsBCAGIAEoAkgQrQUgBiALNgLoAgsgAUHwAmokAAsHACAAKAIwC4IBAQJ/IAAoAhghAgJAIAEtAAAiA0GnAUcEQCADQc0ARw0BIAIoAgggAS4BIEcNASAAKAIAIgAoAnggAigCDEcNASAAIAIgARCWARoMAQsgAigCCCABLgEgRw0AIAEtAAdBA3ENACACKAIMIAEoAixHDQAgACgCACACIAEQlgEaC0EACyABAX9BASECIAEvAQZBoAhxBH9BAQUgACABEL8HQQALC6EJAQx/IwBB0AJrIgEkACAAEH8hBiACKAIAECshCyACKAIMECshByACKAIQECshCCACKAIUEGkhBSACKAIYECshDCACKAIcEGkhDSACKAIgEGkhBAJAIAtFIAhFciAMRSAFQQBIcnINACAGKALoAiEOIAYQ9wEgBiAIIAcQfCIDRQ0AIAUgAy4BIk4NACADKAIEIAVBDGxqKAIAIQkgAUEANgLIAiABQgA3A8ACIAFCADcDuAIgAUF/IAUgBSADLgEgRhs2AsACIAZBADYC6AIgAUEoaiIKIAcgBiALIAQQrQQhBCABQQA2AhwgAUIANwIUIAFB2AA2AhAgAUHZADYCDCABIAM2AsQCIAEgAUG4Amo2AiAgASAKNgIIAkAgBA0AAkACQCABKAKUAiIEBEACQAJAIAQtACsOAwEEAAQLIAQoAiwiAyADKAIEQf///35xNgIEIAFBADYCNCABQShqIANBABDgAUEHIAEoAjQgBi0AVxsiBA0EIAFBCGogAxBqGgwDCyAIIAQoAgAQUyEHIAEgBDYCxAIgBw0BIAQuASIgBUoEQCABQShqIAFBuAJqIAQoAgQgBUEMbGooAgAQlgEaCyABKALAAkEASARAIAFBKGogAUG4AmogASgClAJBIGoQlgEaCyABQQhqIAEoApQCKAIQEGUaIAEoApQCQQhqIQMDQCADKAIAIgMEQCABQQhqIAMoAigQZRogA0EU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QAJAIAIgBUYNACADIAogAkECdCIIaigCACIETwRAIAcgBiAIaigCACAEEFFFDQELIAJBAWohAgwBCwsgAiAFTw0BIAQgB2ohByADIARrIgMNAAtBACEDCwJAIAFBAnFFIANFckUEQANAIAMhAUEAIQIDQCACIAVGDQMCQCAKIAJBAnQiCGooAgAiBCABTQRAIAcgASAEayIDaiAGIAhqKAIAIAQQUUUNAQsgAkEBaiECDAELC0EAIQEgAw0ADAILAAsgAyEBCyAJRQ0BIAYQIwwBCyADIQELIAAgByABQX8QPwsLFAAgACACKAIAEGkQsQlBf0EAED8LoQEBBH8gAigCABArIgEEQCAAAn8jAEEQayICJAAgAkEMahCyCSABQQBBByABQauJAUEHEEgbaiIEEDEhASACKAIMIgBBACAAQQBKGyEFQQAhAANAAkAgACAFRwRAIAQgAEECdEGwrQNqKAIAIgYgARBIDQEgASAGai0AABCABQ0BQQEhAwsgAkEQaiQAIAMMAgsgAEEBaiEADAALAAsQgAELCw0AIABBgAhBf0EAED8LzgECAn8CfiMAQTBrIgEkACABQRhqIgRBAEEAQQAgAigCABCNAiICKAIUQeQAbEHkAGoQmgEgASACQQRBCCACLQAYG2o1AgA3AxAgBEGjDiABQRBqED4DQCADIAIoAhRORQRAIAEgAigCICADQQJ0aigCAEEBaq0iBSACKAIIIgStfEIBfSAFgCIGQgJRBH5CAkIBIARBCmytIAVCC35WGwUgBgs3AwAgAUEYakGiDiABED4gA0EBaiEDDAELCyAAIAFBGGoQnQcgAUEwaiQAC44CAQN/IAIoAgAQjQIhASACKAIEEGkhAgJAIAEoAggEQCACQQAgAkEAShshBANAIAMgBEYEQANAIAIgASgCEE4NBCACQQJ0IgMgASgCIGoiBCAEKAIAQQFqNgIAIAEoAhwgA2pBATYCACACQQFqIQIMAAsABSABKAIcIANBAnRqIgUgBSgCAEEBajYCACADQQFqIQMMAQsACwALQQAhAgNAIAIgASgCEE4NASABKAIcIAJBAnRqQQE2AgAgAkEBaiECDAALAAsgASABKAIIQQFqIgI2AggCQCABKAIMIgNFDQAgAiADIAEtABgiA0EBamxNDQAgASADQQFqOgAYIAAgASgCICgCAEEA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QCACQacBaw4GAQECAgIAAgsgAS0AB0EBcUUNASADIQIDQCACKAIAIgBFDQEgAEEkaiECQQEhBCABKAIsIABHDQALDAILQQIhBCAFKAIAIgAtAFcNAQJ/AkACQCADKAIIIgIEf0EAIQADQCACKAIAIABKBEBBACACIABBBHRqKAIIIAFBfxBrRQ0EIABBAWohACADKAIIIQIMAQsLIAUoAgAFIAALIAFBABA2IgBFDQAgAC0AAEGoAUcNACAAQawBOgAACyADIAUgAygCCCAAEDsiAjYCCEF/IQBBAQwBCyADKAIIIQJBAAshBiACBEAgASABKAIEIgJBgICAwAByNgIEIAUoAgAgARAuIAFBAEE0ECgiAUGnAToAACABIAYEfyADKAIIKAIAQQFrBSAACzsBICABIAMoAgAoAjA2AhwgAygCDCEAIAEgAkGABHE2AgQgASAANgIsCyAFKAIALQBXDQELQQAhBAsgBAswAQJ/IAEgACgCGCICKAIQIgNGBEBBAA8LIAIgATYCECAAIAEQahogAiADNgIQQQELqgEBA38CQCABKAIEQYCABXENACABKAIoIgJFDQAgAS4BIiEDIAAoAgAiBCgCACEAAkAgAS0AAEGpAUYEQCACKAIcIANBFGxqKAIEIAFHDQIgACABQQAQNiIBRQ0CIAIoAhwgA0EUbGogATYCBAwBCyACKAIoIANBFGxqKAIAIAFHDQEgACABQQAQNiIBRQ0BIAIoAiggA0EUbGogATYCAAsgBCABENcHC0EAC9wGAQh/IAAoAhgiAygCCCEEIAMoAgAhBQJAAkACQAJAIAEtAABBpwFrDgMAAQADCyADKAIEIgBFDQEgACgCACIDQQAgA0EAShshAyAAQQhqIQBBASEGA0AgAiADRg0DIAEoAhwiByAAKAIoRgRAQQAhACAEKAIgIgJBACACQQBKGyEDIAQoAhwhAgJAA0AgACADRwRAIAcgAigCCEYEQCACLwEQIAEvASBGDQMLIAJBFGohAiAAQQFqIQAMAQsLIAUoAgAhAiMAQRBrIgAkACAEIAIgBCgCHCAEQSBqIABBDGoQlAs2AhwgACgCDCECIABBEGokACACIgBBAEgNACAEKAIcIABBFGxqIgMgASgCLDYCACADIAEoAhwiBzYCCCADIAEvASAiCDsBECAFIAUoAixBAWoiAjYC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QQFGDQILIAAtAABBpwFHDQAgACgCLCIARQ0AIAAtACtBAUYNAQtBACECCyACCzIAAkAgACgCACIAKAKIAkUNACABKAI0DQAgARDIBygCQCIBRQ0AIAAgASgCCDYCiAILCwMAAQsLACAAQQA7ARRBAgsmACAAKAIQKAIcQShqQdzcAEEAEKgBGiAAIAEoAgQQOSAAIAEQJwsLloQExwIAQYAIC+feATMuMzkuMwB7fQAlcy4legBhZmZpbml0eQBSZWFsQWZmaW5pdHkAYnVzeQB0ZW1wX3N0b3JlX2RpcmVjdG9yeQBub3QgYSB3cml0YWJsZSBkaXJlY3RvcnkAb3BlbkRpcmVjdG9yeQBzaHJpbmtfbWVtb3J5AG91dCBvZiBtZW1vcnkAZmFpbGVkIHRvIGFsbG9jYXRlICV1IGJ5dGVzIG9mIG1lbW9yeQBIQVZJTkcgY2xhdXNlIG9uIGEgbm9uLWFnZ3JlZ2F0ZSBxdWVyeQBJbnRDb3B5AFNDb3B5AFZEZXN0cm95AE11bHRpcGx5AHF1ZXJ5X29ubHkAdW5saWtlbHkAdGFibGUgIiVzIiBoYXMgbW9yZSB0aGFuIG9uZSBwcmltYXJ5IGtleQBmb3JlaWduIGtleQBqc29uX2dyb3VwX2FycmF5AGpzb25fYXJyYXkAanVsaWFuZGF5AGZ0czRhdXgAdW5peABzcWxpdGVfcmVuYW1lX3F1b3RlZml4AHByZWZpeABMSUtFIG9yIEdMT0IgcGF0dGVybiB0b28gY29tcGxleABoZXgAY2hhcmluZGV4AE9wZW5BdXRvaW5kZXgAYXV0b21hdGljX2luZGV4AGF1dG8taW5kZXgAb3JwaGFuIGluZGV4AERyb3BJbmRleABpZHgAUmVvcGVuSWR4AHBjeABtYXgATWVtTWF4ACUwMngAMHgAIEZST00gJyVxJy4nJXElcycgQVMgeABDUkVBVEUgVEFCTEUgeABydwBwc293AGltcGxpZXNfbm9ubnVsbF9yb3cAbm93AGludGVnZXIgb3ZlcmZsb3cAcGFyc2VyIHN0YWNrIG92ZXJmbG93AHdpbmRvdwBzaGFkb3cAUmVzdWx0Um93AElmTnVsbFJvdwBuZXcAbm8gc3VjaCB2aWV3AGNhbm5vdCBtb2RpZnkgJXMgYmVjYXVzZSBpdCBpcyBhIHZpZXcAQ2Fubm90IGFkZCBhIGNvbHVtbiB0byBhIHZpZXcAY2Fubm90IFVQU0VSVCBhIHZpZXcAUHJldgBzdGRldgAgJWxsdQAlYyV1ACUuKno6JXUARnJhZ21lbnRhdGlvbiBvZiAlZCBieXRlcyByZXBvcnRlZCBhcyAlZCBvbiBwYWdlICV1AE11bHRpcGxlIHVzZXMgZm9yIGJ5dGUgJXUgb2YgcGFnZSAldQB1bmFibGUgdG8gdXNlIGZ1bmN0aW9uICVzIGluIHRoZSByZXF1ZXN0ZWQgY29udGV4dABTb3J0ZXJOZXh0AFZOZXh0AGluY29tcGxldGUgaW5wdXQAYnVzeV90aW1lb3V0AGxvY2FsaG9zdABjYW5ub3QgZHJvcCBjb2x1bW4gIiVzIjogbm8gb3RoZXIgY29sdW1ucyBleGlzdABwZXJzaXN0AGZvcmVpZ25fa2V5X2xpc3QAaW5kZXhfbGlzdABmdW5jdGlvbl9saXN0AGNvbGxhdGlvbl9saXN0AGRhdGFiYXNlX2xpc3QAbW9kdWxlX2xpc3QAUFJBR01BIHRhYmxlX2xpc3QAcHJhZ21hX2xpc3QAc2V0IGxpc3QAVmFsdWVMaXN0AHNxbGl0ZV9yZW5hbWVfdGVzdABSb3dTZXRUZXN0AFNlcXVlbmNlVGVzdABmYXN0AExhc3QAQ2FzdABzcXJ0AFNvcnRlclNvcnQAanNvbl9pbnNlcnQASWR4SW5zZXJ0AFNvcnRlckluc2VydAByZXN0YXJ0AGNvdABCaXROb3QASWZOb3QAUGFnZWNvdW50AGZyZWVsaXN0X2NvdW50AG1heF9wYWdlX2NvdW50AFJlc2V0Q291bnQAd2FsX2F1dG9jaGVja3BvaW50AHdhbF9jaGVja3BvaW50AENoZWNrcG9pbnQAU2F2ZXBvaW50AGEgQ0hFQ0sgY29uc3RyYWludAAlc09OIENPTkZMSUNUIGNsYXVzZSBkb2VzIG5vdCBtYXRjaCBhbnkgUFJJTUFSWSBLRVkgb3IgVU5JUVVFIGNvbnN0cmFpbnQAQ3Vyc29ySGludABfY29udGVudABwYXJlbnQARElTVElOQ1QgYWdncmVnYXRlcyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgYXJndW1lbnQAY29tbWVudABBUEkgY2FsbGVkIHdpdGggZmluYWxpemVkIHByZXBhcmVkIHN0YXRlbWVudABBUEkgY2FsbGVkIHdpdGggTlVMTCBwcmVwYXJlZCBzdGF0ZW1lbnQATWF4UGdjbnQAZGVmYXVsdCB2YWx1ZSBvZiBjb2x1bW4gWyVzXSBpcyBub3QgY29uc3RhbnQATXVzdEJlSW50AENhbm5vdCBhZGQgYSBjb2x1bW4gd2l0aCBub24tY29uc3RhbnQgZGVmYXVsdABIYWx0AGxhbm9pdABzdGF0X2luaXQASW5pdABBdXRvQ29tbWl0AGFuYWx5c2lzX2xpbWl0AHNvZnRfaGVhcF9saW1pdABoYXJkX2hlYXBfbGltaXQAam91cm5hbF9zaXplX2xpbWl0AE9mZnNldExpbWl0AFNlZWtIaXQAT04gY2xhdXNlIHJlZmVyZW5jZXMgdGFibGVzIHRvIGl0cyByaWdodABTaGlmdFJpZ2h0AGhnaHQAU2hpZnRMZWZ0AE9mZnNldAByZXNldABqc29uX3NldAB0b28gbWFueSBjb2x1bW5zIGluIHJlc3VsdCBzZXQAJXIgT1JERVIgQlkgdGVybSBkb2VzIG5vdCBtYXRjaCBhbnkgY29sdW1uIGluIHRoZSByZXN1bHQgc2V0AHNuaXBwZXQAc3RhdF9nZXQAc3FsaXRlX2NvbXBpbGVvcHRpb25fZ2V0AHN0cmljdABOb0NvbmZsaWN0AGpzb25fZ3JvdXBfb2JqZWN0AGpzb25fb2JqZWN0AGpzb25fZXh0cmFjdABTdWJ0cmFjdABsc3RhdABmc3RhdAAlc19zdGF0AHRibCxpZHgsc3RhdAB1bnN1cHBvcnRlZCBmaWxlIGZvcm1hdABncm91cF9jb25jYXQAQ29uY2F0AEx0AEd0AGRlZmVyX2ZvcmVpZ25fa2V5cwBhbHdheXMAcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdmlld3MAc3RhdHVzAHN5bmNocm9ub3VzAGluZGV4ICVzIGFscmVhZHkgZXhpc3RzAG91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzACVzICVUIGFscmVhZHkgZXhpc3RzAHRyaWdnZXIgJVQgYWxyZWFkeSBleGlzdHMATm90RXhpc3RzAGlnbm9yZV9jaGVja19jb25zdHJhaW50cwBDSEVDSyBjb25zdHJhaW50cwBleHByZXNzaW9ucyBwcm9oaWJpdGVkIGluIFBSSU1BUlkgS0VZIGFuZCBVTklRVUUgY29uc3RyYWludHMAanNvbl9vYmplY3QoKSByZXF1aXJlcyBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMAanNvbl8lcygpIG5lZWRzIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzACVzX3NlZ21lbnRzAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IHVzZXItZnVuY3Rpb24gZHVlIHRvIGFjdGl2ZSBzdGF0ZW1lbnRzAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IGNvbGxhdGlvbiBzZXF1ZW5jZSBkdWUgdG8gYWN0aXZlIHN0YXRlbWVudHMAb2Zmc2V0cwByZXZlcnNlX3Vub3JkZXJlZF9zZWxlY3RzAGlpc3Nzc3NzAGlzcwBzZXNzAHVuY29tcHJlc3MAY2Fubm90IG9wZW4gc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IHJlbGVhc2Ugc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IGNvbW1pdCB0cmFuc2FjdGlvbiAtIFNRTCBzdGF0ZW1lbnRzIGluIHByb2dyZXNzAGNhbm5vdCBWQUNVVU0gLSBTUUwgc3RhdGVtZW50cyBpbiBwcm9ncmVzcwBhY2Nlc3MAcGFyYW1ldGVycwByZWN1cnNpdmVfdHJpZ2dlcnMAdGhlIElOREVYRUQgQlkgY2xhdXNlIGlzIG5vdCBhbGxvd2VkIG9uIFVQREFURSBvciBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIE5PVCBJTkRFWEVEIGNsYXVzZSBpcyBub3QgYWxsb3dlZCBvbiBVUERBVEUgb3IgREVMRVRFIHN0YXRlbWVudHMgd2l0aGluIHRyaWdnZXJzAHF1YWxpZmllZCB0YWJsZSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgb24gSU5TRVJULCBVUERBVEUsIGFuZCBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAQ2hpbGQgcGFnZSBkZXB0aCBkaWZmZXJzAHVuYWJsZSB0byBjbG9zZSBkdWUgdG8gdW5maW5hbGl6ZWQgc3RhdGVtZW50cyBvciB1bmZpbmlzaGVkIGJhY2t1cHMAYWNvcwBJZlBvcwBjb21waWxlX29wdGlvbnMARElTVElOQ1QgaXMgbm90IHN1cHBvcnRlZCBmb3Igd2luZG93IGZ1bmN0aW9ucwBGSUxURVIgY2xhdXNlIG1heSBvbmx5IGJlIHVzZWQgd2l0aCBhZ2dyZWdhdGUgd2luZG93IGZ1bmN0aW9ucwBub24tZGV0ZXJtaW5pc3RpYyBmdW5jdGlvbnMAaW5kZXggZXhwcmVzc2lvbnMAU0VMRUNUcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgJXMgZG8gbm90IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHJlc3VsdCBjb2x1bW5zAHZpcnR1YWwgdGFibGVzIGNhbm5vdCB1c2UgY29tcHV0ZWQgY29sdW1ucwBnZW5lcmF0ZWQgY29sdW1ucwB0YWJsZSAlcyBoYXMgJWQgdmFsdWVzIGZvciAlZCBjb2x1bW5zAHJhZGlhbnMAYWxsIFZBTFVFUyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHRlcm1zAGVtcHR5X3Jlc3VsdF9jYWxsYmFja3MATG9hZEFuYWx5c2lzAGZsZ3MAZmxhZ3MAdmZzACVkIGNvbHVtbnMgYXNzaWduZWQgJWQgdmFsdWVzAEpTT04gY2Fubm90IGhvbGQgQkxPQiB2YWx1ZXMAZmFpbGVkIG1lbW9yeSByZXNpemUgJXUgdG8gJXUgYnl0ZXMAcGFydGlhbCBpbmRleCBXSEVSRSBjbGF1c2VzAHNob3J0X2NvbHVtbl9uYW1lcwBmdWxsX2NvbHVtbl9uYW1lcwB1bmFibGUgdG8gb3BlbiBhIHRlbXBvcmFyeSBkYXRhYmFzZSBmaWxlIGZvciBzdG9yaW5nIHRlbXBvcmFyeSB0YWJsZXMAY2Fubm90IGNyZWF0ZSB0cmlnZ2VycyBvbiB2aXJ0dWFsIHRhYmxlcwAlcyBSRVRVUk5JTkcgaXMgbm90IGF2YWlsYWJsZSBvbiB2aXJ0dWFsIHRhYmxlcwBjYW5ub3Qgam9pbiB1c2luZyBjb2x1bW4gJXMgLSBjb2x1bW4gbm90IHByZXNlbnQgaW4gYm90aCB0YWJsZXMAQVVUT0lOQ1JFTUVOVCBub3QgYWxsb3dlZCBvbiBXSVRIT1VUIFJPV0lEIHRhYmxlcwAlcyBjYW5ub3QgdXNlIHZhcmlhYmxlcwB0b28gbWFueSBTUUwgdmFyaWFibGVzAHN1YnF1ZXJpZXMAY2Fubm90IHVzZSB3aW5kb3cgZnVuY3Rpb25zIGluIHJlY3Vyc2l2ZSBxdWVyaWVzAGNvdW50X2NoYW5nZXMAdG90YWxfY2hhbmdlcwBkZWdyZWVzAFJFVFVSTklORyBtYXkgbm90IHVzZSAiVEFCTEUuKiIgd2lsZGNhcmRzAHRocmVhZHMAYWJzAC4lLipzAENSRUFURSAlcyAlLipzAENSRUFURSVzIElOREVYICUuKnMAaW52YWxpZCB1cmkgYXV0aG9yaXR5OiAlLipzAHVua25vd24gdGFibGUgb3B0aW9uOiAlLipzACUuKnMlcwAsJXMlcyVzAFNDQU4gJXMlcyVzAHNxbGl0ZV9hbHRlcnRhYl8lcwBTQ0FOICVkIENPTlNUQU5UIFJPVyVzACVRJXMAIFZJUlRVQUwgVEFCTEUgSU5ERVggJWQ6JXMAJXM6ICVzLiVzLiVzAG1pc3NpbmcgZGF0YXR5cGUgZm9yICVzLiVzAGNhbm5vdCBzdG9yZSAlcyB2YWx1ZSBpbiAlcyBjb2x1bW4gJXMuJXMAbm9uLSVzIHZhbHVlIGluICVzLiVzAE5VTEwgdmFsdWUgaW4gJXMuJXMAJXM6ICVzLiVzAG5vIHN1Y2ggdGFibGUgY29sdW1uOiAlcy4lcwAuLiVzACUuMThzLSVzACBVU0lORyBJTlRFR0VSIFBSSU1BUlkgS0VZICglcwB1c2UgRFJPUCBWSUVXIHRvIGRlbGV0ZSB2aWV3ICVzAGlsbGVnYWwgZmlyc3QgYXJndW1lbnQgdG8gJXMAbWlzdXNlIG9mIGFsaWFzZWQgd2luZG93IGZ1bmN0aW9uICVzAHRvbyBtYW55IGNvbHVtbnMgb24gJXMAdG9vIG1hbnkgY29sdW1ucyBpbiAlcwAlcyBwcm9oaWJpdGVkIGluICVzAENIRUNLIGNvbnN0cmFpbnQgZmFpbGVkIGluICVzAG5vbi1kZXRlcm1pbmlzdGljIHVzZSBvZiAlcygpIGluICVzAHJlY292ZXJlZCAlZCBwYWdlcyBmcm9tICVzAG1pc3VzZSBvZiBhbGlhc2VkIGFnZ3JlZ2F0ZSAlcwAlcyAlVCBjYW5ub3QgcmVmZXJlbmNlIG9iamVjdHMgaW4gZGF0YWJhc2UgJXMAY2Fubm90IGRldGFjaCBkYXRhYmFzZSAlcwBhIEpPSU4gY2xhdXNlIGlzIHJlcXVpcmVkIGJlZm9yZSAlcwBjYW5ub3Qgb3BlbiB2YWx1ZSBvZiB0eXBlICVzAGNhbm5vdCBmc3RhdCBkYiBmaWxlICVzAHJlY292ZXJlZCAlZCBmcmFtZXMgZnJvbSBXQUwgZmlsZSAlcwBQUklNQVJZIEtFWSBtaXNzaW5nIG9uIHRhYmxlICVzAHVzZSBEUk9QIFRBQkxFIHRvIGRlbGV0ZSB0YWJsZSAlcwBTRUxFQ1QgJXMgT1JERVIgQlkgcm93aWQgJXMAU0VMRUNUICVzIFdIRVJFIHJvd2lkIEJFVFdFRU4gJWxsZCBBTkQgJWxsZCBPUkRFUiBCWSByb3dpZCAlcwB0aGVyZSBpcyBhbHJlYWR5IGFuIGluZGV4IG5hbWVkICVzAHRhYmxlICVTIGhhcyBubyBjb2x1bW4gbmFtZWQgJXMAdGhlcmUgaXMgYWxyZWFkeSBhIHRhYmxlIG5hbWVkICVzAHN0YXRlbWVudCBhYm9ydHMgYXQgJWQ6IFslc10gJXMAQ09WRVJJTkcgSU5ERVggJXMAU0VMRUNUICVzAHVuc3VwcG9ydGVkIHVzZSBvZiBOVUxMUyAlcwBVU0UgVEVNUCBCLVRSRUUgRk9SICVzAC0tIFRSSUdHRVIgJXMAUklHSFQtSk9JTiAlcwA+PyBBTkQgJXMAJXo6ICVzAHJlY3Vyc2l2ZSByZWZlcmVuY2UgaW4gYSBzdWJxdWVyeTogJXMAdnRhYmxlIGNvbnN0cnVjdG9yIGNhbGxlZCByZWN1cnNpdmVseTogJXMAbm8gc3VjaCBpbmRleDogJXMAbm8gc3VjaCB3aW5kb3c6ICVzAGNhbm5vdCBvdmVycmlkZSAlcyBvZiB3aW5kb3c6ICVzAGNhbm5vdCBvcGVuIHZpZXc6ICVzAG5vIHN1Y2ggc2F2ZXBvaW50OiAlcwBubyBzdWNoIHZmczogJXMAbXVsdGlwbGUgcmVjdXJzaXZlIHJlZmVyZW5jZXM6ICVzAGVycm9yIGluICVzICVzJXMlczogJXMAZXJyb3IgaW4gJXMgJXMgYWZ0ZXIgJXM6ICVzAHVua25vd24gdG9rZW5pemVyOiAlcwBlcnJvciBwYXJzaW5nIHByZWZpeCBwYXJhbWV0ZXI6ICVzAHVucmVjb2duaXplZCBwYXJhbWV0ZXI6ICVzAHVucmVjb2duaXplZCBvcmRlcjogJXMAdW5yZWNvZ25pemVkIG1hdGNoaW5mbzogJXMAbm8gc3VjaCBjb2x1bW46ICVzAGZpbGUgcmVuYW1lZCB3aGlsZSBvcGVuOiAlcwBmaWxlIHVubGlua2VkIHdoaWxlIG9wZW46ICVzAHVuc3VwcG9ydGVkIGVuY29kaW5nOiAlcwBjYW5ub3QgbGltaXQgV0FMIHNpemU6ICVzAE1KIGRlbGV0ZTogJXMAdGFyZ2V0IG9iamVjdC9hbGlhcyBtYXkgbm90IGFwcGVhciBpbiBGUk9NIGNsYXVzZTogJXMAb2JqZWN0IG5hbWUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZTogJXMAdW5rbm93biBkYXRhYmFzZTogJXMAdW5hYmxlIHRvIG9wZW4gZGF0YWJhc2U6ICVzAG5vIHN1Y2ggZGF0YWJhc2U6ICVzAHRoZXJlIGlzIGFscmVhZHkgYW5vdGhlciB0YWJsZSBvciBpbmRleCB3aXRoIHRoaXMgbmFtZTogJXMAZHVwbGljYXRlIGNvbHVtbiBuYW1lOiAlcwBkdXBsaWNhdGUgV0lUSCB0YWJsZSBuYW1lOiAlcwBubyBzdWNoIG1vZHVsZTogJXMAbXVsdGlwbGUgbGlua3MgdG8gZmlsZTogJXMAY2Fubm90IG9wZW4gdmlydHVhbCB0YWJsZTogJXMAbm8gc3VjaCB0YWJsZTogJXMAbXVsdGlwbGUgcmVmZXJlbmNlcyB0byByZWN1cnNpdmUgdGFibGU6ICVzAG5vIHN1Y2ggJXMgbW9kZTogJXMATUogY29sbGlkZTogJXMAbm8gc3VjaCBjb2xsYXRpb24gc2VxdWVuY2U6ICVzAGNpcmN1bGFyIHJlZmVyZW5jZTogJXMAY2Fubm90IG9wZW4gdGFibGUgd2l0aG91dCByb3dpZDogJXMAJXMgbW9kZSBub3QgYWxsb3dlZDogJXMAdnRhYmxlIGNvbnN0cnVjdG9yIGZhaWxlZDogJXMAYXV0b21hdGljIGV4dGVuc2lvbiBsb2FkaW5nIGZhaWxlZDogJXMAZGF0YWJhc2UgdGFibGUgaXMgbG9ja2VkOiAlcwBkYXRhYmFzZSBzY2hlbWEgaXMgbG9ja2VkOiAlcwB2dGFibGUgY29uc3RydWN0b3IgZGlkIG5vdCBkZWNsYXJlIHNjaGVtYTogJXMAYWJvcnQgYXQgJWQgaW4gWyVzXTogJXMALS0gJXMAJXogLSAlcwBvc191bml4LmM6JWQ6ICglZCkgJXMoJXMpIC0gJXMAd3IAcmlnaHRzdHIAbGVmdHN0cgBpbnN0cgBzdWJzdHIAZXhwcl9pbXBsaWVzX2V4cHIAaW52YWxpZCBhcmd1bWVudHMgdG8gZnRzNGF1eCBjb25zdHJ1Y3RvcgBtaXNzaW5nICVzIHBhcmFtZXRlciBpbiBmdHM0IGNvbnN0cnVjdG9yAHRoZSAiLiIgb3BlcmF0b3IAZnRzM2N1cnNvcgBuZWFyICIlVCI6IHN5bnRheCBlcnJvcgB1bmtub3duIGVycm9yAGRvbWFpbiBlcnJvcgBub3QgYW4gZXJyb3IAU1FMIGxvZ2ljIGVycm9yAGRpc2sgSS9PIGVycm9yAGZsb29yAHJtZGlyAG1rZGlyAHNlZ2RpcgBmdHMzX3Rva2VuaXplcgB1bmtub3duIHRva2VuaXplcgBwb3dlcgBsb3dlcgBzcWxpdGVfdGVtcF9tYXN0ZXIAc3FsaXRlX21hc3RlcgBwb3J0ZXIAUmVzZXRTb3J0ZXIARmtDb3VudGVyAEFQSSBjYWxsIHdpdGggJXMgZGF0YWJhc2UgY29ubmVjdGlvbiBwb2ludGVyAHN0cmZpbHRlcgBWRmlsdGVyAEVTQ0FQRSBleHByZXNzaW9uIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyAHVwcGVyAHByb3BlcgBJZlNtYWxsZXIAY2Fubm90IHVzZSBSRVRVUk5JTkcgaW4gYSB0cmlnZ2VyAERyb3BUcmlnZ2VyAHNlY29uZCBhcmd1bWVudCB0byBudGhfdmFsdWUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAYXJndW1lbnQgb2YgbnRpbGUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAZnJhbWUgc3RhcnRpbmcgb2Zmc2V0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcgBmcmFtZSBlbmRpbmcgb2Zmc2V0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcgBJbnRlZ2VyAFJvd2lkICVsbGQgb3V0IG9mIG9yZGVyAFJlbWFpbmRlcgBmcmFtZSBzdGFydGluZyBvZmZzZXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcgBhZGRyAHBhZHIAY2hhcgB5ZWFyAENsZWFyAEJpdE9yAHNlcQBDb2xsU2VxAEVsc2VFcQByZWdleHAAT3BlbkR1cABOb29wAEp1bXAAL3Vzci90bXAAL3Zhci90bXAAdGVtcABjdXJyZW50X3RpbWVzdGFtcABBZ2dTdGVwAG1vZGVTdGVwAHZhcmlhbmNlU3RlcABtdW5tYXAAbW1hcABtcmVtYXAAdnRhYjolcABzc2Vuc3VvAGlsc3VvAGF1dG8AR290bwBpbnRvAGluY3JlbWVudGFsX3ZhY3V1bSBlbmFibGVkIHdpdGggYSBtYXggcm9vdHBhZ2Ugb2YgemVybwBJZk5vdFplcm8ARGVjckp1bXBaZXJvAEZrSWZaZXJvAHNlcW5vAGluZGV4X3hpbmZvAHRhYmxlX3hpbmZvAG1hdGNoaW5mbwBpbmRleF9pbmZvAHRhYmxlX2luZm8AT3BlblBzZXVkbwBmY2hvd24AQmVnaW5TdWJydG4AUmV0dXJuAGpzb24Abm8gcXVlcnkgc29sdXRpb24AaW5kZXggY29ycnVwdGlvbgBkYXRhYmFzZSBjb3JydXB0aW9uAGZyZWUgc3BhY2UgY29ycnVwdGlvbgB1bmtub3duIGNvbHVtbiAiJXMiIGluIGZvcmVpZ24ga2V5IGRlZmluaXRpb24AJXMueEJlc3RJbmRleCBtYWxmdW5jdGlvbgBhdXRob3JpemVyIG1hbGZ1bmN0aW9uACUjVCgpIG1heSBub3QgYmUgdXNlZCBhcyBhIHdpbmRvdyBmdW5jdGlvbgAnJXMnIGlzIG5vdCBhIGZ1bmN0aW9uAEZ1bmN0aW9uAGNhbm5vdCBzdGFydCBhIHRyYW5zYWN0aW9uIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCBjaGFuZ2UgJXMgd2FsIG1vZGUgZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgB0ZW1wb3Jhcnkgc3RvcmFnZSBjYW5ub3QgYmUgY2hhbmdlZCBmcm9tIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCBWQUNVVU0gZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgBTYWZldHkgbGV2ZWwgbWF5IG5vdCBiZSBjaGFuZ2VkIGluc2lkZSBhIHRyYW5zYWN0aW9uAFRyYW5zYWN0aW9uAFBlcm11dGF0aW9uAHVua25vd24gb3BlcmF0aW9uAHVuc3VwcG9ydGVkIGZyYW1lIHNwZWNpZmljYXRpb24AUkFOR0Ugd2l0aCBvZmZzZXQgUFJFQ0VESU5HL0ZPTExPV0lORyByZXF1aXJlcyBvbmUgT1JERVIgQlkgZXhwcmVzc2lvbgB0b28gbWFueSBsZXZlbHMgb2YgdHJpZ2dlciByZWN1cnNpb24AdXNlcl92ZXJzaW9uAHNxbGl0ZV92ZXJzaW9uAGRhdGFfdmVyc2lvbgBzY2hlbWFfdmVyc2lvbgBzcWxpdGVfZHJvcF9jb2x1bW4Ac3FsaXRlX3JlbmFtZV9jb2x1bW4AYWZ0ZXIgZHJvcCBjb2x1bW4Abm8gc3VjaCBjb2x1bW4AbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBub24tZ2VuZXJhdGVkIGNvbHVtbgBjYW5ub3QgdXNlIERFRkFVTFQgb24gYSBnZW5lcmF0ZWQgY29sdW1uAGFkZCBjb2x1bW4AQ2Fubm90IGFkZCBhIFBSSU1BUlkgS0VZIGNvbHVtbgBDYW5ub3QgYWRkIGEgVU5JUVVFIGNvbHVtbgBjYW5ub3QgYWRkIGEgU1RPUkVEIGNvbHVtbgBWQ29sdW1uAGJ1aWx0aW4AYXNpbgBhdCBtb3N0ICVkIHRhYmxlcyBpbiBhIGpvaW4AbWluAG9yaWdpbgBWQmVnaW4AbWFpbgBFeHBsYWluAHNpZ24Ac3NlbgBvcGVuAElmTm90T3BlbgBTb3J0ZXJPcGVuAFZPcGVuAGhpZGRlbgBhdGFuAG1lZGlhbgBTZWVrU2NhbgBWSW5pdEluAGF1dG9fdmFjdXVtAGluY3JlbWVudGFsX3ZhY3V1bQBJbmNyVmFjdXVtAHN1bQBkcm9wIGNvbHVtbiBmcm9tAC9kZXYvdXJhbmRvbQBBZGRJbW0AcnRyaW0AbHRyaW0AcmVhZG9ubHlfc2htACVzLXNobQB0bmVtAFJBSVNFKCkgbWF5IG9ubHkgYmUgdXNlZCB3aXRoaW4gYSB0cmlnZ2VyLXByb2dyYW0AUHJvZ3JhbQBQYXJhbQBmdWwAZmNudGwAaW9jdGwAaWdvbABsb2NraW5nIHByb3RvY29sAG5jb2wAbm90bnVsbABpZm51bGwAL2Rldi9udWxsAGRhdGFiYXNlIG9yIGRpc2sgaXMgZnVsbABOb3ROdWxsAFNvZnROdWxsAElzTnVsbABaZXJvT3JOdWxsAEhhbHRJZk51bGwAY29sbABjYWNoZV9zcGlsbABSb3dDZWxsAGNlaWwAZGV0YWlsAHBhZGwAdW5peC1leGNsAHRibAB3YWwAdmlydHVhbAB0b3RhbABpbmNyZW1lbnRhbABPcGVuRXBoZW1lcmFsAEFnZ0ZpbmFsAG5vcm1hbABJbmRleCBhbHJlYWR5IG9wdGltYWwAcGFydGlhbAByZWFsAFJlYWwAcGsAb2sAdW5saW5rAHJlYWRsaW5rAEZpbmlzaFNlZWsARGVmZXJyZWRTZWVrAG5vbG9jawBDdXJzb3JVbmxvY2sAYmxvY2sAJXMubG9jawBDdXJzb3JMb2NrAFRhYmxlTG9jawBpbnRlZ3JpdHlfY2hlY2sAZm9yZWlnbl9rZXlfY2hlY2sAcXVpY2tfY2hlY2sAY2VsbF9zaXplX2NoZWNrAGludGVncml0eS1jaGVjawBGa0NoZWNrAFR5cGVDaGVjawBJbnRlZ3JpdHlDawByZXppAG5vaXRhemkAaXRpdmkAc3NlbmV2aQBpdGkAaXNzaXNpAGlzaXNpAHBpAG5vaQBnbmkAc2lzc2lpAGlzc2lzaWkAc3NzaWlpAHNlaQBpdGljaQBldGFjaQBsYWNpAGNvdGgAbW9udGgAanNvbl9hcnJheV9sZW5ndGgAb3ZlcmZsb3cgbGlzdCBsZW5ndGgAd2R0aABzdGF0X3B1c2gAYWNvc2gAYXNpbmgAYXRhbmgAanNvbl9wYXRjaABkYXRhdHlwZSBtaXNtYXRjaABhcmd1bWVudCB0eXBlIG1pc21hdGNoAGFiYnJldmlhdGVkIHF1ZXJ5IGFsZ29yaXRobSBzZWFyY2gAdW5peGVwb2NoAHNxbGl0ZV9hdHRhY2gAc3FsaXRlX2RldGFjaABqc29uX2VhY2gAYXZnAG5hcmcAc3FsaXRlX2xvZwBzdGF0ZW1lbnQgdG9vIGxvbmcAY2Fubm90IG9wZW4gJXMgY29sdW1uIGZvciB3cml0aW5nAHN1YnN0cmluZwBTdHJpbmcAc3FsaXRlX3JldHVybmluZwBlbmNvZGluZwBzdHJpbmcgb3IgYmxvYiB0b28gYmlnAFJlbGVhc2VSZWcAJS4xNmcAJSEuMTVnAHNzZW5sdWYAcHJpbnRmAHR5cGVvZgBtb2Rlb2YAb3V0IG9mAHJlbmFtZSBjb2x1bW5zIG9mAG51bGxpZgBpaWYAb2ZmADAxMjM0NTY3ODlhYmNkZWYASWYAJTA2LjNmACUuKmYAZ2V0cGFnZXNpemUAZG9jc2l6ZQBtbWFwX3NpemUAZGVmYXVsdF9jYWNoZV9zaXplAFBSQUdNQSAlUS5wYWdlX3NpemUAZnRzM3Rva2VuaXplAG9wdGltaXplAGpzb25fcmVtb3ZlAE1vdmUAY2Fubm90IGNvbW1pdCAtIG5vIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZQBjYW5ub3Qgcm9sbGJhY2sgLSBubyB0cmFuc2FjdGlvbiBpcyBhY3RpdmUAZXhjbHVzaXZlAHRydWUASXNUcnVlAHVuaXF1ZQBkZmx0X3ZhbHVlAENhbm5vdCBhZGQgYSBSRUZFUkVOQ0VTIGNvbHVtbiB3aXRoIG5vbi1OVUxMIGRlZmF1bHQgdmFsdWUAQWdnVmFsdWUAanNvbl9xdW90ZQBwd3JpdGUAT3BlbldyaXRlAG9uX2RlbGV0ZQBzZWN1cmVfZGVsZXRlAElkeERlbGV0ZQBwcml2YXRlAGFnZ3JlZ2F0ZQBWQ3JlYXRlAG9uX3VwZGF0ZQBWVXBkYXRlAGN1cnJlbnRfZGF0ZQBmYWxsb2NhdGUAZnRydW5jYXRlAHJlcGxpY2F0ZQBiYWQgcGFyYW1ldGVyIG9yIG90aGVyIEFQSSBtaXN1c2UAdG9vIG1hbnkgdGVybXMgaW4gJXMgQlkgY2xhdXNlAHRvbyBtYW55IHRlcm1zIGluIE9SREVSIEJZIGNsYXVzZQBhZ2dyZWdhdGUgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgR1JPVVAgQlkgY2xhdXNlAFBBUlRJVElPTiBjbGF1c2UAYSBOQVRVUkFMIGpvaW4gbWF5IG5vdCBoYXZlIGFuIE9OIG9yIFVTSU5HIGNsYXVzZQBkYXRhYmFzZSAlcyBpcyBhbHJlYWR5IGluIHVzZQBBZ2dJbnZlcnNlAHJldmVyc2UAY2xvc2UAQ2xvc2UAZmFsc2UAYXR0ZW1wdCB0byB3cml0ZSBhIHJlYWRvbmx5IGRhdGFiYXNlAGNvcnJ1cHQgZGF0YWJhc2UAYXR0YWNoZWQgZGF0YWJhc2VzIG11c3QgdXNlIHRoZSBzYW1lIHRleHQgZW5jb2RpbmcgYXMgbWFpbiBkYXRhYmFzZQBmaWxlIGlzIG5vdCBhIGRhdGFiYXNlAHRlbXBfc3RvcmUAJXMgY2xhdXNlIHNob3VsZCBjb21lIGFmdGVyICVzIG5vdCBiZWZvcmUARXhwaXJlAHNxdWFyZQBleHByX2NvbXBhcmUAU29ydGVyQ29tcGFyZQBzdWJ0eXBlAENsclN1YnR5cGUAanNvbl90eXBlAElzTnVsbE9yVHlwZQBJZk5vSG9wZQBpbHRuZQB1bml4LW5vbmUASW5pdENvcm91dGluZQBFbmRDb3JvdXRpbmUAaWNuZQBsb2NhbHRpbWUAc3RyZnRpbWUAZGF0ZXRpbWUAY3VycmVudF90aW1lAHRuZW1lAGFmdGVyIHJlbmFtZQBub24tdGV4dCBmaWxlbmFtZQBWUmVuYW1lAGFtYmlndW91cyBjb2x1bW4gbmFtZQB0ZW1wb3JhcnkgdHJpZ2dlciBtYXkgbm90IGhhdmUgcXVhbGlmaWVkIG5hbWUAc2ltcGxlAGxvd2VyX3F1YXJ0aWxlAHVwcGVyX3F1YXJ0aWxlAHVuaXgtZG90ZmlsZQBjYW5ub3Qgb3BlbiBmaWxlAHVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGZpbGUAaW1tdXRhYmxlAEFib3J0YWJsZQBsZWdhY3lfYWx0ZXJfdGFibGUAc3FsaXRlX3JlbmFtZV90YWJsZQBjYW5ub3QgY3JlYXRlIHRyaWdnZXIgb24gc3lzdGVtIHRhYmxlAHZpcnR1YWwgdGFibGUAbm8gc3VjaCB0YWJsZQBudW1iZXIgb2YgY29sdW1ucyBpbiBmb3JlaWduIGtleSBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHJlZmVyZW5jZWQgdGFibGUAbG9jYWwgdGltZSB1bmF2YWlsYWJsZQBhbm90aGVyIHJvdyBhdmFpbGFibGUAbm8gbW9yZSByb3dzIGF2YWlsYWJsZQBWYXJpYWJsZQBEcm9wVGFibGUAdXRmMTZsZQBVVEYxNmxlAFVURi0xNmxlAGNhc2Vfc2Vuc2l0aXZlX2xpa2UAU2V0Q29va2llAFJlYWRDb29raWUAY2FjaGUAY29sdW1uIGluZGV4IG91dCBvZiByYW5nZQBub3RpZmljYXRpb24gbWVzc2FnZQB3YXJuaW5nIG1lc3NhZ2UAaW52YWxpZCByb290cGFnZQBFeHRlbmRzIG9mZiBlbmQgb2YgcGFnZQBqc29uX3RyZWUAQ3JlYXRlQnRyZWUAZGVlAGpvdXJuYWxfbW9kZQBsb2NraW5nX21vZGUAb3Bjb2RlAHVuaWNvZGUASm91cm5hbE1vZGUARGl2aWRlAGNvYWxlc2NlAHNxbGl0ZV9zZXF1ZW5jZQBTZXF1ZW5jZQBkaWZmZXJlbmNlAHZhcmlhbmNlAE9uY2UAVHJhY2UAanNvbl9yZXBsYWNlAHV0ZjE2YmUAVVRGMTZiZQBVVEYtMTZiZQBOZQBMZQBHZQAyMGM6MjBlADIwYjoyMGUAJSEuMjBlAGdldGN3ZABNYWtlUmVjb3JkAHRoc3RuZHJkAGxpa2VsaWhvb2QAZmNobW9kAHJvdW5kAE5vdEZvdW5kAFJld2luZABTZWVrRW5kAEJpdEFuZABvbGQAJWxsZCAlbGxkAG5vIHN1Y2ggcm93aWQ6ICVsbGQAcmVidWlsZABZaWVsZABsYXN0X2luc2VydF9yb3dpZAAlcy5yb3dpZABTRUxFQ1QqRlJPTSIldyIuJXMgT1JERVIgQlkgcm93aWQAU0VMRUNUKkZST00iJXciLiVzIFdIRVJFICVzIE9SREVSIEJZIHJvd2lkAElkeFJvd2lkAE5ld1Jvd2lkAFNlZWtSb3dpZABnZXRldWlkAGludmFsaWQAanNvbl92YWxpZABma2lkAF9fbGFuZ2lkACV6LCBsYW5naWQAbGFuZ3VhZ2VpZABkb2NpZABhcHBsaWNhdGlvbl9pZABzcWxpdGVfc291cmNlX2lkAG5vdCBhdXRob3JpemVkAEluZGV4IG9wdGltaXplZABub3RpbmRleGVkAHVuYWJsZSB0byBpZGVudGlmeSB0aGUgb2JqZWN0IHRvIGJlIHJlaW5kZXhlZAB2aWV3cyBtYXkgbm90IGJlIGluZGV4ZWQAdmlydHVhbCB0YWJsZXMgbWF5IG5vdCBiZSBpbmRleGVkAHRhYmxlICVzIG1heSBub3QgYmUgaW5kZXhlZAByZWFkX3VuY29tbWl0dGVkAHJlY3Vyc2l2ZSBhZ2dyZWdhdGUgcXVlcmllcyBub3Qgc3VwcG9ydGVkAHF1ZXJ5IGFib3J0ZWQAcm93cyBpbnNlcnRlZABpbnRlcnJ1cHRlZABjaGVja3BvaW50ZWQAYWNjZXNzIHRvICV6IGlzIHByb2hpYml0ZWQAYWNjZXNzIHRvIHZpZXcgIiVzIiBwcm9oaWJpdGVkAHJvd3MgZGVsZXRlZABnZW5lcmF0ZWQAcm93cyB1cGRhdGVkAG5vdHVzZWQAcm93IHZhbHVlIG1pc3VzZWQAc3FsaXRlX2NvbXBpbGVvcHRpb25fdXNlZABQYWdlICVkIGlzIG5ldmVyIHVzZWQAQ29sdW1uc1VzZWQAc3RvcmVkAHZpcnR1YWwgdGFibGVzIG1heSBub3QgYmUgYWx0ZXJlZAB2aWV3ICVzIG1heSBub3QgYmUgYWx0ZXJlZAB0YWJsZSAlcyBtYXkgbm90IGJlIGFsdGVyZWQAc2hhcmVkAGluZGV4IGFzc29jaWF0ZWQgd2l0aCBVTklRVUUgb3IgUFJJTUFSWSBLRVkgY29uc3RyYWludCBjYW5ub3QgYmUgZHJvcHBlZAB0YWJsZSAlcyBtYXkgbm90IGJlIGRyb3BwZWQAdmlldyAlcyBpcyBjaXJjdWxhcmx5IGRlZmluZWQAdW5vcGVuZWQAZGF0YWJhc2UgZGlzayBpbWFnZSBpcyBtYWxmb3JtZWQAJXMgY29uc3RyYWludCBmYWlsZWQARk9SRUlHTiBLRVkgY29uc3RyYWludCBmYWlsZWQAbGFyZ2UgZmlsZSBzdXBwb3J0IGlzIGRpc2FibGVkAGZ0czN0b2tlbml6ZSBkaXNhYmxlZABkYXRhYmFzZSAlcyBpcyBsb2NrZWQAZGF0YWJhc2UgaXMgbG9ja2VkAGRhdGFiYXNlIHRhYmxlIGlzIGxvY2tlZABhdXRob3JpemF0aW9uIGRlbmllZABhY2Nlc3MgcGVybWlzc2lvbiBkZW5pZWQAdGFibGUgJVMgaGFzICVkIGNvbHVtbnMgYnV0ICVkIHZhbHVlcyB3ZXJlIHN1cHBsaWVkAHRlbXBvcmFyeSB0YWJsZSBuYW1lIG11c3QgYmUgdW5xdWFsaWZpZWQAdGFibGUgJXMgbWF5IG5vdCBiZSBtb2RpZmllZABjb25mbGljdGluZyBPTiBDT05GTElDVCBjbGF1c2VzIHNwZWNpZmllZABubyB0YWJsZXMgc3BlY2lmaWVkAGRhdGFiYXNlIGlzIGFscmVhZHkgYXR0YWNoZWQAZGF0YWJhc2Ugc2NoZW1hIGhhcyBjaGFuZ2VkAGV4Y2x1ZGVkAFBvaW50ZXIgbWFwIHBhZ2UgJWQgaXMgcmVmZXJlbmNlZABSb3dTZXRBZGQARmlsdGVyQWRkAHByZWFkAFJvd1NldFJlYWQAT3BlblJlYWQAJTA0ZAAlMDNkACUwMmQANDBmLTIxYS0yMWQAc3FsaXRlX3N0YXQlZABjb2x1bW4lZABzcWxpdGVfYXV0b2luZGV4XyVzXyVkAHZhcmlhYmxlIG51bWJlciBtdXN0IGJlIGJldHdlZW4gPzEgYW5kID8lZABGYWlsZWQgdG8gcmVhZCBwdHJtYXAga2V5PSVkAHVuYWJsZSB0byBnZXQgdGhlIHBhZ2UuIGVycm9yIGNvZGU9JWQAT2Zmc2V0ICVkIG91dCBvZiByYW5nZSAlZC4uJWQAayglZABVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgcm9vdHBhZ2U9JWQgV0hFUkUgIyVkIEFORCByb290cGFnZT0jJWQAVVBEQVRFICVRLnNxbGl0ZV9tYXN0ZXIgU0VUIHR5cGU9JyVzJywgbmFtZT0lUSwgdGJsX25hbWU9JVEsIHJvb3RwYWdlPSMlZCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgdHlwZT0ndGFibGUnLCBuYW1lPSVRLCB0YmxfbmFtZT0lUSwgcm9vdHBhZ2U9MCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZAB0b28gbWFueSBhdHRhY2hlZCBkYXRhYmFzZXMgLSBtYXggJWQAdG9vIG1hbnkgYXJndW1lbnRzIG9uICVzKCkgLSBtYXggJWQAZXhwZWN0ZWQgJWQgY29sdW1ucyBmb3IgJyVzJyBidXQgZ290ICVkAGF0dGVtcHQgdG8gb3BlbiAiJXMiIGFzIGZpbGUgZGVzY3JpcHRvciAlZABpbnZhbGlkIHBhZ2UgbnVtYmVyICVkAGZhaWxlZCB0byBnZXQgcGFnZSAlZAAybmQgcmVmZXJlbmNlIHRvIHBhZ2UgJWQAZnJlZWxpc3QgbGVhZiBjb3VudCB0b28gYmlnIG9uIHBhZ2UgJWQAYnRyZWVJbml0UGFnZSgpIHJldHVybnMgZXJyb3IgY29kZSAlZAAlcyBpcyAlZCBidXQgc2hvdWxkIGJlICVkACVyICVzIEJZIHRlcm0gb3V0IG9mIHJhbmdlIC0gc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgJWQAc3ViLXNlbGVjdCByZXR1cm5zICVkIGNvbHVtbnMgLSBleHBlY3RlZCAlZABJTiguLi4pIGVsZW1lbnQgaGFzICVkIHRlcm0lcyAtIGV4cGVjdGVkICVkACVzTElTVCBTVUJRVUVSWSAlZABSRVVTRSBMSVNUIFNVQlFVRVJZICVkACVzU0NBTEFSIFNVQlFVRVJZICVkAFJFVVNFIFNVQlFVRVJZICVkAElOREVYICVkAHRvbyBtYW55IEZST00gY2xhdXNlIHRlcm1zLCBtYXg6ICVkAHJ3YwB1dGMAZGVzYwBhc2MAY2hlY2twb2ludF9mdWxsZnN5bmMAZnVsbF9mc3luYwBjaGFyaW5kZXhGdW5jAHNxcnRGdW5jAGNvdEZ1bmMAcmlnaHRGdW5jAGxlZnRGdW5jAGFjb3NGdW5jAGZsb29yRnVuYwBwb3dlckZ1bmMAc3RyZmlsdGVyRnVuYwBwcm9wZXJGdW5jAHBhZHJGdW5jAGV4cEZ1bmMAYXNpbkZ1bmMAc2lnbkZ1bmMAYXRhbkZ1bmMAY2VpbEZ1bmMAcGFkbEZ1bmMAY290aEZ1bmMAYWNvc2hGdW5jAGFzaW5oRnVuYwBhdGFuaEZ1bmMAbG9nRnVuYwByYWQyZGVnRnVuYwByZXZlcnNlRnVuYwBQdXJlRnVuYwBzcXVhcmVGdW5jAGRpZmZlcmVuY2VGdW5jAGRlZzJyYWRGdW5jAHBhZGNGdW5jAGF0bjJGdW5jAGxvZzEwRnVuYwBlbmMAbnVtZXJpYwAxPT1hcmdjAFNxbEV4ZWMAcGFkYwAlLjRjJXMlLjE2YwBzcWxpdGUtc3JjL3NxbGl0ZS1hbWFsZ2FtYXRpb24tMzM5MDMwMC9leHRlbnNpb24tZnVuY3Rpb25zLmMAJXMvZXRpbHFzXyVsbHglYwB1bnJlY29nbml6ZWQgbWF0Y2hpbmZvIHJlcXVlc3Q6ICVjAEdvc3ViAGdsb2IAemVyb2Jsb2IAcmFuZG9tYmxvYgBCbG9iAGlsYgBpdGlsaWIAbWVtZGIAQVRUQUNIICVRIEFTIHZhY3V1bV9kYgByb3RhAGV2aXRhAGxhbm9pdGEAZXRhAFJvd0RhdGEAU29ydGVyRGF0YQBpY25hAHNxbGl0ZV90ZW1wX3NjaGVtYQBzcWxpdGVfc2NoZW1hAHdyaXRhYmxlX3NjaGVtYQB0cnVzdGVkX3NjaGVtYQBjb3JydXB0IHNjaGVtYQBQYXJzZVNjaGVtYQBpbGxhAGV6aWxhAGl0aWxhAG1zaWxhAHNxbGl0ZV8AcHJhZ21hXwBTUUxJVEVfAF9ST1dJRF8AJXMgYXQgbGluZSAlZCBvZiBbJS4xMHNdAGJpbmQgb24gYSBidXN5IHByZXBhcmVkIHN0YXRlbWVudDogWyVzXQBtYWxmb3JtZWQgTUFUQ0ggZXhwcmVzc2lvbjogWyVzXQBbJWRdAFtdAFswXQAkWwBMRUZULU1PU1QgU1VCUVVFUlkAQ09NUE9VTkQgUVVFUlkAQU5ZAGdlbmVyYXRlZCBjb2x1bW5zIGNhbm5vdCBiZSBwYXJ0IG9mIHRoZSBQUklNQVJZIEtFWQBBVVRPSU5DUkVNRU5UIGlzIG9ubHkgYWxsb3dlZCBvbiBhbiBJTlRFR0VSIFBSSU1BUlkgS0VZAGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVkARk9SRUlHTiBLRVkAUklHSFQgUEFSVCBPRiBPUkRFUiBCWQBHUk9VUCBCWQBpaXNYAGlzaVgAQVVUT01BVElDIFBBUlRJQUwgQ09WRVJJTkcgSU5ERVgAQVVUT01BVElDIENPVkVSSU5HIElOREVYAC1taiUwNlg5JTAyWABTQ0FOIENPTlNUQU5UIFJPVwBWSUVXAGpzb25fb2JqZWN0KCkgbGFiZWxzIG11c3QgYmUgVEVYVABGSVJTVABMQVNUAEVYQ0VQVABOT1QAIElOVABJZHhMVABTZWVrTFQAU0VUIERFRkFVTFQATVVURVhfT01JVABDT01NSVQATElNSVQAUklHSFQASWR4R1QAU2Vla0dUAExFRlQARElTVElOQ1QAUkVTVFJJQ1QASU5URVJTRUNUAHRvbyBtYW55IHRlcm1zIGluIGNvbXBvdW5kIFNFTEVDVAB1bmtub3duIGpvaW4gdHlwZTogJVQlcyVUJXMlVAAtJVQAdG9vIG1hbnkgYXJndW1lbnRzIG9uIGZ1bmN0aW9uICVUAHVua25vd24gZGF0YWJhc2UgJVQAZm9yZWlnbiBrZXkgb24gJXMgc2hvdWxkIHJlZmVyZW5jZSBvbmx5IG9uZSBjb2x1bW4gb2YgdGFibGUgJVQAQ1JFQVRFIFZJUlRVQUwgVEFCTEUgJVQAaGV4IGxpdGVyYWwgdG9vIGJpZzogJXMlI1QAbm8gc3VjaCBmdW5jdGlvbjogJSNUAG5vdCBhdXRob3JpemVkIHRvIHVzZSBmdW5jdGlvbjogJSNUAERFRkFVTFRfUkVDVVJTSVZFX1RSSUdHRVJTAElOUwBFTkFCTEVfRlRTM19QQVJFTlRIRVNJUwBESVNBQkxFX0xGUwAlcyAlUwBubyBzdWNoIGluZGV4OiAlUwBjYW5ub3QgY3JlYXRlICVzIHRyaWdnZXIgb24gdmlldzogJVMAbm8gc3VjaCB0cmlnZ2VyOiAlUwBjYW5ub3QgY3JlYXRlIElOU1RFQUQgT0YgdHJpZ2dlciBvbiB0YWJsZTogJVMATUFURVJJQUxJWkUgJSFTAENPLVJPVVRJTkUgJSFTAFVTSU5HIElOREVYICVzIEZPUiBJTi1PUEVSQVRPUgBVU0lORyBST1dJRCBTRUFSQ0ggT04gVEFCTEUgJXMgRk9SIElOLU9QRVJBVE9SAE1VTFRJLUlOREVYIE9SAFNRTElURV9UTVBESVIAQUZURVIASU5URUdFUgBPUkRFUgBORUFSAERFTEVURSBGUk9NICVRLiVzIFdIRVJFICVzPSVRAG5hbWU9JVEgQU5EIHNxbD0lUQBERUxFVEUgRlJPTSAlUS5zcWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0lUQAsIHguJVEAU0VMRUNUICogRlJPTSAlUS4lUQBVUERBVEUgIiV3Ii5zcWxpdGVfc2VxdWVuY2Ugc2V0IG5hbWUgPSAlUSBXSEVSRSBuYW1lID0gJVEAVVBEQVRFICIldyIuc3FsaXRlX21hc3RlciBTRVQgc3FsID0gcHJpbnRmKCclJS4lZHMsICcsc3FsKSB8fCAlUSB8fCBzdWJzdHIoc3FsLDErbGVuZ3RoKHByaW50ZignJSUuJWRzJyxzcWwpKSkgV0hFUkUgdHlwZSA9ICd0YWJsZScgQU5EIG5hbWUgPSAlUQBTRVRVUABHUk9VUABSRUNVUlNJVkUgU1RFUABOYU4AbWFsZm9ybWVkIEpTT04ATk8gQUNUSU9OAE9NSVRfTE9BRF9FWFRFTlNJT04AVU5JT04AIExFRlQtSk9JTgBCRUdJTgAsYXJnIEhJRERFTgAsc2NoZW1hIEhJRERFTgBTQ0FOAERFRkFVTFRfQVVUT1ZBQ1VVTQAgTlVNAFJUUklNAENhbm5vdCBhZGQgYSBOT1QgTlVMTCBjb2x1bW4gd2l0aCBkZWZhdWx0IHZhbHVlIE5VTEwATk9UIE5VTEwAU0VUIE5VTEwAU0VMRUNUIDEgRlJPTSAlUS4nJXFfc2VnbWVudHMnIFdIRVJFIGJsb2NraWQ9PyBBTkQgYmxvY2sgSVMgTlVMTABVTklPTiBBTEwAIFJFQUwAQ0hFQ0sAYWJvcnQgZHVlIHRvIFJPTExCQUNLAE1BVENIAFNFQVJDSABVU0lORwBFTkFCTEVfTk9STUFMSVpFACBVTklRVUUAREVMRVRFAFVQREFURQBSRUxFQVNFAE5PQ0FTRQBCRUZPUkUAQ1JFAE5PTkUASWR4TEUAU2Vla0xFAFRBQkxFADE2TEUASWR4R0UAU2Vla0dFACVzIFVTSU5HIFRFTVAgQi1UUkVFAENBU0NBREUAMTZCRQBBTkQAUk9XSUQAT0lEAERFU0MAU0VMRUNUIGlkeCwgc3RhcnRfYmxvY2ssIGxlYXZlc19lbmRfYmxvY2ssIGVuZF9ibG9jaywgcm9vdCBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDAFNFTEVDVCBpZHgsIHN0YXJ0X2Jsb2NrLCBsZWF2ZXNfZW5kX2Jsb2NrLCBlbmRfYmxvY2ssIHJvb3QgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID9PUkRFUiBCWSBsZXZlbCBERVNDLCBpZHggQVNDAFNFTEVDVCBsZXZlbCwgaWR4LCBlbmRfYmxvY2sgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID8gT1JERVIgQlkgbGV2ZWwgREVTQywgaWR4IEFTQwBTRUxFQ1QgaWR4IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWw9PyBPUkRFUiBCWSAxIEFTQwBTWVNURU1fTUFMTE9DAEJMT0IAQkJCAFVQREFURSBPUiBGQUlMICVRLiclcV9zZWdkaXInIFNFVCBsZXZlbD0tMSxpZHg9PyBXSEVSRSBsZXZlbD0/IEFORCBpZHg9PwBVUERBVEUgJVEuJyVxX3NlZ2RpcicgU0VUIGlkeCA9ID8gV0hFUkUgbGV2ZWw9PyBBTkQgaWR4PT8AJXM9PwBTRUxFQ1QgJXMgV0hFUkUgcm93aWQ9PwBTRUxFQ1Qgc2l6ZSBGUk9NICVRLiclcV9kb2NzaXplJyBXSEVSRSBkb2NpZD0/AFNFTEVDVCB2YWx1ZSBGUk9NICVRLiclcV9zdGF0JyBXSEVSRSBpZD0/AD8sPyw/AERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBTRUxFQ1QgbWF4KGxldmVsKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnIFdIRVJFIGJsb2NraWQgQkVUV0VFTiA/IEFORCA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgc3RhcnRfYmxvY2sgPSA/LCByb290ID0gP1dIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBTRUxFQ1QgaWR4LCBzdGFydF9ibG9jaywgbGVhdmVzX2VuZF9ibG9jaywgZW5kX2Jsb2NrLCByb290IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8AU0VMRUNUIGNvdW50KCopIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/AFNFTEVDVCAlcyBXSEVSRSByb3dpZCA9ID8AREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkID0gPwBERUxFVEUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQgPSA/ACwgPwA8ZXhwcj4APGI+ADxiPi4uLjwvYj4ALT4+AC0+AHNlcGFyYXRvcnM9AHRva2VuY2hhcnM9AGF1dG9tZXJnZT0APABJTlNFUlQgSU5UTyAlUS5zcWxpdGVfbWFzdGVyIFZBTFVFUygnaW5kZXgnLCVRLCVRLCMlZCwlUSk7AENSRUFURSBUQUJMRSAlUS4nJXFfc2VnbWVudHMnKGJsb2NraWQgSU5URUdFUiBQUklNQVJZIEtFWSwgYmxvY2sgQkxPQik7AENSRUFURSBUQUJMRSAlUS4nJXFfZG9jc2l6ZScoZG9jaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgc2l6ZSBCTE9CKTsAQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJVEuJyVxX3N0YXQnKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIHZhbHVlIEJMT0IpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ2RpcicobGV2ZWwgSU5URUdFUixpZHggSU5URUdFUixzdGFydF9ibG9jayBJTlRFR0VSLGxlYXZlc19lbmRfYmxvY2sgSU5URUdFUixlbmRfYmxvY2sgSU5URUdFUixyb290IEJMT0IsUFJJTUFSWSBLRVkobGV2ZWwsIGlkeCkpOwBVUERBVEUgJVEuc3FsaXRlX21hc3RlciBTRVQgdGJsX25hbWUgPSAlUSwgbmFtZSA9IENBU0UgV0hFTiB0eXBlPSd0YWJsZScgVEhFTiAlUSBXSEVOIG5hbWUgTElLRSAnc3FsaXRlWF9hdXRvaW5kZXglJScgRVNDQVBFICdYJyAgICAgIEFORCB0eXBlPSdpbmRleCcgVEhFTiAnc3FsaXRlX2F1dG9pbmRleF8nIHx8ICVRIHx8IHN1YnN0cihuYW1lLCVkKzE4KSBFTFNFIG5hbWUgRU5EIFdIRVJFIHRibF9uYW1lPSVRIENPTExBVEUgbm9jYXNlIEFORCAodHlwZT0ndGFibGUnIE9SIHR5cGU9J2luZGV4JyBPUiB0eXBlPSd0cmlnZ2VyJyk7AERST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zZWdtZW50cyc7RFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX3NlZ2Rpcic7RFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX2RvY3NpemUnO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zdGF0JzslcyBEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfY29udGVudCc7AEFMVEVSIFRBQkxFICVRLiclcV9jb250ZW50JyAgUkVOQU1FIFRPICclcV9jb250ZW50JzsAQUxURVIgVEFCTEUgJVEuJyVxX3N0YXQnICBSRU5BTUUgVE8gJyVxX3N0YXQnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc2VnbWVudHMnIFJFTkFNRSBUTyAnJXFfc2VnbWVudHMnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc2VnZGlyJyAgIFJFTkFNRSBUTyAnJXFfc2VnZGlyJzsAQUxURVIgVEFCTEUgJVEuJyVxX2RvY3NpemUnICBSRU5BTUUgVE8gJyVxX2RvY3NpemUnOwA6bWVtb3J5OgBmaWxlOgBTdHJpbmc4AHV0ZjgAMjAyMi0wOS0wNSAxMTowMjoyMyA0NjM1ZjRhNjljOGMyYThkZjI0MmIzODRhOTkyYWVhNzEyMjRlMzlhMmNjYWI0MmQ4YzBiMDYwMmYxZTgyNmU4AFVURjgAVVRGLTgATUFYX0ZVTkNUSU9OX0FSRz0xMjcAREVGQVVMVF9TRUNUT1JfU0laRT00MDk2AERFRkFVTFRfUEFHRV9TSVpFPTQwOTYATUFYX1ZBUklBQkxFX05VTUJFUj0zMjc2NgBNQVhfUEFHRV9TSVpFPTY1NTM2AFVURjE2AFVURi0xNgBwNQB0b28gbWFueSByZWZlcmVuY2VzIHRvICIlcyI6IG1heCA2NTUzNQBzcWxpdGVfc3RhdDQAZnRzNABwNABERUZBVUxUX0ZJTEVfRk9STUFUPTQASW50NjQAcHdyaXRlNjQAcHJlYWQ2NABNQUxMT0NfU09GVF9MSU1JVD0xMDI0AHNxbGl0ZV9zdGF0MwBTQVZFUE9JTlQgZnRzMwBST0xMQkFDSyBUTyBmdHMzAFJFTEVBU0UgZnRzMwBwMwBFTkFCTEVfRlRTMwBNQVhfUEFHRV9DT1VOVD0xMDczNzQxODIzAHAyAGF0bjIAYXRhbjIAcmVtb3ZlX2RpYWNyaXRpY3M9MgBERUZBVUxUX1NZTkNIUk9OT1VTPTIAREVGQVVMVF9XQUxfU1lOQ0hST05PVVM9MgBhcmdjPT0zIHx8YXJnYz09MgBNQVhfREVGQVVMVF9QQUdFX1NJWkU9ODE5MgBTRUxFQ1QgdGJsLGlkeCxzdGF0IEZST00gJVEuc3FsaXRlX3N0YXQxAEFnZ1N0ZXAxAHJlbW92ZV9kaWFjcml0aWNzPTEAQVRPTUlDX0lOVFJJTlNJQ1M9MQBURU1QX1NUT1JFPTEAYXJnYz09MQB1bmljb2RlNjEAVVBEQVRFIE9SIEZBSUwgJVEuJyVxX3NlZ2RpcicgU0VUIGxldmVsPT8gV0hFUkUgbGV2ZWw9LTEAREVGQVVMVF9KT1VSTkFMX1NJWkVfTElNSVQ9LTEAU0VMRUNUIGxldmVsLCBjb3VudCgqKSBBUyBjbnQgRlJPTSAlUS4nJXFfc2VnZGlyJyAgIEdST1VQIEJZIGxldmVsIEhBVklORyBjbnQ+PT8gIE9SREVSIEJZIChsZXZlbCAlJSAxMDI0KSBBU0MsIDIgREVTQyBMSU1JVCAxAFNFTEVDVCAoU0VMRUNUIG1heChpZHgpIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/KSArIDEAU0VMRUNUJ0lOU0VSVCBJTlRPIHZhY3V1bV9kYi4nfHxxdW90ZShuYW1lKXx8JyBTRUxFQ1QqRlJPTSIldyIuJ3x8cXVvdGUobmFtZSlGUk9NIHZhY3V1bV9kYi5zcWxpdGVfc2NoZW1hIFdIRVJFIHR5cGU9J3RhYmxlJ0FORCBjb2FsZXNjZShyb290cGFnZSwxKT4wAFNFTEVDVCBzcWwgRlJPTSAiJXciLnNxbGl0ZV9zY2hlbWEgV0hFUkUgdHlwZT0ndGFibGUnQU5EIG5hbWU8PidzcWxpdGVfc2VxdWVuY2UnIEFORCBjb2FsZXNjZShyb290cGFnZSwxKT4wAHJlbW92ZV9kaWFjcml0aWNzPTAATUFYX1dPUktFUl9USFJFQURTPTAAREVGQVVMVF9XT1JLRVJfVEhSRUFEUz0wAE1BWF9NTUFQX1NJWkU9MABERUZBVUxUX01NQVBfU0laRT0wAFRIUkVBRFNBRkU9MAA5MjIzMzcyMDM2ODU0Nzc1ODAAREVGQVVMVF9QQ0FDSEVfSU5JVFNaPTIwAGxvZzEwAE1BWF9BVFRBQ0hFRD0xMABNQVhfQ09NUE9VTkRfU0VMRUNUPTUwMAA/MDAwAE1BWF9DT0xVTU49MjAwMABERUZBVUxUX0NBQ0hFX1NJWkU9LTIwMDAAREVGQVVMVF9XQUxfQVVUT0NIRUNLUE9JTlQ9MTAwMABNQVhfRVhQUl9ERVBUSD0xMDAwAE1BWF9UUklHR0VSX0RFUFRIPTEwMDAATUFYX0xJS0VfUEFUVEVSTl9MRU5HVEg9NTAwMDAATUFYX1ZEQkVfT1A9MjUwMDAwMDAwAE1BWF9MRU5HVEg9MTAwMDAwMDAwMABNQVhfU1FMX0xFTkdUSD0xMDAwMDAwMDAwAHNlY29uZCBhcmd1bWVudCB0byAlI1QoKSBtdXN0IGJlIGEgY29uc3RhbnQgYmV0d2VlbiAwLjAgYW5kIDEuMABDT01QSUxFUj1jbGFuZy0xNi4wLjAAL3Byb2Mvc2VsZi9mZC8AJVEuAE4uACQuAC0tACwAbm9za2lwc2NhbioAdW5vcmRlcmVkKgBzej1bMC05XSoAKHN1YnF1ZXJ5LSV1KQAoam9pbi0ldSkAQ1JFQVRFIFRBQkxFIHgodHlwZSB0ZXh0LG5hbWUgdGV4dCx0YmxfbmFtZSB0ZXh0LHJvb3RwYWdlIGludCxzcWwgdGV4dCkAQ1JFQVRFIFRBQkxFICVRLiVzKCVzKQBhdXRvbWF0aWMgaW5kZXggb24gJXMoJXMpAEFOWSglcykASU5TRVJUIElOVE8gJVEuJyVxX2NvbnRlbnQnIFZBTFVFUyglcykAQ1JFQVRFIFRBQkxFICVRLiclcV9jb250ZW50JyglcykAbWFsZm9ybWVkIGRhdGFiYXNlIHNjaGVtYSAoJXMpAE1FUkdFICglcykAQ1JFQVRFIFRBQkxFICVRLnNxbGl0ZV9zZXF1ZW5jZShuYW1lLHNlcSkAQ1JFQVRFIFRBQkxFIHgoaW5wdXQsIHRva2VuLCBzdGFydCwgZW5kLCBwb3NpdGlvbikAVVBEQVRFICIldyIuc3FsaXRlX21hc3RlciBTRVQgc3FsID0gc3FsaXRlX2Ryb3BfY29sdW1uKCVkLCBzcWwsICVkKSBXSEVSRSAodHlwZT09J3RhYmxlJyBBTkQgdGJsX25hbWU9JVEgQ09MTEFURSBub2Nhc2UpAG1lbWRiKCVwLCVsbGQpAEJhZCBwdHIgbWFwIGVudHJ5IGtleT0lZCBleHBlY3RlZD0oJWQsJWQpIGdvdD0oJWQsJWQpACVzKCVkKQB6ZXJvYmxvYiglZCkAbWF4IHJvb3RwYWdlICglZCkgZGlzYWdyZWVzIHdpdGggaGVhZGVyICglZCkARlRTIGV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpAEV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpAChibG9iKQBVU0UgVEVNUCBCLVRSRUUgRk9SICVzKERJU1RJTkNUKQBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX2NvbHVtbihzcWwsIHR5cGUsIG5hbWUsICVRLCAlUSwgJWQsICVRLCAlZCwgJWQpIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcgIEFORCAodHlwZSAhPSAnaW5kZXgnIE9SIHRibF9uYW1lID0gJVEpAENSRUFURSBUQUJMRSB4KGtleSx2YWx1ZSx0eXBlLGF0b20saWQscGFyZW50LGZ1bGxrZXkscGF0aCxqc29uIEhJRERFTixyb290IEhJRERFTikAQ1JFQVRFIFRBQkxFIHgodGVybSwgY29sLCBkb2N1bWVudHMsIG9jY3VycmVuY2VzLCBsYW5ndWFnZWlkIEhJRERFTikAQ1JFQVRFIFRBQkxFIHgoJXMgJVEgSElEREVOLCBkb2NpZCBISURERU4sICVRIEhJRERFTikAKE5VTEwpACVjPykAU0VMRUNUIE5PVCBFWElTVFMoU0VMRUNUIGRvY2lkIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkIT0/KQBSRVBMQUNFIElOVE8gJVEuJyVxX3NlZ2RpcicgVkFMVUVTKD8sPyw/LD8sPyw/KQBSRVBMQUNFIElOVE8gJVEuJyVxX3N0YXQnIFZBTFVFUyg/LD8pAFJFUExBQ0UgSU5UTyAlUS4nJXFfZG9jc2l6ZScgVkFMVUVTKD8sPykALCVzKD8pAFJFUExBQ0UgSU5UTyAlUS4nJXFfc2VnbWVudHMnKGJsb2NraWQsIGJsb2NrKSBWQUxVRVMoPywgPykAU0VMRUNUIGNvYWxlc2NlKChTRUxFQ1QgbWF4KGJsb2NraWQpIEZST00gJVEuJyVxX3NlZ21lbnRzJykgKyAxLCAxKQBJTlNFUlQgSU5UTyB2YWN1dW1fZGIuc3FsaXRlX3NjaGVtYSBTRUxFQ1QqRlJPTSAiJXciLnNxbGl0ZV9zY2hlbWEgV0hFUkUgdHlwZSBJTigndmlldycsJ3RyaWdnZXInKSBPUih0eXBlPSd0YWJsZSdBTkQgcm9vdHBhZ2U9MCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiBzbmlwcGV0KCkAbWlzdXNlIG9mIGFnZ3JlZ2F0ZTogJXMoKQBtaXN1c2Ugb2YgJXMgZnVuY3Rpb24gJSNUKCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiAlI1QoKQB1bnNhZmUgdXNlIG9mICUjVCgpAEZJTFRFUiBtYXkgbm90IGJlIHVzZWQgd2l0aCBub24tYWdncmVnYXRlICUjVCgpAHVua25vd24gZnVuY3Rpb246ICUjVCgpAG1pc3VzZSBvZiBhZ2dyZWdhdGU6ICUjVCgpAGFtYmlndW91cyByZWZlcmVuY2UgdG8gJXMgaW4gVVNJTkcoKQBVUERBVEUgdGVtcC5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX2NvbHVtbihzcWwsIHR5cGUsIG5hbWUsICVRLCAlUSwgJWQsICVRLCAlZCwgMSkgV0hFUkUgdHlwZSBJTiAoJ3RyaWdnZXInLCAndmlldycpAFVQREFURSBzcWxpdGVfdGVtcF9zY2hlbWEgU0VUIHNxbCA9IHNxbGl0ZV9yZW5hbWVfdGFibGUoJVEsIHR5cGUsIG5hbWUsIHNxbCwgJVEsICVRLCAxKSwgdGJsX25hbWUgPSBDQVNFIFdIRU4gdGJsX25hbWU9JVEgQ09MTEFURSBub2Nhc2UgQU5EICAgc3FsaXRlX3JlbmFtZV90ZXN0KCVRLCBzcWwsIHR5cGUsIG5hbWUsIDEsICdhZnRlciByZW5hbWUnLCAwKSBUSEVOICVRIEVMU0UgdGJsX25hbWUgRU5EIFdIRVJFIHR5cGUgSU4gKCd2aWV3JywgJ3RyaWdnZXInKQAsJXMoeC4nYyVkJXEnKQBJTlNFUlQgSU5UTyAlUS5zcWxpdGVfbWFzdGVyIFZBTFVFUygndHJpZ2dlcicsJVEsJVEsMCwnQ1JFQVRFIFRSSUdHRVIgJXEnKQBTRUxFQ1QgMiAqIHRvdGFsKDEgKyBsZWF2ZXNfZW5kX2Jsb2NrIC0gc3RhcnRfYmxvY2spICAgRlJPTSAoU0VMRUNUICogRlJPTSAlUS4nJXFfc2VnZGlyJyAgICAgICAgIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDIExJTUlUID8gICkACikAQkxPT00gRklMVEVSIE9OICVTICgAU0VMRUNUIHNxbCBGUk9NICIldyIuc3FsaXRlX3NjaGVtYSBXSEVSRSB0eXBlPSdpbmRleCcAREVMRVRFIEZST00gJVEuc3FsaXRlX21hc3RlciBXSEVSRSBuYW1lPSVRIEFORCB0eXBlPSdpbmRleCcAbmFtZT0nJXEnIEFORCB0eXBlPSdpbmRleCcAREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnAERFTEVURSBGUk9NICVRLiclcV9zdGF0JwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInAFNFTEVDVCA/IFVOSU9OIFNFTEVDVCBsZXZlbCAvICgxMDI0ICogPykgRlJPTSAlUS4nJXFfc2VnZGlyJwBTRUxFQ1QgbWF4KCBsZXZlbCAlJSAxMDI0ICkgRlJPTSAlUS4nJXFfc2VnZGlyJwBERUxFVEUgRlJPTSAlUS5zcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9JVEgQU5EIHR5cGU9J3RyaWdnZXInAERFTEVURSBGUk9NICVRLnNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9JVEgYW5kIHR5cGUhPSd0cmlnZ2VyJwB0YmxfbmFtZT0nJXEnIEFORCB0eXBlIT0ndHJpZ2dlcicAJyUuKnEnACV6LCAnYyVkJXEnAHR5cGU9J3RyaWdnZXInIEFORCBuYW1lPSclcScALCB4LiclcScAaW5kZXggJyVxJwBKU09OIHBhdGggZXJyb3IgbmVhciAnJXEnAERFTEVURSBGUk9NICVRLiclcV9kb2NzaXplJwBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3RhYmxlKCVRLCB0eXBlLCBuYW1lLCBzcWwsICVRLCAlUSwgJWQpIFdIRVJFICh0eXBlIT0naW5kZXgnIE9SIHRibF9uYW1lPSVRIENPTExBVEUgbm9jYXNlKUFORCAgIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcAU0VMRUNUIENBU0UgV0hFTiBxdWlja19jaGVjayBHTE9CICdDSEVDSyonIFRIRU4gcmFpc2UoQUJPUlQsJ0NIRUNLIGNvbnN0cmFpbnQgZmFpbGVkJykgRUxTRSByYWlzZShBQk9SVCwnTk9UIE5VTEwgY29uc3RyYWludCBmYWlsZWQnKSBFTkQgIEZST00gcHJhZ21hX3F1aWNrX2NoZWNrKCVRLCVRKSBXSEVSRSBxdWlja19jaGVjayBHTE9CICdDSEVDSyonIE9SIHF1aWNrX2NoZWNrIEdMT0IgJ05VTEwqJwBVUERBVEUgIiV3Ii5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3F1b3RlZml4KCVRLCBzcWwpV0hFUkUgbmFtZSBOT1QgTElLRSAnc3FsaXRlWF8lJScgRVNDQVBFICdYJyBBTkQgc3FsIE5PVCBMSUtFICdjcmVhdGUgdmlydHVhbCUlJwBVUERBVEUgdGVtcC5zcWxpdGVfbWFzdGVyIFNFVCBzcWwgPSBzcWxpdGVfcmVuYW1lX3F1b3RlZml4KCd0ZW1wJywgc3FsKVdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZVhfJSUnIEVTQ0FQRSAnWCcgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScAc3FsaXRlXF8lACQAU0VMRUNUKkZST00iJXciAFNFTEVDVCByYWlzZShBQk9SVCwlUSkgRlJPTSAiJXciLiIldyIAQU5BTFlaRSAiJXciLiIldyIAZm9yZWlnbiBrZXkgbWlzbWF0Y2ggLSAiJXciIHJlZmVyZW5jaW5nICIldyIAZG91YmxlLXF1b3RlZCBzdHJpbmcgbGl0ZXJhbDogIiV3IgBzeW50YXggZXJyb3IgYWZ0ZXIgY29sdW1uIG5hbWUgIiUuKnMiACVjIiVzIgAoIiVzIgBjYW5ub3QgJXMgJXMgIiVzIgBnZW5lcmF0ZWQgY29sdW1uIGxvb3Agb24gIiVzIgBjYW5ub3QgSU5TRVJUIGludG8gZ2VuZXJhdGVkIGNvbHVtbiAiJXMiAGVycm9yIGluIGdlbmVyYXRlZCBjb2x1bW4gIiVzIgBjYW5ub3QgVVBEQVRFIGdlbmVyYXRlZCBjb2x1bW4gIiVzIgAlcyBpbiAiJXMiAFVQU0VSVCBub3QgaW1wbGVtZW50ZWQgZm9yIHZpcnR1YWwgdGFibGUgIiVzIgB1bnNhZmUgdXNlIG9mIHZpcnR1YWwgdGFibGUgIiVzIgBjYW5ub3QgY3JlYXRlIGEgVEVNUCBpbmRleCBvbiBub24tVEVNUCB0YWJsZSAiJXMiAG5vIHN1Y2ggaW5kZXg6ICIlcyIAdW5rbm93biBkYXRhdHlwZSBmb3IgJXMuJXM6ICIlcyIAY2Fubm90IGRyb3AgJXMgY29sdW1uOiAiJXMiAG5vIHN1Y2ggY29sdW1uOiAiJXMiAG5vIHN1Y2ggY29sdW1uOiAiJVQiAHVucmVjb2duaXplZCB0b2tlbjogIiVUIgB3ZWVrZGF5IABub24tdW5pcXVlIGVudHJ5IGluIGluZGV4IAB3cm9uZyAjIG9mIGVudHJpZXMgaW4gaW5kZXggACBtaXNzaW5nIGZy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KQAAcUQAANYzAAD2MgAA9CoAAHkgAAB2DAAALSUAAEE4AADWMwAAr0EAAFkrAAA1BQAA1jMAAIApAAD2MgAAEEMAAAYuAACAEwAAjSsAAPkFAABaLQAAywsAAHsTAAArJAAA1jMAAOAvAACtKQAA4ysAABA1AADeNwAAFgoAABs4AAArJAAA1jMAADY0AAAmBAAAEi4AAHc5AAB3MgAATQ0AADAvAADoBwAAAwIBAEH0lQILJzsAOwA7ADsAAAA7ADsAOwAAADsAOwA7ADsAAAAAAAAAOwAAAAAAOwBBpJYCCys7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAAAAAAAAAOwA7AEHolgILUTsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOwBB8JgCC5QD//3//QD////+/v79+/r/AP3/APv+AP3+//4A/Pr+AAD+/fz8/P39+/78/P/+/fwA/wD+/v39/f7+///+/f4A/v4A//75+/v2AAD9AP7///z+APf8//38//3//v/39vz7//8AAPv9+/4AAP7+APv6+Pr6AP7//f/9+/3//v38/vwAAP3+AP37/f//AP7+AAD9AP4A/vz8+gD+AP7+/Pf7+f37+fgA/vT3+/j+/v8A/f3//f///fv//////fr7/Pr7//v9/f39/f39/f79+/79/fz6+/7+/v3//vv//vv9+/v8+/v8/gD/AAD9/wD99P8AAP37/QD+/P79/gD9+/r7+v7++/X//gD///0A/v3+/f3+9/j6/fz6/////Pr9AP7//f/9+vn6//j//PgA//3//v3//v36//3//fv7+vz7//4A/fr///7//v7+AP7+/v/+/v///P77//7///79AP/+/wD+//z+//////////4A/vz+/v3/AP/////+//8A////////////AP3/AP8AAP///f4A/P4AQZCcAgvWLHAGxQX4BEIBQgEBACcFxgXTBS0HLQctB9cBAAAAANYARQQtBy0HLQctBy0HLQctBy0HLQctBy0HLQctBw8BDwHDBMME2ABYAAEAAQABAAEAAQAoAG8AAgFpAdUBAAJHAm4CtQLcAiMDSgORAzEERQRFBEUERQRFBEUERQRFBEUERQRFBEUERQRFBEUERQRFBEUEWQRFBMAEvQO9A2MGfgbxBi0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HLQctBy0HiQC1ALUAtQC1ALUAtQC1AF4ArgFCAEEAcABuARUCFQLkAu0EFQIVAk8ATwAVApwBnAGcAU0AnAF7AHEAcQAWABYAMggyCEgBSAFIAe8A1AHUAdQB1AH3A/cDmQFuAWkEogQVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCyQNtAm0CFQKCAhQDFAPMBMwENgM2A0MA+gQyCDIIMggyCDIIMggyCBsFugO6A0kC2AGAAoMBtwIaAh0CvAIVAhUCFQIVAhUCFQIVAhUCFQIVAt4AFQIVAhUCFQIVAhUCFQIVAhUCFQIVAhUCmwSbBJsEFQIVAhUCNQIVAhUCFQKUA3gEFQIVAggFFQIVAhUCFQIVAhUCFQIVAn8CMgXRADQENAQ0BDQERALRANEAIQUAA5UDiQKdBCQFlQEkBdYE+QCdBJ0E+QCdBJUB1gRZBdAB6wT0A/QD9ANYBVgFWAVYBbgAuAAuBYgDBwXIBbAGsAZhBmEG3QbdBmEGbwZzBvcG5Ab/Bv8G/wb/BmEGDgeNBnMGcwaNBvcG5AaNBuQGjQZhBg4HigbzBmEGDgcfB2EGDgdhBg4HHwfEBsQGxAYCBzAHMAcfB8QGygbEBgIHxAbEBqUGNAfeBt4GHwdhBv0G/QYPBw8HzgbYBlUHYQbPBs4G3wblBo0GVwdpB2kHegd6B3oHMggyCDIIMggyCDIIMggyCDIIMggyCDIIMggyCDIIzwBHBEsBbAKHAyYDMgTLBZgFyQUqBVoFcgXrBQsFCgYLBhUGOwY+Bj8GmgWtBVIGtgUfBtEFbAZ2BlAGfAYMBg0GkgaVBj0G5gKVB5kHhwf7BpEHlAeOB5AHHQcSBygHkgeSB5YHHgebByAHnQewByQHMQeSBzIHeAeTB5IHIgeBB4IHhQeGBzoHSQecBzMHvge8B6wHUAcjB4gHsgeJB4MHpgc4B10HuQe/B8EHTwdYB8AHlwfCB8MHxAfGB5oHowfHB3cHxQfKB58HyAfMB1EHzgfQB9EH0gfTB9QHzweNB2IH2QfaB3YH1QfcB2QH2wfWB9cH2AfdB54HqgelB94HsQegB98H5wfqB+sH6QfsB+IHeQd7B+8H2wfxB/QH9Qf2B/cH+Af7BwMI/Af9B/4H/wcBCAIIAAiYB48HoQeiB6QHBAgHCAUIGQgaCMEAwQDBABIBEwEUAcEAEgETARQBwQDfANsA4QDOANIA0wDUAMEAEwDbAOkA2ADYANkA2ADZAMEAJwHYANkAHwDBANgA2QDBAOQA1QDmACcAzgDYANkAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAwQATALkAugC7ALwAvQC+AP0AEgETARQBwwDBAMUAwQAFARIBEwEUAf0AzADuAMwAUQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQASARMBFAEGAWYAZwBoAGkAagBrAGwAbQBuAG8AcABxAO8A8ADvAPAA0gDTANQAOgE7AToBOwA8AVYA/ABYAPwAEwA6ATsBAAEBAXEAGQBIACgBigCLAAoBZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAUQAkATsAJAEqAWwAbQBuAG8AcABxAEUAdAB1AHYASABqAGsAwQBvAHAAcQA2ADcAOAA5ADoAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAeAAZANgA2QCRAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAOcAigCLAHQAdQB2AKQAmQATAJsANgA3ADgAOQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQCAAIEALgAvADAAMQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDYAMEAGQA7AMEAEwClAKYAwQBDABgAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEASQDYANkAOwDYANkAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAeQCRADsAwQB0AHUAdgB3ABEBzAB6AHsAfAATABQAhgAWAIgAiQATAIQAfwCAAIEAGAAWABcAdAB1AHYAJADBAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAO8A8AA3ATgB1wBqAGsA8QATADsA2ADZAN8A/ABzAHQAdQB2AJcAeAAaAEcAwQA0ATUBwQCVAIAAOQHYAA0BUQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQD9ANgA2QBkAF8AmQA7AJsABQFqAGsAGQDBAGUAwQDBAOcAcgAZAHQAdQB2AHEAMAF5AMEAzAA7AHcAeAB5AHoAewB8AH0A2ADZAMEA2ADZAIMAigCLAOYAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAmQCaAJsAnACdAO8A8AB0AHUAdgBMAMEAFwATABkAFgD9ABcA/AD9AGwAVwDMAFkABQHGAFwABQF0AHUAdgDBADIBMwHYANkAlgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA7AMEA2ADZABMA7wDwABsBFwBqAGsAbABtAG4AbwBwAHEASQD8AP0AjgA0ATUBigCLAFEAOQGRACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADMBZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAGQF0AHUAdgAdARcAwQAZAHcAOwDBAHoAewB8ADsAfwDLADsAzQATAAwBhAAZABcAFgDBAIoAiwD5AMwA+wBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQATABYAFwA7ABcAGQDvAPAAdAB1AHYAwQALAHQAdQB2AHQAdQB2APwADQEWAMEADwArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQARAY8AwQB2AI8AZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEATAB2ADsA8QB0AHUAdgAwAdgA2QAkAY8APABZAPEAEwBcAMEAwQAXABYANwE4AecAZQAWAI8AZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAEwDBAMEAOwAXAHQAdQB2ADsAyQAVAPEAMAEWAM4AfwCAAIEAwQCAAIEA6wDsADABKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAFgDBANgA2QDBAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAOcAwQDBAMEAdAB1AHYA2ADZAHQAdQB2AOIAUADBABMA6wDsADABFwDTANQA5wDMANgA2QDNAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ABMAwQB7AEwA7wDwAMEA/QDvAPAA7wDwAMEAagBrAMEAWQD8AMEAXAA7APwAjQD8ACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ABwBoQDYANkAwQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQDnAMEAEAC7ALwAvQC+AAcACAAJADUBwwAZAMUAOQETAH8AgACBAAYBzAAWAHUAGADYANkABwFmAGcAaABpAGoAawBsAG0AbgBvAHAAcQArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDBAO8A8ADBADsAEwC8AP0AvgBNAOIATwDBAMMA/ADFAMEAEwAtAS4BwQDBAMwA2ADZAOIA2ADZAAoBzACfAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEADADvAPAA6AAqAe4AdQD9AO8A8ADuAAMBBAHBAPwAGwAfAMEAwQCOAMwA/ADBAMEAJwAGAcEAZAAKARYBKgDMAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHUAnwDYANkAeQDYANkAPwDBAMEAwQDvAPAAcwB0AMEAKgFJAO4A7gDnABMA7wDwAPwAFgAYANMA1AAYAMEA2ADZANgA2QD8AJkAmgCbAP0AEAATAJAA1QAMASsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AO4AEwA7AMEAOwArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQAWABcAwQAZAMEAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAHAFNAMEATwBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQAeAcEAwQDBAHUAIwF1AOgAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAzAAWABcAQgAZANgA2QAjAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAMEADAFVAGUAwQA1ATUB8AATADkBOQFeANAA0QDBAO8A8ADBAEIA/AATAAwB9ADYANkAwQBKANUA/AChABMABwH+ACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDBANgA2QAFADsAwQATAPQACgALAAwADQAOAGUANQERAJIA/gA5AcEAwQBMAHMA2ADZADUBDAAHAR4AOQEgAC4AVwAuAFkAggDBAFwAKAAWAAcBGwDYANkAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAKgCWACMB2ADZAHQAdQB2ABMAFADBABYARgAEAXQAwQAYAAgBwQAHAU4APwA9AFEAdAAkAMEABAHBAB0AwQAIAcEAIQCRAMEAOwAwANgA2QBiANgA2QDBAHMAwQBzAMEAOwDYANkA2ADZANgA2QDYANkA/wDYANkARwDBAIMAwQAZAEEA2ADZANgA2QDYANkA0ADRAFUAhQDBAGQAwQBaAIoAiwCKAIsA2ADZANgA2QDBAGQAwQBsAIcAdAB1AGoAawCMAHkA2ADZANgA2QByAKIAdAB1AHYAKwEsAXkA2ADZANgA2QDBAPQAwQCHAPQAwQAAAQEBjAD0AMEA/gDBAMEA/gCZAJoAmwCNAP4AlQCWAAIB2ADZANgA2QCZAJoAmwCcAJ0AAAABAAIA2ADZAAUAcwCeAMEAoAAKAAsADAANAA4AwQA7ABEAfgDBABMAFACBABYAwQAWABYAGADBABcAHgAZACAAEwAUAJAAFgAkANgA2QAoAMEA2ADZAMEAmACBANgA2QDBACQA2ADZAMEAYwDBAMEANQDBAMEAOwAXAMEAGQDYANkAwQDYANkAmABGADsARwA7AHUAwQDYANkATgDYANkAUQDYANkAPgFHAFUAwQCFAMEAwQBaABcAFwAZABkAeAB5AGIAVQDBAGQAwQAXAFoAGQB5AGoAawATANgA2QDYANkAZAByAIMAdAB1AHYAagBrAHkA2ADZANgA2QDBAHIAdQB0AHUAdgCFAMEAeQDBAMEAigCLAMEAFwDBABkAFwAXABkAGQAHAAgA2ADZAMEAwQCZAJoAmwCcAJ0A2ADZAMEAogDYANkA2ADZAJkAmgCbAJwAnQABAAIAwQDBAAUAEwAUADsAFgAKAAsADAANAA4AwQBhABEAwQAXAMEAGQAgASQAwQDyANgA2QDsABcAHgAZACAAEwAUABcAFgAZANgA2QAoANgA2QDYANkAwQA7ANgA2QDBACQAUwBUAJkAmQCbAJsAFwBHABkAFwDBABkAwQDBAMEAdQDBAMEAwQBGAMEAwQA7AMEA/wD/AB8BTgD/APMAUQC/AP8AKQFHAA8BZAAlAfUACwHWAPYAagBrAGwA9gAPAWIA9QAlAXIA3AB0AHUAdgALAQ8BeQAPAeEA2wDlANsAZADbAAMBAwEDAQMBagBrAPkAxAA8ABgBjQDzAHIA+QB0AHUAdgCFAPUAeQDIACkBigCLAJkAmgCbAJwAnQApAcgAJgATABQAlwAWAMgAlgCMACYBJgEWABABKwDqABIAogAOAcgAJADtAJkAmgCbAJwAnQDtABsB7QDtABIAxwCVAPYAEAEOARAByACeAPYA9gDqADsA6gD2AMcAIgE+ACEByADHABYA3QBzAEcAyADIAMcAxwDdANoA2gATABQAQAAWANoA4wAWAOAAfgDgAKUA3QAYADEByABxADgBJADaANwA2gBkABoB2gBbANoAPQFqAGsA3QDjABoBPQFSAJQAcgAJAXQAdQB2ADsAkQB5ABYAFQGeAMgACQEZAMoAkwD6AEcAFwENAJIAwgDCAPkA+AD6AIwA9wD2AAYAwADAAMAALwEvAdUAzwAsAdUAmQCaAJsAnACdANUA1QBkANUA3gDPANYA1gBqAGsABADeAM8AAwAWAKMAcgAPAHQAdQB2ABAAFwB5ABcAiwCXAIIAGQCOABAAGAAUAJAAAQCOAIIAggA9ADUANQAlAJcANQA1AIIAdAAiAAEAjQAFABYAcwChAI0AmQCaAJsAnACdABkARABEAEsAKQBzABgAgwAUABMAfQAWAGAAFgAWAEMAFwAWAEMAOwAYABYAHABDABcAFgAWAJUAFwAXABcAdAAXABkAJQBhAI0AFwAXABYAjwAZAEsAWAAiACIAIgAiAFYASwBdABcAIgAWACIAGQAYACIAGQAXAI4AFwCOACwAFwAXABcACwAXABkAFgAWABYADwAXABcAFgAWABkAAQABAI0AGQAXAIcAPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AY0AjQA/AY0APwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AT8BPwE/AQBB8MgCC+QgOALQADgCdgBzAOUAOAJ2AHMA5QA4AiIFeQENBZgBMgIyAjICOAKZAXoBIgX8BCkAKQApACkA0AD2BUcARwDLA6MBKQApAOsBLwEXAS8BzAONAUcARwB9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfADcAZkB2QQBAAEAPwICAN0EJgJ2AHMA5QA9AeABkgDgAQwCdgBzAOUAEQIvBaEBCwKOAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AHYAcwDlAEcBegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBHAEcARwBHAG6AboBugEfBngBIQaoBHcBiwQ1AosENQKZAR8GGQIDAeIAvAFlAJEAwQE8AS8C8AB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAF9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACOACYBqARTAcABeAB4AHgAdwB0ALwBfwCoBKkEqgSUALkBuAE4AncAdAC8AXwAfAB8AHwAdQB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHGAXEADQANACICegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBpgE8AS8CqASpBKoElQDIBJkByAR8AHwAfAB8AHoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AdEBVgENBA0EGwQeBH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AP8ECgLeAKgEOAKZAeAAAgKvAFIAUwB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHvAxAAEACoBIUAhQB9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfAB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAERBCICqAR1AagEqQSqBPwAmgWPAfgB9QH0AW8AMAI2AgQAngOeA7EB8wFUAcwBSAFoAYoB1QSoBKkEqgQzAjgCegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBHAEcAXEBLAZHBrkBuAGaAJkBvQFHAEcABgU1AsUEqASpBKoEVQDHBA8BLQIfAgMCGQY4AmIAxgQGAP4E2AGOAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ACYCDQANAAME+wHIBKgEyAQlAm0AbQDeADgC1gSvADgCqwFuAMUAvQE6AjkCrgEQBvkDRQEnAqgEDgEfAXAB/gFrAf0BAQFHAEcAHwJHAEcAZwE8AS8CTQZ6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAH5A/kD+wP8AxsAHAEcAagEqQSqBIYEOAJMBpkBhQO+ACYCZAE1AiYCqQMVAgUChgQEAp0BhgQoAqgEqQSqBDgCIAISBjMAMwDWAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AKgE2gGHAIcAmQEcARwB0gX5AXkAeQB4AHgAeAB3AHQAvAHvAzUCBgLZAB0CGQY8AS8CjgAGABQCfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAEwZ6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAHlAagEqQSqBOIBGQHzBL0D/ACoBHUB+AH1AfQBqARUATsCqAQ7ApkBJAHzAb0DbAO/AOABPAEvAoABIgF8AXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AX0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AJkBigFwBKgEZQNkABwBHAGoBKkEqgR1AUUEqASpBKoEqASpBKoENQLHASAAdQHpAH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AJkFvwM4AuQAvgN6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAGGBOQAqASdAKgEqQSqBBEGDQANAC0BvQPQBIYEmQCZAYYEdQEvBpgEBQBxASwGrQHWBAMAvQN6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAF9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACZAdAANwKoBAQEqASpBKoEqASEAVQDmwAQBh4BkgFKBEoE6AE4AtEBVgEnBScFEAZ9AH4AUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfACBADgCDQANAHYBegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBLgE4AsUBEAKoBKkEqgQNAA0AqASpBKoEEQXPAfMEmQElBSUFEAb0A8UBxAHIACsBRwBHAPEEegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAmQHjADEEhgQcARwBowE4ARYBFgEdAR0BiwWWAZUBfgGGBDUCOAKGBKwENQJABjUCfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAxQHKBQ0ADQAABnoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AckAOAJiATIGPwICAN0ESANJA0oDGgY9AbwEkgAGAJkB/wD+AP0AzgAvBQkArAQGAUcARwCoAXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AX0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ADgCHAEcATgCvQSZAT4COQHdBF0BEAVgAaMBPQE1ApIA6wENAmsGiwFzAesBLwVGAEYADwVHAEcA8AAtBWgAUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfAB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAFaBBwBHAGsAcAB9QW9BLcBHAEcAdEFSAU3AdoBNQJbBMsD6wHrAdkA7wQ1AgIGOALMA88AOAIDBPAAfwFcBAcCegB6AHoAegB5AHkAeAB4AHgAdwB0ALwB+gNrAEcARwD5Aw0ADQCQAzgC1wU4AhwBHAFhAA4C6wHAAZEDLgUqBSECmQEcARwBNQKXANEA1wXZBQYBwgE3ADcAOAA4ADUC+QP5A/sDuwFMAZkBDwIMACcBfQB+AFAAwQTBBBoEHQQQBBAEewB7AHwAfAB8AHwAWwGZAWAD/gW9BH0AfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8AHEEaQbaAWkGcwF9AHIAUADBBMEEGgQdBBAEEAR7AHsAfAB8AHwAfADXBUkB2gFLAXoAegB6AHoAeQB5AHgAeAB4AHcAdAC8AcsAiwU4Ag4FYAPQAb0EtAF6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAEpAnEEagYbAmoGDwAPAHwDegB6AHoAegB5AHkAeAB4AHgAdwB0ALwBOAIqARoCbwSLBRcGGAYzBZkBBgAGAJEE9ASfAUABHAEcAYsF/AE1Ag0CLAHJASsAKwA4An0DDAA1AkoB3gGpAZcBfgBQAMEEwQQaBB0EEAQQBHsAewB8AHwAfAB8ADgCOQA5ACABqASLBfABygGIAYgBhwERAYUBbwQWBlEDkQSXAQYAOAJBAYYE1gEsACwAFQZaBKoB6gAGAEMBAAEcAgABhgSvATgChgRCAREA5wFbBDoAOgB6AHoAegB6AHkAeQB4AHgAeAB3AHQAvAFcBNgA4QE7ADsAqASpBKoEbwAwAkQBBADsAMgBDgI4Au0AyAE4ArUBqAAsAqQBjQDfATMCOAIlATgCRwQ4AiUBOAJHBBMCOAJoAwgAPAA8AOsAPQA9ADgCngE4Ap4BOAK9AT4APgAtAC0ALgAuAC8ALwDHADEAMQAtAjgCZwE4AmQA5gEyADIAPwA/AEAAQAAxAp8BFwKaATgCAwQ4AhYCPAEvAjwBLwJBAEEADgAOADgCAwQ4AgACpANoA/oDbQBtAKMD+QNCAEIAgwCDAG4AwwG9AToCOQKgAbEA+QOEAIQAQwBDADgC0wE4AqQD1wFUBRsB4gCjAzsBUwWXATgCywGXAfkD+QP7A+8AlwFWANUARgU0ADQARABEAPkD+QP7A/wDGwAxBpwEvwFFAEUAIAFhAGwABQZqAIgBiAGHAREBhQE4Am8DUQNzAzgCbwAwAtIBBAA4ApgAHgAmADgCbATqAIwBQwFvADACDwIEADMCNQA1AEIBOAKjAKMAOAJRAdQBpACkAE0BMwJMAEwAOAIhAeoFOAIfAOkFOAK9AVIB4wFkADYANgBYAUgASAAoAewAOAQtAr0BbwNQBYYAhgCoAEkASQCNAKEAoQAmBi0CFwI4Aj8BOAJcARgC8QPZAQUBBQF7A3oD6wAXAjgCAwQ4AtsBFgIFAW8BbQBtAAkCiACIAIIAggADBG4AbgG9AToCOQJtAG0A+QOiAKIAnACcADgCbgA4BL0BOgI5ApoBXwH5AzgCYQE8AS8COAJXATgCZADxAWUBAgFkAIIDgwOMAIwAYwEeBfkD+QP7A/wDGwCLAIsAagHDAYkAiQCKAIoA+QP5A/sD/AMbAJwEvwE4AnQBIAFvADAC/QMEAIgBiAGHAREBhQE4AnUEUQM4AjQEOAICAewBMwI4AtMASwBLACsCwgPqAAUBQwFvADACoQMEAHEATQBNAEIBSgBKACoAKgBdBb0BMAAwAIoFMwLOA88DRARDBEQEQwReAy0ClgCiA0IFcQBOBSoCkAX9A/sE8gTmBOwA5QTnBL0BOQY/BTQBFAGoADUBCwCNAIkBNgHoAC0CfQUDBE8BIwF4BdsAUAFtAG0AqAMpAYIF6wBVAd0BbgD2Ab0BOgI5AnEFgQX5A5ABDQVtAd8AzgUDBM0FSwVMBUoFSQVtAG0AzAA8BtAELgIJAdoAbgDNAL0BOgI5ApoBgwH5A/0FswA8AS8C+QP5A/sD/AMbAOYA+wXNBE8AMAJVAAQAogHXACQCUQBUALwAfgWtALUAzQHDASMAzgEzArcA+QP5A/sD/AMbALgA0wW5ALoA7wHyAGIAjgGEBSQAgwXkAVsA1QGRAYYFvQHAAMgF9gDeBeoBWgEVAfgAxADtAf8BLQJeAegE+QD6AJMBIQUgBW8AMAKwAQQAHwUYBV0ASwZzA0oG4ACUAbIBCAIHAbMBKwYzAgMFAgVsAQMEMgEBBQgBSQYdBm0AbQByARcFMwEcBrYBgABuAGIFvQE6AjkCvQEiAvkDCgC6BWkAfQFhBSIAPAJjADgFLQI6AaIEEgIQARIBewHSADcFIwKBAYIBEwE9AuME3gSbAZwB7gWlALIA7wX5A/kD+wP8AxsA7QXsBQMETgCTAKYA3ADdAG0AbQBEAzABpwC+AdQAPgFuAOcAvQE6AjkCkABCBPkDQARGAbQAqQC8BLYATgHuAJMD8QBQBLsAqgCrAKUBVwBYAKcBvQBZAFoArABTBPMATwT0AJ4AEgD1AFkB9wD5A/kD+wP8AxsABQFIBMEAygTpAcIAJQBuAVMD7gH7AMMA+gFcABMA8gFmARQA9wFxA2kBXgB+AzEBnwABAicAXwCWBKAAIATGA3cEYACuAHYE4QAYARoBxgDAA3EAjASIBAQBFQAWABcAigSQBI8EfAQYACEAGQDKAB4CGgBkAC8EZgAhBGcABwAfBCMEWQQkBFgECgELARwAKACGAf4DXwNwAB0ANAKeBJ0EDAGwAI8AnQPaBNoE2gTaBNoE2gTaBNoE2gTaBNoE2gTaBNoEDQFCBtoEQQYAQeDpAguBCW8GbwZvBsMF2ARHBdgE2ATYBMMFwwXDBdgEZQVlBfgF+QTYBNgE2ATYBNgE2ATYBNgE2ATYBMIF2ATYBNgE2AQbBhsG2ATYBNgE2ATYBNgE2ATYBG4F2AR1BdgE2ATYBNgE2ATEBcUF2ATYBNgE9wX5BdQFfAV7BXoFeQXmBVkFcwVsBXAFvgW/Bb0FwQXFBcQF2ARvBZ4FrgWdBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEpgWtBawFqwW0BaoFpwWgBZ8FoQWiBdgE2ATwBNgE2ATtBCMF2ATYBNgE2ATYBAsGCgbYBKMF2AT5BJgFlwWxBaQFsAWvBf8FPwY+BtUF2ATYBNgE2ATYBNgEGwbYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEWwUbBhsG2AT5BBsGGwZcBVwF9QT1BF8F2AQGBj4FPgU+BT4FRwU+BdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBPwF+gXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ARDBdgE2ATYBNgE2ATYBNgE2ATYBNgE2AQ4BtgE4QUxBUMFQwVDBUMFRQUyBTAFPQX6BN8EZwZ/BXQFRAV0BWQGcgV/BX8FcgV/BUQFZAYKBU8GBQVlBWUFZQVbBVsFWwVbBV8FXwXABUQFPQXYBGcGZwZNBU0FZgZmBk0F1QVXBogFJgUsBSwFLAUsBU0F6gRyBVcGVwZyBYgFJgVyBSYFcgVNBeoE5QVhBk0F6gTLBU0F6gRNBeoEywUkBSQFJAUZBdgE2ATLBSQFCgUkBRkFJAUkBS0G2ATPBc8FywVNBSUGJQZoBWgFbQVfBcYFTQXYBG0FawVpBXIFHAU7BjsGNwY3BjcGbAZsBgYGSAb5BPkE+QT5BEgGDAUMBfoE+gT5BEgG2ATYBNgE2ATYBNgEQwbYBAEG1gVRBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2AQMBtgE2ATYBNgE2ATYBNgE2ATYBNgEjQXYBNsEAwbYBNgE2ATYBNgE2ATYBNgEdgV3BVIF2ATYBNgE2ATYBNgE2ASFBdgE2ATYBIAF2ATYBNgE2ATYBNgE2ATYBGMG2ATYBNgE2ATYBNgE5AXjBdgE2ARPBdgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgECAXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEagXYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEKgZgBdgE2ATYBNgEWgbYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgEUwY0BY8F2ASOBZIF7gTYBOQE2ATYBAkAQYDzAgvnBr0AvQC8AL4AvwC/AL8AvwC+AL4AvgC+AL4AwwDFAMcAxwDGAMYAxADEAMsAywDNAM0AzgDQANAA0ADRANUA1gDXANcA1wDXANcA1wDXANcA1wDXANcA1wDXAOAA4ADcANwA3gDeAOEA4QDhAOEA4gDiAOIA4gDiAN8A3wDjAOMA4wDKAOUA5gDmAOYA5gDmAOkA2gDaAOoA6gDrAOsAvgDtAO0AvgC+AL4AzADMAMwA7wDyAPIA8gDwAPAA/AD8APMA8wDzAP4A9AD0APQA/wD/APUA9QABAQEBAAEAAQABAAEAAcgAyADuAO4ABgEGAQYBBgECAQIBAgECAQMBAwEDAQgBBAEEAfkA+QDnAOcA2wDbANsACQEJAQkB9wD3APgA+AD6APoA+gD6AL4A9gD2AAsBCwELAQsBvgAMAQwBDAEMAb4AvgAPAQ8BDwEPAQ8BDwEQAQ0BDQEOAQ4BBwEHAdkA2QDZANkA2QDYANgA2ADZANkA2QDZANkA2QDZANgA2QDZANkA2QDZANkA2QDZANkAEgHZANkA2QDZANkA2QDZANkA2QDZANkA2QATARMB2QAUARQB2QDZANkA2QDZANkAFwEXARgBGAEWARYBBQH9AP0AFQEVAb4AGQEZAd0A3QDoAOgAGgEaAb4AvgC+ABsBGwG+AL4AvgC+AL4A0wDUAL4AHQEfAR8BHwEgASABIAEiASIBHgEeASQBJQElASMBIwEjASMB2QDZAOwA7ADsAL4AvgC+ACcBJwG+AL4AvgC+AL4AvgC+ACgBvgC+AL4AKgEsAS0BLQEuAQoBCgExATEBMQEwAfEA8QAyATIBMwE0ATQBNAE0ATQBNAE1ATUBNQE5ATsBOwE8ATwBOgE6AT0BPQE+AT4BPgH7ABEBEQERATgBOAE3AbkAugC6ALsAuwC7AMAAwADAAMIAwgC+AMsAyQDJAMEAwQDBANAA0QDSANIAzwDP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IGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZAAAAAAApQJbAPABtQWMBSUBgwYdA5QE/wDHAzEDCwa8AY8BfwPKBCsA2gavAEIDTgPcAQ4EFQChBg0BlAILAjgGZAK8Av8CXQPnBAsHzwLLBe8F2wXhAh4GRQKFAIICbANvBPEA8wMYBdkA2gNMBlQCewGdA70EAABRABUCuwCzA20A/wGFBC8F+QQ4AGUBRgGfALcGqAFzAlMBAEGY7wMLDCEEAAAAAAAAAAAvAgBBuO8DCwY1BEcEVgQAQc7vAwsCoAQAQeLvAwuIAUYFYAVuBWEGAADPAQAAAAAAAAAAyQbpBvkGAAAAAAL/AARkACAAAAT//wYAAQABAAEA//8B/wH//////wH/Af8B/wH/Af8B/wH/Af//////Cv8gAP//A/8B/wT/HgAAAQX//////2MAAAhjAOgDAgAAAP//////AAAAAf8B//////////////8AQfnwAwsBBABBhvEDC0QB/wH//////wABIAAEAIAAAAj//wH/Af////////8B/wb/B/8I/wn//////7wCvAIBAP//AQABAP//AAD//////////wBB2vEDCwEUAEH68QMLHv//AQAK////////////Af8B/wAAAAAAAAH/Af8B/wBBqvIDC0gB/wAAAAAAAAH/Af8BAAAAAQAAAAH//////wAAAAAB////AAAAAP////////////8oAAr//////wEACv////8A//////////8AQdbzAwscAf8B////AQD//////////////////wr//////wBBgPQDCx8BAAAAAQAAAQABAAD+//9/AAAAALAEAAAoAAAAAAABAEHA9QMLARQAQcz1AwsB+gBB+/UDCwFAAEGM9gMLCP7//3////9/AEGs9gMLKQcAAAADAAAANAAAAAACAAAAAAAAZwUAANR0AABzAAAAdAAAAHUAAAB2AEHo9gMLRXcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAAB+AAAAAwAAADQAAAAAAgAAAAAAABczAADYdAAAcwAAAHQAAAB1AAAAdgBBwPcDC0V3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAAMAAAA0AAAAAAIAAAAAAAAANAAA3HQAAHMAAAB0AAAAdQAAAHYAQZj4AwtFdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAADAAAANAAAAAACAAAAAAAAgysAANR0AABzAAAAdAAAAHUAAAB2AEHw+AMLJHcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAAB+AAAAAAAAQABBoPkDC27SKQAAlAAAAAAAAADdMQAAlQAAAAAAAAArEAAAlgAAAAAAAAD6NgAAlwAAAAAAAADYDAAAmAAAAAAAAADCDAAAmQAAAAAAAAC3MAAAmgAAAAAAAADSKgAAmwAAAAAAAABVPQAA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"); -// src/components/Blink/BlinkComponent.tsx -var BlinkComponent = bn.forwardRef((props2, ref) => { - const [previewPath, setPreviewPath] = p2(null); - const [allItems, setAllItems] = p2([]); - const defaultOptions3 = F(() => app.workspace.getLastOpenFiles().filter((f4) => getAbstractFileAtPath(app, f4)).map((f4) => ({ description: f4, value: f4, name: filePathToString(f4) })), []); - h2(() => { - const allTags = loadTags(props2.plugin).map((f4) => ({ - value: f4, - name: f4 - })); - const allNotes = getAllAbstractFilesInVault(props2.plugin, app).map((f4) => ({ - name: fileNameToString(f4.name), - description: f4.path, - value: f4.path - })); - setAllItems([...allNotes, ...allTags]); - }, []); - const loadPreview = (path) => { - if (previewPath != path && getAbstractFileAtPath(app, path)) { - setPreviewPath(path); - } - }; - const hoverItem = (item) => { - loadPreview(item); +// src/utils/db/sqljs.js +var import_sql = __toESM(require_sql_wasm()); +var loadSQL = async () => { + const sql = await (0, import_sql.default)({ + wasmBinary: sql_wasm_default + }); + return sql; +}; + +// node_modules/monkey-around/mjs/index.js +function around(obj, factories) { + const removers = Object.keys(factories).map((key2) => around1(obj, key2, factories[key2])); + return removers.length === 1 ? removers[0] : function() { + removers.forEach((r3) => r3()); }; - const selectItem = (item) => { - if (!item) +} +function around1(obj, method, createWrapper) { + const original = obj[method], hadOwn = obj.hasOwnProperty(method); + let current = createWrapper(original); + if (original) + Object.setPrototypeOf(current, original); + Object.setPrototypeOf(wrapper, current); + obj[method] = wrapper; + return remove; + function wrapper(...args) { + if (current === original && obj[method] === wrapper) + remove(); + return current.apply(this, args); + } + function remove() { + if (obj[method] === wrapper) { + if (hadOwn) + obj[method] = original; + else + delete obj[method]; + } + if (current === original) return; - const type = viewTypeByString(item); - if (type == "file" || type == "folder") { - openAFile(getAbstractFileAtPath(app, item), app, false); - } - if (type == "tag") { - openTag(item, app, false); - } - }; - const optionProps = { - multi: false, - editable: false, - onHover: hoverItem, - value: [], - options: allItems, - defaultOptions: defaultOptions3, - saveOptions: (_5, items) => selectItem(items[0]), - placeholder: "Quickly Search a File, Folder, Tag... Press Tab to Edit", - searchable: true, - showAll: true - }; - return /* @__PURE__ */ bn.createElement(bn.Fragment, null, /* @__PURE__ */ bn.createElement(OptionMenu, { - ref, - ...optionProps, - hide: props2.hide, - previewComponent: previewPath && /* @__PURE__ */ bn.createElement("div", { - className: "mk-blink-preview" - }, /* @__PURE__ */ bn.createElement(FlowView, { - plugin: props2.plugin, - path: previewPath, - load: true - })) - })); -}); + current = original; + Object.setPrototypeOf(wrapper, original || Function); + } +} -// src/components/Blink/Blink.tsx -var Blink = class extends import_obsidian37.Modal { - constructor(app2, plugin) { - super(app2); - this.ref = bn.createRef(); - this.plugin = plugin; - this.modalEl.toggleClass("mk-blink-modal", true); - this.modalEl.toggleClass("modal", false); - this.modalEl.toggleClass("prompt", true); - const keys = [...this.scope.keys]; - for (let i4 = 0; i4 < keys.length; i4++) { - if (keys[i4].key == "Escape") { - this.scope.unregister(keys[i4]); - this.scope.register([], "Escape", () => { - var _a2; - const blurred = (_a2 = this.ref) == null ? void 0 : _a2.current(); - if (blurred) { - this.close(); +// src/utils/spaces/patches.ts +var import_obsidian38 = require("obsidian"); +var patchFileExplorer = (plugin) => { + plugin.register( + around(import_obsidian38.Workspace.prototype, { + getLeavesOfType(old) { + return function(type) { + if (type == "file-explorer") { + return old.call(this, FILE_TREE_VIEW_TYPE); } - }); + return old.call(this, type); + }; } - } - this.root = createRoot(this.modalEl); - this.root.render(/* @__PURE__ */ bn.createElement(BlinkComponent, { - ref: this.ref, - plugin, - hide: () => this.close() - })); - } + }) + ); }; - -// src/components/ContextView/MDBFileViewer.tsx -var import_obsidian38 = require("obsidian"); -var MDB_FILE_VIEWER_TYPE = "make-mdb-viewer"; -var MDBFileViewer = class extends import_obsidian38.FileView { - constructor(leaf, plugin) { - super(leaf); - this.navigation = true; - this.plugin = plugin; - } - getViewType() { - return MDB_FILE_VIEWER_TYPE; - } - getDisplayText() { - var _a2; - return (_a2 = this.file) == null ? void 0 : _a2.name; - } - async onClose() { - this.destroy(); - } - destroy() { - if (this.root) - this.root.unmount(); - } - async onOpen() { - this.destroy(); - } - async setState(state, result) { - this.file = getAbstractFileAtPath(app, state.file); - this.constructInlineContext(); - await super.setState(state, result); - this.leaf.tabHeaderInnerTitleEl.innerText = this.file.name; - this.leaf.view.titleEl = this.file.name; - const headerEl = this.leaf.view.headerEl; - if (headerEl) { - headerEl.querySelector(".view-header-title").innerText = this.file.name; +var patchWorkspace = (plugin) => { + let layoutChanging = false; + const uninstaller = around(import_obsidian38.Workspace.prototype, { + changeLayout(old) { + return async function(workspace) { + layoutChanging = true; + try { + await old.call(this, workspace); + } finally { + layoutChanging = false; + } + }; + }, + iterateLeaves(old) { + return function(arg1, arg2) { + if (old.call(this, arg1, arg2)) + return true; + let cb = typeof arg1 === "function" ? arg1 : arg2; + let parent = typeof arg1 === "function" ? arg2 : arg1; + if (!parent) + return false; + if (layoutChanging) + return false; + if (parent === app.workspace.rootSplit || import_obsidian38.WorkspaceContainer && parent instanceof import_obsidian38.WorkspaceContainer) { + for (const popover of FlowEditor.popoversForWindow( + parent.win + )) { + if (old.call(this, cb, popover.rootSplit)) + return true; + } + } + return false; + }; + }, + getDropLocation(old) { + return function getDropLocation(event) { + for (const popover of FlowEditor.activePopovers()) { + const dropLoc = this.recursiveGetTarget(event, popover.rootSplit); + if (dropLoc) { + return dropLoc; + } + } + return old.call(this, event); + }; + }, + onDragLeaf(old) { + return function(event, leaf) { + const hoverPopover = FlowEditor.forLeaf(leaf); + return old.call(this, event, leaf); + }; } - return; - } - getState() { - let state = super.getState(); - state.file = this.file.path; - return state; - } - constructInlineContext() { - const mdbTypeByDBPath = (dbpath) => { - var _a2; - return dbpath.endsWith(((_a2 = this.plugin) == null ? void 0 : _a2.settings.folderContextFile) + ".mdb") ? "folder" : "tag"; - }; - const type = mdbTypeByDBPath(this.file.path); - const folder = type == "tag" ? null : getFolderFromPath(app, this.file.path); - const tag = type == "tag" ? filePathToString(this.file.path).replace(".mdb", "") : null; - this.destroy(); - this.root = createRoot(this.contentEl); - this.root.render( - /* @__PURE__ */ bn.createElement("div", { - className: "mk-folder-view" - }, tag ? /* @__PURE__ */ bn.createElement(TagContextViewComponent, { - type: "tag", - tag, - plugin: this.plugin - }) : /* @__PURE__ */ bn.createElement(FolderContextViewComponent, { - type: "folder", - folder, - plugin: this.plugin - })) - ); - } + }); + plugin.register(uninstaller); }; // src/main.ts var MakeMDPlugin = class extends import_obsidian39.Plugin { constructor() { super(...arguments); - this.saveSpacesDB = (0, import_obsidian39.debounce)(() => saveDBAndKeepAlive(this.spaceDBInstance(), this.spacesDBPath), 1e3, true); + this.saveSpacesDB = (0, import_obsidian39.debounce)( + () => saveDBAndKeepAlive(this.spaceDBInstance(), this.spacesDBPath), + 1e3, + true + ); this.createTable = async (path) => { const dbPath = folderContextFromFolder(this, path); const schemas = await getMDBTableSchemas(this, dbPath, false); if (schemas) - return uniqueNameFromString("Table", schemas.map((f4) => f4.id)); + return uniqueNameFromString( + "Table", + schemas.map((f4) => f4.id) + ); return "Table"; }; this.triggerVaultChangeEvent = (file, changeType, oldPath) => { @@ -44341,7 +46070,9 @@ var MakeMDPlugin = class extends import_obsidian39.Plugin { }; this.metadataChange = (file, data, cache) => { var _a2, _b2; - let event = new CustomEvent(eventTypes.tagsChange, { detail: { tags: (_b2 = (_a2 = cache.tags) == null ? void 0 : _a2.map((f4) => f4.tag)) != null ? _b2 : [] } }); + let event = new CustomEvent(eventTypes.tagsChange, { + detail: { tags: (_b2 = (_a2 = cache.tags) == null ? void 0 : _a2.map((f4) => f4.tag)) != null ? _b2 : [] } + }); window.dispatchEvent(event); this.addToQueue(() => onMetadataChange(this, file)); }; @@ -44480,7 +46211,9 @@ var MakeMDPlugin = class extends import_obsidian39.Plugin { } } async loadSpaces() { - this.spacesDBPath = (0, import_obsidian39.normalizePath)(app.vault.configDir + "/plugins/make-md/Spaces.mdb"); + this.spacesDBPath = (0, import_obsidian39.normalizePath)( + app.vault.configDir + "/plugins/make-md/Spaces.mdb" + ); this.spaceDB = await getDB(await loadSQL(), this.spacesDBPath); patchWorkspace(this); document.body.classList.toggle("mk-hide-tabs", !this.settings.sidebarTabs); @@ -44500,7 +46233,11 @@ var MakeMDPlugin = class extends import_obsidian39.Plugin { return new FileTreeView(leaf, this); }); this.app.workspace.onLayoutReady(async () => { - const tables = dbResultsToDBTables(this.spaceDBInstance().exec("SELECT name FROM sqlite_schema WHERE type ='table' AND name NOT LIKE 'sqlite_%';")); + const tables = dbResultsToDBTables( + this.spaceDBInstance().exec( + "SELECT name FROM sqlite_schema WHERE type ='table' AND name NOT LIKE 'sqlite_%';" + ) + ); if (tables.length == 0) { initiateDB(this.spaceDBInstance()); } @@ -44514,10 +46251,11 @@ var MakeMDPlugin = class extends import_obsidian39.Plugin { this.registerEvent(this.app.vault.on("rename", this.onRename)); this.app.metadataCache.on("changed", this.metadataChange); await this.openFileTreeLeaf(true); - ; }); } - this.registerEvent(app.workspace.on("active-leaf-change", () => this.activeFileChange())); + this.registerEvent( + app.workspace.on("active-leaf-change", () => this.activeFileChange()) + ); } activeFileChange() { let filePath = null; @@ -44533,7 +46271,9 @@ var MakeMDPlugin = class extends import_obsidian39.Plugin { } } if (filePath) { - let evt = new CustomEvent(eventTypes.activeFileChange, { detail: { filePath } }); + let evt = new CustomEvent(eventTypes.activeFileChange, { + detail: { filePath } + }); window.dispatchEvent(evt); } } @@ -44600,9 +46340,18 @@ var MakeMDPlugin = class extends import_obsidian39.Plugin { removeAllFlowMarks(element); replaceAllEmbed(element, context); }); - window.addEventListener(eventTypes.spawnPortal, this.spawnPortal.bind(this)); - window.addEventListener(eventTypes.loadPortal, this.loadPortal.bind(this)); - window.addEventListener(eventTypes.focusPortal, this.focusPortal.bind(this)); + window.addEventListener( + eventTypes.spawnPortal, + this.spawnPortal.bind(this) + ); + window.addEventListener( + eventTypes.loadPortal, + this.loadPortal.bind(this) + ); + window.addEventListener( + eventTypes.focusPortal, + this.focusPortal.bind(this) + ); window.addEventListener( eventTypes.openFilePortal, this.openFileFromPortal.bind(this) @@ -44651,7 +46400,10 @@ var MakeMDPlugin = class extends import_obsidian39.Plugin { this.addSettingTab(new MakeMDPluginSettingsTab(this.app, this)); console.timeEnd("Loading Settings"); this.app.workspace.onLayoutReady(async () => { - if (!getAbstractFileAtPath(this.app, getFolderPathFromString2(this.settings.tagContextFolder))) { + if (!getAbstractFileAtPath( + this.app, + getFolderPathFromString(this.settings.tagContextFolder) + )) { this.app.vault.createFolder(this.settings.tagContextFolder); } }); diff --git a/manifest.json b/manifest.json index f6158d9..c9a792b 100755 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "make-md", "name": "MAKE.md", - "version": "0.6.8", + "version": "0.6.9", "minAppVersion": "0.16.0", "description": "Make.md brings you features that supercharges Obsidian. Sort your files in custom order and add file icons using Spaces. Edit inline embeds with Flow Editor. And style your text and add new markdown blocks without writing markdown using Maker Mode.", "author": "MAKE.md", diff --git a/styles.css b/styles.css index 6068987..f28201f 100644 --- a/styles.css +++ b/styles.css @@ -1,146 +1,3 @@ -/* src/css/FileTree.css */ -.mk-hide-tabs .mod-left-split .mod-top-left-space .workspace-tab-header-container-inner { - visibility: hidden; -} -.is-mobile.mk-hide-ribbon .workspace-drawer.mod-left .workspace-drawer-inner { - padding-left: 0 !important; -} -.mk-hide-ribbon .workspace-ribbon { - display: none; -} -.mk-hide-ribbon.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container:before { - width: calc(var(--frame-left-space) + var(--ribbon-width)); -} -.mk-hide-ribbon.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container { - padding-left: calc(var(--frame-left-space) + var(--ribbon-width)); -} -.is-mobile.mk-hide-ribbon .workspace-drawer-ribbon { - display: none; -} -.is-mobile .workspace-drawer.mod-left .workspace-drawer-inner .workspace-drawer-header { - padding-left: 0 !important; -} -.is-mobile .workspace-drawer.mod-left .workspace-drawer-active-tab-header { - display: none; -} -.is-mobile .workspace-drawer.mod-left .workspace-drawer-inner .mod-settings { - display: none; -} -.is-mobile .workspace-drawer.mod-left .workspace-drawer-header-left { -} -.is-mobile .mk-sidebar button:not(.clickable-icon) { - padding: unset; -} -.is-mobile .mk-sidebar .mk-file-icon button { - font-size: 16px; - margin: 0; - height: 24px; - width: 24px; -} -body.is-mobile .sidebar-toggle-button { - display: flex !important; -} -.is-mobile .workspace-drawer.mod-left .workspace-drawer-header-icon { - position: absolute; - right: 20px; - top: 12px; - z-index: 100; -} -.is-phone .workspace-drawer.mod-left .workspace-drawer-header-icon { - top: 20px; -} -.is-mobile .workspace-drawer.mod-left { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.mk-sidebar { - display: flex; - flex-direction: column; - height: 100%; -} -.is-mobile .mk-sidebar { -} -.mk-file-tree { - flex: 1; - overflow: hidden; -} - -/* src/css/MainMenu.css */ -.mk-main-menu-container { - display: flex; - padding: 12px 8px 0px 8px; -} -.mk-main-menu-button { - text-align: left; - padding: 8px 8px; - border-radius: 4px; - align-items: center; - display: flex; - width: calc(100% - 50px); -} -.mk-main-menu-icon { - background: var(--nav-item-background-hover); - padding: 2px; - border-radius: 2px; - text-transform: uppercase; - width: 20px; - height: 20px; - font-size: 12px; - justify-content: center; - margin-right: 4px; -} -.mk-flow-bar-compact .mk-main-menu-container { - flex-grow: 1; - padding: 0; -} -.mk-flow-bar-compact .mk-main-menu-button { - width: 100%; - padding: 4px; - gap: 4px; -} -.is-mobile .mk-main-menu-button { - font-size: var(--font-ui-medium); - font-weight: var(--font-medium); - gap: 4px; -} -.mk-main-menu-button > div { - display: flex; -} -.mk-main-menu-button svg { - height: 16px; - width: 16px; -} -body:not(.is-mobile) .mk-main-menu-button:hover { - background: var(--nav-item-background-hover); -} -.mk-main-menu { - position: absolute; - left: 8px; - z-index: var(--layer-menu); - margin-top: 2.25rem; - margin-left: 2px; - background-color: var(--background-secondary); - transform-origin: top left; - border-radius: var(--radius-m); - border: 1px solid var(--background-modifier-border-hover); - box-shadow: var(--shadow-s); -} -.mk-menu-button { - display: flex; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 0.5rem; - padding-right: 0.5rem; - font-size: 0.75rem; - line-height: 1.25rem; - align-items: center; - width: 100%; - border-radius: 0.375rem; -} -.mk-menu-button:hover { - background: var(--nav-item-background-hover); -} - /* src/css/FlowComponent.css */ .mk-folder-scroller { display: flex !important; @@ -293,84 +150,567 @@ body:not(.is-mobile) .mk-main-menu-button:hover { .mk-folder-scroller .cm-sizer { } -/* src/css/Menu.css */ -.mk-suggestion { - display: flex; - flex-direction: column; -} -.mk-menu { - padding: 0; -} -.mk-menu .menu-item { - padding: 0; - background-color: unset !important; - gap: 0; +/* src/css/CardsView.css */ +.mk-cards-container { + width: 100%; + height: 100%; + overflow-x: auto; + padding-bottom: 60px; } -.menu-item-title { - display: flex; - justify-content: space-between; - align-items: center; +.mk-cards-container .mk-list-content > .mk-flowspace-editor { + padding-left: 12px !important; + padding-right: 12px !important; } -.mk-menu-input.selected { - background-color: unset !important; +.mk-cards-container .mk-list-view { + display: inline-grid; + grid-auto-flow: column; + padding: 20px; + gap: 20px; } -.mk-menu-input input { - padding: 4px; - border: 0; - outline: 0; +.mk-cards-container .mk-list-item { border-radius: 4px; + list-style: none; + background: var(--background-secondary); + overflow: hidden; + font-size: var(--font-ui-small); + color: var(--text-muted); + box-shadow: + 0px 1px 2px rgba(0, 0, 0, 0.06), + 0px 3.4px 6.7px rgba(0, 0, 0, 0.06), + 0px 15px 30px rgba(0, 0, 0, 0.15); } -.is-phone .mk-options-container { - width: 100%; +.mk-cards-container .mk-list-group { + width: 200px; } -.is-phone .mk-options-menu { - width: 100%; +.mk-cards-grid .mk-list-item { + width: 250px; } -.menu-item-title input { - flex: 1; +.mk-cards-container .mk-file-icon svg { + display: none; } -.mk-options-menu { - position: relative; - width: 180px; - font-size: 1em; - line-height: 1.2; - display: flex; +.mk-cards-grid .mk-list-group { + width: 100% !important; +} +.mk-cards-grid .mk-list-group ul { + flex-direction: row !important; flex-wrap: wrap; - cursor: text; } -.mk-options-menu__selected-tag { - display: inline-block; - box-sizing: border-box; - margin: 0 6px 6px 0; - padding: 6px 8px; - border-radius: 2px; - box-shadow: unset !important; - font-size: inherit; - line-height: inherit; +.mk-cards-container .mk-list-group ul { + list-style: none; + padding-inline-start: 0px; + display: flex; + flex-direction: column; + gap: 10px; } -.mk-options-menu__selected-tag:after { - content: "\2715"; - color: #aaa; - margin-left: 8px; +.mk-list-container .mk-list-group-header { + display: flex; + padding: 12px 24px 4px 24px; + background-color: var(--titlebar-background); } -.mk-options-menu__selected-tag:hover, -.mk-options-menu__selected-tag:focus { - border-color: #b1b1b1; +.mk-list-container .mk-list-group-header > div { + background: none !important; } -.mk-options-menu__selected { +.mk-list-container { width: 100%; - display: inline-block; - white-space: normal; - padding: 0px 10px; - margin-top: 4px; - border-bottom: thin solid var(--divider-color); + height: 100%; + overflow-y: auto; + padding-bottom: 100px; } -.mk-options-menu__search { - display: inline-block; - padding: 7px 2px; - max-width: 100%; +.mk-list-container .mk-list-view { + display: flex; + flex-direction: column; } -@media screen and (min-width: 30em) { +.mk-cards-container .mk-list-item.mk-is-active, +.mk-list-container .mk-list-item.mk-is-active { + background: var(--background-modifier-active-hover); +} +.mk-list-container .mk-list-item { + display: flex; + padding: 8px var(--context-padding) 0 var(--context-padding); + list-style: none; + font-size: var(--font-ui-small); + color: var(--text-muted); + align-items: flex-start; +} +.mk-list-container .mk-list-content { + flex-grow: 1; + display: flex; + flex-direction: column; + border-bottom: thin solid var(--divider-color); + min-height: 69px; +} +.mk-list-container .mk-list-fields { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 9px; + padding-bottom: 8px; +} +.mk-list-container .mk-list-fields > div:not(.mk-cell-file) { + width: unset !important; +} +.mk-list-container .mk-list-group { + width: 100%; +} +.mk-cards-container .mk-cell-file-title, +.mk-list-container .mk-cell-file-title { + padding: 4px; + color: var(--text-normal); + margin-bottom: 0; +} +.mk-list-container .mk-list-fields .mk-cell-file { + width: 100%; + font-weight: var(--bold-weight); + margin-bottom: -12px; +} +.mk-cards-container .mk-list-fields { + padding: 12px; + align-items: flex-start; + display: flex; + flex-direction: column; +} +.mk-list-fields .mk-cell-file-preview { + width: 100%; + color: var(--text-normal); + margin-bottom: -8px; + color: var(--text-faint); + text-overflow: ellipsis; + overflow: hidden; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + display: -webkit-box; +} +.mk-list-container .mk-list-group ul { + list-style: none; + padding-inline-start: 0px; + display: flex; + flex-direction: column; + margin-top: 0; + margin-bottom: 0; +} +.mk-file-preview { + background: var(--label-color); +} +.mk-list-container .mk-file-preview { + min-width: 48px; + height: 48px; + border-radius: 8px; + margin-right: 8px; + margin-top: 8px; + display: flex; + align-items: center; + justify-content: center; +} +.mk-list-group-header .mk-cell-option-item { + background: none !important; +} +.mk-cards-container .mk-file-preview { + position: relative; + margin-bottom: 4px; + height: 40px; +} +.mk-cards-container .mk-file-icon { + position: absolute; + bottom: -6px; + font-size: 24px; + left: 14px; +} +.mk-list-container .mk-file-icon { + font-size: 20px; + display: flex; + align-items: center; + justify-content: center; +} + +/* src/css/Table.css */ +.mk-folder-view { + height: 100%; +} +body { + --context-padding: var(--size-4-6); +} +.mk-th { + position: relative; +} +.is-mobile .mk-resizer { + width: 8px; + opacity: 0.05; +} +.mk-resizer { + position: absolute; + right: 0; + top: 0; + height: 100%; + width: 2px; + background: var(--divider-color); + cursor: col-resize; + user-select: none; + touch-action: none; + opacity: 0; +} +.mk-resizer.mk-resizer-active { + opacity: 1; +} +.mk-resizer.isResizing { + background: var(--interactive-hover); + opacity: 1; +} +.mk-resizer:hover { + opacity: 1; +} +.mk-col-header { + overflow-x: hidden; + text-overflow: ellipsis; + padding: 0.5rem 0.75rem; + display: flex; + align-items: center; + font-size: var(--font-smaller); + font-weight: var(--font-normal); + color: var(--text-muted); +} +.mk-col-header-context { + margin-left: 4px; + color: var(--text-faint); +} +.mk-td { + padding: 0.5rem; + vertical-align: top; +} +.mk-td > div { + min-height: 28px; +} +.mk-td-group { + background-color: var(--background-primary); + padding: 0.5rem; + border-top: 0.5px solid var(--divider-color); + font-size: var(--font-ui-small); + font-weight: var(--bold-weight); +} +.mk-td-group .mk-cell-option { + width: unset; +} +.mk-td-group .mk-cell-option-item { + background: none; +} +.mk-td-group .mk-cell-option-item div:hover { + background: none; +} +.mk-td-empty { + padding: 0 !important; +} +.mk-td input[type=text], +.mk-td input[type=number] { + display: table-cell; + width: 100%; + border: 0; + outline: 0; +} +.mk-table { + width: 100%; + overflow-x: scroll; + padding-bottom: 60px; +} +.mk-table table { + border-spacing: 0; + border-bottom: 0.5px solid var(--divider-color); +} +.mk-table table th:last-child { + width: 100%; +} +.mk-table th:hover { + background: var(--interactive-hover); +} +.mk-table tr th:first-child .mk-col-header, +.mk-table tr td:first-child { + padding-left: calc(var(--context-padding) - 0.75rem); +} +.mk-cell-empty { + color: var(--text-faint); +} +.mk-td img { + max-height: 45px; +} +.mk-table tr td:first-child.mk-td-empty { + padding-left: calc(var(--context-padding) - 0.75rem) !important; +} +.mk-table td { + border-top: 0.5px solid var(--background-modifier-border); + font-size: var(--font-ui-small); +} +.mk-table .mk-td:not(:last-child) { + border-right: 0.5px solid var(--background-modifier-border); +} +.mk-cell-text { + padding: 4px; +} +.mk-cell-number { + padding: 4px; + text-align: right; +} +.mk-cell-text:not(:focus) { + background: unset !important; +} +.mk-cell-date { + width: 100%; + min-height: 30px; + display: flex; + align-items: center; +} +.mk-cell-date-value { + border-radius: 4px; + padding: 2px 4px; +} +.mk-cell-date-value:hover { + background: var(--interactive-hover); +} +.mk-cell-option { + width: 100%; + min-height: 30px; + padding: 4px 0px; + gap: 4px; + display: flex; + flex-wrap: wrap; +} +.mk-cell-option-item { + background: rgba(var(--mono-rgb-100), 0.025); + border-radius: 4px; + overflow: hidden; + display: flex; + align-items: center; + gap: 2px; +} +.mk-cell-option-item input { + margin: 0; +} +.mk-cell-option-item div { + padding: 2px 4px; + height: 100%; + display: -webkit-box; + -webkit-line-clamp: 1; + line-clamp: 1; + -webkit-box-orient: vertical; +} +.mk-cell-option-item div:hover { + background: var(--interactive-hover); +} +.mk-cell-fileprop { + padding: 4px; + color: var(--text-muted); +} +.mk-cell-file { + display: flex; + align-items: center; +} +.mk-cell-file-title { + font-size: var(--font-ui-medium); + margin-bottom: 8px; +} +.mk-cell-file-new { + display: flex; + align-items: center; +} +.mk-cell-file-new .mk-file-icon svg { + color: var(--text-faint); +} +.mk-table:focus .mk-is-active { + background: var(--background-modifier-active-hover) !important; +} +.mk-floweditor .mk-table:not(:focus) .mk-is-active { + background: none !important; +} +.mk-table:focus .mk-is-active .mk-selected-cell { + outline: solid 2px var(--interactive-accent); +} +.mk-cell-file-new .mk-file-icon:hover { + background: var(--interactive-hover); +} +.mk-cell-file-item { + display: flex; + align-items: center; +} +.mk-cell-file-item .mk-file-icon:hover { + background: var(--interactive-hover); +} +.mk-cell-file-item .mk-cell-file-name { + padding: 2px 4px; + border-radius: 4px; +} +.mk-cell-file-item .mk-cell-file-name:hover { + background: var(--interactive-hover); +} +.mk-cell-file .mk-file-icon { + margin-right: 4px; + align-items: center; + display: flex; + width: 24px; + border-radius: 4px; +} +.mk-cell-file-new .mk-cell-file-name { + padding: 4px !important; + background: none !important; +} +.is-phone .mk-cell-file-flow { + display: none; +} +.mk-list-item .mk-cell-file-flow { + visibility: hidden; + margin-left: 4px; + padding: 2px 4px; +} +.mk-list-item:hover .mk-cell-file-flow { + visibility: visible; +} +.is-phone .mk-list-item .mk-cell-file-flow { + width: unset; + visibility: unset; +} +.mk-list-item .mk-cell-file-flow:hover { + border-radius: 4px; + background: var(--interactive-hover); +} +.mk-row-new { + text-align: left; + border-top: 0.5px solid var(--divider-color); + padding: 8px var(--context-padding); + font-weight: normal; + color: var(--text-faint); + font-size: var(--font-ui-small); +} +.mk-row-new:hover { + background: var(--background-modifier-hover); +} +.mk-icon-small svg { + width: 16px; + height: 16px; + color: var(--text-muted); +} +.mk-icon-small, +.mk-icon-xsmall { + display: flex; + align-items: center; +} +.mk-icon-xxsmall svg { + width: 10px; + height: 10px; + color: var(--text-muted); +} +.mk-icon-xsmall svg { + width: 12px; + height: 12px; + color: var(--text-muted); +} +.mk-icon-rotated svg { + transform: rotate(90deg); +} +.mk-cell-link-item { + color: var(--link-color); +} +.mk-cell-option span { + flex-grow: 1; +} +.mk-cell-option-select { + display: flex; + align-items: center; +} +.mk-cell-option-new { + visibility: hidden; + background: rgba(var(--mono-rgb-100), 0.025); + padding: 2px; + display: flex; + border-radius: 4px; +} +.mk-cell-option:hover .mk-cell-option-new { + visibility: visible; +} +.mk-cell-link-unresolved { + color: var(--link-unresolved-color); + opacity: var(--link-unresolved-opacity); + filter: var(--link-unresolved-filter); +} +.mk-cell-link-unresolved:hover { + color: var(--link-unresolved-color); + opacity: var(--link-unresolved-opacity); + filter: var(--link-unresolved-filter); +} + +/* src/css/Menu.css */ +.mk-suggestion { + display: flex; + flex-direction: column; +} +.mk-menu { + padding: 0; +} +.mk-menu .menu-item { + padding: 0; + background-color: unset !important; + gap: 0; +} +.menu-item-title { + display: flex; + justify-content: space-between; + align-items: center; +} +.mk-menu-input.selected { + background-color: unset !important; +} +.mk-menu-input input { + padding: 4px; + border: 0; + outline: 0; + border-radius: 4px; +} +.is-phone .mk-options-container { + width: 100%; +} +.is-phone .mk-options-menu { + width: 100%; +} +.menu-item-title input { + flex: 1; +} +.mk-options-menu { + position: relative; + width: 180px; + font-size: 1em; + line-height: 1.2; + display: flex; + flex-wrap: wrap; + cursor: text; +} +.mk-options-menu__selected-tag { + display: inline-block; + box-sizing: border-box; + margin: 0 6px 6px 0; + padding: 6px 8px; + border-radius: 2px; + box-shadow: unset !important; + font-size: inherit; + line-height: inherit; +} +.mk-options-menu__selected-tag:after { + content: "\2715"; + color: #aaa; + margin-left: 8px; +} +.mk-options-menu__selected-tag:hover, +.mk-options-menu__selected-tag:focus { + border-color: #b1b1b1; +} +.mk-options-menu__selected { + width: 100%; + display: inline-block; + white-space: normal; + padding: 0px 10px; + margin-top: 4px; + border-bottom: thin solid var(--divider-color); +} +.mk-options-menu__search { + display: inline-block; + padding: 7px 2px; + max-width: 100%; +} +@media screen and (min-width: 30em) { .mk-options-menu__search { position: relative; } @@ -582,332 +922,127 @@ body:not(.is-mobile) .mk-main-menu-button:hover { border-radius: 100%; } .rdp-dropdown_year, -.rdp-dropdown_month { - position: relative; - display: inline-flex; - align-items: center; -} -.rdp-dropdown { - appearance: none; - position: absolute; - z-index: 2; - top: 0; - bottom: 0; - left: 0; - width: 100%; - margin: 0; - padding: 0; - cursor: inherit; - opacity: 0; - border: none; - background-color: transparent; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -.rdp-dropdown[disabled] { - opacity: unset; - color: unset; -} -.rdp-dropdown:focus-visible:not([disabled]) + .rdp-caption_label { - background-color: var(--rdp-background-color); - border: var(--rdp-outline); - border-radius: 6px; -} -.rdp-dropdown_icon { - margin: 0 0 0 5px; -} -.rdp-head { - border: 0; -} -.rdp-head_row, -.rdp-row { - height: 100%; -} -.rdp-head_cell { - vertical-align: middle; - text-transform: uppercase; - font-size: 0.75em; - font-weight: 700; - text-align: center; - height: 100%; - height: var(--rdp-cell-size); - padding: 0; -} -.rdp-tbody { - border: 0; -} -.rdp-tfoot { - margin: 0.5em; -} -.rdp-cell { - width: var(--rdp-cell-size); - height: 100%; - height: var(--rdp-cell-size); - padding: 0; - text-align: center; -} -.rdp-weeknumber { - font-size: 0.75em; -} -.rdp-weeknumber, -.rdp-day { - display: flex; - overflow: hidden; - align-items: center; - justify-content: center; - box-sizing: border-box; - width: var(--rdp-cell-size); - max-width: var(--rdp-cell-size); - height: var(--rdp-cell-size); - margin: 0; - border: 2px solid transparent; - border-radius: 100%; -} -.rdp-day_today:not(.rdp-day_outside) { - font-weight: bold; -} -.rdp-day_selected, -.rdp-day_selected:focus-visible, -.rdp-day_selected:hover { - color: white; - opacity: 1; - background-color: var(--rdp-accent-color); -} -.rdp-day_outside { - opacity: 0.5; -} -.rdp-day_selected:focus-visible { - outline: var(--rdp-outline); - outline-offset: 2px; - z-index: 1; -} -.rdp:not([dir="rtl"]) .rdp-day_range_start:not(.rdp-day_range_end) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.rdp:not([dir="rtl"]) .rdp-day_range_end:not(.rdp-day_range_start) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.rdp[dir=rtl] .rdp-day_range_start:not(.rdp-day_range_end) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.rdp[dir=rtl] .rdp-day_range_end:not(.rdp-day_range_start) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.rdp-day_range_end.rdp-day_range_start { - border-radius: 100%; -} -.rdp-day_range_middle { - border-radius: 0; -} - -/* src/css/FilterBar.css */ -.mk-table-selector { - margin-right: 0; - display: flex; - align-items: center; - padding-left: var(--context-padding); - gap: 16px; - min-height: 48px; - max-width: 100%; - overflow-x: auto; -} -.mk-table-selector::-webkit-scrollbar { - display: none; -} -.mk-table-selector > div > .mk-collapse { - padding-right: 8px; - padding-left: 0px; -} -.mk-table-selector .mk-collapse.mk-icon-xsmall svg { - color: unset; -} -.mk-table-selector > div > button:not(:last-child) { - padding-right: 0px; -} -.mk-table-selector > div, -.mk-table-selector > button { - border-radius: 0; - margin: 4px -8px; - display: flex; - align-items: center; - border-bottom: thin solid transparent; - height: 100%; -} -.mk-table-selector .mk-is-active button { - color: var(--text-normal); -} -.mk-table-selector .mk-is-active { - border-bottom: thin solid var(--text-normal); - color: var(--text-normal); - background: none !important; -} -.mk-view-selector button { - background: none; - border: none; - box-shadow: none; - color: var(--text-faint); -} -.mk-view-selector button:hover { - color: var(--text-normal); -} -.mk-view-selector { - width: 100%; - display: flex; - color: var(--text-faint); - align-items: stretch; - border-bottom: 1px solid var(--divider-color); - flex-wrap: wrap; -} -.mk-view-selector input { - background: none; - border: none; - flex-grow: 1; -} -.is-phone .mk-view-selector { - flex-wrap: wrap; -} -.is-phone .mk-view-selector button { - width: unset; -} -.mk-view-search { - background: var(--background-modifier-form-field); - border: var(--input-border-width) solid var(--background-modifier-border); - display: flex; - border-radius: 8px; - align-items: center; - flex-grow: 1; -} -.mk-view-search button:hover { - background: unset !important; -} -.mk-view-search button { - margin: 0 !important; - padding: var(--size-4-1) var(--size-4-2) !important; -} -.is-phone .mk-view-options { - margin-top: 8px; - margin-bottom: 8px; -} -.mk-view-options { - display: flex; +.rdp-dropdown_month { + position: relative; + display: inline-flex; align-items: center; - color: var(--text-normal) !important; - min-height: 48px; - padding-left: var(--context-padding); - flex-grow: 1; } -.mk-view-selector span { - flex-grow: 10; +.rdp-dropdown { + appearance: none; + position: absolute; + z-index: 2; + top: 0; + bottom: 0; + left: 0; + width: 100%; + margin: 0; + padding: 0; + cursor: inherit; + opacity: 0; + border: none; + background-color: transparent; + font-family: inherit; + font-size: inherit; + line-height: inherit; } -.mk-view-selector svg { - width: 14px; - height: 14px; +.rdp-dropdown[disabled] { + opacity: unset; + color: unset; } -.mk-filter-bar { - display: flex; - padding: 8px var(--context-padding); - gap: 8px; - width: 100%; - border-bottom: 1px solid var(--divider-color); +.rdp-dropdown:focus-visible:not([disabled]) + .rdp-caption_label { + background-color: var(--rdp-background-color); + border: var(--rdp-outline); + border-radius: 6px; } -.mk-filter-bar span { - flex-grow: 1; +.rdp-dropdown_icon { + margin: 0 0 0 5px; } -.mk-table-selector .mk-is-active { - color: var(--text-normal) !important; +.rdp-head { + border: 0; } -.mk-filter { - display: flex; - font-size: var(--font-ui-small); - color: var(--text-muted); - padding: 0px; +.rdp-head_row, +.rdp-row { + height: 100%; } -.mk-filter > span, -.mk-filter > div { - background: var(--interactive-normal); +.rdp-head_cell { + vertical-align: middle; + text-transform: uppercase; + font-size: 0.75em; + font-weight: 700; + text-align: center; + height: 100%; + height: var(--rdp-cell-size); + padding: 0; } -.mk-filter > span:hover, -.mk-filter > div:hover { - background: var(--interactive-hover); +.rdp-tbody { + border: 0; } -.mk-filter > *:first-child { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; - padding-left: 10px; +.rdp-tfoot { + margin: 0.5em; } -.mk-filter > *:last-child { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - padding-right: 6px; +.rdp-cell { + width: var(--rdp-cell-size); + height: 100%; + height: var(--rdp-cell-size); + padding: 0; + text-align: center; } -.mk-filter span { - border-right: thin solid var(--background-primary); - padding: 4px 8px; - display: flex; - align-items: center; +.rdp-weeknumber { + font-size: 0.75em; } -.mk-filter div { +.rdp-weeknumber, +.rdp-day { display: flex; + overflow: hidden; align-items: center; - padding-left: 4px; + justify-content: center; + box-sizing: border-box; + width: var(--rdp-cell-size); + max-width: var(--rdp-cell-size); + height: var(--rdp-cell-size); + margin: 0; + border: 2px solid transparent; + border-radius: 100%; } -.mk-filter div svg { - width: 14px; - height: 14px; +.rdp-day_today:not(.rdp-day_outside) { + font-weight: bold; } -.mk-folder-note { - display: flex; - align-items: center; - gap: 4px; +.rdp-day_selected, +.rdp-day_selected:focus-visible, +.rdp-day_selected:hover { + color: white; + opacity: 1; + background-color: var(--rdp-accent-color); } -.mk-filter-add { - border: thin solid var(--divider-color) !important; - border-radius: 4px; - box-shadow: none !important; - background: none !important; - display: flex; - align-items: center; - padding: 4px; - font-size: var(--font-ui-small); - color: var(--text-muted); - gap: 4px; +.rdp-day_outside { + opacity: 0.5; } -.mk-filter-add div { - display: flex; +.rdp-day_selected:focus-visible { + outline: var(--rdp-outline); + outline-offset: 2px; + z-index: 1; } -.mk-search-bar { +.rdp:not([dir="rtl"]) .rdp-day_range_start:not(.rdp-day_range_end) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } -.mk-tag-selector { - padding: 0 var(--context-padding); - display: flex; - gap: 8px; - margin-top: 8px; - margin-bottom: 8px; +.rdp:not([dir="rtl"]) .rdp-day_range_end:not(.rdp-day_range_start) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } -.mk-tag-selector button div { - margin-right: 4px; - margin-left: 4px; +.rdp[dir=rtl] .rdp-day_range_start:not(.rdp-day_range_end) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } -.mk-tag-selector svg { - color: var(--tag-color) !important; +.rdp[dir=rtl] .rdp-day_range_end:not(.rdp-day_range_start) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } -.mk-tag-selector button { - color: var(--tag-color); - background-color: var(--tag-background); - border: var(--tag-border-width) solid var(--tag-border-color); - font-size: var(--tag-size); - vertical-align: baseline; - border-left: none; - border-right: none; - padding-top: var(--tag-padding-y); - padding-bottom: var(--tag-padding-y); - box-shadow: none !important; - height: unset !important; +.rdp-day_range_end.rdp-day_range_start { + border-radius: 100%; +} +.rdp-day_range_middle { + border-radius: 0; } /* src/css/FlowEditor.css */ @@ -1125,472 +1260,568 @@ body:not(.is-mobile) .mk-main-menu-button:hover { .mk-floweditor > .workspace-leaf > .workspace-leaf-content > .view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller { padding: 0; } +.mk-floweditor > .workspace-leaf > .workspace-leaf-content > .view-content > div > .mk-table { + padding-bottom: 10px !important; +} -/* src/css/Table.css */ -.mk-folder-view { +/* src/css/FilterBar.css */ +.mk-table-selector { + margin-right: 0; + display: flex; + align-items: center; + padding-left: var(--context-padding); + gap: 16px; + min-height: 48px; + max-width: 100%; + overflow-x: auto; +} +.mk-table-selector::-webkit-scrollbar { + display: none; +} +.mk-table-selector > div > .mk-collapse { + padding-right: 8px; + padding-left: 0px; +} +.mk-table-selector .mk-collapse.mk-icon-xsmall svg { + color: unset; +} +.mk-table-selector > div > button:not(:last-child) { + padding-right: 0px; +} +.mk-table-selector > div, +.mk-table-selector > button { + border-radius: 0; + margin: 4px -8px; + display: flex; + align-items: center; + border-bottom: thin solid transparent; height: 100%; } -body { - --context-padding: var(--size-4-6); +.mk-table-selector .mk-is-active button { + color: var(--text-normal); +} +.mk-table-selector .mk-is-active { + border-bottom: thin solid var(--text-normal); + color: var(--text-normal); + background: none !important; +} +.mk-view-selector button { + background: none; + border: none; + box-shadow: none; + color: var(--text-faint); +} +.mk-view-selector button:hover { + color: var(--text-normal); +} +.mk-view-selector { + width: 100%; + display: flex; + color: var(--text-faint); + align-items: stretch; + border-bottom: 1px solid var(--divider-color); + flex-wrap: wrap; +} +.mk-view-selector input { + background: none; + border: none; + flex-grow: 1; +} +.is-phone .mk-view-selector { + flex-wrap: wrap; +} +.is-phone .mk-view-selector button { + width: unset; +} +.mk-view-search { + background: var(--background-modifier-form-field); + border: var(--input-border-width) solid var(--background-modifier-border); + display: flex; + border-radius: 8px; + align-items: center; + flex-grow: 1; } -.mk-th { - position: relative; +.mk-view-search button:hover { + background: unset !important; } -.is-mobile .mk-resizer { - width: 8px; - opacity: 0.05; +.mk-view-search button { + margin: 0 !important; + padding: var(--size-4-1) var(--size-4-2) !important; } -.mk-resizer { - position: absolute; - right: 0; - top: 0; - height: 100%; - width: 2px; - background: var(--divider-color); - cursor: col-resize; - user-select: none; - touch-action: none; - opacity: 0; +.is-phone .mk-view-options { + margin-top: 8px; + margin-bottom: 8px; } -.mk-resizer.mk-resizer-active { - opacity: 1; +.mk-view-options { + display: flex; + align-items: center; + color: var(--text-normal) !important; + min-height: 48px; + padding-left: var(--context-padding); + flex-grow: 1; } -.mk-resizer.isResizing { - background: var(--interactive-hover); - opacity: 1; +.mk-view-selector span { + flex-grow: 10; } -.mk-resizer:hover { - opacity: 1; +.mk-view-selector svg { + width: 14px; + height: 14px; } -.mk-col-header { - overflow-x: hidden; - text-overflow: ellipsis; - padding: 0.5rem 0.75rem; +.mk-filter-bar { display: flex; - align-items: center; - font-size: var(--font-smaller); - font-weight: var(--font-normal); - color: var(--text-muted); + padding: 8px var(--context-padding); + gap: 8px; + width: 100%; + border-bottom: 1px solid var(--divider-color); } -.mk-col-header-context { - margin-left: 4px; - color: var(--text-faint); +.mk-filter-bar span { + flex-grow: 1; } -.mk-td { - padding: 0.5rem; - vertical-align: top; +.mk-table-selector .mk-is-active { + color: var(--text-normal) !important; } -.mk-td-group { - background-color: var(--background-primary); - padding: 0.5rem; - border-top: 0.5px solid var(--divider-color); +.mk-filter { + display: flex; font-size: var(--font-ui-small); - font-weight: var(--bold-weight); + color: var(--text-muted); + padding: 0px; } -.mk-td-group .mk-cell-option { - width: unset; +.mk-filter > span, +.mk-filter > div { + background: var(--interactive-normal); } -.mk-td-group .mk-cell-option-item { - background: none; +.mk-filter > span:hover, +.mk-filter > div:hover { + background: var(--interactive-hover); } -.mk-td-group .mk-cell-option-item div:hover { - background: none; +.mk-filter > *:first-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + padding-left: 10px; } -.mk-td-empty { - padding: 0 !important; +.mk-filter > *:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + padding-right: 6px; } -.mk-td input[type=text], -.mk-td input[type=number] { - display: table-cell; - width: 100%; - border: 0; - outline: 0; +.mk-filter span { + border-right: thin solid var(--background-primary); + padding: 4px 8px; + display: flex; + align-items: center; } -.mk-table { - width: 100%; - overflow-x: scroll; - padding-bottom: 60px; +.mk-filter div { + display: flex; + align-items: center; + padding-left: 4px; } -.mk-table table { - border-spacing: 0; +.mk-filter div svg { + width: 14px; + height: 14px; } -.mk-table table th:last-child { - width: 100%; +.mk-folder-note { + display: flex; + align-items: center; + gap: 4px; } -.mk-table th:hover { - background: var(--interactive-hover); +.mk-filter-add { + border: thin solid var(--divider-color) !important; + border-radius: 4px; + box-shadow: none !important; + background: none !important; + display: flex; + align-items: center; + padding: 4px; + font-size: var(--font-ui-small); + color: var(--text-muted); + gap: 4px; } -.mk-table tr th:first-child .mk-col-header, -.mk-table tr td:first-child { - padding-left: max(var(--context-padding), 0.75rem); +.mk-filter-add div { + display: flex; } -.mk-cell-empty { - color: var(--text-faint); +.mk-search-bar { } -.mk-td img { - max-height: 45px; +.mk-tag-selector { + padding: 0 var(--context-padding); + display: flex; + gap: 8px; + margin-top: 8px; + margin-bottom: 8px; } -.mk-table tr td:first-child.mk-td-empty { - padding-left: calc(var(--context-padding) - 0.75rem) !important; +.mk-tag-selector button div { + margin-right: 4px; + margin-left: 4px; } -.mk-table .mk-td { - border-top: 0.5px solid var(--background-modifier-border); - font-size: var(--font-ui-small); +.mk-tag-selector svg { + color: var(--tag-color) !important; } -.mk-cell-text { - padding: 4px; +.mk-tag-selector button { + color: var(--tag-color); + background-color: var(--tag-background); + border: var(--tag-border-width) solid var(--tag-border-color); + font-size: var(--tag-size); + vertical-align: baseline; + border-left: none; + border-right: none; + padding-top: var(--tag-padding-y); + padding-bottom: var(--tag-padding-y); + box-shadow: none !important; + height: unset !important; } -.mk-cell-text:not(:focus) { - background: unset !important; + +/* src/css/InlineMenu.css */ +body:not(.is-mobile) .mk-style-menu { + margin-left: -80px; } -.mk-cell-date { - width: 100%; - min-height: 30px; +.mk-style-menu { display: flex; - align-items: center; -} -.mk-cell-date-value { - border-radius: 4px; - padding: 2px 4px; + padding: 0; + margin-top: -50px; } -.mk-cell-date-value:hover { - background: var(--interactive-hover); +.is-mobile .mk-style-menu svg { + width: 32px; + height: 32px; } -.mk-cell-option { +.is-mobile .mk-style-menu { + --mobile-toolbar-height: 48px; + border-radius: 0; width: 100%; - min-height: 30px; - padding: 4px 0px; - gap: 4px; - display: flex; - flex-wrap: wrap; + margin-top: 0; + overflow-x: auto; + justify-content: center; + height: var(--mobile-toolbar-height); + border-top: var(--divider-width) solid var(--divider-color); } -.mk-cell-option-item { - background: rgba(var(--mono-rgb-100), 0.025); +.mk-style-menu .mk-mark { + margin: 4px; + padding: 4px; border-radius: 4px; - overflow: hidden; display: flex; - align-items: center; - gap: 2px; -} -.mk-cell-option-item input { - margin: 0; } -.mk-cell-option-item div { - padding: 2px 4px; - height: 100%; - display: -webkit-box; - -webkit-line-clamp: 1; - line-clamp: 1; - -webkit-box-orient: vertical; +.mk-style-menu .mk-mark:hover { + background: var(--background-modifier-hover); } -.mk-cell-option-item div:hover { - background: var(--interactive-hover); +.mk-style-menu .mk-mark-active { + background: var(--background-modifier-hover); } -.mk-cell-fileprop { - padding: 4px; +.mk-style-menu svg { color: var(--text-muted); } -.mk-cell-file { - display: flex; - align-items: center; +.mk-divider { + border-left: thin solid var(--background-modifier-hover); + width: 1px; +} +.mk-color { + width: 24px; + height: 24px; + border-radius: 12px; + margin: 8px; +} +.mk-color:hover { + opacity: 0.8; } -.mk-cell-file-title { - font-size: var(--font-ui-medium); - margin-bottom: 8px; +mark { + color: unset; + border-radius: 2px; + margin: 0px 2px; + padding: 0px 2px; } -.mk-cell-file-new { + +/* src/css/MakeMenu.css */ +.mk-slash-item { display: flex; align-items: center; } -.mk-cell-file-new .mk-file-icon svg { - color: var(--text-faint); +.mk-slash-icon { + display: flex; + margin-right: 8px; } -.mk-table:focus .mk-is-active { - background: var(--background-modifier-active-hover) !important; +.mk-slash-icon svg { + width: 16px; + height: 16px; } -.mk-floweditor .mk-table:not(:focus) .mk-is-active { - background: none !important; +.cm-active.cm-placeholder:before { + content: attr(data-ph); + color: var(--text-faint); + position: absolute; } -.mk-table:focus .mk-is-active .mk-selected-cell { - outline: solid 2px var(--interactive-accent); + +/* src/css/StickerMenu.css */ +.mk-sticker-menu .suggestion { + width: 240px; + height: 240px; + display: flex; + flex-wrap: wrap; + align-content: flex-start; + flex-direction: row; } -.mk-cell-file-new .mk-file-icon:hover { - background: var(--interactive-hover); +.mk-sticker-modal { + display: flex; + flex-wrap: wrap; } -.mk-cell-file-item { +.mk-sticker-menu .suggestion-item { + width: 30px; + height: 30px; display: flex; + font-size: 20px; align-items: center; + padding: 0; + text-align: center; + justify-content: center; } -.mk-cell-file-item .mk-file-icon:hover { - background: var(--interactive-hover); -} -.mk-cell-file-item .mk-cell-file-name { - padding: 2px 4px; - border-radius: 4px; -} -.mk-cell-file-item .mk-cell-file-name:hover { - background: var(--interactive-hover); -} -.mk-cell-file .mk-file-icon { - margin-right: 4px; - align-items: center; - display: flex; - width: 24px; - border-radius: 4px; +.mk-sticker-filter { + border: none; + background: none; + border-bottom: thin solid var(--background-modifier-hover); + width: 100%; + padding: 8px 12px; } -.mk-cell-file-new .mk-cell-file-name { - padding: 4px !important; - background: none !important; +.mk-sticker-menu .suggestion-item:hover { + background: var(--background-modifier-hover); } -.is-phone .mk-cell-file-flow { - display: none; + +/* src/css/makerMode.css */ +.mk-mark-sans .cm-s-obsidian span.cm-hmd-escape-backslash, +.mk-mark-sans .cm-s-obsidian .HyperMD-header:not(.mk-reset) span.cm-formatting-header { + display: inline; + position: absolute; + right: 100%; + white-space: nowrap; + color: transparent; } -.mk-list-item .mk-cell-file-flow { - visibility: hidden; - margin-left: 4px; - padding: 2px 4px; +.mk-mark-sans .cm-s-obsidian .HyperMD-header.mk-reset span.cm-formatting-header { + color: unset; } -.mk-list-item:hover .mk-cell-file-flow { - visibility: visible; +.mk-mark-sans .mk-reset .cm-fold-indicator { + display: none !important; } -.is-phone .mk-list-item .mk-cell-file-flow { - width: unset; - visibility: unset; +.mk-mark-sans div[class*=HyperMD-header-].mk-reset { + font-variant: unset; + letter-spacing: unset; + line-height: unset; + font-size: unset; + color: unset; + font-weight: unset; + font-style: unset; + font-family: unset; } -.mk-list-item .mk-cell-file-flow:hover { - border-radius: 4px; - background: var(--interactive-hover); +.mk-mark-sans .HyperMD-quote-lazy:before { + content: none !important; } -.mk-row-new { - text-align: left; - border-top: 0.5px solid var(--divider-color); - padding: 8px var(--context-padding); - font-weight: normal; - color: var(--text-faint); +.mk-mark-sans .cm-s-obsidian span.cm-formatting-quote:not(.cm-hmd-callout) { + color: transparent; } -.mk-row-new:hover { - background: var(--background-modifier-hover); +.mk-mark-sans .cm-s-obsidian span.cm-hmd-escape-backslash::selection, +.mk-mark-sans .cm-s-obsidian span.cm-formatting-header::selection { + background: transparent; } -.mk-icon-small svg { - width: 16px; - height: 16px; - color: var(--text-muted); +.mk-flow-replace .mk-new-file { + background: var(--color-base-10); + border-bottom: thin solid #333; } -.mk-icon-small, -.mk-icon-xsmall { - display: flex; - align-items: center; +.mk-flow-replace .mk-new-file:hover { + background: var(--color-base-10); + border-bottom: thin solid #333; } -.mk-icon-xxsmall svg { - width: 10px; - height: 10px; - color: var(--text-muted); +.mobile-toolbar-options-container { + border-top: var(--divider-width) solid var(--divider-color); } -.mk-icon-xsmall svg { - width: 12px; - height: 12px; - color: var(--text-muted); +.mk-mark-sans .markdown-source-view.mod-cm6 .HyperMD-quote:not(.HyperMD-callout):before, +.mk-mark-sans .markdown-source-view.mod-cm6 .cm-blockquote-border:before { + left: 0; + content: "\200b"; + display: block; + width: 1px; + border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); + color: transparent; + position: absolute; + top: 0; + bottom: 0; } -.mk-icon-rotated svg { - transform: rotate(90deg); + +/* src/css/FileTree.css */ +.mk-hide-tabs .mod-left-split .mod-top-left-space .workspace-tab-header-container-inner { + visibility: hidden; } -.mk-cell-link-item { - color: var(--link-color); +.is-mobile.mk-hide-ribbon .workspace-drawer.mod-left .workspace-drawer-inner { + padding-left: 0 !important; } -.mk-cell-option span { - flex-grow: 1; +.mk-hide-ribbon .workspace-ribbon { + display: none; } -.mk-cell-option-select { - display: flex; - align-items: center; +.mk-hide-ribbon.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container:before { + width: calc(var(--frame-left-space) + var(--ribbon-width)); } -.mk-cell-option-new { - visibility: hidden; - background: rgba(var(--mono-rgb-100), 0.025); - padding: 2px; - display: flex; - border-radius: 4px; +.mk-hide-ribbon.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container { + padding-left: calc(var(--frame-left-space) + var(--ribbon-width)); } -.mk-cell-option:hover .mk-cell-option-new { - visibility: visible; +.is-mobile.mk-hide-ribbon .workspace-drawer-ribbon { + display: none; } -.mk-cell-link-unresolved { - color: var(--link-unresolved-color); - opacity: var(--link-unresolved-opacity); - filter: var(--link-unresolved-filter); +.is-mobile .workspace-drawer.mod-left .workspace-drawer-inner .workspace-drawer-header { + padding-left: 0 !important; } -.mk-cell-link-unresolved:hover { - color: var(--link-unresolved-color); - opacity: var(--link-unresolved-opacity); - filter: var(--link-unresolved-filter); +.is-mobile .workspace-drawer.mod-left .workspace-drawer-active-tab-header { + display: none; } - -/* src/css/CardsView.css */ -.mk-cards-container { - width: 100%; - height: 100%; - overflow-x: auto; - padding-bottom: 60px; +.is-mobile .workspace-drawer.mod-left .workspace-drawer-inner .mod-settings { + display: none; } -.mk-cards-container .mk-list-view { - display: inline-grid; - grid-auto-flow: column; - padding: 20px; - gap: 20px; +.is-mobile .workspace-drawer.mod-left .workspace-drawer-header-left { } -.mk-cards-container .mk-list-item { - border-radius: 4px; - list-style: none; - background: var(--background-secondary); - overflow: hidden; - font-size: var(--font-ui-small); - color: var(--text-muted); - box-shadow: - 0px 1px 2px rgba(0, 0, 0, 0.06), - 0px 3.4px 6.7px rgba(0, 0, 0, 0.06), - 0px 15px 30px rgba(0, 0, 0, 0.15); +.is-mobile .mk-sidebar button:not(.clickable-icon) { + padding: unset; } -.mk-cards-container .mk-list-group { - width: 200px; +.is-mobile .mk-sidebar .mk-file-icon button { + font-size: 16px; + margin: 0; + height: 24px; + width: 24px; } -.mk-cards-grid .mk-list-item { - width: 250px; +body.is-mobile .sidebar-toggle-button { + display: flex !important; } -.mk-cards-container .mk-file-icon svg { - display: none; +.is-mobile .workspace-drawer.mod-left .workspace-drawer-header-icon { + position: absolute; + right: 20px; + top: 12px; + z-index: 100; } -.mk-cards-grid .mk-list-group { - width: 100% !important; +.is-phone .workspace-drawer.mod-left .workspace-drawer-header-icon { + top: 20px; } -.mk-cards-grid .mk-list-group ul { - flex-direction: row !important; - flex-wrap: wrap; +.is-mobile .workspace-drawer.mod-left { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } -.mk-cards-container .mk-list-group ul { - list-style: none; - padding-inline-start: 0px; +.mk-sidebar { display: flex; flex-direction: column; - gap: 10px; -} -.mk-list-container .mk-list-group-header { - display: flex; - padding: 12px 24px 4px 24px; - background-color: var(--titlebar-background); -} -.mk-list-container .mk-list-group-header > div { - background: none !important; -} -.mk-list-container { - width: 100%; height: 100%; - overflow-y: auto; - padding-bottom: 100px; } -.mk-list-container .mk-list-view { - display: flex; - flex-direction: column; +.is-mobile .mk-sidebar { } -.mk-cards-container .mk-list-item.mk-is-active, -.mk-list-container .mk-list-item.mk-is-active { - background: var(--background-modifier-active-hover); +.mk-file-tree { + flex: 1; + overflow: hidden; } -.mk-list-container .mk-list-item { + +/* src/css/MainMenu.css */ +.mk-main-menu-container { display: flex; - padding: 8px var(--context-padding) 0 var(--context-padding); - list-style: none; - font-size: var(--font-ui-small); - color: var(--text-muted); - align-items: flex-start; + padding: 12px 8px 0px 8px; } -.mk-list-container .mk-list-content { - flex-grow: 1; +.mk-main-menu-button { + text-align: left; + padding: 8px 8px; + border-radius: 4px; + align-items: center; display: flex; - flex-direction: column; - border-bottom: thin solid var(--divider-color); - min-height: 69px; + width: calc(100% - 50px); } -.mk-list-container .mk-list-fields { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 9px; - padding-bottom: 8px; +.mk-main-menu-icon { + background: var(--nav-item-background-hover); + padding: 2px; + border-radius: 2px; + text-transform: uppercase; + width: 20px; + height: 20px; + font-size: 12px; + justify-content: center; + margin-right: 4px; } -.mk-list-container .mk-list-fields > div:not(.mk-cell-file) { - width: unset !important; +.mk-flow-bar-compact .mk-main-menu-container { + flex-grow: 1; + padding: 0; } -.mk-list-container .mk-list-group { +.mk-flow-bar-compact .mk-main-menu-button { width: 100%; -} -.mk-cards-container .mk-cell-file-title, -.mk-list-container .mk-cell-file-title { padding: 4px; - color: var(--text-normal); - margin-bottom: 0; + gap: 4px; } -.mk-list-container .mk-list-fields .mk-cell-file { - width: 100%; - font-weight: var(--bold-weight); - margin-bottom: -12px; +.is-mobile .mk-main-menu-button { + font-size: var(--font-ui-medium); + font-weight: var(--font-medium); + gap: 4px; } -.mk-cards-container .mk-list-fields { - padding: 12px; - align-items: flex-start; +.mk-main-menu-button > div { display: flex; - flex-direction: column; } -.mk-list-fields .mk-cell-file-preview { - width: 100%; - color: var(--text-normal); - margin-bottom: -8px; - color: var(--text-faint); - text-overflow: ellipsis; - overflow: hidden; - -webkit-line-clamp: 1; - -webkit-box-orient: vertical; - display: -webkit-box; +.mk-main-menu-button svg { + height: 16px; + width: 16px; } -.mk-list-container .mk-list-group ul { - list-style: none; - padding-inline-start: 0px; +body:not(.is-mobile) .mk-main-menu-button:hover { + background: var(--nav-item-background-hover); +} +.mk-main-menu { + position: absolute; + left: 8px; + z-index: var(--layer-menu); + margin-top: 2.25rem; + margin-left: 2px; + background-color: var(--background-secondary); + transform-origin: top left; + border-radius: var(--radius-m); + border: 1px solid var(--background-modifier-border-hover); + box-shadow: var(--shadow-s); +} +.mk-menu-button { display: flex; - flex-direction: column; - margin-top: 0; - margin-bottom: 0; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + font-size: 0.75rem; + line-height: 1.25rem; + align-items: center; + width: 100%; + border-radius: 0.375rem; } -.mk-file-preview { - background: var(--label-color); +.mk-menu-button:hover { + background: var(--nav-item-background-hover); } -.mk-list-container .mk-file-preview { - min-width: 48px; - height: 48px; - border-radius: 8px; - margin-right: 8px; + +/* src/css/SectionView.css */ +.mk-section { + display: flex; + padding: 4px; + padding-left: 16px; margin-top: 8px; + color: var(--text-muted); + font-size: var(--font-ui-smaller); + width: 100%; + justify-content: space-between; + margin-left: 0; + padding-left: 4px !important; +} +body:not(.is-mobile) .mk-section-title:hover { + background: var(--nav-item-background-hover); +} +.mk-section-title { + height: 24px; + border-radius: 4px; + padding-left: 4px; display: flex; + min-width: 0; align-items: center; - justify-content: center; } -.mk-list-group-header .mk-cell-option-item { - background: none !important; +.mk-section-title .mk-tree-text { + padding: 0.25rem 0rem 0.3rem 0.25rem; } -.mk-cards-container .mk-file-preview { - position: relative; - margin-bottom: 4px; - height: 40px; +body:not(.is-mobile) .mk-section .mk-collapse { + display: none; } -.mk-cards-container .mk-file-icon { - position: absolute; - bottom: -6px; - font-size: 24px; - left: 14px; +.mk-section-title .mk-collapse { + display: flex; } -.mk-list-container .mk-file-icon { - font-size: 20px; +body:not(.is-mobile) .mk-section-title:hover .mk-collapse { display: flex; - align-items: center; - justify-content: center; +} +.mk-section-title .mk-collapse svg { + margin-left: 4px; + width: 10px; + height: 10px; } /* src/css/FolderTreeView.css */ @@ -1800,55 +2031,8 @@ body:not(.is-mobile) .mk-tree-wrapper:not(.mk-section-wrapper):not(.mk-disable-i padding-left: var(--spacing); padding-top: 4px; padding-bottom: 4px; - font-size: var(--font-ui-small); - color: var(--text-faint); -} - -/* src/css/SectionView.css */ -.mk-section { - display: flex; - padding: 4px; - padding-left: 16px; - margin-top: 8px; - color: var(--text-muted); - font-size: var(--font-ui-smaller); - width: 100%; - justify-content: space-between; - margin-left: 0; - padding-left: 4px !important; -} -body:not(.is-mobile) .mk-section-title:hover { - background: var(--nav-item-background-hover); -} -.mk-section-title { - height: 24px; - border-radius: 4px; - padding-left: 4px; - display: flex; - min-width: 0; - align-items: center; -} -.mk-section-title .mk-tree-text { - padding: 0.25rem 0rem 0.3rem 0.25rem; -} -body:not(.is-mobile) .mk-section .mk-collapse { - display: none; -} -.mk-section-title .mk-collapse { - display: flex; -} -body:not(.is-mobile) .mk-section-title:hover .mk-collapse { - display: flex; -} -.mk-section-title .mk-collapse svg { - margin-left: 4px; - width: 10px; - height: 10px; -} - -/* src/css/ContextList.css */ -.mk-context-list { - margin: 12px; + font-size: var(--font-ui-small); + color: var(--text-faint); } /* src/css/NewNote.css */ @@ -1946,177 +2130,60 @@ body:not(.is-mobile) .mk-section-title:hover .mk-collapse { color: var(--text-normal) !important; } -/* src/css/MakeMenu.css */ -.mk-slash-item { - display: flex; - align-items: center; -} -.mk-slash-icon { - display: flex; - margin-right: 8px; -} -.mk-slash-icon svg { - width: 16px; - height: 16px; -} -.cm-active.cm-placeholder:before { - content: attr(data-ph); - color: var(--text-faint); - position: absolute; -} - -/* src/css/StickerMenu.css */ -.mk-sticker-menu .suggestion { - width: 240px; - height: 240px; - display: flex; - flex-wrap: wrap; - align-content: flex-start; - flex-direction: row; -} -.mk-sticker-modal { - display: flex; - flex-wrap: wrap; -} -.mk-sticker-menu .suggestion-item { - width: 30px; - height: 30px; - display: flex; - font-size: 20px; - align-items: center; +/* src/css/Blink.css */ +.mk-blink-modal { padding: 0; - text-align: center; - justify-content: center; -} -.mk-sticker-filter { - border: none; - background: none; - border-bottom: thin solid var(--background-modifier-hover); - width: 100%; - padding: 8px 12px; -} -.mk-sticker-menu .suggestion-item:hover { - background: var(--background-modifier-hover); -} - -/* src/css/makerMode.css */ -.markdown-source-view.mod-cm6 .task-list-label .task-list-item-checkbox { - margin-bottom: 4px; -} -.mk-mark-sans .cm-s-obsidian span.cm-hmd-escape-backslash, -.mk-mark-sans .cm-s-obsidian .HyperMD-header:not(.mk-reset) span.cm-formatting-header { - display: inline; - position: absolute; - right: 100%; - white-space: nowrap; - color: transparent; -} -.mk-mark-sans .cm-s-obsidian .HyperMD-header.mk-reset span.cm-formatting-header { - color: unset; -} -.mk-mark-sans .mk-reset .cm-fold-indicator { - display: none !important; -} -.mk-mark-sans div[class*=HyperMD-header-].mk-reset { - font-variant: unset; - letter-spacing: unset; - line-height: unset; - font-size: unset; - color: unset; - font-weight: unset; - font-style: unset; - font-family: unset; -} -.mk-mark-sans .HyperMD-quote-lazy:before { - content: none !important; -} -.mk-mark-sans .cm-s-obsidian span.cm-formatting-quote:not(.cm-hmd-callout) { - color: transparent; -} -.mk-mark-sans .cm-s-obsidian span.cm-hmd-escape-backslash::selection, -.mk-mark-sans .cm-s-obsidian span.cm-formatting-header::selection { - background: transparent; -} -.mk-flow-replace .mk-new-file { - background: var(--color-base-10); - border-bottom: thin solid #333; } -.mk-flow-replace .mk-new-file:hover { - background: var(--color-base-10); - border-bottom: thin solid #333; -} -.mobile-toolbar-options-container { - border-top: var(--divider-width) solid var(--divider-color); -} -.mk-mark-sans .markdown-source-view.mod-cm6 .HyperMD-quote:not(.HyperMD-callout):before, -.mk-mark-sans .markdown-source-view.mod-cm6 .cm-blockquote-border:before { - left: 0; - content: "\200b"; - display: block; - width: 1px; - border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); - color: transparent; - position: absolute; - top: 0; - bottom: 0; -} - -/* src/css/InlineMenu.css */ -body:not(.is-mobile) .mk-style-menu { - margin-left: -80px; +.mk-blink-modal .mk-options-menu { + display: grid !important; + grid-template-columns: 5fr 8fr; + grid-template-rows: 50px auto; + height: var(--prompt-max-height); + width: unset !important; } -.mk-style-menu { - display: flex; +.mk-blink-modal .mk-options-menu__search { + width: 100%; padding: 0; - margin-top: -50px; } -.is-mobile .mk-style-menu svg { - width: 32px; - height: 32px; +.mk-blink-modal .mk-options-menu__suggestions li { + margin: 6px; } -.is-mobile .mk-style-menu { - --mobile-toolbar-height: 48px; +.mk-blink-modal .mk-options-menu__search input { + padding: var(--size-4-6); + background-color: var(--background-primary); + font-size: var(--font-ui-medium); + border: none; + height: 40px; border-radius: 0; - width: 100%; - margin-top: 0; - overflow-x: auto; - justify-content: center; - height: var(--mobile-toolbar-height); - border-top: var(--divider-width) solid var(--divider-color); -} -.mk-style-menu .mk-mark { - margin: 4px; - padding: 4px; - border-radius: 4px; - display: flex; -} -.mk-style-menu .mk-mark:hover { - background: var(--background-modifier-hover); + border-bottom: 1px solid var(--background-secondary); } -.mk-style-menu .mk-mark-active { - background: var(--background-modifier-hover); +.mk-blink-modal .mk-floweditor .workspace-leaf-content[data-type=canvas] .view-content { + height: 580px; } -.mk-style-menu svg { - color: var(--text-muted); +.mk-blink-modal .mk-options-menu__selected { + grid-column: 1 / 3; + grid-row: 1; + padding: 0; + margin-top: 0; } -.mk-divider { - border-left: thin solid var(--background-modifier-hover); - width: 1px; +.mk-blink-modal .mk-options-menu__suggestions { + padding: var(--size-4-3); + grid-column: 1; + grid-row: 2; + max-height: unset; + width: unset; } -.mk-color { - width: 24px; - height: 24px; - border-radius: 12px; - margin: 8px; +.mk-blink-preview { + grid-column: 2; + grid-row: 2; + overflow: auto; + border-left: thin solid var(--background-secondary); } -.mk-color:hover { - opacity: 0.8; +.mk-flowspace-editor { + padding: 0 !important; } -mark { - color: unset; - border-radius: 2px; - margin: 0px 2px; - padding: 0px 2px; +.mk-blink-preview .markdown-source-view { + padding: 12px; } /* src/css/FileContext.css */ @@ -2184,59 +2251,3 @@ mark { font-size: var(--font-ui-small); color: var(--text-faint); } - -/* src/css/Blink.css */ -.mk-blink-modal { - padding: 0; -} -.mk-blink-modal .mk-options-menu { - display: grid !important; - grid-template-columns: 5fr 8fr; - grid-template-rows: 50px auto; - height: var(--prompt-max-height); - width: unset !important; -} -.mk-blink-modal .mk-options-menu__search { - width: 100%; - padding: 0; -} -.mk-blink-modal .mk-options-menu__suggestions li { - margin: 6px; -} -.mk-blink-modal .mk-options-menu__search input { - padding: var(--size-4-6); - background-color: var(--background-primary); - font-size: var(--font-ui-medium); - border: none; - height: 40px; - border-radius: 0; - border-bottom: 1px solid var(--background-secondary); -} -.mk-blink-modal .mk-floweditor .workspace-leaf-content[data-type=canvas] .view-content { - height: 580px; -} -.mk-blink-modal .mk-options-menu__selected { - grid-column: 1 / 3; - grid-row: 1; - padding: 0; - margin-top: 0; -} -.mk-blink-modal .mk-options-menu__suggestions { - padding: var(--size-4-3); - grid-column: 1; - grid-row: 2; - max-height: unset; - width: unset; -} -.mk-blink-preview { - grid-column: 2; - grid-row: 2; - overflow: auto; - border-left: thin solid var(--background-secondary); -} -.mk-flowspace-editor { - padding: 0 !important; -} -.mk-blink-preview .markdown-source-view { - padding: 12px; -}