@odoo/o-spreadsheet 18.5.0-alpha.6 → 18.5.0-alpha.7

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 18.5.0-alpha.6
5
- @date 2025-08-05T06:28:37.212Z
6
- @hash 67e091f
4
+ @version 18.5.0-alpha.7
5
+ @date 2025-08-08T11:01:32.306Z
6
+ @hash 1019d55
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
@@ -2410,7 +2410,7 @@
2410
2410
  <t t-set-slot="content">
2411
2411
  <AxisDesignEditor
2412
2412
  axesList="axesList"
2413
- figureId="props.figureId"
2413
+ chartId="props.chartId"
2414
2414
  definition="props.definition"
2415
2415
  updateChart="props.updateChart"
2416
2416
  />
@@ -2432,14 +2432,14 @@
2432
2432
 
2433
2433
  <t t-if="coloringOptions.type === 'categoryColor'">
2434
2434
  <TreeMapCategoryColors
2435
- figureId="props.figureId"
2435
+ chartId="props.chartId"
2436
2436
  definition="props.definition"
2437
2437
  onColorChanged.bind="onCategoryColorChange"
2438
2438
  />
2439
2439
  </t>
2440
2440
  <t t-else="">
2441
2441
  <TreeMapColorScale
2442
- figureId="props.figureId"
2442
+ chartId="props.chartId"
2443
2443
  definition="props.definition"
2444
2444
  onColorChanged.bind="onColorScaleChange"
2445
2445
  />
@@ -2455,13 +2455,13 @@
2455
2455
  name="'showHeaders'"
2456
2456
  label.translate="Show headers"
2457
2457
  value="showHeaders"
2458
- onChange="(showHeaders) => props.updateChart(this.props.figureId, { showHeaders })"
2458
+ onChange="(showHeaders) => props.updateChart(this.props.chartId, { showHeaders })"
2459
2459
  />
2460
2460
  </Section>
2461
2461
  <Section class="'pt-0'" t-if="showHeaders">
2462
2462
  <TextStyler
2463
2463
  class="'pt-0 o-header-style'"
2464
- updateStyle="(headerDesign) => props.updateChart(this.props.figureId, { headerDesign })"
2464
+ updateStyle="(headerDesign) => props.updateChart(this.props.chartId, { headerDesign })"
2465
2465
  style="props.definition.headerDesign || {}"
2466
2466
  defaultStyle="defaults.headerDesign"
2467
2467
  hasBackgroundColor="true"
@@ -2474,7 +2474,7 @@
2474
2474
  name="'showLabels'"
2475
2475
  label.translate="Show labels"
2476
2476
  value="showLabels"
2477
- onChange="(showLabels) => props.updateChart(this.props.figureId, { showLabels })"
2477
+ onChange="(showLabels) => props.updateChart(this.props.chartId, { showLabels })"
2478
2478
  />
2479
2479
  <ChartShowValues t-props="props" defaultValue="defaults.showValues"/>
2480
2480
  </div>
@@ -2482,7 +2482,7 @@
2482
2482
  <Section class="'pt-0'" t-if="showValues || showLabels">
2483
2483
  <TextStyler
2484
2484
  class="'pt-0 o-values-style'"
2485
- updateStyle="(valuesDesign) => props.updateChart(this.props.figureId, { valuesDesign })"
2485
+ updateStyle="(valuesDesign) => props.updateChart(this.props.chartId, { valuesDesign })"
2486
2486
  style="props.definition.valuesDesign || {}"
2487
2487
  defaultStyle="defaults.valuesDesign"
2488
2488
  hasVerticalAlign="true"
@@ -2573,7 +2573,7 @@
2573
2573
  name="'showLabels'"
2574
2574
  label.translate="Show labels"
2575
2575
  value="showLabels"
2576
- onChange="(showLabels) => props.updateChart(this.props.figureId, { showLabels })"
2576
+ onChange="(showLabels) => props.updateChart(this.props.chartId, { showLabels })"
2577
2577
  />
2578
2578
  <ChartShowValues t-props="props" defaultValue="defaults.showValues"/>
2579
2579
  </div>
@@ -2581,7 +2581,7 @@
2581
2581
  <Section class="'pt-0'" t-if="showValues || showLabels">
