bromcom-ui 2.4.14 → 2.4.15

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 (74) hide show
  1. package/dist/bromcom-ui/bromcom-ui.esm.js +1 -1
  2. package/dist/bromcom-ui/{p-f2e73379.entry.js → p-027c7708.entry.js} +1 -1
  3. package/dist/bromcom-ui/{p-1b314bd5.entry.js → p-1cd97811.entry.js} +1 -1
  4. package/dist/bromcom-ui/{p-d4fd1619.entry.js → p-1fc98e5a.entry.js} +1 -1
  5. package/dist/bromcom-ui/{p-5f44988e.entry.js → p-2bd4c2ba.entry.js} +1 -1
  6. package/dist/bromcom-ui/{p-59c0459d.entry.js → p-3c1b8095.entry.js} +1 -1
  7. package/dist/bromcom-ui/p-3d40f6ce.js +1 -0
  8. package/dist/bromcom-ui/p-4054d5e3.js +1 -0
  9. package/dist/bromcom-ui/{p-6f9c4492.entry.js → p-7175652d.entry.js} +1 -1
  10. package/dist/bromcom-ui/p-9f47196d.js +1 -0
  11. package/dist/bromcom-ui/{p-3d463d45.entry.js → p-af83c581.entry.js} +1 -1
  12. package/dist/bromcom-ui/{p-89aab923.js → p-b5f0649f.js} +1 -1
  13. package/dist/bromcom-ui/p-c28be553.entry.js +1 -0
  14. package/dist/bromcom-ui/p-c6e58492.js +1 -0
  15. package/dist/bromcom-ui/{p-841a7311.entry.js → p-d4d5758f.entry.js} +1 -1
  16. package/dist/bromcom-ui/p-e42b15f4.js +1 -0
  17. package/dist/bromcom-ui/{p-ac4d2284.entry.js → p-ea79fd86.entry.js} +1 -1
  18. package/dist/cjs/{bcm-6463472f.js → bcm-5dcc129b.js} +6 -0
  19. package/dist/cjs/bcm-avatar_33.cjs.entry.js +5 -5
  20. package/dist/cjs/bcm-icon-2_2.cjs.entry.js +2 -2
  21. package/dist/cjs/bcm-list.cjs.entry.js +287 -218
  22. package/dist/cjs/bcm-popconfirm-box.cjs.entry.js +4 -4
  23. package/dist/cjs/bcm-popconfirm.cjs.entry.js +2 -2
  24. package/dist/cjs/bcm-popover-box.cjs.entry.js +4 -4
  25. package/dist/cjs/bcm-popover.cjs.entry.js +2 -2
  26. package/dist/cjs/bcm-search-2.cjs.entry.js +3 -3
  27. package/dist/cjs/bcm-stepper.cjs.entry.js +3 -3
  28. package/dist/cjs/bcm-tag-2.cjs.entry.js +2 -2
  29. package/dist/cjs/bromcom-ui.cjs.js +1 -1
  30. package/dist/cjs/{generate-2330fd84.js → generate-daf8998f.js} +10 -0
  31. package/dist/cjs/{label-template-317aee92.js → label-template-39ce726c.js} +2 -2
  32. package/dist/cjs/loader.cjs.js +1 -1
  33. package/dist/cjs/{popover-placement-e5e2f665.js → popover-placement-dacc8fc9.js} +5 -6
  34. package/dist/cjs/{stepper-states-3c341aa6.js → stepper-states-56f0862b.js} +1 -1
  35. package/dist/cjs/{string-helper-acab31b6.js → string-helper-991c7e7d.js} +1 -1
  36. package/dist/collection/components/organism/list/list-key-control.js +104 -0
  37. package/dist/collection/components/organism/list/list.css +10 -4
  38. package/dist/collection/components/organism/list/list.js +211 -210
  39. package/dist/collection/helper/generate.js +10 -0
  40. package/dist/collection/models/bcm.js +6 -0
  41. package/dist/collection/templates/list-item-template.js +6 -5
  42. package/dist/collection/utils/popover-placement.js +4 -5
  43. package/dist/esm/{bcm-0d5f0281.js → bcm-1571bb45.js} +6 -0
  44. package/dist/esm/bcm-avatar_33.entry.js +5 -5
  45. package/dist/esm/bcm-icon-2_2.entry.js +2 -2
  46. package/dist/esm/bcm-list.entry.js +287 -218
  47. package/dist/esm/bcm-popconfirm-box.entry.js +4 -4
  48. package/dist/esm/bcm-popconfirm.entry.js +2 -2
  49. package/dist/esm/bcm-popover-box.entry.js +4 -4
  50. package/dist/esm/bcm-popover.entry.js +2 -2
  51. package/dist/esm/bcm-search-2.entry.js +3 -3
  52. package/dist/esm/bcm-stepper.entry.js +3 -3
  53. package/dist/esm/bcm-tag-2.entry.js +2 -2
  54. package/dist/esm/bromcom-ui.js +1 -1
  55. package/dist/esm/{generate-2ee52515.js → generate-3a3196bb.js} +10 -0
  56. package/dist/esm/{label-template-dcde83fb.js → label-template-6989c6ba.js} +2 -2
  57. package/dist/esm/loader.js +1 -1
  58. package/dist/esm/{popover-placement-0b415c4e.js → popover-placement-38aa9b63.js} +5 -6
  59. package/dist/esm/{stepper-states-8d16f3b0.js → stepper-states-b821e069.js} +1 -1
  60. package/dist/esm/{string-helper-acc53dad.js → string-helper-cfa6df93.js} +1 -1
  61. package/dist/types/components/organism/list/list-key-control.d.ts +21 -0
  62. package/dist/types/components/organism/list/list.d.ts +26 -24
  63. package/dist/types/components.d.ts +5 -3
  64. package/dist/types/models/bcm-types.d.ts +1 -0
  65. package/dist/types/models/bcm.d.ts +5 -1
  66. package/dist/types/templates/list-item-template.d.ts +1 -0
  67. package/dist/types/templates/list-template.d.ts +1 -0
  68. package/package.json +2 -2
  69. package/dist/bromcom-ui/p-18d770ad.js +0 -1
  70. package/dist/bromcom-ui/p-3cbd2cb0.js +0 -1
  71. package/dist/bromcom-ui/p-8754d990.js +0 -1
  72. package/dist/bromcom-ui/p-93082523.js +0 -1
  73. package/dist/bromcom-ui/p-970c5b1c.entry.js +0 -1
  74. package/dist/bromcom-ui/p-dd76fa74.js +0 -1
