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..d6c280ff 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,23 @@ "directory": "components/language-chooser/svelte/language-chooser-svelte-daisyui" }, "type": "module", - "main": "./index.js", - "types": "./index.d.ts", + "svelte": "./index.ts", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "svelte": "./index.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "files": [ + "dist", + "src/lib", + "index.ts" + ], "scripts": { "dev": "vite --open", "typecheck": "tsc", 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..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,18 +28,49 @@ 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; 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(); @@ -68,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; + }
Select a script: