reneco-hierarchized-picker 0.4.3-beta.10 → 0.4.3-beta.12

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.
@@ -323,49 +323,6 @@ Tree.prototype.bindEvent = function (ele) {
323
323
  else if (target.nodeName === 'SPAN' && target.classList.contains('treejs-switcher')) {
324
324
  this.onSwitcherClick(target);
325
325
  }
326
- const hasUndefinedchild = e.target.parentNode.querySelectorAll(".treejs-switcher").length > 0 && e.target.parentNode.querySelectorAll('ul').length == 0;
327
- //CUSTOM
328
- const childspans = Array.prototype.slice.call(e.target.parentNode.querySelectorAll('ul > li > span.treejs-label')).filter((ele) => {
329
- return ele.parentNode.parentNode.parentNode === e.target.parentNode;
330
- });
331
- let undefinedChildren = [];
332
- //This may be a problem the day a node value is "undefined"
333
- undefinedChildren = childspans.filter(ele => {
334
- return ele.textContent === 'undefined';
335
- });
336
- // If the user clicked on an unloaded node
337
- if (target.nodeName === 'SPAN' && target.classList.contains('treejs-switcher') && (undefinedChildren.length > 0 || hasUndefinedchild)) {
338
- // Clear the subnode HTML
339
- if (undefinedChildren.length > 0) {
340
- e.target.parentNode.querySelector('ul').innerHTML = '';
341
- }
342
- // If source is webservice (it shouldn't be something else)
343
- if (this.options.parentApi.theOptions.source == 'webservice') {
344
- if (this.options.parentApi.theOptions.origin == 'classification') {
345
- const contextualApiParams = this.options.parentApi.getContextualApiParams(Object.assign(Object.assign({}, this.options.parentApi.theOptions.options), { startNode: target.parentNode.nodeId }));
346
- const contextualApiURL = this.options.parentApi.getContextualApiURL();
347
- // WS Call
348
- this.options.rawDataManager
349
- .getFromClassification(contextualApiURL, contextualApiParams, document.querySelector("#hierarchized-picker-" + this.options.parentApi.componentID + " .loader"))
350
- .then(data => {
351
- this.options.completeCurrentTreeWithTree(this, data, this.options.parentApi.theOptions);
352
- });
353
- }
354
- else {
355
- // WS Call
356
- this.options.rawDataManager
357
- .getFromSource(this.options.parentApi.theOptions.url, {
358
- StartNodeID: target.parentNode.nodeId,
359
- lng: this.options.parentApi.theOptions.options.lng,
360
- IsDeprecated: this.options.parentApi.theOptions.options.IsDeprecated,
361
- }, document.querySelector("#hierarchized-picker-" + this.options.parentApi.componentID + " .loader"))
362
- .then(data => {
363
- this.options.completeCurrentTreeWithTree(this, data, this.options.parentApi.theOptions);
364
- });
365
- }
366
- }
367
- this.onSwitcherClick(target);
368
- }
369
326
  }, false);
370
327
  };
371
328
  Tree.prototype.onItemClick = async function (id, rightclick = false) {
@@ -502,6 +459,48 @@ Tree.prototype.markWillUpdateNode = function (node) {
502
459
  this.willUpdateNodesById[node.id] = node;
503
460
  };
504
461
  Tree.prototype.onSwitcherClick = function (target) {
462
+ const hasUndefinedchild = target.parentNode.querySelectorAll(".treejs-switcher").length > 0 && target.parentNode.querySelectorAll('ul').length == 0;
463
+ //CUSTOM
464
+ const childspans = Array.prototype.slice.call(target.parentNode.querySelectorAll('ul > li > span.treejs-label')).filter((ele) => {
465
+ return ele.parentNode.parentNode.parentNode === target.parentNode;
466
+ });
467
+ let undefinedChildren = [];
468
+ //This may be a problem the day a node value is "undefined"
469
+ undefinedChildren = childspans.filter(ele => {
470
+ return ele.textContent === 'undefined';
471
+ });
472
+ // If the user clicked on an unloaded node
473
+ if (target.nodeName === 'SPAN' && target.classList.contains('treejs-switcher') && (undefinedChildren.length > 0 || hasUndefinedchild)) {
474
+ // Clear the subnode HTML
475
+ if (undefinedChildren.length > 0) {
476
+ target.parentNode.querySelector('ul').innerHTML = '';
477
+ }
478
+ // If source is webservice (it shouldn't be something else)
479
+ if (this.options.parentApi.theOptions.source == 'webservice') {
480
+ if (this.options.parentApi.theOptions.origin == 'classification') {
481
+ const contextualApiParams = this.options.parentApi.getContextualApiParams(Object.assign(Object.assign({}, this.options.parentApi.theOptions.options), { startNode: target.parentNode.nodeId }));
482
+ const contextualApiURL = this.options.parentApi.getContextualApiURL();
483
+ // WS Call
484
+ this.options.rawDataManager
485
+ .getFromClassification(contextualApiURL, contextualApiParams, document.querySelector("#hierarchized-picker-" + this.options.parentApi.componentID + " .loader"))
486
+ .then(data => {
487
+ this.options.completeCurrentTreeWithTree(this, data, this.options.parentApi.theOptions);
488
+ });
489
+ }
490
+ else {
491
+ // WS Call
492
+ this.options.rawDataManager
493
+ .getFromSource(this.options.parentApi.theOptions.url, {
494
+ StartNodeID: target.parentNode.nodeId,
495
+ lng: this.options.parentApi.theOptions.options.lng,
496
+ IsDeprecated: this.options.parentApi.theOptions.options.IsDeprecated,
497
+ }, document.querySelector("#hierarchized-picker-" + this.options.parentApi.componentID + " .loader"))
498
+ .then(data => {
499
+ this.options.completeCurrentTreeWithTree(this, data, this.options.parentApi.theOptions);
500
+ });
501
+ }
502
+ }
503
+ }
505
504
  const liEle = target.parentNode;
506
505
  const ele = liEle.lastChild;
507
506
  const height = ele.scrollHeight;
@@ -539,6 +538,9 @@ Tree.prototype.onSwitcherClick = function (target) {
539
538
  },
540
539
  });
541
540
  }
541
+ return new Promise((resolve) => {
542
+ resolve(this);
543
+ });
542
544
  };
