@odoo/o-spreadsheet 18.5.0-alpha.8 → 19.0.0

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.8
5
- @date 2025-08-18T08:18:48.925Z
6
- @hash 994f1cb
4
+ @version 19.0.0
5
+ @date 2025-09-11T07:19:39.737Z
6
+ @hash 0ac0e86
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
@@ -53,8 +53,13 @@
53
53
  </div>
54
54
  </div>
55
55
  <!-- Toolbar and Cell Content -->
56
- <div class="d-flex o-topbar-responsive" t-ref="toolBarContainer">
57
- <div class="o-topbar-toolbar d-flex">
56
+ <div
57
+ class="d-flex o-topbar-responsive"
58
+ t-att-class="{'o-topbar-responsive': !env.model.getters.isReadonly()}"
59
+ t-ref="toolBarContainer">
60
+ <div
61
+ class="o-topbar-toolbar d-flex"
62
+ t-att-class="{'flex-shrink-0': env.model.getters.isReadonly()}">
58
63
  <!-- Toolbar -->
59
64
  <div
60
65
  t-if="env.model.getters.isReadonly()"
@@ -215,7 +220,7 @@
215
220
  t-ref="input"
216
221
  class="os-input w-100"
217
222
  type="text"
218
- t-att-class="props.class"
223
+ t-att-class="inputClass"
219
224
  t-att-id="props.id"
220
225
  t-att-placeholder="props.placeholder"
221
226
  t-att-value="props.value"
@@ -2410,6 +2415,9 @@
2410
2415
  className="'mb-2'"
2411
2416
  />
2412
2417
  </Section>
2418
+ <Section class="'pt-1'" title.translate="Number formatting">
2419
+ <ChartHumanizeNumbers t-props="props"/>
2420
+ </Section>
2413
2421
  </t>
2414
2422
  </GeneralDesignEditor>
2415
2423
  <SidePanelCollapsible isInitiallyCollapsed="true" title.translate="Waterfall design">
@@ -2658,12 +2666,7 @@
2658
2666
  <GeneralDesignEditor t-props="props" defaultChartTitleFontSize="defaultScorecardTitleFontSize">
2659
2667
  <t t-set-slot="general-extension">
2660
2668
  <Section class="'pt-1'" title.translate="Number formatting">
2661
- <Checkbox
2662
- name="'humanizeNumbers'"
2663
- label="humanizeNumbersLabel"
2664
- value="props.definition.humanize"
2665
- onChange.bind="updateHumanizeNumbers"
2666
- />
2669
+ <ChartHumanizeNumbers t-props="props"/>
2667
2670
  </Section>
2668
2671
  </t>
2669
2672
  </GeneralDesignEditor>
@@ -2776,6 +2779,9 @@
2776
2779
  <ChartShowValues t-props="props"/>
2777
2780
  <ChartShowDataMarkers t-props="props"/>
2778
2781
  </Section>
2782
+ <Section class="'pt-1'" title.translate="Number formatting">
2783
+ <ChartHumanizeNumbers t-props="props"/>
2784
+ </Section>
2779
2785
  </t>
2780
2786
  </GeneralDesignEditor>
2781
2787
  <SeriesDesignEditor t-props="props"/>
@@ -2788,6 +2794,9 @@
2788
2794
  <Section class="'pt-0'" title.translate="Values">
2789
2795
  <ChartShowValues t-props="props"/>
2790
2796
  </Section>
2797
+ <Section class="'pt-1'" title.translate="Number formatting">
2798
+ <ChartHumanizeNumbers t-props="props"/>
2799
+ </Section>
2791
2800
  <PieHoleSize
2792
2801
  t-if="props.definition.isDoughnut"
2793
2802
  value="props.definition.pieHolePercentage ?? this.defaultHoleSize"
@@ -2860,6 +2869,9 @@
2860
2869
  className="'mb-2'"
2861
2870
  />
