@dataengineeringformachinelearning/viking-ui 1.0.1 → 3.0.0-alpha.2

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.
Files changed (129) hide show
  1. package/README.md +180 -37
  2. package/dist/deml-components.css +1122 -0
  3. package/dist/design-tokens.css +688 -0
  4. package/dist/elements/button/viking-button.d.ts +14 -0
  5. package/dist/elements/card/viking-card.d.ts +8 -0
  6. package/dist/elements/core/dom.d.ts +4 -0
  7. package/dist/elements/core/styles.d.ts +2 -0
  8. package/dist/elements/modal/viking-modal.d.ts +15 -0
  9. package/dist/fonts/inter/InterVariable-Italic.woff2 +0 -0
  10. package/dist/fonts/inter/InterVariable.woff2 +0 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.js +4051 -0
  13. package/dist/lib/core/brand-icons.d.ts +29 -0
  14. package/dist/lib/core/icons.d.ts +132 -0
  15. package/dist/lib/core/integration-brand-icons.d.ts +18 -0
  16. package/dist/lib/core/lucide-paths.generated.d.ts +90 -0
  17. package/dist/lib/site-drakkar/site-drakkar.config.d.ts +50 -0
  18. package/dist/lib/site-drakkar/suite-search-items.d.ts +17 -0
  19. package/dist/viking-components.css +1837 -0
  20. package/dist/viking-tokens.json +318 -0
  21. package/dist/viking-ui-elements.js +1750 -0
  22. package/dist/viking-ui.css +1 -0
  23. package/dist/web/badge/viking-badge-wc.d.ts +28 -0
  24. package/dist/web/button/viking-button-wc.d.ts +28 -0
  25. package/dist/web/callout/viking-callout-wc.d.ts +27 -0
  26. package/dist/web/card/viking-card-wc.d.ts +29 -0
  27. package/dist/web/core/base.d.ts +12 -0
  28. package/dist/web/core/dom.d.ts +11 -0
  29. package/dist/web/core/icons-inline.d.ts +7 -0
  30. package/dist/web/core/styles.d.ts +12 -0
  31. package/dist/web/core/types.d.ts +10 -0
  32. package/dist/web/field/viking-field-wc.d.ts +32 -0
  33. package/dist/web/index.d.ts +15 -0
  34. package/dist/web/input/viking-input-wc.d.ts +32 -0
  35. package/dist/web/modal/viking-modal-wc.d.ts +50 -0
  36. package/dist/web/search-palette/viking-search-palette-wc.d.ts +64 -0
  37. package/dist/web/select/viking-select-wc.d.ts +48 -0
  38. package/dist/web/suite-header/viking-suite-header-wc.d.ts +36 -0
  39. package/dist/web/suite-search-palette/viking-suite-search-palette-wc.d.ts +39 -0
  40. package/dist/web/theme-toggle/viking-theme-toggle-wc.d.ts +19 -0
  41. package/dist/web/types.d.ts +40 -0
  42. package/dist/web-components/index.d.ts +1 -0
  43. package/dist/web-components.js +1750 -0
  44. package/dist/widget.js +1182 -0
  45. package/package.json +89 -30
  46. package/src/assets/fonts/inter/InterVariable-Italic.woff2 +0 -0
  47. package/src/assets/fonts/inter/InterVariable.woff2 +0 -0
  48. package/src/elements/button/viking-button.ts +201 -0
  49. package/src/elements/card/viking-card.ts +60 -0
  50. package/src/elements/core/dom.ts +33 -0
  51. package/src/elements/core/styles.ts +28 -0
  52. package/src/elements/modal/viking-modal.ts +154 -0
  53. package/src/index.ts +1 -0
  54. package/src/lib/core/brand-icons.ts +62 -0
  55. package/src/lib/core/icons.ts +206 -0
  56. package/src/lib/core/integration-brand-icons.ts +77 -0
  57. package/src/lib/core/lucide-paths.generated.ts +130 -0
  58. package/src/lib/site-drakkar/site-drakkar.config.ts +295 -0
  59. package/src/lib/site-drakkar/suite-search-items.ts +246 -0
  60. package/src/styles/_buttons.scss +301 -0
  61. package/src/styles/_component-primitives.scss +183 -0
  62. package/src/styles/_drakkar-buttons.scss +85 -0
  63. package/src/styles/_fonts.scss +22 -0
  64. package/src/styles/_forms.scss +66 -0
  65. package/src/styles/_input.scss +106 -0
  66. package/src/styles/_layout-enforcement.scss +166 -0
  67. package/src/styles/_layout-rhythm.scss +158 -0
  68. package/src/styles/_legacy-aliases.scss +212 -0
  69. package/src/styles/_series-colors.scss +24 -0
  70. package/src/styles/_static-primitives.scss +857 -0
  71. package/src/styles/_typography.scss +87 -0
  72. package/src/styles/_variables.scss +527 -0
  73. package/src/styles/components/a11y.scss +90 -0
  74. package/src/styles/components/badges.scss +102 -0
  75. package/src/styles/components/extracted-utilities.scss +459 -0
  76. package/src/styles/components/footer.scss +155 -0
  77. package/src/styles/components/icon-heading.scss +47 -0
  78. package/src/styles/components/icon-inline.scss +78 -0
  79. package/src/styles/components/layout.scss +59 -0
  80. package/src/styles/components/utilities.scss +131 -0
  81. package/src/styles/components/viking-inspired.scss +204 -0
  82. package/src/styles/components/whitepaper-cta.scss +130 -0
  83. package/src/styles/components-bundle.scss +9 -0
  84. package/src/styles/components.scss +175 -0
  85. package/src/styles/deml-components.scss +10 -0
  86. package/src/styles/index.scss +8 -0
  87. package/src/styles/layout-shell.scss +39 -11
  88. package/src/styles/page-shell.scss +663 -33
  89. package/src/styles/static-navbar.scss +862 -146
  90. package/src/styles/surfaces/backend.scss +142 -0
  91. package/src/styles/surfaces/docs-global.scss +73 -0
  92. package/src/styles/surfaces/docs-shell.scss +412 -0
  93. package/src/styles/surfaces/docs-showcase.scss +1051 -0
  94. package/src/styles/surfaces/marketing-cta.scss +62 -0
  95. package/src/styles/surfaces/marketing-docs-bento.scss +67 -0
  96. package/src/styles/surfaces/marketing-global.scss +748 -0
  97. package/src/styles/surfaces/marketing-landing.scss +1260 -0
  98. package/src/styles/surfaces/marketing-publication.scss +535 -0
  99. package/src/styles/surfaces/marketing-theme.scss +14 -0
  100. package/src/styles/surfaces/swagger-ui.scss +921 -0
  101. package/src/styles/tokens-export.scss +18 -0
  102. package/src/styles/tokens.scss +5 -0
  103. package/src/styles/viking-ui-bundle.scss +21 -2
  104. package/src/styles/viking-ui.scss +213 -51
  105. package/src/tokens/viking-tokens.json +318 -0
  106. package/src/web/badge/viking-badge-wc.ts +116 -0
  107. package/src/web/button/viking-button-wc.ts +165 -0
  108. package/src/web/callout/viking-callout-wc.ts +105 -0
  109. package/src/web/card/viking-card-wc.ts +66 -0
  110. package/src/web/core/base.ts +56 -0
  111. package/src/web/core/dom.ts +53 -0
  112. package/src/web/core/icons-inline.ts +44 -0
  113. package/src/web/core/styles.ts +1138 -0
  114. package/src/web/core/types.ts +19 -0
  115. package/src/web/field/viking-field-wc.ts +154 -0
  116. package/src/web/index.ts +73 -0
  117. package/src/web/input/viking-input-wc.ts +211 -0
  118. package/src/web/modal/viking-modal-wc.ts +187 -0
  119. package/src/web/search-palette/viking-search-palette-wc.ts +494 -0
  120. package/src/web/select/viking-select-wc.ts +218 -0
  121. package/src/web/suite-header/viking-suite-header-wc.ts +714 -0
  122. package/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +234 -0
  123. package/src/web/theme-toggle/viking-theme-toggle-wc.ts +139 -0
  124. package/src/web/types.ts +37 -0
  125. package/src/web-components/index.ts +1 -0
  126. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +0 -5949
  127. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +0 -1
  128. package/types/dataengineeringformachinelearning-viking-ui.d.ts +0 -1374
  129. package/viking.manifest.json +0 -189
