vue-laravel-crud 2.0.5 → 2.0.7

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.
@@ -93,9 +93,115 @@ function normalizeComponent (
93
93
  }
94
94
  }
95
95
 
96
+ // Componente funcional para renderizar filtros custom con callback
97
+ const RenderCustomFilter = {
98
+ functional: true,
99
+ props: {
100
+ renderFunction: {
101
+ type: Function,
102
+ required: true
103
+ },
104
+ customFilter: {
105
+ type: Object,
106
+ required: true
107
+ },
108
+ filter: {
109
+ type: Array,
110
+ default: () => []
111
+ },
112
+ internalFilterByProp: {
113
+ type: Function,
114
+ required: true
115
+ },
116
+ getFilterForColumn: {
117
+ type: Function,
118
+ required: true
119
+ },
120
+ onChangeFilter: {
121
+ type: Function,
122
+ required: true
123
+ }
124
+ },
125
+ render(h, context) {
126
+ const {
127
+ renderFunction,
128
+ customFilter,
129
+ filter,
130
+ internalFilterByProp,
131
+ getFilterForColumn,
132
+ onChangeFilter
133
+ } = context.props;
134
+ return renderFunction(h, {
135
+ column: customFilter,
136
+ filter: filter,
137
+ internalFilterByProp: internalFilterByProp,
138
+ getFilterForColumn: getFilterForColumn,
139
+ onChangeFilter: onChangeFilter
140
+ });
141
+ }
142
+ };
96
143
  const _sfc_main$f = {
97
144
  name: 'CrudFilters',
98
- inject: ['columns', 'isColumnHasFilter', 'filter', 'internalFilterByProp', 'optionsLoaded', 'onChangeFilter', 'resetFilters']
145
+ components: {
146
+ RenderCustomFilter
147
+ },
148
+ inject: ['columns', 'customFilters', 'isColumnHasFilter', 'isCustomFilterEnabled', 'filter', 'internalFilterByProp', 'optionsLoaded', 'onChangeFilter', 'resetFilters', 'setupFilters', 'internalFilters'],
149
+ methods: {
150
+ // Método helper para obtener el filtro de forma segura, creándolo si no existe
151
+ getFilterForColumn(column) {
152
+ let filter = this.internalFilterByProp(column.prop);
153
+
154
+ // Si el filtro no existe, intentar inicializar los filtros
155
+ if (!filter) {
156
+ // Verificar si hay filtros inicializados
157
+ if (this.internalFilters && this.internalFilters.length === 0) {
158
+ this.setupFilters();
159
+ // Intentar obtener el filtro nuevamente después de inicializar
160
+ filter = this.internalFilterByProp(column.prop);
161
+ }
162
+ }
163
+
164
+ // Si aún no existe, crear un objeto temporal para evitar errores
165
+ if (!filter) {
166
+ return {
167
+ value: null
168
+ };
169
+ }
170
+ return filter;
171
+ },
172
+ // Método helper específico para campos de fecha (from)
173
+ getFilterForDateFrom(column) {
174
+ const filter = this.internalFilterByProp(column.prop + '_from');
175
+ if (!filter) {
176
+ if (this.internalFilters && this.internalFilters.length === 0) {
177
+ this.setupFilters();
178
+ return this.internalFilterByProp(column.prop + '_from') || {
179
+ value: null
180
+ };
181
+ }
182
+ return {
183
+ value: null
184
+ };
185
+ }
186
+ return filter;
187
+ },
188
+ // Método helper específico para campos de fecha (to)
189
+ getFilterForDateTo(column) {
190
+ const filter = this.internalFilterByProp(column.prop + '_to');
191
+ if (!filter) {
192
+ if (this.internalFilters && this.internalFilters.length === 0) {
193
+ this.setupFilters();
194
+ return this.internalFilterByProp(column.prop + '_to') || {
195
+ value: null
196
+ };
197
+ }
198
+ return {
199
+ value: null
200
+ };
201
+ }
202
+ return filter;
203
+ }
204
+ }
99
205
  };
