From 48f0edfee697ef11ffcf3e501c5556e4641647b7 Mon Sep 17 00:00:00 2001 From: Chris Hubbard Date: Fri, 13 Mar 2026 15:03:20 -0400 Subject: [PATCH 1/5] Convert to Svelte source package --- .../language-chooser-svelte-daisyui/package.json | 16 +++++++++++++++- .../vite.config.ts | 3 +++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json b/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json index ce34bb91..cbbf4e51 100644 --- a/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json +++ b/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json @@ -7,8 +7,22 @@ "directory": "components/language-chooser/svelte/language-chooser-svelte-daisyui" }, "type": "module", - "main": "./index.js", + "svelte": "./index.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", "types": "./index.d.ts", + "exports": { + ".": { + "svelte": "./index.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "files": [ + "dist", + "src", + "index.ts" + ], "scripts": { "dev": "vite --open", "typecheck": "tsc", diff --git a/components/language-chooser/svelte/language-chooser-svelte-daisyui/vite.config.ts b/components/language-chooser/svelte/language-chooser-svelte-daisyui/vite.config.ts index 0e08f41a..2c583258 100644 --- a/components/language-chooser/svelte/language-chooser-svelte-daisyui/vite.config.ts +++ b/components/language-chooser/svelte/language-chooser-svelte-daisyui/vite.config.ts @@ -38,5 +38,8 @@ export default defineConfig({ fileName: "index", formats: ["es", "cjs"], }, + rollupOptions: { + external: ["svelte", /^svelte\//], + }, }, }); From 9ce08f722b64dd1056c9424c3b2420395cdc8da4 Mon Sep 17 00:00:00 2001 From: Chris Hubbard Date: Fri, 13 Mar 2026 15:05:57 -0400 Subject: [PATCH 2/5] Make SSR-safe packaging --- .../language-chooser-svelte-daisyui/package.json | 2 +- .../src/lib/LanguageChooser.svelte | 8 +++++++- .../tsconfig.lib.json | 12 ++++++------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json b/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json index cbbf4e51..ab38c257 100644 --- a/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json +++ b/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json @@ -20,7 +20,7 @@ }, "files": [ "dist", - "src", + "src/lib", "index.ts" ], "scripts": { diff --git a/components/language-chooser/svelte/language-chooser-svelte-daisyui/src/lib/LanguageChooser.svelte b/components/language-chooser/svelte/language-chooser-svelte-daisyui/src/lib/LanguageChooser.svelte index 7d310fcd..6d107a00 100644 --- a/components/language-chooser/svelte/language-chooser-svelte-daisyui/src/lib/LanguageChooser.svelte +++ b/components/language-chooser/svelte/language-chooser-svelte-daisyui/src/lib/LanguageChooser.svelte @@ -34,12 +34,18 @@ let scrollContainer: HTMLElement; viewModel.promptForCustomTag = (_default?: string) => { + if (typeof window === "undefined") { + return; + } + const tag = window.prompt( "If this user interface is not offering you a language tag that you know is valid ISO 639 code, you can enter it here:", _default ); if (tag && !isValidBcp47Tag(tag)) { - alert(`This is not in a valid IETF BCP 47 format: ${tag}`); + if (typeof window !== "undefined") { + window.alert(`This is not in a valid IETF BCP 47 format: ${tag}`); + } } else if (tag) { viewModel.customLanguageTag = tag; closeModal(); diff --git a/components/language-chooser/svelte/language-chooser-svelte-daisyui/tsconfig.lib.json b/components/language-chooser/svelte/language-chooser-svelte-daisyui/tsconfig.lib.json index 14a7a858..a5ff27aa 100644 --- a/components/language-chooser/svelte/language-chooser-svelte-daisyui/tsconfig.lib.json +++ b/components/language-chooser/svelte/language-chooser-svelte-daisyui/tsconfig.lib.json @@ -12,6 +12,9 @@ "skipLibCheck": true }, "exclude": [ + "src/main.ts", + "src/App.svelte", + "src/app.css", "langtagProcessing.ts", "**/*.spec.ts", "**/*.test.ts", @@ -23,11 +26,8 @@ "**/*.test.jsx" ], "include": [ - "./**/*.js", - "./**/*.jsx", - "./**/*.ts", - "./**/*.tsx", - "./**/*.svelte", - "../index.ts" + "src/lib/**/*.ts", + "src/lib/**/*.svelte", + "index.ts" ] } From 51e92dce62d60981b8405bd8a44e43d9e534e16b Mon Sep 17 00:00:00 2001 From: Chris Hubbard Date: Fri, 13 Mar 2026 17:16:29 -0400 Subject: [PATCH 3/5] fix(language-chooser-svelte-daisyui): add types for client-side --- .../svelte/language-chooser-svelte-daisyui/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json b/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json index ab38c257..d6c280ff 100644 --- a/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json +++ b/components/language-chooser/svelte/language-chooser-svelte-daisyui/package.json @@ -10,9 +10,10 @@ "svelte": "./index.ts", "main": "./dist/index.cjs", "module": "./dist/index.js", - "types": "./index.d.ts", + "types": "./dist/index.d.ts", "exports": { ".": { + "types": "./dist/index.d.ts", "svelte": "./index.ts", "import": "./dist/index.js", "require": "./dist/index.cjs" From 0e560db87349d5495940d5ec912f455a719257ba Mon Sep 17 00:00:00 2001 From: Chris Hubbard Date: Fri, 13 Mar 2026 17:17:15 -0400 Subject: [PATCH 4/5] fix(language-chooser-svelte-daisyui): make SSR-safe --- .../src/lib/LanguageChooser.svelte | 49 ++++++++++++++++--- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/components/language-chooser/svelte/language-chooser-svelte-daisyui/src/lib/LanguageChooser.svelte b/components/language-chooser/svelte/language-chooser-svelte-daisyui/src/lib/LanguageChooser.svelte index 6d107a00..b0f75657 100644 --- a/components/language-chooser/svelte/language-chooser-svelte-daisyui/src/lib/LanguageChooser.svelte +++ b/components/language-chooser/svelte/language-chooser-svelte-daisyui/src/lib/LanguageChooser.svelte @@ -28,7 +28,32 @@ customDetails: viewModel.customizations, }); - let languageTag = $derived(createTagFromOrthography(orthography)); + function safeCreateTagFromOrthography( + maybeOrthography: IOrthography + ): string | undefined { + const language = maybeOrthography?.language; + + // During SSR/initial render, selectedLanguage can be partially populated. + // createTagFromOrthography expects language.scripts to be an array. + if (!language || !Array.isArray(language.scripts)) { + return undefined; + } + + try { + return createTagFromOrthography(maybeOrthography); + } catch { + return undefined; + } + } + + let languageTag = $derived(safeCreateTagFromOrthography(orthography)); + + let listedLanguages = $derived( + Array.isArray(viewModel.listedLanguages) ? viewModel.listedLanguages : [] + ); + let listedScripts = $derived( + Array.isArray(viewModel.listedScripts) ? viewModel.listedScripts : [] + ); let closeModal = $state(() => {}); let scrollContainer: HTMLElement; @@ -74,6 +99,14 @@ behavior: "smooth", }); } + + function onSearchInput(event: Event) { + viewModel.searchString = (event.currentTarget as HTMLInputElement).value; + } + + function onDisplayNameInput(event: Event) { + viewModel.displayName = (event.currentTarget as HTMLInputElement).value; + }
@@ -89,13 +122,14 @@
-
- {#each viewModel.listedLanguages +
+ {#each listedLanguages .slice(0, 100) .map(svelteViewModel) as lang} - {#if lang.isSelected && viewModel.listedScripts.length > 0} + {#if lang.isSelected && listedScripts.length > 0}

Select a script:

- {#each viewModel.listedScripts.map(svelteViewModel) as script} + {#each listedScripts.map(svelteViewModel) as script} {/each}
@@ -155,7 +189,8 @@ >
From eee3c0b35c25abb3169fb0ba18fc2ef21080715d Mon Sep 17 00:00:00 2001 From: Chris Hubbard Date: Fri, 13 Mar 2026 17:34:35 -0400 Subject: [PATCH 5/5] fix(language-chooser-svelte-daisyui): correct rollupOptions --- .../language-chooser-svelte-daisyui/vite.config.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/components/language-chooser/svelte/language-chooser-svelte-daisyui/vite.config.ts b/components/language-chooser/svelte/language-chooser-svelte-daisyui/vite.config.ts index 2c583258..9bb79a8e 100644 --- a/components/language-chooser/svelte/language-chooser-svelte-daisyui/vite.config.ts +++ b/components/language-chooser/svelte/language-chooser-svelte-daisyui/vite.config.ts @@ -39,7 +39,14 @@ export default defineConfig({ formats: ["es", "cjs"], }, rollupOptions: { - external: ["svelte", /^svelte\//], + external: [ + "svelte", + /^svelte\//, + "@ethnolib/find-language", + "@ethnolib/language-chooser-controller", + "@ethnolib/state-management-svelte", + /^@ethnolib\//, + ], }, }, });