@odoo/o-spreadsheet 19.1.0-alpha.1 → 19.1.0-alpha.3

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 19.1.0-alpha.1
6
- * @date 2025-09-12T13:33:41.605Z
7
- * @hash d3e4e7b
5
+ * @version 19.1.0-alpha.3
6
+ * @date 2025-09-23T12:37:52.238Z
7
+ * @hash ce2b07a
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -588,7 +588,6 @@
588
588
  const CANVAS_SHIFT = 0.5;
589
589
  // Colors
590
590
  const HIGHLIGHT_COLOR = "#017E84";
591
- const BACKGROUND_GRAY_COLOR = "#f5f5f5";
592
591
  const BACKGROUND_HEADER_COLOR = "#F8F9FA";
593
592
  const BACKGROUND_HEADER_SELECTED_COLOR = "#E8EAED";
594
593
  const BACKGROUND_HEADER_ACTIVE_COLOR = "#595959";
@@ -598,15 +597,10 @@
598
597
  const HEADER_BORDER_COLOR = "#C0C0C0";
599
598
  const CELL_BORDER_COLOR = "#E2E3E3";
600
599
  const BACKGROUND_CHART_COLOR = "#FFFFFF";
601
- const DISABLED_TEXT_COLOR = "#CACACA";
602
600
  const DEFAULT_COLOR_SCALE_MIDPOINT_COLOR = 0xb6d7a8;
603
601
  const LINK_COLOR = HIGHLIGHT_COLOR;
604
602
  const FILTERS_COLOR = "#188038";
605
- const SEPARATOR_COLOR = "#E0E2E4";
606
- const ICONS_COLOR = "#4A4F59";
607
- const HEADER_GROUPING_BACKGROUND_COLOR = "#F5F5F5";
608
603
  const HEADER_GROUPING_BORDER_COLOR = "#999";
609
- const GRID_BORDER_COLOR = "#E2E3E3";
610
604
  const FROZEN_PANE_HEADER_BORDER_COLOR = "#BCBCBC";
611
605
  const FROZEN_PANE_BORDER_COLOR = "#DADFE8";
612
606
  const COMPOSER_ASSISTANT_COLOR = "#9B359B";
@@ -618,30 +612,9 @@
618
612
  const GRAY_900 = "#111827";
619
613
  const GRAY_300 = "#D8DADD";
620
614
  const GRAY_200 = "#E7E9ED";
621
- const GRAY_100 = "#F9FAFB";
622
615
  const TEXT_BODY = "#374151";
623
616
  const TEXT_BODY_MUTED = TEXT_BODY + "C2";
624
- const TEXT_HEADING = "#111827";
625
- const PRIMARY_BUTTON_BG = "#714B67";
626
- const PRIMARY_BUTTON_HOVER_BG = "#624159";
627
- const PRIMARY_BUTTON_ACTIVE_BG = "#f1edf0";
628
- const BUTTON_BG = GRAY_200;
629
- const BUTTON_HOVER_BG = GRAY_300;
630
- const BUTTON_HOVER_TEXT_COLOR = "#111827";
631
- const BUTTON_ACTIVE_BG = "#e6f2f3";
632
- const BUTTON_ACTIVE_TEXT_COLOR = "#111827";
633
617
  const ACTION_COLOR = HIGHLIGHT_COLOR;
634
- const ACTION_COLOR_HOVER = "#01585c";
635
- const ALERT_WARNING_BG = "#FBEBCC";
636
- const ALERT_WARNING_BORDER = "#F8E2B3";
637
- const ALERT_WARNING_TEXT_COLOR = "#946D23";
638
- const ALERT_DANGER_BG = "#D44C591A";
639
- const ALERT_DANGER_BORDER = "#C34A41";
640
- const ALERT_DANGER_TEXT_COLOR = "#C34A41";
641
- const ALERT_INFO_BG = "#CDEDF1";
642
- const ALERT_INFO_BORDER = "#98DBE2";
643
- const ALERT_INFO_TEXT_COLOR = "#09414A";
644
- const BADGE_SELECTED_COLOR = "#E6F2F3";
645
618
  const CHART_PADDING = 20;
646
619
  const CHART_PADDING_BOTTOM = 10;
647
620
  const CHART_PADDING_TOP = 15;
@@ -739,9 +712,7 @@
739
712
  const HEADER_HEIGHT = 26;
740
713
  const HEADER_WIDTH = 48;
741
714
  const DESKTOP_TOPBAR_TOOLBAR_HEIGHT = 34;
742
- const MOBILE_TOPBAR_TOOLBAR_HEIGHT = 44;
743
715
  const DESKTOP_BOTTOMBAR_HEIGHT = 36;
744
- const MOBILE_BOTTOMBAR_HEIGHT = 44;
745
716
  const DEFAULT_CELL_WIDTH = 96;
746
717
  const DEFAULT_CELL_HEIGHT = 23;
747
718
  const SCROLLBAR_WIDTH = 15;
@@ -749,7 +720,6 @@
749
720
  const ICON_EDGE_LENGTH = 18;
750
721
  const MIN_CF_ICON_MARGIN = 4;
751
722
  const MIN_CELL_TEXT_MARGIN = 4;
752
- const CF_ICON_EDGE_LENGTH = 15;
753
723
  const PADDING_AUTORESIZE_VERTICAL = 3;
754
724
  const PADDING_AUTORESIZE_HORIZONTAL = MIN_CELL_TEXT_MARGIN;
755
725
  const GROUP_LAYER_WIDTH = 21;
@@ -764,11 +734,6 @@
764
734
  const MENU_WIDTH = 250;
765
735
  const MENU_VERTICAL_PADDING = 6;
766
736
  const DESKTOP_MENU_ITEM_HEIGHT = 26;
767
- const MOBILE_MENU_ITEM_HEIGHT = 35;
768
- const MENU_ITEM_PADDING_HORIZONTAL = 11;
769
- const MENU_ITEM_PADDING_VERTICAL = 4;
770
- const MENU_SEPARATOR_BORDER_WIDTH = 1;
771
- const MENU_SEPARATOR_PADDING = 5;
772
737
  // Style
773
738
  const DEFAULT_STYLE = {
774
739
  align: "left",
@@ -822,23 +787,6 @@
822
787
  const FORBIDDEN_SHEETNAME_CHARS_IN_EXCEL_REGEX = /'|\*|\?|\/|\\|\[|\]/;
823
788
  // Cells
824
789
  const FORMULA_REF_IDENTIFIER = "|";
825
- // Components
826
- var ComponentsImportance;
827
- (function (ComponentsImportance) {
828
- ComponentsImportance[ComponentsImportance["Grid"] = 0] = "Grid";
829
- ComponentsImportance[ComponentsImportance["Highlight"] = 5] = "Highlight";
830
- ComponentsImportance[ComponentsImportance["HeaderGroupingButton"] = 6] = "HeaderGroupingButton";
831
- ComponentsImportance[ComponentsImportance["Figure"] = 10] = "Figure";
832
- ComponentsImportance[ComponentsImportance["ScrollBar"] = 15] = "ScrollBar";
833
- ComponentsImportance[ComponentsImportance["GridPopover"] = 19] = "GridPopover";
834
- ComponentsImportance[ComponentsImportance["GridComposer"] = 20] = "GridComposer";
835
- ComponentsImportance[ComponentsImportance["IconPicker"] = 25] = "IconPicker";
836
- ComponentsImportance[ComponentsImportance["TopBarComposer"] = 30] = "TopBarComposer";
837
- ComponentsImportance[ComponentsImportance["Popover"] = 35] = "Popover";
838
- ComponentsImportance[ComponentsImportance["FigureAnchor"] = 1000] = "FigureAnchor";
839
- ComponentsImportance[ComponentsImportance["FigureSnapLine"] = 1001] = "FigureSnapLine";
840
- ComponentsImportance[ComponentsImportance["FigureTooltip"] = 1002] = "FigureTooltip";
841
- })(ComponentsImportance || (ComponentsImportance = {}));
842
790
  let DEFAULT_SHEETVIEW_SIZE = 0;
843
791
  function getDefaultSheetViewSize() {
844
792
  return DEFAULT_SHEETVIEW_SIZE;
@@ -1368,8 +1316,19 @@
1368
1316
  },
1369
1317
  }[funcName];
1370
1318
  }
1319
+ /**
1320
+ * Removes the specified indexes from the array.
1321
+ * Sparse (empty) elements are transformed to undefined (unless their index is explicitly removed).
1322
+ */
1371
1323
  function removeIndexesFromArray(array, indexes) {
1372
- return array.filter((_, index) => !indexes.includes(index));
1324
+ const toRemove = new Set(indexes);
1325
+ const newArray = [];
1326
+ for (let i = 0; i < array.length; i++) {
1327
+ if (!toRemove.has(i)) {
1328
+ newArray.push(array[i]);
1329
+ }
1330
+ }
1331
+ return newArray;
1373
1332
  }
1374
1333
  function insertItemsAtIndex(array, items, index) {
1375
1334
  const newArray = [...array];
@@ -10665,153 +10624,6 @@ stores.inject(MyMetaStore, storeInstance);
10665
10624
  }
10666
10625
  }
10667
10626
 
10668
- /**
10669
- * This file is largely inspired by owl 1.
10670
- * `css` tag has been removed from owl 2 without workaround to manage css.
10671
- * So, the solution was to import the behavior of owl 1 directly in our
10672
- * codebase, with one difference: the css is added to the sheet as soon as the
10673
- * css tag is executed. In owl 1, the css was added as soon as a Component was
10674
- * created for the first time.
10675
- */
10676
- const STYLESHEETS = {};
10677
- let nextId = 0;
10678
- /**
10679
- * CSS tag helper for defining inline stylesheets. With this, one can simply define
10680
- * an inline stylesheet with just the following code:
10681
- * ```js
10682
- * css`.component-a { color: red; }`;
10683
- * ```
10684
- */
10685
- function css(strings, ...args) {
10686
- const name = `__sheet__${nextId++}`;
10687
- const value = String.raw(strings, ...args);
10688
- registerSheet(name, value);
10689
- activateSheet(name);
10690
- return name;
10691
- }
10692
- function processSheet(str) {
10693
- const tokens = str.split(/(\{|\}|;)/).map((s) => s.trim());
10694
- const selectorStack = [];
10695
- const parts = [];
10696
- let rules = [];
10697
- function generateSelector(stackIndex, parentSelector) {
10698
- const parts = [];
10699
- for (const selector of selectorStack[stackIndex]) {
10700
- let part = (parentSelector && parentSelector + " " + selector) || selector;
10701
- if (part.includes("&")) {
10702
- part = selector.replace(/&/g, parentSelector || "");
10703
- }
10704
- if (stackIndex < selectorStack.length - 1) {
10705
- part = generateSelector(stackIndex + 1, part);
10706
- }
10707
- parts.push(part);
10708
- }
10709
- return parts.join(", ");
10710
- }
10711
- function generateRules() {
10712
- if (rules.length) {
10713
- parts.push(generateSelector(0) + " {");
10714
- parts.push(...rules);
10715
- parts.push("}");
10716
- rules = [];
10717
- }
10718
- }
10719
- while (tokens.length) {
10720
- const token = tokens.shift();
10721
- if (token === "}") {
10722
- generateRules();
10723
- selectorStack.pop();
10724
- }
10725
- else {
10726
- if (tokens[0] === "{") {
10727
- generateRules();
10728
- selectorStack.push(token.split(/\s*,\s*/));
10729
- tokens.shift();
10730
- }
10731
- if (tokens[0] === ";") {
10732
- rules.push(" " + token + ";");
10733
- }
10734
- }
10735
- }
10736
- return parts.join("\n");
10737
- }
10738
- function registerSheet(id, css) {
10739
- const sheet = document.createElement("style");
10740
- sheet.textContent = processSheet(css);
10741
- STYLESHEETS[id] = sheet;
10742
- }
10743
- function activateSheet(id) {
10744
- const sheet = STYLESHEETS[id];
10745
- sheet.setAttribute("component", id);
10746
- document.head.appendChild(sheet);
10747
- }
10748
- function getTextDecoration({ strikethrough, underline, }) {
10749
- if (!strikethrough && !underline) {
10750
- return "none";
10751
- }
10752
- return `${strikethrough ? "line-through" : ""} ${underline ? "underline" : ""}`;
10753
- }
10754
- /**
10755
- * Convert the cell style to CSS properties.
10756
- */
10757
- function cellStyleToCss(style) {
10758
- const attributes = cellTextStyleToCss(style);
10759
- if (!style)
10760
- return attributes;
10761
- if (style.fillColor) {
10762
- attributes["background"] = style.fillColor;
10763
- }
10764
- return attributes;
10765
- }
10766
- /**
10767
- * Convert the cell text style to CSS properties.
10768
- */
10769
- function cellTextStyleToCss(style) {
10770
- const attributes = {};
10771
- if (!style)
10772
- return attributes;
10773
- if (style.bold) {
10774
- attributes["font-weight"] = "bold";
10775
- }
10776
- if (style.italic) {
10777
- attributes["font-style"] = "italic";
10778
- }
10779
- if (style.fontSize) {
10780
- attributes["font-size"] = `${style.fontSize}px`;
10781
- }
10782
- if (style.strikethrough || style.underline) {
10783
- let decoration = style.strikethrough ? "line-through" : "";
10784
- decoration = style.underline ? decoration + " underline" : decoration;
10785
- attributes["text-decoration"] = decoration;
10786
- }
10787
- if (style.textColor) {
10788
- attributes["color"] = style.textColor;
10789
- }
10790
- return attributes;
10791
- }
10792
- /**
10793
- * Transform CSS properties into a CSS string.
10794
- */
10795
- function cssPropertiesToCss(attributes) {
10796
- let styleStr = "";
10797
- for (const attName in attributes) {
10798
- if (!attributes[attName]) {
10799
- continue;
10800
- }
10801
- styleStr += `${attName}:${attributes[attName]}; `;
10802
- }
10803
- return styleStr;
10804
- }
10805
- function getElementMargins(el) {
10806
- const style = window.getComputedStyle(el);
10807
- return {
10808
- top: parseInt(style.marginTop, 10) || 0,
10809
- bottom: parseInt(style.marginBottom, 10) || 0,
10810
- left: parseInt(style.marginLeft, 10) || 0,
10811
- right: parseInt(style.marginRight, 10) || 0,
10812
- };
10813
- }
10814
-
10815
10627
  const chartJsExtensionRegistry = new Registry();
10816
10628
  function areChartJSExtensionsLoaded() {
10817
10629
  return !!window.Chart.registry.plugins.get("chartShowValuesPlugin");
@@ -16084,8 +15896,9 @@ stores.inject(MyMetaStore, storeInstance);
16084
15896
  }
16085
15897
 
16086
15898
  function sortMatrix(matrix, locale, ...criteria) {
16087
- for (const [i, value] of criteria.entries()) {
16088
- assert(value !== undefined, _t("Value for parameter %d is missing, while the function [[FUNCTION_NAME]] expect a number or a range.", i + 1));
15899
+ for (let i = 0; i < criteria.length; i++) {
15900
+ const param = i % 2 === 0 ? "sort_column" : "is_ascending";
15901
+ assert(criteria[i] !== undefined, _t("Value for parameter %s is missing in [[FUNCTION_NAME]].", param));
16089
15902
  }
16090
15903
  const sortingOrders = [];
16091
15904
  const sortColumns = [];
@@ -24033,15 +23846,6 @@ stores.inject(MyMetaStore, storeInstance);
24033
23846
  return bars.find((bar, i) => i > startIndex && bar.height !== 0);
24034
23847
  }
24035
23848
 
24036
- css /* scss */ `
24037
- .o-spreadsheet {
24038
- .o-chart-custom-tooltip {
24039
- font-size: 12px;
24040
- background-color: #fff;
24041
- z-index: ${ComponentsImportance.FigureTooltip};
24042
- }
24043
- }
24044
- `;
24045
23849
  chartJsExtensionRegistry.add("chartShowValuesPlugin", {
24046
23850
  register: (Chart) => Chart.register(chartShowValuesPlugin),
24047
23851
  unregister: (Chart) => Chart.unregister(chartShowValuesPlugin),
@@ -26760,7 +26564,7 @@ stores.inject(MyMetaStore, storeInstance);
26760
26564
  },
26761
26565
  pointLabels: {
26762
26566
  color: chartFontColor(definition.background),
26763
- callback: truncateLabel,
26567
+ callback: (label) => truncateLabel(label),
26764
26568
  },
26765
26569
  suggestedMin: minValue < 0 ? minValue - 1 : 0,
26766
26570
  },
@@ -27781,13 +27585,6 @@ stores.inject(MyMetaStore, storeInstance);
27781
27585
  },
27782
27586
  };
27783
27587
 
