@3t-transform/threeteeui 0.2.79 → 0.2.81

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 (45) hide show
  1. package/dist/cjs/{domsanitiser.options-1dfa7205.js → domsanitiser.options-32e670aa.js} +115 -75
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/tttx-dialog-box.cjs.entry.js +1 -1
  4. package/dist/cjs/tttx-form.cjs.entry.js +1 -1
  5. package/dist/cjs/tttx-list.cjs.entry.js +1 -1
  6. package/dist/cjs/tttx-multiselect-box.cjs.entry.js +1 -1
  7. package/dist/cjs/tttx-select-box.cjs.entry.js +1 -1
  8. package/dist/cjs/tttx-tabs.cjs.entry.js +1 -1
  9. package/dist/cjs/tttx-textarea.cjs.entry.js +1 -1
  10. package/dist/cjs/tttx-tree-view.cjs.entry.js +39 -12
  11. package/dist/cjs/tttx.cjs.js +1 -1
  12. package/dist/collection/components/molecules/tttx-textarea/tttx-textarea.css +6 -0
  13. package/dist/collection/components/molecules/tttx-tree-view/tttx-tree-view.css +31 -3
  14. package/dist/collection/components/molecules/tttx-tree-view/tttx-tree-view.js +39 -11
  15. package/dist/collection/components/molecules/tttx-tree-view/tttx-tree-view.stories.js +95 -8
  16. package/dist/components/domsanitiser.options.js +115 -75
  17. package/dist/components/tttx-textarea.js +1 -1
  18. package/dist/components/tttx-tree-view.js +40 -12
  19. package/dist/esm/{domsanitiser.options-97a33389.js → domsanitiser.options-68752a19.js} +115 -75
  20. package/dist/esm/loader.js +1 -1
  21. package/dist/esm/tttx-dialog-box.entry.js +1 -1
  22. package/dist/esm/tttx-form.entry.js +1 -1
  23. package/dist/esm/tttx-list.entry.js +1 -1
  24. package/dist/esm/tttx-multiselect-box.entry.js +1 -1
  25. package/dist/esm/tttx-select-box.entry.js +1 -1
  26. package/dist/esm/tttx-tabs.entry.js +1 -1
  27. package/dist/esm/tttx-textarea.entry.js +1 -1
  28. package/dist/esm/tttx-tree-view.entry.js +39 -12
  29. package/dist/esm/tttx.js +1 -1
  30. package/dist/tttx/{p-f34bface.entry.js → p-02da8327.entry.js} +1 -1
  31. package/dist/tttx/{p-b30a1025.entry.js → p-1c3ab606.entry.js} +1 -1
  32. package/dist/tttx/{p-5f1f699d.entry.js → p-4a967804.entry.js} +1 -1
  33. package/dist/tttx/{p-ed345372.entry.js → p-55831705.entry.js} +1 -1
  34. package/dist/tttx/p-62115838.entry.js +1 -0
  35. package/dist/tttx/p-88ee2406.js +3 -0
  36. package/dist/tttx/{p-129df5a2.entry.js → p-9556a164.entry.js} +1 -1
  37. package/dist/tttx/{p-887f56cb.entry.js → p-a3b446f8.entry.js} +1 -1
  38. package/dist/tttx/{p-67c342d7.entry.js → p-f4594fe2.entry.js} +1 -1
  39. package/dist/tttx/tttx.esm.js +1 -1
  40. package/dist/types/components/molecules/tttx-tree-view/helper/helper.d.ts +5 -0
  41. package/dist/types/components/molecules/tttx-tree-view/tttx-tree-view.d.ts +11 -0
  42. package/dist/types/components/molecules/tttx-tree-view/tttx-tree-view.stories.d.ts +2 -0
  43. package/package.json +2 -2
  44. package/dist/tttx/p-5ed38d61.js +0 -3
  45. package/dist/tttx/p-75c31e23.entry.js +0 -1
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-4cfa8e25.js');
6
- const domsanitiser_options = require('./domsanitiser.options-1dfa7205.js');
6
+ const domsanitiser_options = require('./domsanitiser.options-32e670aa.js');
7
7
  require('./_commonjsHelpers-537d719a.js');
8
8
 
