You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2021/09/24 09:29:41 UTC

[myfaces-tobago] branch master updated: feat: Remove auto-generated "markup" classes

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/master by this push:
     new 862fc26  feat: Remove auto-generated "markup" classes
862fc26 is described below

commit 862fc2617ad9f1d12c42860589eea8a2b07993f3
Author: Udo Schnurpfeil <ud...@irian.eu>
AuthorDate: Fri Sep 24 10:42:10 2021 +0200

    feat: Remove auto-generated "markup" classes
    
    clean up tree and treeNode
    
    issue: TOBAGO-2093
---
 .../internal/renderkit/renderer/TreeNodeRenderer.java  | 18 ++++--------------
 .../internal/renderkit/renderer/TreeRenderer.java      |  8 +++-----
 .../myfaces/tobago/renderkit/css/TobagoClass.java      |  6 +++---
 .../renderer/treeSelect/treeSelect-single.html         | 18 +++++++++---------
 .../tobago-example-demo/src/main/scss/demo.scss        |  9 +++++++++
 .../tobago-example-demo/src/main/webapp/css/demo.css   |  7 +++++++
 .../src/main/webapp/css/demo.css.map                   |  2 +-
 .../src/main/webapp/css/demo.min.css                   |  2 +-
 .../src/main/webapp/css/demo.min.css.map               |  2 +-
 tobago-theme/src/main/scss/_tobago.scss                | 13 ++++++++++---
 .../src/main/css/tobago.css                            |  5 ++---
 .../src/main/css/tobago.css.map                        |  2 +-
 .../src/main/css/tobago.min.css                        |  2 +-
 .../src/main/css/tobago.min.css.map                    |  2 +-
 .../tobago-theme-roxborough/src/main/css/tobago.css    |  5 ++---
 .../src/main/css/tobago.css.map                        |  2 +-
 .../src/main/css/tobago.min.css                        |  2 +-
 .../src/main/css/tobago.min.css.map                    |  2 +-
 .../tobago-theme-scarborough/src/main/css/tobago.css   |  5 ++---
 .../src/main/css/tobago.css.map                        |  2 +-
 .../src/main/css/tobago.min.css                        |  2 +-
 .../src/main/css/tobago.min.css.map                    |  2 +-
 .../tobago-theme-speyside/src/main/css/tobago.css      |  5 ++---
 .../tobago-theme-speyside/src/main/css/tobago.css.map  |  2 +-
 .../tobago-theme-speyside/src/main/css/tobago.min.css  |  2 +-
 .../src/main/css/tobago.min.css.map                    |  2 +-
 .../tobago-theme-standard/src/main/css/tobago.css      |  5 ++---
 .../tobago-theme-standard/src/main/css/tobago.css.map  |  2 +-
 .../tobago-theme-standard/src/main/css/tobago.min.css  |  2 +-
 .../src/main/css/tobago.min.css.map                    |  2 +-
 .../tobago-theme-standard/src/main/js/tobago.js        |  8 ++++----
 .../tobago-theme-standard/src/main/js/tobago.js.map    |  2 +-
 .../tobago-theme-standard/src/main/js/tobago.min.js    |  2 +-
 .../src/main/js/tobago.min.js.map                      |  2 +-
 .../src/main/ts/tobago-tree-node.ts                    |  4 ++--
 .../tobago-theme-standard/src/main/ts/tobago-tree.ts   |  4 ++--
 36 files changed, 84 insertions(+), 78 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeNodeRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeNodeRenderer.java
index 9bb3d35..e86e043 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeNodeRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeNodeRenderer.java
@@ -19,7 +19,6 @@
 
 package org.apache.myfaces.tobago.internal.renderkit.renderer;
 
-import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
 import org.apache.myfaces.tobago.internal.component.AbstractUITree;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeListbox;
@@ -120,21 +119,11 @@ public class TreeNodeRenderer<T extends AbstractUITreeNode> extends RendererBase
     final String parentId = data.getRowParentClientId();
     final boolean visible = data.isRowVisible();
     final boolean folder = component.isFolder();
-    Markup markup = Markup.NULL;
     final TreePath path = component.getPath();
+    final boolean expanded = folder && data.getExpandedState().isExpanded(path);
     final SelectedState selectedState = data.getSelectedState();
     final boolean selected = data instanceof AbstractUITree && selectedState.isSelected(path);
 
