@refinitiv-ui/elements 7.10.10 → 7.11.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,19 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [7.11.1](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@7.11.0...@refinitiv-ui/elements@7.11.1) (2024-05-20)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **chart:** fix gridlines colors ([#1161](https://github.com/Refinitiv/refinitiv-ui/issues/1161)) ([b59da6d](https://github.com/Refinitiv/refinitiv-ui/commit/b59da6d962d1e8026391df53c76c0fb1549738ca))
11
+ - **datetime-picker:** fix changing format doesn't sync to input ([#1164](https://github.com/Refinitiv/refinitiv-ui/issues/1164)) ([f63decc](https://github.com/Refinitiv/refinitiv-ui/commit/f63decc53ba9941bdc26b8ea432ca62525135111))
12
+
13
+ # [7.11.0](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@7.10.10...@refinitiv-ui/elements@7.11.0) (2024-05-07)
14
+
15
+ ### Features
16
+
17
+ - **tree, tree-select:** introducing new Tree Manager APIs and Tree Node ([#1149](https://github.com/Refinitiv/refinitiv-ui/issues/1149)) ([1dbe3f5](https://github.com/Refinitiv/refinitiv-ui/commit/1dbe3f570f4cf45cc9b3407426aa94a48cc03033)), closes [#1136](https://github.com/Refinitiv/refinitiv-ui/issues/1136) [#1134](https://github.com/Refinitiv/refinitiv-ui/issues/1134) [#1133](https://github.com/Refinitiv/refinitiv-ui/issues/1133) [#1145](https://github.com/Refinitiv/refinitiv-ui/issues/1145) [#1135](https://github.com/Refinitiv/refinitiv-ui/issues/1135)
18
+
6
19
  ## [7.10.10](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@7.10.9...@refinitiv-ui/elements@7.10.10) (2024-04-30)
7
20
 
8
21
  ### Bug Fixes
@@ -112,6 +112,12 @@ export declare class Chart extends BasicElement {
112
112
  * @returns {void}
113
113
  */
114
114
  protected beforeUpdate: (chart: ChartJS) => void;
115
+ /**
116
+ * Set grid color in beforeUpdate event from Chartjs
117
+ * @param chart Chart.js instance
118
+ * @returns {void}
119
+ */
120
+ private decorateGridColors;
115
121
  /**
116
122
  * Inject theme color into each datasets
117
123
  * @param chart Chart.js instance
@@ -39,6 +39,7 @@ let Chart = class Chart extends BasicElement {
39
39
  // set global config again in case the CSS font isn't loaded when updating the chart
40
40
  this.setGlobalConfig();
41
41
  this.decorateColors(chart);
42
+ this.decorateGridColors(chart);
42
43
  };
43
44
  /**
44
45
  * Inject theme color into each datasets
@@ -395,12 +396,6 @@ let Chart = class Chart extends BasicElement {
395
396
  ChartJS.defaults.font.family = cssStyle.getPropertyValue('font-family');
396
397
  ChartJS.defaults.font.size = Number(cssStyle.getPropertyValue('font-size').replace('px', ''));
397
398
  ChartJS.defaults.font.style = cssStyle.getPropertyValue('font-style');
398
- // Set global grid color
399
- ChartJS.defaults.scale.grid.color = (line) => {
400
- return line.index === 0
401
- ? this.getComputedVariable('--zero-line-color', 'transparent')
402
- : this.getComputedVariable('--grid-line-color', 'transparent');
403
- };
404
399
  if (ChartJS.defaults.scales.radialLinear) {
405
400
  ChartJS.defaults.scales.radialLinear.ticks.showLabelBackdrop = false;
406
401
  }
@@ -425,6 +420,27 @@ let Chart = class Chart extends BasicElement {
425
420
  const result = parseFloat(cssComputeVar);
426
421
  return isNaN(result) ? undefined : result;
427
422
  }
423
+ /**
424
+ * Set grid color in beforeUpdate event from Chartjs
425
+ * @param chart Chart.js instance
426
+ * @returns {void}
427
+ */
428
+ decorateGridColors(chart) {
429
+ for (const scale of Object.keys(chart.scales)) {
430
+ const axis = chart.options?.scales?.[scale];
431
+ const userAxis = this.config?.options?.scales?.[scale];
432
+ const userGridColor = userAxis?.grid?.color;
433
+ const userBorderColor = userAxis?.border?.color;
434
+ // Change grid color if the color is the default value of `rgba(0,0,0,0.1)`
435
+ if (axis && userGridColor === 'rgba(0,0,0,0.1)') {
436
+ axis.grid.color = this.getComputedVariable('--grid-line-color', 'transparent');
437
+ }
438
+ // Change border color if the color is the default value of `rgba(0,0,0,0.1)`
439
+ if (axis && userBorderColor === 'rgba(0,0,0,0.1)') {
440
+ axis.border.color = this.getComputedVariable('--zero-line-color', 'transparent');
441
+ }
442
+ }
443
+ }
428
444
  /**
429
445
  * Merges all the different layers of the config.
430
446
  * @returns {void}
@@ -77,7 +77,7 @@
77
77
  "name": "filter",
78
78
  "description": "Custom filter for static data\nSet this to null when data is filtered externally, eg XHR",
79
79
  "type": "ComboBoxFilter<T> | null",
80
- "default": "\"defaultFilter<T>(this)\""
80
+ "default": "\"createDefaultFilter<T>(this)\""
81
81
  },
82
82
  {
83
83
  "name": "renderer",
@@ -10,7 +10,7 @@ Combines a popup with a filterable selection list
10
10
  | `data` | | `ComboBoxData<T>` | [] | Data array to be displayed |
11
11
  | `disabled` | `disabled` | `boolean` | false | Set disabled state |
12
12
  | `error` | `error` | `boolean` | false | Set error state |
13
- | `filter` | | `ComboBoxFilter<T> \| null` | "defaultFilter<T>(this)" | Custom filter for static data<br />Set this to null when data is filtered externally, eg XHR |
13
+ | `filter` | | `ComboBoxFilter<T> \| null` | "createDefaultFilter<T>(this)" | Custom filter for static data<br />Set this to null when data is filtered externally, eg XHR |
14
14
  | `freeText` | `free-text` | `boolean` | false | Allow to enter any value |
15
15
  | `label (readonly)` | | `string` | "" | Label of selected value |
16
16
  | `multiple` | `multiple` | `boolean` | false | Multiple selection mode |
@@ -1,4 +1,4 @@
1
- import type { DataItem } from '@refinitiv-ui/utils/collection.js';
1
+ import { DataItem } from '@refinitiv-ui/utils/collection.js';
2
2
  import type { ItemData } from '../../item';
3
3
  import type { ComboBox } from '../index';
4
4
  import type { ComboBoxFilter } from './types';
@@ -7,4 +7,4 @@ import type { ComboBoxFilter } from './types';
7
7
  * @param el ComboBox instance to filter
8
8
  * @returns Filter accepting an item
9
9
  */
10
- export declare const defaultFilter: <T extends DataItem = ItemData>(el: ComboBox<T>) => ComboBoxFilter<T>;
10
+ export declare const createDefaultFilter: <T extends DataItem = ItemData>(el: ComboBox<T>) => ComboBoxFilter<T>;
@@ -1,10 +1,11 @@
1
1
  import escapeStringRegexp from 'escape-string-regexp';
2
+ import { CollectionComposer } from '@refinitiv-ui/utils/collection.js';
2
3
  /**
3
4
  * Default filter used by combo box
4
5
  * @param el ComboBox instance to filter
5
6
  * @returns Filter accepting an item
6
7
  */
7
- export const defaultFilter = (el) => {
8
+ export const createDefaultFilter = (el) => {
8
9
  // reference query string for validating queryRegExp cache state
9
10
  let query = '';
10
11
  // cache RegExp
@@ -20,9 +21,17 @@ export const defaultFilter = (el) => {
20
21
  return queryRegExp;
21
22
  };
22
23
  // return scoped custom filter
23
- return (item) => {
24
+ return (item, context) => {
25
+ let label;
26
+ if (context) {
27
+ const composer = context instanceof CollectionComposer ? context : context.composer;
28
+ label = composer.getItemPropertyValue(item, 'label');
29
+ }
30
+ else {
31
+ label = item.label;
32
+ }
24
33
  const regex = getRegularExpressionOfQuery();
25
- const result = regex.test(item.label);
34
+ const result = regex.test(label);
26
35
  // this example uses global scope, so the index needs resetting
27
36
  regex.lastIndex = 0;
28
37
  return result;
@@ -1,5 +1,6 @@
1
- import type { DataItem } from '@refinitiv-ui/utils/collection.js';
1
+ import type { CollectionComposer, DataItem } from '@refinitiv-ui/utils/collection.js';
2
2
  import type { ItemData } from '../../item';
3
+ import type { TreeManager } from '../../tree';
3
4
  /**
4
5
  * Predicate callback
5
6
  * Matches item against filter function
@@ -7,5 +8,5 @@ import type { ItemData } from '../../item';
7
8
  * @param item Item to filter
8
9
  * @return Does item match filter
9
10
  */
10
- export type ComboBoxFilter<T extends DataItem = ItemData> = (item: T) => boolean;
11
+ export type ComboBoxFilter<T extends DataItem = ItemData> = (item: T, context?: CollectionComposer<T> | TreeManager<T>) => boolean;
11
12
  export type ComboBoxData<T extends DataItem = ItemData> = T[] | Promise<T[]>;
@@ -16,7 +16,7 @@ import '../list/index.js';
16
16
  import '../overlay/index.js';
17
17
  import { registerOverflowTooltip } from '../tooltip/index.js';
18
18
  import { VERSION } from '../version.js';
19
- import { defaultFilter } from './helpers/filter.js';
19
+ import { createDefaultFilter } from './helpers/filter.js';
20
20
  import { CustomKeyboardEvent } from './helpers/keyboard-event.js';
21
21
  import { ComboBoxRenderer, createComboBoxRenderer } from './helpers/renderer.js';
22
22
  export { ComboBoxRenderer, createComboBoxRenderer };
@@ -53,7 +53,7 @@ let ComboBox = class ComboBox extends FormFieldElement {
53
53
  * Set this to null when data is filtered externally, eg XHR
54
54
  * @type {ComboBoxFilter<T> | null}
55
55
  */
56
- this.filter = defaultFilter(this);
56
+ this.filter = createDefaultFilter(this);
57
57
  /**
58
58
  * Renderer used to render list item elements
59
59
  */
@@ -683,6 +683,7 @@ let ComboBox = class ComboBox extends FormFieldElement {
683
683
  let groupHeaderItem = null;
684
684
  this.queryItems((item, composer) => {
685
685
  // do not filter hidden items
686
+ // TODO: blocking `hidden` update via TreeManager/TreeNode of this component
686
687
  if (item.hidden) {
687
688
  return false;
688
689
  }
@@ -692,7 +693,7 @@ let ComboBox = class ComboBox extends FormFieldElement {
692
693
  groupHeaderItem = item;
693
694
  }
694
695
  else {
695
- result = filter(item);
696
+ result = filter(item, composer);
696
697
  }
697
698
  composer.setItemPropertyValue(item, 'hidden', !result);
698
699
  composer.updateItemTimestamp(item);
@@ -358,7 +358,9 @@ let DatetimePicker = class DatetimePicker extends FormFieldElement {
358
358
  if (this.opened && !this.canOpenPopup) {
359
359
  this.opened = false; /* this cannot be nor stopped nor listened */
360
360
  }
361
- if (changedProperties.has('_values') || changedProperties.has(TranslatePropertyKey)) {
361
+ if (changedProperties.has('_values') ||
362
+ changedProperties.has(TranslatePropertyKey) ||
363
+ changedProperties.has('format')) {
362
364
  this.syncInputValues();
363
365
  }
364
366
  if (changedProperties.has('placeholder')) {
@@ -87,17 +87,17 @@ export class ViewportManager {
87
87
  return;
88
88
  }
89
89
  const screenRect = this.screenViewport.getBoundingClientRect();
90
- // since screenViewport is applied on html element, it does not include body zoom
91
- // Zoom is a legacy feature and must not be used by any means.
92
- // Kept here for compatibility with old apps
93
- // only Chromium-based browsers update css zoom property after using ctrl/cmd + (+) or (-)
94
- // Firefox doesn't implement this property.
95
- // Safari does but zooming doesn't update this property value
96
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
97
- // @ts-ignore
98
- // TODO: Remove @ts-ignore and re-test again when standardized zoom is implemented across major browsers and TypeScript, https://github.com/w3c/csswg-drafts/issues/5623
99
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
100
- const zoom = document.body ? parseFloat(window.getComputedStyle(document.body).zoom) : 1;
90
+ /**
91
+ * since screenViewport is applied on html element, it does not include body zoom.
92
+ * Zoom is a legacy feature and must not be used by any means.
93
+ * Kept here for compatibility with old apps.
94
+ *
95
+ * TODO: re-visit once the standardized zoom is implemented across major browsers.
96
+ * https://github.com/w3c/csswg-drafts/issues/5623
97
+ */
98
+ const zoom = document.body
99
+ ? parseFloat(window.getComputedStyle(document.body).getPropertyValue('zoom')) || 1
100
+ : 1;
101
101
  const screenHeight = screenRect.height / zoom;
102
102
  const screenWidth = screenRect.width / zoom;
103
103
  const { top, left, bottom, right } = viewport.getBoundingClientRect();
@@ -31,6 +31,11 @@
31
31
  }
32
32
  ],
33
33
  "properties": [
34
+ {
35
+ "name": "manager (readonly)",
36
+ "description": "Tree manager used for item manipulation",
37
+ "type": "TreeManager<T>"
38
+ },
34
39
  {
35
40
  "name": "multiple",
36
41
  "attribute": "multiple",
@@ -5,15 +5,16 @@ to be used for menus and group selections
5
5
 
6
6
  ## Properties
7
7
 
8
- | Property | Attribute | Type | Default | Description |
9
- |--------------|---------------|---------------|-------------------------------|--------------------------------------------------|
10
- | `data` | | `TreeData<T>` | | Data object to be used for creating tree |
11
- | `multiple` | `multiple` | `boolean` | false | Allows multiple items to be selected |
12
- | `noRelation` | `no-relation` | `boolean` | false | Breaks the relationship when multiple<br />selection mode is enabled |
13
- | `query` | `query` | `string` | "" | Query string applied to tree |
14
- | `renderer` | | | "createTreeRenderer<T>(this)" | Renderer used for generating tree items |
15
- | `stateless` | `stateless` | `boolean` | false | Disable selections |
16
- | `values` | | `string[]` | [] | Selected items in tree |
8
+ | Property | Attribute | Type | Default | Description |
9
+ |----------------------|---------------|------------------|-------------------------------|--------------------------------------------------|
10
+ | `data` | | `TreeData<T>` | | Data object to be used for creating tree |
11
+ | `manager (readonly)` | | `TreeManager<T>` | | Tree manager used for item manipulation |
12
+ | `multiple` | `multiple` | `boolean` | false | Allows multiple items to be selected |
13
+ | `noRelation` | `no-relation` | `boolean` | false | Breaks the relationship when multiple<br />selection mode is enabled |
14
+ | `query` | `query` | `string` | "" | Query string applied to tree |
15
+ | `renderer` | | | "createTreeRenderer<T>(this)" | Renderer used for generating tree items |
16
+ | `stateless` | `stateless` | `boolean` | false | Disable selections |
17
+ | `values` | | `string[]` | [] | Selected items in tree |
17
18
 
18
19
  ## Methods
19
20
 
@@ -46,7 +46,7 @@ export declare class TreeItem<T extends TreeDataItem = TreeDataItem> extends Con
46
46
  /**
47
47
  * Icon of the item
48
48
  */
49
- icon: string;
49
+ icon?: string;
50
50
  /**
51
51
  * Original data item, used for interacting with the tree manager
52
52
  */
@@ -3,7 +3,7 @@ import { PropertyValues, TapEvent } from '@refinitiv-ui/core';
3
3
  import { CollectionComposer } from '@refinitiv-ui/utils/collection.js';
4
4
  import { List } from '../../list/index.js';
5
5
  import type { TreeData, TreeDataItem, TreeFilter } from '../helpers/types';
6
- import { TreeManagerMode } from '../managers/tree-manager.js';
6
+ import { TreeManager, TreeManagerMode } from '../managers/tree-manager.js';
7
7
  import './tree-item.js';
8
8
  /**
9
9
  * Displays a tree structure
@@ -22,10 +22,11 @@ export declare class Tree<T extends TreeDataItem = TreeDataItem> extends List<T>
22
22
  */
23
23
  static get version(): string;
24
24
  protected readonly defaultRole: string | null;
25
+ private _manager;
25
26
  /**
26
- * Tree manager used for manipulation
27
+ * Tree manager used for item manipulation
27
28
  */
28
- private manager;
29
+ get manager(): TreeManager<T>;
29
30
  /**
30
31
  * Allows multiple items to be selected
31
32
  */
@@ -48,7 +49,7 @@ export declare class Tree<T extends TreeDataItem = TreeDataItem> extends List<T>
48
49
  /**
49
50
  * Renderer used for generating tree items
50
51
  */
51
- renderer: (item: T, composer: CollectionComposer<T>, element?: HTMLElement) => HTMLElement;
52
+ renderer: (item: T, composer: CollectionComposer<T>, element?: HTMLElement | undefined) => HTMLElement;
52
53
  /**
53
54
  * Expands all groups
54
55
  * @returns {void}
@@ -3,7 +3,7 @@ import { customElement } from '@refinitiv-ui/core/decorators/custom-element.js';
3
3
  import { property } from '@refinitiv-ui/core/decorators/property.js';
4
4
  import { List, valueFormatWarning } from '../../list/index.js';
5
5
  import { VERSION } from '../../version.js';
6
- import { defaultFilter } from '../helpers/filter.js';
6
+ import { createDefaultFilter } from '../helpers/filter.js';
7
7
  import { createTreeRenderer } from '../helpers/renderer.js';
8
8
  import { TreeManager, TreeManagerMode } from '../managers/tree-manager.js';
9
9
  import './tree-item.js';
@@ -22,10 +22,7 @@ let Tree = class Tree extends List {
22
22
  constructor() {
23
23
  super(...arguments);
24
24
  this.defaultRole = 'tree';
25
- /**
26
- * Tree manager used for manipulation
27
- */
28
- this.manager = new TreeManager(this.composer);
25
+ this._manager = new TreeManager(this.composer);
29
26
  /**
30
27
  * Allows multiple items to be selected
31
28
  */
@@ -44,7 +41,7 @@ let Tree = class Tree extends List {
44
41
  * @type {TreeFilter<T> | null}
45
42
  * @ignore set to protected for now and need to discuss before set to public API
46
43
  */
47
- this.filter = defaultFilter(this);
44
+ this.filter = createDefaultFilter(this);
48
45
  /**
49
46
  * Renderer used for generating tree items
50
47
  */
@@ -57,19 +54,25 @@ let Tree = class Tree extends List {
57
54
  static get version() {
58
55
  return VERSION;
59
56
  }
57
+ /**
58
+ * Tree manager used for item manipulation
59
+ */
60
+ get manager() {
61
+ return this._manager;
62
+ }
60
63
  /**
61
64
  * Expands all groups
62
65
  * @returns {void}
63
66
  */
64
67
  expandAll() {
65
- this.manager.expandAllItems();
68
+ this._manager.expandAllItems();
66
69
  }
67
70
  /**
68
71
  * Collapses all groups
69
72
  * @returns {void}
70
73
  */
71
74
  collapseAll() {
72
- this.manager.collapseAllItems();
75
+ this._manager.collapseAllItems();
73
76
  }
74
77
  /**
75
78
  * Checks all editable items
@@ -79,14 +82,14 @@ let Tree = class Tree extends List {
79
82
  if (!this.multiple) {
80
83
  throw new RangeError('You cannot check all items in single selection mode');
81
84
  }
82
- this.manager.checkAllItems();
85
+ this._manager.checkAllItems();
83
86
  }
84
87
  /**
85
88
  * Unchecks all editable items
86
89
  * @returns {void}
87
90
  */
88
91
  uncheckAll() {
89
- this.manager.uncheckAllItems();
92
+ this._manager.uncheckAllItems();
90
93
  }
91
94
  /**
92
95
  * @override
@@ -96,23 +99,23 @@ let Tree = class Tree extends List {
96
99
  // Stateless tree
97
100
  if (this.stateless) {
98
101
  // Single selection - expand/collapse group (parent)
99
- if (!this.multiple && this.manager.isItemParent(item)) {
102
+ if (!this.multiple && this._manager.isItemParent(item)) {
100
103
  this.toggleExpandedState(item);
101
104
  }
102
105
  return false;
103
106
  }
104
107
  // Multiple selection
105
108
  if (this.multiple) {
106
- return this.manager.toggleItem(item);
109
+ return this._manager.toggleItem(item);
107
110
  }
108
111
  // Single selection - expand/collapse group (parent)
109
- if (this.manager.isItemParent(item)) {
112
+ if (this._manager.isItemParent(item)) {
110
113
  this.toggleExpandedState(item);
111
114
  return false;
112
115
  }
113
116
  // Single selection - check item
114
- if (this.manager.checkItem(item)) {
115
- this.manager.checkedItems.forEach((checkedItem) => {
117
+ if (this._manager.checkItem(item)) {
118
+ this._manager.checkedItems.forEach((checkedItem) => {
116
119
  checkedItem !== item && this.forceUncheckItem(checkedItem);
117
120
  });
118
121
  return true;
@@ -126,7 +129,7 @@ let Tree = class Tree extends List {
126
129
  */
127
130
  forceUncheckItem(item) {
128
131
  const result = this.composer.unlockItem(item);
129
- this.manager.uncheckItem(item);
132
+ this._manager.uncheckItem(item);
130
133
  result && this.composer.lockItem(item);
131
134
  }
132
135
  /**
@@ -144,7 +147,7 @@ let Tree = class Tree extends List {
144
147
  cancelable: false,
145
148
  composed: true,
146
149
  detail: {
147
- value: this.manager.isItemExpanded(item),
150
+ value: this._manager.isItemExpanded(item),
148
151
  item
149
152
  }
150
153
  });
@@ -200,8 +203,8 @@ let Tree = class Tree extends List {
200
203
  */
201
204
  left() {
202
205
  const item = this.highlightElement && this.itemFromElement(this.highlightElement);
203
- if (item && this.manager.isItemExpanded(item)) {
204
- this.manager.collapseItem(item);
206
+ if (item && this._manager.isItemExpanded(item)) {
207
+ this._manager.collapseItem(item);
205
208
  this.dispatchExpandedChangedEvent(item);
206
209
  }
207
210
  }
@@ -212,8 +215,8 @@ let Tree = class Tree extends List {
212
215
  */
213
216
  right() {
214
217
  const item = this.highlightElement && this.itemFromElement(this.highlightElement);
215
- if (item && !this.manager.isItemExpanded(item)) {
216
- this.manager.expandItem(item);
218
+ if (item && !this._manager.isItemExpanded(item)) {
219
+ this._manager.expandItem(item);
217
220
  this.dispatchExpandedChangedEvent(item);
218
221
  }
219
222
  }
@@ -224,11 +227,11 @@ let Tree = class Tree extends List {
224
227
  * @returns {void}
225
228
  */
226
229
  toggleExpandedState(item) {
227
- if (this.manager.isItemExpanded(item)) {
228
- this.manager.collapseItem(item);
230
+ if (this._manager.isItemExpanded(item)) {
231
+ this._manager.collapseItem(item);
229
232
  }
230
233
  else {
231
- this.manager.expandItem(item);
234
+ this._manager.expandItem(item);
232
235
  }
233
236
  this.dispatchExpandedChangedEvent(item);
234
237
  }
@@ -250,7 +253,7 @@ let Tree = class Tree extends List {
250
253
  willUpdate(changeProperties) {
251
254
  super.willUpdate(changeProperties);
252
255
  if (changeProperties.has('noRelation') || changeProperties.has('multiple')) {
253
- this.manager.setMode(this.mode);
256
+ this._manager.setMode(this.mode);
254
257
  }
255
258
  if (changeProperties.has('query') || changeProperties.has('data')) {
256
259
  this.filterItems();
@@ -266,15 +269,16 @@ let Tree = class Tree extends List {
266
269
  const filter = this.filter;
267
270
  const items = this.queryItems((item) => {
268
271
  // Do not filter hidden items
272
+ // TODO: blocking `hidden` update via TreeManager/TreeNode of this component
269
273
  if (item.hidden) {
270
274
  return false;
271
275
  }
272
- const result = filter(item);
276
+ const result = filter(item, this._manager);
273
277
  if (result) {
274
- this.manager.includeItem(item);
278
+ this._manager.includeItem(item);
275
279
  }
276
280
  else {
277
- this.manager.excludeItem(item);
281
+ this._manager.excludeItem(item);
278
282
  }
279
283
  return result;
280
284
  }).slice();
@@ -304,8 +308,8 @@ let Tree = class Tree extends List {
304
308
  /**
305
309
  * Collapse an item to prevent tree show too many nested expanded
306
310
  */
307
- if (this.manager.isItemExpanded(item)) {
308
- this.manager.collapseItem(item);
311
+ if (this._manager.isItemExpanded(item)) {
312
+ this._manager.collapseItem(item);
309
313
  }
310
314
  /**
311
315
  * show all descendants of items to make them all are selectable
@@ -330,8 +334,8 @@ let Tree = class Tree extends List {
330
334
  // Skip hidden and exclude item
331
335
  if (!item.hidden && !excludeItems.includes(item)) {
332
336
  // Add item and nested children
333
- this.manager.includeItem(item);
334
- const children = this.manager.getItemChildren(item);
337
+ this._manager.includeItem(item);
338
+ const children = this._manager.getItemChildren(item);
335
339
  if (children.length) {
336
340
  this.addNestedItemsToRender(children, excludeItems, includeHidden);
337
341
  }
@@ -350,9 +354,9 @@ let Tree = class Tree extends List {
350
354
  // we iterate each item match so as to find ancestors
351
355
  items.forEach((item) => {
352
356
  // Get the ancestors
353
- const parent = this.manager.getItemParent(item);
357
+ const parent = this._manager.getItemParent(item);
354
358
  if (parent && !ancestors.has(parent)) {
355
- this.manager.getItemAncestors(item).forEach((ancestor) => {
359
+ this._manager.getItemAncestors(item).forEach((ancestor) => {
356
360
  ancestors.add(ancestor); // track ancestors
357
361
  this.addExpandedAncestorToRender(ancestor);
358
362
  });
@@ -366,8 +370,8 @@ let Tree = class Tree extends List {
366
370
  * @returns {void}
367
371
  */
368
372
  addExpandedAncestorToRender(ancestor) {
369
- this.manager.includeItem(ancestor);
370
- this.manager.expandItem(ancestor);
373
+ this._manager.includeItem(ancestor);
374
+ this._manager.expandItem(ancestor);
371
375
  }
372
376
  /**
373
377
  * Selected items in tree
@@ -376,7 +380,7 @@ let Tree = class Tree extends List {
376
380
  * @default []
377
381
  */
378
382
  get values() {
379
- return this.manager.checkedItems.map((item) => {
383
+ return this._manager.checkedItems.map((item) => {
380
384
  return this.composer.getItemPropertyValue(item, 'value') ?? '';
381
385
  });
382
386
  }
@@ -390,10 +394,10 @@ let Tree = class Tree extends List {
390
394
  const newValue = [...values];
391
395
  const oldValue = [...this.values];
392
396
  if (newValue.toString() !== oldValue.toString()) {
393
- this.manager.uncheckAllItems();
397
+ this._manager.uncheckAllItems();
394
398
  values.some((value) => {
395
399
  this.queryItemsByPropertyValue('value', value).forEach((item) => {
396
- this.manager.checkItem(item);
400
+ this._manager.checkItem(item);
397
401
  });
398
402
  return !this.multiple; // Only set the fist value if multiple is not enabled
399
403
  });
@@ -411,13 +415,13 @@ let Tree = class Tree extends List {
411
415
  }
412
416
  set data(data) {
413
417
  super.data = data;
414
- this.manager = new TreeManager(this.composer, this.mode);
418
+ this._manager = new TreeManager(this.composer, this.mode);
415
419
  }
416
420
  /**
417
421
  * @override
418
422
  */
419
423
  get renderItems() {
420
- return this.manager.visibleItems;
424
+ return this._manager.visibleItems;
421
425
  }
422
426
  /**
423
427
  * Mode to use in the tree manager
@@ -5,4 +5,4 @@ import type { TreeFilter } from './types';
5
5
  * @param el Tree instance to filter
6
6
  * @returns Filter accepting an item
7
7
  */
8
- export declare const defaultFilter: <T extends TreeDataItem = TreeDataItem>(el: Tree<T>) => TreeFilter<T>;
8
+ export declare const createDefaultFilter: <T extends TreeDataItem = TreeDataItem>(el: Tree<T>) => TreeFilter<T>;
@@ -4,7 +4,7 @@ import escapeStringRegexp from 'escape-string-regexp';
4
4
  * @param el Tree instance to filter
5
5
  * @returns Filter accepting an item
6
6
  */
7
- export const defaultFilter = (el) => {
7
+ export const createDefaultFilter = (el) => {
8
8
  // reference query string for validating queryRegExp cache state
9
9
  let query = '';
10
10
  // cache RegExp
@@ -20,8 +20,8 @@ export const defaultFilter = (el) => {
20
20
  return queryRegExp;
21
21
  };
22
22
  // return scoped custom filter
23
- return (item) => {
24
- const label = item.label;
23
+ return (item, manager) => {
24
+ const label = manager.composer.getItemPropertyValue(item, 'label');
25
25
  if (!label) {
26
26
  return false;
27
27
  }