Open cperezabo opened 1 year ago
yes for me is too same error
I updated from v9 to v16, so I don't know if this was working in v15. I would like to find where it broken
in fact when all the angular dependencies were in version 16.1.0 it was working fine but angular was updated to version 16.2.0 and there it presented this error.
I have also experienced the same issue after the upgrade.
However something strange I've noticed is that if I click a "normal" mat-datepicker in the same application and subsequently click the ngx-mat-datetime-picker it will be styled correctly.
If no normal datepicker pop-up has been previously shown it will be transparent.
Maybe the issue comes from Material? I haven't got time to debug it deeply. But by what you say seems that the problem can come from upstream
There are some updates on 16.2.1. https://github.com/angular/components/commit/0c4f947cdf511750b2e62f793e23b6bcc5678ab5#diff-70165fe5f110c97706ce01e94ddf46c6aad553a1c6948dabcd60b14ad6d734b6 Maybe this fix it, will try to give it a go soon
I quickly tried it persists in 16.2.1
Faced the same problem. Does anybody have any workaround? It's a critical issue.
As a workaround I've added some styles globally, not all of them but enough for what I need in the meantime.
.mat-datepicker-content {
box-shadow: 0 2px 4px -1px #0003, 0 4px 5px #00000024, 0 1px 10px #0000001f;
background-color: #fff;
color: #000000de
}
.mat-calendar-body-selected {
background-color: #007f51;
color: #fff;
}
.mat-calendar-body-cell-content {
border: none !important;
}
@h2qutc need your help)
Thank you @cperezabo (gracias guacho) I've tried those and work. As you said it fix some cases, for example, I have actions and have to add extra classes. thanks for the code.
Is there any fix for this planned?
Issue still exists.
Please fix this issue.
Strange thing I noticed: if you open a pure Angular datepicker & then open up this datetime picker all the styles are temporarily added back in again until you refresh the page.
Not sure how useful this is but may help debug the problem.
I was facing the same issue, I have fixed it by adding the missing CSS
Still persists
Any help on this. I have the same problem.
I degraded the version from 16.2 to 16.1 and then to 16.0 still its not working. Did that work for anyone?
Strange thing I noticed: if you open a pure Angular datepicker & then open up this datetime picker all the styles are temporarily added back in again until you refresh the page.
Not sure how useful this is but may help debug the problem.
yes i was also able to recreate that
Could somebody provide a minimal reproducible example (MRE)?
The issue isn't reproduced at the library site. So, having the MRE would be helpful
@AlexElin please see the branch I made, you can observe the effect clearly there.
Why this bug appears only now? It's been since Angular 11 and the deprecation of the extractCss
configuration property that the styles are not bundled all together in a global CSS file, but dynamically inserted in a style
tag when the component shows.
Another repro: https://stackblitz.com/edit/angular-cpmuqe
A simple workaround is to open and close a datepicker to load the styles. This isn't visible to the user. No need for global style hacks.
//Workaround for https://github.com/h2qutc/angular-material-components/issues/348
@ViewChild('hiddenpicker')
private readonly hiddenpicker: MatDatepicker<null>
ngOnInit() {
this.hiddenpicker.open();
this.hiddenpicker.close();
}
The issue does exist, and version 16.x doesn't function well with Angular Material versions >= 16.*. I also encounter styling collisions when using the native Angular Material datepicker alongside the datetimepicker on the same page. Considering that in version 16.x, the default start date is broken (https://github.com/h2qutc/angular-material-components/issues/356), we addressed the issue as follows:
Downgrade to latest version 9. to maintain support for the default startdate. Add styling to the component, scoped to the datetimepicker (ngx-mat-datetime-content), to ensure it works with Angular Material >= 16..
::ng-deep {
.mat-mdc-form-field-icon-suffix {
.mat-mdc-icon-button.mat-mdc-button-base {
--mdc-icon-button-state-layer-size: 36px;
width: var(--mdc-icon-button-state-layer-size) !important;
height: var(--mdc-icon-button-state-layer-size) !important;
padding: 6px !important;
}
}
//Fix datepicker styling in ngx-mat-calendar untill we can migratet to 16.x fixed all bugs
ngx-mat-datetime-content {
&.mat-datepicker-content {
box-shadow: 0 2px 4px -1px #0003, 0 4px 5px #00000024,
0 1px 10px #0000001f;
background-color: #fff;
color: #000000de;
.mat-calendar-body-cell {
position: relative;
}
.mat-calendar-body-cell:hover {
.mat-calendar-body-cell-content:not(.mat-calendar-body-selected) {
background-color: #258ea88d;
}
}
.mat-calendar-body-selected {
background-color: #258ea8;
color: #fff;
}
.mat-calendar-body-today.mat-calendar-body-selected {
box-shadow: inset 0 0 0 1px #fff;
}
}
}
}
Considering that people invest their free time in maintaining this package, it would be greatly appreciated if the mentioned issues could be resolved. The current state is starting to feel broken.
still facing this issue
@stnor I tried the open/close hack and it did not help. Even after manually opening an Angular Material date picker, the ngx-mat-datetime-picker is still missing styles.
Overwrite the style ::ng-deep .mat-datepicker-content .mat-calendar { background-color: #c2185b; }
::ng-deep .time-container { background-color: #c2185b; }
::ng-deep .mat-calendar-body-cell-content.mat-focus-indicator { color: white; border: none; }
As a workaround I added some styles globally, I've not added all the styles at all, but enough for what I need in the meantime.
.mat-datepicker-content { box-shadow: 0 2px 4px -1px #0003, 0 4px 5px #00000024, 0 1px 10px #0000001f; background-color: #fff; color: #000000de } .mat-calendar-body-selected { background-color: #007f51; color: #fff; } .mat-calendar-body-cell-content { border: none !important; }
Based on your workaround, it is also possible to directly use the mat- variables in order to support theming:
.mat-datepicker-content, .time-container {
box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);
display: block;
border-radius: 4px;
background-color: var(--mat-datepicker-calendar-container-background-color);
color: var(--mat-datepicker-calendar-container-text-color);
}
.mat-calendar-body-cell-content {
color: var(--mat-datepicker-calendar-date-text-color);
border-color: var(--mat-datepicker-calendar-date-outline-color)
}
.mat-calendar-body-selected {
background-color: var(--mat-datepicker-calendar-date-selected-state-background-color);
color: var(--mat-datepicker-calendar-date-selected-state-text-color);
}
.mat-calendar-body-cell-content {
border: none !important;
}
.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical) {
background-color: var(--mat-datepicker-calendar-date-hover-state-background-color);
}
.mat-calendar-arrow {
fill: var(--mat-datepicker-calendar-period-button-icon-color);
}
As a workaround I added some styles globally, I've not added all the styles at all, but enough for what I need in the meantime.
.mat-datepicker-content { box-shadow: 0 2px 4px -1px #0003, 0 4px 5px #00000024, 0 1px 10px #0000001f; background-color: #fff; color: #000000de } .mat-calendar-body-selected { background-color: #007f51; color: #fff; } .mat-calendar-body-cell-content { border: none !important; }
Based on your workaround, it is also possible to directly use the mat- variables in order to support theming:
.mat-datepicker-content, .time-container { box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12); display: block; border-radius: 4px; background-color: var(--mat-datepicker-calendar-container-background-color); color: var(--mat-datepicker-calendar-container-text-color); } .mat-calendar-body-cell-content { color: var(--mat-datepicker-calendar-date-text-color); border-color: var(--mat-datepicker-calendar-date-outline-color) } .mat-calendar-body-selected { background-color: var(--mat-datepicker-calendar-date-selected-state-background-color); color: var(--mat-datepicker-calendar-date-selected-state-text-color); } .mat-calendar-body-cell-content { border: none !important; } .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover > .mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical) { background-color: var(--mat-datepicker-calendar-date-hover-state-background-color); }
Amazing workaround for now! For me the chevron-up icons for the time selector are also missing. Is this related to this issue? The original issue has its chevrons. Anyone else experiencing that?
@SeraphCoding Assuming my current understanding of the issue, this may be linked, as my feeling is that the issue could come from breaking changes regarding encapsulation in Angular latest versions.
That said, the time picker buttons are not based on the same principle as the one upper right for the calendar (those last one use borders and 45° rotation). The time picker works with a traditional mat-icon
:
Assuming on the original capture, all dependencies are at the latest, there should be a way to make it work if the mat-icon module is properly imported and configured in your project / targetted module. If you use custom icon provider (like FA) for mat-icon this may be more tricky to find a nice workaround as they are using the old way where the icon name is set as content and not HTML attribute, eliminating a pure CSS workaround possibility. At last should be possible but extremely dirty to do something in vanilla JS / JQuery 🤐.
.mat-datepicker-content { box-shadow: 0 2px 4px -1px #0003, 0 4px 5px #00000024, 0 1px 10px #0000001f; background-color: #fff; color: #000000de }
.mat-calendar-body-selected { background-color: #007f51; color: #fff; }
.mat-calendar-body-cell-content { border: none !important; }
Thank you for workaround. Just a tip for ones who has noticed issues with disabled labels style, in fact for some reason it seems the style for disabled days/years is still missing. Below an example:
How it was before |
How it looks now |
As you can see, only the chevrons disabled style is still present, so i added this class below as temporary workaround, hope it'll help you.
.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical) { color: var(--mat-datepicker-calendar-date-disabled-state-text-color); }
For me the solution was:
/*
Note: div in the query selector below only to get precidence over the default .mat-datepicker-content-container
by being more specific. This isn't required for background-color but was required for me to override other things in
that container
*/
div.mat-datepicker-content-container {
background-color: var(--background-color);
}
Using a variable isn't needed as such; could just be background-color: red;
etc
The datetime picker includes a theming support file that was copied directly from Angular material, but in Angular material version 16.2, the implementation changed. This datetime picker package is still using the old version of the file, and it doesn't work with the token-based system of v16.2+.
The only way the styling looks right is if the Angular material 16.2+ datepicker gets loaded first, in which case the 'mat-datepicker'
theme styles get initialized correctly.
@h2qutc I was going to try to update _datepicker-theme.scss
to see if that would solve this issue, but I had some concerns:
npm install
results in dependency conflict errorstsickle
(two years old) is incompatible with the version of Typescript needed by other dependenciesnpm run test
doesn't find any tests to runnpm run e2e
fails because the version of ChromeDriver doesn't support recent versionsIf you are still maintaining this repo, let me know so I can try to help resolve this issue that so many users are running into.
.mat-datepicker-content { box-shadow: 0 2px 4px -1px #3, 0 4px 5px #24, 0 1px 10px #0000001f; background-color: #fff; color: #000000de } .mat-calendar-body-selected { background-color: #007f51; color: #fff; } .mat-calendar-body-cell-content { border: none !important; }
Thank you for workaround. Just a tip for ones who has noticed issues with disabled labels style, in fact for some reason it seems the style for disabled days/years is still missing. Below an example:
How it was before |
How it looks now |
As you can see, only the chevrons disabled style is still present, so i added this class below as temporary workaround, hope it'll help you.
.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical) { color: var(--mat-datepicker-calendar-date-disabled-state-text-color); }
Thanks for the workaround fix along with previous contributors styles.. saved a lot of time !!
I just added below as well to not show cursor pointer on disabled dates: button.mat-calendar-body-disabled { cursor: default !important; }
This seems to be working in Angular 17. I haven't tested it a lot, just basically commented out the workaround code.
As a workaround I've added some styles globally, not all of them but enough for what I need in the meantime.
.mat-datepicker-content { box-shadow: 0 2px 4px -1px #0003, 0 4px 5px #00000024, 0 1px 10px #0000001f; background-color: #fff; color: #000000de } .mat-calendar-body-selected { background-color: #007f51; color: #fff; } .mat-calendar-body-cell-content { border: none !important; }
This worket for me. Thankyou.
Looks like this project is not maintained.
I've found another library which contains material-like datetimepicker and many other useful components. Here it is: https://ng-matero.github.io/extensions/components/datetimepicker.
Looks like this project is not maintained.
I've found another library which contains material-like datetimepicker and many other useful components. Here it is: https://ng-matero.github.io/extensions/components/datetimepicker.
This makes life a lot easier. Great mention!
For anyone looking at v 17 I was missing the mixins in my custom theme file. you need them for each item and if missing were causing the backgrounds to be transparent and other issues :
@use "@angular/material" as mat;
$my-theme: mat.define-light-theme( ( color: ( primary: $primaryPalette, accent: $accentPalette, warn: $warnPalette, ), ) );
@include mat.core(); @include mat.core-theme($my-theme); @include mat.form-field-theme($my-theme); @include mat.progress-spinner-theme($my-theme); @include mat.tabs-theme($my-theme); @include mat.button-theme($my-theme); @include mat.checkbox-theme($my-theme); @include mat.datepicker-theme($my-theme); @include mat.input-theme($my-theme); @include mat.select-theme($my-theme); @include mat.slider-theme($my-theme); @include mat.slide-toggle-theme($my-theme);
Any update about fix for Angular 16?
Hi, I updated Angular and Material to v16.2.0 and datetime-picker to v16.0.1 I don't know what changed, but I'm getting a transparent background now. Any idea?
Edit: In fact, confirmation button is missing, the popup won't close and there are no errors in console.