hesamation commited on
Commit
d349c25
·
1 Parent(s): 72a6559

added word-emb-heirarchy visual

Browse files
dist/assets/images/256px-PDF.png DELETED

Git LFS Details

  • SHA256: 48b7ab9362d78d22ca0d66b2943406759e85cffb86b585176990035d12ac2c7d
  • Pointer size: 129 Bytes
  • Size of remote file: 5.46 kB
dist/assets/images/placeholder.png DELETED

Git LFS Details

  • SHA256: c121166b2de694f4bb71dca004c8f413899016751eed5daa1570ba0d5ad9faec
  • Pointer size: 130 Bytes
  • Size of remote file: 53.1 kB
dist/bibliography.bib DELETED
@@ -1,24 +0,0 @@
1
- @article{example2023,
2
- title={Example Paper Title},
3
- author={Example, Author and Another, Author},
4
- journal={Journal of Examples},
5
- volume={1},
6
- number={1},
7
- pages={1--10},
8
- year={2023},
9
- publisher={Example Publisher}
10
- }
11
-
12
- @online{distill,
13
- title={Distill},
14
- url={https://distill.pub},
15
- year={2016},
16
- publisher={Distill Working Group}
17
- }
18
-
19
- @book{textbook2022,
20
- title={An Example Textbook},
21
- author={Author, Example},
22
- year={2022},
23
- publisher={Example Academic Press}
24
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dist/distill.bundle.js DELETED
The diff for this file is too large to render. See raw diff
 
dist/fragments/banner.html DELETED
The diff for this file is too large to render. See raw diff
 
dist/index.html DELETED
The diff for this file is too large to render. See raw diff
 
dist/main.bundle.js DELETED
@@ -1,106 +0,0 @@
1
- /*
2
- * ATTENTION: An "eval-source-map" devtool has been used.
3
- * This devtool is neither made for production nor for readable output files.
4
- * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
5
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
6
- * or disable the default devtool with "devtool: false".
7
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
8
- */
9
- /******/ (() => { // webpackBootstrap
10
- /******/ "use strict";
11
- /******/ var __webpack_modules__ = ({
12
-
13
- /***/ "./src/fragmentLoader.js":
14
- /*!*******************************!*\
15
- !*** ./src/fragmentLoader.js ***!
16
- \*******************************/
17
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
18
-
19
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadFragments: () => (/* binding */ loadFragments)\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction loadFragments() {\n return _loadFragments.apply(this, arguments);\n}\nfunction _loadFragments() {\n _loadFragments = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {\n var fragmentElements, FetchQueue, fetchQueue, currentIndex, elements;\n return _regeneratorRuntime().wrap(function _callee7$(_context7) {\n while (1) switch (_context7.prev = _context7.next) {\n case 0:\n // Find all elements with ids starting with 'fragment-'\n fragmentElements = Array.from(document.querySelectorAll('[id^=\"fragment-\"]'));\n FetchQueue = /*#__PURE__*/function () {\n function FetchQueue() {\n var maxConcurrent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3;\n _classCallCheck(this, FetchQueue);\n this.queue = [];\n this.maxConcurrent = maxConcurrent;\n this.activeFetches = 0;\n this.maxRetries = 3; // Maximum number of retry attempts\n this.baseDelay = 1000; // Base delay in milliseconds (1 second)\n }\n return _createClass(FetchQueue, [{\n key: \"sleep\",\n value: function () {\n var _sleep = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(ms) {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n return _context.abrupt(\"return\", new Promise(function (resolve) {\n return setTimeout(resolve, ms);\n }));\n case 1:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function sleep(_x) {\n return _sleep.apply(this, arguments);\n }\n return sleep;\n }()\n }, {\n key: \"fetchWithRetry\",\n value: function () {\n var _fetchWithRetry = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(fragmentPath) {\n var retryCount,\n response,\n delay,\n _args2 = arguments;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n retryCount = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : 0;\n _context2.prev = 1;\n _context2.next = 4;\n return fetch(fragmentPath);\n case 4:\n response = _context2.sent;\n if (response.ok) {\n _context2.next = 7;\n break;\n }\n throw new Error(\"HTTP error! status: \".concat(response.status));\n case 7:\n _context2.next = 9;\n return response.text();\n case 9:\n return _context2.abrupt(\"return\", _context2.sent);\n case 12:\n _context2.prev = 12;\n _context2.t0 = _context2[\"catch\"](1);\n if (!(retryCount < this.maxRetries)) {\n _context2.next = 20;\n break;\n }\n // Exponential backoff: 1s, 2s, 4s\n delay = this.baseDelay * Math.pow(2, retryCount);\n console.warn(\"Retry \".concat(retryCount + 1, \"/\").concat(this.maxRetries, \" for \").concat(fragmentPath, \" after \").concat(delay, \"ms\"));\n _context2.next = 19;\n return this.sleep(delay);\n case 19:\n return _context2.abrupt(\"return\", this.fetchWithRetry(fragmentPath, retryCount + 1));\n case 20:\n throw _context2.t0;\n case 21:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this, [[1, 12]]);\n }));\n function fetchWithRetry(_x2) {\n return _fetchWithRetry.apply(this, arguments);\n }\n return fetchWithRetry;\n }()\n }, {\n key: \"addFetch\",\n value: function () {\n var _addFetch = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(element) {\n var _this = this;\n var fragmentName, fragmentPath;\n return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n fragmentName = element.id.replace('fragment-', '');\n fragmentPath = \"fragments/\".concat(fragmentName, \".html\");\n return _context5.abrupt(\"return\", new Promise(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(resolve, reject) {\n var fetchPromise;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n try {\n fetchPromise = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n var html, temp, scripts;\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.prev = 0;\n _context3.next = 3;\n return _this.fetchWithRetry(fragmentPath);\n case 3:\n html = _context3.sent;\n // Process the fragment\n temp = document.createElement('div');\n temp.innerHTML = html;\n element.innerHTML = temp.innerHTML;\n\n // Handle scripts\n scripts = temp.getElementsByTagName('script');\n Array.from(scripts).forEach(function (oldScript) {\n var newScript = document.createElement('script');\n Array.from(oldScript.attributes).forEach(function (attr) {\n newScript.setAttribute(attr.name, attr.value);\n });\n newScript.textContent = oldScript.textContent;\n oldScript.parentNode.removeChild(oldScript);\n document.body.appendChild(newScript);\n });\n _this.activeFetches--;\n resolve();\n _context3.next = 18;\n break;\n case 13:\n _context3.prev = 13;\n _context3.t0 = _context3[\"catch\"](0);\n console.error(\"Failed to load fragment \".concat(fragmentPath, \" after \").concat(_this.maxRetries, \" retries:\"), _context3.t0);\n _this.activeFetches--;\n reject(_context3.t0);\n case 18:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, null, [[0, 13]]);\n }))();\n _this.queue.push(fetchPromise);\n _this.activeFetches++;\n } catch (error) {\n reject(error);\n }\n case 1:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }));\n return function (_x4, _x5) {\n return _ref.apply(this, arguments);\n };\n }()));\n case 3:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }));\n function addFetch(_x3) {\n return _addFetch.apply(this, arguments);\n }\n return addFetch;\n }()\n }, {\n key: \"processNext\",\n value: function () {\n var _processNext = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(element) {\n return _regeneratorRuntime().wrap(function _callee6$(_context6) {\n while (1) switch (_context6.prev = _context6.next) {\n case 0:\n if (!(this.activeFetches < this.maxConcurrent && element)) {\n _context6.next = 3;\n break;\n }\n _context6.next = 3;\n return this.addFetch(element);\n case 3:\n case \"end\":\n return _context6.stop();\n }\n }, _callee6, this);\n }));\n function processNext(_x6) {\n return _processNext.apply(this, arguments);\n }\n return processNext;\n }()\n }]);\n }(); // Initialize queue\n fetchQueue = new FetchQueue(3);\n currentIndex = 0;\n elements = fragmentElements; // Assuming this is defined elsewhere\n // Initial loading of first 3 elements\n case 5:\n if (!(currentIndex < elements.length && currentIndex < 3)) {\n _context7.next = 11;\n break;\n }\n _context7.next = 8;\n return fetchQueue.processNext(elements[currentIndex]);\n case 8:\n currentIndex++;\n _context7.next = 5;\n break;\n case 11:\n if (!(currentIndex < elements.length)) {\n _context7.next = 20;\n break;\n }\n _context7.next = 14;\n return Promise.race(fetchQueue.queue);\n case 14:\n // Remove completed fetch from queue\n fetchQueue.queue = fetchQueue.queue.filter(function (p) {\n return p.status === 'pending';\n });\n // Add next element to queue\n _context7.next = 17;\n return fetchQueue.processNext(elements[currentIndex]);\n case 17:\n currentIndex++;\n _context7.next = 11;\n break;\n case 20:\n _context7.next = 22;\n return Promise.all(fetchQueue.queue);\n case 22:\n case \"end\":\n return _context7.stop();\n }\n }, _callee7);\n }));\n return _loadFragments.apply(this, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O1VBQ3ZFO1VBQUEvQixTQUFBLENBQUE3RCxJQUFBO1VBQUEsT0FDTXlELFVBQVUsQ0FBQ3VGLFdBQVcsQ0FBQ3JGLFFBQVEsQ0FBQ0QsWUFBWSxDQUFDLENBQUM7UUFBQTtVQUNwREEsWUFBWSxFQUFFO1VBQUNHLFNBQUEsQ0FBQTdELElBQUE7VUFBQTtRQUFBO1VBQUE2RCxTQUFBLENBQUE3RCxJQUFBO1VBQUEsT0FJYnVCLE9BQU8sQ0FBQzZILEdBQUcsQ0FBQzNGLFVBQVUsQ0FBQ1csS0FBSyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFQLFNBQUEsQ0FBQS9CLElBQUE7TUFBQTtJQUFBLEdBQUF3QixRQUFBO0VBQUEsQ0FDdEM7RUFBQSxPQUFBRCxjQUFBLENBQUFKLEtBQUEsT0FBQUQsU0FBQTtBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmxvZ3Bvc3QvLi9zcmMvZnJhZ21lbnRMb2FkZXIuanM/YWMzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJhc3luYyBmdW5jdGlvbiBsb2FkRnJhZ21lbnRzKCkge1xyXG4gICAgLy8gRmluZCBhbGwgZWxlbWVudHMgd2l0aCBpZHMgc3RhcnRpbmcgd2l0aCAnZnJhZ21lbnQtJ1xyXG4gICAgY29uc3QgZnJhZ21lbnRFbGVtZW50cyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImZyYWdtZW50LVwiXScpKTtcclxuICAgIFxyXG4gICAgY2xhc3MgRmV0Y2hRdWV1ZSB7XHJcbiAgICAgICAgY29uc3RydWN0b3IobWF4Q29uY3VycmVudCA9IDMpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLm1heENvbmN1cnJlbnQgPSBtYXhDb25jdXJyZW50O1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZldGNoZXMgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1heFJldHJpZXMgPSAzOyAvLyBNYXhpbXVtIG51bWJlciBvZiByZXRyeSBhdHRlbXB0c1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VEZWxheSA9IDEwMDA7IC8vIEJhc2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzICgxIHNlY29uZClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFzeW5jIHNsZWVwKG1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFzeW5jIGZldGNoV2l0aFJldHJ5KGZyYWdtZW50UGF0aCwgcmV0cnlDb3VudCA9IDApIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZnJhZ21lbnRQYXRoKTtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPCB0aGlzLm1heFJldHJpZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmOiAxcywgMnMsIDRzXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLmJhc2VEZWxheSAqIE1hdGgucG93KDIsIHJldHJ5Q291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgUmV0cnkgJHtyZXRyeUNvdW50ICsgMX0vJHt0aGlzLm1heFJldHJpZXN9IGZvciAke2ZyYWdtZW50UGF0aH0gYWZ0ZXIgJHtkZWxheX1tc2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2xlZXAoZGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoV2l0aFJldHJ5KGZyYWdtZW50UGF0aCwgcmV0cnlDb3VudCArIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFzeW5jIGFkZEZldGNoKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnROYW1lID0gZWxlbWVudC5pZC5yZXBsYWNlKCdmcmFnbWVudC0nLCAnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50UGF0aCA9IGBmcmFnbWVudHMvJHtmcmFnbWVudE5hbWV9Lmh0bWxgO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hQcm9taXNlID0gKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KGZyYWdtZW50UGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGZyYWdtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHRlbXAuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgc2NyaXB0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0cyA9IHRlbXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShzY3JpcHRzKS5mb3JFYWNoKG9sZFNjcmlwdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShvbGRTY3JpcHQuYXR0cmlidXRlcykuZm9yRWFjaChhdHRyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2NyaXB0LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NjcmlwdC50ZXh0Q29udGVudCA9IG9sZFNjcmlwdC50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRTY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRTY3JpcHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobmV3U2NyaXB0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUZldGNoZXMtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGZyYWdtZW50ICR7ZnJhZ21lbnRQYXRofSBhZnRlciAke3RoaXMubWF4UmV0cmllc30gcmV0cmllczpgLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUZldGNoZXMtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlLnB1c2goZmV0Y2hQcm9taXNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUZldGNoZXMrKztcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhc3luYyBwcm9jZXNzTmV4dChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUZldGNoZXMgPCB0aGlzLm1heENvbmN1cnJlbnQgJiYgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRGZXRjaChlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHF1ZXVlXHJcbiAgICBjb25zdCBmZXRjaFF1ZXVlID0gbmV3IEZldGNoUXVldWUoMyk7XHJcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gZnJhZ21lbnRFbGVtZW50czsgLy8gQXNzdW1pbmcgdGhpcyBpcyBkZWZpbmVkIGVsc2V3aGVyZVxyXG5cclxuICAgIC8vIEluaXRpYWwgbG9hZGluZyBvZiBmaXJzdCAzIGVsZW1lbnRzXHJcbiAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgZWxlbWVudHMubGVuZ3RoICYmIGN1cnJlbnRJbmRleCA8IDMpIHtcclxuICAgICAgICBhd2FpdCBmZXRjaFF1ZXVlLnByb2Nlc3NOZXh0KGVsZW1lbnRzW2N1cnJlbnRJbmRleF0pO1xyXG4gICAgICAgIGN1cnJlbnRJbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByb2Nlc3MgcmVtYWluaW5nIGVsZW1lbnRzIGFzIGZldGNoZXMgY29tcGxldGVcclxuICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBlbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAvLyBXYWl0IGZvciBhbnkgZmV0Y2ggdG8gY29tcGxldGVcclxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoZmV0Y2hRdWV1ZS5xdWV1ZSk7XHJcbiAgICAgICAgLy8gUmVtb3ZlIGNvbXBsZXRlZCBmZXRjaCBmcm9tIHF1ZXVlXHJcbiAgICAgICAgZmV0Y2hRdWV1ZS5xdWV1ZSA9IGZldGNoUXVldWUucXVldWUuZmlsdGVyKHAgPT4gcC5zdGF0dXMgPT09ICdwZW5kaW5nJyk7XHJcbiAgICAgICAgLy8gQWRkIG5leHQgZWxlbWVudCB0byBxdWV1ZVxyXG4gICAgICAgIGF3YWl0IGZldGNoUXVldWUucHJvY2Vzc05leHQoZWxlbWVudHNbY3VycmVudEluZGV4XSk7XHJcbiAgICAgICAgY3VycmVudEluZGV4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2FpdCBmb3IgcmVtYWluaW5nIGZldGNoZXMgdG8gY29tcGxldGVcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKGZldGNoUXVldWUucXVldWUpO1xyXG59XHJcblxyXG5leHBvcnQgeyBsb2FkRnJhZ21lbnRzIH0iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsImxvYWRGcmFnbWVudHMiLCJfbG9hZEZyYWdtZW50cyIsIl9jYWxsZWU3IiwiZnJhZ21lbnRFbGVtZW50cyIsIkZldGNoUXVldWUiLCJmZXRjaFF1ZXVlIiwiY3VycmVudEluZGV4IiwiZWxlbWVudHMiLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJBcnJheSIsImZyb20iLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtYXhDb25jdXJyZW50IiwidW5kZWZpbmVkIiwicXVldWUiLCJhY3RpdmVGZXRjaGVzIiwibWF4UmV0cmllcyIsImJhc2VEZWxheSIsIl9zbGVlcCIsIl9jYWxsZWUiLCJtcyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJzZXRUaW1lb3V0Iiwic2xlZXAiLCJfeCIsIl9mZXRjaFdpdGhSZXRyeSIsIl9jYWxsZWUyIiwiZnJhZ21lbnRQYXRoIiwicmV0cnlDb3VudCIsInJlc3BvbnNlIiwiZGVsYXkiLCJfYXJnczIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJmZXRjaCIsIm9rIiwiY29uY2F0Iiwic3RhdHVzIiwidGV4dCIsInQwIiwiTWF0aCIsInBvdyIsImNvbnNvbGUiLCJ3YXJuIiwiZmV0Y2hXaXRoUmV0cnkiLCJfeDIiLCJfYWRkRmV0Y2giLCJfY2FsbGVlNSIsImVsZW1lbnQiLCJfdGhpcyIsImZyYWdtZW50TmFtZSIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsImlkIiwicmVwbGFjZSIsIl9yZWYiLCJfY2FsbGVlNCIsInJlamVjdCIsImZldGNoUHJvbWlzZSIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIl9jYWxsZWUzIiwiaHRtbCIsInRlbXAiLCJzY3JpcHRzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwib2xkU2NyaXB0IiwibmV3U2NyaXB0IiwiYXR0cmlidXRlcyIsImF0dHIiLCJzZXRBdHRyaWJ1dGUiLCJ0ZXh0Q29udGVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImVycm9yIiwiX3g0IiwiX3g1IiwiYWRkRmV0Y2giLCJfeDMiLCJfcHJvY2Vzc05leHQiLCJfY2FsbGVlNiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsInByb2Nlc3NOZXh0IiwiX3g2IiwicmFjZSIsImZpbHRlciIsImFsbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/fragmentLoader.js\n");
20
-
21
- /***/ }),
22
-
23
- /***/ "./src/index.js":
24
- /*!**********************!*\
25
- !*** ./src/index.js ***!
26
- \**********************/
27
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28
-
29
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _fragmentLoader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fragmentLoader */ \"./src/fragmentLoader.js\");\n/* harmony import */ var _syncHFSpacesURLHash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./syncHFSpacesURLHash */ \"./src/syncHFSpacesURLHash.js\");\n// import { plotClusters } from './clusters'\n\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n console.log(\"DOMContentLoaded\");\n (0,_fragmentLoader__WEBPACK_IMPORTED_MODULE_0__.loadFragments)();\n // init_memory_plot();\n (0,_syncHFSpacesURLHash__WEBPACK_IMPORTED_MODULE_1__.syncHFSpacesURLHash)();\n}, {\n once: true\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDZ0Q7QUFDVztBQUUzREUsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxZQUFNO0VBQ2hEQyxPQUFPLENBQUNDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztFQUMvQkwsOERBQWEsQ0FBQyxDQUFDO0VBQ2Y7RUFDQUMseUVBQW1CLENBQUMsQ0FBQztBQUN6QixDQUFDLEVBQUU7RUFBRUssSUFBSSxFQUFFO0FBQUssQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmxvZ3Bvc3QvLi9zcmMvaW5kZXguanM/YjYzNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBwbG90Q2x1c3RlcnMgfSBmcm9tICcuL2NsdXN0ZXJzJ1xyXG5pbXBvcnQgeyBsb2FkRnJhZ21lbnRzIH0gZnJvbSAnLi9mcmFnbWVudExvYWRlcidcclxuaW1wb3J0IHsgc3luY0hGU3BhY2VzVVJMSGFzaCB9IGZyb20gJy4vc3luY0hGU3BhY2VzVVJMSGFzaCdcclxuXHJcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwiRE9NQ29udGVudExvYWRlZFwiKTtcclxuICAgIGxvYWRGcmFnbWVudHMoKTtcclxuICAgIC8vIGluaXRfbWVtb3J5X3Bsb3QoKTtcclxuICAgIHN5bmNIRlNwYWNlc1VSTEhhc2goKTtcclxufSwgeyBvbmNlOiB0cnVlIH0pO1xyXG4iXSwibmFtZXMiOlsibG9hZEZyYWdtZW50cyIsInN5bmNIRlNwYWNlc1VSTEhhc2giLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjb25zb2xlIiwibG9nIiwib25jZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.js\n");
30
-
31
- /***/ }),
32
-
33
- /***/ "./src/syncHFSpacesURLHash.js":
34
- /*!************************************!*\
35
- !*** ./src/syncHFSpacesURLHash.js ***!
36
- \************************************/
37
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38
-
39
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ syncHFSpacesURLHash: () => (/* binding */ syncHFSpacesURLHash)\n/* harmony export */ });\nvar queryArg = \"section\";\nfunction syncHFSpacesURLHash() {\n // Handle explicit section requests (don't update hash automatically on load)\n var hasExplicitRequest = handleExplicitSectionRequest();\n\n // Set up hash change monitoring\n updateHashBasedOnHashChange();\n\n // Always set up scroll monitoring to update hash during scrolling\n setupScrollMonitoring();\n\n // If no explicit request, we don't update the hash on initial load\n // The hash will only start updating when the user scrolls\n}\nfunction handleExplicitSectionRequest() {\n // Check for section parameter in URL\n var urlParams = new URLSearchParams(window.location.search);\n var sectionId = urlParams.get(queryArg);\n\n // If we have an explicit section request\n if (sectionId) {\n var targetElement = document.getElementById(sectionId);\n if (targetElement) {\n // Slight delay to ensure the browser doesn't try to do its own scrolling first\n setTimeout(function () {\n targetElement.scrollIntoView();\n history.replaceState(null, null, \"#\".concat(sectionId));\n }, 100);\n }\n return true;\n }\n\n // No explicit section parameter found\n return false;\n}\nfunction setupScrollMonitoring() {\n // Variables to manage throttling\n var isScrolling = false;\n var lastKnownScrollPosition = 0;\n var initialScroll = true;\n\n // Add the scroll event listener\n window.addEventListener('scroll', function () {\n lastKnownScrollPosition = window.scrollY;\n if (!isScrolling) {\n window.requestAnimationFrame(function () {\n // Skip the first scroll event which might be browser's automatic scroll\n // to a hash on page load\n if (initialScroll) {\n initialScroll = false;\n } else {\n updateHashBasedOnScroll(lastKnownScrollPosition);\n }\n isScrolling = false;\n });\n }\n isScrolling = true;\n });\n}\n\n// Function to update the URL hash based on scroll position\nfunction updateHashBasedOnScroll(scrollPosition) {\n var closestHeading = findClosestHeading(scrollPosition);\n\n // Update the URL hash if we found a closest element\n if (closestHeading && closestHeading.id) {\n // Only update if the hash is different to avoid unnecessary operations\n if (window.location.hash !== \"#\".concat(closestHeading.id)) {\n silentlyUpdateHash(closestHeading.id);\n postMessageToHFSpaces(closestHeading.id);\n }\n }\n}\n\n// Find the closest heading to the current scroll position\nfunction findClosestHeading(scrollPosition) {\n // Get only heading elements with IDs that we want to track\n var headingsWithIds = Array.from(document.querySelectorAll('h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]'));\n\n // Skip if there are no headings with IDs\n if (headingsWithIds.length === 0) return null;\n\n // Find the element closest to the middle of the viewport\n var closestHeading = null;\n var closestDistance = Infinity;\n var viewportMiddle = scrollPosition + window.innerHeight / 2;\n\n // Iterate through all headings to find the closest one\n headingsWithIds.forEach(function (heading) {\n var headingTop = heading.getBoundingClientRect().top + scrollPosition;\n var distance = Math.abs(headingTop - viewportMiddle);\n if (distance < closestDistance) {\n closestDistance = distance;\n closestHeading = heading;\n }\n });\n return closestHeading;\n}\n\n// Update hash without triggering scroll or other side effects\nfunction silentlyUpdateHash(id) {\n history.replaceState(null, null, \"#\".concat(id));\n}\nfunction updateHashBasedOnHashChange() {\n window.addEventListener('hashchange', function () {\n var elementId = window.location.hash.slice(1);\n postMessageToHFSpaces(elementId);\n });\n}\nfunction postMessageToHFSpaces(elementId) {\n var parentOrigin = \"https://huggingface.co\";\n window.parent.postMessage({\n queryString: \"\".concat(queryArg, \"=\").concat(elementId)\n }, parentOrigin);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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L3NyYy9zeW5jSEZTcGFjZXNVUkxIYXNoLmpzPzY3MjciXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcXVlcnlBcmcgPSBcInNlY3Rpb25cIjtcclxuXHJcbmZ1bmN0aW9uIHN5bmNIRlNwYWNlc1VSTEhhc2goKSB7XHJcbiAgLy8gSGFuZGxlIGV4cGxpY2l0IHNlY3Rpb24gcmVxdWVzdHMgKGRvbid0IHVwZGF0ZSBoYXNoIGF1dG9tYXRpY2FsbHkgb24gbG9hZClcclxuICBjb25zdCBoYXNFeHBsaWNpdFJlcXVlc3QgPSBoYW5kbGVFeHBsaWNpdFNlY3Rpb25SZXF1ZXN0KCk7XHJcbiAgXHJcbiAgLy8gU2V0IHVwIGhhc2ggY2hhbmdlIG1vbml0b3JpbmdcclxuICB1cGRhdGVIYXNoQmFzZWRPbkhhc2hDaGFuZ2UoKTtcclxuICBcclxuICAvLyBBbHdheXMgc2V0IHVwIHNjcm9sbCBtb25pdG9yaW5nIHRvIHVwZGF0ZSBoYXNoIGR1cmluZyBzY3JvbGxpbmdcclxuICBzZXR1cFNjcm9sbE1vbml0b3JpbmcoKTtcclxuICBcclxuICAvLyBJZiBubyBleHBsaWNpdCByZXF1ZXN0LCB3ZSBkb24ndCB1cGRhdGUgdGhlIGhhc2ggb24gaW5pdGlhbCBsb2FkXHJcbiAgLy8gVGhlIGhhc2ggd2lsbCBvbmx5IHN0YXJ0IHVwZGF0aW5nIHdoZW4gdGhlIHVzZXIgc2Nyb2xsc1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVFeHBsaWNpdFNlY3Rpb25SZXF1ZXN0KCkge1xyXG4gIC8vIENoZWNrIGZvciBzZWN0aW9uIHBhcmFtZXRlciBpbiBVUkxcclxuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gIGNvbnN0IHNlY3Rpb25JZCA9IHVybFBhcmFtcy5nZXQocXVlcnlBcmcpO1xyXG4gIFxyXG4gIC8vIElmIHdlIGhhdmUgYW4gZXhwbGljaXQgc2VjdGlvbiByZXF1ZXN0XHJcbiAgaWYgKHNlY3Rpb25JZCkge1xyXG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZCk7XHJcbiAgICBpZiAodGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAvLyBTbGlnaHQgZGVsYXkgdG8gZW5zdXJlIHRoZSBicm93c2VyIGRvZXNuJ3QgdHJ5IHRvIGRvIGl0cyBvd24gc2Nyb2xsaW5nIGZpcnN0XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRhcmdldEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCBgIyR7c2VjdGlvbklkfWApO1xyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIE5vIGV4cGxpY2l0IHNlY3Rpb24gcGFyYW1ldGVyIGZvdW5kXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXR1cFNjcm9sbE1vbml0b3JpbmcoKSB7XHJcbiAgLy8gVmFyaWFibGVzIHRvIG1hbmFnZSB0aHJvdHRsaW5nXHJcbiAgbGV0IGlzU2Nyb2xsaW5nID0gZmFsc2U7XHJcbiAgbGV0IGxhc3RLbm93blNjcm9sbFBvc2l0aW9uID0gMDtcclxuICBsZXQgaW5pdGlhbFNjcm9sbCA9IHRydWU7XHJcbiAgXHJcbiAgLy8gQWRkIHRoZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXJcclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24oKSB7XHJcbiAgICBsYXN0S25vd25TY3JvbGxQb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZO1xyXG4gICAgXHJcbiAgICBpZiAoIWlzU2Nyb2xsaW5nKSB7XHJcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gU2tpcCB0aGUgZmlyc3Qgc2Nyb2xsIGV2ZW50IHdoaWNoIG1pZ2h0IGJlIGJyb3dzZXIncyBhdXRvbWF0aWMgc2Nyb2xsXHJcbiAgICAgICAgLy8gdG8gYSBoYXNoIG9uIHBhZ2UgbG9hZFxyXG4gICAgICAgIGlmIChpbml0aWFsU2Nyb2xsKSB7XHJcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHVwZGF0ZUhhc2hCYXNlZE9uU2Nyb2xsKGxhc3RLbm93blNjcm9sbFBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaXNTY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlzU2Nyb2xsaW5nID0gdHJ1ZTtcclxuICB9KTtcclxufVxyXG5cclxuLy8gRnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBVUkwgaGFzaCBiYXNlZCBvbiBzY3JvbGwgcG9zaXRpb25cclxuZnVuY3Rpb24gdXBkYXRlSGFzaEJhc2VkT25TY3JvbGwoc2Nyb2xsUG9zaXRpb24pIHtcclxuICBjb25zdCBjbG9zZXN0SGVhZGluZyA9IGZpbmRDbG9zZXN0SGVhZGluZyhzY3JvbGxQb3NpdGlvbik7XHJcbiAgXHJcbiAgLy8gVXBkYXRlIHRoZSBVUkwgaGFzaCBpZiB3ZSBmb3VuZCBhIGNsb3Nlc3QgZWxlbWVudFxyXG4gIGlmIChjbG9zZXN0SGVhZGluZyAmJiBjbG9zZXN0SGVhZGluZy5pZCkge1xyXG4gICAgLy8gT25seSB1cGRhdGUgaWYgdGhlIGhhc2ggaXMgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVjZXNzYXJ5IG9wZXJhdGlvbnNcclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCAhPT0gYCMke2Nsb3Nlc3RIZWFkaW5nLmlkfWApIHtcclxuICAgICAgc2lsZW50bHlVcGRhdGVIYXNoKGNsb3Nlc3RIZWFkaW5nLmlkKTtcclxuICAgICAgcG9zdE1lc3NhZ2VUb0hGU3BhY2VzKGNsb3Nlc3RIZWFkaW5nLmlkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8vIEZpbmQgdGhlIGNsb3Nlc3QgaGVhZGluZyB0byB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb25cclxuZnVuY3Rpb24gZmluZENsb3Nlc3RIZWFkaW5nKHNjcm9sbFBvc2l0aW9uKSB7XHJcbiAgLy8gR2V0IG9ubHkgaGVhZGluZyBlbGVtZW50cyB3aXRoIElEcyB0aGF0IHdlIHdhbnQgdG8gdHJhY2tcclxuICBjb25zdCBoZWFkaW5nc1dpdGhJZHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2gxW2lkXSwgaDJbaWRdLCBoM1tpZF0sIGg0W2lkXSwgaDVbaWRdLCBoNltpZF0nKSk7XHJcblxyXG4gIC8vIFNraXAgaWYgdGhlcmUgYXJlIG5vIGhlYWRpbmdzIHdpdGggSURzXHJcbiAgaWYgKGhlYWRpbmdzV2l0aElkcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG5cclxuICAvLyBGaW5kIHRoZSBlbGVtZW50IGNsb3Nlc3QgdG8gdGhlIG1pZGRsZSBvZiB0aGUgdmlld3BvcnRcclxuICBsZXQgY2xvc2VzdEhlYWRpbmcgPSBudWxsO1xyXG4gIGxldCBjbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcclxuICBjb25zdCB2aWV3cG9ydE1pZGRsZSA9IHNjcm9sbFBvc2l0aW9uICsgd2luZG93LmlubmVySGVpZ2h0IC8gMjtcclxuICBcclxuICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIGhlYWRpbmdzIHRvIGZpbmQgdGhlIGNsb3Nlc3Qgb25lXHJcbiAgaGVhZGluZ3NXaXRoSWRzLmZvckVhY2goaGVhZGluZyA9PiB7XHJcbiAgICBjb25zdCBoZWFkaW5nVG9wID0gaGVhZGluZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBzY3JvbGxQb3NpdGlvbjtcclxuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoaGVhZGluZ1RvcCAtIHZpZXdwb3J0TWlkZGxlKTtcclxuICAgIFxyXG4gICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7XHJcbiAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG4gICAgICBjbG9zZXN0SGVhZGluZyA9IGhlYWRpbmc7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgXHJcbiAgcmV0dXJuIGNsb3Nlc3RIZWFkaW5nO1xyXG59XHJcblxyXG4vLyBVcGRhdGUgaGFzaCB3aXRob3V0IHRyaWdnZXJpbmcgc2Nyb2xsIG9yIG90aGVyIHNpZGUgZWZmZWN0c1xyXG5mdW5jdGlvbiBzaWxlbnRseVVwZGF0ZUhhc2goaWQpIHtcclxuICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCBgIyR7aWR9YCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZUhhc2hCYXNlZE9uSGFzaENoYW5nZSgpIHtcclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsICgpID0+IHtcclxuICAgIGNvbnN0IGVsZW1lbnRJZCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpO1xyXG4gICAgcG9zdE1lc3NhZ2VUb0hGU3BhY2VzKGVsZW1lbnRJZCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvc3RNZXNzYWdlVG9IRlNwYWNlcyhlbGVtZW50SWQpIHtcclxuICBjb25zdCBwYXJlbnRPcmlnaW4gPSBcImh0dHBzOi8vaHVnZ2luZ2ZhY2UuY29cIjtcclxuICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsgcXVlcnlTdHJpbmc6IGAke3F1ZXJ5QXJnfT0ke2VsZW1lbnRJZH1gIH0sIHBhcmVudE9yaWdpbik7XHJcbn1cclxuXHJcbmV4cG9ydCB7IHN5bmNIRlNwYWNlc1VSTEhhc2ggfTtcclxuIl0sIm5hbWVzIjpbInF1ZXJ5QXJnIiwic3luY0hGU3BhY2VzVVJMSGFzaCIsImhhc0V4cGxpY2l0UmVxdWVzdCIsImhhbmRsZUV4cGxpY2l0U2VjdGlvblJlcXVlc3QiLCJ1cGRhdGVIYXNoQmFzZWRPbkhhc2hDaGFuZ2UiLCJzZXR1cFNjcm9sbE1vbml0b3JpbmciLCJ1cmxQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInNlYXJjaCIsInNlY3Rpb25JZCIsImdldCIsInRhcmdldEVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic2V0VGltZW91dCIsInNjcm9sbEludG9WaWV3IiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsImNvbmNhdCIsImlzU2Nyb2xsaW5nIiwibGFzdEtub3duU2Nyb2xsUG9zaXRpb24iLCJpbml0aWFsU2Nyb2xsIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNjcm9sbFkiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ1cGRhdGVIYXNoQmFzZWRPblNjcm9sbCIsInNjcm9sbFBvc2l0aW9uIiwiY2xvc2VzdEhlYWRpbmciLCJmaW5kQ2xvc2VzdEhlYWRpbmciLCJpZCIsImhhc2giLCJzaWxlbnRseVVwZGF0ZUhhc2giLCJwb3N0TWVzc2FnZVRvSEZTcGFjZXMiLCJoZWFkaW5nc1dpdGhJZHMiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwiY2xvc2VzdERpc3RhbmNlIiwiSW5maW5pdHkiLCJ2aWV3cG9ydE1pZGRsZSIsImlubmVySGVpZ2h0IiwiZm9yRWFjaCIsImhlYWRpbmciLCJoZWFkaW5nVG9wIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wIiwiZGlzdGFuY2UiLCJNYXRoIiwiYWJzIiwiZWxlbWVudElkIiwic2xpY2UiLCJwYXJlbnRPcmlnaW4iLCJwYXJlbnQiLCJwb3N0TWVzc2FnZSIsInF1ZXJ5U3RyaW5nIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/syncHFSpacesURLHash.js\n");
40
-
41
- /***/ })
42
-
43
- /******/ });
44
- /************************************************************************/
45
- /******/ // The module cache
46
- /******/ var __webpack_module_cache__ = {};
47
- /******/
48
- /******/ // The require function
49
- /******/ function __webpack_require__(moduleId) {
50
- /******/ // Check if module is in cache
51
- /******/ var cachedModule = __webpack_module_cache__[moduleId];
52
- /******/ if (cachedModule !== undefined) {
53
- /******/ return cachedModule.exports;
54
- /******/ }
55
- /******/ // Create a new module (and put it into the cache)
56
- /******/ var module = __webpack_module_cache__[moduleId] = {
57
- /******/ // no module.id needed
58
- /******/ // no module.loaded needed
59
- /******/ exports: {}
60
- /******/ };
61
- /******/
62
- /******/ // Execute the module function
63
- /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
64
- /******/
65
- /******/ // Return the exports of the module
66
- /******/ return module.exports;
67
- /******/ }
68
- /******/
69
- /************************************************************************/
70
- /******/ /* webpack/runtime/define property getters */
71
- /******/ (() => {
72
- /******/ // define getter functions for harmony exports
73
- /******/ __webpack_require__.d = (exports, definition) => {
74
- /******/ for(var key in definition) {
75
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
76
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
77
- /******/ }
78
- /******/ }
79
- /******/ };
80
- /******/ })();
81
- /******/
82
- /******/ /* webpack/runtime/hasOwnProperty shorthand */
83
- /******/ (() => {
84
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
85
- /******/ })();
86
- /******/
87
- /******/ /* webpack/runtime/make namespace object */
88
- /******/ (() => {
89
- /******/ // define __esModule on exports
90
- /******/ __webpack_require__.r = (exports) => {
91
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
92
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
93
- /******/ }
94
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
95
- /******/ };
96
- /******/ })();
97
- /******/
98
- /************************************************************************/
99
- /******/
100
- /******/ // startup
101
- /******/ // Load entry module and return exports
102
- /******/ // This entry module can't be inlined because the eval-source-map devtool is used.
103
- /******/ var __webpack_exports__ = __webpack_require__("./src/index.js");
104
- /******/
105
- /******/ })()
106
- ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dist/style.css DELETED
@@ -1,599 +0,0 @@
1
- /* style.css */
2
- /* Define colors */
3
- :root {
4
- --distill-gray: rgb(107, 114, 128);
5
- --distill-gray-light: rgb(185, 185, 185);
6
- --distill-gray-lighter: rgb(228, 228, 228);
7
- --distill-gray-lightest: rgb(245, 245, 245);
8
- --distill-blue: #007BFF;
9
- }
10
-
11
- /* Container for the controls */
12
- [id^="plot-"] {
13
- display: flex;
14
- flex-direction: column;
15
- align-items: center;
16
- gap: 15px; /* Adjust the gap between controls as needed */
17
- }
18
- [id^="plot-"] figure {
19
- margin-bottom: 0px;
20
- margin-top: 0px;
21
- padding: 0px;
22
- }
23
- .plotly_caption {
24
- font-style: italic;
25
- margin-top: 10px;
26
- }
27
-
28
- .plotly_controls {
29
- display: flex;
30
- flex-wrap: wrap;
31
- flex-direction: row;
32
- justify-content: center;
33
- align-items: flex-start;
34
- gap: 30px;
35
- }
36
-
37
-
38
- .plotly_input_container {
39
- display: flex;
40
- align-items: center;
41
- flex-direction: column;
42
- gap: 10px;
43
- }
44
-
45
- /* Style for the select dropdown */
46
- .plotly_input_container > select {
47
- padding: 2px 4px;
48
- /* border: 1px solid #ccc; */
49
- line-height: 1.5em;
50
- text-align: center;
51
- border-radius: 4px;
52
- font-size: 12px;
53
- background-color: var(--distill-gray-lightest);
54
- outline: none;
55
- }
56
-
57
- /* Style for the range input */
58
-
59
- .plotly_slider {
60
- display: flex;
61
- align-items: center;
62
- gap: 10px;
63
- }
64
-
65
- .plotly_slider > input[type="range"] {
66
- -webkit-appearance: none;
67
- height: 2px;
68
- background: var(--distill-gray-light);
69
- border-radius: 5px;
70
- outline: none;
71
- }
72
-
73
- .plotly_slider > span {
74
- font-size: 14px;
75
- line-height: 1.6em;
76
- min-width: 16px;
77
- }
78
-
79
- .plotly_slider > input[type="range"]::-webkit-slider-thumb {
80
- -webkit-appearance: none;
81
- appearance: none;
82
- width: 18px;
83
- height: 18px;
84
- border-radius: 50%;
85
- background: var(--distill-blue);
86
- cursor: pointer;
87
- }
88
-
89
- .plotly_slider > input[type="range"]::-moz-range-thumb {
90
- width: 18px;
91
- height: 18px;
92
- border-radius: 50%;
93
- background: var(--distill-blue);
94
- cursor: pointer;
95
- }
96
-
97
- /* Style for the labels */
98
- .plotly_input_container > label {
99
- font-size: 14px;
100
- font-weight: bold;
101
- }
102
-
103
- .main-plot-container {
104
- margin-top: 21px;
105
- margin-bottom: 35px;
106
- }
107
-
108
- .main-plot-container > figure {
109
- display: block !important;
110
- /* Let this be handled by graph-container */
111
- margin-bottom: 0px;
112
- margin-top: 0px;
113
- }
114
- .main-plot-container > div {
115
- display: none !important;
116
- }
117
-
118
-
119
- @media (min-width: 768px) {
120
- .main-plot-container > figure {
121
- display: none !important;
122
- }
123
- .main-plot-container > div {
124
- display: flex !important;
125
- }
126
- }
127
-
128
- d-byline .byline {
129
- grid-template-columns: 1fr;
130
- grid-column: text;
131
- font-size: 0.9rem;
132
- line-height: 1.8em;
133
- }
134
-
135
- @media (min-width: 768px) {
136
- d-byline .byline {
137
- grid-template-columns: 5fr 1fr 1fr;
138
- }
139
- }
140
-
141
- #title-plot {
142
- margin-top: 0px;
143
- margin-bottom: 0px;
144
- }
145
-
146
- d-contents > nav a.active {
147
- text-decoration: underline;
148
- }
149
-
150
- @media (max-width: 1199px) {
151
- d-contents {
152
- display: none;
153
- background: white;
154
- justify-self: start;
155
- align-self: start;
156
- padding-bottom: 0.5em;
157
- margin-bottom: 1em;
158
- padding-left: 0.25em;
159
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
160
- border-bottom-width: 1px;
161
- border-bottom-style: solid;
162
- border-bottom-color: rgba(0, 0, 0, 0.1);
163
- overflow-y: scroll;
164
- height: calc(100vh - 40px);
165
- scrollbar-width: none;
166
- z-index: -100;
167
- }
168
- }
169
-
170
- d-contents a:hover {
171
- border-bottom: none;
172
- }
173
-
174
- toc-title {
175
- font-weight: bold;
176
- font-size: 1.2em;
177
- color: #333;
178
- }
179
-
180
- toggle-icon {
181
- transition: transform 0.3s;
182
- }
183
-
184
- toggle-icon.collapsed {
185
- transform: rotate(90deg);
186
- }
187
-
188
- .toc-content {
189
- margin-top: 15px;
190
- overflow: hidden;
191
- /* max-height: 1000px; */
192
- transition: max-height 0.3s ease-out;
193
- }
194
-
195
- .toc-content.collapsed {
196
- max-height: 0;
197
- margin-top: 0;
198
- }
199
-
200
- @media (min-width: 1200px) {
201
- d-article {
202
- /* Ensure d-article does not prevent sticky positioning */
203
- overflow: visible;
204
- }
205
-
206
- d-contents {
207
- align-self: start;
208
- background: white;
209
- grid-column-start: 1 !important;
210
- grid-column-end: 4 !important;
211
- grid-row: auto / span 6;
212
- justify-self: end;
213
- margin-top: 0em;
214
- padding-right: 3em;
215
- padding-left: 2em;
216
- /* border-right: 1px solid rgba(0, 0, 0, 0.1);
217
- border-right-width: 1px;
218
- border-right-style: solid;
219
- border-right-color: rgba(0, 0, 0, 0.1); */
220
- position: -webkit-sticky; /* For Safari */
221
- position: sticky;
222
- top: 10px; /* Adjust this value if needed */
223
- overflow-y: auto;
224
- height: calc(100vh - 40px);
225
- scrollbar-width: none;
226
- transition: max-height 0.3s ease-out;
227
- z-index: -100;
228
- }
229
- }
230
-
231
- d-contents nav h3 {
232
- margin-top: 0;
233
- margin-bottom: 1em;
234
- }
235
-
236
- d-contents nav div div {
237
- color: rgba(0, 0, 0, 0.8);
238
- font-weight: bold;
239
- }
240
-
241
- d-contents nav a {
242
- color: rgba(0, 0, 0, 0.8);
243
- border-bottom: none;
244
- text-decoration: none;
245
- }
246
-
247
- d-contents li {
248
- list-style-type: none;
249
- }
250
-
251
- d-contents ul, d-article d-contents ul {
252
- padding-left: 1em;
253
- }
254
-
255
- d-contents nav ul li {
256
- margin-bottom: .25em;
257
- }
258
-
259
- d-contents nav a:hover {
260
- text-decoration: underline solid rgba(0, 0, 0, 0.6);
261
- }
262
-
263
- d-contents nav ul {
264
- margin-top: 0;
265
- margin-bottom: 6px;
266
- }
267
-
268
-
269
- d-contents nav > div {
270
- display: block;
271
- outline: none;
272
- margin-bottom: 0.5em;
273
- }
274
-
275
- d-contents nav > div > a {
276
- font-size: 13px;
277
- font-weight: 600;
278
- }
279
-
280
- d-article aside {
281
- margin-bottom: 1em;
282
- }
283
-
284
- d-article img {
285
- max-width: 100%;
286
- }
287
-
288
- @media (min-width: 768px) {
289
- d-article aside {
290
- margin-bottom: 0;
291
- }
292
- }
293
-
294
- d-contents nav > div > a:hover,
295
- d-contents nav > ul > li > a:hover {
296
- text-decoration: none;
297
- }
298
-
299
- .note-box {
300
- background-color: #f6f8fa;
301
- border-left: 4px solid #444444;
302
- padding: 1rem;
303
- margin: 1rem 0; /* Keep this modest margin */
304
- border-radius: 6px;
305
- /* Add this to ensure the box only takes up needed space */
306
- display: inline-block;
307
- width: 100%;
308
- }
309
-
310
- .note-box-title {
311
- margin: 0;
312
- color: #444444;
313
- font-weight: 600;
314
- font-size: 1em;
315
- }
316
-
317
- .note-box-content {
318
- margin-top: 0.5rem;
319
- margin-bottom: 0; /* Ensure no bottom margin */
320
- color: #24292f;
321
- font-size: 0.9em;
322
- line-height: 1.5em;
323
- }
324
-
325
- /* For dark mode support */
326
- @media (prefers-color-scheme: dark) {
327
- .note-box {
328
- background-color: #1c1c1c;
329
- border-left-color: #888888;
330
- }
331
- .note-box-title {
332
- color: #888888;
333
- }
334
- .note-box-content {
335
- color: #d4d4d4;
336
- }
337
- }
338
-
339
- d-article {
340
- font-size: 1.0em;
341
- }
342
-
343
- .figure-legend {
344
- font-size: 0.9em;
345
- font-style: italic;
346
- color: var(--distill-gray);
347
- line-height: 1.5em;
348
- }
349
-
350
- d-code {
351
- font-size: 12px;
352
- }
353
-
354
- .large-image-background {
355
- width: 100vw;
356
- padding-top: 10px;
357
- padding-bottom: 10px;
358
- margin-left: calc(-50vw + 50%);
359
- margin-right: calc(-50vw + 50%);
360
- background: white;
361
- height: fit-content; /* This will make it match the image height */
362
- display: flex;
363
- justify-content: center; /* This will center your image */
364
- }
365
-
366
- .large-image-background-transparent {
367
- /* width: 100vw; */
368
- padding-top: 10px;
369
- padding-bottom: 10px;
370
- /* margin-left: calc(-50vw + 50%); */
371
- margin-left:-100px;
372
- margin-right: -100px;
373
- /* margin-right: calc(-50vw + 50%); */
374
- /* background: white; */
375
- height: fit-content; /* This will make it match the image height */
376
- display: flex;
377
- justify-content: center; /* This will center your image */
378
- }
379
-
380
- .boxed-image {
381
- padding: 0.5rem;
382
- background: white;
383
- border-radius: 12px;
384
- border: 1px solid #e5e7eb;
385
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
386
- }
387
-
388
- d-article li {
389
- margin-bottom: 0.0em;
390
- }
391
-
392
- d-article ul ul {
393
- margin-bottom: 0.0em;
394
- }
395
-
396
- d-article ol ol {
397
- margin-bottom: 0.0em;
398
- }
399
-
400
- d-article hr {
401
- grid-column: text;
402
- }
403
-
404
- /* Memory visualization */
405
- #graph-all {
406
- min-width: 500px;
407
- margin-right: 10px;
408
- margin-bottom: 2rem;
409
- padding: 0.5rem;
410
- background: #f9fafb;
411
- border-radius: 12px;
412
- border: 1px solid #e5e7eb;
413
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
414
- }
415
-
416
-
417
- /* Main container styles */
418
- #controls {
419
- max-width: 1200px;
420
- /* margin: 2rem auto; */
421
- margin-bottom: 2rem;
422
- margin-left: 10px;
423
- padding: 0.6rem;
424
- background: #f9fafb;
425
- border-radius: 12px;
426
- border: 1px solid #e5e7eb;
427
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
428
- }
429
-
430
- /* Grid layout */
431
- #controls {
432
- display: grid;
433
- grid-template-columns: 1fr 1fr;
434
- /* gap: 2rem; */
435
- }
436
-
437
- /* Cell styles */
438
- .cell {
439
- margin-bottom: 0.2rem;
440
- }
441
-
442
- /* Label styles */
443
- label {
444
- display: block;
445
- /* margin-bottom: 0.5rem; */
446
- font-size: 0.8rem;
447
- font-weight: 500;
448
- color: #374151;
449
- }
450
-
451
- /* Input container for range + number combination */
452
- .input-container {
453
- display: flex;
454
- gap: 1rem;
455
- align-items: center;
456
- }
457
-
458
- /* Range input styling */
459
- input[type="range"] {
460
- flex: 1;
461
- height: 6px;
462
- background: #e5e7eb;
463
- border-radius: 3px;
464
- appearance: none;
465
- outline: none;
466
- }
467
-
468
- input[type="range"]::-webkit-slider-thumb {
469
- appearance: none;
470
- width: 16px;
471
- height: 16px;
472
- background: #3b82f6;
473
- border-radius: 50%;
474
- cursor: pointer;
475
- transition: background 0.15s ease;
476
- }
477
-
478
- input[type="range"]::-webkit-slider-thumb:hover {
479
- background: #2563eb;
480
- }
481
-
482
- /* Number input styling */
483
- input[type="number"] {
484
- width: 80px;
485
- padding: 0.5rem;
486
- border: 1px solid #e5e7eb;
487
- border-radius: 6px;
488
- font-size: 0.9rem;
489
- color: #374151;
490
- }
491
-
492
- /* Select styling */
493
- select {
494
- width: 100%;
495
- padding: 0.5rem;
496
- border: 1px solid #e5e7eb;
497
- border-radius: 6px;
498
- background: white;
499
- font-size: 0.9rem;
500
- color: #374151;
501
- cursor: pointer;
502
- }
503
-
504
- /* Checkbox styling */
505
- input[type="checkbox"] {
506
- width: 1.2rem;
507
- height: 1.2rem;
508
- margin-right: 0.5rem;
509
- border: 2px solid #e5e7eb;
510
- border-radius: 4px;
511
- cursor: pointer;
512
- }
513
-
514
- /* Column specific styles */
515
- .column-1 {
516
- padding-right: 0.5rem;
517
- }
518
-
519
- .column-2 {
520
- padding-left: 0.5rem;
521
- }
522
-
523
- /* Checkbox container */
524
- .checkbox-container {
525
- display: flex;
526
- align-items: center;
527
- margin-bottom: 1rem;
528
- }
529
-
530
- /* Memory visualization styles */
531
- .memory-block {
532
- background: #fff;
533
- border-radius: 8px;
534
- padding: 1rem;
535
- margin-bottom: 1rem;
536
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
537
- }
538
-
539
- .memory-title {
540
- font-size: 1.1rem;
541
- font-weight: 500;
542
- color: #374151;
543
- margin-bottom: 0.5rem;
544
- }
545
-
546
- .memory-value {
547
- font-size: 1.5rem;
548
- font-weight: 600;
549
- color: #3b82f6;
550
- }
551
-
552
- /* Responsive adjustments */
553
- @media (max-width: 768px) {
554
- #controls {
555
- grid-template-columns: 1fr;
556
- padding: 1rem;
557
- }
558
-
559
- .column-1, .column-2 {
560
- padding: 0;
561
- }
562
- }
563
-
564
- /* Hover states and transitions */
565
- input:hover, select:hover {
566
- border-color: #3b82f6;
567
- }
568
-
569
- input:focus, select:focus {
570
- border-color: #2563eb;
571
- outline: none;
572
- box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
573
- }
574
-
575
- /* Add smooth transitions */
576
- input, select, button {
577
- transition: all 0.15s ease;
578
- }
579
-
580
- /* Preset dropdown special styling */
581
- select[name="presets"] {
582
- background-color: #f3f4f6;
583
- font-weight: 500;
584
- }
585
-
586
- /* Memory graph enhancements */
587
- .activation-memory {
588
- background: #dbeafe;
589
- padding: 1rem;
590
- border-radius: 8px;
591
- margin-bottom: 1rem;
592
- }
593
-
594
- .gradient-memory {
595
- background: #ede9fe;
596
- padding: 1rem;
597
- border-radius: 8px;
598
- }
599
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/fragments/word-emb-hierarchy.html ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!-- The container for your D3 visualization -->
2
+ <div id="my-word-emb-vis" style="height: 500px; width: 1000px;"></div>
3
+
4
+ <!-- Include D3 (if Distill hasn't already) -->
5
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.8.5/d3.min.js"></script>
6
+
7
+ <!-- Define your visualization styles, scoping to #my-word-emb-vis -->
8
+ <style>
9
+ /* Scope all rules to the container ID to avoid conflicts */
10
+ #my-word-emb-vis .node circle {
11
+ fill: #fff;
12
+ stroke: #4682b4;
13
+ stroke-width: 2px;
14
+ transition: fill 0.3s, r 0.3s;
15
+ cursor: pointer;
16
+ }
17
+ #my-word-emb-vis .node text {
18
+ font-size: 14px;
19
+ transition: font-size 0.3s, fill 0.3s;
20
+ cursor: pointer;
21
+ pointer-events: none;
22
+ }
23
+ #my-word-emb-vis .link {
24
+ fill: none;
25
+ stroke: #ccc;
26
+ stroke-width: 2px;
27
+ transition: stroke 0.3s, stroke-width 0.3s;
28
+ }
29
+ #my-word-emb-vis .parent {
30
+ font-weight: bold;
31
+ }
32
+ #my-word-emb-vis .node-highlighted circle {
33
+ fill: #d1e7ff;
34
+ r: 8;
35
+ }
36
+ #my-word-emb-vis .node-highlighted text {
37
+ font-size: 16px;
38
+ font-weight: bold;
39
+ fill: #4682b4;
40
+ }
41
+ #my-word-emb-vis .link-highlighted {
42
+ stroke: #4682b4;
43
+ stroke-width: 3px;
44
+ }
45
+ </style>
46
+
47
+ <script type="text/javascript">
48
+ (function() {
49
+ // Data structure representing the hierarchy
50
+ const data = {
51
+ name: "Word Embedding",
52
+ children: [
53
+ {
54
+ name: "Traditional Word Embedding",
55
+ children: [
56
+ { name: "Count Vector" },
57
+ { name: "TF-IDF" },
58
+ { name: "Co-Occurrence Matrix" }
59
+ ]
60
+ },
61
+ {
62
+ name: "Static Word Embedding",
63
+ children: [
64
+ { name: "Word2Vec" },
65
+ { name: "Glove" },
66
+ { name: "Fast Text" }
67
+ ]
68
+ },
69
+ {
70
+ name: "Contextualized Word Embedding",
71
+ children: [
72
+ { name: "ELMo" },
73
+ { name: "GPT & GPT 2" },
74
+ { name: "BERT" }
75
+ ]
76
+ }
77
+ ]
78
+ };
79
+
80
+ // Dimensions
81
+ const margin = { top: 10, right: 10, bottom: 10, left: 10 };
82
+
83
+ // Create tree layout
84
+ const treeLayout = d3.tree()
85
+ .size([height - margin.top - margin.bottom, width - margin.right - margin.left]);
86
+
87
+ // Convert data to hierarchy
88
+ const root = d3.hierarchy(data);
89
+ treeLayout(root);
90
+
91
+ // Create the SVG inside our container
92
+ const svg = d3.select("#my-word-emb-vis")
93
+ .append("svg")
94
+ .attr("width", width)
95
+ .attr("height", height)
96
+ .append("g")
97
+ .attr("transform", `translate(${margin.left},${margin.top})`);
98
+
99
+ // Create links
100
+ svg.selectAll(".link")
101
+ .data(root.links())
102
+ .enter()
103
+ .append("path")
104
+ .attr("class", "link")
105
+ .attr("d", d3.linkHorizontal()
106
+ .x(d => d.y)
107
+ .y(d => d.x)
108
+ );
109
+
110
+ // Create nodes
111
+ const node = svg.selectAll(".node")
112
+ .data(root.descendants())
113
+ .enter()
114
+ .append("g")
115
+ .attr("class", "node")
116
+ .attr("transform", d => `translate(${d.y},${d.x})`)
117
+ .attr("id", d => `node-${d.data.name.replace(/\s+/g, '-').replace(/[&]/g, 'and').toLowerCase()}`)
118
+ .on("mouseover", function(event, d) {
119
+ // Highlight the current node
120
+ d3.select(this).classed("node-highlighted", true);
121
+
122
+ // Highlight all parent links and nodes
123
+ let ancestor = d;
124
+ while (ancestor.parent) {
125
+ const linkIndex = root.links().findIndex(link =>
126
+ link.source === ancestor.parent && link.target === ancestor
127
+ );
128
+ if (linkIndex !== -1) {
129
+ d3.selectAll(".link").each(function(linkData, i) {
130
+ if (i === linkIndex) {
131
+ d3.select(this).classed("link-highlighted", true);
132
+ }
133
+ });
134
+ }
135
+ d3.select(`#node-${ancestor.parent.data.name.replace(/\s+/g, '-').replace(/[&]/g, 'and').toLowerCase()}`)
136
+ .classed("node-highlighted", true);
137
+
138
+ ancestor = ancestor.parent;
139
+ }
140
+ })
141
+ .on("mouseout", function() {
142
+ // Remove all highlights
143
+ d3.selectAll(".node").classed("node-highlighted", false);
144
+ d3.selectAll(".link").classed("link-highlighted", false);
145
+ });
146
+
147
+ // Add circles to nodes
148
+ node.append("circle")
149
+ .attr("r", 6);
150
+
151
+ // Add text labels
152
+ node.append("text")
153
+ .attr("dy", ".35em")
154
+ .attr("x", d => {
155
+ if (d.depth === 0) return -15;
156
+ else if (d.depth === 1) return -15;
157
+ else return 15;
158
+ })
159
+ .attr("text-anchor", d => {
160
+ if (d.depth === 0) return "end";
161
+ else if (d.depth === 1) return "end";
162
+ else return "start";
163
+ })
164
+ .attr("class", d => d.depth <= 1 ? "parent" : "")
165
+ .text(d => d.data.name);
166
+ })();
167
+ </script>
src/index.html CHANGED
@@ -44,7 +44,6 @@
44
  <p style="text-align: cekter; font-style: italic; margin-top: 10px; max-width: 900px; margin-left: auto; margin-right: auto;">
