@odoo/o-spreadsheet 18.4.0-alpha.6 → 18.4.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.4.0-alpha.6
5
- @date 2025-05-30T08:45:20.500Z
6
- @hash eecf7e4
4
+ @version 18.4.0-alpha.7
5
+ @date 2025-06-06T09:33:32.216Z
6
+ @hash 2bfbe64
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
@@ -29,9 +29,9 @@
29
29
 
30
30
  <t t-name="o-spreadsheet-TopBar">
31
31
  <div
32
- class="o-spreadsheet-topbar o-two-columns d-flex flex-column user-select-none"
32
+ class="o-spreadsheet-topbar d-flex flex-column user-select-none"
33
33
  t-on-click="props.onClick">
34
- <div class="o-topbar-top d-flex justify-content-between">
34
+ <div t-if="!env.isSmall" class="o-topbar-top d-flex justify-content-between">
35
35
  <!-- Menus -->
36
36
  <div class="o-topbar-topleft d-flex">
37
37
  <t t-foreach="menus" t-as="menu" t-key="menu_index">
@@ -91,7 +91,7 @@
91
91
  </div>
92
92
  </div>
93
93
  </div>
94
- <TopBarComposer/>
94
+ <TopBarComposer t-if="!env.isSmall"/>
95
95
  </div>
96
96
  <div
97
97
  t-if="this.fingerprints.isEnabled"
@@ -118,7 +118,7 @@
118
118
  </div>
119
119
  </div>
120
120
  </div>
121
- <Menu
121
+ <MenuPopover
122
122
  t-if="state.menuState.isOpen"
123
123
  anchorRect="state.menuState.anchorRect"
124
124
  menuItems="state.menuState.menuItems"
@@ -127,7 +127,7 @@
127
127
  popoverPositioning="'bottom-left'"
128
128
  />
129
129
  <Popover t-if="state.toolsPopoverState.isOpen" t-props="toolsPopoverProps">
130
- <div class="d-flex px-2 py-1 flex-wrap" style="background-color:white;">
130
+ <div class="d-flex px-2 py-1 flex-wrap align-items-center" style="background-color:white;">
131
131
  <t
132
132
  t-foreach="state.invisibleToolsCategories"
133
133
  t-as="category"
@@ -141,7 +141,7 @@
141
141
  </t>
142
142
  <div
143
143
  t-if="category_index &lt; state.invisibleToolsCategories.length-1"
144
- class="o-topbar-divider my-2"
144
+ class="o-topbar-divider"
145
145
  />
146
146
  </t>
147
147
  </div>
@@ -155,7 +155,7 @@
155
155
  onClick.bind="toggleMenu"
156
156
  class="props.class"
157
157
  />
158
- <Menu
158
+ <MenuPopover
159
159
  t-if="isActive"
160
160
  anchorRect="state.anchorRect"
161
161
  menuItems="state.menuItems"
@@ -286,7 +286,7 @@
286
286
  <t t-call="o-spreadsheet-Icon.EDIT"/>
287
287
  </div>
288
288
  </div>
289
- <Menu
289
+ <MenuPopover
290
290
  t-if="menu.isOpen"
291
291
  menuItems="menu.menuItems"
292
292
  anchorRect="menu.anchorRect"
@@ -349,13 +349,19 @@
349
349
  </t>
350
350
 
351
351
  <t t-name="o-spreadsheet-Spreadsheet">
352
- <div class="o-spreadsheet h-100 w-100" t-ref="spreadsheet" t-att-style="getStyle()">
352
+ <div
353
+ class="o-spreadsheet h-100 w-100"
354
+ t-att-class="{'o-spreadsheet-mobile': env.isSmall}"
355
+ t-ref="spreadsheet"
356
+ t-att-style="getStyle()">
353
357
  <t t-if="env.isDashboard()">
354
- <SpreadsheetDashboard/>
358
+ <SpreadsheetDashboard getGridSize.bind="getGridSize"/>
355
359
  <FullScreenChart/>
356
360
  </t>
357
361
  <t t-else="">
358
- <TopBar onClick="() => this.focusGrid()" dropdownMaxHeight="gridHeight"/>
362
+ <div class="o-spreadsheet-topbar-wrapper o-two-columns">
363
+ <TopBar onClick="() => this.focusGrid()" dropdownMaxHeight="gridHeight"/>
364
+ </div>
359
365
  <div
