@scion/components 22.2.0 → 22.4.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.
Files changed (42) hide show
  1. package/_index.scss +94 -5
  2. package/common/package.json +4 -0
  3. package/design/_theming.scss +25 -10
  4. package/design/components/_scion-component-dark-tokens.scss +153 -0
  5. package/design/components/_scion-component-light-tokens.scss +153 -0
  6. package/design/icons/_scion-icon-font.scss +50 -0
  7. package/design/themes/_scion-dark-theme.scss +2 -7
  8. package/design/themes/_scion-light-theme.scss +3 -8
  9. package/fesm2022/scion-components-common.mjs +251 -0
  10. package/fesm2022/scion-components-common.mjs.map +1 -0
  11. package/fesm2022/scion-components-dimension.mjs +7 -6
  12. package/fesm2022/scion-components-dimension.mjs.map +1 -1
  13. package/fesm2022/scion-components-icon.mjs +327 -0
  14. package/fesm2022/scion-components-icon.mjs.map +1 -0
  15. package/fesm2022/scion-components-menu.mjs +3277 -0
  16. package/fesm2022/scion-components-menu.mjs.map +1 -0
  17. package/fesm2022/scion-components-sashbox.mjs +21 -21
  18. package/fesm2022/scion-components-sashbox.mjs.map +1 -1
  19. package/fesm2022/scion-components-splitter.mjs +16 -13
  20. package/fesm2022/scion-components-splitter.mjs.map +1 -1
  21. package/fesm2022/scion-components-table.mjs +2337 -0
  22. package/fesm2022/scion-components-table.mjs.map +1 -0
  23. package/fesm2022/scion-components-text.mjs +322 -0
  24. package/fesm2022/scion-components-text.mjs.map +1 -0
  25. package/fesm2022/scion-components-throbber.mjs +15 -15
  26. package/fesm2022/scion-components-throbber.mjs.map +1 -1
  27. package/fesm2022/scion-components-viewport.mjs +41 -72
  28. package/fesm2022/scion-components-viewport.mjs.map +1 -1
  29. package/icon/package.json +4 -0
  30. package/menu/package.json +4 -0
  31. package/package.json +23 -3
  32. package/table/package.json +4 -0
  33. package/text/package.json +4 -0
  34. package/types/scion-components-common.d.ts +185 -0
  35. package/types/scion-components-icon.d.ts +93 -0
  36. package/types/scion-components-menu.d.ts +1922 -0
  37. package/types/scion-components-sashbox.d.ts +4 -2
  38. package/types/scion-components-splitter.d.ts +4 -3
  39. package/types/scion-components-table.d.ts +595 -0
  40. package/types/scion-components-text.d.ts +131 -0
  41. package/types/scion-components-viewport.d.ts +7 -4
  42. package/design/components/_scion-component-tokens.scss +0 -48