100
206
  var _sfc_render$f = function render() {
101
207
  var _vm = this,
@@ -105,15 +211,15 @@ var _sfc_render$f = function render() {
105
211
  }, [_vm._l(_vm.columns, function (column, indexc) {
106
212
  return _c('div', {
107
213
  key: indexc
108
- }, [_vm.isColumnHasFilter(column) ? _c('div', [_vm.internalFilterByProp(column.prop) ? _vm._t('sidebar-filter-' + column.prop, function () {
214
+ }, [_vm.isColumnHasFilter(column) ? _c('div', [_vm._t('sidebar-filter-' + column.prop, function () {
109
215
  return [column.type == 'boolean' ? _c('div', {
110
216
  staticClass: "form-group"
111
217
  }, [_c('label', [_vm._v(_vm._s(column.label))]), _c('select', {
112
218
  directives: [{
113
219
  name: "model",
114
220
  rawName: "v-model",
115
- value: _vm.internalFilterByProp(column.prop).value,
116
- expression: "internalFilterByProp(column.prop).value"
221
+ value: _vm.getFilterForColumn(column).value,
222
+ expression: "getFilterForColumn(column).value"
117
223
  }],
118
224
  staticClass: "form-control",
119
225
  on: {
@@ -124,7 +230,7 @@ var _sfc_render$f = function render() {
124
230
  var val = "_value" in o ? o._value : o.value;
125
231
  return val;
126
232
  });
127
- _vm.$set(_vm.internalFilterByProp(column.prop), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
233
+ _vm.$set(_vm.getFilterForColumn(column), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
128
234
  }, function ($event) {
129
235
  return _vm.onChangeFilter($event);
130
236
  }]
@@ -155,11 +261,11 @@ var _sfc_render$f = function render() {
155
261
  "locale": "es"
156
262
  },
157
263
  model: {
158
- value: _vm.internalFilterByProp(column.prop + '_from').value,
264
+ value: _vm.getFilterForDateFrom(column).value,
159
265
  callback: function ($$v) {
160
- _vm.$set(_vm.internalFilterByProp(column.prop + '_from'), "value", $$v);
266
+ _vm.$set(_vm.getFilterForDateFrom(column), "value", $$v);
161
267
  },
162
- expression: "internalFilterByProp(column.prop + '_from').value\n "
268
+ expression: "getFilterForDateFrom(column).value\n "
163
269
  }
164
270
  })], 1), _c('div', {
165
271
  staticClass: "col-6"
@@ -171,20 +277,90 @@ var _sfc_render$f = function render() {
171
277
  "locale": "es"
172
278
  },
173
279
  model: {
174
- value: _vm.internalFilterByProp(column.prop + '_to').value,
280
+ value: _vm.getFilterForDateTo(column).value,
175
281
  callback: function ($$v) {
176
- _vm.$set(_vm.internalFilterByProp(column.prop + '_to'), "value", $$v);
282
+ _vm.$set(_vm.getFilterForDateTo(column), "value", $$v);
177
283
  },
178
- expression: "internalFilterByProp(column.prop + '_to').value\n "
284
+ expression: "getFilterForDateTo(column).value\n "
179
285
  }
180
- })], 1)])]) : column.type == 'state' ? _c('div', {
286
+ })], 1)])]) : column.type == 'number' || column.type == 'money' ? _c('div', {
181
287
  staticClass: "form-group"
182
- }, [_c('label', [_vm._v(_vm._s(column.label))]), _vm.optionsLoaded ? _c('select', {
288
+ }, [_c('label', [_vm._v(_vm._s(column.label))]), _c('div', {
289
+ staticClass: "row"
290
+ }, [_c('div', {
291
+ staticClass: "col-6"
292
+ }, [_c('input', {
293
+ directives: [{
294
+ name: "model",
295
+ rawName: "v-model.number",
296
+ value: _vm.getFilterForDateFrom(column).value,
297
+ expression: "getFilterForDateFrom(column).value",
298
+ modifiers: {
299
+ "number": true
300
+ }
301
+ }],
302
+ staticClass: "form-control",
303
+ attrs: {
304
+ "type": "number",
305
+ "step": column.type == 'money' ? '0.01' : '1',
306
+ "placeholder": "Desde"
307
+ },
308
+ domProps: {
309
+ "value": _vm.getFilterForDateFrom(column).value
310
+ },
311
+ on: {
312
+ "change": function ($event) {
313
+ return _vm.onChangeFilter($event);
314
+ },
315
+ "input": function ($event) {
316
+ if ($event.target.composing) return;
317
+ _vm.$set(_vm.getFilterForDateFrom(column), "value", _vm._n($event.target.value));
318
+ },
319
+ "blur": function ($event) {
320
+ return _vm.$forceUpdate();
321
+ }
322
+ }
323
+ })]), _c('div', {
324
+ staticClass: "col-6"
325
+ }, [_c('input', {
326
+ directives: [{
327
+ name: "model",
328
+ rawName: "v-model.number",
329
+ value: _vm.getFilterForDateTo(column).value,
330
+ expression: "getFilterForDateTo(column).value",
331
+ modifiers: {
332
+ "number": true
333
+ }
334
+ }],
335
+ staticClass: "form-control",
336
+ attrs: {
337
+ "type": "number",
338
+ "step": column.type == 'money' ? '0.01' : '1',
339
+ "placeholder": "Hasta"
340
+ },
341
+ domProps: {
342
+ "value": _vm.getFilterForDateTo(column).value
343
+ },
344
+ on: {
345
+ "change": function ($event) {
346
+ return _vm.onChangeFilter($event);
347
+ },
348
+ "input": function ($event) {
349
+ if ($event.target.composing) return;
350
+ _vm.$set(_vm.getFilterForDateTo(column), "value", _vm._n($event.target.value));
351
+ },
352
+ "blur": function ($event) {
353
+ return _vm.$forceUpdate();
354
+ }
355
+ }
356
+ })])])]) : column.type == 'state' ? _c('div', {
357
+ staticClass: "form-group"
358
+ }, [_c('label', [_vm._v(_vm._s(column.label))]), column.options && Array.isArray(column.options) ? _c('select', {
183
359
  directives: [{
184
360
  name: "model",
185
361
  rawName: "v-model",
186
- value: _vm.internalFilterByProp(column.prop).value,
187
- expression: "internalFilterByProp(column.prop).value"
362
+ value: _vm.getFilterForColumn(column).value,
363
+ expression: "getFilterForColumn(column).value"
188
364
  }],
189
365
  staticClass: "form-control",
190
366
  on: {
@@ -195,7 +371,7 @@ var _sfc_render$f = function render() {
195
371
  var val = "_value" in o ? o._value : o.value;
196
372
  return val;
197
373
  });
198
- _vm.$set(_vm.internalFilterByProp(column.prop), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
374
+ _vm.$set(_vm.getFilterForColumn(column), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
199
375
  }, function ($event) {
200
376
  return _vm.onChangeFilter($event);
201
377
  }]
@@ -206,19 +382,19 @@ var _sfc_render$f = function render() {
206
382
  }
207
383
  }), _vm._l(column.options, function (option) {
208
384
  return _c('option', {
209
- key: option.id ? option.id : option.value,
385
+ key: option.value || option.id,
210
386
  domProps: {
211
- "value": option.id ? option.id : option.value
387
+ "value": option.value
212
388
  }
213
- }, [_vm._v(" " + _vm._s(option.text ? option.text : option.label ? option.label : "") + " ")]);
389
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
214
390
  })], 2) : _vm._e()]) : column.type == 'array' ? _c('div', {
215
391
  staticClass: "form-group"
216
- }, [_c('label', [_vm._v(_vm._s(column.label))]), _vm.optionsLoaded ? _c('select', {
392
+ }, [_c('label', [_vm._v(_vm._s(column.label))]), column.options && Array.isArray(column.options) ? _c('select', {
217
393
  directives: [{
218
394
  name: "model",
219
395
  rawName: "v-model",
220
- value: _vm.internalFilterByProp(column.prop).value,
221
- expression: "internalFilterByProp(column.prop).value"
396
+ value: _vm.getFilterForColumn(column).value,
397
+ expression: "getFilterForColumn(column).value"
222
398
  }],
223
399
  staticClass: "form-control",
224
400
  on: {
@@ -229,7 +405,7 @@ var _sfc_render$f = function render() {
229
405
  var val = "_value" in o ? o._value : o.value;
230
406
  return val;
231
407
  });
232
- _vm.$set(_vm.internalFilterByProp(column.prop), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
408
+ _vm.$set(_vm.getFilterForColumn(column), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
233
409
  }, function ($event) {
234
410
  return _vm.onChangeFilter($event);
235
411
  }]
@@ -238,32 +414,32 @@ var _sfc_render$f = function render() {
238
414
  attrs: {
239
415
  "value": ""
240
416
  }
241
- }), column.options ? _vm._l(column.options, function (option) {
417
+ }), _vm._l(column.options, function (option) {
242
418
  return _c('option', {
243
- key: option.id ? option.id : option.value,
419
+ key: option.value || option.id,
244
420
  domProps: {
245
- "value": option.id ? option.id : option.value
421
+ "value": option.value
246
422
  }
247
- }, [_vm._v(" " + _vm._s(option.text ? option.text : option.label ? option.label : "") + " ")]);
248
- }) : _vm._e()], 2) : _vm._e()]) : _c('div', {
423
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
424
+ })], 2) : _vm._e()]) : _c('div', {
249
425
  staticClass: "form-group"
250
426
  }, [_c('label', [_vm._v(_vm._s(column.label))]), _c('input', {
251
427
  directives: [{
252
428
  name: "model",
253
429
  rawName: "v-model.lazy",
254
- value: _vm.internalFilterByProp(column.prop).value,
255
- expression: "internalFilterByProp(column.prop).value",
430
+ value: _vm.getFilterForColumn(column).value,
431
+ expression: "getFilterForColumn(column).value",
256
432
  modifiers: {
257
433
  "lazy": true
258
434
  }
259
435
  }],
260
436
  staticClass: "form-control",
261
437
  domProps: {
262
- "value": _vm.internalFilterByProp(column.prop).value
438
+ "value": _vm.getFilterForColumn(column).value
263
439
  },
264
440
  on: {
265
441
  "change": [function ($event) {
266
- _vm.$set(_vm.internalFilterByProp(column.prop), "value", $event.target.value);
442
+ _vm.$set(_vm.getFilterForColumn(column), "value", $event.target.value);
267
443
  }, function ($event) {
268
444
  return _vm.onChangeFilter($event);
269
445
  }]
@@ -272,8 +448,261 @@ var _sfc_render$f = function render() {
272
448
  }, {
273
449
  "column": column,
274
450
  "filter": _vm.filter,
275
- "internalFilterByProp": _vm.internalFilterByProp
276
- }) : _vm._e()], 2) : _vm._e()]);
451
+ "internalFilterByProp": _vm.internalFilterByProp,
452
+ "getFilterForColumn": _vm.getFilterForColumn
453
+ })], 2) : _vm._e()]);
454
+ }), _vm._l(_vm.customFilters, function (customFilter, indexcf) {
455
+ return _c('div', {
456
+ key: 'custom-' + indexcf
457
+ }, [_vm.isCustomFilterEnabled(customFilter) ? _c('div', [_vm._t('sidebar-filter-custom-' + customFilter.prop, function () {
458
+ return [typeof customFilter.type === 'function' ? _c('RenderCustomFilter', {
459
+ attrs: {
460
+ "render-function": customFilter.type,
461
+ "custom-filter": customFilter,
462
+ "filter": _vm.filter,
463
+ "internal-filter-by-prop": _vm.internalFilterByProp,
464
+ "get-filter-for-column": _vm.getFilterForColumn,
465
+ "on-change-filter": _vm.onChangeFilter
466
+ }
467
+ }) : [customFilter.type == 'boolean' ? _c('div', {
468
+ staticClass: "form-group"
469
+ }, [_c('label', [_vm._v(_vm._s(customFilter.label))]), _c('select', {
470
+ directives: [{
471
+ name: "model",
472
+ rawName: "v-model",
473
+ value: _vm.getFilterForColumn(customFilter).value,
474
+ expression: "getFilterForColumn(customFilter).value"
475
+ }],
476
+ staticClass: "form-control",
477
+ on: {
478
+ "change": [function ($event) {
479
+ var $$selectedVal = Array.prototype.filter.call($event.target.options, function (o) {
480
+ return o.selected;
481
+ }).map(function (o) {
482
+ var val = "_value" in o ? o._value : o.value;
483
+ return val;
484
+ });
485
+ _vm.$set(_vm.getFilterForColumn(customFilter), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
486
+ }, function ($event) {
487
+ return _vm.onChangeFilter($event);
488
+ }]
489
+ }
490
+ }, [_c('option', {
491
+ attrs: {
492
+ "value": ""
493
+ }
494
+ }), _c('option', {
495
+ attrs: {
496
+ "value": "1"
497
+ }
498
+ }, [_vm._v("Sí")]), _c('option', {
499
+ attrs: {
500
+ "value": "0"
501
+ }
502
+ }, [_vm._v("No")])])]) : customFilter.type == 'date' ? _c('div', {
503
+ staticClass: "form-group"
504
+ }, [_c('label', [_vm._v(_vm._s(customFilter.label))]), _c('div', {
505
+ staticClass: "row"
506
+ }, [_c('div', {
507
+ staticClass: "col-6"
508
+ }, [_c('b-form-datepicker', {
509
+ attrs: {
510
+ "today-button": "",
511
+ "reset-button": "",
512
+ "close-button": "",
513
+ "locale": "es"
514
+ },
515
+ model: {
516
+ value: _vm.getFilterForDateFrom(customFilter).value,
517
+ callback: function ($$v) {
518
+ _vm.$set(_vm.getFilterForDateFrom(customFilter), "value", $$v);
519
+ },
520
+ expression: "getFilterForDateFrom(customFilter).value\n "
521
+ }
522
+ })], 1), _c('div', {
523
+ staticClass: "col-6"
524
+ }, [_c('b-form-datepicker', {
525
+ attrs: {
526
+ "today-button": "",
527
+ "reset-button": "",
528
+ "close-button": "",
529
+ "locale": "es"
530
+ },
531
+ model: {
532
+ value: _vm.getFilterForDateTo(customFilter).value,
533
+ callback: function ($$v) {
534
+ _vm.$set(_vm.getFilterForDateTo(customFilter), "value", $$v);
535
+ },
536
+ expression: "getFilterForDateTo(customFilter).value\n "
537
+ }
538
+ })], 1)])]) : customFilter.type == 'number' || customFilter.type == 'money' ? _c('div', {
539
+ staticClass: "form-group"
540
+ }, [_c('label', [_vm._v(_vm._s(customFilter.label))]), _c('div', {
541
+ staticClass: "row"
542
+ }, [_c('div', {
543
+ staticClass: "col-6"
544
+ }, [_c('input', {
545
+ directives: [{
546
+ name: "model",
547
+ rawName: "v-model.number",
548
+ value: _vm.getFilterForDateFrom(customFilter).value,
549
+ expression: "getFilterForDateFrom(customFilter).value",
550
+ modifiers: {
551
+ "number": true
552
+ }
553
+ }],
554
+ staticClass: "form-control",
555
+ attrs: {
556
+ "type": "number",
557
+ "step": customFilter.type == 'money' ? '0.01' : '1',
558
+ "placeholder": "Desde"
559
+ },
560
+ domProps: {
561
+ "value": _vm.getFilterForDateFrom(customFilter).value
562
+ },
563
+ on: {
564
+ "change": function ($event) {
565
+ return _vm.onChangeFilter($event);
566
+ },
567
+ "input": function ($event) {
568
+ if ($event.target.composing) return;
569
+ _vm.$set(_vm.getFilterForDateFrom(customFilter), "value", _vm._n($event.target.value));
570
+ },
571
+ "blur": function ($event) {
572
+ return _vm.$forceUpdate();
573
+ }
574
+ }
575
+ })]), _c('div', {
576
+ staticClass: "col-6"
577
+ }, [_c('input', {
578
+ directives: [{
579
+ name: "model",
580
+ rawName: "v-model.number",
581
+ value: _vm.getFilterForDateTo(customFilter).value,
582
+ expression: "getFilterForDateTo(customFilter).value",
583
+ modifiers: {
584
+ "number": true
585
+ }
586
+ }],
587
+ staticClass: "form-control",
588
+ attrs: {
589
+ "type": "number",
590
+ "step": customFilter.type == 'money' ? '0.01' : '1',
591
+ "placeholder": "Hasta"
592
+ },
593
+ domProps: {
594
+ "value": _vm.getFilterForDateTo(customFilter).value
595
+ },
596
+ on: {
597
+ "change": function ($event) {
598
+ return _vm.onChangeFilter($event);
599
+ },
600
+ "input": function ($event) {
601
+ if ($event.target.composing) return;
602
+ _vm.$set(_vm.getFilterForDateTo(customFilter), "value", _vm._n($event.target.value));
603
+ },
604
+ "blur": function ($event) {
605
+ return _vm.$forceUpdate();
606
+ }
607
+ }
608
+ })])])]) : customFilter.type == 'state' ? _c('div', {
609
+ staticClass: "form-group"
610
+ }, [_c('label', [_vm._v(_vm._s(customFilter.label))]), customFilter.options && Array.isArray(customFilter.options) ? _c('select', {
611
+ directives: [{
612
+ name: "model",
613
+ rawName: "v-model",
614
+ value: _vm.getFilterForColumn(customFilter).value,
615
+ expression: "getFilterForColumn(customFilter).value"
616
+ }],
617
+ staticClass: "form-control",
618
+ on: {
619
+ "change": [function ($event) {
620
+ var $$selectedVal = Array.prototype.filter.call($event.target.options, function (o) {
621
+ return o.selected;
622
+ }).map(function (o) {
623
+ var val = "_value" in o ? o._value : o.value;
624
+ return val;
625
+ });
626
+ _vm.$set(_vm.getFilterForColumn(customFilter), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
627
+ }, function ($event) {
628
+ return _vm.onChangeFilter($event);
629
+ }]
630
+ }
631
+ }, [_c('option', {
632
+ attrs: {
633
+ "value": ""
634
+ }
635
+ }), _vm._l(customFilter.options, function (option) {
636
+ return _c('option', {
637
+ key: option.value || option.id,
638
+ domProps: {
639
+ "value": option.value
640
+ }
641
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
642
+ })], 2) : _vm._e()]) : customFilter.type == 'array' ? _c('div', {
643
+ staticClass: "form-group"
644
+ }, [_c('label', [_vm._v(_vm._s(customFilter.label))]), customFilter.options && Array.isArray(customFilter.options) ? _c('select', {
645
+ directives: [{
646
+ name: "model",
647
+ rawName: "v-model",
648
+ value: _vm.getFilterForColumn(customFilter).value,
649
+ expression: "getFilterForColumn(customFilter).value"
650
+ }],
651
+ staticClass: "form-control",
652
+ on: {
653
+ "change": [function ($event) {
654
+ var $$selectedVal = Array.prototype.filter.call($event.target.options, function (o) {
655
+ return o.selected;
656
+ }).map(function (o) {
657
+ var val = "_value" in o ? o._value : o.value;
658
+ return val;
659
+ });
660
+ _vm.$set(_vm.getFilterForColumn(customFilter), "value", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
661
+ }, function ($event) {
662
+ return _vm.onChangeFilter($event);
663
+ }]
664
+ }
665
+ }, [_c('option', {
666
+ attrs: {
667
+ "value": ""
668
+ }
669
+ }), _vm._l(customFilter.options, function (option) {
670
+ return _c('option', {
671
+ key: option.value || option.id,
672
+ domProps: {
673
+ "value": option.value
674
+ }
675
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
676
+ })], 2) : _vm._e()]) : _c('div', {
677
+ staticClass: "form-group"
678
+ }, [_c('label', [_vm._v(_vm._s(customFilter.label))]), _c('input', {
679
+ directives: [{
680
+ name: "model",
681
+ rawName: "v-model.lazy",
682
+ value: _vm.getFilterForColumn(customFilter).value,
683
+ expression: "getFilterForColumn(customFilter).value",
684
+ modifiers: {
685
+ "lazy": true
686
+ }
687
+ }],
688
+ staticClass: "form-control",
689
+ domProps: {
690
+ "value": _vm.getFilterForColumn(customFilter).value
691
+ },
692
+ on: {
693
+ "change": [function ($event) {
694
+ _vm.$set(_vm.getFilterForColumn(customFilter), "value", $event.target.value);
695
+ }, function ($event) {
696
+ return _vm.onChangeFilter($event);
697
+ }]
698
+ }
699
+ })])]];
700
+ }, {
701
+ "column": customFilter,
702
+ "filter": _vm.filter,
703
+ "internalFilterByProp": _vm.internalFilterByProp,
704
+ "getFilterForColumn": _vm.getFilterForColumn
705
+ })], 2) : _vm._e()]);
277
706
  }), _c('div', {
278
707
  staticClass: "mt-3 d-flex justify-content-center"
279
708
  }, [_c('button', {
@@ -298,19 +727,29 @@ var CrudFilters = __component__$f.exports;
298
727
 
299
728
  var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
300
729
 
301
- var css$8 = "\n.crud-header[data-v-ed8e5777] {\r\n display: flex;\r\n justify-content: space-between;\r\n max-height: 3rem;\n}\n.crud-title[data-v-ed8e5777] {\r\n margin: 0;\n}\n.crud-search[data-v-ed8e5777] {\r\n max-width: 15rem;\n}\n.crud-search .btn[data-v-ed8e5777] {\r\n border-top-left-radius: 0;\r\n border-bottom-left-radius: 0;\r\n border-top-right-radius: 0.375rem;\r\n border-bottom-right-radius: 0.375rem;\n}\n.crud-search .btn.open[data-v-ed8e5777] {\r\n border-top-right-radius: 0;\r\n border-bottom-right-radius: 0;\n}\n.table-options[data-v-ed8e5777] {\r\n margin-bottom: 1rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\n}\r\n";
302
- n(css$8, {});
730
+ var css$9 = "\n.crud-header[data-v-4fb65bb3] {\n display: flex;\n justify-content: space-between;\n max-height: 3rem;\n}\n.crud-title[data-v-4fb65bb3] {\n margin: 0;\n}\n.crud-search[data-v-4fb65bb3] {\n max-width: 15rem;\n}\n.crud-search .btn[data-v-4fb65bb3] {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 0.375rem;\n border-bottom-right-radius: 0.375rem;\n}\n.crud-search .btn.open[data-v-4fb65bb3] {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.table-options[data-v-4fb65bb3] {\n margin-bottom: 1rem;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n}\n";
731
+ n(css$9, {});
303
732
 
304
733
  const _sfc_main$e = {
305
734
  name: 'CrudHeader',
306
735
  components: {
307
736
  CrudFilters
308
737
  },
309
- inject: ['showHeader', 'showTitle', 'title', 'filterSidebarOpen', 'showImport', 'showExport', 'showPrincipalSortBtn', 'principalSort', 'bulkDelete', 'showCreateBtn', 'enableFilters', 'displayModeToggler', 'displayMode', 'displayModes', 'showSearch', 'displaySearch', 'search', 'searchPlaceholder', 'loading', 'messageImport', 'messageExport', 'messageNew', 'createItem', 'toggleDisplayMode', 'togglePrincipalSort', 'confirmBulkDelete', 'toggleFilters', 'refresh'],
738
+ inject: ['showHeader', 'showTitle', 'title', 'filterSidebarOpen', 'showImport', 'showExport', 'showPrincipalSortBtn', 'principalSort', 'bulkDelete', 'showCreateBtn', 'enableFilters', 'displayModeToggler', 'displayMode', 'displayModes', 'showSearch', 'displaySearch', 'search', 'searchPlaceholder', 'loading', 'messageImport', 'messageExport', 'messageNew', 'createItem', 'toggleDisplayMode', 'togglePrincipalSort', 'confirmBulkDelete', 'toggleFilters', 'refresh', 'showImportModal', 'showExportModal'],
310
739
  computed: {
311
740
  sidebarVisible() {
312
741
  // Acceder directamente al componente padre para obtener reactividad
313
742
  return this.$parent ? this.$parent.filterSidebarOpen : this.filterSidebarOpen;
743
+ },
744
+ currentDisplayMode() {
745
+ if (!this.displayMode) return 1;
746
+ if (this.displayMode.value !== undefined) {
747
+ return this.displayMode.value;
748
+ }
749
+ if (typeof this.displayMode === 'function') {
750
+ return this.displayMode();
751
+ }
752
+ return this.displayMode;
314
753
  }
315
754
  },
316
755
  methods: {
@@ -420,7 +859,7 @@ var _sfc_render$e = function render() {
420
859
  return _vm.toggleDisplayMode();
421
860
  }
422
861
  }
423
- }, [_vm.displayMode == _vm.displayModes.MODE_TABLE ? _c('b-icon-card-list') : _vm.displayMode == _vm.displayModes.MODE_CARDS ? _c('b-icon-table') : _vm._e()], 1) : _vm._e(), _vm.showSearch ? _c('div', {
862
+ }, [_vm.currentDisplayMode == _vm.displayModes.MODE_TABLE ? _c('b-icon-card-list') : _vm.currentDisplayMode == _vm.displayModes.MODE_CARDS ? _c('b-icon-table') : _vm._e()], 1) : _vm._e(), _vm.showSearch ? _c('div', {
424
863
  staticClass: "crud-search m-0"
425
864
  }, [_c('b-input-group', [_c('b-input-group-prepend', [_c('b-button', {
426
865
  class: {
@@ -459,7 +898,7 @@ var _sfc_render$e = function render() {
459
898
  })], 2)], 1)], 1) : _vm._e();
460
899
  };
461
900
  var _sfc_staticRenderFns$e = [];
462
- var __component__$e = /*#__PURE__*/normalizeComponent(_sfc_main$e, _sfc_render$e, _sfc_staticRenderFns$e, false, null, "ed8e5777", null, null);
901
+ var __component__$e = /*#__PURE__*/normalizeComponent(_sfc_main$e, _sfc_render$e, _sfc_staticRenderFns$e, false, null, "4fb65bb3", null, null);
463
902
  var CrudHeader = __component__$e.exports;
464
903
 
465
904
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -721,7 +1160,7 @@ function toggleClass(el, name, state) {
721
1160
  }
722
1161
  }
723
1162
 
724
- function css$7(el, prop, val) {
1163
+ function css$8(el, prop, val) {
725
1164
  var style = el && el.style;
726
1165
 
727
1166
  if (style) {
@@ -750,7 +1189,7 @@ function matrix(el, selfOnly) {
750
1189
  appliedTransforms = el;
751
1190
  } else {
752
1191
  do {
753
- var transform = css$7(el, 'transform');
1192
+ var transform = css$8(el, 'transform');
754
1193
 
755
1194
  if (transform && transform !== 'none') {
756
1195
  appliedTransforms = transform + ' ' + appliedTransforms;
@@ -832,11 +1271,11 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS
832
1271
 
833
1272
  if (!IE11OrLess) {
834
1273
  do {
835
- if (container && container.getBoundingClientRect && (css$7(container, 'transform') !== 'none' || relativeToNonStaticParent && css$7(container, 'position') !== 'static')) {
1274
+ if (container && container.getBoundingClientRect && (css$8(container, 'transform') !== 'none' || relativeToNonStaticParent && css$8(container, 'position') !== 'static')) {
836
1275
  var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container
837
1276
 
838
- top -= containerRect.top + parseInt(css$7(container, 'border-top-width'));
839
- left -= containerRect.left + parseInt(css$7(container, 'border-left-width'));
1277
+ top -= containerRect.top + parseInt(css$8(container, 'border-top-width'));
1278
+ left -= containerRect.left + parseInt(css$8(container, 'border-left-width'));
840
1279
  bottom = top + elRect.height;
841
1280
  right = left + elRect.width;
842
1281
  break;
@@ -943,7 +1382,7 @@ function getChild(el, childNum, options) {
943
1382
  function lastChild(el, selector) {
944
1383
  var last = el.lastElementChild;
945
1384
 
946
- while (last && (last === Sortable.ghost || css$7(last, 'display') === 'none' || selector && !matches(last, selector))) {
1385
+ while (last && (last === Sortable.ghost || css$8(last, 'display') === 'none' || selector && !matches(last, selector))) {
947
1386
  last = last.previousElementSibling;
948
1387
  }
949
1388
 
@@ -1029,7 +1468,7 @@ function getParentAutoScrollElement(el, includeSelf) {
1029
1468
  do {
1030
1469
  // we don't need to get elem css if it isn't even overflowing in the first place (performance)
1031
1470
  if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
1032
- var elemCSS = css$7(elem);
1471
+ var elemCSS = css$8(elem);
1033
1472
 
1034
1473
  if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {
1035
1474
  if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();
@@ -1105,19 +1544,19 @@ function clone(el) {
1105
1544
  }
1106
1545
 
1107
1546
  function setRect(el, rect) {
1108
- css$7(el, 'position', 'absolute');
1109
- css$7(el, 'top', rect.top);
1110
- css$7(el, 'left', rect.left);
1111
- css$7(el, 'width', rect.width);
1112
- css$7(el, 'height', rect.height);
1547
+ css$8(el, 'position', 'absolute');
1548
+ css$8(el, 'top', rect.top);
1549
+ css$8(el, 'left', rect.left);
1550
+ css$8(el, 'width', rect.width);
1551
+ css$8(el, 'height', rect.height);
1113
1552
  }
1114
1553
 
1115
1554
  function unsetRect(el) {
1116
- css$7(el, 'position', '');
1117
- css$7(el, 'top', '');
1118
- css$7(el, 'left', '');
1119
- css$7(el, 'width', '');
1120
- css$7(el, 'height', '');
1555
+ css$8(el, 'position', '');
1556
+ css$8(el, 'top', '');
1557
+ css$8(el, 'left', '');
1558
+ css$8(el, 'width', '');
1559
+ css$8(el, 'height', '');
1121
1560
  }
1122
1561
 
1123
1562
  var expando = 'Sortable' + new Date().getTime();
@@ -1131,7 +1570,7 @@ function AnimationStateManager() {
1131
1570
  if (!this.options.animation) return;
1132
1571
  var children = [].slice.call(this.el.children);
1133
1572
  children.forEach(function (child) {
1134
- if (css$7(child, 'display') === 'none' || child === Sortable.ghost) return;
1573
+ if (css$8(child, 'display') === 'none' || child === Sortable.ghost) return;
1135
1574
  animationStates.push({
1136
1575
  target: child,
1137
1576
  rect: getRect(child)
@@ -1238,8 +1677,8 @@ function AnimationStateManager() {
1238
1677
  },
1239
1678
  animate: function animate(target, currentRect, toRect, duration) {
1240
1679
  if (duration) {
1241
- css$7(target, 'transition', '');
1242
- css$7(target, 'transform', '');
1680
+ css$8(target, 'transition', '');
1681
+ css$8(target, 'transform', '');
1243
1682
  var elMatrix = matrix(this.el),
1244
1683
  scaleX = elMatrix && elMatrix.a,
1245
1684
  scaleY = elMatrix && elMatrix.d,
@@ -1247,15 +1686,15 @@ function AnimationStateManager() {
1247
1686
  translateY = (currentRect.top - toRect.top) / (scaleY || 1);
1248
1687
  target.animatingX = !!translateX;
1249
1688
  target.animatingY = !!translateY;
1250
- css$7(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');
1689
+ css$8(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');
1251
1690
  repaint(target); // repaint
1252
1691
 
1253
- css$7(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));
1254
- css$7(target, 'transform', 'translate3d(0,0,0)');
1692
+ css$8(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));
1693
+ css$8(target, 'transform', 'translate3d(0,0,0)');
1255
1694
  typeof target.animated === 'number' && clearTimeout(target.animated);
1256
1695
  target.animated = setTimeout(function () {
1257
- css$7(target, 'transition', '');
1258
- css$7(target, 'transform', '');
1696
+ css$8(target, 'transition', '');
1697
+ css$8(target, 'transform', '');
1259
1698
  target.animated = false;
1260
1699
  target.animatingX = false;
1261
1700
  target.animatingY = false;
@@ -1524,12 +1963,12 @@ supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in
1524
1963
  return el.style.pointerEvents === 'auto';
1525
1964
  }(),
1526
1965
  _detectDirection = function _detectDirection(el, options) {
1527
- var elCSS = css$7(el),
1966
+ var elCSS = css$8(el),
1528
1967
  elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),
1529
1968
  child1 = getChild(el, 0, options),
1530
1969
  child2 = getChild(el, 1, options),
1531
- firstChildCSS = child1 && css$7(child1),
1532
- secondChildCSS = child2 && css$7(child2),
1970
+ firstChildCSS = child1 && css$8(child1),
1971
+ secondChildCSS = child2 && css$8(child2),
1533
1972
  firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,
1534
1973
  secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;
1535
1974
 
@@ -1618,12 +2057,12 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {
1618
2057
  },
1619
2058
  _hideGhostForTarget = function _hideGhostForTarget() {
1620
2059
  if (!supportCssPointerEvents && ghostEl) {
1621
- css$7(ghostEl, 'display', 'none');
2060
+ css$8(ghostEl, 'display', 'none');
1622
2061
  }
1623
2062
  },
1624
2063
  _unhideGhostForTarget = function _unhideGhostForTarget() {
1625
2064
  if (!supportCssPointerEvents && ghostEl) {
1626
- css$7(ghostEl, 'display', '');
2065
+ css$8(ghostEl, 'display', '');
1627
2066
  }
1628
2067
  }; // #1184 fix - Prevent click event on fallback if dragged but item not changed position
1629
2068
 
@@ -2158,10 +2597,10 @@ Sortable.prototype =
2158
2597
  }
2159
2598
 
2160
2599
  var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
2161
- css$7(ghostEl, 'webkitTransform', cssMatrix);
2162
- css$7(ghostEl, 'mozTransform', cssMatrix);
2163
- css$7(ghostEl, 'msTransform', cssMatrix);
2164
- css$7(ghostEl, 'transform', cssMatrix);
2600
+ css$8(ghostEl, 'webkitTransform', cssMatrix);
2601
+ css$8(ghostEl, 'mozTransform', cssMatrix);
2602
+ css$8(ghostEl, 'msTransform', cssMatrix);
2603
+ css$8(ghostEl, 'transform', cssMatrix);
2165
2604
  lastDx = dx;
2166
2605
  lastDy = dy;
2167
2606
  touchEvt = touch;
@@ -2182,7 +2621,7 @@ Sortable.prototype =
2182
2621
  // Get relatively positioned parent
2183
2622
  ghostRelativeParent = container;
2184
2623
 
2185
- while (css$7(ghostRelativeParent, 'position') === 'static' && css$7(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {
2624
+ while (css$8(ghostRelativeParent, 'position') === 'static' && css$8(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {
2186
2625
  ghostRelativeParent = ghostRelativeParent.parentNode;
2187
2626
  }
2188
2627
 
@@ -2201,22 +2640,22 @@ Sortable.prototype =
2201
2640
  toggleClass(ghostEl, options.ghostClass, false);
2202
2641
  toggleClass(ghostEl, options.fallbackClass, true);
2203
2642
  toggleClass(ghostEl, options.dragClass, true);
2204
- css$7(ghostEl, 'transition', '');
2205
- css$7(ghostEl, 'transform', '');
2206
- css$7(ghostEl, 'box-sizing', 'border-box');
2207
- css$7(ghostEl, 'margin', 0);
2208
- css$7(ghostEl, 'top', rect.top);
2209
- css$7(ghostEl, 'left', rect.left);
2210
- css$7(ghostEl, 'width', rect.width);
2211
- css$7(ghostEl, 'height', rect.height);
2212
- css$7(ghostEl, 'opacity', '0.8');
2213
- css$7(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');
2214
- css$7(ghostEl, 'zIndex', '100000');
2215
- css$7(ghostEl, 'pointerEvents', 'none');
2643
+ css$8(ghostEl, 'transition', '');
2644
+ css$8(ghostEl, 'transform', '');
2645
+ css$8(ghostEl, 'box-sizing', 'border-box');
2646
+ css$8(ghostEl, 'margin', 0);
2647
+ css$8(ghostEl, 'top', rect.top);
2648
+ css$8(ghostEl, 'left', rect.left);
2649
+ css$8(ghostEl, 'width', rect.width);
2650
+ css$8(ghostEl, 'height', rect.height);
2651
+ css$8(ghostEl, 'opacity', '0.8');
2652
+ css$8(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');
2653
+ css$8(ghostEl, 'zIndex', '100000');
2654
+ css$8(ghostEl, 'pointerEvents', 'none');
2216
2655
  Sortable.ghost = ghostEl;
2217
2656
  container.appendChild(ghostEl); // Set transform-origin
2218
2657
 
2219
- css$7(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');
2658
+ css$8(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');
2220
2659
  }
2221
2660
  },
2222
2661
  _onDragStart: function _onDragStart(
@@ -2285,7 +2724,7 @@ Sortable.prototype =
2285
2724
 
2286
2725
  on(document, 'drop', _this); // #1276 fix:
2287
2726
 
2288
- css$7(dragEl, 'transform', 'translateZ(0)');
2727
+ css$8(dragEl, 'transform', 'translateZ(0)');
2289
2728
  }
2290
2729
 
2291
2730
  awaitingDragStarted = true;
@@ -2294,7 +2733,7 @@ Sortable.prototype =
2294
2733
  moved = true;
2295
2734
 
2296
2735
  if (Safari) {
2297
- css$7(document.body, 'user-select', 'none');
2736
+ css$8(document.body, 'user-select', 'none');
2298
2737
  }
2299
2738
  },
2300
2739
  // Returns true - if no further action is needed (either inserted or another condition)
@@ -2514,7 +2953,7 @@ Sortable.prototype =
2514
2953
  do {
2515
2954
  dragIndex -= direction;
2516
2955
  sibling = parentEl.children[dragIndex];
2517
- } while (sibling && (css$7(sibling, 'display') === 'none' || sibling === ghostEl));
2956
+ } while (sibling && (css$8(sibling, 'display') === 'none' || sibling === ghostEl));
2518
2957
  } // If dragEl is already beside target: Do not insert
2519
2958
 
2520
2959
 
@@ -2629,10 +3068,10 @@ Sortable.prototype =
2629
3068
  this._offUpEvents();
2630
3069
 
2631
3070
  if (Safari) {
2632
- css$7(document.body, 'user-select', '');
3071
+ css$8(document.body, 'user-select', '');
2633
3072
  }
2634
3073
 
2635
- css$7(dragEl, 'transform', '');
3074
+ css$8(dragEl, 'transform', '');
2636
3075
 
2637
3076
  if (evt) {
2638
3077
  if (moved) {
@@ -2907,7 +3346,7 @@ Sortable.prototype =
2907
3346
  if (!cloneHidden) {
2908
3347
  pluginEvent('hideClone', this);
2909
3348
  if (Sortable.eventCanceled) return;
2910
- css$7(cloneEl, 'display', 'none');
3349
+ css$8(cloneEl, 'display', 'none');
2911
3350
 
2912
3351
  if (this.options.removeCloneOnHide && cloneEl.parentNode) {
2913
3352
  cloneEl.parentNode.removeChild(cloneEl);
@@ -2939,7 +3378,7 @@ Sortable.prototype =
2939
3378
  this.animate(dragEl, cloneEl);
2940
3379
  }
2941
3380
 
2942
- css$7(cloneEl, 'display', '');
3381
+ css$8(cloneEl, 'display', '');
2943
3382
  cloneHidden = false;
2944
3383
  }
2945
3384
  }
@@ -3114,7 +3553,7 @@ if (documentExists) {
3114
3553
  Sortable.utils = {
3115
3554
  on: on,
3116
3555
  off: off,
3117
- css: css$7,
3556
+ css: css$8,
3118
3557
  find: find,
3119
3558
  is: function is(el, selector) {
3120
3559
  return !!closest(el, selector, el, false);
@@ -3341,7 +3780,7 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) {
3341
3780
  canScrollY = void 0,
3342
3781
  scrollWidth = el.scrollWidth,
3343
3782
  scrollHeight = el.scrollHeight,
3344
- elCSS = css$7(el),
3783
+ elCSS = css$8(el),
3345
3784
  scrollPosX = el.scrollLeft,
3346
3785
  scrollPosY = el.scrollTop;
3347
3786
 
@@ -3677,7 +4116,7 @@ function MultiDragPlugin() {
3677
4116
  if (!this.isMultiDrag) return;
3678
4117
  insertMultiDragClones(false, rootEl);
3679
4118
  multiDragClones.forEach(function (clone) {
3680
- css$7(clone, 'display', '');
4119
+ css$8(clone, 'display', '');
3681
4120
  });
3682
4121
  cloneNowShown();
3683
4122
  clonesHidden = false;
@@ -3691,7 +4130,7 @@ function MultiDragPlugin() {
3691
4130
  cancel = _ref5.cancel;
3692
4131
  if (!this.isMultiDrag) return;
3693
4132
  multiDragClones.forEach(function (clone) {
3694
- css$7(clone, 'display', 'none');
4133
+ css$8(clone, 'display', 'none');
3695
4134
 
3696
4135
  if (_this.options.removeCloneOnHide && clone.parentNode) {
3697
4136
  clone.parentNode.removeChild(clone);
@@ -3735,7 +4174,7 @@ function MultiDragPlugin() {
3735
4174
  if (this.options.animation) {
3736
4175
  multiDragElements.forEach(function (multiDragElement) {
3737
4176
  if (multiDragElement === dragEl$1) return;
3738
- css$7(multiDragElement, 'position', 'absolute');
4177
+ css$8(multiDragElement, 'position', 'absolute');
3739
4178
  });
3740
4179
  var dragRect = getRect(dragEl$1, false, true, true);
3741
4180
  multiDragElements.forEach(function (multiDragElement) {
@@ -6630,8 +7069,8 @@ vuedraggable_umd.exports;
6630
7069
  var vuedraggable_umdExports = vuedraggable_umd.exports;
6631
7070
  var draggable = /*@__PURE__*/getDefaultExportFromCjs(vuedraggable_umdExports);
6632
7071
 
6633
- var css$6 = "\r\n/* Fijar ancho de la columna de acciones en el header */\n.actions-header[data-v-37559362] {\r\n width: 1%;\r\n white-space: nowrap;\n}\r\n";
6634
- n(css$6, {});
7072
+ var css$7 = "\r\n/* Fijar ancho de la columna de acciones en el header */\n.actions-header[data-v-3de96e53] {\r\n width: 1%;\r\n white-space: nowrap;\n}\n.sort-filter[data-v-3de96e53] {\r\n cursor: pointer;\r\n visibility: hidden;\r\n display: inline-block;\n}\n.sort-filter-visible[data-v-3de96e53] {\r\n visibility: visible;\n}\r\n";
7073
+ n(css$7, {});
6635
7074
 
6636
7075
  const _sfc_main$d = {
6637
7076
  name: 'TableHeader',
@@ -6689,7 +7128,7 @@ var _sfc_render$d = function render() {
6689
7128
  _vm.hoveredColumn = null;
6690
7129
  }
6691
7130
  }
6692
- }, [_vm.enableFilters && _vm.filtersVisible && _vm.isColumnHasFilter(column) && _vm.internalFilterByProp(column.prop) ? _vm._t('filter-' + column.prop, function () {
7131
+ }, [_vm.enableFilters && _vm.filtersVisible && _vm.isColumnHasFilter(column) && (_vm.internalFilterByProp(column.prop) || _vm.internalFilterByProp(column.prop + '_from')) ? _vm._t('filter-' + column.prop, function () {
6693
7132
  return [_c('div', {
6694
7133
  staticClass: "form-group"
6695
7134
  }, [column.type == 'boolean' ? _c('select', {
@@ -6761,7 +7200,75 @@ var _sfc_render$d = function render() {
6761
7200
  },
6762
7201
  expression: "internalFilterByProp(column.prop + '_to').value\n "
6763
7202
  }
6764
- })], 1)]) : column.type == 'state' && _vm.optionsLoaded ? _c('select', {
7203
+ })], 1)]) : column.type == 'number' || column.type == 'money' || column.type == 'price' ? _c('div', {
7204
+ staticClass: "row"
7205
+ }, [_c('div', {
7206
+ staticClass: "col-6"
7207
+ }, [_c('input', {
7208
+ directives: [{
7209
+ name: "model",
7210
+ rawName: "v-model.number",
7211
+ value: _vm.internalFilterByProp(column.prop + '_from').value,
7212
+ expression: "internalFilterByProp(column.prop + '_from').value",
7213
+ modifiers: {
7214
+ "number": true
7215
+ }
7216
+ }],
7217
+ staticClass: "form-control form-control-md p-2",
7218
+ attrs: {
7219
+ "type": "number",
7220
+ "step": column.type == 'money' || column.type == 'price' ? '0.01' : '1',
7221
+ "placeholder": "Desde"
7222
+ },
7223
+ domProps: {
7224
+ "value": _vm.internalFilterByProp(column.prop + '_from').value
7225
+ },
7226
+ on: {
7227
+ "change": function ($event) {
7228
+ return _vm.onChangeFilter($event);
7229
+ },
7230
+ "input": function ($event) {
7231
+ if ($event.target.composing) return;
7232
+ _vm.$set(_vm.internalFilterByProp(column.prop + '_from'), "value", _vm._n($event.target.value));
7233
+ },
7234
+ "blur": function ($event) {
7235
+ return _vm.$forceUpdate();
7236
+ }
7237
+ }
7238
+ })]), _c('div', {
7239
+ staticClass: "col-6"
7240
+ }, [_c('input', {
7241
+ directives: [{
7242
+ name: "model",
7243
+ rawName: "v-model.number",
7244
+ value: _vm.internalFilterByProp(column.prop + '_to').value,
7245
+ expression: "internalFilterByProp(column.prop + '_to').value",
7246
+ modifiers: {
7247
+ "number": true
7248
+ }
7249
+ }],
7250
+ staticClass: "form-control form-control-md p-2",
7251
+ attrs: {
7252
+ "type": "number",
7253
+ "step": column.type == 'money' || column.type == 'price' ? '0.01' : '1',
7254
+ "placeholder": "Hasta"
7255
+ },
7256
+ domProps: {
7257
+ "value": _vm.internalFilterByProp(column.prop + '_to').value
7258
+ },
7259
+ on: {
7260
+ "change": function ($event) {
7261
+ return _vm.onChangeFilter($event);
7262
+ },
7263
+ "input": function ($event) {
7264
+ if ($event.target.composing) return;
7265
+ _vm.$set(_vm.internalFilterByProp(column.prop + '_to'), "value", _vm._n($event.target.value));
7266
+ },
7267
+ "blur": function ($event) {
7268
+ return _vm.$forceUpdate();
7269
+ }
7270
+ }
7271
+ })])]) : column.type == 'state' && column.options && Array.isArray(column.options) ? _c('select', {
6765
7272
  directives: [{
6766
7273
  name: "model",
6767
7274
  rawName: "v-model",
@@ -6793,10 +7300,10 @@ var _sfc_render$d = function render() {
6793
7300
  return _c('option', {
6794
7301
  key: indexo,
6795
7302
  domProps: {
6796
- "value": option.id
7303
+ "value": option.value
6797
7304
  }
6798
- }, [_vm._v(" " + _vm._s(option.text ? option.text : option.label ? option.label : "") + " ")]);
6799
- })], 2) : column.type == 'array' && _vm.optionsLoaded ? _c('select', {
7305
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
7306
+ })], 2) : column.type == 'array' && column.options && Array.isArray(column.options) ? _c('select', {
6800
7307
  directives: [{
6801
7308
  name: "model",
6802
7309
  rawName: "v-model",
@@ -6828,9 +7335,9 @@ var _sfc_render$d = function render() {
6828
7335
  return _c('option', {
6829
7336
  key: indexo,
6830
7337
  domProps: {
6831
- "value": option.id
7338
+ "value": option.value
6832
7339
  }
6833
- }, [_vm._v(" " + _vm._s(option.text ? option.text : option.label ? option.label : "") + " ")]);
7340
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
6834
7341
  })], 2) : column.type == 'checkbox' ? _c('b-form-checkbox', {
6835
7342
  attrs: {
6836
7343
  "name": "select-all",
@@ -6891,19 +7398,26 @@ var _sfc_render$d = function render() {
6891
7398
  on: {
6892
7399
  "change": _vm.toggleAll
6893
7400
  }
6894
- })], 1) : _c('span', [_vm._v(_vm._s(column.label))]), _vm.isSortableColumn(column) && _vm.shouldShowSortIcon(column) ? _c('span', {
6895
- staticClass: "sort-filter",
7401
+ })], 1) : _c('span', [_vm._v(_vm._s(column.label))]), _vm.isSortableColumn(column) ? _c('span', {
7402
+ staticClass: "sort-filter ml-1",
7403
+ class: {
7404
+ 'sort-filter-visible': _vm.shouldShowSortIcon(column)
7405
+ },
6896
7406
  on: {
6897
7407
  "click": function ($event) {
6898
7408
  return _vm.toggleSortFilter(column);
6899
7409
  }
6900
7410
  }
6901
- }, [_vm.getSortIconDirection(column) === 'up' ? _c('b-icon-sort-up') : _vm._e(), _vm.getSortIconDirection(column) === 'down' ? _c('b-icon-sort-down') : _vm._e()], 1) : _vm._e()], 2);
7411
+ }, [_vm.getSortIconDirection(column) === 'up' ? _c('b-icon-sort-up') : _vm.getSortIconDirection(column) === 'down' ? _c('b-icon-sort-down') : _c('b-icon-sort-up', {
7412
+ staticStyle: {
7413
+ "visibility": "hidden"
7414
+ }
7415
+ })], 1) : _vm._e()], 2);
6902
7416
  });
6903
7417
  })], 2)]);
6904
7418
  };
6905
7419
  var _sfc_staticRenderFns$d = [];
6906
- var __component__$d = /*#__PURE__*/normalizeComponent(_sfc_main$d, _sfc_render$d, _sfc_staticRenderFns$d, false, null, "37559362", null, null);
7420
+ var __component__$d = /*#__PURE__*/normalizeComponent(_sfc_main$d, _sfc_render$d, _sfc_staticRenderFns$d, false, null, "3de96e53", null, null);
6907
7421
  var TableHeader = __component__$d.exports;
6908
7422
 
6909
7423
  function commonjsRequire(path) {
@@ -12599,8 +13113,8 @@ moment$1.exports;
12599
13113
  var momentExports = moment$1.exports;
12600
13114
  var moment = /*@__PURE__*/getDefaultExportFromCjs(momentExports);
12601
13115
 
12602
- var css$5 = "\r\n/* Fijar ancho de la columna de acciones */\n.actions-cell[data-v-3309b7c7] {\r\n width: 1%;\r\n white-space: nowrap;\n}\n.actions-button-group[data-v-3309b7c7] {\r\n display: inline-flex;\r\n flex-wrap: nowrap;\n}\n.actions-dropdown[data-v-3309b7c7] {\r\n display: inline-block;\n}\r\n\r\n/* Asegurar que los botones no se expandan */\n.actions-button-group .btn[data-v-3309b7c7] {\r\n flex-shrink: 0;\n}\r\n";
12603
- n(css$5, {});
13116
+ var css$6 = "\r\n/* Fijar ancho de la columna de acciones */\n.actions-cell[data-v-e38a3192] {\r\n width: 1%;\r\n white-space: nowrap;\n}\n.actions-button-group[data-v-e38a3192] {\r\n display: inline-flex;\r\n flex-wrap: nowrap;\n}\n.actions-dropdown[data-v-e38a3192] {\r\n display: inline-block;\n}\r\n\r\n/* Asegurar que los botones no se expandan */\n.actions-button-group .btn[data-v-e38a3192] {\r\n flex-shrink: 0;\n}\r\n";
13117
+ n(css$6, {});
12604
13118
 
12605
13119
  const _sfc_main$c = {
12606
13120
  name: 'TableCell',
@@ -12610,11 +13124,54 @@ const _sfc_main$c = {
12610
13124
  index: Number,
12611
13125
  columnIndex: Number
12612
13126
  },
12613
- inject: ['itemValue', 'getStateValue', 'getArrayValue', 'onCheckSelect', 'showItem', 'updateItem', 'removeItem', 'optionsLoaded'],
13127
+ inject: ['itemValue', 'getStateValue', 'getStateOptions', 'getStateBadgeVariant', 'getArrayValue', 'onCheckSelect', 'showItem', 'updateItem', 'removeItem', 'optionsLoaded'],
12614
13128
  data() {
12615
13129
  return {
12616
13130
  moment: moment
12617
13131
  };
13132
+ },
13133
+ computed: {
13134
+ stateOptions() {
13135
+ // Permitir usar opciones incluso si optionsLoaded es false, ya que getStateOptions normaliza internamente
13136
+ if (this.column.type === 'state' && this.column.options && Array.isArray(this.column.options)) {
13137
+ const itemVal = this.itemValue(this.column, this.item);
13138
+ const options = this.column.options;
13139
+ const result = this.getStateOptions(itemVal, options);
13140
+ return result;
13141
+ }
13142
+ return [];
13143
+ }
13144
+ },
13145
+ methods: {
13146
+ formatNumber(value, column) {
13147
+ if (value === null || value === undefined || value === '') {
13148
+ return '';
13149
+ }
13150
+ const numValue = parseFloat(value);
13151
+ if (isNaN(numValue)) {
13152
+ return value;
13153
+ }
13154
+ const thousandsSep = column.thousandsSeparator || '.';
13155
+ const decimalSep = column.decimalSeparator || ',';
13156
+ const decimals = column.decimals !== undefined ? column.decimals : numValue % 1 === 0 ? 0 : 2;
13157
+
13158
+ // Formatear número con separadores
13159
+ const parts = numValue.toFixed(decimals).split('.');
13160
+ const integerPart = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSep);
13161
+ const decimalPart = parts[1] || '';
13162
+ if (decimals > 0 && decimalPart) {
13163
+ return `${integerPart}${decimalSep}${decimalPart}`;
13164
+ }
13165
+ return integerPart;
13166
+ },
13167
+ formatMoney(value, column) {
13168
+ const formatted = this.formatNumber(value, column);
13169
+ if (formatted === '') {
13170
+ return '';
13171
+ }
13172
+ const symbol = column.symbol || '$';
13173
+ return `${symbol}${formatted}`;
13174
+ }
12618
13175
  }
12619
13176
  };
12620
13177
  var _sfc_render$c = function render() {
@@ -12662,7 +13219,15 @@ var _sfc_render$c = function render() {
12662
13219
  },
12663
13220
  expression: "item.selected"
12664
13221
  }
12665
- })], 1) : _vm.column.type == 'state' && _vm.optionsLoaded ? _c('span', [_vm._v(" " + _vm._s(_vm.getStateValue(_vm.itemValue(_vm.column, _vm.item), _vm.column.options)) + " ")]) : _vm.column.type == 'array' && _vm.optionsLoaded ? _c('span', [_vm._v(" " + _vm._s(_vm.getArrayValue(_vm.itemValue(_vm.column, _vm.item), _vm.column.displayProp, _vm.column.options)) + " ")]) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(_vm.column, _vm.item)) + " ")])];
13222
+ })], 1) : _vm.column.type == 'state' ? _c('span', [_vm.stateOptions.length > 0 ? _vm._l(_vm.stateOptions, function (option, optIndex) {
13223
+ return _c('b-badge', {
13224
+ key: optIndex,
13225
+ staticClass: "mr-1",
13226
+ attrs: {
13227
+ "variant": _vm.getStateBadgeVariant(option)
13228
+ }
13229
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
13230
+ }) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(_vm.column, _vm.item)) + " ")])], 2) : _vm.column.type == 'array' && _vm.optionsLoaded ? _c('span', [_vm._v(" " + _vm._s(_vm.getArrayValue(_vm.itemValue(_vm.column, _vm.item), _vm.column.displayProp, _vm.column.options)) + " ")]) : _vm.column.type == 'money' || _vm.column.type == 'price' ? _c('span', [_vm._v(" " + _vm._s(_vm.formatMoney(_vm.itemValue(_vm.column, _vm.item), _vm.column)) + " ")]) : _vm.column.type == 'number' && (_vm.column.thousandsSeparator || _vm.column.decimalSeparator || _vm.column.decimals !== undefined) ? _c('span', [_vm._v(" " + _vm._s(_vm.formatNumber(_vm.itemValue(_vm.column, _vm.item), _vm.column)) + " ")]) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(_vm.column, _vm.item)) + " ")])];
12666
13231
  }, {
12667
13232
  "item": _vm.item,
12668
13233
  "index": _vm.index,
@@ -12681,27 +13246,35 @@ var _sfc_render$c = function render() {
12681
13246
  },
12682
13247
  proxy: true
12683
13248
  }], null, false, 4241371057)
12684
- }, [_vm._t("rowAction", function () {
12685
- return [_c('b-dropdown-item', {
12686
- on: {
12687
- "click": function ($event) {
12688
- return _vm.showItem(_vm.item.id, _vm.index);
13249
+ }, [_vm._t("rowActions", function () {
13250
+ return [_vm._t("rowAction", function () {
13251
+ return [_c('b-dropdown-item', {
13252
+ on: {
13253
+ "click": function ($event) {
13254
+ return _vm.showItem(_vm.item.id, _vm.index);
13255
+ }
12689
13256
  }
12690
- }
12691
- }, [_c('b-icon-eye'), _vm._v(" Ver ")], 1), _c('b-dropdown-item', {
12692
- on: {
12693
- "click": function ($event) {
12694
- return _vm.updateItem(_vm.item.id, _vm.index);
13257
+ }, [_c('b-icon-eye'), _vm._v(" Ver ")], 1), _c('b-dropdown-item', {
13258
+ on: {
13259
+ "click": function ($event) {
13260
+ return _vm.updateItem(_vm.item.id, _vm.index);
13261
+ }
12695
13262
  }
12696
- }
12697
- }, [_c('b-icon-pencil'), _vm._v(" Editar ")], 1), _c('b-dropdown-item', {
12698
- staticClass: "text-danger",
12699
- on: {
12700
- "click": function ($event) {
12701
- return _vm.removeItem(_vm.item.id, _vm.index);
13263
+ }, [_c('b-icon-pencil'), _vm._v(" Editar ")], 1), _c('b-dropdown-item', {
13264
+ staticClass: "text-danger",
13265
+ on: {
13266
+ "click": function ($event) {
13267
+ return _vm.removeItem(_vm.item.id, _vm.index);
13268
+ }
12702
13269
  }
12703
- }
12704
- }, [_c('b-icon-trash'), _vm._v(" Eliminar ")], 1)];
13270
+ }, [_c('b-icon-trash'), _vm._v(" Eliminar ")], 1)];
13271
+ }, {
13272
+ "item": _vm.item,
13273
+ "index": _vm.index,
13274
+ "showItem": _vm.showItem,
13275
+ "updateItem": _vm.updateItem,
13276
+ "removeItem": _vm.removeItem
13277
+ })];
12705
13278
  }, {
12706
13279
  "item": _vm.item,
12707
13280
  "index": _vm.index,
@@ -12710,35 +13283,43 @@ var _sfc_render$c = function render() {
12710
13283
  "removeItem": _vm.removeItem
12711
13284
  })], 2) : _vm.column.type == 'actions' ? _c('b-button-group', {
12712
13285
  staticClass: "actions-button-group"
12713
- }, [_vm._t("rowAction", function () {
12714
- return [_c('b-button', {
12715
- attrs: {
12716
- "variant": "primary"
12717
- },
12718
- on: {
12719
- "click": function ($event) {
12720
- return _vm.showItem(_vm.item.id, _vm.index);
13286
+ }, [_vm._t("rowActions", function () {
13287
+ return [_vm._t("rowAction", function () {
13288
+ return [_c('b-button', {
13289
+ attrs: {
13290
+ "variant": "primary"
13291
+ },
13292
+ on: {
13293
+ "click": function ($event) {
13294
+ return _vm.showItem(_vm.item.id, _vm.index);
13295
+ }
12721
13296
  }
12722
- }
12723
- }, [_c('b-icon-eye')], 1), _c('b-button', {
12724
- attrs: {
12725
- "variant": "secondary"
12726
- },
12727
- on: {
12728
- "click": function ($event) {
12729
- return _vm.updateItem(_vm.item.id, _vm.index);
13297
+ }, [_c('b-icon-eye')], 1), _c('b-button', {
13298
+ attrs: {
13299
+ "variant": "secondary"
13300
+ },
13301
+ on: {
13302
+ "click": function ($event) {
13303
+ return _vm.updateItem(_vm.item.id, _vm.index);
13304
+ }
12730
13305
  }
12731
- }
12732
- }, [_c('b-icon-pencil')], 1), _c('b-button', {
12733
- attrs: {
12734
- "variant": "danger"
12735
- },
12736
- on: {
12737
- "click": function ($event) {
12738
- return _vm.removeItem(_vm.item.id, _vm.index);
13306
+ }, [_c('b-icon-pencil')], 1), _c('b-button', {
13307
+ attrs: {
13308
+ "variant": "danger"
13309
+ },
13310
+ on: {
13311
+ "click": function ($event) {
13312
+ return _vm.removeItem(_vm.item.id, _vm.index);
13313
+ }
12739
13314
  }
12740
- }
12741
- }, [_c('b-icon-trash')], 1)];
13315
+ }, [_c('b-icon-trash')], 1)];
13316
+ }, {
13317
+ "item": _vm.item,
13318
+ "index": _vm.index,
13319
+ "showItem": _vm.showItem,
13320
+ "updateItem": _vm.updateItem,
13321
+ "removeItem": _vm.removeItem
13322
+ })];
12742
13323
  }, {
12743
13324
  "item": _vm.item,
12744
13325
  "index": _vm.index,
@@ -12748,7 +13329,7 @@ var _sfc_render$c = function render() {
12748
13329
  })], 2) : _vm._e()], 2);
12749
13330
  };
12750
13331
  var _sfc_staticRenderFns$c = [];
12751
- var __component__$c = /*#__PURE__*/normalizeComponent(_sfc_main$c, _sfc_render$c, _sfc_staticRenderFns$c, false, null, "3309b7c7", null, null);
13332
+ var __component__$c = /*#__PURE__*/normalizeComponent(_sfc_main$c, _sfc_render$c, _sfc_staticRenderFns$c, false, null, "e38a3192", null, null);
12752
13333
  var TableCell = __component__$c.exports;
12753
13334
 
12754
13335
  const _sfc_main$b = {
@@ -12791,7 +13372,15 @@ var _sfc_render$b = function render() {
12791
13372
  "item": _vm.item,
12792
13373
  "index": _vm.index,
12793
13374
  "columnIndex": indexc
12794
- }
13375
+ },
13376
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
13377
+ return {
13378
+ key: name,
13379
+ fn: function (slotProps) {
13380
+ return [_vm._t(name, null, null, slotProps)];
13381
+ }
13382
+ };
13383
+ })], null, true)
12795
13384
  });
12796
13385
  });
12797
13386
  }, {
@@ -12809,19 +13398,46 @@ const _sfc_main$a = {
12809
13398
  TableHeader,
12810
13399
  TableRow
12811
13400
  },
12812
- inject: ['displayMode', 'displayModes', 'tableContainerClass', 'tableClass', 'items', 'draggableGroup', 'orderable', 'draggableOptions', 'itemsList', 'grouped', 'loading', 'infiniteScroll', 'messageEmptyResults', 'onSort', 'onDraggableAdded', 'onDraggableChange'],
13401
+ inject: ['displayMode', 'displayModes', 'tableContainerClass', 'tableClass', 'items', 'draggableGroup', 'orderable', 'draggableOptions', 'itemsList', 'grouped', 'loading', 'firstLoad', 'infiniteScroll', 'messageEmptyResults', 'messageLoading', 'onSort', 'onDraggableAdded', 'onDraggableChange'],
12813
13402
  data() {
12814
13403
  return {
12815
13404
  drag: false
12816
13405
  };
13406
+ },
13407
+ computed: {
13408
+ currentDisplayMode() {
13409
+ if (!this.displayMode) return 1;
13410
+ if (this.displayMode.value !== undefined) {
13411
+ return this.displayMode.value;
13412
+ }
13413
+ if (typeof this.displayMode === 'function') {
13414
+ return this.displayMode();
13415
+ }
13416
+ return this.displayMode;
13417
+ },
13418
+ loadingValue() {
13419
+ return this.loading && this.loading.value !== undefined ? this.loading.value : this.loading;
13420
+ },
13421
+ firstLoadValue() {
13422
+ return this.firstLoad && this.firstLoad.value !== undefined ? this.firstLoad.value : this.firstLoad;
13423
+ }
12817
13424
  }
12818
13425
  };
12819
13426
  var _sfc_render$a = function render() {
12820
13427
  var _vm = this,
12821
13428
  _c = _vm._self._c;
12822
- return _vm.displayMode == _vm.displayModes.MODE_TABLE ? _c('div', {
13429
+ return _vm.currentDisplayMode == _vm.displayModes.MODE_TABLE ? _c('div', {
12823
13430
  class: ['table-responsive', _vm.tableContainerClass]
12824
- }, [_c('table', {
13431
+ }, [_vm.loadingValue || !_vm.firstLoadValue ? _c('div', {
13432
+ staticClass: "text-center p-5"
13433
+ }, [_c('b-spinner', {
13434
+ attrs: {
13435
+ "variant": "primary",
13436
+ "label": "Cargando..."
13437
+ }
13438
+ }), _c('p', {
13439
+ staticClass: "mt-2"
13440
+ }, [_vm._v(_vm._s(_vm.messageLoading))])], 1) : [_c('table', {
12825
13441
  class: ['table table-hover table-striped w-100', _vm.tableClass]
12826
13442
  }, [_c('TableHeader'), _c('draggable', {
12827
13443
  attrs: {
@@ -12855,11 +13471,19 @@ var _sfc_render$a = function render() {
12855
13471
  "item": item,
12856
13472
  "index": index,
12857
13473
  "grouped": _vm.grouped
12858
- }
13474
+ },
13475
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
13476
+ return {
13477
+ key: name,
13478
+ fn: function (slotProps) {
13479
+ return [_vm._t(name, null, null, slotProps)];
13480
+ }
13481
+ };
13482
+ })], null, true)
12859
13483
  });
12860
- }), 1)], 1), !_vm.loading && _vm.itemsList && _vm.itemsList.length == 0 && !_vm.infiniteScroll ? _c('p', {
13484
+ }), 1)], 1), _vm.firstLoadValue && _vm.itemsList && _vm.itemsList.length == 0 && !_vm.infiniteScroll ? _c('p', {
12861
13485
  staticClass: "p-3"
12862
- }, [_vm._v(" " + _vm._s(_vm.messageEmptyResults) + " ")]) : _vm._e()]) : _vm._e();
13486
+ }, [_vm._v(" " + _vm._s(_vm.messageEmptyResults) + " ")]) : _vm._e()]], 2) : _vm._e();
12863
13487
  };