2862
2871
  </Section>
2872
+ <Section class="'pt-1'" title.translate="Number formatting">
2873
+ <ChartHumanizeNumbers t-props="props"/>
2874
+ </Section>
2863
2875
  </t>
2864
2876
  </GeneralDesignEditor>
2865
2877
  <SeriesWithAxisDesignEditor t-props="props"/>
@@ -2966,6 +2978,9 @@
2966
2978
  <option value="left">Bottom left</option>
2967
2979
  </select>
2968
2980
  </Section>
2981
+ <Section class="'pt-1'" title.translate="Number formatting">
2982
+ <ChartHumanizeNumbers t-props="props"/>
2983
+ </Section>
2969
2984
  </t>
2970
2985
  </GeneralDesignEditor>
2971
2986
 
@@ -3054,7 +3069,13 @@
3054
3069
  </t>
3055
3070
 
3056
3071
  <t t-name="o-spreadsheet-GaugeChartDesignPanel">
3057
- <GeneralDesignEditor t-props="props"/>
3072
+ <GeneralDesignEditor t-props="props">
3073
+ <t t-set-slot="general-extension">
3074
+ <Section class="'pt-1'" title.translate="Number formatting">
3075
+ <ChartHumanizeNumbers t-props="props"/>
3076
+ </Section>
3077
+ </t>
3078
+ </GeneralDesignEditor>
3058
3079
  <SidePanelCollapsible isInitiallyCollapsed="false" title.translate="Gauge Design">
3059
3080
  <t t-set-slot="content">
3060
3081
  <Section class="'pt-0'" title.translate="Range">
@@ -3196,6 +3217,9 @@
3196
3217
  <Section class="'pt-0'" title.translate="Values">
3197
3218
  <ChartShowValues t-props="props"/>
3198
3219
  </Section>
3220
+ <Section class="'pt-1'" title.translate="Number formatting">
3221
+ <ChartHumanizeNumbers t-props="props"/>
3222
+ </Section>
3199
3223
  </t>
3200
3224
  </GeneralDesignEditor>
3201
3225
 
@@ -3233,6 +3257,9 @@
3233
3257
  className="'mb-2'"
3234
3258
  />
3235
3259
  </Section>
3260
+ <Section class="'pt-1'" title.translate="Number formatting">
3261
+ <ChartHumanizeNumbers t-props="props"/>
3262
+ </Section>
3236
3263
  </t>
3237
3264
  </GeneralDesignEditor>
3238
3265
  <SeriesWithAxisDesignEditor t-props="props">
@@ -3267,6 +3294,9 @@
3267
3294
  <Section class="'pt-0'" title.translate="Values">
3268
3295
  <ChartShowValues t-props="props"/>
3269
3296
  </Section>
3297
+ <Section class="'pt-1'" title.translate="Number formatting">
3298
+ <ChartHumanizeNumbers t-props="props"/>
3299
+ </Section>
3270
3300
  </t>
3271
3301
  </GeneralDesignEditor>
3272
3302
  <SeriesWithAxisDesignEditor t-props="props"/>
@@ -3904,6 +3934,15 @@
3904
3934
  </Section>
3905
3935
  </t>
3906
3936
 
3937
+ <t t-name="o-spreadsheet-ChartHumanizeNumbers">
3938
+ <Checkbox
3939
+ name="'humanizeNumbers'"
3940
+ label.translate="Make numbers human-readable"
3941
+ value="props.definition.humanize ?? true"
3942
+ onChange="(humanize) => props.updateChart(this.props.chartId, { humanize })"
3943
+ />
3944
+ </t>
3945
+
3907
3946
  <t t-name="o-spreadsheet-GenericChartConfigPanel">
3908
3947
  <div>
3909
3948
  <ChartDataSeries
@@ -4067,11 +4106,31 @@
4067
4106
 
4068
4107
  <t t-name="o-spreadsheet-CarouselPanel">
