sveltekit-ui 1.1.17 → 1.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Components/Alert/index.svelte +88 -0
- package/dist/Components/Alert/index.svelte.js +101 -0
- package/dist/Components/ArrowToggle/index.svelte +62 -0
- package/dist/Components/Attachment/index.svelte +77 -0
- package/dist/Components/Attachment/index.svelte.js +119 -0
- package/dist/Components/Audio/index.svelte +193 -0
- package/dist/Components/Audio/index.svelte.js +463 -0
- package/dist/Components/AudioEditor/index.svelte +252 -0
- package/dist/Components/AudioEditor/index.svelte.js +977 -0
- package/dist/Components/AudioEditor/samples/alloy-voice-sample.mp3 +0 -0
- package/dist/Components/AudioEditor/samples/echo-voice-sample.mp3 +0 -0
- package/dist/Components/AudioEditor/samples/fable-voice-sample.mp3 +0 -0
- package/dist/Components/AudioEditor/samples/nova-voice-sample.mp3 +0 -0
- package/dist/Components/AudioEditor/samples/onyx-voice-sample.mp3 +0 -0
- package/dist/Components/AudioEditor/samples/shimmer-voice-sample.mp3 +0 -0
- package/dist/Components/AuthCodeInput/index.svelte +85 -0
- package/dist/Components/AuthCodeInput/index.svelte.js +95 -0
- package/dist/Components/Breadcrumbs/index.svelte +27 -0
- package/dist/Components/Breadcrumbs/index.svelte.js +88 -0
- package/dist/Components/Button/index.svelte +721 -0
- package/dist/Components/Button/index.svelte.js +375 -0
- package/dist/Components/Chart/Klines/index.svelte +87 -0
- package/dist/Components/Chart/index.svelte +226 -0
- package/dist/Components/Chart/index.svelte.js +1090 -0
- package/dist/Components/ChartInput/DisplayNav/Klines/index.svelte +150 -0
- package/dist/Components/ChartInput/DisplayNav/Lines/index.svelte +45 -0
- package/dist/Components/ChartInput/DisplayNav/index.svelte +297 -0
- package/dist/Components/ChartInput/EditPanel/index.svelte +155 -0
- package/dist/Components/ChartInput/index.svelte +21 -0
- package/dist/Components/ChartInput/index.svelte.js +671 -0
- package/dist/Components/Checkbox/index.svelte +411 -0
- package/dist/Components/Checkbox/index.svelte.js +178 -0
- package/dist/Components/Code/index.svelte +23 -0
- package/dist/Components/Code/index.svelte.js +33 -0
- package/dist/Components/Color/index.svelte +51 -0
- package/dist/Components/Color/index.svelte.js +31 -0
- package/dist/Components/ColorInput/ChromaPicker/index.svelte +50 -0
- package/dist/Components/ColorInput/ColorPalette/index.svelte +62 -0
- package/dist/Components/ColorInput/OpacityPicker/index.svelte +68 -0
- package/dist/Components/ColorInput/ShowcasePicker/index.svelte +136 -0
- package/dist/Components/ColorInput/index.svelte +70 -0
- package/dist/Components/ColorInput/index.svelte.js +386 -0
- package/dist/Components/ConditionsInput/index.svelte +46 -0
- package/dist/Components/ConditionsInput/index.svelte.js +201 -0
- package/dist/Components/Confetti/index.svelte +98 -0
- package/dist/Components/Confetti/index.svelte.js +94 -0
- package/dist/Components/Content/index.svelte +500 -0
- package/dist/Components/Content/index.svelte.js +910 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Audio/index.svelte +31 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Audio/index.svelte.js +258 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/AudioAdvanced/index.svelte +31 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/AudioAdvanced/index.svelte.js +258 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Dropdown/index.svelte +58 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Dropdown/index.svelte.js +206 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Image/index.svelte +28 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Image/index.svelte.js +224 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Number/index.svelte +44 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Number/index.svelte.js +272 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Qr/index.svelte +41 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Qr/index.svelte.js +202 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Slider/index.svelte +19 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Slider/index.svelte.js +117 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/TableAdvanced/index.svelte +60 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/TableAdvanced/index.svelte.js +542 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Tag/index.svelte +47 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/Tag/index.svelte.js +185 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/TextInput/index.svelte +35 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/TextInput/index.svelte.js +222 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/TimeInput/index.svelte +20 -0
- package/dist/Components/ContentInput/AttributesInput/CustomConfig/TimeInput/index.svelte.js +84 -0
- package/dist/Components/ContentInput/AttributesInput/DefinedTypeInput/index.svelte +25 -0
- package/dist/Components/ContentInput/AttributesInput/DefinedTypeInput/index.svelte.js +91 -0
- package/dist/Components/ContentInput/AttributesInput/index.svelte +352 -0
- package/dist/Components/ContentInput/AttributesInput/index.svelte.js +1436 -0
- package/dist/Components/ContentInput/ContentPanelBuilder/AddElement/index.svelte +64 -0
- package/dist/Components/ContentInput/ContentPanelBuilder/AddElement/index.svelte.js +97 -0
- package/dist/Components/ContentInput/ContentPanelBuilder/ElementList/index.svelte +184 -0
- package/dist/Components/ContentInput/ContentPanelBuilder/index.svelte +41 -0
- package/dist/Components/ContentInput/index.svelte +78 -0
- package/dist/Components/ContentInput/index.svelte.js +1197 -0
- package/dist/Components/CronInput/index.svelte +78 -0
- package/dist/Components/CronInput/index.svelte.js +198 -0
- package/dist/Components/DataTypeInput/index.svelte +174 -0
- package/dist/Components/DataTypeInput/index.svelte.js +565 -0
- package/dist/Components/Dropdown/index.svelte +116 -0
- package/dist/Components/Dropdown/index.svelte.js +403 -0
- package/dist/Components/EmailAddress/index.svelte +22 -0
- package/dist/Components/EmailAddress/index.svelte.js +45 -0
- package/dist/Components/ErrorX/index.svelte +58 -0
- package/dist/Components/Eye/index.svelte +57 -0
- package/dist/Components/FileInput/index.svelte +146 -0
- package/dist/Components/FileInput/index.svelte.js +225 -0
- package/dist/Components/Hamburger/index.svelte +99 -0
- package/dist/Components/HorizScrollBox/index.svelte +145 -0
- package/dist/Components/Icon/index.svelte +412 -0
- package/dist/Components/Icon/index.svelte.js +116 -0
- package/dist/Components/IconInput/index.svelte +77 -0
- package/dist/Components/IconInput/index.svelte.js +259 -0
- package/dist/Components/Image/index.svelte +126 -0
- package/dist/Components/Image/index.svelte.js +116 -0
- package/dist/Components/ImageEditor/Image/CropBox/index.svelte +165 -0
- package/dist/Components/ImageEditor/Image/index.svelte +104 -0
- package/dist/Components/ImageEditor/Panels/AI/index.svelte +44 -0
- package/dist/Components/ImageEditor/Panels/Crop/index.svelte +96 -0
- package/dist/Components/ImageEditor/Panels/File/QualityPicker/index.svelte +124 -0
- package/dist/Components/ImageEditor/Panels/File/index.svelte +74 -0
- package/dist/Components/ImageEditor/Panels/Filters/index.svelte +46 -0
- package/dist/Components/ImageEditor/Panels/Resize/index.svelte +58 -0
- package/dist/Components/ImageEditor/index.svelte +93 -0
- package/dist/Components/ImageEditor/index.svelte.js +1961 -0
- package/dist/Components/ImageSlider/index.svelte +124 -0
- package/dist/Components/ImageSlider/index.svelte.js +99 -0
- package/dist/Components/InfoBox/index.svelte +89 -0
- package/dist/Components/Json/Nested/index.svelte +157 -0
- package/dist/Components/Json/index.svelte +60 -0
- package/dist/Components/Json/index.svelte.js +594 -0
- package/dist/Components/LabeledItem/index.svelte +102 -0
- package/dist/Components/Layout/NavBar/FullNav/index.svelte +52 -0
- package/dist/Components/Layout/NavBar/NavGuts/index.svelte +87 -0
- package/dist/Components/Layout/NavBar/index.svelte +72 -0
- package/dist/Components/Layout/index.svelte +149 -0
- package/dist/Components/Layout/index.svelte.js +360 -0
- package/dist/Components/Link/index.svelte +47 -0
- package/dist/Components/Link/index.svelte.js +136 -0
- package/dist/Components/LoadingSuccessDiv/index.svelte +51 -0
- package/dist/Components/LoadingWheel/index.svelte +38 -0
- package/dist/Components/Location/index.svelte +79 -0
- package/dist/Components/Location/index.svelte.js +288 -0
- package/dist/Components/LocationInput/index.svelte +197 -0
- package/dist/Components/LocationInput/index.svelte.js +965 -0
- package/dist/Components/Number/index.svelte +47 -0
- package/dist/Components/Number/index.svelte.js +151 -0
- package/dist/Components/PhoneCountryCode/index.svelte +7 -0
- package/dist/Components/PhoneCountryCode/index.svelte.js +260 -0
- package/dist/Components/PhoneNumber/index.svelte +22 -0
- package/dist/Components/PhoneNumber/index.svelte.js +41 -0
- package/dist/Components/Popover/index.svelte +396 -0
- package/dist/Components/Popover/index.svelte.js +319 -0
- package/dist/Components/Qr/index.svelte +85 -0
- package/dist/Components/Qr/index.svelte.js +301 -0
- package/dist/Components/QrInput/index.svelte +47 -0
- package/dist/Components/QrInput/index.svelte.js +218 -0
- package/dist/Components/Slider/index.svelte +239 -0
- package/dist/Components/Slider/index.svelte.js +469 -0
- package/dist/Components/Spacer/index.svelte +41 -0
- package/dist/Components/StoragePicker/DisplayFile/index.svelte +15 -0
- package/dist/Components/StoragePicker/index.svelte +187 -0
- package/dist/Components/StoragePicker/index.svelte.js +592 -0
- package/dist/Components/SuccessCheck/index.svelte +56 -0
- package/dist/Components/TableAdvanced/ColumnInput/index.svelte +117 -0
- package/dist/Components/TableAdvanced/ColumnInput/index.svelte.js +456 -0
- package/dist/Components/TableAdvanced/FilterInput/index.svelte +54 -0
- package/dist/Components/TableAdvanced/FilterInput/index.svelte.js +247 -0
- package/dist/Components/TableAdvanced/Pagination/index.svelte +43 -0
- package/dist/Components/TableAdvanced/Pagination/index.svelte.js +97 -0
- package/dist/Components/TableAdvanced/SortByInput/index.svelte +72 -0
- package/dist/Components/TableAdvanced/SortByInput/index.svelte.js +176 -0
- package/dist/Components/TableAdvanced/index.svelte +275 -0
- package/dist/Components/TableAdvanced/index.svelte.js +1565 -0
- package/dist/Components/Tag/index.svelte +45 -0
- package/dist/Components/Tag/index.svelte.js +76 -0
- package/dist/Components/TextArrayInput/index.svelte +108 -0
- package/dist/Components/TextArrayInput/index.svelte.js +239 -0
- package/dist/Components/TextInput/PasswordTooltip/index.svelte +89 -0
- package/dist/Components/TextInput/index.svelte +223 -0
- package/dist/Components/TextInput/index.svelte.js +447 -0
- package/dist/Components/Time/index.svelte +7 -0
- package/dist/Components/Time/index.svelte.js +38 -0
- package/dist/Components/TimeInput/NumberToggler/index.svelte +34 -0
- package/dist/Components/TimeInput/NumberToggler/index.svelte.js +79 -0
- package/dist/Components/TimeInput/index.js +702 -0
- package/dist/Components/TimeInput/index.svelte +211 -0
- package/dist/Components/TimeInput/index.svelte.js +638 -0
- package/dist/Components/Tooltip/index.svelte +143 -0
- package/dist/Components/TransparentBackground/index.svelte +153 -0
- package/dist/Components/TypingDots/index.svelte +84 -0
- package/dist/Components/VariablePathInput/index.svelte +63 -0
- package/dist/Components/VariablePathInput/index.svelte.js +273 -0
- package/dist/Components/VideoTBD/index.svelte +100 -0
- package/dist/Components/XFollow/index.svelte +42 -0
- package/dist/Components/XPost/index.svelte +52 -0
- package/dist/Components/XPost/index.svelte.js +64 -0
- package/dist/Components/YoutubeChannelButton/index.svelte +82 -0
- package/dist/Components/YoutubeVideo/index.svelte +73 -0
- package/dist/Components/YoutubeVideo/index.svelte.js +54 -0
- package/dist/actions/draggable.js +49 -0
- package/dist/actions/index.js +24 -0
- package/dist/actions/no_spaces.js +33 -0
- package/dist/actions/numbers_only.js +26 -0
- package/dist/actions/scroll_y.js +28 -0
- package/dist/actions/stop_scroll_propagation_y.js +42 -0
- package/dist/actions/swipe_handler.js +295 -0
- package/dist/client/astc_formatting/index.js +1128 -0
- package/dist/client/docs/index.js +7622 -0
- package/dist/client/index.js +735 -0
- package/dist/client/types/index.js +2812 -0
- package/dist/index.js +180 -0
- package/dist/style.css +682 -0
- package/package.json +1 -1
|
@@ -0,0 +1,977 @@
|
|
|
1
|
+
import { create_unique_id, set_closurable, clean_file_name, url_to_file } from "../../client/index.js"
|
|
2
|
+
import { create_popover_manager } from "../Popover/index.svelte.js"
|
|
3
|
+
import { create_button_manager } from "../Button/index.svelte.js"
|
|
4
|
+
import { create_text_input_manager } from "../TextInput/index.svelte.js"
|
|
5
|
+
import { create_storage_picker_manager } from "../StoragePicker/index.svelte.js"
|
|
6
|
+
import { create_dropdown_manager } from "../Dropdown/index.svelte.js"
|
|
7
|
+
import { create_audio_manager } from "../Audio/index.svelte.js"
|
|
8
|
+
import alloy_voice_sample from "./samples/alloy-voice-sample.mp3"
|
|
9
|
+
import echo_voice_sample from "./samples/echo-voice-sample.mp3"
|
|
10
|
+
import fable_voice_sample from "./samples/fable-voice-sample.mp3"
|
|
11
|
+
import nova_voice_sample from "./samples/nova-voice-sample.mp3"
|
|
12
|
+
import onyx_voice_sample from "./samples/onyx-voice-sample.mp3"
|
|
13
|
+
import shimmer_voice_sample from "./samples/shimmer-voice-sample.mp3"
|
|
14
|
+
|
|
15
|
+
export function create_audio_editor_manager(config) {
|
|
16
|
+
let id = create_unique_id(null, 20)
|
|
17
|
+
|
|
18
|
+
const voices = [
|
|
19
|
+
{
|
|
20
|
+
id: "alloy",
|
|
21
|
+
name: "Alloy",
|
|
22
|
+
labels: [],
|
|
23
|
+
sample: alloy_voice_sample,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: "echo",
|
|
27
|
+
name: "Echo",
|
|
28
|
+
labels: [],
|
|
29
|
+
sample: echo_voice_sample,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "fable",
|
|
33
|
+
name: "Fable",
|
|
34
|
+
labels: [],
|
|
35
|
+
sample: fable_voice_sample,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: "nova",
|
|
39
|
+
name: "Nova",
|
|
40
|
+
labels: [],
|
|
41
|
+
sample: nova_voice_sample,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: "onyx",
|
|
45
|
+
name: "Onyx",
|
|
46
|
+
labels: [],
|
|
47
|
+
sample: onyx_voice_sample,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "shimmer",
|
|
51
|
+
name: "Shimmer",
|
|
52
|
+
labels: [],
|
|
53
|
+
sample: shimmer_voice_sample,
|
|
54
|
+
},
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
const audio_tags_input_base = {
|
|
58
|
+
TIT2: null,
|
|
59
|
+
TALB: null,
|
|
60
|
+
TPE1: null,
|
|
61
|
+
APIC: {
|
|
62
|
+
mime: null,
|
|
63
|
+
type: {
|
|
64
|
+
id: 0,
|
|
65
|
+
},
|
|
66
|
+
description: null,
|
|
67
|
+
imageBuffer: null,
|
|
68
|
+
},
|
|
69
|
+
TYER: 2024,
|
|
70
|
+
USLT: {
|
|
71
|
+
language: "eng",
|
|
72
|
+
text: null,
|
|
73
|
+
},
|
|
74
|
+
TLAN: null,
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const audio_input_tag_defs = {
|
|
78
|
+
TIT2: { display_order: 1, name: "Title", example: "Audio Title" },
|
|
79
|
+
TALB: { display_order: 2, name: "Album Title", example: "Album Title" },
|
|
80
|
+
APIC: {
|
|
81
|
+
display_order: 3,
|
|
82
|
+
name: "Attached Picture",
|
|
83
|
+
example: "{ mime: 'image/jpeg', type: { id: 0 }, description: null, imageBuffer: null }",
|
|
84
|
+
},
|
|
85
|
+
TPE1: {
|
|
86
|
+
display_order: 4,
|
|
87
|
+
name: "Artist",
|
|
88
|
+
example: "Artist",
|
|
89
|
+
},
|
|
90
|
+
USLT: {
|
|
91
|
+
display_order: 5,
|
|
92
|
+
name: "Unsynchronised Lyrics",
|
|
93
|
+
example: "{ text: 'Lyrics of the audio', language: 'eng' }",
|
|
94
|
+
},
|
|
95
|
+
TYER: { display_order: 6, name: "Release Year", example: "2024" },
|
|
96
|
+
TLAN: { display_order: 7, name: "Language", example: "eng" },
|
|
97
|
+
TIT3: { display_order: 8, name: "Subtitle", example: "Audio Subtitle" },
|
|
98
|
+
TPE2: { display_order: 9, name: "Album Artist", example: "Album Artist" },
|
|
99
|
+
TCOM: {
|
|
100
|
+
display_order: 10,
|
|
101
|
+
name: "Composers",
|
|
102
|
+
example: "[ 'Composer 1', 'Composer 2' ]",
|
|
103
|
+
},
|
|
104
|
+
TCON: {
|
|
105
|
+
display_order: 11,
|
|
106
|
+
name: "Genres",
|
|
107
|
+
example: "[ 'Genre 1', 'Genre 2' ]",
|
|
108
|
+
},
|
|
109
|
+
TIT1: {
|
|
110
|
+
display_order: 12,
|
|
111
|
+
name: "Content Group Description",
|
|
112
|
+
example: "Content Description",
|
|
113
|
+
},
|
|
114
|
+
TPE3: {
|
|
115
|
+
display_order: 13,
|
|
116
|
+
name: "Conductor/Performer Refinement",
|
|
117
|
+
example: "Performer Name",
|
|
118
|
+
},
|
|
119
|
+
TPE4: {
|
|
120
|
+
display_order: 14,
|
|
121
|
+
name: "Interpreted, Remixed, or Otherwise Modified By",
|
|
122
|
+
example: "Remixer Name",
|
|
123
|
+
},
|
|
124
|
+
TRCK: { display_order: 15, name: "Track Number", example: "'5' or '5/10'" },
|
|
125
|
+
TPOS: { display_order: 16, name: "Disc Number", example: "'1' or '1/3'" },
|
|
126
|
+
TPUB: {
|
|
127
|
+
display_order: 17,
|
|
128
|
+
name: "Label Name",
|
|
129
|
+
example: "Record Label Name",
|
|
130
|
+
},
|
|
131
|
+
TKEY: { display_order: 18, name: "Initial Key", example: "A#m" },
|
|
132
|
+
TMED: { display_order: 19, name: "Media Type", example: "Digital Media" },
|
|
133
|
+
TDAT: {
|
|
134
|
+
display_order: 20,
|
|
135
|
+
name: "Release Date",
|
|
136
|
+
example: "0101 (for 1st January)",
|
|
137
|
+
},
|
|
138
|
+
TSRC: {
|
|
139
|
+
display_order: 21,
|
|
140
|
+
name: "ISRC",
|
|
141
|
+
example: "International Standard Recording Code",
|
|
142
|
+
},
|
|
143
|
+
TCOP: {
|
|
144
|
+
display_order: 22,
|
|
145
|
+
name: "Copyright Message",
|
|
146
|
+
example: "© 2024 Record Label",
|
|
147
|
+
},
|
|
148
|
+
TEXT: {
|
|
149
|
+
display_order: 23,
|
|
150
|
+
name: "Lyricist/Text Writer",
|
|
151
|
+
example: "Lyricist Name",
|
|
152
|
+
},
|
|
153
|
+
WCOM: {
|
|
154
|
+
display_order: 24,
|
|
155
|
+
name: "Commercial Information",
|
|
156
|
+
example: "http://website.com",
|
|
157
|
+
},
|
|
158
|
+
WCOP: {
|
|
159
|
+
display_order: 25,
|
|
160
|
+
name: "Legal Information",
|
|
161
|
+
example: "http://website.com/legal",
|
|
162
|
+
},
|
|
163
|
+
WOAF: {
|
|
164
|
+
display_order: 26,
|
|
165
|
+
name: "Official Audio File Webpage",
|
|
166
|
+
example: "http://website.com/audio_file",
|
|
167
|
+
},
|
|
168
|
+
WOAR: {
|
|
169
|
+
display_order: 27,
|
|
170
|
+
name: "Official Artist Webpage",
|
|
171
|
+
example: "http://website.com/artist",
|
|
172
|
+
},
|
|
173
|
+
WOAS: {
|
|
174
|
+
display_order: 28,
|
|
175
|
+
name: "Official Audio Source Webpage",
|
|
176
|
+
example: "http://website.com/audiosource",
|
|
177
|
+
},
|
|
178
|
+
WORS: {
|
|
179
|
+
display_order: 29,
|
|
180
|
+
name: "Official Internet Radio Station Homepage",
|
|
181
|
+
example: "http://website.com/radio",
|
|
182
|
+
},
|
|
183
|
+
WPAY: {
|
|
184
|
+
display_order: 30,
|
|
185
|
+
name: "Payment",
|
|
186
|
+
example: "http://website.com/payment",
|
|
187
|
+
},
|
|
188
|
+
WPUB: {
|
|
189
|
+
display_order: 31,
|
|
190
|
+
name: "Publisher’s Official Webpage",
|
|
191
|
+
example: "http://website.com/publisher",
|
|
192
|
+
},
|
|
193
|
+
TLEN: {
|
|
194
|
+
display_order: 32,
|
|
195
|
+
name: "Audio Duration",
|
|
196
|
+
example: "230000 (for 3 minutes and 50 seconds)",
|
|
197
|
+
},
|
|
198
|
+
TBPM: { display_order: 33, name: "BPM", example: "120" },
|
|
199
|
+
COMM: {
|
|
200
|
+
display_order: 34,
|
|
201
|
+
name: "Comments",
|
|
202
|
+
example: "{ description: 'Comment', text: 'This is a comment', language: 'eng' }",
|
|
203
|
+
},
|
|
204
|
+
IPLS: {
|
|
205
|
+
display_order: 35,
|
|
206
|
+
name: "Involved People List",
|
|
207
|
+
example: "[ ['role', 'name'], ['role', 'name'] ]",
|
|
208
|
+
},
|
|
209
|
+
SYLT: {
|
|
210
|
+
display_order: 36,
|
|
211
|
+
name: "Synchronised Lyrics",
|
|
212
|
+
example:
|
|
213
|
+
"{ type: 1, text: [ ['lyrics here', 0], ['lyrics here', 3500] ], timestampFormat: 2, language: 'eng', description: 'description' }",
|
|
214
|
+
},
|
|
215
|
+
TXXX: {
|
|
216
|
+
display_order: 37,
|
|
217
|
+
name: "Additional Defined Text",
|
|
218
|
+
example: "{ description: 'description here', value: 'value here' }",
|
|
219
|
+
},
|
|
220
|
+
PRIV: {
|
|
221
|
+
display_order: 38,
|
|
222
|
+
name: "Private Frame",
|
|
223
|
+
example: "{ id: 'identifier', data: dataArrayBuffer }",
|
|
224
|
+
},
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const lang_options = [
|
|
228
|
+
{ key: "eng", name: "English" },
|
|
229
|
+
{ key: "spa", name: "Spanish" },
|
|
230
|
+
{ key: "fra", name: "French" },
|
|
231
|
+
{ key: "deu", name: "German" },
|
|
232
|
+
{ key: "rus", name: "Russian" },
|
|
233
|
+
{ key: "ita", name: "Italian" },
|
|
234
|
+
{ key: "por", name: "Portuguese" },
|
|
235
|
+
{ key: "jpn", name: "Japanese" },
|
|
236
|
+
{ key: "zho", name: "Chinese" },
|
|
237
|
+
{ key: "ara", name: "Arabic" },
|
|
238
|
+
{ key: "hin", name: "Hindi" },
|
|
239
|
+
{ key: "kor", name: "Korean" },
|
|
240
|
+
{ key: "tur", name: "Turkish" },
|
|
241
|
+
{ key: "swe", name: "Swedish" },
|
|
242
|
+
{ key: "nld", name: "Dutch" },
|
|
243
|
+
{ key: "pol", name: "Polish" },
|
|
244
|
+
{ key: "dan", name: "Danish" },
|
|
245
|
+
{ key: "fin", name: "Finnish" },
|
|
246
|
+
{ key: "nor", name: "Norwegian" },
|
|
247
|
+
{ key: "heb", name: "Hebrew" },
|
|
248
|
+
]
|
|
249
|
+
|
|
250
|
+
let is_loading_generate_audio = $state(false)
|
|
251
|
+
let error_message = $state(null)
|
|
252
|
+
let success_message = $state(null)
|
|
253
|
+
let is_text_to_audio = $state(false)
|
|
254
|
+
|
|
255
|
+
let is_popover = $state(true)
|
|
256
|
+
let popover_manager = $state(null)
|
|
257
|
+
let clear_button_manager = $state(null)
|
|
258
|
+
let is_alt_content_shown = $state(false)
|
|
259
|
+
let seed_from_input_popover_manager = $state(null)
|
|
260
|
+
let seed_from_input_popover_button_manager = $state(null)
|
|
261
|
+
let seed_audio_storage_picker_manager = $state(null)
|
|
262
|
+
let download_audio_file_button_manager = $state(null)
|
|
263
|
+
let generate_audio_changes_button_manager = $state(null)
|
|
264
|
+
let finish_button_manager = $state(null)
|
|
265
|
+
let use_text_to_audio_button_manager = $state(null)
|
|
266
|
+
let select_file_from_storage_button_manager = $state(null)
|
|
267
|
+
let use_mp3_file_button_manager = $state(null)
|
|
268
|
+
let text_to_audio_text_input_manager = $state(null)
|
|
269
|
+
let audio_storage_picker_manager = $state(null)
|
|
270
|
+
let file_name_text_input_manager = $state(null)
|
|
271
|
+
let title_text_input_manager = $state(null)
|
|
272
|
+
let album_title_text_input_manager = $state(null)
|
|
273
|
+
let image_storage_picker_manager = $state(null)
|
|
274
|
+
let image_description_text_input_manager = $state(null)
|
|
275
|
+
let artist_text_input_manager = $state(null)
|
|
276
|
+
let lyrics_text_input_manager = $state(null)
|
|
277
|
+
let release_year_text_input_manager = $state(null)
|
|
278
|
+
let language_dropdown_manager = $state(null)
|
|
279
|
+
let additional_tags_input_prepped = $state(null)
|
|
280
|
+
let generated_audio_file_obj = $state(null)
|
|
281
|
+
let voice_options = $state(null)
|
|
282
|
+
let voice_id = $state(null)
|
|
283
|
+
let edit_voice_popover_manager = $state(null)
|
|
284
|
+
let edit_voice_button_manager = $state(null)
|
|
285
|
+
let audio_manager = $state(null)
|
|
286
|
+
let clear_generated_audio_button_manager = $state(null)
|
|
287
|
+
let additional_metatags_dropdown_manager = $state(null)
|
|
288
|
+
|
|
289
|
+
// actually we'll prob do this server stuff diff like call config?.fetch_audio_read_tags() and handle in parent
|
|
290
|
+
let api_prefix = $derived(set_closurable(config?.api_prefix, "https://www.contibase.com/api/v1"))
|
|
291
|
+
let storage_src = $derived(
|
|
292
|
+
set_closurable(config?.storage_src, "https://www.contibase.com/api/v1/storage/{storage_id}")
|
|
293
|
+
)
|
|
294
|
+
let fetch_path_audio_read_tags = $derived(
|
|
295
|
+
set_closurable(config?.fetch_path_audio_read_tags, `${api_prefix}/tools/audio/read_tags`)
|
|
296
|
+
)
|
|
297
|
+
let fetch_path_audio_post = $derived(set_closurable(config?.fetch_path_audio_post, `${api_prefix}/tools/audio`))
|
|
298
|
+
let file_prefix = $derived(set_closurable(config?.file_prefix, `${api_prefix}/storage/`))
|
|
299
|
+
|
|
300
|
+
let account = $derived(set_closurable(config?.account, null))
|
|
301
|
+
let is_disabled = $derived(set_closurable(config?.is_disabled, false))
|
|
302
|
+
let storage = $derived(set_closurable(config?.storage, null))
|
|
303
|
+
let locally_uploaded_files = $derived(set_closurable(config?.locally_uploaded_files, null))
|
|
304
|
+
|
|
305
|
+
let file_name_derived = $derived(`${clean_file_name(file_name_text_input_manager?.val)}.mp3`)
|
|
306
|
+
let additional_tag_keys_ordered = $derived(
|
|
307
|
+
Object.keys(additional_tags_input_prepped || {})
|
|
308
|
+
.map((key) => ({ key, display_order: audio_input_tag_defs[key]?.display_order }))
|
|
309
|
+
.sort((a, b) => a.display_order - b.display_order)
|
|
310
|
+
.map((item) => item.key)
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
let text_to_audio_time_in_minutes = $derived(calc_time_in_minutes(text_to_audio_text_input_manager?.val))
|
|
314
|
+
|
|
315
|
+
function calc_time_in_minutes(text) {
|
|
316
|
+
if (!text || text.length < 20) {
|
|
317
|
+
return 0
|
|
318
|
+
}
|
|
319
|
+
const average_speed = 155
|
|
320
|
+
const word_count = text.split(" ").length
|
|
321
|
+
return Math.ceil(word_count / average_speed)
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
async function seed(input) {
|
|
325
|
+
if (!input) {
|
|
326
|
+
file_name_text_input_manager.set_val(null)
|
|
327
|
+
text_to_audio_text_input_manager.set_val(null)
|
|
328
|
+
audio_storage_picker_manager.set_val(null)
|
|
329
|
+
title_text_input_manager.set_val(null)
|
|
330
|
+
album_title_text_input_manager.set_val(null)
|
|
331
|
+
image_storage_picker_manager.set_val(null)
|
|
332
|
+
image_description_text_input_manager.set_val(null)
|
|
333
|
+
artist_text_input_manager.set_val(null)
|
|
334
|
+
lyrics_text_input_manager.set_val(null)
|
|
335
|
+
release_year_text_input_manager.set_val(null)
|
|
336
|
+
language_dropdown_manager.set_val(null)
|
|
337
|
+
additional_tags_input_prepped = null
|
|
338
|
+
return
|
|
339
|
+
}
|
|
340
|
+
if (!input?.file && input?.id) {
|
|
341
|
+
let file_src = `${file_prefix}${input?.id}`
|
|
342
|
+
input.file = await url_to_file(file_src, file_name_derived)
|
|
343
|
+
}
|
|
344
|
+
is_text_to_audio = false
|
|
345
|
+
text_to_audio_text_input_manager.set_val(null)
|
|
346
|
+
if (input.hasOwnProperty("is_text_to_audio")) {
|
|
347
|
+
is_text_to_audio = input?.is_text_to_audio
|
|
348
|
+
text_to_audio_text_input_manager.set_val(input?.text_to_audio_input ?? null)
|
|
349
|
+
voice_id = input?.voice_id ?? null
|
|
350
|
+
}
|
|
351
|
+
let cleaned_file_name = clean_file_name(input?.file_name ?? input?.file?.name)
|
|
352
|
+
let audio_metadata = null
|
|
353
|
+
if (input?.file) {
|
|
354
|
+
audio_metadata = await get_audio_metadata(input?.file)
|
|
355
|
+
audio_storage_picker_manager.set_val(input)
|
|
356
|
+
}
|
|
357
|
+
file_name_text_input_manager.set_val(cleaned_file_name)
|
|
358
|
+
title_text_input_manager.set_val(input?.title ?? input?.tags?.TIT2 ?? audio_metadata?.tags?.TIT2 ?? null)
|
|
359
|
+
album_title_text_input_manager.set_val(
|
|
360
|
+
input?.album_title ?? input?.tags?.TALB ?? audio_metadata?.tags?.TALB ?? null
|
|
361
|
+
)
|
|
362
|
+
image_storage_picker_manager.set_val({ file_name: "cover", file: input?.image_file ?? audio_metadata?.image?.file })
|
|
363
|
+
image_description_text_input_manager.set_val(
|
|
364
|
+
input?.image_description ?? input?.tags?.APIC?.description ?? audio_metadata?.tags?.APIC?.description ?? null
|
|
365
|
+
)
|
|
366
|
+
artist_text_input_manager.set_val(input?.artist ?? input?.tags?.TPE1 ?? audio_metadata?.tags?.TPE1 ?? null)
|
|
367
|
+
lyrics_text_input_manager.set_val(
|
|
368
|
+
input?.lyrics ?? input?.tags?.USLT?.text ?? audio_metadata?.tags?.USLT?.text ?? null
|
|
369
|
+
)
|
|
370
|
+
release_year_text_input_manager.set_val(
|
|
371
|
+
input?.release_year ?? input?.tags?.TYER ?? audio_metadata?.tags?.TYER ?? null
|
|
372
|
+
)
|
|
373
|
+
language_dropdown_manager.set_val(input?.language ?? input?.tags?.TLAN ?? audio_metadata?.tags?.TLAN ?? null)
|
|
374
|
+
const tags_input = input?.tags ?? audio_metadata?.tags
|
|
375
|
+
let additonal_tag_keys = []
|
|
376
|
+
if (
|
|
377
|
+
tags_input &&
|
|
378
|
+
typeof tags_input == "object" &&
|
|
379
|
+
!Array.isArray(tags_input) &&
|
|
380
|
+
Object.keys(tags_input).length > 0
|
|
381
|
+
) {
|
|
382
|
+
for (let key of Object.keys(tags_input)) {
|
|
383
|
+
if (!audio_tags_input_base.hasOwnProperty(key)) {
|
|
384
|
+
additonal_tag_keys.push(key)
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
additional_metatags_dropdown_manager.set_val(additonal_tag_keys)
|
|
389
|
+
set_additional_tags_input_prepped(tags_input)
|
|
390
|
+
popover_manager.open()
|
|
391
|
+
seed_from_input_popover_manager.close()
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
function set_additional_tags_input_prepped(tags_input) {
|
|
395
|
+
let additional_tags_input_prepped_loc = {}
|
|
396
|
+
if (
|
|
397
|
+
tags_input &&
|
|
398
|
+
typeof tags_input == "object" &&
|
|
399
|
+
!Array.isArray(tags_input) &&
|
|
400
|
+
Object.keys(tags_input).length > 0
|
|
401
|
+
) {
|
|
402
|
+
for (let [key, val] of Object.entries(tags_input)) {
|
|
403
|
+
if (!audio_tags_input_base.hasOwnProperty(key)) {
|
|
404
|
+
let tag_input_prepped_loc = {
|
|
405
|
+
key,
|
|
406
|
+
name: audio_input_tag_defs[key]?.name,
|
|
407
|
+
display_order: audio_input_tag_defs[key]?.display_order,
|
|
408
|
+
}
|
|
409
|
+
tag_input_prepped_loc.text_input_manager = create_text_input_manager({
|
|
410
|
+
val: val,
|
|
411
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
412
|
+
placeholder: () => audio_input_tag_defs[key]?.example,
|
|
413
|
+
})
|
|
414
|
+
additional_tags_input_prepped_loc[key] = tag_input_prepped_loc
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
additional_tags_input_prepped = additional_tags_input_prepped_loc
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
function clear() {
|
|
422
|
+
seed(null)
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
async function get_audio_metadata(audio_file) {
|
|
426
|
+
try {
|
|
427
|
+
let form_data = new FormData()
|
|
428
|
+
form_data.append("file", audio_file)
|
|
429
|
+
let response = await fetch(fetch_path_audio_read_tags, {
|
|
430
|
+
method: "POST",
|
|
431
|
+
body: form_data,
|
|
432
|
+
})
|
|
433
|
+
if (!response.ok) {
|
|
434
|
+
throw new Error(await response.text())
|
|
435
|
+
}
|
|
436
|
+
let res_body = await response.json()
|
|
437
|
+
let res = {
|
|
438
|
+
tags: null,
|
|
439
|
+
image: null,
|
|
440
|
+
}
|
|
441
|
+
if (res_body?.raw) {
|
|
442
|
+
res.tags = { ...audio_tags_input_base, ...res_body?.raw }
|
|
443
|
+
if (res_body?.raw?.["APIC"]?.imageBuffer) {
|
|
444
|
+
let buffer_data = res_body?.raw?.["APIC"]?.imageBuffer.data
|
|
445
|
+
let uint_8_array = new Uint8Array(buffer_data)
|
|
446
|
+
let blob = new Blob([uint_8_array], { type: res_body?.raw?.["APIC"]?.mime })
|
|
447
|
+
res.image = {
|
|
448
|
+
file: blob,
|
|
449
|
+
type: res_body?.raw?.["APIC"]?.mime,
|
|
450
|
+
src: URL.createObjectURL(blob),
|
|
451
|
+
size_kb: Math.ceil(blob.size / 1024),
|
|
452
|
+
description: res_body?.raw?.["APIC"]?.description,
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
return res
|
|
457
|
+
} catch (err) {
|
|
458
|
+
console.error(err)
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
function set_text_to_audio_input(val) {
|
|
463
|
+
text_to_audio_text_input_manager.set_val(val)
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
function set_is_text_to_audio(is_text_to_audio_input) {
|
|
467
|
+
is_text_to_audio = is_text_to_audio_input
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
async function resize_and_convert_image(src, max_width, max_height, output_format) {
|
|
471
|
+
return new Promise((resolve, reject) => {
|
|
472
|
+
let img = new Image()
|
|
473
|
+
img.crossOrigin = "anonymous"
|
|
474
|
+
img.onload = () => {
|
|
475
|
+
let canvas = document.createElement("canvas")
|
|
476
|
+
let ctx = canvas.getContext("2d")
|
|
477
|
+
let aspect_ratio = img.width / img.height
|
|
478
|
+
let new_width = max_width
|
|
479
|
+
let new_height = max_height
|
|
480
|
+
if (new_width / new_height > aspect_ratio) new_width = new_height * aspect_ratio
|
|
481
|
+
else new_height = new_width / aspect_ratio
|
|
482
|
+
canvas.width = new_width
|
|
483
|
+
canvas.height = new_height
|
|
484
|
+
ctx.drawImage(img, 0, 0, new_width, new_height)
|
|
485
|
+
resolve(canvas.toDataURL(output_format))
|
|
486
|
+
}
|
|
487
|
+
img.onerror = reject
|
|
488
|
+
img.src = src
|
|
489
|
+
})
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
async function generate_new_audio() {
|
|
493
|
+
try {
|
|
494
|
+
is_loading_generate_audio = true
|
|
495
|
+
error_message = null
|
|
496
|
+
success_message = null
|
|
497
|
+
let form_data = new FormData()
|
|
498
|
+
if (account?.id) {
|
|
499
|
+
form_data.append("account_id", account?.id)
|
|
500
|
+
}
|
|
501
|
+
let tags_input = {
|
|
502
|
+
TIT2: title_text_input_manager?.val ?? null,
|
|
503
|
+
TALB: album_title_text_input_manager?.val ?? null,
|
|
504
|
+
TPE1: artist_text_input_manager?.val ?? null,
|
|
505
|
+
APIC: {
|
|
506
|
+
mime: null,
|
|
507
|
+
type: {
|
|
508
|
+
id: 0,
|
|
509
|
+
},
|
|
510
|
+
description: image_description_text_input_manager?.val ?? null,
|
|
511
|
+
imageBuffer: null,
|
|
512
|
+
},
|
|
513
|
+
TYER: release_year_text_input_manager?.val ?? null,
|
|
514
|
+
USLT: {
|
|
515
|
+
language: language_dropdown_manager?.val ?? null,
|
|
516
|
+
text: lyrics_text_input_manager?.val ?? null,
|
|
517
|
+
},
|
|
518
|
+
TLAN: language_dropdown_manager?.val ?? null,
|
|
519
|
+
}
|
|
520
|
+
if (Object.keys(additional_tags_input_prepped || {}).length > 0) {
|
|
521
|
+
for (let [key, val] of Object.entries(additional_tags_input_prepped || {})) {
|
|
522
|
+
if (audio_input_tag_defs.hasOwnProperty(key)) {
|
|
523
|
+
tags_input[key] = val?.text_input_manager?.val
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
form_data.append("tags", JSON.stringify(tags_input))
|
|
528
|
+
form_data.append("file_name", file_name_text_input_manager?.val ?? null)
|
|
529
|
+
form_data.append("is_text_to_audio", is_text_to_audio)
|
|
530
|
+
if (is_text_to_audio) {
|
|
531
|
+
form_data.append("text_to_audio_input", text_to_audio_text_input_manager?.val)
|
|
532
|
+
form_data.append("voice_id", voice_id ?? null)
|
|
533
|
+
} else {
|
|
534
|
+
form_data.append("audio", audio_storage_picker_manager?.val?.file)
|
|
535
|
+
}
|
|
536
|
+
console.log("image_storage_picker_manager?.val", image_storage_picker_manager?.val)
|
|
537
|
+
if (image_storage_picker_manager?.val) {
|
|
538
|
+
let image_src = null
|
|
539
|
+
if (image_storage_picker_manager?.val?.file) {
|
|
540
|
+
image_src = URL.createObjectURL(image_storage_picker_manager?.val?.file)
|
|
541
|
+
} else if (image_storage_picker_manager?.val?.id) {
|
|
542
|
+
image_src = storage_src.replace("{storage_id}", image_storage_picker_manager?.val?.id)
|
|
543
|
+
console.log("image_src_replace", image_src)
|
|
544
|
+
}
|
|
545
|
+
console.log("image_src", image_src)
|
|
546
|
+
const sized_cover_base_64 = await resize_and_convert_image(image_src, 1000, 1000, "image/png")
|
|
547
|
+
console.log("sized_cover_base_64", sized_cover_base_64)
|
|
548
|
+
let sized_cover_file = await url_to_file(sized_cover_base_64, file_name_derived)
|
|
549
|
+
console.log("sized_cover_file", sized_cover_file)
|
|
550
|
+
form_data.append("image", sized_cover_file)
|
|
551
|
+
}
|
|
552
|
+
let response = await fetch(fetch_path_audio_post, {
|
|
553
|
+
method: "POST",
|
|
554
|
+
body: form_data,
|
|
555
|
+
})
|
|
556
|
+
console.log("fetch_audio_post_res", response)
|
|
557
|
+
if (!response.ok) {
|
|
558
|
+
let error_mes = await response.text()
|
|
559
|
+
is_loading_generate_audio = false
|
|
560
|
+
error_message = error_mes ?? "Error making audio changes."
|
|
561
|
+
return
|
|
562
|
+
}
|
|
563
|
+
let res_body = await response.json()
|
|
564
|
+
console.log("res_body1", res_body)
|
|
565
|
+
// add to new file to client side temporary_storage data
|
|
566
|
+
let new_audio_src = `${file_prefix}${res_body?.id}`
|
|
567
|
+
let new_audio_file = await url_to_file(new_audio_src, file_name_derived)
|
|
568
|
+
console.log("new_audio_file", new_audio_file)
|
|
569
|
+
is_loading_generate_audio = false
|
|
570
|
+
is_alt_content_shown = true
|
|
571
|
+
setTimeout(() => {
|
|
572
|
+
is_alt_content_shown = false
|
|
573
|
+
}, 1800)
|
|
574
|
+
generated_audio_file_obj = {
|
|
575
|
+
file: new_audio_file,
|
|
576
|
+
type: new_audio_file?.type,
|
|
577
|
+
src: new_audio_src,
|
|
578
|
+
file_name: new_audio_file?.name,
|
|
579
|
+
size_kb: Math.round(new_audio_file?.size * 0.001),
|
|
580
|
+
}
|
|
581
|
+
seed({ file: new_audio_file })
|
|
582
|
+
// optional: need third-party library to extract cover image from metadata clientside tbd. Already have working with server request but try and avoid that
|
|
583
|
+
audio_manager = create_audio_manager({
|
|
584
|
+
src: new_audio_src,
|
|
585
|
+
})
|
|
586
|
+
} catch (err) {
|
|
587
|
+
is_loading_generate_audio = false
|
|
588
|
+
error_message = err?.message ?? JSON.stringify(err)
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
async function download_audio_file() {
|
|
593
|
+
// file_name_tbd
|
|
594
|
+
let response = await fetch(generated_audio_file_obj?.src)
|
|
595
|
+
let blob = await response.blob()
|
|
596
|
+
let url = URL.createObjectURL(blob)
|
|
597
|
+
let link = document.createElement("a")
|
|
598
|
+
link.href = url
|
|
599
|
+
link.download = file_name_derived
|
|
600
|
+
document.body.appendChild(link)
|
|
601
|
+
link.click()
|
|
602
|
+
document.body.removeChild(link)
|
|
603
|
+
URL.revokeObjectURL(url)
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
function finish() {
|
|
607
|
+
if (typeof config?.on_finish == "function") {
|
|
608
|
+
config?.on_finish(generated_audio_file_obj)
|
|
609
|
+
}
|
|
610
|
+
popover_manager.close()
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
function init(config) {
|
|
614
|
+
is_popover = config?.is_popover ?? true
|
|
615
|
+
popover_manager = create_popover_manager({
|
|
616
|
+
min_width: 320,
|
|
617
|
+
target_width: 900,
|
|
618
|
+
min_height: 320,
|
|
619
|
+
target_height: 700,
|
|
620
|
+
header: "Edit Audio",
|
|
621
|
+
type: "center",
|
|
622
|
+
success_message: "Successfully Generated Audio File",
|
|
623
|
+
is_alt_content_shown: () => is_alt_content_shown,
|
|
624
|
+
})
|
|
625
|
+
clear_button_manager = create_button_manager({
|
|
626
|
+
type: "outlined",
|
|
627
|
+
text: "Clear",
|
|
628
|
+
is_compressed: true,
|
|
629
|
+
on_click: () => seed(),
|
|
630
|
+
})
|
|
631
|
+
download_audio_file_button_manager = create_button_manager({
|
|
632
|
+
type: "outlined",
|
|
633
|
+
is_disabled: () => is_disabled,
|
|
634
|
+
text: "Download",
|
|
635
|
+
support_icon: "download",
|
|
636
|
+
is_compressed: true,
|
|
637
|
+
on_click: () => download_audio_file(),
|
|
638
|
+
})
|
|
639
|
+
generate_audio_changes_button_manager = create_button_manager({
|
|
640
|
+
text: "Generate Audio Changes",
|
|
641
|
+
is_compressed: true,
|
|
642
|
+
is_loading: () => is_loading_generate_audio,
|
|
643
|
+
is_disabled: () =>
|
|
644
|
+
(!is_text_to_audio && !audio_storage_picker_manager?.val) ||
|
|
645
|
+
(is_text_to_audio && !text_to_audio_text_input_manager?.val),
|
|
646
|
+
on_click: () => generate_new_audio(),
|
|
647
|
+
})
|
|
648
|
+
finish_button_manager = create_button_manager({
|
|
649
|
+
type: "outlined",
|
|
650
|
+
text: "Finish",
|
|
651
|
+
support_icon: "check",
|
|
652
|
+
is_compressed: true,
|
|
653
|
+
is_disabled: () => is_disabled,
|
|
654
|
+
on_click: () => finish(),
|
|
655
|
+
})
|
|
656
|
+
use_text_to_audio_button_manager = create_button_manager({
|
|
657
|
+
type: "outlined",
|
|
658
|
+
support_icon: "speech",
|
|
659
|
+
text: "Use Text to Audio",
|
|
660
|
+
mr: 1,
|
|
661
|
+
is_compressed: true,
|
|
662
|
+
is_disabled: () => is_loading_generate_audio,
|
|
663
|
+
on_click: () => set_is_text_to_audio(true),
|
|
664
|
+
})
|
|
665
|
+
audio_storage_picker_manager = create_storage_picker_manager({
|
|
666
|
+
storage: storage,
|
|
667
|
+
default_folder_path: config?.storage_default_folder_path,
|
|
668
|
+
locally_uploaded_files: () => locally_uploaded_files,
|
|
669
|
+
storage_src: () => storage_src,
|
|
670
|
+
accept: ["audio/mpeg"],
|
|
671
|
+
is_show_button: false,
|
|
672
|
+
is_multiselect: false,
|
|
673
|
+
mb: 1,
|
|
674
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
675
|
+
})
|
|
676
|
+
file_name_text_input_manager = create_text_input_manager({
|
|
677
|
+
placeholder: "some_file_name",
|
|
678
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
679
|
+
})
|
|
680
|
+
title_text_input_manager = create_text_input_manager({
|
|
681
|
+
placeholder: audio_input_tag_defs?.TIT2?.example,
|
|
682
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
683
|
+
})
|
|
684
|
+
album_title_text_input_manager = create_text_input_manager({
|
|
685
|
+
placeholder: audio_input_tag_defs?.TALB?.example,
|
|
686
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
687
|
+
})
|
|
688
|
+
image_storage_picker_manager = create_storage_picker_manager({
|
|
689
|
+
storage: storage,
|
|
690
|
+
default_folder_path: config?.storage_default_folder_path,
|
|
691
|
+
locally_uploaded_files: () => locally_uploaded_files,
|
|
692
|
+
accept: ["image/png", "image/jpeg", "image/webp", "image/gif"],
|
|
693
|
+
is_multiselect: false,
|
|
694
|
+
mb: 1,
|
|
695
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
696
|
+
})
|
|
697
|
+
image_description_text_input_manager = create_text_input_manager({
|
|
698
|
+
placeholder: "Image Description",
|
|
699
|
+
mt: 1,
|
|
700
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
701
|
+
})
|
|
702
|
+
artist_text_input_manager = create_text_input_manager({
|
|
703
|
+
placeholder: audio_input_tag_defs?.TPE1?.example,
|
|
704
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
705
|
+
})
|
|
706
|
+
lyrics_text_input_manager = create_text_input_manager({
|
|
707
|
+
type: "text_area",
|
|
708
|
+
placeholder: "Lyrics of the audio",
|
|
709
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
710
|
+
})
|
|
711
|
+
release_year_text_input_manager = create_text_input_manager({
|
|
712
|
+
val: null,
|
|
713
|
+
type: "number",
|
|
714
|
+
max: 2100,
|
|
715
|
+
placeholder: audio_input_tag_defs?.TYER?.example,
|
|
716
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
717
|
+
})
|
|
718
|
+
language_dropdown_manager = create_dropdown_manager({
|
|
719
|
+
button_type: "outlined",
|
|
720
|
+
is_button_compressed: true,
|
|
721
|
+
is_clearable: true,
|
|
722
|
+
options: lang_options,
|
|
723
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
724
|
+
})
|
|
725
|
+
select_file_from_storage_button_manager = create_button_manager({
|
|
726
|
+
type: "outlined",
|
|
727
|
+
is_compressed: true,
|
|
728
|
+
text: "Select Audio File",
|
|
729
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
730
|
+
popover_target: () => `popover_${audio_storage_picker_manager?.popover_manager?.id}`,
|
|
731
|
+
})
|
|
732
|
+
use_mp3_file_button_manager = create_button_manager({
|
|
733
|
+
type: "outlined",
|
|
734
|
+
support_icon: "file",
|
|
735
|
+
text: "Use mp3 File",
|
|
736
|
+
mb: 0.5,
|
|
737
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
738
|
+
is_compressed: true,
|
|
739
|
+
on_click: () => set_is_text_to_audio(false),
|
|
740
|
+
})
|
|
741
|
+
text_to_audio_text_input_manager = create_text_input_manager({
|
|
742
|
+
type: "text_area",
|
|
743
|
+
rows: 7,
|
|
744
|
+
mt: 0.5,
|
|
745
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
746
|
+
placeholder: "Text to convert to audio",
|
|
747
|
+
})
|
|
748
|
+
file_name_text_input_manager = create_text_input_manager({
|
|
749
|
+
placeholder: "file_name",
|
|
750
|
+
val: null,
|
|
751
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
752
|
+
})
|
|
753
|
+
seed_from_input_popover_manager = create_popover_manager({
|
|
754
|
+
header: "Seed Audio",
|
|
755
|
+
type: "center",
|
|
756
|
+
target_width: 400,
|
|
757
|
+
target_height: 300,
|
|
758
|
+
anchor_id: () => `button_${seed_from_input_popover_button_manager?.id}`,
|
|
759
|
+
})
|
|
760
|
+
seed_from_input_popover_button_manager = create_button_manager({
|
|
761
|
+
type: "outlined",
|
|
762
|
+
text: "Seed from file",
|
|
763
|
+
is_compressed: true,
|
|
764
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
765
|
+
popover_target: () => `popover_${seed_from_input_popover_manager?.id}`,
|
|
766
|
+
})
|
|
767
|
+
seed_audio_storage_picker_manager = create_storage_picker_manager({
|
|
768
|
+
storage: storage,
|
|
769
|
+
default_folder_path: config?.storage_default_folder_path,
|
|
770
|
+
locally_uploaded_files: () => locally_uploaded_files,
|
|
771
|
+
accept: ["audio/mpeg"],
|
|
772
|
+
is_multiselect: false,
|
|
773
|
+
is_disabled: () => is_loading_generate_audio || is_disabled,
|
|
774
|
+
on_finish: (input) => {
|
|
775
|
+
seed(input)
|
|
776
|
+
seed_audio_storage_picker_manager.set_val(null)
|
|
777
|
+
},
|
|
778
|
+
})
|
|
779
|
+
audio_manager = null
|
|
780
|
+
clear_generated_audio_button_manager = create_button_manager({
|
|
781
|
+
type: "outlined",
|
|
782
|
+
text: "Clear",
|
|
783
|
+
is_compressed: true,
|
|
784
|
+
on_click: () => (generated_audio_file_obj = null),
|
|
785
|
+
})
|
|
786
|
+
edit_voice_popover_manager = create_popover_manager({
|
|
787
|
+
type: "center",
|
|
788
|
+
header: "Select Voice",
|
|
789
|
+
target_width: 500,
|
|
790
|
+
target_height: 400,
|
|
791
|
+
})
|
|
792
|
+
edit_voice_button_manager = create_button_manager({
|
|
793
|
+
type: "outlined",
|
|
794
|
+
text: "Edit",
|
|
795
|
+
support_icon: "edit",
|
|
796
|
+
is_compressed: true,
|
|
797
|
+
popover_target: () => `popover_${edit_voice_popover_manager?.id}`,
|
|
798
|
+
})
|
|
799
|
+
let voice_options_loc = []
|
|
800
|
+
for (let voice of voices) {
|
|
801
|
+
voice_options_loc.push({
|
|
802
|
+
...voice,
|
|
803
|
+
audio_manager: create_audio_manager({
|
|
804
|
+
ui_type: "short",
|
|
805
|
+
src: voice?.sample,
|
|
806
|
+
}),
|
|
807
|
+
select_button_manager: create_button_manager({
|
|
808
|
+
type: "outlined",
|
|
809
|
+
text: "Select",
|
|
810
|
+
selected_type: () => (voice?.id == voice_id ? "selected" : null),
|
|
811
|
+
on_click: () => {
|
|
812
|
+
voice_id = voice_id == voice?.id ? null : voice?.id
|
|
813
|
+
edit_voice_popover_manager.close()
|
|
814
|
+
},
|
|
815
|
+
}),
|
|
816
|
+
})
|
|
817
|
+
}
|
|
818
|
+
voice_options = voice_options_loc
|
|
819
|
+
const additional_metatag_options = Object.keys(audio_input_tag_defs || {})
|
|
820
|
+
.map((h) => ({ key: h, name: audio_input_tag_defs?.[h]?.name }))
|
|
821
|
+
.filter((h) => !audio_tags_input_base.hasOwnProperty(h?.key))
|
|
822
|
+
additional_metatags_dropdown_manager = create_dropdown_manager({
|
|
823
|
+
val: [],
|
|
824
|
+
is_clearable: true,
|
|
825
|
+
is_multiselect: true,
|
|
826
|
+
is_button_compressed: true,
|
|
827
|
+
options: additional_metatag_options,
|
|
828
|
+
on_change: (input) => {
|
|
829
|
+
let tags_input = {}
|
|
830
|
+
if (Array.isArray(input) && input.length > 0) {
|
|
831
|
+
for (let key of input) {
|
|
832
|
+
tags_input[key] = additional_tags_input_prepped?.[key]?.text_input_manager?.val ?? null
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
set_additional_tags_input_prepped(tags_input)
|
|
836
|
+
},
|
|
837
|
+
})
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
init(config)
|
|
841
|
+
|
|
842
|
+
return {
|
|
843
|
+
id,
|
|
844
|
+
get account() {
|
|
845
|
+
return account
|
|
846
|
+
},
|
|
847
|
+
get is_text_to_audio() {
|
|
848
|
+
return is_text_to_audio
|
|
849
|
+
},
|
|
850
|
+
get error_message() {
|
|
851
|
+
return error_message
|
|
852
|
+
},
|
|
853
|
+
get success_message() {
|
|
854
|
+
return success_message
|
|
855
|
+
},
|
|
856
|
+
get generate_audio_changes_button_manager() {
|
|
857
|
+
return generate_audio_changes_button_manager
|
|
858
|
+
},
|
|
859
|
+
get use_text_to_audio_button_manager() {
|
|
860
|
+
return use_text_to_audio_button_manager
|
|
861
|
+
},
|
|
862
|
+
get select_file_from_storage_button_manager() {
|
|
863
|
+
return select_file_from_storage_button_manager
|
|
864
|
+
},
|
|
865
|
+
get use_mp3_file_button_manager() {
|
|
866
|
+
return use_mp3_file_button_manager
|
|
867
|
+
},
|
|
868
|
+
get text_to_audio_text_input_manager() {
|
|
869
|
+
return text_to_audio_text_input_manager
|
|
870
|
+
},
|
|
871
|
+
get file_name_text_input_manager() {
|
|
872
|
+
return file_name_text_input_manager
|
|
873
|
+
},
|
|
874
|
+
get additional_tags_input_prepped() {
|
|
875
|
+
return additional_tags_input_prepped
|
|
876
|
+
},
|
|
877
|
+
get additional_tag_keys_ordered() {
|
|
878
|
+
return additional_tag_keys_ordered
|
|
879
|
+
},
|
|
880
|
+
get audio_storage_picker_manager() {
|
|
881
|
+
return audio_storage_picker_manager
|
|
882
|
+
},
|
|
883
|
+
get file_name_text_input_manager() {
|
|
884
|
+
return file_name_text_input_manager
|
|
885
|
+
},
|
|
886
|
+
get title_text_input_manager() {
|
|
887
|
+
return title_text_input_manager
|
|
888
|
+
},
|
|
889
|
+
get album_title_text_input_manager() {
|
|
890
|
+
return album_title_text_input_manager
|
|
891
|
+
},
|
|
892
|
+
get image_storage_picker_manager() {
|
|
893
|
+
return image_storage_picker_manager
|
|
894
|
+
},
|
|
895
|
+
get image_description_text_input_manager() {
|
|
896
|
+
return image_description_text_input_manager
|
|
897
|
+
},
|
|
898
|
+
get artist_text_input_manager() {
|
|
899
|
+
return artist_text_input_manager
|
|
900
|
+
},
|
|
901
|
+
get lyrics_text_input_manager() {
|
|
902
|
+
return lyrics_text_input_manager
|
|
903
|
+
},
|
|
904
|
+
get release_year_text_input_manager() {
|
|
905
|
+
return release_year_text_input_manager
|
|
906
|
+
},
|
|
907
|
+
get language_dropdown_manager() {
|
|
908
|
+
return language_dropdown_manager
|
|
909
|
+
},
|
|
910
|
+
get is_popover() {
|
|
911
|
+
return is_popover
|
|
912
|
+
},
|
|
913
|
+
get popover_manager() {
|
|
914
|
+
return popover_manager
|
|
915
|
+
},
|
|
916
|
+
get text_to_audio_time_in_minutes() {
|
|
917
|
+
return text_to_audio_time_in_minutes
|
|
918
|
+
},
|
|
919
|
+
get voice_options() {
|
|
920
|
+
return voice_options
|
|
921
|
+
},
|
|
922
|
+
get voice_id() {
|
|
923
|
+
return voice_id
|
|
924
|
+
},
|
|
925
|
+
get edit_voice_popover_manager() {
|
|
926
|
+
return edit_voice_popover_manager
|
|
927
|
+
},
|
|
928
|
+
get edit_voice_button_manager() {
|
|
929
|
+
return edit_voice_button_manager
|
|
930
|
+
},
|
|
931
|
+
get seed_from_input_popover_manager() {
|
|
932
|
+
return seed_from_input_popover_manager
|
|
933
|
+
},
|
|
934
|
+
get seed_from_input_popover_button_manager() {
|
|
935
|
+
return seed_from_input_popover_button_manager
|
|
936
|
+
},
|
|
937
|
+
get seed_audio_storage_picker_manager() {
|
|
938
|
+
return seed_audio_storage_picker_manager
|
|
939
|
+
},
|
|
940
|
+
get is_loading_generate_audio() {
|
|
941
|
+
return is_loading_generate_audio
|
|
942
|
+
},
|
|
943
|
+
get generated_audio_file_obj() {
|
|
944
|
+
return generated_audio_file_obj
|
|
945
|
+
},
|
|
946
|
+
get audio_manager() {
|
|
947
|
+
return audio_manager
|
|
948
|
+
},
|
|
949
|
+
get clear_generated_audio_button_manager() {
|
|
950
|
+
return clear_generated_audio_button_manager
|
|
951
|
+
},
|
|
952
|
+
get download_audio_file_button_manager() {
|
|
953
|
+
return download_audio_file_button_manager
|
|
954
|
+
},
|
|
955
|
+
get clear_button_manager() {
|
|
956
|
+
return clear_button_manager
|
|
957
|
+
},
|
|
958
|
+
get finish_button_manager() {
|
|
959
|
+
return finish_button_manager
|
|
960
|
+
},
|
|
961
|
+
get additional_metatags_dropdown_manager() {
|
|
962
|
+
return additional_metatags_dropdown_manager
|
|
963
|
+
},
|
|
964
|
+
audio_input_tag_defs,
|
|
965
|
+
lang_options,
|
|
966
|
+
init,
|
|
967
|
+
seed,
|
|
968
|
+
get_audio_metadata,
|
|
969
|
+
resize_and_convert_image,
|
|
970
|
+
set_text_to_audio_input,
|
|
971
|
+
generate_new_audio,
|
|
972
|
+
download_audio_file,
|
|
973
|
+
set_is_text_to_audio,
|
|
974
|
+
clear,
|
|
975
|
+
finish,
|
|
976
|
+
}
|
|
977
|
+
}
|