12864
13488
  var _sfc_staticRenderFns$a = [];
12865
13489
  var __component__$a = /*#__PURE__*/normalizeComponent(_sfc_main$a, _sfc_render$a, _sfc_staticRenderFns$a, false, null, null, null, null);
@@ -13116,10 +13740,49 @@ const _sfc_main$9 = {
13116
13740
  cardHideFooter: Boolean,
13117
13741
  itemValue: Function,
13118
13742
  getStateValue: Function,
13743
+ getStateOptions: Function,
13744
+ getStateBadgeVariant: Function,
13119
13745
  getArrayValue: Function,
13120
13746
  showItem: Function,
13121
13747
  updateItem: Function,
13122
13748
  removeItem: Function
13749
+ },
13750
+ methods: {
13751
+ getStateOptionsForColumn(column, item) {
13752
+ if (column.type === 'state' && column.options) {
13753
+ return this.getStateOptions(this.itemValue(column, item), column.options);
13754
+ }
13755
+ return [];
13756
+ },
13757
+ formatNumber(value, column) {
13758
+ if (value === null || value === undefined || value === '') {
13759
+ return '';
13760
+ }
13761
+ const numValue = parseFloat(value);
13762
+ if (isNaN(numValue)) {
13763
+ return value;
13764
+ }
13765
+ const thousandsSep = column.thousandsSeparator || '.';
13766
+ const decimalSep = column.decimalSeparator || ',';
13767
+ const decimals = column.decimals !== undefined ? column.decimals : numValue % 1 === 0 ? 0 : 2;
13768
+
13769
+ // Formatear número con separadores
13770
+ const parts = numValue.toFixed(decimals).split('.');
13771
+ const integerPart = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSep);
13772
+ const decimalPart = parts[1] || '';
13773
+ if (decimals > 0 && decimalPart) {
13774
+ return `${integerPart}${decimalSep}${decimalPart}`;
13775
+ }
13776
+ return integerPart;
13777
+ },
13778
+ formatMoney(value, column) {
13779
+ const formatted = this.formatNumber(value, column);
13780
+ if (formatted === '') {
13781
+ return '';
13782
+ }
13783
+ const symbol = column.symbol || '$';
13784
+ return `${symbol}${formatted}`;
13785
+ }
13123
13786
  }
