igniteui-webcomponents 6.4.0-alpha.0 → 6.4.0-alpha.1

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 (75) hide show
  1. package/animations/player.d.ts +37 -11
  2. package/animations/player.js +32 -41
  3. package/animations/player.js.map +1 -1
  4. package/components/accordion/accordion.d.ts +18 -12
  5. package/components/accordion/accordion.js +82 -65
  6. package/components/accordion/accordion.js.map +1 -1
  7. package/components/badge/badge.d.ts +8 -0
  8. package/components/badge/badge.js +16 -1
  9. package/components/badge/badge.js.map +1 -1
  10. package/components/badge/themes/badge.base.css.js +1 -1
  11. package/components/badge/themes/badge.base.css.js.map +1 -1
  12. package/components/badge/themes/dark/badge.indigo.css.js +1 -1
  13. package/components/badge/themes/dark/badge.indigo.css.js.map +1 -1
  14. package/components/badge/themes/shared/badge.bootstrap.css.js +1 -1
  15. package/components/badge/themes/shared/badge.bootstrap.css.js.map +1 -1
  16. package/components/badge/themes/shared/badge.common.css.js +1 -1
  17. package/components/badge/themes/shared/badge.common.css.js.map +1 -1
  18. package/components/badge/themes/shared/badge.fluent.css.d.ts +1 -0
  19. package/components/badge/themes/shared/badge.fluent.css.js +3 -0
  20. package/components/badge/themes/shared/badge.fluent.css.js.map +1 -0
  21. package/components/badge/themes/shared/badge.indigo.css.js +1 -1
  22. package/components/badge/themes/shared/badge.indigo.css.js.map +1 -1
  23. package/components/badge/themes/shared/badge.material.css.d.ts +1 -0
  24. package/components/badge/themes/shared/badge.material.css.js +3 -0
  25. package/components/badge/themes/shared/badge.material.css.js.map +1 -0
  26. package/components/badge/themes/themes.js +6 -4
  27. package/components/badge/themes/themes.js.map +1 -1
  28. package/components/banner/banner.d.ts +2 -3
  29. package/components/banner/banner.js +13 -19
  30. package/components/banner/banner.js.map +1 -1
  31. package/components/chat/chat-input.d.ts +1 -0
  32. package/components/chat/chat-input.js +6 -1
  33. package/components/chat/chat-input.js.map +1 -1
  34. package/components/chat/chat-message.js +2 -2
  35. package/components/chat/chat-message.js.map +1 -1
  36. package/components/chat/chat.d.ts +1 -0
  37. package/components/chat/chat.js +4 -2
  38. package/components/chat/chat.js.map +1 -1
  39. package/components/chat/types.d.ts +2 -0
  40. package/components/chat/types.js.map +1 -1
  41. package/components/chat/utils.d.ts +2 -2
  42. package/components/chat/utils.js +3 -3
  43. package/components/chat/utils.js.map +1 -1
  44. package/components/checkbox/themes/checkbox.base.css.js +1 -1
  45. package/components/checkbox/themes/checkbox.base.css.js.map +1 -1
  46. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
  47. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
  48. package/components/combo/combo.d.ts +11 -9
  49. package/components/combo/combo.js +34 -49
  50. package/components/combo/combo.js.map +1 -1
  51. package/components/combo/controllers/navigation.d.ts +39 -43
  52. package/components/combo/controllers/navigation.js +153 -175
  53. package/components/combo/controllers/navigation.js.map +1 -1
  54. package/components/date-range-picker/date-range-picker.d.ts +4 -0
  55. package/components/date-range-picker/date-range-picker.js.map +1 -1
  56. package/components/dialog/themes/shared/dialog.common.css.js +1 -1
  57. package/components/dialog/themes/shared/dialog.common.css.js.map +1 -1
  58. package/components/expansion-panel/expansion-panel.d.ts +6 -5
  59. package/components/expansion-panel/expansion-panel.js +33 -42
  60. package/components/expansion-panel/expansion-panel.js.map +1 -1
  61. package/components/stepper/step.d.ts +1 -1
  62. package/components/stepper/step.js +4 -6
  63. package/components/stepper/step.js.map +1 -1
  64. package/components/tooltip/themes/tooltip.base.css.js +1 -1
  65. package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
  66. package/components/tooltip/tooltip.d.ts +2 -0
  67. package/components/tooltip/tooltip.js +9 -2
  68. package/components/tooltip/tooltip.js.map +1 -1
  69. package/components/tree/tree-item.js +1 -5
  70. package/components/tree/tree-item.js.map +1 -1
  71. package/custom-elements.json +1149 -1091
  72. package/igniteui-webcomponents.css-data.json +1 -1
  73. package/igniteui-webcomponents.html-data.json +1 -1
  74. package/package.json +1 -1
  75. package/web-types.json +2 -2
