@innertia-solutions/nuxt-theme-spark 0.1.110 → 0.1.111
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/Admin/Header.vue +3 -3
- package/components/Admin/Page.vue +3 -3
- package/components/Admin/PageHeader.vue +4 -4
- package/components/App/Button.vue +2 -2
- package/components/App/Dropdown.vue +5 -5
- package/components/App/EmptyState.vue +3 -3
- package/components/App/LoadingState.vue +4 -4
- package/components/App/SwitchColorTheme.vue +2 -2
- package/components/App/Tag.vue +1 -1
- package/components/DataTable.vue +40 -40
- package/components/Forms/DatePicker.vue +1 -1
- package/components/Forms/Input.vue +5 -5
- package/components/Forms/Select.vue +6 -6
- package/components/Forms/SelectServer.vue +30 -30
- package/components/Layout/Auth.vue +4 -4
- package/components/Modal/DeleteConfirm.vue +1 -1
- package/components/Modal.vue +5 -5
- package/components/Nav/Tabs.vue +2 -2
- package/components/Table/Database.vue +4 -4
- package/components/Table/DownloadDropdown.vue +10 -10
- package/components/Table/FilterDropdown.vue +10 -10
- package/components/Table/Grid.vue +1 -1
- package/components/Table/Kanban.vue +7 -7
- package/components/Table/List.vue +6 -6
- package/components/Table.vue +6 -6
- package/components/TableExportable.vue +17 -17
- package/components/TableFilter.vue +7 -7
- package/components/Toast/Alert.vue +2 -2
- package/package.json +1 -1
package/components/Table.vue
CHANGED
|
@@ -524,7 +524,7 @@ defineExpose({
|
|
|
524
524
|
:checked="table.getIsAllRowsSelected()"
|
|
525
525
|
:indeterminate="table.getIsSomeRowsSelected()"
|
|
526
526
|
@change="table.getToggleAllRowsSelectedHandler()($event)"
|
|
527
|
-
class="mx-2 shrink-0 border-card-line rounded-sm text-blue-900 focus:ring-0 focus:ring-offset-0 dark:bg-
|
|
527
|
+
class="mx-2 shrink-0 border-card-line rounded-sm text-blue-900 focus:ring-0 focus:ring-offset-0 dark:bg-card"
|
|
528
528
|
/>
|
|
529
529
|
</template>
|
|
530
530
|
<!-- Regular column header -->
|
|
@@ -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-card-line focus:ring-0 focus:ring-offset-0 dark:bg-
|
|
667
|
+
class="rounded border-card-line focus:ring-0 focus:ring-offset-0 dark:bg-card"
|
|
668
668
|
/>
|
|
669
669
|
</div>
|
|
670
670
|
</template>
|
|
@@ -699,7 +699,7 @@ defineExpose({
|
|
|
699
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
|
-
<p class="text-
|
|
702
|
+
<p class="text-muted-foreground text-lg font-medium italic">No hay registros</p>
|
|
703
703
|
</slot>
|
|
704
704
|
</div>
|
|
705
705
|
|
|
@@ -708,7 +708,7 @@ defineExpose({
|
|
|
708
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
|
-
<p class="text-
|
|
711
|
+
<p class="text-muted-foreground text-lg font-medium italic">No hay registros en la búsqueda</p>
|
|
712
712
|
</slot>
|
|
713
713
|
</div>
|
|
714
714
|
</div>
|
|
@@ -744,7 +744,7 @@ defineExpose({
|
|
|
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-card-line dark:bg-
|
|
747
|
+
class="rounded border-card-line dark:bg-card" />
|
|
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">
|
|
@@ -776,7 +776,7 @@ defineExpose({
|
|
|
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-muted-foreground hover:text-
|
|
779
|
+
class="size-4 cursor-pointer text-muted-foreground hover:text-muted-foreground-1 transition-colors"
|
|
780
780
|
@click="reloadTable"
|
|
781
781
|
/>
|
|
782
782
|
<div v-else>
|
|
@@ -65,7 +65,7 @@ defineExpose({ open })
|
|
|
65
65
|
<button
|
|
66
66
|
type="button"
|
|
67
67
|
@click="isOpen = true"
|
|
68
|
-
class="py-1.5 sm:py-2 px-2.5 inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg border border-
|
|
68
|
+
class="py-1.5 sm:py-2 px-2.5 inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg border border-card-line bg-card text-foreground shadow-2xs hover:bg-muted-hover disabled:opacity-50 disabled:pointer-events-none focus:outline-hidden"
|
|
69
69
|
>
|
|
70
70
|
<IconDownload class="shrink-0 size-4" stroke="1.5" />
|
|
71
71
|
Exportar
|
|
@@ -93,16 +93,16 @@ defineExpose({ open })
|
|
|
93
93
|
>
|
|
94
94
|
<div
|
|
95
95
|
v-if="isOpen"
|
|
96
|
-
class="bg-
|
|
96
|
+
class="bg-card rounded-2xl shadow-2xl w-full max-w-md border border-card-line"
|
|
97
97
|
>
|
|
98
|
-
<div class="flex items-center justify-between px-6 py-4 border-b border-
|
|
99
|
-
<h3 class="font-semibold text-
|
|
98
|
+
<div class="flex items-center justify-between px-6 py-4 border-b border-card-line">
|
|
99
|
+
<h3 class="font-semibold text-foreground">Exportar tabla</h3>
|
|
100
100
|
<button
|
|
101
101
|
type="button"
|
|
102
102
|
@click="isOpen = false"
|
|
103
|
-
class="p-1.5 rounded-lg hover:bg-
|
|
103
|
+
class="p-1.5 rounded-lg hover:bg-muted-hover transition-colors"
|
|
104
104
|
>
|
|
105
|
-
<svg class="size-4 text-
|
|
105
|
+
<svg class="size-4 text-muted-foreground" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
106
106
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
107
107
|
</svg>
|
|
108
108
|
</button>
|
|
@@ -111,7 +111,7 @@ defineExpose({ open })
|
|
|
111
111
|
<div class="px-6 py-5 space-y-5">
|
|
112
112
|
<!-- Format selector -->
|
|
113
113
|
<div>
|
|
114
|
-
<p class="text-xs font-semibold text-
|
|
114
|
+
<p class="text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-2">Formato</p>
|
|
115
115
|
<div class="grid grid-cols-4 gap-2">
|
|
116
116
|
<button
|
|
117
117
|
v-for="f in formats"
|
|
@@ -122,7 +122,7 @@ defineExpose({ open })
|
|
|
122
122
|
'flex flex-col items-center gap-1.5 p-3 rounded-xl border text-sm font-medium transition-colors',
|
|
123
123
|
format === f.value
|
|
124
124
|
? 'border-indigo-500 bg-indigo-50 text-indigo-700 dark:bg-indigo-900/30 dark:border-indigo-500 dark:text-indigo-300'
|
|
125
|
-
: 'border-
|
|
125
|
+
: 'border-card-line text-muted-foreground-1 hover:bg-muted-hover'
|
|
126
126
|
]"
|
|
127
127
|
>
|
|
128
128
|
<IconFileTypeXls v-if="f.value === 'xlsx'" class="size-5" stroke="1.5" />
|
|
@@ -136,23 +136,23 @@ defineExpose({ open })
|
|
|
136
136
|
|
|
137
137
|
<!-- Filename -->
|
|
138
138
|
<div>
|
|
139
|
-
<label class="text-xs font-semibold text-
|
|
139
|
+
<label class="text-xs font-semibold text-muted-foreground uppercase tracking-wider block mb-2">
|
|
140
140
|
Nombre de archivo
|
|
141
141
|
</label>
|
|
142
142
|
<div class="flex items-center gap-2">
|
|
143
143
|
<input
|
|
144
144
|
v-model="filename"
|
|
145
145
|
type="text"
|
|
146
|
-
class="flex-1 rounded-lg border border-
|
|
146
|
+
class="flex-1 rounded-lg border border-card-line bg-card text-foreground py-2 px-3 text-sm focus:outline-none focus:ring-1 focus:ring-indigo-500"
|
|
147
147
|
/>
|
|
148
|
-
<span class="text-sm text-
|
|
148
|
+
<span class="text-sm text-muted-foreground">.{{ format }}</span>
|
|
149
149
|
</div>
|
|
150
150
|
</div>
|
|
151
151
|
|
|
152
152
|
<!-- Columns -->
|
|
153
153
|
<div v-if="columns.length > 0">
|
|
154
154
|
<div class="flex items-center justify-between mb-2">
|
|
155
|
-
<p class="text-xs font-semibold text-
|
|
155
|
+
<p class="text-xs font-semibold text-muted-foreground uppercase tracking-wider">Columnas</p>
|
|
156
156
|
<button
|
|
157
157
|
type="button"
|
|
158
158
|
@click="toggleAll"
|
|
@@ -165,25 +165,25 @@ defineExpose({ open })
|
|
|
165
165
|
<label
|
|
166
166
|
v-for="col in columns"
|
|
167
167
|
:key="col.key"
|
|
168
|
-
class="flex items-center gap-2 py-1.5 px-2 rounded-lg hover:bg-
|
|
168
|
+
class="flex items-center gap-2 py-1.5 px-2 rounded-lg hover:bg-muted-hover cursor-pointer"
|
|
169
169
|
>
|
|
170
170
|
<input
|
|
171
171
|
type="checkbox"
|
|
172
172
|
:checked="selectedColumns.includes(col.key)"
|
|
173
173
|
@change="toggleColumn(col.key)"
|
|
174
|
-
class="rounded border-
|
|
174
|
+
class="rounded border-card-line dark:bg-surface text-indigo-600"
|
|
175
175
|
/>
|
|
176
|
-
<span class="text-sm text-
|
|
176
|
+
<span class="text-sm text-foreground truncate">{{ col.label }}</span>
|
|
177
177
|
</label>
|
|
178
178
|
</div>
|
|
179
179
|
</div>
|
|
180
180
|
</div>
|
|
181
181
|
|
|
182
|
-
<div class="flex justify-end gap-2 px-6 py-4 border-t border-
|
|
182
|
+
<div class="flex justify-end gap-2 px-6 py-4 border-t border-card-line">
|
|
183
183
|
<button
|
|
184
184
|
type="button"
|
|
185
185
|
@click="isOpen = false"
|
|
186
|
-
class="py-2 px-4 text-sm font-medium rounded-lg border border-
|
|
186
|
+
class="py-2 px-4 text-sm font-medium rounded-lg border border-card-line text-muted-foreground-1 hover:bg-muted-hover transition-colors"
|
|
187
187
|
>
|
|
188
188
|
Cancelar
|
|
189
189
|
</button>
|
|
@@ -35,13 +35,13 @@ const activeCount = computed(() =>
|
|
|
35
35
|
|
|
36
36
|
<!-- text -->
|
|
37
37
|
<div v-if="col.filterType === 'text'">
|
|
38
|
-
<label class="block text-xs font-medium text-
|
|
38
|
+
<label class="block text-xs font-medium text-muted-foreground mb-1">{{ col.label }}</label>
|
|
39
39
|
<input
|
|
40
40
|
type="text"
|
|
41
41
|
:value="localFilters[col.key] ?? ''"
|
|
42
42
|
@input="updateFilter(col.key, $event.target.value)"
|
|
43
43
|
:placeholder="`Filtrar ${col.label.toLowerCase()}...`"
|
|
44
|
-
class="w-full rounded-lg border border-
|
|
44
|
+
class="w-full rounded-lg border border-card-line bg-card text-foreground py-1.5 px-3 text-sm focus:outline-none focus:ring-1 focus:ring-indigo-500"
|
|
45
45
|
/>
|
|
46
46
|
</div>
|
|
47
47
|
|
|
@@ -57,27 +57,27 @@ const activeCount = computed(() =>
|
|
|
57
57
|
|
|
58
58
|
<!-- daterange -->
|
|
59
59
|
<div v-else-if="col.filterType === 'daterange'">
|
|
60
|
-
<label class="block text-xs font-medium text-
|
|
60
|
+
<label class="block text-xs font-medium text-muted-foreground mb-1">{{ col.label }}</label>
|
|
61
61
|
<div class="flex items-center gap-1.5">
|
|
62
62
|
<input
|
|
63
63
|
type="date"
|
|
64
64
|
:value="localFilters[col.key]?.from ?? ''"
|
|
65
65
|
@change="updateFilter(col.key, { ...localFilters[col.key], from: $event.target.value || null })"
|
|
66
|
-
class="flex-1 rounded-lg border border-
|
|
66
|
+
class="flex-1 rounded-lg border border-card-line bg-card text-foreground py-1.5 px-2 text-sm focus:outline-none focus:ring-1 focus:ring-indigo-500"
|
|
67
67
|
/>
|
|
68
68
|
<span class="text-slate-400 text-xs shrink-0">—</span>
|
|
69
69
|
<input
|
|
70
70
|
type="date"
|
|
71
71
|
:value="localFilters[col.key]?.to ?? ''"
|
|
72
72
|
@change="updateFilter(col.key, { ...localFilters[col.key], to: $event.target.value || null })"
|
|
73
|
-
class="flex-1 rounded-lg border border-
|
|
73
|
+
class="flex-1 rounded-lg border border-card-line bg-card text-foreground py-1.5 px-2 text-sm focus:outline-none focus:ring-1 focus:ring-indigo-500"
|
|
74
74
|
/>
|
|
75
75
|
</div>
|
|
76
76
|
</div>
|
|
77
77
|
|
|
78
78
|
</template>
|
|
79
79
|
|
|
80
|
-
<div class="pt-2 border-t border-
|
|
80
|
+
<div class="pt-2 border-t border-card-line">
|
|
81
81
|
<button
|
|
82
82
|
v-if="activeCount > 0"
|
|
83
83
|
type="button"
|
|
@@ -87,7 +87,7 @@ const activeCount = computed(() =>
|
|
|
87
87
|
<svg class="size-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/></svg>
|
|
88
88
|
Limpiar filtros
|
|
89
89
|
</button>
|
|
90
|
-
<p v-else class="text-xs text-center text-
|
|
90
|
+
<p v-else class="text-xs text-center text-muted-foreground py-0.5">Sin filtros activos</p>
|
|
91
91
|
</div>
|
|
92
92
|
</div>
|
|
93
93
|
</template>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
|
-
class="max-w-xs relative bg-
|
|
3
|
+
class="max-w-xs relative bg-card border border-card-line rounded-xl shadow-lg p-4 pr-10 flex items-start overflow-hidden"
|
|
4
4
|
:class="{
|
|
5
5
|
'border-green-200': toast.severity === 'success',
|
|
6
6
|
'border-red-200': toast.severity === 'danger',
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
<!-- Barra de progreso temporal -->
|
|
41
41
|
<div
|
|
42
42
|
v-if="toast.duration && toast.duration > 0"
|
|
43
|
-
class="absolute bottom-0 left-0 w-full h-1 bg-
|
|
43
|
+
class="absolute bottom-0 left-0 w-full h-1 bg-card-line"
|
|
44
44
|
>
|
|
45
45
|
<div
|
|
46
46
|
class="h-full bg-gradient-to-r"
|