@odoo/o-spreadsheet 19.5.0-alpha.6 → 19.5.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.
Files changed (98) hide show
  1. package/dist/o_spreadsheet.cjs +35670 -34225
  2. package/dist/o_spreadsheet.css +65 -32
  3. package/dist/o_spreadsheet.esm.js +35670 -34225
  4. package/dist/o_spreadsheet.iife.js +35729 -34284
  5. package/dist/o_spreadsheet.min.iife.js +403 -403
  6. package/dist/o_spreadsheet.xml +210 -98
  7. package/dist/types/actions/action.d.ts +1 -7
  8. package/dist/types/actions/data_actions.d.ts +1 -0
  9. package/dist/types/actions/menu_items_actions.d.ts +2 -0
  10. package/dist/types/collaborative/ot/ot_helpers.d.ts +3 -1
  11. package/dist/types/components/clickable_cells_overlay/clickable_cells_overlay.d.ts +20 -0
  12. package/dist/types/components/dashboard/dashboard.d.ts +5 -12
  13. package/dist/types/components/error_tooltip/error_tooltip.d.ts +2 -0
  14. package/dist/types/components/figures/figure/figure.d.ts +3 -6
  15. package/dist/types/components/figures/figure_carousel/figure_carousel.d.ts +9 -2
  16. package/dist/types/components/figures/figure_chart/figure_chart.d.ts +1 -2
  17. package/dist/types/components/figures/figure_image/figure_image.d.ts +1 -2
  18. package/dist/types/components/filters/filter_menu/filter_menu.d.ts +1 -0
  19. package/dist/types/components/grid/grid.d.ts +2 -0
  20. package/dist/types/components/grid_overlay/grid_overlay.d.ts +6 -5
  21. package/dist/types/components/helpers/dom_helpers.d.ts +2 -0
  22. package/dist/types/components/helpers/wheel_hook.d.ts +1 -1
  23. package/dist/types/components/link/link_display/link_display.d.ts +1 -0
  24. package/dist/types/components/link/link_editor/link_editor.d.ts +1 -0
  25. package/dist/types/components/scrollbar/scrollbar_vertical.d.ts +2 -1
  26. package/dist/types/components/side_panel/carousel_panel/carousel_panel.d.ts +20 -2
  27. package/dist/types/components/side_panel/chart/chart_type_picker/chart_type_picker.d.ts +4 -17
  28. package/dist/types/components/side_panel/chart/chart_type_picker_popover/chart_type_picker_popover.d.ts +64 -0
  29. package/dist/types/components/side_panel/data_sources_cleanup/data_sources_cleanup.d.ts +28 -0
  30. package/dist/types/components/side_panel/data_sources_cleanup/data_sources_cleanup_store.d.ts +13 -0
  31. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_layout_configurator.d.ts +0 -2
  32. package/dist/types/components/side_panel/split_to_columns_panel/split_to_columns_panel.d.ts +4 -11
  33. package/dist/types/components/side_panel/split_to_columns_panel/split_to_columns_store.d.ts +33 -0
  34. package/dist/types/components/standalone_viewport/standalone_viewport.d.ts +55 -0
  35. package/dist/types/components/standalone_viewport/standalone_viewport_store.d.ts +28 -0
  36. package/dist/types/components/tables/hovered_table_store.d.ts +3 -6
  37. package/dist/types/formulas/code_builder.d.ts +2 -1
  38. package/dist/types/formulas/compiler.d.ts +6 -0
  39. package/dist/types/functions/create_compute_function.d.ts +4 -3
  40. package/dist/types/functions/function_registry.d.ts +1 -5
  41. package/dist/types/functions/helper_matrices.d.ts +1 -0
  42. package/dist/types/functions/helper_statistical.d.ts +6 -0
  43. package/dist/types/functions/module_array.d.ts +41 -23
  44. package/dist/types/functions/module_database.d.ts +18 -6
  45. package/dist/types/functions/module_date.d.ts +70 -22
  46. package/dist/types/functions/module_engineering.d.ts +3 -1
  47. package/dist/types/functions/module_filter.d.ts +2 -2
  48. package/dist/types/functions/module_financial.d.ts +105 -35
  49. package/dist/types/functions/module_info.d.ts +33 -11
  50. package/dist/types/functions/module_logical.d.ts +16 -8
  51. package/dist/types/functions/module_lookup.d.ts +23 -15
  52. package/dist/types/functions/module_math.d.ts +125 -43
  53. package/dist/types/functions/module_operators.d.ts +7 -3
  54. package/dist/types/functions/module_statistical.d.ts +78 -22
  55. package/dist/types/functions/module_text.d.ts +70 -24
  56. package/dist/types/functions/module_web.d.ts +3 -1
  57. package/dist/types/helpers/carousel_helpers.d.ts +0 -2
  58. package/dist/types/helpers/figures/chart.d.ts +2 -0
  59. package/dist/types/helpers/internal_viewport.d.ts +19 -10
  60. package/dist/types/helpers/misc.d.ts +1 -0
  61. package/dist/types/helpers/ui/split_to_columns_interactive.d.ts +1 -1
  62. package/dist/types/helpers/viewport_collection.d.ts +40 -9
  63. package/dist/types/helpers/zones.d.ts +1 -0
  64. package/dist/types/index.d.ts +7 -0
  65. package/dist/types/model.d.ts +1 -0
  66. package/dist/types/plugins/core/carousel.d.ts +8 -4
  67. package/dist/types/plugins/core/cell.d.ts +1 -0
  68. package/dist/types/plugins/core/chart.d.ts +2 -0
  69. package/dist/types/plugins/core/conditional_format.d.ts +2 -0
  70. package/dist/types/plugins/core/data_validation.d.ts +2 -0
  71. package/dist/types/plugins/core/formulas_provider.d.ts +8 -0
  72. package/dist/types/plugins/core/pivot.d.ts +1 -0
  73. package/dist/types/plugins/core_plugin.d.ts +7 -3
  74. package/dist/types/plugins/ui_core_views/cell_evaluation/evaluation_plugin.d.ts +10 -3
  75. package/dist/types/plugins/ui_feature/ui_options.d.ts +1 -7
  76. package/dist/types/plugins/ui_feature/ui_sheet.d.ts +2 -1
  77. package/dist/types/plugins/ui_stateful/filter_evaluation.d.ts +2 -3
  78. package/dist/types/plugins/ui_stateful/header_positions.d.ts +2 -1
  79. package/dist/types/registries/chart_registry.d.ts +3 -0
  80. package/dist/types/registries/data_source_registry.d.ts +15 -0
  81. package/dist/types/store_engine/dependency_container.d.ts +5 -0
  82. package/dist/types/store_engine/store_hooks.d.ts +6 -0
  83. package/dist/types/stores/main_viewport_store.d.ts +11 -0
  84. package/dist/types/stores/table_resize_store.d.ts +6 -0
  85. package/dist/types/stores/viewports_store.d.ts +18 -3
  86. package/dist/types/types/commands.d.ts +23 -15
  87. package/dist/types/types/core_getters.d.ts +3 -1
  88. package/dist/types/types/figure.d.ts +26 -3
  89. package/dist/types/types/functions.d.ts +14 -4
  90. package/dist/types/types/getters.d.ts +27 -6
  91. package/dist/types/types/misc.d.ts +9 -1
  92. package/package.json +2 -2
  93. package/dist/types/plugins/ui_feature/split_to_columns.d.ts +0 -21
  94. package/dist/types/plugins/ui_feature/table_resize_ui.d.ts +0 -6
  95. /package/dist/types/plugins/{ui_feature → ui_stateful}/cell_computed_style.d.ts +0 -0
  96. /package/dist/types/plugins/{ui_feature → ui_stateful}/figure.d.ts +0 -0
  97. /package/dist/types/plugins/{ui_feature → ui_stateful}/header_visibility_ui.d.ts +0 -0
  98. /package/dist/types/plugins/{ui_feature → ui_stateful}/table_computed_style.d.ts +0 -0
