feat(react/settings): port date time format

This commit is contained in:
Elian Doran 2025-08-18 14:19:38 +03:00
parent 16939e9fd5
commit ffc13f5de3
No known key found for this signature in database
14 changed files with 2121 additions and 2059 deletions

View File

@ -52,6 +52,7 @@
"normalize.css": "8.0.1",
"panzoom": "9.4.3",
"preact": "10.27.0",
"react-i18next": "15.6.1",
"split.js": "1.6.5",
"svg-pan-zoom": "3.6.2",
"tabulator-tables": "6.3.1",

View File

@ -3,6 +3,7 @@ import i18next from "i18next";
import i18nextHttpBackend from "i18next-http-backend";
import server from "./server.js";
import type { Locale } from "@triliumnext/commons";
import { initReactI18next } from "react-i18next";
let locales: Locale[] | null;
@ -16,6 +17,7 @@ export async function initLocale() {
locales = await server.get<Locale[]>("options/locales");
i18next.use(initReactI18next);
await i18next.use(i18nextHttpBackend).init({
lng: locale,
fallbackLng: "en",

View File

@ -125,7 +125,7 @@ function formatDateISO(date: Date) {
return `${date.getFullYear()}-${padNum(date.getMonth() + 1)}-${padNum(date.getDate())}`;
}
function formatDateTime(date: Date, userSuppliedFormat?: string): string {
export function formatDateTime(date: Date, userSuppliedFormat?: string): string {
if (userSuppliedFormat?.trim()) {
return dayjs(date).format(userSuppliedFormat);
} else {

View File

@ -1878,7 +1878,7 @@
},
"custom_date_time_format": {
"title": "自定义日期/时间格式",
"description": "通过<kbd></kbd>或工具栏的方式可自定义日期和时间格式,有关日期/时间格式字符串中各个字符的含义,请参阅<a href=\"https://day.js.org/docs/en/display/format\" target=\"_blank\" rel=\"noopener noreferrer\">Day.js docs</a>。",
"description": "通过<shortcut />或工具栏的方式可自定义日期和时间格式,有关日期/时间格式字符串中各个字符的含义,请参阅<doc>Day.js docs</doc>。",
"format_string": "日期/时间格式字符串:",
"formatted_time": "格式化后日期/时间:"
},

View File

@ -1372,7 +1372,7 @@
},
"custom_date_time_format": {
"title": "Custom Date/Time Format",
"description": "Customize the format of the date and time inserted via <kbd></kbd> or the toolbar. See <a href=\"https://day.js.org/docs/en/display/format\" target=\"_blank\" rel=\"noopener noreferrer\">Day.js docs</a> for available format tokens.",
"description": "Customize the format of the date and time inserted via <shortcut /> or the toolbar. See <doc>Day.js docs</doc> for available format tokens.",
"format_string": "Format string:",
"formatted_time": "Formatted date/time:"
},

File diff suppressed because it is too large Load Diff

View File

@ -728,7 +728,7 @@
},
"custom_date_time_format": {
"title": "日付/時刻フォーマットのカスタム",
"description": "<kbd></kbd>またはツールバーから挿入される日付と時刻のフォーマットをカスタマイズする。 利用可能なトークンについては <a href=\"https://day.js.org/docs/en/display/format\" target=\"_blank\" rel=\"noopener noreferrer\">Day.js ドキュメント</a> を参照してください。",
"description": "<shortcut />またはツールバーから挿入される日付と時刻のフォーマットをカスタマイズする。 利用可能なトークンについては <doc>Day.js ドキュメント</doc> を参照してください。",
"format_string": "文字列形式:",
"formatted_time": "日付/時刻形式:"
},

View File

@ -1864,7 +1864,7 @@
},
"custom_date_time_format": {
"title": "Format dată/timp personalizat",
"description": "Personalizați formatul de dată și timp inserat prin <kbd></kbd> sau din bara de unelte. Vedeți <a href=\"https://day.js.org/docs/en/display/format\" target=\"_blank\" rel=\"noopener noreferrer\">Documentația Day.js</a> pentru câmpurile de formatare disponibile.",
"description": "Personalizați formatul de dată și timp inserat prin <shortcut /> sau din bara de unelte. Vedeți <doc>Documentația Day.js</doc> pentru câmpurile de formatare disponibile.",
"format_string": "Șir de formatare:",
"formatted_time": "Data și ora formatate:"
},

View File

@ -1783,7 +1783,7 @@
},
"custom_date_time_format": {
"title": "自訂日期/時間格式",
"description": "透過 <kbd></kbd> 或工具列自訂插入日期和時間的格式。有關可用的格式及符號,請參閱 <a href=\"https://day.js.org/docs/en/display/format\" target=\"_blank\" rel=\"noopener noreferrer\">Day.js docs</a>。",
"description": "透過 <shortcut /> 或工具列自訂插入日期和時間的格式。有關可用的格式及符號,請參閱 <doc>Day.js docs</doc>。",
"format_string": "格式化字串:",
"formatted_time": "格式化日期/時間:"
},

View File

@ -0,0 +1,33 @@
import { ActionKeyboardShortcut, KeyboardActionNames } from "@triliumnext/commons";
import { useEffect, useState } from "preact/hooks";
import keyboard_actions from "../../services/keyboard_actions";
interface KeyboardShortcutProps {
actionName: KeyboardActionNames;
}
export default function KeyboardShortcut({ actionName }: KeyboardShortcutProps) {
const [ action, setAction ] = useState<ActionKeyboardShortcut>();
useEffect(() => {
keyboard_actions.getAction(actionName).then(setAction);
}, []);
if (!action) {
return <></>;
}
return (
<>
{action.effectiveShortcuts?.map((shortcut, i) => {
const keys = shortcut.split("+");
return keys
.map((key, i) => (
<>
<kbd>{key}</kbd> {i + 1 < keys.length && "+ "}
</>
))
}).reduce<any>((acc, item) => (acc.length ? [...acc, ", ", item] : [item]), [])}
</>
);
}

View File

@ -29,4 +29,4 @@ export function renderReactWidget(parentComponent: Component, el: JSX.Element) {
</ParentComponent.Provider>
), renderContainer);
return $(renderContainer.children) as JQuery<HTMLElement>;
}
}

