Svelte: fix 3 svelte-check warnings (non-IDAA) + Playwright test type error

- ae_comp__badge_print_controls: select_ref_badge_type declared as $state()
  so Svelte 5 tracks DOM ref assignment correctly (was plain let).
- launcher_cfg_section: <svelte:component this={icon}> replaced with
  let Icon = $derived(icon) + <Icon /> — svelte_component_deprecated fix.
- launcher_file_cont: same svelte_component_deprecated fix for FileIcon.
- badge_print_layout.test.ts: inject_idb signature changed from (badge, template)
  to ({ badge, template }) — page.evaluate() passes exactly one argument;
  all three call sites updated to pass { badge: mock_badge, template: mock_template }.
This commit is contained in:
Scott Idem
2026-03-16 13:51:01 -04:00
parent 6ca2314472
commit 1291b225c6
4 changed files with 12 additions and 9 deletions

View File

@@ -293,7 +293,7 @@
let input_ref_location: HTMLInputElement | undefined;
let input_ref_pronouns: HTMLInputElement | undefined;
let input_ref_allow_tracking: HTMLInputElement | undefined;
let select_ref_badge_type: HTMLSelectElement | undefined;
let select_ref_badge_type: HTMLSelectElement | undefined = $state();
$effect(() => {
const field = active_field;

View File

@@ -26,6 +26,9 @@
on_toggle
}: Props = $props();
// Uppercase alias required: Svelte 5 treats lowercase tags as HTML elements.
let Icon = $derived(icon);
function toggle_expand() {
if (state === 'collapsed') {
state = 'auto';
@@ -72,8 +75,7 @@
onclick={toggle_expand}
>
<div class="flex items-center gap-3">
<svelte:component
this={icon}
<Icon
size="1em"
class="w-5 text-center opacity-70 {state === 'auto'
? 'text-primary-500'

View File

@@ -309,7 +309,7 @@
</span>
{:then result}
{@const FileIcon = ae_util.file_extension_icon_lucide(event_file_obj.extension)}
<svelte:component this={FileIcon} size="1em" class="inline mx-0.5" />
<FileIcon size="1em" class="inline mx-0.5" />
{event_file_obj.extension}
{#if result === null || result === false}
<span class="text-error-500"

View File

@@ -58,8 +58,9 @@ const mock_template = {
/** Injects records into ae_events_db IndexedDB tables via raw IDB API.
* Must be called from page.evaluate() after the page has navigated (Dexie
* schema is already initialised from the app's first open). */
async function inject_idb(badge: object, template: object): Promise<void> {
* schema is already initialised from the app's first open).
* Single-argument form required: page.evaluate() passes exactly one arg. */
async function inject_idb({ badge, template }: { badge: object; template: object }): Promise<void> {
const db = await new Promise<IDBDatabase>((resolve, reject) => {
const req = indexedDB.open('ae_events_db');
req.onsuccess = () => resolve(req.result as IDBDatabase);
@@ -120,7 +121,7 @@ test.describe('Badge Print Page — print layout centering', () => {
await page.waitForLoadState('domcontentloaded');
// Inject badge + template directly into IndexedDB so LiveQuery fires
await page.evaluate(inject_idb, [mock_badge, mock_template] as any);
await page.evaluate(inject_idb, { badge: mock_badge, template: mock_template });
// Wait for LiveQuery to render the badge wrapper
await page.waitForSelector('.event_badge_wrapper', { timeout: 8000 });
@@ -154,7 +155,7 @@ test.describe('Badge Print Page — print layout centering', () => {
await page.goto(`/events/${event_id}/badges/${badge_id}/print`);
await page.waitForLoadState('domcontentloaded');
await page.evaluate(inject_idb, [mock_badge, mock_template] as any);
await page.evaluate(inject_idb, { badge: mock_badge, template: mock_template });
await page.waitForSelector('.event_badge_wrapper', { timeout: 8000 });
await page.emulateMedia({ media: 'print' });
@@ -199,7 +200,7 @@ test.describe('Badge Print Page — print layout centering', () => {
await page.goto(`/events/${event_id}/badges/${badge_id}/print`);
await page.waitForLoadState('domcontentloaded');
await page.evaluate(inject_idb, [mock_badge, mock_template] as any);
await page.evaluate(inject_idb, { badge: mock_badge, template: mock_template });
await page.waitForSelector('.event_badge_wrapper', { timeout: 8000 });
await page.emulateMedia({ media: 'print' });