@odoo/o-spreadsheet 19.2.11 → 19.3.2

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 (715) hide show
  1. package/dist/{o_spreadsheet.cjs.js → o_spreadsheet.cjs} +68842 -65937
  2. package/dist/o_spreadsheet.css +208 -37
  3. package/dist/o_spreadsheet.esm.js +66227 -63322
  4. package/dist/o_spreadsheet.iife.js +66266 -63361
  5. package/dist/o_spreadsheet.min.iife.js +958 -0
  6. package/dist/o_spreadsheet.xml +1187 -707
  7. package/dist/types/actions/action.d.ts +104 -0
  8. package/dist/types/actions/data_actions.d.ts +13 -0
  9. package/dist/types/actions/edit_actions.d.ts +23 -0
  10. package/dist/types/actions/figure_menu_actions.d.ts +6 -0
  11. package/dist/types/actions/format_actions.d.ts +64 -0
  12. package/dist/types/actions/insert_actions.d.ts +33 -0
  13. package/dist/types/actions/menu_items_actions.d.ts +57 -0
  14. package/dist/types/actions/sheet_actions.d.ts +15 -0
  15. package/dist/types/actions/view_actions.d.ts +29 -0
  16. package/dist/types/clipboard_handlers/abstract_cell_clipboard_handler.d.ts +8 -0
  17. package/dist/types/clipboard_handlers/abstract_clipboard_handler.d.ts +15 -0
  18. package/dist/types/clipboard_handlers/abstract_figure_clipboard_handler.d.ts +5 -0
  19. package/dist/types/clipboard_handlers/borders_clipboard.d.ts +17 -0
  20. package/dist/types/clipboard_handlers/carousel_clipboard.d.ts +19 -0
  21. package/dist/types/clipboard_handlers/cell_clipboard.d.ts +29 -0
  22. package/dist/types/clipboard_handlers/chart_clipboard.d.ts +15 -0
  23. package/dist/types/clipboard_handlers/conditional_format_clipboard.d.ts +25 -0
  24. package/dist/types/clipboard_handlers/data_validation_clipboard.d.ts +25 -0
  25. package/dist/types/clipboard_handlers/image_clipboard.d.ts +16 -0
  26. package/dist/types/clipboard_handlers/index.d.ts +1 -0
  27. package/dist/types/clipboard_handlers/merge_clipboard.d.ts +16 -0
  28. package/dist/types/clipboard_handlers/references_clipboard.d.ts +11 -0
  29. package/dist/types/clipboard_handlers/sheet_clipboard.d.ts +11 -0
  30. package/dist/types/clipboard_handlers/tables_clipboard.d.ts +33 -0
  31. package/dist/types/collaborative/command_squisher.d.ts +77 -0
  32. package/dist/types/collaborative/local_transport_service.d.ts +8 -0
  33. package/dist/types/collaborative/ot/ot.d.ts +23 -0
  34. package/dist/types/collaborative/ot/ot_helpers.d.ts +5 -0
  35. package/dist/types/collaborative/ot/ot_specific.d.ts +1 -0
  36. package/dist/types/collaborative/ot/srt_specific.d.ts +1 -0
  37. package/dist/types/collaborative/readonly_transport_filter.d.ts +9 -0
  38. package/dist/types/collaborative/revisions.d.ts +26 -0
  39. package/dist/types/collaborative/session.d.ts +107 -0
  40. package/dist/types/components/action_button/action_button.d.ts +42 -0
  41. package/dist/types/components/animation/ripple.d.ts +118 -0
  42. package/dist/types/components/autofill/autofill.d.ts +32 -0
  43. package/dist/types/components/border_editor/border_editor.d.ts +68 -0
  44. package/dist/types/components/border_editor/border_editor_widget.d.ts +50 -0
  45. package/dist/types/components/bottom_bar/bottom_bar.d.ts +60 -0
  46. package/dist/types/components/bottom_bar/bottom_bar_sheet/bottom_bar_sheet.d.ts +66 -0
  47. package/dist/types/components/bottom_bar/bottom_bar_statistic/aggregate_statistics_store.d.ts +13 -0
  48. package/dist/types/components/bottom_bar/bottom_bar_statistic/bottom_bar_statistic.d.ts +25 -0
  49. package/dist/types/components/collaborative_client_tag/collaborative_client_tag.d.ts +22 -0
  50. package/dist/types/components/color_picker/color_picker.d.ts +57 -0
  51. package/dist/types/components/color_picker/color_picker_widget.d.ts +53 -0
  52. package/dist/types/components/composer/autocomplete_dropdown/autocomplete_dropdown.d.ts +25 -0
  53. package/dist/types/components/composer/autocomplete_dropdown/autocomplete_dropdown_store.d.ts +12 -0
  54. package/dist/types/components/composer/composer/abstract_composer_store.d.ts +147 -0
  55. package/dist/types/components/composer/composer/cell_composer_store.d.ts +24 -0
  56. package/dist/types/components/composer/composer/composer.d.ts +194 -0
  57. package/dist/types/components/composer/composer_focus_store.d.ts +28 -0
  58. package/dist/types/components/composer/content_editable_helper.d.ts +41 -0
  59. package/dist/types/components/composer/formula_assistant/formula_assistant.d.ts +31 -0
  60. package/dist/types/components/composer/grid_composer/grid_composer.d.ts +48 -0
  61. package/dist/types/components/composer/speech_bubble/speech_bubble.d.ts +18 -0
  62. package/dist/types/components/composer/standalone_composer/standalone_composer.d.ts +83 -0
  63. package/dist/types/components/composer/standalone_composer/standalone_composer_store.d.ts +34 -0
  64. package/dist/types/components/composer/top_bar_composer/top_bar_composer.d.ts +20 -0
  65. package/dist/types/components/dashboard/clickable_cell_sort_icon/clickable_cell_sort_icon.d.ts +20 -0
  66. package/dist/types/components/dashboard/clickable_cell_store.d.ts +21 -0
  67. package/dist/types/components/dashboard/dashboard.d.ts +52 -0
  68. package/dist/types/components/date_input/date_input.d.ts +4 -0
  69. package/dist/types/components/error_tooltip/error_tooltip.d.ts +40 -0
  70. package/dist/types/components/figures/chart/chartJs/chartjs.d.ts +39 -0
  71. package/dist/types/components/figures/chart/chartJs/chartjs_animation_store.d.ts +8 -0
  72. package/dist/types/components/figures/chart/chartJs/chartjs_background_plugin.d.ts +11 -0
  73. package/dist/types/components/figures/chart/chartJs/chartjs_calendar_chart.d.ts +19 -0
  74. package/dist/types/components/figures/chart/chartJs/chartjs_colorscale_plugin.d.ts +17 -0
  75. package/dist/types/components/figures/chart/chartJs/chartjs_funnel_chart.d.ts +29 -0
  76. package/dist/types/components/figures/chart/chartJs/chartjs_minor_grid_plugin.d.ts +5 -0
  77. package/dist/types/components/figures/chart/chartJs/chartjs_show_values_plugin.d.ts +17 -0
  78. package/dist/types/components/figures/chart/chartJs/chartjs_sunburst_hover_plugin.d.ts +14 -0
  79. package/dist/types/components/figures/chart/chartJs/chartjs_sunburst_labels_plugin.d.ts +14 -0
  80. package/dist/types/components/figures/chart/chartJs/chartjs_waterfall_plugin.d.ts +12 -0
  81. package/dist/types/components/figures/chart/chartJs/zoomable_chart/zoomable_chart_store.d.ts +30 -0
  82. package/dist/types/components/figures/chart/chartJs/zoomable_chart/zoomable_chartjs.d.ts +64 -0
  83. package/dist/types/components/figures/chart/chartJs/zoomable_chart/zoomable_chartjs_plugins.d.ts +12 -0
  84. package/dist/types/components/figures/chart/chart_dashboard_menu/chart_dashboard_menu.d.ts +44 -0
  85. package/dist/types/components/figures/chart/gauge/gauge_chart_component.d.ts +41 -0
  86. package/dist/types/components/figures/chart/scorecard/chart_scorecard.d.ts +24 -0
  87. package/dist/types/components/figures/figure/figure.d.ts +64 -0
  88. package/dist/types/components/figures/figure_carousel/figure_carousel.d.ts +60 -0
  89. package/dist/types/components/figures/figure_chart/figure_chart.d.ts +36 -0
  90. package/dist/types/components/figures/figure_container/figure_container.d.ts +122 -0
  91. package/dist/types/components/figures/figure_image/figure_image.d.ts +26 -0
  92. package/dist/types/components/filters/filter_menu/filter_menu.d.ts +41 -0
  93. package/dist/types/components/filters/filter_menu_criterion/filter_menu_criterion.d.ts +28 -0
  94. package/dist/types/components/filters/filter_menu_item/filter_menu_value_item.d.ts +32 -0
  95. package/dist/types/components/filters/filter_menu_value_list/filter_menu_value_list.d.ts +41 -0
  96. package/dist/types/components/focus_store.d.ts +6 -0
  97. package/dist/types/components/font_size_editor/font_size_editor.d.ts +34 -0
  98. package/dist/types/components/full_screen_figure/full_screen_figure.d.ts +20 -0
  99. package/dist/types/components/full_screen_figure/full_screen_figure_store.d.ts +8 -0
  100. package/dist/types/components/generic_input/generic_input.d.ts +73 -0
  101. package/dist/types/components/grid/delayed_hovered_cell_store.d.ts +10 -0
  102. package/dist/types/components/grid/grid.d.ts +123 -0
  103. package/dist/types/components/grid_add_rows_footer/grid_add_rows_footer.d.ts +29 -0
  104. package/dist/types/components/grid_overlay/grid_overlay.d.ts +68 -0
  105. package/dist/types/components/grid_overlay/hovered_icon_store.d.ts +12 -0
  106. package/dist/types/components/grid_popover/grid_popover.d.ts +27 -0
  107. package/dist/types/components/header_group/header_group.d.ts +46 -0
  108. package/dist/types/components/header_group/header_group_container.d.ts +34 -0
  109. package/dist/types/components/headers_overlay/headers_overlay.d.ts +177 -0
  110. package/dist/types/components/headers_overlay/unhide_headers.d.ts +50 -0
  111. package/dist/types/components/helpers/autofocus_hook.d.ts +3 -0
  112. package/dist/types/components/helpers/convert_image_to_png.d.ts +1 -0
  113. package/dist/types/components/helpers/css.d.ts +31 -0
  114. package/dist/types/components/helpers/dom_helpers.d.ts +51 -0
  115. package/dist/types/components/helpers/drag_and_drop.d.ts +8 -0
  116. package/dist/types/components/helpers/drag_and_drop_dom_items_hook.d.ts +24 -0
  117. package/dist/types/components/helpers/drag_and_drop_grid_hook.d.ts +18 -0
  118. package/dist/types/components/helpers/draw_grid_hook.d.ts +11 -0
  119. package/dist/types/components/helpers/figure_drag_helper.d.ts +9 -0
  120. package/dist/types/components/helpers/figure_snap_helper.d.ts +25 -0
  121. package/dist/types/components/helpers/highlight_hook.d.ts +4 -0
  122. package/dist/types/components/helpers/html_content_helpers.d.ts +2 -0
  123. package/dist/types/components/helpers/index.d.ts +1 -0
  124. package/dist/types/components/helpers/listener_hook.d.ts +13 -0
  125. package/dist/types/components/helpers/position_hook.d.ts +14 -0
  126. package/dist/types/components/helpers/screen_width_hook.d.ts +3 -0
  127. package/dist/types/components/helpers/selection_helpers.d.ts +4 -0
  128. package/dist/types/components/helpers/time_hooks.d.ts +17 -0
  129. package/dist/types/components/helpers/top_bar_tool_hook.d.ts +6 -0
  130. package/dist/types/components/helpers/touch_handlers_hook.d.ts +11 -0
  131. package/dist/types/components/helpers/wheel_hook.d.ts +1 -0
  132. package/dist/types/components/helpers/zoom.d.ts +21 -0
  133. package/dist/types/components/highlight/border/border.d.ts +22 -0
  134. package/dist/types/components/highlight/corner/corner.d.ts +29 -0
  135. package/dist/types/components/highlight/highlight/highlight.d.ts +35 -0
  136. package/dist/types/components/icon_picker/icon_picker.d.ts +34 -0
  137. package/dist/types/components/icons/icons.d.ts +33 -0
  138. package/dist/types/components/index.d.ts +1 -0
  139. package/dist/types/components/link/index.d.ts +2 -0
  140. package/dist/types/components/link/link_display/link_display.d.ts +29 -0
  141. package/dist/types/components/link/link_editor/link_editor.d.ts +62 -0
  142. package/dist/types/components/menu/menu.d.ts +78 -0
  143. package/dist/types/components/menu_popover/menu_popover.d.ts +127 -0
  144. package/dist/types/components/named_range_selector/named_range_selector.d.ts +36 -0
  145. package/dist/types/components/number_editor/number_editor.d.ts +80 -0
  146. package/dist/types/components/number_input/number_input.d.ts +67 -0
  147. package/dist/types/components/paint_format_button/paint_format_button.d.ts +20 -0
  148. package/dist/types/components/paint_format_button/paint_format_store.d.ts +22 -0
  149. package/dist/types/components/pivot_html_renderer/pivot_html_renderer.d.ts +88 -0
  150. package/dist/types/components/popover/cell_popover_store.d.ts +16 -0
  151. package/dist/types/components/popover/index.d.ts +3 -0
  152. package/dist/types/components/popover/popover.d.ts +83 -0
  153. package/dist/types/components/popover/popover_builders.d.ts +1 -0
  154. package/dist/types/components/scrollbar/index.d.ts +2 -0
  155. package/dist/types/components/scrollbar/scrollbar.d.ts +39 -0
  156. package/dist/types/components/scrollbar/scrollbar_horizontal.d.ts +32 -0
  157. package/dist/types/components/scrollbar/scrollbar_vertical.d.ts +32 -0
  158. package/dist/types/components/scrollbar.d.ts +9 -0
  159. package/dist/types/components/select/select.d.ts +59 -0
  160. package/dist/types/components/selection/selection.d.ts +11 -0
  161. package/dist/types/components/selection_input/selection_input.d.ts +120 -0
  162. package/dist/types/components/selection_input/selection_input_store.d.ts +99 -0
  163. package/dist/types/components/side_panel/carousel_panel/carousel_panel.d.ts +59 -0
  164. package/dist/types/components/side_panel/chart/bar_chart/bar_chart_config_panel.d.ts +12 -0
  165. package/dist/types/components/side_panel/chart/bar_chart/bar_chart_design_panel.d.ts +14 -0
  166. package/dist/types/components/side_panel/chart/building_blocks/axis_design/axis_design_editor.d.ts +71 -0
  167. package/dist/types/components/side_panel/chart/building_blocks/chart_title/chart_title.d.ts +49 -0
  168. package/dist/types/components/side_panel/chart/building_blocks/color_scale/color_scale_picker.d.ts +50 -0
  169. package/dist/types/components/side_panel/chart/building_blocks/data_series/data_series.d.ts +72 -0
  170. package/dist/types/components/side_panel/chart/building_blocks/data_source/data_source.d.ts +52 -0
  171. package/dist/types/components/side_panel/chart/building_blocks/error_section/error_section.d.ts +21 -0
  172. package/dist/types/components/side_panel/chart/building_blocks/general_design/general_design_editor.d.ts +48 -0
  173. package/dist/types/components/side_panel/chart/building_blocks/generic_side_panel/config_panel.d.ts +50 -0
  174. package/dist/types/components/side_panel/chart/building_blocks/humanize_numbers/humanize_numbers.d.ts +18 -0
  175. package/dist/types/components/side_panel/chart/building_blocks/label_range/label_range.d.ts +42 -0
  176. package/dist/types/components/side_panel/chart/building_blocks/legend/legend.d.ts +31 -0
  177. package/dist/types/components/side_panel/chart/building_blocks/pie_hole_size/pie_hole_size.d.ts +21 -0
  178. package/dist/types/components/side_panel/chart/building_blocks/range_data_source/range_data_source.d.ts +110 -0
  179. package/dist/types/components/side_panel/chart/building_blocks/series_design/series_design_editor.d.ts +57 -0
  180. package/dist/types/components/side_panel/chart/building_blocks/series_design/series_with_axis_design_editor.d.ts +58 -0
  181. package/dist/types/components/side_panel/chart/building_blocks/show_data_markers/show_data_markers.d.ts +17 -0
  182. package/dist/types/components/side_panel/chart/building_blocks/show_values/show_values.d.ts +25 -0
  183. package/dist/types/components/side_panel/chart/building_blocks/text_styler/text_styler.d.ts +87 -0
  184. package/dist/types/components/side_panel/chart/calendar_chart/calendar_chart_config_panel.d.ts +22 -0
  185. package/dist/types/components/side_panel/chart/calendar_chart/calendar_chart_design_panel.d.ts +39 -0
  186. package/dist/types/components/side_panel/chart/chart_type_picker/chart_type_picker.d.ts +51 -0
  187. package/dist/types/components/side_panel/chart/chart_with_axis/design_panel.d.ts +32 -0
  188. package/dist/types/components/side_panel/chart/combo_chart/combo_chart_design_panel.d.ts +28 -0
  189. package/dist/types/components/side_panel/chart/common.d.ts +13 -0
  190. package/dist/types/components/side_panel/chart/funnel_chart_panel/funnel_chart_config_panel.d.ts +10 -0
  191. package/dist/types/components/side_panel/chart/funnel_chart_panel/funnel_chart_design_panel.d.ts +32 -0
  192. package/dist/types/components/side_panel/chart/gauge_chart_panel/gauge_chart_config_panel.d.ts +28 -0
  193. package/dist/types/components/side_panel/chart/gauge_chart_panel/gauge_chart_design_panel.d.ts +55 -0
  194. package/dist/types/components/side_panel/chart/geo_chart_panel/geo_chart_config_panel.d.ts +13 -0
  195. package/dist/types/components/side_panel/chart/geo_chart_panel/geo_chart_design_panel.d.ts +29 -0
  196. package/dist/types/components/side_panel/chart/geo_chart_panel/geo_chart_region_select_section.d.ts +28 -0
  197. package/dist/types/components/side_panel/chart/hierarchical_chart/hierarchical_chart_config_panel.d.ts +10 -0
  198. package/dist/types/components/side_panel/chart/index.d.ts +15 -0
  199. package/dist/types/components/side_panel/chart/line_chart/line_chart_config_panel.d.ts +15 -0
  200. package/dist/types/components/side_panel/chart/line_chart/line_chart_design_panel.d.ts +19 -0
  201. package/dist/types/components/side_panel/chart/main_chart_panel/main_chart_panel.d.ts +33 -0
  202. package/dist/types/components/side_panel/chart/main_chart_panel/main_chart_panel_store.d.ts +23 -0
  203. package/dist/types/components/side_panel/chart/pie_chart/pie_chart_design_panel.d.ts +48 -0
  204. package/dist/types/components/side_panel/chart/radar_chart/radar_chart_design_panel.d.ts +31 -0
  205. package/dist/types/components/side_panel/chart/scatter_chart/scatter_chart_config_panel.d.ts +12 -0
  206. package/dist/types/components/side_panel/chart/scorecard_chart_panel/scorecard_chart_config_panel.d.ts +38 -0
  207. package/dist/types/components/side_panel/chart/scorecard_chart_panel/scorecard_chart_design_panel.d.ts +42 -0
  208. package/dist/types/components/side_panel/chart/sunburst_chart/sunburst_chart_design_panel.d.ts +48 -0
  209. package/dist/types/components/side_panel/chart/treemap_chart/treemap_category_color/treemap_category_color.d.ts +28 -0
  210. package/dist/types/components/side_panel/chart/treemap_chart/treemap_chart_design_panel.d.ts +57 -0
  211. package/dist/types/components/side_panel/chart/treemap_chart/treemap_color_scale/treemap_color_scale.d.ts +24 -0
  212. package/dist/types/components/side_panel/chart/waterfall_chart/waterfall_chart_design_panel.d.ts +50 -0
  213. package/dist/types/components/side_panel/chart/zoomable_chart/design_panel.d.ts +25 -0
  214. package/dist/types/components/side_panel/column_stats/column_stats_panel.d.ts +70 -0
  215. package/dist/types/components/side_panel/column_stats/column_stats_store.d.ts +50 -0
  216. package/dist/types/components/side_panel/components/badge_selection/badge_selection.d.ts +21 -0
  217. package/dist/types/components/side_panel/components/checkbox/checkbox.d.ts +46 -0
  218. package/dist/types/components/side_panel/components/cog_wheel_menu/cog_wheel_menu.d.ts +22 -0
  219. package/dist/types/components/side_panel/components/collapse/collapse.d.ts +17 -0
  220. package/dist/types/components/side_panel/components/collapsible/side_panel_collapsible.d.ts +25 -0
  221. package/dist/types/components/side_panel/components/radio_selection/radio_selection.d.ts +32 -0
  222. package/dist/types/components/side_panel/components/round_color_picker/round_color_picker.d.ts +44 -0
  223. package/dist/types/components/side_panel/components/section/section.d.ts +20 -0
  224. package/dist/types/components/side_panel/conditional_formatting/cf_editor/cell_is_rule_editor.d.ts +23 -0
  225. package/dist/types/components/side_panel/conditional_formatting/cf_editor/cf_editor.d.ts +45 -0
  226. package/dist/types/components/side_panel/conditional_formatting/cf_editor/cf_editor_store.d.ts +97 -0
  227. package/dist/types/components/side_panel/conditional_formatting/cf_editor/color_scale_rule_editor.d.ts +18 -0
  228. package/dist/types/components/side_panel/conditional_formatting/cf_editor/color_scale_rule_editor_threshold.d.ts +31 -0
  229. package/dist/types/components/side_panel/conditional_formatting/cf_editor/data_bar_rule_editor.d.ts +23 -0
  230. package/dist/types/components/side_panel/conditional_formatting/cf_editor/icon_set_rule_editor.d.ts +30 -0
  231. package/dist/types/components/side_panel/conditional_formatting/cf_preview/cf_preview.d.ts +28 -0
  232. package/dist/types/components/side_panel/conditional_formatting/cf_preview_list/cf_preview_list.d.ts +24 -0
  233. package/dist/types/components/side_panel/criterion_form/criterion_form.d.ts +26 -0
  234. package/dist/types/components/side_panel/criterion_form/criterion_input/criterion_input.d.ts +67 -0
  235. package/dist/types/components/side_panel/criterion_form/date_criterion/date_criterion.d.ts +15 -0
  236. package/dist/types/components/side_panel/criterion_form/double_input_criterion/double_input_criterion.d.ts +10 -0
  237. package/dist/types/components/side_panel/criterion_form/single_input_criterion/single_input_criterion.d.ts +9 -0
  238. package/dist/types/components/side_panel/criterion_form/top_10_criterion/top_10_criterion.d.ts +17 -0
  239. package/dist/types/components/side_panel/criterion_form/value_in_list_criterion/value_in_list_criterion.d.ts +33 -0
  240. package/dist/types/components/side_panel/criterion_form/value_in_range_criterion/value_in_range_criterion.d.ts +22 -0
  241. package/dist/types/components/side_panel/data_validation/data_validation_panel.d.ts +20 -0
  242. package/dist/types/components/side_panel/data_validation/dv_editor/dv_editor.d.ts +50 -0
  243. package/dist/types/components/side_panel/data_validation/dv_preview/dv_preview.d.ts +20 -0
  244. package/dist/types/components/side_panel/find_and_replace/find_and_replace.d.ts +52 -0
  245. package/dist/types/components/side_panel/find_and_replace/find_and_replace_store.d.ts +73 -0
  246. package/dist/types/components/side_panel/more_formats/more_formats.d.ts +40 -0
  247. package/dist/types/components/side_panel/more_formats/more_formats_store.d.ts +64 -0
  248. package/dist/types/components/side_panel/named_ranges_panel/named_range_preview/named_range_preview.d.ts +33 -0
  249. package/dist/types/components/side_panel/named_ranges_panel/named_ranges_panel.d.ts +22 -0
  250. package/dist/types/components/side_panel/pivot/pivot_custom_groups_collapsible/pivot_custom_groups_collapsible.d.ts +30 -0
  251. package/dist/types/components/side_panel/pivot/pivot_defer_update/pivot_defer_update.d.ts +28 -0
  252. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/add_dimension_button/add_dimension_button.d.ts +46 -0
  253. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension/pivot_dimension.d.ts +36 -0
  254. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension_granularity/pivot_dimension_granularity.d.ts +40 -0
  255. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension_order/pivot_dimension_order.d.ts +21 -0
  256. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_layout_configurator.d.ts +79 -0
  257. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_measure/pivot_measure.d.ts +44 -0
  258. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_sort_section/pivot_sort_section.d.ts +26 -0
  259. package/dist/types/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel.d.ts +72 -0
  260. package/dist/types/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel_store.d.ts +37 -0
  261. package/dist/types/components/side_panel/pivot/pivot_side_panel/pivot_design_panel/pivot_design_panel.d.ts +34 -0
  262. package/dist/types/components/side_panel/pivot/pivot_side_panel/pivot_side_panel.d.ts +39 -0
  263. package/dist/types/components/side_panel/pivot/pivot_side_panel/pivot_side_panel_store.d.ts +44 -0
  264. package/dist/types/components/side_panel/pivot/pivot_side_panel/pivot_spreadsheet_side_panel/pivot_spreadsheet_side_panel.d.ts +50 -0
  265. package/dist/types/components/side_panel/pivot/pivot_title_section/pivot_title_section.d.ts +30 -0
  266. package/dist/types/components/side_panel/remove_duplicates/remove_duplicates.d.ts +39 -0
  267. package/dist/types/components/side_panel/settings/settings_panel.d.ts +34 -0
  268. package/dist/types/components/side_panel/side_panel/side_panel.d.ts +43 -0
  269. package/dist/types/components/side_panel/side_panel/side_panel_store.d.ts +56 -0
  270. package/dist/types/components/side_panel/side_panels/side_panels.d.ts +23 -0
  271. package/dist/types/components/side_panel/split_to_columns_panel/split_to_columns_panel.d.ts +41 -0
  272. package/dist/types/components/side_panel/table_panel/table_panel.d.ts +56 -0
  273. package/dist/types/components/side_panel/table_style_editor_panel/table_style_editor_panel.d.ts +51 -0
  274. package/dist/types/components/small_bottom_bar/ribbon_menu/ribbon_menu.d.ts +36 -0
  275. package/dist/types/components/small_bottom_bar/small_bottom_bar.d.ts +36 -0
  276. package/dist/types/components/spreadsheet/spreadsheet.d.ts +82 -0
  277. package/dist/types/components/spreadsheet_print/spreadsheet_print.d.ts +35 -0
  278. package/dist/types/components/spreadsheet_print/spreadsheet_print_store.d.ts +78 -0
  279. package/dist/types/components/standalone_grid_canvas/figure_renderer_store.d.ts +16 -0
  280. package/dist/types/components/standalone_grid_canvas/standalone_grid_canvas.d.ts +27 -0
  281. package/dist/types/components/tables/hovered_table_store.d.ts +13 -0
  282. package/dist/types/components/tables/table_dropdown_button/table_dropdown_button.d.ts +40 -0
  283. package/dist/types/components/tables/table_resizer/table_resizer.d.ts +27 -0
  284. package/dist/types/components/tables/table_style_picker/table_style_picker.d.ts +34 -0
  285. package/dist/types/components/tables/table_style_preview/table_canvas_helpers.d.ts +8 -0
  286. package/dist/types/components/tables/table_style_preview/table_style_preview.d.ts +45 -0
  287. package/dist/types/components/tables/table_styles_popover/table_styles_popover.d.ts +59 -0
  288. package/dist/types/components/text_input/text_input.d.ts +60 -0
  289. package/dist/types/components/top_bar/color_editor/color_editor.d.ts +32 -0
  290. package/dist/types/components/top_bar/dropdown_action/dropdown_action.d.ts +34 -0
  291. package/dist/types/components/top_bar/font_size_editor/font_size_editor.d.ts +25 -0
  292. package/dist/types/components/top_bar/number_formats_tool/number_formats_tool.d.ts +34 -0
  293. package/dist/types/components/top_bar/top_bar.d.ts +85 -0
  294. package/dist/types/components/top_bar/top_bar_tool_store.d.ts +14 -0
  295. package/dist/types/components/top_bar/top_bar_tools_registry.d.ts +2 -0
  296. package/dist/types/components/top_bar/zoom_editor/zoom_editor.d.ts +24 -0
  297. package/dist/types/components/translations_terms.d.ts +165 -0
  298. package/dist/types/components/validation_messages/validation_messages.d.ts +21 -0
  299. package/dist/types/constants.d.ts +176 -0
  300. package/dist/types/dom_mock.d.ts +0 -0
  301. package/dist/types/formulas/code_builder.d.ts +24 -0
  302. package/dist/types/formulas/compiler.d.ts +108 -0
  303. package/dist/types/formulas/composer_tokenizer.d.ts +54 -0
  304. package/dist/types/formulas/formula_formatter.d.ts +18 -0
  305. package/dist/types/formulas/parser.d.ts +107 -0
  306. package/dist/types/formulas/range_tokenizer.d.ts +8 -0
  307. package/dist/types/formulas/tokenizer.d.ts +26 -0
  308. package/dist/types/functions/arguments.d.ts +90 -0
  309. package/dist/types/functions/autocomplete_arguments_provider.d.ts +13 -0
  310. package/dist/types/functions/create_compute_function.d.ts +5 -0
  311. package/dist/types/functions/function_registry.d.ts +11 -0
  312. package/dist/types/functions/function_registry_population.d.ts +10 -0
  313. package/dist/types/functions/helper_assert.d.ts +8 -0
  314. package/dist/types/functions/helper_financial.d.ts +59 -0
  315. package/dist/types/functions/helper_logical.d.ts +9 -0
  316. package/dist/types/functions/helper_lookup.d.ts +11 -0
  317. package/dist/types/functions/helper_math.d.ts +4 -0
  318. package/dist/types/functions/helper_matrices.d.ts +24 -0
  319. package/dist/types/functions/helper_parser.d.ts +99 -0
  320. package/dist/types/functions/helper_statistical.d.ts +21 -0
  321. package/dist/types/functions/helpers.d.ts +150 -0
  322. package/dist/types/functions/module_array.d.ts +144 -0
  323. package/dist/types/functions/module_database.d.ts +73 -0
  324. package/dist/types/functions/module_date.d.ts +198 -0
  325. package/dist/types/functions/module_engineering.d.ts +7 -0
  326. package/dist/types/functions/module_filter.d.ts +17 -0
  327. package/dist/types/functions/module_financial.d.ts +338 -0
  328. package/dist/types/functions/module_info.d.ts +68 -0
  329. package/dist/types/functions/module_logical.d.ts +39 -0
  330. package/dist/types/functions/module_lookup.d.ts +121 -0
  331. package/dist/types/functions/module_math.d.ts +383 -0
  332. package/dist/types/functions/module_operators.d.ts +96 -0
  333. package/dist/types/functions/module_parser.d.ts +7 -0
  334. package/dist/types/functions/module_statistical.d.ts +252 -0
  335. package/dist/types/functions/module_text.d.ts +176 -0
  336. package/dist/types/functions/module_web.d.ts +7 -0
  337. package/dist/types/helpers/carousel_helpers.d.ts +6 -0
  338. package/dist/types/helpers/cells/cell_evaluation.d.ts +32 -0
  339. package/dist/types/helpers/cells/position_map.d.ts +15 -0
  340. package/dist/types/helpers/chart_date.d.ts +16 -0
  341. package/dist/types/helpers/clipboard/clipboard_helpers.d.ts +44 -0
  342. package/dist/types/helpers/clipboard/navigator_clipboard_wrapper.d.ts +2 -0
  343. package/dist/types/helpers/color.d.ts +127 -0
  344. package/dist/types/helpers/concurrency.d.ts +12 -0
  345. package/dist/types/helpers/coordinates.d.ts +39 -0
  346. package/dist/types/helpers/criterion_helpers.d.ts +5 -0
  347. package/dist/types/helpers/data_normalization.d.ts +19 -0
  348. package/dist/types/helpers/dates.d.ts +94 -0
  349. package/dist/types/helpers/edge_scrolling.d.ts +9 -0
  350. package/dist/types/helpers/event_bus.d.ts +45 -0
  351. package/dist/types/helpers/expand_range.d.ts +8 -0
  352. package/dist/types/helpers/figures/chart.d.ts +30 -0
  353. package/dist/types/helpers/figures/charts/abstract_chart.d.ts +4 -0
  354. package/dist/types/helpers/figures/charts/bar_chart.d.ts +2 -0
  355. package/dist/types/helpers/figures/charts/calendar_chart.d.ts +2 -0
  356. package/dist/types/helpers/figures/charts/chart_common.d.ts +63 -0
  357. package/dist/types/helpers/figures/charts/chart_data_sources.d.ts +11 -0
  358. package/dist/types/helpers/figures/charts/chart_js_extension.d.ts +9 -0
  359. package/dist/types/helpers/figures/charts/chart_ui_common.d.ts +25 -0
  360. package/dist/types/helpers/figures/charts/combo_chart.d.ts +2 -0
  361. package/dist/types/helpers/figures/charts/funnel_chart.d.ts +2 -0
  362. package/dist/types/helpers/figures/charts/gauge_chart.d.ts +2 -0
  363. package/dist/types/helpers/figures/charts/gauge_chart_rendering.d.ts +45 -0
  364. package/dist/types/helpers/figures/charts/geo_chart.d.ts +2 -0
  365. package/dist/types/helpers/figures/charts/index.d.ts +9 -0
  366. package/dist/types/helpers/figures/charts/line_chart.d.ts +2 -0
  367. package/dist/types/helpers/figures/charts/pie_chart.d.ts +2 -0
  368. package/dist/types/helpers/figures/charts/pyramid_chart.d.ts +2 -0
  369. package/dist/types/helpers/figures/charts/radar_chart.d.ts +2 -0
  370. package/dist/types/helpers/figures/charts/runtime/chart_custom_tooltip.d.ts +1 -0
  371. package/dist/types/helpers/figures/charts/runtime/chart_data_extractor.d.ts +22 -0
  372. package/dist/types/helpers/figures/charts/runtime/chart_zoom.d.ts +2 -0
  373. package/dist/types/helpers/figures/charts/runtime/chartjs_dataset.d.ts +30 -0
  374. package/dist/types/helpers/figures/charts/runtime/chartjs_layout.d.ts +6 -0
  375. package/dist/types/helpers/figures/charts/runtime/chartjs_legend.d.ts +20 -0
  376. package/dist/types/helpers/figures/charts/runtime/chartjs_scales.d.ts +21 -0
  377. package/dist/types/helpers/figures/charts/runtime/chartjs_show_values.d.ts +9 -0
  378. package/dist/types/helpers/figures/charts/runtime/chartjs_title.d.ts +4 -0
  379. package/dist/types/helpers/figures/charts/runtime/chartjs_tooltip.d.ts +20 -0
  380. package/dist/types/helpers/figures/charts/runtime/index.d.ts +8 -0
  381. package/dist/types/helpers/figures/charts/scatter_chart.d.ts +2 -0
  382. package/dist/types/helpers/figures/charts/scorecard_chart.d.ts +4 -0
  383. package/dist/types/helpers/figures/charts/scorecard_chart_config_builder.d.ts +45 -0
  384. package/dist/types/helpers/figures/charts/smart_chart_engine.d.ts +5 -0
  385. package/dist/types/helpers/figures/charts/sunburst_chart.d.ts +2 -0
  386. package/dist/types/helpers/figures/charts/tree_map_chart.d.ts +2 -0
  387. package/dist/types/helpers/figures/charts/waterfall_chart.d.ts +2 -0
  388. package/dist/types/helpers/figures/figure/figure.d.ts +4 -0
  389. package/dist/types/helpers/figures/images/image_provider.d.ts +11 -0
  390. package/dist/types/helpers/format/format.d.ts +53 -0
  391. package/dist/types/helpers/format/format_parser.d.ts +39 -0
  392. package/dist/types/helpers/format/format_tokenizer.d.ts +43 -0
  393. package/dist/types/helpers/formulas.d.ts +5 -0
  394. package/dist/types/helpers/index.d.ts +18 -0
  395. package/dist/types/helpers/internal_viewport.d.ts +86 -0
  396. package/dist/types/helpers/inverse_command.d.ts +2 -0
  397. package/dist/types/helpers/links.d.ts +31 -0
  398. package/dist/types/helpers/locale.d.ts +60 -0
  399. package/dist/types/helpers/matrix.d.ts +3 -0
  400. package/dist/types/helpers/misc.d.ts +230 -0
  401. package/dist/types/helpers/numbers.d.ts +25 -0
  402. package/dist/types/helpers/pivot/pivot_composer_helpers.d.ts +63 -0
  403. package/dist/types/helpers/pivot/pivot_domain_helpers.d.ts +70 -0
  404. package/dist/types/helpers/pivot/pivot_helpers.d.ts +83 -0
  405. package/dist/types/helpers/pivot/pivot_highlight.d.ts +2 -0
  406. package/dist/types/helpers/pivot/pivot_menu_items.d.ts +16 -0
  407. package/dist/types/helpers/pivot/pivot_positional_formula_registry.d.ts +7 -0
  408. package/dist/types/helpers/pivot/pivot_presence_tracker.d.ts +9 -0
  409. package/dist/types/helpers/pivot/pivot_presentation.d.ts +98 -0
  410. package/dist/types/helpers/pivot/pivot_registry.d.ts +32 -0
  411. package/dist/types/helpers/pivot/pivot_runtime_definition.d.ts +20 -0
  412. package/dist/types/helpers/pivot/pivot_side_panel_registry.d.ts +6 -0
  413. package/dist/types/helpers/pivot/pivot_time_adapter.d.ts +10 -0
  414. package/dist/types/helpers/pivot/spreadsheet_pivot/data_entry_spreadsheet_pivot.d.ts +20 -0
  415. package/dist/types/helpers/pivot/spreadsheet_pivot/date_spreadsheet_pivot.d.ts +8 -0
  416. package/dist/types/helpers/pivot/spreadsheet_pivot/runtime_definition_spreadsheet_pivot.d.ts +8 -0
  417. package/dist/types/helpers/pivot/spreadsheet_pivot/spreadsheet_pivot.d.ts +91 -0
  418. package/dist/types/helpers/pivot/table_spreadsheet_pivot.d.ts +111 -0
  419. package/dist/types/helpers/pivot_table_presets.d.ts +3 -0
  420. package/dist/types/helpers/range.d.ts +63 -0
  421. package/dist/types/helpers/range_adapter_functions.d.ts +2 -0
  422. package/dist/types/helpers/recompute_zones.d.ts +133 -0
  423. package/dist/types/helpers/rectangle.d.ts +8 -0
  424. package/dist/types/helpers/reference_type.d.ts +14 -0
  425. package/dist/types/helpers/references.d.ts +27 -0
  426. package/dist/types/helpers/rendering.d.ts +2 -0
  427. package/dist/types/helpers/search.d.ts +19 -0
  428. package/dist/types/helpers/selection_statistic_functions.d.ts +14 -0
  429. package/dist/types/helpers/sheet.d.ts +8 -0
  430. package/dist/types/helpers/sort.d.ts +16 -0
  431. package/dist/types/helpers/sort_interactive.d.ts +4 -0
  432. package/dist/types/helpers/state_manager_helpers.d.ts +6 -0
  433. package/dist/types/helpers/table_helpers.d.ts +9 -0
  434. package/dist/types/helpers/table_presets.d.ts +84 -0
  435. package/dist/types/helpers/text_helper.d.ts +52 -0
  436. package/dist/types/helpers/ui/cut_interactive.d.ts +2 -0
  437. package/dist/types/helpers/ui/freeze_interactive.d.ts +3 -0
  438. package/dist/types/helpers/ui/merge_interactive.d.ts +7 -0
  439. package/dist/types/helpers/ui/named_range_interactive.d.ts +4 -0
  440. package/dist/types/helpers/ui/paste_interactive.d.ts +12 -0
  441. package/dist/types/helpers/ui/sheet_interactive.d.ts +3 -0
  442. package/dist/types/helpers/ui/split_to_columns_interactive.d.ts +6 -0
  443. package/dist/types/helpers/ui/table_interactive.d.ts +8 -0
  444. package/dist/types/helpers/ui/toggle_group_interactive.d.ts +7 -0
  445. package/dist/types/helpers/uuid.d.ts +18 -0
  446. package/dist/types/helpers/viewport_collection.d.ts +196 -0
  447. package/dist/types/helpers/zones.d.ts +206 -0
  448. package/dist/types/history/branch.d.ts +63 -0
  449. package/dist/types/history/factory.d.ts +10 -0
  450. package/dist/types/history/operation.d.ts +18 -0
  451. package/dist/types/history/operation_sequence.d.ts +32 -0
  452. package/dist/types/history/repeat_commands/repeat_commands_generic.d.ts +8 -0
  453. package/dist/types/history/repeat_commands/repeat_commands_specific.d.ts +13 -0
  454. package/dist/types/history/repeat_commands/repeat_revision.d.ts +5 -0
  455. package/dist/types/history/selective_history.d.ts +81 -0
  456. package/dist/types/history/tree.d.ts +176 -0
  457. package/dist/types/index.d.ts +412 -0
  458. package/dist/types/migrations/data.d.ts +31 -0
  459. package/dist/types/migrations/legacy_tools.d.ts +15 -0
  460. package/dist/types/migrations/locale.d.ts +94 -0
  461. package/dist/types/migrations/migration_steps.d.ts +5 -0
  462. package/dist/types/model.d.ts +168 -0
  463. package/dist/types/plugins/base_plugin.d.ts +65 -0
  464. package/dist/types/plugins/core/borders.d.ts +129 -0
  465. package/dist/types/plugins/core/carousel.d.ts +20 -0
  466. package/dist/types/plugins/core/cell.d.ts +99 -0
  467. package/dist/types/plugins/core/chart.d.ts +45 -0
  468. package/dist/types/plugins/core/conditional_format.d.ts +59 -0
  469. package/dist/types/plugins/core/data_validation.d.ts +38 -0
  470. package/dist/types/plugins/core/figures.d.ts +40 -0
  471. package/dist/types/plugins/core/header_grouping.d.ts +84 -0
  472. package/dist/types/plugins/core/header_size.d.ts +24 -0
  473. package/dist/types/plugins/core/header_visibility.d.ts +21 -0
  474. package/dist/types/plugins/core/image.d.ts +30 -0
  475. package/dist/types/plugins/core/merge.d.ts +81 -0
  476. package/dist/types/plugins/core/named_range.d.ts +23 -0
  477. package/dist/types/plugins/core/pivot.d.ts +71 -0
  478. package/dist/types/plugins/core/range.d.ts +71 -0
  479. package/dist/types/plugins/core/settings.d.ts +14 -0
  480. package/dist/types/plugins/core/sheet.d.ts +154 -0
  481. package/dist/types/plugins/core/spreadsheet_pivot.d.ts +6 -0
  482. package/dist/types/plugins/core/squisher.d.ts +82 -0
  483. package/dist/types/plugins/core/table_style.d.ts +24 -0
  484. package/dist/types/plugins/core/tables.d.ts +61 -0
  485. package/dist/types/plugins/core/unsquisher.d.ts +60 -0
  486. package/dist/types/plugins/core_plugin.d.ts +47 -0
  487. package/dist/types/plugins/core_view_plugin.d.ts +29 -0
  488. package/dist/types/plugins/index.d.ts +8 -0
  489. package/dist/types/plugins/ui_core_views/cell_evaluation/binary_grid.d.ts +36 -0
  490. package/dist/types/plugins/ui_core_views/cell_evaluation/compilation_parameters.d.ts +17 -0
  491. package/dist/types/plugins/ui_core_views/cell_evaluation/evaluation_plugin.d.ts +54 -0
  492. package/dist/types/plugins/ui_core_views/cell_evaluation/evaluator.d.ts +63 -0
  493. package/dist/types/plugins/ui_core_views/cell_evaluation/formula_dependency_graph.d.ts +18 -0
  494. package/dist/types/plugins/ui_core_views/cell_evaluation/index.d.ts +1 -0
  495. package/dist/types/plugins/ui_core_views/cell_evaluation/interval_tree.d.ts +47 -0
  496. package/dist/types/plugins/ui_core_views/cell_evaluation/position_set.d.ts +28 -0
  497. package/dist/types/plugins/ui_core_views/cell_evaluation/r_tree.d.ts +108 -0
  498. package/dist/types/plugins/ui_core_views/cell_evaluation/range_set.d.ts +23 -0
  499. package/dist/types/plugins/ui_core_views/cell_evaluation/spreading_relation.d.ts +63 -0
  500. package/dist/types/plugins/ui_core_views/cell_evaluation/zone_set.d.ts +16 -0
  501. package/dist/types/plugins/ui_core_views/cell_icon_plugin.d.ts +15 -0
  502. package/dist/types/plugins/ui_core_views/custom_colors.d.ts +29 -0
  503. package/dist/types/plugins/ui_core_views/dynamic_tables.d.ts +38 -0
  504. package/dist/types/plugins/ui_core_views/evaluation_chart.d.ts +26 -0
  505. package/dist/types/plugins/ui_core_views/evaluation_conditional_format.d.ts +36 -0
  506. package/dist/types/plugins/ui_core_views/evaluation_data_validation.d.ts +54 -0
  507. package/dist/types/plugins/ui_core_views/formula_tracker.d.ts +8 -0
  508. package/dist/types/plugins/ui_core_views/header_sizes_ui.d.ts +36 -0
  509. package/dist/types/plugins/ui_core_views/pivot_ui.d.ts +62 -0
  510. package/dist/types/plugins/ui_feature/autofill.d.ts +63 -0
  511. package/dist/types/plugins/ui_feature/automatic_sum.d.ts +102 -0
  512. package/dist/types/plugins/ui_feature/cell_computed_style.d.ts +16 -0
  513. package/dist/types/plugins/ui_feature/checkbox_toggle.d.ts +9 -0
  514. package/dist/types/plugins/ui_feature/collaborative.d.ts +24 -0
  515. package/dist/types/plugins/ui_feature/data_cleanup.d.ts +16 -0
  516. package/dist/types/plugins/ui_feature/datavalidation_insertion.d.ts +5 -0
  517. package/dist/types/plugins/ui_feature/dynamic_translate.d.ts +13 -0
  518. package/dist/types/plugins/ui_feature/format.d.ts +25 -0
  519. package/dist/types/plugins/ui_feature/geo_features.d.ts +23 -0
  520. package/dist/types/plugins/ui_feature/header_visibility_ui.d.ts +22 -0
  521. package/dist/types/plugins/ui_feature/index.d.ts +1 -0
  522. package/dist/types/plugins/ui_feature/insert_pivot.d.ts +15 -0
  523. package/dist/types/plugins/ui_feature/local_history.d.ts +36 -0
  524. package/dist/types/plugins/ui_feature/lock_sheet.d.ts +7 -0
  525. package/dist/types/plugins/ui_feature/pivot_presence_plugin.d.ts +11 -0
  526. package/dist/types/plugins/ui_feature/sort.d.ts +30 -0
  527. package/dist/types/plugins/ui_feature/split_to_columns.d.ts +21 -0
  528. package/dist/types/plugins/ui_feature/subtotal_evaluation.d.ts +5 -0
  529. package/dist/types/plugins/ui_feature/table_autofill.d.ts +6 -0
  530. package/dist/types/plugins/ui_feature/table_computed_style.d.ts +28 -0
  531. package/dist/types/plugins/ui_feature/table_resize_ui.d.ts +6 -0
  532. package/dist/types/plugins/ui_feature/ui_options.d.ts +8 -0
  533. package/dist/types/plugins/ui_feature/ui_sheet.d.ts +55 -0
  534. package/dist/types/plugins/ui_plugin.d.ts +45 -0
  535. package/dist/types/plugins/ui_stateful/carousel_ui.d.ts +21 -0
  536. package/dist/types/plugins/ui_stateful/clipboard.d.ts +65 -0
  537. package/dist/types/plugins/ui_stateful/filter_evaluation.d.ts +29 -0
  538. package/dist/types/plugins/ui_stateful/header_positions.d.ts +28 -0
  539. package/dist/types/plugins/ui_stateful/selection.d.ts +99 -0
  540. package/dist/types/plugins/ui_stateful/sheetview.d.ts +123 -0
  541. package/dist/types/registries/auto_completes/auto_complete_registry.d.ts +59 -0
  542. package/dist/types/registries/auto_completes/data_validation_auto_complete.d.ts +1 -0
  543. package/dist/types/registries/auto_completes/function_auto_complete.d.ts +1 -0
  544. package/dist/types/registries/auto_completes/index.d.ts +5 -0
  545. package/dist/types/registries/auto_completes/pivot_auto_complete.d.ts +1 -0
  546. package/dist/types/registries/auto_completes/pivot_dimension_auto_complete.d.ts +4 -0
  547. package/dist/types/registries/auto_completes/sheet_name_auto_complete.d.ts +1 -0
  548. package/dist/types/registries/autofill_modifiers.d.ts +7 -0
  549. package/dist/types/registries/autofill_rules.d.ts +22 -0
  550. package/dist/types/registries/cell_animation_registry.d.ts +28 -0
  551. package/dist/types/registries/cell_clickable_registry.d.ts +13 -0
  552. package/dist/types/registries/cell_popovers_registry.d.ts +3 -0
  553. package/dist/types/registries/chart_component_registry.d.ts +3 -0
  554. package/dist/types/registries/chart_data_source_component_registry.d.ts +3 -0
  555. package/dist/types/registries/chart_data_source_registry.d.ts +28 -0
  556. package/dist/types/registries/chart_registry.d.ts +64 -0
  557. package/dist/types/registries/chart_subtype_registry.d.ts +3 -0
  558. package/dist/types/registries/chart_types.d.ts +1 -0
  559. package/dist/types/registries/clipboardHandlersRegistries.d.ts +7 -0
  560. package/dist/types/registries/criterion_component_registry.d.ts +13 -0
  561. package/dist/types/registries/criterion_registry.d.ts +44 -0
  562. package/dist/types/registries/currencies_registry.d.ts +7 -0
  563. package/dist/types/registries/evaluation_registry.d.ts +9 -0
  564. package/dist/types/registries/figures_registry.d.ts +19 -0
  565. package/dist/types/registries/icons_on_cell_registry.d.ts +23 -0
  566. package/dist/types/registries/interactive_icon_on_cell_registry.d.ts +1 -0
  567. package/dist/types/registries/inverse_command_registry.d.ts +5 -0
  568. package/dist/types/registries/menu_items_registry.d.ts +21 -0
  569. package/dist/types/registries/menus/cell_menu_registry.d.ts +2 -0
  570. package/dist/types/registries/menus/col_menu_registry.d.ts +2 -0
  571. package/dist/types/registries/menus/header_group_registry.d.ts +7 -0
  572. package/dist/types/registries/menus/index.d.ts +6 -0
  573. package/dist/types/registries/menus/number_format_menu_registry.d.ts +7 -0
  574. package/dist/types/registries/menus/row_menu_registry.d.ts +2 -0
  575. package/dist/types/registries/menus/sheet_menu_registry.d.ts +5 -0
  576. package/dist/types/registries/menus/table_style_menu_registry.d.ts +3 -0
  577. package/dist/types/registries/menus/topbar_menu_registry.d.ts +2 -0
  578. package/dist/types/registries/ot_registry.d.ts +21 -0
  579. package/dist/types/registries/registry.d.ts +52 -0
  580. package/dist/types/registries/repeat_commands_registry.d.ts +3 -0
  581. package/dist/types/registries/repeat_transform_registry.d.ts +18 -0
  582. package/dist/types/registries/side_panel_registry.d.ts +15 -0
  583. package/dist/types/registries/srt_registry.d.ts +11 -0
  584. package/dist/types/registries/toolbar_menu_registry.d.ts +19 -0
  585. package/dist/types/registries/topbar_component_registry.d.ts +20 -0
  586. package/dist/types/registry.d.ts +10 -0
  587. package/dist/types/selection_stream/event_stream.d.ts +65 -0
  588. package/dist/types/selection_stream/selection_stream_processor.d.ts +138 -0
  589. package/dist/types/state_observer.d.ts +18 -0
  590. package/dist/types/store_engine/dependency_container.d.ts +26 -0
  591. package/dist/types/store_engine/index.d.ts +4 -0
  592. package/dist/types/store_engine/store.d.ts +20 -0
  593. package/dist/types/store_engine/store_hooks.d.ts +18 -0
  594. package/dist/types/stores/DOM_focus_store.d.ts +6 -0
  595. package/dist/types/stores/array_formula_highlight.d.ts +9 -0
  596. package/dist/types/stores/client_focus_store.d.ts +15 -0
  597. package/dist/types/stores/formula_fingerprints_store.d.ts +20 -0
  598. package/dist/types/stores/grid_renderer_store.d.ts +41 -0
  599. package/dist/types/stores/highlight_store.d.ts +16 -0
  600. package/dist/types/stores/index.d.ts +2 -0
  601. package/dist/types/stores/model_store.d.ts +2 -0
  602. package/dist/types/stores/notification_store.d.ts +8 -0
  603. package/dist/types/stores/renderer_store.d.ts +23 -0
  604. package/dist/types/stores/screen_width_store.d.ts +6 -0
  605. package/dist/types/stores/spreadsheet_store.d.ts +14 -0
  606. package/dist/types/translation.d.ts +21 -0
  607. package/dist/types/types/autofill.d.ts +71 -0
  608. package/dist/types/types/canvas.d.ts +2 -0
  609. package/dist/types/types/cell_popovers.d.ts +51 -0
  610. package/dist/types/types/cells.d.ts +66 -0
  611. package/dist/types/types/chart/bar_chart.d.ts +17 -0
  612. package/dist/types/types/chart/calendar_chart.d.ts +16 -0
  613. package/dist/types/types/chart/chart.d.ts +222 -0
  614. package/dist/types/types/chart/chartjs.d.ts +2 -0
  615. package/dist/types/types/chart/chartjs_tree_map_type.d.ts +131 -0
  616. package/dist/types/types/chart/combo_chart.d.ts +22 -0
  617. package/dist/types/types/chart/common_chart.d.ts +16 -0
  618. package/dist/types/types/chart/funnel_chart.d.ts +24 -0
  619. package/dist/types/types/chart/gauge_chart.d.ts +89 -0
  620. package/dist/types/types/chart/geo_chart.d.ts +26 -0
  621. package/dist/types/types/chart/index.d.ts +13 -0
  622. package/dist/types/types/chart/line_chart.d.ts +21 -0
  623. package/dist/types/types/chart/pie_chart.d.ts +15 -0
  624. package/dist/types/types/chart/pyramid_chart.d.ts +13 -0
  625. package/dist/types/types/chart/radar_chart.d.ts +18 -0
  626. package/dist/types/types/chart/scatter_chart.d.ts +6 -0
  627. package/dist/types/types/chart/scorecard_chart.d.ts +39 -0
  628. package/dist/types/types/chart/sunburst_chart.d.ts +42 -0
  629. package/dist/types/types/chart/tree_map_chart.d.ts +52 -0
  630. package/dist/types/types/chart/waterfall_chart.d.ts +19 -0
  631. package/dist/types/types/chart_subtype_properties.d.ts +26 -0
  632. package/dist/types/types/clipboard/clipboard_interface.d.ts +12 -0
  633. package/dist/types/types/clipboard.d.ts +57 -0
  634. package/dist/types/types/collaborative/revisions.d.ts +8 -0
  635. package/dist/types/types/collaborative/session.d.ts +53 -0
  636. package/dist/types/types/collaborative/transport_service.d.ts +95 -0
  637. package/dist/types/types/commands.d.ts +940 -0
  638. package/dist/types/types/conditional_formatting.d.ts +114 -0
  639. package/dist/types/types/core_getters.d.ts +74 -0
  640. package/dist/types/types/currency.d.ts +7 -0
  641. package/dist/types/types/data_validation.d.ts +138 -0
  642. package/dist/types/types/env.d.ts +10 -0
  643. package/dist/types/types/errors.d.ts +45 -0
  644. package/dist/types/types/event_stream/index.d.ts +1 -0
  645. package/dist/types/types/event_stream/selection_events.d.ts +11 -0
  646. package/dist/types/types/figure.d.ts +39 -0
  647. package/dist/types/types/files.d.ts +28 -0
  648. package/dist/types/types/find_and_replace.d.ts +8 -0
  649. package/dist/types/types/format.d.ts +8 -0
  650. package/dist/types/types/functions.d.ts +58 -0
  651. package/dist/types/types/generic_criterion.d.ts +16 -0
  652. package/dist/types/types/getters.d.ts +44 -0
  653. package/dist/types/types/history.d.ts +43 -0
  654. package/dist/types/types/image.d.ts +23 -0
  655. package/dist/types/types/index.d.ts +36 -0
  656. package/dist/types/types/locale.d.ts +17 -0
  657. package/dist/types/types/misc.d.ts +344 -0
  658. package/dist/types/types/model.d.ts +46 -0
  659. package/dist/types/types/pivot.d.ts +187 -0
  660. package/dist/types/types/pivot_runtime.d.ts +32 -0
  661. package/dist/types/types/props_of.d.ts +5 -0
  662. package/dist/types/types/range.d.ts +29 -0
  663. package/dist/types/types/rendering.d.ts +119 -0
  664. package/dist/types/types/scroll_direction.d.ts +1 -0
  665. package/dist/types/types/selection_stream_processor.d.ts +35 -0
  666. package/dist/types/types/spreadsheet_env.d.ts +23 -0
  667. package/dist/types/types/store_engine.d.ts +52 -0
  668. package/dist/types/types/stores/notification_store_methods.d.ts +6 -0
  669. package/dist/types/types/table.d.ts +103 -0
  670. package/dist/types/types/validator.d.ts +16 -0
  671. package/dist/types/types/workbook_data.d.ts +147 -0
  672. package/dist/types/types/xlsx.d.ts +512 -0
  673. package/dist/types/xlsx/constants.d.ts +81 -0
  674. package/dist/types/xlsx/conversion/cf_conversion.d.ts +4 -0
  675. package/dist/types/xlsx/conversion/color_conversion.d.ts +31 -0
  676. package/dist/types/xlsx/conversion/conversion_maps.d.ts +179 -0
  677. package/dist/types/xlsx/conversion/data_validation_conversion.d.ts +4 -0
  678. package/dist/types/xlsx/conversion/figure_conversion.d.ts +3 -0
  679. package/dist/types/xlsx/conversion/format_conversion.d.ts +8 -0
  680. package/dist/types/xlsx/conversion/formula_conversion.d.ts +9 -0
  681. package/dist/types/xlsx/conversion/index.d.ts +7 -0
  682. package/dist/types/xlsx/conversion/sheet_conversion.d.ts +4 -0
  683. package/dist/types/xlsx/conversion/style_conversion.d.ts +19 -0
  684. package/dist/types/xlsx/conversion/table_conversion.d.ts +8 -0
  685. package/dist/types/xlsx/extraction/base_extractor.d.ts +141 -0
  686. package/dist/types/xlsx/extraction/cf_extractor.d.ts +15 -0
  687. package/dist/types/xlsx/extraction/chart_extractor.d.ts +15 -0
  688. package/dist/types/xlsx/extraction/data_validation_extractor.d.ts +9 -0
  689. package/dist/types/xlsx/extraction/external_book_extractor.d.ts +6 -0
  690. package/dist/types/xlsx/extraction/figure_extractor.d.ts +10 -0
  691. package/dist/types/xlsx/extraction/index.d.ts +3 -0
  692. package/dist/types/xlsx/extraction/misc_extractor.d.ts +18 -0
  693. package/dist/types/xlsx/extraction/pivot_extractor.d.ts +10 -0
  694. package/dist/types/xlsx/extraction/sheet_extractor.d.ts +27 -0
  695. package/dist/types/xlsx/extraction/style_extractor.d.ts +19 -0
  696. package/dist/types/xlsx/extraction/table_extractor.d.ts +10 -0
  697. package/dist/types/xlsx/functions/cells.d.ts +11 -0
  698. package/dist/types/xlsx/functions/charts.d.ts +3 -0
  699. package/dist/types/xlsx/functions/conditional_formatting.d.ts +3 -0
  700. package/dist/types/xlsx/functions/data_validation.d.ts +3 -0
  701. package/dist/types/xlsx/functions/drawings.d.ts +5 -0
  702. package/dist/types/xlsx/functions/sheet_protection.d.ts +2 -0
  703. package/dist/types/xlsx/functions/styles.d.ts +10 -0
  704. package/dist/types/xlsx/functions/table.d.ts +2 -0
  705. package/dist/types/xlsx/functions/worksheet.d.ts +10 -0
  706. package/dist/types/xlsx/helpers/colors.d.ts +8 -0
  707. package/dist/types/xlsx/helpers/content_helpers.d.ts +61 -0
  708. package/dist/types/xlsx/helpers/misc.d.ts +27 -0
  709. package/dist/types/xlsx/helpers/xlsx_helper.d.ts +9 -0
  710. package/dist/types/xlsx/helpers/xlsx_parser_error_manager.d.ts +38 -0
  711. package/dist/types/xlsx/helpers/xml_helpers.d.ts +35 -0
  712. package/dist/types/xlsx/xlsx_reader.d.ts +13 -0
  713. package/dist/types/xlsx/xlsx_writer.d.ts +19 -0
  714. package/package.json +15 -14
  715. package/dist/o_spreadsheet.iife.min.js +0 -955
