@odoo/o-spreadsheet 17.2.0-alpha.5 → 17.2.0-alpha.8

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.
@@ -1,9 +1,9 @@
1
1
  <!--
2
2
  This file is generated by o-spreadsheet build tools. Do not edit it.
3
3
  @see https://github.com/odoo/o-spreadsheet
4
- @version 17.2.0-alpha.5
5
- @date 2024-02-16T14:28:32.318Z
6
- @hash 0c69dd8
4
+ @version 17.2.0-alpha.8
5
+ @date 2024-03-15T11:01:39.365Z
6
+ @hash 11cf381
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ActionButton">
@@ -53,7 +53,7 @@
53
53
  <div
54
54
  class="o-autofill-handler"
55
55
  t-att-style="handlerStyle"
56
- t-on-mousedown="onMouseDown"
56
+ t-on-pointerdown="onMouseDown"
57
57
  t-on-dblclick="onDblClick"
58
58
  />
59
59
  <t t-set="tooltip" t-value="getTooltip()"/>
@@ -260,7 +260,7 @@
260
260
  <Ripple>
261
261
  <div
262
262
  class="o-sheet d-flex align-items-center user-select-none text-nowrap "
263
- t-on-mousedown="(ev) => this.onMouseDown(ev)"
263
+ t-on-pointerdown="(ev) => this.onMouseDown(ev)"
264
264
  t-on-contextmenu.prevent="(ev) => this.onContextMenu(ev)"
265
265
  t-ref="sheetDiv"
266
266
  t-att-style="props.style"
@@ -356,13 +356,13 @@
356
356
  <div
357
357
  class="o-gradient"
358
358
  t-on-click.stop=""
359
- t-on-mousedown="dragGradientPointer"
359
+ t-on-pointerdown="dragGradientPointer"
360
360
  t-att-style="gradientHueStyle">
361
361
  <div class="saturation w-100 h-100 position-absolute pe-none"/>
362
362
  <div class="lightness w-100 h-100 position-absolute pe-none"/>
363
363
  <div class="magnifier pe-none" t-att-style="pointerStyle"/>
364
364
  </div>
365
- <div class="o-hue-container" t-on-mousedown="dragHuePointer">
365
+ <div class="o-hue-container" t-on-pointerdown="dragHuePointer">
366
366
  <div class="o-hue-picker" t-on-click.stop=""/>
367
367
  <div class="o-hue-slider pe-none" t-att-style="sliderStyle">
368
368
  <t t-call="o-spreadsheet-Icon.TRIANGLE_UP"/>
@@ -423,15 +423,15 @@
423
423
  <div
424
424
  t-ref="autoCompleteList"
425
425
  t-att-class="{
426
- 'o-autocomplete-dropdown':props.values.length }">
427
- <t t-foreach="props.values" t-as="v" t-key="v.text">
426
+ 'o-autocomplete-dropdown': props.proposals.length}">
427
+ <t t-foreach="props.proposals" t-as="proposal" t-key="proposal.text">
428
428
  <div
429
429
  class="d-flex flex-column text-start"
430
- t-att-class="{'o-autocomplete-value-focus': props.selectedIndex === v_index}"
431
- t-on-click="() => this.props.onValueSelected(v.text)"
432
- t-on-mousemove="() => this.props.onValueHovered(v_index)">
430
+ t-att-class="{'o-autocomplete-value-focus': props.selectedIndex === proposal_index}"
431
+ t-on-click="() => this.props.onValueSelected(proposal.text)"
432
+ t-on-pointermove="() => this.props.onValueHovered(proposal_index)">
433
433
  <div class="o-autocomplete-value text-truncate">
434
- <t t-set="htmlContent" t-value="props.getHtmlContent(v.text)"/>
434
+ <t t-set="htmlContent" t-value="proposal.htmlContent || [{ value: proposal.text}]"/>
435
435
  <span
436
436
  t-foreach="htmlContent"
437
437
  t-as="content"
@@ -443,8 +443,8 @@
443
443
  </div>
444
444
  <div
445
445
  class="o-autocomplete-description text-truncate"
446
- t-esc="v.description"
447
- t-if="props.selectedIndex === v_index"
446
+ t-esc="proposal.description"
447
+ t-if="props.selectedIndex === proposal_index"
448
448
  />
449
449
  </div>
450
450
  </t>
@@ -464,7 +464,7 @@
464
464
  t-on-keydown="onKeydown"
465
465
  t-on-mousewheel.stop=""
466
466
  t-on-input="onInput"
467
- t-on-mousedown="onMousedown"
467
+ t-on-pointerdown="onMousedown"
468
468
  t-on-click="onClick"
469
469
  t-on-keyup="onKeyup"
470
470
  t-on-paste="onPaste"
@@ -474,20 +474,19 @@
474
474
  />
475
475
 
476
476
  <div
477
- t-if="props.focus !== 'inactive' and (autoCompleteState.showProvider or functionDescriptionState.showDescription)"
477
+ t-if="props.focus !== 'inactive' and (autoCompleteState.provider or functionDescriptionState.showDescription)"
478
478
  class="o-composer-assistant shadow"