27784
- css /* scss */ `
27785
- .o-spreadsheet {
27786
- .o-master-chart-container {
27787
- height: ${MASTER_CHART_HEIGHT}px;
27788
- }
27789
- }
27790
- `;
27791
27588
  chartJsExtensionRegistry.add("zoomWindowPlugin", {
27792
27589
  register: (Chart) => Chart.register(zoomWindowPlugin),
27793
27590
  unregister: (Chart) => Chart.unregister(zoomWindowPlugin),
@@ -31598,6 +31395,81 @@ stores.inject(MyMetaStore, storeInstance);
31598
31395
  return matchedChart.displayName;
31599
31396
  }
31600
31397
 
31398
+ /**
31399
+ * This file is largely inspired by owl 1.
31400
+ * `css` tag has been removed from owl 2 without workaround to manage css.
31401
+ * So, the solution was to import the behavior of owl 1 directly in our
31402
+ * codebase, with one difference: the css is added to the sheet as soon as the
31403
+ * css tag is executed. In owl 1, the css was added as soon as a Component was
31404
+ * created for the first time.
31405
+ */
31406
+ function getTextDecoration({ strikethrough, underline, }) {
31407
+ if (!strikethrough && !underline) {
31408
+ return "none";
31409
+ }
31410
+ return `${strikethrough ? "line-through" : ""} ${underline ? "underline" : ""}`;
31411
+ }
31412
+ /**
31413
+ * Convert the cell style to CSS properties.
31414
+ */
31415
+ function cellStyleToCss(style) {
31416
+ const attributes = cellTextStyleToCss(style);
31417
+ if (!style)
31418
+ return attributes;
31419
+ if (style.fillColor) {
31420
+ attributes["background"] = style.fillColor;
31421
+ }
31422
+ return attributes;
31423
+ }
31424
+ /**
31425
+ * Convert the cell text style to CSS properties.
31426
+ */
31427
+ function cellTextStyleToCss(style) {
31428
+ const attributes = {};
31429
+ if (!style)
31430
+ return attributes;
31431
+ if (style.bold) {
31432
+ attributes["font-weight"] = "bold";
31433
+ }
31434
+ if (style.italic) {
31435
+ attributes["font-style"] = "italic";
31436
+ }
31437
+ if (style.fontSize) {
31438
+ attributes["font-size"] = `${style.fontSize}px`;
31439
+ }
31440
+ if (style.strikethrough || style.underline) {
31441
+ let decoration = style.strikethrough ? "line-through" : "";
31442
+ decoration = style.underline ? decoration + " underline" : decoration;
31443
+ attributes["text-decoration"] = decoration;
31444
+ }
31445
+ if (style.textColor) {
31446
+ attributes["color"] = style.textColor;
31447
+ }
31448
+ return attributes;
31449
+ }
31450
+ /**
31451
+ * Transform CSS properties into a CSS string.
31452
+ */
31453
+ function cssPropertiesToCss(attributes) {
31454
+ let styleStr = "";
31455
+ for (const attName in attributes) {
31456
+ if (!attributes[attName]) {
31457
+ continue;
31458
+ }
31459
+ styleStr += `${attName}:${attributes[attName]}; `;
31460
+ }
31461
+ return styleStr;
31462
+ }
31463
+ function getElementMargins(el) {
31464
+ const style = window.getComputedStyle(el);
31465
+ return {
31466
+ top: parseInt(style.marginTop, 10) || 0,
31467
+ bottom: parseInt(style.marginBottom, 10) || 0,
31468
+ left: parseInt(style.marginLeft, 10) || 0,
31469
+ right: parseInt(style.marginRight, 10) || 0,
31470
+ };
31471
+ }
31472
+
31601
31473
  /**
31602
31474
  * Repeatedly calls a callback function with a time delay between calls.
31603
31475
  */
@@ -31652,59 +31524,6 @@ stores.inject(MyMetaStore, storeInstance);
31652
31524
  };
31653
31525
  }
31654
31526
 
