@odoo/o-spreadsheet 16.2.0 → 16.3.0-alpha.1

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.
@@ -106,6 +106,7 @@ const HEADER_BORDER_COLOR = "#C0C0C0";
106
106
  const CELL_BORDER_COLOR = "#E2E3E3";
107
107
  const BACKGROUND_CHART_COLOR = "#FFFFFF";
108
108
  const MENU_ITEM_DISABLED_COLOR = "#CACACA";
109
+ const BG_HOVER_COLOR = "#EBEBEB";
109
110
  const DEFAULT_COLOR_SCALE_MIDPOINT_COLOR = 0xb6d7a8;
110
111
  const LINK_COLOR = "#01666b";
111
112
  const FILTERS_COLOR = "#188038";
@@ -590,6 +591,38 @@ function getYearFrac(startDate, endDate, _dayCountConvention) {
590
591
  break;
591
592
  }
592
593
  return yearsEnd - yearsStart;
594
+ }
595
+ /**
596
+ * Get the number of whole months between two dates.
597
+ * e.g.
598
+ * 2002/01/01 -> 2002/02/01 = 1 month,
599
+ * 2002/01/01 -> 2003/02/01 = 13 months
600
+ * @param startDate
601
+ * @param endDate
602
+ * @returns
603
+ */
604
+ function getTimeDifferenceInWholeMonths(startDate, endDate) {
605
+ const months = (endDate.getFullYear() - startDate.getFullYear()) * 12 +
606
+ endDate.getMonth() -
607
+ startDate.getMonth();
608
+ return startDate.getDate() > endDate.getDate() ? months - 1 : months;
609
+ }
610
+ function getTimeDifferenceInWholeDays(startDate, endDate) {
611
+ const startUtc = startDate.getTime();
612
+ const endUtc = endDate.getTime();
613
+ return Math.floor((endUtc - startUtc) / MS_PER_DAY);
614
+ }
615
+ function getTimeDifferenceInWholeYears(startDate, endDate) {
616
+ const years = endDate.getFullYear() - startDate.getFullYear();
617
+ const monthStart = startDate.getMonth();
618
+ const monthEnd = endDate.getMonth();
619
+ const dateStart = startDate.getDate();
620
+ const dateEnd = endDate.getDate();
621
+ const isEndMonthDateBigger = monthEnd > monthStart || (monthEnd === monthStart && dateEnd >= dateStart);
622
+ return isEndMonthDateBigger ? years : years - 1;
623
+ }
624
+ function areTwoDatesWithinOneYear(startDate, endDate) {
625
+ return getYearFrac(startDate, endDate, 1) < 1;
593
626
  }
594
627
 
595
628
  //------------------------------------------------------------------------------