-    if (selected) {
-      markup = markup.add(Markup.SELECTED);
-    }
-    if (folder) {
-      markup = markup.add(Markup.FOLDER);
-      if (data.getExpandedState().isExpanded(path)) {
-        markup = markup.add(Markup.EXPANDED);
-      }
-    }
-
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
     if (data instanceof AbstractUITreeListbox) {
@@ -155,8 +144,9 @@ public class TreeNodeRenderer<T extends AbstractUITreeNode> extends RendererBase
       final boolean hidden = !dataRendersRowContainer && !visible;
 
       writer.writeClassAttribute(
-          null,
-          TobagoClass.TREE_NODE.createMarkup(markup),
+          selected ? TobagoClass.SELECTED : null,
+          folder ? TobagoClass.FOLDER : null,
+          expanded ? TobagoClass.EXPANDED : null,
           hidden ? BootstrapClass.D_NONE : null,
           component.getCustomClass());
       writer.writeAttribute(CustomAttributes.SELECTED, selected);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeRenderer.java
index b946037..52a166b 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeRenderer.java
@@ -96,9 +96,7 @@ public class TreeRenderer<T extends AbstractUITree> extends RendererBase<T> {
     insideBegin(facesContext, HtmlElements.TOBAGO_TREE);
     writer.startElement(HtmlElements.TOBAGO_TREE);
     writer.writeIdAttribute(clientId);
-    writer.writeClassAttribute(
-        component.getCustomClass(),
-        TobagoClass.TREE.createMarkup(markup));
+    writer.writeClassAttribute(component.getCustomClass());
     HtmlRendererUtils.writeDataAttributes(facesContext, writer, component);
 
     final Selectable selectable = component.getSelectable();
@@ -145,7 +143,7 @@ public class TreeRenderer<T extends AbstractUITree> extends RendererBase<T> {
     final String selectedId = clientId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.SUFFIX_SELECTED;
     writer.writeNameAttribute(selectedId);
     writer.writeIdAttribute(selectedId);
-    writer.writeClassAttribute(TobagoClass.TREE__SELECTED);
+    writer.writeClassAttribute(TobagoClass.SELECTED);
     writer.writeAttribute(HtmlAttributes.VALUE, JsonUtils.encode(selectedValue), false);
     writer.endElement(HtmlElements.INPUT);
 
@@ -154,7 +152,7 @@ public class TreeRenderer<T extends AbstractUITree> extends RendererBase<T> {
     final String expandedId = clientId + ComponentUtils.SUB_SEPARATOR + AbstractUIData.SUFFIX_EXPANDED;
     writer.writeNameAttribute(expandedId);
     writer.writeIdAttribute(expandedId);
-    writer.writeClassAttribute(TobagoClass.TREE__EXPANDED);
+    writer.writeClassAttribute(TobagoClass.EXPANDED);
     writer.writeAttribute(HtmlAttributes.VALUE, JsonUtils.encode(expandedValue), false);
     writer.endElement(HtmlElements.INPUT);
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
index 98c16c0..91c4c3d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
@@ -136,8 +136,10 @@ public enum TobagoClass implements CssItem {
    */
   @Deprecated
   DROPDOWN__SELECTED("tobago-dropdown-selected"),
+  EXPANDED("tobago-expanded"),
   FILE("tobago-file"),
   FIGURE("tobago-figure"),
+  FOLDER("tobago-folder"),
   /**
    * @deprecated since 5.0.0
    */
@@ -191,6 +193,7 @@ public enum TobagoClass implements CssItem {
   SELECT_MANY_SHUTTLE__UNSELECTED_LABEL("tobago-selectManyShuttle-unselectedLabel"),
   SELECT_ONE_LISTBOX("tobago-selectOneListbox"),
   SELECT_ONE_LISTBOX__OPTION("tobago-selectOneListbox-option"),
+  SELECTED("tobago-selected"),
   SEPARATOR("tobago-separator"),
   SHEET("tobago-sheet"),
   SHEET__CELL("tobago-sheet-cell"),
@@ -221,9 +224,6 @@ public enum TobagoClass implements CssItem {
   TAB__CONTENT("tobago-tab-content"),
   TAB_GROUP("tobago-tabGroup"),
   TEXT__JUSTIFY("tobago-text-justify"),
-  TREE("tobago-tree"),
-  TREE__EXPANDED("tobago-tree-expanded"),
-  TREE__SELECTED("tobago-tree-selected"),
   TREE_LABEL("tobago-treeLabel"),
   TREE_LISTBOX("tobago-treeListbox"),
   TREE_LISTBOX__LEVEL("tobago-treeListbox-level"),
diff --git a/tobago-core/src/test/resources/renderer/treeSelect/treeSelect-single.html b/tobago-core/src/test/resources/renderer/treeSelect/treeSelect-single.html
index d7ed47c..3774d12 100644
--- a/tobago-core/src/test/resources/renderer/treeSelect/treeSelect-single.html
+++ b/tobago-core/src/test/resources/renderer/treeSelect/treeSelect-single.html
@@ -18,7 +18,7 @@
   -->
 
 <tobago-tree id='tree' data-tobago-selectable='single' selectable='single'>
-  <tobago-tree-node id='tree:0:treeNode' class='tobago-treeNode-markup-folder tobago-treeNode-markup-expanded' expandable='expandable' index='0' data-tobago-level='0'>
+  <tobago-tree-node id='tree:0:treeNode' class='tobago-folder tobago-expanded' expandable='expandable' index='0' data-tobago-level='0'>
     <span id='tree:0:treeIndent' class='tobago-treeNode-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span>
     <tobago-tree-select class='form-check-inline form-check'>
       <input class='form-check-input' type='radio' name='tree' value='tree:0:treeSelect' id='tree:0:treeSelect'>
@@ -42,7 +42,7 @@
       <tobago-behavior event='change' client-id='tree:2:treeSelect' execute='tree:2:treeSelect tree' render='null tree'></tobago-behavior>
     </tobago-tree-select>
   </tobago-tree-node>
-  <tobago-tree-node id='tree:3:treeNode' class='tobago-treeNode-markup-folder tobago-treeNode-markup-expanded' expandable='expandable' index='3' data-tobago-tree-parent='tree:0:treeNode' parent='tree:0:treeNode' data-tobago-level='1'>
+  <tobago-tree-node id='tree:3:treeNode' class='tobago-folder tobago-expanded' expandable='expandable' index='3' data-tobago-tree-parent='tree:0:treeNode' parent='tree:0:treeNode' data-tobago-level='1'>
     <span id='tree:3:treeIndent' class='tobago-treeNode-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span>
     <tobago-tree-select class='form-check-inline form-check'>
       <input class='form-check-input' type='radio' name='tree' value='tree:3:treeSelect' id='tree:3:treeSelect'>
@@ -66,7 +66,7 @@
       <tobago-behavior event='change' client-id='tree:5:treeSelect' execute='tree:5:treeSelect tree' render='null tree'></tobago-behavior>
     </tobago-tree-select>
   </tobago-tree-node>
-  <tobago-tree-node id='tree:6:treeNode' class='tobago-treeNode-markup-folder tobago-treeNode-markup-expanded' expandable='expandable' index='6' data-tobago-tree-parent='tree:3:treeNode' parent='tree:3:treeNode' data-tobago-level='2'>
+  <tobago-tree-node id='tree:6:treeNode' class='tobago-folder tobago-expanded' expandable='expandable' index='6' data-tobago-tree-parent='tree:3:treeNode' parent='tree:3:treeNode' data-tobago-level='2'>
     <span id='tree:6:treeIndent' class='tobago-treeNode-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span>
     <tobago-tree-select class='form-check-inline form-check'>
       <input class='form-check-input' type='radio' name='tree' value='tree:6:treeSelect' id='tree:6:treeSelect'>
@@ -98,7 +98,7 @@
       <tobago-behavior event='change' client-id='tree:9:treeSelect' execute='tree:9:treeSelect tree' render='null tree'></tobago-behavior>
     </tobago-tree-select>
   </tobago-tree-node>
-  <tobago-tree-node id='tree:10:treeNode' class='tobago-treeNode-markup-folder tobago-treeNode-markup-expanded' expandable='expandable' index='10' data-tobago-tree-parent='tree:0:treeNode' parent='tree:0:treeNode' data-tobago-level='1'>
+  <tobago-tree-node id='tree:10:treeNode' class='tobago-folder tobago-expanded' expandable='expandable' index='10' data-tobago-tree-parent='tree:0:treeNode' parent='tree:0:treeNode' data-tobago-level='1'>
     <span id='tree:10:treeIndent' class='tobago-treeNode-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span>
     <tobago-tree-select class='form-check-inline form-check'>
       <input class='form-check-input' type='radio' name='tree' value='tree:10:treeSelect' id='tree:10:treeSelect'>
@@ -106,7 +106,7 @@
       <tobago-behavior event='change' client-id='tree:10:treeSelect' execute='tree:10:treeSelect tree' render='null tree'></tobago-behavior>
     </tobago-tree-select>
   </tobago-tree-node>
-  <tobago-tree-node id='tree:11:treeNode' class='tobago-treeNode-markup-folder tobago-treeNode-markup-expanded' expandable='expandable' index='11' data-tobago-tree-parent='tree:10:treeNode' parent='tree:10:treeNode' data-tobago-level='2'>
+  <tobago-tree-node id='tree:11:treeNode' class='tobago-folder tobago-expanded' expandable='expandable' index='11' data-tobago-tree-parent='tree:10:treeNode' parent='tree:10:treeNode' data-tobago-level='2'>
     <span id='tree:11:treeIndent' class='tobago-treeNode-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span>
     <tobago-tree-select class='form-check-inline form-check'>
       <input class='form-check-input' type='radio' name='tree' value='tree:11:treeSelect' id='tree:11:treeSelect'>
@@ -138,7 +138,7 @@
       <tobago-behavior event='change' client-id='tree:14:treeSelect' execute='tree:14:treeSelect tree' render='null tree'></tobago-behavior>
     </tobago-tree-select>
   </tobago-tree-node>
-  <tobago-tree-node id='tree:15:treeNode' class='tobago-treeNode-markup-folder tobago-treeNode-markup-expanded' expandable='expandable' index='15' data-tobago-tree-parent='tree:10:treeNode' parent='tree:10:treeNode' data-tobago-level='2'>
+  <tobago-tree-node id='tree:15:treeNode' class='tobago-folder tobago-expanded' expandable='expandable' index='15' data-tobago-tree-parent='tree:10:treeNode' parent='tree:10:treeNode' data-tobago-level='2'>
     <span id='tree:15:treeIndent' class='tobago-treeNode-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span>
     <tobago-tree-select class='form-check-inline form-check'>
       <input class='form-check-input' type='radio' name='tree' value='tree:15:treeSelect' id='tree:15:treeSelect'>
@@ -154,7 +154,7 @@
       <tobago-behavior event='change' client-id='tree:16:treeSelect' execute='tree:16:treeSelect tree' render='null tree'></tobago-behavior>
     </tobago-tree-select>
   </tobago-tree-node>
-  <tobago-tree-node id='tree:17:treeNode' class='tobago-treeNode-markup-folder tobago-treeNode-markup-expanded' expandable='expandable' index='17' data-tobago-tree-parent='tree:15:treeNode' parent='tree:15:treeNode' data-tobago-level='3'>
+  <tobago-tree-node id='tree:17:treeNode' class='tobago-folder tobago-expanded' expandable='expandable' index='17' data-tobago-tree-parent='tree:15:treeNode' parent='tree:15:treeNode' data-tobago-level='3'>
     <span id='tree:17:treeIndent' class='tobago-treeNode-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span>
     <tobago-tree-select class='form-check-inline form-check'>
       <input class='form-check-input' type='radio' name='tree' value='tree:17:treeSelect' id='tree:17:treeSelect'>
@@ -178,8 +178,8 @@
       <tobago-behavior event='change' client-id='tree:19:treeSelect' execute='tree:19:treeSelect tree' render='null tree'></tobago-behavior>
     </tobago-tree-select>
   </tobago-tree-node>
-  <input type='hidden' name='tree::selected' id='tree::selected' class='tobago-tree-selected' value='[]'>
-  <input type='hidden' name='tree::expanded' id='tree::expanded' class='tobago-tree-expanded' value='[0,3,6,10,11,15,17]'>
+  <input type='hidden' name='tree::selected' id='tree::selected' class='tobago-selected' value='[]'>
+  <input type='hidden' name='tree::expanded' id='tree::expanded' class='tobago-expanded' value='[0,3,6,10,11,15,17]'>
   <tobago-scroll>
     <input id='tree::scrollPosition' name='tree::scrollPosition' type='hidden' value='[0,0]' data-tobago-scroll-position='true'>
   </tobago-scroll>
diff --git a/tobago-example/tobago-example-demo/src/main/scss/demo.scss b/tobago-example/tobago-example-demo/src/main/scss/demo.scss
index a217676..615e016 100644
--- a/tobago-example/tobago-example-demo/src/main/scss/demo.scss
+++ b/tobago-example/tobago-example-demo/src/main/scss/demo.scss
@@ -86,6 +86,15 @@ demo-highlight {
   background-color: #ffdddd;
 }
 
+tobago-tree {
+  .tobago-selected {
+    font-weight: bold;
+    a {
+      background-color: #ceecf5;
+    }
+  }
+}
+
 .testframe-wrapper {
   display: inline-block;
   border: 1px solid;
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/css/demo.css b/tobago-example/tobago-example-demo/src/main/webapp/css/demo.css
index 421dac7..c494722 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/css/demo.css
+++ b/tobago-example/tobago-example-demo/src/main/webapp/css/demo.css
@@ -84,6 +84,13 @@ demo-highlight {
   background-color: #ffdddd;
 }
 
+tobago-tree .tobago-selected {
+  font-weight: bold;
+}
+tobago-tree .tobago-selected a {
+  background-color: #ceecf5;
+}
+
 .testframe-wrapper {
   display: inline-block;
   border: 1px solid;
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/css/demo.css.map b/tobago-example/tobago-example-demo/src/main/webapp/css/demo.css.map
index 1a5418a..369327d 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/css/demo.css.map
+++ b/tobago-example/tobago-example-demo/src/main/webapp/css/demo.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../../scss/demo.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;EACE;EACA;EACA;AACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA","file":"demo.css","sourcesContent":["/*\n * Licensed to the  [...]
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../../scss/demo.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;EACE;EACA;EACA;AACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EACE;;AACA;EACE;;;AAKN;EACE;EACA;EACA;EACA","file":"demo.css","sourcesContent":[" [...]
\ No newline at end of file
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/css/demo.min.css b/tobago-example/tobago-example-demo/src/main/webapp/css/demo.min.css
index 31f4fb8..ca716f8 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/css/demo.min.css
+++ b/tobago-example/tobago-example-demo/src/main/webapp/css/demo.min.css
@@ -1,2 +1,2 @@
-.box-shadow{box-shadow:0 0 5px 5px rgba(200,200,200,.5)}.demo-selected{background-color:#fdf}#demo-view-source .demo-selected{border:1px solid #ccc}.blue{background-color:#2aabff}.demo-data-attribute{height:100px;border:1px solid #000;border-radius:.25rem}demo-highlight{font-size:75%}.language-markup .token.tag{font-weight:inherit;font-size:inherit;line-height:inherit;white-space:inherit;text-align:inherit;padding:inherit}.planet{background-color:#5cb85c}.old-planet{background-color:#b3d [...]
+.box-shadow{box-shadow:0 0 5px 5px rgba(200,200,200,.5)}.demo-selected{background-color:#fdf}#demo-view-source .demo-selected{border:1px solid #ccc}.blue{background-color:#2aabff}.demo-data-attribute{height:100px;border:1px solid #000;border-radius:.25rem}demo-highlight{font-size:75%}.language-markup .token.tag{font-weight:inherit;font-size:inherit;line-height:inherit;white-space:inherit;text-align:inherit;padding:inherit}.planet{background-color:#5cb85c}.old-planet{background-color:#b3d [...]
 /*# sourceMappingURL=demo.min.css.map */
\ No newline at end of file
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/css/demo.min.css.map b/tobago-example/tobago-example-demo/src/main/webapp/css/demo.min.css.map
index af4061f..b3a3bd6 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/css/demo.min.css.map
+++ b/tobago-example/tobago-example-demo/src/main/webapp/css/demo.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["src/main/webapp/css/demo.css"],"names":[],"mappings":"AAgBA,YACE,WAAY,EAAE,EAAE,IAAI,IAAI,qBAG1B,eACE,iBAAkB,KAGpB,iCACE,OAAQ,IAAI,MAAM,KAGpB,MACE,iBAAkB,QAGpB,qBACE,OAAQ,MACR,OAAQ,IAAI,MAAM,KAClB,cAAe,OAGjB,eACE,UAAW,IASb,4BACE,YAAa,QACb,UAAW,QACX,YAAa,QAEb,YAAa,QACb,WAAY,QACZ,QAAS,QAGX,QACE,iBAAkB,QAGpB,YACE,iBAAkB,QAGpB,8BACE,iBAAkB,QAGpB,iCACE,iBAAkB,QAGpB,+BACE,iBAAkB,QAGpB,qCACE,iBAAkB,KAGpB,mCACE,iBAAkB,KAGpB,mBACE,QAAS,aACT,OAAQ,IAAI,MACZ,WAAY,OACZ,cAAe", [...]
\ No newline at end of file
+{"version":3,"sources":["src/main/webapp/css/demo.css"],"names":[],"mappings":"AAgBA,YACE,WAAY,EAAE,EAAE,IAAI,IAAI,qBAG1B,eACE,iBAAkB,KAGpB,iCACE,OAAQ,IAAI,MAAM,KAGpB,MACE,iBAAkB,QAGpB,qBACE,OAAQ,MACR,OAAQ,IAAI,MAAM,KAClB,cAAe,OAGjB,eACE,UAAW,IASb,4BACE,YAAa,QACb,UAAW,QACX,YAAa,QAEb,YAAa,QACb,WAAY,QACZ,QAAS,QAGX,QACE,iBAAkB,QAGpB,YACE,iBAAkB,QAGpB,8BACE,iBAAkB,QAGpB,iCACE,iBAAkB,QAGpB,+BACE,iBAAkB,QAGpB,qCACE,iBAAkB,KAGpB,mCACE,iBAAkB,KAGpB,6BACE,YAAa,IAEf,+BACE,iBAAkB,QAGpB,mBACE,QAAS,a [...]
\ No newline at end of file
diff --git a/tobago-theme/src/main/scss/_tobago.scss b/tobago-theme/src/main/scss/_tobago.scss
index 7b1126a..e0f6feb 100644
--- a/tobago-theme/src/main/scss/_tobago.scss
+++ b/tobago-theme/src/main/scss/_tobago.scss
@@ -1557,19 +1557,26 @@ tobago-tab-group {
 }
 
 /* tree ---------------------------------------------------------------------- */
-.tobago-tree-expanded,
-.tobago-tree-selected,
 .tobago-treeLabel,
 .tobago-treeSelect,
 .tobago-treeSelect-label {
 }
 
-.tobago-tree {
+tobago-tree {
   .tobago-treeNode {
     cursor: default;
 
     @include tobagoTreeNodeToggle();
   }
+
+  .tobago-selected {
+  }
+
+  .tobago-expanded {
+  }
+
+  .tobago-folder {
+  }
 }
 
 .tobago-treeSelect .form-check-inline {
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css
index 94c2ad5..d681ed9 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css
@@ -12736,13 +12736,12 @@ tobago-tab-group tobago-tab > .nav-link > i + span {
 }
 
 /* tree ---------------------------------------------------------------------- */
-.tobago-tree .tobago-treeNode {
+tobago-tree .tobago-treeNode {
   cursor: default;
 }
-.tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
+tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
   cursor: pointer;
 }
-
 .tobago-treeSelect .form-check-inline {
   margin-left: 0.375rem;
   margin-right: 0.375rem;
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css.map
index ee827e1..43b2d7b 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../../node_modules/bootstrap/scss/_type.scs [...]
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../../node_modules/bootstrap/scss/_type.scs [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css
index 7261c0e..e31f566 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#ff00be;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#ffffff;--bs-gray:#777777;--bs-gray-dark:#323232;--bs-gray-100:#f8f9fa;--bs-gray-200:#d0d0d0;--bs-gray-300:#dee2e6;--bs-gray-400:#a0a0a0;--bs-gray-500:#adb5bd;--bs-gray-600:#777777;--bs-gray-700:#495057;--bs-gray-800:#323232;--bs-gray-900:#212529;--bs-primary:#529696;-- [...]
+@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#ff00be;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#ffffff;--bs-gray:#777777;--bs-gray-dark:#323232;--bs-gray-100:#f8f9fa;--bs-gray-200:#d0d0d0;--bs-gray-300:#dee2e6;--bs-gray-400:#a0a0a0;--bs-gray-500:#adb5bd;--bs-gray-600:#777777;--bs-gray-700:#495057;--bs-gray-800:#323232;--bs-gray-900:#212529;--bs-primary:#529696;-- [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css.map
index fa24ed1..661ebe5 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-charlotteville/src/main/css/tobago.css"],"names":[],"mappings":"iBAuCA,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,QACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9B,iBAAkB,G [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-charlotteville/src/main/css/tobago.css"],"names":[],"mappings":"iBAuCA,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,QACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9B,iBAAkB,G [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css
index 0247cf7..6393e77 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css
@@ -12759,13 +12759,12 @@ tobago-tab-group tobago-tab > .nav-link > i + span {
 }
 
 /* tree ---------------------------------------------------------------------- */
-.tobago-tree .tobago-treeNode {
+tobago-tree .tobago-treeNode {
   cursor: default;
 }
-.tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
+tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
   cursor: pointer;
 }
-
 .tobago-treeSelect .form-check-inline {
   margin-left: 0.375rem;
   margin-right: 0.375rem;
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css.map
index b55e603..ee780f3 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../../node_modules/bootstrap/scss/_type.scs [...]
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../../node_modules/bootstrap/scss/_type.scs [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css
index 04b0fda..b9e7ad9 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";@font-face{font-family:Amaranth;font-style:normal;font-weight:400;src:url("../fonts/Amaranth-Regular.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:normal;font-weight:700;src:url("../fonts/Amaranth-Bold.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:italic;src:url("../fonts/Amaranth-Italic.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:italic;font-weight:700;src:url("../fonts/Amaranth-BoldItalic.otf") format( [...]
+@charset "UTF-8";@font-face{font-family:Amaranth;font-style:normal;font-weight:400;src:url("../fonts/Amaranth-Regular.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:normal;font-weight:700;src:url("../fonts/Amaranth-Bold.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:italic;src:url("../fonts/Amaranth-Italic.otf") format("opentype")}@font-face{font-family:Amaranth;font-style:italic;font-weight:700;src:url("../fonts/Amaranth-BoldItalic.otf") format( [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css.map
index 8de68cf..58d3a01 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-roxborough/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-roxborough/src/main/css/tobago.css"],"names":[],"mappings":"iBAiCA,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,qCAAqC,mBAE5C,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,kCAAkC,mBAEzC,WACE,YAAa,SACb,WAAY,OACZ,IAAK,oCAAoC,mBAE3C,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,wCAAwC,mBAEvB,mBAAxB,uBACE,YAAa,QAAQ,CAAE,KAAK,CAAE,MAShC,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB, [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-roxborough/src/main/css/tobago.css"],"names":[],"mappings":"iBAiCA,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,qCAAqC,mBAE5C,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,kCAAkC,mBAEzC,WACE,YAAa,SACb,WAAY,OACZ,IAAK,oCAAoC,mBAE3C,WACE,YAAa,SACb,WAAY,OACZ,YAAa,IACb,IAAK,wCAAwC,mBAEvB,mBAAxB,uBACE,YAAa,QAAQ,CAAE,KAAK,CAAE,MAShC,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB, [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css
index bb832aa..f44290d 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css
@@ -12746,13 +12746,12 @@ tobago-tab-group tobago-tab > .nav-link > i + span {
 }
 
 /* tree ---------------------------------------------------------------------- */
-.tobago-tree .tobago-treeNode {
+tobago-tree .tobago-treeNode {
   cursor: default;
 }
-.tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
+tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
   cursor: pointer;
 }
-
 .tobago-treeSelect .form-check-inline {
   margin-left: 0.375rem;
   margin-right: 0.375rem;
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css.map
index 70ceea5..c52ae47 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../../node_modules/bootstrap/scss/_type.scss","../../../../node_mo [...]
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../../node_modules/bootstrap/scss/_type.scss","../../../../node_mo [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css
index d7d4897..986e1d5 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs- [...]
+@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs- [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css.map
index 5e54eb3..c085620 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-scarborough/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-scarborough/src/main/css/tobago.css"],"names":[],"mappings":"iBAuBA,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9B,iBAAkB,EAAE [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-scarborough/src/main/css/tobago.css"],"names":[],"mappings":"iBAuBA,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9B,iBAAkB,EAAE [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css
index 7d8428d..71299dc 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css
@@ -12447,13 +12447,12 @@ tobago-tab-group tobago-tab > .nav-link > i + span {
 }
 
 /* tree ---------------------------------------------------------------------- */
-.tobago-tree .tobago-treeNode {
+tobago-tree .tobago-treeNode {
   cursor: default;
 }
-.tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
+tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
   cursor: pointer;
 }
-
 .tobago-treeSelect .form-check-inline {
   margin-left: 0.375rem;
   margin-right: 0.375rem;
diff --git a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css.map
index 6a7ce51..d2febb4 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/_type.scss","../../../../node_modules/bootstrap/scss/mixins/_lists.scss","../. [...]
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../scss/_custom.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/_type.scss","../../../../node_modules/bootstrap/scss/mixins/_lists.scss","../. [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css
index fca8ca7..06da515 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#3a2564;--bs-pink:#d63384;--bs-red:#d30040;--bs-orange:#d90;--bs-yellow:#ffc107;--bs-green:#1da332;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#788c94;--bs-gray-dark:#323232;--bs-gray-100:#f7f7f7;--bs-gray-200:#e3e4e5;--bs-gray-300:#d7d7d7;--bs-gray-400:#ced4da;--bs-gray-500:#acacac;--bs-gray-600:#788c94;--bs-gray-700:#55595c;--bs-gray-800:#323232;--bs-gray-900:#212529;--bs-primary:#185722;--bs-sec [...]
+@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#3a2564;--bs-pink:#d63384;--bs-red:#d30040;--bs-orange:#d90;--bs-yellow:#ffc107;--bs-green:#1da332;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#788c94;--bs-gray-dark:#323232;--bs-gray-100:#f7f7f7;--bs-gray-200:#e3e4e5;--bs-gray-300:#d7d7d7;--bs-gray-400:#ced4da;--bs-gray-500:#acacac;--bs-gray-600:#788c94;--bs-gray-700:#55595c;--bs-gray-800:#323232;--bs-gray-900:#212529;--bs-primary:#185722;--bs-sec [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css.map
index be6e135..a935721 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-speyside/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-speyside/src/main/css/tobago.css"],"names":[],"mappings":"iBAuCA,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,KACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,EAAE,CAAE,GAC1B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9B,iBAAkB,EAAE,CA [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-speyside/src/main/css/tobago.css"],"names":[],"mappings":"iBAuCA,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,KACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,EAAE,CAAE,GAC1B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9B,iBAAkB,EAAE,CA [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/css/tobago.css b/tobago-theme/tobago-theme-standard/src/main/css/tobago.css
index 601aa46..8179718 100644
--- a/tobago-theme/tobago-theme-standard/src/main/css/tobago.css
+++ b/tobago-theme/tobago-theme-standard/src/main/css/tobago.css
@@ -12716,13 +12716,12 @@ tobago-tab-group tobago-tab > .nav-link > i + span {
 }
 
 /* tree ---------------------------------------------------------------------- */
-.tobago-tree .tobago-treeNode {
+tobago-tree .tobago-treeNode {
   cursor: default;
 }
-.tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
+tobago-tree .tobago-treeNode .tobago-treeNode-toggle:not(.invisible) {
   cursor: pointer;
 }
-
 .tobago-treeSelect .form-check-inline {
   margin-left: 0.375rem;
   margin-right: 0.375rem;
diff --git a/tobago-theme/tobago-theme-standard/src/main/css/tobago.css.map b/tobago-theme/tobago-theme-standard/src/main/css/tobago.css.map
index 75c39b0..60b8979 100644
--- a/tobago-theme/tobago-theme-standard/src/main/css/tobago.css.map
+++ b/tobago-theme/tobago-theme-standard/src/main/css/tobago.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../../node_modules/bootstrap/scss/_type.scss","../../../../node_mo [...]
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../scss/tobago-theme.scss","../../../../node_modules/bootstrap/scss/bootstrap.scss","../../../../node_modules/bootstrap/scss/_root.scss","../../../../node_modules/bootstrap/scss/_reboot.scss","../../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../../node_modules/bootstrap/scss/_variables.scss","../../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../../node_modules/bootstrap/scss/_type.scss","../../../../node_mo [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css b/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css
index e7503f9..e0d211d 100644
--- a/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css
+++ b/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css
@@ -1,2 +1,2 @@
-@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs- [...]
+@charset "UTF-8";:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs- [...]
 /*# sourceMappingURL=tobago.min.css.map */
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css.map b/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css.map
index 286e116..6a1d87d 100644
--- a/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css.map
+++ b/tobago-theme/tobago-theme-standard/src/main/css/tobago.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["tobago-theme-standard/src/main/css/tobago.css"],"names":[],"mappings":"iBAuBA,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9B,iBAAkB,EAAE,CA [...]
\ No newline at end of file
+{"version":3,"sources":["tobago-theme-standard/src/main/css/tobago.css"],"names":[],"mappings":"iBAuBA,MACE,UAAW,QACX,YAAa,QACb,YAAa,QACb,UAAW,QACX,SAAU,QACV,YAAa,QACb,YAAa,QACb,WAAY,QACZ,UAAW,QACX,UAAW,QACX,WAAY,KACZ,UAAW,QACX,eAAgB,QAChB,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,aAAc,QACd,UAAW,QACX,aAAc,QACd,YAAa,QACb,WAAY,QACZ,UAAW,QACX,iBAAkB,EAAE,CAAE,GAAG,CAAE,IAC3B,mBAAoB,GAAG,CAAE,GAAG,CAAE,IAC9B,iBAAkB,EAAE,CA [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/js/tobago.js b/tobago-theme/tobago-theme-standard/src/main/js/tobago.js
index 386acb9..36a9f46 100644
--- a/tobago-theme/tobago-theme-standard/src/main/js/tobago.js
+++ b/tobago-theme/tobago-theme-standard/src/main/js/tobago.js
@@ -13341,7 +13341,7 @@ Type: ${data.type}`);
           }
       }
       get hiddenInputSelected() {
-          return this.querySelector(":scope > .tobago-tree-selected");
+          return this.querySelector(":scope > input[type=hidden].tobago-selected");
       }
       clearExpandedNodes() {
           this.hiddenInputExpanded.value = "[]"; //empty set
@@ -13357,7 +13357,7 @@ Type: ${data.type}`);
           this.hiddenInputExpanded.value = JSON.stringify(Array.from(expandedNodes));
       }
       get hiddenInputExpanded() {
-          return this.querySelector(":scope > .tobago-tree-expanded");
+          return this.querySelector(":scope > input[type=hidden].tobago-expanded");
       }
       get selectable() {
           return Selectable[this.getAttribute("selectable")];
@@ -13534,7 +13534,7 @@ Type: ${data.type}`);
                   }
               }
               this.deleteExpandedNode(this.index);
-              this.classList.remove("tobago-treeNode-markup-expanded");
+              this.classList.remove("tobago-expanded");
               this.hideNodes(this.treeChildNodes);
               if (this.tree) {
                   this.ajax(event, false);
@@ -13554,7 +13554,7 @@ Type: ${data.type}`);
                   }
               }
               this.addExpandedNode(this.index);
-              this.classList.add("tobago-treeNode-markup-expanded");
+              this.classList.add("tobago-expanded");
               this.showNodes(this.treeChildNodes);
               if (this.tree) {
                   this.ajax(event, this.treeChildNodes.length === 0);
diff --git a/tobago-theme/tobago-theme-standard/src/main/js/tobago.js.map b/tobago-theme/tobago-theme-standard/src/main/js/tobago.js.map
index 89392c6..bce7050 100644
--- a/tobago-theme/tobago-theme-standard/src/main/js/tobago.js.map
+++ b/tobago-theme/tobago-theme-standard/src/main/js/tobago.js.map
@@ -1 +1 @@
-{"version":3,"file":"tobago.js","sources":["../ts/tobago-utils.ts","../ts/tobago-bar.ts","../../../../node_modules/@popperjs/core/lib/enums.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../../node_modules/@popperjs/core/lib/utils/getBasePlacement [...]
\ No newline at end of file
+{"version":3,"file":"tobago.js","sources":["../ts/tobago-utils.ts","../ts/tobago-bar.ts","../../../../node_modules/@popperjs/core/lib/enums.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../../node_modules/@popperjs/core/lib/utils/getBasePlacement [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/js/tobago.min.js b/tobago-theme/tobago-theme-standard/src/main/js/tobago.min.js
index 45161ec..0dbc1c6 100644
--- a/tobago-theme/tobago-theme-standard/src/main/js/tobago.min.js
+++ b/tobago-theme/tobago-theme-standard/src/main/js/tobago.min.js
@@ -4,5 +4,5 @@
     * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
     */
-const Me="transitionend",Be=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let s=e.getAttribute("href");if(!s||!s.includes("#")&&!s.startsWith("."))return null;s.includes("#")&&!s.startsWith("#")&&(s=`#${s.split("#")[1]}`),t=s&&"#"!==s?s.trim():null}return t},Re=e=>{const t=Be(e);return t&&document.querySelector(t)?t:null},je=e=>{const t=Be(e);return t?document.querySelector(t):null},He=e=>{e.dispatchEvent(new Event(Me))},qe=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&( [...]
+const Me="transitionend",Be=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let s=e.getAttribute("href");if(!s||!s.includes("#")&&!s.startsWith("."))return null;s.includes("#")&&!s.startsWith("#")&&(s=`#${s.split("#")[1]}`),t=s&&"#"!==s?s.trim():null}return t},Re=e=>{const t=Be(e);return t&&document.querySelector(t)?t:null},je=e=>{const t=Be(e);return t?document.querySelector(t):null},He=e=>{e.dispatchEvent(new Event(Me))},qe=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&( [...]
 //# sourceMappingURL=tobago.min.js.map
diff --git a/tobago-theme/tobago-theme-standard/src/main/js/tobago.min.js.map b/tobago-theme/tobago-theme-standard/src/main/js/tobago.min.js.map
index 9d21a05..c4f295d 100644
--- a/tobago-theme/tobago-theme-standard/src/main/js/tobago.min.js.map
+++ b/tobago-theme/tobago-theme-standard/src/main/js/tobago.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"tobago.min.js","sources":["../ts/tobago-utils.ts","../ts/tobago-bar.ts","../../../../node_modules/@popperjs/core/lib/enums.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../../node_modules/@popperjs/core/lib/utils/getBasePlace [...]
\ No newline at end of file
+{"version":3,"file":"tobago.min.js","sources":["../ts/tobago-utils.ts","../ts/tobago-bar.ts","../../../../node_modules/@popperjs/core/lib/enums.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../../node_modules/@popperjs/core/lib/utils/getBasePlace [...]
\ No newline at end of file
diff --git a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-tree-node.ts b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-tree-node.ts
index 9cdf5f2..c9deb3d 100644
--- a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-tree-node.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-tree-node.ts
@@ -45,7 +45,7 @@ export class TreeNode extends HTMLElement {
       }
 
       this.deleteExpandedNode(this.index);
-      this.classList.remove("tobago-treeNode-markup-expanded");
+      this.classList.remove("tobago-expanded");
 
       this.hideNodes(this.treeChildNodes);
       if (this.tree) {
@@ -65,7 +65,7 @@ export class TreeNode extends HTMLElement {
       }
 
       this.addExpandedNode(this.index);
-      this.classList.add("tobago-treeNode-markup-expanded");
+      this.classList.add("tobago-expanded");
 
       this.showNodes(this.treeChildNodes);
       if (this.tree) {
diff --git a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-tree.ts b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-tree.ts
index d1625f2..ec1b2a9 100644
--- a/tobago-theme/tobago-theme-standard/src/main/ts/tobago-tree.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/ts/tobago-tree.ts
@@ -59,7 +59,7 @@ export class Tree extends HTMLElement {
   }
 
   private get hiddenInputSelected(): HTMLInputElement {
-    return this.querySelector(":scope > .tobago-tree-selected");
+    return this.querySelector(":scope > input[type=hidden].tobago-selected");
   }
 
   private clearExpandedNodes(): void {
@@ -79,7 +79,7 @@ export class Tree extends HTMLElement {
   }
 
   get hiddenInputExpanded(): HTMLInputElement {
-    return this.querySelector(":scope > .tobago-tree-expanded");
+    return this.querySelector(":scope > input[type=hidden].tobago-expanded");
   }
 
   get selectable(): Selectable {