Skip to content

Commit 31169dc

Browse files
committed
fix(signals): preserve composable toggle handlers
1 parent 5b0849d commit 31169dc

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

packages/stx/src/signals.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1965,7 +1965,7 @@ catch (e) {
19651965
19661966
function expressionUsesSignalMethod(expression, name) {
19671967
var escapedName = name.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');
1968-
return new RegExp('(?:^|[^\\\\w$])' + escapedName + '\\\\s*\\\\.\\\\s*(?:set|update|subscribe)\\\\s*\\\\(').test(expression);
1968+
return new RegExp('(?:^|[^\\\\w$])' + escapedName + '\\\\s*\\\\.\\\\s*(?:set|update|subscribe|toggle)\\\\s*\\\\(').test(expression);
19691969
}
19701970
19711971
function expressionUsesSignalValue(expression, name) {

packages/stx/test/signals/signal-api-event.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ describe('signal API event handlers', () => {
3232
expect(open()).toBe(true)
3333
})
3434

35+
it('keeps a signal raw when an inline handler calls a composable toggle method', async () => {
36+
const dark = window.stx.state(false)
37+
dark.toggle = () => dark.set(!dark())
38+
window.__stx_setup_signal_toggle = () => ({ dark })
39+
40+
document.body.innerHTML = `
41+
<main data-stx="__stx_setup_signal_toggle">
42+
<button type="button">Toggle theme</button>
43+
</main>
44+
`
45+
document.querySelector('button').setAttribute('@click', 'dark.toggle()')
46+
shimAttributes(document.body)
47+
document.dispatchEvent(new window.Event('DOMContentLoaded'))
48+
await new Promise(resolve => setTimeout(resolve, 20))
49+
50+
document.querySelector('button').dispatchEvent(new window.Event('click', { bubbles: true }))
51+
expect(dark()).toBe(true)
52+
})
53+
3554
it('keeps a signal raw when an inline handler assigns its value property', async () => {
3655
const active = window.stx.state(false)
3756
window.__stx_setup_signal_value = () => ({ active })

0 commit comments

Comments
 (0)