13124
13787
  };
13125
13788
  var _sfc_render$9 = function render() {
@@ -13138,35 +13801,43 @@ var _sfc_render$9 = function render() {
13138
13801
  scopedSlots: _vm._u([{
13139
13802
  key: "footer",
13140
13803
  fn: function () {
13141
- return [_c('b-button-group', [_vm._t("rowAction", function () {
13142
- return [_c('b-button', {
13143
- attrs: {
13144
- "variant": "primary"
13145
- },
13146
- on: {
13147
- "click": function ($event) {
13148
- return _vm.showItem(_vm.item.id, _vm.index);
13804
+ return [_c('b-button-group', [_vm._t("rowActions", function () {
13805
+ return [_vm._t("rowAction", function () {
13806
+ return [_c('b-button', {
13807
+ attrs: {
13808
+ "variant": "primary"
13809
+ },
13810
+ on: {
13811
+ "click": function ($event) {
13812
+ return _vm.showItem(_vm.item.id, _vm.index);
13813
+ }
13149
13814
  }
13150
- }
13151
- }, [_c('b-icon-eye')], 1), _c('b-button', {
13152
- attrs: {
13153
- "variant": "secondary"
13154
- },
13155
- on: {
13156
- "click": function ($event) {
13157
- return _vm.updateItem(_vm.item.id, _vm.index);
13815
+ }, [_c('b-icon-eye')], 1), _c('b-button', {
13816
+ attrs: {
13817
+ "variant": "secondary"
13818
+ },
13819
+ on: {
13820
+ "click": function ($event) {
13821
+ return _vm.updateItem(_vm.item.id, _vm.index);
13822
+ }
13158
13823
  }
13159
- }
13160
- }, [_c('b-icon-pencil')], 1), _c('b-button', {
13161
- attrs: {
13162
- "variant": "danger"
13163
- },
13164
- on: {
13165
- "click": function ($event) {
13166
- return _vm.removeItem(_vm.item.id, _vm.index);
13824
+ }, [_c('b-icon-pencil')], 1), _c('b-button', {
13825
+ attrs: {
13826
+ "variant": "danger"
13827
+ },
13828
+ on: {
13829
+ "click": function ($event) {
13830
+ return _vm.removeItem(_vm.item.id, _vm.index);
13831
+ }
13167
13832
  }
13168
- }
13169
- }, [_c('b-icon-trash')], 1)];
13833
+ }, [_c('b-icon-trash')], 1)];
13834
+ }, {
13835
+ "item": _vm.item,
13836
+ "index": _vm.index,
13837
+ "showItem": _vm.showItem,
13838
+ "updateItem": _vm.updateItem,
13839
+ "removeItem": _vm.removeItem
13840
+ })];
13170
13841
  }, {
13171
13842
  "item": _vm.item,
13172
13843
  "index": _vm.index,
@@ -13190,7 +13861,15 @@ var _sfc_render$9 = function render() {
13190
13861
  attrs: {
13191
13862
  "variant": "danger"
13192
13863
  }
13193
- }, [_c('b-icon-x-circle')], 1)], 1) : column.type === 'date' ? _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")]) : column.type === 'state' ? _c('span', [_vm._v(" " + _vm._s(_vm.getStateValue(_vm.itemValue(column, _vm.item), column.options)) + " ")]) : column.type === 'array' ? _c('span', [_vm._v(" " + _vm._s(_vm.getArrayValue(_vm.itemValue(column, _vm.item), column.displayProp, column.options)) + " ")]) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")])];
13864
+ }, [_c('b-icon-x-circle')], 1)], 1) : column.type === 'date' ? _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")]) : column.type === 'state' ? _c('span', [_vm.getStateOptionsForColumn(column, _vm.item).length > 0 ? _vm._l(_vm.getStateOptionsForColumn(column, _vm.item), function (option, optIndex) {
13865
+ return _c('b-badge', {
13866
+ key: optIndex,
13867
+ staticClass: "mr-1",
13868
+ attrs: {
13869
+ "variant": _vm.getStateBadgeVariant(option)
13870
+ }
13871
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
13872
+ }) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")])], 2) : column.type === 'array' ? _c('span', [_vm._v(" " + _vm._s(_vm.getArrayValue(_vm.itemValue(column, _vm.item), column.displayProp, column.options)) + " ")]) : column.type === 'money' || column.type === 'price' ? _c('span', [_vm._v(" " + _vm._s(_vm.formatMoney(_vm.itemValue(column, _vm.item), column)) + " ")]) : column.type === 'number' && (column.thousandsSeparator || column.decimalSeparator || column.decimals !== undefined) ? _c('span', [_vm._v(" " + _vm._s(_vm.formatNumber(_vm.itemValue(column, _vm.item), column)) + " ")]) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")])];
13194
13873
  }, {
13195
13874
  "item": _vm.item,
13196
13875
  "index": _vm.index,
@@ -13214,17 +13893,44 @@ const _sfc_main$8 = {
13214
13893
  draggable,
13215
13894
  ItemCard
13216
13895
  },
13217
- inject: ['displayMode', 'displayModes', 'items', 'draggableGroup', 'orderable', 'draggableOptions', 'itemsList', 'colLg', 'colXl', 'colMd', 'colSm', 'colXs', 'columns', 'cardClass', 'cardHideFooter', 'itemValue', 'getStateValue', 'getArrayValue', 'showItem', 'updateItem', 'removeItem', 'loading', 'infiniteScroll', 'messageEmptyResults', 'onSort', 'onDraggableAdded', 'onDraggableChange'],
13896
+ inject: ['displayMode', 'displayModes', 'items', 'draggableGroup', 'orderable', 'draggableOptions', 'itemsList', 'colLg', 'colXl', 'colMd', 'colSm', 'colXs', 'columns', 'cardClass', 'cardHideFooter', 'itemValue', 'getStateValue', 'getStateOptions', 'getStateBadgeVariant', 'getArrayValue', 'showItem', 'updateItem', 'removeItem', 'loading', 'firstLoad', 'infiniteScroll', 'messageEmptyResults', 'messageLoading', 'onSort', 'onDraggableAdded', 'onDraggableChange'],
13218
13897
  data() {
13219
13898
  return {
13220
13899
  drag: false
13221
13900
  };
13901
+ },
13902
+ computed: {
13903
+ currentDisplayMode() {
13904
+ if (!this.displayMode) return 1;
13905
+ if (this.displayMode.value !== undefined) {
13906
+ return this.displayMode.value;
13907
+ }
13908
+ if (typeof this.displayMode === 'function') {
13909
+ return this.displayMode();
13910
+ }
13911
+ return this.displayMode;
13912
+ },
13913
+ loadingValue() {
13914
+ return this.loading && this.loading.value !== undefined ? this.loading.value : this.loading;
13915
+ },
13916
+ firstLoadValue() {
13917
+ return this.firstLoad && this.firstLoad.value !== undefined ? this.firstLoad.value : this.firstLoad;
13918
+ }
13222
13919
  }
13223
13920
  };
13224
13921
  var _sfc_render$8 = function render() {
13225
13922
  var _vm = this,
13226
13923
  _c = _vm._self._c;
13227
- return _vm.displayMode == _vm.displayModes.MODE_CARDS ? _c('div', [_c('draggable', {
13924
+ return _vm.currentDisplayMode == _vm.displayModes.MODE_CARDS ? _c('div', [_vm.loadingValue || !_vm.firstLoadValue ? _c('div', {
13925
+ staticClass: "text-center p-5"
13926
+ }, [_c('b-spinner', {
13927
+ attrs: {
13928
+ "variant": "primary",
13929
+ "label": "Cargando..."
13930
+ }
13931
+ }), _c('p', {
13932
+ staticClass: "mt-2"
13933
+ }, [_vm._v(_vm._s(_vm.messageLoading))])], 1) : [_c('draggable', {
13228
13934
  attrs: {
13229
13935
  "group": _vm.draggableGroup,
13230
13936
  "draggable": _vm.orderable ? '.item' : '.none',
@@ -13283,25 +13989,35 @@ var _sfc_render$8 = function render() {
13283
13989
  "cardHideFooter": _vm.cardHideFooter,
13284
13990
  "itemValue": _vm.itemValue,
13285
13991
  "getStateValue": _vm.getStateValue,
13992
+ "getStateOptions": _vm.getStateOptions,
13993
+ "getStateBadgeVariant": _vm.getStateBadgeVariant,
13286
13994
  "getArrayValue": _vm.getArrayValue,
13287
13995
  "showItem": _vm.showItem,
13288
13996
  "updateItem": _vm.updateItem,
13289
13997
  "removeItem": _vm.removeItem
13290
- }
13998
+ },
13999
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
14000
+ return {
14001
+ key: name,
14002
+ fn: function (slotProps) {
14003
+ return [_vm._t(name, null, null, slotProps)];
14004
+ }
14005
+ };
14006
+ })], null, true)
13291
14007
  })];
13292
14008
  }, {
13293
14009
  "item": item
13294
14010
  })], 2);
13295
- }), 0)], 1), !_vm.loading && _vm.itemsList && _vm.itemsList.length == 0 && !_vm.infiniteScroll ? _c('p', {
14011
+ }), 0)], 1), _vm.firstLoadValue && _vm.itemsList && _vm.itemsList.length == 0 && !_vm.infiniteScroll ? _c('p', {
13296
14012
  staticClass: "p-3"
13297
- }, [_vm._v(" " + _vm._s(_vm.messageEmptyResults) + " ")]) : _vm._e()], 1) : _vm._e();
14013
+ }, [_vm._v(" " + _vm._s(_vm.messageEmptyResults) + " ")]) : _vm._e()]], 2) : _vm._e();
13298
14014
  };
