jupiter-dynamic-forms 1.16.3 → 1.16.5
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/core/add-column-dialog.d.ts.map +1 -1
- package/dist/core/concept-tree.d.ts +5 -0
- package/dist/core/concept-tree.d.ts.map +1 -1
- package/dist/core/dynamic-form.d.ts +3 -0
- package/dist/core/dynamic-form.d.ts.map +1 -1
- package/dist/core/filter-roles-dialog.d.ts.map +1 -1
- package/dist/core/form-field.d.ts +2 -0
- package/dist/core/form-field.d.ts.map +1 -1
- package/dist/core/form-section.d.ts +7 -0
- package/dist/core/form-section.d.ts.map +1 -1
- package/dist/index.js +369 -230
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +625 -168
- package/dist/index.mjs.map +1 -1
- package/dist/schema/types.d.ts +7 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/xbrl-types.d.ts +1 -0
- package/dist/schema/xbrl-types.d.ts.map +1 -1
- package/dist/utils/xbrl-form-builder.d.ts +14 -1
- package/dist/utils/xbrl-form-builder.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -607,11 +607,12 @@ class XBRLFormBuilder {
|
|
|
607
607
|
};
|
|
608
608
|
}
|
|
609
609
|
/**
|
|
610
|
-
*
|
|
610
|
+
* Extract section title from role name (remove role number prefix)
|
|
611
|
+
* Handle missing role property gracefully by using role ID as fallback
|
|
611
612
|
*/
|
|
612
613
|
static buildSectionFromRole(role, periodStartDate, periodEndDate, hypercubeData, language = "en", periodPreferences) {
|
|
613
|
-
var _a;
|
|
614
|
-
const title = this.extractRoleTitle(role.role);
|
|
614
|
+
var _a, _b;
|
|
615
|
+
const title = this.extractRoleTitle(role.role || role.id || "Unknown Role");
|
|
615
616
|
const nonAbstractConcepts = this.getAllNonAbstractConcepts(role);
|
|
616
617
|
const periodTypes = new Set(
|
|
617
618
|
nonAbstractConcepts.filter((concept) => concept.periodType).map((concept) => concept.periodType)
|
|
@@ -634,6 +635,11 @@ class XBRLFormBuilder {
|
|
|
634
635
|
}
|
|
635
636
|
});
|
|
636
637
|
}
|
|
638
|
+
if ((!hypercubeRole || !((_b = hypercubeRole.items) == null ? void 0 : _b.length)) && hypercubeData) {
|
|
639
|
+
conceptTrees.forEach(
|
|
640
|
+
(conceptTree) => this.applyCrossRoleDimensions(conceptTree, role.id, hypercubeData, language)
|
|
641
|
+
);
|
|
642
|
+
}
|
|
637
643
|
return {
|
|
638
644
|
id: role.id,
|
|
639
645
|
title,
|
|
@@ -708,7 +714,9 @@ class XBRLFormBuilder {
|
|
|
708
714
|
collapsed: level > 0,
|
|
709
715
|
// Collapse nested levels by default
|
|
710
716
|
abstract: concept.elementAbstract,
|
|
711
|
-
periodType: concept.periodType
|
|
717
|
+
periodType: concept.periodType,
|
|
718
|
+
balance: concept.balance
|
|
719
|
+
// Pass through balance attribute from XBRL data
|
|
712
720
|
};
|
|
713
721
|
}
|
|
714
722
|
/**
|
|
@@ -894,6 +902,73 @@ class XBRLFormBuilder {
|
|
|
894
902
|
});
|
|
895
903
|
return filtered;
|
|
896
904
|
}
|
|
905
|
+
/**
|
|
906
|
+
* Find typed dimension members from another role that shares the same concept.
|
|
907
|
+
* Called when the current role has no hypercube dimensions.
|
|
908
|
+
* Returns typed member info only when EXACTLY ONE other role matches.
|
|
909
|
+
*/
|
|
910
|
+
static findCrossRoleDimensions(conceptId, currentRoleId, hypercubeData, language = "en") {
|
|
911
|
+
var _a, _b;
|
|
912
|
+
const matchingRoles = [];
|
|
913
|
+
for (const role of hypercubeData.roles) {
|
|
914
|
+
if (role.roleId === currentRoleId)
|
|
915
|
+
continue;
|
|
916
|
+
for (const item2 of role.items) {
|
|
917
|
+
if (!((_a = item2.conceptIds) == null ? void 0 : _a.includes(conceptId)))
|
|
918
|
+
continue;
|
|
919
|
+
if (!((_b = item2.dimensions) == null ? void 0 : _b.some((d2) => d2.typedMember)))
|
|
920
|
+
continue;
|
|
921
|
+
matchingRoles.push(role);
|
|
922
|
+
break;
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
if (matchingRoles.length !== 1)
|
|
926
|
+
return null;
|
|
927
|
+
const matchingRole = matchingRoles[0];
|
|
928
|
+
const item = matchingRole.items.find((i2) => {
|
|
929
|
+
var _a2;
|
|
930
|
+
return (_a2 = i2.conceptIds) == null ? void 0 : _a2.includes(conceptId);
|
|
931
|
+
});
|
|
932
|
+
if (!item)
|
|
933
|
+
return null;
|
|
934
|
+
const result = [];
|
|
935
|
+
for (const dimension of item.dimensions) {
|
|
936
|
+
if (!dimension.typedMember)
|
|
937
|
+
continue;
|
|
938
|
+
const labelObj = dimension.labels.find((l2) => l2.lang === language) || dimension.labels.find((l2) => l2.lang === "en") || dimension.labels[0];
|
|
939
|
+
const axisLabel = (labelObj == null ? void 0 : labelObj.label) || dimension.id;
|
|
940
|
+
result.push({
|
|
941
|
+
axisId: dimension.id,
|
|
942
|
+
axisLabel,
|
|
943
|
+
typedMemberId: dimension.typedMember.id,
|
|
944
|
+
memberLabel: axisLabel
|
|
945
|
+
});
|
|
946
|
+
}
|
|
947
|
+
return result.length > 0 ? result : null;
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Recursively walk a concept tree and set crossRoleTypedMembers on every field
|
|
951
|
+
* whose concept appears in exactly one other hypercube role with typed dimensions.
|
|
952
|
+
*/
|
|
953
|
+
static applyCrossRoleDimensions(conceptTree, currentRoleId, hypercubeData, language) {
|
|
954
|
+
var _a;
|
|
955
|
+
if (!conceptTree.abstract && conceptTree.fields && conceptTree.fields.length > 0) {
|
|
956
|
+
const crossRoleTypedMembers = this.findCrossRoleDimensions(
|
|
957
|
+
conceptTree.originalConceptId,
|
|
958
|
+
currentRoleId,
|
|
959
|
+
hypercubeData,
|
|
960
|
+
language
|
|
961
|
+
);
|
|
962
|
+
if (crossRoleTypedMembers) {
|
|
963
|
+
conceptTree.fields.forEach((field2) => {
|
|
964
|
+
field2.crossRoleTypedMembers = crossRoleTypedMembers;
|
|
965
|
+
});
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
(_a = conceptTree.children) == null ? void 0 : _a.forEach(
|
|
969
|
+
(child) => this.applyCrossRoleDimensions(child, currentRoleId, hypercubeData, language)
|
|
970
|
+
);
|
|
971
|
+
}
|
|
897
972
|
/**
|
|
898
973
|
* Generate default columns based on period types of non-abstract concepts in a role
|
|
899
974
|
*/
|
|
@@ -1473,10 +1548,21 @@ class XBRLFormBuilder {
|
|
|
1473
1548
|
}
|
|
1474
1549
|
/**
|
|
1475
1550
|
* Extract role title from role string
|
|
1551
|
+
* Handles various role formats and missing data gracefully
|
|
1476
1552
|
*/
|
|
1477
1553
|
static extractRoleTitle(role) {
|
|
1554
|
+
if (!role)
|
|
1555
|
+
return "Unnamed Section";
|
|
1478
1556
|
const match = role.match(/^\[[\d]+\]\s*(.+)$/);
|
|
1479
|
-
|
|
1557
|
+
if (match) {
|
|
1558
|
+
return match[1].trim();
|
|
1559
|
+
}
|
|
1560
|
+
if (role.match(/^[a-z]+:[^:]*$/i) || role.match(/^urn:[^:]+:[^:]+/i)) {
|
|
1561
|
+
const parts = role.split(/[:\-]/);
|
|
1562
|
+
const lastPart = parts[parts.length - 1];
|
|
1563
|
+
return lastPart.replace(/[_\-]/g, " ").replace(/\b\w/g, (l2) => l2.toUpperCase());
|
|
1564
|
+
}
|
|
1565
|
+
return role.trim() || "Unnamed Section";
|
|
1480
1566
|
}
|
|
1481
1567
|
/**
|
|
1482
1568
|
* Extract role order from role string
|
|
@@ -2024,7 +2110,7 @@ class DraftStorageService {
|
|
|
2024
2110
|
/**
|
|
2025
2111
|
* Create metadata snapshot from current form state
|
|
2026
2112
|
*/
|
|
2027
|
-
createMetadataSnapshot(periodStartDate, periodEndDate, language, selectedRoleIds, allSections, typedMemberData, periodPreferences, periodData, unitData, reportingLanguage = "en") {
|
|
2113
|
+
createMetadataSnapshot(periodStartDate, periodEndDate, language, selectedRoleIds, allSections, typedMemberData, periodPreferences, periodData, unitData, reportingLanguage = "en", repeatCounts) {
|
|
2028
2114
|
return {
|
|
2029
2115
|
periodStartDate,
|
|
2030
2116
|
periodEndDate,
|
|
@@ -2037,6 +2123,7 @@ class DraftStorageService {
|
|
|
2037
2123
|
periodPreferences,
|
|
2038
2124
|
periodData,
|
|
2039
2125
|
unitData,
|
|
2126
|
+
repeatCounts,
|
|
2040
2127
|
schemaVersion: this.STORAGE_VERSION
|
|
2041
2128
|
};
|
|
2042
2129
|
}
|
|
@@ -2646,7 +2733,6 @@ function getInputTypeForConceptType(conceptType, datatypes) {
|
|
|
2646
2733
|
const baseTypeChain = resolveBaseTypeChain(conceptType, datatypes);
|
|
2647
2734
|
if (baseTypeChain.length > 0) {
|
|
2648
2735
|
const config = determineInputTypeFromBaseChain(baseTypeChain, datatypes);
|
|
2649
|
-
console.log(`🔍 [Type Resolution] ${conceptType} → Chain:`, baseTypeChain, "→ Type:", config.fieldType, config.enumerations ? `(${config.enumerations.length} options)` : "");
|
|
2650
2736
|
return config;
|
|
2651
2737
|
}
|
|
2652
2738
|
}
|
|
@@ -2903,6 +2989,7 @@ let JupiterFormField = class extends LitElement {
|
|
|
2903
2989
|
this.locale = "en-US";
|
|
2904
2990
|
this.hideLabel = false;
|
|
2905
2991
|
this.mode = "inputForm";
|
|
2992
|
+
this.typedMemberValues = {};
|
|
2906
2993
|
this._errors = [];
|
|
2907
2994
|
this._xbrlErrors = [];
|
|
2908
2995
|
this._touched = false;
|
|
@@ -3241,6 +3328,20 @@ let JupiterFormField = class extends LitElement {
|
|
|
3241
3328
|
periodType: this.field.periodType
|
|
3242
3329
|
});
|
|
3243
3330
|
}
|
|
3331
|
+
_handleCrossRoleTypedMemberChange(event, axisId) {
|
|
3332
|
+
const value = event.target.value;
|
|
3333
|
+
this.typedMemberValues = { ...this.typedMemberValues, [axisId]: value };
|
|
3334
|
+
this.dispatchEvent(new CustomEvent("typed-member-change", {
|
|
3335
|
+
detail: {
|
|
3336
|
+
columnId: this.columnId,
|
|
3337
|
+
conceptId: this.conceptId,
|
|
3338
|
+
axisId,
|
|
3339
|
+
value
|
|
3340
|
+
},
|
|
3341
|
+
bubbles: true,
|
|
3342
|
+
composed: true
|
|
3343
|
+
}));
|
|
3344
|
+
}
|
|
3244
3345
|
/**
|
|
3245
3346
|
* Renders a plain text label for readonly mode instead of an interactive input.
|
|
3246
3347
|
* Resolves the display value for selects (shows label, not raw id) and
|
|
@@ -3498,6 +3599,21 @@ let JupiterFormField = class extends LitElement {
|
|
|
3498
3599
|
</select>
|
|
3499
3600
|
</div>
|
|
3500
3601
|
` : ""}
|
|
3602
|
+
|
|
3603
|
+
${this.field.crossRoleTypedMembers && this.field.crossRoleTypedMembers.length > 0 ? html`
|
|
3604
|
+
${this.field.crossRoleTypedMembers.map((tm) => html`
|
|
3605
|
+
<div class="period-controls">
|
|
3606
|
+
<label>${tm.axisLabel}:</label>
|
|
3607
|
+
<input
|
|
3608
|
+
type="text"
|
|
3609
|
+
class="typed-member-input"
|
|
3610
|
+
.value="${this.typedMemberValues[tm.axisId] || ""}"
|
|
3611
|
+
@input="${(e2) => this._handleCrossRoleTypedMemberChange(e2, tm.axisId)}"
|
|
3612
|
+
?disabled="${this.disabled}"
|
|
3613
|
+
/>
|
|
3614
|
+
</div>
|
|
3615
|
+
`)}
|
|
3616
|
+
` : ""}
|
|
3501
3617
|
</div>
|
|
3502
3618
|
</div>
|
|
3503
3619
|
</div>
|
|
@@ -3686,7 +3802,7 @@ JupiterFormField.styles = css`
|
|
|
3686
3802
|
border-radius: 8px;
|
|
3687
3803
|
padding: 24px;
|
|
3688
3804
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
|
3689
|
-
max-width:
|
|
3805
|
+
max-width: 800px;
|
|
3690
3806
|
width: 90%;
|
|
3691
3807
|
}
|
|
3692
3808
|
|
|
@@ -3730,7 +3846,7 @@ JupiterFormField.styles = css`
|
|
|
3730
3846
|
|
|
3731
3847
|
.period-popup-content .period-controls {
|
|
3732
3848
|
display: grid;
|
|
3733
|
-
grid-template-columns:
|
|
3849
|
+
grid-template-columns: 200px 1fr;
|
|
3734
3850
|
gap: 12px;
|
|
3735
3851
|
align-items: center;
|
|
3736
3852
|
margin-top: 0;
|
|
@@ -3741,6 +3857,8 @@ JupiterFormField.styles = css`
|
|
|
3741
3857
|
font-weight: 500;
|
|
3742
3858
|
color: var(--jupiter-text-primary, #333);
|
|
3743
3859
|
text-align: right;
|
|
3860
|
+
white-space: normal;
|
|
3861
|
+
word-break: break-word;
|
|
3744
3862
|
}
|
|
3745
3863
|
|
|
3746
3864
|
.period-popup-content .period-controls input[type="date"] {
|
|
@@ -3778,22 +3896,44 @@ JupiterFormField.styles = css`
|
|
|
3778
3896
|
cursor: not-allowed;
|
|
3779
3897
|
}
|
|
3780
3898
|
|
|
3899
|
+
.period-popup-content .period-controls .typed-member-input {
|
|
3900
|
+
flex: 1;
|
|
3901
|
+
padding: 6px 8px;
|
|
3902
|
+
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
3903
|
+
border-radius: 4px;
|
|
3904
|
+
font-size: 13px;
|
|
3905
|
+
font-family: inherit;
|
|
3906
|
+
background: var(--jupiter-input-background, #fff);
|
|
3907
|
+
}
|
|
3908
|
+
|
|
3909
|
+
.period-popup-content .period-controls .typed-member-input:focus {
|
|
3910
|
+
outline: none;
|
|
3911
|
+
border-color: var(--jupiter-primary-color, #1976d2);
|
|
3912
|
+
box-shadow: 0 0 0 2px var(--jupiter-primary-color-light, rgba(25, 118, 210, 0.2));
|
|
3913
|
+
}
|
|
3914
|
+
|
|
3915
|
+
.period-popup-content .period-controls .typed-member-input:disabled {
|
|
3916
|
+
background: var(--jupiter-disabled-background, #f5f5f5);
|
|
3917
|
+
color: var(--jupiter-disabled-text, #999);
|
|
3918
|
+
cursor: not-allowed;
|
|
3919
|
+
}
|
|
3920
|
+
|
|
3781
3921
|
.field-input {
|
|
3782
3922
|
width: 100%;
|
|
3783
3923
|
padding: 6px 8px; /* Reduced padding for table cells */
|
|
3784
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
3924
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
3785
3925
|
border-radius: 4px;
|
|
3786
3926
|
font-size: 13px; /* Slightly smaller font for table */
|
|
3787
3927
|
font-family: inherit;
|
|
3788
|
-
background:
|
|
3789
|
-
color: var(--jupiter-text-primary, #333);
|
|
3928
|
+
background: transparent !important;
|
|
3929
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
3790
3930
|
box-sizing: border-box;
|
|
3791
3931
|
}
|
|
3792
3932
|
|
|
3793
3933
|
.field-input:focus {
|
|
3794
3934
|
outline: none;
|
|
3795
|
-
border-color: var(--jupiter-primary-color, #1976d2);
|
|
3796
|
-
box-shadow: 0 0 0 2px var(--jupiter-primary-color-light, rgba(25, 118, 210, 0.2));
|
|
3935
|
+
border-color: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
3936
|
+
box-shadow: 0 0 0 2px var(--boxShadowColor, var(--jupiter-primary-color-light, rgba(25, 118, 210, 0.2)));
|
|
3797
3937
|
}
|
|
3798
3938
|
|
|
3799
3939
|
.field-input:disabled {
|
|
@@ -3964,6 +4104,9 @@ __decorateClass$5([
|
|
|
3964
4104
|
__decorateClass$5([
|
|
3965
4105
|
n2({ type: String })
|
|
3966
4106
|
], JupiterFormField.prototype, "unit", 2);
|
|
4107
|
+
__decorateClass$5([
|
|
4108
|
+
n2({ type: Object })
|
|
4109
|
+
], JupiterFormField.prototype, "typedMemberValues", 2);
|
|
3967
4110
|
__decorateClass$5([
|
|
3968
4111
|
r()
|
|
3969
4112
|
], JupiterFormField.prototype, "_errors", 2);
|
|
@@ -4005,6 +4148,9 @@ let JupiterConceptTree = class extends LitElement {
|
|
|
4005
4148
|
this.locale = "en-US";
|
|
4006
4149
|
this.expandedConcepts = /* @__PURE__ */ new Set();
|
|
4007
4150
|
this.mode = "inputForm";
|
|
4151
|
+
this.typedMemberData = {};
|
|
4152
|
+
this.showAddButton = false;
|
|
4153
|
+
this.showRemoveButton = false;
|
|
4008
4154
|
this._expanded = true;
|
|
4009
4155
|
}
|
|
4010
4156
|
connectedCallback() {
|
|
@@ -4042,6 +4188,20 @@ let JupiterConceptTree = class extends LitElement {
|
|
|
4042
4188
|
bubbles: true
|
|
4043
4189
|
}));
|
|
4044
4190
|
}
|
|
4191
|
+
_handleAddRepeat() {
|
|
4192
|
+
this.dispatchEvent(new CustomEvent("add-concept-repeat", {
|
|
4193
|
+
detail: { conceptId: this.concept.id },
|
|
4194
|
+
bubbles: true,
|
|
4195
|
+
composed: true
|
|
4196
|
+
}));
|
|
4197
|
+
}
|
|
4198
|
+
_handleRemoveRepeat() {
|
|
4199
|
+
this.dispatchEvent(new CustomEvent("remove-concept-repeat", {
|
|
4200
|
+
detail: { conceptId: this.concept.id },
|
|
4201
|
+
bubbles: true,
|
|
4202
|
+
composed: true
|
|
4203
|
+
}));
|
|
4204
|
+
}
|
|
4045
4205
|
_handlePeriodChange(event) {
|
|
4046
4206
|
console.log(`🌲 [ConceptTree] Received period-change event:`, event.detail);
|
|
4047
4207
|
event.stopPropagation();
|
|
@@ -4066,11 +4226,22 @@ let JupiterConceptTree = class extends LitElement {
|
|
|
4066
4226
|
@click="${this._toggleExpanded}">
|
|
4067
4227
|
${hasChildren ? "▶" : ""}
|
|
4068
4228
|
</div>
|
|
4069
|
-
<div class="concept-label"
|
|
4229
|
+
<div class="concept-label"
|
|
4070
4230
|
@click="${this._toggleExpanded}"
|
|
4071
4231
|
title="${this.concept.id}${this.concept.description ? " - " + this.concept.description : ""}">
|
|
4072
4232
|
${this.concept.label}
|
|
4073
4233
|
</div>
|
|
4234
|
+
${this.concept.balance ? html`
|
|
4235
|
+
<div class="concept-balance ${this.concept.balance}">${this.concept.balance}</div>
|
|
4236
|
+
` : ""}
|
|
4237
|
+
${this.showAddButton ? html`
|
|
4238
|
+
<button class="repeat-btn" type="button" title="Add row"
|
|
4239
|
+
@click="${this._handleAddRepeat}">+</button>
|
|
4240
|
+
` : ""}
|
|
4241
|
+
${this.showRemoveButton ? html`
|
|
4242
|
+
<button class="repeat-btn remove" type="button" title="Remove row"
|
|
4243
|
+
@click="${this._handleRemoveRepeat}">−</button>
|
|
4244
|
+
` : ""}
|
|
4074
4245
|
</div>
|
|
4075
4246
|
</td>
|
|
4076
4247
|
|
|
@@ -4102,6 +4273,7 @@ let JupiterConceptTree = class extends LitElement {
|
|
|
4102
4273
|
.masterData="${this.masterData}"
|
|
4103
4274
|
.facts="${this.facts}"
|
|
4104
4275
|
.column="${column2}"
|
|
4276
|
+
.typedMemberValues="${this.typedMemberData[`${this.concept.id}__${column2.id}`] || {}}"
|
|
4105
4277
|
@field-change="${this._handleFieldChange}"
|
|
4106
4278
|
@period-change="${this._handlePeriodChange}"
|
|
4107
4279
|
></jupiter-form-field>
|
|
@@ -4121,7 +4293,7 @@ JupiterConceptTree.styles = css`
|
|
|
4121
4293
|
.concept-name-cell {
|
|
4122
4294
|
vertical-align: top;
|
|
4123
4295
|
padding: 2px 4px;
|
|
4124
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
4296
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
4125
4297
|
border-bottom: none;
|
|
4126
4298
|
background: var(--jupiter-concept-background, #f8f9fa);
|
|
4127
4299
|
position: sticky;
|
|
@@ -4133,12 +4305,13 @@ JupiterConceptTree.styles = css`
|
|
|
4133
4305
|
}
|
|
4134
4306
|
|
|
4135
4307
|
.concept-name-cell.abstract {
|
|
4136
|
-
background: var(--jupiter-abstract-background, #f0f2f5);
|
|
4308
|
+
background: var(--bg-color-1, var(--jupiter-abstract-background, #f0f2f5));
|
|
4137
4309
|
font-weight: 600;
|
|
4310
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4138
4311
|
}
|
|
4139
4312
|
|
|
4140
4313
|
.concept-name-cell.leaf {
|
|
4141
|
-
background: var(--jupiter-leaf-background, #fff);
|
|
4314
|
+
background: var(--bg-color-2, var(--jupiter-leaf-background, #fff));
|
|
4142
4315
|
font-weight: 400;
|
|
4143
4316
|
}
|
|
4144
4317
|
|
|
@@ -4179,7 +4352,7 @@ JupiterConceptTree.styles = css`
|
|
|
4179
4352
|
|
|
4180
4353
|
.concept-label {
|
|
4181
4354
|
flex: 1;
|
|
4182
|
-
color: var(--jupiter-text-primary, #333);
|
|
4355
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4183
4356
|
cursor: pointer;
|
|
4184
4357
|
word-wrap: break-word;
|
|
4185
4358
|
overflow-wrap: break-word;
|
|
@@ -4188,12 +4361,35 @@ JupiterConceptTree.styles = css`
|
|
|
4188
4361
|
min-width: 0; /* Allows flex item to shrink below content size */
|
|
4189
4362
|
}
|
|
4190
4363
|
|
|
4364
|
+
.concept-balance {
|
|
4365
|
+
margin-left: 8px;
|
|
4366
|
+
font-size: 11px;
|
|
4367
|
+
font-weight: 600;
|
|
4368
|
+
padding: 2px 6px;
|
|
4369
|
+
border-radius: 3px;
|
|
4370
|
+
text-transform: uppercase;
|
|
4371
|
+
letter-spacing: 0.5px;
|
|
4372
|
+
flex-shrink: 0;
|
|
4373
|
+
}
|
|
4374
|
+
|
|
4375
|
+
.concept-balance.debit {
|
|
4376
|
+
color: #d32f2f;
|
|
4377
|
+
background: rgba(211, 47, 47, 0.1);
|
|
4378
|
+
border: 1px solid rgba(211, 47, 47, 0.3);
|
|
4379
|
+
}
|
|
4380
|
+
|
|
4381
|
+
.concept-balance.credit {
|
|
4382
|
+
color: #388e3c;
|
|
4383
|
+
background: rgba(56, 142, 60, 0.1);
|
|
4384
|
+
border: 1px solid rgba(56, 142, 60, 0.3);
|
|
4385
|
+
}
|
|
4386
|
+
|
|
4191
4387
|
.field-cell {
|
|
4192
4388
|
vertical-align: middle;
|
|
4193
4389
|
padding: 2px 6px;
|
|
4194
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
4390
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
4195
4391
|
border-bottom: none;
|
|
4196
|
-
background: var(--jupiter-cell-background, #fff);
|
|
4392
|
+
background: var(--bg-color-2, var(--jupiter-cell-background, #fff));
|
|
4197
4393
|
min-height: 28px;
|
|
4198
4394
|
text-align: center;
|
|
4199
4395
|
min-width: 180px;
|
|
@@ -4201,11 +4397,11 @@ JupiterConceptTree.styles = css`
|
|
|
4201
4397
|
}
|
|
4202
4398
|
|
|
4203
4399
|
.field-cell.empty {
|
|
4204
|
-
background: var(--jupiter-empty-cell-background, #f8f9fa);
|
|
4400
|
+
background: var(--bg-color-2, var(--jupiter-empty-cell-background, #f8f9fa));
|
|
4205
4401
|
}
|
|
4206
4402
|
|
|
4207
4403
|
.field-cell.abstract-row {
|
|
4208
|
-
background: var(--jupiter-abstract-cell-background, #f0f2f5);
|
|
4404
|
+
background: var(--bg-color-2, var(--jupiter-abstract-cell-background, #f0f2f5));
|
|
4209
4405
|
}
|
|
4210
4406
|
|
|
4211
4407
|
/* Children are rendered as separate table rows, not nested */
|
|
@@ -4213,6 +4409,38 @@ JupiterConceptTree.styles = css`
|
|
|
4213
4409
|
display: none;
|
|
4214
4410
|
}
|
|
4215
4411
|
|
|
4412
|
+
.repeat-btn {
|
|
4413
|
+
flex-shrink: 0;
|
|
4414
|
+
margin-left: 4px;
|
|
4415
|
+
width: 20px;
|
|
4416
|
+
height: 20px;
|
|
4417
|
+
padding: 0;
|
|
4418
|
+
border-radius: 3px;
|
|
4419
|
+
border: 1px solid var(--jupiter-primary-color, #1976d2);
|
|
4420
|
+
color: var(--jupiter-primary-color, #1976d2);
|
|
4421
|
+
background: transparent;
|
|
4422
|
+
cursor: pointer;
|
|
4423
|
+
font-size: 14px;
|
|
4424
|
+
line-height: 1;
|
|
4425
|
+
display: flex;
|
|
4426
|
+
align-items: center;
|
|
4427
|
+
justify-content: center;
|
|
4428
|
+
}
|
|
4429
|
+
|
|
4430
|
+
.repeat-btn:hover {
|
|
4431
|
+
background: var(--jupiter-primary-color, #1976d2);
|
|
4432
|
+
color: #fff;
|
|
4433
|
+
}
|
|
4434
|
+
|
|
4435
|
+
.repeat-btn.remove {
|
|
4436
|
+
border-color: var(--jupiter-error-color, #d32f2f);
|
|
4437
|
+
color: var(--jupiter-error-color, #d32f2f);
|
|
4438
|
+
}
|
|
4439
|
+
|
|
4440
|
+
.repeat-btn.remove:hover {
|
|
4441
|
+
background: var(--jupiter-error-color, #d32f2f);
|
|
4442
|
+
color: #fff;
|
|
4443
|
+
}
|
|
4216
4444
|
|
|
4217
4445
|
`;
|
|
4218
4446
|
__decorateClass$4([
|
|
@@ -4254,6 +4482,15 @@ __decorateClass$4([
|
|
|
4254
4482
|
__decorateClass$4([
|
|
4255
4483
|
n2({ type: Array })
|
|
4256
4484
|
], JupiterConceptTree.prototype, "facts", 2);
|
|
4485
|
+
__decorateClass$4([
|
|
4486
|
+
n2({ type: Object })
|
|
4487
|
+
], JupiterConceptTree.prototype, "typedMemberData", 2);
|
|
4488
|
+
__decorateClass$4([
|
|
4489
|
+
n2({ type: Boolean })
|
|
4490
|
+
], JupiterConceptTree.prototype, "showAddButton", 2);
|
|
4491
|
+
__decorateClass$4([
|
|
4492
|
+
n2({ type: Boolean })
|
|
4493
|
+
], JupiterConceptTree.prototype, "showRemoveButton", 2);
|
|
4257
4494
|
__decorateClass$4([
|
|
4258
4495
|
r()
|
|
4259
4496
|
], JupiterConceptTree.prototype, "_expanded", 2);
|
|
@@ -4575,7 +4812,7 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4575
4812
|
}
|
|
4576
4813
|
|
|
4577
4814
|
.dialog {
|
|
4578
|
-
background:
|
|
4815
|
+
background: var(--bg-color-2, var(--jupiter-card-background, #fff));
|
|
4579
4816
|
border-radius: 8px;
|
|
4580
4817
|
padding: 24px;
|
|
4581
4818
|
min-width: 400px;
|
|
@@ -4600,7 +4837,7 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4600
4837
|
.dialog-title {
|
|
4601
4838
|
font-size: 20px;
|
|
4602
4839
|
font-weight: 600;
|
|
4603
|
-
color: var(--jupiter-text-primary, #333);
|
|
4840
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4604
4841
|
margin: 0 0 8px 0;
|
|
4605
4842
|
}
|
|
4606
4843
|
|
|
@@ -4634,7 +4871,7 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4634
4871
|
display: block;
|
|
4635
4872
|
font-weight: 500;
|
|
4636
4873
|
margin-bottom: 6px;
|
|
4637
|
-
color: var(--jupiter-text-primary, #333);
|
|
4874
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4638
4875
|
font-size: 14px;
|
|
4639
4876
|
}
|
|
4640
4877
|
|
|
@@ -4647,18 +4884,20 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4647
4884
|
width: 100%;
|
|
4648
4885
|
box-sizing: border-box;
|
|
4649
4886
|
padding: 10px 12px;
|
|
4650
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
4887
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
4651
4888
|
border-radius: 4px;
|
|
4652
4889
|
font-size: 14px;
|
|
4653
4890
|
font-family: inherit;
|
|
4654
4891
|
transition: border-color 0.2s ease;
|
|
4892
|
+
background-color: transparent;
|
|
4893
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
4655
4894
|
}
|
|
4656
4895
|
|
|
4657
|
-
.form-input:focus {
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
}
|
|
4896
|
+
// .form-input:focus {
|
|
4897
|
+
// outline: none;
|
|
4898
|
+
// border-color: var(--jupiter-primary-color, #007bff);
|
|
4899
|
+
// box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
|
|
4900
|
+
// }
|
|
4662
4901
|
|
|
4663
4902
|
select.form-input {
|
|
4664
4903
|
cursor: pointer;
|
|
@@ -4686,27 +4925,28 @@ JupiterAddColumnDialog.styles = css`
|
|
|
4686
4925
|
}
|
|
4687
4926
|
|
|
4688
4927
|
.btn-cancel {
|
|
4689
|
-
|
|
4690
|
-
|
|
4928
|
+
color: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
4929
|
+
border: 1px solid var(--buttonBgColor, var(--jupiter-primary-color, #1976d2)) !important;
|
|
4930
|
+
background: transparent;
|
|
4691
4931
|
}
|
|
4692
4932
|
|
|
4693
|
-
.btn-cancel:hover {
|
|
4694
|
-
|
|
4695
|
-
}
|
|
4933
|
+
// .btn-cancel:hover {
|
|
4934
|
+
// background: var(--jupiter-neutral-background-hover, #e0e0e0);
|
|
4935
|
+
// }
|
|
4696
4936
|
|
|
4697
4937
|
.btn-primary {
|
|
4698
|
-
background: var(--jupiter-primary-color, #
|
|
4699
|
-
color: white;
|
|
4938
|
+
background: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
4939
|
+
color: var(--buttonTextColor, white);
|
|
4700
4940
|
}
|
|
4701
4941
|
|
|
4702
|
-
.btn-primary:hover {
|
|
4703
|
-
|
|
4704
|
-
}
|
|
4942
|
+
// .btn-primary:hover {
|
|
4943
|
+
// background: var(--jupiter-primary-color-dark, #5a6fd8);
|
|
4944
|
+
// }
|
|
4705
4945
|
|
|
4706
|
-
.btn-primary:disabled {
|
|
4707
|
-
|
|
4708
|
-
|
|
4709
|
-
}
|
|
4946
|
+
// .btn-primary:disabled {
|
|
4947
|
+
// background: var(--jupiter-disabled-background, #ccc);
|
|
4948
|
+
// cursor: not-allowed;
|
|
4949
|
+
// }
|
|
4710
4950
|
|
|
4711
4951
|
/* Dimension Selection Styles */
|
|
4712
4952
|
.dimensions-section {
|
|
@@ -4862,6 +5102,7 @@ let JupiterFormSection = class extends LitElement {
|
|
|
4862
5102
|
this.periodData = {};
|
|
4863
5103
|
this.unitData = {};
|
|
4864
5104
|
this.typedMemberData = {};
|
|
5105
|
+
this.repeatCounts = {};
|
|
4865
5106
|
this.defaultUnits = [];
|
|
4866
5107
|
this.disabled = false;
|
|
4867
5108
|
this.collapsible = true;
|
|
@@ -5122,6 +5363,70 @@ let JupiterFormSection = class extends LitElement {
|
|
|
5122
5363
|
bubbles: true
|
|
5123
5364
|
}));
|
|
5124
5365
|
}
|
|
5366
|
+
_handleAddRepeat(event) {
|
|
5367
|
+
event.stopPropagation();
|
|
5368
|
+
this.dispatchEvent(new CustomEvent("add-concept-repeat", {
|
|
5369
|
+
detail: event.detail,
|
|
5370
|
+
bubbles: true
|
|
5371
|
+
}));
|
|
5372
|
+
}
|
|
5373
|
+
_handleRemoveRepeat(event) {
|
|
5374
|
+
event.stopPropagation();
|
|
5375
|
+
this.dispatchEvent(new CustomEvent("remove-concept-repeat", {
|
|
5376
|
+
detail: event.detail,
|
|
5377
|
+
bubbles: true
|
|
5378
|
+
}));
|
|
5379
|
+
}
|
|
5380
|
+
/** Build the list of <tr> template results for a single flattened concept, including any repeat instances. */
|
|
5381
|
+
_renderConceptRows(concept) {
|
|
5382
|
+
var _a;
|
|
5383
|
+
const isRepeatable = this.mode !== "readonly" && !concept.abstract && ((_a = concept.fields) == null ? void 0 : _a.some((f2) => {
|
|
5384
|
+
var _a2;
|
|
5385
|
+
return ((_a2 = f2.crossRoleTypedMembers) == null ? void 0 : _a2.length) > 0;
|
|
5386
|
+
}));
|
|
5387
|
+
const repeatCount = isRepeatable ? this.repeatCounts[concept.id] || 0 : 0;
|
|
5388
|
+
const sharedProps = (instanceConcept, opts) => html`
|
|
5389
|
+
<jupiter-concept-tree
|
|
5390
|
+
.concept="${instanceConcept}"
|
|
5391
|
+
.columns="${this.columns}"
|
|
5392
|
+
.datatypes="${this.datatypes}"
|
|
5393
|
+
.formData="${this.formData}"
|
|
5394
|
+
.periodData="${this.periodData}"
|
|
5395
|
+
.unitData="${this.unitData}"
|
|
5396
|
+
.defaultUnits="${this.defaultUnits}"
|
|
5397
|
+
.disabled="${this.disabled}"
|
|
5398
|
+
.locale="${this.locale}"
|
|
5399
|
+
.expandedConcepts="${this._expandedConcepts}"
|
|
5400
|
+
.mode="${this.mode}"
|
|
5401
|
+
.masterData="${this.masterData}"
|
|
5402
|
+
.facts="${instanceConcept.facts}"
|
|
5403
|
+
.typedMemberData="${this.typedMemberData}"
|
|
5404
|
+
.showAddButton="${opts.showAdd || false}"
|
|
5405
|
+
.showRemoveButton="${opts.showRemove || false}"
|
|
5406
|
+
@field-change="${this._handleFieldChange}"
|
|
5407
|
+
@period-change="${this._handlePeriodChange}"
|
|
5408
|
+
@concept-expand="${this._handleConceptExpand}"
|
|
5409
|
+
@add-concept-repeat="${this._handleAddRepeat}"
|
|
5410
|
+
@remove-concept-repeat="${this._handleRemoveRepeat}"
|
|
5411
|
+
></jupiter-concept-tree>
|
|
5412
|
+
`;
|
|
5413
|
+
const rows = [html`
|
|
5414
|
+
<tr>${sharedProps(concept, { showAdd: isRepeatable })}</tr>
|
|
5415
|
+
`];
|
|
5416
|
+
for (let n3 = 1; n3 <= repeatCount; n3++) {
|
|
5417
|
+
const instanceConcept = {
|
|
5418
|
+
...concept,
|
|
5419
|
+
id: `${concept.id}__repeat_${n3}`,
|
|
5420
|
+
label: "",
|
|
5421
|
+
children: [],
|
|
5422
|
+
abstract: false
|
|
5423
|
+
};
|
|
5424
|
+
rows.push(html`
|
|
5425
|
+
<tr>${sharedProps(instanceConcept, { showRemove: true })}</tr>
|
|
5426
|
+
`);
|
|
5427
|
+
}
|
|
5428
|
+
return rows;
|
|
5429
|
+
}
|
|
5125
5430
|
render() {
|
|
5126
5431
|
if (!this.section.concepts || this.section.concepts.length === 0) {
|
|
5127
5432
|
return html`
|
|
@@ -5242,28 +5547,7 @@ let JupiterFormSection = class extends LitElement {
|
|
|
5242
5547
|
</tr>
|
|
5243
5548
|
</thead>
|
|
5244
5549
|
<tbody class="table-body">
|
|
5245
|
-
${this._flattenConcepts(this.section.concepts, this._expandedConcepts).filter((concept) => this.mode !== "readonly" || !this._isConceptRowBlank(concept)).
|
|
5246
|
-
<tr>
|
|
5247
|
-
<jupiter-concept-tree
|
|
5248
|
-
.concept="${concept}"
|
|
5249
|
-
.columns="${this.columns}"
|
|
5250
|
-
.datatypes="${this.datatypes}"
|
|
5251
|
-
.formData="${this.formData}"
|
|
5252
|
-
.periodData="${this.periodData}"
|
|
5253
|
-
.unitData="${this.unitData}"
|
|
5254
|
-
.defaultUnits="${this.defaultUnits}"
|
|
5255
|
-
.disabled="${this.disabled}"
|
|
5256
|
-
.locale="${this.locale}"
|
|
5257
|
-
.expandedConcepts="${this._expandedConcepts}"
|
|
5258
|
-
.mode="${this.mode}"
|
|
5259
|
-
.masterData="${this.masterData}"
|
|
5260
|
-
.facts="${concept.facts}"
|
|
5261
|
-
@field-change="${this._handleFieldChange}"
|
|
5262
|
-
@period-change="${this._handlePeriodChange}"
|
|
5263
|
-
@concept-expand="${this._handleConceptExpand}"
|
|
5264
|
-
></jupiter-concept-tree>
|
|
5265
|
-
</tr>
|
|
5266
|
-
`)}
|
|
5550
|
+
${this._flattenConcepts(this.section.concepts, this._expandedConcepts).filter((concept) => this.mode !== "readonly" || !this._isConceptRowBlank(concept)).flatMap((concept) => this._renderConceptRows(concept))}
|
|
5267
5551
|
</tbody>
|
|
5268
5552
|
</table>
|
|
5269
5553
|
</div>
|
|
@@ -5384,13 +5668,20 @@ JupiterFormSection.styles = css`
|
|
|
5384
5668
|
/* Table row - no special display needed */
|
|
5385
5669
|
}
|
|
5386
5670
|
|
|
5671
|
+
.header-cell:first-child {
|
|
5672
|
+
border-radius: 6px 0 0 0;
|
|
5673
|
+
}
|
|
5674
|
+
.header-cell:last-child {
|
|
5675
|
+
border-radius: 0 6px 0 0;
|
|
5676
|
+
}
|
|
5677
|
+
|
|
5387
5678
|
.header-cell {
|
|
5388
5679
|
padding: 8px 12px;
|
|
5389
5680
|
text-align: left;
|
|
5390
5681
|
font-weight: 600;
|
|
5391
|
-
color: var(--jupiter-text-primary, #333);
|
|
5392
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
5393
|
-
background: var(--jupiter-header-background, #f8f9fa);
|
|
5682
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
5683
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
5684
|
+
background: var(--bg-color-1, var(--jupiter-header-background, #f8f9fa));
|
|
5394
5685
|
min-width: 180px;
|
|
5395
5686
|
width: 180px;
|
|
5396
5687
|
font-size: 14px;
|
|
@@ -5562,6 +5853,9 @@ __decorateClass$2([
|
|
|
5562
5853
|
__decorateClass$2([
|
|
5563
5854
|
n2({ type: Object })
|
|
5564
5855
|
], JupiterFormSection.prototype, "typedMemberData", 2);
|
|
5856
|
+
__decorateClass$2([
|
|
5857
|
+
n2({ type: Object })
|
|
5858
|
+
], JupiterFormSection.prototype, "repeatCounts", 2);
|
|
5565
5859
|
__decorateClass$2([
|
|
5566
5860
|
n2({ type: Array })
|
|
5567
5861
|
], JupiterFormSection.prototype, "defaultUnits", 2);
|
|
@@ -6594,24 +6888,25 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6594
6888
|
|
|
6595
6889
|
.dialog-header {
|
|
6596
6890
|
padding: 20px 24px 16px;
|
|
6597
|
-
border-bottom: 1px solid var(--jupiter-border-color, #ddd);
|
|
6891
|
+
border-bottom: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
6598
6892
|
display: flex;
|
|
6599
6893
|
align-items: center;
|
|
6600
6894
|
gap: 12px;
|
|
6895
|
+
background: var(--bg-color-1, var(--jupiter-header-background, #f8f9fa));
|
|
6601
6896
|
}
|
|
6602
6897
|
|
|
6603
6898
|
.dialog-title {
|
|
6604
6899
|
font-size: 18px;
|
|
6605
6900
|
font-weight: 600;
|
|
6606
6901
|
margin: 0;
|
|
6607
|
-
color: var(--jupiter-text-primary, #333);
|
|
6902
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
6608
6903
|
flex: 1;
|
|
6609
6904
|
}
|
|
6610
6905
|
|
|
6611
6906
|
.filter-icon {
|
|
6612
6907
|
width: 20px;
|
|
6613
6908
|
height: 20px;
|
|
6614
|
-
fill: var(--jupiter-primary-color, #1976d2);
|
|
6909
|
+
fill: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
6615
6910
|
}
|
|
6616
6911
|
|
|
6617
6912
|
.close-button {
|
|
@@ -6620,23 +6915,24 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6620
6915
|
font-size: 24px;
|
|
6621
6916
|
cursor: pointer;
|
|
6622
6917
|
padding: 4px;
|
|
6623
|
-
color: var(--jupiter-text-secondary, #666);
|
|
6918
|
+
color: var(--primaryTextColor, var(--jupiter-text-secondary, #666));
|
|
6624
6919
|
border-radius: 4px;
|
|
6625
6920
|
transition: background-color 0.2s ease;
|
|
6626
6921
|
}
|
|
6627
6922
|
|
|
6628
|
-
.close-button:hover {
|
|
6629
|
-
|
|
6630
|
-
}
|
|
6923
|
+
// .close-button:hover {
|
|
6924
|
+
// background: var(--jupiter-hover-background, #f5f5f5);
|
|
6925
|
+
// }
|
|
6631
6926
|
|
|
6632
6927
|
.dialog-content {
|
|
6928
|
+
background: var(--bg-color-2, var(--jupiter-form-content-background, #fff));
|
|
6633
6929
|
flex: 1;
|
|
6634
6930
|
overflow-y: auto;
|
|
6635
6931
|
padding: 20px 24px;
|
|
6636
6932
|
}
|
|
6637
6933
|
|
|
6638
6934
|
.description {
|
|
6639
|
-
color: var(--jupiter-text-secondary, #666);
|
|
6935
|
+
color: var(--primaryTextColor, var(--secondaryTextColor, var(--jupiter-text-secondary, #666))) ;
|
|
6640
6936
|
font-size: 14px;
|
|
6641
6937
|
margin: 0 0 20px 0;
|
|
6642
6938
|
line-height: 1.5;
|
|
@@ -6655,25 +6951,25 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6655
6951
|
}
|
|
6656
6952
|
|
|
6657
6953
|
.search-input {
|
|
6658
|
-
width:
|
|
6954
|
+
width: stretch;
|
|
6659
6955
|
padding: 10px 40px 10px 12px;
|
|
6660
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
6956
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
6661
6957
|
border-radius: 4px;
|
|
6662
6958
|
font-size: 14px;
|
|
6663
6959
|
font-family: inherit;
|
|
6664
|
-
background:
|
|
6665
|
-
color: var(--jupiter-text-primary, #333);
|
|
6960
|
+
background: transparent;
|
|
6961
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
6666
6962
|
transition: border-color 0.2s ease;
|
|
6667
6963
|
}
|
|
6668
6964
|
|
|
6669
|
-
.search-input:focus {
|
|
6670
|
-
|
|
6671
|
-
|
|
6672
|
-
|
|
6673
|
-
}
|
|
6965
|
+
// .search-input:focus {
|
|
6966
|
+
// outline: none;
|
|
6967
|
+
// border-color: var(--jupiter-primary-color, #1976d2);
|
|
6968
|
+
// box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.1);
|
|
6969
|
+
// }
|
|
6674
6970
|
|
|
6675
6971
|
.search-input::placeholder {
|
|
6676
|
-
color: var(--jupiter-text-secondary, #666);
|
|
6972
|
+
color: var(--primaryTextColor, var(--jupiter-text-secondary, #666));
|
|
6677
6973
|
}
|
|
6678
6974
|
|
|
6679
6975
|
.search-icon {
|
|
@@ -6731,8 +7027,8 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6731
7027
|
|
|
6732
7028
|
.selection-control {
|
|
6733
7029
|
background: none;
|
|
6734
|
-
border: 1px solid var(--jupiter-primary-color, #1976d2);
|
|
6735
|
-
color: var(--jupiter-primary-color, #1976d2);
|
|
7030
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
7031
|
+
color: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
6736
7032
|
padding: 6px 12px;
|
|
6737
7033
|
border-radius: 4px;
|
|
6738
7034
|
font-size: 12px;
|
|
@@ -6741,7 +7037,7 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6741
7037
|
}
|
|
6742
7038
|
|
|
6743
7039
|
.selection-control:hover {
|
|
6744
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
7040
|
+
background: var(--menuBgColorLighter, var(--jupiter-primary-color, #1976d2));
|
|
6745
7041
|
color: white;
|
|
6746
7042
|
}
|
|
6747
7043
|
|
|
@@ -6751,7 +7047,7 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6751
7047
|
gap: 8px;
|
|
6752
7048
|
max-height: 300px;
|
|
6753
7049
|
overflow-y: auto;
|
|
6754
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
7050
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
6755
7051
|
border-radius: 4px;
|
|
6756
7052
|
padding: 12px;
|
|
6757
7053
|
}
|
|
@@ -6766,13 +7062,17 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6766
7062
|
}
|
|
6767
7063
|
|
|
6768
7064
|
.role-item:hover {
|
|
6769
|
-
background: var(--jupiter-hover-background, #f5f5f5);
|
|
7065
|
+
background: var(--menuBgColorLighter, var(--jupiter-hover-background, #f5f5f5));
|
|
6770
7066
|
}
|
|
6771
7067
|
|
|
6772
7068
|
.role-checkbox {
|
|
6773
7069
|
margin-top: 2px;
|
|
6774
7070
|
cursor: pointer;
|
|
6775
7071
|
}
|
|
7072
|
+
|
|
7073
|
+
.role-info * {
|
|
7074
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333)) !important;
|
|
7075
|
+
}
|
|
6776
7076
|
|
|
6777
7077
|
.role-info {
|
|
6778
7078
|
flex: 1;
|
|
@@ -6802,15 +7102,15 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6802
7102
|
.period-controls {
|
|
6803
7103
|
margin-top: 8px;
|
|
6804
7104
|
padding: 8px;
|
|
6805
|
-
background: var(--jupiter-background-light, #f8f9fa);
|
|
7105
|
+
background: var(--bg-color-1, var(--jupiter-background-light, #f8f9fa));
|
|
6806
7106
|
border-radius: 4px;
|
|
6807
|
-
border: 1px solid var(--jupiter-border-color, #e0e0e0);
|
|
7107
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #e0e0e0));
|
|
6808
7108
|
}
|
|
6809
7109
|
|
|
6810
7110
|
.period-controls-label {
|
|
6811
7111
|
font-size: 12px;
|
|
6812
7112
|
font-weight: 600;
|
|
6813
|
-
color: var(--jupiter-text-primary, #333);
|
|
7113
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
6814
7114
|
margin: 0 0 6px 0;
|
|
6815
7115
|
}
|
|
6816
7116
|
|
|
@@ -6938,11 +7238,11 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6938
7238
|
|
|
6939
7239
|
.dialog-actions {
|
|
6940
7240
|
padding: 16px 24px;
|
|
6941
|
-
border-top: 1px solid var(--jupiter-border-color, #ddd);
|
|
7241
|
+
border-top: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
6942
7242
|
display: flex;
|
|
6943
7243
|
gap: 12px;
|
|
6944
7244
|
justify-content: flex-end;
|
|
6945
|
-
background: var(--jupiter-form-actions-background, #f8f9fa);
|
|
7245
|
+
background: var(--bg-color-2, var(--jupiter-form-actions-background, #f8f9fa));
|
|
6946
7246
|
}
|
|
6947
7247
|
|
|
6948
7248
|
.dialog-actions button {
|
|
@@ -6956,23 +7256,23 @@ JupiterFilterRolesDialog.styles = css`
|
|
|
6956
7256
|
}
|
|
6957
7257
|
|
|
6958
7258
|
.btn-primary {
|
|
6959
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
6960
|
-
color: white;
|
|
7259
|
+
background: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
7260
|
+
color: var(--buttonTextColor, white);
|
|
6961
7261
|
}
|
|
6962
7262
|
|
|
6963
|
-
.btn-primary:hover:not(:disabled) {
|
|
6964
|
-
|
|
6965
|
-
}
|
|
7263
|
+
// .btn-primary:hover:not(:disabled) {
|
|
7264
|
+
// background: var(--jupiter-primary-color-dark, #1565c0);
|
|
7265
|
+
// }
|
|
6966
7266
|
|
|
6967
7267
|
.btn-secondary {
|
|
7268
|
+
color: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
7269
|
+
border: 1px solid var(--buttonBgColor, var(--jupiter-primary-color, #1976d2)) !important;
|
|
6968
7270
|
background: transparent;
|
|
6969
|
-
color: var(--jupiter-text-secondary, #666);
|
|
6970
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
6971
7271
|
}
|
|
6972
7272
|
|
|
6973
|
-
.btn-secondary:hover:not(:disabled) {
|
|
6974
|
-
|
|
6975
|
-
}
|
|
7273
|
+
// .btn-secondary:hover:not(:disabled) {
|
|
7274
|
+
// background: var(--jupiter-hover-background, #f5f5f5);
|
|
7275
|
+
// }
|
|
6976
7276
|
|
|
6977
7277
|
button:disabled {
|
|
6978
7278
|
opacity: 0.6;
|
|
@@ -7187,6 +7487,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7187
7487
|
this._preservedUnitData = {};
|
|
7188
7488
|
this._typedMemberData = {};
|
|
7189
7489
|
this._preservedTypedMemberData = {};
|
|
7490
|
+
this._repeatCounts = {};
|
|
7190
7491
|
this._columns = [];
|
|
7191
7492
|
this._errors = [];
|
|
7192
7493
|
this._touched = /* @__PURE__ */ new Set();
|
|
@@ -7405,7 +7706,6 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7405
7706
|
if (!((_a = this._currentSchema) == null ? void 0 : _a.sections)) {
|
|
7406
7707
|
return;
|
|
7407
7708
|
}
|
|
7408
|
-
console.log("🔍 [DynamicForm] Extracting typed member values from facts");
|
|
7409
7709
|
this._currentSchema.sections.forEach((section2) => {
|
|
7410
7710
|
this._extractTypedMembersFromConcepts(section2.concepts || [], section2);
|
|
7411
7711
|
});
|
|
@@ -7848,6 +8148,10 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7848
8148
|
if (this._typedMemberData[field2.columnId]) {
|
|
7849
8149
|
this._preservedTypedMemberData[field2.columnId] = { ...this._typedMemberData[field2.columnId] };
|
|
7850
8150
|
}
|
|
8151
|
+
const crossRoleKey = `${concept.id}__${field2.columnId}`;
|
|
8152
|
+
if (this._typedMemberData[crossRoleKey]) {
|
|
8153
|
+
this._preservedTypedMemberData[crossRoleKey] = { ...this._typedMemberData[crossRoleKey] };
|
|
8154
|
+
}
|
|
7851
8155
|
});
|
|
7852
8156
|
if (concept.children) {
|
|
7853
8157
|
concept.children.forEach((child) => {
|
|
@@ -7868,6 +8172,10 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7868
8172
|
if (this._preservedTypedMemberData[field2.columnId]) {
|
|
7869
8173
|
this._typedMemberData[field2.columnId] = { ...this._preservedTypedMemberData[field2.columnId] };
|
|
7870
8174
|
}
|
|
8175
|
+
const crossRoleKey = `${concept.id}__${field2.columnId}`;
|
|
8176
|
+
if (this._preservedTypedMemberData[crossRoleKey]) {
|
|
8177
|
+
this._typedMemberData[crossRoleKey] = { ...this._preservedTypedMemberData[crossRoleKey] };
|
|
8178
|
+
}
|
|
7871
8179
|
});
|
|
7872
8180
|
if (concept.children) {
|
|
7873
8181
|
concept.children.forEach((child) => {
|
|
@@ -7909,7 +8217,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
7909
8217
|
this._periodPreferences,
|
|
7910
8218
|
this._periodData,
|
|
7911
8219
|
this._unitData,
|
|
7912
|
-
this.reportingLanguage
|
|
8220
|
+
this.reportingLanguage,
|
|
8221
|
+
this._repeatCounts
|
|
7913
8222
|
);
|
|
7914
8223
|
this._draftStorageService.saveDraft(currentFormData, currentMetadata);
|
|
7915
8224
|
console.log("✅ Current form data saved to draft storage with NEW preferences");
|
|
@@ -8080,14 +8389,72 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8080
8389
|
const parts = uniqueConceptKey.split("::");
|
|
8081
8390
|
return parts.length > 1 ? parts[1] : uniqueConceptKey;
|
|
8082
8391
|
}
|
|
8392
|
+
_handleAddConceptRepeat(event) {
|
|
8393
|
+
const { conceptId } = event.detail;
|
|
8394
|
+
this._repeatCounts = { ...this._repeatCounts, [conceptId]: (this._repeatCounts[conceptId] || 0) + 1 };
|
|
8395
|
+
this._dirty = true;
|
|
8396
|
+
}
|
|
8397
|
+
_handleRemoveConceptRepeat(event) {
|
|
8398
|
+
const { conceptId: rawConceptId } = event.detail;
|
|
8399
|
+
const repeatMatch = rawConceptId.match(/^(.+)__repeat_(\d+)$/);
|
|
8400
|
+
const baseConceptId = repeatMatch ? repeatMatch[1] : rawConceptId;
|
|
8401
|
+
const removeIndex = repeatMatch ? parseInt(repeatMatch[2]) : this._repeatCounts[rawConceptId] || 0;
|
|
8402
|
+
const current = this._repeatCounts[baseConceptId] || 0;
|
|
8403
|
+
if (current <= 0 || removeIndex < 1 || removeIndex > current)
|
|
8404
|
+
return;
|
|
8405
|
+
const newFormData = { ...this._formData };
|
|
8406
|
+
const newTypedData = { ...this._typedMemberData };
|
|
8407
|
+
const newUnitData = { ...this._unitData };
|
|
8408
|
+
const newPeriodData = { ...this._periodData };
|
|
8409
|
+
for (let n3 = removeIndex; n3 < current; n3++) {
|
|
8410
|
+
const fromId = `${baseConceptId}__repeat_${n3 + 1}`;
|
|
8411
|
+
const toId = `${baseConceptId}__repeat_${n3}`;
|
|
8412
|
+
if (newFormData[fromId] !== void 0) {
|
|
8413
|
+
newFormData[toId] = newFormData[fromId];
|
|
8414
|
+
} else {
|
|
8415
|
+
delete newFormData[toId];
|
|
8416
|
+
}
|
|
8417
|
+
const toPrefix = `${toId}__`;
|
|
8418
|
+
const fromPrefix = `${fromId}__`;
|
|
8419
|
+
const fromEntries = Object.keys(newTypedData).filter((k) => k.startsWith(fromPrefix));
|
|
8420
|
+
Object.keys(newTypedData).filter((k) => k.startsWith(toPrefix)).forEach((k) => delete newTypedData[k]);
|
|
8421
|
+
fromEntries.forEach((k) => {
|
|
8422
|
+
newTypedData[`${toId}__${k.slice(fromPrefix.length)}`] = newTypedData[k];
|
|
8423
|
+
});
|
|
8424
|
+
fromEntries.forEach((k) => delete newTypedData[k]);
|
|
8425
|
+
if (newUnitData[fromId] !== void 0) {
|
|
8426
|
+
newUnitData[toId] = newUnitData[fromId];
|
|
8427
|
+
} else {
|
|
8428
|
+
delete newUnitData[toId];
|
|
8429
|
+
}
|
|
8430
|
+
if (newPeriodData[fromId] !== void 0) {
|
|
8431
|
+
newPeriodData[toId] = newPeriodData[fromId];
|
|
8432
|
+
} else {
|
|
8433
|
+
delete newPeriodData[toId];
|
|
8434
|
+
}
|
|
8435
|
+
}
|
|
8436
|
+
const lastId = `${baseConceptId}__repeat_${current}`;
|
|
8437
|
+
delete newFormData[lastId];
|
|
8438
|
+
delete newUnitData[lastId];
|
|
8439
|
+
delete newPeriodData[lastId];
|
|
8440
|
+
const lastPrefix = `${lastId}__`;
|
|
8441
|
+
Object.keys(newTypedData).filter((k) => k.startsWith(lastPrefix)).forEach((k) => delete newTypedData[k]);
|
|
8442
|
+
this._formData = newFormData;
|
|
8443
|
+
this._typedMemberData = newTypedData;
|
|
8444
|
+
this._unitData = newUnitData;
|
|
8445
|
+
this._periodData = newPeriodData;
|
|
8446
|
+
this._repeatCounts = { ...this._repeatCounts, [baseConceptId]: current - 1 };
|
|
8447
|
+
this._dirty = true;
|
|
8448
|
+
}
|
|
8083
8449
|
_handleTypedMemberChange(event) {
|
|
8084
|
-
const { columnId, axisId, value } = event.detail;
|
|
8085
|
-
|
|
8450
|
+
const { columnId, axisId, value, conceptId } = event.detail;
|
|
8451
|
+
const storageKey = conceptId ? `${conceptId}__${columnId}` : columnId;
|
|
8452
|
+
console.log(`🔍 [DynamicForm] Typed member change: storageKey=${storageKey}, axisId=${axisId}, value=${value}`);
|
|
8086
8453
|
const updatedTypedMemberData = { ...this._typedMemberData };
|
|
8087
|
-
if (!updatedTypedMemberData[
|
|
8088
|
-
updatedTypedMemberData[
|
|
8454
|
+
if (!updatedTypedMemberData[storageKey]) {
|
|
8455
|
+
updatedTypedMemberData[storageKey] = {};
|
|
8089
8456
|
}
|
|
8090
|
-
updatedTypedMemberData[
|
|
8457
|
+
updatedTypedMemberData[storageKey] = { ...updatedTypedMemberData[storageKey], [axisId]: value };
|
|
8091
8458
|
this._typedMemberData = updatedTypedMemberData;
|
|
8092
8459
|
this._dirty = true;
|
|
8093
8460
|
this.requestUpdate();
|
|
@@ -8715,7 +9082,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8715
9082
|
this._periodPreferences,
|
|
8716
9083
|
this._periodData,
|
|
8717
9084
|
this._unitData,
|
|
8718
|
-
this.reportingLanguage
|
|
9085
|
+
this.reportingLanguage,
|
|
9086
|
+
this._repeatCounts
|
|
8719
9087
|
);
|
|
8720
9088
|
const draftPayloadSnapshot = JSON.stringify({
|
|
8721
9089
|
draftData,
|
|
@@ -8829,6 +9197,10 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8829
9197
|
this._preservedTypedMemberData = {};
|
|
8830
9198
|
console.log("🔄 Restored typed member data");
|
|
8831
9199
|
}
|
|
9200
|
+
if (metadata.repeatCounts) {
|
|
9201
|
+
this._repeatCounts = metadata.repeatCounts;
|
|
9202
|
+
console.log("🔄 Restored repeat counts:", this._repeatCounts);
|
|
9203
|
+
}
|
|
8832
9204
|
if (metadata.periodData) {
|
|
8833
9205
|
this._periodData = metadata.periodData;
|
|
8834
9206
|
console.log("🔄 Restored custom field-level period data:", Object.keys(this._periodData).length, "concepts");
|
|
@@ -8872,7 +9244,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8872
9244
|
const restoredPeriodData = {};
|
|
8873
9245
|
const restoredUnitData = {};
|
|
8874
9246
|
formData.forEach((entry) => {
|
|
8875
|
-
let { conceptId, value, columnId, period, unit } = entry;
|
|
9247
|
+
let { conceptId, draftInstanceId, value, columnId, period, unit } = entry;
|
|
8876
9248
|
if (!columnId && period) {
|
|
8877
9249
|
columnId = this._inferColumnIdFromPeriod(period, conceptId);
|
|
8878
9250
|
if (!columnId) {
|
|
@@ -8880,13 +9252,15 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
8880
9252
|
return;
|
|
8881
9253
|
}
|
|
8882
9254
|
}
|
|
8883
|
-
const
|
|
8884
|
-
const
|
|
9255
|
+
const instanceKey = draftInstanceId || conceptId;
|
|
9256
|
+
const baseConceptId = instanceKey.includes("__repeat_") ? instanceKey.split("__repeat_")[0] : instanceKey;
|
|
9257
|
+
const actualBaseId = this._findActualConceptId(baseConceptId);
|
|
9258
|
+
const conceptIdToUse = instanceKey.includes("__repeat_") ? `${actualBaseId || baseConceptId}__repeat_${instanceKey.split("__repeat_")[1]}` : actualBaseId || instanceKey;
|
|
8885
9259
|
if (!restoredFormData[conceptIdToUse]) {
|
|
8886
9260
|
restoredFormData[conceptIdToUse] = {};
|
|
8887
9261
|
}
|
|
8888
9262
|
restoredFormData[conceptIdToUse][columnId] = value;
|
|
8889
|
-
console.log(`📦 Restored: ${conceptIdToUse}[${columnId}] = ${value}`);
|
|
9263
|
+
console.log(`📦 Restored: ${conceptIdToUse}[${columnId}] = ${value}${instanceKey !== conceptId ? ` (repeat instance)` : ""}`);
|
|
8890
9264
|
if (period) {
|
|
8891
9265
|
if (!restoredPeriodData[conceptIdToUse]) {
|
|
8892
9266
|
restoredPeriodData[conceptIdToUse] = {};
|
|
@@ -9542,7 +9916,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9542
9916
|
}
|
|
9543
9917
|
if (concept.fields && concept.fields.length > 0) {
|
|
9544
9918
|
concept.fields.forEach((field2) => {
|
|
9545
|
-
var _a, _b, _c, _d;
|
|
9919
|
+
var _a, _b, _c, _d, _e;
|
|
9546
9920
|
const conceptData = this._formData[concept.id];
|
|
9547
9921
|
let fieldValue = conceptData == null ? void 0 : conceptData[field2.columnId];
|
|
9548
9922
|
if ((fieldValue === void 0 || fieldValue === null || fieldValue === "") && this.masterData) {
|
|
@@ -9558,6 +9932,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9558
9932
|
const fieldPeriodData = (_a = this._periodData[concept.id]) == null ? void 0 : _a[field2.columnId];
|
|
9559
9933
|
const submissionEntry = {
|
|
9560
9934
|
conceptId: concept.id,
|
|
9935
|
+
draftInstanceId: concept.id,
|
|
9936
|
+
// used during draft restoration to route value to the correct _formData slot
|
|
9561
9937
|
columnId: field2.columnId,
|
|
9562
9938
|
// CRITICAL: Include columnId for draft restoration
|
|
9563
9939
|
value: fieldValue,
|
|
@@ -9623,12 +9999,90 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9623
9999
|
});
|
|
9624
10000
|
}
|
|
9625
10001
|
}
|
|
10002
|
+
if (!submissionEntry.typedMembers && ((_e = field2.crossRoleTypedMembers) == null ? void 0 : _e.length)) {
|
|
10003
|
+
const crossRoleKey = `${concept.id}__${field2.columnId}`;
|
|
10004
|
+
const crossRoleValues = this._typedMemberData[crossRoleKey];
|
|
10005
|
+
if (crossRoleValues) {
|
|
10006
|
+
const filteredTypedMembers = {};
|
|
10007
|
+
field2.crossRoleTypedMembers.forEach((tm) => {
|
|
10008
|
+
const val = crossRoleValues[tm.axisId];
|
|
10009
|
+
if (val !== void 0 && val !== null && val !== "") {
|
|
10010
|
+
filteredTypedMembers[tm.axisId] = {
|
|
10011
|
+
value: val,
|
|
10012
|
+
memberName: tm.typedMemberId
|
|
10013
|
+
};
|
|
10014
|
+
}
|
|
10015
|
+
});
|
|
10016
|
+
if (Object.keys(filteredTypedMembers).length > 0) {
|
|
10017
|
+
submissionEntry.typedMembers = filteredTypedMembers;
|
|
10018
|
+
console.log(`🔍 [Submission] Adding cross-role typed members for ${concept.id}/${field2.columnId}:`, filteredTypedMembers);
|
|
10019
|
+
}
|
|
10020
|
+
}
|
|
10021
|
+
}
|
|
9626
10022
|
if (sectionTitle === targetRole) {
|
|
9627
10023
|
console.warn(`[DUPLICATE DEBUG] Final submission entry:`, submissionEntry);
|
|
9628
10024
|
}
|
|
9629
10025
|
submissionData.push(submissionEntry);
|
|
9630
10026
|
}
|
|
9631
10027
|
});
|
|
10028
|
+
const repeatCount = this._repeatCounts[concept.id] || 0;
|
|
10029
|
+
if (repeatCount > 0 && concept.fields.some((f2) => {
|
|
10030
|
+
var _a;
|
|
10031
|
+
return (_a = f2.crossRoleTypedMembers) == null ? void 0 : _a.length;
|
|
10032
|
+
})) {
|
|
10033
|
+
for (let n3 = 1; n3 <= repeatCount; n3++) {
|
|
10034
|
+
const instanceId = `${concept.id}__repeat_${n3}`;
|
|
10035
|
+
concept.fields.forEach((field2) => {
|
|
10036
|
+
var _a, _b, _c, _d, _e;
|
|
10037
|
+
const instanceValue = (_a = this._formData[instanceId]) == null ? void 0 : _a[field2.columnId];
|
|
10038
|
+
if (instanceValue === void 0 || instanceValue === null || instanceValue === "")
|
|
10039
|
+
return;
|
|
10040
|
+
const column2 = this._findColumnByIdInSection(field2.columnId, section2);
|
|
10041
|
+
const fieldPeriodData = (_b = this._periodData[instanceId]) == null ? void 0 : _b[field2.columnId];
|
|
10042
|
+
const instanceEntry = {
|
|
10043
|
+
conceptId: concept.id,
|
|
10044
|
+
// original concept ID (not synthetic repeat ID)
|
|
10045
|
+
draftInstanceId: instanceId,
|
|
10046
|
+
// synthetic ID used during draft restoration to route to the correct _formData slot
|
|
10047
|
+
columnId: field2.columnId,
|
|
10048
|
+
value: instanceValue,
|
|
10049
|
+
period: {
|
|
10050
|
+
type: concept.periodType || "duration"
|
|
10051
|
+
}
|
|
10052
|
+
};
|
|
10053
|
+
if (concept.periodType === "instant") {
|
|
10054
|
+
instanceEntry.period.date = (fieldPeriodData == null ? void 0 : fieldPeriodData.instantDate) || (fieldPeriodData == null ? void 0 : fieldPeriodData.endDate) || (column2 == null ? void 0 : column2.periodEndDate) || field2.periodInstantDate || field2.periodEndDate || field2.periodStartDate || this.periodStartDate;
|
|
10055
|
+
} else {
|
|
10056
|
+
instanceEntry.period.startDate = (fieldPeriodData == null ? void 0 : fieldPeriodData.startDate) || (column2 == null ? void 0 : column2.periodStartDate) || field2.periodStartDate || this.periodStartDate;
|
|
10057
|
+
instanceEntry.period.endDate = (fieldPeriodData == null ? void 0 : fieldPeriodData.endDate) || (column2 == null ? void 0 : column2.periodEndDate) || field2.periodEndDate || this.periodEndDate;
|
|
10058
|
+
}
|
|
10059
|
+
const instanceUnit = (_c = this._unitData[instanceId]) == null ? void 0 : _c[field2.columnId];
|
|
10060
|
+
if (instanceUnit) {
|
|
10061
|
+
instanceEntry.unit = instanceUnit;
|
|
10062
|
+
}
|
|
10063
|
+
if ((column2 == null ? void 0 : column2.type) === "dimension" && ((_d = column2.dimensionData) == null ? void 0 : _d.dimensionIdKey)) {
|
|
10064
|
+
instanceEntry.dimension = column2.dimensionData.dimensionIdKey;
|
|
10065
|
+
}
|
|
10066
|
+
if ((_e = field2.crossRoleTypedMembers) == null ? void 0 : _e.length) {
|
|
10067
|
+
const crossRoleKey = `${instanceId}__${field2.columnId}`;
|
|
10068
|
+
const crossRoleValues = this._typedMemberData[crossRoleKey];
|
|
10069
|
+
if (crossRoleValues) {
|
|
10070
|
+
const filteredTypedMembers = {};
|
|
10071
|
+
field2.crossRoleTypedMembers.forEach((tm) => {
|
|
10072
|
+
const val = crossRoleValues[tm.axisId];
|
|
10073
|
+
if (val !== void 0 && val !== null && val !== "") {
|
|
10074
|
+
filteredTypedMembers[tm.axisId] = { value: val, memberName: tm.typedMemberId };
|
|
10075
|
+
}
|
|
10076
|
+
});
|
|
10077
|
+
if (Object.keys(filteredTypedMembers).length > 0) {
|
|
10078
|
+
instanceEntry.typedMembers = filteredTypedMembers;
|
|
10079
|
+
}
|
|
10080
|
+
}
|
|
10081
|
+
}
|
|
10082
|
+
submissionData.push(instanceEntry);
|
|
10083
|
+
});
|
|
10084
|
+
}
|
|
10085
|
+
}
|
|
9632
10086
|
}
|
|
9633
10087
|
if (concept.children) {
|
|
9634
10088
|
this._processConceptsForSubmission(concept.children, submissionData, section2);
|
|
@@ -9758,13 +10212,6 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9758
10212
|
}
|
|
9759
10213
|
const allFields = [];
|
|
9760
10214
|
this._collectAllFields(section2.concepts || [], new Set((section2.columns || []).map((col) => col.id)), section2.columns || [], allFields);
|
|
9761
|
-
console.warn(`📊 Total fields found: ${allFields.length}`);
|
|
9762
|
-
console.warn(`
|
|
9763
|
-
📋 FIELD DETAILS:`);
|
|
9764
|
-
allFields.forEach((field2, index) => {
|
|
9765
|
-
const status = field2.isEmpty ? "❌ EMPTY" : "✅ FILLED";
|
|
9766
|
-
console.warn(` ${index + 1}. ${field2.conceptId} [${field2.columnId}]: ${status} = ${JSON.stringify(field2.value)}`);
|
|
9767
|
-
});
|
|
9768
10215
|
const hasErrors = this._roleHasErrors(roleId);
|
|
9769
10216
|
const emptyCount = allFields.filter((f2) => f2.isEmpty).length;
|
|
9770
10217
|
const filledCount = allFields.filter((f2) => !f2.isEmpty).length;
|
|
@@ -9839,10 +10286,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
9839
10286
|
if (matchedFact && matchedFact.value !== null && matchedFact.value !== void 0 && matchedFact.value !== "") {
|
|
9840
10287
|
value = matchedFact.value;
|
|
9841
10288
|
isEmpty = false;
|
|
9842
|
-
console.warn(` ✨ FACT PRE-POPULATED: ${fieldConceptId} [${field2.columnId}] = ${JSON.stringify(value)}`);
|
|
9843
10289
|
}
|
|
9844
10290
|
}
|
|
9845
|
-
console.warn(` 🔍 Field lookup: concept.id="${conceptIdWithSuffix}", field.conceptId="${fieldConceptId}", value=${JSON.stringify(value)}, isEmpty=${isEmpty}`);
|
|
9846
10291
|
allFields.push({
|
|
9847
10292
|
conceptId: fieldConceptId,
|
|
9848
10293
|
columnId: field2.columnId,
|
|
@@ -10302,6 +10747,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
10302
10747
|
.periodData="${this._periodData}"
|
|
10303
10748
|
.unitData="${this._unitData}"
|
|
10304
10749
|
.typedMemberData="${this._typedMemberData}"
|
|
10750
|
+
.repeatCounts="${this._repeatCounts}"
|
|
10305
10751
|
.defaultUnits="${this.defaultUnits}"
|
|
10306
10752
|
.disabled="${this.disabled || this.readonly}"
|
|
10307
10753
|
.collapsible="${config.collapsibleSections !== false}"
|
|
@@ -10315,6 +10761,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
10315
10761
|
@field-change="${this._handleFieldChange}"
|
|
10316
10762
|
@period-change="${this._handlePeriodChange}"
|
|
10317
10763
|
@typed-member-change="${this._handleTypedMemberChange}"
|
|
10764
|
+
@add-concept-repeat="${this._handleAddConceptRepeat}"
|
|
10765
|
+
@remove-concept-repeat="${this._handleRemoveConceptRepeat}"
|
|
10318
10766
|
@section-expand="${this._handleSectionExpand}"
|
|
10319
10767
|
@concept-expand="${this._handleConceptExpand}"
|
|
10320
10768
|
@column-remove="${this._handleColumnRemove}"
|
|
@@ -10431,6 +10879,7 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
10431
10879
|
.periodData="${this._periodData}"
|
|
10432
10880
|
.unitData="${this._unitData}"
|
|
10433
10881
|
.typedMemberData="${this._typedMemberData}"
|
|
10882
|
+
.repeatCounts="${this._repeatCounts}"
|
|
10434
10883
|
.defaultUnits="${this.defaultUnits}"
|
|
10435
10884
|
.disabled="${this.disabled || this.readonly}"
|
|
10436
10885
|
.collapsible="${false}"
|
|
@@ -10444,6 +10893,8 @@ let JupiterDynamicForm = class extends LitElement {
|
|
|
10444
10893
|
.periodEndDate="${this.periodEndDate}"
|
|
10445
10894
|
@field-change="${this._handleFieldChange}"
|
|
10446
10895
|
@typed-member-change="${this._handleTypedMemberChange}"
|
|
10896
|
+
@add-concept-repeat="${this._handleAddConceptRepeat}"
|
|
10897
|
+
@remove-concept-repeat="${this._handleRemoveConceptRepeat}"
|
|
10447
10898
|
@section-expand="${this._handleSectionExpand}"
|
|
10448
10899
|
@concept-expand="${this._handleConceptExpand}"
|
|
10449
10900
|
@column-remove="${this._handleColumnRemove}"
|
|
@@ -10713,7 +11164,7 @@ JupiterDynamicForm.styles = css`
|
|
|
10713
11164
|
right: 0;
|
|
10714
11165
|
padding: 16px 24px;
|
|
10715
11166
|
border-top: 1px solid var(--jupiter-border-color, #ddd);
|
|
10716
|
-
background: var(--jupiter-form-actions-background, #f8f9fa);
|
|
11167
|
+
background: var(--bg-color-2, var(--jupiter-form-actions-background, #f8f9fa));
|
|
10717
11168
|
display: flex;
|
|
10718
11169
|
gap: 12px;
|
|
10719
11170
|
align-items: center;
|
|
@@ -10724,6 +11175,7 @@ JupiterDynamicForm.styles = css`
|
|
|
10724
11175
|
.form-sections {
|
|
10725
11176
|
padding: 24px;
|
|
10726
11177
|
padding-bottom: 100px; /* Add space for fixed footer */
|
|
11178
|
+
background: var(--bg-color-2);
|
|
10727
11179
|
}
|
|
10728
11180
|
|
|
10729
11181
|
.validation-summary {
|
|
@@ -10761,22 +11213,23 @@ JupiterDynamicForm.styles = css`
|
|
|
10761
11213
|
}
|
|
10762
11214
|
|
|
10763
11215
|
.btn-primary {
|
|
10764
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
10765
|
-
color: white;
|
|
11216
|
+
background: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
11217
|
+
color: var(--buttonTextColor, white);
|
|
10766
11218
|
}
|
|
10767
11219
|
|
|
10768
|
-
.btn-primary:hover:not(:disabled) {
|
|
10769
|
-
|
|
10770
|
-
}
|
|
11220
|
+
// .btn-primary:hover:not(:disabled) {
|
|
11221
|
+
// background: var(--jupiter-primary-color-dark, #1565c0);
|
|
11222
|
+
// }
|
|
10771
11223
|
|
|
10772
11224
|
.btn-secondary {
|
|
10773
|
-
|
|
10774
|
-
|
|
11225
|
+
color: var(--buttonBgColor, var(--jupiter-primary-color, #1976d2));
|
|
11226
|
+
border: 1px solid var(--buttonBgColor, var(--jupiter-primary-color, #1976d2)) !important;
|
|
11227
|
+
background: transparent;
|
|
10775
11228
|
}
|
|
10776
11229
|
|
|
10777
|
-
.btn-secondary:hover:not(:disabled) {
|
|
10778
|
-
|
|
10779
|
-
}
|
|
11230
|
+
// .btn-secondary:hover:not(:disabled) {
|
|
11231
|
+
// background: var(--jupiter-secondary-color-dark, #616161);
|
|
11232
|
+
// }
|
|
10780
11233
|
|
|
10781
11234
|
.btn-outline {
|
|
10782
11235
|
background: transparent;
|
|
@@ -10854,7 +11307,7 @@ JupiterDynamicForm.styles = css`
|
|
|
10854
11307
|
padding: 8px 16px;
|
|
10855
11308
|
background: transparent;
|
|
10856
11309
|
border: 1px solid var(--jupiter-primary-color, #1976d2);
|
|
10857
|
-
color: var(--jupiter-primary-color, #1976d2);
|
|
11310
|
+
color: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
10858
11311
|
border-radius: 4px;
|
|
10859
11312
|
font-size: 13px;
|
|
10860
11313
|
font-weight: 500;
|
|
@@ -10863,10 +11316,10 @@ JupiterDynamicForm.styles = css`
|
|
|
10863
11316
|
margin-right: auto;
|
|
10864
11317
|
}
|
|
10865
11318
|
|
|
10866
|
-
.filter-roles-button:hover:not(:disabled) {
|
|
10867
|
-
|
|
10868
|
-
|
|
10869
|
-
}
|
|
11319
|
+
// .filter-roles-button:hover:not(:disabled) {
|
|
11320
|
+
// background: var(--jupiter-primary-color, #1976d2);
|
|
11321
|
+
// color: white;
|
|
11322
|
+
// }
|
|
10870
11323
|
|
|
10871
11324
|
.filter-roles-button .filter-icon {
|
|
10872
11325
|
width: 16px;
|
|
@@ -10877,8 +11330,8 @@ JupiterDynamicForm.styles = css`
|
|
|
10877
11330
|
.roles-count {
|
|
10878
11331
|
display: inline-flex;
|
|
10879
11332
|
align-items: center;
|
|
10880
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
10881
|
-
color: white;
|
|
11333
|
+
background: var(--primaryTextColor, var(--jupiter-primary-color, #1976d2));
|
|
11334
|
+
color: var(--headerBgColor, white) !important;
|
|
10882
11335
|
border-radius: 10px;
|
|
10883
11336
|
font-size: 11px;
|
|
10884
11337
|
font-weight: 600;
|
|
@@ -10917,9 +11370,9 @@ JupiterDynamicForm.styles = css`
|
|
|
10917
11370
|
.side-panel-roles-list {
|
|
10918
11371
|
width: 280px;
|
|
10919
11372
|
min-width: 280px;
|
|
10920
|
-
border-right: 1px solid var(--jupiter-border-color, #ddd);
|
|
11373
|
+
border-right: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
10921
11374
|
overflow-y: auto;
|
|
10922
|
-
background: var(--jupiter-background-light, #f8f9fa);
|
|
11375
|
+
background: var(--bg-color-2, var(--jupiter-background-light, #f8f9fa));
|
|
10923
11376
|
display: flex;
|
|
10924
11377
|
flex-direction: column;
|
|
10925
11378
|
transition: width 0.3s ease, min-width 0.3s ease;
|
|
@@ -10939,8 +11392,10 @@ JupiterDynamicForm.styles = css`
|
|
|
10939
11392
|
right: 0px;
|
|
10940
11393
|
width: 32px;
|
|
10941
11394
|
height: 32px;
|
|
10942
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
10943
|
-
background: var(--jupiter-background, #fff);
|
|
11395
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
11396
|
+
background: var(--bg-color-2, var(--jupiter-background, #fff));
|
|
11397
|
+
color: var(--primaryTextColor);
|
|
11398
|
+
|
|
10944
11399
|
border-radius: 4px;
|
|
10945
11400
|
cursor: pointer;
|
|
10946
11401
|
display: flex;
|
|
@@ -10948,7 +11403,6 @@ JupiterDynamicForm.styles = css`
|
|
|
10948
11403
|
justify-content: center;
|
|
10949
11404
|
z-index: 100;
|
|
10950
11405
|
transition: all 0.2s ease;
|
|
10951
|
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
10952
11406
|
}
|
|
10953
11407
|
|
|
10954
11408
|
.side-panel-toggle-btn:hover {
|
|
@@ -10972,7 +11426,7 @@ JupiterDynamicForm.styles = css`
|
|
|
10972
11426
|
position: sticky;
|
|
10973
11427
|
top: 0;
|
|
10974
11428
|
z-index: 10;
|
|
10975
|
-
background: var(--jupiter-background, #fff);
|
|
11429
|
+
background: var(--bg-color-2, var(--jupiter-background, #fff));
|
|
10976
11430
|
padding: 16px;
|
|
10977
11431
|
border-bottom: 1px solid var(--jupiter-border-color, #ddd);
|
|
10978
11432
|
}
|
|
@@ -10980,21 +11434,21 @@ JupiterDynamicForm.styles = css`
|
|
|
10980
11434
|
.side-panel-search-input {
|
|
10981
11435
|
width: 100%;
|
|
10982
11436
|
padding: 10px 40px 10px 12px;
|
|
10983
|
-
border: 1px solid var(--jupiter-border-color, #ddd);
|
|
11437
|
+
border: 1px solid var(--primaryTextColor, var(--jupiter-border-color, #ddd));
|
|
10984
11438
|
border-radius: 4px;
|
|
10985
11439
|
font-size: 14px;
|
|
10986
11440
|
font-family: inherit;
|
|
10987
|
-
background:
|
|
10988
|
-
color: var(--jupiter-text-primary, #333);
|
|
11441
|
+
background: transparent;
|
|
11442
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
10989
11443
|
transition: border-color 0.2s ease;
|
|
10990
11444
|
box-sizing: border-box;
|
|
10991
11445
|
}
|
|
10992
11446
|
|
|
10993
|
-
.side-panel-search-input:focus {
|
|
10994
|
-
|
|
10995
|
-
|
|
10996
|
-
|
|
10997
|
-
}
|
|
11447
|
+
// .side-panel-search-input:focus {
|
|
11448
|
+
// outline: none;
|
|
11449
|
+
// border-color: var(--jupiter-primary-color, #1976d2);
|
|
11450
|
+
// box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.1);
|
|
11451
|
+
// }
|
|
10998
11452
|
|
|
10999
11453
|
.side-panel-search-input::placeholder {
|
|
11000
11454
|
color: var(--jupiter-text-secondary, #666);
|
|
@@ -11054,16 +11508,16 @@ JupiterDynamicForm.styles = css`
|
|
|
11054
11508
|
border-bottom: 1px solid var(--jupiter-border-color, #e0e0e0);
|
|
11055
11509
|
transition: background-color 0.2s ease;
|
|
11056
11510
|
font-size: 14px;
|
|
11057
|
-
color: var(--jupiter-text-primary, #333);
|
|
11511
|
+
color: var(--primaryTextColor, var(--jupiter-text-primary, #333));
|
|
11058
11512
|
line-height: 1.4;
|
|
11059
11513
|
}
|
|
11060
11514
|
|
|
11061
|
-
.side-panel-role-item:hover {
|
|
11062
|
-
|
|
11063
|
-
}
|
|
11515
|
+
// .side-panel-role-item:hover {
|
|
11516
|
+
// background: var(--jupiter-hover-background, #e8e8e8);
|
|
11517
|
+
// }
|
|
11064
11518
|
|
|
11065
11519
|
.side-panel-role-item.active {
|
|
11066
|
-
background: var(--jupiter-primary-color, #1976d2);
|
|
11520
|
+
background: var(--light-color-1, var(--jupiter-primary-color, #1976d2));
|
|
11067
11521
|
color: white;
|
|
11068
11522
|
font-weight: 500;
|
|
11069
11523
|
}
|
|
@@ -11511,6 +11965,9 @@ __decorateClass([
|
|
|
11511
11965
|
__decorateClass([
|
|
11512
11966
|
r()
|
|
11513
11967
|
], JupiterDynamicForm.prototype, "_preservedTypedMemberData", 2);
|
|
11968
|
+
__decorateClass([
|
|
11969
|
+
r()
|
|
11970
|
+
], JupiterDynamicForm.prototype, "_repeatCounts", 2);
|
|
11514
11971
|
__decorateClass([
|
|
11515
11972
|
r()
|
|
11516
11973
|
], JupiterDynamicForm.prototype, "_columns", 2);
|