react-pivottable-plus 1.0.0

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.
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ShadcnDashboardUI = ShadcnDashboardUI;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _usePivot2 = require("../hooks/usePivot");
10
+ var _sortablejs = _interopRequireDefault(require("sortablejs"));
11
+ var _PivotTable = _interopRequireDefault(require("../PivotTable"));
12
+ var _Utilities = require("../Utilities");
13
+ var _lucideReact = require("lucide-react");
14
+ var _clsx = _interopRequireDefault(require("clsx"));
15
+ var _tailwindMerge = require("tailwind-merge");
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
17
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
18
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
19
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
22
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
23
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
24
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
25
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
26
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
27
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
28
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
29
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
30
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
31
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
32
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
33
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
34
+ function cn() {
35
+ for (var _len = arguments.length, inputs = new Array(_len), _key = 0; _key < _len; _key++) {
36
+ inputs[_key] = arguments[_key];
37
+ }
38
+ return (0, _tailwindMerge.twMerge)((0, _clsx["default"])(inputs));
39
+ }
40
+ var DnDContainer = function DnDContainer(_ref) {
41
+ var list = _ref.list,
42
+ setList = _ref.setList,
43
+ className = _ref.className,
44
+ children = _ref.children;
45
+ var el = (0, _react.useRef)(null);
46
+ var setListRef = (0, _react.useRef)(setList);
47
+ var listRef = (0, _react.useRef)(list);
48
+ (0, _react.useEffect)(function () {
49
+ setListRef.current = setList;
50
+ }, [setList]);
51
+ (0, _react.useEffect)(function () {
52
+ listRef.current = list;
53
+ if (el.current && el.current.sortable) {
54
+ el.current.sortable._currentList = list;
55
+ }
56
+ }, [list]);
57
+ (0, _react.useEffect)(function () {
58
+ var sortable = _sortablejs["default"].create(el.current, {
59
+ group: 'shared',
60
+ ghostClass: 'opacity-50',
61
+ animation: 150,
62
+ onEnd: function onEnd(evt) {
63
+ var from = evt.from,
64
+ to = evt.to,
65
+ oldIndex = evt.oldIndex,
66
+ newIndex = evt.newIndex,
67
+ item = evt.item;
68
+ var itemId = item.getAttribute('data-id');
69
+
70
+ // ── REVERSIÓN SÍNCRONA DEL DOM ──
71
+ // Muy importante: eliminamos el item de su posición actual (to)
72
+ // y lo devolvemos a la original (from) para que React lo encuentre.
73
+ if (from !== to || oldIndex !== newIndex) {
74
+ item.remove();
75
+ var nextEl = from.children[oldIndex];
76
+ if (nextEl) {
77
+ from.insertBefore(item, nextEl);
78
+ } else {
79
+ from.appendChild(item);
80
+ }
81
+ }
82
+ if (from === to) {
83
+ // ── Reordenamiento interno ──
84
+ var newOrder = _toConsumableArray(listRef.current);
85
+ newOrder.splice(oldIndex, 1);
86
+ newOrder.splice(newIndex, 0, itemId);
87
+ if (setListRef.current) {
88
+ setListRef.current(newOrder);
89
+ }
90
+ } else {
91
+ // ── Movimiento entre listas ──
92
+ var fromSortable = from.sortable;
93
+ var toSortable = to.sortable;
94
+ if (fromSortable !== null && fromSortable !== void 0 && fromSortable._setList && toSortable !== null && toSortable !== void 0 && toSortable._setList) {
95
+ var sourceItems = fromSortable._currentList.filter(function (id) {
96
+ return id !== itemId;
97
+ });
98
+ var targetItems = _toConsumableArray(toSortable._currentList);
99
+ targetItems.splice(newIndex, 0, itemId);
100
+ fromSortable._setList(sourceItems);
101
+ toSortable._setList(targetItems);
102
+ }
103
+ }
104
+ }
105
+ });
106
+ el.current.sortable = sortable;
107
+ sortable._setList = function (newOrder) {
108
+ if (setListRef.current) {
109
+ setListRef.current(newOrder);
110
+ }
111
+ };
112
+ sortable._currentList = listRef.current;
113
+ return function () {
114
+ return sortable.destroy();
115
+ };
116
+ }, []);
117
+ return /*#__PURE__*/_react["default"].createElement("div", {
118
+ className: className
119
+ }, /*#__PURE__*/_react["default"].createElement("ul", {
120
+ ref: el,
121
+ style: {
122
+ listStyleType: 'none',
123
+ padding: 0,
124
+ margin: 0,
125
+ minHeight: '1.5rem',
126
+ width: '100%',
127
+ display: 'flex',
128
+ flexWrap: 'wrap',
129
+ gap: '8px'
130
+ }
131
+ }, _react["default"].Children.map(children, function (child) {
132
+ return /*#__PURE__*/_react["default"].createElement("li", {
133
+ key: child.key,
134
+ "data-id": child.props['data-id']
135
+ }, child);
136
+ })));
137
+ };
138
+ function ShadcnDashboardUI(props) {
139
+ var _usePivot = (0, _usePivot2.usePivot)(props),
140
+ pivotProps = _usePivot.props,
141
+ pivotState = _usePivot.state,
142
+ actions = _usePivot.actions;
143
+ var _useState = (0, _react.useState)(null),
144
+ _useState2 = _slicedToArray(_useState, 2),
145
+ openDropdown = _useState2[0],
146
+ setOpenDropdown = _useState2[1];
147
+ var aggregatorName = pivotProps.aggregatorName;
148
+ var rendererName = pivotProps.rendererName;
149
+ var pivotData = new _Utilities.PivotData(_objectSpread(_objectSpread({}, pivotProps), {}, {
150
+ data: pivotState.materializedInput
151
+ }));
152
+ var totalPivotRows = pivotData.getRowKeys().length;
153
+ var totalRecords = pivotState.materializedInput.length;
154
+ var totalPages = Math.ceil(totalPivotRows / (pivotProps.pageSize || 20));
155
+ var unusedList = Object.keys(pivotState.attrValues).filter(function (e) {
156
+ return e && e.trim() !== '' && !pivotProps.rows.includes(e) && !pivotProps.cols.includes(e);
157
+ }).sort((0, _Utilities.sortAs)(pivotState.unusedOrder || []));
158
+ var colList = pivotProps.cols.filter(function (e) {
159
+ return e && e.trim() !== '';
160
+ });
161
+ var rowList = pivotProps.rows.filter(function (e) {
162
+ return e && e.trim() !== '';
163
+ });
164
+ var AttributeItem = function AttributeItem(_ref2) {
165
+ var attr = _ref2.attr,
166
+ pivotState = _ref2.pivotState,
167
+ pivotProps = _ref2.pivotProps,
168
+ actions = _ref2.actions,
169
+ openDropdown = _ref2.openDropdown,
170
+ setOpenDropdown = _ref2.setOpenDropdown;
171
+ var values = Object.keys(pivotState.attrValues[attr] || {});
172
+ var valueFilter = pivotProps.valueFilter[attr] || {};
173
+ var _useState3 = (0, _react.useState)(''),
174
+ _useState4 = _slicedToArray(_useState3, 2),
175
+ filterText = _useState4[0],
176
+ setFilterText = _useState4[1];
177
+ var filteredValues = values.filter(function (v) {
178
+ return v.toString().toLowerCase().includes(filterText.toLowerCase());
179
+ }).sort();
180
+ return /*#__PURE__*/_react["default"].createElement("div", {
181
+ className: "relative inline-flex items-center gap-2 bg-white border border-slate-200 rounded-xl px-3 py-1.5 text-[13px] font-semibold text-slate-700 shadow-sm cursor-grab hover:bg-slate-50 transition-colors group",
182
+ "data-id": attr
183
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.GripVertical, {
184
+ size: 14,
185
+ className: "text-slate-300 group-hover:text-slate-400 transition-colors"
186
+ }), /*#__PURE__*/_react["default"].createElement("span", null, attr), /*#__PURE__*/_react["default"].createElement("button", {
187
+ onClick: function onClick(e) {
188
+ e.stopPropagation();
189
+ // Si el elemento se está moviendo (clase de sortable activa), no abrir
190
+ if (e.currentTarget.closest('.sortable-chosen')) return;
191
+ setOpenDropdown(openDropdown === attr ? null : attr);
192
+ },
193
+ className: cn("text-slate-400 hover:text-slate-600 focus:outline-none ml-1 flex items-center justify-center p-0.5 rounded-sm transition-colors", Object.keys(valueFilter).length > 0 && "text-blue-600")
194
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.Filter, {
195
+ size: 14
196
+ })), openDropdown === attr && /*#__PURE__*/_react["default"].createElement("div", {
197
+ className: "absolute top-full left-0 mt-2 w-64 bg-white border border-slate-200 rounded-2xl shadow-2xl z-[1000] p-4 cursor-default",
198
+ onClick: function onClick(e) {
199
+ return e.stopPropagation();
200
+ }
201
+ }, /*#__PURE__*/_react["default"].createElement("div", {
202
+ className: "flex items-center justify-between mb-3"
203
+ }, /*#__PURE__*/_react["default"].createElement("h4", {
204
+ className: "text-[11px] font-black text-slate-400 uppercase tracking-widest"
205
+ }, "Filtrar: ", attr), /*#__PURE__*/_react["default"].createElement("button", {
206
+ onClick: function onClick() {
207
+ return setOpenDropdown(null);
208
+ },
209
+ className: "text-slate-400 hover:text-slate-600 font-bold text-lg"
210
+ }, "\xD7")), /*#__PURE__*/_react["default"].createElement("input", {
211
+ type: "text",
212
+ placeholder: "Buscar valores...",
213
+ className: "w-full px-3 py-2 text-xs border border-slate-200 rounded-lg mb-3 focus:outline-none focus:ring-2 focus:ring-blue-500/20",
214
+ value: filterText,
215
+ onChange: function onChange(e) {
216
+ return setFilterText(e.target.value);
217
+ }
218
+ }), /*#__PURE__*/_react["default"].createElement("div", {
219
+ className: "flex gap-2 mb-3"
220
+ }, /*#__PURE__*/_react["default"].createElement("button", {
221
+ onClick: function onClick() {
222
+ return actions.setValuesInFilter(attr, []);
223
+ },
224
+ className: "text-[10px] font-bold text-blue-600 hover:text-blue-700 uppercase"
225
+ }, "Seleccionar Todo"), /*#__PURE__*/_react["default"].createElement("button", {
226
+ onClick: function onClick() {
227
+ return actions.setValuesInFilter(attr, values);
228
+ },
229
+ className: "text-[10px] font-bold text-slate-400 hover:text-slate-500 uppercase"
230
+ }, "Limpiar")), /*#__PURE__*/_react["default"].createElement("div", {
231
+ className: "max-h-48 overflow-y-auto custom-scrollbar space-y-1"
232
+ }, filteredValues.map(function (v) {
233
+ return /*#__PURE__*/_react["default"].createElement("label", {
234
+ key: v,
235
+ className: "flex items-center gap-2 px-2 py-1.5 hover:bg-slate-50 rounded-lg cursor-pointer transition-colors"
236
+ }, /*#__PURE__*/_react["default"].createElement("input", {
237
+ type: "checkbox",
238
+ checked: !(v in valueFilter),
239
+ onChange: function onChange() {
240
+ return actions.toggleFilter(attr, v);
241
+ },
242
+ className: "w-3.5 h-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-500/20"
243
+ }), /*#__PURE__*/_react["default"].createElement("span", {
244
+ className: "text-xs text-slate-600 font-medium truncate"
245
+ }, v === 'null' ? /*#__PURE__*/_react["default"].createElement("em", {
246
+ className: "text-slate-400"
247
+ }, "null") : v));
248
+ }))));
249
+ };
250
+ var renderAttribute = function renderAttribute(attr) {
251
+ return /*#__PURE__*/_react["default"].createElement(AttributeItem, {
252
+ key: attr,
253
+ attr: attr,
254
+ "data-id": attr,
255
+ pivotState: pivotState,
256
+ pivotProps: pivotProps,
257
+ actions: actions,
258
+ openDropdown: openDropdown,
259
+ setOpenDropdown: setOpenDropdown
260
+ });
261
+ };
262
+ return /*#__PURE__*/_react["default"].createElement("div", {
263
+ className: "flex flex-col bg-white border border-slate-200 rounded-lg overflow-hidden font-sans text-slate-800 text-sm shadow-sm"
264
+ }, /*#__PURE__*/_react["default"].createElement("div", {
265
+ className: "flex w-full border-b border-slate-200 min-h-[4rem]"
266
+ }, /*#__PURE__*/_react["default"].createElement("div", {
267
+ className: "w-[300px] p-4 border-r border-slate-200 bg-white flex flex-col justify-start flex-shrink-0"
268
+ }, /*#__PURE__*/_react["default"].createElement("select", {
269
+ className: "w-full text-xs font-medium border border-slate-300 rounded px-3 py-1.5 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none hover:border-slate-400 bg-white text-slate-700",
270
+ value: rendererName,
271
+ onChange: function onChange(e) {
272
+ return actions.updateProp('rendererName', e.target.value);
273
+ }
274
+ }, Object.keys(pivotProps.renderers).map(function (r) {
275
+ return /*#__PURE__*/_react["default"].createElement("option", {
276
+ key: r,
277
+ value: r
278
+ }, r);
279
+ }))), /*#__PURE__*/_react["default"].createElement("div", {
280
+ className: "flex-1 p-4 bg-slate-50/80"
281
+ }, /*#__PURE__*/_react["default"].createElement(DnDContainer, {
282
+ list: unusedList,
283
+ setList: function setList(newOrder) {
284
+ actions.setUnusedOrder(newOrder);
285
+ },
286
+ className: "flex flex-wrap gap-2 w-full min-h-[1.5rem]"
287
+ }, unusedList.map(renderAttribute)))), /*#__PURE__*/_react["default"].createElement("div", {
288
+ className: "flex w-full border-b border-slate-200 min-h-[4rem]"
289
+ }, /*#__PURE__*/_react["default"].createElement("div", {
290
+ className: "w-[300px] p-4 border-r border-slate-200 bg-slate-50/30 flex-shrink-0 flex items-start"
291
+ }, /*#__PURE__*/_react["default"].createElement("div", {
292
+ className: "flex flex-col gap-2 w-full"
293
+ }, /*#__PURE__*/_react["default"].createElement("div", {
294
+ className: "flex items-center gap-2"
295
+ }, /*#__PURE__*/_react["default"].createElement("select", {
296
+ className: "flex-1 text-xs font-medium border border-slate-300 rounded px-3 py-1.5 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none hover:border-slate-400 bg-white text-slate-700",
297
+ value: aggregatorName,
298
+ onChange: function onChange(e) {
299
+ return actions.updateProp('aggregatorName', e.target.value);
300
+ }
301
+ }, Object.keys(pivotProps.aggregators).map(function (r) {
302
+ return /*#__PURE__*/_react["default"].createElement("option", {
303
+ key: r,
304
+ value: r
305
+ }, r);
306
+ })), /*#__PURE__*/_react["default"].createElement("div", {
307
+ className: "flex items-center text-slate-600 gap-1.5 text-base leading-none"
308
+ }, /*#__PURE__*/_react["default"].createElement("span", {
309
+ className: "cursor-pointer hover:text-slate-900 transition-colors"
310
+ }, "\u2195"), /*#__PURE__*/_react["default"].createElement("span", {
311
+ className: "cursor-pointer hover:text-slate-900 transition-colors"
312
+ }, "\u2194"))), pivotProps.aggregators[pivotProps.aggregatorName]([])().numInputs > 0 && /*#__PURE__*/_react["default"].createElement("select", {
313
+ className: "w-full text-xs font-medium border border-slate-300 rounded px-3 py-1.5 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none hover:border-slate-400 bg-white text-slate-700",
314
+ value: pivotProps.vals[0] || '',
315
+ onChange: function onChange(e) {
316
+ return actions.updateProp('vals', [e.target.value]);
317
+ }
318
+ }, Object.keys(pivotState.attrValues).map(function (r) {
319
+ return /*#__PURE__*/_react["default"].createElement("option", {
320
+ key: r,
321
+ value: r
322
+ }, r);
323
+ })))), /*#__PURE__*/_react["default"].createElement("div", {
324
+ className: "flex-1 p-4 bg-white"
325
+ }, /*#__PURE__*/_react["default"].createElement(DnDContainer, {
326
+ list: colList,
327
+ setList: function setList(newOrder) {
328
+ actions.updateProp('cols', newOrder);
329
+ },
330
+ className: "flex flex-wrap gap-2 w-full min-h-[1.5rem]"
331
+ }, colList.map(renderAttribute)))), /*#__PURE__*/_react["default"].createElement("div", {
332
+ className: "flex w-full min-h-[400px]"
333
+ }, /*#__PURE__*/_react["default"].createElement("div", {
334
+ className: "w-[300px] p-4 border-r border-slate-200 bg-white flex-shrink-0"
335
+ }, /*#__PURE__*/_react["default"].createElement(DnDContainer, {
336
+ list: rowList,
337
+ setList: function setList(newOrder) {
338
+ actions.updateProp('rows', newOrder);
339
+ },
340
+ className: "flex flex-col gap-2 w-full min-h-[1.5rem]"
341
+ }, rowList.map(renderAttribute))), /*#__PURE__*/_react["default"].createElement("div", {
342
+ className: "flex-1 w-full p-4 bg-slate-50/30 overflow-auto"
343
+ }, /*#__PURE__*/_react["default"].createElement(_PivotTable["default"], _extends({}, pivotProps, {
344
+ data: pivotState.materializedInput
345
+ })))), pivotProps.pagination && /*#__PURE__*/_react["default"].createElement("div", {
346
+ className: "flex items-center justify-between px-6 py-3 border-t border-slate-200 bg-white text-slate-600"
347
+ }, /*#__PURE__*/_react["default"].createElement("div", {
348
+ className: "text-[13px] font-medium"
349
+ }, "Registros: ", /*#__PURE__*/_react["default"].createElement("span", {
350
+ className: "text-slate-900"
351
+ }, totalRecords), " | Filas: ", /*#__PURE__*/_react["default"].createElement("span", {
352
+ className: "text-slate-900"
353
+ }, totalPivotRows)), /*#__PURE__*/_react["default"].createElement("div", {
354
+ className: "flex items-center gap-6"
355
+ }, /*#__PURE__*/_react["default"].createElement("div", {
356
+ className: "flex items-center gap-1.5"
357
+ }, /*#__PURE__*/_react["default"].createElement("button", {
358
+ className: "p-1 rounded-md hover:bg-slate-100 disabled:opacity-30 disabled:cursor-not-allowed transition-colors",
359
+ disabled: pivotProps.page <= 1,
360
+ onClick: function onClick() {
361
+ return actions.updateProp('page', 1);
362
+ }
363
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.ChevronsLeft, {
364
+ size: 18
365
+ })), /*#__PURE__*/_react["default"].createElement("button", {
366
+ className: "p-1 rounded-md hover:bg-slate-100 disabled:opacity-30 disabled:cursor-not-allowed transition-colors",
367
+ disabled: pivotProps.page <= 1,
368
+ onClick: function onClick() {
369
+ return actions.updateProp('page', pivotProps.page - 1);
370
+ }
371
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.ChevronLeft, {
372
+ size: 18
373
+ })), /*#__PURE__*/_react["default"].createElement("div", {
374
+ className: "flex items-center gap-2 mx-1"
375
+ }, /*#__PURE__*/_react["default"].createElement("span", {
376
+ className: "text-[13px] font-medium"
377
+ }, "P\xE1gina"), /*#__PURE__*/_react["default"].createElement("input", {
378
+ type: "number",
379
+ className: "w-12 h-8 text-center border border-slate-300 rounded-md text-[13px] font-semibold text-slate-900 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none",
380
+ value: pivotProps.page,
381
+ min: 1,
382
+ max: totalPages,
383
+ onChange: function onChange(e) {
384
+ var val = parseInt(e.target.value, 10);
385
+ if (val > 0 && val <= totalPages) {
386
+ actions.updateProp('page', val);
387
+ }
388
+ }
389
+ }), /*#__PURE__*/_react["default"].createElement("span", {
390
+ className: "text-[13px] font-medium text-slate-400"
391
+ }, "de ", totalPages)), /*#__PURE__*/_react["default"].createElement("button", {
392
+ className: "p-1 rounded-md hover:bg-slate-100 disabled:opacity-30 disabled:cursor-not-allowed transition-colors",
393
+ disabled: pivotProps.page >= totalPages,
394
+ onClick: function onClick() {
395
+ return actions.updateProp('page', pivotProps.page + 1);
396
+ }
397
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.ChevronRight, {
398
+ size: 18
399
+ })), /*#__PURE__*/_react["default"].createElement("button", {
400
+ className: "p-1 rounded-md hover:bg-slate-100 disabled:opacity-30 disabled:cursor-not-allowed transition-colors",
401
+ disabled: pivotProps.page >= totalPages,
402
+ onClick: function onClick() {
403
+ return actions.updateProp('page', totalPages);
404
+ }
405
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.ChevronsRight, {
406
+ size: 18
407
+ }))), /*#__PURE__*/_react["default"].createElement("div", {
408
+ className: "flex items-center gap-2 border-l border-slate-200 pl-6"
409
+ }, /*#__PURE__*/_react["default"].createElement("span", {
410
+ className: "text-[13px] font-medium text-slate-400"
411
+ }, "Mostrar"), /*#__PURE__*/_react["default"].createElement("select", {
412
+ className: "text-[13px] font-semibold border border-slate-300 rounded-md px-2 py-1 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none hover:border-slate-400 bg-white text-slate-900",
413
+ value: pivotProps.pageSize,
414
+ onChange: function onChange(e) {
415
+ actions.updateProp('pageSize', parseInt(e.target.value, 10));
416
+ actions.updateProp('page', 1);
417
+ }
418
+ }, [10, 20, 50, 100].map(function (n) {
419
+ return /*#__PURE__*/_react["default"].createElement("option", {
420
+ key: n,
421
+ value: n
422
+ }, n);
423
+ }))))));
424
+ }
425
+ //# sourceMappingURL=ShadcnDashboardUI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadcnDashboardUI.js","names":["_react","_interopRequireWildcard","require","_usePivot2","_sortablejs","_interopRequireDefault","_PivotTable","_Utilities","_lucideReact","_clsx","_tailwindMerge","e","__esModule","t","WeakMap","r","n","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","l","iterator","u","a","next","done","Array","isArray","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_arrayLikeToArray","toString","slice","constructor","name","from","test","cn","_len","inputs","_key","twMerge","clsx","DnDContainer","_ref","list","setList","className","children","el","useRef","setListRef","listRef","useEffect","current","sortable","_currentList","Sortable","create","group","ghostClass","animation","onEnd","evt","to","oldIndex","newIndex","item","itemId","getAttribute","remove","nextEl","insertBefore","appendChild","newOrder","splice","fromSortable","toSortable","_setList","sourceItems","id","targetItems","destroy","createElement","ref","style","listStyleType","padding","margin","minHeight","width","display","flexWrap","gap","React","Children","map","child","key","props","ShadcnDashboardUI","_usePivot","usePivot","pivotProps","pivotState","state","actions","_useState","useState","_useState2","openDropdown","setOpenDropdown","aggregatorName","rendererName","pivotData","PivotData","data","materializedInput","totalPivotRows","getRowKeys","totalRecords","totalPages","Math","ceil","pageSize","unusedList","attrValues","trim","rows","includes","cols","sort","sortAs","unusedOrder","colList","rowList","AttributeItem","_ref2","attr","values","valueFilter","_useState3","_useState4","filterText","setFilterText","filteredValues","v","toLowerCase","GripVertical","size","onClick","stopPropagation","currentTarget","closest","Filter","type","placeholder","onChange","target","setValuesInFilter","checked","toggleFilter","renderAttribute","updateProp","renderers","setUnusedOrder","aggregators","numInputs","vals","pagination","disabled","page","ChevronsLeft","ChevronLeft","min","max","val","parseInt","ChevronRight","ChevronsRight"],"sources":["../src/renderers/ShadcnDashboardUI.jsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\r\nimport { usePivot } from '../hooks/usePivot';\r\nimport Sortable from 'sortablejs';\r\nimport PivotTable from '../PivotTable';\r\nimport { PivotData, sortAs } from '../Utilities';\r\nimport { GripVertical, Filter, ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react';\r\nimport clsx from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nfunction cn(...inputs) {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\nconst DnDContainer = ({ list, setList, className, children }) => {\r\n const el = useRef(null);\r\n const setListRef = useRef(setList);\r\n const listRef = useRef(list);\r\n \r\n useEffect(() => {\r\n setListRef.current = setList;\r\n }, [setList]);\r\n\r\n useEffect(() => {\r\n listRef.current = list;\r\n if (el.current && el.current.sortable) {\r\n el.current.sortable._currentList = list;\r\n }\r\n }, [list]);\r\n\r\n useEffect(() => {\r\n const sortable = Sortable.create(el.current, {\r\n group: 'shared',\r\n ghostClass: 'opacity-50',\r\n animation: 150,\r\n onEnd: (evt) => {\r\n const { from, to, oldIndex, newIndex, item } = evt;\r\n const itemId = item.getAttribute('data-id');\r\n\r\n // ── REVERSIÓN SÍNCRONA DEL DOM ──\r\n // Muy importante: eliminamos el item de su posición actual (to)\r\n // y lo devolvemos a la original (from) para que React lo encuentre.\r\n if (from !== to || oldIndex !== newIndex) {\r\n item.remove();\r\n const nextEl = from.children[oldIndex];\r\n if (nextEl) {\r\n from.insertBefore(item, nextEl);\r\n } else {\r\n from.appendChild(item);\r\n }\r\n }\r\n\r\n if (from === to) {\r\n // ── Reordenamiento interno ──\r\n const newOrder = [...listRef.current];\r\n newOrder.splice(oldIndex, 1);\r\n newOrder.splice(newIndex, 0, itemId);\r\n \r\n if (setListRef.current) {\r\n setListRef.current(newOrder);\r\n }\r\n } else {\r\n // ── Movimiento entre listas ──\r\n const fromSortable = from.sortable;\r\n const toSortable = to.sortable;\r\n\r\n if (fromSortable?._setList && toSortable?._setList) {\r\n const sourceItems = fromSortable._currentList.filter(id => id !== itemId);\r\n const targetItems = [...toSortable._currentList];\r\n targetItems.splice(newIndex, 0, itemId);\r\n\r\n fromSortable._setList(sourceItems);\r\n toSortable._setList(targetItems);\r\n }\r\n }\r\n },\r\n });\r\n\r\n el.current.sortable = sortable;\r\n sortable._setList = (newOrder) => {\r\n if (setListRef.current) {\r\n setListRef.current(newOrder);\r\n }\r\n };\r\n sortable._currentList = listRef.current;\r\n\r\n return () => sortable.destroy();\r\n }, []);\r\n\r\n return (\r\n <div className={className}>\r\n <ul \r\n ref={el} \r\n style={{ \r\n listStyleType: 'none', \r\n padding: 0, \r\n margin: 0, \r\n minHeight: '1.5rem', \r\n width: '100%',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n }}\r\n >\r\n {React.Children.map(children, child => (\r\n <li key={child.key} data-id={child.props['data-id']}>\r\n {child}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n};\r\n\r\nexport function ShadcnDashboardUI(props) {\r\n const { props: pivotProps, state: pivotState, actions } = usePivot(props);\r\n const [openDropdown, setOpenDropdown] = useState(null);\r\n\r\n const aggregatorName = pivotProps.aggregatorName;\r\n const rendererName = pivotProps.rendererName;\r\n\r\n const pivotData = new PivotData({\r\n ...pivotProps,\r\n data: pivotState.materializedInput,\r\n });\r\n const totalPivotRows = pivotData.getRowKeys().length;\r\n const totalRecords = pivotState.materializedInput.length;\r\n const totalPages = Math.ceil(totalPivotRows / (pivotProps.pageSize || 20));\r\n\r\n const unusedList = Object.keys(pivotState.attrValues)\r\n .filter(e => e && e.trim() !== '' && !pivotProps.rows.includes(e) && !pivotProps.cols.includes(e))\r\n .sort(sortAs(pivotState.unusedOrder || []));\r\n\r\n const colList = pivotProps.cols.filter(e => e && e.trim() !== '');\r\n const rowList = pivotProps.rows.filter(e => e && e.trim() !== '');\r\n\r\n const AttributeItem = ({ attr, pivotState, pivotProps, actions, openDropdown, setOpenDropdown }) => {\r\n const values = Object.keys(pivotState.attrValues[attr] || {});\r\n const valueFilter = pivotProps.valueFilter[attr] || {};\r\n const [filterText, setFilterText] = useState('');\r\n \r\n const filteredValues = values.filter(v => \r\n v.toString().toLowerCase().includes(filterText.toLowerCase())\r\n ).sort();\r\n\r\n return (\r\n <div\r\n className=\"relative inline-flex items-center gap-2 bg-white border border-slate-200 rounded-xl px-3 py-1.5 text-[13px] font-semibold text-slate-700 shadow-sm cursor-grab hover:bg-slate-50 transition-colors group\"\r\n data-id={attr}\r\n >\r\n <GripVertical size={14} className=\"text-slate-300 group-hover:text-slate-400 transition-colors\" />\r\n <span>{attr}</span>\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n // Si el elemento se está moviendo (clase de sortable activa), no abrir\r\n if (e.currentTarget.closest('.sortable-chosen')) return;\r\n setOpenDropdown(openDropdown === attr ? null : attr);\r\n }}\r\n className={cn(\r\n \"text-slate-400 hover:text-slate-600 focus:outline-none ml-1 flex items-center justify-center p-0.5 rounded-sm transition-colors\",\r\n Object.keys(valueFilter).length > 0 && \"text-blue-600\"\r\n )}\r\n >\r\n <Filter size={14} />\r\n </button>\r\n\r\n {openDropdown === attr && (\r\n <div \r\n className=\"absolute top-full left-0 mt-2 w-64 bg-white border border-slate-200 rounded-2xl shadow-2xl z-[1000] p-4 cursor-default\"\r\n onClick={e => e.stopPropagation()}\r\n >\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-[11px] font-black text-slate-400 uppercase tracking-widest\">Filtrar: {attr}</h4>\r\n <button onClick={() => setOpenDropdown(null)} className=\"text-slate-400 hover:text-slate-600 font-bold text-lg\">×</button>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n placeholder=\"Buscar valores...\"\r\n className=\"w-full px-3 py-2 text-xs border border-slate-200 rounded-lg mb-3 focus:outline-none focus:ring-2 focus:ring-blue-500/20\"\r\n value={filterText}\r\n onChange={e => setFilterText(e.target.value)}\r\n />\r\n\r\n <div className=\"flex gap-2 mb-3\">\r\n <button\r\n onClick={() => actions.setValuesInFilter(attr, [])}\r\n className=\"text-[10px] font-bold text-blue-600 hover:text-blue-700 uppercase\"\r\n >\r\n Seleccionar Todo\r\n </button>\r\n <button\r\n onClick={() => actions.setValuesInFilter(attr, values)}\r\n className=\"text-[10px] font-bold text-slate-400 hover:text-slate-500 uppercase\"\r\n >\r\n Limpiar\r\n </button>\r\n </div>\r\n\r\n <div className=\"max-h-48 overflow-y-auto custom-scrollbar space-y-1\">\r\n {filteredValues.map(v => (\r\n <label key={v} className=\"flex items-center gap-2 px-2 py-1.5 hover:bg-slate-50 rounded-lg cursor-pointer transition-colors\">\r\n <input\r\n type=\"checkbox\"\r\n checked={!(v in valueFilter)}\r\n onChange={() => actions.toggleFilter(attr, v)}\r\n className=\"w-3.5 h-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-500/20\"\r\n />\r\n <span className=\"text-xs text-slate-600 font-medium truncate\">\r\n {v === 'null' ? <em className=\"text-slate-400\">null</em> : v}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderAttribute = (attr) => (\r\n <AttributeItem\r\n key={attr}\r\n attr={attr}\r\n data-id={attr}\r\n pivotState={pivotState}\r\n pivotProps={pivotProps}\r\n actions={actions}\r\n openDropdown={openDropdown}\r\n setOpenDropdown={setOpenDropdown}\r\n />\r\n );\r\n\r\n return (\r\n <div className=\"flex flex-col bg-white border border-slate-200 rounded-lg overflow-hidden font-sans text-slate-800 text-sm shadow-sm\">\r\n {/* Row 1: Renderer Dropdown & Unused Attributes */}\r\n <div className=\"flex w-full border-b border-slate-200 min-h-[4rem]\">\r\n {/* Renderer */}\r\n <div className=\"w-[300px] p-4 border-r border-slate-200 bg-white flex flex-col justify-start flex-shrink-0\">\r\n <select\r\n className=\"w-full text-xs font-medium border border-slate-300 rounded px-3 py-1.5 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none hover:border-slate-400 bg-white text-slate-700\"\r\n value={rendererName}\r\n onChange={(e) => actions.updateProp('rendererName', e.target.value)}\r\n >\r\n {Object.keys(pivotProps.renderers).map(r => <option key={r} value={r}>{r}</option>)}\r\n </select>\r\n </div>\r\n\r\n {/* Unused Attrs */}\r\n <div className=\"flex-1 p-4 bg-slate-50/80\">\r\n <DnDContainer\r\n list={unusedList}\r\n setList={(newOrder) => {\r\n actions.setUnusedOrder(newOrder);\r\n }}\r\n className=\"flex flex-wrap gap-2 w-full min-h-[1.5rem]\"\r\n >\r\n {unusedList.map(renderAttribute)}\r\n </DnDContainer>\r\n </div>\r\n </div>\r\n \r\n {/* Row 2: Aggregators & Column Attributes */}\r\n <div className=\"flex w-full border-b border-slate-200 min-h-[4rem]\">\r\n {/* Aggregators */}\r\n <div className=\"w-[300px] p-4 border-r border-slate-200 bg-slate-50/30 flex-shrink-0 flex items-start\">\r\n <div className=\"flex flex-col gap-2 w-full\">\r\n <div className=\"flex items-center gap-2\">\r\n <select\r\n className=\"flex-1 text-xs font-medium border border-slate-300 rounded px-3 py-1.5 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none hover:border-slate-400 bg-white text-slate-700\"\r\n value={aggregatorName}\r\n onChange={(e) => actions.updateProp('aggregatorName', e.target.value)}\r\n >\r\n {Object.keys(pivotProps.aggregators).map(r => <option key={r} value={r}>{r}</option>)}\r\n </select>\r\n \r\n <div className=\"flex items-center text-slate-600 gap-1.5 text-base leading-none\">\r\n <span className=\"cursor-pointer hover:text-slate-900 transition-colors\">↕</span>\r\n <span className=\"cursor-pointer hover:text-slate-900 transition-colors\">↔</span>\r\n </div>\r\n </div>\r\n \r\n {pivotProps.aggregators[pivotProps.aggregatorName]([])().numInputs > 0 && (\r\n <select\r\n className=\"w-full text-xs font-medium border border-slate-300 rounded px-3 py-1.5 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none hover:border-slate-400 bg-white text-slate-700\"\r\n value={pivotProps.vals[0] || ''}\r\n onChange={(e) => actions.updateProp('vals', [e.target.value])}\r\n >\r\n {Object.keys(pivotState.attrValues).map(r => <option key={r} value={r}>{r}</option>)}\r\n </select>\r\n )}\r\n </div>\r\n </div>\r\n \r\n {/* Col Attrs */}\r\n <div className=\"flex-1 p-4 bg-white\">\r\n <DnDContainer\r\n list={colList}\r\n setList={(newOrder) => {\r\n actions.updateProp('cols', newOrder);\r\n }}\r\n className=\"flex flex-wrap gap-2 w-full min-h-[1.5rem]\"\r\n >\r\n {colList.map(renderAttribute)}\r\n </DnDContainer>\r\n </div>\r\n </div>\r\n \r\n {/* Row 3: Row Attributes & Table Data */}\r\n <div className=\"flex w-full min-h-[400px]\">\r\n {/* Row Attrs */}\r\n <div className=\"w-[300px] p-4 border-r border-slate-200 bg-white flex-shrink-0\">\r\n <DnDContainer\r\n list={rowList}\r\n setList={(newOrder) => {\r\n actions.updateProp('rows', newOrder);\r\n }}\r\n className=\"flex flex-col gap-2 w-full min-h-[1.5rem]\"\r\n >\r\n {rowList.map(renderAttribute)}\r\n </DnDContainer>\r\n </div>\r\n {/* Table Output */}\r\n <div className=\"flex-1 w-full p-4 bg-slate-50/30 overflow-auto\">\r\n <PivotTable {...pivotProps} data={pivotState.materializedInput} />\r\n </div>\r\n </div>\r\n\r\n {/* Footer: Totals and Pagination */}\r\n {pivotProps.pagination && (\r\n <div className=\"flex items-center justify-between px-6 py-3 border-t border-slate-200 bg-white text-slate-600\">\r\n <div className=\"text-[13px] font-medium\">\r\n Registros: <span className=\"text-slate-900\">{totalRecords}</span> | Filas: <span className=\"text-slate-900\">{totalPivotRows}</span>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-6\">\r\n <div className=\"flex items-center gap-1.5\">\r\n <button\r\n className=\"p-1 rounded-md hover:bg-slate-100 disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\r\n disabled={pivotProps.page <= 1}\r\n onClick={() => actions.updateProp('page', 1)}\r\n >\r\n <ChevronsLeft size={18} />\r\n </button>\r\n <button\r\n className=\"p-1 rounded-md hover:bg-slate-100 disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\r\n disabled={pivotProps.page <= 1}\r\n onClick={() => actions.updateProp('page', pivotProps.page - 1)}\r\n >\r\n <ChevronLeft size={18} />\r\n </button>\r\n\r\n <div className=\"flex items-center gap-2 mx-1\">\r\n <span className=\"text-[13px] font-medium\">Página</span>\r\n <input\r\n type=\"number\"\r\n className=\"w-12 h-8 text-center border border-slate-300 rounded-md text-[13px] font-semibold text-slate-900 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none\"\r\n value={pivotProps.page}\r\n min={1}\r\n max={totalPages}\r\n onChange={(e) => {\r\n const val = parseInt(e.target.value, 10);\r\n if (val > 0 && val <= totalPages) {\r\n actions.updateProp('page', val);\r\n }\r\n }}\r\n />\r\n <span className=\"text-[13px] font-medium text-slate-400\">de {totalPages}</span>\r\n </div>\r\n\r\n <button\r\n className=\"p-1 rounded-md hover:bg-slate-100 disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\r\n disabled={pivotProps.page >= totalPages}\r\n onClick={() => actions.updateProp('page', pivotProps.page + 1)}\r\n >\r\n <ChevronRight size={18} />\r\n </button>\r\n <button\r\n className=\"p-1 rounded-md hover:bg-slate-100 disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\r\n disabled={pivotProps.page >= totalPages}\r\n onClick={() => actions.updateProp('page', totalPages)}\r\n >\r\n <ChevronsRight size={18} />\r\n </button>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2 border-l border-slate-200 pl-6\">\r\n <span className=\"text-[13px] font-medium text-slate-400\">Mostrar</span>\r\n <select\r\n className=\"text-[13px] font-semibold border border-slate-300 rounded-md px-2 py-1 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 outline-none hover:border-slate-400 bg-white text-slate-900\"\r\n value={pivotProps.pageSize}\r\n onChange={(e) => {\r\n actions.updateProp('pageSize', parseInt(e.target.value, 10));\r\n actions.updateProp('page', 1);\r\n }}\r\n >\r\n {[10, 20, 50, 100].map(n => (\r\n <option key={n} value={n}>\r\n {n}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}