Skip to content
Closed
Show file tree
Hide file tree
Changes from 96 commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
f4715c8
implement
Tucchhaa Sep 30, 2025
1d437a4
add localization messages
Tucchhaa Sep 30, 2025
fbe2c0c
add 'legacy' prefix for legacy test files
Tucchhaa Sep 30, 2025
7edd33a
use legacyForm option in legacy tests
Tucchhaa Oct 1, 2025
d778ed8
change icon for resource group
Tucchhaa Oct 3, 2025
f0a0f84
Fix testcafe ts errors
Tucchhaa Oct 3, 2025
f049340
fix popup POM and use legacyForm in more qunits
Tucchhaa Oct 3, 2025
08f13a1
use legacyForm option in qunit tests
Tucchhaa Oct 6, 2025
ec5f897
implement storybook
Tucchhaa Oct 6, 2025
3cabdaf
fix resources
Tucchhaa Oct 6, 2025
924259c
fix testcafe tests
Tucchhaa Oct 6, 2025
a8898bd
fix popup POM
Tucchhaa Oct 6, 2025
5180c88
refactor appointment_popup.test.ts
Tucchhaa Oct 6, 2025
70fd0c4
implement jest test
Tucchhaa Oct 8, 2025
ae0a406
fix testcafe POM
Tucchhaa Oct 8, 2025
3745e61
get fluent screenshots
Tucchhaa Oct 8, 2025
e1a8156
implement compact themes
Tucchhaa Oct 8, 2025
d9fb18f
fix localization message
Tucchhaa Oct 8, 2025
4b61fa0
upload etalons + fix visual test
Tucchhaa Oct 8, 2025
df4bd17
minor design fixes
Tucchhaa Oct 8, 2025
56700cc
upload fluent etalons + update other etalons
Tucchhaa Oct 8, 2025
248ce40
upload generic etalons
Tucchhaa Oct 9, 2025
6ea4af1
fix testcafe test and POM
Tucchhaa Oct 9, 2025
37cf38d
feat: add recurrent form
sjbur Oct 13, 2025
24d736c
feat: add animation
sjbur Oct 13, 2025
867b734
fix testcafe tests
Tucchhaa Oct 14, 2025
9c31618
Merge branch '25_2' into main_form_redesign_25_2
Tucchhaa Oct 14, 2025
05b6395
upload fluent etalons
Tucchhaa Oct 14, 2025
2b47984
upload generic etalons
Tucchhaa Oct 14, 2025
892bfc0
upload material etalons & remove redundant visual tests
Tucchhaa Oct 14, 2025
df5dd0d
Merge branch 'main_form_redesign_25_2' into recurrent_form_redesign_25_2
sjbur Oct 14, 2025
de0c52e
feat: update text
sjbur Oct 14, 2025
2189653
fix: fix padding
sjbur Oct 14, 2025
f1eb8a4
feat: add icons
sjbur Oct 14, 2025
94a0df5
Merge remote-tracking branch 'origin/recurrent_form_redesign_25_2' in…
sjbur Oct 14, 2025
0de67fe
fix: remove comments
sjbur Oct 14, 2025
810ea19
perf: optimization
sjbur Oct 14, 2025
a90de09
perf: optimization
sjbur Oct 14, 2025
fae6f22
fix: fix refreshment
sjbur Oct 14, 2025
fe41eb7
fix: fix translations
sjbur Oct 14, 2025
9cc815b
fix: fix translations
sjbur Oct 14, 2025
7dd89d0
feat: move classes to CLASSES
sjbur Oct 14, 2025
4006b58
feat: return old translation
sjbur Oct 15, 2025
7fd9b07
fix: fix setting Daily by default in repeat
sjbur Oct 15, 2025
8e91e2e
Revert "fix: fix setting Daily by default in repeat"
sjbur Oct 15, 2025
900ab3b
fix: fix setting Daily by default in repeat
sjbur Oct 15, 2025
b1b3336
fix: fix endDate < startDate bug
sjbur Oct 15, 2025
c664c47
Merge branch '25_2' into v2_recurrence_form
sjbur Oct 15, 2025
b9c8f32
fix: fix bugs and add jest tests
sjbur Oct 16, 2025
db10ac7
feat: update etalons
sjbur Oct 16, 2025
a52dd43
test: add jest tests
sjbur Oct 17, 2025
b08ce3c
css: fix css lint errors
sjbur Oct 17, 2025
1f15241
e2e: add e2e tests
sjbur Oct 17, 2025
eed9e76
feat: update icons
sjbur Oct 17, 2025
0502ab1
css: fix styles
sjbur Oct 17, 2025
3006aea
css: fix material theme
sjbur Oct 17, 2025
b3bf006
Revert "feat: update icons"
sjbur Oct 20, 2025
5afd749
feat: update etalons
sjbur Oct 20, 2025
b9a1071
fix: fix scheduler icon color
sjbur Oct 20, 2025
9b4414c
css: fix paddings
sjbur Oct 20, 2025
0732443
css: fix css padding
sjbur Oct 20, 2025
a4d4ad8
css: fix css padding for compact material theme
sjbur Oct 20, 2025
fdb89e5
feat: update etalons
sjbur Oct 20, 2025
8a10d88
Merge branch '25_2' into v2_recurrence_form
sjbur Oct 20, 2025
991190e
test: fix test
sjbur Oct 20, 2025
7ed2c75
Merge remote-tracking branch 'origin/v2_recurrence_form' into v2_recu…
sjbur Oct 20, 2025
db100c0
feat: update etalons
sjbur Oct 20, 2025
045dcfa
Merge branch '25_2' into v2_recurrence_form
sjbur Oct 21, 2025
3d18229
misc: remove comments
sjbur Oct 21, 2025
62b28d5
Revert "misc: remove comments"
sjbur Oct 21, 2025
3ebe5f9
misc: remove comments
sjbur Oct 21, 2025
d7781f4
test: move helper functions to POM
sjbur Oct 21, 2025
63b52d2
fix: remove unused var
sjbur Oct 21, 2025
a260f6b
test: change test name
sjbur Oct 21, 2025
e1621c0
test: change test name
sjbur Oct 21, 2025
e05437c
fix: remove meaningless type check
sjbur Oct 21, 2025
e17fae5
test: fix settings button selector
sjbur Oct 21, 2025
baee802
fix: remove unused type check
sjbur Oct 21, 2025
5d043e6
test: update POM
sjbur Oct 21, 2025
b0f7217
feat: update jest tests to use POM
sjbur Oct 21, 2025
bfe1591
css: remove !important rule
sjbur Oct 21, 2025
b99450e
refactor: change typing
sjbur Oct 21, 2025
a7563de
test: try to make simple test with mocking data
sjbur Oct 21, 2025
5984e1e
Revert "css: remove !important rule"
sjbur Oct 22, 2025
e921b28
test: try to return old tests with mocking dates
sjbur Oct 23, 2025
62bfd1f
feat: update test for theme generic.light
sjbur Oct 23, 2025
69f0313
feat: partial refactoring
Tucchhaa Oct 23, 2025
7b370ae
feat: att utils.ts
Tucchhaa Oct 23, 2025
c450158
feat: refactor day buttons
sjbur Oct 23, 2025
1a8e1e7
feat: partial refactoring 2
Tucchhaa Oct 23, 2025
8be6802
feat: set weekdays from localization
sjbur Oct 23, 2025
900cde6
feat: fix repeat end and make saving
sjbur Oct 23, 2025
3a0caf6
fix: fix paddings on smaller screens
sjbur Oct 24, 2025
019186b
feat: partial refactoring 3
Tucchhaa Oct 24, 2025
76cfa38
refactoring: restructure methods
Tucchhaa Oct 24, 2025
f0adad9
refactoring: rename recurrentForm to recurrenceForm
Tucchhaa Oct 24, 2025
b4e17fe
refactoring: fix import
Tucchhaa Oct 24, 2025
7493365
test: comment failed tests and try to fix bugs for jest tests
sjbur Oct 24, 2025
4e22acc
feat: update etalons
sjbur Oct 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

