fix: guard change handler since toggle is fired from programatic changes to open

This commit is contained in:
Michael Rawlings 2024-12-16 12:11:56 -05:00 committed by Dylan Piercey
parent 9421a60e95
commit da44e24ef4
3 changed files with 11 additions and 12 deletions

View File

@ -7,8 +7,8 @@
{
"name": "*",
"total": {
"min": 18048,
"brotli": 6515
"min": 18045,
"brotli": 6518
}
},
{

View File

@ -1,4 +1,4 @@
// size: 18048 (min) 6515 (brotli)
// size: 18045 (min) 6518 (brotli)
var empty = [],
rest = Symbol();
function attrTag(attrs2) {
@ -742,14 +742,16 @@ function controllable_detailsOrDialog_open(
(scope[nodeAccessor].open = normalizeBoolProp(open));
}
function controllable_detailsOrDialog_open_effect(scope, nodeAccessor) {
let el = scope[nodeAccessor];
let el = scope[nodeAccessor],
hasChanged = () => el.open !== scope[nodeAccessor + ":"];
syncControllable(
el,
"DIALOG" === el.tagName ? "close" : "toggle",
() => scope[nodeAccessor + ";"] && el.open !== scope[nodeAccessor + ":"],
hasChanged,
() => {
let openChange = scope[nodeAccessor + ";"];
openChange &&
hasChanged() &&
((scope[nodeAccessor + "="] = 6),
openChange(el.open),
run(),

View File

@ -264,20 +264,17 @@ export function controllable_detailsOrDialog_open_effect(
nodeAccessor: Accessor,
) {
const el = scope[nodeAccessor] as HTMLDetailsElement;
const hasChanged = () =>
el.open !== scope[nodeAccessor + AccessorChar.ControlledValue];
syncControllable(
el,
el.tagName === "DIALOG" ? "close" : "toggle",
() => {
return (
scope[nodeAccessor + AccessorChar.ControlledHandler] &&
el.open !== scope[nodeAccessor + AccessorChar.ControlledValue]
);
},
hasChanged,
() => {
const openChange = scope[
nodeAccessor + AccessorChar.ControlledHandler
] as undefined | ((value: unknown) => unknown);
if (openChange) {
if (openChange && hasChanged()) {
scope[nodeAccessor + AccessorChar.ControlledType] =
ControlledType.Pending;
openChange(el.open);