@yyyu-star/arcade-kit 0.15.1 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +42 -0
- package/dist/share.d.ts +3 -0
- package/dist/share.d.ts.map +1 -1
- package/dist/share.js +5 -3
- package/dist/share.js.map +1 -1
- package/dist/social.d.ts +5 -0
- package/dist/social.d.ts.map +1 -1
- package/dist/social.js +19 -12
- package/dist/social.js.map +1 -1
- package/dist/table-fun.d.ts +13 -0
- package/dist/table-fun.d.ts.map +1 -1
- package/dist/table-fun.js +31 -17
- package/dist/table-fun.js.map +1 -1
- package/dist/theme.d.ts +37 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +42 -0
- package/dist/theme.js.map +1 -0
- package/package.json +5 -1
- package/src/share.ts +7 -3
- package/src/social.ts +23 -12
- package/src/table-fun.ts +39 -17
- package/src/theme.ts +69 -0
package/src/theme.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM 组件的主题(0.16.0):颜色、圆角、字体走 CSS 自定义属性 `--ak-*`,每处写成 `var(--ak-xxx, <原来的值>)`,
|
|
3
|
+
* 不给主题时外观和以前完全一样。两种用法:组件的选项里传 `theme`(写到组件根节点上),或游戏自己的 CSS 在 :root / body 上写 `--ak-*`(靠继承)。
|
|
4
|
+
* 纯函数,import 时不碰 DOM。值来自游戏代码,仍要挡 CSS 注入:含 `;` `{` `}` `<` `url(` `expression` 等的字段整个忽略。
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** 主题字段,全是可选的字符串(合法的 CSS 值,如 `#2b1d14`、`14px`、`"Noto Serif SC",serif`) */
|
|
8
|
+
export interface KitTheme {
|
|
9
|
+
/** --ak-bg:面板、菜单、横条的底色 */
|
|
10
|
+
bg?: string;
|
|
11
|
+
/** --ak-fg:面板上的文字色(分享预览的字和次按钮的边、字也用它) */
|
|
12
|
+
fg?: string;
|
|
13
|
+
/** --ak-accent:主按钮底色(去、叫他来、互动里的主操作、保存/复制图片) */
|
|
14
|
+
accent?: string;
|
|
15
|
+
/** --ak-accent-fg:主按钮上的文字色 */
|
|
16
|
+
accentFg?: string;
|
|
17
|
+
/** --ak-border:面板、按钮的边框色 */
|
|
18
|
+
border?: string;
|
|
19
|
+
/** --ak-radius:面板、横条、气泡、预览图的圆角 */
|
|
20
|
+
radius?: string;
|
|
21
|
+
/** --ak-radius-btn:按钮、格子、好友行的圆角 */
|
|
22
|
+
radiusBtn?: string;
|
|
23
|
+
/** --ak-font:字体(font-family 的值) */
|
|
24
|
+
font?: string;
|
|
25
|
+
/** --ak-overlay:遮罩色(分享预览、叫朋友面板背后那层) */
|
|
26
|
+
overlay?: string;
|
|
27
|
+
/** --ak-soft:次按钮、格子、好友行的底色 */
|
|
28
|
+
soft?: string;
|
|
29
|
+
/** --ak-title:标题、✕、强调字(如飘字、横幅的金色)的颜色 */
|
|
30
|
+
title?: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const NAMES: ReadonlyArray<readonly [keyof KitTheme, string]> = [
|
|
34
|
+
['bg', '--ak-bg'],
|
|
35
|
+
['fg', '--ak-fg'],
|
|
36
|
+
['accent', '--ak-accent'],
|
|
37
|
+
['accentFg', '--ak-accent-fg'],
|
|
38
|
+
['border', '--ak-border'],
|
|
39
|
+
['radius', '--ak-radius'],
|
|
40
|
+
['radiusBtn', '--ak-radius-btn'],
|
|
41
|
+
['font', '--ak-font'],
|
|
42
|
+
['overlay', '--ak-overlay'],
|
|
43
|
+
['soft', '--ak-soft'],
|
|
44
|
+
['title', '--ak-title'],
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
/** 能跳出一条声明、一个块,或带出外部资源、脚本的写法 */
|
|
48
|
+
const UNSAFE = /[;{}<>\\]|\/\*|url\s*\(|expression|@import|javascript:/i;
|
|
49
|
+
|
|
50
|
+
/** 值是不是能放进 CSS 自定义属性:非空字符串、不太长、不含注入写法 */
|
|
51
|
+
export function safeThemeValue(v: unknown): v is string {
|
|
52
|
+
return typeof v === 'string' && v.trim() !== '' && v.length <= 200 && !UNSAFE.test(v);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** 主题对象 → [变量名, 值] 列表;不认识的字段、不合格的值忽略,空对象(或不是对象)给空列表 */
|
|
56
|
+
export function themeVars(theme: KitTheme | null | undefined): Array<[string, string]> {
|
|
57
|
+
const out: Array<[string, string]> = [];
|
|
58
|
+
if (!theme || typeof theme !== 'object') return out;
|
|
59
|
+
for (const [key, name] of NAMES) {
|
|
60
|
+
const v = theme[key];
|
|
61
|
+
if (safeThemeValue(v)) out.push([name, v.trim()]);
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** 把主题写到组件根节点上;没传、没有合格字段就什么也不写(游戏可以只在自己的 CSS 里写 `--ak-*`) */
|
|
67
|
+
export function applyTheme(el: HTMLElement, theme: KitTheme | null | undefined): void {
|
|
68
|
+
for (const [name, v] of themeVars(theme)) el.style.setProperty(name, v);
|
|
69
|
+
}
|