ssml-builder-js 2.1.0 → 2.2.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 +77 -8
- package/dist/chunk-2XJER2BG.mjs +3486 -0
- package/dist/chunk-2XJER2BG.mjs.map +1 -0
- package/dist/elements.d.mts +72 -0
- package/dist/elements.d.ts +72 -0
- package/dist/elements.js +4577 -0
- package/dist/elements.js.map +1 -0
- package/dist/elements.mjs +1234 -0
- package/dist/elements.mjs.map +1 -0
- package/dist/react.d.mts +5 -0
- package/dist/react.d.ts +5 -0
- package/dist/react.js +558 -236
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +212 -3288
- package/dist/react.mjs.map +1 -1
- package/package.json +11 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../packages/ssml-editor-react/src/ssmlInsertions.ts","../packages/ssml-editor-elements/src/SsmlEditorElement.ts","../packages/ssml-editor-elements/src/index.ts","../src/elements.ts"],"sourcesContent":["import type { SsmlEditorLocalizedText } from \"./locales\";\nimport {\n BREAK_TIME_DESCRIPTIONS,\n BREAK_TIME_PRESETS,\n EMPHASIS_LEVEL_DESCRIPTIONS,\n EMPHASIS_LEVEL_PRESETS,\n EXPRESS_AS_STYLE_DESCRIPTIONS,\n EXPRESS_AS_STYLE_PRESETS,\n LANGUAGE_DESCRIPTIONS,\n LANGUAGE_PRESETS,\n PROSODY_PITCH_DESCRIPTIONS,\n PROSODY_PITCH_PRESETS,\n PROSODY_RATE_DESCRIPTIONS,\n PROSODY_RATE_PRESETS,\n PROSODY_VOLUME_DESCRIPTIONS,\n PROSODY_VOLUME_PRESETS,\n SAY_AS_DESCRIPTIONS,\n SAY_AS_PRESETS,\n SILENCE_VALUE_DESCRIPTIONS,\n SILENCE_VALUE_PRESETS,\n} from \"./constants/ssmlPresets\";\n\nexport type SsmlEditorInsertionMode = \"insert\" | \"wrap\";\n\nexport interface SsmlEditorInsertionOption {\n value: string;\n labels: SsmlEditorLocalizedText;\n descriptions?: SsmlEditorLocalizedText;\n}\n\nexport interface SsmlEditorInsertionTemplate {\n prefix: string;\n suffix: string;\n mode: SsmlEditorInsertionMode;\n}\n\nexport interface SsmlEditorInsertionDefinition {\n id: string;\n icon: string;\n tagName?: string;\n selfClosing?: boolean;\n labels: SsmlEditorLocalizedText;\n titles?: SsmlEditorLocalizedText;\n descriptions: SsmlEditorLocalizedText;\n parameterDescription: SsmlEditorLocalizedText;\n options: readonly SsmlEditorInsertionOption[];\n createTemplate: (value: string) => SsmlEditorInsertionTemplate;\n}\n\nexport interface SsmlEditorCustomInsertionDefinition {\n id: string;\n tagName: string;\n attribute?: string;\n icon?: string;\n labels: SsmlEditorLocalizedText;\n titles?: SsmlEditorLocalizedText;\n descriptions?: SsmlEditorLocalizedText;\n parameterDescription?: SsmlEditorLocalizedText;\n options: readonly SsmlEditorInsertionOption[];\n mode?: SsmlEditorInsertionMode;\n}\n\nexport type SsmlEditorCustomInsertion = SsmlEditorInsertionDefinition | SsmlEditorCustomInsertionDefinition;\n\nexport type SsmlEditorCustomInsertionCollection =\n | readonly SsmlEditorCustomInsertion[]\n | Readonly<Record<string, SsmlEditorCustomInsertion | undefined>>;\n\nexport interface SsmlEditorInsertionGroup {\n id: string;\n labels: SsmlEditorLocalizedText;\n insertionIds: readonly string[];\n}\n\nexport interface SsmlEditorToolbarGroup {\n id: string;\n buttonIds: readonly string[];\n}\n\nfunction localizedText(value: string): SsmlEditorLocalizedText {\n return { ja: value, en: value };\n}\n\nfunction escapeXmlAttribute(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/'/g, \"'\");\n}\n\nexport function createSsmlEditorInsertionDefinition(\n definition: SsmlEditorCustomInsertionDefinition,\n): SsmlEditorInsertionDefinition {\n const mode = definition.mode ?? \"wrap\";\n const attribute = definition.attribute ? ` ${definition.attribute}=\"` : \"\";\n\n return {\n id: definition.id,\n icon: definition.icon ?? \"+\",\n tagName: definition.tagName,\n selfClosing: mode === \"insert\",\n labels: definition.labels,\n titles: definition.titles,\n descriptions: definition.descriptions ?? localizedText(`Inserts the <${definition.tagName}> element.`),\n parameterDescription:\n definition.parameterDescription ?? localizedText(`Selects the value for the <${definition.tagName}> element.`),\n options: definition.options,\n createTemplate: (value) => {\n const attributeValue = definition.attribute ? `${attribute}${escapeXmlAttribute(value)}\"` : \"\";\n if (mode === \"wrap\") {\n return {\n prefix: `<${definition.tagName}${attributeValue}>`,\n suffix: `</${definition.tagName}>`,\n mode,\n };\n }\n\n return {\n prefix: `<${definition.tagName}${attributeValue}/>`,\n suffix: \"\",\n mode,\n };\n },\n };\n}\n\nfunction createInsertionOptions(\n values: readonly string[],\n descriptions?: Readonly<Record<string, SsmlEditorLocalizedText>>,\n): readonly SsmlEditorInsertionOption[] {\n return values.map((value) => ({\n value,\n labels: { ja: value, en: value },\n ...(descriptions?.[value] ? { descriptions: descriptions[value] } : {}),\n }));\n}\n\nexport const SSML_INSERTIONS = [\n {\n id: \"break\",\n icon: \"⏸\",\n tagName: \"break\",\n selfClosing: true,\n labels: { ja: \"間\", en: \"Break\" },\n descriptions: {\n ja: \"指定した時間だけ無音の間を挿入します。\",\n en: \"Inserts a silent pause for the selected duration.\",\n },\n parameterDescription: {\n ja: \"無音にする時間を選択します。\",\n en: \"Selects the duration of the silent pause.\",\n },\n options: createInsertionOptions(BREAK_TIME_PRESETS, BREAK_TIME_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<break time=\"${value}\"/>`,\n suffix: \"\",\n mode: \"insert\",\n }),\n },\n {\n id: \"emphasis\",\n icon: \"✦\",\n tagName: \"emphasis\",\n labels: { ja: \"強調\", en: \"Emphasis\" },\n descriptions: {\n ja: \"選択範囲の強調レベルを変更します。\",\n en: \"Changes the emphasis level of the selected text.\",\n },\n parameterDescription: {\n ja: \"選択範囲の強調レベルを選択します。\",\n en: \"Selects the emphasis level for the selected text.\",\n },\n options: createInsertionOptions(EMPHASIS_LEVEL_PRESETS, EMPHASIS_LEVEL_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<emphasis level=\"${value}\">`,\n suffix: \"</emphasis>\",\n mode: \"wrap\",\n }),\n },\n {\n id: \"rate\",\n icon: \"↕\",\n tagName: \"prosody\",\n labels: { ja: \"速度\", en: \"Rate\" },\n descriptions: {\n ja: \"選択範囲の読み上げ速度を変更します。\",\n en: \"Changes the speech rate of the selected text.\",\n },\n parameterDescription: {\n ja: \"選択範囲の読み上げ速度を選択します。\",\n en: \"Selects the speech rate for the selected text.\",\n },\n options: createInsertionOptions(PROSODY_RATE_PRESETS, PROSODY_RATE_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<prosody rate=\"${value}\">`,\n suffix: \"</prosody>\",\n mode: \"wrap\",\n }),\n },\n {\n id: \"pitch\",\n icon: \"↗\",\n tagName: \"prosody\",\n labels: { ja: \"高さ\", en: \"Pitch\" },\n descriptions: {\n ja: \"選択範囲の声の高さを変更します。\",\n en: \"Changes the pitch of the selected text.\",\n },\n parameterDescription: {\n ja: \"選択範囲の声の高さを半音単位で選択します。\",\n en: \"Selects the pitch adjustment in semitone steps.\",\n },\n options: createInsertionOptions(PROSODY_PITCH_PRESETS, PROSODY_PITCH_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<prosody pitch=\"${value}\">`,\n suffix: \"</prosody>\",\n mode: \"wrap\",\n }),\n },\n {\n id: \"volume\",\n icon: \"🔊\",\n tagName: \"prosody\",\n labels: { ja: \"音量\", en: \"Volume\" },\n descriptions: {\n ja: \"選択範囲の音量を変更します。\",\n en: \"Changes the volume of the selected text.\",\n },\n parameterDescription: {\n ja: \"選択範囲の音量レベルを選択します。\",\n en: \"Selects the volume level for the selected text.\",\n },\n options: createInsertionOptions(PROSODY_VOLUME_PRESETS, PROSODY_VOLUME_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<prosody volume=\"${value}\">`,\n suffix: \"</prosody>\",\n mode: \"wrap\",\n }),\n },\n {\n id: \"emotion\",\n icon: \"☺\",\n tagName: \"mstts:express-as\",\n labels: { ja: \"感情\", en: \"Emotion\" },\n descriptions: {\n ja: \"選択範囲に音声の感情スタイルを適用します。\",\n en: \"Applies a voice emotion style to the selected text.\",\n },\n parameterDescription: {\n ja: \"選択範囲に適用する音声の感情スタイルを選択します。\",\n en: \"Selects the voice emotion style to apply.\",\n },\n options: createInsertionOptions(EXPRESS_AS_STYLE_PRESETS, EXPRESS_AS_STYLE_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<mstts:express-as style=\"${value}\">`,\n suffix: \"</mstts:express-as>\",\n mode: \"wrap\",\n }),\n },\n {\n id: \"say-as\",\n icon: \"Aa\",\n tagName: \"say-as\",\n labels: { ja: \"読み上げ\", en: \"Say as\" },\n descriptions: {\n ja: \"数字や日付などの読み上げ方を指定します。\",\n en: \"Specifies how values such as numbers or dates are spoken.\",\n },\n parameterDescription: {\n ja: \"選択範囲の読み上げ方を選択します。\",\n en: \"Selects how the selected text is spoken.\",\n },\n options: createInsertionOptions(SAY_AS_PRESETS, SAY_AS_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<say-as interpret-as=\"${value}\">`,\n suffix: \"</say-as>\",\n mode: \"wrap\",\n }),\n },\n {\n id: \"lang\",\n icon: \"文\",\n tagName: \"lang\",\n labels: { ja: \"言語\", en: \"Language\" },\n descriptions: {\n ja: \"選択範囲の読み上げ言語を変更します。\",\n en: \"Changes the speaking language of the selected text.\",\n },\n parameterDescription: {\n ja: \"選択範囲に適用する BCP-47 言語タグを選択します。\",\n en: \"Selects the BCP-47 language tag for the selected text.\",\n },\n options: createInsertionOptions(LANGUAGE_PRESETS, LANGUAGE_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<lang xml:lang=\"${value}\">`,\n suffix: \"</lang>\",\n mode: \"wrap\",\n }),\n },\n {\n id: \"mstts:silence\",\n icon: \"⏳\",\n tagName: \"mstts:silence\",\n selfClosing: true,\n labels: { ja: \"無音\", en: \"Silence\" },\n descriptions: {\n ja: \"無音時間を挿入します。\",\n en: \"Inserts a silence interval.\",\n },\n parameterDescription: {\n ja: \"無音にする時間を選択します。\",\n en: \"Selects the silence duration.\",\n },\n options: createInsertionOptions(SILENCE_VALUE_PRESETS, SILENCE_VALUE_DESCRIPTIONS),\n createTemplate: (value) => ({\n prefix: `<mstts:silence type=\"Leading\" value=\"${value}\"/>`,\n suffix: \"\",\n mode: \"insert\",\n }),\n },\n] satisfies readonly SsmlEditorInsertionDefinition[];\n\nexport const DEFAULT_INSERTION_GROUPS = [\n {\n id: \"pauses\",\n labels: { ja: \"間・無音\", en: \"Pauses\" },\n insertionIds: [\"break\", \"mstts:silence\"],\n },\n {\n id: \"prosody\",\n labels: { ja: \"声の調整\", en: \"Voice\" },\n insertionIds: [\"rate\", \"pitch\", \"volume\"],\n },\n {\n id: \"expression\",\n labels: { ja: \"表現\", en: \"Expression\" },\n insertionIds: [\"emphasis\", \"emotion\"],\n },\n {\n id: \"pronunciation\",\n labels: { ja: \"読み上げ\", en: \"Pronunciation\" },\n insertionIds: [\"say-as\", \"lang\"],\n },\n] satisfies readonly SsmlEditorInsertionGroup[];\n\nexport function createDefaultToolbarGroups(\n insertionGroups: readonly SsmlEditorInsertionGroup[],\n): readonly SsmlEditorToolbarGroup[] {\n return [\n {\n id: \"history\",\n buttonIds: [\"undo\", \"redo\"],\n },\n ...insertionGroups.map(({ id, insertionIds }) => ({\n id,\n buttonIds: insertionIds,\n })),\n {\n id: \"document\",\n buttonIds: [\"clearAll\", \"format\", \"decorations\"],\n },\n {\n id: \"help\",\n buttonIds: [\"help\"],\n },\n ];\n}\n\nfunction getInsertionCollection(\n collection: SsmlEditorCustomInsertionCollection | undefined,\n): readonly SsmlEditorCustomInsertion[] {\n if (!collection) {\n return [];\n }\n\n return Array.isArray(collection)\n ? collection\n : Object.values(collection).filter((insertion): insertion is SsmlEditorCustomInsertion => insertion !== undefined);\n}\n\nexport function getConfiguredInsertions(\n emotionStyles: readonly string[] | undefined,\n customInsertions: SsmlEditorCustomInsertionCollection | undefined,\n additionalInsertions: SsmlEditorCustomInsertionCollection | undefined,\n): readonly SsmlEditorInsertionDefinition[] {\n const insertions = new Map<string, SsmlEditorInsertionDefinition>();\n for (const insertion of SSML_INSERTIONS) {\n if (insertion.id === \"emotion\" && emotionStyles !== undefined) {\n insertions.set(insertion.id, {\n ...insertion,\n options: createInsertionOptions(emotionStyles),\n });\n continue;\n }\n insertions.set(insertion.id, insertion);\n }\n\n const normalizeInsertion = (insertion: SsmlEditorCustomInsertion): SsmlEditorInsertionDefinition =>\n \"createTemplate\" in insertion ? insertion : createSsmlEditorInsertionDefinition(insertion);\n\n for (const insertion of getInsertionCollection(additionalInsertions)) {\n const normalized = normalizeInsertion(insertion);\n if (!insertions.has(normalized.id)) {\n insertions.set(normalized.id, normalized);\n }\n }\n\n for (const insertion of getInsertionCollection(customInsertions)) {\n const normalized = normalizeInsertion(insertion);\n insertions.set(normalized.id, normalized);\n }\n\n return [...insertions.values()];\n}\n\nexport function orderInsertions(\n insertions: readonly SsmlEditorInsertionDefinition[],\n insertionOrder: readonly string[] | undefined,\n): readonly SsmlEditorInsertionDefinition[] {\n if (!insertionOrder || insertionOrder.length === 0) {\n return insertions;\n }\n\n const insertionsById = new Map(insertions.map((insertion) => [insertion.id, insertion]));\n const ordered: SsmlEditorInsertionDefinition[] = [];\n const included = new Set<string>();\n for (const id of insertionOrder) {\n const insertion = insertionsById.get(id);\n if (insertion && !included.has(id)) {\n ordered.push(insertion);\n included.add(id);\n }\n }\n\n for (const insertion of insertions) {\n if (!included.has(insertion.id)) {\n ordered.push(insertion);\n }\n }\n\n return ordered;\n}\n\nexport function orderToolbarButtons(\n buttonIds: readonly string[],\n toolbarOrder: readonly string[] | undefined,\n): readonly string[] {\n if (!toolbarOrder || toolbarOrder.length === 0) {\n return buttonIds;\n }\n\n const available = new Set(buttonIds);\n const ordered: string[] = [];\n const included = new Set<string>();\n for (const id of toolbarOrder) {\n if (available.has(id) && !included.has(id)) {\n ordered.push(id);\n included.add(id);\n }\n }\n\n for (const id of buttonIds) {\n if (!included.has(id)) {\n ordered.push(id);\n }\n }\n\n return ordered;\n}\n","import type * as monaco from \"monaco-editor\";\nimport { buildSsml, parseSsml } from \"@ssml-builder-js/ssml-core\";\nimport type { SsmlDocument } from \"@ssml-builder-js/ssml-core\";\nimport { clearSsmlDocument } from \"../../ssml-editor-react/src/clearSsmlDocument\";\nimport { getEditableRegion, getEditableText, updateEditableText } from \"../../ssml-editor-react/src/editableSsml\";\nimport { formatXmlFragment } from \"../../ssml-editor-react/src/formatXml\";\nimport { registerSsmlCompletionProvider } from \"../../ssml-editor-react/src/ssmlCompletion\";\nimport { findActiveSsmlTags, findSsmlVoiceContext } from \"../../ssml-editor-react/src/ssmlContext\";\nimport { findSsmlHoverTarget, formatSsmlHover } from \"../../ssml-editor-react/src/ssmlHover\";\nimport { createSsmlInsertionEdit } from \"../../ssml-editor-react/src/ssmlInsertion\";\nimport {\n DEFAULT_INSERTION_GROUPS,\n SSML_INSERTIONS,\n type SsmlEditorInsertionDefinition,\n type SsmlEditorInsertionOption,\n} from \"../../ssml-editor-react/src/ssmlInsertions\";\nimport { EDITOR_COPY } from \"../../ssml-editor-react/src/locales\";\nimport { getExpressAsStyleCategory, resolveExpressAsStyles } from \"../../ssml-editor-react/src/constants/ssmlPresets\";\n\ntype Monaco = typeof monaco;\ntype MonacoEditor = monaco.editor.IStandaloneCodeEditor;\ntype MonacoModel = monaco.editor.ITextModel;\ntype MonacoDisposable = { dispose(): void };\n\nexport type SsmlEditorTheme = \"vs-dark\" | \"light\" | (string & {});\nexport type SsmlEditorLocale = \"ja\" | \"en\";\n\nexport interface SsmlEditorChangeDetail {\n value: string;\n}\n\nconst HTMLElementBase = (typeof HTMLElement === \"undefined\" ? class {} : HTMLElement) as typeof HTMLElement;\nconst STYLE_ID = \"ssml-editor-elements-theme\";\nconst STYLE_CSS = `\n[data-ssml-editor] {\n --ssml-editor-color: #111827;\n --ssml-editor-bg: #ffffff;\n --ssml-editor-border: #d1d5db;\n --ssml-editor-control-bg: #f9fafb;\n --ssml-editor-control-border: #9ca3af;\n --ssml-editor-active-bg: #dbeafe;\n --ssml-editor-active-border: #2563eb;\n --ssml-editor-preview-bg: #f3f4f6;\n}\nsection[data-ssml-editor] {\n display: grid;\n grid-template-rows: auto minmax(8rem, 1fr);\n gap: 0.75rem;\n box-sizing: border-box;\n width: 100%;\n min-height: 100%;\n padding: 1rem;\n border: 1px solid var(--ssml-editor-border);\n border-radius: 0.5rem;\n color: var(--ssml-editor-color);\n background: var(--ssml-editor-bg);\n}\n[data-ssml-editor][data-theme=\"dark\"] {\n --ssml-editor-color: #f9fafb;\n --ssml-editor-bg: #1f2937;\n --ssml-editor-border: #374151;\n --ssml-editor-control-bg: #111827;\n --ssml-editor-control-border: #4b5563;\n --ssml-editor-active-bg: #1e3a8a;\n --ssml-editor-active-border: #60a5fa;\n --ssml-editor-preview-bg: #111827;\n}\n[data-ssml-editor] .ssml-editor-toolbar {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n[data-ssml-editor] .ssml-editor-toolbar-actions {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n[data-ssml-editor] .ssml-editor-toolbar-separator {\n width: 1px;\n height: 2.25rem;\n margin: 0 0.25rem;\n background: var(--ssml-editor-border);\n}\n[data-ssml-editor] .ssml-editor-toolbar-dropdown {\n display: inline-block;\n}\n[data-ssml-editor] .ssml-editor-toolbar-button {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n min-height: 2.25rem;\n padding: 0.375rem 0.625rem;\n border: 1px solid var(--ssml-editor-control-border);\n border-radius: 0.25rem;\n color: var(--ssml-editor-color);\n background: var(--ssml-editor-control-bg);\n font: inherit;\n cursor: pointer;\n}\n[data-ssml-editor] .ssml-editor-toolbar-button:hover,\n[data-ssml-editor] .ssml-editor-toolbar-option:hover {\n background: var(--ssml-editor-preview-bg);\n}\n[data-ssml-editor] .ssml-editor-toolbar-button:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n[data-ssml-editor] .ssml-editor-toolbar-button[data-active=\"true\"] {\n border-color: var(--ssml-editor-active-border);\n background: var(--ssml-editor-active-bg);\n}\n[data-ssml-editor] .ssml-editor-toolbar-icon {\n display: inline-flex;\n width: 1.25rem;\n justify-content: center;\n font-size: 1.1rem;\n line-height: 1;\n}\n[data-ssml-editor] .ssml-editor-toolbar-chevron {\n font-size: 0.7rem;\n line-height: 1;\n}\n[data-ssml-editor] .ssml-editor-toolbar-switch {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n min-height: 2.25rem;\n}\n[data-ssml-editor] .ssml-editor-switch-track {\n display: inline-flex;\n align-items: center;\n width: 2.75rem;\n height: 1.5rem;\n padding: 0.1875rem;\n border: 0;\n border-radius: 999px;\n background: var(--ssml-editor-control-border);\n cursor: pointer;\n transition: background-color 0.2s ease;\n}\n[data-ssml-editor] .ssml-editor-switch-track[aria-checked=\"true\"] {\n background: var(--ssml-editor-active-border);\n}\n[data-ssml-editor] .ssml-editor-switch-track:focus-visible {\n outline: 2px solid var(--ssml-editor-active-border);\n outline-offset: 2px;\n}\n[data-ssml-editor] .ssml-editor-switch-thumb {\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 50%;\n background: var(--ssml-editor-bg);\n transition: transform 0.2s ease;\n}\n[data-ssml-editor] .ssml-editor-switch-track[aria-checked=\"true\"] .ssml-editor-switch-thumb {\n transform: translateX(1.25rem);\n}\n[data-ssml-editor].ssml-editor-toolbar-menu {\n position: fixed;\n z-index: 9999;\n display: grid;\n min-width: max-content;\n max-height: min(24rem, calc(100vh - 1rem));\n gap: 0.125rem;\n padding: 0.25rem;\n border: 1px solid var(--ssml-editor-control-border);\n border-radius: 0.25rem;\n background: var(--ssml-editor-control-bg);\n box-shadow: 0 0.25rem 0.75rem rgb(0 0 0 / 20%);\n overflow-y: auto;\n}\n[data-ssml-editor] .ssml-editor-toolbar-option {\n padding: 0.375rem 0.5rem;\n border: 0;\n border-radius: 0.125rem;\n color: var(--ssml-editor-color);\n background: transparent;\n font: inherit;\n text-align: left;\n white-space: nowrap;\n cursor: pointer;\n}\n[data-ssml-editor] .ssml-editor-toolbar-option-group {\n display: grid;\n gap: 0.125rem;\n margin: 0;\n padding: 0;\n border: 0;\n}\n[data-ssml-editor] .ssml-editor-toolbar-option-group legend {\n padding: 0.375rem 0.5rem 0.125rem;\n font-size: 0.875rem;\n font-weight: 600;\n white-space: nowrap;\n}\n[data-ssml-editor] .ssml-editor-help {\n display: grid;\n gap: 0.5rem;\n padding: 0.75rem;\n border: 1px solid var(--ssml-editor-control-border);\n border-radius: 0.25rem;\n background: var(--ssml-editor-preview-bg);\n}\n[data-ssml-editor] .ssml-editor-help h3,\n[data-ssml-editor] .ssml-editor-help p {\n margin: 0;\n}\n[data-ssml-editor] .ssml-editor-help-list {\n display: grid;\n gap: 0.375rem;\n margin: 0;\n padding-left: 1.25rem;\n}\n[data-ssml-editor] .ssml-editor-help-item {\n list-style: none;\n}\n[data-ssml-editor] .ssml-editor-help-item details {\n margin-top: 0.375rem;\n border: 1px solid var(--ssml-editor-control-border);\n border-radius: 0.25rem;\n background: var(--ssml-editor-control-bg);\n}\n[data-ssml-editor] .ssml-editor-help-item summary {\n padding: 0.5rem 0.625rem;\n cursor: pointer;\n}\n[data-ssml-editor] .ssml-editor-help-item details p,\n[data-ssml-editor] .ssml-editor-help-item details ul {\n margin: 0.5rem 0.75rem 0.75rem;\n font-size: 0.875rem;\n}\n[data-ssml-editor] .ssml-editor-display {\n display: grid;\n grid-template-rows: auto minmax(8rem, 1fr);\n gap: 0.5rem;\n min-height: 0;\n}\n[data-ssml-editor] .ssml-editor-editor {\n position: relative;\n min-height: 8rem;\n height: 100%;\n border: 1px solid var(--ssml-editor-control-border);\n border-radius: 0.25rem;\n overflow: visible;\n}\n`.trim();\n\nfunction injectStyles(): void {\n if (typeof document === \"undefined\" || document.getElementById(STYLE_ID)) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = STYLE_CSS;\n document.head.appendChild(style);\n}\n\nfunction isDarkTheme(theme: SsmlEditorTheme): boolean {\n return theme === \"vs-dark\" || theme.toLowerCase().includes(\"dark\");\n}\n\nfunction getMenuPosition(trigger: HTMLElement, menu: HTMLElement): { top: number; left: number } {\n const bounds = trigger.getBoundingClientRect();\n const margin = 8;\n const top = Math.min(bounds.bottom + 4, window.innerHeight - menu.offsetHeight - margin);\n const left = Math.min(bounds.left, window.innerWidth - menu.offsetWidth - margin);\n return {\n top: Math.max(margin, top),\n left: Math.max(margin, left),\n };\n}\n\nexport class SsmlEditorElement extends HTMLElementBase {\n static readonly tagName = \"ssml-editor\";\n static readonly observedAttributes = [\n \"value\",\n \"theme\",\n \"readonly\",\n \"locale\",\n \"show-toolbar\",\n \"show-toolbar-labels\",\n \"show-decorations\",\n ];\n\n private editor: MonacoEditor | null = null;\n private model: MonacoModel | null = null;\n private monaco: Monaco | null = null;\n private root: HTMLElement | null = null;\n private toolbar: HTMLElement | null = null;\n private toolbarActions: HTMLElement | null = null;\n private display: HTMLElement | null = null;\n private editorContainer: HTMLDivElement | null = null;\n private helpPanel: HTMLElement | null = null;\n private openMenu: HTMLElement | null = null;\n private openMenuTrigger: HTMLButtonElement | null = null;\n private toolbarButtons = new Map<string, HTMLButtonElement>();\n private contentDisposable: MonacoDisposable | null = null;\n private cursorDisposable: MonacoDisposable | null = null;\n private completionDisposable: MonacoDisposable | null = null;\n private hoverDisposable: MonacoDisposable | null = null;\n private suppressChangeEvent = false;\n private initializationToken = 0;\n private valueState: string | undefined;\n private documentState: SsmlDocument | null = null;\n private decorationsVisible = false;\n private helpOpen = false;\n\n get value(): string {\n return this.valueState ?? this.getAttribute(\"value\") ?? \"\";\n }\n\n set value(value: string) {\n this.valueState = value;\n this.setAttribute(\"value\", value);\n }\n\n get theme(): SsmlEditorTheme {\n return this.getAttribute(\"theme\") || \"light\";\n }\n\n set theme(theme: SsmlEditorTheme) {\n this.setAttribute(\"theme\", theme);\n }\n\n get readonly(): boolean {\n return this.hasAttribute(\"readonly\");\n }\n\n set readonly(readonly: boolean) {\n if (readonly) {\n this.setAttribute(\"readonly\", \"\");\n } else {\n this.removeAttribute(\"readonly\");\n }\n }\n\n get locale(): SsmlEditorLocale {\n return this.getAttribute(\"locale\") === \"en\" ? \"en\" : \"ja\";\n }\n\n set locale(locale: SsmlEditorLocale) {\n this.setAttribute(\"locale\", locale);\n }\n\n private prepareDocument(value: string): string {\n try {\n this.documentState = parseSsml(value);\n return getEditableText(this.documentState);\n } catch {\n this.documentState = null;\n return value;\n }\n }\n\n connectedCallback(): void {\n if (this.editor || this.root) {\n return;\n }\n\n injectStyles();\n document.addEventListener(\"pointerdown\", this.handleDocumentPointerDown);\n document.addEventListener(\"keydown\", this.handleDocumentKeyDown);\n this.render();\n const token = ++this.initializationToken;\n void this.initialize(token);\n }\n\n disconnectedCallback(): void {\n this.initializationToken += 1;\n document.removeEventListener(\"pointerdown\", this.handleDocumentPointerDown);\n document.removeEventListener(\"keydown\", this.handleDocumentKeyDown);\n this.closeMenu();\n this.disposeEditor();\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n if (name === \"value\") {\n this.valueState = newValue ?? \"\";\n if (this.editor) {\n const value = newValue ?? \"\";\n const editableValue = this.prepareDocument(value);\n if (this.editor.getValue() !== editableValue) {\n this.suppressChangeEvent = true;\n try {\n this.editor.setValue(editableValue);\n } finally {\n this.suppressChangeEvent = false;\n }\n }\n }\n return;\n }\n\n if (name === \"theme\" && this.monaco) {\n this.monaco.editor.setTheme(this.theme);\n this.updateTheme();\n return;\n }\n\n if (name === \"readonly\") {\n this.editor?.updateOptions({ readOnly: this.readonly });\n this.renderToolbar();\n return;\n }\n\n if (name === \"locale\" || name === \"show-toolbar\" || name === \"show-toolbar-labels\") {\n this.renderToolbar();\n this.renderHelp();\n return;\n }\n\n if (name === \"show-decorations\") {\n this.decorationsVisible = newValue !== null;\n this.updateDecorations();\n }\n }\n\n private render(): void {\n const root = document.createElement(\"section\");\n root.dataset.ssmlEditor = \"\";\n root.setAttribute(\"aria-label\", EDITOR_COPY[this.locale].editorAriaLabel);\n root.dataset.theme = isDarkTheme(this.theme) ? \"dark\" : \"light\";\n\n const toolbar = document.createElement(\"div\");\n toolbar.className = \"ssml-editor-toolbar\";\n toolbar.dataset.ssmlEditorToolbar = \"\";\n const toolbarActions = document.createElement(\"div\");\n toolbarActions.className = \"ssml-editor-toolbar-actions\";\n toolbarActions.setAttribute(\"role\", \"toolbar\");\n toolbarActions.setAttribute(\"aria-label\", EDITOR_COPY[this.locale].toolbarAriaLabel);\n toolbarActions.dataset.ssmlEditorToolbarActions = \"\";\n toolbar.append(toolbarActions);\n\n const display = document.createElement(\"div\");\n display.className = \"ssml-editor-display\";\n display.dataset.ssmlEditorDisplay = \"\";\n const editorContainer = document.createElement(\"div\");\n editorContainer.className = \"ssml-editor-editor\";\n display.append(editorContainer);\n root.append(toolbar, display);\n this.replaceChildren(root);\n\n this.root = root;\n this.toolbar = toolbar;\n this.toolbarActions = toolbarActions;\n this.display = display;\n this.editorContainer = editorContainer;\n this.renderToolbar();\n this.renderHelp();\n }\n\n private renderToolbar(): void {\n const toolbar = this.toolbar;\n const toolbarActions = this.toolbarActions;\n if (!toolbar || !toolbarActions) {\n return;\n }\n\n this.closeMenu();\n const copy = EDITOR_COPY[this.locale];\n toolbar.hidden = this.getAttribute(\"show-toolbar\") === \"false\";\n toolbar.setAttribute(\"aria-label\", copy.toolbarAriaLabel);\n toolbarActions.setAttribute(\"aria-label\", copy.toolbarAriaLabel);\n toolbarActions.replaceChildren();\n this.toolbarButtons.clear();\n if (toolbar.hidden) {\n return;\n }\n\n const insertionById = new Map(SSML_INSERTIONS.map((insertion) => [insertion.id, insertion]));\n const toolbarIds = [\n \"undo\",\n \"redo\",\n ...DEFAULT_INSERTION_GROUPS.flatMap((group) => group.insertionIds),\n \"clearAll\",\n \"format\",\n \"decorations\",\n \"help\",\n ];\n const groupByButtonId = new Map<string, string>();\n for (const group of DEFAULT_INSERTION_GROUPS) {\n for (const buttonId of group.insertionIds) {\n groupByButtonId.set(buttonId, group.id);\n }\n }\n groupByButtonId.set(\"undo\", \"history\");\n groupByButtonId.set(\"redo\", \"history\");\n groupByButtonId.set(\"clearAll\", \"document\");\n groupByButtonId.set(\"format\", \"document\");\n groupByButtonId.set(\"decorations\", \"document\");\n groupByButtonId.set(\"help\", \"help\");\n\n let previousGroup: string | undefined;\n for (const id of toolbarIds) {\n const group = groupByButtonId.get(id);\n if (previousGroup !== undefined && group !== previousGroup) {\n const separator = document.createElement(\"span\");\n separator.className = \"ssml-editor-toolbar-separator\";\n separator.setAttribute(\"aria-hidden\", \"true\");\n toolbarActions.append(separator);\n }\n previousGroup = group;\n\n const insertion = insertionById.get(id);\n if (insertion) {\n toolbarActions.append(this.createInsertionButton(insertion));\n } else if (id === \"decorations\") {\n toolbarActions.append(this.createDecorationsSwitch());\n } else {\n toolbarActions.append(this.createActionButton(id));\n }\n }\n this.updateActiveButtons();\n }\n\n private createActionButton(id: string): HTMLButtonElement {\n const copy = EDITOR_COPY[this.locale];\n const labels: Record<string, string> = {\n undo: copy.undo,\n redo: copy.redo,\n clearAll: copy.clearAll,\n format: copy.format,\n help: copy.help,\n };\n const icons: Record<string, string> = {\n undo: \"↩\",\n redo: \"↪\",\n clearAll: \"×\",\n format: \"≡\",\n help: \"?\",\n };\n const titles: Record<string, string> = {\n undo: copy.undoTitle,\n redo: copy.redoTitle,\n clearAll: copy.clearAllTitle,\n format: copy.formatTitle,\n help: copy.helpTitle,\n };\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"ssml-editor-toolbar-button\";\n button.dataset.ssmlEditorButton = id;\n button.setAttribute(\"aria-label\", labels[id] ?? id);\n button.title = titles[id] ?? labels[id] ?? id;\n button.disabled = this.readonly && id !== \"help\";\n if (id === \"help\") {\n button.setAttribute(\"aria-expanded\", String(this.helpOpen));\n }\n const icon = document.createElement(\"span\");\n icon.className = \"ssml-editor-toolbar-icon\";\n icon.setAttribute(\"aria-hidden\", \"true\");\n icon.textContent = icons[id] ?? \"\";\n button.append(icon);\n if (this.hasAttribute(\"show-toolbar-labels\")) {\n button.append(document.createTextNode(labels[id] ?? id));\n }\n button.addEventListener(\"click\", () => {\n if (id === \"help\") {\n this.helpOpen = !this.helpOpen;\n button.setAttribute(\"aria-expanded\", String(this.helpOpen));\n this.renderHelp();\n } else if (!this.readonly) {\n this.handleAction(id);\n }\n });\n this.toolbarButtons.set(id, button);\n return button;\n }\n\n private createDecorationsSwitch(): HTMLElement {\n const copy = EDITOR_COPY[this.locale];\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"ssml-editor-toolbar-switch\";\n const icon = document.createElement(\"span\");\n icon.className = \"ssml-editor-toolbar-icon\";\n icon.setAttribute(\"aria-hidden\", \"true\");\n icon.textContent = \"☆\";\n wrapper.append(icon);\n if (this.hasAttribute(\"show-toolbar-labels\")) {\n wrapper.append(document.createTextNode(copy.decorations));\n }\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"ssml-editor-switch-track\";\n button.dataset.ssmlEditorButton = \"decorations\";\n button.setAttribute(\"role\", \"switch\");\n button.setAttribute(\"aria-label\", copy.decorations);\n button.addEventListener(\"click\", () => {\n this.decorationsVisible = !this.decorationsVisible;\n this.updateDecorations();\n });\n wrapper.append(button);\n this.toolbarButtons.set(\"decorations\", button);\n this.updateDecorations();\n return wrapper;\n }\n\n private createInsertionButton(insertion: SsmlEditorInsertionDefinition): HTMLElement {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"ssml-editor-toolbar-button\";\n button.dataset.ssmlEditorButton = insertion.id;\n button.setAttribute(\"aria-label\", insertion.labels[this.locale]);\n button.setAttribute(\"aria-haspopup\", \"menu\");\n button.setAttribute(\"aria-expanded\", \"false\");\n button.title =\n insertion.titles?.[this.locale] ?? `${insertion.labels[this.locale]} — ${insertion.descriptions[this.locale]}`;\n const icon = document.createElement(\"span\");\n icon.className = \"ssml-editor-toolbar-icon\";\n icon.setAttribute(\"aria-hidden\", \"true\");\n icon.textContent = insertion.icon;\n button.append(icon);\n if (this.hasAttribute(\"show-toolbar-labels\")) {\n button.append(document.createTextNode(insertion.labels[this.locale]));\n }\n const chevron = document.createElement(\"span\");\n chevron.className = \"ssml-editor-toolbar-chevron\";\n chevron.setAttribute(\"aria-hidden\", \"true\");\n chevron.textContent = \"▾\";\n button.append(chevron);\n button.addEventListener(\"click\", () => this.toggleInsertionMenu(insertion, button));\n this.toolbarButtons.set(insertion.id, button);\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"ssml-editor-toolbar-dropdown\";\n wrapper.append(button);\n return wrapper;\n }\n\n private toggleInsertionMenu(insertion: SsmlEditorInsertionDefinition, trigger: HTMLButtonElement): void {\n if (this.openMenuTrigger === trigger) {\n this.closeMenu();\n return;\n }\n\n this.closeMenu();\n const menu = this.createInsertionMenu(insertion);\n document.body.append(menu);\n const position = getMenuPosition(trigger, menu);\n menu.style.top = `${position.top}px`;\n menu.style.left = `${position.left}px`;\n trigger.setAttribute(\"aria-expanded\", \"true\");\n trigger.setAttribute(\"aria-controls\", menu.id);\n this.openMenu = menu;\n this.openMenuTrigger = trigger;\n }\n\n private createInsertionMenu(insertion: SsmlEditorInsertionDefinition): HTMLElement {\n const menu = document.createElement(\"div\");\n menu.className = \"ssml-editor-toolbar-menu\";\n menu.dataset.ssmlEditor = \"\";\n menu.dataset.theme = isDarkTheme(this.theme) ? \"dark\" : \"light\";\n menu.id = `ssml-editor-elements-menu-${insertion.id.replace(/[^A-Za-z0-9_-]/g, \"-\")}`;\n menu.setAttribute(\"role\", \"menu\");\n menu.setAttribute(\"aria-label\", insertion.labels[this.locale]);\n menu.addEventListener(\"pointerdown\", (event) => event.stopPropagation());\n\n const options = this.getInsertionOptions(insertion);\n if (options.length === 0) {\n const empty = document.createElement(\"p\");\n empty.className = \"ssml-editor-toolbar-option\";\n empty.textContent = EDITOR_COPY[this.locale].noAvailableOptions;\n menu.append(empty);\n } else {\n for (const group of this.getOptionGroups(insertion, options)) {\n if (group.label) {\n const fieldset = document.createElement(\"fieldset\");\n fieldset.className = \"ssml-editor-toolbar-option-group\";\n const legend = document.createElement(\"legend\");\n legend.textContent = group.label;\n fieldset.append(legend);\n for (const option of group.options) {\n fieldset.append(this.createOptionButton(insertion, option));\n }\n menu.append(fieldset);\n } else {\n for (const option of group.options) {\n menu.append(this.createOptionButton(insertion, option));\n }\n }\n }\n }\n return menu;\n }\n\n private getInsertionOptions(insertion: SsmlEditorInsertionDefinition): readonly SsmlEditorInsertionOption[] {\n if (insertion.id !== \"emotion\") {\n return insertion.options;\n }\n\n const model = this.model;\n const selection = this.editor?.getSelection();\n const voiceContext =\n model && selection\n ? findSsmlVoiceContext(model.getValue(), model.getOffsetAt(selection.getStartPosition()))\n : undefined;\n const voiceName =\n voiceContext === undefined\n ? this.documentState\n ? getEditableRegion(this.documentState).voiceName\n : undefined\n : voiceContext.voiceName;\n const availableStyles = new Set(\n resolveExpressAsStyles(\n voiceName,\n insertion.options.map((option) => option.value),\n ),\n );\n return insertion.options.filter((option) => availableStyles.has(option.value));\n }\n\n private getOptionGroups(\n insertion: SsmlEditorInsertionDefinition,\n options: readonly SsmlEditorInsertionOption[],\n ): readonly { label: string; options: readonly SsmlEditorInsertionOption[] }[] {\n if (insertion.id !== \"emotion\") {\n return [{ label: \"\", options }];\n }\n\n const copy = EDITOR_COPY[this.locale];\n const labels: Record<string, string> = {\n emotions: copy.categoryEmotions,\n scenarios: copy.categoryScenarios,\n media: copy.categoryMedia,\n other: copy.categoryOther,\n };\n const categories = [\"emotions\", \"scenarios\", \"media\", \"other\"] as const;\n return categories\n .map((category) => ({\n label: labels[category],\n options: options.filter((option) => getExpressAsStyleCategory(option.value) === category),\n }))\n .filter((group) => group.options.length > 0);\n }\n\n private createOptionButton(\n insertion: SsmlEditorInsertionDefinition,\n option: SsmlEditorInsertionOption,\n ): HTMLButtonElement {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"ssml-editor-toolbar-option\";\n button.setAttribute(\"role\", \"menuitem\");\n button.title = option.descriptions?.[this.locale] ?? insertion.descriptions[this.locale];\n button.textContent = option.labels[this.locale];\n button.disabled = this.readonly;\n button.addEventListener(\"click\", () => {\n if (!this.readonly) {\n this.applyInsertion(insertion, option);\n }\n this.closeMenu(true);\n });\n button.addEventListener(\"mousedown\", (event) => event.preventDefault());\n return button;\n }\n\n private handleAction(id: string): void {\n if (!this.editor) {\n return;\n }\n if (id === \"undo\" || id === \"redo\") {\n this.editor.trigger(\"ssml-toolbar\", id, null);\n this.editor.focus();\n } else if (id === \"clearAll\") {\n if (this.documentState) {\n this.replaceDocument(clearSsmlDocument(this.documentState));\n }\n } else if (id === \"format\") {\n if (this.documentState) {\n this.replaceDocument(updateEditableText(this.documentState, formatXmlFragment(this.editor.getValue())));\n } else {\n this.replaceEditorValue(formatXmlFragment(this.editor.getValue()));\n }\n }\n }\n\n private applyInsertion(insertion: SsmlEditorInsertionDefinition, option: SsmlEditorInsertionOption): void {\n const editor = this.editor;\n const model = this.model;\n const selection = editor?.getSelection();\n if (!editor || !model || !selection) {\n return;\n }\n\n const startOffset = model.getOffsetAt(selection.getStartPosition());\n const endOffset = model.getOffsetAt(selection.getEndPosition());\n const selectedText = selection.isEmpty() ? \"\" : model.getValueInRange(selection);\n const result = createSsmlInsertionEdit(\n model.getValue(),\n startOffset,\n endOffset,\n insertion.createTemplate(option.value),\n model.getEOL(),\n selectedText,\n );\n editor.pushUndoStop();\n const applied = editor.executeEdits(\"ssml-toolbar\", [{ range: selection, text: result.replacement }]);\n editor.pushUndoStop();\n if (!applied) {\n return;\n }\n\n const start = model.getPositionAt(startOffset + result.selectionOffset);\n const end = model.getPositionAt(endOffset + result.selectionOffset);\n editor.setSelection({\n selectionStartLineNumber: start.lineNumber,\n selectionStartColumn: start.column,\n positionLineNumber: end.lineNumber,\n positionColumn: end.column,\n });\n editor.focus();\n }\n\n private replaceEditorValue(value: string): void {\n const editor = this.editor;\n const model = editor?.getModel();\n if (!editor || !model || editor.getValue() === value) {\n return;\n }\n editor.pushUndoStop();\n editor.executeEdits(\"ssml-editor-toolbar\", [\n {\n range: model.getFullModelRange(),\n text: value,\n forceMoveMarkers: true,\n },\n ]);\n editor.pushUndoStop();\n editor.focus();\n }\n\n private replaceDocument(document: SsmlDocument): void {\n const editor = this.editor;\n const model = editor?.getModel();\n const editableValue = getEditableText(document);\n const fullValue = buildSsml(document);\n this.documentState = document;\n this.valueState = fullValue;\n\n if (!editor || !model || editor.getValue() === editableValue) {\n this.updateActiveButtons();\n this.dispatchChange(fullValue);\n return;\n }\n\n editor.pushUndoStop();\n editor.executeEdits(\"ssml-editor-toolbar\", [\n {\n range: model.getFullModelRange(),\n text: editableValue,\n forceMoveMarkers: true,\n },\n ]);\n editor.pushUndoStop();\n editor.focus();\n }\n\n private dispatchChange(value: string): void {\n if (this.suppressChangeEvent) {\n return;\n }\n this.dispatchEvent(\n new CustomEvent<SsmlEditorChangeDetail>(\"change\", {\n detail: { value },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private updateDecorations(): void {\n const button = this.toolbarButtons.get(\"decorations\");\n if (button) {\n const copy = EDITOR_COPY[this.locale];\n button.setAttribute(\"aria-checked\", String(this.decorationsVisible));\n button.title = this.decorationsVisible ? copy.decorationsHideTitle : copy.decorationsShowTitle;\n }\n this.editor?.updateOptions({\n inlayHints: { enabled: this.decorationsVisible ? \"on\" : \"off\" },\n });\n }\n\n private renderHelp(): void {\n const display = this.display;\n if (!display) {\n return;\n }\n\n this.helpPanel?.remove();\n this.helpPanel = null;\n const root = this.root;\n if (root) {\n root.setAttribute(\"aria-label\", EDITOR_COPY[this.locale].editorAriaLabel);\n this.updateTheme();\n }\n if (!this.helpOpen || this.getAttribute(\"show-toolbar\") === \"false\") {\n return;\n }\n\n const copy = EDITOR_COPY[this.locale];\n const panel = document.createElement(\"section\");\n panel.className = \"ssml-editor-help\";\n panel.setAttribute(\"aria-label\", copy.helpHeading);\n const heading = document.createElement(\"h3\");\n heading.textContent = copy.helpHeading;\n const description = document.createElement(\"p\");\n description.textContent = copy.helpDescription;\n const list = document.createElement(\"ul\");\n list.className = \"ssml-editor-help-list\";\n for (const insertion of SSML_INSERTIONS) {\n const item = document.createElement(\"li\");\n item.className = \"ssml-editor-help-item\";\n const details = document.createElement(\"details\");\n const summary = document.createElement(\"summary\");\n summary.textContent = `${insertion.icon} ${insertion.labels[this.locale]} — ${insertion.descriptions[this.locale]}`;\n const parameters = document.createElement(\"p\");\n parameters.textContent = `${copy.parameters}: ${insertion.parameterDescription[this.locale]}`;\n const options = document.createElement(\"ul\");\n for (const option of insertion.options) {\n const optionItem = document.createElement(\"li\");\n optionItem.textContent = `${option.labels[this.locale]}${option.descriptions?.[this.locale] ? ` — ${option.descriptions[this.locale]}` : \"\"}`;\n options.append(optionItem);\n }\n details.append(summary, parameters, options);\n item.append(details);\n list.append(item);\n }\n panel.append(heading, description, list);\n display.prepend(panel);\n this.helpPanel = panel;\n }\n\n private updateTheme(): void {\n if (this.root) {\n this.root.dataset.theme = isDarkTheme(this.theme) ? \"dark\" : \"light\";\n }\n }\n\n private updateActiveButtons(): void {\n const editor = this.editor;\n const model = this.model;\n const selection = editor?.getSelection();\n if (!editor || !model || !selection) {\n return;\n }\n\n const activeTags = findActiveSsmlTags(model.getValue(), model.getOffsetAt(selection.getStartPosition()));\n for (const insertion of SSML_INSERTIONS) {\n const button = this.toolbarButtons.get(insertion.id);\n if (button) {\n button.dataset.active = String(\n insertion.tagName !== undefined && activeTags.has(insertion.tagName.toLowerCase()),\n );\n }\n }\n }\n\n private async initialize(token: number): Promise<void> {\n const container = this.editorContainer;\n if (!container) {\n return;\n }\n\n const monacoModule = await import(\"monaco-editor\");\n if (token !== this.initializationToken || !this.isConnected) {\n return;\n }\n\n const model = monacoModule.editor.createModel(this.prepareDocument(this.value), \"xml\");\n const editor = monacoModule.editor.create(container, {\n model,\n theme: this.theme,\n readOnly: this.readonly,\n automaticLayout: true,\n minimap: { enabled: false },\n wordWrap: \"on\",\n inlayHints: { enabled: this.decorationsVisible ? \"on\" : \"off\" },\n });\n\n if (token !== this.initializationToken || !this.isConnected) {\n editor.dispose();\n model.dispose();\n return;\n }\n\n this.monaco = monacoModule;\n this.model = model;\n this.editor = editor;\n this.contentDisposable = editor.onDidChangeModelContent(() => {\n const value = editor.getValue();\n let nextValue = value;\n if (this.documentState) {\n this.documentState = updateEditableText(this.documentState, value);\n nextValue = buildSsml(this.documentState);\n }\n this.valueState = nextValue;\n this.updateActiveButtons();\n this.dispatchChange(nextValue);\n });\n this.cursorDisposable = editor.onDidChangeCursorPosition(() => this.updateActiveButtons());\n this.completionDisposable = registerSsmlCompletionProvider(monacoModule, {\n model,\n getOuterVoiceName: () => (this.documentState ? getEditableRegion(this.documentState).voiceName : undefined),\n });\n this.hoverDisposable = monacoModule.languages.registerHoverProvider(\"xml\", {\n provideHover: (hoverModel, position) => {\n const target = findSsmlHoverTarget(hoverModel.getValue(), position.lineNumber, position.column);\n if (!target) {\n return undefined;\n }\n\n return {\n contents: [\n {\n isTrusted: false,\n supportHtml: false,\n value: formatSsmlHover(target),\n },\n ],\n range: target.range,\n };\n },\n });\n this.updateActiveButtons();\n }\n\n private readonly handleDocumentPointerDown = (event: PointerEvent): void => {\n const target = event.target;\n if (\n this.openMenu &&\n target instanceof Node &&\n !this.openMenu.contains(target) &&\n !this.openMenuTrigger?.contains(target)\n ) {\n this.closeMenu();\n }\n };\n\n private readonly handleDocumentKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Escape\" && this.openMenu) {\n this.closeMenu(true);\n }\n };\n\n private closeMenu(restoreFocus = false): void {\n this.openMenu?.remove();\n this.openMenu = null;\n if (this.openMenuTrigger) {\n this.openMenuTrigger.setAttribute(\"aria-expanded\", \"false\");\n this.openMenuTrigger.removeAttribute(\"aria-controls\");\n if (restoreFocus) {\n this.openMenuTrigger.focus();\n }\n }\n this.openMenuTrigger = null;\n }\n\n private disposeEditor(): void {\n this.closeMenu();\n this.contentDisposable?.dispose();\n this.contentDisposable = null;\n this.cursorDisposable?.dispose();\n this.cursorDisposable = null;\n this.completionDisposable?.dispose();\n this.completionDisposable = null;\n this.hoverDisposable?.dispose();\n this.hoverDisposable = null;\n this.editor?.dispose();\n this.editor = null;\n this.model?.dispose();\n this.model = null;\n this.monaco = null;\n this.root?.remove();\n this.root = null;\n this.toolbar = null;\n this.toolbarActions = null;\n this.display = null;\n this.editorContainer = null;\n this.helpPanel = null;\n this.toolbarButtons.clear();\n }\n}\n","import { SsmlEditorElement } from \"./SsmlEditorElement\";\n\nexport { SsmlEditorElement } from \"./SsmlEditorElement\";\nexport type { SsmlEditorChangeDetail, SsmlEditorLocale, SsmlEditorTheme } from \"./SsmlEditorElement\";\n\nexport function defineSsmlEditorElement(): void {\n if (typeof customElements === \"undefined\" || customElements.get(SsmlEditorElement.tagName)) {\n return;\n }\n\n customElements.define(SsmlEditorElement.tagName, SsmlEditorElement);\n}\n","import { defineSsmlEditorElement } from \"../packages/ssml-editor-elements/src/index\";\n\nexport * from \"../packages/ssml-editor-elements/src/index\";\n\ndefineSsmlEditorElement();\n"],"mappings":"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","names":["document"]}
|
package/dist/react.d.mts
CHANGED
|
@@ -149,6 +149,11 @@ interface EditorCopy {
|
|
|
149
149
|
previewSelection: string;
|
|
150
150
|
previewSelectionTitle: string;
|
|
151
151
|
noAvailableOptions: string;
|
|
152
|
+
styleNotSupported: string;
|
|
153
|
+
categoryEmotions: string;
|
|
154
|
+
categoryScenarios: string;
|
|
155
|
+
categoryMedia: string;
|
|
156
|
+
categoryOther: string;
|
|
152
157
|
}
|
|
153
158
|
interface InlineBadgeCopy {
|
|
154
159
|
pause: string;
|
package/dist/react.d.ts
CHANGED
|
@@ -149,6 +149,11 @@ interface EditorCopy {
|
|
|
149
149
|
previewSelection: string;
|
|
150
150
|
previewSelectionTitle: string;
|
|
151
151
|
noAvailableOptions: string;
|
|
152
|
+
styleNotSupported: string;
|
|
153
|
+
categoryEmotions: string;
|
|
154
|
+
categoryScenarios: string;
|
|
155
|
+
categoryMedia: string;
|
|
156
|
+
categoryOther: string;
|
|
152
157
|
}
|
|
153
158
|
interface InlineBadgeCopy {
|
|
154
159
|
pause: string;
|