13299
14015
  var _sfc_staticRenderFns$8 = [];
13300
14016
  var __component__$8 = /*#__PURE__*/normalizeComponent(_sfc_main$8, _sfc_render$8, _sfc_staticRenderFns$8, false, null, null, null, null);
13301
14017
  var CrudCards = __component__$8.exports;
13302
14018
 
13303
- var css$4 = "\n.kanban-card[data-v-d130f95e] {\r\n background: #ffffff;\r\n border-radius: 4px;\r\n padding: 0.5rem;\r\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\r\n cursor: grab;\r\n transition: box-shadow 0.2s ease;\n}\n.kanban-card[data-v-d130f95e]:hover {\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);\n}\n.kanban-card[data-v-d130f95e]:active {\r\n cursor: grabbing;\n}\n.card-crud[data-v-d130f95e] {\r\n border: 1px solid #e1e5e9;\n}\n.card-crud .card-title[data-v-d130f95e] {\r\n font-size: 0.9rem;\r\n margin-bottom: 0.5rem;\n}\n.card-crud .card-text[data-v-d130f95e] {\r\n font-size: 0.8rem;\r\n margin-bottom: 0.25rem;\n}\r\n";
13304
- n(css$4, {});
14019
+ var css$5 = "\n.kanban-card[data-v-ad923ee1] {\r\n background: #ffffff;\r\n border-radius: 4px;\r\n padding: 0.5rem;\r\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\r\n cursor: grab;\r\n transition: box-shadow 0.2s ease;\n}\n.kanban-card[data-v-ad923ee1]:hover {\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);\n}\n.kanban-card[data-v-ad923ee1]:active {\r\n cursor: grabbing;\n}\n.card-crud[data-v-ad923ee1] {\r\n border: 1px solid #e1e5e9;\n}\n.card-crud .card-title[data-v-ad923ee1] {\r\n font-size: 0.9rem;\r\n margin-bottom: 0.5rem;\n}\n.card-crud .card-text[data-v-ad923ee1] {\r\n font-size: 0.8rem;\r\n margin-bottom: 0.25rem;\n}\r\n";
14020
+ n(css$5, {});
13305
14021
 
13306
14022
  const _sfc_main$7 = {
13307
14023
  name: 'KanbanCard',
@@ -13313,10 +14029,49 @@ const _sfc_main$7 = {
13313
14029
  cardHideFooter: Boolean,
13314
14030
  itemValue: Function,
13315
14031
  getStateValue: Function,
14032
+ getStateOptions: Function,
14033
+ getStateBadgeVariant: Function,
13316
14034
  getArrayValue: Function,
13317
14035
  showItem: Function,
13318
14036
  updateItem: Function,
13319
14037
  removeItem: Function
14038
+ },
14039
+ methods: {
14040
+ getStateOptionsForColumn(column, item) {
14041
+ if (column.type === 'state' && column.options) {
14042
+ return this.getStateOptions(this.itemValue(column, item), column.options);
14043
+ }
14044
+ return [];
14045
+ },
14046
+ formatNumber(value, column) {
14047
+ if (value === null || value === undefined || value === '') {
14048
+ return '';
14049
+ }
14050
+ const numValue = parseFloat(value);
14051
+ if (isNaN(numValue)) {
14052
+ return value;
14053
+ }
14054
+ const thousandsSep = column.thousandsSeparator || '.';
14055
+ const decimalSep = column.decimalSeparator || ',';
14056
+ const decimals = column.decimals !== undefined ? column.decimals : numValue % 1 === 0 ? 0 : 2;
14057
+
14058
+ // Formatear número con separadores
14059
+ const parts = numValue.toFixed(decimals).split('.');
14060
+ const integerPart = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSep);
14061
+ const decimalPart = parts[1] || '';
14062
+ if (decimals > 0 && decimalPart) {
14063
+ return `${integerPart}${decimalSep}${decimalPart}`;
14064
+ }
14065
+ return integerPart;
14066
+ },
14067
+ formatMoney(value, column) {
14068
+ const formatted = this.formatNumber(value, column);
14069
+ if (formatted === '') {
14070
+ return '';
14071
+ }
14072
+ const symbol = column.symbol || '$';
14073
+ return `${symbol}${formatted}`;
14074
+ }
13320
14075
  }
13321
14076
  };
13322
14077
  var _sfc_render$7 = function render() {
@@ -13339,35 +14094,43 @@ var _sfc_render$7 = function render() {
13339
14094
  attrs: {
13340
14095
  "size": "sm"
13341
14096
  }
13342
- }, [_vm._t("rowAction", function () {
13343
- return [_c('b-button', {
13344
- attrs: {
13345
- "variant": "primary"
13346
- },
13347
- on: {
13348
- "click": function ($event) {
13349
- return _vm.showItem(_vm.item.id, _vm.index);
14097
+ }, [_vm._t("rowActions", function () {
14098
+ return [_vm._t("rowAction", function () {
14099
+ return [_c('b-button', {
14100
+ attrs: {
14101
+ "variant": "primary"
14102
+ },
14103
+ on: {
14104
+ "click": function ($event) {
14105
+ return _vm.showItem(_vm.item.id, _vm.index);
14106
+ }
13350
14107
  }
13351
- }
13352
- }, [_c('b-icon-eye')], 1), _c('b-button', {
13353
- attrs: {
13354
- "variant": "secondary"
13355
- },
13356
- on: {
13357
- "click": function ($event) {
13358
- return _vm.updateItem(_vm.item.id, _vm.index);
14108
+ }, [_c('b-icon-eye')], 1), _c('b-button', {
14109
+ attrs: {
14110
+ "variant": "secondary"
14111
+ },
14112
+ on: {
14113
+ "click": function ($event) {
14114
+ return _vm.updateItem(_vm.item.id, _vm.index);
14115
+ }
13359
14116
  }
13360
- }
13361
- }, [_c('b-icon-pencil')], 1), _c('b-button', {
13362
- attrs: {
13363
- "variant": "danger"
13364
- },
13365
- on: {
13366
- "click": function ($event) {
13367
- return _vm.removeItem(_vm.item.id, _vm.index);
14117
+ }, [_c('b-icon-pencil')], 1), _c('b-button', {
14118
+ attrs: {
14119
+ "variant": "danger"
14120
+ },
14121
+ on: {
14122
+ "click": function ($event) {
14123
+ return _vm.removeItem(_vm.item.id, _vm.index);
14124
+ }
13368
14125
  }
13369
- }
13370
- }, [_c('b-icon-trash')], 1)];
14126
+ }, [_c('b-icon-trash')], 1)];
14127
+ }, {
14128
+ "item": _vm.item,
14129
+ "index": _vm.index,
14130
+ "showItem": _vm.showItem,
14131
+ "updateItem": _vm.updateItem,
14132
+ "removeItem": _vm.removeItem
14133
+ })];
13371
14134
  }, {
13372
14135
  "item": _vm.item,
13373
14136
  "index": _vm.index,
@@ -13395,7 +14158,15 @@ var _sfc_render$7 = function render() {
13395
14158
  attrs: {
13396
14159
  "variant": "danger"
13397
14160
  }
13398
- }, [_c('b-icon-x-circle')], 1)], 1) : column.type === 'date' ? _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")]) : column.type === 'state' ? _c('span', [_vm._v(" " + _vm._s(_vm.getStateValue(_vm.itemValue(column, _vm.item), column.options)) + " ")]) : column.type === 'array' ? _c('span', [_vm._v(" " + _vm._s(_vm.getArrayValue(_vm.itemValue(column, _vm.item), column.displayProp, column.options)) + " ")]) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")])];
14161
+ }, [_c('b-icon-x-circle')], 1)], 1) : column.type === 'date' ? _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")]) : column.type === 'state' ? _c('span', [_vm.getStateOptionsForColumn(column, _vm.item).length > 0 ? _vm._l(_vm.getStateOptionsForColumn(column, _vm.item), function (option, optIndex) {
14162
+ return _c('b-badge', {
14163
+ key: optIndex,
14164
+ staticClass: "mr-1",
14165
+ attrs: {
14166
+ "variant": _vm.getStateBadgeVariant(option)
14167
+ }
14168
+ }, [_vm._v(" " + _vm._s(option.text) + " ")]);
14169
+ }) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")])], 2) : column.type === 'array' ? _c('span', [_vm._v(" " + _vm._s(_vm.getArrayValue(_vm.itemValue(column, _vm.item), column.displayProp, column.options)) + " ")]) : column.type === 'money' || column.type === 'price' ? _c('span', [_vm._v(" " + _vm._s(_vm.formatMoney(_vm.itemValue(column, _vm.item), column)) + " ")]) : column.type === 'number' && (column.thousandsSeparator || column.decimalSeparator || column.decimals !== undefined) ? _c('span', [_vm._v(" " + _vm._s(_vm.formatNumber(_vm.itemValue(column, _vm.item), column)) + " ")]) : _c('span', [_vm._v(" " + _vm._s(_vm.itemValue(column, _vm.item)) + " ")])];
13399
14170
  }, {
13400
14171
  "item": _vm.item,
13401
14172
  "index": _vm.index,
@@ -13408,11 +14179,11 @@ var _sfc_render$7 = function render() {
13408
14179
  })], 2)], 1);
13409
14180
  };
13410
14181
  var _sfc_staticRenderFns$7 = [];
13411
- var __component__$7 = /*#__PURE__*/normalizeComponent(_sfc_main$7, _sfc_render$7, _sfc_staticRenderFns$7, false, null, "d130f95e", null, null);
14182
+ var __component__$7 = /*#__PURE__*/normalizeComponent(_sfc_main$7, _sfc_render$7, _sfc_staticRenderFns$7, false, null, "ad923ee1", null, null);
13412
14183
  var KanbanCard = __component__$7.exports;
13413
14184
 
13414
- var css$3 = "\n.kanban-column[data-v-ceafabcb] {\r\n background: #f4f5f7;\r\n border-radius: 8px;\r\n width: 300px;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n.kanban-column-header[data-v-ceafabcb] {\r\n font-weight: bold;\r\n padding: 0.5rem;\r\n background: #dfe1e6;\r\n border-radius: 8px 8px 0 0;\r\n text-align: center;\n}\n.kanban-column-body[data-v-ceafabcb] {\r\n padding: 0.5rem;\r\n min-height: 100px;\r\n background: #ffffff;\r\n border-radius: 0 0 8px 8px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.5rem;\n}\r\n";
13415
- n(css$3, {});
14185
+ var css$4 = "\n.kanban-column[data-v-a56cf649] {\r\n background: #f4f5f7;\r\n border-radius: 8px;\r\n width: 300px;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n.kanban-column-header[data-v-a56cf649] {\r\n font-weight: bold;\r\n padding: 0.5rem;\r\n background: #dfe1e6;\r\n border-radius: 8px 8px 0 0;\r\n text-align: center;\n}\n.kanban-column-body[data-v-a56cf649] {\r\n padding: 0.5rem;\r\n min-height: 100px;\r\n background: #ffffff;\r\n border-radius: 0 0 8px 8px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.5rem;\n}\r\n";
14186
+ n(css$4, {});
13416
14187
 
13417
14188
  const _sfc_main$6 = {
13418
14189
  name: 'KanbanColumn',
@@ -13427,6 +14198,8 @@ const _sfc_main$6 = {
13427
14198
  columns: Array,
13428
14199
  itemValue: Function,
13429
14200
  getStateValue: Function,
14201
+ getStateOptions: Function,
14202
+ getStateBadgeVariant: Function,
13430
14203
  getArrayValue: Function,
13431
14204
  showItem: Function,
13432
14205
  updateItem: Function,
@@ -13495,11 +14268,21 @@ var _sfc_render$6 = function render() {
13495
14268
  "cardHideFooter": _vm.cardHideFooter,
13496
14269
  "itemValue": _vm.itemValue,
13497
14270
  "getStateValue": _vm.getStateValue,
14271
+ "getStateOptions": _vm.getStateOptions,
14272
+ "getStateBadgeVariant": _vm.getStateBadgeVariant,
13498
14273
  "getArrayValue": _vm.getArrayValue,
13499
14274
  "showItem": _vm.showItem,
13500
14275
  "updateItem": _vm.updateItem,
13501
14276
  "removeItem": _vm.removeItem
13502
- }
14277
+ },
14278
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
14279
+ return {
14280
+ key: name,
14281
+ fn: function (slotProps) {
14282
+ return [_vm._t(name, null, null, slotProps)];
14283
+ }
14284
+ };
14285
+ })], null, true)
13503
14286
  })];
13504
14287
  }, {
13505
14288
  "item": item
@@ -13507,18 +14290,18 @@ var _sfc_render$6 = function render() {
13507
14290
  }), 0)], 1);
13508
14291
  };
13509
14292
  var _sfc_staticRenderFns$6 = [];
13510
- var __component__$6 = /*#__PURE__*/normalizeComponent(_sfc_main$6, _sfc_render$6, _sfc_staticRenderFns$6, false, null, "ceafabcb", null, null);
14293
+ var __component__$6 = /*#__PURE__*/normalizeComponent(_sfc_main$6, _sfc_render$6, _sfc_staticRenderFns$6, false, null, "a56cf649", null, null);
13511
14294
  var KanbanColumn = __component__$6.exports;
13512
14295
 
13513
- var css$2 = "\n.kanban-board[data-v-9f567a94] {\r\n display: flex;\r\n gap: 1rem;\r\n overflow-x: auto;\r\n padding: 1rem;\n}\n.kanban-column[data-v-9f567a94] {\r\n background: #f4f5f7;\r\n border-radius: 8px;\r\n width: 300px;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n min-width: 300px;\n}\r\n";
13514
- n(css$2, {});
14296
+ var css$3 = "\n.kanban-board[data-v-516ff294] {\r\n display: flex;\r\n gap: 1rem;\r\n overflow-x: auto;\r\n padding: 1rem;\n}\n.kanban-column[data-v-516ff294] {\r\n background: #f4f5f7;\r\n border-radius: 8px;\r\n width: 300px;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n min-width: 300px;\n}\r\n";
14297
+ n(css$3, {});
13515
14298
 
13516
14299
  const _sfc_main$5 = {
13517
14300
  name: 'KanbanBoard',
13518
14301
  components: {
13519
14302
  KanbanColumn
13520
14303
  },
13521
- inject: ['items', 'groupedAttribute', 'columns', 'itemValue', 'getStateValue', 'getArrayValue', 'showItem', 'updateItem', 'removeItem', 'cardClass', 'cardHideFooter', 'onDraggableChange']
14304
+ inject: ['items', 'groupedAttribute', 'columns', 'itemValue', 'getStateValue', 'getStateOptions', 'getStateBadgeVariant', 'getArrayValue', 'showItem', 'updateItem', 'removeItem', 'cardClass', 'cardHideFooter', 'onDraggableChange']
13522
14305
  };
13523
14306
  var _sfc_render$5 = function render() {
13524
14307
  var _vm = this,
@@ -13537,6 +14320,8 @@ var _sfc_render$5 = function render() {
13537
14320
  "columns": _vm.columns,
13538
14321
  "itemValue": _vm.itemValue,
13539
14322
  "getStateValue": _vm.getStateValue,
14323
+ "getStateOptions": _vm.getStateOptions,
14324
+ "getStateBadgeVariant": _vm.getStateBadgeVariant,
13540
14325
  "getArrayValue": _vm.getArrayValue,
13541
14326
  "showItem": _vm.showItem,
13542
14327
  "updateItem": _vm.updateItem,
@@ -13546,12 +14331,20 @@ var _sfc_render$5 = function render() {
13546
14331
  },
13547
14332
  on: {
13548
14333
  "draggableChange": _vm.onDraggableChange
13549
- }
14334
+ },
14335
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
14336
+ return {
14337
+ key: name,
14338
+ fn: function (slotProps) {
14339
+ return [_vm._t(name, null, null, slotProps)];
14340
+ }
14341
+ };
14342
+ })], null, true)
13550
14343
  })], 1);
13551
14344
  }), 0);
13552
14345
  };
13553
14346
  var _sfc_staticRenderFns$5 = [];
13554
- var __component__$5 = /*#__PURE__*/normalizeComponent(_sfc_main$5, _sfc_render$5, _sfc_staticRenderFns$5, false, null, "9f567a94", null, null);
14347
+ var __component__$5 = /*#__PURE__*/normalizeComponent(_sfc_main$5, _sfc_render$5, _sfc_staticRenderFns$5, false, null, "516ff294", null, null);
13555
14348
  var KanbanBoard = __component__$5.exports;
13556
14349
 
13557
14350
  const _sfc_main$4 = {
@@ -13559,12 +14352,33 @@ const _sfc_main$4 = {
13559
14352
  components: {
13560
14353
  KanbanBoard
13561
14354
  },
13562
- inject: ['displayMode', 'displayModes']
14355
+ inject: ['displayMode', 'displayModes'],
14356
+ computed: {
14357
+ currentDisplayMode() {
14358
+ if (!this.displayMode) return 1;
14359
+ if (this.displayMode.value !== undefined) {
14360
+ return this.displayMode.value;
14361
+ }
14362
+ if (typeof this.displayMode === 'function') {
14363
+ return this.displayMode();
14364
+ }
14365
+ return this.displayMode;
14366
+ }
14367
+ }
13563
14368
  };
13564
14369
  var _sfc_render$4 = function render() {
13565
14370
  var _vm = this,
13566
14371
  _c = _vm._self._c;
13567
- return _vm.displayMode == _vm.displayModes.MODE_KANBAN ? _c('div', [_c('KanbanBoard')], 1) : _vm._e();
14372
+ return _vm.currentDisplayMode == _vm.displayModes.MODE_KANBAN ? _c('div', [_c('KanbanBoard', {
14373
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
14374
+ return {
14375
+ key: name,
14376
+ fn: function (slotProps) {
14377
+ return [_vm._t(name, null, null, slotProps)];
14378
+ }
14379
+ };
14380
+ })], null, true)
14381
+ })], 1) : _vm._e();
13568
14382
  };
13569
14383
  var _sfc_staticRenderFns$4 = [];
13570
14384
  var __component__$4 = /*#__PURE__*/normalizeComponent(_sfc_main$4, _sfc_render$4, _sfc_staticRenderFns$4, false, null, null, null, null);
@@ -13572,14 +14386,41 @@ var CrudKanban = __component__$4.exports;
13572
14386
 
