@wsxjs/wsx-base-components 0.0.20 → 0.0.22
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/dist/index.cjs +6 -6
- package/dist/index.js +656 -647
- package/package.json +5 -5
- package/src/Button.wsx +2 -0
- package/src/ButtonGroup.wsx +1 -0
- package/src/CodeBlock.wsx +1 -0
- package/src/ColorPicker.wsx +2 -0
- package/src/Combobox.wsx +1 -0
- package/src/Dropdown.wsx +1 -0
- package/src/LanguageSwitcher.wsx +6 -21
- package/src/ResponsiveNav.wsx +4 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wsxjs/wsx-base-components",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.22",
|
|
4
4
|
"description": "Base UI components built with WSXJS",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"prismjs": "^1.30.0",
|
|
22
|
-
"@wsxjs/wsx-core": "0.0.
|
|
23
|
-
"@wsxjs/wsx-logger": "0.0.
|
|
22
|
+
"@wsxjs/wsx-core": "0.0.22",
|
|
23
|
+
"@wsxjs/wsx-logger": "0.0.22"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/prismjs": "^1.26.5",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"typescript": "^5.0.0",
|
|
34
34
|
"vite": "^5.4.19",
|
|
35
35
|
"vitest": "^2.1.8",
|
|
36
|
-
"@wsxjs/eslint-plugin-wsx": "0.0.
|
|
37
|
-
"@wsxjs/wsx-vite-plugin": "0.0.
|
|
36
|
+
"@wsxjs/eslint-plugin-wsx": "0.0.22",
|
|
37
|
+
"@wsxjs/wsx-vite-plugin": "0.0.22"
|
|
38
38
|
},
|
|
39
39
|
"keywords": [
|
|
40
40
|
"wsx",
|
package/src/Button.wsx
CHANGED
|
@@ -215,6 +215,7 @@ export default class Button extends WebComponent {
|
|
|
215
215
|
* 组件连接到DOM后的初始化
|
|
216
216
|
*/
|
|
217
217
|
protected onConnected(): void {
|
|
218
|
+
super.onConnected?.();
|
|
218
219
|
this.addEventListener("click", this.handleClick);
|
|
219
220
|
}
|
|
220
221
|
|
|
@@ -222,6 +223,7 @@ export default class Button extends WebComponent {
|
|
|
222
223
|
* 组件从DOM断开时的清理
|
|
223
224
|
*/
|
|
224
225
|
protected onDisconnected(): void {
|
|
226
|
+
super.onDisconnected?.();
|
|
225
227
|
this.removeEventListener("click", this.handleClick);
|
|
226
228
|
}
|
|
227
229
|
|
package/src/ButtonGroup.wsx
CHANGED
package/src/CodeBlock.wsx
CHANGED
package/src/ColorPicker.wsx
CHANGED
|
@@ -347,6 +347,7 @@ export default class ColorPicker extends WebComponent {
|
|
|
347
347
|
* 组件连接到DOM后的初始化
|
|
348
348
|
*/
|
|
349
349
|
protected onConnected(): void {
|
|
350
|
+
super.onConnected?.();
|
|
350
351
|
// 绑定全局点击事件以关闭面板
|
|
351
352
|
document.addEventListener("click", this.handleDocumentClick);
|
|
352
353
|
|
|
@@ -357,6 +358,7 @@ export default class ColorPicker extends WebComponent {
|
|
|
357
358
|
* 组件从DOM断开时的清理
|
|
358
359
|
*/
|
|
359
360
|
protected onDisconnected(): void {
|
|
361
|
+
super.onDisconnected?.();
|
|
360
362
|
document.removeEventListener("click", this.handleDocumentClick);
|
|
361
363
|
|
|
362
364
|
logger.info("ColorPicker disconnected from DOM");
|
package/src/Combobox.wsx
CHANGED
package/src/Dropdown.wsx
CHANGED
package/src/LanguageSwitcher.wsx
CHANGED
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { WebComponent, autoRegister, state } from "@wsxjs/wsx-core";
|
|
8
8
|
import { i18nInstance } from "@wsxjs/wsx-i18next";
|
|
9
|
-
import styles from "./LanguageSwitcher.css?inline";
|
|
10
|
-
|
|
11
9
|
/**
|
|
12
10
|
* 语言选项接口
|
|
13
11
|
*/
|
|
@@ -18,7 +16,7 @@ export interface LanguageOption {
|
|
|
18
16
|
name: string;
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
@autoRegister({ tagName: "language-switcher" })
|
|
19
|
+
@autoRegister({ tagName: "wsx-language-switcher" })
|
|
22
20
|
export default class LanguageSwitcher extends WebComponent {
|
|
23
21
|
/** 支持的语言列表 */
|
|
24
22
|
private languages: LanguageOption[] = [
|
|
@@ -41,13 +39,6 @@ export default class LanguageSwitcher extends WebComponent {
|
|
|
41
39
|
private dropdownElement?: HTMLElement;
|
|
42
40
|
private buttonElement?: HTMLElement;
|
|
43
41
|
|
|
44
|
-
constructor() {
|
|
45
|
-
super({
|
|
46
|
-
styles,
|
|
47
|
-
styleName: "language-switcher",
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
42
|
render(): HTMLElement {
|
|
52
43
|
const currentLang = this.languages.find((lang) => lang.code === this.currentLanguage);
|
|
53
44
|
const displayName = currentLang?.name || this.currentLanguage.toUpperCase();
|
|
@@ -98,13 +89,9 @@ export default class LanguageSwitcher extends WebComponent {
|
|
|
98
89
|
*/
|
|
99
90
|
private toggleDropdown = (): void => {
|
|
100
91
|
this.isOpen = !this.isOpen;
|
|
101
|
-
this.rerender();
|
|
102
92
|
|
|
103
93
|
if (this.isOpen) {
|
|
104
|
-
|
|
105
|
-
setTimeout(() => {
|
|
106
|
-
document.addEventListener("click", this.handleOutsideClick, true);
|
|
107
|
-
}, 0);
|
|
94
|
+
document.addEventListener("click", this.handleOutsideClick, true);
|
|
108
95
|
}
|
|
109
96
|
};
|
|
110
97
|
|
|
@@ -120,7 +107,6 @@ export default class LanguageSwitcher extends WebComponent {
|
|
|
120
107
|
!this.buttonElement.contains(target)
|
|
121
108
|
) {
|
|
122
109
|
this.isOpen = false;
|
|
123
|
-
this.rerender();
|
|
124
110
|
document.removeEventListener("click", this.handleOutsideClick, true);
|
|
125
111
|
}
|
|
126
112
|
};
|
|
@@ -131,7 +117,6 @@ export default class LanguageSwitcher extends WebComponent {
|
|
|
131
117
|
private selectLanguage = (languageCode: string): void => {
|
|
132
118
|
if (languageCode === this.currentLanguage) {
|
|
133
119
|
this.isOpen = false;
|
|
134
|
-
this.rerender();
|
|
135
120
|
return;
|
|
136
121
|
}
|
|
137
122
|
|
|
@@ -139,7 +124,6 @@ export default class LanguageSwitcher extends WebComponent {
|
|
|
139
124
|
i18nInstance.changeLanguage(languageCode).then(() => {
|
|
140
125
|
this.currentLanguage = languageCode;
|
|
141
126
|
this.isOpen = false;
|
|
142
|
-
this.rerender();
|
|
143
127
|
|
|
144
128
|
// 保存到 localStorage
|
|
145
129
|
localStorage.setItem("wsx-language", languageCode);
|
|
@@ -149,7 +133,8 @@ export default class LanguageSwitcher extends WebComponent {
|
|
|
149
133
|
/**
|
|
150
134
|
* 组件连接时初始化
|
|
151
135
|
*/
|
|
152
|
-
|
|
136
|
+
onConnected(): void {
|
|
137
|
+
super.onConnected?.();
|
|
153
138
|
// 从 localStorage 或 i18next 获取当前语言
|
|
154
139
|
const savedLanguage = localStorage.getItem("wsx-language");
|
|
155
140
|
const i18nLanguage = i18nInstance.language || i18nInstance.options.fallbackLng || "en";
|
|
@@ -172,7 +157,8 @@ export default class LanguageSwitcher extends WebComponent {
|
|
|
172
157
|
/**
|
|
173
158
|
* 组件断开连接时清理
|
|
174
159
|
*/
|
|
175
|
-
|
|
160
|
+
onDisconnected(): void {
|
|
161
|
+
super.onDisconnected?.();
|
|
176
162
|
i18nInstance.off("languageChanged", this.handleLanguageChanged);
|
|
177
163
|
document.removeEventListener("click", this.handleOutsideClick, true);
|
|
178
164
|
}
|
|
@@ -184,7 +170,6 @@ export default class LanguageSwitcher extends WebComponent {
|
|
|
184
170
|
const baseLanguage = lng.split("-")[0];
|
|
185
171
|
if (baseLanguage !== this.currentLanguage) {
|
|
186
172
|
this.currentLanguage = baseLanguage;
|
|
187
|
-
this.rerender();
|
|
188
173
|
}
|
|
189
174
|
};
|
|
190
175
|
}
|
package/src/ResponsiveNav.wsx
CHANGED
|
@@ -82,7 +82,7 @@ export default class ResponsiveNav extends WebComponent {
|
|
|
82
82
|
const isVisible = this.visibleItemIndices.includes(index);
|
|
83
83
|
return (
|
|
84
84
|
<wsx-link
|
|
85
|
-
key={index}
|
|
85
|
+
key={`nav-${index}`}
|
|
86
86
|
ref={(el) => {
|
|
87
87
|
if (el) {
|
|
88
88
|
this.navItemsElements[index] = el;
|
|
@@ -121,7 +121,7 @@ export default class ResponsiveNav extends WebComponent {
|
|
|
121
121
|
this.hiddenItemIndices[idx];
|
|
122
122
|
return (
|
|
123
123
|
<wsx-link
|
|
124
|
-
key={originalIndex}
|
|
124
|
+
key={`overflow-${originalIndex}`}
|
|
125
125
|
to={item.to}
|
|
126
126
|
class="nav-overflow-link"
|
|
127
127
|
active-class="nav-link-active"
|
|
@@ -374,6 +374,7 @@ export default class ResponsiveNav extends WebComponent {
|
|
|
374
374
|
* 组件连接时初始化
|
|
375
375
|
*/
|
|
376
376
|
protected onConnected(): void {
|
|
377
|
+
super.onConnected?.();
|
|
377
378
|
// 如果配置未初始化,从属性读取
|
|
378
379
|
if (!this.navigation?.items || this.navigation?.items.length === 0) {
|
|
379
380
|
try {
|
|
@@ -431,6 +432,7 @@ export default class ResponsiveNav extends WebComponent {
|
|
|
431
432
|
* 组件断开连接时清理
|
|
432
433
|
*/
|
|
433
434
|
protected onDisconnected(): void {
|
|
435
|
+
super.onDisconnected?.();
|
|
434
436
|
if (this.resizeHandler) {
|
|
435
437
|
window.removeEventListener("resize", this.resizeHandler);
|
|
436
438
|
}
|