feature: tiered sort

This commit is contained in:
Chen Lily 2024-05-22 09:27:22 +08:00
parent a946012a33
commit 190e43c814
14 changed files with 254 additions and 147 deletions

View File

@ -11,7 +11,8 @@ import { GridColumn, GridInputColumn, GridDropdownColumn, GridCheckboxColumn, Gr
import { Popup, createPopup, showAlert, showConfirm } from "./ui/popup"; import { Popup, createPopup, showAlert, showConfirm } from "./ui/popup";
import { createPicture, createAudio, createVideo, createFile, createVideoList } from './ui/media'; import { createPicture, createAudio, createVideo, createFile, createVideoList } from './ui/media';
import { validation, convertCssStyle } from './ui/extension'; import { validation, convertCssStyle } from './ui/extension';
import { createDateInput, toDateValue, formatDate, setDateValue, getDateValue, DateSelector } from './ui/date'; import { createDateInput, toDateValue, getFormatter, formatDate, setDateValue, getDateValue, DateSelector } from './ui/date';
import * as utility from './utility';
export { export {
createElement, createElement,
@ -47,6 +48,7 @@ export {
// dateSelector // dateSelector
createDateInput, createDateInput,
toDateValue, toDateValue,
getFormatter,
formatDate, formatDate,
setDateValue, setDateValue,
getDateValue, getDateValue,
@ -59,5 +61,7 @@ export {
createVideoList, createVideoList,
// extension // extension
validation, validation,
convertCssStyle convertCssStyle,
// utility
utility
} }

View File

@ -50,12 +50,12 @@ export function toDateValue(dt, local) {
} }
/** /**
* @private * 获取日期格式器
* @param {Date} date * @param {Date} date - 待格式的日期
* @param {boolean} [utc=true] * @param {boolean} [utc=true] - 是否按 UTC 时间格式化
* @returns {string} * @returns {any} 返回格式化工具对象
*/ */
function getFormatter(date, utc) { export function getFormatter(date, utc) {
const prefix = utc !== false ? 'getUTC' : 'get'; const prefix = utc !== false ? 'getUTC' : 'get';
const r = { const r = {
/** /**

View File

@ -1,4 +1,3 @@
// import { r, global, contains, isPositive, nullOrEmpty } from "../utility";
import './css/dropdown.scss'; import './css/dropdown.scss';
import { r } from "../utility/lgres"; import { r } from "../utility/lgres";
import { contains, nullOrEmpty } from "../utility/strings"; import { contains, nullOrEmpty } from "../utility/strings";
@ -205,6 +204,7 @@ export class Dropdown {
if (options.input) { if (options.input) {
label = createElement('input', 'ui-drop-text'); label = createElement('input', 'ui-drop-text');
label.type = 'text'; label.type = 'text';
label.autocomplete = 'off';
label.draggable = false; label.draggable = false;
options.placeholder && label.setAttribute('placeholder', options.placeholder); options.placeholder && label.setAttribute('placeholder', options.placeholder);
isPositive(options.maxLength) && label.setAttribute('maxlength', options.maxLength); isPositive(options.maxLength) && label.setAttribute('maxlength', options.maxLength);

View File

@ -1,19 +1,19 @@
import '../css/grid.scss'; import '../css/grid.scss';
import { global, isPositive, isMobile, throttle, truncate, debounce } from "../../utility"; import { global, isPositive, isMobile, throttle, debounce, truncate } from "../../utility";
import { r as lang } from "../../utility/lgres"; import { r as lang } from "../../utility/lgres";
import { nullOrEmpty } from "../../utility/strings"; import { nullOrEmpty } from "../../utility/strings";
import { createElement } from "../../functions"; import { createElement } from "../../functions";
import { createIcon } from "../icon"; import { createIcon } from "../icon";
import { createCheckbox } from "../checkbox"; import { createCheckbox } from "../checkbox";
import { setTooltip } from "../tooltip"; import { setTooltip } from "../tooltip";
import { Popup, showAlert } from "../popup"; import { Popup, showAlert, showConfirm } from "../popup";
import { convertCssStyle } from "../extension"; import { convertCssStyle } from "../extension";
import { GridColumn, GridInputColumn, GridTextColumn, GridDropdownColumn, GridCheckboxColumn, GridRadioboxColumn, GridIconColumn, GridDateColumn } from "./column"; import { GridColumn, GridInputColumn, GridTextColumn, GridDropdownColumn, GridCheckboxColumn, GridRadioboxColumn, GridIconColumn, GridDateColumn } from "./column";
/** /**
* @author Tsanie Lily <tsorgy@gmail.com> * @author Tsanie Lily <tsorgy@gmail.com>
* @license MIT * @license MIT
* @version 1.0.2 * @version 1.0.3
*/ */
const ScriptPath = (self.document == null ? self.location.href : self.document.currentScript?.src ?? '').replace(/ui\.min\.js\?.+$/, ''); const ScriptPath = (self.document == null ? self.location.href : self.document.currentScript?.src ?? '').replace(/ui\.min\.js\?.+$/, '');
@ -258,6 +258,7 @@ let r = lang;
* @property {(ValueItem[] | GridColumnFilterSourceCallback)} [filterSource] - 自定义列过滤器的数据源支持调用函数返回数据源 * @property {(ValueItem[] | GridColumnFilterSourceCallback)} [filterSource] - 自定义列过滤器的数据源支持调用函数返回数据源
* @property {boolean} [filterAsValue=false] - 列头过滤强制使用 `Value` 字段 * @property {boolean} [filterAsValue=false] - 列头过滤强制使用 `Value` 字段
* @property {GridItemSortCallback} [sortFilter] - 自定义列排序函数 * @property {GridItemSortCallback} [sortFilter] - 自定义列排序函数
* @property {boolean} [sortAsText=false] - 按照 `DisplayValue` 排序
* @property {DropdownOptions} [dropOptions] - 列为下拉列表类型时以该值设置下拉框的参数 * @property {DropdownOptions} [dropOptions] - 列为下拉列表类型时以该值设置下拉框的参数
* @property {boolean} [dropRestrictCase=false] - 下拉列表是否区分大小写 * @property {boolean} [dropRestrictCase=false] - 下拉列表是否区分大小写
* @property {(GridSourceItem[] | Promise<GridSourceItem[]> | GridDropdownSourceCallback)} [source] - 列为下拉列表类型时以该值设置下拉列表数据源支持返回异步对象也支持调用函数返回 * @property {(GridSourceItem[] | Promise<GridSourceItem[]> | GridDropdownSourceCallback)} [source] - 列为下拉列表类型时以该值设置下拉列表数据源支持返回异步对象也支持调用函数返回
@ -450,6 +451,7 @@ const GridColumnDirection = {
* @typedef GridLanguages * @typedef GridLanguages
* @property {string} [all] - ( All ) * @property {string} [all] - ( All )
* @property {string} [ok] - OK * @property {string} [ok] - OK
* @property {string} [yes] - Yes
* @property {string} [reset] - Reset * @property {string} [reset] - Reset
* @property {string} [cancel] - Cancel * @property {string} [cancel] - Cancel
* @property {string} [null] - ( Null ) * @property {string} [null] - ( Null )
@ -464,6 +466,7 @@ const GridColumnDirection = {
* @property {string} [column] - Column * @property {string} [column] - Column
* @property {string} [order] - Order * @property {string} [order] - Order
* @property {string} [sort] - Sort * @property {string} [sort] - Sort
* @property {string} [sortArrayExists] - This will remove the current tiered sort. Do you wish to continue?
* @property {string} [requirePrompt] - All sort criteria must have a column specified. Check the selected sort criteria and try again. * @property {string} [requirePrompt] - All sort criteria must have a column specified. Check the selected sort criteria and try again.
* @property {string} [duplicatePrompt] - {column} is being sorted more than once. Delete the duplicate sort criteria and try again. * @property {string} [duplicatePrompt] - {column} is being sorted more than once. Delete the duplicate sort criteria and try again.
* @interface * @interface
@ -1348,6 +1351,7 @@ export class Grid {
this.langs = { this.langs = {
all: r('allItem', '( All )'), all: r('allItem', '( All )'),
ok: r('ok', 'OK'), ok: r('ok', 'OK'),
yes: r('yes', 'Yes'),
reset: r('reset', 'Reset'), reset: r('reset', 'Reset'),
cancel: r('cancel', 'Cancel'), cancel: r('cancel', 'Cancel'),
null: r('null', '( Null )'), null: r('null', '( Null )'),
@ -1362,6 +1366,7 @@ export class Grid {
column: r('column', 'Column'), column: r('column', 'Column'),
order: r('order', 'Order'), order: r('order', 'Order'),
sort: r('sort', 'Sort'), sort: r('sort', 'Sort'),
sortArrayExists: r('sortArrayExists', 'This will remove the current tiered sort. Do you wish to continue?'),
requirePrompt: r('requirePrompt', 'All sort criteria must have a column specified. Check the selected sort criteria and try again.'), requirePrompt: r('requirePrompt', 'All sort criteria must have a column specified. Check the selected sort criteria and try again.'),
duplicatePrompt: r('duplicatePrompt', '{column} is being sorted more than once. Delete the duplicate sort criteria and try again.') duplicatePrompt: r('duplicatePrompt', '{column} is being sorted more than once. Delete the duplicate sort criteria and try again.')
}; };
@ -1405,10 +1410,9 @@ export class Grid {
if (e.target === this._var.el) { if (e.target === this._var.el) {
// cancel selections // cancel selections
const selectedIndexes = this._var.selectedIndexes; const selectedIndexes = this._var.selectedIndexes;
if (selectedIndexes == null || selectedIndexes.length === 0) { if (selectedIndexes?.length > 0) {
return;
}
selectedIndexes.splice(0); selectedIndexes.splice(0);
}
if (this.readonly) { if (this.readonly) {
this._tableRows.forEach(row => { this._tableRows.forEach(row => {
row.classList.remove('selected'); row.classList.remove('selected');
@ -1426,6 +1430,10 @@ export class Grid {
if (parent == null) { if (parent == null) {
return; return;
} }
if (this._getParentElement(parent) !== this._var.el) {
// sub ui-grid
return;
}
const rowIndex = parent.classList.contains('ui-grid-total-row') ? -1 : this._tableRows.indexOf(parent); const rowIndex = parent.classList.contains('ui-grid-total-row') ? -1 : this._tableRows.indexOf(parent);
let colIndex = indexOfParent(target) - (this.expandable ? 1 : 0); let colIndex = indexOfParent(target) - (this.expandable ? 1 : 0);
if (colIndex >= this.columns.length) { if (colIndex >= this.columns.length) {
@ -1799,11 +1807,9 @@ export class Grid {
grid.onRowChanged(); grid.onRowChanged();
} }
buttonWrapper.append( buttonWrapper.append(
createElement('span', 'button', createElement('span', button => {
createIcon('fa-light', 'plus'), button.className = 'button';
createElement('span', span => { button.addEventListener('click', () => {
span.innerText = this.langs.addLevel;
span.addEventListener('click', () => {
let index = grid.selectedIndex; let index = grid.selectedIndex;
const n = { column: '', order: 'asc' }; const n = { column: '', order: 'asc' };
if (index >= 0) { if (index >= 0) {
@ -1815,13 +1821,15 @@ export class Grid {
} }
reload(index); reload(index);
}); });
},
createIcon('fa-light', 'plus'),
createElement('span', span => {
span.innerText = this.langs.addLevel;
}) })
), ),
createElement('span', 'button ui-button-delete', createElement('span', button => {
createIcon('fa-light', 'times'), button.className = 'button ui-button-delete';
createElement('span', span => { button.addEventListener('click', () => {
span.innerText = this.langs.deleteLevel;
span.addEventListener('click', () => {
let index = grid.selectedIndex; let index = grid.selectedIndex;
if (index < 0) { if (index < 0) {
return; return;
@ -1833,13 +1841,15 @@ export class Grid {
} }
reload(index); reload(index);
}); });
},
createIcon('fa-light', 'times'),
createElement('span', span => {
span.innerText = this.langs.deleteLevel;
}) })
), ),
createElement('span', 'button ui-button-copy', createElement('span', button => {
createIcon('fa-light', 'copy'), button.className = 'button ui-button-copy';
createElement('span', span => { button.addEventListener('click', () => {
span.innerText = this.langs.copyLevel;
span.addEventListener('click', () => {
const index = grid.selectedIndex; const index = grid.selectedIndex;
if (index < 0) { if (index < 0) {
return; return;
@ -1851,6 +1861,10 @@ export class Grid {
grid.addItem(Object.assign({}, item), index + 1); grid.addItem(Object.assign({}, item), index + 1);
reload(index + 1); reload(index + 1);
}); });
},
createIcon('fa-light', 'copy'),
createElement('span', span => {
span.innerText = this.langs.copyLevel;
}) })
), ),
/* /*
@ -2444,9 +2458,11 @@ export class Grid {
if (isNaN(direction)) { if (isNaN(direction)) {
direction = 1; direction = 1;
} }
const editing = col.sortAsText !== true;
return (a, b) => { return (a, b) => {
a = this._getItemProp(a.values, true, col); a = this._getItemSortProp(a.values, editing, col);
b = this._getItemProp(b.values, true, col); b = this._getItemSortProp(b.values, editing, col);
if (editing) {
if (typeof a === 'boolean') { if (typeof a === 'boolean') {
a = a ? 2 : 1; a = a ? 2 : 1;
} }
@ -2471,6 +2487,21 @@ export class Grid {
b = b.toLowerCase(); b = b.toLowerCase();
} }
} }
} else {
if (a != null && b == null) {
return direction;
}
if (Array.isArray(a)) {
a = a.join(', ');
}
if (Array.isArray(b)) {
b = b.join(', ');
}
if (typeof a === 'string' && typeof b === 'string') {
a = a.toLowerCase();
b = b.toLowerCase();
}
}
return a === b ? 0 : (a > b ? 1 : -1) * direction; return a === b ? 0 : (a > b ? 1 : -1) * direction;
}; };
} }
@ -3546,6 +3577,21 @@ export class Grid {
return value; return value;
} }
/**
* @private
* @param {GridRowItem} item
* @param {boolean} editing
* @param {GridColumnDefinition} col
* @returns {any}
*/
_getItemSortProp(item, editing, col) {
const value = item[col.key];
if (value != null && Object.prototype.hasOwnProperty.call(value, 'SortValue')) {
return value.SortValue;
}
return this._getItemProp(item, editing, col);
}
/** /**
* @private * @private
* @param {HTMLElement} target * @param {HTMLElement} target
@ -3591,6 +3637,31 @@ export class Grid {
return; return;
} }
if (!this._notHeader(e.target.tagName)) { if (!this._notHeader(e.target.tagName)) {
if (Array.isArray(this.sortArray) && this.sortArray.length > 0) {
showConfirm(this.langs.sort, this.langs.sortArrayExists, [
{
key: 'yes',
text: this.langs.yes
},
{
text: this.langs.cancel
}
]).then(result => {
if (result?.key === 'yes') {
this._onDoHeaderSort(col);
}
});
} else {
this._onDoHeaderSort(col);
}
}
}
/**
* @private
* @param {GridColumnDefinition} col
*/
_onDoHeaderSort(col) {
const index = this.columns.indexOf(col); const index = this.columns.indexOf(col);
if (index < 0) { if (index < 0) {
return; return;
@ -3605,7 +3676,6 @@ export class Grid {
this.onColumnChanged(ColumnChangedType.Sort, index, this.sortDirection); this.onColumnChanged(ColumnChangedType.Sort, index, this.sortDirection);
} }
} }
}
/** /**
* @private * @private

View File

@ -1,7 +1,7 @@
import "./css/media.scss"; import "./css/media.scss";
import { createElement } from "../functions"; import { createElement } from "../functions";
import { createIcon } from "./icon"; import { createIcon } from "./icon";
import { get } from "../utility"; import { get } from "../utility/request";
export function createPicture(url) { export function createPicture(url) {
return createElement('a', a => { return createElement('a', a => {

3
lib/ui/popup.d.ts vendored
View File

@ -69,7 +69,8 @@ export class Popup {
} }
interface PopupButton { interface PopupButton {
tabIndex: number; className?: string;
tabIndex?: number;
key: string; key: string;
text: string; text: string;
trigger: (this: Popup) => boolean | Promise<boolean>; trigger: (this: Popup) => boolean | Promise<boolean>;

View File

@ -271,6 +271,9 @@ export class Popup {
container.appendChild( container.appendChild(
createElement('div', 'ui-popup-footer', ...option.buttons.map((b, i) => { createElement('div', 'ui-popup-footer', ...option.buttons.map((b, i) => {
const button = createElement('button', 'ui-popup-button'); const button = createElement('button', 'ui-popup-button');
if (b.className != null) {
button.classList.add(b.className);
}
if (b.tabIndex > 0) { if (b.tabIndex > 0) {
button.tabIndex = b.tabIndex; button.tabIndex = b.tabIndex;
} else { } else {

View File

@ -1,6 +1,5 @@
import './css/tooltip.scss'; import './css/tooltip.scss';
import { createElement } from "../functions"; import { createElement } from "../functions";
// import { global } from "../utility";
const pointerHeight = 12; const pointerHeight = 12;

View File

@ -53,6 +53,22 @@ function isPhone(text) {
return false; return false;
} }
function verifyPassword(password, min) {
if (password == null || typeof password !== 'string') {
return false;
}
if (password.length < 8) {
return false;
}
min ??= 3;
let secure = 0;
if (/[0-9]/.test(password)) { secure++ }
if (/[a-z]/.test(password)) { secure++ }
if (/[A-Z]/.test(password)) { secure++ }
if (/[^0-9a-zA-Z]/.test(password)) { secure++ }
return secure >= min;
}
export { export {
// cookie // cookie
getCookie, getCookie,
@ -83,5 +99,6 @@ export {
debounce, debounce,
truncate, truncate,
isEmail, isEmail,
isPhone isPhone,
verifyPassword
} }

View File

@ -1,3 +1,3 @@
export function getCookie(name: string): string export function getCookie(name: string): string
export function setCookie(name: string, value: string, expireDays?: Number): void export function setCookie(name: string, value: string, expireDays?: Number, host?: string, encode?: boolean): void
export function deleteCookie(name: string): void export function deleteCookie(name: string): void

View File

@ -1,8 +1,8 @@
export function setCookie(name, value, expireDays) { export function setCookie(name, value, expireDays, host, encode) {
if (name == null) { if (name == null) {
return; return;
} }
let extra = `; domain=${location.host}; path=/`; let extra = `; domain=${host ?? location.hostname}; path=/`;
if (expireDays != null) { if (expireDays != null) {
const d = new Date(); const d = new Date();
d.setTime(d.getTime() + (expireDays * 24 * 60 * 60 * 1000)); d.setTime(d.getTime() + (expireDays * 24 * 60 * 60 * 1000));
@ -11,7 +11,10 @@ export function setCookie(name, value, expireDays) {
if (/^(https|wss):$/.test(location.protocol)) { if (/^(https|wss):$/.test(location.protocol)) {
extra += '; secure'; extra += '; secure';
} }
document.cookie = `${name}=${encodeURIComponent(value)}${extra}`; if (encode !== false) {
value = encodeURIComponent(value);
}
document.cookie = `${name}=${value}${extra}`;
} }
export function getCookie(name) { export function getCookie(name) {

View File

@ -23,17 +23,21 @@ function getCurrentLgId() {
lgid = 'en'; lgid = 'en';
} }
switch (lgid) { switch (lgid) {
case 'en':
case 'en_au': case 'en_au':
case 'fr': case 'en_ca':
case 'fr_ca':
case 'zh_cn': case 'zh_cn':
return lgid; return lgid;
} }
const lang = lgid.split('_')[0]; const lang = lgid.split('_')[0];
switch (lang) { switch (lang) {
case 'en': case 'en':
case 'es':
case 'fr': case 'fr':
case 'pt':
return lang; return lang;
case 'zh':
return 'zh_cn';
} }
return 'en'; return 'en';
} }
@ -88,14 +92,20 @@ function applyLanguage(dom, result) {
} else { } else {
text.innerText = getLanguage(result, key, text.innerText); text.innerText = getLanguage(result, key, text.innerText);
} }
// delete text.dataset.lgid;
text.dataset.lgid = '';
} }
for (let title of dom.querySelectorAll('[data-title-lgid]')) { for (let title of dom.querySelectorAll('[data-title-lgid]')) {
const key = title.dataset.titleLgid; const key = title.dataset.titleLgid;
title.setAttribute('title', getLanguage(result, key, title.getAttribute('title'))); title.setAttribute('title', getLanguage(result, key, title.getAttribute('title')));
// delete title.dataset.titleLgid;
title.dataset.titleLgid = '';
} }
for (let holder of dom.querySelectorAll('[data-placeholder-lgid]')) { for (let holder of dom.querySelectorAll('[data-placeholder-lgid]')) {
const key = holder.dataset.placeholderLgid; const key = holder.dataset.placeholderLgid;
holder.setAttribute('placeholder', getLanguage(result, key, holder.getAttribute('placeholder'))); holder.setAttribute('placeholder', getLanguage(result, key, holder.getAttribute('placeholder')));
// delete holder.dataset.placeholderLgid;
holder.dataset.placeholderLgid = '';
} }
} }

112
package-lock.json generated
View File

@ -1,19 +1,19 @@
{ {
"name": "ui-lib", "name": "ui-lib",
"version": "1.0.2", "version": "1.0.3",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ui-lib", "name": "ui-lib",
"version": "1.0.2", "version": "1.0.3",
"devDependencies": { "devDependencies": {
"@mxssfd/typedoc-theme": "^1.1.3", "@mxssfd/typedoc-theme": "^1.1.3",
"clean-jsdoc-theme": "^4.3.0", "clean-jsdoc-theme": "^4.3.0",
"docdash": "^2.0.2", "docdash": "^2.0.2",
"jsdoc": "^4.0.3", "jsdoc": "^4.0.3",
"postcss-preset-env": "^9.5.12", "postcss-preset-env": "^9.5.13",
"sass": "^1.77.1", "sass": "^1.77.2",
"typedoc": "^0.25.13", "typedoc": "^0.25.13",
"vite": "^5.2.11", "vite": "^5.2.11",
"vite-plugin-externals": "^0.6.2" "vite-plugin-externals": "^0.6.2"
@ -188,9 +188,9 @@
} }
}, },
"node_modules/@csstools/postcss-cascade-layers": { "node_modules/@csstools/postcss-cascade-layers": {
"version": "4.0.5", "version": "4.0.6",
"resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.5.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz",
"integrity": "sha512-nAI2ToT2G/E4XEwJitVjCr2V2SluE9Eaiski+xfRbKSGxFmDUtua7SCG1AtMbjteIVqGDRw7uBd7qXqCZq2b1Q==", "integrity": "sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -203,7 +203,7 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/selector-specificity": "^3.1.0", "@csstools/selector-specificity": "^3.1.1",
"postcss-selector-parser": "^6.0.13" "postcss-selector-parser": "^6.0.13"
}, },
"engines": { "engines": {
@ -459,9 +459,9 @@
} }
}, },
"node_modules/@csstools/postcss-is-pseudo-class": { "node_modules/@csstools/postcss-is-pseudo-class": {
"version": "4.0.7", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.7.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz",
"integrity": "sha512-snT/fL6V0I/4AiObPtk2mzJ/eSvpqnf3Kyx9Mc0rI6VskjRkkrEME+kH3aMKBKwjstBrgrYUMoI+vXw2HRi9CQ==", "integrity": "sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -474,7 +474,7 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/selector-specificity": "^3.1.0", "@csstools/selector-specificity": "^3.1.1",
"postcss-selector-parser": "^6.0.13" "postcss-selector-parser": "^6.0.13"
}, },
"engines": { "engines": {
@ -968,9 +968,9 @@
} }
}, },
"node_modules/@csstools/selector-specificity": { "node_modules/@csstools/selector-specificity": {
"version": "3.1.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.0.tgz", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
"integrity": "sha512-tGDFEHZ4XJeIt5NF7/nAfLGqPckmDZSnYne5gl67p4agQolE5s4rofdQ3e+VkeukfR91lVtSQ/Jt9DqM1ICiIQ==", "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1805,12 +1805,12 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -1865,9 +1865,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001617", "version": "1.0.30001620",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz",
"integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==", "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1984,9 +1984,9 @@
} }
}, },
"node_modules/css-has-pseudo": { "node_modules/css-has-pseudo": {
"version": "6.0.4", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.4.tgz", "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz",
"integrity": "sha512-u9vuyeksska4OMRC061xTQb2RJZv7T1JJjnZbaQpNhZRPF1UqGpBqHnlcwRS/1vv+QOpD4NVsaFT4U1zmkciuA==", "integrity": "sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1999,7 +1999,7 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/selector-specificity": "^3.1.0", "@csstools/selector-specificity": "^3.1.1",
"postcss-selector-parser": "^6.0.13", "postcss-selector-parser": "^6.0.13",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
}, },
@ -2080,9 +2080,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.763", "version": "1.4.777",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.763.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.777.tgz",
"integrity": "sha512-k4J8NrtJ9QrvHLRo8Q18OncqBCB7tIUyqxRcJnlonQ0ioHKYB988GcDFF3ZePmnb8eHEopDs/wPHR/iGAFgoUQ==", "integrity": "sha512-n02NCwLJ3wexLfK/yQeqfywCblZqLcXphzmid5e8yVPdtEcida7li0A5WQKghHNG0FeOMCzeFOzEbtAh5riXFw==",
"dev": true "dev": true
}, },
"node_modules/entities": { "node_modules/entities": {
@ -2160,9 +2160,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
@ -2252,9 +2252,9 @@
} }
}, },
"node_modules/immutable": { "node_modules/immutable": {
"version": "4.3.5", "version": "4.3.6",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
"integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
"dev": true "dev": true
}, },
"node_modules/is-binary-path": { "node_modules/is-binary-path": {
@ -2557,9 +2557,9 @@
} }
}, },
"node_modules/picocolors": { "node_modules/picocolors": {
"version": "1.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true "dev": true
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
@ -3022,9 +3022,9 @@
} }
}, },
"node_modules/postcss-nesting": { "node_modules/postcss-nesting": {
"version": "12.1.3", "version": "12.1.4",
"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.3.tgz", "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.4.tgz",
"integrity": "sha512-8XVmgNNYlmIg1qxSP7O5n76nm0I71noCzlSCl7oqaL2opJ5nSB7r8/726yObKrUTRt6ipjiqHB1wYrMVTM66Sg==", "integrity": "sha512-CcHOq94K137E+U4Ommu7pexcpp0Tjm24zl4UcqWs1oSLAr5cLI+jLrqQ5h/bdjhMX6cMbzunyustVNnvrzF8Zg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -3038,7 +3038,7 @@
], ],
"dependencies": { "dependencies": {
"@csstools/selector-resolve-nested": "^1.1.0", "@csstools/selector-resolve-nested": "^1.1.0",
"@csstools/selector-specificity": "^3.1.0", "@csstools/selector-specificity": "^3.1.1",
"postcss-selector-parser": "^6.0.13" "postcss-selector-parser": "^6.0.13"
}, },
"engines": { "engines": {
@ -3130,9 +3130,9 @@
} }
}, },
"node_modules/postcss-preset-env": { "node_modules/postcss-preset-env": {
"version": "9.5.12", "version": "9.5.13",
"resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.12.tgz", "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.13.tgz",
"integrity": "sha512-aSeT8hNFKAgywopQE9MINFR5rZjRoA1MKv/Z09aLNlF3ki7Es3oeoFDx52po1QbBVvFuU9wSH/IosqqAa3oJow==", "integrity": "sha512-YQMwWu6MAc4Envrjf/mW2BTrb5J8WkrJ4dV2VostZVDhrmEPpYREOyhmvtlFLDxK1/AmTDY8aXjZViMC1qKu/w==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -3145,7 +3145,7 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/postcss-cascade-layers": "^4.0.5", "@csstools/postcss-cascade-layers": "^4.0.6",
"@csstools/postcss-color-function": "^3.0.16", "@csstools/postcss-color-function": "^3.0.16",
"@csstools/postcss-color-mix-function": "^2.0.16", "@csstools/postcss-color-mix-function": "^2.0.16",
"@csstools/postcss-exponential-functions": "^1.0.7", "@csstools/postcss-exponential-functions": "^1.0.7",
@ -3155,7 +3155,7 @@
"@csstools/postcss-hwb-function": "^3.0.15", "@csstools/postcss-hwb-function": "^3.0.15",
"@csstools/postcss-ic-unit": "^3.0.6", "@csstools/postcss-ic-unit": "^3.0.6",
"@csstools/postcss-initial": "^1.0.1", "@csstools/postcss-initial": "^1.0.1",
"@csstools/postcss-is-pseudo-class": "^4.0.7", "@csstools/postcss-is-pseudo-class": "^4.0.8",
"@csstools/postcss-light-dark-function": "^1.0.5", "@csstools/postcss-light-dark-function": "^1.0.5",
"@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-float-and-clear": "^2.0.1",
"@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overflow": "^1.0.1",
@ -3177,7 +3177,7 @@
"autoprefixer": "^10.4.19", "autoprefixer": "^10.4.19",
"browserslist": "^4.22.3", "browserslist": "^4.22.3",
"css-blank-pseudo": "^6.0.2", "css-blank-pseudo": "^6.0.2",
"css-has-pseudo": "^6.0.4", "css-has-pseudo": "^6.0.5",
"css-prefers-color-scheme": "^9.0.1", "css-prefers-color-scheme": "^9.0.1",
"cssdb": "^8.0.0", "cssdb": "^8.0.0",
"postcss-attribute-case-insensitive": "^6.0.3", "postcss-attribute-case-insensitive": "^6.0.3",
@ -3197,7 +3197,7 @@
"postcss-image-set-function": "^6.0.3", "postcss-image-set-function": "^6.0.3",
"postcss-lab-function": "^6.0.16", "postcss-lab-function": "^6.0.16",
"postcss-logical": "^7.0.1", "postcss-logical": "^7.0.1",
"postcss-nesting": "^12.1.3", "postcss-nesting": "^12.1.4",
"postcss-opacity-percentage": "^2.0.0", "postcss-opacity-percentage": "^2.0.0",
"postcss-overflow-shorthand": "^5.0.1", "postcss-overflow-shorthand": "^5.0.1",
"postcss-page-break": "^3.0.4", "postcss-page-break": "^3.0.4",
@ -3366,9 +3366,9 @@
} }
}, },
"node_modules/sass": { "node_modules/sass": {
"version": "1.77.1", "version": "1.77.2",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.77.1.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz",
"integrity": "sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w==", "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
@ -3565,9 +3565,9 @@
} }
}, },
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.0.15", "version": "1.0.16",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
"integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -3585,7 +3585,7 @@
], ],
"dependencies": { "dependencies": {
"escalade": "^3.1.2", "escalade": "^3.1.2",
"picocolors": "^1.0.0" "picocolors": "^1.0.1"
}, },
"bin": { "bin": {
"update-browserslist-db": "cli.js" "update-browserslist-db": "cli.js"

View File

@ -1,7 +1,7 @@
{ {
"name": "ui-lib", "name": "ui-lib",
"private": true, "private": true,
"version": "1.0.2", "version": "1.0.3",
"type": "module", "type": "module",
"files": [ "files": [
"dist" "dist"
@ -32,8 +32,8 @@
"clean-jsdoc-theme": "^4.3.0", "clean-jsdoc-theme": "^4.3.0",
"docdash": "^2.0.2", "docdash": "^2.0.2",
"jsdoc": "^4.0.3", "jsdoc": "^4.0.3",
"postcss-preset-env": "^9.5.12", "postcss-preset-env": "^9.5.13",
"sass": "^1.77.1", "sass": "^1.77.2",
"typedoc": "^0.25.13", "typedoc": "^0.25.13",
"vite": "^5.2.11", "vite": "^5.2.11",
"vite-plugin-externals": "^0.6.2" "vite-plugin-externals": "^0.6.2"