View File

@ -4,18 +4,20 @@ import FormCheckbox from "../../react/FormCheckbox";
import FormRadioGroup from "../../react/FormRadioGroup";
import { useTriliumOption, useTriliumOptionBool, useTriliumOptionJson } from "../../react/hooks";
import OptionsSection from "./components/OptionsSection";
import { toggleBodyClass } from "../../../services/utils";
import { formatDateTime, toggleBodyClass } from "../../../services/utils";
import FormGroup from "../../react/FormGroup";
import Column from "../../react/Column";
import { FormSelectGroup, FormSelectWithGroups } from "../../react/FormSelect";
import { Themes, type Theme } from "@triliumnext/highlightjs";
import { Themes } from "@triliumnext/highlightjs";
import { ensureMimeTypesForHighlighting, loadHighlightingTheme } from "../../../services/syntax_highlight";
import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons";
import { getHtml } from "../../react/RawHtml";
import { CSSProperties } from "preact/compat";
import FormText from "../../react/FormText";
import { FormTextBoxWithUnit } from "../../react/FormTextBox";
import FormTextBox, { FormTextBoxWithUnit } from "../../react/FormTextBox";
import CheckboxList from "./components/CheckboxList";
import KeyboardShortcut from "../../react/KeyboardShortcut";
import { Trans } from "react-i18next";
export default function TextNoteSettings() {
return (
@ -27,6 +29,7 @@ export default function TextNoteSettings() {
<TableOfContent />
<HighlightsList />
<AutoReadOnlySize />
<DateTimeFormatOptions />
</>
)
}
@ -299,4 +302,40 @@ function AutoReadOnlySize() {
</FormGroup>
</OptionsSection>
)
}
function DateTimeFormatOptions() {
const [ customDateTimeFormat, setCustomDateTimeFormat ] = useTriliumOption("customDateTimeFormat");
return (
<OptionsSection title={t("custom_date_time_format.title")}>
<FormText>
<Trans
i18nKey="custom_date_time_format.description"
components={{
shortcut: <KeyboardShortcut actionName="insertDateTimeToText" />,
doc: <a href="https://day.js.org/docs/en/display/format" target="_blank" rel="noopener noreferrer" />
}}
/>
</FormText>
<FormGroup className="row align-items-center">
<Column>
<label>{t("custom_date_time_format.format_string")}</label>
<FormTextBox
name="custom-date-time-format"
placeholder="YYYY-MM-DD HH:mm"
currentValue={customDateTimeFormat || "YYYY-MM-DD HH:mm"} onChange={setCustomDateTimeFormat}
/>
</Column>
<Column>
<label>{t("custom_date_time_format.formatted_time")}</label>
<div className="formatted-date">
{formatDateTime(new Date(), customDateTimeFormat)}
</div>
</Column>
</FormGroup>
</OptionsSection>
)
}

