From 2a7e39ae66433fca6520f07d799366baa52770b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20Vassb=C3=B8?= Date: Fri, 25 Oct 2024 15:01:04 +0200 Subject: [PATCH] 1.3.0-beta.3 (#929) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ Tweaked group count style - Fixed scripture changing in some cases - Fixed some issues with split in two - Split in two will also split text content - Fixed global group drop added to wrong index if dropped at the end - UI tweaks - Updated languages * 🔍 Updated show search - Textbox focused on edit page open - CTRL+ALT+I to import directly from clipboard - Fixed disabled checkbox not copied to item clipboard - Fixed stage slide item auto size - Fixed stage media thumbnails not always loading - UI tweaks - Version update --- package.json | 2 +- public/lang/en_GB.json | 50 +++++++- public/lang/en_ZM.json | 50 +++++++- public/lang/zh_CN.json | 16 +-- src/frontend/components/context/menuClick.ts | 10 +- .../components/drawer/audio/Metronome.svelte | 23 ++-- .../drawer/audio/MetronomeInputs.svelte | 3 +- .../components/drawer/bible/Scripture.svelte | 6 + .../components/drawer/info/AudioInfo.svelte | 4 +- .../components/drawer/pages/Shows.svelte | 16 ++- .../edit/editors/SlideEditor.svelte | 19 ++- .../components/edit/scripts/itemClipboard.ts | 2 +- .../components/edit/scripts/textStyle.ts | 12 ++ .../components/edit/tools/BoxStyle.svelte | 7 +- src/frontend/components/helpers/clipboard.ts | 11 +- .../components/helpers/dropActions.ts | 2 +- src/frontend/components/helpers/media.ts | 15 ++- src/frontend/components/helpers/show.ts | 5 +- .../components/main/popups/Import.svelte | 15 +-- .../components/main/popups/Unsaved.svelte | 4 +- .../settings/tabs/Connection.svelte | 12 +- src/frontend/components/slide/Slide.svelte | 18 ++- src/frontend/components/slide/Textbox.svelte | 3 +- .../slide/views/SlideProgress.svelte | 4 +- src/frontend/components/stage/Stagebox.svelte | 6 +- .../components/stage/items/SlideText.svelte | 28 ++++- src/frontend/converters/importHelpers.ts | 14 +++ src/frontend/show/slides.ts | 63 +++++++++- src/frontend/utils/language.ts | 5 + src/frontend/utils/languageData.ts | 2 +- src/frontend/utils/receivers.ts | 1 + src/frontend/utils/search.ts | 115 ++++++++++-------- src/frontend/utils/shortcuts.ts | 3 +- src/frontend/utils/stageTalk.ts | 4 +- 34 files changed, 414 insertions(+), 136 deletions(-) diff --git a/package.json b/package.json index 42b08a8e..73a40a2b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "freeshow", - "version": "1.3.0-beta.2", + "version": "1.3.0-beta.3", "private": true, "main": "build/electron/index.js", "description": "Show song lyrics and more for free!", diff --git a/public/lang/en_GB.json b/public/lang/en_GB.json index eb954606..e5e9e552 100644 --- a/public/lang/en_GB.json +++ b/public/lang/en_GB.json @@ -94,15 +94,17 @@ "search_web": "Search for song on the web", "search_results": "Search results", "more_options": "More options", + "auto_groups": "Auto assign groups", "format_new_show": "Format text", - "format_new_show_tip": "Improve text format with auto capitalise, split text, assign groups & more.", - "split_lines": "Numbers of lines", + "format_new_show_tip": "Improve text format with auto capitalise, trim/split text & more.", + "split_lines": "Max lines per slide", "split_lines_tip": "Numbers of lines allowed per slide before auto splitting", "quick_lyrics": "Quick lyrics", "quick_lyrics_tip": "Paste text or enter manually", "quick_lyrics_example_tip": "Enter lyrics or any text here", "quick_lyrics_example_text": "Line", - "empty": "Empty show" + "empty": "Empty show", + "exists": "Found an existing show with the same name" }, "preview": { "_previous_show": "Previous show", @@ -381,6 +383,7 @@ "transition": "Transition", "delete_show": "Delete show", "delete_show_confirmation": "Are you sure you want to delete", + "delete_duplicated_shows": "Delete duplicated shows", "change_name": "Change name on", "choose_screen": "Choose screen", "choose_output": "Choose output type", @@ -431,6 +434,7 @@ "less_than_minute": "in less than a minute.", "less_than_seconds": "in less than {} seconds.", "now": "now!", + "unsupported_video": "Unsupported video!", "no_video_id": "No video ID", "no_name": "No name", "reverting_setting": "Reverting this change in {} seconds, enable again to make the change stay!", @@ -485,7 +489,11 @@ "slide_template": "Slide template", "source": "Source", "artist": "Artist", - "song": "Song" + "song": "Song", + "delete_manual": "Manual check", + "delete_match": "Delete if exact match", + "delete_keep_last_modified": "Delete all except last modified", + "delete_keep_first_created": "Delete all except first created" }, "actions": { "rename": "Rename", @@ -594,7 +602,10 @@ "play_on_midi_tip": "Activate this specific slide when receiving chosen MIDI signal", "send_midi": "Send MIDI signal", "delete_shows_not_indexed": "Delete shows in 'Shows' folder that are not indexed", + "delete_empty_shows": "Delete empty shows", "delete_thumbnail_cache": "Delete thumbnail cache", + "export_usage_log": "Export usage log", + "reset_usage_log": "Reset usage log", "open_log_file": "Open log file", "open_cache_folder": "Open cache folder", "refresh_all_shows": "Get all shows in 'Shows' folder", @@ -644,6 +655,8 @@ "activate_slide_clicked": "Activate on slide click", "activate_video_starting": "Activate when video is starting", "activate_video_ending": "Activate when video is ending", + "activate_audio_starting": "Activate when audio is starting", + "activate_audio_ending": "Activate when audio is ending", "activate_timer_ending": "Activate when timer is ending", "activate_scripture_start": "Activate when scripture is started", "activate_slide_cleared": "Activate when slide is cleared", @@ -719,6 +732,7 @@ "addToProject": "Add to project", "add_to_show": "Add to show", "lockForChanges": "Lock for editing", + "use_as_archive": "Mark as archive", "newCategory": "New category", "changeIcon": "Change icon", "changeGroup": "Change group", @@ -1015,7 +1029,7 @@ "select_display": "Click on the screen where you want to display the output window.", "manual_input_hint": "Can't find the display? Click here to manually change the position.", "manual_drag_hint": "You can also hold ctrl/cmd over an active output window to manually drag it around.", - "allow_main_screen": "Allow output on main screen", + "allow_main_screen": "Allow custom output position & size", "identify_screens": "Identify screens", "new_output": "New output", "normal": "Normal", @@ -1064,7 +1078,7 @@ "show_location": "Show location", "data_location": "Data location", "user_data_location": "Save user settings at 'Data location'", - "popup_before_close": "Always display popup before closing", + "popup_before_close": "Enable close confirmation popup", "disable_hardware_acceleration": "Disable hardware acceleration", "restart_for_change": "You have to restart the program for the change to take effect!", "font": "Font", @@ -1095,6 +1109,7 @@ "restore_started": "Restoring...", "backup_finished": "Backup complete!", "restore_finished": "Restore complete!", + "auto_backup": "Auto backup", "preview_frame_rate": "Preview frame rate", "auto": "Auto", "optimized": "Optimised", @@ -1242,22 +1257,45 @@ "6": "Saturday", "7": "Sunday" }, + "interval": { + "daily": "Daily", + "weekly": "Weekly", + "mothly": "Monthly" + }, "info": { "created": "Created", "modified": "Modified", "used": "Used", "changed": "Changed", + "recently_used": "Recently used", "extension": "File extension", "size": "Size", "slides": "Slides", "words": "Words", "template": "Template", "category": "Category", + "codecs": "Codecs", + "mimeType": "MIME type", "photoUrl": "Photo URL", "likes": "Likes", "artist": "Artist", "artistUrl": "Artist page" }, + "guide_description": { + "start": "This is a short walkthrough of some basic features! (You can skip in the bottom right corner.)", + "project_manage": "Manage all of your projects in one place.", + "project_create": "Create folders to keep it organised, and create new projects.", + "project_list": "After opening a project you get a list of all the items here on the left side, drag & drop from the drawer to add more.", + "drawer": "Find all of your shows, media, overlays, etc. in one place.", + "drawer_shows": "Manage all of your different shows by organising them in different categories. Drag & drop any selected show to move them.", + "create_show_button": "Click this to create a new show (song, presentation, etc.)", + "create_show_popup": "Fill in the main details of the show, you can also auto find lyrics on the web from the name, or paste the lyrics manually.", + "show": "A show is the main presentation, click on any slide to present, and use the arrow keys to navigate. You can also drag & drop media files on a slide to set as background.", + "show_slide": "After a slide is clicked, it will show in the output and you will see a preview on the right, here you'll also find some extra actions like pausing a video.", + "output_clear": "Clear individual output layers, or clear all layers in the output.", + "edit": "Open slide editing with one click at the top.", + "end": "You can always look on the web if you need help with other features." + }, "songbeamer_import": { "options": "Options", "encoding": "Encoding", diff --git a/public/lang/en_ZM.json b/public/lang/en_ZM.json index 1970d380..c1ad9b3a 100644 --- a/public/lang/en_ZM.json +++ b/public/lang/en_ZM.json @@ -94,15 +94,17 @@ "search_web": "Search for song on the web", "search_results": "Search results", "more_options": "More options", + "auto_groups": "Auto assign groups", "format_new_show": "Format text", - "format_new_show_tip": "Improve text format with auto capitalise, split text, assign groups & more.", - "split_lines": "Numbers of lines", + "format_new_show_tip": "Improve text format with auto capitalise, trim/split text & more.", + "split_lines": "Max lines per slide", "split_lines_tip": "Numbers of lines allowed per slide before auto splitting", "quick_lyrics": "Quick lyrics", "quick_lyrics_tip": "Paste text or enter manually", "quick_lyrics_example_tip": "Enter lyrics or any text here", "quick_lyrics_example_text": "Line", - "empty": "Empty show" + "empty": "Empty show", + "exists": "Found an existing show with the same name" }, "preview": { "_previous_show": "Previous show", @@ -381,6 +383,7 @@ "transition": "Transition", "delete_show": "Delete show", "delete_show_confirmation": "Are you sure you want to delete", + "delete_duplicated_shows": "Delete duplicated shows", "change_name": "Change name on", "choose_screen": "Choose screen", "choose_output": "Choose output type", @@ -431,6 +434,7 @@ "less_than_minute": "in less than a minute.", "less_than_seconds": "in less than {} seconds.", "now": "now!", + "unsupported_video": "Unsupported video!", "no_video_id": "No video ID", "no_name": "No name", "reverting_setting": "Reverting this change in {} seconds, enable again to make the change stay!", @@ -485,7 +489,11 @@ "slide_template": "Slide template", "source": "Source", "artist": "Artist", - "song": "Song" + "song": "Song", + "delete_manual": "Manual check", + "delete_match": "Delete if exact match", + "delete_keep_last_modified": "Delete all except last modified", + "delete_keep_first_created": "Delete all except first created" }, "actions": { "rename": "Rename", @@ -594,7 +602,10 @@ "play_on_midi_tip": "Activate this specific slide when receiving chosen MIDI signal", "send_midi": "Send MIDI signal", "delete_shows_not_indexed": "Delete shows in 'Shows' folder that are not indexed", + "delete_empty_shows": "Delete empty shows", "delete_thumbnail_cache": "Delete thumbnail cache", + "export_usage_log": "Export usage log", + "reset_usage_log": "Reset usage log", "open_log_file": "Open log file", "open_cache_folder": "Open cache folder", "refresh_all_shows": "Get all shows in 'Shows' folder", @@ -644,6 +655,8 @@ "activate_slide_clicked": "Activate on slide click", "activate_video_starting": "Activate when video is starting", "activate_video_ending": "Activate when video is ending", + "activate_audio_starting": "Activate when audio is starting", + "activate_audio_ending": "Activate when audio is ending", "activate_timer_ending": "Activate when timer is ending", "activate_scripture_start": "Activate when scripture is started", "activate_slide_cleared": "Activate when slide is cleared", @@ -719,6 +732,7 @@ "addToProject": "Add to project", "add_to_show": "Add to show", "lockForChanges": "Lock for editing", + "use_as_archive": "Mark as archive", "newCategory": "New category", "changeIcon": "Change icon", "changeGroup": "Change group", @@ -1015,7 +1029,7 @@ "select_display": "Click on the screen where you want to display the output window.", "manual_input_hint": "Can't find the display? Click here to manually change the position.", "manual_drag_hint": "You can also hold ctrl/cmd over an active output window to manually drag it around.", - "allow_main_screen": "Allow output on main screen", + "allow_main_screen": "Allow custom output position & size", "identify_screens": "Identify screens", "new_output": "New output", "normal": "Normal", @@ -1064,7 +1078,7 @@ "show_location": "Show location", "data_location": "Data location", "user_data_location": "Save user settings at 'Data location'", - "popup_before_close": "Always display popup before closing", + "popup_before_close": "Enable close confirmation popup", "disable_hardware_acceleration": "Disable hardware acceleration", "restart_for_change": "You have to restart the program for the change to take effect!", "font": "Font", @@ -1095,6 +1109,7 @@ "restore_started": "Restoring...", "backup_finished": "Backup complete!", "restore_finished": "Restore complete!", + "auto_backup": "Auto backup", "preview_frame_rate": "Preview frame rate", "auto": "Auto", "optimized": "Optimised", @@ -1242,22 +1257,45 @@ "6": "Saturday", "7": "Sunday" }, + "interval": { + "daily": "Daily", + "weekly": "Weekly", + "mothly": "Monthly" + }, "info": { "created": "Created", "modified": "Modified", "used": "Used", "changed": "Changed", + "recently_used": "Recently used", "extension": "File extension", "size": "Size", "slides": "Slides", "words": "Words", "template": "Template", "category": "Category", + "codecs": "Codecs", + "mimeType": "MIME type", "photoUrl": "Photo URL", "likes": "Likes", "artist": "Artist", "artistUrl": "Artist page" }, + "guide_description": { + "start": "This is a short walkthrough of some basic features! (You can skip in the bottom right corner.)", + "project_manage": "Manage all of your projects in one place.", + "project_create": "Create folders to keep it organised, and create new projects.", + "project_list": "After opening a project you get a list of all the items here on the left side, drag & drop from the drawer to add more.", + "drawer": "Find all of your shows, media, overlays, etc. in one place.", + "drawer_shows": "Manage all of your different shows by organising them in different categories. Drag & drop any selected show to move them.", + "create_show_button": "Click this to create a new show (song, presentation, etc.)", + "create_show_popup": "Fill in the main details of the show, you can also auto find lyrics on the web from the name, or paste the lyrics manually.", + "show": "A show is the main presentation, click on any slide to present, and use the arrow keys to navigate. You can also drag & drop media files on a slide to set as background.", + "show_slide": "After a slide is clicked, it will show in the output and you will see a preview on the right, here you'll also find some extra actions like pausing a video.", + "output_clear": "Clear individual output layers, or clear all layers in the output.", + "edit": "Open slide editing with one click at the top.", + "end": "You can always look on the web if you need help with other features." + }, "songbeamer_import": { "options": "Options", "encoding": "Encoding", diff --git a/public/lang/zh_CN.json b/public/lang/zh_CN.json index f003de9f..d5def212 100644 --- a/public/lang/zh_CN.json +++ b/public/lang/zh_CN.json @@ -188,10 +188,10 @@ "mute_when_video_plays": "视频播放时静音", "pre_fader_volume_meter": "推子前音量表", "metronome": "节拍器", - "toggle_metronome": "切换节拍器", - "tempo": "时间", - "bpm": "节拍数", - "beats": "节拍" + "toggle_metronome": "显示/隐藏节拍器", + "tempo": "节奏", + "bpm": "拍数", + "beats": "拍子" }, "menu": { "show": "演出", @@ -530,7 +530,7 @@ "speech": "朗读", "startSpeaking": "开始朗读", "stopSpeaking": "停止朗读", - "focus_mode": "切换聚焦模式", + "focus_mode": "切换专注模式", "fullscreen": "切换全屏", "resetZoom": "重置缩放", "zoom": "缩放", @@ -1058,8 +1058,8 @@ "clear_media_when_finished": "播放完成时清除媒体", "disable_presenter_controller_keys": "禁用演示者控制器按键", "default_project_name": "默认项目名称", - "audio_fade_duration": "音频淡入淡出持续时间", - "audio_crossfade": "音频交叉淡入", + "audio_fade_duration": "音频淡化时长", + "audio_crossfade": "音频交叉淡化", "clear_style_background_on_text": "幻灯片激活时清除样式背景", "resolution": "分辨率", "cropping": "裁剪", @@ -1209,7 +1209,7 @@ "direction": "方向", "type": "类型", "none": "无", - "fade": "渐变", + "fade": "淡化", "blur": "模糊", "scale": "缩放", "spin": "旋转", diff --git a/src/frontend/components/context/menuClick.ts b/src/frontend/components/context/menuClick.ts index b851bec5..7f6c40e7 100644 --- a/src/frontend/components/context/menuClick.ts +++ b/src/frontend/components/context/menuClick.ts @@ -2,7 +2,7 @@ import { get } from "svelte/store" import { uid } from "uid" import { EXPORT, MAIN, OUTPUT } from "../../../types/Channels" import type { MediaStyle } from "../../../types/Main" -import type { Slide } from "../../../types/Show" +import type { Item, Slide } from "../../../types/Show" import { changeSlideGroups, mergeSlides, mergeTextboxes, splitItemInTwo } from "../../show/slides" import { $, @@ -63,7 +63,7 @@ import { stopMediaRecorder } from "../drawer/live/recorder" import { playPauseGlobal } from "../drawer/timers/timers" import { addChords } from "../edit/scripts/chords" import { rearrangeItems } from "../edit/scripts/itemHelpers" -import { getSelectionRange } from "../edit/scripts/textStyle" +import { getItemText, getSelectionRange } from "../edit/scripts/textStyle" import { exportProject } from "../export/project" import { clone, removeDuplicates } from "../helpers/array" import { copy, cut, deleteAction, duplicate, paste, selectAll } from "../helpers/clipboard" @@ -962,9 +962,11 @@ const actions: any = { if (!slideRef || previousSpiltIds.includes(slideRef.id)) return previousSpiltIds.push(slideRef.id) - let slideItems = _show().slides([slideRef.id]).get("items")[0] + let slideItems: Item[] = _show().slides([slideRef.id]).get("items")[0] - let firstTextItemIndex = slideItems.findIndex((a) => a.lines) ?? -1 + // check lines array & text array first, then text value + let firstTextItemIndex = slideItems.findIndex((a) => getItemText(a).length && ((a.lines?.length || 0) > 1 || (a.lines?.[0]?.text?.length || 0) > 1)) + if (firstTextItemIndex < 0) firstTextItemIndex = slideItems.findIndex((a) => getItemText(a).length > 18) if (firstTextItemIndex < 0) return splitItemInTwo(slideRef, firstTextItemIndex) diff --git a/src/frontend/components/drawer/audio/Metronome.svelte b/src/frontend/components/drawer/audio/Metronome.svelte index 01cd02d8..fe59ab1c 100644 --- a/src/frontend/components/drawer/audio/Metronome.svelte +++ b/src/frontend/components/drawer/audio/Metronome.svelte @@ -31,13 +31,15 @@ - { - values = e.detail - updateMetronome(values) - }} - /> +
+ { + values = e.detail + updateMetronome(values) + }} + /> +
diff --git a/src/frontend/components/drawer/audio/MetronomeInputs.svelte b/src/frontend/components/drawer/audio/MetronomeInputs.svelte index a598722b..ee37d12f 100644 --- a/src/frontend/components/drawer/audio/MetronomeInputs.svelte +++ b/src/frontend/components/drawer/audio/MetronomeInputs.svelte @@ -4,6 +4,7 @@ import CombinedInput from "../../inputs/CombinedInput.svelte" import NumberInput from "../../inputs/NumberInput.svelte" import type { API_metronome } from "../../actions/api" + import { getLeftParenthesis, getRightParenthesis } from "../../../utils/language" export let values: API_metronome = {} export let volume: boolean = true @@ -21,7 +22,7 @@ -