@@ -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 19.5.0-alpha.6
5
- @date 2026-07-23T07:49:15.559Z
6
- @hash 192a921
4
+ @version 19.5.0-alpha.8
5
+ @date 2026-08-04T07:11:41.047Z
6
+ @hash c1baebe
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
@@ -432,6 +432,49 @@
432
432
  />
433
433
  </t>
434
434
 
435
+ <t t-name="o-spreadsheet-StandaloneViewport">
436
+ <div
437
+ class="o-standalone-viewport h-100 w-100 overflow-hidden d-flex"
438
+ t-on-wheel="this.onMouseWheel">
439
+ <div
440
+ class="o-standalone-viewport-content position-relative flex-grow-1 overflow-hidden"
441
+ t-ref="this.containerRef">
442
+ <GridOverlay
443
+ onCellDoubleClicked.bind="this.onCellDoubleClicked"
444
+ onGridResized="() => {}"
445
+ hasFooter="false"
446
+ gridOverlayDimensions="this.gridOverlayDimensions">
447
+ <div
448
+ t-if="this.props.canResizeColumns"
449
+ t-foreach="this.colResizers"
450
+ t-as="colResizer"
451
+ t-key="colResizer_index"
452
+ class="o-col-resizer h-100"
453
+ t-att-class="{ 'dragging': this.dndState.col === colResizer.col }"
454
+ t-att-style="colResizer.style"
455
+ t-on-pointerdown.stop="(ev) => this.onResizerPointerDown(ev, colResizer)"
456
+ t-on-dblclick.stop="(ev) => this.onResizerDoubleClick(ev, colResizer)">
457
+ <div class="o-col-resizer-handle position-absolute h-100"/>
458
+ </div>
459
+
460
+ <ClickableCellsOverlay t-if="this.env.model.getters.isDashboard()"/>
461
+ </GridOverlay>
462
+ <GridPopover
463
+ gridRect="this.getGridRect()"
464
+ onMouseWheel.bind="this.onMouseWheel"
465
+ onClosePopover="() => this.cellPopoverStore.close()"
466
+ />
467
+ <canvas class="" t-ref="this.canvasRef"/>
468
+ </div>
469
+ <div
470
+ class="position-relative"
471
+ t-if="this.hasVerticalScrollBar"
472
+ t-att-style="this.scrollBarContainerStyle">
473
+ <VerticalScrollBar hasFooter="false"/>
474
+ </div>
475
+ </div>
476
+ </t>
477
+
435
478
  <t t-name="o-spreadsheet-StandaloneGridCanvas">
436
479
  <canvas t-ref="this.canvasRef"/>
437
480
  </t>
@@ -810,22 +853,22 @@
810
853
  <Select
811
854
  class="'mb-3'"
812
855
  values="this.separators"
813
- selectedValue="this.state.separatorValue"
856
+ selectedValue="this.store.separatorValue"
814
857
  onChange.bind="this.onSeparatorChange"
815
858
  />
816
859
 
817
860
  <input