4069
4108
  <div class="o-carousel-panel h-100 overflow-auto">
4109
+ <Section title.translate="Carousel Title" class="'o-carousel-title'">
4110
+ <TextInput
4111
+ value="title?.text ?? ''"
4112
+ onChange.bind="updateTitleText"
4113
+ placeholder.translate="Add a Title"
4114
+ alwaysShowBorder="true"
4115
+ />
4116
+ <TextStyler
4117
+ style="title ?? {}"
4118
+ updateStyle.bind="updateTitleStyle"
4119
+ defaultStyle="DEFAULT_CAROUSEL_TITLE_STYLE"
4120
+ hasHorizontalAlign="false"
4121
+ />
4122
+ </Section>
4123
+ <div class="o-section pb-1 pt-0">
4124
+ <div class="o-section-title">Carousel Sections</div>
4125
+ </div>
4070
4126
  <div class="o-carousel-preview-list overflow-auto" t-ref="previewList">
4071
4127
  <t t-foreach="carouselItems" t-as="item" t-key="getItemId(item)">
4072
4128
  <div
4073
4129
  class="o-carousel-preview border-bottom pe-2 position-relative w-100 d-flex align-items-center"
4074
- t-att-class="{ 'o-dragging': dragAndDrop.draggedItemId === getItemId(item) }"
4130
+ t-att-class="{
4131
+ 'o-dragging': dragAndDrop.draggedItemId === getItemId(item),
4132
+ 'o-selected': isCarouselItemActive(item)
4133
+ }"
4075
4134
  t-att-style="getPreviewDivStyle(item)">
4076
4135
  <div
4077
4136
  class="o-drag-handle h-100 position-absolute d-flex align-items-center o-button-icon ps-1 flex-shrink-0"
@@ -4089,33 +4148,23 @@
4089
4148
  />
4090
4149
  </div>
4091
4150
  <div class="ms-auto"/>
4092
- <div
4093
- t-if="item.type === 'chart'"
4094
- class="o-edit-button o-button-icon pe-2 ps-1 flex-shrink-0 fa fa-pencil"
4095
- t-on-click.stop="(ev) => this.editCarouselItem(item, ev)"
4096
- title="Edit chart"
4097
- />
4098
- <div
4099
- class="o-delete-button o-button-icon pe-2 ps-1 flex-shrink-0"
4100
- t-on-click.stop="(ev) => this.deleteCarouselItem(item, ev)"
4101
- title="Remove chart">
4102
- <t t-call="o-spreadsheet-Icon.TRASH_FILLED"/>
4151
+ <div class="flex-shrink-0 d-flex align-self-start me-1">
4152
+ <CogWheelMenu items="getCogWheelMenuItems(item)"/>
4103
4153
  </div>
4104
4154
  </div>
4105
4155
  </t>
4106
4156
  </div>
4107
4157
  <div
4108
- class="o-button-link o-carousel-add-chart float-end d-flex align-items-center pt-4 pe-4 gap-2"
4109
- t-on-click="addNewChartToCarousel">
4158
+ class="o-button-link o-carousel-add-chart float-end d-flex align-items-center py-4 pe-4 gap-2"
4159
+ t-on-click="addNewChartToCarousel"
4160
+ t-att-title="carouselAddChartInfoMessage">
4110
4161
  + Add chart
4111
- <span t-att-title="carouselAddChartInfoMessage">
4112
- <t t-call="o-spreadsheet-Icon.CIRCLE_INFO"/>
4113
- </span>
4114
4162
  </div>
4115
4163
  <div
4116
4164
  t-if="!hasDataView"
4117
- class="o-button-link o-carousel-add-data-view float-end pt-4 pe-4"
4118
- t-on-click="addDataViewToCarousel">
4165
+ class="o-button-link o-carousel-add-data-view float-end py-4 pe-4"
4166
+ t-on-click="addDataViewToCarousel"
4167
+ t-att-title="carouselDataViewMessage">
4119
4168
  + Add data view