@@ -0,0 +1,155 @@
1
+ .viking-footer,
2
+ .mega-footer {
3
+ background-color: var(--viking-surface, var(--color-surface));
4
+ border-top: 1px solid var(--viking-border-strong, var(--border-layout));
5
+ padding: calc(var(--viking-space-2) * 2) var(--viking-space-2);
6
+ font-family: var(--viking-font-family);
7
+ color: var(--viking-text-muted);
8
+ }
9
+
10
+ .viking-footer-content,
11
+ .footer-content {
12
+ max-width: var(--container-max-width, 1260px);
13
+ margin: 0 auto;
14
+ }
15
+
16
+ .viking-footer-directory,
17
+ .footer-directory {
18
+ display: grid;
19
+ grid-template-columns: 1fr;
20
+ gap: calc(var(--viking-space-2) * 1.75);
21
+ padding-bottom: calc(var(--viking-space-2) * 2);
22
+ border-bottom: 1px solid var(--viking-border-strong, var(--border-layout));
23
+ }
24
+
25
+ @media (min-width: 600px) {
26
+ .viking-footer-directory,
27
+ .footer-directory {
28
+ grid-template-columns: repeat(2, 1fr);
29
+ }
30
+ }
31
+
32
+ @media (min-width: 900px) {
33
+ .viking-footer-directory,
34
+ .footer-directory {
35
+ grid-template-columns: repeat(4, 1fr);
36
+ }
37
+ }
38
+
39
+ .viking-footer-column-title,
40
+ .footer-column-title {
41
+ font-size: var(--viking-font-size);
42
+ font-weight: 700;
43
+ color: var(--viking-text);
44
+ margin: 0 0 var(--viking-space-2);
45
+ letter-spacing: 0.05em;
46
+ }
47
+
48
+ .viking-footer-list,
49
+ .footer-list {
50
+ list-style: none;
51
+ padding: 0;
52
+ margin: 0;
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: var(--viking-space-1);
56
+ }
57
+
58
+ .viking-footer-list a,
59
+ .footer-list a {
60
+ font-size: var(--viking-font-size);
61
+ color: var(--viking-text-muted);
62
+ text-decoration: none !important;
63
+ border-bottom: 1px solid transparent;
64
+ transition: color 0.2s ease, border-color 0.2s ease;
65
+ }
66
+
67
+ .viking-footer-list a:hover,
68
+ .footer-list a:hover {
69
+ color: var(--viking-text);
70
+ border-bottom-color: var(--viking-text);
71
+ }
72
+
73
+ .viking-footer-bottom,
74
+ .footer-bottom {
75
+ padding-top: var(--viking-space-2);
76
+ display: flex;
77
+ flex-direction: column;
78
+ gap: var(--viking-space-2);
79
+ }
80
+
81
+ .viking-footer-badges-top,
82
+ .footer-badges-top {
83
+ display: flex;
84
+ justify-content: center;
85
+ margin-bottom: var(--viking-space-2);
86
+ }
87
+
88
+ .viking-footer-compliance-row,
89
+ .footer-compliance-row {
90
+ display: flex;
91
+ justify-content: center;
92
+ align-items: center;
93
+ }
94
+
95
+ .viking-copyright-info,
96
+ .copyright-info {
97
+ display: flex;
98
+ flex-wrap: wrap;
99
+ align-items: center;
100
+ justify-content: center;
101
+ gap: var(--viking-space-2);
102
+ font-size: var(--viking-font-size);
103
+ color: var(--viking-text-muted);
104
+ text-align: center;
105
+ }
106
+
107
+ .viking-copyright-info a,
108
+ .copyright-info a {
109
+ color: var(--viking-text-muted);
110
+ text-decoration: none !important;
111
+ border-bottom: 1px solid transparent;
112
+ transition: color 0.2s ease, border-color 0.2s ease;
113
+ }
114
+
115
+ .viking-copyright-info a:hover,
116
+ .copyright-info a:hover {
117
+ color: var(--viking-text);
118
+ border-bottom-color: var(--viking-text);
119
+ }
120
+
121
+ .viking-usa-badge,
122
+ .usa-badge {
123
+ display: inline-flex;
124
+ align-items: center;
125
+ gap: var(--viking-space-1);
126
+ padding: var(--viking-space-1) var(--viking-space-2);
127
+ border-radius: var(--viking-radius-pill);
128
+ background-color: transparent;
129
+ border: 1px solid var(--viking-border);
130
+ cursor: default;
131
+ transition: var(--viking-transition-colors);
132
+ font-size: var(--viking-font-size);
133
+ font-weight: 500;
134
+ color: var(--viking-text-muted);
135
+ }
136
+
137
+ .viking-usa-badge:hover,
138
+ .usa-badge:hover {
139
+ background-color: color-mix(in srgb, var(--viking-surface) 95%, var(--viking-accent) 5%);
140
+ border-color: var(--viking-border-strong);
141
+ color: var(--viking-text);
142
+ box-shadow: var(--viking-shadow-sm);
143
+ }
144
+
145
+ .viking-usa-badge-icon,
146
+ .usa-badge-icon {
147
+ font-size: 1.1em;
148
+ line-height: 1;
149
+ transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
150
+ }
151
+
152
+ .viking-usa-badge:hover .viking-usa-badge-icon,
153
+ .usa-badge:hover .usa-badge-icon {
154
+ transform: scale(1.15) rotate(-5deg);
155
+ }
@@ -0,0 +1,47 @@
1
+ // Icon + title row — bento cards, integration tiles, docs panels.
2
+ // Icons and headings share one flex cross-axis so cap-height aligns (WCAG 2.1 AA).
3
+
4
+ .viking-icon-heading {
5
+ display: flex;
6
+ align-items: center;
7
+ gap: var(--viking-space-2, 16px);
8
+ min-width: 0;
9
+ }
10
+
11
+ .viking-icon-heading__icon {
12
+ display: inline-flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ flex-shrink: 0;
16
+ width: var(--viking-icon-size-lg, 24px);
17
+ height: var(--viking-icon-size-lg, 24px);
18
+ line-height: 0;
19
+ color: var(--viking-accent);
20
+
21
+ svg,
22
+ viking-icon,
23
+ viking-app-icon {
24
+ display: block;
25
+ width: var(--viking-icon-size-lg, 24px);
26
+ height: var(--viking-icon-size-lg, 24px);
27
+ }
28
+ }
29
+
30
+ .viking-icon-heading__icon--brand {
31
+ color: inherit;
32
+ }
33
+
34
+ .viking-icon-heading__title {
35
+ margin: 0;
36
+ font-family: var(--viking-font-family);
37
+ font-size: var(--viking-font-size-lg, 20px);
38
+ font-weight: var(--viking-font-weight-bold, 700);
39
+ letter-spacing: var(--viking-letter-spacing-tight, -0.02em);
40
+ line-height: var(--viking-line-height-tight, 1.25);
41
+ color: var(--viking-text, var(--text-color));
42
+ text-transform: uppercase;
43
+ }
44
+
45
+ .viking-icon-heading--lg .viking-icon-heading__title {
46
+ font-size: var(--viking-font-size-xl, 24px);
47
+ }
@@ -0,0 +1,78 @@
1
+ // Vertical alignment for icons paired with text (buttons, links, titles).
2
+
3
+ viking-app-icon,
4
+ viking-icon,
5
+ .material-icons,
6
+ .material-symbols-outlined {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ flex-shrink: 0;
11
+ line-height: 1;
12
+ vertical-align: middle;
13
+ }
14
+
15
+ .nav-btn,
16
+ .mobile-nav-btn,
17
+ .auth-btn,
18
+ .mobile-auth-btn,
19
+ .back-link,
20
+ .viking-btn,
21
+ .sidebar-brand,
22
+ .gauge-card-footer,
23
+ .gauge-card-header,
24
+ .section-title-premium,
25
+ .panel-title-flex,
26
+ .status-badge-premium,
27
+ .feature-item {
28
+ viking-app-icon,
29
+ viking-icon,
30
+ .material-icons {
31
+ align-self: center;
32
+ }
33
+ }
34
+
35
+ .nav-btn viking-app-icon,
36
+ .nav-btn viking-icon,
37
+ .mobile-nav-btn viking-app-icon,
38
+ .auth-btn viking-app-icon,
39
+ .mobile-auth-btn viking-app-icon {
40
+ width: var(--viking-icon-size-md, var(--base-font-size));
41
+ height: var(--viking-icon-size-md, var(--base-font-size));
42
+ align-self: center;
43
+ }
44
+
45
+ .theme-toggle-btn viking-app-icon,
46
+ .theme-toggle-btn viking-icon,
47
+ .menu-toggle-btn viking-app-icon,
48
+ .menu-toggle-btn viking-icon {
49
+ display: inline-flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ width: 24px;
53
+ height: 24px;
54
+ line-height: 0;
55
+ }
56
+
57
+ .section-title-premium viking-app-icon {
58
+ color: var(--status-accent, var(--viking-accent));
59
+ width: 22px;
60
+ height: 22px;
61
+ }
62
+
63
+ .navbar-brand .material-icons.navbar-logo,
64
+ .navbar-brand deml-brand-logo .material-icons {
65
+ font-size: 28px;
66
+ width: 36px;
67
+ height: 36px;
68
+ line-height: 36px;
69
+ overflow: visible;
70
+ }
71
+
72
+ .sidebar-brand .material-icons.brand-icon,
73
+ .sidebar-brand deml-brand-logo .material-icons {
74
+ font-size: 24px;
75
+ width: 24px;
76
+ height: 24px;
77
+ line-height: 24px;
78
+ }
@@ -0,0 +1,59 @@
1
+ // Shared layout utilities (4px grid, visibility toggles, typography floor).
2
+ // Page width shell (.page-inner-wrapper) lives in viking-ui layout-shell.scss — do not duplicate here.
3
+
4
+ .viking-page-stack {
5
+ display: flex;
6
+ flex-direction: column;
7
+ gap: var(--viking-page-stack-gap, var(--viking-space-4));
8
+ width: 100%;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ .badge-dot {
13
+ display: inline-block;
14
+ width: var(--viking-grid-unit, 4px);
15
+ height: var(--viking-grid-unit, 4px);
16
+ border-radius: 50%;
17
+ background-color: var(--viking-accent, var(--color-primary));
18
+ margin-right: var(--viking-space-1);
19
+ flex-shrink: 0;
20
+ }
21
+
22
+ .badge-dot--success {
23
+ background-color: var(--viking-success, var(--color-success));
24
+ }
25
+
26
+ .is-hidden {
27
+ display: none !important;
28
+ }
29
+
30
+ .is-visible-block {
31
+ display: block !important;
32
+ }
33
+
34
+ .is-visible-flex {
35
+ display: flex !important;
36
+ }
37
+
38
+ .progress-bar-fill {
39
+ width: var(--progress, 0%);
40
+ }
41
+
42
+ body,
43
+ p,
44
+ li,
45
+ input,
46
+ select,
47
+ textarea,
48
+ button,
49
+ label,
50
+ small,
51
+ td,
52
+ th,
53
+ .badge-text,
54
+ .criteria-desc,
55
+ .criteria-details,
56
+ .log-text,
57
+ .file-name {
58
+ font-size: max(16px, var(--base-font-size, 16px));
59
+ }
@@ -0,0 +1,131 @@
1
+ // Semantic layout utilities (4px grid via --space-* / --viking-space-*). Prefer these over hash-suffixed u-style-* classes.
2
+
3
+ .u-items-center {
4
+ align-items: center;
5
+ }
6
+
7
+ .u-items-start {
8
+ align-items: flex-start;
9
+ }
10
+
11
+ .u-justify-between {
12
+ justify-content: space-between;
13
+ }
14
+
15
+ .u-text-center {
16
+ text-align: center;
17
+ }
18
+
19
+ .u-w-full {
20
+ width: 100%;
21
+ }
22
+
23
+ .u-overflow-y-auto {
24
+ overflow-y: auto;
25
+ }
26
+
27
+ .u-flex {
28
+ display: flex;
29
+ }
30
+
31
+ .u-flex-center {
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ }
36
+
37
+ .u-flex-between {
38
+ display: flex;
39
+ justify-content: space-between;
40
+ align-items: center;
41
+ }
42
+
43
+ .u-flex-wrap {
44
+ flex-wrap: wrap;
45
+ }
46
+
47
+ .u-flex-col {
48
+ display: flex;
49
+ flex-direction: column;
50
+ }
51
+
52
+ .u-gap-half {
53
+ gap: var(--space-half);
54
+ }
55
+
56
+ .u-gap-1-5 {
57
+ gap: var(--space-1-5);
58
+ }
59
+
60
+ .u-gap-1 {
61
+ gap: var(--space-1);
62
+ }
63
+
64
+ .u-gap-2 {
65
+ gap: var(--space-2);
66
+ }
67
+
68
+ .u-gap-3 {
69
+ gap: var(--space-3);
70
+ }
71
+
72
+ .u-mt-2 {
73
+ margin-top: var(--space-2);
74
+ }
75
+
76
+ .u-mt-3 {
77
+ margin-top: var(--space-3);
78
+ }
79
+
80
+ .u-mt-4 {
81
+ margin-top: var(--space-4);
82
+ }
83
+
84
+ .u-mb-2 {
85
+ margin-bottom: var(--space-2);
86
+ }
87
+
88
+ .u-mb-3 {
89
+ margin-bottom: var(--space-3);
90
+ }
91
+
92
+ .u-mx-auto {
93
+ margin-left: auto;
94
+ margin-right: auto;
95
+ }
96
+
97
+ .u-max-w-500 {
98
+ max-width: 500px;
99
+ }
100
+
101
+ .u-text-muted {
102
+ color: var(--text-muted);
103
+ }
104
+
105
+ .u-text-primary {
106
+ color: var(--color-primary);
107
+ }
108
+
109
+ .u-text-primary-container {
110
+ color: var(--color-primary-container);
111
+ }
112
+
113
+ .u-skip-link-surface {
114
+ color: var(--white);
115
+ background-color: var(--black);
116
+ }
117
+
118
+ .u-word-break-all {
119
+ word-break: break-all;
120
+ }
121
+
122
+ .u-no-underline {
123
+ border-bottom: none;
124
+ text-decoration: none;
125
+ }
126
+
127
+ .u-icon-18 {
128
+ font-size: var(--base-font-size);
129
+ width: var(--base-font-size);
130
+ height: var(--base-font-size);
131
+ }
@@ -0,0 +1,204 @@
1
+ // Viking-inspired visual patterns (clean, accessible, composable controls)
2
+ // Implemented using ONLY tokens from THEME.md / viking-ui.css.
3
+ // No Tailwind. 4px grid. 16px main / 14px UI font floors. Premium engineering aesthetic.
4
+ //
5
+ // Button variants live in viking-ui _buttons.scss — do not duplicate here.
6
+
7
+ @use 'sass:color';
8
+
9
+ // Button group (fused borders like Viking button.group)
10
+ .viking-button-group {
11
+ display: inline-flex;
12
+ border-radius: var(--viking-radius, var(--border-radius-md, 8px));
13
+ overflow: hidden;
14
+ border: 1px solid var(--viking-border, var(--border));
15
+
16
+ > .viking-btn,
17
+ > button,
18
+ > a {
19
+ border-radius: 0;
20
+ border-right: 1px solid var(--viking-border, var(--border));
21
+ margin: 0;
22
+
23
+ &:last-child {
24
+ border-right: none;
25
+ }
26
+
27
+ &:hover:not(:disabled) {
28
+ z-index: 1;
29
+ }
30
+ }
31
+ }
32
+
33
+ // ============================================
34
+ // Viking-like Input / Field Groups
35
+ // Prefix, suffix, adjacent controls with fused borders.
36
+ // ============================================
37
+
38
+ .viking-field {
39
+ display: block;
40
+ width: 100%;
41
+ }
42
+
43
+ .viking-field-label {
44
+ display: block;
45
+ font-size: max(16px, var(--base-font-size));
46
+ font-weight: 500;
47
+ color: var(--text-color);
48
+ margin-bottom: var(--space-1);
49
+ }
50
+
51
+ .viking-field-description {
52
+ display: block;
53
+ font-size: 1rem;
54
+ color: var(--text-muted);
55
+ margin-bottom: var(--space-1);
56
+ }
57
+
58
+ .viking-input-group {
59
+ display: flex;
60
+ width: 100%;
61
+ align-items: stretch;
62
+
63
+ input,
64
+ select,
65
+ button,
66
+ .viking-btn {
67
+ border-radius: 0;
68
+ }
69
+
70
+ > :first-child {
71
+ border-top-left-radius: var(--border-radius-md);
72
+ border-bottom-left-radius: var(--border-radius-md);
73
+ }
74
+
75
+ > :last-child {
76
+ border-top-right-radius: var(--border-radius-md);
77
+ border-bottom-right-radius: var(--border-radius-md);
78
+ }
79
+
80
+ > * + * {
81
+ margin-left: -1px; // fuse borders
82
+ }
83
+ }
84
+
85
+ .viking-input-prefix,
86
+ .viking-input-suffix {
87
+ display: inline-flex;
88
+ align-items: center;
89
+ padding: 0 var(--space-2);
90
+ background-color: var(--color-surface-variant);
91
+ color: var(--text-muted);
92
+ font-size: max(16px, var(--base-font-size));
93
+ border: 1px solid var(--border);
94
+ white-space: nowrap;
95
+ user-select: none;
96
+ }
97
+
98
+ .viking-input-affix-btn {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ justify-content: center;
102
+ padding: 0 var(--space-2);
103
+ background: transparent;
104
+ color: var(--text-muted);
105
+ border: 1px solid var(--border);
106
+ cursor: pointer;
107
+ transition: var(--transition-smooth);
108
+
109
+ &:hover:not(:disabled) {
110
+ color: var(--text-color);
111
+ background-color: color-mix(in srgb, var(--hover-color) 12%, transparent);
112
+ }
113
+ }
114
+
115
+ // Standalone clean input base (native inputs)
116
+ .viking-input {
117
+ width: 100%;
118
+ background-color: var(--card-bg);
119
+ color: var(--text-color);
120
+ border: 1px solid var(--border);
121
+ border-radius: var(--border-radius-md);
122
+ padding: var(--space-1) var(--space-2);
123
+ font-size: max(16px, var(--base-font-size));
124
+ font-family: var(--viking-font-family);
125
+ line-height: 1.4;
126
+ min-height: 44px;
127
+ transition:
128
+ border-color 0.2s ease,
129
+ box-shadow 0.2s ease;
130
+
131
+ &::placeholder {
132
+ color: var(--text-muted);
133
+ opacity: 0.8;
134
+ }
135
+
136
+ &:hover {
137
+ border-color: var(--color-primary-container);
138
+ }
139
+
140
+ &:focus,
141
+ &:focus-visible {
142
+ outline: none;
143
+ border-color: var(--color-primary-container);
144
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-primary-container) 35%, transparent);
145
+ }
146
+
147
+ &:disabled {
148
+ opacity: 0.6;
149
+ cursor: not-allowed;
150
+ }
151
+ }
152
+
153
+ // ============================================
154
+ // Select / Dropdown Viking-like polish (used by unified-select too)
155
+ // ============================================
156
+
157
+ .viking-select-trigger {
158
+ background-color: var(--card-bg);
159
+ color: var(--text-color);
160
+ border: 1px solid var(--border);
161
+ border-radius: var(--border-radius-md);
162
+ padding: var(--space-1) var(--space-2);
163
+ font-size: max(16px, var(--base-font-size));
164
+ min-height: 44px;
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: space-between;
168
+ cursor: pointer;
169
+
170
+ &:hover {
171
+ border-color: var(--color-primary-container);
172
+ }
173
+
174
+ &:focus-visible {
175
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
176
+ outline-offset: var(--focus-ring-offset);
177
+ }
178
+ }
179
+
180
+ .viking-select-dropdown {
181
+ background-color: var(--card-bg);
182
+ border: 1px solid var(--border);
183
+ border-radius: var(--border-radius-md);
184
+ box-shadow: var(--shadow-md);
185
+ max-height: 15rem;
186
+ overflow-y: auto;
187
+ }
188
+
189
+ .viking-select-option {
190
+ padding: var(--space-1) var(--space-2);
191
+ color: var(--text-color);
192
+ cursor: pointer;
193
+
194
+ &:hover {
195
+ background-color: color-mix(in srgb, var(--hover-color) 18%, transparent);
196
+ }
197
+
198
+ &.selected,
199
+ &[aria-selected='true'] {
200
+ background-color: var(--color-primary-container);
201
+ color: var(--color-on-primary-container);
202
+ font-weight: 600;
203
+ }
204
+ }