818
861
  class="o-input mb-3"
819
862
  type="text"
820
- t-if="this.state.separatorValue === 'custom'"
821
- t-att-value="this.state.customSeparator"
863
+ t-if="this.store.separatorValue === 'custom'"
864
+ t-att-value="this.store.customSeparator"
822
865
  t-on-input="this.updateCustomSeparator"
823
866
  placeholder="Add any characters or symbol"
824
867
  />
825
868
 
826
869
  <t t-set="addColumnsLabel">Add new columns to avoid overwriting cells</t>
827
870
  <Checkbox
828
- value="this.state.addNewColumns"
871
+ value="this.store.addNewColumns"
829
872
  label="addColumnsLabel"
830
873
  onChange.bind="this.updateAddNewColumnsCheckbox"
831
874
  />
@@ -1473,7 +1516,7 @@
1473
1516
  />
1474
1517
  </t>
1475
1518
  <div t-if="measure.computedBy" class="d-flex flex-row small">
1476
- <div class="d-flex flex-column py-2 px-2 w-100" t-on-pointerdown.stop="">
1519
+ <div class="d-flex flex-column py-2 px-2 w-100">
1477
1520
  <StandaloneComposer
1478
1521
  onConfirm.bind="this.updateMeasureFormula"
1479
1522
  composerContent="measure.computedBy.formula"
@@ -1552,7 +1595,7 @@
1552
1595
  />
1553
1596
  <span t-else="1" class="o-fw-bold text-truncate" t-out="this.dimensionDisplayName"/>
1554
1597
  </div>
1555
- <div class="d-flex flex-rows" t-on-pointerdown.stop="">
1598
+ <div class="d-flex flex-rows">
1556
1599
  <t t-call-slot="upper-right-icons"/>
1557
1600
  <i
1558
1601
  class="o-button-icon fa fa-trash pe-1 ps-2"
@@ -1661,9 +1704,7 @@
1661
1704
  t-as="group"
1662
1705
  t-key="group_index"
1663
1706
  class="o-pivot-custom-group pb-1">
1664
- <div
1665
- class="d-flex align-items-center justify-content-between small"
1666
- t-on-pointerdown.stop="">
1707
+ <div class="d-flex align-items-center justify-content-between small">
1667
1708
  <TextInput
1668
1709
  value="group.name"
1669
1710
  onChange="(newName) => this.onRenameGroup(group_index, newName)"
@@ -2124,6 +2165,34 @@
2124
2165
  </div>
2125
2166
  </t>
2126
2167
 
2168
+ <t t-name="o-spreadsheet-DataSourcesCleanup">
2169
+ <div class="o-data-source-cleanup">
2170
+ <Section
2171
+ t-foreach="this.store.unusedDataSourcesCategories"
2172
+ t-as="category"
2173
+ t-key="category.type"
2174
+ title="category.label">
2175
+ <t t-foreach="category.dataSources" t-as="dataSource" t-key="dataSource_index">
2176
+ <Checkbox
2177
+ name="dataSource.id"
2178
+ label="dataSource.label"
2179
+ value="this.isDataSourceChecked(category.type, dataSource.id)"
2180
+ onChange="(checked) => this.onToggleDataSource(category.type, dataSource.id, checked)"
2181
+ className="'mb-2'"
2182
+ />
2183
+ </t>
2184
+ <div t-if="!category.dataSources.length" class="w-100 d-flex fst-italic text-muted">
2185
+ No unused data source in this category.
2186
+ </div>
2187
+ </Section>
2188
+ <Section t-if="this.dataSourcesToDelete.length" class="'pt-0'">
2189
+ <button class="o-button o-button-danger" t-on-click="this.onRemoveUnusedDataSources">
2190
+ Delete selected items
2191
+ </button>
2192
+ </Section>
2193
+ </div>
2194
+ </t>
2195
+
2127
2196
  <t t-name="o-spreadsheet-ValueInRangeCriterionForm">
2128
2197
  <SelectionInput
2129
2198
  ranges="[this.props.criterion.values[0] || '']"
@@ -3921,26 +3990,12 @@
3921
3990
  <ChartAnnotation t-props="this.props"/>
3922
3991
  </t>
3923
3992
 
3924
- <t t-name="o-spreadsheet-ChartTypePicker">
3925
- <t t-set="selectedChartProperties" t-value="this.getSelectedChartSubtypeProperties()"/>
3926
- <Section title.translate="Chart type">
3927
- <div class="position-relative">
3928
- <div
3929
- class="o-select o-input o-type-selector"
3930
- t-ref="this.selectRef"
3931
- t-on-pointerdown.prevent="this.onPointerDown">
3932
- <t t-out="selectedChartProperties.displayName"/>
3933
- </div>
3934
- <div class="o-type-selector-preview position-absolute">
3935
- <t t-call="{{selectedChartProperties.preview}}"/>
3936
- </div>
3937
- </div>
3938
- </Section>
3939
- <Popover t-if="this.state.popoverProps" t-props="this.state.popoverProps">
3993
+ <t t-name="o-spreadsheet-ChartTypePickerPopover">
3994
+ <Popover t-props="this.props.popoverProps">
3940
3995
  <div
3941
3996
  t-ref="this.popoverRef"
3942
3997
  class="o-chart-select-popover px-3 pb-4"
3943
- t-att-style="this.state.popoverStyle">
3998
+ t-att-style="this.popoverStyle">
3944
3999
  <t t-foreach="this.categories" t-as="category" t-key="category">
3945
4000
  <t t-if="this.chartTypeByCategories[category]">
