Skip to content

Commit ccd8517

Browse files
committed
Allow using the modifier on SVG and math elements
1 parent 26bf164 commit ccd8517

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

ember-style-modifier/src/modifiers/style.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ function compileStyles(
4444
}
4545

4646
export interface StyleModifierSignature {
47-
Element: HTMLElement;
47+
// TODO: use `ElementCSSInlineStyle & Element` once TypeScript marks `<math>` elements as `MathMLElement`
48+
Element: HTMLElement | SVGElement | MathMLElement;
4849
Args: {
4950
Positional: CSSStyles[];
5051
Named: CSSStyles;
@@ -54,7 +55,10 @@ export interface StyleModifierSignature {
5455
export default class StyleModifier extends Modifier<StyleModifierSignature> {
5556
existingStyles: Set<string> = new Set();
5657

57-
setStyles(element: HTMLElement, newStyles: [string, string][]) {
58+
setStyles(
59+
element: StyleModifierSignature['Element'],
60+
newStyles: [string, string][],
61+
) {
5862
const { existingStyles } = this;
5963
const rulesToRemove: Set<string> = new Set(existingStyles);
6064

@@ -92,7 +96,11 @@ export default class StyleModifier extends Modifier<StyleModifierSignature> {
9296
rulesToRemove.forEach((rule) => element.style.removeProperty(rule));
9397
}
9498

95-
modify(element: HTMLElement, positional: [CSSStyles] | [], named: CSSStyles) {
99+
modify(
100+
element: StyleModifierSignature['Element'],
101+
positional: [CSSStyles] | [],
102+
named: CSSStyles,
103+
) {
96104
this.setStyles(element, compileStyles(positional, named));
97105
}
98106
}

test-app/tests/integration/modifiers/style-test.ts

+12
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@ module('Integration | Modifiers | style', function (hooks) {
6060
assert.dom('p').hasStyle({ fontSize: '6px' });
6161
});
6262

63+
test('it supports usage on SVG elements', async function (assert) {
64+
await render(hbs`<svg {{style display="none"}}></svg>`);
65+
66+
assert.dom('svg').hasStyle({ display: 'none' });
67+
});
68+
69+
test('it supports usage on math elements', async function (assert) {
70+
await render(hbs`<math {{style display="none"}}></math>`);
71+
72+
assert.dom('math').hasStyle({ display: 'none' });
73+
});
74+
6375
{
6476
interface Context extends TestContext {
6577
// eslint-disable-next-line @typescript-eslint/ban-types

0 commit comments

Comments
 (0)