9
- const tttxTreeViewCss = ".material-symbols-rounded{font-variation-settings:\"FILL\" 1, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24}.tree-view-element{margin-left:-50px}.inline-tree-item{display:flex;align-items:center}.element{display:flex;flex-flow:row nowrap;justify-content:flex-start;align-items:center;width:100%}.element-row{min-height:36px;font-family:\"Roboto\", serif;font-size:16px;padding:8px 0px;border-bottom:1px solid #d5d5d5}.rowHover{cursor:pointer}li{list-style-type:none}.toggleNode{padding-right:3px}.padding-icon{padding:6px 6px;height:24px;width:24px;display:flex;align-items:center;justify-content:center}.treeNode{font-weight:500}.treeLeaf{font-weight:400}.right-buttons-container{margin-left:auto;display:flex}.borderless:active{outline-style:none}@media (hover: hover){.rowHover:hover{background-color:rgba(17, 17, 17, 0.05)}}";
9
+ const tttxTreeViewCss = ".material-symbols-rounded{font-variation-settings:\"FILL\" 1, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24}.tree-view-element{margin-left:-50px}.inline-tree-item{display:flex;align-items:center}.element{display:flex;flex-flow:row nowrap;justify-content:flex-start;align-items:center;width:100%}.element-row{min-height:36px;font-family:\"Roboto\", serif;font-size:16px;padding:8px 0px;position:relative}.element-row::before{content:\"\";position:absolute;left:-50%;right:-50%;bottom:0;border-bottom:1px solid #d5d5d5}.element-row.rowSelected::before{content:\"\";position:absolute;left:-50%;right:-50%;top:0;bottom:0;background-color:rgba(17, 17, 17, 0.1);z-index:-1}li{list-style-type:none}.toggleNode{padding-right:3px}.padding-icon{padding:6px 6px;height:24px;width:24px;display:flex;align-items:center;justify-content:center}.treeNode{font-weight:500}.treeLeaf{font-weight:400}.right-buttons-container{margin-left:auto;display:flex}.borderless:active{outline-style:none}@media (hover: hover){.element-row.rowHover:hover{cursor:pointer}.element-row.rowHover:hover::before{content:\"\";position:absolute;left:-50%;right:-50%;top:0;bottom:0;background-color:rgba(17, 17, 17, 0.05);opacity:0.5;z-index:-1}}";
10
10
 
11
11
  const TttxTreeView = class {
12
12
  constructor(hostRef) {
@@ -14,11 +14,24 @@ const TttxTreeView = class {
14
14
  this.clickEvent = index.createEvent(this, "clickEvent", 7);
15
15
  this.data = undefined;
16
16
  this.treeData = undefined;
17
+ this.selectedId = undefined;
17
18
  }
18
19
  onClickHandler(clickName, event, node) {
19
20
  event.stopPropagation();
20
21
  const returnJsonObject = JSON.stringify(node);
21
22
  this.clickEvent.emit({ eventName: clickName, returnJsonObject });
23
+ if (clickName === 'row') {
24
+ this.selectedElement(event, node);
25
+ }
26
+ }
27
+ //for testing as SelectedId is a state
28
+ updateSelectedId(newId) {
29
+ this.selectedId = newId;
30
+ }
31
+ selectedElement(event, node) {
32
+ event.stopPropagation();
33
+ this.selectedId = node.id;
34
+ this.treeData = [...this.treeData];
22
35
  }
23
36
  toggleNode(node, event) {
24
37
  event.stopPropagation();
@@ -39,7 +52,14 @@ const TttxTreeView = class {
39
52
  });
40
53
  }
41
54
  }
