refactor: redesign🪄

This commit is contained in:
evenwan 2023-12-18 12:36:32 +08:00
parent 88e5dfec2a
commit c40f374164
35 changed files with 1718 additions and 606 deletions

9
auto-imports.d.ts vendored Normal file
View File

@ -0,0 +1,9 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import
export {}
declare global {
}

40
components.d.ts vendored Normal file
View File

@ -0,0 +1,40 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
export {}
declare module 'vue' {
export interface GlobalComponents {
ColorBar: typeof import('./src/components/color-picker/color-bar.vue')['default']
ColorCube: typeof import('./src/components/color-picker/color-cube.vue')['default']
ColorList: typeof import('./src/components/ColorList.vue')['default']
ColorPicker: typeof import('./src/components/color-picker/index.vue')['default']
ColorQuickslot: typeof import('./src/components/color-picker/color-quickslot.vue')['default']
Footer: typeof import('./src/components/mcg-layout/footer.vue')['default']
Header: typeof import('./src/components/mcg-layout/header.vue')['default']
HexInput: typeof import('./src/components/color-picker/hex-input.vue')['default']
Main: typeof import('./src/components/color-picker/main.vue')['default']
McgFooter: typeof import('./src/components/mcg-layout/mcg-footer.vue')['default']
McgHeader: typeof import('./src/components/mcg-layout/mcg-header.vue')['default']
Picker: typeof import('./src/components/color-picker/picker.vue')['default']
TAlert: typeof import('tdesign-vue-next')['Alert']
TButton: typeof import('tdesign-vue-next')['Button']
TCard: typeof import('tdesign-vue-next')['Card']
TConfigProvider: typeof import('tdesign-vue-next')['ConfigProvider']
TDivider: typeof import('tdesign-vue-next')['Divider']
TDrawer: typeof import('tdesign-vue-next')['Drawer']
TForm: typeof import('tdesign-vue-next')['Form']
TFormItem: typeof import('tdesign-vue-next')['FormItem']
TInput: typeof import('tdesign-vue-next')['Input']
TLink: typeof import('tdesign-vue-next')['Link']
TPopconfirm: typeof import('tdesign-vue-next')['Popconfirm']
TPopup: typeof import('tdesign-vue-next')['Popup']
TRadio: typeof import('tdesign-vue-next')['Radio']
TRadioGroup: typeof import('tdesign-vue-next')['RadioGroup']
TSpace: typeof import('tdesign-vue-next')['Space']
TSwitch: typeof import('tdesign-vue-next')['Switch']
TTextarea: typeof import('tdesign-vue-next')['Textarea']
}
}

View File

@ -5,17 +5,25 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="google" content="notranslate" />
<title>Minecraft 渐变颜色生成器</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Barlow:wght@400;700&family=Noto+Sans+SC:wght@200;400;700;900&family=Material+Symbols+Outlined&display=swap"
rel="stylesheet"
/>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-5VBQHF5MKV"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-5VBQHF5MKV');
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-5VBQHF5MKV");
</script>
</head>
<body>
<div id="app"></div>

View File

@ -1,5 +1,6 @@
{
"name": "minecraft-color-gradient-generator",
"version": "2.0.0",
"type": "module",
"license": "MIT",
"scripts": {
@ -8,18 +9,27 @@
"preview": "vite preview"
},
"dependencies": {
"@jaames/iro": "^5.5.2",
"color-stepper": "^2.0.0-beta2",
"lodash": "^4.17.21",
"pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.1",
"reset.css": "^2.0.2",
"view-ui-plus": "^1.3.14",
"tdesign-vue-next": "^1.7.1",
"vue": "^3.2.47",
"vuedraggable": "^4.1.0"
},
"devDependencies": {
"@types/lodash": "^4.14.202",
"@types/node": "^20.3.2",
"@vitejs/plugin-vue": "^4.1.0",
"less": "^4.1.3",
"sass": "^1.69.5",
"typescript": "^5.0.2",
"unplugin-auto-import": "^0.17.2",
"unplugin-vue-components": "^0.26.0",
"vite": "^4.3.9",
"vite-plugin-package-version": "^1.1.0",
"vue-tsc": "^1.4.2"
}
}
}

View File

@ -1,225 +1,45 @@
<template>
<div class="cg-container">
<mcg-header />
<main class="cg-main">
<color-list v-model="gradientColorList" />
<div class="cg-content">
<section class="cg-content--form">
<Input v-model="inputVal" type="textarea" :rows="2" size="large" placeholder="输入欲加渐变的文字..." show-word-limit maxlength="100" />
</section>
<div class="cg-configration">
<Form ref="formInline" :model="formData" :label-width="100" inline>
<FormItem>
<template #label>
<div>
字符模式
<Tooltip content="客户端发送使用&,服务端发送使用§" placement="top-start">
<Icon type="md-alert" />
</Tooltip>
</div>
</template>
<Switch v-model="formData.charMode">
<template #open><span>&</span></template>
<template #close><span>§</span></template>
</Switch>
</FormItem>
<FormItem>
<template #label>
<div>
兼容模式
<Tooltip content="仅限服务器不支持&amp;&num;前缀发送Hex颜色" placement="top-start" max-width="200">
<Icon type="md-alert" />
</Tooltip>
</div>
</template>
<Switch v-model="formData.compatibleMode" />
</FormItem>
<FormItem>
<template #label>
<div>
移除空格
<Tooltip content="移除空格/换行/制表符" placement="top-start">
<Icon type="md-alert" />
</Tooltip>
</div>
</template>
<Switch v-model="formData.clearSpaceChar" />
</FormItem>
</Form>
</div>
<Card title="预览" class="preview-card">
<template #extra>
<span style="cursor: pointer" @click="onCopyClickHandler">复制</span>
</template>
<div class="gradient-bar" :style="`background: linear-gradient(to right, ${gradientColorList.join(', ')});`"></div>
<div class="cg-result cg-result--preview">
<VNodeComp :content="resultVNodes" />
</div>
<Divider />
<div class="cg-result cg-result--raw" contenteditable>
{{ resultVal }}
</div>
</Card>
<t-space direction="vertical" style="width: 100%">
<div class="text-input-box">
<text-input v-model="appStore.processText" />
</div>
</main>
<div class="picker-box">
<color-picker>
<template #list-setting>
<t-button theme="default" @click="visibleSetting = true">设置</t-button>
</template>
</color-picker>
</div>
<div class="text-output-box">
<text-output v-model="appStore.processText" />
</div>
</t-space>
<mcg-footer />
<mcg-setting v-model="visibleSetting" />
</div>
</template>
<script lang="ts" setup>
import { computed, h, reactive, ref, VNode } from "vue";
import ColorList from "./components/ColorList.vue";
import McgHeader from "./components/McgHeader.vue";
import McgFooter from "./components/McgFooter.vue";
import { VNode as VNodeComp } from "./utils/vnode";
import { Message } from "view-ui-plus";
import { genColorGradients } from "./utils/util";
import { useAppStore } from "./plugins/store/modules/app";
const inputVal = ref("");
const gradientColorList = ref<string[]>([]);
const formData = reactive({
charMode: true,
compatibleMode: false,
clearSpaceChar: true,
});
import { ColorPicker } from "./components/color-picker";
import { McgHeader, McgFooter } from "./components/mcg-layout";
import { TextInput } from "./components/text-input";
import { TextOutput } from "./components/text-output";
import { McgSetting } from "./components/mcg-setting";
import { ref } from "vue";
const inputFormatVal = computed<string>(() => {
if (formData.clearSpaceChar) return inputVal.value.replace(/\t|\s|\r|\n/g, "");
else return inputVal.value;
});
const appStore = useAppStore();
const gradientBarCss = computed<string>(() => {
return `linear-gradient(${gradientColorList.value.join(", ")});`;
});
const resultVNodes = computed<VNode | VNode[]>(() => {
if (gradientColorList.value.length < 2) {
return inputFormatVal.value.split("").map((el) => h("span", el));
} else {
const gradientArray = genColorGradients(gradientColorList.value, inputFormatVal.value.length);
return inputFormatVal.value.split("").map((el, index) => {
return h("span", { style: { color: gradientArray[index] } }, el);
});
}
});
const resultVal = computed<string>(() => {
if (gradientColorList.value.length < 2) {
return inputFormatVal.value;
} else {
const gradientArray = genColorGradients(gradientColorList.value, inputFormatVal.value.length);
return inputFormatVal.value.split("").reduce((acc, cur, index) => {
const colorChar = formData.charMode ? "&" : "§";
if (formData.compatibleMode) {
const colorSplit = gradientArray[index]
.slice(1)
.split("")
.map((c) => `${colorChar}${c}`)
.join("");
return `${acc}${colorChar}x${colorSplit}${cur}`;
} else {
return `${acc}${colorChar}${gradientArray[index]}${cur}`;
}
}, "");
}
});
const onCopyClickHandler = () => {
if (resultVal.value.length === 0) {
Message.warning("请先输入文本哦");
return;
}
navigator.clipboard
.writeText(resultVal.value)
.then(() => Message.success("复制成功啦"))
.catch((err) => {
Message.error("复制失败,请尝试更新您的浏览器");
console.error(err);
});
};
const visibleSetting = ref(false);
</script>
<style lang="less" scoped>
@import url("./assets/styles/mixins.less");
<style lang="scss" scoped>
.cg-container {
width: 96%;
height: 100%;
max-width: 1024px;
margin: 0 auto;
.cg-main {
display: flex;
.cg-content {
flex: 1;
padding: 0 20px;
&--form {
margin-bottom: 20px;
}
}
.cg-configration {
width: 100%;
min-height: 60px;
border: 1px dashed #dcdee2;
border-radius: 10px;
margin-bottom: 20px;
display: flex;
align-items: center;
padding: 0 20px;
&:deep(.ivu-form-item) {
margin-bottom: 0 !important;
}
}
.preview-card {
:deep(.ivu-card-body) {
position: relative;
padding-top: 30px;
}
.gradient-bar {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 6px;
}
}
.cg-result {
width: 100%;
height: 150px;
overflow-x: hidden;
overflow-y: auto;
font-size: 20px;
line-height: 25px;
letter-spacing: 1px;
.custom-scrollbar();
outline: none;
border: none;
word-break: break-all;
&--preview {
height: 80px;
}
&--raw {
font-size: 14px;
line-height: 20px;
}
}
}
}
@media screen and (max-width: 600px) {
.cg-header {
height: 100px !important;
}
.cg-main {
flex-direction: column !important;
:deep(.color-list) {
flex-direction: row !important;
.color-item {
margin-right: 10px;
}
}
.cg-content {
padding: 0 !important;
}
}
width: 1200px;
}
</style>

