diff --git a/.changeset/proud-beers-unite.md b/.changeset/proud-beers-unite.md
new file mode 100644
index 0000000000..ec855e0f55
--- /dev/null
+++ b/.changeset/proud-beers-unite.md
@@ -0,0 +1,5 @@
+---
+'@baloise/design-system-components': patch
+---
+
+Disabled years or months in the selection list cannot be selected anymore.
diff --git a/.changeset/young-carrots-remain.md b/.changeset/young-carrots-remain.md
new file mode 100644
index 0000000000..1ba7ba5715
--- /dev/null
+++ b/.changeset/young-carrots-remain.md
@@ -0,0 +1,5 @@
+---
+'@baloise/design-system-components': patch
+---
+
+Carousel movement for large controls variant on mobile is optimized.
diff --git a/packages/components/src/components/bal-carousel/bal-carousel.tsx b/packages/components/src/components/bal-carousel/bal-carousel.tsx
index a621c1d373..f2a16f2018 100644
--- a/packages/components/src/components/bal-carousel/bal-carousel.tsx
+++ b/packages/components/src/components/bal-carousel/bal-carousel.tsx
@@ -44,7 +44,7 @@ export class Carousel
private carouselId = `bal-carousel-${CarouselIds++}`
@State() isLastSlideVisible = true
- @State() areControlsHidden = !balBreakpoints.isMobile
+ @State() isMobile = balBreakpoints.isMobile
@State() language: BalLanguage = defaultConfig.language
@Element() el!: HTMLElement
@@ -156,7 +156,7 @@ export class Carousel
@ListenToBreakpoints()
breakpointListener(breakpoints: BalBreakpoints): void {
- this.areControlsHidden = !breakpoints.mobile
+ this.isMobile = breakpoints.mobile
this.itemsChanged()
}
@@ -260,7 +260,7 @@ export class Carousel
let transformValue = noNeedForSlide ? 0 : isLastSlideVisible ? maxAmount : amount
- if (!isFirst && !noNeedForSlide && (hasSmallControls || hasLargeControls)) {
+ if (!isFirst && !noNeedForSlide && (hasSmallControls || (hasLargeControls && !this.isMobile))) {
transformValue = transformValue - (isLastSlideVisible ? 0 : hasLargeControls ? 56 : 48)
}
@@ -463,7 +463,7 @@ export class Carousel
isFirst={this.isFirst()}
isLast={this.isLast()}
inverted={this.inverted}
- areControlsHidden={this.areControlsHidden}
+ areControlsHidden={!this.isMobile}
leftControlTitle={leftControlTitle}
rightControlTitle={rightControlTitle}
onNextClick={() => this.onNextButtonClick()}
diff --git a/packages/components/src/components/bal-carousel/test/bal-carousel.partner.html b/packages/components/src/components/bal-carousel/test/bal-carousel.partner.html
new file mode 100644
index 0000000000..56d413c8d6
--- /dev/null
+++ b/packages/components/src/components/bal-carousel/test/bal-carousel.partner.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Product
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/components/src/components/bal-date/bal-date-calendar/bal-date-calendar.tsx b/packages/components/src/components/bal-date/bal-date-calendar/bal-date-calendar.tsx
index 7e4a3c91f0..50a76523c3 100644
--- a/packages/components/src/components/bal-date/bal-date-calendar/bal-date-calendar.tsx
+++ b/packages/components/src/components/bal-date/bal-date-calendar/bal-date-calendar.tsx
@@ -86,6 +86,7 @@ export class DateCalendar implements ComponentInterface, Loggable, BalConfigObse
this.generateGridByDate(date)
this.selectedDate = date.toISODate()
}
+ this.updateSelections()
}
}
@@ -122,8 +123,7 @@ export class DateCalendar implements ComponentInterface, Loggable, BalConfigObse
@Watch('min')
@Watch('max')
rangePropChanged() {
- this.months = generateMonths(this.language, this.year, this.selectedDate, this.min, this.max)
- this.years = generateYears(this.year, this.minYear, this.maxYear)
+ this.updateSelections()
this.generateGrid()
}
@@ -140,7 +140,7 @@ export class DateCalendar implements ComponentInterface, Loggable, BalConfigObse
@Watch('minYearProp')
@Watch('maxYearProp')
yearRangePropChanged() {
- this.years = generateYears(this.year, this.minYear, this.maxYear)
+ this.updateSelections()
}
/**
@@ -168,11 +168,11 @@ export class DateCalendar implements ComponentInterface, Loggable, BalConfigObse
@Method()
@ListenToConfig()
async configChanged(state: BalConfigState): Promise {
- this.years = generateYears(this.year, this.minYear, this.maxYear)
- this.months = generateMonths(state.language, this.year, this.selectedDate, this.min, this.max)
- this.weekdays = generateWeekDays(state.language)
- this.monthFullNames = BalDate.infoMonths({ format: 'long', locale: state.language })
this.language = state.language
+ this.monthFullNames = BalDate.infoMonths({ format: 'long', locale: this.language })
+ this.weekdays = generateWeekDays(this.language)
+
+ this.updateSelections()
}
@ListenToSwipe({ mobileOnly: true })
@@ -226,6 +226,11 @@ export class DateCalendar implements ComponentInterface, Loggable, BalConfigObse
* ------------------------------------------------------
*/
+ private updateSelections() {
+ this.years = generateYears(this.year, this.minYear, this.maxYear)
+ this.months = generateMonths(this.language, this.year, this.selectedDate, this.min, this.max)
+ }
+
private generateGrid() {
const date = BalDate.fromISO(this.value)
if (date.isValid) {
@@ -298,7 +303,7 @@ export class DateCalendar implements ComponentInterface, Loggable, BalConfigObse
}
private onClickSelectMonthAndYear = async () => {
- this.months = generateMonths(this.language, this.year, this.selectedDate, this.min, this.max)
+ this.updateSelections()
if (this.isCalendarVisible === true) {
this.isCalendarVisible = false
diff --git a/packages/components/src/components/bal-date/bal-date-calendar/components/bal-date-calendar__list.tsx b/packages/components/src/components/bal-date/bal-date-calendar/components/bal-date-calendar__list.tsx
index d5bf90179b..ac00981886 100644
--- a/packages/components/src/components/bal-date/bal-date-calendar/components/bal-date-calendar__list.tsx
+++ b/packages/components/src/components/bal-date/bal-date-calendar/components/bal-date-calendar__list.tsx
@@ -45,8 +45,13 @@ export const CalendarList: FunctionalComponent = ({
...blockBodyList.element('item').modifier('selected').class(item.selected),
...blockBodyList.element('item').modifier('disabled').class(item.disabled),
}}
+ disabled={item.disabled}
tabIndex={-1}
- onClick={() => onSelect(item)}
+ onClick={() => {
+ if (!item.disabled) {
+ onSelect(item)
+ }
+ }}
>
{item.label}
diff --git a/packages/components/src/components/docs/bal-doc-app/bal-doc-app.tsx b/packages/components/src/components/docs/bal-doc-app/bal-doc-app.tsx
index 13b1d6d4ca..463d1ab8d5 100644
--- a/packages/components/src/components/docs/bal-doc-app/bal-doc-app.tsx
+++ b/packages/components/src/components/docs/bal-doc-app/bal-doc-app.tsx
@@ -44,7 +44,9 @@ export class DocApp implements ComponentInterface {
custom: this.logCustom,
}
if (balBrowser.hasWindow) {
- ;(window as any).BaloiseDesignSystem.config.logger = logConfig
+ if (this.logComponents) {
+ ;(window as any).BaloiseDesignSystem.config.logger = logConfig
+ }
if (this.region) {
;(window as any).BaloiseDesignSystem.config.region = this.region
}
diff --git a/test/cypress/component/bal-date-calendar.cy.ts b/test/cypress/component/bal-date-calendar.cy.ts
index fe2cfe3fa7..52471a8f0c 100644
--- a/test/cypress/component/bal-date-calendar.cy.ts
+++ b/test/cypress/component/bal-date-calendar.cy.ts
@@ -76,4 +76,24 @@ describe('BalDateCalendar Component', () => {
cy.get('@balChange').should('have.been.calledOnce')
cy.get('@balChange').shouldHaveEventDetail('2022-12-11')
})
+
+ it('check if month out of range is disabled', () => {
+ onBalChangeSpy = cy.spy().as('balChange')
+ cy.mount(BalDateCalendar, {
+ props: {
+ defaultDate: '2024-01-01',
+ min: '2023-12-23',
+ max: '2024-01-23',
+ onBalChange: onBalChangeSpy,
+ },
+ })
+
+ cy.waitForDesignSystem()
+
+ cy.waitForDesignSystem()
+
+ cy.getByRole('button', { name: 'Januar 2024' }).click()
+ cy.getByRole('button', { name: '2023' }).click()
+ cy.getByRole('button', { name: 'Februar' }).should('be.disabled')
+ })
})