@datatechsolutions/ui 2.11.62 → 2.11.63

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.
@@ -16454,11 +16454,14 @@ function DepartmentWorkflowDemo({
16454
16454
  workflow,
16455
16455
  stepDurationMs = 1100,
16456
16456
  autoPlay = false,
16457
- className
16457
+ className,
16458
+ hideHeader = false,
16459
+ onComplete
16458
16460
  }) {
16459
16461
  const { graph, steps, title, description, accentBadge = "bg-indigo-500/15 text-indigo-300", completionSummary } = workflow;
16460
16462
  const [stepIndex, setStepIndex] = React12.useState(-1);
16461
16463
  const intervalRef = React12.useRef(null);
16464
+ const completedRef = React12.useRef(false);
16462
16465
  const total = steps.length;
16463
16466
  const isIdle = stepIndex === -1;
16464
16467
  const isRunning = stepIndex >= 0 && stepIndex < total - 1;
@@ -16485,6 +16488,7 @@ function DepartmentWorkflowDemo({
16485
16488
  );
16486
16489
  const handleRun = React12.useCallback(() => {
16487
16490
  if (intervalRef.current) clearInterval(intervalRef.current);
16491
+ completedRef.current = false;
16488
16492
  setStepIndex(0);
16489
16493
  let index = 0;
16490
16494
  intervalRef.current = setInterval(() => {
@@ -16492,11 +16496,15 @@ function DepartmentWorkflowDemo({
16492
16496
  if (index >= total) {
16493
16497
  if (intervalRef.current) clearInterval(intervalRef.current);
16494
16498
  setStepIndex(total - 1);
16499
+ if (!completedRef.current) {
16500
+ completedRef.current = true;
16501
+ onComplete?.();
16502
+ }
16495
16503
  } else {
16496
16504
  setStepIndex(index);
16497
16505
  }
16498
16506
  }, stepDurationMs);
16499
- }, [stepDurationMs, total]);
16507
+ }, [stepDurationMs, total, onComplete]);
16500
16508
  const handleStop = React12.useCallback(() => {
16501
16509
  if (intervalRef.current) clearInterval(intervalRef.current);
16502
16510
  setStepIndex(-1);
@@ -16519,7 +16527,7 @@ function DepartmentWorkflowDemo({
16519
16527
  }, [graph.nodes]);
16520
16528
  const currentStepLabel = stepIndex >= 0 ? steps[stepIndex]?.label : "Ready to run";
16521
16529
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `liquid-surface rounded-2xl overflow-hidden ${className ?? ""}`, children: [
16522
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-white/5 px-5 py-4 flex items-start gap-4", children: [
16530
+ !hideHeader && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-white/5 px-5 py-4 flex items-start gap-4", children: [
16523
16531
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
16524
16532
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider ${accentBadge}`, children: [
16525
16533
  /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.BoltIcon, { className: "h-3 w-3" }),
@@ -16926,6 +16934,270 @@ var lgpdWorkflow = {
16926
16934
  step("Filing compliance report\u2026", "report")
16927
16935
  ]
16928
16936
  };
16937
+ function DepartmentAssistantDemo({
16938
+ flows,
16939
+ initialIndex = 0,
16940
+ autoRotate = true,
16941
+ dashboardHoldMs = 1e4,
16942
+ typingSpeedMs = 32,
16943
+ workflowStepMs = 1050,
16944
+ className
16945
+ }) {
16946
+ const [flowIndex, setFlowIndex] = React12.useState(initialIndex);
16947
+ const [stage, setStage] = React12.useState("input");
16948
+ const [typed, setTyped] = React12.useState("");
16949
+ const rotateTimerRef = React12.useRef(null);
16950
+ const flow = flows[flowIndex];
16951
+ React12.useEffect(() => {
16952
+ if (stage !== "input") return void 0;
16953
+ setTyped("");
16954
+ let i = 0;
16955
+ const interval = setInterval(() => {
16956
+ i += 1;
16957
+ if (i <= flow.prompt.length) {
16958
+ setTyped(flow.prompt.slice(0, i));
16959
+ } else {
16960
+ clearInterval(interval);
16961
+ const t = setTimeout(() => setStage("workflow"), 700);
16962
+ return () => clearTimeout(t);
16963
+ }
16964
+ return void 0;
16965
+ }, typingSpeedMs);
16966
+ return () => clearInterval(interval);
16967
+ }, [stage, flow.prompt, typingSpeedMs]);
16968
+ const handleWorkflowComplete = React12.useCallback(() => {
16969
+ const t = setTimeout(() => setStage("dashboard"), 1200);
16970
+ rotateTimerRef.current = t;
16971
+ }, []);
16972
+ React12.useEffect(() => {
16973
+ if (stage !== "dashboard") return void 0;
16974
+ if (!autoRotate) return void 0;
16975
+ const t = setTimeout(() => {
16976
+ setFlowIndex((prev) => (prev + 1) % flows.length);
16977
+ setStage("input");
16978
+ }, dashboardHoldMs);
16979
+ return () => clearTimeout(t);
16980
+ }, [stage, autoRotate, dashboardHoldMs, flows.length]);
16981
+ const handleDepartmentSelect = React12.useCallback((next) => {
16982
+ if (rotateTimerRef.current) clearTimeout(rotateTimerRef.current);
16983
+ setFlowIndex(next);
16984
+ setStage("input");
16985
+ }, []);
16986
+ const stageIndex = React12.useMemo(() => stage === "input" ? 0 : stage === "workflow" ? 1 : 2, [stage]);
16987
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `liquid-surface rounded-3xl overflow-hidden ${className ?? ""}`, children: [
16988
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-white/5 px-4 py-3 flex flex-wrap items-center gap-2", children: [
16989
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 pr-3", children: [
16990
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-purple-600", children: /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.CpuChipIcon, { className: "h-4 w-4 text-white" }) }),
16991
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-gray-900 dark:text-white", children: "Kori AI Assistant" })
16992
+ ] }),
16993
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
16994
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-1.5", children: flows.map((entry, index) => {
16995
+ const isActive = index === flowIndex;
16996
+ return /* @__PURE__ */ jsxRuntime.jsxs(
16997
+ "button",
16998
+ {
16999
+ type: "button",
17000
+ onClick: () => handleDepartmentSelect(index),
17001
+ className: `group inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-[11px] font-semibold transition-all ${isActive ? `bg-gradient-to-r ${entry.accent} text-white shadow-lg shadow-indigo-500/20 scale-105` : "text-gray-600 dark:text-gray-400 hover:bg-white/5 hover:text-gray-900 dark:hover:text-white"}`,
17002
+ children: [
17003
+ /* @__PURE__ */ jsxRuntime.jsx(entry.icon, { className: "h-3.5 w-3.5" }),
17004
+ entry.name
17005
+ ]
17006
+ },
17007
+ entry.id
17008
+ );
17009
+ }) })
17010
+ ] }),
17011
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-white/5 px-6 py-3 flex items-center gap-3 text-[11px]", children: [
17012
+ /* @__PURE__ */ jsxRuntime.jsx(StageChip, { label: "Ask", stageIndex, mine: 0 }),
17013
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px flex-1 bg-gradient-to-r from-white/10 to-white/5" }),
17014
+ /* @__PURE__ */ jsxRuntime.jsx(StageChip, { label: "Orchestrate", stageIndex, mine: 1 }),
17015
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px flex-1 bg-gradient-to-r from-white/5 to-white/10" }),
17016
+ /* @__PURE__ */ jsxRuntime.jsx(StageChip, { label: "Deliver", stageIndex, mine: 2 })
17017
+ ] }),
17018
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", style: { minHeight: 600 }, children: /* @__PURE__ */ jsxRuntime.jsxs(framerMotion.AnimatePresence, { mode: "wait", children: [
17019
+ stage === "input" && /* @__PURE__ */ jsxRuntime.jsx(
17020
+ framerMotion.motion.div,
17021
+ {
17022
+ initial: { opacity: 0, y: 12 },
17023
+ animate: { opacity: 1, y: 0 },
17024
+ exit: { opacity: 0, y: -12 },
17025
+ transition: { duration: 0.45 },
17026
+ className: "flex items-center justify-center p-10",
17027
+ children: /* @__PURE__ */ jsxRuntime.jsx(InputStage3, { prompt: typed, department: flow.name, agents: flow.agents })
17028
+ },
17029
+ `input-${flow.id}`
17030
+ ),
17031
+ stage === "workflow" && /* @__PURE__ */ jsxRuntime.jsx(
17032
+ framerMotion.motion.div,
17033
+ {
17034
+ initial: { opacity: 0, scale: 0.98 },
17035
+ animate: { opacity: 1, scale: 1 },
17036
+ exit: { opacity: 0, scale: 0.98 },
17037
+ transition: { duration: 0.45 },
17038
+ className: "p-6",
17039
+ children: /* @__PURE__ */ jsxRuntime.jsx(
17040
+ DepartmentWorkflowDemo,
17041
+ {
17042
+ workflow: flow.workflow,
17043
+ autoPlay: true,
17044
+ hideHeader: true,
17045
+ stepDurationMs: workflowStepMs,
17046
+ onComplete: handleWorkflowComplete
17047
+ },
17048
+ `wf-${flow.id}`
17049
+ )
17050
+ },
17051
+ `workflow-${flow.id}`
17052
+ ),
17053
+ stage === "dashboard" && /* @__PURE__ */ jsxRuntime.jsx(
17054
+ framerMotion.motion.div,
17055
+ {
17056
+ initial: { opacity: 0, y: 12 },
17057
+ animate: { opacity: 1, y: 0 },
17058
+ exit: { opacity: 0, y: -12 },
17059
+ transition: { duration: 0.45 },
17060
+ className: "p-4",
17061
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-2xl border border-white/10 bg-white dark:bg-zinc-950 shadow-2xl overflow-hidden", style: { height: 580 }, children: flow.dashboard })
17062
+ },
17063
+ `dashboard-${flow.id}`
17064
+ )
17065
+ ] }) }),
17066
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-t border-white/5 px-5 py-3", children: [
17067
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-[11px] text-gray-500 dark:text-gray-400", children: [
17068
+ /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.BoltIcon, { className: "h-3.5 w-3.5 text-indigo-500" }),
17069
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium", children: [
17070
+ stage === "input" && "Usu\xE1rio envia um pedido ao assistente\u2026",
17071
+ stage === "workflow" && "Astrlabe orquestrando agentes e datasources\u2026",
17072
+ stage === "dashboard" && "Pronto \u2014 dashboard do ERP atualizado."
17073
+ ] })
17074
+ ] }),
17075
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: flows.map((entry, index) => /* @__PURE__ */ jsxRuntime.jsx(
17076
+ "span",
17077
+ {
17078
+ className: `h-1 rounded-full transition-all duration-500 ${index === flowIndex ? "w-8 bg-indigo-500" : "w-1.5 bg-gray-300 dark:bg-white/10"}`
17079
+ },
17080
+ entry.id
17081
+ )) })
17082
+ ] })
17083
+ ] });
17084
+ }
17085
+ function StageChip({ label, stageIndex, mine }) {
17086
+ const isActive = stageIndex === mine;
17087
+ const isDone = stageIndex > mine;
17088
+ return /* @__PURE__ */ jsxRuntime.jsxs(
17089
+ "div",
17090
+ {
17091
+ className: `inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 font-semibold transition-colors ${isActive ? "bg-indigo-500/15 text-indigo-600 dark:text-indigo-300" : isDone ? "bg-emerald-500/10 text-emerald-600 dark:text-emerald-300" : "bg-white/5 text-gray-500 dark:text-gray-500"}`,
17092
+ children: [
17093
+ isDone ? /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.CheckCircleIcon, { className: "h-3.5 w-3.5" }) : isActive ? /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.BoltIcon, { className: "h-3.5 w-3.5 animate-pulse" }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-current" }),
17094
+ label
17095
+ ]
17096
+ }
17097
+ );
17098
+ }
17099
+ function InputStage3({ prompt, department, agents }) {
17100
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full max-w-2xl", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-2xl border border-white/10 bg-white/70 dark:bg-zinc-900/70 p-8 shadow-2xl backdrop-blur-sm", children: [
17101
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-6 flex items-center gap-3", children: [
17102
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-12 w-12 rounded-xl bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.SparklesIcon, { className: "h-6 w-6 text-white" }) }),
17103
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
17104
+ /* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-base font-bold text-gray-900 dark:text-white", children: [
17105
+ "Assistente \u2014 ",
17106
+ department
17107
+ ] }),
17108
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: "Digite um pedido e veja os agentes atuarem." })
17109
+ ] })
17110
+ ] }),
17111
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-xl border-2 border-indigo-300/40 bg-indigo-50/50 dark:border-indigo-400/30 dark:bg-indigo-500/5 p-4 min-h-[120px]", children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-base font-medium text-gray-900 dark:text-white", children: [
17112
+ prompt,
17113
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 inline-block w-0.5 h-5 bg-indigo-500 animate-pulse" })
17114
+ ] }) }),
17115
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400", children: [
17116
+ /* @__PURE__ */ jsxRuntime.jsx(HeroIcons.BoltIcon, { className: "h-3.5 w-3.5 text-indigo-500" }),
17117
+ "Agentes prontos:",
17118
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: agents.map((agent) => /* @__PURE__ */ jsxRuntime.jsx(
17119
+ "span",
17120
+ {
17121
+ className: "inline-flex items-center rounded-full border border-indigo-200 bg-indigo-50 px-2 py-0.5 text-[10px] font-semibold text-indigo-700 dark:border-indigo-500/30 dark:bg-indigo-500/10 dark:text-indigo-300",
17122
+ children: agent
17123
+ },
17124
+ agent
17125
+ )) })
17126
+ ] })
17127
+ ] }) });
17128
+ }
17129
+ var koriDepartmentFlows = [
17130
+ {
17131
+ id: "sales",
17132
+ name: "Vendas",
17133
+ icon: HeroIcons.ShoppingCartIcon,
17134
+ accent: "from-blue-500 to-indigo-500",
17135
+ prompt: "Qualificar lead empresa XPTO e preparar proposta comercial",
17136
+ agents: ["Sales", "CRM", "Scoring", "Proposal"],
17137
+ workflow: salesWorkflow,
17138
+ dashboard: /* @__PURE__ */ jsxRuntime.jsx(SalesDemo, {})
17139
+ },
17140
+ {
17141
+ id: "financial",
17142
+ name: "Financeiro",
17143
+ icon: HeroIcons.BanknotesIcon,
17144
+ accent: "from-emerald-500 to-teal-500",
17145
+ prompt: "Gerar relat\xF3rio financeiro e calcular impostos do trimestre",
17146
+ agents: ["Finance", "Tax", "Reports", "Compliance"],
17147
+ workflow: financialWorkflow,
17148
+ dashboard: /* @__PURE__ */ jsxRuntime.jsx(FinancialDemo, {})
17149
+ },
17150
+ {
17151
+ id: "marketing",
17152
+ name: "Marketing",
17153
+ icon: HeroIcons.MegaphoneIcon,
17154
+ accent: "from-pink-500 to-rose-500",
17155
+ prompt: "Criar campanha de Black Friday para e-commerce",
17156
+ agents: ["Marketing", "Design", "E-commerce", "Email"],
17157
+ workflow: marketingWorkflow,
17158
+ dashboard: /* @__PURE__ */ jsxRuntime.jsx(MarketingDemo, {})
17159
+ },
17160
+ {
17161
+ id: "inventory",
17162
+ name: "Estoque",
17163
+ icon: HeroIcons.CubeIcon,
17164
+ accent: "from-orange-500 to-amber-500",
17165
+ prompt: "Verificar estoque e sugerir reposi\xE7\xF5es autom\xE1ticas",
17166
+ agents: ["Inventory", "Supply", "Forecast", "Logistics"],
17167
+ workflow: inventoryWorkflow,
17168
+ dashboard: /* @__PURE__ */ jsxRuntime.jsx(InventoryDemo, {})
17169
+ },
17170
+ {
17171
+ id: "hr",
17172
+ name: "RH",
17173
+ icon: HeroIcons.UsersIcon,
17174
+ accent: "from-green-500 to-emerald-500",
17175
+ prompt: "Processar candidaturas para vaga de Desenvolvedor Senior",
17176
+ agents: ["HR", "Recruiter", "Skills", "Interview"],
17177
+ workflow: hrWorkflow,
17178
+ dashboard: /* @__PURE__ */ jsxRuntime.jsx(HRRecruitmentDemo, {})
17179
+ },
17180
+ {
17181
+ id: "analytics",
17182
+ name: "Analytics",
17183
+ icon: HeroIcons.DocumentTextIcon,
17184
+ accent: "from-indigo-500 to-violet-500",
17185
+ prompt: "Analisar comportamento dos clientes e identificar oportunidades",
17186
+ agents: ["Analytics", "CRM", "Insights", "Reports"],
17187
+ workflow: customerAnalyticsWorkflow,
17188
+ dashboard: /* @__PURE__ */ jsxRuntime.jsx(CustomerAnalyticsDemo, {})
17189
+ },
17190
+ {
17191
+ id: "lgpd",
17192
+ name: "LGPD",
17193
+ icon: HeroIcons.ShieldCheckIcon,
17194
+ accent: "from-red-500 to-rose-500",
17195
+ prompt: "Auditar dados pessoais e verificar conformidade LGPD",
17196
+ agents: ["LGPD", "Privacy", "Audit", "Security"],
17197
+ workflow: lgpdWorkflow,
17198
+ dashboard: /* @__PURE__ */ jsxRuntime.jsx(LGPDComplianceDemo, {})
17199
+ }
17200
+ ];
16929
17201
  function EntityDrawer({
16930
17202
  open,
16931
17203
  onClose,
@@ -24215,6 +24487,7 @@ exports.DashboardView = DashboardView;
24215
24487
  exports.DataPagination = DataPagination;
24216
24488
  exports.DatePicker = DatePicker;
24217
24489
  exports.DeleteSwipeAction = DeleteSwipeAction;
24490
+ exports.DepartmentAssistantDemo = DepartmentAssistantDemo;
24218
24491
  exports.DepartmentWorkflowDemo = DepartmentWorkflowDemo;
24219
24492
  exports.Description = Description4;
24220
24493
  exports.DetailsPopover = DetailsPopover;
@@ -24818,6 +25091,7 @@ exports.isValidThailandProvince = isValidThailandProvince;
24818
25091
  exports.isValidTurkeyProvince = isValidTurkeyProvince;
24819
25092
  exports.isValidUKNation = isValidUKNation;
24820
25093
  exports.isValidUsState = isValidUsState;
25094
+ exports.koriDepartmentFlows = koriDepartmentFlows;
24821
25095
  exports.lgpdWorkflow = lgpdWorkflow;
24822
25096
  exports.listItem = listItem;
24823
25097
  exports.listItemReduced = listItemReduced;
@@ -24851,5 +25125,5 @@ exports.usePullToRefresh = usePullToRefresh;
24851
25125
  exports.validateDashboardSpec = validateDashboardSpec;
24852
25126
  exports.xScale = xScale;
24853
25127
  exports.yScale = yScale;
24854
- //# sourceMappingURL=chunk-MV27AY4F.js.map
24855
- //# sourceMappingURL=chunk-MV27AY4F.js.map
25128
+ //# sourceMappingURL=chunk-KTGWGJZ6.js.map
25129
+ //# sourceMappingURL=chunk-KTGWGJZ6.js.map