2582
2582
  <TextStyler
2583
2583
  class="'o-values-style'"
2584
- updateStyle="(valuesDesign) => props.updateChart(this.props.figureId, { valuesDesign })"
2584
+ updateStyle="(valuesDesign) => props.updateChart(this.props.chartId, { valuesDesign })"
2585
2585
  style="props.definition.valuesDesign || {}"
2586
2586
  defaultStyle="defaults.valuesDesign"
2587
2587
  />
@@ -2740,7 +2740,7 @@
2740
2740
  </t>
2741
2741
 
2742
2742
  <t t-name="o-spreadsheet-ChartPanel">
2743
- <div class="o-chart d-flex flex-column h-100" t-if="figureId">
2743
+ <div class="o-chart d-flex flex-column h-100" t-if="chartId">
2744
2744
  <div class="o-panel">
2745
2745
  <div
2746
2746
  class="o-panel-element o-panel-configuration"
@@ -2758,27 +2758,27 @@
2758
2758
  </div>
2759
2759
  </div>
2760
2760
 
2761
- <t t-set="definition" t-value="getChartDefinition(this.figureId)"/>
2761
+ <t t-set="definition" t-value="getChartDefinition(this.chartId)"/>
2762
2762
  <div class="o-panel-content overflow-y-auto" t-ref="panelContent">
2763
2763
  <div t-att-class="store.panel !== 'configuration' ? 'd-none' : ''">
2764
- <ChartTypePicker figureId="props.figureId" chartPanelStore="store"/>
2764
+ <ChartTypePicker chartId="chartId" chartPanelStore="store"/>
2765
2765
  <t
2766
2766
  t-component="chartPanel.configuration"
2767
2767
  definition="definition"
2768
- figureId="figureId"
2768
+ chartId="chartId"
2769
2769
  updateChart.bind="updateChart"
2770
2770
  canUpdateChart.bind="canUpdateChart"
2771
- t-key="figureId + definition.type"
2771
+ t-key="chartId + definition.type"
2772
2772
  />
2773
2773
  </div>
2774
2774
  <div t-att-class="store.panel !== 'design' ? 'd-none' : ''">
2775
2775
  <t
2776
2776
  t-component="chartPanel.design"
2777
2777
  definition="definition"
2778
- figureId="figureId"
2778
+ chartId="chartId"
2779
2779
  updateChart.bind="updateChart"
2780
2780
  canUpdateChart.bind="canUpdateChart"
2781
- t-key="figureId + definition.type"
2781
+ t-key="chartId + definition.type"
2782
2782
  />
2783
2783
  </div>
2784
2784
  </div>
@@ -2800,7 +2800,7 @@
2800
2800
  <t t-set-slot="content">
2801
2801
  <AxisDesignEditor
2802
2802
  axesList="axesList"
2803
- figureId="props.figureId"
2803
+ chartId="props.chartId"
2804
2804
  definition="props.definition"
2805
2805
  updateChart="props.updateChart"
2806
2806
  />
@@ -2957,7 +2957,7 @@
2957
2957
  <t t-name="o-spreadsheet-GeoChartConfigPanel">
2958
2958
  <div>
2959
2959
  <GeoChartRegionSelectSection
2960
- figureId="props.figureId"
2960
+ chartId="props.chartId"
2961
2961
  definition="props.definition"
2962
2962
  updateChart="props.updateChart"
2963
2963
  />
@@ -3176,7 +3176,7 @@
3176
3176
  <t t-set-slot="content">
3177
3177
  <AxisDesignEditor
3178
3178
  axesList="axesList"
3179
- figureId="props.figureId"
3179
+ chartId="props.chartId"
3180
3180
  definition="props.definition"
3181
3181
  updateChart="props.updateChart"
3182
3182
  />
@@ -3198,7 +3198,7 @@
3198
3198
  <t t-set-slot="content">
3199
3199
  <AxisDesignEditor
3200
3200
  axesList="axesList"
3201
- figureId="props.figureId"
3201
+ chartId="props.chartId"
3202
3202
  definition="props.definition"
3203
3203
  updateChart="props.updateChart"
3204
3204
  />
