@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.
@@ -110,6 +110,7 @@ const HEADER_BORDER_COLOR = "#C0C0C0";
110
110
  const CELL_BORDER_COLOR = "#E2E3E3";
111
111
  const BACKGROUND_CHART_COLOR = "#FFFFFF";
112
112
  const MENU_ITEM_DISABLED_COLOR = "#CACACA";
113
+ const BG_HOVER_COLOR = "#EBEBEB";
113
114
  const DEFAULT_COLOR_SCALE_MIDPOINT_COLOR = 0xb6d7a8;
114
115
  const LINK_COLOR = "#01666b";
115
116
  const FILTERS_COLOR = "#188038";
@@ -594,6 +595,38 @@ function getYearFrac(startDate, endDate, _dayCountConvention) {
594
595
  break;
595
596
  }
596
597
  return yearsEnd - yearsStart;
598
+ }
599
+ /**
600
+ * Get the number of whole months between two dates.
601
+ * e.g.
602
+ * 2002/01/01 -> 2002/02/01 = 1 month,
603
+ * 2002/01/01 -> 2003/02/01 = 13 months
604
+ * @param startDate
605
+ * @param endDate
606
+ * @returns
607
+ */
608
+ function getTimeDifferenceInWholeMonths(startDate, endDate) {
609
+ const months = (endDate.getFullYear() - startDate.getFullYear()) * 12 +
610
+ endDate.getMonth() -
611
+ startDate.getMonth();
612
+ return startDate.getDate() > endDate.getDate() ? months - 1 : months;
613
+ }
614
+ function getTimeDifferenceInWholeDays(startDate, endDate) {
615
+ const startUtc = startDate.getTime();
616
+ const endUtc = endDate.getTime();
617
+ return Math.floor((endUtc - startUtc) / MS_PER_DAY);
618
+ }
619
+ function getTimeDifferenceInWholeYears(startDate, endDate) {
620
+ const years = endDate.getFullYear() - startDate.getFullYear();
621
+ const monthStart = startDate.getMonth();
622
+ const monthEnd = endDate.getMonth();
623
+ const dateStart = startDate.getDate();
624
+ const dateEnd = endDate.getDate();
625
+ const isEndMonthDateBigger = monthEnd > monthStart || (monthEnd === monthStart && dateEnd >= dateStart);
626
+ return isEndMonthDateBigger ? years : years - 1;
627
+ }
628
+ function areTwoDatesWithinOneYear(startDate, endDate) {
629
+ return getYearFrac(startDate, endDate, 1) < 1;
597
630
  }
598
631
 
599
632
  //------------------------------------------------------------------------------
@@ -3409,6 +3442,11 @@ function assert(condition, message) {
3409
3442
  // FORMAT FUNCTIONS
3410
3443
  // -----------------------------------------------------------------------------
3411
3444
  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);