543
545
  Tree.prototype.walkUp = function (node, changeState) {
544
546
  const { parent } = node;
@@ -18642,27 +18644,49 @@ function focusOutSearchEvent(component, event) {
18642
18644
  manageFocusOut(component, event);
18643
18645
  }
18644
18646
 
18647
+ let focusedNodeIndex = 0;
18645
18648
  function setupKeyboardNavigation(component, navigateInTree) {
18646
18649
  const treeArea = component.el.querySelector('.hierarchized-picker-tree-area');
18647
18650
  if (!treeArea)
18648
18651
  return;
18649
- let focusedNodeIndex = 0;
18650
18652
  function focusNode(allLiElements, liElementToFocus) {
18651
18653
  Object.values(allLiElements).forEach((liNode) => {
18652
18654
  liNode.classList.remove('treejs-node__focused');
18653
18655
  });
18654
18656
  liElementToFocus.classList.add('treejs-node__focused');
18655
18657
  }
18658
+ function findAllTreeNodes(treeNodes, liElementsById) {
18659
+ let allNodes = [];
18660
+ const traverse = (nodes) => {
18661
+ nodes.forEach(node => {
18662
+ allNodes.push(node);
18663
+ if (node.children && node.children.length > 0 && !liElementsById[node.id].classList.contains("treejs-node__close")) {
18664
+ traverse(node.children);
18665
+ }
18666
+ });
18667
+ };
18668
+ traverse(treeNodes);
18669
+ return allNodes;
18670
+ }
18671
+ focusedNodeIndex = 0;
18672
+ if (component && component.loadedTreeJs && component.loadedTreeJs.liElementsById && component.loadedTreeJs.treeNodes) {
18673
+ focusNode(component.loadedTreeJs.liElementsById, component.loadedTreeJs.liElementsById[component.loadedTreeJs.treeNodes[focusedNodeIndex].id]);
18674
+ }
18675
+ if (component.el._hasKeydownListener) {
18676
+ return;
18677
+ }
18678
+ component.el._hasKeydownListener = true;
18656
18679
  component.el.addEventListener('keydown', (event) => {
18657
18680
  var _a, _b;
18658
18681
  event.stopPropagation();
18659
18682
  const tree = component.loadedTreeJs;
18660
- const treeNodesFromTree = tree.treeNodes;
18683
+ let treeNodesFromTree = findAllTreeNodes(tree.treeNodes, tree.liElementsById);
18661
18684
  if (!tree || !treeNodesFromTree.length)
18662
18685
  return;
18663
- const spaceNode = treeNodesFromTree[focusedNodeIndex];
18664
- const activeNode = treeNodesFromTree[focusedNodeIndex];
18665
- const liElement = tree.liElementsById[activeNode.id];
18686
+ let spaceNode = treeNodesFromTree[focusedNodeIndex];
18687
+ let activeNode = treeNodesFromTree[focusedNodeIndex];
18688
+ let liElement = tree.liElementsById[activeNode.id];
18689
+ const handledEvents = ['tab', '0', 'arrowup', 'arrowdown', 'arrowleft', 'arrowright'];
18666
18690
  switch (event.key) {
18667
18691
  case 'Tab':
18668
18692
  case '0':
@@ -18678,6 +18702,7 @@ function setupKeyboardNavigation(component, navigateInTree) {
18678
18702
  focusedNodeIndex = Math.max(focusedNodeIndex - 1, 0);
18679
18703
  const newActiveNodeUp = treeNodesFromTree[focusedNodeIndex];
18680
18704
  const newLiElementUp = tree.liElementsById[newActiveNodeUp.id];
18705
+ newLiElementUp.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
18681
18706
  focusNode(tree.liElementsById, newLiElementUp);
18682
18707
  break;
18683
18708
  case 'ArrowDown':
@@ -18686,13 +18711,13 @@ function setupKeyboardNavigation(component, navigateInTree) {
18686
18711
  const newActiveNodeDown = treeNodesFromTree[focusedNodeIndex];
18687
18712
  const newLiElementDown = tree.liElementsById[newActiveNodeDown.id];
18688
18713
  focusNode(tree.liElementsById, newLiElementDown);
18714
+ newLiElementDown.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
18689
18715
  break;
18690
18716
  case 'ArrowLeft':
18691
18717
  event.preventDefault();
18692
18718
  const leftSwitcher = liElement.querySelector('.treejs-switcher');
18693
18719
  if (leftSwitcher) {
18694
18720
  (_a = component.loadedTreeJs) === null || _a === void 0 ? void 0 : _a.onSwitcherClick(leftSwitcher);
18695
- component.showTree('hide');
18696
18721
  }
18697
18722
  break;
18698
18723
  case 'ArrowRight':
@@ -18703,13 +18728,12 @@ function setupKeyboardNavigation(component, navigateInTree) {
18703
18728
  }
18704
18729
  break;
18705
18730
  }
18706
- navigateInTree.emit(event.key);
18731
+ if (handledEvents.includes(event.key.toLowerCase()))
18732
+ navigateInTree.emit(event);
18707
18733
  });
18708
- if (component && component.loadedTreeJs && component.loadedTreeJs.liElementsById && component.loadedTreeJs.treeNodes)
18709
- setTimeout(() => focusNode(component.loadedTreeJs.liElementsById, component.loadedTreeJs.liElementsById[component.loadedTreeJs.treeNodes[focusedNodeIndex].id]), 100);
18710
18734
  }
18711
18735
 
18712
- const hierarchizedPickerCss = "reneco-hierarchized-picker .hierarchized-picker-raw-tree-area{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}reneco-hierarchized-picker .loader{position:absolute;z-index:1;min-width:100%;min-height:100%;background:#FFFFFF99;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:10px;-webkit-box-sizing:border-box;box-sizing:border-box}reneco-hierarchized-picker .loader .loader-inner{background:#FFF;padding:20px;-webkit-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000;-webkit-box-sizing:border-box;box-sizing:border-box}reneco-hierarchized-picker .loader:not(.loading){display:none}reneco-hierarchized-picker .scrollable{overflow-y:auto;position:relative}reneco-hierarchized-picker .treejs{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:var(--hpicker-theme-typography-tree-font-size, 14px) !important;font-weight:var(--hpicker-theme-typography-tree-font-weight, 400) !important}reneco-hierarchized-picker .treejs *:after,reneco-hierarchized-picker .treejs *:before{-webkit-box-sizing:border-box;box-sizing:border-box}reneco-hierarchized-picker .treejs>.treejs-node{padding-left:0}reneco-hierarchized-picker .treejs .treejs-nodes{list-style:none;padding-left:20px;overflow:hidden;-webkit-transition:height 150ms ease-out, opacity 150ms ease-out;-o-transition:height 150ms ease-out, opacity 150ms ease-out;transition:height 150ms ease-out, opacity 150ms ease-out}reneco-hierarchized-picker .treejs .treejs-node{cursor:pointer;overflow:hidden;position:relative}reneco-hierarchized-picker .treejs .treejs-node.treejs-placeholder{padding-left:20px}reneco-hierarchized-picker .treejs .treejs-switcher{display:inline-block;vertical-align:middle;width:20px;height:20px;cursor:pointer;position:relative;-webkit-transition:-webkit-transform 150ms ease-out;transition:-webkit-transform 150ms ease-out;-o-transition:transform 150ms ease-out;transition:transform 150ms ease-out;transition:transform 150ms ease-out, -webkit-transform 150ms ease-out}reneco-hierarchized-picker .treejs .treejs-switcher:before{position:absolute;top:8px;left:6px;display:block;content:' ';border:4px solid transparent;border-top:4px solid rgba(0, 0, 0, 0.4);-webkit-transition:border-color 150ms;-o-transition:border-color 150ms;transition:border-color 150ms}reneco-hierarchized-picker .treejs .treejs-switcher:hover:before{border-top:4px solid var(--hpicker-theme-palette-font-color)}reneco-hierarchized-picker .treejs-node__checked>.treejs-switcher:before{border-top:4px solid var(--hpicker-theme-palette-primary-contrastText) !important}reneco-hierarchized-picker .treejs-node__focused{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:2px}reneco-hierarchized-picker .treejs .treejs-node__close>.treejs-switcher{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}reneco-hierarchized-picker .treejs .treejs-node__close>.treejs-nodes{height:0}reneco-hierarchized-picker .treejs .treejs-checkbox{display:inline-block;vertical-align:middle;width:20px;height:20px;cursor:pointer;position:relative}reneco-hierarchized-picker .treejs .treejs-checkbox:before{-webkit-transition:all 0.3s;-o-transition:all 0.3s;transition:all 0.3s;cursor:pointer;position:absolute;top:2px;content:' ';display:block;width:16px;height:16px;border:1px solid #d9d9d9;border-radius:2px}reneco-hierarchized-picker .treejs .treejs-checkbox:hover:before{-webkit-box-shadow:0 0 2px 1px #1890ff;box-shadow:0 0 2px 1px #1890ff}reneco-hierarchized-picker .treejs .treejs-node__checked>.treejs-checkbox:before{background-color:#1890ff;border-color:#1890ff}reneco-hierarchized-picker .treejs .treejs-node__checked>.treejs-checkbox:after{position:absolute;content:' ';display:block;top:4px;left:5px;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}reneco-hierarchized-picker .treejs .treejs-node__halfchecked{background-color:var(--hpicker-theme-palette-background-default, var(--mui-palette-background-default, #e8a86c))}reneco-hierarchized-picker .treejs .treejs-node__halfchecked>.treejs-checkbox:before{background-color:#1890ff;border-color:#1890ff}reneco-hierarchized-picker .treejs .treejs-node__halfchecked>.treejs-checkbox:after{position:absolute;content:' ';display:block;top:9px;left:3px;width:10px;height:2px;background-color:#fff}reneco-hierarchized-picker .treejs .treejs-node__disabled{cursor:not-allowed;color:rgba(0, 0, 0, 0.25)}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-checkbox{cursor:not-allowed}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-checkbox:before{cursor:not-allowed;border-color:#d9d9d9 !important;background-color:#f5f5f5 !important}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-checkbox:hover:before{-webkit-box-shadow:none !important;box-shadow:none !important}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-node__checked>.treejs-checkbox:after{border-color:#d9d9d9}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-node__halfchecked>.treejs-checkbox:after{background-color:#d9d9d9}reneco-hierarchized-picker .treejs .treejs-node__disabled.treejs-node__checked>.treejs-checkbox:after{border-color:#d9d9d9}reneco-hierarchized-picker .treejs .treejs-node__disabled.treejs-node__halfchecked>.treejs-checkbox:after{background-color:#d9d9d9}reneco-hierarchized-picker .treejs .treejs-label{vertical-align:middle}reneco-hierarchized-picker .treejs .treejs-node__deprecated>.treejs-label{text-decoration:line-through}reneco-hierarchized-picker .treejs .treejs-node__desaturated>.treejs-label{opacity:.5}reneco-hierarchized-picker .treejs .treejs-node__searchmatch>.treejs-label{font-weight:bolder}reneco-hierarchized-picker .treejs .dragging{background:var(--hpicker-theme-palette-background-light, var(--mui-palette-background-light, #e8a86c));display:inline;opacity:.9;padding:11px 0px;display:block}reneco-hierarchized-picker .treejs .dragover{background:var(--hpicker-theme-palette-background-light, var(--mui-palette-background-light, #e8a86c))}reneco-hierarchized-picker .treejs .dragover-over::after{content:\"\";display:block;width:2px;height:100%;position:absolute;top:0;left:0;background:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, #d58433))}reneco-hierarchized-picker .treejs .dragover-before::after{content:\"\";display:block;height:2px;width:100%;position:absolute;top:0;left:0;background:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, #d58433))}reneco-hierarchized-picker .treejs .dragover-after::after{content:\"\";display:block;height:2px;width:100%;position:absolute;bottom:0;left:0;background:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, #d58433))}reneco-hierarchized-picker .fieldError{color:red !important}reneco-hierarchized-picker .hidden{display:none;opacity:0}reneco-hierarchized-picker ul.treejs-nodes:first-child{padding-left:0px !important;margin-top:0px !important;margin-left:0px !important;background-color:var(--hpicker-theme-palette-background-dark)}reneco-hierarchized-picker ul.treejs-nodes:not(:first-child){margin:0 !important;padding-left:15px !important;background-color:var(--hpicker-theme-palette-background-dark, var(--mui-palette-background-dark, var(--ion-color-light-tint, #FFF)))}reneco-hierarchized-picker ul.treejs-nodes{margin-left:15px !important;padding-left:0px !important}reneco-hierarchized-picker .hierarchized-picker-raw-tree li.treejs-node ul.treejs-nodes{margin:11px 0 0 0 !important}reneco-hierarchized-picker .hierarchized-picker-raw-tree li.treejs-node__close ul.treejs-nodes{margin:0 !important}reneco-hierarchized-picker li.treejs-node__close{background-color:var(--hpicker-theme-palette-background-light, var(--mui-palette-background-light, var(--ion-color-light, #FAFAFA)))}reneco-hierarchized-picker li:not(.treejs-node__close){background-color:var(--hpicker-theme-palette-background-default, var(--mui-palette-background-default, #e8a86c));padding-bottom:0px !important}reneco-hierarchized-picker li:not(.treejs-node__close) ul.treejs-nodes li{margin-top:2px !important}reneco-hierarchized-picker ul li:last-child{margin-bottom:0px !important}reneco-hierarchized-picker li.treejs-node__checked{background-color:var(--hpicker-theme-palette-primary-light) !important;color:var(--hpicker-theme-palette-primary-ContrastText, var(--mui-palette-primary-ContrastText, var(--ion-color-primary-contrast, #000)))!important}reneco-hierarchized-picker li.treejs-node{padding:2px 0px;margin-bottom:2px}reneco-hierarchized-picker .treejs-node.readonly_node{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:darkgrey}reneco-hierarchized-picker .treejs-node:not(.readonly_node){-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:var(--hpicker-theme-palette-font-color, var(--mui-palette-font-color, black))}reneco-hierarchized-picker .hierarchized-picker-container{position:relative;width:100%}reneco-hierarchized-picker .hierarchized-picker-input-area{background-color:transparent !important;display:-ms-flexbox;display:flex;width:100%;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}reneco-hierarchized-picker .hierarchized-picker-input-area .input-wrapper{padding-left:10px !important}reneco-hierarchized-picker .hierarchized-picker-input{-ms-flex:2;flex:2}reneco-hierarchized-picker .hierarchized-picker-input input{width:100%}reneco-hierarchized-picker .hierarchized-picker-input.readonly{pointer-events:none;cursor:initial}reneco-hierarchized-picker .hierarchized-picker-label{position:stacked;margin-left:5px}reneco-hierarchized-picker .hierarchized-picker-tree-area{padding-top:10px}reneco-hierarchized-picker .hierarchized-picker-modal-area{position:absolute;width:100%;background-color:var(--hpicker-theme-palette-background-dark, var(--mui-palette-background-dark, var(--ion-color-light-tint, #FFF))) !important;z-index:10;overflow:scroll;top:20px;min-height:100px;max-height:var(--hpicker-theme-modal-height, \"200px\") !important;-webkit-box-shadow:0 0px 15px 0 rgba(0, 0, 0, 0.2);box-shadow:0 0px 15px 0 rgba(0, 0, 0, 0.2);border-radius:4px;margin-right:0px !important}reneco-hierarchized-picker .hierarchized-picker-modal-area.display-modale-top{bottom:30px !important;top:unset !important}reneco-hierarchized-picker .hierarchized-picker-modal{padding:0px 15px}reneco-hierarchized-picker .hierarchized-picker{display:-ms-flexbox;display:flex;width:100%;font-family:'Roboto', sans-serif}reneco-hierarchized-picker .hierarchized-picker-spinner{margin:35px 0px 0px 145px}reneco-hierarchized-picker .reneco:before{position:relative;top:1px}reneco-hierarchized-picker .hierarchized-picker-input-area span.reneco:hover{cursor:pointer}reneco-hierarchized-picker .hierarchized-picker-input-area span.reneco-close{color:var(--ion-color-danger, red) !important;padding-left:10px}reneco-hierarchized-picker .treejs .treejs-switcher:before{border-top:4px solid var(--hpicker-theme-palette-font-color, var(--mui-palette-font-color, var(--ion-color-dark-shade, #121212)))}reneco-hierarchized-picker .treejs .treejs-checkbox:before{-webkit-box-shadow:none !important;box-shadow:none !important}reneco-hierarchized-picker .treejs .treejs-node__checked>.treejs-checkbox:before,reneco-hierarchized-picker .treejs .treejs-node__halfchecked>.treejs-checkbox:before{background-color:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, var(--ion-color-primary, #d58433))) !important;border-color:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, var(--ion-color-primary, #d58433))) !important;-webkit-box-shadow:none !important;box-shadow:none !important}reneco-hierarchized-picker #autocomplete-results-area{position:absolute;margin-top:48px;background-color:white;left:15px;z-index:10;padding:0px 5px;max-width:340px;max-height:110px;overflow:auto}reneco-hierarchized-picker #autocomplete-results-area li{list-style-type:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;margin:1px}reneco-hierarchized-picker .hierarchized-picker-raw-tree-area li.treejs-node{padding:11px 0px;display:block}reneco-hierarchized-picker input[title]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}reneco-hierarchized-picker input{background-color:var(--hpicker-theme-palette-input-background-color, #eeeeee);border-style:var(--hpicker-theme-palette-input-border-style, solid)}reneco-hierarchized-picker input:focus-visible{outline:none !important}.hierarchized-picker-raw-tree-area.readonly li.treejs-node .treejs-switcher{pointer-events:all}::-webkit-scrollbar-thumb{background:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, var(--ion-color-primary, #d58433)));width:8px;margin:5px;border-radius:5px}::-webkit-scrollbar{background:var(--ion-color-medium-tint, #E0E0E0);width:8px;height:8px;margin:5px;cursor:pointer;border-radius:5px}::-webkit-scrollbar-corner{background-color:var(--ion-color-light-tint, #FFF)}[class$=\"-dark\"] reneco-hierarchized-picker li.treejs-node__close{background-color:var(--ion-color-dark-tint, #424242);color:var(--ion-color-dark-contrast, #fff)}[class$=\"-dark\"] reneco-hierarchized-picker li:not(.treejs-node__close){background-color:var(--ion-color-dark, #212121);color:var(--ion-color-dark-contrast, #fff)}[class$=\"-dark\"] reneco-hierarchized-picker li.treejs-node__checked{background-color:var(--ion-color-background, var(--hpicker-theme-palette-background-default, rgba(221, 169, 37, 0.18)));color:var(--ion-color-primary-contrast, #fff) !important}[class$=\"-dark\"] reneco-hierarchized-picker .treejs-switcher:before{border-top-color:var(--ion-color-dark-contrast, #fff) !important}[class$=\"-dark\"] reneco-hierarchized-picker li.treejs-node__checked .treejs-switcher:before{color:var(--ion-color-light-contrast, #111111) !important}[class$=\"-dark\"] reneco-hierarchized-picker ul.treejs-nodes:not(:first-child){background-color:var(--ion-color-light-contrast, #111111) !important}";
18736
+ const hierarchizedPickerCss = "reneco-hierarchized-picker .hierarchized-picker-raw-tree-area{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}reneco-hierarchized-picker .loader{position:absolute;z-index:1;min-width:100%;min-height:100%;background:#FFFFFF99;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:10px;-webkit-box-sizing:border-box;box-sizing:border-box}reneco-hierarchized-picker .loader .loader-inner{background:#FFF;padding:20px;-webkit-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000;-webkit-box-sizing:border-box;box-sizing:border-box}reneco-hierarchized-picker .loader:not(.loading){display:none}reneco-hierarchized-picker .scrollable{overflow-y:auto;position:relative}reneco-hierarchized-picker .treejs{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:var(--hpicker-theme-typography-tree-font-size, 14px) !important;font-weight:var(--hpicker-theme-typography-tree-font-weight, 400) !important}reneco-hierarchized-picker .treejs *:after,reneco-hierarchized-picker .treejs *:before{-webkit-box-sizing:border-box;box-sizing:border-box}reneco-hierarchized-picker .treejs>.treejs-node{padding-left:0}reneco-hierarchized-picker .treejs .treejs-nodes{list-style:none;padding-left:20px;overflow:hidden;-webkit-transition:height 150ms ease-out, opacity 150ms ease-out;-o-transition:height 150ms ease-out, opacity 150ms ease-out;transition:height 150ms ease-out, opacity 150ms ease-out}reneco-hierarchized-picker .treejs .treejs-node{cursor:pointer;overflow:hidden;position:relative}reneco-hierarchized-picker .treejs .treejs-node.treejs-placeholder{padding-left:20px}reneco-hierarchized-picker .treejs .treejs-switcher{display:inline-block;vertical-align:middle;width:20px;height:20px;cursor:pointer;position:relative;-webkit-transition:-webkit-transform 150ms ease-out;transition:-webkit-transform 150ms ease-out;-o-transition:transform 150ms ease-out;transition:transform 150ms ease-out;transition:transform 150ms ease-out, -webkit-transform 150ms ease-out}reneco-hierarchized-picker .treejs .treejs-switcher:before{position:absolute;top:8px;left:6px;display:block;content:' ';border:4px solid transparent;border-top:4px solid rgba(0, 0, 0, 0.4);-webkit-transition:border-color 150ms;-o-transition:border-color 150ms;transition:border-color 150ms}reneco-hierarchized-picker .treejs .treejs-switcher:hover:before{border-top:4px solid var(--hpicker-theme-palette-font-color)}reneco-hierarchized-picker .treejs-node__checked>.treejs-switcher:before{border-top:4px solid var(--hpicker-theme-palette-primary-contrastText) !important}reneco-hierarchized-picker .treejs-node__focused{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:2px}reneco-hierarchized-picker .treejs .treejs-node__close>.treejs-switcher{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}reneco-hierarchized-picker .treejs .treejs-node__close>.treejs-nodes{height:0}reneco-hierarchized-picker .treejs .treejs-checkbox{display:inline-block;vertical-align:middle;width:20px;height:20px;cursor:pointer;position:relative}reneco-hierarchized-picker .treejs .treejs-checkbox:before{-webkit-transition:all 0.3s;-o-transition:all 0.3s;transition:all 0.3s;cursor:pointer;position:absolute;top:2px;content:' ';display:block;width:16px;height:16px;border:1px solid #d9d9d9;border-radius:2px}reneco-hierarchized-picker .treejs .treejs-checkbox:hover:before{-webkit-box-shadow:0 0 2px 1px #1890ff;box-shadow:0 0 2px 1px #1890ff}reneco-hierarchized-picker .treejs .treejs-node__checked>.treejs-checkbox:before{background-color:#1890ff;border-color:#1890ff}reneco-hierarchized-picker .treejs .treejs-node__checked>.treejs-checkbox:after{position:absolute;content:' ';display:block;top:4px;left:5px;width:5px;height:9px;border:2px solid #fff;border-top:none;border-left:none;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}reneco-hierarchized-picker .treejs .treejs-node__halfchecked{background-color:var(--hpicker-theme-palette-background-default, var(--mui-palette-background-default, #e8a86c))}reneco-hierarchized-picker .treejs .treejs-node__halfchecked>.treejs-checkbox:before{background-color:#1890ff;border-color:#1890ff}reneco-hierarchized-picker .treejs .treejs-node__halfchecked>.treejs-checkbox:after{position:absolute;content:' ';display:block;top:9px;left:3px;width:10px;height:2px;background-color:#fff}reneco-hierarchized-picker .treejs .treejs-node__disabled{cursor:not-allowed;color:rgba(0, 0, 0, 0.25)}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-checkbox{cursor:not-allowed}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-checkbox:before{cursor:not-allowed;border-color:#d9d9d9 !important;background-color:#f5f5f5 !important}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-checkbox:hover:before{-webkit-box-shadow:none !important;box-shadow:none !important}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-node__checked>.treejs-checkbox:after{border-color:#d9d9d9}reneco-hierarchized-picker .treejs .treejs-node__disabled .treejs-node__halfchecked>.treejs-checkbox:after{background-color:#d9d9d9}reneco-hierarchized-picker .treejs .treejs-node__disabled.treejs-node__checked>.treejs-checkbox:after{border-color:#d9d9d9}reneco-hierarchized-picker .treejs .treejs-node__disabled.treejs-node__halfchecked>.treejs-checkbox:after{background-color:#d9d9d9}reneco-hierarchized-picker .treejs .treejs-label{vertical-align:middle}reneco-hierarchized-picker .treejs .treejs-node__deprecated>.treejs-label{text-decoration:line-through}reneco-hierarchized-picker .treejs .treejs-node__desaturated>.treejs-label{opacity:.5}reneco-hierarchized-picker .treejs .treejs-node__searchmatch>.treejs-label{font-weight:bolder}reneco-hierarchized-picker .treejs .dragging{background:var(--hpicker-theme-palette-background-light, var(--mui-palette-background-light, #e8a86c));display:inline;opacity:.9;padding:11px 0px;display:block}reneco-hierarchized-picker .treejs .dragover{background:var(--hpicker-theme-palette-background-light, var(--mui-palette-background-light, #e8a86c))}reneco-hierarchized-picker .treejs .dragover-over::after{content:\"\";display:block;width:2px;height:100%;position:absolute;top:0;left:0;background:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, #d58433))}reneco-hierarchized-picker .treejs .dragover-before::after{content:\"\";display:block;height:2px;width:100%;position:absolute;top:0;left:0;background:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, #d58433))}reneco-hierarchized-picker .treejs .dragover-after::after{content:\"\";display:block;height:2px;width:100%;position:absolute;bottom:0;left:0;background:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, #d58433))}reneco-hierarchized-picker .fieldError{color:red !important}reneco-hierarchized-picker .hidden{display:none;opacity:0}reneco-hierarchized-picker ul.treejs-nodes:first-child{padding-left:0px !important;margin-top:0px !important;margin-left:0px !important;background-color:var(--hpicker-theme-palette-background-dark)}reneco-hierarchized-picker ul.treejs-nodes:not(:first-child){margin:0 !important;padding-left:15px !important;background-color:var(--hpicker-theme-palette-background-dark, var(--mui-palette-background-dark, var(--ion-color-light-tint, #FFF)))}reneco-hierarchized-picker ul.treejs-nodes{margin-left:15px !important;padding-left:0px !important}reneco-hierarchized-picker .hierarchized-picker-raw-tree li.treejs-node ul.treejs-nodes{margin:11px 0 0 0 !important}reneco-hierarchized-picker .hierarchized-picker-raw-tree li.treejs-node__close ul.treejs-nodes{margin:0 !important}reneco-hierarchized-picker li.treejs-node__close{background-color:var(--hpicker-theme-palette-background-light, var(--mui-palette-background-light, var(--ion-color-light, #FAFAFA)))}reneco-hierarchized-picker li:not(.treejs-node__close){background-color:var(--hpicker-theme-palette-background-default, var(--mui-palette-background-default, #e8a86c));padding-bottom:0px !important}reneco-hierarchized-picker li:not(.treejs-node__close) ul.treejs-nodes li{margin-top:2px !important}reneco-hierarchized-picker ul li:last-child{margin-bottom:0px !important}reneco-hierarchized-picker li.treejs-node__checked{background-color:var(--hpicker-theme-palette-primary-light) !important;color:var(--hpicker-theme-palette-primary-ContrastText, var(--mui-palette-primary-ContrastText, var(--ion-color-primary-contrast, #000)))!important}reneco-hierarchized-picker li.treejs-node{padding:2px 0px;margin-bottom:2px}reneco-hierarchized-picker .treejs-node.readonly_node{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:darkgrey}reneco-hierarchized-picker .treejs-node:not(.readonly_node){-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:var(--hpicker-theme-palette-font-color, var(--mui-palette-font-color, black))}reneco-hierarchized-picker .hierarchized-picker-container{position:relative;width:100%}reneco-hierarchized-picker .hierarchized-picker-input-area{background-color:transparent !important;display:-ms-flexbox;display:flex;width:100%;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}reneco-hierarchized-picker .hierarchized-picker-input-area .input-wrapper{padding-left:10px !important}reneco-hierarchized-picker .hierarchized-picker-input{-ms-flex:2;flex:2}reneco-hierarchized-picker .hierarchized-picker-input input{width:100%}reneco-hierarchized-picker .hierarchized-picker-input.readonly{pointer-events:none;cursor:initial}reneco-hierarchized-picker .hierarchized-picker-label{position:stacked;margin-left:5px}reneco-hierarchized-picker .hierarchized-picker-tree-area{padding-top:10px}reneco-hierarchized-picker .hierarchized-picker-modal-area{position:absolute;width:100%;background-color:var(--hpicker-theme-palette-background-dark, var(--mui-palette-background-dark, var(--ion-color-light-tint, #FFF))) !important;z-index:10;overflow:scroll;top:20px;min-height:100px;max-height:var(--hpicker-theme-modal-height, \"200px\") !important;-webkit-box-shadow:0 0px 15px 0 rgba(0, 0, 0, 0.2);box-shadow:0 0px 15px 0 rgba(0, 0, 0, 0.2);border-radius:4px;margin-right:0px !important}reneco-hierarchized-picker .hierarchized-picker-modal-area.display-modale-top{bottom:30px !important;top:unset !important}reneco-hierarchized-picker .hierarchized-picker-modal{padding:0px 15px}reneco-hierarchized-picker .hierarchized-picker{display:-ms-flexbox;display:flex;width:100%;font-family:'Roboto', sans-serif}reneco-hierarchized-picker .hierarchized-picker-spinner{margin:35px 0px 0px 145px}reneco-hierarchized-picker .reneco:before{position:relative;top:1px}reneco-hierarchized-picker .hierarchized-picker-input-area span.reneco:hover{cursor:pointer}reneco-hierarchized-picker .hierarchized-picker-input-area span.reneco-close{color:var(--ion-color-danger, red) !important;padding-left:10px}reneco-hierarchized-picker .treejs .treejs-switcher:before{border-top:4px solid var(--hpicker-theme-palette-font-color, var(--mui-palette-font-color, var(--ion-color-dark-shade, #121212)))}reneco-hierarchized-picker .treejs .treejs-checkbox:before{-webkit-box-shadow:none !important;box-shadow:none !important}reneco-hierarchized-picker .treejs .treejs-node__checked>.treejs-checkbox:before,reneco-hierarchized-picker .treejs .treejs-node__halfchecked>.treejs-checkbox:before{background-color:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, var(--ion-color-primary, #d58433))) !important;border-color:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, var(--ion-color-primary, #d58433))) !important;-webkit-box-shadow:none !important;box-shadow:none !important}reneco-hierarchized-picker #autocomplete-results-area{position:absolute;margin-top:48px;background-color:white;left:15px;z-index:10;padding:0px 5px;max-width:340px;max-height:110px;overflow:auto}reneco-hierarchized-picker #autocomplete-results-area li{list-style-type:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;margin:1px}reneco-hierarchized-picker .hierarchized-picker-raw-tree-area li.treejs-node{padding:11px 0px;display:block}reneco-hierarchized-picker input[title]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}reneco-hierarchized-picker input{background-color:var(--hpicker-theme-palette-input-background-color, #eeeeee);border-style:var(--hpicker-theme-palette-input-border-style, solid)}reneco-hierarchized-picker input:focus-visible{outline:unset !important;outline-color:unset !important;outline-style:unset !important}.hierarchized-picker-raw-tree-area.readonly li.treejs-node .treejs-switcher{pointer-events:all}::-webkit-scrollbar-thumb{background:var(--hpicker-theme-palette-primary-main, var(--mui-palette-primary-main, var(--ion-color-primary, #d58433)));width:8px;margin:5px;border-radius:5px}::-webkit-scrollbar{background:var(--ion-color-medium-tint, #E0E0E0);width:8px;height:8px;margin:5px;cursor:pointer;border-radius:5px}::-webkit-scrollbar-corner{background-color:var(--ion-color-light-tint, #FFF)}[class$=\"-dark\"] reneco-hierarchized-picker li.treejs-node__close{background-color:var(--ion-color-dark-tint, #424242);color:var(--ion-color-dark-contrast, #fff)}[class$=\"-dark\"] reneco-hierarchized-picker li:not(.treejs-node__close){background-color:var(--ion-color-dark, #212121);color:var(--ion-color-dark-contrast, #fff)}[class$=\"-dark\"] reneco-hierarchized-picker li.treejs-node__checked{background-color:var(--ion-color-background, var(--hpicker-theme-palette-background-default, rgba(221, 169, 37, 0.18)));color:var(--ion-color-primary-contrast, #fff) !important}[class$=\"-dark\"] reneco-hierarchized-picker .treejs-switcher:before{border-top-color:var(--ion-color-dark-contrast, #fff) !important}[class$=\"-dark\"] reneco-hierarchized-picker li.treejs-node__checked .treejs-switcher:before{color:var(--ion-color-light-contrast, #111111) !important}[class$=\"-dark\"] reneco-hierarchized-picker ul.treejs-nodes:not(:first-child){background-color:var(--ion-color-light-contrast, #111111) !important}";
18713
18737
 
18714
18738
  const HierarchizedPickerComponent = class {
18715
18739
  /**
@@ -18978,7 +19002,6 @@ const HierarchizedPickerComponent = class {
18978
19002
  }
18979
19003
  componentDidLoad() {
18980
19004
  this.mylog('----- componentDidLoad beginning -----');
18981
- setupKeyboardNavigation(this, this.navigateInTree);
18982
19005
  focusMainInput();
18983
19006
  }
18984
19007
  displayWhenLoaded() {
@@ -19523,8 +19546,6 @@ const HierarchizedPickerComponent = class {
19523
19546
  const previousShownTree = this.shownTree;
19524
19547
  this.shownTree = this.hasFocus.length > 0;
19525
19548
  if (this.shownTree && !previousShownTree) {
19526
- console.log("component value", document.querySelector('#hierarchized-picker-input-' + this.componentID));
19527
- console.log("shouldOpenModalAbove", this.shouldOpenModalAbove(document.querySelector('#hierarchized-picker-input-' + this.componentID), this.modaleHeight));
19528
19549
  if (this.shouldOpenModalAbove(document.querySelector('#hierarchized-picker-input-' + this.componentID), this.modaleHeight)) {
19529
19550
  this.modalePosition = 'top';
19530
19551
  }
@@ -19532,6 +19553,8 @@ const HierarchizedPickerComponent = class {
19532
19553
  this.modalePosition = 'bottom';
19533
19554
  }
19534
19555
  focusSearchInput(this);
19556
+ //TODO, this this at the good location ?
19557
+ setupKeyboardNavigation(this, this.navigateInTree);
19535
19558
  }
19536
19559
  }
19537
19560
  // Changes the value of the component with passed node
@@ -19849,9 +19872,7 @@ const SearchInput = class {
19849
19872
  render() {
19850
19873
  return (index.h("div", { id: "hierarchized-picker-input-search",
19851
19874
  // TODO: need component ID ?
19852
- class: "search-input-container", ref: (el) => (this.rootElement = el) }, index.h("div", { class: "reneco reneco-search" }), index.h("input", { ref: (el) => (this.inputElement = el), type: "text", class: "native-input sc-ion-input-md-h sc-ion-input-md-s md search-input hierarchized-picker-search",
19853
- //class="native-input search-input hierarchized-picker-search sc-ion-input-md-h sc-ion-input-md-s md"
19854
- placeholder: this.placeholder, onFocus: () => this.handleFocus(), onBlur: (event) => this.handleBlur(event), onInput: (event) => this.handleInput(event) })));
19875
+ class: "search-input-container", ref: (el) => (this.rootElement = el) }, index.h("div", { class: "reneco reneco-search" }), index.h("input", { ref: (el) => (this.inputElement = el), type: "text", class: "native-input sc-ion-input-md-h sc-ion-input-md-s md search-input hierarchized-picker-search", placeholder: this.placeholder, onFocus: () => this.handleFocus(), onBlur: (event) => this.handleBlur(event), onInput: (event) => this.handleInput(event) })));
19855
19876
  }
19856
19877
  };
19857
19878
  SearchInput.style = searchInputCss;
@@ -477,7 +477,9 @@ reneco-hierarchized-picker input {
477
477
  }
478
478
 
479
479
  reneco-hierarchized-picker input:focus-visible {
480
- outline: none !important;
480
+ outline: unset !important;
481
+ outline-color: unset !important;
482
+ outline-style: unset !important;
481
483
  }
482
484
 
483
485
  /* TODO For now, the readonly status is ignored for the mode tree, probably need a rework sometime */
@@ -272,7 +272,6 @@ export class HierarchizedPickerComponent {
272
272
  }
273
273
  componentDidLoad() {
274
274
  this.mylog('----- componentDidLoad beginning -----');
275
- setupKeyboardNavigation(this, this.navigateInTree);
276
275
  focusMainInput(this);
277
276
  }
278
277
  displayWhenLoaded() {
@@ -820,8 +819,6 @@ export class HierarchizedPickerComponent {
820
819
  const previousShownTree = this.shownTree;
821
820
  this.shownTree = this.hasFocus.length > 0;
822
821
  if (this.shownTree && !previousShownTree) {
823
- console.log("component value", document.querySelector('#hierarchized-picker-input-' + this.componentID));
824
- console.log("shouldOpenModalAbove", this.shouldOpenModalAbove(document.querySelector('#hierarchized-picker-input-' + this.componentID), this.modaleHeight));
825
822
  if (this.shouldOpenModalAbove(document.querySelector('#hierarchized-picker-input-' + this.componentID), this.modaleHeight)) {
826
823
  this.modalePosition = 'top';
827
824
  }
@@ -829,6 +826,8 @@ export class HierarchizedPickerComponent {
829
826
  this.modalePosition = 'bottom';
830
827
  }
831
828
  focusSearchInput(this);
829
+ //TODO, this this at the good location ?
830
+ setupKeyboardNavigation(this, this.navigateInTree);
832
831
  }
833
832
  }
834
833
  // Changes the value of the component with passed node
@@ -31,9 +31,7 @@ export class SearchInput {
31
31
  render() {
32
32
  return (h("div", { id: "hierarchized-picker-input-search",
33
33
  // TODO: need component ID ?
34
- class: "search-input-container", ref: (el) => (this.rootElement = el) }, h("div", { class: "reneco reneco-search" }), h("input", { ref: (el) => (this.inputElement = el), type: "text", class: "native-input sc-ion-input-md-h sc-ion-input-md-s md search-input hierarchized-picker-search",
35
- //class="native-input search-input hierarchized-picker-search sc-ion-input-md-h sc-ion-input-md-s md"
36
- placeholder: this.placeholder, onFocus: () => this.handleFocus(), onBlur: (event) => this.handleBlur(event), onInput: (event) => this.handleInput(event) })));
34
+ class: "search-input-container", ref: (el) => (this.rootElement = el) }, h("div", { class: "reneco reneco-search" }), h("input", { ref: (el) => (this.inputElement = el), type: "text", class: "native-input sc-ion-input-md-h sc-ion-input-md-s md search-input hierarchized-picker-search", placeholder: this.placeholder, onFocus: () => this.handleFocus(), onBlur: (event) => this.handleBlur(event), onInput: (event) => this.handleInput(event) })));
37
35
  }
38
36
  static get is() { return "search-input"; }
39
37
  static get originalStyleUrls() {
@@ -188,49 +188,6 @@ Tree.prototype.bindEvent = function (ele) {
188
188
  else if (target.nodeName === 'SPAN' && target.classList.contains('treejs-switcher')) {
189
189
  this.onSwitcherClick(target);
190
190
  }
191
- const hasUndefinedchild = e.target.parentNode.querySelectorAll(".treejs-switcher").length > 0 && e.target.parentNode.querySelectorAll('ul').length == 0;
192
- //CUSTOM
193
- const childspans = Array.prototype.slice.call(e.target.parentNode.querySelectorAll('ul > li > span.treejs-label')).filter((ele) => {
194
- return ele.parentNode.parentNode.parentNode === e.target.parentNode;
195
- });
196
- let undefinedChildren = [];
197
- //This may be a problem the day a node value is "undefined"
198
- undefinedChildren = childspans.filter(ele => {
199
- return ele.textContent === 'undefined';
200
- });
201
- // If the user clicked on an unloaded node
202
- if (target.nodeName === 'SPAN' && target.classList.contains('treejs-switcher') && (undefinedChildren.length > 0 || hasUndefinedchild)) {
203
- // Clear the subnode HTML
204
- if (undefinedChildren.length > 0) {
205
- e.target.parentNode.querySelector('ul').innerHTML = '';
206
- }
207
- // If source is webservice (it shouldn't be something else)
208
- if (this.options.parentApi.theOptions.source == 'webservice') {
209
- if (this.options.parentApi.theOptions.origin == 'classification') {
210
- const contextualApiParams = this.options.parentApi.getContextualApiParams(Object.assign(Object.assign({}, this.options.parentApi.theOptions.options), { startNode: target.parentNode.nodeId }));
211
- const contextualApiURL = this.options.parentApi.getContextualApiURL();
212
- // WS Call
213
- this.options.rawDataManager
214
- .getFromClassification(contextualApiURL, contextualApiParams, document.querySelector("#hierarchized-picker-" + this.options.parentApi.componentID + " .loader"))
215
- .then(data => {
216
- this.options.completeCurrentTreeWithTree(this, data, this.options.parentApi.theOptions);
217
- });
218
- }
219
- else {
220
- // WS Call
221
- this.options.rawDataManager
222
- .getFromSource(this.options.parentApi.theOptions.url, {
223
- StartNodeID: target.parentNode.nodeId,
224
- lng: this.options.parentApi.theOptions.options.lng,
225
- IsDeprecated: this.options.parentApi.theOptions.options.IsDeprecated,
226
- }, document.querySelector("#hierarchized-picker-" + this.options.parentApi.componentID + " .loader"))
227
- .then(data => {
228
- this.options.completeCurrentTreeWithTree(this, data, this.options.parentApi.theOptions);
229
- });
230
- }
231
- }
232
- this.onSwitcherClick(target);
233
- }
234
191
  }, false);
235
192
  };
236
193
  Tree.prototype.onItemClick = async function (id, rightclick = false) {
@@ -367,6 +324,48 @@ Tree.prototype.markWillUpdateNode = function (node) {
367
324
  this.willUpdateNodesById[node.id] = node;
368
325
  };
369
326
  Tree.prototype.onSwitcherClick = function (target) {
327
+ const hasUndefinedchild = target.parentNode.querySelectorAll(".treejs-switcher").length > 0 && target.parentNode.querySelectorAll('ul').length == 0;
328
+ //CUSTOM
329
+ const childspans = Array.prototype.slice.call(target.parentNode.querySelectorAll('ul > li > span.treejs-label')).filter((ele) => {
330
+ return ele.parentNode.parentNode.parentNode === target.parentNode;
331
+ });
332
+ let undefinedChildren = [];
333
+ //This may be a problem the day a node value is "undefined"
334
+ undefinedChildren = childspans.filter(ele => {
335
+ return ele.textContent === 'undefined';
336
+ });
337
+ // If the user clicked on an unloaded node
338
+ if (target.nodeName === 'SPAN' && target.classList.contains('treejs-switcher') && (undefinedChildren.length > 0 || hasUndefinedchild)) {
339
+ // Clear the subnode HTML
340
+ if (undefinedChildren.length > 0) {
341
+ target.parentNode.querySelector('ul').innerHTML = '';
342
+ }
343
+ // If source is webservice (it shouldn't be something else)
344
+ if (this.options.parentApi.theOptions.source == 'webservice') {
345
+ if (this.options.parentApi.theOptions.origin == 'classification') {
346
+ const contextualApiParams = this.options.parentApi.getContextualApiParams(Object.assign(Object.assign({}, this.options.parentApi.theOptions.options), { startNode: target.parentNode.nodeId }));
347
+ const contextualApiURL = this.options.parentApi.getContextualApiURL();
348
+ // WS Call
349
+ this.options.rawDataManager
350
+ .getFromClassification(contextualApiURL, contextualApiParams, document.querySelector("#hierarchized-picker-" + this.options.parentApi.componentID + " .loader"))
351
+ .then(data => {
352
+ this.options.completeCurrentTreeWithTree(this, data, this.options.parentApi.theOptions);
353
+ });
354
+ }
355
+ else {
356
+ // WS Call
357
+ this.options.rawDataManager
358
+ .getFromSource(this.options.parentApi.theOptions.url, {
359
+ StartNodeID: target.parentNode.nodeId,
360
+ lng: this.options.parentApi.theOptions.options.lng,
361
+ IsDeprecated: this.options.parentApi.theOptions.options.IsDeprecated,
362
+ }, document.querySelector("#hierarchized-picker-" + this.options.parentApi.componentID + " .loader"))
363
+ .then(data => {
364
+ this.options.completeCurrentTreeWithTree(this, data, this.options.parentApi.theOptions);
365
+ });
366
+ }
367
+ }
368
+ }
370
369
  const liEle = target.parentNode;
371
370
  const ele = liEle.lastChild;
372
371
  const height = ele.scrollHeight;
@@ -404,6 +403,9 @@ Tree.prototype.onSwitcherClick = function (target) {
404
403
  },
405
404
  });
406
405
  }
406
+ return new Promise((resolve) => {
407
+ resolve(this);
408
+ });
407
409
  };
