Compare commits

...

8 Commits

Author SHA1 Message Date
c726cd5af8 v2.1.3
Some checks failed
Default (tags) / security (push) Failing after 24s
Default (tags) / test (push) Failing after 13s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-11-16 14:53:02 +00:00
8d60911b34 fix(CssManager): Make CssManager a singleton and export the shared instance via getSingleton; update tests and dependencies 2025-11-16 14:53:02 +00:00
217ea3e9d4 2.1.2
Some checks failed
Default (tags) / security (push) Failing after 12s
Default (tags) / test (push) Failing after 11s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-07-06 12:06:06 +00:00
8263a4fe73 fix(build): Update build script in package.json to include tsfolders in tsbuild command 2025-07-06 12:06:06 +00:00
340582e042 2.1.1
Some checks failed
Default (tags) / security (push) Failing after 21s
Default (tags) / test (push) Failing after 12s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-07-06 12:04:15 +00:00
a8e07f9682 fix(documentation): Refine project documentation and metadata for clarity 2025-07-06 12:04:15 +00:00
aa37652b6d 2.1.0
Some checks failed
Default (tags) / security (push) Failing after 22s
Default (tags) / test (push) Failing after 12s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-07-06 11:56:23 +00:00
7e26cd39d7 feat(DeesElement): Add invocation of the themeChanged hook in connectedCallback 2025-07-06 11:56:23 +00:00
9 changed files with 2765 additions and 1169 deletions

View File

@@ -1,5 +1,32 @@
# Changelog
## 2025-11-16 - 2.1.3 - fix(CssManager)
Make CssManager a singleton and export the shared instance via getSingleton; update tests and dependencies
- Convert CssManager to a singleton by adding a private static instance and a public static getSingleton() method.
- Use CssManager.getSingleton() for the exported cssManager in ts/index.ts to ensure a single shared instance across the app.
- Add a Chromium-focused test (test.chromium.ts) and remove the browser-specific test file.
- Bump devDependencies (@git.zone/tsbuild, @git.zone/tsbundle, @git.zone/tstest) and update lit to ^3.3.1.
- Add readme.hints.md documenting the CssManager singleton pattern and supported access patterns.
## 2025-07-06 - 2.1.2 - fix(build)
Update build script in package.json to include 'tsfolders' in tsbuild command
- Changed build script from 'tsbuild --web --allowimplicitany && tsbundle npm' to 'tsbuild tsfolders --web --allowimplicitany && tsbundle npm'
## 2025-07-06 - 2.1.1 - fix(documentation)
Refine project documentation and metadata for clarity
- Update readme examples to better illustrate custom element usage
- Clarify CssManager theming and API usage in documentation
- Ensure package.json and commitinfo reflect accurate project details
## 2025-07-06 - 2.1.0 - feat(DeesElement)
Add invocation of the themeChanged hook in connectedCallback
- Now calls themeChanged (if defined) when the theme changes, enabling custom handlers for theme switches
- Improves lifecycle management by allowing extensions to react to bright/dark mode changes
## 2025-06-20 - 2.0.44 - fix(ci)
Remove obsolete GitLab CI configuration

View File

@@ -1,6 +1,6 @@
{
"name": "@design.estate/dees-element",
"version": "2.0.45",
"version": "2.1.3",
"private": false,
"description": "A library for creating custom elements extending the lit element class with additional functionalities.",
"main": "dist_ts/index.js",
@@ -10,13 +10,13 @@
"license": "MIT",
"scripts": {
"test": "(tstest test/ --web)",
"build": "(tsbuild --web --allowimplicitany && tsbundle npm)",
"build": "(tsbuild tsfolders --web --allowimplicitany && tsbundle npm)",
"buildDocs": "tsdoc"
},
"devDependencies": {
"@git.zone/tsbuild": "^2.6.4",
"@git.zone/tsbundle": "^2.4.0",
"@git.zone/tstest": "^2.3.1",
"@git.zone/tsbuild": "^2.7.1",
"@git.zone/tsbundle": "^2.5.1",
"@git.zone/tstest": "^2.7.0",
"@push.rocks/tapbundle": "^6.0.3",
"@types/node": "^22.14.1"
},
@@ -24,7 +24,7 @@
"@design.estate/dees-domtools": "^2.3.3",
"@push.rocks/isounique": "^1.0.5",
"@push.rocks/smartrx": "^3.0.10",
"lit": "^3.3.0"
"lit": "^3.3.1"
},
"browserslist": [
"last 1 chrome versions"

3849
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1,15 @@
# Project Hints
## CssManager Singleton Pattern
**Location:** `ts/classes.cssmanager.ts`
The `CssManager` class uses a singleton pattern:
- **Static method:** `CssManager.getSingleton()` - Returns the singleton instance
- **Exported instance:** `cssManager` (from `ts/index.ts`) - Uses `getSingleton()` internally
Both access patterns are supported for backward compatibility:
- `cssManager.method()` - Legacy pattern (still works)
- `CssManager.getSingleton().method()` - Preferred pattern
The singleton ensures only one instance manages CSS variables and theme changes throughout the application.

View File

@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@design.estate/dees-element',
version: '2.0.44',
version: '2.1.3',
description: 'A library for creating custom elements extending the lit element class with additional functionalities.'
}

View File

@@ -9,6 +9,21 @@ export interface IBdVarTriplet {
}
export class CssManager {
// STATIC
private static instance: CssManager | null = null;
/**
* Returns the singleton instance of CssManager
*/
public static getSingleton(): CssManager {
if (!CssManager.instance) {
CssManager.instance = new CssManager();
}
return CssManager.instance;
}
// INSTANCE
public domtoolsPromise = domtools.DomTools.setupDomTools();
public goBright: boolean = false;
public bdVarTripletStore: IBdVarTriplet[] = [];

View File

@@ -25,11 +25,22 @@ export class DeesElement extends plugins.lit.LitElement {
});
}
/**
* Called when the theme changes between bright and dark.
* Override this method to handle theme changes.
* @param goBright - true if switching to bright theme, false if switching to dark theme
*/
protected themeChanged?(goBright: boolean): void;
public async connectedCallback() {
super.connectedCallback();
const domtools = await this.domtoolsPromise;
this.themeSubscription = domtools.themeManager.themeObservable.subscribe((goBrightArg) => {
this.goBright = goBrightArg;
// Call themeChanged if it's defined
if (this.themeChanged) {
this.themeChanged(goBrightArg);
}
});
this.rxSubscriptions.push(this.themeSubscription);
for (const startupFunction of this.startupFunctions) {

View File

@@ -26,7 +26,7 @@ export { directives };
/**
* a singleton instance of CssManager
*/
export const cssManager = new CssManager();
export const cssManager = CssManager.getSingleton();