3445
+ 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());
3446
+ const expectStringSetError = (stringSet, value) => {
3447
+ const stringSetString = stringSet.map((str) => `'${str}'`).join(", ");
3448
+ return _lt("The function [[FUNCTION_NAME]] has an argument with value '%s'. It should be one of: %s.", value, stringSetString);
3449
+ };
3412
3450
  function toNumber(value) {
3413
3451
  switch (typeof value) {
3414
3452
  case "number":
@@ -3434,6 +3472,12 @@ function strictToNumber(value) {
3434
3472
  }
3435
3473
  return toNumber(value);
3436
3474
  }
3475
+ function strictToInteger(value) {
3476
+ return Math.trunc(strictToNumber(value));
3477
+ }
3478
+ function assertNumberGreaterThanOrEqualToOne(value) {
3479
+ 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()));
3480
+ }
3437
3481
  function toString(value) {
3438
3482
  switch (typeof value) {
3439
3483
  case "string":
@@ -4667,6 +4711,7 @@ const CSS$2 = css /* scss */ `
4667
4711
  .o-search-icon {
4668
4712
  right: 5px;
4669
4713
  top: 4px;
4714
+ opacity: 0.4;
4670
4715
 
4671
4716
  svg {
4672
4717
  height: 16px;
@@ -5292,7 +5337,7 @@ css /* scss */ `
5292
5337
  &:not(.disabled) {
5293
5338
  &:hover,
5294
5339
  &.o-menu-item-active {
5295
- background-color: #ebebeb;
5340
+ background-color: ${BG_HOVER_COLOR};
5296
5341
  }
5297
5342
  .o-menu-item-description {
5298
5343
  color: grey;
@@ -11753,6 +11798,15 @@ var database = /*#__PURE__*/Object.freeze({
11753
11798
 
11754
11799
  const DEFAULT_TYPE = 1;
11755
11800
  const DEFAULT_WEEKEND = 1;
11801
+ var TIME_UNIT;
11802
+ (function (TIME_UNIT) {
11803
+ TIME_UNIT["WHOLE_YEARS"] = "Y";
11804
+ TIME_UNIT["WHOLE_MONTHS"] = "M";
11805
+ TIME_UNIT["WHOLE_DAYS"] = "D";
11806
+ TIME_UNIT["DAYS_WITHOUT_WHOLE_MONTHS"] = "MD";
11807
+ TIME_UNIT["MONTH_WITHOUT_WHOLE_YEARS"] = "YM";
11808
+ TIME_UNIT["DAYS_BETWEEN_NO_MORE_THAN_ONE_YEAR"] = "YD";
11809
+ })(TIME_UNIT || (TIME_UNIT = {}));
11756
11810
  // -----------------------------------------------------------------------------
11757
11811
  // DATE
11758
11812
  // -----------------------------------------------------------------------------
@@ -11783,6 +11837,63 @@ const DATE = {
11783
11837
  isExported: true,
11784
11838
  };
11785
11839
  // -----------------------------------------------------------------------------
11840
+ // DATEDIF
11841
+ // -----------------------------------------------------------------------------
11842
+ const DATEDIF = {
11843
+ description: _lt("Calculates the number of days, months, or years between two dates."),
11844
+ args: [
11845
+ 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.")),
11846
+ 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.")),
11847
+ 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).`)),
11848
+ ],
11849
+ returns: ["NUMBER"],
11850
+ compute: function (startDate, endDate, unit) {
11851
+ const _unit = toString(unit).toUpperCase();
11852
+ assert(() => Object.values(TIME_UNIT).includes(_unit), expectStringSetError(Object.values(TIME_UNIT), toString(unit)));
11853
+ const _startDate = Math.trunc(toNumber(startDate));
11854
+ const _endDate = Math.trunc(toNumber(endDate));
11855
+ const jsStartDate = numberToJsDate(_startDate);
11856
+ const jsEndDate = numberToJsDate(_endDate);
11857
+ assert(() => _endDate >= _startDate, _lt("start_date (%s) should be on or before end_date (%s).", jsStartDate.toLocaleDateString(), jsEndDate.toLocaleDateString()));
11858
+ switch (_unit) {
11859
+ case TIME_UNIT.WHOLE_YEARS:
11860
+ return getTimeDifferenceInWholeYears(jsStartDate, jsEndDate);
11861
+ case TIME_UNIT.WHOLE_MONTHS:
11862
+ return getTimeDifferenceInWholeMonths(jsStartDate, jsEndDate);
11863
+ case TIME_UNIT.WHOLE_DAYS: {
11864
+ return getTimeDifferenceInWholeDays(jsStartDate, jsEndDate);
11865
+ }
11866
+ case TIME_UNIT.MONTH_WITHOUT_WHOLE_YEARS: {
11867
+ return (getTimeDifferenceInWholeMonths(jsStartDate, jsEndDate) -
11868
+ getTimeDifferenceInWholeYears(jsStartDate, jsEndDate) * 12);
11869
+ }
11870
+ case TIME_UNIT.DAYS_WITHOUT_WHOLE_MONTHS:
11871
+ // Using "MD" may get incorrect result in Excel
11872
+ // See: https://support.microsoft.com/en-us/office/datedif-function-25dba1a4-2812-480b-84dd-8b32a451b35c
11873
+ let days = jsEndDate.getDate() - jsStartDate.getDate();
11874
+ if (days < 0) {
11875
+ const monthBeforeEndMonth = new Date(jsEndDate.getFullYear(), jsEndDate.getMonth() - 1, 1);
11876
+ const daysInMonthBeforeEndMonth = getDaysInMonth(monthBeforeEndMonth);
11877
+ days = daysInMonthBeforeEndMonth - Math.abs(days);
11878
+ }
11879
+ return days;
11880
+ case TIME_UNIT.DAYS_BETWEEN_NO_MORE_THAN_ONE_YEAR: {
11881
+ if (areTwoDatesWithinOneYear(_startDate, _endDate)) {
11882
+ return getTimeDifferenceInWholeDays(jsStartDate, jsEndDate);
11883
+ }
11884
+ const endDateWithinOneYear = new Date(jsStartDate.getFullYear(), jsEndDate.getMonth(), jsEndDate.getDate());
11885
+ let days = getTimeDifferenceInWholeDays(jsStartDate, endDateWithinOneYear);
11886
+ if (days < 0) {
11887
+ endDateWithinOneYear.setFullYear(jsStartDate.getFullYear() + 1);
11888
+ days = getTimeDifferenceInWholeDays(jsStartDate, endDateWithinOneYear);
11889
+ }
11890
+ return days;
11891
+ }
11892
+ }
11893
+ },
11894
+ isExported: true,
11895
+ };
11896
+ // -----------------------------------------------------------------------------
11786
11897
  // DATEVALUE
11787
11898
  // -----------------------------------------------------------------------------
11788
11899
  const DATEVALUE = {
@@ -12461,6 +12572,7 @@ const YEAR_END = {
12461
12572
  var date = /*#__PURE__*/Object.freeze({
12462
12573
  __proto__: null,
12463
12574
  DATE: DATE,
12575
+ DATEDIF: DATEDIF,
12464
12576
  DATEVALUE: DATEVALUE,
12465
12577
  DAY: DAY,
12466
12578
  DAYS: DAYS,
@@ -14944,12 +15056,54 @@ var logical = /*#__PURE__*/Object.freeze({
14944
15056
  const DEFAULT_IS_SORTED = true;
14945
15057
  const DEFAULT_MATCH_MODE = 0;
14946
15058
  const DEFAULT_SEARCH_MODE = 1;
15059
+ const DEFAULT_ABSOLUTE_RELATIVE_MODE = 1;
14947
15060
  function assertAvailable(variable, searchKey) {
14948
15061
  if (variable === undefined) {
14949
15062
  throw new NotAvailableError(_lt("Did not find value '%s' in [[FUNCTION_NAME]] evaluation.", toString(searchKey)));
14950
15063
  }
14951
15064
  }
14952
15065
  // -----------------------------------------------------------------------------
15066
+ // ADDRESS
15067
+ // -----------------------------------------------------------------------------
15068
+ const ADDRESS = {
15069
+ description: _lt("Returns a cell reference as a string. "),
15070
+ args: [
15071
+ arg("row (number)", _lt("The row number of the cell reference. ")),
15072
+ arg("column (number)", _lt("The column number (not name) of the cell reference. A is column number 1. ")),
15073
+ 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).")),
15074
+ arg("use_a1_notation (boolean, default=TRUE)", _lt("A boolean indicating whether to use A1 style notation (TRUE) or R1C1 style notation (FALSE).")),
15075
+ arg("sheet (string, optional)", _lt("A string indicating the name of the sheet into which the address points.")),
15076
+ ],
15077
+ returns: ["STRING"],
15078
+ compute: function (row, column, absoluteRelativeMode = DEFAULT_ABSOLUTE_RELATIVE_MODE, useA1Notation = true, sheet) {
15079
+ const rowNumber = strictToInteger(row);
15080
+ const colNumber = strictToInteger(column);
15081
+ assertNumberGreaterThanOrEqualToOne(rowNumber);
15082
+ assertNumberGreaterThanOrEqualToOne(colNumber);
15083
+ const _absoluteRelativeMode = strictToInteger(absoluteRelativeMode);
15084
+ assert(() => [1, 2, 3, 4].includes(_absoluteRelativeMode), expectNumberRangeError(1, 4, _absoluteRelativeMode));
15085
+ const _useA1Notation = toBoolean(useA1Notation);
15086
+ let cellReference;
15087
+ if (_useA1Notation) {
15088
+ const rangePart = {
15089
+ rowFixed: [1, 2].includes(_absoluteRelativeMode) ? true : false,
15090
+ colFixed: [1, 3].includes(_absoluteRelativeMode) ? true : false,
15091
+ };
15092
+ cellReference = toXC(colNumber - 1, rowNumber - 1, rangePart);
15093
+ }
15094
+ else {
15095
+ const rowPart = [1, 2].includes(_absoluteRelativeMode) ? `R${rowNumber}` : `R[${rowNumber}]`;
15096
+ const colPart = [1, 3].includes(_absoluteRelativeMode) ? `C${colNumber}` : `C[${colNumber}]`;
15097
+ cellReference = rowPart + colPart;
15098
+ }
15099
+ if (sheet !== undefined) {
15100
+ return `${getComposerSheetName(toString(sheet))}!${cellReference}`;
15101
+ }
15102
+ return cellReference;
15103
+ },
15104
+ isExported: true,
15105
+ };
15106
+ // -----------------------------------------------------------------------------
14953
15107
  // COLUMN
14954
15108
  // -----------------------------------------------------------------------------
14955
15109
  const COLUMN = {
@@ -15198,6 +15352,7 @@ const XLOOKUP = {
15198
15352
 
15199
15353
  var lookup = /*#__PURE__*/Object.freeze({
15200
15354
  __proto__: null,
15355
+ ADDRESS: ADDRESS,
15201
15356
  COLUMN: COLUMN,
15202
15357
  COLUMNS: COLUMNS,
15203
15358
  HLOOKUP: HLOOKUP,
@@ -19553,6 +19708,13 @@ css /* scss */ `
19553
19708
  pointer-events: none;
19554
19709
  }
19555
19710
  }
19711
+
19712
+ .o-topbar-composer .o-composer:empty:not(:focus)::before {
19713
+ /* svg free of use from https://uxwing.com/formula-fx-icon/ */
19714
+ 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");
19715
+ position: relative;
19716
+ top: 20%;
19717
+ }
19556
19718
  `;
19557
19719
  class Composer extends owl.Component {
19558
19720
  constructor() {
@@ -20203,20 +20365,10 @@ const CSS$1 = css /* scss */ `
20203
20365
  justify-content: center;
20204
20366
  width: ${FILTER_ICON_EDGE_LENGTH}px;
20205
20367
  height: ${FILTER_ICON_EDGE_LENGTH}px;
20206
-
20207
- svg {
20208
- path {
20209
- fill: ${FILTERS_COLOR};
20210
- }
20211
- }
20212
20368
  }
20213
20369
  .o-filter-icon:hover {
20214
20370
  background: ${FILTERS_COLOR};
20215
- svg {
20216
- path {
20217
- fill: white;
20218
- }
20219
- }
20371
+ color: #fff;
20220
20372
  }
20221
20373
  `;
20222
20374
  class FilterIcon extends owl.Component {
@@ -39425,7 +39577,6 @@ function interactiveRenameSheet(env, sheetId, name, errorCallback) {
39425
39577
 
39426
39578
  css /* scss */ `
39427
39579
  .o-sheet {
39428
- color: #666;
39429
39580
  padding: 0 15px;
39430
39581
  padding-right: 10px;
39431
39582
  height: ${BOTTOMBAR_HEIGHT}px;
@@ -39813,6 +39964,7 @@ class DOMDndHelper {
39813
39964
  const MENU_MAX_HEIGHT = 250;
39814
39965
  css /* scss */ `
39815
39966
  .o-spreadsheet-bottom-bar {
39967
+ color: ${TEXT_HEADER_COLOR};
39816
39968
  background-color: ${BACKGROUND_GRAY_COLOR};
39817
39969
  padding-left: ${HEADER_WIDTH}px;
39818
39970
  font-size: 15px;
@@ -40476,6 +40628,7 @@ TopBarComposer.props = {
40476
40628
  css /* scss */ `
40477
40629
  .o-font-size-editor {
40478
40630
  input.o-font-size {
40631
+ outline-color: ${SELECTION_BORDER_COLOR};
40479
40632
  height: 20px;
40480
40633
  width: 23px;
40481
40634
  }
@@ -40588,52 +40741,53 @@ const FORMATS = [
40588
40741
  const CUSTOM_FORMATS = [
40589
40742
  { name: "custom_currency", text: NumberFormatTerms.CustomCurrency, sidePanel: "CustomCurrency" },
40590
40743
  ];
40591
- const FONT_COLOR = "#4a4f59";
40592
- const ACTIVE_BG_COLOR = "#E6F4EA";
40593
- const ACTIVE_FG_COLOR = "#188038";
40594
- const HOVERED_BG_COLOR = "#f6f7fa";
40595
- const HOVERED_FG_COLOR = "#000000";
40744
+ const ICONS_COLOR = "#4A4F59";
40745
+ // If we ever change these colors, make sure the filter tool stays green to match the icon in the grid
40746
+ const ACTIVE_BG_COLOR = BACKGROUND_HEADER_FILTER_COLOR;
40747
+ const ACTIVE_FONT_COLOR = FILTERS_COLOR;
40748
+ const HOVERED_BG_COLOR = BG_HOVER_COLOR;
40749
+ const HOVERED_FONT_COLOR = "#000";
40596
40750
  // -----------------------------------------------------------------------------
40597
40751
  // TopBar
40598
40752
  // -----------------------------------------------------------------------------
40599
40753
  css /* scss */ `
40600
40754
  .o-spreadsheet-topbar {
40601
- background-color: white;
40602
40755
  line-height: 1.2;
40603
- display: flex;
40604
- flex-direction: column;
40605
40756
  font-size: 13px;
40606
- line-height: 1.2;
40607
- user-select: none;
40608
40757
  font-weight: 500;
40609
- color: ${FONT_COLOR};
40758
+
40759
+ .o-topbar-hoverable {
40760
+ cursor: pointer;
40761
+ .o-icon {
40762
+ color: ${ICONS_COLOR};
40763
+ }
40764
+ &:not(.o-disabled):not(.active):hover {
40765
+ background-color: ${HOVERED_BG_COLOR};
40766
+ color: ${HOVERED_FONT_COLOR};
40767
+ .o-icon {
40768
+ color: ${HOVERED_FONT_COLOR};
40769
+ }
40770
+ }
40771
+ &.active {
40772
+ background-color: ${ACTIVE_BG_COLOR};
40773
+ color: ${ACTIVE_FONT_COLOR};
40774
+ .o-icon {
40775
+ color: ${ACTIVE_FONT_COLOR};
40776
+ }
40777
+ }
40778
+ }
40610
40779
 
40611
40780
  .o-topbar-top {
40612
40781
  border-bottom: 1px solid ${SEPARATOR_COLOR};
40613
- display: flex;
40614
40782
  padding: 2px 10px;
40615
- justify-content: space-between;
40616
40783
 
40617
40784
  /* Menus */
40618
40785
  .o-topbar-topleft {
40619
- display: flex;
40620
40786
  .o-topbar-menu {
40621
40787
  padding: 4px 6px;
40622
40788
  margin: 0 2px;
40623
- cursor: pointer;
40624
- }
40625
-
40626
- .o-topbar-menu:hover,
40627
- .o-topbar-menu-active {
40628
- background-color: #f1f3f4;
40629
- border-radius: 2px;
40630
40789
  }
40631
40790
  }
40632
-
40633
- .o-topbar-topright {
40634
- display: flex;
40635
- justify-content: flex-end;
40636
- }
40637
40791
  }
40638
40792
 
40639
40793
  .o-topbar-composer {
@@ -40642,13 +40796,9 @@ css /* scss */ `
40642
40796
 
40643
40797
  /* Toolbar */
40644
40798
  .o-topbar-toolbar {
40645
- flex-shrink: 0;
40646
- display: flex;
40647
40799
  height: ${TOPBAR_TOOLBAR_HEIGHT}px;
40648
40800
 
40649
40801
  .o-readonly-toolbar {
40650
- display: flex;
40651
- align-items: center;
40652
40802
  background-color: ${BACKGROUND_HEADER_COLOR};
40653
40803
  padding-left: 18px;
40654
40804
  padding-right: 18px;
@@ -40656,11 +40806,6 @@ css /* scss */ `
40656
40806
 
40657
40807
  /* Toolbar */
40658
40808
  .o-toolbar-tools {
40659
- display: flex;
40660
- flex-shrink: 0;
40661
- margin-left: 16px;
40662
- cursor: default;
40663
-
40664
40809
  .o-tool {
40665
40810
  display: flex;
40666
40811
  justify-content: center;
@@ -40668,40 +40813,13 @@ css /* scss */ `
40668
40813
  margin: 2px;
40669
40814
  padding: 0px 3px;
40670
40815
  border-radius: 2px;
40671
- cursor: pointer;
40672
40816
  min-width: 20px;
40673
- svg path,
40674
- polygon,
40675
- rect {
40676
- fill: ${FONT_COLOR};
40677
- }
40678
- }
40679
-
40680
- .o-tool-outlined {
40681
- background-color: rgba(0, 0, 0, 0.08);
40682
40817
  }
40683
40818
 
40684
40819
  .o-filter-tool {
40685
40820
  margin-right: 8px;
40686
40821
  }
40687
40822
 
40688
- .o-tool.active {
40689
- background-color: ${ACTIVE_BG_COLOR};
40690
- svg path,
40691
- polygon,
40692
- rect {
40693
- fill: ${ACTIVE_FG_COLOR};
40694
- }
40695
- }
40696
- .o-tool:not(.o-disabled):hover {
40697
- background-color: ${HOVERED_BG_COLOR};
40698
- svg path,
40699
- polygon,
40700
- rect {
40701
- fill: ${HOVERED_FG_COLOR};
40702
- }
40703
- }
40704
-
40705
40823
  .o-border-dropdown {
40706
40824
  padding: 4px;
40707
40825
  }
@@ -40727,10 +40845,6 @@ css /* scss */ `
40727
40845
  height: 30px;
40728
40846
  }
40729
40847
 
40730
- .o-text-icon {
40731
- line-height: 30px;
40732
- }
40733
-
40734
40848
  .o-text-options > div {
40735
40849
  line-height: 26px;
40736
40850
  padding: 3px 12px;
@@ -40749,14 +40863,6 @@ css /* scss */ `
40749
40863
  box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15);
40750
40864
  background-color: white;
40751
40865
 
40752
- .o-dropdown-item {
40753
- cursor: pointer;
40754
- }
40755
-
40756
- .o-dropdown-item:hover {
40757
- background-color: rgba(0, 0, 0, 0.08);
40758
- }
40759
-
40760
40866
  .o-dropdown-line {
40761
40867
  display: flex;
40762
40868
  margin: 1px;
@@ -40765,11 +40871,6 @@ css /* scss */ `
40765
40871
  padding: 4px;
40766
40872
  width: 18px;
40767
40873
  height: 18px;
40768
- cursor: pointer;
40769
-
40770
- &:hover {
40771
- background-color: rgba(0, 0, 0, 0.08);
40772
- }
40773
40874
  }
40774
40875
  }
40775
40876
 
@@ -40781,7 +40882,7 @@ css /* scss */ `
40781
40882
  padding: 0 20px;
40782
40883
  white-space: nowrap;
40783
40884
 
40784
- &.active:before {
40885
+ &.o-dropdown-active:before {
40785
40886
  content: "✓";
40786
40887
  font-weight: bold;
40787
40888
  position: absolute;
@@ -44977,6 +45078,6 @@ exports.setTranslationMethod = setTranslationMethod;
44977
45078
  exports.tokenize = tokenize;
44978
45079
 
44979
45080
 
44980
- __info__.version = '16.2.0';
44981
- __info__.date = '2023-03-15T15:03:34.107Z';
44982
- __info__.hash = 'c74b1d1';
45081
+ __info__.version = '16.3.0-alpha.1';
45082
+ __info__.date = '2023-03-16T12:12:26.034Z';
45083
+ __info__.hash = 'f41d64a';