13573
14387
  const _sfc_main$3 = {
13574
14388
  name: 'CrudCustom',
13575
- inject: ['displayMode', 'displayModes', 'listContainerClass', 'listItemClass', 'loading', 'items', 'infiniteScroll', 'messageEmptyResults', 'itemsList']
14389
+ inject: ['displayMode', 'displayModes', 'listContainerClass', 'listItemClass', 'loading', 'firstLoad', 'items', 'infiniteScroll', 'messageEmptyResults', 'messageLoading', 'itemsList'],
14390
+ computed: {
14391
+ currentDisplayMode() {
14392
+ if (!this.displayMode) return 1;
14393
+ if (this.displayMode.value !== undefined) {
14394
+ return this.displayMode.value;
14395
+ }
14396
+ if (typeof this.displayMode === 'function') {
14397
+ return this.displayMode();
14398
+ }
14399
+ return this.displayMode;
14400
+ },
14401
+ loadingValue() {
14402
+ return this.loading && this.loading.value !== undefined ? this.loading.value : this.loading;
14403
+ },
14404
+ firstLoadValue() {
14405
+ return this.firstLoad && this.firstLoad.value !== undefined ? this.firstLoad.value : this.firstLoad;
14406
+ }
14407
+ }
13576
14408
  };
13577
14409
  var _sfc_render$3 = function render() {
13578
14410
  var _vm = this,
13579
14411
  _c = _vm._self._c;
13580
- return _vm.displayMode == _vm.displayModes.MODE_CUSTOM ? _c('div', [_c('div', {
14412
+ return _vm.currentDisplayMode == _vm.displayModes.MODE_CUSTOM ? _c('div', [_c('div', {
13581
14413
  class: _vm.listContainerClass
13582
- }, [!_vm.loading && _vm.itemsList && _vm.itemsList.length == 0 && !_vm.infiniteScroll ? _c('p', {
14414
+ }, [_vm.loadingValue || !_vm.firstLoadValue ? _c('div', {
14415
+ staticClass: "text-center p-5"
14416
+ }, [_c('b-spinner', {
14417
+ attrs: {
14418
+ "variant": "primary",
14419
+ "label": "Cargando..."
14420
+ }
14421
+ }), _c('p', {
14422
+ staticClass: "mt-2"
14423
+ }, [_vm._v(_vm._s(_vm.messageLoading))])], 1) : [_vm.firstLoadValue && _vm.itemsList && _vm.itemsList.length == 0 && !_vm.infiniteScroll ? _c('p', {
13583
14424
  staticClass: "p-3"
13584
14425
  }, [_vm._v(" " + _vm._s(_vm.messageEmptyResults) + " ")]) : _vm._e(), _vm._l(_vm.itemsList, function (item, index) {
13585
14426
  return _c('div', {
@@ -13588,15 +14429,39 @@ var _sfc_render$3 = function render() {
13588
14429
  }, [_vm._t("card", null, {
13589
14430
  "item": item
13590
14431
  })], 2);
13591
- })], 2)]) : _vm._e();
14432
+ })]], 2)]) : _vm._e();
13592
14433
  };
13593
14434
  var _sfc_staticRenderFns$3 = [];
13594
14435
  var __component__$3 = /*#__PURE__*/normalizeComponent(_sfc_main$3, _sfc_render$3, _sfc_staticRenderFns$3, false, null, null, null, null);
13595
14436
  var CrudCustom = __component__$3.exports;
13596
14437
 
14438
+ var css$2 = "\n.export-format-options[data-v-051e3fd7] {\r\n display: flex;\r\n gap: 1rem;\r\n justify-content: center;\r\n flex-wrap: wrap;\n}\n.export-format-radio[data-v-051e3fd7] {\r\n flex: 1;\r\n min-width: 150px;\r\n padding: 1rem;\r\n border: 2px solid #dee2e6;\r\n border-radius: 0.5rem;\r\n cursor: pointer;\r\n transition: all 0.3s ease;\r\n text-align: center;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #fff;\n}\n.export-format-radio[data-v-051e3fd7]:hover {\r\n border-color: #007bff;\r\n background-color: #f8f9fa;\r\n transform: translateY(-2px);\r\n box-shadow: 0 2px 8px rgba(0, 123, 255, 0.2);\n}\n.export-format-radio[data-v-051e3fd7] .custom-control-input:checked ~ .custom-control-label {\r\n color: #007bff;\r\n font-weight: 600;\n}\n.export-format-radio[data-v-051e3fd7] .custom-control-input:checked ~ .custom-control-label::before {\r\n border-color: #007bff;\r\n background-color: #007bff;\n}\n.export-format-radio[data-v-051e3fd7] .custom-control-label {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n cursor: pointer;\r\n font-size: 1rem;\n}\n.export-format-radio[data-v-051e3fd7] .custom-control-label::before {\r\n margin-right: 0.5rem;\n}\n.export-format-radio[data-v-051e3fd7] svg {\r\n font-size: 1.5rem;\r\n color: #495057;\n}\n.export-format-radio[data-v-051e3fd7] .custom-control-input:checked ~ .custom-control-label svg {\r\n color: #007bff;\n}\r\n";
14439
+ n(css$2, {});
14440
+
13597
14441
  const _sfc_main$2 = {
13598
14442
  name: 'CrudModals',
13599
- inject: ['modelName', 'title', 'loading', 'validate', 'item', 'messageSave', 'showImport', 'showExport', 'fileImport', 'selectedItems', 'exportFormat', 'saveItem', 'importItems', 'exportItems']
14443
+ inject: ['modelName', 'title', 'loading', 'validate', 'item', 'getItem', 'messageSave', 'showImport', 'showExport', 'fileImport', 'selectedItems', 'exportFormat', 'saveItem', 'importItems', 'exportItems'],
14444
+ computed: {
14445
+ // Computed property para asegurar reactividad del item inyectado
14446
+ reactiveItem() {
14447
+ // Si hay una función getItem, usarla para obtener el item actual
14448
+ if (this.getItem && typeof this.getItem === 'function') {
14449
+ return this.getItem();
14450
+ }
14451
+ // Si no, usar el item inyectado directamente
14452
+ return this.item;
14453
+ }
14454
+ },
14455
+ watch: {
14456
+ // Watch el item inyectado para forzar actualización
14457
+ item: {
14458
+ handler() {
14459
+ this.$forceUpdate();
14460
+ },
14461
+ deep: true,
14462
+ immediate: true
14463
+ }
14464
+ }
13600
14465
  };
13601
14466
  var _sfc_render$2 = function render() {
13602
14467
  var _vm = this,
@@ -13618,7 +14483,7 @@ var _sfc_render$2 = function render() {
13618
14483
  on: {
13619
14484
  "submit": _vm.saveItem
13620
14485
  }
13621
- }, [_vm.item ? _vm._t("form", function () {
14486
+ }, [_vm.reactiveItem ? [_vm._t("form", function () {
13622
14487
  return [_c('b-form-group', {
13623
14488
  attrs: {
13624
14489
  "label": "Nombre:",
@@ -13631,16 +14496,16 @@ var _sfc_render$2 = function render() {
13631
14496
  "placeholder": "Nombre"
13632
14497
  },
13633
14498
  model: {
13634
- value: _vm.item.title,
14499
+ value: _vm.reactiveItem.title,
13635
14500
  callback: function ($$v) {
13636
- _vm.$set(_vm.item, "title", $$v);
14501
+ _vm.$set(_vm.reactiveItem, "title", $$v);
13637
14502
  },
13638
- expression: "item.title"
14503
+ expression: "reactiveItem.title"
13639
14504
  }
13640
14505
  })], 1)];
13641
14506
  }, {
13642
- "item": _vm.item
13643
- }) : _vm._e(), _c('b-button', {
14507
+ "item": _vm.reactiveItem
14508
+ })] : _vm._e(), _c('b-button', {
13644
14509
  attrs: {
13645
14510
  "block": "",
13646
14511
  "type": "submit",
@@ -13651,8 +14516,8 @@ var _sfc_render$2 = function render() {
13651
14516
  attrs: {
13652
14517
  "small": ""
13653
14518
  }
13654
- }) : _vm._e(), _vm._v(_vm._s(_vm.messageSave) + " ")], 1)], 2)] : _vm._e(), !_vm.validate ? [_vm.item ? _vm._t("form", function () {
13655
- return _vm._l(_vm.item, function (value, key) {
14519
+ }) : _vm._e(), _vm._v(_vm._s(_vm.messageSave) + " ")], 1)], 2)] : _vm._e(), !_vm.validate ? [_vm.reactiveItem ? [_vm._t("form", function () {
14520
+ return _vm._l(_vm.reactiveItem, function (value, key) {
13656
14521
  return _c('b-form-group', {
13657
14522
  key: key,
13658
14523
  attrs: {
@@ -13664,17 +14529,17 @@ var _sfc_render$2 = function render() {
13664
14529
  "required": ""
13665
14530
  },
13666
14531
  model: {
13667
- value: _vm.item[key],
14532
+ value: _vm.reactiveItem[key],
13668
14533
  callback: function ($$v) {
13669
- _vm.$set(_vm.item, key, $$v);
14534
+ _vm.$set(_vm.reactiveItem, key, $$v);
13670
14535
  },
13671
- expression: "item[key]"
14536
+ expression: "reactiveItem[key]"
13672
14537
  }
13673
14538
  })], 1);
13674
14539
  });
13675
14540
  }, {
13676
- "item": _vm.item
13677
- }) : _vm._e(), _c('b-button', {
14541
+ "item": _vm.reactiveItem
14542
+ })] : _vm._e(), _c('b-button', {
13678
14543
  attrs: {
13679
14544
  "block": "",
13680
14545
  "type": "submit",
@@ -13698,8 +14563,8 @@ var _sfc_render$2 = function render() {
13698
14563
  "title": _vm.title,
13699
14564
  "no-close-on-backdrop": ""
13700
14565
  }
13701
- }, [_vm.item ? _vm._t("show", function () {
13702
- return [_c('b-list-group', _vm._l(_vm.item, function (value, key) {
14566
+ }, [_vm.reactiveItem ? [_vm._t("show", function () {
14567
+ return [_c('b-list-group', _vm._l(_vm.reactiveItem, function (value, key) {
13703
14568
  return _c('b-list-group-item', {
13704
14569
  key: key
13705
14570
  }, [_c('b-row', {
@@ -13716,8 +14581,8 @@ var _sfc_render$2 = function render() {
13716
14581
  }, [_vm._v(_vm._s(JSON.stringify(value)))])], 1)], 1);
13717
14582
  }), 1)];
13718
14583
  }, {
13719
- "item": _vm.item
13720
- }) : _vm._e()], 2), _vm.showImport ? _c('b-modal', {
14584
+ "item": _vm.reactiveItem
14585
+ })] : _vm._e()], 2), _vm.showImport ? _c('b-modal', {
13721
14586
  ref: "modal-import",
13722
14587
  attrs: {
13723
14588
  "title": "Importar",
@@ -13770,34 +14635,42 @@ var _sfc_render$2 = function render() {
13770
14635
  "show": _vm.loading,
13771
14636
  "rounded": "sm"
13772
14637
  }
13773
- }, [_vm.selectedItems.length ? _c('p', [_vm._v("Se exportará " + _vm._s(_vm.selectedItems.length) + " elementos.")]) : _c('p', [_vm._v("Se exportará la consulta actual.")]), _c('select', {
13774
- directives: [{
13775
- name: "model",
13776
- rawName: "v-model",
13777
- value: _vm.exportFormat,
13778
- expression: "exportFormat"
13779
- }],
13780
- staticClass: "form-control",
13781
- on: {
13782
- "change": function ($event) {
13783
- var $$selectedVal = Array.prototype.filter.call($event.target.options, function (o) {
13784
- return o.selected;
13785
- }).map(function (o) {
13786
- var val = "_value" in o ? o._value : o.value;
13787
- return val;
13788
- });
13789
- _vm.exportFormat = $event.target.multiple ? $$selectedVal : $$selectedVal[0];
13790
- }
14638
+ }, [_vm.selectedItems.length ? _c('p', [_vm._v("Se exportará " + _vm._s(_vm.selectedItems.length) + " elementos.")]) : _c('p', [_vm._v("Se exportará la consulta actual.")]), _c('b-form-group', {
14639
+ staticClass: "mt-3",
14640
+ attrs: {
14641
+ "label": "Seleccione el formato de exportación:"
13791
14642
  }
13792
- }, [_c('option', {
14643
+ }, [_c('div', {
14644
+ staticClass: "export-format-options"
14645
+ }, [_c('b-form-radio', {
14646
+ staticClass: "export-format-radio",
13793
14647
  attrs: {
13794
14648
  "value": "JSON"
14649
+ },
14650
+ model: {
14651
+ value: _vm.exportFormat,
14652
+ callback: function ($$v) {
14653
+ _vm.exportFormat = $$v;
14654
+ },
14655
+ expression: "exportFormat"
13795
14656
  }
13796
- }, [_vm._v("JSON")]), _c('option', {
14657
+ }, [_c('b-icon-file-text', {
14658
+ staticClass: "mr-2"
14659
+ }), _vm._v(" JSON ")], 1), _c('b-form-radio', {
14660
+ staticClass: "export-format-radio",
13797
14661
  attrs: {
13798
14662
  "value": "XLSX"
14663
+ },
14664
+ model: {
14665
+ value: _vm.exportFormat,
14666
+ callback: function ($$v) {
14667
+ _vm.exportFormat = $$v;
14668
+ },
14669
+ expression: "exportFormat"
13799
14670
  }
13800
- }, [_vm._v("XLSX")])]), _c('div', {
14671
+ }, [_c('b-icon-table', {
14672
+ staticClass: "mr-2"
14673
+ }), _vm._v(" XLSX ")], 1)], 1)]), _c('div', {
13801
14674
  staticClass: "text-center mt-3"
13802
14675
  }, [_c('b-button', {
13803
14676
  attrs: {
@@ -13809,13 +14682,13 @@ var _sfc_render$2 = function render() {
13809
14682
  return _vm.exportItems();
13810
14683
  }
13811
14684
  }
13812
- }, [_c('b-icon-cloud-upload'), _vm._v(" " + _vm._s(_vm.loading ? "Cargando..." : "Exportar") + " ")], 1)], 1)])];
14685
+ }, [_c('b-icon-cloud-upload'), _vm._v(" " + _vm._s(_vm.loading ? "Cargando..." : "Exportar") + " ")], 1)], 1)], 1)];
13813
14686
  }, {
13814
14687
  "item": _vm.item
13815
14688
  }) : _vm._e()], 2) : _vm._e()], 1);
13816
14689
  };
13817
14690
  var _sfc_staticRenderFns$2 = [];
13818
- var __component__$2 = /*#__PURE__*/normalizeComponent(_sfc_main$2, _sfc_render$2, _sfc_staticRenderFns$2, false, null, null, null, null);
14691
+ var __component__$2 = /*#__PURE__*/normalizeComponent(_sfc_main$2, _sfc_render$2, _sfc_staticRenderFns$2, false, null, "051e3fd7", null, null);
13819
14692
  var CrudModals = __component__$2.exports;
13820
14693
 
13821
14694
  var vueInfiniteLoading = {exports: {}};
@@ -13834,7 +14707,7 @@ vueInfiniteLoading.exports;
13834
14707
  var vueInfiniteLoadingExports = vueInfiniteLoading.exports;
13835
14708
  var InfiniteLoading = /*@__PURE__*/getDefaultExportFromCjs(vueInfiniteLoadingExports);
13836
14709
 
13837
- var css$1 = "\n.paginator-container[data-v-11671e09] {\r\n display: grid;\r\n grid-template-columns: 1fr auto 1fr;\r\n align-items: center;\r\n width: 100%;\r\n margin-top: 1rem;\r\n gap: 1rem;\n}\n.paginator-data[data-v-11671e09] {\r\n display: flex;\r\n flex-wrap: nowrap;\r\n justify-content: flex-start;\r\n align-items: center;\r\n gap: 0.5rem;\r\n font-size: 0.875rem;\r\n grid-column: 1;\n}\n.paginator-badge[data-v-11671e09] {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n padding: 0.375rem 0.625rem;\r\n background-color: #f8f9fa;\r\n border: 1px solid #dee2e6;\r\n border-radius: 0.375rem;\r\n color: #495057;\r\n transition: all 0.2s ease;\n}\n.paginator-badge[data-v-11671e09]:hover {\r\n background-color: #e9ecef;\r\n border-color: #ced4da;\n}\n.paginator-label[data-v-11671e09] {\r\n font-weight: 500;\r\n color: #6c757d;\n}\n.paginator-value[data-v-11671e09] {\r\n font-weight: 600;\r\n color: #212529;\n}\n.paginator-dropdown[data-v-11671e09] {\r\n font-size: 0.875rem;\n}\n.paginator-dropdown[data-v-11671e09] .btn {\r\n padding: 0.375rem 0.625rem;\r\n font-size: 0.875rem;\r\n background-color: #f8f9fa;\r\n border: 1px solid #dee2e6;\r\n color: #495057;\n}\n.paginator-dropdown[data-v-11671e09] .btn:hover {\r\n background-color: #e9ecef;\r\n border-color: #ced4da;\n}\n.crud-paginator[data-v-11671e09] {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n grid-column: 2;\n}\n.paginator-badge-dropdown[data-v-11671e09] {\r\n z-index: 1;\r\n position: relative;\n}\n.paginator-badge-dropdown[data-v-11671e09] .btn {\r\n padding: 0.375rem 0.625rem;\r\n font-size: 0.875rem;\r\n background-color: #f8f9fa;\r\n border: 1px solid #dee2e6;\r\n color: #495057;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.25rem;\n}\n.paginator-badge-dropdown[data-v-11671e09] .btn:hover {\r\n background-color: #e9ecef;\r\n border-color: #ced4da;\n}\r\n";
14710
+ var css$1 = "\n.paginator-container[data-v-73e31fd7] {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n align-items: center;\n width: 100%;\n margin-top: 1rem;\n gap: 1rem;\n}\n.paginator-data[data-v-73e31fd7] {\n display: flex;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n grid-column: 1;\n}\n.paginator-badge[data-v-73e31fd7] {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.375rem 0.625rem;\n background-color: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n color: #495057;\n transition: all 0.2s ease;\n}\n.paginator-badge[data-v-73e31fd7]:hover {\n background-color: #e9ecef;\n border-color: #ced4da;\n}\n.paginator-label[data-v-73e31fd7] {\n font-weight: 500;\n color: #6c757d;\n}\n.paginator-value[data-v-73e31fd7] {\n font-weight: 600;\n color: #212529;\n}\n.paginator-dropdown[data-v-73e31fd7] {\n font-size: 0.875rem;\n}\n.paginator-dropdown[data-v-73e31fd7] .btn {\n padding: 0.375rem 0.625rem;\n font-size: 0.875rem;\n background-color: #f8f9fa;\n border: 1px solid #dee2e6;\n color: #495057;\n}\n.paginator-dropdown[data-v-73e31fd7] .btn:hover {\n background-color: #e9ecef;\n border-color: #ced4da;\n}\n.crud-paginator[data-v-73e31fd7] {\n display: flex;\n justify-content: center;\n align-items: center;\n grid-column: 2;\n}\n.paginator-badge-dropdown[data-v-73e31fd7] {\n z-index: 1;\n position: relative;\n}\n.paginator-badge-dropdown[data-v-73e31fd7] .btn {\n padding: 0.375rem 0.625rem;\n font-size: 0.875rem;\n background-color: #f8f9fa;\n border: 1px solid #dee2e6;\n color: #495057;\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n}\n.paginator-badge-dropdown[data-v-73e31fd7] .btn:hover {\n background-color: #e9ecef;\n border-color: #ced4da;\n}\n";
13838
14711
  n(css$1, {});
13839
14712
 
