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