@refinitiv-ui/elements 6.15.5 → 6.16.1-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/lib/combo-box/custom-elements.json +1 -2
  3. package/lib/combo-box/custom-elements.md +19 -19
  4. package/lib/combo-box/helpers/renderer.d.ts +4 -0
  5. package/lib/combo-box/helpers/renderer.js +22 -15
  6. package/lib/combo-box/index.d.ts +3 -4
  7. package/lib/combo-box/index.js +3 -4
  8. package/lib/datetime-picker/index.d.ts +5 -0
  9. package/lib/datetime-picker/index.js +23 -3
  10. package/lib/heatmap/custom-elements.json +15 -2
  11. package/lib/heatmap/custom-elements.md +14 -13
  12. package/lib/heatmap/helpers/text.d.ts +3 -3
  13. package/lib/heatmap/helpers/text.js +5 -5
  14. package/lib/heatmap/index.d.ts +8 -4
  15. package/lib/heatmap/index.js +19 -10
  16. package/lib/list/custom-elements.json +1 -2
  17. package/lib/list/custom-elements.md +9 -9
  18. package/lib/list/elements/list.d.ts +1 -3
  19. package/lib/list/elements/list.js +2 -3
  20. package/lib/list/extensible-function.d.ts +2 -3
  21. package/lib/list/extensible-function.js +2 -3
  22. package/lib/list/helpers/renderer.d.ts +4 -0
  23. package/lib/list/helpers/renderer.js +36 -32
  24. package/lib/list/index.d.ts +1 -1
  25. package/lib/list/index.js +1 -1
  26. package/lib/list/renderer.d.ts +2 -30
  27. package/lib/list/renderer.js +2 -3
  28. package/lib/tree/custom-elements.json +1 -1
  29. package/lib/tree/custom-elements.md +9 -9
  30. package/lib/tree/elements/tree.d.ts +1 -2
  31. package/lib/tree/elements/tree.js +2 -2
  32. package/lib/tree/helpers/renderer.d.ts +7 -1
  33. package/lib/tree/helpers/renderer.js +43 -32
  34. package/lib/tree/index.d.ts +1 -1
  35. package/lib/tree/index.js +1 -1
  36. package/lib/tree-select/custom-elements.json +1 -2
  37. package/lib/tree-select/custom-elements.md +11 -11
  38. package/lib/tree-select/index.d.ts +3 -5
  39. package/lib/tree-select/index.js +3 -5
  40. package/lib/version.js +1 -1
  41. 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