479
479
  t-att-style="assistantStyle"
480
480
  t-on-wheel.stop=""
481
- t-on-mousedown.prevent.stop=""
481
+ t-on-pointerdown.prevent.stop=""
482
482
  t-on-click.prevent.stop=""
483
- t-on-mouseup.prevent.stop="">
483
+ t-on-pointerup.prevent.stop="">
484
484
  <TextValueProvider
485
- t-if="autoCompleteState.showProvider"
486
- values="autoCompleteState.values"
485
+ t-if="autoCompleteState.provider"
486
+ proposals="autoCompleteState.provider.proposals"
487
487
  selectedIndex="autoCompleteState.selectedIndex"
488
488
  onValueSelected.bind="this.autoComplete"
489
489
  onValueHovered.bind="this.updateAutoCompleteIndex"
490
- getHtmlContent="autoCompleteState.getHtmlContent"
491
490
  />
492
491
  <FunctionDescriptionProvider
493
492
  t-if="functionDescriptionState.showDescription"
@@ -510,7 +509,7 @@
510
509
  <div
511
510
  class="o-formula-assistant bg-white"
512
511
  t-if="context.functionName"
513
- t-on-mousemove="onMouseMove"
512
+ t-on-pointermove="onMouseMove"
514
513
  t-att-class="{'opacity-25': assistantState.allowCellSelectionBehind}">
515
514
  <div class="o-formula-assistant-head">
516
515
  <span t-esc="context.functionName"/>
@@ -664,6 +663,10 @@
664
663
  <canvas class="o-figure-canvas w-100 h-100" t-att-style="canvasStyle" t-ref="graphContainer"/>
665
664
  </t>
666
665
 
666
+ <t t-name="o-spreadsheet-GaugeChartComponent">
667
+ <canvas class="o-figure-canvas w-100 h-100" t-ref="chartContainer"/>
668
+ </t>
669
+
667
670
  <t t-name="o-spreadsheet-ScorecardChart">
668
671
  <canvas class="o-figure-canvas w-100 h-100" t-ref="chartContainer"/>
669
672
  </t>
@@ -672,7 +675,7 @@
672
675
  <div class="o-figure-wrapper pe-auto" t-att-style="wrapperStyle">
673
676
  <div
674
677
  class="o-figure w-100 h-100"
675
- t-on-mousedown.stop="(ev) => this.onMouseDown(ev)"
678
+ t-on-pointerdown.stop="(ev) => this.onMouseDown(ev)"
676
679
  t-on-contextmenu.prevent.stop="(ev) => !env.model.getters.isReadonly() and this.onContextMenu(ev)"
677
680
  t-ref="figure"
678
681
  t-att-style="props.style"
@@ -708,42 +711,42 @@
708
711
  <div
709
712
  class="o-fig-anchor o-top"
710
713
  t-att-style="this.getResizerPosition('top')"
711
- t-on-mousedown="(ev) => this.clickAnchor(0,-1, ev)"
714
+ t-on-pointerdown="(ev) => this.clickAnchor(0,-1, ev)"
712
715
  />
713
716
  <div
714
717
  class="o-fig-anchor o-topRight"
715
718
  t-att-style="this.getResizerPosition('top right')"
716
- t-on-mousedown="(ev) => this.clickAnchor(1,-1, ev)"
719
+ t-on-pointerdown="(ev) => this.clickAnchor(1,-1, ev)"
717
720
  />
718
721
  <div
719
722
  class="o-fig-anchor o-right"
720
723
  t-att-style="this.getResizerPosition('right')"
721
- t-on-mousedown="(ev) => this.clickAnchor(1,0, ev)"
724
+ t-on-pointerdown="(ev) => this.clickAnchor(1,0, ev)"
722
725
  />
723
726
  <div
724
727
  class="o-fig-anchor o-bottomRight"
725
728
  t-att-style="this.getResizerPosition('bottom right')"
726
- t-on-mousedown="(ev) => this.clickAnchor(1,1, ev)"
729
+ t-on-pointerdown="(ev) => this.clickAnchor(1,1, ev)"
727
730
  />
728
731
  <div
729
732
  class="o-fig-anchor o-bottom"
730
733
  t-att-style="this.getResizerPosition('bottom')"
731
- t-on-mousedown="(ev) => this.clickAnchor(0,1, ev)"
734
+ t-on-pointerdown="(ev) => this.clickAnchor(0,1, ev)"
732
735
  />
733
736
  <div
734
737
  class="o-fig-anchor o-bottomLeft"
735
738
  t-att-style="this.getResizerPosition('bottom left')"
736
- t-on-mousedown="(ev) => this.clickAnchor(-1,1, ev)"
739
+ t-on-pointerdown="(ev) => this.clickAnchor(-1,1, ev)"
737
740
  />
738
741
  <div
739
742
  class="o-fig-anchor o-left"
740
743
  t-att-style="this.getResizerPosition('left')"
