@oondemand/oon-core-front 0.3.34 → 0.3.36

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
@@ -1833,7 +1833,7 @@ function DynamicForm({ title, eyebrow = "Cadastro", fields, initialValues, submi
1833
1833
 
1834
1834
  // src/components/internal/CoreDetailModal.tsx
1835
1835
  import { useEffect as useEffect6, useMemo as useMemo7, useState as useState9 } from "react";
1836
- import { Box as Box8, Flex as Flex7, Heading as Heading3, IconButton, Text as Text10 } from "@chakra-ui/react";
1836
+ import { Box as Box8, Button as Button8, Flex as Flex7, Heading as Heading3, IconButton, Text as Text10 } from "@chakra-ui/react";
1837
1837
  import { useQuery as useQuery6, useQueryClient as useQueryClient2 } from "@tanstack/react-query";
1838
1838
 
1839
1839
  // src/components/internal/CoreTabbedDetail.tsx
@@ -2024,6 +2024,8 @@ function CoreRowAction({ action, row, parent, onOpenDetail, onRefresh, onUpdate
2024
2024
  const [formInitialValues, setFormInitialValues] = useState6({});
2025
2025
  const pipelineAction = action;
2026
2026
  const tone = pipelineAction.tone ? ACTION_TONES[pipelineAction.tone] : void 0;
2027
+ const isWorkStatus = pipelineAction.group === "workStatus";
2028
+ const isSelected = isWorkStatus && !!pipelineAction.field && row[pipelineAction.field] === pipelineAction.value;
2027
2029
  if (evaluateCondition(action.hiddenWhen, row)) return null;
2028
2030
  const disabled = evaluateCondition(action.disabledWhen, row) || loading;
2029
2031
  const confirmAction = () => action.confirm ? window.confirm(action.confirm.description ?? action.confirm.title ?? `Executar ${action.label}?`) : true;
@@ -2082,27 +2084,32 @@ function CoreRowAction({ action, row, parent, onOpenDetail, onRefresh, onUpdate
2082
2084
  }
2083
2085
  };
2084
2086
  return /* @__PURE__ */ jsxs8("span", { style: { display: "inline-flex", flexDirection: "column" }, children: [
2085
- /* @__PURE__ */ jsx12(
2087
+ /* @__PURE__ */ jsxs8(
2086
2088
  Button5,
2087
2089
  {
2088
2090
  type: "button",
2089
2091
  size: "xs",
2090
- minH: "28px",
2091
- px: "9px",
2092
- borderRadius: "6px",
2092
+ minH: isWorkStatus ? "32px" : "28px",
2093
+ px: isWorkStatus ? "12px" : "9px",
2094
+ borderRadius: isWorkStatus ? "full" : "6px",
2093
2095
  fontSize: "10px",
2094
2096
  fontWeight: "700",
2095
2097
  variant: tone ? "outline" : void 0,
2096
- bg: tone?.bg,
2098
+ bg: isWorkStatus && !isSelected ? "white" : tone?.bg,
2097
2099
  color: tone?.color,
2098
- borderColor: tone?.border,
2099
- boxShadow: tone ? "none" : void 0,
2100
+ borderColor: isSelected ? tone?.color : tone?.border,
2101
+ borderWidth: isSelected ? "2px" : "1px",
2102
+ boxShadow: isSelected ? `0 0 0 3px ${tone?.border ?? "#E2E8F0"}` : tone ? "none" : void 0,
2103
+ "aria-pressed": isWorkStatus ? isSelected : void 0,
2100
2104
  loading,
2101
2105
  disabled,
2102
2106
  onClick: run,
2103
2107
  _hover: tone ? { bg: tone.hover, borderColor: tone.border } : void 0,
2104
- _disabled: tone ? { opacity: 0.55, cursor: "not-allowed" } : void 0,
2105
- children: action.label
2108
+ _disabled: tone ? { opacity: isSelected ? 1 : 0.55, cursor: "not-allowed" } : void 0,
2109
+ children: [
2110
+ isWorkStatus ? /* @__PURE__ */ jsx12("span", { "aria-hidden": "true", style: { width: 8, height: 8, display: "inline-block", marginRight: 7, borderRadius: "999px", background: tone?.color ?? "#64748B", boxShadow: isSelected ? "0 0 0 2px rgba(255,255,255,.9)" : "none" } }) : null,
2111
+ action.label
2112
+ ]
2106
2113
  }
2107
2114
  ),
2108
2115
  error ? /* @__PURE__ */ jsx12(Text7, { mt: "3px", color: "#B42318", fontSize: "9px", children: messageOf2(error) }) : null,
@@ -2541,7 +2548,9 @@ function InlineParentForm({
2541
2548
  groups,
2542
2549
  parent,
2543
2550
  resource,
2544
- onSaved
2551
+ onSaved,
2552
+ formId,
2553
+ externalSubmit = false
2545
2554
  }) {
2546
2555
  const fields = rawFields;
2547
2556
  const [values, setValues] = useState8({});
@@ -2605,6 +2614,7 @@ function InlineParentForm({
2605
2614
  return /* @__PURE__ */ jsx14(
2606
2615
  "form",
2607
2616
  {
2617
+ id: formId,
2608
2618
  noValidate: true,
2609
2619
  onSubmit: async (event) => {
2610
2620
  event.preventDefault();
@@ -2633,7 +2643,7 @@ function InlineParentForm({
2633
2643
  children: /* @__PURE__ */ jsxs10(Stack3, { gap: "16px", children: [
2634
2644
  error ? /* @__PURE__ */ jsx14(Box7, { role: "alert", p: "10px 12px", color: "#B42318", bg: "#FEF3F2", borderWidth: "1px", borderColor: "#FECDCA", borderRadius: "7px", fontSize: "11px", children: messageOf3(error) }) : null,
2635
2645
  renderFields(),
2636
- /* @__PURE__ */ jsx14(Flex6, { justify: "flex-end", children: /* @__PURE__ */ jsx14(Button7, { type: "submit", colorPalette: "brand", loading: saving, children: "Salvar dados principais" }) })
2646
+ !externalSubmit ? /* @__PURE__ */ jsx14(Flex6, { justify: "flex-end", children: /* @__PURE__ */ jsx14(Button7, { type: "submit", colorPalette: "brand", loading: saving, children: "Salvar dados principais" }) }) : null
2637
2647
  ] })
2638
2648
  }
2639
2649
  );
@@ -2648,7 +2658,9 @@ function CoreTabbedDetail({
2648
2658
  relations,
2649
2659
  refreshTokens,
2650
2660
  onRefresh,
2651
- onParentSaved
2661
+ onParentSaved,
2662
+ formId,
2663
+ externalSubmit
2652
2664
  }) {
2653
2665
  const active = tabs.find((tab) => tab.id === activeTab) ?? tabs[0];
2654
2666
  return /* @__PURE__ */ jsxs10(Stack3, { gap: 4, children: [
@@ -2674,7 +2686,9 @@ function CoreTabbedDetail({
2674
2686
  groups: active.groups,
2675
2687
  parent: parent ?? {},
2676
2688
  resource,
2677
- onSaved: onParentSaved
2689
+ onSaved: onParentSaved,
2690
+ formId,
2691
+ externalSubmit
2678
2692
  }
2679
2693
  ) : (active.type === "relatedGrid" || active.type === "readonlyGrid") && parent ? /* @__PURE__ */ jsx14(
2680
2694
  CoreRelatedGrid,
@@ -2703,7 +2717,8 @@ function CoreDetailModal({
2703
2717
  initialRecord,
2704
2718
  initialTab,
2705
2719
  relations,
2706
- actions,
2720
+ topActions,
2721
+ bottomActions,
2707
2722
  onClose,
2708
2723
  onSaved
2709
2724
  }) {
@@ -2748,14 +2763,16 @@ function CoreDetailModal({
2748
2763
  };
2749
2764
  const width = config.size === "full" ? "98vw" : config.size === "md" ? "760px" : config.size === "lg" ? "980px" : "1180px";
2750
2765
  const displayTitle = parent?.[config.titleField ?? ""] ? String(parent[config.titleField ?? ""]) : title;
2751
- return /* @__PURE__ */ jsx15(Flex7, { position: "fixed", inset: 0, zIndex: 1e3, align: "center", justify: "center", p: 4, bg: "rgba(15,23,42,.48)", children: /* @__PURE__ */ jsxs11(Box8, { role: "dialog", "aria-modal": "true", w: `min(${width}, 98vw)`, maxH: "94vh", overflow: "hidden", bg: "white", borderRadius: "14px", boxShadow: "0 24px 70px rgba(15,23,42,.24)", children: [
2766
+ const activeIsForm = (config.tabs.find((tab) => tab.id === activeTab) ?? config.tabs[0])?.type === "form";
2767
+ const formId = `oon-detail-form-${model.replace(/[^a-zA-Z0-9_-]/g, "-")}`;
2768
+ return /* @__PURE__ */ jsx15(Flex7, { position: "fixed", inset: 0, zIndex: 1e3, align: "center", justify: "center", p: 4, bg: "rgba(15,23,42,.48)", children: /* @__PURE__ */ jsxs11(Box8, { role: "dialog", "aria-modal": "true", display: "flex", flexDirection: "column", w: `min(${width}, 98vw)`, h: "94vh", maxH: "94vh", overflow: "hidden", bg: "white", borderRadius: "14px", boxShadow: "0 24px 70px rgba(15,23,42,.24)", children: [
2752
2769
  /* @__PURE__ */ jsxs11(Flex7, { minH: "72px", px: "20px", py: "10px", align: "center", justify: "space-between", gap: 4, borderBottomWidth: "1px", borderColor: "#E5E9ED", children: [
2753
2770
  /* @__PURE__ */ jsxs11(Box8, { minW: "160px", children: [
2754
2771
  /* @__PURE__ */ jsx15(Text10, { color: "#0474AF", fontSize: "10px", fontWeight: "700", textTransform: "uppercase", children: "Detalhe" }),
2755
2772
  /* @__PURE__ */ jsx15(Heading3, { size: "md", children: recordId ? displayTitle : `Novo ${title}` })
2756
2773
  ] }),
2757
2774
  /* @__PURE__ */ jsxs11(Flex7, { flex: "1", align: "center", justify: "flex-end", gap: "8px", wrap: "wrap", children: [
2758
- recordId ? actions : null,
2775
+ recordId ? topActions : null,
2759
2776
  /* @__PURE__ */ jsx15(
2760
2777
  IconButton,
2761
2778
  {
@@ -2777,7 +2794,7 @@ function CoreDetailModal({
2777
2794
  )
2778
2795
  ] })
2779
2796
  ] }),
2780
- /* @__PURE__ */ jsx15(Box8, { maxH: "calc(94vh - 73px)", p: "20px", overflowY: "auto", children: schemaQuery.isLoading || parentQuery.isLoading ? /* @__PURE__ */ jsx15(Text10, { children: "Carregando..." }) : /* @__PURE__ */ jsx15(
2797
+ /* @__PURE__ */ jsx15(Box8, { flex: "1", minH: 0, p: "20px", overflowY: "auto", children: schemaQuery.isLoading || parentQuery.isLoading ? /* @__PURE__ */ jsx15(Text10, { children: "Carregando..." }) : /* @__PURE__ */ jsx15(
2781
2798
  CoreTabbedDetail,
2782
2799
  {
2783
2800
  tabs: config.tabs,
@@ -2789,13 +2806,35 @@ function CoreDetailModal({
2789
2806
  relations,
2790
2807
  refreshTokens,
2791
2808
  onRefresh: refresh,
2809
+ formId,
2810
+ externalSubmit: true,
2792
2811
  onParentSaved: (saved) => {
2793
2812
  setParent(saved);
2794
2813
  onSaved?.(saved);
2795
2814
  refresh(["parent"]);
2796
2815
  }
2797
2816
  }
2798
- ) })
2817
+ ) }),
2818
+ /* @__PURE__ */ jsxs11(
2819
+ Flex7,
2820
+ {
2821
+ flex: "0 0 auto",
2822
+ minH: "64px",
2823
+ px: "20px",
2824
+ py: "10px",
2825
+ align: "center",
2826
+ justify: "space-between",
2827
+ gap: "12px",
2828
+ bg: "white",
2829
+ borderTopWidth: "1px",
2830
+ borderColor: "#E5E9ED",
2831
+ boxShadow: "0 -8px 24px rgba(15,23,42,.06)",
2832
+ children: [
2833
+ /* @__PURE__ */ jsx15(Box8, { children: recordId ? bottomActions : null }),
2834
+ /* @__PURE__ */ jsx15(Button8, { type: "submit", form: formId, colorPalette: "brand", disabled: !activeIsForm || schemaQuery.isLoading || parentQuery.isLoading, children: "Salvar" })
2835
+ ]
2836
+ }
2837
+ )
2799
2838
  ] }) });
2800
2839
  }
2801
2840
 
@@ -2940,8 +2979,8 @@ function CoreDocument({ model, label, endpoint, columns, form }) {
2940
2979
  }
2941
2980
 
2942
2981
  // src/components/CorePipeline.tsx
2943
- import { useState as useState11 } from "react";
2944
- import { Badge as Badge4, Box as Box10, Button as Button8, Flex as Flex8, Heading as Heading5, Input as Input6, NativeSelect as NativeSelect5, Stack as Stack5, Text as Text12 } from "@chakra-ui/react";
2982
+ import { useEffect as useEffect7, useRef as useRef2, useState as useState11 } from "react";
2983
+ import { Badge as Badge4, Box as Box10, Button as Button9, Flex as Flex8, Heading as Heading5, Input as Input6, NativeSelect as NativeSelect5, Stack as Stack5, Text as Text12 } from "@chakra-ui/react";
2945
2984
  import { useMutation as useMutation3, useQuery as useQuery7, useQueryClient as useQueryClient4 } from "@tanstack/react-query";
2946
2985
 
2947
2986
  // src/pipelineTicket.ts
@@ -3069,6 +3108,19 @@ function groupPipelineActions(actions) {
3069
3108
  };
3070
3109
  }
3071
3110
 
3111
+ // src/components/internal/pipelineBoardScroll.ts
3112
+ var EDGE_TOLERANCE = 2;
3113
+ function resolveHorizontalScrollState(metrics) {
3114
+ const maxScrollLeft = Math.max(0, metrics.scrollWidth - metrics.clientWidth);
3115
+ return {
3116
+ canScrollLeft: metrics.scrollLeft > EDGE_TOLERANCE,
3117
+ canScrollRight: metrics.scrollLeft < maxScrollLeft - EDGE_TOLERANCE
3118
+ };
3119
+ }
3120
+ function pipelineBoardScrollStep(clientWidth) {
3121
+ return Math.max(280, Math.round(clientWidth * 0.75));
3122
+ }
3123
+
3072
3124
  // src/components/CorePipeline.tsx
3073
3125
  import { jsx as jsx18, jsxs as jsxs13 } from "react/jsx-runtime";
3074
3126
  function ticketId(row) {
@@ -3085,6 +3137,17 @@ function mergeFormFields2(metadataFields, overrides) {
3085
3137
  });
3086
3138
  return merged;
3087
3139
  }
3140
+ function workStatusColor(value) {
3141
+ const normalized2 = String(value ?? "").normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
3142
+ if (/aguardando.*inicio|nao.*iniciado|waiting/.test(normalized2)) return "#D97706";
3143
+ if (/trabalhando|em.*andamento|working/.test(normalized2)) return "#16A34A";
3144
+ if (/revisar|revisao|review/.test(normalized2)) return "#DC2626";
3145
+ return "#94A3B8";
3146
+ }
3147
+ function PipelineArrowIcon({ direction }) {
3148
+ const path = direction === "left" ? "M12.5 5 7.5 10l5 5" : "m7.5 5 5 5-5 5";
3149
+ return /* @__PURE__ */ jsx18("svg", { viewBox: "0 0 20 20", width: "18", height: "18", "aria-hidden": "true", children: /* @__PURE__ */ jsx18("path", { d: path, fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) });
3150
+ }
3088
3151
  function PipelineFilterControl({
3089
3152
  filter,
3090
3153
  value,
@@ -3160,6 +3223,8 @@ function CorePipeline({
3160
3223
  const [selectedTicket, setSelectedTicket] = useState11(null);
3161
3224
  const [creating, setCreating] = useState11(false);
3162
3225
  const [formError, setFormError] = useState11(null);
3226
+ const boardRef = useRef2(null);
3227
+ const [boardScrollState, setBoardScrollState] = useState11({ canScrollLeft: false, canScrollRight: false });
3163
3228
  const effectiveFilters = Object.fromEntries(
3164
3229
  Object.entries(filterValues).filter(([, value]) => value !== "" && value != null)
3165
3230
  );
@@ -3168,6 +3233,23 @@ function CorePipeline({
3168
3233
  queryFn: () => resource.list({ pageSize: 200, ...effectiveFilters }),
3169
3234
  enabled: !!schema && viewMode === "board"
3170
3235
  });
3236
+ useEffect7(() => {
3237
+ if (viewMode !== "board") return void 0;
3238
+ const board = boardRef.current;
3239
+ if (!board) return void 0;
3240
+ const sync = () => setBoardScrollState(resolveHorizontalScrollState(board));
3241
+ sync();
3242
+ board.addEventListener("scroll", sync, { passive: true });
3243
+ window.addEventListener("resize", sync);
3244
+ const resizeObserver = typeof ResizeObserver !== "undefined" ? new ResizeObserver(sync) : void 0;
3245
+ resizeObserver?.observe(board);
3246
+ Array.from(board.children).forEach((child) => resizeObserver?.observe(child));
3247
+ return () => {
3248
+ board.removeEventListener("scroll", sync);
3249
+ window.removeEventListener("resize", sync);
3250
+ resizeObserver?.disconnect();
3251
+ };
3252
+ }, [viewMode, listQuery.data?.results?.length, stages?.length, schema?.fields.length]);
3171
3253
  const invalidate = async () => {
3172
3254
  await Promise.all([
3173
3255
  queryClient.invalidateQueries({ queryKey: ["oon", "pipeline", basePath] }),
@@ -3224,6 +3306,12 @@ function CorePipeline({
3224
3306
  ...defaultStage ? { [stageField]: defaultStage } : {}
3225
3307
  });
3226
3308
  };
3309
+ const scrollBoard = (direction) => {
3310
+ const board = boardRef.current;
3311
+ if (!board) return;
3312
+ const step = pipelineBoardScrollStep(board.clientWidth);
3313
+ board.scrollBy({ left: direction === "left" ? -step : step, behavior: "smooth" });
3314
+ };
3227
3315
  const renderModalAction = (action, index) => selectedTicket ? /* @__PURE__ */ jsx18(
3228
3316
  CoreRowAction,
3229
3317
  {
@@ -3243,38 +3331,10 @@ function CorePipeline({
3243
3331
  },
3244
3332
  action.id ?? `${action.label}-${index}`
3245
3333
  ) : null;
3246
- const modalActions = selectedTicket && !creating ? /* @__PURE__ */ jsxs13(Flex8, { gap: "8px", align: "center", justify: "flex-end", wrap: "wrap", children: [
3247
- groupedTicketActions.approval.length ? /* @__PURE__ */ jsx18(
3248
- Flex8,
3249
- {
3250
- role: "group",
3251
- "aria-label": "Aprova\xE7\xE3o do ticket",
3252
- gap: "4px",
3253
- align: "center",
3254
- p: "3px",
3255
- bg: "#F8FAFC",
3256
- borderWidth: "1px",
3257
- borderColor: "#E2E8F0",
3258
- borderRadius: "9px",
3259
- children: groupedTicketActions.approval.map(renderModalAction)
3260
- }
3261
- ) : null,
3262
- groupedTicketActions.workStatus.length ? /* @__PURE__ */ jsx18(
3263
- Flex8,
3264
- {
3265
- role: "group",
3266
- "aria-label": "Status de trabalho",
3267
- gap: "4px",
3268
- align: "center",
3269
- p: "3px",
3270
- bg: "#F8FAFC",
3271
- borderWidth: "1px",
3272
- borderColor: "#E2E8F0",
3273
- borderRadius: "9px",
3274
- children: groupedTicketActions.workStatus.map(renderModalAction)
3275
- }
3276
- ) : null,
3277
- groupedTicketActions.custom.length ? /* @__PURE__ */ jsx18(Flex8, { role: "group", "aria-label": "Outras a\xE7\xF5es", gap: "4px", align: "center", wrap: "wrap", children: groupedTicketActions.custom.map(renderModalAction) }) : null
3334
+ const modalTopActions = selectedTicket && !creating && groupedTicketActions.workStatus.length ? /* @__PURE__ */ jsx18(Flex8, { role: "group", "aria-label": "Status da atividade", gap: "6px", align: "center", wrap: "wrap", children: groupedTicketActions.workStatus.map(renderModalAction) }) : null;
3335
+ const modalBottomActions = selectedTicket && !creating ? /* @__PURE__ */ jsxs13(Flex8, { gap: "8px", align: "center", wrap: "wrap", children: [
3336
+ groupedTicketActions.approval.length ? /* @__PURE__ */ jsx18(Flex8, { role: "group", "aria-label": "Aprova\xE7\xE3o do ticket", gap: "6px", align: "center", wrap: "wrap", children: groupedTicketActions.approval.map(renderModalAction) }) : null,
3337
+ groupedTicketActions.custom.length ? /* @__PURE__ */ jsx18(Flex8, { role: "group", "aria-label": "A\xE7\xF5es do neg\xF3cio", gap: "6px", align: "center", wrap: "wrap", children: groupedTicketActions.custom.map(renderModalAction) }) : null
3278
3338
  ] }) : null;
3279
3339
  return /* @__PURE__ */ jsxs13(Stack5, { gap: 5, children: [
3280
3340
  /* @__PURE__ */ jsxs13(Flex8, { align: { base: "stretch", md: "flex-end" }, justify: "space-between", gap: 4, direction: { base: "column", md: "row" }, children: [
@@ -3284,8 +3344,8 @@ function CorePipeline({
3284
3344
  /* @__PURE__ */ jsx18(Text12, { mt: 1, fontSize: "13px", color: "gray.500", children: "Acompanhe os tickets por etapa e visualize os principais dados de cada item." })
3285
3345
  ] }),
3286
3346
  /* @__PURE__ */ jsxs13(Flex8, { gap: "8px", align: "center", wrap: "wrap", children: [
3287
- allowedViewModes.length > 1 ? allowedViewModes.map((mode) => /* @__PURE__ */ jsx18(Button8, { size: "sm", variant: viewMode === mode ? "solid" : "outline", colorPalette: "brand", onClick: () => setViewMode(mode), children: mode === "board" ? "Quadro" : "Lista" }, mode)) : null,
3288
- create?.enabled ? /* @__PURE__ */ jsx18(Button8, { size: "sm", colorPalette: "brand", onClick: openCreate, children: create.label ?? "Novo ticket" }) : null
3347
+ allowedViewModes.length > 1 ? allowedViewModes.map((mode) => /* @__PURE__ */ jsx18(Button9, { size: "sm", variant: viewMode === mode ? "solid" : "outline", colorPalette: "brand", onClick: () => setViewMode(mode), children: mode === "board" ? "Quadro" : "Lista" }, mode)) : null,
3348
+ create?.enabled ? /* @__PURE__ */ jsx18(Button9, { size: "sm", colorPalette: "brand", onClick: openCreate, children: create.label ?? "Novo ticket" }) : null
3289
3349
  ] })
3290
3350
  ] }),
3291
3351
  filters.length ? /* @__PURE__ */ jsxs13(Flex8, { p: "12px", gap: "10px", align: "flex-end", wrap: "wrap", bg: "white", borderWidth: "1px", borderColor: "#E5E9ED", borderRadius: "10px", children: [
@@ -3305,7 +3365,7 @@ function CorePipeline({
3305
3365
  ] }, filter.field);
3306
3366
  }),
3307
3367
  /* @__PURE__ */ jsx18(
3308
- Button8,
3368
+ Button9,
3309
3369
  {
3310
3370
  size: "sm",
3311
3371
  variant: "outline",
@@ -3327,52 +3387,143 @@ function CorePipeline({
3327
3387
  setSelectedTicket(row);
3328
3388
  }
3329
3389
  }
3330
- ) : /* @__PURE__ */ jsx18(Flex8, { gap: 4, align: "stretch", overflowX: "auto", pb: 3, minH: "420px", children: Array.from(byStage.entries()).map(([stageId, items]) => {
3331
- const stageLabel = resolvedStages.find((stage) => stage.id === stageId)?.label ?? (stageId || "Sem etapa");
3332
- return /* @__PURE__ */ jsxs13(Box10, { minW: "300px", maxW: "340px", flex: "1 0 300px", bg: "#E8ECEF", borderRadius: "12px", p: 3, borderWidth: "1px", borderColor: "#DDE3E7", children: [
3333
- /* @__PURE__ */ jsxs13(Flex8, { align: "center", justify: "space-between", mb: 3, px: 1, children: [
3334
- /* @__PURE__ */ jsx18(Text12, { fontWeight: "700", fontSize: "12px", color: "#33434C", textTransform: "uppercase", letterSpacing: "0.03em", children: stageLabel }),
3335
- /* @__PURE__ */ jsx18(Badge4, { colorPalette: "brand", variant: "solid", borderRadius: "full", minW: "24px", justifyContent: "center", children: items.length })
3336
- ] }),
3337
- /* @__PURE__ */ jsx18(Stack5, { gap: 2, children: items.length === 0 ? /* @__PURE__ */ jsx18(Box10, { borderWidth: "1px", borderStyle: "dashed", borderColor: "#C8D0D5", borderRadius: "10px", p: 5, textAlign: "center", children: /* @__PURE__ */ jsx18(Text12, { fontSize: "12px", color: "gray.500", children: "Nenhum ticket nesta etapa." }) }) : items.map((row, index) => {
3338
- const ticketTitle = formatCell(row[resolvedTitleField], "string");
3339
- return /* @__PURE__ */ jsxs13(
3340
- Button8,
3341
- {
3342
- type: "button",
3343
- variant: "plain",
3344
- display: "block",
3345
- w: "100%",
3346
- h: "auto",
3347
- minH: "auto",
3348
- p: 3,
3349
- bg: "white",
3350
- borderRadius: "10px",
3351
- borderWidth: "1px",
3352
- borderColor: "#DDE3E7",
3353
- boxShadow: "0 3px 10px rgba(7, 38, 46, 0.05)",
3354
- textAlign: "left",
3355
- whiteSpace: "normal",
3356
- "aria-label": `Abrir ticket ${ticketTitle}`,
3357
- onClick: () => {
3358
- setFormError(null);
3359
- setCreating(false);
3360
- setSelectedTicket(row);
3361
- },
3362
- _hover: { borderColor: "brand.300", transform: "translateY(-1px)", boxShadow: "0 7px 18px rgba(7, 38, 46, 0.09)" },
3363
- children: [
3364
- /* @__PURE__ */ jsx18(Text12, { fontSize: "13px", fontWeight: "700", color: "#24323A", mb: 2, lineClamp: 2, children: ticketTitle }),
3365
- /* @__PURE__ */ jsx18(Stack5, { gap: 1, children: detailFields.map((field) => /* @__PURE__ */ jsxs13(Flex8, { gap: 2, align: "baseline", justify: "space-between", children: [
3366
- /* @__PURE__ */ jsx18(Text12, { fontSize: "10px", color: "gray.500", textTransform: "uppercase", letterSpacing: "0.03em", children: fieldLabel(field) }),
3367
- /* @__PURE__ */ jsx18(Text12, { fontSize: "11px", color: "#46545C", fontWeight: "500", textAlign: "right", lineClamp: 1, children: formatCell(row[field.name], field.kind) })
3368
- ] }, field.name)) })
3369
- ]
3370
- },
3371
- ticketId(row) ?? index
3372
- );
3373
- }) })
3374
- ] }, stageId);
3375
- }) }),
3390
+ ) : /* @__PURE__ */ jsxs13(Box10, { position: "relative", children: [
3391
+ /* @__PURE__ */ jsx18(
3392
+ Flex8,
3393
+ {
3394
+ ref: boardRef,
3395
+ "data-oon-pipeline-board": "true",
3396
+ gap: 4,
3397
+ align: "stretch",
3398
+ overflowX: "auto",
3399
+ overflowY: "auto",
3400
+ h: "clamp(420px, calc(100vh - 250px), 760px)",
3401
+ minH: "420px",
3402
+ pb: "18px",
3403
+ pr: "2px",
3404
+ scrollBehavior: "smooth",
3405
+ scrollbarGutter: "stable both-edges",
3406
+ overscrollBehaviorX: "contain",
3407
+ children: Array.from(byStage.entries()).map(([stageId, items]) => {
3408
+ const stageLabel = resolvedStages.find((stage) => stage.id === stageId)?.label ?? (stageId || "Sem etapa");
3409
+ return /* @__PURE__ */ jsxs13(Box10, { minW: "300px", maxW: "340px", flex: "1 0 300px", bg: "#E8ECEF", borderRadius: "12px", p: 3, borderWidth: "1px", borderColor: "#DDE3E7", children: [
3410
+ /* @__PURE__ */ jsxs13(Flex8, { align: "center", justify: "space-between", mb: 3, px: 1, children: [
3411
+ /* @__PURE__ */ jsx18(Text12, { fontWeight: "700", fontSize: "12px", color: "#33434C", textTransform: "uppercase", letterSpacing: "0.03em", children: stageLabel }),
3412
+ /* @__PURE__ */ jsx18(Badge4, { colorPalette: "brand", variant: "solid", borderRadius: "full", minW: "24px", justifyContent: "center", children: items.length })
3413
+ ] }),
3414
+ /* @__PURE__ */ jsx18(Stack5, { gap: 2, children: items.length === 0 ? /* @__PURE__ */ jsx18(Box10, { borderWidth: "1px", borderStyle: "dashed", borderColor: "#C8D0D5", borderRadius: "10px", p: 5, textAlign: "center", children: /* @__PURE__ */ jsx18(Text12, { fontSize: "12px", color: "gray.500", children: "Nenhum ticket nesta etapa." }) }) : items.map((row, index) => {
3415
+ const ticketTitle = formatCell(row[resolvedTitleField], "string");
3416
+ return /* @__PURE__ */ jsxs13(
3417
+ Button9,
3418
+ {
3419
+ type: "button",
3420
+ variant: "plain",
3421
+ display: "block",
3422
+ w: "100%",
3423
+ h: "auto",
3424
+ minH: "auto",
3425
+ p: 3,
3426
+ bg: "white",
3427
+ borderRadius: "10px",
3428
+ borderWidth: "1px",
3429
+ borderColor: "#DDE3E7",
3430
+ boxShadow: "0 3px 10px rgba(7, 38, 46, 0.05)",
3431
+ textAlign: "left",
3432
+ whiteSpace: "normal",
3433
+ "aria-label": `Abrir ticket ${ticketTitle}`,
3434
+ onClick: () => {
3435
+ setFormError(null);
3436
+ setCreating(false);
3437
+ setSelectedTicket(row);
3438
+ },
3439
+ _hover: { borderColor: "brand.300", transform: "translateY(-1px)", boxShadow: "0 7px 18px rgba(7, 38, 46, 0.09)" },
3440
+ children: [
3441
+ /* @__PURE__ */ jsxs13(Flex8, { align: "flex-start", justify: "space-between", gap: "8px", mb: 2, children: [
3442
+ /* @__PURE__ */ jsx18(Text12, { fontSize: "13px", fontWeight: "700", color: "#24323A", lineClamp: 2, children: ticketTitle }),
3443
+ /* @__PURE__ */ jsx18(
3444
+ Box10,
3445
+ {
3446
+ as: "span",
3447
+ title: `Status da atividade: ${String(row[workStatusField] ?? "N\xE3o informado")}`,
3448
+ "aria-label": `Status da atividade: ${String(row[workStatusField] ?? "N\xE3o informado")}`,
3449
+ flex: "0 0 auto",
3450
+ w: "10px",
3451
+ h: "10px",
3452
+ mt: "4px",
3453
+ borderRadius: "full",
3454
+ bg: workStatusColor(row[workStatusField]),
3455
+ boxShadow: "0 0 0 3px white, 0 0 0 4px #E2E8F0"
3456
+ }
3457
+ )
3458
+ ] }),
3459
+ /* @__PURE__ */ jsx18(Stack5, { gap: 1, children: detailFields.map((field) => /* @__PURE__ */ jsxs13(Flex8, { gap: 2, align: "baseline", justify: "space-between", children: [
3460
+ /* @__PURE__ */ jsx18(Text12, { fontSize: "10px", color: "gray.500", textTransform: "uppercase", letterSpacing: "0.03em", children: fieldLabel(field) }),
3461
+ /* @__PURE__ */ jsx18(Text12, { fontSize: "11px", color: "#46545C", fontWeight: "500", textAlign: "right", lineClamp: 1, children: formatCell(row[field.name], field.kind) })
3462
+ ] }, field.name)) })
3463
+ ]
3464
+ },
3465
+ ticketId(row) ?? index
3466
+ );
3467
+ }) })
3468
+ ] }, stageId);
3469
+ })
3470
+ }
3471
+ ),
3472
+ /* @__PURE__ */ jsx18(
3473
+ Button9,
3474
+ {
3475
+ type: "button",
3476
+ "aria-label": "Deslizar quadro para a esquerda",
3477
+ title: "Deslizar para a esquerda",
3478
+ position: "absolute",
3479
+ left: "8px",
3480
+ top: "50%",
3481
+ transform: "translateY(-50%)",
3482
+ zIndex: 3,
3483
+ minW: "34px",
3484
+ w: "34px",
3485
+ h: "34px",
3486
+ p: 0,
3487
+ borderRadius: "full",
3488
+ variant: "outline",
3489
+ bg: "rgba(255,255,255,.96)",
3490
+ borderColor: "#CBD5E1",
3491
+ boxShadow: "0 5px 16px rgba(15,23,42,.16)",
3492
+ disabled: !boardScrollState.canScrollLeft,
3493
+ onClick: () => scrollBoard("left"),
3494
+ _hover: { bg: "white", borderColor: "brand.400" },
3495
+ _disabled: { opacity: 0.25, cursor: "not-allowed" },
3496
+ children: /* @__PURE__ */ jsx18(PipelineArrowIcon, { direction: "left" })
3497
+ }
3498
+ ),
3499
+ /* @__PURE__ */ jsx18(
3500
+ Button9,
3501
+ {
3502
+ type: "button",
3503
+ "aria-label": "Deslizar quadro para a direita",
3504
+ title: "Deslizar para a direita",
3505
+ position: "absolute",
3506
+ right: "8px",
3507
+ top: "50%",
3508
+ transform: "translateY(-50%)",
3509
+ zIndex: 3,
3510
+ minW: "34px",
3511
+ w: "34px",
3512
+ h: "34px",
3513
+ p: 0,
3514
+ borderRadius: "full",
3515
+ variant: "outline",
3516
+ bg: "rgba(255,255,255,.96)",
3517
+ borderColor: "#CBD5E1",
3518
+ boxShadow: "0 5px 16px rgba(15,23,42,.16)",
3519
+ disabled: !boardScrollState.canScrollRight,
3520
+ onClick: () => scrollBoard("right"),
3521
+ _hover: { bg: "white", borderColor: "brand.400" },
3522
+ _disabled: { opacity: 0.25, cursor: "not-allowed" },
3523
+ children: /* @__PURE__ */ jsx18(PipelineArrowIcon, { direction: "right" })
3524
+ }
3525
+ )
3526
+ ] }),
3376
3527
  selectedTicket && ticketModal && ticketModal.enabled !== false ? /* @__PURE__ */ jsx18(
3377
3528
  CoreDetailModal,
3378
3529
  {
@@ -3384,7 +3535,8 @@ function CorePipeline({
3384
3535
  initialRecord: selectedTicket,
3385
3536
  initialTab: creating ? create?.initialTab : void 0,
3386
3537
  relations,
3387
- actions: modalActions,
3538
+ topActions: modalTopActions,
3539
+ bottomActions: modalBottomActions,
3388
3540
  onClose: () => {
3389
3541
  setSelectedTicket(null);
3390
3542
  setCreating(false);
@@ -3516,7 +3668,7 @@ function MissingRenderer({ renderer, children }) {
3516
3668
  }
3517
3669
 
3518
3670
  // src/components/ui-v2/CorePrimitives.tsx
3519
- import { Box as Box13, Button as Button9, Flex as Flex9, Heading as Heading7, Spinner as Spinner3, Text as Text15 } from "@chakra-ui/react";
3671
+ import { Box as Box13, Button as Button10, Flex as Flex9, Heading as Heading7, Spinner as Spinner3, Text as Text15 } from "@chakra-ui/react";
3520
3672
  import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
3521
3673
  function CorePage({ children }) {
3522
3674
  return /* @__PURE__ */ jsx22(Box13, { children });
@@ -3557,7 +3709,7 @@ function CoreActions({ children }) {
3557
3709
  function CoreEmptyState({ title = "Nenhum dado encontrado", actionLabel, onAction }) {
3558
3710
  return /* @__PURE__ */ jsxs16(Box13, { textAlign: "center", py: 10, children: [
3559
3711
  /* @__PURE__ */ jsx22(Text15, { children: title }),
3560
- actionLabel ? /* @__PURE__ */ jsx22(Button9, { mt: 3, onClick: onAction, children: actionLabel }) : null
3712
+ actionLabel ? /* @__PURE__ */ jsx22(Button10, { mt: 3, onClick: onAction, children: actionLabel }) : null
3561
3713
  ] });
3562
3714
  }
3563
3715
  function CoreLoadingState({ label = "Carregando..." }) {
@@ -3762,7 +3914,7 @@ import {
3762
3914
  } from "react-router-dom";
3763
3915
 
3764
3916
  // src/shell/DefaultShell.tsx
3765
- import { Box as Box16, Button as Button10, Flex as Flex11, Spacer as Spacer2, Text as Text18 } from "@chakra-ui/react";
3917
+ import { Box as Box16, Button as Button11, Flex as Flex11, Spacer as Spacer2, Text as Text18 } from "@chakra-ui/react";
3766
3918
  import { Outlet } from "react-router-dom";
3767
3919
 
3768
3920
  // src/shell/Sidebar.tsx
@@ -3882,7 +4034,7 @@ function CoreTopbar({ app }) {
3882
4034
  /* @__PURE__ */ jsx26(Text18, { fontSize: "sm", fontWeight: "600", color: "#24323A", children: user.nome }),
3883
4035
  user.email ? /* @__PURE__ */ jsx26(Text18, { fontSize: "xs", color: "gray.500", children: user.email }) : null
3884
4036
  ] }),
3885
- /* @__PURE__ */ jsx26(Button10, { size: "sm", variant: "outline", colorPalette: "brand", borderRadius: "8px", onClick: logout, children: "Sair" })
4037
+ /* @__PURE__ */ jsx26(Button11, { size: "sm", variant: "outline", colorPalette: "brand", borderRadius: "8px", onClick: logout, children: "Sair" })
3886
4038
  ] }) : null
3887
4039
  ] });
3888
4040
  }
@@ -3926,7 +4078,7 @@ function AuthenticatedLayout({ app, menu, layout, registry }) {
3926
4078
  }
3927
4079
 
3928
4080
  // src/security/AccessDeniedPage.tsx
3929
- import { Box as Box17, Button as Button11, Flex as Flex12, Heading as Heading9, Text as Text19, VStack } from "@chakra-ui/react";
4081
+ import { Box as Box17, Button as Button12, Flex as Flex12, Heading as Heading9, Text as Text19, VStack } from "@chakra-ui/react";
3930
4082
  import { useNavigate } from "react-router-dom";
3931
4083
  import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
3932
4084
  function AccessDeniedPage({ app }) {
@@ -3985,7 +4137,7 @@ function AccessDeniedPage({ app }) {
3985
4137
  ] })
3986
4138
  ] }),
3987
4139
  /* @__PURE__ */ jsx28(
3988
- Button11,
4140
+ Button12,
3989
4141
  {
3990
4142
  alignSelf: "flex-start",
3991
4143
  bg: "#07262E",
@@ -4042,7 +4194,7 @@ function AppAccessGuard({ children }) {
4042
4194
  import { useState as useState12 } from "react";
4043
4195
  import {
4044
4196
  Box as Box18,
4045
- Button as Button12,
4197
+ Button as Button13,
4046
4198
  Flex as Flex13,
4047
4199
  Heading as Heading10,
4048
4200
  Input as Input7,
@@ -4160,7 +4312,7 @@ function LoginPage({ app }) {
4160
4312
  }
4161
4313
  ) : null,
4162
4314
  /* @__PURE__ */ jsx30(
4163
- Button12,
4315
+ Button13,
4164
4316
  {
4165
4317
  type: "submit",
4166
4318
  bg: "#07262E",
@@ -4176,8 +4328,8 @@ function LoginPage({ app }) {
4176
4328
  }
4177
4329
 
4178
4330
  // src/security/ActivationPage.tsx
4179
- import { useEffect as useEffect7, useState as useState13 } from "react";
4180
- import { Box as Box19, Button as Button13, Heading as Heading11, Input as Input8, Text as Text21, VStack as VStack3 } from "@chakra-ui/react";
4331
+ import { useEffect as useEffect8, useState as useState13 } from "react";
4332
+ import { Box as Box19, Button as Button14, Heading as Heading11, Input as Input8, Text as Text21, VStack as VStack3 } from "@chakra-ui/react";
4181
4333
  import { Fragment as Fragment6, jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
4182
4334
  function encodeBasicCredentials2(email, password) {
4183
4335
  const bytes = new TextEncoder().encode(`${email}:${password}`);
@@ -4203,7 +4355,7 @@ function ActivationPage() {
4203
4355
  const [devResult, setDevResult] = useState13(null);
4204
4356
  const [error, setError] = useState13(null);
4205
4357
  const [submitting, setSubmitting] = useState13(false);
4206
- useEffect7(() => {
4358
+ useEffect8(() => {
4207
4359
  http.get("/ativacao/configuracao").then((response) => {
4208
4360
  setConfig(response.data);
4209
4361
  setGlobal(response.data.defaults || {});
@@ -4211,7 +4363,7 @@ function ActivationPage() {
4211
4363
  () => setError("N\xE3o foi poss\xEDvel carregar a configura\xE7\xE3o de ativa\xE7\xE3o.")
4212
4364
  );
4213
4365
  }, [http]);
4214
- useEffect7(() => {
4366
+ useEffect8(() => {
4215
4367
  if (activation.status === "active") {
4216
4368
  window.location.replace("/login");
4217
4369
  }
@@ -4375,7 +4527,7 @@ function ActivationPage() {
4375
4527
  )
4376
4528
  ] }),
4377
4529
  /* @__PURE__ */ jsx31(
4378
- Button13,
4530
+ Button14,
4379
4531
  {
4380
4532
  colorPalette: "blue",
4381
4533
  onClick: activateDevLocal,
@@ -4385,7 +4537,7 @@ function ActivationPage() {
4385
4537
  }
4386
4538
  ),
4387
4539
  /* @__PURE__ */ jsx31(
4388
- Button13,
4540
+ Button14,
4389
4541
  {
4390
4542
  variant: "outline",
4391
4543
  onClick: () => setShowCodeFlow(true),
@@ -4466,7 +4618,7 @@ function ActivationPage() {
4466
4618
  )
4467
4619
  ] }),
4468
4620
  /* @__PURE__ */ jsx31(
4469
- Button13,
4621
+ Button14,
4470
4622
  {
4471
4623
  colorPalette: "blue",
4472
4624
  onClick: activateRoot,
@@ -4519,7 +4671,7 @@ function ActivationPage() {
4519
4671
  }
4520
4672
  ),
4521
4673
  /* @__PURE__ */ jsx31(
4522
- Button13,
4674
+ Button14,
4523
4675
  {
4524
4676
  onClick: validateCode,
4525
4677
  loading: submitting,
@@ -4528,7 +4680,7 @@ function ActivationPage() {
4528
4680
  }
4529
4681
  ),
4530
4682
  isDevelopmentMember ? /* @__PURE__ */ jsx31(
4531
- Button13,
4683
+ Button14,
4532
4684
  {
4533
4685
  variant: "outline",
4534
4686
  onClick: () => setShowCodeFlow(false),
@@ -4540,22 +4692,22 @@ function ActivationPage() {
4540
4692
  step === 2 && /* @__PURE__ */ jsxs22(Fragment6, { children: [
4541
4693
  /* @__PURE__ */ jsx31(Heading11, { size: "md", children: "Confirma\xE7\xE3o" }),
4542
4694
  /* @__PURE__ */ jsx31("pre", { children: JSON.stringify(preview, null, 2) }),
4543
- /* @__PURE__ */ jsx31(Button13, { onClick: () => setStep(3), children: "Continuar" })
4695
+ /* @__PURE__ */ jsx31(Button14, { onClick: () => setStep(3), children: "Continuar" })
4544
4696
  ] }),
4545
4697
  step === 3 && /* @__PURE__ */ jsxs22(Fragment6, { children: [
4546
4698
  config.globalFields.map(
4547
4699
  (field) => renderField(field, global, setGlobal)
4548
4700
  ),
4549
- /* @__PURE__ */ jsx31(Button13, { onClick: () => setStep(4), children: "Continuar" })
4701
+ /* @__PURE__ */ jsx31(Button14, { onClick: () => setStep(4), children: "Continuar" })
4550
4702
  ] }),
4551
4703
  step === 4 && /* @__PURE__ */ jsxs22(Fragment6, { children: [
4552
4704
  config.appFields.length ? config.appFields.map((field) => renderField(field, app, setApp)) : /* @__PURE__ */ jsx31(Text21, { children: "Nenhum par\xE2metro adicional declarado." }),
4553
- /* @__PURE__ */ jsx31(Button13, { onClick: () => setStep(5), children: "Revisar" })
4705
+ /* @__PURE__ */ jsx31(Button14, { onClick: () => setStep(5), children: "Revisar" })
4554
4706
  ] }),
4555
4707
  step === 5 && /* @__PURE__ */ jsxs22(Fragment6, { children: [
4556
4708
  /* @__PURE__ */ jsx31(Text21, { children: "Ao confirmar, o c\xF3digo ser\xE1 consumido e a inst\xE2ncia ser\xE1 registrada no Ecossistema Oon." }),
4557
4709
  /* @__PURE__ */ jsx31(
4558
- Button13,
4710
+ Button14,
4559
4711
  {
4560
4712
  colorPalette: "blue",
4561
4713
  onClick: completeMemberActivation,
@@ -4896,7 +5048,7 @@ function defineOonModule(mod) {
4896
5048
  }
4897
5049
 
4898
5050
  // src/components/CoreIntegration.tsx
4899
- import { Badge as Badge5, Box as Box20, Button as Button14, Flex as Flex14, Heading as Heading12, Stack as Stack9, Text as Text22 } from "@chakra-ui/react";
5051
+ import { Badge as Badge5, Box as Box20, Button as Button15, Flex as Flex14, Heading as Heading12, Stack as Stack9, Text as Text22 } from "@chakra-ui/react";
4900
5052
  import { useMutation as useMutation4 } from "@tanstack/react-query";
4901
5053
  import { jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
4902
5054
  function CoreIntegration({ label = "Integra\xE7\xF5es" }) {
@@ -4911,7 +5063,7 @@ function CoreIntegration({ label = "Integra\xE7\xF5es" }) {
4911
5063
  return /* @__PURE__ */ jsxs23(Stack9, { gap: 6, children: [
4912
5064
  /* @__PURE__ */ jsxs23(Flex14, { align: "center", justify: "space-between", children: [
4913
5065
  /* @__PURE__ */ jsx37(Heading12, { size: "lg", children: label }),
4914
- /* @__PURE__ */ jsx37(Button14, { size: "sm", variant: "outline", loading: reprocess.isPending, onClick: () => reprocess.mutate(), children: "Reprocessar ativos" })
5066
+ /* @__PURE__ */ jsx37(Button15, { size: "sm", variant: "outline", loading: reprocess.isPending, onClick: () => reprocess.mutate(), children: "Reprocessar ativos" })
4915
5067
  ] }),
4916
5068
  /* @__PURE__ */ jsx37(Stack9, { gap: 3, children: integrations.length === 0 ? /* @__PURE__ */ jsx37(Text22, { color: "gray.400", children: "Nenhuma integra\xE7\xE3o declarada." }) : integrations.map((it, idx) => /* @__PURE__ */ jsx37(
4917
5069
  Box20,
@@ -4932,7 +5084,7 @@ function CoreIntegration({ label = "Integra\xE7\xF5es" }) {
4932
5084
  }
4933
5085
 
4934
5086
  // src/components/CoreCurrency.tsx
4935
- import { Button as Button15, Flex as Flex15, Heading as Heading13, Stack as Stack10, Text as Text23 } from "@chakra-ui/react";
5087
+ import { Button as Button16, Flex as Flex15, Heading as Heading13, Stack as Stack10, Text as Text23 } from "@chakra-ui/react";
4936
5088
  import { useMutation as useMutation5, useQueryClient as useQueryClient5 } from "@tanstack/react-query";
4937
5089
  import { jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
4938
5090
  function CoreCurrency({ model = "Moeda", label = "Multi-moedas", endpoint = "/moedas", columns }) {
@@ -4945,7 +5097,7 @@ function CoreCurrency({ model = "Moeda", label = "Multi-moedas", endpoint = "/mo
4945
5097
  return /* @__PURE__ */ jsxs24(Stack10, { gap: 6, children: [
4946
5098
  /* @__PURE__ */ jsxs24(Flex15, { align: "center", justify: "space-between", children: [
4947
5099
  /* @__PURE__ */ jsx38(Heading13, { size: "lg", children: label }),
4948
- /* @__PURE__ */ jsx38(Button15, { size: "sm", colorPalette: "blue", loading: updateRates.isPending, onClick: () => updateRates.mutate(), children: "Atualizar cota\xE7\xF5es" })
5100
+ /* @__PURE__ */ jsx38(Button16, { size: "sm", colorPalette: "blue", loading: updateRates.isPending, onClick: () => updateRates.mutate(), children: "Atualizar cota\xE7\xF5es" })
4949
5101
  ] }),
4950
5102
  updateRates.isError ? /* @__PURE__ */ jsx38(Text23, { fontSize: "sm", color: "red.600", children: updateRates.error?.message }) : null,
4951
5103
  /* @__PURE__ */ jsx38(CoreCollection, { model, label: "", mode: columns ? "full" : "dynamic", endpoint, columns })
@@ -4954,7 +5106,7 @@ function CoreCurrency({ model = "Moeda", label = "Multi-moedas", endpoint = "/mo
4954
5106
 
4955
5107
  // src/components/CoreAssistant.tsx
4956
5108
  import { useState as useState14 } from "react";
4957
- import { Box as Box21, Button as Button16, Flex as Flex16, Heading as Heading14, Input as Input9, Stack as Stack11, Text as Text24 } from "@chakra-ui/react";
5109
+ import { Box as Box21, Button as Button17, Flex as Flex16, Heading as Heading14, Input as Input9, Stack as Stack11, Text as Text24 } from "@chakra-ui/react";
4958
5110
  import { useMutation as useMutation6 } from "@tanstack/react-query";
4959
5111
  import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
4960
5112
  function CoreAssistant({ assistantCode, label = "Assistente", entity, endpoint = "/assistant-runs" }) {
@@ -5017,7 +5169,7 @@ function CoreAssistant({ assistantCode, label = "Assistente", entity, endpoint =
5017
5169
  }
5018
5170
  }
5019
5171
  ),
5020
- /* @__PURE__ */ jsx39(Button16, { size: "sm", colorPalette: "blue", onClick: send, loading: ask.isPending, children: "Enviar" })
5172
+ /* @__PURE__ */ jsx39(Button17, { size: "sm", colorPalette: "blue", onClick: send, loading: ask.isPending, children: "Enviar" })
5021
5173
  ] })
5022
5174
  ] });
5023
5175
  }