View File

@ -1,23 +0,0 @@
html,
body,
#app {
width: 100%;
height: 100%;
}
.color-container__color-picker-popover {
width: 260px;
}
.ivu-color-picker {
.ivu-icon.ivu-icon-ios-arrow-down {
display: none;
}
.ivu-input-icon-normal + .ivu-input {
height: 38px !important;
padding: 7px !important;
}
.ivu-color-picker-input {
cursor: pointer;
}
}

View File

@ -1,19 +0,0 @@
.custom-scrollbar {
&::-webkit-scrollbar {
width: 10px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 10px;
background-color: rgba(0, 0, 0, 0.25);
}
&::-webkit-scrollbar-track {
background-color: #f6f6f6;
}
&::-webkit-scrollbar-thumb,
&::-webkit-scrollbar-track {
border: 0;
}
}

View File

@ -1,205 +0,0 @@
<template>
<div class="color-container">
<Poptip confirm title="是否删除所有颜色配置?" @on-ok="onDeleteAllHandler" placement="right" transfer>
<div class="color-item is-delete">
<div class="color-item--cube delete">
<Icon type="md-trash" />
<span>全部删除</span>
</div>
</div>
</Poptip>
<div class="color-item is-add">
<div class="color-item--cube add" @click="onAddColorHandler()">
<Icon type="md-add" />
<span>新增</span>
<div class="color-picker">
<ColorPicker ref="colorPickerAddRef" size="large" recommend @on-change="onColorPickerChangeHandler" transfer-class-name="color-container__color-picker-popover" transfer />
</div>
</div>
</div>
<draggable v-model="privateValue" tag="ul" class="color-list">
<template #item="{ element, index }">
<Dropdown class="color-item" trigger="contextMenu" placement="right" transfer>
<li class="color-item--cube" :style="`--cube-color: ${element}`">
<span class="hex">{{ element }}</span>
<section class="edit">
<ColorPicker v-model="privateValue[index]" transfer-class-name="color-container__color-picker-popover" transfer />
</section>
</li>
<template #list>
<DropdownMenu>
<DropdownItem style="color: #ed4014" @click="onDeleteColorHandler(index)">删除</DropdownItem>
</DropdownMenu>
</template>
</Dropdown>
</template>
</draggable>
</div>
</template>
<script lang="ts" setup>
import { computed, onMounted, ref } from "vue";
import { Message } from "view-ui-plus";
import draggable from "vuedraggable";
const props = withDefaults(defineProps<ColorListProps>(), {
modelValue: () => [],
});
const emit = defineEmits(["update:modelValue"]);
const colorPickerAddRef = ref();
const privateValue = computed({
get: () => props.modelValue,
set: (val) => emit("update:modelValue", val),
});
const onDeleteColorHandler = (index: number) => {
props.modelValue.splice(index, 1);
};
const onAddColorHandler = () => {
colorPickerAddRef.value?.toggleVisible();
};
const onDeleteAllHandler = () => {
Message.success("已删除所有颜色配置");
emit("update:modelValue", []);
};
const onColorPickerChangeHandler = (val: string) => {
if (props.modelValue.includes(val)) {
Message.warning("已存在相同颜色");
return;
}
props.modelValue.push(val.toUpperCase());
};
</script>
<script lang="ts">
interface ColorListProps {
modelValue: string[];
}
</script>
<style lang="less" scoped>
@import url("../assets/styles/mixins.less");
.color-container {
display: flex;
flex-direction: column;
max-height: 800px;
overflow-x: hidden;
overflow-y: auto;
position: relative;
.custom-scrollbar();
.color-list {
display: flex;
flex-direction: column;
.ivu-poptip {
width: 100%;
&:deep(.ivu-poptip-rel) {
width: 100%;
}
}
}
}
.color-item {
width: 200px;
margin: 0 10px 16px 10px;
&--cube {
width: 100%;
height: 60px;
border: 1px dashed #dcdee2;
border-radius: 10px;
overflow: hidden;
display: flex;
align-items: center;
transition: all 0.3s;
background-color: #fff;
cursor: default;
&:hover {
box-shadow: rgba(62, 57, 107, 0.3) 0px 6px 16px 0px;
.edit {
opacity: 1;
}
}
&::before {
content: "";
background-color: var(--cube-color);
display: block;
width: 10px;
height: 100%;
}
.hex {
color: #17233d;
font-size: 20px;
font-weight: 400;
margin-left: 10px;
}
.edit {
width: 60px;
height: 100%;
margin-left: auto;
transition: all 0.3s;
opacity: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 25px;
cursor: pointer;
&:deep(.ivu-color-picker) {
.ivu-icon.ivu-icon-ios-arrow-down {
display: none;
}
.ivu-input-icon-normal + .ivu-input {
padding-right: 7px;
}
.ivu-color-picker-input {
cursor: pointer;
}
}
}
}
&.is-delete {
user-select: none;
.color-item--cube {
height: 40px !important;
background-color: #f56c6c;
border: none;
color: #fff;
cursor: pointer;
display: flex;
justify-content: center;
&::before {
display: none;
}
.ivu-icon {
margin-right: 5px;
}
}
}
&.is-add {
position: sticky;
top: 0;
left: 0;
z-index: 2;
user-select: none;
.color-item--cube {
display: flex;
align-items: center;
justify-content: center;
font-size: 25px;
color: #17233d;
font-size: 20px;
font-weight: 700;
cursor: pointer;
&::before {
display: none;
}
.color-picker {
margin-left: 20px;
pointer-events: none;
}
}
}
}
</style>

View File