741
- t-on-mousedown="(ev) => this.clickAnchor(-1,0, ev)"
744
+ t-on-pointerdown="(ev) => this.clickAnchor(-1,0, ev)"
742
745
  />
743
746
  <div
744
747
  class="o-fig-anchor o-topLeft"
745
748
  t-att-style="this.getResizerPosition('top left')"
746
- t-on-mousedown="(ev) => this.clickAnchor(-1,-1, ev)"
749
+ t-on-pointerdown="(ev) => this.clickAnchor(-1,-1, ev)"
747
750
  />
748
751
  </t>
749
752
  </div>
@@ -803,7 +806,7 @@
803
806
  </t>
804
807
 
805
808
  <t t-name="o-spreadsheet-FilterIcon">
806
- <div class="o-filter-icon" t-on-click.stop="onClick">
809
+ <div class="o-filter-icon" t-att-class="iconClass" t-on-click.stop="onClick">
807
810
  <t t-if="isFilterActive" t-call="o-spreadsheet-Icon.FILTER_ICON_ACTIVE"/>
808
811
  <t t-else="" t-call="o-spreadsheet-Icon.FILTER_ICON"/>
809
812
  </div>
@@ -883,7 +886,7 @@
883
886
  <t t-name="o-spreadsheet-FilterMenuValueItem">
884
887
  <div
885
888
  t-on-click="this.props.onClick"
886
- t-on-mousemove="this.props.onMouseMove"
889
+ t-on-pointermove="this.props.onMouseMove"
887
890
  class="o-filter-menu-item o-filter-menu-value"
888
891
  t-ref="menuValueItem"
889
892
  t-att-class="{'selected': this.props.isSelected}">
@@ -910,7 +913,7 @@
910
913
  type="number"
911
914
  min="1"
912
915
  max="400"
913
- class="o-font-size bg-transparent border-0"
916
+ class="o-font-size o-number-input bg-transparent border-0"
914
917
  t-on-keydown="onInputKeydown"
915
918
  t-on-click.stop=""
916
919
  t-on-focus.stop="onInputFocused"
@@ -1004,7 +1007,7 @@
1004
1007
  <div
1005
1008
  class="o-grid-add-rows mt-2 ms-2 w-100 d-flex position-relative align-items-center"
1006
1009
  t-att-style="addRowsPosition"
1007
- t-on-mousedown.stop.prevent="">
1010
+ t-on-pointerdown.stop.prevent="">
1008
1011
  <button t-on-click="onConfirm" t-att-disabled="state.errorFlag" class="o-button">Add</button>
1009
1012
  <input
1010
1013
  type="text"
@@ -1013,7 +1016,7 @@
1013
1016
  value="100"
1014
1017
  t-on-click.stop=""
1015
1018
  t-on-keydown.stop="onKeydown"
1016
- t-on-mousedown.stop=""
1019
+ t-on-pointerdown.stop=""
1017
1020
  t-on-input.stop="onInput"
1018
1021
  />
1019
1022
  <span>more rows at the bottom</span>
@@ -1036,7 +1039,7 @@
1036
1039
  class="o-grid-overlay overflow-hidden"
1037
1040
  t-att-class="{'o-paint-format-cursor': isPaintingFormat}"
1038
1041
  t-att-style="style"
1039
- t-on-mousedown="onMouseDown"
1042
+ t-on-pointerdown="onMouseDown"
1040
1043
  t-on-dblclick.self="onDoubleClick"
1041
1044
  t-on-contextmenu.stop.prevent="onContextMenu">
1042
1045
  <FiguresContainer onFigureDeleted="props.onFigureDeleted"/>
@@ -1162,18 +1165,18 @@
1162
1165
  <div class="o-overlay">
1163
1166
  <ColResizer onOpenContextMenu="props.onOpenContextMenu"/>
1164
1167
  <RowResizer onOpenContextMenu="props.onOpenContextMenu"/>
1165
- <div class="all" t-on-mousedown.self="selectAll"/>
1168
+ <div class="all" t-on-pointerdown.self="selectAll"/>
1166
1169
  </div>
1167
1170
  </t>
1168
1171
 
1169
1172
  <t t-name="o-spreadsheet-RowResizer">
1170
1173
  <div
1171
1174
  class="o-row-resizer"
1172
- t-on-mousemove.self="onMouseMove"
1175
+ t-on-pointermove.self="onMouseMove"
1173
1176
  t-on-mouseleave="onMouseLeave"
1174
- t-on-mousedown.self.prevent="select"
1177
+ t-on-pointerdown.self.prevent="select"
1175
1178
  t-ref="rowResizer"
1176
- t-on-mouseup.self="onMouseUp"
1179
+ t-on-pointerup.self="onMouseUp"
1177
1180
  t-on-contextmenu.self="onContextMenu"
1178
1181
  t-att-class="{'o-grab': state.waitingForMove, 'o-dragging': state.isMoving}">
1179
1182
  <div
@@ -1189,7 +1192,7 @@
1189
1192
  <t t-if="state.resizerIsActive">
1190
1193
  <div
1191
1194
  class="o-handle"
