@alexochihua/exos-library-components 2.24.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23452,6 +23452,13 @@ module.exports = {}
23452
23452
 
23453
23453
  /***/ }),
23454
23454
 
23455
+ /***/ 11031:
23456
+ /***/ (function(module) {
23457
+
23458
+ module.exports = {}
23459
+
23460
+ /***/ }),
23461
+
23455
23462
  /***/ 79306:
23456
23463
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
23457
23464
 
@@ -27413,6 +27420,14 @@ const ECheckboxvue_type_script_setup_true_lang_js_hoisted_1 = {
27413
27420
  type: Boolean,
27414
27421
  default: false
27415
27422
  },
27423
+ /**
27424
+ * Setea el tamaño del icono.
27425
+ * @values Ver docs de EIcon, para saber los tamaños que se pueden usar
27426
+ */
27427
+ iconSize: {
27428
+ type: String,
27429
+ default: null
27430
+ },
27416
27431
  /**
27417
27432
  * Color de fondo cuando está seleccionado
27418
27433
  * @values 'bg-primary' - fondo primario, 'bg-success' - fondo de éxito, 'bg-gray-500 dark:bg-white' - fondo responsivo
@@ -27502,7 +27517,8 @@ const ECheckboxvue_type_script_setup_true_lang_js_hoisted_1 = {
27502
27517
  return {
27503
27518
  name: icon,
27504
27519
  textColor,
27505
- fill
27520
+ fill,
27521
+ size: props.iconSize
27506
27522
  };
27507
27523
  });
27508
27524
  const sizeInnerComputed = use_size(props);
@@ -27544,8 +27560,9 @@ const ECheckboxvue_type_script_setup_true_lang_js_hoisted_1 = {
27544
27560
  key: 0,
27545
27561
  name: iconInfo.value.name,
27546
27562
  color: iconInfo.value.textColor,
27547
- fill: iconInfo.value.fill
27548
- }, null, 8, ["name", "color", "fill"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)], 6), __props.label || (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.unref)(slots).default ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ECheckboxvue_type_script_setup_true_lang_js_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderSlot)(_ctx.$slots, "default", {}, () => [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createTextVNode)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)(__props.label), 1)])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)], 2);
27563
+ fill: iconInfo.value.fill,
27564
+ size: iconInfo.value.size
27565
+ }, null, 8, ["name", "color", "fill", "size"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)], 6), __props.label || (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.unref)(slots).default ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ECheckboxvue_type_script_setup_true_lang_js_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderSlot)(_ctx.$slots, "default", {}, () => [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createTextVNode)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)(__props.label), 1)])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)], 2);
27549
27566
  };
27550
27567
  }
27551
27568
  });
@@ -54382,6 +54399,605 @@ if (typeof (EStepTrackervue_type_custom_index_0_blockType_docs_lang_md_default()
54382
54399
  const EStepTracker_exports_ = EStepTrackervue_type_script_setup_true_lang_js;
54383
54400
 
54384
54401
  /* harmony default export */ var EStepTracker = (EStepTracker_exports_);