@@ -3632,7 +3632,7 @@
3632
3632
  name="'showValues'"
3633
3633
  label.translate="Show values"
3634
3634
  value="props.definition.showValues ?? props.defaultValue"
3635
- onChange="(showValues) => props.updateChart(this.props.figureId, { showValues })"
3635
+ onChange="(showValues) => props.updateChart(this.props.chartId, { showValues })"
3636
3636
  />
3637
3637
  </t>
3638
3638
 
@@ -3641,7 +3641,7 @@
3641
3641
  name="'showDataMarkers'"
3642
3642
  label.translate="Show data markers"
3643
3643
  value="!props.definition.hideDataMarkers"
3644
- onChange="(showDataMarkers) => props.updateChart(this.props.figureId, { hideDataMarkers: !showDataMarkers })"
3644
+ onChange="(showDataMarkers) => props.updateChart(this.props.chartId, { hideDataMarkers: !showDataMarkers })"
3645
3645
  />
3646
3646
  </t>
3647
3647
 
@@ -3989,6 +3989,62 @@
3989
3989
  </div>
3990
3990
  </t>
3991
3991
 
3992
+ <t t-name="o-spreadsheet-CarouselPanel">
3993
+ <div class="o-carousel-panel h-100 overflow-auto">
3994
+ <div class="o-carousel-preview-list overflow-auto" t-ref="previewList">
3995
+ <t t-foreach="carouselItems" t-as="item" t-key="getItemId(item)">
3996
+ <div
3997
+ class="o-carousel-preview border-bottom pe-2 position-relative w-100 d-flex align-items-center"
3998
+ t-att-class="{ 'o-dragging': dragAndDrop.draggedItemId === getItemId(item) }"
3999
+ t-att-style="getPreviewDivStyle(item)">
4000
+ <div
4001
+ class="o-drag-handle h-100 position-absolute d-flex align-items-center o-button-icon ps-1 flex-shrink-0"
4002
+ t-on-pointerdown.stop.prevent="(ev) => this.onDragHandleMouseDown(item, ev)">
4003
+ <t t-call="o-spreadsheet-Icon.THIN_DRAG_HANDLE"/>
4004
+ </div>
4005
+ <div
4006
+ class="o-carousel-preview-icon ms-3 flex-shrink-0 d-flex align-items-center justify-content-center">
4007
+ <t t-call="{{getItemPreview(item)}}"/>
4008
+ </div>
4009
+ <div class="o-carousel-preview-title text-truncate ms-2">
4010
+ <TextInput
4011
+ value="getItemTitle(item)"
4012
+ onChange="(newName) => this.renameCarouselItem(item, newName)"
4013
+ />
4014
+ </div>
4015
+ <div class="ms-auto"/>
4016
+ <div
4017
+ t-if="item.type === 'chart'"
4018
+ class="o-edit-button o-button-icon pe-2 ps-1 flex-shrink-0 fa fa-pencil"
4019
+ t-on-click.stop="(ev) => this.editCarouselItem(item, ev)"
4020
+ title="Edit chart"
4021
+ />
4022
+ <div
4023
+ class="o-delete-button o-button-icon pe-2 ps-1 flex-shrink-0"
4024
+ t-on-click.stop="(ev) => this.deleteCarouselItem(item, ev)"
4025
+ title="Remove chart">
4026
+ <t t-call="o-spreadsheet-Icon.TRASH_FILLED"/>
4027
+ </div>
4028
+ </div>
4029
+ </t>
4030
+ </div>
4031
+ <div
4032
+ class="o-button-link o-carousel-add-chart float-end d-flex align-items-center pt-4 pe-4 gap-2"
4033
+ t-on-click="addNewChartToCarousel">
4034
+ + Add chart
4035
+ <span t-att-title="carouselAddChartInfoMessage">
4036
+ <t t-call="o-spreadsheet-Icon.CIRCLE_INFO"/>
4037
+ </span>
4038
+ </div>
4039
+ <div
4040
+ t-if="!hasDataView"
4041
+ class="o-button-link o-carousel-add-data-view float-end pt-4 pe-4"
4042
+ t-on-click="addDataViewToCarousel">
4043
+ + Add data view
4044
+ </div>
4045
+ </div>
4046
+ </t>
4047
+
3992
4048
  <t t-name="o-spreadsheet-SelectionInput">
3993
4049
  <div class="o-selection" t-ref="o-selection">
3994
4050
  <div
@@ -5345,6 +5401,14 @@
5345
5401
  <i class="fa fa-download"/>
5346
5402
  </div>
5347
5403
  </t>
5404
+ <t t-name="o-spreadsheet-Icon.CAROUSEL">
5405
+ <svg class="o-icon" viewBox="0 0 122.88 99.75">
5406
+ <path
5407
+ fill="currentColor"
5408
+ d="M29.09,0h64.7A5.21,5.21,0,0,1,99,5.18v89.4a5.19,5.19,0,0,1-5.18,5.17H29.09a5.19,5.19,0,0,1-5.17-5.18V5.18A5.21,5.21,0,0,1,29.09,0Zm78.52,12.46,10.59-1.52a4.71,4.71,0,0,1,4.68,4.69v68.5a4.71,4.71,0,0,1-4.68,4.68L107.77,88a1.35,1.35,0,0,1-1.31-1.34V83.14a1.34,1.34,0,0,1,1.44-1.23l8.91.73V17.22l-9,1.34a1.34,1.34,0,0,1-1.34-1.34V13.78a1.34,1.34,0,0,1,1.15-1.32ZM5,11l10.31,1.49a1.33,1.33,0,0,1,1.14,1.32v3.44a1.34,1.34,0,0,1-1.34,1.34l-9-1.34V82.64L15,81.91a1.33,1.33,0,0,1,1.43,1.23v3.49A1.35,1.35,0,0,1,15.11,88l-10.43.84A4.71,4.71,0,0,1,0,84.13V15.63a4.73,4.73,0,0,1,4.68-4.69L5,11Zm87.93-4.9H30v87.6h62.9V6.07Z"
5409
+ />
5410
+ </svg>
5411
+ </t>
5348
5412
 
5349
5413
  <t t-name="o-spreadsheet-IconPicker">
5350
5414
  <div class="o-icon-picker">
@@ -5825,7 +5889,7 @@
5825
5889
  <t t-name="o-spreadsheet-FullScreenChart">
5826
5890
  <div
5827
5891
  class="position-absolute o-fullscreen-chart-overlay w-100 h-100 d-flex"
5828
- t-if="figureUI"
5892
+ t-if="chartId"
5829
5893
  t-on-click="exitFullScreen">
5830
5894
  <button
5831
5895
  class="o-exit top-0 end-0 position-absolute o-button primary m-1"
@@ -5839,14 +5903,9 @@
5839
5903
  t-ref="fullScreenChart"
5840
5904
  t-on-click.stop=""
5841
5905
  t-on-keydown="(ev) => this.onKeyDown(ev)">
5842
- <t
5843
- t-component="chartComponent"
5844
- figureUI="this.figureUI"
5845
- isFullScreen="true"
5846
- t-key="this.figureUI.id"
5847
- />
5906
+ <t t-component="chartComponent" chartId="chartId" isFullScreen="true" t-key="chartId"/>
5848
5907
  <div class="position-absolute top-0 end-0">
5849
- <ChartDashboardMenu figureUI="figureUI"/>
5908
+ <ChartDashboardMenu chartId="chartId"/>
5850
5909
  </div>
5851
5910
  </div>
5852
5911
  </div>
@@ -6047,6 +6106,7 @@
6047
6106
  onFigureDeleted="this.props.onFigureDeleted"
6048
6107
  figureUI="figureUI"
6049
6108
  style="getFigureStyle(figureUI)"
6109
+ class="getFigureClass(figureUI)"
6050
6110
  onMouseDown="(ev) => this.startDraggingFigure(figureUI, ev)"
6051
6111
  onClickAnchor="(dirX, dirY, ev) => this.startResize(figureUI, dirX, dirY, ev)"
6052
6112
  />
@@ -6073,21 +6133,54 @@
6073
6133
 
6074
6134
  <t t-name="o-spreadsheet-ChartFigure">
6075
6135
  <div class="o-chart-container w-100 h-100" t-on-dblclick="onDoubleClick">
6076
- <t
6077
- t-component="chartComponent"
6078
- figureUI="this.props.figureUI"
6079
- t-key="this.props.figureUI.id"
6080
- />
6136
+ <t t-component="chartComponent" chartId="chartId" t-key="chartId"/>
6081
6137
  </div>
6082
6138
  <div t-if="env.isDashboard()" class="position-absolute top-0 end-0">
6083
- <ChartDashboardMenu figureUI="props.figureUI"/>
6139
+ <ChartDashboardMenu chartId="chartId"/>
6140
+ </div>
6141
+ </t>
6142
+
6143
+ <t t-name="o-spreadsheet-CarouselFigure">
6144
+ <div class="o-carousel w-100 h-100" t-on-dblclick="onCarouselDoubleClick">
6145
+ <t t-set="selectedItem" t-value="selectedCarouselItem"/>
6146
+ <div
6147
+ class="o-carousel-header position-absolute end-0 top-0 d-flex pe-1 rounded pe-auto"
6148
+ t-att-class="{
6149
+ 'o-carousel-header-floating': !env.isDashboard() and selectedItem?.type === 'carouselDataView',
6150
+ }"
6151
+ t-att-style="headerStyle"
6152
+ t-on-pointerdown.stop="">
6153
+ <t t-foreach="carousel.items" t-as="item" t-key="item_index">
6154
+ <div
6155
+ class="o-carousel-tab text-truncate px-2 mt-1 mb-1 flex-shrink-0"
6156
+ t-att-class="{ 'selected': isItemSelected(item) }"
6157
+ t-esc="getItemTitle(item)"
6158
+ t-on-click.stop="() => this.onCarouselTabClick(item)"
6159
+ />
6160
+ </t>
6161
+ </div>
6162
+ <div
6163
+ t-if="!selectedItem"
6164
+ class="o-carousel-empty w-100 h-100 d-flex align-items-center justify-content-center">
6165
+ <t t-call="o-spreadsheet-Icon.CAROUSEL"/>
6166
+ </div>
6167
+ <div t-elif="selectedItem.type === 'chart'" class="o-carousel-content w-100 h-100">
6168
+ <div class="o-chart-container w-100 h-100">
6169
+ <t
6170
+ t-component="chartComponent"
6171
+ chartId="selectedItem.chartId"
6172
+ t-key="selectedItem.chartId"
6173
+ />
6174
+ </div>
6175
+ </div>
6084
6176
  </div>
6085
6177
  </t>
6086
6178
 
6087
6179
  <t t-name="o-spreadsheet-FigureComponent">
6088
- <div class="o-figure-wrapper pe-auto" t-att-style="wrapperStyle">
6180
+ <div class="o-figure-wrapper" t-att-style="wrapperStyle" t-ref="figureWrapper">
6089
6181
  <div
6090
6182
  class="o-figure w-100 h-100"
6183
+ t-att-class="props.class"
6091
6184
  t-on-pointerdown.stop="(ev) => this.onMouseDown(ev)"
6092
6185
  t-on-click="onClick"
6093
6186
  t-on-contextmenu.prevent.stop="(ev) => !env.model.getters.isReadonly() and this.onContextMenu(ev)"
@@ -6102,11 +6195,12 @@
6102
6195
  t-key="props.figureUI.id"
6103
6196
  onFigureDeleted="props.onFigureDeleted"
6104
6197
  figureUI="props.figureUI"
6198
+ editFigureStyle.bind="editWrapperStyle"
6105
6199
  />
6106
6200
  <div class="o-figure-menu position-absolute m-2" t-if="!env.isDashboard()">
6107
6201
  <div
6108
6202
  class="o-figure-menu-item"
6109
- t-if="!env.model.getters.isReadonly()"
6203
+ t-if="!env.model.getters.isReadonly() and props.figureUI.tag !== 'carousel'"
6110
6204
  t-on-click="showMenu"
6111
6205
  t-ref="menuButton"
6112
6206
  t-on-contextmenu.prevent.stop="showMenu">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "18.5.0-alpha.6",
3
+ "version": "18.5.0-alpha.7",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o-spreadsheet.cjs.js",