360
366
  class="o-grid-container"
361
367
  t-att-class="{'o-two-columns': !sidePanel.isOpen}"
@@ -369,15 +375,80 @@
369
375
  <HeaderGroupContainer layers="rowLayers" dimension="'ROW'"/>
370
376
  </div>
371
377
  <div class="o-group-grid overflow-hidden">
372
- <Grid exposeFocus="(focus) => this._focusGrid = focus"/>
378
+ <Grid exposeFocus="(focus) => this._focusGrid = focus" getGridSize.bind="getGridSize"/>
373
379
  </div>
374
380
  </div>
375
381
  <SidePanel/>
376
- <BottomBar onClick="() => this.focusGrid()"/>
382
+ <div class="o-spreadsheet-bottombar-wrapper o-two-columns overflow-hidden">
383
+ <SmallBottomBar t-if="env.isSmall" onClick="() => this.focusGrid()"/>
384
+ <BottomBar t-else="" onClick="() => this.focusGrid()"/>
385
+ </div>
377
386
  </t>
378
387
  </div>
379
388
  </t>
380
389
 
390
+ <t t-name="o-spreadsheet-SmallBottomBar">
391
+ <div class="o-spreadsheet-small-bottom-bar o-two-columns d-flex flex-column overflow-hidden">
392
+ <t t-if="menuState.isOpen">
393
+ <RibbonMenu onClose="() => this.menuState.isOpen=false"/>
394
+ </t>
395
+ <t t-else="">
396
+ <div class="o-small-composer px-2 py-2">
397
+ <div class="w-100" t-ref="bottombarComposer">
398
+ <Composer t-props="composerProps"/>
399
+ </div>
400
+ <span
401
+ class="align-items-center d-flex justify-content-center o-selection-button"
402
+ title="confirm edition"
403
+ t-if="this.focus !== 'inactive'"
404
+ t-on-click="() => this.composerStore.stopEdition()">
405
+ <span class="d-flex">
406
+ <t t-call="o-spreadsheet-Icon.CHECK"/>
407
+ </span>
408
+ </span>
409
+ </div>
410
+ <div class="d-flex flex-row mb-1" t-if="this.focus !== 'inactive'">
411
+ <div
412
+ t-foreach="symbols"
413
+ t-as="symbol"
414
+ t-key="symbol_index"
415
+ class="o-spreadsheet-editor-symbol w-100 d-flex justify-content-center align-items-center mx-1"
416
+ t-esc="symbol"
417
+ tabindex="-1"
418
+ t-att-title="symbol"
419
+ t-on-click="() => this.insertSymbol(symbol)"
420
+ composerFocusableElement="true"
421
+ />
422
+ </div>
423
+ <div class="d-flex flex-fill align-items-center bottom-bar-menu">
424
+ <Ripple>
425
+ <div class="py-1 px-1 mx-2 ribbon-toggler" t-on-click="toggleRibbon">
426
+ <i class="o-icon fa fa-cog"/>
427
+ </div>
428
+ </Ripple>
429
+ <BottomBar onClick="props.onClick"/>
430
+ </div>
431
+ </t>
432
+ </div>
433
+ </t>
434
+
435
+ <div t-name="o-spreadsheet-RibbonMenu">
436
+ <div class="o-ribbon-menu d-flex flex-column" t-ref="menu">
437
+ <div class="o-ribbon-title d-flex py-2 fw-bold">
438
+ <div
439
+ class="o-previous-button px-3 py-1 mx-2 rounded"
440
+ t-on-click="onClickBack"
441
+ t-att-title="backTitle">
442
+ <i class="fa fa-angle-left"/>
443
+ </div>
444
+ <span class="d-flex align-items-center" t-esc="state.title"/>
445
+ </div>
446
+ <div class="o-ribbon-menu-wrapper overflow-auto">
447
+ <Menu t-props="menuProps"/>
448
+ </div>
449
+ </div>
450
+ </div>
451
+
381
452
  <t t-name="o-spreadsheet-TableStyleEditorPanel">
382
453
  <div class="o-table-style-editor-panel">
383
454
  <Section title.translate="Style name">