1192
- t-on-mousedown="onMouseDown"
1195
+ t-on-pointerdown="onMouseDown"
1193
1196
  t-on-dblclick="onDblClick"
1194
1197
  t-on-contextmenu.prevent=""
1195
1198
  t-attf-style="top:{{state.draggerLinePosition - 2}}px;">
@@ -1228,11 +1231,11 @@
1228
1231
  <t t-name="o-spreadsheet-ColResizer">
1229
1232
  <div
1230
1233
  class="o-col-resizer"
1231
- t-on-mousemove.self="onMouseMove"
1234
+ t-on-pointermove.self="onMouseMove"
1232
1235
  t-on-mouseleave="onMouseLeave"
1233
- t-on-mousedown.self.prevent="select"
1236
+ t-on-pointerdown.self.prevent="select"
1234
1237
  t-ref="colResizer"
1235
- t-on-mouseup.self="onMouseUp"
1238
+ t-on-pointerup.self="onMouseUp"
1236
1239
  t-on-contextmenu.self="onContextMenu"
1237
1240
  t-att-class="{'o-grab': state.waitingForMove, 'o-dragging': state.isMoving, }">
1238
1241
  <div
@@ -1248,7 +1251,7 @@
1248
1251
  <t t-if="state.resizerIsActive">
1249
1252
  <div
1250
1253
  class="o-handle"
1251
- t-on-mousedown="onMouseDown"
1254
+ t-on-pointerdown="onMouseDown"
1252
1255
  t-on-dblclick="onDblClick"
1253
1256
  t-on-contextmenu.prevent=""
1254
1257
  t-attf-style="left:{{state.draggerLinePosition - 2}}px;">
@@ -1287,7 +1290,7 @@
1287
1290
  <t t-name="o-spreadsheet-Border">
1288
1291
  <div
1289
1292
  class="o-border"
1290
- t-on-mousedown.prevent="onMouseDown"
1293
+ t-on-pointerdown.prevent="onMouseDown"
1291
1294
  t-att-style="style"
1292
1295
  t-att-class="{
1293
1296
  'o-moving': props.isMoving,
@@ -1302,7 +1305,7 @@
1302
1305
  <t t-name="o-spreadsheet-Corner">
1303
1306
  <div
1304
1307
  class="o-corner"
1305
- t-on-mousedown.prevent="onMouseDown"
1308
+ t-on-pointerdown.prevent="onMouseDown"
1306
1309
  t-att-style="style"
1307
1310
  t-att-class="{
1308
1311
  'o-resizing': props.isResizing,
@@ -2015,7 +2018,7 @@ https://fontawesome.com/license -->
2015
2018
  focusable="false"
2016
2019
  viewBox="0 0 448 512">
2017
2020
  <path
2018
- fill="#DC6965"
2021
+ fill="#E06666"
2019
2022
  t-att-style="color"
2020
2023
  d="M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"
2021
2024
  />
@@ -2024,7 +2027,7 @@ https://fontawesome.com/license -->
2024
2027
  <t t-name="o-spreadsheet-Icon.ARROW_UP">
2025
2028
  <svg class="o-cf-icon arrow-up" width="10" height="10" focusable="false" viewBox="0 0 448 512">
2026
2029
  <path
2027
- fill="#00A04A"
2030
+ fill="#6AA84F"
2028
2031
  t-att-style="color"
2029
2032
  d="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"
2030
2033
  />
@@ -2047,7 +2050,7 @@ https://fontawesome.com/license -->
2047
2050
  <t t-name="o-spreadsheet-Icon.SMILE">
2048
2051
  <svg class="o-cf-icon smile" width="10" height="10" focusable="false" viewBox="0 0 496 512">
2049
2052
  <path
2050
- fill="#00A04A"
2053
+ fill="#6AA84F"
2051
2054
  d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z"
2052
2055
  />
2053
2056
  </svg>
@@ -2063,7 +2066,7 @@ https://fontawesome.com/license -->
2063
2066
  <t t-name="o-spreadsheet-Icon.FROWN">
2064
2067
  <svg class="o-cf-icon frown" width="10" height="10" focusable="false" viewBox="0 0 496 512">
2065
2068
  <path
2066
- fill="#DC6965"
2069
+ fill="#E06666"
2067
2070
  d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z"
2068
2071
  />
2069
2072
  </svg>
@@ -2072,7 +2075,7 @@ https://fontawesome.com/license -->
2072
2075
  <t t-name="o-spreadsheet-Icon.GREEN_DOT">
2073
2076
  <svg class="o-cf-icon green-dot" width="10" height="10" focusable="false" viewBox="0 0 512 512">
2074
2077
  <path
2075
- fill="#00A04A"
2078
+ fill="#6AA84F"
2076
2079
  d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"
2077
2080
  />
2078
2081
  </svg>
@@ -2093,7 +2096,7 @@ https://fontawesome.com/license -->
2093
2096
  <t t-name="o-spreadsheet-Icon.RED_DOT">
2094
2097
  <svg class="o-cf-icon red-dot" width="10" height="10" focusable="false" viewBox="0 0 512 512">