Large diffs are not rendered by default.

134 changes: 132 additions & 2 deletions packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,31 @@ $scheduler-appointment-form-label-padding: 20px;
}

.dx-form {
position: relative;
overflow: hidden;

.dx-scheduler-form-main-group {
transition: transform 0.3s ease-in-out;
transform: translateX(0);

&.dx-scheduler-form-main-hidden {
transform: translateX(-100%);
}
}

.dx-scheduler-form-recurrence-group {
position: absolute;
top: 0;
left: 0;
width: 100%;
transition: transform 0.3s ease-in-out;
transform: translateX(100%);

&:not(.dx-scheduler-form-recurrence-hidden) {
transform: translateX(0);
}
}

/* Icons alignment */
.dx-scheduler-form-group-with-icon .dx-box-item:has(.dx-scheduler-form-icon) {
flex: 0 1 auto !important; // stylelint-disable-line declaration-no-important
Expand All @@ -475,7 +500,9 @@ $scheduler-appointment-form-label-padding: 20px;

.dx-scheduler-form-date-range-group .dx-box-item:has(.dx-scheduler-form-icon),
.dx-scheduler-form-description-group .dx-box-item:has(.dx-scheduler-form-icon),
.dx-scheduler-form-resources-group .dx-box-item:has(.dx-scheduler-default-resources-icon) {
.dx-scheduler-form-resources-group .dx-box-item:has(.dx-scheduler-default-resources-icon),
.dx-scheduler-form-recurrence-settings-group .dx-box-item:has(.dx-scheduler-form-icon),
.dx-scheduler-form-recurrence-end-group .dx-box-item:has(.dx-scheduler-form-icon) {
align-items: start;
}

Expand All @@ -502,19 +529,107 @@ $scheduler-appointment-form-label-padding: 20px;
}

.dx-scheduler-form-start-date-group .dx-item,
.dx-scheduler-form-end-date-group .dx-item {
.dx-scheduler-form-end-date-group .dx-item,
.dx-scheduler-form-recurrence-settings-group .dx-item,
.dx-scheduler-form-day-of-month-group .dx-item,
.dx-scheduler-form-day-of-year-group .dx-item {
align-items: end;

.dx-datebox input.dx-texteditor-input {
padding-inline-end: 0;
}
}

/* Recurrence End section - Grid layout with equal heights */
.dx-scheduler-form-recurrence-end-group {
.dx-field-item-label {
display: flex;
align-items: center;
}

> .dx-box-item {
height: 100%;
margin: 0;
padding: 0;
}
}

// RadioGroup column
.dx-scheduler-form-recurrence-end-radio {
.dx-field-item-content {
height: 100%;
padding: 0;
}

.dx-radiogroup {
padding: 0;
height: 100%;
}

.dx-item.dx-radiobutton {
margin: 8px 0 0 0;
padding: 0;
height: 32px !important; // stylelint-disable-line declaration-no-important
Comment on lines +569 to +572
Copy link

Copilot AI Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The !important declaration is used to override styles. Consider restructuring the CSS specificity to avoid the need for !important, which can make future style changes more difficult.

Suggested change
.dx-item.dx-radiobutton {
margin: 8px 0 0 0;
padding: 0;
height: 32px !important; // stylelint-disable-line declaration-no-important
// Increase specificity to avoid !important
.dx-scheduler-form-recurrence-end-radio .dx-item.dx-radiobutton {
margin: 8px 0 0 0;
padding: 0;
height: 32px;

Copilot uses AI. Check for mistakes.

&:first-child {
margin-top: 0;
}
}

Comment on lines +572 to +578
Copy link

Copilot AI Oct 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using !important in CSS should be avoided when possible as it makes styles harder to maintain and override. Consider restructuring the CSS to achieve the desired specificity without !important. The same issue appears on lines 610, 614, and 637.

Suggested change
height: 32px !important; // stylelint-disable-line declaration-no-important
&:first-child {
margin-top: 0;
}
}
}
// Increase specificity to override other height rules
.dx-scheduler-form-recurrence-end-radio .dx-item.dx-radiobutton {
height: 32px;
}
.dx-item.dx-radiobutton:first-child {
margin-top: 0;
}

Copilot uses AI. Check for mistakes.
.dx-radiogroup-item {
align-items: center;
}
}

Comment on lines +569 to +583
Copy link

Copilot AI Oct 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The use of !important suggests a specificity issue in the CSS. Consider restructuring the selectors to avoid needing !important, which can make future maintenance more difficult.

Suggested change
.dx-item.dx-radiobutton {
margin: 8px 0 0 0;
padding: 0;
height: 32px !important; // stylelint-disable-line declaration-no-important
&:first-child {
margin-top: 0;
}
}
.dx-radiogroup-item {
align-items: center;
}
}
// moved .dx-item.dx-radiobutton styles outside to increase specificity
.dx-radiogroup-item {
align-items: center;
}
}
// Increased specificity to avoid !important
.dx-scheduler-form-recurrence-end-radio .dx-item.dx-radiobutton {
margin: 8px 0 0 0;
padding: 0;
height: 32px;
&:first-child {
margin-top: 0;
}
}

Copilot uses AI. Check for mistakes.
// Inputs column
.dx-scheduler-form-recurrence-end-editors {
.dx-box-item-content {
height: 100%;
padding: 0;
}

.dx-box-item {
height: 32px;
margin: 0;
padding: 0;

&:not(:first-child) {
margin-top: 8px;
}

.dx-box-item-content {
height: 32px;
padding: 0;
}
}

.dx-field-item,
.dx-empty-item {
height: 32px;
margin: 0;
padding: 0 !important; // stylelint-disable-line declaration-no-important
}

.dx-field-item-content {
padding: 0 !important; // stylelint-disable-line declaration-no-important
Comment on lines +606 to +614
Copy link

Copilot AI Oct 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multiple uses of !important (lines 610, 614) indicate potential CSS specificity issues. Consider refactoring the selectors to achieve the desired styling without requiring !important declarations.

Suggested change
.dx-field-item,
.dx-empty-item {
height: 32px;
margin: 0;
padding: 0 !important; // stylelint-disable-line declaration-no-important
}
.dx-field-item-content {
padding: 0 !important; // stylelint-disable-line declaration-no-important
// Increase specificity by combining with parent class
.dx-scheduler-form-recurrence-end-inputs .dx-field-item,
.dx-scheduler-form-recurrence-end-inputs .dx-empty-item {
height: 32px;
margin: 0;
padding: 0;
}
.dx-scheduler-form-recurrence-end-inputs .dx-field-item-content {
padding: 0;

Copilot uses AI. Check for mistakes.
height: 32px;
}

.dx-texteditor,
.dx-numberbox {
height: 32px;
}
}

/* Repeat editor separator */
.dx-scheduler-form-repeat-editor .dx-scheduler-form-recurrence-settings-button {
overflow: visible;
position: relative;

.dx-icon {
color: $scheduler-workspace-accent-color;
}

&::after {
content: '';
position: absolute;
Expand All @@ -525,6 +640,21 @@ $scheduler-appointment-form-label-padding: 20px;
background-color: $scheduler-base-border-color;
}
}

/* Recurrence Day Buttons */
.dx-scheduler-days-of-week-buttons {
display: flex;
gap: 8px;

.dx-button {
border-radius: 50%;
min-width: 32px;

.dx-button-content {
padding: 0;
}
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ $scheduler-current-time-cell-color: $base-accent !default;
$scheduler-time-indicator-color: #eb5757 !default;
$scheduler-dd-appointment-hover-text-color: $base-inverted-text-color !default;
$scheduler-form-subject-icon-color: null !default;
$scheduler-form-icon-color: $base-text-color !default;
$scheduler-form-icon-color: $base-icon-color !default;
$scheduler-popup-title-bg: $scheduler-workspace-background-color !default;
$scheduler-workspace-month-text-color: color.change($base-text-color, $alpha: 0.54) !default;
$scheduler-dropdown-appointment-date-color: color.change($base-text-color, $alpha: 0.54) !default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
@use "../colors" as *;
@use "sizes" as *;
@use "../sizes" as *;
@use "../form/sizes" as *;
@use '../../base/scheduler/layout/header' as *;
@use "../../base/mixins" as *;
@use "../../base/icons" as *;
Expand Down Expand Up @@ -625,10 +626,21 @@ $fluent-scheduler-agenda-time-panel-cell-padding: 8px;
}

.dx-scheduler-form-description-group .dx-scheduler-form-icon,
.dx-scheduler-form-resources-group .dx-scheduler-default-resources-icon {
.dx-scheduler-form-resources-group .dx-scheduler-default-resources-icon,
.dx-scheduler-form-recurrence-settings-group .dx-scheduler-form-icon {
margin-top: $fluent-scheduler-appointment-popup-description-icon-margin-top;
}

.dx-scheduler-form-recurrence-end-group .dx-texteditor-input {
padding-left: 8px;
padding-right: 8px;
padding-inline-end: 8px !important; // stylelint-disable-line declaration-no-important
}

.dx-scheduler-form-recurrence-end-group .dx-field-item-label {
height: $fluent-scheduler-appointment-popup-all-day-item-height - $fluent-form-layout-manager-vertical-padding;
}

.dx-field-item:not(.dx-first-col) {
padding-inline-start: $fluent-scheduler-appointment-popup-item-padding-horizontal;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ $scheduler-current-time-cell-color: $base-accent !default;
*/
$scheduler-time-indicator-color: null !default;
$scheduler-dd-appointment-hover-text-color: null !default;
$scheduler-form-icon-color: $base-text-color !default;
$scheduler-form-icon-color: $base-icon-color !default;
$scheduler-form-subject-icon-color: null !default;
$scheduler-popup-title-bg: $scheduler-workspace-background-color !default;
$scheduler-workspace-month-text-color: null !default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,10 @@ $generic-scheduler-agenda-group-header-padding: $generic-scheduler-agenda-time-c
margin-top: $generic-scheduler-appointment-popup-description-icon-margin-top;
}

.dx-scheduler-form-recurrence-end-group .dx-field-item-label {
height: $generic-scheduler-appointment-popup-all-day-item-height;
}

.dx-field-item:not(.dx-first-col) {
padding-inline-start: $generic-scheduler-appointment-popup-item-padding-horizontal;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ $scheduler-workspace-accent-color: $base-accent !default;
$scheduler-current-time-cell-color: $base-accent !default;
$scheduler-time-indicator-color: #eb5757 !default;
$scheduler-dd-appointment-hover-text-color: $base-inverted-text-color !default;
$scheduler-form-icon-color: $base-label-color !default;
$scheduler-form-icon-color: $base-icon-color !default;
$scheduler-form-subject-icon-color: color.change($base-accent, $alpha: 0.24) !default;
$scheduler-popup-title-bg: $scheduler-workspace-background-color !default;
$scheduler-workspace-month-text-color: color.change($base-text-color, $alpha: 0.54) !default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,14 @@ $material-scheduler-agenda-time-panel-cell-padding: 8px;
margin-top: $material-scheduler-appointment-popup-description-icon-margin-top;
}

.dx-scheduler-form-recurrence-end-group .dx-field-item-label {
padding-left: 0;

@if $size == "compact" {
height: $material-scheduler-appointment-popup-icon-container-height;
}
}

.dx-field-item:not(.dx-first-col) {
padding-inline-start: $material-scheduler-appointment-popup-item-padding-horizontal;
}
Expand Down
Loading
Loading