package/_index.scss CHANGED
@@ -60,7 +60,13 @@
60
60
  * ```
61
61
  *
62
62
  * ## SCION Design Tokens
63
- * SCION supports the following design tokens:
63
+ * SCION uses the following design tokens:
64
+ *
65
+ * ### Component Design Tokens
66
+ * Tokens specific to SCION Components.
67
+ *
68
+ * [Component Design Tokens (light theme)](https://raw.githubusercontent.com/SchweizerischeBundesbahnen/scion-toolkit/master/projects/scion/components/design/components/_scion-component-light-tokens.scss)
69
+ * [Component Design Tokens (dark theme)](https://raw.githubusercontent.com/SchweizerischeBundesbahnen/scion-toolkit/master/projects/scion/components/design/components/_scion-component-dark-tokens.scss)
64
70
  *
65
71
  * ### Static Color Tokens
66
72
  * Colors that have a fixed color value across all themes.
@@ -68,7 +74,7 @@
68
74
  * [Static Color Tokens](https://raw.githubusercontent.com/SchweizerischeBundesbahnen/scion-toolkit/master/projects/scion/components/design/colors/_scion-static-colors.scss)
69
75
  *
70
76
  * ### Named Color Tokens
71
- * Predefined set of named colors as palette of tints and shades.
77
+ * Predefined set of named colors as a palette of tints and shades.
72
78
  *
73
79
  * [Named Color Tokens (light theme)](https://raw.githubusercontent.com/SchweizerischeBundesbahnen/scion-toolkit/master/projects/scion/components/design/colors/_scion-light-colors.scss)
74
80
  * [Named Color Tokens (dark theme)](https://raw.githubusercontent.com/SchweizerischeBundesbahnen/scion-toolkit/master/projects/scion/components/design/colors/_scion-dark-colors.scss)
@@ -79,17 +85,96 @@
79
85
  * [Semantic Tokens (light theme)](https://raw.githubusercontent.com/SchweizerischeBundesbahnen/scion-toolkit/master/projects/scion/components/design/themes/_scion-light-theme.scss)
80
86
  * [Semantic Tokens (dark theme)](https://raw.githubusercontent.com/SchweizerischeBundesbahnen/scion-toolkit/master/projects/scion/components/design/themes/_scion-dark-theme.scss)
81
87
  *
82
- * ### Component-specific Tokens
83
- * Tokens for a particular component.
84
88
  *
85
- * [Component-specific Tokens](https://raw.githubusercontent.com/SchweizerischeBundesbahnen/scion-toolkit/master/projects/scion/components/design/components/_scion-component-tokens.scss)
89
+ * ## SCION Icon Font
90
+ * This module provides the standard icon font used by SCION components.
91
+ *
92
+ * By default, SCION icons are loaded from the CDN: https://cdn.jsdelivr.net/npm/@scion/icons.
93
+ *
94
+ * ### Content Security Policy (CSP)
95
+ * Applications enforcing a Content Security Policy must whitelist the CDN using the `font-src` directive.
96
+ *
97
+ * ```
98
+ * Content-Security-Policy: font-src 'self' https://cdn.jsdelivr.net/npm/@scion/icons/;
99
+ * ```
100
+ *
101
+ * ### Self-Hosting the SCION Icon Font
102
+ * As an alternative to loading SCION icons from the CDN, you can host the SCION icon font directly within your application.
103
+ *
104
+ * To self-host the SCION icon font:
105
+ *
106
+ * 1. Install the `@scion/icons` NPM module:
107
+ * ```
108
+ * npm install @scion/icons
109
+ * ```
110
+ * 2. Register the icon font files in `assets` in `angular.json`.
111
+ * ```
112
+ * "assets": [
113
+ * {
114
+ * "glob": "**\/*",
115
+ * "input": "node_modules/@scion/icons",
116
+ * "output": "/scion-icons"
117
+ * }
118
+ * ]
119
+ * ```
120
+ * 3. Configure `@scion/components` SCSS module to load the icon font from `/scion-icons` (leading slash required):
121
+ * ```scss
122
+ * @use '@scion/components' with (
123
+ * $icon-font: (
124
+ * directory: '/scion-icons'
125
+ * )
126
+ * );
127
+ * ```
128
+ *
129
+ * As an alternative to steps 1 and 2, you can manually download the icon font files from the CDN and place them directly into your application's public assets folder (`public/scion-icons/`):
130
+ * - https://cdn.jsdelivr.net/npm/@scion/icons/scion-icons.ttf
131
+ * - https://cdn.jsdelivr.net/npm/@scion/icons/scion-icons.svg
132
+ * - https://cdn.jsdelivr.net/npm/@scion/icons/scion-icons.woff
133
+ *
134
+ * ### Loading Self-Hosted Icon Font Relative to Document Base
135
+ * Applications deployed in a subdirectory must configure the `@scion/components` SCSS module to load the self-hosted icon font relative to the document base URL (defined by the `<base>` HTML tag) and exclude the icon font files from the application build.
136
+ *
137
+ * Different steps are required depending on whether building the application with esbuild or Webpack.
138
+ *
139
+ * **Using `@angular/build:application` (esbuild, default since Angular 20)**
140
+ *
141
+ * 1. Configure `@scion/components` SCSS module to load the icon font from `scion-icons` (no leading slash to be relative to the document base URL):
142
+ * ```scss
143
+ * @use '@scion/components' with (
144
+ * $icon-font: (
145
+ * directory: 'scion-icons'
146
+ * )
147
+ * );
148
+ * ```
149
+ * 2. Exclude the icon font files from the application build via `externalDependencies` in `angular.json`:
150
+ * ```
151
+ * "externalDependencies": [
152
+ * "scion-icons/*"
153
+ * ]
154
+ * ```
155
+ *
156
+ * **Using `@angular-devkit/build-angular:browser` (Webpack, deprecated since Angular 22)**
157
+ *
158
+ * Configure `@scion/components` SCSS module to load the icon font from `^scion-icons` (no leading slash to be relative to the document base URL):
159
+ *
160
+ * The leading caret (`^`) instructs Webpack to exclude the icon font files from the application build.
161
+ *
162
+ * ```scss
163
+ * @use '@scion/components' with (
164
+ * $icon-font: (
165
+ * directory: '^scion-icons'
166
+ * )
167
+ * );
168
+ * ```
86
169
  */
87
170
 
88
171
  @use './design/theming' as sci-theming;
89
172
  @use './design/themes/scion-light-theme';
90
173
  @use './design/themes/scion-dark-theme';
174
+ @use './design/icons/scion-icon-font' as sci-icon-font;
91
175
  @use 'sass:map';
92
176
 
177
+ // Install theme
93
178
  $-built-in-themes: (
94
179
  scion-light: map.set(scion-light-theme.$theme, color-scheme, light),
95
180
  scion-dark: map.set(scion-dark-theme.$theme, color-scheme, dark),
@@ -97,3 +182,7 @@ $-built-in-themes: (
97
182
  $themes: $-built-in-themes !default;
98
183
  $themes: sci-theming.augment($themes, $-built-in-themes);
99
184
  @include sci-theming.install($themes);
185
+
186
+ // Install icon font
187
+ $icon-font: null !default;
188
+ @include sci-icon-font.install-icon-font($icon-font);
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../fesm2022/scion-components-common.mjs",
3
+ "typings": "../types/scion-components-common.d.ts"
4
+ }
@@ -47,7 +47,8 @@
47
47
  @error 'No themes provided to "@scion/components" SCSS module. Provide a map of themes with token mappings. Refer to the documentation for an example.';
48
48
  }
49
49
 
50
- $void: -warn-if-color-scheme-token-missing($themes);
50
+ $void: -warn-if-color-scheme-missing($themes);
51
+ $themes: -add-color-scheme-token($themes);
51
52
  $themes: -add-theme-name-token($themes);
52
53
 
53
54
  @layer sci-theme {
@@ -58,7 +59,7 @@
58
59
 
59
60
  /**
60
61
  * Augments the provided themes with the provided built-in themes, matching the themes by name or, if there is no match, by light or dark color scheme.
61
- * The color scheme of a theme is determined by evaluating the "color-scheme" token.
62
+ * The color scheme of a theme is determined by evaluating the "color-scheme" CSS property.
62
63
  *
63
64
  * @param {map} $themes - map of themes to be augmented with tokens of the built-in themes.
64
65
  * @param {map} $built-in-themes - map of built-in themes.
@@ -71,7 +72,7 @@
71
72
  $themes: map.set($themes, $theme, map.merge($built-in-theme, $tokens));
72
73
  }
73
74
  @else {
74
- $void: -warn-if-color-scheme-token-missing(($theme: $tokens));
75
+ $void: -warn-if-color-scheme-missing(($theme: $tokens));
75
76
 
76
77
  @if -is-dark-theme($tokens) {
77
78
  $dark-theme: -get-dark-theme($built-in-themes);
@@ -87,10 +88,10 @@
87
88
  }
88
89
 
89
90
  /**
90
- * Adds each theme the token 'sci-theme' with its name.
91
+ * Adds each theme the token '--sci-theme' with its name.
91
92
  *
92
93
  * @param {map} $themes - map of themes with token mappings.
93
- * @return {map} Themes with the token 'sci-theme' added to each theme.
94
+ * @return {map} Themes with the token '--sci-theme' added to each theme.
94
95
  */
95
96
  @function -add-theme-name-token($themes) {
96
97
  @each $theme, $tokens in $themes {
@@ -99,6 +100,20 @@
99
100
  @return $themes;
100
101
  }
101
102
 
103
+ /**
104
+ * Adds each theme the token '--sci-color-theme' based on the 'color-scheme' CSS property.
105
+ *
106
+ * @param {map} $themes - map of themes with token mappings.
107
+ * @return {map} Themes with the token '--sci-color-theme' added to each theme.
108
+ */
109
+ @function -add-color-scheme-token($themes) {
110
+ @each $theme, $tokens in $themes {
111
+ $color-scheme: map.get($tokens, 'color-scheme');
112
+ $themes: map.set($themes, $theme, map.merge((--sci-color-theme: $color-scheme), $tokens));
113
+ }
114
+ @return $themes;
115
+ }
116
+
102
117
  /**
103
118
  * Creates a theme selector on the root HTML element for each provided theme and sets its tokens as CSS variables, as following:
104
119
  *
@@ -125,7 +140,7 @@
125
140
  /**
126
141
  * Selects a theme based on the user's OS color scheme preference, but ony if no theme is set on the root HTML element.
127
142
  *
128
- * The color scheme of a theme is determined by evaluating the "color-scheme" token.
143
+ * The color scheme of a theme is determined by evaluating the "color-scheme" CSS property.
129
144
  *
130
145
  * @param {map} $themes - A map of themes with token mappings.
131
146
  */
@@ -177,7 +192,7 @@
177
192
  }
178
193
 
179
194
  /**
180
- * Returns `true` for a theme with a color-scheme token 'dark'.
195
+ * Returns `true` for a theme with a color-scheme 'dark'.
181
196
  *
182
197
  * @param {map} $tokens - Token mappings of a theme.
183
198
  * @return {boolean} `true` if dark theme, otherwise `false`.
@@ -218,12 +233,12 @@
218
233
  }
219
234
 
220
235
  /**
221
- * Logs a warning if the 'color-scheme' design token is missing.
236
+ * Logs a warning if 'color-scheme' CSS property is missing.
222
237
  */
223
- @function -warn-if-color-scheme-token-missing($themes) {
238
+ @function -warn-if-color-scheme-missing($themes) {
224
239
  @each $theme, $tokens in $themes {
225
240
  @if (not map.has-key($tokens, 'color-scheme')) {
226
- @warn 'Missing required token "color-scheme" in theme "#{$theme}". Add the token "color-scheme" to the theme "#{$theme}". For a dark theme, add the token "color-scheme: dark". For a light theme, add the token "color-scheme: light".';
241
+ @warn 'Missing required "color-scheme" in theme "#{$theme}". Add "color-scheme" to the theme "#{$theme}". For a dark theme, add "color-scheme: dark". For a light theme, add "color-scheme: light".';
227
242
  }
228
243
  }
229
244
  @return null;
@@ -0,0 +1,153 @@
1
+ @use '../theming' as sci-theming;
2
+
3
+ $sci-scrollbar: (
4
+ --sci-scrollbar-color: var(--sci-color-gray-700),
5
+ );
6
+
7
+ $sci-viewport: (
8
+ --sci-viewport-scrollbar-color: var(--sci-scrollbar-color),
9
+ );
10
+
11
+ $sci-throbber: (
12
+ --sci-throbber-color: var(--sci-color-gray-300),
13
+ --sci-throbber-size: 50px,
14
+ --sci-throbber-duration: 1.25s,
15
+ );
16
+
17
+ $sci-splitter: (
18
+ --sci-splitter-background-color: var(--sci-color-border), // background color of the splitter
19
+ --sci-splitter-background-color-hover: var(--sci-splitter-background-color), // background color of the splitter when hovering it
20
+ --sci-splitter-size: 1px, // size of the splitter along the main axis (width if direction is row, or height if direction is column)
21
+ --sci-splitter-size-hover: 8px, // size of the splitter along the main axis when hovering it.
22
+ --sci-splitter-touch-target-size: 15px, // touch target size to move the splitter (accessibility)
23
+ --sci-splitter-cross-axis-size: 100%, // handle size along the cross-axis
24
+ --sci-splitter-cross-axis-start: auto, // handle start position on the cross-axis
25
+ --sci-splitter-cross-axis-end: auto, // handle end position on the cross-axis. Requires `--sci-splitter-cross-axis-start: auto`.
26
+ --sci-splitter-border-radius: 0, // border radius of the splitter
27
+ --sci-splitter-opacity-active: 1, // opacity of the splitter while the user moves the splitter
28
+ --sci-splitter-opacity-hover: .3, // opacity of the splitter when hovering it
29
+ );
30
+
31
+ $sci-sashbox: (
32
+ --sci-sashbox-gap: 10px, // gaps (gutters) between sashes
33
+ --sci-sashbox-splitter-background-color: var(--sci-splitter-background-color), // background color of the splitter
34
+ --sci-sashbox-splitter-background-color-hover: var(--sci-splitter-background-color), // background color of the splitter when hovering it
35
+ --sci-sashbox-splitter-size: var(--sci-splitter-size), // size of the splitter along the main axis (width if direction is row, or height if direction is column)
36
+ --sci-sashbox-splitter-size-hover: var(--sci-splitter-size-hover), // size of the splitter along the main axis when hovering it.
37
+ --sci-sashbox-splitter-touch-target-size: var(--sci-splitter-touch-target-size), // touch target size to move the splitter (accessibility)
38
+ --sci-sashbox-splitter-cross-axis-size: var(--sci-splitter-cross-axis-size), // handle size along the cross-axis
39
+ --sci-sashbox-splitter-cross-axis-start: var(--sci-splitter-cross-axis-start), // handle start position on the cross-axis
40
+ --sci-sashbox-splitter-cross-axis-end: var(--sci-splitter-cross-axis-end), // handle end position on the cross-axis. Requires `--sci-sashbox-splitter-cross-axis-size: auto`.
41
+ --sci-sashbox-splitter-border-radius: var(--sci-splitter-border-radius), // border radius of the splitter
42
+ --sci-sashbox-splitter-opacity-active: var(--sci-splitter-opacity-active), // opacity of the splitter while the user moves the splitter
43
+ --sci-sashbox-splitter-opacity-hover: var(--sci-splitter-opacity-hover), // opacity of the splitter when hovering it
44
+ );
45
+
46
+ $sci-menu: (
47
+ --sci-menu-font-size: initial, // based on --sci-menu-item-size
48
+ --sci-menu-border-radius: var(--sci-corner),
49
+ --sci-menu-min-width: 15em,
50
+ --sci-menu-submenu-min-width: 10em,
51
+ --sci-menu-item-size: var(--sci-button-icon-size),
52
+ --sci-menu-item-cursor: var(--sci-button-cursor),
53
+ --sci-menu-item-text-color: var(--sci-button-text-color),
54
+ --sci-menu-item-text-color-disabled: var(--sci-button-text-color-disabled),
55
+ --sci-menu-item-background-color-hover: color-mix(in srgb, var(--sci-color-accent) 35%, var(--sci-color-gray-100)),
56
+ --sci-menu-item-background-color-active: color-mix(in srgb, var(--sci-menu-item-background-color-hover) 97.5%, var(--sci-static-color-white)),
57
+ --sci-menu-item-border-radius: var(--sci-button-border-radius),
58
+ --sci-menu-item-outline-width: var(--sci-button-outline-width),
59
+ --sci-menu-item-accelerator-text-color: var(--sci-color-text-subtlest),
60
+ --sci-menu-item-active-indicator-size: 3px,
61
+ --sci-menu-item-active-indicator-background-color: var(--sci-color-accent),
62
+ --sci-menu-item-active-indicator-border-radius: var(--sci-corner-small),
63
+ --sci-menu-group-header-font-family: inherit,
64
+ --sci-menu-group-header-font-size: .95em,
65
+ --sci-menu-group-header-font-weight: 500,
66
+ --sci-menu-group-header-text-color: var(--sci-color-text-subtlest),
67
+ --sci-menu-filter-outline-width: var(--sci-button-outline-width),
68
+ --sci-menu-filter-outline-radius: var(--sci-corner-small),
69
+ );
70
+
71
+ $sci-toolbar: (
72
+ --sci-toolbar-font-size: initial, // based on --sci-toolbar-item-size
73
+ --sci-toolbar-item-size: var(--sci-button-icon-size),
74
+ --sci-toolbar-item-cursor: var(--sci-button-cursor),
75
+ --sci-toolbar-item-text-color: var(--sci-button-text-color),
76
+ --sci-toolbar-item-text-color-disabled: var(--sci-button-text-color-disabled),
77
+ --sci-toolbar-item-background-color: transparent,
78
+ --sci-toolbar-item-background-color-hover: var(--sci-button-background-color-hover),
79
+ --sci-toolbar-item-background-color-active: var(--sci-button-background-color-active),
80
+ --sci-toolbar-item-background-color-checked: color-mix(in srgb, var(--sci-color-gray-200) 95%, var(--sci-static-color-white)),
81
+ --sci-toolbar-item-border-radius: var(--sci-button-border-radius),
82
+ --sci-toolbar-item-border-color-hover: transparent,
83
+ --sci-toolbar-item-border-color-checked: var(--sci-color-border),
84
+ --sci-toolbar-item-outline-width: var(--sci-button-outline-width),
85
+ --sci-toolbar-item-menu-indicator-color: var(--sci-color-text-subtle),
86
+ --sci-toolbar-item-menu-indicator-color-disabled: var(--sci-color-gray-500),
87
+ --sci-toolbar-item-menu-indicator-size: 3px,
88
+ );
89
+
90
+ $sci-menubar: (
91
+ --sci-menubar-font-size: initial, // based on --sci-menubar-item-size
92
+ --sci-menubar-item-size: var(--sci-button-icon-size),
93
+ --sci-menubar-item-cursor: var(--sci-button-cursor),
94
+ --sci-menubar-item-border-radius: var(--sci-button-border-radius),
95
+ --sci-menubar-item-background-color-hover: var(--sci-button-background-color-hover),
96
+ --sci-menubar-item-background-color-active: var(--sci-button-background-color-active),
97
+ --sci-menubar-item-outline-width: var(--sci-button-outline-width),
98
+ );
99
+
100
+ $sci-table: (
101
+ --sci-table-gridline-color: transparent,
102
+ --sci-table-header-height: 2em,
103
+ --sci-table-header-cursor: var(--sci-button-cursor),
104
+ --sci-table-header-background-color: var(--sci-color-background-primary),
105
+ --sci-table-header-background-color-hover: var(--sci-table-row-background-color-hover),
106
+ --sci-table-header-font-family: inherit,
107
+ --sci-table-header-font-size: 1em,
108
+ --sci-table-header-font-weight: 700,
109
+ --sci-table-header-text-color: inherit,
110
+ --sci-table-header-column-divider: visible,
111
+ --sci-table-row-height: 2em,
112
+ --sci-table-row-background-color-hover: var(--sci-color-gray-100),
113
+ --sci-table-row-background-color-selected: color-mix(in srgb, var(--sci-color-accent) 35%, var(--sci-color-gray-100)),
114
+ --sci-table-row-border-radius: var(--sci-corner-small),
115
+ --sci-table-row-outline-color: var(--sci-color-accent),
116
+ --sci-table-row-outline-width: 1px,
117
+ --sci-table-row-outline-style: dotted,
118
+ --sci-table-row-action-background-color: var(--sci-color-gray-200),
119
+ --sci-table-row-action-background-color-selected: color-mix(in srgb, var(--sci-table-row-background-color-selected) 87.5%, var(--sci-static-color-white)),
120
+ --sci-table-cell-padding-inline: .5em,
121
+ );
122
+
123
+ $sci-button: (
124
+ --sci-button-cursor: default,
125
+ --sci-button-background-color-hover: var(--sci-color-gray-200),
126
+ --sci-button-background-color-active: var(--sci-color-gray-300),
127
+ --sci-button-text-color: var(--sci-color-text),
128
+ --sci-button-text-color-disabled: var(--sci-color-text-subtlest),
129
+ --sci-button-border-radius: var(--sci-corner),
130
+ --sci-button-outline-width: 2px,
131
+ --sci-button-icon-size: 16px,
132
+ );
133
+
134
+ $sci-skeleton: (
135
+ --sci-color-skeleton-subtle: var(--sci-color-gray-200),
136
+ --sci-color-skeleton: var(--sci-color-gray-300),
137
+ --sci-color-skeleton-hover: var(--sci-color-gray-400),
138
+ --sci-color-skeleton-active: var(--sci-color-gray-400),
139
+ );
140
+
141
+ $tokens: sci-theming.map-merge(
142
+ $sci-scrollbar,
143
+ $sci-viewport,
144
+ $sci-throbber,
145
+ $sci-splitter,
146
+ $sci-sashbox,
147
+ $sci-menu,
148
+ $sci-menubar,
149
+ $sci-toolbar,
150
+ $sci-button,
151
+ $sci-table,
152
+ $sci-skeleton,
153
+ );
@@ -0,0 +1,153 @@
1
+ @use '../theming' as sci-theming;
2
+
3
+ $sci-scrollbar: (
4
+ --sci-scrollbar-color: var(--sci-color-gray-700),
5
+ );
6
+
7
+ $sci-viewport: (
8
+ --sci-viewport-scrollbar-color: var(--sci-scrollbar-color),
9
+ );
10
+
11
+ $sci-throbber: (
12
+ --sci-throbber-color: var(--sci-color-gray-300),
13
+ --sci-throbber-size: 50px,
14
+ --sci-throbber-duration: 1.25s,
15
+ );
16
+
17
+ $sci-splitter: (
18
+ --sci-splitter-background-color: var(--sci-color-border), // background color of the splitter
19
+ --sci-splitter-background-color-hover: var(--sci-splitter-background-color), // background color of the splitter when hovering it
20
+ --sci-splitter-size: 1px, // size of the splitter along the main axis (width if direction is row, or height if direction is column)
21
+ --sci-splitter-size-hover: 8px, // size of the splitter along the main axis when hovering it.
22
+ --sci-splitter-touch-target-size: 15px, // touch target size to move the splitter (accessibility)
23
+ --sci-splitter-cross-axis-size: 100%, // handle size along the cross-axis
24
+ --sci-splitter-cross-axis-start: auto, // handle start position on the cross-axis
25
+ --sci-splitter-cross-axis-end: auto, // handle end position on the cross-axis. Requires `--sci-splitter-cross-axis-start: auto`.
26
+ --sci-splitter-border-radius: 0, // border radius of the splitter
27
+ --sci-splitter-opacity-active: 1, // opacity of the splitter while the user moves the splitter
28
+ --sci-splitter-opacity-hover: .3, // opacity of the splitter when hovering it
29
+ );
30
+
31
+ $sci-sashbox: (
32
+ --sci-sashbox-gap: 10px, // gaps (gutters) between sashes
33
+ --sci-sashbox-splitter-background-color: var(--sci-splitter-background-color), // background color of the splitter
34
+ --sci-sashbox-splitter-background-color-hover: var(--sci-splitter-background-color), // background color of the splitter when hovering it
35
+ --sci-sashbox-splitter-size: var(--sci-splitter-size), // size of the splitter along the main axis (width if direction is row, or height if direction is column)
36
+ --sci-sashbox-splitter-size-hover: var(--sci-splitter-size-hover), // size of the splitter along the main axis when hovering it.
37
+ --sci-sashbox-splitter-touch-target-size: var(--sci-splitter-touch-target-size), // touch target size to move the splitter (accessibility)
38
+ --sci-sashbox-splitter-cross-axis-size: var(--sci-splitter-cross-axis-size), // handle size along the cross-axis
39
+ --sci-sashbox-splitter-cross-axis-start: var(--sci-splitter-cross-axis-start), // handle start position on the cross-axis
40
+ --sci-sashbox-splitter-cross-axis-end: var(--sci-splitter-cross-axis-end), // handle end position on the cross-axis. Requires `--sci-sashbox-splitter-cross-axis-size: auto`.
41
+ --sci-sashbox-splitter-border-radius: var(--sci-splitter-border-radius), // border radius of the splitter
42
+ --sci-sashbox-splitter-opacity-active: var(--sci-splitter-opacity-active), // opacity of the splitter while the user moves the splitter
43
+ --sci-sashbox-splitter-opacity-hover: var(--sci-splitter-opacity-hover), // opacity of the splitter when hovering it
44
+ );
45
+
46
+ $sci-menu: (
47
+ --sci-menu-font-size: initial, // based on --sci-menu-item-size
48
+ --sci-menu-border-radius: var(--sci-corner),
49
+ --sci-menu-min-width: 15em,
50
+ --sci-menu-submenu-min-width: 10em,
51
+ --sci-menu-item-size: var(--sci-button-icon-size),
52
+ --sci-menu-item-cursor: var(--sci-button-cursor),
53
+ --sci-menu-item-text-color: var(--sci-button-text-color),
54
+ --sci-menu-item-text-color-disabled: var(--sci-button-text-color-disabled),
55
+ --sci-menu-item-background-color-hover: var(--sci-button-background-color-hover),
56
+ --sci-menu-item-background-color-active: var(--sci-button-background-color-active),
57
+ --sci-menu-item-border-radius: var(--sci-button-border-radius),
58
+ --sci-menu-item-outline-width: var(--sci-button-outline-width),
59
+ --sci-menu-item-accelerator-text-color: var(--sci-color-text-subtlest),
60
+ --sci-menu-item-active-indicator-size: 3px,
61
+ --sci-menu-item-active-indicator-background-color: var(--sci-color-accent),
62
+ --sci-menu-item-active-indicator-border-radius: var(--sci-corner-small),
63
+ --sci-menu-group-header-font-family: inherit,
64
+ --sci-menu-group-header-font-size: .95em,
65
+ --sci-menu-group-header-font-weight: 500,
66
+ --sci-menu-group-header-text-color: var(--sci-color-text-subtlest),
67
+ --sci-menu-filter-outline-width: var(--sci-button-outline-width),
68
+ --sci-menu-filter-outline-radius: var(--sci-corner-small),
69
+ );
70
+
71
+ $sci-toolbar: (
72
+ --sci-toolbar-font-size: initial, // based on --sci-toolbar-item-size
73
+ --sci-toolbar-item-size: var(--sci-button-icon-size),
74
+ --sci-toolbar-item-cursor: var(--sci-button-cursor),
75
+ --sci-toolbar-item-text-color: var(--sci-button-text-color),
76
+ --sci-toolbar-item-text-color-disabled: var(--sci-button-text-color-disabled),
77
+ --sci-toolbar-item-background-color: transparent,
78
+ --sci-toolbar-item-background-color-hover: var(--sci-button-background-color-hover),
79
+ --sci-toolbar-item-background-color-active: var(--sci-button-background-color-active),
80
+ --sci-toolbar-item-background-color-checked: color-mix(in srgb, var(--sci-color-gray-200) 65%, var(--sci-static-color-white)),
81
+ --sci-toolbar-item-border-radius: var(--sci-button-border-radius),
82
+ --sci-toolbar-item-border-color-hover: transparent,
83
+ --sci-toolbar-item-border-color-checked: var(--sci-color-border),
84
+ --sci-toolbar-item-outline-width: var(--sci-button-outline-width),
85
+ --sci-toolbar-item-menu-indicator-color: var(--sci-color-text-subtle),
86
+ --sci-toolbar-item-menu-indicator-color-disabled: var(--sci-color-gray-500),
87
+ --sci-toolbar-item-menu-indicator-size: 3px,
88
+ );
89
+
90
+ $sci-menubar: (
91
+ --sci-menubar-font-size: initial, // based on --sci-menubar-item-size
92
+ --sci-menubar-item-size: var(--sci-button-icon-size),
93
+ --sci-menubar-item-cursor: var(--sci-button-cursor),
94
+ --sci-menubar-item-border-radius: var(--sci-button-border-radius),
95
+ --sci-menubar-item-background-color-hover: var(--sci-button-background-color-hover),
96
+ --sci-menubar-item-background-color-active: var(--sci-button-background-color-active),
97
+ --sci-menubar-item-outline-width: var(--sci-button-outline-width),
98
+ );
99
+
100
+ $sci-table: (
101
+ --sci-table-gridline-color: transparent,
102
+ --sci-table-header-height: 2em,
103
+ --sci-table-header-cursor: var(--sci-button-cursor),
104
+ --sci-table-header-background-color: var(--sci-color-background-primary),
105
+ --sci-table-header-background-color-hover: var(--sci-table-row-background-color-hover),
106
+ --sci-table-header-font-family: inherit,
107
+ --sci-table-header-font-size: 1em,
108
+ --sci-table-header-font-weight: 700,
109
+ --sci-table-header-text-color: inherit,
110
+ --sci-table-header-column-divider: visible,
111
+ --sci-table-row-height: 2em,
112
+ --sci-table-row-background-color-hover: color-mix(in srgb, var(--sci-color-gray-200) 60%, var(--sci-static-color-white)),
113
+ --sci-table-row-background-color-selected: var(--sci-color-background-accent),
114
+ --sci-table-row-border-radius: var(--sci-corner-small),
115
+ --sci-table-row-outline-color: var(--sci-color-accent),
116
+ --sci-table-row-outline-width: 1px,
117
+ --sci-table-row-outline-style: dotted,
118
+ --sci-table-row-action-background-color: var(--sci-color-background-primary),
119
+ --sci-table-row-action-background-color-selected: var(--sci-color-background-primary),
120
+ --sci-table-cell-padding-inline: .5em,
121
+ );
122
+
123
+ $sci-button: (
124
+ --sci-button-cursor: default,
125
+ --sci-button-background-color-hover: color-mix(in srgb, var(--sci-color-gray-200) 95%, var(--sci-static-color-white)),
126
+ --sci-button-background-color-active: var(--sci-color-gray-300),
127
+ --sci-button-text-color: var(--sci-color-text),
128
+ --sci-button-text-color-disabled: var(--sci-color-text-subtlest),
129
+ --sci-button-border-radius: var(--sci-corner),
130
+ --sci-button-outline-width: 2px,
131
+ --sci-button-icon-size: 16px,
132
+ );
133
+
134
+ $sci-skeleton: (
135
+ --sci-color-skeleton-subtle: var(--sci-color-gray-200),
136
+ --sci-color-skeleton: var(--sci-color-gray-300),
137
+ --sci-color-skeleton-hover: var(--sci-color-gray-400),
138
+ --sci-color-skeleton-active: var(--sci-color-gray-400),
139
+ );
140
+
141
+ $tokens: sci-theming.map-merge(
142
+ $sci-scrollbar,
143
+ $sci-viewport,
144
+ $sci-throbber,
145
+ $sci-splitter,
146
+ $sci-sashbox,
147
+ $sci-menu,
148
+ $sci-menubar,
149
+ $sci-toolbar,
150
+ $sci-button,
151
+ $sci-table,
152
+ $sci-skeleton,
153
+ );
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Installs icons used in SCION.
3
+ */
4
+
5
+ @use 'sass:map';
6
+
7
+ /**
8
+ * Current version of the icon font.
9
+ *
10
+ * UPDATE THIS VERSION WHEN ADDING, REMOVING OR CHANGING ICONS.
11
+ *
12
+ * This version is appended to the HTTP request as query parameter when fetching the icon font to support cache busting.
13
+ */
14
+ $-version: 1;
15
+
16
+ /**
17
+ * By default, the icon font is loaded from the CDN: https://cdn.jsdelivr.net/npm/@scion/icons
18
+ */
19
+ $-icon-font-defaults: (
20
+ // NOTE: If self-hosting SCION icons, the font path must be "root-relative" or excluded from the application build.
21
+ // Otherwise, the build fails because the builder cannot resolve the font files relative to "this" SASS file.
22
+ // For esbuild, register excluded assets as `externalDependencies` in angular.json.
23
+ // For webpack, exclude assets by prefixing their path with a leading caret (^).
24
+ directory: 'https://cdn.jsdelivr.net/npm/@scion/icons',
25
+ filename: 'scion-icons',
26
+ version: $-version,
27
+ );
28
+
29
+ /**
30
+ * Installs the 'scion-icons' font to render SCION icons.
31
+ *
32
+ * SCION icons are rendered in `ScionIconComponent`.
33
+ */
34
+ @mixin install-icon-font($config) {
35
+ $config: if(sass($config): $config; else: ());
36
+ $config: map.merge($-icon-font-defaults, $config);
37
+ $path: map.get($config, directory) + '/' + map.get($config, filename);
38
+ $version: map.get($config, version);
39
+
40
+ @font-face {
41
+ font-family: 'scion-icons';
42
+ src: url($path + '.ttf?' + $version) format('truetype'),
43
+ url($path + '.woff?' + $version) format('woff'),
44
+ url($path + '.svg?' + $version + '#scion-icons') format('svg');
45
+ font-weight: normal;
46
+ font-style: normal;
47
+ // Prevent a flash of unstyled text content (FOUC) showing the ligatures until the font loads.
48
+ font-display: block;
49
+ }
50
+ }
@@ -2,9 +2,9 @@
2
2
  @use '../theming' as sci-theming;
3
3
  @use '../colors/scion-static-colors';
4
4
  @use '../colors/scion-dark-colors';
5
- @use '../components/scion-component-tokens';
5
+ @use '../components/scion-component-dark-tokens';
6
6
 
7
- $theme: sci-theming.map-merge(scion-static-colors.$tokens, scion-dark-colors.$tokens, scion-component-tokens.$tokens, (
7
+ $theme: sci-theming.map-merge(scion-static-colors.$tokens, scion-dark-colors.$tokens, scion-component-dark-tokens.$tokens, (
8
8
  // Use for highlighting calls to action and emphasizing important information or key messages.
9
9
  --sci-color-accent: var(--sci-color-blue-500),
10
10
  --sci-color-accent-inverse: var(--sci-static-color-white),
@@ -21,11 +21,6 @@ $theme: sci-theming.map-merge(scion-static-colors.$tokens, scion-dark-colors.$to
21
21
  --sci-color-notice: var(--sci-color-orange-700),
22
22
  --sci-color-notice-inverse: var(--sci-static-color-white),
23
23
  --sci-color-background-notice: var(--sci-color-orange-1200),
24
- // Use for skeleton loading progress indicators.
25
- --sci-color-skeleton-subtle: var(--sci-color-gray-200),
26
- --sci-color-skeleton: var(--sci-color-gray-300),
27
- --sci-color-skeleton-hover: var(--sci-color-gray-400),
28
- --sci-color-skeleton-active: var(--sci-color-gray-400),
29
24
  // Use as the primary background for the UI.
30
25
  --sci-color-background-primary: var(--sci-color-gray-50),
31
26
  // Use as the background for navbars, menubars, toolbars, tabbars, sidebars and panels
@@ -2,13 +2,13 @@
2
2
  @use '../theming' as sci-theming;
3
3
  @use '../colors/scion-static-colors';
4
4
  @use '../colors/scion-light-colors';
5
- @use '../components/scion-component-tokens';
5
+ @use '../components/scion-component-light-tokens';
6
6
 
7
- $theme: sci-theming.map-merge(scion-static-colors.$tokens, scion-light-colors.$tokens, scion-component-tokens.$tokens, (
7
+ $theme: sci-theming.map-merge(scion-static-colors.$tokens, scion-light-colors.$tokens, scion-component-light-tokens.$tokens, (
8
8
  // Use for highlighting calls to action and emphasizing important information or key messages.
9
9
  --sci-color-accent: var(--sci-color-blue-900),
10
10
  --sci-color-accent-inverse: var(--sci-static-color-white),
11
- --sci-color-background-accent: var(--sci-color-blue-100),
11
+ --sci-color-background-accent: var(--sci-color-blue-200),
12
12
  // Use as positive semantic color to indicate success, positive states and completed tasks.
13
13
  --sci-color-positive: var(--sci-color-green-900),
14
14
  --sci-color-positive-inverse: var(--sci-static-color-white),
@@ -21,11 +21,6 @@ $theme: sci-theming.map-merge(scion-static-colors.$tokens, scion-light-colors.$t
21
21
  --sci-color-notice: var(--sci-color-orange-700),
22
22
  --sci-color-notice-inverse: var(--sci-static-color-white),
23
23
  --sci-color-background-notice: var(--sci-color-orange-100),
24
- // Use for skeleton loading progress indicators.
25
- --sci-color-skeleton-subtle: var(--sci-color-gray-200),
26
- --sci-color-skeleton: var(--sci-color-gray-300),
27
- --sci-color-skeleton-hover: var(--sci-color-gray-400),
28
- --sci-color-skeleton-active: var(--sci-color-gray-400),
29
24
  // Use as the primary background for the UI.
30
25
  --sci-color-background-primary: var(--sci-color-gray-50),
31
26
  // Use as the background for navbars, menubars, toolbars, tabbars, sidebars and panels