@mantou/gem 2.3.0 → 2.3.1
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/dialog.d.ts.map +1 -1
- package/elements/base/link.d.ts.map +1 -1
- package/elements/base/link.js +1 -1
- package/elements/base/link.js.map +1 -1
- package/elements/base/modal-factory.d.ts +20 -511
- package/elements/base/modal-factory.d.ts.map +1 -1
- package/elements/base/modal-factory.js +3 -2
- package/elements/base/modal-factory.js.map +1 -1
- package/elements/base/reflect.d.ts +7 -4
- package/elements/base/reflect.d.ts.map +1 -1
- package/elements/base/reflect.js +30 -4
- package/elements/base/reflect.js.map +1 -1
- package/elements/base/route.d.ts +3 -6
- package/elements/base/route.d.ts.map +1 -1
- package/elements/base/route.js +1 -1
- package/elements/base/route.js.map +1 -1
- package/elements/base/title.d.ts.map +1 -1
- package/elements/base/title.js +1 -1
- package/elements/base/title.js.map +1 -1
- package/helper/hmr.js.map +1 -1
- package/helper/i18n.d.ts +21 -17
- package/helper/i18n.d.ts.map +1 -1
- package/helper/i18n.js +172 -116
- package/helper/i18n.js.map +1 -1
- package/helper/logger.d.ts.map +1 -1
- package/helper/mediaquery.d.ts.map +1 -1
- package/helper/request.d.ts +7 -1
- package/helper/request.d.ts.map +1 -1
- package/helper/request.js.map +1 -1
- package/helper/theme.d.ts.map +1 -1
- package/helper/theme.js.map +1 -1
- package/lib/decorators.d.ts +3 -2
- package/lib/decorators.d.ts.map +1 -1
- package/lib/decorators.js +2 -1
- package/lib/decorators.js.map +1 -1
- package/lib/directive.d.ts.map +1 -1
- package/lib/history.d.ts +46 -42
- package/lib/history.d.ts.map +1 -1
- package/lib/lit-html.d.ts.map +1 -1
- package/lib/lit-html.js.map +1 -1
- package/lib/reactive.d.ts +1 -4
- package/lib/reactive.d.ts.map +1 -1
- package/lib/reactive.js +1 -3
- package/lib/reactive.js.map +1 -1
- package/lib/repeat.d.ts +1 -1
- package/lib/repeat.d.ts.map +1 -1
- package/lib/repeat.js.map +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +5 -5
- package/src/elements/base/modal-factory.ts +22 -6
- package/src/elements/base/reflect.ts +30 -4
- package/src/elements/base/route.ts +2 -7
- package/src/helper/i18n.ts +184 -127
- package/src/lib/decorators.ts +2 -1
- package/src/lib/reactive.ts +1 -6
- package/src/lib/version.ts +1 -1
- package/src/test/elements/link.test.ts +12 -2
- package/src/test/elements/reflect.test.ts +20 -1
- package/src/test/elements/unsafe.test.ts +22 -0
- package/src/test/gem-element/advance.test.ts +87 -0
- package/src/test/utils.test.ts +4 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { GemUnsafeElement } from '../../elements/unsafe';
|
|
2
|
+
import { css, html } from '../../lib/element';
|
|
3
|
+
import { expect, fixture, nextFrame } from '../utils';
|
|
4
|
+
|
|
5
|
+
import '../../elements/unsafe';
|
|
6
|
+
|
|
7
|
+
describe('GemUnsafeElement', () => {
|
|
8
|
+
it('渲染 HTML 字符串,应用样式', async () => {
|
|
9
|
+
const ele: GemUnsafeElement = await fixture(
|
|
10
|
+
html`<gem-unsafe html="<p>a</p>" .styles=${css`p { color: rgb(255, 0, 0); }`}></gem-unsafe>`,
|
|
11
|
+
);
|
|
12
|
+
const color = () => getComputedStyle(ele.shadowRoot!.querySelector('p')!).color;
|
|
13
|
+
expect(ele.shadowRoot!.querySelector('p')!.textContent).to.equal('a');
|
|
14
|
+
expect(color()).to.equal('rgb(255, 0, 0)');
|
|
15
|
+
ele.styles = 'p { color: rgb(0, 0, 255); }';
|
|
16
|
+
await nextFrame();
|
|
17
|
+
expect(color()).to.equal('rgb(0, 0, 255)');
|
|
18
|
+
ele.html = '<b>b</b>';
|
|
19
|
+
await nextFrame();
|
|
20
|
+
expect(ele.shadowRoot!.innerHTML).to.equal('<b>b</b>');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
attribute,
|
|
14
14
|
connectStore,
|
|
15
15
|
customElement,
|
|
16
|
+
effect,
|
|
16
17
|
emitter,
|
|
17
18
|
mounted,
|
|
18
19
|
property,
|
|
@@ -85,6 +86,92 @@ describe('没有 Shadow DOM 的 gem 元素', () => {
|
|
|
85
86
|
});
|
|
86
87
|
});
|
|
87
88
|
|
|
89
|
+
const scopeStyle = css`
|
|
90
|
+
p {
|
|
91
|
+
text-decoration: underline;
|
|
92
|
+
}
|
|
93
|
+
`;
|
|
94
|
+
|
|
95
|
+
@customElement('scope-child-demo')
|
|
96
|
+
class _ScopeChildDemo extends GemElement {
|
|
97
|
+
render() {
|
|
98
|
+
return html`<p>child</p>`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@customElement('scope-gem-demo')
|
|
103
|
+
@adoptedStyle(scopeStyle)
|
|
104
|
+
class ScopeGemDemo extends GemElement {
|
|
105
|
+
render() {
|
|
106
|
+
return html`<p>own</p><article><p>nested</p></article><scope-child-demo></scope-child-demo>`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@customElement('closed-gem-demo')
|
|
111
|
+
@adoptedStyle(css`
|
|
112
|
+
div {
|
|
113
|
+
color: rgb(255, 0, 0);
|
|
114
|
+
}
|
|
115
|
+
`)
|
|
116
|
+
@shadow({ mode: 'closed' })
|
|
117
|
+
class ClosedGemDemo extends GemElement {
|
|
118
|
+
render() {
|
|
119
|
+
return html`<div>closed</div>`;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
describe('元素样式的作用域', () => {
|
|
124
|
+
it('Light DOM 的样式不影响有模版的子元素', async () => {
|
|
125
|
+
const el: ScopeGemDemo = await fixture(html`<scope-gem-demo></scope-gem-demo>`);
|
|
126
|
+
const decoration = (selector: string) => getComputedStyle(el.querySelector(selector)!).textDecorationLine;
|
|
127
|
+
expect(decoration(':scope > p')).to.equal('underline');
|
|
128
|
+
expect(decoration('article > p')).to.equal('underline');
|
|
129
|
+
expect(decoration('scope-child-demo > p')).to.equal('none');
|
|
130
|
+
});
|
|
131
|
+
it('closed Shadow DOM', async () => {
|
|
132
|
+
const el: ClosedGemDemo = await fixture(html`<closed-gem-demo></closed-gem-demo>`);
|
|
133
|
+
expect(el.shadowRoot).to.equal(null);
|
|
134
|
+
const div = el.internals.shadowRoot!.querySelector('div')!;
|
|
135
|
+
expect(getComputedStyle(div).color).to.equal('rgb(255, 0, 0)');
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
@customElement('effect-ref-demo')
|
|
140
|
+
class EffectRefDemo extends GemElement {
|
|
141
|
+
#state = createState({ hidden: false });
|
|
142
|
+
ref = createRef<HTMLTextAreaElement>();
|
|
143
|
+
values: (HTMLTextAreaElement | undefined)[] = [];
|
|
144
|
+
|
|
145
|
+
@effect((i) => [i.ref.value])
|
|
146
|
+
#observe = ([ele]: [HTMLTextAreaElement | undefined]) => {
|
|
147
|
+
this.values.push(ele);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
toggle = () => this.#state({ hidden: !this.#state.hidden });
|
|
151
|
+
|
|
152
|
+
render() {
|
|
153
|
+
return this.#state.hidden ? null : html`<textarea ${this.ref}></textarea>`;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
describe('effect 依赖 ref', () => {
|
|
158
|
+
it('元素重新创建时执行', async () => {
|
|
159
|
+
const el: EffectRefDemo = await fixture(html`<effect-ref-demo></effect-ref-demo>`);
|
|
160
|
+
const [first] = el.values;
|
|
161
|
+
expect(first).to.be.instanceOf(HTMLTextAreaElement);
|
|
162
|
+
// 元素移除时 ref 不会清空,保留最后的元素
|
|
163
|
+
el.toggle();
|
|
164
|
+
await nextFrame();
|
|
165
|
+
expect(el.ref.value).to.equal(first);
|
|
166
|
+
expect(el.values).to.eql([first]);
|
|
167
|
+
el.toggle();
|
|
168
|
+
await nextFrame();
|
|
169
|
+
expect(el.values.length).to.equal(2);
|
|
170
|
+
expect(el.values[1]).to.be.instanceOf(HTMLTextAreaElement);
|
|
171
|
+
expect(el.values[1]).not.to.equal(first);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
|
|
88
175
|
class LifecycleGemElement extends GemElement {
|
|
89
176
|
@attribute appTitle = 'default';
|
|
90
177
|
@attribute appTitle2 = 'default2';
|
package/src/test/utils.test.ts
CHANGED
|
@@ -145,6 +145,10 @@ describe('utils 测试', () => {
|
|
|
145
145
|
expect(rules.item(1).style.background).to.equal('red');
|
|
146
146
|
expect(rules.item(1).cssRules.item(0).selectorText).to.equal('&:hover *');
|
|
147
147
|
expect(rules.item(1).cssRules.item(0).style.background).to.equal('blue');
|
|
148
|
+
// 有 `-` 的 key 保留原样,可以用来扩展其他样式表的类名
|
|
149
|
+
const extended = css({ [cssSheet.scroll]: styled`font-weight: bold;` });
|
|
150
|
+
expect(extended[cssSheet.scroll]).to.equal(cssSheet.scroll);
|
|
151
|
+
expect(extended[SheetToken].getStyle().cssRules.item(0).selectorText).to.equal(`.${cssSheet.scroll}`);
|
|
148
152
|
});
|
|
149
153
|
it('styleMap/classMap/exportPartsMap', () => {
|
|
150
154
|
expect(styleMap({ '--x': '1px', fontSize: '14px', content: `'*'` })).to.equal(
|