31655
- //------------------------------------------------------------------------------
31656
- // Context Menu Component
31657
- //------------------------------------------------------------------------------
31658
- css /* scss */ `
31659
- .o-menu {
31660
- background-color: white;
31661
- user-select: none;
31662
-
31663
- .o-menu-item {
31664
- height: ${DESKTOP_MENU_ITEM_HEIGHT}px;
31665
- padding: ${MENU_ITEM_PADDING_VERTICAL}px ${MENU_ITEM_PADDING_HORIZONTAL}px;
31666
- cursor: pointer;
31667
- user-select: none;
31668
-
31669
- .o-menu-item-name {
31670
- min-width: 40%;
31671
- }
31672
-
31673
- .o-menu-item-icon {
31674
- display: inline-block;
31675
- margin: 0px 8px 0px 0px;
31676
- width: ${DESKTOP_MENU_ITEM_HEIGHT - 2 * MENU_ITEM_PADDING_VERTICAL}px;
31677
- line-height: ${DESKTOP_MENU_ITEM_HEIGHT - 2 * MENU_ITEM_PADDING_VERTICAL}px;
31678
- }
31679
-
31680
- &:not(.disabled) {
31681
- &:hover,
31682
- &.o-menu-item-active {
31683
- background-color: ${BUTTON_ACTIVE_BG};
31684
- color: ${BUTTON_ACTIVE_TEXT_COLOR};
31685
- }
31686
- .o-menu-item-description {
31687
- color: grey;
31688
- }
31689
- .o-menu-item-icon {
31690
- .o-icon {
31691
- color: ${ICONS_COLOR};
31692
- }
31693
- }
31694
- }
31695
- &.disabled {
31696
- color: ${DISABLED_TEXT_COLOR};
31697
- cursor: not-allowed;
31698
- }
31699
- }
31700
- }
31701
-
31702
- .o-spreadsheet-mobile {
31703
- .o-menu-item {
31704
- height: ${MOBILE_MENU_ITEM_HEIGHT}px;
31705
- }
31706
- }
31707
- `;
31708
31527
  class Menu extends owl.Component {
31709
31528
  static template = "o-spreadsheet-Menu";
31710
31529
  static props = {
@@ -31881,16 +31700,6 @@ stores.inject(MyMetaStore, storeInstance);
31881
31700
  return container;
31882
31701
  }
31883
31702
 
31884
- css /* scss */ `
31885
- .o-popover {
31886
- position: absolute;
31887
- z-index: ${ComponentsImportance.Popover};
31888
- overflow: auto;
31889
- box-shadow: 1px 2px 5px 2px rgb(51 51 51 / 15%);
31890
- width: fit-content;
31891
- height: fit-content;
31892
- }
31893
- `;
31894
31703
  class Popover extends owl.Component {
31895
31704
  static template = "o-spreadsheet-Popover";
31896
31705
  static props = {
@@ -31913,7 +31722,6 @@ stores.inject(MyMetaStore, storeInstance);
31913
31722
  onMouseWheel: () => { },
31914
31723
  onPopoverMoved: () => { },
31915
31724
  onPopoverHidden: () => { },
31916
- zIndex: ComponentsImportance.Popover,
31917
31725
  };
31918
31726
  popoverRef = owl.useRef("popover");
31919
31727
  popoverContentRef = owl.useRef("popoverContent");
@@ -31934,11 +31742,6 @@ stores.inject(MyMetaStore, storeInstance);
31934
31742
  // the element in rendered, so we can still set its position
31935
31743
  owl.useEffect(this.computePopoverPosition.bind(this));
31936
31744
  }
31937
- get popoverStyle() {
31938
- return cssPropertiesToCss({
31939
- "z-index": `${this.props.zIndex}`,
31940
- });
31941
- }
31942
31745
  computePopoverPosition() {
31943
31746
  if (!this.containerRect)
31944
31747
  throw new Error("Popover container is not defined");
@@ -32129,12 +31932,6 @@ stores.inject(MyMetaStore, storeInstance);
32129
31932
  //------------------------------------------------------------------------------
32130
31933
  // Context MenuPopover Component
32131
31934
  //------------------------------------------------------------------------------
32132
- css /* scss */ `
32133
- .o-menu-wrapper {
32134
- padding: ${MENU_VERTICAL_PADDING}px 0px;
32135
- background-color: white;
32136
- }
32137
- `;
32138
31935
  const TIMEOUT_DELAY = 250;
32139
31936
  class MenuPopover extends owl.Component {
32140
31937
  static template = "o-spreadsheet-Menu-Popover";
@@ -32439,13 +32236,13 @@ stores.inject(MyMetaStore, storeInstance);
32439
32236
  }
32440
32237
  get headerStyle() {
32441
32238
  const cssProperties = {};
32442
- if (this.selectedCarouselItem?.type === "carouselDataView") {
32443
- cssProperties["background-color"] = "#ffffff";
32444
- }
32445
- else if (this.selectedCarouselItem?.type === "chart") {
32239
+ if (this.selectedCarouselItem?.type === "chart") {
32446
32240
  const chart = this.env.model.getters.getChartRuntime(this.selectedCarouselItem.chartId);
32447
32241
  cssProperties["background-color"] = chart.background;
32448
32242
  }
32243
+ else {
32244
+ cssProperties["background-color"] = "#ffffff";
32245
+ }
32449
32246
  return cssPropertiesToCss(cssProperties);
32450
32247
  }
32451
32248
  get title() {
@@ -32575,79 +32372,6 @@ stores.inject(MyMetaStore, storeInstance);
32575
32372
  const ANCHOR_SIZE = 8;
32576
32373
  const BORDER_WIDTH = 1;
32577
32374
  const ACTIVE_BORDER_WIDTH = 2;
32578
- css /*SCSS*/ `
32579
- div.o-figure {
32580
- position: absolute;
32581
- width: 100%;
32582
- height: 100%;
32583
- user-select: none;
32584
-
32585
- &:focus {
32586
- outline: none;
32587
- }
32588
- }
32589
-
32590
- div.o-figure-border {
32591
- z-index: 1;
32592
- }
32593
-
32594
- .o-figure-wrapper {
32595
- position: absolute;
32596
- box-sizing: content-box;
32597
- pointer-events: auto;
32598
-
32599
- .o-fig-anchor {
32600
- z-index: ${ComponentsImportance.FigureAnchor};
32601
- position: absolute;
32602
- width: ${ANCHOR_SIZE}px;
32603
- height: ${ANCHOR_SIZE}px;
32604
- background-color: #1a73e8;
32605
- outline: ${BORDER_WIDTH}px solid white;
32606
-
32607
- &.o-top {
32608
- cursor: n-resize;
32609
- }
32610
- &.o-topRight {
32611
- cursor: ne-resize;
32612
- }
32613
- &.o-right {
32614
- cursor: e-resize;
32615
- }
32616
- &.o-bottomRight {
32617
- cursor: se-resize;
32618
- }
32619
- &.o-bottom {
32620
- cursor: s-resize;
32621
- }
32622
- &.o-bottomLeft {
32623
- cursor: sw-resize;
32624
- }
32625
- &.o-left {
32626
- cursor: w-resize;
32627
- }
32628
- &.o-topLeft {
32629
- cursor: nw-resize;
32630
- }
32631
- }
32632
-
32633
- .o-figure-menu {
32634
- right: 0px;
32635
- top: 0px;
32636
- display: none;
32637
- }
32638
-
32639
- .o-figure-menu-item {
32640
- cursor: pointer;
32641
- }
32642
-
32643
- .o-figure.active:focus,
32644
- .o-figure:hover {
32645
- .o-figure-menu {
32646
- display: flex;
32647
- }
32648
- }
32649
- }
32650
- `;
32651
32375
  class FigureComponent extends owl.Component {
32652
32376
  static template = "o-spreadsheet-FigureComponent";
32653
32377
  static props = {
@@ -32692,7 +32416,6 @@ stores.inject(MyMetaStore, storeInstance);
32692
32416
  top: `${y}px`,
32693
32417
  width: `${width}px`,
32694
32418
  height: `${height}px`,
32695
- "z-index": String(ComponentsImportance.Figure + (this.isSelected ? 1 : 0)),
32696
32419
  });
32697
32420
  }
32698
32421
  getResizerPosition(resizer) {
@@ -32971,21 +32694,6 @@ stores.inject(MyMetaStore, storeInstance);
32971
32694
  }
32972
32695
 
32973
32696
  const ERROR_TOOLTIP_MAX_HEIGHT = 80;
32974
- const ERROR_TOOLTIP_WIDTH = 180;
32975
- css /* scss */ `
32976
- .o-error-tooltip {
32977
- font-size: 13px;
32978
- background-color: white;
32979
- border-left: 3px solid red;
32980
- padding: 10px;
32981
- width: ${ERROR_TOOLTIP_WIDTH}px;
32982
- overflow-wrap: break-word;
32983
-
32984
- .o-error-tooltip-message {
32985
- overflow: hidden;
32986
- }
32987
- }
32988
- `;
32989
32697
  class ErrorToolTip extends owl.Component {
32990
32698
  static maxSize = { maxHeight: ERROR_TOOLTIP_MAX_HEIGHT };
32991
32699
  static template = "o-spreadsheet-ErrorToolTip";
@@ -33086,34 +32794,6 @@ stores.inject(MyMetaStore, storeInstance);
33086
32794
  }
33087
32795
  }
33088
32796
 
33089
- css /* scss */ `
33090
- .o_side_panel_collapsible_title {
33091
- font-size: 16px;
33092
- cursor: pointer;
33093
- padding: 6px 0px 6px 6px !important;
33094
-
33095
- .collapsor-arrow {
33096
- transform: rotate(-90deg);
33097
- display: inline-block;
33098
- transform-origin: 8px 11px;
33099
- transition: transform 0.2s ease-in-out;
33100
-
33101
- .o-icon {
33102
- width: 16px;
33103
- height: 22px;
33104
- }
33105
- }
33106
- .collapsor:not(.collapsed) .collapsor-arrow {
33107
- transform: rotate(0);
33108
- }
33109
-
33110
- .collapsor {
33111
- width: 100%;
33112
- transition-delay: 0.35s;
33113
- transition-property: all;
33114
- }
33115
- }
33116
- `;
33117
32797
  class SidePanelCollapsible extends owl.Component {
33118
32798
  static template = "o-spreadsheet-SidePanelCollapsible";
33119
32799
  static props = {
@@ -33750,27 +33430,6 @@ stores.inject(MyMetaStore, storeInstance);
33750
33430
  }
33751
33431
  }
33752
33432
 
33753
- css /* scss */ `
33754
- .o-autocomplete-dropdown {
33755
- pointer-events: auto;
33756
- cursor: pointer;
33757
- background-color: #fff;
33758
- max-width: 400px;
33759
- z-index: 1;
33760
-
33761
- .o-autocomplete-value-focus {
33762
- background-color: #f2f2f2;
33763
- }
33764
-
33765
- & > div {
33766
- padding: 1px 5px 5px 5px;
33767
- .o-autocomplete-description {
33768
- padding-left: 5px;
33769
- font-size: 11px;
33770
- }
33771
- }
33772
- }
33773
- `;
33774
33433
  class TextValueProvider extends owl.Component {
33775
33434
  static template = "o-spreadsheet-TextValueProvider";
33776
33435
  static props = {
@@ -34072,36 +33731,6 @@ stores.inject(MyMetaStore, storeInstance);
34072
33731
  }
34073
33732
 
34074
33733
  const BUBBLE_ARROW_SIZE = 7;
34075
- css /* scss */ `
34076
- .o-spreadsheet {
34077
- .o-speech-bubble {
34078
- background-color: white;
34079
- box-sizing: border-box;
34080
- box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
34081
- border: 1px solid #ccc;
34082
- z-index: ${ComponentsImportance.Popover};
34083
-
34084
- &::after {
34085
- content: "";
34086
- position: absolute;
34087
- top: 100%;
34088
- left: 50%;
34089
- background-color: white;
34090
- height: ${BUBBLE_ARROW_SIZE}px;
34091
- width: ${BUBBLE_ARROW_SIZE}px;
34092
- transform-origin: top left;
34093
- transform: translate(0, -67%) rotate(45deg);
34094
- border-right: 1px solid #ccc;
34095
- border-bottom: 1px solid #ccc;
34096
- box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
34097
- }
34098
- }
34099
-
34100
- .o-speech-content {
34101
- max-width: 300px;
34102
- }
34103
- }
34104
- `;
34105
33734
  class SpeechBubble extends owl.Component {
34106
33735
  static template = "o-spreadsheet-SpeechBubble";
34107
33736
  static props = { content: String, anchorRect: Object };
@@ -34130,85 +33759,6 @@ stores.inject(MyMetaStore, storeInstance);
34130
33759
  const selectionIndicatorClass = "selector-flag";
34131
33760
  const highlightParenthesisClass = "highlight-parenthesis-flag";
34132
33761
  const highlightClass = "highlight-flag";
34133
- const selectionIndicatorColor = "#a9a9a9";
34134
- const selectionIndicator = "␣";
34135
- css /* scss */ `
34136
- .o-composer-container {
34137
- .o-composer {
34138
- overflow-y: auto;
34139
- overflow-x: hidden;
34140
- word-break: break-all;
34141
- padding-right: 2px;
34142
-
34143
- caret-color: black;
34144
- padding-left: 3px;
34145
- padding-right: 3px;
34146
- outline: none;
34147
-
34148
- tab-size: 4;
34149
-
34150
- p {
34151
- margin-bottom: 0px;
34152
-
34153
- span {
34154
- white-space: pre-wrap;
34155
- /* On some browsers (chromium ?) it is somehow possible to hover two of the composer's spans at the same time, leading to
34156
- * flickering with a succession of onmouseenter/onmouseleave events. A small invisible padding seems to prevent the issue.*/
34157
- padding-left: 0.01px;
34158
-
34159
- &.${selectionIndicatorClass}:after {
34160
- content: "${selectionIndicator}";
34161
- color: ${selectionIndicatorColor};
34162
- }
34163
-
34164
- &.${highlightParenthesisClass}:not(.${highlightClass}) {
34165
- border-radius: 5px;
34166
- background-color: lightgray;
34167
- padding: 1.5px 0px 1.5px 0px;
34168
- }
34169
-
34170
- &.${highlightClass} {
34171
- background-color: #e6edf3;
34172
- }
34173
- }
34174
- }
34175
- }
34176
- .o-composer[placeholder]:empty:not(:focus):not(.active)::before {
34177
- content: attr(placeholder);
34178
- color: #bdbdbd;
34179
- position: relative;
34180
- top: 0%;
34181
- pointer-events: none;
34182
- }
34183
-
34184
- .fa-stack {
34185
- /* reset stack size which is doubled by default */
34186
- width: ${CLOSE_ICON_RADIUS * 2}px;
34187
- height: ${CLOSE_ICON_RADIUS * 2}px;
34188
- line-height: ${CLOSE_ICON_RADIUS * 2}px;
34189
- }
34190
-
34191
- .force-open-assistant {
34192
- left: -1px;
34193
- top: -1px;
34194
-
34195
- .fa-question-circle {
34196
- color: ${PRIMARY_BUTTON_BG};
34197
- }
34198
- }
34199
-
34200
- .o-composer-assistant {
34201
- margin-top: 1px;
34202
-
34203
- .o-semi-bold {
34204
- /* FIXME: to remove in favor of Bootstrap
34205
- * 'fw-semibold' when we upgrade to Bootstrap 5.2
34206
- */
34207
- font-weight: 600 !important;
34208
- }
34209
- }
34210
- }
34211
- `;
34212
33762
  class Composer extends owl.Component {
34213
33763
  static template = "o-spreadsheet-Composer";
34214
33764
  static props = {
@@ -35881,30 +35431,6 @@ stores.inject(MyMetaStore, storeInstance);
35881
35431
  }
35882
35432
  }
35883
35433
 
35884
- css /* scss */ `
35885
- .o-spreadsheet {
35886
- .o-standalone-composer {
35887
- min-height: 24px;
35888
-
35889
- border-bottom: 1px solid;
35890
- border-color: ${GRAY_300};
35891
-
35892
- &.active {
35893
- border-color: ${ACTION_COLOR};
35894
- }
35895
-
35896
- &.o-invalid {
35897
- border-bottom: 2px solid red;
35898
- }
35899
-
35900
- /* As the standalone composer is potentially very small (eg. in a side panel), we remove the scrollbar display */
35901
- scrollbar-width: none; /* Firefox */
35902
- &::-webkit-scrollbar {
35903
- display: none;
35904
- }
35905
- }
35906
- }
35907
- `;
35908
35434
  class StandaloneComposer extends owl.Component {
35909
35435
  static template = "o-spreadsheet-StandaloneComposer";
35910
35436
  static props = {
@@ -35972,17 +35498,6 @@ stores.inject(MyMetaStore, storeInstance);
35972
35498
  }
35973
35499
  }
35974
35500
 
35975
- css /* scss */ `
35976
- .o-dv-input {
35977
- &.o-invalid {
35978
- background-color: #ffdddd;
35979
- }
35980
- .error-icon {
35981
- right: 7px;
35982
- top: 7px;
35983
- }
35984
- }
35985
- `;
35986
35501
  class CriterionInput extends owl.Component {
35987
35502
  static template = "o-spreadsheet-CriterionInput";
35988
35503
  static props = {
@@ -36150,8 +35665,6 @@ stores.inject(MyMetaStore, storeInstance);
36150
35665
  return removeListeners;
36151
35666
  }
36152
35667
 
36153
- const LINE_VERTICAL_PADDING = 1;
36154
- const PICKER_PADDING = 8;
36155
35668
  const ITEM_BORDER_WIDTH = 1;
36156
35669
  const ITEM_EDGE_LENGTH = 18;
36157
35670
  const ITEMS_PER_LINE = 10;
@@ -36160,170 +35673,6 @@ stores.inject(MyMetaStore, storeInstance);
36160
35673
  const CONTENT_WIDTH = ITEMS_PER_LINE * (ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH) + (ITEMS_PER_LINE - 1) * ITEM_GAP;
36161
35674
  const INNER_GRADIENT_WIDTH = CONTENT_WIDTH - 2 * ITEM_BORDER_WIDTH;
36162
35675
  const INNER_GRADIENT_HEIGHT = CONTENT_WIDTH - 30 - 2 * ITEM_BORDER_WIDTH;
36163
- const CONTAINER_WIDTH = CONTENT_WIDTH + 2 * PICKER_PADDING;
36164
- css /* scss */ `
36165
- .o-color-picker {
36166
- padding: ${PICKER_PADDING}px 0;
36167
- /* FIXME: this is useless, overiden by the popover container */
36168
- box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15);
36169
- background-color: white;
36170
- line-height: 1.2;
36171
- overflow-y: auto;
36172
- overflow-x: hidden;
36173
- width: ${CONTAINER_WIDTH}px;
36174
-
36175
- .o-color-picker-section-name {
36176
- margin: 0px ${ITEM_BORDER_WIDTH}px;
36177
- padding: 4px ${PICKER_PADDING}px;
36178
- }
36179
- .colors-grid {
36180
- display: grid;
36181
- padding: ${LINE_VERTICAL_PADDING}px ${PICKER_PADDING}px;
36182
- grid-template-columns: repeat(${ITEMS_PER_LINE}, 1fr);
36183
- grid-gap: ${ITEM_GAP}px;
36184
- }
36185
- .o-color-picker-toggler-button {
36186
- display: flex;
36187
- .o-color-picker-toggler-sign {
36188
- display: flex;
36189
- margin: auto auto;
36190
- width: 55%;
36191
- height: 55%;
36192
- .o-icon {
36193
- width: 100%;
36194
- height: 100%;
36195
- }
36196
- }
36197
- }
36198
- .o-color-picker-line-item {
36199
- width: ${ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH}px;
36200
- height: ${ITEM_EDGE_LENGTH + 2 * ITEM_BORDER_WIDTH}px;
36201
- margin: 0px;
36202
- border-radius: 50px;
36203
- border: ${ITEM_BORDER_WIDTH}px solid #666666;
36204
- padding: 0px;
36205
- font-size: 16px;
36206
- background: white;
36207
- &:hover {
36208
- background-color: rgba(0, 0, 0, 0.08);
36209
- outline: 1px solid gray;
36210
- cursor: pointer;
36211
- }
36212
- }
36213
- .o-buttons {
36214
- padding: ${PICKER_PADDING}px;
36215
- display: flex;
36216
- .o-cancel {
36217
- border: ${ITEM_BORDER_WIDTH}px solid #c0c0c0;
36218
- width: 100%;
36219
- padding: 5px;
36220
- font-size: 14px;
36221
- background: white;
36222
- border-radius: 4px;
36223
- &:hover:enabled {
36224
- background-color: rgba(0, 0, 0, 0.08);
36225
- }
36226
- }
36227
- }
36228
- .o-add-button {
36229
- border: ${ITEM_BORDER_WIDTH}px solid #c0c0c0;
36230
- padding: 4px;
36231
- background: white;
36232
- border-radius: 4px;
36233
- &:hover:enabled {
36234
- background-color: rgba(0, 0, 0, 0.08);
36235
- }
36236
- }
36237
- .o-separator {
36238
- border-bottom: ${MENU_SEPARATOR_BORDER_WIDTH}px solid ${SEPARATOR_COLOR};
36239
- margin-top: ${MENU_SEPARATOR_PADDING}px;
36240
- margin-bottom: ${MENU_SEPARATOR_PADDING}px;
36241
- }
36242
-
36243
- .o-custom-selector {
36244
- padding: ${PICKER_PADDING + 2}px ${PICKER_PADDING}px;
36245
- position: relative;
36246
- .o-gradient {
36247
- margin-bottom: ${MAGNIFIER_EDGE / 2}px;
36248
- border: ${ITEM_BORDER_WIDTH}px solid #c0c0c0;
36249
- width: ${INNER_GRADIENT_WIDTH + 2 * ITEM_BORDER_WIDTH}px;
36250
- height: ${INNER_GRADIENT_HEIGHT + 2 * ITEM_BORDER_WIDTH}px;
36251
- position: relative;
36252
- }
36253
-
36254
- .magnifier {
36255
- height: ${MAGNIFIER_EDGE}px;
36256
- width: ${MAGNIFIER_EDGE}px;
36257
- border-radius: 50%;
36258
- border: 2px solid #fff;
36259
- box-shadow: 0px 0px 3px #c0c0c0;
36260
- position: absolute;
36261
- z-index: 2;
36262
- }
36263
- .saturation {
36264
- background: linear-gradient(to right, #fff 0%, transparent 100%);
36265
- }
36266
- .lightness {
36267
- background: linear-gradient(to top, #000 0%, transparent 100%);
36268
- }
36269
- .o-hue-picker {
36270
- border: ${ITEM_BORDER_WIDTH}px solid #c0c0c0;
36271
- width: 100%;
36272
- height: 12px;
36273
- border-radius: 4px;
36274
- background: linear-gradient(
36275
- to right,
36276
- hsl(0 100% 50%) 0%,
36277
- hsl(0.2turn 100% 50%) 20%,
36278
- hsl(0.3turn 100% 50%) 30%,
36279
- hsl(0.4turn 100% 50%) 40%,
36280
- hsl(0.5turn 100% 50%) 50%,
36281
- hsl(0.6turn 100% 50%) 60%,
36282
- hsl(0.7turn 100% 50%) 70%,
36283
- hsl(0.8turn 100% 50%) 80%,
36284
- hsl(0.9turn 100% 50%) 90%,
36285
- hsl(1turn 100% 50%) 100%
36286
- );
36287
- position: relative;
36288
- cursor: crosshair;
36289
- }
36290
- .o-hue-slider {
36291
- margin-top: -3px;
36292
- }
36293
- .o-custom-input-preview {
36294
- padding: 2px 0px;
36295
- display: flex;
36296
- input {
36297
- width: 50%;
36298
- border-radius: 4px;
36299
- padding: 4px 23px 4px 10px;
36300
- height: 24px;
36301
- border: 1px solid #c0c0c0;
36302
- margin-right: 2px;
36303
- }
36304
- .o-wrong-color {
36305
- /* FIXME bootstrap class instead? */
36306
- outline-color: red;
36307
- border-color: red;
36308
- &:focus {
36309
- outline-style: solid;
36310
- outline-width: 1px;
36311
- }
36312
- }
36313
- }
36314
- .o-custom-input-buttons {
36315
- padding: 2px 0px;
36316
- display: flex;
36317
- justify-content: end;
36318
- }
36319
- .o-color-preview {
36320
- border: 1px solid #c0c0c0;
36321
- border-radius: 4px;
36322
- width: 50%;
36323
- }
36324
- }
36325
- }
36326
- `;
36327
35676
  class ColorPicker extends owl.Component {
36328
35677
  static template = "o-spreadsheet-ColorPicker";
36329
35678
  static props = {
@@ -36478,21 +35827,12 @@ stores.inject(MyMetaStore, storeInstance);
36478
35827
  };
36479
35828
  }
36480
35829
 
36481
- const TRANSPARENT_BACKGROUND_SVG = /*xml*/ `
36482
- <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
36483
- <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
36484
- </svg>
36485
- `;
36486
- css /* scss */ `
36487
- .o-round-color-picker-button {
36488
- width: 20px;
36489
- height: 20px;
36490
- cursor: pointer;
36491
- border: 1px solid ${GRAY_300};
36492
- background-position: 1px 1px;
36493
- background-image: url("data:image/svg+xml,${encodeURIComponent(TRANSPARENT_BACKGROUND_SVG)}");
36494
- }
36495
- `;
35830
+ // FIXME Encoding version used in css
35831
+ // const TRANSPARENT_BACKGROUND_SVG = /*xml*/ `
35832
+ // <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10">
35833
+ // <path fill="#d9d9d9" d="M5 5h5v5H5zH0V0h5"/>
35834
+ // </svg>
35835
+ // `;
36496
35836
  class RoundColorPicker extends owl.Component {
36497
35837
  static template = "o-spreadsheet.RoundColorPicker";
36498
35838
  static components = { Section, ColorPicker };
@@ -36529,12 +35869,6 @@ stores.inject(MyMetaStore, storeInstance);
36529
35869
  }
36530
35870
  }
36531
35871
 
36532
- css /* scss */ `
36533
- .o-dv-list-item-delete {
36534
- color: #666666;
36535
- cursor: pointer;
36536
- }
36537
- `;
36538
35872
  class ListCriterionForm extends CriterionForm {
36539
35873
  static template = "o-spreadsheet-ListCriterionForm";
36540
35874
  static components = { CriterionInput, RoundColorPicker };
@@ -37248,36 +36582,6 @@ stores.inject(MyMetaStore, storeInstance);
37248
36582
  }
37249
36583
  }
37250
36584
 
37251
- css /* scss */ `
37252
- .o-selection {
37253
- .o-selection-input {
37254
- padding: 2px 0px;
37255
-
37256
- input.o-invalid {
37257
- background-color: ${ALERT_DANGER_BG};
37258
- }
37259
- .input-icon {
37260
- right: 7px;
37261
- top: 4px;
37262
- }
37263
- .o-drag-handle {
37264
- cursor: move;
37265
- }
37266
- }
37267
- .o-disabled-ranges {
37268
- color: #888 !important;
37269
- }
37270
- .o-button {
37271
- flex-grow: 0;
37272
- }
37273
-
37274
- /* Make the character a bit bigger
37275
- compared to its neighbor INPUT box */
37276
- .o-remove-selection {
37277
- font-size: calc(100% + 4px);
37278
- }
37279
- }
37280
- `;
37281
36585
  /**
37282
36586
  * This component can be used when the user needs to input some
37283
36587
  * ranges. He can either input the ranges with the regular DOM `<input/>`
@@ -37776,44 +37080,6 @@ stores.inject(MyMetaStore, storeInstance);
37776
37080
  }
37777
37081
  }
37778
37082
 
37779
- const CHECK_SVG = /*xml*/ `
37780
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'>
37781
- <path fill='none' stroke='#FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/>
37782
- </svg>
37783
- `;
37784
- const CHECKBOX_WIDTH = 14;
37785
- css /* scss */ `
37786
- label.o-checkbox {
37787
- input {
37788
- appearance: none;
37789
- -webkit-appearance: none;
37790
- -moz-appearance: none;
37791
- border-radius: 0;
37792
- width: ${CHECKBOX_WIDTH}px;
37793
- height: ${CHECKBOX_WIDTH}px;
37794
- vertical-align: top;
37795
- outline: none;
37796
- border: 1px solid ${GRAY_300};
37797
- cursor: pointer;
37798
-
37799
- &:hover {
37800
- border-color: ${ACTION_COLOR};
37801
- }
37802
-
37803
- &:checked {
37804
- background: url("data:image/svg+xml,${encodeURIComponent(CHECK_SVG)}");
37805
- background-color: ${ACTION_COLOR};
37806
- border-color: ${ACTION_COLOR};
37807
- }
37808
-
37809
- &:focus {
37810
- outline: none;
37811
- box-shadow: 0 0 0 0.25rem rgba(113, 75, 103, 0.25);
37812
- border-color: ${ACTION_COLOR};
37813
- }
37814
- }
37815
- }
37816
- `;
37817
37083
  class Checkbox extends owl.Component {
37818
37084
  static template = "o-spreadsheet.Checkbox";
37819
37085
  static props = {
@@ -38021,60 +37287,6 @@ stores.inject(MyMetaStore, storeInstance);
38021
37287
  }
38022
37288
  }
38023
37289
 
38024
- css /* scss */ `
38025
- .o-filter-menu {
38026
- width: 245px;
38027
- padding: 8px 0;
38028
- user-select: none;
38029
-
38030
- .o-filter-menu-content {
38031
- padding: 0 16px;
38032
- }
38033
-
38034
- .o-sort-item {
38035
- padding-left: 34px;
38036
- }
38037
-
38038
- .o_side_panel_collapsible_title {
38039
- font-size: inherit;
38040
- padding: 0 0 4px 0 !important;
38041
- font-weight: 400 !important;
38042
-
38043
- .collapsor .o-icon {
38044
- opacity: 0.8;
38045
- }
38046
-
38047
- .collapsor-arrow {
38048
- transform-origin: 6px 8px;
38049
-
38050
- .o-icon {
38051
- width: 12px;
38052
- height: 16px;
38053
- }
38054
- }
38055
- }
38056
-
38057
- .o-filter-menu-item {
38058
- display: flex;
38059
- cursor: pointer;
38060
- user-select: none;
38061
- line-height: 1;
38062
-
38063
- &.selected,
38064
- &:hover {
38065
- background-color: ${BUTTON_ACTIVE_BG};
38066
- }
38067
- }
38068
-
38069
- .o-filter-menu-buttons {
38070
- margin-top: 9px;
38071
-
38072
- .o-button {
38073
- height: 26px;
38074
- }
38075
- }
38076
- }
38077
- `;
38078
37290
  class FilterMenu extends owl.Component {
38079
37291
  static template = "o-spreadsheet-FilterMenu";
38080
37292
  static props = {
@@ -38198,55 +37410,6 @@ stores.inject(MyMetaStore, storeInstance);
38198
37410
  },
38199
37411
  };
38200
37412
 
38201
- const LINK_TOOLTIP_HEIGHT = 32;
38202
- const LINK_TOOLTIP_WIDTH = 220;
38203
- css /* scss */ `
38204
- .o-link-tool {
38205
- font-size: 13px;
38206
- background-color: white;
38207
- box-shadow: 0 1px 4px 3px rgba(60, 64, 67, 0.15);
38208
- padding: 6px 12px;
38209
- border-radius: 4px;
38210
- display: flex;
38211
- justify-content: space-between;
38212
- height: ${LINK_TOOLTIP_HEIGHT}px;
38213
- width: ${LINK_TOOLTIP_WIDTH}px;
38214
-
38215
- img {
38216
- margin-right: 3px;
38217
- width: 16px;
38218
- height: 16px;
38219
- }
38220
-
38221
- a.o-link {
38222
- color: ${LINK_COLOR};
38223
- text-decoration: none;
38224
- flex-grow: 2;
38225
- white-space: nowrap;
38226
- overflow: hidden;
38227
- text-overflow: ellipsis;
38228
- }
38229
- a.o-link:hover {
38230
- text-decoration: none;
38231
- color: #001d1f;
38232
- cursor: pointer;
38233
- }
38234
- }
38235
- .o-link-icon {
38236
- float: right;
38237
- padding-left: 5px;
38238
- .o-icon {
38239
- height: 16px;
38240
- }
38241
- }
38242
- .o-link-icon .o-icon {
38243
- height: 13px;
38244
- }
38245
- .o-link-icon:hover {
38246
- cursor: pointer;
38247
- color: #000;
38248
- }
38249
- `;
38250
37413
  class LinkDisplay extends owl.Component {
38251
37414
  static template = "o-spreadsheet-LinkDisplay";
38252
37415
  static props = {
@@ -38477,54 +37640,6 @@ stores.inject(MyMetaStore, storeInstance);
38477
37640
  sequence: 10,
38478
37641
  });
38479
37642
 
38480
- const PADDING = 12;
38481
- const LINK_EDITOR_WIDTH = 340 + 2 * PADDING;
38482
- css /* scss */ `
38483
- .o-link-editor {
38484
- font-size: 13px;
38485
- background-color: white;
38486
- box-shadow: 0 1px 4px 3px rgba(60, 64, 67, 0.15);
38487
- padding: ${PADDING}px;
38488
- display: flex;
38489
- flex-direction: column;
38490
- border-radius: 4px;
38491
- width: ${LINK_EDITOR_WIDTH}px;
38492
-
38493
- .o-section {
38494
- .o-section-title {
38495
- font-weight: bold;
38496
- margin-bottom: 5px;
38497
- }
38498
- }
38499
- .o-buttons {
38500
- padding-left: 16px;
38501
- padding-top: 16px;
38502
- text-align: right;
38503
- }
38504
- input.o-input {
38505
- width: 100%;
38506
- padding: 0 23px 4px 0;
38507
- }
38508
- .o-link-url {
38509
- position: relative;
38510
- flex-grow: 1;
38511
- button {
38512
- position: absolute;
38513
- right: 0px;
38514
- top: 0px;
38515
- border: none;
38516
- height: 20px;
38517
- width: 20px;
38518
- background-color: #fff;
38519
- margin: 2px 3px 1px 0px;
38520
- padding: 0px 1px 0px 0px;
38521
- }
38522
- button:hover {
38523
- cursor: pointer;
38524
- }
38525
- }
38526
- }
38527
- `;
38528
37643
  class LinkEditor extends owl.Component {
38529
37644
  static template = "o-spreadsheet-LinkEditor";
38530
37645
  static props = {
@@ -39252,29 +38367,6 @@ stores.inject(MyMetaStore, storeInstance);
39252
38367
  };
39253
38368
  }
39254
38369
 
39255
- css /* scss */ `
39256
- .o-spreadsheet {
39257
- .o-icon {
39258
- display: flex;
39259
- align-items: center;
39260
- justify-content: center;
39261
- width: ${ICON_EDGE_LENGTH}px;
39262
- height: ${ICON_EDGE_LENGTH}px;
39263
- font-size: ${ICON_EDGE_LENGTH}px;
39264
- vertical-align: middle;
39265
-
39266
- .small-text {
39267
- font: bold 9px sans-serif;
39268
- }
39269
- .heavy-text {
39270
- font: bold 16px sans-serif;
39271
- }
39272
- }
39273
- .fa-small {
39274
- font-size: 14px;
39275
- }
39276
- }
39277
- `;
39278
38370
  // -----------------------------------------------------------------------------
39279
38371
  // We need here the svg of the icons that we need to convert to images for the renderer
39280
38372
  // -----------------------------------------------------------------------------
@@ -49148,37 +48240,6 @@ stores.inject(MyMetaStore, storeInstance);
49148
48240
  return index;
49149
48241
  }
49150
48242
 
49151
- // -----------------------------------------------------------------------------
49152
- // Autofill
49153
- // -----------------------------------------------------------------------------
49154
- css /* scss */ `
49155
- .o-autofill {
49156
- position: absolute;
49157
- height: ${AUTOFILL_EDGE_LENGTH}px;
49158
- width: ${AUTOFILL_EDGE_LENGTH}px;
49159
- border: 1px solid white;
49160
- background-color: #1a73e8;
49161
- }
49162
-
49163
- .o-autofill-handler {
49164
- position: absolute;
49165
- height: ${AUTOFILL_EDGE_LENGTH}px;
49166
- width: ${AUTOFILL_EDGE_LENGTH}px;
49167
- &:hover {
49168
- cursor: crosshair;
49169
- }
49170
- }
49171
-
49172
- .o-autofill-nextvalue {
49173
- position: absolute;
49174
- background-color: #ffffff;
49175
- border: 1px solid black;
49176
- padding: 5px;
49177
- font-size: 12px;
49178
- pointer-events: none;
49179
- white-space: nowrap;
49180
- }
49181
- `;
49182
48243
  class Autofill extends owl.Component {
49183
48244
  static template = "o-spreadsheet-Autofill";
49184
48245
  static props = {
@@ -49263,16 +48324,6 @@ stores.inject(MyMetaStore, storeInstance);
49263
48324
  `;
49264
48325
  }
49265
48326
 
49266
- css /* scss */ `
49267
- .o-client-tag {
49268
- position: absolute;
49269
- border-top-left-radius: 4px;
49270
- border-top-right-radius: 4px;
49271
- font-size: ${DEFAULT_FONT_SIZE};
49272
- color: white;
49273
- pointer-events: none;
49274
- }
49275
- `;
49276
48327
  class ClientTag extends owl.Component {
49277
48328
  static template = "o-spreadsheet-ClientTag";
49278
48329
  static props = {
@@ -49822,28 +48873,6 @@ stores.inject(MyMetaStore, storeInstance);
49822
48873
 
49823
48874
  const COMPOSER_BORDER_WIDTH = 3 * 0.4 * window.devicePixelRatio || 1;
49824
48875
  const GRID_CELL_REFERENCE_TOP_OFFSET = 28;
49825
- css /* scss */ `
49826
- div.o-grid-composer {
49827
- z-index: ${ComponentsImportance.GridComposer};
49828
- position: absolute;
49829
- border: ${COMPOSER_BORDER_WIDTH}px solid ${SELECTION_BORDER_COLOR};
49830
- font-family: ${DEFAULT_FONT};
49831
-
49832
- display: flex;
49833
- align-items: center;
49834
- }
49835
-
49836
- div.o-cell-reference {
49837
- position: absolute;
49838
- z-index: ${ComponentsImportance.GridComposer};
49839
- background: ${SELECTION_BORDER_COLOR};
49840
- color: white;
49841
- font-size: 12px;
49842
- line-height: 14px;
49843
- padding: 6px 7px;
49844
- border-radius: 4px;
49845
- }
49846
- `;
49847
48876
  /**
49848
48877
  * This component is a composer which positions itself on the grid at the anchor cell.
49849
48878
  * It also applies the style of the cell to the composer input.
@@ -49969,6 +48998,7 @@ stores.inject(MyMetaStore, storeInstance);
49969
48998
  return cssPropertiesToCss({
49970
48999
  left: `${left - 1}px`,
49971
49000
  top: `${top}px`,
49001
+ border: `${COMPOSER_BORDER_WIDTH}px solid ${SELECTION_BORDER_COLOR}`,
49972
49002
  "min-width": `${minWidth}px`,
49973
49003
  "min-height": `${minHeight}px`,
49974
49004
  "max-width": `${maxWidth}px`,
@@ -50239,24 +49269,6 @@ stores.inject(MyMetaStore, storeInstance);
50239
49269
  return { position, axisType: axisType };
50240
49270
  }
50241
49271
 
50242
- css /*SCSS*/ `
50243
- .o-figure-snap-line {
50244
- position: relative;
50245
- z-index: ${ComponentsImportance.FigureSnapLine};
50246
- &.vertical {
50247
- width: 0px;
50248
- border-left: 1px dashed black;
50249
- }
50250
- &.horizontal {
50251
- border-top: 1px dashed black;
50252
- height: 0px;
50253
- }
50254
- }
50255
- .o-figure-container {
50256
- -webkit-user-select: none; /* safari */
50257
- user-select: none;
50258
- }
50259
- `;
50260
49272
  /**
50261
49273
  * Each figure ⭐ is positioned inside a container `div` placed and sized
50262
49274
  * according to the split pane the figure is part of, or a separate container for the figure
@@ -50688,38 +49700,6 @@ stores.inject(MyMetaStore, storeInstance);
50688
49700
  }
50689
49701
  }
50690
49702
 
50691
- css /* scss */ `
50692
- .o-validation {
50693
- border-radius: 4px;
50694
- border-width: 0 0 0 3px;
50695
- border-style: solid;
50696
- gap: 3px;
50697
-
50698
- .o-icon {
50699
- margin-right: 5px;
50700
- height: 1.2em;
50701
- width: 1.2em;
50702
- }
50703
- }
50704
-
50705
- .o-validation-warning {
50706
- border-color: ${ALERT_WARNING_BORDER};
50707
- color: ${ALERT_WARNING_TEXT_COLOR};
50708
- background-color: ${ALERT_WARNING_BG};
50709
- }
50710
-
50711
- .o-validation-error {
50712
- border-color: ${ALERT_DANGER_BORDER};
50713
- color: ${ALERT_DANGER_TEXT_COLOR};
50714
- background-color: ${ALERT_DANGER_BG};
50715
- }
50716
-
50717
- .o-validation-info {
50718
- border-color: ${ALERT_INFO_BORDER};
50719
- color: ${ALERT_INFO_TEXT_COLOR};
50720
- background-color: ${ALERT_INFO_BG};
50721
- }
50722
- `;
50723
49703
  class ValidationMessages extends owl.Component {
50724
49704
  static template = "o-spreadsheet-ValidationMessages";
50725
49705
  static props = {
@@ -50741,20 +49721,6 @@ stores.inject(MyMetaStore, storeInstance);
50741
49721
  }
50742
49722
  }
50743
49723
 
50744
- css /* scss */ `
50745
- .o-grid-add-rows {
50746
- input.o-input {
50747
- width: 60px;
50748
- height: 30px;
50749
- }
50750
-
50751
- .o-validation-error {
50752
- display: inline-block !important;
50753
- margin-top: 0;
50754
- margin-left: 8px;
50755
- }
50756
- }
50757
- `;
50758
49724
  class GridAddRowsFooter extends owl.Component {
50759
49725
  static template = "o-spreadsheet-GridAddRowsFooter";
50760
49726
  static props = {
@@ -50999,14 +49965,6 @@ stores.inject(MyMetaStore, storeInstance);
50999
49965
  }
51000
49966
  }
51001
49967
 
51002
- const CURSOR_SVG = /*xml*/ `
51003
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="16"><path d="M6.5.4c1.3-.8 2.9-.1 3.8 1.4l2.9 5.1c.2.4.9 1.6-.4 2.3l-1.6.9 1.8 3.1c.2.4.1 1-.2 1.2l-1.6 1c-.3.1-.9 0-1.1-.4l-1.8-3.1-1.6 1c-.6.4-1.7 0-2.2-.8L0 4.3"/><path fill="#fff" d="M9.1 2a1.4 1.1 60 0 0-1.7-.6L5.5 2.5l.9 1.6-1 .6-.9-1.6-.6.4 1.8 3.1-1.3.7-1.8-3.1-1 .6 3.8 6.6 6.8-3.98M3.9 8.8 10.82 5l.795 1.4-6.81 3.96"/></svg>
51004
- `;
51005
- css /* scss */ `
51006
- .o-paint-format-cursor {
51007
- cursor: url("data:image/svg+xml,${encodeURIComponent(CURSOR_SVG)}"), auto;
51008
- }
51009
- `;
51010
49968
  function useCellHovered(env, gridRef) {
51011
49969
  const delayedHoveredCell = useStore(DelayedHoveredCellStore);
51012
49970
  const hoveredTable = useStore(HoveredTableStore);
@@ -51252,7 +50210,6 @@ stores.inject(MyMetaStore, storeInstance);
51252
50210
  };
51253
50211
  static components = { Popover };
51254
50212
  cellPopovers;
51255
- zIndex = ComponentsImportance.GridPopover;
51256
50213
  setup() {
51257
50214
  this.cellPopovers = useStore(CellPopoverStore);
51258
50215
  }
@@ -51571,58 +50528,6 @@ stores.inject(MyMetaStore, storeInstance);
51571
50528
  this.props.onOpenContextMenu(type, ev.clientX, ev.clientY);
51572
50529
  }
51573
50530
  }
51574
- css /* scss */ `
51575
- .o-col-resizer {
51576
- position: absolute;
51577
- top: 0;
51578
- left: ${HEADER_WIDTH}px;
51579
- right: ${SCROLLBAR_WIDTH}px;
51580
- height: ${HEADER_HEIGHT}px;
51581
- width: calc(100% - ${HEADER_WIDTH + SCROLLBAR_WIDTH}px);
51582
- &.o-dragging {
51583
- cursor: grabbing;
51584
- }
51585
- &.o-grab {
51586
- cursor: grab;
51587
- }
51588
- .dragging-col-line {
51589
- top: ${HEADER_HEIGHT}px;
51590
- position: absolute;
51591
- width: 2px;
51592
- height: 10000px;
51593
- background-color: black;
51594
- }
51595
- .dragging-col-shadow {
51596
- top: ${HEADER_HEIGHT}px;
51597
- position: absolute;
51598
- height: 10000px;
51599
- background-color: black;
51600
- opacity: 0.1;
51601
- }
51602
- .o-handle {
51603
- position: absolute;
51604
- height: ${HEADER_HEIGHT}px;
51605
- width: 4px;
51606
- cursor: e-resize;
51607
- background-color: ${SELECTION_BORDER_COLOR};
51608
- }
51609
- .dragging-resizer {
51610
- top: ${HEADER_HEIGHT}px;
51611
- position: absolute;
51612
- margin-left: 2px;
51613
- width: 1px;
51614
- height: 10000px;
51615
- background-color: ${SELECTION_BORDER_COLOR};
51616
- }
51617
- .o-unhide {
51618
- color: ${ICONS_COLOR};
51619
- }
51620
- .o-unhide:hover {
51621
- z-index: ${ComponentsImportance.Grid + 1};
51622
- background-color: lightgrey;
51623
- }
51624
- }
51625
- `;
51626
50531
  class ColResizer extends AbstractResizer {
51627
50532
  static props = {
51628
50533
  onOpenContextMenu: Function,
@@ -51765,57 +50670,6 @@ stores.inject(MyMetaStore, storeInstance);
51765
50670
  return this.env.model.getters.getPaneDivisions(this.sheetId).xSplit > 0;
51766
50671
  }
51767
50672
  }
51768
- css /* scss */ `
51769
- .o-row-resizer {
51770
- position: absolute;
51771
- top: ${HEADER_HEIGHT}px;
51772
- left: 0;
51773
- bottom: ${SCROLLBAR_WIDTH}px;
51774
- width: ${HEADER_WIDTH}px;
51775
- &.o-dragging {
51776
- cursor: grabbing;
51777
- }
51778
- &.o-grab {
51779
- cursor: grab;
51780
- }
51781
- .dragging-row-line {
51782
- left: ${HEADER_WIDTH}px;
51783
- position: absolute;
51784
- width: 10000px;
51785
- height: 2px;
51786
- background-color: black;
51787
- }
51788
- .dragging-row-shadow {
51789
- left: ${HEADER_WIDTH}px;
51790
- position: absolute;
51791
- width: 10000px;
51792
- background-color: black;
51793
- opacity: 0.1;
51794
- }
51795
- .o-handle {
51796
- position: absolute;
51797
- height: 4px;
51798
- width: ${HEADER_WIDTH}px;
51799
- cursor: n-resize;
51800
- background-color: ${SELECTION_BORDER_COLOR};
51801
- }
51802
- .dragging-resizer {
51803
- left: ${HEADER_WIDTH}px;
51804
- position: absolute;
51805
- margin-top: 2px;
51806
- width: 10000px;
51807
- height: 1px;
51808
- background-color: ${SELECTION_BORDER_COLOR};
51809
- }
51810
- .o-unhide {
51811
- color: ${ICONS_COLOR};
51812
- }
51813
- .o-unhide:hover {
51814
- z-index: ${ComponentsImportance.Grid + 1};
51815
- background-color: lightgrey;
51816
- }
51817
- }
51818
- `;
51819
50673
  class RowResizer extends AbstractResizer {
51820
50674
  static props = {
51821
50675
  onOpenContextMenu: Function,
@@ -51956,18 +50810,6 @@ stores.inject(MyMetaStore, storeInstance);
51956
50810
  return this.env.model.getters.getPaneDivisions(this.sheetId).ySplit > 0;
51957
50811
  }
51958
50812
  }
51959
- css /* scss */ `
51960
- .o-overlay {
51961
- .all {
51962
- position: absolute;
51963
- top: 0;
51964
- left: 0;
51965
- right: 0;
51966
- width: ${HEADER_WIDTH}px;
51967
- height: ${HEADER_HEIGHT}px;
51968
- }
51969
- }
51970
- `;
51971
50813
  class HeadersOverlay extends owl.Component {
51972
50814
  static props = {
51973
50815
  onOpenContextMenu: Function,
@@ -52922,17 +51764,6 @@ stores.inject(MyMetaStore, storeInstance);
52922
51764
  return onMouseWheel;
52923
51765
  }
52924
51766
 
52925
- css /* scss */ `
52926
- .o-border {
52927
- position: absolute;
52928
- &:hover {
52929
- cursor: grab;
52930
- }
52931
- }
52932
- .o-moving {
52933
- cursor: grabbing;
52934
- }
52935
- `;
52936
51767
  class Border extends owl.Component {
52937
51768
  static template = "o-spreadsheet-Border";
52938
51769
  static props = {
@@ -52971,32 +51802,6 @@ stores.inject(MyMetaStore, storeInstance);
52971
51802
  }
52972
51803
 
52973
51804
  const MOBILE_HANDLER_WIDTH = 40;
52974
- css /* scss */ `
52975
- .o-corner {
52976
- position: absolute;
52977
- }
52978
-
52979
- .o-corner-button {
52980
- border: 1px solid white;
52981
- height: ${AUTOFILL_EDGE_LENGTH}px;
52982
- width: ${AUTOFILL_EDGE_LENGTH}px;
52983
- }
52984
- .o-corner-nw,
52985
- .o-corner-se {
52986
- &:hover {
52987
- cursor: nwse-resize;
52988
- }
52989
- }
52990
- .o-corner-ne,
52991
- .o-corner-sw {
52992
- &:hover {
52993
- cursor: nesw-resize;
52994
- }
52995
- }
52996
- .o-resizing {
52997
- cursor: grabbing;
52998
- }
52999
- `;
53000
51805
  class Corner extends owl.Component {
53001
51806
  static template = "o-spreadsheet-Corner";
53002
51807
  static props = {
@@ -53062,11 +51867,6 @@ stores.inject(MyMetaStore, storeInstance);
53062
51867
  return { dirX, dirY };
53063
51868
  }
53064
51869
 
53065
- css /*SCSS*/ `
53066
- .o-highlight {
53067
- z-index: ${ComponentsImportance.Highlight};
53068
- }
53069
- `;
53070
51870
  class Highlight extends owl.Component {
53071
51871
  static template = "o-spreadsheet-Highlight";
53072
51872
  static props = {
@@ -53201,24 +52001,6 @@ stores.inject(MyMetaStore, storeInstance);
53201
52001
  }
53202
52002
  };
53203
52003
 
53204
- css /* scss */ `
53205
- .o-scrollbar {
53206
- position: absolute;
53207
- overflow: auto;
53208
- z-index: ${ComponentsImportance.ScrollBar};
53209
- background-color: ${BACKGROUND_GRAY_COLOR};
53210
-
53211
- &.corner {
53212
- box-sizing: content-box;
53213
- right: 0px;
53214
- bottom: 0px;
53215
- height: ${SCROLLBAR_WIDTH}px;
53216
- width: ${SCROLLBAR_WIDTH}px;
53217
- border-top: 1px solid #e2e3e3;
53218
- border-left: 1px solid #e2e3e3;
53219
- }
53220
- }
53221
- `;
53222
52004
  class ScrollBar extends owl.Component {
53223
52005
  static props = {
53224
52006
  width: { type: Number, optional: true },
@@ -53381,24 +52163,6 @@ stores.inject(MyMetaStore, storeInstance);
53381
52163
  }, () => [ref.el]);
53382
52164
  }
53383
52165
 
53384
- css /* scss */ `
53385
- .o-spreadsheet {
53386
- .os-input {
53387
- border-width: 0 0 1px 0;
53388
- border-color: transparent;
53389
- outline: none;
53390
- text-overflow: ellipsis;
53391
- color: ${TEXT_BODY};
53392
- }
53393
- .os-input:hover,
53394
- .os-input.o-input-border {
53395
- border-color: ${GRAY_300};
53396
- }
53397
- .os-input:focus {
53398
- border-color: ${ACTION_COLOR};
53399
- }
53400
- }
53401
- `;
53402
52166
  class TextInput extends owl.Component {
53403
52167
  static template = "o-spreadsheet-TextInput";
53404
52168
  static props = {
@@ -53480,21 +52244,6 @@ stores.inject(MyMetaStore, storeInstance);
53480
52244
  }
53481
52245
  }
53482
52246
 
53483
- css /* scss */ `
53484
- .o-menu-item-button {
53485
- display: flex;
53486
- justify-content: center;
53487
- align-items: center;
53488
- margin: 2px 1px;
53489
- padding: 0px 1px;
53490
- border-radius: 2px;
53491
- min-width: 22px;
53492
- }
53493
- .o-disabled {
53494
- opacity: 0.6;
53495
- cursor: default;
53496
- }
53497
- `;
53498
52247
  class ActionButton extends owl.Component {
53499
52248
  static template = "o-spreadsheet-ActionButton";
53500
52249
  static props = {
@@ -53547,41 +52296,6 @@ stores.inject(MyMetaStore, storeInstance);
53547
52296
  }
53548
52297
  }
53549
52298
 
53550
- css /* scss */ `
53551
- .o-color-picker-widget {
53552
- display: flex;
53553
- position: relative;
53554
- align-items: center;
53555
- height: 30px;
53556
-
53557
- .o-color-picker-button-style {
53558
- display: flex;
53559
- justify-content: center;
53560
- align-items: center;
53561
- margin: 2px;
53562
- padding: 3px;
53563
- border-radius: 2px;
53564
- cursor: pointer;
53565
- &:not([disabled]):hover {
53566
- background-color: rgba(0, 0, 0, 0.08);
53567
- }
53568
- }
53569
-
53570
- .o-color-picker-button {
53571
- > span {
53572
- border-bottom: 4px solid;
53573
- height: 20px;
53574
- margin-top: 2px;
53575
- display: block;
53576
- }
53577
-
53578
- &[disabled] {
53579
- pointer-events: none;
53580
- opacity: 0.3;
53581
- }
53582
- }
53583
- }
53584
- `;
53585
52299
  class ColorPickerWidget extends owl.Component {
53586
52300
  static template = "o-spreadsheet-ColorPickerWidget";
53587
52301
  static props = {
@@ -53614,26 +52328,6 @@ stores.inject(MyMetaStore, storeInstance);
53614
52328
  }
53615
52329
  }
53616
52330
 
53617
- css /* scss */ `
53618
- .o-font-size-editor {
53619
- width: max-content !important;
53620
- height: calc(100% - 4px);
53621
- input.o-font-size {
53622
- outline: none;
53623
- height: 20px;
53624
- width: 31px;
53625
- text-align: center;
53626
- }
53627
- }
53628
- .o-text-options > div {
53629
- cursor: pointer;
53630
- line-height: 26px;
53631
- padding: 3px 12px;
53632
- &:hover {
53633
- background-color: rgba(0, 0, 0, 0.08);
53634
- }
53635
- }
53636
- `;
53637
52331
  class FontSizeEditor extends owl.Component {
53638
52332
  static template = "o-spreadsheet-FontSizeEditor";
53639
52333
  static props = {
@@ -53709,41 +52403,6 @@ stores.inject(MyMetaStore, storeInstance);
53709
52403
  }
53710
52404
  }
53711
52405
 
53712
- css /* scss */ `
53713
- .o-chart-title-designer {
53714
- .o-hoverable-button {
53715
- height: 30px;
53716
- }
53717
- .o-dropdown-content .o-hoverable-button {
53718
- height: fit-content;
53719
- }
53720
-
53721
- .o-divider {
53722
- border-right: 1px solid ${GRAY_300};
53723
- margin: 0px 4px;
53724
- height: 14px;
53725
- }
53726
-
53727
- .o-menu-item-button.active {
53728
- background-color: #e6f4ea;
53729
- color: #188038;
53730
- }
53731
-
53732
- .o-dropdown-content {
53733
- overflow-y: auto;
53734
- overflow-x: hidden;
53735
- padding: 2px;
53736
- z-index: 100;
53737
- box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15);
53738
-
53739
- .o-dropdown-line {
53740
- > span {
53741
- padding: 4px;
53742
- }
53743
- }
53744
- }
53745
- }
53746
- `;
53747
52406
  class TextStyler extends owl.Component {
53748
52407
  static template = "o-spreadsheet.TextStyler";
53749
52408
  static components = { ColorPickerWidget, ActionButton, FontSizeEditor };
@@ -54571,27 +53230,6 @@ stores.inject(MyMetaStore, storeInstance);
54571
53230
  }
54572
53231
  }
54573
53232
 
54574
- css /* scss */ `
54575
- .o-badge-selection {
54576
- gap: 1px;
54577
- button.o-button {
54578
- border-radius: 0;
54579
- &.selected {
54580
- color: ${GRAY_900};
54581
- border-color: ${ACTION_COLOR};
54582
- background: ${BADGE_SELECTED_COLOR};
54583
- font-weight: 600;
54584
- }
54585
-
54586
- &:first-child {
54587
- border-radius: 4px 0 0 4px;
54588
- }
54589
- &:last-child {
54590
- border-radius: 0 4px 4px 0;
54591
- }
54592
- }
54593
- }
54594
- `;
54595
53233
  class BadgeSelection extends owl.Component {
54596
53234
  static template = "o-spreadsheet.BadgeSelection";
54597
53235
  static props = {
@@ -54601,13 +53239,6 @@ stores.inject(MyMetaStore, storeInstance);
54601
53239
  };
54602
53240
  }
54603
53241
 
54604
- css /* scss */ `
54605
- .o-chart-title-designer {
54606
- > span {
54607
- height: 30px;
54608
- }
54609
- }
54610
- `;
54611
53242
  class ChartTitle extends owl.Component {
54612
53243
  static template = "o-spreadsheet.ChartTitle";
54613
53244
  static components = { Section, TextStyler };
@@ -54669,31 +53300,12 @@ stores.inject(MyMetaStore, storeInstance);
54669
53300
  }
54670
53301
  }
54671
53302
 
54672
- const CIRCLE_SVG = /*xml*/ `
54673
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
54674
- <circle r="2" fill="#FFF"/>
54675
- </svg>
54676
- `;
54677
- css /* scss */ `
54678
- .o-radio {
54679
- input {
54680
- appearance: none;
54681
- -webkit-appearance: none;
54682
- -moz-appearance: none;
54683
- width: 14px;
54684
- height: 14px;
54685
- border: 1px solid ${GRAY_300};
54686
- outline: none;
54687
- border-radius: 8px;
54688
-
54689
- &:checked {
54690
- background: url("data:image/svg+xml,${encodeURIComponent(CIRCLE_SVG)}");
54691
- background-color: ${ACTION_COLOR};
54692
- border-color: ${ACTION_COLOR};
54693
- }
54694
- }
54695
- }
54696
- `;
53303
+ // FIXME Encoding version used in css
53304
+ // const CIRCLE_SVG = /*xml*/ `
53305
+ // <svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'>
53306
+ // <circle r="2" fill="#FFF"/>
53307
+ // </svg>
53308
+ // `;
54697
53309
  class RadioSelection extends owl.Component {
54698
53310
  static template = "o-spreadsheet.RadioSelection";
54699
53311
  static props = {
@@ -55190,45 +53802,6 @@ stores.inject(MyMetaStore, storeInstance);
55190
53802
  }
55191
53803
  }
55192
53804
 
55193
- css /* scss */ `
55194
- .o-gauge-color-set {
55195
- table {
55196
- table-layout: fixed;
55197
- margin-top: 2%;
55198
- display: table;
55199
- text-align: left;
55200
- font-size: 12px;
55201
- line-height: 18px;
55202
- width: 100%;
55203
- font-size: 12px;
55204
- }
55205
-
55206
- td {
55207
- height: 30px;
55208
- padding: 6px 0;
55209
- }
55210
- th.o-gauge-color-set-colorPicker {
55211
- width: 8%;
55212
- }
55213
- th.o-gauge-color-set-text {
55214
- width: 25%;
55215
- }
55216
- th.o-gauge-color-set-operator {
55217
- width: 10%;
55218
- }
55219
- th.o-gauge-color-set-value {
55220
- width: 22%;
55221
- }
55222
- th.o-gauge-color-set-type {
55223
- width: 30%;
55224
- }
55225
- input,
55226
- select {
55227
- width: 100%;
55228
- height: 100%;
55229
- }
55230
- }
55231
- `;
55232
53805
  class GaugeChartDesignPanel extends owl.Component {
55233
53806
  static template = "o-spreadsheet-GaugeChartDesignPanel";
55234
53807
  static components = {
@@ -56034,40 +54607,6 @@ stores.inject(MyMetaStore, storeInstance);
56034
54607
  design: TreeMapChartDesignPanel,
56035
54608
  });
56036
54609
 
56037
- css /* scss */ `
56038
- .o-section .o-input.o-type-selector {
56039
- height: 30px;
56040
- padding-left: 35px;
56041
- padding-top: 5px;
56042
- }
56043
- .o-type-selector-preview {
56044
- left: 5px;
56045
- top: 3px;
56046
- .o-chart-preview {
56047
- width: 24px;
56048
- height: 24px;
56049
- }
56050
- }
56051
-
56052
- .o-popover .o-chart-select-popover {
56053
- background: #fff;
56054
- .o-chart-type-item {
56055
- cursor: pointer;
56056
- padding: 3px 6px;
56057
- margin: 1px 2px;
56058
- &.selected,
56059
- &:hover {
56060
- border: 1px solid ${ACTION_COLOR};
56061
- background: ${BADGE_SELECTED_COLOR};
56062
- padding: 2px 5px;
56063
- }
56064
- .o-chart-preview {
56065
- width: 48px;
56066
- height: 48px;
56067
- }
56068
- }
56069
- }
56070
- `;
56071
54610
  class ChartTypePicker extends owl.Component {
56072
54611
  static template = "o-spreadsheet-ChartTypePicker";
56073
54612
  static components = { Section, Popover };
@@ -56170,38 +54709,6 @@ stores.inject(MyMetaStore, storeInstance);
56170
54709
  }
56171
54710
  }
56172
54711
 
56173
- css /* scss */ `
56174
- .o-chart {
56175
- .o-panel {
56176
- display: flex;
56177
- .o-panel-element {
56178
- flex: 1 0 auto;
56179
- padding: 8px 0px;
56180
- text-align: center;
56181
- cursor: pointer;
56182
- border-right: 1px solid ${GRAY_300};
56183
-
56184
- &.inactive {
56185
- color: ${TEXT_BODY};
56186
- background-color: ${GRAY_100};
56187
- border-bottom: 1px solid ${GRAY_300};
56188
- }
56189
-
56190
- &:not(.inactive) {
56191
- color: ${TEXT_HEADING};
56192
- border-bottom: 1px solid #fff;
56193
- }
56194
-
56195
- .fa {
56196
- margin-right: 4px;
56197
- }
56198
- }
56199
- .o-panel-element:last-child {
56200
- border-right: none;
56201
- }
56202
- }
56203
- }
56204
- `;
56205
54712
  class ChartPanel extends owl.Component {
56206
54713
  static template = "o-spreadsheet-ChartPanel";
56207
54714
  static components = { Section, ChartTypePicker };
@@ -56290,26 +54797,6 @@ stores.inject(MyMetaStore, storeInstance);
56290
54797
  }
56291
54798
  }
56292
54799
 
56293
- css /* scss */ `
56294
- .o-icon-picker {
56295
- position: absolute;
56296
- z-index: ${ComponentsImportance.IconPicker};
56297
- box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15);
56298
- background-color: white;
56299
- padding: 2px 1px;
56300
- }
56301
- .o-cf-icon-line {
56302
- display: flex;
56303
- padding: 0 6px;
56304
- }
56305
- .o-icon-picker-item {
56306
- cursor: pointer;
56307
- &:hover {
56308
- background-color: ${BADGE_SELECTED_COLOR};
56309
- outline: ${ACTION_COLOR} solid 1px;
56310
- }
56311
- }
56312
- `;
56313
54800
  class IconPicker extends owl.Component {
56314
54801
  static template = "o-spreadsheet-IconPicker";
56315
54802
  static props = {
@@ -56347,77 +54834,6 @@ stores.inject(MyMetaStore, storeInstance);
56347
54834
  }, () => [highlightProvider.highlights]);
56348
54835
  }