3946
4001
  <h5 class="my-3" t-out="category_value"/>
@@ -3954,7 +4009,7 @@
3954
4009
  t-att-title="properties.displayName"
3955
4010
  t-on-click="() => this.onTypeChange(properties.chartSubtype)"
3956
4011
  t-att-data-id="properties.chartSubtype"
3957
- t-att-class="{'selected': properties === selectedChartProperties}">
4012
+ t-att-class="{'selected': properties.chartSubtype === this.props.selectedChartSubType}">
3958
4013
  <t t-call="{{properties.preview}}"/>
3959
4014
  </div>
3960
4015
  </t>
@@ -3965,6 +4020,32 @@
3965
4020
  </Popover>
3966
4021
  </t>
3967
4022
 
4023
+ <t t-name="o-spreadsheet-ChartTypePicker">
4024
+ <t t-set="selectedChartProperties" t-value="this.getSelectedChartSubtypeProperties()"/>
4025
+ <Section title.translate="Chart type">
4026
+ <div class="position-relative">
4027
+ <div
4028
+ class="o-select o-input o-type-selector"
4029
+ t-ref="this.selectRef"
4030
+ t-on-pointerdown.prevent="this.onPointerDown">
4031
+ <t t-out="selectedChartProperties.displayName"/>
4032
+ </div>
4033
+ <div class="o-type-selector-preview position-absolute">
4034
+ <t t-call="{{selectedChartProperties.preview}}"/>
4035
+ </div>
4036
+ </div>
4037
+ </Section>
4038
+ <ChartTypePickerPopover
4039
+ t-if="this.state.popoverProps"
4040
+ popoverProps="this.state.popoverProps"
4041
+ onClose.bind="this.closePopover"
4042
+ onSelectSubType.bind="this.onTypeChange"
4043
+ parentRef="this.selectRef"
4044
+ supportedTypes="this.getSupportedChartTypes()"
4045
+ selectedChartSubType="selectedChartProperties.chartSubtype"
4046
+ />
4047
+ </t>
4048
+
3968
4049
  <t t-name="o-spreadsheet-ChartPreview.LINE_CHART">
3969
4050
  <svg viewBox="0 0 48 48" class="o-chart-preview" xmlns="http://www.w3.org/2000/svg">
3970
4051
  <path fill="var(--os-gray-600)" d="M2,2 v44 h1 v-44 M3,45 h42 v1 h-42"/>
@@ -5248,7 +5329,7 @@
5248
5329
  <div class="o-carousel-preview-list overflow-auto bg-white" t-ref="this.previewListRef">
5249
5330
  <t t-foreach="this.carouselItems" t-as="item" t-key="this.getItemId(item)">
5250
5331
  <div
5251
- class="o-carousel-preview border-bottom pe-2 position-relative w-100 d-flex align-items-center"
5332
+ class="o-carousel-preview border-bottom pe-2 position-relative w-100 d-flex flex-column"
5252
5333
  t-att-class="{
5253
5334
  'o-dragging border-top': this.dragAndDrop.draggedItemId === this.getItemId(item),
5254
5335
  'o-selected': this.isCarouselItemActive(item)
@@ -5259,38 +5340,61 @@
5259
5340
  t-on-pointerdown.stop.prevent="(ev) => this.onDragHandleMouseDown(item, ev)">
5260
5341
  <t t-call="o-spreadsheet-Icon.THIN_DRAG_HANDLE"/>
5261
5342
  </div>
5262
- <div
5263
- class="o-carousel-preview-icon ms-3 flex-shrink-0 d-flex align-items-center justify-content-center">
5264
- <t t-call="{{this.getItemPreview(item)}}"/>
5343
+ <div class="d-flex o-preview-content align-items-center justify-content-center">
5344
+ <div
5345
+ class="o-carousel-preview-icon ms-3 flex-shrink-0 d-flex align-items-center justify-content-center">
5346
+ <t t-call="{{this.getItemPreview(item)}}"/>
5347
+ </div>
5348
+ <div class="o-carousel-preview-title text-truncate ms-2">
5349
+ <TextInput
5350
+ value="this.getItemTitle(item)"
5351
+ onChange="(newName) => this.renameCarouselItem(item, newName)"
5352
+ selectContentOnFocus="true"
5353
+ />
5354
+ </div>
5355
+ <div class="ms-auto"/>
5356
+ <div class="flex-shrink-0 d-flex me-1">
5357
+ <CogWheelMenu items="this.getCogWheelMenuItems(item)"/>
5358
+ </div>
5265
5359
  </div>
5266
- <div class="o-carousel-preview-title text-truncate ms-2">
5267
- <TextInput
5268
- value="this.getItemTitle(item)"
5269
- onChange="(newName) => this.renameCarouselItem(item, newName)"
5270
- selectContentOnFocus="true"
5360
+ <div class="ms-4 mb-2" t-if="item.type === 'carouselDataView'">
5361
+ <SelectionInput
5362
+ ranges="[this.getItemRangeString(item)]"
5363
+ hasSingleRange="true"
5364
+ required="true"
5365
+ onSelectionChanged.bind="this.onSelectionInputChanged"
5366
+ onSelectionConfirmed.bind="this.onSelectionInputConfirmed"
5271
5367
  />
5272
5368
  </div>
5273
- <div class="ms-auto"/>
5274
- <div class="flex-shrink-0 d-flex me-1">
5275
- <CogWheelMenu items="this.getCogWheelMenuItems(item)"/>
5276
- </div>
5277
5369
  </div>
