@xiao-ying/miniapp-hooks 1.1.0 → 1.2.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/README.md +6 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/use-appearance.d.ts +20 -0
- package/dist/use-appearance.d.ts.map +1 -0
- package/dist/use-appearance.js +47 -0
- package/dist/use-appearance.js.map +1 -0
- package/dist/use-foreground.d.ts +1 -1
- package/dist/use-foreground.js +1 -1
- package/package.json +5 -5
- package/src/index.ts +3 -0
- package/src/use-appearance.ts +55 -0
- package/src/use-foreground.ts +1 -1
package/README.md
CHANGED
|
@@ -10,8 +10,10 @@ pnpm add @xiao-ying/miniapp-hooks @xiao-ying/miniapp-sdk react
|
|
|
10
10
|
|
|
11
11
|
## Hook 列表
|
|
12
12
|
|
|
13
|
+
- `useAppearance()`:订阅宿主 appearance 变化,返回 `{ themeSeedColor }`。
|
|
14
|
+
- `useThemeSeedColor()`:订阅宿主主题 seed color,返回 `#rrggbb` 字符串;旧引擎或缺字段时回退小应蓝 `#4da3ff`。
|
|
13
15
|
- `useBrightness()`:订阅原生/浏览器亮度变化,返回 `{ brightness, isDark }`。
|
|
14
|
-
- `useForeground()
|
|
16
|
+
- `useForeground()`:订阅宿主提供的前后台提示(soft hint),返回 `{ isForeground }`。
|
|
15
17
|
- `useMediaQuery()`:暴露注入的 `mediaQuery`(安全区、DPR、尺寸)。
|
|
16
18
|
- `useStorage(key, options?)`:与 `xy.onStorageChange` 同步,提供 `value`、`loading`、`error` 以及 `setValue/remove/refresh`。
|
|
17
19
|
- `useShare(input?)`:注册分享处理器,自动补齐默认 path/title。
|
|
@@ -26,16 +28,18 @@ pnpm add @xiao-ying/miniapp-hooks @xiao-ying/miniapp-sdk react
|
|
|
26
28
|
## 快速示例
|
|
27
29
|
|
|
28
30
|
```tsx
|
|
29
|
-
import { useBrightness, useStorage } from '@xiao-ying/miniapp-hooks'
|
|
31
|
+
import { useBrightness, useStorage, useThemeSeedColor } from '@xiao-ying/miniapp-hooks'
|
|
30
32
|
|
|
31
33
|
const Preferences = () => {
|
|
32
34
|
const { brightness, isDark } = useBrightness()
|
|
35
|
+
const themeSeedColor = useThemeSeedColor()
|
|
33
36
|
const theme = isDark ? 'dark' : 'light'
|
|
34
37
|
const storage = useStorage<string>('nickname', { defaultValue: '游客' })
|
|
35
38
|
|
|
36
39
|
return (
|
|
37
40
|
<div data-theme={theme}>
|
|
38
41
|
<p>当前模式: {brightness}</p>
|
|
42
|
+
<p>主题色: {themeSeedColor}</p>
|
|
39
43
|
<input
|
|
40
44
|
value={storage.value ?? ''}
|
|
41
45
|
onChange={(e) => storage.setValue(e.target.value)}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { useAppearance, useThemeSeedColor } from './use-appearance.js';
|
|
1
2
|
export { useBrightness } from './use-brightness.js';
|
|
2
3
|
export { useForeground } from './use-foreground.js';
|
|
3
4
|
export { useMediaQuery, type UseMediaQueryResult } from './use-media-query.js';
|
|
@@ -7,5 +8,5 @@ export { useHapticFeedback, type UseHapticFeedbackOptions } from './use-haptic-f
|
|
|
7
8
|
export { useSdkError, type UseSdkErrorOptions, type UseSdkErrorResult, type UseSdkErrorFilter } from './use-sdk-error.js';
|
|
8
9
|
export { useHapticFeedback as useHapticPress } from './use-haptic-feedback.js';
|
|
9
10
|
export { useAuthState } from './use-auth-state.js';
|
|
10
|
-
export type { XYSdk, XYMediaQuery, XYSafeAreaInsets, XYViewportSize, XYBrightnessEvent, XYStorageEvent, XyShareData, XyShareHandlerPayload, MaybePromise } from '@xiao-ying/miniapp-sdk';
|
|
11
|
+
export type { XYSdk, XYMediaQuery, XYSafeAreaInsets, XYViewportSize, XYBrightnessEvent, XYAppearance, XYAppearanceEvent, XYStorageEvent, XyShareData, XyShareHandlerPayload, MaybePromise } from '@xiao-ying/miniapp-sdk';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EACL,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,iBAAiB,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,YAAY,EACV,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,YAAY,EACb,MAAM,wBAAwB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EACL,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,iBAAiB,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,YAAY,EACV,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,YAAY,EACb,MAAM,wBAAwB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EACL,aAAa,EAEd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,UAAU,EAGX,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAiC,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EACL,WAAW,EAIZ,MAAM,oBAAoB,CAAA;AAC3B,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EACL,aAAa,EAEd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,UAAU,EAGX,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAiC,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EACL,WAAW,EAIZ,MAAM,oBAAoB,CAAA;AAC3B,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type XYAppearance } from '@xiao-ying/miniapp-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* 订阅宿主外观配置变化并返回当前 appearance。
|
|
4
|
+
*
|
|
5
|
+
* @returns `XYAppearance`,当前只包含 `{ themeSeedColor }`。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const { themeSeedColor } = useAppearance()
|
|
9
|
+
*/
|
|
10
|
+
export declare const useAppearance: () => XYAppearance;
|
|
11
|
+
/**
|
|
12
|
+
* 订阅宿主主题 seed color 变化。
|
|
13
|
+
*
|
|
14
|
+
* @returns 当前主题 seed color,格式为 `#rrggbb`。
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const themeSeedColor = useThemeSeedColor()
|
|
18
|
+
*/
|
|
19
|
+
export declare const useThemeSeedColor: () => string;
|
|
20
|
+
//# sourceMappingURL=use-appearance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-appearance.d.ts","sourceRoot":"","sources":["../src/use-appearance.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAUvF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,QAAO,YAyBhC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAAwC,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { DEFAULT_XY_THEME_SEED_COLOR } from '@xiao-ying/miniapp-sdk';
|
|
3
|
+
const readAppearance = () => {
|
|
4
|
+
try {
|
|
5
|
+
return xy.appearance();
|
|
6
|
+
}
|
|
7
|
+
catch (_) {
|
|
8
|
+
return { themeSeedColor: DEFAULT_XY_THEME_SEED_COLOR };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 订阅宿主外观配置变化并返回当前 appearance。
|
|
13
|
+
*
|
|
14
|
+
* @returns `XYAppearance`,当前只包含 `{ themeSeedColor }`。
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const { themeSeedColor } = useAppearance()
|
|
18
|
+
*/
|
|
19
|
+
export const useAppearance = () => {
|
|
20
|
+
const [appearance, setAppearance] = useState(() => readAppearance());
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (typeof xy.onAppearanceChange !== 'function') {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const unsubscribe = xy.onAppearanceChange((event) => {
|
|
26
|
+
setAppearance(event.appearance);
|
|
27
|
+
});
|
|
28
|
+
return () => {
|
|
29
|
+
if (typeof unsubscribe === 'function') {
|
|
30
|
+
unsubscribe();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}, []);
|
|
34
|
+
return useMemo(() => ({
|
|
35
|
+
themeSeedColor: appearance.themeSeedColor
|
|
36
|
+
}), [appearance.themeSeedColor]);
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* 订阅宿主主题 seed color 变化。
|
|
40
|
+
*
|
|
41
|
+
* @returns 当前主题 seed color,格式为 `#rrggbb`。
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* const themeSeedColor = useThemeSeedColor()
|
|
45
|
+
*/
|
|
46
|
+
export const useThemeSeedColor = () => useAppearance().themeSeedColor;
|
|
47
|
+
//# sourceMappingURL=use-appearance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-appearance.js","sourceRoot":"","sources":["../src/use-appearance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,2BAA2B,EAAqB,MAAM,wBAAwB,CAAA;AAEvF,MAAM,cAAc,GAAG,GAAiB,EAAE;IACxC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,UAAU,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,CAAA;IACxD,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAiB,EAAE;IAC9C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAe,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAA;IAElF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,CAAC,kBAAkB,KAAK,UAAU,EAAE,CAAC;YAChD,OAAM;QACR,CAAC;QAED,MAAM,WAAW,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE;YAClD,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACV,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;gBACtC,WAAW,EAAE,CAAA;YACf,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,cAAc,EAAE,UAAU,CAAC,cAAc;KAC1C,CAAC,EACF,CAAC,UAAU,CAAC,cAAc,CAAC,CAC5B,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE,CAAC,aAAa,EAAE,CAAC,cAAc,CAAA"}
|
package/dist/use-foreground.d.ts
CHANGED
package/dist/use-foreground.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xiao-ying/miniapp-hooks",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "React hooks for @xiao-ying/miniapp-sdk to build reactive miniapp UIs",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"react": "^18.0.0 || ^19.0.0",
|
|
30
|
-
"@xiao-ying/miniapp-sdk": "^1.
|
|
30
|
+
"@xiao-ying/miniapp-sdk": "^1.3.2"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@types/react": "^19.2.
|
|
34
|
-
"react": "^19.2.
|
|
33
|
+
"@types/react": "^19.2.14",
|
|
34
|
+
"react": "^19.2.5",
|
|
35
35
|
"typescript": "^5.9.3",
|
|
36
|
-
"@xiao-ying/miniapp-sdk": "^1.
|
|
36
|
+
"@xiao-ying/miniapp-sdk": "^1.3.2"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
39
|
"build": "node ../scripts/clean-dist.mjs && tsc -p tsconfig.json",
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
export { useAppearance, useThemeSeedColor } from './use-appearance.js'
|
|
3
4
|
export { useBrightness } from './use-brightness.js'
|
|
4
5
|
export { useForeground } from './use-foreground.js'
|
|
5
6
|
export {
|
|
@@ -29,6 +30,8 @@ export type {
|
|
|
29
30
|
XYSafeAreaInsets,
|
|
30
31
|
XYViewportSize,
|
|
31
32
|
XYBrightnessEvent,
|
|
33
|
+
XYAppearance,
|
|
34
|
+
XYAppearanceEvent,
|
|
32
35
|
XYStorageEvent,
|
|
33
36
|
XyShareData,
|
|
34
37
|
XyShareHandlerPayload,
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { useEffect, useMemo, useState } from 'react'
|
|
2
|
+
import { DEFAULT_XY_THEME_SEED_COLOR, type XYAppearance } from '@xiao-ying/miniapp-sdk'
|
|
3
|
+
|
|
4
|
+
const readAppearance = (): XYAppearance => {
|
|
5
|
+
try {
|
|
6
|
+
return xy.appearance()
|
|
7
|
+
} catch (_) {
|
|
8
|
+
return { themeSeedColor: DEFAULT_XY_THEME_SEED_COLOR }
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 订阅宿主外观配置变化并返回当前 appearance。
|
|
14
|
+
*
|
|
15
|
+
* @returns `XYAppearance`,当前只包含 `{ themeSeedColor }`。
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const { themeSeedColor } = useAppearance()
|
|
19
|
+
*/
|
|
20
|
+
export const useAppearance = (): XYAppearance => {
|
|
21
|
+
const [appearance, setAppearance] = useState<XYAppearance>(() => readAppearance())
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (typeof xy.onAppearanceChange !== 'function') {
|
|
25
|
+
return
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const unsubscribe = xy.onAppearanceChange((event) => {
|
|
29
|
+
setAppearance(event.appearance)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
return () => {
|
|
33
|
+
if (typeof unsubscribe === 'function') {
|
|
34
|
+
unsubscribe()
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}, [])
|
|
38
|
+
|
|
39
|
+
return useMemo(
|
|
40
|
+
() => ({
|
|
41
|
+
themeSeedColor: appearance.themeSeedColor
|
|
42
|
+
}),
|
|
43
|
+
[appearance.themeSeedColor]
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 订阅宿主主题 seed color 变化。
|
|
49
|
+
*
|
|
50
|
+
* @returns 当前主题 seed color,格式为 `#rrggbb`。
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* const themeSeedColor = useThemeSeedColor()
|
|
54
|
+
*/
|
|
55
|
+
export const useThemeSeedColor = (): string => useAppearance().themeSeedColor
|