easy-forms-core 1.1.12 → 1.1.14
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/dist/easy-form.d.ts +10 -0
- package/dist/easy-form.js +156 -31
- package/dist/easy-form.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.js +156 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/easy-form.d.ts
CHANGED
|
@@ -273,6 +273,10 @@ interface GroupField extends BaseField {
|
|
|
273
273
|
fields: Field[];
|
|
274
274
|
/** Dirección del layout del grupo (override del formulario) */
|
|
275
275
|
direction?: 'vertical' | 'horizontal';
|
|
276
|
+
/** Si true, el grupo se puede colapsar como acordeón */
|
|
277
|
+
collapsible?: boolean;
|
|
278
|
+
/** Si collapsible, estado inicial: true = abierto, false = cerrado (default: true) */
|
|
279
|
+
defaultOpen?: boolean;
|
|
276
280
|
}
|
|
277
281
|
/**
|
|
278
282
|
* Campo row
|
|
@@ -365,6 +369,12 @@ interface FormColors {
|
|
|
365
369
|
labelColor?: string;
|
|
366
370
|
border?: string;
|
|
367
371
|
background?: string;
|
|
372
|
+
/** Fondo del contenedor .easy-form-group */
|
|
373
|
+
groupBackground?: string;
|
|
374
|
+
/** Color del título .easy-form-group-label */
|
|
375
|
+
groupTitle?: string;
|
|
376
|
+
/** Color del borde .easy-form-group */
|
|
377
|
+
groupBorder?: string;
|
|
368
378
|
}
|
|
369
379
|
/**
|
|
370
380
|
* Template names available
|
package/dist/easy-form.js
CHANGED
|
@@ -238,7 +238,10 @@ var defaultColors = {
|
|
|
238
238
|
text: "#212529",
|
|
239
239
|
labelColor: "#212529",
|
|
240
240
|
border: "#ddd",
|
|
241
|
-
background: "#ffffff"
|
|
241
|
+
background: "#ffffff",
|
|
242
|
+
groupBackground: "#f8f9fa",
|
|
243
|
+
groupTitle: "#212529",
|
|
244
|
+
groupBorder: "#ddd"
|
|
242
245
|
};
|
|
243
246
|
function getColors(colors) {
|
|
244
247
|
return { ...defaultColors, ...colors };
|
|
@@ -260,6 +263,9 @@ function getBaseStyles(colors) {
|
|
|
260
263
|
--easy-form-label-color: ${colors.labelColor};
|
|
261
264
|
--easy-form-border: ${colors.border};
|
|
262
265
|
--easy-form-background: ${colors.background};
|
|
266
|
+
--easy-form-group-background: ${colors.groupBackground};
|
|
267
|
+
--easy-form-group-title: ${colors.groupTitle};
|
|
268
|
+
--easy-form-group-border: ${colors.groupBorder};
|
|
263
269
|
}
|
|
264
270
|
.easy-form-field {
|
|
265
271
|
margin-bottom: 1rem;
|
|
@@ -515,6 +521,60 @@ function getBaseStyles(colors) {
|
|
|
515
521
|
.easy-form-group {
|
|
516
522
|
padding: 1rem;
|
|
517
523
|
margin-bottom: 1rem;
|
|
524
|
+
background: var(--easy-form-group-background);
|
|
525
|
+
border: 1px solid var(--easy-form-group-border);
|
|
526
|
+
border-radius: 4px;
|
|
527
|
+
}
|
|
528
|
+
.easy-form-group-label {
|
|
529
|
+
color: var(--easy-form-group-title);
|
|
530
|
+
font-weight: 600;
|
|
531
|
+
font-size: 1rem;
|
|
532
|
+
margin-bottom: 0.75rem;
|
|
533
|
+
margin-top: 0;
|
|
534
|
+
}
|
|
535
|
+
.easy-form-group-collapsible {
|
|
536
|
+
border: 1px solid var(--easy-form-group-border);
|
|
537
|
+
border-radius: 4px;
|
|
538
|
+
overflow: hidden;
|
|
539
|
+
}
|
|
540
|
+
.easy-form-group-collapsible .easy-form-group-header {
|
|
541
|
+
display: flex;
|
|
542
|
+
align-items: center;
|
|
543
|
+
justify-content: space-between;
|
|
544
|
+
padding: 0.75rem 1rem;
|
|
545
|
+
cursor: pointer;
|
|
546
|
+
background: var(--easy-form-group-background);
|
|
547
|
+
color: var(--easy-form-group-title);
|
|
548
|
+
font-weight: 600;
|
|
549
|
+
font-size: 1rem;
|
|
550
|
+
user-select: none;
|
|
551
|
+
transition: background-color 0.2s ease;
|
|
552
|
+
}
|
|
553
|
+
.easy-form-group-collapsible .easy-form-group-header:hover {
|
|
554
|
+
background: rgba(0, 0, 0, 0.03);
|
|
555
|
+
}
|
|
556
|
+
.easy-form-group-collapsible .easy-form-group-header:focus {
|
|
557
|
+
outline: none;
|
|
558
|
+
box-shadow: inset 0 0 0 2px var(--easy-form-primary);
|
|
559
|
+
}
|
|
560
|
+
.easy-form-group-collapsible .easy-form-group-chevron {
|
|
561
|
+
flex-shrink: 0;
|
|
562
|
+
margin-left: 0.5rem;
|
|
563
|
+
transition: transform 0.2s ease;
|
|
564
|
+
color: var(--easy-form-secondary);
|
|
565
|
+
}
|
|
566
|
+
.easy-form-group-collapsible.easy-form-group-collapsed .easy-form-group-chevron {
|
|
567
|
+
transform: rotate(-90deg); /* \u25BC \u2192 \u25B6 cuando colapsado */
|
|
568
|
+
}
|
|
569
|
+
.easy-form-group-collapsible .easy-form-group-content {
|
|
570
|
+
overflow: hidden;
|
|
571
|
+
transition: max-height 0.3s ease;
|
|
572
|
+
padding: 0 1rem 1rem 1rem;
|
|
573
|
+
}
|
|
574
|
+
.easy-form-group-collapsible.easy-form-group-collapsed .easy-form-group-content {
|
|
575
|
+
max-height: 0 !important;
|
|
576
|
+
padding-top: 0;
|
|
577
|
+
padding-bottom: 0;
|
|
518
578
|
}
|
|
519
579
|
.easy-form-row {
|
|
520
580
|
display: flex;
|
|
@@ -1085,8 +1145,9 @@ function getPlanoStyles(_colors) {
|
|
|
1085
1145
|
}
|
|
1086
1146
|
.easy-form-group {
|
|
1087
1147
|
border: none;
|
|
1088
|
-
border-bottom: 1px solid var(--easy-form-border);
|
|
1148
|
+
border-bottom: 1px solid var(--easy-form-group-border);
|
|
1089
1149
|
border-radius: 0;
|
|
1150
|
+
background: transparent;
|
|
1090
1151
|
}
|
|
1091
1152
|
.easy-form-wizard-step {
|
|
1092
1153
|
border: none;
|
|
@@ -1119,9 +1180,9 @@ function getTradicionalStyles(_colors) {
|
|
|
1119
1180
|
font-weight: 500;
|
|
1120
1181
|
}
|
|
1121
1182
|
.easy-form-group {
|
|
1122
|
-
border: 2px solid var(--easy-form-border);
|
|
1183
|
+
border: 2px solid var(--easy-form-group-border);
|
|
1123
1184
|
border-radius: 4px;
|
|
1124
|
-
background:
|
|
1185
|
+
background: var(--easy-form-group-background);
|
|
1125
1186
|
}
|
|
1126
1187
|
.easy-form-wizard-step {
|
|
1127
1188
|
border: 2px solid var(--easy-form-border);
|
|
@@ -1171,7 +1232,7 @@ function getMaterialStyles(_colors) {
|
|
|
1171
1232
|
.easy-form-group {
|
|
1172
1233
|
border: none;
|
|
1173
1234
|
border-radius: 4px;
|
|
1174
|
-
background:
|
|
1235
|
+
background: var(--easy-form-group-background);
|
|
1175
1236
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
|
|
1176
1237
|
}
|
|
1177
1238
|
.easy-form-wizard-step {
|
|
@@ -1213,10 +1274,10 @@ function getRoundedShadowStyles(_colors) {
|
|
|
1213
1274
|
transform: translateY(-2px);
|
|
1214
1275
|
}
|
|
1215
1276
|
.easy-form-group {
|
|
1216
|
-
border: 1px solid var(--easy-form-border);
|
|
1277
|
+
border: 1px solid var(--easy-form-group-border);
|
|
1217
1278
|
border-radius: 16px;
|
|
1218
1279
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
1219
|
-
background: var(--easy-form-background);
|
|
1280
|
+
background: var(--easy-form-group-background);
|
|
1220
1281
|
}
|
|
1221
1282
|
.easy-form-wizard-step {
|
|
1222
1283
|
border: 1px solid var(--easy-form-border);
|
|
@@ -1267,9 +1328,10 @@ function getLinesStyles(_colors) {
|
|
|
1267
1328
|
}
|
|
1268
1329
|
.easy-form-group {
|
|
1269
1330
|
border: none;
|
|
1270
|
-
border-bottom: 2px solid var(--easy-form-border);
|
|
1331
|
+
border-bottom: 2px solid var(--easy-form-group-border);
|
|
1271
1332
|
border-radius: 0;
|
|
1272
1333
|
padding-bottom: 1rem;
|
|
1334
|
+
background: transparent;
|
|
1273
1335
|
}
|
|
1274
1336
|
.easy-form-wizard-step {
|
|
1275
1337
|
border: none;
|
|
@@ -1344,9 +1406,9 @@ function getShadcnStyles(_colors) {
|
|
|
1344
1406
|
box-shadow: 0 2px 8px rgba(0, 123, 255, 0.3);
|
|
1345
1407
|
}
|
|
1346
1408
|
.easy-form-group {
|
|
1347
|
-
border: 1.5px solid
|
|
1409
|
+
border: 1.5px solid var(--easy-form-group-border);
|
|
1348
1410
|
border-radius: 12px;
|
|
1349
|
-
background:
|
|
1411
|
+
background: var(--easy-form-group-background);
|
|
1350
1412
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
1351
1413
|
padding: 1.5rem;
|
|
1352
1414
|
}
|
|
@@ -1441,9 +1503,9 @@ function getChakraStyles(_colors) {
|
|
|
1441
1503
|
transform: none;
|
|
1442
1504
|
}
|
|
1443
1505
|
.easy-form-group {
|
|
1444
|
-
border: 2px solid
|
|
1506
|
+
border: 2px solid var(--easy-form-group-border);
|
|
1445
1507
|
border-radius: 8px;
|
|
1446
|
-
background: var(--easy-form-background);
|
|
1508
|
+
background: var(--easy-form-group-background);
|
|
1447
1509
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
1448
1510
|
}
|
|
1449
1511
|
.easy-form-wizard-step {
|
|
@@ -1522,9 +1584,9 @@ function getMantineStyles(_colors) {
|
|
|
1522
1584
|
box-shadow: 0 2px 8px rgba(0, 123, 255, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.2);
|
|
1523
1585
|
}
|
|
1524
1586
|
.easy-form-group {
|
|
1525
|
-
border: 1px solid
|
|
1587
|
+
border: 1px solid var(--easy-form-group-border);
|
|
1526
1588
|
border-radius: 16px;
|
|
1527
|
-
background: var(--easy-form-background);
|
|
1589
|
+
background: var(--easy-form-group-background);
|
|
1528
1590
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.8);
|
|
1529
1591
|
padding: 1.5rem;
|
|
1530
1592
|
}
|
|
@@ -1613,9 +1675,9 @@ function getGlassStyles(_colors) {
|
|
|
1613
1675
|
transform: translateY(-1px) scale(0.98);
|
|
1614
1676
|
}
|
|
1615
1677
|
.easy-form-group {
|
|
1616
|
-
border: 2px solid
|
|
1678
|
+
border: 2px solid var(--easy-form-group-border);
|
|
1617
1679
|
border-radius: 20px;
|
|
1618
|
-
background:
|
|
1680
|
+
background: var(--easy-form-group-background);
|
|
1619
1681
|
backdrop-filter: blur(20px) saturate(180%);
|
|
1620
1682
|
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
|
1621
1683
|
box-shadow: 0 16px 32px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.3);
|
|
@@ -1707,9 +1769,9 @@ function getBorderedStyles(_colors) {
|
|
|
1707
1769
|
box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.2);
|
|
1708
1770
|
}
|
|
1709
1771
|
.easy-form-group {
|
|
1710
|
-
border: 4px solid
|
|
1772
|
+
border: 4px solid var(--easy-form-group-border);
|
|
1711
1773
|
border-radius: 0;
|
|
1712
|
-
background: var(--easy-form-background);
|
|
1774
|
+
background: var(--easy-form-group-background);
|
|
1713
1775
|
box-shadow: 8px 8px 0 rgba(0, 0, 0, 0.1);
|
|
1714
1776
|
padding: 2rem;
|
|
1715
1777
|
}
|
|
@@ -1819,7 +1881,7 @@ function getMinimalStyles(_colors) {
|
|
|
1819
1881
|
}
|
|
1820
1882
|
.easy-form-group {
|
|
1821
1883
|
border: none;
|
|
1822
|
-
border-bottom: 1px solid
|
|
1884
|
+
border-bottom: 1px solid var(--easy-form-group-border);
|
|
1823
1885
|
border-radius: 0;
|
|
1824
1886
|
background: transparent;
|
|
1825
1887
|
padding-bottom: 2rem;
|
|
@@ -6381,21 +6443,84 @@ var EasyForm = class extends BrowserHTMLElement {
|
|
|
6381
6443
|
* Renderiza un grupo de campos
|
|
6382
6444
|
*/
|
|
6383
6445
|
renderGroup(field) {
|
|
6384
|
-
const groupContainer = document.createElement("div");
|
|
6385
6446
|
const groupField = field;
|
|
6386
6447
|
const dir = groupField.direction ?? "vertical";
|
|
6448
|
+
const collapsible = groupField.collapsible === true;
|
|
6449
|
+
const defaultOpen = groupField.defaultOpen !== false;
|
|
6450
|
+
const groupContainer = document.createElement("div");
|
|
6387
6451
|
groupContainer.className = `easy-form-group easy-form-direction-${dir}`;
|
|
6388
|
-
if (
|
|
6389
|
-
|
|
6390
|
-
|
|
6391
|
-
|
|
6392
|
-
|
|
6393
|
-
|
|
6394
|
-
|
|
6395
|
-
|
|
6396
|
-
|
|
6397
|
-
|
|
6398
|
-
|
|
6452
|
+
if (collapsible) {
|
|
6453
|
+
groupContainer.classList.add("easy-form-group-collapsible");
|
|
6454
|
+
if (!defaultOpen) {
|
|
6455
|
+
groupContainer.classList.add("easy-form-group-collapsed");
|
|
6456
|
+
}
|
|
6457
|
+
const header = document.createElement("button");
|
|
6458
|
+
header.type = "button";
|
|
6459
|
+
header.className = "easy-form-group-header";
|
|
6460
|
+
header.setAttribute("aria-expanded", String(defaultOpen));
|
|
6461
|
+
const groupContentId = `easy-form-group-${(field.name || "group").replace(/[^a-z0-9]/gi, "-")}-content`;
|
|
6462
|
+
header.setAttribute("aria-controls", groupContentId);
|
|
6463
|
+
const labelSpan = document.createElement("span");
|
|
6464
|
+
labelSpan.textContent = field.label || "Grupo";
|
|
6465
|
+
const chevron = document.createElement("span");
|
|
6466
|
+
chevron.className = "easy-form-group-chevron";
|
|
6467
|
+
chevron.setAttribute("aria-hidden", "true");
|
|
6468
|
+
chevron.textContent = "\u25BC";
|
|
6469
|
+
header.appendChild(labelSpan);
|
|
6470
|
+
header.appendChild(chevron);
|
|
6471
|
+
groupContainer.appendChild(header);
|
|
6472
|
+
const content = document.createElement("div");
|
|
6473
|
+
content.id = groupContentId;
|
|
6474
|
+
content.className = "easy-form-group-content";
|
|
6475
|
+
if ("fields" in field && field.fields) {
|
|
6476
|
+
for (const subField of field.fields) {
|
|
6477
|
+
const fieldElement = this.renderField(subField);
|
|
6478
|
+
if (fieldElement) {
|
|
6479
|
+
content.appendChild(fieldElement);
|
|
6480
|
+
}
|
|
6481
|
+
}
|
|
6482
|
+
}
|
|
6483
|
+
groupContainer.appendChild(content);
|
|
6484
|
+
const setContentHeight = (open) => {
|
|
6485
|
+
if (open) {
|
|
6486
|
+
content.style.maxHeight = content.scrollHeight + "px";
|
|
6487
|
+
} else {
|
|
6488
|
+
content.style.maxHeight = "0";
|
|
6489
|
+
}
|
|
6490
|
+
};
|
|
6491
|
+
if (defaultOpen) {
|
|
6492
|
+
requestAnimationFrame(() => setContentHeight(true));
|
|
6493
|
+
} else {
|
|
6494
|
+
content.style.maxHeight = "0";
|
|
6495
|
+
}
|
|
6496
|
+
header.addEventListener("click", () => {
|
|
6497
|
+
const isCollapsed = groupContainer.classList.contains("easy-form-group-collapsed");
|
|
6498
|
+
if (isCollapsed) {
|
|
6499
|
+
groupContainer.classList.remove("easy-form-group-collapsed");
|
|
6500
|
+
header.setAttribute("aria-expanded", "true");
|
|
6501
|
+
setContentHeight(true);
|
|
6502
|
+
} else {
|
|
6503
|
+
content.style.maxHeight = content.scrollHeight + "px";
|
|
6504
|
+
requestAnimationFrame(() => {
|
|
6505
|
+
groupContainer.classList.add("easy-form-group-collapsed");
|
|
6506
|
+
header.setAttribute("aria-expanded", "false");
|
|
6507
|
+
setContentHeight(false);
|
|
6508
|
+
});
|
|
6509
|
+
}
|
|
6510
|
+
});
|
|
6511
|
+
} else {
|
|
6512
|
+
if (field.label) {
|
|
6513
|
+
const label = document.createElement("h3");
|
|
6514
|
+
label.className = "easy-form-group-label";
|
|
6515
|
+
label.textContent = field.label;
|
|
6516
|
+
groupContainer.appendChild(label);
|
|
6517
|
+
}
|
|
6518
|
+
if ("fields" in field && field.fields) {
|
|
6519
|
+
for (const subField of field.fields) {
|
|
6520
|
+
const fieldElement = this.renderField(subField);
|
|
6521
|
+
if (fieldElement) {
|
|
6522
|
+
groupContainer.appendChild(fieldElement);
|
|
6523
|
+
}
|
|
6399
6524
|
}
|
|
6400
6525
|
}
|
|
6401
6526
|
}
|