@mantou/gem 2.2.11 → 2.2.13
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/gem.js +6 -6
- package/dist/gem.mjs +6 -6
- package/elements/base/gesture.d.ts +7 -1
- package/elements/base/gesture.d.ts.map +1 -1
- package/elements/base/gesture.js +1 -1
- package/elements/base/gesture.js.map +1 -1
- package/helper/theme.d.ts.map +1 -1
- package/helper/theme.js +14 -5
- package/helper/theme.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/elements/base/gesture.ts +8 -2
- package/src/helper/theme.ts +14 -5
- package/src/lib/version.ts +1 -1
- package/src/test/elements/gesture.test.ts +37 -1
- package/src/test/theme.test.ts +17 -0
package/helper/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/helper/theme.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAS1E,MAAM,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,MAAM,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AAEpC,aAAa;AACb,MAAM,UAAU,aAAa,CAAI,KAAe;IAC9C,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAa,CAAC;AAC9C,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAI,KAAe;IAC9C,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAa,CAAC;AAC9C,CAAC;AAED,SAAS,oBAAoB,CAAoC,QAAW,EAAE,QAAgC,EAAE;IAC9G,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,WAAW,CAAI,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAQ,IAAI,KAAK,CAC1B,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,OAAmB,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/helper/theme.ts"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "2.2.
|
|
1
|
+
export declare const version = "2.2.13";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '2.2.
|
|
1
|
+
export const version = '2.2.13';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -29,6 +29,12 @@ export interface RotateEventDetail {
|
|
|
29
29
|
y: number;
|
|
30
30
|
rotate: number;
|
|
31
31
|
}
|
|
32
|
+
export interface EndEventDetail {
|
|
33
|
+
/** 结束手势的原始事件,可通过 type 区分抬手、取消或离开。 */
|
|
34
|
+
event: PointerEvent;
|
|
35
|
+
/** 本次手势是否触发过 press,取消时也保留该状态。 */
|
|
36
|
+
pressed: boolean;
|
|
37
|
+
}
|
|
32
38
|
|
|
33
39
|
// 甩动手感的经验参数,非 UIKit 的公开阈值;坐标单位为 CSS px。
|
|
34
40
|
const SWIPE_TIME_WINDOW = 100;
|
|
@@ -137,7 +143,7 @@ export class GemGestureElement extends GemElement {
|
|
|
137
143
|
@emitter rotate: Emitter<RotateEventDetail>;
|
|
138
144
|
@emitter swipe: Emitter<SwipeEventDetail>;
|
|
139
145
|
@emitter press: Emitter<PointerEvent>;
|
|
140
|
-
@emitter end: Emitter<
|
|
146
|
+
@emitter end: Emitter<EndEventDetail>;
|
|
141
147
|
|
|
142
148
|
@attribute touchAction: string;
|
|
143
149
|
|
|
@@ -317,7 +323,7 @@ export class GemGestureElement extends GemElement {
|
|
|
317
323
|
if (ended) {
|
|
318
324
|
this.grabbing = false;
|
|
319
325
|
this.#gestureTriggered = false;
|
|
320
|
-
this.end(evt);
|
|
326
|
+
this.end({ event: evt, pressed: this.#pressed });
|
|
321
327
|
}
|
|
322
328
|
|
|
323
329
|
// 确保外部 end 事件处理器中可以读取到,且不删除新手势的记录。
|
package/src/helper/theme.ts
CHANGED
|
@@ -29,8 +29,20 @@ function createThemeFromProps<T extends Record<string, unknown>>(themeObj: T, pr
|
|
|
29
29
|
const salt = randomStr();
|
|
30
30
|
const styleSheet = css({})[SheetToken];
|
|
31
31
|
const store = createStore<T>(themeObj);
|
|
32
|
+
// 同步分配变量名,新增的键在更新后立即可读;样式内容随 store 异步更新
|
|
33
|
+
const defineProps = () => {
|
|
34
|
+
Object.keys(store).forEach((key) => {
|
|
35
|
+
if (!props[key]) {
|
|
36
|
+
props[key] = `--${camelToKebabCase(key)}-${salt}`;
|
|
37
|
+
theme[key] = `var(${props[key]})`;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
32
41
|
const theme: any = new Proxy(
|
|
33
|
-
createUpdater({ [SheetToken]: styleSheet }, (payload: Partial<T>) =>
|
|
42
|
+
createUpdater({ [SheetToken]: styleSheet }, (payload: Partial<T>) => {
|
|
43
|
+
store(payload);
|
|
44
|
+
defineProps();
|
|
45
|
+
}),
|
|
34
46
|
{
|
|
35
47
|
get(target: any, key: string) {
|
|
36
48
|
if (!target[key]) {
|
|
@@ -45,12 +57,9 @@ function createThemeFromProps<T extends Record<string, unknown>>(themeObj: T, pr
|
|
|
45
57
|
themeStoreMap.set(theme, store);
|
|
46
58
|
|
|
47
59
|
const updateContent = () => {
|
|
60
|
+
defineProps();
|
|
48
61
|
let rules = '';
|
|
49
62
|
Object.keys(store).forEach((key) => {
|
|
50
|
-
if (!props[key]) {
|
|
51
|
-
props[key] = `--${camelToKebabCase(key)}-${salt}`;
|
|
52
|
-
theme[key] = `var(${props[key]})`;
|
|
53
|
-
}
|
|
54
63
|
rules += `${props[key]}:${store[key]};`;
|
|
55
64
|
});
|
|
56
65
|
styleSheet.setContent(`&,:host{${rules}}`);
|
package/src/lib/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '2.2.
|
|
1
|
+
export const version = '2.2.13';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GemGestureElement, SwipeEventDetail } from '../../elements/gesture';
|
|
1
|
+
import type { EndEventDetail, GemGestureElement, SwipeEventDetail } from '../../elements/gesture';
|
|
2
2
|
import { html } from '../../lib/element';
|
|
3
3
|
import { aTimeout, expect, fixture } from '../utils';
|
|
4
4
|
|
|
@@ -37,6 +37,42 @@ async function setupGesture(touchAction = '') {
|
|
|
37
37
|
return { el, swipes, events, dispatch };
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
describe('GemGestureElement end', () => {
|
|
41
|
+
for (const type of ['pointerup', 'pointercancel', 'pointerleave']) {
|
|
42
|
+
it(`includes the original ${type} event and resets pressed for the next gesture`, async () => {
|
|
43
|
+
const { el, dispatch } = await setupGesture();
|
|
44
|
+
const ends: EndEventDetail[] = [];
|
|
45
|
+
el.addEventListener('end', (evt: CustomEvent<EndEventDetail>) => ends.push(evt.detail));
|
|
46
|
+
const pressed = new Promise((resolve) => el.addEventListener('press', resolve, { once: true }));
|
|
47
|
+
dispatch('pointerdown', [0, 0]);
|
|
48
|
+
await pressed;
|
|
49
|
+
const event = pointer(type, [300, 10, 20]);
|
|
50
|
+
el.dispatchEvent(event);
|
|
51
|
+
await Promise.resolve();
|
|
52
|
+
expect(ends).to.have.lengthOf(1);
|
|
53
|
+
expect(ends[0].event).to.equal(event);
|
|
54
|
+
expect(ends[0].pressed).to.equal(true);
|
|
55
|
+
|
|
56
|
+
dispatch('pointerdown', [400, 0]);
|
|
57
|
+
dispatch('pointerup', [450, 0]);
|
|
58
|
+
await Promise.resolve();
|
|
59
|
+
expect(ends).to.have.lengthOf(2);
|
|
60
|
+
expect(ends[1].pressed).to.equal(false);
|
|
61
|
+
expect(ends[0].pressed).to.equal(true);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
it('sets pressed before a press handler synchronously ends the gesture', async () => {
|
|
66
|
+
const { el, dispatch } = await setupGesture();
|
|
67
|
+
const ended = new Promise<EndEventDetail>((resolve) => {
|
|
68
|
+
el.addEventListener('end', (evt: CustomEvent<EndEventDetail>) => resolve(evt.detail), { once: true });
|
|
69
|
+
});
|
|
70
|
+
el.addEventListener('press', () => dispatch('pointerup', [300, 0]), { once: true });
|
|
71
|
+
dispatch('pointerdown', [0, 0]);
|
|
72
|
+
expect((await ended).pressed).to.equal(true);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
40
76
|
describe('GemGestureElement swipe', () => {
|
|
41
77
|
for (const [direction, x, y] of [
|
|
42
78
|
['right', 60, 0],
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createTheme } from '../helper/theme';
|
|
2
|
+
import { aTimeout, expect } from './utils';
|
|
3
|
+
|
|
4
|
+
describe('theme 测试', () => {
|
|
5
|
+
it('新增的键更新后立即可读', async () => {
|
|
6
|
+
const theme = createTheme({ color: 'red' }) as any;
|
|
7
|
+
theme({ size: '1px' });
|
|
8
|
+
expect(theme.size).to.match(/^var\(--size-\w+\)$/);
|
|
9
|
+
|
|
10
|
+
const el = document.createElement('div');
|
|
11
|
+
el.style.width = theme.size;
|
|
12
|
+
document.body.append(el);
|
|
13
|
+
await aTimeout(0);
|
|
14
|
+
expect(getComputedStyle(el).width).to.equal('1px');
|
|
15
|
+
el.remove();
|
|
16
|
+
});
|
|
17
|
+
});
|