4120
4169
  </div>
4121
4170
  </div>
@@ -4349,12 +4398,12 @@
4349
4398
  <t t-set="secondaryIcon" t-value="menuItem.secondaryIcon(env)"/>
4350
4399
  <div
4351
4400
  t-if="isMenuRoot"
4352
- class="o-menu-item-root align-middle ms-auto"
4401
+ class="o-menu-item-root ms-auto align-items-center d-flex"
4353
4402
  t-call="o-spreadsheet-Icon.CARET_RIGHT"
4354
4403
  />
4355
4404
  <div
4356
4405
  t-elif="secondaryIcon"
4357
- class="o-menu-item-root align-middle ms-auto"
4406
+ class="o-menu-item-root ms-auto align-items-center d-flex"
4358
4407
  t-call="{{secondaryIcon}}"
4359
4408
  />
4360
4409
  </div>
@@ -5045,6 +5094,11 @@
5045
5094
  <i class="fa fa-pencil-square-o"/>
5046
5095
  </div>
5047
5096
  </t>
5097
+ <t t-name="o-spreadsheet-Icon.EXTERNAL">
5098
+ <div class="o-icon">
5099
+ <i class="fa fa-external-link"/>
5100
+ </div>
5101
+ </t>
5048
5102
  <t t-name="o-spreadsheet-Icon.UNLINK">
5049
5103
  <div class="o-icon">
5050
5104
  <i class="fa fa-chain-broken"/>
@@ -5485,6 +5539,14 @@
5485
5539
  />
5486
5540
  </svg>
5487
5541
  </t>
5542
+ <t t-name="o-spreadsheet-Icon.DATA">
5543
+ <svg class="o-icon" viewBox="0 0 18 18">
5544
+ <path
5545
+ fill="currentColor"
5546
+ d="M.5 1.5a1 1 0 0 1 1-1h15a1 1 0 0 1 1 1v15a1 1 0 0 1-1 1h-15a1 1 0 0 1-1-1zM6 6V1.5H1.5V6m10 0V1.5h-5V6m10 0V1.5H12V6m-6 5.5v-5H1.5v5m10 0v-5h-5v5m10 0v-5H12v5m-6 5V12H1.5v4.5m10 0V12h-5v4.5m10 0V12H12v4.5"
5547
+ />
5548
+ </svg>
5549
+ </t>
5488
5550
 
5489
5551
  <t t-name="o-spreadsheet-IconPicker">
5490
5552
  <div class="o-icon-picker">
@@ -5963,18 +6025,20 @@
5963
6025
  </t>
5964
6026
 
5965
6027
  <t t-name="o-spreadsheet-FullScreenChart">
5966
- <div
5967
- class="position-absolute o-fullscreen-chart-overlay w-100 h-100 d-flex"
5968
- t-if="chartId"
5969
- t-on-click="exitFullScreen">
6028
+ <div class="position-absolute o-fullscreen-chart-overlay w-100 h-100 d-flex" t-if="chartId">
6029
+ <div
6030
+ class="position-absolute top-0 start-0 end-0 bottom-0"
6031
+ t-on-click="exitFullScreen"
6032
+ aria-hidden="true"
6033
+ />
5970
6034
  <button
5971
- class="o-exit top-0 end-0 position-absolute o-button primary m-1"
6035
+ class="o-exit top-0 end-0 position-absolute o-button primary m-1 shadow"
5972
6036
  t-on-click="exitFullScreen">
5973
6037
  Exit fullscreen
5974
6038
  </button>
5975
6039
  <div class="flex-fill">
5976
6040
  <div
5977
- class="o-fullscreen-chart o-figure position-relative"
6041
+ class="o-fullscreen-chart o-figure position-relative border rounded shadow"
5978
6042
  tabindex="1"
