@edc-motor/admin-kit 0.4.7 → 0.4.9
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edc-motor/admin-kit",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.9",
|
|
4
4
|
"description": "EdC Motor — kit del panel de administración: layout, gestores CRUD, imágenes, PDF, páginas, configuración, usuarios y copias (paquete fuente: lo compila el consumidor con Vite)",
|
|
5
5
|
"license": "GPL-3.0-only",
|
|
6
6
|
"type": "module",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@edc-motor/ui": "^0.4.
|
|
36
|
+
"@edc-motor/ui": "^0.4.9",
|
|
37
37
|
"axios": "^1.7.0",
|
|
38
38
|
"vue-draggable-plus": "^0.6.1"
|
|
39
39
|
},
|
|
@@ -20,17 +20,19 @@
|
|
|
20
20
|
&--muted { opacity: 0.65; }
|
|
21
21
|
&.is-active { border-color: $accent-500; }
|
|
22
22
|
|
|
23
|
-
// Franja superior opcional (emblema/imagen).
|
|
23
|
+
// Franja superior opcional (emblema/imagen). Cuadrada: con el grid de los
|
|
24
|
+
// index a 4 columnas la tarjeta es más estrecha y la imagen queda contenida
|
|
25
|
+
// (más bien pequeña) y centrada, nunca deformada ni recortada.
|
|
24
26
|
&__media {
|
|
25
27
|
position: relative;
|
|
26
|
-
aspect-ratio:
|
|
28
|
+
aspect-ratio: 1 / 1;
|
|
27
29
|
display: flex;
|
|
28
30
|
align-items: center;
|
|
29
31
|
justify-content: center;
|
|
30
32
|
overflow: hidden;
|
|
31
33
|
background: $surface-2;
|
|
32
34
|
|
|
33
|
-
img { width: 100%; height: 100%; object-fit:
|
|
35
|
+
img { width: 100%; height: 100%; object-fit: contain; }
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
// Cabecera: título + acciones, con divisoria (CDL).
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
&__search-icon {
|
|
18
18
|
position: absolute;
|
|
19
|
-
right: $
|
|
19
|
+
right: $input-padding-x;
|
|
20
20
|
top: 50%;
|
|
21
21
|
transform: translateY(-50%);
|
|
22
22
|
color: $text-3;
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
|
|
26
26
|
&__search-input {
|
|
27
27
|
width: 100%;
|
|
28
|
-
height:
|
|
29
|
-
padding: 0
|
|
28
|
+
height: $input-height;
|
|
29
|
+
padding: 0 34px 0 $input-padding-x; // hueco a la derecha para la lupa
|
|
30
30
|
background: $surface-2;
|
|
31
31
|
color: $text-1;
|
|
32
32
|
border: 1px solid $border;
|
|
@@ -157,6 +157,26 @@
|
|
|
157
157
|
margin: $space-1 0;
|
|
158
158
|
width: 100%;
|
|
159
159
|
}
|
|
160
|
+
|
|
161
|
+
// Botón-volver del panel (texto con flecha): del detalle de la card
|
|
162
|
+
// seleccionada al estado sin selección (los filtros del listado).
|
|
163
|
+
&__back {
|
|
164
|
+
display: inline-flex;
|
|
165
|
+
align-items: center;
|
|
166
|
+
gap: $space-1;
|
|
167
|
+
background: none;
|
|
168
|
+
border: none;
|
|
169
|
+
padding: 0;
|
|
170
|
+
color: $accent-500;
|
|
171
|
+
font-size: $fs-13;
|
|
172
|
+
cursor: pointer;
|
|
173
|
+
justify-self: start;
|
|
174
|
+
|
|
175
|
+
&:hover {
|
|
176
|
+
color: $accent-600;
|
|
177
|
+
text-decoration: underline;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
160
180
|
}
|
|
161
181
|
|
|
162
182
|
.manager-detail {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { onBeforeUnmount, onMounted } from 'vue'
|
|
2
|
+
|
|
3
|
+
// Zonas que NUNCA deseleccionan: las propias cards y cualquier control
|
|
4
|
+
// interactivo (enlaces, botones, campos, labels…) o las migas de pan.
|
|
5
|
+
const IGNORE =
|
|
6
|
+
'a, button, input, textarea, select, label, [contenteditable], ' +
|
|
7
|
+
'.manager-card, .entity-card, .breadcrumbs'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Deselección de la card activa clickando la zona "vacía" del cuerpo de la
|
|
11
|
+
* vista (el contenido bajo las migas: huecos del grid, espacio bajo las
|
|
12
|
+
* cards, alrededor del toolbar…). Complementa el patrón de los listados con
|
|
13
|
+
* panel derecho: la card entera selecciona y el resto del contenedor
|
|
14
|
+
* deselecciona (además del botón "volver a los filtros" del panel).
|
|
15
|
+
*
|
|
16
|
+
* Escucha en document y solo actúa dentro de `.main-content` (el área de
|
|
17
|
+
* contenido del AdminLayout): los modales (teleport a body) y el panel
|
|
18
|
+
* derecho quedan fuera. Ignora los clicks que nacen en una card o en un
|
|
19
|
+
* control interactivo; `extraIgnore` añade selectores propios de la vista
|
|
20
|
+
* (p. ej. sus items cuando no son .manager-card/.entity-card).
|
|
21
|
+
*/
|
|
22
|
+
export function useCardDeselect(onDeselect: () => void, extraIgnore = '') {
|
|
23
|
+
function onClick(e: MouseEvent) {
|
|
24
|
+
const target = e.target instanceof Element ? e.target : null
|
|
25
|
+
if (!target || !target.closest('.main-content')) return
|
|
26
|
+
if (target.closest(IGNORE)) return
|
|
27
|
+
if (extraIgnore && target.closest(extraIgnore)) return
|
|
28
|
+
onDeselect()
|
|
29
|
+
}
|
|
30
|
+
onMounted(() => document.addEventListener('click', onClick))
|
|
31
|
+
onBeforeUnmount(() => document.removeEventListener('click', onClick))
|
|
32
|
+
}
|
package/src/crud/BaseGrid.vue
CHANGED
|
@@ -16,7 +16,9 @@ const props = withDefaults(
|
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
const presetCols: Record<string, ResponsiveCols> = {
|
|
19
|
-
|
|
19
|
+
// Los index de entidades escalan 1 → 2 → 3 → 4 con el ancho REAL del
|
|
20
|
+
// contenedor `content` (en pantallas anchas llegan a cuatro columnas).
|
|
21
|
+
cards: { base: 1, sm: 2, md: 3, lg: 4 },
|
|
20
22
|
'cards-wide': { base: 1, sm: 2, lg: 4 },
|
|
21
23
|
'cards-narrow': { base: 1, sm: 2 },
|
|
22
24
|
'cards-full': { base: 1, sm: 2, md: 3, lg: 4 },
|
package/src/index.ts
CHANGED
|
@@ -5,6 +5,9 @@ export { default as AdminLayout } from './layout/AdminLayout.vue'
|
|
|
5
5
|
// lo activa con useRightSidebar() y Teleport a #right-sidebar-target.
|
|
6
6
|
export { default as RightSidebar } from './layout/RightSidebar.vue'
|
|
7
7
|
export { useRightSidebar, type RightSidebarToken } from './composables/useRightSidebar'
|
|
8
|
+
// Listados con panel derecho: click en la zona vacía del contenido para
|
|
9
|
+
// deseleccionar la card activa (la card entera selecciona; el resto, no).
|
|
10
|
+
export { useCardDeselect } from './composables/useCardDeselect'
|
|
8
11
|
// Tarjeta colapsable de los gestores (previews/PDF), reutilizable.
|
|
9
12
|
export { default as ManagerCard } from './components/ManagerCard.vue'
|
|
10
13
|
// Index de entidades: grid de tarjetas (sin tablas) + filtros + estado vacío.
|