13840
14713
  const _sfc_main$1 = {
@@ -13842,7 +14715,7 @@ const _sfc_main$1 = {
13842
14715
  components: {
13843
14716
  InfiniteLoading
13844
14717
  },
13845
- inject: ['infiniteScroll', 'infiniteScrollKey', 'messageLoading', 'messageNoMore', 'messageEmptyResults', 'loading', 'items', 'pagination', 'selectedItems', 'showPaginator', 'infiniteHandler', 'onPaginationChange', 'onPerPageChange', 'clearSelection'],
14718
+ inject: ['infiniteScroll', 'infiniteScrollKey', 'messageLoading', 'messageNoMore', 'messageEmptyResults', 'loading', 'firstLoad', 'items', 'pagination', 'selectedItems', 'showPaginator', 'infiniteHandler', 'onPaginationChange', 'onPerPageChange', 'clearSelection'],
13846
14719
  data() {
13847
14720
  return {
13848
14721
  perPageOptions: [10, 20, 50, 100]
@@ -13852,6 +14725,12 @@ const _sfc_main$1 = {
13852
14725
  selectedItemsCount() {
13853
14726
  // Computed para forzar reactividad del contador
13854
14727
  return this.selectedItems ? this.selectedItems.length : 0;
14728
+ },
14729
+ loadingValue() {
14730
+ return this.loading && this.loading.value !== undefined ? this.loading.value : this.loading;
14731
+ },
14732
+ firstLoadValue() {
14733
+ return this.firstLoad && this.firstLoad.value !== undefined ? this.firstLoad.value : this.firstLoad;
13855
14734
  }
13856
14735
  }
13857
14736
  };
@@ -13879,14 +14758,14 @@ var _sfc_render$1 = function render() {
13879
14758
  "slot": "no-more"
13880
14759
  },
13881
14760
  slot: "no-more"
13882
- }, [!_vm.loading ? _c('div', {
14761
+ }, [!_vm.loadingValue ? _c('div', {
13883
14762
  staticClass: "text-center"
13884
14763
  }, [_vm._v(_vm._s(_vm.messageNoMore))]) : _vm._e()]), _c('div', {
13885
14764
  attrs: {
13886
14765
  "slot": "no-results"
13887
14766
  },
13888
14767
  slot: "no-results"
13889
- }, [!_vm.loading ? _c('div', {
14768
+ }, [!_vm.loadingValue && _vm.firstLoadValue ? _c('div', {
13890
14769
  staticClass: "text-center"
13891
14770
  }, [_vm._v(_vm._s(_vm.items.length == 0 ? _vm.messageEmptyResults : _vm.messageNoMore))]) : _vm._e()])]) : _vm._e(), !_vm.infiniteScroll ? _c('div', {
13892
14771
  staticClass: "paginator-container"
@@ -13952,7 +14831,7 @@ var _sfc_render$1 = function render() {
13952
14831
  }) : _vm._e()], 1)]) : _vm._e()], 1);
13953
14832
  };
13954
14833
  var _sfc_staticRenderFns$1 = [];
13955
- var __component__$1 = /*#__PURE__*/normalizeComponent(_sfc_main$1, _sfc_render$1, _sfc_staticRenderFns$1, false, null, "11671e09", null, null);
14834
+ var __component__$1 = /*#__PURE__*/normalizeComponent(_sfc_main$1, _sfc_render$1, _sfc_staticRenderFns$1, false, null, "73e31fd7", null, null);
13956
14835
  var CrudPagination = __component__$1.exports;
13957
14836
 