@ -1,39 +0,0 @@
<template>
<footer class="cg-footer">
<section class="cg-footer__section">
"Minecraft" Mojang Synergies AB 的商标
<Divider type="vertical" />
<a href="https://github.com/tuanzisama" target="_blank">
<Icon type="logo-github" />
@tuanzisama
</a>
<Divider type="vertical" />
<a
href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=_z8lAFy5g4oHy5j68j1Yx-FK6spjSDKd&authKey=oYJwq0XWxSZ9uWnN1VW1om1HD2bwnCD%2BXXrVEk5ciPy9V%2Byp8ywAre89%2F6z52ksC&noverify=0&group_code=202653244"
target="_blank"
>
<Icon type="md-color-wand" />
元界MC - 社交×互动×游戏
</a>
</section>
<section class="cg-footer__section">
<a href="https://www.mcbbs.net/thread-1004671-1-1.html" target="_blank"> [广告] PlayerTitle × 一款有点好用的玩家称号插件 </a>
</section>
</footer>
</template>
<script lang="ts" setup></script>
<style lang="less" scoped>
.cg-footer {
font-size: 12px;
text-align: center;
padding: 40px 0;
&__section {
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
}
}
</style>

View File

@ -1,16 +0,0 @@
<template>
<header class="cg-header">
<p>Minecraft 渐变颜色生成器</p>
</header>
</template>
<style lang="less" scoped>
.cg-header {
height: 200px;
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
font-weight: 700;
}
</style>

View File

@ -0,0 +1,42 @@
<template>
<div class="colorbar-box">
<div class="colorbar" ref="colorbarRef" :style="{ background: colorStore.getGradientCss }"></div>
</div>
</template>
<script lang="ts" setup>
import { ref } from "vue";
import { useColorStore } from "../../plugins/store/modules/color";
const colorStore = useColorStore();
const colorbarRef = ref<HTMLDivElement>();
</script>
<style lang="scss" scoped>
.colorbar-box {
width: 100%;
margin-bottom: 20px;
.colorbar {
width: 100%;
height: 40px;
border-radius: 5px;
border: 2px solid #ffffff;
outline: 2px solid #17233d;
background-color: #66ccff;
position: relative;
.colorbar-stop {
position: absolute;
top: 50%;
transform: translateY(-50%);
left: var(--stop-position);
background-color: var(--color-hex);
width: 10px;
height: 140%;
border-radius: 5px;
border: 3px solid #ffffff;
outline: 2px solid #17233d;
cursor: move;
}
}
}
</style>

View File

@ -0,0 +1,42 @@
<template>
<ul class="color-cube-box">
<t-popup v-for="(item, index) in colorList" :key="index" :content="item.label" :delay="[200, 50]" hide-empty-popup>
<li class="color-cube" :style="`--color-hex: ${item.color}`" @click="onCubeClickHandler(item)"></li>
</t-popup>
</ul>
</template>
<script lang="ts" setup>
import colorList, { ColorItem } from "./colors";
const emit = defineEmits<ColorCubeEmit>();
const onCubeClickHandler = (item: ColorItem) => {
emit("on-change", item.color);
};
</script>
<script lang="ts">
export interface ColorCubeEmit {
(e: "on-change", value: HexColorString): void;
}
</script>
<style lang="scss" scoped>
.color-cube-box {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.color-cube {
width: 40px;
height: 40px;
border: 3px solid #ffffff;
outline: 2px solid #17233d;
background-color: var(--color-hex);
margin-right: 10px;
margin-bottom: 15px;
border-radius: 5px;
cursor: pointer;
}
}
</style>

View File

@ -0,0 +1,25 @@
const colorList: ColorItem[] = [
{ label: "&0", color: "#000000" },
{ label: "&1", color: "#0000AA" },
{ label: "&2", color: "#00AA00" },
{ label: "&3", color: "#00AAAA" },
{ label: "&4", color: "#AA0000" },
{ label: "&5", color: "#AA00AA" },
{ label: "&6", color: "#FFAA00" },
{ label: "&7", color: "#AAAAAA" },
{ label: "&8", color: "#555555" },
{ label: "&9", color: "#5555FF" },
{ label: "&a", color: "#55FF55" },
{ label: "&b", color: "#55FFFF" },
{ label: "&c", color: "#FF5555" },
{ label: "&d", color: "#FF55FF" },
{ label: "&e", color: "#FFFF55" },
{ label: "&f", color: "#ffffff" },
];
export default colorList;
export interface ColorItem {
label?: string;
color: HexColorString;
}

View File

