all files / pivotview/actions/ keyboard.js

46.67% Statements 133/285
37.4% Branches 95/254
68.42% Functions 13/19
46.67% Lines 133/285
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448   143×                                 143× 143× 143× 143×           16×                               11× 11×                                                                                                                                                                                                                                                                                                                                                                                                                               11× 11×   11× 11× 11× 11× 11× 11×                 11×                                                                                                             143× 143×                
define(["require", "exports", "@syncfusion/ej2-base", "../../common/base/css-constant", "../../common/base/constant"], function (require, exports, ej2_base_1, cls, events) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var KeyboardInteraction = (function () {
        function KeyboardInteraction(parent) {
            this.keyConfigs = {
                tab: 'tab',
                shiftTab: 'shift+tab',
                enter: 'enter',
                shiftUp: 'shift+upArrow',
                shiftDown: 'shift+downArrow',
                shiftLeft: 'shift+leftArrow',
                shiftRight: 'shift+rightArrow',
                shiftEnter: 'shift+enter',
                ctrlEnter: 'ctrl+enter',
                upArrow: 'upArrow',
                downArrow: 'downArrow',
                leftArrow: 'leftArrow',
                rightArrow: 'rightArrow',
                escape: 'escape',
                ctrlShiftF: 'ctrl+shift+f'
            };
            this.parent = parent;
            this.event = undefined;
            this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;
            this.pivotViewKeyboardModule = new ej2_base_1.KeyboardEvents(this.parent.element, {
                keyAction: this.keyActionHandler.bind(this),
                keyConfigs: this.keyConfigs,
                eventName: 'keydown'
            });
        }
        KeyboardInteraction.prototype.keyActionHandler = function (e) {
            switch (e.action) {
                case 'tab':
                    this.processTab(e);
                    break;
                case 'shiftTab':
                    this.processShiftTab(e);
                    break;
                case 'enter':
                case 'shiftEnter':
                case 'ctrlEnter':
                    this.processEnter(e);
                    break;
                case 'shiftUp':
                case 'shiftDown':
                case 'shiftLeft':
                case 'shiftRight':
                case 'upArrow':
                case 'downArrow':
                case 'leftArrow':
                case 'rightArrow':
                    this.processSelection(e);
                    break;
                case 'escape':
                    this.clearSelection();
                    break;
                case 'ctrlShiftF':
                    this.toggleFieldList(e);
                    break;
            }
        };
        KeyboardInteraction.prototype.getNextButton = function (target) {
            var allPivotButtons = this.allpivotButtons(target);
            ej2_base_1.removeClass(allPivotButtons, 'e-btn-focused');
            Eif (this.parent.grid.element.querySelector('.' + cls.PIVOT_BUTTON_CLASS)) {
                var len = allPivotButtons.length;
                for (var i = 0; i < len; i++) {
                    if (allPivotButtons[i].getAttribute('data-uid') === target.getAttribute('data-uid')) {
                        return (allPivotButtons[i + 1] ? allPivotButtons[i + 1] : target);
                    }
                }
            }
            return target;
        };
        KeyboardInteraction.prototype.getPrevButton = function (target) {
            var allPivotButtons = this.allpivotButtons(target);
            ej2_base_1.removeClass(allPivotButtons, 'e-btn-focused');
            if (this.parent.grid.element.querySelector('.' + cls.PIVOT_BUTTON_CLASS)) {
                var len = allPivotButtons.length;
                for (var i = 0; i < len; i++) {
                    if (allPivotButtons[i].getAttribute('data-uid') === target.getAttribute('data-uid')) {
                        return (allPivotButtons[i - 1] ? allPivotButtons[i - 1] : target);
                    }
                }
            }
            return target;
        };
        KeyboardInteraction.prototype.allpivotButtons = function (target) {
            var buttons = [];
            Eif (target && this.parent.showGroupingBar) {
                var columnFilterValueGroup = ej2_base_1.closest(target, '.' + cls.GRID_GROUPING_BAR_CLASS);
                var rowGroup = ej2_base_1.closest(target, '.' + cls.GROUP_PIVOT_ROW);
                var chartGroup = ej2_base_1.closest(target, '.' + cls.CHART_GROUPING_BAR_CLASS);
                var tableAxis = target.classList.contains(cls.ROWSHEADER);
                var chartAxis = void 0;
                var rowAxis = void 0;
                var columnFilterValueAxis = void 0;
                if (columnFilterValueGroup !== null) {
                    rowAxis = columnFilterValueGroup.classList.contains(cls.GRID_GROUPING_BAR_CLASS);
                }
                else Eif (rowGroup !== null) {
                    columnFilterValueAxis = rowGroup.classList.contains(cls.GROUP_PIVOT_ROW);
                }
                else if (chartGroup !== null) {
                    chartAxis = chartGroup.classList.contains(cls.CHART_GROUPING_BAR_CLASS);
                }
                Eif (rowAxis || columnFilterValueAxis || tableAxis) {
                    var groupingbarButton = [].slice.call(this.parent.element.querySelector('.' + cls.GRID_GROUPING_BAR_CLASS).querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));
                    var headerButton = [].slice.call(this.parent.element.querySelector('.' + cls.GROUP_PIVOT_ROW).querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));
                    buttons = groupingbarButton.concat(headerButton);
                }
                else if (chartAxis) {
                    buttons = [].slice.call(this.parent.element.querySelector('.' + cls.CHART_GROUPING_BAR_CLASS).querySelectorAll('.' + cls.PIVOT_BUTTON_CLASS));
                }
            }
            return buttons;
        };
        KeyboardInteraction.prototype.processTab = function (e) {
            var target = e.target;
            if (target && (ej2_base_1.closest(target, '.' + cls.PIVOT_BUTTON_CLASS) || target.classList.contains('e-group-row'))) {
                Eif (this.parent.grid) {
                    var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                    Iif (target.classList.contains('e-group-row') && target.querySelector('.e-btn-focused')) {
                        target = target.querySelector('.e-btn-focused');
                    }
                    else Iif (target.classList.contains('e-group-row')) {
                        gridFocus.focus();
                        var element = gridFocus.getFocusedElement();
                        ej2_base_1.addClass([element], ['e-focused', 'e-focus']);
                        element.setAttribute('tabindex', '0');
                        e.preventDefault();
                        return;
                    }
                    var nextButton = this.getNextButton(target);
                    if (nextButton.getAttribute('data-uid') !== target.getAttribute('data-uid')) {
                        Iif (this.parent.element.querySelector('.e-focused')) {
                            this.parent.element.querySelector('.e-focused').setAttribute('tabindex', '-1');
                            ej2_base_1.removeClass(this.parent.element.querySelectorAll('.e-focus'), 'e-focus');
                            ej2_base_1.removeClass(this.parent.element.querySelectorAll('.e-focused'), 'e-focused');
                            gridFocus.setFocusedElement(this.parent.element.querySelector('.e-headercell'));
                            this.parent.element.querySelector('.e-headercell').setAttribute('tabindex', '0');
                        }
                        else {
                            gridFocus.currentInfo.skipAction = true;
                        }
                        ej2_base_1.addClass([nextButton], 'e-btn-focused');
                        nextButton.focus();
                    }
                    else {
                        gridFocus.focus();
                        var element = gridFocus.getFocusedElement();
                        ej2_base_1.addClass([element], ['e-focused', 'e-focus']);
                        element.setAttribute('tabindex', '0');
                    }
                    e.preventDefault();
                    return;
                }
            }
            else Eif (!this.parent.showGroupingBar && this.parent.showFieldList &&
                target && ej2_base_1.closest(target, '.' + cls.TOGGLE_FIELD_LIST_CLASS)) {
                Eif (this.parent.grid) {
                    var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                    gridFocus.focus();
                    var element = gridFocus.getFocusedElement();
                    ej2_base_1.addClass([element], ['e-focused', 'e-focus']);
                    element.setAttribute('tabindex', '0');
                    e.preventDefault();
                    return;
                }
            }
            else if (!this.parent.showGroupingBar && !this.parent.showFieldList &&
                target && ej2_base_1.closest(target, '.' + cls.PIVOT_VIEW_CLASS) && !ej2_base_1.closest(target, '.e-popup.e-popup-open')) {
                if (this.parent.grid) {
                    var gridElement = ej2_base_1.closest(target, '.' + cls.PIVOT_VIEW_CLASS);
                    var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                    var rows = [].slice.call(gridElement.getElementsByTagName('tr'));
                    if (target.innerHTML === (rows[rows.length - 1]).lastChild.innerHTML) {
                        gridFocus.currentInfo.skipAction = true;
                    }
                    else {
                        gridFocus.focus();
                        var element = gridFocus.getFocusedElement();
                        ej2_base_1.addClass([element], ['e-focused', 'e-focus']);
                        element.setAttribute('tabindex', '0');
                        e.preventDefault();
                        return;
                    }
                }
            }
            else if (target && ej2_base_1.closest(target, '.' + cls.GRID_TOOLBAR) && this.parent.toolbar && this.parent.toolbarModule) {
                clearTimeout(this.timeOutObj);
                this.timeOutObj = setTimeout(function () {
                    ej2_base_1.removeClass(ej2_base_1.closest(target, '.' + cls.GRID_TOOLBAR).querySelectorAll('.e-menu-item.e-focused'), 'e-focused');
                    if (document.activeElement && document.activeElement.classList.contains('e-menu-item')) {
                        ej2_base_1.addClass([document.activeElement], 'e-focused');
                    }
                });
            }
            else if (target.classList.contains('e-numerictextbox')) {
                var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                gridFocus.focus();
                var element = gridFocus.getFocusedElement();
                ej2_base_1.removeClass([element], ['e-focused', 'e-focus']);
                element.setAttribute('tabindex', '0');
                e.preventDefault();
            }
        };
        KeyboardInteraction.prototype.processShiftTab = function (e) {
            var target = e.target;
            if (target && (ej2_base_1.closest(target, '.' + cls.PIVOT_BUTTON_CLASS) || target.classList.contains('e-group-row'))) {
                if (this.parent.grid) {
                    var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                    if (target.classList.contains('e-group-row') && target.querySelector('.e-btn-focused')) {
                        target = target.querySelector('.e-btn-focused');
                    }
                    else if (target.classList.contains('e-group-row')) {
                        target = this.parent.element.querySelector('.e-btn-focused') ? this.parent.element.querySelector('.e-btn-focused') :
                            this.parent.element.querySelector('.' + cls.GRID_GROUPING_BAR_CLASS);
                        var allPivotButtons = this.allpivotButtons(target);
                        if (allPivotButtons.length > 0 && allPivotButtons[allPivotButtons.length - 1]) {
                            gridFocus.currentInfo.skipAction = true;
                            allPivotButtons[allPivotButtons.length - 1].focus();
                            ej2_base_1.removeClass(allPivotButtons, 'e-btn-focused');
                            ej2_base_1.addClass([allPivotButtons[allPivotButtons.length - 1]], 'e-btn-focused');
                            e.preventDefault();
                            return;
                        }
                    }
                    var prevButton = this.getPrevButton(target);
                    if (prevButton.getAttribute('data-uid') !== target.getAttribute('data-uid')) {
                        gridFocus.currentInfo.skipAction = true;
                        prevButton.focus();
                        e.preventDefault();
                        return;
                    }
                }
            }
            else if (target && this.parent.grid && (target.classList.contains('e-movablefirst') ||
                (target.classList.contains('e-rowsheader') && ej2_base_1.closest(target, 'tr').getAttribute('data-uid') ===
                    this.parent.grid.element.querySelector('.e-frozencontent tr').getAttribute('data-uid')))) {
                var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                if (target.classList.contains('e-movablefirst')) {
                    target = (this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS + ' .e-btn-focused')) ?
                        (this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS + ' .e-btn-focused')) :
                        (this.parent.element.querySelector('.' + cls.GROUP_ROW_CLASS));
                    var element = gridFocus.getFocusedElement();
                    ej2_base_1.removeClass([element], ['e-focused', 'e-focus']);
                }
                var allPivotButtons_1 = this.allpivotButtons(target);
                if (allPivotButtons_1.length > 0) {
                    gridFocus.currentInfo.skipAction = true;
                    setTimeout(function () {
                        allPivotButtons_1[allPivotButtons_1.length - 1].focus();
                    });
                    ej2_base_1.removeClass(allPivotButtons_1, 'e-btn-focused');
                    ej2_base_1.addClass([allPivotButtons_1[allPivotButtons_1.length - 1]], 'e-btn-focused');
                    e.preventDefault();
                    return;
                }
            }
            else if (target && ej2_base_1.closest(target, '.' + cls.GRID_TOOLBAR) &&
                this.parent.toolbar && this.parent.toolbarModule) {
                clearTimeout(this.timeOutObj);
                this.timeOutObj = setTimeout(function () {
                    ej2_base_1.removeClass(ej2_base_1.closest(target, '.' + cls.GRID_TOOLBAR).querySelectorAll('.e-menu-item.e-focused'), 'e-focused');
                    if (document.activeElement && document.activeElement.classList.contains('e-menu-item')) {
                        ej2_base_1.addClass([document.activeElement], 'e-focused');
                    }
                });
            }
            else if (target.classList.contains('e-numerictextbox')) {
                var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                gridFocus.focus();
                var element = gridFocus.getFocusedElement();
                ej2_base_1.removeClass([element], ['e-focused', 'e-focus']);
                element.setAttribute('tabindex', '0');
                e.preventDefault();
            }
        };
        KeyboardInteraction.prototype.processEnter = function (e) {
            var target = e.target;
            Eif (target && ej2_base_1.closest(target, '.' + cls.GRID_CLASS)) {
                var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                Iif (e.keyCode === 13 && !e.shiftKey && !e.ctrlKey) {
                    if (target.querySelector('.' + cls.ICON)) {
                        this.event = e;
                        target.querySelector('.' + cls.ICON).click();
                        gridFocus.focus();
                        var element = gridFocus.getFocusedElement();
                        ej2_base_1.addClass([element], ['e-focused', 'e-focus']);
                        element.setAttribute('tabindex', '0');
                    }
                    else if (target.classList.contains('e-valuescontent')) {
                        target.dispatchEvent(new MouseEvent('dblclick', {
                            'view': window,
                            'bubbles': true,
                            'cancelable': true
                        }));
                        if (target.querySelector('.e-numerictextbox')) {
                            target.click();
                        }
                    }
                    else if (target.classList.contains('e-numerictextbox')) {
                        gridFocus.focus();
                        var element = gridFocus.getFocusedElement();
                        ej2_base_1.removeClass([element], ['e-focused', 'e-focus']);
                    }
                }
                else Iif (e.keyCode === 13 && e.shiftKey && !e.ctrlKey) {
                    if (this.parent.enableValueSorting) {
                        this.event = e;
                        target.click();
                        gridFocus.focus();
                        var element = gridFocus.getFocusedElement();
                        ej2_base_1.addClass([element], ['e-focused', 'e-focus']);
                        element.setAttribute('tabindex', '0');
                    }
                }
                else Iif (e.keyCode === 13 && !e.shiftKey && e.ctrlKey) {
                    if (this.parent.hyperlinkSettings && target.querySelector('a')) {
                        target.querySelector('a').click();
                    }
                }
                e.preventDefault();
                return;
            }
        };
        KeyboardInteraction.prototype.clearSelection = function () {
            var control = this.parent;
            ej2_base_1.removeClass(control.element.querySelectorAll('.' + cls.CELL_SELECTED_BGCOLOR + ',.' + cls.SELECTED_BGCOLOR), [cls.SELECTED_BGCOLOR, cls.CELL_SELECTED_BGCOLOR, cls.CELL_ACTIVE_BGCOLOR]);
            this.parent.renderModule.selected();
        };
        KeyboardInteraction.prototype.processSelection = function (e) {
            var target = e.target;
            Eif (this.parent.grid && this.parent.gridSettings.allowSelection && this.parent.gridSettings.selectionSettings.mode !== 'Row' &&
                !target.classList.contains('e-numerictextbox')) {
                var control_1 = this.parent;
                var colIndex_1 = Number(e.target.getAttribute('data-colindex'));
                var rowIndex_1 = Number(e.target.getAttribute('index'));
                var ele_1;
                Eif (target.nodeName === 'TH' || target.nodeName === 'TD') {
                    if (e.action === 'shiftUp' || e.action === 'upArrow') {
                        ele_1 = (rowIndex_1 === 0 || colIndex_1 === 0 || (target.nodeName !== 'TH' &&
                            control_1.renderModule.rowStartPos !== rowIndex_1)) ? null
                            : this.getParentElement(control_1, ele_1, colIndex_1, rowIndex_1 - 1);
                    }
                    else if (e.action === 'shiftDown' || e.action === 'downArrow') {
                        ele_1 = control_1.element.querySelector('th[data-colindex="' + colIndex_1 + '"][index="' + (rowIndex_1 + 1) + '"]');
                    }
                    else if (e.action === 'shiftLeft' || e.action === 'leftArrow') {
                        ele_1 = e.target.previousSibling;
                    }
                    else {
                        ele_1 = e.target.nextSibling;
                    }
                }
                if (!ej2_base_1.isNullOrUndefined(ele_1)) {
                    Eif (control_1.gridSettings.selectionSettings.mode === 'Both' ? !ele_1.classList.contains(cls.ROW_CELL_CLASS) : true) {
                        colIndex_1 = Number(ele_1.getAttribute('data-colindex'));
                        rowIndex_1 = Number(ele_1.getAttribute('index'));
                        var colSpan_1 = Number(ele_1.getAttribute('aria-colspan'));
                        control_1.clearSelection(ele_1, e);
                        var selectArgs = {
                            cancel: false,
                            isCellClick: true,
                            currentCell: ele_1,
                            data: control_1.pivotValues[rowIndex_1][colIndex_1]
                        };
                        control_1.trigger(events.cellSelecting, selectArgs, function (observedArgs) {
                            Eif (!observedArgs.cancel) {
                                control_1.applyColumnSelection(e, ele_1, colIndex_1, colIndex_1 + (colSpan_1 > 0 ? (colSpan_1 - 1) : 0), rowIndex_1);
                            }
                        });
                    }
                    else {
                        control_1.clearSelection(ele_1, e);
                    }
                }
                else {
                    if (e.action === 'upArrow') {
                        ele_1 = control_1.element.querySelector('[data-colindex="' + colIndex_1 + '"][index="' + (rowIndex_1 - 1) + '"]');
                        rowIndex_1--;
                    }
                    else if (e.action === 'downArrow') {
                        ele_1 = control_1.element.querySelector('[data-colindex="' + colIndex_1 + '"][index="' + (rowIndex_1 + 1) + '"]');
                        rowIndex_1++;
                    }
                    if (!ej2_base_1.isNullOrUndefined(ele_1)) {
                        control_1.clearSelection(ele_1, e);
                    }
                }
            }
            else if (target && (e.keyCode === 37 || e.keyCode === 38) &&
                this.parent && this.parent.showGroupingBar && this.parent.groupingBarModule && !target.classList.contains('e-numerictextbox')) {
                if (this.parent.grid && this.parent.element.querySelector('.e-frozenheader') && this.parent.element.querySelector('.e-frozenheader').querySelectorAll('.e-focus').length > 0) {
                    ej2_base_1.removeClass(this.parent.element.querySelector('.e-frozenheader').querySelectorAll('.e-focus'), 'e-focus');
                    ej2_base_1.removeClass(this.parent.element.querySelector('.e-frozenheader').querySelectorAll('.e-focused'), 'e-focused');
                    this.parent.element.querySelector('.e-headercell').setAttribute('tabindex', '-1');
                    var gridFocus = this.parent.grid.serviceLocator.getService('focus');
                    gridFocus.setFocusedElement(target);
                    ej2_base_1.addClass([target], ['e-focused', 'e-focus']);
                    target.setAttribute('tabindex', '0');
                    target.focus();
                    e.preventDefault();
                    return;
                }
            }
            else if (target.classList.contains('e-numerictextbox') && (e.action === 'rightArrow' || e.action === 'leftArrow')) {
                target.click();
            }
        };
        KeyboardInteraction.prototype.getParentElement = function (control, ele, colIndex, rowIndex) {
            while (!ele) {
                ele = control.element.querySelector('[data-colindex="' + colIndex + '"][index="' + rowIndex + '"]');
                colIndex--;
            }
            return ele;
        };
        KeyboardInteraction.prototype.toggleFieldList = function (e) {
            if (this.parent && !this.parent.isDestroyed && this.parent.showFieldList &&
                this.parent.pivotFieldListModule && !this.parent.pivotFieldListModule.isDestroyed &&
                this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS)) {
                if (!this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).classList.contains(cls.ICON_HIDDEN)) {
                    this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).click();
                    e.preventDefault();
                    return;
                }
                else if (this.parent.element.querySelector('.' + cls.TOGGLE_FIELD_LIST_CLASS).classList.contains(cls.ICON_HIDDEN) &&
                    this.parent.pivotFieldListModule.dialogRenderer && this.parent.pivotFieldListModule.dialogRenderer.fieldListDialog &&
                    !this.parent.pivotFieldListModule.dialogRenderer.fieldListDialog.isDestroyed) {
                    this.parent.pivotFieldListModule.dialogRenderer.fieldListDialog.hide();
                }
            }
        };
        KeyboardInteraction.prototype.destroy = function () {
            Eif (this.pivotViewKeyboardModule) {
                this.pivotViewKeyboardModule.destroy();
            }
            else {
                return;
            }
        };
        return KeyboardInteraction;
    }());
    exports.KeyboardInteraction = KeyboardInteraction;
});