text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  var tslib_1 = require("tslib");
  var React = require("react");
  var Utilities_1 = require("../../Utilities");
  var Label_1 = require("../../Label");
  var KeytipData_1 = require("../../KeytipData");
  var getClassNames = Utilities_1.classNamesFunction();
  var ToggleBase = /** @class */ (function (_super) {
      tslib_1.__extends(ToggleBase, _super);
      function ToggleBase(props) {
          var _this = _super.call(this, props) || this;
          _this._toggleButton = React.createRef();
          _this._onClick = function (ev) {
              var _a = _this.props, disabled = _a.disabled, checkedProp = _a.checked, onChange = _a.onChange, onChanged = _a.onChanged, onClick = _a.onClick;
              var checked = _this.state.checked;
              if (!disabled) {
                  // Only update the state if the user hasn't provided it.
                  if (checkedProp === undefined) {
                      _this.setState({
                          checked: !checked
                      });
                  }
                  if (onChange) {
                      onChange(ev, !checked);
                  }
                  if (onChanged) {
                      onChanged(!checked);
                  }
                  if (onClick) {
                      onClick(ev);
                  }
              }
          };
          _this._warnMutuallyExclusive({
              checked: 'defaultChecked'
          });
          _this._warnDeprecations({
              onAriaLabel: 'ariaLabel',
              offAriaLabel: undefined,
              onChanged: 'onChange'
          });
          _this.state = {
              checked: !!(props.checked || props.defaultChecked)
          };
          _this._id = props.id || Utilities_1.getId('Toggle');
          return _this;
      }
      Object.defineProperty(ToggleBase.prototype, "checked", {
          /**
           * Gets the current checked state of the toggle.
           */
          get: function () {
              return this.state.checked;
          },
          enumerable: true,
          configurable: true
      });
      ToggleBase.prototype.componentWillReceiveProps = function (newProps) {
          if (newProps.checked !== undefined) {
              this.setState({
                  checked: !!newProps.checked // convert null to false
              });
          }
      };
      ToggleBase.prototype.render = function () {
          var _this = this;
          var _a = this.props, _b = _a.as, RootType = _b === void 0 ? 'div' : _b, className = _a.className, theme = _a.theme, disabled = _a.disabled, keytipProps = _a.keytipProps, label = _a.label, ariaLabel = _a.ariaLabel, onAriaLabel = _a.onAriaLabel, offAriaLabel = _a.offAriaLabel, offText = _a.offText, onText = _a.onText, styles = _a.styles, inlineLabel = _a.inlineLabel;
          var checked = this.state.checked;
          var stateText = checked ? onText : offText;
          var badAriaLabel = checked ? onAriaLabel : offAriaLabel;
          var toggleNativeProps = Utilities_1.getNativeProps(this.props, Utilities_1.inputProperties, ['defaultChecked']);
          var classNames = getClassNames(styles, {
              theme: theme,
              className: className,
              disabled: disabled,
              checked: checked,
              inlineLabel: inlineLabel,
              onOffMissing: !onText && !offText
          });
          return (React.createElement(RootType, { className: classNames.root, hidden: toggleNativeProps.hidden },
              label && (React.createElement(Label_1.Label, { htmlFor: this._id, className: classNames.label }, label)),
              React.createElement("div", { className: classNames.container },
                  React.createElement(KeytipData_1.KeytipData, { keytipProps: keytipProps, ariaDescribedBy: toggleNativeProps['aria-describedby'], disabled: disabled }, function (keytipAttributes) { return (React.createElement("button", tslib_1.__assign({}, toggleNativeProps, keytipAttributes, { className: classNames.pill, disabled: disabled, id: _this._id, type: "button", role: "switch" // ARIA 1.1 definition; "checkbox" in ARIA 1.0
                      , ref: _this._toggleButton, "aria-disabled": disabled, "aria-checked": checked, "aria-label": ariaLabel ? ariaLabel : badAriaLabel, "data-is-focusable": true, onChange: _this._noop, onClick: _this._onClick }),
                      React.createElement("div", { className: classNames.thumb }))); }),
                  stateText && React.createElement(Label_1.Label, { className: classNames.text }, stateText))));
      };
      ToggleBase.prototype.focus = function () {
          if (this._toggleButton.current) {
              this._toggleButton.current.focus();
          }
      };
      ToggleBase.prototype._noop = function () {
          /* no-op */
      };
      return ToggleBase;
  }(Utilities_1.BaseComponent));
  exports.ToggleBase = ToggleBase;
  //# sourceMappingURL=Toggle.base.js.map