@lv-x-software-house/x_view 1.2.7-dev.2 → 1.2.7-dev.4

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
@@ -3989,6 +3989,7 @@ function XViewSidebar({
3989
3989
  const [questFilterStatus, setQuestFilterStatus] = (0, import_react3.useState)("");
3990
3990
  const [questFilterMilestone, setQuestFilterMilestone] = (0, import_react3.useState)("");
3991
3991
  const [isQuestLensLoading, setIsQuestLensLoading] = (0, import_react3.useState)(false);
3992
+ const [isQuestLensMenuOpen, setIsQuestLensMenuOpen] = (0, import_react3.useState)(false);
3992
3993
  const [reshapeLayoutType, setReshapeLayoutType] = (0, import_react3.useState)("Star");
3993
3994
  const [reshapeColumnCount, setReshapeColumnCount] = (0, import_react3.useState)(4);
3994
3995
  const [reshapeCenterNodeId, setReshapeCenterNodeId] = (0, import_react3.useState)("");
@@ -4010,6 +4011,7 @@ function XViewSidebar({
4010
4011
  const filterMenuRef = (0, import_react3.useRef)(null);
4011
4012
  const typeDropdownRef = (0, import_react3.useRef)(null);
4012
4013
  const annexedPanelRef = (0, import_react3.useRef)(null);
4014
+ const questLensRef = (0, import_react3.useRef)(null);
4013
4015
  const ability = (0, import_react3.useMemo)(() => {
4014
4016
  return defineAbilityFor(userRole);
4015
4017
  }, [userRole]);
@@ -4126,6 +4128,18 @@ function XViewSidebar({
4126
4128
  }
4127
4129
  return () => document.removeEventListener("mousedown", handleClickOutside);
4128
4130
  }, [isFilterMenuOpen, isTypeDropdownOpen]);
4131
+ (0, import_react3.useEffect)(() => {
4132
+ const handleClickOutsideQuest = (event) => {
4133
+ if (questLensRef.current && !questLensRef.current.contains(event.target)) {
4134
+ if (event.target.tagName.toLowerCase() === "select" || event.target.tagName.toLowerCase() === "option") return;
4135
+ setIsQuestLensMenuOpen(false);
4136
+ }
4137
+ };
4138
+ if (isQuestLensMenuOpen) {
4139
+ document.addEventListener("mousedown", handleClickOutsideQuest);
4140
+ }
4141
+ return () => document.removeEventListener("mousedown", handleClickOutsideQuest);
4142
+ }, [isQuestLensMenuOpen]);
4129
4143
  (0, import_react3.useEffect)(() => {
4130
4144
  const handleClickOutsideAnnexed = (event) => {
4131
4145
  if (annexedPanelRef.current && !annexedPanelRef.current.contains(event.target)) {
@@ -4284,7 +4298,7 @@ function XViewSidebar({
4284
4298
  }
4285
4299
  )
4286
4300
  )
4287
- ), /* @__PURE__ */ import_react3.default.createElement("h3", { className: "text-sm font-semibold text-indigo-100 uppercase tracking-wider" }, activeSubMenu === "quest" ? "Quest Lens" : activeSubMenu === "reshape" ? "Reshape Lens" : "Integra\xE7\xF5es"), /* @__PURE__ */ import_react3.default.createElement(
4301
+ ), /* @__PURE__ */ import_react3.default.createElement("h3", { className: "text-sm font-semibold text-indigo-100 uppercase tracking-wider" }, activeSubMenu === "reshape" ? "Reshape Lens" : "Integra\xE7\xF5es"), /* @__PURE__ */ import_react3.default.createElement(
4288
4302
  "button",
4289
4303
  {
4290
4304
  className: "ml-auto p-1.5 rounded-md text-slate-400 hover:text-white hover:bg-white/10 transition-colors hidden md:block",
@@ -4666,30 +4680,72 @@ function XViewSidebar({
4666
4680
  className: "w-full py-1.5 bg-indigo-600 hover:bg-indigo-500 disabled:opacity-50 text-white text-xs font-medium rounded transition-colors"
4667
4681
  },
4668
4682
  "Aplicar Filtro"
4669
- ))))), /* @__PURE__ */ import_react3.default.createElement("div", { className: "h-px bg-white/10" }), /* @__PURE__ */ import_react3.default.createElement("section", { className: "space-y-2" }, /* @__PURE__ */ import_react3.default.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Lentes"), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react3.default.createElement(
4683
+ ))))), /* @__PURE__ */ import_react3.default.createElement("div", { className: "h-px bg-white/10" }), /* @__PURE__ */ import_react3.default.createElement("section", { className: "space-y-2" }, /* @__PURE__ */ import_react3.default.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Lentes"), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative", ref: questLensRef }, /* @__PURE__ */ import_react3.default.createElement(
4670
4684
  "button",
4671
4685
  {
4672
- onClick: () => setActiveSubMenu(activeSubMenu === "quest" ? null : "quest"),
4673
- className: `${buttonBaseClass} lens-button ${activeSubMenu === "quest" || questFilterAssignee || questFilterStatus || questFilterMilestone ? "bg-indigo-500/30 border-indigo-400" : ""}`
4686
+ onClick: () => setIsQuestLensMenuOpen(!isQuestLensMenuOpen),
4687
+ className: `${buttonBaseClass} ${isQuestLensMenuOpen || questFilterAssignee || questFilterStatus || questFilterMilestone ? "bg-indigo-500/30 border-indigo-400" : ""}`,
4688
+ title: "Abrir filtros da Lente de Quests"
4674
4689
  },
4675
- /* @__PURE__ */ import_react3.default.createElement(
4676
- "svg",
4677
- {
4678
- xmlns: "http://www.w3.org/2000/svg",
4679
- width: "16",
4680
- height: "16",
4681
- viewBox: "0 0 24 24",
4682
- fill: "none",
4683
- stroke: "currentColor",
4684
- strokeWidth: "2",
4685
- strokeLinecap: "round",
4686
- strokeLinejoin: "round"
4690
+ /* @__PURE__ */ import_react3.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_react3.default.createElement("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }), /* @__PURE__ */ import_react3.default.createElement("path", { d: "M9 12l2 2 4-4" })),
4691
+ "Quest Lens",
4692
+ (questFilterAssignee || questFilterStatus || questFilterMilestone) && /* @__PURE__ */ import_react3.default.createElement("span", { className: "ml-1 px-1.5 py-0.5 rounded-full bg-indigo-500 text-[9px] font-bold" }, "!")
4693
+ ), isQuestLensMenuOpen && /* @__PURE__ */ import_react3.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_react3.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-bold tracking-widest" }, "Respons\xE1vel"), /* @__PURE__ */ import_react3.default.createElement(
4694
+ "select",
4695
+ {
4696
+ value: questFilterAssignee,
4697
+ onChange: (e) => setQuestFilterAssignee(e.target.value),
4698
+ 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"
4699
+ },
4700
+ /* @__PURE__ */ import_react3.default.createElement("option", { value: "" }, "Todos os Respons\xE1veis"),
4701
+ viewMembers.map((m) => /* @__PURE__ */ import_react3.default.createElement("option", { key: m.id, value: m.id }, m.name || m.email))
4702
+ )), /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-bold tracking-widest" }, "Status"), /* @__PURE__ */ import_react3.default.createElement(
4703
+ "select",
4704
+ {
4705
+ value: questFilterStatus,
4706
+ onChange: (e) => setQuestFilterStatus(e.target.value),
4707
+ 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"
4708
+ },
4709
+ /* @__PURE__ */ import_react3.default.createElement("option", { value: "" }, "Todos (Exclui Done)"),
4710
+ /* @__PURE__ */ import_react3.default.createElement("option", { value: "Backlog" }, "Backlog"),
4711
+ /* @__PURE__ */ import_react3.default.createElement("option", { value: "In Progress" }, "In Progress"),
4712
+ /* @__PURE__ */ import_react3.default.createElement("option", { value: "Review" }, "Review"),
4713
+ /* @__PURE__ */ import_react3.default.createElement("option", { value: "Done" }, "Done")
4714
+ )), /* @__PURE__ */ import_react3.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react3.default.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-bold tracking-widest" }, "Milestone"), /* @__PURE__ */ import_react3.default.createElement(
4715
+ "select",
4716
+ {
4717
+ value: questFilterMilestone,
4718
+ onChange: (e) => setQuestFilterMilestone(e.target.value),
4719
+ 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"
4720
+ },
4721
+ /* @__PURE__ */ import_react3.default.createElement("option", { value: "" }, "Todos os Milestones"),
4722
+ (milestones || []).map((ms) => /* @__PURE__ */ import_react3.default.createElement("option", { key: ms.id, value: ms.id }, ms.name, " ", ms.status === "inactive" ? "(Inativo)" : ""))
4723
+ )), /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex gap-2 pt-1 border-t border-white/10 mt-2" }, /* @__PURE__ */ import_react3.default.createElement(
4724
+ "button",
4725
+ {
4726
+ onClick: () => {
4727
+ setQuestFilterAssignee("");
4728
+ setQuestFilterStatus("");
4729
+ setQuestFilterMilestone("");
4687
4730
  },
4688
- /* @__PURE__ */ import_react3.default.createElement("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }),
4689
- /* @__PURE__ */ import_react3.default.createElement("path", { d: "M9 12l2 2 4-4" })
4690
- ),
4691
- "Quests"
4692
- )), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react3.default.createElement(
4731
+ 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 mt-3"
4732
+ },
4733
+ "Limpar"
4734
+ ), /* @__PURE__ */ import_react3.default.createElement(
4735
+ "button",
4736
+ {
4737
+ onClick: () => {
4738
+ onActivateQuestLens({
4739
+ assigneeId: questFilterAssignee,
4740
+ status: questFilterStatus,
4741
+ milestoneId: questFilterMilestone
4742
+ });
4743
+ setIsQuestLensMenuOpen(false);
4744
+ },
4745
+ className: "flex-[2] py-2 bg-indigo-600 hover:bg-indigo-500 text-white text-[11px] font-bold rounded-lg shadow-lg shadow-indigo-500/20 transition-all hover:scale-[1.02] active:scale-95 mt-3"
4746
+ },
4747
+ "Aplicar Lente"
4748
+ )))), /* @__PURE__ */ import_react3.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react3.default.createElement(
4693
4749
  "button",
4694
4750
  {
4695
4751
  onClick: () => setActiveSubMenu(
@@ -15358,7 +15414,7 @@ function XViewScene({
15358
15414
  create_google_doc_action,
15359
15415
  open_google_picker_action
15360
15416
  }) {
15361
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
15417
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
15362
15418
  const { data: session, status } = (0, import_react34.useSession)();
15363
15419
  const router = (0, import_navigation.useRouter)();
15364
15420
  const searchParams = (0, import_navigation.useSearchParams)();
@@ -20391,10 +20447,10 @@ function XViewScene({
20391
20447
  onOpenBoards: handleOpenBoards,
20392
20448
  viewType: viewParams == null ? void 0 : viewParams.type,
20393
20449
  viewName: viewParams == null ? void 0 : viewParams.name,
20394
- milestones: (viewParams == null ? void 0 : viewParams.milestones) || [],
20450
+ milestones: ((_c = sceneDataRef.current) == null ? void 0 : _c.milestones) || (viewParams == null ? void 0 : viewParams.milestones) || [],
20395
20451
  onOpenMilestoneManager: () => setIsMilestoneManagerOpen(true),
20396
- view_google_folder_id: (_c = sceneDataRef.current) == null ? void 0 : _c.view_google_folder_id,
20397
- view_google_folder_name: (_d = sceneDataRef.current) == null ? void 0 : _d.view_google_folder_name,
20452
+ view_google_folder_id: (_d = sceneDataRef.current) == null ? void 0 : _d.view_google_folder_id,
20453
+ view_google_folder_name: (_e = sceneDataRef.current) == null ? void 0 : _e.view_google_folder_name,
20398
20454
  open_google_picker_action,
20399
20455
  onSaveConfig: handleSaveConfig,
20400
20456
  onNavigateBack: handleNavigateBack,
@@ -20426,8 +20482,8 @@ function XViewScene({
20426
20482
  },
20427
20483
  refEl: formRef,
20428
20484
  existingTypes: existingNodeTypes,
20429
- initialColor: (_e = creationMode.sourceNodeData) == null ? void 0 : _e.color,
20430
- sourceTypes: (_f = creationMode.sourceNodeData) == null ? void 0 : _f.type,
20485
+ initialColor: (_f = creationMode.sourceNodeData) == null ? void 0 : _f.color,
20486
+ sourceTypes: (_g = creationMode.sourceNodeData) == null ? void 0 : _g.type,
20431
20487
  onIntensityChange: handleGhostNodeIntensityChange,
20432
20488
  onUploadFile: upload_file_action,
20433
20489
  availableDatasets,
@@ -20436,7 +20492,7 @@ function XViewScene({
20436
20492
  availableNodes: allAvailableNodes,
20437
20493
  availableAncestries: allAvailableAncestries,
20438
20494
  create_google_doc_action,
20439
- view_google_folder_id: (_g = sceneDataRef.current) == null ? void 0 : _g.view_google_folder_id
20495
+ view_google_folder_id: (_h = sceneDataRef.current) == null ? void 0 : _h.view_google_folder_id
20440
20496
  }
20441
20497
  ),
20442
20498
  versionMode.isActive && /* @__PURE__ */ import_react33.default.createElement(
@@ -20459,8 +20515,8 @@ function XViewScene({
20459
20515
  ...overlayHiddenStyle
20460
20516
  },
20461
20517
  refEl: formRef,
20462
- fixedType: (_h = versionMode.sourceNodeData) == null ? void 0 : _h.type,
20463
- fixedColor: (_i = versionMode.sourceNodeData) == null ? void 0 : _i.color,
20518
+ fixedType: (_i = versionMode.sourceNodeData) == null ? void 0 : _i.type,
20519
+ fixedColor: (_j = versionMode.sourceNodeData) == null ? void 0 : _j.color,
20464
20520
  onUploadFile: upload_file_action,
20465
20521
  availableNodes: allAvailableNodes,
20466
20522
  availableAncestries: allAvailableAncestries
@@ -20498,12 +20554,12 @@ function XViewScene({
20498
20554
  availableNodes: allAvailableNodes,
20499
20555
  availableAncestries: allAvailableAncestries,
20500
20556
  viewName: viewParams == null ? void 0 : viewParams.name,
20501
- questCounter: ((_j = sceneDataRef.current) == null ? void 0 : _j.quest_counter) || 1,
20557
+ questCounter: ((_k = sceneDataRef.current) == null ? void 0 : _k.quest_counter) || 1,
20502
20558
  viewMembers,
20503
- milestones: ((_k = sceneDataRef.current) == null ? void 0 : _k.milestones) || [],
20559
+ milestones: ((_l = sceneDataRef.current) == null ? void 0 : _l.milestones) || [],
20504
20560
  onUpdateMilestones: handleUpdateMilestones,
20505
20561
  create_google_doc_action,
20506
- view_google_folder_id: (_l = sceneDataRef.current) == null ? void 0 : _l.view_google_folder_id
20562
+ view_google_folder_id: (_m = sceneDataRef.current) == null ? void 0 : _m.view_google_folder_id
20507
20563
  }
20508
20564
  ),
20509
20565
  readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ import_react33.default.createElement(
@@ -20637,10 +20693,10 @@ function XViewScene({
20637
20693
  currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName,
20638
20694
  viewMembers,
20639
20695
  currentUser: session == null ? void 0 : session.user,
20640
- milestones: ((_m = sceneDataRef.current) == null ? void 0 : _m.milestones) || [],
20696
+ milestones: ((_n = sceneDataRef.current) == null ? void 0 : _n.milestones) || [],
20641
20697
  onUpdateMilestones: handleUpdateMilestones,
20642
20698
  create_google_doc_action,
20643
- view_google_folder_id: (_n = sceneDataRef.current) == null ? void 0 : _n.view_google_folder_id,
20699
+ view_google_folder_id: (_o = sceneDataRef.current) == null ? void 0 : _o.view_google_folder_id,
20644
20700
  setQuestTreeMode,
20645
20701
  handleRenderQuestTree,
20646
20702
  handleRenderQuestAbstractionTree,
@@ -20678,7 +20734,7 @@ function XViewScene({
20678
20734
  userRole: userPermissionRole,
20679
20735
  currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName,
20680
20736
  create_google_doc_action,
20681
- view_google_folder_id: (_o = sceneDataRef.current) == null ? void 0 : _o.view_google_folder_id,
20737
+ view_google_folder_id: (_p = sceneDataRef.current) == null ? void 0 : _p.view_google_folder_id,
20682
20738
  style: overlayHiddenStyle
20683
20739
  }
20684
20740
  ),
@@ -20831,7 +20887,7 @@ function XViewScene({
20831
20887
  {
20832
20888
  isOpen: isMilestoneManagerOpen,
20833
20889
  onClose: () => setIsMilestoneManagerOpen(false),
20834
- milestones: ((_p = sceneDataRef.current) == null ? void 0 : _p.milestones) || [],
20890
+ milestones: ((_q = sceneDataRef.current) == null ? void 0 : _q.milestones) || [],
20835
20891
  onUpdateMilestones: handleUpdateMilestones
20836
20892
  }
20837
20893
  ),
@@ -20842,7 +20898,7 @@ function XViewScene({
20842
20898
  onClose: () => setIsImportModalOpen(false),
20843
20899
  onConfirm: handleConfirmImport,
20844
20900
  session,
20845
- parentDbs: ((_q = sceneDataRef.current) == null ? void 0 : _q.parent_dbs) || [],
20901
+ parentDbs: ((_r = sceneDataRef.current) == null ? void 0 : _r.parent_dbs) || [],
20846
20902
  onFetchAvailableFiles: import_parent_file_modal_get,
20847
20903
  currentViewName: viewParams == null ? void 0 : viewParams.name,
20848
20904
  currentAncestries: ancestryDataRef.current || []
package/dist/index.mjs CHANGED
@@ -3950,6 +3950,7 @@ function XViewSidebar({
3950
3950
  const [questFilterStatus, setQuestFilterStatus] = useState3("");
3951
3951
  const [questFilterMilestone, setQuestFilterMilestone] = useState3("");
3952
3952
  const [isQuestLensLoading, setIsQuestLensLoading] = useState3(false);
3953
+ const [isQuestLensMenuOpen, setIsQuestLensMenuOpen] = useState3(false);
3953
3954
  const [reshapeLayoutType, setReshapeLayoutType] = useState3("Star");
3954
3955
  const [reshapeColumnCount, setReshapeColumnCount] = useState3(4);
3955
3956
  const [reshapeCenterNodeId, setReshapeCenterNodeId] = useState3("");
@@ -3971,6 +3972,7 @@ function XViewSidebar({
3971
3972
  const filterMenuRef = useRef2(null);
3972
3973
  const typeDropdownRef = useRef2(null);
3973
3974
  const annexedPanelRef = useRef2(null);
3975
+ const questLensRef = useRef2(null);
3974
3976
  const ability = useMemo2(() => {
3975
3977
  return defineAbilityFor(userRole);
3976
3978
  }, [userRole]);
@@ -4087,6 +4089,18 @@ function XViewSidebar({
4087
4089
  }
4088
4090
  return () => document.removeEventListener("mousedown", handleClickOutside);
4089
4091
  }, [isFilterMenuOpen, isTypeDropdownOpen]);
4092
+ useEffect2(() => {
4093
+ const handleClickOutsideQuest = (event) => {
4094
+ if (questLensRef.current && !questLensRef.current.contains(event.target)) {
4095
+ if (event.target.tagName.toLowerCase() === "select" || event.target.tagName.toLowerCase() === "option") return;
4096
+ setIsQuestLensMenuOpen(false);
4097
+ }
4098
+ };
4099
+ if (isQuestLensMenuOpen) {
4100
+ document.addEventListener("mousedown", handleClickOutsideQuest);
4101
+ }
4102
+ return () => document.removeEventListener("mousedown", handleClickOutsideQuest);
4103
+ }, [isQuestLensMenuOpen]);
4090
4104
  useEffect2(() => {
4091
4105
  const handleClickOutsideAnnexed = (event) => {
4092
4106
  if (annexedPanelRef.current && !annexedPanelRef.current.contains(event.target)) {
@@ -4245,7 +4259,7 @@ function XViewSidebar({
4245
4259
  }
4246
4260
  )
4247
4261
  )
4248
- ), /* @__PURE__ */ React2.createElement("h3", { className: "text-sm font-semibold text-indigo-100 uppercase tracking-wider" }, activeSubMenu === "quest" ? "Quest Lens" : activeSubMenu === "reshape" ? "Reshape Lens" : "Integra\xE7\xF5es"), /* @__PURE__ */ React2.createElement(
4262
+ ), /* @__PURE__ */ React2.createElement("h3", { className: "text-sm font-semibold text-indigo-100 uppercase tracking-wider" }, activeSubMenu === "reshape" ? "Reshape Lens" : "Integra\xE7\xF5es"), /* @__PURE__ */ React2.createElement(
4249
4263
  "button",
4250
4264
  {
4251
4265
  className: "ml-auto p-1.5 rounded-md text-slate-400 hover:text-white hover:bg-white/10 transition-colors hidden md:block",
@@ -4627,30 +4641,72 @@ function XViewSidebar({
4627
4641
  className: "w-full py-1.5 bg-indigo-600 hover:bg-indigo-500 disabled:opacity-50 text-white text-xs font-medium rounded transition-colors"
4628
4642
  },
4629
4643
  "Aplicar Filtro"
4630
- ))))), /* @__PURE__ */ React2.createElement("div", { className: "h-px bg-white/10" }), /* @__PURE__ */ React2.createElement("section", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Lentes"), /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
4644
+ ))))), /* @__PURE__ */ React2.createElement("div", { className: "h-px bg-white/10" }), /* @__PURE__ */ React2.createElement("section", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Lentes"), /* @__PURE__ */ React2.createElement("div", { className: "relative", ref: questLensRef }, /* @__PURE__ */ React2.createElement(
4631
4645
  "button",
4632
4646
  {
4633
- onClick: () => setActiveSubMenu(activeSubMenu === "quest" ? null : "quest"),
4634
- className: `${buttonBaseClass} lens-button ${activeSubMenu === "quest" || questFilterAssignee || questFilterStatus || questFilterMilestone ? "bg-indigo-500/30 border-indigo-400" : ""}`
4647
+ onClick: () => setIsQuestLensMenuOpen(!isQuestLensMenuOpen),
4648
+ className: `${buttonBaseClass} ${isQuestLensMenuOpen || questFilterAssignee || questFilterStatus || questFilterMilestone ? "bg-indigo-500/30 border-indigo-400" : ""}`,
4649
+ title: "Abrir filtros da Lente de Quests"
4635
4650
  },
4636
- /* @__PURE__ */ React2.createElement(
4637
- "svg",
4638
- {
4639
- xmlns: "http://www.w3.org/2000/svg",
4640
- width: "16",
4641
- height: "16",
4642
- viewBox: "0 0 24 24",
4643
- fill: "none",
4644
- stroke: "currentColor",
4645
- strokeWidth: "2",
4646
- strokeLinecap: "round",
4647
- strokeLinejoin: "round"
4651
+ /* @__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" })),
4652
+ "Quest Lens",
4653
+ (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" }, "!")
4654
+ ), 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(
4655
+ "select",
4656
+ {
4657
+ value: questFilterAssignee,
4658
+ onChange: (e) => setQuestFilterAssignee(e.target.value),
4659
+ 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"
4660
+ },
4661
+ /* @__PURE__ */ React2.createElement("option", { value: "" }, "Todos os Respons\xE1veis"),
4662
+ viewMembers.map((m) => /* @__PURE__ */ React2.createElement("option", { key: m.id, value: m.id }, m.name || m.email))
4663
+ )), /* @__PURE__ */ React2.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React2.createElement("label", { className: "text-[10px] uppercase text-slate-400 font-bold tracking-widest" }, "Status"), /* @__PURE__ */ React2.createElement(
4664
+ "select",
4665
+ {
4666
+ value: questFilterStatus,
4667
+ onChange: (e) => setQuestFilterStatus(e.target.value),
4668
+ 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"
4669
+ },
4670
+ /* @__PURE__ */ React2.createElement("option", { value: "" }, "Todos (Exclui Done)"),
4671
+ /* @__PURE__ */ React2.createElement("option", { value: "Backlog" }, "Backlog"),
4672
+ /* @__PURE__ */ React2.createElement("option", { value: "In Progress" }, "In Progress"),
4673
+ /* @__PURE__ */ React2.createElement("option", { value: "Review" }, "Review"),
4674
+ /* @__PURE__ */ React2.createElement("option", { value: "Done" }, "Done")
4675
+ )), /* @__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(
4676
+ "select",
4677
+ {
4678
+ value: questFilterMilestone,
4679
+ onChange: (e) => setQuestFilterMilestone(e.target.value),
4680
+ 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"
4681
+ },
4682
+ /* @__PURE__ */ React2.createElement("option", { value: "" }, "Todos os Milestones"),
4683
+ (milestones || []).map((ms) => /* @__PURE__ */ React2.createElement("option", { key: ms.id, value: ms.id }, ms.name, " ", ms.status === "inactive" ? "(Inativo)" : ""))
4684
+ )), /* @__PURE__ */ React2.createElement("div", { className: "flex gap-2 pt-1 border-t border-white/10 mt-2" }, /* @__PURE__ */ React2.createElement(
4685
+ "button",
4686
+ {
4687
+ onClick: () => {
4688
+ setQuestFilterAssignee("");
4689
+ setQuestFilterStatus("");
4690
+ setQuestFilterMilestone("");
4648
4691
  },
4649
- /* @__PURE__ */ React2.createElement("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }),
4650
- /* @__PURE__ */ React2.createElement("path", { d: "M9 12l2 2 4-4" })
4651
- ),
4652
- "Quests"
4653
- )), /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
4692
+ 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 mt-3"
4693
+ },
4694
+ "Limpar"
4695
+ ), /* @__PURE__ */ React2.createElement(
4696
+ "button",
4697
+ {
4698
+ onClick: () => {
4699
+ onActivateQuestLens({
4700
+ assigneeId: questFilterAssignee,
4701
+ status: questFilterStatus,
4702
+ milestoneId: questFilterMilestone
4703
+ });
4704
+ setIsQuestLensMenuOpen(false);
4705
+ },
4706
+ className: "flex-[2] py-2 bg-indigo-600 hover:bg-indigo-500 text-white text-[11px] font-bold rounded-lg shadow-lg shadow-indigo-500/20 transition-all hover:scale-[1.02] active:scale-95 mt-3"
4707
+ },
4708
+ "Aplicar Lente"
4709
+ )))), /* @__PURE__ */ React2.createElement("div", { className: "relative" }, /* @__PURE__ */ React2.createElement(
4654
4710
  "button",
4655
4711
  {
4656
4712
  onClick: () => setActiveSubMenu(
@@ -15421,7 +15477,7 @@ function XViewScene({
15421
15477
  create_google_doc_action,
15422
15478
  open_google_picker_action
15423
15479
  }) {
15424
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
15480
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
15425
15481
  const { data: session, status } = useSession();
15426
15482
  const router = useRouter();
15427
15483
  const searchParams = useSearchParams();
@@ -20454,10 +20510,10 @@ function XViewScene({
20454
20510
  onOpenBoards: handleOpenBoards,
20455
20511
  viewType: viewParams == null ? void 0 : viewParams.type,
20456
20512
  viewName: viewParams == null ? void 0 : viewParams.name,
20457
- milestones: (viewParams == null ? void 0 : viewParams.milestones) || [],
20513
+ milestones: ((_c = sceneDataRef.current) == null ? void 0 : _c.milestones) || (viewParams == null ? void 0 : viewParams.milestones) || [],
20458
20514
  onOpenMilestoneManager: () => setIsMilestoneManagerOpen(true),
20459
- view_google_folder_id: (_c = sceneDataRef.current) == null ? void 0 : _c.view_google_folder_id,
20460
- view_google_folder_name: (_d = sceneDataRef.current) == null ? void 0 : _d.view_google_folder_name,
20515
+ view_google_folder_id: (_d = sceneDataRef.current) == null ? void 0 : _d.view_google_folder_id,
20516
+ view_google_folder_name: (_e = sceneDataRef.current) == null ? void 0 : _e.view_google_folder_name,
20461
20517
  open_google_picker_action,
20462
20518
  onSaveConfig: handleSaveConfig,
20463
20519
  onNavigateBack: handleNavigateBack,
@@ -20489,8 +20545,8 @@ function XViewScene({
20489
20545
  },
20490
20546
  refEl: formRef,
20491
20547
  existingTypes: existingNodeTypes,
20492
- initialColor: (_e = creationMode.sourceNodeData) == null ? void 0 : _e.color,
20493
- sourceTypes: (_f = creationMode.sourceNodeData) == null ? void 0 : _f.type,
20548
+ initialColor: (_f = creationMode.sourceNodeData) == null ? void 0 : _f.color,
20549
+ sourceTypes: (_g = creationMode.sourceNodeData) == null ? void 0 : _g.type,
20494
20550
  onIntensityChange: handleGhostNodeIntensityChange,
20495
20551
  onUploadFile: upload_file_action,
20496
20552
  availableDatasets,
@@ -20499,7 +20555,7 @@ function XViewScene({
20499
20555
  availableNodes: allAvailableNodes,
20500
20556
  availableAncestries: allAvailableAncestries,
20501
20557
  create_google_doc_action,
20502
- view_google_folder_id: (_g = sceneDataRef.current) == null ? void 0 : _g.view_google_folder_id
20558
+ view_google_folder_id: (_h = sceneDataRef.current) == null ? void 0 : _h.view_google_folder_id
20503
20559
  }
20504
20560
  ),
20505
20561
  versionMode.isActive && /* @__PURE__ */ React32.createElement(
@@ -20522,8 +20578,8 @@ function XViewScene({
20522
20578
  ...overlayHiddenStyle
20523
20579
  },
20524
20580
  refEl: formRef,
20525
- fixedType: (_h = versionMode.sourceNodeData) == null ? void 0 : _h.type,
20526
- fixedColor: (_i = versionMode.sourceNodeData) == null ? void 0 : _i.color,
20581
+ fixedType: (_i = versionMode.sourceNodeData) == null ? void 0 : _i.type,
20582
+ fixedColor: (_j = versionMode.sourceNodeData) == null ? void 0 : _j.color,
20527
20583
  onUploadFile: upload_file_action,
20528
20584
  availableNodes: allAvailableNodes,
20529
20585
  availableAncestries: allAvailableAncestries
@@ -20561,12 +20617,12 @@ function XViewScene({
20561
20617
  availableNodes: allAvailableNodes,
20562
20618
  availableAncestries: allAvailableAncestries,
20563
20619
  viewName: viewParams == null ? void 0 : viewParams.name,
20564
- questCounter: ((_j = sceneDataRef.current) == null ? void 0 : _j.quest_counter) || 1,
20620
+ questCounter: ((_k = sceneDataRef.current) == null ? void 0 : _k.quest_counter) || 1,
20565
20621
  viewMembers,
20566
- milestones: ((_k = sceneDataRef.current) == null ? void 0 : _k.milestones) || [],
20622
+ milestones: ((_l = sceneDataRef.current) == null ? void 0 : _l.milestones) || [],
20567
20623
  onUpdateMilestones: handleUpdateMilestones,
20568
20624
  create_google_doc_action,
20569
- view_google_folder_id: (_l = sceneDataRef.current) == null ? void 0 : _l.view_google_folder_id
20625
+ view_google_folder_id: (_m = sceneDataRef.current) == null ? void 0 : _m.view_google_folder_id
20570
20626
  }
20571
20627
  ),
20572
20628
  readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React32.createElement(
@@ -20700,10 +20756,10 @@ function XViewScene({
20700
20756
  currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName,
20701
20757
  viewMembers,
20702
20758
  currentUser: session == null ? void 0 : session.user,
20703
- milestones: ((_m = sceneDataRef.current) == null ? void 0 : _m.milestones) || [],
20759
+ milestones: ((_n = sceneDataRef.current) == null ? void 0 : _n.milestones) || [],
20704
20760
  onUpdateMilestones: handleUpdateMilestones,
20705
20761
  create_google_doc_action,
20706
- view_google_folder_id: (_n = sceneDataRef.current) == null ? void 0 : _n.view_google_folder_id,
20762
+ view_google_folder_id: (_o = sceneDataRef.current) == null ? void 0 : _o.view_google_folder_id,
20707
20763
  setQuestTreeMode,
20708
20764
  handleRenderQuestTree,
20709
20765
  handleRenderQuestAbstractionTree,
@@ -20741,7 +20797,7 @@ function XViewScene({
20741
20797
  userRole: userPermissionRole,
20742
20798
  currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName,
20743
20799
  create_google_doc_action,
20744
- view_google_folder_id: (_o = sceneDataRef.current) == null ? void 0 : _o.view_google_folder_id,
20800
+ view_google_folder_id: (_p = sceneDataRef.current) == null ? void 0 : _p.view_google_folder_id,
20745
20801
  style: overlayHiddenStyle
20746
20802
  }
20747
20803
  ),
@@ -20894,7 +20950,7 @@ function XViewScene({
20894
20950
  {
20895
20951
  isOpen: isMilestoneManagerOpen,
20896
20952
  onClose: () => setIsMilestoneManagerOpen(false),
20897
- milestones: ((_p = sceneDataRef.current) == null ? void 0 : _p.milestones) || [],
20953
+ milestones: ((_q = sceneDataRef.current) == null ? void 0 : _q.milestones) || [],
20898
20954
  onUpdateMilestones: handleUpdateMilestones
20899
20955
  }
20900
20956
  ),
@@ -20905,7 +20961,7 @@ function XViewScene({
20905
20961
  onClose: () => setIsImportModalOpen(false),
20906
20962
  onConfirm: handleConfirmImport,
20907
20963
  session,
20908
- parentDbs: ((_q = sceneDataRef.current) == null ? void 0 : _q.parent_dbs) || [],
20964
+ parentDbs: ((_r = sceneDataRef.current) == null ? void 0 : _r.parent_dbs) || [],
20909
20965
  onFetchAvailableFiles: import_parent_file_modal_get,
20910
20966
  currentViewName: viewParams == null ? void 0 : viewParams.name,
20911
20967
  currentAncestries: ancestryDataRef.current || []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lv-x-software-house/x_view",
3
- "version": "1.2.7-dev.2",
3
+ "version": "1.2.7-dev.4",
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",