optimize: introduce vCell, render time while scrolling.

This commit is contained in:
Chen Lily 2024-03-04 11:18:08 +08:00
parent 20a8fbae02
commit a28b56b191
3 changed files with 163 additions and 97 deletions

View File

@ -67,7 +67,13 @@ let r = lang;
/** /**
* 键值字典 * 键值字典
* @template T * @template T
* @typedef {Map<string, T>} KeyMap * @typedef {{[key: string]: T}} KeyMap
*/
/**
* 索引字典
* @template T
* @typedef {Map<number, T>} IndexMap
*/ */
/** /**
@ -468,6 +474,24 @@ const GridColumnDirection = {
* @this Grid * @this Grid
*/ */
/**
* @typedef GridVirtualRow
* @property {boolean} editing - 行处于编辑状态
* @property {IndexMap<GridVirtualCell>} cells - 虚拟单元格数组
* @private
*/
/**
* @typedef GridVirtualCell
* @property {string} background - 单元格背景色
* @property {string} value - 单元格值
* @property {string} tooltip - 单元格提示文本
* @property {boolean} enabled - 单元格是否可用
* @property {string} style - 单元格样式字符串
* @property {string} attrs - 单元格附加属性字符串
* @private
*/
/** /**
* @typedef GridColumnAttr * @typedef GridColumnAttr
* @property {boolean} dragging - 列正在拖拽 * @property {boolean} dragging - 列正在拖拽
@ -630,6 +654,12 @@ export class Grid {
* @private * @private
*/ */
rowCount: -1, rowCount: -1,
/**
* 虚拟单元格字典
* @type {IndexMap<GridVirtualRow>}
* @private
*/
virtualRows: {},
/** /**
* 列类型缓存字典 * 列类型缓存字典
* @type {KeyMap<GridColumn>} * @type {KeyMap<GridColumn>}
@ -2401,6 +2431,8 @@ export class Grid {
const readonly = this.readonly; const readonly = this.readonly;
for (let i = 0; i < count; ++i) { for (let i = 0; i < count; ++i) {
const row = createElement('tr', 'ui-grid-row'); const row = createElement('tr', 'ui-grid-row');
const virtualRow = { cells: {} };
this._var.virtualRows[exists + i] = virtualRow;
let left = this.expandable ? ExpandableWidth : 0; let left = this.expandable ? ExpandableWidth : 0;
if (this.expandable) { if (this.expandable) {
const icon = createIcon('fa-solid', 'caret-right'); const icon = createIcon('fa-solid', 'caret-right');
@ -2418,6 +2450,7 @@ export class Grid {
} }
cols.forEach((col, j) => { cols.forEach((col, j) => {
const cell = createElement('td', 'ui-grid-cell'); const cell = createElement('td', 'ui-grid-cell');
virtualRow.cells[j] = {};
if (col.visible !== false) { if (col.visible !== false) {
let style = this._get(col.key, 'style') ?? {}; let style = this._get(col.key, 'style') ?? {};
if (col.isfixed) { if (col.isfixed) {
@ -2434,8 +2467,9 @@ export class Grid {
if (style !== '') { if (style !== '') {
cell.style.cssText = style; cell.style.cssText = style;
} }
let element;
if (!readonly && GridColumnTypeEnum.isCheckbox(col.type)) { if (!readonly && GridColumnTypeEnum.isCheckbox(col.type)) {
cell.appendChild(GridCheckboxColumn.createEdit(e => this._onRowChanged(e, exists + i, col, e.target.checked, cell))); element = GridCheckboxColumn.createEdit(e => this._onRowChanged(e, exists + i, col, e.target.checked, cell));
// this._var.colTypes[col.key] = GridCheckboxColumn; // this._var.colTypes[col.key] = GridCheckboxColumn;
} else { } else {
let type = this._var.colTypes[col.key]; let type = this._var.colTypes[col.key];
@ -2448,11 +2482,19 @@ export class Grid {
type ??= GridColumn; type ??= GridColumn;
this._var.colTypes[col.key] = type; this._var.colTypes[col.key] = type;
} }
const element = type.create(col, i, this); element = type.create(col, i, this);
if (typeof col.class === 'string') { if (typeof col.class === 'string') {
type.setClass(element, col.class); type.setClass(element, col.class);
} }
}
cell.appendChild(element); cell.appendChild(element);
if (col.events != null) {
for (let ev of Object.entries(col.events)) {
element[ev[0]] = e => {
const item = this._var.currentSource[this._var.startIndex + exists + i].values;
ev[1].call(item, e);
};
}
} }
} else { } else {
cell.style.display = 'none'; cell.style.display = 'none';
@ -2481,17 +2523,17 @@ export class Grid {
_fillRows(rows, cols, widths) { _fillRows(rows, cols, widths) {
const startIndex = this._var.startIndex; const startIndex = this._var.startIndex;
const selectedIndexes = this._var.selectedIndexes; const selectedIndexes = this._var.selectedIndexes;
const stateChanged = // const stateChanged =
this._var.oldIndex !== startIndex || // this._var.oldIndex !== startIndex ||
selectedIndexes == null || // selectedIndexes == null ||
this._var.oldSelectedIndexes?.length !== selectedIndexes.length || // this._var.oldSelectedIndexes?.length !== selectedIndexes.length ||
this._var.oldSelectedIndexes.find((s, i) => s !== selectedIndexes[i]) != null; // this._var.oldSelectedIndexes.find((s, i) => s !== selectedIndexes[i]) != null;
if (stateChanged) { // if (stateChanged) {
this._var.oldIndex = startIndex; // this._var.oldIndex = startIndex;
if (selectedIndexes != null) { // if (selectedIndexes != null) {
this._var.oldSelectedIndexes = selectedIndexes.slice(); // this._var.oldSelectedIndexes = selectedIndexes.slice();
} // }
} // }
const offset = this.expandable ? 1 : 0; const offset = this.expandable ? 1 : 0;
const readonly = this.readonly; const readonly = this.readonly;
rows.forEach((row, i) => { rows.forEach((row, i) => {
@ -2502,6 +2544,7 @@ export class Grid {
if (!isPositive(row.children.length)) { if (!isPositive(row.children.length)) {
return; return;
} }
const virtualRow = this._var.virtualRows[i];
const item = vals.values; const item = vals.values;
const selected = selectedIndexes.includes(startIndex + i); const selected = selectedIndexes.includes(startIndex + i);
if (selected) { if (selected) {
@ -2509,6 +2552,8 @@ export class Grid {
} else if (row.classList.contains('selected')) { } else if (row.classList.contains('selected')) {
row.classList.remove('selected'); row.classList.remove('selected');
} }
const stateChanged = virtualRow.editing !== selected;
virtualRow.editing = selected;
// data // data
if (this.expandable) { if (this.expandable) {
const expanded = vals.__expanded; const expanded = vals.__expanded;
@ -2566,6 +2611,12 @@ export class Grid {
if (cell == null) { if (cell == null) {
return; return;
} }
let virtualCell;
if (stateChanged) {
virtualRow.cells[j] = virtualCell = {};
} else {
virtualCell = virtualRow.cells[j];
}
let val; let val;
if (col.text != null) { if (col.text != null) {
val = col.text; val = col.text;
@ -2586,10 +2637,13 @@ export class Grid {
if (typeof bg === 'function') { if (typeof bg === 'function') {
bg = col.background(item); bg = col.background(item);
} }
cell.style.backgroundColor = bg ?? '';
} else if (typeof col.bgFilter === 'function') { } else if (typeof col.bgFilter === 'function') {
const bgColor = col.bgFilter(item); bg = col.bgFilter(item);
cell.style.backgroundColor = bgColor ?? ''; }
bg ??= '';
if (bg !== virtualCell.background) {
virtualCell.background = bg;
cell.style.backgroundColor = bg;
} }
const isCheckbox = GridColumnTypeEnum.isCheckbox(col.type); const isCheckbox = GridColumnTypeEnum.isCheckbox(col.type);
const type = isCheckbox ? GridCheckboxColumn : this._var.colTypes[col.key] ?? GridColumn; const type = isCheckbox ? GridCheckboxColumn : this._var.colTypes[col.key] ?? GridColumn;
@ -2624,12 +2678,22 @@ export class Grid {
type.setClass(element, col.class); type.setClass(element, col.class);
} }
cell.replaceChildren(element); cell.replaceChildren(element);
if (col.events != null) {
for (let ev of Object.entries(col.events)) {
element[ev[0]] = ev[1].bind(item);
}
}
} else { } else {
element = cell.children[0]; element = cell.children[0];
} }
} else { } else {
element = cell.children[0]; element = cell.children[0];
} }
if (val !== virtualCell.value) {
virtualCell.value = val;
type.setValue(element, val, vals, col, this);
}
if (typeof type.setEnabled === 'function') {
let enabled; let enabled;
if (readonly) { if (readonly) {
enabled = false; enabled = false;
@ -2641,18 +2705,22 @@ export class Grid {
enabled = item[enabled]; enabled = item[enabled];
} }
} }
type.setValue(element, val, vals, col, this); if (enabled !== virtualCell.enabled) {
virtualCell.enabled = enabled;
type.setEnabled(element, enabled);
}
}
let tip = col.tooltip; let tip = col.tooltip;
if (typeof tip === 'function') { if (typeof tip === 'function') {
tip = tip.call(col, item); tip = tip.call(col, item);
} }
if (tip !== virtualCell.tooltip) {
virtualCell.tooltip = tip;
if (nullOrEmpty(tip)) { if (nullOrEmpty(tip)) {
element.querySelector('.ui-tooltip-wrapper')?.remove(); element.querySelector('.ui-tooltip-wrapper')?.remove();
} else { } else {
setTooltip(element, tip, false, this.element); setTooltip(element, tip, false, this.element);
} }
if (typeof type.setEnabled === 'function') {
type.setEnabled(element, enabled);
} }
// auto resize // auto resize
if (this._var.needResize && widths != null && this._get(col.key, 'autoResize')) { if (this._var.needResize && widths != null && this._get(col.key, 'autoResize')) {
@ -2667,33 +2735,31 @@ export class Grid {
if (typeof style === 'function') { if (typeof style === 'function') {
style = col.style(item); style = col.style(item);
} }
if (style != null) {
type.setStyle(element, style);
} else {
element.style.cssText = '';
}
} else if (typeof col.styleFilter === 'function') { } else if (typeof col.styleFilter === 'function') {
const style = col.styleFilter(item); style = col.styleFilter(item);
}
const styleText = style != null ? convertCssStyle(style) : '';
if (styleText !== virtualCell.style) {
virtualCell.style = styleText;
if (style != null) { if (style != null) {
type.setStyle(element, style); type.setStyle(element, style);
} else { } else {
element.style.cssText = ''; element.style.cssText = '';
} }
} }
if (col.events != null) {
for (let ev of Object.entries(col.events)) {
element[ev[0]] = ev[1].bind(item);
}
}
if (col.attrs != null) { if (col.attrs != null) {
let attrs = col.attrs; let attrs = col.attrs;
if (typeof attrs === 'function') { if (typeof attrs === 'function') {
attrs = attrs(item); attrs = attrs(item);
} }
const attrsText = convertCssStyle(attrs);
if (attrsText !== virtualCell.attrs) {
virtualCell.attrs = attrsText;
for (let attr of Object.entries(attrs)) { for (let attr of Object.entries(attrs)) {
element.setAttribute(attr[0], attr[1]); element.setAttribute(attr[0], attr[1]);
} }
} }
}
}); });
if (vals.__editing != null) { if (vals.__editing != null) {
delete vals.__editing; delete vals.__editing;

92
package-lock.json generated
View File

@ -13,16 +13,16 @@
"docdash": "^2.0.2", "docdash": "^2.0.2",
"jsdoc": "^4.0.2", "jsdoc": "^4.0.2",
"postcss-preset-env": "^9.4.0", "postcss-preset-env": "^9.4.0",
"sass": "^1.71.0", "sass": "^1.71.1",
"typedoc": "^0.25.8", "typedoc": "^0.25.10",
"vite": "^5.1.3", "vite": "^5.1.4",
"vite-plugin-externals": "^0.6.2" "vite-plugin-externals": "^0.6.2"
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.23.9", "version": "7.24.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
"integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
"dev": true, "dev": true,
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
@ -352,9 +352,9 @@
} }
}, },
"node_modules/@csstools/postcss-gradients-interpolation-method": { "node_modules/@csstools/postcss-gradients-interpolation-method": {
"version": "4.0.10", "version": "4.0.11",
"resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.10.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.11.tgz",
"integrity": "sha512-PwKOxVuX8lo52bPtPeKjaIp6oH2EzhcBxCndRcvGZKsqZYQ35k9A5G4yihZ+wp7PoxPqDNiXuhQsvQG2lqMpOA==", "integrity": "sha512-LFom5jCVUfzF+iuiOZvhvX7RRN8vc+tKpcKo9s4keEBAU2mPwV5/Fgz5iylEfXP/DZbEdq2C0At20urMi/lupw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1358,14 +1358,14 @@
} }
}, },
"node_modules/@jridgewell/gen-mapping": { "node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3", "version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@jridgewell/set-array": "^1.0.1", "@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9" "@jridgewell/trace-mapping": "^0.3.24"
}, },
"engines": { "engines": {
"node": ">=6.0.0" "node": ">=6.0.0"
@ -1381,9 +1381,9 @@
} }
}, },
"node_modules/@jridgewell/set-array": { "node_modules/@jridgewell/set-array": {
"version": "1.1.2", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=6.0.0" "node": ">=6.0.0"
@ -1406,9 +1406,9 @@
"dev": true "dev": true
}, },
"node_modules/@jridgewell/trace-mapping": { "node_modules/@jridgewell/trace-mapping": {
"version": "0.3.22", "version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/resolve-uri": "^3.1.0",
@ -1674,9 +1674,9 @@
"dev": true "dev": true
}, },
"node_modules/autoprefixer": { "node_modules/autoprefixer": {
"version": "10.4.17", "version": "10.4.18",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz",
"integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1693,8 +1693,8 @@
} }
], ],
"dependencies": { "dependencies": {
"browserslist": "^4.22.2", "browserslist": "^4.23.0",
"caniuse-lite": "^1.0.30001578", "caniuse-lite": "^1.0.30001591",
"fraction.js": "^4.3.7", "fraction.js": "^4.3.7",
"normalize-range": "^0.1.2", "normalize-range": "^0.1.2",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
@ -1801,9 +1801,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001588", "version": "1.0.30001593",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001593.tgz",
"integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", "integrity": "sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1969,9 +1969,9 @@
} }
}, },
"node_modules/cssdb": { "node_modules/cssdb": {
"version": "7.11.0", "version": "7.11.1",
"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.0.tgz", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.1.tgz",
"integrity": "sha512-YUVAJhjDcTZzVD5XE49l3PQtGE29vvhzaL1bM3BtkvSmIRJeYENdfn1dn5jauBI7BBF+IyyiBS+oSVx3Hz/Gaw==", "integrity": "sha512-F0nEoX/Rv8ENTHsjMPGHd9opdjGfXkgRBafSUGnQKPzGZFB7Lm0BbT10x21TMOCrKLbVsJ0NoCDMk6AfKqw8/A==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2016,9 +2016,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.677", "version": "1.4.690",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz",
"integrity": "sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q==", "integrity": "sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==",
"dev": true "dev": true
}, },
"node_modules/entities": { "node_modules/entities": {
@ -2966,9 +2966,9 @@
} }
}, },
"node_modules/postcss-nesting": { "node_modules/postcss-nesting": {
"version": "12.0.3", "version": "12.0.4",
"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.3.tgz", "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.4.tgz",
"integrity": "sha512-yrtMRPFNkfZMv9ikBvZ/Eh3RxhpMBKQ3KzD7LCY8+jYVlgju/Mdcxi4JY8bW2Y7ISXw8GTLuF/o+kFtp+yaVfQ==", "integrity": "sha512-WuCe0KnP4vKjLZK8VNoUWKL8ZLOv/5jiM94mHcI3VszLropHwmjotdUyP/ObzqZpXuQKP2Jf9R12vIHKFSStKw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -3398,9 +3398,9 @@
} }
}, },
"node_modules/terser": { "node_modules/terser": {
"version": "5.27.2", "version": "5.28.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz", "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz",
"integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==", "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@jridgewell/source-map": "^0.3.3", "@jridgewell/source-map": "^0.3.3",
@ -3440,9 +3440,9 @@
"dev": true "dev": true
}, },
"node_modules/typedoc": { "node_modules/typedoc": {
"version": "0.25.8", "version": "0.25.10",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.8.tgz", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.10.tgz",
"integrity": "sha512-mh8oLW66nwmeB9uTa0Bdcjfis+48bAjSH3uqdzSuSawfduROQLlXw//WSNZLYDdhmMVB7YcYZicq6e8T0d271A==", "integrity": "sha512-v10rtOFojrjW9og3T+6wAKeJaGMuojU87DXGZ33sfs+554wgPTRG+s07Ag1BjPZI85Y5QPVouPI63JQ6fcQM5w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"lunr": "^2.3.9", "lunr": "^2.3.9",
@ -3532,9 +3532,9 @@
"dev": true "dev": true
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.1.3", "version": "5.1.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.3.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz",
"integrity": "sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==", "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"esbuild": "^0.19.3", "esbuild": "^0.19.3",

View File

@ -33,9 +33,9 @@
"docdash": "^2.0.2", "docdash": "^2.0.2",
"jsdoc": "^4.0.2", "jsdoc": "^4.0.2",
"postcss-preset-env": "^9.4.0", "postcss-preset-env": "^9.4.0",
"sass": "^1.71.0", "sass": "^1.71.1",
"typedoc": "^0.25.8", "typedoc": "^0.25.10",
"vite": "^5.1.3", "vite": "^5.1.4",
"vite-plugin-externals": "^0.6.2" "vite-plugin-externals": "^0.6.2"
} }
} }