5278
5370
  </t>
5279
5371
  </div>
5280
- <div
5281
- class="o-button-link o-carousel-add-chart float-end d-flex align-items-center py-4 pe-4 gap-2"
5282
- t-on-click="this.addNewChartToCarousel"
5283
- t-att-title="this.carouselAddChartInfoMessage">
5284
- + Add chart
5285
- </div>
5286
- <div
5287
- t-if="!this.hasDataView"
5288
- class="o-button-link o-carousel-add-data-view float-end py-4 pe-4"
5289
- t-on-click="this.addDataViewToCarousel"
5290
- t-att-title="this.carouselDataViewMessage">
5291
- + Add data view
5292
- </div>
5372
+ <Section class="'pt-0'">
5373
+ <div>
5374
+ <div
5375
+ class="o-button-link o-carousel-add-chart float-end d-flex align-items-center my-4"
5376
+ t-on-click="this.addNewChartToCarousel"
5377
+ t-ref="this.addChartButton"
5378
+ t-att-title="this.carouselAddChartInfoMessage">
5379
+ + Add chart
5380
+ </div>
5381
+ <div
5382
+ t-if="!this.hasDataView"
5383
+ class="o-button-link o-carousel-add-data-view float-end my-4 me-4"
5384
+ t-on-click="this.addDataViewToCarousel">
5385
+ + Add data view
5386
+ </div>
5387
+ </div>
5388
+ </Section>
5293
5389
  </div>
5390
+ <ChartTypePickerPopover
5391
+ t-if="this.state.popoverProps"
5392
+ popoverProps="this.state.popoverProps"
5393
+ onClose.bind="this.closePopover"
5394
+ onSelectSubType.bind="this.onSelectChartType"
5395
+ parentRef="this.addChartButton"
5396
+ supportedTypes="this.supportedChartTypes"
5397
+ />
5294
5398
  </t>
5295
5399
 
5296
5400
  <t t-name="o-spreadsheet-SelectionInput">
@@ -5663,11 +5767,9 @@
5663
5767
  class="o-menu-item-description ms-auto text-truncate"
5664
5768
  t-out="description"
5665
5769
  />
5666
- <t t-set="secondaryIcon" t-value="menuItem.secondaryIcon(this.env)"/>
5667
5770
  <div
5668
- t-if="isMenuRoot || secondaryIcon"
5771
+ t-if="isMenuRoot"
5669
5772
  class="o-menu-item-root ms-auto align-items-center d-flex gap-1">
5670
- <t t-if="secondaryIcon" t-call="{{secondaryIcon}}"/>
5671
5773
  <t t-if="isMenuRoot" t-call="o-spreadsheet-Icon.CARET_RIGHT"/>
5672
5774
  </div>
5673
5775
  </div>
@@ -6798,11 +6900,6 @@
6798
6900
  />
6799
6901
  </svg>
6800
6902
  </t>
6801
- <t t-name="o-spreadsheet-Icon.UNUSED_PIVOT_WARNING">
6802
- <div class="o-unused-pivot-icon text-warning" title="This pivot is not used">
6803
- <t t-call="o-spreadsheet-Icon.TRIANGLE_EXCLAMATION"/>
6804
- </div>
6805
- </t>
6806
6903
  <t t-name="o-spreadsheet-Icon.ANGLE_DOWN">
6807
6904
  <div class="o-icon">
6808
6905
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 224 256">
@@ -7408,9 +7505,6 @@
7408
7505
  </t>
7409
7506
 
7410
7507
  <t t-name="o-spreadsheet-GridOverlay">
7411
- <div class="position-absolute" t-att-style="this.style">
7412
- <FiguresContainer/>
7413
- </div>
7414
7508
  <div
7415
7509
  t-ref="this.gridOverlayRef"
7416
7510
  class="o-grid-overlay overflow-hidden o-zoomable"
@@ -7422,8 +7516,8 @@
7422
7516
  t-on-dblclick.self="this.onDoubleClick"
7423
7517
  t-on-contextmenu.stop.prevent="this.onContextMenu">
7424
7518
  <GridAddRowsFooter
7425
- t-if="!this.env.model.getters.isReadonly()"
7426
- t-key="this.env.model.getters.getActiveSheetId()"
7519
+ t-if="!this.env.model.getters.isReadonly() and this.props.hasFooter"
7520
+ t-key="this.viewStore.displayedSheetId"
7427
7521
  />
7428
7522
  <t t-call-slot="default"/>
7429
7523
  </div>
@@ -7470,6 +7564,9 @@
7470
7564
  t-on-keydown="this.onKeydown"
7471
7565
  t-on-wheel.prevent="this.onMouseWheel"
7472
7566
  t-ref="this.gridRef">
7567
+ <div class="position-absolute" t-att-style="this.gridOverlayDimensions">
7568
+ <FiguresContainer/>
7569
+ </div>
7473
7570
  <GridOverlay
7474
7571
  onCellClicked.bind="this.onCellClicked"
7475
7572
  onCellDoubleClicked.bind="this.onCellDoubleClicked"
@@ -7826,16 +7923,11 @@
7826
7923
 
7827
7924
  <t t-name="o-spreadsheet-CarouselFigure">
7828
7925
  <div
7829
- class="o-carousel w-100 h-100 d-flex flex-column"
7926
+ class="o-carousel w-100 h-100 d-flex flex-column px-4 py-2"
7927
+ t-att-style="this.carouselStyle"
7830
7928
  t-on-dblclick="this.onCarouselDoubleClick">