45
  The embedding atlas of 50 random words and their closest tokens in the embedding space of `deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B`.
46
  </p>
47
-
48
  </div>
49
  </d-title>
50
  <d-byline></d-byline>
@@ -52,7 +51,19 @@
52
  <d-contents>
53
  </d-contents>
54
 
55
- <p>Welcome to the Distill Blog Template! This framework is based on the <a href="https://distill.pub/">distill.pub</a> design and has been adapted to make it easy for you to create beautiful, interactive technical blogs. Whether you're writing about machine learning, data science, physics, or any technical topic, this template provides the structure and components you need.</p>
 
 
 
 
 
 
 
 
 
 
 
 
56
 
57
  <aside>Reading time: 10-15 minutes.</aside>
58
 
 
44
  <p style="text-align: cekter; font-style: italic; margin-top: 10px; max-width: 900px; margin-left: auto; margin-right: auto;">
45
  The embedding atlas of 50 random words and their closest tokens in the embedding space of `deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B`.
46
  </p>
 
47
  </div>
48
  </d-title>
49
  <d-byline></d-byline>
 
51
  <d-contents>
52
  </d-contents>
53
 
54
+ <p>Large Language Models (LLM) evolve faster than you can blink. The methods you study today will be out the window in a few months.
55
+ But one aspect about LLMs that remains almost unchanged from the early days is the use of embeddings. Embeddings are the semantic backbone of LLMs,
56
+ the gate at which raw text is transformed into vectors of numbers that are understandable by the model. When you ask ChatGPT about the most important
57
+ life decisions, your words and tokens are transformed into a high-dimensional vector space where semantic relationships become mathematical relationships.
58
+ </p>
59
+
60
+ <figure class="fullscreen">
61
+ <div id="image-as-graph" style="display: grid; position: relative; justify-content: center;">
62
+ {{{fragment-word-emb-hierarchy}}}
63
+ </div>
64
+ <figcaption>embedding hierarchy</figcaption>
65
+ </figure>
66
+
67
 
68
  <aside>Reading time: 10-15 minutes.</aside>
69