@lv-x-software-house/x_view 1.2.5-dev.50 → 1.2.5-dev.51

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 CHANGED
@@ -641,6 +641,7 @@ function XViewSidebar({
641
641
  const [questFilterAssignee, setQuestFilterAssignee] = (0, import_react2.useState)("");
642
642
  const [questFilterStatus, setQuestFilterStatus] = (0, import_react2.useState)("");
643
643
  const [isQuestLensMenuOpen, setIsQuestLensMenuOpen] = (0, import_react2.useState)(false);
644
+ const [questFilterMilestone, setQuestFilterMilestone] = (0, import_react2.useState)("");
644
645
  const [isTypeDropdownOpen, setIsTypeDropdownOpen] = (0, import_react2.useState)(false);
645
646
  const [highlightedTypeIndex, setHighlightedTypeIndex] = (0, import_react2.useState)(-1);
646
647
  const containerRef = (0, import_react2.useRef)(null);
@@ -1040,12 +1041,12 @@ function XViewSidebar({
1040
1041
  "button",
1041
1042
  {
1042
1043
  onClick: () => setIsQuestLensMenuOpen(!isQuestLensMenuOpen),
1043
- className: `${buttonBaseClass} ${isQuestLensMenuOpen || questFilterAssignee || questFilterStatus ? "bg-indigo-500/30 border-indigo-400" : ""}`,
1044
+ className: `${buttonBaseClass} ${isQuestLensMenuOpen || questFilterAssignee || questFilterStatus || questFilterMilestone ? "bg-indigo-500/30 border-indigo-400" : ""}`,
1044
1045
  title: "Abrir filtros da Lente de Quests"
1045
1046
  },
1046
1047
  /* @__PURE__ */ import_react2.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react2.default.createElement("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }), /* @__PURE__ */ import_react2.default.createElement("path", { d: "M9 12l2 2 4-4" })),
1047
1048
  "Quest Lens",
1048
- (questFilterAssignee || questFilterStatus) && /* @__PURE__ */ import_react2.default.createElement("span", { className: "ml-1 px-1.5 py-0.5 rounded-full bg-indigo-500 text-[9px] font-bold" }, "!")
1049
+ (questFilterAssignee || questFilterStatus || questFilterMilestone) && /* @__PURE__ */ import_react2.default.createElement("span", { className: "ml-1 px-1.5 py-0.5 rounded-full bg-indigo-500 text-[9px] font-bold" }, "!")
1049
1050
  ), isQuestLensMenuOpen && /* @__PURE__ */ import_react2.default.createElement("div", { className: "absolute left-0 bottom-full mb-2 w-full p-4 rounded-xl bg-slate-900 border border-white/10 shadow-2xl z-50 flex flex-col gap-4 animate-in fade-in slide-in-from-bottom-2 duration-200" }, /* @__PURE__ */ import_react2.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react2.default.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-bold tracking-widest" }, "Respons\xE1vel"), /* @__PURE__ */ import_react2.default.createElement(
1050
1051
  "select",
1051
1052
  {
@@ -1067,12 +1068,22 @@ function XViewSidebar({
1067
1068
  /* @__PURE__ */ import_react2.default.createElement("option", { value: "In Progress" }, "In Progress"),
1068
1069
  /* @__PURE__ */ import_react2.default.createElement("option", { value: "Review" }, "Review"),
1069
1070
  /* @__PURE__ */ import_react2.default.createElement("option", { value: "Done" }, "Done")
1071
+ )), /* @__PURE__ */ import_react2.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react2.default.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-bold tracking-widest" }, "Milestone"), /* @__PURE__ */ import_react2.default.createElement(
1072
+ "select",
1073
+ {
1074
+ value: questFilterMilestone,
1075
+ onChange: (e) => setQuestFilterMilestone(e.target.value),
1076
+ 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 appearance-none cursor-pointer"
1077
+ },
1078
+ /* @__PURE__ */ import_react2.default.createElement("option", { value: "" }, "Todos os Milestones"),
1079
+ milestones.map((ms) => /* @__PURE__ */ import_react2.default.createElement("option", { key: ms.id, value: ms.id }, ms.name, " ", ms.status === "inactive" ? "(Inativo)" : ""))
1070
1080
  )), /* @__PURE__ */ import_react2.default.createElement("div", { className: "flex gap-2 pt-1" }, /* @__PURE__ */ import_react2.default.createElement(
1071
1081
  "button",
1072
1082
  {
1073
1083
  onClick: () => {
1074
1084
  setQuestFilterAssignee("");
1075
1085
  setQuestFilterStatus("");
1086
+ setQuestFilterMilestone("");
1076
1087
  },
1077
1088
  className: "flex-1 py-2 bg-white/5 hover:bg-white/10 text-slate-300 text-[11px] font-medium rounded-lg transition-colors border border-white/5"
1078
1089
  },
@@ -1081,7 +1092,11 @@ function XViewSidebar({
1081
1092
  "button",
1082
1093
  {
1083
1094
  onClick: () => {
1084
- onActivateQuestLens({ assigneeId: questFilterAssignee, status: questFilterStatus });
1095
+ onActivateQuestLens({
1096
+ assigneeId: questFilterAssignee,
1097
+ status: questFilterStatus,
1098
+ milestoneId: questFilterMilestone
1099
+ });
1085
1100
  setIsQuestLensMenuOpen(false);
1086
1101
  onToggle(false);
1087
1102
  },
@@ -14337,7 +14352,7 @@ function XViewScene({
14337
14352
  },
14338
14353
  []
14339
14354
  );
14340
- const handleActivateQuestLens = (0, import_react29.useCallback)(({ assigneeId, status: status2 }) => {
14355
+ const handleActivateQuestLens = (0, import_react29.useCallback)(({ assigneeId, status: status2, milestoneId }) => {
14341
14356
  var _a2;
14342
14357
  const { nodeObjects, tweenGroup, graphGroup } = stateRef.current;
14343
14358
  if (!nodeObjects || !tweenGroup || !graphGroup) return;
@@ -14345,7 +14360,8 @@ function XViewScene({
14345
14360
  const filteredQuests = allQuests.filter((q) => {
14346
14361
  const matchAssignee = !assigneeId || String(q.assignee_id) === String(assigneeId);
14347
14362
  const matchStatus = !status2 ? q.status !== "Done" : String(q.status) === String(status2);
14348
- return matchAssignee && matchStatus;
14363
+ const matchMilestone = !milestoneId || q.milestone_ids && q.milestone_ids.includes(milestoneId);
14364
+ return matchAssignee && matchStatus && matchMilestone;
14349
14365
  });
14350
14366
  if (filteredQuests.length === 0) {
14351
14367
  console.warn("Nenhuma quest encontrada para os filtros selecionados.");
package/dist/index.mjs CHANGED
@@ -602,6 +602,7 @@ function XViewSidebar({
602
602
  const [questFilterAssignee, setQuestFilterAssignee] = useState2("");
603
603
  const [questFilterStatus, setQuestFilterStatus] = useState2("");
604
604
  const [isQuestLensMenuOpen, setIsQuestLensMenuOpen] = useState2(false);
605
+ const [questFilterMilestone, setQuestFilterMilestone] = useState2("");
605
606
  const [isTypeDropdownOpen, setIsTypeDropdownOpen] = useState2(false);
606
607
  const [highlightedTypeIndex, setHighlightedTypeIndex] = useState2(-1);
607
608
  const containerRef = useRef2(null);
@@ -1001,12 +1002,12 @@ function XViewSidebar({
1001
1002
  "button",
1002
1003
  {
1003
1004
  onClick: () => setIsQuestLensMenuOpen(!isQuestLensMenuOpen),
1004
- className: `${buttonBaseClass} ${isQuestLensMenuOpen || questFilterAssignee || questFilterStatus ? "bg-indigo-500/30 border-indigo-400" : ""}`,
1005
+ className: `${buttonBaseClass} ${isQuestLensMenuOpen || questFilterAssignee || questFilterStatus || questFilterMilestone ? "bg-indigo-500/30 border-indigo-400" : ""}`,
1005
1006
  title: "Abrir filtros da Lente de Quests"
1006
1007
  },
1007
1008
  /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React2.createElement("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }), /* @__PURE__ */ React2.createElement("path", { d: "M9 12l2 2 4-4" })),
1008
1009
  "Quest Lens",
1009
- (questFilterAssignee || questFilterStatus) && /* @__PURE__ */ React2.createElement("span", { className: "ml-1 px-1.5 py-0.5 rounded-full bg-indigo-500 text-[9px] font-bold" }, "!")
1010
+ (questFilterAssignee || questFilterStatus || questFilterMilestone) && /* @__PURE__ */ React2.createElement("span", { className: "ml-1 px-1.5 py-0.5 rounded-full bg-indigo-500 text-[9px] font-bold" }, "!")
1010
1011
  ), isQuestLensMenuOpen && /* @__PURE__ */ React2.createElement("div", { className: "absolute left-0 bottom-full mb-2 w-full p-4 rounded-xl bg-slate-900 border border-white/10 shadow-2xl z-50 flex flex-col gap-4 animate-in fade-in slide-in-from-bottom-2 duration-200" }, /* @__PURE__ */ React2.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-bold tracking-widest" }, "Respons\xE1vel"), /* @__PURE__ */ React2.createElement(
1011
1012
  "select",
1012
1013
  {
@@ -1028,12 +1029,22 @@ function XViewSidebar({
1028
1029
  /* @__PURE__ */ React2.createElement("option", { value: "In Progress" }, "In Progress"),
1029
1030
  /* @__PURE__ */ React2.createElement("option", { value: "Review" }, "Review"),
1030
1031
  /* @__PURE__ */ React2.createElement("option", { value: "Done" }, "Done")
1032
+ )), /* @__PURE__ */ React2.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-bold tracking-widest" }, "Milestone"), /* @__PURE__ */ React2.createElement(
1033
+ "select",
1034
+ {
1035
+ value: questFilterMilestone,
1036
+ onChange: (e) => setQuestFilterMilestone(e.target.value),
1037
+ 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 appearance-none cursor-pointer"
1038
+ },
1039
+ /* @__PURE__ */ React2.createElement("option", { value: "" }, "Todos os Milestones"),
1040
+ milestones.map((ms) => /* @__PURE__ */ React2.createElement("option", { key: ms.id, value: ms.id }, ms.name, " ", ms.status === "inactive" ? "(Inativo)" : ""))
1031
1041
  )), /* @__PURE__ */ React2.createElement("div", { className: "flex gap-2 pt-1" }, /* @__PURE__ */ React2.createElement(
1032
1042
  "button",
1033
1043
  {
1034
1044
  onClick: () => {
1035
1045
  setQuestFilterAssignee("");
1036
1046
  setQuestFilterStatus("");
1047
+ setQuestFilterMilestone("");
1037
1048
  },
1038
1049
  className: "flex-1 py-2 bg-white/5 hover:bg-white/10 text-slate-300 text-[11px] font-medium rounded-lg transition-colors border border-white/5"
1039
1050
  },
@@ -1042,7 +1053,11 @@ function XViewSidebar({
1042
1053
  "button",
1043
1054
  {
1044
1055
  onClick: () => {
1045
- onActivateQuestLens({ assigneeId: questFilterAssignee, status: questFilterStatus });
1056
+ onActivateQuestLens({
1057
+ assigneeId: questFilterAssignee,
1058
+ status: questFilterStatus,
1059
+ milestoneId: questFilterMilestone
1060
+ });
1046
1061
  setIsQuestLensMenuOpen(false);
1047
1062
  onToggle(false);
1048
1063
  },
@@ -14381,7 +14396,7 @@ function XViewScene({
14381
14396
  },
14382
14397
  []
14383
14398
  );
14384
- const handleActivateQuestLens = useCallback4(({ assigneeId, status: status2 }) => {
14399
+ const handleActivateQuestLens = useCallback4(({ assigneeId, status: status2, milestoneId }) => {
14385
14400
  var _a2;
14386
14401
  const { nodeObjects, tweenGroup, graphGroup } = stateRef.current;
14387
14402
  if (!nodeObjects || !tweenGroup || !graphGroup) return;
@@ -14389,7 +14404,8 @@ function XViewScene({
14389
14404
  const filteredQuests = allQuests.filter((q) => {
14390
14405
  const matchAssignee = !assigneeId || String(q.assignee_id) === String(assigneeId);
14391
14406
  const matchStatus = !status2 ? q.status !== "Done" : String(q.status) === String(status2);
14392
- return matchAssignee && matchStatus;
14407
+ const matchMilestone = !milestoneId || q.milestone_ids && q.milestone_ids.includes(milestoneId);
14408
+ return matchAssignee && matchStatus && matchMilestone;
14393
14409
  });
14394
14410
  if (filteredQuests.length === 0) {
14395
14411
  console.warn("Nenhuma quest encontrada para os filtros selecionados.");
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.50",
3
+ "version": "1.2.5-dev.51",
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",