5979
6043
  t-ref="fullScreenChart"
5980
6044
  t-on-click.stop=""
@@ -6217,30 +6281,35 @@
6217
6281
  </t>
6218
6282
 
6219
6283
  <t t-name="o-spreadsheet-CarouselFigure">
6220
- <div class="o-carousel w-100 h-100" t-on-dblclick="onCarouselDoubleClick">
6284
+ <div class="o-carousel w-100 h-100 d-flex flex-column" t-on-dblclick="onCarouselDoubleClick">
6221
6285
  <t t-set="selectedItem" t-value="selectedCarouselItem"/>
6222
6286
  <div
6223
- class="o-carousel-header position-absolute end-0 top-0 d-flex pe-1 rounded pe-auto"
6287
+ class="o-carousel-header d-flex align-items-baseline flex-shrink-0 pe-1 pe-auto"
6224
6288
  t-att-class="{
6289
+ 'border-bottom': env.isDashboard(),
6225
6290
  'o-carousel-header-floating': !env.isDashboard() and selectedItem?.type === 'carouselDataView',
6226
6291
  }"
6227
- t-att-style="headerStyle"
6228
- t-on-pointerdown.stop="">
6229
- <t t-foreach="carousel.items" t-as="item" t-key="item_index">
6230
- <div
6231
- class="o-carousel-tab text-truncate px-2 mt-1 mb-1 flex-shrink-0"
6232
- t-att-class="{ 'selected': isItemSelected(item) }"
6233
- t-esc="getItemTitle(item)"
6234
- t-on-click.stop="() => this.onCarouselTabClick(item)"
6235
- />
6236
- </t>
6292
+ t-att-style="headerStyle">
6293
+ <div class="o-carousel-title text-truncate" t-esc="title" t-att-style="titleStyle"/>
6294
+ <div class="ms-auto d-flex">
6295
+ <t t-foreach="carousel.items" t-as="item" t-key="item_index">
6296
+ <div
6297
+ class="o-carousel-tab text-truncate px-2 mt-1 flex-shrink-0"
6298
+ t-att-class="{ 'selected': isItemSelected(item) }"
6299
+ t-esc="getItemTitle(item)"
6300
+ t-on-click.stop="() => this.onCarouselTabClick(item)"
6301
+ />
6302
+ </t>
6303
+ </div>
6237
6304
  </div>
6238
6305
  <div
6239
6306
  t-if="!selectedItem"
6240
- class="o-carousel-empty w-100 h-100 d-flex align-items-center justify-content-center">
6307
+ class="o-carousel-empty w-100 flex-fill d-flex align-items-center justify-content-center">
6241
6308
  <t t-call="o-spreadsheet-Icon.CAROUSEL"/>
6242
6309
  </div>
6243
- <div t-elif="selectedItem.type === 'chart'" class="o-carousel-content w-100 h-100">
6310
+ <div
6311
+ t-elif="selectedItem.type === 'chart'"
6312
+ class="o-carousel-content w-100 flex-fill position-relative">
6244
6313
  <div class="o-chart-container w-100 h-100">
6245
6314
  <t
6246
6315
  t-component="chartComponent"
@@ -6248,6 +6317,11 @@
6248
6317
  t-key="selectedItem.chartId"
6249
6318
  />
6250
6319
  </div>
6320
+ <ChartDashboardMenu
6321
+ t-if="env.isDashboard()"
6322
+ chartId="selectedItem.chartId"
6323
+ t-key="selectedItem.chartId"
6324
+ />
6251
6325
  </div>
6252
6326
  </div>
6253
6327
  </t>
@@ -6275,7 +6349,7 @@
6275
6349
  />
6276
6350
  <div class="o-figure-menu position-absolute m-2" t-if="!env.isDashboard()">
6277
6351
  <div