@@ -658,7 +729,7 @@
658
729
  t-on-click="onClick">
659
730
  <option selected="true" t-esc="props.selectedValue"/>
660
731
  </select>
661
- <Menu
732
+ <MenuPopover
662
733
  t-if="state.isMenuOpen"
663
734
  menuItems="props.menuItems"
664
735
  anchorRect="menuAnchorRect"
@@ -2099,7 +2170,7 @@
2099
2170
  t-on-click="toggleMenu"
2100
2171
  t-ref="button"
2101
2172
  />
2102
- <Menu
2173
+ <MenuPopover
2103
2174
  t-if="menuState.isOpen"
2104
2175
  menuId="menuId"
2105
2176
  anchorRect="menuState.anchorRect"
@@ -2123,6 +2194,7 @@
2123
2194
  t-att-name="props.name"
2124
2195
  t-att-checked="props.value"
2125
2196
  t-on-change="onChange"
2197
+ t-on-click.stop=""
2126
2198
  />
2127
2199
  <t t-if="props.label" t-esc="props.label"/>
2128
2200
  </label>
@@ -3867,6 +3939,10 @@
3867
3939
  </div>
3868
3940
  </t>
3869
3941
 
3942
+ <t t-name="o-spreadsheet-Selection">
3943
+ <Highlight t-props="highlightProps"/>
3944
+ </t>
3945
+
3870
3946
  <t t-name="o-spreadsheet-ScrollBar">
3871
3947
  <div class="o-scrollbar" t-on-scroll="onScroll" t-ref="scrollbar" t-att-style="positionCss">
3872
3948
  <div t-att-style="sizeCss"/>
@@ -3876,7 +3952,7 @@
3876
3952
  <t t-name="o-spreadsheet-Popover">
3877
3953
  <t t-portal="'.o-spreadsheet'">
3878
3954
  <div
3879
- class="o-popover"
3955
+ class="o-popover rounded"
3880
3956
  t-att-class="props.class"
3881
3957
  t-ref="popover"
3882
3958
  t-on-wheel="props.onMouseWheel"
@@ -3938,15 +4014,6 @@
3938
4014
  </div>
3939
4015
  </t>
3940
4016
 
3941
- <t t-name="o-spreadsheet-PivotCollapseIcon">
3942
- <div
3943
- class="o-pivot-collapse-icon o-hoverable-button d-flex align-items-center justify-content-center"
3944
- t-on-click="onClick">
3945
- <t t-if="isCollapsed" t-call="o-spreadsheet-Icon.PLUS"/>
3946
- <t t-else="" t-call="o-spreadsheet-Icon.MINUS"/>
3947
- </div>
3948
- </t>
3949
-
3950
4017
  <t t-name="o-spreadsheet-PaintFormatButton">
3951
4018
  <span
3952
4019
  class="o-menu-item-button"
@@ -3961,65 +4028,12 @@
3961
4028
  </span>
3962
4029
  </t>
3963
4030
 