56349
54836
 
56350
- css /* scss */ `
56351
- .o-cf-preview {
56352
- &.o-cf-cursor-ptr {
56353
- cursor: pointer;
56354
- }
56355
-
56356
- border-bottom: 1px solid ${GRAY_300};
56357
- height: 80px;
56358
- padding: 10px;
56359
- position: relative;
56360
- cursor: pointer;
56361
- &:hover,
56362
- &.o-cf-dragging {
56363
- background-color: ${GRAY_200};
56364
- }
56365
-
56366
- &:not(:hover) .o-cf-delete-button {
56367
- display: none;
56368
- }
56369
- .o-cf-preview-icon {
56370
- border: 1px solid ${GRAY_300};
56371
- background-color: #fff;
56372
- position: absolute;
56373
- height: 50px;
56374
- width: 50px;
56375
- .o-icon {
56376
- width: ${CF_ICON_EDGE_LENGTH}px;
56377
- height: ${CF_ICON_EDGE_LENGTH}px;
56378
- }
56379
- }
56380
- .o-cf-preview-description {
56381
- left: 65px;
56382
- margin-bottom: auto;
56383
- margin-right: 8px;
56384
- margin-top: auto;
56385
- position: relative;
56386
- width: 142px;
56387
- .o-cf-preview-description-rule {
56388
- margin-bottom: 4px;
56389
- max-height: 2.8em;
56390
- line-height: 1.4em;
56391
- }
56392
- .o-cf-preview-range {
56393
- font-size: 12px;
56394
- }
56395
- }
56396
- .o-cf-delete {
56397
- left: 90%;
56398
- top: 39%;
56399
- position: absolute;
56400
- }
56401
- &:not(:hover):not(.o-cf-dragging) .o-cf-drag-handle {
56402
- display: none !important;
56403
- }
56404
- .o-cf-drag-handle {
56405
- left: -8px;
56406
- cursor: move;
56407
- .o-icon {
56408
- width: 6px;
56409
- height: 30px;
56410
- }
56411
- }
56412
-
56413
- .o-icon.arrow-down {
56414
- color: #e06666;
56415
- }
56416
- .o-icon.arrow-up {
56417
- color: #6aa84f;
56418
- }
56419
- }
56420
- `;
56421
54837
  class ConditionalFormatPreview extends owl.Component {
56422
54838
  static template = "o-spreadsheet-ConditionalFormatPreview";
56423
54839
  icons = ICONS;
@@ -56536,95 +54952,6 @@ stores.inject(MyMetaStore, storeInstance);
56536
54952
  }
