···33## Helpers
4455Yomitan supports several custom Handlebars helpers for rendering templates.
66-The source code for these templates can be found [here](../ext/js/templates/sandbox/anki-template-renderer.js).
66+The source code for these templates can be found [here](../ext/js/templates/anki-template-renderer.js).
7788### `dumpObject`
99
+1-1
ext/js/background/backend.js
···2929import {isObjectNotArray} from '../core/object-utilities.js';
3030import {clone, deferPromise, promiseTimeout} from '../core/utilities.js';
3131import {isNoteDataValid} from '../data/anki-util.js';
3232+import {arrayBufferToBase64} from '../data/array-buffer-util.js';
3233import {OptionsUtil} from '../data/options-util.js';
3334import {getAllPermissions, hasPermissions, hasRequiredPermissionsForOptions} from '../data/permissions-util.js';
3434-import {arrayBufferToBase64} from '../data/sandbox/array-buffer-util.js';
3535import {DictionaryDatabase} from '../dictionary/dictionary-database.js';
3636import {Environment} from '../extension/environment.js';
3737import {ObjectPropertyAccessor} from '../general/object-property-accessor.js';
+1-1
ext/js/background/offscreen-proxy.js
···18181919import {ExtensionError} from '../core/extension-error.js';
2020import {isObjectNotArray} from '../core/object-utilities.js';
2121-import {base64ToArrayBuffer} from '../data/sandbox/array-buffer-util.js';
2121+import {base64ToArrayBuffer} from '../data/array-buffer-util.js';
22222323/**
2424 * This class is responsible for creating and communicating with an offscreen document.
+1-1
ext/js/background/offscreen.js
···18181919import {ClipboardReader} from '../comm/clipboard-reader.js';
2020import {createApiMap, invokeApiMapHandler} from '../core/api-map.js';
2121-import {arrayBufferToBase64} from '../data/sandbox/array-buffer-util.js';
2121+import {arrayBufferToBase64} from '../data/array-buffer-util.js';
2222import {DictionaryDatabase} from '../dictionary/dictionary-database.js';
2323import {Translator} from '../language/translator.js';
2424
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {getDisambiguations, getGroupedPronunciations, getPronunciationsOfType, getTermFrequency, groupTermTags} from '../../dictionary/dictionary-data-util.js';
2020-import {distributeFurigana, distributeFuriganaInflected} from '../../language/ja/japanese.js';
1919+import {getDisambiguations, getGroupedPronunciations, getPronunciationsOfType, getTermFrequency, groupTermTags} from '../dictionary/dictionary-data-util.js';
2020+import {distributeFurigana, distributeFuriganaInflected} from '../language/ja/japanese.js';
21212222/**
2323 * Creates a compatibility representation of the specified data.
···1717 */
18181919import {EventListenerCollection} from '../core/event-listener-collection.js';
2020-import {base64ToArrayBuffer} from '../data/sandbox/array-buffer-util.js';
2020+import {base64ToArrayBuffer} from '../data/array-buffer-util.js';
21212222/**
2323 * The content manager which is used when generating HTML display content.
+2-2
ext/js/display/display-generator.js
···2121import {HtmlTemplateCollection} from '../dom/html-template-collection.js';
2222import {distributeFurigana, getKanaMorae, getPitchCategory, isCodePointKanji} from '../language/ja/japanese.js';
2323import {getLanguageFromText} from '../language/text-utilities.js';
2424-import {createPronunciationDownstepPosition, createPronunciationGraph, createPronunciationText} from './sandbox/pronunciation-generator.js';
2525-import {StructuredContentGenerator} from './sandbox/structured-content-generator.js';
2424+import {createPronunciationDownstepPosition, createPronunciationGraph, createPronunciationText} from './pronunciation-generator.js';
2525+import {StructuredContentGenerator} from './structured-content-generator.js';
26262727export class DisplayGenerator {
2828 /**
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {getKanaDiacriticInfo, isMoraPitchHigh} from '../../language/ja/japanese.js';
1919+import {getKanaDiacriticInfo, isMoraPitchHigh} from '../language/ja/japanese.js';
20202121/**
2222 * @param {string[]} morae
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {getLanguageFromText} from '../../language/text-utilities.js';
1919+import {getLanguageFromText} from '../language/text-utilities.js';
20202121export class StructuredContentGenerator {
2222 /**
2323- * @param {import('../../display/display-content-manager.js').DisplayContentManager|import('../../templates/sandbox/anki-template-renderer-content-manager.js').AnkiTemplateRendererContentManager} contentManager
2323+ * @param {import('./display-content-manager.js').DisplayContentManager|import('../templates/anki-template-renderer-content-manager.js').AnkiTemplateRendererContentManager} contentManager
2424 * @param {Document} document
2525 */
2626 constructor(contentManager, document) {
2727- /** @type {import('../../display/display-content-manager.js').DisplayContentManager|import('../../templates/sandbox/anki-template-renderer-content-manager.js').AnkiTemplateRendererContentManager} */
2727+ /** @type {import('./display-content-manager.js').DisplayContentManager|import('../templates/anki-template-renderer-content-manager.js').AnkiTemplateRendererContentManager} */
2828 this._contentManager = contentManager;
2929 /** @type {Document} */
3030 this._document = document;
+1-1
ext/js/dom/dom-text-scanner.js
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {readCodePointsBackward, readCodePointsForward} from '../data/sandbox/string-util.js';
1919+import {readCodePointsBackward, readCodePointsForward} from '../data/string-util.js';
20202121/**
2222 * A class used to scan text in a document.
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {readResponseJson} from '../../core/json.js';
1919+import {readResponseJson} from '../core/json.js';
20202121/**
2222 * This class is used to apply CSS styles to elements using a consistent method
+1-1
ext/js/dom/text-source-element.js
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {readCodePointsBackward, readCodePointsForward} from '../data/sandbox/string-util.js';
1919+import {readCodePointsBackward, readCodePointsForward} from '../data/string-util.js';
2020import {convertMultipleRectZoomCoordinates} from './document-util.js';
21212222/**
+1-1
ext/js/media/audio-downloader.js
···1919import {RequestBuilder} from '../background/request-builder.js';
2020import {ExtensionError} from '../core/extension-error.js';
2121import {readResponseJson} from '../core/json.js';
2222+import {arrayBufferToBase64} from '../data/array-buffer-util.js';
2223import {JsonSchema} from '../data/json-schema.js';
2323-import {arrayBufferToBase64} from '../data/sandbox/array-buffer-util.js';
2424import {NativeSimpleDOMParser} from '../dom/native-simple-dom-parser.js';
2525import {SimpleDOMParser} from '../dom/simple-dom-parser.js';
2626import {isStringEntirelyKana} from '../language/ja/japanese.js';
+1-1
ext/js/pages/settings/backup-controller.js
···2121import {log} from '../../core/log.js';
2222import {isObjectNotArray} from '../../core/object-utilities.js';
2323import {toError} from '../../core/to-error.js';
2424+import {arrayBufferUtf8Decode} from '../../data/array-buffer-util.js';
2425import {OptionsUtil} from '../../data/options-util.js';
2526import {getAllPermissions} from '../../data/permissions-util.js';
2626-import {arrayBufferUtf8Decode} from '../../data/sandbox/array-buffer-util.js';
2727import {querySelectorNotNull} from '../../dom/query-selector.js';
2828import {DictionaryController} from './dictionary-controller.js';
2929
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {Handlebars} from '../../../lib/handlebars.js';
2020-import {createAnkiNoteData} from '../../data/sandbox/anki-note-data-creator.js';
2121-import {getPronunciationsOfType, isNonNounVerbOrAdjective} from '../../dictionary/dictionary-data-util.js';
2222-import {createPronunciationDownstepPosition, createPronunciationGraph, createPronunciationText} from '../../display/sandbox/pronunciation-generator.js';
2323-import {StructuredContentGenerator} from '../../display/sandbox/structured-content-generator.js';
2424-import {CssStyleApplier} from '../../dom/sandbox/css-style-applier.js';
2525-import {convertHiraganaToKatakana, convertKatakanaToHiragana, distributeFurigana, getKanaMorae, getPitchCategory, isMoraPitchHigh} from '../../language/ja/japanese.js';
1919+import {Handlebars} from '../../lib/handlebars.js';
2020+import {createAnkiNoteData} from '../data/anki-note-data-creator.js';
2121+import {getPronunciationsOfType, isNonNounVerbOrAdjective} from '../dictionary/dictionary-data-util.js';
2222+import {createPronunciationDownstepPosition, createPronunciationGraph, createPronunciationText} from '../display/pronunciation-generator.js';
2323+import {StructuredContentGenerator} from '../display/structured-content-generator.js';
2424+import {CssStyleApplier} from '../dom/css-style-applier.js';
2525+import {convertHiraganaToKatakana, convertKatakanaToHiragana, distributeFurigana, getKanaMorae, getPitchCategory, isMoraPitchHigh} from '../language/ja/japanese.js';
2626import {AnkiTemplateRendererContentManager} from './anki-template-renderer-content-manager.js';
2727import {TemplateRendererMediaProvider} from './template-renderer-media-provider.js';
2828import {TemplateRenderer} from './template-renderer.js';
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {createApiMap, invokeApiMapHandler} from '../../core/api-map.js';
2020-import {parseJson} from '../../core/json.js';
1919+import {createApiMap, invokeApiMapHandler} from '../core/api-map.js';
2020+import {parseJson} from '../core/json.js';
21212222export class TemplateRendererFrameApi {
2323 /**
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {Handlebars} from '../../../lib/handlebars.js';
1919+import {Handlebars} from '../../lib/handlebars.js';
20202121export class TemplateRendererMediaProvider {
2222 constructor() {
···1616 * along with this program. If not, see <https://www.gnu.org/licenses/>.
1717 */
18181919-import {Handlebars} from '../../../lib/handlebars.js';
2020-import {ExtensionError} from '../../core/extension-error.js';
1919+import {Handlebars} from '../../lib/handlebars.js';
2020+import {ExtensionError} from '../core/extension-error.js';
21212222export class TemplateRenderer {
2323 constructor() {
···1616 */
17171818import {vi} from 'vitest';
1919-import {AnkiTemplateRenderer} from '../../ext/js/templates/sandbox/anki-template-renderer.js';
1919+import {AnkiTemplateRenderer} from '../../ext/js/templates/anki-template-renderer.js';
2020import {fetch} from '../mocks/common.js';
2121import {createDomTest} from './dom-test.js';
2222
+2-2
test/utilities/anki.js
···1616 */
17171818import {AnkiNoteBuilder} from '../../ext/js/data/anki-note-builder.js';
1919+import {createAnkiNoteData} from '../../ext/js/data/anki-note-data-creator.js';
1920import {getStandardFieldMarkers} from '../../ext/js/data/anki-template-util.js';
2020-import {createAnkiNoteData} from '../../ext/js/data/sandbox/anki-note-data-creator.js';
2121-import {AnkiTemplateRenderer} from '../../ext/js/templates/sandbox/anki-template-renderer.js';
2121+import {AnkiTemplateRenderer} from '../../ext/js/templates/anki-template-renderer.js';
22222323/**
2424 * @param {import('dictionary').DictionaryEntryType} type