@@ -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.2.11
5
- @date 2026-05-11T13:51:07.177Z
6
- @hash 7fa6ba6
4
+ @version 19.3.2
5
+ @date 2026-05-11T13:52:25.929Z
6
+ @hash 14395f7
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
@@ -19,7 +19,7 @@
19
19
  t-key="msg_index"
20
20
  class="ps-2"
21
21
  t-att-class="{'text-truncate': props.singleBox }"
22
- t-esc="msg"
22
+ t-out="msg"
23
23
  />
24
24
  </div>
25
25
  </div>
@@ -33,7 +33,7 @@
33
33
  t-on-click="props.onClick">
34
34
  <div t-if="!env.isSmall" class="o-topbar-top d-flex justify-content-between border-bottom">
35
35
  <!-- Menus -->
36
- <div class="o-topbar-topleft d-flex">
36
+ <div class="o-topbar-topleft d-flex" t-ref="topBarTop">
37
37
  <t t-foreach="menus" t-as="menu" t-key="menu_index">
38
38
  <div
39
39
  t-if="menu.children.length !== 0"
@@ -42,7 +42,7 @@
42
42
  t-on-click="(ev) => this.toggleContextMenu(menu, ev)"
43
43
  t-on-mouseover="(ev) => this.onMenuMouseOver(menu, ev)"
44
44
  t-att-data-id="menu.id">
45
- <t t-esc="getMenuName(menu)"/>
45
+ <t t-out="getMenuName(menu)"/>
46
46
  </div>
47
47
  </t>
48
48
  </div>
@@ -69,9 +69,19 @@
69
69
  Readonly Access
70
70
  </span>
71
71
  </div>
72
- <div t-else="" class="o-toolbar-tools d-flex ms-4 flex-grow-1" t-ref="toolBar">
72
+ <div
73
+ t-else=""
74
+ class="o-toolbar-tools d-flex flex-grow-1 align-items-center"
75
+ t-ref="toolBar">
76
+ <div
77
+ class="d-flex h-100 o-named-range-selector-container align-items-center ms-2 me-1"
78
+ t-ref="namedRanges"
79
+ t-on-click.stop="">
80
+ <NamedRangeSelector/>
81
+ <div class="o-topbar-divider border-end"/>
82
+ </div>
73
83
  <div
74
- class="d-flex tool-container"
84
+ class="d-flex tool-container h-100"
75
85
  t-foreach="toolsCategories"
76
86
  t-as="category"
77
87
  t-key="category"
@@ -125,14 +135,18 @@
125
135
  </div>
126
136
  <MenuPopover
127
137
  t-if="state.menuState.isOpen"
138
+ t-key="state.menuState.parentMenu.id"
128
139
  anchorRect="state.menuState.anchorRect"
129
140
  menuItems="state.menuState.menuItems"
130
141
  onClose="() => this.closeMenus()"
131
142
  onMenuClicked="() => this.props.onClick()"
132
143
  popoverPositioning="'bottom-left'"
144
+ menuId="state.menuState.parentMenu.id"
145
+ autoSelectFirstItem="state.menuState.autoSelectFirstItem"
146
+ onKeyboardNavigation.bind="this.onKeyboardNavigation"
133
147
  />
134
148
  <Popover t-if="state.toolsPopoverState.isOpen" t-props="toolsPopoverProps">
135
- <div class="d-flex px-2 py-1 flex-wrap align-items-center bg-white">
149
+ <div class="d-flex px-2 py-1 flex-wrap align-items-center">
136
150
  <t
137
151
  t-foreach="state.invisibleToolsCategories"
138
152
  t-as="category"
@@ -206,7 +220,7 @@
206
220
  class="props.class"
207
221
  />
208
222
  <Popover t-if="isActive" t-props="popoverProps">
209
- <div class="o-dropdown-content p-1 bg-white" t-if="isActive" t-on-click.stop="">
223
+ <div class="o-dropdown-content p-1" t-if="isActive" t-on-click.stop="">
210
224
  <div class="o-dropdown-line">
211
225
  <t t-foreach="props.childActions" t-as="action" t-key="action_index">
212
226
  <ActionButton action="action" class="props.childClass"/>
@@ -241,9 +255,11 @@
241
255
  t-att-id="props.id"
242
256
  t-att-placeholder="props.placeholder"
243
257
  t-on-change="save"
244
- t-on-blur="save"
258
+ t-on-blur="onBlur"
245
259
  t-on-pointerdown="onMouseDown"
246
260
  t-on-pointerup="onMouseUp"
261
+ t-on-focus="onFocus"
262
+ t-on-input="onInput"
247
263
  t-on-keydown="onKeyDown"
248
264
  />
249
265
  <span
@@ -258,7 +274,7 @@
258
274
  <t t-name="o-spreadsheet-TableStylesPopover">
259
275
  <Popover t-if="props.popoverProps" t-props="props.popoverProps">
260
276
  <div
261
- class="o-table-style-popover d-flex flex-column py-3 bg-white"
277
+ class="o-table-style-popover d-flex flex-column py-3"
262
278
  t-ref="tableStyleList"
263
279
  t-on-contextmenu.prevent="">
264
280
  <div class="d-flex o-notebook ps-4 mb-3">
@@ -270,7 +286,7 @@
270
286
  t-att-class="{ 'selected': state.selectedCategory === category }"
271
287
  t-on-click="() => state.selectedCategory = category"
272
288
  t-att-data-id="category"
273
- t-esc="categories[category_value]"
289
+ t-out="categories[category_value]"
274
290
  />
275
291
  </div>
276
292
  <div
@@ -384,13 +400,115 @@
384
400
  />
385
401
  </t>
386
402
 
403
+ <t t-name="o-spreadsheet-StandaloneGridCanvas">
404
+ <canvas t-ref="canvas"/>
405
+ </t>
406
+
407
+ <t t-name="o-spreadsheet-SpreadsheetPrint">
408
+ <div class="o-spreadsheet-print d-flex flex-column h-100 w-100">
409
+ <t t-set="pages" t-value="printStore.printPages"/>
410
+ <div class="o-print-header flex-shrink-0 d-flex align-items-center d-print-none">
411
+ <h3 class="m-0 p-3 ps-4 text-white">Print Preview</h3>
412
+ <span class="text-white">
413
+ <t t-esc="pages.length"/>
414
+ pages
415
+ </span>
416
+ <button class="o-button ms-auto me-2 flex-grow-0" t-on-click="props.onExitPrintMode">
417
+ Cancel
418
+ </button>
419
+ <button class="o-button primary flex-grow-0 me-4" t-on-click="onPrint">Next</button>
420
+ </div>
421
+ <div class="o-print-container d-flex flex-grow-1 overflow-hidden">
422
+ <div class="o-print-preview w-100 overflow-auto d-flex flex-column">
423
+ <div class="mx-auto">
424
+ <div
425
+ t-if="pages.length === 0"
426
+ class="o-print-page o-empty-print-page m-4 shadow d-flex flex-column align-items-center justify-content-center flex-shrink-0"
427
+ t-att-style="pageStyle">
428
+ <h4 class="fst-italic text-muted">No content to print</h4>
429
+ </div>
430
+ <div
431
+ t-else=""
432
+ t-foreach="pages"
433
+ t-as="page"
434
+ t-key="page_index"
435
+ class="o-print-page m-4 shadow d-flex justify-content-center flex-shrink-0"
436
+ t-att-style="pageStyle">
437
+ <StandaloneGridCanvas
438
+ sheetId="page.sheetId"
439
+ zone="page.zone"
440
+ renderingCtx="page.renderingCtx"
441
+ />
442
+ </div>
443
+ </div>
444
+ </div>
445
+ <div class="o-sidePanel flex-shrink-0 bg-white border-top border-start d-print-none">
446
+ <div class="o-sidePanelBody pt-4">
447
+ <Section t-if="!this.env.isDashboard()">
448
+ <div class="o-section-title">Print content</div>
449
+ <Select
450
+ selectedValue="printStore.printSelection"
451
+ values="printStore.printSelectionOptions"
452
+ class="'o-print-selection'"
453
+ onChange.bind="this.onPrintSelectionChange"
454
+ />
455
+ </Section>
456
+
457
+ <Section>
458
+ <div class="o-section-title">Scale</div>
459
+ <Select
460
+ selectedValue="printStore.printScale"
461
+ values="printStore.printScaleOptions"
462
+ class="'o-print-scale'"
463
+ onChange.bind="this.onPrintScaleChange"
464
+ />
465
+ </Section>
466
+
467
+ <Section>
468
+ <div class="o-section-title">Paper</div>
469
+ <Select
470
+ selectedValue="printStore.pageLayout"
471
+ values="printStore.layoutOptions"
472
+ class="'o-print-layout'"
473
+ onChange.bind="this.onLayoutChange"
474
+ />
475
+ </Section>
476
+
477
+ <Section>
478
+ <div class="o-section-title">Orientation</div>
479
+ <BadgeSelection
480
+ choices="printStore.orientationChoices"
481
+ onChange.bind="this.changeOrientation"
482
+ selectedValue="printStore.orientation"
483
+ />
484
+ </Section>
485
+
486
+ <Section t-if="!this.env.isDashboard()">
487
+ <div class="o-section-title">Formatting</div>
488
+ <Checkbox
489
+ name="'showGridLines'"
490
+ value="!this.printStore.hideGridLines"
491
+ onChange.bind="this.setGridLinesVisibility"
492
+ className="'mt-2'"
493
+ label.translate="Show gridlines"
494
+ />
495
+ </Section>
496
+ </div>
497
+ </div>
498
+ </div>
499
+ </div>
500
+ </t>
501
+
387
502
  <t t-name="o-spreadsheet-Spreadsheet">
388
503
  <div
389
504
  class="o-spreadsheet h-100 w-100"
390
505
  t-att-class="getSpreadSheetClasses()"
391
506
  t-ref="spreadsheet"
392
507
  t-att-style="getStyle()">
393
- <t t-if="env.isDashboard()">
508
+ <t t-if="state.printModeEnabled">
509
+ <SpreadsheetPrint onExitPrintMode.bind="exitPrintMode"/>
510
+ </t>
511
+ <t t-elif="env.isDashboard()">
394
512
  <SpreadsheetDashboard getGridSize.bind="getGridSize"/>
395
513
  <FullScreenFigure/>
396
514
  </t>
@@ -454,7 +572,7 @@
454
572
  t-as="symbol"
455
573
  t-key="symbol_index"
456
574
  class="o-spreadsheet-editor-symbol w-100 d-flex justify-content-center align-items-center mx-1"
457
- t-esc="symbol"
575
+ t-out="symbol"
458
576
  tabindex="-1"
459
577
  t-att-title="symbol"
460
578
  t-on-click="() => this.insertSymbol(symbol)"
@@ -482,7 +600,7 @@
482
600
  t-att-title="backTitle">
483
601
  <i class="fa fa-angle-left"/>
484
602
  </div>
485
- <span class="d-flex align-items-center" t-esc="state.title"/>
603
+ <span class="d-flex align-items-center" t-out="state.title"/>
486
604
  </div>
487
605
  <div
488
606
  class="o-ribbon-menu-wrapper overflow-auto"
@@ -618,9 +736,10 @@
618
736
  <Checkbox
619
737
  label="getCheckboxLabel('automaticAutofill')"
620
738
  name="'automaticAutofill'"
621
- value="tableConfig.automaticAutofill"
739
+ value="tableConfig.automaticAutofill and props.table.type !== 'dynamic'"
622
740
  onChange="(val) => this.updateTableConfig('automaticAutofill', val)"
623
741
  className="'mb-1'"
742
+ disabled="props.table.type === 'dynamic'"
624
743
  />
625
744
  <div class="d-flex flex-row align-items-center">
626
745
  <Checkbox
@@ -718,7 +837,7 @@
718
837
  t-on-click="props.onToggleCollapsePanel">
719
838
  <i class="fa fa-angle-double-right"/>
720
839
  </div>
721
- <div class="o-sidePanelTitle o-fw-bold ms-2" t-esc="getTitle()"/>
840
+ <div class="o-sidePanelTitle o-fw-bold ms-2" t-out="getTitle()"/>
722
841
  <div
723
842
  t-if="props.isPinned"
724
843
  class="o-pin-panel o-sidePanelAction ms-auto rounded active"
@@ -774,7 +893,7 @@
774
893
 
775
894
  </div>
776
895
 
777
- <div class="o-sidePanelTitle o-fw-bold" t-esc="getTitle()"/>
896
+ <div class="o-sidePanelTitle o-fw-bold" t-out="getTitle()"/>
778
897
  </div>
779
898
  </div>
780
899
  </t>
@@ -790,19 +909,19 @@
790
909
  <div class="o-locale-preview mt-4 p-3 rounded border">
791
910
  <div>
792
911
  <span class="o-fw-bold me-1">Number:</span>
793
- <span t-esc="numberFormatPreview"/>
912
+ <span t-out="numberFormatPreview"/>
794
913
  </div>
795
914
  <div>
796
915
  <span class="o-fw-bold me-1">Date:</span>
797
- <span t-esc="dateFormatPreview"/>
916
+ <span t-out="dateFormatPreview"/>
798
917
  </div>
799
918
  <div>
800
919
  <span class="o-fw-bold me-1">Date time:</span>
801
- <span t-esc="dateTimeFormatPreview"/>
920
+ <span t-out="dateTimeFormatPreview"/>
802
921
  </div>
803
922
  <div>
804
923
  <span class="o-fw-bold me-1">First day of week:</span>
805
- <span t-esc="firstDayOfWeek"/>
924
+ <span t-out="firstDayOfWeek"/>
806
925
  </div>
807
926
  </div>
808
927
  </Section>
@@ -935,7 +1054,7 @@
935
1054
  <span
936
1055
  class="text-danger sp_range_error_message"
937
1056
  t-if="shouldDisplayInvalidRangeError"
938
- t-esc="pivot.invalidRangeMessage"
1057
+ t-out="pivot.invalidRangeMessage"
939
1058
  />
940
1059
  </Section>
941
1060
 
@@ -1022,6 +1141,16 @@
1022
1141
  </div>
1023
1142
  </div>
1024
1143
  </div>
1144
+ <div class="row mb-2 align-items-center">
1145
+ <div class="col-6">Use tabular form:</div>
1146
+ <div class="col-6 d-flex align-items-center">
1147
+ <Checkbox
1148
+ name="'tabularForm'"
1149
+ value="pivotStyle.tabularForm ?? defaultStyle.tabularForm"
1150
+ onChange="(val) => this.updatePivotStyleProperty('tabularForm', val)"
1151
+ />
1152
+ </div>
1153
+ </div>
1025
1154
  </div>
1026
1155
  </Section>
1027
1156
 
@@ -1078,7 +1207,7 @@
1078
1207
  />
1079
1208
  <div
1080
1209
  class="o-pivot-measure-display-description mt-3 ps-3 border-start"
1081
- t-esc="measureDisplayDescription[store.measureDisplay.type]"
1210
+ t-out="measureDisplayDescription[store.measureDisplay.type]"
1082
1211
  />
1083
1212
  </Section>
1084
1213
 
@@ -1241,15 +1370,15 @@
1241
1370
  <t t-name="o-spreadsheet-PivotSortSection">
1242
1371
  <Section t-if="hasValidSort" class="'o-pivot-sort'">
1243
1372
  <t t-set-slot="title">Sorting</t>
1244
- <div t-esc="sortDescription" class="pb-2"/>
1373
+ <div t-out="sortDescription" class="pb-2"/>
1245
1374
  <div class="d-flex flex-column gap-2">
1246
1375
  <t t-foreach="sortValuesAndFields" t-as="valueAndField" t-key="valueAndField_index">
1247
1376
  <div class="o-sort-card d-flex gap-1 px-2 border">
1248
1377
  <t t-if="valueAndField.field">
1249
- <span class="fw-bolder" t-esc="valueAndField.field"/>
1378
+ <span class="fw-bolder" t-out="valueAndField.field"/>
1250
1379
  =
1251
1380
  </t>
1252
- <span class="fw-bolder o-sort-value" t-esc="valueAndField.value"/>
1381
+ <span class="fw-bolder o-sort-value" t-out="valueAndField.value"/>
1253
1382
  </div>
1254
1383
  </t>
1255
1384
  </div>
@@ -1299,7 +1428,7 @@
1299
1428
  </div>
1300
1429
  <div class="d-flex flex-row">
1301
1430
  <div class="d-flex py-1 px-2 w-100 small text-muted o-measure-description">
1302
- <i t-esc="getMeasureDescription(measure)"/>
1431
+ <i t-out="getMeasureDescription(measure)"/>
1303
1432
  </div>
1304
1433
  </div>
1305
1434
  </PivotDimension>
@@ -1352,7 +1481,7 @@
1352
1481
  class="'o-fw-bold'"
1353
1482
  selectContentOnFocus="true"
1354
1483
  />
1355
- <span t-else="1" class="o-fw-bold text-truncate" t-esc="dimensionDisplayName"/>
1484
+ <span t-else="1" class="o-fw-bold text-truncate" t-out="dimensionDisplayName"/>
1356
1485
  </div>
1357
1486
  <div class="d-flex flex-rows" t-on-pointerdown.stop="">
1358
1487
  <t t-slot="upper-right-icons"/>
@@ -1369,9 +1498,8 @@
1369
1498
 
1370
1499
  <t t-name="o-spreadsheet-AddDimensionButton">
1371
1500
  <button class="add-dimension o-button" t-on-click="togglePopover" t-ref="button">Add</button>
1372
- <Popover t-if="popover.isOpen" t-props="popoverProps">
1373
- <div
1374
- class="p-2 bg-white border-bottom d-flex sticky-top align-items-baseline pivot-dimension-search bg-white">
1501
+ <Popover t-if="popover.isOpen" t-props="popoverProps" class="'o-pivot-add-dimension-popover'">
1502
+ <div class="p-2 border-bottom d-flex sticky-top align-items-baseline pivot-dimension-search">
1375
1503
  <i class="pe-1 pivot-dimension-search-field-icon text-muted">
1376
1504
  <t t-call="o-spreadsheet-Icon.SEARCH"/>
1377
1505
  </i>
@@ -1454,6 +1582,55 @@
1454
1582
  </SidePanelCollapsible>
1455
1583
  </t>
1456
1584
 
1585
+ <t t-name="o-spreadsheet-NamedRangesPanel">
1586
+ <div class="o-named-ranges">
1587
+ <div class="o-named-range-list">
1588
+ <t t-foreach="namedRanges" t-as="namedRange" t-key="namedRange_index">
1589
+ <NamedRangePreview namedRange="namedRange"/>
1590
+ </t>
1591
+ </div>
1592
+ <div class="o-named-range-add o-button-link p-4 float-end" t-on-click="addNewNamedRange">
1593
+ + Add a new named range
1594
+ </div>
1595
+ </div>
1596
+ </t>
1597
+
1598
+ <t t-name="o-spreadsheet-NamedRangePreview">
1599
+ <t>
1600
+ <div
1601
+ class="o-named-range-preview p-3 pb-1 border-bottom"
1602
+ t-att-class="{
1603
+ 'o-focused': state.isSelectionInputFocused
1604
+ }"
1605
+ t-ref="namedRangePreview">
1606
+ <div class="d-flex justify-content-between">
1607
+ <div class="o-named-range-container w-100 d-flex flex-column">
1608
+ <TextInput
1609
+ class="'o-fw-bold'"
1610
+ value="props.namedRange.name"
1611
+ onChange.bind="updateNamedRangeName"
1612
+ selectContentOnFocus="true"
1613
+ />
1614
+ <SelectionInput
1615
+ ranges="[rangeString]"
1616
+ hasSingleRange="true"
1617
+ required="true"
1618
+ onSelectionChanged.bind="onSelectionInputChanged"
1619
+ onSelectionConfirmed.bind="onSelectionInputConfirmed"
1620
+ onInputFocused.bind="onSelectionInputFocused"
1621
+ />
1622
+ </div>
1623
+ <div
1624
+ class="o-named-range-edit d-none align-items-center o-button-icon px-3"
1625
+ title="Delete named range"
1626
+ t-on-click.stop="deleteNamedRange">
1627
+ <t t-call="o-spreadsheet-Icon.TRASH_FILLED"/>
1628
+ </div>
1629
+ </div>
1630
+ </div>
1631
+ </t>
1632
+ </t>
1633
+
1457
1634
  <t t-name="o-spreadsheet-MoreFormatsPanel">
1458
1635
  <div class="o-more-formats-panel">
1459
1636
  <Section title.translate="Format type">
@@ -1493,8 +1670,8 @@
1493
1670
  <table class="w-100">
1494
1671
  <t t-foreach="examples" t-as="example" t-key="example_index">
1495
1672
  <tr>
1496
- <td class="w-25 pe-3 o-fw-bold" t-esc="example.label"/>
1497
- <td class="w-75 text-truncate" t-esc="example.value"/>
1673
+ <td class="w-25 pe-3 o-fw-bold" t-out="example.label"/>
1674
+ <td class="w-75 text-truncate" t-out="example.value"/>
1498
1675
  </tr>
1499
1676
  </t>
1500
1677
  </table>
@@ -1556,9 +1733,9 @@
1556
1733
  placeholder="e.g. 'search me'"
1557
1734
  />
1558
1735
  <div class="o-input-count" t-if="hasSearchResult">
1559
- <t t-esc="store.selectedMatchIndex+1"/>
1736
+ <t t-out="store.selectedMatchIndex+1"/>
1560
1737
  /
1561
- <t t-esc="store.searchMatches.length"/>
1738
+ <t t-out="store.searchMatches.length"/>
1562
1739
  </div>
1563
1740
  <div t-elif="!this.pendingSearch and store.toSearch !== ''" class="o-input-count">
1564
1741
  0 / 0
@@ -1668,8 +1845,8 @@
1668
1845
  t-on-click="onPreviewClick"
1669
1846
  t-ref="dvPreview">
1670
1847
  <div>
1671
- <div class="o-dv-preview-description o-fw-bold text-truncate" t-esc="descriptionString"/>
1672
- <div class="o-dv-preview-ranges text-truncate" t-esc="rangesString"/>
1848
+ <div class="o-dv-preview-description o-fw-bold text-truncate" t-out="descriptionString"/>
1849
+ <div class="o-dv-preview-ranges text-truncate" t-out="rangesString"/>
1673
1850
  </div>
1674
1851
  <div
1675
1852
  class="o-dv-delete-button d-flex align-items-center o-button-icon px-3"
@@ -1946,10 +2123,10 @@
1946
2123
  <div class="o-cf-preview-description me-3 overflow-auto">
1947
2124
  <div class="o-cf-preview-ruletype">
1948
2125
  <div class="o-cf-preview-description-rule o-fw-bold text-truncate">
1949
- <t t-esc="description"/>
2126
+ <t t-out="description"/>
1950
2127
  </div>
1951
2128
  </div>
1952
- <div class="o-cf-preview-range text-truncate" t-esc="cf.ranges"/>
2129
+ <div class="o-cf-preview-range text-truncate" t-out="cf.ranges.join()"/>
1953
2130
  </div>
1954
2131
  <div class="o-cf-delete ms-auto">
1955
2132
  <div
@@ -1962,129 +2139,155 @@
1962
2139
  </div>
1963
2140
  </t>
1964
2141
 
1965
- <t t-name="o-spreadsheet-IconSets">
1966
- <div class="pb-2">
1967
- <div class="o-section-subtitle">Icons</div>
1968
- <div class="o-cf-iconsets d-flex flex-row">
1969
- <div
1970
- class="o-cf-iconset o-cf-clickable-icon d-flex flex-row justify-content-between border rounded"
1971
- t-foreach="['arrows', 'smiley', 'dots']"
1972
- t-as="iconSet"
1973
- t-key="iconSet"
1974
- t-on-click="() => store.setIconSet(iconSet)">
1975
- <div>
1976
- <t t-call="o-spreadsheet-Icon.{{icons[iconSets[iconSet].good].template}}"/>
1977
- </div>
1978
- <div>
1979
- <t t-call="o-spreadsheet-Icon.{{icons[iconSets[iconSet].neutral].template}}"/>
1980
- </div>
1981
- <div>
1982
- <t t-call="o-spreadsheet-Icon.{{icons[iconSets[iconSet].bad].template}}"/>
2142
+ <t t-name="o-spreadsheet-IconSetRuleEditor">
2143
+ <div class="o-cf-iconset-rule">
2144
+ <div class="pb-2">
2145
+ <div class="o-section-subtitle">Icons</div>
2146
+ <div class="o-cf-iconsets d-flex flex-row">
2147
+ <div
2148
+ class="o-cf-iconset o-cf-clickable-icon d-flex flex-row justify-content-between border rounded"
2149
+ t-foreach="['arrows', 'smiley', 'dots']"
2150
+ t-as="iconSet"
2151
+ t-key="iconSet"
2152
+ t-on-click="() => this.props.store.setIconSet(iconSet)">
2153
+ <div t-foreach="['good', 'neutral', 'bad']" t-as="iconType" t-key="iconType">
2154
+ <t t-call="{{this.getIconTemplate(this.getIconName(iconSet, iconType))}}"/>
2155
+ </div>
1983
2156
  </div>
1984
2157
  </div>
1985
2158
  </div>
1986
- </div>
1987
- </t>
2159
+ <div class="o-inflection mt-4">
2160
+ <table class="w-100">
2161
+ <tr>
2162
+ <th class="o-cf-iconset-icons"/>
2163
+ <th class="o-cf-iconset-text"/>
2164
+ <th class="o-cf-iconset-operator"/>
2165
+ <th/>
2166
+ <th class="o-cf-iconset-type"/>
2167
+ </tr>
1988
2168
 
1989
- <t t-name="o-spreadsheet-IconSetInflexionPointRow">
1990
- <tr>
1991
- <td>
1992
- <div t-on-click.stop="() => store.toggleMenu('iconSet-'+icon+'Icon')">
1993
- <div class="o-cf-icon-button o-cf-clickable-icon me-3 border rounded">
1994
- <t t-call="o-spreadsheet-Icon.{{icons[iconValue].template}}"/>
1995
- </div>
1996
- </div>
1997
- <IconPicker
1998
- t-if="store.state.openedMenu === 'iconSet-'+icon+'Icon'"
1999
- onIconPicked="(i) => store.setIcon(icon, i)"
2000
- />
2001
- </td>
2002
- <td>When value is</td>
2003
- <td>
2004
- <Select
2005
- selectedValue="inflectionPointValue.operator"
2006
- name="'valueType'"
2007
- values="getIconSetOperatorSelectOptions()"
2008
- onChange.bind="(value) => store.setInflectionOperator(inflectionPoint, value)"
2009
- />
2010
- </td>
2011
- <td>
2012
- <div class="ms-2 me-2">
2013
- <input
2014
- type="text"
2015
- t-if="inflectionPointValue.type !== 'formula'"
2016
- class="o-input"
2017
- t-att-class="{ 'o-invalid': isInflectionPointInvalid(inflectionPoint) }"
2018
- t-att-value="rule[inflectionPoint].value"
2019
- t-on-change="(ev) => store.setInflectionValue(inflectionPoint, ev.target.value)"
2020
- />
2021
- <StandaloneComposer t-else="" t-props="getColorIconSetComposerProps(inflectionPoint)"/>
2022
- </div>
2023
- </td>
2024
- <td>
2025
- <Select
2026
- selectedValue="inflectionPointValue.type"
2027
- popoverClass="'o-icon-set-type-select-dropdown'"
2028
- name="'valueType'"
2029
- values="getThresholdTypeSelectOptions('iconSet')"
2030
- onChange.bind="(value) => store.setInflectionType(inflectionPoint, value)"
2031
- />
2032
- </td>
2033
- </tr>
2034
- </t>
2035
-
2036
- <t t-name="o-spreadsheet-IconSetInflexionPoints">
2037
- <div class="o-inflection mt-4">
2038
- <table class="w-100">
2039
- <tr>
2040
- <th class="o-cf-iconset-icons"/>
2041
- <th class="o-cf-iconset-text"/>
2042
- <th class="o-cf-iconset-operator"/>
2043
- <th/>
2044
- <th class="o-cf-iconset-type"/>
2045
- </tr>
2046
- <t t-call="o-spreadsheet-IconSetInflexionPointRow">
2047
- <t t-set="iconValue" t-value="rule.icons.upper"/>
2048
- <t t-set="icon" t-value="'upper'"/>
2049
- <t t-set="inflectionPointValue" t-value="rule.upperInflectionPoint"/>
2050
- <t t-set="inflectionPoint" t-value="'upperInflectionPoint'"/>
2051
- </t>
2052
- <t t-call="o-spreadsheet-IconSetInflexionPointRow">
2053
- <t t-set="iconValue" t-value="rule.icons.middle"/>
2054
- <t t-set="icon" t-value="'middle'"/>
2055
- <t t-set="inflectionPointValue" t-value="rule.lowerInflectionPoint"/>
2056
- <t t-set="inflectionPoint" t-value="'lowerInflectionPoint'"/>
2057
- </t>
2058
- <tr>
2059
- <td>
2060
- <div t-on-click.stop="() => store.toggleMenu('iconSet-lowerIcon')">
2061
- <div class="o-cf-icon-button o-cf-clickable-icon me-3 border rounded">
2062
- <t t-call="o-spreadsheet-Icon.{{icons[rule.icons.lower].template}}"/>
2169
+ <!-- Upper -->
2170
+ <tr>
2171
+ <td>
2172
+ <div t-on-click.stop="() => this.props.store.toggleMenu('iconSet-upperIcon')">
2173
+ <div class="o-cf-icon-button o-cf-clickable-icon me-3 border rounded">
2174
+ <t t-call="{{this.getIconTemplate(this.rule.icons.upper)}}"/>
2175
+ </div>
2063
2176
  </div>
2064
- </div>
2065
- <IconPicker
2066
- t-if="store.state.openedMenu === 'iconSet-lowerIcon'"
2067
- onIconPicked="(icon) => store.setIcon('lower', icon)"
2068
- />
2069
- </td>
2070
- <td>Else</td>
2071
- <td/>
2072
- <td/>
2073
- <td/>
2074
- </tr>
2075
- </table>
2076
- </div>
2077
- </t>
2078
- <t t-name="o-spreadsheet-IconSetEditor">
2079
- <div class="o-cf-iconset-rule">
2080
- <t t-set="icons" t-value="store.icons"/>
2081
- <t t-set="iconSets" t-value="store.iconSets"/>
2082
- <t t-call="o-spreadsheet-IconSets"/>
2083
- <t t-call="o-spreadsheet-IconSetInflexionPoints"/>
2177
+ <IconPicker
2178
+ t-if="this.props.store.state.openedMenu === 'iconSet-upperIcon'"
2179
+ onIconPicked="(i) => this.props.store.setIcon(('upper'), i)"
2180
+ />
2181
+ </td>
2182
+ <td>When value is</td>
2183
+ <td>
2184
+ <Select
2185
+ selectedValue="this.rule.upperInflectionPoint.operator"
2186
+ name="'valueType'"
2187
+ values="this.getIconSetOperatorSelectOptions()"
2188
+ onChange.bind="(value) => this.props.store.setInflectionOperator('upperInflectionPoint', value)"
2189
+ />
2190
+ </td>
2191
+ <td>
2192
+ <div class="ms-2 me-2">
2193
+ <input
2194
+ type="text"
2195
+ t-if="this.rule.upperInflectionPoint.type !== 'formula'"
2196
+ class="o-input"
2197
+ t-att-class="{ 'o-invalid': this.isInflectionPointInvalid('upperInflectionPoint') }"
2198
+ t-att-value="this.rule['upperInflectionPoint'].value"
2199
+ t-on-change="(ev) => this.props.store.setInflectionValue('upperInflectionPoint', ev.target.value)"
2200
+ />
2201
+ <StandaloneComposer
2202
+ t-else=""
2203
+ t-props="this.getColorIconSetComposerProps('upperInflectionPoint')"
2204
+ />
2205
+ </div>
2206
+ </td>
2207
+ <td>
2208
+ <Select
2209
+ selectedValue="this.rule.upperInflectionPoint.type"
2210
+ popoverClass="'o-icon-set-type-select-dropdown'"
2211
+ name="'valueType'"
2212
+ values="this.getThresholdTypeSelectOptions()"
2213
+ onChange.bind="(value) => this.props.store.setInflectionType('upperInflectionPoint', value)"
2214
+ />
2215
+ </td>
2216
+ </tr>
2217
+
2218
+ <!-- Middle -->
2219
+ <tr>
2220
+ <td>
2221
+ <div t-on-click.stop="() => this.props.store.toggleMenu('iconSet-middleIcon')">
2222
+ <div class="o-cf-icon-button o-cf-clickable-icon me-3 border rounded">
2223
+ <t t-call="{{this.getIconTemplate(this.rule.icons.middle)}}"/>
2224
+ </div>
2225
+ </div>
2226
+ <IconPicker
2227
+ t-if="this.props.store.state.openedMenu === 'iconSet-middleIcon'"
2228
+ onIconPicked="(i) => this.props.store.setIcon('middle', i)"
2229
+ />
2230
+ </td>
2231
+ <td>When value is</td>
2232
+ <td>
2233
+ <Select
2234
+ selectedValue="this.rule.lowerInflectionPoint.operator"
2235
+ name="'valueType'"
2236
+ values="this.getIconSetOperatorSelectOptions()"
2237
+ onChange.bind="(value) => this.props.store.setInflectionOperator('lowerInflectionPoint', value)"
2238
+ />
2239
+ </td>
2240
+ <td>
2241
+ <div class="ms-2 me-2">
2242
+ <input
2243
+ type="text"
2244
+ t-if="this.rule.lowerInflectionPoint.type !== 'formula'"
2245
+ class="o-input"
2246
+ t-att-class="{ 'o-invalid': this.isInflectionPointInvalid('lowerInflectionPoint') }"
2247
+ t-att-value="this.rule['lowerInflectionPoint'].value"
2248
+ t-on-change="(ev) => this.props.store.setInflectionValue('lowerInflectionPoint', ev.target.value)"
2249
+ />
2250
+ <StandaloneComposer
2251
+ t-else=""
2252
+ t-props="this.getColorIconSetComposerProps('lowerInflectionPoint')"
2253
+ />
2254
+ </div>
2255
+ </td>
2256
+ <td>
2257
+ <Select
2258
+ selectedValue="this.rule.lowerInflectionPoint.type"
2259
+ popoverClass="'o-icon-set-type-select-dropdown'"
2260
+ name="'valueType'"
2261
+ values="this.getThresholdTypeSelectOptions()"
2262
+ onChange.bind="(value) => this.props.store.setInflectionType('lowerInflectionPoint', value)"
2263
+ />
2264
+ </td>
2265
+ </tr>
2266
+
2267
+ <!-- Lower -->
2268
+ <tr>
2269
+ <td>
2270
+ <div t-on-click.stop="() => this.props.store.toggleMenu('iconSet-lowerIcon')">
2271
+ <div class="o-cf-icon-button o-cf-clickable-icon me-3 border rounded">
2272
+ <t t-call="{{this.getIconTemplate(this.rule.icons.lower)}}"/>
2273
+ </div>
2274
+ </div>
2275
+ <IconPicker
2276
+ t-if="this.props.store.state.openedMenu === 'iconSet-lowerIcon'"
2277
+ onIconPicked="(icon) => this.props.store.setIcon('lower', icon)"
2278
+ />
2279
+ </td>
2280
+ <td>Else</td>
2281
+ <td/>
2282
+ <td/>
2283
+ <td/>
2284
+ </tr>
2285
+ </table>
2286
+ </div>
2084
2287
  <div class="d-flex flex-row">
2085
2288
  <div
2086
2289
  class="o-button-link py-1 ps-0 o-cf-iconset-reverse d-flex align-items-center"
2087
- t-on-click="() => store.reverseIcons()">
2290
+ t-on-click="() => this.props.store.reverseIcons()">
2088
2291
  <t t-call="o-spreadsheet-Icon.REFRESH"/>
2089
2292
  <div class="ms-1">Reverse icons</div>
2090
2293
  </div>
@@ -2092,65 +2295,64 @@
2092
2295
  </div>
2093
2296
  </t>
2094
2297
 
2095
- <t t-name="o-spreadsheet-DataBarEditor">
2298
+ <t t-name="o-spreadsheet-DataBarRuleEditor">
2096
2299
  <div class="o-cf-data-bar-editor">