@@ -3405,6 +3438,11 @@ function assert(condition, message) {
3405
3438
  // FORMAT FUNCTIONS
3406
3439
  // -----------------------------------------------------------------------------
3407
3440
  const expectNumberValueError = (value) => _lt("The function [[FUNCTION_NAME]] expects a number value, but '%s' is a string, and cannot be coerced to a number.", value);
3441
+ const expectNumberRangeError = (lowerBound, upperBound, value) => _lt("The function [[FUNCTION_NAME]] expects a number value between %s and %s inclusive, but receives %s.", lowerBound.toString(), upperBound.toString(), value.toString());
3442
+ const expectStringSetError = (stringSet, value) => {
3443
+ const stringSetString = stringSet.map((str) => `'${str}'`).join(", ");
3444
+ return _lt("The function [[FUNCTION_NAME]] has an argument with value '%s'. It should be one of: %s.", value, stringSetString);
3445
+ };
3408
3446
  function toNumber(value) {
3409
3447
  switch (typeof value) {
3410
3448
  case "number":
@@ -3430,6 +3468,12 @@ function strictToNumber(value) {
3430
3468
  }
3431
3469
  return toNumber(value);
3432
3470
  }
3471
+ function strictToInteger(value) {
3472
+ return Math.trunc(strictToNumber(value));
3473
+ }
3474
+ function assertNumberGreaterThanOrEqualToOne(value) {
3475
+ assert(() => value >= 1, _lt("The function [[FUNCTION_NAME]] expects a number value to be greater than or equal to 1, but receives %s.", value.toString()));
3476
+ }
3433
3477
  function toString(value) {
3434
3478
  switch (typeof value) {
3435
3479
  case "string":
@@ -4663,6 +4707,7 @@ const CSS$2 = css /* scss */ `
4663
4707
  .o-search-icon {
4664
4708
  right: 5px;
4665
4709
  top: 4px;
4710
+ opacity: 0.4;
4666
4711
 
4667
4712
  svg {
4668
4713
  height: 16px;
@@ -5288,7 +5333,7 @@ css /* scss */ `
5288
5333
  &:not(.disabled) {
5289
5334
  &:hover,
5290
5335
  &.o-menu-item-active {
5291
- background-color: #ebebeb;
5336
+ background-color: ${BG_HOVER_COLOR};
5292
5337
  }
5293
5338
  .o-menu-item-description {
5294
5339
  color: grey;
@@ -11749,6 +11794,15 @@ var database = /*#__PURE__*/Object.freeze({
11749
11794
 
11750
11795
  const DEFAULT_TYPE = 1;
11751
11796
  const DEFAULT_WEEKEND = 1;
11797
+ var TIME_UNIT;
11798
+ (function (TIME_UNIT) {
11799
+ TIME_UNIT["WHOLE_YEARS"] = "Y";
11800
+ TIME_UNIT["WHOLE_MONTHS"] = "M";
11801
+ TIME_UNIT["WHOLE_DAYS"] = "D";
11802
+ TIME_UNIT["DAYS_WITHOUT_WHOLE_MONTHS"] = "MD";
11803
+ TIME_UNIT["MONTH_WITHOUT_WHOLE_YEARS"] = "YM";
11804
+ TIME_UNIT["DAYS_BETWEEN_NO_MORE_THAN_ONE_YEAR"] = "YD";
11805
+ })(TIME_UNIT || (TIME_UNIT = {}));
11752
11806
  // -----------------------------------------------------------------------------
11753
11807
  // DATE
11754
11808
  // -----------------------------------------------------------------------------
@@ -11779,6 +11833,63 @@ const DATE = {
11779
11833
  isExported: true,
11780
11834
  };
11781
11835
  // -----------------------------------------------------------------------------
11836
+ // DATEDIF
11837
+ // -----------------------------------------------------------------------------
11838
+ const DATEDIF = {
11839
+ description: _lt("Calculates the number of days, months, or years between two dates."),
11840
+ args: [
11841
+ arg("start_date (date)", _lt("The start date to consider in the calculation. Must be a reference to a cell containing a DATE, a function returning a DATE type, or a number.")),
11842
+ arg("end_date (date)", _lt("The end date to consider in the calculation. Must be a reference to a cell containing a DATE, a function returning a DATE type, or a number.")),
11843
+ arg("unit (string)", _lt(`A text abbreviation for unit of time. Accepted values are "Y" (the number of whole years between start_date and end_date), "M" (the number of whole months between start_date and end_date), "D" (the number of days between start_date and end_date), "MD" (the number of days between start_date and end_date after subtracting whole months), "YM" (the number of whole months between start_date and end_date after subtracting whole years), "YD" (the number of days between start_date and end_date, assuming start_date and end_date were no more than one year apart).`)),
11844
+ ],
11845
+ returns: ["NUMBER"],
11846
+ compute: function (startDate, endDate, unit) {
11847
+ const _unit = toString(unit).toUpperCase();
11848
+ assert(() => Object.values(TIME_UNIT).includes(_unit), expectStringSetError(Object.values(TIME_UNIT), toString(unit)));
11849
+ const _startDate = Math.trunc(toNumber(startDate));
11850
+ const _endDate = Math.trunc(toNumber(endDate));
11851
+ const jsStartDate = numberToJsDate(_startDate);
11852
+ const jsEndDate = numberToJsDate(_endDate);
11853
+ assert(() => _endDate >= _startDate, _lt("start_date (%s) should be on or before end_date (%s).", jsStartDate.toLocaleDateString(), jsEndDate.toLocaleDateString()));
11854
+ switch (_unit) {
11855
+ case TIME_UNIT.WHOLE_YEARS:
11856
+ return getTimeDifferenceInWholeYears(jsStartDate, jsEndDate);
11857
+ case TIME_UNIT.WHOLE_MONTHS:
11858
+ return getTimeDifferenceInWholeMonths(jsStartDate, jsEndDate);
11859
+ case TIME_UNIT.WHOLE_DAYS: {
11860
+ return getTimeDifferenceInWholeDays(jsStartDate, jsEndDate);
11861
+ }
11862
+ case TIME_UNIT.MONTH_WITHOUT_WHOLE_YEARS: {
11863
+ return (getTimeDifferenceInWholeMonths(jsStartDate, jsEndDate) -
11864
+ getTimeDifferenceInWholeYears(jsStartDate, jsEndDate) * 12);
11865
+ }
11866
+ case TIME_UNIT.DAYS_WITHOUT_WHOLE_MONTHS:
11867
+ // Using "MD" may get incorrect result in Excel
11868
+ // See: https://support.microsoft.com/en-us/office/datedif-function-25dba1a4-2812-480b-84dd-8b32a451b35c
11869
+ let days = jsEndDate.getDate() - jsStartDate.getDate();
11870
+ if (days < 0) {
11871
+ const monthBeforeEndMonth = new Date(jsEndDate.getFullYear(), jsEndDate.getMonth() - 1, 1);
11872
+ const daysInMonthBeforeEndMonth = getDaysInMonth(monthBeforeEndMonth);
11873
+ days = daysInMonthBeforeEndMonth - Math.abs(days);
11874
+ }
11875
+ return days;
11876
+ case TIME_UNIT.DAYS_BETWEEN_NO_MORE_THAN_ONE_YEAR: {
11877
+ if (areTwoDatesWithinOneYear(_startDate, _endDate)) {
11878
+ return getTimeDifferenceInWholeDays(jsStartDate, jsEndDate);
11879
+ }
11880
+ const endDateWithinOneYear = new Date(jsStartDate.getFullYear(), jsEndDate.getMonth(), jsEndDate.getDate());
11881
+ let days = getTimeDifferenceInWholeDays(jsStartDate, endDateWithinOneYear);
11882
+ if (days < 0) {
11883
+ endDateWithinOneYear.setFullYear(jsStartDate.getFullYear() + 1);
11884
+ days = getTimeDifferenceInWholeDays(jsStartDate, endDateWithinOneYear);
11885
+ }
11886
+ return days;
11887
+ }
11888
+ }
11889
+ },
11890
+ isExported: true,
11891
+ };
11892
+ // -----------------------------------------------------------------------------
11782
11893
  // DATEVALUE
11783
11894
  // -----------------------------------------------------------------------------
11784
11895
  const DATEVALUE = {
@@ -12457,6 +12568,7 @@ const YEAR_END = {
12457
12568
  var date = /*#__PURE__*/Object.freeze({
12458
12569
  __proto__: null,
12459
12570
  DATE: DATE,
12571
+ DATEDIF: DATEDIF,
12460
12572
  DATEVALUE: DATEVALUE,
12461
12573
  DAY: DAY,
12462
12574
  DAYS: DAYS,
@@ -14940,12 +15052,54 @@ var logical = /*#__PURE__*/Object.freeze({
14940
15052
  const DEFAULT_IS_SORTED = true;
14941
15053
  const DEFAULT_MATCH_MODE = 0;
14942
15054
  const DEFAULT_SEARCH_MODE = 1;
15055
+ const DEFAULT_ABSOLUTE_RELATIVE_MODE = 1;
14943
15056
  function assertAvailable(variable, searchKey) {
14944
15057
  if (variable === undefined) {
14945
15058
  throw new NotAvailableError(_lt("Did not find value '%s' in [[FUNCTION_NAME]] evaluation.", toString(searchKey)));
14946
15059
  }
14947
15060
  }
14948
15061
  // -----------------------------------------------------------------------------
15062
+ // ADDRESS
15063
+ // -----------------------------------------------------------------------------
15064
+ const ADDRESS = {
15065
+ description: _lt("Returns a cell reference as a string. "),
15066
+ args: [
15067
+ arg("row (number)", _lt("The row number of the cell reference. ")),
15068
+ arg("column (number)", _lt("The column number (not name) of the cell reference. A is column number 1. ")),
15069
+ arg(`absolute_relative_mode (number, default=${DEFAULT_ABSOLUTE_RELATIVE_MODE})`, _lt("An indicator of whether the reference is row/column absolute. 1 is row and column absolute (e.g. $A$1), 2 is row absolute and column relative (e.g. A$1), 3 is row relative and column absolute (e.g. $A1), and 4 is row and column relative (e.g. A1).")),
15070
+ arg("use_a1_notation (boolean, default=TRUE)", _lt("A boolean indicating whether to use A1 style notation (TRUE) or R1C1 style notation (FALSE).")),
15071
+ arg("sheet (string, optional)", _lt("A string indicating the name of the sheet into which the address points.")),
15072
+ ],
15073
+ returns: ["STRING"],
15074
+ compute: function (row, column, absoluteRelativeMode = DEFAULT_ABSOLUTE_RELATIVE_MODE, useA1Notation = true, sheet) {
15075
+ const rowNumber = strictToInteger(row);
15076
+ const colNumber = strictToInteger(column);
15077
+ assertNumberGreaterThanOrEqualToOne(rowNumber);
15078
+ assertNumberGreaterThanOrEqualToOne(colNumber);
15079
+ const _absoluteRelativeMode = strictToInteger(absoluteRelativeMode);
15080
+ assert(() => [1, 2, 3, 4].includes(_absoluteRelativeMode), expectNumberRangeError(1, 4, _absoluteRelativeMode));
15081
+ const _useA1Notation = toBoolean(useA1Notation);
15082
+ let cellReference;
15083
+ if (_useA1Notation) {
15084
+ const rangePart = {
15085
+ rowFixed: [1, 2].includes(_absoluteRelativeMode) ? true : false,
15086
+ colFixed: [1, 3].includes(_absoluteRelativeMode) ? true : false,
15087
+ };
15088
+ cellReference = toXC(colNumber - 1, rowNumber - 1, rangePart);
15089
+ }
15090
+ else {
15091
+ const rowPart = [1, 2].includes(_absoluteRelativeMode) ? `R${rowNumber}` : `R[${rowNumber}]`;
15092
+ const colPart = [1, 3].includes(_absoluteRelativeMode) ? `C${colNumber}` : `C[${colNumber}]`;
15093
+ cellReference = rowPart + colPart;
15094
+ }
15095
+ if (sheet !== undefined) {
15096
+ return `${getComposerSheetName(toString(sheet))}!${cellReference}`;
15097
+ }
15098
+ return cellReference;
15099
+ },
15100
+ isExported: true,
15101
+ };
15102
+ // -----------------------------------------------------------------------------
14949
15103
  // COLUMN
14950
15104
  // -----------------------------------------------------------------------------
14951
15105
  const COLUMN = {
@@ -15194,6 +15348,7 @@ const XLOOKUP = {
15194
15348
 
15195
15349
  var lookup = /*#__PURE__*/Object.freeze({
15196
15350
  __proto__: null,
15351
+ ADDRESS: ADDRESS,
15197
15352
  COLUMN: COLUMN,
15198
15353
  COLUMNS: COLUMNS,
15199
15354
  HLOOKUP: HLOOKUP,
@@ -19549,6 +19704,13 @@ css /* scss */ `
19549
19704
  pointer-events: none;
19550
19705
  }
19551
19706
  }
19707
+
19708
+ .o-topbar-composer .o-composer:empty:not(:focus)::before {
19709
+ /* svg free of use from https://uxwing.com/formula-fx-icon/ */
19710
+ content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'%3E%3Cpath d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z' fill='%23BDBDBD' /%3E%3C/svg%3E");
19711
+ position: relative;
19712
+ top: 20%;
19713
+ }
19552
19714
  `;
19553
19715
  class Composer extends Component {
19554
19716
  constructor() {
@@ -20199,20 +20361,10 @@ const CSS$1 = css /* scss */ `
20199
20361
  justify-content: center;
20200
20362
  width: ${FILTER_ICON_EDGE_LENGTH}px;
20201
20363
  height: ${FILTER_ICON_EDGE_LENGTH}px;
20202
-
20203
- svg {
20204
- path {
20205
- fill: ${FILTERS_COLOR};
20206
- }
20207
- }
20208
20364
  }
20209
20365
  .o-filter-icon:hover {
20210
20366
  background: ${FILTERS_COLOR};
20211
- svg {
20212
- path {
20213
- fill: white;
20214
- }
20215
- }
20367
+ color: #fff;
20216
20368
  }
20217
20369
  `;
20218
20370
  class FilterIcon extends Component {
@@ -39421,7 +39573,6 @@ function interactiveRenameSheet(env, sheetId, name, errorCallback) {
39421
39573
 
39422
39574
  css /* scss */ `
39423
39575
  .o-sheet {
39424
- color: #666;
39425
39576
  padding: 0 15px;
39426
39577
  padding-right: 10px;
39427
39578
  height: ${BOTTOMBAR_HEIGHT}px;
@@ -39809,6 +39960,7 @@ class DOMDndHelper {
39809
39960
  const MENU_MAX_HEIGHT = 250;
39810
39961
  css /* scss */ `
39811
39962
  .o-spreadsheet-bottom-bar {
39963
+ color: ${TEXT_HEADER_COLOR};
39812
39964
  background-color: ${BACKGROUND_GRAY_COLOR};
39813
39965
  padding-left: ${HEADER_WIDTH}px;
39814
39966
  font-size: 15px;
@@ -40472,6 +40624,7 @@ TopBarComposer.props = {
40472
40624
  css /* scss */ `
40473
40625
  .o-font-size-editor {
40474
40626
  input.o-font-size {
40627
+ outline-color: ${SELECTION_BORDER_COLOR};
40475
40628
  height: 20px;
40476
40629
  width: 23px;
40477
40630
  }
@@ -40584,52 +40737,53 @@ const FORMATS = [
40584
40737
  const CUSTOM_FORMATS = [
40585
40738
  { name: "custom_currency", text: NumberFormatTerms.CustomCurrency, sidePanel: "CustomCurrency" },
40586
40739
  ];
40587
- const FONT_COLOR = "#4a4f59";
40588
- const ACTIVE_BG_COLOR = "#E6F4EA";
40589
- const ACTIVE_FG_COLOR = "#188038";
40590
- const HOVERED_BG_COLOR = "#f6f7fa";
40591
- const HOVERED_FG_COLOR = "#000000";
40740
+ const ICONS_COLOR = "#4A4F59";
40741
+ // If we ever change these colors, make sure the filter tool stays green to match the icon in the grid
40742
+ const ACTIVE_BG_COLOR = BACKGROUND_HEADER_FILTER_COLOR;
40743
+ const ACTIVE_FONT_COLOR = FILTERS_COLOR;
40744
+ const HOVERED_BG_COLOR = BG_HOVER_COLOR;
40745
+ const HOVERED_FONT_COLOR = "#000";
40592
40746
  // -----------------------------------------------------------------------------
40593
40747
  // TopBar
40594
40748
  // -----------------------------------------------------------------------------
40595
40749
  css /* scss */ `
40596
40750
  .o-spreadsheet-topbar {
40597
- background-color: white;
40598
40751
  line-height: 1.2;
40599
- display: flex;
40600
- flex-direction: column;
40601
40752
  font-size: 13px;
40602
- line-height: 1.2;
40603
- user-select: none;
40604
40753
  font-weight: 500;
40605
- color: ${FONT_COLOR};
40754
+
40755
+ .o-topbar-hoverable {
40756
+ cursor: pointer;
40757
+ .o-icon {
40758
+ color: ${ICONS_COLOR};
40759
+ }
40760
+ &:not(.o-disabled):not(.active):hover {
40761
+ background-color: ${HOVERED_BG_COLOR};
40762
+ color: ${HOVERED_FONT_COLOR};
40763
+ .o-icon {
40764
+ color: ${HOVERED_FONT_COLOR};
40765
+ }
40766
+ }
40767
+ &.active {
40768
+ background-color: ${ACTIVE_BG_COLOR};
40769
+ color: ${ACTIVE_FONT_COLOR};
40770
+ .o-icon {
40771
+ color: ${ACTIVE_FONT_COLOR};
40772
+ }
40773
+ }
40774
+ }
40606
40775
 
40607
40776
  .o-topbar-top {
40608
40777
  border-bottom: 1px solid ${SEPARATOR_COLOR};
40609
- display: flex;
40610
40778
  padding: 2px 10px;
40611
- justify-content: space-between;
40612
40779
 
40613
40780
  /* Menus */
40614
40781
  .o-topbar-topleft {
40615
- display: flex;
40616
40782
  .o-topbar-menu {
40617
40783
  padding: 4px 6px;
40618
40784
  margin: 0 2px;
40619
- cursor: pointer;
40620
- }
40621
-
40622
- .o-topbar-menu:hover,
40623
- .o-topbar-menu-active {
40624
- background-color: #f1f3f4;
40625
- border-radius: 2px;
40626
40785
  }
40627
40786
  }
40628
-
40629
- .o-topbar-topright {
40630
- display: flex;
40631
- justify-content: flex-end;
40632
- }
40633
40787
  }
40634
40788
 
40635
40789
  .o-topbar-composer {
@@ -40638,13 +40792,9 @@ css /* scss */ `
40638
40792
 
40639
40793
  /* Toolbar */
40640
40794
  .o-topbar-toolbar {
40641
- flex-shrink: 0;
40642
- display: flex;
40643
40795
  height: ${TOPBAR_TOOLBAR_HEIGHT}px;
40644
40796
 
40645
40797
  .o-readonly-toolbar {
40646
- display: flex;
40647
- align-items: center;
40648
40798
  background-color: ${BACKGROUND_HEADER_COLOR};
40649
40799
  padding-left: 18px;
40650
40800
  padding-right: 18px;
@@ -40652,11 +40802,6 @@ css /* scss */ `
40652
40802
 
40653
40803
  /* Toolbar */
40654
40804
  .o-toolbar-tools {
40655
- display: flex;
40656
- flex-shrink: 0;
40657
- margin-left: 16px;
40658
- cursor: default;
40659
-
40660
40805
  .o-tool {
40661
40806
  display: flex;
40662
40807
  justify-content: center;
@@ -40664,40 +40809,13 @@ css /* scss */ `
40664
40809
  margin: 2px;
40665
40810
  padding: 0px 3px;
40666
40811
  border-radius: 2px;
40667
- cursor: pointer;
40668
40812
  min-width: 20px;
40669
- svg path,
40670
- polygon,
40671
- rect {
40672
- fill: ${FONT_COLOR};
40673
- }
40674
- }
40675
-
40676
- .o-tool-outlined {
40677
- background-color: rgba(0, 0, 0, 0.08);
40678
40813
  }
40679
40814
 
40680
40815
  .o-filter-tool {
40681
40816
  margin-right: 8px;
40682
40817
  }
40683
40818
 
40684
- .o-tool.active {
40685
- background-color: ${ACTIVE_BG_COLOR};
40686
- svg path,
40687
- polygon,
40688
- rect {
40689
- fill: ${ACTIVE_FG_COLOR};
40690
- }
40691
- }
40692
- .o-tool:not(.o-disabled):hover {
40693
- background-color: ${HOVERED_BG_COLOR};
40694
- svg path,
40695
- polygon,
40696
- rect {
40697
- fill: ${HOVERED_FG_COLOR};
40698
- }
40699
- }
40700
-
40701
40819
  .o-border-dropdown {
40702
40820
  padding: 4px;
40703
40821
  }
@@ -40723,10 +40841,6 @@ css /* scss */ `
40723
40841
  height: 30px;
40724
40842
  }
40725
40843
 
40726
- .o-text-icon {
40727
- line-height: 30px;
40728
- }
40729
-
40730
40844
  .o-text-options > div {
40731
40845
  line-height: 26px;
40732
40846
  padding: 3px 12px;
@@ -40745,14 +40859,6 @@ css /* scss */ `
40745
40859
  box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15);
40746
40860
  background-color: white;
40747
40861
 
40748
- .o-dropdown-item {
40749
- cursor: pointer;
40750
- }
40751
-
40752
- .o-dropdown-item:hover {
40753
- background-color: rgba(0, 0, 0, 0.08);
40754
- }
40755
-
40756
40862
  .o-dropdown-line {
40757
40863
  display: flex;
40758
40864
  margin: 1px;
@@ -40761,11 +40867,6 @@ css /* scss */ `
40761
40867
  padding: 4px;
40762
40868
  width: 18px;
40763
40869
  height: 18px;
40764
- cursor: pointer;
40765
-
40766
- &:hover {
40767
- background-color: rgba(0, 0, 0, 0.08);
40768
- }
40769
40870
  }
40770
40871
  }
40771
40872
 
@@ -40777,7 +40878,7 @@ css /* scss */ `
40777
40878
  padding: 0 20px;
40778
40879
  white-space: nowrap;
40779
40880
 
40780
- &.active:before {
40881
+ &.o-dropdown-active:before {
40781
40882
  content: "✓";
40782
40883
  font-weight: bold;
40783
40884
  position: absolute;
@@ -44945,6 +45046,6 @@ function addFunction(functionName, functionDescription) {
44945
45046
  export { AbstractChart, CommandResult, CorePlugin, DATETIME_FORMAT, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, components, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, invalidateEvaluationCommands, links, load, parse, readonlyAllowedCommands, registries, setTranslationMethod, tokenize };
44946
45047
 
44947
45048
 
44948
- __info__.version = '16.2.0';
44949
- __info__.date = '2023-03-15T15:03:34.107Z';
44950
- __info__.hash = 'c74b1d1';
45049
+ __info__.version = '16.3.0-alpha.1';
45050
+ __info__.date = '2023-03-16T12:12:26.034Z';
45051
+ __info__.hash = 'f41d64a';