54402
+ ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/ui/components/tree/ETree.vue?vue&type=script&setup=true&lang=js
54403
+
54404
+
54405
+ const ETreevue_type_script_setup_true_lang_js_hoisted_1 = {
54406
+ class: "e-tree",
54407
+ "data-testid": "tree-cy"
54408
+ };
54409
+ const ETreevue_type_script_setup_true_lang_js_hoisted_2 = {
54410
+ class: "e-tree__container"
54411
+ };
54412
+ const ETreevue_type_script_setup_true_lang_js_hoisted_3 = ["onClick"];
54413
+ const ETreevue_type_script_setup_true_lang_js_hoisted_4 = {
54414
+ key: 0,
54415
+ class: "e-tree__horizontal-line",
54416
+ "aria-hidden": "true"
54417
+ };
54418
+ const ETreevue_type_script_setup_true_lang_js_hoisted_5 = ["onClick"];
54419
+ const ETreevue_type_script_setup_true_lang_js_hoisted_6 = {
54420
+ key: 0,
54421
+ class: "e-tree__checkbox"
54422
+ };
54423
+ const ETreevue_type_script_setup_true_lang_js_hoisted_7 = {
54424
+ key: 0,
54425
+ class: "e-tree__node-icon"
54426
+ };
54427
+ const ETreevue_type_script_setup_true_lang_js_hoisted_8 = {
54428
+ class: "e-tree__node-label"
54429
+ };
54430
+ const ETreevue_type_script_setup_true_lang_js_hoisted_9 = {
54431
+ class: "e-tree__node-label-text"
54432
+ };
54433
+ const ETreevue_type_script_setup_true_lang_js_hoisted_10 = {
54434
+ key: 0,
54435
+ class: "e-tree__node-label-description"
54436
+ };
54437
+ const ETreevue_type_script_setup_true_lang_js_hoisted_11 = {
54438
+ key: 0,
54439
+ class: "e-tree__node-body"
54440
+ };
54441
+ const ETreevue_type_script_setup_true_lang_js_hoisted_12 = {
54442
+ key: 1,
54443
+ class: "e-tree__children"
54444
+ };
54445
+
54446
+ /* harmony default export */ var ETreevue_type_script_setup_true_lang_js = ({
54447
+ __name: 'ETree',
54448
+ props: {
54449
+ /**
54450
+ * Array de nodos que define la estructura del árbol. Consulta la sección de documentación para ver la estructura y ejemplos detallados.
54451
+ * @values [{ value: string, label: string, children: array, disabled: boolean, expanded: boolean, icon: string, description: string, header: string, body: string }]
54452
+ */
54453
+ nodes: {
54454
+ type: Array,
54455
+ required: true,
54456
+ default: () => []
54457
+ },
54458
+ /**
54459
+ * Array de valores de nodos seleccionados
54460
+ * @values ['node1', 'node2', 'node3']
54461
+ */
54462
+ ticked: {
54463
+ type: Array,
54464
+ default: () => []
54465
+ },
54466
+ /**
54467
+ * Estrategia de selección para los checkboxes
54468
+ * @values 'none' - sin checkboxes, 'leaf' - solo hojas, 'leaf-filtered' - hojas filtradas, 'strict' - nodo específico
54469
+ */
54470
+ tickStrategy: {
54471
+ type: String,
54472
+ default: 'none',
54473
+ validator: value => ['none', 'leaf', 'leaf-filtered', 'strict'].includes(value)
54474
+ },
54475
+ /**
54476
+ * Color de fondo para nodos seleccionados en estrategia leaf
54477
+ * @values 'bg-red-500' - rojo, 'bg-green-500' - verde, 'bg-purple-500' - púrpura
54478
+ */
54479
+ tickedColor: {
54480
+ type: String,
54481
+ default: null
54482
+ },
54483
+ /**
54484
+ * Color de fondo para nodos con selección parcial (guión medio) en estrategia leaf
54485
+ * @values 'bg-red-500' - rojo, 'bg-green-500' - verde, 'bg-purple-500' - púrpura
54486
+ */
54487
+ tickedPartialColor: {
54488
+ type: String,
54489
+ default: null
54490
+ },
54491
+ /**
54492
+ * Tamaño del icono de los nodos
54493
+ * @values 'xs' - extra pequeño, 'sm' - pequeño, 'md' - mediano, 'lg' - grande
54494
+ */
54495
+ iconSize: {
54496
+ type: String,
54497
+ default: null
54498
+ },
54499
+ /**
54500
+ * Color del icono de los nodos
54501
+ * @values 'text-red-500' - rojo, 'text-green-500' - verde, 'text-purple-500' - púrpura
54502
+ */
54503
+ iconColor: {
54504
+ type: String,
54505
+ default: null
54506
+ },
54507
+ /**
54508
+ * Nodo padre para el contexto de recursión
54509
+ * @ignore
54510
+ */
54511
+ parentNode: {
54512
+ type: Object,
54513
+ default: null
54514
+ },
54515
+ /**
54516
+ * Array de valores de nodos expandidos
54517
+ * @ignore
54518
+ */
54519
+ expanded: {
54520
+ type: Array,
54521
+ default: () => []
54522
+ }
54523
+ },
54524
+ emits: [
54525
+ /**
54526
+ * Emitido cuando cambia el estado de expansión de los nodos
54527
+ * @values ['node1', 'node2', 'node3']
54528
+ */
54529
+ 'expanded',
54530
+ /**
54531
+ * Emitido cuando se selecciona un nodo
54532
+ * @values { value: string, label: string, children: array }
54533
+ */
54534
+ 'selected',
54535
+ /**
54536
+ * Emitido cuando cambia el estado de selección de los checkboxes
54537
+ * @values ['node1', 'node2', 'node3']
54538
+ */
54539
+ 'ticked'],
54540
+ setup(__props, {
54541
+ expose: __expose,
54542
+ emit: __emit
54543
+ }) {
54544
+ const props = __props;
54545
+ const emit = __emit;
54546
+ const instance = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.getCurrentInstance)();
54547
+ const $slots = instance?.slots;
54548
+
54549
+ // Estado reactivo
54550
+ const localExpanded = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.ref)(props.expanded ? [...props.expanded] : []);
54551
+ const localTicked = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.ref)(props.ticked ? [...props.ticked] : []);
54552
+
54553
+ // Computed properties
54554
+ const processedNodes = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.computed)(() => {
54555
+ return processNodesWithDisabled(props.nodes);
54556
+ });
54557
+ const iconConfig = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.computed)(() => {
54558
+ return {
54559
+ size: props.iconSize || 'xs',
54560
+ color: props.iconColor || 'e-tree__node-icon'
54561
+ };
54562
+ });
54563
+
54564
+ // Watchers
54565
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.watch)(() => props.expanded, newVal => {
54566
+ localExpanded.value = [...newVal];
54567
+ });
54568
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.watch)(() => props.ticked, newVal => {
54569
+ localTicked.value = [...newVal];
54570
+ });
54571
+
54572
+ // Métodos
54573
+ const processNodesWithDisabled = nodes => {
54574
+ return nodes.map(node => {
54575
+ const processedNode = {
54576
+ ...node
54577
+ };
54578
+
54579
+ // Si el nodo padre está deshabilitado, este nodo también debe estar deshabilitado
54580
+ if (props.parentNode && props.parentNode.disabled) {
54581
+ processedNode.disabled = true;
54582
+ }
54583
+
54584
+ // Si el nodo actual está deshabilitado y tiene hijos, propagar disabled a todos los hijos
54585
+ if (processedNode.disabled && hasChildren(processedNode)) {
54586
+ processedNode.children = processNodesWithDisabled(processedNode.children);
54587
+ } else if (hasChildren(processedNode)) {
54588
+ // Si no está deshabilitado pero tiene hijos, procesar recursivamente
54589
+ processedNode.children = processNodesWithDisabled(processedNode.children);
54590
+ }
54591
+ return processedNode;
54592
+ });
54593
+ };
54594
+ const hasChildren = node => {
54595
+ return node?.children && node?.children.length > 0;
54596
+ };
54597
+ const isDisabled = node => {
54598
+ return node?.disabled === true;
54599
+ };
54600
+ const getNodeContentClasses = node => {
54601
+ const disabled = isDisabled(node);
54602
+ const hoverClasses = disabled ? 'e-tree__node-content--hover--disabled' : 'e-tree__node-content--hover--enabled';
54603
+ const disabledClasses = disabled ? 'e-tree__node-content--disabled' : '';
54604
+ return [hoverClasses, disabledClasses];
54605
+ };
54606
+ const handleSelected = node => {
54607
+ if (isDisabled(node)) return;
54608
+ emit('selected', node);
54609
+ };
54610
+ const isExpanded = node => {
54611
+ return localExpanded.value.includes(node?.value);
54612
+ };
54613
+ const isTicked = node => {
54614
+ if (props.tickStrategy === 'none') return false;
54615
+ const nodeValue = node?.value;
54616
+ if (props.tickStrategy === 'strict') {
54617
+ return localTicked.value.includes(nodeValue);
54618
+ } else {
54619
+ if (!hasChildren(node)) {
54620
+ return localTicked.value.includes(nodeValue);
54621
+ } else {
54622
+ const leafNodes = getLeafNodes(node?.children);
54623
+ return leafNodes.length > 0 && leafNodes.every(leaf => localTicked.value.includes(leaf.value));
54624
+ }
54625
+ }
54626
+ };
54627
+ const toggleNode = node => {
54628
+ if (!hasChildren(node) || isDisabled(node)) return;
54629
+ const nodeValue = node?.value;
54630
+ const newExpanded = [...localExpanded.value];
54631
+ if (isExpanded(node)) {
54632
+ // Contraer (ya está en el array)
54633
+ const index = newExpanded.indexOf(nodeValue);
54634
+ if (index !== -1) {
54635
+ newExpanded.splice(index, 1);
54636
+ }
54637
+ } else {
54638
+ // Expandir (no está en el array)
54639
+ newExpanded.push(nodeValue);
54640
+ }
54641
+ localExpanded.value = [...newExpanded];
54642
+ emit('expanded', localExpanded.value);
54643
+ };
54644
+ const toggleTicked = node => {
54645
+ if (props.tickStrategy === 'none' || isDisabled(node)) return;
54646
+ const newTicked = [...localTicked.value];
54647
+ if (isTicked(node)) {
54648
+ // Desmarcar nodo y sus hijos
54649
+ untickNode(node, newTicked);
54650
+ } else {
54651
+ // Marcar nodo y sus hijos según la estrategia
54652
+ tickNode(node, newTicked);
54653
+ }
54654
+ localTicked.value = [...newTicked];
54655
+ emit('ticked', localTicked.value);
54656
+ };
54657
+ const getLeafNodes = nodes => {
54658
+ const leafNodes = [];
54659
+ nodes.forEach(node => {
54660
+ // Si el nodo tiene hijos, obtener los nodos hojas de los hijos
54661
+ if (hasChildren(node)) {
54662
+ // Agregar los nodos hojas de los hijos al array de nodos hojas con el método recursivo
54663
+ leafNodes.push(...getLeafNodes(node?.children));
54664
+ } else {
54665
+ // Si el nodo no tiene hijos, agregar el nodo al array de nodos hojas
54666
+ leafNodes.push(node);
54667
+ }
54668
+ });
54669
+ return leafNodes;
54670
+ };
54671
+ const tickNode = (node, tickedArray) => {
54672
+ const nodeValue = node?.value;
54673
+ if (props.tickStrategy === 'leaf' || props.tickStrategy === 'leaf-filtered') {
54674
+ // Solo marcar hojas
54675
+ if (!hasChildren(node)) {
54676
+ if (!tickedArray.includes(nodeValue)) {
54677
+ tickedArray.push(nodeValue);
54678
+ }
54679
+ } else {
54680
+ // Marcar todas las hojas hijas
54681
+ const leafNodes = getLeafNodes(node?.children);
54682
+ leafNodes.forEach(leaf => {
54683
+ const leafValue = leaf?.value;
54684
+ if (!tickedArray.includes(leafValue)) {
54685
+ tickedArray.push(leafValue);
54686
+ }
54687
+ });
54688
+ }
54689
+ } else if (props.tickStrategy === 'strict') {
54690
+ // Marcar solo el nodo actual (sin propagar a hijos)
54691
+ if (!tickedArray.includes(nodeValue)) {
54692
+ tickedArray.push(nodeValue);
54693
+ }
54694
+ }
54695
+ };
54696
+ const untickNode = (node, tickedArray) => {
54697
+ const nodeValue = node?.value;
54698
+ if (props.tickStrategy === 'strict') {
54699
+ // Desmarcar solo el nodo actual (sin propagar a hijos)
54700
+ const index = tickedArray.indexOf(nodeValue);
54701
+ if (index > -1) {
54702
+ tickedArray.splice(index, 1);
54703
+ }
54704
+ } else {
54705
+ // Para otras estrategias, desmarcar solo hojas
54706
+ if (!hasChildren(node)) {
54707
+ const index = tickedArray.indexOf(nodeValue);
54708
+ if (index > -1) {
54709
+ tickedArray.splice(index, 1);
54710
+ }
54711
+ } else {
54712
+ // Desmarcar todas las hojas hijas
54713
+ const leafNodes = getLeafNodes(node?.children);
54714
+ leafNodes.forEach(leaf => {
54715
+ const leafValue = leaf?.value;
54716
+ const index = tickedArray.indexOf(leafValue);
54717
+ if (index > -1) {
54718
+ tickedArray.splice(index, 1);
54719
+ }
54720
+ });
54721
+ }
54722
+ }
54723
+ };
54724
+
54725
+ // Método para verificar si todos los hijos de un nodo están seleccionados
54726
+ const areAllChildrenSelected = node => {
54727
+ if (!hasChildren(node)) return false;
54728
+ const leafNodes = getLeafNodes(node?.children);
54729
+ return leafNodes.length > 0 && leafNodes.every(leaf => localTicked.value.includes(leaf.value));
54730
+ };
54731
+
54732
+ // Método para verificar si algunos hijos de un nodo están seleccionados
54733
+ const areSomeChildrenSelected = node => {
54734
+ if (!hasChildren(node)) return false;
54735
+ const leafNodes = getLeafNodes(node?.children);
54736
+ return leafNodes.length > 0 && leafNodes.some(leaf => localTicked.value.includes(leaf.value));
54737
+ };
54738
+
54739
+ // Método para obtener el icono de check según la estrategia y estado
54740
+ const getCheckIcon = node => {
54741
+ // Para estrategia strict, usar el icono por defecto
54742
+ if (props.tickStrategy === 'strict') {
54743
+ return null; // Usar el icono por defecto
54744
+ }
54745
+
54746
+ // Para estrategia leaf
54747
+ if (props.tickStrategy === 'leaf' || props.tickStrategy === 'leaf-filtered') {
54748
+ if (hasChildren(node)) {
54749
+ // Es un nodo padre
54750
+ if (isTicked(node)) {
54751
+ // Si está completamente seleccionado, verificar el estado de los hijos
54752
+ if (areAllChildrenSelected(node)) {
54753
+ // Todos los hijos seleccionados - mostrar check
54754
+ return 'sym-check';
54755
+ } else if (areSomeChildrenSelected(node)) {
54756
+ // Algunos hijos seleccionados - mostrar guión medio
54757
+ return 'sym-remove';
54758
+ }
54759
+ } else if (areSomeChildrenSelected(node)) {
54760
+ // Si no está completamente seleccionado pero algunos hijos están seleccionados
54761
+ // Mostrar guión medio para indicar selección parcial
54762
+ return 'sym-remove';
54763
+ }
54764
+ } else {
54765
+ // Es un nodo hoja - usar check normal
54766
+ return 'sym-check';
54767
+ }
54768
+ }
54769
+ return null; // Usar el icono por defecto
54770
+ };
54771
+
54772
+ // Método para obtener el icono cuando no está seleccionado
54773
+ const getUncheckedIcon = node => {
54774
+ // Para estrategia leaf, mostrar guión medio si algunos hijos están seleccionados
54775
+ if ((props.tickStrategy === 'leaf' || props.tickStrategy === 'leaf-filtered') && hasChildren(node) && areSomeChildrenSelected(node) && !isTicked(node)) {
54776
+ return 'sym-remove';
54777
+ }
54778
+ return null; // No mostrar icono por defecto
54779
+ };
54780
+
54781
+ // Método para obtener el color del check según el estado
54782
+ const getCheckColor = node => {
54783
+ // Para estrategia leaf
54784
+ if ((props.tickStrategy === 'leaf' || props.tickStrategy === 'leaf-filtered') && hasChildren(node)) {
54785
+ // Si el nodo padre tiene algunos hijos seleccionados (muestra guión medio)
54786
+ // o si está completamente seleccionado, usar color personalizado o por defecto
54787
+ if (areSomeChildrenSelected(node) || isTicked(node)) {
54788
+ return props.tickedColor || 'exos-bg-primary';
54789
+ }
54790
+ }
54791
+
54792
+ // Para otros casos, usar el color por defecto
54793
+ return null;
54794
+ };
54795
+
54796
+ // Método para obtener el color del uncheck según el estado
54797
+ const getUncheckColor = node => {
54798
+ // Para estrategia leaf
54799
+ if ((props.tickStrategy === 'leaf' || props.tickStrategy === 'leaf-filtered') && hasChildren(node) && areSomeChildrenSelected(node) && !isTicked(node)) {
54800
+ // Si el nodo padre no está completamente seleccionado pero tiene algunos hijos
54801
+ // usar color personalizado o por defecto para el guión medio
54802
+ return props.tickedPartialColor || 'exos-bg-primary';
54803
+ }
54804
+
54805
+ // Para otros casos, usar el color por defecto
54806
+ return null;
54807
+ };
54808
+
54809
+ // Método para recolectar todos los nodos expandidos de forma recursiva
54810
+ const collectExpandedNodes = nodes => {
54811
+ const expandedNodes = [];
54812
+ const stack = [...nodes];
54813
+ while (stack.length > 0) {
54814
+ const node = stack.pop();
54815
+ if (node.expanded) {
54816
+ expandedNodes.push(node.value);
54817
+ }
54818
+ if (hasChildren(node)) {
54819
+ stack.push(...node.children);
54820
+ }
54821
+ }
54822
+ return expandedNodes;
54823
+ };
54824
+ const handleExpanded = expandedNodes => {
54825
+ localExpanded.value = expandedNodes;
54826
+ emit('expanded', expandedNodes);
54827
+ };
54828
+ const handleTicked = tickedNodes => {
54829
+ localTicked.value = tickedNodes;
54830
+ emit('ticked', tickedNodes);
54831
+ };
54832
+
54833
+ // Lifecycle
54834
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.onMounted)(() => {
54835
+ if (localExpanded.value.length == 0) {
54836
+ // Recolectar todos los nodos expandidos de forma recursiva
54837
+ const expandedNodes = collectExpandedNodes(props.nodes);
54838
+ localExpanded.value = expandedNodes;
54839
+ emit('expanded', localExpanded.value);
54840
+ }
54841
+ });
54842
+
54843
+ // Expose methods
54844
+ __expose({
54845
+ /**
54846
+ * Expande un nodo específico por su valor. Parámetro: nodeValue (string)
54847
+ */
54848
+ expandNode: nodeValue => {
54849
+ if (!localExpanded.value.includes(nodeValue)) {
54850
+ localExpanded.value.push(nodeValue);
54851
+ emit('expanded', localExpanded.value);
54852
+ }
54853
+ },
54854
+ /**
54855
+ * Contrae un nodo específico por su valor. Parámetro: nodeValue (string)
54856
+ */
54857
+ collapseNode: nodeValue => {
54858
+ const index = localExpanded.value.indexOf(nodeValue);
54859
+ if (index !== -1) {
54860
+ localExpanded.value.splice(index, 1);
54861
+ emit('expanded', localExpanded.value);
54862
+ }
54863
+ },
54864
+ /**
54865
+ * Muestra todos los nodos del árbol. Sin parámetros.
54866
+ */
54867
+ showAll: () => {
54868
+ const allNodes = [];
54869
+ const collectAllNodes = nodes => {
54870
+ nodes.forEach(node => {
54871
+ allNodes.push(node.value);
54872
+ if (hasChildren(node)) {
54873
+ collectAllNodes(node.children);
54874
+ }
54875
+ });
54876
+ };
54877
+ collectAllNodes(props.nodes);
54878
+ localExpanded.value = allNodes;
54879
+ emit('expanded', localExpanded.value);
54880
+ },
54881
+ /**
54882
+ * Cierra todos los nodos del árbol. Sin parámetros.
54883
+ */
54884
+ closeAll: () => {
54885
+ localExpanded.value = [];
54886
+ emit('expanded', localExpanded.value);
54887
+ },
54888
+ /**
54889
+ * Marca (ticked) un nodo específico por su valor. Parámetro: nodeValue (string)
54890
+ */
54891
+ tickNode: nodeValue => {
54892
+ const newTicked = [...localTicked.value];
54893
+ if (!newTicked.includes(nodeValue)) {
54894
+ newTicked.push(nodeValue);
54895
+ emit('ticked', newTicked);
54896
+ }
54897
+ },
54898
+ /**
54899
+ * Desmarca (unticked) un nodo específico por su valor. Parámetro: nodeValue (string)
54900
+ */
54901
+ untickNode: nodeValue => {
54902
+ const newTicked = [...localTicked.value];
54903
+ const index = newTicked.indexOf(nodeValue);
54904
+ if (index > -1) {
54905
+ newTicked.splice(index, 1);
54906
+ emit('ticked', newTicked);
54907
+ }
54908
+ }
54909
+ });
54910
+ return (_ctx, _cache) => {
54911
+ const _component_e_icon = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)("e-icon");
54912
+ const _component_e_checkbox = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)("e-checkbox");
54913
+ const _component_e_tree = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)("e-tree", true);
54914
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ETreevue_type_script_setup_true_lang_js_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)("div", ETreevue_type_script_setup_true_lang_js_hoisted_2, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)(processedNodes.value, (node, idx) => {
54915
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", {
54916
+ key: node.value,
54917
+ class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)(["e-tree__node", {
54918
+ 'e-tree__node--is-item': idx !== processedNodes.value.length - 1,
54919
+ 'e-tree__node--is-parent': !__props.parentNode
54920
+ }])
54921
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)("div", {
54922
+ class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)(["e-tree__node-content", {
54923
+ 'e-tree__node-content--is-last-item': idx === processedNodes.value.length - 1,
54924
+ 'e-tree__node-content--no-border': !__props.parentNode
54925
+ }]),
54926
+ "data-testid": "tree-select-cy",
54927
+ onClick: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withModifiers)($event => handleSelected(node), ["stop"])
54928
+ }, [__props.parentNode ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ETreevue_type_script_setup_true_lang_js_hoisted_4)) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)("div", {
54929
+ class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)([getNodeContentClasses(node), "e-tree__node-content-wrapper exos-flex exos-flex-1 exos-items-center exos-py-2 exos-gap-1.5 exos-pl-1.5 exos-rounded-md hover:exos-bg-neutralLightGrey exos-transition-colors exos-duration-200"])
54930
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)("div", {
54931
+ class: "e-tree__expand-icon",
54932
+ "data-testid": "tree-toggle-cy",
54933
+ onClick: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withModifiers)($event => toggleNode(node), ["stop"])
54934
+ }, [hasChildren(node) ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_e_icon, {
54935
+ key: 0,
54936
+ name: isExpanded(node) ? 'sym-arrow_drop_down' : 'sym-arrow_right'
54937
+ }, null, 8, ["name"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)], 8, ETreevue_type_script_setup_true_lang_js_hoisted_5), __props.tickStrategy !== 'none' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ETreevue_type_script_setup_true_lang_js_hoisted_6, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_e_checkbox, {
54938
+ modelValue: node?.disabled ? false : isTicked(node),
54939
+ checkedIcon: getCheckIcon(node),
54940
+ uncheckedIcon: getUncheckedIcon(node),
54941
+ checkColor: getCheckColor(node),
54942
+ uncheckColor: getUncheckColor(node),
54943
+ size: "14px",
54944
+ iconSize: "10px",
54945
+ "data-testid": "tree-checkbox-cy",
54946
+ "onUpdate:modelValue": $event => toggleTicked(node)
54947
+ }, null, 8, ["modelValue", "checkedIcon", "uncheckedIcon", "checkColor", "uncheckColor", "onUpdate:modelValue"])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true), node?.header && (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.unref)($slots)[`header-${node?.header}`] ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderSlot)(_ctx.$slots, `header-${node?.header}`, {
54948
+ key: 1,
54949
+ node: node,
54950
+ allNodes: processedNodes.value
54951
+ }) : ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, {
54952
+ key: 2
54953
+ }, [node?.icon ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ETreevue_type_script_setup_true_lang_js_hoisted_7, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_e_icon, {
54954
+ name: node?.icon,
54955
+ size: iconConfig.value.size,
54956
+ color: iconConfig.value.color
54957
+ }, null, 8, ["name", "size", "color"])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)("div", ETreevue_type_script_setup_true_lang_js_hoisted_8, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)("div", ETreevue_type_script_setup_true_lang_js_hoisted_9, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)(node.label), 1), node?.description ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ETreevue_type_script_setup_true_lang_js_hoisted_10, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)(node.description), 1)) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)])], 64))], 2)], 10, ETreevue_type_script_setup_true_lang_js_hoisted_3), node?.body && (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.unref)($slots)[`body-${node.body}`] ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ETreevue_type_script_setup_true_lang_js_hoisted_11, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderSlot)(_ctx.$slots, `body-${node.body}`, {
54958
+ node: node,
54959
+ allNodes: processedNodes.value
54960
+ })])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true), hasChildren(node) && isExpanded(node) ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)("div", ETreevue_type_script_setup_true_lang_js_hoisted_12, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_e_tree, {
54961
+ nodes: node.children,
54962
+ parentNode: node,
54963
+ tickStrategy: __props.tickStrategy,
54964
+ ticked: localTicked.value,
54965
+ expanded: localExpanded.value,
54966
+ onTicked: handleTicked,
54967
+ onExpanded: handleExpanded,
54968
+ onSelected: _cache[0] || (_cache[0] = $event => _ctx.$emit('selected', $event))
54969
+ }, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createSlots)({
54970
+ _: 2
54971
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.unref)($slots), (slotFn, name) => {
54972
+ return {
54973
+ name: name,
54974
+ fn: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withCtx)(slotProps => [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderSlot)(_ctx.$slots, name, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.mergeProps)({
54975
+ ref_for: true
54976
+ }, slotProps))])
54977
+ };
54978
+ })]), 1032, ["nodes", "parentNode", "tickStrategy", "ticked", "expanded"])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)], 2);
54979
+ }), 128))])]);
54980
+ };
54981
+ }
54982
+ });
54983
+ ;// CONCATENATED MODULE: ./src/ui/components/tree/ETree.vue?vue&type=script&setup=true&lang=js
54984
+
54985
+ // EXTERNAL MODULE: ./node_modules/vue-cli-plugin-styleguidist/empty-object-loader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/ui/components/tree/ETree.vue?vue&type=custom&index=0&blockType=docs&lang=md
54986
+ var ETreevue_type_custom_index_0_blockType_docs_lang_md = __webpack_require__(11031);
54987
+ var ETreevue_type_custom_index_0_blockType_docs_lang_md_default = /*#__PURE__*/__webpack_require__.n(ETreevue_type_custom_index_0_blockType_docs_lang_md);
54988
+ ;// CONCATENATED MODULE: ./src/ui/components/tree/ETree.vue?vue&type=custom&index=0&blockType=docs&lang=md
54989
+
54990
+ ;// CONCATENATED MODULE: ./src/ui/components/tree/ETree.vue
54991
+
54992
+
54993
+ /* custom blocks */
54994
+ ;
54995
+ if (typeof (ETreevue_type_custom_index_0_blockType_docs_lang_md_default()) === 'function') ETreevue_type_custom_index_0_blockType_docs_lang_md_default()(ETreevue_type_script_setup_true_lang_js)
54996
+
54997
+
54998
+ const ETree_exports_ = ETreevue_type_script_setup_true_lang_js;
54999
+
55000
+ /* harmony default export */ var ETree = (ETree_exports_);
54385
55001
  ;// CONCATENATED MODULE: ./src/components/plugins/loading.js
54386
55002
  function createLoadingHTML(config) {
54387
55003
  const color = config?.color ?? '#FAFAFA';
@@ -54496,6 +55112,7 @@ const loading = {
54496
55112
 
54497
55113
 
54498
55114
 
55115
+
54499
55116
 
54500
55117
 
54501
55118
  const ExosLibraryComponents = {
@@ -54534,6 +55151,7 @@ const ExosLibraryComponents = {
54534
55151
  app.component('EDataDetail', EDataDetail);
54535
55152
  app.component('ETooltip', ETooltip);
54536
55153
  app.component('EStepTracker', EStepTracker);
55154
+ app.component('ETree', ETree);
54537
55155
  app.provide('$loading', loading);
54538
55156
  app.provide('$notify', notify);
54539
55157
  app.provide('$showMessage', message);