56537
54953
  }
56538
54954
 
56539
- css /* scss */ `
56540
- .o-cf-ruleEditor {
56541
- .o-cf-preview-display {
56542
- border: 1px solid ${GRAY_300};
56543
- padding: 10px;
56544
- }
56545
-
56546
- .o-cf-cell-is-rule {
56547
- .o-divider {
56548
- border-right: 1px solid ${GRAY_300};
56549
- margin: 4px 6px;
56550
- }
56551
- }
56552
- .o-cf-color-scale-editor {
56553
- .o-threshold {
56554
- .o-select-with-input {
56555
- max-width: 150px;
56556
- }
56557
- .o-threshold-value {
56558
- flex-grow: 1;
56559
- flex-basis: 60%;
56560
- min-width: 0px; /* input overflows in Firefox otherwise */
56561
- }
56562
- .o-threshold-value input:disabled {
56563
- background-color: #edebed;
56564
- }
56565
- }
56566
- }
56567
- .o-cf-iconset-rule {
56568
- .o-cf-clickable-icon {
56569
- border: 1px solid ${GRAY_200};
56570
- border-radius: 4px;
56571
- cursor: pointer;
56572
- &:hover {
56573
- border-color: ${ACTION_COLOR};
56574
- background-color: ${BADGE_SELECTED_COLOR};
56575
- }
56576
- .o-icon {
56577
- width: ${CF_ICON_EDGE_LENGTH}px;
56578
- height: ${CF_ICON_EDGE_LENGTH}px;
56579
- }
56580
- }
56581
- .o-cf-iconsets {
56582
- gap: 11px;
56583
- .o-cf-iconset {
56584
- padding: 7px 8px;
56585
- width: 95px;
56586
- .o-icon {
56587
- margin: 0 3px;
56588
- }
56589
- svg {
56590
- vertical-align: baseline;
56591
- }
56592
- }
56593
- }
56594
- .o-inflection {
56595
- .o-cf-icon-button {
56596
- padding: 4px 10px;
56597
- }
56598
- table {
56599
- font-size: 13px;
56600
- td {
56601
- padding: 6px 0;
56602
- }
56603
-
56604
- th.o-cf-iconset-icons {
56605
- width: 25px;
56606
- }
56607
- th.o-cf-iconset-text {
56608
- width: 82px;
56609
- }
56610
- th.o-cf-iconset-operator {
56611
- width: 20px;
56612
- }
56613
- .o-cf-iconset-type {
56614
- min-width: 80px;
56615
- }
56616
- }
56617
- }
56618
- }
56619
-
56620
- .o-icon.arrow-down {
56621
- color: #e06666;
56622
- }
56623
- .o-icon.arrow-up {
56624
- color: #6aa84f;
56625
- }
56626
- }
56627
- `;
56628
54955
  class ConditionalFormattingEditor extends owl.Component {
56629
54956
  static template = "o-spreadsheet-ConditionalFormattingEditor";
56630
54957
  static props = {
@@ -57154,25 +55481,6 @@ stores.inject(MyMetaStore, storeInstance);
57154
55481
  */
57155
55482
  const currenciesRegistry = new Registry();
57156
55483
 
57157
- css /* scss */ `
57158
- .o-custom-currency {
57159
- .o-format-proposals {
57160
- color: black;
57161
- }
57162
-
57163
- .o-format-examples {
57164
- background: #f9fafb;
57165
- padding: 8px;
57166
- border-radius: 4px;
57167
- border: 1px solid #d8dadd;
57168
- color: #374151;
57169
- }
57170
-
57171
- table {
57172
- table-layout: fixed;
57173
- }
57174
- }
57175
- `;
57176
55484
  class CustomCurrencyPanel extends owl.Component {
57177
55485
  static template = "o-spreadsheet-CustomCurrencyPanel";
57178
55486
  static components = { Section, Checkbox };
@@ -57405,31 +55713,6 @@ stores.inject(MyMetaStore, storeInstance);
57405
55713
  }
57406
55714
  }
57407
55715
 
57408
- css /* scss */ `
57409
- .o-sidePanel {
57410
- .o-dv-preview {
57411
- height: 70px;
57412
- cursor: pointer;
57413
- border-bottom: 1px solid ${FIGURE_BORDER_COLOR};
57414
-
57415
- .o-dv-container {
57416
- min-width: 0; /* otherwise flex won't shrink correctly */
57417
- }
57418
-
57419
- .o-dv-preview-description {
57420
- font-size: 13px;
57421
- }
57422
-
57423
- &:hover {
57424
- background-color: rgba(0, 0, 0, 0.08);
57425
- }
57426
-
57427
- &:not(:hover) .o-dv-preview-delete {
57428
- display: none !important;
57429
- }
57430
- }
57431
- }
57432
- `;
57433
55716
  class DataValidationPreview extends owl.Component {
57434
55717
  static template = "o-spreadsheet-DataValidationPreview";
57435
55718
  static props = {
@@ -57878,38 +56161,6 @@ stores.inject(MyMetaStore, storeInstance);
57878
56161
  }
57879
56162
  }
57880
56163
 
57881
- css /* scss */ `
57882
- .o-find-and-replace {
57883
- outline: none;
57884
- height: 100%;
57885
- .o-input-search-container {
57886
- display: flex;
57887
- .o-input-with-count {
57888
- flex-grow: 1;
57889
- width: auto;
57890
- }
57891
- .o-input-without-count {
57892
- width: 100%;
57893
- }
57894
- .o-input-count {
57895
- width: fit-content;
57896
- padding: 4px 0 4px 4px;
57897
- white-space: nowrap;
57898
- }
57899
- }
57900
-
57901
- .o-result-buttons {
57902
- .o-button {
57903
- height: 19px;
57904
- width: 19px;
57905
- .o-icon {
57906
- height: 14px;
57907
- width: 14px;
57908
- }
57909
- }
57910
- }
57911
- }
57912
- `;
57913
56164
  class FindAndReplacePanel extends owl.Component {
57914
56165
  static template = "o-spreadsheet-FindAndReplacePanel";
57915
56166
  static components = { SelectionInput, Section, Checkbox, ValidationMessages };
@@ -58020,22 +56271,6 @@ stores.inject(MyMetaStore, storeInstance);
58020
56271
  }
58021
56272
  }