2097
2300
  <div class="o-section-subtitle">Color</div>
2098
2301
  <RoundColorPicker
2099
- currentColor="colorNumberToHex(rule.color)"
2100
- onColorPicked="(color) => store.updateDataBarColor(color)"
2302
+ currentColor="this.colorNumberToHex(this.rule.color)"
2303
+ onColorPicked="(color) => this.props.store.updateDataBarColor(color)"
2101
2304
  disableNoColor="true"
2102
2305
  />
2103
2306
  <div class="o-section-subtitle">Range of values</div>
2104
2307
  <SelectionInput
2105
- ranges="store.rangeValues"
2308
+ ranges="this.props.store.rangeValues"
2106
2309
  class="'o-range'"
2107
2310
  isInvalid="false"
2108
2311
  hasSingleRange="true"
2109
- onSelectionChanged="(ranges) => store.onDataBarRangeUpdate(ranges)"
2110
- onSelectionConfirmed="() => store.onDataBarRangeChange()"
2312
+ onSelectionChanged="(ranges) => this.props.store.onDataBarRangeUpdate(ranges)"
2313
+ onSelectionConfirmed="() => this.props.store.onDataBarRangeChange()"
2111
2314
  required="false"
2112
2315
  />
2113
2316
  </div>
2114
2317
  </t>
2115
2318
 
2116
2319
  <t t-name="o-spreadsheet-ColorScaleRuleEditorThreshold">
2117
- <t t-set="fill_color">Fill Color</t>
2118
2320
  <div
2119
- t-attf-class="o-threshold o-threshold-{{thresholdType}} d-flex align-items-center flex-row">
2120
- <t t-if="thresholdType === 'midpoint'">
2321
+ t-attf-class="o-threshold o-threshold-{{this.props.thresholdType}} d-flex align-items-center flex-row">
2322
+ <t t-if="this.props.thresholdType === 'midpoint'">
2121
2323
  <Select
2122
- selectedValue="threshold?.type || 'none'"
2123
- class="'me-2' + (threshold and threshold.type !== 'value' ? ' o-select-with-input' : '')"
2324
+ selectedValue="this.threshold?.type || 'none'"
2325
+ class="'me-2' + (this.threshold and this.threshold.type !== 'value' ? ' o-select-with-input' : '')"
2124
2326
  name="'valueType'"
2125
- values="getThresholdTypeSelectOptions(thresholdType)"
2126
- onChange.bind="(value) => store.onMidpointChange(value)"
2327
+ values="this.getThresholdTypeSelectOptions()"
2328
+ onChange.bind="(value) => this.props.store.onMidpointChange(value)"
2127
2329
  />
2128
2330
  </t>
2129
2331
  <t t-else="">
2130
2332
  <Select
2131
- selectedValue="threshold?.type || 'none'"
2132
- class="'me-2' + (threshold and threshold.type !== 'value' ? ' o-select-with-input' : '')"
2333
+ selectedValue="this.threshold?.type || 'none'"
2334
+ class="'me-2' + (this.threshold and this.threshold.type !== 'value' ? ' o-select-with-input' : '')"
2133
2335
  name="'valueType'"
2134
- values="getThresholdTypeSelectOptions(thresholdType)"
2135
- onChange.bind="(value) => store.updateThresholdType(thresholdType, value)"
2336
+ values="this.getThresholdTypeSelectOptions()"
2337
+ onChange.bind="(value) => this.props.store.updateThresholdType(this.props.thresholdType, value)"
2136
2338
  />
2137
2339
  </t>
2138
- <div class="o-threshold-value me-2" t-if="threshold and threshold.type !== 'value'">
2340
+ <div class="o-threshold-value me-2" t-if="this.threshold and this.threshold.type !== 'value'">
2139
2341
  <input
2140
- t-if="threshold.type !== 'formula'"
2342
+ t-if="this.threshold.type !== 'formula'"
2141
2343
  type="text"
2142
2344
  class="o-input"
2143
- t-att-value="threshold.value"
2144
- t-on-change="(ev) => store.updateThresholdValue(thresholdType, ev.target.value)"
2145
- t-att-class="{ 'o-invalid': isValueInvalid(thresholdType), 'invisible': threshold === undefined }"
2345
+ t-att-value="this.threshold.value"
2346
+ t-on-change="(ev) => this.props.store.updateThresholdValue(this.props.thresholdType, ev.target.value)"
2347
+ t-att-class="{ 'o-invalid': this.isValueInvalid(), 'invisible': this.threshold === undefined }"
2146
2348
  />
2147
- <StandaloneComposer t-else="" t-props="getColorScaleComposerProps(thresholdType)"/>
2349
+ <StandaloneComposer t-else="" t-props="this.getColorScaleComposerProps()"/>
2148
2350
  </div>
2149
- <div t-attf-class="flex-shrink-0 ms-1 {{ threshold === undefined ? 'invisible' : ''}}">
2351
+ <div t-attf-class="flex-shrink-0 ms-1 {{ this.threshold === undefined ? 'invisible' : ''}}">
2150
2352
  <RoundColorPicker
2151
- currentColor="getThresholdColor(threshold)"
2152
- onColorPicked="(color) => store.setColorScaleColor(thresholdType, color)"
2153
- title="fill_color"
2353
+ currentColor="this.getThresholdColor(this.threshold)"
2354
+ onColorPicked="(color) => this.props.store.setColorScaleColor(this.props.thresholdType, color)"
2355
+ title.translate="Fill Color"
2154
2356
  disableNoColor="true"
2155
2357
  />
2156
2358
  </div>
@@ -2160,38 +2362,28 @@
2160
2362
  <t t-name="o-spreadsheet-ColorScaleRuleEditor">
2161
2363
  <div class="o-cf-color-scale-editor">
2162
2364
  <div class="o-section-subtitle">Preview</div>
2163
- <div class="o-cf-preview-display mb-4" t-attf-style="{{store.previewGradient}}">
2365
+ <div class="o-cf-preview-display mb-4" t-attf-style="{{this.props.store.previewGradient}}">
2164
2366
  Preview text
2165
2367
  </div>
2166
2368
  <div class="o-section-subtitle">Minpoint</div>
2167
- <t t-call="o-spreadsheet-ColorScaleRuleEditorThreshold">
2168
- <t t-set="threshold" t-value="rule.minimum"/>
2169
- <t t-set="thresholdType" t-value="'minimum'"/>
2170
- </t>
2369
+ <ColorScaleRuleEditorThreshold store="this.props.store" thresholdType="'minimum'"/>
2171
2370
  <div class="o-section-subtitle">MidPoint</div>
2172
- <t t-call="o-spreadsheet-ColorScaleRuleEditorThreshold">
2173
- <t t-set="threshold" t-value="rule.midpoint"/>
2174
- <t t-set="thresholdType" t-value="'midpoint'"/>
2175
- </t>
2371
+ <ColorScaleRuleEditorThreshold store="this.props.store" thresholdType="'midpoint'"/>
2176
2372
  <div class="o-section-subtitle">MaxPoint</div>
2177
- <t t-call="o-spreadsheet-ColorScaleRuleEditorThreshold">
2178
- <t t-set="threshold" t-value="rule.maximum"/>
2179
- <t t-set="thresholdType" t-value="'maximum'"/>
2180
- </t>
2373
+ <ColorScaleRuleEditorThreshold store="this.props.store" thresholdType="'maximum'"/>
2181
2374
  </div>
2182
2375
  </t>
2183
2376
 
2184
2377
  <t t-name="o-spreadsheet-ConditionalFormattingEditor">
2185
2378
  <div class="o-cf-editor">
2186
- <t t-set="state" t-value="store.state"/>
2187
2379
  <Section class="'o-cf-range pb-0'" title.translate="Apply to range">
2188
2380
  <div class="o-selection-cf">
2189
2381
  <SelectionInput
2190
- ranges="state.ranges"
2382
+ ranges="this.store.state.ranges"
2191
2383
  class="'o-range'"
2192
- isInvalid="store.isRangeValid"
2193
- onSelectionChanged="(ranges) => store.onRangeUpdate(ranges)"
2194
- onSelectionConfirmed="() => store.onRangeConfirmed()"
2384
+ isInvalid="this.store.isRangeValid"
2385
+ onSelectionChanged="(ranges) => this.store.onRangeUpdate(ranges)"
2386
+ onSelectionConfirmed="() => this.store.onRangeConfirmed()"
2195
2387
  required="true"
2196
2388
  />
2197
2389
  </div>
@@ -2199,130 +2391,123 @@
2199
2391
  <Section class="'pb-0'" title.translate="Format rules">
2200
2392
  <div class="o-cf-type-selector">
2201
2393
  <BadgeSelection
2202
- choices="cfTypesValues"
2203
- onChange="(ruleType) => store.changeRuleType(ruleType)"
2204
- selectedValue="state.currentCFType"
2394
+ choices="this.cfTypesValues"
2395
+ onChange="(ruleType) => this.store.changeRuleType(ruleType)"
2396
+ selectedValue="this.store.state.currentCFType"
2205
2397
  />
2206
2398
  </div>
2207
2399
  </Section>
2208
2400
  <Section>
2209
- <t t-if="state.currentCFType === 'CellIsRule'" t-call="o-spreadsheet-CellIsRuleEditor">
2210
- <t t-set="rule" t-value="state.rules.cellIs"/>
2211
- </t>
2212
- <t
2213
- t-if="state.currentCFType === 'ColorScaleRule'"
2214
- t-call="o-spreadsheet-ColorScaleRuleEditor">
2215
- <t t-set="rule" t-value="state.rules.colorScale"/>
2216
- </t>
2217
- <t t-if="state.currentCFType === 'IconSetRule'" t-call="o-spreadsheet-IconSetEditor">
2218
- <t t-set="rule" t-value="state.rules.iconSet"/>
2219
- </t>
2220
- <t t-if="state.currentCFType === 'DataBarRule'" t-call="o-spreadsheet-DataBarEditor">
2221
- <t t-set="rule" t-value="state.rules.dataBar"/>
2222
- </t>
2401
+ <CellIsRuleEditor
2402
+ t-if="this.store.state.currentCFType === 'CellIsRule'"
2403
+ store="this.store"
2404
+ />
2405
+ <ColorScaleRuleEditor
2406
+ t-if="this.store.state.currentCFType === 'ColorScaleRule'"
2407
+ store="this.store"
2408
+ />
2409
+ <IconSetRuleEditor
2410
+ t-if="this.store.state.currentCFType === 'IconSetRule'"
2411
+ store="this.store"
2412
+ />
2413
+ <DataBarRuleEditor
2414
+ t-if="this.store.state.currentCFType === 'DataBarRule'"
2415
+ store="this.store"
2416
+ />
2223
2417
  </Section>
2224
2418
  <Section class="'pt-1'">
2225
2419
  <div class="o-sidePanelButtons">
2226
- <button t-on-click="onCancel" class="o-button o-cf-cancel">Discard</button>
2420
+ <button t-on-click="this.onCancel" class="o-button o-cf-cancel">Discard</button>
2227
2421
  <button
2228
- t-on-click="onSave"
2422
+ t-on-click="this.onSave"
2229
2423
  class="o-button primary o-cf-save"
2230
- t-att-disabled="state.errors.length !== 0">
2424
+ t-att-disabled="this.store.state.errors.length !== 0">
2231
2425
  Save
2232
2426
  </button>
2233
2427
  </div>
2234
2428
  </Section>
2235
2429
  <Section>
2236
- <ValidationMessages messages="store.errorMessages" msgType="'error'"/>
2430
+ <ValidationMessages messages="this.store.errorMessages" msgType="'error'"/>
2237
2431
  </Section>
2238
2432
  </div>
2239
2433
  </t>
2240
2434
 
2241
- <t t-name="o-spreadsheet-CellIsRuleEditorPreview">
2242
- <div
2243
- class="o-cf-preview-display border"
2244
- t-attf-style="font-weight:{{currentStyle.bold ?'bold':'normal'}};
2245
- text-decoration:{{getTextDecoration(currentStyle)}};
2246
- font-style:{{currentStyle.italic?'italic':'normal'}};
2247
- color:{{currentStyle.textColor || '#000'}};
2248
- background-color:{{currentStyle.fillColor}};">
2249
- <t t-if="previewText" t-esc="previewText"/>
2250
- <t t-else="">Preview text</t>
2251
- </div>
2252
- </t>
2253
-
2254
2435
  <t t-name="o-spreadsheet-CellIsRuleEditor">
2255
- <t t-set="fill_color">Fill Color</t>
2256
- <t t-set="text_color">Text Color</t>
2257
- <t t-set="state" t-value="store.state"/>
2258
2436
  <div class="o-cf-cell-is-rule">
2259
2437
  <div class="o-section-subtitle">Format cells if...</div>
2260
2438
  <Select
2261
2439
  class="'o-cell-is-operator mb-2'"
2262
- values="store.cfCriterions"
2263
- selectedValue="state.rules.cellIs.operator"
2264
- onChange="(operator) => store.editOperator(operator)"
2440
+ values="this.props.store.cfCriterions"
2441
+ selectedValue="this.rule.operator"
2442
+ onChange="(operator) => this.props.store.editOperator(operator)"
2265
2443
  />
2266
2444
 
2267
2445
  <t
2268
- t-if="store.criterionComponent"
2269
- t-component="store.criterionComponent"
2270
- t-key="state.rules.cellIs.operator"
2271
- criterion="store.genericCriterion"
2272
- onCriterionChanged="(rule) => store.onRuleValuesChanged(rule)"
2273
- autofocus="store.state.hasEditedCf"
2446
+ t-if="this.props.store.criterionComponent"
2447
+ t-component="this.props.store.criterionComponent"
2448
+ t-key="this.rule.operator"
2449
+ criterion="this.props.store.genericCriterion"
2450
+ onCriterionChanged="(rule) => this.props.store.onRuleValuesChanged(rule)"
2451
+ autofocus="this.props.store.state.hasEditedCf"
2274
2452
  />
2275
2453
 
2276
2454
  <div class="o-section-subtitle pt-3">Formatting style</div>
2277
2455
 
2278
- <t t-call="o-spreadsheet-CellIsRuleEditorPreview">
2279
- <t t-set="currentStyle" t-value="rule.style"/>
2280
- </t>
2456
+ <div
2457
+ class="o-cf-preview-display border"
2458
+ t-attf-style="font-weight:{{this.rule.style.bold ?'bold':'normal'}};
2459
+ text-decoration:{{this.getTextDecoration(this.rule.style)}};
2460
+ font-style:{{this.rule.style.italic?'italic':'normal'}};
2461
+ color:{{this.rule.style.textColor || '#000'}};
2462
+ background-color:{{this.rule.style.fillColor}};">
2463
+ <t t-if="previewText" t-out="previewText"/>
2464
+ <t t-else="">Preview text</t>
2465
+ </div>
2281
2466
  <div class="o-sidePanel-tools d-flex">
2282
2467
  <div
2283
2468
  class="o-hoverable-button o-menu-item-button"
2284
2469
  title="Bold"
2285
- t-att-class="{active:rule.style.bold}"
2286
- t-on-click="() => store.toggleStyle('bold')">
2470
+ t-att-class="{active:this.rule.style.bold}"
2471
+ t-on-click="() => this.props.store.toggleStyle('bold')">
2287
2472
  <t t-call="o-spreadsheet-Icon.BOLD"/>
2288
2473
  </div>
2289
2474
  <div
2290
2475
  class="o-hoverable-button o-menu-item-button"
2291
2476
  title="Italic"
2292
- t-att-class="{active:rule.style.italic}"
2293
- t-on-click="() => store.toggleStyle('italic')">
2477
+ t-att-class="{active:this.rule.style.italic}"
2478
+ t-on-click="() => this.props.store.toggleStyle('italic')">
2294
2479
  <t t-call="o-spreadsheet-Icon.ITALIC"/>
2295
2480
  </div>
2296
2481
  <div
2297
2482
  class="o-hoverable-button o-menu-item-button"
2298
2483
  title="Underline"
2299
- t-att-class="{active:rule.style.underline}"
2300
- t-on-click="(ev) => store.toggleStyle('underline', ev)">
2484
+ t-att-class="{active:this.rule.style.underline}"
2485
+ t-on-click="(ev) => this.props.store.toggleStyle('underline', ev)">
2301
2486
  <t t-call="o-spreadsheet-Icon.UNDERLINE"/>
2302
2487
  </div>
2303
2488
  <div
2304
2489
  class="o-hoverable-button o-menu-item-button"
2305
2490
  title="Strikethrough"
2306
- t-att-class="{active:rule.style.strikethrough}"
2307
- t-on-click="(ev) => store.toggleStyle('strikethrough', ev)">
2491
+ t-att-class="{active:this.rule.style.strikethrough}"
2492
+ t-on-click="(ev) => this.props.store.toggleStyle('strikethrough', ev)">
2308
2493
  <t t-call="o-spreadsheet-Icon.STRIKE"/>
2309
2494
  </div>
2310
2495
  <ColorPickerWidget
2311
- currentColor="rule.style.textColor || '#000000'"
2312
- toggleColorPicker="() => store.toggleMenu('cellIsRule-textColor')"
2313
- showColorPicker="state.openedMenu === 'cellIsRule-textColor'"
2314
- onColorPicked="(color) => store.setColor('textColor', color)"
2315
- title="text_color"
2496
+ currentColor="this.rule.style.textColor || '#000000'"
2497
+ toggleColorPicker="() => this.props.store.toggleMenu('cellIsRule-textColor')"
2498
+ showColorPicker="this.props.store.state.openedMenu === 'cellIsRule-textColor'"
2499
+ onColorPicked="(color) => this.props.store.setColor('textColor', color)"
2500
+ title.translate="Text Color"
2316
2501
  icon="'o-spreadsheet-Icon.TEXT_COLOR'"
2317
2502
  class="'o-hoverable-button o-menu-item-button'"
2318
2503
  />
2319
2504
  <div class="o-divider border-end"/>
2320
2505
  <ColorPickerWidget
2321
- currentColor="rule.style.fillColor"
2322
- toggleColorPicker="() => store.toggleMenu('cellIsRule-fillColor')"
2323
- showColorPicker="state.openedMenu === 'cellIsRule-fillColor'"
2324
- onColorPicked="(color) => store.setColor('fillColor', color)"
2325
- title="fill_color"
2506
+ currentColor="this.rule.style.fillColor"
2507
+ toggleColorPicker="() => this.props.store.toggleMenu('cellIsRule-fillColor')"
2508
+ showColorPicker="this.props.store.state.openedMenu === 'cellIsRule-fillColor'"
2509
+ onColorPicked="(color) => this.props.store.setColor('fillColor', color)"
2510
+ title.translate="Fill Color"
2326
2511
  icon="'o-spreadsheet-Icon.FILL_COLOR'"
2327
2512
  class="'o-hoverable-button o-menu-item-button'"
2328
2513
  />
@@ -2334,7 +2519,7 @@
2334
2519
  <div class="o-section" t-att-class="props.class">
2335
2520
  <t t-if="props.slots.title or props.title">
2336
2521
  <div class="o-section-title">
2337
- <t t-esc="props.title"/>
2522
+ <t t-out="props.title"/>
2338
2523
  <t t-slot="title"/>
2339
2524
  </div>
2340
2525
  </t>
@@ -2378,7 +2563,7 @@
2378
2563
  t-att-checked="choice.value === props.selectedValue"
2379
2564
  t-on-change="() => props.onChange(choice.value)"
2380
2565
  />
2381
- <t t-esc="choice.label"/>
2566
+ <t t-out="choice.label"/>
2382
2567
  </label>
2383
2568
  </t>
2384
2569
  </div>
@@ -2395,7 +2580,7 @@
2395
2580
  <span class="collapsor-arrow">
2396
2581
  <t t-call="o-spreadsheet-Icon.ANGLE_DOWN"/>
2397
2582
  </span>
2398
- <div class="ps-2" t-esc="props.title"/>
2583
+ <div class="ps-2" t-out="props.title"/>
2399
2584
  </div>
2400
2585
  </div>
2401
2586
  <Collapse isCollapsed="state.isCollapsed">
@@ -2444,7 +2629,7 @@
2444
2629
  t-on-change="onChange"
2445
2630
  t-on-click.stop=""
2446
2631
  />
2447
- <span class="text-truncate" t-if="props.label" t-esc="props.label"/>
2632
+ <span class="text-truncate" t-if="props.label" t-out="props.label"/>
2448
2633
  </label>
2449
2634
  </t>
2450
2635
 
@@ -2453,11 +2638,105 @@
2453
2638
  <t t-foreach="props.choices" t-as="choice" t-key="choice.value">
2454
2639
  <button
2455
2640
  class="flex-grow-1 o-button"
2456
- t-esc="choice.label"
2457
2641
  t-att-class="{ 'selected': props.selectedValue === choice.value }"
2458
2642
  t-on-click="() => props.onChange(choice.value)"
2459
- t-att-data-id="choice.value"
2460
- />
2643
+ t-att-data-id="choice.value">
2644
+ <t t-if="choice.icon" t-call="{{choice.icon}}"/>
2645
+ <t t-out="choice.label"/>
2646
+ </button>
2647
+ </t>
2648
+ </div>
2649
+ </t>
2650
+
2651
+ <t t-name="o-spreadsheet-ColumnStatsPanel">
2652
+ <div class="o-column-stats-panel">
2653
+ <t t-if="store.hasSingleColumn">
2654
+ <Section>
2655
+ <div class="d-flex justify-content-between align-items-center o-panel-header mb-1">
2656
+ <span class="o-fw-bold w-100 o-column-stats-title" t-out="columnLabel"/>
2657
+ <span
2658
+ class="p-1 o-row-switcher"
2659
+ data-test-id="previous-column-button"
2660
+ title="Switch to previous column"
2661
+ t-on-click="store.selectPreviousColumn">
2662
+ <t t-call="o-spreadsheet-Icon.ANGLE_LEFT"/>
2663
+ </span>
2664
+ <span
2665
+ class="p-1 o-row-switcher"
2666
+ title="Switch to next column"
2667
+ data-test-id="next-column-button"
2668
+ t-on-click="store.selectNextColumn">
2669
+ <t t-call="o-spreadsheet-Icon.ANGLE_RIGHT"/>
2670
+ </span>
2671
+ </div>
2672
+ <div class="mt-3">
2673
+ <div class="o-sidePanel-label mb-1">Rows to ignore</div>
2674
+ <NumberInput
2675
+ value="store.ignoredRows"
2676
+ class="'o-ignored-rows-input'"
2677
+ min="0"
2678
+ onChange.bind="updateIgnoredRows"
2679
+ />
2680
+ </div>
2681
+ </Section>
2682
+ <SidePanelCollapsible title.translate="Data visualization" isInitiallyCollapsed="false">
2683
+ <t t-set-slot="content">
2684
+ <Section class="'pt-0'">
2685
+ <BadgeSelection
2686
+ choices="charts"
2687
+ onChange.bind="switchChart"
2688
+ selectedValue="state.currentChart"
2689
+ />
2690
+ <t t-if="shouldShowChart">
2691
+ <div class="o-column-stats-chart mx-2 mt-2">
2692
+ <canvas class="w-100 h-100" t-ref="columnStatsChart"/>
2693
+ </div>
2694
+ </t>
2695
+ <t t-else="">
2696
+ <div class="o-column-stats-no-data text-muted mt-4" t-out="chartErrorMessage"/>
2697
+ </t>
2698
+ </Section>
2699
+ </t>
2700
+ </SidePanelCollapsible>
2701
+ <SidePanelCollapsible title.translate="General statistics" isInitiallyCollapsed="false">
2702
+ <t t-set-slot="content">
2703
+ <Section class="'o-column-global-stats d-flex flex-column gap-2 pt-0'">
2704
+ <t t-foreach="store.statItems" t-as="stat" t-key="stat.name">
2705
+ <div class="o-column-stats-row d-flex justify-content-between">
2706
+ <span class="text-muted" t-out="stat.name"/>
2707
+ <span class="o-fw-bold" t-att-data-test-id="stat.name" t-out="stat.value"/>
2708
+ </div>
2709
+ </t>
2710
+ </Section>
2711
+ </t>
2712
+ </SidePanelCollapsible>
2713
+ <SidePanelCollapsible title.translate="Frequency" isInitiallyCollapsed="true">
2714
+ <t t-set-slot="content">
2715
+ <div class="mx-4 mb-2">
2716
+ <BadgeSelection
2717
+ choices="frequencyOrders"
2718
+ onChange.bind="switchFrequencyOrder"
2719
+ selectedValue="state.currentFrequencyOrder"
2720
+ />
2721
+ </div>
2722
+ <div class="o-column-global-stats d-flex flex-column mx-4 mb-2">
2723
+ <t t-foreach="valueFrequencies" t-as="value" t-key="value.value">
2724
+ <div
2725
+ class="o-column-stats-row o-column-frequencies-row d-flex justify-content-between"
2726
+ t-on-mouseenter="() => this.highlightFrequencyPositions(value.positions)"
2727
+ t-on-mouseleave="() => this.clearHighlights()">
2728
+ <span class="frequency-label text-muted" t-out="value.value"/>
2729
+ <span class="frequency-value o-fw-bold" t-out="value.count"/>
2730
+ </div>
2731
+ </t>
2732
+ </div>
2733
+ </t>
2734
+ </SidePanelCollapsible>
2735
+ </t>
2736
+ <t t-else="">
2737
+ <div class="o-column-stats-empty text-muted p-4">
2738
+ Select a single column to view statistics.
2739
+ </div>
2461
2740
  </t>
2462
2741
  </div>
2463
2742
  </t>
@@ -2702,8 +2981,8 @@
2702
2981
  onColorPicked="(color) => this.onGroupColorChanged(group_index, color)"
2703
2982
  />
2704
2983
  <span class="ps-2">
2705
- <span t-esc="'(#' + (group_index +1 ) + ')'" class="o-text-bolder pe-1"/>
2706
- <span class="text-muted" t-esc="group.label"/>
2984
+ <span t-out="'(#' + (group_index +1 ) + ')'" class="o-text-bolder pe-1"/>
2985
+ <span class="text-muted" t-out="group.label"/>
2707
2986
  </span>
2708
2987
  </div>
2709
2988
  </t>
@@ -2738,8 +3017,8 @@
2738
3017
  onColorPicked="(color) => this.onGroupColorChanged(item_index, color)"
2739
3018
  />
2740
3019
  <span class="ps-2">
2741
- <span t-esc="'(#' + (item_index +1 ) + ')'" class="o-text-bolder pe-1"/>
2742
- <span class="text-muted" t-esc="item.label"/>
3020
+ <span t-out="'(#' + (item_index +1 ) + ')'" class="o-text-bolder pe-1"/>
3021
+ <span class="text-muted" t-out="item.label"/>
2743
3022
  </span>
2744
3023
  </div>
2745
3024
  </t>
@@ -2856,22 +3135,13 @@
2856
3135
 
2857
3136
  <t t-name="o-spreadsheet-ScatterConfigPanel">
2858
3137
  <div>
2859
- <ChartDataSeries
2860
- ranges="this.getDataSeriesRanges()"
2861
- onSelectionChanged.bind="onDataSeriesRangesChanged"
2862
- onSelectionConfirmed.bind="onDataSeriesConfirmed"
2863
- onSelectionReordered.bind="onDataSeriesReordered"
2864
- onSelectionRemoved.bind="onDataSeriesRemoved"
2865
- canChangeDatasetOrientation="canChangeDatasetOrientation"
2866
- datasetOrientation="datasetOrientation"
2867
- onFlipAxis.bind="setDatasetOrientation"
2868
- />
2869
- <ChartLabelRange
2870
- range="this.getLabelRange()"
2871
- isInvalid="isLabelInvalid"
2872
- onSelectionChanged.bind="onLabelRangeChanged"
2873
- onSelectionConfirmed.bind="onLabelRangeConfirmed"
2874
- options="this.getLabelRangeOptions()"
3138
+ <ChartDataSourceComponent
3139
+ chartId="props.chartId"
3140
+ definition="props.definition"
3141
+ updateChart="props.updateChart"
3142
+ canUpdateChart="props.canUpdateChart"
3143
+ onErrorMessagesChanged.bind="onErrorMessagesChanged"
3144
+ getLabelRangeOptions.bind="getLabelRangeOptions"
2875
3145
  />
2876
3146
 
2877
3147
  <ChartErrorSection t-if="errorMessages.length" messages="errorMessages"/>
@@ -2897,7 +3167,7 @@
2897
3167
  <t t-name="o-spreadsheet-PieChartDesignPanel">
2898
3168
  <GeneralDesignEditor t-props="props">
2899
3169
  <t t-set-slot="general-extension">
2900
- <ChartLegend t-props="props"/>
3170
+ <ChartLegend t-props="props" isDisabled="isLegendDisabled"/>
2901
3171
  <Section class="'pt-0'" title.translate="Values">
2902
3172
  <ChartShowValues t-props="props"/>
2903
3173
  </Section>
@@ -2911,6 +3181,25 @@
2911
3181
  />
2912
3182
  </t>
2913
3183
  </GeneralDesignEditor>
3184
+
3185
+ <SidePanelCollapsible isInitiallyCollapsed="true" title.translate="Pie Slice">
3186
+ <t t-set-slot="content">
3187
+ <Section class="'py-0'">
3188
+ <Select
3189
+ class="'o-pie-slice-selector'"
3190
+ selectedValue="state.index.toString()"
3191
+ values="pieSliceOptions"
3192
+ onChange="(value) => this.updateEditedValues(value)"
3193
+ />
3194
+ </Section>
3195
+ <Section class="'py-4'">
3196
+ <div class="d-flex align-items-center">
3197
+ <span class="o-section-title mb-0 pe-2">Series color</span>
3198
+ <RoundColorPicker currentColor="sliceColor" onColorPicked.bind="updateSliceColor"/>
3199
+ </div>
3200
+ </Section>
3201
+ </t>
3202
+ </SidePanelCollapsible>
2914
3203
  </t>
2915
3204
 
2916
3205
  <t t-name="o-spreadsheet-ChartPanel">
@@ -3015,22 +3304,13 @@
3015
3304
  onChange.bind="onUpdateCumulative"
3016
3305
  />
3017
3306
  </Section>
3018
- <ChartDataSeries
3019
- ranges="this.getDataSeriesRanges()"
3020
- onSelectionChanged.bind="onDataSeriesRangesChanged"
3021
- onSelectionConfirmed.bind="onDataSeriesConfirmed"
3022
- onSelectionReordered.bind="onDataSeriesReordered"
3023
- onSelectionRemoved.bind="onDataSeriesRemoved"
3024
- canChangeDatasetOrientation="canChangeDatasetOrientation"
3025
- datasetOrientation="datasetOrientation"
3026
- onFlipAxis.bind="setDatasetOrientation"
3027
- />
3028
- <ChartLabelRange
3029
- range="this.getLabelRange()"
3030
- isInvalid="isLabelInvalid"
3031
- onSelectionChanged.bind="onLabelRangeChanged"
3032
- onSelectionConfirmed.bind="onLabelRangeConfirmed"
3033
- options="this.getLabelRangeOptions()"
3307
+ <ChartDataSourceComponent
3308
+ chartId="props.chartId"
3309
+ definition="props.definition"
3310
+ updateChart="props.updateChart"
3311
+ canUpdateChart="props.canUpdateChart"
3312
+ onErrorMessagesChanged.bind="onErrorMessagesChanged"
3313
+ getLabelRangeOptions.bind="getLabelRangeOptions"
3034
3314
  />
3035
3315
 
3036
3316
  <ChartErrorSection t-if="errorMessages.length" messages="errorMessages"/>
@@ -3039,21 +3319,15 @@
3039
3319
 
3040
3320
  <t t-name="o-spreadsheet-HierarchicalChartConfigPanel">
3041
3321
  <div>
3042
- <ChartDataSeries
3043
- ranges="this.getDataSeriesRanges()"
3044
- onSelectionChanged.bind="onDataSeriesRangesChanged"
3045
- onSelectionConfirmed.bind="onDataSeriesConfirmed"
3046
- onSelectionReordered.bind="onDataSeriesReordered"
3047
- onSelectionRemoved.bind="onDataSeriesRemoved"
3048
- title.translate="Hierarchy"
3049
- />
3050
- <ChartLabelRange
3051
- range="this.getLabelRange()"
3052
- isInvalid="isLabelInvalid"
3053
- onSelectionChanged.bind="onLabelRangeChanged"
3054
- onSelectionConfirmed.bind="onLabelRangeConfirmed"
3055
- options="this.getLabelRangeOptions()"
3056
- title.translate="Values"
3322
+ <ChartDataSourceComponent
3323
+ chartId="props.chartId"
3324
+ definition="props.definition"
3325
+ updateChart="props.updateChart"
3326
+ canUpdateChart="props.canUpdateChart"
3327
+ onErrorMessagesChanged.bind="onErrorMessagesChanged"
3328
+ getLabelRangeOptions.bind="getLabelRangeOptions"
3329
+ dataSeriesTitle.translate="Hierarchy"
3330
+ labelRangeTitle.translate="Values"
3057
3331
  />
3058
3332
 
3059
3333
  <ChartErrorSection t-if="errorMessages.length" messages="errorMessages"/>
@@ -3112,24 +3386,14 @@
3112
3386
  updateChart="props.updateChart"
3113
3387
  />
3114
3388
 
3115
- <ChartDataSeries
3116
- ranges="dataRanges"
3117
- onSelectionChanged.bind="onDataSeriesRangesChanged"
3118
- onSelectionConfirmed.bind="onDataSeriesConfirmed"
3119
- onSelectionReordered.bind="onDataSeriesReordered"
3120
- onSelectionRemoved.bind="onDataSeriesRemoved"
3121
- maxNumberOfUsedRanges="maxNumberOfUsedRanges"
3122
- canChangeDatasetOrientation="canChangeDatasetOrientation"
3123
- datasetOrientation="datasetOrientation"
3124
- onFlipAxis.bind="setDatasetOrientation"
3125
- />
3126
- <ChartLabelRange
3127
- range="this.getLabelRange()"
3128
- isInvalid="isLabelInvalid"
3129
- onSelectionChanged="(ranges) => this.onLabelRangeChanged(ranges)"
3130
- onSelectionConfirmed="() => this.onLabelRangeConfirmed()"
3131
- options="this.getLabelRangeOptions()"
3132
- title.translate="Territories"
3389
+ <ChartDataSourceComponent
3390
+ chartId="props.chartId"
3391
+ definition="props.definition"
3392
+ updateChart="props.updateChart"
3393
+ canUpdateChart="props.canUpdateChart"
3394
+ onErrorMessagesChanged.bind="onErrorMessagesChanged"
3395
+ getLabelRangeOptions.bind="getLabelRangeOptions"
3396
+ labelRangeTitle.translate="Territories"
3133
3397
  />
3134
3398
 
3135
3399
  <ChartErrorSection t-if="errorMessages.length" messages="errorMessages"/>
@@ -3172,9 +3436,88 @@
3172
3436
  </Section>
3173
3437
 
3174
3438
  <Section title.translate="Thresholds">
3175
- <t t-call="o-spreadsheet-GaugeChartColorSectionTemplate">
3176
- <t t-set="sectionRule" t-value="state.sectionRule"/>
3177
- </t>
3439
+ <div class="o-gauge-color-set">
3440
+ <table>
3441
+ <tr>
3442
+ <th class="o-gauge-color-set-colorPicker"/>
3443
+ <th class="o-gauge-color-set-text"/>
3444
+ <th class="o-gauge-color-set-operator"/>
3445
+ <th class="o-gauge-color-set-value">Value</th>
3446
+ <th class="o-gauge-color-set-type">Type</th>
3447
+ </tr>
3448
+
3449
+ <tr>
3450
+ <td>
3451
+ <RoundColorPicker
3452
+ currentColor="state.sectionRule.colors.lowerColor"
3453
+ onColorPicked="(color) => this.updateSectionColor('lowerColor', color)"
3454
+ />
3455
+ </td>
3456
+ <td>When value is</td>
3457
+ <td class="pe-2">
3458
+ <Select
3459
+ selectedValue="state.sectionRule['lowerInflectionPoint'].operator"
3460
+ name="'operatorType'"
3461
+ values="inflectionPointOperators"
3462
+ onChange.bind="(value) => this.updateSectionRuleOperator('lowerInflectionPoint', value)"
3463
+ />
3464
+ </td>
3465
+ <td class="pe-2">
3466
+ <StandaloneComposer t-props="getGaugeInflectionComposerProps('lowerColor')"/>
3467
+ </td>
3468
+ <td>
3469
+ <Select
3470
+ selectedValue="state.sectionRule['lowerInflectionPoint'].type"
3471
+ name="'valueType'"
3472
+ values="inflectionPointTypes"
3473
+ onChange.bind="(value) => this.updateSectionRulePointType('lowerInflectionPoint', value)"
3474
+ />
3475
+ </td>
3476
+ </tr>
3477
+
3478
+ <tr>
3479
+ <td>
3480
+ <RoundColorPicker
3481
+ currentColor="state.sectionRule.colors.middleColor"
3482
+ onColorPicked="(color) => this.updateSectionColor('middleColor', color)"
3483
+ />
3484
+ </td>
3485
+ <td>When value is</td>
3486
+ <td class="pe-2">
3487
+ <Select
3488
+ selectedValue="state.sectionRule['upperInflectionPoint'].operator"
3489
+ name="'operatorType'"
3490
+ values="inflectionPointOperators"
3491
+ onChange.bind="(value) => this.updateSectionRuleOperator('upperInflectionPoint', value)"
3492
+ />
3493
+ </td>
3494
+ <td class="pe-2">
3495
+ <StandaloneComposer t-props="getGaugeInflectionComposerProps('middleColor')"/>
3496
+ </td>
3497
+ <td>
3498
+ <Select
3499
+ selectedValue="state.sectionRule['upperInflectionPoint'].type"
3500
+ name="'valueType'"
3501
+ values="inflectionPointTypes"
3502
+ onChange.bind="(value) => this.updateSectionRulePointType('upperInflectionPoint', value)"
3503
+ />
3504
+ </td>
3505
+ </tr>
3506
+
3507
+ <tr>
3508
+ <td>
3509
+ <RoundColorPicker
3510
+ currentColor="state.sectionRule.colors.upperColor"
3511
+ onColorPicked="(color) => this.updateSectionColor('upperColor', color)"
3512
+ />
3513
+ </td>
3514
+ <td>Else</td>
3515
+ <td/>
3516
+ <td/>
3517
+ <td/>
3518
+ </tr>
3519
+ </table>
3520
+ </div>
3178
3521
  </Section>
3179
3522
 
3180
3523
  <ChartErrorSection t-if="designErrorMessages.length" messages="designErrorMessages"/>
@@ -3182,86 +3525,11 @@
3182
3525
  </SidePanelCollapsible>
3183
3526
  </t>
3184
3527
 
3185
- <t t-name="o-spreadsheet-GaugeChartColorSectionTemplate">
3186
- <div class="o-gauge-color-set">
3187
- <table>
3188
- <tr>
3189
- <th class="o-gauge-color-set-colorPicker"/>
3190
- <th class="o-gauge-color-set-text"/>
3191
- <th class="o-gauge-color-set-operator"/>
3192
- <th class="o-gauge-color-set-value">Value</th>
3193
- <th class="o-gauge-color-set-type">Type</th>
3194
- </tr>
3195
-
3196
- <t t-call="o-spreadsheet-GaugeChartColorSectionTemplateRow">
3197
- <t t-set="sectionColor" t-value="sectionRule.colors.lowerColor"/>
3198
- <t t-set="sectionType" t-value="'lowerColor'"/>
3199
- <t t-set="inflectionPoint" t-value="'lowerInflectionPoint'"/>
3200
- <t t-set="isInvalid" t-value="isLowerInflectionPointInvalid"/>
3201
- <t t-set="inflectionPointName" t-value="'lowerInflectionPoint'"/>
3202
- </t>
3203
-
3204
- <t t-call="o-spreadsheet-GaugeChartColorSectionTemplateRow">
3205
- <t t-set="sectionColor" t-value="sectionRule.colors.middleColor"/>
3206
- <t t-set="sectionType" t-value="'middleColor'"/>
3207
- <t t-set="inflectionPoint" t-value="'upperInflectionPoint'"/>
3208
- <t t-set="isInvalid" t-value="isUpperInflectionPointInvalid"/>
3209
- <t t-set="inflectionPointName" t-value="'upperInflectionPoint'"/>
3210
- </t>
3211
-
3212
- <tr>
3213
- <td>
3214
- <RoundColorPicker
3215
- currentColor="sectionRule.colors.upperColor"
3216
- onColorPicked="(color) => this.updateSectionColor('upperColor', color)"
3217
- />
3218
- </td>
3219
- <td>Else</td>
3220
- <td/>
3221
- <td/>
3222
- <td/>
3223
- </tr>
3224
- </table>
3225
- </div>
3226
- </t>
3227
-
3228
- <t t-name="o-spreadsheet-GaugeChartColorSectionTemplateRow">
3229
- <tr>
3230
- <td>
3231
- <RoundColorPicker
3232
- currentColor="sectionColor"
3233
- onColorPicked="(color) => this.updateSectionColor(sectionType, color)"
3234
- />
3235
- </td>
3236
- <td>When value is</td>
3237
- <td class="pe-2">
3238
- <t t-set="below">below</t>
3239
- <t t-set="belowOrEqualTo">below or equal to</t>
3240
- <Select
3241
- selectedValue="sectionRule[inflectionPoint].operator"
3242
- name="'operatorType'"
3243
- values="inflectionPointOperators"
3244
- onChange.bind="(value) => this.updateSectionRuleOperator(inflectionPoint, value)"
3245
- />
3246
- </td>
3247
- <td class="pe-2">
3248
- <StandaloneComposer t-props="getGaugeInflectionComposerProps(sectionType)"/>
3249
- </td>
3250
- <td>
3251
- <Select
3252
- selectedValue="sectionRule[inflectionPoint].type"
3253
- name="'valueType'"
3254
- values="inflectionPointTypes"
3255
- onChange.bind="(value) => this.updateSectionRulePointType(inflectionPoint, value)"
3256
- />
3257
- </td>
3258
- </tr>
3259
- </t>
3260
-
3261
3528
  <t t-name="o-spreadsheet-GaugeChartConfigPanel">
3262
3529
  <div>
3263
3530
  <ChartDataSeries
3264
3531
  ranges="[this.getDataRange()]"
3532
+ dataSetStyles="{}"
3265
3533
  onSelectionChanged="(ranges) => this.onDataRangeChanged(ranges)"
3266
3534
  onSelectionConfirmed="() => this.updateDataRange()"
3267
3535
  hasSingleRange="true"
@@ -3295,7 +3563,7 @@
3295
3563
  currentColor="item.color"
3296
3564
  onColorPicked="(color) => this.updateFunnelItemColor(item_index, color)"
3297
3565
  />
3298
- <span class="ps-2" t-esc="item.label"/>
3566
+ <span class="ps-2" t-out="item.label"/>
3299
3567
  </div>
3300
3568
  </t>
3301
3569
  </Section>
@@ -3327,13 +3595,13 @@
3327
3595
  </GeneralDesignEditor>
3328
3596
  <SeriesWithAxisDesignEditor t-props="props">
3329
3597
  <t t-set-slot="general-extension" t-slot-scope="scope">
3330
- <t t-set="index" t-value="scope.index"/>
3598
+ <t t-set="dataSetId" t-value="scope.dataSetId"/>
3331
3599
  <Section class="'pt-0 o-series-type-selection'" title.translate="Serie type">
3332
3600
  <RadioSelection
3333
3601
  choices="seriesTypeChoices"
3334
- selectedValue="getDataSeriesType(index)"
3602
+ selectedValue="getDataSeriesType(dataSetId)"
3335
3603
  name="'seriesType'"
3336
- onChange="(type) => this.updateDataSeriesType(index, type)"
3604
+ onChange="(type) => this.updateDataSeriesType(dataSetId, type)"
3337
3605
  />
3338
3606
  </Section>
3339
3607
  </t>
@@ -3379,15 +3647,12 @@
3379
3647
  <t t-set="selectedChartProperties" t-value="getSelectedChartSubtypeProperties()"/>
3380
3648
  <Section title.translate="Chart type">
3381
3649
  <div class="position-relative">
3382
- <select
3383
- class="o-input o-type-selector"
3650
+ <div
3651
+ class="o-select o-input o-type-selector"
3384
3652
  t-ref="selectRef"
3385
3653
  t-on-pointerdown.prevent="onPointerDown">
3386
- <option
3387
- t-esc="selectedChartProperties.displayName"
3388
- t-att-value="selectedChartProperties.chartSubtype"
3389
- />
3390
- </select>
3654
+ <t t-out="selectedChartProperties.displayName"/>
3655
+ </div>
3391
3656
  <div class="o-type-selector-preview position-absolute">
3392
3657
  <t t-call="{{selectedChartProperties.preview}}"/>
3393
3658
  </div>
@@ -3396,11 +3661,11 @@
3396
3661
  <Popover t-if="state.popoverProps" t-props="state.popoverProps">
3397
3662
  <div
3398
3663
  t-ref="popoverRef"
3399
- class="o-chart-select-popover px-3 pb-4 bg-white"
3664
+ class="o-chart-select-popover px-3 pb-4"
3400
3665
  t-att-style="state.popoverStyle">
3401
3666
  <t t-foreach="categories" t-as="category" t-key="category">
3402
3667
  <t t-if="chartTypeByCategories[category]">
3403
- <h5 class="my-3" t-esc="category_value"/>
3668
+ <h5 class="my-3" t-out="category_value"/>
3404
3669
  <div class="d-flex flex-wrap">
3405
3670
  <t
3406
3671
  t-foreach="chartTypeByCategories[category]"
@@ -3859,22 +4124,14 @@
3859
4124
 
3860
4125
  <t t-name="o-spreadsheet-CalendarChartConfigPanel">
3861
4126
  <div>
3862
- <ChartDataSeries
3863
- ranges="this.getDataSeriesRanges()"
3864
- onSelectionChanged.bind="onDataSeriesRangesChanged"
3865
- onSelectionConfirmed.bind="onDataSeriesConfirmed"
3866
- onSelectionReordered.bind="onDataSeriesReordered"
3867
- onSelectionRemoved.bind="onDataSeriesRemoved"
3868
- maxNumberOfUsedRanges="1"
3869
- canChangeDatasetOrientation="false"
3870
- />
3871
- <ChartLabelRange
3872
- range="this.getLabelRange()"
3873
- isInvalid="isLabelInvalid"
3874
- onSelectionChanged.bind="onLabelRangeChanged"
3875
- onSelectionConfirmed.bind="onLabelRangeConfirmed"
3876
- options="this.getLabelRangeOptions()"
3877
- title.translate="Date range"
4127
+ <ChartDataSourceComponent
4128
+ chartId="props.chartId"
4129
+ definition="props.definition"
4130
+ updateChart="props.updateChart"
4131
+ canUpdateChart="props.canUpdateChart"
4132
+ onErrorMessagesChanged.bind="onErrorMessagesChanged"
4133
+ getLabelRangeOptions.bind="getLabelRangeOptions"
4134
+ labelRangeTitle.translate="Date range"
3878
4135
  />
3879
4136
 
3880
4137
  <Section title.translate="Fields to group by">
@@ -4000,8 +4257,8 @@
4000
4257
  <t t-name="o-spreadsheet-SeriesWithAxisDesignEditor">
4001
4258
  <SeriesDesignEditor t-props="props">
4002
4259
  <t t-set-slot="data-series-extension" t-slot-scope="scope">
4003
- <t t-set="index" t-value="scope.index"/>
4004
- <t t-slot="general-extension" index="index"/>
4260
+ <t t-set="dataSetId" t-value="scope.dataSetId"/>
4261
+ <t t-slot="general-extension" dataSetId="dataSetId"/>
4005
4262
  <Section class="'pt-0 pb-0'">
4006
4263
  <Section
4007
4264
  class="'pt-0 px-0 o-vertical-axis-selection'"
@@ -4009,9 +4266,9 @@
4009
4266
  title.translate="Vertical axis">
4010
4267
  <RadioSelection
4011
4268
  choices="axisChoices"
4012
- selectedValue="getDataSerieAxis(index)"
4269
+ selectedValue="getDataSerieAxis(dataSetId)"
4013
4270
  name="'axis'"
4014
- onChange="(value) => this.updateDataSeriesAxis(index, value)"
4271
+ onChange="(value) => this.updateDataSeriesAxis(dataSetId, value)"
4015
4272
  />
4016
4273
  </Section>
4017
4274
  <Section
@@ -4019,13 +4276,13 @@
4019
4276
  t-if="!props.definition.horizontal"
4020
4277
  title.translate="Trend line">
4021
4278
  <t t-set="showTrendLineLabel">Show trend line</t>
4022
- <t t-set="trend" t-value="getTrendLineConfiguration(index)"/>
4279
+ <t t-set="trend" t-value="getTrendLineConfiguration(dataSetId)"/>
4023
4280
  <t t-set="trendType" t-value="getTrendType(trend)"/>
4024
4281
  <Checkbox
4025
4282
  name="'showTrendLine'"
4026
4283
  label="showTrendLineLabel"
4027
4284
  value="trend !== undefined and trend.display"
4028
- onChange="(display) => this.toggleDataTrend(index, display)"
4285
+ onChange="(display) => this.toggleDataTrend(dataSetId, display)"
4029
4286
  />
4030
4287
  <div t-if="trend !== undefined and trend.display">
4031
4288
  <div class="d-flex py-2">
@@ -4035,7 +4292,7 @@
4035
4292
  selectedValue="trendType"
4036
4293
  values="trendOptions"
4037
4294
  class="'trend-type-selector'"
4038
- onChange="(value) => this.onChangeTrendType(index, value)"
4295
+ onChange="(value) => this.onChangeTrendType(dataSetId, value)"
4039
4296
  />
4040
4297
  </div>
4041
4298
  <div class="w-50 ms-3" t-if="trendType === 'trailingMovingAverage'">
@@ -4044,24 +4301,24 @@
4044
4301
  value="trend.window || this.defaultWindowSize"
4045
4302
  class="'w-100 trend-window-input'"
4046
4303
  min="2"
4047
- onChange="(value) => this.onChangeMovingAverageWindow(index, value)"
4304
+ onChange="(value) => this.onChangeMovingAverageWindow(dataSetId, value)"
4048
4305
  />
4049
4306
  </div>
4050
4307
  <div class="w-50 ms-3" t-if="trendType === 'polynomial'">
4051
4308
  <span class="o-section-subtitle">Degree</span>
4052
4309
  <Select
4053
4310
  selectedValue="trend.order.toString()"
4054
- values="getPolynomialDegrees(index)"
4311
+ values="getPolynomialDegrees(dataSetId)"
4055
4312
  class="'trend-order-input'"
4056
- onChange="(value) => this.onChangePolynomialDegree(index, value)"
4313
+ onChange="(value) => this.onChangePolynomialDegree(dataSetId, value)"
4057
4314
  />
4058
4315
  </div>
4059
4316
  </div>
4060
4317
  <div class="d-flex align-items-center">
4061
4318
  <span class="o-section-subtitle my-0 pe-2">Trend line color</span>
4062
4319
  <RoundColorPicker
4063
- currentColor="getTrendLineColor(index)"
4064
- onColorPicked="(ev) => this.updateTrendLineColor(index, ev)"
4320
+ currentColor="getTrendLineColor(dataSetId)"
4321
+ onColorPicked="(ev) => this.updateTrendLineColor(dataSetId, ev)"
4065
4322
  />
4066
4323
  </div>
4067
4324
  </div>
@@ -4076,7 +4333,7 @@
4076
4333
  <t t-set-slot="content">
4077
4334
  <Section class="'pt-0 pb-0'">
4078
4335
  <Select
4079
- selectedValue="state.index.toString()"
4336
+ selectedValue="state.dataSetId"
4080
4337
  values="selectOptions"
4081
4338
  class="'data-series-selector'"
4082
4339
  onChange.bind="this.updateEditedSeries"
@@ -4099,11 +4356,35 @@
4099
4356
  />
4100
4357
  </Section>
4101
4358
  </Section>
4102
- <t t-slot="data-series-extension" index="state.index"/>
4359
+ <t t-slot="data-series-extension" dataSetId="state.dataSetId"/>
4103
4360
  </t>
4104
4361
  </SidePanelCollapsible>
4105
4362
  </t>
4106
4363
 
4364
+ <t t-name="o-spreadsheet-ChartRangeDataSource">
4365
+ <ChartDataSeries
4366
+ ranges="this.getDataSeriesRanges()"
4367
+ dataSetStyles="this.props.definition.dataSetStyles"
4368
+ onSelectionChanged.bind="onDataSeriesRangesChanged"
4369
+ onSelectionConfirmed.bind="onDataSeriesConfirmed"
4370
+ onSelectionReordered.bind="onDataSeriesReordered"
4371
+ onSelectionRemoved.bind="onDataSeriesRemoved"
4372
+ maxNumberOfUsedRanges="maxNumberOfUsedRanges"
4373
+ datasetOrientation="datasetOrientation"
4374
+ canChangeDatasetOrientation="canChangeDatasetOrientation"
4375
+ onFlipAxis.bind="setDatasetOrientation"
4376
+ title="props.dataSeriesTitle"
4377
+ />
4378
+ <ChartLabelRange
4379
+ range="this.getLabelRange()"
4380
+ isInvalid="isLabelInvalid"
4381
+ onSelectionChanged.bind="onLabelRangeChanged"
4382
+ onSelectionConfirmed.bind="onLabelRangeConfirmed"
4383
+ options="this.getLabelRangeOptions()"
4384
+ title="props.labelRangeTitle"
4385
+ />
4386
+ </t>
4387
+
4107
4388
  <t t-name="o-spreadsheet.PieHoleSize">
4108
4389
  <Section class="'pt-0'" title.translate="Center radius">
4109
4390
  <div class="d-flex flex-row">
@@ -4121,12 +4402,15 @@
4121
4402
 
4122
4403
  <t t-name="o-spreadsheet-ChartLegend">
4123
4404
  <Section class="'pt-0'" title.translate="Legend position">
4124
- <Select
4125
- selectedValue="props.definition.legendPosition ?? 'top'"
4126
- values="legendValues"
4127
- class="'o-chart-legend-position'"
4128
- onChange.bind="this.updateLegendPosition"
4129
- />
4405
+ <div t-if="!props.isDisabled" class="mb-2">
4406
+ <Select
4407
+ selectedValue="props.definition.legendPosition ?? 'top'"
4408
+ values="legendValues"
4409
+ class="'o-chart-legend-position'"
4410
+ onChange.bind="this.updateLegendPosition"
4411
+ />
4412
+ </div>
4413
+ <div t-else="" title="No legend available">None</div>
4130
4414
  </Section>
4131
4415
  </t>
4132
4416
 
@@ -4164,23 +4448,13 @@
4164
4448
 
4165
4449
  <t t-name="o-spreadsheet-GenericChartConfigPanel">
4166
4450
  <div>
4167
- <ChartDataSeries
4168
- ranges="this.getDataSeriesRanges()"
4169
- onSelectionChanged.bind="onDataSeriesRangesChanged"
4170
- onSelectionConfirmed.bind="onDataSeriesConfirmed"
4171
- onSelectionReordered.bind="onDataSeriesReordered"
4172
- onSelectionRemoved.bind="onDataSeriesRemoved"
4173
- maxNumberOfUsedRanges="maxNumberOfUsedRanges"
4174
- datasetOrientation="datasetOrientation"
4175
- canChangeDatasetOrientation="canChangeDatasetOrientation"
4176
- onFlipAxis.bind="setDatasetOrientation"
4177
- />
4178
- <ChartLabelRange
4179
- range="this.getLabelRange()"
4180
- isInvalid="isLabelInvalid"
4181
- onSelectionChanged.bind="onLabelRangeChanged"
4182
- onSelectionConfirmed.bind="onLabelRangeConfirmed"
4183
- options="this.getLabelRangeOptions()"
4451
+ <ChartDataSourceComponent
4452
+ chartId="props.chartId"
4453
+ definition="props.definition"
4454
+ updateChart="props.updateChart"
4455
+ canUpdateChart="props.canUpdateChart"
4456
+ getLabelRangeOptions.bind="getLabelRangeOptions"
4457
+ onErrorMessagesChanged.bind="onErrorMessagesChanged"
4184
4458
  />
4185
4459
 
4186
4460
  <ChartErrorSection t-if="errorMessages.length" messages="errorMessages"/>
@@ -4216,11 +4490,19 @@
4216
4490
  </Section>
4217
4491
  </t>
4218
4492
 
4493
+ <t t-name="o-spreadsheet-ChartDataSourceComponent">
4494
+ <t
4495
+ t-component="DataSourceComponent"
4496
+ t-props="this.props"
4497
+ dataSource="this.props.definition.dataSource"
4498
+ />
4499
+ </t>
4500
+
4219
4501
  <t t-name="o-spreadsheet.ChartDataSeries">
4220
4502
  <Section class="'o-data-series'">
4221
4503
  <t t-set-slot="title">
4222
4504
  <div class="d-flex flex-row justify-content-between">
4223
- <t t-esc="title"/>
4505
+ <t t-out="title"/>
4224
4506
  <div t-if="props.onFlipAxis and props.canChangeDatasetOrientation" class="d-flex">
4225
4507
  <span
4226
4508
  t-if="props.datasetOrientation !== 'rows'"
@@ -4261,7 +4543,7 @@
4261
4543
  class="color-scale-container d-flex justify-content-end"
4262
4544
  t-on-click.stop="onPointerDown">
4263
4545
  <span class="color-scale-label">
4264
- <t t-esc="currentColorScaleLabel"/>
4546
+ <t t-out="currentColorScaleLabel"/>
4265
4547
  </span>
4266
4548
  <div
4267
4549
  class="color-scale-preview w-100"
@@ -4273,7 +4555,7 @@
4273
4555
  </span>
4274
4556
  </div>
4275
4557
  <Popover t-if="state.popoverProps" t-props="state.popoverProps">
4276
- <table t-ref="popoverRef" class="bg-white" t-att-style="state.popoverStyle">
4558
+ <table t-ref="popoverRef" t-att-style="state.popoverStyle">
4277
4559
  <tr
4278
4560
  class="color-scale-container custom-color-scale-container"
4279
4561
  t-on-click="() => this.onColorScaleChange('custom')">
@@ -4291,7 +4573,7 @@
4291
4573
  t-on-click="() => this.onColorScaleChange(colorScale.value)"
4292
4574
  t-att-title="colorScale.label">
4293
4575
  <td class="p-1 text-end">
4294
- <t t-esc="colorScale.label"/>
4576
+ <t t-out="colorScale.label"/>
4295
4577
  </td>
4296
4578
  <td class="w-100 p-1">
4297
4579
  <div
@@ -4368,6 +4650,59 @@
4368
4650
  placeholder.translate="Add a Title"
4369
4651
  defaultStyle="{align: 'center', color: '', fontSize: defaultFontSize}"
4370
4652
  />
4653
+ <Section
4654
+ t-if="!isCategoricalAxis"
4655
+ class="'pt-0 o-axis-bounds-section'"
4656
+ title.translate="Axis range">
4657
+ <div class="d-flex">
4658
+ <div class="w-50">
4659
+ <span class="o-section-subtitle my-0">Minimum</span>
4660
+ <DateInput
4661
+ t-if="isTimeAxis"
4662
+ class="'o-input w-100 time-axis-min-input'"
4663
+ value="axisMin"
4664
+ onChange.bind="updateTimeAxisMin"
4665
+ />
4666
+ <NumberInput
4667
+ t-else=""
4668
+ class="'o-input w-100 axis-min-input'"
4669
+ value="axisMin"
4670
+ onChange.bind="updateAxisMin"
4671
+ placeholder.translate="Lower bound value"
4672
+ />
4673
+ </div>
4674
+ <div class="w-50 ms-3">
4675
+ <span class="o-section-subtitle my-0">Maximum</span>
4676
+ <DateInput
4677
+ t-if="isTimeAxis"
4678
+ class="'o-input w-100 time-axis-max-input'"
4679
+ value="axisMax"
4680
+ onChange.bind="updateTimeAxisMax"
4681
+ />
4682
+ <NumberInput
4683
+ t-else=""
4684
+ class="'o-input w-100 axis-max-input'"
4685
+ value="axisMax"
4686
+ onChange.bind="updateAxisMax"
4687
+ placeholder.translate="Upper bound value"
4688
+ />
4689
+ </div>
4690
+ </div>
4691
+ </Section>
4692
+ <Section class="'pt-0'" t-if="!isCategoricalAxis" title.translate="Gridlines">
4693
+ <Checkbox
4694
+ className="'o-axis-grid-major'"
4695
+ label="majorGridLabel"
4696
+ value="isMajorGridEnabled"
4697
+ onChange.bind="toggleMajorGrid"
4698
+ />
4699
+ <Checkbox
4700
+ className="'o-axis-grid-minor'"
4701
+ label="minorGridLabel"
4702
+ value="isMinorGridEnabled"
4703
+ onChange.bind="toggleMinorGrid"
4704
+ />
4705
+ </Section>
4371
4706
  </t>
4372
4707
 
4373
4708
  <t t-name="o-spreadsheet-BarChartDesignPanel">
@@ -4414,22 +4749,12 @@
4414
4749
  onChange.bind="onUpdateStacked"
4415
4750
  />
4416
4751
  </Section>
4417
- <ChartDataSeries
4418
- ranges="this.getDataSeriesRanges()"
4419
- onSelectionChanged.bind="onDataSeriesRangesChanged"
4420
- onSelectionConfirmed.bind="onDataSeriesConfirmed"
4421
- onSelectionReordered.bind="onDataSeriesReordered"
4422
- onSelectionRemoved.bind="onDataSeriesRemoved"
4423
- canChangeDatasetOrientation="canChangeDatasetOrientation"
4424
- datasetOrientation="datasetOrientation"
4425
- onFlipAxis.bind="setDatasetOrientation"
4426
- />
4427
- <ChartLabelRange
4428
- range="this.getLabelRange()"
4429
- isInvalid="isLabelInvalid"
4430
- onSelectionChanged.bind="onLabelRangeChanged"
4431
- onSelectionConfirmed.bind="onLabelRangeConfirmed"
4432
- options="this.getLabelRangeOptions()"
4752
+ <ChartDataSourceComponent
4753
+ chartId="props.chartId"
4754
+ definition="props.definition"
4755
+ updateChart="props.updateChart"
4756
+ canUpdateChart="props.canUpdateChart"
4757
+ onErrorMessagesChanged.bind="onErrorMessagesChanged"
4433
4758
  />
4434
4759
 
4435
4760
  <ChartErrorSection t-if="errorMessages.length" messages="errorMessages"/>
@@ -4589,14 +4914,15 @@
4589
4914
  class="o-input o-select"
4590
4915
  t-att-class="props.class"
4591
4916
  t-att-name="props.name"
4917
+ t-att-title="props.title"
4592
4918
  t-on-pointerdown="onMouseDown"
4593
4919
  t-on-keydown="onKeyDown"
4594
- t-esc="selectedLabel"
4920
+ t-out="selectedLabel"
4595
4921
  />
4596
4922
 
4597
4923
  <Popover t-if="state.isPopoverOpen" t-props="popoverProps">
4598
4924
  <div
4599
- class="o-select-dropdown bg-white overflow-hidden py-2"
4925
+ class="o-select-dropdown overflow-hidden py-2"
4600
4926
  t-att-class="props.popoverClass"
4601
4927
  t-ref="dropdownRef">
4602
4928
  <t t-foreach="props.values" t-as="value" t-key="value_index">
@@ -4606,7 +4932,7 @@
4606
4932
  'o-active': value.value === activeValue
4607
4933
  }"
4608
4934
  t-att-data-id="value.value"
4609
- t-esc="value.label"
4935
+ t-out="value.label"
4610
4936
  t-att-title="value.label"
4611
4937
  t-on-click="() => this.onOptionClick(value.value)"
4612
4938
  t-on-mouseenter="() => this.onOptionHover(value.value)"
@@ -4661,7 +4987,7 @@
4661
4987
  t-att-style="cell.style"
4662
4988
  t-att-class="{ o_missing_value: cell.isMissing }"
4663
4989
  t-on-click="() => props.onCellClicked(cell.formula)">
4664
- <t t-esc="cell.value"/>
4990
+ <t t-out="cell.value"/>
4665
4991
  </th>
4666
4992
  </t>
4667
4993
  </tr>
@@ -4671,13 +4997,13 @@
4671
4997
  t-att-style="row.style"
4672
4998
  t-att-class="{ o_missing_value: row.isMissing }"
4673
4999
  t-on-click="() => props.onCellClicked(row.formula)">
4674
- <t t-esc="row.value"/>
5000
+ <t t-out="row.value"/>
4675
5001
  </th>
4676
5002
  <t t-foreach="tableData.values" t-as="col" t-key="col_index">
4677
5003
  <td
4678
5004
  t-att-class="{ o_missing_value: col[row_index].isMissing }"
4679
5005
  t-on-click="() => props.onCellClicked(col[row_index].formula)">
4680
- <t t-esc="col[row_index].value"/>
5006
+ <t t-out="col[row_index].value"/>
4681
5007
  </td>
4682
5008
  </t>
4683
5009
  </tr>
@@ -4737,17 +5063,17 @@
4737
5063
  t-on-change="setValueFromInput"
4738
5064
  t-ref="inputNumber"
4739
5065
  />
4740
- <t t-esc="props.valueIcon"/>
5066
+ <t t-out="props.valueIcon"/>
4741
5067
  <span>
4742
5068
  <t t-call="o-spreadsheet-Icon.CARET_DOWN"/>
4743
5069
  </span>
4744
5070
  </div>
4745
5071
  <Popover t-if="dropdown.isOpen" t-props="popoverProps">
4746
- <div class="o-text-options bg-white" t-on-click.stop="" t-ref="numberList">
5072
+ <div class="o-text-options" t-on-click.stop="" t-ref="numberList">
4747
5073
  <t t-foreach="props.valueList" t-as="value" t-key="value">
4748
5074
  <div t-att-data-size="value" t-on-click="() => this.setValueFromList(value)">
4749
- <t t-esc="value"/>
4750
- <t t-esc="props.valueIcon"/>
5075
+ <t t-out="value"/>
5076
+ <t t-out="props.valueIcon"/>
4751
5077
  </div>
4752
5078
  </t>
4753
5079
  </div>
@@ -4755,12 +5081,46 @@
4755
5081
  </div>
4756
5082
  </t>
4757
5083
 
5084
+ <t t-name="o-spreadsheet-NamedRangeSelector">
5085
+ <div
5086
+ class="o-named-range-selector d-flex align-items-center rounded p-1 my-1"
5087
+ t-ref="namedRangeSelectorRef"
5088
+ t-att-class="{
5089
+ 'selected': topBarToolStore.isActive,
5090
+ }">
5091
+ <TextInput
5092
+ t-key="selectionKey"
5093
+ value="inputValue"
5094
+ onChange.bind="changeInputValue"
5095
+ onInput.bind="onInput"
5096
+ selectContentOnFocus="true"
5097
+ onFocused.bind="onInputFocused"
5098
+ onBlur.bind="onInputBlur"
5099
+ resetOnBlur="true"
5100
+ />
5101
+ <div class="o-hoverable-button" t-on-click.stop="openDropdown">
5102
+ <t t-call="o-spreadsheet-Icon.CARET_DOWN"/>
5103
+ </div>
5104
+ </div>
5105
+
5106
+ <MenuPopover
5107
+ t-if="topBarToolStore.isActive"
5108
+ disableKeyboardNavigation="true"
5109
+ anchorRect="menuState.anchorRect"
5110
+ menuItems="menuState.menuItems"
5111
+ onClose="() => {}"
5112
+ popoverPositioning="'bottom-left'"
5113
+ />
5114
+ </t>
5115
+
4758
5116
  <t t-name="o-spreadsheet-Menu-Popover">
4759
5117
  <Popover t-if="menuItems.length" t-props="popoverProps">
4760
5118
  <div
4761
5119
  t-ref="menu"
4762
- class="o-menu-wrapper bg-white"
4763
- t-on-mouseover="() => this.onMouseOverMainMenu()">
5120
+ tabIndex="-1"
5121
+ class="o-menu-wrapper"
5122
+ t-on-mouseover="() => this.onMouseOverMainMenu()"
5123
+ t-on-keydown="this.onKeydown">
4764
5124
  <Menu t-props="menuProps"/>
4765
5125
  </div>
4766
5126
  <MenuPopover
@@ -4775,6 +5135,8 @@
4775
5135
  menuId="props.menuId"
4776
5136
  onMouseOver.bind="onMouseOverChildMenu"
4777
5137
  width="props.width"
5138
+ autoSelectFirstItem="subMenu.autoSelectFirstItem"
5139
+ onKeyboardNavigation.bind="this.onKeydown"
4778
5140
  />
4779
5141
  </Popover>
4780
5142
  </t>
@@ -4782,28 +5144,28 @@
4782
5144
  <t t-name="o-spreadsheet-Menu">
4783
5145
  <div
4784
5146
  t-ref="menu"
4785
- class="o-menu bg-white"
5147
+ class="o-menu"
4786
5148
  t-att-style="menuStyle"
4787
5149
  t-on-scroll="props.onScroll"
4788
5150
  t-on-wheel.stop=""
4789
5151
  t-on-pointerdown.prevent=""
4790
- t-on-click.stop=""
4791
- t-on-contextmenu.prevent="">
5152
+ t-on-click.stop="">
4792
5153
  <t t-foreach="props.menuItems" t-as="menuItem" t-key="menuItem_index">
4793
5154
  <div t-if="menuItem === 'separator'" class="o-separator border-bottom"/>
4794
5155
  <t t-else="">
4795
5156
  <t t-set="isMenuRoot" t-value="isRoot(menuItem)"/>
4796
5157
  <t t-set="isMenuEnabled" t-value="isEnabled(menuItem)"/>
4797
5158
  <div
5159
+ tabIndex="-1"
4798
5160
  t-att-title="getName(menuItem)"
4799
5161
  t-att-data-name="menuItem.id"
4800
5162
  t-on-click="(ev) => this.onClickMenu(menuItem, ev)"
4801
5163
  t-on-auxclick="(ev) => this.onClickMenu(menuItem, ev)"
4802
- t-on-mouseover="(ev) => this.props.onMouseOver?.(menuItem, ev)"
4803
- t-on-mouseenter="(ev) => this.onMouseEnter?.(menuItem, ev)"
4804
- t-on-mouseleave="(ev) => this.onMouseLeave?.(menuItem)"
5164
+ t-on-mouseenter="(ev) => this.props.onMouseEnter?.(menuItem, ev)"
5165
+ t-on-mouseleave="(ev) => this.props.onMouseLeave?.(menuItem)"
5166
+ t-on-keydown="(ev) => props.onKeyDown?.(ev)"
4805
5167
  class="o-menu-item d-flex justify-content-between align-items-center"
4806
- t-att-class="{'disabled': !isMenuEnabled, 'o-menu-item-active': props.isActive?.(menuItem)}"
5168
+ t-att-class="{'disabled': !isMenuEnabled, 'o-menu-item-active': menuItem.id === props.hoveredMenuId}"
4807
5169
  t-att-style="getColor(menuItem)">
4808
5170
  <div class="d-flex w-100">
4809
5171
  <div
@@ -4812,24 +5174,20 @@
4812
5174
  t-att-style="getIconColor(menuItem)">
4813
5175
  <t t-if="getIconName(menuItem)" t-call="{{getIconName(menuItem)}}"/>
4814
5176
  </div>
4815
- <div class="o-menu-item-name align-middle text-truncate" t-esc="getName(menuItem)"/>
5177
+ <div class="o-menu-item-name align-middle text-truncate" t-out="getName(menuItem)"/>
4816
5178
  <t t-set="description" t-value="menuItem.description(env) or menuItem.shortcut"/>
4817
5179
  <div
4818
5180
  t-if="description"
4819
5181
  class="o-menu-item-description ms-auto text-truncate"
4820
- t-esc="description"
5182
+ t-out="description"
4821
5183
  />
4822
5184
  <t t-set="secondaryIcon" t-value="menuItem.secondaryIcon(env)"/>
4823
5185
  <div
4824
- t-if="isMenuRoot"
4825
- class="o-menu-item-root ms-auto align-items-center d-flex"
4826
- t-call="o-spreadsheet-Icon.CARET_RIGHT"
4827
- />
4828
- <div
4829
- t-elif="secondaryIcon"
4830
- class="o-menu-item-root ms-auto align-items-center d-flex"
4831
- t-call="{{secondaryIcon}}"
4832
- />
5186
+ t-if="isMenuRoot || secondaryIcon"
5187
+ class="o-menu-item-root ms-auto align-items-center d-flex gap-1">
5188
+ <t t-if="secondaryIcon" t-call="{{secondaryIcon}}"/>
5189
+ <t t-if="isMenuRoot" t-call="o-spreadsheet-Icon.CARET_RIGHT"/>
5190
+ </div>
4833
5191
  </div>
4834
5192
  </div>
4835
5193
  </t>
@@ -4839,10 +5197,11 @@
4839
5197
 
4840
5198
  <t t-name="o-spreadsheet-LinkEditor">
4841
5199
  <div
4842
- class="o-link-editor bg-white rounded"
4843
- t-on-click.stop="() => this.menu.isOpen=false"
5200
+ class="o-link-editor rounded h-100"
5201
+ t-on-scroll.stop=""
5202
+ t-on-wheel.stop=""
4844
5203
  t-on-keydown="onKeyDown">
4845
- <div class="o-section">
5204
+ <div class="o-section mb-4 h-100">
4846
5205
  <div class="o-section-title">Text</div>
4847
5206
  <div class="d-flex">
4848
5207
  <input
@@ -4850,20 +5209,25 @@
4850
5209
  title="Link label"
4851
5210
  placeholder="e.g. 'Link label'"
4852
5211
  class="o-input"
4853
- t-model="link.label"
5212
+ t-model="this.state.label"
4854
5213
  />
4855
5214
  </div>
4856
5215
 
4857
5216
  <div class="o-section-title mt-3">Link</div>
4858
- <div class="o-link-url">
4859
- <t t-if="link.isUrlEditable">
5217
+ <div
5218
+ class="o-link-url"
5219
+ t-ref="urlInputContainer"
5220
+ tabindex="-1"
5221
+ t-on-keydown="this.onInputKeyDown">
5222
+ <t t-if="this.state.isUrlEditable">
4860
5223
  <input
4861
5224
  class="o-input"
4862
5225
  type="text"
4863
5226
  placeholder="e.g. 'http://www.odoo.com'"
4864
5227
  title="Link URL"
4865
5228
  t-ref="urlInput"
4866
- t-model="link.url"
5229
+ t-model="this.state.url"
5230
+ t-on-input="this.computeLinks"
4867
5231
  />
4868
5232
  </t>
4869
5233
  <t t-else="">
@@ -4871,32 +5235,52 @@
4871
5235
  type="text"
4872
5236
  class="o-input"
4873
5237
  title="Link URL"
4874
- t-att-value="getUrlRepresentation(link)"
5238
+ t-att-value="this.getUrlRepresentation(this.state)"
4875
5239
  disabled="1"
4876
5240
  />
4877
5241
  </t>
4878
- <button t-if="link.url" t-on-click="removeLink" class="o-remove-url o-button-icon">
4879
-
4880
- </button>
4881
5242
  <button
4882
- t-if="!link.url"
4883
- t-on-click.stop="openMenu"
4884
- class="o-special-link o-button-icon bg-white"
4885
- t-ref="linkEditorMenuButton">
4886
- <t t-call="o-spreadsheet-Icon.LIST"/>
5243
+ t-if="this.state.url"
5244
+ t-on-click="this.removeLink"
5245
+ class="o-remove-url o-button-icon"
5246
+ t-translation="off">
5247
+ <i class="fa fa-times"/>
4887
5248
  </button>
4888
5249
  </div>
4889
5250
  </div>
4890
- <MenuPopover
4891
- t-if="menu.isOpen"
4892
- anchorRect="menuButtonRect"
4893
- menuItems="menuItems"
4894
- onMenuClicked="(ev) => this.onSpecialLink(ev)"
4895
- onClose="() => this.menu.isOpen=false"
4896
- />
5251
+
5252
+ <div class="suggestions border rounded user-select-none" t-ref="suggestionList">
5253
+ <t t-foreach="this.state.linksByCategory" t-as="proposalCategory" t-key="proposalCategory">
5254
+ <t t-set="categoryTitle" t-value="proposalCategory"/>
5255
+ <t t-set="proposals" t-value="proposalCategory_value"/>
5256
+ <div class="o-section my-1">
5257
+ <div class="o-section-title ps-2" t-esc="categoryTitle"/>
5258
+ <div
5259
+ t-foreach="proposals"
5260
+ t-as="proposal"
5261
+ t-key="categoryTitle + proposal_index"
5262
+ t-att-data-index="proposal.index"
5263
+ class="suggestion-item ps-3 d-flex align-items-center justify-content-start"
5264
+ t-att-class="{ 'selected' : proposal.index === this.state.selectedIndex }"
5265
+ t-on-click="proposal.onSelect"
5266
+ t-on-dblclick="this.save">
5267
+ <span class="me-1" t-if="proposal.icon" t-call="{{proposal.icon}}"/>
5268
+ <span class="text-truncate" t-esc="proposal.text"/>
5269
+ </div>
5270
+ </div>
5271
+ </t>
5272
+ <div
5273
+ t-if="!this.state.linksList.length"
5274
+ class="o-filter-menu-no-values d-flex align-items-center justify-content-center w-100 h-100 text-muted fst-italic">
5275
+ No results
5276
+ </div>
5277
+ </div>
4897
5278
  <div class="o-buttons">
4898
- <button t-on-click="cancel" class="o-button o-cancel me-2">Discard</button>
4899
- <button t-on-click="save" class="o-button primary o-save" t-att-disabled="!link.url">
5279
+ <button t-on-click="this.cancel" class="o-button o-cancel me-2">Discard</button>
5280
+ <button
5281
+ t-on-click="this.save"
5282
+ class="o-button primary o-save"
5283
+ t-att-disabled="!this.state.url">
4900
5284
  Confirm
4901
5285
  </button>
4902
5286
  </div>
@@ -4904,7 +5288,7 @@
4904
5288
  </t>
4905
5289
 
4906
5290
  <t t-name="o-spreadsheet-LinkDisplay">
4907
- <div class="o-link-tool d-flex align-items-center bg-white rounded">
5291
+ <div class="o-link-tool d-flex align-items-center rounded">
4908
5292
  <!-- t-key to prevent owl from re-using the previous img element when the link changes.
4909
5293
  The wrong/previous image would be displayed while the new one loads -->
4910
5294
  <img
@@ -4919,7 +5303,7 @@
4919
5303
  target="_blank"
4920
5304
  t-on-click.prevent="openLink"
4921
5305
  t-att-title="link.url">
4922
- <t t-esc="getUrlRepresentation(link)"/>
5306
+ <t t-out="getUrlRepresentation(link)"/>
4923
5307
  </a>
4924
5308
  <a
4925
5309
  t-else=""
@@ -4927,7 +5311,7 @@
4927
5311
  t-on-click.prevent="openLink"
4928
5312
  t-on-auxclick.prevent="openLink"
4929
5313
  t-att-title="getUrlRepresentation(link)">
4930
- <t t-esc="getUrlRepresentation(link)"/>
5314
+ <t t-out="getUrlRepresentation(link)"/>
4931
5315
  </a>
4932
5316
  <span
4933
5317
  t-if="!env.model.getters.isReadonly()"
@@ -4947,7 +5331,7 @@
4947
5331
  </t>
4948
5332
 
4949
5333
  <t t-name="o-spreadsheet-Icon.CLEAR_AND_RELOAD">
4950
- <svg class="o-icon">
5334
+ <svg class="o-icon" viewBox="0 0 18 18">
4951
5335
  <path
4952
5336
  fill="currentColor"
4953
5337
  d="M14 15H4V3h6v3h4M4 1.5A1.5 1.5 0 0 0 2.5 3v12a1.5 1.5 0 0 0 1.4 1.5h10a1.5 1.5 0 0 0 1.5-1.5V5l-3.5-3.5
@@ -4956,7 +5340,7 @@
4956
5340
  </svg>
4957
5341
  </t>
4958
5342
  <t t-name="o-spreadsheet-Icon.EXPORT_XLSX">
4959
- <svg class="o-icon">
5343
+ <svg class="o-icon" viewBox="0 0 18 18">
4960
5344
  <path
4961
5345
  fill="currentColor"
4962
5346
  d="M0 1a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1m4-4V1H1v3m7 0V1H5v3M4 8V5H1v3m7 0V5H5v3m-3.5 2h2v4h3v-1.5l3 2.5-3 2.5V16h-5m9.5-6h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-6a1 1 0 0 1 1-1m1.7 7 1.3-2 1.3 2h2l-2-3 2-3h-2L14 13l-1.3-2h-2l2 3-2 3"
@@ -4964,7 +5348,7 @@
4964
5348
  </svg>
4965
5349
  </t>
4966
5350
  <t t-name="o-spreadsheet-Icon.OPEN_READ_ONLY">
4967
- <svg class="o-icon">
5351
+ <svg class="o-icon" viewBox="0 0 18 18">
4968
5352
  <path
4969
5353
  fill="currentColor"
4970
5354
  d="M13 7V5c0-2.5-2-4-4-4S5 2.5 5 5v2h-.5C3.5 7 3 7.5 3 8.5v7c0 1 .5 1.5 1.5 1.5h9c1 0 1.5-.5 1.5-1.5v-7c0-1-.5-1.5-1.5-1.5m-7-2c0-1.5 1-2.5 2.5-2.5s2.5 1 2.5 2.5v2h-5V5m1 7a1.5 1.5 0 0 1 3 0 1.5 1.5 0 0 1-3 0"
@@ -4972,7 +5356,7 @@
4972
5356
  </svg>
4973
5357
  </t>
4974
5358
  <t t-name="o-spreadsheet-Icon.OPEN_DASHBOARD">
4975
- <svg class="o-icon">
5359
+ <svg class="o-icon" viewBox="0 0 18 18">
4976
5360
  <path
4977
5361
  fill="currentColor"
4978
5362
  d="M13 2.07A8 8 0 1 0 15.93 5L14.2 6A6 6 0 1 1 12 3.8m-2 3.47a2 2 0 1 0 .73.73l5.5-5.5-.6-.6M9.3 3.8a.6.6 0 1 1-.01-.01m1.81.51a.6.6 0 1 1-.01-.01M7.5 4.3a.6.6 0 1 1-.01-.01M5.9 5.4a.6.6 0 1 1-.01-.01M4.8 6.9a.6.6 0 1 1-.01-.01m8.71.61a.6.6 0 1 0-.01 0"
@@ -4980,7 +5364,7 @@
4980
5364
  </svg>
4981
5365
  </t>
4982
5366
  <t t-name="o-spreadsheet-Icon.OPEN_READ_WRITE">
4983
- <svg class="o-icon">
5367
+ <svg class="o-icon" viewBox="0 0 18 18">
4984
5368
  <path
4985
5369
  fill="currentColor"
4986
5370
  d="M13 7V5a4 4 0 0 0-8 0v2h-.5C3.5 7 3 7.5 3 8.5v7c0 1 .5 1.5 1.5 1.5h9c1 0 1.5-.5 1.5-1.5v-7c0-1-.5-1.5-1.5-1.5m-7-2a2 2 0 0 1 5 0v2h-5m1 5a1.5 1.5 0 0 1 3 0 1.5 1.5 0 0 1-3 0m6 3.5h-9v-7h9"
@@ -4988,7 +5372,7 @@
4988
5372
  </svg>
4989
5373
  </t>
4990
5374
  <t t-name="o-spreadsheet-Icon.IMPORT_XLSX">
4991
- <svg class="o-icon">
5375
+ <svg class="o-icon" viewBox="0 0 18 18">
4992
5376
  <path
4993
5377
  fill="currentColor"
4994
5378
  d="M9 10a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1m4-4v-3h-3v3m7 0v-3h-3v3m-1 4v-3h-3v3m7 0v-3h-3v3M.5 9h2v4h3v-1.5l3 2.5-3 2.5V15h-5M1 0h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1m1.7 7L4 5l1.3 2h2l-2-3 2-3h-2L4 3 2.7 1h-2l2 3-2 3"
@@ -4996,7 +5380,7 @@
4996
5380
  </svg>
4997
5381
  </t>
4998
5382
  <t t-name="o-spreadsheet-Icon.UNDO">
4999
- <svg class="o-icon">
5383
+ <svg class="o-icon" viewBox="0 0 18 18">
5000
5384
  <path
5001
5385
  fill="currentColor"
5002
5386
  d="M5.43 9.43 8 12H1V5l2.96 2.958A8.29 8.29 0 0 1 9.32 6c3.46 0 6.42 2.11 7.68 5l-2 1c-.94-2.39-3.13-3.92-5.68-4a6.57 6.57 0 0 0-3.89 1.43"
@@ -5004,7 +5388,7 @@
5004
5388
  </svg>
5005
5389
  </t>
5006
5390
  <t t-name="o-spreadsheet-Icon.REDO">
5007
- <svg class="o-icon">
5391
+ <svg class="o-icon" viewBox="0 0 18 18">
5008
5392
  <path
5009
5393
  fill="currentColor"
5010
5394
  d="M12.57 9.43 10 12h7V5l-2.96 2.96A8.29 8.29 0 0 0 8.68 6C5.22 6 2.26 8.11 1 11l2 1c.94-2.39 3.13-3.92 5.68-4a6.58 6.58 0 0 1 3.89 1.43"
@@ -5022,7 +5406,7 @@
5022
5406
  </div>
5023
5407
  </t>
5024
5408
  <t t-name="o-spreadsheet-Icon.CUT">
5025
- <svg class="o-icon">
5409
+ <svg class="o-icon" viewBox="0 0 18 18">
5026
5410
  <path
5027
5411
  fill="currentColor"
5028
5412
  d="M3 2v2l4.5 5-1.2 1.3c-.4-.2-.8-.3-1.3-.3-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3c0-.5-.1-.9-.3-1.3L9 10.4l1.3 1.3c-.2.4-.3.8-.3 1.3 0 1.7 1.3 3 3 3s3-1.3 3-3-1.3-3-3-3c-.5 0-.9.1-1.3.3L10.4 9 15 4.4V2h-.4L9 7.6 3.4 2H3Zm2 12.5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5Zm9.5-1.5c0 .8-.7 1.5-1.5 1.5s-1.5-.7-1.5-1.5.7-1.5 1.5-1.5 1.5.7 1.5 1.5ZM9 8.5c.3 0 .5.2.5.5s-.2.5-.5.5-.5-.2-.5-.5.2-.5.5-.5"
@@ -5030,7 +5414,7 @@
5030
5414
  </svg>
5031
5415
  </t>
5032
5416
  <t t-name="o-spreadsheet-Icon.COPY_AS_IMAGE">
5033
- <svg class="o-icon">
5417
+ <svg class="o-icon" viewBox="0 0 18 18">
5034
5418
  <path
5035
5419
  fill="currentColor"
5036
5420
  d="m 14,15 v 1.5 H 2.5147386 c -0.5522847,0 -1,-0.447715 -1,-1 V 3 H 3 V 14 c 0,0.552285 0.4477153,1 1,1 h 10"
@@ -5043,7 +5427,7 @@
5043
5427
  </svg>
5044
5428
  </t>
5045
5429
  <t t-name="o-spreadsheet-Icon.PASTE">
5046
- <svg class="o-icon">
5430
+ <svg class="o-icon" viewBox="0 0 18 18">
5047
5431
  <path
5048
5432
  fill="currentColor"
5049
5433
  d="M14.5 2.5H11C10.7 1.6 10 1 9 1s-1.5.5-2 1.5H3.5C2.5 2.5 2 3 2 4v11c0 1 .5 1.5 1.5 1.5h11c1 0 1.5-.5 1.5-1.5V4c0-1-.5-1.5-1.5-1.5Zm-4.75.75c0 .5-.34.75-.75.75s-.75-.34-.75-.75.34-.75.75-.75.75.34.75.75ZM14.5 15h-11V4H5v2.5h8V4h1.5v11"
@@ -5051,7 +5435,7 @@
5051
5435
  </svg>
5052
5436
  </t>
5053
5437
  <t t-name="o-spreadsheet-Icon.CLEAR">
5054
- <svg class="o-icon">
5438
+ <svg class="o-icon" viewBox="0 0 18 18">
5055
5439
  <path
5056
5440
  fill="currentColor"
5057
5441
  d="M1.5 15a.75.75 0 0 0 0 1.5h15a.75.75 0 0 0 0-1.5M5.3 12.75c.1.1.3.2.5.2h4c.2 0 .4-.1.5-.2l5.5-5.5c.2-.3.2-.6 0-.8l-4.4-4.4c-.3-.2-.6-.2-.8 0l-4.8 4.8c-2.7 2.9-3.1 2.8-2.4 4M7 7.25l3.6 3.6-1 1-3.6.1-1.8-1.9"
@@ -5059,7 +5443,7 @@
5059
5443
  </svg>
5060
5444
  </t>
5061
5445
  <t t-name="o-spreadsheet-Icon.FREEZE">
5062
- <svg class="o-icon">
5446
+ <svg class="o-icon" viewBox="0 0 18 18">
5063
5447
  <path
5064
5448
  fill="currentColor"
5065
5449
  d="M.5 17.5h16a1 1 0 0 0 1-1v-15a1 1 0 0 0-1-1h-15a1 1 0 0 0-1 1v15a1 1 0 0 0 1 1m9-10.5v4.5H6V7m0 9v-3.5h4.5V16M5 16H3.5L5 14.5M5 13l-3 3v-1.5l3-3M2 13v-2l3-3v2m-3-.5v-2l3-3v2M2 6V4l2-2h1v1m11 13h-4.5v-3.5H16m0-1h-4.5V7H16m0-5v4h-4.5V2m-1 4H6V2h4.5"
@@ -5067,7 +5451,7 @@
5067
5451
  </svg>
5068
5452
  </t>
5069
5453
  <t t-name="o-spreadsheet-Icon.UNFREEZE">
5070
- <svg class="o-icon">
5454
+ <svg class="o-icon" viewBox="0 0 18 18">
5071
5455
  <path
5072
5456
  fill="currentColor"
5073
5457
  d="M.5 17.5h16a1 1 0 0 0 1-1v-15a1 1 0 0 0-1-1h-15a1 1 0 0 0-1 1v15a1 1 0 0 0 1 1M5 6H2V2h3m0 9.5H2V7h3m0 9H2v-3.5h3M10.5 7v4.5H6V7m0 9v-3.5h4.5V16m5.5 0h-4.5v-3.5H16m0-1h-4.5V7H16m0-5v4h-4.5V2m-1 4H6V2h4.5"
@@ -5080,7 +5464,7 @@
5080
5464
  </div>
5081
5465
  </t>
5082
5466
  <t t-name="o-spreadsheet-Icon.FORMULA">
5083
- <svg class="o-icon">
5467
+ <svg class="o-icon" viewBox="0 0 18 18">
5084
5468
  <path
5085
5469
  fill="currentColor"
5086
5470
  d="M7 14.25q-.25.75-.75 1.25T5 16q-.75 0-1.5-.5Q3 15 3 14.25q0-.5.25-.75t.75-.25q.25 0 .25.75v.5H5q.5 0 .5-.5l1.25-6.5H5V6h2l.5-2.25q.25-.75.75-1.25T9.5 2q1 0 1.5.5t.5 1q0 .5-.25.75t-.5.25q-.5 0-.75-.25t-.25-.5V3H9.5q-.25 0-.5.5L8.5 6H10v1.5H8.25m1.25 1H15v1h-4l2 2-2 2h4v1H9V14l2.5-2.5L9 9"
@@ -5088,7 +5472,7 @@
5088
5472
  </svg>
5089
5473
  </t>
5090
5474
  <t t-name="o-spreadsheet-Icon.HIDE_ROW">
5091
- <svg class="o-icon">
5475
+ <svg class="o-icon" viewBox="0 0 18 18">
5092
5476
  <path
5093
5477
  fill="currentColor"
5094
5478
  d="M.5 2A1.5 1.5 0 0 1 2 .5h14A1.5 1.5 0 0 1 17.5 2v14a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 16V2H2v3.5h14V2H2v9h14V7H2v9h14v-3.5H2M1 12l4-5h2l-4 5m2 0 4-5h2l-4 5m2 0 4-5h2l-4 5m2 0 4-5v4"
@@ -5096,7 +5480,7 @@
5096
5480
  </svg>
5097
5481
  </t>
5098
5482
  <t t-name="o-spreadsheet-Icon.UNHIDE_ROW">
5099
- <svg class="o-icon">
5483
+ <svg class="o-icon" viewBox="0 0 18 18">
5100
5484
  <path
5101
5485
  fill="currentColor"
5102
5486
  d="M17.5 16a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 16V2A1.5 1.5 0 0 1 2 .5h14A1.5 1.5 0 0 1 17.5 2zH16v-3.5H2V16h14V2H2v3.5h14"
@@ -5104,7 +5488,7 @@
5104
5488
  </svg>
5105
5489
  </t>
5106
5490
  <t t-name="o-spreadsheet-Icon.HIDE_COL">
5107
- <svg class="o-icon">
5491
+ <svg class="o-icon" viewBox="0 0 18 18">
5108
5492
  <path
5109
5493
  fill="currentColor"
5110
5494
  d="M16 .5A1.5 1.5 0 0 1 17.5 2v14a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 16V2A1.5 1.5 0 0 1 2 .5h14V2h-3.5v14H16V2H7v14h4V2H2v14h3.5V2M6 1l5 4v2L6 3m0 2 5 4v2L6 7m0 2 5 4v2l-5-4"
@@ -5112,7 +5496,7 @@
5112
5496
  </svg>
5113
5497
  </t>
5114
5498
  <t t-name="o-spreadsheet-Icon.UNHIDE_COL">
5115
- <svg class="o-icon">
5499
+ <svg class="o-icon" viewBox="0 0 18 18">
5116
5500
  <path
5117
5501
  fill="currentColor"
5118
5502
  d="M16 .5A1.5 1.5 0 0 1 17.5 2v14a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 16V2A1.5 1.5 0 0 1 2 .5h14V2h-3.5v14H16V2H2V16h3.5V2"
@@ -5120,7 +5504,7 @@
5120
5504
  </svg>
5121
5505
  </t>
5122
5506
  <t t-name="o-spreadsheet-Icon.INSERT_ROW">
5123
- <svg class="o-icon">
5507
+ <svg class="o-icon" viewBox="0 0 18 18">
5124
5508
  <path
5125
5509
  fill="currentColor"
5126
5510
  d="M.5 2A1.5 1.5 0 0 1 2 .5h14A1.5 1.5 0 0 1 17.5 2v14a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 16V2H2v3.5h14V2H2v9h14V7H2v9h14v-3.5H2"
@@ -5128,7 +5512,7 @@
5128
5512
  </svg>
5129
5513
  </t>
5130
5514
  <t t-name="o-spreadsheet-Icon.INSERT_ROW_BEFORE">
5131
- <svg class="o-icon">
5515
+ <svg class="o-icon" viewBox="0 0 18 18">
5132
5516
  <path
5133
5517
  fill="currentColor"
5134
5518
  d="M3.5 14.5A1.5 1.5 0 0 0 5 16h10a1.5 1.5 0 0 0 1.5-1.5v-7h-3V5h3V1.5A1.5 1.5 0 0 0 15 0H5a1.5 1.5 0 0 0-1.5 1.5v2h-3V9h3M15 12.5v2H5v-2M15 9v2H5V9m10-7.5v2H5v-2M12 5v2.5H2V5"
@@ -5136,7 +5520,7 @@
5136
5520
  </svg>
5137
5521
  </t>
5138
5522
  <t t-name="o-spreadsheet-Icon.INSERT_ROW_AFTER">
5139
- <svg class="o-icon">
5523
+ <svg class="o-icon" viewBox="0 0 18 18">
5140
5524
  <path
5141
5525
  fill="currentColor"
5142
5526
  d="M3.5 1.5A1.5 1.5 0 0 1 5 0h10a1.5 1.5 0 0 1 1.5 1.5v7h-3V11h3v3.5A1.5 1.5 0 0 1 15 16H5a1.5 1.5 0 0 1-1.5-1.5v-2h-3V7h3M15 3.5v-2H5v2M15 7V5H5v2m10 7.5v-2H5v2m7-3.5V8.5H2V11"
@@ -5144,7 +5528,7 @@
5144
5528
  </svg>
5145
5529
  </t>
5146
5530
  <t t-name="o-spreadsheet-Icon.INSERT_COL">
5147
- <svg class="o-icon">
5531
+ <svg class="o-icon" viewBox="0 0 18 18">
5148
5532
  <path
5149
5533
  fill="currentColor"
5150
5534
  d="M.5 2A1.5 1.5 0 0 1 2 .5h14A1.5 1.5 0 0 1 17.5 2v14a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 16V2H2v14h3.5V2H2h5v14h4V2H2h10.5v14H16V2H2"
@@ -5152,7 +5536,7 @@
5152
5536
  </svg>
5153
5537
  </t>
5154
5538
  <t t-name="o-spreadsheet-Icon.INSERT_COL_AFTER">
5155
- <svg class="o-icon">
5539
+ <svg class="o-icon" viewBox="0 0 18 18">
5156
5540
  <path
5157
5541
  fill="currentColor"
5158
5542
  d="M2.5 3A1.5 1.5 0 0 0 1 4.5v10A1.5 1.5 0 0 0 2.5 16h7v-3H12v3h3.5a1.5 1.5 0 0 0 1.5-1.5v-10A1.5 1.5 0 0 0 15.5 3h-2V0H8v3M4.5 14.5h-2v-10h2m3.5 10H6v-10h2m7.5 10h-2v-10h2m-3.5 7H9.5v-10H12"
@@ -5160,7 +5544,7 @@
5160
5544
  </svg>
5161
5545
  </t>
5162
5546
  <t t-name="o-spreadsheet-Icon.INSERT_COL_BEFORE">
5163
- <svg class="o-icon">
5547
+ <svg class="o-icon" viewBox="0 0 18 18">
5164
5548
  <path
5165
5549
  fill="currentColor"
5166
5550
  d="M15.5 3A1.5 1.5 0 0 1 17 4.5v10a1.5 1.5 0 0 1-1.5 1.5h-7v-3H6v3H2.5A1.5 1.5 0 0 1 1 14.5v-10A1.5 1.5 0 0 1 2.5 3h2V0H10v3m3.5 11.5h2v-10h-2m-3.5 10h2v-10h-2m-7.5 10h2v-10h-2m3.5 7h2.5v-10H6"
@@ -5168,7 +5552,7 @@
5168
5552
  </svg>
5169
5553
  </t>
5170
5554
  <t t-name="o-spreadsheet-Icon.INSERT_CELL">
5171
- <svg class="o-icon">
5555
+ <svg class="o-icon" viewBox="0 0 18 18">
5172
5556
  <path
5173
5557
  fill="currentColor"
5174
5558
  d="M.5 2A1.5 1.5 0 0 1 2 .5h14A1.5 1.5 0 0 1 17.5 2v14a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 16V2H2v14h14V2H2"
@@ -5176,7 +5560,7 @@
5176
5560
  </svg>
5177
5561
  </t>
5178
5562
  <t t-name="o-spreadsheet-Icon.INSERT_CELL_SHIFT_DOWN">
5179
- <svg class="o-icon">
5563
+ <svg class="o-icon" viewBox="0 0 18 18">
5180
5564
  <path
5181
5565
  fill="currentColor"
5182
5566
  d="M5 2.5A1.5 1.5 0 0 1 6.5 1h10A1.5 1.5 0 0 1 18 2.5v13a1.5 1.5 0 0 1-1.5 1.5h-10A1.5 1.5 0 0 1 5 15.5v-5h5.25v-3H5m11.5-2v-3h-4.75v3m-1.5 0v-3H6.5v3m10 5v-3h-4.75v3m-1.5 5v-3H6.5v3m10 0v-3h-4.75v3M0 12.5l2.5 4 2.5-4H3.25v-6h-1.5v6"
@@ -5184,7 +5568,7 @@
5184
5568
  </svg>
5185
5569
  </t>
5186
5570
  <t t-name="o-spreadsheet-Icon.INSERT_CELL_SHIFT_RIGHT">
5187
- <svg class="o-icon">
5571
+ <svg class="o-icon" viewBox="0 0 18 18">
5188
5572
  <path
5189
5573
  fill="currentColor"
5190
5574
  d="M2.5 5A1.5 1.5 0 0 0 1 6.5v10A1.5 1.5 0 0 0 2.5 18h13a1.5 1.5 0 0 0 1.5-1.5v-10A1.5 1.5 0 0 0 15.5 5h-5v5.25h-3V5m-2 11.5h-3v-4.75h3m0-1.5h-3V6.5h3m5 10h-3v-4.75h3m5-1.5h-3V6.5h3m0 10h-3v-4.75h3M12.5 0l4 2.5-4 2.5V3.25h-6v-1.5h6"
@@ -5192,7 +5576,7 @@
5192
5576
  </svg>
5193
5577
  </t>
5194
5578
  <t t-name="o-spreadsheet-Icon.DELETE_CELL_SHIFT_UP">
5195
- <svg class="o-icon">
5579
+ <svg class="o-icon" viewBox="0 0 18 18">
5196
5580
  <path
5197
5581
  fill="currentColor"
5198
5582
  d="M5 2.5A1.5 1.5 0 0 1 6.5 1h10A1.5 1.5 0 0 1 18 2.5v13a1.5 1.5 0 0 1-1.5 1.5h-10A1.5 1.5 0 0 1 5 15.5v-5h5.25v-3H5m11.5-2v-3h-4.75v3m-1.5 0v-3H6.5v3m10 5v-3h-4.75v3m-1.5 5v-3H6.5v3m10 0v-3h-4.75v3M0 10l2.5-4L5 10H3.25v6h-1.5v-6"
@@ -5200,7 +5584,7 @@
5200
5584
  </svg>
5201
5585
  </t>
5202
5586
  <t t-name="o-spreadsheet-Icon.DELETE_CELL_SHIFT_LEFT">
5203
- <svg class="o-icon">
5587
+ <svg class="o-icon" viewBox="0 0 18 18">
5204
5588
  <path
5205
5589
  fill="currentColor"
5206
5590
  d="M2.5 5A1.5 1.5 0 0 0 1 6.5v10A1.5 1.5 0 0 0 2.5 18h13a1.5 1.5 0 0 0 1.5-1.5v-10A1.5 1.5 0 0 0 15.5 5h-5v5.25h-3V5m-2 11.5h-3v-4.75h3m0-1.5h-3V6.5h3m5 10h-3v-4.75h3m5-1.5h-3V6.5h3m0 10h-3v-4.75h3M10 0 6 2.5 10 5V3.25h6v-1.5h-6"
@@ -5228,7 +5612,7 @@
5228
5612
  </div>
5229
5613
  </t>
5230
5614
  <t t-name="o-spreadsheet-Icon.INSERT_DROPDOWN">
5231
- <svg class="o-icon">
5615
+ <svg class="o-icon" viewBox="0 0 18 18">
5232
5616
  <path
5233
5617
  fill="currentColor"
5234
5618
  d="M6 3.5a5 5.5 0 0 0 0 11h6a5 5.5 0 0 0 0-11H6V5h6a3.5 4 0 0 1 0 8H6a3.5 4 0 0 1 0-8m5 6 3-3H8"
@@ -5236,14 +5620,14 @@
5236
5620
  </svg>
5237
5621
  </t>
5238
5622
  <t t-name="o-spreadsheet-Icon.INSERT_SHEET">
5239
- <svg class="o-icon" fill="currentColor">
5623
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5240
5624
  <path
5241
5625
  d="M17.5 5.5V16a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 16V2A1.5 1.5 0 0 1 2 .5h10.5M2 5.5h3.5V2H2m5.25 3.5h3.5V2h-3.5M2 10.75h3.5v-3.5H2m5.25 3.5h3.5v-3.5h-3.5m5.25 3.5H16v-3.5h-3.5M2 16h3.5v-3.5H2M7.25 16h3.5v-3.5h-3.5M12.5 16H16v-3.5h-3.5"
5242
5626
  />
5243
5627
  </svg>
5244
5628
  </t>
5245
5629
  <t t-name="o-spreadsheet-Icon.PAINT_FORMAT">
5246
- <svg class="o-icon">
5630
+ <svg class="o-icon" viewBox="0 0 18 18">
5247
5631
  <path
5248
5632
  fill="currentColor"
5249
5633
  d="M9,0 L1,0 C0.45,0 0,0.45 0,1 L0,4 C0,4.55 0.45,5 1,5 L9,5 C9.55,5 10,4.55 10,4 L10,3 L11,3 L11,6 L4,6 L4,14 L6,14 L6,8 L13,8 L13,2 L10,2 L10,1 C10,0.45 9.55,0 9,0 Z"
@@ -5252,7 +5636,7 @@
5252
5636
  </svg>
5253
5637
  </t>
5254
5638
  <t t-name="o-spreadsheet-Icon.CONDITIONAL_FORMAT">
5255
- <svg class="o-icon">
5639
+ <svg class="o-icon" viewBox="0 0 18 18">
5256
5640
  <path
5257
5641
  fill="currentColor"
5258
5642
  d="M12.25.5c2 0 3.5 1.5 3.5 3.5v6.5c0 .5 0 2-2 2h-2.5v4c0 .5-.5 1-1 1h-2.5c-.5 0-1-.5-1-1v-4h-2.5c-1 0-2-1-2-2V.5m12 3a1.5 1.5 0 0 0-1.5-1.5h-3v2h-1.5V2h-1v4h-2V2h-1.5v8.5h10.5m-12-3h12.5V9H2.25"
@@ -5260,7 +5644,7 @@
5260
5644
  </svg>
5261
5645
  </t>
5262
5646
  <t t-name="o-spreadsheet-Icon.CLEAR_FORMAT">
5263
- <svg class="o-icon">
5647
+ <svg class="o-icon" viewBox="0 0 18 18">
5264
5648
  <path
5265
5649
  fill="currentColor"
5266
5650
  d="M2.12 4.05 7.28 9.2l-2.43 5.3h2.5l1.64-3.58 4.59 4.58 1.27-1.27L3.4 2.77 2.12 4.05ZM5.67 2.5l2 2h1.76l-.55 1.21 1.71 1.71 1.34-2.92h3.92v-2H5.67"
@@ -5268,7 +5652,7 @@
5268
5652
  </svg>
5269
5653
  </t>
5270
5654
  <t t-name="o-spreadsheet-Icon.BOLD">
5271
- <svg class="o-icon">
5655
+ <svg class="o-icon" viewBox="0 0 18 18">
5272
5656
  <path
5273
5657
  fill="currentColor"
5274
5658
  d="M13.5 6.5C13.5 4.57 11.93 3 10 3H4.5v12h6.25c1.79 0 3.25-1.46 3.25-3.25 0-1.3-.77-2.41-1.87-2.93.83-.58 1.37-1.44 1.37-2.32M9.5 5c.83 0 1.5.67 1.5 1.5S10.33 8 9.5 8h-2V5h2m-2 8v-3H10c.83 0 1.5.67 1.5 1.5S10.83 13 10 13H7.5"
@@ -5276,12 +5660,12 @@
5276
5660
  </svg>
5277
5661
  </t>
5278
5662
  <t t-name="o-spreadsheet-Icon.ITALIC">
5279
- <svg class="o-icon">
5663
+ <svg class="o-icon" viewBox="0 0 18 18">
5280
5664
  <path fill="currentColor" d="M7 3v2h2.58l-3.66 8H3v2h8v-2H8.42l3.66-8H15V3"/>
5281
5665
  </svg>
5282
5666
  </t>
5283
5667
  <t t-name="o-spreadsheet-Icon.UNDERLINE">
5284
- <svg class="o-icon">
5668
+ <svg class="o-icon" viewBox="0 0 18 18">
5285
5669
  <path
5286
5670
  fill="currentColor"
5287
5671
  d="M9 15c2.76 0 5-2.24 5-5V3h-2v7c0 1.75-1.5 3-3 3s-3-1.242-3-3V3H4v7c0 2.76 2.24 5 5 5Zm-6 1v2h12v-2H3"
@@ -5289,7 +5673,7 @@
5289
5673
  </svg>
5290
5674
  </t>
5291
5675
  <t t-name="o-spreadsheet-Icon.STRIKE">
5292
- <svg class="o-icon">
5676
+ <svg class="o-icon" viewBox="0 0 18 18">
5293
5677
  <path
5294
5678
  fill="currentColor"
5295
5679
  d="M4.89 6.06c0-.46.1-.87.3-1.25.2-.38.46-.7.84-.97s.78-.47 1.28-.62A5.71 5.71 0 0 1 8.93 3c.61 0 1.16.08 1.65.25.5.17.92.4 1.27.7.35.3.62.66.81 1.07.19.41.28.87.28 1.36h-2.26a1.85 1.85 0 0 0-.11-.64 1.26 1.26 0 0 0-.33-.51 1.53 1.53 0 0 0-.56-.33A2.42 2.42 0 0 0 8.89 4.8c-.3 0-.55.03-.77.1a1.52 1.52 0 0 0-.54.27 1.14 1.14 0 0 0-.43.9c0 .36.18.66.55.91l.06.04C8.02 7.19 8.5 7.5 9 8H6s-.79-.62-.82-.69c-.19-.36-.29-.77-.29-1.25M16 9H2v2h7.22c.14.05.3.1.41.15.28.12.5.26.65.38.16.13.26.27.32.42.06.15.08.33.08.51 0 .18-.03.34-.1.49a1.02 1.02 0 0 1-.31.39 1.6 1.6 0 0 1-.53.26 2.71 2.71 0 0 1-.76.09c-.33 0-.62-.03-.89-.1a1.8 1.8 0 0 1-.68-.31 1.45 1.45 0 0 1-.44-.56c-.11-.23-.19-.57-.19-.74H4.55c0 .25.06.69.18 1.02a3.15 3.15 0 0 0 1.22 1.6c.28.2.58.36.92.49.33.13.67.23 1.04.29.36.06.72.09 1.08.09.6 0 1.15-.07 1.64-.21a3.88 3.88 0 0 0 1.25-.59 2.69 2.69 0 0 0 .8-.95c.19-.38.28-.81.28-1.29 0-.45-.08-.86-.23-1.211a2.26 2.26 0 0 0-.13-.25L16 11V9"
@@ -5297,7 +5681,7 @@
5297
5681
  </svg>
5298
5682
  </t>
5299
5683
  <t t-name="o-spreadsheet-Icon.TEXT_COLOR">
5300
- <svg class="o-icon">
5684
+ <svg class="o-icon" viewBox="0 0 18 18">
5301
5685
  <path
5302
5686
  fill="currentColor"
5303
5687
  d="M10 1H8L3.5 13h2l1.12-3h4.75l1.12 3h2L10 1ZM7.38 8 9 3.67 10.62 8H7.38"
@@ -5305,7 +5689,7 @@
5305
5689
  </svg>
5306
5690
  </t>
5307
5691
  <t t-name="o-spreadsheet-Icon.FILL_COLOR">
5308
- <svg class="o-icon">
5692
+ <svg class="o-icon" viewBox="0 0 18 18">
5309
5693
  <path
5310
5694
  fill="currentColor"
5311
5695
  d="M14.5 8.87S13 10.49 13 11.49c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5c0-.99-1.5-2.62-1.5-2.62m-1.79-2.08L5.91 0 4.85 1.06l1.59 1.59-4.15 4.14a.996.996 0 0 0 0 1.41l4.5 4.5c.2.2.45.3.71.3.26 0 .51-.1.71-.29l4.5-4.5c.39-.39.39-1.03 0-1.42M4.21 7 7.5 3.71 10.79 7H4.21"
@@ -5313,7 +5697,7 @@
5313
5697
  </svg>
5314
5698
  </t>
5315
5699
  <t t-name="o-spreadsheet-Icon.MERGE_CELL">
5316
- <svg class="o-icon">
5700
+ <svg class="o-icon" viewBox="0 0 18 18">
5317
5701
  <path
5318
5702
  fill="currentColor"
5319
5703
  d="M3 6H1V2h7v2H3v2m7-2V2h7v4h-2V4h-5m0 10h5v-2h2v4h-7v-2m-9-2h2v2h5v2H1v-4m0-4h4V6l3 3-3 3v-2H1V8m9 1 3-3v2h4v2h-4v2l-3-3"
@@ -5321,12 +5705,12 @@
5321
5705
  </svg>
5322
5706
  </t>
5323
5707
  <t t-name="o-spreadsheet-Icon.ALIGN_LEFT">
5324
- <svg class="o-icon align-left">
5708
+ <svg class="o-icon align-left" viewBox="0 0 18 18">
5325
5709
  <path fill="currentColor" d="M2 16h10v-2H2v2M12 6H2v2h10V6M2 2v2h14V2H2m0 10h14v-2H2v2"/>
5326
5710
  </svg>
5327
5711
  </t>
5328
5712
  <t t-name="o-spreadsheet-Icon.ALIGN_CENTER">
5329
- <svg class="o-icon align-center">
5713
+ <svg class="o-icon align-center" viewBox="0 0 18 18">
5330
5714
  <path fill="currentColor" d="M4 14v2h10v-2H4m0-8v2h10V6H4m-2 6h14v-2H2v2M2 2v2h14V2H2"/>
5331
5715
  </svg>
5332
5716
  </t>
@@ -5336,17 +5720,17 @@
5336
5720
  </div>
5337
5721
  </t>
5338
5722
  <t t-name="o-spreadsheet-Icon.ALIGN_RIGHT">
5339
- <svg class="o-icon align-right">
5723
+ <svg class="o-icon align-right" viewBox="0 0 18 18">
5340
5724
  <path fill="currentColor" d="M6 16h10v-2H6v2m-4-4h14v-2H2v2M2 2v2h14V2H2m4 6h10V6H6v2"/>
5341
5725
  </svg>
5342
5726
  </t>
5343
5727
  <t t-name="o-spreadsheet-Icon.ALIGN_TOP">
5344
- <svg class="o-icon align-top">
5728
+ <svg class="o-icon align-top" viewBox="0 0 18 18">
5345
5729
  <path d="M3 2h12v2H3m2.5 5H8v7h2V9h2.5L9 5.5" fill="currentColor"/>
5346
5730
  </svg>
5347
5731
  </t>
5348
5732
  <t t-name="o-spreadsheet-Icon.ALIGN_MIDDLE">
5349
- <svg class="o-icon align-middle">
5733
+ <svg class="o-icon align-middle" viewBox="0 0 18 18">
5350
5734
  <path
5351
5735
  d="M12.5 3H10V0H8v3H5.5L9 6.5M5.5 15H8v3h2v-3h2.5L9 11.5M3 8v2h12V8"
5352
5736
  fill="currentColor"
@@ -5354,17 +5738,17 @@
5354
5738
  </svg>
5355
5739
  </t>
5356
5740
  <t t-name="o-spreadsheet-Icon.ALIGN_BOTTOM">
5357
- <svg class="o-icon align-bottom">
5741
+ <svg class="o-icon align-bottom" viewBox="0 0 18 18">
5358
5742
  <path d="M5.5 9H8V2h2v7h2.5L9 12.5M3 14v2h12v-2" fill="currentColor"/>
5359
5743
  </svg>
5360
5744
  </t>
5361
5745
  <t t-name="o-spreadsheet-Icon.WRAPPING_OVERFLOW">
5362
- <svg class="o-icon wrapping-overflow">
5746
+ <svg class="o-icon wrapping-overflow" viewBox="0 0 18 18">
5363
5747
  <path d="M13 8H6v2h7v2l3-3-3-3M2 2h2v14H2M9 2h2v4H9m0 6h2v4H9" fill="currentColor"/>
5364
5748
  </svg>
5365
5749
  </t>
5366
5750
  <t t-name="o-spreadsheet-Icon.WRAPPING_WRAP">
5367
- <svg class="o-icon wrapping-wrap">
5751
+ <svg class="o-icon wrapping-wrap" viewBox="0 0 18 18">
5368
5752
  <path
5369
5753
  fill="currentColor"
5370
5754
  d="M6 5v2h3.75c.75 0 1.5.67 1.5 1.5 0 .75-.75 1.5-1.5 1.5H8V8l-3 3 3 3v-2h1.5c2 0 3.5-1.5 3.5-3.5S11.5 5 9.5 5M2 2h2v14H2M14 2M14,2,h2v14h-2"
@@ -5372,12 +5756,12 @@
5372
5756
  </svg>
5373
5757
  </t>
5374
5758
  <t t-name="o-spreadsheet-Icon.WRAPPING_CLIP">
5375
- <svg class="o-icon wrapping-clip">
5759
+ <svg class="o-icon wrapping-clip" viewBox="0 0 18 18">
5376
5760
  <path fill="currentColor" d="M2 2h2v14H2M14 2h2v14h-2v-6H6V8h8"/>
5377
5761
  </svg>
5378
5762
  </t>
5379
5763
  <t t-name="o-spreadsheet-Icon.BORDERS">
5380
- <svg class="o-icon">
5764
+ <svg class="o-icon" viewBox="0 0 18 18">
5381
5765
  <path
5382
5766
  fill="currentColor"
5383
5767
  d="M2 2v14h14V2H2m6 12H4v-4h4v4m0-6H4V4h4v4m6 6h-4v-4h4v4m0-6h-4V4h4v4"
@@ -5385,7 +5769,7 @@
5385
5769
  </svg>
5386
5770
  </t>
5387
5771
  <t t-name="o-spreadsheet-Icon.BORDER_HV">
5388
- <svg class="o-icon" fill="currentColor">
5772
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5389
5773
  <path
5390
5774
  d="M2 16h2v-2H2v2M4 5H2v2h2V5m1 11h2v-2H5v2m8-14h-2v2h2V2M4 2H2v2h2V2m3 0H5v2h2V2M2 13h2v-2H2v2m9 3h2v-2h-2v2m3-14v2h2V2h-2m0 5h2V5h-2v2m0 9h2v-2h-2v2m0-3h2v-2h-2v2"
5391
5775
  opacity=".54"
@@ -5394,7 +5778,7 @@
5394
5778
  </svg>
5395
5779
  </t>
5396
5780
  <t t-name="o-spreadsheet-Icon.BORDER_H">
5397
- <svg class="o-icon" fill="currentColor">
5781
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5398
5782
  <path
5399
5783
  d="M8 16h2v-2H8v2M5 4h2V2H5v2m3 9h2v-2H8v2m-3 3h2v-2H5v2M2 7h2V5H2v2m0 9h2v-2H2v2M2 4h2V2H2v2m0 9h2v-2H2v2m12 0h2v-2h-2v2m0 3h2v-2h-2v2m0-9h2V5h-2v2m0-5v2h2V2h-2M8 4h2V2H8v2m3 0h2V2h-2v2M8 7h2V5H8v2m3 9h2v-2h-2v2"
5400
5784
  opacity=".54"
@@ -5403,7 +5787,7 @@
5403
5787
  </svg>
5404
5788
  </t>
5405
5789
  <t t-name="o-spreadsheet-Icon.BORDER_V">
5406
- <svg class="o-icon" fill="currentColor">
5790
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5407
5791
  <path
5408
5792
  d="M5 16h2v-2H5v2M2 7h2V5H2v2m0-3h2V2H2v2m3 6h2V8H5v2m0-6h2V2H5v2M2 16h2v-2H2v2m0-6h2V8H2v2m0 3h2v-2H2v2M14 2v2h2V2h-2m0 8h2V8h-2v2m0 6h2v-2h-2v2m0-9h2V5h-2v2m0 6h2v-2h-2v2m-3 3h2v-2h-2v2m0-6h2V8h-2v2m0-6h2V2h-2v2"
5409
5793
  opacity=".54"
@@ -5412,13 +5796,13 @@
5412
5796
  </svg>
5413
5797
  </t>
5414
5798
  <t t-name="o-spreadsheet-Icon.BORDER_EXTERNAL">
5415
- <svg class="o-icon" fill="currentColor">
5799
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5416
5800
  <path d="M10 5H8v2h2V5m3 3h-2v2h2V8m-3 0H8v2h2V8m0 3H8v2h2v-2M7 8H5v2h2V8" opacity=".54"/>
5417
5801
  <path d="M2 2h14v14H2V2m12 12V4H4v10h10"/>
5418
5802
  </svg>
5419
5803
  </t>
5420
5804
  <t t-name="o-spreadsheet-Icon.BORDER_LEFT">
5421
- <svg class="o-icon" fill="currentColor">
5805
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5422
5806
  <path
5423
5807
  d="M8 10h2V8H8v2m0-3h2V5H8v2m0 6h2v-2H8v2m0 3h2v-2H8v2m-3 0h2v-2H5v2M5 4h2V2H5v2m0 6h2V8H5v2m9 6h2v-2h-2v2m0-6h2V8h-2v2m0 3h2v-2h-2v2m0-6h2V5h-2v2M8 4h2V2H8v2m6-2v2h2V2h-2m-3 14h2v-2h-2v2m0-6h2V8h-2v2m0-6h2V2h-2v2"
5424
5808
  opacity=".54"
@@ -5427,7 +5811,7 @@
5427
5811
  </svg>
5428
5812
  </t>
5429
5813
  <t t-name="o-spreadsheet-Icon.BORDER_TOP">
5430
- <svg class="o-icon" fill="currentColor">
5814
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5431
5815
  <path
5432
5816
  d="M5 10h2V8H5v2m-3 6h2v-2H2v2m6 0h2v-2H8v2m0-3h2v-2H8v2m-3 3h2v-2H5v2m-3-3h2v-2H2v2m6-3h2V8H8v2M2 7h2V5H2v2m0 3h2V8H2v2m12 0h2V8h-2v2m0 3h2v-2h-2v2m0-6h2V5h-2v2M8 7h2V5H8v2m3 9h2v-2h-2v2m0-6h2V8h-2v2m3 6h2v-2h-2v2"
5433
5817
  opacity=".54"
@@ -5436,7 +5820,7 @@
5436
5820
  </svg>
5437
5821
  </t>
5438
5822
  <t t-name="o-spreadsheet-Icon.BORDER_RIGHT">
5439
- <svg class="o-icon" fill="currentColor">
5823
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5440
5824
  <path
5441
5825
  d="M2 4h2V2H2v2m3 0h2V2H5v2m0 6h2V8H5v2m0 6h2v-2H5v2M2 7h2V5H2v2m0 3h2V8H2v2m0 6h2v-2H2v2m0-3h2v-2H2v2m9-3h2V8h-2v2m-3 6h2v-2H8v2m3 0h2v-2h-2v2M8 4h2V2H8v2m3 0h2V2h-2v2m-3 9h2v-2H8v2m0-6h2V5H8v2m0 3h2V8H8v2"
5442
5826
  opacity=".54"
@@ -5445,7 +5829,7 @@
5445
5829
  </svg>
5446
5830
  </t>
5447
5831
  <t t-name="o-spreadsheet-Icon.BORDER_BOTTOM">
5448
- <svg class="o-icon" fill="currentColor">
5832
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5449
5833
  <path
5450
5834
  d="M7 2H5v2h2V2m3 6H8v2h2V8m0 3H8v2h2v-2m3-3h-2v2h2V8M7 8H5v2h2V8m6-6h-2v2h2V2m-3 3H8v2h2V5m0-3H8v2h2V2m-6 9H2v2h2v-2m10 2h2v-2h-2v2m0-6h2V5h-2v2m0 3h2V8h-2v2m0-8v2h2V2h-2M4 2H2v2h2V2m0 3H2v2h2V5m0 3H2v2h2V8"
5451
5835
  opacity=".54"
@@ -5454,7 +5838,7 @@
5454
5838
  </svg>
5455
5839
  </t>
5456
5840
  <t t-name="o-spreadsheet-Icon.BORDER_CLEAR">
5457
- <svg class="o-icon">
5841
+ <svg class="o-icon" viewBox="0 0 18 18">
5458
5842
  <path
5459
5843
  fill="currentColor"
5460
5844
  d="M8 16h2v-2H8v2m-3-6h2V8H5v2m0-6h2V2H5v2m3 9h2v-2H8v2m-3 3h2v-2H5v2M2 7h2V5H2v2m0 9h2v-2H2v2M2 4h2V2H2v2m0 6h2V8H2v2m6 0h2V8H8v2m-6 3h2v-2H2v2m12 0h2v-2h-2v2m0 3h2v-2h-2v2m0-6h2V8h-2v2m0-3h2V5h-2v2m0-5v2h2V2h-2M8 4h2V2H8v2m3 0h2V2h-2v2M8 7h2V5H8v2m3 9h2v-2h-2v2m0-6h2V8h-2v2"
@@ -5463,7 +5847,7 @@
5463
5847
  </svg>
5464
5848
  </t>
5465
5849
  <t t-name="o-spreadsheet-Icon.BORDER_TYPE">
5466
- <svg class="o-icon">
5850
+ <svg class="o-icon" viewBox="0 0 18 18">
5467
5851
  <g fill="currentColor" transform="translate(2 2)">
5468
5852
  <polygon points="0 0 0 2 14 2 14 0"/>
5469
5853
  <polygon points="0 6 0 8 5 8 5 6"/>
@@ -5476,7 +5860,7 @@
5476
5860
  </svg>
5477
5861
  </t>
5478
5862
  <t t-name="o-spreadsheet-Icon.BORDER_COLOR">
5479
- <svg class="o-icon">
5863
+ <svg class="o-icon" viewBox="0 0 18 18">
5480
5864
  <g fill="currentColor" transform="translate(4 2)">
5481
5865
  <polygon points="0 12 0 9 7 2 10 5 3 12"/>
5482
5866
  <polygon points="8 1 9 0 12 3 11 4"/>
@@ -5484,7 +5868,7 @@
5484
5868
  </svg>
5485
5869
  </t>
5486
5870
  <t t-name="o-spreadsheet-Icon.BORDER_NO_COLOR">
5487
- <svg class="o-icon">
5871
+ <svg class="o-icon" viewBox="0 0 18 18">
5488
5872
  <g fill="currentColor">
5489
5873
  <polygon points="4 12 4 9 11 2 14 5 7 12"/>
5490
5874
  <polygon points="12 1 13 0 16 3 15 4"/>
@@ -5659,7 +6043,7 @@
5659
6043
  </svg>
5660
6044
  </t>
5661
6045
  <t t-name="o-spreadsheet-Icon.SORT_RANGE">
5662
- <svg class="o-icon">
6046
+ <svg class="o-icon" viewBox="0 0 18 18">
5663
6047
  <path
5664
6048
  fill="currentColor"
5665
6049
  d="M9 3.5h8v2H9M9 8h6v2H9m0 2.5h3v2H9M6 6l1-1-3-3-3 3 1 1 1-1v8l-1-1-1 1 3 3 3-3-1-1-1 1V5"
@@ -5722,14 +6106,14 @@
5722
6106
  <span class="o-text-icon">.00</span>
5723
6107
  </t>
5724
6108
  <t t-name="o-spreadsheet-Icon.NUMBER_FORMATS">
5725
- <svg class="o-icon" fill="currentColor">
6109
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5726
6110
  <path
5727
6111
  d="M0 6h2v8h2V4H0m9 0H5v2h4v2H6.5A1.5 1.5 0 0 0 5 9.5V14h6v-2H7v-2h2.5A1.5 1.5 0 0 0 11 8.5v-3A1.5 1.5 0 0 0 9.5 4M12 4v2h4v2h-2v2h2v2h-4v2h4.5a1.5 1.5 0 0 0 1.5-1.5v-2A1.5 1.5 0 0 0 16.5 9 1.5 1.5 0 0 0 18 7.5v-2A1.5 1.5 0 0 0 16.5 4"
5728
6112
  />
5729
6113
  </svg>
5730
6114
  </t>
5731
6115
  <t t-name="o-spreadsheet-Icon.FONT_SIZE">
5732
- <svg class="o-icon" fill="currentColor">
6116
+ <svg class="o-icon" fill="currentColor" viewBox="0 0 18 18">
5733
6117
  <text x="2" y="15" class="small-text">A</text>
5734
6118
  <text x="6" y="15" class="heavy-text">A</text>
5735
6119
  </svg>
@@ -5740,7 +6124,7 @@
5740
6124
  </div>
5741
6125
  </t>
5742
6126
  <t t-name="o-spreadsheet-Icon.SPLIT_TEXT">
5743
- <svg class="o-icon">
6127
+ <svg class="o-icon" viewBox="0 0 18 18">
5744
6128
  <path
5745
6129
  fill="currentColor"
5746
6130
  d="M14 6v2h-4v2h4v2l3-3m-9 1V8H4V6L1 9l3 3v-2m3.5-6.5h3V7H12V3.5h3V2H3v1.5h3V7h1.5m3 7.5h-3V11H6v3.5H3V16h12v-1.5h-3V11h-1.5"
@@ -5753,7 +6137,7 @@
5753
6137
  </div>
5754
6138
  </t>
5755
6139
  <t t-name="o-spreadsheet-Icon.DISPLAY_HEADER">
5756
- <svg class="o-icon" width="18" height="18">
6140
+ <svg class="o-icon" viewBox="0 0 18 18">
5757
6141
  <path
5758
6142
  fill="currentColor"
5759
6143
  d="M.75.5h16.5v17H.75m1.5-12H.75V7h1.5v1.5H.75V10h1.5v1.5H.75V13h1.5v1.5H.75V16h1.5v1.5h1.5V16h1.5v1.5h1.5V16h1.5v1.5h1.5V16h1.5v1.5h1.5V16h1.5v1.5h1.5V16h1.5v-1.5h-1.5V13h1.5v-1.5h-1.5V10h1.5V8.5h-1.5V7h1.5V5.5M2.75 2.25v1.5h2v-1.5m2.5 0v1.5h7v-1.5"
@@ -5771,7 +6155,7 @@
5771
6155
  </svg>
5772
6156
  </t>
5773
6157
  <t t-name="o-spreadsheet-Icon.PLUS_IN_BOX">
5774
- <svg class="o-icon" width="18" height="18" style="">
6158
+ <svg class="o-icon" viewBox="0 0 18 18">
5775
6159
  <path
