@lv-x-software-house/x_view 1.2.5-dev.16 → 1.2.5-dev.18
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.
- package/dist/index.js +112 -25
- package/dist/index.mjs +112 -25
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -619,15 +619,18 @@ function XViewSidebar({
|
|
|
619
619
|
const [isFilterMenuOpen, setIsFilterMenuOpen] = (0, import_react2.useState)(false);
|
|
620
620
|
const [filterCategory, setFilterCategory] = (0, import_react2.useState)("Type");
|
|
621
621
|
const [filterValue, setFilterValue] = (0, import_react2.useState)("");
|
|
622
|
+
const [isTypeDropdownOpen, setIsTypeDropdownOpen] = (0, import_react2.useState)(false);
|
|
623
|
+
const [highlightedTypeIndex, setHighlightedTypeIndex] = (0, import_react2.useState)(-1);
|
|
622
624
|
const containerRef = (0, import_react2.useRef)(null);
|
|
623
625
|
const inputRef = (0, import_react2.useRef)(null);
|
|
624
626
|
const filterMenuRef = (0, import_react2.useRef)(null);
|
|
627
|
+
const typeDropdownRef = (0, import_react2.useRef)(null);
|
|
625
628
|
const ability = (0, import_react2.useMemo)(() => {
|
|
626
629
|
return defineAbilityFor(userRole);
|
|
627
630
|
}, [userRole]);
|
|
628
631
|
const contextLabel = (0, import_react2.useMemo)(() => {
|
|
629
632
|
if (!viewType || !viewName) return null;
|
|
630
|
-
const typeLower = viewType.toLowerCase();
|
|
633
|
+
const typeLower = String(viewType).toLowerCase();
|
|
631
634
|
if (typeLower === "database") {
|
|
632
635
|
return `Dataset: ${viewName}`;
|
|
633
636
|
} else if (typeLower === "view") {
|
|
@@ -637,7 +640,12 @@ function XViewSidebar({
|
|
|
637
640
|
}
|
|
638
641
|
return `${viewType}: ${viewName}`;
|
|
639
642
|
}, [viewType, viewName]);
|
|
640
|
-
const normalize = (str = "") =>
|
|
643
|
+
const normalize = (str = "") => {
|
|
644
|
+
if (str === void 0 || str === null) {
|
|
645
|
+
console.warn("XViewSidebar: normalize recebeu valor nulo/indefinido:", str);
|
|
646
|
+
}
|
|
647
|
+
return String(str).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[._\-–—:,;!?'"()\[\]{}/\\]/g, " ").replace(/\s+/g, " ").trim();
|
|
648
|
+
};
|
|
641
649
|
const collator = (0, import_react2.useMemo)(
|
|
642
650
|
() => new Intl.Collator("pt-BR", { sensitivity: "base", numeric: true }),
|
|
643
651
|
[]
|
|
@@ -655,6 +663,11 @@ function XViewSidebar({
|
|
|
655
663
|
});
|
|
656
664
|
return Array.from(typesSet).sort();
|
|
657
665
|
}, [dbNodes]);
|
|
666
|
+
const filteredTypes = (0, import_react2.useMemo)(() => {
|
|
667
|
+
if (!filterValue.trim()) return availableTypes;
|
|
668
|
+
const search = filterValue.toLowerCase().trim();
|
|
669
|
+
return availableTypes.filter((t) => t.toLowerCase().includes(search));
|
|
670
|
+
}, [availableTypes, filterValue]);
|
|
658
671
|
const filteredAndSorted = (0, import_react2.useMemo)(() => {
|
|
659
672
|
const base = Array.isArray(dbNodes) ? dbNodes : [];
|
|
660
673
|
let pool = base;
|
|
@@ -695,12 +708,15 @@ function XViewSidebar({
|
|
|
695
708
|
if (filterMenuRef.current && !filterMenuRef.current.contains(event.target)) {
|
|
696
709
|
setIsFilterMenuOpen(false);
|
|
697
710
|
}
|
|
711
|
+
if (typeDropdownRef.current && !typeDropdownRef.current.contains(event.target)) {
|
|
712
|
+
setIsTypeDropdownOpen(false);
|
|
713
|
+
}
|
|
698
714
|
};
|
|
699
|
-
if (isFilterMenuOpen) {
|
|
715
|
+
if (isFilterMenuOpen || isTypeDropdownOpen) {
|
|
700
716
|
document.addEventListener("mousedown", handleClickOutside);
|
|
701
717
|
}
|
|
702
718
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
703
|
-
}, [isFilterMenuOpen]);
|
|
719
|
+
}, [isFilterMenuOpen, isTypeDropdownOpen]);
|
|
704
720
|
(0, import_react2.useEffect)(() => {
|
|
705
721
|
if (!query) setSelectedNodeId(null);
|
|
706
722
|
}, [query]);
|
|
@@ -754,6 +770,35 @@ function XViewSidebar({
|
|
|
754
770
|
const handleRemoveFilter = (index) => {
|
|
755
771
|
setActiveFilters((prev) => prev.filter((_, i) => i !== index));
|
|
756
772
|
};
|
|
773
|
+
const handleTypeKeyDown = (e) => {
|
|
774
|
+
if (!isTypeDropdownOpen) {
|
|
775
|
+
setIsTypeDropdownOpen(true);
|
|
776
|
+
}
|
|
777
|
+
if (e.key === "ArrowDown") {
|
|
778
|
+
e.preventDefault();
|
|
779
|
+
setHighlightedTypeIndex(
|
|
780
|
+
(prev) => prev < filteredTypes.length - 1 ? prev + 1 : prev
|
|
781
|
+
);
|
|
782
|
+
} else if (e.key === "ArrowUp") {
|
|
783
|
+
e.preventDefault();
|
|
784
|
+
setHighlightedTypeIndex((prev) => prev > 0 ? prev - 1 : 0);
|
|
785
|
+
} else if (e.key === "Enter") {
|
|
786
|
+
e.preventDefault();
|
|
787
|
+
if (highlightedTypeIndex >= 0 && filteredTypes[highlightedTypeIndex]) {
|
|
788
|
+
setFilterValue(filteredTypes[highlightedTypeIndex]);
|
|
789
|
+
setIsTypeDropdownOpen(false);
|
|
790
|
+
setHighlightedTypeIndex(-1);
|
|
791
|
+
} else {
|
|
792
|
+
handleAddFilter();
|
|
793
|
+
}
|
|
794
|
+
} else if (e.key === "Escape") {
|
|
795
|
+
e.preventDefault();
|
|
796
|
+
setIsTypeDropdownOpen(false);
|
|
797
|
+
setHighlightedTypeIndex(-1);
|
|
798
|
+
} else if (e.key === "Tab") {
|
|
799
|
+
setIsTypeDropdownOpen(false);
|
|
800
|
+
}
|
|
801
|
+
};
|
|
757
802
|
const ToggleButton = /* @__PURE__ */ import_react2.default.createElement(
|
|
758
803
|
"button",
|
|
759
804
|
{
|
|
@@ -884,18 +929,36 @@ function XViewSidebar({
|
|
|
884
929
|
className: `flex-1 text-xs py-1 rounded transition-colors ${filterCategory === opt ? "bg-indigo-600 text-white shadow-sm" : "text-slate-400 hover:text-slate-200"}`
|
|
885
930
|
},
|
|
886
931
|
opt
|
|
887
|
-
)))), /* @__PURE__ */ import_react2.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ import_react2.default.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-semibold tracking-wider" }, "Valor"), filterCategory === "Type" ? /* @__PURE__ */ import_react2.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react2.default.createElement(
|
|
932
|
+
)))), /* @__PURE__ */ import_react2.default.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ import_react2.default.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-semibold tracking-wider" }, "Valor"), filterCategory === "Type" ? /* @__PURE__ */ import_react2.default.createElement("div", { className: "relative", ref: typeDropdownRef }, /* @__PURE__ */ import_react2.default.createElement(
|
|
888
933
|
"input",
|
|
889
934
|
{
|
|
890
|
-
list: "typeOptions",
|
|
891
935
|
type: "text",
|
|
892
936
|
value: filterValue,
|
|
893
|
-
onChange: (e) =>
|
|
937
|
+
onChange: (e) => {
|
|
938
|
+
setFilterValue(e.target.value);
|
|
939
|
+
if (!isTypeDropdownOpen) setIsTypeDropdownOpen(true);
|
|
940
|
+
setHighlightedTypeIndex(-1);
|
|
941
|
+
},
|
|
942
|
+
onFocus: () => setIsTypeDropdownOpen(true),
|
|
943
|
+
onKeyDown: handleTypeKeyDown,
|
|
894
944
|
placeholder: "Ex: Concept",
|
|
895
945
|
className: "w-full bg-slate-800 p-2 text-xs rounded border border-white/10 focus:outline-none focus:border-indigo-500/50 text-white",
|
|
896
946
|
autoFocus: true
|
|
897
947
|
}
|
|
898
|
-
),
|
|
948
|
+
), isTypeDropdownOpen && filteredTypes.length > 0 && /* @__PURE__ */ import_react2.default.createElement("div", { className: "absolute z-[60] left-0 right-0 mt-1 max-h-48 overflow-y-auto bg-slate-900/95 backdrop-blur-xl border border-white/10 rounded-md shadow-2xl custom-scrollbar" }, filteredTypes.map((t, idx) => /* @__PURE__ */ import_react2.default.createElement(
|
|
949
|
+
"div",
|
|
950
|
+
{
|
|
951
|
+
key: t,
|
|
952
|
+
className: `px-3 py-2 text-xs cursor-pointer transition-colors ${idx === highlightedTypeIndex ? "bg-indigo-600 text-white" : "text-slate-300 hover:bg-white/10"}`,
|
|
953
|
+
onMouseDown: (e) => {
|
|
954
|
+
e.preventDefault();
|
|
955
|
+
setFilterValue(t);
|
|
956
|
+
setIsTypeDropdownOpen(false);
|
|
957
|
+
setHighlightedTypeIndex(-1);
|
|
958
|
+
}
|
|
959
|
+
},
|
|
960
|
+
t
|
|
961
|
+
)))) : /* @__PURE__ */ import_react2.default.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ import_react2.default.createElement(
|
|
899
962
|
"div",
|
|
900
963
|
{
|
|
901
964
|
className: "absolute left-2 w-3 h-3 rounded-full border border-white/20 shadow-sm",
|
|
@@ -7665,7 +7728,7 @@ function ColorPicker({ color, onChange, disabled }) {
|
|
|
7665
7728
|
style: { backgroundColor: preset },
|
|
7666
7729
|
title: preset
|
|
7667
7730
|
},
|
|
7668
|
-
color.toLowerCase() === preset.toLowerCase() && /* @__PURE__ */ import_react13.default.createElement(import_fi11.FiCheck, { className: `drop-shadow-md ${["#ffffff", "#4df5cb", "#84cc16", "#f59e0b"].includes(preset) ? "text-black" : "text-white"}`, size: 12 })
|
|
7731
|
+
(color || "").toLowerCase() === (preset || "").toLowerCase() && /* @__PURE__ */ import_react13.default.createElement(import_fi11.FiCheck, { className: `drop-shadow-md ${["#ffffff", "#4df5cb", "#84cc16", "#f59e0b"].includes(preset) ? "text-black" : "text-white"}`, size: 12 })
|
|
7669
7732
|
)))), /* @__PURE__ */ import_react13.default.createElement("style", null, `
|
|
7670
7733
|
.custom-react-colorful .react-colorful {
|
|
7671
7734
|
width: 100%;
|
|
@@ -7761,10 +7824,19 @@ function InSceneCreationForm({
|
|
|
7761
7824
|
if (typeInput.trim() === "") {
|
|
7762
7825
|
result = validExistingTypes.filter((t) => !types.includes(t));
|
|
7763
7826
|
} else {
|
|
7764
|
-
|
|
7765
|
-
|
|
7766
|
-
|
|
7767
|
-
|
|
7827
|
+
console.log("InSceneCreationForm: Filtrando tipos com input:", typeInput);
|
|
7828
|
+
try {
|
|
7829
|
+
const lowercasedInput = typeInput.toLowerCase();
|
|
7830
|
+
result = validExistingTypes.filter((t) => {
|
|
7831
|
+
if (!t) {
|
|
7832
|
+
console.warn("InSceneCreationForm: Tipo encontrado como undefined/null durante filtragem");
|
|
7833
|
+
return false;
|
|
7834
|
+
}
|
|
7835
|
+
return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
|
|
7836
|
+
});
|
|
7837
|
+
} catch (err) {
|
|
7838
|
+
console.error("InSceneCreationForm: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
|
|
7839
|
+
}
|
|
7768
7840
|
}
|
|
7769
7841
|
if (sourceTypes) {
|
|
7770
7842
|
const priorityTypes = Array.isArray(sourceTypes) ? sourceTypes : [sourceTypes];
|
|
@@ -8614,12 +8686,18 @@ function NodeDetailsPanel({
|
|
|
8614
8686
|
if (typeInput.trim() === "") {
|
|
8615
8687
|
setFilteredTypes(validExistingTypes.filter((t) => !types.includes(t)));
|
|
8616
8688
|
} else {
|
|
8617
|
-
|
|
8618
|
-
|
|
8619
|
-
|
|
8620
|
-
|
|
8621
|
-
|
|
8622
|
-
|
|
8689
|
+
console.log("NodeDetailsPanel: Filtrando tipos com input:", typeInput);
|
|
8690
|
+
try {
|
|
8691
|
+
const lowercasedInput = typeInput.toLowerCase();
|
|
8692
|
+
setFilteredTypes(
|
|
8693
|
+
validExistingTypes.filter((t) => {
|
|
8694
|
+
if (!t) return false;
|
|
8695
|
+
return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
|
|
8696
|
+
})
|
|
8697
|
+
);
|
|
8698
|
+
} catch (err) {
|
|
8699
|
+
console.error("NodeDetailsPanel: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
|
|
8700
|
+
}
|
|
8623
8701
|
}
|
|
8624
8702
|
}, [typeInput, existingTypes, types]);
|
|
8625
8703
|
const handleIntensityChangeLocal = (e) => {
|
|
@@ -9116,12 +9194,21 @@ function QuestDetailsPanel({
|
|
|
9116
9194
|
if (typeInput.trim() === "") {
|
|
9117
9195
|
setFilteredTypes(validExistingTypes.filter((t) => !types.includes(t)));
|
|
9118
9196
|
} else {
|
|
9119
|
-
|
|
9120
|
-
|
|
9121
|
-
|
|
9122
|
-
|
|
9123
|
-
|
|
9124
|
-
|
|
9197
|
+
console.log("QuestDetailsPanel: Filtrando tipos com input:", typeInput);
|
|
9198
|
+
try {
|
|
9199
|
+
const lowercasedInput = typeInput.toLowerCase();
|
|
9200
|
+
setFilteredTypes(
|
|
9201
|
+
validExistingTypes.filter((t) => {
|
|
9202
|
+
if (!t) {
|
|
9203
|
+
console.warn("QuestDetailsPanel: Tipo encontrado como undefined/null durante filtragem");
|
|
9204
|
+
return false;
|
|
9205
|
+
}
|
|
9206
|
+
return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
|
|
9207
|
+
})
|
|
9208
|
+
);
|
|
9209
|
+
} catch (err) {
|
|
9210
|
+
console.error("QuestDetailsPanel: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
|
|
9211
|
+
}
|
|
9125
9212
|
}
|
|
9126
9213
|
}, [typeInput, existingTypes, types]);
|
|
9127
9214
|
const handleCopyLink = () => {
|
package/dist/index.mjs
CHANGED
|
@@ -580,15 +580,18 @@ function XViewSidebar({
|
|
|
580
580
|
const [isFilterMenuOpen, setIsFilterMenuOpen] = useState2(false);
|
|
581
581
|
const [filterCategory, setFilterCategory] = useState2("Type");
|
|
582
582
|
const [filterValue, setFilterValue] = useState2("");
|
|
583
|
+
const [isTypeDropdownOpen, setIsTypeDropdownOpen] = useState2(false);
|
|
584
|
+
const [highlightedTypeIndex, setHighlightedTypeIndex] = useState2(-1);
|
|
583
585
|
const containerRef = useRef2(null);
|
|
584
586
|
const inputRef = useRef2(null);
|
|
585
587
|
const filterMenuRef = useRef2(null);
|
|
588
|
+
const typeDropdownRef = useRef2(null);
|
|
586
589
|
const ability = useMemo2(() => {
|
|
587
590
|
return defineAbilityFor(userRole);
|
|
588
591
|
}, [userRole]);
|
|
589
592
|
const contextLabel = useMemo2(() => {
|
|
590
593
|
if (!viewType || !viewName) return null;
|
|
591
|
-
const typeLower = viewType.toLowerCase();
|
|
594
|
+
const typeLower = String(viewType).toLowerCase();
|
|
592
595
|
if (typeLower === "database") {
|
|
593
596
|
return `Dataset: ${viewName}`;
|
|
594
597
|
} else if (typeLower === "view") {
|
|
@@ -598,7 +601,12 @@ function XViewSidebar({
|
|
|
598
601
|
}
|
|
599
602
|
return `${viewType}: ${viewName}`;
|
|
600
603
|
}, [viewType, viewName]);
|
|
601
|
-
const normalize = (str = "") =>
|
|
604
|
+
const normalize = (str = "") => {
|
|
605
|
+
if (str === void 0 || str === null) {
|
|
606
|
+
console.warn("XViewSidebar: normalize recebeu valor nulo/indefinido:", str);
|
|
607
|
+
}
|
|
608
|
+
return String(str).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[._\-–—:,;!?'"()\[\]{}/\\]/g, " ").replace(/\s+/g, " ").trim();
|
|
609
|
+
};
|
|
602
610
|
const collator = useMemo2(
|
|
603
611
|
() => new Intl.Collator("pt-BR", { sensitivity: "base", numeric: true }),
|
|
604
612
|
[]
|
|
@@ -616,6 +624,11 @@ function XViewSidebar({
|
|
|
616
624
|
});
|
|
617
625
|
return Array.from(typesSet).sort();
|
|
618
626
|
}, [dbNodes]);
|
|
627
|
+
const filteredTypes = useMemo2(() => {
|
|
628
|
+
if (!filterValue.trim()) return availableTypes;
|
|
629
|
+
const search = filterValue.toLowerCase().trim();
|
|
630
|
+
return availableTypes.filter((t) => t.toLowerCase().includes(search));
|
|
631
|
+
}, [availableTypes, filterValue]);
|
|
619
632
|
const filteredAndSorted = useMemo2(() => {
|
|
620
633
|
const base = Array.isArray(dbNodes) ? dbNodes : [];
|
|
621
634
|
let pool = base;
|
|
@@ -656,12 +669,15 @@ function XViewSidebar({
|
|
|
656
669
|
if (filterMenuRef.current && !filterMenuRef.current.contains(event.target)) {
|
|
657
670
|
setIsFilterMenuOpen(false);
|
|
658
671
|
}
|
|
672
|
+
if (typeDropdownRef.current && !typeDropdownRef.current.contains(event.target)) {
|
|
673
|
+
setIsTypeDropdownOpen(false);
|
|
674
|
+
}
|
|
659
675
|
};
|
|
660
|
-
if (isFilterMenuOpen) {
|
|
676
|
+
if (isFilterMenuOpen || isTypeDropdownOpen) {
|
|
661
677
|
document.addEventListener("mousedown", handleClickOutside);
|
|
662
678
|
}
|
|
663
679
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
664
|
-
}, [isFilterMenuOpen]);
|
|
680
|
+
}, [isFilterMenuOpen, isTypeDropdownOpen]);
|
|
665
681
|
useEffect2(() => {
|
|
666
682
|
if (!query) setSelectedNodeId(null);
|
|
667
683
|
}, [query]);
|
|
@@ -715,6 +731,35 @@ function XViewSidebar({
|
|
|
715
731
|
const handleRemoveFilter = (index) => {
|
|
716
732
|
setActiveFilters((prev) => prev.filter((_, i) => i !== index));
|
|
717
733
|
};
|
|
734
|
+
const handleTypeKeyDown = (e) => {
|
|
735
|
+
if (!isTypeDropdownOpen) {
|
|
736
|
+
setIsTypeDropdownOpen(true);
|
|
737
|
+
}
|
|
738
|
+
if (e.key === "ArrowDown") {
|
|
739
|
+
e.preventDefault();
|
|
740
|
+
setHighlightedTypeIndex(
|
|
741
|
+
(prev) => prev < filteredTypes.length - 1 ? prev + 1 : prev
|
|
742
|
+
);
|
|
743
|
+
} else if (e.key === "ArrowUp") {
|
|
744
|
+
e.preventDefault();
|
|
745
|
+
setHighlightedTypeIndex((prev) => prev > 0 ? prev - 1 : 0);
|
|
746
|
+
} else if (e.key === "Enter") {
|
|
747
|
+
e.preventDefault();
|
|
748
|
+
if (highlightedTypeIndex >= 0 && filteredTypes[highlightedTypeIndex]) {
|
|
749
|
+
setFilterValue(filteredTypes[highlightedTypeIndex]);
|
|
750
|
+
setIsTypeDropdownOpen(false);
|
|
751
|
+
setHighlightedTypeIndex(-1);
|
|
752
|
+
} else {
|
|
753
|
+
handleAddFilter();
|
|
754
|
+
}
|
|
755
|
+
} else if (e.key === "Escape") {
|
|
756
|
+
e.preventDefault();
|
|
757
|
+
setIsTypeDropdownOpen(false);
|
|
758
|
+
setHighlightedTypeIndex(-1);
|
|
759
|
+
} else if (e.key === "Tab") {
|
|
760
|
+
setIsTypeDropdownOpen(false);
|
|
761
|
+
}
|
|
762
|
+
};
|
|
718
763
|
const ToggleButton = /* @__PURE__ */ React2.createElement(
|
|
719
764
|
"button",
|
|
720
765
|
{
|
|
@@ -845,18 +890,36 @@ function XViewSidebar({
|
|
|
845
890
|
className: `flex-1 text-xs py-1 rounded transition-colors ${filterCategory === opt ? "bg-indigo-600 text-white shadow-sm" : "text-slate-400 hover:text-slate-200"}`
|
|
846
891
|
},
|
|
847
892
|
opt
|
|
848
|
-
)))), /* @__PURE__ */ React2.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-semibold tracking-wider" }, "Valor"), filterCategory === "Type" ? /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
|
|
893
|
+
)))), /* @__PURE__ */ React2.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-semibold tracking-wider" }, "Valor"), filterCategory === "Type" ? /* @__PURE__ */ React2.createElement("div", { className: "relative", ref: typeDropdownRef }, /* @__PURE__ */ React2.createElement(
|
|
849
894
|
"input",
|
|
850
895
|
{
|
|
851
|
-
list: "typeOptions",
|
|
852
896
|
type: "text",
|
|
853
897
|
value: filterValue,
|
|
854
|
-
onChange: (e) =>
|
|
898
|
+
onChange: (e) => {
|
|
899
|
+
setFilterValue(e.target.value);
|
|
900
|
+
if (!isTypeDropdownOpen) setIsTypeDropdownOpen(true);
|
|
901
|
+
setHighlightedTypeIndex(-1);
|
|
902
|
+
},
|
|
903
|
+
onFocus: () => setIsTypeDropdownOpen(true),
|
|
904
|
+
onKeyDown: handleTypeKeyDown,
|
|
855
905
|
placeholder: "Ex: Concept",
|
|
856
906
|
className: "w-full bg-slate-800 p-2 text-xs rounded border border-white/10 focus:outline-none focus:border-indigo-500/50 text-white",
|
|
857
907
|
autoFocus: true
|
|
858
908
|
}
|
|
859
|
-
),
|
|
909
|
+
), isTypeDropdownOpen && filteredTypes.length > 0 && /* @__PURE__ */ React2.createElement("div", { className: "absolute z-[60] left-0 right-0 mt-1 max-h-48 overflow-y-auto bg-slate-900/95 backdrop-blur-xl border border-white/10 rounded-md shadow-2xl custom-scrollbar" }, filteredTypes.map((t, idx) => /* @__PURE__ */ React2.createElement(
|
|
910
|
+
"div",
|
|
911
|
+
{
|
|
912
|
+
key: t,
|
|
913
|
+
className: `px-3 py-2 text-xs cursor-pointer transition-colors ${idx === highlightedTypeIndex ? "bg-indigo-600 text-white" : "text-slate-300 hover:bg-white/10"}`,
|
|
914
|
+
onMouseDown: (e) => {
|
|
915
|
+
e.preventDefault();
|
|
916
|
+
setFilterValue(t);
|
|
917
|
+
setIsTypeDropdownOpen(false);
|
|
918
|
+
setHighlightedTypeIndex(-1);
|
|
919
|
+
}
|
|
920
|
+
},
|
|
921
|
+
t
|
|
922
|
+
)))) : /* @__PURE__ */ React2.createElement("div", { className: "relative flex items-center" }, /* @__PURE__ */ React2.createElement(
|
|
860
923
|
"div",
|
|
861
924
|
{
|
|
862
925
|
className: "absolute left-2 w-3 h-3 rounded-full border border-white/20 shadow-sm",
|
|
@@ -7657,7 +7720,7 @@ function ColorPicker({ color, onChange, disabled }) {
|
|
|
7657
7720
|
style: { backgroundColor: preset },
|
|
7658
7721
|
title: preset
|
|
7659
7722
|
},
|
|
7660
|
-
color.toLowerCase() === preset.toLowerCase() && /* @__PURE__ */ React12.createElement(FiCheck6, { className: `drop-shadow-md ${["#ffffff", "#4df5cb", "#84cc16", "#f59e0b"].includes(preset) ? "text-black" : "text-white"}`, size: 12 })
|
|
7723
|
+
(color || "").toLowerCase() === (preset || "").toLowerCase() && /* @__PURE__ */ React12.createElement(FiCheck6, { className: `drop-shadow-md ${["#ffffff", "#4df5cb", "#84cc16", "#f59e0b"].includes(preset) ? "text-black" : "text-white"}`, size: 12 })
|
|
7661
7724
|
)))), /* @__PURE__ */ React12.createElement("style", null, `
|
|
7662
7725
|
.custom-react-colorful .react-colorful {
|
|
7663
7726
|
width: 100%;
|
|
@@ -7753,10 +7816,19 @@ function InSceneCreationForm({
|
|
|
7753
7816
|
if (typeInput.trim() === "") {
|
|
7754
7817
|
result = validExistingTypes.filter((t) => !types.includes(t));
|
|
7755
7818
|
} else {
|
|
7756
|
-
|
|
7757
|
-
|
|
7758
|
-
|
|
7759
|
-
|
|
7819
|
+
console.log("InSceneCreationForm: Filtrando tipos com input:", typeInput);
|
|
7820
|
+
try {
|
|
7821
|
+
const lowercasedInput = typeInput.toLowerCase();
|
|
7822
|
+
result = validExistingTypes.filter((t) => {
|
|
7823
|
+
if (!t) {
|
|
7824
|
+
console.warn("InSceneCreationForm: Tipo encontrado como undefined/null durante filtragem");
|
|
7825
|
+
return false;
|
|
7826
|
+
}
|
|
7827
|
+
return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
|
|
7828
|
+
});
|
|
7829
|
+
} catch (err) {
|
|
7830
|
+
console.error("InSceneCreationForm: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
|
|
7831
|
+
}
|
|
7760
7832
|
}
|
|
7761
7833
|
if (sourceTypes) {
|
|
7762
7834
|
const priorityTypes = Array.isArray(sourceTypes) ? sourceTypes : [sourceTypes];
|
|
@@ -8606,12 +8678,18 @@ function NodeDetailsPanel({
|
|
|
8606
8678
|
if (typeInput.trim() === "") {
|
|
8607
8679
|
setFilteredTypes(validExistingTypes.filter((t) => !types.includes(t)));
|
|
8608
8680
|
} else {
|
|
8609
|
-
|
|
8610
|
-
|
|
8611
|
-
|
|
8612
|
-
|
|
8613
|
-
|
|
8614
|
-
|
|
8681
|
+
console.log("NodeDetailsPanel: Filtrando tipos com input:", typeInput);
|
|
8682
|
+
try {
|
|
8683
|
+
const lowercasedInput = typeInput.toLowerCase();
|
|
8684
|
+
setFilteredTypes(
|
|
8685
|
+
validExistingTypes.filter((t) => {
|
|
8686
|
+
if (!t) return false;
|
|
8687
|
+
return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
|
|
8688
|
+
})
|
|
8689
|
+
);
|
|
8690
|
+
} catch (err) {
|
|
8691
|
+
console.error("NodeDetailsPanel: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
|
|
8692
|
+
}
|
|
8615
8693
|
}
|
|
8616
8694
|
}, [typeInput, existingTypes, types]);
|
|
8617
8695
|
const handleIntensityChangeLocal = (e) => {
|
|
@@ -9108,12 +9186,21 @@ function QuestDetailsPanel({
|
|
|
9108
9186
|
if (typeInput.trim() === "") {
|
|
9109
9187
|
setFilteredTypes(validExistingTypes.filter((t) => !types.includes(t)));
|
|
9110
9188
|
} else {
|
|
9111
|
-
|
|
9112
|
-
|
|
9113
|
-
|
|
9114
|
-
|
|
9115
|
-
|
|
9116
|
-
|
|
9189
|
+
console.log("QuestDetailsPanel: Filtrando tipos com input:", typeInput);
|
|
9190
|
+
try {
|
|
9191
|
+
const lowercasedInput = typeInput.toLowerCase();
|
|
9192
|
+
setFilteredTypes(
|
|
9193
|
+
validExistingTypes.filter((t) => {
|
|
9194
|
+
if (!t) {
|
|
9195
|
+
console.warn("QuestDetailsPanel: Tipo encontrado como undefined/null durante filtragem");
|
|
9196
|
+
return false;
|
|
9197
|
+
}
|
|
9198
|
+
return t.toLowerCase().includes(lowercasedInput) && !types.includes(t);
|
|
9199
|
+
})
|
|
9200
|
+
);
|
|
9201
|
+
} catch (err) {
|
|
9202
|
+
console.error("QuestDetailsPanel: Erro ao filtrar tipos:", err, "typeInput:", typeInput);
|
|
9203
|
+
}
|
|
9117
9204
|
}
|
|
9118
9205
|
}, [typeInput, existingTypes, types]);
|
|
9119
9206
|
const handleCopyLink = () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lv-x-software-house/x_view",
|
|
3
|
-
"version": "1.2.5-dev.
|
|
3
|
+
"version": "1.2.5-dev.18",
|
|
4
4
|
"description": "Pacote privado contendo os componentes e lógica de renderização 3D do X View.",
|
|
5
5
|
"author": "iv.x - Engenharia de Software - ivxsoftwarehouse@gmail.com",
|
|
6
6
|
"license": "UNLICENSED",
|