@innertia-solutions/nuxt-theme-spark 0.1.107 → 0.1.109
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Table.vue +42 -42
- package/css/themes/autumn.css +401 -0
- package/css/themes/bubblegum.css +408 -0
- package/css/themes/cashmere.css +412 -0
- package/css/themes/harvest.css +416 -0
- package/css/themes/moon.css +140 -0
- package/css/themes/ocean.css +273 -0
- package/css/themes/olive.css +413 -0
- package/css/themes/retro.css +431 -0
- package/css/themes/theme.css +725 -0
- package/package.json +1 -1
- package/spark.css +8 -8
package/components/Table.vue
CHANGED
|
@@ -484,7 +484,7 @@ defineExpose({
|
|
|
484
484
|
<!-- Table view -->
|
|
485
485
|
<div v-if="!isGridView" class="overflow-x-auto relative">
|
|
486
486
|
<table
|
|
487
|
-
class="relative divide-y divide-
|
|
487
|
+
class="relative divide-y divide-card-line"
|
|
488
488
|
:style="{ tableLayout: 'fixed', width: table.getTotalSize() + 'px', minWidth: '100%' }"
|
|
489
489
|
>
|
|
490
490
|
<colgroup>
|
|
@@ -494,11 +494,11 @@ defineExpose({
|
|
|
494
494
|
:style="{ width: col.getSize() + 'px' }"
|
|
495
495
|
>
|
|
496
496
|
</colgroup>
|
|
497
|
-
<thead class="relative z-20 bg-
|
|
497
|
+
<thead class="relative z-20 bg-card">
|
|
498
498
|
<template v-for="headerGroup in table.getHeaderGroups()" :key="headerGroup.id">
|
|
499
499
|
<!-- Main header row -->
|
|
500
500
|
<tr
|
|
501
|
-
class="divide-x divide-
|
|
501
|
+
class="divide-x divide-card-line"
|
|
502
502
|
>
|
|
503
503
|
<th
|
|
504
504
|
v-for="header in headerGroup.headers"
|
|
@@ -524,12 +524,12 @@ defineExpose({
|
|
|
524
524
|
:checked="table.getIsAllRowsSelected()"
|
|
525
525
|
:indeterminate="table.getIsSomeRowsSelected()"
|
|
526
526
|
@change="table.getToggleAllRowsSelectedHandler()($event)"
|
|
527
|
-
class="mx-2 shrink-0 border-
|
|
527
|
+
class="mx-2 shrink-0 border-card-line rounded-sm text-blue-900 focus:ring-0 focus:ring-offset-0 dark:bg-slate-800 border-card-line"
|
|
528
528
|
/>
|
|
529
529
|
</template>
|
|
530
530
|
<!-- Regular column header -->
|
|
531
531
|
<template v-else>
|
|
532
|
-
<div class="px-4 py-3 flex items-center gap-x-1 text-xs font-medium text-
|
|
532
|
+
<div class="px-4 py-3 flex items-center gap-x-1 text-xs font-medium text-muted-foreground w-full">
|
|
533
533
|
{{ header.column.columnDef.meta?.label ?? header.id }}
|
|
534
534
|
<span v-if="header.column.getCanSort()">
|
|
535
535
|
<IconSelector v-if="!header.column.getIsSorted()" class="size-4 opacity-40" />
|
|
@@ -553,7 +553,7 @@ defineExpose({
|
|
|
553
553
|
class="h-4 w-px transition-all"
|
|
554
554
|
:class="header.column.getIsResizing()
|
|
555
555
|
? 'bg-indigo-400 dark:bg-indigo-500 !w-0.5'
|
|
556
|
-
: 'bg-
|
|
556
|
+
: 'bg-surface-1 group-hover/rz:bg-indigo-300 dark:group-hover/rz:bg-indigo-600 group-hover/rz:w-0.5'"
|
|
557
557
|
/>
|
|
558
558
|
</div>
|
|
559
559
|
</template>
|
|
@@ -563,7 +563,7 @@ defineExpose({
|
|
|
563
563
|
<!-- Column filter row -->
|
|
564
564
|
<tr
|
|
565
565
|
v-if="hasFilterableColumns"
|
|
566
|
-
class="divide-x divide-
|
|
566
|
+
class="divide-x divide-card-line border-b border-card-line bg-muted/50"
|
|
567
567
|
>
|
|
568
568
|
<th
|
|
569
569
|
v-for="header in headerGroup.headers"
|
|
@@ -575,20 +575,20 @@ defineExpose({
|
|
|
575
575
|
:value="header.column.getFilterValue() ?? ''"
|
|
576
576
|
@input="(e) => header.column.setFilterValue(e.target.value || undefined)"
|
|
577
577
|
:placeholder="`Filtrar ${header.column.columnDef.meta?.label ?? ''}...`"
|
|
578
|
-
class="w-full bg-
|
|
578
|
+
class="w-full bg-card border border-card-line rounded-lg text-xs text-muted-foreground-1 px-2.5 py-1 focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-400 dark:focus:border-indigo-500 outline-none transition-all"
|
|
579
579
|
/>
|
|
580
580
|
</th>
|
|
581
581
|
</tr>
|
|
582
582
|
</template>
|
|
583
583
|
</thead>
|
|
584
584
|
|
|
585
|
-
<tbody ref="tableBodyRef" class="divide-y divide-
|
|
585
|
+
<tbody ref="tableBodyRef" class="divide-y divide-card-line">
|
|
586
586
|
<!-- Loading skeleton rows -->
|
|
587
587
|
<tr
|
|
588
588
|
v-if="loading"
|
|
589
589
|
v-for="(_, i) in skeletonRows"
|
|
590
590
|
:key="'sk-' + i"
|
|
591
|
-
class="animate-pulse divide-x divide-
|
|
591
|
+
class="animate-pulse divide-x divide-card-line bg-card"
|
|
592
592
|
>
|
|
593
593
|
<td
|
|
594
594
|
v-for="header in (table.getHeaderGroups()[0]?.headers ?? [])"
|
|
@@ -596,8 +596,8 @@ defineExpose({
|
|
|
596
596
|
:class="header.id === 'select' ? 'text-center w-12' : 'px-4'"
|
|
597
597
|
:style="{ height: lastRowHeight + 'px' }"
|
|
598
598
|
>
|
|
599
|
-
<div v-if="header.id === 'select'" class="w-4 h-4 bg-
|
|
600
|
-
<div v-else class="h-4 w-[50%] rounded bg-
|
|
599
|
+
<div v-if="header.id === 'select'" class="w-4 h-4 bg-surface-1 rounded mx-auto"></div>
|
|
600
|
+
<div v-else class="h-4 w-[50%] rounded bg-surface-1"></div>
|
|
601
601
|
</td>
|
|
602
602
|
</tr>
|
|
603
603
|
|
|
@@ -606,7 +606,7 @@ defineExpose({
|
|
|
606
606
|
v-if="loading && skeletonRows.length < pagination.pageSize"
|
|
607
607
|
v-for="i in (pagination.pageSize - skeletonRows.length)"
|
|
608
608
|
:key="'lf-' + i"
|
|
609
|
-
class="divide-x divide-
|
|
609
|
+
class="divide-x divide-card-line bg-card"
|
|
610
610
|
>
|
|
611
611
|
<td
|
|
612
612
|
v-for="header in (table.getHeaderGroups()[0]?.headers ?? [])"
|
|
@@ -620,7 +620,7 @@ defineExpose({
|
|
|
620
620
|
v-if="!loading && tableData.length === 0"
|
|
621
621
|
v-for="i in pagination.pageSize"
|
|
622
622
|
:key="'esk-' + i"
|
|
623
|
-
class="divide-x divide-
|
|
623
|
+
class="divide-x divide-card-line bg-card"
|
|
624
624
|
>
|
|
625
625
|
<td
|
|
626
626
|
v-for="header in (table.getHeaderGroups()[0]?.headers ?? [])"
|
|
@@ -638,7 +638,7 @@ defineExpose({
|
|
|
638
638
|
@click="(e) => handleRowClick(row, e)"
|
|
639
639
|
@keydown="(e) => handleRowKeydown(row, e)"
|
|
640
640
|
:tabindex="isRowClickEnabled ? 0 : undefined"
|
|
641
|
-
class="divide-x divide-
|
|
641
|
+
class="divide-x divide-card-line bg-white bg-card hover:bg-layer-hover transition-colors"
|
|
642
642
|
:class="{
|
|
643
643
|
'cursor-pointer': isRowClickEnabled,
|
|
644
644
|
'bg-indigo-50/40 dark:bg-indigo-900/10 hover:bg-indigo-50/60': row.getIsSelected(),
|
|
@@ -652,7 +652,7 @@ defineExpose({
|
|
|
652
652
|
:class="[
|
|
653
653
|
cell.column.id === 'select'
|
|
654
654
|
? 'text-center w-12'
|
|
655
|
-
: 'px-4 py-3 text-sm text-
|
|
655
|
+
: 'px-4 py-3 text-sm text-muted-foreground-1',
|
|
656
656
|
cell.column.id !== 'select' ? cell.column.columnDef.meta?.class ?? '' : '',
|
|
657
657
|
]"
|
|
658
658
|
>
|
|
@@ -664,7 +664,7 @@ defineExpose({
|
|
|
664
664
|
:checked="row.getIsSelected()"
|
|
665
665
|
:disabled="!row.getCanSelect()"
|
|
666
666
|
@change="row.getToggleSelectedHandler()($event)"
|
|
667
|
-
class="rounded border-
|
|
667
|
+
class="rounded border-card-line focus:ring-0 focus:ring-offset-0 dark:bg-slate-800 border-card-line"
|
|
668
668
|
/>
|
|
669
669
|
</div>
|
|
670
670
|
</template>
|
|
@@ -682,7 +682,7 @@ defineExpose({
|
|
|
682
682
|
v-if="!loading && tableData.length > 0 && tableData.length < pagination.pageSize"
|
|
683
683
|
v-for="i in (pagination.pageSize - tableData.length)"
|
|
684
684
|
:key="'fill-' + i"
|
|
685
|
-
class="divide-x divide-
|
|
685
|
+
class="divide-x divide-card-line bg-card"
|
|
686
686
|
>
|
|
687
687
|
<td
|
|
688
688
|
v-for="header in (table.getHeaderGroups()[0]?.headers ?? [])"
|
|
@@ -696,7 +696,7 @@ defineExpose({
|
|
|
696
696
|
<!-- Empty state overlays -->
|
|
697
697
|
<div
|
|
698
698
|
v-if="!loading && tableData.length === 0 && !search && !columnFilters.length"
|
|
699
|
-
class="absolute inset-0 z-10 pointer-events-none flex items-center justify-center backdrop-blur-sm bg-
|
|
699
|
+
class="absolute inset-0 z-10 pointer-events-none flex items-center justify-center backdrop-blur-sm bg-card/60 rounded-xl"
|
|
700
700
|
>
|
|
701
701
|
<slot name="empty">
|
|
702
702
|
<p class="text-slate-400 dark:text-slate-500 text-lg font-medium italic">No hay registros</p>
|
|
@@ -705,7 +705,7 @@ defineExpose({
|
|
|
705
705
|
|
|
706
706
|
<div
|
|
707
707
|
v-if="!loading && tableData.length === 0 && (search || columnFilters.length)"
|
|
708
|
-
class="absolute inset-0 z-10 pointer-events-none flex items-center justify-center backdrop-blur-sm bg-
|
|
708
|
+
class="absolute inset-0 z-10 pointer-events-none flex items-center justify-center backdrop-blur-sm bg-card/60 rounded-xl"
|
|
709
709
|
>
|
|
710
710
|
<slot name="empty-search">
|
|
711
711
|
<p class="text-slate-400 dark:text-slate-500 text-lg font-medium italic">No hay registros en la búsqueda</p>
|
|
@@ -718,11 +718,11 @@ defineExpose({
|
|
|
718
718
|
<div v-if="loading" :class="gridClass">
|
|
719
719
|
<div v-for="(_, i) in skeletonRows" :key="'gsk-' + i" class="animate-pulse">
|
|
720
720
|
<slot name="grid-skeleton">
|
|
721
|
-
<div class="bg-
|
|
721
|
+
<div class="bg-card rounded-lg border border-card-line p-4">
|
|
722
722
|
<div class="space-y-3">
|
|
723
|
-
<div class="h-4 bg-
|
|
724
|
-
<div class="h-4 bg-
|
|
725
|
-
<div class="h-6 bg-
|
|
723
|
+
<div class="h-4 bg-surface-1 rounded w-3/4"></div>
|
|
724
|
+
<div class="h-4 bg-surface-1 rounded w-1/2"></div>
|
|
725
|
+
<div class="h-6 bg-surface-1 rounded w-1/4"></div>
|
|
726
726
|
</div>
|
|
727
727
|
</div>
|
|
728
728
|
</slot>
|
|
@@ -740,16 +740,16 @@ defineExpose({
|
|
|
740
740
|
:checkable="checkable"
|
|
741
741
|
:toggle-row="() => row.toggleSelected()"
|
|
742
742
|
>
|
|
743
|
-
<div class="bg-
|
|
743
|
+
<div class="bg-card rounded-lg border border-card-line p-4 hover:shadow-md transition-shadow relative"
|
|
744
744
|
:class="{ 'ring-2 ring-indigo-400 dark:ring-indigo-600': row.getIsSelected() }">
|
|
745
745
|
<div v-if="checkable" class="absolute top-2 left-2 z-10">
|
|
746
746
|
<input type="checkbox" :checked="row.getIsSelected()" @change="row.toggleSelected()"
|
|
747
|
-
class="rounded border-
|
|
747
|
+
class="rounded border-card-line dark:bg-slate-800 border-card-line" />
|
|
748
748
|
</div>
|
|
749
749
|
<div class="space-y-2" :class="{ 'pt-6': checkable }">
|
|
750
750
|
<div v-for="cell in row.getVisibleCells().filter(c => c.column.id !== 'select')" :key="cell.id" class="flex justify-between">
|
|
751
|
-
<span class="text-sm text-
|
|
752
|
-
<span class="text-sm text-
|
|
751
|
+
<span class="text-sm text-muted-foreground">{{ cell.column.columnDef.meta?.label ?? cell.column.id }}:</span>
|
|
752
|
+
<span class="text-sm text-foreground">
|
|
753
753
|
<slot :name="cell.column.id" :row="row.original" :value="cell.getValue()">{{ cell.getValue() }}</slot>
|
|
754
754
|
</span>
|
|
755
755
|
</div>
|
|
@@ -760,27 +760,27 @@ defineExpose({
|
|
|
760
760
|
|
|
761
761
|
<div v-else class="flex items-center justify-center py-12">
|
|
762
762
|
<slot v-if="!search && !columnFilters.length" name="empty">
|
|
763
|
-
<p class="text-
|
|
763
|
+
<p class="text-muted-foreground text-lg">No hay registros</p>
|
|
764
764
|
</slot>
|
|
765
765
|
<slot v-else name="empty-search">
|
|
766
|
-
<p class="text-
|
|
766
|
+
<p class="text-muted-foreground text-lg">No hay registros en la búsqueda</p>
|
|
767
767
|
</slot>
|
|
768
768
|
</div>
|
|
769
769
|
</div>
|
|
770
770
|
|
|
771
771
|
<!-- Pagination & controls bar -->
|
|
772
|
-
<div ref="paginationBarRef" class="flex flex-col sm:flex-row items-center justify-between gap-y-4 sm:gap-y-0 px-4 py-3 border-t border-
|
|
772
|
+
<div ref="paginationBarRef" class="flex flex-col sm:flex-row items-center justify-between gap-y-4 sm:gap-y-0 px-4 py-3 border-t border-card-line">
|
|
773
773
|
<!-- Left: reload, total, cache, columns button -->
|
|
774
774
|
<div class="flex items-center gap-x-4 flex-wrap gap-y-2">
|
|
775
775
|
<!-- Reload button -->
|
|
776
776
|
<div v-if="showReloadButton" class="flex items-center gap-x-2">
|
|
777
777
|
<IconReload
|
|
778
778
|
v-if="!loading"
|
|
779
|
-
class="size-4 cursor-pointer text-
|
|
779
|
+
class="size-4 cursor-pointer text-muted-foreground hover:text-gray-700 dark:hover:text-slate-300 transition-colors"
|
|
780
780
|
@click="reloadTable"
|
|
781
781
|
/>
|
|
782
782
|
<div v-else>
|
|
783
|
-
<svg class="animate-spin size-4 text-
|
|
783
|
+
<svg class="animate-spin size-4 text-muted-foreground-2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
784
784
|
<circle cx="12" cy="12" r="10" opacity=".25" />
|
|
785
785
|
<path d="M22 12a10 10 0 0 1-10 10" />
|
|
786
786
|
</svg>
|
|
@@ -788,7 +788,7 @@ defineExpose({
|
|
|
788
788
|
</div>
|
|
789
789
|
|
|
790
790
|
<!-- Total records -->
|
|
791
|
-
<p class="text-sm text-
|
|
791
|
+
<p class="text-sm text-foreground font-medium">{{ rowCount }} registros</p>
|
|
792
792
|
|
|
793
793
|
<!-- Cache badge -->
|
|
794
794
|
<div v-if="isDataFromCache && cached" class="group relative flex items-center">
|
|
@@ -811,12 +811,12 @@ defineExpose({
|
|
|
811
811
|
<div class="flex items-center gap-x-8">
|
|
812
812
|
<!-- Per page selector -->
|
|
813
813
|
<div class="flex items-center gap-x-2">
|
|
814
|
-
<label class="text-[10px] font-bold text-
|
|
814
|
+
<label class="text-[10px] font-bold text-muted-foreground uppercase tracking-widest">Filas:</label>
|
|
815
815
|
<select
|
|
816
816
|
v-if="!isCustomPerPage"
|
|
817
817
|
:value="pagination.pageSize"
|
|
818
818
|
@change="(e) => handlePerPageChange(e.target.value)"
|
|
819
|
-
class="bg-
|
|
819
|
+
class="bg-surface border-none text-[11px] font-bold text-muted-foreground-1 rounded-lg focus:ring-0 cursor-pointer py-1 pl-2 pr-8"
|
|
820
820
|
>
|
|
821
821
|
<option :value="10">10</option>
|
|
822
822
|
<option :value="25">25</option>
|
|
@@ -830,7 +830,7 @@ defineExpose({
|
|
|
830
830
|
:value="pagination.pageSize"
|
|
831
831
|
@change="(e) => table.setPageSize(parseInt(e.target.value) || 10)"
|
|
832
832
|
min="1" max="500"
|
|
833
|
-
class="w-14 bg-
|
|
833
|
+
class="w-14 bg-surface border-none text-[11px] font-bold text-muted-foreground-1 rounded-lg focus:ring-2 focus:ring-indigo-500/20 py-1 px-2"
|
|
834
834
|
/>
|
|
835
835
|
<button @click="resetPerPage" class="text-[10px] text-indigo-500 font-bold hover:underline">Volver</button>
|
|
836
836
|
</div>
|
|
@@ -840,7 +840,7 @@ defineExpose({
|
|
|
840
840
|
<nav class="flex justify-end items-center gap-x-1" aria-label="Pagination">
|
|
841
841
|
<button
|
|
842
842
|
type="button"
|
|
843
|
-
class="size-8 flex items-center justify-center rounded-lg text-
|
|
843
|
+
class="size-8 flex items-center justify-center rounded-lg text-foreground hover:bg-muted-hover disabled:opacity-30"
|
|
844
844
|
:disabled="!table.getCanPreviousPage()"
|
|
845
845
|
@click="table.previousPage()"
|
|
846
846
|
>
|
|
@@ -849,15 +849,15 @@ defineExpose({
|
|
|
849
849
|
</svg>
|
|
850
850
|
</button>
|
|
851
851
|
<div class="flex items-center gap-x-1 mx-2">
|
|
852
|
-
<span class="size-8 flex items-center justify-center text-xs font-bold rounded-lg bg-
|
|
852
|
+
<span class="size-8 flex items-center justify-center text-xs font-bold rounded-lg bg-surface text-foreground">
|
|
853
853
|
{{ pagination.pageIndex + 1 }}
|
|
854
854
|
</span>
|
|
855
|
-
<span class="text-[10px] font-bold text-
|
|
856
|
-
<span class="text-[10px] font-bold text-
|
|
855
|
+
<span class="text-[10px] font-bold text-muted-foreground uppercase mx-1">de</span>
|
|
856
|
+
<span class="text-[10px] font-bold text-muted-foreground">{{ table.getPageCount() }}</span>
|
|
857
857
|
</div>
|
|
858
858
|
<button
|
|
859
859
|
type="button"
|
|
860
|
-
class="size-8 flex items-center justify-center rounded-lg text-
|
|
860
|
+
class="size-8 flex items-center justify-center rounded-lg text-foreground hover:bg-muted-hover disabled:opacity-30"
|
|
861
861
|
:disabled="!table.getCanNextPage()"
|
|
862
862
|
@click="table.nextPage()"
|
|
863
863
|
>
|