ssml-builder-js 2.11.0 → 2.13.0
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/README.md +61 -3
- package/dist/{chunk-SNRI43QJ.mjs → chunk-25LOR4AJ.mjs} +248 -4
- package/dist/chunk-25LOR4AJ.mjs.map +1 -0
- package/dist/chunk-CZ2F3TET.mjs +1745 -0
- package/dist/chunk-CZ2F3TET.mjs.map +1 -0
- package/dist/{chunk-FWWMWI2C.mjs → chunk-LCTE26LS.mjs} +248 -1701
- package/dist/chunk-LCTE26LS.mjs.map +1 -0
- package/dist/core.d.mts +54 -2
- package/dist/core.d.ts +54 -2
- package/dist/core.js +248 -3
- package/dist/core.js.map +1 -1
- package/dist/core.mjs +3 -1
- package/dist/elements.js +141 -3
- package/dist/elements.js.map +1 -1
- package/dist/elements.mjs +6 -4
- package/dist/elements.mjs.map +1 -1
- package/dist/index.d-Xbr6ZWnK.d.mts +214 -0
- package/dist/index.d-Xbr6ZWnK.d.ts +214 -0
- package/dist/index.d.mts +123 -2
- package/dist/index.d.ts +123 -2
- package/dist/index.js +1882 -18
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +176 -3
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.mts +61 -163
- package/dist/react.d.ts +61 -163
- package/dist/react.js +557 -16
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +276 -17
- package/dist/react.mjs.map +1 -1
- package/package.json +3 -2
- package/dist/chunk-FWWMWI2C.mjs.map +0 -1
- package/dist/chunk-SNRI43QJ.mjs.map +0 -1
package/dist/react.mjs
CHANGED
|
@@ -26,9 +26,8 @@ import {
|
|
|
26
26
|
SILENCE_VALUE_DESCRIPTIONS,
|
|
27
27
|
SILENCE_VALUE_PRESETS,
|
|
28
28
|
SSML_ATTRIBUTE_PRESETS,
|
|
29
|
+
SSML_ELEMENT_COPY,
|
|
29
30
|
SSML_HOVER_COPY,
|
|
30
|
-
buildPartialSsml,
|
|
31
|
-
buildSsml,
|
|
32
31
|
clearSsmlDocument,
|
|
33
32
|
createSsmlInsertionEdit,
|
|
34
33
|
findActiveSsmlTags,
|
|
@@ -42,10 +41,14 @@ import {
|
|
|
42
41
|
registerSsmlCompletionProvider,
|
|
43
42
|
resolveExpressAsStyles,
|
|
44
43
|
updateEditableText,
|
|
45
|
-
updateTagAttribute
|
|
44
|
+
updateTagAttribute
|
|
45
|
+
} from "./chunk-LCTE26LS.mjs";
|
|
46
|
+
import {
|
|
47
|
+
buildPartialSsml,
|
|
48
|
+
buildSsml,
|
|
46
49
|
validateAzureSsml,
|
|
47
50
|
validateSsml
|
|
48
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-CZ2F3TET.mjs";
|
|
49
52
|
import "./chunk-6S5ODO6A.mjs";
|
|
50
53
|
|
|
51
54
|
// packages/ssml-editor-react/src/SsmlEditor.tsx
|
|
@@ -1871,6 +1874,210 @@ function updateOptionalElementProperty(document2, path, property, value) {
|
|
|
1871
1874
|
return next;
|
|
1872
1875
|
});
|
|
1873
1876
|
}
|
|
1877
|
+
var VISUAL_ELEMENT_FIELDS = {
|
|
1878
|
+
voice: [
|
|
1879
|
+
{ key: "name", label: "Voice name" },
|
|
1880
|
+
{ key: "effect", label: "Effect" }
|
|
1881
|
+
],
|
|
1882
|
+
prosody: [
|
|
1883
|
+
{ key: "rate", label: "Rate" },
|
|
1884
|
+
{ key: "pitch", label: "Pitch" },
|
|
1885
|
+
{ key: "volume", label: "Volume" },
|
|
1886
|
+
{ key: "contour", label: "Contour" },
|
|
1887
|
+
{ key: "range", label: "Range" }
|
|
1888
|
+
],
|
|
1889
|
+
"express-as": [
|
|
1890
|
+
{ key: "style", label: "Style" },
|
|
1891
|
+
{ key: "styleDegree", label: "Style degree" },
|
|
1892
|
+
{ key: "role", label: "Role" }
|
|
1893
|
+
],
|
|
1894
|
+
expressAs: [
|
|
1895
|
+
{ key: "style", label: "Style" },
|
|
1896
|
+
{ key: "styleDegree", label: "Style degree" },
|
|
1897
|
+
{ key: "role", label: "Role" }
|
|
1898
|
+
],
|
|
1899
|
+
"mstts:express-as": [
|
|
1900
|
+
{ key: "style", label: "Style" },
|
|
1901
|
+
{ key: "styleDegree", label: "Style degree" },
|
|
1902
|
+
{ key: "role", label: "Role" }
|
|
1903
|
+
],
|
|
1904
|
+
"say-as": [
|
|
1905
|
+
{ key: "interpretAs", label: "Interpret as" },
|
|
1906
|
+
{ key: "format", label: "Format" },
|
|
1907
|
+
{ key: "detail", label: "Detail" }
|
|
1908
|
+
],
|
|
1909
|
+
sayAs: [
|
|
1910
|
+
{ key: "interpretAs", label: "Interpret as" },
|
|
1911
|
+
{ key: "format", label: "Format" },
|
|
1912
|
+
{ key: "detail", label: "Detail" }
|
|
1913
|
+
],
|
|
1914
|
+
phoneme: [
|
|
1915
|
+
{ key: "alphabet", label: "Alphabet" },
|
|
1916
|
+
{ key: "ph", label: "Pronunciation" }
|
|
1917
|
+
],
|
|
1918
|
+
emphasis: [{ key: "level", label: "Level" }],
|
|
1919
|
+
audio: [
|
|
1920
|
+
{ key: "src", label: "Source URL" },
|
|
1921
|
+
{ key: "desc", label: "Description" },
|
|
1922
|
+
{ key: "clipBegin", label: "Clip begin" },
|
|
1923
|
+
{ key: "clipEnd", label: "Clip end" },
|
|
1924
|
+
{ key: "speed", label: "Speed" },
|
|
1925
|
+
{ key: "repeatCount", label: "Repeat count" },
|
|
1926
|
+
{ key: "repeatDuration", label: "Repeat duration" },
|
|
1927
|
+
{ key: "soundLevel", label: "Sound level" }
|
|
1928
|
+
],
|
|
1929
|
+
mark: [{ key: "name", label: "Mark name" }],
|
|
1930
|
+
bookmark: [{ key: "mark", label: "Bookmark name" }],
|
|
1931
|
+
sub: [{ key: "alias", label: "Alias" }],
|
|
1932
|
+
lang: [{ key: "lang", label: "Language" }],
|
|
1933
|
+
lexicon: [{ key: "uri", label: "Lexicon URI" }],
|
|
1934
|
+
"mstts:silence": [
|
|
1935
|
+
{ key: "typeValue", label: "Silence type" },
|
|
1936
|
+
{ key: "value", label: "Value" }
|
|
1937
|
+
],
|
|
1938
|
+
silence: [
|
|
1939
|
+
{ key: "typeValue", label: "Silence type" },
|
|
1940
|
+
{ key: "value", label: "Value" }
|
|
1941
|
+
],
|
|
1942
|
+
"mstts:audioduration": [{ key: "value", label: "Duration" }],
|
|
1943
|
+
"mstts:ttsembedding": [{ key: "speakerProfileId", label: "Speaker profile ID" }],
|
|
1944
|
+
"mstts:embedding": [
|
|
1945
|
+
{ key: "id", label: "Embedding ID" },
|
|
1946
|
+
{ key: "speakerProfileId", label: "Speaker profile ID" }
|
|
1947
|
+
],
|
|
1948
|
+
"mstts:voiceconversion": [
|
|
1949
|
+
{ key: "url", label: "Source URL" },
|
|
1950
|
+
{ key: "profile", label: "Profile" },
|
|
1951
|
+
{ key: "speakerProfileId", label: "Speaker profile ID" }
|
|
1952
|
+
]
|
|
1953
|
+
};
|
|
1954
|
+
function getElementFields(element) {
|
|
1955
|
+
return VISUAL_ELEMENT_FIELDS[elementLabel(element)] ?? [];
|
|
1956
|
+
}
|
|
1957
|
+
function localizedElementLabel(element, locale) {
|
|
1958
|
+
return SSML_ELEMENT_COPY[locale][elementLabel(element)]?.label ?? elementLabel(element);
|
|
1959
|
+
}
|
|
1960
|
+
function filteredVoices(voiceCatalog, locale, region, style) {
|
|
1961
|
+
return (voiceCatalog ?? []).filter((voice) => {
|
|
1962
|
+
if (locale && voice.locale.toLowerCase() !== locale.toLowerCase()) return false;
|
|
1963
|
+
if (region && voice.region && voice.region.toLowerCase() !== region.toLowerCase()) return false;
|
|
1964
|
+
if (style && !voice.styles?.some((candidate) => candidate.toLowerCase() === style.toLowerCase())) return false;
|
|
1965
|
+
return true;
|
|
1966
|
+
});
|
|
1967
|
+
}
|
|
1968
|
+
function DefaultVoiceSelector({ value, voices, readOnly, locale, onChange }) {
|
|
1969
|
+
return /* @__PURE__ */ React.createElement(
|
|
1970
|
+
"select",
|
|
1971
|
+
{
|
|
1972
|
+
"aria-label": locale === "ja" ? "\u97F3\u58F0" : "Voice",
|
|
1973
|
+
value,
|
|
1974
|
+
disabled: readOnly,
|
|
1975
|
+
onChange: (event) => onChange(event.target.value)
|
|
1976
|
+
},
|
|
1977
|
+
/* @__PURE__ */ React.createElement("option", { value: "" }, locale === "ja" ? "\u97F3\u58F0\u3092\u9078\u629E" : "Select a voice"),
|
|
1978
|
+
voices.map((voice) => /* @__PURE__ */ React.createElement("option", { key: voice.name, value: voice.name }, voice.name, voice.preview || voice.status === "preview" ? " (preview)" : ""))
|
|
1979
|
+
);
|
|
1980
|
+
}
|
|
1981
|
+
function VisualElementInspector({
|
|
1982
|
+
document: document2,
|
|
1983
|
+
element,
|
|
1984
|
+
path,
|
|
1985
|
+
readOnly,
|
|
1986
|
+
commit,
|
|
1987
|
+
locale,
|
|
1988
|
+
customInspector,
|
|
1989
|
+
renderVoiceSelector,
|
|
1990
|
+
voiceCatalog,
|
|
1991
|
+
voiceLocale,
|
|
1992
|
+
voiceRegion,
|
|
1993
|
+
voiceStyle
|
|
1994
|
+
}) {
|
|
1995
|
+
if (customInspector) {
|
|
1996
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, customInspector({ document: document2, element, path, readOnly, onChange: commit, locale }));
|
|
1997
|
+
}
|
|
1998
|
+
const fields = getElementFields(element);
|
|
1999
|
+
const availableVoices = filteredVoices(voiceCatalog, voiceLocale, voiceRegion, voiceStyle);
|
|
2000
|
+
const renderSelector = renderVoiceSelector ?? DefaultVoiceSelector;
|
|
2001
|
+
return /* @__PURE__ */ React.createElement("fieldset", null, /* @__PURE__ */ React.createElement("legend", null, `<${elementLabel(element)}>`), fields.length === 0 ? /* @__PURE__ */ React.createElement("p", null, "This element is preserved in the visual tree. Edit its attributes in Code mode.") : fields.map((field) => {
|
|
2002
|
+
const value = element[field.key];
|
|
2003
|
+
const inputValue = value === void 0 ? "" : String(value);
|
|
2004
|
+
const inputId = `ssml-visual-${field.key}`;
|
|
2005
|
+
return /* @__PURE__ */ React.createElement("label", { key: field.key, htmlFor: inputId }, locale === "ja" ? {
|
|
2006
|
+
name: "\u540D\u524D",
|
|
2007
|
+
effect: "\u52B9\u679C",
|
|
2008
|
+
rate: "\u901F\u5EA6",
|
|
2009
|
+
pitch: "\u30D4\u30C3\u30C1",
|
|
2010
|
+
volume: "\u97F3\u91CF",
|
|
2011
|
+
contour: "\u30D4\u30C3\u30C1\u66F2\u7DDA",
|
|
2012
|
+
range: "\u7BC4\u56F2",
|
|
2013
|
+
style: "\u30B9\u30BF\u30A4\u30EB",
|
|
2014
|
+
styleDegree: "\u30B9\u30BF\u30A4\u30EB\u5F37\u5EA6",
|
|
2015
|
+
role: "\u5F79\u5272",
|
|
2016
|
+
interpretAs: "\u89E3\u91C8",
|
|
2017
|
+
alphabet: "\u30A2\u30EB\u30D5\u30A1\u30D9\u30C3\u30C8",
|
|
2018
|
+
ph: "\u767A\u97F3",
|
|
2019
|
+
level: "\u5F37\u8ABF\u30EC\u30D9\u30EB",
|
|
2020
|
+
src: "\u97F3\u58F0 URL",
|
|
2021
|
+
desc: "\u8AAC\u660E",
|
|
2022
|
+
clipBegin: "\u958B\u59CB\u4F4D\u7F6E",
|
|
2023
|
+
clipEnd: "\u7D42\u4E86\u4F4D\u7F6E",
|
|
2024
|
+
speed: "\u901F\u5EA6",
|
|
2025
|
+
repeatCount: "\u7E70\u308A\u8FD4\u3057\u56DE\u6570",
|
|
2026
|
+
repeatDuration: "\u7E70\u308A\u8FD4\u3057\u6642\u9593",
|
|
2027
|
+
soundLevel: "\u97F3\u91CF\u30EC\u30D9\u30EB",
|
|
2028
|
+
mark: "\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u540D",
|
|
2029
|
+
alias: "\u5225\u540D",
|
|
2030
|
+
lang: "\u8A00\u8A9E",
|
|
2031
|
+
uri: "\u8F9E\u66F8 URI",
|
|
2032
|
+
typeValue: "\u7121\u97F3\u306E\u7A2E\u985E",
|
|
2033
|
+
value: "\u5024",
|
|
2034
|
+
id: "\u57CB\u3081\u8FBC\u307F ID",
|
|
2035
|
+
speakerProfileId: "\u8A71\u8005\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB ID",
|
|
2036
|
+
url: "\u97F3\u58F0\u5909\u63DB URL",
|
|
2037
|
+
profile: "\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB"
|
|
2038
|
+
}[field.key] ?? field.label : field.label, field.key === "name" && elementLabel(element) === "voice" && voiceCatalog ? renderSelector({
|
|
2039
|
+
value: inputValue,
|
|
2040
|
+
voices: availableVoices,
|
|
2041
|
+
readOnly,
|
|
2042
|
+
locale,
|
|
2043
|
+
onChange: (value2) => commit(updateOptionalElementProperty(document2, path, field.key, value2))
|
|
2044
|
+
}) : field.multiline ? /* @__PURE__ */ React.createElement(
|
|
2045
|
+
"textarea",
|
|
2046
|
+
{
|
|
2047
|
+
id: inputId,
|
|
2048
|
+
value: inputValue,
|
|
2049
|
+
readOnly,
|
|
2050
|
+
onChange: (event) => commit(updateOptionalElementProperty(document2, path, field.key, event.target.value))
|
|
2051
|
+
}
|
|
2052
|
+
) : /* @__PURE__ */ React.createElement(
|
|
2053
|
+
"input",
|
|
2054
|
+
{
|
|
2055
|
+
id: inputId,
|
|
2056
|
+
value: inputValue,
|
|
2057
|
+
readOnly,
|
|
2058
|
+
onChange: (event) => commit(updateOptionalElementProperty(document2, path, field.key, event.target.value))
|
|
2059
|
+
}
|
|
2060
|
+
));
|
|
2061
|
+
}));
|
|
2062
|
+
}
|
|
2063
|
+
function getElementAncestors(nodes, path, ancestors = []) {
|
|
2064
|
+
const [index, ...rest] = path;
|
|
2065
|
+
const node = nodes[index];
|
|
2066
|
+
if (!node || !isElement(node)) return ancestors;
|
|
2067
|
+
if (rest.length === 0) return ancestors;
|
|
2068
|
+
return getElementAncestors(node.children ?? [], rest, [...ancestors, node]);
|
|
2069
|
+
}
|
|
2070
|
+
function buildVisualPreview(document2, leaf, selection) {
|
|
2071
|
+
const start = Math.max(0, Math.min(selection.start, leaf.value.length));
|
|
2072
|
+
const end = Math.max(start, Math.min(selection.end, leaf.value.length));
|
|
2073
|
+
const value = start === end ? leaf.value : leaf.value.slice(start, end);
|
|
2074
|
+
const ancestors = getElementAncestors(document2.children ?? [], leaf.path);
|
|
2075
|
+
const children = ancestors.reduceRight(
|
|
2076
|
+
(current, ancestor) => [{ ...ancestor, children: current }],
|
|
2077
|
+
[value]
|
|
2078
|
+
);
|
|
2079
|
+
return buildSsml({ ...document2, children });
|
|
2080
|
+
}
|
|
1874
2081
|
function addDialogTurn(document2, path) {
|
|
1875
2082
|
return updateElementAtPath(document2, path, (element) => ({
|
|
1876
2083
|
...element,
|
|
@@ -1925,13 +2132,21 @@ function VisualSsmlEditor({
|
|
|
1925
2132
|
document: document2,
|
|
1926
2133
|
readOnly = false,
|
|
1927
2134
|
onChange,
|
|
1928
|
-
onPreviewSelection
|
|
2135
|
+
onPreviewSelection,
|
|
2136
|
+
locale = "en",
|
|
2137
|
+
customInspectors,
|
|
2138
|
+
renderVoiceSelector,
|
|
2139
|
+
voiceCatalog,
|
|
2140
|
+
voiceLocale,
|
|
2141
|
+
voiceRegion,
|
|
2142
|
+
voiceStyle
|
|
1929
2143
|
}) {
|
|
1930
2144
|
const [selectedPath, setSelectedPath] = useState2(null);
|
|
1931
2145
|
const [selection, setSelection] = useState2({ start: 0, end: 0 });
|
|
1932
2146
|
const textLeaves = useMemo(() => collectTextLeaves(document2.children ?? []), [document2]);
|
|
1933
2147
|
const selectedLeaf = textLeaves.find((leaf) => leaf.path.join(".") === selectedPath?.join(".")) ?? textLeaves[0];
|
|
1934
2148
|
const selectedElement = selectedPath ? getNodeAtPath(document2.children ?? [], selectedPath) : void 0;
|
|
2149
|
+
const selectedCustomInspector = selectedElement && isElement(selectedElement) ? customInspectors?.[elementLabel(selectedElement)] ?? customInspectors?.[selectedElement.type] : void 0;
|
|
1935
2150
|
const diagnostics = useMemo(() => validateAzureSsml(buildSsml(document2)), [document2]);
|
|
1936
2151
|
const commit = (nextDocument) => onChange?.(nextDocument);
|
|
1937
2152
|
const applyWrapper = (tag, attributes) => {
|
|
@@ -1949,29 +2164,43 @@ function VisualSsmlEditor({
|
|
|
1949
2164
|
selectedPath,
|
|
1950
2165
|
onSelect: setSelectedPath
|
|
1951
2166
|
}
|
|
1952
|
-
)))), /* @__PURE__ */ React.createElement("div", { className: "ssml-editor-visual-form" }, selectedElement && isElement(selectedElement)
|
|
2167
|
+
)))), /* @__PURE__ */ React.createElement("div", { className: "ssml-editor-visual-form" }, selectedCustomInspector && selectedElement && isElement(selectedElement) ? selectedCustomInspector({
|
|
2168
|
+
document: document2,
|
|
2169
|
+
element: selectedElement,
|
|
2170
|
+
path: selectedPath ?? [],
|
|
2171
|
+
readOnly,
|
|
2172
|
+
onChange: commit,
|
|
2173
|
+
locale
|
|
2174
|
+
}) : selectedElement && isElement(selectedElement) && selectedElement.type === "mstts:dialog" ? /* @__PURE__ */ React.createElement("fieldset", null, /* @__PURE__ */ React.createElement("legend", null, localizedElementLabel(selectedElement, locale)), /* @__PURE__ */ React.createElement("p", null, SSML_ELEMENT_COPY[locale][elementLabel(selectedElement)]?.description), /* @__PURE__ */ React.createElement(
|
|
1953
2175
|
"button",
|
|
1954
2176
|
{
|
|
1955
2177
|
type: "button",
|
|
1956
2178
|
disabled: readOnly,
|
|
1957
2179
|
onClick: () => commit(addDialogTurn(document2, selectedPath ?? []))
|
|
1958
2180
|
},
|
|
1959
|
-
"Add turn"
|
|
1960
|
-
)) : selectedElement && isElement(selectedElement) && selectedElement.type === "mstts:turn" ? /* @__PURE__ */ React.createElement("fieldset", null, /* @__PURE__ */ React.createElement("legend", null,
|
|
2181
|
+
locale === "ja" ? "\u30BF\u30FC\u30F3\u3092\u8FFD\u52A0" : "Add turn"
|
|
2182
|
+
)) : selectedElement && isElement(selectedElement) && selectedElement.type === "mstts:turn" ? /* @__PURE__ */ React.createElement("fieldset", null, /* @__PURE__ */ React.createElement("legend", null, localizedElementLabel(selectedElement, locale)), /* @__PURE__ */ React.createElement("label", { htmlFor: "ssml-visual-turn-voice" }, locale === "ja" ? "\u97F3\u58F0" : "Voice", voiceCatalog ? (renderVoiceSelector ?? DefaultVoiceSelector)({
|
|
2183
|
+
value: selectedElement.voice ?? "",
|
|
2184
|
+
voices: filteredVoices(voiceCatalog, voiceLocale, voiceRegion, voiceStyle),
|
|
2185
|
+
readOnly,
|
|
2186
|
+
locale,
|
|
2187
|
+
onChange: (value) => commit(updateOptionalElementProperty(document2, selectedPath ?? [], "voice", value))
|
|
2188
|
+
}) : /* @__PURE__ */ React.createElement(
|
|
1961
2189
|
"input",
|
|
1962
2190
|
{
|
|
2191
|
+
id: "ssml-visual-turn-voice",
|
|
1963
2192
|
value: selectedElement.voice ?? "",
|
|
1964
2193
|
readOnly,
|
|
1965
2194
|
onChange: (event) => commit(updateOptionalElementProperty(document2, selectedPath ?? [], "voice", event.target.value))
|
|
1966
2195
|
}
|
|
1967
|
-
)), /* @__PURE__ */ React.createElement("label", null, "Speaker", /* @__PURE__ */ React.createElement(
|
|
2196
|
+
)), /* @__PURE__ */ React.createElement("label", null, locale === "ja" ? "\u8A71\u8005" : "Speaker", /* @__PURE__ */ React.createElement(
|
|
1968
2197
|
"input",
|
|
1969
2198
|
{
|
|
1970
2199
|
value: selectedElement.speaker ?? "",
|
|
1971
2200
|
readOnly,
|
|
1972
2201
|
onChange: (event) => commit(updateOptionalElementProperty(document2, selectedPath ?? [], "speaker", event.target.value))
|
|
1973
2202
|
}
|
|
1974
|
-
)), /* @__PURE__ */ React.createElement("label", null, "Turn text", /* @__PURE__ */ React.createElement(
|
|
2203
|
+
)), /* @__PURE__ */ React.createElement("label", null, locale === "ja" ? "\u767A\u8A71\u30C6\u30AD\u30B9\u30C8" : "Turn text", /* @__PURE__ */ React.createElement(
|
|
1975
2204
|
"textarea",
|
|
1976
2205
|
{
|
|
1977
2206
|
value: selectedElement.children?.filter((child) => typeof child === "string").join("") ?? "",
|
|
@@ -1984,35 +2213,51 @@ function VisualSsmlEditor({
|
|
|
1984
2213
|
)
|
|
1985
2214
|
)
|
|
1986
2215
|
}
|
|
1987
|
-
))) : selectedElement && isElement(selectedElement) && selectedElement.type === "mstts:backgroundaudio" ? /* @__PURE__ */ React.createElement("fieldset", null, /* @__PURE__ */ React.createElement("legend", null,
|
|
2216
|
+
))) : selectedElement && isElement(selectedElement) && selectedElement.type === "mstts:backgroundaudio" ? /* @__PURE__ */ React.createElement("fieldset", null, /* @__PURE__ */ React.createElement("legend", null, localizedElementLabel(selectedElement, locale)), /* @__PURE__ */ React.createElement("label", null, locale === "ja" ? "\u97F3\u58F0 URL" : "Source URL", /* @__PURE__ */ React.createElement(
|
|
1988
2217
|
"input",
|
|
1989
2218
|
{
|
|
1990
2219
|
value: selectedElement.src ?? "",
|
|
1991
2220
|
readOnly,
|
|
1992
2221
|
onChange: (event) => commit(updateOptionalElementProperty(document2, selectedPath ?? [], "src", event.target.value))
|
|
1993
2222
|
}
|
|
1994
|
-
)), /* @__PURE__ */ React.createElement("label", null, "Volume", /* @__PURE__ */ React.createElement(
|
|
2223
|
+
)), /* @__PURE__ */ React.createElement("label", null, locale === "ja" ? "\u97F3\u91CF" : "Volume", /* @__PURE__ */ React.createElement(
|
|
1995
2224
|
"input",
|
|
1996
2225
|
{
|
|
1997
2226
|
value: selectedElement.volume === void 0 ? "" : String(selectedElement.volume),
|
|
1998
2227
|
readOnly,
|
|
1999
2228
|
onChange: (event) => commit(updateOptionalElementProperty(document2, selectedPath ?? [], "volume", event.target.value))
|
|
2000
2229
|
}
|
|
2001
|
-
)), /* @__PURE__ */ React.createElement("label", null, "Fade in", /* @__PURE__ */ React.createElement(
|
|
2230
|
+
)), /* @__PURE__ */ React.createElement("label", null, locale === "ja" ? "\u30D5\u30A7\u30FC\u30C9\u30A4\u30F3" : "Fade in", /* @__PURE__ */ React.createElement(
|
|
2002
2231
|
"input",
|
|
2003
2232
|
{
|
|
2004
2233
|
value: selectedElement.fadeIn === void 0 ? "" : String(selectedElement.fadeIn),
|
|
2005
2234
|
readOnly,
|
|
2006
2235
|
onChange: (event) => commit(updateOptionalElementProperty(document2, selectedPath ?? [], "fadeIn", event.target.value))
|
|
2007
2236
|
}
|
|
2008
|
-
)), /* @__PURE__ */ React.createElement("label", null, "Fade out", /* @__PURE__ */ React.createElement(
|
|
2237
|
+
)), /* @__PURE__ */ React.createElement("label", null, locale === "ja" ? "\u30D5\u30A7\u30FC\u30C9\u30A2\u30A6\u30C8" : "Fade out", /* @__PURE__ */ React.createElement(
|
|
2009
2238
|
"input",
|
|
2010
2239
|
{
|
|
2011
2240
|
value: selectedElement.fadeOut === void 0 ? "" : String(selectedElement.fadeOut),
|
|
2012
2241
|
readOnly,
|
|
2013
2242
|
onChange: (event) => commit(updateOptionalElementProperty(document2, selectedPath ?? [], "fadeOut", event.target.value))
|
|
2014
2243
|
}
|
|
2015
|
-
))) :
|
|
2244
|
+
))) : selectedElement && isElement(selectedElement) ? /* @__PURE__ */ React.createElement(
|
|
2245
|
+
VisualElementInspector,
|
|
2246
|
+
{
|
|
2247
|
+
document: document2,
|
|
2248
|
+
element: selectedElement,
|
|
2249
|
+
path: selectedPath ?? [],
|
|
2250
|
+
readOnly,
|
|
2251
|
+
commit,
|
|
2252
|
+
locale,
|
|
2253
|
+
customInspector: customInspectors?.[elementLabel(selectedElement)] ?? customInspectors?.[selectedElement.type],
|
|
2254
|
+
renderVoiceSelector,
|
|
2255
|
+
voiceCatalog,
|
|
2256
|
+
voiceLocale,
|
|
2257
|
+
voiceRegion,
|
|
2258
|
+
voiceStyle
|
|
2259
|
+
}
|
|
2260
|
+
) : selectedLeaf ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("label", null, "Text", /* @__PURE__ */ React.createElement(
|
|
2016
2261
|
"textarea",
|
|
2017
2262
|
{
|
|
2018
2263
|
value: selectedLeaf.value,
|
|
@@ -2040,7 +2285,7 @@ function VisualSsmlEditor({
|
|
|
2040
2285
|
"button",
|
|
2041
2286
|
{
|
|
2042
2287
|
type: "button",
|
|
2043
|
-
onClick: () => onPreviewSelection(
|
|
2288
|
+
onClick: () => onPreviewSelection(buildVisualPreview(document2, selectedLeaf, selection))
|
|
2044
2289
|
},
|
|
2045
2290
|
"Preview selection"
|
|
2046
2291
|
))) : /* @__PURE__ */ React.createElement("p", null, "Select an element or text node to edit it."))));
|
|
@@ -2628,6 +2873,12 @@ var SsmlEditor = forwardRef(function SsmlEditor2({
|
|
|
2628
2873
|
insertionGroups,
|
|
2629
2874
|
customInsertions,
|
|
2630
2875
|
additionalInsertions,
|
|
2876
|
+
customInspectors,
|
|
2877
|
+
renderVoiceSelector,
|
|
2878
|
+
voiceCatalog,
|
|
2879
|
+
voiceLocale,
|
|
2880
|
+
voiceRegion,
|
|
2881
|
+
voiceStyle,
|
|
2631
2882
|
emotionStyles,
|
|
2632
2883
|
className,
|
|
2633
2884
|
style,
|
|
@@ -3019,7 +3270,14 @@ var SsmlEditor = forwardRef(function SsmlEditor2({
|
|
|
3019
3270
|
document: draftDocument,
|
|
3020
3271
|
readOnly: isReadOnly,
|
|
3021
3272
|
onChange: commit,
|
|
3022
|
-
onPreviewSelection
|
|
3273
|
+
onPreviewSelection,
|
|
3274
|
+
locale: localeProp ?? languageProp,
|
|
3275
|
+
customInspectors,
|
|
3276
|
+
renderVoiceSelector,
|
|
3277
|
+
voiceCatalog,
|
|
3278
|
+
voiceLocale,
|
|
3279
|
+
voiceRegion,
|
|
3280
|
+
voiceStyle
|
|
3023
3281
|
}
|
|
3024
3282
|
)) : /* @__PURE__ */ React.createElement("div", { style: { ...editorStyles.editor, minHeight: editorMinHeight } }, /* @__PURE__ */ React.createElement(
|
|
3025
3283
|
Editor,
|
|
@@ -3079,6 +3337,7 @@ var SsmlEditor = forwardRef(function SsmlEditor2({
|
|
|
3079
3337
|
export {
|
|
3080
3338
|
EDITOR_COPY,
|
|
3081
3339
|
INLINE_BADGE_COPY,
|
|
3340
|
+
SSML_ELEMENT_COPY,
|
|
3082
3341
|
SSML_HOVER_COPY,
|
|
3083
3342
|
SSML_INSERTIONS,
|
|
3084
3343
|
SsmlEditor,
|