+ # [6.16.0](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@6.15.5...@refinitiv-ui/elements@6.16.0) (2024-02-27)
7
+
8
+ ### Features
9
+
10
+ - **heatmap:** add new config in Heatmap to customise maximum font size in the cells ([bb0b767](https://github.com/Refinitiv/refinitiv-ui/commit/bb0b7674f479b62c5699b2027086df9704eafcd9))
11
+
6
12
  ## [6.15.5](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/elements@6.15.4...@refinitiv-ui/elements@6.15.5) (2024-02-19)
7
13
 
8
14
  **Note:** Version bump only for package @refinitiv-ui/elements
@@ -82,8 +82,7 @@
82
82
  {
83
83
  "name": "renderer",
84
84
  "description": "Renderer used to render list item elements",
85
- "type": "ComboBoxRenderer",
86
- "default": "\"new ComboBoxRenderer(this)\""
85
+ "default": "\"createComboBoxRenderer<T>(this)\""
87
86
  },
88
87
  {
89
88
  "name": "multiple",
@@ -4,25 +4,25 @@ Combines a popup with a filterable selection list
4
4
 
5
5
  ## Properties
6
6
 
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` | | `ComboBoxRenderer` | "new ComboBoxRenderer(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 |
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 { ListRenderer } from '../../list/index.js';
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
- const listRenderer = new ListRenderer(context);
10
- super((item, composer, element) => {
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
  }
@@ -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: ComboBoxRenderer;
57
+ renderer: (item: T, composer: CollectionComposer<T>, element?: HTMLElement | undefined) => HTMLElement;
59
58
  private _multiple;
60
59
  /**
61
60
  * Multiple selection mode
@@ -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 = new ComboBoxRenderer(this);
60
+ this.renderer = createComboBoxRenderer(this);
62
61
  this._multiple = false;
63
62
  /**
64
63
  * Track opened state of popup
@@ -427,6 +427,11 @@ export declare class DatetimePicker extends FormFieldElement implements MultiVal
427
427
  * @returns true if `from` is before or the same as `to`
428
428
  */
429
429
  private isFromBeforeTo;
430
+ /**
431
+ * Check if `values` correspond to dates that are allowed within the conditions of weekdays or weekends
432
+ * @returns false if `values` don't correspond to dates that are allowed within the conditions of weekdays or weekends.
433
+ */
434
+ private isValidDay;
430
435
  /**
431
436
  * Check if datetime picker has an error
432
437
  * @returns true if error
@@ -8,7 +8,7 @@ import { property } from '@refinitiv-ui/core/decorators/property.js';
8
8
  import { query } from '@refinitiv-ui/core/decorators/query.js';
9
9
  import '@refinitiv-ui/phrasebook/locale/en/datetime-picker.js';
10
10
  import { TranslatePropertyKey, getLocale, translate } from '@refinitiv-ui/translate';
11
- import { DateFormat, DateTimeFormat, addMonths, format, isAfter, isBefore, isValidDate, isValidDateTime, parse, subMonths } from '@refinitiv-ui/utils/date.js';
11
+ import { DateFormat, DateTimeFormat, addMonths, format, isAfter, isBefore, isValidDate, isValidDateTime, isWeekend, parse, subMonths } from '@refinitiv-ui/utils/date.js';
12
12
  import '../calendar/index.js';
13
13
  import '../icon/index.js';
14
14
  import { preload } from '../icon/index.js';
@@ -443,7 +443,9 @@ let DatetimePicker = class DatetimePicker extends FormFieldElement {
443
443
  if ((changedProperties.has('_values') && changedProperties.get('_values') !== undefined) ||
444
444
  (changedProperties.has('min') && changedProperties.get('min') !== undefined) ||
445
445
  (changedProperties.has('max') && changedProperties.get('max') !== undefined) ||
446
- (changedProperties.has('showSeconds') && changedProperties.get('showSeconds') !== undefined)) {
446
+ (changedProperties.has('showSeconds') && changedProperties.get('showSeconds') !== undefined) ||
447
+ (changedProperties.has('weekdaysOnly') && changedProperties.get('weekdaysOnly') !== undefined) ||
448
+ (changedProperties.has('weekendsOnly') && changedProperties.get('weekendsOnly') !== undefined)) {
447
449
  return true;
448
450
  }
449
451
  return false;
@@ -898,12 +900,30 @@ let DatetimePicker = class DatetimePicker extends FormFieldElement {
898
900
  }
899
901
  return true;
900
902
  }
903
+ /**
904
+ * Check if `values` correspond to dates that are allowed within the conditions of weekdays or weekends
905
+ * @returns false if `values` don't correspond to dates that are allowed within the conditions of weekdays or weekends.
906
+ */
907
+ isValidDay() {
908
+ for (const value of this.values) {
909
+ if (this.weekdaysOnly && isWeekend(value)) {
910
+ return false;
911
+ }
912
+ if (this.weekendsOnly && !isWeekend(value)) {
913
+ return false;
914
+ }
915
+ }
916
+ return true;
917
+ }
901
918
  /**
902
919
  * Check if datetime picker has an error
903
920
  * @returns true if error
904
921
  */
905
922
  hasError() {
906
- return !(this.isValidFormat() && this.isValueWithinMinMax() && this.isFromBeforeTo());
923
+ return !(this.isValidFormat() &&
924
+ this.isValueWithinMinMax() &&
925
+ this.isFromBeforeTo() &&
926
+ this.isValidDay());
907
927
  }
908
928
  /**
909
929
  * Toggles the opened state of the list
@@ -12,7 +12,7 @@
12
12
  },
13
13
  {
14
14
  "name": "label-width",
15
- "description": "Number of maximum label width that cell can paint in pixel.\ne.g. label-width: 30px; cell label hides when text length reaches 30px.",
15
+ "description": "Set minimum text length to be shown on cells. Unit in pixel.\ne.g. label-width = 30; cell's label is hidden when text length is less than 30px.",
16
16
  "type": "number",
17
17
  "default": "0"
18
18
  },
@@ -57,6 +57,12 @@
57
57
  "description": "Cell minimum color saturation, value can be from 0 - 1",
58
58
  "type": "number",
59
59
  "default": "0.4"
60
+ },
61
+ {
62
+ "name": "label-max-font-size",
63
+ "description": "Maximum font size of label in cells, value in pixel unit e.g. 18",
64
+ "type": "number",
65
+ "default": "16"
60
66
  }
61
67
  ],
62
68
  "properties": [
@@ -69,7 +75,7 @@
69
75
  {
70
76
  "name": "labelWidth",
71
77
  "attribute": "label-width",
72
- "description": "Number of maximum label width that cell can paint in pixel.\ne.g. label-width: 30px; cell label hides when text length reaches 30px.",
78
+ "description": "Set minimum text length to be shown on cells. Unit in pixel.\ne.g. label-width = 30; cell's label is hidden when text length is less than 30px.",
73
79
  "type": "number",
74
80
  "default": "0"
75
81
  },
@@ -122,6 +128,13 @@
122
128
  "type": "number",
123
129
  "default": "0.4"
124
130
  },
131
+ {
132
+ "name": "labelMaxFontSize",
133
+ "attribute": "label-max-font-size",
134
+ "description": "Maximum font size of label in cells, value in pixel unit e.g. 18",
135
+ "type": "number",
136
+ "default": "16"
137
+ },
125
138
  {
126
139
  "name": "tooltipCallback",
127
140
  "description": "A callback function that allows tooltip rendering on cell hover",
@@ -5,19 +5,20 @@ values contained in a matrix are represented as colors
5
5
 
6
6
  ## Properties
7
7
 
8
- | Property | Attribute | Type | Default | Description |
9
- |-------------------|----------------|--------------------------|---------|--------------------------------------------------|
10
- | `axisHidden` | `axis-hidden` | `boolean` | false | Hide all axes |
11
- | `blend` | `blend` | `boolean` | false | Enable cell color blending |
12
- | `config` | `config` | `HeatmapConfig` | null | Heatmap configuration options. |
13
- | `labelHidden` | `label-hidden` | `boolean` | false | Hide all labels in the cells |
14
- | `labelWidth` | `label-width` | `number` | 0 | Number of maximum label width that cell can paint in pixel.<br />e.g. label-width: 30px; cell label hides when text length reaches 30px. |
15
- | `maxPoint` | `max-point` | `number` | 1 | Maximum point of the cell coloring |
16
- | `midPoint` | `mid-point` | `number` | 0 | Middle point of the cell coloring |
17
- | `minPoint` | `min-point` | `number` | -1 | Minimum point of the cell coloring |
18
- | `renderCallback` | | `HeatmapRenderCallback` | | Render callback function use for custom cell properties.<br />Accepts custom label, foreground and background color |
19
- | `saturation` | `saturation` | `number` | 0.4 | Cell minimum color saturation, value can be from 0 - 1 |
20
- | `tooltipCallback` | | `HeatmapTooltipCallback` | | A callback function that allows tooltip rendering on cell hover |
8
+ | Property | Attribute | Type | Default | Description |
9
+ |--------------------|-----------------------|--------------------------|---------|--------------------------------------------------|
10
+ | `axisHidden` | `axis-hidden` | `boolean` | false | Hide all axes |
11
+ | `blend` | `blend` | `boolean` | false | Enable cell color blending |
12
+ | `config` | `config` | `HeatmapConfig` | null | Heatmap configuration options. |
13
+ | `labelHidden` | `label-hidden` | `boolean` | false | Hide all labels in the cells |
14
+ | `labelMaxFontSize` | `label-max-font-size` | `number` | 16 | Maximum font size of label in cells, value in pixel unit e.g. 18 |
15
+ | `labelWidth` | `label-width` | `number` | 0 | Set minimum text length to be shown on cells. Unit in pixel.<br />e.g. label-width = 30; cell's label is hidden when text length is less than 30px. |
16
+ | `maxPoint` | `max-point` | `number` | 1 | Maximum point of the cell coloring |
17
+ | `midPoint` | `mid-point` | `number` | 0 | Middle point of the cell coloring |
18
+ | `minPoint` | `min-point` | `number` | -1 | Minimum point of the cell coloring |
19
+ | `renderCallback` | | `HeatmapRenderCallback` | | Render callback function use for custom cell properties.<br />Accepts custom label, foreground and background color |
20
+ | `saturation` | `saturation` | `number` | 0.4 | Cell minimum color saturation, value can be from 0 - 1 |
21
+ | `tooltipCallback` | | `HeatmapTooltipCallback` | | A callback function that allows tooltip rendering on cell hover |
21
22
 
22
23
  ## Methods
23
24
 
@@ -1,14 +1,14 @@
1
1
  import type { HeatmapCell } from './types';
2
2
  declare const MIN_FONT_SIZE = 12;
3
- declare const MAX_FONT_SIZE = 16;
4
3
  /**
5
4
  * Calculate responsive font size according to the screen width
6
5
  * @param ratio font ratio
7
6
  * @param cellHeight cell's height
8
7
  * @param cellWidth cell's width
8
+ * @param cellMaxFontSize cell's max font size
9
9
  * @returns font size
10
10
  */
11
- declare const getResponsiveFontSize: (ratio: number, cellHeight: number, cellWidth: number) => number;
11
+ declare const getResponsiveFontSize: (ratio: number, cellHeight: number, cellWidth: number, cellMaxFontSize: number) => number;
12
12
  /**
13
13
  * Get maximum text width out of all the cell by sampling
14
14
  * @param ctx canvas context
@@ -17,4 +17,4 @@ declare const getResponsiveFontSize: (ratio: number, cellHeight: number, cellWid
17
17
  * @returns label width measured in canvas
18
18
  */
19
19
  declare const getMaximumTextWidth: (ctx: CanvasRenderingContext2D, cells: HeatmapCell[], hasCellHeader: boolean) => number;
20
- export { getResponsiveFontSize, getMaximumTextWidth, MIN_FONT_SIZE, MAX_FONT_SIZE };
20
+ export { getResponsiveFontSize, getMaximumTextWidth, MIN_FONT_SIZE };
@@ -1,19 +1,19 @@
1
1
  const MIN_FONT_SIZE = 12;
2
- const MAX_FONT_SIZE = 16;
3
2
  /**
4
3
  * Calculate responsive font size according to the screen width
5
4
  * @param ratio font ratio
6
5
  * @param cellHeight cell's height
7
6
  * @param cellWidth cell's width
7
+ * @param cellMaxFontSize cell's max font size
8
8
  * @returns font size
9
9
  */
10
- const getResponsiveFontSize = (ratio, cellHeight, cellWidth) => {
10
+ const getResponsiveFontSize = (ratio, cellHeight, cellWidth, cellMaxFontSize) => {
11
11
  let fontSize = Math.round(Math.min(cellHeight, cellWidth) * ratio);
12
12
  if (fontSize < MIN_FONT_SIZE) {
13
13
  fontSize = MIN_FONT_SIZE;
14
14
  }
15
- else if (fontSize > MAX_FONT_SIZE) {
16
- fontSize = MAX_FONT_SIZE;
15
+ else if (fontSize > cellMaxFontSize) {
16
+ fontSize = cellMaxFontSize;
17
17
  }
18
18
  return fontSize;
19
19
  };
@@ -71,4 +71,4 @@ const getMaximumTextWidth = (ctx, cells, hasCellHeader) => {
71
71
  }
72
72
  return maxTextWidth;
73
73
  };
74
- export { getResponsiveFontSize, getMaximumTextWidth, MIN_FONT_SIZE, MAX_FONT_SIZE };
74
+ export { getResponsiveFontSize, getMaximumTextWidth, MIN_FONT_SIZE };
@@ -27,8 +27,8 @@ export declare class Heatmap extends ResponsiveElement {
27
27
  */
28
28
  config: HeatmapConfig | null;
29
29
  /**
30
- * Number of maximum label width that cell can paint in pixel.
31
- * e.g. label-width: 30px; cell label hides when text length reaches 30px.
30
+ * Set minimum text length to be shown on cells. Unit in pixel.
31
+ * e.g. label-width = 30; cell's label is hidden when text length is less than 30px.
32
32
  */
33
33
  labelWidth: number;
34
34
  /**
@@ -65,6 +65,10 @@ export declare class Heatmap extends ResponsiveElement {
65
65
  * Cell minimum color saturation, value can be from 0 - 1
66
66
  */
67
67
  saturation: number;
68
+ /**
69
+ * Maximum font size of label in cells, value in pixel unit e.g. 18
70
+ */
71
+ labelMaxFontSize: number;
68
72
  /**
69
73
  * Returns data of interactive cell
70
74
  * @param {MouseEvent} event A MouseEvent that occurs when Heatmap is being interacted
@@ -330,9 +334,9 @@ export declare class Heatmap extends ResponsiveElement {
330
334
  */
331
335
  private paintAllLabel;
332
336
  /**
333
- * Calculates space between header and label using cell's height
334
- * Maximum 10 pixels
337
+ * Calculates space between header and label
335
338
  * @param cellHeight in pixels
339
+ * @param cellWidth in pixels
336
340
  * @returns in pixels
337
341
  */
338
342
  private calculateHeaderMargin;
@@ -149,8 +149,8 @@ let Heatmap = class Heatmap extends ResponsiveElement {
149
149
  */
150
150
  this.config = null;
151
151
  /**
152
- * Number of maximum label width that cell can paint in pixel.
153
- * e.g. label-width: 30px; cell label hides when text length reaches 30px.
152
+ * Set minimum text length to be shown on cells. Unit in pixel.
153
+ * e.g. label-width = 30; cell's label is hidden when text length is less than 30px.
154
154
  */
155
155
  this.labelWidth = 0;
156
156
  /**
@@ -181,6 +181,10 @@ let Heatmap = class Heatmap extends ResponsiveElement {
181
181
  * Cell minimum color saturation, value can be from 0 - 1
182
182
  */
183
183
  this.saturation = 0.4;
184
+ /**
185
+ * Maximum font size of label in cells, value in pixel unit e.g. 18
186
+ */
187
+ this.labelMaxFontSize = 16;
184
188
  /**
185
189
  * Current active cell
186
190
  */
@@ -630,14 +634,16 @@ let Heatmap = class Heatmap extends ResponsiveElement {
630
634
  }
631
635
  }
632
636
  /**
633
- * Calculates space between header and label using cell's height
634
- * Maximum 10 pixels
637
+ * Calculates space between header and label
635
638
  * @param cellHeight in pixels
639
+ * @param cellWidth in pixels
636
640
  * @returns in pixels
637
641
  */
638
- calculateHeaderMargin(cellHeight) {
639
- const margin = (cellHeight / 10) * 2;
640
- return margin > 10 ? 10 : margin;
642
+ calculateHeaderMargin(cellHeight, cellWidth) {
643
+ const margin = 18; // maximum margin
644
+ const maxValue = Math.max(cellHeight, cellWidth);
645
+ const minValue = Math.min(cellHeight, cellWidth);
646
+ return margin / (maxValue / minValue);
641
647
  }
642
648
  /**
643
649
  * Paints label to a single cell
@@ -653,7 +659,7 @@ let Heatmap = class Heatmap extends ResponsiveElement {
653
659
  cell.foregroundColor === undefined) {
654
660
  return;
655
661
  }
656
- const margin = cell.header ? this.calculateHeaderMargin(cell.height) : 0;
662
+ const margin = cell.header ? this.calculateHeaderMargin(cell.height, cell.width) : 0;
657
663
  const label = typeof cell.customLabel === 'string' ? cell.customLabel : cell.label;
658
664
  this.canvasContext.fillStyle = cell.customForegroundColor || cell.foregroundColor;
659
665
  this.canvasContext.fillText(label || '', cell.x + cell.width / 2, cell.y + 1 + cell.height / 2 + margin);
@@ -676,7 +682,7 @@ let Heatmap = class Heatmap extends ResponsiveElement {
676
682
  this.contentWithinCellBoundary = false;
677
683
  return this.contentWithinCellBoundary;
678
684
  }
679
- let fontSize = getResponsiveFontSize(fontRatio, contentHeight, contentWidth);
685
+ let fontSize = getResponsiveFontSize(fontRatio, contentHeight, contentWidth, this.labelMaxFontSize);
680
686
  canvas.textAlign = 'center';
681
687
  canvas.textBaseline = 'middle';
682
688
  canvas.font = `${fontSize}px ${fontFamily}`;
@@ -812,7 +818,7 @@ let Heatmap = class Heatmap extends ResponsiveElement {
812
818
  return;
813
819
  }
814
820
  const labelFontStyle = this.canvasContext.font;
815
- const margin = this.labelHidden ? 0 : this.calculateHeaderMargin(cell.height);
821
+ const margin = this.labelHidden ? 0 : this.calculateHeaderMargin(cell.height, cell.width);
816
822
  this.canvasContext.font = 'bold ' + labelFontStyle;
817
823
  this.canvasContext.fillStyle = cell.customForegroundColor || cell.foregroundColor;
818
824
  this.canvasContext.fillText(cell.header || '', cell.x + cell.width / 2, cell.y + 1 + cell.height / 2 - margin);
@@ -1098,6 +1104,9 @@ __decorate([
1098
1104
  __decorate([
1099
1105
  property({ type: Number })
1100
1106
  ], Heatmap.prototype, "saturation", void 0);
1107
+ __decorate([
1108
+ property({ type: Number, attribute: 'label-max-font-size' })
1109
+ ], Heatmap.prototype, "labelMaxFontSize", void 0);
1101
1110
  __decorate([
1102
1111
  property({ attribute: false })
1103
1112
  ], Heatmap.prototype, "tooltipCallback", void 0);
@@ -34,8 +34,7 @@
34
34
  {
35
35
  "name": "renderer",
36
36
  "description": "Renderer used to render list item elements",
37
- "type": "ListRenderer",
38
- "default": "\"new ListRenderer(this)\""
37
+ "default": "\"createListRenderer<T>(this)\""
39
38
  },
40
39
  {
41
40
  "name": "stateless",
@@ -4,15 +4,15 @@ Provides listing and immutable selection
4
4
 
5
5
  ## Properties
6
6
 
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` | | `ListRenderer` | "new ListRenderer(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 |
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: ListRenderer;
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 { ListRenderer } from '../helpers/renderer.js';
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 = new ListRenderer(this);
59
+ this.renderer = createListRenderer(this);
61
60
  /**
62
61
  * Disable selections
63
62
  */
@@ -1,7 +1,6 @@
1
1
  /**
2
- * Extensible function class
3
- * TODO: Move this to @refinitiv-ui/utils
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
- * Extensible function class
3
- * TODO: Move this to @refinitiv-ui/utils
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,47 @@
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
- /**
15
- * Create and return render function
16
- */
17
- super((item, composer, element) => {
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
- });
44
+ super(createListRenderer(context));
45
+ deprecationNotice.show();
42
46
  }
43
47
  }
@@ -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
@@ -1,3 +1,3 @@
1
1
  export * from './elements/list.js';
2
2
  export * from './elements/list-item.js';
3
- export { ListRenderer } from './helpers/renderer.js';
3
+ export { ListRenderer, createListRenderer } from './helpers/renderer.js';
@@ -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
- * Render function interface
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
- * TODO: Move this to @refinitiv-ui/utils
33
- * ! Do not import this module !
5
+ * @deprecate Renderer is deprecated.
34
6
  */
35
7
  export declare abstract class Renderer extends ExtensibleFunction {
36
8
  }
@@ -1,9 +1,8 @@
1
1
  import { ExtensibleFunction } from './extensible-function.js';
2
2
  /**
3
- * Renderer base class.
3
+ * Do not use: Renderer is not CSP compliant.
4
4
  * Used for creating renderers to render data items.
5
- * TODO: Move this to @refinitiv-ui/utils
6
- * ! Do not import this module !
5
+ * @deprecate Renderer is deprecated.
7
6
  */
8
7
  export class Renderer extends ExtensibleFunction {
9
8
  }
@@ -56,7 +56,7 @@
56
56
  "name": "renderer",
57
57
  "description": "Renderer used for generating tree items",
58
58
  "type": "TreeRenderer",
59
- "default": "\"new TreeRenderer(this)\""
59
+ "default": "\"createTreeRenderer<T>(this)\""
60
60
  },
