fable-editor 1.2.4 → 1.2.6

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRWRpdG9yTGFuZ3VhZ2UgPSAnZW4nIHwgJ2FyJztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sYmFyR3JvdXBDb25maWcge1xuICBpdGVtczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUNvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IEFycmF5PHN0cmluZyB8IHsgbGFiZWw6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmc7IHNob3J0Y3V0Pzogc3RyaW5nIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckluaXRPcHRpb25zIHtcbiAgdGFyZ2V0OiBIVE1MRWxlbWVudDtcbiAgbGFuZ3VhZ2U/OiBFZGl0b3JMYW5ndWFnZTtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICBpbml0aWFsQ29udGVudD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJlYWR5PzogKGVkaXRvcjogRmFibGVFZGl0b3JBcGkpID0+IHZvaWQ7XG4gIC8qKiBgdHJ1ZWAvb21pdHRlZCA9IGRlZmF1bHQgbWVudSBzZXQgKGBmaWxlIGVkaXQgdmlldyBpbnNlcnQgZm9ybWF0IHRvb2xzIHRhYmxlIGhlbHBgKS5cbiAgICogIGBmYWxzZWAgPSBoaWRkZW4uIEEgc3RyaW5nIGlzIGEgc3BhY2Utc2VwYXJhdGVkIHN1YnNldC9yZW9yZGVyIG9mIHRob3NlIGtleXMsIGUuZy5cbiAgICogIGAnZmlsZSBlZGl0IHZpZXcgaW5zZXJ0IGZvcm1hdCB0b29scyB0YWJsZSBoZWxwJ2AuIFVua25vd24gdG9rZW5zIGFyZSBpZ25vcmVkIHdpdGggYVxuICAgKiAgY29uc29sZSB3YXJuaW5nOyByZWNvZ25pemVkIHRva2VucyByZW5kZXIgaW4gdGhlIG9yZGVyIGdpdmVuLCBkdXBsaWNhdGVzIGFyZSBkcm9wcGVkLiAqL1xuICBtZW51YmFyPzogYm9vbGVhbiB8IHN0cmluZztcbiAgLyoqIGB0cnVlYC9vbWl0dGVkID0gdGhlIGJ1aWx0LWluIGRlZmF1bHQgdG9vbGJhci4gYGZhbHNlYCA9IGhpZGRlbi4gQSBzdHJpbmcgbGF5cyBvdXRcbiAgICogIHRoZSB0b29sYmFyOiBgfGAgc2VwYXJhdGVzIHZpc3VhbCBncm91cHMsIHNwYWNlcyBzZXBhcmF0ZSBpdGVtcyB3aXRoaW4gYSBncm91cCwgZS5nLlxuICAgKiAgYCd1bmRvIHJlZG8gfCBib2xkIGl0YWxpYydgLiBVbmtub3duIHRva2VucyBhcmUgaWdub3JlZCB3aXRoIGEgY29uc29sZSB3YXJuaW5nLiAqL1xuICB0b29sYmFyPzogYm9vbGVhbiB8IHN0cmluZztcbiAgc3RhdHVzYmFyPzogYm9vbGVhbjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICAvKiogU3RvcmFnZSBrZXkgc3VmZml4IGZvciB0aGUgYXV0b3NhdmVkIGRyYWZ0OyBkZWZhdWx0cyB0byB0aGUgcGFnZSBwYXRoLiAqL1xuICBkcmFmdEtleT86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlcyB0aGUgZm9udC1mYW1pbHkgbGlzdCBzaG93biBpbiB0aGUgdG9vbGJhcidzIGZvbnQgZHJvcGRvd24uIEFycmF5IG9mXG4gICAqICBgW2Rpc3BsYXlOYW1lLCBjc3NGb250RmFtaWx5VmFsdWVdYCB0dXBsZXMuIERlZmF1bHRzIHRvIGEgYnVpbHQtaW4gbGlzdC4gKi9cbiAgZm9udEZhbWlseUZvcm1hdHM/OiBbc3RyaW5nLCBzdHJpbmddW107XG4gIC8qKiBDdXN0b20gQ1NTIGZvciB0aGUgZWRpdGFibGUgY29udGVudCBhcmVhLiBCZWNhdXNlIEZhYmxlRWRpdG9yJ3MgZWRpdGFibGUgcmVnaW9uIGlzIGFcbiAgICogIHBsYWluIGBjb250ZW50ZWRpdGFibGVgIGRpdiAobm90IGFuIGlmcmFtZSksIHRoaXMgaXMgTk9UIGFyYml0cmFyeSBnbG9iYWwgQ1NTOiB0aGVcbiAgICogIGxpdGVyYWwgd29yZCBgYm9keWAgaW4geW91ciBDU1MgaXMgcmV3cml0dGVuIHRvIGEgc2VsZWN0b3Igc2NvcGVkIHRvIHRoaXMgZWRpdG9yXG4gICAqICBpbnN0YW5jZSdzIGNvbnRlbnQgZGl2LCBhbmQgZXZlcnkgb3RoZXIgc2VsZWN0b3IgaXMgdXNlZCB2ZXJiYXRpbSAoeW91clxuICAgKiAgcmVzcG9uc2liaWxpdHkgdG8gc2NvcGUpLiBJbnRlbmRlZCBmb3IgdGhlIGNvbW1vbiBwYXR0ZXJuIG9mXG4gICAqICBgYm9keSB7IGZvbnQtZmFtaWx5OiAuLi47IGZvbnQtc2l6ZTogLi4uIH1gIHBsdXMgYEBpbXBvcnRgIGZvbnQgZGVjbGFyYXRpb25zLiAqL1xuICBjb250ZW50U3R5bGU/OiBzdHJpbmc7XG4gIC8qKiBNSU1FIHR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBuYXRpdmUgaW1hZ2UgZmlsZSBwaWNrZXIgKHRoZSBgYWNjZXB0YCBhdHRyaWJ1dGUpLlxuICAgKiAgRGVmYXVsdHMgdG8gYFsnaW1hZ2UvanBlZycsJ2ltYWdlL2pwZycsJ2ltYWdlL3BuZycsJ2ltYWdlL2dpZicsJ2ltYWdlL2JtcCcsJ2ltYWdlL3dlYnAnXWAuICovXG4gIGltYWdlRmlsZVR5cGVzPzogc3RyaW5nW107XG4gIC8qKiBDYWxsZWQgd2hlbiBhIHVzZXIgcGlja3Mgb3IgZHJvcHMgYW4gaW1hZ2UuIFJlc29sdmUgd2l0aCB0aGUgVVJMIHRvXG4gICAqICBpbnNlcnQgKGUuZy4gYWZ0ZXIgdXBsb2FkaW5nIHRvIFMzL0F6dXJlIEJsb2IveW91ciBvd24gc2VydmVyKS4gSWZcbiAgICogIG9taXR0ZWQsIGltYWdlcyBhcmUgaW5saW5lZCBhcyBiYXNlNjQgZGF0YSBVUklzIGluc3RlYWQuIFRoZSBob3N0IHJlc29sdmVzIGEgVVJMXG4gICAqICBhbmQgdGhlIGVuZ2luZSBvd25zIGFsbCBwbGFjZWhvbGRlci9wcm9ncmVzcy9pbnNlcnQgVUksIHNvIHRoZXJlJ3Mgbm8gc2VwYXJhdGVcbiAgICogIFwicGlja2VyXCIgY29uY2VwdCB0byBjb25maWd1cmUuICovXG4gIGltYWdlVXBsb2FkSGFuZGxlcj86IChmaWxlOiBGaWxlKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBDYWxsZWQgd2hlbiBpbWFnZVVwbG9hZEhhbmRsZXIgcmVqZWN0cywgc28gdGhlIGhvc3QgYXBwIGNhbiBzdXJmYWNlIGl0LiAqL1xuICBvbkltYWdlVXBsb2FkRXJyb3I/OiAoZXJyb3I6IHVua25vd24sIGZpbGU6IEZpbGUpID0+IHZvaWQ7XG4gIC8qKiBNSU1FIHR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBuYXRpdmUgdmlkZW8gZmlsZSBwaWNrZXIgKHRoZSBgYWNjZXB0YCBhdHRyaWJ1dGUpLlxuICAgKiAgRGVmYXVsdHMgdG8gYFsndmlkZW8vbXA0JywndmlkZW8vd2VibScsJ3ZpZGVvL29nZyddYC4gKi9cbiAgdmlkZW9GaWxlVHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqIENhbGxlZCB3aGVuIGEgdXNlciBwaWNrcyBvciBkcm9wcyBhIHZpZGVvLiBSZXNvbHZlIHdpdGggdGhlIFVSTCB0b1xuICAgKiAgaW5zZXJ0IChlLmcuIGFmdGVyIHVwbG9hZGluZyB0byBTMy9BenVyZSBCbG9iL3lvdXIgb3duIHNlcnZlcikuIElmXG4gICAqICBvbWl0dGVkLCB2aWRlb3MgYXJlIGlubGluZWQgYXMgYmFzZTY0IGRhdGEgVVJJcyBpbnN0ZWFkLiBNaXJyb3JzXG4gICAqICBgaW1hZ2VVcGxvYWRIYW5kbGVyYCDigJQgdGhlIGVuZ2luZSBvd25zIGFsbCBwbGFjZWhvbGRlci9wcm9ncmVzcy9pbnNlcnQgVUkuICovXG4gIHZpZGVvVXBsb2FkSGFuZGxlcj86IChmaWxlOiBGaWxlKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBDYWxsZWQgd2hlbiB2aWRlb1VwbG9hZEhhbmRsZXIgcmVqZWN0cywgc28gdGhlIGhvc3QgYXBwIGNhbiBzdXJmYWNlIGl0LiAqL1xuICBvblZpZGVvVXBsb2FkRXJyb3I/OiAoZXJyb3I6IHVua25vd24sIGZpbGU6IEZpbGUpID0+IHZvaWQ7XG4gIC8qKiBBY2NlbnQgY29sb3IgdXNlZCBmb3IgYWN0aXZlIHN0YXRlcywgcHJpbWFyeSBidXR0b25zIGFuZCBzZWxlY3Rpb24gb3V0bGluZXMuXG4gICAqICBBbnkgQ1NTIGNvbG9yLiBEZWZhdWx0cyB0byBgI2RmM2MyYmAuIEFwcGxpZWQgYXMgdGhlIGAtLWZhYmxlLXByaW1hcnlgIENTU1xuICAgKiAgdmFyaWFibGUgb24gdGhlIGRvY3VtZW50IHJvb3QgKGRpYWxvZ3MvcG9wdXBzIHJlbmRlciBvdXRzaWRlIHRoZSBlZGl0b3Igc2hlbGwpLiAqL1xuICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIC8qKiBCYWNrZ3JvdW5kIG9mIGVhY2ggdG9vbGJhciBidXR0b24gZ3JvdXAgKHRoZSByb3VuZGVkIHBpbGxzKS4gQW55IENTU1xuICAgKiAgY29sb3IvZ3JhZGllbnQuIERlZmF1bHRzIHRvIGAjZjFmM2Y2YC4gQXBwbGllZCBhcyBgLS1mYWJsZS10Z3JwLWJnYC4gKi9cbiAgdG9vbGJhckdyb3VwQmFja2dyb3VuZD86IHN0cmluZztcbiAgLyoqIEZvbnQgZmFtaWx5IGZvciB0aGUgZWRpdG9yIFVJIChtZW51YmFyLCB0b29sYmFyLCBkaWFsb2dzLCBwb3B1cHMpLiBEZWZhdWx0cyB0b1xuICAgKiAgYSAnTm90byBTYW5zJyBzdGFjayDigJQgbG9hZCB0aGUgTm90byBTYW5zIHdlYmZvbnQgaW4geW91ciBhcHAgdG8gdXNlIGl0LCBvciBwYXNzXG4gICAqICB5b3VyIG93biBmYW1pbHkgaGVyZS4gQXBwbGllZCBhcyBgLS1mYWJsZS11aS1mb250YC4gKi9cbiAgdWlGb250RmFtaWx5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZhYmxlRWRpdG9yQXBpIHtcbiAgZ2V0Q29udGVudCgpOiBzdHJpbmc7XG4gIHNldENvbnRlbnQoaHRtbDogc3RyaW5nKTogdm9pZDtcbiAgaW5zZXJ0Q29udGVudChodG1sOiBzdHJpbmcpOiB2b2lkO1xuICBzZXRMYW5ndWFnZShsYW5nOiBFZGl0b3JMYW5ndWFnZSk6IHZvaWQ7XG4gIGZvY3VzKCk6IHZvaWQ7XG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgaW1wb3J0V29yZEZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD47XG4gIHJlc3RvcmVEcmFmdCgpOiBib29sZWFuO1xuICBnZXRSZXZpc2lvbnMoKTogQXJyYXk8eyB0aW1lOiBudW1iZXI7IGh0bWw6IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dCdXR0b24ge1xuICBsYWJlbDogc3RyaW5nO1xuICBwcmltYXJ5PzogYm9vbGVhbjtcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtRGVmIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgYWN0aW9uPzogKCkgPT4gdm9pZDtcbiAgc2hvcnRjdXQ/OiBzdHJpbmc7XG4gIHByZXZpZXdTdHlsZT86IHN0cmluZztcbiAgb24/OiBib29sZWFuO1xuICAvKiogSG92ZXIgZmx5b3V0IHN1Ym1lbnUgaXRlbXMuICovXG4gIHN1Yj86IEFycmF5PE1lbnVJdGVtRGVmIHwgJ3wnPjtcbiAgLyoqIEhvdmVyIGZseW91dCB3aXRoIGN1c3RvbSBjb250ZW50IChlLmcuIHRoZSB0YWJsZSBzaXplIGdyaWQpLiAqL1xuICBzdWJCdWlsZD86IChlbDogSFRNTEVsZW1lbnQpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2l0aCB0cnVlL2ZhbHNlIGFzIHRoZSBwb2ludGVyIGVudGVycy9sZWF2ZXMgdGhlIGl0ZW0gKGUuZy4gdG8gaGlnaGxpZ2h0IHRoZSB0YWJsZSByb3cvY29sdW1uIGFuIG9wZXJhdGlvbiB3aWxsIHRhcmdldCkuICovXG4gIGhvdmVyPzogKG9uOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBUYWJsZU9wZXJhdGlvbiA9XG4gIHwgJ3Jvd2Fib3ZlJ1xuICB8ICdyb3diZWxvdydcbiAgfCAnZGVscm93J1xuICB8ICdjb2xiZWZvcmUnXG4gIHwgJ2NvbGFmdGVyJ1xuICB8ICdkZWxjb2wnXG4gIHwgJ2RlbHRhYmxlJztcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRWRpdG9yTGFuZ3VhZ2UgPSAnZW4nIHwgJ2FyJztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sYmFyR3JvdXBDb25maWcge1xuICBpdGVtczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUNvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IEFycmF5PHN0cmluZyB8IHsgbGFiZWw6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmc7IHNob3J0Y3V0Pzogc3RyaW5nIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckluaXRPcHRpb25zIHtcbiAgdGFyZ2V0OiBIVE1MRWxlbWVudDtcbiAgbGFuZ3VhZ2U/OiBFZGl0b3JMYW5ndWFnZTtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICBpbml0aWFsQ29udGVudD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJlYWR5PzogKGVkaXRvcjogRmFibGVFZGl0b3JBcGkpID0+IHZvaWQ7XG4gIC8qKiBgdHJ1ZWAvb21pdHRlZCA9IGRlZmF1bHQgbWVudSBzZXQgKGBmaWxlIGVkaXQgdmlldyBpbnNlcnQgZm9ybWF0IHRvb2xzIHRhYmxlIGhlbHBgKS5cbiAgICogIGBmYWxzZWAgPSBoaWRkZW4uIEEgc3RyaW5nIGlzIGEgc3BhY2Utc2VwYXJhdGVkIHN1YnNldC9yZW9yZGVyIG9mIHRob3NlIGtleXMsIGUuZy5cbiAgICogIGAnZmlsZSBlZGl0IHZpZXcgaW5zZXJ0IGZvcm1hdCB0b29scyB0YWJsZSBoZWxwJ2AuIFVua25vd24gdG9rZW5zIGFyZSBpZ25vcmVkIHdpdGggYVxuICAgKiAgY29uc29sZSB3YXJuaW5nOyByZWNvZ25pemVkIHRva2VucyByZW5kZXIgaW4gdGhlIG9yZGVyIGdpdmVuLCBkdXBsaWNhdGVzIGFyZSBkcm9wcGVkLiAqL1xuICBtZW51YmFyPzogYm9vbGVhbiB8IHN0cmluZztcbiAgLyoqIGB0cnVlYC9vbWl0dGVkID0gdGhlIGJ1aWx0LWluIGRlZmF1bHQgdG9vbGJhci4gYGZhbHNlYCA9IGhpZGRlbi4gQSBzdHJpbmcgbGF5cyBvdXRcbiAgICogIHRoZSB0b29sYmFyOiBgfGAgc2VwYXJhdGVzIHZpc3VhbCBncm91cHMsIHNwYWNlcyBzZXBhcmF0ZSBpdGVtcyB3aXRoaW4gYSBncm91cCwgZS5nLlxuICAgKiAgYCd1bmRvIHJlZG8gfCBib2xkIGl0YWxpYydgLiBVbmtub3duIHRva2VucyBhcmUgaWdub3JlZCB3aXRoIGEgY29uc29sZSB3YXJuaW5nLiAqL1xuICB0b29sYmFyPzogYm9vbGVhbiB8IHN0cmluZztcbiAgc3RhdHVzYmFyPzogYm9vbGVhbjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICAvKiogU3RvcmFnZSBrZXkgc3VmZml4IGZvciB0aGUgYXV0b3NhdmVkIGRyYWZ0OyBkZWZhdWx0cyB0byB0aGUgcGFnZSBwYXRoLiAqL1xuICBkcmFmdEtleT86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlcyB0aGUgZm9udC1mYW1pbHkgbGlzdCBzaG93biBpbiB0aGUgdG9vbGJhcidzIGZvbnQgZHJvcGRvd24uIEFycmF5IG9mXG4gICAqICBgW2Rpc3BsYXlOYW1lLCBjc3NGb250RmFtaWx5VmFsdWVdYCB0dXBsZXMuIERlZmF1bHRzIHRvIGEgYnVpbHQtaW4gbGlzdC4gKi9cbiAgZm9udEZhbWlseUZvcm1hdHM/OiBbc3RyaW5nLCBzdHJpbmddW107XG4gIC8qKiBDdXN0b20gQ1NTIGZvciB0aGUgZWRpdGFibGUgY29udGVudCBhcmVhLiBCZWNhdXNlIEZhYmxlRWRpdG9yJ3MgZWRpdGFibGUgcmVnaW9uIGlzIGFcbiAgICogIHBsYWluIGBjb250ZW50ZWRpdGFibGVgIGRpdiAobm90IGFuIGlmcmFtZSksIHRoaXMgaXMgTk9UIGFyYml0cmFyeSBnbG9iYWwgQ1NTOiB0aGVcbiAgICogIGxpdGVyYWwgd29yZCBgYm9keWAgaW4geW91ciBDU1MgaXMgcmV3cml0dGVuIHRvIGEgc2VsZWN0b3Igc2NvcGVkIHRvIHRoaXMgZWRpdG9yXG4gICAqICBpbnN0YW5jZSdzIGNvbnRlbnQgZGl2LCBhbmQgZXZlcnkgb3RoZXIgc2VsZWN0b3IgaXMgdXNlZCB2ZXJiYXRpbSAoeW91clxuICAgKiAgcmVzcG9uc2liaWxpdHkgdG8gc2NvcGUpLiBJbnRlbmRlZCBmb3IgdGhlIGNvbW1vbiBwYXR0ZXJuIG9mXG4gICAqICBgYm9keSB7IGZvbnQtZmFtaWx5OiAuLi47IGZvbnQtc2l6ZTogLi4uIH1gIHBsdXMgYEBpbXBvcnRgIGZvbnQgZGVjbGFyYXRpb25zLiAqL1xuICBjb250ZW50U3R5bGU/OiBzdHJpbmc7XG4gIC8qKiBNSU1FIHR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBuYXRpdmUgaW1hZ2UgZmlsZSBwaWNrZXIgKHRoZSBgYWNjZXB0YCBhdHRyaWJ1dGUpLlxuICAgKiAgRGVmYXVsdHMgdG8gYFsnaW1hZ2UvanBlZycsJ2ltYWdlL2pwZycsJ2ltYWdlL3BuZycsJ2ltYWdlL2dpZicsJ2ltYWdlL2JtcCcsJ2ltYWdlL3dlYnAnXWAuICovXG4gIGltYWdlRmlsZVR5cGVzPzogc3RyaW5nW107XG4gIC8qKiBDYWxsZWQgd2hlbiBhIHVzZXIgcGlja3Mgb3IgZHJvcHMgYW4gaW1hZ2UuIFJlc29sdmUgd2l0aCB0aGUgVVJMIHRvXG4gICAqICBpbnNlcnQgKGUuZy4gYWZ0ZXIgdXBsb2FkaW5nIHRvIFMzL0F6dXJlIEJsb2IveW91ciBvd24gc2VydmVyKS4gSWZcbiAgICogIG9taXR0ZWQsIGltYWdlcyBhcmUgaW5saW5lZCBhcyBiYXNlNjQgZGF0YSBVUklzIGluc3RlYWQuIFRoZSBob3N0IHJlc29sdmVzIGEgVVJMXG4gICAqICBhbmQgdGhlIGVuZ2luZSBvd25zIGFsbCBwbGFjZWhvbGRlci9wcm9ncmVzcy9pbnNlcnQgVUksIHNvIHRoZXJlJ3Mgbm8gc2VwYXJhdGVcbiAgICogIFwicGlja2VyXCIgY29uY2VwdCB0byBjb25maWd1cmUuICovXG4gIGltYWdlVXBsb2FkSGFuZGxlcj86IChmaWxlOiBGaWxlKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBDYWxsZWQgd2hlbiBpbWFnZVVwbG9hZEhhbmRsZXIgcmVqZWN0cywgc28gdGhlIGhvc3QgYXBwIGNhbiBzdXJmYWNlIGl0LiAqL1xuICBvbkltYWdlVXBsb2FkRXJyb3I/OiAoZXJyb3I6IHVua25vd24sIGZpbGU6IEZpbGUpID0+IHZvaWQ7XG4gIC8qKiBNSU1FIHR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBuYXRpdmUgdmlkZW8gZmlsZSBwaWNrZXIgKHRoZSBgYWNjZXB0YCBhdHRyaWJ1dGUpLlxuICAgKiAgRGVmYXVsdHMgdG8gYFsndmlkZW8vbXA0JywndmlkZW8vd2VibScsJ3ZpZGVvL29nZyddYC4gKi9cbiAgdmlkZW9GaWxlVHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqIENhbGxlZCB3aGVuIGEgdXNlciBwaWNrcyBvciBkcm9wcyBhIHZpZGVvLiBSZXNvbHZlIHdpdGggdGhlIFVSTCB0b1xuICAgKiAgaW5zZXJ0IChlLmcuIGFmdGVyIHVwbG9hZGluZyB0byBTMy9BenVyZSBCbG9iL3lvdXIgb3duIHNlcnZlcikuIElmXG4gICAqICBvbWl0dGVkLCB2aWRlb3MgYXJlIGlubGluZWQgYXMgYmFzZTY0IGRhdGEgVVJJcyBpbnN0ZWFkLiBNaXJyb3JzXG4gICAqICBgaW1hZ2VVcGxvYWRIYW5kbGVyYCDigJQgdGhlIGVuZ2luZSBvd25zIGFsbCBwbGFjZWhvbGRlci9wcm9ncmVzcy9pbnNlcnQgVUkuICovXG4gIHZpZGVvVXBsb2FkSGFuZGxlcj86IChmaWxlOiBGaWxlKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBDYWxsZWQgd2hlbiB2aWRlb1VwbG9hZEhhbmRsZXIgcmVqZWN0cywgc28gdGhlIGhvc3QgYXBwIGNhbiBzdXJmYWNlIGl0LiAqL1xuICBvblZpZGVvVXBsb2FkRXJyb3I/OiAoZXJyb3I6IHVua25vd24sIGZpbGU6IEZpbGUpID0+IHZvaWQ7XG4gIC8qKiBBY2NlbnQgY29sb3IgdXNlZCBmb3IgYWN0aXZlIHN0YXRlcywgcHJpbWFyeSBidXR0b25zIGFuZCBzZWxlY3Rpb24gb3V0bGluZXMuXG4gICAqICBBbnkgQ1NTIGNvbG9yLiBEZWZhdWx0cyB0byBgI2RmM2MyYmAuIEFwcGxpZWQgYXMgdGhlIGAtLWZhYmxlLXByaW1hcnlgIENTU1xuICAgKiAgdmFyaWFibGUgb24gdGhlIGRvY3VtZW50IHJvb3QgKGRpYWxvZ3MvcG9wdXBzIHJlbmRlciBvdXRzaWRlIHRoZSBlZGl0b3Igc2hlbGwpLiAqL1xuICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gIC8qKiBCYWNrZ3JvdW5kIG9mIGVhY2ggdG9vbGJhciBidXR0b24gZ3JvdXAgKHRoZSByb3VuZGVkIHBpbGxzKS4gQW55IENTU1xuICAgKiAgY29sb3IvZ3JhZGllbnQuIERlZmF1bHRzIHRvIGAjZjFmM2Y2YC4gQXBwbGllZCBhcyBgLS1mYWJsZS10Z3JwLWJnYC4gKi9cbiAgdG9vbGJhckdyb3VwQmFja2dyb3VuZD86IHN0cmluZztcbiAgLyoqIEZvbnQgZmFtaWx5IGZvciB0aGUgZWRpdG9yIFVJIChtZW51YmFyLCB0b29sYmFyLCBkaWFsb2dzLCBwb3B1cHMpLiBEZWZhdWx0cyB0b1xuICAgKiAgYSAnTm90byBTYW5zJyBzdGFjayDigJQgbG9hZCB0aGUgTm90byBTYW5zIHdlYmZvbnQgaW4geW91ciBhcHAgdG8gdXNlIGl0LCBvciBwYXNzXG4gICAqICB5b3VyIG93biBmYW1pbHkgaGVyZS4gQXBwbGllZCBhcyBgLS1mYWJsZS11aS1mb250YC4gKi9cbiAgdWlGb250RmFtaWx5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZhYmxlRWRpdG9yQXBpIHtcbiAgZ2V0Q29udGVudCgpOiBzdHJpbmc7XG4gIGdldENvbnRlbnRGb3JFbWFpbCgpOiBzdHJpbmc7XG4gIHNldENvbnRlbnQoaHRtbDogc3RyaW5nKTogdm9pZDtcbiAgaW5zZXJ0Q29udGVudChodG1sOiBzdHJpbmcpOiB2b2lkO1xuICBzZXRMYW5ndWFnZShsYW5nOiBFZGl0b3JMYW5ndWFnZSk6IHZvaWQ7XG4gIGZvY3VzKCk6IHZvaWQ7XG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgaW1wb3J0V29yZEZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD47XG4gIHJlc3RvcmVEcmFmdCgpOiBib29sZWFuO1xuICBnZXRSZXZpc2lvbnMoKTogQXJyYXk8eyB0aW1lOiBudW1iZXI7IGh0bWw6IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dCdXR0b24ge1xuICBsYWJlbDogc3RyaW5nO1xuICBwcmltYXJ5PzogYm9vbGVhbjtcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtRGVmIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgYWN0aW9uPzogKCkgPT4gdm9pZDtcbiAgc2hvcnRjdXQ/OiBzdHJpbmc7XG4gIHByZXZpZXdTdHlsZT86IHN0cmluZztcbiAgb24/OiBib29sZWFuO1xuICAvKiogSG92ZXIgZmx5b3V0IHN1Ym1lbnUgaXRlbXMuICovXG4gIHN1Yj86IEFycmF5PE1lbnVJdGVtRGVmIHwgJ3wnPjtcbiAgLyoqIEhvdmVyIGZseW91dCB3aXRoIGN1c3RvbSBjb250ZW50IChlLmcuIHRoZSB0YWJsZSBzaXplIGdyaWQpLiAqL1xuICBzdWJCdWlsZD86IChlbDogSFRNTEVsZW1lbnQpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2l0aCB0cnVlL2ZhbHNlIGFzIHRoZSBwb2ludGVyIGVudGVycy9sZWF2ZXMgdGhlIGl0ZW0gKGUuZy4gdG8gaGlnaGxpZ2h0IHRoZSB0YWJsZSByb3cvY29sdW1uIGFuIG9wZXJhdGlvbiB3aWxsIHRhcmdldCkuICovXG4gIGhvdmVyPzogKG9uOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBUYWJsZU9wZXJhdGlvbiA9XG4gIHwgJ3Jvd2Fib3ZlJ1xuICB8ICdyb3diZWxvdydcbiAgfCAnZGVscm93J1xuICB8ICdjb2xiZWZvcmUnXG4gIHwgJ2NvbGFmdGVyJ1xuICB8ICdkZWxjb2wnXG4gIHwgJ2RlbHRhYmxlJztcbiJdfQ==
@@ -1771,6 +1771,45 @@ function installTooltips() {
1771
1771
  document.addEventListener('mousedown', hideTip, true);
1772
1772
  addEventListener('scroll', hideTip, true);
1773
1773
  }
