innoboxrr-form-core 2.6.0 → 2.7.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
@@ -67,6 +67,7 @@ setTheme({
67
67
  | Avisos | `toast`, `toastSuccess`, `toastDanger`, `toastWarning`, `toastTitle`, `toastClose`, `toastRegion` |
68
68
  | Tabla | `table`, `tableNumeric`, `tableSticky`, `tableSelect`, `tableResizer`, `tableEmpty`, `bulkBar`, `bulkCount`, `tableSort`, `tableContainer`, `tableFooter`, `tablePager` |
69
69
  | Listado | `datatable`, `datatableFilters`, `toolbarSpacer` |
70
+ | Campos compuestos | `fileDrop`, `fileDropHint`, `avatarPreview`, `codeInput`, `codeCell`, `group`, `groupTitle`, `dragHandle`, `iconButtonDanger` |
70
71
  | Edición en línea | `editable` |
71
72
  | Shell de aplicación | `shell`, `shellHeader`, `shellSidebar`, `shellMain` |
72
73
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "innoboxrr-form-core",
3
- "version": "2.6.0",
3
+ "version": "2.7.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",
@@ -1254,6 +1254,147 @@
1254
1254
  width: auto;
1255
1255
  }
1256
1256
 
1257
+ /* ============================================================
1258
+ CAMPOS COMPUESTOS
1259
+ ============================================================ */
1260
+
1261
+ /*
1262
+ * La zona para soltar archivos. Se resalta al pasar el ratón, al enfocarla y
1263
+ * mientras se arrastra algo encima (`data-dragging="true"`).
1264
+ */
1265
+ .fe-file-drop {
1266
+ box-sizing: border-box;
1267
+ display: flex;
1268
+ flex-direction: column;
1269
+ align-items: center;
1270
+ justify-content: center;
1271
+ gap: var(--fe-space-2);
1272
+ width: 100%;
1273
+ padding: var(--fe-space-6) var(--fe-space-4);
1274
+ font-size: var(--fe-text-sm);
1275
+ text-align: center;
1276
+ color: var(--fe-text-muted);
1277
+ background: var(--fe-surface);
1278
+ border: 2px dashed var(--fe-border-strong);
1279
+ border-radius: var(--fe-radius-lg);
1280
+ cursor: pointer;
1281
+ transition: border-color var(--fe-transition), background var(--fe-transition);
1282
+ }
1283
+
1284
+ .fe-file-drop p {
1285
+ margin: 0;
1286
+ }
1287
+
1288
+ .fe-file-drop:hover,
1289
+ .fe-file-drop[data-dragging='true'] {
1290
+ border-color: var(--fe-primary);
1291
+ background: var(--fe-primary-soft);
1292
+ }
1293
+
1294
+ .fe-file-drop:focus-visible {
1295
+ outline: 2px solid var(--fe-focus);
1296
+ outline-offset: 2px;
1297
+ }
1298
+
1299
+ .fe-file-drop-hint {
1300
+ font-size: var(--fe-text-xs);
1301
+ color: var(--fe-text-subtle);
1302
+ }
1303
+
1304
+ /* La miniatura de un avatar, que se pulsa para cambiarlo. */
1305
+ .fe-avatar-preview {
1306
+ box-sizing: border-box;
1307
+ width: 6rem;
1308
+ height: 6rem;
1309
+ object-fit: cover;
1310
+ border: 2px solid var(--fe-border);
1311
+ border-radius: var(--fe-radius-full);
1312
+ box-shadow: var(--fe-shadow);
1313
+ cursor: pointer;
1314
+ transition: border-color var(--fe-transition);
1315
+ }
1316
+
1317
+ .fe-avatar-preview:hover {
1318
+ border-color: var(--fe-primary);
1319
+ }
1320
+
1321
+ .fe-avatar-preview:focus-visible {
1322
+ outline: 2px solid var(--fe-focus);
1323
+ outline-offset: 2px;
1324
+ }
1325
+
1326
+ /* Las casillas de un código de un solo uso. */
1327
+ .fe-code-input {
1328
+ display: flex;
1329
+ justify-content: center;
1330
+ gap: var(--fe-space-2);
1331
+ }
1332
+
1333
+ .fe-code-cell {
1334
+ box-sizing: border-box;
1335
+ width: 3rem;
1336
+ height: 3rem;
1337
+ padding: 0;
1338
+ font-family: var(--fe-font);
1339
+ font-size: var(--fe-text-lg);
1340
+ text-align: center;
1341
+ color: var(--fe-text);
1342
+ background: var(--fe-surface);
1343
+ border: 1px solid var(--fe-border-strong);
1344
+ border-radius: var(--fe-radius);
1345
+ appearance: textfield;
1346
+ transition: border-color var(--fe-transition), box-shadow var(--fe-transition);
1347
+ }
1348
+
1349
+ .fe-code-cell:focus {
1350
+ outline: none;
1351
+ border-color: var(--fe-focus);
1352
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--fe-focus) 22%, transparent);
1353
+ caret-color: var(--fe-focus);
1354
+ }
1355
+
1356
+ .fe-code-cell::-webkit-outer-spin-button,
1357
+ .fe-code-cell::-webkit-inner-spin-button {
1358
+ appearance: none;
1359
+ margin: 0;
1360
+ }
1361
+
1362
+ /*
1363
+ * Un grupo de campos que se repite. Cada elemento es una superficie con su
1364
+ * barra: el tirador para ordenarlo, el título y las acciones.
1365
+ */
1366
+ .fe-group {
1367
+ display: flex;
1368
+ flex-direction: column;
1369
+ gap: var(--fe-space-2);
1370
+ }
1371
+
1372
+ .fe-group-title {
1373
+ margin: 0;
1374
+ font-size: var(--fe-text-base);
1375
+ font-weight: 600;
1376
+ color: var(--fe-text);
1377
+ }
1378
+
1379
+ .fe-drag-handle {
1380
+ cursor: grab;
1381
+ touch-action: none;
1382
+ }
1383
+
1384
+ .fe-drag-handle:active {
1385
+ cursor: grabbing;
1386
+ }
1387
+
1388
+ /* Va después del botón de icono genérico para ganarle el color al pasar. */
1389
+ .fe-icon-button-danger {
1390
+ color: var(--fe-danger);
1391
+ }
1392
+
1393
+ .fe-icon-button-danger:hover:not(:disabled) {
1394
+ color: var(--fe-danger);
1395
+ background: var(--fe-danger-soft);
1396
+ }
1397
+
1257
1398
  /* ============================================================
1258
1399
  EDICION EN LINEA
1259
1400
  ============================================================ */
package/src/theme.js CHANGED
@@ -46,6 +46,14 @@ export const defaultTheme = {
46
46
  checkbox: 'fe-checkbox',
47
47
  radio: 'fe-radio',
48
48
  file: 'fe-file',
49
+ fileDrop: 'fe-file-drop',
50
+ fileDropHint: 'fe-file-drop-hint',
51
+ avatarPreview: 'fe-avatar-preview',
52
+ codeInput: 'fe-code-input',
53
+ codeCell: 'fe-code-cell',
54
+ group: 'fe-group',
55
+ groupTitle: 'fe-group-title',
56
+ dragHandle: 'fe-drag-handle',
49
57
 
50
58
  // BOTONES
51
59
  button: 'fe-button',
@@ -53,6 +61,7 @@ export const defaultTheme = {
53
61
  buttonDanger: 'fe-button-danger',
54
62
  buttonLink: 'fe-button-link',
55
63
  iconButton: 'fe-icon-button',
64
+ iconButtonDanger: 'fe-icon-button-danger',
56
65
 
57
66
  // NAVEGACION Y ACCIONES
58
67
  breadcrumb: 'fe-breadcrumb',