From 9f8b94e45fbc9f3fcd8ed3ff507cd1ed143bbb91 Mon Sep 17 00:00:00 2001 From: David Holmlund Date: Thu, 17 Apr 2025 14:56:57 +0200 Subject: [PATCH] fix: improve international character handling in prompt commands --- .../workspace/Prompts/PromptEditor.svelte | 15 ++++++++++++--- src/lib/utils/index.ts | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/lib/components/workspace/Prompts/PromptEditor.svelte b/src/lib/components/workspace/Prompts/PromptEditor.svelte index 6a29d03b2..624bb551e 100644 --- a/src/lib/components/workspace/Prompts/PromptEditor.svelte +++ b/src/lib/components/workspace/Prompts/PromptEditor.svelte @@ -8,6 +8,7 @@ import LockClosed from '$lib/components/icons/LockClosed.svelte'; import AccessControlModal from '../common/AccessControlModal.svelte'; import { user } from '$lib/stores'; + import { slugify } from '$lib/utils'; export let onSubmit: Function; export let edit = false; @@ -25,8 +26,15 @@ let showAccessControlModal = false; - $: if (!edit) { - command = title !== '' ? `${title.replace(/\s+/g, '-').toLowerCase()}` : ''; + let hasManualEdit = false; + + $: if (!edit && !hasManualEdit) { + command = title !== '' ? slugify(title) : ''; + } + + // Track manual edits + function handleCommandInput(e: Event) { + hasManualEdit = true; } const submitHandler = async () => { @@ -64,7 +72,7 @@ command = prompt.command.at(0) === '/' ? prompt.command.slice(1) : prompt.command; content = prompt.content; - accessControl = prompt?.access_control ?? null; + accessControl = prompt?.access_control ?? {}; } }); @@ -125,6 +133,7 @@ class=" w-full bg-transparent outline-hidden" placeholder={$i18n.t('Command')} bind:value={command} + on:input={handleCommandInput} required disabled={edit} /> diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index 022a901c1..83fd8d0cc 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -1298,3 +1298,17 @@ export const convertOpenApiToToolPayload = (openApiSpec) => { return toolPayload; }; + +export const slugify = (str: string): string => { + return str + // 1. Normalize: separate accented letters into base + combining marks + .normalize("NFD") + // 2. Remove all combining marks (the accents) + .replace(/[\u0300-\u036f]/g, "") + // 3. Replace any sequence of whitespace with a single hyphen + .replace(/\s+/g, "-") + // 4. Remove all characters except alphanumeric characters and hyphens + .replace(/[^a-zA-Z0-9-]/g, "") + // 5. Convert to lowercase + .toLowerCase(); +};