@odoo/o-spreadsheet 19.1.0-alpha.1 → 19.1.0-alpha.10

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 19.1.0-alpha.1
5
- @date 2025-09-12T13:34:33.243Z
6
- @hash d3e4e7b
4
+ @version 19.1.0-alpha.10
5
+ @date 2025-10-30T12:27:22.089Z
6
+ @hash d0b65e9
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
@@ -215,22 +215,20 @@
215
215
  </div>
216
216
  </t>
217
217
 
218
- <div t-name="o-spreadsheet-TextInput" class="w-100">
218
+ <t t-name="o-spreadsheet-TextInput">
219
219
  <input
220
- t-ref="input"
221
- class="os-input w-100"
222
220
  type="text"
221
+ t-ref="{{refName}}"
223
222
  t-att-class="inputClass"
224
223
  t-att-id="props.id"
225
224
  t-att-placeholder="props.placeholder"
226
- t-att-value="props.value"
227
225
  t-on-change="save"
228
226
  t-on-blur="save"
229
227
  t-on-pointerdown="onMouseDown"
230
228
  t-on-pointerup="onMouseUp"
231
229
  t-on-keydown="onKeyDown"
232
230
  />
233
- </div>
231
+ </t>
234
232
 
235
233
  <t t-name="o-spreadsheet-TableStylesPopover">
236
234
  <Popover t-if="props.popoverProps" t-props="props.popoverProps">
@@ -361,7 +359,7 @@
361
359
  t-att-style="getStyle()">
362
360
  <t t-if="env.isDashboard()">
363
361
  <SpreadsheetDashboard getGridSize.bind="getGridSize"/>
364
- <FullScreenChart/>
362
+ <FullScreenFigure/>
365
363
  </t>
366
364
  <t t-else="">
367
365
  <div class="o-spreadsheet-topbar-wrapper o-two-columns">
@@ -398,9 +396,14 @@
398
396
  <RibbonMenu onClose="() => this.menuState.isOpen=false"/>
399
397
  </t>
400
398
  <t t-else="">
401
- <div class="o-small-composer px-2 py-2">
399
+ <div class="o-small-composer px-2 py-2 position-relative">
402
400
  <div class="w-100" t-ref="bottombarComposer">
403
401
  <Composer t-props="composerProps"/>
402
+ <span
403
+ t-if="showFxIcon"
404
+ class="position-absolute top-50 translate-middle-y ps-2 pe-none">
405
+ <t t-call="o-spreadsheet-Icon.FX_SVG"/>
406
+ </span>
404
407
  </div>
405
408
  <span
406
409
  class="align-items-center d-flex justify-content-center o-selection-button"
@@ -448,7 +451,10 @@
448
451
  </div>
449
452
  <span class="d-flex align-items-center" t-esc="state.title"/>
450
453
  </div>
451
- <div class="o-ribbon-menu-wrapper overflow-auto">
454
+ <div
455
+ class="o-ribbon-menu-wrapper overflow-auto"
456
+ t-ref="container"
457
+ t-on-scroll="updateShadows">
452
458
  <Menu t-props="menuProps"/>
453
459
  </div>
454
460
  </div>
@@ -506,12 +512,12 @@
506
512
  value="tableConfig.numberOfHeaders > 0"
507
513
  onChange.bind="this.updateHasHeaders"
508
514
  />
509
- <input
515
+ <NumberInput
510
516
  t-if="tableConfig.numberOfHeaders > 0"
511
- t-att-value="tableConfig.numberOfHeaders"
512
- type="number"
513
- class="o-table-n-of-headers ms-2 o-input"
514
- t-on-change="onChangeNumberOfHeaders"
517
+ value="tableConfig.numberOfHeaders"
518
+ class="'o-table-n-of-headers ms-2'"
519
+ min="0"
520
+ onChange.bind="onChangeNumberOfHeaders"
515
521
  />
516
522
  </div>
517
523
  <Checkbox
@@ -856,12 +862,43 @@
856
862
  <CogWheelMenu items="cogWheelMenuItems"/>
857
863
  </div>
858
864
  </t>
859
- <TextInput class="'os-pivot-title'" value="name" onChange.bind="onNameChanged"/>
865
+ <TextInput
866
+ class="'os-pivot-title'"
867
+ value="name"
868
+ onChange.bind="onNameChanged"
869
+ selectContentOnFocus="true"
870
+ />
860
871
  </Section>
861
872
  </t>
862
873
 
863
874
  <t t-name="o-spreadsheet-PivotSidePanel">
864
- <t t-component="sidePanelEditor" t-props="props"/>
875
+ <div class="d-flex flex-column h-100">
876
+ <div class="o-panel d-flex">
877
+ <div
878
+ class="o-sidePanel-tab o-panel-configuration d-flew flex-grow-1 text-center"
879
+ t-att-class="state.panel !== 'configuration' ? 'inactive' : ''"
880
+ t-on-click="switchPanel.bind(this, 'configuration')">
881
+ <i class="fa fa-sliders me-1"/>
882
+ Configuration
883
+ </div>
884
+ <div
885
+ class="o-sidePanel-tab o-panel-design d-flew flex-grow-1 text-center"
886
+ t-att-class="state.panel !== 'design' ? 'inactive' : ''"
887
+ t-on-click="switchPanel.bind(this, 'design')">
888
+ <i class="fa fa-paint-brush me-1"/>
889
+ Design
890
+ </div>
891
+ </div>
892
+
893
+ <div class="o-panel-content overflow-y-auto h-100" t-ref="panelContent">
894
+ <div class="h-100" t-att-class="{ 'd-none': state.panel !== 'configuration' }">
895
+ <t t-component="sidePanelEditor" t-props="props"/>
896
+ </div>
897
+ <div t-att-class="state.panel !== 'design' ? 'd-none' : ''">
898
+ <PivotDesignPanel pivotId="props.pivotId"/>
899
+ </div>
900
+ </div>
901
+ </div>
865
902
  </t>
866
903
 
867
904
  <t t-name="o-spreadsheet-PivotSpreadsheetSidePanel">
@@ -913,6 +950,69 @@
913
950
  </div>
914
951
  </t>
915
952
 
953
+ <t t-name="o-spreadsheet-PivotDesignPanel">
954
+ <Section class="'o-pivot-design'" title.translate="Display options">
955
+ <div>
956
+ <div class="container-fluid p-0 pt-2">
957
+ <div class="row mb-2 align-items-center">
958
+ <div class="col-6">Max rows:</div>
959
+ <div class="col-6 d-flex align-items-center">
960
+ <input
961
+ t-att-value="pivotStyle.numberOfRows ?? ''"
962
+ type="number"
963
+ class="o-pivot-n-of-rows o-input"
964
+ placeholder="e.g. 10"
965
+ t-on-change="(ev) => this.updatePivotStyleProperty('numberOfRows', ev.target.valueAsNumber)"
966
+ />
967
+ </div>
968
+ </div>
969
+ <div class="row mb-2 align-items-center">
970
+ <div class="col-6">Max columns:</div>
971
+ <div class="col-6 d-flex align-items-center">
972
+ <input
973
+ t-att-value="pivotStyle.numberOfColumns ?? ''"
974
+ type="number"
975
+ class="o-pivot-n-of-columns o-input"
976
+ placeholder="e.g. 5"
977
+ t-on-change="(ev) => this.updatePivotStyleProperty('numberOfColumns', ev.target.valueAsNumber)"
978
+ />
979
+ </div>
980
+ </div>
981
+ <div class="row mb-2 align-items-center">
982
+ <div class="col-6">Show totals:</div>
983
+ <div class="col-6 d-flex align-items-center">
984
+ <Checkbox
985
+ name="'displayTotals'"
986
+ value="pivotStyle.displayTotals ?? defaultStyle.displayTotals"
987
+ onChange="(val) => this.updatePivotStyleProperty('displayTotals', val)"
988
+ />
989
+ </div>
990
+ </div>
991
+ <div class="row mb-2 align-items-center">
992
+ <div class="col-6">Show column titles:</div>
993
+ <div class="col-6 d-flex align-items-center">
994
+ <Checkbox
995
+ name="'displayColumnHeaders'"
996
+ value="pivotStyle.displayColumnHeaders ?? defaultStyle.displayColumnHeaders"
997
+ onChange="(val) => this.updatePivotStyleProperty('displayColumnHeaders', val)"
998
+ />
999
+ </div>
1000
+ </div>
1001
+ <div class="row mb-2 align-items-center">
1002
+ <div class="col-6">Show measure titles:</div>
1003
+ <div class="col-6 d-flex align-items-center">
1004
+ <Checkbox
1005
+ name="'displayMeasuresRow'"
1006
+ value="pivotStyle.displayMeasuresRow ?? defaultStyle.displayMeasuresRow"
1007
+ onChange="(val) => this.updatePivotStyleProperty('displayMeasuresRow', val)"
1008
+ />
1009
+ </div>
1010
+ </div>
1011
+ </div>
1012
+ </div>
1013
+ </Section>
1014
+ </t>
1015
+
916
1016
  <t t-name="o-spreadsheet-PivotMeasureDisplayPanel">
917
1017
  <Section title.translate="Show measure as:">
918
1018
  <select
@@ -1218,6 +1318,7 @@
1218
1318
  value="props.dimension.displayName"
1219
1319
  onChange.bind="updateName"
1220
1320
  class="'o-fw-bold'"
1321
+ selectContentOnFocus="true"
1221
1322
  />
1222
1323
  <span t-else="1" class="o-fw-bold" t-esc="props.dimension.displayName"/>
1223
1324
  </div>
@@ -1302,6 +1403,7 @@
1302
1403
  <TextInput
1303
1404
  value="group.name"
1304
1405
  onChange="(newName) => this.onRenameGroup(group_index, newName)"
1406
+ selectContentOnFocus="true"
1305
1407
  />
1306
1408
  <i
1307
1409
  class="o-button-icon ps-3 fa fa-trash"
@@ -1505,6 +1607,7 @@
1505
1607
  t-key="state.rule.criterion.type"
1506
1608
  criterion="state.rule.criterion"
1507
1609
  onCriterionChanged.bind="onCriterionChanged"
1610
+ autofocus="state.isTypeUpdated"
1508
1611
  />
1509
1612
  </div>
1510
1613
  </Section>
@@ -1615,6 +1718,7 @@
1615
1718
  onSelectionChanged="(ranges) => this.onRangeChanged(ranges[0])"
1616
1719
  required="true"
1617
1720
  hasSingleRange="true"
1721
+ autofocus="props.autofocus"
1618
1722
  />
1619
1723
  <t t-foreach="values" t-as="value" t-key="value_index">
1620
1724
  <div class="o-dv-list-values p-1 d-flex align-items-center">
@@ -1684,6 +1788,7 @@
1684
1788
  onValueChanged.bind="onValueChanged"
1685
1789
  criterionType="props.criterion.type"
1686
1790
  disableFormulas="props.disableFormulas"
1791
+ focused="props.autofocus"
1687
1792
  />
1688
1793
  </t>
1689
1794
 
@@ -1693,6 +1798,7 @@
1693
1798
  onValueChanged.bind="onFirstValueChanged"
1694
1799
  criterionType="props.criterion.type"
1695
1800
  disableFormulas="props.disableFormulas"
1801
+ focused="props.autofocus"
1696
1802
  />
1697
1803
  <CriterionInput
1698
1804
  value="props.criterion.values[1]"
@@ -1720,6 +1826,7 @@
1720
1826
  onValueChanged.bind="onValueChanged"
1721
1827
  criterionType="props.criterion.type"
1722
1828
  disableFormulas="props.disableFormulas"
1829
+ focused="props.autofocus"
1723
1830
  />
1724
1831
  </t>
1725
1832
 
@@ -2176,6 +2283,7 @@
2176
2283
  t-key="state.rules.cellIs.operator"
2177
2284
  criterion="genericCriterion"
2178
2285
  onCriterionChanged.bind="onRuleValuesChanged"
2286
+ autofocus="this.state.hasEditedCf"
2179
2287
  />
2180
2288
 
2181
2289
  <div class="o-section-subtitle pt-3">Formatting style</div>
@@ -2382,6 +2490,9 @@
2382
2490
  className="'mb-2'"
2383
2491
  />
2384
2492
  </Section>
2493
+ <Section class="'pt-0'" title.translate="Number formatting">
2494
+ <ChartHumanizeNumbers t-props="props"/>
2495
+ </Section>
2385
2496
  </t>
2386
2497
  </GeneralDesignEditor>
2387
2498
  <SeriesWithAxisDesignEditor t-props="props"/>
@@ -2421,7 +2532,7 @@
2421
2532
  className="'mb-2'"
2422
2533
  />
2423
2534
  </Section>
2424
- <Section class="'pt-1'" title.translate="Number formatting">
2535
+ <Section class="'pt-0'" title.translate="Number formatting">
2425
2536
  <ChartHumanizeNumbers t-props="props"/>
2426
2537
  </Section>
2427
2538
  </t>
@@ -2560,6 +2671,9 @@
2560
2671
  hasVerticalAlign="true"
2561
2672
  />
2562
2673
  </Section>
2674
+ <Section class="'pt-0'" title.translate="Number formatting">
2675
+ <ChartHumanizeNumbers t-props="props"/>
2676
+ </Section>
2563
2677
  </t>
2564
2678
  </SidePanelCollapsible>
2565
2679
  </t>
@@ -2620,6 +2734,9 @@
2620
2734
  <GeneralDesignEditor t-props="props">
2621
2735
  <t t-set-slot="general-extension">
2622
2736
  <ChartLegend t-props="props"/>
2737
+ <Section class="'pt-0'" title.translate="Number formatting">
2738
+ <ChartHumanizeNumbers t-props="props"/>
2739
+ </Section>
2623
2740
  </t>
2624
2741
  </GeneralDesignEditor>
2625
2742
 
@@ -2671,7 +2788,7 @@
2671
2788
  <t t-set="color_down">Color Down</t>
2672
2789
  <GeneralDesignEditor t-props="props" defaultChartTitleFontSize="defaultScorecardTitleFontSize">
2673
2790
  <t t-set-slot="general-extension">
2674
- <Section class="'pt-1'" title.translate="Number formatting">
2791
+ <Section class="'pt-0'" title.translate="Number formatting">
2675
2792
  <ChartHumanizeNumbers t-props="props"/>
2676
2793
  </Section>
2677
2794
  </t>
@@ -2785,7 +2902,7 @@
2785
2902
  <ChartShowValues t-props="props"/>
2786
2903
  <ChartShowDataMarkers t-props="props"/>
2787
2904
  </Section>
2788
- <Section class="'pt-1'" title.translate="Number formatting">
2905
+ <Section class="'pt-0'" title.translate="Number formatting">
2789
2906
  <ChartHumanizeNumbers t-props="props"/>
2790
2907
  </Section>
2791
2908
  </t>
@@ -2800,7 +2917,7 @@
2800
2917
  <Section class="'pt-0'" title.translate="Values">
2801
2918
  <ChartShowValues t-props="props"/>
2802
2919
  </Section>
2803
- <Section class="'pt-1'" title.translate="Number formatting">
2920
+ <Section class="'pt-0'" title.translate="Number formatting">
2804
2921
  <ChartHumanizeNumbers t-props="props"/>
2805
2922
  </Section>
2806
2923
  <PieHoleSize
@@ -2814,19 +2931,19 @@
2814
2931
 
2815
2932
  <t t-name="o-spreadsheet-ChartPanel">
2816
2933
  <div class="o-chart d-flex flex-column h-100" t-if="chartId">
2817
- <div class="o-panel">
2934
+ <div class="o-panel d-flex">
2818
2935
  <div
2819
- class="o-panel-element o-panel-configuration"
2936
+ class="o-sidePanel-tab o-panel-configuration d-flew flex-grow-1 text-center"
2820
2937
  t-att-class="store.panel !== 'configuration' ? 'inactive' : ''"
2821
2938
  t-on-click="switchPanel.bind(this, 'configuration')">
2822
- <i class="fa fa-sliders"/>
2939
+ <i class="fa fa-sliders me-1"/>
2823
2940
  Configuration
2824
2941
  </div>
2825
2942
  <div
2826
- class="o-panel-element o-panel-design"
2943
+ class="o-sidePanel-tab o-panel-design d-flew flex-grow-1 text-center"
2827
2944
  t-att-class="store.panel !== 'design' ? 'inactive' : ''"
2828
2945
  t-on-click="switchPanel.bind(this, 'design')">
2829
- <i class="fa fa-paint-brush"/>
2946
+ <i class="fa fa-paint-brush me-1"/>
2830
2947
  Design
2831
2948
  </div>
2832
2949
  </div>
@@ -2875,7 +2992,7 @@
2875
2992
  className="'mb-2'"
2876
2993
  />
2877
2994
  </Section>
2878
- <Section class="'pt-1'" title.translate="Number formatting">
2995
+ <Section class="'pt-0'" title.translate="Number formatting">
2879
2996
  <ChartHumanizeNumbers t-props="props"/>
2880
2997
  </Section>
2881
2998
  </t>
@@ -2984,7 +3101,7 @@
2984
3101
  <option value="left">Bottom left</option>
2985
3102
  </select>
2986
3103
  </Section>
2987
- <Section class="'pt-1'" title.translate="Number formatting">
3104
+ <Section class="'pt-0'" title.translate="Number formatting">
2988
3105
  <ChartHumanizeNumbers t-props="props"/>
2989
3106
  </Section>
2990
3107
  </t>
@@ -3077,7 +3194,7 @@
3077
3194
  <t t-name="o-spreadsheet-GaugeChartDesignPanel">
3078
3195
  <GeneralDesignEditor t-props="props">
3079
3196
  <t t-set-slot="general-extension">
3080
- <Section class="'pt-1'" title.translate="Number formatting">
3197
+ <Section class="'pt-0'" title.translate="Number formatting">
3081
3198
  <ChartHumanizeNumbers t-props="props"/>
3082
3199
  </Section>
3083
3200
  </t>
@@ -3223,7 +3340,7 @@
3223
3340
  <Section class="'pt-0'" title.translate="Values">
3224
3341
  <ChartShowValues t-props="props"/>
3225
3342
  </Section>
3226
- <Section class="'pt-1'" title.translate="Number formatting">
3343
+ <Section class="'pt-0'" title.translate="Number formatting">
3227
3344
  <ChartHumanizeNumbers t-props="props"/>
3228
3345
  </Section>
3229
3346
  </t>
@@ -3263,7 +3380,7 @@
3263
3380
  className="'mb-2'"
3264
3381
  />
3265
3382
  </Section>
3266
- <Section class="'pt-1'" title.translate="Number formatting">
3383
+ <Section class="'pt-0'" title.translate="Number formatting">
3267
3384
  <ChartHumanizeNumbers t-props="props"/>
3268
3385
  </Section>
3269
3386
  </t>
@@ -3813,11 +3930,11 @@
3813
3930
  </div>
3814
3931
  <div class="w-50 ms-3" t-if="trendType === 'trailingMovingAverage'">
3815
3932
  <span class="o-section-subtitle">Window</span>
3816
- <input
3817
- t-att-value="trend.window || this.defaultWindowSize"
3818
- type="number"
3819
- class="w-100 o-input trend-window-input"
3820
- t-on-change="(ev) => this.onChangeMovingAverageWindow(index, ev)"
3933
+ <NumberInput
3934
+ value="trend.window || this.defaultWindowSize"
3935
+ class="'w-100 trend-window-input'"
3936
+ min="2"
3937
+ onChange="(value) => this.onChangeMovingAverageWindow(index, value)"
3821
3938
  />
3822
3939
  </div>
3823
3940
  <div class="w-50 ms-3" t-if="trendType === 'polynomial'">
@@ -3890,13 +4007,12 @@
3890
4007
  <t t-name="o-spreadsheet.PieHoleSize">
3891
4008
  <Section class="'pt-0'" title.translate="Center radius">
3892
4009
  <div class="d-flex flex-row">
3893
- <input
3894
- t-att-value="props.value"
3895
- type="number"
3896
- class="o-input o-pie-hole-size-input"
4010
+ <NumberInput
4011
+ value="props.value"
4012
+ class="'o-pie-hole-size-input'"
3897
4013
  min="0"
3898
4014
  max="95"
3899
- t-on-change="(ev) => debouncedOnChange(ev.target.value)"
4015
+ onChange.bind="onChange"
3900
4016
  />
3901
4017
  %
3902
4018
  </div>
@@ -3943,7 +4059,8 @@
3943
4059
  <t t-name="o-spreadsheet-ChartHumanizeNumbers">
3944
4060
  <Checkbox
3945
4061
  name="'humanizeNumbers'"
3946
- label.translate="Make numbers human-readable"
4062
+ label.translate="Use compact format"
4063
+ title="title"
3947
4064
  value="props.definition.humanize ?? true"
3948
4065
  onChange="(humanize) => props.updateChart(this.props.chartId, { humanize })"
3949
4066
  />
@@ -4043,12 +4160,11 @@
4043
4160
 
4044
4161
  <t t-name="o-spreadsheet.ChartTitle">
4045
4162
  <Section class="'o-chart-title'" title="props.name">
4046
- <input
4047
- type="text"
4048
- class="o-input"
4049
- t-att-value="props.title"
4050
- t-on-change="updateTitle"
4051
- t-att-placeholder="props.placeholder"
4163
+ <TextInput
4164
+ value="props.title"
4165
+ onChange.bind="updateTitle"
4166
+ placeholder="props.placeholder"
4167
+ alwaysShowBorder="true"
4052
4168
  />
4053
4169
  <TextStyler
4054
4170
  style="props.style"
@@ -4118,6 +4234,7 @@
4118
4234
  onChange.bind="updateTitleText"
4119
4235
  placeholder.translate="Add a Title"
4120
4236
  alwaysShowBorder="true"
4237
+ selectContentOnFocus="true"
4121
4238
  />
4122
4239
  <TextStyler
4123
4240
  style="title ?? {}"
@@ -4151,10 +4268,11 @@
4151
4268
  <TextInput
4152
4269
  value="getItemTitle(item)"
4153
4270
  onChange="(newName) => this.renameCarouselItem(item, newName)"
4271
+ selectContentOnFocus="true"
4154
4272
  />
4155
4273
  </div>
4156
4274
  <div class="ms-auto"/>
4157
- <div class="flex-shrink-0 d-flex align-self-start me-1">
4275
+ <div class="flex-shrink-0 d-flex me-1">
4158
4276
  <CogWheelMenu items="getCogWheelMenuItems(item)"/>
4159
4277
  </div>
4160
4278
  </div>
@@ -4268,7 +4386,6 @@
4268
4386
  t-att-class="props.class"
4269
4387
  t-ref="popover"
4270
4388
  t-on-wheel="props.onMouseWheel"
4271
- t-att-style="popoverStyle"
4272
4389
  t-on-click.stop="">
4273
4390
  <div class="o-popover-content" t-ref="popoverContent">
4274
4391
  <t t-slot="default"/>
@@ -4340,6 +4457,23 @@
4340
4457
  </span>
4341
4458
  </t>
4342
4459
 
4460
+ <t t-name="o-spreadsheet-NumberInput">
4461
+ <input
4462
+ type="number"
4463
+ t-ref="{{refName}}"
4464
+ t-att-class="inputClass"
4465
+ t-att-id="props.id"
4466
+ t-att-placeholder="props.placeholder"
4467
+ t-on-change="save"
4468
+ t-on-blur="save"
4469
+ t-on-pointerdown="onMouseDown"
4470
+ t-on-pointerup="onMouseUp"
4471
+ t-on-keydown="onKeyDown"
4472
+ t-att-min="props.min"
4473
+ t-att-max="props.max"
4474
+ />
4475
+ </t>
4476
+
4343
4477
  <t t-name="o-spreadsheet-Menu-Popover">
4344
4478
  <Popover t-if="props.menuItems" t-props="popoverProps">
4345
4479
  <div t-ref="menu" class="o-menu-wrapper" t-on-mouseover="() => this.onMouseOverMainMenu()">
@@ -5333,7 +5467,7 @@
5333
5467
  </svg>
5334
5468
  </t>
5335
5469
  <t t-name="o-spreadsheet-Icon.COG">
5336
- <svg fill="currentColor" viewBox="0 0 16 16">
5470
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 16 16">
5337
5471
  <path
5338
5472
  d="M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z"
5339
5473
  />
@@ -5426,7 +5560,7 @@
5426
5560
  </svg>
5427
5561
  </t>
5428
5562
  <t t-name="o-spreadsheet-Icon.EDIT_TABLE">
5429
- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18">
5563
+ <svg class="o-icon" xmlns="http://www.w3.org/2000/svg" width="18" height="18">
5430
5564
  <path
5431
5565
  fill="currentColor"
5432
5566
  d="M2.5 1A1.5 1.5 0 0 0 1 2.5v11A1.5 1.5 0 0 0 2.5 15H7l1.5-1.5H7v-2.75h3.5v.75l2.25-2.25H12v-2.5h3.5v.75c.1-.2.45-.05.5.02l1 1V2.5A1.5 1.5 0 0 0 15.5 1m-13 1.5h13v2.75h-13m0 1.5h3v2.5h-3M7 6.75h3.5v2.5H7m-4.5 1.5h3v2.75h-3 M8.2 15.7v1.8h1.8l5.4-5.4-1.8-1.8-5.4 5.4Zm8.8-5.2a.5.5 0 0 0 0-.7l-1.1-1.1a.5.5 0 0 0-.7 0l-.9.9 1.8 1.8.9-.9Z"
@@ -5434,7 +5568,7 @@
5434
5568
  </svg>
5435
5569
  </t>
5436
5570
  <t t-name="o-spreadsheet-Icon.DELETE_TABLE">
5437
- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18">
5571
+ <svg class="o-icon" xmlns="http://www.w3.org/2000/svg" width="18" height="18">
5438
5572
  <path
5439
5573
  fill="currentColor"
5440
5574
  d="M2.5 1A1.5 1.5 0 0 0 1 2.5v11A1.5 1.5 0 0 0 2.5 15H7l1.5-1.5H7V6.75h3.5v.75L12 9V6.75h3.5l1.5 1.5V2.5A1.5 1.5 0 0 0 15.5 1m-13 1.5h13v2.75h-13m0 1.5h3v2.5h-3m0 1.5h3v2.75h-3m10-2.25 3-3 1.5 1.5-3 3 3 3-1.5 1.5-3-3-3 3-1.5-1.5 3-3-3-3 1.5-1.5"
@@ -5442,7 +5576,7 @@
5442
5576
  </svg>
5443
5577
  </t>
5444
5578
  <t t-name="o-spreadsheet-Icon.PAINT_TABLE">
5445
- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18">
5579
+ <svg class="o-icon" xmlns="http://www.w3.org/2000/svg" width="18" height="18">
5446
5580
  <path
5447
5581
  fill="currentColor"
5448
5582
  d="M2.5 1A1.5 1.5 0 0 0 1 2.5v11A1.5 1.5 0 0 0 2.5 15h5c0-.5 0-1 .5-1.5H7v-2.75h3.5v.75l2.25-2.25H12v-2.5h3.5v.75c1-.7 1.5-.4 1.5-.4V2.5A1.5 1.5 0 0 0 15.5 1m-13 1.5h13v2.75h-13m0 1.5h3v2.5h-3M7 6.75h3.5v2.5H7m-4.5 1.5h3v2.75h-3m7.5-.3c.7-.3 1.5-.1 2.1.6.6.7.8 1.4.5 1.9-.6 1.4-3.7 1.6-4 1.7l-.6.1.3-.5s.5-.8.5-2.1c0-.7.5-1.4 1.1-1.7Zm6.7-5.1a.9.9 0 0 1 1 1c-.1 1.3-2.5 3.7-4.3 5.3a3.9 3.9 0 0 0-.6-1.1c-.4-.4-.8-.7-1.3-.8 1.5-1.7 4-4.3 5.4-4.4"
@@ -5553,6 +5687,30 @@
5553
5687
  />
5554
5688
  </svg>
5555
5689
  </t>
5690
+ <t t-name="o-spreadsheet-Icon.FX_SVG">
5691
+ <svg class="o-icon fx-icon" viewBox="0 0 121.8 122.9">
5692
+ <path
5693
+ fill="currentColor"
5694
+ d='m28 34-4 5v2h10l-6 40c-4 22-6 28-7 30-2 2-3 3-5 3-3 0-7-2-9-4H4c-2 2-4 4-4 7s4 6 8 6 9-2 15-8c8-7 13-17 18-39l7-35 13-1 3-6H49c4-23 7-27 11-27 2 0 5 2 8 6h4c1-1 4-4 4-7 0-2-3-6-9-6-5 0-13 4-20 10-6 7-9 14-11 24h-8zm41 16c4-5 7-7 8-7s2 1 5 9l3 12c-7 11-12 17-16 17l-3-1-2-1c-3 0-6 3-6 7s3 7 7 7c6 0 12-6 22-23l3 10c3 9 6 13 10 13 5 0 11-4 18-15l-3-4c-4 6-7 8-8 8-2 0-4-3-6-10l-5-15 8-10 6-4 3 1 3 2c2 0 6-3 6-7s-2-7-6-7c-6 0-11 5-21 20l-2-6c-3-9-5-14-9-14-5 0-12 6-18 15l3 3z'
5695
+ />
5696
+ </svg>
5697
+ </t>
5698
+ <t t-name="o-spreadsheet-Icon.COLLAPSE">
5699
+ <svg class="o-icon" viewBox="0 0 18 18">
5700
+ <path
5701
+ d="M12.124 2.576a.6.6 0 0 1 0 .848l-2.7 2.7a.6.6 0 0 1-.848 0l-2.7-2.7a.6.6 0 0 1 .848-.848L8.4 4.2V.9a.6.6 0 0 1 1.2 0v3.3l1.676-1.624a.6.6 0 0 1 .848 0M5.876 15.424a.6.6 0 0 1 0-.848l2.7-2.7a.6.6 0 0 1 .848 0l2.7 2.7a.6.6 0 0 1-.848.848L9.6 13.8v3.3a.6.6 0 0 1-1.2 0v-3.3l-1.676 1.624a.6.6 0 0 1-.848 0M2 7a.5.5 0 0 0 0 1h14a.5.5 0 0 0 0-1M2 10a.5.5 0 0 0 0 1h14a.5.5 0 0 0 0-1"
5702
+ fill="currentColor"
5703
+ />
5704
+ </svg>
5705
+ </t>
5706
+ <t t-name="o-spreadsheet-Icon.EXPAND">
5707
+ <svg class="o-icon" viewBox="0 0 18 18">
5708
+ <path
5709
+ d="M5.876 14.076a.6.6 0 0 0 0 .848l2.7 2.7a.6.6 0 0 0 .848 0l2.7-2.7a.6.6 0 0 0-.848-.848L9.6 15.7v-3.3a.6.6 0 0 0-1.2 0v3.3l-1.676-1.624a.6.6 0 0 0-.848 0m6.248-10.152a.6.6 0 0 0 0-.848l-2.7-2.7a.6.6 0 0 0-.848 0l-2.7 2.7a.6.6 0 0 0 .848.848L8.4 2.3v3.3a.6.6 0 0 0 1.2 0V2.3l1.676 1.624a.6.6 0 0 0 .848 0M2 10a.5.5 0 0 0 0 1h14a.5.5 0 0 0 0-1M2 7a.5.5 0 0 0 0 1h14a.5.5 0 0 0 0-1"
5710
+ fill="currentColor"
5711
+ />
5712
+ </svg>
5713
+ </t>
5556
5714
 
5557
5715
  <t t-name="o-spreadsheet-IconPicker">
5558
5716
  <div class="o-icon-picker">
@@ -5904,7 +6062,7 @@
5904
6062
  anchorRect="cellPopover.anchorRect"
5905
6063
  containerRect="env.getPopoverContainerRect()"
5906
6064
  onMouseWheel="props.onMouseWheel"
