@odoo/o-spreadsheet 19.4.4 → 19.4.5

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.
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.4.4
6
- * @date 2026-07-23T07:49:22.265Z
7
- * @hash 6b3c312
5
+ * @version 19.4.5
6
+ * @date 2026-07-30T06:55:39.923Z
7
+ * @hash 9308e17
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -348,6 +348,19 @@ function isOtherMobileOS() {
348
348
  function isMobileOS() {
349
349
  return isAndroid() || isIOS() || isOtherMobileOS();
350
350
  }
351
+ const INTERACTIVE_ELEMENT_SELECTOR = "select, input, textarea, button, .o-select, .os-input, .o-input, .o-button, .o-button-icon, .o-button-link, .o-composer";
352
+ /** Check if there is an interactive element (input, select, button, ...) between the event.target and event.currentTarget (inclusive)*/
353
+ function hasInteractiveElementInEventTree(event) {
354
+ const target = event.target;
355
+ const root = event.currentTarget;
356
+ if (!root || !target || !root.contains(target)) return false;
357
+ let node = target;
358
+ while (node && node !== root) {
359
+ if (node.matches(INTERACTIVE_ELEMENT_SELECTOR)) return true;
360
+ node = node.parentElement;
361
+ }
362
+ return root.matches(INTERACTIVE_ELEMENT_SELECTOR);
363
+ }
351
364
 
352
365
  //#endregion
353
366
  //#region src/actions/action.ts
@@ -10963,7 +10976,7 @@ function getCalendarChartDatasetAndLabels(definition, args) {
10963
10976
  borderWidth: 1,
10964
10977
  barPercentage: 1,
10965
10978
  categoryPercentage: 1,
10966
- values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : NaN)
10979
+ values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : void 0)
10967
10980
  });