@@ -1,198 +1,176 @@
1
- const START_INDEX = -1;
2
- var DIRECTION;
3
- (function (DIRECTION) {
4
- DIRECTION[DIRECTION["Up"] = -1] = "Up";
5
- DIRECTION[DIRECTION["Down"] = 1] = "Down";
6
- })(DIRECTION || (DIRECTION = {}));
7
- export class NavigationController {
1
+ import { addKeybindings, altKey, arrowDown, arrowUp, endKey, enterKey, escapeKey, homeKey, shiftKey, spaceBar, tabKey, } from '../../common/controllers/key-bindings.js';
2
+ export class ComboNavigationController {
3
+ get active() {
4
+ return this._active;
5
+ }
6
+ set active(value) {
7
+ this._active = value;
8
+ this.combo.requestUpdate();
9
+ }
8
10
  get input() {
9
- return this.host.singleSelect ? this.host._input : this.host._searchInput;
11
+ return this._config.input.value;
10
12
  }
11
- get dataState() {
12
- return this.state.dataState;
13
+ get searchInput() {
14
+ return this._config.search.value;
13
15
  }
14
- show() {
15
- this.host._show(true);
16
+ get list() {
17
+ return this._config.list.value;
16
18
  }
17
- hide() {
18
- this.host._hide(true);
19
+ get _firstItem() {
20
+ return this.state.dataState.findIndex((rec) => !rec.header);
19
21
  }
20
- toggleSelect(index) {
21
- this.host.toggleSelect(index);
22
+ get _lastItem() {
23
+ return this.state.dataState.length - 1;
22
24
  }
23
- select(index) {
24
- this.host.selectByIndex(index);
25
+ async _hide() {
26
+ return await this.combo._hide(true);
25
27
  }
26
- get currentItem() {
27
- const item = this.active;
28
- return item === START_INDEX ? START_INDEX : item;
28
+ async _show() {
29
+ return await this.combo._show(true);
29
30
  }
30
- get firstItem() {
31
- return this.dataState.findIndex((i) => i.header !== true);
31
+ _toggleSelection(index) {
32
+ this.combo.toggleSelect(index);
32
33
  }
33
- get lastItem() {
34
- return this.dataState.length - 1;
34
+ _select(index) {
35
+ this.combo.selectByIndex(index);
35
36
  }
36
- scrollToActive(container, behavior = 'auto') {
37
- container.element(this.active)?.scrollIntoView({
37
+ _scrollToActive(behavior) {
38
+ this.list.element(this.active)?.scrollIntoView({
38
39
  block: 'center',
39
- behavior,
40
+ behavior: behavior ?? 'auto',
40
41
  });
41
- container.requestUpdate();
42
+ this.list.requestUpdate();
42
43
  }
43
- get active() {
44
- return this._active;
45
- }
46
- set active(node) {
47
- this._active = node;
48
- this.host.requestUpdate();
49
- }
50
- constructor(host, state) {
51
- this.host = host;
52
- this.state = state;
53
- this.hostHandlers = new Map(Object.entries({
54
- Escape: this.escape,
55
- }));
56
- this.mainInputHandlers = new Map(Object.entries({
57
- Escape: this.escape,
58
- ArrowUp: this.hide,
59
- ArrowDown: this.mainInputArrowDown,
60
- Tab: this.tab,
61
- Enter: this.enter,
62
- }));
63
- this.searchInputHandlers = new Map(Object.entries({
64
- Escape: this.escape,
65
- ArrowUp: this.escape,
66
- ArrowDown: this.inputArrowDown,
67
- Tab: this.inputArrowDown,
68
- }));
69
- this.listHandlers = new Map(Object.entries({
70
- ArrowDown: this.arrowDown,
71
- ArrowUp: this.arrowUp,
72
- ' ': this.space,
73
- Enter: this.enter,
74
- Escape: this.escape,
75
- Tab: this.tab,
76
- Home: this.home,
77
- End: this.end,
78
- }));
79
- this._active = START_INDEX;
80
- this.host.addController(this);
81
- }
82
- home(container) {
83
- this.active = this.firstItem;
84
- this.scrollToActive(container, 'smooth');
85
- }
86
- end(container) {
87
- this.active = this.lastItem;
88
- this.scrollToActive(container, 'smooth');
89
- }
90
- space() {
91
- if (this.active === START_INDEX) {
92
- return;
44
+ _getNearestItem(start, delta) {
45
+ let index = start;
46
+ const items = this.state.dataState;
47
+ while (items[index + delta]?.header) {
48
+ index += delta;
93
49
  }
94
- const item = this.dataState[this.active];
95
- if (!item.header) {
96
- this.toggleSelect(this.active);
50
+ index += delta;
51
+ return index >= 0 && index < items.length ? index : -1;
52
+ }
53
+ _getNextItem(delta) {
54
+ const next = this._getNearestItem(this._active, delta);
55
+ if (next === -1 && this.active === this._firstItem) {
56
+ this.searchInput.checkVisibility()
57
+ ? this.searchInput.focus()
58
+ : this._onEscape();
97
59
  }
60
+ this.active = next;
98
61
  }
99
- escape() {
100
- this.hide();
101
- this.host.focus();
102
- }
103
- enter() {
104
- if (this.active === START_INDEX) {
105
- return;
106
- }
107
- const item = this.dataState[this.active];
108
- if (!item.header && this.host.singleSelect) {
109
- this.select(this.active);
110
- }
111
- this.hide();
112
- requestAnimationFrame(() => this.input.select());
113
- this.host.focus();
114
- }
115
- inputArrowDown(container) {
116
- container.focus();
117
- this.arrowDown(container);
118
- }
119
- async mainInputArrowDown(container) {
120
- this.show();
121
- await container.updateComplete;
122
- if (this.host.singleSelect) {
123
- container.focus();
124
- this.arrowDown(container);
125
- }
126
- }
127
- tab() {
128
- this.hide();
129
- this.host.blur();
130
- }
131
- arrowDown(container) {
132
- this.getNextItem(DIRECTION.Down);
133
- this.scrollToActive(container);
134
- }
135
- arrowUp(container) {
136
- this.getNextItem(DIRECTION.Up);
137
- this.scrollToActive(container);
138
- }
139
- getNextItem(direction) {
140
- const next = this.getNearestItem(this.currentItem, direction);
141
- if (next === -1) {
142
- if (this.active === this.firstItem) {
62
+ constructor(combo, state, config) {
63
+ this.combo = combo;
64
+ this.state = state;
65
+ this._active = -1;
66
+ this._onSpace = () => {
67
+ if (this._active === -1) {
68
+ return;
69
+ }
70
+ const item = this.state.dataState[this._active];
71
+ if (!item.header) {
72
+ this._toggleSelection(this._active);
73
+ }
74
+ };
75
+ this._onEnter = async () => {
76
+ if (this._active === -1) {
77
+ return;
78
+ }
79
+ const item = this.state.dataState[this._active];
80
+ if (!item.header && this.combo.singleSelect) {
81
+ this._select(this.active);
82
+ }
83
+ if (await this._hide()) {
84
+ this.input.select();
85
+ this.combo.focus();
86
+ }
87
+ };
88
+ this._onTab = async ({ shiftKey }) => {
89
+ if (this.combo.open) {
90
+ if (shiftKey) {
91
+ this.combo.focus();
92
+ }
93
+ await this._hide();
94
+ }
95
+ };
96
+ this._onEscape = async () => {
97
+ if (!this.combo.open) {
98
+ this.combo.clearSelection();
99
+ }
100
+ if (await this._hide()) {
143
101
  this.input.focus();
144
- this.active = START_INDEX;
145
102
  }
146
- return;
147
- }
148
- this.active = next;
149
- }
150
- getNearestItem(startIndex, direction) {
151
- let index = startIndex;
152
- const items = this.dataState;
153
- while (items[index + direction]?.header) {
154
- index += direction;
155
- }
156
- index += direction;
157
- if (index >= 0 && index < items.length) {
158
- return index;
159
- }
160
- return -1;
103
+ };
104
+ this._onMainInputArrowDown = async () => {
105
+ if (!this.combo.open && !(await this._show())) {
106
+ return;
107
+ }
108
+ if (this.combo.singleSelect) {
109
+ this._onSearchArrowDown();
110
+ }
111
+ };
112
+ this._onSearchArrowDown = () => {
113
+ this.list.focus();
114
+ this._onArrowDown();
115
+ };
116
+ this._onHome = () => {
117
+ this.active = this._firstItem;
118
+ this._scrollToActive();
119
+ };
120
+ this._onEnd = () => {
121
+ this.active = this._lastItem;
122
+ this._scrollToActive();
123
+ };
124
+ this._onArrowUp = () => {
125
+ this._getNextItem(-1);
126
+ this._scrollToActive();
127
+ };
128
+ this._onArrowDown = () => {
129
+ this._getNextItem(1);
130
+ this._scrollToActive();
131
+ };
132
+ this.combo.addController(this);
133
+ this._config = config;
134
+ const bindingDefaults = {
135
+ triggers: ['keydownRepeat'],
136
+ };
137
+ const skip = () => this.combo.disabled;
138
+ addKeybindings(this.combo, { skip, bindingDefaults })
139
+ .set(tabKey, this._onTab, { preventDefault: false })
140
+ .set([shiftKey, tabKey], this._onTab, {
141
+ preventDefault: false,
142
+ })
143
+ .set(escapeKey, this._onEscape);
144
+ addKeybindings(this.combo, {
145
+ skip,
146
+ ref: this._config.input,
147
+ bindingDefaults,
148
+ })
149
+ .set(arrowUp, async () => await this._hide())
150
+ .set([altKey, arrowDown], this._onMainInputArrowDown)
151
+ .set(arrowDown, this._onMainInputArrowDown)
152
+ .set(enterKey, this._onEnter);
153
+ addKeybindings(this.combo, {
154
+ skip,
155
+ ref: this._config.search,
156
+ bindingDefaults,
157
+ })
158
+ .set(arrowUp, this._onEscape)
159
+ .set(arrowDown, this._onSearchArrowDown);
160
+ addKeybindings(this.combo, {
161
+ skip,
162
+ ref: this._config.list,
163
+ bindingDefaults,
164
+ })
165
+ .set(arrowUp, this._onArrowUp)
166
+ .set(arrowDown, this._onArrowDown)
167
+ .set(homeKey, this._onHome)
168
+ .set(endKey, this._onEnd)
169
+ .set(spaceBar, this._onSpace)
170
+ .set(enterKey, this._onEnter);
161
171
  }
162
- hostConnected() { }
163
172
  hostDisconnected() {
164
- this.active = START_INDEX;
165
- }
166
- navigateTo(item, container) {
167
- this.active = this.dataState.indexOf(item);
168
- this.scrollToActive(container, 'smooth');
169
- }
170
- navigateHost(event) {
171
- if (this.hostHandlers.has(event.key)) {
172
- event.preventDefault();
173
- this.hostHandlers.get(event.key).call(this);
174
- }
175
- }
176
- navigateMainInput(event, container) {
177
- event.stopPropagation();
178
- if (this.mainInputHandlers.has(event.key)) {
179
- event.preventDefault();
180
- this.mainInputHandlers.get(event.key).call(this, container);
181
- }
182
- }
183
- navigateSearchInput(event, container) {
184
- event.stopPropagation();
185
- if (this.searchInputHandlers.has(event.key)) {
186
- event.preventDefault();
187
- this.searchInputHandlers.get(event.key).call(this, container);
188
- }
189
- }
190
- navigateList(event, container) {
191
- event.stopPropagation();
192
- if (this.listHandlers.has(event.key)) {
193
- event.preventDefault();
194
- this.listHandlers.get(event.key).call(this, container);
195
- }
173
+ this._active = -1;
196
174
  }
197
175
  }
198
176
  //# sourceMappingURL=navigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../../src/components/combo/controllers/navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\n\nimport type IgcComboListComponent from '../combo-list.js';\nimport type { ComboHost, ComboRecord } from '../types.js';\nimport type { DataController } from './data.js';\n\nconst START_INDEX: Readonly<number> = -1;\n\nenum DIRECTION {\n Up = -1,\n Down = 1,\n}\n\nexport class NavigationController<T extends object>\n implements ReactiveController\n{\n protected hostHandlers = new Map(\n Object.entries({\n Escape: this.escape,\n })\n );\n\n protected mainInputHandlers = new Map(\n Object.entries({\n Escape: this.escape,\n ArrowUp: this.hide,\n ArrowDown: this.mainInputArrowDown,\n Tab: this.tab,\n Enter: this.enter,\n })\n );\n\n protected searchInputHandlers = new Map(\n Object.entries({\n Escape: this.escape,\n ArrowUp: this.escape,\n ArrowDown: this.inputArrowDown,\n Tab: this.inputArrowDown,\n })\n );\n\n protected listHandlers = new Map(\n Object.entries({\n ArrowDown: this.arrowDown,\n ArrowUp: this.arrowUp,\n ' ': this.space,\n Enter: this.enter,\n Escape: this.escape,\n Tab: this.tab,\n Home: this.home,\n End: this.end,\n })\n );\n\n protected _active = START_INDEX;\n\n public get input() {\n // @ts-expect-error protected access\n return this.host.singleSelect ? this.host._input : this.host._searchInput;\n }\n\n public get dataState() {\n return this.state.dataState;\n }\n\n public show() {\n // @ts-expect-error protected access\n this.host._show(true);\n }\n\n public hide() {\n // @ts-expect-error protected access\n this.host._hide(true);\n }\n\n public toggleSelect(index: number) {\n // @ts-expect-error protected access\n this.host.toggleSelect(index);\n }\n\n public select(index: number) {\n // @ts-expect-error protected access\n this.host.selectByIndex(index);\n }\n\n protected get currentItem() {\n const item = this.active;\n return item === START_INDEX ? START_INDEX : item;\n }\n\n protected get firstItem() {\n return this.dataState.findIndex((i: ComboRecord<T>) => i.header !== true);\n }\n\n protected get lastItem() {\n return this.dataState.length - 1;\n }\n\n protected scrollToActive(\n container: IgcComboListComponent,\n behavior: ScrollBehavior = 'auto'\n ) {\n container.element(this.active)?.scrollIntoView({\n block: 'center',\n behavior,\n });\n\n container.requestUpdate();\n }\n\n public get active() {\n return this._active;\n }\n\n public set active(node: number) {\n this._active = node;\n this.host.requestUpdate();\n }\n\n constructor(\n protected host: ComboHost<T>,\n protected state: DataController<T>\n ) {\n this.host.addController(this);\n }\n\n protected home(container: IgcComboListComponent) {\n this.active = this.firstItem;\n this.scrollToActive(container, 'smooth');\n }\n\n protected end(container: IgcComboListComponent) {\n this.active = this.lastItem;\n this.scrollToActive(container, 'smooth');\n }\n\n protected space() {\n if (this.active === START_INDEX) {\n return;\n }\n\n const item = this.dataState[this.active];\n\n if (!item.header) {\n this.toggleSelect(this.active);\n }\n }\n\n protected escape() {\n this.hide();\n this.host.focus();\n }\n\n protected enter() {\n if (this.active === START_INDEX) {\n return;\n }\n\n const item = this.dataState[this.active];\n\n if (!item.header && this.host.singleSelect) {\n this.select(this.active);\n }\n\n this.hide();\n requestAnimationFrame(() => this.input.select());\n this.host.focus();\n }\n\n protected inputArrowDown(container: IgcComboListComponent) {\n container.focus();\n this.arrowDown(container);\n }\n\n protected async mainInputArrowDown(container: IgcComboListComponent) {\n this.show();\n await container.updateComplete;\n\n if (this.host.singleSelect) {\n container.focus();\n this.arrowDown(container);\n }\n }\n\n protected tab() {\n this.hide();\n this.host.blur();\n }\n\n protected arrowDown(container: IgcComboListComponent) {\n this.getNextItem(DIRECTION.Down);\n this.scrollToActive(container);\n }\n\n protected arrowUp(container: IgcComboListComponent) {\n this.getNextItem(DIRECTION.Up);\n this.scrollToActive(container);\n }\n\n protected getNextItem(direction: DIRECTION) {\n const next = this.getNearestItem(this.currentItem, direction);\n\n if (next === -1) {\n if (this.active === this.firstItem) {\n this.input.focus();\n this.active = START_INDEX;\n }\n return;\n }\n\n this.active = next;\n }\n\n protected getNearestItem(startIndex: number, direction: number) {\n let index = startIndex;\n const items = this.dataState;\n\n while (items[index + direction]?.header) {\n index += direction;\n }\n\n index += direction;\n\n if (index >= 0 && index < items.length) {\n return index;\n }\n return -1;\n }\n\n public hostConnected() {}\n\n public hostDisconnected() {\n this.active = START_INDEX;\n }\n\n public navigateTo(item: T, container: IgcComboListComponent) {\n this.active = this.dataState.indexOf(item as ComboRecord<T>);\n this.scrollToActive(container, 'smooth');\n }\n\n public navigateHost(event: KeyboardEvent) {\n if (this.hostHandlers.has(event.key)) {\n event.preventDefault();\n this.hostHandlers.get(event.key)!.call(this);\n }\n }\n\n public navigateMainInput(\n event: KeyboardEvent,\n container: IgcComboListComponent\n ) {\n event.stopPropagation();\n\n if (this.mainInputHandlers.has(event.key)) {\n event.preventDefault();\n this.mainInputHandlers.get(event.key)!.call(this, container);\n }\n }\n\n public navigateSearchInput(\n event: KeyboardEvent,\n container: IgcComboListComponent\n ) {\n event.stopPropagation();\n\n if (this.searchInputHandlers.has(event.key)) {\n event.preventDefault();\n this.searchInputHandlers.get(event.key)!.call(this, container);\n }\n }\n\n public navigateList(event: KeyboardEvent, container: IgcComboListComponent) {\n event.stopPropagation();\n\n if (this.listHandlers.has(event.key)) {\n event.preventDefault();\n this.listHandlers.get(event.key)!.call(this, container);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../../src/components/combo/controllers/navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport type { Ref } from 'lit/directives/ref.js';\nimport {\n addKeybindings,\n altKey,\n arrowDown,\n arrowUp,\n endKey,\n enterKey,\n escapeKey,\n homeKey,\n type KeyBindingOptions,\n shiftKey,\n spaceBar,\n tabKey,\n} from '../../common/controllers/key-bindings.js';\nimport type IgcInputComponent from '../../input/input.js';\nimport type IgcComboListComponent from '../combo-list.js';\nimport type { ComboHost } from '../types.js';\nimport type { DataController } from './data.js';\n\ntype ComboNavigationConfig = {\n /** The primary input of the combo component. */\n input: Ref<IgcInputComponent>;\n /** The search input of the combo component. */\n search: Ref<IgcInputComponent>;\n /** The combo virtualized dropdown list. */\n list: Ref<IgcComboListComponent>;\n};\n\nexport class ComboNavigationController<T extends object> {\n private _active = -1;\n private _config: ComboNavigationConfig;\n\n public get active(): number {\n return this._active;\n }\n\n public set active(value: number) {\n this._active = value;\n this.combo.requestUpdate();\n }\n\n public get input(): IgcInputComponent {\n return this._config.input.value!;\n }\n\n public get searchInput(): IgcInputComponent {\n return this._config.search.value!;\n }\n\n public get list(): IgcComboListComponent {\n return this._config.list.value!;\n }\n\n protected get _firstItem(): number {\n return this.state.dataState.findIndex((rec) => !rec.header);\n }\n\n protected get _lastItem(): number {\n return this.state.dataState.length - 1;\n }\n\n protected async _hide(): Promise<boolean> {\n // @ts-expect-error: protected access\n return await this.combo._hide(true);\n }\n\n protected async _show(): Promise<boolean> {\n // @ts-expect-error: protected access\n return await this.combo._show(true);\n }\n\n protected _toggleSelection(index: number): void {\n // @ts-expect-error protected access\n this.combo.toggleSelect(index);\n }\n\n protected _select(index: number): void {\n // @ts-expect-error: protected access\n this.combo.selectByIndex(index);\n }\n\n private _onSpace = (): void => {\n if (this._active === -1) {\n return;\n }\n\n const item = this.state.dataState[this._active];\n if (!item.header) {\n this._toggleSelection(this._active);\n }\n };\n\n private _onEnter = async (): Promise<void> => {\n if (this._active === -1) {\n return;\n }\n\n const item = this.state.dataState[this._active];\n\n if (!item.header && this.combo.singleSelect) {\n this._select(this.active);\n }\n\n if (await this._hide()) {\n this.input.select();\n this.combo.focus();\n }\n };\n\n private _onTab = async ({ shiftKey }: KeyboardEvent): Promise<void> => {\n if (this.combo.open) {\n if (shiftKey) {\n // Move focus to the main input of the combo\n // before the Shift+Tab behavior kicks in.\n this.combo.focus();\n }\n await this._hide();\n }\n };\n\n private _onEscape = async (): Promise<void> => {\n if (!this.combo.open) {\n this.combo.clearSelection();\n }\n\n if (await this._hide()) {\n this.input.focus();\n }\n };\n\n private _onMainInputArrowDown = async (): Promise<void> => {\n if (!this.combo.open && !(await this._show())) {\n return;\n }\n\n if (this.combo.singleSelect) {\n this._onSearchArrowDown();\n }\n };\n\n private _onSearchArrowDown = (): void => {\n this.list.focus();\n this._onArrowDown();\n };\n\n private _onHome = (): void => {\n this.active = this._firstItem;\n this._scrollToActive();\n };\n\n private _onEnd = (): void => {\n this.active = this._lastItem;\n this._scrollToActive();\n };\n\n private _onArrowUp = (): void => {\n this._getNextItem(-1);\n this._scrollToActive();\n };\n\n private _onArrowDown = (): void => {\n this._getNextItem(1);\n this._scrollToActive();\n };\n\n private _scrollToActive(behavior?: ScrollBehavior): void {\n this.list.element(this.active)?.scrollIntoView({\n block: 'center',\n behavior: behavior ?? 'auto',\n });\n\n this.list.requestUpdate();\n }\n\n private _getNearestItem(start: number, delta: -1 | 1): number {\n let index = start;\n const items = this.state.dataState;\n\n while (items[index + delta]?.header) {\n index += delta;\n }\n\n index += delta;\n\n return index >= 0 && index < items.length ? index : -1;\n }\n\n private _getNextItem(delta: -1 | 1): void {\n const next = this._getNearestItem(this._active, delta);\n\n if (next === -1 && this.active === this._firstItem) {\n this.searchInput.checkVisibility() // Non single-select or disable-filtering combo configuration\n ? this.searchInput.focus() // Delegate to search input handlers\n : this._onEscape(); // Close dropdown and move focus back to main input\n }\n\n this.active = next;\n }\n\n constructor(\n protected combo: ComboHost<T>,\n protected state: DataController<T>,\n config: ComboNavigationConfig\n ) {\n this.combo.addController(this as ReactiveController);\n this._config = config;\n\n const bindingDefaults = {\n triggers: ['keydownRepeat'],\n } as KeyBindingOptions;\n\n const skip = (): boolean => this.combo.disabled;\n\n // Combo\n addKeybindings(this.combo, { skip, bindingDefaults })\n .set(tabKey, this._onTab, { preventDefault: false })\n .set([shiftKey, tabKey], this._onTab, {\n preventDefault: false,\n })\n .set(escapeKey, this._onEscape);\n\n // Main input\n addKeybindings(this.combo, {\n skip,\n ref: this._config.input,\n bindingDefaults,\n })\n .set(arrowUp, async () => await this._hide())\n .set([altKey, arrowDown], this._onMainInputArrowDown)\n .set(arrowDown, this._onMainInputArrowDown)\n .set(enterKey, this._onEnter);\n\n // Search input\n addKeybindings(this.combo, {\n skip,\n ref: this._config.search,\n bindingDefaults,\n })\n .set(arrowUp, this._onEscape)\n .set(arrowDown, this._onSearchArrowDown);\n\n // List\n addKeybindings(this.combo, {\n skip,\n ref: this._config.list,\n bindingDefaults,\n })\n .set(arrowUp, this._onArrowUp)\n .set(arrowDown, this._onArrowDown)\n .set(homeKey, this._onHome)\n .set(endKey, this._onEnd)\n .set(spaceBar, this._onSpace)\n .set(enterKey, this._onEnter);\n }\n\n public hostDisconnected(): void {\n this._active = -1;\n }\n}\n"]}
@@ -151,6 +151,10 @@ export default class IgcDateRangePickerComponent extends IgcDateRangePickerCompo
151
151
  private readonly _endSuffixes;
152
152
  private readonly _actions;
153
153
  private readonly _headerDateSlotItems;
154
+ /**
155
+ * The value of the picker
156
+ * @attr
157
+ */
154
158
  set value(value: DateRangeValue | string | null | undefined);
155
159
  get value(): DateRangeValue | null;
156
160
  /**