retold-data-service 2.1.1 → 2.1.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/BUILDING-AND-PUBLISHING.md +2 -2
- package/Dockerfile +1 -1
- package/README.md +12 -27
- package/build-all.js +66 -0
- package/diagrams/architecture.excalidraw +2966 -0
- package/diagrams/architecture.mmd +17 -0
- package/diagrams/architecture.svg +2 -0
- package/docs/README.md +12 -12
- package/docs/_brand.json +18 -0
- package/docs/_cover.md +1 -1
- package/docs/_topbar.md +1 -1
- package/docs/_version.json +3 -3
- package/docs/api/reference.md +8 -8
- package/docs/architecture.md +6 -84
- package/docs/diagrams/component-diagram.excalidraw +2807 -0
- package/docs/diagrams/component-diagram.mmd +14 -0
- package/docs/diagrams/component-diagram.svg +2 -0
- package/docs/diagrams/component-stack.excalidraw +1169 -0
- package/docs/diagrams/component-stack.mmd +6 -0
- package/docs/diagrams/component-stack.svg +2 -0
- package/docs/diagrams/hook-execution-order.excalidraw +3230 -0
- package/docs/diagrams/hook-execution-order.mmd +19 -0
- package/docs/diagrams/hook-execution-order.svg +2 -0
- package/docs/diagrams/initialization-flow.excalidraw +1800 -0
- package/docs/diagrams/initialization-flow.mmd +22 -0
- package/docs/diagrams/initialization-flow.svg +2 -0
- package/docs/index.html +6 -7
- package/docs/lifecycle-hooks.md +2 -21
- package/docs/retold-catalog.json +141 -141
- package/docs/retold-keyword-index.json +6818 -1608
- package/package.json +130 -96
- package/source/services/RetoldDataService-Brand.js +13 -0
- package/source/services/comprehension-loader/pict-app/Pict-Application-ComprehensionLoader.js +65 -15
- package/source/services/comprehension-loader/pict-app/providers/Pict-Provider-ComprehensionLoader.js +2 -2
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Layout.js +68 -114
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Load.js +29 -29
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Schema.js +3 -3
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Session.js +2 -2
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-SettingsPanel.js +62 -0
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Shell.js +142 -0
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Source.js +7 -7
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-StatusBar.js +125 -0
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-StatusDetail.js +89 -0
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-TopBar-Nav.js +42 -0
- package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-TopBar-User.js +48 -0
- package/source/services/comprehension-loader/web/comprehension-loader.js +5475 -6243
- package/source/services/comprehension-loader/web/comprehension-loader.js.map +1 -1
- package/source/services/comprehension-loader/web/comprehension-loader.min.js +75 -1
- package/source/services/comprehension-loader/web/comprehension-loader.min.js.map +1 -1
- package/source/services/comprehension-loader/web/favicons/favicon-dark.svg +13 -0
- package/source/services/comprehension-loader/web/favicons/favicon-light.svg +13 -0
- package/source/services/comprehension-loader/web/favicons/favicon.svg +13 -0
- package/source/services/comprehension-loader/web/index.html +3 -0
- package/source/services/comprehension-loader/web/pict.min.js +12 -0
- package/source/services/data-cloner/DataCloner-Command-Headless.js +2 -1
- package/source/services/data-cloner/DataCloner-Command-Sync.js +110 -75
- package/source/services/data-cloner/pict-app/Pict-Application-DataCloner.js +70 -47
- package/source/services/data-cloner/pict-app/providers/Pict-Provider-DataCloner.js +3 -3
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Connection.js +1 -1
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Deploy.js +5 -5
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Export.js +11 -11
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Layout.js +89 -135
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Schema.js +3 -3
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Session.js +2 -2
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-SettingsPanel.js +61 -0
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Shell.js +136 -0
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-StatusBar.js +117 -0
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-StatusDetail.js +81 -0
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Sync.js +38 -38
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-TopBar-Nav.js +42 -0
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-TopBar-User.js +48 -0
- package/source/services/data-cloner/pict-app/views/PictView-DataCloner-ViewData.js +5 -5
- package/source/services/data-cloner/web/data-cloner.js +5855 -8067
- package/source/services/data-cloner/web/data-cloner.js.map +1 -1
- package/source/services/data-cloner/web/data-cloner.min.js +75 -1
- package/source/services/data-cloner/web/data-cloner.min.js.map +1 -1
- package/source/services/data-cloner/web/favicons/favicon-dark.svg +13 -0
- package/source/services/data-cloner/web/favicons/favicon-light.svg +13 -0
- package/source/services/data-cloner/web/favicons/favicon.svg +13 -0
- package/source/services/data-cloner/web/favicons/favicons/favicon-dark.svg +13 -0
- package/source/services/data-cloner/web/favicons/favicons/favicon-light.svg +13 -0
- package/source/services/data-cloner/web/favicons/favicons/favicon.svg +13 -0
- package/source/services/data-cloner/web/index.html +3 -0
- package/source/services/data-cloner/web/pict.min.js +12 -0
- package/test/Bundles_smoke_tests.js +43 -0
- package/test/ComprehensionLoader_smoke_tests.js +95 -0
- package/test/DataCloner-RuntimeOverrides_tests.js +344 -0
- package/test/DataCloner_smoke_tests.js +87 -0
- package/docs/css/docuserve.css +0 -327
package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Layout.js
CHANGED
|
@@ -42,37 +42,6 @@ class ComprehensionLoaderLayoutView extends libPictView
|
|
|
42
42
|
tmpCards[i].classList.remove('open');
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
toggleStatusDetail()
|
|
47
|
-
{
|
|
48
|
-
let tmpDetail = document.getElementById('liveStatusDetail');
|
|
49
|
-
let tmpMeta = document.getElementById('liveStatusMeta');
|
|
50
|
-
let tmpMessage = document.getElementById('liveStatusMessage');
|
|
51
|
-
let tmpToggle = document.getElementById('liveStatusToggle');
|
|
52
|
-
let tmpBar = document.getElementById('liveStatusBar');
|
|
53
|
-
if (!tmpDetail) return;
|
|
54
|
-
|
|
55
|
-
let tmpIsExpanded = tmpDetail.style.display !== 'none';
|
|
56
|
-
|
|
57
|
-
if (tmpIsExpanded)
|
|
58
|
-
{
|
|
59
|
-
tmpDetail.style.display = 'none';
|
|
60
|
-
tmpMeta.style.display = '';
|
|
61
|
-
tmpMessage.style.display = '';
|
|
62
|
-
tmpToggle.innerHTML = '▼';
|
|
63
|
-
tmpBar.classList.remove('expanded');
|
|
64
|
-
this.pict.providers.ComprehensionLoader.onStatusDetailCollapsed();
|
|
65
|
-
}
|
|
66
|
-
else
|
|
67
|
-
{
|
|
68
|
-
tmpDetail.style.display = '';
|
|
69
|
-
tmpMeta.style.display = 'none';
|
|
70
|
-
tmpMessage.style.display = 'none';
|
|
71
|
-
tmpToggle.innerHTML = '▲';
|
|
72
|
-
tmpBar.classList.add('expanded');
|
|
73
|
-
this.pict.providers.ComprehensionLoader.onStatusDetailExpanded();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
45
|
}
|
|
77
46
|
|
|
78
47
|
module.exports = ComprehensionLoaderLayoutView;
|
|
@@ -81,61 +50,61 @@ module.exports.default_configuration =
|
|
|
81
50
|
{
|
|
82
51
|
ViewIdentifier: 'ComprehensionLoader-Layout',
|
|
83
52
|
DefaultRenderable: 'ComprehensionLoader-Layout',
|
|
84
|
-
DefaultDestinationAddress: '#ComprehensionLoader-
|
|
53
|
+
DefaultDestinationAddress: '#ComprehensionLoader-Workspace',
|
|
85
54
|
CSS: /*css*/`
|
|
86
55
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
87
|
-
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #f5f5f5; color: #333; padding: 20px; }
|
|
88
|
-
h1 { margin-bottom: 20px; color: #1a1a1a; }
|
|
89
|
-
h2 { margin-bottom: 12px; color: #444; font-size: 1.2em; border-bottom: 2px solid #ddd; padding-bottom: 6px; }
|
|
56
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--theme-color-background-secondary, #f5f5f5); color: var(--theme-color-text-primary, #333); padding: 20px; }
|
|
57
|
+
h1 { margin-bottom: 20px; color: var(--theme-color-text-primary, #1a1a1a); }
|
|
58
|
+
h2 { margin-bottom: 12px; color: var(--theme-color-text-secondary, #444); font-size: 1.2em; border-bottom: 2px solid var(--theme-color-border-default, #ddd); padding-bottom: 6px; }
|
|
90
59
|
|
|
91
|
-
.section { background: #fff; border-radius: 8px; padding: 20px; margin-bottom: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
|
|
60
|
+
.section { background: var(--theme-color-background-panel, #fff); border-radius: 8px; padding: 20px; margin-bottom: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
|
|
92
61
|
|
|
93
62
|
/* Accordion layout */
|
|
94
63
|
.accordion-row { display: flex; gap: 0; margin-bottom: 16px; align-items: stretch; }
|
|
95
64
|
.accordion-number {
|
|
96
65
|
flex: 0 0 48px; display: flex; align-items: flex-start; justify-content: center;
|
|
97
|
-
padding-top: 16px; font-size: 1.6em; font-weight: 700; color: #4a90d9;
|
|
66
|
+
padding-top: 16px; font-size: 1.6em; font-weight: 700; color: var(--theme-color-brand-primary, #4a90d9);
|
|
98
67
|
user-select: none;
|
|
99
68
|
}
|
|
100
69
|
.accordion-card {
|
|
101
|
-
flex: 1; background: #fff; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
|
70
|
+
flex: 1; background: var(--theme-color-background-panel, #fff); border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
|
102
71
|
overflow: hidden; min-width: 0;
|
|
103
72
|
}
|
|
104
73
|
.accordion-header {
|
|
105
74
|
display: flex; align-items: center; padding: 14px 20px; cursor: pointer;
|
|
106
75
|
user-select: none; gap: 12px; transition: background 0.15s; line-height: 1.4;
|
|
107
76
|
}
|
|
108
|
-
.accordion-header:hover { background: #fafafa; }
|
|
109
|
-
.accordion-title { font-weight: 600; color: #333; font-size: 1.05em; white-space: nowrap; }
|
|
110
|
-
.accordion-preview { flex: 1; font-style: italic; color: #888; font-size: 0.9em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
77
|
+
.accordion-header:hover { background: var(--theme-color-background-secondary, #fafafa); }
|
|
78
|
+
.accordion-title { font-weight: 600; color: var(--theme-color-text-primary, #333); font-size: 1.05em; white-space: nowrap; }
|
|
79
|
+
.accordion-preview { flex: 1; font-style: italic; color: var(--theme-color-text-muted, #888); font-size: 0.9em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
111
80
|
.accordion-toggle {
|
|
112
81
|
flex: 0 0 20px; display: flex; align-items: center; justify-content: center;
|
|
113
|
-
border-radius: 4px; transition: background 0.15s, transform 0.25s; font-size: 0.7em; color: #888;
|
|
82
|
+
border-radius: 4px; transition: background 0.15s, transform 0.25s; font-size: 0.7em; color: var(--theme-color-text-muted, #888);
|
|
114
83
|
}
|
|
115
|
-
.accordion-header:hover .accordion-toggle { background: #eee; color: #555; }
|
|
84
|
+
.accordion-header:hover .accordion-toggle { background: var(--theme-color-border-light, #eee); color: var(--theme-color-text-secondary, #555); }
|
|
116
85
|
.accordion-card.open .accordion-toggle { transform: rotate(180deg); }
|
|
117
86
|
.accordion-body { padding: 0 20px 20px; display: none; }
|
|
118
87
|
.accordion-card.open .accordion-body { display: block; }
|
|
119
|
-
.accordion-card.open .accordion-header { border-bottom: 1px solid #eee; }
|
|
88
|
+
.accordion-card.open .accordion-header { border-bottom: 1px solid var(--theme-color-border-light, #eee); }
|
|
120
89
|
.accordion-card.open .accordion-preview { display: none; }
|
|
121
90
|
|
|
122
91
|
/* Action controls (go link + auto checkbox) */
|
|
123
92
|
.accordion-actions { display: flex; align-items: baseline; gap: 8px; flex-shrink: 0; }
|
|
124
93
|
.accordion-card.open .accordion-actions { display: none; }
|
|
125
94
|
.accordion-go {
|
|
126
|
-
font-size: 0.82em; color: #4a90d9; cursor: pointer; text-decoration: none;
|
|
95
|
+
font-size: 0.82em; color: var(--theme-color-brand-primary, #4a90d9); cursor: pointer; text-decoration: none;
|
|
127
96
|
font-weight: 500; white-space: nowrap; padding: 2px 6px; border-radius: 3px;
|
|
128
97
|
transition: background 0.15s;
|
|
129
98
|
}
|
|
130
|
-
.accordion-go:hover { background: #e8f0fe; text-decoration: underline; }
|
|
99
|
+
.accordion-go:hover { background: var(--theme-color-background-hover, #e8f0fe); text-decoration: underline; }
|
|
131
100
|
.accordion-auto {
|
|
132
|
-
font-size: 0.82em; color: #999; white-space: nowrap; cursor: pointer;
|
|
101
|
+
font-size: 0.82em; color: var(--theme-color-text-muted, #999); white-space: nowrap; cursor: pointer;
|
|
133
102
|
}
|
|
134
103
|
.accordion-auto .auto-label { display: none; }
|
|
135
104
|
.accordion-auto:hover .auto-label { display: inline; }
|
|
136
105
|
.accordion-auto input[type="checkbox"] { width: auto; margin: 0; cursor: pointer; vertical-align: middle; position: relative; top: 0px; opacity: 0.75; transition: opacity 0.15s; }
|
|
137
106
|
.accordion-auto:hover input[type="checkbox"] { opacity: 1; }
|
|
138
|
-
.accordion-auto:hover { color: #666; }
|
|
107
|
+
.accordion-auto:hover { color: var(--theme-color-text-secondary, #666); }
|
|
139
108
|
|
|
140
109
|
/* Phase status indicator */
|
|
141
110
|
.accordion-phase {
|
|
@@ -143,12 +112,12 @@ h2 { margin-bottom: 12px; color: #444; font-size: 1.2em; border-bottom: 2px soli
|
|
|
143
112
|
font-size: 0.85em; line-height: 1;
|
|
144
113
|
}
|
|
145
114
|
.accordion-phase.visible { display: flex; }
|
|
146
|
-
.accordion-phase-ok { color: #28a745; }
|
|
147
|
-
.accordion-phase-error { color: #dc3545; }
|
|
148
|
-
.accordion-phase-busy { color: #28a745; }
|
|
115
|
+
.accordion-phase-ok { color: var(--theme-color-status-success, #28a745); }
|
|
116
|
+
.accordion-phase-error { color: var(--theme-color-status-error, #dc3545); }
|
|
117
|
+
.accordion-phase-busy { color: var(--theme-color-status-success, #28a745); }
|
|
149
118
|
.accordion-phase-busy .phase-spinner {
|
|
150
119
|
display: inline-block; width: 14px; height: 14px;
|
|
151
|
-
border: 2px solid #28a745; border-top-color: transparent; border-radius: 50%;
|
|
120
|
+
border: 2px solid var(--theme-color-status-success, #28a745); border-top-color: transparent; border-radius: 50%;
|
|
152
121
|
animation: phase-spin 0.8s linear infinite; vertical-align: middle;
|
|
153
122
|
}
|
|
154
123
|
@keyframes phase-spin {
|
|
@@ -160,30 +129,30 @@ h2 { margin-bottom: 12px; color: #444; font-size: 1.2em; border-bottom: 2px soli
|
|
|
160
129
|
}
|
|
161
130
|
.accordion-controls button {
|
|
162
131
|
padding: 4px 10px; font-size: 0.82em; font-weight: 500; background: none;
|
|
163
|
-
border: 1px solid #ccc; border-radius: 4px; color: #666; cursor: pointer; margin: 0;
|
|
132
|
+
border: 1px solid var(--theme-color-border-default, #ccc); border-radius: 4px; color: var(--theme-color-text-secondary, #666); cursor: pointer; margin: 0;
|
|
164
133
|
}
|
|
165
|
-
.accordion-controls button:hover { background: #f0f0f0; border-color: #aaa; color: #333; }
|
|
134
|
+
.accordion-controls button:hover { background: var(--theme-color-background-tertiary, #f0f0f0); border-color: var(--theme-color-text-muted, #aaa); color: var(--theme-color-text-primary, #333); }
|
|
166
135
|
|
|
167
136
|
label { display: block; font-weight: 600; margin-bottom: 4px; font-size: 0.9em; }
|
|
168
137
|
input[type="text"], input[type="password"], input[type="number"] {
|
|
169
|
-
width: 100%; padding: 8px 12px; border: 1px solid #ccc; border-radius: 4px;
|
|
138
|
+
width: 100%; padding: 8px 12px; border: 1px solid var(--theme-color-border-default, #ccc); border-radius: 4px;
|
|
170
139
|
font-size: 0.95em; margin-bottom: 10px;
|
|
171
140
|
}
|
|
172
141
|
input[type="text"]:focus, input[type="password"]:focus, input[type="number"]:focus {
|
|
173
|
-
outline: none; border-color: #4a90d9;
|
|
142
|
+
outline: none; border-color: var(--theme-color-brand-primary, #4a90d9);
|
|
174
143
|
}
|
|
175
144
|
|
|
176
145
|
button {
|
|
177
146
|
padding: 8px 16px; border: none; border-radius: 4px; cursor: pointer;
|
|
178
147
|
font-size: 0.9em; font-weight: 600; margin-right: 8px; margin-bottom: 8px;
|
|
179
148
|
}
|
|
180
|
-
button.primary { background: #4a90d9; color: #fff; }
|
|
181
|
-
button.primary:hover { background: #357abd; }
|
|
182
|
-
button.secondary { background: #6c757d; color: #fff; }
|
|
149
|
+
button.primary { background: var(--theme-color-brand-primary, #4a90d9); color: var(--theme-color-background-panel, #fff); }
|
|
150
|
+
button.primary:hover { background: var(--theme-color-brand-primary-hover, #357abd); }
|
|
151
|
+
button.secondary { background: var(--theme-color-text-secondary, #6c757d); color: var(--theme-color-background-panel, #fff); }
|
|
183
152
|
button.secondary:hover { background: #5a6268; }
|
|
184
|
-
button.danger { background: #dc3545; color: #fff; }
|
|
153
|
+
button.danger { background: var(--theme-color-status-error, #dc3545); color: var(--theme-color-background-panel, #fff); }
|
|
185
154
|
button.danger:hover { background: #c82333; }
|
|
186
|
-
button.success { background: #28a745; color: #fff; }
|
|
155
|
+
button.success { background: var(--theme-color-status-success, #28a745); color: var(--theme-color-background-panel, #fff); }
|
|
187
156
|
button.success:hover { background: #218838; }
|
|
188
157
|
button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
189
158
|
|
|
@@ -196,9 +165,9 @@ button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
|
196
165
|
.inline-group { display: flex; gap: 8px; align-items: flex-end; margin-bottom: 10px; }
|
|
197
166
|
.inline-group > div { flex: 1; }
|
|
198
167
|
|
|
199
|
-
a { color: #4a90d9; }
|
|
168
|
+
a { color: var(--theme-color-brand-primary, #4a90d9); }
|
|
200
169
|
|
|
201
|
-
select { background: #fff; width: 100%; padding: 8px 12px; border: 1px solid #ccc; border-radius: 4px; font-size: 0.95em; margin-bottom: 10px; }
|
|
170
|
+
select { background: var(--theme-color-background-panel, #fff); width: 100%; padding: 8px 12px; border: 1px solid var(--theme-color-border-default, #ccc); border-radius: 4px; font-size: 0.95em; margin-bottom: 10px; }
|
|
202
171
|
|
|
203
172
|
.checkbox-row { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
|
|
204
173
|
.checkbox-row input[type="checkbox"] { width: auto; margin: 0; }
|
|
@@ -206,53 +175,53 @@ select { background: #fff; width: 100%; padding: 8px 12px; border: 1px solid #cc
|
|
|
206
175
|
|
|
207
176
|
/* Live Status Bar */
|
|
208
177
|
.live-status-bar {
|
|
209
|
-
background: #fff; border-radius: 8px; margin-bottom: 16px;
|
|
178
|
+
background: var(--theme-color-background-panel, #fff); border-radius: 8px; margin-bottom: 16px;
|
|
210
179
|
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
|
211
|
-
position: sticky; top: 0; z-index: 100; border-left: 4px solid #6c757d;
|
|
180
|
+
position: sticky; top: 0; z-index: 100; border-left: 4px solid var(--theme-color-text-secondary, #6c757d);
|
|
212
181
|
}
|
|
213
|
-
.live-status-bar.phase-idle { border-left-color: #6c757d; }
|
|
214
|
-
.live-status-bar.phase-disconnected { border-left-color: #dc3545; }
|
|
215
|
-
.live-status-bar.phase-ready { border-left-color: #4a90d9; }
|
|
216
|
-
.live-status-bar.phase-loading { border-left-color: #28a745; }
|
|
217
|
-
.live-status-bar.phase-stopping { border-left-color: #ffc107; }
|
|
218
|
-
.live-status-bar.phase-complete { border-left-color: #28a745; }
|
|
182
|
+
.live-status-bar.phase-idle { border-left-color: var(--theme-color-text-secondary, #6c757d); }
|
|
183
|
+
.live-status-bar.phase-disconnected { border-left-color: var(--theme-color-status-error, #dc3545); }
|
|
184
|
+
.live-status-bar.phase-ready { border-left-color: var(--theme-color-brand-primary, #4a90d9); }
|
|
185
|
+
.live-status-bar.phase-loading { border-left-color: var(--theme-color-status-success, #28a745); }
|
|
186
|
+
.live-status-bar.phase-stopping { border-left-color: var(--theme-color-status-warning, #ffc107); }
|
|
187
|
+
.live-status-bar.phase-complete { border-left-color: var(--theme-color-status-success, #28a745); }
|
|
219
188
|
|
|
220
189
|
.live-status-dot {
|
|
221
190
|
width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0;
|
|
222
|
-
background: #6c757d;
|
|
191
|
+
background: var(--theme-color-text-secondary, #6c757d);
|
|
223
192
|
}
|
|
224
|
-
.live-status-bar.phase-idle .live-status-dot { background: #6c757d; }
|
|
225
|
-
.live-status-bar.phase-disconnected .live-status-dot { background: #dc3545; }
|
|
226
|
-
.live-status-bar.phase-ready .live-status-dot { background: #4a90d9; }
|
|
193
|
+
.live-status-bar.phase-idle .live-status-dot { background: var(--theme-color-text-secondary, #6c757d); }
|
|
194
|
+
.live-status-bar.phase-disconnected .live-status-dot { background: var(--theme-color-status-error, #dc3545); }
|
|
195
|
+
.live-status-bar.phase-ready .live-status-dot { background: var(--theme-color-brand-primary, #4a90d9); }
|
|
227
196
|
.live-status-bar.phase-loading .live-status-dot {
|
|
228
|
-
background: #28a745;
|
|
197
|
+
background: var(--theme-color-status-success, #28a745);
|
|
229
198
|
animation: live-pulse 1.5s ease-in-out infinite;
|
|
230
199
|
}
|
|
231
200
|
.live-status-bar.phase-stopping .live-status-dot {
|
|
232
|
-
background: #ffc107;
|
|
201
|
+
background: var(--theme-color-status-warning, #ffc107);
|
|
233
202
|
animation: live-pulse 0.8s ease-in-out infinite;
|
|
234
203
|
}
|
|
235
|
-
.live-status-bar.phase-complete .live-status-dot { background: #28a745; }
|
|
204
|
+
.live-status-bar.phase-complete .live-status-dot { background: var(--theme-color-status-success, #28a745); }
|
|
236
205
|
|
|
237
206
|
@keyframes live-pulse {
|
|
238
207
|
0%, 100% { opacity: 1; transform: scale(1); }
|
|
239
208
|
50% { opacity: 0.4; transform: scale(0.8); }
|
|
240
209
|
}
|
|
241
210
|
|
|
242
|
-
.live-status-message { flex: 1; font-size: 0.92em; color: #333; line-height: 1.4; }
|
|
211
|
+
.live-status-message { flex: 1; font-size: 0.92em; color: var(--theme-color-text-primary, #333); line-height: 1.4; }
|
|
243
212
|
|
|
244
213
|
.live-status-meta {
|
|
245
|
-
display: flex; gap: 16px; flex-shrink: 0; font-size: 0.82em; color: #666;
|
|
214
|
+
display: flex; gap: 16px; flex-shrink: 0; font-size: 0.82em; color: var(--theme-color-text-secondary, #666);
|
|
246
215
|
}
|
|
247
216
|
.live-status-meta-item { white-space: nowrap; }
|
|
248
|
-
.live-status-meta-item strong { color: #333; }
|
|
217
|
+
.live-status-meta-item strong { color: var(--theme-color-text-primary, #333); }
|
|
249
218
|
|
|
250
219
|
.live-status-progress-bar {
|
|
251
|
-
height: 3px; background: #e9ecef; border-radius: 2px; overflow: hidden;
|
|
220
|
+
height: 3px; background: var(--theme-color-background-tertiary, #e9ecef); border-radius: 2px; overflow: hidden;
|
|
252
221
|
position: absolute; bottom: 0; left: 0; right: 0;
|
|
253
222
|
}
|
|
254
223
|
.live-status-progress-fill {
|
|
255
|
-
height: 100%; background: #28a745; transition: width 1s ease;
|
|
224
|
+
height: 100%; background: var(--theme-color-status-success, #28a745); transition: width 1s ease;
|
|
256
225
|
}
|
|
257
226
|
/* Expandable status bar */
|
|
258
227
|
.live-status-header {
|
|
@@ -260,11 +229,11 @@ select { background: #fff; width: 100%; padding: 8px 12px; border: 1px solid #cc
|
|
|
260
229
|
padding: 14px 20px; user-select: none;
|
|
261
230
|
}
|
|
262
231
|
.live-status-bar.expanded .live-status-header {
|
|
263
|
-
border-bottom: 1px solid #e9ecef; padding-bottom: 10px;
|
|
232
|
+
border-bottom: 1px solid var(--theme-color-background-tertiary, #e9ecef); padding-bottom: 10px;
|
|
264
233
|
}
|
|
265
234
|
.live-status-expand-toggle {
|
|
266
235
|
flex: 0 0 20px; display: flex; align-items: center; justify-content: center;
|
|
267
|
-
font-size: 0.7em; color: #888; transition: transform 0.25s;
|
|
236
|
+
font-size: 0.7em; color: var(--theme-color-text-muted, #888); transition: transform 0.25s;
|
|
268
237
|
}
|
|
269
238
|
.live-status-bar.expanded .live-status-expand-toggle { transform: rotate(180deg); }
|
|
270
239
|
|
|
@@ -276,9 +245,9 @@ select { background: #fff; width: 100%; padding: 8px 12px; border: 1px solid #cc
|
|
|
276
245
|
.status-detail-section { margin-bottom: 14px; }
|
|
277
246
|
.status-detail-section:last-child { margin-bottom: 0; }
|
|
278
247
|
.status-detail-section-title {
|
|
279
|
-
font-size: 0.85em; font-weight: 600; color: #555; text-transform: uppercase;
|
|
248
|
+
font-size: 0.85em; font-weight: 600; color: var(--theme-color-text-secondary, #555); text-transform: uppercase;
|
|
280
249
|
letter-spacing: 0.5px; margin-bottom: 8px; padding-bottom: 4px;
|
|
281
|
-
border-bottom: 1px solid #eee;
|
|
250
|
+
border-bottom: 1px solid var(--theme-color-border-light, #eee);
|
|
282
251
|
}
|
|
283
252
|
|
|
284
253
|
/* Running Operations */
|
|
@@ -288,30 +257,30 @@ select { background: #fff; width: 100%; padding: 8px 12px; border: 1px solid #cc
|
|
|
288
257
|
}
|
|
289
258
|
.running-op-name { font-weight: 600; min-width: 180px; }
|
|
290
259
|
.running-op-bar {
|
|
291
|
-
flex: 1; height: 8px; background: #e9ecef; border-radius: 4px; overflow: hidden;
|
|
260
|
+
flex: 1; height: 8px; background: var(--theme-color-background-tertiary, #e9ecef); border-radius: 4px; overflow: hidden;
|
|
292
261
|
min-width: 120px;
|
|
293
262
|
}
|
|
294
|
-
.running-op-bar-fill { height: 100%; background: #4a90d9; transition: width 0.5s ease; }
|
|
295
|
-
.running-op-count { font-size: 0.85em; color: #666; white-space: nowrap; }
|
|
296
|
-
.running-op-pending { color: #888; font-size: 0.85em; font-style: italic; padding: 4px 0; }
|
|
263
|
+
.running-op-bar-fill { height: 100%; background: var(--theme-color-brand-primary, #4a90d9); transition: width 0.5s ease; }
|
|
264
|
+
.running-op-count { font-size: 0.85em; color: var(--theme-color-text-secondary, #666); white-space: nowrap; }
|
|
265
|
+
.running-op-pending { color: var(--theme-color-text-muted, #888); font-size: 0.85em; font-style: italic; padding: 4px 0; }
|
|
297
266
|
|
|
298
267
|
/* Completed Operations */
|
|
299
|
-
.completed-op-row { padding: 8px 0; border-bottom: 1px solid #f0f0f0; }
|
|
268
|
+
.completed-op-row { padding: 8px 0; border-bottom: 1px solid var(--theme-color-background-tertiary, #f0f0f0); }
|
|
300
269
|
.completed-op-row:last-child { border-bottom: none; }
|
|
301
270
|
.completed-op-header {
|
|
302
271
|
display: flex; align-items: center; gap: 10px; font-size: 0.9em; margin-bottom: 4px;
|
|
303
272
|
}
|
|
304
273
|
.completed-op-name { font-weight: 600; }
|
|
305
|
-
.completed-op-stats { color: #666; font-size: 0.85em; }
|
|
306
|
-
.completed-op-checkmark { color: #28a745; }
|
|
274
|
+
.completed-op-stats { color: var(--theme-color-text-secondary, #666); font-size: 0.85em; }
|
|
275
|
+
.completed-op-checkmark { color: var(--theme-color-status-success, #28a745); }
|
|
307
276
|
|
|
308
277
|
/* Error Operations */
|
|
309
|
-
.error-op-row { padding: 6px 0; border-bottom: 1px solid #f0f0f0; font-size: 0.9em; }
|
|
278
|
+
.error-op-row { padding: 6px 0; border-bottom: 1px solid var(--theme-color-background-tertiary, #f0f0f0); font-size: 0.9em; }
|
|
310
279
|
.error-op-row:last-child { border-bottom: none; }
|
|
311
280
|
.error-op-header { display: flex; align-items: center; gap: 8px; }
|
|
312
|
-
.error-op-name { font-weight: 600; color: #dc3545; }
|
|
313
|
-
.error-op-status { font-size: 0.82em; color: #dc3545; }
|
|
314
|
-
.error-op-message { font-size: 0.82em; color: #888; margin-top: 2px; padding-left: 18px; }
|
|
281
|
+
.error-op-name { font-weight: 600; color: var(--theme-color-status-error, #dc3545); }
|
|
282
|
+
.error-op-status { font-size: 0.82em; color: var(--theme-color-status-error, #dc3545); }
|
|
283
|
+
.error-op-message { font-size: 0.82em; color: var(--theme-color-text-muted, #888); margin-top: 2px; padding-left: 18px; }
|
|
315
284
|
`,
|
|
316
285
|
Templates:
|
|
317
286
|
[
|
|
@@ -320,21 +289,6 @@ select { background: #fff; width: 100%; padding: 8px 12px; border: 1px solid #cc
|
|
|
320
289
|
Template: /*html*/`
|
|
321
290
|
<h1>Retold Comprehension Loader</h1>
|
|
322
291
|
|
|
323
|
-
<!-- Live Status Bar (Expandable) -->
|
|
324
|
-
<div id="liveStatusBar" class="live-status-bar phase-idle" style="position:relative">
|
|
325
|
-
<div class="live-status-header" onclick="pict.views['ComprehensionLoader-Layout'].toggleStatusDetail()">
|
|
326
|
-
<div class="live-status-dot"></div>
|
|
327
|
-
<div class="live-status-message" id="liveStatusMessage">Idle</div>
|
|
328
|
-
<div class="live-status-meta" id="liveStatusMeta"></div>
|
|
329
|
-
<div class="live-status-expand-toggle" id="liveStatusToggle">▼</div>
|
|
330
|
-
</div>
|
|
331
|
-
<div class="live-status-detail" id="liveStatusDetail" style="display:none">
|
|
332
|
-
<div id="ComprehensionLoader-Throughput-Histogram"></div>
|
|
333
|
-
<div id="ComprehensionLoader-StatusDetail-Container"></div>
|
|
334
|
-
</div>
|
|
335
|
-
<div class="live-status-progress-bar"><div class="live-status-progress-fill" id="liveStatusProgressFill" style="width:0%"></div></div>
|
|
336
|
-
</div>
|
|
337
|
-
|
|
338
292
|
<!-- Expand / Collapse All -->
|
|
339
293
|
<div class="accordion-controls">
|
|
340
294
|
<button onclick="pict.views['ComprehensionLoader-Layout'].expandAllSections()">Expand All</button>
|
|
@@ -354,7 +308,7 @@ select { background: #fff; width: 100%; padding: 8px 12px; border: 1px solid #cc
|
|
|
354
308
|
{
|
|
355
309
|
RenderableHash: 'ComprehensionLoader-Layout',
|
|
356
310
|
TemplateHash: 'ComprehensionLoader-Layout',
|
|
357
|
-
DestinationAddress: '#ComprehensionLoader-
|
|
311
|
+
DestinationAddress: '#ComprehensionLoader-Workspace'
|
|
358
312
|
}
|
|
359
313
|
]
|
|
360
314
|
};
|
package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Load.js
CHANGED
|
@@ -138,7 +138,7 @@ class ComprehensionLoaderLoadView extends libPictView
|
|
|
138
138
|
|
|
139
139
|
let tmpCardsContainer = document.getElementById('reportSummaryCards');
|
|
140
140
|
let tmpOutcomeClass = 'outcome-' + pReport.Outcome.toLowerCase();
|
|
141
|
-
let tmpOutcomeColor = { Success: '#28a745', Partial: '#ffc107', Error: '#dc3545', Stopped: '#6c757d' }[pReport.Outcome] || '#666';
|
|
141
|
+
let tmpOutcomeColor = { Success: 'var(--theme-color-status-success, #28a745)', Partial: 'var(--theme-color-status-warning, #ffc107)', Error: 'var(--theme-color-status-error, #dc3545)', Stopped: 'var(--theme-color-text-secondary, #6c757d)' }[pReport.Outcome] || 'var(--theme-color-text-secondary, #666)';
|
|
142
142
|
|
|
143
143
|
let tmpDurationSec = pReport.RunTimestamps.DurationSeconds || 0;
|
|
144
144
|
let tmpDurationStr = tmpDurationSec < 60 ? tmpDurationSec + 's' : Math.floor(tmpDurationSec / 60) + 'm ' + (tmpDurationSec % 60) + 's';
|
|
@@ -162,24 +162,24 @@ class ComprehensionLoaderLoadView extends libPictView
|
|
|
162
162
|
+ '<div class="report-card">'
|
|
163
163
|
+ ' <div class="card-label">Records Pushed</div>'
|
|
164
164
|
+ ' <div class="card-value">' + tmpTotalPushed + '</div>'
|
|
165
|
-
+ ' <div style="font-size:0.75em; color
|
|
165
|
+
+ ' <div style="font-size:0.75em; color:var(--theme-color-text-muted, #888)">of ' + tmpTotalRecords + '</div>'
|
|
166
166
|
+ '</div>';
|
|
167
167
|
|
|
168
168
|
// Anomalies
|
|
169
169
|
let tmpAnomalyContainer = document.getElementById('reportAnomalies');
|
|
170
170
|
if (pReport.Anomalies.length === 0)
|
|
171
171
|
{
|
|
172
|
-
tmpAnomalyContainer.innerHTML = '<div style="color
|
|
172
|
+
tmpAnomalyContainer.innerHTML = '<div style="color:var(--theme-color-status-success, #28a745); font-weight:600; font-size:0.9em">No anomalies detected.</div>';
|
|
173
173
|
}
|
|
174
174
|
else
|
|
175
175
|
{
|
|
176
|
-
let tmpHtml = '<h4 style="margin:0 0 8px; color
|
|
176
|
+
let tmpHtml = '<h4 style="margin:0 0 8px; color:var(--theme-color-status-error, #dc3545); font-size:0.95em">Anomalies (' + pReport.Anomalies.length + ')</h4>';
|
|
177
177
|
tmpHtml += '<table class="progress-table">';
|
|
178
178
|
tmpHtml += '<tr><th>Entity</th><th>Type</th><th>Message</th></tr>';
|
|
179
179
|
for (let i = 0; i < pReport.Anomalies.length; i++)
|
|
180
180
|
{
|
|
181
181
|
let tmpAnomaly = pReport.Anomalies[i];
|
|
182
|
-
let tmpTypeColor = tmpAnomaly.Type === 'Error' ? '#dc3545' : '#6c757d';
|
|
182
|
+
let tmpTypeColor = tmpAnomaly.Type === 'Error' ? 'var(--theme-color-status-error, #dc3545)' : 'var(--theme-color-text-secondary, #6c757d)';
|
|
183
183
|
tmpHtml += '<tr>';
|
|
184
184
|
tmpHtml += '<td><strong>' + this.pict.providers.ComprehensionLoader.escapeHtml(tmpAnomaly.Entity) + '</strong></td>';
|
|
185
185
|
tmpHtml += '<td style="color:' + tmpTypeColor + '">' + tmpAnomaly.Type + '</td>';
|
|
@@ -194,7 +194,7 @@ class ComprehensionLoaderLoadView extends libPictView
|
|
|
194
194
|
let tmpEntityContainer = document.getElementById('reportEntityDetails');
|
|
195
195
|
if (pReport.Entities && pReport.Entities.length > 0)
|
|
196
196
|
{
|
|
197
|
-
let tmpHtml = '<h4 style="margin:0 0 8px; font-size:0.95em; color
|
|
197
|
+
let tmpHtml = '<h4 style="margin:0 0 8px; font-size:0.95em; color:var(--theme-color-text-secondary, #444)">Entity Details</h4>';
|
|
198
198
|
tmpHtml += '<table class="progress-table">';
|
|
199
199
|
tmpHtml += '<tr><th>Entity</th><th>Duration</th><th>Records</th><th>Status</th></tr>';
|
|
200
200
|
for (let i = 0; i < pReport.Entities.length; i++)
|
|
@@ -202,7 +202,7 @@ class ComprehensionLoaderLoadView extends libPictView
|
|
|
202
202
|
let tmpEntity = pReport.Entities[i];
|
|
203
203
|
let tmpDur = tmpEntity.DurationSeconds < 60 ? tmpEntity.DurationSeconds + 's' : Math.floor(tmpEntity.DurationSeconds / 60) + 'm ' + (tmpEntity.DurationSeconds % 60) + 's';
|
|
204
204
|
let tmpRecs = this.pict.providers.ComprehensionLoader.formatNumber(tmpEntity.Pushed);
|
|
205
|
-
let tmpStatusColor = { Complete: '#28a745', Error: '#dc3545' }[tmpEntity.Status] || '#666';
|
|
205
|
+
let tmpStatusColor = { Complete: 'var(--theme-color-status-success, #28a745)', Error: 'var(--theme-color-status-error, #dc3545)' }[tmpEntity.Status] || 'var(--theme-color-text-secondary, #666)';
|
|
206
206
|
tmpHtml += '<tr>';
|
|
207
207
|
tmpHtml += '<td><strong>' + this.pict.providers.ComprehensionLoader.escapeHtml(tmpEntity.Name) + '</strong></td>';
|
|
208
208
|
tmpHtml += '<td>' + tmpDur + '</td>';
|
|
@@ -303,10 +303,10 @@ class ComprehensionLoaderLoadView extends libPictView
|
|
|
303
303
|
tmpPct = Math.round((pEntity.Pushed / pEntity.Total) * 100);
|
|
304
304
|
}
|
|
305
305
|
|
|
306
|
-
let tmpBarColor = '#28a745';
|
|
307
|
-
if (pEntity.Status === 'Error') tmpBarColor = '#dc3545';
|
|
308
|
-
else if (pEntity.Status === 'Pushing') tmpBarColor = '#4a90d9';
|
|
309
|
-
else if (pEntity.Status === 'Pending') tmpBarColor = '#adb5bd';
|
|
306
|
+
let tmpBarColor = 'var(--theme-color-status-success, #28a745)';
|
|
307
|
+
if (pEntity.Status === 'Error') tmpBarColor = 'var(--theme-color-status-error, #dc3545)';
|
|
308
|
+
else if (pEntity.Status === 'Pushing') tmpBarColor = 'var(--theme-color-brand-primary, #4a90d9)';
|
|
309
|
+
else if (pEntity.Status === 'Pending') tmpBarColor = 'var(--theme-color-text-muted, #adb5bd)';
|
|
310
310
|
|
|
311
311
|
let tmpRow = '<tr>';
|
|
312
312
|
tmpRow += '<td><strong>' + pName + '</strong></td>';
|
|
@@ -394,25 +394,25 @@ module.exports.default_configuration =
|
|
|
394
394
|
DefaultDestinationAddress: '#ComprehensionLoader-Section-Load',
|
|
395
395
|
CSS: /*css*/`
|
|
396
396
|
.progress-table { width: 100%; border-collapse: collapse; margin-top: 4px; margin-bottom: 4px; }
|
|
397
|
-
.progress-table th, .progress-table td { text-align: left; padding: 6px 12px; border-bottom: 1px solid #eee; font-size: 0.9em; }
|
|
398
|
-
.progress-table th { background: #f8f9fa; font-weight: 600; }
|
|
399
|
-
.progress-table-muted td { color: #888; padding: 3px 12px; font-size: 0.85em; border-bottom: 1px solid #f4f5f6; }
|
|
400
|
-
.progress-bar-container { width: 120px; height: 16px; background: #e9ecef; border-radius: 8px; overflow: hidden; display: inline-block; vertical-align: middle; }
|
|
401
|
-
.progress-bar-fill { height: 100%; background: #28a745; transition: width 0.3s; }
|
|
402
|
-
.sync-section-header { font-size: 0.8em; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: #4a90d9; padding: 10px 0 2px 0; margin-top: 6px; border-top: 1px solid #e0e0e0; }
|
|
397
|
+
.progress-table th, .progress-table td { text-align: left; padding: 6px 12px; border-bottom: 1px solid var(--theme-color-border-light, #eee); font-size: 0.9em; }
|
|
398
|
+
.progress-table th { background: var(--theme-color-background-secondary, #f8f9fa); font-weight: 600; }
|
|
399
|
+
.progress-table-muted td { color: var(--theme-color-text-muted, #888); padding: 3px 12px; font-size: 0.85em; border-bottom: 1px solid var(--theme-color-background-secondary, #f4f5f6); }
|
|
400
|
+
.progress-bar-container { width: 120px; height: 16px; background: var(--theme-color-background-tertiary, #e9ecef); border-radius: 8px; overflow: hidden; display: inline-block; vertical-align: middle; }
|
|
401
|
+
.progress-bar-fill { height: 100%; background: var(--theme-color-status-success, #28a745); transition: width 0.3s; }
|
|
402
|
+
.sync-section-header { font-size: 0.8em; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--theme-color-brand-primary, #4a90d9); padding: 10px 0 2px 0; margin-top: 6px; border-top: 1px solid var(--theme-color-border-default, #e0e0e0); }
|
|
403
403
|
.sync-section-header:first-child { border-top: none; margin-top: 10px; }
|
|
404
|
-
.sync-section-header-error { color: #dc3545; }
|
|
405
|
-
.sync-section-header-ok { color: #28a745; }
|
|
406
|
-
.sync-section-count { font-weight: 400; color: #999; font-size: 0.95em; }
|
|
407
|
-
.sync-section-overflow { font-size: 0.8em; color: #aaa; padding: 2px 12px 6px; }
|
|
408
|
-
.sync-pending-count { text-align: right; color: #aaa; font-size: 0.85em; }
|
|
409
|
-
.report-card { background: #f8f9fa; border-radius: 8px; padding: 12px 16px; min-width: 140px; text-align: center; border: 1px solid #e9ecef; }
|
|
410
|
-
.report-card .card-label { font-size: 0.8em; color: #666; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }
|
|
404
|
+
.sync-section-header-error { color: var(--theme-color-status-error, #dc3545); }
|
|
405
|
+
.sync-section-header-ok { color: var(--theme-color-status-success, #28a745); }
|
|
406
|
+
.sync-section-count { font-weight: 400; color: var(--theme-color-text-muted, #999); font-size: 0.95em; }
|
|
407
|
+
.sync-section-overflow { font-size: 0.8em; color: var(--theme-color-text-muted, #aaa); padding: 2px 12px 6px; }
|
|
408
|
+
.sync-pending-count { text-align: right; color: var(--theme-color-text-muted, #aaa); font-size: 0.85em; }
|
|
409
|
+
.report-card { background: var(--theme-color-background-secondary, #f8f9fa); border-radius: 8px; padding: 12px 16px; min-width: 140px; text-align: center; border: 1px solid var(--theme-color-background-tertiary, #e9ecef); }
|
|
410
|
+
.report-card .card-label { font-size: 0.8em; color: var(--theme-color-text-secondary, #666); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }
|
|
411
411
|
.report-card .card-value { font-size: 1.4em; font-weight: 700; }
|
|
412
|
-
.report-card.outcome-success { border-left: 4px solid #28a745; }
|
|
413
|
-
.report-card.outcome-partial { border-left: 4px solid #ffc107; }
|
|
414
|
-
.report-card.outcome-error { border-left: 4px solid #dc3545; }
|
|
415
|
-
.report-card.outcome-stopped { border-left: 4px solid #6c757d; }
|
|
412
|
+
.report-card.outcome-success { border-left: 4px solid var(--theme-color-status-success, #28a745); }
|
|
413
|
+
.report-card.outcome-partial { border-left: 4px solid var(--theme-color-status-warning, #ffc107); }
|
|
414
|
+
.report-card.outcome-error { border-left: 4px solid var(--theme-color-status-error, #dc3545); }
|
|
415
|
+
.report-card.outcome-stopped { border-left: 4px solid var(--theme-color-text-secondary, #6c757d); }
|
|
416
416
|
`,
|
|
417
417
|
Templates:
|
|
418
418
|
[
|
|
@@ -442,7 +442,7 @@ module.exports.default_configuration =
|
|
|
442
442
|
<div id="loadProgress"></div>
|
|
443
443
|
|
|
444
444
|
<!-- Load Report (appears after load completes) -->
|
|
445
|
-
<div id="loadReportSection" style="display:none; margin-top:16px; padding-top:16px; border-top:2px solid #ddd">
|
|
445
|
+
<div id="loadReportSection" style="display:none; margin-top:16px; padding-top:16px; border-top:2px solid var(--theme-color-border-default, #ddd)">
|
|
446
446
|
<h3 style="margin:0 0 12px; font-size:1.1em">Load Report</h3>
|
|
447
447
|
|
|
448
448
|
<div id="reportSummaryCards" style="display:flex; gap:12px; flex-wrap:wrap; margin-bottom:16px"></div>
|
package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Schema.js
CHANGED
|
@@ -53,14 +53,14 @@ class ComprehensionLoaderSchemaView extends libPictView
|
|
|
53
53
|
|
|
54
54
|
if (tmpEntities.length === 0)
|
|
55
55
|
{
|
|
56
|
-
tmpContainer.innerHTML = '<div style="color
|
|
56
|
+
tmpContainer.innerHTML = '<div style="color:var(--theme-color-text-muted, #888); font-size:0.9em">No entities found.</div>';
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
let tmpHtml = '<div style="font-size:0.9em; color
|
|
60
|
+
let tmpHtml = '<div style="font-size:0.9em; color:var(--theme-color-text-secondary, #555)">';
|
|
61
61
|
for (let i = 0; i < tmpEntities.length; i++)
|
|
62
62
|
{
|
|
63
|
-
tmpHtml += '<span style="display:inline-block; background
|
|
63
|
+
tmpHtml += '<span style="display:inline-block; background:var(--theme-color-background-tertiary, #f0f0f0); border-radius:4px; padding:2px 8px; margin:2px 4px 2px 0; font-size:0.9em">';
|
|
64
64
|
tmpHtml += this.pict.providers.ComprehensionLoader.escapeHtml(tmpEntities[i]);
|
|
65
65
|
tmpHtml += '</span>';
|
|
66
66
|
}
|
package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Session.js
CHANGED
|
@@ -215,7 +215,7 @@ module.exports.default_configuration =
|
|
|
215
215
|
</div>
|
|
216
216
|
|
|
217
217
|
<details style="margin-bottom:10px">
|
|
218
|
-
<summary style="cursor:pointer; font-size:0.9em; color
|
|
218
|
+
<summary style="cursor:pointer; font-size:0.9em; color:var(--theme-color-text-secondary, #666)">Advanced Session Options</summary>
|
|
219
219
|
<div style="padding:10px 0">
|
|
220
220
|
<label for="authURI">Authentication URI Template (leave blank for default)</label>
|
|
221
221
|
<input type="text" id="authURI" placeholder="Authenticate/{~D:Record.UserName~}/{~D:Record.Password~}">
|
|
@@ -235,7 +235,7 @@ module.exports.default_configuration =
|
|
|
235
235
|
<button class="primary" onclick="pict.views['ComprehensionLoader-Session'].configureSession()">Configure Session</button>
|
|
236
236
|
<div id="sessionConfigStatus"></div>
|
|
237
237
|
|
|
238
|
-
<hr style="margin:16px 0; border:none; border-top:1px solid #eee">
|
|
238
|
+
<hr style="margin:16px 0; border:none; border-top:1px solid var(--theme-color-border-light, #eee)">
|
|
239
239
|
|
|
240
240
|
<div class="inline-group">
|
|
241
241
|
<div>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const libPictView = require('pict-view');
|
|
4
|
+
|
|
5
|
+
class ComprehensionLoaderSettingsPanelView extends libPictView
|
|
6
|
+
{
|
|
7
|
+
onAfterRender(pRenderable, pAddress, pRecord, pContent)
|
|
8
|
+
{
|
|
9
|
+
if (this.pict.CSSMap) { this.pict.CSSMap.injectCSS(); }
|
|
10
|
+
|
|
11
|
+
// Re-mount theme controls on every render — the template wipes the destination div.
|
|
12
|
+
let tmpTheme = this.pict.providers && this.pict.providers['Theme-Section'];
|
|
13
|
+
if (tmpTheme && typeof tmpTheme.mount === 'function')
|
|
14
|
+
{
|
|
15
|
+
tmpTheme.mount({
|
|
16
|
+
Container: '#ComprehensionLoader-Settings-Theme',
|
|
17
|
+
Views: ['Picker', 'ModeToggle', 'ScaleSelect']
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return super.onAfterRender(pRenderable, pAddress, pRecord, pContent);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = ComprehensionLoaderSettingsPanelView;
|
|
25
|
+
|
|
26
|
+
module.exports.default_configuration =
|
|
27
|
+
{
|
|
28
|
+
ViewIdentifier: 'ComprehensionLoader-SettingsPanel',
|
|
29
|
+
DefaultRenderable: 'ComprehensionLoader-SettingsPanel',
|
|
30
|
+
DefaultDestinationAddress: '#ComprehensionLoader-Settings-Panel',
|
|
31
|
+
AutoRender: false,
|
|
32
|
+
CSS: /*css*/`
|
|
33
|
+
.rds-settings-body {
|
|
34
|
+
padding: 12px;
|
|
35
|
+
display: flex; flex-direction: column; gap: 16px;
|
|
36
|
+
color: var(--theme-color-text-primary, #333333);
|
|
37
|
+
}
|
|
38
|
+
.rds-settings-section { display: flex; flex-direction: column; gap: 6px; }
|
|
39
|
+
.rds-settings-label {
|
|
40
|
+
font-size: 0.85em;
|
|
41
|
+
font-weight: 600;
|
|
42
|
+
text-transform: uppercase;
|
|
43
|
+
letter-spacing: 0.04em;
|
|
44
|
+
color: var(--theme-color-text-secondary, #555555);
|
|
45
|
+
}
|
|
46
|
+
`,
|
|
47
|
+
Templates: [{
|
|
48
|
+
Hash: 'ComprehensionLoader-SettingsPanel',
|
|
49
|
+
Template: /*html*/`
|
|
50
|
+
<div class="rds-settings-body">
|
|
51
|
+
<div class="rds-settings-section">
|
|
52
|
+
<div class="rds-settings-label">Appearance</div>
|
|
53
|
+
<div id="ComprehensionLoader-Settings-Theme"></div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>`
|
|
56
|
+
}],
|
|
57
|
+
Renderables: [{
|
|
58
|
+
RenderableHash: 'ComprehensionLoader-SettingsPanel',
|
|
59
|
+
TemplateHash: 'ComprehensionLoader-SettingsPanel',
|
|
60
|
+
DestinationAddress: '#ComprehensionLoader-Settings-Panel'
|
|
61
|
+
}]
|
|
62
|
+
};
|