5907
- zIndex="zIndex">
6065
+ class="'o-popover-grid-index'">
5908
6066
  <t
5909
6067
  t-component="cellPopover.Component"
5910
6068
  t-props="{...cellPopover.props, onClosed : () => props.onClosePopover()}"
@@ -6030,8 +6188,8 @@
6030
6188
  </div>
6031
6189
  </t>
6032
6190
 
6033
- <t t-name="o-spreadsheet-FullScreenChart">
6034
- <div class="position-absolute o-fullscreen-chart-overlay w-100 h-100 d-flex" t-if="chartId">
6191
+ <t t-name="o-spreadsheet-FullScreenFigure">
6192
+ <div class="position-absolute o-fullscreen-figure-overlay w-100 h-100 d-flex" t-if="figureUI">
6035
6193
  <div
6036
6194
  class="position-absolute top-0 start-0 end-0 bottom-0"
6037
6195
  t-on-click="exitFullScreen"
@@ -6044,15 +6202,20 @@
6044
6202
  </button>
6045
6203
  <div class="flex-fill">
6046
6204
  <div
6047
- class="o-fullscreen-chart o-figure position-relative border rounded shadow"
6205
+ class="o-fullscreen-figure o-figure position-relative border rounded shadow"
6048
6206
  tabindex="1"
6049
- t-ref="fullScreenChart"
6207
+ t-ref="fullScreenFigure"
6050
6208
  t-on-click.stop=""
6051
6209
  t-on-keydown="(ev) => this.onKeyDown(ev)">
6052
- <t t-component="chartComponent" chartId="chartId" isFullScreen="true" t-key="chartId"/>
6053
- <div class="position-absolute top-0 end-0">
6054
- <ChartDashboardMenu chartId="chartId"/>
6055
- </div>
6210
+ <t>
6211
+ <t
6212
+ t-component="figureComponent"
6213
+ figureUI="figureUI"
6214
+ isFullScreen="true"
6215
+ onFigureDeleted="() => {}"
6216
+ t-key="figureUI.id"
6217
+ />
6218
+ </t>
6056
6219
  </div>
6057
6220
  </div>
6058
6221
  </div>
@@ -6074,7 +6237,6 @@
6074
6237
  t-on-wheel.prevent.stop=""
6075
6238
  t-on-click.stop="props.onFocusInput"
6076
6239
  t-on-focus.stop="onInputFocused"
6077
- t-att-value="props.currentFontSize"
6078
6240
  t-on-change="setSizeFromInput"
6079
6241
  t-ref="inputFontSize"
6080
6242
  />
@@ -6137,7 +6299,7 @@
6137
6299
  </div>
6138
6300
  <div
6139
6301
  t-if="state.displayedValues.length === 0"
6140
- class="o-filter-menu-no-values d-flex align-items-center justify-content-center w-100 h-100 ">
6302
+ class="o-filter-menu-no-values d-flex align-items-center justify-content-center w-100 h-100 text-muted fst-italic">
6141
6303
  No results
6142
6304
  </div>
6143
6305
  </div>
@@ -6178,6 +6340,7 @@
6178
6340
  criterion="state.criterion"
6179
6341
  onCriterionChanged.bind="onCriterionChanged"
6180
6342
  disableFormulas="true"
6343
+ autofocus="true"
6181
6344
  />
6182
6345
  </t>
6183
6346
 
@@ -6279,7 +6442,12 @@
6279
6442
 
6280
6443
  <t t-name="o-spreadsheet-ChartFigure">
6281
6444
  <div class="o-chart-container w-100 h-100" t-on-dblclick="onDoubleClick">
6282
- <t t-component="chartComponent" chartId="chartId" t-key="chartId"/>
6445
+ <t
6446
+ t-component="chartComponent"
6447
+ chartId="chartId"
6448
+ t-key="chartId"
6449
+ isFullScreen="props.isFullScreen"
6450
+ />
6283
6451
  </div>
6284
6452
  <div t-if="env.isDashboard()" class="position-absolute top-0 end-0">
6285
6453
  <ChartDashboardMenu chartId="chartId"/>
@@ -6303,7 +6471,7 @@
6303
6471
  t-att-style="titleStyle"
6304
6472
  />
6305
6473
  <div class="o-carousel-tabs d-flex flex-fill justify-content-end" t-ref="carouselTabs">
6306
- <t t-foreach="carousel.items" t-as="item" t-key="item_index">
6474
+ <t t-foreach="visibleCarouselItems" t-as="item" t-key="item_index">
6307
6475
  <div
6308
6476
  class="o-carousel-tab text-truncate px-2 mt-1 flex-shrink-0"
6309
6477
  t-att-class="{ 'selected': isItemSelected(item) }"
@@ -6313,7 +6481,7 @@
6313
6481
  </t>
6314
6482
  </div>
6315
6483
  <div
6316
- class="o-carousel-tabs-dropdown flex-shrink-0 rounded"
6484
+ class="o-carousel-tabs-dropdown o-carousel-button flex-shrink-0 rounded p-1"
6317
6485
  t-att-class="{'active': menuState.isOpen}"
6318
6486
  t-ref="carouselTabsDropdown"
6319
6487
  t-on-click="toggleMenu">
@@ -6327,6 +6495,22 @@
6327
6495
  popoverPositioning="'bottom-left'"
6328
6496
  />
6329
6497
  </div>
