@odoo/o-spreadsheet 20.1.0-alpha.1 → 20.1.0-alpha.2

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 20.1.0-alpha.1
6
- * @date 2026-09-19T08:05:57.456Z
7
- * @hash c2bc431
5
+ * @version 20.1.0-alpha.2
6
+ * @date 2026-09-21T06:31:52.788Z
7
+ * @hash 63c49a8
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -12767,7 +12767,7 @@ var ZoomStore = class {
12767
12767
  storeGetters = ["getZoomedRect", "getZoomedEvent"];
12768
12768
  zoomLevel = 1;
12769
12769
  setZoom(zoom) {
12770
- if (zoom > 2 || zoom < .5 || zoom === this.zoomLevel) return "noStateChange";
12770
+ if (isNaN(zoom) || zoom > 2 || zoom < .5 || zoom === this.zoomLevel) return "noStateChange";
12771
12771
  this.zoomLevel = zoom;
12772
12772
  }
12773
12773
  getZoomedRect(rect) {
@@ -38813,7 +38813,7 @@ var HeaderResizeEditor = class extends Component {
38813
38813
  this.isInputEmpty.set(!input.value && !input.validity.badInput);
38814
38814
  }
38815
38815
  get emptyInputHint() {
38816
- return this.target.dimension === "COL" ? _t("Empty value resets width to %s px", 96 .toString()) : _t("Empty value fits height to content");
38816
+ return this.target.dimension === "COL" ? _t("Empty value resets width to %s px", 96) : _t("Empty value fits height to content");
38817
38817
  }
38818
38818
  onKeydown(ev) {
38819
38819
  if (ev.key === "Enter") {
@@ -42137,6 +42137,11 @@ var NumberEditor = class extends Component {
42137
42137
  inputRef = _odoo_owl.signal.ref(HTMLInputElement);
42138
42138
  rootEditorRef = _odoo_owl.signal.ref();
42139
42139
  valueListRef = _odoo_owl.signal.ref();
42140
+ /**
42141
+ * Skips the change event triggered when moving focus out of the input.
42142
+ * The value has already been committed by `onInputKeydown`.
42143
+ */
42144
+ skipNextInputChange = false;
42140
42145
  DOMFocusableElementStore;
42141
42146
  setup() {
42142
42147
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
@@ -42172,11 +42177,14 @@ var NumberEditor = class extends Component {
42172
42177
  this.dropdown.isOpen = false;
42173
42178
  }
42174
42179
  setValue(valueStr) {
42175
- const value = clip(Math.floor(parseFloat(valueStr)), this.props.min, this.props.max);
42180
+ const value = clip(Math.round(parseFloat(valueStr)), this.props.min, this.props.max);
42181
+ if (isNaN(value)) return;
42176
42182
  this.props.onValueChange(value);
42177
42183
  this.closeList();
42184
+ return value;
42178
42185
  }
42179
42186
  setValueFromInput(ev) {
42187
+ if (this.skipNextInputChange) return;
42180
42188
  this.setValue(ev.target.value);
42181
42189
  }
42182
42190
  setValueFromList(valueStr) {
@@ -42190,19 +42198,26 @@ var NumberEditor = class extends Component {
42190
42198
  ev.target.select();
42191
42199
  }
42192
42200
  onInputKeydown(ev) {
42193
- if (ev.key === "Enter" || ev.key === "Escape") {
42194
- this.closeList();
42195
- const target = ev.target;
42196
- if (ev.key === "Escape") target.value = `${this.props.currentValue}`;
42197
- this.props.onToggle?.();
42198
- }
42199
- if (ev.key === "Tab") {
42200
- ev.preventDefault();
42201
- ev.stopPropagation();
42202
- this.closeList();
42203
- this.DOMFocusableElementStore.focus();
42204
- return;
42201
+ const target = ev.target;
42202
+ switch (ev.key) {
42203
+ case "Enter":
42204
+ case "Tab": {
42205
+ ev.preventDefault();
42206
+ ev.stopPropagation();
42207
+ const value = this.setValue(target.value);
42208
+ if (value === void 0) return;
42209
+ target.value = `${value}`;
42210
+ break;
42211
+ }
42212
+ case "Escape":
42213
+ target.value = `${this.props.currentValue}`;
42214
+ this.closeList();
42215
+ break;
42216
+ default: return;
42205
42217
  }
42218
+ this.skipNextInputChange = true;
42219
+ this.DOMFocusableElementStore.focus();
42220
+ this.skipNextInputChange = false;
42206
42221
  }
42207
42222
  };
42208
42223
 
@@ -74825,15 +74840,18 @@ var ToolBarZoom = class extends Component {
74825
74840
  topBarToolStore;
74826
74841
  zoomStore;
74827
74842
  valueList = ZOOM_VALUES;
74843
+ minZoom = MIN_ZOOM * 100;
74844
+ maxZoom = 2 * 100;
74828
74845
  setup() {
74829
74846
  this.topBarToolStore = useToolBarDropdownStore();
74830
74847
  this.zoomStore = useStore(ZoomStore);
74831
74848
  }
74832
- get currentFontSize() {
74833
- return (this.zoomStore.zoomLevel || 1) * 100;
74849
+ getZoomLevel() {
74850
+ const zoom = this.zoomStore.zoomLevel || 1;
74851
+ return Math.round(zoom * 100);
74834
74852
  }
74835
- setZoom(fontSize) {
74836
- this.zoomStore.setZoom(fontSize / 100);
74853
+ setZoom(zoomPercentage) {
74854
+ this.zoomStore.setZoom(zoomPercentage / 100);
74837
74855
  }
74838
74856
  toggle() {
74839
74857
  if (this.topBarToolStore.isActive) this.topBarToolStore.closeDropdowns();
@@ -91948,6 +91966,6 @@ exports.stores = stores;
91948
91966
  exports.tokenColors = tokenColors;
91949
91967
  exports.tokenize = tokenize;
91950
91968
 
91951
- __info__.version = "20.1.0-alpha.1";
91952
- __info__.date = "2026-09-19T08:05:57.456Z";
91953
- __info__.hash = "c2bc431";
91969
+ __info__.version = "20.1.0-alpha.2";
91970
+ __info__.date = "2026-09-21T06:31:52.788Z";
91971
+ __info__.hash = "63c49a8";
@@ -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 20.1.0-alpha.1
6
- * @date 2026-09-19T08:05:58.685Z
7
- * @hash c2bc431
5
+ * @version 20.1.0-alpha.2
6
+ * @date 2026-09-21T06:31:54.065Z
7
+ * @hash 63c49a8
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f8f9fa, #1c1c20);
@@ -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 20.1.0-alpha.1
6
- * @date 2026-09-19T08:05:57.456Z
7
- * @hash c2bc431
5
+ * @version 20.1.0-alpha.2
6
+ * @date 2026-09-21T06:31:52.788Z
7
+ * @hash 63c49a8
8
8
  */
9
9
 
10
10
  import * as owl from "@odoo/owl";
@@ -12766,7 +12766,7 @@ var ZoomStore = class {
12766
12766
  storeGetters = ["getZoomedRect", "getZoomedEvent"];
12767
12767
  zoomLevel = 1;
12768
12768
  setZoom(zoom) {
12769
- if (zoom > 2 || zoom < .5 || zoom === this.zoomLevel) return "noStateChange";
12769
+ if (isNaN(zoom) || zoom > 2 || zoom < .5 || zoom === this.zoomLevel) return "noStateChange";
12770
12770
  this.zoomLevel = zoom;
12771
12771
  }
12772
12772
  getZoomedRect(rect) {
@@ -38812,7 +38812,7 @@ var HeaderResizeEditor = class extends Component {
38812
38812
  this.isInputEmpty.set(!input.value && !input.validity.badInput);
38813
38813
  }
38814
38814
  get emptyInputHint() {
38815
- return this.target.dimension === "COL" ? _t("Empty value resets width to %s px", 96 .toString()) : _t("Empty value fits height to content");
38815
+ return this.target.dimension === "COL" ? _t("Empty value resets width to %s px", 96) : _t("Empty value fits height to content");
38816
38816
  }
38817
38817
  onKeydown(ev) {
38818
38818
  if (ev.key === "Enter") {
@@ -42136,6 +42136,11 @@ var NumberEditor = class extends Component {
42136
42136
  inputRef = signal.ref(HTMLInputElement);
42137
42137
  rootEditorRef = signal.ref();
42138
42138
  valueListRef = signal.ref();
42139
+ /**
42140
+ * Skips the change event triggered when moving focus out of the input.
42141
+ * The value has already been committed by `onInputKeydown`.
42142
+ */
42143
+ skipNextInputChange = false;
42139
42144
  DOMFocusableElementStore;
42140
42145
  setup() {
42141
42146
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
@@ -42171,11 +42176,14 @@ var NumberEditor = class extends Component {
42171
42176
  this.dropdown.isOpen = false;
42172
42177
  }
42173
42178
  setValue(valueStr) {
42174
- const value = clip(Math.floor(parseFloat(valueStr)), this.props.min, this.props.max);
42179
+ const value = clip(Math.round(parseFloat(valueStr)), this.props.min, this.props.max);
42180
+ if (isNaN(value)) return;
42175
42181
  this.props.onValueChange(value);
42176
42182
  this.closeList();
42183
+ return value;
42177
42184
  }
42178
42185
  setValueFromInput(ev) {
42186
+ if (this.skipNextInputChange) return;
42179
42187
  this.setValue(ev.target.value);
42180
42188
  }
42181
42189
  setValueFromList(valueStr) {
@@ -42189,19 +42197,26 @@ var NumberEditor = class extends Component {
42189
42197
  ev.target.select();
42190
42198
  }
42191
42199
  onInputKeydown(ev) {
42192
- if (ev.key === "Enter" || ev.key === "Escape") {
42193
- this.closeList();
42194
- const target = ev.target;
42195
- if (ev.key === "Escape") target.value = `${this.props.currentValue}`;
42196
- this.props.onToggle?.();
42197
- }
42198
- if (ev.key === "Tab") {
42199
- ev.preventDefault();
42200
- ev.stopPropagation();
42201
- this.closeList();
42202
- this.DOMFocusableElementStore.focus();
42203
- return;
42200
+ const target = ev.target;
42201
+ switch (ev.key) {
42202
+ case "Enter":
42203
+ case "Tab": {
42204
+ ev.preventDefault();
42205
+ ev.stopPropagation();
42206
+ const value = this.setValue(target.value);
42207
+ if (value === void 0) return;
42208
+ target.value = `${value}`;
42209
+ break;
42210
+ }
42211
+ case "Escape":
42212
+ target.value = `${this.props.currentValue}`;
42213
+ this.closeList();
42214
+ break;
42215
+ default: return;
42204
42216
  }
42217
+ this.skipNextInputChange = true;
42218
+ this.DOMFocusableElementStore.focus();
42219
+ this.skipNextInputChange = false;
42205
42220
  }
42206
42221
  };
42207
42222
 
@@ -74640,15 +74655,18 @@ var ToolBarZoom = class extends Component {
74640
74655
  topBarToolStore;
74641
74656
  zoomStore;
74642
74657
  valueList = ZOOM_VALUES;
74658
+ minZoom = MIN_ZOOM * 100;
74659
+ maxZoom = 2 * 100;
74643
74660
  setup() {
74644
74661
  this.topBarToolStore = useToolBarDropdownStore();
74645
74662
  this.zoomStore = useStore(ZoomStore);
74646
74663
  }
74647
- get currentFontSize() {
74648
- return (this.zoomStore.zoomLevel || 1) * 100;
74664
+ getZoomLevel() {
74665
+ const zoom = this.zoomStore.zoomLevel || 1;
74666
+ return Math.round(zoom * 100);
74649
74667
  }
74650
- setZoom(fontSize) {
74651
- this.zoomStore.setZoom(fontSize / 100);
74668
+ setZoom(zoomPercentage) {
74669
+ this.zoomStore.setZoom(zoomPercentage / 100);
74652
74670
  }
74653
74671
  toggle() {
74654
74672
  if (this.topBarToolStore.isActive) this.topBarToolStore.closeDropdowns();
@@ -91664,6 +91682,6 @@ const chartHelpers = {
91664
91682
  //#endregion
91665
91683
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, EvaluationPlugin, 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, dispatcheableEvaluationCommandTypes, errorTypes, evaluationCommandTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isDispatcheableEvaluationCommand, isEvaluationCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, owlPlugins, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
91666
91684
 
91667
- __info__.version = "20.1.0-alpha.1";
91668
- __info__.date = "2026-09-19T08:05:57.456Z";
91669
- __info__.hash = "c2bc431";
91685
+ __info__.version = "20.1.0-alpha.2";
91686
+ __info__.date = "2026-09-21T06:31:52.788Z";
91687
+ __info__.hash = "63c49a8";
@@ -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 20.1.0-alpha.1
6
- * @date 2026-09-19T08:05:57.456Z
7
- * @hash c2bc431
5
+ * @version 20.1.0-alpha.2
6
+ * @date 2026-09-21T06:31:52.788Z
7
+ * @hash 63c49a8
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -12768,7 +12768,7 @@ set(value) {
12768
12768
  storeGetters = ["getZoomedRect", "getZoomedEvent"];
12769
12769
  zoomLevel = 1;
12770
12770
  setZoom(zoom) {
12771
- if (zoom > 2 || zoom < .5 || zoom === this.zoomLevel) return "noStateChange";
12771
+ if (isNaN(zoom) || zoom > 2 || zoom < .5 || zoom === this.zoomLevel) return "noStateChange";
12772
12772
  this.zoomLevel = zoom;
12773
12773
  }
12774
12774
  getZoomedRect(rect) {
@@ -38814,7 +38814,7 @@ set(value) {
38814
38814
  this.isInputEmpty.set(!input.value && !input.validity.badInput);
38815
38815
  }
38816
38816
  get emptyInputHint() {
38817
- return this.target.dimension === "COL" ? _t("Empty value resets width to %s px", 96 .toString()) : _t("Empty value fits height to content");
38817
+ return this.target.dimension === "COL" ? _t("Empty value resets width to %s px", 96) : _t("Empty value fits height to content");
38818
38818
  }
38819
38819
  onKeydown(ev) {
38820
38820
  if (ev.key === "Enter") {
@@ -42138,6 +42138,11 @@ set(value) {
42138
42138
  inputRef = _odoo_owl.signal.ref(HTMLInputElement);
42139
42139
  rootEditorRef = _odoo_owl.signal.ref();
42140
42140
  valueListRef = _odoo_owl.signal.ref();
42141
+ /**
42142
+ * Skips the change event triggered when moving focus out of the input.
42143
+ * The value has already been committed by `onInputKeydown`.
42144
+ */
42145
+ skipNextInputChange = false;
42141
42146
  DOMFocusableElementStore;
42142
42147
  setup() {
42143
42148
  this.DOMFocusableElementStore = useStore(DOMFocusableElementStore);
@@ -42173,11 +42178,14 @@ set(value) {
42173
42178
  this.dropdown.isOpen = false;
42174
42179
  }
42175
42180
  setValue(valueStr) {
42176
- const value = clip(Math.floor(parseFloat(valueStr)), this.props.min, this.props.max);
42181
+ const value = clip(Math.round(parseFloat(valueStr)), this.props.min, this.props.max);
42182
+ if (isNaN(value)) return;
42177
42183
  this.props.onValueChange(value);
42178
42184
  this.closeList();
42185
+ return value;
42179
42186
  }
42180
42187
  setValueFromInput(ev) {
42188
+ if (this.skipNextInputChange) return;
42181
42189
  this.setValue(ev.target.value);
42182
42190
  }
42183
42191
  setValueFromList(valueStr) {
@@ -42191,19 +42199,26 @@ set(value) {
42191
42199
  ev.target.select();
42192
42200
  }
42193
42201
  onInputKeydown(ev) {
42194
- if (ev.key === "Enter" || ev.key === "Escape") {
42195
- this.closeList();
42196
- const target = ev.target;
42197
- if (ev.key === "Escape") target.value = `${this.props.currentValue}`;
42198
- this.props.onToggle?.();
42199
- }
42200
- if (ev.key === "Tab") {
42201
- ev.preventDefault();
42202
- ev.stopPropagation();
42203
- this.closeList();
42204
- this.DOMFocusableElementStore.focus();
42205
- return;
42202
+ const target = ev.target;
42203
+ switch (ev.key) {
42204
+ case "Enter":
42205
+ case "Tab": {
42206
+ ev.preventDefault();
42207
+ ev.stopPropagation();
42208
+ const value = this.setValue(target.value);
42209
+ if (value === void 0) return;
42210
+ target.value = `${value}`;
42211
+ break;
42212
+ }
42213
+ case "Escape":
42214
+ target.value = `${this.props.currentValue}`;
42215
+ this.closeList();
42216
+ break;
42217
+ default: return;
42206
42218
  }
42219
+ this.skipNextInputChange = true;
42220
+ this.DOMFocusableElementStore.focus();
42221
+ this.skipNextInputChange = false;
42207
42222
  }
42208
42223
  };
42209
42224
 
@@ -74642,15 +74657,18 @@ set(value) {
74642
74657
  topBarToolStore;
74643
74658
  zoomStore;
74644
74659
  valueList = ZOOM_VALUES;
74660
+ minZoom = MIN_ZOOM * 100;
74661
+ maxZoom = 2 * 100;
74645
74662
  setup() {
74646
74663
  this.topBarToolStore = useToolBarDropdownStore();
74647
74664
  this.zoomStore = useStore(ZoomStore);
74648
74665
  }
74649
- get currentFontSize() {
74650
- return (this.zoomStore.zoomLevel || 1) * 100;
74666
+ getZoomLevel() {
74667
+ const zoom = this.zoomStore.zoomLevel || 1;
74668
+ return Math.round(zoom * 100);
74651
74669
  }
74652
- setZoom(fontSize) {
74653
- this.zoomStore.setZoom(fontSize / 100);
74670
+ setZoom(zoomPercentage) {
74671
+ this.zoomStore.setZoom(zoomPercentage / 100);
74654
74672
  }
74655
74673
  toggle() {
74656
74674
  if (this.topBarToolStore.isActive) this.topBarToolStore.closeDropdowns();
@@ -91765,8 +91783,8 @@ exports.stores = stores;
91765
91783
  exports.tokenColors = tokenColors;
91766
91784
  exports.tokenize = tokenize;
91767
91785
 
91768
- __info__.version = "20.1.0-alpha.1";
91769
- __info__.date = "2026-09-19T08:05:57.456Z";
91770
- __info__.hash = "c2bc431";
91786
+ __info__.version = "20.1.0-alpha.2";
91787
+ __info__.date = "2026-09-21T06:31:52.788Z";
91788
+ __info__.hash = "63c49a8";
91771
91789
 
91772
91790
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);