@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.
- package/dist/o-spreadsheet.cjs.js +197 -96
- package/dist/o-spreadsheet.esm.js +197 -96
- package/dist/o-spreadsheet.iife.js +197 -96
- package/dist/o-spreadsheet.iife.min.js +319 -373
- package/package.json +2 -2
|
@@ -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:
|
|
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
|
-
|
|
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
|
|
40589
|
-
|
|
40590
|
-
const
|
|
40591
|
-
const
|
|
40592
|
-
const
|
|
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
|
-
|
|
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.
|
|
44980
|
-
__info__.date = '2023-03-
|
|
44981
|
-
__info__.hash = '
|
|
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);
|