13958
14837
  var crudData = {
@@ -13982,6 +14861,20 @@ var crudData = {
13982
14861
  filterSidebarOpen: false,
13983
14862
  internalFilters: [],
13984
14863
  forceRecomputeCounter: 0,
14864
+ _displayMode: 1,
14865
+ // Propiedad local para displayMode (se inicializará desde la prop en created())
14866
+ displayModeReactive: Vue.observable({
14867
+ value: 1
14868
+ }),
14869
+ // Objeto reactivo para provide/inject
14870
+ loadingReactive: Vue.observable({
14871
+ value: false
14872
+ }),
14873
+ // Objeto reactivo para loading
14874
+ firstLoadReactive: Vue.observable({
14875
+ value: false
14876
+ }),
14877
+ // Objeto reactivo para firstLoad
13985
14878
  displayModes: {
13986
14879
  MODE_TABLE: 1,
13987
14880
  MODE_CARDS: 2,
@@ -14012,7 +14905,7 @@ var crudData = {
14012
14905
  if (this.groupedSplit) {
14013
14906
  return true;
14014
14907
  }
14015
- return this.displayMode == this.displayModes.MODE_KANBAN;
14908
+ return this._displayMode == this.displayModes.MODE_KANBAN;
14016
14909
  },
14017
14910
  itemsList() {
14018
14911
  const items = this.ajax ? this.items : this.items.slice(this.paginationIndexStart, this.paginationIndexEnd);
@@ -14054,7 +14947,15 @@ var crudData = {
14054
14947
  this.internalFilters.forEach(f => {
14055
14948
  if (f.value) {
14056
14949
  let colname = f.column.replace("_sort", "").replace("_from", "").replace("_to", "");
14057
- filter.push([colname, f.op, f.value]);
14950
+ let op = f.op;
14951
+
14952
+ // Aplicar operadores automáticamente para filtros de rango
14953
+ if (f.column.endsWith("_from")) {
14954
+ op = ">=";
14955
+ } else if (f.column.endsWith("_to")) {
14956
+ op = "<=";
14957
+ }
14958
+ filter.push([colname, op, f.value]);
14058
14959
  }
14059
14960
  });
14060
14961
  return filter;
@@ -14094,7 +14995,23 @@ var crudData = {
14094
14995
  this.fetchItems();
14095
14996
  }
14096
14997
  },
14097
- displayMode() {
14998
+ // Watcher para la prop displayMode (sincroniza cuando cambia desde el componente padre)
14999
+ displayMode(newVal) {
15000
+ // Usar $props para acceder a la prop y evitar conflictos con data properties
15001
+ const propValue = this.$props && this.$props.displayMode !== undefined ? this.$props.displayMode : newVal;
15002
+ if (propValue !== undefined && this._displayMode !== propValue) {
15003
+ this._displayMode = propValue;
15004
+ if (this.displayModeReactive) {
15005
+ this.displayModeReactive.value = propValue;
15006
+ }
15007
+ }
15008
+ },
15009
+ // Watcher para la propiedad local _displayMode (para forzar re-renderizado)
15010
+ _displayMode(newVal) {
15011
+ // Actualizar el objeto reactivo si existe
15012
+ if (this.displayModeReactive) {
15013
+ this.displayModeReactive.value = newVal;
15014
+ }
14098
15015
  // Forzar re-renderizado cuando cambia el modo de visualización
14099
15016
  this.$nextTick(() => {
14100
15017
  this.forceRecomputeCounter++;
@@ -14152,7 +15069,29 @@ var crudData = {
14152
15069
  });
14153
15070
  },
14154
15071
  deep: true
15072
+ },
15073
+ loading: {
15074
+ handler(newVal) {
15075
+ this.loadingReactive.value = newVal;
15076
+ },
15077
+ immediate: true
15078
+ },
15079
+ firstLoad: {
15080
+ handler(newVal) {
15081
+ this.firstLoadReactive.value = newVal;
15082
+ },
15083
+ immediate: true
15084
+ }
15085
+ },
15086
+ created() {
15087
+ // Inicializar _displayMode desde la prop displayMode en created() para que esté disponible en provide()
15088
+ if (this.$props && this.$props.displayMode !== undefined) {
15089
+ this._displayMode = this.$props.displayMode;
15090
+ this.displayModeReactive.value = this._displayMode;
14155
15091
  }
15092
+ // Inicializar valores reactivos
15093
+ this.loadingReactive.value = this.loading;
15094
+ this.firstLoadReactive.value = this.firstLoad;
14156
15095
  },
14157
15096
  mounted() {
14158
15097
  const now = Math.floor(Date.now() / 1000);
@@ -19501,7 +20440,7 @@ var crudApi = {
19501
20440
  dataKey: 'data',
19502
20441
  params: {
19503
20442
  page: page,
19504
- limit: this.pagination.perPage,
20443
+ limit: this.pagination.per_page,
19505
20444
  filters: JSON.stringify(this.finalFilters)
19506
20445
  }
19507
20446
  });
@@ -19535,7 +20474,7 @@ var crudApi = {
19535
20474
  return axios.get(this.apiUrl + "/" + this.modelName, {
19536
20475
  params: {
19537
20476
  page: page,
19538
- limit: this.limit,
20477
+ limit: this.pagination.per_page,
19539
20478
  filters: JSON.stringify(this.finalFilters)
19540
20479
  }
19541
20480
  }).then(response => {
@@ -19855,10 +20794,10 @@ var crudApi = {
19855
20794
  ids: ids
19856
20795
  }
19857
20796
  }).then(response => {
19858
- this.items = this.items.filter(it => !ids.includes(it.id));
19859
20797
  this.toastSuccess("Elemento/s eliminado.");
19860
20798
  this.$emit("itemDeleted", {});
19861
- this.loading = false;
20799
+ this.clearSelection();
20800
+ this.refresh();
19862
20801
  }).catch(error => {
19863
20802
  this.toastError(error);
19864
20803
  this.loading = false;
@@ -19868,8 +20807,10 @@ var crudApi = {
19868
20807
  let ids = this.selectedItems.map(it => it.id);
19869
20808
  this.items = this.items.filter(it => !ids.includes(it.id));
19870
20809
  this.item = null;
20810
+ this.pagination.total = this.items.length;
19871
20811
  this.toastSuccess("Elemento Eliminado");
19872
20812
  this.$emit("itemDeleted", {});
20813
+ this.clearSelection();
19873
20814
  this.loading = false;
19874
20815
  },
19875
20816
  async deleteItemBulkVuex() {
@@ -19891,7 +20832,15 @@ var crudApi = {
19891
20832
  return;
19892
20833
  }
19893
20834
  }
20835
+
20836
+ // Actualizar items desde el store Vuex
20837
+ let itemsResult = this.model.query().withAll().get();
20838
+ if (itemsResult) {
20839
+ this.items = itemsResult;
20840
+ }
19894
20841
  this.toastSuccess("Elemento eliminados.");
20842
+ this.clearSelection();
20843
+ this.loading = false;
19895
20844
  },
19896
20845
  saveSort() {
19897
20846
  if (this.orderable) {
@@ -20025,15 +20974,15 @@ var crudFilters = {
20025
20974
  setupFilters() {
20026
20975
  this.columns.forEach(column => {
20027
20976
  if (this.isColumnHasFilter(column)) {
20028
- if (column.type == "date") {
20977
+ if (column.type == "date" || column.type == "number" || column.type == "money") {
20029
20978
  this.internalFilters.push({
20030
20979
  column: column.prop + "_from",
20031
- op: column.filterOp ? column.filterOp : "=",
20980
+ op: ">=",
20032
20981
  value: null
20033
20982
  });
20034
20983
  this.internalFilters.push({
20035
20984
  column: column.prop + "_to",
20036
- op: column.filterOp ? column.filterOp : "=",
20985
+ op: "<=",
20037
20986
  value: null
20038
20987
  });
20039
20988
  } else {
@@ -20052,6 +21001,46 @@ var crudFilters = {
20052
21001
  });
20053
21002
  }
20054
21003
  });
21004
+
21005
+ // Procesar filtros custom
21006
+ if (this.customFilters && Array.isArray(this.customFilters)) {
21007
+ this.customFilters.forEach(customFilter => {
21008
+ if (this.isCustomFilterEnabled(customFilter)) {
21009
+ // Si el tipo es función (callback), no procesamos automáticamente
21010
+ // El callback se encargará del renderizado y gestión del filtro
21011
+ if (typeof customFilter.type === 'string') {
21012
+ if (customFilter.type == "date" || customFilter.type == "number" || customFilter.type == "money") {
21013
+ this.internalFilters.push({
21014
+ column: customFilter.prop + "_from",
21015
+ op: ">=",
21016
+ value: null
21017
+ });
21018
+ this.internalFilters.push({
21019
+ column: customFilter.prop + "_to",
21020
+ op: "<=",
21021
+ value: null
21022
+ });
21023
+ } else {
21024
+ this.internalFilters.push({
21025
+ column: customFilter.prop,
21026
+ op: customFilter.filterOp ? customFilter.filterOp : "=",
21027
+ value: null
21028
+ });
21029
+ }
21030
+ } else if (typeof customFilter.type === 'function') {
21031
+ // Para callbacks, solo creamos el filtro interno si no existe
21032
+ // El callback se encargará del renderizado
21033
+ if (!this.internalFilterByProp(customFilter.prop)) {
21034
+ this.internalFilters.push({
21035
+ column: customFilter.prop,
21036
+ op: customFilter.filterOp ? customFilter.filterOp : "=",
21037
+ value: null
21038
+ });
21039
+ }
21040
+ }
21041
+ }
21042
+ });
21043
+ }
20055
21044
  },
20056
21045
  toggleSortFilter(column) {
20057
21046
  let value = this.internalFilterByProp(column.prop + "_sort").value;
@@ -20070,6 +21059,11 @@ var crudFilters = {
20070
21059
  toggleFilters() {
20071
21060
  this.filtersVisible = !this.filtersVisible;
20072
21061
  this.filterSidebarOpen = this.filtersVisible;
21062
+
21063
+ // Si se está abriendo el sidebar y los filtros no están inicializados, inicializarlos
21064
+ if (this.filtersVisible && this.internalFilters.length === 0) {
21065
+ this.setupFilters();
21066
+ }
20073
21067
  },
20074
21068
  resetFilters(refresh = true) {
20075
21069
  this.internalFilters = [];
@@ -20084,6 +21078,9 @@ var crudFilters = {
20084
21078
  isColumnHasFilter(column) {
20085
21079
  return column && !column.hideFilter && column.type != "actions";
20086
21080
  },
21081
+ isCustomFilterEnabled(customFilter) {
21082
+ return customFilter && customFilter.prop && !customFilter.hideFilter && customFilter.type != "actions";
21083
+ },
20087
21084
  setFilter(column, value) {
20088
21085
  let filter = this.filter.find(f => f.column == column);
20089
21086
  filter.value = value;
@@ -20110,6 +21107,33 @@ var crudFilters = {
20110
21107
 
20111
21108
  var crudValidation = {
20112
21109
  methods: {
21110
+ normalizeOptions(options) {
21111
+ if (!Array.isArray(options)) {
21112
+ return options;
21113
+ }
21114
+ return options.map(option => {
21115
+ const normalized = {
21116
+ ...option
21117
+ };
21118
+
21119
+ // Asegurar que siempre tenga id, value y text
21120
+ if (normalized.id === undefined && normalized.value !== undefined) {
21121
+ normalized.id = normalized.value;
21122
+ } else if (normalized.value === undefined && normalized.id !== undefined) {
21123
+ normalized.value = normalized.id;
21124
+ } else if (normalized.id === undefined && normalized.value === undefined) {
21125
+ // Si no tiene ni id ni value, usar text o label como valor por defecto
21126
+ normalized.id = normalized.text || normalized.label || "";
21127
+ normalized.value = normalized.id;
21128
+ }
21129
+
21130
+ // Asegurar que siempre tenga text
21131
+ if (normalized.text === undefined) {
21132
+ normalized.text = normalized.label !== undefined ? normalized.label : "";
21133
+ }
21134
+ return normalized;
21135
+ });
21136
+ },
20113
21137
  async loadOptions() {
20114
21138
  for (let i = 0; i < this.columns.length; i++) {
20115
21139
  const column = this.columns[i];
@@ -20122,6 +21146,15 @@ var crudValidation = {
20122
21146
  });
20123
21147
  console.debug("Options promise", this.columns);
20124
21148
  }
21149
+
21150
+ // Normalizar opciones para columnas tipo state y array
21151
+ if ((column.type === 'state' || column.type === 'array') && Array.isArray(column.options)) {
21152
+ const normalizedOptions = this.normalizeOptions(column.options);
21153
+ this.$set(this.columns, i, {
21154
+ ...column,
21155
+ options: normalizedOptions
21156
+ });
21157
+ }
20125
21158
  }
20126
21159
  this.optionsLoaded = true;
20127
21160
  },
@@ -20143,22 +21176,70 @@ var crudValidation = {
20143
21176
  });
20144
21177
  return values.join(",");
20145
21178
  },
20146
- getStateValue(value, options) {
20147
- if (!options) {
20148
- console.debug("State Column Not hast options returning value", value, options);
20149
- return value;
21179
+ getStateOptions(value, options) {
21180
+ if (!options || !Array.isArray(options) || options.length === 0) {
21181
+ return [];
21182
+ }
21183
+
21184
+ // Asegurar que las opciones estén normalizadas (por si loadOptions no se ha ejecutado aún)
21185
+ const normalizedOptions = this.normalizeOptions(options);
21186
+
21187
+ // Si el valor es null o undefined, no hay coincidencias
21188
+ if (value === null || value === undefined) {
21189
+ return [];
20150
21190
  }
20151
- let ops = options.filter(option => {
21191
+
21192
+ // Normalizar el valor para comparación (convertir a string)
21193
+ const normalizedValue = String(value).trim();
21194
+ return normalizedOptions.filter(option => {
21195
+ // Después de normalizar, las opciones siempre tienen id, value y text
21196
+ // Comparar tanto con id como con value para asegurar compatibilidad
21197
+ const optionId = option.id !== undefined && option.id !== null ? String(option.id).trim() : null;
21198
+ const optionValue = option.value !== undefined && option.value !== null ? String(option.value).trim() : null;
20152
21199
  if (Array.isArray(value)) {
20153
- return value.includes(option.id);
21200
+ // Para arrays, verificar si alguno de los valores coincide
21201
+ return value.some(val => {
21202
+ if (val === null || val === undefined) return false;
21203
+ const normalizedVal = String(val).trim();
21204
+ return optionId && normalizedVal === optionId || optionValue && normalizedVal === optionValue;
21205
+ });
20154
21206
  } else {
20155
- return option.id == value;
21207
+ // Comparación estricta para valores únicos - comparar con ambos id y value
21208
+ return optionId && optionId === normalizedValue || optionValue && optionValue === normalizedValue;
20156
21209
  }
20157
21210
  });
20158
- ops = ops.map(option => {
20159
- return option.text ? option.text : option.label ? option.label : "";
20160
- });
20161
- return ops.join(", ");
21211
+ },
21212
+ getStateValue(value, options) {
21213
+ if (!options) {
21214
+ console.debug("State Column Not hast options returning value", value, options);
21215
+ return value;
21216
+ }
21217
+ const ops = this.getStateOptions(value, options);
21218
+ return ops.map(option => {
21219
+ // Usar text directamente (ya normalizado)
21220
+ return option.text !== undefined ? option.text : "";
21221
+ }).join(", ");
21222
+ },
21223
+ getStateBadgeVariant(option) {
21224
+ // Si la opción tiene una propiedad variant, usarla
21225
+ if (option.variant) {
21226
+ return option.variant;
21227
+ }
21228
+ // Si no, intentar inferir del id/value común
21229
+ const idValue = String(option.id || option.value || '').toLowerCase();
21230
+ if (idValue.includes('active') || idValue.includes('activo')) {
21231
+ return 'success';
21232
+ } else if (idValue.includes('inactive') || idValue.includes('inactivo')) {
21233
+ return 'secondary';
21234
+ } else if (idValue.includes('pending') || idValue.includes('pendiente')) {
21235
+ return 'warning';
21236
+ } else if (idValue.includes('done') || idValue.includes('completado')) {
21237
+ return 'success';
21238
+ } else if (idValue.includes('error') || idValue.includes('error')) {
21239
+ return 'danger';
21240
+ }
21241
+ // Variante por defecto
21242
+ return 'primary';
20162
21243
  }
20163
21244
  }
20164
21245
  };
@@ -20294,37 +21375,134 @@ var crudHelpers = {
20294
21375
  this.$emit("selectItems", this.selectedItems);
20295
21376
  },
20296
21377
  showItem(id, itemIndex = null) {
21378
+ let item;
20297
21379
  if (itemIndex == null) {
20298
- let item = this.items.find(it => it.id == id);
20299
- this.item = item;
21380
+ item = this.items.find(it => it.id == id);
20300
21381
  } else {
20301
- this.item = this.items[itemIndex];
21382
+ item = this.items[itemIndex];
21383
+ }
21384
+ if (!item) {
21385
+ console.warn('Item not found for showItem');
21386
+ return;
20302
21387
  }
21388
+
21389
+ // Hacer copia profunda del objeto para asegurar reactividad
21390
+ const itemCopy = JSON.parse(JSON.stringify(item));
21391
+ if (this.useVuexORM && !this.vuexLocalforage) {
21392
+ const modelInstance = new this.model(itemCopy);
21393
+ // Usar $set para cada propiedad para asegurar reactividad
21394
+ Object.keys(modelInstance).forEach(key => {
21395
+ this.$set(this.item, key, modelInstance[key]);
21396
+ });
21397
+ // Eliminar propiedades que ya no existen
21398
+ Object.keys(this.item).forEach(key => {
21399
+ if (!(key in modelInstance)) {
21400
+ this.$delete(this.item, key);
21401
+ }
21402
+ });
21403
+ } else {
21404
+ // Usar $set para cada propiedad para asegurar reactividad
21405
+ Object.keys(itemCopy).forEach(key => {
21406
+ this.$set(this.item, key, itemCopy[key]);
21407
+ });
21408
+ // Eliminar propiedades que ya no existen
21409
+ Object.keys(this.item).forEach(key => {
21410
+ if (!(key in itemCopy)) {
21411
+ this.$delete(this.item, key);
21412
+ }
21413
+ });
21414
+ }
21415
+
21416
+ // Forzar actualización para asegurar que los cambios se reflejen
21417
+ this.$forceUpdate();
20303
21418
  this.onSelect();
20304
- this.$bvModal.show("modal-show-item-" + this.modelName);
21419
+ this.$nextTick(() => {
21420
+ this.$forceUpdate();
21421
+ this.$bvModal.show("modal-show-item-" + this.modelName);
21422
+ });
20305
21423
  },
20306
21424
  createItem() {
20307
- if (this.useVuexORM) {
20308
- if (this.vuexLocalforage) {
20309
- this.item = JSON.parse(JSON.stringify(this.itemDefault));
20310
- } else {
20311
- this.item = new this.model(JSON.parse(JSON.stringify(this.itemDefault)));
20312
- }
21425
+ // Hacer copia profunda del objeto para asegurar reactividad
21426
+ const itemCopy = JSON.parse(JSON.stringify(this.itemDefault));
21427
+ if (this.useVuexORM && !this.vuexLocalforage) {
21428
+ const modelInstance = new this.model(itemCopy);
21429
+ // Usar $set para cada propiedad para asegurar reactividad
21430
+ Object.keys(modelInstance).forEach(key => {
21431
+ this.$set(this.item, key, modelInstance[key]);
21432
+ });
21433
+ // Eliminar propiedades que ya no existen
21434
+ Object.keys(this.item).forEach(key => {
21435
+ if (!(key in modelInstance)) {
21436
+ this.$delete(this.item, key);
21437
+ }
21438
+ });
20313
21439
  } else {
20314
- this.item = JSON.parse(JSON.stringify(this.itemDefault));
21440
+ // Usar $set para cada propiedad para asegurar reactividad
21441
+ Object.keys(itemCopy).forEach(key => {
21442
+ this.$set(this.item, key, itemCopy[key]);
21443
+ });
21444
+ // Eliminar propiedades que ya no existen
21445
+ Object.keys(this.item).forEach(key => {
21446
+ if (!(key in itemCopy)) {
21447
+ this.$delete(this.item, key);
21448
+ }
21449
+ });
20315
21450
  }
21451
+
21452
+ // Forzar actualización para asegurar que los cambios se reflejen
21453
+ this.$forceUpdate();
20316
21454
  this.onSelect();
20317
- this.$bvModal.show("modal-form-item-" + this.modelName);
21455
+ this.$nextTick(() => {
21456
+ this.$forceUpdate();
21457
+ this.$bvModal.show("modal-form-item-" + this.modelName);
21458
+ });
20318
21459
  },
20319
21460
  updateItem(id, itemIndex = null) {
21461
+ let item;
20320
21462
  if (itemIndex == null) {
20321
- let item = this.items.find(it => it.id == id);
20322
- this.item = item;
21463
+ item = this.items.find(it => it.id == id);
20323
21464
  } else {
20324
- this.item = this.items[itemIndex];
21465
+ item = this.items[itemIndex];
21466
+ }
21467
+ if (!item) {
21468
+ console.warn('Item not found for updateItem');
21469
+ return;
20325
21470
  }
21471
+
21472
+ // Hacer copia profunda del objeto para asegurar reactividad
21473
+ const itemCopy = JSON.parse(JSON.stringify(item));
21474
+ if (this.useVuexORM && !this.vuexLocalforage) {
21475
+ const modelInstance = new this.model(itemCopy);
21476
+ // Usar $set para cada propiedad para asegurar reactividad
21477
+ Object.keys(modelInstance).forEach(key => {
21478
+ this.$set(this.item, key, modelInstance[key]);
21479
+ });
21480
+ // Eliminar propiedades que ya no existen
21481
+ Object.keys(this.item).forEach(key => {
21482
+ if (!(key in modelInstance)) {
21483
+ this.$delete(this.item, key);
21484
+ }
21485
+ });
21486
+ } else {
21487
+ // Usar $set para cada propiedad para asegurar reactividad
21488
+ Object.keys(itemCopy).forEach(key => {
21489
+ this.$set(this.item, key, itemCopy[key]);
21490
+ });
21491
+ // Eliminar propiedades que ya no existen
21492
+ Object.keys(this.item).forEach(key => {
21493
+ if (!(key in itemCopy)) {
21494
+ this.$delete(this.item, key);
21495
+ }
21496
+ });
21497
+ }
21498
+
21499
+ // Forzar actualización para asegurar que los cambios se reflejen
21500
+ this.$forceUpdate();
20326
21501
  this.onSelect();
20327
- this.$bvModal.show("modal-form-item-" + this.modelName);
21502
+ this.$nextTick(() => {
21503
+ this.$forceUpdate();
21504
+ this.$bvModal.show("modal-form-item-" + this.modelName);
21505
+ });
20328
21506
  },
20329
21507
  removeItem(id, index) {
20330
21508
  this.$bvModal.msgBoxConfirm(this.messageRemoveConfirm, {
@@ -20361,13 +21539,32 @@ var crudHelpers = {
20361
21539
  });
20362
21540
  },
20363
21541
  toggleDisplayMode() {
20364
- if (this.displayMode == this.displayModes.MODE_TABLE) this.displayMode = this.displayModes.MODE_CARDS;else if (this.displayMode == this.displayModes.MODE_CARDS) this.displayMode = this.displayModes.MODE_TABLE;
21542
+ // Mutar la propiedad local _displayMode y el objeto reactivo
21543
+ if (this._displayMode == this.displayModes.MODE_TABLE) {
21544
+ this._displayMode = this.displayModes.MODE_CARDS;
21545
+ if (this.displayModeReactive) {
21546
+ this.displayModeReactive.value = this.displayModes.MODE_CARDS;
21547
+ }
21548
+ } else if (this._displayMode == this.displayModes.MODE_CARDS) {
21549
+ this._displayMode = this.displayModes.MODE_TABLE;
21550
+ if (this.displayModeReactive) {
21551
+ this.displayModeReactive.value = this.displayModes.MODE_TABLE;
21552
+ }
21553
+ }
20365
21554
  },
20366
21555
  showExportModal() {
20367
- this.$refs["modal-export"].show();
21556
+ // Asegurar que loading esté en false al abrir el modal
21557
+ this.loading = false;
21558
+ if (this.$refs.crudModals && this.$refs.crudModals.$refs["modal-export"]) {
21559
+ this.$refs.crudModals.$refs["modal-export"].show();
21560
+ }
20368
21561
  },
20369
21562
  showImportModal() {
20370
- this.$refs["modal-import"].show();
21563
+ // Asegurar que loading esté en false al abrir el modal
21564
+ this.loading = false;
21565
+ if (this.$refs.crudModals && this.$refs.crudModals.$refs["modal-import"]) {
21566
+ this.$refs.crudModals.$refs["modal-import"].show();
21567
+ }
20371
21568
  },
20372
21569
  onDraggableAdded(event) {
20373
21570
  this.$emit("draggableAdded", event);
@@ -20466,7 +21663,7 @@ var crudHelpers = {
20466
21663
  }
20467
21664
  };
20468
21665
 
20469
- var css = "tr td[data-v-482920a4]:last-child,\ntr td[data-v-482920a4]:first-child {\n width: 1%;\n white-space: nowrap; }\n\ntbody tr.selected[data-v-482920a4] {\n background-color: #e3f2fd !important; }\n tbody tr.selected[data-v-482920a4] td[data-v-482920a4] {\n background-color: transparent !important; }\n tbody tr.selected[data-v-482920a4][data-v-482920a4]:hover {\n background-color: #bbdefb !important; }\n tbody tr.selected[data-v-482920a4][data-v-482920a4]:hover td[data-v-482920a4] {\n background-color: transparent !important; }\n\n.table-striped tbody tr.selected[data-v-482920a4]:nth-of-type(odd) {\n background-color: #e3f2fd !important; }\n .table-striped tbody tr.selected[data-v-482920a4]:nth-of-type(odd) td[data-v-482920a4] {\n background-color: transparent !important; }\n\n.table-striped tbody tr.selected[data-v-482920a4]:nth-of-type(even) {\n background-color: #e3f2fd !important; }\n .table-striped tbody tr.selected[data-v-482920a4]:nth-of-type(even) td[data-v-482920a4] {\n background-color: transparent !important; }\n\n.crud-pagination[data-v-482920a4] {\n display: flex;\n align-items: center;\n width: 100%;\n justify-content: center;\n margin-top: 1rem; }\n\n.crud-header[data-v-482920a4] {\n display: flex;\n justify-content: space-between;\n max-height: 3rem; }\n .crud-header[data-v-482920a4] .crud-title[data-v-482920a4] {\n margin: 0; }\n .crud-header[data-v-482920a4] .crud-search[data-v-482920a4] {\n max-width: 15rem; }\n .crud-header[data-v-482920a4] .crud-search[data-v-482920a4] .btn[data-v-482920a4] {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 0.375rem;\n border-bottom-right-radius: 0.375rem; }\n .crud-header[data-v-482920a4] .crud-search[data-v-482920a4] .btn[data-v-482920a4].open[data-v-482920a4] {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0; }\n .crud-header[data-v-482920a4] .table-options[data-v-482920a4] {\n margin-bottom: 1rem;\n display: flex;\n align-items: center;\n justify-content: flex-end; }\n\n.custom-control[data-v-482920a4] {\n position: relative; }\n\n@media (min-width: 992px) {\n .table[data-v-482920a4] {\n table-layout: auto; }\n .table[data-v-482920a4] tbody[data-v-482920a4] td[data-v-482920a4] {\n overflow: scroll;\n -ms-overflow-style: none;\n /* IE and Edge */\n scrollbar-width: none;\n /* Firefox */ }\n .table[data-v-482920a4] tbody[data-v-482920a4] td[data-v-482920a4]::-webkit-scrollbar {\n display: none; } }\n\n.kanban-board[data-v-482920a4] {\n display: flex;\n gap: 1rem;\n overflow-x: auto;\n padding: 1rem; }\n\n.kanban-column[data-v-482920a4] {\n background: #f4f5f7;\n border-radius: 8px;\n width: 300px;\n display: flex;\n flex-direction: column;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); }\n\n.kanban-column-header[data-v-482920a4] {\n font-weight: bold;\n padding: 0.5rem;\n background: #dfe1e6;\n border-radius: 8px 8px 0 0;\n text-align: center; }\n\n.kanban-column-body[data-v-482920a4] {\n padding: 0.5rem;\n min-height: 100px;\n background: #ffffff;\n border-radius: 0 0 8px 8px;\n display: flex;\n flex-direction: column;\n gap: 0.5rem; }\n\n.kanban-card[data-v-482920a4] {\n background: #ffffff;\n border-radius: 4px;\n padding: 1rem;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n cursor: grab; }\n";
21666
+ var css = "tr td[data-v-3751aeba]:last-child,\ntr td[data-v-3751aeba]:first-child {\n width: 1%;\n white-space: nowrap; }\n\ntbody tr.selected[data-v-3751aeba] {\n background-color: #e3f2fd !important; }\n tbody tr.selected[data-v-3751aeba] td[data-v-3751aeba] {\n background-color: transparent !important; }\n tbody tr.selected[data-v-3751aeba][data-v-3751aeba]:hover {\n background-color: #bbdefb !important; }\n tbody tr.selected[data-v-3751aeba][data-v-3751aeba]:hover td[data-v-3751aeba] {\n background-color: transparent !important; }\n\n.table-striped tbody tr.selected[data-v-3751aeba]:nth-of-type(odd) {\n background-color: #e3f2fd !important; }\n .table-striped tbody tr.selected[data-v-3751aeba]:nth-of-type(odd) td[data-v-3751aeba] {\n background-color: transparent !important; }\n\n.table-striped tbody tr.selected[data-v-3751aeba]:nth-of-type(even) {\n background-color: #e3f2fd !important; }\n .table-striped tbody tr.selected[data-v-3751aeba]:nth-of-type(even) td[data-v-3751aeba] {\n background-color: transparent !important; }\n\n.crud-pagination[data-v-3751aeba] {\n display: flex;\n align-items: center;\n width: 100%;\n justify-content: center;\n margin-top: 1rem; }\n\n.crud-header[data-v-3751aeba] {\n display: flex;\n justify-content: space-between;\n max-height: 3rem; }\n .crud-header[data-v-3751aeba] .crud-title[data-v-3751aeba] {\n margin: 0; }\n .crud-header[data-v-3751aeba] .crud-search[data-v-3751aeba] {\n max-width: 15rem; }\n .crud-header[data-v-3751aeba] .crud-search[data-v-3751aeba] .btn[data-v-3751aeba] {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 0.375rem;\n border-bottom-right-radius: 0.375rem; }\n .crud-header[data-v-3751aeba] .crud-search[data-v-3751aeba] .btn[data-v-3751aeba].open[data-v-3751aeba] {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0; }\n .crud-header[data-v-3751aeba] .table-options[data-v-3751aeba] {\n margin-bottom: 1rem;\n display: flex;\n align-items: center;\n justify-content: flex-end; }\n\n.custom-control[data-v-3751aeba] {\n position: relative; }\n\n@media (min-width: 992px) {\n .table[data-v-3751aeba] {\n table-layout: auto; }\n .table[data-v-3751aeba] tbody[data-v-3751aeba] td[data-v-3751aeba] {\n overflow: scroll;\n -ms-overflow-style: none;\n /* IE and Edge */\n scrollbar-width: none;\n /* Firefox */ }\n .table[data-v-3751aeba] tbody[data-v-3751aeba] td[data-v-3751aeba]::-webkit-scrollbar {\n display: none; } }\n\n.kanban-board[data-v-3751aeba] {\n display: flex;\n gap: 1rem;\n overflow-x: auto;\n padding: 1rem; }\n\n.kanban-column[data-v-3751aeba] {\n background: #f4f5f7;\n border-radius: 8px;\n width: 300px;\n display: flex;\n flex-direction: column;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); }\n\n.kanban-column-header[data-v-3751aeba] {\n font-weight: bold;\n padding: 0.5rem;\n background: #dfe1e6;\n border-radius: 8px 8px 0 0;\n text-align: center; }\n\n.kanban-column-body[data-v-3751aeba] {\n padding: 0.5rem;\n min-height: 100px;\n background: #ffffff;\n border-radius: 0 0 8px 8px;\n display: flex;\n flex-direction: column;\n gap: 0.5rem; }\n\n.kanban-card[data-v-3751aeba] {\n background: #ffffff;\n border-radius: 4px;\n padding: 1rem;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n cursor: grab; }\n";
20470
21667
  n(css, {});
20471
21668
 
20472
21669
  const _sfc_main = {
@@ -20494,6 +21691,7 @@ const _sfc_main = {
20494
21691
  vuexLocalforage: this.vuexLocalforage,
20495
21692
  columns: this.columns,
20496
21693
  filter: this.filter,
21694
+ customFilters: this.customFilters,
20497
21695
  enableFilters: this.enableFilters,
20498
21696
  infiniteScroll: this.infiniteScroll,
20499
21697
  sortable: this.sortable,
@@ -20514,7 +21712,7 @@ const _sfc_main = {
20514
21712
  showHeader: this.showHeader,
20515
21713
  showTitle: this.showTitle,
20516
21714
  limit: this.limit,
20517
- displayMode: this.displayMode,
21715
+ displayMode: this.displayModeReactive,
20518
21716
  displayModeToggler: this.displayModeToggler,
20519
21717
  colXs: this.colXs,
20520
21718
  colSm: this.colSm,
@@ -20560,8 +21758,10 @@ const _sfc_main = {
20560
21758
  // Data from mixins
20561
21759
  crudUuid: this.crudUuid,
20562
21760
  moment: this.moment,
20563
- loading: this.loading,
20564
- firstLoad: this.firstLoad,
21761
+ loading: this.loadingReactive,
21762
+ firstLoad: this.firstLoadReactive,
21763
+ // Proporcionar item como función getter para reactividad
21764
+ getItem: () => this.item,
20565
21765
  item: this.item,
20566
21766
  items: this.items,
20567
21767
  selectedItems: this.selectedItems,
@@ -20626,12 +21826,15 @@ const _sfc_main = {
20626
21826
  toggleFilters: this.toggleFilters,
20627
21827
  resetFilters: this.resetFilters,
20628
21828
  isColumnHasFilter: this.isColumnHasFilter,
21829
+ isCustomFilterEnabled: this.isCustomFilterEnabled,
20629
21830
  setFilter: this.setFilter,
20630
21831
  onChangeFilter: this.onChangeFilter,
20631
21832
  togglePrincipalSort: this.togglePrincipalSort,
20632
21833
  loadOptions: this.loadOptions,
20633
21834
  getArrayValue: this.getArrayValue,
20634
21835
  getStateValue: this.getStateValue,
21836
+ getStateOptions: this.getStateOptions,
21837
+ getStateBadgeVariant: this.getStateBadgeVariant,
20635
21838
  onRowHover: this.onRowHover,
20636
21839
  onRowClick: this.onRowClick,
20637
21840
  onSort: this.onSort,
@@ -20703,6 +21906,10 @@ const _sfc_main = {
20703
21906
  type: Array,
20704
21907
  default: () => []
20705
21908
  },
21909
+ customFilters: {
21910
+ type: Array,
21911
+ default: () => []
21912
+ },
20706
21913
  enableFilters: {
20707
21914
  type: Boolean,
20708
21915
  default: false
@@ -20962,12 +22169,40 @@ var _sfc_render = function render() {
20962
22169
  _c = _vm._self._c;
20963
22170
  return _c('div', {
20964
22171
  staticClass: "crud"
20965
- }, [_c('CrudHeader'), _c('CrudTable'), _c('CrudCards'), _c('CrudKanban'), _c('CrudCustom'), _c('b-overlay', {
22172
+ }, [_c('CrudHeader'), _c('CrudTable', {
22173
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
22174
+ return {
22175
+ key: name,
22176
+ fn: function (slotProps) {
22177
+ return [_vm._t(name, null, null, slotProps)];
22178
+ }
22179
+ };
22180
+ })], null, true)
22181
+ }), _c('CrudCards', {
22182
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
22183
+ return {
22184
+ key: name,
22185
+ fn: function (slotProps) {
22186
+ return [_vm._t(name, null, null, slotProps)];
22187
+ }
22188
+ };
22189
+ })], null, true)
22190
+ }), _c('CrudKanban', {
22191
+ scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
22192
+ return {
22193
+ key: name,
22194
+ fn: function (slotProps) {
22195
+ return [_vm._t(name, null, null, slotProps)];
22196
+ }
22197
+ };
22198
+ })], null, true)
22199
+ }), _c('CrudCustom'), _c('b-overlay', {
20966
22200
  attrs: {
20967
22201
  "show": _vm.loading,
20968
22202
  "rounded": "sm"
20969
22203
  }
20970
22204
  }), _c('CrudPagination'), _c('CrudModals', {
22205
+ ref: "crudModals",
20971
22206
  scopedSlots: _vm._u([_vm._l(_vm.$scopedSlots, function (slot, name) {
20972
22207
  return {
20973
22208
  key: name,
@@ -20979,7 +22214,7 @@ var _sfc_render = function render() {
20979
22214
  })], 1);
20980
22215
  };
20981
22216
  var _sfc_staticRenderFns = [];
20982
- var __component__ = /*#__PURE__*/normalizeComponent(_sfc_main, _sfc_render, _sfc_staticRenderFns, false, null, "482920a4", null, null);
22217
+ var __component__ = /*#__PURE__*/normalizeComponent(_sfc_main, _sfc_render, _sfc_staticRenderFns, false, null, "3751aeba", null, null);
20983
22218
  var component = __component__.exports;
20984
22219
 
20985
22220
  // Import vue component