6498
+ <div
6499
+ t-if="env.isDashboard()"
6500
+ t-att-title="fullScreenButtonTitle"
6501
+ class="o-carousel-full-screen-button fa o-carousel-button rounded p-1 ms-1"
6502
+ t-att-class="{
6503
+ 'fa-compress': props.isFullScreen,
6504
+ 'fa-expand': !props.isFullScreen,
6505
+ 'invisible': selectedCarouselItem?.type !== 'chart',
6506
+ }"
6507
+ t-on-click="toggleFullScreen"
6508
+ />
6509
+ <div
6510
+ t-if="!env.isDashboard()"
6511
+ class="o-carousel-menu-button o-carousel-button fa fa-ellipsis-v rounded ms-1"
6512
+ t-on-click="openContextMenu"
6513
+ />
6330
6514
  </div>
6331
6515
  <div
6332
6516
  t-if="!selectedItem"
@@ -6340,12 +6524,14 @@
6340
6524
  <t
6341
6525
  t-component="chartComponent"
6342
6526
  chartId="selectedItem.chartId"
6527
+ isFullScreen="props.isFullScreen"
6343
6528
  t-key="selectedItem.chartId"
6344
6529
  />
6345
6530
  </div>
6346
6531
  <ChartDashboardMenu
6347
6532
  t-if="env.isDashboard()"
6348
6533
  chartId="selectedItem.chartId"
6534
+ hasFullScreenButton="false"
6349
6535
  t-key="selectedItem.chartId"
6350
6536
  />
6351
6537
  </div>
@@ -6353,7 +6539,11 @@
6353
6539
  </t>
6354
6540
 
6355
6541
  <t t-name="o-spreadsheet-FigureComponent">
6356
- <div class="o-figure-wrapper" t-att-style="wrapperStyle" t-ref="figureWrapper">
6542
+ <div
6543
+ class="o-figure-wrapper"
6544
+ t-att-class="{'o-figure-selected': isSelected}"
6545
+ t-att-style="wrapperStyle"
6546
+ t-ref="figureWrapper">
6357
6547
  <div
6358
6548
  class="o-figure w-100 h-100"
6359
6549
  t-att-class="props.class"
@@ -6372,6 +6562,7 @@
6372
6562
  onFigureDeleted="props.onFigureDeleted"
6373
6563
  figureUI="props.figureUI"
6374
6564
  editFigureStyle.bind="editWrapperStyle"
6565
+ openContextMenu.bind="openContextMenu"
6375
6566
  />
6376
6567
  <div class="o-figure-menu position-absolute m-2" t-if="!env.isDashboard()">
6377
6568
  <div
@@ -6392,18 +6583,22 @@
6392
6583
  <div t-if="!env.isDashboard()" class="position-absolute top-0 start-0 pe-none w-100 h-100">
6393
6584
  <div
6394
6585
  class="o-figure-border pe-auto w-100 h-0 position-absolute pb-2"
6586
+ t-att-class="{'o-selected': isSelected}"
6395
6587
  t-att-style="getBorderStyle('top')"
6396
6588
  />
6397
6589
  <div
6398
6590
  class="o-figure-border pe-auto h-100 position-absolute start-0 ps-2"
6591
+ t-att-class="{'o-selected': isSelected}"
6399
6592
  t-att-style="getBorderStyle('left')"
6400
6593
  />
6401
6594
  <div
6402
6595
  class="o-figure-border pe-auto w-100 position-absolute bottom-0 pt-2"
6596
+ t-att-class="{'o-selected': isSelected}"
6403
6597
  t-att-style="getBorderStyle('bottom')"
6404
6598
  />
6405
6599
  <div
6406
6600
  class="o-figure-border pe-auto h-100 position-absolute end-0 pe-2"
6601
+ t-att-class="{'o-selected': isSelected}"
6407
6602
  t-att-style="getBorderStyle('right')"
6408
6603
  />
6409
6604
  </div>
@@ -6595,9 +6790,10 @@
6595
6790
  class="o-topbar-composer position-relative bg-white user-select-text d-flex"
6596
6791
  t-att-class="{
6597
6792
  'o-topbar-composer-readonly': env.model.getters.isReadonly(),
6793
+ 'o-topbar-composer-active': focus !== 'inactive',
6794
+ 'o-topbar-composer-inactive': focus === 'inactive',
6598
6795
  }"
6599
- t-on-click.stop=""
6600
- t-att-style="containerStyle">
6796
+ t-on-click.stop="">
6601
6797
  <Composer
6602
6798
  focus="focus"
6603
6799
  inputStyle="composerStyle"
@@ -6605,6 +6801,9 @@
6605
6801
  composerStore="composerStore"
6606
6802
  placeholder="composerStore.placeholder"
6607
6803
  />
6804
+ <span t-if="showFxIcon" class="position-absolute top-50 translate-middle-y ps-2 pe-none">
6805
+ <t t-call="o-spreadsheet-Icon.FX_SVG"/>
6806
+ </span>
6608
6807
  </div>
6609
6808
  </div>
6610
6809
  </t>
@@ -7083,6 +7282,7 @@
7083
7282
  t-ref="sheetNameSpan"
7084
7283
  t-esc="sheetName"
7085
7284
  t-on-pointerdown="(ev) => this.onMouseEventSheetName(ev)"
7285
+ t-on-click="(ev) => this.onMouseEventSheetName(ev)"
7086
7286
  t-on-dblclick="() => this.onDblClick()"
7087
7287
  t-on-focusout="() => this.onFocusOut()"
7088
7288
  t-on-keydown="(ev) => this.onKeyDown(ev)"