3964
- <t t-name="o-spreadsheet-Menu">
3965
- <Popover t-if="menuItemsAndSeparators.length" t-props="popoverProps">
3966
- <div
3967
- t-ref="menu"
3968
- class="o-menu"
3969
- t-att-style="menuStyle"
3970
- t-on-scroll="onScroll"
3971
- t-on-wheel.stop=""
3972
- t-on-pointerdown.prevent=""
3973
- t-on-click.stop=""
3974
- t-on-mouseover="onMouseOverMainMenu"
3975
- t-on-contextmenu.prevent="">
3976
- <t t-foreach="menuItemsAndSeparators" t-as="menuItem" t-key="menuItem_index">
3977
- <div t-if="menuItem === 'separator'" class="o-separator"/>
3978
- <t t-else="">
3979
- <t t-set="isMenuRoot" t-value="isRoot(menuItem)"/>
3980
- <t t-set="isMenuEnabled" t-value="isEnabled(menuItem)"/>
3981
- <div
3982
- t-att-title="getName(menuItem)"
3983
- t-att-data-name="menuItem.id"
3984
- t-on-click="(ev) => this.onClickMenu(menuItem, ev)"
3985
- t-on-auxclick="(ev) => this.onClickMenu(menuItem, ev)"
3986
- t-on-mouseenter="(ev) => this.onMouseEnter(menuItem, ev)"
3987
- t-on-mouseover="(ev) => this.onMouseOver(menuItem, ev)"
3988
- t-on-mouseleave="(ev) => this.onMouseLeave(menuItem)"
3989
- class="o-menu-item d-flex justify-content-between align-items-center"
3990
- t-att-class="{'disabled': !isMenuEnabled, 'o-menu-item-active': isActive(menuItem)}"
3991
- t-att-style="getColor(menuItem)">
3992
- <div class="d-flex w-100">
3993
- <div
3994
- t-if="childrenHaveIcon"
3995
- class="o-menu-item-icon d-flex align-items-center flex-shrink-0"
3996
- t-att-style="getIconColor(menuItem)">
3997
- <t t-if="getIconName(menuItem)" t-call="{{getIconName(menuItem)}}"/>
3998
- </div>
3999
- <div class="o-menu-item-name align-middle text-truncate" t-esc="getName(menuItem)"/>
4000
- <t t-set="description" t-value="menuItem.description(env)"/>
4001
- <div
4002
- t-if="description"
4003
- class="o-menu-item-description ms-auto text-truncate"
4004
- t-esc="description"
4005
- />
4006
- <t t-set="secondaryIcon" t-value="menuItem.secondaryIcon(env)"/>
4007
- <div
4008
- t-if="isMenuRoot"
4009
- class="o-menu-item-root align-middle ms-auto"
4010
- t-call="o-spreadsheet-Icon.CARET_RIGHT"
4011
- />
4012
- <div
4013
- t-elif="secondaryIcon"
4014
- class="o-menu-item-root align-middle ms-auto"
4015
- t-call="{{secondaryIcon}}"
4016
- />
4017
- </div>
4018
- </div>
4019
- </t>
4020
- </t>
4031
+ <t t-name="o-spreadsheet-Menu-Popover">
4032
+ <Popover t-if="props.menuItems" t-props="popoverProps">
4033
+ <div t-ref="menu" class="o-menu-wrapper" t-on-mouseover="() => this.onMouseOverMainMenu()">
4034
+ <Menu t-props="menuProps"/>
4021
4035
  </div>
4022
- <Menu
4036
+ <MenuPopover
4023
4037
  t-if="subMenu.isOpen"
4024
4038
  t-key="subMenu.parentMenu.id"
4025
4039
  anchorRect="subMenuAnchorRect"
@@ -4035,6 +4049,64 @@
4035
4049
  </Popover>
4036
4050
  </t>
4037
4051
 
4052
+ <t t-name="o-spreadsheet-Menu">
4053
+ <div
4054
+ t-ref="menu"
4055
+ class="o-menu"
4056
+ t-att-style="menuStyle"
4057
+ t-on-scroll="props.onScroll"
4058
+ t-on-wheel.stop=""
4059
+ t-on-pointerdown.prevent=""
4060
+ t-on-click.stop=""
4061
+ t-on-contextmenu.prevent="">
4062
+ <t t-foreach="menuItemsAndSeparators" t-as="menuItem" t-key="menuItem_index">
4063
+ <div t-if="menuItem === 'separator'" class="o-separator"/>
4064
+ <t t-else="">
4065
+ <t t-set="isMenuRoot" t-value="isRoot(menuItem)"/>
4066
+ <t t-set="isMenuEnabled" t-value="isEnabled(menuItem)"/>
4067
+ <div
4068
+ t-att-title="getName(menuItem)"
4069
+ t-att-data-name="menuItem.id"
4070
+ t-on-click="(ev) => this.props.onClickMenu?.(menuItem, ev)"
4071
+ t-on-auxclick="(ev) => this.props.onClickMenu?.(menuItem, ev)"
4072
+ t-on-mouseover="(ev) => this.props.onMouseOver?.(menuItem, ev)"
4073
+ t-on-mouseenter="(ev) => this.onMouseEnter?.(menuItem, ev)"
4074
+ t-on-mouseleave="(ev) => this.onMouseLeave?.(menuItem)"
4075
+ class="o-menu-item d-flex justify-content-between align-items-center"
4076
+ t-att-class="{'disabled': !isMenuEnabled, 'o-menu-item-active': props.isActive?.(menuItem)}"
4077
+ t-att-style="getColor(menuItem)">
4078
+ <div class="d-flex w-100">
4079
+ <div
4080
+ t-if="childrenHaveIcon"
4081
+ class="o-menu-item-icon d-flex align-items-center flex-shrink-0"
4082
+ t-att-style="getIconColor(menuItem)">
4083
+ <t t-if="getIconName(menuItem)" t-call="{{getIconName(menuItem)}}"/>
4084
+ </div>
4085
+ <div class="o-menu-item-name align-middle text-truncate" t-esc="getName(menuItem)"/>
4086
+ <t t-set="description" t-value="menuItem.description(env)"/>
4087
+ <div
4088
+ t-if="description"
4089
+ class="o-menu-item-description ms-auto text-truncate"
4090
+ t-esc="description"
4091
+ />
4092
+ <t t-set="secondaryIcon" t-value="menuItem.secondaryIcon(env)"/>
4093
+ <div
4094
+ t-if="isMenuRoot"
4095
+ class="o-menu-item-root align-middle ms-auto"
4096
+ t-call="o-spreadsheet-Icon.CARET_RIGHT"
4097
+ />
4098
+ <div
4099
+ t-elif="secondaryIcon"
4100
+ class="o-menu-item-root align-middle ms-auto"
4101
+ t-call="{{secondaryIcon}}"
4102
+ />
4103
+ </div>
4104
+ </div>
4105
+ </t>
4106
+ </t>
4107
+ </div>
4108
+ </t>
4109
+
4038
4110
  <t t-name="o-spreadsheet-LinkEditor">