2095
2098
  <path
2096
- fill="#DC6965"
2099
+ fill="#E06666"
2097
2100
  d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"
2098
2101
  />
2099
2102
  </svg>
@@ -2128,12 +2131,7 @@ https://fontawesome.com/license -->
2128
2131
  </svg>
2129
2132
  </t>
2130
2133
  <t t-name="o-spreadsheet-Icon.FILTER_ICON">
2131
- <svg
2132
- class="o-cf-icon filter-icon"
2133
- width="10"
2134
- height="10"
2135
- focusable="false"
2136
- viewBox="0 0 850 850">
2134
+ <svg class="o-cf-icon filter-icon" viewBox="0 0 850 850">
2137
2135
  <path
2138
2136
  fill="currentColor"
2139
2137
  d="M 339.667 681 L 510.333 681 L 510.333 595.667 L 339.667 595.667 L 339.667 681 Z M 41 169 L 41 254.333 L 809 254.333 L 809 169 L 41 169 Z M 169 467.667 L 681 467.667 L 681 382.333 L 169 382.333 L 169 467.667 Z"
@@ -2141,33 +2139,7 @@ https://fontawesome.com/license -->
2141
2139
  </svg>
2142
2140
  </t>
2143
2141
  <t t-name="o-spreadsheet-Icon.FILTER_ICON_ACTIVE">
2144
- <svg
2145
- class="o-cf-icon filter-icon-active"
2146
- width="10"
2147
- height="10"
2148
- focusable="false"
2149
- viewBox="0 0 512 512">
2150
- <path
2151
- fill="currentColor"
2152
- d="M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"
2153
- />
2154
- </svg>
2155
- </t>
2156
- <t t-name="o-spreadsheet-Icon.FILTER_ICON_INACTIVE">
2157
- <svg
2158
- class="o-cf-icon filter-icon-inactive"
2159
- width="10"
2160
- height="10"
2161
- focusable="false"
2162
- viewBox="0 0 512 512">
2163
- <path
2164
- fill="currentColor"
2165
- d="M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"
2166
- />
2167
- </svg>
2168
- </t>
2169
- <t t-name="o-spreadsheet-Icon.MENU_FILTER_ICON">
2170
- <svg class="o-icon">
2142
+ <svg class="o-cf-icon filter-icon-active" viewBox="0 0 18 18">
2171
2143
  <path
2172
2144
  fill="currentColor"
2173
2145
  d="M16.6.5H1.29C.59.5.23 1.35.73 1.85l6.1 6.1v6.8c0 .26.13.5.34.65l2.64 1.85a.79.79 0 0 0 1.25-.65V7.96l6.1-6.1A.79.79 0 0 0 16.6.51"
@@ -2316,6 +2288,30 @@ https://fontawesome.com/license -->
2316
2288
  <circle cx="2" cy="12.5" r="1"/>
2317
2289
  </svg>
2318
2290
  </t>
2291
+ <t t-name="o-spreadsheet-Icon.EDIT_TABLE">
2292
+ <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18">
2293
+ <path
2294
+ fill="currentColor"
2295
+ d="M2.5 1A1.5 1.5 0 0 0 1 2.5v11A1.5 1.5 0 0 0 2.5 15H7l1.5-1.5H7v-2.75h3.5v.75l2.25-2.25H12v-2.5h3.5v.75c.1-.2.45-.05.5.02l1 1V2.5A1.5 1.5 0 0 0 15.5 1m-13 1.5h13v2.75h-13m0 1.5h3v2.5h-3M7 6.75h3.5v2.5H7m-4.5 1.5h3v2.75h-3 M8.2 15.7v1.8h1.8l5.4-5.4-1.8-1.8-5.4 5.4Zm8.8-5.2a.5.5 0 0 0 0-.7l-1.1-1.1a.5.5 0 0 0-.7 0l-.9.9 1.8 1.8.9-.9Z"
2296
+ />
2297
+ </svg>
2298
+ </t>
2299
+ <t t-name="o-spreadsheet-Icon.DELETE_TABLE">
2300
+ <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18">
2301
+ <path
2302
+ fill="currentColor"
2303
+ d="M2.5 1A1.5 1.5 0 0 0 1 2.5v11A1.5 1.5 0 0 0 2.5 15H7l1.5-1.5H7V6.75h3.5v.75L12 9V6.75h3.5l1.5 1.5V2.5A1.5 1.5 0 0 0 15.5 1m-13 1.5h13v2.75h-13m0 1.5h3v2.5h-3m0 1.5h3v2.75h-3m10-2.25 3-3 1.5 1.5-3 3 3 3-1.5 1.5-3-3-3 3-1.5-1.5 3-3-3-3 1.5-1.5"
2304
+ />
2305
+ </svg>
2306
+ </t>
2307
+ <t t-name="o-spreadsheet-Icon.PAINT_TABLE">
2308
+ <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18">
2309
+ <path
2310
+ fill="currentColor"
2311
+ d="M2.5 1A1.5 1.5 0 0 0 1 2.5v11A1.5 1.5 0 0 0 2.5 15h5c0-.5 0-1 .5-1.5H7v-2.75h3.5v.75l2.25-2.25H12v-2.5h3.5v.75c1-.7 1.5-.4 1.5-.4V2.5A1.5 1.5 0 0 0 15.5 1m-13 1.5h13v2.75h-13m0 1.5h3v2.5h-3M7 6.75h3.5v2.5H7m-4.5 1.5h3v2.75h-3m7.5-.3c.7-.3 1.5-.1 2.1.6.6.7.8 1.4.5 1.9-.6 1.4-3.7 1.6-4 1.7l-.6.1.3-.5s.5-.8.5-2.1c0-.7.5-1.4 1.1-1.7Zm6.7-5.1a.9.9 0 0 1 1 1c-.1 1.3-2.5 3.7-4.3 5.3a3.9 3.9 0 0 0-.6-1.1c-.4-.4-.8-.7-1.3-.8 1.5-1.7 4-4.3 5.4-4.4"
2312
+ />
2313
+ </svg>
2314
+ </t>
2319
2315
 
