Skip to content

Commit 5e80d37

Browse files
authored
Merge branch '26_1' into feat/license-pipeline-26-1
2 parents 020d65c + 70844dd commit 5e80d37

21 files changed

Lines changed: 583 additions & 290 deletions

File tree

apps/demos/Demos/Scheduler/ResolveTimeConflicts/Angular/app/app.component.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ export class AppComponent {
6262
onInitialized: (e: DxPopupTypes.InitializedEvent) => { this.popup = e.component; },
6363
onHidden: () => {
6464
this.setConflictError(false);
65-
this.form?.updateData('assigneeId', []);
6665
},
6766
};
6867

apps/demos/Demos/Scheduler/ResolveTimeConflicts/React/App.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ const App = () => {
157157
},
158158
onHidden: () => {
159159
setConflictError(false);
160-
formRef.current?.updateData('assigneeId', []);
161160
},
162161
}), [setConflictError]);
163162

apps/demos/Demos/Scheduler/ResolveTimeConflicts/ReactJs/App.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ const App = () => {
130130
},
131131
onHidden: () => {
132132
setConflictError(false);
133-
formRef.current?.updateData('assigneeId', []);
134133
},
135134
}),
136135
[setConflictError],

apps/demos/Demos/Scheduler/ResolveTimeConflicts/Vue/App.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,6 @@ const popupOptions = {
186186
},
187187
onHidden: () => {
188188
setConflictError(false);
189-
form?.updateData('assigneeId', []);
190189
},
191190
};
192191