42
- renderNode(node) {
55
+ updateSelected(node) {
56
+ let selected = false;
57
+ if (node.id === this.selectedId) {
58
+ selected = true;
59
+ }
60
+ return selected;
61
+ }
62
+ treeConfigs(node) {
43
63
  let checkboxIcon, checkboxColor;
44
64
  if (node.checked) {
45
65
  checkboxIcon = 'check_box';
@@ -49,29 +69,36 @@ const TttxTreeView = class {
49
69
  checkboxIcon = 'check_box_outline_blank';
50
70
  checkboxColor = 'grey';
51
71
  }
52
- const rowHoverActive = node.chevronActive ? 'rowHover' : '';
72
+ const rowHoverActive = node.hasHover ? 'rowHover' : '';
53
73
  const expanderIcon = node.isOpen ? 'arrow_drop_down' : 'arrow_right';
54
- if (node.child && node.child.length > 0) {
55
- return (index.h("li", null, index.h("div", { class: `inline-tree-item element-row ${rowHoverActive}`, onClick: (event) => {
56
- if (node.chevronActive) {
74
+ const selectedActive = node.selectable && node.selected ? 'rowSelected' : '';
75
+ return { checkboxColor, checkboxIcon, rowHoverActive, expanderIcon, selectedActive };
76
+ }
77
+ renderNode(node) {
78
+ if (node.selectable)
79
+ node.selected = this.updateSelected(node);
80
+ const options = this.treeConfigs(node);
81
+ if (node.child) {
82
+ return (index.h("li", null, index.h("div", { class: `inline-tree-item element-row ${options.rowHoverActive} ${options.selectedActive}`, onClick: (event) => {
83
+ if (node.hasHover) {
57
84
  event.stopPropagation();
58
85
  this.onClickHandler('row', event, node);
59
86
  }
60
- } }, index.h("tttx-button", { class: "toggleNode", design: "borderless-circle", notext: true, icon: expanderIcon, color: "black", onClick: event => this.toggleNode(node, event) }), this.htmlcode('treeNode', node, checkboxIcon, checkboxColor)), node.isOpen ? (index.h("ul", null, index.h("div", { class: "child-node" }, node.child.map(childNode => {
87
+ } }, index.h("tttx-button", { class: "toggleNode", design: "borderless-circle", notext: true, icon: options.expanderIcon, color: "black", onClick: event => this.toggleNode(node, event) }), this.htmlcode('treeNode', node, options.checkboxIcon, options.checkboxColor)), node.isOpen ? (index.h("ul", null, index.h("div", { class: "child-node" }, node.child.map(childNode => {
61
88
  return this.renderNode(childNode);
62
89
  })))) : null));
63
90
  }
64
91
  else {
65
- return (index.h("li", null, index.h("div", { class: `inline-tree-item element-row ${rowHoverActive}`, onClick: (event) => {
66
- if (node.chevronActive) {
92
+ return (index.h("li", null, index.h("div", { class: `inline-tree-item element-row ${options.rowHoverActive} ${options.selectedActive}`, onClick: (event) => {
93
+ if (node.hasHover) {
67
94
  event.stopPropagation();
68
95
  this.onClickHandler('row', event, node);
69
96
  }
70
- } }, this.htmlcode('treeLeaf', node, checkboxIcon, checkboxColor))));
97
+ } }, this.htmlcode('treeLeaf', node, options.checkboxIcon, options.checkboxColor))));
71
98
  }
72
99
  }
73
100
  htmlcode(type, node, check_box, check_boxColor) {
74
- const htmlcode = (index.h("div", { class: 'inline-tree-item element' }, node.hasCheckbox && (index.h("tttx-button", { design: "borderless-circle", notext: true, icon: check_box, iconcolor: check_boxColor, class: "padding-icon checkbox", onClick: event => this.handleCheckboxChange(node, event) })), !node.html && node.hasIcon && index.h("tttx-icon", { icon: node.icon, color: node.iconColor, class: "padding-icon" }), !node.html && index.h("div", { class: type }, node.title), node.html && index.h("div", { class: type, innerHTML: domsanitiser_options.purify.sanitize(node.html, domsanitiser_options.domSanitiserOptions) }), (node.menuActive || node.chevronActive) && (index.h("div", { class: "right-buttons-container" }, node.menuActive && (index.h("tttx-button", { design: "borderless-circle", notext: true, icon: "more_vert", color: "black", class: "padding-icon menu-button", onClick: (event) => {
101
+ const htmlcode = (index.h("div", { class: "inline-tree-item element" }, node.hasCheckbox && (index.h("tttx-button", { design: "borderless-circle", notext: true, icon: check_box, iconcolor: check_boxColor, class: "padding-icon checkbox", onClick: event => this.handleCheckboxChange(node, event) })), !node.html && node.hasIcon && index.h("tttx-icon", { icon: node.icon, color: node.iconColor, class: "padding-icon" }), !node.html && index.h("div", { class: type }, node.title), node.html && index.h("div", { class: type, innerHTML: domsanitiser_options.purify.sanitize(node.html, domsanitiser_options.domSanitiserOptions) }), (node.menuActive || node.chevronActive) && (index.h("div", { class: "right-buttons-container" }, node.menuActive && (index.h("tttx-button", { design: "borderless-circle", notext: true, icon: "more_vert", color: "black", class: "padding-icon menu-button", onClick: (event) => {
75
102
  event.stopPropagation();
76
103
  this.onClickHandler('menu', event, node);
77
104
  } })), node.chevronActive && (index.h("tttx-icon", { icon: "chevron_right", color: "black", class: "padding-icon chevron-button", onClick: (event) => {
@@ -17,7 +17,7 @@ const patchBrowser = () => {
17
17
  };
18
18
 
19
19
  patchBrowser().then(options => {
20
- return index.bootstrapLazy([["tttx-multiselect-box.cjs",[[1,"tttx-multiselect-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"htmlVisibleValue":[4,"html-visible-value"],"visibleValue":[1,"visible-value"],"open":[32],"unsavedSelectedItems":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-dialog-box.cjs",[[1,"tttx-dialog-box",{"data":[1025],"size":[1],"open":[1028],"allowOverflow":[4,"allow-overflow"],"elementSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-select-box.cjs",[[1,"tttx-select-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"selectedValue":[1,"selected-value"],"open":[32],"selectedItem":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-tree-view.cjs",[[1,"tttx-tree-view",{"data":[1040],"treeData":[32]}]]],["tttx-filter.cjs",[[1,"tttx-filter",{"filterKey":[1,"filter-key"],"filterOptions":[1,"filter-options"],"showSelectAll":[4,"show-select-all"],"showSearchField":[4,"show-search-field"],"showOptionIcons":[4,"show-option-icons"],"filterButtonStyle":[1,"filter-button-style"],"filterHeader":[1,"filter-header"],"defaultFilterOptions":[1,"default-filter-options"],"popoverWidth":[1,"popover-width"],"showPopover":[32],"displayedFilterSettings":[32],"selectedFilters":[32],"filterSearchTerm":[32],"allSelected":[32]},[[0,"closeFilter","handleCloseFilter"]]]]],["tttx-list.cjs",[[1,"tttx-list",{"data":[1025],"name":[1],"_data":[32]}]]],["tttx-sorter.cjs",[[1,"tttx-sorter",{"sorterKey":[1,"sorter-key"],"defaultSortDirection":[1,"default-sort-direction"],"fieldOptionsData":[1,"field-options-data"],"defaultOption":[1,"default-option"],"selectedField":[32],"sortDirection":[32],"dropdownExpand":[32],"dropdownOptions":[32]},[[0,"closeSorter","handleCloseSorter"]]]]],["tttx-tabs.cjs",[[2,"tttx-tabs",{"tabsName":[1,"tabs-name"],"navigation":[4],"wide":[4],"tabs":[1],"_tabs":[32]},[[0,"keydown","handleKeyDown"]]]]],["tttx-form.cjs",[[1,"tttx-form",{"formschema":[1025],"data":[1032],"submit":[64]}]]],["tttx-keyvalue-block.cjs",[[1,"tttx-keyvalue-block",{"keyvalues":[1],"horizontal":[4],"spacedout":[4],"_elements":[32]}]]],["tttx-loading-spinner.cjs",[[1,"tttx-loading-spinner",{"loadingMessage":[1028,"loading-message"],"size":[1025]}]]],["tttx-qrcode.cjs",[[1,"tttx-qrcode",{"link":[1025],"size":[1026]}]]],["tttx-tag.cjs",[[1,"tttx-tag",{"text":[1],"color":[1]}]]],["tttx-textarea.cjs",[[2,"tttx-textarea",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"rows":[2],"textareaautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"disabled":[4],"maxlength":[8],"name":[1],"placeholder":[1],"readonly":[8],"required":[4],"value":[1032]}]]],["tttx-toolbar.cjs",[[1,"tttx-toolbar",{"border":[4],"viewSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-icon.cjs",[[1,"tttx-icon",{"icon":[1],"color":[1]}]]],["tttx-standalone-input.cjs",[[2,"tttx-standalone-input",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"iconleft":[1],"iconleftcolor":[1],"iconright":[1],"iconrightcolor":[1],"inputicon":[1],"inputiconcolor":[1],"inline":[4],"inputautocapitalize":[1],"inputautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"autocomplete":[1],"checked":[4],"disabled":[4],"max":[8],"maxlength":[8],"min":[8],"minlength":[8],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[8],"required":[4],"step":[8],"type":[1],"value":[1032]}]]],["tttx-button.cjs",[[1,"tttx-button",{"notext":[4],"icon":[1],"iconposition":[1],"iconcolor":[1025],"design":[1]}]]]], options);
20
+ return index.bootstrapLazy([["tttx-multiselect-box.cjs",[[1,"tttx-multiselect-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"htmlVisibleValue":[4,"html-visible-value"],"visibleValue":[1,"visible-value"],"open":[32],"unsavedSelectedItems":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-dialog-box.cjs",[[1,"tttx-dialog-box",{"data":[1025],"size":[1],"open":[1028],"allowOverflow":[4,"allow-overflow"],"elementSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-select-box.cjs",[[1,"tttx-select-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"selectedValue":[1,"selected-value"],"open":[32],"selectedItem":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-tree-view.cjs",[[1,"tttx-tree-view",{"data":[1040],"treeData":[32],"selectedId":[32]}]]],["tttx-filter.cjs",[[1,"tttx-filter",{"filterKey":[1,"filter-key"],"filterOptions":[1,"filter-options"],"showSelectAll":[4,"show-select-all"],"showSearchField":[4,"show-search-field"],"showOptionIcons":[4,"show-option-icons"],"filterButtonStyle":[1,"filter-button-style"],"filterHeader":[1,"filter-header"],"defaultFilterOptions":[1,"default-filter-options"],"popoverWidth":[1,"popover-width"],"showPopover":[32],"displayedFilterSettings":[32],"selectedFilters":[32],"filterSearchTerm":[32],"allSelected":[32]},[[0,"closeFilter","handleCloseFilter"]]]]],["tttx-list.cjs",[[1,"tttx-list",{"data":[1025],"name":[1],"_data":[32]}]]],["tttx-sorter.cjs",[[1,"tttx-sorter",{"sorterKey":[1,"sorter-key"],"defaultSortDirection":[1,"default-sort-direction"],"fieldOptionsData":[1,"field-options-data"],"defaultOption":[1,"default-option"],"selectedField":[32],"sortDirection":[32],"dropdownExpand":[32],"dropdownOptions":[32]},[[0,"closeSorter","handleCloseSorter"]]]]],["tttx-tabs.cjs",[[2,"tttx-tabs",{"tabsName":[1,"tabs-name"],"navigation":[4],"wide":[4],"tabs":[1],"_tabs":[32]},[[0,"keydown","handleKeyDown"]]]]],["tttx-form.cjs",[[1,"tttx-form",{"formschema":[1025],"data":[1032],"submit":[64]}]]],["tttx-keyvalue-block.cjs",[[1,"tttx-keyvalue-block",{"keyvalues":[1],"horizontal":[4],"spacedout":[4],"_elements":[32]}]]],["tttx-loading-spinner.cjs",[[1,"tttx-loading-spinner",{"loadingMessage":[1028,"loading-message"],"size":[1025]}]]],["tttx-qrcode.cjs",[[1,"tttx-qrcode",{"link":[1025],"size":[1026]}]]],["tttx-tag.cjs",[[1,"tttx-tag",{"text":[1],"color":[1]}]]],["tttx-textarea.cjs",[[2,"tttx-textarea",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"rows":[2],"textareaautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"disabled":[4],"maxlength":[8],"name":[1],"placeholder":[1],"readonly":[8],"required":[4],"value":[1032]}]]],["tttx-toolbar.cjs",[[1,"tttx-toolbar",{"border":[4],"viewSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-icon.cjs",[[1,"tttx-icon",{"icon":[1],"color":[1]}]]],["tttx-standalone-input.cjs",[[2,"tttx-standalone-input",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"iconleft":[1],"iconleftcolor":[1],"iconright":[1],"iconrightcolor":[1],"inputicon":[1],"inputiconcolor":[1],"inline":[4],"inputautocapitalize":[1],"inputautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"autocomplete":[1],"checked":[4],"disabled":[4],"max":[8],"maxlength":[8],"min":[8],"minlength":[8],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[8],"required":[4],"step":[8],"type":[1],"value":[1032]}]]],["tttx-button.cjs",[[1,"tttx-button",{"notext":[4],"icon":[1],"iconposition":[1],"iconcolor":[1025],"design":[1]}]]]], options);
21
21
  });
22
22
 
23
23
  exports.setNonce = index.setNonce;
@@ -51,6 +51,12 @@ label .textarea-container textarea ~ .errorBubble span {
51
51
  font-size: 16px;
52
52
  margin-right: 4px;
53
53
  }
54
+ label .textarea-container textarea:focus {
55
+ border-color: #1479c6;
56
+ }
57
+ label .textarea-container textarea:focus-visible {
58
+ outline: none;
59
+ }
54
60
  label .secondarylabel {
55
61
  color: #757575;
56
62
  font-size: 14px;
@@ -24,11 +24,27 @@
24
24
  font-family: "Roboto", serif;
25
25
  font-size: 16px;
26
26
  padding: 8px 0px;
27
+ position: relative;
28
+ }
29
+
30
+ .element-row::before {
31
+ content: "";
32
+ position: absolute;
33
+ left: -50%;
34
+ right: -50%;
35
+ bottom: 0;
27
36
  border-bottom: 1px solid #d5d5d5;
28
37
  }
29
38
 
30
- .rowHover {
31
- cursor: pointer;
39
+ .element-row.rowSelected::before {
40
+ content: "";
41
+ position: absolute;
42
+ left: -50%;
43
+ right: -50%;
44
+ top: 0;
45
+ bottom: 0;
46
+ background-color: rgba(17, 17, 17, 0.1);
47
+ z-index: -1;
32
48
  }
33
49
 
34
50
  li {
@@ -66,7 +82,19 @@ li {
66
82
  }
67
83
 
68
84
  @media (hover: hover) {
69
- .rowHover:hover {
85
+ .element-row.rowHover:hover {
86
+ cursor: pointer;
87
+ }
88
+
89
+ .element-row.rowHover:hover::before {
90
+ content: "";
91
+ position: absolute;
92
+ left: -50%;
93
+ right: -50%;
94
+ top: 0;
95
+ bottom: 0;
70
96
  background-color: rgba(17, 17, 17, 0.05);
97
+ opacity: 0.5;
98
+ z-index: -1;
71
99
  }
72
100
  }
@@ -6,11 +6,24 @@ export class TttxTreeView {
6
6
  constructor() {
7
7
  this.data = undefined;
8
8
  this.treeData = undefined;
9
+ this.selectedId = undefined;
9
10
  }
10
11
  onClickHandler(clickName, event, node) {
11
12
  event.stopPropagation();
12
13
  const returnJsonObject = JSON.stringify(node);
13
14
  this.clickEvent.emit({ eventName: clickName, returnJsonObject });
15
+ if (clickName === 'row') {
16
+ this.selectedElement(event, node);
17
+ }
18
+ }
19
+ //for testing as SelectedId is a state
20
+ updateSelectedId(newId) {
21
+ this.selectedId = newId;
22
+ }
23
+ selectedElement(event, node) {
24
+ event.stopPropagation();
25
+ this.selectedId = node.id;
26
+ this.treeData = [...this.treeData];
14
27
  }
15
28
  toggleNode(node, event) {
16
29
  event.stopPropagation();
@@ -31,7 +44,14 @@ export class TttxTreeView {
31
44
  });
32
45
  }
33
46
  }
34
- renderNode(node) {
47
+ updateSelected(node) {
48
+ let selected = false;
49
+ if (node.id === this.selectedId) {
50
+ selected = true;
51
+ }
52
+ return selected;
53
+ }
54
+ treeConfigs(node) {
35
55
  let checkboxIcon, checkboxColor;
36
56
  if (node.checked) {
37
57
  checkboxIcon = 'check_box';
@@ -41,29 +61,36 @@ export class TttxTreeView {
41
61
  checkboxIcon = 'check_box_outline_blank';
42
62
  checkboxColor = 'grey';
43
63
  }
44
- const rowHoverActive = node.chevronActive ? 'rowHover' : '';
64
+ const rowHoverActive = node.hasHover ? 'rowHover' : '';
45
65
  const expanderIcon = node.isOpen ? 'arrow_drop_down' : 'arrow_right';
46
- if (node.child && node.child.length > 0) {
47
- return (h("li", null, h("div", { class: `inline-tree-item element-row ${rowHoverActive}`, onClick: (event) => {
48
- if (node.chevronActive) {
66
+ const selectedActive = node.selectable && node.selected ? 'rowSelected' : '';
67
+ return { checkboxColor, checkboxIcon, rowHoverActive, expanderIcon, selectedActive };
68
+ }
69
+ renderNode(node) {
70
+ if (node.selectable)
71
+ node.selected = this.updateSelected(node);
72
+ const options = this.treeConfigs(node);
73
+ if (node.child) {
74
+ return (h("li", null, h("div", { class: `inline-tree-item element-row ${options.rowHoverActive} ${options.selectedActive}`, onClick: (event) => {
75
+ if (node.hasHover) {
49
76
  event.stopPropagation();
50
77
  this.onClickHandler('row', event, node);
51
78
  }
52
- } }, h("tttx-button", { class: "toggleNode", design: "borderless-circle", notext: true, icon: expanderIcon, color: "black", onClick: event => this.toggleNode(node, event) }), this.htmlcode('treeNode', node, checkboxIcon, checkboxColor)), node.isOpen ? (h("ul", null, h("div", { class: "child-node" }, node.child.map(childNode => {
79
+ } }, h("tttx-button", { class: "toggleNode", design: "borderless-circle", notext: true, icon: options.expanderIcon, color: "black", onClick: event => this.toggleNode(node, event) }), this.htmlcode('treeNode', node, options.checkboxIcon, options.checkboxColor)), node.isOpen ? (h("ul", null, h("div", { class: "child-node" }, node.child.map(childNode => {
53
80
  return this.renderNode(childNode);
54
81
  })))) : null));
55
82
  }
56
83
  else {
57
- return (h("li", null, h("div", { class: `inline-tree-item element-row ${rowHoverActive}`, onClick: (event) => {
58
- if (node.chevronActive) {
84
+ return (h("li", null, h("div", { class: `inline-tree-item element-row ${options.rowHoverActive} ${options.selectedActive}`, onClick: (event) => {
85
+ if (node.hasHover) {
59
86
  event.stopPropagation();
60
87
  this.onClickHandler('row', event, node);
61
88
  }
62
- } }, this.htmlcode('treeLeaf', node, checkboxIcon, checkboxColor))));
89
+ } }, this.htmlcode('treeLeaf', node, options.checkboxIcon, options.checkboxColor))));
63
90
  }
64
91
  }
65
92
  htmlcode(type, node, check_box, check_boxColor) {
66
- const htmlcode = (h("div", { class: 'inline-tree-item element' }, node.hasCheckbox && (h("tttx-button", { design: "borderless-circle", notext: true, icon: check_box, iconcolor: check_boxColor, class: "padding-icon checkbox", onClick: event => this.handleCheckboxChange(node, event) })), !node.html && node.hasIcon && h("tttx-icon", { icon: node.icon, color: node.iconColor, class: "padding-icon" }), !node.html && h("div", { class: type }, node.title), node.html && h("div", { class: type, innerHTML: DOMPurify.sanitize(node.html, domSanitiserOptions) }), (node.menuActive || node.chevronActive) && (h("div", { class: "right-buttons-container" }, node.menuActive && (h("tttx-button", { design: "borderless-circle", notext: true, icon: "more_vert", color: "black", class: "padding-icon menu-button", onClick: (event) => {
93
+ const htmlcode = (h("div", { class: "inline-tree-item element" }, node.hasCheckbox && (h("tttx-button", { design: "borderless-circle", notext: true, icon: check_box, iconcolor: check_boxColor, class: "padding-icon checkbox", onClick: event => this.handleCheckboxChange(node, event) })), !node.html && node.hasIcon && h("tttx-icon", { icon: node.icon, color: node.iconColor, class: "padding-icon" }), !node.html && h("div", { class: type }, node.title), node.html && h("div", { class: type, innerHTML: DOMPurify.sanitize(node.html, domSanitiserOptions) }), (node.menuActive || node.chevronActive) && (h("div", { class: "right-buttons-container" }, node.menuActive && (h("tttx-button", { design: "borderless-circle", notext: true, icon: "more_vert", color: "black", class: "padding-icon menu-button", onClick: (event) => {
67
94
  event.stopPropagation();
68
95
  this.onClickHandler('menu', event, node);
69
96
  } })), node.chevronActive && (h("tttx-icon", { icon: "chevron_right", color: "black", class: "padding-icon chevron-button", onClick: (event) => {
@@ -116,7 +143,8 @@ export class TttxTreeView {
116
143
  }
117
144
  static get states() {
118
145
  return {
119
- "treeData": {}
146
+ "treeData": {},
147
+ "selectedId": {}
120
148
  };
121
149
  }
122
150
  static get events() {
@@ -19,7 +19,6 @@ const TttxTreeViewStory = ({ data }) => `
19
19
  }
20
20
  treeViewDefault.data = ${JSON.stringify(data)};
21
21
  </script>
22
-
23
22
  `;
24
23
  export const Default = TttxTreeViewStory.bind({});
25
24
  Default.args = {
@@ -401,7 +400,7 @@ HTML.args = {
401
400
  id: 1,
402
401
  title: 'Role Specific Vocational Qualification',
403
402
  isOpen: false,
404
- html: '<p>This is html </p>',
403
+ html: '<div>This is html </div>',
405
404
  openOrClosed: 'arrow_right',
406
405
  hasCheckbox: false,
407
406
  hasIcon: false,
@@ -410,14 +409,14 @@ HTML.args = {
410
409
  id: 2,
411
410
  title: 'Boop',
412
411
  isOpen: false,
413
- html: '<p>This is html </p>',
412
+ html: '<div>This is html </div>',
414
413
  openOrClosed: 'arrow_right',
415
414
  child: [
416
415
  {
417
416
  id: 2,
418
417
  hasIcon: false,
419
418
  title: 'this is a test',
420
- html: '<p>This is html </p>',
419
+ html: '<div>This is html </div>',
421
420
  },
422
421
  ],
423
422
  },
@@ -427,7 +426,7 @@ HTML.args = {
427
426
  isOpen: false,
428
427
  openOrClosed: 'arrow_right',
429
428
  hasIcon: false,
430
- html: '<p>This is html </p>',
429
+ html: '<div>This is html </div>',
431
430
  },
432
431
  ],
433
432
  },
@@ -438,17 +437,17 @@ HTML.args = {
438
437
  openOrClosed: 'arrow_right',
439
438
  hasIcon: false,
440
439
  hasCheckbox: false,
441
- html: '<p>This is html </p>',
440
+ html: '<div>This is html </div>',
442
441
  child: [
443
442
  {
444
443
  id: 4,
445
444
  title: 'Boop 2077',
446
- html: '<p>This is html </p>',
445
+ html: '<div>This is html </div>',
447
446
  },
448
447
  {
449
448
  id: 4,
450
449
  title: 'sjdnfkn 2077',
451
- html: '<p>This is html </p>',
450
+ html: '<div>This is html </div>',
452
451
  },
453
452
  ],
454
453
  },
@@ -741,3 +740,91 @@ const convertedData2 = {
741
740
  RequirementsList2.args = {
742
741
  data: [convertedData2],
743
742
  };
743
+ const TttxTreeViewEmptyGroup = ({ data }) => `
744
+ <tttx-tree-view id="treeViewEmptyGroup"></tttx-tree-view>
745
+ <script>
746
+ if(!treeViewEmptyGroup) {
747
+ const treeViewEmptyGroup = document.getElementById('treeViewEmptyGroup');
748
+ }
749
+ treeViewEmptyGroup.data = ${JSON.stringify(data)};
750
+ </script>
751
+ `;
752
+ export const EmptyGroup = TttxTreeViewEmptyGroup.bind({});
753
+ EmptyGroup.args = {
754
+ data: [
755
+ {
756
+ id: 1,
757
+ title: 'Role Specific Vocational Qualification',
758
+ isOpen: false,
759
+ openOrClosed: 'arrow_right',
760
+ hasCheckbox: true,
761
+ checked: false,
762
+ hasIcon: true,
763
+ icon: 'check_circle',
764
+ iconColor: 'green',
765
+ child: [],
766
+ },
767
+ ],
768
+ };
769
+ const TttxTreeViewselectable = ({ data }) => `
770
+ <tttx-tree-view id="treeViewselectable"></tttx-tree-view>
771
+ <script>
772
+ if(!treeViewselectable) {
773
+ const treeViewselectable = document.getElementById('treeViewselectable');
774
+ }
775
+ treeViewselectable.data = ${JSON.stringify(data)};
776
+ </script>
777
+ `;
778
+ export const selectableAndHover = TttxTreeViewselectable.bind({});
779
+ selectableAndHover.args = {
780
+ data: [
781
+ {
782
+ id: 1,
783
+ title: 'Role Specific Vocational Qualification',
784
+ isOpen: false,
785
+ openOrClosed: 'arrow_right',
786
+ hasCheckbox: false,
787
+ hasIcon: false,
788
+ hasHover: true,
789
+ selectable: true,
790
+ selected: false,
791
+ chevronActive: true,
792
+ child: [
793
+ {
794
+ id: 2,
795
+ title: 'Boop',
796
+ isOpen: false,
797
+ hasCheckbox: false,
798
+ hasIcon: false,
799
+ openOrClosed: 'arrow_right',
800
+ hasHover: true,
801
+ selectable: true,
802
+ selected: false,
803
+ chevronActive: true,
804
+ child: [
805
+ {
806
+ id: 4,
807
+ hasCheckbox: false,
808
+ hasIcon: false,
809
+ title: 'this is a test',
810
+ hasHover: true,
811
+ selectable: true,
812
+ selected: false,
813
+ },
814
+ ],
815
+ },
816
+ {
817
+ id: 3,
818
+ title: 'Boop',
819
+ isOpen: false,
820
+ openOrClosed: 'arrow_right',
821
+ hasCheckbox: false,
822
+ hasIcon: false,
823
+ hasHover: true,
824
+ selectable: true,
825
+ selected: false,
826
+ },
827
+ ],
828
+ },
829
+ ],
830
+ };