2320
2316
  <t t-name="o-spreadsheet-LinkDisplay">
2321
2317
  <div class="o-link-tool d-flex align-items-center">
@@ -2414,6 +2410,7 @@ https://fontawesome.com/license -->
2414
2410
  t-on-scroll="onScroll"
2415
2411
  t-on-wheel.stop=""
2416
2412
  t-on-click.stop=""
2413
+ t-on-mouseover="onMouseOverMainMenu"
2417
2414
  t-on-contextmenu.prevent="">
2418
2415
  <t t-foreach="menuItemsAndSeparators" t-as="menuItem" t-key="menuItem_index">
2419
2416
  <div t-if="menuItem === 'separator'" class="o-separator"/>
@@ -2425,9 +2422,10 @@ https://fontawesome.com/license -->
2425
2422
  t-att-data-name="menuItem.id"
2426
2423
  t-on-click="(ev) => this.onClickMenu(menuItem, ev)"
2427
2424
  t-on-mouseenter="(ev) => this.onMouseEnter(menuItem, ev)"
2425
+ t-on-mouseover="(ev) => this.onMouseOver(menuItem, ev)"
2428
2426
  t-on-mouseleave="(ev) => this.onMouseLeave(menuItem)"
2429
- class="o-menu-item d-flex align-items-center"
2430
- t-att-class="{ 'o-menu-root': isMenuRoot, 'disabled': !isMenuEnabled, 'o-menu-item-active': isParentMenu(subMenu, menuItem)}"
2427
+ class="o-menu-item d-flex justify-content-between align-items-center"
2428
+ t-att-class="{'disabled': !isMenuEnabled, 'o-menu-item-active': isActive(menuItem)}"
2431
2429
  t-att-style="getColor(menuItem)">
2432
2430
  <div class="d-flex w-100">
2433
2431
  <div t-if="childrenHaveIcon" class="o-menu-item-icon align-middle">
@@ -2463,8 +2461,9 @@ https://fontawesome.com/license -->
2463
2461
  depth="props.depth + 1"
2464
2462
  maxHeight="props.maxHeight"
2465
2463
  onMenuClicked="props.onMenuClicked"
2466
- onClose="() => this.close()"
2464
+ onClose.bind="close"
2467
2465
  menuId="props.menuId"
2466
+ onMouseOver.bind="onMouseOverChildMenu"
2468
2467
  />
2469
2468
  </Popover>
2470
2469
  </t>
@@ -3143,9 +3142,13 @@ https://fontawesome.com/license -->
3143
3142
  </t>
3144
3143
 
3145
3144
  <t t-name="o-spreadsheet.Checkbox">
3146
- <label class="o-checkbox" t-att-title="props.title">
3145
+ <label
3146
+ class="o-checkbox"
3147
+ t-att-title="props.title"
3148
+ t-att-class="{'text-muted': props.disabled }">
3147
3149
  <input
3148
3150
  type="checkbox"
3151
+ t-att-disabled="props.disabled"
3149
3152
  t-att-name="props.name"
3150
3153
  t-att-checked="props.value"
3151
3154
  t-on-change="onChange"
@@ -3553,7 +3556,7 @@ https://fontawesome.com/license -->
3553
3556
  t-att-class="props.class"
3554
3557
  t-att-data-id="cf.id"
3555
3558
  t-on-click="props.onPreviewClick"
3556
- t-on-mousedown="(ev) => this.onMouseDown(ev)">
3559
+ t-on-pointerdown="(ev) => this.onMouseDown(ev)">
3557
3560
  <div class="position-relative h-100 w-100 d-flex align-items-center">
3558
3561
  <div class="o-cf-drag-handle h-100 position-absolute d-flex align-items-center text-muted">
3559
3562
  <t t-call="o-spreadsheet-Icon.THIN_DRAG_HANDLE"/>
@@ -4077,7 +4080,7 @@ https://fontawesome.com/license -->
4077
4080
  <select
4078
4081
  t-att-class="props.class"
4079
4082
  t-ref="select"