58022
56273
 
58023
- css /* scss */ `
58024
- .o-more-formats-panel {
58025
- .format-preview {
58026
- height: 49px;
58027
- background-color: white;
58028
- cursor: pointer;
58029
-
58030
- &:hover {
58031
- background-color: rgba(0, 0, 0, 0.08);
58032
- }
58033
- }
58034
- .check-icon {
58035
- width: 24px;
58036
- }
58037
- }
58038
- `;
58039
56274
  const DATE_FORMAT_ACTIONS = createActions([
58040
56275
  formatNumberFullDateTime,
58041
56276
  formatNumberISODate,
@@ -58193,21 +56428,6 @@ stores.inject(MyMetaStore, storeInstance);
58193
56428
  }
58194
56429
  }
58195
56430
 
58196
- css /* scss */ `
58197
- .o-sidePanel {
58198
- .o-pivot-measure-display-field,
58199
- .o-pivot-measure-display-value {
58200
- border: solid 1px ${GRAY_300};
58201
- border-radius: 3px;
58202
- }
58203
-
58204
- .o-pivot-measure-display-description {
58205
- white-space: pre-wrap;
58206
- color: dimgray;
58207
- border-left: 2px solid ${GRAY_300};
58208
- }
58209
- }
58210
- `;
58211
56431
  class PivotMeasureDisplayPanel extends owl.Component {
58212
56432
  static template = "o-spreadsheet-PivotMeasureDisplayPanel";
58213
56433
  static props = {
@@ -58266,11 +56486,6 @@ stores.inject(MyMetaStore, storeInstance);
58266
56486
  return positions;
58267
56487
  }
58268
56488
 
58269
- css /* scss */ `
58270
- .pivot-defer-update {
58271
- min-height: 40px;
58272
- }
58273
- `;
58274
56489
  class PivotDeferUpdate extends owl.Component {
58275
56490
  static template = "o-spreadsheet-PivotDeferUpdate";
58276
56491
  static props = {
@@ -58359,25 +56574,6 @@ stores.inject(MyMetaStore, storeInstance);
58359
56574
  return pendingHtmlContent.filter((content) => content.value);
58360
56575
  }
58361
56576
 
58362
- css /* scss */ `
58363
- input.pivot-dimension-search-field:focus {
58364
- outline: none;
58365
- }
58366
- .pivot-dimension-search-field-icon svg {
58367
- width: 13px;
58368
- height: 13px;
58369
- }
58370
- .pivot-dimension-search {
58371
- background-color: white;
58372
- }
58373
- .add-dimension.o-button {
58374
- padding: 2px 7px;
58375
- font-weight: 400;
58376
- font-size: 12px;
58377
- flex-grow: 0;
58378
- height: inherit;
58379
- }
58380
- `;
58381
56577
  class AddDimensionButton extends owl.Component {
58382
56578
  static template = "o-spreadsheet-AddDimensionButton";
58383
56579
  static components = { Popover, TextValueProvider };
@@ -58471,35 +56667,6 @@ stores.inject(MyMetaStore, storeInstance);
58471
56667
  }
58472
56668
  }
58473
56669
 
58474
- // don't use bg-white since it's flipped to dark in dark mode and we don't support dark mode
58475
- css /* scss */ `
58476
- .pivot-dimension {
58477
- background-color: white;
58478
- border: 1px solid ${GRAY_300};
58479
- border-radius: 4px;
58480
-
58481
- select.o-input {
58482
- height: inherit;
58483
- }
58484
-
58485
- select > option {
58486
- background-color: white;
58487
- }
58488
-
58489
- .pivot-dim-operator-label {
58490
- min-width: 120px;
58491
- }
58492
-
58493
- &.pivot-dimension-invalid {
58494
- background-color: #ffdddd;
58495
- border-color: red !important;
58496
- select,
58497
- input {
58498
- background-color: #ffdddd;
58499
- }
58500
- }
58501
- }
58502
- `;
58503
56670
  class PivotDimension extends owl.Component {
58504
56671
  static template = "o-spreadsheet-PivotDimension";
58505
56672
  static props = {
@@ -58651,19 +56818,6 @@ stores.inject(MyMetaStore, storeInstance);
58651
56818
  }
58652
56819
  }
58653
56820
 
58654
- css /* scss */ `
58655
- .o-pivot-sort {
58656
- .o-sort-card {
58657
- width: fit-content;
58658
- background-color: ${GRAY_100};
58659
- border: 1px solid ${GRAY_300};
58660
-
58661
- .o-sort-value {
58662
- color: ${PRIMARY_BUTTON_BG};
58663
- }
58664
- }
58665
- }
58666
- `;
58667
56821
  class PivotSortSection extends owl.Component {
58668
56822
  static template = "o-spreadsheet-PivotSortSection";
58669
56823
  static components = {
@@ -58709,11 +56863,6 @@ stores.inject(MyMetaStore, storeInstance);
58709
56863
  }
58710
56864
  }
58711
56865
 
58712
- css /* scss */ `
58713
- .add-calculated-measure {
58714
- cursor: pointer;
58715
- }
58716
- `;
58717
56866
  class PivotLayoutConfigurator extends owl.Component {
58718
56867
  static template = "o-spreadsheet-PivotLayoutConfigurator";
58719
56868
  static components = {
@@ -59528,11 +57677,6 @@ stores.inject(MyMetaStore, storeInstance);
59528
57677
  }
59529
57678
  }
59530
57679
 
59531
- css /* scss */ `
59532
- .o-checkbox-selection {
59533
- max-height: 300px;
59534
- }
59535
- `;
59536
57680
  class RemoveDuplicatesPanel extends owl.Component {
59537
57681
  static template = "o-spreadsheet-RemoveDuplicatesPanel";
59538
57682
  static components = { ValidationMessages, Section, Checkbox };
@@ -59619,12 +57763,6 @@ stores.inject(MyMetaStore, storeInstance);
59619
57763
  }
59620
57764
  }
59621
57765
 
59622
- css /* scss */ `
59623
- .o-locale-preview {
59624
- border: 1px solid ${GRAY_300};
59625
- background-color: ${GRAY_100};
59626
- }
59627
- `;
59628
57766
  class SettingsPanel extends owl.Component {
59629
57767
  static template = "o-spreadsheet-SettingsPanel";
59630
57768
  static components = { Section, ValidationMessages, BadgeSelection };
@@ -59898,34 +58036,6 @@ stores.inject(MyMetaStore, storeInstance);
59898
58036
  ctx.restore();
59899
58037
  }
59900
58038
 
59901
- css /* scss */ `
59902
- .o-table-style-list-item {
59903
- border: 1px solid transparent;
59904
- border-radius: 4px;
59905
- &.selected {
59906
- border: 1px solid ${ACTION_COLOR};
59907
- background: ${BADGE_SELECTED_COLOR};
59908
- }
59909
-
59910
- &:hover {
59911
- background: #ddd;
59912
- .o-table-style-edit-button {
59913
- display: block !important;
59914
- right: 0;
59915
- top: 0;
59916
- background: #fff;
59917
- cursor: pointer;
59918
- border: 1px solid #ddd;
59919
- padding: 1px 1px 1px 2px;
59920
- .o-icon {
59921
- font-size: 12px;
59922
- width: 12px;
59923
- height: 12px;
59924
- }
59925
- }
59926
- }
59927
- }
59928
- `;
59929
58039
  class TableStylePreview extends owl.Component {
59930
58040
  static template = "o-spreadsheet-TableStylePreview";
59931
58041
  static components = { MenuPopover };
@@ -59986,52 +58096,6 @@ stores.inject(MyMetaStore, storeInstance);
59986
58096
  }
59987
58097
  }
59988
58098
 
59989
- css /* scss */ `
59990
- .o-table-style-popover {
59991
- /* 7 tables preview + padding by line */
59992
- width: calc((66px + 4px * 2) * 7 + 1.5rem * 2);
59993
- background: #fff;
59994
- font-size: 14px;
59995
- user-select: none;
59996
-
59997
- .o-notebook {
59998
- border-bottom: 1px solid ${GRAY_300};
59999
-
60000
- .o-notebook-tab {
60001
- padding: 5px 15px;
60002
- border: 1px solid ${GRAY_300};
60003
- margin-bottom: -1px;
60004
- margin-left: -1px;
60005
- color: ${TEXT_BODY};
60006
- cursor: pointer;
60007
- transition: color 0.2s, border-color 0.2s;
60008
-
60009
- &.selected {
60010
- border-bottom-color: #fff;
60011
- border-top-color: ${PRIMARY_BUTTON_BG};
60012
- color: ${TEXT_HEADING};
60013
- }
60014
- }
60015
- }
60016
-
60017
- .o-table-style-list-item {
60018
- padding: 3px;
60019
- }
60020
-
60021
- .o-table-style-popover-preview {
60022
- width: 66px;
60023
- height: 51px;
60024
- }
60025
-
60026
- .o-new-table-style {
60027
- font-size: 36px;
60028
- color: #666;
60029
- &:hover {
60030
- background: #f5f5f5;
60031
- }
60032
- }
60033
- }
60034
- `;
60035
58099
  class TableStylesPopover extends owl.Component {
60036
58100
  static template = "o-spreadsheet-TableStylesPopover";
60037
58101
  static components = { Popover, TableStylePreview };
@@ -60071,31 +58135,6 @@ stores.inject(MyMetaStore, storeInstance);
60071
58135
  }
60072
58136
  }
60073
58137
 
60074
- css /* scss */ `
60075
- .o-table-style-picker {
60076
- border: 1px solid ${GRAY_300};
60077
- border-radius: 3px;
60078
-
60079
- .o-table-style-picker-arrow {
60080
- border-left: 1px solid ${GRAY_300};
60081
-
60082
- &:hover {
60083
- background: #f5f5f5;
60084
- cursor: pointer;
60085
- }
60086
- }
60087
-
60088
- .o-table-style-list-item {
60089
- padding: 5px 6px;
60090
- margin: 5px 2px;
60091
-
60092
- .o-table-style-picker-preview {
60093
- width: 51px;
60094
- height: 36px;
60095
- }
60096
- }
60097
- }
60098
- `;
60099
58138
  class TableStylePicker extends owl.Component {
60100
58139
  static template = "o-spreadsheet-TableStylePicker";
60101
58140
  static components = { TableStylesPopover, TableStylePreview };
@@ -60139,19 +58178,6 @@ stores.inject(MyMetaStore, storeInstance);
60139
58178
  }
60140
58179
  }
60141
58180
 
60142
- css /* scss */ `
60143
- .o-table-panel {
60144
- input.o-table-n-of-headers {
60145
- width: 14px;
60146
- text-align: center;
60147
- }
60148
-
60149
- .o-info-icon {
60150
- width: 14px;
60151
- height: 14px;
60152
- }
60153
- }
60154
- `;
60155
58181
  class TablePanel extends owl.Component {
60156
58182
  static template = "o-spreadsheet-TablePanel";
60157
58183
  static components = { TableStylePicker, SelectionInput, ValidationMessages, Checkbox, Section };
@@ -60303,19 +58329,6 @@ stores.inject(MyMetaStore, storeInstance);
60303
58329
  }
60304
58330
  }
60305
58331
 
