@dataengineeringformachinelearning/viking-ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@dataengineeringformachinelearning/viking-ui",
3
+ "version": "1.0.0",
4
+ "description": "Viking-UI: DEML clinical design system for Angular. Flux + Spartan-inspired patterns, THEME.md palette only.",
5
+ "keywords": [
6
+ "angular",
7
+ "ui",
8
+ "viking-ui",
9
+ "design-system",
10
+ "deml",
11
+ "a11y"
12
+ ],
13
+ "license": "UNLICENSED",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "peerDependencies": {
18
+ "@angular/common": "^22.0.0",
19
+ "@angular/core": "^22.0.0",
20
+ "@angular/forms": "^22.0.0"
21
+ },
22
+ "dependencies": {
23
+ "tslib": "^2.3.0"
24
+ },
25
+ "sideEffects": false,
26
+ "module": "fesm2022/dataengineeringformachinelearning-viking-ui.mjs",
27
+ "typings": "types/dataengineeringformachinelearning-viking-ui.d.ts",
28
+ "exports": {
29
+ "./package.json": {
30
+ "default": "./package.json"
31
+ },
32
+ ".": {
33
+ "types": "./types/dataengineeringformachinelearning-viking-ui.d.ts",
34
+ "default": "./fesm2022/dataengineeringformachinelearning-viking-ui.mjs"
35
+ }
36
+ },
37
+ "type": "module"
38
+ }
@@ -0,0 +1,83 @@
1
+ // Marketing / static section shell — Tailwind-inspired structure, Viking tokens only.
2
+ // Full-bleed sections with constrained inner content at 1260px.
3
+
4
+ .viking-page-shell,
5
+ .page-inner-wrapper {
6
+ width: 100%;
7
+ max-width: var(--viking-container-max-width, var(--container-max-width, 1260px));
8
+ margin-inline: auto;
9
+ padding-inline: var(--viking-space-2, var(--space-2, 16px));
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ .viking-section {
14
+ width: 100%;
15
+ padding-block: var(--viking-space-6, var(--space-6, 48px));
16
+ }
17
+
18
+ .viking-section--compact {
19
+ padding-block: var(--viking-space-4, var(--space-4, 32px));
20
+ }
21
+
22
+ .viking-section--hero {
23
+ padding-block: var(--viking-space-6, var(--space-6, 48px)) var(--viking-space-4, var(--space-4, 32px));
24
+
25
+ @media (min-width: 768px) {
26
+ padding-block: calc(var(--viking-space-6, 48px) + var(--viking-space-2, 16px))
27
+ var(--viking-space-6, 48px);
28
+ }
29
+ }
30
+
31
+ .viking-section-inner {
32
+ width: 100%;
33
+ max-width: var(--viking-container-max-width, var(--container-max-width, 1260px));
34
+ margin-inline: auto;
35
+ padding-inline: var(--viking-space-2, var(--space-2, 16px));
36
+ box-sizing: border-box;
37
+ }
38
+
39
+ .viking-section-header {
40
+ display: flex;
41
+ flex-direction: column;
42
+ gap: var(--viking-space-1, var(--space-1, 8px));
43
+ margin-bottom: var(--viking-space-4, var(--space-4, 32px));
44
+ max-width: 48rem;
45
+ }
46
+
47
+ .viking-section-title {
48
+ margin: 0;
49
+ font-family: var(--viking-font-family, 'Inter', sans-serif);
50
+ font-size: clamp(1.5rem, 3vw, 2rem);
51
+ font-weight: 700;
52
+ letter-spacing: var(--header-letter-spacing, -0.02em);
53
+ color: var(--viking-text, var(--text-color));
54
+ }
55
+
56
+ .viking-section-lead {
57
+ margin: 0;
58
+ font-family: var(--viking-font-family, 'Inter', sans-serif);
59
+ font-size: var(--viking-font-size, var(--base-font-size, 16px));
60
+ line-height: 1.6;
61
+ color: var(--viking-text-muted, var(--text-muted));
62
+ }
63
+
64
+ .viking-cta-row {
65
+ display: flex;
66
+ flex-direction: column;
67
+ gap: var(--viking-space-2, var(--space-2, 16px));
68
+ align-items: stretch;
69
+ width: 100%;
70
+
71
+ @media (min-width: 600px) {
72
+ flex-direction: row;
73
+ flex-wrap: wrap;
74
+ align-items: center;
75
+ width: auto;
76
+ }
77
+ }
78
+
79
+ .viking-cta-row .viking-btn,
80
+ .viking-cta-row a.viking-btn,
81
+ .viking-cta-row a.cta-button {
82
+ min-width: var(--viking-btn-min-width, var(--btn-min-width, 120px));
83
+ }
@@ -0,0 +1,229 @@
1
+ // Shared dashboard page chrome — metrics, panels, cards, loaders (viking-ui).
2
+ // Page width shell lives in layout-shell.scss (.viking-page-shell / .page-inner-wrapper).
3
+
4
+ .viking-metric-row,
5
+ .hud-metrics {
6
+ display: grid;
7
+ grid-template-columns: repeat(2, 1fr);
8
+ gap: var(--viking-space-2);
9
+ margin-bottom: var(--viking-space-2);
10
+
11
+ @media (min-width: 600px) {
12
+ grid-template-columns: repeat(4, 1fr);
13
+ }
14
+
15
+ @media (min-width: 768px) {
16
+ grid-template-columns: repeat(12, 1fr);
17
+ }
18
+ }
19
+
20
+ .viking-metric-card,
21
+ .metric-card {
22
+ display: flex;
23
+ flex-direction: column;
24
+ background-color: var(--viking-surface);
25
+ border: 1px solid var(--viking-border);
26
+ padding: var(--viking-space-2);
27
+ border-radius: var(--viking-radius);
28
+ min-width: 0;
29
+ align-items: flex-end;
30
+ box-sizing: border-box;
31
+ box-shadow: var(--viking-shadow-sm);
32
+
33
+ @media (min-width: 481px) {
34
+ min-width: 160px;
35
+ }
36
+ }
37
+
38
+ .viking-metric-label,
39
+ .metric-card .metric-label {
40
+ font-size: var(--viking-font-size-ui);
41
+ font-family: var(--viking-font-family);
42
+ color: var(--viking-text-muted);
43
+ letter-spacing: 0.05em;
44
+ }
45
+
46
+ .viking-metric-value,
47
+ .metric-card .metric-value {
48
+ font-size: calc(var(--viking-font-size) * 1.35);
49
+ font-weight: 700;
50
+ font-family: var(--viking-font-family);
51
+ line-height: 1.2;
52
+ }
53
+
54
+ .viking-metric-card-warning,
55
+ .metric-card.warning {
56
+ border-left: 3px solid var(--viking-warning);
57
+
58
+ .viking-metric-value,
59
+ .metric-value {
60
+ color: var(--viking-warning);
61
+ }
62
+ }
63
+
64
+ .viking-metric-card-critical,
65
+ .metric-card.critical {
66
+ border-left: 3px solid var(--viking-accent);
67
+
68
+ .viking-metric-value,
69
+ .metric-value {
70
+ color: var(--viking-accent);
71
+ }
72
+ }
73
+
74
+ .viking-hud-panel,
75
+ .panel-section {
76
+ background-color: var(--viking-surface);
77
+ border: 1px solid var(--viking-border);
78
+ border-radius: var(--viking-radius);
79
+ display: flex;
80
+ flex-direction: column;
81
+ overflow: hidden;
82
+ box-shadow: var(--viking-shadow-sm);
83
+ }
84
+
85
+ .viking-hud-panel-header,
86
+ .panel-header {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: var(--viking-space-1);
90
+ padding: var(--viking-space-2);
91
+ background-color: color-mix(in srgb, var(--viking-bg) 2%, transparent);
92
+ border-bottom: 1px solid var(--viking-border);
93
+ }
94
+
95
+ .viking-hud-panel-title,
96
+ .panel-header h2 {
97
+ font-size: var(--viking-font-size-ui);
98
+ font-weight: 700;
99
+ text-transform: uppercase;
100
+ margin: 0;
101
+ letter-spacing: 0.05em;
102
+ flex: 1;
103
+ }
104
+
105
+ .viking-panel-card,
106
+ .status-card-outlined {
107
+ border-radius: var(--viking-radius-lg);
108
+ border: 1px solid var(--viking-border);
109
+ background-color: var(--viking-surface);
110
+ overflow: hidden;
111
+ box-shadow: var(--viking-shadow-sm);
112
+ }
113
+
114
+ .viking-panel-card-header,
115
+ .card-header-clean {
116
+ padding: var(--viking-space-2);
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: space-between;
120
+ gap: var(--viking-space-2);
121
+ border-bottom: 1px solid var(--viking-border);
122
+ }
123
+
124
+ .viking-panel-card-body,
125
+ .card-body-clean {
126
+ padding: var(--viking-space-2);
127
+ }
128
+
129
+ .viking-page-header,
130
+ .hud-header,
131
+ .dashboard-topbar {
132
+ display: flex;
133
+ flex-wrap: wrap;
134
+ align-items: flex-start;
135
+ justify-content: space-between;
136
+ gap: var(--viking-space-2);
137
+ padding-bottom: var(--viking-space-2);
138
+ margin-bottom: var(--viking-space-2);
139
+ border-bottom: 1px solid var(--viking-border);
140
+ }
141
+
142
+ .viking-page-header-sidebar.dashboard-topbar {
143
+ padding: var(--viking-space-2);
144
+ background-color: color-mix(in srgb, var(--viking-surface) 2%, transparent);
145
+ backdrop-filter: blur(8px);
146
+ }
147
+
148
+ .viking-page-header-title,
149
+ .hud-title,
150
+ .page-title {
151
+ margin: 0;
152
+ font-size: var(--viking-font-size-lg);
153
+ font-weight: 700;
154
+ letter-spacing: -0.02em;
155
+ color: var(--viking-text);
156
+ }
157
+
158
+ .viking-page-header-subtitle,
159
+ .hud-subtitle,
160
+ .page-description {
161
+ margin: var(--viking-space-1) 0 0;
162
+ font-size: var(--viking-font-size);
163
+ color: var(--viking-text-muted);
164
+ line-height: 1.6;
165
+ }
166
+
167
+ .viking-empty-state,
168
+ .empty-state {
169
+ display: flex;
170
+ flex-direction: column;
171
+ align-items: center;
172
+ justify-content: center;
173
+ padding: calc(var(--viking-space-2) * 2);
174
+ text-align: center;
175
+ color: var(--viking-text-muted);
176
+ gap: var(--viking-space-1);
177
+ }
178
+
179
+ .viking-loader-state,
180
+ .loader-state {
181
+ display: flex;
182
+ flex-direction: column;
183
+ align-items: center;
184
+ justify-content: center;
185
+ padding: calc(var(--viking-space-2) * 2);
186
+ gap: var(--viking-space-2);
187
+ color: var(--viking-text-muted);
188
+ }
189
+
190
+ .viking-spinner,
191
+ .spinner {
192
+ width: 32px;
193
+ height: 32px;
194
+ border: 3px solid var(--viking-border);
195
+ border-top-color: var(--viking-accent);
196
+ border-radius: 50%;
197
+ animation: viking-spin 0.8s linear infinite;
198
+ }
199
+
200
+ @keyframes viking-spin {
201
+ to {
202
+ transform: rotate(360deg);
203
+ }
204
+ }
205
+
206
+ .viking-dashboard-layout,
207
+ .dashboard-layout {
208
+ position: relative;
209
+ z-index: 1;
210
+ display: flex;
211
+ flex-direction: column;
212
+ width: 100%;
213
+ min-height: calc(100vh - 64px);
214
+ }
215
+
216
+ @media (min-width: 901px) {
217
+ .viking-dashboard-layout,
218
+ .dashboard-layout {
219
+ flex-direction: row;
220
+ }
221
+ }
222
+
223
+ .viking-dashboard-main,
224
+ .dashboard-main {
225
+ flex: 1;
226
+ display: flex;
227
+ flex-direction: column;
228
+ min-width: 0;
229
+ }