View File

@ -7,10 +7,7 @@ import linkService from "../../../.././services/link.js";
const TPL = /*html*/`
<div class="options-section">
<h4>${t("custom_date_time_format.title")}</h4>
<p class="description use-tn-links">
${t("custom_date_time_format.description")}
</p>
<div class="form-group row align-items-center">
@ -52,7 +49,7 @@ export default class DateTimeFormatOptions extends OptionsWidget {
}
async optionsLoaded(options: OptionMap) {
const action = await keyboardActionsService.getAction("insertDateTimeToText");
const action = await keyboardActionsService.getAction("");
const shortcutKey = (action.effectiveShortcuts ?? []).join(", ");
const $link = await linkService.createLink("_hidden/_options/_optionsShortcuts", {
"title": shortcutKey,

110
pnpm-lock.yaml generated
View File

@ -285,6 +285,9 @@ importers:
preact:
specifier: 10.27.0
version: 10.27.0
react-i18next:
specifier: 15.6.1
version: 15.6.1(i18next@25.3.4(typescript@5.9.2))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.2)
split.js:
specifier: 1.6.5
version: 1.6.5
@ -900,7 +903,7 @@ importers:
version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
'@vitest/browser':
specifier: ^3.0.5
version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(playwright@1.54.2)(utf-8-validate@6.0.5)(vite@7.0.0(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(playwright@1.54.2)(utf-8-validate@6.0.5)(vite@7.1.2(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: ^3.0.5
version: 3.2.4(vitest@3.2.4)
@ -933,7 +936,7 @@ importers:
version: 5.9.2
vite-plugin-svgo:
specifier: ~2.0.0
version: 2.0.0(typescript@5.9.2)(vite@7.0.0(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
version: 2.0.0(typescript@5.9.2)(vite@7.1.2(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
vitest:
specifier: ^3.0.5
version: 3.2.4(@types/debug@4.1.12)(@types/node@24.2.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
@ -9413,6 +9416,9 @@ packages:
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
html-parse-stringify@3.0.1:
resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
html-tags@3.3.1:
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
engines: {node: '>=8'}
@ -12823,6 +12829,22 @@ packages:
peerDependencies:
react: ^19.1.0
react-i18next@15.6.1:
resolution: {integrity: sha512-uGrzSsOUUe2sDBG/+FJq2J1MM+Y4368/QW8OLEKSFvnDflHBbZhSd1u3UkW0Z06rMhZmnB/AQrhCpYfE5/5XNg==}
peerDependencies:
i18next: '>= 23.2.3'
react: '>= 16.8.0'
react-dom: '*'
react-native: '*'
typescript: ^5
peerDependenciesMeta:
react-dom:
optional: true
react-native:
optional: true
typescript:
optional: true
react-interactive@0.8.3:
resolution: {integrity: sha512-mmRvA9aKP7zu9kVfP1AX1egX8tFlnE3DDXq92z0JTZezfOpmeQBzr77O1+mTV54OOmn+M2t6c5kFD5VnuFoM7A==}
peerDependencies:
@ -14930,6 +14952,10 @@ packages:
jsdom:
optional: true
void-elements@3.1.0:
resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
engines: {node: '>=0.10.0'}
vscode-jsonrpc@8.2.0:
resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
engines: {node: '>=14.0.0'}
@ -16724,8 +16750,6 @@ snapshots:
'@ckeditor/ckeditor5-core': 46.0.1
'@ckeditor/ckeditor5-upload': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-ai@46.0.1':
dependencies:
@ -16856,8 +16880,6 @@ snapshots:
'@ckeditor/ckeditor5-core': 46.0.1
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-code-block@46.0.1(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)':
dependencies:
@ -16869,6 +16891,8 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.1
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-collaboration-core@46.0.1':
dependencies:
@ -16915,8 +16939,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.1
'@ckeditor/ckeditor5-watchdog': 46.0.1
es-toolkit: 1.39.5
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.2)':
dependencies:
@ -17081,8 +17103,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-editor-classic@46.0.1':
dependencies:
@ -17092,8 +17112,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-editor-decoupled@46.0.1':
dependencies:
@ -17103,8 +17121,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-editor-inline@46.0.1':
dependencies:
@ -17138,8 +17154,6 @@ snapshots:
'@ckeditor/ckeditor5-table': 46.0.1
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-emoji@46.0.1':
dependencies:
@ -17285,8 +17299,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.1
'@ckeditor/ckeditor5-widget': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-html-embed@46.0.1':
dependencies:
@ -17313,8 +17325,6 @@ snapshots:
'@ckeditor/ckeditor5-widget': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-icons@46.0.1': {}
@ -17576,8 +17586,6 @@ snapshots:
'@ckeditor/ckeditor5-paste-from-office': 46.0.1
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-paste-from-office@46.0.1':
dependencies:
@ -17585,8 +17593,6 @@ snapshots:
'@ckeditor/ckeditor5-core': 46.0.1
'@ckeditor/ckeditor5-engine': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-real-time-collaboration@46.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)':
dependencies:
@ -17617,8 +17623,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.1
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-restricted-editing@46.0.1':
dependencies:
@ -17628,8 +17632,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.1
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-revision-history@46.0.1':
dependencies:
@ -17706,8 +17708,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.1
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-special-characters@46.0.1':
dependencies:
@ -17717,8 +17717,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.1
'@ckeditor/ckeditor5-utils': 46.0.1
ckeditor5: 46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
transitivePeerDependencies:
- supports-color
'@ckeditor/ckeditor5-style@46.0.1':
dependencies:
@ -22431,26 +22429,6 @@ snapshots:
- vite
optional: true
'@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(playwright@1.54.2)(utf-8-validate@6.0.5)(vite@7.0.0(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))':
dependencies:
'@testing-library/dom': 10.4.0
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0)
'@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(vite@7.0.0(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
'@vitest/utils': 3.2.4
magic-string: 0.30.17
sirv: 3.0.1
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.2.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
optionalDependencies:
playwright: 1.54.2
webdriverio: 9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- bufferutil
- msw
- utf-8-validate
- vite
'@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(playwright@1.54.2)(utf-8-validate@6.0.5)(vite@7.1.2(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))':
dependencies:
'@testing-library/dom': 10.4.0
@ -22582,7 +22560,7 @@ snapshots:
sirv: 3.0.1
tinyglobby: 0.2.14
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.2.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.1)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.1)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1)
'@vitest/utils@3.2.4':
dependencies:
@ -23691,6 +23669,8 @@ snapshots:
ckeditor5-collaboration@46.0.1:
dependencies:
'@ckeditor/ckeditor5-collaboration-core': 46.0.1
transitivePeerDependencies:
- supports-color
ckeditor5-premium-features@46.0.1(bufferutil@4.0.9)(ckeditor5@46.0.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41))(utf-8-validate@6.0.5):
dependencies:
@ -26573,6 +26553,10 @@ snapshots:
html-escaper@2.0.2: {}
html-parse-stringify@3.0.1:
dependencies:
void-elements: 3.1.0
html-tags@3.3.1: {}
html-void-elements@3.0.0: {}
@ -30613,6 +30597,16 @@ snapshots:
react: 16.14.0
scheduler: 0.26.0
react-i18next@15.6.1(i18next@25.3.4(typescript@5.9.2))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.2):
dependencies:
'@babel/runtime': 7.27.6
html-parse-stringify: 3.0.1
i18next: 25.3.4(typescript@5.9.2)
react: 16.14.0
optionalDependencies:
react-dom: 19.1.0(react@16.14.0)
typescript: 5.9.2
react-interactive@0.8.3(react@16.14.0):
dependencies:
detect-it: 3.0.7
@ -33115,12 +33109,6 @@ snapshots:
tinyglobby: 0.2.14
vite: 7.1.2(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
vite-plugin-svgo@2.0.0(typescript@5.9.2)(vite@7.0.0(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
dependencies:
svgo: 3.3.2
typescript: 5.9.2
vite: 7.0.0(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
vite-plugin-svgo@2.0.0(typescript@5.9.2)(vite@7.1.2(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
dependencies:
svgo: 3.3.2
@ -33295,7 +33283,7 @@ snapshots:
optionalDependencies:
'@types/debug': 4.1.12
'@types/node': 24.2.1
'@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(playwright@1.54.2)(utf-8-validate@6.0.5)(vite@7.0.0(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.2.1)(typescript@5.9.2))(playwright@1.54.2)(utf-8-validate@6.0.5)(vite@7.1.2(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/ui': 3.2.4(vitest@3.2.4)
happy-dom: 18.0.1
jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@ -33313,6 +33301,8 @@ snapshots:
- tsx
- yaml
void-elements@3.1.0: {}
vscode-jsonrpc@8.2.0: {}
vscode-languageserver-protocol@3.17.5: