@vonage/vivid 4.27.0 → 4.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/custom-elements.json +357 -80
  2. package/lib/audio-player/audio-player.d.ts +4 -3
  3. package/lib/data-grid/data-grid.d.ts +2 -0
  4. package/lib/data-grid/locale.d.ts +1 -0
  5. package/lib/date-picker/date-picker.d.ts +4 -2
  6. package/lib/date-time-picker/date-time-picker.d.ts +6 -3
  7. package/lib/divider/definition.d.ts +1 -0
  8. package/lib/divider/divider.d.ts +5 -1
  9. package/lib/option/option.d.ts +4 -7
  10. package/lib/rich-text-editor/facades/prose-mirror-vivid.schema.d.ts +2 -1
  11. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +2 -2
  12. package/lib/rich-text-editor/image-placeholder/definition.d.ts +2 -0
  13. package/lib/rich-text-editor/image-placeholder/image-placeholder.d.ts +7 -0
  14. package/lib/rich-text-editor/image-placeholder/image-placeholder.template.d.ts +4 -0
  15. package/lib/rich-text-editor/menubar/consts.d.ts +2 -2
  16. package/lib/rich-text-editor/menubar/definition.d.ts +2 -2
  17. package/lib/rich-text-editor/menubar/menubar.d.ts +2 -2
  18. package/lib/rich-text-editor/menubar/menubar.template.d.ts +2 -2
  19. package/lib/rich-text-editor/rich-text-editor.d.ts +1 -0
  20. package/lib/time-picker/time-picker.d.ts +4 -2
  21. package/locales/de-DE.cjs +2 -1
  22. package/locales/de-DE.js +2 -1
  23. package/locales/en-GB.cjs +2 -1
  24. package/locales/en-GB.js +2 -1
  25. package/locales/en-US.cjs +2 -1
  26. package/locales/en-US.js +2 -1
  27. package/locales/ja-JP.cjs +2 -1
  28. package/locales/ja-JP.js +2 -1
  29. package/locales/zh-CN.cjs +2 -1
  30. package/locales/zh-CN.js +2 -1
  31. package/package.json +2 -1
  32. package/shared/calendar-picker.template.cjs +8 -9
  33. package/shared/calendar-picker.template.js +8 -9
  34. package/shared/definition16.cjs +33 -30
  35. package/shared/definition16.js +33 -30
  36. package/shared/definition17.cjs +137 -1
  37. package/shared/definition17.js +138 -2
  38. package/shared/definition23.cjs +12 -7
  39. package/shared/definition23.js +12 -7
  40. package/shared/definition30.cjs +2 -1
  41. package/shared/definition30.js +2 -1
  42. package/shared/definition31.cjs +5 -1
  43. package/shared/definition31.js +5 -1
  44. package/shared/definition36.cjs +1 -1
  45. package/shared/definition36.js +1 -1
  46. package/shared/definition44.cjs +184 -55
  47. package/shared/definition44.js +184 -55
  48. package/shared/definition45.cjs +12 -5
  49. package/shared/definition45.js +12 -5
  50. package/shared/definition5.cjs +86 -30
  51. package/shared/definition5.js +86 -30
  52. package/shared/definition61.cjs +11 -0
  53. package/shared/definition61.js +11 -0
  54. package/shared/definition64.cjs +1 -1
  55. package/shared/definition64.js +1 -1
  56. package/shared/divider.cjs +7 -2
  57. package/shared/divider.js +7 -2
  58. package/shared/option.cjs +36 -38
  59. package/shared/option.js +37 -39
  60. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +1 -0
  61. package/shared/picker-field/mixins/single-date-picker.d.ts +4 -2
  62. package/shared/picker-field/mixins/single-value-picker.d.ts +2 -1
  63. package/shared/picker-field/mixins/time-selection-picker.d.ts +4 -2
  64. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +4 -2
  65. package/shared/single-value-picker.cjs +40 -6
  66. package/shared/single-value-picker.js +40 -6
  67. package/shared/text-field.cjs +1 -1
  68. package/shared/text-field.js +1 -1
  69. package/shared/time-selection-picker.template.cjs +71 -22
  70. package/shared/time-selection-picker.template.js +71 -22
  71. package/shared/vivid-element.cjs +1 -1
  72. package/shared/vivid-element.js +1 -1
  73. package/styles/core/all.css +1 -1
  74. package/styles/core/theme.css +1 -1
  75. package/styles/core/typography.css +1 -1
  76. package/styles/tokens/theme-dark.css +4 -4
  77. package/styles/tokens/theme-light.css +4 -4
  78. package/styles/tokens/vivid-2-compat.css +1 -1
  79. package/vivid.api.json +211 -126
@@ -1,7 +1,7 @@
1
- import type { Connotation } from '../enums';
2
- import { MediaSkipBy } from '../enums';
3
1
  import { VividElement } from '../../shared/foundation/vivid-element/vivid-element';
4
2
  import type { ExtractFromEnum } from '../../shared/utils/enums';
3
+ import type { Connotation } from '../enums';
4
+ import { MediaSkipBy } from '../enums';
5
5
  export type AudioPlayerConnotation = ExtractFromEnum<Connotation, Connotation.Accent | Connotation.CTA>;
6
6
  export type AudioPlayerMediaSkipBy = ExtractFromEnum<MediaSkipBy, MediaSkipBy.Zero | MediaSkipBy.Five | MediaSkipBy.Ten | MediaSkipBy.Thirty>;
7
7
  export declare const SKIP_DIRECTIONS: {
@@ -357,9 +357,9 @@ export declare class AudioPlayer extends AudioPlayer_base {
357
357
  skipBackwardButtonAriaLabel: string | null;
358
358
  connotation?: AudioPlayerConnotation;
359
359
  src?: string;
360
+ srcChanged(): void;
360
361
  get playbackRate(): number;
361
362
  set playbackRate(value: number);
362
- srcChanged(): void;
363
363
  disabled: boolean;
364
364
  notime: boolean;
365
365
  skipBy?: AudioPlayerMediaSkipBy;
@@ -370,6 +370,7 @@ export declare class AudioPlayer extends AudioPlayer_base {
370
370
  set duration(_: number);
371
371
  get currentTime(): number;
372
372
  set currentTime(value: number);
373
+ durationFallback: boolean;
373
374
  constructor();
374
375
  connectedCallback(): void;
375
376
  disconnectedCallback(): void;
@@ -36,12 +36,14 @@ export declare class DataGrid extends VividElement {
36
36
  headerCellItemTemplate?: ViewTemplate;
37
37
  focusRowIndex: number;
38
38
  focusColumnIndex: number;
39
+ fixedColumns?: number;
39
40
  rowElementTag: string;
40
41
  private rowsRepeatBehavior;
41
42
  private rowsPlaceholder;
42
43
  private generatedHeader;
43
44
  private isUpdatingFocus;
44
45
  private pendingFocusUpdate;
46
+ private resizeObserver?;
45
47
  private observer;
46
48
  private rowindexUpdateQueued;
47
49
  private columnDefinitionsStale;
@@ -1,5 +1,6 @@
1
1
  export interface DataGridLocale {
2
2
  cell: {
3
3
  selected: string;
4
+ button: string;
4
5
  };
5
6
  }
@@ -76,7 +76,7 @@ declare const DatePicker_base: (abstract new (...args: any[]) => {
76
76
  _updatePresentationValue: (() => void) & (() => void);
77
77
  readonly _textFieldPlaceholder: string;
78
78
  _textFieldSize?: string | undefined;
79
- _onTextFieldInput(event: Event): void;
79
+ _onTextFieldInput: ((event: Event) => void) & ((event: Event) => void);
80
80
  _onTextFieldChange: (() => void) & (() => void);
81
81
  readonly _pickerButtonLabel: string;
82
82
  readonly _pickerButtonIcon: string;
@@ -811,16 +811,19 @@ declare const DatePicker_base: (abstract new (...args: any[]) => {
811
811
  _isValidValue(value: string): boolean;
812
812
  _toPresentationValue(value: string): string;
813
813
  _parsePresentationValue(presentationValue: string): string;
814
+ _isInternalValueUpdate: boolean;
814
815
  _updateValueDueToUserInteraction(newValue: string): void;
815
816
  _isPresentationValueInvalid(): boolean;
816
817
  }) & (abstract new (...args: any[]) => {
817
818
  _isValidValue(value: string): boolean;
818
819
  _toPresentationValue(value: string): string;
819
820
  _parsePresentationValue(presentationValue: string): string;
821
+ _isInternalValueUpdate: boolean;
820
822
  valueChanged(previous: string, next: string): void;
821
823
  _updatePresentationValue(): void;
822
824
  _updateValueDueToUserInteraction(newValue: string): void;
823
825
  _onTextFieldChange(): void;
826
+ _onTextFieldInput(event: Event): void;
824
827
  _isPresentationValueInvalid(): boolean;
825
828
  _onClearClick(): void;
826
829
  readOnly: boolean;
@@ -852,7 +855,6 @@ declare const DatePicker_base: (abstract new (...args: any[]) => {
852
855
  _presentationValueChanged(): void;
853
856
  readonly _textFieldPlaceholder: string;
854
857
  _textFieldSize?: string | undefined;
855
- _onTextFieldInput(event: Event): void;
856
858
  readonly _pickerButtonLabel: string;
857
859
  readonly _pickerButtonIcon: string;
858
860
  _onPickerButtonClick(): void;
@@ -25,10 +25,12 @@ declare const DateTimePicker_base: (abstract new (...args: any[]) => {
25
25
  _isValidValue(value: string): boolean;
26
26
  _toPresentationValue(value: string): string;
27
27
  _parsePresentationValue(presentationValue: string): string;
28
+ _isInternalValueUpdate: boolean;
28
29
  valueChanged: ((previous: string, next: string) => void) & ((_previous: string, _next: string) => void) & ((_previous: string, _next: string) => void);
29
30
  _updatePresentationValue: (() => void) & (() => void);
30
31
  _updateValueDueToUserInteraction(newValue: string): void;
31
32
  _onTextFieldChange: (() => void) & (() => void);
33
+ _onTextFieldInput: ((event: Event) => void) & ((event: Event) => void);
32
34
  _isPresentationValueInvalid(): boolean;
33
35
  _onClearClick: (() => void) & (() => void);
34
36
  readOnly: boolean;
@@ -58,7 +60,6 @@ declare const DateTimePicker_base: (abstract new (...args: any[]) => {
58
60
  _presentationValueChanged(): void;
59
61
  readonly _textFieldPlaceholder: string;
60
62
  _textFieldSize?: string | undefined;
61
- _onTextFieldInput(event: Event): void;
62
63
  readonly _pickerButtonLabel: string;
63
64
  readonly _pickerButtonIcon: string;
64
65
  _onOkClick(): void;
@@ -865,7 +866,7 @@ declare const DateTimePicker_base: (abstract new (...args: any[]) => {
865
866
  _updatePresentationValue: (() => void) & (() => void);
866
867
  readonly _textFieldPlaceholder: string;
867
868
  _textFieldSize?: string | undefined;
868
- _onTextFieldInput(event: Event): void;
869
+ _onTextFieldInput: ((event: Event) => void) & ((event: Event) => void);
869
870
  _onTextFieldChange: (() => void) & (() => void);
870
871
  readonly _pickerButtonLabel: string;
871
872
  readonly _pickerButtonIcon: string;
@@ -1600,16 +1601,19 @@ declare const DateTimePicker_base: (abstract new (...args: any[]) => {
1600
1601
  _isValidValue(value: string): boolean;
1601
1602
  _toPresentationValue(value: string): string;
1602
1603
  _parsePresentationValue(presentationValue: string): string;
1604
+ _isInternalValueUpdate: boolean;
1603
1605
  _updateValueDueToUserInteraction(newValue: string): void;
1604
1606
  _isPresentationValueInvalid(): boolean;
1605
1607
  }) & (abstract new (...args: any[]) => {
1606
1608
  _isValidValue(value: string): boolean;
1607
1609
  _toPresentationValue(value: string): string;
1608
1610
  _parsePresentationValue(presentationValue: string): string;
1611
+ _isInternalValueUpdate: boolean;
1609
1612
  valueChanged(previous: string, next: string): void;
1610
1613
  _updatePresentationValue(): void;
1611
1614
  _updateValueDueToUserInteraction(newValue: string): void;
1612
1615
  _onTextFieldChange(): void;
1616
+ _onTextFieldInput(event: Event): void;
1613
1617
  _isPresentationValueInvalid(): boolean;
1614
1618
  _onClearClick(): void;
1615
1619
  readOnly: boolean;
@@ -1641,7 +1645,6 @@ declare const DateTimePicker_base: (abstract new (...args: any[]) => {
1641
1645
  _presentationValueChanged(): void;
1642
1646
  readonly _textFieldPlaceholder: string;
1643
1647
  _textFieldSize?: string | undefined;
1644
- _onTextFieldInput(event: Event): void;
1645
1648
  readonly _pickerButtonLabel: string;
1646
1649
  readonly _pickerButtonIcon: string;
1647
1650
  _onPickerButtonClick(): void;
@@ -1,3 +1,4 @@
1
1
  import { Divider } from './divider';
2
+ export type { DividerAppearance } from './divider';
2
3
  export declare const registerDivider: (prefix?: string) => void;
3
4
  export { Divider as VwcDividerElement };
@@ -1,5 +1,8 @@
1
1
  import { Orientation } from '@microsoft/fast-web-utilities';
2
+ import { Appearance } from '../enums.js';
2
3
  import { VividElement } from '../../shared/foundation/vivid-element/vivid-element';
4
+ import type { ExtractFromEnum } from '../../shared/utils/enums';
5
+ export type DividerAppearance = ExtractFromEnum<Appearance, Appearance.Ghost | Appearance.Subtle>;
3
6
  export declare const DividerRole: {
4
7
  readonly separator: "separator";
5
8
  readonly presentation: "presentation";
@@ -7,7 +10,7 @@ export declare const DividerRole: {
7
10
  type DividerRole = typeof DividerRole[keyof typeof DividerRole];
8
11
  declare const Divider_base: {
9
12
  new (...args: any[]): {
10
- _vividAriaBehaviour: "delegate";
13
+ _vividAriaBehaviour: "host";
11
14
  connectedCallback(): void;
12
15
  specialHandling: boolean;
13
16
  readonly $fastController: import("@microsoft/fast-element").Controller;
@@ -345,5 +348,6 @@ declare const Divider_base: {
345
348
  export declare class Divider extends Divider_base {
346
349
  role: DividerRole;
347
350
  orientation: Orientation;
351
+ appearance?: DividerAppearance;
348
352
  }
349
353
  export {};
@@ -683,21 +683,18 @@ export declare class ListboxOption extends ListboxOption_base {
683
683
  protected defaultSelectedChanged(): void;
684
684
  disabled: boolean;
685
685
  protected disabledChanged(): void;
686
- selectedAttribute: boolean;
687
- protected selectedAttributeChanged(): void;
686
+ get selectedAttribute(): boolean;
687
+ set selectedAttribute(value: boolean);
688
688
  selected: boolean;
689
689
  protected selectedChanged(): void;
690
- dirtyValue: boolean;
691
- protected initialValue: string;
692
- initialValueChanged(): void;
690
+ value: string;
691
+ protected valueChanged(): void;
693
692
  _label?: string;
694
693
  get label(): string;
695
694
  set label(value: string);
696
695
  _text?: string;
697
696
  set text(value: string);
698
697
  get text(): string;
699
- set value(next: string);
700
- get value(): string;
701
698
  get form(): HTMLFormElement | null;
702
699
  matchedText?: string;
703
700
  get _hasMatchedText(): boolean;
@@ -1,3 +1,4 @@
1
1
  import { Schema } from 'prosemirror-model';
2
- declare const extendedSchema: Schema<keyof import("orderedmap").default<import("prosemirror-model").NodeSpec>, "s" | "u" | "tt" | "textSize">;
2
+ export declare const dynamicSchema: (prefix?: string) => Schema<"imageError", "s" | "u" | "tt" | "textSize">;
3
+ declare const extendedSchema: Schema<"imageError", "s" | "u" | "tt" | "textSize">;
3
4
  export default extendedSchema;
@@ -4,7 +4,7 @@ export declare const placeholderPluginKey: PluginKey<any>;
4
4
  export declare const createPlaceholderPlugin: (placeholder?: string) => Plugin<any>;
5
5
  export declare class ProseMirrorFacade {
6
6
  #private;
7
- init(element: HTMLElement): void;
7
+ init(element: HTMLElement, vwcPrefix?: string): void;
8
8
  updatePlaceholder(placeholderText?: string): void;
9
9
  replaceContent(content: string): void;
10
10
  selection(position?: RichTextEditorSelection): RichTextEditorSelection;
@@ -14,5 +14,5 @@ export declare class ProseMirrorFacade {
14
14
  getSelectionStyles(): SelectionStyles;
15
15
  setTextSize(size?: RICH_TEXT_EDITOR_MENUBAR_TEXT_SIZES): void;
16
16
  getValue(): string;
17
- addInlineImage({ file, position, alt, }: RichTextEditorInlineImageProps): Promise<void>;
17
+ addInlineImage({ file, position, alt, error, }: RichTextEditorInlineImageProps): Promise<void>;
18
18
  }
@@ -0,0 +1,2 @@
1
+ export declare const imagePlaceholderDefinition: import("../../../shared/design-system/defineVividComponent").VividComponentDefinition;
2
+ export declare const registerImagePlaceholder: (prefix?: string) => void;
@@ -0,0 +1,7 @@
1
+ import { VividElement } from '../../../shared/foundation/vivid-element/vivid-element';
2
+ export declare class ImagePlaceholder extends VividElement {
3
+ fileName?: string;
4
+ size?: string;
5
+ errorMessage?: string;
6
+ icon?: string;
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { ViewTemplate } from '@microsoft/fast-element';
2
+ import type { VividElementDefinitionContext } from '../../../shared/design-system/defineVividComponent';
3
+ import { ImagePlaceholder } from './image-placeholder.js';
4
+ export declare const ImagePlaceholderTemplate: (context: VividElementDefinitionContext) => ViewTemplate<ImagePlaceholder>;
@@ -1,6 +1,6 @@
1
1
  import type { ViewTemplate } from '@microsoft/fast-element';
2
2
  import type { VividElementDefinitionContext } from '../../../shared/design-system/defineVividComponent';
3
- import type { MenuBar } from './menubar.js';
3
+ import type { Menubar } from './menubar.js';
4
4
  export declare const TEXT_DECORATION_ITEMS: {
5
5
  text: string;
6
6
  icon: string;
@@ -12,7 +12,7 @@ export declare const TEXT_SIZES: {
12
12
  }[];
13
13
  export declare const MENU_BAR_ITEMS: {
14
14
  [key: string]: {
15
- registerStateProperty?: (menuBar: MenuBar) => void;
15
+ registerStateProperty?: (menubar: Menubar) => void;
16
16
  render: (context: VividElementDefinitionContext) => ViewTemplate<any, any>;
17
17
  };
18
18
  };
@@ -1,2 +1,2 @@
1
- export declare const menuBarDefinition: import("../../../shared/design-system/defineVividComponent").VividComponentDefinition;
2
- export declare const registerMenuBar: (prefix?: string) => void;
1
+ export declare const menubarDefinition: import("../../../shared/design-system/defineVividComponent").VividComponentDefinition;
2
+ export declare const registerMenubar: (prefix?: string) => void;
@@ -1,5 +1,5 @@
1
1
  import { VividElement } from '../../../shared/foundation/vivid-element/vivid-element';
2
- declare const MenuBar_base: {
2
+ declare const Menubar_base: {
3
3
  new (...args: any[]): {
4
4
  readonly locale: import("../../../shared/localization/Locale").Locale;
5
5
  connectedCallback(): void;
@@ -337,7 +337,7 @@ declare const MenuBar_base: {
337
337
  }): void;
338
338
  };
339
339
  } & typeof VividElement;
340
- export declare class MenuBar extends MenuBar_base {
340
+ export declare class Menubar extends Menubar_base {
341
341
  #private;
342
342
  menuItems?: string;
343
343
  connectedCallback(): void;
@@ -1,4 +1,4 @@
1
1
  import type { ViewTemplate } from '@microsoft/fast-element';
2
2
  import type { VividElementDefinitionContext } from '../../../shared/design-system/defineVividComponent';
3
- import { MenuBar } from './menubar.js';
4
- export declare const MenuBarTemplate: (context: VividElementDefinitionContext) => ViewTemplate<MenuBar>;
3
+ import { Menubar } from './menubar.js';
4
+ export declare const MenubarTemplate: (context: VividElementDefinitionContext) => ViewTemplate<Menubar>;
@@ -13,6 +13,7 @@ export interface RichTextEditorInlineImageProps {
13
13
  file: File;
14
14
  position?: number;
15
15
  alt?: string;
16
+ error?: string;
16
17
  }
17
18
  export declare const RichTextEditorTextBlocks: {
18
19
  readonly title: "h2";
@@ -27,10 +27,12 @@ declare const TimePicker_base: (abstract new (...args: any[]) => {
27
27
  _isValidValue(value: string): boolean;
28
28
  _toPresentationValue(value: string): string;
29
29
  _parsePresentationValue(presentationValue: string): string;
30
+ _isInternalValueUpdate: boolean;
30
31
  valueChanged: ((previous: string, next: string) => void) & ((_previous: string, _next: string) => void) & ((_previous: string, _next: string) => void);
31
32
  _updatePresentationValue: (() => void) & (() => void);
32
33
  _updateValueDueToUserInteraction(newValue: string): void;
33
34
  _onTextFieldChange: (() => void) & (() => void);
35
+ _onTextFieldInput: ((event: Event) => void) & ((event: Event) => void);
34
36
  _isPresentationValueInvalid(): boolean;
35
37
  _onClearClick: (() => void) & (() => void);
36
38
  readOnly: boolean;
@@ -60,7 +62,6 @@ declare const TimePicker_base: (abstract new (...args: any[]) => {
60
62
  _presentationValueChanged(): void;
61
63
  readonly _textFieldPlaceholder: string;
62
64
  _textFieldSize?: string | undefined;
63
- _onTextFieldInput(event: Event): void;
64
65
  readonly _pickerButtonLabel: string;
65
66
  readonly _pickerButtonIcon: string;
66
67
  _onOkClick(): void;
@@ -794,10 +795,12 @@ declare const TimePicker_base: (abstract new (...args: any[]) => {
794
795
  _isValidValue(value: string): boolean;
795
796
  _toPresentationValue(value: string): string;
796
797
  _parsePresentationValue(presentationValue: string): string;
798
+ _isInternalValueUpdate: boolean;
797
799
  valueChanged(previous: string, next: string): void;
798
800
  _updatePresentationValue(): void;
799
801
  _updateValueDueToUserInteraction(newValue: string): void;
800
802
  _onTextFieldChange(): void;
803
+ _onTextFieldInput(event: Event): void;
801
804
  _isPresentationValueInvalid(): boolean;
802
805
  _onClearClick(): void;
803
806
  readOnly: boolean;
@@ -829,7 +832,6 @@ declare const TimePicker_base: (abstract new (...args: any[]) => {
829
832
  _presentationValueChanged(): void;
830
833
  readonly _textFieldPlaceholder: string;
831
834
  _textFieldSize?: string | undefined;
832
- _onTextFieldInput(event: Event): void;
833
835
  readonly _pickerButtonLabel: string;
834
836
  readonly _pickerButtonIcon: string;
835
837
  _onPickerButtonClick(): void;
package/locales/de-DE.cjs CHANGED
@@ -437,7 +437,8 @@ const deDE = {
437
437
  },
438
438
  dataGrid: {
439
439
  cell: {
440
- selected: "Ausgewählt"
440
+ selected: "Ausgewählt",
441
+ button: "(Schaltfläche)"
441
442
  }
442
443
  },
443
444
  pagination: {
package/locales/de-DE.js CHANGED
@@ -435,7 +435,8 @@ const deDE = {
435
435
  },
436
436
  dataGrid: {
437
437
  cell: {
438
- selected: "Ausgewählt"
438
+ selected: "Ausgewählt",
439
+ button: "(Schaltfläche)"
439
440
  }
440
441
  },
441
442
  pagination: {
package/locales/en-GB.cjs CHANGED
@@ -269,7 +269,8 @@ const enGB = {
269
269
  },
270
270
  dataGrid: {
271
271
  cell: {
272
- selected: "Selected"
272
+ selected: "Selected",
273
+ button: "(button)"
273
274
  }
274
275
  },
275
276
  pagination: {
package/locales/en-GB.js CHANGED
@@ -267,7 +267,8 @@ const enGB = {
267
267
  },
268
268
  dataGrid: {
269
269
  cell: {
270
- selected: "Selected"
270
+ selected: "Selected",
271
+ button: "(button)"
271
272
  }
272
273
  },
273
274
  pagination: {
package/locales/en-US.cjs CHANGED
@@ -437,7 +437,8 @@ const enUS = {
437
437
  },
438
438
  dataGrid: {
439
439
  cell: {
440
- selected: "Selected"
440
+ selected: "Selected",
441
+ button: "(button)"
441
442
  }
442
443
  },
443
444
  pagination: {
package/locales/en-US.js CHANGED
@@ -435,7 +435,8 @@ const enUS = {
435
435
  },
436
436
  dataGrid: {
437
437
  cell: {
438
- selected: "Selected"
438
+ selected: "Selected",
439
+ button: "(button)"
439
440
  }
440
441
  },
441
442
  pagination: {
package/locales/ja-JP.cjs CHANGED
@@ -436,7 +436,8 @@ const jaJP = {
436
436
  },
437
437
  dataGrid: {
438
438
  cell: {
439
- selected: "選択済み"
439
+ selected: "選択済み",
440
+ button: "(ボタン)"
440
441
  }
441
442
  },
442
443
  pagination: {
package/locales/ja-JP.js CHANGED
@@ -434,7 +434,8 @@ const jaJP = {
434
434
  },
435
435
  dataGrid: {
436
436
  cell: {
437
- selected: "選択済み"
437
+ selected: "選択済み",
438
+ button: "(ボタン)"
438
439
  }
439
440
  },
440
441
  pagination: {
package/locales/zh-CN.cjs CHANGED
@@ -438,7 +438,8 @@ const zhCN = {
438
438
  },
439
439
  dataGrid: {
440
440
  cell: {
441
- selected: "已选择"
441
+ selected: "已选择",
442
+ button: "(按钮)"
442
443
  }
443
444
  },
444
445
  pagination: {
package/locales/zh-CN.js CHANGED
@@ -436,7 +436,8 @@ const zhCN = {
436
436
  },
437
437
  dataGrid: {
438
438
  cell: {
439
- selected: "已选择"
439
+ selected: "已选择",
440
+ button: "(按钮)"
440
441
  }
441
442
  },
442
443
  pagination: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vonage/vivid",
3
- "version": "4.27.0",
3
+ "version": "4.29.0",
4
4
  "type": "module",
5
5
  "module": "./index.js",
6
6
  "main": "./index.cjs",
@@ -48,6 +48,7 @@
48
48
  "stylelint": "stylelint 'src/**/*.{css,scss}'",
49
49
  "stylelint:fix": "stylelint 'src/**/*.{css,scss}' --fix",
50
50
  "test": "vitest run",
51
+ "test:watch": "vitest --watch",
51
52
  "test:coverage": "vitest run --coverage",
52
53
  "e2e": "playwright test",
53
54
  "e2e:ui": "playwright test --ui",
@@ -8,7 +8,7 @@ const repeat = require('./repeat.cjs');
8
8
  const when = require('./when.cjs');
9
9
  const classNames = require('./class-names.cjs');
10
10
 
11
- const calendarStyles = ".segments{display:inline-flex;gap:24px}.segment{display:flex;flex-direction:column;gap:12px}.segment .header{display:flex;align-items:center;padding-block:8px}.segment .title{display:flex;flex-grow:1;justify-content:center}.segment .title-action{border-radius:8px;block-size:24px;font:var(--vvd-typography-base-extended);padding-inline:8px}.calendar{display:flex;flex-direction:column;margin-top:8px;gap:4px}.calendar .calendar-separator{margin-inline:10px}.calendar .calendar-weekdays{display:flex;justify-content:center}.calendar .calendar-weekday{display:inline-flex;align-items:center;justify-content:center;block-size:16px;font:var(--vvd-typography-base-condensed);inline-size:40px}.calendar .calendar-week{display:flex;justify-content:center}.calendar .calendar-day{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;aspect-ratio:1/1;block-size:28px;font:var(--vvd-typography-base);margin-inline:6px}.calendar .calendar-day.start,.calendar .calendar-day.end{border:2px solid var(--vvd-color-cta-50);background-color:var(--vvd-color-cta-200)}.calendar:focus-visible .calendar .calendar-day.start,.calendar:focus-visible .calendar .calendar-day.end{border-width:3px}.calendar .calendar-day:before,.calendar .calendar-day:after{position:absolute;z-index:-1;display:block;width:20px;height:28px}.calendar .calendar-day:before{right:50%}.calendar .calendar-day:after{left:50%}.calendar .calendar-day.range:before,.calendar .calendar-day.range:after{background-color:var(--vvd-color-cta-50)}.calendar .calendar-day.range:not(.start):before,.calendar .calendar-day.range:not(.end):after{content:\"\"}.calendar .calendar-day.outside-month,.calendar .calendar-day:disabled{color:var(--vvd-color-neutral-400)}.months-separator{margin-inline:-12px}.month-grid{display:flex;flex-direction:column;gap:34px}.month-grid .months-row{display:flex;justify-content:center;gap:29px}.month-grid .month{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;aspect-ratio:1/1;block-size:48px;font:var(--vvd-typography-base-extended);text-transform:uppercase}.month-grid .month:disabled{color:var(--vvd-color-neutral-400)}.button{--_connotation-color-primary: var(--vvd-date-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-date-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-date-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-date-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-date-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-date-picker-accent-pale, var(--vvd-color-neutral-300))}.button{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.button:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.button:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.button:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.button:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.button:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.button{position:relative;padding:0;border:none;background-color:var(--_appearance-color-fill);color:var(--_appearance-color-text);cursor:pointer}.button:focus-visible{--focus-stroke-gap-color: transparent;color:var(--vvd-color-canvas-text);box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.button:focus-visible.start,.button:focus-visible.end{border-width:3px}.button.current{border:1px solid var(--vvd-color-neutral-200)}.button:disabled{cursor:not-allowed}";
11
+ const calendarStyles = ".segments{display:inline-flex;gap:24px}.segment{display:flex;flex-direction:column;gap:12px}.segment .header{--focus-stroke-gap-color: transparent;display:flex;align-items:center;padding-block:8px}.segment .header:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.segment .title{display:flex;flex-grow:1;justify-content:center}.segment .title-action{border-radius:8px;block-size:24px;font:var(--vvd-typography-base-extended);padding-inline:8px}.calendar{display:flex;flex-direction:column;margin-top:8px;gap:4px}.calendar .calendar-separator{margin-inline:10px}.calendar .calendar-weekdays{display:flex;justify-content:center}.calendar .calendar-weekday{display:inline-flex;align-items:center;justify-content:center;block-size:16px;font:var(--vvd-typography-base-condensed);inline-size:40px}.calendar .calendar-week{display:flex;justify-content:center}.calendar .calendar-day{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;aspect-ratio:1/1;block-size:28px;font:var(--vvd-typography-base);margin-inline:6px}.calendar .calendar-day.start,.calendar .calendar-day.end{border:2px solid var(--vvd-color-cta-50);background-color:var(--vvd-color-cta-200)}.calendar:focus-visible .calendar .calendar-day.start,.calendar:focus-visible .calendar .calendar-day.end{border-width:3px}.calendar .calendar-day:before,.calendar .calendar-day:after{position:absolute;z-index:-1;display:block;width:20px;height:28px}.calendar .calendar-day:before{right:50%}.calendar .calendar-day:after{left:50%}.calendar .calendar-day.range:before,.calendar .calendar-day.range:after{background-color:var(--vvd-color-cta-50)}.calendar .calendar-day.range:not(.start):before,.calendar .calendar-day.range:not(.end):after{content:\"\"}.calendar .calendar-day.outside-month,.calendar .calendar-day:disabled{color:var(--vvd-color-neutral-400)}.months-separator{margin-inline:-12px}.month-grid{display:flex;flex-direction:column;gap:34px}.month-grid .months-row{display:flex;justify-content:center;gap:29px}.month-grid .month{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;aspect-ratio:1/1;block-size:48px;font:var(--vvd-typography-base-extended);text-transform:uppercase}.month-grid .month:disabled{color:var(--vvd-color-neutral-400)}.button{--_connotation-color-primary: var(--vvd-date-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-date-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-date-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-date-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-date-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-date-picker-accent-pale, var(--vvd-color-neutral-300))}.button{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.button:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.button:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.button:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.button:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.button:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.button{position:relative;padding:0;border:none;background-color:var(--_appearance-color-fill);color:var(--_appearance-color-text);cursor:pointer}.button:disabled{cursor:not-allowed}.button:focus:not(.title-action),.button.title-action:focus-visible{--focus-stroke-gap-color: transparent;color:var(--vvd-color-canvas-text);box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.button:focus:not(.title-action).start,.button:focus:not(.title-action).end,.button.title-action:focus-visible.start,.button.title-action:focus-visible.end{border-width:3px}.button.current{border:1px solid var(--vvd-color-neutral-200)}.button.selected{border:1px solid var(--vvd-color-neutral-900)}";
12
12
 
13
13
  /**
14
14
  * @name toDate
@@ -5687,11 +5687,10 @@ const CalendarPicker = (Base) => {
5687
5687
  super._onPickerButtonClick();
5688
5688
  if (this._popupOpen) {
5689
5689
  vividElement.DOM.processUpdates();
5690
- const tabbableDate = this._tabbableDate;
5691
- if (tabbableDate)
5692
- this.shadowRoot.querySelector(
5693
- `[data-date="${tabbableDate}"]`
5694
- ).focus();
5690
+ const headerElement = this._dialogEl.querySelector(
5691
+ ".header"
5692
+ );
5693
+ headerElement?.focus();
5695
5694
  }
5696
5695
  }
5697
5696
  // --- Calendar header ---
@@ -6058,7 +6057,7 @@ const MinMaxCalendarPicker = (SuperClass) => {
6058
6057
 
6059
6058
  function renderDialogHeader(context) {
6060
6059
  const buttonTag = context.tagFor(definition.Button);
6061
- return vividElement.html` <div class="header">
6060
+ return vividElement.html`<div class="header" tabindex="-1">
6062
6061
  ${when.when(
6063
6062
  (x) => x.prevYearButton,
6064
6063
  vividElement.html`
@@ -6221,7 +6220,7 @@ function renderCalendarGrid(context) {
6221
6220
  ?disabled="${(x, c) => !c.parentContext.parentContext.parent._isDateInValidRange(
6222
6221
  x.date
6223
6222
  )}"
6224
- tabindex="${(x, c) => x.date === c.parentContext.parentContext.parent._tabbableDate ? 2 : -1}"
6223
+ tabindex="${(x, c) => x.date === c.parentContext.parentContext.parent._tabbableDate ? 1 : -1}"
6225
6224
  data-date="${(x) => x.date}"
6226
6225
  @click="${(x, c) => c.parentContext.parentContext.parent._onDateClick(x.date)}"
6227
6226
  @focus="${(x, c) => c.parentContext.parentContext.parent._onDateFocus(x.date)}"
@@ -6304,7 +6303,7 @@ function renderMonthPickerGrid(context) {
6304
6303
  tabindex="${(x, c) => c.parentContext.parentContext.parent._tabbableMonth && areMonthsEqual(
6305
6304
  x.month,
6306
6305
  c.parentContext.parentContext.parent._tabbableMonth
6307
- ) ? 2 : -1}"
6306
+ ) ? 1 : -1}"
6308
6307
  aria-label="${(x) => x.monthName}"
6309
6308
  data-month="${(x) => monthToStr(x.month)}"
6310
6309
  ?disabled="${(x, c) => !c.parentContext.parentContext.parent._isMonthInValidRange(
@@ -6,7 +6,7 @@ import { r as repeat } from './repeat.js';
6
6
  import { w as when } from './when.js';
7
7
  import { c as classNames } from './class-names.js';
8
8
 
9
- const calendarStyles = ".segments{display:inline-flex;gap:24px}.segment{display:flex;flex-direction:column;gap:12px}.segment .header{display:flex;align-items:center;padding-block:8px}.segment .title{display:flex;flex-grow:1;justify-content:center}.segment .title-action{border-radius:8px;block-size:24px;font:var(--vvd-typography-base-extended);padding-inline:8px}.calendar{display:flex;flex-direction:column;margin-top:8px;gap:4px}.calendar .calendar-separator{margin-inline:10px}.calendar .calendar-weekdays{display:flex;justify-content:center}.calendar .calendar-weekday{display:inline-flex;align-items:center;justify-content:center;block-size:16px;font:var(--vvd-typography-base-condensed);inline-size:40px}.calendar .calendar-week{display:flex;justify-content:center}.calendar .calendar-day{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;aspect-ratio:1/1;block-size:28px;font:var(--vvd-typography-base);margin-inline:6px}.calendar .calendar-day.start,.calendar .calendar-day.end{border:2px solid var(--vvd-color-cta-50);background-color:var(--vvd-color-cta-200)}.calendar:focus-visible .calendar .calendar-day.start,.calendar:focus-visible .calendar .calendar-day.end{border-width:3px}.calendar .calendar-day:before,.calendar .calendar-day:after{position:absolute;z-index:-1;display:block;width:20px;height:28px}.calendar .calendar-day:before{right:50%}.calendar .calendar-day:after{left:50%}.calendar .calendar-day.range:before,.calendar .calendar-day.range:after{background-color:var(--vvd-color-cta-50)}.calendar .calendar-day.range:not(.start):before,.calendar .calendar-day.range:not(.end):after{content:\"\"}.calendar .calendar-day.outside-month,.calendar .calendar-day:disabled{color:var(--vvd-color-neutral-400)}.months-separator{margin-inline:-12px}.month-grid{display:flex;flex-direction:column;gap:34px}.month-grid .months-row{display:flex;justify-content:center;gap:29px}.month-grid .month{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;aspect-ratio:1/1;block-size:48px;font:var(--vvd-typography-base-extended);text-transform:uppercase}.month-grid .month:disabled{color:var(--vvd-color-neutral-400)}.button{--_connotation-color-primary: var(--vvd-date-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-date-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-date-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-date-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-date-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-date-picker-accent-pale, var(--vvd-color-neutral-300))}.button{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.button:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.button:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.button:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.button:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.button:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.button{position:relative;padding:0;border:none;background-color:var(--_appearance-color-fill);color:var(--_appearance-color-text);cursor:pointer}.button:focus-visible{--focus-stroke-gap-color: transparent;color:var(--vvd-color-canvas-text);box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.button:focus-visible.start,.button:focus-visible.end{border-width:3px}.button.current{border:1px solid var(--vvd-color-neutral-200)}.button:disabled{cursor:not-allowed}";
9
+ const calendarStyles = ".segments{display:inline-flex;gap:24px}.segment{display:flex;flex-direction:column;gap:12px}.segment .header{--focus-stroke-gap-color: transparent;display:flex;align-items:center;padding-block:8px}.segment .header:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.segment .title{display:flex;flex-grow:1;justify-content:center}.segment .title-action{border-radius:8px;block-size:24px;font:var(--vvd-typography-base-extended);padding-inline:8px}.calendar{display:flex;flex-direction:column;margin-top:8px;gap:4px}.calendar .calendar-separator{margin-inline:10px}.calendar .calendar-weekdays{display:flex;justify-content:center}.calendar .calendar-weekday{display:inline-flex;align-items:center;justify-content:center;block-size:16px;font:var(--vvd-typography-base-condensed);inline-size:40px}.calendar .calendar-week{display:flex;justify-content:center}.calendar .calendar-day{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;aspect-ratio:1/1;block-size:28px;font:var(--vvd-typography-base);margin-inline:6px}.calendar .calendar-day.start,.calendar .calendar-day.end{border:2px solid var(--vvd-color-cta-50);background-color:var(--vvd-color-cta-200)}.calendar:focus-visible .calendar .calendar-day.start,.calendar:focus-visible .calendar .calendar-day.end{border-width:3px}.calendar .calendar-day:before,.calendar .calendar-day:after{position:absolute;z-index:-1;display:block;width:20px;height:28px}.calendar .calendar-day:before{right:50%}.calendar .calendar-day:after{left:50%}.calendar .calendar-day.range:before,.calendar .calendar-day.range:after{background-color:var(--vvd-color-cta-50)}.calendar .calendar-day.range:not(.start):before,.calendar .calendar-day.range:not(.end):after{content:\"\"}.calendar .calendar-day.outside-month,.calendar .calendar-day:disabled{color:var(--vvd-color-neutral-400)}.months-separator{margin-inline:-12px}.month-grid{display:flex;flex-direction:column;gap:34px}.month-grid .months-row{display:flex;justify-content:center;gap:29px}.month-grid .month{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;aspect-ratio:1/1;block-size:48px;font:var(--vvd-typography-base-extended);text-transform:uppercase}.month-grid .month:disabled{color:var(--vvd-color-neutral-400)}.button{--_connotation-color-primary: var(--vvd-date-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-date-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-date-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-date-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-date-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-date-picker-accent-pale, var(--vvd-color-neutral-300))}.button{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.button:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.button:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.button:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.button:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.button:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.button{position:relative;padding:0;border:none;background-color:var(--_appearance-color-fill);color:var(--_appearance-color-text);cursor:pointer}.button:disabled{cursor:not-allowed}.button:focus:not(.title-action),.button.title-action:focus-visible{--focus-stroke-gap-color: transparent;color:var(--vvd-color-canvas-text);box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.button:focus:not(.title-action).start,.button:focus:not(.title-action).end,.button.title-action:focus-visible.start,.button.title-action:focus-visible.end{border-width:3px}.button.current{border:1px solid var(--vvd-color-neutral-200)}.button.selected{border:1px solid var(--vvd-color-neutral-900)}";
10
10
 
11
11
  /**
12
12
  * @name toDate
@@ -5685,11 +5685,10 @@ const CalendarPicker = (Base) => {
5685
5685
  super._onPickerButtonClick();
5686
5686
  if (this._popupOpen) {
5687
5687
  DOM.processUpdates();
5688
- const tabbableDate = this._tabbableDate;
5689
- if (tabbableDate)
5690
- this.shadowRoot.querySelector(
5691
- `[data-date="${tabbableDate}"]`
5692
- ).focus();
5688
+ const headerElement = this._dialogEl.querySelector(
5689
+ ".header"
5690
+ );
5691
+ headerElement?.focus();
5693
5692
  }
5694
5693
  }
5695
5694
  // --- Calendar header ---
@@ -6056,7 +6055,7 @@ const MinMaxCalendarPicker = (SuperClass) => {
6056
6055
 
6057
6056
  function renderDialogHeader(context) {
6058
6057
  const buttonTag = context.tagFor(Button);
6059
- return html` <div class="header">
6058
+ return html`<div class="header" tabindex="-1">
6060
6059
  ${when(
6061
6060
  (x) => x.prevYearButton,
6062
6061
  html`
@@ -6219,7 +6218,7 @@ function renderCalendarGrid(context) {
6219
6218
  ?disabled="${(x, c) => !c.parentContext.parentContext.parent._isDateInValidRange(
6220
6219
  x.date
6221
6220
  )}"
6222
- tabindex="${(x, c) => x.date === c.parentContext.parentContext.parent._tabbableDate ? 2 : -1}"
6221
+ tabindex="${(x, c) => x.date === c.parentContext.parentContext.parent._tabbableDate ? 1 : -1}"
6223
6222
  data-date="${(x) => x.date}"
6224
6223
  @click="${(x, c) => c.parentContext.parentContext.parent._onDateClick(x.date)}"
6225
6224
  @focus="${(x, c) => c.parentContext.parentContext.parent._onDateFocus(x.date)}"
@@ -6302,7 +6301,7 @@ function renderMonthPickerGrid(context) {
6302
6301
  tabindex="${(x, c) => c.parentContext.parentContext.parent._tabbableMonth && areMonthsEqual(
6303
6302
  x.month,
6304
6303
  c.parentContext.parentContext.parent._tabbableMonth
6305
- ) ? 2 : -1}"
6304
+ ) ? 1 : -1}"
6306
6305
  aria-label="${(x) => x.monthName}"
6307
6306
  data-month="${(x) => monthToStr(x.month)}"
6308
6307
  ?disabled="${(x, c) => !c.parentContext.parentContext.parent._isMonthInValidRange(