@odx/foundation 1.0.0-rc.10 → 1.0.0-rc.11
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/CHANGELOG.md +12 -0
- package/dist/lib/signals.d.ts +4 -4
- package/dist/lib/signals.js +4 -4
- package/dist/lib/theming.d.ts +2 -1
- package/dist/lib/theming.js +13 -4
- package/package.json +7 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## 1.0.0-rc.11
|
|
2
|
+
|
|
3
|
+
### Minor Changes
|
|
4
|
+
|
|
5
|
+
- Add `change` callback to `attachDarkModeToggle` options to notify when dark mode toggle is clicked
|
|
6
|
+
|
|
7
|
+
### Patch Changes
|
|
8
|
+
|
|
9
|
+
- Fix setTheme function not removing dark mode when `mode` is set to `light`
|
|
10
|
+
- Clean up event listeners in `attachDarkModeToggle` cleanup function
|
|
11
|
+
- Prevent dark mode toggle if click event on attached host is prevented by another event listener
|
|
12
|
+
|
|
1
13
|
## 1.0.0-rc.10
|
|
2
14
|
|
|
3
15
|
### Patch Changes
|
package/dist/lib/signals.d.ts
CHANGED
|
@@ -7,14 +7,14 @@ type SignalOptions<T> = Signal.Options<T> & {
|
|
|
7
7
|
unwatched?(): void;
|
|
8
8
|
};
|
|
9
9
|
type ReadonlySignal<T> = Signal.Computed<T>;
|
|
10
|
+
declare function computed<T>(computeFn: () => T, options?: SignalOptions<T>): ReadonlySignal<T>;
|
|
10
11
|
declare function signal<T>(value: T, options?: SignalOptions<T>): Signal$1<T>;
|
|
12
|
+
declare global {
|
|
13
|
+
var __ODX_SHARED_SIGNALS__: Record<string, unknown>;
|
|
14
|
+
}
|
|
11
15
|
/**
|
|
12
16
|
* Creates or retrieves a shared signal stored on the global object. This is useful for signals that need to be shared across multiple modules without explicitly passing them around, such as localization settings or translation records.
|
|
13
17
|
*/
|
|
14
18
|
declare function sharedSignal<T>(key: string, ...args: Parameters<typeof signal<T>>): ReturnType<typeof signal<T>>;
|
|
15
|
-
declare function computed<T>(computeFn: () => T, options?: SignalOptions<T>): ReadonlySignal<T>;
|
|
16
19
|
declare function effect(callback: (() => void) | (() => () => void)): () => void;
|
|
17
|
-
declare global {
|
|
18
|
-
var __ODX_SHARED_SIGNALS__: Record<string, unknown>;
|
|
19
|
-
}
|
|
20
20
|
export { ReadonlySignal, Signal$1 as Signal, SignalOptions, computed, effect, sharedSignal, signal };
|
package/dist/lib/signals.js
CHANGED
|
@@ -7,6 +7,9 @@ function transformOptions(options) {
|
|
|
7
7
|
[Signal.subtle.unwatched]: options.unwatched
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
|
+
function computed(computeFn, options) {
|
|
11
|
+
return new Signal.Computed(computeFn, transformOptions(options));
|
|
12
|
+
}
|
|
10
13
|
function signal(value, options) {
|
|
11
14
|
const state = new Signal.State(value, transformOptions(options));
|
|
12
15
|
state.update = (updateFn) => state.set(updateFn(state.get()));
|
|
@@ -16,12 +19,10 @@ function signal(value, options) {
|
|
|
16
19
|
* Creates or retrieves a shared signal stored on the global object. This is useful for signals that need to be shared across multiple modules without explicitly passing them around, such as localization settings or translation records.
|
|
17
20
|
*/
|
|
18
21
|
function sharedSignal(key, ...args) {
|
|
22
|
+
globalThis.__ODX_SHARED_SIGNALS__ ||= {};
|
|
19
23
|
if (!(key in globalThis.__ODX_SHARED_SIGNALS__)) globalThis.__ODX_SHARED_SIGNALS__[key] = signal(...args);
|
|
20
24
|
return globalThis.__ODX_SHARED_SIGNALS__[key];
|
|
21
25
|
}
|
|
22
|
-
function computed(computeFn, options) {
|
|
23
|
-
return new Signal.Computed(computeFn, transformOptions(options));
|
|
24
|
-
}
|
|
25
26
|
let needsEnqueue = true;
|
|
26
27
|
const watcher = new Signal.subtle.Watcher(() => {
|
|
27
28
|
if (!needsEnqueue) return;
|
|
@@ -46,5 +47,4 @@ function effect(callback) {
|
|
|
46
47
|
cleanup = void 0;
|
|
47
48
|
};
|
|
48
49
|
}
|
|
49
|
-
globalThis.__ODX_SHARED_SIGNALS__ ||= {};
|
|
50
50
|
export { computed, effect, sharedSignal, signal };
|
package/dist/lib/theming.d.ts
CHANGED
|
@@ -2,13 +2,14 @@ import { ThemeConfig } from "@odx/design-tokens";
|
|
|
2
2
|
declare global {
|
|
3
3
|
var __ODX_THEME_ROOT__: HTMLElement;
|
|
4
4
|
}
|
|
5
|
-
declare const userPrefersDarkMode: boolean;
|
|
6
5
|
declare const darkModeIcon = "core::night-mode";
|
|
7
6
|
declare const lightModeIcon = "core::brightness";
|
|
7
|
+
declare const userPrefersDarkMode: boolean;
|
|
8
8
|
declare function setTheme$1(config: ThemeConfig, root?: HTMLElement): void;
|
|
9
9
|
declare function isDarkModeEnabled(): boolean;
|
|
10
10
|
declare function toggleDarkMode(enabled?: boolean | 'auto', root?: HTMLElement): void;
|
|
11
11
|
interface AttachDarkModeToggleOptions<T extends HTMLElement> {
|
|
12
|
+
change?(darkModeEnabled: boolean): void;
|
|
12
13
|
update?(host: T, darkModeEnabled: boolean, icon: string): void;
|
|
13
14
|
root?: HTMLElement;
|
|
14
15
|
}
|
package/dist/lib/theming.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { effect, sharedSignal } from "./signals.js";
|
|
2
2
|
import { darkModeClass, lightModeClass, setTheme } from "@odx/design-tokens";
|
|
3
|
-
const { matches: userPrefersDarkMode = false } = globalThis.matchMedia?.("(prefers-color-scheme: dark)") ?? {};
|
|
4
3
|
const darkModeIcon = "core::night-mode";
|
|
5
4
|
const lightModeIcon = "core::brightness";
|
|
5
|
+
const { matches: userPrefersDarkMode = false } = globalThis.matchMedia?.("(prefers-color-scheme: dark)") ?? {};
|
|
6
6
|
globalThis.__ODX_THEME_ROOT__ ??= document.documentElement;
|
|
7
7
|
const hasDarkModeClass = globalThis.__ODX_THEME_ROOT__.classList.contains(darkModeClass);
|
|
8
8
|
const hasLightModeClass = globalThis.__ODX_THEME_ROOT__.classList.contains(lightModeClass);
|
|
@@ -11,7 +11,7 @@ function setTheme$1(config, root = globalThis.__ODX_THEME_ROOT__) {
|
|
|
11
11
|
setTheme(config, root);
|
|
12
12
|
if (!config.mode) return;
|
|
13
13
|
if (config.mode === "auto") darkModeEnabled.set(userPrefersDarkMode);
|
|
14
|
-
else darkModeEnabled.set(config.mode === "dark"
|
|
14
|
+
else darkModeEnabled.set(config.mode === "dark");
|
|
15
15
|
}
|
|
16
16
|
function isDarkModeEnabled() {
|
|
17
17
|
return darkModeEnabled.get();
|
|
@@ -21,12 +21,21 @@ function toggleDarkMode(enabled, root = globalThis.__ODX_THEME_ROOT__) {
|
|
|
21
21
|
setTheme$1({ mode: enabled === "auto" ? enabled : enabled ? "dark" : "light" }, root);
|
|
22
22
|
}
|
|
23
23
|
function attachDarkModeToggle(host, options = {}) {
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const abortController = new AbortController();
|
|
25
|
+
const cleanup = effect(() => {
|
|
26
26
|
const darkModeEnabled = isDarkModeEnabled();
|
|
27
27
|
const icon = darkModeEnabled ? lightModeIcon : darkModeIcon;
|
|
28
28
|
host.setAttribute("icon", icon);
|
|
29
29
|
options.update?.(host, darkModeEnabled, icon);
|
|
30
30
|
});
|
|
31
|
+
host.addEventListener("click", (event) => {
|
|
32
|
+
if (event.defaultPrevented) return;
|
|
33
|
+
toggleDarkMode(void 0, options.root);
|
|
34
|
+
options.change?.(isDarkModeEnabled());
|
|
35
|
+
}, { signal: abortController.signal });
|
|
36
|
+
return () => {
|
|
37
|
+
abortController.abort();
|
|
38
|
+
cleanup();
|
|
39
|
+
};
|
|
31
40
|
}
|
|
32
41
|
export { attachDarkModeToggle, darkModeIcon, isDarkModeEnabled, lightModeIcon, setTheme$1 as setTheme, toggleDarkMode, userPrefersDarkMode };
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@odx/foundation",
|
|
3
3
|
"displayName": "ODX Design System Foundation",
|
|
4
4
|
"description": "The design foundation of the ODX Design System, providing base styles and utilities",
|
|
5
|
-
"version": "1.0.0-rc.
|
|
5
|
+
"version": "1.0.0-rc.11",
|
|
6
6
|
"author": "Drägerwerk AG & Co.KGaA",
|
|
7
7
|
"license": "SEE LICENSE IN LICENSE",
|
|
8
8
|
"homepage": "https://odx.draeger.com",
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
"@odx/design-tokens": "^4.0.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@tsdown/css": "0.22.
|
|
23
|
+
"@tsdown/css": "0.22.3",
|
|
24
24
|
"lit": "3.3.3",
|
|
25
25
|
"stylelint": "17.13.0",
|
|
26
|
-
"tsdown": "0.22.
|
|
26
|
+
"tsdown": "0.22.3",
|
|
27
27
|
"@odx-internal/config-stylelint": "0.0.0",
|
|
28
28
|
"@odx-internal/utils-storybook": "0.0.0"
|
|
29
29
|
},
|
|
@@ -49,11 +49,14 @@
|
|
|
49
49
|
"access": "public",
|
|
50
50
|
"tag": "latest"
|
|
51
51
|
},
|
|
52
|
+
"stylelint": {
|
|
53
|
+
"extends": "@odx-internal/config-stylelint"
|
|
54
|
+
},
|
|
52
55
|
"scripts": {
|
|
53
56
|
"build": "tsdown",
|
|
54
57
|
"dev": "tsdown --log-level error --no-clean --watch",
|
|
55
58
|
"dev:tsc": "tsc --build tsconfig.lib.json --noEmit --watch",
|
|
56
59
|
"lint": "biome lint src",
|
|
57
|
-
"lint:styles": "stylelint '**/*.css'
|
|
60
|
+
"lint:styles": "stylelint '**/*.css'"
|
|
58
61
|
}
|
|
59
62
|
}
|