diff --git a/apps/ui/.gitignore b/apps/ui/.gitignore
new file mode 100644
index 0000000..53c37a1
--- /dev/null
+++ b/apps/ui/.gitignore
@@ -0,0 +1 @@
+dist
\ No newline at end of file
diff --git a/apps/ui/deploy/message.js b/apps/ui/deploy/message.js
index 3e4bffb..41b4277 100644
--- a/apps/ui/deploy/message.js
+++ b/apps/ui/deploy/message.js
@@ -256,19 +256,19 @@ export class Message {
remove();
};
};
- success = (message, timeout = 1000, onClose) => {
+ success = (message, timeout = 1000, onClose = () => {}) => {
return this.open(message, timeout, onClose, { type: 'success' });
};
- info = (message, timeout = 1500, onClose) => {
+ info = (message, timeout = 1500, onClose = () => {}) => {
return this.open(message, timeout, onClose, { type: 'info' });
};
- warning = (message, timeout = 3000, onClose) => {
+ warning = (message, timeout = 3000, onClose = () => {}) => {
return this.open(message, timeout, onClose, { type: 'warning' });
};
- error = (message, timeout = 3000, onClose) => {
+ error = (message, timeout = 3000, onClose = () => {}) => {
return this.open(message, timeout, onClose, { type: 'error' });
};
- loading = (message, timeout = 0, onClose) => {
+ loading = (message, timeout = 0, onClose = () => {}) => {
return this.open(message, timeout, onClose, { type: 'loading' });
};
}
diff --git a/apps/ui/index.html b/apps/ui/index.html
deleted file mode 100644
index 75257e2..0000000
--- a/apps/ui/index.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
- UI
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/apps/ui/package.json b/apps/ui/package.json
index f4b229d..22da953 100644
--- a/apps/ui/package.json
+++ b/apps/ui/package.json
@@ -1,13 +1,51 @@
{
- "name": "ui",
- "version": "1.0.0",
+ "name": "@kevisual/system-ui",
+ "version": "0.0.1",
"description": "",
- "main": "index.js",
+ "main": "dist/index.js",
+ "privite": false,
+ "type": "module",
"scripts": {
+ "dev": "rollup -c -w",
+ "build": "npm run clean && rollup -c",
"pub": "envision switchOrg system && envision deploy ./deploy -v 0.0.1 -k ui -y y",
- "dev": "vite"
+ "clean": "rimraf dist"
},
+ "files": [
+ "dist",
+ "src",
+ "components"
+ ],
"keywords": [],
- "author": "",
- "license": "ISC"
+ "author": "abearxiong",
+ "license": "MIT",
+ "dependencies": {
+ "dayjs": "^1.11.13",
+ "lodash-es": "^4.17.21",
+ "style-to-object": "^1.0.8"
+ },
+ "devDependencies": {
+ "@emotion/serialize": "^1.3.1",
+ "@rollup/plugin-commonjs": "^28.0.1",
+ "@rollup/plugin-node-resolve": "^15.2.3",
+ "@rollup/plugin-terser": "^0.4.4",
+ "@rollup/plugin-typescript": "^11.1.6",
+ "@types/postcss-import": "^14.0.3",
+ "@types/react": "^18.3.8",
+ "autoprefixer": "^10.4.20",
+ "cross-env": "^7.0.3",
+ "cssnano": "^7.0.6",
+ "immer": "^10.1.1",
+ "nanoid": "^5.0.7",
+ "postcss-import": "^16.1.0",
+ "rollup": "^4.22.2",
+ "rollup-plugin-postcss": "^4.0.2",
+ "ts-lib": "^0.0.5",
+ "typescript": "^5.6.2",
+ "zustand": "5.0.0-rc.2"
+ },
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/",
+ "access": "public"
+ }
}
\ No newline at end of file
diff --git a/apps/ui/rollup.config.js b/apps/ui/rollup.config.js
new file mode 100644
index 0000000..d899894
--- /dev/null
+++ b/apps/ui/rollup.config.js
@@ -0,0 +1,60 @@
+import resolve from '@rollup/plugin-node-resolve';
+import typescript from '@rollup/plugin-typescript';
+import commonjs from '@rollup/plugin-commonjs';
+import postcss from 'rollup-plugin-postcss';
+import autoprefixer from 'autoprefixer';
+import cssnano from 'cssnano';
+import terser from '@rollup/plugin-terser';
+
+import postcssImport from 'postcss-import';
+
+const isApps = process.env.TYPE === 'apps';
+const entrys = ['index'];
+/**
+ * @type {import('rollup').RollupOptions[]}
+ */
+const configs = entrys.map((entry) => ({
+ input: `./src/${entry}.ts`, // 修改输入文件为 TypeScript 文件
+ output: {
+ file: `./dist/${entry}.js`,
+ // dir: 'dist',
+ format: 'es', // 输出格式为 ES Module
+ },
+ plugins: [
+ resolve({
+ browser: true, // 处理浏览器版本的依赖
+ }),
+ commonjs(),
+ typescript({
+ tsconfig: './tsconfig.json',
+ compilerOptions: {
+ declaration: !isApps, // 生成声明文件
+ declarationDir: './dist', // 声明文件输出目录
+ // outDir: './types', //
+ },
+ }), // 添加 TypeScript 插件
+ terser(), // 压缩输出的 ES Module 文件
+ ],
+}));
+
+const entryCss = ['index'];
+const configsCss = entryCss.map((entry) => ({
+ input: `./src/${entry}.css`, // 修改输入文件为 TypeScript 文件
+ output: {
+ file: `./dist/${entry}.css`,
+ },
+ include: ['src/**/*.css'],
+ plugins: [
+ // resolve(),
+ postcss({
+ // extract: true,
+ extract: true,
+ plugins: [
+ postcssImport(), // 处理 @import 语句
+ autoprefixer(),
+ ],
+ }),
+ ],
+}));
+
+export default [...configs, ...configsCss];
diff --git a/apps/ui/src/components/message/index.ts b/apps/ui/src/components/message/index.ts
new file mode 100644
index 0000000..f545587
--- /dev/null
+++ b/apps/ui/src/components/message/index.ts
@@ -0,0 +1 @@
+export * from './message';
diff --git a/apps/ui/src/components/message/message.ts b/apps/ui/src/components/message/message.ts
new file mode 100644
index 0000000..bbbc6eb
--- /dev/null
+++ b/apps/ui/src/components/message/message.ts
@@ -0,0 +1,277 @@
+export class MessageContainer {
+ container;
+ id = 'for-message';
+ root = document.body;
+ constructor(opts?: any) {
+ const { id } = opts || {};
+ if (id) {
+ this.id = id;
+ }
+ this.initContainer();
+ }
+ initContainer() {
+ const id = this.id;
+ const root = this.root;
+ let forModal = document.querySelector('#' + id);
+ if (!forModal) {
+ forModal = document.createElement('div');
+ forModal.id = id;
+ // 点击穿透
+ root.appendChild(forModal);
+ }
+ this.initStyle();
+ this.container = forModal;
+ }
+ initStyle(force: boolean = false) {
+ const id = this.id;
+ const styleId = id + '-style';
+ const _style = document.querySelector('#' + styleId);
+ if (force && _style) {
+ _style.remove();
+ }
+ if (!force && _style) {
+ return;
+ }
+ const style = document.createElement('style');
+ style.id = styleId;
+
+ style.innerHTML = `
+ #${id} {
+ position: fixed; top: 0; left: 0; z-index: 1000; width: 100vw;height: 100vh;pointer-events: none; display: flex; flex-direction: column; gap: 10px;
+ }
+ .message-wrapper {
+ display: flex;
+ transition: transform 2s ease-in-out, opacity 1.2s ease-in-out; /* 缩小并淡出 */
+ }
+ .message-wrapper:first-child {
+ margin-top: 20px;
+ }
+ .message {
+ display: flex;
+ gap: 10px;
+ padding: 6px 10px;
+ margin: 0 auto;
+ border-radius: 4px;
+ background-color: white;
+ box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),
+ 0 3px 6px -4px rgba(0, 0, 0, 0.12),
+ 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+ justify-content: center;
+ align-item: center;
+ animation: message-slide-down 0.3s ease-out forwards; /* 应用动画 */
+ }
+ /* 添加消失类时 */
+ .message-wrapper.message-hide {
+ transform: scale(0);
+ opacity: 0;
+ pointer-events: none; /* 防止交互 */
+ }
+ .message-success {
+ }
+ @keyframes message-slide-down {
+ 0% {
+ transform: translateY(-100px); /* 从上方开始 */
+ opacity: 0; /* 从不可见状态开始 */
+ }
+ 50% {
+ opacity: 0.5; /* 渐渐变为半透明 */
+ }
+ 100% {
+ transform: translateY(0); /* 移动到初始位置 */
+ opacity: 1; /* 最终完全可见 */
+ }
+ }
+ .message-icon {
+ position: relative;
+ width: 24px;
+ height: 24px;
+ box-sizing: border-box;
+ }
+ .message-icon::before {
+ content: "";
+ position: absolute;
+ left: 7px;
+ top: 3px;
+ width: 5px;
+ height: 10px;
+ }
+ .icon-success {
+ border: 2px solid green; /* 外圆圈 */
+ border-radius: 50%; /* 使其为圆形 */
+ }
+ .icon-success::before {
+ border-right: 2px solid green; /* 打勾的右边部分 */
+ border-bottom: 2px solid green; /* 打勾的下边部分 */
+ transform: rotate(45deg);
+ }
+ .icon-info {
+ border: 2px solid blue; /* 外圆圈 */
+ border-radius: 50%; /* 使其为圆形 */
+ }
+ .icon-info::before {
+ content: "i";
+ position: absolute;
+ top: 0px;
+ color: blue;
+ font-weight: bold;
+ font-size: 16px;
+ left: 8px;
+ }
+ .icon-error::before, .icon-error::after {
+ content: "";
+ position: absolute;
+ top: 4px;
+ left: 50%;
+ width: 2px;
+ height: 12px;
+ background-color: red;
+ transform-origin: center;
+ }
+ .icon-error {
+ border: 2px solid red; /* 外圆圈 */
+ border-radius: 50%; /* 使其为圆形 */
+ }
+ .icon-error::before {
+ transform: translateX(-50%) rotate(45deg); /* 旋转形成叉号的一部分 */
+ }
+
+ .icon-error::after {
+ transform: translateX(-50%) rotate(-45deg); /* 旋转形成叉号的另一部分 */
+ }
+ .icon-warning {
+ position: relative;
+ width: 0;
+ height: 0;
+ border-left: 12px solid transparent;
+ border-right: 12px solid transparent;
+ border-bottom: 24px solid orange; /* 三角形 */
+ display: inline-block;
+ transform: scale(0.8); /* 缩小三角形 */
+ }
+
+ .icon-warning::before {
+ content: "!";
+ position: absolute;
+ top: 5px;
+ left: 50%;
+ transform: translateX(-50%);
+ color: white;
+ font-weight: bold;
+ font-size: 16px;
+ }
+ .icon-loading {
+ width: 24px;
+ height: 24px;
+ border: 3px solid #f3f3f3; /* 边框颜色,用于加载圈的背景 */
+ border-top: 3px solid #3498db; /* 顶部边框的颜色,用于显示加载进度 */
+ border-radius: 50%; /* 圆形 */
+ animation: spin 1s linear infinite; /* 旋转动画 */
+ }
+
+ @keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+ }
+ `;
+ document.head.appendChild(style);
+ }
+ setRoot(root) {
+ if (root instanceof HTMLElement) {
+ this.root = root;
+ root.appendChild(this.container);
+ }
+ }
+}
+const controller = new MessageContainer();
+
+export const createMessage = (content, opts) => {
+ let { icon, key, style, className, type } = opts || {};
+ const div = document.createElement('div');
+ div.className = 'message-wrapper' + (className ? ' ' + className : '');
+ if (style) {
+ div.style.cssText = style;
+ }
+ if (key) div.setAttribute('data-key', key);
+ const contentDiv = document.createElement('div');
+ contentDiv.className = 'message';
+ if (icon) {
+ const i = document.createElement('i');
+ i.className = icon;
+ i.classList.add('message-icon');
+ contentDiv.appendChild(i);
+ } else if (type) {
+ const i = document.createElement('div');
+ i.className = 'icon-' + type;
+ i.classList.add('message-icon');
+ contentDiv.appendChild(i);
+ }
+ if (content instanceof HTMLElement) {
+ contentDiv.appendChild(content);
+ } else {
+ const text = document.createElement('span');
+ text.innerText = content;
+ contentDiv.appendChild(text);
+ }
+ div.appendChild(contentDiv);
+
+ return div;
+};
+const methods = ['success', 'info', 'warning', 'error', 'loading'];
+
+export class Message {
+ controller = controller;
+ constructor() {
+ this.controller = controller;
+ }
+ open = (message, timeout = 3000, onClose, opts) => {
+ const controller = this.controller;
+ const div = createMessage(message, opts);
+ const remove = () => {
+ div.classList.add('message-hide');
+ setTimeout(() => {
+ if (div?.isConnected) {
+ div.remove();
+ } else {
+ console.log('not connected');
+ controller.container.removeChild(div);
+ }
+ }, 1000);
+ onClose && onClose();
+ };
+ controller.container.appendChild(div);
+ controller.initStyle(true);
+ if (timeout === 0) {
+ return () => {
+ remove();
+ };
+ }
+ const time = setTimeout(() => {
+ remove();
+ }, timeout);
+ return () => {
+ clearTimeout(time);
+ remove();
+ };
+ };
+ success = (message: string, timeout = 1000, onClose = () => {}) => {
+ return this.open(message, timeout, onClose, { type: 'success' });
+ };
+ info = (message: string, timeout = 1500, onClose = () => {}) => {
+ return this.open(message, timeout, onClose, { type: 'info' });
+ };
+ warning = (message: string, timeout = 3000, onClose = () => {}) => {
+ return this.open(message, timeout, onClose, { type: 'warning' });
+ };
+ error = (message: string, timeout = 3000, onClose = () => {}) => {
+ return this.open(message, timeout, onClose, { type: 'error' });
+ };
+ loading = (message: string, timeout = 0, onClose = () => {}) => {
+ return this.open(message, timeout, onClose, { type: 'loading' });
+ };
+}
+
+export const message = new Message();
diff --git a/apps/ui/src/components/modal/blank-modal.ts b/apps/ui/src/components/modal/blank-modal.ts
new file mode 100644
index 0000000..ebbdfe1
--- /dev/null
+++ b/apps/ui/src/components/modal/blank-modal.ts
@@ -0,0 +1,176 @@
+import { Modal, ModalOpts, KV } from './modal';
+import { SelectEl, querySelector, elAddCS, ElStyle, elAddCS2 } from '../../utils/query-el';
+import { ObjCss } from '../../utils/css';
+
+export class BlankModal extends Modal {
+ constructor(opts: ModalOpts) {
+ super(opts);
+ }
+}
+type DialogModalOpts = {
+ dialogTitle?: string;
+ dialogTitleClassName?: string;
+ dialogTitleStyle?: ElStyle;
+ dialogTitleEl?: HTMLElement;
+ dialogTitleCloseIcon?: boolean;
+
+ dialogContentClassName?: string;
+ dialogContentStyle?: ElStyle;
+
+ dialogFooterClassName?: string;
+ dialogFooterStyle?: ElStyle;
+} & ModalOpts;
+
+type DialogDefaultStyle = {
+ defaultDialogTitleStyle?: ObjCss;
+ defaultDialogContentStyle?: ObjCss;
+ defaultDialogFooterStyle?: ObjCss;
+};
+
+export class DialogModal extends Modal {
+ dialogTitle?: string;
+ dialogTitleClassName?: string;
+ dialogTitleStyle?: ElStyle;
+ dialogTitleEl?: HTMLElement;
+ dialogTitleCloseIcon?: boolean;
+
+ dialogContentClassName?: string;
+ dialogContentStyle?: ElStyle;
+
+ dialogFooterShow?: boolean;
+ dialogFooterClassName?: string;
+ dialogFooterStyle?: ElStyle;
+
+ constructor(opts: ModalOpts) {
+ super(opts);
+
+ this.dialogTitle = opts.dialogTitle;
+ this.dialogTitleClassName = opts.dialogTitleClassName;
+ this.dialogTitleStyle = opts.dialogTitleStyle;
+ this.dialogTitleEl = opts.dialogTitleEl;
+ this.dialogTitleCloseIcon = opts.dialogTitleCloseIcon;
+
+ this.dialogContentClassName = opts.dialogContentClassName;
+ this.dialogContentStyle = opts.dialogContentStyle;
+
+ this.dialogFooterClassName = opts.dialogFooterClassName;
+ this.dialogFooterStyle = opts.dialogFooterStyle;
+ this.dialogFooterShow = opts.dialogFooterShow ?? false;
+
+ this.setDefaultStyle('defaultContentStyle', {
+ position: 'absolute',
+ padding: '0px',
+ left: '50%',
+ top: '20%',
+ width: '600px',
+ background: '#fff',
+ borderRadius: '5px',
+ boxShadow: '0 0 10px rgba(0,0,0,.1)',
+ transform: 'translate(-50%, -50%)',
+ maxHeight: '80vh',
+ overflow: 'auto',
+ ...opts?.defaultStyle?.defaultContentStyle,
+ });
+
+ this.setDefaultStyle('defaultDialogTitleStyle', {
+ display: 'flex',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ position: 'sticky',
+ padding: '10px 20px',
+ top: '0',
+ fontSize: '16px',
+ background: '#fff',
+ marginTop: '-10px',
+ borderBottom: '1px solid #f0f0f0',
+ marginBottom: '5px',
+ ...opts?.defaultStyle?.defaultDialogTitleStyle,
+ });
+ this.setDefaultStyle('defaultDialogContentStyle', {
+ padding: '20px',
+ ...opts?.defaultStyle?.defaultDialogContentStyle,
+ });
+ this.setDefaultStyle('defaultDialogFooterStyle', {
+ display: 'flex',
+ justifyItems: 'end',
+ borderTop: '1px solid #f0f0f0',
+ padding: '10px 20px',
+ ...opts?.defaultStyle?.defaultDialogFooterStyle,
+ });
+ }
+ // static render(el: string | HTMLDivElement, id: string, opts?: DialogModalOpts): DialogModal;
+ // static render(el: string | HTMLDivElement, opts?: DialogModalOpts): DialogModal;
+ // static render(...args: any[]) {
+ // const [el, id, opts] = args;
+ // return super.render(el, id, opts);
+ // }
+ appendRoot(documentFragment: DocumentFragment): void {
+ const cacheFragment = document.createDocumentFragment();
+ // 拿出来
+ cacheFragment.appendChild(this.Element);
+ const DialogBox = documentFragment.querySelector('.ui-modal-content');
+ DialogBox.classList.add('ui-modal-dialog');
+
+ // 创建title
+ const title = document.createElement('div');
+ title.classList.add('ui-modal-dialog-title');
+ elAddCS2(title, this.dialogTitleClassName, this.dialogTitleStyle, this.defaultStyle.defaultDialogTitleStyle);
+ if (this.dialogTitleEl) {
+ title.appendChild(this.dialogTitleEl);
+ } else {
+ title.innerText = this.dialogTitle;
+ }
+ if (this.dialogTitleCloseIcon) {
+ const closeIcon = document.createElement('span');
+ closeIcon.className = 'ui-modal-dialog-close';
+ closeIcon.innerHTML = '×';
+ closeIcon.style.cssText = `
+ cursor: pointer;
+ font-size: 24px;
+ margin: -5px 10px 0 0;
+ `;
+ closeIcon.onclick = (e) => {
+ this.setOpen(false);
+ };
+ title.appendChild(closeIcon);
+ }
+
+ DialogBox.appendChild(title);
+ // 创建content
+ const content = document.createElement('div');
+ content.className = 'ui-modal-dialog-content';
+ elAddCS2(content, this.dialogContentClassName, this.dialogContentStyle, this.defaultStyle.defaultDialogContentStyle);
+
+ content.appendChild(cacheFragment);
+
+ if (this.dialogFooterShow) {
+ const footer = document.createElement('div');
+ footer.className = 'ui-modal-dialog-footer';
+ elAddCS2(footer, this.dialogFooterClassName, this.dialogFooterStyle, this.defaultStyle.defaultDialogFooterStyle);
+ DialogBox.appendChild(footer);
+ }
+
+ DialogBox.appendChild(content);
+
+ super.appendRoot(documentFragment);
+ }
+ renderEl(el: HTMLDivElement): this {
+ return super.renderEl(el);
+ }
+ renderFooter(el?: SelectEl): void {
+ const _el = querySelector(el);
+ if (!_el) return;
+ const footer = this.Element.querySelector('.ui-modal-dialog-footer');
+ if (!footer) return;
+ footer.innerHTML = '';
+ footer.appendChild(_el);
+ }
+ renerContent(el?: SelectEl): void {
+ const _el = querySelector(el);
+ if (!_el) return;
+ const content = this.Element.querySelector('.ui-modal-dialog-content');
+ if (!content) return;
+ content.innerHTML = '';
+ content.appendChild(_el);
+ }
+}
diff --git a/apps/ui/src/components/modal/event.ts b/apps/ui/src/components/modal/event.ts
new file mode 100644
index 0000000..b9bb983
--- /dev/null
+++ b/apps/ui/src/components/modal/event.ts
@@ -0,0 +1,39 @@
+import { modalStore } from './store';
+// modal 事件实现
+const ModalEvent = {
+ //
+};
+const onClick = (e: MouseEvent) => {
+ const target = e.target as HTMLElement;
+ if (!target) {
+ console.log('target is null');
+ return;
+ }
+ if (target.classList.contains('ui-modal-mask')) {
+ const modalState = modalStore.getState();
+ const modal = modalState.modals.find((modal) => modal.id === target.dataset.id);
+ if (modal && modal.open) {
+ modal.onMaskClose(e);
+ }
+ e.preventDefault();
+ return;
+ }
+ // const parentModalRoot = target.closest('.ui-modal-root');
+ // if (!parentModalRoot) {
+ // return;
+ // }
+};
+
+export const InitModalEvent = (el: HTMLDivElement) => {
+ const id = el.id;
+ if (ModalEvent[id] && el === ModalEvent[id]) {
+ return;
+ }
+ // Remove previous event listener to prevent memory leak
+ if (ModalEvent[id]) {
+ ModalEvent[id].removeEventListener('click', onClick);
+ }
+ ModalEvent[id] = null;
+ el.addEventListener('click', onClick);
+ ModalEvent[id] = el;
+};
diff --git a/apps/ui/src/components/modal/index.css b/apps/ui/src/components/modal/index.css
new file mode 100644
index 0000000..00b1915
--- /dev/null
+++ b/apps/ui/src/components/modal/index.css
@@ -0,0 +1,28 @@
+#ui-modal-list {
+ position: relative;
+}
+.ui-modal-wrapper {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 200;
+}
+.ui-modal-close {
+ display: none;
+}
+
+.ui-modal-mask {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0, 0, 0, 0.5);
+ z-index: 201;
+}
+.ui-modal-content {
+ position: fixed;
+ z-index: 202;
+}
diff --git a/apps/ui/src/components/modal/index.ts b/apps/ui/src/components/modal/index.ts
new file mode 100644
index 0000000..a7ab81d
--- /dev/null
+++ b/apps/ui/src/components/modal/index.ts
@@ -0,0 +1,5 @@
+export * from './modal';
+
+export { modalStore } from './store';
+
+export { BlankModal, DialogModal } from './blank-modal';
diff --git a/apps/ui/src/components/modal/modal.ts b/apps/ui/src/components/modal/modal.ts
new file mode 100644
index 0000000..29410ff
--- /dev/null
+++ b/apps/ui/src/components/modal/modal.ts
@@ -0,0 +1,272 @@
+import { querySelector, elAddCS, ElStyle, elAddCS2 } from '../../utils/query-el';
+import { generateId } from '../../utils/nanoid';
+import { modalStore } from './store';
+import { InitModalEvent } from './event';
+import { ObjCss } from '../../utils/css';
+export type KV = {
+ [key: string]: any;
+};
+export type ModalOpts<
+ T = {
+ [key: string]: any;
+ },
+ U = {
+ [key: string]: any;
+ },
+> = {
+ root?: HTMLDivElement | string;
+ id?: string;
+ mask?: boolean;
+ maskClassName?: string;
+ maskStyle?: ElStyle;
+ maskClose?: boolean;
+
+ contentClassName?: string;
+ contentStyle?: ElStyle;
+ destroyOnClose?: boolean; // 关闭,把Element移动到cacheFragment中
+ hideOnClose?: boolean; // 关闭后是否销毁,设置display:none
+ open?: boolean;
+
+ onClose?: () => void;
+ defaultStyle?: DefaultStyle;
+} & T;
+export type DefaultStyle = {
+ defaultContentStyle?: ObjCss;
+ defaultMaskStyle?: ObjCss;
+} & T;
+
+export class Modal {
+ static rootClassName = '#ui-modal-list';
+ root: HTMLDivElement;
+ id: string;
+ modalElement?: HTMLDivElement;
+ Element?: HTMLDivElement;
+ mask?: boolean;
+ maskClassName?: string;
+ maskStyle?: ElStyle;
+ // 点击mask是否关闭
+ maskClose?: boolean;
+
+ contentClassName?: string;
+ contentStyle?: ElStyle;
+
+ destroyOnClose?: boolean;
+ hideOnClose?: boolean;
+
+ open?: boolean;
+ isUse = true;
+ // 通知关闭
+ onClose?: (e: any) => void;
+ cacheFragment?: DocumentFragment;
+
+ defaultStyle?: DefaultStyle;
+ constructor(opts: ModalOpts) {
+ this.root = this.initRoot(opts.root);
+ InitModalEvent(this.root);
+ this.id = opts.id || generateId();
+ this.mask = opts.mask ?? true;
+ this.maskClassName = opts.maskClassName;
+ this.maskStyle = opts.maskStyle;
+ this.maskClose = opts.maskClose ?? true;
+ this.contentClassName = opts.contentClassName;
+ this.contentStyle = opts.contentStyle;
+ this.destroyOnClose = opts.destroyOnClose ?? true;
+ this.hideOnClose = opts.hideOnClose ?? true;
+ if (!this.destroyOnClose && !this.hideOnClose) {
+ this.destroyOnClose = true; // 必须要有一个为true
+ console.warn('destroyOnClose Or hideOnClose must one is true');
+ }
+ this.cacheFragment = new DocumentFragment();
+ this.defaultStyle = opts.defaultStyle || ({} as DefaultStyle);
+ this.open = opts.open ?? true;
+ this.onClose = opts.onClose;
+ }
+ protected initRoot(root: ModalOpts['root']) {
+ let _root = querySelector(root);
+ if (!_root) {
+ // 查询ui-modal元素,不存在则创建一个ui-modal元素并添加到body上
+ const queryRoot = document.querySelector('#ui-modal-list') as HTMLDivElement;
+ if (queryRoot) {
+ _root = queryRoot;
+ _root.classList.add('ui-modal-root');
+ return _root;
+ }
+ _root = document.createElement('div');
+ _root.id = 'ui-modal-list';
+ _root.classList.add('ui-modal-root');
+ document.body.appendChild(_root);
+ return _root;
+ }
+ _root.classList.add('ui-custom-modal', 'ui-modal-root');
+
+ if (!_root.id) {
+ _root.id = 'ui-modal' + generateId();
+ }
+
+ return _root;
+ }
+ static render any>(this: T,el: string | HTMLDivElement, id: string, opts?: ConstructorParameters[0]): InstanceType;
+ static render any>(this: T,el: string | HTMLDivElement, opts?: ConstructorParameters[0]): InstanceType;
+ static render(...args: any[]) {
+ let [el, id, opts] = args;
+ const _el = querySelector(el);
+ if (!_el) {
+ console.warn('el is not exist', el);
+ return;
+ }
+ let _id: string = '';
+ if (typeof id === 'string' && id) {
+ // 如果id是字符串
+ _id = id;
+ } else if (typeof id === 'object') {
+ // 如果id是对象
+ _id = id.id;
+ opts = id;
+ id = id.id;
+ }
+ let _modal: Modal | undefined;
+ const modalState = modalStore.getState();
+ if (_id) {
+ // 如果存在id,则判断是否已经存在该id的modal
+ _modal = modalStore.getState().getModal(_id);
+ }
+ if (!_modal) {
+ // 不存在modal,则创建一个modal
+ // console.log('create modal', id, opts);
+ const newModal = new this({ id, ...opts });
+ _modal = newModal;
+ modalStore.setState({
+ modals: [...modalState.modals, newModal],
+ });
+ }
+ _modal.renderEl(_el);
+ return _modal;
+ }
+ static create any>(this:T, opts: ModalOpts):InstanceType {
+ let _id = opts.id;
+ let _modal: Modal | undefined;
+ const modalState = modalStore.getState();
+ if (_id) {
+ // 如果存在id,则判断是否已经存在该id的modal
+ _modal = modalStore.getState().getModal(_id);
+ }
+ if (!_modal) {
+ // 不存在modal,则创建一个modal
+ // console.log('create modal', id, opts);
+ const newModal = new this({ ...opts, id: _id });
+ _modal = newModal;
+ modalStore.setState({
+ modals: [...modalState.modals, newModal],
+ });
+ }
+ return _modal as InstanceType;
+ }
+ createMask() {
+ const mask = document.createElement('div');
+ mask.classList.add('ui-modal-mask');
+ mask.dataset.id = this.id;
+ elAddCS2(mask, this.maskClassName, this.maskStyle, this.defaultStyle?.defaultMaskStyle);
+ return mask;
+ }
+ renderEl(el: HTMLDivElement) {
+ const defaultContentStyle = this.defaultStyle?.defaultContentStyle || {
+ position: 'absolute',
+ padding: '20px',
+ left: '50%',
+ top: '20%',
+ width: '600px',
+ background: '#fff',
+ borderRadius: '5px',
+ boxShadow: '0 0 10px rgba(0,0,0,.1)',
+ transform: 'translate(-50%, -50%)',
+ maxHeight: '80vh',
+ overflow: 'auto',
+ };
+
+ const fragment = document.createDocumentFragment();
+ const _modalEl = document.createElement('div');
+ _modalEl.classList.add('ui-modal-wrapper');
+ _modalEl.id = this.id;
+ _modalEl.dataset.mid = this.id;
+ if (this.mask) {
+ const mask = this.createMask();
+ _modalEl.appendChild(mask);
+ }
+ const modalContent = document.createElement('div');
+ modalContent.classList.add('ui-modal-content');
+ elAddCS2(modalContent, this.contentClassName, this.contentStyle, defaultContentStyle);
+ modalContent.appendChild(el);
+ _modalEl.appendChild(modalContent);
+ fragment.appendChild(_modalEl);
+
+ this.modalElement = _modalEl;
+ this.Element = el;
+ this.appendRoot(fragment);
+
+ return this;
+ }
+ appendRoot(document: DocumentFragment) {
+ this.root.appendChild(document);
+ // 第一次渲染,open为true,显示弹窗
+ this.setOpen(this.open);
+ }
+ setOpen(open: boolean) {
+ this.open = open;
+ if (this.destroyOnClose) {
+ if (open) {
+ this.root.appendChild(this.modalElement);
+ } else {
+ this.cacheFragment.appendChild(this.modalElement);
+ }
+ return;
+ }
+ if (this.hideOnClose) {
+ if (open) {
+ this.modalElement.classList.remove('ui-modal-close');
+ } else {
+ this.modalElement.classList.add('ui-modal-close');
+ }
+ }
+ }
+ unMount() {
+ // 返回渲染的的Element, 然后删除modalElement
+ const fragment = document.createDocumentFragment();
+ fragment.appendChild(this.Element);
+ this.modalElement?.remove();
+
+ const modalState = modalStore.getState();
+ modalStore.setState({
+ modals: modalState.modals.filter((modal) => modal.id !== this.id),
+ });
+ this.isUse = false;
+ this.cacheFragment = new DocumentFragment();
+ return fragment;
+ }
+ /**
+ * 保留,暂时不用
+ * // TODO: 研究
+ * @param force
+ * @param opts
+ * @returns
+ */
+ reRender(force?: boolean, opts?: ModalOpts) {
+ if (force) {
+ this.modalElement?.remove?.();
+ this.modalElement = undefined;
+ if (!this.Element) return;
+ this.renderEl(this.Element);
+ }
+ }
+ async onMaskClose(e?: any) {
+ if (this.maskClose) {
+ this.setOpen(false);
+ this.onClose?.(e);
+ }
+ }
+ setDefaultStyle(key: keyof DefaultStyle, style: ObjCss) {
+ this.defaultStyle[key] = style as any;
+ }
+}
+
+// modal.render('#abc'||document.querySelector('#abc'));
+// modal.unmount();
diff --git a/apps/ui/src/components/modal/store.ts b/apps/ui/src/components/modal/store.ts
new file mode 100644
index 0000000..5db4ade
--- /dev/null
+++ b/apps/ui/src/components/modal/store.ts
@@ -0,0 +1,16 @@
+import { createStore } from '../../utils';
+import { Modal } from './modal';
+
+type ModeStore = {
+ modals: Modal[];
+ getModal: (id: string) => Modal | undefined;
+};
+
+export const modalStore = createStore((set, get) => {
+ return {
+ modals: [],
+ getModal: (id: string) => {
+ return get().modals.find((model) => model.id === id) as Modal;
+ },
+ };
+});
diff --git a/apps/ui/src/index.css b/apps/ui/src/index.css
new file mode 100644
index 0000000..9ba51f5
--- /dev/null
+++ b/apps/ui/src/index.css
@@ -0,0 +1 @@
+@import './components/modal/index.css';
\ No newline at end of file
diff --git a/apps/ui/src/index.ts b/apps/ui/src/index.ts
new file mode 100644
index 0000000..e8f0492
--- /dev/null
+++ b/apps/ui/src/index.ts
@@ -0,0 +1,9 @@
+import { Modal, modalStore, BlankModal, DialogModal } from './components/modal';
+
+export { Modal, modalStore, BlankModal, DialogModal };
+
+import { createDOMElement } from './utils/dom/create-dom-element';
+
+export { createDOMElement };
+
+export * from './utils';
diff --git a/apps/ui/src/utils/css.ts b/apps/ui/src/utils/css.ts
new file mode 100644
index 0000000..98d2492
--- /dev/null
+++ b/apps/ui/src/utils/css.ts
@@ -0,0 +1,19 @@
+import { serializeStyles } from '@emotion/serialize';
+
+export const getCssText = (obj?: ObjCss) => {
+ if (!obj) return '';
+ const serialized = serializeStyles([obj]);
+ return serialized.styles;
+};
+export const getCssTextObjs = (objs?: ObjCss[]) => {
+ if (!objs) return '';
+ const serialized = serializeStyles(objs);
+ return serialized.styles;
+};
+export type ObjCss = { [key: string]: number | string } & React.CSSProperties;
+export const obj2css = (el?: HTMLDivElement, obj?: ObjCss) => {
+ if (!el) return;
+ if (!obj) return;
+ const serialized = serializeStyles([obj as unknown as Record]);
+ el.style.cssText = serialized.styles;
+};
diff --git a/apps/ui/src/utils/dom/create-dom-element.ts b/apps/ui/src/utils/dom/create-dom-element.ts
new file mode 100644
index 0000000..908f873
--- /dev/null
+++ b/apps/ui/src/utils/dom/create-dom-element.ts
@@ -0,0 +1,82 @@
+type JSXElement = {
+ type: string | symbol;
+ props: Record;
+ key?: string | number;
+};
+export function createDOMElement(jsxElement: JSXElement) {
+ // 如果 jsxElement 是 null, undefined 或者是布尔值,则直接跳过处理
+ if (jsxElement == null || typeof jsxElement === 'boolean') {
+ console.warn('Invalid JSX element:', jsxElement);
+ return null;
+ }
+ const { type, props } = jsxElement;
+ // React Fragment 的处理
+ if (type === Symbol.for('react.fragment')) {
+ const fragment = document.createDocumentFragment();
+ if (props.children) {
+ if (Array.isArray(props.children)) {
+ props.children.forEach((child) => {
+ const childElement = createDOMElement(child);
+ if (childElement) {
+ fragment.appendChild(childElement);
+ }
+ });
+ } else {
+ const childElement = createDOMElement(props.children);
+ if (childElement) {
+ fragment.appendChild(childElement);
+ }
+ }
+ }
+ return fragment;
+ }
+
+ const domElement = document.createElement(type as string);
+
+ // 处理 props
+ Object.keys(props).forEach((prop) => {
+ if (prop === 'children') {
+ // 递归处理 children
+ if (Array.isArray(props.children)) {
+ props.children.forEach((child) => {
+ const childElement = createDOMElement(child);
+ if (childElement) {
+ domElement.appendChild(childElement);
+ }
+ });
+ } else if (typeof props.children === 'string') {
+ domElement.appendChild(document.createTextNode(props.children));
+ } else if (typeof props.children === 'object' && props.children !== null) {
+ const childElement = createDOMElement(props.children);
+ if (childElement) {
+ domElement.appendChild(childElement);
+ }
+ }
+ } else if (prop.startsWith('on')) {
+ // 处理事件监听器
+ const eventType = prop.slice(2).toLowerCase(); // 提取事件类型(如 onClick -> click)
+ domElement.addEventListener(eventType, props[prop]);
+ } else if (prop === 'style' && typeof props[prop] === 'object') {
+ // 处理 style 属性
+ Object.assign(domElement.style, props[prop]);
+ } else if (prop === 'dangerouslySetInnerHTML') {
+ // 处理 dangerouslySetInnerHTML
+ if (props[prop] && typeof props[prop].__html === 'string') {
+ domElement.innerHTML = props[prop].__html;
+ } else {
+ console.warn('Invalid dangerouslySetInnerHTML content:', props[prop]);
+ }
+ } else if (prop === 'ref') {
+ // React 的 ref 在手动创建 DOM 时没有用处
+ console.warn('Ref prop is not supported in manual DOM creation');
+ } else if (prop === 'key') {
+ // React 的 key 属性是用于虚拟 DOM 的,不影响实际 DOM
+ console.warn('Key prop is not applicable in manual DOM creation');
+ } else {
+ // 处理其他普通属性
+ domElement.setAttribute(prop, props[prop]);
+ }
+ });
+
+ return domElement;
+}
diff --git a/apps/ui/src/utils/extra.ts b/apps/ui/src/utils/extra.ts
new file mode 100644
index 0000000..70727c0
--- /dev/null
+++ b/apps/ui/src/utils/extra.ts
@@ -0,0 +1,11 @@
+export function extractKeysFromBraces(text: string) {
+ const regex = /\{\{\s*(.*?)\s*\}\}/g;
+ const keys: string[] = [];
+ let matches: RegExpExecArray | null;
+
+ while ((matches = regex.exec(text)) !== null) {
+ keys.push(matches[1]); // 获取{{}}中间的key
+ }
+
+ return keys;
+}
diff --git a/apps/ui/src/utils/history.ts b/apps/ui/src/utils/history.ts
new file mode 100644
index 0000000..d5edef5
--- /dev/null
+++ b/apps/ui/src/utils/history.ts
@@ -0,0 +1,22 @@
+type To = string | Location;
+type State = {
+ [key: string]: any;
+} & T;
+export const push = (to: To, state?: State, refresh = true) => {
+ const _history = window.history;
+ if (typeof to === 'string') {
+ // must key is default, so react navigate can work
+ _history.pushState({ key: 'default', usr: state }, '', to);
+ } else {
+ // const path = to.pathname;
+ _history.pushState({ key: 'default', usr: state }, '', to.pathname);
+ }
+ // must dispatch popstate event, so react navigate can work
+ refresh && window.dispatchEvent(new Event('popstate'));
+};
+export const history = {
+ push,
+};
+
+// import { createBrowserHistory } from 'history';
+// export const history = createBrowserHistory();
\ No newline at end of file
diff --git a/apps/ui/src/utils/index.ts b/apps/ui/src/utils/index.ts
new file mode 100644
index 0000000..66907db
--- /dev/null
+++ b/apps/ui/src/utils/index.ts
@@ -0,0 +1,7 @@
+export * from './css';
+export * from './extra';
+export * from './history';
+export * from './is-null';
+export * from './nanoid';
+export * from './store';
+export * from './query-el';
diff --git a/apps/ui/src/utils/is-null.ts b/apps/ui/src/utils/is-null.ts
new file mode 100644
index 0000000..39d63f5
--- /dev/null
+++ b/apps/ui/src/utils/is-null.ts
@@ -0,0 +1,9 @@
+export const isObjectNull = (value: any) => {
+ if (value === null || value === undefined) {
+ return true;
+ }
+ if (JSON.stringify(value) === '{}') {
+ return true;
+ }
+ return false;
+};
diff --git a/apps/ui/src/utils/nanoid.ts b/apps/ui/src/utils/nanoid.ts
new file mode 100644
index 0000000..28b3002
--- /dev/null
+++ b/apps/ui/src/utils/nanoid.ts
@@ -0,0 +1,14 @@
+import { customAlphabet } from 'nanoid';
+// 全小写的字母和数字
+const alphabetLetter = 'abcdefghijklmnopqrstuvwxyz';
+const alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
+export const alphabetLetterAll = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+
+export const generateId6 = customAlphabet(alphabet, 6);
+export const customNanoid = customAlphabet(alphabetLetterAll, 12);
+export const generateId = (size = 6) => {
+ return 'b-' + generateId6(size);
+};
+export const generate = (size = 6) => {
+ return customNanoid(size);
+};
diff --git a/apps/ui/src/utils/query-el.ts b/apps/ui/src/utils/query-el.ts
new file mode 100644
index 0000000..4c73595
--- /dev/null
+++ b/apps/ui/src/utils/query-el.ts
@@ -0,0 +1,54 @@
+import { obj2css, ObjCss } from './css';
+import parse from 'style-to-object';
+export type SelectEl = string | HTMLDivElement;
+export const querySelector = (el?: string | HTMLDivElement): HTMLDivElement | null => {
+ if (!el) {
+ return null;
+ }
+ if (typeof el === 'string') {
+ return document.querySelector(el) as HTMLDivElement;
+ }
+ return el;
+};
+
+export type ElStyle = ObjCss | string;
+/**
+ * el add class and style
+ * @param el
+ * @param className
+ * @param style
+ * @returns
+ */
+export const elAddCS = (el: HTMLDivElement, className?: string, style?: ElStyle) => {
+ if (!el) return;
+ if (className) {
+ el.classList.add(className);
+ }
+ if (style && typeof style === 'string') {
+ el.style.cssText = style;
+ } else if (style) {
+ obj2css(el, style as ObjCss);
+ }
+};
+
+/**
+ * 添加style的同时保留默认的的style
+ * @param el
+ * @param className
+ * @param style
+ * @param defaultStyle
+ * @returns
+ */
+export const elAddCS2 = (el: HTMLDivElement, className?: string, style?: ElStyle, defaultStyle?: ObjCss) => {
+ if (!el) return;
+ if (className) {
+ el.classList.add(className);
+ }
+ let _style: ObjCss = { ...defaultStyle };
+ if (style && typeof style === 'string') {
+ _style = { ...defaultStyle, ...parse(style) };
+ } else if (style && typeof style === 'object') {
+ _style = { ...defaultStyle, ...style };
+ }
+ obj2css(el, _style);
+};
diff --git a/apps/ui/src/utils/store.ts b/apps/ui/src/utils/store.ts
new file mode 100644
index 0000000..2bf6460
--- /dev/null
+++ b/apps/ui/src/utils/store.ts
@@ -0,0 +1,3 @@
+import { createStore } from 'zustand/vanilla';
+
+export { createStore };
diff --git a/apps/ui/tsconfig.json b/apps/ui/tsconfig.json
new file mode 100644
index 0000000..cea3ee7
--- /dev/null
+++ b/apps/ui/tsconfig.json
@@ -0,0 +1,23 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "lib": [
+ "DOM",
+ "ESNext"
+ ],
+ "moduleResolution": "Node",
+ "declaration": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": [
+ "src"
+ ],
+ "exclude": [
+ "node_modules",
+ "dist"
+ ]
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index eee4519..5ea5056 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -69,7 +69,72 @@ importers:
apps/store: {}
- apps/ui: {}
+ apps/ui:
+ dependencies:
+ dayjs:
+ specifier: ^1.11.13
+ version: 1.11.13
+ lodash-es:
+ specifier: ^4.17.21
+ version: 4.17.21
+ style-to-object:
+ specifier: ^1.0.8
+ version: 1.0.8
+ devDependencies:
+ '@emotion/serialize':
+ specifier: ^1.3.1
+ version: 1.3.2
+ '@rollup/plugin-commonjs':
+ specifier: ^28.0.1
+ version: 28.0.1(rollup@4.24.0)
+ '@rollup/plugin-node-resolve':
+ specifier: ^15.2.3
+ version: 15.3.0(rollup@4.24.0)
+ '@rollup/plugin-terser':
+ specifier: ^0.4.4
+ version: 0.4.4(rollup@4.24.0)
+ '@rollup/plugin-typescript':
+ specifier: ^11.1.6
+ version: 11.1.6(rollup@4.24.0)(tslib@2.8.0)(typescript@5.6.3)
+ '@types/postcss-import':
+ specifier: ^14.0.3
+ version: 14.0.3
+ '@types/react':
+ specifier: ^18.3.8
+ version: 18.3.11
+ autoprefixer:
+ specifier: ^10.4.20
+ version: 10.4.20(postcss@8.4.47)
+ cross-env:
+ specifier: ^7.0.3
+ version: 7.0.3
+ cssnano:
+ specifier: ^7.0.6
+ version: 7.0.6(postcss@8.4.47)
+ immer:
+ specifier: ^10.1.1
+ version: 10.1.1
+ nanoid:
+ specifier: ^5.0.7
+ version: 5.0.8
+ postcss-import:
+ specifier: ^16.1.0
+ version: 16.1.0(postcss@8.4.47)
+ rollup:
+ specifier: ^4.22.2
+ version: 4.24.0
+ rollup-plugin-postcss:
+ specifier: ^4.0.2
+ version: 4.0.2(postcss@8.4.47)
+ ts-lib:
+ specifier: ^0.0.5
+ version: 0.0.5
+ typescript:
+ specifier: ^5.6.2
+ version: 5.6.3
+ zustand:
+ specifier: 5.0.0-rc.2
+ version: 5.0.0-rc.2(@types/react@18.3.11)(immer@10.1.1)(react@18.3.1)
packages:
@@ -100,6 +165,21 @@ packages:
resolution: {integrity: sha512-7bPIliISedeIpnVKbzktysFYW5n56bN91kxuOj1XXKixmjbUHRUMvcXd4K2liN6MiR5ZqJtmtcPsZ6CebbGlEA==}
engines: {node: '>=16.0.0', yarn: '>=1.22.18'}
+ '@emotion/hash@0.9.2':
+ resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
+
+ '@emotion/memoize@0.9.0':
+ resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
+
+ '@emotion/serialize@1.3.2':
+ resolution: {integrity: sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==}
+
+ '@emotion/unitless@0.10.0':
+ resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==}
+
+ '@emotion/utils@1.4.1':
+ resolution: {integrity: sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==}
+
'@esbuild/aix-ppc64@0.21.5':
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
@@ -432,6 +512,55 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
+ '@rollup/plugin-commonjs@28.0.1':
+ resolution: {integrity: sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==}
+ engines: {node: '>=16.0.0 || 14 >= 14.17'}
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-node-resolve@15.3.0':
+ resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.78.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-terser@0.4.4':
+ resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-typescript@11.1.6':
+ resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.14.0||^3.0.0||^4.0.0
+ tslib: '*'
+ typescript: '>=3.7.0'
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ tslib:
+ optional: true
+
+ '@rollup/pluginutils@5.1.3':
+ resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
'@rollup/rollup-android-arm-eabi@4.24.0':
resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==}
cpu: [arm]
@@ -784,6 +913,10 @@ packages:
peerDependencies:
'@testing-library/dom': '>=7.21.4'
+ '@trysound/sax@0.2.0':
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+
'@types/aria-query@5.0.4':
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
@@ -829,6 +962,9 @@ packages:
'@types/parse-json@4.0.2':
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+ '@types/postcss-import@14.0.3':
+ resolution: {integrity: sha512-raZhRVTf6Vw5+QbmQ7LOHSDML71A5rj4+EqDzAbrZPfxfoGzFxMHRCq16VlddGIZpHELw0BG4G0YE2ANkdZiIQ==}
+
'@types/prop-types@15.7.13':
resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
@@ -841,6 +977,9 @@ packages:
'@types/react@18.3.11':
resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==}
+ '@types/resolve@1.20.2':
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+
'@types/semver@7.5.8':
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
@@ -1095,6 +1234,9 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
+ caniuse-api@3.0.0:
+ resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
+
caniuse-lite@1.0.30001669:
resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==}
@@ -1162,6 +1304,9 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ colord@2.9.3:
+ resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
@@ -1172,13 +1317,23 @@ packages:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
commander@8.3.0:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
engines: {node: '>= 12'}
+ commondir@1.0.1:
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ concat-with-sourcemaps@1.1.0:
+ resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==}
+
constants-browserify@1.0.0:
resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
@@ -1210,10 +1365,27 @@ packages:
typescript:
optional: true
+ cross-env@7.0.3:
+ resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
+ engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
+ hasBin: true
+
cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
+ css-declaration-sorter@6.4.1:
+ resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==}
+ engines: {node: ^10 || ^12 || >=14}
+ peerDependencies:
+ postcss: ^8.0.9
+
+ css-declaration-sorter@7.2.0:
+ resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ postcss: ^8.0.9
+
css-loader@6.11.0:
resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==}
engines: {node: '>= 12.13.0'}
@@ -1229,6 +1401,21 @@ packages:
css-select@4.3.0:
resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
+ css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+
+ css-tree@1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
+ engines: {node: '>=8.0.0'}
+
+ css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
css-what@6.1.0:
resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
engines: {node: '>= 6'}
@@ -1241,6 +1428,50 @@ packages:
engines: {node: '>=4'}
hasBin: true
+ cssnano-preset-default@5.2.14:
+ resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ cssnano-preset-default@7.0.6:
+ resolution: {integrity: sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ cssnano-utils@3.1.0:
+ resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ cssnano-utils@5.0.0:
+ resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ cssnano@5.1.15:
+ resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ cssnano@7.0.6:
+ resolution: {integrity: sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ csso@4.2.0:
+ resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
+ engines: {node: '>=8.0.0'}
+
+ csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
@@ -1310,6 +1541,9 @@ packages:
dom-serializer@1.4.1:
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
@@ -1317,9 +1551,16 @@ packages:
resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
engines: {node: '>= 4'}
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
domutils@2.8.0:
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+ domutils@3.1.0:
+ resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+
dot-case@3.0.4:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
@@ -1353,6 +1594,10 @@ packages:
entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
@@ -1418,6 +1663,12 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-walker@0.6.1:
+ resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
@@ -1425,6 +1676,9 @@ packages:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
+ eventemitter3@4.0.7:
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
@@ -1449,6 +1703,14 @@ packages:
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+ fdir@6.4.2:
+ resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
filesize@10.1.6:
resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==}
engines: {node: '>= 10.4.0'}
@@ -1505,6 +1767,9 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ generic-names@4.0.0:
+ resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==}
+
get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
@@ -1610,16 +1875,30 @@ packages:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
+ icss-replace-symbols@1.1.0:
+ resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==}
+
icss-utils@5.1.0:
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
+ immer@10.1.1:
+ resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==}
+
+ import-cwd@3.0.0:
+ resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==}
+ engines: {node: '>=8'}
+
import-fresh@3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
+ import-from@3.0.0:
+ resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==}
+ engines: {node: '>=8'}
+
indent-string@4.0.0:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
@@ -1678,10 +1957,16 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
+ is-module@1.0.0:
+ resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
+
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-reference@1.2.1:
+ resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
+
is-typed-array@1.1.13:
resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
engines: {node: '>= 0.4'}
@@ -1742,9 +2027,22 @@ packages:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
engines: {node: '>=6.11.5'}
+ loader-utils@3.3.1:
+ resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
+ engines: {node: '>= 12.13.0'}
+
lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
@@ -1777,6 +2075,15 @@ packages:
peerDependencies:
react: '>= 0.14.0'
+ mdn-data@2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+
+ mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+ mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+
media-typer@0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
@@ -1854,6 +2161,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ nanoid@5.0.8:
+ resolution: {integrity: sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==}
+ engines: {node: ^18 || >=20}
+ hasBin: true
+
negotiator@0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
@@ -1878,6 +2190,10 @@ packages:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
+ normalize-url@6.1.0:
+ resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
+ engines: {node: '>=10'}
+
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
@@ -1901,6 +2217,18 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
+ p-finally@1.0.0:
+ resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
+ engines: {node: '>=4'}
+
+ p-queue@6.6.2:
+ resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==}
+ engines: {node: '>=8'}
+
+ p-timeout@3.2.0:
+ resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
+ engines: {node: '>=8'}
+
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
@@ -1957,10 +2285,18 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
+ pify@5.0.0:
+ resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==}
+ engines: {node: '>=10'}
+
pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
@@ -1973,18 +2309,119 @@ packages:
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
engines: {node: '>= 0.4'}
+ postcss-calc@10.0.2:
+ resolution: {integrity: sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==}
+ engines: {node: ^18.12 || ^20.9 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.38
+
+ postcss-calc@8.2.4:
+ resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==}
+ peerDependencies:
+ postcss: ^8.2.2
+
+ postcss-colormin@5.3.1:
+ resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-colormin@7.0.2:
+ resolution: {integrity: sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-convert-values@5.1.3:
+ resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-convert-values@7.0.4:
+ resolution: {integrity: sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-discard-comments@5.1.2:
+ resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-discard-comments@7.0.3:
+ resolution: {integrity: sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-discard-duplicates@5.1.0:
+ resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-discard-duplicates@7.0.1:
+ resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-discard-empty@5.1.1:
+ resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-discard-empty@7.0.0:
+ resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-discard-overridden@5.1.0:
+ resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-discard-overridden@7.0.0:
+ resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
postcss-import@15.1.0:
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
engines: {node: '>=14.0.0'}
peerDependencies:
postcss: ^8.0.0
+ postcss-import@16.1.0:
+ resolution: {integrity: sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
postcss-js@4.0.1:
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
engines: {node: ^12 || ^14 || >= 16}
peerDependencies:
postcss: ^8.4.21
+ postcss-load-config@3.1.4:
+ resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
postcss-load-config@4.0.2:
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
@@ -2010,6 +2447,78 @@ packages:
webpack:
optional: true
+ postcss-merge-longhand@5.1.7:
+ resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-merge-longhand@7.0.4:
+ resolution: {integrity: sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-merge-rules@5.1.4:
+ resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-merge-rules@7.0.4:
+ resolution: {integrity: sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-minify-font-values@5.1.0:
+ resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-minify-font-values@7.0.0:
+ resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-minify-gradients@5.1.1:
+ resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-minify-gradients@7.0.0:
+ resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-minify-params@5.1.4:
+ resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-minify-params@7.0.2:
+ resolution: {integrity: sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-minify-selectors@5.2.1:
+ resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-minify-selectors@7.0.4:
+ resolution: {integrity: sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
postcss-modules-extract-imports@3.1.0:
resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
engines: {node: ^10 || ^12 || >= 14}
@@ -2034,16 +2543,189 @@ packages:
peerDependencies:
postcss: ^8.1.0
+ postcss-modules@4.3.1:
+ resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==}
+ peerDependencies:
+ postcss: ^8.0.0
+
postcss-nested@6.2.0:
resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
+ postcss-normalize-charset@5.1.0:
+ resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-charset@7.0.0:
+ resolution: {integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-normalize-display-values@5.1.0:
+ resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-display-values@7.0.0:
+ resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-normalize-positions@5.1.1:
+ resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-positions@7.0.0:
+ resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-normalize-repeat-style@5.1.1:
+ resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-repeat-style@7.0.0:
+ resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-normalize-string@5.1.0:
+ resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-string@7.0.0:
+ resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-normalize-timing-functions@5.1.0:
+ resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-timing-functions@7.0.0:
+ resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-normalize-unicode@5.1.1:
+ resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-unicode@7.0.2:
+ resolution: {integrity: sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-normalize-url@5.1.0:
+ resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-url@7.0.0:
+ resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-normalize-whitespace@5.1.1:
+ resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-normalize-whitespace@7.0.0:
+ resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-ordered-values@5.1.3:
+ resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-ordered-values@7.0.1:
+ resolution: {integrity: sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-reduce-initial@5.1.2:
+ resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-reduce-initial@7.0.2:
+ resolution: {integrity: sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-reduce-transforms@5.1.0:
+ resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-reduce-transforms@7.0.0:
+ resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
postcss-selector-parser@6.1.2:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'}
+ postcss-svgo@5.1.0:
+ resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-svgo@7.0.1:
+ resolution: {integrity: sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-unique-selectors@5.1.1:
+ resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-unique-selectors@7.0.3:
+ resolution: {integrity: sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
@@ -2062,6 +2744,10 @@ packages:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
+ promise.series@0.2.0:
+ resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==}
+ engines: {node: '>=0.12'}
+
proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
@@ -2154,6 +2840,10 @@ packages:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
@@ -2162,6 +2852,15 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rollup-plugin-postcss@4.0.2:
+ resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ postcss: 8.x
+
+ rollup-pluginutils@2.8.2:
+ resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
+
rollup@4.24.0:
resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -2173,6 +2872,9 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ safe-identifier@0.4.2:
+ resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==}
+
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -2226,6 +2928,9 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
+ smob@1.5.0:
+ resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -2240,6 +2945,10 @@ packages:
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ stable@0.1.8:
+ resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
+ deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
+
statuses@2.0.1:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
@@ -2248,6 +2957,9 @@ packages:
resolution: {integrity: sha512-9GVbtej6ZzPRUM7KRQ7848506FfHrUiJGqPuIQdoSJd09EmuEoLjmLAgEOmrHBQKgGYMaM7Vh9GsTLim6vwZTQ==}
hasBin: true
+ string-hash@1.1.3:
+ resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==}
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -2268,6 +2980,9 @@ packages:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
+ style-inject@0.3.0:
+ resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==}
+
style-loader@3.3.4:
resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==}
engines: {node: '>= 12.13.0'}
@@ -2277,6 +2992,18 @@ packages:
style-to-object@1.0.8:
resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
+ stylehacks@5.1.1:
+ resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ stylehacks@7.0.4:
+ resolution: {integrity: sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.31
+
sucrase@3.35.0:
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -2298,6 +3025,16 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ svgo@2.8.0:
+ resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ svgo@3.3.2:
+ resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
swc-loader@0.2.6:
resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==}
peerDependencies:
@@ -2373,6 +3110,9 @@ packages:
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+ ts-lib@0.0.5:
+ resolution: {integrity: sha512-pBLcwddLU22ib+vOAzhmTVqQZVN6FD8LtI0Rq4W6BZMOwhOpXqkKRi8f7P5F8KkuPzeunpimLbL0jznWsBeQHg==}
+
tslib@2.8.0:
resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
@@ -2557,6 +3297,24 @@ packages:
engines: {node: '>= 14'}
hasBin: true
+ zustand@5.0.0-rc.2:
+ resolution: {integrity: sha512-o2Nwuvnk8vQBX7CcHL8WfFkZNJdxB/VKeWw0tNglw8p4cypsZ3tRT7rTRTDNeUPFS0qaMBRSKe+fVwL5xpcE3A==}
+ engines: {node: '>=12.20.0'}
+ peerDependencies:
+ '@types/react': '>=18.0.0'
+ immer: '>=9.0.6'
+ react: '>=18.0.0'
+ use-sync-external-store: '>=1.2.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
+ use-sync-external-store:
+ optional: true
+
snapshots:
'@adobe/css-tools@4.4.0': {}
@@ -2593,6 +3351,22 @@ snapshots:
- '@chromatic-com/playwright'
- react
+ '@emotion/hash@0.9.2': {}
+
+ '@emotion/memoize@0.9.0': {}
+
+ '@emotion/serialize@1.3.2':
+ dependencies:
+ '@emotion/hash': 0.9.2
+ '@emotion/memoize': 0.9.0
+ '@emotion/unitless': 0.10.0
+ '@emotion/utils': 1.4.1
+ csstype: 3.1.3
+
+ '@emotion/unitless@0.10.0': {}
+
+ '@emotion/utils@1.4.1': {}
+
'@esbuild/aix-ppc64@0.21.5':
optional: true
@@ -2792,6 +3566,53 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
+ '@rollup/plugin-commonjs@28.0.1(rollup@4.24.0)':
+ dependencies:
+ '@rollup/pluginutils': 5.1.3(rollup@4.24.0)
+ commondir: 1.0.1
+ estree-walker: 2.0.2
+ fdir: 6.4.2(picomatch@4.0.2)
+ is-reference: 1.2.1
+ magic-string: 0.30.12
+ picomatch: 4.0.2
+ optionalDependencies:
+ rollup: 4.24.0
+
+ '@rollup/plugin-node-resolve@15.3.0(rollup@4.24.0)':
+ dependencies:
+ '@rollup/pluginutils': 5.1.3(rollup@4.24.0)
+ '@types/resolve': 1.20.2
+ deepmerge: 4.3.1
+ is-module: 1.0.0
+ resolve: 1.22.8
+ optionalDependencies:
+ rollup: 4.24.0
+
+ '@rollup/plugin-terser@0.4.4(rollup@4.24.0)':
+ dependencies:
+ serialize-javascript: 6.0.2
+ smob: 1.5.0
+ terser: 5.36.0
+ optionalDependencies:
+ rollup: 4.24.0
+
+ '@rollup/plugin-typescript@11.1.6(rollup@4.24.0)(tslib@2.8.0)(typescript@5.6.3)':
+ dependencies:
+ '@rollup/pluginutils': 5.1.3(rollup@4.24.0)
+ resolve: 1.22.8
+ typescript: 5.6.3
+ optionalDependencies:
+ rollup: 4.24.0
+ tslib: 2.8.0
+
+ '@rollup/pluginutils@5.1.3(rollup@4.24.0)':
+ dependencies:
+ '@types/estree': 1.0.6
+ estree-walker: 2.0.2
+ picomatch: 4.0.2
+ optionalDependencies:
+ rollup: 4.24.0
+
'@rollup/rollup-android-arm-eabi@4.24.0':
optional: true
@@ -3214,6 +4035,8 @@ snapshots:
dependencies:
'@testing-library/dom': 10.4.0
+ '@trysound/sax@0.2.0': {}
+
'@types/aria-query@5.0.4': {}
'@types/body-parser@1.19.5':
@@ -3263,6 +4086,10 @@ snapshots:
'@types/parse-json@4.0.2': {}
+ '@types/postcss-import@14.0.3':
+ dependencies:
+ postcss: 8.4.47
+
'@types/prop-types@15.7.13': {}
'@types/qs@6.9.16': {}
@@ -3274,6 +4101,8 @@ snapshots:
'@types/prop-types': 15.7.13
csstype: 3.1.3
+ '@types/resolve@1.20.2': {}
+
'@types/semver@7.5.8': {}
'@types/send@0.17.4':
@@ -3570,6 +4399,13 @@ snapshots:
camelcase-css@2.0.1: {}
+ caniuse-api@3.0.0:
+ dependencies:
+ browserslist: 4.24.0
+ caniuse-lite: 1.0.30001669
+ lodash.memoize: 4.1.2
+ lodash.uniq: 4.5.0
+
caniuse-lite@1.0.30001669: {}
case-sensitive-paths-webpack-plugin@2.4.0: {}
@@ -3634,16 +4470,26 @@ snapshots:
color-name@1.1.4: {}
+ colord@2.9.3: {}
+
colorette@2.0.20: {}
commander@2.20.3: {}
commander@4.1.1: {}
+ commander@7.2.0: {}
+
commander@8.3.0: {}
+ commondir@1.0.1: {}
+
concat-map@0.0.1: {}
+ concat-with-sourcemaps@1.1.0:
+ dependencies:
+ source-map: 0.6.1
+
constants-browserify@1.0.0: {}
content-disposition@0.5.4:
@@ -3673,12 +4519,24 @@ snapshots:
optionalDependencies:
typescript: 5.6.3
+ cross-env@7.0.3:
+ dependencies:
+ cross-spawn: 7.0.3
+
cross-spawn@7.0.3:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
+ css-declaration-sorter@6.4.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ css-declaration-sorter@7.2.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
css-loader@6.11.0(webpack@5.95.0(@swc/core@1.7.36)(esbuild@0.23.1)):
dependencies:
icss-utils: 5.1.0(postcss@8.4.47)
@@ -3700,12 +4558,131 @@ snapshots:
domutils: 2.8.0
nth-check: 2.1.1
+ css-select@5.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+
+ css-tree@1.1.3:
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: 0.6.1
+
+ css-tree@2.2.1:
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
+
+ css-tree@2.3.1:
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.2.1
+
css-what@6.1.0: {}
css.escape@1.5.1: {}
cssesc@3.0.0: {}
+ cssnano-preset-default@5.2.14(postcss@8.4.47):
+ dependencies:
+ css-declaration-sorter: 6.4.1(postcss@8.4.47)
+ cssnano-utils: 3.1.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-calc: 8.2.4(postcss@8.4.47)
+ postcss-colormin: 5.3.1(postcss@8.4.47)
+ postcss-convert-values: 5.1.3(postcss@8.4.47)
+ postcss-discard-comments: 5.1.2(postcss@8.4.47)
+ postcss-discard-duplicates: 5.1.0(postcss@8.4.47)
+ postcss-discard-empty: 5.1.1(postcss@8.4.47)
+ postcss-discard-overridden: 5.1.0(postcss@8.4.47)
+ postcss-merge-longhand: 5.1.7(postcss@8.4.47)
+ postcss-merge-rules: 5.1.4(postcss@8.4.47)
+ postcss-minify-font-values: 5.1.0(postcss@8.4.47)
+ postcss-minify-gradients: 5.1.1(postcss@8.4.47)
+ postcss-minify-params: 5.1.4(postcss@8.4.47)
+ postcss-minify-selectors: 5.2.1(postcss@8.4.47)
+ postcss-normalize-charset: 5.1.0(postcss@8.4.47)
+ postcss-normalize-display-values: 5.1.0(postcss@8.4.47)
+ postcss-normalize-positions: 5.1.1(postcss@8.4.47)
+ postcss-normalize-repeat-style: 5.1.1(postcss@8.4.47)
+ postcss-normalize-string: 5.1.0(postcss@8.4.47)
+ postcss-normalize-timing-functions: 5.1.0(postcss@8.4.47)
+ postcss-normalize-unicode: 5.1.1(postcss@8.4.47)
+ postcss-normalize-url: 5.1.0(postcss@8.4.47)
+ postcss-normalize-whitespace: 5.1.1(postcss@8.4.47)
+ postcss-ordered-values: 5.1.3(postcss@8.4.47)
+ postcss-reduce-initial: 5.1.2(postcss@8.4.47)
+ postcss-reduce-transforms: 5.1.0(postcss@8.4.47)
+ postcss-svgo: 5.1.0(postcss@8.4.47)
+ postcss-unique-selectors: 5.1.1(postcss@8.4.47)
+
+ cssnano-preset-default@7.0.6(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ css-declaration-sorter: 7.2.0(postcss@8.4.47)
+ cssnano-utils: 5.0.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-calc: 10.0.2(postcss@8.4.47)
+ postcss-colormin: 7.0.2(postcss@8.4.47)
+ postcss-convert-values: 7.0.4(postcss@8.4.47)
+ postcss-discard-comments: 7.0.3(postcss@8.4.47)
+ postcss-discard-duplicates: 7.0.1(postcss@8.4.47)
+ postcss-discard-empty: 7.0.0(postcss@8.4.47)
+ postcss-discard-overridden: 7.0.0(postcss@8.4.47)
+ postcss-merge-longhand: 7.0.4(postcss@8.4.47)
+ postcss-merge-rules: 7.0.4(postcss@8.4.47)
+ postcss-minify-font-values: 7.0.0(postcss@8.4.47)
+ postcss-minify-gradients: 7.0.0(postcss@8.4.47)
+ postcss-minify-params: 7.0.2(postcss@8.4.47)
+ postcss-minify-selectors: 7.0.4(postcss@8.4.47)
+ postcss-normalize-charset: 7.0.0(postcss@8.4.47)
+ postcss-normalize-display-values: 7.0.0(postcss@8.4.47)
+ postcss-normalize-positions: 7.0.0(postcss@8.4.47)
+ postcss-normalize-repeat-style: 7.0.0(postcss@8.4.47)
+ postcss-normalize-string: 7.0.0(postcss@8.4.47)
+ postcss-normalize-timing-functions: 7.0.0(postcss@8.4.47)
+ postcss-normalize-unicode: 7.0.2(postcss@8.4.47)
+ postcss-normalize-url: 7.0.0(postcss@8.4.47)
+ postcss-normalize-whitespace: 7.0.0(postcss@8.4.47)
+ postcss-ordered-values: 7.0.1(postcss@8.4.47)
+ postcss-reduce-initial: 7.0.2(postcss@8.4.47)
+ postcss-reduce-transforms: 7.0.0(postcss@8.4.47)
+ postcss-svgo: 7.0.1(postcss@8.4.47)
+ postcss-unique-selectors: 7.0.3(postcss@8.4.47)
+
+ cssnano-utils@3.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ cssnano-utils@5.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ cssnano@5.1.15(postcss@8.4.47):
+ dependencies:
+ cssnano-preset-default: 5.2.14(postcss@8.4.47)
+ lilconfig: 2.1.0
+ postcss: 8.4.47
+ yaml: 1.10.2
+
+ cssnano@7.0.6(postcss@8.4.47):
+ dependencies:
+ cssnano-preset-default: 7.0.6(postcss@8.4.47)
+ lilconfig: 3.1.2
+ postcss: 8.4.47
+
+ csso@4.2.0:
+ dependencies:
+ css-tree: 1.1.3
+
+ csso@5.0.5:
+ dependencies:
+ css-tree: 2.2.1
+
csstype@3.1.3: {}
dayjs@1.11.13: {}
@@ -3754,18 +4731,34 @@ snapshots:
domhandler: 4.3.1
entities: 2.2.0
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
domelementtype@2.3.0: {}
domhandler@4.3.1:
dependencies:
domelementtype: 2.3.0
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
domutils@2.8.0:
dependencies:
dom-serializer: 1.4.1
domelementtype: 2.3.0
domhandler: 4.3.1
+ domutils@3.1.0:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
dot-case@3.0.4:
dependencies:
no-case: 3.0.4
@@ -3792,6 +4785,8 @@ snapshots:
entities@2.2.0: {}
+ entities@4.5.0: {}
+
env-paths@2.2.1: {}
error-ex@1.3.2:
@@ -3887,12 +4882,18 @@ snapshots:
estraverse@5.3.0: {}
+ estree-walker@0.6.1: {}
+
+ estree-walker@2.0.2: {}
+
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.6
etag@1.8.1: {}
+ eventemitter3@4.0.7: {}
+
events@3.3.0: {}
express@4.21.1:
@@ -3949,6 +4950,10 @@ snapshots:
dependencies:
reusify: 1.0.4
+ fdir@6.4.2(picomatch@4.0.2):
+ optionalDependencies:
+ picomatch: 4.0.2
+
filesize@10.1.6: {}
fill-range@7.1.1:
@@ -4018,6 +5023,10 @@ snapshots:
function-bind@1.1.2: {}
+ generic-names@4.0.0:
+ dependencies:
+ loader-utils: 3.3.1
+
get-intrinsic@1.2.4:
dependencies:
es-errors: 1.3.0
@@ -4134,15 +5143,27 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ icss-replace-symbols@1.1.0: {}
+
icss-utils@5.1.0(postcss@8.4.47):
dependencies:
postcss: 8.4.47
+ immer@10.1.1: {}
+
+ import-cwd@3.0.0:
+ dependencies:
+ import-from: 3.0.0
+
import-fresh@3.3.0:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
+ import-from@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
indent-string@4.0.0: {}
inherits@2.0.4: {}
@@ -4184,8 +5205,14 @@ snapshots:
dependencies:
is-extglob: 2.1.1
+ is-module@1.0.0: {}
+
is-number@7.0.0: {}
+ is-reference@1.2.1:
+ dependencies:
+ '@types/estree': 1.0.6
+
is-typed-array@1.1.13:
dependencies:
which-typed-array: 1.1.15
@@ -4238,8 +5265,16 @@ snapshots:
loader-runner@4.3.0: {}
+ loader-utils@3.3.1: {}
+
lodash-es@4.17.21: {}
+ lodash.camelcase@4.3.0: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash.uniq@4.5.0: {}
+
lodash@4.17.21: {}
loose-envify@1.4.0:
@@ -4266,6 +5301,12 @@ snapshots:
dependencies:
react: 18.3.1
+ mdn-data@2.0.14: {}
+
+ mdn-data@2.0.28: {}
+
+ mdn-data@2.0.30: {}
+
media-typer@0.3.0: {}
memfs@3.5.3:
@@ -4327,6 +5368,8 @@ snapshots:
nanoid@3.3.7: {}
+ nanoid@5.0.8: {}
+
negotiator@0.6.3: {}
neo-async@2.6.2: {}
@@ -4344,6 +5387,8 @@ snapshots:
normalize-range@0.1.2: {}
+ normalize-url@6.1.0: {}
+
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
@@ -4364,6 +5409,17 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
+ p-finally@1.0.0: {}
+
+ p-queue@6.6.2:
+ dependencies:
+ eventemitter3: 4.0.7
+ p-timeout: 3.2.0
+
+ p-timeout@3.2.0:
+ dependencies:
+ p-finally: 1.0.0
+
package-json-from-dist@1.0.1: {}
param-case@3.0.4:
@@ -4412,8 +5468,12 @@ snapshots:
picomatch@2.3.1: {}
+ picomatch@4.0.2: {}
+
pify@2.3.0: {}
+ pify@5.0.0: {}
+
pirates@4.0.6: {}
polished@4.3.1:
@@ -4422,6 +5482,79 @@ snapshots:
possible-typed-array-names@1.0.0: {}
+ postcss-calc@10.0.2(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+ postcss-value-parser: 4.2.0
+
+ postcss-calc@8.2.4(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+ postcss-value-parser: 4.2.0
+
+ postcss-colormin@5.3.1(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ caniuse-api: 3.0.0
+ colord: 2.9.3
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-colormin@7.0.2(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ caniuse-api: 3.0.0
+ colord: 2.9.3
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-convert-values@5.1.3(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-convert-values@7.0.4(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-discard-comments@5.1.2(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ postcss-discard-comments@7.0.3(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
+ postcss-discard-duplicates@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ postcss-discard-duplicates@7.0.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ postcss-discard-empty@5.1.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ postcss-discard-empty@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ postcss-discard-overridden@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ postcss-discard-overridden@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
postcss-import@15.1.0(postcss@8.4.47):
dependencies:
postcss: 8.4.47
@@ -4429,11 +5562,25 @@ snapshots:
read-cache: 1.0.0
resolve: 1.22.8
+ postcss-import@16.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.8
+
postcss-js@4.0.1(postcss@8.4.47):
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.47
+ postcss-load-config@3.1.4(postcss@8.4.47):
+ dependencies:
+ lilconfig: 2.1.0
+ yaml: 1.10.2
+ optionalDependencies:
+ postcss: 8.4.47
+
postcss-load-config@4.0.2(postcss@8.4.47):
dependencies:
lilconfig: 3.1.2
@@ -4452,6 +5599,83 @@ snapshots:
transitivePeerDependencies:
- typescript
+ postcss-merge-longhand@5.1.7(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+ stylehacks: 5.1.1(postcss@8.4.47)
+
+ postcss-merge-longhand@7.0.4(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+ stylehacks: 7.0.4(postcss@8.4.47)
+
+ postcss-merge-rules@5.1.4(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ caniuse-api: 3.0.0
+ cssnano-utils: 3.1.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
+ postcss-merge-rules@7.0.4(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ caniuse-api: 3.0.0
+ cssnano-utils: 5.0.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
+ postcss-minify-font-values@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-font-values@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-gradients@5.1.1(postcss@8.4.47):
+ dependencies:
+ colord: 2.9.3
+ cssnano-utils: 3.1.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-gradients@7.0.0(postcss@8.4.47):
+ dependencies:
+ colord: 2.9.3
+ cssnano-utils: 5.0.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-params@5.1.4(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ cssnano-utils: 3.1.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-params@7.0.2(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ cssnano-utils: 5.0.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-selectors@5.2.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
+ postcss-minify-selectors@7.0.4(postcss@8.4.47):
+ dependencies:
+ cssesc: 3.0.0
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
postcss-modules-extract-imports@3.1.0(postcss@8.4.47):
dependencies:
postcss: 8.4.47
@@ -4473,16 +5697,175 @@ snapshots:
icss-utils: 5.1.0(postcss@8.4.47)
postcss: 8.4.47
+ postcss-modules@4.3.1(postcss@8.4.47):
+ dependencies:
+ generic-names: 4.0.0
+ icss-replace-symbols: 1.1.0
+ lodash.camelcase: 4.3.0
+ postcss: 8.4.47
+ postcss-modules-extract-imports: 3.1.0(postcss@8.4.47)
+ postcss-modules-local-by-default: 4.0.5(postcss@8.4.47)
+ postcss-modules-scope: 3.2.0(postcss@8.4.47)
+ postcss-modules-values: 4.0.0(postcss@8.4.47)
+ string-hash: 1.1.3
+
postcss-nested@6.2.0(postcss@8.4.47):
dependencies:
postcss: 8.4.47
postcss-selector-parser: 6.1.2
+ postcss-normalize-charset@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ postcss-normalize-charset@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+
+ postcss-normalize-display-values@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-display-values@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-positions@5.1.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-positions@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-repeat-style@5.1.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-repeat-style@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-string@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-string@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-timing-functions@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-timing-functions@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-unicode@5.1.1(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-unicode@7.0.2(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-url@5.1.0(postcss@8.4.47):
+ dependencies:
+ normalize-url: 6.1.0
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-url@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-whitespace@5.1.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-whitespace@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-ordered-values@5.1.3(postcss@8.4.47):
+ dependencies:
+ cssnano-utils: 3.1.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-ordered-values@7.0.1(postcss@8.4.47):
+ dependencies:
+ cssnano-utils: 5.0.0(postcss@8.4.47)
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-reduce-initial@5.1.2(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ caniuse-api: 3.0.0
+ postcss: 8.4.47
+
+ postcss-reduce-initial@7.0.2(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ caniuse-api: 3.0.0
+ postcss: 8.4.47
+
+ postcss-reduce-transforms@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
+ postcss-reduce-transforms@7.0.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+
postcss-selector-parser@6.1.2:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
+ postcss-svgo@5.1.0(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+ svgo: 2.8.0
+
+ postcss-svgo@7.0.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-value-parser: 4.2.0
+ svgo: 3.3.2
+
+ postcss-unique-selectors@5.1.1(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
+ postcss-unique-selectors@7.0.3(postcss@8.4.47):
+ dependencies:
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
postcss-value-parser@4.2.0: {}
postcss@8.4.47:
@@ -4504,6 +5887,8 @@ snapshots:
process@0.11.10: {}
+ promise.series@0.2.0: {}
+
proxy-addr@2.0.7:
dependencies:
forwarded: 0.2.0
@@ -4608,6 +5993,8 @@ snapshots:
resolve-from@4.0.0: {}
+ resolve-from@5.0.0: {}
+
resolve@1.22.8:
dependencies:
is-core-module: 2.15.1
@@ -4616,6 +6003,29 @@ snapshots:
reusify@1.0.4: {}
+ rollup-plugin-postcss@4.0.2(postcss@8.4.47):
+ dependencies:
+ chalk: 4.1.2
+ concat-with-sourcemaps: 1.1.0
+ cssnano: 5.1.15(postcss@8.4.47)
+ import-cwd: 3.0.0
+ p-queue: 6.6.2
+ pify: 5.0.0
+ postcss: 8.4.47
+ postcss-load-config: 3.1.4(postcss@8.4.47)
+ postcss-modules: 4.3.1(postcss@8.4.47)
+ promise.series: 0.2.0
+ resolve: 1.22.8
+ rollup-pluginutils: 2.8.2
+ safe-identifier: 0.4.2
+ style-inject: 0.3.0
+ transitivePeerDependencies:
+ - ts-node
+
+ rollup-pluginutils@2.8.2:
+ dependencies:
+ estree-walker: 0.6.1
+
rollup@4.24.0:
dependencies:
'@types/estree': 1.0.6
@@ -4644,6 +6054,8 @@ snapshots:
safe-buffer@5.2.1: {}
+ safe-identifier@0.4.2: {}
+
safer-buffer@2.1.2: {}
scheduler@0.23.2:
@@ -4722,6 +6134,8 @@ snapshots:
signal-exit@4.1.0: {}
+ smob@1.5.0: {}
+
source-map-js@1.2.1: {}
source-map-support@0.5.21:
@@ -4733,6 +6147,8 @@ snapshots:
space-separated-tokens@2.0.2: {}
+ stable@0.1.8: {}
+
statuses@2.0.1: {}
storybook@8.3.6:
@@ -4743,6 +6159,8 @@ snapshots:
- supports-color
- utf-8-validate
+ string-hash@1.1.3: {}
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -4767,6 +6185,8 @@ snapshots:
dependencies:
min-indent: 1.0.1
+ style-inject@0.3.0: {}
+
style-loader@3.3.4(webpack@5.95.0(@swc/core@1.7.36)(esbuild@0.23.1)):
dependencies:
webpack: 5.95.0(@swc/core@1.7.36)(esbuild@0.23.1)
@@ -4775,6 +6195,18 @@ snapshots:
dependencies:
inline-style-parser: 0.2.4
+ stylehacks@5.1.1(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
+ stylehacks@7.0.4(postcss@8.4.47):
+ dependencies:
+ browserslist: 4.24.0
+ postcss: 8.4.47
+ postcss-selector-parser: 6.1.2
+
sucrase@3.35.0:
dependencies:
'@jridgewell/gen-mapping': 0.3.5
@@ -4799,6 +6231,26 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ svgo@2.8.0:
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 4.3.0
+ css-tree: 1.1.3
+ csso: 4.2.0
+ picocolors: 1.1.1
+ stable: 0.1.8
+
+ svgo@3.3.2:
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 5.1.0
+ css-tree: 2.3.1
+ css-what: 6.1.0
+ csso: 5.0.5
+ picocolors: 1.1.1
+
swc-loader@0.2.6(@swc/core@1.7.36)(webpack@5.95.0(@swc/core@1.7.36)(esbuild@0.23.1)):
dependencies:
'@swc/core': 1.7.36
@@ -4883,6 +6335,8 @@ snapshots:
ts-interface-checker@0.1.13: {}
+ ts-lib@0.0.5: {}
+
tslib@2.8.0: {}
tween-functions@1.2.0: {}
@@ -5051,3 +6505,9 @@ snapshots:
yaml@1.10.2: {}
yaml@2.6.0: {}
+
+ zustand@5.0.0-rc.2(@types/react@18.3.11)(immer@10.1.1)(react@18.3.1):
+ optionalDependencies:
+ '@types/react': 18.3.11
+ immer: 10.1.1
+ react: 18.3.1