60306
- css /* scss */ `
60307
- .o-table-style-editor-panel {
60308
- .o-table-style-list-item {
60309
- margin: 2px 7px;
60310
- padding: 6px 9px;
60311
-
60312
- .o-table-style-edit-template-preview {
60313
- width: 71px;
60314
- height: 51px;
60315
- }
60316
- }
60317
- }
60318
- `;
60319
58332
  const DEFAULT_TABLE_STYLE_COLOR = "#3C78D8";
60320
58333
  class TableStyleEditorPanel extends owl.Component {
60321
58334
  static template = "o-spreadsheet-TableStyleEditorPanel";
@@ -60750,15 +58763,6 @@ stores.inject(MyMetaStore, storeInstance);
60750
58763
 
60751
58764
  const SIZE = 3;
60752
58765
  const COLOR = "#777";
60753
- css /* scss */ `
60754
- .o-table-resizer {
60755
- width: ${SIZE * 2}px;
60756
- height: ${SIZE * 2}px;
60757
- border-bottom: ${SIZE}px solid ${COLOR};
60758
- border-right: ${SIZE}px solid ${COLOR};
60759
- cursor: nwse-resize;
60760
- }
60761
- `;
60762
58766
  class TableResizer extends owl.Component {
60763
58767
  static template = "o-spreadsheet-TableResizer";
60764
58768
  static props = { table: Object };
@@ -61575,43 +59579,6 @@ stores.inject(MyMetaStore, storeInstance);
61575
59579
  }
61576
59580
  }
61577
59581
 
61578
- css /* scss */ `
61579
- .o_pivot_html_renderer {
61580
- width: 100%;
61581
- border-collapse: collapse;
61582
-
61583
- &:hover {
61584
- cursor: pointer;
61585
- }
61586
-
61587
- td,
61588
- th {
61589
- border: 1px solid #dee2e6;
61590
- background-color: #fff;
61591
- padding: 0.3rem;
61592
- white-space: nowrap;
61593
-
61594
- &:hover {
61595
- filter: brightness(0.9);
61596
- }
61597
- }
61598
-
61599
- td {
61600
- text-align: right;
61601
- }
61602
-
61603
- th {
61604
- background-color: #f5f5f5;
61605
- font-weight: bold;
61606
- color: black;
61607
- }
61608
-
61609
- .o_missing_value {
61610
- color: #46646d;
61611
- background: #e7f2f6;
61612
- }
61613
- }
61614
- `;
61615
59582
  class PivotHTMLRenderer extends owl.Component {
61616
59583
  static template = "o_spreadsheet.PivotHTMLRenderer";
61617
59584
  static components = { Checkbox };
@@ -74912,7 +72879,10 @@ stores.inject(MyMetaStore, storeInstance);
74912
72879
  return "Success" /* CommandResult.Success */;
74913
72880
  }
74914
72881
  checkArrayFormulaInSortZone({ sheetId, zone }) {
74915
- const arrayFormulaInZone = positions(zone).some(({ col, row }) => this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row }));
72882
+ const arrayFormulaInZone = positions(zone).some(({ col, row }) => {
72883
+ const originPosition = this.getters.getArrayFormulaSpreadingOn({ sheetId, col, row });
72884
+ return originPosition && !deepEquals(originPosition, { sheetId, col, row });
72885
+ });
74916
72886
  return arrayFormulaInZone ? "SortZoneWithArrayFormulas" /* CommandResult.SortZoneWithArrayFormulas */ : "Success" /* CommandResult.Success */;
74917
72887
  }
74918
72888
  /**
@@ -77625,13 +75595,10 @@ stores.inject(MyMetaStore, storeInstance);
77625
75595
  const deltaCol = isBasedBefore && isCol ? thickness : 0;
77626
75596
  const deltaRow = isBasedBefore && !isCol ? thickness : 0;
77627
75597
  const toRemove = isBasedBefore ? cmd.elements.map((el) => el + thickness) : cmd.elements;
77628
- const originalSize = Object.fromEntries(toRemove.map((element) => {
77629
- const size = isCol
77630
- ? this.getters.getColSize(cmd.sheetId, element)
77631
- : this.getters.getUserRowSize(cmd.sheetId, element);
77632
- const isDefaultCol = isCol && size === DEFAULT_CELL_WIDTH;
77633
- return [element, isDefaultCol ? undefined : size];
77634
- }));
75598
+ const originalSize = {};
75599
+ for (const element of toRemove) {
75600
+ originalSize[element] = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, element);
75601
+ }
77635
75602
  const target = [
77636
75603
  {
77637
75604
  left: isCol ? start + deltaCol : 0,
@@ -77675,11 +75642,11 @@ stores.inject(MyMetaStore, storeInstance);
77675
75642
  for (const element of toRemove) {
77676
75643
  const size = originalSize[element];
77677
75644
  const currentSize = this.getters.getHeaderSize(cmd.sheetId, cmd.dimension, currentIndex);
77678
- if (size && size !== currentSize) {
75645
+ if (size !== currentSize) {
77679
75646
  resizingGroups[size] ??= [];
77680
75647
  resizingGroups[size].push(currentIndex);
77681
- currentIndex += 1;
77682
75648
  }
75649
+ currentIndex += 1;
77683
75650
  }
77684
75651
  for (const size in resizingGroups) {
77685
75652
  this.dispatch("RESIZE_COLUMNS_ROWS", {
@@ -80598,11 +78565,6 @@ stores.inject(MyMetaStore, storeInstance);
80598
78565
  { transform: "scale(0.8)", offset: 0.33 },
80599
78566
  { opacity: "0", transform: "scale(1)", offset: 1 },
80600
78567
  ];
80601
- css /* scss */ `
80602
- .o-ripple {
80603
- z-index: 1;
80604
- }
80605
- `;
80606
78568
  class RippleEffect extends owl.Component {
80607
78569
  static template = "o-spreadsheet-RippleEffect";
80608
78570
  static props = {
@@ -80774,59 +78736,6 @@ stores.inject(MyMetaStore, storeInstance);
80774
78736
  }
80775
78737
  }
80776
78738
 
80777
- css /* scss */ `
80778
- .o-sheet {
80779
- padding: 0 15px;
80780
- padding-right: 10px;
80781
- height: ${DESKTOP_BOTTOMBAR_HEIGHT}px;
80782
- border-left: 1px solid #c1c1c1;
80783
- border-right: 1px solid #c1c1c1;
80784
- margin-left: -1px;
80785
- cursor: pointer;
80786
- &:hover {
80787
- background-color: rgba(0, 0, 0, 0.08);
80788
- }
80789
-
80790
- &.active {
80791
- color: ${ACTION_COLOR};
80792
- background-color: #ffffff;
80793
- box-shadow: 0 1px 3px 1px rgba(60, 64, 67, 0.15);
80794
- }
80795
-
80796
- .o-sheet-icon {
80797
- z-index: 1;
80798
-
80799
- &:hover {
80800
- background-color: rgba(0, 0, 0, 0.08);
80801
- }
80802
- }
80803
-
80804
- .o-sheet-name {
80805
- outline: none;
80806
- padding: 2px 4px;
80807
-
80808
- &.o-sheet-name-editable {
80809
- border-radius: 2px;
80810
- border: 2px solid mediumblue;
80811
- /* negative margins so nothing moves when the border is added */
80812
- margin-left: -2px;
80813
- margin-right: -2px;
80814
- }
80815
- }
80816
-
80817
- .o-sheet-color {
80818
- bottom: 0;
80819
- left: 0;
80820
- height: 6px;
80821
- z-index: 1;
80822
- width: calc(100% - 1px);
80823
- }
80824
- }
80825
-
80826
- .o-spreadshet-mobile .o-sheet {
80827
- height: ${MOBILE_BOTTOMBAR_HEIGHT}px;
80828
- }
80829
- `;
80830
78739
  class BottomBarSheet extends owl.Component {
80831
78740
  static template = "o-spreadsheet-BottomBarSheet";
80832
78741
  static props = {
@@ -81106,20 +79015,6 @@ stores.inject(MyMetaStore, storeInstance);
81106
79015
  }
81107
79016
  }
81108
79017
 
81109
- // -----------------------------------------------------------------------------
81110
- // SpreadSheet
81111
- // -----------------------------------------------------------------------------
81112
- css /* scss */ `
81113
- .o-selection-statistic {
81114
- margin-right: 20px;
81115
- padding: 4px 4px 4px 8px;
81116
- color: #333;
81117
- cursor: pointer;
81118
- &:hover {
81119
- background-color: rgba(0, 0, 0, 0.08) !important;
81120
- }
81121
- }
81122
- `;
81123
79018
  class BottomBarStatistic extends owl.Component {
81124
79019
  static template = "o-spreadsheet-BottomBarStatistic";
81125
79020
  static props = {
@@ -81176,77 +79071,6 @@ stores.inject(MyMetaStore, storeInstance);
81176
79071
  // SpreadSheet
81177
79072
  // -----------------------------------------------------------------------------
81178
79073
  const MENU_MAX_HEIGHT = 250;
81179
- css /* scss */ `
81180
- .o-spreadsheet-bottom-bar {
81181
- background-color: ${BACKGROUND_GRAY_COLOR};
81182
- padding-left: ${HEADER_WIDTH}px;
81183
- font-size: 15px;
81184
- border-top: 1px solid lightgrey;
81185
-
81186
- .o-sheet-item {
81187
- cursor: pointer;
81188
- &:hover {
81189
- background-color: rgba(0, 0, 0, 0.08);
81190
- }
81191
- }
81192
-
81193
- .o-all-sheets {
81194
- max-width: 70%;
81195
- .o-bottom-bar-fade-out {
81196
- background-image: linear-gradient(-90deg, #cfcfcf, transparent 1%);
81197
- }
81198
-
81199
- .o-bottom-bar-fade-in {
81200
- z-index: 1;
81201
- background-image: linear-gradient(90deg, #cfcfcf, transparent 1%);
81202
- }
81203
-
81204
- .o-sheet-list {
81205
- overflow-y: hidden;
81206
- overflow-x: auto;
81207
-
81208
- &::-webkit-scrollbar {
81209
- display: none; /* Chrome */
81210
- }
81211
- -ms-overflow-style: none; /* IE and Edge */
81212
- scrollbar-width: none; /* Firefox */
81213
- }
81214
- }
81215
-
81216
- .o-bottom-bar-arrows {
81217
- .o-bottom-bar-arrow {
81218
- cursor: pointer;
81219
- &:hover:not([class*="o-disabled"]) {
81220
- .o-icon {
81221
- opacity: 0.9;
81222
- }
81223
- }
81224
-
81225
- .o-icon {
81226
- height: 18px;
81227
- width: 18px;
81228
- font-size: 18px;
81229
- }
81230
- }
81231
- }
81232
- }
81233
-
81234
- .o-spreadsheet-mobile .o-spreadsheet-bottom-bar {
81235
- padding-left: 0;
81236
-
81237
- .add-sheet-container {
81238
- order: 2;
81239
- }
81240
-
81241
- .o-add-sheet {
81242
- margin-left: 0.5rem;
81243
- }
81244
-
81245
- .o-all-sheets {
81246
- max-width: none;
81247
- }
81248
- }
81249
- `;
81250
79074
  class BottomBar extends owl.Component {
81251
79075
  static template = "o-spreadsheet-BottomBar";
81252
79076
  static props = { onClick: Function };
@@ -81502,12 +79326,6 @@ stores.inject(MyMetaStore, storeInstance);
81502
79326
  }
81503
79327
  }
81504
79328
 
81505
- css /* scss */ `
81506
- .o-dashboard-clickable-cell {
81507
- position: absolute;
81508
- cursor: pointer;
81509
- }
81510
- `;
81511
79329
  class SpreadsheetDashboard extends owl.Component {
81512
79330
  static template = "o-spreadsheet-SpreadsheetDashboard";
81513
79331
  static props = { getGridSize: Function };
@@ -81599,27 +79417,6 @@ stores.inject(MyMetaStore, storeInstance);
81599
79417
  }
81600
79418
  }
81601
79419
 
81602
- css /* scss */ `
81603
- .o-header-group {
81604
- .o-header-group-header {
81605
- z-index: ${ComponentsImportance.HeaderGroupingButton};
81606
- .o-group-fold-button {
81607
- cursor: pointer;
81608
- width: 15px;
81609
- height: 15px;
81610
- border: 1px solid ${HEADER_GROUPING_BORDER_COLOR};
81611
- .o-icon {
81612
- width: 7px;
81613
- height: 7px;
81614
- }
81615
-
81616
- &:hover {
81617
- border-color: #777;
81618
- }
81619
- }
81620
- }
81621
- }
81622
- `;
81623
79420
  class AbstractHeaderGroup extends owl.Component {
81624
79421
  static template = "o-spreadsheet-HeaderGroup";
81625
79422
  static props = {
@@ -81770,27 +79567,6 @@ stores.inject(MyMetaStore, storeInstance);
81770
79567
  }
81771
79568
  }
81772
79569
 
81773
- css /* scss */ `
81774
- .o-header-group-frozen-pane-border {
81775
- &.o-group-rows {
81776
- margin-top: -1px;
81777
- border-bottom: 3px solid ${FROZEN_PANE_HEADER_BORDER_COLOR};
81778
- }
81779
- &.o-group-columns {
81780
- margin-left: -1px;
81781
- border-right: 3px solid ${FROZEN_PANE_HEADER_BORDER_COLOR};
81782
- }
81783
- }
81784
-
81785
- .o-header-group-main-pane {
81786
- &.o-group-rows {
81787
- margin-top: -2px; /* Counteract o-header-group-frozen-pane-border offset */
81788
- }
81789
- &.o-group-columns {
81790
- margin-left: -2px;
81791
- }
81792
- }
81793
- `;
81794
79570
  class HeaderGroupContainer extends owl.Component {
81795
79571
  static template = "o-spreadsheet-HeaderGroupContainer";
81796
79572
  static props = {
@@ -81869,121 +79645,6 @@ stores.inject(MyMetaStore, storeInstance);
81869
79645
  };
81870
79646
  }
81871
79647
 
81872
- css /* scss */ `
81873
- .o-sidePanel {
81874
- display: flex;
81875
- flex-direction: column;
81876
- overflow-x: hidden;
81877
- background-color: white;
81878
- border: solid ${GRAY_300};
81879
- border-width: 1px 0 0 1px;
81880
- user-select: none;
81881
- color: ${TEXT_BODY};
81882
-
81883
- &.collapsed {
81884
- padding: 8px;
81885
- cursor: pointer;
81886
-
81887
- .o-sidePanelTitle {
81888
- writing-mode: vertical-rl;
81889
- text-orientation: mixed;
81890
- }
81891
- }
81892
-
81893
- .o-sidePanelTitle {
81894
- line-height: 20px;
81895
- font-size: 16px;
81896
- }
81897
-
81898
- .o-sidePanelHeader {
81899
- padding: 8px;
81900
- border-bottom: 1px solid ${GRAY_300};
81901
- }
81902
-
81903
- .o-sidePanelAction {
81904
- padding: 5px 10px;
81905
- cursor: pointer;
81906
-
81907
- &.active {
81908
- background-color: ${BUTTON_ACTIVE_BG};
81909
- }
81910
-
81911
- &:hover {
81912
- background-color: ${BUTTON_HOVER_BG};
81913
- }
81914
- }
81915
- .o-sidePanelBody-container {
81916
- /* This overwrites the min-height: auto; of flex. Without this, a flex div cannot be smaller than its children */
81917
- min-height: 0;
81918
- }
81919
- .o-sidePanelBody {
81920
- overflow: auto;
81921
- width: 100%;
81922
- height: 100%;
81923
-
81924
- .o-section {
81925
- padding: 16px;
81926
-
81927
- .o-section-title {
81928
- font-weight: 500;
81929
- margin-bottom: 5px;
81930
- }
81931
-
81932
- .o-section-subtitle {
81933
- font-weight: 500;
81934
- font-size: 13px;
81935
- line-height: 14px;
81936
- margin: 8px 0 4px 0;
81937
- }
81938
-
81939
- .o-subsection-left {
81940
- display: inline-block;
81941
- width: 47%;
81942
- margin-right: 3%;
81943
- }
81944
-
81945
- .o-subsection-right {
81946
- display: inline-block;
81947
- width: 47%;
81948
- margin-left: 3%;
81949
- }
81950
- }
81951
-
81952
- .o-sidePanel-composer {
81953
- color: ${TEXT_BODY};
81954
- }
81955
- }
81956
-
81957
- .o-sidePanelButtons {
81958
- display: flex;
81959
- gap: 8px;
81960
- }
81961
-
81962
- .o-invalid {
81963
- border-width: 2px;
81964
- border-color: red;
81965
- }
81966
-
81967
- .o-sidePanel-handle-container {
81968
- width: 8px;
81969
- position: fixed;
81970
- top: 50%;
81971
- z-index: 1;
81972
- }
81973
- .o-sidePanel-handle {
81974
- cursor: col-resize;
81975
- color: #a9a9a9;
81976
- .o-icon {
81977
- height: 25px;
81978
- margin-left: -5px;
81979
- }
81980
- }
81981
- }
81982
-
81983
- .o-fw-bold {
81984
- font-weight: 500;
81985
- }
81986
- `;
81987
79648
  class SidePanel extends owl.Component {
81988
79649
  static template = "o-spreadsheet-SidePanel";
81989
79650
  static props = {
@@ -82158,11 +79819,6 @@ stores.inject(MyMetaStore, storeInstance);
82158
79819
  }
82159
79820
  }
82160
79821
 