7831
7929
  <t t-set="selectedItem" t-value="this.selectedCarouselItem"/>
7832
- <div
7833
- class="o-carousel-header d-flex align-items-baseline flex-shrink-0 pe-1 pe-auto"
7834
- t-att-class="{
7835
- 'border-bottom': this.env.model.getters.isDashboard(),
7836
- 'o-carousel-header-floating': !this.env.model.getters.isDashboard() and selectedItem?.type === 'carouselDataView',
7837
- }"
7838
- t-att-style="this.headerStyle">
7930
+ <div class="o-carousel-header d-flex align-items-baseline flex-shrink-0 pt-1 pe-auto">
7839
7931
  <div
7840
7932
  class="o-carousel-title text-truncate flex-shrink-0 pe-2"
7841
7933
  t-out="this.title"
@@ -7845,7 +7937,11 @@
7845
7937
  <div
7846
7938
  class="o-carousel-tabs d-flex flex-fill justify-content-end"
7847
7939
  t-ref="this.carouselTabsRef">
7848
- <t t-foreach="this.visibleCarouselItems" t-as="item" t-key="item_index">
7940
+ <t
7941
+ t-foreach="this.carousel.items"
7942
+ t-as="item"
7943
+ t-key="item_index"
7944
+ t-if="this.carousel.items.length > 1">
7849
7945
  <div
7850
7946
  class="o-carousel-tab text-truncate px-2 mt-1 flex-shrink-0"
7851
7947
  t-att-class="{ 'selected': this.isItemSelected(item) }"
@@ -7877,7 +7973,6 @@
7877
7973
  t-att-class="{
7878
7974
  'fa-compress': this.props.isFullScreen,
7879
7975
  'fa-expand': !this.props.isFullScreen,
7880
- 'invisible': this.selectedCarouselItem?.type !== 'chart',
7881
7976
  }"
7882
7977
  t-on-click="this.toggleFullScreen"
7883
7978
  />
@@ -7887,9 +7982,10 @@
7887
7982
  t-on-click="this.openContextMenu"
7888
7983
  />
7889
7984
  </div>
7985
+ <div t-if="this.title" class="w-100 mt-2 border-bottom"/>
7890
7986
  <div
7891
7987
  t-if="!selectedItem"
7892
- class="o-carousel-empty w-100 flex-fill d-flex align-items-center justify-content-center">
7988
+ class="o-carousel-empty o-carousel-content w-100 flex-fill d-flex align-items-center justify-content-center">
7893
7989
  <t t-call="o-spreadsheet-Icon.CAROUSEL"/>
7894
7990
  </div>
7895
7991
  <div
@@ -7912,6 +8008,17 @@
7912
8008
  t-key="selectedItem.chartId"
7913
8009
  />
7914
8010
  </div>
8011
+ <div
8012
+ t-elif="selectedItem.type === 'carouselDataView' and selectedItem.range"
8013
+ class="o-carousel-content mb-2 mt-3 h-100 w-100 overflow-hidden">
8014
+ <StandaloneViewport
8015
+ range="this.removeEmptyHeadersFromRange(selectedItem.range)"
8016
+ columnWeights="selectedItem.columnWeights"
8017
+ canResizeColumns="this.canResizeDataViewColumns"
8018
+ onResizeColumns.bind="this.onResizeColumns"
8019
+ zoomLevel="this.viewStore.zoomLevel"
8020
+ />
8021
+ </div>
7915
8022
  </div>
7916
8023
  </t>
7917
8024
 
@@ -7919,8 +8026,7 @@
7919
8026
  <div
7920
8027
  class="o-figure-wrapper os-theme-dependant"
7921
8028
  t-att-class="{'o-figure-selected': this.isSelected}"
7922
- t-att-style="this.wrapperStyle"
7923
- t-ref="this.figureWrapperRef">
8029
+ t-att-style="this.wrapperStyle">
7924
8030
  <div
7925
8031
  class="o-figure w-100 h-100"
7926
8032
  t-att-class="this.props.class"
@@ -7937,7 +8043,6 @@
7937
8043
  t-component="this.figureRegistry.get(this.props.figureUI.tag).Component"
7938
8044
  t-key="this.props.figureUI.id"
7939
8045
  figureUI="this.props.figureUI"
7940
- editFigureStyle.bind="this.editWrapperStyle"
7941
8046
  openContextMenu.bind="this.openContextMenu"
7942
8047
  />
7943
8048
  <MenuPopover
@@ -8166,24 +8271,13 @@
8166
8271
  class="mx-auto h-100 position-relative"
8167
8272
  t-ref="this.gridRef"
8168
8273
  t-att-style="this.gridContainer">
8274
+ <div class="position-absolute" t-att-style="this.gridOverlayDimensions">
8275
+ <FiguresContainer/>
8276
+ </div>
8169
8277
  <GridOverlay
8170
8278
  onGridResized.bind="this.onGridResized"
8171
8279
  gridOverlayDimensions="this.gridOverlayDimensions">
8172
- <div
8173
- t-foreach="this.getClickableCells()"
8174
- t-as="clickableCell"
8175
- t-key="clickableCell_index"
8176
- class="o-dashboard-clickable-cell"
8177
- t-att-title="clickableCell.title"
8178
- t-on-click="(ev) => this.selectClickableCell(ev, clickableCell)"
8179
- t-on-auxclick="(ev) => this.selectClickableCell(ev, clickableCell)"
8180
- t-att-style="this.getCellClickableStyle(clickableCell.coordinates)">
8181
- <t
8182
- t-if="clickableCell.component"
8183
- t-component="clickableCell.component"
8184
- t-props="clickableCell.componentProps"
8185
- />
8186
- </div>
8280
+ <ClickableCellsOverlay/>
8187
8281
  </GridOverlay>