5776
6160
  fill="currentColor"
5777
6161
  d="
@@ -5783,7 +6167,7 @@
5783
6167
  </svg>
5784
6168
  </t>
5785
6169
  <t t-name="o-spreadsheet-Icon.MINUS_IN_BOX">
5786
- <svg class="o-icon" width="18" height="18" style="">
6170
+ <svg class="o-icon" viewBox="0 0 18 18">
5787
6171
  <path
5788
6172
  fill="currentColor"
5789
6173
  d="
@@ -5794,7 +6178,7 @@
5794
6178
  </svg>
5795
6179
  </t>
5796
6180
  <t t-name="o-spreadsheet-Icon.GROUP_ROWS">
5797
- <svg class="o-icon" width="18" height="18">
6181
+ <svg class="o-icon" viewBox="0 0 18 18">
5798
6182
  <path
5799
6183
  fill="currentColor"
5800
6184
  d="M6 2.5A1.5 1.5 0 0 1 7.5 1H16a1.5 1.5 0 0 1 1.5 1.5V15a1.5 1.5 0 0 1-1.5 1.5H7.5A1.5 1.5 0 0 1 6 15M7.5 2.5v2H16v-2M7.5 6v2H16V6M7.5 9.5v2H16v-2M7.5 13v2H16v-2M2 5.75V13h3v-1.5H3.5V5.75h1.25V3l-1 1v.75H3M.25 1.25v4.5h4.5v-4.5m-3.5 1h2.5v2.5h-2.5"
@@ -5802,7 +6186,7 @@
5802
6186
  </svg>
5803
6187
  </t>
5804
6188
  <t t-name="o-spreadsheet-Icon.UNGROUP_ROWS">
5805
- <svg class="o-icon" width="18" height="18">
6189
+ <svg class="o-icon" viewBox="0 0 18 18">
5806
6190
  <path
5807
6191
  fill="currentColor"
5808
6192
  d="M6 2.5A1.5 1.5 0 0 1 7.5 1H16a1.5 1.5 0 0 1 1.5 1.5V15a1.5 1.5 0 0 1-1.5 1.5H7.5A1.5 1.5 0 0 1 6 15M7.5 2.5v2H16v-2M7.5 6v2H16V6M7.5 9.5v2H16v-2M7.5 13v2H16v-2M2 5.75V13h3v-1.5H3.5V5.75M0 5.25.75 6l2-2 2 2 .75-.75-2-2 2-2L4.75.5l-2 2-2-2-.75.75 2 2"
@@ -5810,7 +6194,7 @@
5810
6194
  </svg>
5811
6195
  </t>
5812
6196
  <t t-name="o-spreadsheet-Icon.GROUP_COLUMNS">
5813
- <svg class="o-icon" width="18" height="18">
6197
+ <svg class="o-icon" viewBox="0 0 18 18">
5814
6198
  <path
5815
6199
  fill="currentColor"
5816
6200
  d="M2.75 6a1.5 1.5 0 0 0-1.5 1.5V16a1.5 1.5 0 0 0 1.5 1.5h12.5a1.5 1.5 0 0 0 1.5-1.5V7.5a1.5 1.5 0 0 0-1.5-1.5M2.75 7.5h2V16h-2m3.5-8.5h2V16h-2m3.5-8.5h2V16h-2m3.5-8.5h2V16h-2M6 2h7.25v3h-1.5V3.5H6v1.25H3.25l1-1H5V3M1.5.25H6v4.5H1.5m1-3.5v2.5H5v-2.5"
@@ -5818,7 +6202,7 @@
5818
6202
  </svg>
5819
6203
  </t>
5820
6204
  <t t-name="o-spreadsheet-Icon.UNGROUP_COLUMNS">
5821
- <svg class="o-icon" width="18" height="18">
6205
+ <svg class="o-icon" viewBox="0 0 18 18">
5822
6206
  <path
5823
6207
  fill="currentColor"
5824
6208
  d="M2.75 6a1.5 1.5 0 0 0-1.5 1.5V16a1.5 1.5 0 0 0 1.5 1.5h12.5a1.5 1.5 0 0 0 1.5-1.5V7.5a1.5 1.5 0 0 0-1.5-1.5M2.75 7.5h2V16h-2m3.5-8.5h2V16h-2m3.5-8.5h2V16h-2m3.5-8.5h2V16h-2M6 2h7.25v3h-1.5V3.5H6M5.5 0l.75.75-2 2 2 2-.75.75-2-2-2 2-.75-.75 2-2-2-2L1.5 0l2 2"
@@ -5826,7 +6210,7 @@
5826
6210
  </svg>
5827
6211
  </t>
5828
6212
  <t t-name="o-spreadsheet-Icon.DATA_VALIDATION">
5829
- <svg class="o-icon">
6213
+ <svg class="o-icon" viewBox="0 0 18 18">
5830
6214
  <path
5831
6215
  fill="currentColor"
5832
6216
  d="M.5 2A1.5 1.5 0 0 1 2 .5h14A1.5 1.5 0 0 1 17.5 2v7H11V7H7v4s-.5 0-1.5 1h-1v5h-3a1.5 1.5 0 0 1-1-1M6 6V2H2v4m9 0V2H7v4m9 0V2h-4v4m-6 5V7H2v4m14-2V7h-4v2m-7.5 6.5V12H2v3.5"
@@ -5854,7 +6238,7 @@
5854
6238
  </svg>
5855
6239
  </t>
5856
6240
  <t t-name="o-spreadsheet-Icon.EDIT_TABLE">
5857
- <svg class="o-icon" xmlns="http://www.w3.org/2000/svg" width="18" height="18">
6241
+ <svg class="o-icon" viewBox="0 0 18 18">
5858
6242
  <path
5859
6243
  fill="currentColor"
5860
6244
  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"
@@ -5862,7 +6246,7 @@
5862
6246
  </svg>
5863
6247
  </t>
5864
6248
  <t t-name="o-spreadsheet-Icon.DELETE_TABLE">
5865
- <svg class="o-icon" xmlns="http://www.w3.org/2000/svg" width="18" height="18">
6249
+ <svg class="o-icon" viewBox="0 0 18 18">
5866
6250
  <path
5867
6251
  fill="currentColor"
5868
6252
  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"
@@ -5870,7 +6254,7 @@
5870
6254
  </svg>
5871
6255
  </t>
5872
6256
  <t t-name="o-spreadsheet-Icon.PAINT_TABLE">
5873
- <svg class="o-icon" xmlns="http://www.w3.org/2000/svg" width="18" height="18">
6257
+ <svg class="o-icon" viewBox="0 0 18 18">
5874
6258
  <path
5875
6259
  fill="currentColor"
5876
6260
  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"
@@ -5886,7 +6270,7 @@
5886
6270
  </svg>
5887
6271
  </t>
5888
6272
  <t t-name="o-spreadsheet-Icon.PIVOT">
5889
- <svg class="o-icon">
6273
+ <svg class="o-icon" viewBox="0 0 18 18">
5890
6274
  <path
5891
6275
  fill="currentColor"
5892
6276
  d="M15.5 2A1.5 1.5 0 0 1 17 3.5V14a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 1 14V7.5A1.5 1.5 0 0 1 2.5 6H5V3.5A1.5 1.5 0 0 1 6.5 2H17m-1.5 1.5h-9V6h9m-13 1.5V10H5V7.5m-2.5 4V14H5v-2.5m1.5-4V10h9V7.5m-9 4V14h9v-2.5"
@@ -5909,8 +6293,28 @@
5909
6293
  </svg>
5910
6294
  </div>
5911
6295
  </t>
6296
+ <t t-name="o-spreadsheet-Icon.ANGLE_RIGHT">
6297
+ <div class="o-icon">
6298
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 224 256">
6299
+ <path
6300
+ fill="currentColor"
6301
+ d="M161 139c6-6 6-16 0-23L81 36c-6-6-16-6-23 0s-6 16 0 23l69 69-69 69c-6 6-6 16 0 23s16 6 23 0l80-80z"
6302
+ />
6303
+ </svg>
6304
+ </div>
6305
+ </t>
6306
+ <t t-name="o-spreadsheet-Icon.ANGLE_LEFT">
6307
+ <div class="o-icon">
6308
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 224 256">
6309
+ <path
6310
+ fill="currentColor"
6311
+ d="M59 116c-6 6-6 16 0 23l80 80c6 6 16 6 23 0s6-16 0-23L93 127l69-69c6-6 6-16 0-23s-16-6-23 0l-80 80z"
6312
+ />
6313
+ </svg>
6314
+ </div>
6315
+ </t>
5912
6316
  <t t-name="o-spreadsheet-Icon.INSERT_PIVOT">
5913
- <svg class="o-icon">
6317
+ <svg class="o-icon" viewBox="0 0 18 18">
5914
6318
  <defs>
5915
6319
  <mask id="a">
5916
6320
  <path fill="#fff" d="M0 0h18v18H0z"/>
@@ -5920,7 +6324,6 @@
5920
6324
  <path
5921
6325
  fill="currentColor"
5922
6326
  d="M15.5 2A1.5 1.5 0 0 1 17 3.5V14a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 1 14V7.5A1.5 1.5 0 0 1 2.5 6H5V3.5A1.5 1.5 0 0 1 6.5 2H17m-1.5 1.5h-9V6h9m-13 1.5V10H5V7.5m-2.5 4V14H5v-2.5m1.5-4V10h9V7.5m-9 4V14h9v-2.5"
5923
- mask="url(#a)"
5924
6327
  />
5925
6328
  <path
5926
6329
  fill="currentColor"
@@ -6067,6 +6470,54 @@
6067
6470
  <i class="fa fa-unlock"/>
6068
6471
  </div>
6069
6472
  </t>
6473
+ <t t-name="o-spreadsheet-Icon.PRINT">
6474
+ <div class="o-icon">
6475
+ <i class="fa fa-print"/>
6476
+ </div>
6477
+ </t>
6478
+ <t t-name="o-spreadsheet-Icon.COLUMN_STATS">
6479
+ <svg width="18px" height="18px" viewBox="0 0 512 512">
6480
+ <path
6481
+ d="M319 174c71 0 129 58 129 129 0 27-8 52-23 73l66 66-33 33-66-66c-21 14-46 23-73 23-71 0-129-58-129-129s57-129 129-129m0 47c-45 0-82 37-82 82s36 82 82 82 82-37 82-82-37-82-82-82m-152 70a155 155 0 0 0 0 12c0 12 1 24 4 35H25v-47zM119 33v235H49V33zm94 94v66c-21 20-36 46-43 75h-28V127zm94-47v71a152 152 0 0 0-70 24V80zm94 23v71a152 152 0 0 0-70-24v-47z"
6482
+ fill="currentColor"
6483
+ />
6484
+ </svg>
6485
+ </t>
6486
+ <t t-name="o-spreadsheet-Icon.DESCENDING_SORT">
6487
+ <svg width="20px" height="16px" viewBox="0 0 20 16">
6488
+ <path
6489
+ d="M9.9 11.4h3.9a.9.9 0 0 0 .9-.9V6.24a.9.9 0 0 0-1.8 0V8.4L8.1 3.6s-.6-.6-1.2 0L5.1 5.4 1.5 1.8A.9.9 0 0 0 .3 3l4.2 4.2s.6.6 1.2 0l1.8-1.8 4.2 4.2H9.6a.9.9 0 0 0 0 1.8z"
6490
+ fill="currentColor"
6491
+ />
6492
+ </svg>
6493
+ </t>
6494
+ <t t-name="o-spreadsheet-Icon.ASCENDING_SORT">
6495
+ <svg width="20px" height="16px" viewBox="0 0 20 16">
6496
+ <path
6497
+ d="M9.9 3h3.9a.9.9 0 0 1 .9.9v4.26a.9.9 0 0 1-1.8 0V6l-4.8 4.8s-.6.6-1.2 0L5.1 9l-3.6 3.6a.9.9 0 0 1-1.2-1.2l4.2-4.2s.6-.6 1.2 0L7.5 9l4.2-4.2H9.6a.9.9 0 0 1 0-1.8z"
6498
+ fill="currentColor"
6499
+ />
6500
+ </svg>
6501
+ </t>
6502
+ <t t-name="o-spreadsheet-Icon.COUNT_CHART">
6503
+ <svg width="20px" height="16px" viewBox="0 0 20 16">
6504
+ <path
6505
+ fill="currentColor"
6506
+ d="M.747 1.05h2.24v9.707H.747zM4.48 5.53h2.24v5.227H4.48zm7.467-1.493h2.24v6.72h-2.24zM8.213 2.543h2.24v8.214h-2.24zM0 11.503h14.933v1.494H0z"
6507
+ />
6508
+ </svg>
6509
+ </t>
6510
+ <t t-name="o-spreadsheet-Icon.NAMED_RANGE">
6511
+ <svg
6512
+ class="o-icon"
6513
+ fill="currentColor"
6514
+ viewBox="0 0 1024 1024"
6515
+ xmlns="http://www.w3.org/2000/svg">
6516
+ <path
6517
+ d="M1023.98 416.272l-.001-338.367c0-42.944-34.944-77.904-77.872-77.904H600.73c-21.68 0-54.496 0-75.92 21.44L18.875 527.393c-12.16 12.16-18.88 28.304-18.88 45.487 0 17.216 6.689 33.376 18.849 45.537l386.8 386.72C417.756 1017.312 433.916 1024 451.1 1024s33.36-6.689 45.487-18.849l505.952-505.968c21.696-21.648 21.569-52.816 21.441-82.912zm-66.685 37.666L450.878 959.874 64.126 572.658 569.518 67.154c5.088-3.152 23.408-3.152 30.992-3.152l14.4.048 331.2-.048c7.665 0 13.873 6.24 13.873 13.904V416.53c.064 12.176.129 32.544-2.688 37.408zM768.014 128.001c-70.689 0-128 57.311-128 128s57.312 128 128 128 128-57.312 128-128-57.312-128-128-128zm0 192c-35.344 0-64-28.656-64-64s28.656-64 64-64 64 28.656 64 64-28.656 64-64 64z M400,760 l300,-300 l30,30 l-300,300 M250,600 l300,-300 l30,30 l-300,300"
6518
+ />
6519
+ </svg>
6520
+ </t>
6070
6521
 
6071
6522
  <t t-name="o-spreadsheet-IconPicker">
6072
6523
  <div class="o-icon-picker bg-white">
@@ -6252,7 +6703,6 @@
6252
6703
  class="o-handle"
6253
6704
  t-on-pointerdown="onMouseDown"
6254
6705
  t-on-dblclick="onDblClick"
6255
- t-on-contextmenu.prevent=""
6256
6706
  t-attf-style="top:{{state.draggerLinePosition - 2}}px;">
6257
6707
  <div class="dragging-resizer" t-if="state.isResizing"/>
6258
6708
  </div>
@@ -6295,7 +6745,6 @@
6295
6745
  class="o-handle"
6296
6746
  t-on-pointerdown="onMouseDown"
6297
6747
  t-on-dblclick="onDblClick"
6298
- t-on-contextmenu.prevent=""
6299
6748
  t-attf-style="left:{{state.draggerLinePosition - 2}}px;">
6300
6749
  <div class="dragging-resizer" t-if="state.isResizing"/>
6301
6750
  </div>
@@ -6412,7 +6861,7 @@
6412
6861
  t-if="cellPopover.isOpen"
6413
6862
  positioning="cellPopover.cellCorner"
6414
6863
  maxHeight="cellPopover.Component.size and cellPopover.Component.size.maxHeight"
6415
- maxWidth="cellPopover.Component.size and cellPopover.Component.size.maxHidth"
6864
+ maxWidth="cellPopover.Component.size and cellPopover.Component.size.maxWidth"
6416
6865
  anchorRect="cellPopover.anchorRect"
6417
6866
  containerRect="env.getPopoverContainerRect()"
6418
6867
  onMouseWheel="props.onMouseWheel"
@@ -6646,7 +7095,7 @@
6646
7095
  t-att-class="{'selected': this.props.isSelected}">
6647
7096
  <t t-set="value">
6648
7097
  <t t-if="this.props.value === ''">(Blanks)</t>
6649
- <t t-else="" t-esc="this.props.value"/>
7098
+ <t t-else="" t-out="this.props.value"/>
6650
7099
  </t>
6651
7100
  <!-- toString because t-set with a body creates a LazyValue instead of a string -->
6652
7101
  <Checkbox
@@ -6680,23 +7129,19 @@
6680
7129
  </t>
6681
7130
 
6682
7131
  <t t-name="o-spreadsheet-FilterMenu">
6683
- <div class="o-filter-menu d-flex flex-column bg-white" t-on-wheel.stop="">
6684
- <t t-if="isSortable">
6685
- <div>
6686
- <div
6687
- class="o-filter-menu-item o-sort-item py-2 mb-1"
6688
- t-on-click="() => this.sortFilterZone('asc')">
6689
- Sort ascending (A ⟶ Z)
6690
- </div>
6691
- <div
6692
- class="o-filter-menu-item o-sort-item py-2"
6693
- t-on-click="() => this.sortFilterZone('desc')">
6694
- Sort descending (Z ⟶ A)
6695
- </div>
7132
+ <div class="o-filter-menu d-flex flex-column py-3" t-on-wheel.stop="">
7133
+ <div t-if="isSortable" class="o-filter-menu-content">
7134
+ <div
7135
+ class="o-filter-menu-item py-2 ps-4 mb-1"
7136
+ t-on-click="() => this.sortFilterZone('asc')">
7137
+ Sort ascending (A Z)
7138
+ </div>
7139
+ <div class="o-filter-menu-item py-2 ps-4" t-on-click="() => this.sortFilterZone('desc')">
7140
+ Sort descending (Z ⟶ A)
6696
7141
  </div>
6697
- </t>
6698
- <div class="o-filter-menu-content">
6699
7142
  <div class="o-separator border-bottom"/>
7143
+ </div>
7144
+ <div class="o-filter-menu-content">
6700
7145
  <SidePanelCollapsible
6701
7146
  isInitiallyCollapsed="filterValueType !== 'criterion'"
6702
7147
  title.translate="Filter by criterion">
@@ -6800,7 +7245,7 @@
6800
7245
  t-att-style="headerStyle">
6801
7246
  <div
6802
7247
  class="o-carousel-title text-truncate flex-shrink-0 pe-2"
6803
- t-esc="title"
7248
+ t-out="title"
6804
7249
  t-att-title="title"
6805
7250
  t-att-style="titleStyle"
6806
7251
  />
@@ -6810,7 +7255,7 @@
6810
7255
  class="o-carousel-tab text-truncate px-2 mt-1 flex-shrink-0"
6811
7256
  t-att-class="{ 'selected': isItemSelected(item) }"
6812
7257
  t-att-data-type="item.type"
6813
- t-esc="getItemTitle(item)"
7258
+ t-out="getItemTitle(item)"
6814
7259
  t-on-click.stop="() => this.onCarouselTabClick(item)"
6815
7260
  />
6816
7261
  </t>
@@ -6997,6 +7442,15 @@
6997
7442
  <t t-name="o-spreadsheet-ChartDashboardMenu">
6998
7443
  <div class="o-dashboard-chart-select position-absolute top-0 end-0" t-on-click.stop="">
6999
7444
  <div class="d-flex align-items-center gap-1 p-1 rounded" t-att-style="backgroundColor">
7445
+ <t t-if="regionOptions.length > 1">
7446
+ <Select
7447
+ class="'o-chart-dashboard-item w-auto py-0 px-1 text-muted text-nowrap rounded border-0'"
7448
+ popoverClass="'w-auto'"
7449
+ values="regionOptions"
7450
+ selectedValue="selectedRegion"
7451
+ onChange.bind="onRegionSelected"
7452
+ />
7453
+ </t>
7000
7454
  <t t-foreach="getMenuItems()" t-as="item" t-key="item.id">
7001
7455
  <div
7002
7456
  t-attf-class=" {{item.class}}"
@@ -7047,31 +7501,56 @@
7047
7501
  </t>
7048
7502
 
7049
7503
  <t t-name="o-spreadsheet-ErrorToolTip">
7050
- <div class="o-error-tooltip bg-white">
7504
+ <div class="o-error-tooltip">
7051
7505
  <t t-if="evaluationError">
7052
7506
  <div class="o-error-tooltip-title fw-bold text-danger">Error</div>
7053
7507
  <div class="o-error-tooltip-message">
7054
- <t t-esc="evaluationError.message"/>
7508
+ <t t-out="evaluationError.message"/>
7055
7509
  <div class="fst-italic" t-if="errorOriginPositionString">
7056
7510
  Caused by
7057
7511
  <span
7058
- t-esc="errorOriginPositionString"
7512
+ t-out="errorOriginPositionString"
7059
7513
  class="o-button-link"
7060
7514
  t-on-click="selectCell"
7061
7515
  title="Click to select the cell"
7062
7516
  />
7063
7517
  </div>
7518
+ <t t-set="missingHeadersForSpread" t-value="getMissingHeadersForSpread()"/>
7519
+ <div
7520
+ t-if="missingHeadersForSpread"
7521
+ id="missing-headers"
7522
+ class="o-button-link mt-4"
7523
+ t-on-click="() => this.addMissingHeaders(missingHeadersForSpread)"
7524
+ t-out="getAddMissingHeadersButtonText(missingHeadersForSpread)"
7525
+ />
7064
7526
  </div>
7065
7527
  </t>
7066
7528
  <t t-if="dataValidationErrorMessage">
7067
7529
  <div class="o-error-tooltip-title fw-bold text-danger">Invalid</div>
7068
7530
  <div class="o-error-tooltip-message">
7069
- <t t-esc="dataValidationErrorMessage"/>
7531
+ <t t-out="dataValidationErrorMessage"/>
7070
7532
  </div>
7071
7533
  </t>
7072
7534
  </div>
7073
7535
  </t>
7074
7536
 
7537
+ <t t-name="o-spreadsheet-DateInput">
7538
+ <input
7539
+ type="date"
7540
+ t-ref="{{refName}}"
7541
+ t-att-class="inputClass"
7542
+ t-att-id="props.id"
7543
+ t-att-placeholder="props.placeholder"
7544
+ t-on-change="save"
7545
+ t-on-blur="save"
7546
+ t-on-pointerdown="onMouseDown"
7547
+ t-on-pointerup="onMouseUp"
7548
+ t-on-keydown="onKeyDown"
7549
+ t-att-min="props.min"
7550
+ t-att-max="props.max"
7551
+ />
7552
+ </t>
7553
+
7075
7554
  <t t-name="o-spreadsheet-SpreadsheetDashboard">
7076
7555
  <div
7077
7556
  class="o-grid o-two-columns o-zoomable"
@@ -7092,7 +7571,6 @@
7092
7571
  t-att-title="clickableCell.title"
7093
7572
  t-on-click="(ev) => this.selectClickableCell(ev, clickableCell)"
7094
7573
  t-on-auxclick="(ev) => this.selectClickableCell(ev, clickableCell)"
7095
- t-on-contextmenu.prevent=""
7096
7574
  t-att-style="getCellClickableStyle(clickableCell.coordinates)">
7097
7575
  <t
7098
7576
  t-if="clickableCell.component"
@@ -7169,7 +7647,7 @@
7169
7647
  <t t-name="o-spreadsheet-SpeechBubble">
7170
7648
  <t t-portal="'.o-spreadsheet'">
7171
7649
  <div class="o-speech-bubble position-absolute px-3 border" t-ref="bubble">
7172
- <div class="o-speech-content text-truncate pb-1" t-esc="props.content"/>
7650
+ <div class="o-speech-content text-truncate pb-1" t-out="props.content"/>
7173
7651
  </div>
7174
7652
  </t>
7175
7653
  </t>
@@ -7179,7 +7657,7 @@
7179
7657
  class="o-cell-reference rounded"
7180
7658
  t-if="shouldDisplayCellReference"
7181
7659
  t-att-style="cellReferenceStyle"
7182
- t-esc="cellReference"
7660
+ t-out="cellReference"
7183
7661
  />
7184
7662
  <div class="o-grid-composer" t-att-style="containerStyle" t-ref="gridComposer">
7185
7663
  <Composer t-props="composerProps"/>
@@ -7200,7 +7678,7 @@
7200
7678
  <div>
7201
7679
  <t t-foreach="formulaHeaderContent" t-as="part" t-key="part_index">
7202
7680
  <span
7203
- t-esc="part.content"
7681
+ t-out="part.content"
7204
7682
  t-att-class="part.focused ? 'o-formula-assistant-focus' : ''"
7205
7683
  />
7206
7684
  </t>
@@ -7219,7 +7697,7 @@
7219
7697
  <Collapse isCollapsed="state.isCollapsed">
7220
7698
  <div class="o-formula-assistant-core pb-3 m-3 border-bottom">
7221
7699
  <div class="o-formula-assistant-gray">ABOUT</div>
7222
- <div t-esc="context.functionDescription.description"/>
7700
+ <div t-out="context.functionDescription.description"/>
7223
7701
  </div>
7224
7702
 
7225
7703
  <t
@@ -7234,19 +7712,19 @@
7234
7712
  <div
7235
7713
  t-att-class="{'o-formula-assistant-focus': context.argsToFocus.includes(arg_index)}">
7236
7714
  <span t-if="arg.repeating">
7237
- <span t-esc="arg.name + (context.repeatingArgGroupIndex + 1)"/>
7715
+ <span t-out="arg.name + (context.repeatingArgGroupIndex + 1)"/>
7238
7716
  </span>
7239
7717
  <span t-else="">
7240
- <span t-esc="arg.name"/>
7718
+ <span t-out="arg.name"/>
7241
7719
  </span>
7242
7720
  <span
7243
7721
  t-if="arg.optional || arg.default || (arg.repeating and (firstRepeatableGroupOptional or context.repeatingArgGroupIndex > 0))">&#xA0;- [optional]&#xA0;</span>
7244
7722
  <span t-if="arg.default">
7245
7723
  <span>default:&#xA0;</span>
7246
- <t t-esc="arg.defaultValue"/>
7724
+ <t t-out="arg.defaultValue"/>
7247
7725
  </span>
7248
7726
  </div>
7249
- <div class="o-formula-assistant-arg-description" t-esc="arg.description"/>
7727
+ <div class="o-formula-assistant-arg-description" t-out="arg.description"/>
7250
7728
  </div>
7251
7729
  </t>
7252
7730
  </Collapse>
@@ -7350,27 +7828,30 @@
7350
7828
  t-ref="autoCompleteList"
7351
7829
  t-on-pointerdown.prevent=""
7352
7830
  t-att-class="{
7353
- 'o-autocomplete-dropdown bg-white': props.proposals.length}">
7831
+ 'o-autocomplete-dropdown': props.proposals.length}">
7354
7832
  <t t-foreach="props.proposals" t-as="proposal" t-key="proposal.text + proposal_index">
7355
7833
  <div
7356
- class="d-flex flex-column text-start"
7834
+ class="o-autocomplete-content d-flex flex-column text-start"
7357
7835
  t-att-class="{'o-autocomplete-value-focus': props.selectedIndex === proposal_index}"
7358
- t-on-click="() => this.props.onValueSelected(proposal.text)"
7836
+ t-on-click="() => this.props.onValueSelected(proposal)"
7359
7837
  t-on-pointermove="() => this.props.onValueHovered(proposal_index)">
7360
- <div class="o-autocomplete-value text-truncate">
7361
- <t t-set="htmlContent" t-value="proposal.htmlContent || [{ value: proposal.text}]"/>
7362
- <span
7363
- t-foreach="htmlContent"
7364
- t-as="content"
7365
- t-key="content_index"
7366
- t-att-class="content.classes?.join(' ')"
7367
- t-att-style="getCss(content)"
7368
- t-esc="content.value"
7369
- />
7838
+ <div class="d-flex align-items-center gap-2">
7839
+ <div t-if="proposal.icon" t-call="{{proposal.icon}}"/>
7840
+ <div class="o-autocomplete-value text-truncate">
7841
+ <t t-set="htmlContent" t-value="proposal.htmlContent || [{ value: proposal.text}]"/>
7842
+ <span
7843
+ t-foreach="htmlContent"
7844
+ t-as="content"
7845
+ t-key="content_index"
7846
+ t-att-class="content.classes?.join(' ')"
7847
+ t-att-style="getCss(content)"
7848
+ t-out="content.value"
7849
+ />
7850
+ </div>
7370
7851
  </div>
7371
7852
  <div
7372
7853
  class="o-autocomplete-description text-truncate"
7373
- t-esc="proposal.description"
7854
+ t-out="proposal.description"
7374
7855
  t-if="props.selectedIndex === proposal_index || proposal.alwaysExpanded"
7375
7856
  />
7376
7857
  </div>
@@ -7403,7 +7884,7 @@
7403
7884
 
7404
7885
  <t t-name="o-spreadsheet-ColorPicker">
7405
7886
  <Popover t-props="popoverProps">
7406
- <div class="o-color-picker bg-white" t-on-click.stop="" t-att-style="colorPickerStyle">
7887
+ <div class="o-color-picker" t-on-click.stop="" t-att-style="colorPickerStyle">
7407
7888
  <div class="o-color-picker-section-name">Standard</div>
7408
7889
  <div class="colors-grid">
7409
7890
  <div
@@ -7497,15 +7978,14 @@
7497
7978
  </t>
7498
7979
 
7499
7980
  <t t-name="o-spreadsheet-ClientTag">
7500
- <div t-if="props.active" class="o-client-tag" t-att-style="tagStyle" t-esc="props.name"/>
7981
+ <div t-if="props.active" class="o-client-tag" t-att-style="tagStyle" t-out="props.name"/>
7501
7982
  </t>
7502
7983
 
7503
7984
  <t t-name="o-spreadsheet-BottomBar">
7504
7985
  <div
7505
7986
  class="o-spreadsheet-bottom-bar o-two-columns d-flex flex-fill align-items-center overflow-hidden border-top"
7506
7987
  t-on-click="props.onClick"
7507
- t-ref="bottomBar"
7508
- t-on-contextmenu.prevent="">
7988
+ t-ref="bottomBar">
7509
7989
  <Ripple class="'add-sheet-container'">
7510
7990
  <div
7511
7991
  class="o-sheet-item o-add-sheet me-2 p-1"
@@ -7603,7 +8083,7 @@
7603
8083
  <div
7604
8084
  class="o-selection-statistic text-truncate user-select-none me-4 bg-white rounded shadow d-flex align-items-center"
7605
8085
  t-on-click="listSelectionStatistics">
7606
- <t t-esc="selectedStatistic"/>
8086
+ <t t-out="selectedStatistic"/>
7607
8087
  <span class="ms-2">
7608
8088
  <t t-call="o-spreadsheet-Icon.CARET_DOWN"/>
7609
8089
  </span>
@@ -7619,7 +8099,7 @@
7619
8099
  composerFocusableElement="true"
7620
8100
  t-on-pointerdown="(ev) => this.onMouseDown(ev)"
7621
8101
  t-on-click="onClick"
7622
- t-on-contextmenu.prevent="(ev) => this.onContextMenu(ev)"
8102
+ t-on-contextmenu="(ev) => this.onContextMenu(ev)"
7623
8103
  t-ref="sheetDiv"
7624
8104
  t-key="sheetName"
7625
8105
  t-att-style="props.style"
@@ -7633,7 +8113,7 @@
7633
8113
  class="o-sheet-name"
7634
8114
  t-att-class="{'o-sheet-name-editable': state.isEditing }"
7635
8115
  t-ref="sheetNameSpan"
7636
- t-esc="sheetName"
8116
+ t-out="sheetName"
7637
8117
  t-on-pointerdown="(ev) => this.onMouseEventSheetName(ev)"
7638
8118
  t-on-click="(ev) => this.onMouseEventSheetName(ev)"
7639
8119
  t-on-dblclick="() => this.onDblClick()"
@@ -7695,7 +8175,7 @@
7695
8175
  <t t-set="border_color">Border Color</t>
7696
8176
  <Popover t-props="popoverProps">
7697
8177
  <div
7698
- class="d-flex o-border-selector bg-white"
8178
+ class="d-flex o-border-selector"
7699
8179
  t-on-click.stop=""
7700
8180
  t-att-class="props.class ? props.class : ''">
7701
8181
  <div class="o-border-selector-section">
@@ -7744,7 +8224,7 @@
7744
8224
  <Popover
7745
8225
  t-props="lineStylePickerPopoverProps"
7746
8226
  t-if="state.activeTool === 'borderTypeTool'">
7747
- <div class="o-border-style-dropdown bg-white">
8227
+ <div class="o-border-style-dropdown">
7748
8228
  <t t-foreach="borderStyles" t-as="borderStyle" t-key="borderStyle">
7749
8229
  <div
7750
8230
  t-att-title="borderStyle"