6278
- class="o-figure-menu-item"
6352
+ class="o-figure-menu-item d-flex-align-items-center"
6279
6353
  t-if="!env.model.getters.isReadonly() and props.figureUI.tag !== 'carousel'"
6280
6354
  t-on-click="showMenu"
6281
6355
  t-ref="menuButton"
@@ -6289,46 +6363,63 @@
6289
6363
  onClose="() => this.menuState.isOpen=false"
6290
6364
  />
6291
6365
  </div>
6366
+ <div t-if="!env.isDashboard()" class="position-absolute top-0 start-0 pe-none w-100 h-100">
6367
+ <div
6368
+ class="o-figure-border pe-auto w-100 h-0 position-absolute pb-2"
6369
+ t-att-style="getBorderStyle('top')"
6370
+ />
6371
+ <div
6372
+ class="o-figure-border pe-auto h-100 position-absolute start-0 ps-2"
6373
+ t-att-style="getBorderStyle('left')"
6374
+ />
6375
+ <div
6376
+ class="o-figure-border pe-auto w-100 position-absolute bottom-0 pt-2"
6377
+ t-att-style="getBorderStyle('bottom')"
6378
+ />
6379
+ <div
6380
+ class="o-figure-border pe-auto h-100 position-absolute end-0 pe-2"
6381
+ t-att-style="getBorderStyle('right')"
6382
+ />
6383
+ </div>
6292
6384
  </div>
6293
- <div class="o-figure-border w-100 h-100 position-absolute pe-none" t-att-style="borderStyle"/>
6294
6385
  <t t-if="isSelected and !env.isMobile()">
6295
6386
  <div
6296
- class="o-fig-anchor o-top"
6387
+ class="o-fig-anchor o-top pe-auto"
6297
6388
  t-att-style="this.getResizerPosition('top')"
6298
6389
  t-on-pointerdown="(ev) => this.clickAnchor(0,-1, ev)"
6299
6390
  />
6300
6391
  <div
6301
- class="o-fig-anchor o-topRight"
6392
+ class="o-fig-anchor o-topRight pe-auto"
6302
6393
  t-att-style="this.getResizerPosition('top right')"
6303
6394
  t-on-pointerdown="(ev) => this.clickAnchor(1,-1, ev)"
6304
6395
  />
6305
6396
  <div
6306
- class="o-fig-anchor o-right"
6397
+ class="o-fig-anchor o-right pe-auto"
6307
6398
  t-att-style="this.getResizerPosition('right')"
6308
6399
  t-on-pointerdown="(ev) => this.clickAnchor(1,0, ev)"
6309
6400
  />
6310
6401
  <div
6311
- class="o-fig-anchor o-bottomRight"
6402
+ class="o-fig-anchor o-bottomRight pe-auto"
6312
6403
  t-att-style="this.getResizerPosition('bottom right')"
6313
6404
  t-on-pointerdown="(ev) => this.clickAnchor(1,1, ev)"
6314
6405
  />
6315
6406
  <div
6316
- class="o-fig-anchor o-bottom"
6407
+ class="o-fig-anchor o-bottom pe-auto"
6317
6408
  t-att-style="this.getResizerPosition('bottom')"
6318
6409
  t-on-pointerdown="(ev) => this.clickAnchor(0,1, ev)"
6319
6410
  />
6320
6411
  <div
6321
- class="o-fig-anchor o-bottomLeft"
6412
+ class="o-fig-anchor o-bottomLeft pe-auto"
6322
6413
  t-att-style="this.getResizerPosition('bottom left')"
6323
6414
  t-on-pointerdown="(ev) => this.clickAnchor(-1,1, ev)"
6324
6415
  />
6325
6416
  <div
6326
- class="o-fig-anchor o-left"
6417
+ class="o-fig-anchor o-left pe-auto"
6327
6418
  t-att-style="this.getResizerPosition('left')"
6328
6419
  t-on-pointerdown="(ev) => this.clickAnchor(-1,0, ev)"
6329
6420
  />