4039
4111
  <div
4040
4112
  class="o-link-editor"
@@ -4085,7 +4157,7 @@
4085
4157
  </button>
4086
4158
  </div>
4087
4159
  </div>
4088
- <Menu
4160
+ <MenuPopover
4089
4161
  t-if="menu.isOpen"
4090
4162
  anchorRect="menuButtonRect"
4091
4163
  menuItems="menuItems"
@@ -5161,20 +5233,24 @@
5161
5233
 
5162
5234
  <t t-name="o-spreadsheet-Highlight">
5163
5235
  <div class="o-highlight" t-ref="highlight">
5164
- <t t-foreach="['n', 's', 'w', 'e']" t-as="orientation" t-key="orientation">
5236
+ <t
5237
+ t-if="!env.isMobile()"
5238
+ t-foreach="['n', 's', 'w', 'e']"
5239
+ t-as="orientation"
5240
+ t-key="orientation">
5165
5241
  <Border
5166
5242
  onMoveHighlight.bind="this.onMoveHighlight"
5167
5243
  isMoving='highlightState.shiftingMode === "isMoving"'
5168
5244
  orientation="orientation"
5169
- zone="props.zone"
5245
+ zone="props.range.zone"
5170
5246
  />
5171
5247
  </t>
5172
- <t t-foreach="['nw', 'ne', 'sw', 'se']" t-as="orientation" t-key="orientation">
5248
+ <t t-foreach="cornerOrientations" t-as="orientation" t-key="orientation">
5173
5249
  <Corner
5174
5250
  onResizeHighlight.bind="onResizeHighlight"
5175
5251
  isResizing='highlightState.shiftingMode === "isResizing"'
5176
5252
  orientation="orientation"
5177
- zone="props.zone"
5253
+ zone="props.range.zone"
5178
5254
  color="props.color"
5179
5255
  />
5180
5256
  </t>
@@ -5183,17 +5259,22 @@
5183
5259
 
5184
5260
  <t t-name="o-spreadsheet-Corner">
5185
5261
  <div
5186
- class="o-corner"
5262
+ class="o-corner d-flex justify-content-center align-items-center"
5187
5263
  t-on-pointerdown.prevent="onMouseDown"
5188
- t-att-style="style"
5189
- t-att-class="{
5264
+ t-on-touchstart.prevent.stop=""
5265
+ t-att-style="handlerStyle">
5266
+ <div
5267
+ t-att-style="buttonLook"
5268
+ class="o-corner-button"
5269
+ t-att-class="{
5190
5270
  'o-resizing': props.isResizing,
5191
5271
  'o-corner-nw': props.orientation === 'nw',
5192
5272
  'o-corner-ne': props.orientation === 'ne',