4080
- t-on-mousedown.stop.prevent=""
4083
+ t-on-pointerdown.stop.prevent=""
4081
4084
  t-on-click="onClick">
4082
4085
  <option selected="true" t-esc="props.selectedValue"/>
4083
4086
  </select>
@@ -4132,7 +4135,7 @@ https://fontawesome.com/license -->
4132
4135
  t-component="panel.Body"
4133
4136
  t-props="sidePanelStore.panelProps"
4134
4137
  onCloseSidePanel.bind="close"
4135
- t-key="'Body_' + sidePanelStore.componentTag"
4138
+ t-key="'Body_' + sidePanelStore.componentTag + sidePanelStore.panelKey"
4136
4139
  />
4137
4140
  </div>
4138
4141
  <div class="o-sidePanelFooter" t-if="panel?.Footer">
@@ -4191,6 +4194,96 @@ https://fontawesome.com/license -->
4191
4194
  </div>
4192
4195
  </t>
4193
4196
 
4197
+ <t t-name="o-spreadsheet-TablePanel">
4198
+ <div class="o-table-panel">
4199
+ <Section>
4200
+ <t t-set-slot="title">Style options</t>
4201
+ <div class="d-flex flex-row">
4202
+ <div class="w-50">
4203
+ <div class="d-flex align-items-center">
4204
+ <Checkbox
4205
+ label="getCheckboxLabel('headerRow')"
4206
+ name="'headerRow'"
4207
+ value="tableConfig.numberOfHeaders > 0"
4208
+ onChange.bind="this.updateHasHeaders"
4209
+ />
4210
+ <input
4211
+ t-if="tableConfig.numberOfHeaders > 0"
4212
+ t-att-value="tableConfig.numberOfHeaders"
4213
+ type="number"
4214
+ class="o-table-n-of-headers ms-2 o-number-input"
4215
+ t-on-change="onChangeNumberOfHeaders"
4216
+ />
4217
+ </div>
4218
+ <Checkbox
4219
+ label="getCheckboxLabel('totalRow')"
4220
+ name="'totalRow'"
4221
+ value="tableConfig.totalRow"
4222
+ onChange="(val) => this.updateTableConfig('totalRow', val)"
4223
+ />
4224
+ <Checkbox
4225
+ label="getCheckboxLabel('bandedRows')"
4226
+ name="'bandedRows'"
4227
+ value="tableConfig.bandedRows"
4228
+ onChange="(val) => this.updateTableConfig('bandedRows', val)"
4229
+ />
4230
+ <Checkbox
4231
+ label="getCheckboxLabel('hasFilters')"
4232
+ name="'hasFilters'"
4233
+ value="tableConfig.hasFilters"
4234
+ title="hasFilterCheckboxTooltip"
4235
+ disabled="!this.canHaveFilters"
4236
+ onChange.bind="this.updateHasFilters"
4237
+ />
4238
+ </div>
4239
+ <div>
4240
+ <Checkbox
4241
+ label="getCheckboxLabel('firstColumn')"
4242
+ name="'firstColumn'"
4243
+ value="tableConfig.firstColumn"
4244
+ onChange="(val) => this.updateTableConfig('firstColumn', val)"
4245
+ />
4246
+ <Checkbox
4247
+ label="getCheckboxLabel('lastColumn')"
4248
+ name="'lastColumn'"
4249
+ value="tableConfig.lastColumn"
4250
+ onChange="(val) => this.updateTableConfig('lastColumn', val)"
4251
+ />
4252
+ <Checkbox
4253
+ label="getCheckboxLabel('bandedColumns')"
4254
+ name="'bandedColumns'"
4255
+ value="tableConfig.bandedColumns"
4256
+ onChange="(val) => this.updateTableConfig('bandedColumns', val)"
4257
+ />
4258
+ </div>
4259
+ </div>
4260
+ </Section>
4261
+ <Section>
4262
+ <TableStylePicker table="props.table"/>
4263
+ </Section>
4264
+ <Section>
4265
+ <t t-set-slot="title">Data range</t>
4266
+ <SelectionInput
4267
+ t-key="props.table.id"
4268
+ ranges="[this.state.tableXc]"
4269
+ hasSingleRange="true"
4270
+ onSelectionChanged="(ranges) => this.onRangeChanged(ranges)"
4271
+ onSelectionConfirmed.bind="this.onRangeConfirmed"
4272
+ />
4273
+ <ValidationMessages messages="errorMessages" msgType="'error'"/>
4274
+ <Checkbox
4275
+ label="getCheckboxLabel('automaticAutofill')"
4276
+ name="'automaticAutofill'"
4277
+ value="tableConfig.automaticAutofill"
4278
+ onChange="(val) => this.updateTableConfig('automaticAutofill', val)"
4279
+ />
4280
+ </Section>
4281
+ <div class="o-sidePanelButtons">
4282
+ <button t-on-click="deleteTable" class="o-table-delete o-button">Delete table</button>
4283
+ </div>
4284
+ </div>
4285
+ </t>
4286
+
4194
4287
  <t t-name="o-spreadsheet-Spreadsheet">