()

+

{getLeftParenthesis()}{getRightParenthesis()}

updateValue("tempo", e)} />
diff --git a/src/frontend/components/drawer/bible/Scripture.svelte b/src/frontend/components/drawer/bible/Scripture.svelte index 3256ce15..765959c0 100644 --- a/src/frontend/components/drawer/bible/Scripture.svelte +++ b/src/frontend/components/drawer/bible/Scripture.svelte @@ -30,9 +30,12 @@ let chapterId: any = cachedRef?.chapterId ?? "GEN.1" let activeVerses: string[] = cachedRef?.activeVerses || ["1"] + $: console.trace("BOOK", bookId, chapterId) + $: if (bookId || chapterId || verses || activeVerses) updateActive() function updateActive() { if (!loaded) return + activeScripture.set({ ...$activeScripture, [bibles[0]?.api ? "api" : "bible"]: { bookId, chapterId, activeVerses } }) cachedRef = $activeScripture[bibles[0]?.api ? "api" : "bible"] || {} } @@ -241,6 +244,7 @@ else if ($scripturesCache[id]) { books[id] = ($scripturesCache[id].books as any) || [] bookId = cachedRef?.bookId || 0 + if (typeof bookId === "string") bookId = bookIds.findIndex((a) => a === bookId) if (!books[id][bookId]) bookId = 0 } }) @@ -263,6 +267,7 @@ chapters[id] = (books[id][bookId] as any).chapters chapterId = cachedRef?.chapterId || 0 + if (typeof chapterId === "string") chapterId = Number(chapterId.split(".")[1]) - 1 if (!chapters[id][chapterId]) chapterId = 0 } }) @@ -947,6 +952,7 @@ {#each books[firstBibleId] as book, i} {@const id = bibles[0].api ? book.id : i} {@const color = getColorCode(books[firstBibleId], book.id ?? i)} + {#if i < 2}{console.log(id, bookId)}{/if} {#if openedPage === "settings"} -
+

updateSpecial(e.detail, "audio_fade_duration")} /> @@ -93,7 +93,7 @@
{#if isPlaylist} -
+

updatePlaylist(active, "crossfade", e.detail)} /> diff --git a/src/frontend/components/drawer/pages/Shows.svelte b/src/frontend/components/drawer/pages/Shows.svelte index 8a2de91f..5deb34b1 100644 --- a/src/frontend/components/drawer/pages/Shows.svelte +++ b/src/frontend/components/drawer/pages/Shows.svelte @@ -27,12 +27,17 @@ active === "all" ? showsSorted.filter((a) => !$categories[a?.category || ""]?.isArchive) : showsSorted.filter((s: any) => active === s.category || (active === "unlabeled" && (s.category === null || !$categories[s.category]))) export let firstMatch: null | any = null + export let resetSearchList: boolean = false let previousSearchValue: string = "" $: { if (searchValue.length > 1) { let currentShowsList = filterByTags(filteredShows, $activeTagFilter) // reset if search value changed - if (!formattedSearch.includes(previousSearchValue)) currentShowsList = filterByTags(clone(filteredStored), $activeTagFilter) + let reset = resetSearchList || !formattedSearch.includes(previousSearchValue) // || formattedSearch.split(" ").filter(Boolean).length !== previousSearchValue.split(" ").filter(Boolean).length + if (reset) { + currentShowsList = filterByTags(clone(filteredStored), $activeTagFilter) + resetSearchList = false + } filteredShows = showSearch(formattedSearch, currentShowsList) if (searchValue.length > 15 && filteredShows.length > 50) filteredShows = filteredShows.slice(0, 50) @@ -46,9 +51,18 @@ } else { filteredShows = filterByTags(clone(filteredStored), $activeTagFilter) firstMatch = null + previousSearchValue = "" } } + // reduce lag by only refreshing full list when not typing for 200 ms + let isTyping: any = null + $: if (searchValue) typing() + function typing() { + if (isTyping) clearTimeout(isTyping) + isTyping = setTimeout(() => (resetSearchList = true), 200) + } + function filterByTags(shows, tags: string[]) { if (!tags.length) return shows diff --git a/src/frontend/components/edit/editors/SlideEditor.svelte b/src/frontend/components/edit/editors/SlideEditor.svelte index be6ca90f..4cb4001d 100644 --- a/src/frontend/components/edit/editors/SlideEditor.svelte +++ b/src/frontend/components/edit/editors/SlideEditor.svelte @@ -1,7 +1,9 @@

FreeShow

diff --git a/src/frontend/components/main/popups/Unsaved.svelte b/src/frontend/components/main/popups/Unsaved.svelte index b7a10fa8..97c48373 100644 --- a/src/frontend/components/main/popups/Unsaved.svelte +++ b/src/frontend/components/main/popups/Unsaved.svelte @@ -1,6 +1,6 @@