61
61
  {
62
62
  "name": "values",
@@ -5,15 +5,15 @@ 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` | | `TreeRenderer` | "new TreeRenderer(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
+ | `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` | | `TreeRenderer` | "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';
@@ -50,7 +49,7 @@ export declare class Tree<T extends TreeDataItem = TreeDataItem> extends List<T>
50
49
  * Renderer used for generating tree items
51
50
  * @type {TreeRenderer}
52
51
  */
53
- renderer: TreeRenderer;
52
+ renderer: (item: T, composer: CollectionComposer<T>, element?: HTMLElement) => HTMLElement;
54
53
  /**
55
54
  * Expands all groups
56
55
  * @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 { TreeRenderer } from '../helpers/renderer.js';
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';
@@ -49,7 +49,7 @@ let Tree = class Tree extends List {
49
49
  * Renderer used for generating tree items
50
50
  * @type {TreeRenderer}
51
51
  */
52
- this.renderer = new TreeRenderer(this);
52
+ this.renderer = createTreeRenderer(this);
53
53
  }
54
54
  /**
55
55
  * 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(scope?: unknown);
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(scope) {
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
- 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
  }
@@ -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
- "type": "TreeSelectRenderer",
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 | 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` | | `TreeSelectRenderer` | "new TreeSelectRenderer(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 |
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: TreeSelectRenderer;
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
@@ -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 = new TreeSelectRenderer(this);
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 = '6.15.5';
1
+ export const VERSION = '6.16.1-next.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@refinitiv-ui/elements",
3
- "version": "6.15.5",
3
+ "version": "6.16.1-next.0",
4
4
  "description": "Element Framework Elements",
5
5
  "author": "LSEG",
6
6
  "license": "Apache-2.0",
@@ -370,5 +370,5 @@
370
370
  "publishConfig": {
371
371
  "access": "public"
372
372
  },
373
- "gitHead": "44fc7481eb1a179cca96795cdd46018e45448c9c"
373
+ "gitHead": "0325a57b2c0ce3258a175bea5e8743e79c3a7ba4"
374
374
  }