10968
10981
  return {
10969
10982
  labels,
@@ -39315,13 +39328,9 @@ var PivotLayoutConfigurator = class extends Component {
39315
39328
  dimensionsRef = (0, _odoo_owl.signal)(null);
39316
39329
  dragAndDrop = useDragAndDropListItems();
39317
39330
  AGGREGATORS = AGGREGATORS;
39318
- composerFocus;
39319
39331
  isDateOrDatetimeField = isDateOrDatetimeField;
39320
- setup() {
39321
- this.composerFocus = useStore(ComposerFocusStore);
39322
- }
39323
39332
  startDragAndDrop(dimension, event) {
39324
- if (event.button !== 0 || event.target.tagName === "SELECT") return;
39333
+ if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
39325
39334
  const rects = this.getDimensionElementsRects();
39326
39335
  const { columns, rows } = this.props.definition;
39327
39336
  const draggableIds = [
@@ -39361,7 +39370,7 @@ var PivotLayoutConfigurator = class extends Component {
39361
39370
  return field.type === "date" ? this.props.dateGranularities : this.props.datetimeGranularities;
39362
39371
  }
39363
39372
  startDragAndDropMeasures(measure, event) {
39364
- if (event.button !== 0 || event.target.tagName === "SELECT" || event.target.tagName === "INPUT" || this.composerFocus.focusMode !== "inactive") return;
39373
+ if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
39365
39374
  const rects = this.getDimensionElementsRects();
39366
39375
  const { measures, columns, rows } = this.props.definition;
39367
39376
  const draggableIds = measures.map((m) => m.id);
@@ -51719,7 +51728,7 @@ var CellPlugin = class extends CorePlugin {
51719
51728
  positionsByStyle[styleId] ??= [];
51720
51729
  positionsByStyle[styleId].push(position);
51721
51730
  }
51722
- if (cell.format) {
51731
+ if (cell.format !== void 0) {
51723
51732
  const formatId = getItemId(cell.format, formats);
51724
51733
  positionsByFormat[formatId] ??= [];
51725
51734
  positionsByFormat[formatId].push(position);
@@ -52896,22 +52905,19 @@ var DefaultPlugin = class extends CorePlugin {
52896
52905
  getDefaultFormatInCell(sheetId, zones, priorities) {
52897
52906
  const defaults = [];
52898
52907
  for (const position of zones.flatMap((zone) => cellPositions(sheetId, zone))) {
52899
- if (this.getters.getCell(position)?.format) continue;
52908
+ if (this.getters.getCell(position)?.format !== void 0) continue;
52900
52909
  const rowDefault = this.format[sheetId]?.rowDefault?.[position.row];
52901
- if (rowDefault) {
52910
+ if (rowDefault !== void 0) {
52902
52911
  if (priorities.shouldUseDefaultRow) defaults.push([position, rowDefault]);
52903
52912
  continue;
52904
52913
  }
52905
52914
  const colDefault = this.format[sheetId]?.colDefault?.[position.col];
52906
- if (colDefault) {
52915
+ if (colDefault !== void 0) {
52907
52916
  if (priorities.shouldUseDefaultCol) defaults.push([position, colDefault]);
52908
52917
  continue;
52909
52918
  }
52910
- const sheetDefault = this.format[sheetId]?.sheetDefault;
52911
- if (sheetDefault) {
52912
- if (priorities.shouldUseDefaultSheet) defaults.push([position, sheetDefault]);
52913
- continue;
52914
- }
52919
+ const sheetDefault = this.format[sheetId]?.sheetDefault ?? "";
52920
+ if (priorities.shouldUseDefaultSheet) defaults.push([position, sheetDefault]);
52915
52921
  }
52916
52922
  return defaults;
52917
52923
  }
@@ -64504,7 +64510,7 @@ var SheetUIPlugin = class extends UIPlugin {
64504
64510
  if (contentWidth === 0) return 0;
64505
64511
  contentWidth += 2 * 4;
64506
64512
  if (style.wrapping === "wrap") {
64507
- const colWidth = this.getters.getColSize(this.getters.getActiveSheetId(), position.col);
64513
+ const colWidth = this.getters.getColSize(position.sheetId, position.col);
64508
64514
  return Math.min(colWidth, contentWidth);
64509
64515
  }
64510
64516
  return contentWidth;
@@ -69747,6 +69753,7 @@ var SpreadsheetDashboard = class extends Component {
69747
69753
  return (0, _odoo_owl.toRaw)(this.clickableCellsStore.clickableCells);
69748
69754
  }
69749
69755
  selectClickableCell(ev, clickableCell) {
69756
+ if (![0, 1].includes(ev.button)) return;
69750
69757
  const { position, action } = clickableCell;
69751
69758
  action(position, this.env, isMiddleClickOrCtrlClick(ev));
69752
69759
  }
@@ -87859,6 +87866,6 @@ exports.stores = stores;
87859
87866
  exports.tokenColors = tokenColors;
87860
87867
  exports.tokenize = tokenize;
87861
87868
 
87862
- __info__.version = "19.4.4";
87863
- __info__.date = "2026-07-23T07:49:22.265Z";
87864
- __info__.hash = "6b3c312";
87869
+ __info__.version = "19.4.5";
87870
+ __info__.date = "2026-07-30T06:55:39.923Z";
87871
+ __info__.hash = "9308e17";
@@ -2,9 +2,9 @@
2
2
  /*
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.4.4
6
- * @date 2026-07-23T07:49:24.023Z
7
- * @hash 6b3c312
5
+ * @version 19.4.5
6
+ * @date 2026-07-30T06:55:41.389Z
7
+ * @hash 9308e17
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.4.4
6
- * @date 2026-07-23T07:49:22.265Z
7
- * @hash 6b3c312
5
+ * @version 19.4.5
6
+ * @date 2026-07-30T06:55:39.923Z
7
+ * @hash 9308e17
8
8
  */
9
9
 
10
10
  import * as owl from "@odoo/owl";
@@ -347,6 +347,19 @@ function isOtherMobileOS() {
347
347
  function isMobileOS() {
348
348
  return isAndroid() || isIOS() || isOtherMobileOS();
349
349
  }
350
+ const INTERACTIVE_ELEMENT_SELECTOR = "select, input, textarea, button, .o-select, .os-input, .o-input, .o-button, .o-button-icon, .o-button-link, .o-composer";
351
+ /** Check if there is an interactive element (input, select, button, ...) between the event.target and event.currentTarget (inclusive)*/
352
+ function hasInteractiveElementInEventTree(event) {
353
+ const target = event.target;
354
+ const root = event.currentTarget;
355
+ if (!root || !target || !root.contains(target)) return false;
356
+ let node = target;
357
+ while (node && node !== root) {
358
+ if (node.matches(INTERACTIVE_ELEMENT_SELECTOR)) return true;
359
+ node = node.parentElement;
360
+ }
361
+ return root.matches(INTERACTIVE_ELEMENT_SELECTOR);
362
+ }
350
363
 
351
364
  //#endregion
352
365
  //#region src/actions/action.ts
@@ -10962,7 +10975,7 @@ function getCalendarChartDatasetAndLabels(definition, args) {
10962
10975
  borderWidth: 1,
10963
10976
  barPercentage: 1,
10964
10977
  categoryPercentage: 1,
10965
- values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : NaN)
10978
+ values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : void 0)
10966
10979
  });
10967
10980
  return {
10968
10981
  labels,
@@ -39314,13 +39327,9 @@ var PivotLayoutConfigurator = class extends Component {
39314
39327
  dimensionsRef = signal(null);
39315
39328
  dragAndDrop = useDragAndDropListItems();
39316
39329
  AGGREGATORS = AGGREGATORS;
39317
- composerFocus;
39318
39330
  isDateOrDatetimeField = isDateOrDatetimeField;
39319
- setup() {
39320
- this.composerFocus = useStore(ComposerFocusStore);
39321
- }
39322
39331
  startDragAndDrop(dimension, event) {
39323
- if (event.button !== 0 || event.target.tagName === "SELECT") return;
39332
+ if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
39324
39333
  const rects = this.getDimensionElementsRects();
39325
39334
  const { columns, rows } = this.props.definition;
39326
39335
  const draggableIds = [
@@ -39360,7 +39369,7 @@ var PivotLayoutConfigurator = class extends Component {
39360
39369
  return field.type === "date" ? this.props.dateGranularities : this.props.datetimeGranularities;
39361
39370
  }
39362
39371
  startDragAndDropMeasures(measure, event) {
39363
- if (event.button !== 0 || event.target.tagName === "SELECT" || event.target.tagName === "INPUT" || this.composerFocus.focusMode !== "inactive") return;
39372
+ if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
39364
39373
  const rects = this.getDimensionElementsRects();
39365
39374
  const { measures, columns, rows } = this.props.definition;
39366
39375
  const draggableIds = measures.map((m) => m.id);
@@ -51718,7 +51727,7 @@ var CellPlugin = class extends CorePlugin {
51718
51727
  positionsByStyle[styleId] ??= [];
51719
51728
  positionsByStyle[styleId].push(position);
51720
51729
  }
51721
- if (cell.format) {
51730
+ if (cell.format !== void 0) {
51722
51731
  const formatId = getItemId(cell.format, formats);
51723
51732
  positionsByFormat[formatId] ??= [];
51724
51733
  positionsByFormat[formatId].push(position);
@@ -52895,22 +52904,19 @@ var DefaultPlugin = class extends CorePlugin {
52895
52904
  getDefaultFormatInCell(sheetId, zones, priorities) {
52896
52905
  const defaults = [];
52897
52906
  for (const position of zones.flatMap((zone) => cellPositions(sheetId, zone))) {
52898
- if (this.getters.getCell(position)?.format) continue;
52907
+ if (this.getters.getCell(position)?.format !== void 0) continue;
52899
52908
  const rowDefault = this.format[sheetId]?.rowDefault?.[position.row];
52900
- if (rowDefault) {
52909
+ if (rowDefault !== void 0) {
52901
52910
  if (priorities.shouldUseDefaultRow) defaults.push([position, rowDefault]);
52902
52911
  continue;
52903
52912
  }
52904
52913
  const colDefault = this.format[sheetId]?.colDefault?.[position.col];
52905
- if (colDefault) {
52914
+ if (colDefault !== void 0) {
52906
52915
  if (priorities.shouldUseDefaultCol) defaults.push([position, colDefault]);
52907
52916
  continue;
52908
52917
  }
52909
- const sheetDefault = this.format[sheetId]?.sheetDefault;
52910
- if (sheetDefault) {
52911
- if (priorities.shouldUseDefaultSheet) defaults.push([position, sheetDefault]);
52912
- continue;
52913
- }
52918
+ const sheetDefault = this.format[sheetId]?.sheetDefault ?? "";
52919
+ if (priorities.shouldUseDefaultSheet) defaults.push([position, sheetDefault]);
52914
52920
  }
52915
52921
  return defaults;
52916
52922
  }
@@ -64319,7 +64325,7 @@ var SheetUIPlugin = class extends UIPlugin {
64319
64325
  if (contentWidth === 0) return 0;
64320
64326
  contentWidth += 2 * 4;
64321
64327
  if (style.wrapping === "wrap") {
64322
- const colWidth = this.getters.getColSize(this.getters.getActiveSheetId(), position.col);
64328
+ const colWidth = this.getters.getColSize(position.sheetId, position.col);
64323
64329
  return Math.min(colWidth, contentWidth);
64324
64330
  }
64325
64331
  return contentWidth;
@@ -69562,6 +69568,7 @@ var SpreadsheetDashboard = class extends Component {
69562
69568
  return toRaw(this.clickableCellsStore.clickableCells);
69563
69569
  }
69564
69570
  selectClickableCell(ev, clickableCell) {
69571
+ if (![0, 1].includes(ev.button)) return;
69565
69572
  const { position, action } = clickableCell;
69566
69573
  action(position, this.env, isMiddleClickOrCtrlClick(ev));
69567
69574
  }
@@ -87580,6 +87587,6 @@ const chartHelpers = {
87580
87587
  //#endregion
87581
87588
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, InvalidReferenceError, LocalTransportService, Model, NEXT_VALUE, NotAvailableError, NumberTooLargeError, OrderedLayers, PREVIOUS_VALUE, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, SplillBlockedError, Spreadsheet, SpreadsheetPivotTable, UIPlugin, UnknownFunctionError, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderPositions, borderStyles, canExecuteInReadonly, categories, chartHelpers, compatibility, components, composerFocusTypes, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, errorTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
87582
87589
 
87583
- __info__.version = "19.4.4";
87584
- __info__.date = "2026-07-23T07:49:22.265Z";
87585
- __info__.hash = "6b3c312";
87590
+ __info__.version = "19.4.5";
87591
+ __info__.date = "2026-07-30T06:55:39.923Z";
87592
+ __info__.hash = "9308e17";
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.4.4
6
- * @date 2026-07-23T07:49:22.265Z
7
- * @hash 6b3c312
5
+ * @version 19.4.5
6
+ * @date 2026-07-30T06:55:39.923Z
7
+ * @hash 9308e17
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -349,6 +349,19 @@ _odoo_owl = __toESM(_odoo_owl, 1);
349
349
  function isMobileOS() {
350
350
  return isAndroid() || isIOS() || isOtherMobileOS();
351
351
  }
352
+ const INTERACTIVE_ELEMENT_SELECTOR = "select, input, textarea, button, .o-select, .os-input, .o-input, .o-button, .o-button-icon, .o-button-link, .o-composer";
353
+ /** Check if there is an interactive element (input, select, button, ...) between the event.target and event.currentTarget (inclusive)*/
354
+ function hasInteractiveElementInEventTree(event) {
355
+ const target = event.target;
356
+ const root = event.currentTarget;
357
+ if (!root || !target || !root.contains(target)) return false;
358
+ let node = target;
359
+ while (node && node !== root) {
360
+ if (node.matches(INTERACTIVE_ELEMENT_SELECTOR)) return true;
361
+ node = node.parentElement;
362
+ }
363
+ return root.matches(INTERACTIVE_ELEMENT_SELECTOR);
364
+ }
352
365
 
353
366
  //#endregion
354
367
  //#region src/actions/action.ts
@@ -10964,7 +10977,7 @@ set(value) {
10964
10977
  borderWidth: 1,
10965
10978
  barPercentage: 1,
10966
10979
  categoryPercentage: 1,
10967
- values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : NaN)
10980
+ values: dataSetValues.data.map((cell) => isNumberResult(cell) ? cell.value : void 0)
10968
10981
  });
10969
10982
  return {
10970
10983
  labels,
@@ -39316,13 +39329,9 @@ set(value) {
39316
39329
  dimensionsRef = (0, _odoo_owl.signal)(null);
39317
39330
  dragAndDrop = useDragAndDropListItems();
39318
39331
  AGGREGATORS = AGGREGATORS;
39319
- composerFocus;
39320
39332
  isDateOrDatetimeField = isDateOrDatetimeField;
39321
- setup() {
39322
- this.composerFocus = useStore(ComposerFocusStore);
39323
- }
39324
39333
  startDragAndDrop(dimension, event) {
39325
- if (event.button !== 0 || event.target.tagName === "SELECT") return;
39334
+ if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
39326
39335
  const rects = this.getDimensionElementsRects();
39327
39336
  const { columns, rows } = this.props.definition;
39328
39337
  const draggableIds = [
@@ -39362,7 +39371,7 @@ set(value) {
39362
39371
  return field.type === "date" ? this.props.dateGranularities : this.props.datetimeGranularities;
39363
39372
  }
39364
39373
  startDragAndDropMeasures(measure, event) {
39365
- if (event.button !== 0 || event.target.tagName === "SELECT" || event.target.tagName === "INPUT" || this.composerFocus.focusMode !== "inactive") return;
39374
+ if (event.button !== 0 || hasInteractiveElementInEventTree(event)) return;
39366
39375
  const rects = this.getDimensionElementsRects();
39367
39376
  const { measures, columns, rows } = this.props.definition;
39368
39377
  const draggableIds = measures.map((m) => m.id);
@@ -51720,7 +51729,7 @@ set(value) {
51720
51729
  positionsByStyle[styleId] ??= [];
51721
51730
  positionsByStyle[styleId].push(position);
51722
51731
  }
51723
- if (cell.format) {
51732
+ if (cell.format !== void 0) {
51724
51733
  const formatId = getItemId(cell.format, formats);
51725
51734
  positionsByFormat[formatId] ??= [];
51726
51735
  positionsByFormat[formatId].push(position);
@@ -52897,22 +52906,19 @@ set(value) {
52897
52906
  getDefaultFormatInCell(sheetId, zones, priorities) {
52898
52907
  const defaults = [];
52899
52908
  for (const position of zones.flatMap((zone) => cellPositions(sheetId, zone))) {
52900
- if (this.getters.getCell(position)?.format) continue;
52909
+ if (this.getters.getCell(position)?.format !== void 0) continue;
52901
52910
  const rowDefault = this.format[sheetId]?.rowDefault?.[position.row];
52902
- if (rowDefault) {
52911
+ if (rowDefault !== void 0) {
52903
52912
  if (priorities.shouldUseDefaultRow) defaults.push([position, rowDefault]);
52904
52913
  continue;
52905
52914
  }
52906
52915
  const colDefault = this.format[sheetId]?.colDefault?.[position.col];
52907
- if (colDefault) {
52916
+ if (colDefault !== void 0) {
52908
52917
  if (priorities.shouldUseDefaultCol) defaults.push([position, colDefault]);
52909
52918
  continue;
52910
52919
  }
52911
- const sheetDefault = this.format[sheetId]?.sheetDefault;
52912
- if (sheetDefault) {
52913
- if (priorities.shouldUseDefaultSheet) defaults.push([position, sheetDefault]);
52914
- continue;
52915
- }
52920
+ const sheetDefault = this.format[sheetId]?.sheetDefault ?? "";
52921
+ if (priorities.shouldUseDefaultSheet) defaults.push([position, sheetDefault]);
52916
52922
  }
52917
52923
  return defaults;
52918
52924
  }
@@ -64321,7 +64327,7 @@ set(value) {
64321
64327
  if (contentWidth === 0) return 0;
64322
64328
  contentWidth += 2 * 4;
64323
64329
  if (style.wrapping === "wrap") {
64324
- const colWidth = this.getters.getColSize(this.getters.getActiveSheetId(), position.col);
64330
+ const colWidth = this.getters.getColSize(position.sheetId, position.col);
64325
64331
  return Math.min(colWidth, contentWidth);
64326
64332
  }
64327
64333
  return contentWidth;
@@ -69564,6 +69570,7 @@ set(value) {
69564
69570
  return (0, _odoo_owl.toRaw)(this.clickableCellsStore.clickableCells);
69565
69571
  }
69566
69572
  selectClickableCell(ev, clickableCell) {
69573
+ if (![0, 1].includes(ev.button)) return;
69567
69574
  const { position, action } = clickableCell;
69568
69575
  action(position, this.env, isMiddleClickOrCtrlClick(ev));
69569
69576
  }
@@ -87676,8 +87683,8 @@ exports.stores = stores;
87676
87683
  exports.tokenColors = tokenColors;
87677
87684
  exports.tokenize = tokenize;
87678
87685
 
87679
- __info__.version = "19.4.4";
87680
- __info__.date = "2026-07-23T07:49:22.265Z";
87681
- __info__.hash = "6b3c312";
87686
+ __info__.version = "19.4.5";
87687
+ __info__.date = "2026-07-30T06:55:39.923Z";
87688
+ __info__.hash = "9308e17";
87682
87689
 
87683
87690
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);