@filip.mazev/blocks 1.4.14 → 1.4.15
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/README.md +5 -5
- package/core/styles/_index.scss +3 -9
- package/core/styles/_palettes.scss +54 -10
- package/core/styles/themes/_azure-ember-theme.scss +4 -0
- package/core/styles/themes/_brick-rose-cyan-theme.scss +4 -0
- package/core/styles/themes/_carbon-cobalt-theme.scss +4 -0
- package/fesm2022/filip.mazev-blocks-core.mjs +20 -31
- package/fesm2022/filip.mazev-blocks-core.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks.mjs +1 -1
- package/fesm2022/filip.mazev-blocks.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/ng-add/index.d.ts +1 -10
- package/schematics/ng-add/index.js +4 -13
- package/schematics/ng-add/schema.json +11 -17
- package/types/filip.mazev-blocks-core.d.ts +4 -13
- package/types/filip.mazev-blocks.d.ts +1 -1
- package/core/styles/themes/_azure-coral-theme.scss +0 -4
- package/core/styles/themes/_blue-theme.scss +0 -5
- package/core/styles/themes/_graphite-sky-blue-theme.scss +0 -19
- package/core/styles/themes/_green-theme.scss +0 -5
- package/core/styles/themes/_orange-theme.scss +0 -5
- package/core/styles/themes/_purple-theme.scss +0 -5
- package/core/styles/themes/_red-theme.scss +0 -5
- package/core/styles/themes/_scarlet-cyan-theme.scss +0 -4
- package/core/styles/themes/_white-theme.scss +0 -5
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ ng add @filip.mazev/blocks
|
|
|
18
18
|
|
|
19
19
|
When you run the command above, the Angular CLI will execute our custom schematic to handle the boilerplate for you:
|
|
20
20
|
|
|
21
|
-
* Palette selection:
|
|
21
|
+
* Palette selection: Carbon / Cobalt is the CLI default. Azure / Ember, Violet / Teal, Tangerine / Indigo, Brick Rose / Cyan, Lime / Violet, and Cyberpunk are also available. Use `--theme=azure-ember` to select Azure / Ember.
|
|
22
22
|
* Dependency Management: Automatically adds the latest versions of the Blocks ecosystem to your package.json and runs npm install.
|
|
23
23
|
* SCSS Injection: Intelligently locates your project's global stylesheet (styles.scss or styles.sass) and injects the required @use statements, mixins, and both light/dark mode CSS variables based on your theme selection.
|
|
24
24
|
|
|
@@ -37,11 +37,11 @@ Then, manually configure your styles.scss:
|
|
|
37
37
|
|
|
38
38
|
@layer base {
|
|
39
39
|
:root {
|
|
40
|
-
@include bx-theme($
|
|
40
|
+
@include bx-theme($carbon-cobalt-light-theme);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
[data-theme='dark'] {
|
|
44
|
-
@include bx-theme($
|
|
44
|
+
@include bx-theme($carbon-cobalt-dark-theme);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
```
|
|
@@ -52,10 +52,10 @@ Then, manually configure your styles.scss:
|
|
|
52
52
|
Use paired palette IDs consistently in the CLI and `ThemingService.setPalette()`. For example:
|
|
53
53
|
|
|
54
54
|
```sh
|
|
55
|
-
ng add @filip.mazev/blocks --theme=azure-
|
|
55
|
+
ng add @filip.mazev/blocks --theme=azure-ember
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
The Sass exports use the same names: `$azure-
|
|
58
|
+
The Sass exports use the same names: `$azure-ember-light-theme` and `$azure-ember-dark-theme`. Carbon / Cobalt is the installer default; the playground starts with Carbon / Cobalt. Only the current palette IDs and Sass names are supported.
|
|
59
59
|
|
|
60
60
|
Buttons and tabs accept `color="accent"` for the second tone. Icons and custom components can use semantic tokens such as `text-accent`, `accent-subtle`, `on-accent`, and `border-accent`. Canvas backgrounds stay neutral; status roles keep their meaning. See [the palette reference](../../documentation/appearance/README.md#palettes) for all seven pairs.
|
|
61
61
|
|
package/core/styles/_index.scss
CHANGED
|
@@ -4,18 +4,12 @@
|
|
|
4
4
|
@forward 'palettes';
|
|
5
5
|
@forward 'theme-engine';
|
|
6
6
|
@forward 'a11y';
|
|
7
|
-
@forward 'themes/
|
|
8
|
-
@forward 'themes/azure-
|
|
7
|
+
@forward 'themes/carbon-cobalt-theme';
|
|
8
|
+
@forward 'themes/azure-ember-theme';
|
|
9
|
+
@forward 'themes/brick-rose-cyan-theme';
|
|
9
10
|
@forward 'themes/violet-teal-theme';
|
|
10
11
|
@forward 'themes/tangerine-indigo-theme';
|
|
11
|
-
@forward 'themes/scarlet-cyan-theme';
|
|
12
12
|
@forward 'themes/lime-violet-theme';
|
|
13
|
-
@forward 'themes/white-theme';
|
|
14
|
-
@forward 'themes/blue-theme';
|
|
15
|
-
@forward 'themes/purple-theme';
|
|
16
|
-
@forward 'themes/orange-theme';
|
|
17
|
-
@forward 'themes/red-theme';
|
|
18
|
-
@forward 'themes/green-theme';
|
|
19
13
|
@forward 'themes/cyberpunk-theme';
|
|
20
14
|
@forward 'themes/high-contrast-theme';
|
|
21
15
|
@forward 'slider';
|
|
@@ -180,28 +180,72 @@ $hc-yellow: #e4d500;
|
|
|
180
180
|
$hc-cyan: #00f3f3;
|
|
181
181
|
$hc-red: #ff0000;
|
|
182
182
|
$hc-green: #00ff00;
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
$
|
|
186
|
-
|
|
183
|
+
|
|
184
|
+
// Tune the upper tones explicitly so dark actions retain their color character.
|
|
185
|
+
$carbon-palette: map.merge(
|
|
186
|
+
_tonal-palette(#292a2d),
|
|
187
|
+
(
|
|
188
|
+
50: #fdfdfc,
|
|
189
|
+
100: #f7f7f5,
|
|
190
|
+
200: #efefed,
|
|
191
|
+
300: #e2e2e0,
|
|
192
|
+
400: #77797d,
|
|
193
|
+
)
|
|
194
|
+
) !default;
|
|
195
|
+
$cobalt-palette: map.merge(
|
|
196
|
+
_tonal-palette(#356fe8),
|
|
197
|
+
(
|
|
198
|
+
200: #abc5ff,
|
|
199
|
+
300: #6d9aff,
|
|
200
|
+
400: #4c82f2,
|
|
201
|
+
)
|
|
202
|
+
) !default;
|
|
203
|
+
$ember-palette: map.merge(
|
|
204
|
+
_tonal-palette(#d85a1a),
|
|
205
|
+
(
|
|
206
|
+
200: #f5a365,
|
|
207
|
+
300: #f27b35,
|
|
208
|
+
400: #e96926,
|
|
209
|
+
)
|
|
210
|
+
) !default;
|
|
211
|
+
$brick-rose-palette: map.merge(
|
|
212
|
+
_tonal-palette(#b64a50),
|
|
213
|
+
(
|
|
214
|
+
200: #e69ba4,
|
|
215
|
+
300: #d36b77,
|
|
216
|
+
400: #c55964,
|
|
217
|
+
)
|
|
218
|
+
) !default;
|
|
219
|
+
$azure-palette: map.merge(
|
|
220
|
+
$blue-palette,
|
|
221
|
+
(
|
|
222
|
+
300: #72a7ff,
|
|
223
|
+
)
|
|
224
|
+
) !default;
|
|
187
225
|
$violet-palette: $purple-palette !default;
|
|
188
226
|
$teal-palette: _tonal-palette(#0d9488) !default;
|
|
189
227
|
$tangerine-palette: $orange-palette !default;
|
|
190
228
|
$indigo-palette: _tonal-palette(#4f78f5) !default;
|
|
191
|
-
$
|
|
192
|
-
|
|
229
|
+
$cyan-palette: map.merge(
|
|
230
|
+
_tonal-palette(#0891b2),
|
|
231
|
+
(
|
|
232
|
+
200: #78d8e6,
|
|
233
|
+
300: #22b8d0,
|
|
234
|
+
400: #12a4bf,
|
|
235
|
+
)
|
|
236
|
+
) !default;
|
|
193
237
|
$lime-palette: _tonal-palette(#c4f53d) !default;
|
|
194
238
|
$cool-violet-palette: _tonal-palette(#6842a6) !default;
|
|
195
239
|
$all-palettes: (
|
|
196
|
-
'
|
|
197
|
-
'
|
|
240
|
+
'carbon': $carbon-palette,
|
|
241
|
+
'cobalt': $cobalt-palette,
|
|
242
|
+
'ember': $ember-palette,
|
|
243
|
+
'brick-rose': $brick-rose-palette,
|
|
198
244
|
'azure': $azure-palette,
|
|
199
|
-
'coral': $coral-palette,
|
|
200
245
|
'violet': $violet-palette,
|
|
201
246
|
'teal': $teal-palette,
|
|
202
247
|
'tangerine': $tangerine-palette,
|
|
203
248
|
'indigo': $indigo-palette,
|
|
204
|
-
'scarlet': $scarlet-palette,
|
|
205
249
|
'cyan': $cyan-palette,
|
|
206
250
|
'lime': $lime-palette,
|
|
207
251
|
'cool-violet': $cool-violet-palette,
|
|
@@ -348,26 +348,18 @@ const DEFAULT_APPEARANCE_CONFIG = Object.freeze({
|
|
|
348
348
|
quality: "auto",
|
|
349
349
|
reducedTransparency: false
|
|
350
350
|
});
|
|
351
|
-
const LEGACY_THEME_IDS = {
|
|
352
|
-
white: "graphite-sky-blue",
|
|
353
|
-
blue: "azure-coral",
|
|
354
|
-
purple: "violet-teal",
|
|
355
|
-
orange: "tangerine-indigo",
|
|
356
|
-
red: "scarlet-cyan",
|
|
357
|
-
green: "lime-violet"
|
|
358
|
-
};
|
|
359
351
|
const THEME_PALETTES = [
|
|
360
352
|
{
|
|
361
|
-
id: "
|
|
362
|
-
label: "
|
|
363
|
-
className: "theme-
|
|
364
|
-
colors: ["#
|
|
353
|
+
id: "carbon-cobalt",
|
|
354
|
+
label: "Carbon / Cobalt",
|
|
355
|
+
className: "theme-carbon-cobalt",
|
|
356
|
+
colors: ["#292a2d", "#356fe8"]
|
|
365
357
|
},
|
|
366
358
|
{
|
|
367
|
-
id: "azure-
|
|
368
|
-
label: "Azure /
|
|
369
|
-
className: "theme-azure-
|
|
370
|
-
colors: ["#217eff", "#
|
|
359
|
+
id: "azure-ember",
|
|
360
|
+
label: "Azure / Ember",
|
|
361
|
+
className: "theme-azure-ember",
|
|
362
|
+
colors: ["#217eff", "#d85a1a"]
|
|
371
363
|
},
|
|
372
364
|
{
|
|
373
365
|
id: "violet-teal",
|
|
@@ -382,10 +374,10 @@ const THEME_PALETTES = [
|
|
|
382
374
|
colors: ["#ff6900", "#4f78f5"]
|
|
383
375
|
},
|
|
384
376
|
{
|
|
385
|
-
id: "
|
|
386
|
-
label: "
|
|
387
|
-
className: "theme-
|
|
388
|
-
colors: ["#
|
|
377
|
+
id: "brick-rose-cyan",
|
|
378
|
+
label: "Brick Rose / Cyan",
|
|
379
|
+
className: "theme-brick-rose-cyan",
|
|
380
|
+
colors: ["#b64a50", "#0891b2"]
|
|
389
381
|
},
|
|
390
382
|
{
|
|
391
383
|
id: "lime-violet",
|
|
@@ -401,9 +393,7 @@ const THEME_PALETTES = [
|
|
|
401
393
|
}
|
|
402
394
|
];
|
|
403
395
|
function resolveThemeId(value) {
|
|
404
|
-
|
|
405
|
-
if (palette) return palette.id;
|
|
406
|
-
if (value && Object.prototype.hasOwnProperty.call(LEGACY_THEME_IDS, value)) return LEGACY_THEME_IDS[value];
|
|
396
|
+
return THEME_PALETTES.find((item) => item.id === value)?.id;
|
|
407
397
|
}
|
|
408
398
|
var BxA11yService = class BxA11yService {
|
|
409
399
|
document = inject(DOCUMENT$1);
|
|
@@ -477,7 +467,7 @@ var ThemingService = class ThemingService {
|
|
|
477
467
|
_appearance = signal({ ...DEFAULT_APPEARANCE_CONFIG }, ...ngDevMode ? [{ debugName: "_appearance" }] : /* istanbul ignore next */ []);
|
|
478
468
|
appearance = this._appearance.asReadonly();
|
|
479
469
|
palettes = THEME_PALETTES;
|
|
480
|
-
_palette = signal("
|
|
470
|
+
_palette = signal("carbon-cobalt", ...ngDevMode ? [{ debugName: "_palette" }] : /* istanbul ignore next */ []);
|
|
481
471
|
palette = this._palette.asReadonly();
|
|
482
472
|
paletteLabel = computed(() => this.palettes.find((item) => item.id === this.palette())?.label ?? this.palettes[0].label, ...ngDevMode ? [{ debugName: "paletteLabel" }] : /* istanbul ignore next */ []);
|
|
483
473
|
_highContrast = signal(false, ...ngDevMode ? [{ debugName: "_highContrast" }] : /* istanbul ignore next */ []);
|
|
@@ -505,7 +495,7 @@ var ThemingService = class ThemingService {
|
|
|
505
495
|
this.restoreAppearance();
|
|
506
496
|
const palette = this.readStored("theme-palette");
|
|
507
497
|
const storedHighContrast = this.readStored("theme-high-contrast");
|
|
508
|
-
this.setPalette(resolveThemeId(palette) ?? "
|
|
498
|
+
this.setPalette(resolveThemeId(palette) ?? "carbon-cobalt");
|
|
509
499
|
this.setHighContrast(storedHighContrast === null ? palette === "high-contrast" : storedHighContrast === "true");
|
|
510
500
|
this.appearanceController = configureAppearance(this.document.documentElement, {
|
|
511
501
|
...this.appearance(),
|
|
@@ -527,7 +517,6 @@ var ThemingService = class ThemingService {
|
|
|
527
517
|
const id = resolveThemeId(palette);
|
|
528
518
|
if (!id) return;
|
|
529
519
|
this._palette.set(id);
|
|
530
|
-
for (const legacy of Object.keys(LEGACY_THEME_IDS)) this.document.documentElement.classList.remove(`theme-${legacy}`);
|
|
531
520
|
for (const item of this.palettes) this.document.documentElement.classList.toggle(item.className, item.id === id);
|
|
532
521
|
if (this.isBrowser) this.writeStored("theme-palette", id);
|
|
533
522
|
}
|
|
@@ -999,15 +988,15 @@ const SCROLL_LOCK_INSTANCE_IDENTIFIER = "scroll_lock_instance_";
|
|
|
999
988
|
const PALETTE_NAMES = [
|
|
1000
989
|
"primary",
|
|
1001
990
|
"accent",
|
|
1002
|
-
"
|
|
1003
|
-
"
|
|
991
|
+
"carbon",
|
|
992
|
+
"cobalt",
|
|
993
|
+
"ember",
|
|
994
|
+
"brick-rose",
|
|
1004
995
|
"azure",
|
|
1005
|
-
"coral",
|
|
1006
996
|
"violet",
|
|
1007
997
|
"teal",
|
|
1008
998
|
"tangerine",
|
|
1009
999
|
"indigo",
|
|
1010
|
-
"scarlet",
|
|
1011
1000
|
"cyan",
|
|
1012
1001
|
"lime",
|
|
1013
1002
|
"cool-violet",
|
|
@@ -1282,6 +1271,6 @@ function trackOverlayOrigin(overlay, origin) {
|
|
|
1282
1271
|
host.classList.remove("bx-overlay-tracked");
|
|
1283
1272
|
};
|
|
1284
1273
|
}
|
|
1285
|
-
export { BREAKPOINTS, BX_I18N, BxA11yService, BxBaseControl, BxOverlayPositionService, BxShortcutService, DEFAULT_APPEARANCE_CONFIG, DEFAULT_DEBOUNCE_TIME, DesktopOS, DeviceTypeService, FALLBACK_COLOR,
|
|
1274
|
+
export { BREAKPOINTS, BX_I18N, BxA11yService, BxBaseControl, BxOverlayPositionService, BxShortcutService, DEFAULT_APPEARANCE_CONFIG, DEFAULT_DEBOUNCE_TIME, DesktopOS, DeviceTypeService, FALLBACK_COLOR, MobileOS, PALETTE_NAMES, SCROLL_LOCK_INSTANCE_IDENTIFIER, SEMANTIC_PAIRS, SHADE_NUMBERS, ScrollLockService, THEME_PALETTES, TOKEN_COLOR_DELIMITER, TOKEN_DELIMITER, TOKEN_PREFIX, ThemingService, WindowDimensionsService, getComplementaryToken, inheritOverlayTheme, invertPaletteToken, isOSShortcut, isPaletteToken, isTextWithKey, isThemedColor, resolveThemeId, resolveTokenToCssVar, trackOverlayOrigin, uuidv4 };
|
|
1286
1275
|
|
|
1287
1276
|
//# sourceMappingURL=filip.mazev-blocks-core.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filip.mazev-blocks-core.mjs","names":[],"sources":["../../../projects/blocks/core/enums/desktop-os.enum.ts","../../../projects/blocks/core/enums/mobile-os.enum.ts","../../../projects/blocks/core/services/device-type.service.ts","../../../projects/blocks/core/constants/window-dimension.constants.ts","../../../projects/blocks/core/services/window-dimension.service.ts","../../../projects/blocks/core/services/scroll-lock.service.ts","../../../projects/blocks/core/types/appearance.types.ts","../../../projects/blocks/core/helpers/theme-functions.ts","../../../projects/blocks/core/services/bx-a11y.service.ts","../../../projects/blocks/core/services/theming.service.ts","../../../projects/blocks/core/services/bx-overlay-position.service.ts","../../../projects/blocks/core/types/core.types.ts","../../../projects/blocks/core/services/bx-shortcut.service.ts","../../../projects/blocks/core/classes/bx-base-control.ts","../../../projects/blocks/core/constants/numeric.constants.ts","../../../projects/blocks/core/constants/scroll-lock.constants.ts","../../../projects/blocks/core/constants/tokens.constants.ts","../../../projects/blocks/core/tokens/bx-i18n.token.ts","../../../projects/blocks/core/helpers/core-functions.ts","../../../projects/blocks/core/helpers/token-functions.ts","../../../projects/blocks/core/helpers/uui4.ts","../../../projects/blocks/core/helpers/overlay-theme.ts","../../../projects/blocks/core/helpers/overlay-origin.ts"],"sourcesContent":["export enum DesktopOS {\n Linux = 'linux',\n MacOS = 'mac_os',\n Unix = 'unix',\n Unknown = 'unknown',\n Windows = 'windows'\n}\n","export enum MobileOS {\n Android = 'android',\n iOS = 'ios',\n Unknown = 'unknown',\n WindowsPhone = 'Windows Phone'\n}\n","import { Injectable, inject, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { DesktopOS } from '../enums/desktop-os.enum';\nimport { MobileOS } from '../enums/mobile-os.enum';\nimport { IDeviceState } from '../interfaces/idevice-state.interface';\nimport { DeviceOrientationType } from '../types/core.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceTypeService {\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private screenOrientation: DeviceOrientationType = 'portrait-primary';\n\n constructor() {\n if (this.isBrowser) {\n const win = this.document.defaultView;\n const screenObj = win?.screen as (Screen & { mozOrientation?: string; msOrientation?: string }) | undefined;\n\n const orientation = screenObj?.orientation?.type ?? screenObj?.mozOrientation ?? screenObj?.msOrientation;\n this.screenOrientation =\n this.toDeviceOrientation(orientation) ?? (win?.matchMedia('(orientation: portrait)').matches ? 'portrait-primary' : 'landscape-primary');\n\n if (screenObj?.orientation) {\n screenObj.orientation.addEventListener('change', (ev: Event) => {\n const eventOrientation = (ev.target as ScreenOrientation | null)?.type;\n const supportedOrientation = this.toDeviceOrientation(eventOrientation);\n if (supportedOrientation) this.screenOrientation = supportedOrientation;\n });\n }\n }\n }\n\n public isLandscapeOrientation(): boolean {\n return ['landscape-primary', 'landscape-secondary'].includes(this.screenOrientation);\n }\n\n public isPortraitOrientation(): boolean {\n return ['portrait-primary', 'portrait-secondary'].includes(this.screenOrientation);\n }\n\n public getDeviceState(): IDeviceState {\n const isMobile = this.isMobileDevice();\n const isTablet = this.isTabletDevice();\n const isDesktop = this.isDesktopDevice;\n\n const mobileOS = this.getMobileOS();\n const desktopOS = this.getDesktopOS();\n const deviceOS = mobileOS ?? desktopOS;\n\n return {\n isDesktop,\n desktopOS,\n isWindowsDesktop: deviceOS === DesktopOS.Windows,\n isLinuxOrUnixDesktop: deviceOS === DesktopOS.Linux || deviceOS === DesktopOS.Unix,\n isMobile,\n mobileOS,\n isAndroidDevice: deviceOS === MobileOS.Android,\n isAppleDevice: deviceOS === MobileOS.iOS || deviceOS === DesktopOS.MacOS,\n isUnknownMobileDevice: deviceOS === MobileOS.Unknown,\n isTablet,\n isLandscapeOrientation: () => this.isLandscapeOrientation(),\n isPortraitOrientation: () => this.isPortraitOrientation()\n };\n }\n\n private get userAgent(): string {\n if (!this.isBrowser) return '';\n const win = this.document.defaultView as Window & { opera?: string };\n return win?.navigator?.userAgent || win?.navigator?.vendor || win?.opera || '';\n }\n\n private toDeviceOrientation(value: string | undefined): DeviceOrientationType | undefined {\n return value === 'portrait-primary' || value === 'landscape-primary' || value === 'portrait-secondary' || value === 'landscape-secondary'\n ? value\n : undefined;\n }\n\n private get isDesktopDevice(): boolean {\n return !this.isMobileDevice() && !this.isTabletDevice();\n }\n\n private isMobileDevice(): boolean {\n const regexs = [/(Android)(.+)(Mobile)/i, /BlackBerry/i, /iPhone|iPod/i, /Opera Mini/i, /IEMobile/i];\n return regexs.some((regex) => regex.test(this.userAgent));\n }\n\n private isTabletDevice(): boolean {\n const regex = /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/i;\n return regex.test(this.userAgent);\n }\n\n private getMobileOS(): MobileOS | undefined {\n if (this.isMobileDevice()) {\n const ua = this.userAgent;\n if (/windows phone/i.test(ua)) return MobileOS.WindowsPhone;\n if (/android/i.test(ua)) return MobileOS.Android;\n const view = this.document.defaultView as (Window & { MSStream?: unknown }) | null;\n if (/iPad|iPhone|iPod/.test(ua) && !view?.MSStream) return MobileOS.iOS;\n\n return MobileOS.Unknown;\n }\n return undefined;\n }\n\n private getDesktopOS(): DesktopOS | undefined {\n if (this.isDesktopDevice) {\n const ua = this.userAgent;\n if (ua.includes('Win')) return DesktopOS.Windows;\n if (ua.includes('Mac')) return DesktopOS.MacOS;\n if (ua.includes('X11')) return DesktopOS.Unix;\n if (ua.includes('Linux')) return DesktopOS.Linux;\n\n return DesktopOS.Unknown;\n }\n return undefined;\n }\n}\n","export const BREAKPOINTS = {\n xs: 360,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n '3xl': 1920,\n '4xl': 2560\n} as const;\n","import { Injectable, inject, NgZone, PLATFORM_ID, signal, computed } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\nimport { BREAKPOINTS } from '../constants/window-dimension.constants';\nimport { IWindowDimensions } from '../interfaces/iwindow-dimensions.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WindowDimensionsService {\n public readonly ngZone = inject(NgZone);\n public readonly platformId = inject(PLATFORM_ID);\n\n public readonly isBrowser = isPlatformBrowser(this.platformId);\n\n public readonly _dimensions = signal<IWindowDimensions>(this.getCurrentDimensions());\n\n public readonly dimensions = this._dimensions.asReadonly();\n\n public readonly isMobile = computed(() => this.dimensions().width < BREAKPOINTS.md);\n public readonly isTablet = computed(() => this.dimensions().width >= BREAKPOINTS.md && this.dimensions().width < BREAKPOINTS.lg);\n public readonly isDesktop = computed(() => this.dimensions().width >= BREAKPOINTS.lg);\n\n public readonly breakpoints = BREAKPOINTS;\n\n constructor() {\n this.initResizeListener();\n }\n\n private getCurrentDimensions(): IWindowDimensions {\n if (!this.isBrowser) {\n return { width: 0, height: 0 };\n }\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n\n private initResizeListener(): void {\n if (!this.isBrowser) return;\n\n this.ngZone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(150),\n map(() => this.getCurrentDimensions()),\n distinctUntilChanged((prev, curr) => prev.width === curr.width && prev.height === curr.height)\n )\n .subscribe((dims) => {\n this.ngZone.run(() => {\n this._dimensions.set(dims);\n });\n });\n });\n }\n}\n","import { Injectable, OnDestroy, inject, signal, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DeviceTypeService } from './device-type.service';\nimport { WindowDimensionsService } from './window-dimension.service';\nimport { IScrollLockConfig } from '../interfaces/iscroll-lock-config.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class ScrollLockService implements OnDestroy {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly deviceTypeService = inject(DeviceTypeService);\n private readonly windowDimensionsService = inject(WindowDimensionsService);\n\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly activeLocks = new Map<string, IScrollLockConfig>();\n private readonly boundHandleTouchMove = this.handleTouchMove.bind(this);\n private readonly boundPreventDefault = this.preventDefault.bind(this);\n\n public readonly _isScrollDisabled = signal(false);\n public readonly isScrollDisabled = this._isScrollDisabled.asReadonly();\n\n private previousBodyPadding: string | null = null;\n\n private pendingListenerTimeout: number | null = null;\n\n public ngOnDestroy(): void {\n if (!this.isBrowser) return;\n this.clearPendingTimeout();\n this.forceCleanupAll();\n }\n\n public disableScroll(usageId: string, config: IScrollLockConfig): void {\n if (!this.isBrowser) return;\n\n const wasDisabled = this._isScrollDisabled();\n\n this.activeLocks.set(usageId, config);\n this._isScrollDisabled.set(true);\n\n if (wasDisabled) return;\n\n const documentWidth = document.documentElement.clientWidth;\n const windowWidth = window.innerWidth;\n const scrollBarWidth = windowWidth - documentWidth;\n\n if (scrollBarWidth > 0) {\n this.previousBodyPadding = document.body.style.paddingRight;\n const computedPadding = parseInt(getComputedStyle(document.body).paddingRight, 10) || 0;\n\n document.body.style.setProperty('padding-right', `${computedPadding + scrollBarWidth}px`, 'important');\n }\n\n document.body.style.setProperty('overflow', 'hidden', 'important');\n\n if (config.handleTouchInput !== false) {\n document.body.style.setProperty('touch-action', 'none', 'important');\n }\n\n this.clearPendingTimeout();\n\n this.pendingListenerTimeout = window.setTimeout(\n () => {\n if (!this._isScrollDisabled()) return;\n\n if (config.handleTouchInput === true) {\n document.body.addEventListener('touchmove', this.boundHandleTouchMove, { passive: false });\n }\n\n if (config.handleExtremeOverflow === true) {\n const opt = { passive: false };\n window.addEventListener('wheel', this.boundPreventDefault, opt);\n window.addEventListener('mousewheel', this.boundPreventDefault, opt);\n window.addEventListener('scroll', this.boundPreventDefault, opt);\n window.addEventListener('DOMMouseScroll', this.boundPreventDefault, opt);\n }\n },\n (config.animationDuration ?? 0) + 10\n );\n }\n\n public enableScroll(usageId: string, extremeOverflow?: boolean): void {\n if (!this.isBrowser) return;\n\n if (!this.activeLocks.has(usageId)) return;\n\n this.activeLocks.delete(usageId);\n\n if (this.activeLocks.size > 0) return;\n\n this.updateStateAndCleanup(extremeOverflow);\n }\n\n private getActiveConfig(): IScrollLockConfig | null {\n if (this.activeLocks.size === 0) return null;\n const keys = Array.from(this.activeLocks.keys());\n return this.activeLocks.get(keys[keys.length - 1]) ?? null;\n }\n\n private updateStateAndCleanup(extremeOverflow?: boolean): void {\n if (!this.isBrowser) return;\n\n this.clearPendingTimeout();\n\n this._isScrollDisabled.set(false);\n\n document.body.style.removeProperty('overflow');\n\n if (this.previousBodyPadding !== null) {\n if (this.previousBodyPadding) {\n document.body.style.setProperty('padding-right', this.previousBodyPadding);\n } else {\n document.body.style.removeProperty('padding-right');\n }\n this.previousBodyPadding = null;\n }\n\n document.body.removeEventListener('touchmove', this.boundHandleTouchMove);\n document.body.style.removeProperty('touch-action');\n\n if (extremeOverflow !== false) {\n window.removeEventListener('wheel', this.boundPreventDefault);\n window.removeEventListener('mousewheel', this.boundPreventDefault);\n window.removeEventListener('scroll', this.boundPreventDefault);\n window.removeEventListener('DOMMouseScroll', this.boundPreventDefault);\n }\n }\n\n private forceCleanupAll(): void {\n this.activeLocks.clear();\n this.updateStateAndCleanup(true);\n }\n\n private clearPendingTimeout(): void {\n if (this.pendingListenerTimeout !== null) {\n clearTimeout(this.pendingListenerTimeout);\n this.pendingListenerTimeout = null;\n }\n }\n\n private handleTouchMove(event: Event): void {\n const targetNode = event.target as Node;\n const cfg = this.getActiveConfig();\n\n if (!this.isAllowedToScroll(targetNode) && (cfg === null || cfg.handleTouchInput !== false)) {\n if (\n cfg === null ||\n cfg.mobileOnlyTouchPrevention !== true ||\n (cfg.mobileOnlyTouchPrevention === true &&\n (!this.deviceTypeService.getDeviceState().isMobile || !this.deviceTypeService.getDeviceState().isTablet) &&\n this.windowDimensionsService.dimensions().width < this.windowDimensionsService.breakpoints.sm)\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n\n private isAllowedToScroll(targetNode: Node): boolean {\n const cfg = this.getActiveConfig();\n const allow = cfg?.allowTouchInputOn;\n\n if (!allow) return true;\n\n if (Array.isArray(allow)) {\n if (allow.length === 0) return true;\n return allow.some((el) => el.contains(targetNode));\n }\n\n return false;\n }\n\n private preventDefault(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","/** Application-wide material preferences, inherited by components and overlays. */\nexport interface BxAppearanceConfig {\n /** 0 is lightly blurred and nearly clear; 1 is richly tinted, retaining translucency. */\n glassiness: number;\n quality: 'auto' | 'baseline' | 'enhanced';\n reducedTransparency: boolean;\n}\n\nexport const DEFAULT_APPEARANCE_CONFIG: Readonly<BxAppearanceConfig> = Object.freeze({\n glassiness: 0.5,\n quality: 'auto',\n reducedTransparency: false\n});\n\nexport type BxThemeId = 'graphite-sky-blue' | 'azure-coral' | 'violet-teal' | 'tangerine-indigo' | 'scarlet-cyan' | 'lime-violet' | 'cyberpunk';\n\nexport const LEGACY_THEME_IDS = {\n white: 'graphite-sky-blue',\n blue: 'azure-coral',\n purple: 'violet-teal',\n orange: 'tangerine-indigo',\n red: 'scarlet-cyan',\n green: 'lime-violet'\n} as const satisfies Record<string, BxThemeId>;\n\nexport type LegacyBxThemeId = keyof typeof LEGACY_THEME_IDS;\n\nexport const THEME_PALETTES: ReadonlyArray<{ id: BxThemeId; label: string; className: string; colors: readonly [string, string] }> = [\n { id: 'graphite-sky-blue', label: 'Graphite / Sky Blue', className: 'theme-graphite-sky-blue', colors: ['#525252', '#38bdf8'] },\n { id: 'azure-coral', label: 'Azure / Coral', className: 'theme-azure-coral', colors: ['#217eff', '#f87763'] },\n { id: 'violet-teal', label: 'Violet / Teal', className: 'theme-violet-teal', colors: ['#6d00ff', '#0d9488'] },\n { id: 'tangerine-indigo', label: 'Tangerine / Indigo', className: 'theme-tangerine-indigo', colors: ['#ff6900', '#4f78f5'] },\n { id: 'scarlet-cyan', label: 'Scarlet / Cyan', className: 'theme-scarlet-cyan', colors: ['#e3241b', '#0891b2'] },\n { id: 'lime-violet', label: 'Lime / Violet', className: 'theme-lime-violet', colors: ['#c4f53d', '#6842a6'] },\n { id: 'cyberpunk', label: 'Cyberpunk', className: 'theme-cyberpunk', colors: ['#3e5669', '#e6da00'] }\n];\n","import { BxThemeId, LEGACY_THEME_IDS, LegacyBxThemeId, THEME_PALETTES } from '../types/appearance.types';\n\n/** Resolve persisted and pre-rename palette IDs without resetting a user's selection. */\nexport function resolveThemeId(value: string | null | undefined): BxThemeId | undefined {\n const palette = THEME_PALETTES.find((item) => item.id === value);\n if (palette) return palette.id;\n if (value && Object.prototype.hasOwnProperty.call(LEGACY_THEME_IDS, value)) return LEGACY_THEME_IDS[value as LegacyBxThemeId];\n return undefined;\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { Injectable, PLATFORM_ID, computed, DestroyRef, effect, inject, signal } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BxA11yService {\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n private readonly osPrefersReducedMotion = signal(false);\n private readonly manualOverride = signal<boolean | null>(null);\n\n public readonly isReducedMotion = computed(() => {\n const manual = this.manualOverride();\n if (manual !== null) return manual;\n return this.osPrefersReducedMotion();\n });\n\n constructor() {\n this.initMediaMatcher();\n this.syncWithDOM();\n }\n\n public setReducedMotion(reduce: boolean | null): void {\n this.manualOverride.set(reduce);\n }\n\n //#region Helpers\n\n private initMediaMatcher(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n this.osPrefersReducedMotion.set(mediaQuery.matches);\n\n const listener = (e: MediaQueryListEvent) => this.osPrefersReducedMotion.set(e.matches);\n mediaQuery.addEventListener('change', listener);\n inject(DestroyRef).onDestroy(() => mediaQuery.removeEventListener('change', listener));\n }\n\n private syncWithDOM(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n effect(() => {\n const isReduced = this.isReducedMotion();\n const root = this.document.documentElement;\n\n if (isReduced) {\n root.classList.add('bx-reduce-motion-forced');\n root.style.setProperty('--bx-reduced-motion', '1');\n } else {\n root.classList.remove('bx-reduce-motion-forced');\n root.style.setProperty('--bx-reduced-motion', '0');\n }\n });\n }\n\n //#endregion\n}\n","import { Injectable, OnDestroy, inject, signal, PLATFORM_ID, computed, DOCUMENT, effect } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DeviceTheme } from '../types/core.types';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { configureAppearance } from '@filip.mazev/blocks/effects/runtime';\nimport { BxAppearanceConfig, DEFAULT_APPEARANCE_CONFIG, THEME_PALETTES, BxThemeId, LEGACY_THEME_IDS, LegacyBxThemeId } from '../types/appearance.types';\nimport { resolveThemeId } from '../helpers/theme-functions';\nimport { BxA11yService } from './bx-a11y.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemingService implements OnDestroy {\n private readonly document = inject(DOCUMENT);\n private readonly a11y = inject(BxA11yService);\n private readonly _appearance = signal<BxAppearanceConfig>({ ...DEFAULT_APPEARANCE_CONFIG });\n public readonly appearance = this._appearance.asReadonly();\n public readonly palettes = THEME_PALETTES;\n private readonly _palette = signal<BxThemeId>('graphite-sky-blue');\n public readonly palette = this._palette.asReadonly();\n public readonly paletteLabel = computed(() => this.palettes.find((item) => item.id === this.palette())?.label ?? this.palettes[0].label);\n private readonly _highContrast = signal(false);\n public readonly highContrast = this._highContrast.asReadonly();\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly _systemTheme = signal<DeviceTheme>('light');\n private readonly _applicationTheme = signal<DeviceTheme | null>(null);\n public readonly systemTheme = this._systemTheme.asReadonly();\n public readonly applicationTheme = this._applicationTheme.asReadonly();\n public readonly activeTheme = computed(() => this.applicationTheme() ?? this.systemTheme());\n private readonly systemTheme$ = toObservable(this._systemTheme);\n private readonly applicationTheme$ = toObservable(this._applicationTheme);\n private appearanceController?: ReturnType<typeof configureAppearance>;\n\n private mediaQueryList?: MediaQueryList;\n private mediaQueryListener?: (event: MediaQueryListEvent) => void;\n\n constructor() {\n effect(() => {\n const reducedMotion = this.a11y.isReducedMotion();\n this.appearanceController?.update({ reducedMotion });\n });\n if (this.isBrowser) {\n this._systemTheme.set(this.detectInitialSystemTheme());\n\n const storedTheme = this.readStored('theme') as DeviceTheme | null;\n this.restoreAppearance();\n const palette = this.readStored('theme-palette');\n const storedHighContrast = this.readStored('theme-high-contrast');\n this.setPalette(resolveThemeId(palette) ?? 'graphite-sky-blue');\n this.setHighContrast(storedHighContrast === null ? palette === 'high-contrast' : storedHighContrast === 'true');\n this.appearanceController = configureAppearance(this.document.documentElement, { ...this.appearance(), reducedMotion: this.a11y.isReducedMotion() });\n if (storedTheme === 'dark' || storedTheme === 'light') {\n this._applicationTheme.set(storedTheme);\n }\n\n this.initSystemThemeListener();\n }\n }\n\n public ngOnDestroy(): void {\n this.appearanceController?.destroy();\n if (this.mediaQueryList && this.mediaQueryListener) {\n this.mediaQueryList.removeEventListener('change', this.mediaQueryListener);\n }\n }\n\n public setApplicationTheme(theme: DeviceTheme): void {\n this._applicationTheme.set(theme);\n if (this.isBrowser) {\n this.writeStored('theme', theme);\n }\n }\n\n public setPalette(palette: BxThemeId | LegacyBxThemeId): void {\n const id = resolveThemeId(palette);\n if (!id) return;\n this._palette.set(id);\n for (const legacy of Object.keys(LEGACY_THEME_IDS)) this.document.documentElement.classList.remove(`theme-${legacy}`);\n for (const item of this.palettes) this.document.documentElement.classList.toggle(item.className, item.id === id);\n if (this.isBrowser) this.writeStored('theme-palette', id);\n }\n\n public setHighContrast(enabled: boolean): void {\n this._highContrast.set(enabled);\n if (!this.isBrowser) return;\n this.document.documentElement.classList.toggle('high-contrast', enabled);\n this.writeStored('theme-high-contrast', String(enabled));\n }\n\n public setAppearance(settings: Partial<BxAppearanceConfig>): void {\n const current = this.appearance();\n const glassiness = settings.glassiness ?? current.glassiness;\n const next: BxAppearanceConfig = {\n glassiness: Number.isFinite(glassiness) ? Math.min(1, Math.max(0, glassiness)) : DEFAULT_APPEARANCE_CONFIG.glassiness,\n quality: settings.quality ?? current.quality,\n reducedTransparency: (settings.reducedTransparency ?? current.reducedTransparency) === true\n };\n if (!['auto', 'baseline', 'enhanced'].includes(next.quality)) next.quality = 'auto';\n\n this._appearance.set(next);\n this.appearanceController?.update(next);\n if (this.isBrowser) this.writeStored('blocks-appearance', JSON.stringify(next));\n }\n\n public resetAppearance(): void {\n this.setAppearance({ ...DEFAULT_APPEARANCE_CONFIG });\n }\n\n public getSystemTheme$() {\n return this.systemTheme$;\n }\n\n public getApplicationTheme$() {\n return this.applicationTheme$;\n }\n\n private restoreAppearance(): void {\n try {\n const stored = this.readStored('blocks-appearance');\n if (stored) {\n const saved = JSON.parse(stored) as Partial<BxAppearanceConfig> & { tint?: number; material?: string };\n if (!saved || typeof saved !== 'object') return;\n // Migrate old preferences once; only the new configuration is persisted.\n this.setAppearance({\n glassiness: saved.glassiness ?? saved.tint ?? DEFAULT_APPEARANCE_CONFIG.glassiness,\n quality: saved.quality ?? DEFAULT_APPEARANCE_CONFIG.quality,\n reducedTransparency: saved.reducedTransparency === true || saved.material === 'solid'\n });\n }\n } catch {\n /* A stale or malformed preference uses the defaults. */\n }\n }\n\n private readStored(key: string): string | null {\n try {\n return this.document.defaultView?.localStorage.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStored(key: string, value: string): void {\n try {\n this.document.defaultView?.localStorage.setItem(key, value);\n } catch {\n /* Private browsing and storage policies must not break rendering. */\n }\n }\n\n private detectInitialSystemTheme(): DeviceTheme {\n if (!this.isBrowser) return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n private initSystemThemeListener(): void {\n this.mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');\n this.mediaQueryListener = (event: MediaQueryListEvent) => {\n this._systemTheme.set(event.matches ? 'dark' : 'light');\n };\n this.mediaQueryList.addEventListener('change', this.mediaQueryListener);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ConnectionPositionPair, Overlay, FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport { BxPlacement } from '../types/core.types';\n\n@Injectable({ providedIn: 'root' })\nexport class BxOverlayPositionService {\n private readonly overlay = inject(Overlay);\n\n public getElementStrategy(element: HTMLElement, placement: BxPlacement, offset: number = 8): FlexibleConnectedPositionStrategy {\n return this.overlay.position().flexibleConnectedTo(element).withPositions(this.getPositions(placement, offset)).withPush(true).withViewportMargin(8);\n }\n\n public getCoordinateStrategy(x: number, y: number): FlexibleConnectedPositionStrategy {\n return this.overlay.position().flexibleConnectedTo({ x, y }).withPositions(this.getPositions('bottom', 2)).withPush(true).withViewportMargin(8);\n }\n\n private getPositions(placement: BxPlacement, offset: number): ConnectionPositionPair[] {\n const top = new ConnectionPositionPair({ originX: 'center', originY: 'top' }, { overlayX: 'center', overlayY: 'bottom' }, 0, -offset, [\n 'bx-overlay-pos-top'\n ]);\n\n const bottom = new ConnectionPositionPair({ originX: 'center', originY: 'bottom' }, { overlayX: 'center', overlayY: 'top' }, 0, offset, [\n 'bx-overlay-pos-bottom'\n ]);\n\n const left = new ConnectionPositionPair({ originX: 'start', originY: 'center' }, { overlayX: 'end', overlayY: 'center' }, -offset, 0, [\n 'bx-overlay-pos-left'\n ]);\n\n const right = new ConnectionPositionPair({ originX: 'end', originY: 'center' }, { overlayX: 'start', overlayY: 'center' }, offset, 0, [\n 'bx-overlay-pos-right'\n ]);\n\n switch (placement) {\n case 'top':\n return [top, bottom, right, left];\n case 'bottom':\n return [bottom, top, right, left];\n case 'left':\n return [left, right, top, bottom];\n case 'right':\n return [right, left, top, bottom];\n }\n }\n}\n","import { BxCustomValidators } from '../interfaces/ibx-custom-validators.interface';\n\nexport type DeviceTheme = 'light' | 'dark';\nexport type DeviceOrientationType = 'portrait-primary' | 'landscape-primary' | 'portrait-secondary' | 'landscape-secondary';\n\nexport type Strict<T, Expected> = T & {\n [K in keyof T]: K extends keyof Expected ? Expected[K] : never;\n};\n\nexport type ResolvableText = string | { key: string };\n\nexport type BxPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport type ShortcutKey = string | string[];\n\nexport interface OSShortcut {\n mac?: ShortcutKey;\n windows?: ShortcutKey;\n linux?: ShortcutKey;\n default: ShortcutKey;\n}\n\nexport type ResolvableShortcut = ShortcutKey | OSShortcut;\n\nexport function isOSShortcut(val: unknown): val is OSShortcut {\n return typeof val === 'object' && val !== null && !Array.isArray(val) && 'default' in val;\n}\n\nexport type DefaultValidatorKey = 'required' | 'minlength' | 'maxlength' | 'email' | 'pattern' | 'min' | 'max';\n\nexport type ValidatorKey = DefaultValidatorKey | keyof BxCustomValidators;\n","import { Injectable, inject } from '@angular/core';\nimport { DeviceTypeService } from './device-type.service';\nimport { ResolvableShortcut, ShortcutKey, isOSShortcut } from '../types/core.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BxShortcutService {\n private readonly deviceTypeService = inject(DeviceTypeService);\n\n public resolve(shortcut: ResolvableShortcut | undefined): string[] | undefined {\n if (!shortcut) return undefined;\n\n let resolvedKey: ShortcutKey;\n\n if (isOSShortcut(shortcut)) {\n const state = this.deviceTypeService.getDeviceState();\n\n if (state.isAppleDevice && shortcut.mac) {\n resolvedKey = shortcut.mac;\n } else if (state.isWindowsDesktop && shortcut.windows) {\n resolvedKey = shortcut.windows;\n } else if (state.isLinuxOrUnixDesktop && shortcut.linux) {\n resolvedKey = shortcut.linux;\n } else {\n resolvedKey = shortcut.default;\n }\n } else {\n resolvedKey = shortcut;\n }\n\n return Array.isArray(resolvedKey) ? resolvedKey : [resolvedKey];\n }\n}\n","import { Directive, inject, input, signal, OnInit, isDevMode, computed } from '@angular/core';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { ResolvableText, ValidatorKey } from '../types/core.types';\n\n@Directive()\nexport abstract class BxBaseControl<T> implements ControlValueAccessor, OnInit {\n protected readonly isFieldRequired = computed(() => {\n if (this.required && this.required()) return true;\n\n const control = this.ngControl?.control;\n return control?.hasValidator ? control.hasValidator(Validators.required) : false;\n });\n\n protected readonly internalValue = signal<T | null>(null);\n protected readonly isTouched = signal<boolean>(false);\n protected readonly isDisabled = signal<boolean>(false);\n public readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n public readonly label = input<ResolvableText | undefined>(undefined);\n\n public readonly placeholder = input<ResolvableText | undefined>(undefined);\n\n public readonly tooltip = input<ResolvableText | undefined>(undefined);\n public readonly dataTestId = input<string | undefined>(undefined);\n public readonly ariaLabel = input<string | undefined>(undefined);\n\n public readonly errorMessages = input<Partial<Record<ValidatorKey, ResolvableText>>>({});\n\n public readonly required = input<boolean>(false);\n public readonly loading = input<boolean>(false);\n public readonly disabled = input<boolean>(false);\n\n protected onChange: (value: T | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n // Forms may call setDisabledState before ngOnInit. Preserve that state.\n this.isDisabled.set(this.disabled() || this.ngControl?.disabled === true);\n\n if (isDevMode() && this.ngControl?.control?.validator) {\n const hasMessages = Object.keys(this.errorMessages()).length > 0;\n if (!hasMessages) {\n console.error(\n `[Blocks UI Strict Mode] The form control for this field has validators, but the [errorMessages] input is empty. You must provide error messages for all applied validators.`\n );\n }\n }\n }\n\n public writeValue(value: T | null): void {\n this.internalValue.set(value);\n }\n\n public registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n\n protected updateValue(value: T | null): void {\n if (this.isDisabled()) return;\n this.internalValue.set(value);\n this.onChange(value);\n }\n\n protected markAsTouched(): void {\n if (!this.isTouched()) {\n this.isTouched.set(true);\n this.onTouched();\n }\n }\n\n protected get errorMessage(): ResolvableText | undefined {\n if (this.ngControl?.invalid && (this.ngControl.touched || this.ngControl.dirty)) {\n const errors = this.ngControl.errors;\n if (!errors) return undefined;\n\n const firstKey = Object.keys(errors)[0] as ValidatorKey;\n const customErrorMap = this.errorMessages();\n\n if (customErrorMap && customErrorMap[firstKey]) {\n return customErrorMap[firstKey];\n }\n\n if (typeof errors[firstKey as string] === 'string') {\n return errors[firstKey as string];\n }\n\n if (isDevMode()) {\n console.error(`[Blocks UI Strict Mode] Validation failed for key '${firstKey}', but no message was provided in [errorMessages].`);\n }\n\n return `[Missing error message: ${firstKey}]`;\n }\n return undefined;\n }\n}\n","export const DEFAULT_DEBOUNCE_TIME = 300;\n","export const SCROLL_LOCK_INSTANCE_IDENTIFIER = 'scroll_lock_instance_';\n","import { SemanticColorToken } from '../types/theme.types';\n\nexport const PALETTE_NAMES = [\n 'primary',\n 'accent',\n 'graphite',\n 'sky-blue',\n 'azure',\n 'coral',\n 'violet',\n 'teal',\n 'tangerine',\n 'indigo',\n 'scarlet',\n 'cyan',\n 'lime',\n 'cool-violet',\n 'cyber-yellow',\n 'cyber-slate',\n 'blue',\n 'orange',\n 'purple',\n 'red',\n 'green',\n 'danger',\n 'warn',\n 'success',\n 'information',\n 'neutral'\n] as const;\nexport const SHADE_NUMBERS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000] as const;\n\nexport const TOKEN_PREFIX = 'bx';\nexport const TOKEN_DELIMITER = '-';\nexport const TOKEN_COLOR_DELIMITER = 'color';\nexport const FALLBACK_COLOR = '#000000';\n\nexport const SEMANTIC_PAIRS: Partial<Record<SemanticColorToken, SemanticColorToken>> = {\n 'bg-canvas': 'text-primary',\n 'bg-surface': 'text-primary',\n 'bg-surface-alt': 'text-primary',\n 'bg-element': 'text-primary',\n 'bg-element-hover': 'text-primary',\n\n 'text-heading': 'bg-element',\n 'text-primary': 'bg-element',\n 'text-secondary': 'bg-element',\n 'text-brand': 'bg-surface',\n 'text-inverse': 'primary',\n 'on-primary': 'primary',\n 'on-primary-hover': 'primary-hover',\n 'on-primary-active': 'primary-active',\n\n accent: 'accent-subtle',\n 'accent-hover': 'on-accent-hover',\n 'accent-active': 'on-accent-active',\n 'accent-subtle': 'text-accent',\n 'on-accent': 'accent',\n 'on-accent-hover': 'accent-hover',\n 'on-accent-active': 'accent-active',\n 'text-accent': 'accent-subtle',\n 'border-accent': 'bg-surface',\n\n primary: 'primary-subtle',\n 'primary-hover': 'on-primary',\n 'primary-active': 'on-primary',\n 'primary-subtle': 'text-primary',\n\n 'border-subtle': 'bg-surface',\n 'border-default': 'bg-surface',\n 'border-strong': 'bg-surface',\n 'border-brand': 'bg-surface',\n\n 'bg-info': 'text-info',\n 'bg-info-active': 'text-info',\n 'bg-info-hover': 'text-info',\n 'bg-info-disabled': 'border-info',\n 'bg-info-subtle': 'border-info',\n 'border-info': 'bg-info',\n 'text-info': 'bg-info',\n\n 'bg-success': 'text-success',\n 'bg-success-active': 'text-success',\n 'bg-success-hover': 'text-success',\n 'bg-success-disabled': 'border-success',\n 'bg-success-subtle': 'border-success',\n 'border-success': 'bg-success',\n 'text-success': 'bg-success',\n\n 'bg-warn': 'text-warn',\n 'bg-warn-active': 'text-warn',\n 'bg-warn-hover': 'text-warn',\n 'bg-warn-disabled': 'border-warn',\n 'bg-warn-subtle': 'border-warn',\n 'border-warn': 'bg-warn',\n 'text-warn': 'bg-warn',\n\n 'bg-danger': 'text-danger',\n 'bg-danger-active': 'text-danger',\n 'bg-danger-hover': 'text-danger',\n 'bg-danger-disabled': 'border-danger',\n 'bg-danger-subtle': 'border-danger',\n 'border-danger': 'bg-danger',\n 'text-danger': 'bg-danger',\n\n 'scroll-bg': 'bg-surface',\n 'scroll-thumb': 'scroll-bg',\n 'scroll-thumb-hover': 'scroll-bg'\n};\n","import { InjectionToken } from '@angular/core';\nimport { IBxI18nAdapter } from '../interfaces/ibx-i18n-adapter.interface';\n\nexport const BX_I18N = new InjectionToken<IBxI18nAdapter>('BX_I18N');\n","import { ResolvableText } from '../types/core.types';\n\n/**\n * Type guard to check if a ResolvableText is an object with a 'key' property, indicating it's a translation key rather than a plain string.\n */\nexport function isTextWithKey(value: ResolvableText): value is { key: string } {\n return typeof value === 'object' && value !== null && 'key' in value;\n}\n","import { Color, ThemeColorToken, ThemedColor } from '../types/tokens.types';\nimport { SemanticColorToken } from '../types/theme.types';\nimport * as tokenConsts from '../constants/tokens.constants';\n\n/**\n * Type Guard: Detects if a token is a static palette shade (e.g., 'orange-500')\n */\nexport function isPaletteToken(token: Color): token is ThemeColorToken {\n return /-\\d+$/.test(token);\n}\n\n/**\n * Type Guard: Detects if the provided color is a ThemedColor configuration object.\n */\nexport function isThemedColor(color: unknown): color is Extract<ThemedColor, object> {\n return color !== null && typeof color === 'object' && 'light' in color;\n}\n\n/**\n * Returns the correct CSS variable string based on the token type.\n */\nexport function resolveTokenToCssVar(token: Color): string {\n if (isPaletteToken(token)) {\n return `var(--${tokenConsts.TOKEN_PREFIX}${tokenConsts.TOKEN_DELIMITER}${tokenConsts.TOKEN_COLOR_DELIMITER}${tokenConsts.TOKEN_DELIMITER}${token})`;\n } else {\n return `var(--${tokenConsts.TOKEN_PREFIX}${tokenConsts.TOKEN_DELIMITER}${token})`;\n }\n}\n\n/**\n * Smartly resolves the complementary background token.\n */\nexport function getComplementaryToken(token: Color): Color {\n if (!isPaletteToken(token)) {\n return (tokenConsts.SEMANTIC_PAIRS[token as SemanticColorToken] as Color) || 'surface';\n }\n\n const parts = token.split(tokenConsts.TOKEN_DELIMITER);\n const shade = parts.pop();\n const palette = parts.join(tokenConsts.TOKEN_DELIMITER);\n\n const shadeNum = parseInt(shade || '500', 10);\n const bgShade = shadeNum > 400 ? 50 : 900;\n\n return `${palette}-${bgShade}` as Color;\n}\n\n/**\n * Provides the inverted value of a given token color\n */\nexport function invertPaletteToken(token: Color): Color {\n const parts = token.split(tokenConsts.TOKEN_DELIMITER);\n if (parts.length < 2) return token;\n\n const shadeStr = parts.pop();\n const base = parts.join(tokenConsts.TOKEN_DELIMITER);\n const shade = Number(shadeStr);\n\n if (isNaN(shade)) return token;\n\n let invertedShade: number;\n if (shade === 50) invertedShade = 900;\n else if (shade === 1000) invertedShade = 50;\n else invertedShade = 1000 - shade;\n\n const finalShade = (tokenConsts.SHADE_NUMBERS as readonly number[]).includes(invertedShade) ? invertedShade : shade;\n\n return `${base}-${finalShade}` as Color;\n}\n","export function uuidv4() {\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))).toString(16));\n}\n","export function inheritOverlayTheme(source: HTMLElement, pane: HTMLElement): () => void {\n const win = source.ownerDocument.defaultView;\n\n if (!win) return () => {};\n const copied = new Set<string>();\n const refresh = () => {\n const styles = win.getComputedStyle(source);\n const inherited = win.getComputedStyle(pane.parentElement ?? pane);\n const current = new Set<string>();\n for (let index = 0; index < styles.length; index++) {\n const property = styles.item(index);\n if (property.startsWith('--')) {\n const value = styles.getPropertyValue(property);\n if (value !== inherited.getPropertyValue(property)) {\n pane.style.setProperty(property, value);\n current.add(property);\n }\n }\n }\n\n for (const property of copied) if (!current.has(property)) pane.style.removeProperty(property);\n\n copied.clear();\n current.forEach((property) => copied.add(property));\n pane.classList.toggle('bx-high-contrast-scope', !!source.closest('.high-contrast, .bx-high-contrast-scope'));\n pane.style.fontFamily = styles.fontFamily;\n pane.style.colorScheme = styles.colorScheme;\n };\n refresh();\n const observer = new MutationObserver(refresh);\n observer.observe(source, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n for (let scope = source.parentElement; scope; scope = scope.parentElement) {\n observer.observe(scope, { attributes: true, attributeFilter: ['class', 'style', 'data-theme'] });\n }\n return () => observer.disconnect();\n}\n","import { FlexibleConnectedPositionStrategy, OverlayRef } from '@angular/cdk/overlay';\n\nlet nextAnchor = 0;\n\nexport function trackOverlayOrigin(overlay: OverlayRef, origin: HTMLElement): () => void {\n const view = origin.ownerDocument.defaultView;\n const strategy = overlay.getConfig().positionStrategy;\n if (!view || !(strategy instanceof FlexibleConnectedPositionStrategy)) return () => {};\n\n const host = overlay.hostElement;\n host.classList.add('bx-overlay-tracked');\n const native = view.CSS?.supports('position-anchor', '--bx-origin') && !!(origin.compareDocumentPosition(host) & Node.DOCUMENT_POSITION_FOLLOWING);\n const anchor = native ? `--bx-overlay-origin-${++nextAnchor}` : null;\n const originalAnchor = origin.style.getPropertyValue('anchor-name');\n const originalPriority = origin.style.getPropertyPriority('anchor-name');\n const parent = host.parentElement;\n let documentLayer: HTMLElement | undefined;\n if (anchor && !overlay.getConfig().usePopover && !overlay.getConfig().hasBackdrop && parent?.classList.contains('cdk-overlay-container')) {\n let documentOrigin = true;\n for (let element: HTMLElement | null = origin; element; element = element.parentElement) {\n const style = view.getComputedStyle(element);\n const nestedScroller = element !== origin && element !== origin.ownerDocument.body && /auto|scroll|hidden/.test(`${style.overflowX} ${style.overflowY}`);\n if (style.position === 'fixed' || style.position === 'sticky' || nestedScroller) {\n documentOrigin = false;\n break;\n }\n }\n if (documentOrigin) {\n // Keep page menus in the document's scrolling layer. A fixed ancestor\n // requires WebKit to counter-scroll the menu during iOS toolbar changes\n // and rubber-banding, which can lag behind the trigger's scroll layer.\n documentLayer = origin.ownerDocument.createElement('div');\n documentLayer.className = parent.className;\n documentLayer.classList.add('bx-overlay-document-layer');\n documentLayer.style.setProperty('--bx-overlay-layer-z-index', view.getComputedStyle(parent).zIndex);\n parent.after(documentLayer);\n documentLayer.append(host);\n }\n }\n if (anchor && !documentLayer) {\n const names = view.getComputedStyle(origin).getPropertyValue('anchor-name').trim();\n origin.style.setProperty('anchor-name', names && names !== 'none' ? `${names}, ${anchor}` : anchor);\n host.style.setProperty('position-anchor', anchor);\n }\n\n const reposition = () => {\n if (!overlay.hasAttached()) return;\n if (!anchor) {\n strategy.reapplyLastPosition();\n return;\n }\n host.classList.remove('bx-overlay-anchored');\n // CDK measures in viewport coordinates. Temporarily use its fixed containing\n // block without reparenting the pane (which would blur a focused search).\n documentLayer?.classList.remove('bx-overlay-document-layer');\n const display = parent?.style.getPropertyValue('display');\n const displayPriority = parent?.style.getPropertyPriority('display');\n // CDK still measures its original container, which may now match :empty.\n // Keep that viewport measurement valid, including iOS fixed-layer offsets.\n if (documentLayer) parent?.style.setProperty('display', 'block');\n overlay.updatePosition();\n if (documentLayer && parent) {\n if (display) parent.style.setProperty('display', display, displayPriority);\n else parent.style.removeProperty('display');\n }\n if (documentLayer) {\n const target = overlay.overlayElement.getBoundingClientRect();\n documentLayer.classList.add('bx-overlay-document-layer');\n host.style.setProperty('--bx-overlay-anchor-top', '0px');\n host.style.setProperty('--bx-overlay-anchor-left', '0px');\n host.classList.add('bx-overlay-anchored');\n // Measure the absolute containing block, including positioned bodies and\n // document scroll. No anchor counter-scroll or scroll-time writes are\n // needed when the trigger and menu already share the root scroller.\n const zero = host.getBoundingClientRect();\n host.style.setProperty('--bx-overlay-anchor-top', `${target.top - zero.top}px`);\n host.style.setProperty('--bx-overlay-anchor-left', `${target.left - zero.left}px`);\n return;\n }\n const source = origin.getBoundingClientRect();\n const target = host.getBoundingClientRect();\n host.style.setProperty('--bx-overlay-anchor-top', `calc(anchor(top) + ${target.top - source.top}px)`);\n host.style.setProperty('--bx-overlay-anchor-left', `calc(anchor(left) + ${target.left - source.left}px)`);\n host.classList.add('bx-overlay-anchored');\n };\n const onScroll = (event: Event) => {\n const target = event.target;\n if (target === view || (target instanceof Node && target.contains(origin))) reposition();\n };\n if (!anchor) view.addEventListener('scroll', onScroll, { capture: true, passive: true });\n view.addEventListener('resize', reposition, { passive: true });\n const resize = new view.ResizeObserver(reposition);\n resize.observe(origin);\n resize.observe(overlay.overlayElement);\n reposition();\n\n return () => {\n resize.disconnect();\n view.removeEventListener('resize', reposition);\n if (!anchor) view.removeEventListener('scroll', onScroll, true);\n else {\n host.classList.remove('bx-overlay-anchored');\n host.style.removeProperty('position-anchor');\n host.style.removeProperty('--bx-overlay-anchor-top');\n host.style.removeProperty('--bx-overlay-anchor-left');\n if (originalAnchor) origin.style.setProperty('anchor-name', originalAnchor, originalPriority);\n else origin.style.removeProperty('anchor-name');\n }\n if (documentLayer) {\n // Restore CDK's parent before detach so its cached host can reopen.\n if (host.parentElement === documentLayer) parent?.append(host);\n documentLayer.remove();\n }\n host.classList.remove('bx-overlay-tracked');\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filip.mazev-blocks-core.mjs","names":[],"sources":["../../../projects/blocks/core/enums/desktop-os.enum.ts","../../../projects/blocks/core/enums/mobile-os.enum.ts","../../../projects/blocks/core/services/device-type.service.ts","../../../projects/blocks/core/constants/window-dimension.constants.ts","../../../projects/blocks/core/services/window-dimension.service.ts","../../../projects/blocks/core/services/scroll-lock.service.ts","../../../projects/blocks/core/types/appearance.types.ts","../../../projects/blocks/core/helpers/theme-functions.ts","../../../projects/blocks/core/services/bx-a11y.service.ts","../../../projects/blocks/core/services/theming.service.ts","../../../projects/blocks/core/services/bx-overlay-position.service.ts","../../../projects/blocks/core/types/core.types.ts","../../../projects/blocks/core/services/bx-shortcut.service.ts","../../../projects/blocks/core/classes/bx-base-control.ts","../../../projects/blocks/core/constants/numeric.constants.ts","../../../projects/blocks/core/constants/scroll-lock.constants.ts","../../../projects/blocks/core/constants/tokens.constants.ts","../../../projects/blocks/core/tokens/bx-i18n.token.ts","../../../projects/blocks/core/helpers/core-functions.ts","../../../projects/blocks/core/helpers/token-functions.ts","../../../projects/blocks/core/helpers/uui4.ts","../../../projects/blocks/core/helpers/overlay-theme.ts","../../../projects/blocks/core/helpers/overlay-origin.ts"],"sourcesContent":["export enum DesktopOS {\n Linux = 'linux',\n MacOS = 'mac_os',\n Unix = 'unix',\n Unknown = 'unknown',\n Windows = 'windows'\n}\n","export enum MobileOS {\n Android = 'android',\n iOS = 'ios',\n Unknown = 'unknown',\n WindowsPhone = 'Windows Phone'\n}\n","import { Injectable, inject, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { DesktopOS } from '../enums/desktop-os.enum';\nimport { MobileOS } from '../enums/mobile-os.enum';\nimport { IDeviceState } from '../interfaces/idevice-state.interface';\nimport { DeviceOrientationType } from '../types/core.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceTypeService {\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private screenOrientation: DeviceOrientationType = 'portrait-primary';\n\n constructor() {\n if (this.isBrowser) {\n const win = this.document.defaultView;\n const screenObj = win?.screen as (Screen & { mozOrientation?: string; msOrientation?: string }) | undefined;\n\n const orientation = screenObj?.orientation?.type ?? screenObj?.mozOrientation ?? screenObj?.msOrientation;\n this.screenOrientation =\n this.toDeviceOrientation(orientation) ?? (win?.matchMedia('(orientation: portrait)').matches ? 'portrait-primary' : 'landscape-primary');\n\n if (screenObj?.orientation) {\n screenObj.orientation.addEventListener('change', (ev: Event) => {\n const eventOrientation = (ev.target as ScreenOrientation | null)?.type;\n const supportedOrientation = this.toDeviceOrientation(eventOrientation);\n if (supportedOrientation) this.screenOrientation = supportedOrientation;\n });\n }\n }\n }\n\n public isLandscapeOrientation(): boolean {\n return ['landscape-primary', 'landscape-secondary'].includes(this.screenOrientation);\n }\n\n public isPortraitOrientation(): boolean {\n return ['portrait-primary', 'portrait-secondary'].includes(this.screenOrientation);\n }\n\n public getDeviceState(): IDeviceState {\n const isMobile = this.isMobileDevice();\n const isTablet = this.isTabletDevice();\n const isDesktop = this.isDesktopDevice;\n\n const mobileOS = this.getMobileOS();\n const desktopOS = this.getDesktopOS();\n const deviceOS = mobileOS ?? desktopOS;\n\n return {\n isDesktop,\n desktopOS,\n isWindowsDesktop: deviceOS === DesktopOS.Windows,\n isLinuxOrUnixDesktop: deviceOS === DesktopOS.Linux || deviceOS === DesktopOS.Unix,\n isMobile,\n mobileOS,\n isAndroidDevice: deviceOS === MobileOS.Android,\n isAppleDevice: deviceOS === MobileOS.iOS || deviceOS === DesktopOS.MacOS,\n isUnknownMobileDevice: deviceOS === MobileOS.Unknown,\n isTablet,\n isLandscapeOrientation: () => this.isLandscapeOrientation(),\n isPortraitOrientation: () => this.isPortraitOrientation()\n };\n }\n\n private get userAgent(): string {\n if (!this.isBrowser) return '';\n const win = this.document.defaultView as Window & { opera?: string };\n return win?.navigator?.userAgent || win?.navigator?.vendor || win?.opera || '';\n }\n\n private toDeviceOrientation(value: string | undefined): DeviceOrientationType | undefined {\n return value === 'portrait-primary' || value === 'landscape-primary' || value === 'portrait-secondary' || value === 'landscape-secondary'\n ? value\n : undefined;\n }\n\n private get isDesktopDevice(): boolean {\n return !this.isMobileDevice() && !this.isTabletDevice();\n }\n\n private isMobileDevice(): boolean {\n const regexs = [/(Android)(.+)(Mobile)/i, /BlackBerry/i, /iPhone|iPod/i, /Opera Mini/i, /IEMobile/i];\n return regexs.some((regex) => regex.test(this.userAgent));\n }\n\n private isTabletDevice(): boolean {\n const regex = /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/i;\n return regex.test(this.userAgent);\n }\n\n private getMobileOS(): MobileOS | undefined {\n if (this.isMobileDevice()) {\n const ua = this.userAgent;\n if (/windows phone/i.test(ua)) return MobileOS.WindowsPhone;\n if (/android/i.test(ua)) return MobileOS.Android;\n const view = this.document.defaultView as (Window & { MSStream?: unknown }) | null;\n if (/iPad|iPhone|iPod/.test(ua) && !view?.MSStream) return MobileOS.iOS;\n\n return MobileOS.Unknown;\n }\n return undefined;\n }\n\n private getDesktopOS(): DesktopOS | undefined {\n if (this.isDesktopDevice) {\n const ua = this.userAgent;\n if (ua.includes('Win')) return DesktopOS.Windows;\n if (ua.includes('Mac')) return DesktopOS.MacOS;\n if (ua.includes('X11')) return DesktopOS.Unix;\n if (ua.includes('Linux')) return DesktopOS.Linux;\n\n return DesktopOS.Unknown;\n }\n return undefined;\n }\n}\n","export const BREAKPOINTS = {\n xs: 360,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n '3xl': 1920,\n '4xl': 2560\n} as const;\n","import { Injectable, inject, NgZone, PLATFORM_ID, signal, computed } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\nimport { BREAKPOINTS } from '../constants/window-dimension.constants';\nimport { IWindowDimensions } from '../interfaces/iwindow-dimensions.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WindowDimensionsService {\n public readonly ngZone = inject(NgZone);\n public readonly platformId = inject(PLATFORM_ID);\n\n public readonly isBrowser = isPlatformBrowser(this.platformId);\n\n public readonly _dimensions = signal<IWindowDimensions>(this.getCurrentDimensions());\n\n public readonly dimensions = this._dimensions.asReadonly();\n\n public readonly isMobile = computed(() => this.dimensions().width < BREAKPOINTS.md);\n public readonly isTablet = computed(() => this.dimensions().width >= BREAKPOINTS.md && this.dimensions().width < BREAKPOINTS.lg);\n public readonly isDesktop = computed(() => this.dimensions().width >= BREAKPOINTS.lg);\n\n public readonly breakpoints = BREAKPOINTS;\n\n constructor() {\n this.initResizeListener();\n }\n\n private getCurrentDimensions(): IWindowDimensions {\n if (!this.isBrowser) {\n return { width: 0, height: 0 };\n }\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n\n private initResizeListener(): void {\n if (!this.isBrowser) return;\n\n this.ngZone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(150),\n map(() => this.getCurrentDimensions()),\n distinctUntilChanged((prev, curr) => prev.width === curr.width && prev.height === curr.height)\n )\n .subscribe((dims) => {\n this.ngZone.run(() => {\n this._dimensions.set(dims);\n });\n });\n });\n }\n}\n","import { Injectable, OnDestroy, inject, signal, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DeviceTypeService } from './device-type.service';\nimport { WindowDimensionsService } from './window-dimension.service';\nimport { IScrollLockConfig } from '../interfaces/iscroll-lock-config.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class ScrollLockService implements OnDestroy {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly deviceTypeService = inject(DeviceTypeService);\n private readonly windowDimensionsService = inject(WindowDimensionsService);\n\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly activeLocks = new Map<string, IScrollLockConfig>();\n private readonly boundHandleTouchMove = this.handleTouchMove.bind(this);\n private readonly boundPreventDefault = this.preventDefault.bind(this);\n\n public readonly _isScrollDisabled = signal(false);\n public readonly isScrollDisabled = this._isScrollDisabled.asReadonly();\n\n private previousBodyPadding: string | null = null;\n\n private pendingListenerTimeout: number | null = null;\n\n public ngOnDestroy(): void {\n if (!this.isBrowser) return;\n this.clearPendingTimeout();\n this.forceCleanupAll();\n }\n\n public disableScroll(usageId: string, config: IScrollLockConfig): void {\n if (!this.isBrowser) return;\n\n const wasDisabled = this._isScrollDisabled();\n\n this.activeLocks.set(usageId, config);\n this._isScrollDisabled.set(true);\n\n if (wasDisabled) return;\n\n const documentWidth = document.documentElement.clientWidth;\n const windowWidth = window.innerWidth;\n const scrollBarWidth = windowWidth - documentWidth;\n\n if (scrollBarWidth > 0) {\n this.previousBodyPadding = document.body.style.paddingRight;\n const computedPadding = parseInt(getComputedStyle(document.body).paddingRight, 10) || 0;\n\n document.body.style.setProperty('padding-right', `${computedPadding + scrollBarWidth}px`, 'important');\n }\n\n document.body.style.setProperty('overflow', 'hidden', 'important');\n\n if (config.handleTouchInput !== false) {\n document.body.style.setProperty('touch-action', 'none', 'important');\n }\n\n this.clearPendingTimeout();\n\n this.pendingListenerTimeout = window.setTimeout(\n () => {\n if (!this._isScrollDisabled()) return;\n\n if (config.handleTouchInput === true) {\n document.body.addEventListener('touchmove', this.boundHandleTouchMove, { passive: false });\n }\n\n if (config.handleExtremeOverflow === true) {\n const opt = { passive: false };\n window.addEventListener('wheel', this.boundPreventDefault, opt);\n window.addEventListener('mousewheel', this.boundPreventDefault, opt);\n window.addEventListener('scroll', this.boundPreventDefault, opt);\n window.addEventListener('DOMMouseScroll', this.boundPreventDefault, opt);\n }\n },\n (config.animationDuration ?? 0) + 10\n );\n }\n\n public enableScroll(usageId: string, extremeOverflow?: boolean): void {\n if (!this.isBrowser) return;\n\n if (!this.activeLocks.has(usageId)) return;\n\n this.activeLocks.delete(usageId);\n\n if (this.activeLocks.size > 0) return;\n\n this.updateStateAndCleanup(extremeOverflow);\n }\n\n private getActiveConfig(): IScrollLockConfig | null {\n if (this.activeLocks.size === 0) return null;\n const keys = Array.from(this.activeLocks.keys());\n return this.activeLocks.get(keys[keys.length - 1]) ?? null;\n }\n\n private updateStateAndCleanup(extremeOverflow?: boolean): void {\n if (!this.isBrowser) return;\n\n this.clearPendingTimeout();\n\n this._isScrollDisabled.set(false);\n\n document.body.style.removeProperty('overflow');\n\n if (this.previousBodyPadding !== null) {\n if (this.previousBodyPadding) {\n document.body.style.setProperty('padding-right', this.previousBodyPadding);\n } else {\n document.body.style.removeProperty('padding-right');\n }\n this.previousBodyPadding = null;\n }\n\n document.body.removeEventListener('touchmove', this.boundHandleTouchMove);\n document.body.style.removeProperty('touch-action');\n\n if (extremeOverflow !== false) {\n window.removeEventListener('wheel', this.boundPreventDefault);\n window.removeEventListener('mousewheel', this.boundPreventDefault);\n window.removeEventListener('scroll', this.boundPreventDefault);\n window.removeEventListener('DOMMouseScroll', this.boundPreventDefault);\n }\n }\n\n private forceCleanupAll(): void {\n this.activeLocks.clear();\n this.updateStateAndCleanup(true);\n }\n\n private clearPendingTimeout(): void {\n if (this.pendingListenerTimeout !== null) {\n clearTimeout(this.pendingListenerTimeout);\n this.pendingListenerTimeout = null;\n }\n }\n\n private handleTouchMove(event: Event): void {\n const targetNode = event.target as Node;\n const cfg = this.getActiveConfig();\n\n if (!this.isAllowedToScroll(targetNode) && (cfg === null || cfg.handleTouchInput !== false)) {\n if (\n cfg === null ||\n cfg.mobileOnlyTouchPrevention !== true ||\n (cfg.mobileOnlyTouchPrevention === true &&\n (!this.deviceTypeService.getDeviceState().isMobile || !this.deviceTypeService.getDeviceState().isTablet) &&\n this.windowDimensionsService.dimensions().width < this.windowDimensionsService.breakpoints.sm)\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n\n private isAllowedToScroll(targetNode: Node): boolean {\n const cfg = this.getActiveConfig();\n const allow = cfg?.allowTouchInputOn;\n\n if (!allow) return true;\n\n if (Array.isArray(allow)) {\n if (allow.length === 0) return true;\n return allow.some((el) => el.contains(targetNode));\n }\n\n return false;\n }\n\n private preventDefault(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","/** Application-wide material preferences, inherited by components and overlays. */\nexport interface BxAppearanceConfig {\n /** 0 is lightly blurred and nearly clear; 1 is richly tinted, retaining translucency. */\n glassiness: number;\n quality: 'auto' | 'baseline' | 'enhanced';\n reducedTransparency: boolean;\n}\n\nexport const DEFAULT_APPEARANCE_CONFIG: Readonly<BxAppearanceConfig> = Object.freeze({\n glassiness: 0.5,\n quality: 'auto',\n reducedTransparency: false\n});\n\nexport type BxThemeId = 'carbon-cobalt' | 'azure-ember' | 'violet-teal' | 'tangerine-indigo' | 'brick-rose-cyan' | 'lime-violet' | 'cyberpunk';\n\nexport const THEME_PALETTES: ReadonlyArray<{ id: BxThemeId; label: string; className: string; colors: readonly [string, string] }> = [\n { id: 'carbon-cobalt', label: 'Carbon / Cobalt', className: 'theme-carbon-cobalt', colors: ['#292a2d', '#356fe8'] },\n { id: 'azure-ember', label: 'Azure / Ember', className: 'theme-azure-ember', colors: ['#217eff', '#d85a1a'] },\n { id: 'violet-teal', label: 'Violet / Teal', className: 'theme-violet-teal', colors: ['#6d00ff', '#0d9488'] },\n { id: 'tangerine-indigo', label: 'Tangerine / Indigo', className: 'theme-tangerine-indigo', colors: ['#ff6900', '#4f78f5'] },\n { id: 'brick-rose-cyan', label: 'Brick Rose / Cyan', className: 'theme-brick-rose-cyan', colors: ['#b64a50', '#0891b2'] },\n { id: 'lime-violet', label: 'Lime / Violet', className: 'theme-lime-violet', colors: ['#c4f53d', '#6842a6'] },\n { id: 'cyberpunk', label: 'Cyberpunk', className: 'theme-cyberpunk', colors: ['#3e5669', '#e6da00'] }\n];\n","import { BxThemeId, THEME_PALETTES } from '../types/appearance.types';\n\n/** Accept only current palette IDs when restoring a saved selection. */\nexport function resolveThemeId(value: string | null | undefined): BxThemeId | undefined {\n return THEME_PALETTES.find((item) => item.id === value)?.id;\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { Injectable, PLATFORM_ID, computed, DestroyRef, effect, inject, signal } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BxA11yService {\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n private readonly osPrefersReducedMotion = signal(false);\n private readonly manualOverride = signal<boolean | null>(null);\n\n public readonly isReducedMotion = computed(() => {\n const manual = this.manualOverride();\n if (manual !== null) return manual;\n return this.osPrefersReducedMotion();\n });\n\n constructor() {\n this.initMediaMatcher();\n this.syncWithDOM();\n }\n\n public setReducedMotion(reduce: boolean | null): void {\n this.manualOverride.set(reduce);\n }\n\n //#region Helpers\n\n private initMediaMatcher(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n this.osPrefersReducedMotion.set(mediaQuery.matches);\n\n const listener = (e: MediaQueryListEvent) => this.osPrefersReducedMotion.set(e.matches);\n mediaQuery.addEventListener('change', listener);\n inject(DestroyRef).onDestroy(() => mediaQuery.removeEventListener('change', listener));\n }\n\n private syncWithDOM(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n effect(() => {\n const isReduced = this.isReducedMotion();\n const root = this.document.documentElement;\n\n if (isReduced) {\n root.classList.add('bx-reduce-motion-forced');\n root.style.setProperty('--bx-reduced-motion', '1');\n } else {\n root.classList.remove('bx-reduce-motion-forced');\n root.style.setProperty('--bx-reduced-motion', '0');\n }\n });\n }\n\n //#endregion\n}\n","import { Injectable, OnDestroy, inject, signal, PLATFORM_ID, computed, DOCUMENT, effect } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DeviceTheme } from '../types/core.types';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { configureAppearance } from '@filip.mazev/blocks/effects/runtime';\nimport { BxAppearanceConfig, DEFAULT_APPEARANCE_CONFIG, THEME_PALETTES, BxThemeId } from '../types/appearance.types';\nimport { resolveThemeId } from '../helpers/theme-functions';\nimport { BxA11yService } from './bx-a11y.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemingService implements OnDestroy {\n private readonly document = inject(DOCUMENT);\n private readonly a11y = inject(BxA11yService);\n private readonly _appearance = signal<BxAppearanceConfig>({ ...DEFAULT_APPEARANCE_CONFIG });\n public readonly appearance = this._appearance.asReadonly();\n public readonly palettes = THEME_PALETTES;\n private readonly _palette = signal<BxThemeId>('carbon-cobalt');\n public readonly palette = this._palette.asReadonly();\n public readonly paletteLabel = computed(() => this.palettes.find((item) => item.id === this.palette())?.label ?? this.palettes[0].label);\n private readonly _highContrast = signal(false);\n public readonly highContrast = this._highContrast.asReadonly();\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly _systemTheme = signal<DeviceTheme>('light');\n private readonly _applicationTheme = signal<DeviceTheme | null>(null);\n public readonly systemTheme = this._systemTheme.asReadonly();\n public readonly applicationTheme = this._applicationTheme.asReadonly();\n public readonly activeTheme = computed(() => this.applicationTheme() ?? this.systemTheme());\n private readonly systemTheme$ = toObservable(this._systemTheme);\n private readonly applicationTheme$ = toObservable(this._applicationTheme);\n private appearanceController?: ReturnType<typeof configureAppearance>;\n\n private mediaQueryList?: MediaQueryList;\n private mediaQueryListener?: (event: MediaQueryListEvent) => void;\n\n constructor() {\n effect(() => {\n const reducedMotion = this.a11y.isReducedMotion();\n this.appearanceController?.update({ reducedMotion });\n });\n if (this.isBrowser) {\n this._systemTheme.set(this.detectInitialSystemTheme());\n\n const storedTheme = this.readStored('theme') as DeviceTheme | null;\n this.restoreAppearance();\n const palette = this.readStored('theme-palette');\n const storedHighContrast = this.readStored('theme-high-contrast');\n this.setPalette(resolveThemeId(palette) ?? 'carbon-cobalt');\n this.setHighContrast(storedHighContrast === null ? palette === 'high-contrast' : storedHighContrast === 'true');\n this.appearanceController = configureAppearance(this.document.documentElement, { ...this.appearance(), reducedMotion: this.a11y.isReducedMotion() });\n if (storedTheme === 'dark' || storedTheme === 'light') {\n this._applicationTheme.set(storedTheme);\n }\n\n this.initSystemThemeListener();\n }\n }\n\n public ngOnDestroy(): void {\n this.appearanceController?.destroy();\n if (this.mediaQueryList && this.mediaQueryListener) {\n this.mediaQueryList.removeEventListener('change', this.mediaQueryListener);\n }\n }\n\n public setApplicationTheme(theme: DeviceTheme): void {\n this._applicationTheme.set(theme);\n if (this.isBrowser) {\n this.writeStored('theme', theme);\n }\n }\n\n public setPalette(palette: BxThemeId): void {\n const id = resolveThemeId(palette);\n if (!id) return;\n this._palette.set(id);\n for (const item of this.palettes) this.document.documentElement.classList.toggle(item.className, item.id === id);\n if (this.isBrowser) this.writeStored('theme-palette', id);\n }\n\n public setHighContrast(enabled: boolean): void {\n this._highContrast.set(enabled);\n if (!this.isBrowser) return;\n this.document.documentElement.classList.toggle('high-contrast', enabled);\n this.writeStored('theme-high-contrast', String(enabled));\n }\n\n public setAppearance(settings: Partial<BxAppearanceConfig>): void {\n const current = this.appearance();\n const glassiness = settings.glassiness ?? current.glassiness;\n const next: BxAppearanceConfig = {\n glassiness: Number.isFinite(glassiness) ? Math.min(1, Math.max(0, glassiness)) : DEFAULT_APPEARANCE_CONFIG.glassiness,\n quality: settings.quality ?? current.quality,\n reducedTransparency: (settings.reducedTransparency ?? current.reducedTransparency) === true\n };\n if (!['auto', 'baseline', 'enhanced'].includes(next.quality)) next.quality = 'auto';\n\n this._appearance.set(next);\n this.appearanceController?.update(next);\n if (this.isBrowser) this.writeStored('blocks-appearance', JSON.stringify(next));\n }\n\n public resetAppearance(): void {\n this.setAppearance({ ...DEFAULT_APPEARANCE_CONFIG });\n }\n\n public getSystemTheme$() {\n return this.systemTheme$;\n }\n\n public getApplicationTheme$() {\n return this.applicationTheme$;\n }\n\n private restoreAppearance(): void {\n try {\n const stored = this.readStored('blocks-appearance');\n if (stored) {\n const saved = JSON.parse(stored) as Partial<BxAppearanceConfig> & { tint?: number; material?: string };\n if (!saved || typeof saved !== 'object') return;\n // Migrate old preferences once; only the new configuration is persisted.\n this.setAppearance({\n glassiness: saved.glassiness ?? saved.tint ?? DEFAULT_APPEARANCE_CONFIG.glassiness,\n quality: saved.quality ?? DEFAULT_APPEARANCE_CONFIG.quality,\n reducedTransparency: saved.reducedTransparency === true || saved.material === 'solid'\n });\n }\n } catch {\n /* A stale or malformed preference uses the defaults. */\n }\n }\n\n private readStored(key: string): string | null {\n try {\n return this.document.defaultView?.localStorage.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStored(key: string, value: string): void {\n try {\n this.document.defaultView?.localStorage.setItem(key, value);\n } catch {\n /* Private browsing and storage policies must not break rendering. */\n }\n }\n\n private detectInitialSystemTheme(): DeviceTheme {\n if (!this.isBrowser) return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n private initSystemThemeListener(): void {\n this.mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');\n this.mediaQueryListener = (event: MediaQueryListEvent) => {\n this._systemTheme.set(event.matches ? 'dark' : 'light');\n };\n this.mediaQueryList.addEventListener('change', this.mediaQueryListener);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ConnectionPositionPair, Overlay, FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport { BxPlacement } from '../types/core.types';\n\n@Injectable({ providedIn: 'root' })\nexport class BxOverlayPositionService {\n private readonly overlay = inject(Overlay);\n\n public getElementStrategy(element: HTMLElement, placement: BxPlacement, offset: number = 8): FlexibleConnectedPositionStrategy {\n return this.overlay.position().flexibleConnectedTo(element).withPositions(this.getPositions(placement, offset)).withPush(true).withViewportMargin(8);\n }\n\n public getCoordinateStrategy(x: number, y: number): FlexibleConnectedPositionStrategy {\n return this.overlay.position().flexibleConnectedTo({ x, y }).withPositions(this.getPositions('bottom', 2)).withPush(true).withViewportMargin(8);\n }\n\n private getPositions(placement: BxPlacement, offset: number): ConnectionPositionPair[] {\n const top = new ConnectionPositionPair({ originX: 'center', originY: 'top' }, { overlayX: 'center', overlayY: 'bottom' }, 0, -offset, [\n 'bx-overlay-pos-top'\n ]);\n\n const bottom = new ConnectionPositionPair({ originX: 'center', originY: 'bottom' }, { overlayX: 'center', overlayY: 'top' }, 0, offset, [\n 'bx-overlay-pos-bottom'\n ]);\n\n const left = new ConnectionPositionPair({ originX: 'start', originY: 'center' }, { overlayX: 'end', overlayY: 'center' }, -offset, 0, [\n 'bx-overlay-pos-left'\n ]);\n\n const right = new ConnectionPositionPair({ originX: 'end', originY: 'center' }, { overlayX: 'start', overlayY: 'center' }, offset, 0, [\n 'bx-overlay-pos-right'\n ]);\n\n switch (placement) {\n case 'top':\n return [top, bottom, right, left];\n case 'bottom':\n return [bottom, top, right, left];\n case 'left':\n return [left, right, top, bottom];\n case 'right':\n return [right, left, top, bottom];\n }\n }\n}\n","import { BxCustomValidators } from '../interfaces/ibx-custom-validators.interface';\n\nexport type DeviceTheme = 'light' | 'dark';\nexport type DeviceOrientationType = 'portrait-primary' | 'landscape-primary' | 'portrait-secondary' | 'landscape-secondary';\n\nexport type Strict<T, Expected> = T & {\n [K in keyof T]: K extends keyof Expected ? Expected[K] : never;\n};\n\nexport type ResolvableText = string | { key: string };\n\nexport type BxPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport type ShortcutKey = string | string[];\n\nexport interface OSShortcut {\n mac?: ShortcutKey;\n windows?: ShortcutKey;\n linux?: ShortcutKey;\n default: ShortcutKey;\n}\n\nexport type ResolvableShortcut = ShortcutKey | OSShortcut;\n\nexport function isOSShortcut(val: unknown): val is OSShortcut {\n return typeof val === 'object' && val !== null && !Array.isArray(val) && 'default' in val;\n}\n\nexport type DefaultValidatorKey = 'required' | 'minlength' | 'maxlength' | 'email' | 'pattern' | 'min' | 'max';\n\nexport type ValidatorKey = DefaultValidatorKey | keyof BxCustomValidators;\n","import { Injectable, inject } from '@angular/core';\nimport { DeviceTypeService } from './device-type.service';\nimport { ResolvableShortcut, ShortcutKey, isOSShortcut } from '../types/core.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BxShortcutService {\n private readonly deviceTypeService = inject(DeviceTypeService);\n\n public resolve(shortcut: ResolvableShortcut | undefined): string[] | undefined {\n if (!shortcut) return undefined;\n\n let resolvedKey: ShortcutKey;\n\n if (isOSShortcut(shortcut)) {\n const state = this.deviceTypeService.getDeviceState();\n\n if (state.isAppleDevice && shortcut.mac) {\n resolvedKey = shortcut.mac;\n } else if (state.isWindowsDesktop && shortcut.windows) {\n resolvedKey = shortcut.windows;\n } else if (state.isLinuxOrUnixDesktop && shortcut.linux) {\n resolvedKey = shortcut.linux;\n } else {\n resolvedKey = shortcut.default;\n }\n } else {\n resolvedKey = shortcut;\n }\n\n return Array.isArray(resolvedKey) ? resolvedKey : [resolvedKey];\n }\n}\n","import { Directive, inject, input, signal, OnInit, isDevMode, computed } from '@angular/core';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { ResolvableText, ValidatorKey } from '../types/core.types';\n\n@Directive()\nexport abstract class BxBaseControl<T> implements ControlValueAccessor, OnInit {\n protected readonly isFieldRequired = computed(() => {\n if (this.required && this.required()) return true;\n\n const control = this.ngControl?.control;\n return control?.hasValidator ? control.hasValidator(Validators.required) : false;\n });\n\n protected readonly internalValue = signal<T | null>(null);\n protected readonly isTouched = signal<boolean>(false);\n protected readonly isDisabled = signal<boolean>(false);\n public readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n public readonly label = input<ResolvableText | undefined>(undefined);\n\n public readonly placeholder = input<ResolvableText | undefined>(undefined);\n\n public readonly tooltip = input<ResolvableText | undefined>(undefined);\n public readonly dataTestId = input<string | undefined>(undefined);\n public readonly ariaLabel = input<string | undefined>(undefined);\n\n public readonly errorMessages = input<Partial<Record<ValidatorKey, ResolvableText>>>({});\n\n public readonly required = input<boolean>(false);\n public readonly loading = input<boolean>(false);\n public readonly disabled = input<boolean>(false);\n\n protected onChange: (value: T | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n // Forms may call setDisabledState before ngOnInit. Preserve that state.\n this.isDisabled.set(this.disabled() || this.ngControl?.disabled === true);\n\n if (isDevMode() && this.ngControl?.control?.validator) {\n const hasMessages = Object.keys(this.errorMessages()).length > 0;\n if (!hasMessages) {\n console.error(\n `[Blocks UI Strict Mode] The form control for this field has validators, but the [errorMessages] input is empty. You must provide error messages for all applied validators.`\n );\n }\n }\n }\n\n public writeValue(value: T | null): void {\n this.internalValue.set(value);\n }\n\n public registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n\n protected updateValue(value: T | null): void {\n if (this.isDisabled()) return;\n this.internalValue.set(value);\n this.onChange(value);\n }\n\n protected markAsTouched(): void {\n if (!this.isTouched()) {\n this.isTouched.set(true);\n this.onTouched();\n }\n }\n\n protected get errorMessage(): ResolvableText | undefined {\n if (this.ngControl?.invalid && (this.ngControl.touched || this.ngControl.dirty)) {\n const errors = this.ngControl.errors;\n if (!errors) return undefined;\n\n const firstKey = Object.keys(errors)[0] as ValidatorKey;\n const customErrorMap = this.errorMessages();\n\n if (customErrorMap && customErrorMap[firstKey]) {\n return customErrorMap[firstKey];\n }\n\n if (typeof errors[firstKey as string] === 'string') {\n return errors[firstKey as string];\n }\n\n if (isDevMode()) {\n console.error(`[Blocks UI Strict Mode] Validation failed for key '${firstKey}', but no message was provided in [errorMessages].`);\n }\n\n return `[Missing error message: ${firstKey}]`;\n }\n return undefined;\n }\n}\n","export const DEFAULT_DEBOUNCE_TIME = 300;\n","export const SCROLL_LOCK_INSTANCE_IDENTIFIER = 'scroll_lock_instance_';\n","import { SemanticColorToken } from '../types/theme.types';\n\nexport const PALETTE_NAMES = [\n 'primary',\n 'accent',\n 'carbon',\n 'cobalt',\n 'ember',\n 'brick-rose',\n 'azure',\n 'violet',\n 'teal',\n 'tangerine',\n 'indigo',\n 'cyan',\n 'lime',\n 'cool-violet',\n 'cyber-yellow',\n 'cyber-slate',\n 'blue',\n 'orange',\n 'purple',\n 'red',\n 'green',\n 'danger',\n 'warn',\n 'success',\n 'information',\n 'neutral'\n] as const;\nexport const SHADE_NUMBERS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000] as const;\n\nexport const TOKEN_PREFIX = 'bx';\nexport const TOKEN_DELIMITER = '-';\nexport const TOKEN_COLOR_DELIMITER = 'color';\nexport const FALLBACK_COLOR = '#000000';\n\nexport const SEMANTIC_PAIRS: Partial<Record<SemanticColorToken, SemanticColorToken>> = {\n 'bg-canvas': 'text-primary',\n 'bg-surface': 'text-primary',\n 'bg-surface-alt': 'text-primary',\n 'bg-element': 'text-primary',\n 'bg-element-hover': 'text-primary',\n\n 'text-heading': 'bg-element',\n 'text-primary': 'bg-element',\n 'text-secondary': 'bg-element',\n 'text-brand': 'bg-surface',\n 'text-inverse': 'primary',\n 'on-primary': 'primary',\n 'on-primary-hover': 'primary-hover',\n 'on-primary-active': 'primary-active',\n\n accent: 'accent-subtle',\n 'accent-hover': 'on-accent-hover',\n 'accent-active': 'on-accent-active',\n 'accent-subtle': 'text-accent',\n 'on-accent': 'accent',\n 'on-accent-hover': 'accent-hover',\n 'on-accent-active': 'accent-active',\n 'text-accent': 'accent-subtle',\n 'border-accent': 'bg-surface',\n\n primary: 'primary-subtle',\n 'primary-hover': 'on-primary',\n 'primary-active': 'on-primary',\n 'primary-subtle': 'text-primary',\n\n 'border-subtle': 'bg-surface',\n 'border-default': 'bg-surface',\n 'border-strong': 'bg-surface',\n 'border-brand': 'bg-surface',\n\n 'bg-info': 'text-info',\n 'bg-info-active': 'text-info',\n 'bg-info-hover': 'text-info',\n 'bg-info-disabled': 'border-info',\n 'bg-info-subtle': 'border-info',\n 'border-info': 'bg-info',\n 'text-info': 'bg-info',\n\n 'bg-success': 'text-success',\n 'bg-success-active': 'text-success',\n 'bg-success-hover': 'text-success',\n 'bg-success-disabled': 'border-success',\n 'bg-success-subtle': 'border-success',\n 'border-success': 'bg-success',\n 'text-success': 'bg-success',\n\n 'bg-warn': 'text-warn',\n 'bg-warn-active': 'text-warn',\n 'bg-warn-hover': 'text-warn',\n 'bg-warn-disabled': 'border-warn',\n 'bg-warn-subtle': 'border-warn',\n 'border-warn': 'bg-warn',\n 'text-warn': 'bg-warn',\n\n 'bg-danger': 'text-danger',\n 'bg-danger-active': 'text-danger',\n 'bg-danger-hover': 'text-danger',\n 'bg-danger-disabled': 'border-danger',\n 'bg-danger-subtle': 'border-danger',\n 'border-danger': 'bg-danger',\n 'text-danger': 'bg-danger',\n\n 'scroll-bg': 'bg-surface',\n 'scroll-thumb': 'scroll-bg',\n 'scroll-thumb-hover': 'scroll-bg'\n};\n","import { InjectionToken } from '@angular/core';\nimport { IBxI18nAdapter } from '../interfaces/ibx-i18n-adapter.interface';\n\nexport const BX_I18N = new InjectionToken<IBxI18nAdapter>('BX_I18N');\n","import { ResolvableText } from '../types/core.types';\n\n/**\n * Type guard to check if a ResolvableText is an object with a 'key' property, indicating it's a translation key rather than a plain string.\n */\nexport function isTextWithKey(value: ResolvableText): value is { key: string } {\n return typeof value === 'object' && value !== null && 'key' in value;\n}\n","import { Color, ThemeColorToken, ThemedColor } from '../types/tokens.types';\nimport { SemanticColorToken } from '../types/theme.types';\nimport * as tokenConsts from '../constants/tokens.constants';\n\n/**\n * Type Guard: Detects if a token is a static palette shade (e.g., 'orange-500')\n */\nexport function isPaletteToken(token: Color): token is ThemeColorToken {\n return /-\\d+$/.test(token);\n}\n\n/**\n * Type Guard: Detects if the provided color is a ThemedColor configuration object.\n */\nexport function isThemedColor(color: unknown): color is Extract<ThemedColor, object> {\n return color !== null && typeof color === 'object' && 'light' in color;\n}\n\n/**\n * Returns the correct CSS variable string based on the token type.\n */\nexport function resolveTokenToCssVar(token: Color): string {\n if (isPaletteToken(token)) {\n return `var(--${tokenConsts.TOKEN_PREFIX}${tokenConsts.TOKEN_DELIMITER}${tokenConsts.TOKEN_COLOR_DELIMITER}${tokenConsts.TOKEN_DELIMITER}${token})`;\n } else {\n return `var(--${tokenConsts.TOKEN_PREFIX}${tokenConsts.TOKEN_DELIMITER}${token})`;\n }\n}\n\n/**\n * Smartly resolves the complementary background token.\n */\nexport function getComplementaryToken(token: Color): Color {\n if (!isPaletteToken(token)) {\n return (tokenConsts.SEMANTIC_PAIRS[token as SemanticColorToken] as Color) || 'surface';\n }\n\n const parts = token.split(tokenConsts.TOKEN_DELIMITER);\n const shade = parts.pop();\n const palette = parts.join(tokenConsts.TOKEN_DELIMITER);\n\n const shadeNum = parseInt(shade || '500', 10);\n const bgShade = shadeNum > 400 ? 50 : 900;\n\n return `${palette}-${bgShade}` as Color;\n}\n\n/**\n * Provides the inverted value of a given token color\n */\nexport function invertPaletteToken(token: Color): Color {\n const parts = token.split(tokenConsts.TOKEN_DELIMITER);\n if (parts.length < 2) return token;\n\n const shadeStr = parts.pop();\n const base = parts.join(tokenConsts.TOKEN_DELIMITER);\n const shade = Number(shadeStr);\n\n if (isNaN(shade)) return token;\n\n let invertedShade: number;\n if (shade === 50) invertedShade = 900;\n else if (shade === 1000) invertedShade = 50;\n else invertedShade = 1000 - shade;\n\n const finalShade = (tokenConsts.SHADE_NUMBERS as readonly number[]).includes(invertedShade) ? invertedShade : shade;\n\n return `${base}-${finalShade}` as Color;\n}\n","export function uuidv4() {\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))).toString(16));\n}\n","export function inheritOverlayTheme(source: HTMLElement, pane: HTMLElement): () => void {\n const win = source.ownerDocument.defaultView;\n\n if (!win) return () => {};\n const copied = new Set<string>();\n const refresh = () => {\n const styles = win.getComputedStyle(source);\n const inherited = win.getComputedStyle(pane.parentElement ?? pane);\n const current = new Set<string>();\n for (let index = 0; index < styles.length; index++) {\n const property = styles.item(index);\n if (property.startsWith('--')) {\n const value = styles.getPropertyValue(property);\n if (value !== inherited.getPropertyValue(property)) {\n pane.style.setProperty(property, value);\n current.add(property);\n }\n }\n }\n\n for (const property of copied) if (!current.has(property)) pane.style.removeProperty(property);\n\n copied.clear();\n current.forEach((property) => copied.add(property));\n pane.classList.toggle('bx-high-contrast-scope', !!source.closest('.high-contrast, .bx-high-contrast-scope'));\n pane.style.fontFamily = styles.fontFamily;\n pane.style.colorScheme = styles.colorScheme;\n };\n refresh();\n const observer = new MutationObserver(refresh);\n observer.observe(source, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n for (let scope = source.parentElement; scope; scope = scope.parentElement) {\n observer.observe(scope, { attributes: true, attributeFilter: ['class', 'style', 'data-theme'] });\n }\n return () => observer.disconnect();\n}\n","import { FlexibleConnectedPositionStrategy, OverlayRef } from '@angular/cdk/overlay';\n\nlet nextAnchor = 0;\n\nexport function trackOverlayOrigin(overlay: OverlayRef, origin: HTMLElement): () => void {\n const view = origin.ownerDocument.defaultView;\n const strategy = overlay.getConfig().positionStrategy;\n if (!view || !(strategy instanceof FlexibleConnectedPositionStrategy)) return () => {};\n\n const host = overlay.hostElement;\n host.classList.add('bx-overlay-tracked');\n const native = view.CSS?.supports('position-anchor', '--bx-origin') && !!(origin.compareDocumentPosition(host) & Node.DOCUMENT_POSITION_FOLLOWING);\n const anchor = native ? `--bx-overlay-origin-${++nextAnchor}` : null;\n const originalAnchor = origin.style.getPropertyValue('anchor-name');\n const originalPriority = origin.style.getPropertyPriority('anchor-name');\n const parent = host.parentElement;\n let documentLayer: HTMLElement | undefined;\n if (anchor && !overlay.getConfig().usePopover && !overlay.getConfig().hasBackdrop && parent?.classList.contains('cdk-overlay-container')) {\n let documentOrigin = true;\n for (let element: HTMLElement | null = origin; element; element = element.parentElement) {\n const style = view.getComputedStyle(element);\n const nestedScroller = element !== origin && element !== origin.ownerDocument.body && /auto|scroll|hidden/.test(`${style.overflowX} ${style.overflowY}`);\n if (style.position === 'fixed' || style.position === 'sticky' || nestedScroller) {\n documentOrigin = false;\n break;\n }\n }\n if (documentOrigin) {\n // Keep page menus in the document's scrolling layer. A fixed ancestor\n // requires WebKit to counter-scroll the menu during iOS toolbar changes\n // and rubber-banding, which can lag behind the trigger's scroll layer.\n documentLayer = origin.ownerDocument.createElement('div');\n documentLayer.className = parent.className;\n documentLayer.classList.add('bx-overlay-document-layer');\n documentLayer.style.setProperty('--bx-overlay-layer-z-index', view.getComputedStyle(parent).zIndex);\n parent.after(documentLayer);\n documentLayer.append(host);\n }\n }\n if (anchor && !documentLayer) {\n const names = view.getComputedStyle(origin).getPropertyValue('anchor-name').trim();\n origin.style.setProperty('anchor-name', names && names !== 'none' ? `${names}, ${anchor}` : anchor);\n host.style.setProperty('position-anchor', anchor);\n }\n\n const reposition = () => {\n if (!overlay.hasAttached()) return;\n if (!anchor) {\n strategy.reapplyLastPosition();\n return;\n }\n host.classList.remove('bx-overlay-anchored');\n // CDK measures in viewport coordinates. Temporarily use its fixed containing\n // block without reparenting the pane (which would blur a focused search).\n documentLayer?.classList.remove('bx-overlay-document-layer');\n const display = parent?.style.getPropertyValue('display');\n const displayPriority = parent?.style.getPropertyPriority('display');\n // CDK still measures its original container, which may now match :empty.\n // Keep that viewport measurement valid, including iOS fixed-layer offsets.\n if (documentLayer) parent?.style.setProperty('display', 'block');\n overlay.updatePosition();\n if (documentLayer && parent) {\n if (display) parent.style.setProperty('display', display, displayPriority);\n else parent.style.removeProperty('display');\n }\n if (documentLayer) {\n const target = overlay.overlayElement.getBoundingClientRect();\n documentLayer.classList.add('bx-overlay-document-layer');\n host.style.setProperty('--bx-overlay-anchor-top', '0px');\n host.style.setProperty('--bx-overlay-anchor-left', '0px');\n host.classList.add('bx-overlay-anchored');\n // Measure the absolute containing block, including positioned bodies and\n // document scroll. No anchor counter-scroll or scroll-time writes are\n // needed when the trigger and menu already share the root scroller.\n const zero = host.getBoundingClientRect();\n host.style.setProperty('--bx-overlay-anchor-top', `${target.top - zero.top}px`);\n host.style.setProperty('--bx-overlay-anchor-left', `${target.left - zero.left}px`);\n return;\n }\n const source = origin.getBoundingClientRect();\n const target = host.getBoundingClientRect();\n host.style.setProperty('--bx-overlay-anchor-top', `calc(anchor(top) + ${target.top - source.top}px)`);\n host.style.setProperty('--bx-overlay-anchor-left', `calc(anchor(left) + ${target.left - source.left}px)`);\n host.classList.add('bx-overlay-anchored');\n };\n const onScroll = (event: Event) => {\n const target = event.target;\n if (target === view || (target instanceof Node && target.contains(origin))) reposition();\n };\n if (!anchor) view.addEventListener('scroll', onScroll, { capture: true, passive: true });\n view.addEventListener('resize', reposition, { passive: true });\n const resize = new view.ResizeObserver(reposition);\n resize.observe(origin);\n resize.observe(overlay.overlayElement);\n reposition();\n\n return () => {\n resize.disconnect();\n view.removeEventListener('resize', reposition);\n if (!anchor) view.removeEventListener('scroll', onScroll, true);\n else {\n host.classList.remove('bx-overlay-anchored');\n host.style.removeProperty('position-anchor');\n host.style.removeProperty('--bx-overlay-anchor-top');\n host.style.removeProperty('--bx-overlay-anchor-left');\n if (originalAnchor) origin.style.setProperty('anchor-name', originalAnchor, originalPriority);\n else origin.style.removeProperty('anchor-name');\n }\n if (documentLayer) {\n // Restore CDK's parent before detach so its cached host can reopen.\n if (host.parentElement === documentLayer) parent?.append(host);\n documentLayer.remove();\n }\n host.classList.remove('bx-overlay-tracked');\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filip.mazev-blocks.mjs","names":[],"sources":["../../../projects/blocks/src/public-api.ts"],"sourcesContent":["/* * Public API Surface of blocks\n * This file is auto-generated. Do not edit directly.\n */\n\nexport const BLOCKS_VERSION = '1.4.
|
|
1
|
+
{"version":3,"file":"filip.mazev-blocks.mjs","names":[],"sources":["../../../projects/blocks/src/public-api.ts"],"sourcesContent":["/* * Public API Surface of blocks\n * This file is auto-generated. Do not edit directly.\n */\n\nexport const BLOCKS_VERSION = '1.4.15';\n"],"mappings":"AAIA,MAAa,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { Rule } from '@angular-devkit/schematics';
|
|
2
|
-
declare const LEGACY_PALETTES: {
|
|
3
|
-
readonly white: "graphite-sky-blue";
|
|
4
|
-
readonly blue: "azure-coral";
|
|
5
|
-
readonly purple: "violet-teal";
|
|
6
|
-
readonly orange: "tangerine-indigo";
|
|
7
|
-
readonly red: "scarlet-cyan";
|
|
8
|
-
readonly green: "lime-violet";
|
|
9
|
-
};
|
|
10
2
|
export interface NgAddOptions {
|
|
11
|
-
theme?: '
|
|
3
|
+
theme?: 'carbon-cobalt' | 'azure-ember' | 'violet-teal' | 'tangerine-indigo' | 'brick-rose-cyan' | 'lime-violet' | 'cyberpunk';
|
|
12
4
|
}
|
|
13
5
|
export declare function ngAdd(options: NgAddOptions): Rule;
|
|
14
|
-
export {};
|
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ngAdd = ngAdd;
|
|
4
|
-
const LEGACY_PALETTES = {
|
|
5
|
-
white: 'graphite-sky-blue',
|
|
6
|
-
blue: 'azure-coral',
|
|
7
|
-
purple: 'violet-teal',
|
|
8
|
-
orange: 'tangerine-indigo',
|
|
9
|
-
red: 'scarlet-cyan',
|
|
10
|
-
green: 'lime-violet'
|
|
11
|
-
};
|
|
12
4
|
function ngAdd(options) {
|
|
13
5
|
return (tree, context) => {
|
|
14
6
|
var _a;
|
|
15
|
-
const
|
|
16
|
-
const theme = Object.prototype.hasOwnProperty.call(LEGACY_PALETTES, selected) ? LEGACY_PALETTES[selected] : selected;
|
|
7
|
+
const theme = (_a = options.theme) !== null && _a !== void 0 ? _a : 'carbon-cobalt';
|
|
17
8
|
injectStyles(tree, context, { theme });
|
|
18
9
|
return tree;
|
|
19
10
|
};
|
|
@@ -70,8 +61,8 @@ function injectStyles(tree, context, options) {
|
|
|
70
61
|
context.logger.info('Blocks SCSS configuration already exists. Skipping style injection.');
|
|
71
62
|
return;
|
|
72
63
|
}
|
|
73
|
-
const lightThemeVar = `$${(_f = options.theme) !== null && _f !== void 0 ? _f : '
|
|
74
|
-
const darkThemeVar = `$${(_g = options.theme) !== null && _g !== void 0 ? _g : '
|
|
64
|
+
const lightThemeVar = `$${(_f = options.theme) !== null && _f !== void 0 ? _f : 'carbon-cobalt'}-light-theme`;
|
|
65
|
+
const darkThemeVar = `$${(_g = options.theme) !== null && _g !== void 0 ? _g : 'carbon-cobalt'}-dark-theme`;
|
|
75
66
|
const blocksThemeSnippet = `
|
|
76
67
|
@use '@filip.mazev/blocks' as *;
|
|
77
68
|
|
|
@@ -86,5 +77,5 @@ function injectStyles(tree, context, options) {
|
|
|
86
77
|
}
|
|
87
78
|
`;
|
|
88
79
|
tree.overwrite(targetStylePath, blocksThemeSnippet + '\n' + content);
|
|
89
|
-
context.logger.info(`Successfully injected the ${(_h = options.theme) !== null && _h !== void 0 ? _h : '
|
|
80
|
+
context.logger.info(`Successfully injected the ${(_h = options.theme) !== null && _h !== void 0 ? _h : 'carbon-cobalt'} Blocks theme configuration into ${targetStylePath}.`);
|
|
90
81
|
}
|
|
@@ -8,31 +8,25 @@
|
|
|
8
8
|
"type": "string",
|
|
9
9
|
"description": "Select a Blocks palette for your UI.",
|
|
10
10
|
"enum": [
|
|
11
|
-
"
|
|
12
|
-
"azure-
|
|
11
|
+
"carbon-cobalt",
|
|
12
|
+
"azure-ember",
|
|
13
13
|
"violet-teal",
|
|
14
14
|
"tangerine-indigo",
|
|
15
|
-
"
|
|
15
|
+
"brick-rose-cyan",
|
|
16
16
|
"lime-violet",
|
|
17
|
-
"cyberpunk"
|
|
18
|
-
"white",
|
|
19
|
-
"blue",
|
|
20
|
-
"purple",
|
|
21
|
-
"orange",
|
|
22
|
-
"red",
|
|
23
|
-
"green"
|
|
17
|
+
"cyberpunk"
|
|
24
18
|
],
|
|
25
19
|
"x-prompt": {
|
|
26
20
|
"message": "Which palette would you like to use?",
|
|
27
21
|
"type": "list",
|
|
28
22
|
"items": [
|
|
29
23
|
{
|
|
30
|
-
"value": "
|
|
31
|
-
"label": "
|
|
24
|
+
"value": "carbon-cobalt",
|
|
25
|
+
"label": "Carbon / Cobalt"
|
|
32
26
|
},
|
|
33
27
|
{
|
|
34
|
-
"value": "azure-
|
|
35
|
-
"label": "Azure /
|
|
28
|
+
"value": "azure-ember",
|
|
29
|
+
"label": "Azure / Ember"
|
|
36
30
|
},
|
|
37
31
|
{
|
|
38
32
|
"value": "violet-teal",
|
|
@@ -43,8 +37,8 @@
|
|
|
43
37
|
"label": "Tangerine / Indigo"
|
|
44
38
|
},
|
|
45
39
|
{
|
|
46
|
-
"value": "
|
|
47
|
-
"label": "
|
|
40
|
+
"value": "brick-rose-cyan",
|
|
41
|
+
"label": "Brick Rose / Cyan"
|
|
48
42
|
},
|
|
49
43
|
{
|
|
50
44
|
"value": "lime-violet",
|
|
@@ -56,7 +50,7 @@
|
|
|
56
50
|
}
|
|
57
51
|
]
|
|
58
52
|
},
|
|
59
|
-
"default": "
|
|
53
|
+
"default": "carbon-cobalt"
|
|
60
54
|
}
|
|
61
55
|
}
|
|
62
56
|
}
|
|
@@ -136,16 +136,7 @@ export interface BxAppearanceConfig {
|
|
|
136
136
|
reducedTransparency: boolean;
|
|
137
137
|
}
|
|
138
138
|
export declare const DEFAULT_APPEARANCE_CONFIG: Readonly<BxAppearanceConfig>;
|
|
139
|
-
export type BxThemeId = '
|
|
140
|
-
export declare const LEGACY_THEME_IDS: {
|
|
141
|
-
readonly white: "graphite-sky-blue";
|
|
142
|
-
readonly blue: "azure-coral";
|
|
143
|
-
readonly purple: "violet-teal";
|
|
144
|
-
readonly orange: "tangerine-indigo";
|
|
145
|
-
readonly red: "scarlet-cyan";
|
|
146
|
-
readonly green: "lime-violet";
|
|
147
|
-
};
|
|
148
|
-
export type LegacyBxThemeId = keyof typeof LEGACY_THEME_IDS;
|
|
139
|
+
export type BxThemeId = 'carbon-cobalt' | 'azure-ember' | 'violet-teal' | 'tangerine-indigo' | 'brick-rose-cyan' | 'lime-violet' | 'cyberpunk';
|
|
149
140
|
export declare const THEME_PALETTES: ReadonlyArray<{
|
|
150
141
|
id: BxThemeId;
|
|
151
142
|
label: string;
|
|
@@ -183,7 +174,7 @@ export declare class ThemingService implements OnDestroy {
|
|
|
183
174
|
constructor();
|
|
184
175
|
ngOnDestroy(): void;
|
|
185
176
|
setApplicationTheme(theme: DeviceTheme): void;
|
|
186
|
-
setPalette(palette: BxThemeId
|
|
177
|
+
setPalette(palette: BxThemeId): void;
|
|
187
178
|
setHighContrast(enabled: boolean): void;
|
|
188
179
|
setAppearance(settings: Partial<BxAppearanceConfig>): void;
|
|
189
180
|
resetAppearance(): void;
|
|
@@ -306,7 +297,7 @@ export interface IBxI18nAdapter {
|
|
|
306
297
|
export declare const DEFAULT_DEBOUNCE_TIME = 300;
|
|
307
298
|
export declare const SCROLL_LOCK_INSTANCE_IDENTIFIER = "scroll_lock_instance_";
|
|
308
299
|
export type SemanticColorToken = 'bg-canvas' | 'bg-surface' | 'bg-surface-alt' | 'bg-element' | 'bg-element-hover' | 'bg-element-active' | 'bg-neutral' | 'bg-neutral-hover' | 'bg-neutral-active' | 'primary' | 'primary-hover' | 'primary-active' | 'primary-subtle' | 'on-primary' | 'on-primary-hover' | 'on-primary-active' | 'accent' | 'accent-hover' | 'accent-active' | 'accent-subtle' | 'on-accent' | 'on-accent-hover' | 'on-accent-active' | 'text-accent' | 'border-accent' | 'text-heading' | 'text-primary' | 'text-secondary' | 'text-brand' | 'text-inverse' | 'text-info' | 'text-warn' | 'text-success' | 'text-danger' | 'border-subtle' | 'border-default' | 'border-strong' | 'border-brand' | 'border-info' | 'border-success' | 'border-warn' | 'border-danger' | 'bg-info' | 'bg-info-hover' | 'bg-info-active' | 'bg-info-disabled' | 'bg-info-subtle' | 'bg-success' | 'bg-success-hover' | 'bg-success-active' | 'bg-success-disabled' | 'bg-success-subtle' | 'bg-warn' | 'bg-warn-hover' | 'bg-warn-active' | 'bg-warn-disabled' | 'bg-warn-subtle' | 'bg-danger' | 'bg-danger-hover' | 'bg-danger-active' | 'bg-danger-disabled' | 'bg-danger-subtle' | 'scroll-bg' | 'scroll-thumb' | 'scroll-thumb-hover' | 'meta-brand-palette' | 'meta-accent-palette';
|
|
309
|
-
export declare const PALETTE_NAMES: readonly ["primary", "accent", "
|
|
300
|
+
export declare const PALETTE_NAMES: readonly ["primary", "accent", "carbon", "cobalt", "ember", "brick-rose", "azure", "violet", "teal", "tangerine", "indigo", "cyan", "lime", "cool-violet", "cyber-yellow", "cyber-slate", "blue", "orange", "purple", "red", "green", "danger", "warn", "success", "information", "neutral"];
|
|
310
301
|
export declare const SHADE_NUMBERS: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
|
|
311
302
|
export declare const TOKEN_PREFIX = "bx";
|
|
312
303
|
export declare const TOKEN_DELIMITER = "-";
|
|
@@ -358,7 +349,7 @@ export declare function getComplementaryToken(token: Color): Color;
|
|
|
358
349
|
* Provides the inverted value of a given token color
|
|
359
350
|
*/
|
|
360
351
|
export declare function invertPaletteToken(token: Color): Color;
|
|
361
|
-
/**
|
|
352
|
+
/** Accept only current palette IDs when restoring a saved selection. */
|
|
362
353
|
export declare function resolveThemeId(value: string | null | undefined): BxThemeId | undefined;
|
|
363
354
|
export declare function uuidv4(): string;
|
|
364
355
|
export declare function inheritOverlayTheme(source: HTMLElement, pane: HTMLElement): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const BLOCKS_VERSION = "1.4.
|
|
1
|
+
export declare const BLOCKS_VERSION = "1.4.15";
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
@use '../theme-engine' as *;
|
|
2
|
-
@use '../palettes' as *;
|
|
3
|
-
|
|
4
|
-
$graphite-sky-blue-light-theme: make-light-theme('graphite', 'sky-blue');
|
|
5
|
-
$graphite-sky-blue-dark-theme: make-dark-theme(
|
|
6
|
-
'graphite',
|
|
7
|
-
'sky-blue',
|
|
8
|
-
$overrides: (
|
|
9
|
-
'primary': #f5f5f5,
|
|
10
|
-
'primary-hover': #e5e5e5,
|
|
11
|
-
'primary-active': #d4d4d4,
|
|
12
|
-
'primary-subtle': get-color-from-palette('neutral', 800),
|
|
13
|
-
'on-primary': #0b0b0b,
|
|
14
|
-
'on-primary-hover': #0b0b0b,
|
|
15
|
-
'on-primary-active': #0b0b0b,
|
|
16
|
-
'text-brand': #f5f5f5,
|
|
17
|
-
'border-brand': #d4d4d4,
|
|
18
|
-
)
|
|
19
|
-
);
|