innoboxrr-form-core 2.6.0 → 2.8.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 +1 -0
- package/package.json +1 -1
- package/src/components.css +273 -0
- package/src/theme.js +11 -0
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`, `phone`, `phoneInvalid` |
|
|
70
71
|
| Edición en línea | `editable` |
|
|
71
72
|
| Shell de aplicación | `shell`, `shellHeader`, `shellSidebar`, `shellMain` |
|
|
72
73
|
|
package/package.json
CHANGED
package/src/components.css
CHANGED
|
@@ -1254,6 +1254,279 @@
|
|
|
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
|
+
|
|
1398
|
+
/* ============================================================
|
|
1399
|
+
TELEFONO
|
|
1400
|
+
vue-tel-input y react-phone-number-input dibujan su propio marcado con
|
|
1401
|
+
colores escritos (borde #bbb, foco #66afe9, lista con fondo blanco), y el de
|
|
1402
|
+
React ni siquiera tiene forma sin su hoja. Aquí se les da la de un fe-input,
|
|
1403
|
+
con los colores de los tokens, también en oscuro.
|
|
1404
|
+
============================================================ */
|
|
1405
|
+
|
|
1406
|
+
.fe-phone {
|
|
1407
|
+
box-sizing: border-box;
|
|
1408
|
+
display: flex;
|
|
1409
|
+
align-items: stretch;
|
|
1410
|
+
width: 100%;
|
|
1411
|
+
min-height: var(--fe-control-height);
|
|
1412
|
+
font-family: var(--fe-font);
|
|
1413
|
+
font-size: var(--fe-text-base);
|
|
1414
|
+
color: var(--fe-text);
|
|
1415
|
+
background: var(--fe-surface);
|
|
1416
|
+
border: 1px solid var(--fe-border);
|
|
1417
|
+
border-radius: var(--fe-radius);
|
|
1418
|
+
transition: border-color var(--fe-transition), box-shadow var(--fe-transition);
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
.fe-phone:hover {
|
|
1422
|
+
border-color: var(--fe-border-strong);
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
.fe-phone:focus-within {
|
|
1426
|
+
border-color: var(--fe-focus);
|
|
1427
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--fe-focus) 22%, transparent);
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
.fe-phone-invalid {
|
|
1431
|
+
border-color: var(--fe-danger);
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1434
|
+
.fe-phone input {
|
|
1435
|
+
box-sizing: border-box;
|
|
1436
|
+
flex: 1;
|
|
1437
|
+
min-width: 0;
|
|
1438
|
+
padding: 0 var(--fe-control-padding-x);
|
|
1439
|
+
font: inherit;
|
|
1440
|
+
color: inherit;
|
|
1441
|
+
background: transparent;
|
|
1442
|
+
border: 0;
|
|
1443
|
+
outline: none;
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
.fe-phone input::placeholder {
|
|
1447
|
+
color: var(--fe-text-subtle);
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1450
|
+
.fe-phone input:disabled {
|
|
1451
|
+
color: var(--fe-text-subtle);
|
|
1452
|
+
cursor: not-allowed;
|
|
1453
|
+
}
|
|
1454
|
+
|
|
1455
|
+
/* react-phone-number-input: la bandera y la flecha, sobre un <select> nativo
|
|
1456
|
+
invisible. Se ajusta con sus propias variables. */
|
|
1457
|
+
.fe-phone.PhoneInput {
|
|
1458
|
+
--PhoneInput-color--focus: var(--fe-focus);
|
|
1459
|
+
--PhoneInputCountryFlag-borderColor: var(--fe-border-strong);
|
|
1460
|
+
--PhoneInputCountrySelectArrow-color: var(--fe-text-subtle);
|
|
1461
|
+
--PhoneInputCountrySelectArrow-opacity: 1;
|
|
1462
|
+
align-items: center;
|
|
1463
|
+
padding-left: var(--fe-control-padding-x);
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
/* vue-tel-input declara su borde y su foco con la misma especificidad y su
|
|
1467
|
+
hoja se carga después: sin el selector doble, ganaría la suya. */
|
|
1468
|
+
.fe-phone.vue-tel-input {
|
|
1469
|
+
border: 1px solid var(--fe-border);
|
|
1470
|
+
border-radius: var(--fe-radius);
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
.fe-phone.vue-tel-input:hover {
|
|
1474
|
+
border-color: var(--fe-border-strong);
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1477
|
+
.fe-phone.vue-tel-input:focus-within {
|
|
1478
|
+
border-color: var(--fe-focus);
|
|
1479
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--fe-focus) 22%, transparent);
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
.fe-phone.vue-tel-input.fe-phone-invalid {
|
|
1483
|
+
border-color: var(--fe-danger);
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
.fe-phone .vti__dropdown {
|
|
1487
|
+
padding: 0 var(--fe-space-2) 0 var(--fe-control-padding-x);
|
|
1488
|
+
border-radius: var(--fe-radius) 0 0 var(--fe-radius);
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
.fe-phone .vti__dropdown:hover,
|
|
1492
|
+
.fe-phone .vti__dropdown.open {
|
|
1493
|
+
background: var(--fe-surface-hover);
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
.fe-phone .vti__selection .vti__country-code,
|
|
1497
|
+
.fe-phone .vti__dropdown-arrow {
|
|
1498
|
+
color: var(--fe-text-subtle);
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
.fe-phone .vti__dropdown-list {
|
|
1502
|
+
z-index: var(--fe-z-dropdown);
|
|
1503
|
+
width: max-content;
|
|
1504
|
+
max-width: min(24rem, 90vw);
|
|
1505
|
+
color: var(--fe-text);
|
|
1506
|
+
background: var(--fe-surface-raised);
|
|
1507
|
+
border: 1px solid var(--fe-border);
|
|
1508
|
+
border-radius: var(--fe-radius);
|
|
1509
|
+
box-shadow: var(--fe-shadow);
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
.fe-phone .vti__dropdown-list.below {
|
|
1513
|
+
top: calc(100% + var(--fe-space-1));
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
.fe-phone .vti__dropdown-item.highlighted {
|
|
1517
|
+
background: var(--fe-surface-hover);
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
.fe-phone .vti__dropdown-item.last-preferred {
|
|
1521
|
+
border-bottom-color: var(--fe-border);
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
.fe-phone .vti__search_box {
|
|
1525
|
+
width: 100%;
|
|
1526
|
+
min-height: var(--fe-control-height);
|
|
1527
|
+
border-bottom: 1px solid var(--fe-border);
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1257
1530
|
/* ============================================================
|
|
1258
1531
|
EDICION EN LINEA
|
|
1259
1532
|
============================================================ */
|
package/src/theme.js
CHANGED
|
@@ -46,6 +46,16 @@ 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',
|
|
57
|
+
phone: 'fe-phone',
|
|
58
|
+
phoneInvalid: 'fe-phone-invalid',
|
|
49
59
|
|
|
50
60
|
// BOTONES
|
|
51
61
|
button: 'fe-button',
|
|
@@ -53,6 +63,7 @@ export const defaultTheme = {
|
|
|
53
63
|
buttonDanger: 'fe-button-danger',
|
|
54
64
|
buttonLink: 'fe-button-link',
|
|
55
65
|
iconButton: 'fe-icon-button',
|
|
66
|
+
iconButtonDanger: 'fe-icon-button-danger',
|
|
56
67
|
|
|
57
68
|
// NAVEGACION Y ACCIONES
|
|
58
69
|
breadcrumb: 'fe-breadcrumb',
|