8188
8282
  <canvas t-ref="this.canvasRef" class="os-theme-dependant"/>
8189
8283
  <GridPopover
@@ -8611,6 +8705,24 @@
8611
8705
  />
8612
8706
  </t>
8613
8707
 
8708
+ <t t-name="o-spreadsheet-ClickableCellsOverlay">
8709
+ <div
8710
+ t-foreach="this.getClickableCells()"
8711
+ t-as="clickableCell"
8712
+ t-key="clickableCell_index"
8713
+ class="o-dashboard-clickable-cell"
8714
+ t-att-title="clickableCell.title"
8715
+ t-on-click="(ev) => this.selectClickableCell(ev, clickableCell)"
8716
+ t-on-auxclick="(ev) => this.selectClickableCell(ev, clickableCell)"
8717
+ t-att-style="this.getCellClickableStyle(clickableCell.coordinates)">
8718
+ <t
8719
+ t-if="clickableCell.component"
8720
+ t-component="clickableCell.component"
8721
+ t-props="clickableCell.componentProps"
8722
+ />
8723
+ </div>
8724
+ </t>
8725
+
8614
8726
  <t t-name="o-spreadsheet-BottomBar">
8615
8727
  <div
8616
8728
  class="o-spreadsheet-bottom-bar o-two-columns d-flex flex-fill align-items-center overflow-hidden border-top"