apps/demos/Demos/Scheduler/ResolveTimeConflicts/jQuery/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ $(() => {
2929
},
3030
onHidden: () => {
3131
setConflictError(false);
32-
form?.updateData('assigneeId', []);
3332
},
3433
},
3534
form: {
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import React from 'react';
2+
import type { Meta, StoryObj } from '@storybook/react-webpack5';
3+
import { Tooltip } from 'devextreme-react/tooltip';
4+
5+
const meta: Meta<typeof Tooltip> = {
6+
title: 'Components/Tooltip',
7+
component: Tooltip,
8+
parameters: {
9+
layout: 'padded',
10+
},
11+
};
12+
13+
export default meta;
14+
15+
type Story = StoryObj<typeof Tooltip>;
16+
17+
const HoverableExample: Story['render'] = (args) => (
18+
<div style={{ padding: '80px 40px' }}>
19+
<p style={{ marginBottom: 16 }}>
20+
Hover the button to show the tooltip, then move the pointer onto
21+
the tooltip content — it must stay open.
22+
</p>
23+
<button id="tooltip-target">
24+
Hover me
25+
</button>
26+
<Tooltip
27+
{...args}
28+
target="#tooltip-target"
29+
showEvent="mouseenter"
30+
hideEvent="mouseleave"
31+
>
32+
<div style={{ padding: '8px 12px' }}>
33+
<strong>WCAG — Hoverable</strong>
34+
<p style={{ margin: '6px 0 0' }}>
35+
Move your pointer here from the button.
36+
<br />
37+
The tooltip stays open as long as the pointer
38+
<br />
39+
is over the target <em>or</em> this content.
40+
</p>
41+
</div>
42+
</Tooltip>
43+
</div>
44+
);
45+
46+
export const Hoverable: Story = {
47+
args: {
48+
position: 'bottom',
49+
},
50+
argTypes: {
51+
position: {
52+
control: 'select',
53+
options: ['top', 'bottom', 'left', 'right'],
54+
},
55+
},
56+
render: HoverableExample,
57+
};
58+
59+
const HoverableWithDelayExample: Story['render'] = (args) => (
60+
<div style={{ padding: '80px 40px' }}>
61+
<p style={{ marginBottom: 16 }}>
62+
Show delay: <strong>500 ms</strong> — Hide delay: <strong>300 ms</strong>.
63+
Moving onto the tooltip content cancels the hide timeout.
64+
</p>
65+
<button id="tooltip-target-delay">
66+
Hover me (with delay)
67+
</button>
68+
<Tooltip
69+
{...args}
70+
target="#tooltip-target-delay"
71+
showEvent={{ name: 'mouseenter', delay: 500 }}
72+
hideEvent={{ name: 'mouseleave', delay: 300 }}
73+
>
74+
<div style={{ padding: '8px 12px' }}>
75+
Move here to cancel the hide timeout.
76+
</div>
77+
</Tooltip>
78+
</div>
79+
);
80+
81+
export const HoverableWithDelay: Story = {
82+
args: {
83+
position: 'bottom',
84+
},
85+
argTypes: {
86+
position: {
87+
control: 'select',
88+
options: ['top', 'bottom', 'left', 'right'],
89+
},
90+
},
91+
render: HoverableWithDelayExample,
92+
};

packages/devextreme-angular/src/ui/scheduler/index.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424

2525
import type dxSortable from 'devextreme/ui/sortable';
2626
import type dxDraggable from 'devextreme/ui/draggable';
27-
import type { default as dxScheduler, AllDayPanelMode, ViewType, dxSchedulerAppointment, AppointmentFormProperties, CellAppointmentsLimit, AppointmentAddedEvent, AppointmentAddingEvent, AppointmentClickEvent, AppointmentContextMenuEvent, AppointmentDblClickEvent, AppointmentDeletedEvent, AppointmentDeletingEvent, AppointmentFormOpeningEvent, AppointmentRenderedEvent, AppointmentTooltipShowingEvent, AppointmentUpdatedEvent, AppointmentUpdatingEvent, CellClickEvent, CellContextMenuEvent, ContentReadyEvent, DisposingEvent, InitializedEvent, OptionChangedEvent, RecurrenceEditMode, dxSchedulerScrolling, dxSchedulerToolbar } from 'devextreme/ui/scheduler';
27+
import type { default as dxScheduler, AllDayPanelMode, ViewType, dxSchedulerAppointment, AppointmentFormProperties, CellAppointmentsLimit, AppointmentAddedEvent, AppointmentAddingEvent, AppointmentClickEvent, AppointmentContextMenuEvent, AppointmentDblClickEvent, AppointmentDeletedEvent, AppointmentDeletingEvent, AppointmentFormOpeningEvent, AppointmentRenderedEvent, AppointmentTooltipShowingEvent, AppointmentUpdatedEvent, AppointmentUpdatingEvent, CellClickEvent, CellContextMenuEvent, ContentReadyEvent, DisposingEvent, InitializedEvent, OptionChangedEvent, RecurrenceEditMode, dxSchedulerScrolling, SnapToCellsMode, dxSchedulerToolbar } from 'devextreme/ui/scheduler';
2828
import type { event } from 'devextreme/events/events.types';
2929
import type { default as DataSource, DataSourceOptions } from 'devextreme/data/data_source';
3030
import type { Store } from 'devextreme/data/store';
@@ -762,6 +762,16 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
762762
}
763763

764764

