-
-
-
-
-
- ,
+
+
+
+
+ ,
);
diff --git a/ui/src/components/tracking/TrackingModal.jsx b/ui/src/components/tracking/TrackingModal.jsx
index 80383b5..7ec8460 100644
--- a/ui/src/components/tracking/TrackingModal.jsx
+++ b/ui/src/components/tracking/TrackingModal.jsx
@@ -43,7 +43,8 @@ export default function TrackingModal() {
However, it would be a huge help if you’d allow me to collect some analytical data. Wait, before you click
- "no", let me explain. If you agree, Fredy will send a ping to my Mixpanel project each time it runs.
+ "no", let me explain. If you agree, Fredy will send a ping once every 6 hours to my internal tracking project.
+ (Will be open-sourced soon)
The data includes: names of active adapters/providers, OS, architecture, Node version, and language. The
diff --git a/ui/src/components/version/VersionBanner.jsx b/ui/src/components/version/VersionBanner.jsx
new file mode 100644
index 0000000..24e8e72
--- /dev/null
+++ b/ui/src/components/version/VersionBanner.jsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import { Banner, Descriptions } from '@douyinfe/semi-ui';
+import { useSelector } from '../../services/state/store.js';
+
+import './VersionBanner.less';
+
+export default function VersionBanner() {
+ const versionUpdate = useSelector((state) => state.versionUpdate.versionUpdate);
+ return (
+
+ A new version of Fredy is available. Update now to take advantage of the latest features and bug fixes.
+
+ {versionUpdate.localFredyVersion}
+ {versionUpdate.version}
+
+
+ {versionUpdate.url}
+ {' '}
+
+
+
+
+ Release Notes
+
+
+ {stripFullChangelog(versionUpdate.body)}
+
+ }
+ />
+ );
+
+ function stripFullChangelog(text) {
+ if (text == null) {
+ return '';
+ }
+ return text.replace(/(?:\r?\n)\*\*Full Changelog\*\*[\s\S]*$/u, '');
+ }
+}
diff --git a/ui/src/components/version/VersionBanner.less b/ui/src/components/version/VersionBanner.less
new file mode 100644
index 0000000..8342594
--- /dev/null
+++ b/ui/src/components/version/VersionBanner.less
@@ -0,0 +1,3 @@
+.versionBanner {
+ margin-bottom: 1rem;
+}
\ No newline at end of file
diff --git a/ui/src/services/rematch/models/demoMode.js b/ui/src/services/rematch/models/demoMode.js
deleted file mode 100644
index d25276e..0000000
--- a/ui/src/services/rematch/models/demoMode.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import { xhrGet } from '../../xhr';
-export const demoMode = {
- state: {
- demoMode: false,
- },
- reducers: {
- setDemoMode: (state, payload) => {
- return {
- ...state,
- demoMode: payload.demoMode,
- };
- },
- },
- effects: {
- async getDemoMode() {
- try {
- const response = await xhrGet('/api/demo');
- this.setDemoMode(response.json);
- } catch (Exception) {
- console.error('Error while trying to get resource for api/demo. Error:', Exception);
- }
- },
- },
-};
diff --git a/ui/src/services/rematch/models/generalSettings.js b/ui/src/services/rematch/models/generalSettings.js
deleted file mode 100644
index 5b3ef63..0000000
--- a/ui/src/services/rematch/models/generalSettings.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { xhrGet } from '../../xhr';
-export const generalSettings = {
- state: {
- settings: {},
- },
- reducers: {
- //only admins
- setGeneralSettings: (state, payload) => {
- return {
- ...state,
- settings: payload,
- };
- },
- },
- effects: {
- async getGeneralSettings() {
- try {
- const response = await xhrGet('/api/admin/generalSettings');
- this.setGeneralSettings(response.json);
- } catch (Exception) {
- console.error('Error while trying to get resource for api/admin/generalSettings. Error:', Exception);
- }
- },
- },
-};
diff --git a/ui/src/services/rematch/models/jobs.js b/ui/src/services/rematch/models/jobs.js
deleted file mode 100644
index bc3deed..0000000
--- a/ui/src/services/rematch/models/jobs.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import { xhrGet } from '../../xhr';
-export const jobs = {
- state: {
- jobs: [],
- insights: {},
- processingTimes: {},
- },
- reducers: {
- setJobs: (state, payload) => {
- return {
- ...state,
- jobs: Object.freeze(payload),
- };
- },
- setProcessingTimes: (state, payload) => {
- return {
- ...state,
- processingTimes: Object.freeze(payload),
- };
- },
- setJobInsights: (state, payload, jobId) => {
- return {
- ...state,
- insights: {
- ...state.insights,
- [jobId]: Object.freeze(payload),
- },
- };
- },
- },
- effects: {
- async getJobs() {
- try {
- const response = await xhrGet('/api/jobs');
- this.setJobs(response.json);
- } catch (Exception) {
- console.error(`Error while trying to get resource for api/jobs. Error:`, Exception);
- }
- },
- async getProcessingTimes() {
- try {
- const response = await xhrGet('/api/jobs/processingTimes');
- this.setProcessingTimes(response.json);
- } catch (Exception) {
- console.error(`Error while trying to get resource for api/processingTimes. Error:`, Exception);
- }
- },
- async getInsightDataForJob(jobId) {
- try {
- const response = await xhrGet(`/api/jobs/insights/${jobId}`);
- this.setJobInsights(response.json, jobId);
- } catch (Exception) {
- console.error(`Error while trying to get resource for api/jobs/insights. Error:`, Exception);
- }
- },
- },
-};
diff --git a/ui/src/services/rematch/models/notificationAdapter.js b/ui/src/services/rematch/models/notificationAdapter.js
deleted file mode 100644
index 4987bab..0000000
--- a/ui/src/services/rematch/models/notificationAdapter.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { xhrGet } from '../../xhr';
-export const notificationAdapter = {
- state: [],
- reducers: {
- setAdapter: (state, payload) => {
- return [...Object.freeze(payload)];
- },
- },
- effects: {
- async getAdapter() {
- try {
- const response = await xhrGet('/api/jobs/notificationAdapter');
- this.setAdapter(response.json);
- } catch (Exception) {
- console.error(`Error while trying to get resource for api/jobs/notificationAdapter. Error:`, Exception);
- }
- },
- },
-};
diff --git a/ui/src/services/rematch/models/provider.js b/ui/src/services/rematch/models/provider.js
deleted file mode 100644
index da9396b..0000000
--- a/ui/src/services/rematch/models/provider.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { xhrGet } from '../../xhr';
-export const provider = {
- state: [],
- reducers: {
- setProvider: (state, payload) => {
- return [...Object.freeze(payload)];
- },
- },
- effects: {
- async getProvider() {
- try {
- const response = await xhrGet('/api/jobs/provider');
- this.setProvider(response.json);
- } catch (Exception) {
- console.error(`Error while trying to get resource for api/jobs/provider. Error:`, Exception);
- }
- },
- },
-};
diff --git a/ui/src/services/rematch/models/user.js b/ui/src/services/rematch/models/user.js
deleted file mode 100644
index b23c333..0000000
--- a/ui/src/services/rematch/models/user.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import { xhrGet } from '../../xhr';
-export const user = {
- state: {
- users: [],
- currentUser: null,
- },
- reducers: {
- //only admins
- setUsers: (state, payload) => {
- return {
- ...state,
- users: payload,
- };
- },
- setCurrentUser: (state, payload) => {
- return {
- ...state,
- currentUser: Object.freeze(payload),
- };
- },
- },
- effects: {
- async getUsers() {
- try {
- const response = await xhrGet('/api/admin/users');
- this.setUsers(response.json);
- } catch (Exception) {
- console.error('Error while trying to get resource for api/admin/users. Error:', Exception);
- }
- },
- async getCurrentUser() {
- try {
- const response = await xhrGet('/api/login/user');
- this.setCurrentUser(response.json);
- } catch (Exception) {
- console.error('Error while trying to get resource for api/login/user. Error:', Exception);
- }
- },
- },
-};
diff --git a/ui/src/services/rematch/store.js b/ui/src/services/rematch/store.js
deleted file mode 100644
index 9be3aea..0000000
--- a/ui/src/services/rematch/store.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { notificationAdapter } from './models/notificationAdapter';
-import { generalSettings } from './models/generalSettings';
-import createLoadingPlugin from '@rematch/loading';
-import { provider } from './models/provider';
-import { createLogger } from 'redux-logger';
-import { jobs } from './models/jobs';
-import { user } from './models/user';
-import { demoMode } from './models/demoMode.js';
-import { init } from '@rematch/core';
-const middleware = [];
-if (process.env.NODE_ENV === 'development') {
- middleware.push(createLogger({ duration: false, collapsed: (getState, action, logEntry) => !logEntry.error }));
-}
-const store = init({
- name: 'fredy',
- models: {
- notificationAdapter,
- generalSettings,
- demoMode,
- provider,
- jobs,
- user,
- },
- plugins: [createLoadingPlugin({})],
- redux: {
- middlewares: middleware,
- },
-});
-export const reduxStore = store;
diff --git a/ui/src/services/state/store.js b/ui/src/services/state/store.js
new file mode 100644
index 0000000..6706096
--- /dev/null
+++ b/ui/src/services/state/store.js
@@ -0,0 +1,185 @@
+/**
+ * Zustand store for Fredy ui state.
+ */
+import { create } from 'zustand';
+import { shallow } from 'zustand/shallow';
+import { xhrGet } from '../xhr.js';
+
+const logger = (config) => (set, get, api) =>
+ config(
+ (partial, replace) => {
+ const prev = get();
+ set(partial, replace);
+ const next = get();
+ if (process.env.NODE_ENV !== 'production') {
+ /* eslint-disable no-console */
+ console.info('[zustand] state changed:', { prev, next });
+ /* eslint-enable no-console */
+ }
+ },
+ get,
+ api,
+ );
+
+// Create the Zustand store with slices and actions
+export const useFredyState = create(
+ logger(
+ (set) => {
+ // Async actions that directly set state (no separate reducer concept)
+ const effects = {
+ notificationAdapter: {
+ async getAdapter() {
+ try {
+ const response = await xhrGet('/api/jobs/notificationAdapter');
+ set(() => ({ notificationAdapter: Object.freeze([...response.json]) }));
+ } catch (Exception) {
+ console.error(`Error while trying to get resource for api/jobs/notificationAdapter. Error:`, Exception);
+ }
+ },
+ },
+ generalSettings: {
+ async getGeneralSettings() {
+ try {
+ const response = await xhrGet('/api/admin/generalSettings');
+ set((state) => ({ generalSettings: { ...state.generalSettings, settings: response.json } }));
+ } catch (Exception) {
+ console.error('Error while trying to get resource for api/admin/generalSettings. Error:', Exception);
+ }
+ },
+ },
+ provider: {
+ async getProvider() {
+ try {
+ const response = await xhrGet('/api/jobs/provider');
+ set(() => ({ provider: Object.freeze([...response.json]) }));
+ } catch (Exception) {
+ console.error(`Error while trying to get resource for api/jobs/provider. Error:`, Exception);
+ }
+ },
+ },
+ jobs: {
+ async getJobs() {
+ try {
+ const response = await xhrGet('/api/jobs');
+ set((state) => ({ jobs: { ...state.jobs, jobs: Object.freeze(response.json) } }));
+ } catch (Exception) {
+ console.error(`Error while trying to get resource for api/jobs. Error:`, Exception);
+ }
+ },
+ async getProcessingTimes() {
+ try {
+ const response = await xhrGet('/api/jobs/processingTimes');
+ set((state) => ({ jobs: { ...state.jobs, processingTimes: Object.freeze(response.json) } }));
+ } catch (Exception) {
+ console.error(`Error while trying to get resource for api/processingTimes. Error:`, Exception);
+ }
+ },
+ async getInsightDataForJob(jobId) {
+ try {
+ const response = await xhrGet(`/api/jobs/insights/${jobId}`);
+ set((state) => ({
+ jobs: {
+ ...state.jobs,
+ insights: { ...state.jobs.insights, [jobId]: Object.freeze(response.json) },
+ },
+ }));
+ } catch (Exception) {
+ console.error(`Error while trying to get resource for api/jobs/insights. Error:`, Exception);
+ }
+ },
+ },
+ user: {
+ async getUsers() {
+ try {
+ const response = await xhrGet('/api/admin/users');
+ set((state) => ({ user: { ...state.user, users: response.json } }));
+ } catch (Exception) {
+ console.error('Error while trying to get resource for api/admin/users. Error:', Exception);
+ }
+ },
+ async getCurrentUser() {
+ try {
+ const response = await xhrGet('/api/login/user');
+ set((state) => ({ user: { ...state.user, currentUser: Object.freeze(response.json) } }));
+ } catch (Exception) {
+ console.error('Error while trying to get resource for api/login/user. Error:', Exception);
+ }
+ },
+ },
+ demoMode: {
+ async getDemoMode() {
+ try {
+ const response = await xhrGet('/api/demo');
+ set((state) => ({
+ demoMode: { ...state.demoMode, demoMode: response.json.demoMode },
+ }));
+ } catch (Exception) {
+ console.error('Error while trying to get resource for api/demo. Error:', Exception);
+ }
+ },
+ },
+ versionUpdate: {
+ async getVersionUpdate() {
+ try {
+ const response = await xhrGet('/api/version');
+ set((state) => ({
+ versionUpdate: { ...state.versionUpdate, versionUpdate: response.json },
+ }));
+ } catch (Exception) {
+ console.error('Error while trying to get resource for api/version. Error:', Exception);
+ }
+ },
+ },
+ };
+
+ // Initial state
+ const initial = {
+ notificationAdapter: [],
+ generalSettings: { settings: {} },
+ demoMode: { demoMode: false },
+ versionUpdate: {},
+ provider: [],
+ jobs: { jobs: [], insights: {}, processingTimes: {} },
+ user: { users: [], currentUser: null },
+ };
+
+ // Expose actions by grouping them per slice
+ const actions = {
+ notificationAdapter: { ...effects.notificationAdapter },
+ generalSettings: { ...effects.generalSettings },
+ demoMode: { ...effects.demoMode },
+ versionUpdate: { ...effects.versionUpdate },
+ provider: { ...effects.provider },
+ jobs: { ...effects.jobs },
+ user: { ...effects.user },
+ };
+
+ return {
+ ...initial,
+ __actions: { actions },
+ };
+ },
+ { name: 'fredy' },
+ ),
+);
+
+/**
+ * Selector hook, drop-in replacement for react-redux useSelector.
+ * Pass a selector function and optional equality function. Defaults to shallow comparison.
+ * @template T
+ * @param {(state: FredyState) => T} selector
+ * @param {(a: T, b: T) => boolean} [equalityFn]
+ * @returns {T}
+ */
+export function useSelector(selector, equalityFn = shallow) {
+ return useFredyState(selector, equalityFn);
+}
+
+/**
+ * Actions hook returning grouped async actions per slice.
+ * Example: const { jobs } = useActions(); await jobs.getJobs();
+ * @returns {{notificationAdapter: any, generalSettings: any, demoMode: any, provider: any, jobs: any, user: any}}
+ */
+export function useActions() {
+ return useFredyState((s) => s.__actions.actions);
+}
diff --git a/ui/src/views/generalSettings/GeneralSettings.jsx b/ui/src/views/generalSettings/GeneralSettings.jsx
index 512d153..835cde4 100644
--- a/ui/src/views/generalSettings/GeneralSettings.jsx
+++ b/ui/src/views/generalSettings/GeneralSettings.jsx
@@ -1,8 +1,8 @@
import React from 'react';
-import { useDispatch, useSelector } from 'react-redux';
+import { useActions, useSelector } from '../../services/state/store';
-import { Divider, TimePicker, Button, Checkbox } from '@douyinfe/semi-ui';
+import { Divider, TimePicker, Button, Checkbox, Input } from '@douyinfe/semi-ui';
import { InputNumber } from '@douyinfe/semi-ui';
import Headline from '../../components/headline/Headline';
import { xhrPost } from '../../services/xhr';
@@ -15,6 +15,7 @@ import {
IconSignal,
IconLineChartStroked,
IconSearch,
+ IconFolder,
} from '@douyinfe/semi-icons';
import './GeneralSettings.less';
@@ -35,7 +36,7 @@ function formatFromTBackend(time) {
}
const GeneralSettings = function GeneralSettings() {
- const dispatch = useDispatch();
+ const actions = useActions();
const [loading, setLoading] = React.useState(true);
const settings = useSelector((state) => state.generalSettings.settings);
@@ -46,10 +47,11 @@ const GeneralSettings = function GeneralSettings() {
const [workingHourTo, setWorkingHourTo] = React.useState(null);
const [demoMode, setDemoMode] = React.useState(null);
const [analyticsEnabled, setAnalyticsEnabled] = React.useState(null);
+ const [sqlitePath, setSqlitePath] = React.useState(null);
React.useEffect(() => {
async function init() {
- await dispatch.generalSettings.getGeneralSettings();
+ await actions.generalSettings.getGeneralSettings();
setLoading(false);
}
@@ -64,6 +66,7 @@ const GeneralSettings = function GeneralSettings() {
setWorkingHourTo(settings?.workingHours?.to);
setAnalyticsEnabled(settings?.analyticsEnabled || false);
setDemoMode(settings?.demoMode || false);
+ setSqlitePath(settings?.sqlitepath);
}
init();
@@ -87,6 +90,10 @@ const GeneralSettings = function GeneralSettings() {
Toast.error('Working hours to and from must be set if either to or from has been set before.');
return;
}
+ if (nullOrEmpty(sqlitePath)) {
+ Toast.error('SQLite db path cannot be empty.');
+ return;
+ }
try {
await xhrPost('/api/admin/generalSettings', {
interval,
@@ -97,6 +104,7 @@ const GeneralSettings = function GeneralSettings() {
},
demoMode,
analyticsEnabled,
+ sqlitepath: sqlitePath,
});
} catch (exception) {
console.error(exception);
@@ -121,11 +129,11 @@ const GeneralSettings = function GeneralSettings() {
}
+ style={{ marginBottom: '1rem' }}
+ description={
+
+ Changing the path later may result in data loss.
+
+ You must restart Fredy immediately after changing this setting!
+
+ }
+ />
+
+ {
+ setSqlitePath(value);
+ }}
+ />
+
+
state.jobs.jobs);
const processingTimes = useSelector((state) => state.jobs.processingTimes);
const navigate = useNavigate();
- const dispatch = useDispatch();
+ const actions = useActions();
const onJobRemoval = async (jobId) => {
try {
await xhrDelete('/api/jobs', { jobId });
Toast.success('Job successfully remove');
- await dispatch.jobs.getJobs();
+ await actions.jobs.getJobs();
} catch (error) {
Toast.error(error);
}
@@ -29,7 +29,7 @@ export default function Jobs() {
try {
await xhrPut(`/api/jobs/${jobId}/status`, { status });
Toast.success('Job status successfully changed');
- await dispatch.jobs.getJobs();
+ await actions.jobs.getJobs();
} catch (error) {
Toast.error(error);
}
diff --git a/ui/src/views/jobs/ProcessingTimes.jsx b/ui/src/views/jobs/ProcessingTimes.jsx
index a02acc5..9482433 100644
--- a/ui/src/views/jobs/ProcessingTimes.jsx
+++ b/ui/src/views/jobs/ProcessingTimes.jsx
@@ -1,6 +1,8 @@
import React from 'react';
import { format } from '../../services/time/timeService';
-import { Descriptions } from '@douyinfe/semi-ui';
+import { Button, Descriptions, Toast } from '@douyinfe/semi-ui';
+import { IconPlayCircle } from '@douyinfe/semi-icons';
+import { xhrPost } from '../../services/xhr.js';
export default function ProcessingTimes({ processingTimes = {} }) {
if (Object.keys(processingTimes).length === 0) {
@@ -24,6 +26,19 @@ export default function ProcessingTimes({ processingTimes = {} }) {
{format(processingTimes.lastRun + processingTimes.interval * 60000)}
+
+ }
+ aria-label="Start now"
+ onClick={async () => {
+ await xhrPost('/api/jobs/startAll', null);
+ Toast.success('Successfully triggered Fredy search.');
+ }}
+ >
+ Search now
+
+
>
)}
diff --git a/ui/src/views/jobs/insights/JobInsight.jsx b/ui/src/views/jobs/insights/JobInsight.jsx
index 507cc85..51ea715 100644
--- a/ui/src/views/jobs/insights/JobInsight.jsx
+++ b/ui/src/views/jobs/insights/JobInsight.jsx
@@ -2,20 +2,20 @@ import React from 'react';
import { roundToHour } from '../../../services/time/timeService';
import Headline from '../../../components/headline/Headline';
-import { useDispatch, useSelector } from 'react-redux';
+import { useActions, useSelector } from '../../../services/state/store';
import { useParams } from 'react-router-dom';
import Linechart from './Linechart';
const JobInsight = function JobInsight() {
- const dispatch = useDispatch();
+ const actions = useActions();
const insights = useSelector((state) => state.jobs.insights);
const jobs = useSelector((state) => state.jobs.jobs);
const params = useParams();
React.useEffect(() => {
- dispatch.jobs.getInsightDataForJob(params.jobId);
- dispatch.jobs.getJobs();
+ actions.jobs.getInsightDataForJob(params.jobId);
+ actions.jobs.getJobs();
}, []);
const getData = () => {
diff --git a/ui/src/views/jobs/mutation/JobMutation.jsx b/ui/src/views/jobs/mutation/JobMutation.jsx
index d0172de..9ea32cf 100644
--- a/ui/src/views/jobs/mutation/JobMutation.jsx
+++ b/ui/src/views/jobs/mutation/JobMutation.jsx
@@ -5,7 +5,7 @@ import NotificationAdapterTable from '../../../components/table/NotificationAdap
import ProviderTable from '../../../components/table/ProviderTable';
import ProviderMutator from './components/provider/ProviderMutator';
import Headline from '../../../components/headline/Headline';
-import { useDispatch, useSelector } from 'react-redux';
+import { useActions, useSelector } from '../../../services/state/store';
import { xhrPost } from '../../../services/xhr';
import { useNavigate, useParams } from 'react-router-dom';
import { Divider, Input, Switch, Button, TagInput, Toast } from '@douyinfe/semi-ui';
@@ -34,7 +34,7 @@ export default function JobMutator() {
const [notificationAdapterData, setNotificationAdapterData] = useState(defaultNotificationAdapter);
const [enabled, setEnabled] = useState(defaultEnabled);
const navigate = useNavigate();
- const dispatch = useDispatch();
+ const actions = useActions();
const isSavingEnabled = () => {
return Boolean(notificationAdapterData.length && providerData.length && name);
@@ -50,7 +50,7 @@ export default function JobMutator() {
enabled,
jobId: jobToBeEdit?.id || null,
});
- await dispatch.jobs.getJobs();
+ await actions.jobs.getJobs();
Toast.success('Job successfully saved...');
navigate('/jobs');
} catch (Exception) {
diff --git a/ui/src/views/jobs/mutation/components/notificationAdapter/NotificationAdapterMutator.jsx b/ui/src/views/jobs/mutation/components/notificationAdapter/NotificationAdapterMutator.jsx
index ae43d71..3687a8e 100644
--- a/ui/src/views/jobs/mutation/components/notificationAdapter/NotificationAdapterMutator.jsx
+++ b/ui/src/views/jobs/mutation/components/notificationAdapter/NotificationAdapterMutator.jsx
@@ -3,7 +3,7 @@ import React, { useState } from 'react';
import { transform } from '../../../../../services/transformer/notificationAdapterTransformer';
import { xhrPost } from '../../../../../services/xhr';
import Help from './NotificationHelpDisplay';
-import { useSelector } from 'react-redux';
+import { useSelector } from '../../../../../services/state/store';
import { Banner, Button, Form, Modal, Select, Switch } from '@douyinfe/semi-ui';
import './NotificationAdapterMutator.less';
diff --git a/ui/src/views/jobs/mutation/components/provider/ProviderMutator.jsx b/ui/src/views/jobs/mutation/components/provider/ProviderMutator.jsx
index e7865b2..710b216 100644
--- a/ui/src/views/jobs/mutation/components/provider/ProviderMutator.jsx
+++ b/ui/src/views/jobs/mutation/components/provider/ProviderMutator.jsx
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
import { Banner, Modal, Select, Input } from '@douyinfe/semi-ui';
import { transform } from '../../../../../services/transformer/providerTransformer';
-import { useSelector } from 'react-redux';
+import { useSelector } from '../../../../../services/state/store';
import { IconLikeHeart } from '@douyinfe/semi-icons';
import './ProviderMutator.less';
diff --git a/ui/src/views/login/Login.jsx b/ui/src/views/login/Login.jsx
index 4e22a23..79abe69 100644
--- a/ui/src/views/login/Login.jsx
+++ b/ui/src/views/login/Login.jsx
@@ -4,14 +4,14 @@ import cityBackground from '../../assets/city_background.jpg';
import Logo from '../../components/logo/Logo';
import { xhrPost } from '../../services/xhr';
import { useNavigate } from 'react-router-dom';
-import { useDispatch, useSelector } from 'react-redux';
+import { useActions, useSelector } from '../../services/state/store';
import { Input, Button, Banner, Toast } from '@douyinfe/semi-ui';
import './login.less';
import { IconUser, IconLock } from '@douyinfe/semi-icons';
export default function Login() {
- const dispatch = useDispatch();
+ const actions = useActions();
const [username, setUserName] = React.useState('');
const [password, setPassword] = React.useState('');
const [error, setError] = React.useState(null);
@@ -20,7 +20,7 @@ export default function Login() {
useEffect(() => {
async function init() {
- await dispatch.demoMode.getDemoMode();
+ await actions.demoMode.getDemoMode();
}
init();
@@ -46,7 +46,7 @@ export default function Login() {
Toast.success('Login successful!');
- await dispatch.user.getCurrentUser();
+ await actions.user.getCurrentUser();
navigate('/jobs');
};
diff --git a/ui/src/views/user/Users.jsx b/ui/src/views/user/Users.jsx
index 435d8fc..7ac3485 100644
--- a/ui/src/views/user/Users.jsx
+++ b/ui/src/views/user/Users.jsx
@@ -2,7 +2,7 @@ import React from 'react';
import { Toast } from '@douyinfe/semi-ui';
import UserTable from '../../components/table/UserTable';
-import { useDispatch, useSelector } from 'react-redux';
+import { useActions, useSelector } from '../../services/state/store';
import { IconPlus } from '@douyinfe/semi-icons';
import { Button } from '@douyinfe/semi-ui';
import UserRemovalModal from './UserRemovalModal';
@@ -12,7 +12,7 @@ import { useNavigate } from 'react-router-dom';
import './Users.less';
const Users = function Users() {
- const dispatch = useDispatch();
+ const actions = useActions();
const [loading, setLoading] = React.useState(true);
const users = useSelector((state) => state.user.users);
const [userIdToBeRemoved, setUserIdToBeRemoved] = React.useState(null);
@@ -20,7 +20,7 @@ const Users = function Users() {
React.useEffect(() => {
async function init() {
- await dispatch.user.getUsers();
+ await actions.user.getUsers();
setLoading(false);
}
@@ -32,8 +32,8 @@ const Users = function Users() {
await xhrDelete('/api/admin/users', { userId: userIdToBeRemoved });
Toast.success('User successfully remove');
setUserIdToBeRemoved(null);
- await dispatch.jobs.getJobs();
- await dispatch.user.getUsers();
+ await actions.jobs.getJobs();
+ await actions.user.getUsers();
} catch (error) {
Toast.error(error);
setUserIdToBeRemoved(null);
diff --git a/ui/src/views/user/mutation/UserMutator.jsx b/ui/src/views/user/mutation/UserMutator.jsx
index befd2ab..68c0383 100644
--- a/ui/src/views/user/mutation/UserMutator.jsx
+++ b/ui/src/views/user/mutation/UserMutator.jsx
@@ -2,7 +2,7 @@ import React from 'react';
import { xhrGet, xhrPost } from '../../../services/xhr';
import { useNavigate, useParams } from 'react-router-dom';
-import { useDispatch } from 'react-redux';
+import { useActions } from '../../../services/state/store';
import { Divider, Input, Switch, Button, Toast } from '@douyinfe/semi-ui';
import './UserMutator.less';
import { SegmentPart } from '../../../components/segment/SegmentPart';
@@ -16,7 +16,7 @@ const UserMutator = function UserMutator() {
const [isAdmin, setIsAdmin] = React.useState(false);
const navigate = useNavigate();
- const dispatch = useDispatch();
+ const actions = useActions();
React.useEffect(() => {
async function init() {
@@ -48,7 +48,7 @@ const UserMutator = function UserMutator() {
password2,
isAdmin,
});
- await dispatch.user.getUsers();
+ await actions.user.getUsers();
Toast.success('User successfully saved...');
navigate('/users');
} catch (error) {
diff --git a/yarn.lock b/yarn.lock
index 8cadfc4..9b7f570 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -11,14 +11,6 @@
regexparam "^3.0.0"
trouter "^4.0.0"
-"@ampproject/remapping@^2.2.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
- integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
- dependencies:
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.24"
-
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
@@ -33,31 +25,31 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790"
integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==
-"@babel/core@7.28.3", "@babel/core@^7.28.3":
- version "7.28.3"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.3.tgz#aceddde69c5d1def69b839d09efa3e3ff59c97cb"
- integrity sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==
+"@babel/core@7.28.4", "@babel/core@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496"
+ integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==
dependencies:
- "@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.27.1"
"@babel/generator" "^7.28.3"
"@babel/helper-compilation-targets" "^7.27.2"
"@babel/helper-module-transforms" "^7.28.3"
- "@babel/helpers" "^7.28.3"
- "@babel/parser" "^7.28.3"
+ "@babel/helpers" "^7.28.4"
+ "@babel/parser" "^7.28.4"
"@babel/template" "^7.27.2"
- "@babel/traverse" "^7.28.3"
- "@babel/types" "^7.28.2"
+ "@babel/traverse" "^7.28.4"
+ "@babel/types" "^7.28.4"
+ "@jridgewell/remapping" "^2.3.5"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/eslint-parser@7.28.0":
- version "7.28.0"
- resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.28.0.tgz#c1b3fbba070f5bac32e3d02f244201add4afdd6e"
- integrity sha512-N4ntErOlKvcbTt01rr5wj3y55xnIdx1ymrfIr8C2WnM1Y9glFgWaGDEULJIazOX3XM9NRzhfJ6zZnQ1sBNWU+w==
+"@babel/eslint-parser@7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.28.4.tgz#80dd86e0aeaae9704411a044db60e1ae6477d93f"
+ integrity sha512-Aa+yDiH87980jR6zvRfFuCR1+dLb00vBydhTL+zI992Rz/wQhSvuxjmOOuJOgO3XmakO6RykRGD2S1mq1AtgHA==
dependencies:
"@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
eslint-visitor-keys "^2.1.0"
@@ -217,13 +209,13 @@
"@babel/traverse" "^7.28.3"
"@babel/types" "^7.28.2"
-"@babel/helpers@^7.28.3":
- version "7.28.3"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.3.tgz#b83156c0a2232c133d1b535dd5d3452119c7e441"
- integrity sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==
+"@babel/helpers@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827"
+ integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==
dependencies:
"@babel/template" "^7.27.2"
- "@babel/types" "^7.28.2"
+ "@babel/types" "^7.28.4"
"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3":
version "7.28.3"
@@ -232,6 +224,13 @@
dependencies:
"@babel/types" "^7.28.2"
+"@babel/parser@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8"
+ integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==
+ dependencies:
+ "@babel/types" "^7.28.4"
+
"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1":
version "7.27.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9"
@@ -873,6 +872,19 @@
"@babel/types" "^7.28.2"
debug "^4.3.1"
+"@babel/traverse@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b"
+ integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.3"
+ "@babel/helper-globals" "^7.28.0"
+ "@babel/parser" "^7.28.4"
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.4"
+ debug "^4.3.1"
+
"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.4.4":
version "7.28.2"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b"
@@ -881,6 +893,14 @@
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
+"@babel/types@^7.28.4":
+ version "7.28.4"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a"
+ integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==
+ dependencies:
+ "@babel/helper-string-parser" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
+
"@dnd-kit/accessibility@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz#3b4202bd6bb370a0730f6734867785919beac6af"
@@ -953,7 +973,7 @@
remark-gfm "^4.0.0"
scroll-into-view-if-needed "^2.2.24"
-"@douyinfe/semi-icons@2.86.0":
+"@douyinfe/semi-icons@2.86.0", "@douyinfe/semi-icons@^2.86.0":
version "2.86.0"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-icons/-/semi-icons-2.86.0.tgz#ee4355c81616ea4325627a3bb607ed9f9b9afac3"
integrity sha512-KEDlYYP1wdOqN28Ck0YcdCx7mSks8SRY4w4KKbXPaROzYNEyT2BRcJxwysMHfxL2IDfsroHrRPJsX9pnrmQqTg==
@@ -1135,10 +1155,10 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz#585624dc829cfb6e7c0aa6c3ca7d7e6daa87e34f"
integrity sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==
-"@eslint-community/eslint-utils@^4.2.0":
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a"
- integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==
+"@eslint-community/eslint-utils@^4.8.0":
+ version "4.9.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3"
+ integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==
dependencies:
eslint-visitor-keys "^3.4.3"
@@ -1183,10 +1203,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@9.34.0":
- version "9.34.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.34.0.tgz#fc423168b9d10e08dea9088d083788ec6442996b"
- integrity sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==
+"@eslint/js@9.36.0":
+ version "9.36.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.36.0.tgz#b1a3893dd6ce2defed5fd49de805ba40368e8fef"
+ integrity sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==
"@eslint/object-schema@^2.1.6":
version "2.1.6"
@@ -1249,6 +1269,14 @@
"@jridgewell/sourcemap-codec" "^1.5.0"
"@jridgewell/trace-mapping" "^0.3.24"
+"@jridgewell/remapping@^2.3.5":
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
+ integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
"@jridgewell/resolve-uri@^3.1.0":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
@@ -1309,12 +1337,12 @@
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-"@puppeteer/browsers@2.10.8":
- version "2.10.8"
- resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.10.8.tgz#80e983ca0365478b39c4c0f559785345393f8fa2"
- integrity sha512-f02QYEnBDE0p8cteNoPYHHjbDuwyfbe4cCIVlNi8/MRicIxFW4w4CfgU0LNgWEID6s06P+hRJ1qjpBLMhPRCiQ==
+"@puppeteer/browsers@2.10.10":
+ version "2.10.10"
+ resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.10.10.tgz#f806f92d966918c931fb9c48052eba2db848beaa"
+ integrity sha512-3ZG500+ZeLql8rE0hjfhkycJjDj0pI/btEh3L9IkWUYcOrgP0xCNRq3HbtbqOPbvDhFaAWD88pDFtlLv8ns8gA==
dependencies:
- debug "^4.4.1"
+ debug "^4.4.3"
extract-zip "^2.0.1"
progress "^2.0.3"
proxy-agent "^6.5.0"
@@ -1322,16 +1350,6 @@
tar-fs "^3.1.0"
yargs "^17.7.2"
-"@rematch/core@2.2.0":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@rematch/core/-/core-2.2.0.tgz#c4e6cc9d369d341afe2345842f43c255b7a44e90"
- integrity sha512-Sj3nC/2X+bOBZeOf4jdJ00nhCcx9wLbVK9SOs6eFR4Y1qKXqRY0hGigbQgfTpCdjRFlwTHHfN3m41MlNvMhDgw==
-
-"@rematch/loading@2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@rematch/loading/-/loading-2.1.2.tgz#1dc680d445cd2d1234489cb69816278d02cf2216"
- integrity sha512-3fWUvWkIxP+BEi2LCKYKaUkMFCT0MDcN1xQD19tPNufMry7skqybahqm9/ugs9wIji1n3ObF7yHkrb01E+N3Tw==
-
"@resvg/resvg-js-android-arm-eabi@2.4.1":
version "2.4.1"
resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.4.1.tgz#49dc9722f95096f8aff70186deae8e148d60dce5"
@@ -1410,10 +1428,10 @@
"@resvg/resvg-js-win32-ia32-msvc" "2.4.1"
"@resvg/resvg-js-win32-x64-msvc" "2.4.1"
-"@rolldown/pluginutils@1.0.0-beta.34":
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.34.tgz#4421645c676926faa4574940d72fa7ce0ec7d419"
- integrity sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==
+"@rolldown/pluginutils@1.0.0-beta.35":
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.35.tgz#1a477e7742b154b67519d40e4fc17485de338e7a"
+ integrity sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==
"@rollup/rollup-android-arm-eabi@4.49.0":
version "4.49.0"
@@ -1530,10 +1548,10 @@
dependencies:
deepmerge "^4.2.2"
-"@sendgrid/mail@8.1.5":
- version "8.1.5"
- resolved "https://registry.yarnpkg.com/@sendgrid/mail/-/mail-8.1.5.tgz#995ef96aaf4664d2f059ec6ca38f79f724d350f2"
- integrity sha512-W+YuMnkVs4+HA/bgfto4VHKcPKLc7NiZ50/NH2pzO6UHCCFuq8/GNB98YJlLEr/ESDyzAaDr7lVE7hoBwFTT3Q==
+"@sendgrid/mail@8.1.6":
+ version "8.1.6"
+ resolved "https://registry.yarnpkg.com/@sendgrid/mail/-/mail-8.1.6.tgz#9c253c13d49867fdb6f7df1360643825236eef22"
+ integrity sha512-/ZqxUvKeEztU9drOoPC/8opEPOk+jLlB2q4+xpx6HVLq6aFu3pMpalkTpAQz8XfRfpLp8O25bh6pGPcHDCYpqg==
dependencies:
"@sendgrid/client" "^8.1.5"
"@sendgrid/helpers" "^8.0.0"
@@ -1699,11 +1717,6 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4"
integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
-"@types/use-sync-external-store@^0.0.6":
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc"
- integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==
-
"@types/yauzl@^2.9.1":
version "2.10.3"
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999"
@@ -1716,24 +1729,24 @@
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
-"@visactor/react-vchart@^2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@visactor/react-vchart/-/react-vchart-2.0.4.tgz#221760d3c9707fcee9e94b3b0fd0371540d40db0"
- integrity sha512-dN0VHEXMF1QTA9JAaV1kZYxajxwwPBpMhLB1vXgY9u41prDFYyboQ7atwweyBB/xSdRdsuQgzYU/SSM/R2gNeg==
+"@visactor/react-vchart@^2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@visactor/react-vchart/-/react-vchart-2.0.5.tgz#1eb3339b662f623c08cf20f57c2507760c784468"
+ integrity sha512-D3dAPASde1zuZiorx32jkRe9cMuc9PO3IVurw0Sm/XBzrdQE2MnoLONfM2ktT/BJQggBZaHE6+n8inGE24JyJg==
dependencies:
- "@visactor/vchart" "2.0.4"
- "@visactor/vchart-extension" "2.0.4"
+ "@visactor/vchart" "2.0.5"
+ "@visactor/vchart-extension" "2.0.5"
"@visactor/vrender-core" "1.0.13"
"@visactor/vrender-kits" "1.0.13"
"@visactor/vutils" "~1.0.6"
react-is "^18.2.0"
-"@visactor/vchart-extension@2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@visactor/vchart-extension/-/vchart-extension-2.0.4.tgz#8ac5e138bc410d9e9b23bb3e60547f01df48bac9"
- integrity sha512-KmoeI7nxpfu8vGnn86O9szjoWTtvAomBtUwdtg+cNYkX/EGxZ4LUZLe0lELSpUecRk1aqZxzdeBSFB1wQpNYRw==
+"@visactor/vchart-extension@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@visactor/vchart-extension/-/vchart-extension-2.0.5.tgz#3c023ebd56bc26531f20c2ad147e45d1fcba67ef"
+ integrity sha512-GG5cwtJ3wv4/DUM4/RVF7qi6WXRZyDRIv+U0WgWCYAdANINW95egJ3P+NHdcdLhA7VEdAXPde6XFSWOawcK4oQ==
dependencies:
- "@visactor/vchart" "2.0.4"
+ "@visactor/vchart" "2.0.5"
"@visactor/vdataset" "~1.0.6"
"@visactor/vlayouts" "~1.0.6"
"@visactor/vrender-animate" "1.0.13"
@@ -1754,10 +1767,10 @@
resolved "https://registry.yarnpkg.com/@visactor/vchart-theme-utils/-/vchart-theme-utils-1.12.2.tgz#bad0035e79dabbe80890bbd6196668551a12c874"
integrity sha512-PkgSAivtUZukCWVUGCXxKcbTzI/oMj1Ky22VYcVs/KM4VFmmCywU2xjBBe1du0LUey6CAKB7bMlj5bL2jctG0A==
-"@visactor/vchart@2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@visactor/vchart/-/vchart-2.0.4.tgz#36770240ae6ffd84fa285b7610192f2e06a56299"
- integrity sha512-/NWBQFYd5A52I8Bkp+iod2LAhBo4cQcxt+xazrmJ/5L17Gk/LdUqCRpnF5dk3XncHb4ls+SRNGkH4kf0rNH2Mg==
+"@visactor/vchart@2.0.5", "@visactor/vchart@^2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@visactor/vchart/-/vchart-2.0.5.tgz#a7041a1fe6df5125ca02ac55946b0211f4e649ed"
+ integrity sha512-7emhEFGEhUZC8n/PkscVQeJn/yd4757wrta1avMHUKBVY7x9qEWYSFypXT2LJTxjTePB//dqZYE/aPy/plGWNQ==
dependencies:
"@visactor/vdataset" "~1.0.6"
"@visactor/vlayouts" "~1.0.6"
@@ -1767,7 +1780,7 @@
"@visactor/vrender-kits" "1.0.13"
"@visactor/vscale" "~1.0.6"
"@visactor/vutils" "~1.0.6"
- "@visactor/vutils-extension" "2.0.4"
+ "@visactor/vutils-extension" "2.0.5"
"@visactor/vdataset@~1.0.6":
version "1.0.9"
@@ -1856,10 +1869,10 @@
dependencies:
"@visactor/vutils" "1.0.9"
-"@visactor/vutils-extension@2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@visactor/vutils-extension/-/vutils-extension-2.0.4.tgz#a369192d0ca5dd9748a21a5f1f6eb3ea094cac6c"
- integrity sha512-Q0nDVTCLeCbAi8AAj8wAZfzfZDDsYF7xXhuLjjGPrPTuItPG/fHuw/rw6yDFvdhb4XGaPwv0MaUYNPFoOl60GQ==
+"@visactor/vutils-extension@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@visactor/vutils-extension/-/vutils-extension-2.0.5.tgz#7c713c6c2bdced9c7ab599d5444b37c80ce8f8c7"
+ integrity sha512-qQpaANT+AtOQoQAN64qhQQXqhOo9Fn5t+hmih0pFxIye+61yEj3xUSM2GxQF6ubjqCI6DvRG0DaVw0rdcoqbGg==
dependencies:
"@visactor/vdataset" "~1.0.6"
"@visactor/vutils" "~1.0.6"
@@ -1882,15 +1895,15 @@
"@turf/invariant" "^6.5.0"
eventemitter3 "^4.0.7"
-"@vitejs/plugin-react@5.0.2":
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-5.0.2.tgz#3b5d73fc0e4370a0fafe27154d2c208e2bca8f71"
- integrity sha512-tmyFgixPZCx2+e6VO9TNITWcCQl8+Nl/E8YbAyPVv85QCc7/A3JrdfG2A8gIzvVhWuzMOVrFW1aReaNxrI6tbw==
+"@vitejs/plugin-react@5.0.3":
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-5.0.3.tgz#182ea45406d89e55b4e35c92a4a8c2c8388726c8"
+ integrity sha512-PFVHhosKkofGH0Yzrw1BipSedTH68BFF8ZWy1kfUpCtJcouXXY0+racG8sExw7hw0HoX36813ga5o3LTWZ4FUg==
dependencies:
- "@babel/core" "^7.28.3"
+ "@babel/core" "^7.28.4"
"@babel/plugin-transform-react-jsx-self" "^7.27.1"
"@babel/plugin-transform-react-jsx-source" "^7.27.1"
- "@rolldown/pluginutils" "1.0.0-beta.34"
+ "@rolldown/pluginutils" "1.0.0-beta.35"
"@types/babel__core" "^7.20.5"
react-refresh "^0.17.0"
@@ -1914,13 +1927,6 @@ acorn@^8.0.0, acorn@^8.15.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
-agent-base@6:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
- integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
- dependencies:
- debug "4"
-
agent-base@^7.1.0, agent-base@^7.1.2:
version "7.1.4"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8"
@@ -1960,7 +1966,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
dependencies:
color-convert "^2.0.1"
-ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1:
+ansi-styles@^6.1.0, ansi-styles@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
@@ -2191,10 +2197,10 @@ basic-ftp@^5.0.2:
resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0"
integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==
-better-sqlite3@^12.2.0:
- version "12.2.0"
- resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.2.0.tgz#de7c3466074f2d1a5d260f510647e822e42684d2"
- integrity sha512-eGbYq2CT+tos1fBwLQ/tkBt9J5M3JEHjku4hbvQUePCckkvVf14xWj+1m7dGoK81M/fOjFT7yM9UMeKT/+vFLQ==
+better-sqlite3@^12.3.0:
+ version "12.3.0"
+ resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.3.0.tgz#999817506ed9d985604ae053b5e5fe3c8a052bb1"
+ integrity sha512-FFf+rsghyvXQIPV/6PDUj05EsuZA1b0drGLzNgtrELkXnJKUH6NNM2h7Ce7dkA6vvPOM4SOoUIDGRPy3yRKmqw==
dependencies:
bindings "^1.5.0"
prebuild-install "^7.1.1"
@@ -2369,11 +2375,6 @@ chalk@^4.0.0, chalk@^4.1.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@^5.6.0:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.0.tgz#a1a8d294ea3526dbb77660f12649a08490e33ab8"
- integrity sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==
-
character-entities-html4@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
@@ -2470,13 +2471,13 @@ cli-cursor@^5.0.0:
dependencies:
restore-cursor "^5.0.0"
-cli-truncate@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a"
- integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==
+cli-truncate@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-5.1.0.tgz#bb12607a62f0e4bb91a54aa4653b23347900bb55"
+ integrity sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==
dependencies:
- slice-ansi "^5.0.0"
- string-width "^7.0.0"
+ slice-ansi "^7.1.0"
+ string-width "^8.0.0"
cliui@^8.0.1:
version "8.0.1"
@@ -2537,16 +2538,16 @@ comma-separated-tokens@^2.0.0:
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
+commander@14.0.1:
+ version "14.0.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.1.tgz#2f9225c19e6ebd0dc4404dd45821b2caa17ea09b"
+ integrity sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==
+
commander@2:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-commander@^14.0.0:
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.0.tgz#f244fc74a92343514e56229f16ef5c5e22ced5e9"
- integrity sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==
-
compute-scroll-into-view@^1.0.20:
version "1.0.20"
resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43"
@@ -2762,6 +2763,13 @@ debug@4, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug
dependencies:
ms "^2.1.3"
+debug@^4.4.3:
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
+
decamelize@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
@@ -2786,11 +2794,6 @@ decompress-response@^6.0.0:
dependencies:
mimic-response "^3.1.0"
-deep-diff@^0.3.5:
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84"
- integrity sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==
-
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
@@ -2860,10 +2863,10 @@ devlop@^1.0.0, devlop@^1.1.0:
dependencies:
dequal "^2.0.0"
-devtools-protocol@0.0.1475386:
- version "0.0.1475386"
- resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1475386.tgz#5378401a2c5698ab68c3482c9b7816ff62ec652b"
- integrity sha512-RQ809ykTfJ+dgj9bftdeL2vRVxASAuGU+I9LEx9Ij5TXU5HrgAQVmzi72VA+mkzscE12uzlRv5/tWWv9R9J1SA==
+devtools-protocol@0.0.1495869:
+ version "0.0.1495869"
+ resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1495869.tgz#f68daef77a48d5dcbcdd55dbfa3265a51989c91b"
+ integrity sha512-i+bkd9UYFis40RcnkW7XrOprCujXRAHg62IVh/Ah3G8MmNXpCGt1m0dTFhSdx/AVs8XEMbdOGRwdkR1Bcta8AA==
diff@^7.0.0:
version "7.0.0"
@@ -3273,18 +3276,18 @@ eslint-visitor-keys@^4.2.1:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1"
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
-eslint@9.34.0:
- version "9.34.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.34.0.tgz#0ea1f2c1b5d1671db8f01aa6b8ce722302016f7b"
- integrity sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==
+eslint@9.36.0:
+ version "9.36.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.36.0.tgz#9cc5cbbfb9c01070425d9bfed81b4e79a1c09088"
+ integrity sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==
dependencies:
- "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/eslint-utils" "^4.8.0"
"@eslint-community/regexpp" "^4.12.1"
"@eslint/config-array" "^0.21.0"
"@eslint/config-helpers" "^0.3.1"
"@eslint/core" "^0.15.2"
"@eslint/eslintrc" "^3.3.1"
- "@eslint/js" "9.34.0"
+ "@eslint/js" "9.36.0"
"@eslint/plugin-kit" "^0.3.5"
"@humanfs/node" "^0.16.6"
"@humanwhocodes/module-importer" "^1.0.1"
@@ -3314,10 +3317,10 @@ eslint@9.34.0:
natural-compare "^1.4.0"
optionator "^0.9.3"
-esmock@2.7.2:
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/esmock/-/esmock-2.7.2.tgz#af8f0116d1b550809f46d2fc36fc24c88c73faf7"
- integrity sha512-/ilhkWbW4FXgQpRbS0LZpKG1AFkiFZkmapP/868Lqa4hSKgKVtMilFXlQrIMssLzyvpeDVg2Q9L3VInnqYoTAg==
+esmock@2.7.3:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esmock/-/esmock-2.7.3.tgz#25d8fd57b9608f9430185c501e7dab91fb1247bc"
+ integrity sha512-/M/YZOjgyLaVoY6K83pwCsGE1AJQnj4S4GyXLYgi/Y79KL8EeW6WU7Rmjc89UO7jv6ec8+j34rKeWOfiLeEu0A==
espree@^10.0.1, espree@^10.4.0:
version "10.4.0"
@@ -3484,7 +3487,7 @@ fd-slicer@~1.1.0:
dependencies:
pend "~1.2.0"
-fdir@^6.4.4, fdir@^6.5.0:
+fdir@^6.5.0:
version "6.5.0"
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
@@ -3713,6 +3716,11 @@ get-east-asian-width@^1.0.0:
resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389"
integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==
+get-east-asian-width@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6"
+ integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==
+
get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
@@ -3991,14 +3999,6 @@ http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1:
agent-base "^7.1.0"
debug "^4.3.4"
-https-proxy-agent@5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
- integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
- dependencies:
- agent-base "6"
- debug "4"
-
https-proxy-agent@^7.0.6:
version "7.0.6"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
@@ -4222,11 +4222,6 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-is-fullwidth-code-point@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
- integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
-
is-fullwidth-code-point@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704"
@@ -4559,38 +4554,30 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
-lilconfig@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4"
- integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==
-
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-lint-staged@16.1.6:
- version "16.1.6"
- resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.1.6.tgz#b0830df339a71f4207979a47c7be8ab0f38543ad"
- integrity sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==
+lint-staged@16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.2.0.tgz#ea7157bf007bdb50d2bb0559bc91c8e77d71c84b"
+ integrity sha512-spdYSOCQ2MdZ9CM1/bu/kDmaYGsrpNOeu1InFFV8uhv14x6YIubGxbCpSmGILFoxkiheNQPDXSg5Sbb5ZuVnug==
dependencies:
- chalk "^5.6.0"
- commander "^14.0.0"
- debug "^4.4.1"
- lilconfig "^3.1.3"
- listr2 "^9.0.3"
- micromatch "^4.0.8"
- nano-spawn "^1.0.2"
- pidtree "^0.6.0"
- string-argv "^0.3.2"
- yaml "^2.8.1"
+ commander "14.0.1"
+ listr2 "9.0.4"
+ micromatch "4.0.8"
+ nano-spawn "1.0.3"
+ pidtree "0.6.0"
+ string-argv "0.3.2"
+ yaml "2.8.1"
-listr2@^9.0.3:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.3.tgz#5181284019e1d577dc2d705ca6d3a148cf15adf3"
- integrity sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==
+listr2@9.0.4:
+ version "9.0.4"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.4.tgz#2916e633ae6e09d1a3f981172937ac1c5a8fa64f"
+ integrity sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==
dependencies:
- cli-truncate "^4.0.0"
+ cli-truncate "^5.0.0"
colorette "^2.0.20"
eventemitter3 "^5.0.1"
log-update "^6.1.0"
@@ -4655,13 +4642,6 @@ lottie-web@^5.12.2:
resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.13.0.tgz#441d3df217cc8ba302338c3f168e1a3af0f221d3"
integrity sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==
-lowdb@7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-7.0.1.tgz#7354a684547d76206b1c730b9434604235b125e5"
- integrity sha512-neJAj8GwF0e8EpycYIDFqEPcx9Qz4GUho20jWFR7YiFeXzF1YMLdxB36PypcTSPMA+4+LvgyMacYhlr18Zlymw==
- dependencies:
- steno "^4.0.2"
-
lru-cache@^10.2.0:
version "10.4.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
@@ -5291,7 +5271,7 @@ micromark@^4.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
-micromatch@^4.0.8:
+micromatch@4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
@@ -5385,13 +5365,6 @@ mixin-object@^2.0.1:
for-in "^0.1.3"
is-extendable "^0.1.1"
-mixpanel@^0.18.1:
- version "0.18.1"
- resolved "https://registry.yarnpkg.com/mixpanel/-/mixpanel-0.18.1.tgz#beefdce6c260165f4e2059c8cdd34c5c557162f7"
- integrity sha512-YD1xfn6WP6ZLQ6Pmgh0KgdXhueJEsrodThMTsHzHMH0VbWa9ck8s+ynDtM83OSgt+yQ61W/SQNrH8Y4wIwocGg==
- dependencies:
- https-proxy-agent "5.0.0"
-
mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
@@ -5428,15 +5401,15 @@ ms@^2.1.1, ms@^2.1.3:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-nano-spawn@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/nano-spawn/-/nano-spawn-1.0.2.tgz#9853795681f0e96ef6f39104c2e4347b6ba79bf6"
- integrity sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==
+nano-spawn@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/nano-spawn/-/nano-spawn-1.0.3.tgz#ef8d89a275eebc8657e67b95fc312a6527a05b8d"
+ integrity sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==
-nanoid@5.1.5:
- version "5.1.5"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.5.tgz#f7597f9d9054eb4da9548cdd53ca70f1790e87de"
- integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==
+nanoid@5.1.6:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.6.tgz#30363f664797e7d40429f6c16946d6bd7a3f26c9"
+ integrity sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==
nanoid@^3.3.11:
version "3.3.11"
@@ -5478,6 +5451,11 @@ node-abi@^3.3.0:
dependencies:
semver "^7.3.5"
+node-cron@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/node-cron/-/node-cron-4.2.1.tgz#6979be4aee4702f06322d21220df8de252c8e265"
+ integrity sha512-lgimEHPE/QDgFlywTd8yTR61ptugX3Qer29efeyWw2rv259HtGBNn1vZVmp8lB9uo9wC0t/AT4iGqXxia+CJFg==
+
node-domexception@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
@@ -5834,12 +5812,12 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-picomatch@^4.0.2, picomatch@^4.0.3:
+picomatch@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
-pidtree@^0.6.0:
+pidtree@0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
@@ -5984,16 +5962,17 @@ punycode@^2.1.0:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
-puppeteer-core@24.18.0:
- version "24.18.0"
- resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.18.0.tgz#444388d619de422f1d325b313942f46fa2925d96"
- integrity sha512-As0BvfXxek2MbV0m7iqBmQKFnfSrzSvTM4zGipjd4cL+9f2Ccgut6RvHlc8+qBieKHqCMFy9BSI4QyveoYXTug==
+puppeteer-core@24.22.0:
+ version "24.22.0"
+ resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.22.0.tgz#4d576b1a2b7699c088d3f0e843c32d81df82c3a6"
+ integrity sha512-oUeWlIg0pMz8YM5pu0uqakM+cCyYyXkHBxx9di9OUELu9X9+AYrNGGRLK9tNME3WfN3JGGqQIH3b4/E9LGek/w==
dependencies:
- "@puppeteer/browsers" "2.10.8"
+ "@puppeteer/browsers" "2.10.10"
chromium-bidi "8.0.0"
- debug "^4.4.1"
- devtools-protocol "0.0.1475386"
+ debug "^4.4.3"
+ devtools-protocol "0.0.1495869"
typed-query-selector "^2.12.0"
+ webdriver-bidi-protocol "0.2.11"
ws "^8.18.3"
puppeteer-extra-plugin-stealth@^2.11.2:
@@ -6043,16 +6022,16 @@ puppeteer-extra@^3.3.6:
debug "^4.1.1"
deepmerge "^4.2.2"
-puppeteer@^24.18.0:
- version "24.18.0"
- resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.18.0.tgz#7bb2668b219fed4f23aa98ac1650766f4306b743"
- integrity sha512-Ke8oL/87GhzKIM2Ag6Yj49t5xbGc4rspGIuSuFLFCQBtYzWqCSanvqoCu08WkI78rbqcwnHjxiTH6oDlYFrjrw==
+puppeteer@^24.22.0:
+ version "24.22.0"
+ resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.22.0.tgz#9f6905e9c3d5c316c364adb598903a1dfbfe800f"
+ integrity sha512-QabGIvu7F0hAMiKGHZCIRHMb6UoH0QAJA2OaqxEU2tL5noXPrxUcotg2l3ttOA4p1PFnVIGkr6PXRAWlM2evVQ==
dependencies:
- "@puppeteer/browsers" "2.10.8"
+ "@puppeteer/browsers" "2.10.10"
chromium-bidi "8.0.0"
cosmiconfig "^9.0.0"
- devtools-protocol "0.0.1475386"
- puppeteer-core "24.18.0"
+ devtools-protocol "0.0.1495869"
+ puppeteer-core "24.22.0"
typed-query-selector "^2.12.0"
qs@^6.14.0:
@@ -6062,10 +6041,10 @@ qs@^6.14.0:
dependencies:
side-channel "^1.1.0"
-query-string@9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-9.2.2.tgz#a0104824edfdd2c1db2f18af71cef7abf6a3b20f"
- integrity sha512-pDSIZJ9sFuOp6VnD+5IkakSVf+rICAuuU88Hcsr6AKL0QtxSIfVuKiVP2oahFI7tk3CRSexwV+Ya6MOoTxzg9g==
+query-string@9.3.1:
+ version "9.3.1"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-9.3.1.tgz#d0c93e6c7fb7c17bdf04aa09e382114580ede270"
+ integrity sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw==
dependencies:
decode-uri-component "^0.4.1"
filter-obj "^5.1.0"
@@ -6129,14 +6108,6 @@ react-is@^18.2.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
-react-redux@9.2.0:
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5"
- integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==
- dependencies:
- "@types/use-sync-external-store" "^0.0.6"
- use-sync-external-store "^1.4.0"
-
react-refresh@^0.17.0:
version "0.17.0"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
@@ -6150,17 +6121,17 @@ react-resizable@^3.0.5:
prop-types "15.x"
react-draggable "^4.0.3"
-react-router-dom@7.8.2:
- version "7.8.2"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.8.2.tgz#25a8fc36588189baf3bbb5e360c8ffffbd2beabc"
- integrity sha512-Z4VM5mKDipal2jQ385H6UBhiiEDlnJPx6jyWsTYoZQdl5TrjxEV2a9yl3Fi60NBJxYzOTGTTHXPi0pdizvTwow==
+react-router-dom@7.9.1:
+ version "7.9.1"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.9.1.tgz#48044923701773da6362f9003ec46f308f293f15"
+ integrity sha512-U9WBQssBE9B1vmRjo9qTM7YRzfZ3lUxESIZnsf4VjR/lXYz9MHjvOxHzr/aUm4efpktbVOrF09rL/y4VHa8RMw==
dependencies:
- react-router "7.8.2"
+ react-router "7.9.1"
-react-router@7.8.2:
- version "7.8.2"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.8.2.tgz#9d2d4147ca72832c550acc60ed688062d18f70b8"
- integrity sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==
+react-router@7.9.1:
+ version "7.9.1"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.9.1.tgz#b227410c31f24dd416c939ca5d0f8d5c8a1404d4"
+ integrity sha512-pfAByjcTpX55mqSDGwGnY9vDCpxqBLASg0BMNAuMmpSGESo/TaOUG6BllhAtAkCGx8Rnohik/XtaqiYUJtgW2g==
dependencies:
cookie "^1.0.1"
set-cookie-parser "^2.6.0"
@@ -6258,23 +6229,6 @@ recma-stringify@^1.0.0:
unified "^11.0.0"
vfile "^6.0.0"
-redux-logger@3.0.6:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf"
- integrity sha512-JoCIok7bg/XpqA1JqCqXFypuqBbQzGQySrhFzewB7ThcnysTO30l4VCst86AuB9T9tuT03MAA56Jw2PNhRSNCg==
- dependencies:
- deep-diff "^0.3.5"
-
-redux-thunk@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3"
- integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==
-
-redux@5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b"
- integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==
-
reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
version "1.0.10"
resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9"
@@ -6788,14 +6742,6 @@ slack@11.0.2:
dependencies:
tiny-json-http "^7.0.2"
-slice-ansi@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
- integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
- dependencies:
- ansi-styles "^6.0.0"
- is-fullwidth-code-point "^4.0.0"
-
slice-ansi@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9"
@@ -6866,11 +6812,6 @@ statuses@^2.0.1:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382"
integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==
-steno@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/steno/-/steno-4.0.2.tgz#9bd9b0ffc226a1f9436f29132c8b8e7199d22c50"
- integrity sha512-yhPIQXjrlt1xv7dyPQg2P17URmXbuM5pdGkpiMB3RenprfiBlvK415Lctfe0eshk90oA7/tNq7WEiMK8RSP39A==
-
stop-iteration-iterator@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad"
@@ -6894,16 +6835,11 @@ streamx@^2.15.0, streamx@^2.21.0:
optionalDependencies:
bare-events "^2.2.0"
-string-argv@^0.3.2:
+string-argv@0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
-string-similarity@^4.0.4:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-4.0.4.tgz#42d01ab0b34660ea8a018da8f56a3309bb8b2a5b"
- integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==
-
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -6940,6 +6876,14 @@ string-width@^7.0.0:
get-east-asian-width "^1.0.0"
strip-ansi "^7.1.0"
+string-width@^8.0.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.1.0.tgz#9e9fb305174947cf45c30529414b5da916e9e8d1"
+ integrity sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==
+ dependencies:
+ get-east-asian-width "^1.3.0"
+ strip-ansi "^7.1.0"
+
string.prototype.matchall@^4.0.12:
version "4.0.12"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0"
@@ -7148,13 +7092,13 @@ tiny-json-http@^7.0.2:
resolved "https://registry.yarnpkg.com/tiny-json-http/-/tiny-json-http-7.5.1.tgz#82efaa190c3edf6f5f2d906a9e88f792d38f8532"
integrity sha512-lB7qkBGpL3HR/8gidBu3MMfgfnDj2mlvK/eYXgSbO06gKphemLKGp/TgRTy/BKVD7nCbgIeCm41lMNayXO1f2w==
-tinyglobby@^0.2.14:
- version "0.2.14"
- resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d"
- integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==
+tinyglobby@^0.2.15:
+ version "0.2.15"
+ resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2"
+ integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==
dependencies:
- fdir "^6.4.4"
- picomatch "^4.0.2"
+ fdir "^6.5.0"
+ picomatch "^4.0.3"
to-regex-range@^5.0.1:
version "5.0.1"
@@ -7438,11 +7382,6 @@ url-join@^4.0.0:
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
-use-sync-external-store@^1.4.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0"
- integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==
-
util-deprecate@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -7469,17 +7408,17 @@ vfile@^6.0.0:
"@types/unist" "^3.0.0"
vfile-message "^4.0.0"
-vite@7.1.4:
- version "7.1.4"
- resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.4.tgz#354944affb55e1aff0157406b74e0d0a3232df9a"
- integrity sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==
+vite@7.1.7:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.7.tgz#ed3f9f06e21d6574fe1ad425f6b0912d027ffc13"
+ integrity sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==
dependencies:
esbuild "^0.25.0"
fdir "^6.5.0"
picomatch "^4.0.3"
postcss "^8.5.6"
rollup "^4.43.0"
- tinyglobby "^0.2.14"
+ tinyglobby "^0.2.15"
optionalDependencies:
fsevents "~2.3.3"
@@ -7488,6 +7427,11 @@ web-streams-polyfill@^3.0.3:
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b"
integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==
+webdriver-bidi-protocol@0.2.11:
+ version "0.2.11"
+ resolved "https://registry.yarnpkg.com/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.2.11.tgz#dba18d9b0a33aed33fab272dbd6e42411ac753cc"
+ integrity sha512-Y9E1/oi4XMxcR8AT0ZC4OvYntl34SPgwjmELH+owjBr0korAX4jKgZULBWILGCVGdVCQ0dodTToIETozhG8zvA==
+
whatwg-encoding@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5"
@@ -7621,10 +7565,10 @@ ws@^8.18.3:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472"
integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==
-x-var@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/x-var/-/x-var-2.1.0.tgz#9143461ad050b83a8043987ebb263606a1e8274f"
- integrity sha512-EResegCrATlvIVNwrSt5wb4ip6XzUkjGp9cfr8nNcmfZB8Swg1NiesfcHBdvCs4Ed45cbWADeHcio0ZebJFYuQ==
+x-var@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/x-var/-/x-var-3.0.1.tgz#10a8d118930c143563cef7b7b3fc988f12936bb0"
+ integrity sha512-+DAw3e9txViMk/aONbLQS10Xg2+N5KBDyyfX7sJaRXkQ8bkpYqgBfrXaW0EvwEfVmFTTZHj0voXMeVlp2VJZ5Q==
dependencies:
dotenv "^16.4.5"
shelljs "^0.8.5"
@@ -7639,7 +7583,7 @@ yallist@^3.0.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-yaml@^2.8.1:
+yaml@2.8.1:
version "2.8.1"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79"
integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==
@@ -7690,6 +7634,11 @@ zod@^3.24.1:
resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34"
integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==
+zustand@^5.0.8:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/zustand/-/zustand-5.0.8.tgz#b998a0c088c7027a20f2709141a91cb07ac57f8a"
+ integrity sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==
+
zwitch@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"