@@ -34,10 +34,6 @@ export interface ActionSpec {
34
34
  */
35
35
  icon?: string | ((env: SpreadsheetChildEnv) => string);
36
36
  iconColor?: Color;
37
- /**
38
- * Can be defined to display another icon on the right of the item.
39
- */
40
- secondaryIcon?: string | ((env: SpreadsheetChildEnv) => string);
41
37
  /**
42
38
  * is the action allowed when running spreadsheet in readonly mode
43
39
  */
@@ -77,7 +73,6 @@ export interface Action {
77
73
  isActive?: (env: SpreadsheetChildEnv) => boolean;
78
74
  icon: (env: SpreadsheetChildEnv) => string;
79
75
  iconColor?: Color;
80
- secondaryIcon: (env: SpreadsheetChildEnv) => string;
81
76
  isReadonlyAllowed: boolean;
82
77
  isEnabledOnLockedSheet: boolean;
83
78
  execute?: (env: SpreadsheetChildEnv, isMiddleClick?: boolean) => unknown;
@@ -87,11 +82,10 @@ export interface Action {
87
82
  onStartHover?: (env: SpreadsheetChildEnv) => void;
88
83
  onStopHover?: (env: SpreadsheetChildEnv) => void;
89
84
  }
90
- export interface ComputedAction extends Omit<Action, "name" | "description" | "icon" | "secondaryIcon" | "children"> {
85
+ export interface ComputedAction extends Omit<Action, "name" | "description" | "icon" | "children"> {
91
86
  name: string;
92
87
  description: string;
93
88
  icon: string;
94
- secondaryIcon: string;
95
89
  }
96
90
  export type ActionBuilder = (env: SpreadsheetChildEnv) => ActionSpec[];
97
91
  type ActionChildren = (ActionSpec | ActionBuilder)[];
@@ -4,6 +4,7 @@ export declare const sortAscending: ActionSpec;
4
4
  export declare const dataCleanup: ActionSpec;
5
5
  export declare const removeDuplicates: ActionSpec;
6
6
  export declare const trimWhitespace: ActionSpec;
7
+ export declare const cleanupDataSources: ActionSpec;
7
8
  export declare const sortDescending: ActionSpec;
8
9
  export declare const createRemoveFilter: ActionSpec;
9
10
  export declare const createRemoveFilterTool: ActionSpec;
@@ -1,6 +1,7 @@
1
1
  import { Format } from "../types/format";
2
2
  import { Dimension, Style } from "../types/misc";
3
3
  import { SpreadsheetChildEnv } from "../types/spreadsheet_env";
4
+ import { Table } from "../types/table";
4
5
  import { ActionSpec } from "./action";
5
6
  export declare function setFormatter(env: SpreadsheetChildEnv, format: Format): void;
6
7
  export declare function setStyle(env: SpreadsheetChildEnv, style: Style): void;
@@ -49,6 +50,7 @@ export declare const INSERT_LINK_NAME: (env: SpreadsheetChildEnv) => string;
49
50
  export declare const SELECTED_TABLE_HAS_FILTERS: (env: SpreadsheetChildEnv) => boolean;
50
51
  export declare const SELECTION_CONTAINS_SINGLE_TABLE: (env: SpreadsheetChildEnv) => boolean;
51
52
  export declare const IS_SELECTION_CONTINUOUS: (env: SpreadsheetChildEnv) => boolean;
53
+ export declare const FIRST_TABLE_IN_SELECTION: (env: SpreadsheetChildEnv) => Table | undefined;
52
54
  export declare const ADD_DATA_FILTER: (env: SpreadsheetChildEnv) => void;
53
55
  export declare const REMOVE_DATA_FILTER: (env: SpreadsheetChildEnv) => void;
54
56
  export declare const INSERT_TABLE: (env: SpreadsheetChildEnv) => void;
@@ -1,5 +1,7 @@
1
- import { CoreCommand } from "../../types/commands";
1
+ import { CoreCommand, SheetDependentCommand } from "../../types/commands";
2
2
  import { UnboundedZone, Zone } from "../../types/misc";
3
3
  import { RangeData } from "../../types/range";
4
+ export type TransformResult = "SKIP_TRANSFORMATION" | "IGNORE_COMMAND";
4
5
  export declare function transformZone<Z extends Zone | UnboundedZone>(zone: Z, executed: CoreCommand): Z | undefined;
5
6
  export declare function transformRangeData(range: RangeData, executed: CoreCommand): RangeData | undefined;
7
+ export declare function transformSheetId(toTransform: Extract<CoreCommand, SheetDependentCommand>, executed: CoreCommand): CoreCommand | TransformResult;
@@ -0,0 +1,20 @@
1
+ import { Component } from "../../owl3_compatibility_layer";
2
+ import { Rect } from "../../types/rendering";
3
+ import { SpreadsheetChildEnv } from "../../types/spreadsheet_env";
4
+ import { Store } from "../../types/store_engine";
5
+ import { ClickableCell, ClickableCellsStore } from "../dashboard/clickable_cell_store";
6
+ export declare class ClickableCellsOverlay extends Component<SpreadsheetChildEnv> {
7
+ static template: string;
8
+ static components: {};
9
+ clickableCellsStore: Store<ClickableCellsStore>;
10
+ setup(): void;
11
+ getCellClickableStyle(coordinates: Rect): string;
12
+ /**
13
+ * Get all the boxes for the cell in the sheet view that are clickable.
14
+ * This function is used to render an overlay over each clickable cell in
15
+ * order to display a pointer cursor.
16
+ *
17
+ */
18
+ getClickableCells(): ClickableCell[];
19
+ selectClickableCell(ev: MouseEvent, clickableCell: ClickableCell): void;
20
+ }
@@ -1,7 +1,9 @@
1
1
  import { Component } from "../../owl3_compatibility_layer";
2
- import { DOMCoordinates, DOMDimension, Rect } from "../../types/rendering";
2
+ import { DOMCoordinates, DOMDimension } from "../../types/rendering";
3
3
  import { SpreadsheetChildEnv } from "../../types/spreadsheet_env";
4
4
  import { Store } from "../../types/store_engine";
5
+ import { ClickableCellsOverlay } from "../clickable_cells_overlay/clickable_cells_overlay";
6
+ import { FiguresContainer } from "../figures/figure_container/figure_container";
5
7
  import { DelayedHoveredCellStore } from "../grid/delayed_hovered_cell_store";
6
8
  import { GridOverlay } from "../grid_overlay/grid_overlay";
7
9
  import { GridPopover } from "../grid_popover/grid_popover";
@@ -9,7 +11,6 @@ import { CellPopoverStore } from "../popover/cell_popover_store";
9
11
  import { Popover } from "../popover/popover";
10
12
  import { HorizontalScrollBar } from "../scrollbar/scrollbar_horizontal";
11
13
  import { VerticalScrollBar } from "../scrollbar/scrollbar_vertical";
12
- import { ClickableCell, ClickableCellsStore } from "./clickable_cell_store";
13
14
  export declare class SpreadsheetDashboard extends Component<SpreadsheetChildEnv> {
14
15
  static template: string;
15
16
  static components: {
@@ -18,6 +19,8 @@ export declare class SpreadsheetDashboard extends Component<SpreadsheetChildEnv>
18
19
  Popover: typeof Popover;
19
20
  VerticalScrollBar: typeof VerticalScrollBar;
20
21
  HorizontalScrollBar: typeof HorizontalScrollBar;
22
+ ClickableCellsOverlay: typeof ClickableCellsOverlay;
23
+ FiguresContainer: typeof FiguresContainer;
21
24
  };
22
25
  protected props: import("@odoo/owl").Props<{
23
26
  getGridSize: () => DOMDimension;
@@ -26,22 +29,12 @@ export declare class SpreadsheetDashboard extends Component<SpreadsheetChildEnv>
26
29
  onMouseWheel: (ev: WheelEvent) => void;
27
30
  canvasPosition: DOMCoordinates;
28
31
  hoveredCell: Store<DelayedHoveredCellStore>;
29
- clickableCellsStore: Store<ClickableCellsStore>;
30
32
  private viewStore;
31
33
  private gridRef;
32
34
  private canvasRef;
33
35
  setup(): void;
34
36
  get gridContainer(): string;
35
37
  get gridOverlayDimensions(): string;
36
- getCellClickableStyle(coordinates: Rect): string;
37
- /**
38
- * Get all the boxes for the cell in the sheet view that are clickable.
39
- * This function is used to render an overlay over each clickable cell in
40
- * order to display a pointer cursor.
41
- *
42
- */
43
- getClickableCells(): ClickableCell[];
44
- selectClickableCell(ev: MouseEvent, clickableCell: ClickableCell): void;
45
38
  onClosePopover(): void;
46
39
  onGridResized(): void;
47
40
  private moveCanvas;
@@ -10,6 +10,8 @@ export declare class ErrorToolTip extends Component<SpreadsheetChildEnv> {
10
10
  cellPosition: import("../..").CellPosition;
11
11
  onClosed?: (() => void) | undefined;
12
12
  }>;
13
+ private viewStore;
14
+ setup(): void;
13
15
  get dataValidationErrorMessage(): string | undefined;
14
16
  get evaluationError(): import("../..").EvaluatedCell | undefined;
15
17
  get errorOriginPositionString(): string;