6330
6421
  <div
6331
- class="o-fig-anchor o-topLeft"
6422
+ class="o-fig-anchor o-topLeft pe-auto"
6332
6423
  t-att-style="this.getResizerPosition('top left')"
6333
6424
  t-on-pointerdown="(ev) => this.clickAnchor(-1,-1, ev)"
6334
6425
  />
@@ -6350,18 +6441,19 @@
6350
6441
 
6351
6442
  <t t-name="o-spreadsheet-ChartDashboardMenu">
6352
6443
  <div class="o-dashboard-chart-select position-absolute top-0 end-0" t-on-click.stop="">
6353
- <div class="d-flex flex-row px-1" t-att-style="backgroundColor">
6444
+ <div class="d-flex align-items-center gap-1 p-1 rounded" t-att-style="backgroundColor">
6354
6445
  <t t-foreach="getMenuItems()" t-as="item" t-key="item.id">
6355
- <button
6356
- t-attf-class=" {{item.iconClass}} {{item.isSelected ? 'active' : ''}}"
6357
- class="o-chart-dashboard-item btn mt-1 me-1 p-1 "
6446
+ <div
6447
+ t-attf-class=" {{item.class}}"
6448
+ class="o-chart-dashboard-item btn border-0 lh-1 p-1 d-flex align-items-center justify-content-center"
6358
6449
  t-att-title="item.label"
6359
6450
  t-on-click="item.onClick"
6360
- t-att-data-id="item.id"
6361
- />
6451
+ t-att-data-id="item.id">
6452
+ <t t-if="item.preview" t-call="{{item.preview}}"/>
6453
+ </div>
6362
6454
  </t>
6363
6455
  <button
6364
- class="o-chart-dashboard-item btn mt-1 p-1 fa fa-ellipsis-v"
6456
+ class="o-chart-dashboard-item btn text-muted lh-1 p-1 fa fa-ellipsis-v"
6365
6457
  t-on-click="openContextMenu"
6366
6458
  />
6367
6459
  </div>
@@ -6439,8 +6531,13 @@
6439
6531
  t-on-click="(ev) => this.selectClickableCell(ev, clickableCell)"
6440
6532
  t-on-auxclick="(ev) => this.selectClickableCell(ev, clickableCell)"
6441
6533
  t-on-contextmenu.prevent=""
6442
- t-att-style="getCellClickableStyle(clickableCell.coordinates)"
6443
- />
6534
+ t-att-style="getCellClickableStyle(clickableCell.coordinates)">
6535
+ <t
6536
+ t-if="clickableCell.component"
6537
+ t-component="clickableCell.component"
6538
+ t-props="clickableCell.componentProps"
6539
+ />
6540
+ </div>
6444
6541
  </GridOverlay>
6445
6542
  <canvas t-ref="canvas"/>
6446
6543
  <GridPopover
@@ -6455,6 +6552,14 @@
6455
6552
  </div>
6456
6553
  </t>
6457
6554
 
6555
+ <t t-name="o-spreadsheet-ClickableCellSortIcon">
6556
+ <div class="w-100 h-100 d-flex flex-column align-items-end justify-content-end">
6557
+ <span class="o-icon h-100 sorting-icon pb-1" t-att-style="style">
6558
+ <i class="fa fa-small" t-att-class="icon"/>
6559
+ </span>
6560
+ </div>
6561
+ </t>
6562
+
6458
6563
  <t t-name="o-spreadsheet-TopBarComposer">
6459
6564
  <div class="o-topbar-composer-container w-100">
6460
6565
  <div
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "18.5.0-alpha.8",
3
+ "version": "19.0.0",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o-spreadsheet.cjs.js",
@@ -147,6 +147,6 @@
147
147
  ]
148
148
  },
149
149
  "publishConfig": {
150
- "tag": "alpha"
150
+ "tag": "latest"
151
151
  }
152
152
  }