5193
5273
  'o-corner-sw': props.orientation === 'sw',
5194
5274
  'o-corner-se': props.orientation === 'se',
5195
5275
  }"
5196
- />
5276
+ />
5277
+ </div>
5197
5278
  </t>
5198
5279
 
5199
5280
  <t t-name="o-spreadsheet-Border">
@@ -5288,10 +5369,11 @@
5288
5369
  <t t-name="o-spreadsheet-RowResizer">
5289
5370
  <div
5290
5371
  class="o-row-resizer"
5372
+ t-ref="rowResizer"
5291
5373
  t-on-pointermove.self="onMouseMove"
5292
5374
  t-on-mouseleave="onMouseLeave"
5293
5375
  t-on-pointerdown.self.prevent="select"
5294
- t-ref="rowResizer"
5376
+ t-on-click="onClick"
5295
5377
  t-on-pointerup.self="onMouseUp"
5296
5378
  t-on-contextmenu.self="onContextMenu"
5297
5379
  t-att-class="{'o-grab': state.waitingForMove, 'o-dragging': state.isMoving}">
@@ -5331,10 +5413,11 @@
5331
5413
  <t t-name="o-spreadsheet-ColResizer">
5332
5414
  <div
5333
5415
  class="o-col-resizer d-flex"
5416
+ t-ref="colResizer"
5334
5417
  t-on-pointermove.self="onMouseMove"
5335
5418
  t-on-mouseleave="onMouseLeave"
5336
5419
  t-on-pointerdown.self.prevent="select"
5337
- t-ref="colResizer"
5420
+ t-on-click="onClick"
5338
5421
  t-on-pointerup.self="onMouseUp"
5339
5422
  t-on-contextmenu.self="onContextMenu"
5340
5423
  t-att-class="{'o-grab': state.waitingForMove, 'o-dragging': state.isMoving, }">
@@ -5432,7 +5515,7 @@
5432
5515
  </div>
5433
5516
  </div>
5434
5517
 
5435
- <Menu
5518
+ <MenuPopover
5436
5519
  t-if="menu.isOpen"
5437
5520
  menuItems="menu.menuItems"
5438
5521
  anchorRect="menu.anchorRect"
@@ -5491,10 +5574,11 @@
5491
5574
  class="o-grid-overlay overflow-hidden"
5492
5575
  t-att-class="{'o-paint-format-cursor': isPaintingFormat}"
5493
5576
  t-att-style="style"
5494
- t-on-pointerdown="onMouseDown"
5577
+ t-on-pointerdown="onPointerDown"
5578
+ t-on-pointermove="onPointerMove"
5579
+ t-on-click="onClick"
5495
5580
  t-on-dblclick.self="onDoubleClick"
5496
5581
  t-on-contextmenu.stop.prevent="onContextMenu">
5497
- <GridCellIconOverlay/>
5498
5582
  <GridAddRowsFooter
5499
5583
  t-if="!env.model.getters.isReadonly()"
5500
5584
  t-key="env.model.getters.getActiveSheetId()"
@@ -5504,23 +5588,6 @@
5504
5588
  </div>
5505
5589
  </t>
5506
5590
 
5507
- <t t-name="o-spreadsheet-GridCellIconOverlay">
5508
- <t t-foreach="icons" t-as="icon" t-key="icon_index">
5509
- <GridCellIcon icon="icon">
5510
- <t t-component="icon.component" cellPosition="icon.position"/>
5511
- </GridCellIcon>
5512
- </t>
5513
- </t>
5514
-
5515
- <t t-name="o-spreadsheet-GridCellIcon">
5516
- <div
5517
- class="o-grid-cell-icon position-absolute overflow-hidden"
5518
- t-if="isPositionVisible(this.props.icon.position)"
5519
- t-att-style="iconStyle">
5520
- <t t-slot="default"/>
5521
- </div>
5522
- </t>
5523
-
5524
5591
  <t t-name="o-spreadsheet-GridAddRowsFooter">
5525
5592
  <div
5526
5593
  class="o-grid-add-rows mt-2 ms-2 w-100 d-flex position-relative align-items-center"
@@ -5564,6 +5631,7 @@
5564
5631
  onGridMoved.bind="moveCanvas"
5565
5632
  gridOverlayDimensions="gridOverlayDimensions"