82161
- css `
82162
- .o-small-composer {
82163
- z-index: ${ComponentsImportance.TopBarComposer};
82164
- }
82165
- `;
82166
79822
  class SmallBottomBar extends owl.Component {
82167
79823
  static components = { Composer, BottomBar, Ripple, RibbonMenu };
82168
79824
  static template = "o-spreadsheet-SmallBottomBar";
@@ -82250,36 +79906,12 @@ stores.inject(MyMetaStore, storeInstance);
82250
79906
 
82251
79907
  const COMPOSER_MAX_HEIGHT = 300;
82252
79908
  /* svg free of use from https://uxwing.com/formula-fx-icon/ */
82253
- const FX_SVG = /*xml*/ `
82254
- <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
82255
- <path 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='#BDBDBD'/>
82256
- </svg>
82257
- `;
82258
- css /* scss */ `
82259
- .o-topbar-composer-container {
82260
- height: ${DESKTOP_TOPBAR_TOOLBAR_HEIGHT}px;
82261
- }
82262
-
82263
- .o-topbar-composer {
82264
- height: fit-content;
82265
- margin-top: -1px;
82266
- margin-bottom: -1px;
82267
- border: 1px solid;
82268
- font-family: ${DEFAULT_FONT};
82269
-
82270
- /* In readonly we always show the fx icon if the composer is empty, not matter the focus */
82271
- .o-composer:empty:not(:focus):not(.active)::before,
82272
- &.o-topbar-composer-readonly .o-composer:empty::before {
82273
- content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
82274
- position: relative;
82275
- top: 20%;
82276
- }
82277
- }
82278
-
82279
- .user-select-text {
82280
- user-select: text;
82281
- }
82282
- `;
79909
+ // FIXME This svg is hardcoded in the css file. We should find a better way to handle it.
79910
+ // const FX_SVG = /*xml*/ `
79911
+ // <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 121.8 122.9' width='16' height='16' focusable='false'>
79912
+ // <path 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='#BDBDBD'/>
79913
+ // </svg>
79914
+ // `;
82283
79915
  class TopBarComposer extends owl.Component {
82284
79916
  static template = "o-spreadsheet-TopBarComposer";
82285
79917
  static props = {};
@@ -82315,18 +79947,6 @@ stores.inject(MyMetaStore, storeInstance);
82315
79947
  style.height = this.focus === "inactive" ? `${DESKTOP_TOPBAR_TOOLBAR_HEIGHT}px` : "fit-content";
82316
79948
  return cssPropertiesToCss(style);
82317
79949
  }
82318
- get containerStyle() {
82319
- if (this.focus === "inactive") {
82320
- return cssPropertiesToCss({
82321
- "border-color": SEPARATOR_COLOR,
82322
- "border-right": "none",
82323
- });
82324
- }
82325
- return cssPropertiesToCss({
82326
- "border-color": SELECTION_BORDER_COLOR,
82327
- "z-index": String(ComponentsImportance.TopBarComposer),
82328
- });
82329
- }
82330
79950
  onFocus(selection) {
82331
79951
  this.composerFocusStore.focusComposer(this.composerInterface, { selection });
82332
79952
  }
@@ -82416,79 +80036,6 @@ stores.inject(MyMetaStore, storeInstance);
82416
80036
  // -----------------------------------------------------------------------------
82417
80037
  // Border Editor
82418
80038
  // -----------------------------------------------------------------------------
82419
- css /* scss */ `
82420
- .o-border-selector {
82421
- padding: 4px;
82422
- background-color: white;
82423
-
82424
- .o-divider {
82425
- border-right: 1px solid ${GRAY_300};
82426
- margin: 0 6px;
82427
- }
82428
-
82429
- .o-border-selector-section {
82430
- .o-dropdown-line {
82431
- height: 30px;
82432
- margin: 1px;
82433
- .o-line-item {
82434
- padding: 4px;
82435
- width: 26px;
82436
- height: 26px;
82437
- &.active {
82438
- background-color: ${BUTTON_ACTIVE_BG};
82439
- }
82440
- }
82441
- }
82442
- .o-border-style-tool {
82443
- padding: 0px 3px;
82444
- margin: 2px;
82445
- height: 25px;
82446
- }
82447
- }
82448
- }
82449
-
82450
- .o-border-style-dropdown {
82451
- background: #ffffff;
82452
- padding: 4px;
82453
- .o-dropdown-line {
82454
- }
82455
- .o-style-preview {
82456
- margin: 7px 5px 7px 5px;
82457
- width: 60px;
82458
- height: 5px;
82459
- }
82460
- .o-style-thin {
82461
- border-bottom: 1px solid #000000;
82462
- }
82463
- .o-style-medium {
82464
- border-bottom: 2px solid #000000;
82465
- }
82466
- .o-style-thick {
82467
- border-bottom: 3px solid #000000;
82468
- }
82469
- .o-style-dashed {
82470
- border-bottom: 1px dashed #000000;
82471
- }
82472
- .o-style-dotted {
82473
- border-bottom: 1px dotted #000000;
82474
- }
82475
- .o-dropdown-border-type {
82476
- cursor: pointer;
82477
- &:not(.o-disabled):not(.active):hover {
82478
- background-color: ${BUTTON_HOVER_BG};
82479
- }
82480
- }
82481
- .o-dropdown-border-check {
82482
- width: 20px;
82483
- font-size: 12px;
82484
- }
82485
- .o-border-picker-button {
82486
- padding: 0px !important;
82487
- margin: 5px 0px 0px 0px !important;
82488
- height: 25px !important;
82489
- }
82490
- }
82491
- `;
82492
80039
  class BorderEditor extends owl.Component {
82493
80040
  static template = "o-spreadsheet-BorderEditor";
82494
80041
  static props = {
@@ -83039,90 +80586,6 @@ stores.inject(MyMetaStore, storeInstance);
83039
80586
  // -----------------------------------------------------------------------------
83040
80587
  // TopBar
83041
80588
  // -----------------------------------------------------------------------------
83042
- css /* scss */ `
83043
- .o-topbar-divider {
83044
- border-right: 1px solid ${SEPARATOR_COLOR};
83045
- width: 0;
83046
- margin: 0 6px;
83047
- height: 30px;
83048
- }
83049
-
83050
- .o-toolbar-button {
83051
- height: 30px;
83052
- }
83053
-
83054
- .o-spreadsheet-topbar {
83055
- line-height: 1.2;
83056
- font-size: 14px;
83057
- font-weight: 500;
83058
- background-color: #fff;
83059
-
83060
- .o-topbar-top {
83061
- border-bottom: 1px solid ${SEPARATOR_COLOR};
83062
- padding: 2px 10px;
83063
-
83064
- /* Menus */
83065
- .o-topbar-topleft {
83066
- .o-topbar-menu {
83067
- padding: 4px 6px;
83068
- margin: 0 2px;
83069
-
83070
- &.active {
83071
- background-color: ${BUTTON_ACTIVE_BG};
83072
- color: ${BUTTON_ACTIVE_TEXT_COLOR};
83073
- }
83074
- }
83075
- }
83076
- }
83077
-
83078
- .irregularity-map {
83079
- border-top: 1px solid ${SEPARATOR_COLOR};
83080
- height: ${DESKTOP_TOPBAR_TOOLBAR_HEIGHT}px;
83081
-
83082
- .alert-info {
83083
- border-left: 3px solid ${ALERT_INFO_BORDER};
83084
- }
83085
- }
83086
-
83087
- .o-topbar-composer {
83088
- flex-grow: 1;
83089
- }
83090
-
83091
- /* Toolbar */
83092
- .o-topbar-toolbar {
83093
- height: ${DESKTOP_TOPBAR_TOOLBAR_HEIGHT}px;
83094
-
83095
- .o-readonly-toolbar {
83096
- background-color: ${BACKGROUND_HEADER_COLOR};
83097
- padding-left: 18px;
83098
- padding-right: 18px;
83099
- }
83100
-
83101
- /* Toolbar */
83102
- .o-toolbar-tools {
83103
- cursor: default;
83104
- }
83105
- }
83106
- }
83107
-
83108
- .o-spreadsheet-mobile {
83109
- .o-topbar-toolbar {
83110
- height: ${MOBILE_TOPBAR_TOOLBAR_HEIGHT}px;
83111
- }
83112
- .o-topbar-divider {
83113
- border-width: 2px;
83114
- border-radius: 4px;
83115
- }
83116
-
83117
- .o-toolbar-button {
83118
- height: 35px;
83119
- width: 31px;
83120
- .o-toolbar-button.o-mobile-disabled * {
83121
- color: ${DISABLED_TEXT_COLOR};
83122
- cursor: not-allowed;
83123
- }
83124
- }
83125
- `;
83126
80589
  class TopBar extends owl.Component {
83127
80590
  static template = "o-spreadsheet-TopBar";
83128
80591
  static props = {
@@ -83396,251 +80859,6 @@ stores.inject(MyMetaStore, storeInstance);
83396
80859
  }
83397
80860
  }
83398
80861
 
83399
- // -----------------------------------------------------------------------------
83400
- // SpreadSheet
83401
- // -----------------------------------------------------------------------------
83402
- const CARET_DOWN_SVG = /*xml*/ `
83403
- <svg xmlns='http://www.w3.org/2000/svg' width='7' height='4' viewBox='0 0 7 4'>
83404
- <polygon fill='%23374151' points='3.5 4 7 0 0 0'/>
83405
- </svg>
83406
- `;
83407
- css /* scss */ `
83408
- .o-spreadsheet {
83409
- position: relative;
83410
- display: grid;
83411
- font-size: 14px;
83412
-
83413
- .text-muted {
83414
- color: ${TEXT_BODY_MUTED} !important;
83415
- }
83416
- .o-disabled {
83417
- opacity: 0.4;
83418
- cursor: default;
83419
- pointer-events: none;
83420
- }
83421
-
83422
- &,
83423
- *,
83424
- *:before,
83425
- *:after {
83426
- /* rtl not supported ATM */
83427
- direction: ltr;
83428
- }
83429
- .o-separator {
83430
- border-bottom: ${MENU_SEPARATOR_BORDER_WIDTH}px solid ${SEPARATOR_COLOR};
83431
- margin-top: ${MENU_SEPARATOR_PADDING}px;
83432
- margin-bottom: ${MENU_SEPARATOR_PADDING}px;
83433
- }
83434
- .o-hoverable-button {
83435
- border-radius: 2px;
83436
- cursor: pointer;
83437
- .o-icon {
83438
- color: ${TEXT_BODY};
83439
- }
83440
- &:not(.o-disabled):not(.active):hover {
83441
- background-color: ${BUTTON_HOVER_BG};
83442
- color: ${BUTTON_HOVER_TEXT_COLOR};
83443
- .o-icon {
83444
- color: ${BUTTON_HOVER_TEXT_COLOR};
83445
- }
83446
- }
83447
- &.active {
83448
- background-color: ${BUTTON_ACTIVE_BG};
83449
- color: ${BUTTON_ACTIVE_TEXT_COLOR};
83450
- .o-icon {
83451
- color: ${BUTTON_ACTIVE_TEXT_COLOR};
83452
- }
83453
- }
83454
- }
83455
-
83456
- .o-grid-container {
83457
- display: grid;
83458
- background-color: ${HEADER_GROUPING_BACKGROUND_COLOR};
83459
-
83460
- .o-top-left {
83461
- border: 1px solid ${GRID_BORDER_COLOR};
83462
- margin-bottom: -1px;
83463
- margin-right: -1px;
83464
- }
83465
-
83466
- .o-column-groups {
83467
- grid-column-start: 2;
83468
- border-top: 1px solid ${GRID_BORDER_COLOR};
83469
- }
83470
-
83471
- .o-row-groups {
83472
- grid-row-start: 2;
83473
- }
83474
-
83475
- .o-group-grid {
83476
- border-top: 1px solid ${GRID_BORDER_COLOR};
83477
- border-left: 1px solid ${GRID_BORDER_COLOR};
83478
- }
83479
- }
83480
-
83481
- .o-input {
83482
- min-width: 0px;
83483
- padding: 1px 0;
83484
- width: 100%;
83485
- outline: none;
83486
- border-color: ${GRAY_300};
83487
- color: ${GRAY_900};
83488
-
83489
- &::placeholder {
83490
- opacity: 0.5;
83491
- }
83492
- &:focus {
83493
- border-color: ${ACTION_COLOR};
83494
- }
83495
- }
83496
-
83497
- select.o-input {
83498
- cursor: pointer;
83499
- border-width: 0 0 1px 0;
83500
- padding: 1px 6px 1px 0px;
83501
-
83502
- appearance: none;
83503
- -webkit-appearance: none;
83504
- -moz-appearance: none;
83505
- background: transparent url("data:image/svg+xml,${encodeURIComponent(CARET_DOWN_SVG)}")
83506
- no-repeat right center;
83507
- text-overflow: ellipsis;
83508
-
83509
- &:disabled {
83510
- color: ${DISABLED_TEXT_COLOR};
83511
- opacity: 0.4;
83512
- cursor: default;
83513
- }
83514
- }
83515
-
83516
- .o-input[type="text"] {
83517
- border-width: 0 0 1px 0;
83518
- }
83519
-
83520
- .o-input[type="number"],
83521
- .o-number-input {
83522
- border-width: 0 0 1px 0;
83523
- /* Remove number input arrows */
83524
- appearance: textfield;
83525
- &::-webkit-outer-spin-button,
83526
- &::-webkit-inner-spin-button {
83527
- -webkit-appearance: none;
83528
- margin: 0;
83529
- }
83530
- }
83531
- }
83532
-
83533
- .o-two-columns {
83534
- grid-column: 1 / 3;
83535
- }
83536
-
83537
- .o-text-icon {
83538
- vertical-align: middle;
83539
- }
83540
- `;
83541
- // -----------------------------------------------------------------------------
83542
- // GRID STYLE
83543
- // -----------------------------------------------------------------------------
83544
- css /* scss */ `
83545
- .o-grid {
83546
- position: relative;
83547
- overflow: hidden;
83548
- background-color: ${BACKGROUND_GRAY_COLOR};
83549
- &:focus {
83550
- outline: none;
83551
- }
83552
-
83553
- > canvas {
83554
- box-sizing: content-box;
83555
- border-bottom: 1px solid #e2e3e3;
83556
- border-right: 1px solid #e2e3e3;
83557
- }
83558
-
83559
- .o-grid-overlay {
83560
- position: absolute;
83561
- outline: none;
83562
- }
83563
- }
83564
-
83565
- .o-button {
83566
- border: 1px solid;
83567
- border-radius: 4px;
83568
- font-weight: 500;
83569
- font-size: 14px;
83570
- height: 32px;
83571
- line-height: 16px;
83572
- flex-grow: 1;
83573
- background-color: ${BUTTON_BG};
83574
- border: 1px solid ${GRAY_200};
83575
- color: ${TEXT_BODY};
83576
-
83577
- &:disabled {
83578
- color: ${DISABLED_TEXT_COLOR};
83579
- }
83580
-
83581
- &.primary {
83582
- background-color: ${PRIMARY_BUTTON_BG};
83583
- border-color: ${PRIMARY_BUTTON_BG};
83584
- color: #fff;
83585
- &:hover:enabled {
83586
- color: #fff;
83587
- background-color: ${PRIMARY_BUTTON_HOVER_BG};
83588
- }
83589
- &:active:enabled {
83590
- background-color: ${PRIMARY_BUTTON_ACTIVE_BG};
83591
- color: ${PRIMARY_BUTTON_BG};
83592
- }
83593
- &.o-disabled,
83594
- &:disabled {
83595
- opacity: 0.5;
83596
- }
83597
- }
83598
-
83599
- &:hover:enabled {
83600
- color: ${BUTTON_HOVER_TEXT_COLOR};
83601
- background-color: ${BUTTON_HOVER_BG};
83602
- }
83603
- &:active:enabled {
83604
- color: ${BUTTON_ACTIVE_TEXT_COLOR};
83605
- background-color: ${BUTTON_ACTIVE_BG};
83606
- }
83607
-
83608
- &.o-disabled,
83609
- &:disabled {
83610
- opacity: 0.8;
83611
- }
83612
-
83613
- &.o-button-danger:hover {
83614
- color: #ffffff;
83615
- background: ${ALERT_DANGER_BORDER};
83616
- }
83617
- }
83618
-
83619
- .o-button-link {
83620
- cursor: pointer;
83621
- text-decoration: none;
83622
- color: ${ACTION_COLOR};
83623
- font-weight: 500;
83624
- &:hover,
83625
- &:active {
83626
- color: ${ACTION_COLOR_HOVER};
83627
- }
83628
- }
83629
-
83630
- .o-button-icon {
83631
- cursor: pointer;
83632
- color: ${TEXT_BODY_MUTED};
83633
- font-weight: 500;
83634
- &:hover,
83635
- &:active {
83636
- color: ${TEXT_BODY};
83637
- }
83638
- }
83639
-
83640
- .o-spreadsheet-bottombar-wrapper {
83641
- z-index: ${ComponentsImportance.ScrollBar + 1};
83642
- }
83643
- `;
83644
80862
  class Spreadsheet extends owl.Component {
83645
80863
  static template = "o-spreadsheet-Spreadsheet";
83646
80864
  static props = {
@@ -88519,9 +85737,9 @@ stores.inject(MyMetaStore, storeInstance);
88519
85737
  exports.tokenize = tokenize;
88520
85738
 
88521
85739
 
88522
- __info__.version = "19.1.0-alpha.1";
88523
- __info__.date = "2025-09-12T13:33:41.605Z";
88524
- __info__.hash = "d3e4e7b";
85740
+ __info__.version = "19.1.0-alpha.3";
85741
+ __info__.date = "2025-09-23T12:37:52.238Z";
85742
+ __info__.hash = "ce2b07a";
88525
85743
 
88526
85744
 
88527
85745
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);