408
410
  Tree.prototype.walkUp = function (node, changeState) {
409
411
  const { parent } = node;
@@ -1,25 +1,47 @@
1
1
  import { focusMainInput } from "../events/focus-handlers";
2
+ let focusedNodeIndex = 0;
2
3
  export function setupKeyboardNavigation(component, navigateInTree) {
3
4
  const treeArea = component.el.querySelector('.hierarchized-picker-tree-area');
4
5
  if (!treeArea)
5
6
  return;
6
- let focusedNodeIndex = 0;
7
7
  function focusNode(allLiElements, liElementToFocus) {
8
8
  Object.values(allLiElements).forEach((liNode) => {
9
9
  liNode.classList.remove('treejs-node__focused');
10
10
  });
11
11
  liElementToFocus.classList.add('treejs-node__focused');
12
12
  }
13
+ function findAllTreeNodes(treeNodes, liElementsById) {
14
+ let allNodes = [];
15
+ const traverse = (nodes) => {
16
+ nodes.forEach(node => {
17
+ allNodes.push(node);
18
+ if (node.children && node.children.length > 0 && !liElementsById[node.id].classList.contains("treejs-node__close")) {
19
+ traverse(node.children);
20
+ }
21
+ });
22
+ };
23
+ traverse(treeNodes);
24
+ return allNodes;
25
+ }
26
+ focusedNodeIndex = 0;
27
+ if (component && component.loadedTreeJs && component.loadedTreeJs.liElementsById && component.loadedTreeJs.treeNodes) {
28
+ focusNode(component.loadedTreeJs.liElementsById, component.loadedTreeJs.liElementsById[component.loadedTreeJs.treeNodes[focusedNodeIndex].id]);
29
+ }
30
+ if (component.el._hasKeydownListener) {
31
+ return;
32
+ }
33
+ component.el._hasKeydownListener = true;
13
34
  component.el.addEventListener('keydown', (event) => {
14
35
  var _a, _b;
15
36
  event.stopPropagation();
16
37
  const tree = component.loadedTreeJs;
17
- const treeNodesFromTree = tree.treeNodes;
38
+ let treeNodesFromTree = findAllTreeNodes(tree.treeNodes, tree.liElementsById);
18
39
  if (!tree || !treeNodesFromTree.length)
19
40
  return;
20
- const spaceNode = treeNodesFromTree[focusedNodeIndex];
21
- const activeNode = treeNodesFromTree[focusedNodeIndex];
22
- const liElement = tree.liElementsById[activeNode.id];
41
+ let spaceNode = treeNodesFromTree[focusedNodeIndex];
42
+ let activeNode = treeNodesFromTree[focusedNodeIndex];
43
+ let liElement = tree.liElementsById[activeNode.id];
44
+ const handledEvents = ['tab', '0', 'arrowup', 'arrowdown', 'arrowleft', 'arrowright'];
23
45
  switch (event.key) {
24
46
  case 'Tab':
25
47
  case '0':
@@ -35,6 +57,7 @@ export function setupKeyboardNavigation(component, navigateInTree) {
35
57
  focusedNodeIndex = Math.max(focusedNodeIndex - 1, 0);
36
58
  const newActiveNodeUp = treeNodesFromTree[focusedNodeIndex];
37
59
  const newLiElementUp = tree.liElementsById[newActiveNodeUp.id];
60
+ newLiElementUp.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
38
61
  focusNode(tree.liElementsById, newLiElementUp);
39
62
  break;
40
63
  case 'ArrowDown':
@@ -43,13 +66,13 @@ export function setupKeyboardNavigation(component, navigateInTree) {
43
66
  const newActiveNodeDown = treeNodesFromTree[focusedNodeIndex];
44
67
  const newLiElementDown = tree.liElementsById[newActiveNodeDown.id];
45
68
  focusNode(tree.liElementsById, newLiElementDown);
69
+ newLiElementDown.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
46
70
  break;
47
71
  case 'ArrowLeft':
48
72
  event.preventDefault();
49
73
  const leftSwitcher = liElement.querySelector('.treejs-switcher');
50
74
  if (leftSwitcher) {
51
75
  (_a = component.loadedTreeJs) === null || _a === void 0 ? void 0 : _a.onSwitcherClick(leftSwitcher);
52
- component.showTree('hide');
53
76
  }
54
77
  break;
55
78
  case 'ArrowRight':
@@ -60,8 +83,7 @@ export function setupKeyboardNavigation(component, navigateInTree) {
60
83
  }
61
84
  break;
62
85
  }
63
- navigateInTree.emit(event.key);
86
+ if (handledEvents.includes(event.key.toLowerCase()))
87
+ navigateInTree.emit(event);
64
88
  });
65
- if (component && component.loadedTreeJs && component.loadedTreeJs.liElementsById && component.loadedTreeJs.treeNodes)
66
- setTimeout(() => focusNode(component.loadedTreeJs.liElementsById, component.loadedTreeJs.liElementsById[component.loadedTreeJs.treeNodes[focusedNodeIndex].id]), 100);
67
89
  }