5566
5633
  onFigureDeleted.bind="focusDefaultElement"
5634
+ getGridSize="props.getGridSize"
5567
5635
  />
5568
5636
  <HeadersOverlay onOpenContextMenu="(type, x, y) => this.toggleContextMenu(type, x, y)"/>
5569
5637
  <GridComposer
@@ -5590,16 +5658,17 @@
5590
5658
  onMouseWheel.bind="onMouseWheel"
5591
5659
  onClosePopover.bind="onClosePopover"
5592
5660
  />
5593
- <t t-if="env.model.getters.isGridSelectionActive()">
5661
+ <t t-if="env.model.getters.isGridSelectionActive() and !env.isMobile()">
5594
5662
  <Autofill position="getAutofillPosition()" isVisible="isAutofillVisible"/>
5595
5663
  </t>
5596
5664
  <t t-foreach="highlights" t-as="highlight" t-key="highlight_index">
5597
5665
  <t
5598
- t-if="highlight.interactive and highlight.sheetId === env.model.getters.getActiveSheetId()">
5599
- <Highlight zone="highlight.zone" color="highlight.color"/>
5666
+ t-if="highlight.interactive and highlight.range.sheetId === env.model.getters.getActiveSheetId()">
5667
+ <Highlight range="highlight.range" color="highlight.color"/>
5600
5668
  </t>
5601
5669
  </t>
5602
- <Menu
5670
+ <Selection t-if="displaySelectionHandler"/>
5671
+ <MenuPopover
5603
5672
  t-if="menuState.isOpen"
5604
5673
  menuItems="menuState.menuItems"
5605
5674
  anchorRect="menuState.anchorRect"
@@ -5814,13 +5883,6 @@
5814
5883
  </div>
5815
5884
  </t>
5816
5885
 
5817
- <t t-name="o-spreadsheet-FilterIcon">
5818
- <div class="o-filter-icon" t-att-class="iconClass" t-on-click="onClick">
5819
- <t t-if="isFilterActive" t-call="o-spreadsheet-Icon.FILTER_ICON_ACTIVE"/>
5820
- <t t-else="" t-call="o-spreadsheet-Icon.FILTER_ICON"/>
5821
- </div>
5822
- </t>
5823
-
5824
5886
  <t t-name="o-spreadsheet-ImageFigure">
5825
5887
  <img t-att-src="getImagePath" class="w-100 h-100"/>
5826
5888
  </t>
@@ -5882,6 +5944,7 @@
5882
5944
  <div
5883
5945
  class="o-figure w-100 h-100"
5884
5946
  t-on-pointerdown.stop="(ev) => this.onMouseDown(ev)"
5947
+ t-on-click="onClick"
5885
5948
  t-on-contextmenu.prevent.stop="(ev) => !env.model.getters.isReadonly() and this.onContextMenu(ev)"
5886
5949
  t-ref="figure"
5887
5950
  t-att-style="props.style"
@@ -5904,7 +5967,7 @@
5904
5967
  t-on-contextmenu.prevent.stop="showMenu">
5905
5968
  <t t-call="o-spreadsheet-Icon.LIST"/>
5906
5969
  </div>
5907
- <Menu
5970
+ <MenuPopover
5908
5971
  t-if="menuState.isOpen"
5909
5972
  anchorRect="menuState.anchorRect"
5910
5973
  menuItems="menuState.menuItems"
@@ -5913,7 +5976,7 @@
5913
5976
  </div>
5914
5977
  </div>
5915
5978
  <div class="o-figure-border w-100 h-100 position-absolute pe-none" t-att-style="borderStyle"/>
5916
- <t t-if="isSelected">
5979
+ <t t-if="isSelected and !env.isMobile()">
5917
5980
  <div
5918
5981
  class="o-fig-anchor o-top"
5919
5982
  t-att-style="this.getResizerPosition('top')"
@@ -5987,7 +6050,7 @@
5987
6050
  t-on-click="openContextMenu"
5988
6051
  />
5989
6052
  </div>
5990
- <Menu
6053
+ <MenuPopover
5991
6054
  t-if="menuState.isOpen"
5992
6055
  anchorRect="menuState.anchorRect"
5993
6056
  menuItems="menuState.menuItems"
