@lv-x-software-house/x_view 1.2.6-dev.52 → 1.2.6-dev.53

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.
Files changed (3) hide show
  1. package/dist/index.js +101 -42
  2. package/dist/index.mjs +101 -42
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3869,6 +3869,49 @@ function ContextMenu({
3869
3869
  // src/components/XViewSidebar.jsx
3870
3870
  var import_react3 = __toESM(require("react"));
3871
3871
  var import_fi2 = require("react-icons/fi");
3872
+ var CustomSelect = ({ value, onChange, options, placeholder }) => {
3873
+ const [isOpen, setIsOpen] = (0, import_react3.useState)(false);
3874
+ const selectRef = (0, import_react3.useRef)(null);
3875
+ (0, import_react3.useEffect)(() => {
3876
+ const handleClickOutside = (e) => {
3877
+ if (selectRef.current && !selectRef.current.contains(e.target)) {
3878
+ setIsOpen(false);
3879
+ }
3880
+ };
3881
+ if (isOpen) {
3882
+ document.addEventListener("mousedown", handleClickOutside);
3883
+ }
3884
+ return () => document.removeEventListener("mousedown", handleClickOutside);
3885
+ }, [isOpen]);
3886
+ const selectedOption = options.find((o) => String(o.value) === String(value));
3887
+ return /* @__PURE__ */ import_react3.default.createElement("div", { ref: selectRef, className: "relative w-full text-slate-200 text-sm" }, /* @__PURE__ */ import_react3.default.createElement(
3888
+ "button",
3889
+ {
3890
+ type: "button",
3891
+ onClick: () => setIsOpen(!isOpen),
3892
+ className: `w-full bg-slate-900/80 px-3 py-2.5 rounded-md border text-left transition-all flex items-center justify-between
3893
+ ${isOpen ? "border-indigo-500/50 bg-slate-800" : "border-white/10 hover:bg-slate-800"}`
3894
+ },
3895
+ /* @__PURE__ */ import_react3.default.createElement("span", { className: "truncate" }, selectedOption ? selectedOption.label : placeholder),
3896
+ /* @__PURE__ */ import_react3.default.createElement("svg", { className: `w-4 h-4 text-slate-500 transition-transform flex-shrink-0 ${isOpen ? "rotate-180" : ""}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ import_react3.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))
3897
+ ), isOpen && /* @__PURE__ */ import_react3.default.createElement("div", { className: "absolute z-50 w-full mt-2 bg-slate-800 border border-white/10 rounded-lg shadow-2xl max-h-56 overflow-y-auto custom-scrollbar animate-in fade-in zoom-in-95 duration-100 py-1" }, options.map((opt, idx) => {
3898
+ const isSelected = String(value) === String(opt.value);
3899
+ return /* @__PURE__ */ import_react3.default.createElement(
3900
+ "button",
3901
+ {
3902
+ key: idx,
3903
+ type: "button",
3904
+ onClick: () => {
3905
+ onChange(opt.value);
3906
+ setIsOpen(false);
3907
+ },
3908
+ className: `w-full text-left px-3 py-2.5 text-sm transition-colors
3909
+ ${isSelected ? "bg-indigo-600/30 text-indigo-200 font-medium" : "text-slate-300 hover:bg-white/10"}`
3910
+ },
3911
+ opt.label
3912
+ );
3913
+ })));
3914
+ };
3872
3915
  function XViewSidebar({
3873
3916
  dbNodes = [],
3874
3917
  isNodeInView = () => false,
@@ -4161,37 +4204,46 @@ function XViewSidebar({
4161
4204
  },
4162
4205
  /* @__PURE__ */ import_react3.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react3.default.createElement("path", { fillRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z", clipRule: "evenodd" }))
4163
4206
  )),
4164
- /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex-1 overflow-y-auto p-4 space-y-6" }, activeSubMenu === "quest" && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-6 animate-in fade-in slide-in-from-bottom-2 duration-500" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Respons\xE1vel"), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ import_react3.default.createElement(
4165
- "select",
4207
+ /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex-1 overflow-y-auto p-4 space-y-6" }, activeSubMenu === "quest" && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-6 animate-in fade-in slide-in-from-bottom-2 duration-500" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Respons\xE1vel"), /* @__PURE__ */ import_react3.default.createElement(
4208
+ CustomSelect,
4166
4209
  {
4167
4210
  value: questFilterAssignee,
4168
- onChange: (e) => setQuestFilterAssignee(e.target.value),
4169
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4170
- },
4171
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "" }, "Todos os Respons\xE1veis"),
4172
- viewMembers.map((m) => /* @__PURE__ */ import_react3.default.createElement("option", { key: m.id, value: m.id }, m.name || m.email))
4173
- ), /* @__PURE__ */ import_react3.default.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ import_react3.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ import_react3.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Status"), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ import_react3.default.createElement(
4174
- "select",
4211
+ onChange: (val) => setQuestFilterAssignee(val),
4212
+ options: [
4213
+ { value: "", label: "Todos os Respons\xE1veis" },
4214
+ ...viewMembers.map((m) => ({ value: m.id, label: m.name || m.email }))
4215
+ ],
4216
+ placeholder: "Selecione um Respons\xE1vel"
4217
+ }
4218
+ )), /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Status"), /* @__PURE__ */ import_react3.default.createElement(
4219
+ CustomSelect,
4175
4220
  {
4176
4221
  value: questFilterStatus,
4177
- onChange: (e) => setQuestFilterStatus(e.target.value),
4178
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4179
- },
4180
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "" }, "Todos (Exclui Done)"),
4181
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "Backlog" }, "Backlog"),
4182
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "In Progress" }, "In Progress"),
4183
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "Review" }, "Review"),
4184
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "Done" }, "Done")
4185
- ), /* @__PURE__ */ import_react3.default.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ import_react3.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ import_react3.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Milestone"), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ import_react3.default.createElement(
4186
- "select",
4222
+ onChange: (val) => setQuestFilterStatus(val),
4223
+ options: [
4224
+ { value: "", label: "Todos (Exclui Done)" },
4225
+ { value: "Backlog", label: "Backlog" },
4226
+ { value: "In Progress", label: "In Progress" },
4227
+ { value: "Review", label: "Review" },
4228
+ { value: "Done", label: "Done" }
4229
+ ],
4230
+ placeholder: "Selecione um Status"
4231
+ }
4232
+ )), /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Milestone"), /* @__PURE__ */ import_react3.default.createElement(
4233
+ CustomSelect,
4187
4234
  {
4188
4235
  value: questFilterMilestone,
4189
- onChange: (e) => setQuestFilterMilestone(e.target.value),
4190
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4191
- },
4192
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "" }, "Todos os Milestones"),
4193
- milestones.map((ms) => /* @__PURE__ */ import_react3.default.createElement("option", { key: ms.id, value: ms.id }, ms.name, " ", ms.status === "inactive" ? "(Inativo)" : ""))
4194
- ), /* @__PURE__ */ import_react3.default.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ import_react3.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ import_react3.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex gap-3 pt-4" }, /* @__PURE__ */ import_react3.default.createElement(
4236
+ onChange: (val) => setQuestFilterMilestone(val),
4237
+ options: [
4238
+ { value: "", label: "Todos os Milestones" },
4239
+ ...milestones.map((ms) => ({
4240
+ value: ms.id,
4241
+ label: `${ms.name} ${ms.status === "inactive" ? "(Inativo)" : ""}`
4242
+ }))
4243
+ ],
4244
+ placeholder: "Todos os Milestones"
4245
+ }
4246
+ )), /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex gap-3 pt-4" }, /* @__PURE__ */ import_react3.default.createElement(
4195
4247
  "button",
4196
4248
  {
4197
4249
  onClick: () => {
@@ -4216,17 +4268,19 @@ function XViewSidebar({
4216
4268
  className: "flex-[2] py-3 bg-indigo-600 hover:bg-indigo-500 text-white text-[10px] font-black uppercase tracking-widest rounded-xl shadow-lg shadow-indigo-500/20 transition-all hover:scale-[1.02] active:scale-95"
4217
4269
  },
4218
4270
  "Aplicar Lente"
4219
- ))), activeSubMenu === "reshape" && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-6 animate-in fade-in slide-in-from-bottom-2 duration-500" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Layout Type"), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ import_react3.default.createElement(
4220
- "select",
4271
+ ))), activeSubMenu === "reshape" && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-6 animate-in fade-in slide-in-from-bottom-2 duration-500" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Layout Type"), /* @__PURE__ */ import_react3.default.createElement(
4272
+ CustomSelect,
4221
4273
  {
4222
4274
  value: reshapeLayoutType,
4223
- onChange: (e) => setReshapeLayoutType(e.target.value),
4224
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4225
- },
4226
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "Star" }, "Star"),
4227
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "Circle" }, "Circle"),
4228
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "Column" }, "Column")
4229
- ), /* @__PURE__ */ import_react3.default.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ import_react3.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ import_react3.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), reshapeLayoutType === "Column" && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Colunas"), /* @__PURE__ */ import_react3.default.createElement(
4275
+ onChange: (val) => setReshapeLayoutType(val),
4276
+ options: [
4277
+ { value: "Star", label: "Star" },
4278
+ { value: "Circle", label: "Circle" },
4279
+ { value: "Column", label: "Column" }
4280
+ ],
4281
+ placeholder: "Selecione um Formato"
4282
+ }
4283
+ )), reshapeLayoutType === "Column" && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Colunas"), /* @__PURE__ */ import_react3.default.createElement(
4230
4284
  "input",
4231
4285
  {
4232
4286
  type: "number",
@@ -4236,16 +4290,21 @@ function XViewSidebar({
4236
4290
  onChange: (e) => setReshapeColumnCount(parseInt(e.target.value) || 4),
4237
4291
  className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-white hover:bg-slate-800/50 transition-all"
4238
4292
  }
4239
- )), reshapeLayoutType === "Star" && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "N\xF3 Central"), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ import_react3.default.createElement(
4240
- "select",
4293
+ )), reshapeLayoutType === "Star" && /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "N\xF3 Central"), /* @__PURE__ */ import_react3.default.createElement(
4294
+ CustomSelect,
4241
4295
  {
4242
4296
  value: reshapeCenterNodeId,
4243
- onChange: (e) => setReshapeCenterNodeId(e.target.value),
4244
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4245
- },
4246
- /* @__PURE__ */ import_react3.default.createElement("option", { value: "" }, "Selecione um n\xF3..."),
4247
- (Array.isArray(dbNodes) ? dbNodes.filter((n) => isNodeInView(n.id)) : []).map((n) => /* @__PURE__ */ import_react3.default.createElement("option", { key: n.id, value: n.id }, n.name))
4248
- ), /* @__PURE__ */ import_react3.default.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ import_react3.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ import_react3.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex gap-3 pt-4" }, /* @__PURE__ */ import_react3.default.createElement(
4297
+ onChange: (val) => setReshapeCenterNodeId(val),
4298
+ options: [
4299
+ { value: "", label: "Selecione um n\xF3..." },
4300
+ ...(Array.isArray(dbNodes) ? dbNodes.filter((n) => isNodeInView(n.id)) : []).map((n) => ({
4301
+ value: n.id,
4302
+ label: n.name
4303
+ }))
4304
+ ],
4305
+ placeholder: "Selecione um n\xF3..."
4306
+ }
4307
+ )), /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex gap-3 pt-4" }, /* @__PURE__ */ import_react3.default.createElement(
4249
4308
  "button",
4250
4309
  {
4251
4310
  onClick: () => {
package/dist/index.mjs CHANGED
@@ -3830,6 +3830,49 @@ function ContextMenu({
3830
3830
  // src/components/XViewSidebar.jsx
3831
3831
  import React2, { useMemo as useMemo2, useState as useState3, useEffect as useEffect2, useRef as useRef2 } from "react";
3832
3832
  import { FiLayers } from "react-icons/fi";
3833
+ var CustomSelect = ({ value, onChange, options, placeholder }) => {
3834
+ const [isOpen, setIsOpen] = useState3(false);
3835
+ const selectRef = useRef2(null);
3836
+ useEffect2(() => {
3837
+ const handleClickOutside = (e) => {
3838
+ if (selectRef.current && !selectRef.current.contains(e.target)) {
3839
+ setIsOpen(false);
3840
+ }
3841
+ };
3842
+ if (isOpen) {
3843
+ document.addEventListener("mousedown", handleClickOutside);
3844
+ }
3845
+ return () => document.removeEventListener("mousedown", handleClickOutside);
3846
+ }, [isOpen]);
3847
+ const selectedOption = options.find((o) => String(o.value) === String(value));
3848
+ return /* @__PURE__ */ React2.createElement("div", { ref: selectRef, className: "relative w-full text-slate-200 text-sm" }, /* @__PURE__ */ React2.createElement(
3849
+ "button",
3850
+ {
3851
+ type: "button",
3852
+ onClick: () => setIsOpen(!isOpen),
3853
+ className: `w-full bg-slate-900/80 px-3 py-2.5 rounded-md border text-left transition-all flex items-center justify-between
3854
+ ${isOpen ? "border-indigo-500/50 bg-slate-800" : "border-white/10 hover:bg-slate-800"}`
3855
+ },
3856
+ /* @__PURE__ */ React2.createElement("span", { className: "truncate" }, selectedOption ? selectedOption.label : placeholder),
3857
+ /* @__PURE__ */ React2.createElement("svg", { className: `w-4 h-4 text-slate-500 transition-transform flex-shrink-0 ${isOpen ? "rotate-180" : ""}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))
3858
+ ), isOpen && /* @__PURE__ */ React2.createElement("div", { className: "absolute z-50 w-full mt-2 bg-slate-800 border border-white/10 rounded-lg shadow-2xl max-h-56 overflow-y-auto custom-scrollbar animate-in fade-in zoom-in-95 duration-100 py-1" }, options.map((opt, idx) => {
3859
+ const isSelected = String(value) === String(opt.value);
3860
+ return /* @__PURE__ */ React2.createElement(
3861
+ "button",
3862
+ {
3863
+ key: idx,
3864
+ type: "button",
3865
+ onClick: () => {
3866
+ onChange(opt.value);
3867
+ setIsOpen(false);
3868
+ },
3869
+ className: `w-full text-left px-3 py-2.5 text-sm transition-colors
3870
+ ${isSelected ? "bg-indigo-600/30 text-indigo-200 font-medium" : "text-slate-300 hover:bg-white/10"}`
3871
+ },
3872
+ opt.label
3873
+ );
3874
+ })));
3875
+ };
3833
3876
  function XViewSidebar({
3834
3877
  dbNodes = [],
3835
3878
  isNodeInView = () => false,
@@ -4122,37 +4165,46 @@ function XViewSidebar({
4122
4165
  },
4123
4166
  /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React2.createElement("path", { fillRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z", clipRule: "evenodd" }))
4124
4167
  )),
4125
- /* @__PURE__ */ React2.createElement("div", { className: "flex-1 overflow-y-auto p-4 space-y-6" }, activeSubMenu === "quest" && /* @__PURE__ */ React2.createElement("div", { className: "space-y-6 animate-in fade-in slide-in-from-bottom-2 duration-500" }, /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Respons\xE1vel"), /* @__PURE__ */ React2.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ React2.createElement(
4126
- "select",
4168
+ /* @__PURE__ */ React2.createElement("div", { className: "flex-1 overflow-y-auto p-4 space-y-6" }, activeSubMenu === "quest" && /* @__PURE__ */ React2.createElement("div", { className: "space-y-6 animate-in fade-in slide-in-from-bottom-2 duration-500" }, /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Respons\xE1vel"), /* @__PURE__ */ React2.createElement(
4169
+ CustomSelect,
4127
4170
  {
4128
4171
  value: questFilterAssignee,
4129
- onChange: (e) => setQuestFilterAssignee(e.target.value),
4130
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4131
- },
4132
- /* @__PURE__ */ React2.createElement("option", { value: "" }, "Todos os Respons\xE1veis"),
4133
- viewMembers.map((m) => /* @__PURE__ */ React2.createElement("option", { key: m.id, value: m.id }, m.name || m.email))
4134
- ), /* @__PURE__ */ React2.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Status"), /* @__PURE__ */ React2.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ React2.createElement(
4135
- "select",
4172
+ onChange: (val) => setQuestFilterAssignee(val),
4173
+ options: [
4174
+ { value: "", label: "Todos os Respons\xE1veis" },
4175
+ ...viewMembers.map((m) => ({ value: m.id, label: m.name || m.email }))
4176
+ ],
4177
+ placeholder: "Selecione um Respons\xE1vel"
4178
+ }
4179
+ )), /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Status"), /* @__PURE__ */ React2.createElement(
4180
+ CustomSelect,
4136
4181
  {
4137
4182
  value: questFilterStatus,
4138
- onChange: (e) => setQuestFilterStatus(e.target.value),
4139
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4140
- },
4141
- /* @__PURE__ */ React2.createElement("option", { value: "" }, "Todos (Exclui Done)"),
4142
- /* @__PURE__ */ React2.createElement("option", { value: "Backlog" }, "Backlog"),
4143
- /* @__PURE__ */ React2.createElement("option", { value: "In Progress" }, "In Progress"),
4144
- /* @__PURE__ */ React2.createElement("option", { value: "Review" }, "Review"),
4145
- /* @__PURE__ */ React2.createElement("option", { value: "Done" }, "Done")
4146
- ), /* @__PURE__ */ React2.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Milestone"), /* @__PURE__ */ React2.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ React2.createElement(
4147
- "select",
4183
+ onChange: (val) => setQuestFilterStatus(val),
4184
+ options: [
4185
+ { value: "", label: "Todos (Exclui Done)" },
4186
+ { value: "Backlog", label: "Backlog" },
4187
+ { value: "In Progress", label: "In Progress" },
4188
+ { value: "Review", label: "Review" },
4189
+ { value: "Done", label: "Done" }
4190
+ ],
4191
+ placeholder: "Selecione um Status"
4192
+ }
4193
+ )), /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Milestone"), /* @__PURE__ */ React2.createElement(
4194
+ CustomSelect,
4148
4195
  {
4149
4196
  value: questFilterMilestone,
4150
- onChange: (e) => setQuestFilterMilestone(e.target.value),
4151
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4152
- },
4153
- /* @__PURE__ */ React2.createElement("option", { value: "" }, "Todos os Milestones"),
4154
- milestones.map((ms) => /* @__PURE__ */ React2.createElement("option", { key: ms.id, value: ms.id }, ms.name, " ", ms.status === "inactive" ? "(Inativo)" : ""))
4155
- ), /* @__PURE__ */ React2.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), /* @__PURE__ */ React2.createElement("div", { className: "flex gap-3 pt-4" }, /* @__PURE__ */ React2.createElement(
4197
+ onChange: (val) => setQuestFilterMilestone(val),
4198
+ options: [
4199
+ { value: "", label: "Todos os Milestones" },
4200
+ ...milestones.map((ms) => ({
4201
+ value: ms.id,
4202
+ label: `${ms.name} ${ms.status === "inactive" ? "(Inativo)" : ""}`
4203
+ }))
4204
+ ],
4205
+ placeholder: "Todos os Milestones"
4206
+ }
4207
+ )), /* @__PURE__ */ React2.createElement("div", { className: "flex gap-3 pt-4" }, /* @__PURE__ */ React2.createElement(
4156
4208
  "button",
4157
4209
  {
4158
4210
  onClick: () => {
@@ -4177,17 +4229,19 @@ function XViewSidebar({
4177
4229
  className: "flex-[2] py-3 bg-indigo-600 hover:bg-indigo-500 text-white text-[10px] font-black uppercase tracking-widest rounded-xl shadow-lg shadow-indigo-500/20 transition-all hover:scale-[1.02] active:scale-95"
4178
4230
  },
4179
4231
  "Aplicar Lente"
4180
- ))), activeSubMenu === "reshape" && /* @__PURE__ */ React2.createElement("div", { className: "space-y-6 animate-in fade-in slide-in-from-bottom-2 duration-500" }, /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Layout Type"), /* @__PURE__ */ React2.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ React2.createElement(
4181
- "select",
4232
+ ))), activeSubMenu === "reshape" && /* @__PURE__ */ React2.createElement("div", { className: "space-y-6 animate-in fade-in slide-in-from-bottom-2 duration-500" }, /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Layout Type"), /* @__PURE__ */ React2.createElement(
4233
+ CustomSelect,
4182
4234
  {
4183
4235
  value: reshapeLayoutType,
4184
- onChange: (e) => setReshapeLayoutType(e.target.value),
4185
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4186
- },
4187
- /* @__PURE__ */ React2.createElement("option", { value: "Star" }, "Star"),
4188
- /* @__PURE__ */ React2.createElement("option", { value: "Circle" }, "Circle"),
4189
- /* @__PURE__ */ React2.createElement("option", { value: "Column" }, "Column")
4190
- ), /* @__PURE__ */ React2.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), reshapeLayoutType === "Column" && /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Colunas"), /* @__PURE__ */ React2.createElement(
4236
+ onChange: (val) => setReshapeLayoutType(val),
4237
+ options: [
4238
+ { value: "Star", label: "Star" },
4239
+ { value: "Circle", label: "Circle" },
4240
+ { value: "Column", label: "Column" }
4241
+ ],
4242
+ placeholder: "Selecione um Formato"
4243
+ }
4244
+ )), reshapeLayoutType === "Column" && /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "Colunas"), /* @__PURE__ */ React2.createElement(
4191
4245
  "input",
4192
4246
  {
4193
4247
  type: "number",
@@ -4197,16 +4251,21 @@ function XViewSidebar({
4197
4251
  onChange: (e) => setReshapeColumnCount(parseInt(e.target.value) || 4),
4198
4252
  className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-white hover:bg-slate-800/50 transition-all"
4199
4253
  }
4200
- )), reshapeLayoutType === "Star" && /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "N\xF3 Central"), /* @__PURE__ */ React2.createElement("div", { className: "relative group/select" }, /* @__PURE__ */ React2.createElement(
4201
- "select",
4254
+ )), reshapeLayoutType === "Star" && /* @__PURE__ */ React2.createElement("div", { className: "space-y-2.5" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[11px] uppercase text-slate-400 font-semibold tracking-wider ml-1 mb-1 block" }, "N\xF3 Central"), /* @__PURE__ */ React2.createElement(
4255
+ CustomSelect,
4202
4256
  {
4203
4257
  value: reshapeCenterNodeId,
4204
- onChange: (e) => setReshapeCenterNodeId(e.target.value),
4205
- className: "w-full bg-slate-900/80 px-3 py-2.5 text-sm rounded-md border border-white/10 focus:outline-none focus:border-indigo-500/50 text-slate-200 appearance-none cursor-pointer hover:bg-slate-800/50 transition-all"
4206
- },
4207
- /* @__PURE__ */ React2.createElement("option", { value: "" }, "Selecione um n\xF3..."),
4208
- (Array.isArray(dbNodes) ? dbNodes.filter((n) => isNodeInView(n.id)) : []).map((n) => /* @__PURE__ */ React2.createElement("option", { key: n.id, value: n.id }, n.name))
4209
- ), /* @__PURE__ */ React2.createElement("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-slate-500 group-hover/select:text-indigo-400 transition-colors" }, /* @__PURE__ */ React2.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React2.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))))), /* @__PURE__ */ React2.createElement("div", { className: "flex gap-3 pt-4" }, /* @__PURE__ */ React2.createElement(
4258
+ onChange: (val) => setReshapeCenterNodeId(val),
4259
+ options: [
4260
+ { value: "", label: "Selecione um n\xF3..." },
4261
+ ...(Array.isArray(dbNodes) ? dbNodes.filter((n) => isNodeInView(n.id)) : []).map((n) => ({
4262
+ value: n.id,
4263
+ label: n.name
4264
+ }))
4265
+ ],
4266
+ placeholder: "Selecione um n\xF3..."
4267
+ }
4268
+ )), /* @__PURE__ */ React2.createElement("div", { className: "flex gap-3 pt-4" }, /* @__PURE__ */ React2.createElement(
4210
4269
  "button",
4211
4270
  {
4212
4271
  onClick: () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lv-x-software-house/x_view",
3
- "version": "1.2.6-dev.52",
3
+ "version": "1.2.6-dev.53",
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",