innoboxrr-form-core 2.5.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -65,7 +65,8 @@ setTheme({
65
65
  | Menús | `menu`, `menuList`, `menuItem`, `menuItemDanger`, `menuSeparator`, `menuLabel` |
66
66
  | Paleta de comandos | `command`, `commandInput`, `commandList`, `commandGroup`, `commandItem`, `commandEmpty` |
67
67
  | Avisos | `toast`, `toastSuccess`, `toastDanger`, `toastWarning`, `toastTitle`, `toastClose`, `toastRegion` |
68
- | Tabla | `table`, `tableNumeric`, `tableSticky`, `tableSelect`, `tableResizer`, `tableEmpty`, `bulkBar`, `bulkCount` |
68
+ | Tabla | `table`, `tableNumeric`, `tableSticky`, `tableSelect`, `tableResizer`, `tableEmpty`, `bulkBar`, `bulkCount`, `tableSort`, `tableContainer`, `tableFooter`, `tablePager` |
69
+ | Listado | `datatable`, `datatableFilters`, `toolbarSpacer` |
69
70
  | Edición en línea | `editable` |
70
71
  | Shell de aplicación | `shell`, `shellHeader`, `shellSidebar`, `shellMain` |
71
72
 
@@ -113,7 +114,16 @@ Los componentes de Vue y React envuelven exactamente este marcado.
113
114
  - **Menús**: `fe-menu` con `popover`, colocado con Floating UI.
114
115
  - **Tabla**: `fe-table-select` para la columna de casillas, `data-selected` en
115
116
  la fila, `fe-bulk-bar` para lo que se hace con la selección y
116
- `fe-table-resizer` para cambiar el ancho de una columna.
117
+ `fe-table-resizer` para cambiar el ancho de una columna. Una columna
118
+ ordenable lleva `aria-sort` en el `<th>` y dentro un `<button
119
+ class="fe-table-sort">`, para que se ordene también con el teclado.
120
+ - **Listado**: `fe-datatable` agrupa la `fe-toolbar` (con un
121
+ `fe-toolbar-spacer` que empuja lo que va a la derecha), el panel
122
+ `fe-datatable-filters`, la tabla dentro de un `fe-table-container` y el
123
+ `fe-table-footer` con el resumen y el `fe-table-pager`. El contenedor se
124
+ desplaza en horizontal cuando la tabla no cabe; para que además la cabecera
125
+ fija funcione al bajar, dale una altura máxima con
126
+ `--fe-table-max-height: 70vh`.
117
127
 
118
128
  Un `<dialog>` cerrado está oculto porque el navegador le pone `display: none`;
119
129
  por eso ninguna regla fija `display` fuera del estado `[open]`. Las capas que no
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "innoboxrr-form-core",
3
- "version": "2.5.1",
3
+ "version": "2.6.0",
4
4
  "description": "El nucleo agnostico de la interfaz innoboxrr: tema, iconos, estilos, archivos y zonas horarias.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -1166,6 +1166,94 @@
1166
1166
  font-variant-numeric: tabular-nums;
1167
1167
  }
1168
1168
 
1169
+ /*
1170
+ * Ordenar tiene que poderse hacer con el teclado, así que dentro del <th> va
1171
+ * un botón. Hereda todo de la cabecera para no parecer un botón del navegador.
1172
+ */
1173
+ .fe-table-sort {
1174
+ display: inline-flex;
1175
+ align-items: center;
1176
+ gap: var(--fe-space-1);
1177
+ padding: 0;
1178
+ font: inherit;
1179
+ letter-spacing: inherit;
1180
+ text-transform: inherit;
1181
+ color: inherit;
1182
+ background: none;
1183
+ border: none;
1184
+ cursor: pointer;
1185
+ }
1186
+
1187
+ .fe-table-sort:focus-visible {
1188
+ outline: 2px solid var(--fe-focus);
1189
+ outline-offset: 2px;
1190
+ border-radius: var(--fe-radius-sm);
1191
+ }
1192
+
1193
+ /* Mientras llega la página siguiente, la actual se sigue viendo, atenuada. */
1194
+ .fe-table[aria-busy='true'] tbody {
1195
+ opacity: 0.6;
1196
+ }
1197
+
1198
+ /*
1199
+ * Una tabla más ancha que la pantalla se desplaza dentro de su contenedor, no
1200
+ * ensancha la página. Con una altura máxima, la cabecera fija también funciona
1201
+ * al bajar por un listado largo.
1202
+ */
1203
+ .fe-table-container {
1204
+ max-width: 100%;
1205
+ max-height: var(--fe-table-max-height);
1206
+ overflow: auto;
1207
+ }
1208
+
1209
+ /* ============================================================
1210
+ LISTADO
1211
+ ============================================================ */
1212
+
1213
+ /* Barra, filtros, tabla y pie de un listado, uno debajo de otro. */
1214
+ .fe-datatable {
1215
+ display: flex;
1216
+ flex-direction: column;
1217
+ min-width: 0;
1218
+ }
1219
+
1220
+ /* Lo que va detrás del separador en una barra se queda a la derecha. */
1221
+ .fe-toolbar-spacer {
1222
+ flex: 1 1 auto;
1223
+ }
1224
+
1225
+ .fe-datatable > .fe-bulk-bar {
1226
+ margin: var(--fe-space-2);
1227
+ }
1228
+
1229
+ .fe-datatable-filters {
1230
+ padding: var(--fe-space-4);
1231
+ border-bottom: 1px solid var(--fe-border);
1232
+ }
1233
+
1234
+ .fe-table-footer {
1235
+ display: flex;
1236
+ flex-wrap: wrap;
1237
+ align-items: center;
1238
+ justify-content: space-between;
1239
+ gap: var(--fe-space-3);
1240
+ padding: var(--fe-space-2) var(--fe-space-4);
1241
+ font-size: var(--fe-text-sm);
1242
+ font-variant-numeric: tabular-nums;
1243
+ color: var(--fe-text-muted);
1244
+ }
1245
+
1246
+ .fe-table-pager {
1247
+ display: flex;
1248
+ align-items: center;
1249
+ gap: var(--fe-space-2);
1250
+ }
1251
+
1252
+ /* En un formulario ocupa todo el ancho; aquí empujaría las flechas fuera. */
1253
+ .fe-table-pager .fe-select {
1254
+ width: auto;
1255
+ }
1256
+
1169
1257
  /* ============================================================
1170
1258
  EDICION EN LINEA
1171
1259
  ============================================================ */
package/src/theme.js CHANGED
@@ -128,6 +128,13 @@ export const defaultTheme = {
128
128
  tableEmpty: 'fe-table-empty',
129
129
  bulkBar: 'fe-bulk-bar',
130
130
  bulkCount: 'fe-bulk-count',
131
+ tableSort: 'fe-table-sort',
132
+ tableContainer: 'fe-table-container',
133
+ tableFooter: 'fe-table-footer',
134
+ tablePager: 'fe-table-pager',
135
+ datatable: 'fe-datatable',
136
+ datatableFilters: 'fe-datatable-filters',
137
+ toolbarSpacer: 'fe-toolbar-spacer',
131
138
 
132
139
  // EDICION EN LINEA
133
140
  editable: 'fe-editable',
package/src/tokens.css CHANGED
@@ -128,6 +128,9 @@
128
128
  --fe-drawer-width: 32rem;
129
129
  --fe-command-width: 40rem;
130
130
  --fe-sidebar-width: 15rem;
131
+ /* Sin límite, la tabla crece con sus filas; con uno, la cabecera fija
132
+ funciona también al bajar por el listado. */
133
+ --fe-table-max-height: none;
131
134
  }
132
135
 
133
136
  /* La elección explícita de claro gana sobre un sistema en oscuro, de ahí el