@ -0,0 +1,71 @@
<template>
<div class="hex-input">
<t-input
v-model="privateValue"
label="#"
maxlength="6"
placeholder="16进制颜色"
size="large"
@paste="onInputPasteHandler"
@change="onInputChangeHandler"
/>
</div>
</template>
<script lang="ts" setup>
import { MessagePlugin } from "tdesign-vue-next";
import { computed } from "vue";
const props = withDefaults(defineProps<HexInputProps>(), {});
const emit = defineEmits<HexInputEmit>();
const privateValue = computed({
get: () => props.modelValue?.replace(/#/g, "") as string,
set: (val) => emit("update:modelValue", `#${val}`),
});
const hexColorRegExp = /#?[a-fA-F0-9]{6}/;
const onInputPasteHandler = ({ e, pasteValue }: { e: ClipboardEvent; pasteValue: string }) => {
if (pasteValue === "") {
MessagePlugin.warning({ content: "请粘贴文本", placement: "bottom" });
e.preventDefault();
return;
}
if (!hexColorRegExp.test(pasteValue)) {
MessagePlugin.warning({ content: "请粘贴16进制文字", placement: "bottom" });
e.preventDefault();
return;
}
privateValue.value = pasteValue.replace(/#/g, "") as HexColorString;
};
const onInputChangeHandler = (_val: string | number) => {
const value = String(_val);
if (value.length === 6 && hexColorRegExp.test(value)) {
emit("on-change", `#${privateValue.value}` as HexColorString);
}
};
</script>
<script lang="ts">
export interface HexInputProps {
modelValue: HexColorString | "";
}
export interface HexInputEmit {
(e: "update:modelValue", value: HexInputProps["modelValue"]): void;
(e: "on-change", value: HexColorString): void;
}
</script>
<style lang="scss" scoped>
.hex-input {
width: 100%;
&:deep(.t-input__inner) {
font-family: "Barlow";
font-weight: 700;
}
}
</style>

View File

@ -0,0 +1,3 @@
import PickerMain from "./main.vue";
export const ColorPicker = PickerMain;

View File

@ -0,0 +1,190 @@
<template>
<t-card bordered class="color-picker-wrapper">
<div class="color-picker-header">
<color-bar />
<picker ref="pickerRef" v-model="colorStore.selectColorList[colorStore.selectedIndex]">
<draggable v-model="colorStore.selectColorList" tag="ul" class="color-list">
<template #item="{ element, index }">
<li
class="color-cell"
:style="`--color-hex: ${element}`"
:data-index="index + 1"
:class="{ 'color-cell--active': colorStore.selectedIndex === index }"
@click="onColorCellClickHandler(element, index)"
>
<div class="color-cell__cube"></div>
<hex-input v-model="colorStore.selectColorList[index]" style="width: 150px" />
<span class="color-cell__delete" @click.stop="onColorCellDeleteHandler(element, index)">×</span>
</li>
</template>
</draggable>
</picker>
</div>
<div class="color-picker-footer">
<t-space class="color-setting" size="10px">
<slot name="setting"> </slot>
</t-space>
<t-space class="list-setting" size="10px">
<t-button @click="onAddColorClickHandler">新增</t-button>
<t-popconfirm content="确认重置吗" @confirm="onResetClickHandler">
<t-button theme="danger">重置</t-button>
</t-popconfirm>
<slot name="list-setting"> </slot>
</t-space>
</div>
</t-card>
</template>
<script lang="ts" setup>
import { onMounted, ref } from "vue";
import picker, { PickerExpose } from "./picker.vue";
import { useColorStore } from "../../plugins/store/modules/color";
import HexInput from "./hex-input.vue";
import draggable from "vuedraggable";
const pickerRef = ref<PickerExpose>();
const colorStore = useColorStore();
onMounted(() => {
colorStore.resetSelectColorList();
});
const onColorCellClickHandler = (item: HexColorString, index: number) => {
colorStore.selectedIndex = index;
pickerRef.value?.setColor(item);
};
const onColorCellDeleteHandler = (item: HexColorString, index: number) => {
colorStore.pullColorListAt(index);
};
const onAddColorClickHandler = () => {
colorStore.addSelectColorList();
};
const onResetClickHandler = () => {
colorStore.resetSelectColorList();
};
</script>
<style lang="scss" scoped>
.color-picker-wrapper {
width: 100%;
.color-picker-header {
width: 100%;
margin-bottom: 20px;
padding-bottom: 20px;
border-bottom: 1px solid #d4d7de;
display: flex;
flex-direction: column;
}
.color-picker-footer {
display: flex;
.list-setting {
margin-left: auto;
flex-shrink: 0;
}
}
}
.color-list {
width: 100%;
max-height: 400px;
overflow-y: auto;
@include custom-scrollbar();
.color-cell {
width: 100%;
margin-bottom: 10px;
border-radius: 5px;
padding: 10px 10px 10px 20px;
@include flex-center;
transition: all 0.3s;
border: 1px solid transparent;
position: relative;
&:last-child {
margin-bottom: 0;
}
&:last-child,
&--active {
&::after {
opacity: 0;
}
}
&::before {
content: "#" attr(data-index);
position: absolute;
top: 50%;
right: 70px;
transform: translateY(-50%) skewX(-10deg);
font-size: 35px;
font-family: "Barlow";
font-weight: 700;
color: #f0f1f2;
user-select: none;
pointer-events: none;
transition: color 0.3s;
}
&::after {
content: "";
position: absolute;
display: block;
width: 95%;
height: 1px;
background-color: #ebeef5;
left: 50%;
bottom: 0;
transform: translateX(-50%);
}
&--active {
background: #f0f1f2;
border: 1px solid #d9dcdf;
.color-cell__cube {
border: 3px solid #ffffff;
outline: 2px solid #17233d;
}
.color-cell__delete {
color: #a7aeb9;
}
&::before {
color: #ffffff;
}
}
&__cube {
width: 35px;
height: 35px;
background-color: var(--color-hex);
border-radius: 5px;
cursor: pointer;
margin-right: 20px;
flex-shrink: 0;
border: 3px solid #e4e7ed;
outline: 2px solid transparent;
transition: all 0.3s;
}
&__text {
font-weight: 700;
font-size: 18px;
transition: all 0.3s;
}
&__delete {
color: #dfe1e6;
cursor: pointer;
margin-left: auto;
font-weight: 700;
font-size: 30px;
padding-right: 5px;
transition: color 0.3s;
user-select: none;
&:hover {
color: #17233d;
}
}
}
}
</style>

View File

@ -0,0 +1,117 @@
<template>
<div class="picker-container">
<div class="picker--box" ref="boxPickerRef"></div>
<div class="picker-options">
<div class="color-input">
<hex-input v-model="privateValue" @on-change="onHexInputChangeHandler" />
</div>
<color-quickslot @on-change="onColorQuickSlotChangeHandler" />
</div>
<slot />
</div>
</template>
<script lang="ts" setup>
import iro from "@jaames/iro";
import HexInput from "./hex-input.vue";
import { computed, onMounted, ref } from "vue";
const boxPickerRef = ref<HTMLDivElement>();
const boxPickerInstance = ref();
const props = withDefaults(defineProps<PickerProps>(), {
modelValue: "#FFFFFF",
});
const emit = defineEmits<PickerEmit>();
const privateValue = computed({
get: () => props.modelValue,
set: (val) => emit("update:modelValue", val),
});
onMounted(() => {
initializeBoxPicker();
});
const initializeBoxPicker = () => {
if (boxPickerRef.value) {
boxPickerInstance.value = iro.ColorPicker(boxPickerRef.value, {
layout: [
{ component: iro.ui.Box, options: { boxHeight: 200 } },
{ component: iro.ui.Slider, options: { sliderType: "hue" } },
],
width: 350,
color: privateValue.value,
});
boxPickerInstance.value.on("color:change", (iroColor: iro.Color) => {
privateValue.value = iroColor.hexString as HexColorString;
});
}
};
const onHexInputChangeHandler = (val: HexColorString) => {
setColor(val);
console.info("onHexInputChangeHandler", val);
privateValue.value = val;
};
const onColorQuickSlotChangeHandler = (val: HexColorString) => {
setColor(val);
privateValue.value = val;
};
const setColor = (color: HexColorString) => {
boxPickerInstance.value?.setColors([color]);
};
defineExpose<PickerExpose>({
setColor,
});
</script>
<script lang="ts">
export interface PickerProps {
modelValue?: HexColorString | "";
}
export interface PickerExpose {
setColor: (color: HexColorString) => void;
}
export interface PickerEmit {
(e: "update:modelValue", value: PickerProps["modelValue"]): void;
}
</script>
<style lang="scss" scoped>
.picker-container {
display: flex;
}
.picker--box {
margin-right: 20px;
&:deep(.IroBox) {
border-radius: 6px !important;
}
&:deep(.IroColorPicker),
&:deep(.IroSlider),
&:deep(.IroSliderGradient) {
border-radius: 6px !important;
}
}
.picker-options {
display: flex;
flex-direction: column;
flex-shrink: 0;
width: 350px;
$gap-size: 20px;
margin-right: $gap-size;
padding-right: $gap-size;
border-right: 1px dashed #dcdfe6;
.color-input {
margin-bottom: 20px;
}
}
</style>

View File

@ -0,0 +1,19 @@
<template>
<footer class="cg-footer">
<t-space direction="vertical" size="10px">
<t-link href="https://github.com/tuanzisama" target="_blank" theme="primary" style="font-weight: bold"> Github@tuanzisama </t-link>
<t-link href="https://www.mcbbs.net/thread-1004671-1-1.html" target="_blank" theme="warning">
[广告] PlayerTitle × 一款有点好用的玩家称号插件
</t-link>
<p>"Minecraft" Mojang Synergies AB 的商标</p>
</t-space>
</footer>
</template>
<style lang="scss" scoped>
.cg-footer {
font-size: 12px;
text-align: center;
padding: 40px 0;
}
</style>

View File

@ -0,0 +1,42 @@
<template>
<header class="cg-header">
<p class="cg-header__title" :data-version="pkgVersion + modeText">Minecraft 渐变颜色生成器</p>
</header>
</template>
<script lang="ts" setup>
import { computed } from "vue";
const pkgVersion = computed(() => {
return import.meta.env.PACKAGE_VERSION;
});
const modeText = computed(() => {
return import.meta.env.DEV ? "-SNAPSHOT" : "";
});
</script>
<style lang="scss" scoped>
.cg-header {
height: 120px;
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
font-weight: 700;
&__title {
position: relative;
&::after {
content: "v" attr(data-version);
position: absolute;
top: 0;
left: calc(100% + 5px);
padding: 2px 4px;
border-radius: 5px;
background-color: #f0f2f5;
font-size: 12px;
white-space: nowrap;
}
}
}
</style>

View File

@ -0,0 +1,5 @@
import Header from "./header.vue";
import Footer from "./footer.vue";
export const McgHeader = Header;
export const McgFooter = Footer;

View File

@ -0,0 +1,3 @@
import Main from "./main.vue";
export const McgSetting = Main;

View File

@ -0,0 +1,92 @@
<template>
<t-drawer
v-model:visible="privateValue"
header="设置"
size="600px"
:close-on-overlay-click="false"
:close-on-esc-keydown="false"
@confirm="onConfirmHandler"
>
<t-form class="setting-form" :data="formData">
<t-form-item label="字符模式" name="charMode">
<t-radio-group v-model="formData.charMode">
<t-radio value="&">&</t-radio>
<t-radio value="§">§</t-radio>
</t-radio-group>
</t-form-item>
<t-form-item label="兼容模式" name="compatibleMode" class="warped-formitem">
<t-switch v-model="formData.compatibleMode" />
<p class="setting-item-summary">仅限服务器不支持&amp;&num;前缀发送Hex颜色</p>
</t-form-item>
<t-form-item label="移除空格" name="clearSpaceCharacter" class="warped-formitem">
<t-switch v-model="formData.clearSpaceCharacter" />
<p class="setting-item-summary">移除空格/换行/制表符</p>
</t-form-item>
</t-form>
</t-drawer>
</template>
<script lang="ts" setup>
import { computed, reactive, watch } from "vue";
import { AppStoreState, useAppStore } from "../../plugins/store/modules/app";
import { MessagePlugin } from "tdesign-vue-next";
const props = withDefaults(defineProps<McgSettingProps>(), {
modelValue: false,
});
const emit = defineEmits<McgSettingEmit>();
const appStore = useAppStore();
const formData = reactive<AppStoreState["setting"]>({
charMode: "&",
compatibleMode: false,
clearSpaceCharacter: true,
});
watch(
() => props.modelValue,
(newVal) => {
if (newVal) {
formData.charMode = appStore.setting.charMode;
formData.compatibleMode = appStore.setting.compatibleMode;
formData.clearSpaceCharacter = appStore.setting.clearSpaceCharacter;
}
}
);
const privateValue = computed({
get: () => props.modelValue,
set: (val) => emit("update:modelValue", val),
});
const onConfirmHandler = () => {
appStore.saveSetting(formData);
privateValue.value = false;
MessagePlugin.success({ content: "保存成功", placement: "bottom" });
};
</script>
<script lang="ts">
export interface McgSettingProps {
modelValue: boolean;
}
export interface McgSettingEmit {
(e: "update:modelValue", value: McgSettingProps["modelValue"]): void;
}
</script>
<style lang="scss" scoped>
.setting-form {
.setting-item-summary {
flex-basis: 100%;
margin-top: 10px;
padding: 5px 10px;
background: #f5f7fa;
border: 1px solid #dcdfe6;
border-radius: 5px;
}
.warped-formitem:deep(.t-form__controls-content) {
flex-wrap: wrap;
}
}
</style>

View File

@ -0,0 +1,3 @@
import Main from "./main.vue";
export const TextInput = Main;

View File

@ -0,0 +1,37 @@
<template>
<div class="text-input-wrapper">
<t-textarea v-model="privateValue" placeholder="输入文字..." maxlength="200" :autosize="{ minRows: 3, maxRows: 8 }" />
</div>
</template>
<script lang="ts" setup>
import { computed } from "vue";
const props = withDefaults(defineProps<TextInputProps>(), {});
const emit = defineEmits<TextInputEmit>();
const privateValue = computed({
get: () => props.modelValue,
set: (val) => emit("update:modelValue", val),
});
</script>
<script lang="ts">
export interface TextInputProps {
modelValue: string;
}
export interface TextInputEmit {
(e: "update:modelValue", value: TextInputProps["modelValue"]): void;
}
</script>
<style lang="scss" scoped>
.text-input-wrapper {
width: 100%;
&:deep(.t-textarea__inner) {
font-size: 18px;
font-weight: 700;
font-family: "Barlow", "Noto Sans SC", sans-serif;
}
}
</style>

View File

@ -0,0 +1,3 @@
import Main from "./main.vue";
export const TextOutput = Main;

View File

@ -0,0 +1,111 @@
<template>
<div class="text-output-wrapper">
<t-card title="生成" header-bordered>
<template #actions>
<span style="cursor: pointer" @click="onCopyClickHandler">复制</span>
</template>
<div class="text-output text-output--preview">
<v-node-component :content="resultVNode" />
</div>
<t-divider />
<div class="text-output text-output--raw" v-text="resultHTML" contenteditable></div>
</t-card>
</div>
</template>
<script lang="ts" setup>
import { computed, h } from "vue";
import { VNode as vNodeComponent } from "../../utils/vnode";
import { genColorGradients } from "../../utils/util";
import { useAppStore } from "../../plugins/store/modules/app";
import { useColorStore } from "../../plugins/store/modules/color";
import { MessagePlugin } from "tdesign-vue-next";
const appStore = useAppStore();
const colorStore = useColorStore();
const gradientList = computed(() => {
return genColorGradients(colorStore.selectColorList, appStore.processText.length);
});
const resultContent = computed<Record<"code" | "color" | "char", string>[]>(() => {
return appStore.processText.split("").map((item, index) => {
const color = gradientList.value[index];
if (appStore.setting.compatibleMode) {
const colorSplit = color
.slice(1)
.split("")
.reduce((acc, cur) => `${acc}${appStore.setting.charMode}${cur}`, "");
return { code: `${appStore.setting.charMode}x${colorSplit}${item}`, color, char: item };
} else {
return { code: `${appStore.setting.charMode}${color}`, color, char: item };
}
});
});
const resultText = computed<string>(() => {
if (colorStore.selectColorList.length < 2) {
return appStore.processText;
} else {
return resultContent.value.map((item) => item.char).join("");
}
});
const resultVNode = computed(() => {
if (colorStore.selectColorList.length < 2) {
return appStore.processText.split("").map((el) => h("span", el));
}
return resultContent.value.map((item) => h("span", { style: { color: item.color } }, item.char));
});
const resultHTML = computed(() => {
if (colorStore.selectColorList.length < 2) {
return appStore.processText;
}
return resultContent.value.map((item) => `${item.code}${item.char}`).join("");
});
const onCopyClickHandler = () => {
if (appStore.processText.length === 0) {
MessagePlugin.warning({ content: "请先输入文本", placement: "bottom" });
return;
}
navigator.clipboard
.writeText(resultText.value)
.then(() => MessagePlugin.success({ content: "复制成功啦", placement: "bottom" }))
.catch((err) => {
MessagePlugin.error({ content: "复制失败,请尝试更新您的浏览器", placement: "bottom" });
console.error(err);
});
};
</script>
<style lang="scss" scoped>
.text-output-wrapper {
width: 100%;
}
.text-output {
width: 100%;
height: 150px;
overflow-x: hidden;
overflow-y: auto;
font-size: 20px;
line-height: 25px;
letter-spacing: 1px;
@include custom-scrollbar();
outline: none;
border: none;
word-break: break-all;
&--preview {
height: 80px;
}
&--raw {
font-size: 14px;
line-height: 20px;
&:deep(.color-tag) {
color: var(--color-hex);
}
}
}
</style>

View File

@ -1,8 +1,12 @@
import { createApp } from "vue";
import ViewUIPlus from "view-ui-plus";
import App from "./App.vue";
import "view-ui-plus/dist/styles/viewuiplus.css";
import "reset.css";
import "./assets/styles/main.less";
import store from "./plugins/store";
createApp(App).use(ViewUIPlus).mount("#app");
import "reset.css";
import "./styles/global.scss";
import "tdesign-vue-next/es/style/index.css";
import App from "./App.vue";
const app = createApp(App);
app.use(store);
app.mount("#app");

View File

@ -0,0 +1,7 @@
import { createPinia } from "pinia";
import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);
export default pinia;

View File

@ -0,0 +1,43 @@
import { defineStore } from "pinia";
export interface AppStoreState {
processText: string;
setting: {
/**
*
* 使&使§
*/
charMode: "&" | "§";
/**
*
* &amp;&num;Hex颜色
*/
compatibleMode: boolean;
/**
*
* //
*/
clearSpaceCharacter: boolean;
};
}
export const useAppStore = defineStore("app", {
state: (): AppStoreState => ({
processText: "",
setting: {
charMode: "&",
compatibleMode: false,
clearSpaceCharacter: true,
},
}),
actions: {
saveSetting(data: AppStoreState["setting"]) {
this.setting.charMode = data.charMode;
this.setting.compatibleMode = data.compatibleMode;
this.setting.clearSpaceCharacter = data.clearSpaceCharacter;
},
},
persist: {
paths: ["setting"],
},
});

View File

@ -0,0 +1,44 @@
import { defineStore } from "pinia";
export interface ColorState {
selectColorList: HexColorString[];
selectedIndex: number;
}
export const useColorStore = defineStore("color", {
state: (): ColorState => ({
selectColorList: [],
selectedIndex: 0,
}),
getters: {
getGradientCss: (state) => {
const stops = state.selectColorList.map((item, index, list) => `${item} ${(100 / list.length) * index}%`);
return `linear-gradient(to right, ${stops.join(", ")})`;
},
colorStopList: (state) => {
return state.selectColorList.map((item, index, list) => {
return { hex: item, pos: index === 0 ? 0 : (100 / (list.length - 1)) * index };
});
},
},
actions: {
resetSelectColorList() {
this.selectColorList = ["#A8ABB2", "#303133"];
},
pullColorListAt(index: number) {
if (this.selectColorList.length > 2) {
this.selectColorList.splice(index, 1);
}
},
addSelectColorList(color?: HexColorString) {
this.selectColorList.push(color ?? randomColor());
},
},
persist: {
paths: [],
},
});
function randomColor(): HexColorString {
return ("#" + ((Math.random() * 0xffffff) << 0).toString(16)) as HexColorString;
}

16
src/styles/global.scss Normal file
View File

@ -0,0 +1,16 @@
body {
width: 100%;
height: 100%;
color: #17233d;
font-family: "Barlow", "Noto Sans SC", sans-serif;
}
#app {
width: 100%;
height: 100%;
}
* {
box-sizing: border-box;
-moz-box-sizing: border-box;
}