4195
4288
  <div
4196
4289
  class="o-spreadsheet"
@@ -4218,12 +4311,91 @@ https://fontawesome.com/license -->
4218
4311
  <Grid exposeFocus="(focus) => this._focusGrid = focus"/>
4219
4312
  </div>
4220
4313
  </div>
4221
- <SidePanel t-if="sidePanel.isOpen"/>
4314
+ <SidePanel/>
4222
4315
  <BottomBar onClick="() => this.focusGrid()"/>
4223
4316
  </t>
4224
4317
  </div>
4225
4318
  </t>
4226
4319
 
4320
+ <t t-name="o-spreadsheet-TableDropdownButton">
4321
+ <div class="o-table-widget d-flex align-item-center">
4322
+ <ActionButton
4323
+ action="action"
4324
+ hasTriangleDownIcon="true"
4325
+ t-on-click="onClick"
4326
+ class="'o-hoverable-button'"
4327
+ />
4328
+ </div>
4329
+ <TableStylesPopover
4330
+ tableConfig="tableConfig"
4331
+ onStylePicked.bind="onStylePicked"
4332
+ popoverProps="state.popoverProps"
4333
+ closePopover.bind="closePopover"
4334
+ />
4335
+ </t>
4336
+
4337
+ <t t-name="o-spreadsheet-TableStylePicker">
4338
+ <div class="o-table-style-picker d-flex flew-row justify-content-between ps-1">
4339
+ <div class="d-flex flex-row overflow-hidden">
4340
+ <div
4341
+ class="o-table-style-list-item"
4342
+ t-att-class="{ 'selected': styleId === props.table.config.styleId }"
4343
+ t-foreach="getDisplayedTableStyles()"
4344
+ t-as="styleId"
4345
+ t-key="styleId"
4346
+ t-att-title="getStyleName(styleId)"
4347
+ t-on-click="() => this.onStylePicked(styleId)">
4348
+ <div class="o-table-style-picker-preview">
4349
+ <TableStylePreview tableConfig="getTableConfig(styleId)"/>
4350
+ </div>
4351
+ </div>
4352
+ </div>
4353
+ <div
4354
+ class="o-table-style-picker-arrow d-flex align-items-center px-1"
4355
+ t-on-click.stop="onArrowButtonClick">
4356
+ <t t-call="o-spreadsheet-Icon.TRIANGLE_DOWN"/>
4357
+ </div>
4358
+ </div>
4359
+ <TableStylesPopover
4360
+ tableConfig="props.table.config"
4361
+ selectedStyleId="props.table.config.styleId"
4362
+ onStylePicked.bind="onStylePicked"
4363
+ popoverProps="state.popoverProps"
4364
+ closePopover.bind="closePopover"
4365
+ />
4366
+ </t>
4367
+
4368
+ <t t-name="o-spreadsheet-TableStylePreview">
4369
+ <canvas t-ref="canvas" class="w-100 h-100"/>
4370
+ </t>
4371
+
4372
+ <t t-name="o-spreadsheet-TableStylesPopover">
4373
+ <Popover t-if="props.popoverProps" t-props="props.popoverProps">
4374
+ <div class="o-table-style-popover d-flex flex-column px-4 py-1" t-ref="tableStyleList">
4375
+ <div t-foreach="categories" t-as="category" t-key="category">
4376
+ <div class="mt-2 mb-1">
4377
+ <b t-esc="category_value"/>
4378
+ </div>
4379
+ <div class="d-flex flex-wrap">
4380
+ <div
4381
+ class="o-table-style-list-item"
4382
+ t-att-class="{ 'selected': styleId === props.selectedStyleId }"
4383
+ t-foreach="getPresetsByCategory(category)"
4384
+ t-as="styleId"
4385
+ t-key="styleId"
4386
+ t-att-title="getStyleName(styleId)"
4387
+ t-on-click="() => this.props.onStylePicked(styleId)">
4388
+ <div class="o-table-style-popover-preview">
4389
+ <TableStylePreview tableConfig="getTableConfig(styleId)"/>
4390
+ </div>
4391
+ </div>
4392
+ </div>
4393
+ <hr t-if="!category_last" class="hr mt-2 mb-0"/>
4394
+ </div>
4395
+ </div>
4396
+ </Popover>
4397
+ </t>
4398
+
4227
4399
  <t t-name="o-spreadsheet-TopBar">
4228
4400
  <t t-set="text_color">Text Color</t>
4229
4401
  <t t-set="fill_color">Fill Color</t>
@@ -4389,7 +4561,8 @@ https://fontawesome.com/license -->
4389
4561
 
4390
4562
  <div class="o-divider"/>
4391
4563
 
4392
- <ActionButton action="VIEW.createRemoveFilter" class="'o-hoverable-button'"/>
4564
+ <TableDropdownButton/>
4565
+ <ActionButton action="DATA.createRemoveFilterTool" class="'o-hoverable-button'"/>
4393
4566
  </div>
4394
4567
  </div>
4395
4568
  <TopBarComposer/>