@@ -6026,30 +6089,14 @@
6026
6089
  </div>
6027
6090
  </t>
6028
6091
 
6029
- <t t-name="o-spreadsheet-DataValidationListIcon">
6030
- <div
6031
- class="o-dv-list-icon d-flex align-items-center justify-content-center"
6032
- t-on-click="onClick">
6033
- <t t-call="o-spreadsheet-Icon.CARET_DOWN"/>
6034
- </div>
6035
- </t>
6036
-
6037
- <t t-name="o-spreadsheet-DataValidationCheckbox">
6038
- <Checkbox
6039
- name="'data-validation-checkbox'"
6040
- value="checkBoxValue"
6041
- onChange.bind="onCheckboxChange"
6042
- className="isDisabled ? 'pe-none o-dv-checkbox' : 'o-dv-checkbox'"
6043
- />
6044
- </t>
6045
-
6046
6092
  <t t-name="o-spreadsheet-SpreadsheetDashboard">
6047
6093
  <div class="o-grid o-two-columns" t-ref="dashboard" tabindex="-1" t-on-wheel="onMouseWheel">
6048
6094
  <div class="mx-auto h-100 position-relative" t-ref="grid" t-att-style="gridContainer">
6049
6095
  <GridOverlay
6050
6096
  onGridResized.bind="onGridResized"
6051
6097
  onGridMoved.bind="moveCanvas"
6052
- gridOverlayDimensions="gridOverlayDimensions">
6098
+ gridOverlayDimensions="gridOverlayDimensions"
6099
+ getGridSize="props.getGridSize">
6053
6100
  <div
6054
6101
  t-foreach="getClickableCells()"
6055
6102
  t-as="clickableCell"
@@ -6197,7 +6244,7 @@
6197
6244
  <t t-set="autoCompleteProposals" t-value="props.composerStore.autoCompleteProposals"/>
6198
6245
  <t
6199
6246
  t-set="assistantIsAvailable"
6200
- t-value="autoCompleteProposals.length or functionDescriptionState.showDescription"
6247
+ t-value="props.showAssistant and (autoCompleteProposals.length or functionDescriptionState.showDescription)"
6201
6248
  />
6202
6249
  <div class="d-flex flex-row position-relative">
6203
6250
  <span
@@ -6220,6 +6267,7 @@
6220
6267
  tabindex="1"
6221
6268
  t-att-contenteditable="env.model.getters.isReadonly() ? 'false' : 'true'"
6222
6269
  t-att-placeHolder="props.placeholder"
6270
+ t-att-inputmode="props.inputMode"
6223
6271
  spellcheck="false"
6224
6272
  t-on-keydown="onKeydown"
6225
6273
  t-on-mousewheel.stop=""
@@ -6434,8 +6482,7 @@
6434
6482
 
6435
6483
  <t t-name="o-spreadsheet-BottomBar">
6436
6484
  <div
6437
- class="o-spreadsheet-bottom-bar o-two-columns d-flex align-items-center overflow-hidden"
6438
- t-att-class="{'mobile': env.isSmall}"
6485
+ class="o-spreadsheet-bottom-bar o-two-columns d-flex flex-fill align-items-center overflow-hidden"
6439
6486
  t-on-click="props.onClick"
6440
6487
  t-ref="bottomBar"
6441
6488
  t-on-contextmenu.prevent="">
@@ -6519,7 +6566,7 @@
6519
6566
  />
6520
6567
  </t>
6521
6568
 
6522
- <Menu
6569
+ <MenuPopover
6523
6570
  t-if="menuState.isOpen"
6524
6571
  anchorRect="menuState.anchorRect"
6525
6572
  menuItems="menuState.menuItems"
@@ -6551,6 +6598,7 @@
6551
6598
  tabindex="-1"
6552
6599
  composerFocusableElement="true"
6553
6600
  t-on-pointerdown="(ev) => this.onMouseDown(ev)"
6601
+ t-on-click="onClick"
6554
6602
  t-on-contextmenu.prevent="(ev) => this.onContextMenu(ev)"
6555
6603
  t-ref="sheetDiv"
6556
6604
  t-att-style="props.style"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "18.4.0-alpha.6",
3
+ "version": "18.4.0-alpha.7",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o-spreadsheet.cjs.js",