133
src/styles/mixins.scss Normal file
View File

@ -0,0 +1,133 @@
@mixin fill-parent() {
width: 100%;
height: 100%;
}
@mixin flex-vcenter($isColumn: false) {
display: flex;
align-items: center;
justify-content: center;
@if $isColumn {
flex-direction: column;
} @else {
flex-direction: row;
}
}
@mixin flex-center() {
display: flex;
align-items: center;
}
@mixin absolute-vcenter() {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
@mixin text-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@mixin img-cover {
@include fill-parent();
object-fit: cover;
}
@mixin img-contain {
@include fill-parent();
object-fit: contain;
}
@mixin x-margin-top($val: 0px) {
margin-top: #{$val * 2};
margin-top: calc(#{$val} + constant(safe-area-inset-top));
margin-top: calc(#{$val} + env(safe-area-inset-top));
}
@mixin x-top($val: 0px) {
top: #{$val * 2};
top: calc(#{$val} + constant(safe-area-inset-top));
top: calc(#{$val} + env(safe-area-inset-top));
}
@mixin custom-scrollbar($size: 8px, $radius: 8px, $bgColor: rgba(238, 236, 236, 0.3)) {
&::-webkit-scrollbar {
background-color: transparent;
width: $size;
height: $size;
}
&::-webkit-scrollbar-thumb {
background-color: $bgColor;
border-radius: $radius;
}
&::-webkit-scrollbar-thumb:hover {
background-color: darken($bgColor, 5%);
}
&::-webkit-scrollbar-button {
height: 0;
width: 0;
}
&::-webkit-scrollbar-button,
&::-webkit-scrollbar-corner {
background-color: transparent;
}
&::-webkit-scrollbar-arrow-color {
background-color: transparent;
}
}
@mixin text-typo($color: var(--tzr-primary-color)) {
position: relative;
margin-bottom: 7px;
&::before {
content: "";
position: absolute;
bottom: var(--text-typo-offset, 0px);
height: 2px;
background-color: rgb(224, 224, 224);
width: 100%;
left: 0px;
}
&::after {
content: "";
transition: all 0.5s;
position: absolute;
bottom: var(--text-typo-offset, 0px);
height: 2px;
width: 100%;
left: 0px;
}
&:hover {
&::after {
animation: typo 0.5s reverse;
animation-fill-mode: both;
opacity: 1;
visibility: visible;
background-color: $color;
}
}
@keyframes typo {
from {
width: 100%;
left: 0px;
}
to {
width: 0%;
left: 10%;
}
}
}

6
src/typings.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
type HexColorString = `#${string}`;
interface ColorStop {
hex: HexColorString;
stop: number;
}

View File

@ -1,7 +1,29 @@
import { fileURLToPath, URL } from "node:url";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import version from "vite-plugin-package-version";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { TDesignResolver } from "unplugin-vue-components/resolvers";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()]
plugins: [
vue(),
version(),
AutoImport({ resolvers: [TDesignResolver({ library: "vue-next" })] }),
Components({ resolvers: [TDesignResolver({ library: "vue-next" })] }),
],
resolve: {
alias: [{ find: "@", replacement: fileURLToPath(new URL("./src", import.meta.url)) }],
},
css: {
preprocessorOptions: {
scss: {
additionalData: `
@import "@/styles/mixins.scss";
`,
},
},
},
});

613
yarn.lock
View File

@ -2,11 +2,23 @@
# yarn lockfile v1
"@antfu/utils@^0.7.6":
version "0.7.7"
resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb"
integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==
"@babel/parser@^7.20.15", "@babel/parser@^7.21.3":
version "7.22.5"
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz"
integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==
"@babel/runtime@^7.16.3", "@babel/runtime@^7.22.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d"
integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==
dependencies:
regenerator-runtime "^0.14.0"
"@esbuild/android-arm64@0.17.19":
version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
@ -117,16 +129,94 @@
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz"
integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
"@jridgewell/sourcemap-codec@^1.4.13":
"@irojs/iro-core@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@irojs/iro-core/-/iro-core-1.2.1.tgz#ab45cf0899717fae785ef9661b82bb6f78cd3748"
integrity sha512-p2OvsBSSmidsDsTSkID6jEyXDF7lcyxPrkh3qBzasBZFpjkYd6kZ3yMWai3MlAaQ3F7li/Et7rSJVV09Fpei+A==
"@jaames/iro@^5.5.2":
version "5.5.2"
resolved "https://registry.yarnpkg.com/@jaames/iro/-/iro-5.5.2.tgz#15301c19080b985aede06c5f07867aa20d06e679"
integrity sha512-Fbi5U4Vdkw6UsF+R3oMlPONqkvUDMkwzh+mX718gQsDFt3+1r1jvGsrfCbedmXAAy0WsjDHOrefK0BkDk99TQg==
dependencies:
"@irojs/iro-core" "^1.2.1"
preact "^10.0.0"
"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15"
resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
dependencies:
"@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9"
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
version "2.0.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
"@nodelib/fs.walk@^1.2.3":
version "1.2.8"
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
dependencies:
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
"@popperjs/core@^2.11.8":
version "2.11.8"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
"@rollup/pluginutils@^5.0.4", "@rollup/pluginutils@^5.1.0":
version "5.1.0"
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0"
integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==
dependencies:
"@types/estree" "^1.0.0"
estree-walker "^2.0.2"
picomatch "^2.3.1"
"@types/estree@^1.0.0":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
"@types/lodash@4.14.182":
version "4.14.182"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2"
integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
"@types/lodash@^4.14.202":
version "4.14.202"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8"
integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==
"@types/node@^20.3.2":
version "20.3.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898"
integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==
"@types/sortablejs@^1.15.1":
version "1.15.7"
resolved "https://registry.yarnpkg.com/@types/sortablejs/-/sortablejs-1.15.7.tgz#11f85e98fce2854708e5c6d6011f7a236d79ae9f"
integrity sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==
"@types/tinycolor2@^1.4.3":
version "1.4.6"
resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.6.tgz#670cbc0caf4e58dd61d1e3a6f26386e473087f06"
integrity sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==
"@types/validator@^13.7.17":
version "13.11.7"
resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.7.tgz#99e19760297667ae46b7069ec8b96cbfe0a08b98"
integrity sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q==
"@vitejs/plugin-vue@^4.1.0":
version "4.2.3"
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz"
@ -195,6 +285,11 @@
"@vue/compiler-dom" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/devtools-api@^6.5.0":
version "6.5.1"
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697"
integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==
"@vue/language-core@1.8.3":
version "1.8.3"
resolved "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.3.tgz"
@ -265,6 +360,11 @@
"@volar/typescript" "1.7.10"
"@vue/language-core" "1.8.3"
acorn@^8.10.0, acorn@^8.11.2:
version "8.11.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
@ -283,6 +383,14 @@ anymatch@^1.3.0:
micromatch "^2.1.5"
normalize-path "^2.0.0"
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
dependencies:
normalize-path "^3.0.0"
picomatch "^2.0.4"
arr-diff@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz"
@ -325,11 +433,6 @@ async-each@^1.0.0:
resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz"
integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==
async-validator@^3.3.0:
version "3.5.2"
resolved "https://registry.npmjs.org/async-validator/-/async-validator-3.5.2.tgz"
integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==
atob@^2.1.2:
version "2.1.2"
resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz"
@ -827,16 +930,16 @@ base@^0.11.1:
mixin-deep "^1.2.0"
pascalcase "^0.1.1"
batch-processor@1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz"
integrity sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==
binary-extensions@^1.0.0:
version "1.13.1"
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz"
integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
bindings@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
@ -884,6 +987,13 @@ braces@^2.3.1:
split-string "^3.0.2"
to-regex "^3.0.1"
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
cache-base@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz"
@ -910,6 +1020,21 @@ chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
chokidar@^1.6.1:
version "1.7.0"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz"
@ -997,20 +1122,15 @@ core-util-is@~1.0.0:
resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
countup.js@^1.9.3:
version "1.9.3"
resolved "https://registry.npmjs.org/countup.js/-/countup.js-1.9.3.tgz"
integrity sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A==
csstype@^3.1.1:
version "3.1.2"
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
dayjs@^1.11.0:
version "1.11.8"
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz"
integrity sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==
dayjs@^1.11.9:
version "1.11.10"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
de-indent@^1.0.2:
version "1.0.2"
@ -1031,16 +1151,18 @@ debug@^3.2.6:
dependencies:
ms "^2.1.1"
debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
decode-uri-component@^0.2.0:
version "0.2.2"
resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz"
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
deepmerge@^2.2.1:
version "2.2.1"
resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz"
integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
define-property@^0.2.5:
version "0.2.5"
resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz"
@ -1070,13 +1192,6 @@ detect-indent@^4.0.0:
dependencies:
repeating "^2.0.0"
element-resize-detector@^1.2.0:
version "1.2.4"
resolved "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz"
integrity sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==
dependencies:
batch-processor "1.0.0"
errno@^0.1.1:
version "0.1.8"
resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz"
@ -1117,6 +1232,11 @@ escape-string-regexp@^1.0.2:
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
escape-string-regexp@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
@ -1190,6 +1310,24 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
fast-glob@^3.3.1, fast-glob@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
glob-parent "^5.1.2"
merge2 "^1.3.0"
micromatch "^4.0.4"
fastq@^1.6.0:
version "1.15.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
dependencies:
reusify "^1.0.4"
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
@ -1221,6 +1359,13 @@ fill-range@^4.0.0:
repeat-string "^1.6.1"
to-regex-range "^2.1.0"
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz"
@ -1263,6 +1408,11 @@ fsevents@~2.3.2:
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz"
@ -1283,6 +1433,13 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
glob@^7.1.2:
version "7.2.3"
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
@ -1343,6 +1500,13 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
hasown@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
dependencies:
function-bind "^1.1.2"
he@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
@ -1368,6 +1532,11 @@ image-size@~0.5.0:
resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz"
integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
immutable@^4.0.0:
version "4.3.4"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f"
integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
@ -1409,11 +1578,25 @@ is-binary-path@^1.0.0:
dependencies:
binary-extensions "^1.0.0"
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
dependencies:
binary-extensions "^2.0.0"
is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-core-module@^2.13.0:
version "2.13.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
dependencies:
hasown "^2.0.0"
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"
@ -1475,6 +1658,11 @@ is-extglob@^1.0.0:
resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz"
integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
is-finite@^1.0.0:
version "1.1.0"
resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz"
@ -1487,6 +1675,13 @@ is-glob@^2.0.0, is-glob@^2.0.1:
dependencies:
is-extglob "^1.0.0"
is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
is-number@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz"
@ -1506,6 +1701,11 @@ is-number@^4.0.0:
resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz"
integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"
@ -1550,11 +1750,6 @@ isobject@^3.0.0, isobject@^3.0.1:
resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
js-calendar@^1.2.3:
version "1.2.3"
resolved "https://registry.npmjs.org/js-calendar/-/js-calendar-1.2.3.tgz"
integrity sha512-dAA1/Zbp4+c5E+ARCVTIuKepXsNLzSYfzvOimiYD4S5eeP9QuplSHLcdhfqFSwyM1o1u6ku6RRRCyaZ0YAjiBw==
"js-tokens@^3.0.0 || ^4.0.0":
version "4.0.0"
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
@ -1580,6 +1775,11 @@ json5@^0.5.1:
resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz"
integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==
jsonc-parser@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"
@ -1621,17 +1821,20 @@ less@^4.1.3:
needle "^3.1.0"
source-map "~0.6.0"
lodash.chunk@^4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz"
integrity sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==
local-pkg@^0.4.3:
version "0.4.3"
resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963"
integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==
lodash.throttle@^4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz"
integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
local-pkg@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c"
integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==
dependencies:
mlly "^1.4.2"
pkg-types "^1.0.3"
lodash@^4.17.4:
lodash@^4.17.21, lodash@^4.17.4:
version "4.17.21"
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@ -1657,6 +1860,13 @@ magic-string@^0.30.0:
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.13"
magic-string@^0.30.3, magic-string@^0.30.5:
version "0.30.5"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9"
integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.15"
make-dir@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz"
@ -1682,6 +1892,11 @@ math-random@^1.0.1:
resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz"
integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
merge2@^1.3.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^2.1.5:
version "2.3.11"
resolved "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz"
@ -1720,6 +1935,14 @@ micromatch@^3.1.10:
snapdragon "^0.8.1"
to-regex "^3.0.2"
micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
dependencies:
braces "^3.0.2"
picomatch "^2.3.1"
mime@^1.4.1:
version "1.6.0"
resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
@ -1739,11 +1962,23 @@ minimatch@^9.0.0:
dependencies:
brace-expansion "^2.0.1"
minimatch@^9.0.3:
version "9.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
dependencies:
brace-expansion "^2.0.1"
minimist@^1.2.6:
version "1.2.8"
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
mitt@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
mixin-deep@^1.2.0:
version "1.3.2"
resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz"
@ -1759,11 +1994,26 @@ mkdirp@^0.5.1:
dependencies:
minimist "^1.2.6"
mlly@^1.2.0, mlly@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e"
integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==
dependencies:
acorn "^8.10.0"
pathe "^1.1.1"
pkg-types "^1.0.3"
ufo "^1.3.0"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
@ -1817,10 +2067,10 @@ normalize-path@^2.0.0, normalize-path@^2.0.1:
dependencies:
remove-trailing-separator "^1.0.1"
numeral@^2.0.6:
version "2.0.6"
resolved "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz"
integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
object-assign@^4.1.0:
version "4.1.1"
@ -1914,20 +2164,52 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
pathe@^1.1.0, pathe@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a"
integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
popper.js@^1.14.6:
version "1.16.1"
resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz"
integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
pinia-plugin-persistedstate@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.1.tgz#66780602aecd6c7b152dd7e3ddc249a1f7a13fe5"
integrity sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==
pinia@^2.1.7:
version "2.1.7"
resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.1.7.tgz#4cf5420d9324ca00b7b4984d3fbf693222115bbc"
integrity sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==
dependencies:
"@vue/devtools-api" "^6.5.0"
vue-demi ">=0.14.5"
pkg-types@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868"
integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==
dependencies:
jsonc-parser "^3.2.0"
mlly "^1.2.0"
pathe "^1.1.0"
posix-character-classes@^0.1.0:
version "0.1.1"
@ -1943,6 +2225,11 @@ postcss@^8.1.10, postcss@^8.4.23:
picocolors "^1.0.0"
source-map-js "^1.0.2"
preact@^10.0.0:
version "10.19.3"
resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.3.tgz#7a7107ed2598a60676c943709ea3efb8aaafa899"
integrity sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==
preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz"
@ -1968,6 +2255,11 @@ prr@~1.0.1:
resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz"
integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
randomatic@^3.0.0:
version "3.1.1"
resolved "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz"
@ -1999,6 +2291,13 @@ readdirp@^2.0.0:
micromatch "^3.1.10"
readable-stream "^2.0.2"
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
dependencies:
picomatch "^2.2.1"
regenerate@^1.2.1:
version "1.4.2"
resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz"
@ -2014,6 +2313,11 @@ regenerator-runtime@^0.11.0:
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
regenerator-runtime@^0.14.0:
version "0.14.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
regenerator-transform@^0.10.0:
version "0.10.1"
resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz"
@ -2091,11 +2395,25 @@ resolve-url@^0.2.1:
resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz"
integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
resolve@^1.22.4:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
dependencies:
is-core-module "^2.13.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^3.21.0:
version "3.25.3"
resolved "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz"
@ -2103,6 +2421,13 @@ rollup@^3.21.0:
optionalDependencies:
fsevents "~2.3.2"
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
dependencies:
queue-microtask "^1.2.2"
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
@ -2120,15 +2445,24 @@ safe-regex@^1.1.0:
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass@^1.69.5:
version "1.69.5"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde"
integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
source-map-js ">=0.6.2 <2.0.0"
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
select@^1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/select/-/select-1.1.2.tgz"
integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
scule@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/scule/-/scule-1.1.1.tgz#82b4d13bb8c729c15849256e749cee0cb52a4d89"
integrity sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ==
semver@^5.6.0:
version "5.7.1"
@ -2192,7 +2526,12 @@ sortablejs@1.14.0:
resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz"
integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==
source-map-js@^1.0.2:
sortablejs@^1.15.0:
version "1.15.1"
resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.15.1.tgz#9a35f52cdff449fb42ea8ecf222f3468d76e0a47"
integrity sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ==
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
@ -2259,12 +2598,50 @@ strip-ansi@^3.0.0:
dependencies:
ansi-regex "^2.0.0"
strip-literal@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07"
integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==
dependencies:
acorn "^8.10.0"
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==
tinycolor2@^1.4.1:
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
tdesign-icons-vue-next@^0.2.0:
version "0.2.2"
resolved "https://registry.yarnpkg.com/tdesign-icons-vue-next/-/tdesign-icons-vue-next-0.2.2.tgz#32f1bef1e6a5828bfc5c7d7250e5171c22940abb"
integrity sha512-ZKleBME7ZF1IVgnRXmIBPjfNa2Mef1nrK56f2xwn1Aa5mvXxB3fSxEzwhObR7bhzf/K42mz/Knnbll5Y7vCBjg==
dependencies:
"@babel/runtime" "^7.16.3"
tdesign-vue-next@^1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/tdesign-vue-next/-/tdesign-vue-next-1.7.1.tgz#e342935cc361f6662fdd4608f1fd3ce201466560"
integrity sha512-zPfzkgul4zAltUt3OJIzItZkhBxYT7kc5uoW/pGRvlcKwqOj4v+LdgAU9UfYztgKVyrwLQVc82KRaM+4y2nlYg==
dependencies:
"@babel/runtime" "^7.22.6"
"@popperjs/core" "^2.11.8"
"@types/lodash" "4.14.182"
"@types/sortablejs" "^1.15.1"
"@types/tinycolor2" "^1.4.3"
"@types/validator" "^13.7.17"
dayjs "^1.11.9"
lodash "^4.17.21"
mitt "^3.0.1"
sortablejs "^1.15.0"
tdesign-icons-vue-next "^0.2.0"
tinycolor2 "^1.6.0"
validator "^13.9.0"
tinycolor2@^1.6.0:
version "1.6.0"
resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz"
integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==
@ -2289,6 +2666,13 @@ to-regex-range@^2.1.0:
is-number "^3.0.0"
repeat-string "^1.6.1"
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
to-regex@^3.0.1, to-regex@^3.0.2:
version "3.0.2"
resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz"
@ -2314,6 +2698,28 @@ typescript@^5.0.2:
resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz"
integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==
ufo@^1.3.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496"
integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==
unimport@^3.6.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/unimport/-/unimport-3.6.1.tgz#b1448ba7c86ee5fca362ba4030691759205998f9"
integrity sha512-zKzbp8AQ+l8QK3XrONtUBdgBbMI8TkGh8hBYF77ZkVqMLLIAHwGSwJRFolPQMBx/5pezeRKvmu2gzlqnxRZeqQ==
dependencies:
"@rollup/pluginutils" "^5.1.0"
escape-string-regexp "^5.0.0"
fast-glob "^3.3.2"
local-pkg "^0.5.0"
magic-string "^0.30.5"
mlly "^1.4.2"
pathe "^1.1.1"
pkg-types "^1.0.3"
scule "^1.1.1"
strip-literal "^1.3.0"
unplugin "^1.5.1"
union-value@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz"
@ -2324,6 +2730,46 @@ union-value@^1.0.0:
is-extendable "^0.1.1"
set-value "^2.0.1"
unplugin-auto-import@^0.17.2:
version "0.17.2"
resolved "https://registry.yarnpkg.com/unplugin-auto-import/-/unplugin-auto-import-0.17.2.tgz#b55c58dfb46f323905c5a0616a9d3825fb72679c"
integrity sha512-Eu/xWI6SH4jTWXvzOfXQWAxRtiz/gMObm7wXtgMj7wBjHQKLgHTmHd4R4oha87KYGah1aKMqiqDeAxiPmfSoTg==
dependencies:
"@antfu/utils" "^0.7.6"
"@rollup/pluginutils" "^5.1.0"
fast-glob "^3.3.2"
local-pkg "^0.5.0"
magic-string "^0.30.5"
minimatch "^9.0.3"
unimport "^3.6.0"
unplugin "^1.5.1"
unplugin-vue-components@^0.26.0:
version "0.26.0"
resolved "https://registry.yarnpkg.com/unplugin-vue-components/-/unplugin-vue-components-0.26.0.tgz#6d79caa770039a1eb3d7c09fdd28778ea20afef3"
integrity sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==
dependencies:
"@antfu/utils" "^0.7.6"
"@rollup/pluginutils" "^5.0.4"
chokidar "^3.5.3"
debug "^4.3.4"
fast-glob "^3.3.1"
local-pkg "^0.4.3"
magic-string "^0.30.3"
minimatch "^9.0.3"
resolve "^1.22.4"
unplugin "^1.4.0"
unplugin@^1.4.0, unplugin@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.1.tgz#806688376fa3dcca4d2fa2c5d27cf6cd0370fbef"
integrity sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==
dependencies:
acorn "^8.11.2"
chokidar "^3.5.3"
webpack-sources "^3.2.3"
webpack-virtual-modules "^0.6.0"
unset-value@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz"
@ -2352,11 +2798,6 @@ util-deprecate@~1.0.1:
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
v-click-outside-x@^3.7.1:
version "3.7.1"
resolved "https://registry.npmjs.org/v-click-outside-x/-/v-click-outside-x-3.7.1.tgz"
integrity sha512-WmUgmcIXr9clVpm1AYS/FgHtcDicfnfoxgQCNg4O6vfk9GVnxA0vSqO321ogUo0b7czYTidj7fQENvWFMWOkUg==
v8flags@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz"
@ -2364,24 +2805,15 @@ v8flags@^2.1.1:
dependencies:
user-home "^1.1.1"
view-ui-plus@^1.3.14:
version "1.3.14"
resolved "https://registry.npmjs.org/view-ui-plus/-/view-ui-plus-1.3.14.tgz"
integrity sha512-ebB2YpyTG488y6al4syqkAtg47064TUxUuA0jehJ64iyyMqy3s/N2cipdnzx72v6yaTCzlcYmuZNx0xXL25NZA==
dependencies:
async-validator "^3.3.0"
countup.js "^1.9.3"
dayjs "^1.11.0"
deepmerge "^2.2.1"
element-resize-detector "^1.2.0"
js-calendar "^1.2.3"
lodash.chunk "^4.2.0"
lodash.throttle "^4.1.1"
numeral "^2.0.6"
popper.js "^1.14.6"
select "^1.1.2"
tinycolor2 "^1.4.1"
v-click-outside-x "^3.7.1"
validator@^13.9.0:
version "13.11.0"
resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b"
integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==
vite-plugin-package-version@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/vite-plugin-package-version/-/vite-plugin-package-version-1.1.0.tgz#7d8088955aa21e4ec93353c98992b3f58c4bf13c"
integrity sha512-TPoFZXNanzcaKCIrC3e2L/TVRkkRLB6l4RPN/S7KbG7rWfyLcCEGsnXvxn6qR7fyZwXalnnSN/I9d6pSFjHpEA==
vite@^4.3.9:
version "4.3.9"
@ -2394,6 +2826,11 @@ vite@^4.3.9:
optionalDependencies:
fsevents "~2.3.2"
vue-demi@>=0.14.5:
version "0.14.6"
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92"
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
vue-template-compiler@^2.7.14:
version "2.7.14"
resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz"
@ -2429,6 +2866,16 @@ vuedraggable@^4.1.0:
dependencies:
sortablejs "1.14.0"
webpack-sources@^3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack-virtual-modules@^0.6.0:
version "0.6.1"
resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f"
integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==
wrappy@1:
version "1.0.2"
resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"