@refinitiv-ui/elements 7.10.7 → 7.10.8
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 +6 -0
- package/lib/combo-box/custom-elements.json +1 -2
- package/lib/combo-box/custom-elements.md +19 -19
- package/lib/combo-box/helpers/renderer.d.ts +4 -0
- package/lib/combo-box/helpers/renderer.js +22 -15
- package/lib/combo-box/index.d.ts +3 -4
- package/lib/combo-box/index.js +6 -5
- package/lib/list/custom-elements.json +1 -2
- package/lib/list/custom-elements.md +9 -9
- package/lib/list/elements/list.d.ts +1 -3
- package/lib/list/elements/list.js +10 -11
- package/lib/list/extensible-function.d.ts +2 -3
- package/lib/list/extensible-function.js +2 -3
- package/lib/list/helpers/renderer.d.ts +4 -0
- package/lib/list/helpers/renderer.js +36 -29
- package/lib/list/index.d.ts +1 -1
- package/lib/list/index.js +1 -1
- package/lib/list/renderer.d.ts +2 -30
- package/lib/list/renderer.js +2 -3
- package/lib/tree/custom-elements.json +1 -2
- package/lib/tree/custom-elements.md +9 -9
- package/lib/tree/elements/tree.d.ts +1 -3
- package/lib/tree/elements/tree.js +2 -3
- package/lib/tree/helpers/renderer.d.ts +7 -1
- package/lib/tree/helpers/renderer.js +43 -32
- package/lib/tree/index.d.ts +1 -1
- package/lib/tree/index.js +1 -1
- package/lib/tree-select/custom-elements.json +1 -2
- package/lib/tree-select/custom-elements.md +11 -11
- package/lib/tree-select/index.d.ts +3 -5
- package/lib/tree-select/index.js +3 -5
- package/lib/version.js +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
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.10.8](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@7.10.7...@refinitiv-ui/elements@7.10.8) (2024-03-18)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **list, combobox, tree:** fix EvalError with CSP on renderer ([#1115](https://github.com/Refinitiv/refinitiv-ui/issues/1115)) ([8dffb10](https://github.com/Refinitiv/refinitiv-ui/commit/8dffb102a04f262f82f6da5a590b5207deded9e6))
|
|
11
|
+
|
|
6
12
|
## [7.10.7](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@7.10.6...@refinitiv-ui/elements@7.10.7) (2024-03-12)
|
|
7
13
|
|
|
8
14
|
### Bug Fixes
|
|
@@ -4,25 +4,25 @@ Combines a popup with a filterable selection list
|
|
|
4
4
|
|
|
5
5
|
## Properties
|
|
6
6
|
|
|
7
|
-
| Property | Attribute | Type | Default
|
|
8
|
-
|
|
9
|
-
| `clears` | `clears` | `boolean` | false
|
|
10
|
-
| `data` | | `ComboBoxData<T>` | []
|
|
11
|
-
| `disabled` | `disabled` | `boolean` | false
|
|
12
|
-
| `error` | `error` | `boolean` | false
|
|
13
|
-
| `filter` | | `ComboBoxFilter<T> \| null` | "defaultFilter<T>(this)"
|
|
14
|
-
| `freeText` | `free-text` | `boolean` | false
|
|
15
|
-
| `label (readonly)` | | `string` | ""
|
|
16
|
-
| `multiple` | `multiple` | `boolean` | false
|
|
17
|
-
| `opened` | `opened` | `boolean` | false
|
|
18
|
-
| `placeholder` | `placeholder` | `string` | ""
|
|
19
|
-
| `query` | | `string \| null` | null
|
|
20
|
-
| `queryDebounceRate` | `query-debounce-rate` | `number` | "0"
|
|
21
|
-
| `readonly` | `readonly` | `boolean` | false
|
|
22
|
-
| `renderer` | |
|
|
23
|
-
| `value` | `value` | `string` | ""
|
|
24
|
-
| `values` | | `string[]` | []
|
|
25
|
-
| `warning` | `warning` | `boolean` | false
|
|
7
|
+
| Property | Attribute | Type | Default | Description |
|
|
8
|
+
|---------------------|-----------------------|-----------------------------|-----------------------------------|--------------------------------------------------|
|
|
9
|
+
| `clears` | `clears` | `boolean` | false | Show clears button |
|
|
10
|
+
| `data` | | `ComboBoxData<T>` | [] | Data array to be displayed |
|
|
11
|
+
| `disabled` | `disabled` | `boolean` | false | Set disabled state |
|
|
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 |
|
|
14
|
+
| `freeText` | `free-text` | `boolean` | false | Allow to enter any value |
|
|
15
|
+
| `label (readonly)` | | `string` | "" | Label of selected value |
|
|
16
|
+
| `multiple` | `multiple` | `boolean` | false | Multiple selection mode |
|
|
17
|
+
| `opened` | `opened` | `boolean` | false | Track opened state of popup |
|
|
18
|
+
| `placeholder` | `placeholder` | `string` | "" | Set placeholder text |
|
|
19
|
+
| `query` | | `string \| null` | null | Query string applied to combo-box<br />Set via internal input |
|
|
20
|
+
| `queryDebounceRate` | `query-debounce-rate` | `number` | "0" | Control query rate in milliseconds |
|
|
21
|
+
| `readonly` | `readonly` | `boolean` | false | Set readonly state |
|
|
22
|
+
| `renderer` | | | "createComboBoxRenderer<T>(this)" | Renderer used to render list item elements |
|
|
23
|
+
| `value` | `value` | `string` | "" | Returns the first selected item value.<br />Use `values` when multiple selection mode is enabled. |
|
|
24
|
+
| `values` | | `string[]` | [] | Returns a values collection of the currently<br />selected item values |
|
|
25
|
+
| `warning` | `warning` | `boolean` | false | Set warning state |
|
|
26
26
|
|
|
27
27
|
## Events
|
|
28
28
|
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { CollectionComposer, DataItem } from '@refinitiv-ui/utils/collection.js';
|
|
2
|
+
import type { ItemData } from '../../item';
|
|
1
3
|
import { Renderer } from '../../list/renderer.js';
|
|
4
|
+
export declare const createComboBoxRenderer: <T extends DataItem = ItemData>(context?: unknown) => (item: T, composer: CollectionComposer<T>, element?: HTMLElement) => HTMLElement;
|
|
2
5
|
/**
|
|
3
6
|
* Renders list items as `ef-item` elements.
|
|
4
7
|
* Extends its behaviour from ListRenderer.
|
|
8
|
+
* @deprecate ComboBoxRenderer is deprecated. Use createComboBoxRenderer instead.
|
|
5
9
|
*/
|
|
6
10
|
export declare class ComboBoxRenderer extends Renderer {
|
|
7
11
|
constructor(context?: unknown);
|
|
@@ -1,24 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DeprecationNotice } from '@refinitiv-ui/core';
|
|
2
|
+
import { createListRenderer } from '../../list/index.js';
|
|
2
3
|
import { Renderer } from '../../list/renderer.js';
|
|
4
|
+
export const createComboBoxRenderer = (context) => {
|
|
5
|
+
const listRenderer = createListRenderer(context);
|
|
6
|
+
return (item, composer, element) => {
|
|
7
|
+
// Extending renderer from listRenderer
|
|
8
|
+
element = listRenderer(item, composer, element);
|
|
9
|
+
const value = composer.getItemPropertyValue(item, 'value');
|
|
10
|
+
// Using value as id for `aria-activedescendant` in combobox
|
|
11
|
+
if (value && element.id !== value) {
|
|
12
|
+
element.id = value;
|
|
13
|
+
}
|
|
14
|
+
else if (!value && element.id) {
|
|
15
|
+
element.removeAttribute('id');
|
|
16
|
+
}
|
|
17
|
+
return element;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
const deprecationNotice = new DeprecationNotice('ComboBoxRenderer is deprecated. Use createComboBoxRenderer instead.');
|
|
3
21
|
/**
|
|
4
22
|
* Renders list items as `ef-item` elements.
|
|
5
23
|
* Extends its behaviour from ListRenderer.
|
|
24
|
+
* @deprecate ComboBoxRenderer is deprecated. Use createComboBoxRenderer instead.
|
|
6
25
|
*/
|
|
7
26
|
export class ComboBoxRenderer extends Renderer {
|
|
8
27
|
constructor(context) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
// Extending renderer from listRenderer
|
|
12
|
-
element = listRenderer(item, composer, element);
|
|
13
|
-
const value = composer.getItemPropertyValue(item, 'value');
|
|
14
|
-
// Using value as id for `aria-activedescendant` in combobox
|
|
15
|
-
if (value && element.id !== value) {
|
|
16
|
-
element.id = value;
|
|
17
|
-
}
|
|
18
|
-
else if (!value && element.id) {
|
|
19
|
-
element.removeAttribute('id');
|
|
20
|
-
}
|
|
21
|
-
return element;
|
|
22
|
-
});
|
|
28
|
+
super(createComboBoxRenderer(context));
|
|
29
|
+
deprecationNotice.show();
|
|
23
30
|
}
|
|
24
31
|
}
|
package/lib/combo-box/index.d.ts
CHANGED
|
@@ -12,10 +12,10 @@ import type { List } from '../list';
|
|
|
12
12
|
import '../list/index.js';
|
|
13
13
|
import '../overlay/index.js';
|
|
14
14
|
import { CustomKeyboardEvent } from './helpers/keyboard-event.js';
|
|
15
|
-
import { ComboBoxRenderer } from './helpers/renderer.js';
|
|
15
|
+
import { ComboBoxRenderer, createComboBoxRenderer } from './helpers/renderer.js';
|
|
16
16
|
import type { ComboBoxData, ComboBoxFilter } from './helpers/types';
|
|
17
17
|
export type { ComboBoxFilter, ComboBoxData };
|
|
18
|
-
export { ComboBoxRenderer };
|
|
18
|
+
export { ComboBoxRenderer, createComboBoxRenderer };
|
|
19
19
|
/**
|
|
20
20
|
* Combines a popup with a filterable selection list
|
|
21
21
|
*
|
|
@@ -53,9 +53,8 @@ export declare class ComboBox<T extends DataItem = ItemData> extends FormFieldEl
|
|
|
53
53
|
filter: ComboBoxFilter<T> | null;
|
|
54
54
|
/**
|
|
55
55
|
* Renderer used to render list item elements
|
|
56
|
-
* @type {ComboBoxRenderer}
|
|
57
56
|
*/
|
|
58
|
-
renderer:
|
|
57
|
+
renderer: (item: T, composer: CollectionComposer<T>, element?: HTMLElement | undefined) => HTMLElement;
|
|
59
58
|
private _multiple;
|
|
60
59
|
/**
|
|
61
60
|
* Multiple selection mode
|
package/lib/combo-box/index.js
CHANGED
|
@@ -18,8 +18,8 @@ import { registerOverflowTooltip } from '../tooltip/index.js';
|
|
|
18
18
|
import { VERSION } from '../version.js';
|
|
19
19
|
import { defaultFilter } from './helpers/filter.js';
|
|
20
20
|
import { CustomKeyboardEvent } from './helpers/keyboard-event.js';
|
|
21
|
-
import { ComboBoxRenderer } from './helpers/renderer.js';
|
|
22
|
-
export { ComboBoxRenderer };
|
|
21
|
+
import { ComboBoxRenderer, createComboBoxRenderer } from './helpers/renderer.js';
|
|
22
|
+
export { ComboBoxRenderer, createComboBoxRenderer };
|
|
23
23
|
const QUERY_DEBOUNCE_RATE = 0;
|
|
24
24
|
// Maximum number of characters to display in multiple mode
|
|
25
25
|
const MULTIPLE_LABEL_MAX_SIZE = 250;
|
|
@@ -56,9 +56,8 @@ let ComboBox = class ComboBox extends FormFieldElement {
|
|
|
56
56
|
this.filter = defaultFilter(this);
|
|
57
57
|
/**
|
|
58
58
|
* Renderer used to render list item elements
|
|
59
|
-
* @type {ComboBoxRenderer}
|
|
60
59
|
*/
|
|
61
|
-
this.renderer =
|
|
60
|
+
this.renderer = createComboBoxRenderer(this);
|
|
62
61
|
this._multiple = false;
|
|
63
62
|
/**
|
|
64
63
|
* Track opened state of popup
|
|
@@ -267,7 +266,9 @@ let ComboBox = class ComboBox extends FormFieldElement {
|
|
|
267
266
|
// Clone value arrays
|
|
268
267
|
const newValues = values.slice(0, this.multiple ? values.length : 1);
|
|
269
268
|
const oldValues = this.values.slice();
|
|
270
|
-
// Create comparison strings to check for differences
|
|
269
|
+
// Create comparison strings to check for differences.
|
|
270
|
+
// i18n not required at this sort, and
|
|
271
|
+
// we just sort values to create signature values for comparison.
|
|
271
272
|
const newComparison = newValues.sort().toString();
|
|
272
273
|
const oldComparison = oldValues.sort().toString();
|
|
273
274
|
// Update the selection state when found new value
|
|
@@ -4,15 +4,15 @@ Provides listing and immutable selection
|
|
|
4
4
|
|
|
5
5
|
## Properties
|
|
6
6
|
|
|
7
|
-
| Property | Attribute | Type
|
|
8
|
-
|
|
9
|
-
| `data` | | `ListData`
|
|
10
|
-
| `delegatesFocus (readonly)` | | `false`
|
|
11
|
-
| `multiple` | `multiple` | `boolean`
|
|
12
|
-
| `renderer` | |
|
|
13
|
-
| `stateless` | `stateless` | `boolean`
|
|
14
|
-
| `value` | `value` | `string`
|
|
15
|
-
| `values` | | `string[]`
|
|
7
|
+
| Property | Attribute | Type | Default | Description |
|
|
8
|
+
|-----------------------------|-------------|------------|-------------------------------|--------------------------------------------------|
|
|
9
|
+
| `data` | | `ListData` | null | The data object, used to render the list. |
|
|
10
|
+
| `delegatesFocus (readonly)` | | `false` | false | Element focus delegation.<br />Set to `false` and relies on native focusing. |
|
|
11
|
+
| `multiple` | `multiple` | `boolean` | false | Allow multiple selections |
|
|
12
|
+
| `renderer` | | | "createListRenderer<T>(this)" | Renderer used to render list item elements |
|
|
13
|
+
| `stateless` | `stateless` | `boolean` | false | Disable selections |
|
|
14
|
+
| `value` | `value` | `string` | "" | Returns the first selected item value.<br />Use `values` when multiple selection mode is enabled. |
|
|
15
|
+
| `values` | | `string[]` | [] | Returns a values collection of the currently<br />selected item values |
|
|
16
16
|
|
|
17
17
|
## Methods
|
|
18
18
|
|
|
@@ -2,7 +2,6 @@ import { JSXInterface } from '../../jsx';
|
|
|
2
2
|
import { CSSResultGroup, ControlElement, PropertyValues, TapEvent, TemplateResult, WarningNotice } from '@refinitiv-ui/core';
|
|
3
3
|
import { CollectionComposer, DataItem } from '@refinitiv-ui/utils/collection.js';
|
|
4
4
|
import type { ItemData } from '../../item';
|
|
5
|
-
import { ListRenderer } from '../helpers/renderer.js';
|
|
6
5
|
import type { ListData } from '../helpers/types';
|
|
7
6
|
import './list-item.js';
|
|
8
7
|
/**
|
|
@@ -54,9 +53,8 @@ export declare class List<T extends DataItem = ItemData> extends ControlElement
|
|
|
54
53
|
readonly delegatesFocus = false;
|
|
55
54
|
/**
|
|
56
55
|
* Renderer used to render list item elements
|
|
57
|
-
* @type {ListRenderer}
|
|
58
56
|
*/
|
|
59
|
-
renderer:
|
|
57
|
+
renderer: (item: T, composer: CollectionComposer<T>, element?: HTMLElement | undefined) => HTMLElement;
|
|
60
58
|
/**
|
|
61
59
|
* Disable selections
|
|
62
60
|
*/
|
|
@@ -4,7 +4,7 @@ import { customElement } from '@refinitiv-ui/core/decorators/custom-element.js';
|
|
|
4
4
|
import { property } from '@refinitiv-ui/core/decorators/property.js';
|
|
5
5
|
import { CollectionComposer } from '@refinitiv-ui/utils/collection.js';
|
|
6
6
|
import { VERSION } from '../../version.js';
|
|
7
|
-
import {
|
|
7
|
+
import { createListRenderer } from '../helpers/renderer.js';
|
|
8
8
|
import './list-item.js';
|
|
9
9
|
/**
|
|
10
10
|
* Key direction
|
|
@@ -55,9 +55,8 @@ let List = class List extends ControlElement {
|
|
|
55
55
|
this.delegatesFocus = false;
|
|
56
56
|
/**
|
|
57
57
|
* Renderer used to render list item elements
|
|
58
|
-
* @type {ListRenderer}
|
|
59
58
|
*/
|
|
60
|
-
this.renderer =
|
|
59
|
+
this.renderer = createListRenderer(this);
|
|
61
60
|
/**
|
|
62
61
|
* Disable selections
|
|
63
62
|
*/
|
|
@@ -139,13 +138,13 @@ let List = class List extends ControlElement {
|
|
|
139
138
|
}
|
|
140
139
|
else {
|
|
141
140
|
// Clone value arrays
|
|
142
|
-
const
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
//
|
|
147
|
-
const newComparison =
|
|
148
|
-
const oldComparison =
|
|
141
|
+
const newValues = values.slice();
|
|
142
|
+
const oldValues = this.values.slice();
|
|
143
|
+
// Create comparison strings to check for differences.
|
|
144
|
+
// i18n not required at this sort, and
|
|
145
|
+
// we just sort values to create signature values for comparison.
|
|
146
|
+
const newComparison = newValues.sort().toString();
|
|
147
|
+
const oldComparison = oldValues.sort().toString();
|
|
149
148
|
// Should we update the selection state?
|
|
150
149
|
if (newComparison !== oldComparison) {
|
|
151
150
|
this.clearSelection();
|
|
@@ -154,7 +153,7 @@ let List = class List extends ControlElement {
|
|
|
154
153
|
matches.forEach((match) => this.composer.setItemPropertyValue(match, 'selected', true));
|
|
155
154
|
return !this.multiple; // Only set the fist value if multiple is not enabled
|
|
156
155
|
});
|
|
157
|
-
this.requestUpdate('values',
|
|
156
|
+
this.requestUpdate('values', oldValues);
|
|
158
157
|
}
|
|
159
158
|
}
|
|
160
159
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* ! Do not import this module !
|
|
2
|
+
* Do not use: ExtensibleFunction is not CSP compliant.
|
|
3
|
+
* @deprecate ExtensibleFunction is deprecated.
|
|
5
4
|
*/
|
|
6
5
|
export declare abstract class ExtensibleFunction extends Function {
|
|
7
6
|
constructor(fn: Function);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* ! Do not import this module !
|
|
2
|
+
* Do not use: ExtensibleFunction is not CSP compliant.
|
|
3
|
+
* @deprecate ExtensibleFunction is deprecated.
|
|
5
4
|
*/
|
|
6
5
|
export class ExtensibleFunction extends Function {
|
|
7
6
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { CollectionComposer, DataItem } from '@refinitiv-ui/utils/collection.js';
|
|
2
|
+
import type { ItemData } from '../../item';
|
|
1
3
|
import { Renderer } from '../renderer.js';
|
|
4
|
+
export declare const createListRenderer: <T extends DataItem = ItemData>(context?: unknown) => (item: T, composer: CollectionComposer<T>, element?: HTMLElement) => HTMLElement;
|
|
2
5
|
/**
|
|
3
6
|
* Renders list items as `ef-item` elements.
|
|
4
7
|
* This is the default renderer for lists.
|
|
8
|
+
* @deprecate ListRenderer is deprecated. Use createListRenderer instead.
|
|
5
9
|
*/
|
|
6
10
|
export declare class ListRenderer extends Renderer {
|
|
7
11
|
constructor(context?: unknown);
|
|
@@ -1,43 +1,50 @@
|
|
|
1
|
+
import { DeprecationNotice } from '@refinitiv-ui/core';
|
|
1
2
|
import { uuid } from '@refinitiv-ui/utils/uuid.js';
|
|
2
3
|
import { Renderer } from '../renderer.js';
|
|
3
4
|
import { getItemId } from './item-id.js';
|
|
5
|
+
export const createListRenderer = (context) => {
|
|
6
|
+
/**
|
|
7
|
+
* Renderer key prefix, used in combination with item value to give unique id to each item
|
|
8
|
+
*/
|
|
9
|
+
const key = uuid();
|
|
10
|
+
return (item, composer, element) => {
|
|
11
|
+
/**
|
|
12
|
+
* Element to render
|
|
13
|
+
*/
|
|
14
|
+
const el = element || document.createElement('ef-list-item');
|
|
15
|
+
/**
|
|
16
|
+
* Tooltip value to be used, if any.
|
|
17
|
+
*/
|
|
18
|
+
const tooltip = composer.getItemPropertyValue(item, 'tooltip');
|
|
19
|
+
el.label = composer.getItemPropertyValue(item, 'label');
|
|
20
|
+
el.subLabel = composer.getItemPropertyValue(item, 'subLabel');
|
|
21
|
+
el.value = composer.getItemPropertyValue(item, 'value');
|
|
22
|
+
el.id = getItemId(key, el.value);
|
|
23
|
+
el.icon = composer.getItemPropertyValue(item, 'icon');
|
|
24
|
+
el.highlighted = composer.getItemPropertyValue(item, 'highlighted') === true;
|
|
25
|
+
el.selected = composer.getItemPropertyValue(item, 'selected') === true;
|
|
26
|
+
el.disabled = composer.getItemPropertyValue(item, 'disabled') === true;
|
|
27
|
+
el.hidden = composer.getItemPropertyValue(item, 'hidden') === true;
|
|
28
|
+
el.type = composer.getItemPropertyValue(item, 'type');
|
|
29
|
+
el.multiple = !!context && context.multiple === true;
|
|
30
|
+
const itemRole = el.type === 'text' || !el.type ? 'option' : 'presentation';
|
|
31
|
+
el.setAttribute('role', itemRole);
|
|
32
|
+
tooltip ? el.setAttribute('title', tooltip) : el.removeAttribute('title');
|
|
33
|
+
return el;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
const deprecationNotice = new DeprecationNotice('ListRenderer is deprecated. Use createListRenderer instead.');
|
|
4
37
|
/**
|
|
5
38
|
* Renders list items as `ef-item` elements.
|
|
6
39
|
* This is the default renderer for lists.
|
|
40
|
+
* @deprecate ListRenderer is deprecated. Use createListRenderer instead.
|
|
7
41
|
*/
|
|
8
42
|
export class ListRenderer extends Renderer {
|
|
9
43
|
constructor(context) {
|
|
10
|
-
/**
|
|
11
|
-
* Renderer key prefix, used in combination with item value to give unique id to each item
|
|
12
|
-
*/
|
|
13
|
-
const key = uuid();
|
|
14
44
|
/**
|
|
15
45
|
* Create and return render function
|
|
16
46
|
*/
|
|
17
|
-
super((
|
|
18
|
-
|
|
19
|
-
* Element to render
|
|
20
|
-
*/
|
|
21
|
-
const el = element || document.createElement('ef-list-item');
|
|
22
|
-
/**
|
|
23
|
-
* Tooltip value to be used, if any.
|
|
24
|
-
*/
|
|
25
|
-
const tooltip = composer.getItemPropertyValue(item, 'tooltip');
|
|
26
|
-
el.label = composer.getItemPropertyValue(item, 'label');
|
|
27
|
-
el.subLabel = composer.getItemPropertyValue(item, 'subLabel');
|
|
28
|
-
el.value = composer.getItemPropertyValue(item, 'value');
|
|
29
|
-
el.id = getItemId(key, el.value);
|
|
30
|
-
el.icon = composer.getItemPropertyValue(item, 'icon');
|
|
31
|
-
el.highlighted = composer.getItemPropertyValue(item, 'highlighted') === true;
|
|
32
|
-
el.selected = composer.getItemPropertyValue(item, 'selected') === true;
|
|
33
|
-
el.disabled = composer.getItemPropertyValue(item, 'disabled') === true;
|
|
34
|
-
el.hidden = composer.getItemPropertyValue(item, 'hidden') === true;
|
|
35
|
-
el.type = composer.getItemPropertyValue(item, 'type');
|
|
36
|
-
el.multiple = !!context && context.multiple === true;
|
|
37
|
-
const itemRole = el.type === 'text' || !el.type ? 'option' : 'presentation';
|
|
38
|
-
el.setAttribute('role', itemRole);
|
|
39
|
-
tooltip ? el.setAttribute('title', tooltip) : el.removeAttribute('title');
|
|
40
|
-
return el;
|
|
41
|
-
});
|
|
47
|
+
super(createListRenderer(context));
|
|
48
|
+
deprecationNotice.show();
|
|
42
49
|
}
|
|
43
50
|
}
|
package/lib/list/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ListData } from './helpers/types';
|
|
2
2
|
export * from './elements/list.js';
|
|
3
3
|
export * from './elements/list-item.js';
|
|
4
|
-
export { ListRenderer } from './helpers/renderer.js';
|
|
4
|
+
export { ListRenderer, createListRenderer } from './helpers/renderer.js';
|
|
5
5
|
export type { ListData };
|
package/lib/list/index.js
CHANGED
package/lib/list/renderer.d.ts
CHANGED
|
@@ -1,36 +1,8 @@
|
|
|
1
|
-
import type { CollectionComposer, DataItem } from '@refinitiv-ui/utils/collection.js';
|
|
2
1
|
import { ExtensibleFunction } from './extensible-function.js';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
* TODO: Move this to @refinitiv-ui/utils
|
|
6
|
-
* ! Do not import this module !
|
|
7
|
-
*/
|
|
8
|
-
export interface RenderFunction {
|
|
9
|
-
/**
|
|
10
|
-
* Renders data items into elements
|
|
11
|
-
* @param item Data item context
|
|
12
|
-
* @param composer Composer context
|
|
13
|
-
* @param element Reusable element. This element tries to be the same as was used before.
|
|
14
|
-
* @returns List item element
|
|
15
|
-
*/
|
|
16
|
-
(item: DataItem, composer: CollectionComposer, element?: HTMLElement): HTMLElement;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Render constructor interface
|
|
20
|
-
* TODO: Move this to @refinitiv-ui/utils
|
|
21
|
-
* ! Do not import this module !
|
|
22
|
-
*/
|
|
23
|
-
export interface RendererConstructor {
|
|
24
|
-
/**
|
|
25
|
-
* @param fn Render function to use as the instance
|
|
26
|
-
*/
|
|
27
|
-
new (fn: RenderFunction): RenderFunction;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Renderer base class.
|
|
3
|
+
* Do not use: Renderer is not CSP compliant.
|
|
31
4
|
* Used for creating renderers to render data items.
|
|
32
|
-
*
|
|
33
|
-
* ! Do not import this module !
|
|
5
|
+
* @deprecate Renderer is deprecated.
|
|
34
6
|
*/
|
|
35
7
|
export declare abstract class Renderer extends ExtensibleFunction {
|
|
36
8
|
}
|
package/lib/list/renderer.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { ExtensibleFunction } from './extensible-function.js';
|
|
2
2
|
/**
|
|
3
|
-
* Renderer
|
|
3
|
+
* Do not use: Renderer is not CSP compliant.
|
|
4
4
|
* Used for creating renderers to render data items.
|
|
5
|
-
*
|
|
6
|
-
* ! Do not import this module !
|
|
5
|
+
* @deprecate Renderer is deprecated.
|
|
7
6
|
*/
|
|
8
7
|
export class Renderer extends ExtensibleFunction {
|
|
9
8
|
}
|
|
@@ -5,15 +5,15 @@ to be used for menus and group selections
|
|
|
5
5
|
|
|
6
6
|
## Properties
|
|
7
7
|
|
|
8
|
-
| Property | Attribute | Type
|
|
9
|
-
|
|
10
|
-
| `data` | | `TreeData<T>`
|
|
11
|
-
| `multiple` | `multiple` | `boolean`
|
|
12
|
-
| `noRelation` | `no-relation` | `boolean`
|
|
13
|
-
| `query` | `query` | `string`
|
|
14
|
-
| `renderer` | |
|
|
15
|
-
| `stateless` | `stateless` | `boolean`
|
|
16
|
-
| `values` | | `string[]`
|
|
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 |
|
|
17
17
|
|
|
18
18
|
## Methods
|
|
19
19
|
|
|
@@ -2,7 +2,6 @@ import { JSXInterface } from '../../jsx';
|
|
|
2
2
|
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
|
-
import { TreeRenderer } from '../helpers/renderer.js';
|
|
6
5
|
import type { TreeData, TreeDataItem, TreeFilter } from '../helpers/types';
|
|
7
6
|
import { TreeManagerMode } from '../managers/tree-manager.js';
|
|
8
7
|
import './tree-item.js';
|
|
@@ -48,9 +47,8 @@ export declare class Tree<T extends TreeDataItem = TreeDataItem> extends List<T>
|
|
|
48
47
|
protected filter: TreeFilter<T> | null;
|
|
49
48
|
/**
|
|
50
49
|
* Renderer used for generating tree items
|
|
51
|
-
* @type {TreeRenderer}
|
|
52
50
|
*/
|
|
53
|
-
renderer:
|
|
51
|
+
renderer: (item: T, composer: CollectionComposer<T>, element?: HTMLElement) => HTMLElement;
|
|
54
52
|
/**
|
|
55
53
|
* Expands all groups
|
|
56
54
|
* @returns {void}
|
|
@@ -4,7 +4,7 @@ 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
6
|
import { defaultFilter } from '../helpers/filter.js';
|
|
7
|
-
import {
|
|
7
|
+
import { createTreeRenderer } from '../helpers/renderer.js';
|
|
8
8
|
import { TreeManager, TreeManagerMode } from '../managers/tree-manager.js';
|
|
9
9
|
import './tree-item.js';
|
|
10
10
|
const EXPAND_TOGGLE_ATTR = 'expand-toggle';
|
|
@@ -47,9 +47,8 @@ let Tree = class Tree extends List {
|
|
|
47
47
|
this.filter = defaultFilter(this);
|
|
48
48
|
/**
|
|
49
49
|
* Renderer used for generating tree items
|
|
50
|
-
* @type {TreeRenderer}
|
|
51
50
|
*/
|
|
52
|
-
this.renderer =
|
|
51
|
+
this.renderer = createTreeRenderer(this);
|
|
53
52
|
}
|
|
54
53
|
/**
|
|
55
54
|
* Element version number
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import type { CollectionComposer } from '@refinitiv-ui/utils/collection.js';
|
|
1
2
|
import { Renderer } from '../../list/renderer.js';
|
|
3
|
+
import type { TreeDataItem } from './types';
|
|
4
|
+
export declare const createTreeRenderer: <T extends TreeDataItem = TreeDataItem>(context?: unknown) => (item: T, composer: CollectionComposer<T>, element?: HTMLElement) => HTMLElement;
|
|
5
|
+
/**
|
|
6
|
+
* @deprecate TreeRenderer is deprecated. Use createTreeRenderer instead.
|
|
7
|
+
*/
|
|
2
8
|
export declare class TreeRenderer extends Renderer {
|
|
3
|
-
constructor(
|
|
9
|
+
constructor(context?: unknown);
|
|
4
10
|
}
|
|
@@ -1,39 +1,50 @@
|
|
|
1
|
+
import { DeprecationNotice } from '@refinitiv-ui/core';
|
|
1
2
|
import { uuid } from '@refinitiv-ui/utils/uuid.js';
|
|
2
3
|
import { getItemId } from '../../list/helpers/item-id.js';
|
|
3
4
|
import { Renderer } from '../../list/renderer.js';
|
|
4
5
|
import { CheckedState, TreeManager, TreeManagerMode } from '../managers/tree-manager.js';
|
|
6
|
+
export const createTreeRenderer = (context) => {
|
|
7
|
+
/**
|
|
8
|
+
* Renderer key prefix, used in combination with item value to give unique id to each item
|
|
9
|
+
*/
|
|
10
|
+
const key = uuid();
|
|
11
|
+
let manager;
|
|
12
|
+
let currentMode;
|
|
13
|
+
let currentComposer;
|
|
14
|
+
return (item, composer, element = document.createElement('ef-tree-item')) => {
|
|
15
|
+
// cast type to element to not break List api.
|
|
16
|
+
const _element = element;
|
|
17
|
+
const multiple = !!context && context.multiple === true;
|
|
18
|
+
const noRelation = !!context && context.noRelation === true;
|
|
19
|
+
const mode = !multiple || !noRelation ? TreeManagerMode.RELATIONAL : TreeManagerMode.INDEPENDENT;
|
|
20
|
+
if (currentComposer !== composer || currentMode !== mode) {
|
|
21
|
+
currentMode = mode;
|
|
22
|
+
currentComposer = composer;
|
|
23
|
+
manager = new TreeManager(composer, mode);
|
|
24
|
+
}
|
|
25
|
+
_element.multiple = multiple;
|
|
26
|
+
_element.item = item;
|
|
27
|
+
_element.id = getItemId(key, item.value);
|
|
28
|
+
_element.depth = composer.getItemDepth(item);
|
|
29
|
+
_element.parent = composer.getItemChildren(item).length > 0;
|
|
30
|
+
_element.expanded = manager.isItemExpanded(item);
|
|
31
|
+
_element.checkedState =
|
|
32
|
+
!multiple && _element.parent ? CheckedState.UNCHECKED : manager.getItemCheckedState(item);
|
|
33
|
+
_element.icon = composer.getItemPropertyValue(item, 'icon');
|
|
34
|
+
_element.label = composer.getItemPropertyValue(item, 'label');
|
|
35
|
+
_element.disabled = composer.getItemPropertyValue(item, 'disabled') === true;
|
|
36
|
+
_element.readonly = composer.getItemPropertyValue(item, 'readonly') === true;
|
|
37
|
+
_element.highlighted = composer.getItemPropertyValue(item, 'highlighted') === true;
|
|
38
|
+
return _element;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
const deprecationNotice = new DeprecationNotice('TreeRenderer is deprecated. Use createTreeRenderer instead.');
|
|
42
|
+
/**
|
|
43
|
+
* @deprecate TreeRenderer is deprecated. Use createTreeRenderer instead.
|
|
44
|
+
*/
|
|
5
45
|
export class TreeRenderer extends Renderer {
|
|
6
|
-
constructor(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
const key = uuid();
|
|
11
|
-
let manager;
|
|
12
|
-
let currentMode;
|
|
13
|
-
let currentComposer;
|
|
14
|
-
super((item, composer, element = document.createElement('ef-tree-item')) => {
|
|
15
|
-
const multiple = !!scope && scope.multiple === true;
|
|
16
|
-
const noRelation = !!scope && scope.noRelation === true;
|
|
17
|
-
const mode = !multiple || !noRelation ? TreeManagerMode.RELATIONAL : TreeManagerMode.INDEPENDENT;
|
|
18
|
-
if (currentComposer !== composer || currentMode !== mode) {
|
|
19
|
-
currentMode = mode;
|
|
20
|
-
currentComposer = composer;
|
|
21
|
-
manager = new TreeManager(composer, mode);
|
|
22
|
-
}
|
|
23
|
-
element.multiple = multiple;
|
|
24
|
-
element.item = item;
|
|
25
|
-
element.id = getItemId(key, item.value);
|
|
26
|
-
element.depth = composer.getItemDepth(item);
|
|
27
|
-
element.parent = composer.getItemChildren(item).length > 0;
|
|
28
|
-
element.expanded = manager.isItemExpanded(item);
|
|
29
|
-
element.checkedState =
|
|
30
|
-
!multiple && element.parent ? CheckedState.UNCHECKED : manager.getItemCheckedState(item);
|
|
31
|
-
element.icon = composer.getItemPropertyValue(item, 'icon');
|
|
32
|
-
element.label = composer.getItemPropertyValue(item, 'label');
|
|
33
|
-
element.disabled = composer.getItemPropertyValue(item, 'disabled') === true;
|
|
34
|
-
element.readonly = composer.getItemPropertyValue(item, 'readonly') === true;
|
|
35
|
-
element.highlighted = composer.getItemPropertyValue(item, 'highlighted') === true;
|
|
36
|
-
return element;
|
|
37
|
-
});
|
|
46
|
+
constructor(context) {
|
|
47
|
+
super(createTreeRenderer(context));
|
|
48
|
+
deprecationNotice.show();
|
|
38
49
|
}
|
|
39
50
|
}
|
package/lib/tree/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TreeData, TreeDataItem } from './helpers/types';
|
|
2
2
|
export * from './elements/tree.js';
|
|
3
3
|
export * from './elements/tree-item.js';
|
|
4
|
-
export { TreeRenderer } from './helpers/renderer.js';
|
|
4
|
+
export { TreeRenderer, createTreeRenderer } from './helpers/renderer.js';
|
|
5
5
|
export { TreeManager, TreeManagerMode, CheckedState } from './managers/tree-manager.js';
|
|
6
6
|
export type { TreeData, TreeDataItem };
|
package/lib/tree/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from './elements/tree.js';
|
|
2
2
|
export * from './elements/tree-item.js';
|
|
3
|
-
export { TreeRenderer } from './helpers/renderer.js';
|
|
3
|
+
export { TreeRenderer, createTreeRenderer } from './helpers/renderer.js';
|
|
4
4
|
export { TreeManager, TreeManagerMode, CheckedState } from './managers/tree-manager.js';
|
|
@@ -66,8 +66,7 @@
|
|
|
66
66
|
{
|
|
67
67
|
"name": "renderer",
|
|
68
68
|
"description": "Renderer used to render tree item elements",
|
|
69
|
-
"
|
|
70
|
-
"default": "\"new TreeSelectRenderer(this)\""
|
|
69
|
+
"default": "\"createTreeSelectRenderer<TreeSelectDataItem>(this)\""
|
|
71
70
|
},
|
|
72
71
|
{
|
|
73
72
|
"name": "max",
|
|
@@ -4,17 +4,17 @@ Dropdown control that allows selection from the tree list
|
|
|
4
4
|
|
|
5
5
|
## Properties
|
|
6
6
|
|
|
7
|
-
| Property | Attribute | Type
|
|
8
|
-
|
|
9
|
-
| `data` | | `TreeSelectData[]`
|
|
10
|
-
| `filterCount` | | `number`
|
|
11
|
-
| `max` | `max` | `string \| null`
|
|
12
|
-
| `noRelation` | `no-relation` | `boolean`
|
|
13
|
-
| `opened` | `opened` | `boolean`
|
|
14
|
-
| `placeholder` | `placeholder` | `string`
|
|
15
|
-
| `renderer` | |
|
|
16
|
-
| `showPills` | `show-pills` | `boolean`
|
|
17
|
-
| `values` | | `string[]`
|
|
7
|
+
| Property | Attribute | Type | Default | Description |
|
|
8
|
+
|---------------|---------------|--------------------|--------------------------------------------------|--------------------------------------------------|
|
|
9
|
+
| `data` | | `TreeSelectData[]` | [] | Data object to be used for creating tree |
|
|
10
|
+
| `filterCount` | | `number` | 0 | Tracks the number of filter matches<br /><br />Only needed if internal filtering is unused |
|
|
11
|
+
| `max` | `max` | `string \| null` | "" | Set maximum number of selected items |
|
|
12
|
+
| `noRelation` | `no-relation` | `boolean` | false | Breaks the relationship when multiple<br />selection mode is enabled |
|
|
13
|
+
| `opened` | `opened` | `boolean` | false | Set dropdown to open |
|
|
14
|
+
| `placeholder` | `placeholder` | `string` | "" | Set placeholder text |
|
|
15
|
+
| `renderer` | | | "createTreeSelectRenderer<TreeSelectDataItem>(this)" | Renderer used to render tree item elements |
|
|
16
|
+
| `showPills` | `show-pills` | `boolean` | false | Should the control show pills |
|
|
17
|
+
| `values` | | `string[]` | [] | Returns a values collection of the currently<br />selected item values |
|
|
18
18
|
|
|
19
19
|
## Events
|
|
20
20
|
|
|
@@ -11,12 +11,11 @@ import type { CheckChangedEvent } from '../events';
|
|
|
11
11
|
import '../icon/index.js';
|
|
12
12
|
import type { Overlay } from '../overlay';
|
|
13
13
|
import '../pill/index.js';
|
|
14
|
-
import '../tree/index.js';
|
|
15
|
-
import { TreeRenderer as TreeSelectRenderer } from '../tree/index.js';
|
|
14
|
+
import { TreeRenderer as TreeSelectRenderer, createTreeRenderer as createTreeSelectRenderer } from '../tree/index.js';
|
|
16
15
|
import type { Tree } from '../tree/index.js';
|
|
17
16
|
import { TreeManager, TreeManagerMode } from '../tree/managers/tree-manager.js';
|
|
18
17
|
import type { TreeSelectData, TreeSelectDataItem } from './helpers/types';
|
|
19
|
-
export { TreeSelectRenderer };
|
|
18
|
+
export { TreeSelectRenderer, createTreeSelectRenderer };
|
|
20
19
|
export type { TreeSelectFilter, TreeSelectDataItem, TreeSelectData };
|
|
21
20
|
/**
|
|
22
21
|
* Dropdown control that allows selection from the tree list
|
|
@@ -112,9 +111,8 @@ export declare class TreeSelect extends ComboBox<TreeSelectDataItem> {
|
|
|
112
111
|
set values(values: string[]);
|
|
113
112
|
/**
|
|
114
113
|
* Renderer used to render tree item elements
|
|
115
|
-
* @type {TreeSelectRenderer}
|
|
116
114
|
*/
|
|
117
|
-
renderer:
|
|
115
|
+
renderer: (item: import("../tree/index.js").TreeDataItem, composer: CollectionComposer<import("../tree/index.js").TreeDataItem>, element?: HTMLElement) => HTMLElement;
|
|
118
116
|
private _max;
|
|
119
117
|
/**
|
|
120
118
|
* Set maximum number of selected items
|
package/lib/tree-select/index.js
CHANGED
|
@@ -14,11 +14,10 @@ import '../checkbox/index.js';
|
|
|
14
14
|
import { ComboBox } from '../combo-box/index.js';
|
|
15
15
|
import '../icon/index.js';
|
|
16
16
|
import '../pill/index.js';
|
|
17
|
-
import '../tree/index.js';
|
|
18
|
-
import { TreeRenderer as TreeSelectRenderer } from '../tree/index.js';
|
|
17
|
+
import { TreeRenderer as TreeSelectRenderer, createTreeRenderer as createTreeSelectRenderer } from '../tree/index.js';
|
|
19
18
|
import { CheckedState, TreeManager, TreeManagerMode } from '../tree/managers/tree-manager.js';
|
|
20
19
|
import { VERSION } from '../version.js';
|
|
21
|
-
export { TreeSelectRenderer };
|
|
20
|
+
export { TreeSelectRenderer, createTreeSelectRenderer };
|
|
22
21
|
const MEMO_THROTTLE = 16;
|
|
23
22
|
const POPUP_POSITION = ['bottom-start', 'top-start'];
|
|
24
23
|
const valueFormatWarning = new WarningNotice("The specified 'values' format does not conform to the required format.");
|
|
@@ -105,9 +104,8 @@ let TreeSelect = class TreeSelect extends ComboBox {
|
|
|
105
104
|
this._values = [];
|
|
106
105
|
/**
|
|
107
106
|
* Renderer used to render tree item elements
|
|
108
|
-
* @type {TreeSelectRenderer}
|
|
109
107
|
*/
|
|
110
|
-
this.renderer =
|
|
108
|
+
this.renderer = createTreeSelectRenderer(this);
|
|
111
109
|
this._max = null;
|
|
112
110
|
/**
|
|
113
111
|
* TODO:
|
package/lib/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '7.10.
|
|
1
|
+
export const VERSION = '7.10.8';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@refinitiv-ui/elements",
|
|
3
|
-
"version": "7.10.
|
|
3
|
+
"version": "7.10.8",
|
|
4
4
|
"description": "Element Framework Elements",
|
|
5
5
|
"author": "LSEG",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -373,5 +373,5 @@
|
|
|
373
373
|
"publishConfig": {
|
|
374
374
|
"access": "public"
|
|
375
375
|
},
|
|
376
|
-
"gitHead": "
|
|
376
|
+
"gitHead": "8b23e2bfb34daf403420a349da85f7f0410dc678"
|
|
377
377
|
}
|