feat: Presets als Stapel, Gruppen-Presets und clear_overrides im Composer

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Jan-Niclas Loosen
2026-10-18 16:48:58 +02:00
co-authored by Claude Sonnet 5.5
parent fafa140546
commit be6ca5bee0
13 changed files with 549 additions and 74 deletions
@@ -253,4 +253,17 @@ final class ValueCleanerTest extends TestCase
self::assertSame('x', ComposeFixture::cleaner()->clean('divi/lottie', 'lottie.advanced.width', 'x'));
self::assertSame('x', ComposeFixture::cleaner()->clean('divi/lottie', 'lottie.innerContentish', 'x'));
}
/** Design-system ids (preset ids) are no client text, but they pass the choke point unchanged (ruling S13). */
public function testKeepsIdAcceptsPlainIdsAndRefusesEverythingTheCleanerChanges(): void
{
$cleaner = ComposeFixture::cleaner();
self::assertTrue($cleaner->keepsId('3gbmxlurey'));
self::assertTrue($cleaner->keepsId('a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d'));
self::assertFalse($cleaner->keepsId('<b>p</b>'), 'tags would be stripped');
self::assertFalse($cleaner->keepsId('p%41x'), 'octets would be stripped');
self::assertFalse($cleaner->keepsId("p\x01"), 'control characters would be stripped');
self::assertFalse($cleaner->keepsId(ComposeFixture::REFERENCE_ALT), 'an id is never a $variable reference');
}
}