@@ -0,0 +1,104 @@
1
+ export class ListKeyControl {
2
+ constructor(keyCode, element) {
3
+ this.keyCode = keyCode;
4
+ this.element = element;
5
+ }
6
+ getKeyCode() {
7
+ return this.keyCode;
8
+ }
9
+ isUp() {
10
+ return this.keyCode === 38;
11
+ }
12
+ isDown() {
13
+ return this.keyCode === 40;
14
+ }
15
+ isLeft() {
16
+ return this.keyCode === 37;
17
+ }
18
+ isRight() {
19
+ return this.keyCode === 39;
20
+ }
21
+ isEnter() {
22
+ return this.keyCode === 13;
23
+ }
24
+ isEscape() {
25
+ return this.keyCode === 27;
26
+ }
27
+ isSpace() {
28
+ return this.keyCode === 32;
29
+ }
30
+ getFocusedElement() {
31
+ return this.element.querySelectorAll('.bcm-list__item.focused')[0] || null;
32
+ }
33
+ getFirstElement() {
34
+ return this.element.querySelectorAll('.bcm-list__item')[0] || null;
35
+ }
36
+ getNextElement() {
37
+ var _a;
38
+ return ((_a = this.getFocusedElement()) === null || _a === void 0 ? void 0 : _a.nextElementSibling) || this.getFirstElement();
39
+ }
40
+ getPreviousElement() {
41
+ var _a;
42
+ return ((_a = this.getFocusedElement()) === null || _a === void 0 ? void 0 : _a.previousElementSibling) || this.getFirstElement();
43
+ }
44
+ getChildElement() {
45
+ var _a;
46
+ return ((_a = this.getFocusedElement()) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.bcm-list__item')[0]) || null;
47
+ }
48
+ getParentElement() {
49
+ var _a, _b;
50
+ return ((_b = (_a = this.getFocusedElement()) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement) || null;
51
+ }
52
+ setFocus(element) {
53
+ element.focus();
54
+ }
55
+ keydown() {
56
+ debugger;
57
+ const focusedElement = this.getFocusedElement();
58
+ const nextElement = this.getNextElement();
59
+ const previousElement = this.getPreviousElement();
60
+ const childElement = this.getChildElement();
61
+ const parentElement = this.getParentElement();
62
+ if (this.isUp()) {
63
+ if (focusedElement) {
64
+ if (previousElement) {
65
+ this.setFocus(previousElement);
66
+ }
67
+ else {
68
+ this.setFocus(parentElement);
69
+ }
70
+ }
71
+ else {
72
+ this.setFocus(this.getFirstElement());
73
+ }
74
+ }
75
+ else if (this.isDown()) {
76
+ if (focusedElement) {
77
+ if (nextElement) {
78
+ this.setFocus(nextElement);
79
+ }
80
+ else {
81
+ this.setFocus(this.getFirstElement());
82
+ }
83
+ }
84
+ else {
85
+ this.setFocus(this.getFirstElement());
86
+ }
87
+ }
88
+ else if (this.isLeft()) {
89
+ if (parentElement) {
90
+ this.setFocus(parentElement);
91
+ }
92
+ }
93
+ else if (this.isRight()) {
94
+ if (childElement) {
95
+ this.setFocus(childElement);
96
+ }
97
+ }
98
+ else if (this.isEnter()) {
99
+ if (focusedElement) {
100
+ console.log('seçilen element: ', focusedElement);
101
+ }
102
+ }
103
+ }
104
+ }
@@ -18562,14 +18562,14 @@
18562
18562
  .bcm-list__container.full-width {
18563
18563
  width: 100%;
18564
18564
  }
18565
- .bcm-list__container.bcm-list__type-select, .bcm-list__container.bcm-list__type-autocomplete {
18565
+ .bcm-list__container.bcm-list__type-linked-component, .bcm-list__container.bcm-list__type-select, .bcm-list__container.bcm-list__type-autocomplete {
18566
18566
  opacity: 0;
18567
18567
  visibility: hidden;
18568
18568
  position: absolute;
18569
18569
  top: 0;
18570
18570
  left: 0;
18571
18571
  }
18572
- .bcm-list__container.bcm-list__type-select.is-open, .bcm-list__container.bcm-list__type-autocomplete.is-open {
18572
+ .bcm-list__container.bcm-list__type-linked-component.is-open, .bcm-list__container.bcm-list__type-select.is-open, .bcm-list__container.bcm-list__type-autocomplete.is-open {
18573
18573
  opacity: 1;
18574
18574
  visibility: visible;
18575
18575
  z-index: 10800;
@@ -18691,13 +18691,18 @@
18691
18691
  .bcm-list__item {
18692
18692
  padding: 2px 8px;
18693
18693
  }
18694
+ .bcm-list__item.disabled {
18695
+ user-select: none;
18696
+ }
18694
18697
  .bcm-list__item:focus {
18695
18698
  outline: none;
18696
18699
  }
18697
- .bcm-list__item:focus .bcm-list__item-content {
18698
- color: var(--bcm-color-grey-8);
18700
+ .bcm-list__item:focus > .bcm-list__item-content {
18699
18701
  background-color: var(--bcm-color-prime-blue-1);
18700
18702
  }
18703
+ .bcm-list__item:focus > .bcm-list__item-content:not(.disabled) {
18704
+ color: var(--bcm-color-grey-8);
18705
+ }
18701
18706
  .bcm-list__item-content {
18702
18707
  display: flex;
18703
18708
  flex-direction: row;
@@ -18710,6 +18715,7 @@
18710
18715
  }
18711
18716
  .bcm-list__item-content.disabled {
18712
18717
  color: var(--bcm-color-grey-6);
18718
+ user-select: none;
18713
18719
  }
18714
18720
  .bcm-list__item-content.selected {
18715
18721
  color: var(--bcm-color-prime-blue-6);
@@ -18,12 +18,13 @@ import { ListTemplate } from '../../../templates/list-template';
18
18
  import { getPlacement, setPosition } from '../../../utils/popover-placement';
19
19
  import { delay, pluralize } from '../../../utils/utils';
20
20
  import listState from '../states/bcm-list2.states';
21
+ import { ListKeyControl } from './list-key-control';
21
22
  export class BcmList {
22
23
  constructor() {
23
24
  this.debounce = null;
24
25
  this._id = Generate.UID();
25
26
  // All types
26
- this.type = 'listbox';
27
+ this.type = Bcm.ListType.listbox;
27
28
  this.treeview = false;
28
29
  this.checkboxes = false;
29
30
  this.searchable = false;
@@ -79,32 +80,13 @@ export class BcmList {
79
80
  this.data = [];
80
81
  this.debounceHandler = Generate.debounceInput(() => this.listenResize(), 300, false);
81
82
  }
82
- async componentDidLoad() {
83
- await this.initState();
84
- if (this.type == 'select' || this.type == 'autocomplete') {
85
- const list = this.el.querySelector(`#bcm-list-${this._id}`);
86
- if (list) {
87
- document.body.appendChild(list);
88
- }
89
- }
90
- }
91
83
  connectedCallback() {
92
84
  if (this.height != '256px') {
93
85
  this.limit = Math.floor(+(this.height.replace('px', '')) / 32);
94
86
  this.searchResultLimit = this.limit;
95
- // this.searchGetParents = 20
96
87
  this.markForCheck();
97
88
  }
98
89
  }
99
- disconnectedCallback() {
100
- listState.removeState(this._id);
101
- if (this.type == 'select' || this.type == 'autocomplete') {
102
- const list = document.querySelector(`#bcm-list-${this._id}`);
103
- if (list) {
104
- document.body.removeChild(list);
105
- }
106
- }
107
- }
108
90
  componentWillRender() {
109
91
  this.calculateLocation();
110
92
  this.updateOptions();
@@ -117,12 +99,22 @@ export class BcmList {
117
99
  this.tagControl();
118
100
  }
119
101
  }
120
- updateOptions() {
121
- listState.updateOptions(this._id, this);
102
+ async componentDidLoad() {
103
+ await this.initState();
104
+ if (this.type == 'select' || this.type == 'autocomplete' || this.linkedComponent) {
105
+ const list = this.el.querySelector(`#bcm-list-${this._id}`);
106
+ if (list) {
107
+ document.body.appendChild(list);
108
+ }
109
+ }
122
110
  }
123
- handleChange(e) {
124
- if (e.target.id == `bcm-list-input-tag-container-${this._id}-autocomplete-input`) {
125
- e.stopImmediatePropagation();
111
+ disconnectedCallback() {
112
+ listState.removeState(this._id);
113
+ if (this.type == 'select' || this.type == 'autocomplete' || this.linkedComponent) {
114
+ const list = document.querySelector(`#bcm-list-${this._id}`);
115
+ if (list) {
116
+ document.body.removeChild(list);
117
+ }
126
118
  }
127
119
  }
128
120
  handleValueChange(newVal, oldVal) {
@@ -140,9 +132,6 @@ export class BcmList {
140
132
  this.handleIndeterminate(this.value.length, this.totalData);
141
133
  }
142
134
  }
143
- handleIndeterminate(checkeds, total) {
144
- this.selectAllItem = Object.assign(Object.assign({}, this.selectAllItem), { indeterminate: this.checkboxes && checkeds > 0 ? checkeds === total ? 'check' : 'indeterminate' : 'uncheck', checked: this.checkboxes && checkeds > 0 ? checkeds === total ? true : false : false });
145
- }
146
135
  handleOtherSelected(newValue) {
147
136
  var _a;
148
137
  const tagContent = (_a = document.getElementById(`bcm-list-input-tag-${this._id}-other-tag`)) === null || _a === void 0 ? void 0 : _a.querySelector(".bcm-tag__content");
@@ -155,14 +144,28 @@ export class BcmList {
155
144
  }
156
145
  }
157
146
  }
147
+ async handleOpen() {
148
+ if (this.isOpen) {
149
+ this.onSelectSearch();
150
+ }
151
+ else {
152
+ this.unSelectOther();
153
+ }
154
+ }
155
+ async dataChanged(newValue, oldValue) {
156
+ if (!Validators.compareTwoArrayIsSame(newValue, oldValue)) {
157
+ await this.initState();
158
+ }
159
+ }
160
+ handleChange(e) {
161
+ if (e.target.id == `bcm-list-input-tag-container-${this._id}-autocomplete-input`) {
162
+ e.stopImmediatePropagation();
163
+ }
164
+ }
158
165
  handleResize() {
159
166
  this.calculateLocation();
160
167
  this.debounceHandler();
161
168
  }
162
- listenResize() {
163
- this.tagControl();
164
- this.calculateLocation();
165
- }
166
169
  handleClick(event) {
167
170
  if (this.disabled)
168
171
  return;
@@ -207,37 +210,6 @@ export class BcmList {
207
210
  }
208
211
  }
209
212
  }
210
- async handleOpen() {
211
- if (this.isOpen) {
212
- this.calculateLocation();
213
- this.onSelectSearch();
214
- }
215
- else {
216
- this.unSelectOther();
217
- }
218
- }
219
- unSelectOther() {
220
- this.onClearSearch();
221
- this.isSelectedOther = false;
222
- this.returnFilterData = {};
223
- this.isOpen = false;
224
- }
225
- async onClearSearch() {
226
- const searchInput = document.getElementById(`bcm-list-${this._id}-search`);
227
- if (searchInput) {
228
- await searchInput.handleClear();
229
- }
230
- return Promise.resolve();
231
- }
232
- onSelectSearch() {
233
- const searchInput = document.getElementById(`bcm-list-${this._id}-search`);
234
- if (searchInput) {
235
- setTimeout(() => {
236
- searchInput.onBcmFocus();
237
- searchInput.onBcmSelect();
238
- }, 100);
239
- }
240
- }
241
213
  async onDismiss(event) {
242
214
  const { itemObject } = event.detail;
243
215
  const isOtherTag = Array.isArray(itemObject);
@@ -278,23 +250,6 @@ export class BcmList {
278
250
  this.onSelectSearch();
279
251
  this.markForCheck();
280
252
  }
281
- otherTagIds() {
282
- const otherTag = document.querySelector(`#bcm-list-input-tag-${this._id}-other-tag`);
283
- if (otherTag) {
284
- return otherTag.itemObject;
285
- }
286
- }
287
- async filterOtherList(itemObject) {
288
- const ids = itemObject.map(item => item.id);
289
- const checklist = (await this.getCheckedList()).nestedResult;
290
- const filter = Generate.convertIdsToNestedData(ids, checklist);
291
- this.returnFilterData = await listState.filterData(this._id, filter, null, true);
292
- this.searchFound = ids.length || 0;
293
- this.limit = 500;
294
- this.searchGetParents = null;
295
- await delay(1000);
296
- this.markForCheck();
297
- }
298
253
  bcmOnSearchClear(event) {
299
254
  var _a, _b;
300
255
  if (this.type == 'autocomplete') {
@@ -335,9 +290,43 @@ export class BcmList {
335
290
  this.markForCheck();
336
291
  }
337
292
  }
338
- async dataChanged(newValue, oldValue) {
339
- if (!Validators.compareTwoArrayIsSame(newValue, oldValue)) {
340
- await this.initState();
293
+ //keyboard navigation
294
+ handleKeyDown(ev) {
295
+ const keycode = ev.keyCode || ev.which;
296
+ if (keycode === Bcm.KeyCode.escape) {
297
+ if (this.isOpen) {
298
+ this.isOpen = false;
299
+ ev.preventDefault();
300
+ ev.stopPropagation();
301
+ ev.stopImmediatePropagation();
302
+ }
303
+ }
304
+ if (this.keyControl) {
305
+ const keyboard = new ListKeyControl(keycode, this.el);
306
+ keyboard.keydown();
307
+ }
308
+ }
309
+ handleKeyUp(ev) {
310
+ if (this.keyControl) {
311
+ const focusedList = Generate.findEventPath(ev, this.el);
312
+ if (focusedList) {
313
+ const list = document.getElementById(`bcm-list-${this._id}`);
314
+ if (list) {
315
+ const items = list.querySelectorAll('.bcm-list__item.focused');
316
+ if (items.length > 0) {
317
+ const main = list.querySelector('main');
318
+ const itemHeight = items[0].offsetHeight;
319
+ const listHeight = main.offsetHeight;
320
+ const itemTop = items[0].offsetTop;
321
+ if (itemTop > listHeight) {
322
+ main.scrollTop = itemTop - (listHeight / 2) + (itemHeight / 2);
323
+ }
324
+ if (itemTop < listHeight) {
325
+ main.scrollTop = itemTop - (listHeight / 2) - (itemHeight / 2);
326
+ }
327
+ }
328
+ }
329
+ }
341
330
  }
342
331
  }
343
332
  async getCheckedList() {
@@ -352,7 +341,7 @@ export class BcmList {
352
341
  async addChecked(ids = [], save = false) {
353
342
  if (ids && ids.length > 0) {
354
343
  if (!save) {
355
- this.setClear();
344
+ await this.setClear();
356
345
  }
357
346
  listState.addChecked(this._id, ids);
358
347
  this.value = (await this.getCheckedList()).checkedList;
@@ -388,6 +377,62 @@ export class BcmList {
388
377
  await delay(10);
389
378
  return Promise.resolve();
390
379
  }
380
+ async show() {
381
+ this.isOpen = true;
382
+ return Promise.resolve();
383
+ }
384
+ async hide() {
385
+ this.isOpen = false;
386
+ return Promise.resolve();
387
+ }
388
+ updateOptions() {
389
+ listState.updateOptions(this._id, this);
390
+ }
391
+ handleIndeterminate(checkeds, total) {
392
+ this.selectAllItem = Object.assign(Object.assign({}, this.selectAllItem), { indeterminate: this.checkboxes && checkeds > 0 ? checkeds === total ? 'check' : 'indeterminate' : 'uncheck', checked: this.checkboxes && checkeds > 0 ? checkeds === total ? true : false : false });
393
+ }
394
+ listenResize() {
395
+ this.tagControl();
396
+ this.calculateLocation();
397
+ }
398
+ async unSelectOther() {
399
+ await this.onClearSearch();
400
+ this.isSelectedOther = false;
401
+ this.returnFilterData = {};
402
+ this.isOpen = false;
403
+ }
404
+ async onClearSearch() {
405
+ const searchInput = document.getElementById(`bcm-list-${this._id}-search`);
406
+ if (searchInput) {
407
+ await searchInput.handleClear();
408
+ }
409
+ return Promise.resolve();
410
+ }
411
+ async onSelectSearch() {
412
+ const searchInput = document.getElementById(`bcm-list-${this._id}-search`);
413
+ if (searchInput) {
414
+ await delay(10);
415
+ searchInput.onBcmFocus();
416
+ searchInput.onBcmSelect();
417
+ }
418
+ }
419
+ otherTagIds() {
420
+ const otherTag = document.querySelector(`#bcm-list-input-tag-${this._id}-other-tag`);
421
+ if (otherTag) {
422
+ return otherTag.itemObject;
423
+ }
424
+ }
425
+ async filterOtherList(itemObject) {
426
+ const ids = itemObject.map(item => item.id);
427
+ const checklist = (await this.getCheckedList()).nestedResult;
428
+ const filter = Generate.convertIdsToNestedData(ids, checklist);
429
+ this.returnFilterData = await listState.filterData(this._id, filter, null, true);
430
+ this.searchFound = ids.length || 0;
431
+ this.limit = 500;
432
+ this.searchGetParents = null;
433
+ await delay(1000);
434
+ this.markForCheck();
435
+ }
391
436
  async initState() {
392
437
  await listState.setValue({
393
438
  id: this._id,
@@ -426,24 +471,21 @@ export class BcmList {
426
471
  listState.openGroup(this._id, parentId);
427
472
  this.markForCheck();
428
473
  }
429
- async checkedItem(itemId) {
430
- const isCheckSelectAll = itemId === 'select-all';
431
- if (!isCheckSelectAll) {
432
- listState.checkedItem(this._id, itemId);
433
- }
434
- else {
435
- listState.selectAll(this._id, !this.selectAllItem.checked);
474
+ focusItem(e) {
475
+ if (e.target.classList.contains('bcm-list__item')) {
476
+ const item = e.target;
477
+ const list = document.getElementById(`bcm-list-${this._id}`);
478
+ if (list) {
479
+ const items = list.querySelectorAll('.bcm-list__item');
480
+ if (items.length > 0) {
481
+ const selectedItem = list.querySelector('.bcm-list__item.focused');
482
+ if (selectedItem) {
483
+ selectedItem.classList.remove('focused');
484
+ }
485
+ item.classList.add('focused');
486
+ }
487
+ }
436
488
  }
437
- this.value = (await this.getCheckedList()).checkedList;
438
- this.changeVisibleCheckeds();
439
- this.markForCheck();
440
- }
441
- changeVisibleCheckeds() {
442
- const { visibledItems } = this.returnFilterData;
443
- this.returnFilterData = {
444
- visibledItems,
445
- checkedItems: (visibledItems && visibledItems.filter(item => item.checked)) || []
446
- };
447
489
  }
448
490
  async selectedItem(itemId) {
449
491
  this.value = listState.selectedItem(this._id, itemId);
@@ -463,6 +505,25 @@ export class BcmList {
463
505
  }
464
506
  return Promise.resolve(this.value);
465
507
  }
508
+ async checkedItem(itemId) {
509
+ const isCheckSelectAll = itemId === 'select-all';
510
+ if (!isCheckSelectAll) {
511
+ listState.checkedItem(this._id, itemId);
512
+ }
513
+ else {
514
+ listState.selectAll(this._id, !this.selectAllItem.checked);
515
+ }
516
+ this.value = (await this.getCheckedList()).checkedList;
517
+ this.changeVisibleCheckeds();
518
+ this.markForCheck();
519
+ }
520
+ changeVisibleCheckeds() {
521
+ const { visibledItems } = this.returnFilterData;
522
+ this.returnFilterData = {
523
+ visibledItems,
524
+ checkedItems: (visibledItems && visibledItems.filter(item => item.checked)) || []
525
+ };
526
+ }
466
527
  getAutoCompleteInput() {
467
528
  return document.getElementById(`bcm-list-input-tag-container-${this._id}-autocomplete-input`);
468
529
  }
@@ -485,7 +546,14 @@ export class BcmList {
485
546
  if (this.isOpen) {
486
547
  var placement = this.placement;
487
548
  const list = document.getElementById(`bcm-list-${this._id}`);
488
- const targetElement = document.getElementById(`bcm-list-input-${this._id}`);
549
+ // if (this.linkedComponent) {
550
+ // const linked = document.getElementById(this.linkedComponent)
551
+ // if (linked) {
552
+ // console.dir(linked)
553
+ // }
554
+ // }
555
+ const targetElementId = this.linkedComponent ? this.linkedComponent : `bcm-list-input-${this._id}`;
556
+ const targetElement = document.getElementById(targetElementId);
489
557
  if (list && targetElement) {
490
558
  getPlacement(list, targetElement, placement, (place) => placement = place);
491
559
  const pos = setPosition(placement, targetElement);
@@ -612,110 +680,6 @@ export class BcmList {
612
680
  }
613
681
  }
614
682
  }
615
- //keyboard navigation
616
- handleKeyDown(ev) {
617
- //esc isopen false
618
- const keycode = ev.keyCode || ev.which;
619
- if (keycode === Bcm.KeyCode.escape) {
620
- if (this.isOpen) {
621
- this.isOpen = false;
622
- ev.preventDefault();
623
- ev.stopPropagation();
624
- ev.stopImmediatePropagation();
625
- }
626
- }
627
- if (this.keyControl) {
628
- const focusedList = Generate.findEventPath(ev, this.el);
629
- if (focusedList) {
630
- const keyCode = ev.keyCode || ev.which;
631
- const keyList = [
632
- [Bcm.KeyCode.up],
633
- [Bcm.KeyCode.down],
634
- [Bcm.KeyCode.enter],
635
- [Bcm.KeyCode.space],
636
- [Bcm.KeyCode.left],
637
- [Bcm.KeyCode.right]
638
- ];
639
- if (keyList.some(key => key.includes(keyCode))) {
640
- ev.preventDefault();
641
- ev.stopPropagation();
642
- ev.stopImmediatePropagation();
643
- if (this.type === 'select' && !this.isOpen) {
644
- if (keycode === Bcm.KeyCode.enter || keycode === Bcm.KeyCode.space) {
645
- this.isOpen = true;
646
- }
647
- }
648
- else {
649
- const list = document.getElementById(`bcm-list-${this._id}`);
650
- if (list) {
651
- const items = list.querySelectorAll('.bcm-list__item');
652
- if (items.length > 0) {
653
- const selectedItem = list.querySelector('.bcm-list__item.focused');
654
- if (selectedItem) {
655
- const selectedIndex = Array.prototype.indexOf.call(items, selectedItem);
656
- if (ev.key === 'ArrowDown') {
657
- if (selectedIndex < items.length - 1) {
658
- items[selectedIndex + 1].focus();
659
- }
660
- }
661
- else if (ev.key === 'ArrowUp') {
662
- if (selectedIndex > 0) {
663
- items[selectedIndex - 1].focus();
664
- }
665
- }
666
- else if (ev.key === 'Enter') {
667
- this.selectedItem(selectedItem.id);
668
- }
669
- }
670
- else {
671
- items[0].focus();
672
- }
673
- }
674
- }
675
- }
676
- }
677
- }
678
- }
679
- }
680
- handleKeyUp(ev) {
681
- if (this.keyControl) {
682
- const focusedList = Generate.findEventPath(ev, this.el);
683
- if (focusedList) {
684
- const list = document.getElementById(`bcm-list-${this._id}`);
685
- if (list) {
686
- const items = list.querySelectorAll('.bcm-list__item.focused');
687
- if (items.length > 0) {
688
- const main = list.querySelector('main');
689
- const itemHeight = items[0].offsetHeight;
690
- const listHeight = main.offsetHeight;
691
- const itemTop = items[0].offsetTop;
692
- if (itemTop > listHeight) {
693
- main.scrollTop = itemTop - (listHeight / 2) + (itemHeight / 2);
694
- }
695
- if (itemTop < listHeight) {
696
- main.scrollTop = itemTop - (listHeight / 2) - (itemHeight / 2);
697
- }
698
- }
699
- }
700
- }
701
- }
702
- }
703
- focusItem(e) {
704
- if (e.target.classList.contains('bcm-list__item')) {
705
- const item = e.target;
706
- const list = document.getElementById(`bcm-list-${this._id}`);
707
- if (list) {
708
- const items = list.querySelectorAll('.bcm-list__item');
709
- if (items.length > 0) {
710
- const selectedItem = list.querySelector('.bcm-list__item.focused');
711
- if (selectedItem) {
712
- selectedItem.classList.remove('focused');
713
- }
714
- item.classList.add('focused');
715
- }
716
- }
717
- }
718
- }
719
683
  render() {
720
684
  const { checkboxes, treeview, label, size, disabled, readonly, required, hidden, fullWidth, searchable } = this.getOptions();
721
685
  const hostClasses = cs('bcm-list', `bcm-list__size-${size}`, size === 'large' ? 'size-3' : 'size-2', {
@@ -725,7 +689,7 @@ export class BcmList {
725
689
  readonly,
726
690
  disabled
727
691
  });
728
- const bcmListContainer = cs('bcm-list__container', `bcm-list__type-${this.type}`, {
692
+ const bcmListContainer = cs('bcm-list__container', this.linkedComponent ? 'bcm-list__type-linked-component' : `bcm-list__type-${this.type}`, {
729
693
  'is-open': this.isOpen,
730
694
  'error': this.captionType == Bcm.Status.error,
731
695
  'full-width': fullWidth,
@@ -780,9 +744,14 @@ export class BcmList {
780
744
  "type": "string",
781
745
  "mutable": false,
782
746
  "complexType": {
783
- "original": "'listbox' | 'select' | 'autocomplete'",
747
+ "original": "ListTypes",
784
748
  "resolved": "\"autocomplete\" | \"listbox\" | \"select\"",
785
- "references": {}
749
+ "references": {
750
+ "ListTypes": {
751
+ "location": "import",
752
+ "path": "../../../models/bcm-types"
753
+ }
754
+ }
786
755
  },
787
756
  "required": false,
788
757
  "optional": false,
@@ -792,7 +761,7 @@ export class BcmList {
792
761
  },
793
762
  "attribute": "type",
794
763
  "reflect": false,
795
- "defaultValue": "'listbox'"
764
+ "defaultValue": "Bcm.ListType.listbox"
796
765
  },
797
766
  "treeview": {
798
767
  "type": "boolean",
@@ -1601,6 +1570,38 @@ export class BcmList {
1601
1570
  "text": "",
1602
1571
  "tags": []
1603
1572
  }
1573
+ },
1574
+ "show": {
1575
+ "complexType": {
1576
+ "signature": "() => Promise<void>",
1577
+ "parameters": [],
1578
+ "references": {
1579
+ "Promise": {
1580
+ "location": "global"
1581
+ }
1582
+ },
1583
+ "return": "Promise<void>"
1584
+ },
1585
+ "docs": {
1586
+ "text": "",
1587
+ "tags": []
1588
+ }
1589
+ },
1590
+ "hide": {
1591
+ "complexType": {
1592
+ "signature": "() => Promise<void>",
1593
+ "parameters": [],
1594
+ "references": {
1595
+ "Promise": {
1596
+ "location": "global"
1597
+ }
1598
+ },
1599
+ "return": "Promise<void>"
1600
+ },
1601
+ "docs": {
1602
+ "text": "",
1603
+ "tags": []
1604
+ }
1604
1605
  }
1605
1606
  }; }
1606
1607
  static get elementRef() { return "el"; }