+ * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License v3.0
+ * @link https://github.com/magicsunday/webtrees-pedigree-chart/
+ */
+export default class Overlay
+{
+ /**
+ * Constructor.
+ *
+ * @param {Selection} parent The selected D3 parent element container
+ */
+ constructor(parent)
+ {
+ // Create the tooltip overlay container
+ this._element = parent
+ .append("div")
+ .attr("class", "overlay")
+ .style("opacity", 1e-6);
+ }
+
+ /**
+ * Stop any pending transition and hide overlay immediately.
+ *
+ * @param {String} text Text to display in overlay
+ * @param {Number} duration Duration of transition in msec
+ * @param {Function} callback Callback method to execute on end of transition
+ */
+ show(text, duration = 0, callback = null)
+ {
+ // Remove any previously added element
+ this._element
+ .select("p")
+ .remove();
+
+ this._element
+ .append("p")
+ .attr("class", "tooltip")
+ .text(text);
+
+ this._element
+ .transition()
+ .duration(duration)
+ .style("opacity", 1)
+ .on("end", () => {
+ if (typeof callback === "function") {
+ callback();
+ }
+ });
+ }
+
+ /**
+ * Stop any pending transition and hide overlay immediately.
+ *
+ * @param {Number} delay Delay in milliseconds to wait before transition should start
+ * @param {Number} duration Duration of transition in milliseconds
+ */
+ hide(delay = 0, duration = 0)
+ {
+ this._element
+ .transition()
+ .delay(delay)
+ .duration(duration)
+ .style("opacity", 1e-6);
+ }
+
+ /**
+ * Returns the internal element.
+ *
+ * @returns {Selection}
+ */
+ get()
+ {
+ return this._element;
+ }
+}
diff --git a/assets/js/modules/chart/svg.js b/assets/js/modules/chart/svg.js
new file mode 100644
index 00000000..5636125f
--- /dev/null
+++ b/assets/js/modules/chart/svg.js
@@ -0,0 +1,184 @@
+/**
+ * See LICENSE.md file for further details.
+ */
+
+import Defs from "./svg/defs";
+import Zoom from "./svg/zoom";
+import ExportFactory from "./svg/export-factory";
+
+/**
+ * SVG class
+ *
+ * @author Rico Sonntag
+ * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License v3.0
+ * @link https://github.com/magicsunday/webtrees-pedigree-chart/
+ */
+export default class Svg
+{
+ /**
+ * Constructor.
+ *
+ * @param {Selection} parent The selected D3 parent element container
+ * @param {Configuration} configuration The application configuration
+ */
+ constructor(parent, configuration)
+ {
+ // Create the