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.
- package/dist/angular/angular/fable-editor.component.d.ts +1 -0
- package/dist/angular/core/editor.d.ts +14 -0
- package/dist/angular/core/types.d.ts +1 -0
- package/dist/angular/esm2022/angular/fable-editor.component.mjs +4 -1
- package/dist/angular/esm2022/core/editor.mjs +93 -1
- package/dist/angular/esm2022/core/types.mjs +1 -1
- package/dist/angular/fesm2022/fable-editor.mjs +95 -0
- package/dist/angular/fesm2022/fable-editor.mjs.map +1 -1
- package/dist/core/editor.d.ts +14 -0
- package/dist/core/editor.d.ts.map +1 -1
- package/dist/core/index.cjs +3 -3
- package/dist/core/index.mjs +177 -118
- package/dist/core/types.d.ts +1 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/react/FableEditor.d.ts.map +1 -1
- package/dist/react/index.cjs +9 -9
- package/dist/react/index.mjs +233 -170
- package/package.json +1 -1
|
@@ -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/
|
|
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 ?? '');
|