765+
766+
@Input()
767+
get snapToCellsMode(): SnapToCellsMode {
768+
return this._getOption('snapToCellsMode');
769+
}
770+
set snapToCellsMode(value: SnapToCellsMode) {
771+
this._setOption('snapToCellsMode', value);
772+
}
773+
774+
765775
/**
766776
* [descr:dxSchedulerOptions.startDateExpr]
767777
@@ -884,10 +894,10 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
884894
885895
*/
886896
@Input()
887-
get views(): Array<Record<string, any> | string> | { agendaDuration?: number, allDayPanelMode?: AllDayPanelMode, appointmentCollectorTemplate?: any, appointmentTemplate?: any, appointmentTooltipTemplate?: any, cellDuration?: number, dataCellTemplate?: any, dateCellTemplate?: any, endDayHour?: number, firstDayOfWeek?: FirstDayOfWeek | undefined, groupByDate?: boolean, groupOrientation?: Orientation, groups?: Array<string>, intervalCount?: number, maxAppointmentsPerCell?: CellAppointmentsLimit | number, name?: string | undefined, offset?: number, resourceCellTemplate?: any, scrolling?: dxSchedulerScrolling, startDate?: Date | number | string | undefined, startDayHour?: number, timeCellTemplate?: any, type?: undefined | ViewType }[] {
897+
get views(): Array<Record<string, any> | string> | { agendaDuration?: number, allDayPanelMode?: AllDayPanelMode, appointmentCollectorTemplate?: any, appointmentTemplate?: any, appointmentTooltipTemplate?: any, cellDuration?: number, dataCellTemplate?: any, dateCellTemplate?: any, endDayHour?: number, firstDayOfWeek?: FirstDayOfWeek | undefined, groupByDate?: boolean, groupOrientation?: Orientation, groups?: Array<string>, intervalCount?: number, maxAppointmentsPerCell?: CellAppointmentsLimit | number, name?: string | undefined, offset?: number, resourceCellTemplate?: any, scrolling?: dxSchedulerScrolling, snapToCellsMode?: SnapToCellsMode, startDate?: Date | number | string | undefined, startDayHour?: number, timeCellTemplate?: any, type?: undefined | ViewType }[] {
888898
return this._getOption('views');
889899
}
890-
set views(value: Array<Record<string, any> | string> | { agendaDuration?: number, allDayPanelMode?: AllDayPanelMode, appointmentCollectorTemplate?: any, appointmentTemplate?: any, appointmentTooltipTemplate?: any, cellDuration?: number, dataCellTemplate?: any, dateCellTemplate?: any, endDayHour?: number, firstDayOfWeek?: FirstDayOfWeek | undefined, groupByDate?: boolean, groupOrientation?: Orientation, groups?: Array<string>, intervalCount?: number, maxAppointmentsPerCell?: CellAppointmentsLimit | number, name?: string | undefined, offset?: number, resourceCellTemplate?: any, scrolling?: dxSchedulerScrolling, startDate?: Date | number | string | undefined, startDayHour?: number, timeCellTemplate?: any, type?: undefined | ViewType }[]) {
900+
set views(value: Array<Record<string, any> | string> | { agendaDuration?: number, allDayPanelMode?: AllDayPanelMode, appointmentCollectorTemplate?: any, appointmentTemplate?: any, appointmentTooltipTemplate?: any, cellDuration?: number, dataCellTemplate?: any, dateCellTemplate?: any, endDayHour?: number, firstDayOfWeek?: FirstDayOfWeek | undefined, groupByDate?: boolean, groupOrientation?: Orientation, groups?: Array<string>, intervalCount?: number, maxAppointmentsPerCell?: CellAppointmentsLimit | number, name?: string | undefined, offset?: number, resourceCellTemplate?: any, scrolling?: dxSchedulerScrolling, snapToCellsMode?: SnapToCellsMode, startDate?: Date | number | string | undefined, startDayHour?: number, timeCellTemplate?: any, type?: undefined | ViewType }[]) {
891901
this._setOption('views', value);
892902
}
893903

@@ -1397,6 +1407,13 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
13971407
*/
13981408
@Output() showCurrentTimeIndicatorChange: EventEmitter<boolean>;
13991409

1410+
/**
1411+
1412+
* This member supports the internal infrastructure and is not intended to be used directly from your code.
1413+
1414+
*/
1415+
@Output() snapToCellsModeChange: EventEmitter<SnapToCellsMode>;
1416+
14001417
/**
14011418
14021419
* This member supports the internal infrastructure and is not intended to be used directly from your code.
@@ -1465,7 +1482,7 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
14651482
* This member supports the internal infrastructure and is not intended to be used directly from your code.
14661483
14671484
*/
1468-
@Output() viewsChange: EventEmitter<Array<Record<string, any> | string> | { agendaDuration?: number, allDayPanelMode?: AllDayPanelMode, appointmentCollectorTemplate?: any, appointmentTemplate?: any, appointmentTooltipTemplate?: any, cellDuration?: number, dataCellTemplate?: any, dateCellTemplate?: any, endDayHour?: number, firstDayOfWeek?: FirstDayOfWeek | undefined, groupByDate?: boolean, groupOrientation?: Orientation, groups?: Array<string>, intervalCount?: number, maxAppointmentsPerCell?: CellAppointmentsLimit | number, name?: string | undefined, offset?: number, resourceCellTemplate?: any, scrolling?: dxSchedulerScrolling, startDate?: Date | number | string | undefined, startDayHour?: number, timeCellTemplate?: any, type?: undefined | ViewType }[]>;
1485+
@Output() viewsChange: EventEmitter<Array<Record<string, any> | string> | { agendaDuration?: number, allDayPanelMode?: AllDayPanelMode, appointmentCollectorTemplate?: any, appointmentTemplate?: any, appointmentTooltipTemplate?: any, cellDuration?: number, dataCellTemplate?: any, dateCellTemplate?: any, endDayHour?: number, firstDayOfWeek?: FirstDayOfWeek | undefined, groupByDate?: boolean, groupOrientation?: Orientation, groups?: Array<string>, intervalCount?: number, maxAppointmentsPerCell?: CellAppointmentsLimit | number, name?: string | undefined, offset?: number, resourceCellTemplate?: any, scrolling?: dxSchedulerScrolling, snapToCellsMode?: SnapToCellsMode, startDate?: Date | number | string | undefined, startDayHour?: number, timeCellTemplate?: any, type?: undefined | ViewType }[]>;
14691486

14701487
/**
14711488
@@ -1560,6 +1577,7 @@ export class DxSchedulerComponent extends DxComponent implements OnDestroy, OnCh
15601577
{ emit: 'shadeUntilCurrentTimeChange' },
15611578
{ emit: 'showAllDayPanelChange' },
15621579
{ emit: 'showCurrentTimeIndicatorChange' },
1580+
{ emit: 'snapToCellsModeChange' },
15631581
{ emit: 'startDateExprChange' },
15641582
{ emit: 'startDateTimeZoneExprChange' },
15651583
{ emit: 'startDayHourChange' },

packages/devextreme-angular/src/ui/scheduler/nested/view-dxi.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212

1313

1414

15-
import type { AllDayPanelMode, CellAppointmentsLimit, dxSchedulerScrolling, ViewType } from 'devextreme/ui/scheduler';
15+
import type { AllDayPanelMode, CellAppointmentsLimit, dxSchedulerScrolling, SnapToCellsMode, ViewType } from 'devextreme/ui/scheduler';
1616
import type { FirstDayOfWeek, Orientation } from 'devextreme/common';
1717

1818
import {
@@ -190,6 +190,14 @@ export class DxiSchedulerViewComponent extends CollectionNestedOption {
190190
this._setOption('scrolling', value);
191191
}
192192

193+
@Input()
194+
get snapToCellsMode(): SnapToCellsMode {
195+
return this._getOption('snapToCellsMode');
196+
}
197+
set snapToCellsMode(value: SnapToCellsMode) {
198+
this._setOption('snapToCellsMode', value);
199+
}
200+
193201
@Input()
194202
get startDate(): Date | number | string | undefined {
195203
return this._getOption('startDate');

packages/devextreme-metadata/make-angular-metadata.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ Ng.makeMetadata({
6363
removeMembers(/\/scheduler:dxSchedulerOptions\.editing\.form/),
6464
removeMembers(/\/scheduler:dxSchedulerOptions\.editing\.popup/),
6565
removeMembers(/\/scheduler:dxSchedulerOptions\.resources\.icon/),
66+
removeMembers(/\/scheduler:.*\.snapToCellsMode/),
6667
removeMembers(/\/stepper:/),
6768
removeMembers(/\/speech_to_text:/),
6869
removeMembers(/\/tree_list:dxTreeListColumnButton.onClick/),

packages/devextreme-react/src/scheduler.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import dxScheduler, {
88
import { Component as BaseComponent, IHtmlOptions, ComponentRef, NestedComponentMeta } from "./core/component";
99
import NestedOption from "./core/nested-option";
1010

11-
import type { ViewType, AppointmentAddedEvent, AppointmentAddingEvent, AppointmentClickEvent, AppointmentContextMenuEvent, AppointmentDblClickEvent, AppointmentDeletedEvent, AppointmentDeletingEvent, AppointmentFormOpeningEvent, AppointmentRenderedEvent, AppointmentTooltipShowingEvent, AppointmentUpdatedEvent, AppointmentUpdatingEvent, CellClickEvent, CellContextMenuEvent, ContentReadyEvent, DisposingEvent, InitializedEvent, AppointmentFormProperties, AppointmentFormIconsShowMode, SchedulerPredefinedToolbarItem, DateNavigatorItemProperties, SchedulerPredefinedDateNavigatorItem, dxSchedulerToolbarItem, AllDayPanelMode, AppointmentCollectorTemplateData, AppointmentTemplateData, AppointmentTooltipTemplateData, CellAppointmentsLimit, dxSchedulerScrolling } from "devextreme/ui/scheduler";
11+
import type { ViewType, AppointmentAddedEvent, AppointmentAddingEvent, AppointmentClickEvent, AppointmentContextMenuEvent, AppointmentDblClickEvent, AppointmentDeletedEvent, AppointmentDeletingEvent, AppointmentFormOpeningEvent, AppointmentRenderedEvent, AppointmentTooltipShowingEvent, AppointmentUpdatedEvent, AppointmentUpdatingEvent, CellClickEvent, CellContextMenuEvent, ContentReadyEvent, DisposingEvent, InitializedEvent, AppointmentFormProperties, AppointmentFormIconsShowMode, SchedulerPredefinedToolbarItem, DateNavigatorItemProperties, SchedulerPredefinedDateNavigatorItem, dxSchedulerToolbarItem, AllDayPanelMode, AppointmentCollectorTemplateData, AppointmentTemplateData, AppointmentTooltipTemplateData, CellAppointmentsLimit, dxSchedulerScrolling, SnapToCellsMode } from "devextreme/ui/scheduler";
1212
import type { ContentReadyEvent as ButtonContentReadyEvent, DisposingEvent as ButtonDisposingEvent, InitializedEvent as ButtonInitializedEvent, dxButtonOptions, ClickEvent, OptionChangedEvent } from "devextreme/ui/button";
1313
import type { ContentReadyEvent as FormContentReadyEvent, DisposingEvent as FormDisposingEvent, InitializedEvent as FormInitializedEvent, FormItemType, FormPredefinedButtonItem, OptionChangedEvent as FormOptionChangedEvent, dxFormSimpleItem, dxFormGroupItem, dxFormTabbedItem, dxFormEmptyItem, dxFormButtonItem, LabelLocation, FormLabelMode, EditorEnterKeyEvent, FieldDataChangedEvent, SmartPastedEvent, SmartPastingEvent, FormItemComponent } from "devextreme/ui/form";
1414
import type { ContentReadyEvent as ButtonGroupContentReadyEvent, DisposingEvent as ButtonGroupDisposingEvent, InitializedEvent as ButtonGroupInitializedEvent, OptionChangedEvent as ButtonGroupOptionChangedEvent, dxButtonGroupItem, ItemClickEvent, SelectionChangedEvent } from "devextreme/ui/button_group";
@@ -1460,6 +1460,7 @@ type IViewProps = React.PropsWithChildren<{
14601460
offset?: number;
14611461
resourceCellTemplate?: ((itemData: any, itemIndex: number, itemElement: any) => string | any) | template;
14621462
scrolling?: dxSchedulerScrolling;
1463+
snapToCellsMode?: SnapToCellsMode;
14631464
startDate?: Date | number | string | undefined;
14641465
startDayHour?: number;
14651466
timeCellTemplate?: ((itemData: any, itemIndex: number, itemElement: any) => string | any) | template;

0 commit comments

Comments
 (0)