diff --git a/packages/devextreme/eslint.config.mjs b/packages/devextreme/eslint.config.mjs index e0cb22499c55..90d6737645da 100644 --- a/packages/devextreme/eslint.config.mjs +++ b/packages/devextreme/eslint.config.mjs @@ -38,6 +38,7 @@ export default [ 'themebuilder-scss/src/data/metadata/*', 'js/bundles/dx.custom.js', 'testing/jest/utils/transformers/*', + 'vite.config.ts', '**/ts/', 'js/common/core/localization/cldr-data/*', 'js/common/core/localization/default_messages.js', diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts index d4bba916e5ae..4c27b383f3f0 100644 --- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts +++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts @@ -1392,6 +1392,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { // TODO: SSR does not work correctly with renovated render renovateRender: this._isRenovatedRender(isVirtualScrolling), + skippedDays: currentViewOptions.skippedDays || [], }, currentViewOptions); result.notifyScheduler = this._notifyScheduler; diff --git a/packages/devextreme/js/__internal/scheduler/view_model/filtration/utils/filter_by_attributes/filter_by_attributes.ts b/packages/devextreme/js/__internal/scheduler/view_model/filtration/utils/filter_by_attributes/filter_by_attributes.ts index 43c49a114b79..a956f21ab6a3 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/filtration/utils/filter_by_attributes/filter_by_attributes.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/filtration/utils/filter_by_attributes/filter_by_attributes.ts @@ -3,7 +3,9 @@ import { isAppointmentMatchedResources } from './is_appointment_matched_resource export const filterByAttributes = ( entities: T[], - { resourceManager, showAllDayPanel, supportAllDayPanel }: FilterOptions, + { + resourceManager, showAllDayPanel, supportAllDayPanel, viewDataProvider, + }: FilterOptions, ): T[] => entities.filter((appointment): boolean => { if (!appointment.visible) { return false; @@ -18,6 +20,13 @@ export const filterByAttributes = { dataAccessor: schedulerStore._dataAccessors, viewOffset, firstDayOfWeek: schedulerStore.option('firstDayOfWeek'), + viewDataProvider: schedulerStore._workSpace?.viewDataProvider, allDayIntervals: shiftIntervals( getVisibleDateTimeIntervals(compareOptions, true), viewOffset, diff --git a/packages/devextreme/js/__internal/scheduler/view_model/types.ts b/packages/devextreme/js/__internal/scheduler/view_model/types.ts index 892cb06dc850..77918a840223 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/types.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/types.ts @@ -1,6 +1,6 @@ import type { Orientation } from '@js/common'; -import type { AllDayPanelModeType, SafeAppointment } from '../types'; +import type { AllDayPanelModeType, SafeAppointment, ViewDataProviderType } from '../types'; import type { AppointmentDataAccessor } from '../utils/data_accessor/appointment_data_accessor'; import type { ResourceManager } from '../utils/resource_manager/resource_manager'; import type { GroupLeaf } from '../utils/resource_manager/types'; @@ -50,6 +50,7 @@ export interface FilterOptions { firstDayOfWeek?: number; allDayIntervals: DateInterval[]; regularIntervals: DateInterval[]; + viewDataProvider?: ViewDataProviderType; } export interface SortedIndex { diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space.ts b/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space.ts index c1649f57b664..453a456d3289 100644 --- a/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space.ts +++ b/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space.ts @@ -894,6 +894,12 @@ class SchedulerWorkSpace extends Widget { startDate: this.option('startDate'), firstDayOfWeek: this.option('firstDayOfWeek'), showCurrentTimeIndicator: this.option('showCurrentTimeIndicator'), + currentView: { + type: this.type, + skippedDays: this.option('skippedDays'), + skippedDates: this.option('skippedDates'), + skipDatePredicate: this.option('skipDatePredicate'), + }, ...this.virtualScrollingDispatcher.getRenderState(), }; diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_types.ts b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_types.ts index 6662e5e7a9d6..d02dc87dd095 100644 --- a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_types.ts +++ b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_types.ts @@ -30,6 +30,12 @@ interface CommonOptions extends CountGenerationConfig { cellDuration: number; indicatorTime?: Date; timeZoneCalculator?: TimeZoneCalculator; + currentView?: { + type: ViewType; + skippedDays?: number[]; + skippedDates?: number[]; + skipDatePredicate?: (date: Date) => boolean; + }; } export interface ViewDataProviderOptions extends CommonOptions { diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator.ts b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator.ts index 7f0ea1b5b862..53ecf2775914 100644 --- a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator.ts +++ b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator.ts @@ -34,6 +34,8 @@ export class ViewDataGenerator { public hiddenInterval = 0; + protected currentViewOptions: any; + constructor(public readonly viewType: ViewType) {} public isWorkWeekView(): boolean { @@ -43,8 +45,27 @@ export class ViewDataGenerator { ].includes(this.viewType); } - // eslint-disable-next-line @typescript-eslint/no-unused-vars public isSkippedDate(date: any) { + const actualDate = date.getDay ? date : new Date(date); + + if (this.currentViewOptions?.currentView?.skipDatePredicate) { + return this.currentViewOptions.currentView.skipDatePredicate(actualDate); + } + + if (this.currentViewOptions?.currentView?.skippedDays) { + const day = actualDate.getDay(); + if (this.currentViewOptions.currentView.skippedDays.includes(day)) { + return true; + } + } + + if (this.currentViewOptions?.currentView?.skippedDates) { + const dateOfMonth = actualDate.getDate(); + if (this.currentViewOptions.currentView.skippedDates.includes(dateOfMonth)) { + return true; + } + } + return false; } @@ -74,6 +95,8 @@ export class ViewDataGenerator { hoursInterval, } = options; + this.currentViewOptions = options; + this._setVisibilityDates(options); this.setHiddenInterval(startDayHour, endDayHour, hoursInterval); @@ -82,9 +105,10 @@ export class ViewDataGenerator { intervalCount, currentDate, viewType, + hoursInterval, startDayHour, endDayHour, - hoursInterval, + currentView: options.currentView, }); const rowCountInGroup = this.getRowCount({ intervalCount, @@ -504,6 +528,7 @@ export class ViewDataGenerator { firstDayOfWeek, intervalCount, viewOffset, + currentView, } = options; const cellCountInDay = this.getCellCountInDay(startDayHour, endDayHour, hoursInterval); @@ -525,6 +550,32 @@ export class ViewDataGenerator { let currentDate = new Date( startViewDateTime + millisecondsOffset + offsetByCount + viewOffset, ); + + if (currentView?.skippedDays && currentView.skippedDays.length > 0) { + // For week/workWeek views, columnIndex directly represents day index + // We need to map visual columnIndex to actual day, skipping hidden days + let actualDaysCount = 0; + const dateToCheck = new Date(startViewDate); + + // Skip to the target day, accounting for skipped days + while (actualDaysCount < columnIndex) { + const isSkipped = this.isSkippedDate(dateToCheck); + + if (!isSkipped) { + actualDaysCount++; + } + dateToCheck.setDate(dateToCheck.getDate() + 1); + } + + // Now dateToCheck might land on a skipped day, so skip forward to next valid day + while (this.isSkippedDate(dateToCheck)) { + dateToCheck.setDate(dateToCheck.getDate() + 1); + } + + const timeOfDay = millisecondsOffset % toMs('day'); + currentDate = new Date(dateToCheck.getTime() + timeOfDay + viewOffset); + } + const isMidnightDSTViewStart = timezoneUtils.isLocalTimeMidnightDST(startViewDate); const isMidnightDST = timezoneUtils.isLocalTimeMidnightDST(currentDate); @@ -761,6 +812,7 @@ export class ViewDataGenerator { startDayHour, endDayHour, hoursInterval, + currentView, } = options; const cellCountInDay = this.getCellCountInDay(startDayHour, endDayHour, hoursInterval); @@ -768,7 +820,13 @@ export class ViewDataGenerator { ? cellCountInDay : 1; - return this.daysInInterval * intervalCount * columnCountInDay; + let { daysInInterval } = this; + + if (currentView?.skippedDays && currentView.skippedDays.length > 0) { + daysInInterval = this.daysInInterval - currentView.skippedDays.length; + } + + return daysInInterval * intervalCount * columnCountInDay; } public getRowCount(options): number { diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_month.ts b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_month.ts index 16b61e8fa4f1..80d574451d44 100644 --- a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_month.ts +++ b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_month.ts @@ -89,8 +89,14 @@ export class ViewDataGeneratorMonth extends ViewDataGenerator { this._maxVisibleDate = new Date(nextMonthDate.setDate(0)); } - getCellCount() { - return DAYS_IN_WEEK; + getCellCount(options?) { + let cellCount = DAYS_IN_WEEK; + + if (options?.currentView?.skippedDays && options.currentView.skippedDays.length > 0) { + cellCount = DAYS_IN_WEEK - options.currentView.skippedDays.length; + } + + return cellCount; } getRowCount(options) { diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_work_week.ts b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_work_week.ts index 400b4e85b29b..3fc5cc95e77a 100644 --- a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_work_week.ts +++ b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_work_week.ts @@ -5,6 +5,13 @@ export class ViewDataGeneratorWorkWeek extends ViewDataGeneratorWeek { readonly daysInInterval = 5; isSkippedDate(date) { + if (this.currentViewOptions?.currentView?.skippedDays) { + const day = date.getDay ? date.getDay() : new Date(date).getDay(); + if (this.currentViewOptions.currentView.skippedDays.includes(day)) { + return true; + } + } + return isDataOnWeekend(date); } diff --git a/packages/devextreme/package.json b/packages/devextreme/package.json index 15030d4d7d66..a1b2de94713b 100644 --- a/packages/devextreme/package.json +++ b/packages/devextreme/package.json @@ -209,6 +209,8 @@ "vinyl": "2.2.1", "vinyl-named": "1.1.0", "webpack": "5.103.0", + "vite": "^7.1.3", + "vite-plugin-inferno": "^0.0.1", "webpack-stream": "7.0.0", "yaml": "2.5.0", "yargs": "17.7.2" @@ -244,6 +246,7 @@ "validate-ts": "gulp validate-ts", "validate-declarations": "dx-tools validate-declarations --sources ./js --exclude \"js/(renovation|__internal|.eslintrc.js)\" --compiler-options \"{ \\\"typeRoots\\\": [] }\"", "testcafe-in-docker": "docker build -f ./testing/testcafe/docker/Dockerfile -t testcafe-testing . && docker run -it testcafe-testing", + "dev:playground": "vite", "test-jest": "cross-env NODE_OPTIONS='--expose-gc' jest --no-coverage --runInBand --selectProjects jsdom-tests", "test-jest:watch": "jest --watch", "test-jest:node": "jest --no-coverage --runInBand --selectProjects node-tests", diff --git a/packages/devextreme/playground/index.html b/packages/devextreme/playground/index.html new file mode 100644 index 000000000000..e1f3659444ed --- /dev/null +++ b/packages/devextreme/playground/index.html @@ -0,0 +1,25 @@ + + + + + + DevExtreme HMR Playground + + +
+ +
+
+ + + + diff --git a/packages/devextreme/playground/newThemeSelector.ts b/packages/devextreme/playground/newThemeSelector.ts new file mode 100644 index 000000000000..8ef0fd8b2bcd --- /dev/null +++ b/packages/devextreme/playground/newThemeSelector.ts @@ -0,0 +1,87 @@ +const themeKey = 'currentThemeId'; + +const themeLoaders = import.meta.glob('../artifacts/css/dx.*.css', { as: 'url' }); + +const themeList = Object.keys(themeLoaders).map((path) => { + const match = path.match(/dx\.(.+)\.css$/); + return match ? match[1] : null; +}).filter(Boolean) as string[]; + +function groupThemes(themes: string[]) { + const groups: Record = {}; + themes.forEach((theme) => { + const [group] = theme.split('.'); + const groupName = group.charAt(0).toUpperCase() + group.slice(1); + if (!groups[groupName]) groups[groupName] = []; + groups[groupName].push(theme); + }); + return groups; +} + +const groupedThemes = groupThemes(themeList); + +function initThemes(dropDownList: HTMLSelectElement) { + Object.entries(groupedThemes).forEach(([group, themes]) => { + const parent = document.createElement('optgroup'); + parent.label = group; + + themes.forEach((theme) => { + const child = document.createElement('option'); + child.value = theme; + child.text = theme.replaceAll('.', ' '); + parent.appendChild(child); + }); + + dropDownList.appendChild(parent); + }); +} + +function loadThemeCss(themeId: string): Promise { + return new Promise((resolve, reject) => { + const oldLink = document.getElementById('theme-stylesheet'); + if (oldLink) oldLink.remove(); + + const key = Object.keys(themeLoaders).find((p) => p.includes(`dx.${themeId}.css`)); + if (!key) { + reject(new Error(`Theme not found: ${themeId}`)); + return; + } + + themeLoaders[key]().then((cssUrl: string) => { + const link = document.createElement('link'); + link.id = 'theme-stylesheet'; + link.rel = 'stylesheet'; + link.href = cssUrl; + + link.onload = () => resolve(); + link.onerror = () => reject(new Error(`Failed to load theme: ${themeId}`)); + + document.head.appendChild(link); + }); + }); +} + +export function setupThemeSelector(selectorId: string): Promise { + return new Promise((resolve) => { + const dropDownList = document.querySelector(`#${selectorId}`); + if (!dropDownList) { + resolve(); + return; + } + + initThemes(dropDownList); + + const savedTheme = window.localStorage.getItem(themeKey) || themeList[0]; + dropDownList.value = savedTheme; + + loadThemeCss(savedTheme).then(() => { + dropDownList.addEventListener('change', () => { + const newTheme = dropDownList.value; + window.localStorage.setItem(themeKey, newTheme); + loadThemeCss(newTheme); + }); + + resolve(); + }); + }); +} diff --git a/packages/devextreme/playground/scheduler-example.ts b/packages/devextreme/playground/scheduler-example.ts new file mode 100644 index 000000000000..4293f4b2693f --- /dev/null +++ b/packages/devextreme/playground/scheduler-example.ts @@ -0,0 +1,134 @@ +import $ from 'jquery'; +import { setupThemeSelector } from './newthemeSelector'; +import Scheduler from '../js/__internal/scheduler/m_scheduler'; + +const dataSource = [ + { + text: "Monday Meeting", + startDate: new Date(2025, 11, 29, 9, 0), // Monday + endDate: new Date(2025, 11, 29, 10, 30), + allDay: false + }, + { + text: "Tuesday Conference", + startDate: new Date(2025, 11, 30, 14, 0), // Tuesday + endDate: new Date(2025, 11, 30, 15, 0), + allDay: false + }, + { + text: "Wednesday Team Event", + startDate: new Date(2025, 11, 31, 10, 0), // Wednesday + endDate: new Date(2025, 11, 31, 17, 0), + allDay: false + }, + { + text: "Thursday Planning", + startDate: new Date(2026, 0, 1, 11, 0), // Thursday + endDate: new Date(2026, 0, 1, 12, 0), + allDay: false + }, + { + text: "Friday Presentation", + startDate: new Date(2026, 0, 2, 15, 0), // Friday + endDate: new Date(2026, 0, 2, 16, 30), + allDay: false + }, + { + text: "Saturday Event (Should be hidden)", + startDate: new Date(2026, 0, 3, 10, 0), // Saturday + endDate: new Date(2026, 0, 3, 12, 0), + allDay: false + }, + { + text: "Sunday Event (Should be hidden)", + startDate: new Date(2026, 0, 4, 14, 0), // Sunday + endDate: new Date(2026, 0, 4, 16, 0), + allDay: false + }, + { + text: "Event on 15th (Should be hidden in month view)", + startDate: new Date(2026, 0, 15, 10, 0), // January 15th + endDate: new Date(2026, 0, 15, 12, 0), + allDay: false + }, + { + text: "Event on 13th (Should be hidden in month view)", + startDate: new Date(2026, 0, 13, 14, 0), + endDate: new Date(2026, 0, 13, 16, 0), + allDay: false + }, + { + text: "Event on Friday 13th (June)", + startDate: new Date(2026, 5, 13, 10, 0), + endDate: new Date(2026, 5, 13, 12, 0), + allDay: false + }, + { + text: "Event on Friday 13th (February)", + startDate: new Date(2026, 1, 13, 14, 0), + endDate: new Date(2026, 1, 13, 16, 0), + allDay: false + } +]; + +window.addEventListener('load', () => + setupThemeSelector('theme-selector').then(() => { + + console.log('Creating scheduler with views containing skippedDays...'); + + const scheduler = new (Scheduler as any)($('#container'), { + dataSource, + views: [ + 'month', + { type: 'day' }, + { + type: 'week', + name: 'Week (Hide Weekends)', + skippedDays: [0, 6] // Hide Sunday and Saturday + }, + { + type: 'week', + name: 'Week (Hide Mon & Wed)', + skippedDays: [1, 3] // Hide Monday and Wednesday + }, + { type: 'workWeek' }, + { + type: 'month', + name: 'Month (Hide 13th & 15th)', + skippedDates: [13, 15] + }, + { + type: 'month', + name: 'Month (Hide Friday 13th)', + skipDatePredicate: (date) => { + return date.getDay() === 5 && date.getDate() === 13; + } + }, + { type: 'month' } + ], + currentView: 'Month (Hide Friday 13th)', + currentDate: new Date(2026, 0, 1), + startDayHour: 8, + endDayHour: 18, + height: 600, + editing: { + allowAdding: true, + allowDeleting: true, + allowUpdating: true, + allowResizing: true, + allowDragging: true + }, + onAppointmentAdded: (e) => { + console.log('Appointment added:', e.appointmentData); + }, + onAppointmentUpdated: (e) => { + console.log('Appointment updated:', e.appointmentData); + }, + onAppointmentDeleted: (e) => { + console.log('Appointment deleted:', e.appointmentData); + } + }); + + console.log('Scheduler created:', scheduler); + console.log('Current view:', scheduler.option('currentView')); +})); diff --git a/packages/devextreme/vite.config.ts b/packages/devextreme/vite.config.ts new file mode 100644 index 000000000000..2c108f1786a5 --- /dev/null +++ b/packages/devextreme/vite.config.ts @@ -0,0 +1,32 @@ +import path from 'path'; +import { defineConfig } from 'vite'; +import inferno from 'vite-plugin-inferno' + +export default defineConfig(() => { + return { + root: './playground', + plugins: [inferno()], + server: { + port: 3000, + fs: { + allow: ['..', '.', './testing', '../..'] + }, + hmr: true + }, + resolve: { + alias: { + 'core': path.resolve(__dirname, './js/core'), + 'common': path.resolve(__dirname, './js/common'), + 'data': path.resolve(__dirname, './js/data'), + 'ui': path.resolve(__dirname, './js/ui'), + '@js': path.resolve(__dirname, './js'), + '@ts': path.resolve(__dirname, './js/__internal'), + '__internal': path.resolve(__dirname, './js/__internal'), + } + }, + esbuild: { + jsxFactory: 'Inferno.createVNode', + jsxFragment: 'Inferno.Fragment', + } + }; +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ae184939e4a..e3ac09507457 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1300,25 +1300,25 @@ importers: version: 7.23.9(@babel/core@7.23.9) '@devextreme-generator/angular': specifier: 3.0.12 - version: 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + version: 3.0.12(sfjr24vex4n6dtvllgrj4rephq) '@devextreme-generator/build-helpers': specifier: 3.0.12 - version: 3.0.12(e6vywxtfafvhkl3cckdbqzdxuy) + version: 3.0.12(g3qxw2o2vyaevm6fhhaeqpjjf4) '@devextreme-generator/core': specifier: 3.0.12 - version: 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + version: 3.0.12(sfjr24vex4n6dtvllgrj4rephq) '@devextreme-generator/declarations': specifier: 3.0.12 version: 3.0.12 '@devextreme-generator/inferno': specifier: 3.0.12 - version: 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + version: 3.0.12(sfjr24vex4n6dtvllgrj4rephq) '@devextreme-generator/react': specifier: 3.0.12 - version: 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + version: 3.0.12(sfjr24vex4n6dtvllgrj4rephq) '@devextreme-generator/vue': specifier: 3.0.12 - version: 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + version: 3.0.12(sfjr24vex4n6dtvllgrj4rephq) '@eslint-stylistic/metadata': specifier: 'catalog:' version: 2.13.0 @@ -1420,7 +1420,7 @@ importers: version: 18.0.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)))(eslint@9.18.0(jiti@2.6.1)) eslint-config-devextreme: specifier: 1.1.6 - version: 1.1.6(h6r4fe5temnwnzuk6cbunnj7oq) + version: 1.1.6(4fdexoa55qwx465uknep5fxr2u) eslint-migration-utils: specifier: workspace:* version: link:../eslint-migration-utils @@ -1432,7 +1432,7 @@ importers: version: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)) eslint-plugin-jest: specifier: 27.6.0 - version: 27.6.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(jest@29.7.0(@types/node@20.14.5)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5) + version: 27.6.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(jest@29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5) eslint-plugin-jest-formatting: specifier: 3.1.0 version: 3.1.0(eslint@9.18.0(jiti@2.6.1)) @@ -1687,7 +1687,7 @@ importers: version: 2.0.5 ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.7.0(@types/node@20.14.5)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5) + version: 29.1.2(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5) tsc-alias: specifier: 1.8.10 version: 1.8.10 @@ -1706,6 +1706,12 @@ importers: vinyl-named: specifier: 1.1.0 version: 1.1.0 + vite: + specifier: ^7.1.3 + version: 7.2.2(@types/node@20.12.8)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(sass-embedded@1.59.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.5.0) + vite-plugin-inferno: + specifier: ^0.0.1 + version: 0.0.1(@babel/core@7.23.9)(@babel/parser@7.23.9)(vite@7.2.2(@types/node@20.12.8)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(sass-embedded@1.59.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.5.0)) webpack: specifier: 5.103.0 version: 5.103.0(@swc/core@1.15.3) @@ -7089,6 +7095,10 @@ packages: peerDependencies: rollup: ^4.53.3 + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + '@rollup/pluginutils@5.1.3': resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} @@ -9312,6 +9322,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + babel-plugin-inferno@6.5.0: + resolution: {integrity: sha512-JD/FvSGvg6B0SgQD0APtA2VOYz4lEg4ytuH0MsAgm+dgRbWICXiZe9cM5HNAsJIwjQpT2sQiwM/7/WaaRNeNPQ==} + engines: {node: '>=6'} + babel-plugin-inferno@6.8.3: resolution: {integrity: sha512-o3iAiGRSsWVGJNpYe6kanNbp+3psnlMrazH5T/CaBH0qF3spqMVnx4DgEw6tuVm86o8u+O6mTps3rHvH3zlhHA==} engines: {node: '>=18'} @@ -9413,6 +9427,11 @@ packages: babel-plugin-transform-global-system-wrapper@0.3.4: resolution: {integrity: sha512-WDCmdUeRLqn25gzR7fYmNOWVXwnDOhR0cM0uOJ0kDP3EdF2Y1I6G6y5pBDeZoLOgu5xCe8cEzOMKRljxu0oGdw==} + babel-plugin-transform-hook-names@1.0.2: + resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} + peerDependencies: + '@babel/core': ^7.12.10 + babel-plugin-transform-system-register@0.0.1: resolution: {integrity: sha512-i3Y0KdBxgaZg82RLN3M+wD452yZbf6kE1WhcXpb4ZxHqRnekBljwoYj5N5PuzZ6JVqA3V7tYNea1qwiERFnmVw==} @@ -19342,6 +19361,13 @@ packages: resolution: {integrity: sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==} engines: {node: '>=10.13.0'} + vite-plugin-inferno@0.0.1: + resolution: {integrity: sha512-zkFkZLLT9VQQoM1ucM8J+WTijSHr8HpPDqnTQ2hb4hjwoH77/chYgBlOafy6CKwebDwep+0jX7ooFAWERFqBQQ==} + peerDependencies: + '@babel/core': 7.x + '@babel/parser': 7.x + vite: 2.x || 3.x + vite@5.1.8: resolution: {integrity: sha512-mB8ToUuSmzODSpENgvpFk2fTiU/YQ1tmcVJJ4WZbq4fPdGJkFNVcmVL5k7iDug6xzWjjuGDKAuSievIsD6H7Xw==} engines: {node: ^18.0.0 || >=20.0.0} @@ -24311,9 +24337,9 @@ snapshots: dependencies: tslib: 2.3.1 - '@devextreme-generator/angular@3.0.12(6wnwdwccr7gztdannqebd6dw7y)': + '@devextreme-generator/angular@3.0.12(sfjr24vex4n6dtvllgrj4rephq)': dependencies: - '@devextreme-generator/core': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + '@devextreme-generator/core': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) transitivePeerDependencies: - '@typescript-eslint/eslint-plugin' - eslint @@ -24328,13 +24354,13 @@ snapshots: - eslint-plugin-spellcheck - supports-color - '@devextreme-generator/build-helpers@3.0.12(e6vywxtfafvhkl3cckdbqzdxuy)': + '@devextreme-generator/build-helpers@3.0.12(g3qxw2o2vyaevm6fhhaeqpjjf4)': dependencies: - '@devextreme-generator/angular': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) - '@devextreme-generator/core': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) - '@devextreme-generator/inferno': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) - '@devextreme-generator/preact': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) - '@devextreme-generator/react': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + '@devextreme-generator/angular': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) + '@devextreme-generator/core': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) + '@devextreme-generator/inferno': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) + '@devextreme-generator/preact': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) + '@devextreme-generator/react': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) loader-utils: 2.0.4 typescript: 4.3.5 vinyl: 2.2.1 @@ -24357,10 +24383,10 @@ snapshots: - uglify-js - webpack-cli - '@devextreme-generator/core@3.0.12(6wnwdwccr7gztdannqebd6dw7y)': + '@devextreme-generator/core@3.0.12(sfjr24vex4n6dtvllgrj4rephq)': dependencies: code-block-writer: 10.1.1 - eslint-config-devextreme: 0.2.0(6wnwdwccr7gztdannqebd6dw7y) + eslint-config-devextreme: 0.2.0(sfjr24vex4n6dtvllgrj4rephq) prettier: 2.8.8 prettier-eslint: 13.0.0 typescript: 4.3.5 @@ -24383,11 +24409,11 @@ snapshots: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - '@devextreme-generator/inferno@3.0.12(6wnwdwccr7gztdannqebd6dw7y)': + '@devextreme-generator/inferno@3.0.12(sfjr24vex4n6dtvllgrj4rephq)': dependencies: - '@devextreme-generator/core': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) - '@devextreme-generator/preact': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) - '@devextreme-generator/react': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + '@devextreme-generator/core': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) + '@devextreme-generator/preact': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) + '@devextreme-generator/react': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) transitivePeerDependencies: - '@typescript-eslint/eslint-plugin' - eslint @@ -24402,10 +24428,10 @@ snapshots: - eslint-plugin-spellcheck - supports-color - '@devextreme-generator/preact@3.0.12(6wnwdwccr7gztdannqebd6dw7y)': + '@devextreme-generator/preact@3.0.12(sfjr24vex4n6dtvllgrj4rephq)': dependencies: - '@devextreme-generator/core': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) - '@devextreme-generator/react': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + '@devextreme-generator/core': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) + '@devextreme-generator/react': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) transitivePeerDependencies: - '@typescript-eslint/eslint-plugin' - eslint @@ -24420,9 +24446,9 @@ snapshots: - eslint-plugin-spellcheck - supports-color - '@devextreme-generator/react@3.0.12(6wnwdwccr7gztdannqebd6dw7y)': + '@devextreme-generator/react@3.0.12(sfjr24vex4n6dtvllgrj4rephq)': dependencies: - '@devextreme-generator/core': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + '@devextreme-generator/core': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) transitivePeerDependencies: - '@typescript-eslint/eslint-plugin' - eslint @@ -24437,10 +24463,10 @@ snapshots: - eslint-plugin-spellcheck - supports-color - '@devextreme-generator/vue@3.0.12(6wnwdwccr7gztdannqebd6dw7y)': + '@devextreme-generator/vue@3.0.12(sfjr24vex4n6dtvllgrj4rephq)': dependencies: - '@devextreme-generator/angular': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) - '@devextreme-generator/core': 3.0.12(6wnwdwccr7gztdannqebd6dw7y) + '@devextreme-generator/angular': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) + '@devextreme-generator/core': 3.0.12(sfjr24vex4n6dtvllgrj4rephq) prettier: 2.8.8 transitivePeerDependencies: - '@typescript-eslint/eslint-plugin' @@ -27353,6 +27379,11 @@ snapshots: picomatch: 2.3.1 rollup: 4.22.4 + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + '@rollup/pluginutils@5.1.3(rollup@4.22.4)': dependencies: '@types/estree': 1.0.6 @@ -30204,6 +30235,13 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-inferno@6.5.0(@babel/core@7.23.9): + dependencies: + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.23.9) + '@babel/types': 7.28.5 + transitivePeerDependencies: + - '@babel/core' + babel-plugin-inferno@6.8.3(@babel/core@7.23.9): dependencies: '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.23.9) @@ -30407,6 +30445,10 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-transform-hook-names@1.0.2(@babel/core@7.23.9): + dependencies: + '@babel/core': 7.23.9 + babel-plugin-transform-system-register@0.0.1: {} babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.23.9)(@babel/traverse@7.28.5): @@ -33406,14 +33448,14 @@ snapshots: transitivePeerDependencies: - eslint-plugin-import - eslint-config-devextreme@0.2.0(6wnwdwccr7gztdannqebd6dw7y): + eslint-config-devextreme@0.2.0(sfjr24vex4n6dtvllgrj4rephq): dependencies: '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5) eslint: 9.18.0(jiti@2.6.1) eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)))(eslint@9.18.0(jiti@2.6.1)) eslint-config-airbnb-typescript: 18.0.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)))(eslint@9.18.0(jiti@2.6.1)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(jest@29.7.0(@types/node@20.14.5)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(jest@29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5) eslint-plugin-jest-formatting: 3.1.0(eslint@9.18.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.8.0(eslint@9.18.0(jiti@2.6.1)) eslint-plugin-qunit: 8.1.2(eslint@9.18.0(jiti@2.6.1)) @@ -33468,6 +33510,22 @@ snapshots: stylelint: 16.5.0(typescript@4.9.5) stylelint-config-standard: 35.0.0(stylelint@16.5.0(typescript@4.9.5)) + eslint-config-devextreme@1.1.6(4fdexoa55qwx465uknep5fxr2u): + dependencies: + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5) + eslint: 9.18.0(jiti@2.6.1) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)))(eslint@9.18.0(jiti@2.6.1)) + eslint-config-airbnb-typescript: 18.0.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)))(eslint@9.18.0(jiti@2.6.1)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(jest@29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5) + eslint-plugin-jest-formatting: 3.1.0(eslint@9.18.0(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.8.0(eslint@9.18.0(jiti@2.6.1)) + eslint-plugin-qunit: 8.1.2(eslint@9.18.0(jiti@2.6.1)) + eslint-plugin-rulesdir: 0.2.2 + eslint-plugin-spellcheck: 0.0.20(eslint@9.18.0(jiti@2.6.1)) + stylelint: 15.11.0(typescript@4.9.5) + stylelint-config-standard: 35.0.0(stylelint@15.11.0(typescript@4.9.5)) + eslint-config-devextreme@1.1.6(aoohjc26cxezdvu4hxhevsauy4): dependencies: '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.18.0(jiti@2.6.1))(typescript@5.9.3) @@ -33516,22 +33574,6 @@ snapshots: stylelint: 16.5.0(typescript@4.9.5) stylelint-config-standard: 35.0.0(stylelint@16.5.0(typescript@4.9.5)) - eslint-config-devextreme@1.1.6(h6r4fe5temnwnzuk6cbunnj7oq): - dependencies: - '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5) - eslint: 9.18.0(jiti@2.6.1) - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)))(eslint@9.18.0(jiti@2.6.1)) - eslint-config-airbnb-typescript: 18.0.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)))(eslint@9.18.0(jiti@2.6.1)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1)) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(jest@29.7.0(@types/node@20.14.5)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5) - eslint-plugin-jest-formatting: 3.1.0(eslint@9.18.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.8.0(eslint@9.18.0(jiti@2.6.1)) - eslint-plugin-qunit: 8.1.2(eslint@9.18.0(jiti@2.6.1)) - eslint-plugin-rulesdir: 0.2.2 - eslint-plugin-spellcheck: 0.0.20(eslint@9.18.0(jiti@2.6.1)) - stylelint: 15.11.0(typescript@4.9.5) - stylelint-config-standard: 35.0.0(stylelint@15.11.0(typescript@4.9.5)) - eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -33690,6 +33732,17 @@ snapshots: - supports-color - typescript + eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(jest@29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5): + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5) + eslint: 9.18.0(jiti@2.6.1) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5) + jest: 29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)) + transitivePeerDependencies: + - supports-color + - typescript + eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5))(eslint@9.18.0(jiti@2.6.1))(jest@29.7.0(@types/node@20.14.5)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@9.18.0(jiti@2.6.1))(typescript@4.9.5) @@ -43696,11 +43749,11 @@ snapshots: ts-dedent@2.2.0: {} - ts-jest@29.1.2(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.7.0(@types/node@20.14.5)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5): + ts-jest@29.1.2(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)))(typescript@4.9.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.5)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)) + jest: 29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@20.12.8)(typescript@5.9.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -44647,6 +44700,20 @@ snapshots: replace-ext: 2.0.0 teex: 1.0.1 + vite-plugin-inferno@0.0.1(@babel/core@7.23.9)(@babel/parser@7.23.9)(vite@7.2.2(@types/node@20.12.8)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(sass-embedded@1.59.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.5.0)): + dependencies: + '@babel/core': 7.23.9 + '@babel/parser': 7.23.9 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.23.9) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.23.9) + '@rollup/pluginutils': 4.2.1 + babel-plugin-inferno: 6.5.0(@babel/core@7.23.9) + babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.23.9) + debug: 4.4.3 + vite: 7.2.2(@types/node@20.12.8)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(sass-embedded@1.59.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.5.0) + transitivePeerDependencies: + - supports-color + vite@5.1.8(@types/node@20.11.17)(less@4.2.0)(lightningcss@1.30.2)(sass@1.71.1)(terser@5.29.1): dependencies: esbuild: 0.19.3 @@ -44731,6 +44798,25 @@ snapshots: terser: 5.44.0 yaml: 2.8.1 + vite@7.2.2(@types/node@20.12.8)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(sass-embedded@1.59.2)(sass@1.93.2)(terser@5.44.1)(yaml@2.5.0): + dependencies: + esbuild: 0.25.0 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.12.8 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.4.2 + lightningcss: 1.30.2 + sass: 1.93.2 + sass-embedded: 1.59.2 + terser: 5.44.1 + yaml: 2.5.0 + vm-browserify@1.1.2: {} void-elements@2.0.1: {}