text: "use strict";
  var __extends = (this && this.__extends) || (function () {
      var extendStatics = function (d, b) {
          extendStatics = Object.setPrototypeOf ||
              ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
              function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
          return extendStatics(d, b);
      };
      return function (d, b) {
          if (typeof b !== "function" && b !== null)
              throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
          extendStatics(d, b);
          function __() { this.constructor = d; }
          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
      };
  })();
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.SVGmaction = void 0;
  var Wrapper_js_1 = require("../Wrapper.js");
  var maction_js_1 = require("../../common/Wrappers/maction.js");
  var maction_js_2 = require("../../common/Wrappers/maction.js");
  var maction_js_3 = require("../../../core/MmlTree/MmlNodes/maction.js");
  var SVGmaction = (function (_super) {
      __extends(SVGmaction, _super);
      function SVGmaction() {
          return _super !== null && _super.apply(this, arguments) || this;
      }
      SVGmaction.prototype.toSVG = function (parent) {
          var svg = this.standardSVGnode(parent);
          var child = this.selected;
          var _a = child.getBBox(), h = _a.h, d = _a.d, w = _a.w;
          this.adaptor.append(this.element, this.svg('rect', {
              width: this.fixed(w), height: this.fixed(h + d), y: this.fixed(-d),
              fill: 'none', 'pointer-events': 'all'
          }));
          child.toSVG(svg);
          this.action(this, this.data);
      };
      SVGmaction.prototype.setEventHandler = function (type, handler) {
          this.element.addEventListener(type, handler);
      };
      SVGmaction.kind = maction_js_3.MmlMaction.prototype.kind;
      SVGmaction.styles = {
          '[jax="SVG"] mjx-tool': {
              display: 'inline-block',
              position: 'relative',
              width: 0, height: 0
          },
          '[jax="SVG"] mjx-tool > mjx-tip': {
              position: 'absolute',
              top: 0, left: 0
          },
          'mjx-tool > mjx-tip': {
              display: 'inline-block',
              padding: '.2em',
              border: '1px solid #888',
              'font-size': '70%',
              'background-color': '#F8F8F8',
              color: 'black',
              'box-shadow': '2px 2px 5px #AAAAAA'
          },
          'g[data-mml-node="maction"][data-toggle]': {
              cursor: 'pointer'
          },
          'mjx-status': {
              display: 'block',
              position: 'fixed',
              left: '1em',
              bottom: '1em',
              'min-width': '25%',
              padding: '.2em .4em',
              border: '1px solid #888',
              'font-size': '90%',
              'background-color': '#F8F8F8',
              color: 'black'
          }
      };
      SVGmaction.actions = new Map([
          ['toggle', [function (node, _data) {
                      node.adaptor.setAttribute(node.element, 'data-toggle', node.node.attributes.get('selection'));
                      var math = node.factory.jax.math;
                      var document = node.factory.jax.document;
                      var mml = node.node;
                      node.setEventHandler('click', function (event) {
                          if (!math.end.node) {
                              math.start.node = math.end.node = math.typesetRoot;
                              math.start.n = math.end.n = 0;
                          }
                          mml.nextToggleSelection();
                          math.rerender(document);
                          event.stopPropagation();
                      });
                  }, {}]],
          ['tooltip', [function (node, data) {
                      var tip = node.childNodes[1];
                      if (!tip)
                          return;
                      var rect = node.firstChild();
                      if (tip.node.isKind('mtext')) {
                          var text = tip.node.getText();
                          node.adaptor.insert(node.svg('title', {}, [node.text(text)]), rect);
                      }
                      else {
                          var adaptor_1 = node.adaptor;
                          var container_1 = node.jax.container;
                          var math = node.node.factory.create('math', {}, [node.childNodes[1].node]);
                          var tool_1 = node.html('mjx-tool', {}, [node.html('mjx-tip')]);
                          var hidden_1 = adaptor_1.append(rect, node.svg('foreignObject', { style: { display: 'none' } }, [tool_1]));
                          node.jax.processMath(math, adaptor_1.firstChild(tool_1));
                          node.childNodes[1].node.parent = node.node;
                          node.setEventHandler('mouseover', function (event) {
                              data.stopTimers(node, data);
                              data.hoverTimer.set(node, setTimeout(function () {
                                  adaptor_1.setStyle(tool_1, 'left', '0');
                                  adaptor_1.setStyle(tool_1, 'top', '0');
                                  adaptor_1.append(container_1, tool_1);
                                  var tbox = adaptor_1.nodeBBox(tool_1);
                                  var nbox = adaptor_1.nodeBBox(node.element);
                                  var dx = (nbox.right - tbox.left) / node.metrics.em + node.dx;
                                  var dy = (nbox.bottom - tbox.bottom) / node.metrics.em + node.dy;
                                  adaptor_1.setStyle(tool_1, 'left', node.px(dx));
                                  adaptor_1.setStyle(tool_1, 'top', node.px(dy));
                              }, data.postDelay));
                              event.stopPropagation();
                          });
                          node.setEventHandler('mouseout', function (event) {
                              data.stopTimers(node, data);
                              var timer = setTimeout(function () { return adaptor_1.append(hidden_1, tool_1); }, data.clearDelay);
                              data.clearTimer.set(node, timer);
                              event.stopPropagation();
                          });
                      }
                  }, maction_js_2.TooltipData]],
          ['statusline', [function (node, data) {
                      var tip = node.childNodes[1];
                      if (!tip)
                          return;
                      if (tip.node.isKind('mtext')) {
                          var adaptor_2 = node.adaptor;
                          var text_1 = tip.node.getText();
                          adaptor_2.setAttribute(node.element, 'data-statusline', text_1);
                          node.setEventHandler('mouseover', function (event) {
                              if (data.status === null) {
                                  var body = adaptor_2.body(adaptor_2.document);
                                  data.status = adaptor_2.append(body, node.html('mjx-status', {}, [node.text(text_1)]));
                              }
                              event.stopPropagation();
                          });
                          node.setEventHandler('mouseout', function (event) {
                              if (data.status) {
                                  adaptor_2.remove(data.status);
                                  data.status = null;
                              }
                              event.stopPropagation();
                          });
                      }
                  }, {
                      status: null
                  }]]
      ]);
      return SVGmaction;
  }(maction_js_1.CommonMactionMixin(Wrapper_js_1.SVGWrapper)));
  exports.SVGmaction = SVGmaction;
  //# sourceMappingURL=maction.js.map