Skip to content

Commit 54a4266

Browse files
committed
fix: update classadder to work with new svelte component functions
1 parent a07763e commit 54a4266

File tree

2 files changed

+33
-36
lines changed

2 files changed

+33
-36
lines changed

packages/common/src/classadder/ClassAdder.svelte

+16-20
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,6 @@
1414
{...$$restProps}><slot /></svelte:component
1515
>
1616

17-
<script lang="ts" context="module">
18-
import type { ClassAdderInternals } from './ClassAdder.types.js';
19-
import { SmuiElement } from '../index.js';
20-
21-
export const internals: ClassAdderInternals = {
22-
component: SmuiElement as typeof SvelteComponent,
23-
tag: 'div',
24-
class: '',
25-
classMap: {},
26-
contexts: {},
27-
props: {},
28-
};
29-
</script>
30-
3117
<script lang="ts">
3218
import type { SvelteComponent } from 'svelte';
3319
import { onDestroy, getContext, setContext } from 'svelte';
@@ -39,6 +25,8 @@
3925
} from '../smui.types.js';
4026
import type { ActionArray } from '../internal/useActions.js';
4127
import { classMap } from '../internal/classMap.js';
28+
import { SmuiElement } from '../index.js';
29+
import type { ClassAdderInternals } from './ClassAdder.types.js';
4230
4331
type OwnProps = {
4432
use?: ActionArray;
@@ -55,23 +43,31 @@
5543
export let use: ActionArray = [];
5644
let className = '';
5745
export { className as class };
46+
export let _internals: ClassAdderInternals = {
47+
component: SmuiElement as typeof SvelteComponent,
48+
tag: 'div',
49+
class: '',
50+
classMap: {},
51+
contexts: {},
52+
props: {},
53+
};
5854
5955
let element: SvelteComponent;
60-
const smuiClass = internals.class;
56+
const smuiClass = _internals.class;
6157
const smuiClassMap: { [k: string]: any } = {};
6258
const smuiClassUnsubscribes: (() => void)[] = [];
63-
const contexts = internals.contexts;
64-
const props = internals.props;
59+
const contexts = _internals.contexts;
60+
const props = _internals.props;
6561
6662
export let component: typeof SvelteComponent<
6763
Record<string, any>,
6864
Record<string, any>,
6965
Record<string, any>
70-
> = internals.component;
66+
> = _internals.component;
7167
export let tag: keyof SmuiElementPropMap | undefined =
72-
component === SmuiElement ? internals.tag : undefined;
68+
component === SmuiElement ? _internals.tag : undefined;
7369
74-
Object.entries(internals.classMap).forEach(([name, context]) => {
70+
Object.entries(_internals.classMap).forEach(([name, context]) => {
7571
const store = getContext(context) as SvelteStore<any>;
7672
7773
if (store && 'subscribe' in store) {
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
import type { SvelteComponent } from 'svelte';
22

33
import type { SmuiEveryElement } from '../smui.types.js';
4+
import { SmuiElement } from '../index.js';
45
import type { ClassAdderInternals } from './ClassAdder.types.js';
5-
// @ts-ignore: Internals is exported... argh.
6-
import ClassAdder, { internals } from './ClassAdder.svelte';
7-
8-
const defaults = { ...internals };
6+
import ClassAdder from './ClassAdder.svelte';
97

108
export function classAdderBuilder<
119
T extends SmuiEveryElement = 'div',
1210
C extends typeof SvelteComponent = typeof SvelteComponent,
13-
>(props: Partial<ClassAdderInternals<T, C>>): C {
14-
return new Proxy(ClassAdder, {
15-
construct: function (target, args) {
16-
Object.assign(internals, defaults, props);
17-
// @ts-ignore: Need spread arg.
18-
return new target(...args);
19-
},
20-
get: function (target, prop) {
21-
Object.assign(internals, defaults, props);
22-
return (target as any)[prop];
23-
},
24-
}) as unknown as C;
11+
>(internals: Partial<ClassAdderInternals<T, C>>): C {
12+
return function (anchor: any, props: any) {
13+
return ClassAdder(anchor, {
14+
...props,
15+
_internals: {
16+
component: SmuiElement as typeof SvelteComponent,
17+
tag: 'div',
18+
class: '',
19+
classMap: {},
20+
contexts: {},
21+
props: {},
22+
...internals,
23+
},
24+
});
25+
} as unknown as C;
2526
}

0 commit comments

Comments
 (0)