siesa-ui-kit 1.0.147 → 1.0.148
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/{BarChart-CvmMmIXu.js → BarChart-C-i5of4Y.js} +5 -5
- package/dist/{BarChart-CvmMmIXu.js.map → BarChart-C-i5of4Y.js.map} +1 -1
- package/dist/{BarChart--Y6K95vz.cjs → BarChart-Rjocw3H9.cjs} +2 -2
- package/dist/{BarChart--Y6K95vz.cjs.map → BarChart-Rjocw3H9.cjs.map} +1 -1
- package/dist/{ChartBarHorizontal-Hz6VgTcd.cjs → ChartBarHorizontal-BdWLXuku.cjs} +2 -2
- package/dist/{ChartBarHorizontal-Hz6VgTcd.cjs.map → ChartBarHorizontal-BdWLXuku.cjs.map} +1 -1
- package/dist/{ChartBarHorizontal-SjgHGKb3.js → ChartBarHorizontal-DL96XTcK.js} +5 -5
- package/dist/{ChartBarHorizontal-SjgHGKb3.js.map → ChartBarHorizontal-DL96XTcK.js.map} +1 -1
- package/dist/{ChartDonut-lyBGgzMK.js → ChartDonut-BSE8fjqa.js} +5 -5
- package/dist/{ChartDonut-lyBGgzMK.js.map → ChartDonut-BSE8fjqa.js.map} +1 -1
- package/dist/{ChartDonut-DzVMDmqN.cjs → ChartDonut-DgxhaVoj.cjs} +2 -2
- package/dist/{ChartDonut-DzVMDmqN.cjs.map → ChartDonut-DgxhaVoj.cjs.map} +1 -1
- package/dist/{ChartLine-BdmX_xGy.cjs → ChartLine-BdUvE4At.cjs} +2 -2
- package/dist/{ChartLine-BdmX_xGy.cjs.map → ChartLine-BdUvE4At.cjs.map} +1 -1
- package/dist/{ChartLine-DLWVzmS2.js → ChartLine-D-vVWI3t.js} +4 -4
- package/dist/{ChartLine-DLWVzmS2.js.map → ChartLine-D-vVWI3t.js.map} +1 -1
- package/dist/{ChartVentasMensual-BcX5Qpy1.cjs → ChartVentasMensual-B3eyj9f3.cjs} +2 -2
- package/dist/{ChartVentasMensual-BcX5Qpy1.cjs.map → ChartVentasMensual-B3eyj9f3.cjs.map} +1 -1
- package/dist/{ChartVentasMensual-4tR8QITV.js → ChartVentasMensual-ClCePaTo.js} +5 -5
- package/dist/{ChartVentasMensual-4tR8QITV.js.map → ChartVentasMensual-ClCePaTo.js.map} +1 -1
- package/dist/{KpiVentasHoy-DFGjBgPP.js → KpiVentasHoy-BEQ7IUea.js} +2 -2
- package/dist/{KpiVentasHoy-DFGjBgPP.js.map → KpiVentasHoy-BEQ7IUea.js.map} +1 -1
- package/dist/{KpiVentasHoy-e72249lU.cjs → KpiVentasHoy-BpaAS9KS.cjs} +2 -2
- package/dist/{KpiVentasHoy-e72249lU.cjs.map → KpiVentasHoy-BpaAS9KS.cjs.map} +1 -1
- package/dist/{StaticImageWidget-DRyIz6pc.js → StaticImageWidget-BJvBq0mX.js} +2 -2
- package/dist/{StaticImageWidget-DRyIz6pc.js.map → StaticImageWidget-BJvBq0mX.js.map} +1 -1
- package/dist/{StaticImageWidget-DUlJD1I6.cjs → StaticImageWidget-BVD72zyl.cjs} +2 -2
- package/dist/{StaticImageWidget-DUlJD1I6.cjs.map → StaticImageWidget-BVD72zyl.cjs.map} +1 -1
- package/dist/{TableStockCritico-BUnNpMgt.cjs → TableStockCritico-B01RIs_D.cjs} +2 -2
- package/dist/{TableStockCritico-BUnNpMgt.cjs.map → TableStockCritico-B01RIs_D.cjs.map} +1 -1
- package/dist/{TableStockCritico-BYdApQed.js → TableStockCritico-CQPn8Pbf.js} +3 -3
- package/dist/{TableStockCritico-BYdApQed.js.map → TableStockCritico-CQPn8Pbf.js.map} +1 -1
- package/dist/{aggregateChartData-DOX-R8x3.cjs → aggregateChartData-CJTTxh2k.cjs} +2 -2
- package/dist/{aggregateChartData-DOX-R8x3.cjs.map → aggregateChartData-CJTTxh2k.cjs.map} +1 -1
- package/dist/{aggregateChartData-B2UAW-WP.js → aggregateChartData-DfMWQUiV.js} +2 -2
- package/dist/{aggregateChartData-B2UAW-WP.js.map → aggregateChartData-DfMWQUiV.js.map} +1 -1
- package/dist/components/MasterDocument/HeaderRenderer.d.ts.map +1 -1
- package/dist/components/MasterDocument/MasterDocument.types.d.ts +14 -0
- package/dist/components/MasterDocument/MasterDocument.types.d.ts.map +1 -1
- package/dist/components/MasterDocument/smart/SmartMasterDocument.d.ts.map +1 -1
- package/dist/{index-DieYMRjT.cjs → index-DOwUCRbF.cjs} +3 -3
- package/dist/{index-DieYMRjT.cjs.map → index-DOwUCRbF.cjs.map} +1 -1
- package/dist/{index-BMDgaTO4.js → index-D_AyI9xa.js} +13 -9
- package/dist/{index-BMDgaTO4.js.map → index-D_AyI9xa.js.map} +1 -1
- package/dist/siesa-ui-kit.cjs +1 -1
- package/dist/siesa-ui-kit.mjs +1 -1
- package/dist/{tooltipContext-CH5FhWSK.js → tooltipContext-Bm4TsIIS.js} +2 -2
- package/dist/{tooltipContext-CH5FhWSK.js.map → tooltipContext-Bm4TsIIS.js.map} +1 -1
- package/dist/{tooltipContext-DMgzQCQh.cjs → tooltipContext-DYc8x5pj.cjs} +2 -2
- package/dist/{tooltipContext-DMgzQCQh.cjs.map → tooltipContext-DYc8x5pj.cjs.map} +1 -1
- package/dist/{useChartData-0fNBg8Ez.cjs → useChartData-CJq1lJYY.cjs} +2 -2
- package/dist/{useChartData-0fNBg8Ez.cjs.map → useChartData-CJq1lJYY.cjs.map} +1 -1
- package/dist/{useChartData-CTX9NnMa.js → useChartData-CzMMMf58.js} +4 -4
- package/dist/{useChartData-CTX9NnMa.js.map → useChartData-CzMMMf58.js.map} +1 -1
- package/dist/{useWidgetFetch-KHtyWHSX.cjs → useWidgetFetch-BkxK2-zy.cjs} +2 -2
- package/dist/{useWidgetFetch-KHtyWHSX.cjs.map → useWidgetFetch-BkxK2-zy.cjs.map} +1 -1
- package/dist/{useWidgetFetch-C43Q4m8v.js → useWidgetFetch-fkAbLXjl.js} +2 -2
- package/dist/{useWidgetFetch-C43Q4m8v.js.map → useWidgetFetch-fkAbLXjl.js.map} +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as e, jsxs as l } from "react/jsx-runtime";
|
|
2
2
|
import "react";
|
|
3
3
|
import { Loader2 as i, Image as m } from "lucide-react";
|
|
4
|
-
import { u as o } from "./useWidgetFetch-
|
|
4
|
+
import { u as o } from "./useWidgetFetch-fkAbLXjl.js";
|
|
5
5
|
const p = ({ definition: t, period: a }) => {
|
|
6
6
|
const { data: r, loading: s, error: c } = o(
|
|
7
7
|
t.widget_id,
|
|
@@ -27,4 +27,4 @@ const p = ({ definition: t, period: a }) => {
|
|
|
27
27
|
export {
|
|
28
28
|
p as default
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=StaticImageWidget-
|
|
30
|
+
//# sourceMappingURL=StaticImageWidget-BJvBq0mX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticImageWidget-
|
|
1
|
+
{"version":3,"file":"StaticImageWidget-BJvBq0mX.js","sources":["../src/dashboard/widgets/StaticImageWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { Loader2, Image as ImageIcon } from 'lucide-react';\nimport type { WidgetProps } from '../types';\nimport { useWidgetFetch } from '../hooks/useWidgetFetch';\n\ninterface ImagePayload {\n url: string;\n title?: string;\n}\n\nconst StaticImageWidget: React.FC<WidgetProps> = ({ definition, period }) => {\n const { data, loading, error } = useWidgetFetch<ImagePayload>(\n definition.widget_id,\n period,\n definition.refresh_policy,\n definition.field_mapping?.rename\n );\n\n if (loading) {\n return (\n <div className=\"w-full h-full flex items-center justify-center\">\n <Loader2 className=\"w-6 h-6 text-blue-500 animate-spin\" />\n </div>\n );\n }\n\n if (error || !data?.url) {\n return (\n <div className=\"w-full h-full flex flex-col items-center justify-center text-gray-400 p-4\">\n <ImageIcon className=\"w-8 h-8 mb-2 opacity-50\" />\n <span className=\"text-sm text-center\">Imagen no disponible</span>\n </div>\n );\n }\n\n return (\n <div className=\"w-full h-full p-0 m-0 overflow-hidden relative group\">\n <img\n src={data.url}\n alt={definition.nombre}\n className=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\"\n />\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/60 to-transparent p-3\">\n <p className=\"text-white text-xs font-medium truncate\">{definition.descripcion}</p>\n </div>\n </div>\n );\n};\n\nexport default StaticImageWidget;\n"],"names":["StaticImageWidget","definition","period","data","loading","error","useWidgetFetch","jsx","Loader2","jsxs","ImageIcon"],"mappings":";;;;AAUA,MAAMA,IAA2C,CAAC,EAAE,YAAAC,GAAY,QAAAC,QAAa;AAC3E,QAAM,EAAE,MAAAC,GAAM,SAAAC,GAAS,OAAAC,EAAA,IAAUC;AAAA,IAC/BL,EAAW;AAAA,IACXC;AAAA,IACAD,EAAW;AAAA,IACXA,EAAW,eAAe;AAAA,EAAA;AAG5B,SAAIG,IAEA,gBAAAG,EAAC,SAAI,WAAU,kDACb,4BAACC,GAAA,EAAQ,WAAU,sCAAqC,EAAA,CAC1D,IAIAH,KAAS,CAACF,GAAM,MAEhB,gBAAAM,EAAC,OAAA,EAAI,WAAU,6EACb,UAAA;AAAA,IAAA,gBAAAF,EAACG,GAAA,EAAU,WAAU,0BAAA,CAA0B;AAAA,IAC/C,gBAAAH,EAAC,QAAA,EAAK,WAAU,uBAAsB,UAAA,uBAAA,CAAoB;AAAA,EAAA,GAC5D,IAKF,gBAAAE,EAAC,OAAA,EAAI,WAAU,wDACb,UAAA;AAAA,IAAA,gBAAAF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKJ,EAAK;AAAA,QACV,KAAKF,EAAW;AAAA,QAChB,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAEZ,gBAAAM,EAAC,OAAA,EAAI,WAAU,sFACb,UAAA,gBAAAA,EAAC,OAAE,WAAU,2CAA2C,UAAAN,EAAW,YAAA,CAAY,EAAA,CACjF;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");require("react");const s=require("lucide-react"),i=require("./useWidgetFetch-
|
|
2
|
-
//# sourceMappingURL=StaticImageWidget-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");require("react");const s=require("lucide-react"),i=require("./useWidgetFetch-BkxK2-zy.cjs"),n=({definition:t,period:l})=>{const{data:r,loading:a,error:c}=i.useWidgetFetch(t.widget_id,l,t.refresh_policy,t.field_mapping?.rename);return a?e.jsx("div",{className:"w-full h-full flex items-center justify-center",children:e.jsx(s.Loader2,{className:"w-6 h-6 text-blue-500 animate-spin"})}):c||!r?.url?e.jsxs("div",{className:"w-full h-full flex flex-col items-center justify-center text-gray-400 p-4",children:[e.jsx(s.Image,{className:"w-8 h-8 mb-2 opacity-50"}),e.jsx("span",{className:"text-sm text-center",children:"Imagen no disponible"})]}):e.jsxs("div",{className:"w-full h-full p-0 m-0 overflow-hidden relative group",children:[e.jsx("img",{src:r.url,alt:t.nombre,className:"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"}),e.jsx("div",{className:"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/60 to-transparent p-3",children:e.jsx("p",{className:"text-white text-xs font-medium truncate",children:t.descripcion})})]})};exports.default=n;
|
|
2
|
+
//# sourceMappingURL=StaticImageWidget-BVD72zyl.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticImageWidget-
|
|
1
|
+
{"version":3,"file":"StaticImageWidget-BVD72zyl.cjs","sources":["../src/dashboard/widgets/StaticImageWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { Loader2, Image as ImageIcon } from 'lucide-react';\nimport type { WidgetProps } from '../types';\nimport { useWidgetFetch } from '../hooks/useWidgetFetch';\n\ninterface ImagePayload {\n url: string;\n title?: string;\n}\n\nconst StaticImageWidget: React.FC<WidgetProps> = ({ definition, period }) => {\n const { data, loading, error } = useWidgetFetch<ImagePayload>(\n definition.widget_id,\n period,\n definition.refresh_policy,\n definition.field_mapping?.rename\n );\n\n if (loading) {\n return (\n <div className=\"w-full h-full flex items-center justify-center\">\n <Loader2 className=\"w-6 h-6 text-blue-500 animate-spin\" />\n </div>\n );\n }\n\n if (error || !data?.url) {\n return (\n <div className=\"w-full h-full flex flex-col items-center justify-center text-gray-400 p-4\">\n <ImageIcon className=\"w-8 h-8 mb-2 opacity-50\" />\n <span className=\"text-sm text-center\">Imagen no disponible</span>\n </div>\n );\n }\n\n return (\n <div className=\"w-full h-full p-0 m-0 overflow-hidden relative group\">\n <img\n src={data.url}\n alt={definition.nombre}\n className=\"w-full h-full object-cover transition-transform duration-500 group-hover:scale-105\"\n />\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/60 to-transparent p-3\">\n <p className=\"text-white text-xs font-medium truncate\">{definition.descripcion}</p>\n </div>\n </div>\n );\n};\n\nexport default StaticImageWidget;\n"],"names":["StaticImageWidget","definition","period","data","loading","error","useWidgetFetch","jsx","Loader2","jsxs","ImageIcon"],"mappings":"iNAUMA,EAA2C,CAAC,CAAE,WAAAC,EAAY,OAAAC,KAAa,CAC3E,KAAM,CAAE,KAAAC,EAAM,QAAAC,EAAS,MAAAC,CAAA,EAAUC,EAAAA,eAC/BL,EAAW,UACXC,EACAD,EAAW,eACXA,EAAW,eAAe,MAAA,EAG5B,OAAIG,EAEAG,MAAC,OAAI,UAAU,iDACb,eAACC,EAAAA,QAAA,CAAQ,UAAU,qCAAqC,CAAA,CAC1D,EAIAH,GAAS,CAACF,GAAM,IAEhBM,EAAAA,KAAC,MAAA,CAAI,UAAU,4EACb,SAAA,CAAAF,EAAAA,IAACG,EAAAA,MAAA,CAAU,UAAU,yBAAA,CAA0B,EAC/CH,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAsB,SAAA,sBAAA,CAAoB,CAAA,EAC5D,EAKFE,EAAAA,KAAC,MAAA,CAAI,UAAU,uDACb,SAAA,CAAAF,EAAAA,IAAC,MAAA,CACC,IAAKJ,EAAK,IACV,IAAKF,EAAW,OAChB,UAAU,oFAAA,CAAA,EAEZM,EAAAA,IAAC,MAAA,CAAI,UAAU,qFACb,SAAAA,EAAAA,IAAC,KAAE,UAAU,0CAA2C,SAAAN,EAAW,WAAA,CAAY,CAAA,CACjF,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),j=require("react"),O=require("./WidgetDataGuard-CQ1bxuKY.cjs"),r=require("./index-
|
|
2
|
-
//# sourceMappingURL=TableStockCritico-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),j=require("react"),O=require("./WidgetDataGuard-CQ1bxuKY.cjs"),r=require("./index-DOwUCRbF.cjs"),D=require("./useWidgetFetch-BkxK2-zy.cjs"),q=({id:n,isDraggable:i})=>{const{attributes:y,listeners:a,setNodeRef:b,transform:x,transition:s,isDragging:d}=r.useSortable({id:n}),g=i?{transform:r.CSS.Transform.toString(x),transition:s}:void 0;return t.jsx("th",{ref:i?b:void 0,style:g,...i?{...y,...a}:{},onPointerDown:i?f=>f.stopPropagation():void 0,className:`px-4 py-3 font-medium border-b border-gray-200 text-xs text-gray-500 uppercase tracking-wider whitespace-nowrap ${i?"cursor-grab select-none hover:bg-blue-50/50":""} ${d?"bg-blue-50 shadow-md z-10":""}`,children:n})},F=({definition:n,period:i,isEditMode:y})=>{const{data:a,loading:b,error:x}=D.useWidgetFetch(n.widget_id,i,n.refresh_policy,n.field_mapping?.rename),s=n.config_schema,d=Array.isArray(a)?a:a?[a]:[],g=d.length>0?Object.keys(d[0]):[],f=s?.type==="table"&&s.visibleColumns?.length>0?s.visibleColumns.filter(e=>g.includes(e)):g,[l,p]=j.useState(f);j.useEffect(()=>{p(f)},[JSON.stringify(f)]);const C=!y&&l.length>1,v=r.useSensors(r.useSensor(r.PointerSensor,{activationConstraint:{delay:150,tolerance:5}}),r.useSensor(r.KeyboardSensor,{coordinateGetter:r.sortableKeyboardCoordinates})),w=e=>{const{active:c,over:o}=e;if(!o||c.id===o.id)return;const m=l.indexOf(c.id),u=l.indexOf(o.id);m===-1||u===-1||p(r.arrayMove(l,m,u))};let S=[...d];if(s?.type==="table"&&s.sortField&&g.includes(s.sortField)){const e=s.sortField,c=s.sortDirection==="desc"?-1:1;S.sort((o,m)=>{const u=o[e],h=m[e];return typeof u=="number"&&typeof h=="number"?(u-h)*c:String(u??"").localeCompare(String(h??""),"es-CO")*c})}const N=e=>e==null?"—":typeof e=="object"?JSON.stringify(e):typeof e=="number"?e.toLocaleString("es-CO"):String(e);return t.jsx(O.WidgetDataGuard,{loading:b,error:x,data:a,children:d.length===0?t.jsx("div",{className:"w-full h-full flex items-center justify-center text-sm text-gray-500",children:"Sin datos"}):t.jsx("div",{className:"w-full h-full overflow-auto custom-scrollbar",children:t.jsx(r.DndContext,{sensors:v,collisionDetection:r.closestCenter,onDragEnd:w,children:t.jsx(r.SortableContext,{items:l,strategy:r.horizontalListSortingStrategy,children:t.jsxs("table",{className:"w-full text-left border-collapse",children:[t.jsx("thead",{className:"bg-gray-50 sticky top-0 z-[5]",children:t.jsx("tr",{children:l.map(e=>t.jsx(q,{id:e,isDraggable:C},e))})}),t.jsx("tbody",{className:"bg-white divide-y divide-gray-100",children:S.map((e,c)=>t.jsx("tr",{className:"hover:bg-gray-50 transition-colors",children:l.map(o=>t.jsx("td",{className:"px-4 py-3 text-sm text-gray-700",children:N(e[o])},o))},c))})]})})})})})};exports.default=F;
|
|
2
|
+
//# sourceMappingURL=TableStockCritico-B01RIs_D.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableStockCritico-
|
|
1
|
+
{"version":3,"file":"TableStockCritico-B01RIs_D.cjs","sources":["../src/dashboard/widgets/TableStockCritico.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { WidgetDataGuard } from '../components/WidgetDataGuard';\nimport { DndContext, closestCenter, PointerSensor, KeyboardSensor, useSensor, useSensors, type DragEndEvent } from '@dnd-kit/core';\nimport { SortableContext, horizontalListSortingStrategy, useSortable, arrayMove, sortableKeyboardCoordinates } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport type { WidgetProps, MappingConfig } from '../types';\nimport { useWidgetFetch } from '../hooks/useWidgetFetch';\n\nconst SortableHeader: React.FC<{ id: string; isDraggable: boolean }> = ({ id, isDraggable }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id });\n const style = isDraggable ? { transform: CSS.Transform.toString(transform), transition } : undefined;\n\n return (\n <th\n ref={isDraggable ? setNodeRef : undefined}\n style={style}\n {...(isDraggable ? { ...attributes, ...listeners } : {})}\n onPointerDown={isDraggable ? e => e.stopPropagation() : undefined}\n className={`px-4 py-3 font-medium border-b border-gray-200 text-xs text-gray-500 uppercase tracking-wider whitespace-nowrap ${\n isDraggable ? 'cursor-grab select-none hover:bg-blue-50/50' : ''\n } ${isDragging ? 'bg-blue-50 shadow-md z-10' : ''}`}\n >\n {id}\n </th>\n );\n};\n\nconst TableStockCritico: React.FC<WidgetProps> = ({ definition, period, isEditMode }) => {\n const { data, loading, error } = useWidgetFetch<Record<string, unknown>[]>(\n definition.widget_id, period, definition.refresh_policy, definition.field_mapping?.rename\n );\n\n const tableConfig = definition.config_schema as (MappingConfig & { type: 'table' }) | undefined;\n const rows = Array.isArray(data) ? data : data ? [data] : [];\n const allKeys = rows.length > 0 ? Object.keys(rows[0]) : [];\n const originalColumns = (tableConfig?.type === 'table' && tableConfig.visibleColumns?.length > 0)\n ? tableConfig.visibleColumns.filter(c => allKeys.includes(c))\n : allKeys;\n\n const [localColumns, setLocalColumns] = useState<string[]>(originalColumns);\n\n // Sincronizar cuando los datos originales cambian (ej: periodo cambió)\n useEffect(() => {\n setLocalColumns(originalColumns);\n }, [JSON.stringify(originalColumns)]);\n\n // Solo drag en modo vista (no edit mode del grid, para no competir)\n const isDraggable = !isEditMode && localColumns.length > 1;\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { delay: 150, tolerance: 5 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const oldIdx = localColumns.indexOf(active.id as string);\n const newIdx = localColumns.indexOf(over.id as string);\n if (oldIdx === -1 || newIdx === -1) return;\n setLocalColumns(arrayMove(localColumns, oldIdx, newIdx));\n };\n\n // Sorteo local\n let sortedRows = [...rows];\n if (tableConfig?.type === 'table' && tableConfig.sortField && allKeys.includes(tableConfig.sortField)) {\n const field = tableConfig.sortField;\n const dir = tableConfig.sortDirection === 'desc' ? -1 : 1;\n sortedRows.sort((a, b) => {\n const va = a[field], vb = b[field];\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir;\n return String(va ?? '').localeCompare(String(vb ?? ''), 'es-CO') * dir;\n });\n }\n\n const formatCell = (val: unknown): string => {\n if (val == null) return '—';\n if (typeof val === 'object') return JSON.stringify(val);\n if (typeof val === 'number') return val.toLocaleString('es-CO');\n return String(val);\n };\n\n return (\n <WidgetDataGuard loading={loading} error={error} data={data}>\n {rows.length === 0 ? (\n <div className=\"w-full h-full flex items-center justify-center text-sm text-gray-500\">Sin datos</div>\n ) : (\n <div className=\"w-full h-full overflow-auto custom-scrollbar\">\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={localColumns} strategy={horizontalListSortingStrategy}>\n <table className=\"w-full text-left border-collapse\">\n <thead className=\"bg-gray-50 sticky top-0 z-[5]\">\n <tr>\n {localColumns.map(col => (\n <SortableHeader key={col} id={col} isDraggable={isDraggable} />\n ))}\n </tr>\n </thead>\n <tbody className=\"bg-white divide-y divide-gray-100\">\n {sortedRows.map((row, i) => (\n <tr key={i} className=\"hover:bg-gray-50 transition-colors\">\n {localColumns.map(col => (\n <td key={col} className=\"px-4 py-3 text-sm text-gray-700\">{formatCell(row[col])}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </SortableContext>\n </DndContext>\n </div>\n )}\n </WidgetDataGuard>\n );\n};\n\nexport default TableStockCritico;\n"],"names":["SortableHeader","id","isDraggable","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","style","CSS","jsx","e","TableStockCritico","definition","period","isEditMode","data","loading","error","useWidgetFetch","tableConfig","rows","allKeys","originalColumns","c","localColumns","setLocalColumns","useState","useEffect","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","event","active","over","oldIdx","newIdx","arrayMove","sortedRows","field","dir","a","b","va","vb","formatCell","val","WidgetDataGuard","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","jsxs","col","row","i"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as t, jsxs as O } from "react/jsx-runtime";
|
|
2
2
|
import { useState as j, useEffect as k } from "react";
|
|
3
3
|
import { W as D } from "./WidgetDataGuard-vj0zxuqN.js";
|
|
4
|
-
import { u as F, f as x, s as K, K as P, P as _, h as z, i as E, S as L, j as W, k as A, l as G, C as I } from "./index-
|
|
5
|
-
import { u as J } from "./useWidgetFetch-
|
|
4
|
+
import { u as F, f as x, s as K, K as P, P as _, h as z, i as E, S as L, j as W, k as A, l as G, C as I } from "./index-D_AyI9xa.js";
|
|
5
|
+
import { u as J } from "./useWidgetFetch-fkAbLXjl.js";
|
|
6
6
|
const R = ({ id: o, isDraggable: n }) => {
|
|
7
7
|
const { attributes: g, listeners: a, setNodeRef: y, transform: b, transition: r, isDragging: c } = G({ id: o }), m = n ? { transform: I.Transform.toString(b), transition: r } : void 0;
|
|
8
8
|
return /* @__PURE__ */ t(
|
|
@@ -52,4 +52,4 @@ const R = ({ id: o, isDraggable: n }) => {
|
|
|
52
52
|
export {
|
|
53
53
|
B as default
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=TableStockCritico-
|
|
55
|
+
//# sourceMappingURL=TableStockCritico-CQPn8Pbf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableStockCritico-
|
|
1
|
+
{"version":3,"file":"TableStockCritico-CQPn8Pbf.js","sources":["../src/dashboard/widgets/TableStockCritico.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { WidgetDataGuard } from '../components/WidgetDataGuard';\nimport { DndContext, closestCenter, PointerSensor, KeyboardSensor, useSensor, useSensors, type DragEndEvent } from '@dnd-kit/core';\nimport { SortableContext, horizontalListSortingStrategy, useSortable, arrayMove, sortableKeyboardCoordinates } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport type { WidgetProps, MappingConfig } from '../types';\nimport { useWidgetFetch } from '../hooks/useWidgetFetch';\n\nconst SortableHeader: React.FC<{ id: string; isDraggable: boolean }> = ({ id, isDraggable }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id });\n const style = isDraggable ? { transform: CSS.Transform.toString(transform), transition } : undefined;\n\n return (\n <th\n ref={isDraggable ? setNodeRef : undefined}\n style={style}\n {...(isDraggable ? { ...attributes, ...listeners } : {})}\n onPointerDown={isDraggable ? e => e.stopPropagation() : undefined}\n className={`px-4 py-3 font-medium border-b border-gray-200 text-xs text-gray-500 uppercase tracking-wider whitespace-nowrap ${\n isDraggable ? 'cursor-grab select-none hover:bg-blue-50/50' : ''\n } ${isDragging ? 'bg-blue-50 shadow-md z-10' : ''}`}\n >\n {id}\n </th>\n );\n};\n\nconst TableStockCritico: React.FC<WidgetProps> = ({ definition, period, isEditMode }) => {\n const { data, loading, error } = useWidgetFetch<Record<string, unknown>[]>(\n definition.widget_id, period, definition.refresh_policy, definition.field_mapping?.rename\n );\n\n const tableConfig = definition.config_schema as (MappingConfig & { type: 'table' }) | undefined;\n const rows = Array.isArray(data) ? data : data ? [data] : [];\n const allKeys = rows.length > 0 ? Object.keys(rows[0]) : [];\n const originalColumns = (tableConfig?.type === 'table' && tableConfig.visibleColumns?.length > 0)\n ? tableConfig.visibleColumns.filter(c => allKeys.includes(c))\n : allKeys;\n\n const [localColumns, setLocalColumns] = useState<string[]>(originalColumns);\n\n // Sincronizar cuando los datos originales cambian (ej: periodo cambió)\n useEffect(() => {\n setLocalColumns(originalColumns);\n }, [JSON.stringify(originalColumns)]);\n\n // Solo drag en modo vista (no edit mode del grid, para no competir)\n const isDraggable = !isEditMode && localColumns.length > 1;\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { delay: 150, tolerance: 5 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const oldIdx = localColumns.indexOf(active.id as string);\n const newIdx = localColumns.indexOf(over.id as string);\n if (oldIdx === -1 || newIdx === -1) return;\n setLocalColumns(arrayMove(localColumns, oldIdx, newIdx));\n };\n\n // Sorteo local\n let sortedRows = [...rows];\n if (tableConfig?.type === 'table' && tableConfig.sortField && allKeys.includes(tableConfig.sortField)) {\n const field = tableConfig.sortField;\n const dir = tableConfig.sortDirection === 'desc' ? -1 : 1;\n sortedRows.sort((a, b) => {\n const va = a[field], vb = b[field];\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir;\n return String(va ?? '').localeCompare(String(vb ?? ''), 'es-CO') * dir;\n });\n }\n\n const formatCell = (val: unknown): string => {\n if (val == null) return '—';\n if (typeof val === 'object') return JSON.stringify(val);\n if (typeof val === 'number') return val.toLocaleString('es-CO');\n return String(val);\n };\n\n return (\n <WidgetDataGuard loading={loading} error={error} data={data}>\n {rows.length === 0 ? (\n <div className=\"w-full h-full flex items-center justify-center text-sm text-gray-500\">Sin datos</div>\n ) : (\n <div className=\"w-full h-full overflow-auto custom-scrollbar\">\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={localColumns} strategy={horizontalListSortingStrategy}>\n <table className=\"w-full text-left border-collapse\">\n <thead className=\"bg-gray-50 sticky top-0 z-[5]\">\n <tr>\n {localColumns.map(col => (\n <SortableHeader key={col} id={col} isDraggable={isDraggable} />\n ))}\n </tr>\n </thead>\n <tbody className=\"bg-white divide-y divide-gray-100\">\n {sortedRows.map((row, i) => (\n <tr key={i} className=\"hover:bg-gray-50 transition-colors\">\n {localColumns.map(col => (\n <td key={col} className=\"px-4 py-3 text-sm text-gray-700\">{formatCell(row[col])}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </SortableContext>\n </DndContext>\n </div>\n )}\n </WidgetDataGuard>\n );\n};\n\nexport default TableStockCritico;\n"],"names":["SortableHeader","id","isDraggable","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","style","CSS","jsx","e","TableStockCritico","definition","period","isEditMode","data","loading","error","useWidgetFetch","tableConfig","rows","allKeys","originalColumns","c","localColumns","setLocalColumns","useState","useEffect","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","event","active","over","oldIdx","newIdx","arrayMove","sortedRows","field","dir","a","b","va","vb","formatCell","val","WidgetDataGuard","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","jsxs","col","row","i"],"mappings":"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"}
|