1774
+ /* ---------------------------------------------------------- email-export direction
1775
+ detection — used only by getContentForEmail(). Content pasted from Word/Outlook
1776
+ usually carries explicit dir="rtl"/"ltr" per paragraph, but plain-text paste
1777
+ (normalizeTextPaste's dir="auto") and some other sources carry no reliable
1778
+ explicit direction at all. For those blocks we fall back to a first-strong-
1779
+ character scan (the same idea as HTML5's dir="auto") instead of the app's
1780
+ configured UI language, which has nothing to do with what the pasted text
1781
+ actually is. */
1782
+ const EMAIL_RTL_CHAR = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u077F\u0780-\u07BF\u08A0-\u08FF\uFB1D-\uFB4F\uFB50-\uFDFF\uFE70-\uFEFF]/;
1783
+ const EMAIL_STRONG_CHAR = /\p{L}/u;
1784
+ const EMAIL_BLOCK_SELECTOR = 'p,div,li,td,th,blockquote,h1,h2,h3,h4,h5,h6,pre,figcaption';
1785
+ function firstStrongDir(text) {
1786
+ for (const ch of text) {
1787
+ if (EMAIL_RTL_CHAR.test(ch))
1788
+ return 'rtl';
1789
+ if (EMAIL_STRONG_CHAR.test(ch))
1790
+ return 'ltr';
1791
+ }
1792
+ return null;
1793
+ }
1794
+ /* Text belonging to el itself, skipping subtrees rooted at a descendant that
1795
+ already carries its own explicit rtl/ltr dir — that subtree's direction is
1796
+ already independently decided and shouldn't sway el's own detection. */
1797
+ function ownText(el) {
1798
+ let text = '';
1799
+ el.childNodes.forEach((node) => {
1800
+ if (node.nodeType === Node.TEXT_NODE) {
1801
+ text += node.nodeValue || '';
1802
+ }
1803
+ else if (node.nodeType === Node.ELEMENT_NODE) {
1804
+ const child = node;
1805
+ const d = (child.getAttribute('dir') || '').toLowerCase();
1806
+ if (d === 'rtl' || d === 'ltr')
1807
+ return;
1808
+ text += ownText(child);
1809
+ }
1810
+ });
1811
+ return text;
1812
+ }
1774
1813
  class FableEditor {
1775
1814
  static instanceCounter = 0;
1776
1815
  options;
@@ -2248,6 +2287,59 @@ class FableEditor {
2248
2287
  getContent() {
2249
2288
  return this.ed.innerHTML;
2250
2289
  }
2290
+ /** Same HTML as getContent(), wrapped so its RTL/LTR direction survives being
2291
+ * dropped into a fixed-alignment host (e.g. an email template's
2292
+ * `<td align="left">`), which otherwise forces left alignment onto any
2293
+ * descendant that has no `text-align` of its own — even one with its own
2294
+ * dir="rtl". Elements that already carry their own dir (preserved as-is by
2295
+ * the paste engine) each get their own matching text-align only if they
2296
+ * don't already have one. Blocks with no reliable explicit dir (missing, or
2297
+ * dir="auto" from plain-text paste) get their direction from a first-strong-
2298
+ * character scan of their own text instead of silently inheriting the
2299
+ * editor's configured UI language — mixed-direction content and any
2300
+ * alignment the user explicitly set are left untouched either way. Only
2301
+ * content with no strongly-directional character anywhere falls back to the
2302
+ * editor's current direction. */
2303
+ getContentForEmail() {
2304
+ const setStyle = (el, decl) => {
2305
+ const cur = (el.getAttribute('style') || '').trim();
2306
+ el.setAttribute('style', cur ? cur.replace(/;?$/, '; ') + decl : decl);
2307
+ };
2308
+ const box = document.createElement('div');
2309
+ box.innerHTML = this.ed.innerHTML;
2310
+ let found = null;
2311
+ box.querySelectorAll('[dir]').forEach((el) => {
2312
+ const raw = (el.getAttribute('dir') || '').toLowerCase();
2313
+ if (raw !== 'rtl' && raw !== 'ltr')
2314
+ return;
2315
+ const d = raw;
2316
+ if (!found)
2317
+ found = d;
2318
+ if (!/text-align\s*:/i.test(el.getAttribute('style') || ''))
2319
+ setStyle(el, `text-align:${d === 'rtl' ? 'right' : 'left'}`);
2320
+ });
2321
+ box.querySelectorAll(EMAIL_BLOCK_SELECTOR).forEach((el) => {
2322
+ const raw = (el.getAttribute('dir') || '').toLowerCase();
2323
+ if (raw === 'rtl' || raw === 'ltr')
2324
+ return;
2325
+ const d = firstStrongDir(ownText(el));
2326
+ if (!d)
2327
+ return;
2328
+ if (!found)
2329
+ found = d;
2330
+ el.setAttribute('dir', d);
2331
+ const hasAlign = /text-align\s*:/i.test(el.getAttribute('style') || '');
2332
+ setStyle(el, hasAlign ? `direction:${d}` : `direction:${d};text-align:${d === 'rtl' ? 'right' : 'left'}`);
2333
+ });
2334
+ const dir = found || this.ed.getAttribute('dir') || this.dir();
2335
+ box.querySelectorAll('table:not([dir])').forEach((tbl) => {
2336
+ tbl.setAttribute('dir', dir);
2337
+ if (!/direction\s*:/i.test(tbl.getAttribute('style') || ''))
2338
+ setStyle(tbl, `direction:${dir}`);
2339
+ });
2340
+ const align = dir === 'rtl' ? 'right' : 'left';
2341
+ return `<div dir="${dir}" style="direction:${dir};text-align:${align}">${box.innerHTML}</div>`;
2342
+ }
2251
2343
  setContent(html) {
2252
2344
  this.ed.innerHTML = html || '<p><br></p>';
2253
2345
  this.refreshState();
@@ -5872,6 +5964,9 @@ class FableEditorComponent {
5872
5964
  getContent() {
5873
5965
  return this.editor?.getContent() ?? '';
5874
5966
  }
5967
+ getContentForEmail() {
5968
+ return this.editor?.getContentForEmail() ?? '';
5969
+ }
5875
5970
  setContent(html) {
5876
5971
  this.lastContent = html;
5877
5972
  this.editor?.setContent(html ?? '');