@odoo/o-spreadsheet 19.4.0-alpha.10 → 19.4.0-alpha.11

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 (191) hide show
  1. package/dist/o_spreadsheet.cjs +1341 -1754
  2. package/dist/o_spreadsheet.css +3 -3
  3. package/dist/o_spreadsheet.esm.js +1340 -1755
  4. package/dist/o_spreadsheet.iife.js +1341 -1754
  5. package/dist/o_spreadsheet.min.iife.js +276 -276
  6. package/dist/o_spreadsheet.xml +10 -3
  7. package/dist/types/components/action_button/action_button.d.ts +8 -29
  8. package/dist/types/components/animation/ripple.d.ts +33 -92
  9. package/dist/types/components/autofill/autofill.d.ts +5 -9
  10. package/dist/types/components/border_editor/border_editor.d.ts +18 -43
  11. package/dist/types/components/border_editor/border_editor_widget.d.ts +6 -20
  12. package/dist/types/components/bottom_bar/bottom_bar.d.ts +4 -7
  13. package/dist/types/components/bottom_bar/bottom_bar_sheet/bottom_bar_sheet.d.ts +8 -22
  14. package/dist/types/components/bottom_bar/bottom_bar_statistic/bottom_bar_statistic.d.ts +5 -10
  15. package/dist/types/components/collaborative_client_tag/collaborative_client_tag.d.ts +8 -17
  16. package/dist/types/components/color_picker/color_picker.d.ts +13 -30
  17. package/dist/types/components/color_picker/color_picker_widget.d.ts +12 -40
  18. package/dist/types/components/composer/autocomplete_dropdown/autocomplete_dropdown.d.ts +7 -17
  19. package/dist/types/components/composer/composer/composer.d.ts +18 -63
  20. package/dist/types/components/composer/formula_assistant/formula_assistant.d.ts +8 -17
  21. package/dist/types/components/composer/grid_composer/grid_composer.d.ts +8 -13
  22. package/dist/types/components/composer/speech_bubble/speech_bubble.d.ts +5 -10
  23. package/dist/types/components/composer/standalone_composer/standalone_composer.d.ts +16 -62
  24. package/dist/types/components/composer/top_bar_composer/top_bar_composer.d.ts +1 -2
  25. package/dist/types/components/dashboard/clickable_cell_sort_icon/clickable_cell_sort_icon.d.ts +5 -11
  26. package/dist/types/components/dashboard/dashboard.d.ts +4 -8
  27. package/dist/types/components/error_tooltip/error_tooltip.d.ts +5 -14
  28. package/dist/types/components/figures/chart/chartJs/chartjs.d.ts +5 -14
  29. package/dist/types/components/figures/chart/chart_dashboard_menu/chart_dashboard_menu.d.ts +7 -15
  30. package/dist/types/components/figures/chart/gauge/gauge_chart_component.d.ts +5 -13
  31. package/dist/types/components/figures/chart/scorecard/chart_scorecard.d.ts +5 -14
  32. package/dist/types/components/figures/figure/figure.d.ts +10 -30
  33. package/dist/types/components/figures/figure_carousel/figure_carousel.d.ts +8 -24
  34. package/dist/types/components/figures/figure_chart/figure_chart.d.ts +7 -24
  35. package/dist/types/components/figures/figure_container/figure_container.d.ts +1 -4
  36. package/dist/types/components/figures/figure_image/figure_image.d.ts +6 -19
  37. package/dist/types/components/filters/filter_menu/filter_menu.d.ts +2 -13
  38. package/dist/types/components/filters/filter_menu_criterion/filter_menu_criterion.d.ts +6 -13
  39. package/dist/types/components/filters/filter_menu_item/filter_menu_value_item.d.ts +9 -21
  40. package/dist/types/components/filters/filter_menu_value_list/filter_menu_value_list.d.ts +12 -11
  41. package/dist/types/components/filters/pivot_filter_menu/pivot_filter_menu.d.ts +13 -28
  42. package/dist/types/components/font_size_editor/font_size_editor.d.ts +10 -25
  43. package/dist/types/components/full_screen_figure/full_screen_figure.d.ts +1 -2
  44. package/dist/types/components/generic_input/generic_input.d.ts +16 -45
  45. package/dist/types/components/grid/grid.d.ts +5 -10
  46. package/dist/types/components/grid_add_rows_footer/grid_add_rows_footer.d.ts +1 -5
  47. package/dist/types/components/grid_overlay/grid_overlay.d.ts +11 -37
  48. package/dist/types/components/grid_popover/grid_popover.d.ts +6 -13
  49. package/dist/types/components/header_group/header_group.d.ts +7 -12
  50. package/dist/types/components/header_group/header_group_container.d.ts +6 -11
  51. package/dist/types/components/headers_overlay/headers_overlay.d.ts +10 -16
  52. package/dist/types/components/headers_overlay/unhide_headers.d.ts +19 -30
  53. package/dist/types/components/highlight/border/border.d.ts +7 -16
  54. package/dist/types/components/highlight/corner/corner.d.ts +8 -18
  55. package/dist/types/components/highlight/highlight/highlight.d.ts +6 -11
  56. package/dist/types/components/icon_picker/icon_picker.d.ts +4 -8
  57. package/dist/types/components/link/link_display/link_display.d.ts +6 -13
  58. package/dist/types/components/link/link_editor/link_editor.d.ts +6 -13
  59. package/dist/types/components/menu/menu.d.ts +14 -55
  60. package/dist/types/components/menu_popover/menu_popover.d.ts +22 -69
  61. package/dist/types/components/named_range_selector/named_range_selector.d.ts +1 -4
  62. package/dist/types/components/number_editor/number_editor.d.ts +18 -54
  63. package/dist/types/components/number_input/number_input.d.ts +1 -52
  64. package/dist/types/components/paint_format_button/paint_format_button.d.ts +4 -11
  65. package/dist/types/components/pivot_html_renderer/pivot_html_renderer.d.ts +5 -9
  66. package/dist/types/components/popover/popover.d.ts +18 -69
  67. package/dist/types/components/props_validation.d.ts +181 -0
  68. package/dist/types/components/scrollbar/scrollbar.d.ts +13 -11
  69. package/dist/types/components/scrollbar/scrollbar_horizontal.d.ts +5 -13
  70. package/dist/types/components/scrollbar/scrollbar_vertical.d.ts +5 -13
  71. package/dist/types/components/select/select.d.ts +13 -36
  72. package/dist/types/components/selection/selection.d.ts +4 -4
  73. package/dist/types/components/selection_input/selection_input.d.ts +20 -74
  74. package/dist/types/components/side_panel/carousel_panel/carousel_panel.d.ts +5 -10
  75. package/dist/types/components/side_panel/chart/bar_chart/bar_chart_design_panel.d.ts +2 -10
  76. package/dist/types/components/side_panel/chart/bubble_chart/bubble_chart_config_panel.d.ts +2 -7
  77. package/dist/types/components/side_panel/chart/bubble_chart/bubble_chart_design_panel.d.ts +4 -16
  78. package/dist/types/components/side_panel/chart/building_blocks/axis_design/axis_design_editor.d.ts +7 -14
  79. package/dist/types/components/side_panel/chart/building_blocks/chart_title/chart_title.d.ts +11 -33
  80. package/dist/types/components/side_panel/chart/building_blocks/color_scale/color_scale_picker.d.ts +10 -13
  81. package/dist/types/components/side_panel/chart/building_blocks/data_series/data_series.d.ts +18 -61
  82. package/dist/types/components/side_panel/chart/building_blocks/data_source/data_source.d.ts +16 -42
  83. package/dist/types/components/side_panel/chart/building_blocks/error_section/error_section.d.ts +4 -11
  84. package/dist/types/components/side_panel/chart/building_blocks/general_design/general_design_editor.d.ts +11 -24
  85. package/dist/types/components/side_panel/chart/building_blocks/generic_side_panel/config_panel.d.ts +2 -7
  86. package/dist/types/components/side_panel/chart/building_blocks/humanize_numbers/humanize_numbers.d.ts +2 -7
  87. package/dist/types/components/side_panel/chart/building_blocks/label_range/label_range.d.ts +18 -35
  88. package/dist/types/components/side_panel/chart/building_blocks/legend/legend.d.ts +9 -17
  89. package/dist/types/components/side_panel/chart/building_blocks/pie_hole_size/pie_hole_size.d.ts +5 -10
  90. package/dist/types/components/side_panel/chart/building_blocks/range_data_source/range_data_source.d.ts +17 -41
  91. package/dist/types/components/side_panel/chart/building_blocks/series_design/series_design_editor.d.ts +9 -17
  92. package/dist/types/components/side_panel/chart/building_blocks/series_design/series_with_axis_design_editor.d.ts +8 -16
  93. package/dist/types/components/side_panel/chart/building_blocks/show_data_markers/show_data_markers.d.ts +2 -7
  94. package/dist/types/components/side_panel/chart/building_blocks/show_values/show_values.d.ts +8 -17
  95. package/dist/types/components/side_panel/chart/building_blocks/text_styler/text_styler.d.ts +10 -38
  96. package/dist/types/components/side_panel/chart/calendar_chart/calendar_chart_design_panel.d.ts +2 -7
  97. package/dist/types/components/side_panel/chart/chart_type_picker/chart_type_picker.d.ts +8 -11
  98. package/dist/types/components/side_panel/chart/chart_with_axis/design_panel.d.ts +2 -7
  99. package/dist/types/components/side_panel/chart/common.d.ts +5 -5
  100. package/dist/types/components/side_panel/chart/funnel_chart_panel/funnel_chart_design_panel.d.ts +4 -7
  101. package/dist/types/components/side_panel/chart/gauge_chart_panel/gauge_chart_config_panel.d.ts +2 -7
  102. package/dist/types/components/side_panel/chart/gauge_chart_panel/gauge_chart_design_panel.d.ts +4 -8
  103. package/dist/types/components/side_panel/chart/geo_chart_panel/geo_chart_region_select_section.d.ts +6 -12
  104. package/dist/types/components/side_panel/chart/main_chart_panel/main_chart_panel.d.ts +5 -10
  105. package/dist/types/components/side_panel/chart/pie_chart/pie_chart_design_panel.d.ts +2 -7
  106. package/dist/types/components/side_panel/chart/radar_chart/radar_chart_design_panel.d.ts +2 -7
  107. package/dist/types/components/side_panel/chart/scorecard_chart_panel/scorecard_chart_config_panel.d.ts +2 -7
  108. package/dist/types/components/side_panel/chart/scorecard_chart_panel/scorecard_chart_design_panel.d.ts +2 -7
  109. package/dist/types/components/side_panel/chart/sunburst_chart/sunburst_chart_design_panel.d.ts +2 -7
  110. package/dist/types/components/side_panel/chart/treemap_chart/treemap_category_color/treemap_category_color.d.ts +8 -14
  111. package/dist/types/components/side_panel/chart/treemap_chart/treemap_chart_design_panel.d.ts +2 -7
  112. package/dist/types/components/side_panel/chart/treemap_chart/treemap_color_scale/treemap_color_scale.d.ts +7 -14
  113. package/dist/types/components/side_panel/chart/waterfall_chart/waterfall_chart_design_panel.d.ts +2 -7
  114. package/dist/types/components/side_panel/chart/zoomable_chart/design_panel.d.ts +1 -3
  115. package/dist/types/components/side_panel/column_stats/column_stats_panel.d.ts +4 -8
  116. package/dist/types/components/side_panel/components/badge_selection/badge_selection.d.ts +6 -11
  117. package/dist/types/components/side_panel/components/checkbox/checkbox.d.ts +11 -40
  118. package/dist/types/components/side_panel/components/cog_wheel_menu/cog_wheel_menu.d.ts +4 -9
  119. package/dist/types/components/side_panel/components/collapse/collapse.d.ts +4 -10
  120. package/dist/types/components/side_panel/components/collapsible/side_panel_collapsible.d.ts +6 -16
  121. package/dist/types/components/side_panel/components/radio_selection/radio_selection.d.ts +9 -22
  122. package/dist/types/components/side_panel/components/round_color_picker/round_color_picker.d.ts +7 -23
  123. package/dist/types/components/side_panel/components/section/section.d.ts +6 -16
  124. package/dist/types/components/side_panel/conditional_formatting/cf_editor/cell_is_rule_editor.d.ts +4 -9
  125. package/dist/types/components/side_panel/conditional_formatting/cf_editor/cf_editor.d.ts +6 -13
  126. package/dist/types/components/side_panel/conditional_formatting/cf_editor/color_scale_rule_editor.d.ts +4 -9
  127. package/dist/types/components/side_panel/conditional_formatting/cf_editor/color_scale_rule_editor_threshold.d.ts +7 -12
  128. package/dist/types/components/side_panel/conditional_formatting/cf_editor/data_bar_rule_editor.d.ts +4 -9
  129. package/dist/types/components/side_panel/conditional_formatting/cf_editor/icon_set_rule_editor.d.ts +6 -10
  130. package/dist/types/components/side_panel/conditional_formatting/cf_preview/cf_preview.d.ts +6 -13
  131. package/dist/types/components/side_panel/conditional_formatting/cf_preview_list/cf_preview_list.d.ts +4 -8
  132. package/dist/types/components/side_panel/criterion_form/criterion_form.d.ts +7 -20
  133. package/dist/types/components/side_panel/criterion_form/criterion_input/criterion_input.d.ts +17 -46
  134. package/dist/types/components/side_panel/data_validation/data_validation_panel.d.ts +4 -8
  135. package/dist/types/components/side_panel/data_validation/dv_editor/dv_editor.d.ts +6 -14
  136. package/dist/types/components/side_panel/data_validation/dv_preview/dv_preview.d.ts +4 -9
  137. package/dist/types/components/side_panel/find_and_replace/find_and_replace.d.ts +4 -8
  138. package/dist/types/components/side_panel/more_formats/more_formats.d.ts +6 -14
  139. package/dist/types/components/side_panel/named_ranges_panel/named_range_preview/named_range_preview.d.ts +5 -8
  140. package/dist/types/components/side_panel/named_ranges_panel/named_ranges_panel.d.ts +4 -8
  141. package/dist/types/components/side_panel/perf_profile/perf_profile_panel.d.ts +4 -8
  142. package/dist/types/components/side_panel/pivot/pivot_custom_groups_collapsible/pivot_custom_groups_collapsible.d.ts +7 -13
  143. package/dist/types/components/side_panel/pivot/pivot_defer_update/pivot_defer_update.d.ts +10 -18
  144. package/dist/types/components/side_panel/pivot/pivot_filter/pivot_filter.d.ts +8 -15
  145. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/add_dimension_button/add_dimension_button.d.ts +5 -14
  146. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension/pivot_dimension.d.ts +7 -23
  147. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension_granularity/pivot_dimension_granularity.d.ts +9 -16
  148. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension_order/pivot_dimension_order.d.ts +7 -12
  149. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_layout_configurator.d.ts +14 -30
  150. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_measure/pivot_measure.d.ts +12 -22
  151. package/dist/types/components/side_panel/pivot/pivot_layout_configurator/pivot_sort_section/pivot_sort_section.d.ts +6 -13
  152. package/dist/types/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel.d.ts +8 -15
  153. package/dist/types/components/side_panel/pivot/pivot_side_panel/pivot_design_panel/pivot_design_panel.d.ts +5 -10
  154. package/dist/types/components/side_panel/pivot/pivot_side_panel/pivot_side_panel.d.ts +8 -18
  155. package/dist/types/components/side_panel/pivot/pivot_side_panel/pivot_spreadsheet_side_panel/pivot_spreadsheet_side_panel.d.ts +5 -11
  156. package/dist/types/components/side_panel/pivot/pivot_title_section/pivot_title_section.d.ts +6 -12
  157. package/dist/types/components/side_panel/remove_duplicates/remove_duplicates.d.ts +4 -7
  158. package/dist/types/components/side_panel/settings/settings_panel.d.ts +4 -8
  159. package/dist/types/components/side_panel/side_panel/side_panel.d.ts +12 -37
  160. package/dist/types/components/side_panel/side_panels/side_panels.d.ts +16 -6
  161. package/dist/types/components/side_panel/split_to_columns_panel/split_to_columns_panel.d.ts +4 -7
  162. package/dist/types/components/side_panel/table_panel/table_panel.d.ts +6 -10
  163. package/dist/types/components/side_panel/table_style_editor_panel/table_style_editor_panel.d.ts +6 -17
  164. package/dist/types/components/small_bottom_bar/ribbon_menu/ribbon_menu.d.ts +7 -11
  165. package/dist/types/components/small_bottom_bar/small_bottom_bar.d.ts +7 -10
  166. package/dist/types/components/spreadsheet/spreadsheet.d.ts +8 -20
  167. package/dist/types/components/spreadsheet_print/spreadsheet_print.d.ts +4 -8
  168. package/dist/types/components/standalone_grid_canvas/standalone_grid_canvas.d.ts +6 -13
  169. package/dist/types/components/tables/table_dropdown_button/table_dropdown_button.d.ts +7 -12
  170. package/dist/types/components/tables/table_resizer/table_resizer.d.ts +4 -8
  171. package/dist/types/components/tables/table_style_picker/table_style_picker.d.ts +11 -16
  172. package/dist/types/components/tables/table_style_preview/table_style_preview.d.ts +9 -28
  173. package/dist/types/components/tables/table_styles_popover/table_styles_popover.d.ts +23 -26
  174. package/dist/types/components/text_input/text_input.d.ts +1 -48
  175. package/dist/types/components/top_bar/color_editor/color_editor.d.ts +7 -14
  176. package/dist/types/components/top_bar/dropdown_action/dropdown_action.d.ts +10 -17
  177. package/dist/types/components/top_bar/font_size_editor/font_size_editor.d.ts +4 -8
  178. package/dist/types/components/top_bar/number_formats_tool/number_formats_tool.d.ts +4 -7
  179. package/dist/types/components/top_bar/top_bar.d.ts +9 -12
  180. package/dist/types/components/top_bar/zoom_editor/zoom_editor.d.ts +4 -8
  181. package/dist/types/components/validation_messages/validation_messages.d.ts +6 -15
  182. package/dist/types/helpers/formulas.d.ts +1 -0
  183. package/dist/types/index.d.ts +9 -1
  184. package/dist/types/owl3_compatibility_layer.d.ts +3 -6
  185. package/dist/types/plugins/ui_feature/table_computed_style.d.ts +1 -1
  186. package/dist/types/types/cell_popovers.d.ts +2 -2
  187. package/dist/types/types/chart/bar_chart.d.ts +1 -0
  188. package/dist/types/types/chart/chart.d.ts +1 -0
  189. package/dist/types/types/misc.d.ts +4 -2
  190. package/dist/types/types/props_of.d.ts +7 -3
  191. package/package.json +1 -1
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.4.0-alpha.10
6
- * @date 2026-06-02T12:07:58.355Z
7
- * @hash 41144f9
5
+ * @version 19.4.0-alpha.11
6
+ * @date 2026-06-03T11:42:34.595Z
7
+ * @hash 6f35bc7
8
8
  */
9
9
 
10
10
  import { App, Component, EnvPlugin, Plugin, __ODOO_COMPATIBILITY_LAYER_ADDED__, blockDom, config, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, plugin, props, providePlugins, proxy, signal, status, toRaw, types, useChildEnv, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useLayoutEffect, useListener, useScope, useSubEnv, whenReady, xml } from "@odoo/owl";
@@ -669,6 +669,18 @@ const borderStyles = [
669
669
  function isMatrix(x) {
670
670
  return Array.isArray(x) && Array.isArray(x[0]);
671
671
  }
672
+ const borderPositions = [
673
+ "all",
674
+ "hv",
675
+ "h",
676
+ "v",
677
+ "external",
678
+ "left",
679
+ "top",
680
+ "right",
681
+ "bottom",
682
+ "clear"
683
+ ];
672
684
  let DIRECTION = /* @__PURE__ */ function(DIRECTION) {
673
685
  DIRECTION["UP"] = "up";
674
686
  DIRECTION["DOWN"] = "down";
@@ -676,6 +688,11 @@ let DIRECTION = /* @__PURE__ */ function(DIRECTION) {
676
688
  DIRECTION["RIGHT"] = "right";
677
689
  return DIRECTION;
678
690
  }({});
691
+ const composerFocusTypes = [
692
+ "inactive",
693
+ "cellFocus",
694
+ "contentFocus"
695
+ ];
679
696
 
680
697
  //#endregion
681
698
  //#region src/helpers/misc.ts
@@ -2577,13 +2594,9 @@ function unregisterChartJsExtensions() {
2577
2594
  const isOdooCompatLoaded = __ODOO_COMPATIBILITY_LAYER_ADDED__ === true;
2578
2595
  var _Component = class extends Component {
2579
2596
  static template = "";
2580
- static props = {};
2581
- static defaultProps = {};
2582
- props;
2583
2597
  env;
2584
2598
  constructor(node) {
2585
2599
  super(node);
2586
- this.props = props(null, this.constructor.defaultProps);
2587
2600
  this.env = useChildEnv$1();
2588
2601
  this.__owl__ = node;
2589
2602
  }
@@ -2705,10 +2718,11 @@ var VPortal = class extends blockDom.text("").constructor {
2705
2718
  };
2706
2719
  var Portal = class extends Component {
2707
2720
  static template = xml`<t t-call-slot="default"/>`;
2708
- static props = {
2709
- selector: String,
2710
- slots: true
2711
- };
2721
+ constructor(node) {
2722
+ super(node);
2723
+ this.props = props();
2724
+ this.__owl__ = node;
2725
+ }
2712
2726
  setup() {
2713
2727
  const node = this.__owl__;
2714
2728
  const renderContent = node.renderFn;
@@ -7023,6 +7037,11 @@ function getRange(sheetXC, sheetId) {
7023
7037
  sheetId
7024
7038
  }, defaultGetSheetSize);
7025
7039
  }
7040
+ function replaceSymbolInFormula(formula, oldSymbol, newSymbol) {
7041
+ const oldCanonicalSymbol = getCanonicalSymbolName(oldSymbol);
7042
+ const newCanonicalSymbol = getCanonicalSymbolName(newSymbol);
7043
+ return tokenize(formula).map((token) => token.type === "SYMBOL" && token.value === oldCanonicalSymbol ? newCanonicalSymbol : token.value).join("");
7044
+ }
7026
7045
 
7027
7046
  //#endregion
7028
7047
  //#region src/formulas/code_builder.ts
@@ -9916,6 +9935,9 @@ function getChartBackgroundColor({ background }, getters) {
9916
9935
  //#endregion
9917
9936
  //#region src/components/figures/chart/chartJs/chartjs_show_values_plugin.ts
9918
9937
  const MINIMAL_VERTICAL_DISTANCE = 13;
9938
+ function isLineOverlayOnBarChart(options, dataset) {
9939
+ return options.type === "bar" && dataset.type === "line";
9940
+ }
9919
9941
  /** This is a chartJS plugin that will draw the values of each data next to the point/bar/pie slice */
9920
9942
  const chartShowValuesPlugin = {
9921
9943
  id: "chartShowValuesPlugin",
@@ -9966,7 +9988,7 @@ function drawTextWithBackground(text, x, y, ctx) {
9966
9988
  function drawLineOrBarOrRadarChartValues(chart, options, ctx) {
9967
9989
  const textsPositions = {};
9968
9990
  for (const dataset of chart._metasets) {
9969
- if (isTrendLineAxis(dataset.xAxisID) || dataset.hidden) continue;
9991
+ if (isTrendLineAxis(dataset.xAxisID) || dataset.hidden || isLineOverlayOnBarChart(options, dataset)) continue;
9970
9992
  const yAxisScale = chart.scales[dataset.yAxisID];
9971
9993
  for (let i = 0; i < dataset._parsed.length; i++) {
9972
9994
  const parsedValue = dataset._parsed[i];
@@ -10045,7 +10067,7 @@ function drawBubbleChartValues(chart, options, ctx) {
10045
10067
  function drawHorizontalBarChartValues(chart, options, ctx) {
10046
10068
  const textsPositions = {};
10047
10069
  for (const dataset of chart._metasets) {
10048
- if (isTrendLineAxis(dataset.xAxisID)) return;
10070
+ if (isTrendLineAxis(dataset.xAxisID) || isLineOverlayOnBarChart(options, dataset)) continue;
10049
10071
  const xZeroLine = chart.scales[dataset.xAxisID].getPixelForValue(0);
10050
10072
  for (let i = 0; i < dataset._parsed.length; i++) {
10051
10073
  const value = Number(dataset._parsed[i].x);
@@ -10690,8 +10712,38 @@ function getBarChartDatasets(definition, args) {
10690
10712
  trendDatasets.push(getTrendingLineDataSet(dataset, trendConfig, trendData));
10691
10713
  }
10692
10714
  dataSets.push(...trendDatasets);
10715
+ const totalLineDataset = getBarChartTotalLineDataset(definition, dataSetsValues);
10716
+ if (totalLineDataset) dataSets.push(totalLineDataset);
10693
10717
  return dataSets;
10694
10718
  }
10719
+ function getBarChartTotalLineDataset(definition, dataSetsValues) {
10720
+ const visibleDataSetsValues = dataSetsValues.filter((dataSet) => !dataSet.hidden);
10721
+ if (!definition.stacked || !definition.showTotalLine || visibleDataSetsValues.length < 2) return;
10722
+ const data = range(0, Math.max(...visibleDataSetsValues.map((dataSet) => dataSet.data.length))).map((index) => {
10723
+ let total;
10724
+ for (const dataSet of visibleDataSetsValues) {
10725
+ const cell = dataSet.data[index];
10726
+ if (isNumberResult(cell)) total = (total ?? 0) + cell.value;
10727
+ }
10728
+ return total ?? NaN;
10729
+ });
10730
+ const color = relativeLuminance(definition.background || "#FFFFFF") < .3 ? "#e9ecef" : "#343a40";
10731
+ return {
10732
+ type: "line",
10733
+ label: _t("Sum"),
10734
+ data,
10735
+ order: -1,
10736
+ tension: 0,
10737
+ fill: false,
10738
+ pointRadius: 3,
10739
+ borderWidth: 2,
10740
+ backgroundColor: color,
10741
+ borderColor: color,
10742
+ pointBackgroundColor: color,
10743
+ xAxisID: "x",
10744
+ yAxisID: "y"
10745
+ };
10746
+ }
10695
10747
  function getCalendarChartDatasetAndLabels(definition, args) {
10696
10748
  const { labels, dataSetsValues, background } = args;
10697
10749
  const values = dataSetsValues.map((ds) => ds.data).flat().filter(isNumberResult).map((cell) => cell.value);
@@ -11469,13 +11521,10 @@ chartJsExtensionRegistry.add("chartBackgroundPlugin", {
11469
11521
  });
11470
11522
  var ChartJsComponent = class extends Component$1 {
11471
11523
  static template = "o-spreadsheet-ChartJsComponent";
11472
- static props = {
11473
- chartId: String,
11474
- isFullScreen: {
11475
- type: Boolean,
11476
- optional: true
11477
- }
11478
- };
11524
+ props = props({
11525
+ chartId: types.string(),
11526
+ "isFullScreen?": types.boolean()
11527
+ });
11479
11528
  canvas = signal(null);
11480
11529
  chart;
11481
11530
  currentRuntime;
@@ -12171,13 +12220,10 @@ function getZoomTargetPosition(ev, zoom) {
12171
12220
  //#region src/components/figures/chart/scorecard/chart_scorecard.ts
12172
12221
  var ScorecardChart = class extends Component$1 {
12173
12222
  static template = "o-spreadsheet-ScorecardChart";
12174
- static props = {
12175
- chartId: String,
12176
- isFullScreen: {
12177
- type: Boolean,
12178
- optional: true
12179
- }
12180
- };
12223
+ props = props({
12224
+ chartId: types.string(),
12225
+ "isFullScreen?": types.boolean()
12226
+ });
12181
12227
  canvas = signal(null);
12182
12228
  get runtime() {
12183
12229
  return this.env.model.getters.getChartRuntime(this.props.chartId);
@@ -13863,13 +13909,10 @@ function hasIconLayoutChange(newBox, oldBox) {
13863
13909
  const ANIMATION_DURATION = 1e3;
13864
13910
  var GaugeChartComponent = class extends Component$1 {
13865
13911
  static template = "o-spreadsheet-GaugeChartComponent";
13866
- static props = {
13867
- chartId: String,
13868
- isFullScreen: {
13869
- type: Boolean,
13870
- optional: true
13871
- }
13872
- };
13912
+ props = props({
13913
+ chartId: types.string(),
13914
+ "isFullScreen?": types.boolean()
13915
+ });
13873
13916
  canvas = signal(null);
13874
13917
  animationStore;
13875
13918
  get runtime() {
@@ -14140,52 +14183,201 @@ function useTimeOut() {
14140
14183
  };
14141
14184
  }
14142
14185
 
14186
+ //#endregion
14187
+ //#region src/components/props_validation.ts
14188
+ /**
14189
+ * Validate that a prop is a number, but with a more specific type than just `number` (e.g. `Pixel`).
14190
+ */
14191
+ function validateNumber() {
14192
+ return types.number();
14193
+ }
14194
+ /**
14195
+ * Validate that a prop is a string, but with a more specific type than just `string` (e.g. `Color`).
14196
+ */
14197
+ function validateString() {
14198
+ return types.string();
14199
+ }
14200
+ /**
14201
+ * Validate that a prop is an object, but with a more specific type than just `object` (e.g. `ActionSpec`).
14202
+ */
14203
+ function validateObject() {
14204
+ return types.object();
14205
+ }
14206
+ /**
14207
+ * Validate that a prop is an array, but with a more specific element type than `any[]`.
14208
+ */
14209
+ function validateArrayOf() {
14210
+ return types.array();
14211
+ }
14212
+ /**
14213
+ * Validate that a prop is a record (string-keyed dictionary), but with a more
14214
+ * specific value type than `any`.
14215
+ */
14216
+ function validateRecordOf() {
14217
+ return types.record();
14218
+ }
14219
+ /**
14220
+ * Validate that a prop is a `Set`, typed with a specific element type.
14221
+ */
14222
+ function validateSetOf() {
14223
+ return types.instanceOf(Set);
14224
+ }
14225
+ function validateRect() {
14226
+ return types.object({
14227
+ x: types.number(),
14228
+ y: types.number(),
14229
+ width: types.number(),
14230
+ height: types.number()
14231
+ });
14232
+ }
14233
+ function validateBorderPosition() {
14234
+ return types.customValidator(validateString(), (position) => borderPositions.includes(position));
14235
+ }
14236
+ function validateBorderStyle() {
14237
+ return types.customValidator(validateString(), (style) => borderStyles.includes(style));
14238
+ }
14239
+ function validateDOMCoordinates() {
14240
+ return types.object({
14241
+ x: types.number(),
14242
+ y: types.number()
14243
+ });
14244
+ }
14245
+ function validateDOMDimension() {
14246
+ return types.object({
14247
+ width: types.number(),
14248
+ height: types.number()
14249
+ });
14250
+ }
14251
+ function validateSortDirection() {
14252
+ return types.customValidator(validateString(), (direction) => ["asc", "desc"].includes(direction));
14253
+ }
14254
+ function validateResizeDirection() {
14255
+ return types.customValidator(validateNumber(), (direction) => [
14256
+ -1,
14257
+ 0,
14258
+ 1
14259
+ ].includes(direction));
14260
+ }
14261
+ function validateComposerFocusType() {
14262
+ return types.customValidator(validateString(), (value) => composerFocusTypes.includes(value));
14263
+ }
14264
+ function validateDimension() {
14265
+ return types.customValidator(validateString(), (value) => ["COL", "ROW"].includes(value));
14266
+ }
14267
+ function validateContextMenuType() {
14268
+ return types.customValidator(validateString(), (value) => [
14269
+ "ROW",
14270
+ "COL",
14271
+ "CELL",
14272
+ "FILTER",
14273
+ "GROUP_HEADERS",
14274
+ "UNGROUP_HEADERS"
14275
+ ].includes(value));
14276
+ }
14277
+ /**
14278
+ * Validate that a prop is a store. Typed as the CQS-wrapped `Store<T>` to
14279
+ * match what `useStore(...)` returns at the call site.
14280
+ */
14281
+ function validateStore() {
14282
+ return types.object();
14283
+ }
14284
+ const types$1 = {
14285
+ ...types,
14286
+ ArrayOf: validateArrayOf,
14287
+ RecordOf: validateRecordOf,
14288
+ SetOf: validateSetOf,
14289
+ GenericCriterionType: validateString,
14290
+ UID: validateString,
14291
+ CriterionFilter: validateObject,
14292
+ CSSProperties: validateObject,
14293
+ ResizeDirection: validateResizeDirection,
14294
+ FigureUI: validateObject,
14295
+ Token: validateObject,
14296
+ CellPosition: validateObject,
14297
+ AutoCompleteProviderDefinition: validateObject,
14298
+ AutoCompleteProposal: validateObject,
14299
+ FunctionDescription: validateObject,
14300
+ Rect: validateRect,
14301
+ Pixel: validateNumber,
14302
+ HeaderIndex: validateNumber,
14303
+ BorderPosition: validateBorderPosition,
14304
+ BorderStyle: validateBorderStyle,
14305
+ Color: validateString,
14306
+ ActionSpec: validateObject,
14307
+ DOMCoordinates: validateDOMCoordinates,
14308
+ DOMDimension: validateDOMDimension,
14309
+ ComposerFocusType: validateComposerFocusType,
14310
+ SortDirection: validateSortDirection,
14311
+ Store: validateStore,
14312
+ Position: validateObject,
14313
+ PivotCoreDefinition: validateObject,
14314
+ PivotField: validateObject,
14315
+ PivotDimension: validateObject,
14316
+ PivotMeasure: validateObject,
14317
+ PivotCoreMeasure: validateObject,
14318
+ PivotCustomGroupedField: validateObject,
14319
+ PivotRuntimeDefinition: validateObject,
14320
+ PivotFilter: validateObject,
14321
+ DataFilterValue: validateObject,
14322
+ SpreadsheetPivotCoreDefinition: validateObject,
14323
+ ComposerSelection: validateObject,
14324
+ Action: validateObject,
14325
+ MenuItemOrSeparator: validateObject,
14326
+ Model: validateObject,
14327
+ DispatchResult: validateObject,
14328
+ Zone: validateObject,
14329
+ Range: validateObject,
14330
+ HeaderGroup: validateObject,
14331
+ GridClickModifiers: validateObject,
14332
+ ZoomedMouseEvent: validateObject,
14333
+ ConditionalFormat: validateObject,
14334
+ ColorScaleThreshold: validateObject,
14335
+ Table: validateObject,
14336
+ CoreTable: validateObject,
14337
+ TableConfig: validateObject,
14338
+ TableStyle: validateObject,
14339
+ TitleDesign: validateObject,
14340
+ ChartDefinition: validateObject,
14341
+ ChartDefinitionWithDataSource: validateObject,
14342
+ ChartWithAxisDefinition: validateObject,
14343
+ ChartStyle: validateObject,
14344
+ ChartColorScale: validateObject,
14345
+ ChartRangeDataSource: validateObject,
14346
+ DataSetStyle: validateObject,
14347
+ GeoChartDefinition: validateObject,
14348
+ FunnelChartDefinition: validateObject,
14349
+ TreeMapChartDefinition: validateObject,
14350
+ TreeMapCategoryColorOptions: validateObject,
14351
+ TreeMapColorScaleOptions: validateObject,
14352
+ NamedRange: validateObject,
14353
+ DataValidationRule: validateObject,
14354
+ InformationNotification: validateObject,
14355
+ NotificationStoreMethods: validateObject,
14356
+ SidePanelContent: validateObject,
14357
+ SidePanelComponentProps: validateObject,
14358
+ DataValidationCriterionType: validateString,
14359
+ Dimension: validateDimension,
14360
+ ContextMenuType: validateContextMenuType
14361
+ };
14362
+
14143
14363
  //#endregion
14144
14364
  //#region src/components/menu/menu.ts
14145
14365
  var Menu = class extends Component$1 {
14146
14366
  static template = "o-spreadsheet-Menu";
14147
- static props = {
14148
- menuItems: Array,
14149
- onClose: Function,
14150
- onClickMenu: {
14151
- type: Function,
14152
- optional: true
14153
- },
14154
- onMouseEnter: {
14155
- type: Function,
14156
- optional: true
14157
- },
14158
- onMouseLeave: {
14159
- type: Function,
14160
- optional: true
14161
- },
14162
- width: {
14163
- type: Number,
14164
- optional: true
14165
- },
14166
- hoveredMenuId: {
14167
- type: String,
14168
- optional: true
14169
- },
14170
- isHoveredMenuFocused: {
14171
- type: Boolean,
14172
- optional: true
14173
- },
14174
- onScroll: {
14175
- type: Function,
14176
- optional: true
14177
- },
14178
- onKeyDown: {
14179
- type: Function,
14180
- optional: true
14181
- },
14182
- disableKeyboardNavigation: {
14183
- type: Boolean,
14184
- optional: true
14185
- }
14186
- };
14187
14367
  static components = {};
14188
- static defaultProps = {};
14368
+ props = props({
14369
+ menuItems: types$1.ArrayOf(),
14370
+ onClose: types$1.function([]),
14371
+ "onClickMenu?": types$1.function([types$1.Action(), types$1.instanceOf(PointerEvent)]),
14372
+ "onMouseEnter?": types$1.function([types$1.Action(), types$1.instanceOf(PointerEvent)]),
14373
+ "onMouseLeave?": types$1.function([types$1.Action(), types$1.instanceOf(PointerEvent)]),
14374
+ "width?": types$1.number(),
14375
+ "hoveredMenuId?": types$1.string(),
14376
+ "isHoveredMenuFocused?": types$1.boolean(),
14377
+ "onScroll?": types$1.function([types$1.instanceOf(CustomEvent)]),
14378
+ "onKeyDown?": types$1.function([types$1.instanceOf(KeyboardEvent)]),
14379
+ "disableKeyboardNavigation?": types$1.boolean()
14380
+ });
14189
14381
  menuRef = signal(null);
14190
14382
  setup() {
14191
14383
  useLayoutEffect$1(() => {
@@ -14323,57 +14515,25 @@ function usePopoverContainer() {
14323
14515
  //#region src/components/popover/popover.ts
14324
14516
  var Popover = class extends Component$1 {
14325
14517
  static template = "o-spreadsheet-Popover";
14326
- static props = {
14327
- anchorRect: Object,
14328
- containerRect: {
14329
- type: Object,
14330
- optional: true
14331
- },
14332
- positioning: {
14333
- type: String,
14334
- optional: true
14335
- },
14336
- maxWidth: {
14337
- type: Number,
14338
- optional: true
14339
- },
14340
- maxHeight: {
14341
- type: Number,
14342
- optional: true
14343
- },
14344
- verticalOffset: {
14345
- type: Number,
14346
- optional: true
14347
- },
14348
- onMouseWheel: {
14349
- type: Function,
14350
- optional: true
14351
- },
14352
- onPopoverHidden: {
14353
- type: Function,
14354
- optional: true
14355
- },
14356
- onPopoverMoved: {
14357
- type: Function,
14358
- optional: true
14359
- },
14360
- zIndex: {
14361
- type: Number,
14362
- optional: true
14363
- },
14364
- class: {
14365
- type: String,
14366
- optional: true
14367
- },
14368
- slots: Object
14369
- };
14370
- static defaultProps = {
14518
+ props = props({
14519
+ anchorRect: types$1.Rect(),
14520
+ "containerRect?": types$1.object({}),
14521
+ "positioning?": types$1.or([types$1.literal("top-right"), types$1.literal("bottom-left")]),
14522
+ "maxWidth?": types$1.Pixel(),
14523
+ "maxHeight?": types$1.Pixel(),
14524
+ "verticalOffset?": types$1.number(),
14525
+ "onMouseWheel?": types$1.function([]),
14526
+ "onPopoverHidden?": types$1.function([]),
14527
+ "onPopoverMoved?": types$1.function([]),
14528
+ "zIndex?": types$1.number(),
14529
+ "class?": types$1.string()
14530
+ }, {
14371
14531
  positioning: "bottom-left",
14372
14532
  verticalOffset: 0,
14373
14533
  onMouseWheel: () => {},
14374
14534
  onPopoverMoved: () => {},
14375
14535
  onPopoverHidden: () => {}
14376
- };
14536
+ });
14377
14537
  popoverRef = signal(null);
14378
14538
  popoverContentRef = signal(null);
14379
14539
  currentPosition = void 0;
@@ -14535,60 +14695,29 @@ var TopRightPopoverContext = class extends PopoverPositionContext {
14535
14695
  const TIMEOUT_DELAY = 250;
14536
14696
  var MenuPopover = class MenuPopover extends Component$1 {
14537
14697
  static template = "o-spreadsheet-Menu-Popover";
14538
- static props = {
14539
- anchorRect: Object,
14540
- popoverPositioning: {
14541
- type: String,
14542
- optional: true
14543
- },
14544
- menuItems: Array,
14545
- depth: {
14546
- type: Number,
14547
- optional: true
14548
- },
14549
- maxHeight: {
14550
- type: Number,
14551
- optional: true
14552
- },
14553
- onClose: Function,
14554
- onMenuClicked: {
14555
- type: Function,
14556
- optional: true
14557
- },
14558
- menuId: {
14559
- type: String,
14560
- optional: true
14561
- },
14562
- onMouseOver: {
14563
- type: Function,
14564
- optional: true
14565
- },
14566
- width: {
14567
- type: Number,
14568
- optional: true
14569
- },
14570
- autoSelectFirstItem: {
14571
- type: Boolean,
14572
- optional: true
14573
- },
14574
- disableKeyboardNavigation: {
14575
- type: Boolean,
14576
- optional: true
14577
- },
14578
- onKeyboardNavigation: {
14579
- type: Function,
14580
- optional: true
14581
- }
14582
- };
14583
14698
  static components = {
14584
14699
  MenuPopover,
14585
14700
  Menu,
14586
14701
  Popover
14587
14702
  };
14588
- static defaultProps = {
14703
+ props = props({
14704
+ anchorRect: types$1.Rect(),
14705
+ "popoverPositioning?": types$1.or([types$1.literal("top-right"), types$1.literal("bottom-left")]),
14706
+ menuItems: types$1.ArrayOf(),
14707
+ "depth?": types$1.number(),
14708
+ "maxHeight?": types$1.Pixel(),
14709
+ onClose: types$1.function([]),
14710
+ "onMenuClicked?": types$1.function([types$1.instanceOf(CustomEvent)]),
14711
+ "menuId?": types$1.UID(),
14712
+ "onMouseOver?": types$1.function([]),
14713
+ "width?": types$1.number(),
14714
+ "autoSelectFirstItem?": types$1.boolean(),
14715
+ "disableKeyboardNavigation?": types$1.boolean(),
14716
+ "onKeyboardNavigation?": types$1.function([types$1.instanceOf(KeyboardEvent)])
14717
+ }, {
14589
14718
  depth: 0,
14590
14719
  popoverPositioning: "top-right"
14591
- };
14720
+ });
14592
14721
  subMenu = proxy({
14593
14722
  isOpen: false,
14594
14723
  anchorRect: null,
@@ -14828,31 +14957,16 @@ var MenuPopover = class MenuPopover extends Component$1 {
14828
14957
  //#region src/components/select/select.ts
14829
14958
  var Select = class extends Component$1 {
14830
14959
  static template = "o-spreadsheet-Select";
14831
- static props = {
14832
- onChange: Function,
14833
- values: Array,
14834
- selectedValue: {
14835
- type: String,
14836
- optional: true
14837
- },
14838
- class: {
14839
- type: String,
14840
- optional: true
14841
- },
14842
- popoverClass: {
14843
- type: String,
14844
- optional: true
14845
- },
14846
- name: {
14847
- type: String,
14848
- optional: true
14849
- },
14850
- title: {
14851
- type: String,
14852
- optional: true
14853
- }
14854
- };
14855
14960
  static components = { Popover };
14961
+ props = props({
14962
+ onChange: types$1.function([types$1.string()]),
14963
+ values: types$1.array(),
14964
+ "selectedValue?": types$1.string(),
14965
+ "class?": types$1.string(),
14966
+ "popoverClass?": types$1.string(),
14967
+ "name?": types$1.string(),
14968
+ "title?": types$1.string()
14969
+ });
14856
14970
  selectRef = signal(null);
14857
14971
  dropdownRef = signal(null);
14858
14972
  state = proxy({
@@ -14958,14 +15072,10 @@ var ChartDashboardMenu = class extends Component$1 {
14958
15072
  MenuPopover,
14959
15073
  Select
14960
15074
  };
14961
- static props = {
14962
- chartId: String,
14963
- hasFullScreenButton: {
14964
- type: Boolean,
14965
- optional: true
14966
- }
14967
- };
14968
- static defaultProps = { hasFullScreenButton: true };
15075
+ props = props({
15076
+ chartId: types$1.UID(),
15077
+ "hasFullScreenButton?": types$1.boolean()
15078
+ }, { hasFullScreenButton: true });
14969
15079
  fullScreenFigureStore;
14970
15080
  menuState = proxy({
14971
15081
  isOpen: false,
@@ -15028,25 +15138,16 @@ var ChartDashboardMenu = class extends Component$1 {
15028
15138
  //#region src/components/figures/figure_carousel/figure_carousel.ts
15029
15139
  var CarouselFigure = class extends Component$1 {
15030
15140
  static template = "o-spreadsheet-CarouselFigure";
15031
- static props = {
15032
- figureUI: Object,
15033
- editFigureStyle: {
15034
- type: Function,
15035
- optional: true
15036
- },
15037
- isFullScreen: {
15038
- type: Boolean,
15039
- optional: true
15040
- },
15041
- openContextMenu: {
15042
- type: Function,
15043
- optional: true
15044
- }
15045
- };
15046
15141
  static components = {
15047
15142
  ChartDashboardMenu,
15048
15143
  MenuPopover
15049
15144
  };
15145
+ props = props({
15146
+ figureUI: types$1.FigureUI(),
15147
+ "editFigureStyle?": types$1.function([types$1.CSSProperties()]),
15148
+ "isFullScreen?": types$1.boolean(),
15149
+ "openContextMenu?": types$1.function([types$1.Rect(), types$1.function([])])
15150
+ });
15050
15151
  carouselTabsRef = signal(null);
15051
15152
  carouselTabsDropdownRef = signal(null);
15052
15153
  menuState = proxy({
@@ -15179,22 +15280,13 @@ var CarouselFigure = class extends Component$1 {
15179
15280
  //#region src/components/figures/figure_chart/figure_chart.ts
15180
15281
  var ChartFigure = class extends Component$1 {
15181
15282
  static template = "o-spreadsheet-ChartFigure";
15182
- static props = {
15183
- figureUI: Object,
15184
- editFigureStyle: {
15185
- type: Function,
15186
- optional: true
15187
- },
15188
- isFullScreen: {
15189
- type: Boolean,
15190
- optional: true
15191
- },
15192
- openContextMenu: {
15193
- type: Function,
15194
- optional: true
15195
- }
15196
- };
15197
15283
  static components = { ChartDashboardMenu };
15284
+ props = props({
15285
+ figureUI: types$1.FigureUI(),
15286
+ "editFigureStyle?": types$1.function([types$1.CSSProperties()]),
15287
+ "isFullScreen?": types$1.boolean(),
15288
+ "openContextMenu?": types$1.function([types$1.Rect(), types$1.function([])])
15289
+ });
15198
15290
  onDoubleClick() {
15199
15291
  this.env.model.dispatch("SELECT_FIGURE", { figureId: this.props.figureUI.id });
15200
15292
  this.env.openSidePanel("ChartPanel");
@@ -15219,18 +15311,12 @@ var ChartFigure = class extends Component$1 {
15219
15311
  //#region src/components/figures/figure_image/figure_image.ts
15220
15312
  var ImageFigure = class extends Component$1 {
15221
15313
  static template = "o-spreadsheet-ImageFigure";
15222
- static props = {
15223
- figureUI: Object,
15224
- editFigureStyle: {
15225
- type: Function,
15226
- optional: true
15227
- },
15228
- openContextMenu: {
15229
- type: Function,
15230
- optional: true
15231
- }
15232
- };
15233
15314
  static components = {};
15315
+ props = props({
15316
+ figureUI: types$1.FigureUI(),
15317
+ "editFigureStyle?": types$1.function([types$1.CSSProperties()]),
15318
+ "openContextMenu?": types$1.function([types$1.Rect(), types$1.function([])])
15319
+ });
15234
15320
  get figureId() {
15235
15321
  return this.props.figureUI.id;
15236
15322
  }
@@ -15266,30 +15352,21 @@ const BORDER_WIDTH = 1;
15266
15352
  const ACTIVE_BORDER_WIDTH = 2;
15267
15353
  var FigureComponent = class extends Component$1 {
15268
15354
  static template = "o-spreadsheet-FigureComponent";
15269
- static props = {
15270
- figureUI: Object,
15271
- style: {
15272
- type: String,
15273
- optional: true
15274
- },
15275
- class: {
15276
- type: String,
15277
- optional: true
15278
- },
15279
- onMouseDown: {
15280
- type: Function,
15281
- optional: true
15282
- },
15283
- onClickAnchor: {
15284
- type: Function,
15285
- optional: true
15286
- }
15287
- };
15288
15355
  static components = { MenuPopover };
15289
- static defaultProps = {
15356
+ props = props({
15357
+ figureUI: types$1.FigureUI(),
15358
+ style: types$1.string(),
15359
+ class: types$1.string(),
15360
+ "onMouseDown?": types$1.function([types$1.instanceOf(MouseEvent)]),
15361
+ "onClickAnchor?": types$1.function([
15362
+ types$1.ResizeDirection(),
15363
+ types$1.ResizeDirection(),
15364
+ types$1.instanceOf(MouseEvent)
15365
+ ])
15366
+ }, {
15290
15367
  onMouseDown: () => {},
15291
15368
  onClickAnchor: () => {}
15292
- };
15369
+ });
15293
15370
  menuState = proxy({
15294
15371
  isOpen: false,
15295
15372
  anchorRect: null,
@@ -21763,7 +21840,7 @@ function changeCalculatedMeasuresOnMeasureChange(oldMeasure, newMeasure, measure
21763
21840
  return measures.map((measure) => {
21764
21841
  if (measure.id === oldMeasure.id) return newMeasure;
21765
21842
  else if (!measure.computedBy || oldMeasure.id === newMeasure.id) return measure;
21766
- const newFormula = tokenize(measure.computedBy.formula).map((token) => token.type === "SYMBOL" && token.value === getCanonicalSymbolName(oldMeasure.id) ? getCanonicalSymbolName(newMeasure.id) : token.value).join("");
21843
+ const newFormula = replaceSymbolInFormula(measure.computedBy.formula, oldMeasure.id, newMeasure.id);
21767
21844
  return {
21768
21845
  ...measure,
21769
21846
  computedBy: {
@@ -24404,51 +24481,22 @@ function useAutofocus(ref) {
24404
24481
 
24405
24482
  //#endregion
24406
24483
  //#region src/components/generic_input/generic_input.ts
24484
+ const genericInputPropsDefinition = {
24485
+ value: types$1.or([types$1.number(), types$1.string()]),
24486
+ onChange: types$1.function([types$1.string()]),
24487
+ "onFocused?": types$1.function([]),
24488
+ "onBlur?": types$1.function([]),
24489
+ "onInput?": types$1.function([types$1.string()]),
24490
+ "class?": types$1.string(),
24491
+ "id?": types$1.string(),
24492
+ "placeholder?": types$1.string(),
24493
+ "autofocus?": types$1.boolean(),
24494
+ "alwaysShowBorder?": types$1.boolean(),
24495
+ "selectContentOnFocus?": types$1.boolean(),
24496
+ "resetOnBlur?": types$1.boolean()
24497
+ };
24407
24498
  var GenericInput = class extends Component$1 {
24408
- static props = {
24409
- value: [Number, String],
24410
- onChange: Function,
24411
- onFocused: {
24412
- type: Function,
24413
- optional: true
24414
- },
24415
- onBlur: {
24416
- type: Function,
24417
- optional: true
24418
- },
24419
- onInput: {
24420
- type: Function,
24421
- optional: true
24422
- },
24423
- class: {
24424
- type: String,
24425
- optional: true
24426
- },
24427
- id: {
24428
- type: String,
24429
- optional: true
24430
- },
24431
- placeholder: {
24432
- type: String,
24433
- optional: true
24434
- },
24435
- autofocus: {
24436
- type: Boolean,
24437
- optional: true
24438
- },
24439
- alwaysShowBorder: {
24440
- type: Boolean,
24441
- optional: true
24442
- },
24443
- selectContentOnFocus: {
24444
- type: Boolean,
24445
- optional: true
24446
- },
24447
- resetOnBlur: {
24448
- type: Boolean,
24449
- optional: true
24450
- }
24451
- };
24499
+ props = props(genericInputPropsDefinition);
24452
24500
  genericInputRef = signal(null);
24453
24501
  lastOnChangeValue = this.props.value.toString();
24454
24502
  setup() {
@@ -24531,13 +24579,11 @@ var GenericInput = class extends Component$1 {
24531
24579
  var TextInput = class extends GenericInput {
24532
24580
  static template = "o-spreadsheet-TextInput";
24533
24581
  static components = {};
24534
- static props = {
24535
- ...GenericInput.props,
24536
- errorMessage: {
24537
- type: String,
24538
- optional: true
24539
- }
24540
- };
24582
+ props = props({
24583
+ ...genericInputPropsDefinition,
24584
+ value: types$1.string(),
24585
+ "errorMessage?": types$1.string()
24586
+ });
24541
24587
  get inputClass() {
24542
24588
  return [
24543
24589
  this.props.class,
@@ -24552,25 +24598,13 @@ var TextInput = class extends GenericInput {
24552
24598
  //#region src/components/action_button/action_button.ts
24553
24599
  var ActionButton = class extends Component$1 {
24554
24600
  static template = "o-spreadsheet-ActionButton";
24555
- static props = {
24556
- action: Object,
24557
- hasTriangleDownIcon: {
24558
- type: Boolean,
24559
- optional: true
24560
- },
24561
- selectedColor: {
24562
- type: String,
24563
- optional: true
24564
- },
24565
- class: {
24566
- type: String,
24567
- optional: true
24568
- },
24569
- onClick: {
24570
- type: Function,
24571
- optional: true
24572
- }
24573
- };
24601
+ props = props({
24602
+ action: types$1.ActionSpec(),
24603
+ "hasTriangleDownIcon?": types$1.boolean(),
24604
+ "selectedColor?": types$1.string(),
24605
+ "class?": types$1.string(),
24606
+ "onClick?": types$1.function()
24607
+ });
24574
24608
  actionButton = createAction(this.props.action);
24575
24609
  setup() {
24576
24610
  onWillUpdateProps((nextProps) => {
@@ -24622,24 +24656,14 @@ const INNER_GRADIENT_WIDTH = CONTENT_WIDTH - 2 * ITEM_BORDER_WIDTH;
24622
24656
  const INNER_GRADIENT_HEIGHT = CONTENT_WIDTH - 30 - 2 * ITEM_BORDER_WIDTH;
24623
24657
  var ColorPicker = class extends Component$1 {
24624
24658
  static template = "o-spreadsheet-ColorPicker";
24625
- static props = {
24626
- onColorPicked: Function,
24627
- currentColor: {
24628
- type: String,
24629
- optional: true
24630
- },
24631
- maxHeight: {
24632
- type: Number,
24633
- optional: true
24634
- },
24635
- anchorRect: Object,
24636
- disableNoColor: {
24637
- type: Boolean,
24638
- optional: true
24639
- }
24640
- };
24641
- static defaultProps = { currentColor: "" };
24642
24659
  static components = { Popover };
24660
+ props = props({
24661
+ onColorPicked: types$1.function([types$1.string()]),
24662
+ "currentColor?": types$1.string(),
24663
+ "maxHeight?": types$1.Pixel(),
24664
+ anchorRect: types$1.Rect(),
24665
+ "disableNoColor?": types$1.boolean()
24666
+ }, { currentColor: "" });
24643
24667
  COLORS = COLOR_PICKER_DEFAULTS;
24644
24668
  state = proxy({
24645
24669
  showGradient: false,
@@ -24783,33 +24807,18 @@ var ColorPicker = class extends Component$1 {
24783
24807
  //#region src/components/color_picker/color_picker_widget.ts
24784
24808
  var ColorPickerWidget = class extends Component$1 {
24785
24809
  static template = "o-spreadsheet-ColorPickerWidget";
24786
- static props = {
24787
- currentColor: {
24788
- type: String,
24789
- optional: true
24790
- },
24791
- toggleColorPicker: Function,
24792
- showColorPicker: Boolean,
24793
- onColorPicked: Function,
24794
- icon: String,
24795
- title: {
24796
- type: String,
24797
- optional: true
24798
- },
24799
- disabled: {
24800
- type: Boolean,
24801
- optional: true
24802
- },
24803
- dropdownMaxHeight: {
24804
- type: Number,
24805
- optional: true
24806
- },
24807
- class: {
24808
- type: String,
24809
- optional: true
24810
- }
24811
- };
24812
24810
  static components = { ColorPicker };
24811
+ props = props({
24812
+ "currentColor?": types$1.string(),
24813
+ toggleColorPicker: types$1.function([]),
24814
+ showColorPicker: types$1.boolean(),
24815
+ onColorPicked: types$1.function([types$1.string()]),
24816
+ icon: types$1.string(),
24817
+ "title?": types$1.string(),
24818
+ "disabled?": types$1.boolean(),
24819
+ "dropdownMaxHeight?": types$1.Pixel(),
24820
+ "class?": types$1.string()
24821
+ });
24813
24822
  colorPickerButtonRef = signal(null);
24814
24823
  get iconStyle() {
24815
24824
  return this.props.currentColor ? `border-color: ${this.props.currentColor}` : "border-bottom-style: hidden";
@@ -24823,29 +24832,19 @@ var ColorPickerWidget = class extends Component$1 {
24823
24832
  //#region src/components/number_editor/number_editor.ts
24824
24833
  var NumberEditor = class extends Component$1 {
24825
24834
  static template = "o-spreadsheet-NumberEditor";
24826
- static props = {
24827
- currentValue: Number,
24828
- onValueChange: Function,
24829
- onToggle: {
24830
- type: Function,
24831
- optional: true
24832
- },
24833
- onFocusInput: {
24834
- type: Function,
24835
- optional: true
24836
- },
24837
- class: String,
24838
- valueIcon: {
24839
- type: String,
24840
- optional: true
24841
- },
24842
- min: Number,
24843
- max: Number,
24844
- title: String,
24845
- valueList: Array
24846
- };
24847
- static defaultProps = { onFocusInput: () => {} };
24848
24835
  static components = { Popover };
24836
+ props = props({
24837
+ currentValue: types$1.number(),
24838
+ onValueChange: types$1.function([types$1.number()]),
24839
+ "onToggle?": types$1.function([]),
24840
+ "onFocusInput?": types$1.function([]),
24841
+ class: types$1.string(),
24842
+ "valueIcon?": types$1.string(),
24843
+ min: types$1.number(),
24844
+ max: types$1.number(),
24845
+ title: types$1.string(),
24846
+ valueList: types$1.array(types$1.number())
24847
+ }, { onFocusInput: () => {} });
24849
24848
  dropdown = proxy({ isOpen: false });
24850
24849
  inputRef = signal(null);
24851
24850
  rootEditorRef = signal(null);
@@ -24924,20 +24923,13 @@ var NumberEditor = class extends Component$1 {
24924
24923
  var FontSizeEditor = class extends Component$1 {
24925
24924
  static template = "o-spreadsheet-FontSizeEditor";
24926
24925
  static components = { NumberEditor };
24927
- static props = {
24928
- currentFontSize: Number,
24929
- onFontSizeChanged: Function,
24930
- onToggle: {
24931
- type: Function,
24932
- optional: true
24933
- },
24934
- onFocusInput: {
24935
- type: Function,
24936
- optional: true
24937
- },
24938
- class: String
24939
- };
24940
- static defaultProps = { onFocusInput: () => {} };
24926
+ props = props({
24927
+ currentFontSize: types$1.number(),
24928
+ onFontSizeChanged: types$1.function([types$1.number()]),
24929
+ "onToggle?": types$1.function([]),
24930
+ "onFocusInput?": types$1.function([]),
24931
+ class: types$1.string()
24932
+ }, { onFocusInput: () => {} });
24941
24933
  fontSizes = FONT_SIZES;
24942
24934
  };
24943
24935
 
@@ -24950,33 +24942,15 @@ var TextStyler = class extends Component$1 {
24950
24942
  ActionButton,
24951
24943
  FontSizeEditor
24952
24944
  };
24953
- static props = {
24954
- style: Object,
24955
- updateStyle: {
24956
- type: Function,
24957
- optional: true
24958
- },
24959
- defaultStyle: {
24960
- type: Object,
24961
- optional: true
24962
- },
24963
- hasVerticalAlign: {
24964
- type: Boolean,
24965
- optional: true
24966
- },
24967
- hasHorizontalAlign: {
24968
- type: Boolean,
24969
- optional: true
24970
- },
24971
- hasBackgroundColor: {
24972
- type: Boolean,
24973
- optional: true
24974
- },
24975
- class: {
24976
- type: String,
24977
- optional: true
24978
- }
24979
- };
24945
+ props = props({
24946
+ style: types$1.ChartStyle(),
24947
+ updateStyle: types$1.function([types$1.ChartStyle()]),
24948
+ "defaultStyle?": types$1.object({}),
24949
+ "hasVerticalAlign?": types$1.boolean(),
24950
+ "hasHorizontalAlign?": types$1.boolean(),
24951
+ "hasBackgroundColor?": types$1.boolean(),
24952
+ "class?": types$1.string()
24953
+ });
24980
24954
  openedEl = null;
24981
24955
  setup() {
24982
24956
  useExternalListener$1(window, "click", this.onExternalClick);
@@ -25158,7 +25132,7 @@ var TextStyler = class extends Component$1 {
25158
25132
  var CogWheelMenu = class extends Component$1 {
25159
25133
  static template = "o-spreadsheet-CogWheelMenu";
25160
25134
  static components = { MenuPopover };
25161
- static props = { items: Array };
25135
+ props = props({ items: types$1.array(types$1.ActionSpec()) });
25162
25136
  buttonRef = signal(null);
25163
25137
  menuState = proxy({
25164
25138
  isOpen: false,
@@ -25178,33 +25152,27 @@ var CogWheelMenu = class extends Component$1 {
25178
25152
  //#region src/components/side_panel/components/section/section.ts
25179
25153
  var Section = class extends Component$1 {
25180
25154
  static template = "o_spreadsheet.Section";
25181
- static props = {
25182
- class: {
25183
- type: String,
25184
- optional: true
25185
- },
25186
- title: {
25187
- type: String,
25188
- optional: true
25189
- },
25190
- slots: Object
25191
- };
25155
+ props = props({
25156
+ "class?": types$1.string(),
25157
+ "title?": types$1.string(),
25158
+ slots: types$1.object()
25159
+ });
25192
25160
  };
25193
25161
 
25194
25162
  //#endregion
25195
25163
  //#region src/components/side_panel/carousel_panel/carousel_panel.ts
25196
25164
  var CarouselPanel = class extends Component$1 {
25197
25165
  static template = "o-spreadsheet-CarouselPanel";
25198
- static props = {
25199
- onCloseSidePanel: Function,
25200
- figureId: String
25201
- };
25202
25166
  static components = {
25203
25167
  Section,
25204
25168
  TextInput,
25205
25169
  TextStyler,
25206
25170
  CogWheelMenu
25207
25171
  };
25172
+ props = props({
25173
+ onCloseSidePanel: types$1.function([]),
25174
+ figureId: types$1.UID()
25175
+ });
25208
25176
  DEFAULT_CAROUSEL_TITLE_STYLE = DEFAULT_CAROUSEL_TITLE_STYLE;
25209
25177
  dragAndDrop = useDragAndDropListItems();
25210
25178
  previewListRef = signal(null);
@@ -25411,34 +25379,15 @@ const chartDataSourceSidePanelComponentRegistry = new Registry();
25411
25379
  //#region src/components/side_panel/components/checkbox/checkbox.ts
25412
25380
  var Checkbox = class extends Component$1 {
25413
25381
  static template = "o-spreadsheet.Checkbox";
25414
- static props = {
25415
- label: {
25416
- type: String,
25417
- optional: true
25418
- },
25419
- value: {
25420
- type: Boolean,
25421
- optional: true
25422
- },
25423
- className: {
25424
- type: String,
25425
- optional: true
25426
- },
25427
- name: {
25428
- type: String,
25429
- optional: true
25430
- },
25431
- title: {
25432
- type: String,
25433
- optional: true
25434
- },
25435
- disabled: {
25436
- type: Boolean,
25437
- optional: true
25438
- },
25439
- onChange: Function
25440
- };
25441
- static defaultProps = { value: false };
25382
+ props = props({
25383
+ "label?": types$1.string(),
25384
+ "value?": types$1.boolean(),
25385
+ "className?": types$1.string(),
25386
+ "name?": types$1.string(),
25387
+ "title?": types$1.string(),
25388
+ "disabled?": types$1.boolean(),
25389
+ onChange: types$1.function([types$1.boolean()])
25390
+ }, { value: false });
25442
25391
  onChange(ev) {
25443
25392
  const value = ev.target.checked;
25444
25393
  this.props.onChange(value);
@@ -25447,11 +25396,11 @@ var Checkbox = class extends Component$1 {
25447
25396
 
25448
25397
  //#endregion
25449
25398
  //#region src/components/side_panel/chart/common.ts
25450
- const ChartSidePanelPropsObject = {
25451
- chartId: String,
25452
- definition: Object,
25453
- canUpdateChart: Function,
25454
- updateChart: Function
25399
+ const chartSidePanelPropsDefinition = {
25400
+ chartId: types$1.UID(),
25401
+ definition: types$1.object({}),
25402
+ canUpdateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult()),
25403
+ updateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult())
25455
25404
  };
25456
25405
 
25457
25406
  //#endregion
@@ -25939,63 +25888,25 @@ var SelectionInputStore = class extends SpreadsheetStore {
25939
25888
  */
25940
25889
  var SelectionInput = class extends Component$1 {
25941
25890
  static template = "o-spreadsheet-SelectionInput";
25942
- static props = {
25943
- ranges: Array,
25944
- hasSingleRange: {
25945
- type: Boolean,
25946
- optional: true
25947
- },
25948
- required: {
25949
- type: Boolean,
25950
- optional: true
25951
- },
25952
- autofocus: {
25953
- type: Boolean,
25954
- optional: true
25955
- },
25956
- isInvalid: {
25957
- type: Boolean,
25958
- optional: true
25959
- },
25960
- class: {
25961
- type: String,
25962
- optional: true
25963
- },
25964
- onSelectionChanged: {
25965
- type: Function,
25966
- optional: true
25967
- },
25968
- onSelectionConfirmed: {
25969
- type: Function,
25970
- optional: true
25971
- },
25972
- onSelectionReordered: {
25973
- type: Function,
25974
- optional: true
25975
- },
25976
- onSelectionRemoved: {
25977
- type: Function,
25978
- optional: true
25979
- },
25980
- onInputFocused: {
25981
- type: Function,
25982
- optional: true
25983
- },
25984
- colors: {
25985
- type: Array,
25986
- optional: true,
25987
- default: []
25988
- },
25989
- disabledRanges: {
25990
- type: Array,
25991
- optional: true,
25992
- default: []
25993
- },
25994
- disabledRangeTitle: {
25995
- type: String,
25996
- optional: true
25997
- }
25998
- };
25891
+ props = props({
25892
+ ranges: types$1.array(types$1.string()),
25893
+ "hasSingleRange?": types$1.boolean(),
25894
+ "required?": types$1.boolean(),
25895
+ "autofocus?": types$1.boolean(),
25896
+ "isInvalid?": types$1.boolean(),
25897
+ "class?": types$1.string(),
25898
+ "onSelectionChanged?": types$1.function([types$1.array(types$1.string())]),
25899
+ "onSelectionConfirmed?": types$1.function([]),
25900
+ "onSelectionReordered?": types$1.function([types$1.array(types$1.number())]),
25901
+ "onSelectionRemoved?": types$1.function([types$1.number()]),
25902
+ "onInputFocused?": types$1.function([]),
25903
+ "colors?": types$1.ArrayOf(),
25904
+ "disabledRanges?": types$1.array(types$1.boolean()),
25905
+ "disabledRangeTitle?": types$1.string()
25906
+ }, {
25907
+ colors: [],
25908
+ disabledRanges: []
25909
+ });
25999
25910
  state = proxy({ isMissing: false });
26000
25911
  dragAndDrop = useDragAndDropListItems();
26001
25912
  focusedInputRef = signal(null);
@@ -26159,47 +26070,20 @@ var ChartDataSeries = class extends Component$1 {
26159
26070
  SelectionInput,
26160
26071
  Section
26161
26072
  };
26162
- static props = {
26163
- ranges: Array,
26164
- dataSetStyles: {
26165
- type: Object,
26166
- optional: true
26167
- },
26168
- hasSingleRange: {
26169
- type: Boolean,
26170
- optional: true
26171
- },
26172
- onSelectionChanged: Function,
26173
- onSelectionReordered: {
26174
- type: Function,
26175
- optional: true
26176
- },
26177
- onSelectionRemoved: {
26178
- type: Function,
26179
- optional: true
26180
- },
26181
- onSelectionConfirmed: Function,
26182
- title: {
26183
- type: String,
26184
- optional: true
26185
- },
26186
- maxNumberOfUsedRanges: {
26187
- type: Number,
26188
- optional: true
26189
- },
26190
- datasetOrientation: {
26191
- type: String,
26192
- optional: true
26193
- },
26194
- canChangeDatasetOrientation: {
26195
- type: Boolean,
26196
- optional: true
26197
- },
26198
- onFlipAxis: {
26199
- type: Function,
26200
- optional: true
26201
- }
26202
- };
26073
+ props = props({
26074
+ ranges: types$1.ArrayOf(),
26075
+ "dataSetStyles?": types$1.DataSetStyle(),
26076
+ "hasSingleRange?": types$1.boolean(),
26077
+ onSelectionChanged: types$1.function([types$1.array(types$1.string())]),
26078
+ "onSelectionReordered?": types$1.function([types$1.array(types$1.number())]),
26079
+ "onSelectionRemoved?": types$1.function([types$1.number()]),
26080
+ onSelectionConfirmed: types$1.function([]),
26081
+ "maxNumberOfUsedRanges?": types$1.number(),
26082
+ "title?": types$1.string(),
26083
+ "datasetOrientation?": types$1.or([types$1.literal("rows"), types$1.literal("columns")]),
26084
+ "canChangeDatasetOrientation?": types$1.boolean(),
26085
+ "onFlipAxis?": types$1.function([types$1.string()])
26086
+ });
26203
26087
  get ranges() {
26204
26088
  return this.props.ranges.map((r) => r.dataRange);
26205
26089
  }
@@ -26227,28 +26111,18 @@ var ChartLabelRange = class extends Component$1 {
26227
26111
  Checkbox,
26228
26112
  Section
26229
26113
  };
26230
- static props = {
26231
- title: {
26232
- type: String,
26233
- optional: true
26234
- },
26235
- range: String,
26236
- class: {
26237
- type: String,
26238
- optional: true
26239
- },
26240
- isInvalid: Boolean,
26241
- onSelectionChanged: Function,
26242
- onSelectionConfirmed: Function,
26243
- options: {
26244
- type: Array,
26245
- optional: true
26246
- }
26247
- };
26248
- static defaultProps = {
26114
+ props = props({
26115
+ "title?": types$1.string(),
26116
+ range: types$1.string(),
26117
+ "class?": types$1.string(),
26118
+ isInvalid: types$1.boolean(),
26119
+ onSelectionChanged: types$1.function([types$1.string()]),
26120
+ onSelectionConfirmed: types$1.function([]),
26121
+ "options?": types$1.ArrayOf()
26122
+ }, {
26249
26123
  title: _t("Categories / Labels"),
26250
26124
  options: []
26251
- };
26125
+ });
26252
26126
  get sectionClass() {
26253
26127
  return "o-data-labels" + (this.props.class ? ` ${this.props.class}` : "");
26254
26128
  }
@@ -26262,28 +26136,16 @@ var ChartDataSourceComponent = class extends Component$1 {
26262
26136
  ChartDataSeries,
26263
26137
  ChartLabelRange
26264
26138
  };
26265
- static props = {
26266
- chartId: String,
26267
- definition: Object,
26268
- updateChart: Function,
26269
- canUpdateChart: Function,
26270
- onErrorMessagesChanged: {
26271
- type: Function,
26272
- optional: true
26273
- },
26274
- dataSeriesTitle: {
26275
- type: String,
26276
- optional: true
26277
- },
26278
- labelRangeTitle: {
26279
- type: String,
26280
- optional: true
26281
- },
26282
- getLabelRangeOptions: {
26283
- type: Function,
26284
- optional: true
26285
- }
26286
- };
26139
+ props = props({
26140
+ chartId: types$1.UID(),
26141
+ definition: types$1.ChartDefinitionWithDataSource(),
26142
+ updateChart: types$1.function([]),
26143
+ canUpdateChart: types$1.function([]),
26144
+ "onErrorMessagesChanged?": types$1.function([types$1.array(types$1.string())]),
26145
+ "dataSeriesTitle?": types$1.string(),
26146
+ "labelRangeTitle?": types$1.string(),
26147
+ "getLabelRangeOptions?": types$1.function([])
26148
+ });
26287
26149
  get DataSourceComponent() {
26288
26150
  const dataSourceType = this.props.definition.dataSource.type;
26289
26151
  return chartDataSourceSidePanelComponentRegistry.get(dataSourceType);
@@ -26294,14 +26156,15 @@ var ChartDataSourceComponent = class extends Component$1 {
26294
26156
  //#region src/components/validation_messages/validation_messages.ts
26295
26157
  var ValidationMessages = class extends Component$1 {
26296
26158
  static template = "o-spreadsheet-ValidationMessages";
26297
- static props = {
26298
- messages: Array,
26299
- msgType: String,
26300
- singleBox: {
26301
- type: Boolean,
26302
- optional: true
26303
- }
26304
- };
26159
+ props = props({
26160
+ messages: types$1.array(types$1.string()),
26161
+ msgType: types$1.or([
26162
+ types$1.literal("warning"),
26163
+ types$1.literal("error"),
26164
+ types$1.literal("info")
26165
+ ]),
26166
+ "singleBox?": types$1.boolean()
26167
+ });
26305
26168
  get divClasses() {
26306
26169
  if (this.props.msgType === "warning") return "o-validation-warning";
26307
26170
  if (this.props.msgType === "info") return "o-validation-info";
@@ -26320,10 +26183,7 @@ var ChartErrorSection = class extends Component$1 {
26320
26183
  Section,
26321
26184
  ValidationMessages
26322
26185
  };
26323
- static props = { messages: {
26324
- type: Array,
26325
- element: String
26326
- } };
26186
+ props = props({ messages: types$1.array(types$1.string()) });
26327
26187
  };
26328
26188
 
26329
26189
  //#endregion
@@ -26336,7 +26196,7 @@ var GenericChartConfigPanel = class extends Component$1 {
26336
26196
  Checkbox,
26337
26197
  ChartErrorSection
26338
26198
  };
26339
- static props = ChartSidePanelPropsObject;
26199
+ props = props(chartSidePanelPropsDefinition);
26340
26200
  chartTerms = ChartTerms;
26341
26201
  state = proxy({ errorMessages: [] });
26342
26202
  onErrorMessagesChanged(errorMessages) {
@@ -26383,10 +26243,7 @@ var BarConfigPanel = class extends GenericChartConfigPanel {
26383
26243
  //#region src/components/side_panel/components/collapse/collapse.ts
26384
26244
  var Collapse = class extends Component$1 {
26385
26245
  static template = "o-spreadsheet-Collapse";
26386
- static props = {
26387
- isCollapsed: Boolean,
26388
- slots: Object
26389
- };
26246
+ props = props({ isCollapsed: types$1.boolean() });
26390
26247
  contentRef = signal(null);
26391
26248
  setup() {
26392
26249
  onMounted(() => {
@@ -26418,23 +26275,13 @@ var Collapse = class extends Component$1 {
26418
26275
  //#region src/components/side_panel/components/collapsible/side_panel_collapsible.ts
26419
26276
  var SidePanelCollapsible = class extends Component$1 {
26420
26277
  static template = "o-spreadsheet-SidePanelCollapsible";
26421
- static props = {
26422
- slots: Object,
26423
- title: {
26424
- type: String,
26425
- optional: true
26426
- },
26427
- isInitiallyCollapsed: {
26428
- type: Boolean,
26429
- optional: true
26430
- },
26431
- class: {
26432
- type: String,
26433
- optional: true
26434
- }
26435
- };
26436
26278
  static components = { Collapse };
26437
- state = proxy({ isCollapsed: this.props.isInitiallyCollapsed });
26279
+ props = props({
26280
+ "title?": types$1.string(),
26281
+ "isInitiallyCollapsed?": types$1.boolean(),
26282
+ "class?": types$1.string()
26283
+ });
26284
+ state = proxy({ isCollapsed: !!this.props.isInitiallyCollapsed });
26438
26285
  toggle() {
26439
26286
  this.state.isCollapsed = !this.state.isCollapsed;
26440
26287
  }
@@ -26445,17 +26292,11 @@ var SidePanelCollapsible = class extends Component$1 {
26445
26292
  var NumberInput = class extends GenericInput {
26446
26293
  static template = "o-spreadsheet-NumberInput";
26447
26294
  static components = {};
26448
- static props = {
26449
- ...GenericInput.props,
26450
- min: {
26451
- type: Number,
26452
- optional: true
26453
- },
26454
- max: {
26455
- type: Number,
26456
- optional: true
26457
- }
26458
- };
26295
+ props = props({
26296
+ ...genericInputPropsDefinition,
26297
+ "min?": types$1.number(),
26298
+ "max?": types$1.number()
26299
+ });
26459
26300
  debouncedOnChange = debounce(this.props.onChange.bind(this), 100, true);
26460
26301
  save() {
26461
26302
  const currentValue = (this.genericInputRef()?.value || "").trim();
@@ -26476,11 +26317,11 @@ var DateInput = class extends NumberInput {
26476
26317
  //#region src/components/side_panel/components/badge_selection/badge_selection.ts
26477
26318
  var BadgeSelection = class extends Component$1 {
26478
26319
  static template = "o-spreadsheet.BadgeSelection";
26479
- static props = {
26480
- choices: Array,
26481
- onChange: Function,
26482
- selectedValue: String
26483
- };
26320
+ props = props({
26321
+ choices: types$1.ArrayOf(),
26322
+ onChange: types$1.function([types$1.string()]),
26323
+ selectedValue: types$1.string()
26324
+ });
26484
26325
  };
26485
26326
 
26486
26327
  //#endregion
@@ -26492,28 +26333,18 @@ var ChartTitle = class extends Component$1 {
26492
26333
  TextStyler,
26493
26334
  TextInput
26494
26335
  };
26495
- static props = {
26496
- title: {
26497
- type: String,
26498
- optional: true
26499
- },
26500
- placeholder: {
26501
- type: String,
26502
- optional: true
26503
- },
26504
- updateTitle: Function,
26505
- name: { type: String },
26506
- style: Object,
26507
- defaultStyle: {
26508
- type: Object,
26509
- optional: true
26510
- },
26511
- updateStyle: Function
26512
- };
26513
- static defaultProps = {
26336
+ props = props({
26337
+ "title?": types$1.string(),
26338
+ "placeholder?": types$1.string(),
26339
+ updateTitle: types$1.function([types$1.string()]),
26340
+ "name?": types$1.string(),
26341
+ style: types$1.TitleDesign(),
26342
+ "defaultStyle?": types$1.object({}),
26343
+ updateStyle: types$1.function([types$1.object({})])
26344
+ }, {
26514
26345
  title: "",
26515
26346
  placeholder: ""
26516
- };
26347
+ });
26517
26348
  updateTitle(value) {
26518
26349
  this.props.updateTitle(value);
26519
26350
  }
@@ -26531,12 +26362,12 @@ var AxisDesignEditor = class extends Component$1 {
26531
26362
  NumberInput,
26532
26363
  DateInput
26533
26364
  };
26534
- static props = {
26535
- chartId: String,
26536
- definition: Object,
26537
- updateChart: Function,
26538
- axesList: Array
26539
- };
26365
+ props = props({
26366
+ chartId: types$1.UID(),
26367
+ definition: types$1.ChartWithAxisDefinition(),
26368
+ updateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult()),
26369
+ axesList: types$1.ArrayOf()
26370
+ });
26540
26371
  state = proxy({ currentAxis: "x" });
26541
26372
  defaultFontSize = 12;
26542
26373
  get axisTitleStyle() {
@@ -26706,17 +26537,13 @@ var AxisDesignEditor = class extends Component$1 {
26706
26537
  //#region src/components/side_panel/components/radio_selection/radio_selection.ts
26707
26538
  var RadioSelection = class extends Component$1 {
26708
26539
  static template = "o-spreadsheet.RadioSelection";
26709
- static props = {
26710
- choices: Array,
26711
- onChange: Function,
26712
- selectedValue: { optional: false },
26713
- name: String,
26714
- direction: {
26715
- type: String,
26716
- optional: true
26717
- }
26718
- };
26719
- static defaultProps = { direction: "horizontal" };
26540
+ props = props({
26541
+ choices: types$1.ArrayOf(),
26542
+ onChange: types$1.function([types$1.any()]),
26543
+ selectedValue: types$1.string(),
26544
+ name: types$1.string(),
26545
+ "direction?": types$1.or([types$1.literal("horizontal"), types$1.literal("vertical")])
26546
+ }, { direction: "horizontal" });
26720
26547
  };
26721
26548
 
26722
26549
  //#endregion
@@ -26727,21 +26554,12 @@ var RoundColorPicker = class extends Component$1 {
26727
26554
  Section,
26728
26555
  ColorPicker
26729
26556
  };
26730
- static props = {
26731
- currentColor: {
26732
- type: String,
26733
- optional: true
26734
- },
26735
- title: {
26736
- type: String,
26737
- optional: true
26738
- },
26739
- onColorPicked: Function,
26740
- disableNoColor: {
26741
- type: Boolean,
26742
- optional: true
26743
- }
26744
- };
26557
+ props = props({
26558
+ "currentColor?": types$1.string(),
26559
+ "title?": types$1.string(),
26560
+ onColorPicked: types$1.function([types$1.string()]),
26561
+ "disableNoColor?": types$1.boolean()
26562
+ });
26745
26563
  colorPickerButtonRef = signal(null);
26746
26564
  state;
26747
26565
  setup() {
@@ -26777,18 +26595,13 @@ var GeneralDesignEditor = class extends Component$1 {
26777
26595
  SidePanelCollapsible,
26778
26596
  RadioSelection
26779
26597
  };
26780
- static props = {
26781
- ...ChartSidePanelPropsObject,
26782
- defaultChartTitleFontSize: {
26783
- type: Number,
26784
- optional: true
26785
- },
26786
- slots: {
26787
- type: Object,
26788
- optional: true
26789
- }
26790
- };
26791
- static defaultProps = { defaultChartTitleFontSize: 16 };
26598
+ props = props({
26599
+ chartId: types$1.UID(),
26600
+ definition: types$1.ChartDefinition(),
26601
+ canUpdateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult()),
26602
+ updateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult()),
26603
+ "defaultChartTitleFontSize?": types$1.number()
26604
+ }, { defaultChartTitleFontSize: 16 });
26792
26605
  state;
26793
26606
  setup() {
26794
26607
  this.state = proxy({ activeTool: "" });
@@ -26825,7 +26638,7 @@ var GeneralDesignEditor = class extends Component$1 {
26825
26638
  var ChartHumanizeNumbers = class extends Component$1 {
26826
26639
  static template = "o-spreadsheet-ChartHumanizeNumbers";
26827
26640
  static components = { Checkbox };
26828
- static props = ChartSidePanelPropsObject;
26641
+ props = props(chartSidePanelPropsDefinition);
26829
26642
  get title() {
26830
26643
  const locale = this.env.model.getters.getLocale();
26831
26644
  return _t("E.g. 1234567 -> %(value)s", { value: formatValue(1234567, {
@@ -26843,14 +26656,13 @@ var ChartLegend = class extends Component$1 {
26843
26656
  Section,
26844
26657
  Select
26845
26658
  };
26846
- static props = {
26847
- ...ChartSidePanelPropsObject,
26848
- isDisabled: {
26849
- type: Boolean,
26850
- optional: true
26851
- }
26852
- };
26853
- static defaultProps = { isDisabled: false };
26659
+ props = props({
26660
+ chartId: types$1.string(),
26661
+ definition: types$1.ChartDefinitionWithDataSource(),
26662
+ canUpdateChart: types$1.function(),
26663
+ updateChart: types$1.function(),
26664
+ "isDisabled?": types$1.boolean()
26665
+ }, { isDisabled: false });
26854
26666
  updateLegendPosition(value) {
26855
26667
  this.props.updateChart(this.props.chartId, { legendPosition: value });
26856
26668
  }
@@ -26890,13 +26702,12 @@ var SeriesDesignEditor = class extends Component$1 {
26890
26702
  RoundColorPicker,
26891
26703
  Select
26892
26704
  };
26893
- static props = {
26894
- ...ChartSidePanelPropsObject,
26895
- slots: {
26896
- type: Object,
26897
- optional: true
26898
- }
26899
- };
26705
+ props = props({
26706
+ chartId: types$1.UID(),
26707
+ definition: types$1.ChartDefinitionWithDataSource(),
26708
+ canUpdateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult()),
26709
+ updateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult())
26710
+ });
26900
26711
  state = proxy({ dataSetId: this.getDataSeries()[0]?.dataSetId || "" });
26901
26712
  getRuntime() {
26902
26713
  const runtime = this.env.model.getters.getChartRuntime(this.props.chartId);
@@ -26956,13 +26767,12 @@ var SeriesWithAxisDesignEditor = class extends Component$1 {
26956
26767
  NumberInput,
26957
26768
  Select
26958
26769
  };
26959
- static props = {
26960
- ...ChartSidePanelPropsObject,
26961
- slots: {
26962
- type: Object,
26963
- optional: true
26964
- }
26965
- };
26770
+ props = props({
26771
+ chartId: types$1.UID(),
26772
+ definition: types$1.ChartDefinitionWithDataSource(),
26773
+ canUpdateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult()),
26774
+ updateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult())
26775
+ });
26966
26776
  axisChoices = CHART_AXIS_CHOICES;
26967
26777
  updateDataSeriesAxis(dataSetId, axis) {
26968
26778
  const dataSetStyles = { ...this.props.definition.dataSetStyles };
@@ -27097,13 +26907,13 @@ var SeriesWithAxisDesignEditor = class extends Component$1 {
27097
26907
  var ChartShowValues = class extends Component$1 {
27098
26908
  static template = "o-spreadsheet-ChartShowValues";
27099
26909
  static components = { Checkbox };
27100
- static props = {
27101
- ...ChartSidePanelPropsObject,
27102
- defaultValue: {
27103
- type: Boolean,
27104
- optional: true
27105
- }
27106
- };
26910
+ props = props({
26911
+ chartId: types$1.UID(),
26912
+ definition: types$1.ChartDefinitionWithDataSource(),
26913
+ canUpdateChart: types$1.function([]),
26914
+ updateChart: types$1.function([]),
26915
+ "defaultValue?": types$1.boolean()
26916
+ });
27107
26917
  };
27108
26918
 
27109
26919
  //#endregion
@@ -27120,7 +26930,7 @@ var ChartWithAxisDesignPanel = class extends Component$1 {
27120
26930
  ChartShowValues,
27121
26931
  ChartHumanizeNumbers
27122
26932
  };
27123
- static props = ChartSidePanelPropsObject;
26933
+ props = props(chartSidePanelPropsDefinition);
27124
26934
  get axesList() {
27125
26935
  const { useLeftAxis, useRightAxis } = getDefinedAxis(this.props.definition);
27126
26936
  const axes = [{
@@ -27170,7 +26980,7 @@ var BubbleChartConfigPanel = class extends Component$1 {
27170
26980
  ChartLabelRange,
27171
26981
  ChartErrorSection
27172
26982
  };
27173
- static props = ChartSidePanelPropsObject;
26983
+ props = props(chartSidePanelPropsDefinition);
27174
26984
  state = proxy({
27175
26985
  datasetDispatchResult: void 0,
27176
26986
  labelsDispatchResult: void 0,
@@ -27306,7 +27116,7 @@ var BubbleChartDesignPanel = class extends Component$1 {
27306
27116
  RoundColorPicker,
27307
27117
  Checkbox
27308
27118
  };
27309
- static props = ChartSidePanelPropsObject;
27119
+ props = props(chartSidePanelPropsDefinition);
27310
27120
  get axesList() {
27311
27121
  return [{
27312
27122
  id: "x",
@@ -28299,10 +28109,7 @@ function getBarChartLegend(definition, args) {
28299
28109
  toggleDataVisibility: toggleLineBarDataVisibility
28300
28110
  }),
28301
28111
  ...getLegendDisplayOptions(definition),
28302
- ...getCustomLegendLabels(chartFontColor(definition.background), {
28303
- pointStyle: "rect",
28304
- lineWidth: 3
28305
- })
28112
+ ...getCustomLegendLabels(chartFontColor(definition.background), { lineWidth: 3 })
28306
28113
  };
28307
28114
  }
28308
28115
  function getPyramidChartLegend(definition, args) {
@@ -29110,6 +28917,7 @@ const BarChart = {
29110
28917
  "stacked",
29111
28918
  "aggregated",
29112
28919
  "showValues",
28920
+ "showTotalLine",
29113
28921
  "zoomable"
29114
28922
  ],
29115
28923
  fromStrDefinition: (definition) => ({
@@ -29135,6 +28943,7 @@ const BarChart = {
29135
28943
  type: "bar",
29136
28944
  axesDesign: context.axesDesign,
29137
28945
  showValues: context.showValues,
28946
+ showTotalLine: context.showTotalLine,
29138
28947
  horizontal: context.horizontal,
29139
28948
  zoomable: context.zoomable,
29140
28949
  humanize: context.humanize
@@ -29736,29 +29545,17 @@ var ChartRangeDataSourceComponent = class extends Component$1 {
29736
29545
  ChartDataSeries,
29737
29546
  ChartLabelRange
29738
29547
  };
29739
- static props = {
29740
- chartId: String,
29741
- definition: Object,
29742
- dataSource: Object,
29743
- updateChart: Function,
29744
- canUpdateChart: Function,
29745
- onErrorMessagesChanged: {
29746
- type: Function,
29747
- optional: true
29748
- },
29749
- dataSeriesTitle: {
29750
- type: String,
29751
- optional: true
29752
- },
29753
- labelRangeTitle: {
29754
- type: String,
29755
- optional: true
29756
- },
29757
- getLabelRangeOptions: {
29758
- type: Function,
29759
- optional: true
29760
- }
29761
- };
29548
+ props = props({
29549
+ chartId: types$1.UID(),
29550
+ definition: types$1.ChartDefinitionWithDataSource(),
29551
+ dataSource: types$1.ChartRangeDataSource(),
29552
+ updateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult()),
29553
+ canUpdateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult()),
29554
+ "onErrorMessagesChanged?": types$1.function([types$1.array(types$1.string())]),
29555
+ "dataSeriesTitle?": types$1.string(),
29556
+ "labelRangeTitle?": types$1.string(),
29557
+ "getLabelRangeOptions?": types$1.function([])
29558
+ });
29762
29559
  state = proxy({
29763
29560
  datasetDispatchResult: void 0,
29764
29561
  labelsDispatchResult: void 0
@@ -30608,10 +30405,10 @@ var ColorScalePicker = class extends Component$1 {
30608
30405
  RoundColorPicker,
30609
30406
  Popover
30610
30407
  };
30611
- static props = {
30612
- definition: Object,
30613
- onUpdateColorScale: Function
30614
- };
30408
+ props = props({
30409
+ definition: types$1.object({ "colorScale?": types$1.ChartColorScale() }),
30410
+ onUpdateColorScale: types$1.function([types$1.ChartColorScale()])
30411
+ });
30615
30412
  colorScales = COLORSCALES.map((colorScale) => ({
30616
30413
  value: colorScale,
30617
30414
  label: ChartTerms.ColorScales[colorScale],
@@ -30702,7 +30499,7 @@ var CalendarChartDesignPanel = class extends Component$1 {
30702
30499
  RoundColorPicker,
30703
30500
  Select
30704
30501
  };
30705
- static props = ChartSidePanelPropsObject;
30502
+ props = props(chartSidePanelPropsDefinition);
30706
30503
  get axesList() {
30707
30504
  return [{
30708
30505
  id: "x",
@@ -30747,7 +30544,7 @@ var CalendarChartDesignPanel = class extends Component$1 {
30747
30544
  var ChartShowDataMarkers = class extends Component$1 {
30748
30545
  static template = "o-spreadsheet-ChartShowDataMarkers";
30749
30546
  static components = { Checkbox };
30750
- static props = ChartSidePanelPropsObject;
30547
+ props = props(chartSidePanelPropsDefinition);
30751
30548
  };
30752
30549
 
30753
30550
  //#endregion
@@ -30810,12 +30607,10 @@ var FunnelChartDesignPanel = class extends Component$1 {
30810
30607
  Section,
30811
30608
  ChartHumanizeNumbers
30812
30609
  };
30813
- static props = {
30814
- chartId: String,
30815
- definition: Object,
30816
- updateChart: Function,
30817
- canUpdateChart: Function
30818
- };
30610
+ props = props({
30611
+ ...chartSidePanelPropsDefinition,
30612
+ definition: types$1.FunnelChartDefinition()
30613
+ });
30819
30614
  getFunnelColorItems() {
30820
30615
  const labels = this.env.model.getters.getChartRuntime(this.props.chartId).chartJsConfig.data.labels || [];
30821
30616
  const colors = getFunnelLabelColors(labels, this.props.definition.funnelColors);
@@ -30838,7 +30633,7 @@ var GaugeChartConfigPanel = class extends Component$1 {
30838
30633
  ChartErrorSection,
30839
30634
  ChartDataSeries
30840
30635
  };
30841
- static props = ChartSidePanelPropsObject;
30636
+ props = props(chartSidePanelPropsDefinition);
30842
30637
  state = proxy({ dataRangeDispatchResult: void 0 });
30843
30638
  dataRange = this.props.definition.dataRange;
30844
30639
  get configurationErrorMessages() {
@@ -30863,15 +30658,12 @@ var GaugeChartConfigPanel = class extends Component$1 {
30863
30658
  //#region src/components/composer/autocomplete_dropdown/autocomplete_dropdown.ts
30864
30659
  var TextValueProvider = class extends Component$1 {
30865
30660
  static template = "o-spreadsheet-TextValueProvider";
30866
- static props = {
30867
- proposals: Array,
30868
- selectedIndex: {
30869
- type: Number,
30870
- optional: true
30871
- },
30872
- onValueSelected: Function,
30873
- onValueHovered: Function
30874
- };
30661
+ props = props({
30662
+ proposals: types$1.array(types$1.AutoCompleteProposal()),
30663
+ "selectedIndex?": types$1.number(),
30664
+ onValueSelected: types$1.function([types$1.AutoCompleteProposal()]),
30665
+ onValueHovered: types$1.function([types$1.string()])
30666
+ });
30875
30667
  autoCompleteListRef = signal(null);
30876
30668
  setup() {
30877
30669
  useEffect(() => {
@@ -31088,15 +30880,12 @@ function isEmptyParagraph(node) {
31088
30880
  //#region src/components/composer/formula_assistant/formula_assistant.ts
31089
30881
  var FunctionDescriptionProvider = class extends Component$1 {
31090
30882
  static template = "o-spreadsheet-FunctionDescriptionProvider";
31091
- static props = {
31092
- functionDescription: Object,
31093
- argsToFocus: Array,
31094
- repeatingArgGroupIndex: {
31095
- type: Number,
31096
- optional: true
31097
- }
31098
- };
31099
30883
  static components = { Collapse };
30884
+ props = props({
30885
+ functionDescription: types$1.FunctionDescription(),
30886
+ argsToFocus: types$1.array(types$1.number()),
30887
+ "repeatingArgGroupIndex?": types$1.number()
30888
+ });
31100
30889
  state = proxy({ isCollapsed: true });
31101
30890
  toggle() {
31102
30891
  this.state.isCollapsed = !this.state.isCollapsed;
@@ -31160,11 +30949,11 @@ var FunctionDescriptionProvider = class extends Component$1 {
31160
30949
  const BUBBLE_ARROW_SIZE = 7;
31161
30950
  var SpeechBubble = class extends Component$1 {
31162
30951
  static template = "o-spreadsheet-SpeechBubble";
31163
- static props = {
31164
- content: String,
31165
- anchorRect: Object
31166
- };
31167
30952
  static components = {};
30953
+ props = props({
30954
+ content: types$1.string(),
30955
+ anchorRect: types$1.Rect()
30956
+ });
31168
30957
  spreadsheetRect = useSpreadsheetRect();
31169
30958
  bubbleRef = signal(null);
31170
30959
  setup() {
@@ -31191,62 +30980,30 @@ const highlightParenthesisClass = "highlight-parenthesis-flag";
31191
30980
  const highlightClass = "highlight-flag";
31192
30981
  var Composer = class extends Component$1 {
31193
30982
  static template = "o-spreadsheet-Composer";
31194
- static props = {
31195
- focus: { validate: (value) => [
31196
- "inactive",
31197
- "cellFocus",
31198
- "contentFocus"
31199
- ].includes(value) },
31200
- inputStyle: {
31201
- type: String,
31202
- optional: true
31203
- },
31204
- rect: {
31205
- type: Object,
31206
- optional: true
31207
- },
31208
- delimitation: {
31209
- type: Object,
31210
- optional: true
31211
- },
31212
- onComposerCellFocused: {
31213
- type: Function,
31214
- optional: true
31215
- },
31216
- onComposerContentFocused: Function,
31217
- isDefaultFocus: {
31218
- type: Boolean,
31219
- optional: true
31220
- },
31221
- onInputContextMenu: {
31222
- type: Function,
31223
- optional: true
31224
- },
31225
- composerStore: Object,
31226
- placeholder: {
31227
- type: String,
31228
- optional: true
31229
- },
31230
- inputMode: {
31231
- type: String,
31232
- optional: true
31233
- },
31234
- showAssistant: {
31235
- type: Boolean,
31236
- optional: true
31237
- }
31238
- };
31239
30983
  static components = {
31240
30984
  TextValueProvider,
31241
30985
  FunctionDescriptionProvider,
31242
30986
  SpeechBubble
31243
30987
  };
31244
- static defaultProps = {
30988
+ props = props({
30989
+ focus: types$1.ComposerFocusType(),
30990
+ "inputStyle?": types$1.string(),
30991
+ "rect?": types$1.Rect(),
30992
+ "delimitation?": types$1.DOMDimension(),
30993
+ "onComposerCellFocused?": types$1.function([types$1.string()]),
30994
+ onComposerContentFocused: types$1.function([types$1.ComposerSelection()]),
30995
+ "isDefaultFocus?": types$1.boolean(),
30996
+ "onInputContextMenu?": types$1.function([types$1.instanceOf(MouseEvent)]),
30997
+ composerStore: types$1.Store(),
30998
+ "placeholder?": types$1.string(),
30999
+ "inputMode?": types$1.string(),
31000
+ "showAssistant?": types$1.boolean()
31001
+ }, {
31245
31002
  inputStyle: "",
31246
31003
  isDefaultFocus: false,
31247
31004
  inputMode: "text",
31248
31005
  showAssistant: true
31249
- };
31006
+ });
31250
31007
  DOMFocusableElementStore;
31251
31008
  composerRef = signal(null);
31252
31009
  containerRef = signal(null);
@@ -32811,54 +32568,23 @@ var StandaloneComposerStore = class extends AbstractComposerStore {
32811
32568
  //#region src/components/composer/standalone_composer/standalone_composer.ts
32812
32569
  var StandaloneComposer = class extends Component$1 {
32813
32570
  static template = "o-spreadsheet-StandaloneComposer";
32814
- static props = {
32815
- composerContent: {
32816
- type: String,
32817
- optional: true
32818
- },
32819
- defaultRangeSheetId: {
32820
- type: String,
32821
- optional: true
32822
- },
32823
- defaultStatic: {
32824
- type: Boolean,
32825
- optional: true
32826
- },
32827
- onConfirm: Function,
32828
- contextualAutocomplete: {
32829
- type: Object,
32830
- optional: true
32831
- },
32832
- placeholder: {
32833
- type: String,
32834
- optional: true
32835
- },
32836
- title: {
32837
- type: String,
32838
- optional: true
32839
- },
32840
- class: {
32841
- type: String,
32842
- optional: true
32843
- },
32844
- invalid: {
32845
- type: Boolean,
32846
- optional: true
32847
- },
32848
- autofocus: {
32849
- type: Boolean,
32850
- optional: true
32851
- },
32852
- getContextualColoredSymbolToken: {
32853
- type: Function,
32854
- optional: true
32855
- }
32856
- };
32857
32571
  static components = { Composer };
32858
- static defaultProps = {
32572
+ props = props({
32573
+ onConfirm: types$1.function([types$1.string()]),
32574
+ "composerContent?": types$1.string(),
32575
+ defaultRangeSheetId: types$1.UID(),
32576
+ "defaultStatic?": types$1.boolean(),
32577
+ "contextualAutocomplete?": types$1.AutoCompleteProviderDefinition(),
32578
+ "placeholder?": types$1.string(),
32579
+ "title?": types$1.string(),
32580
+ "class?": types$1.string(),
32581
+ "invalid?": types$1.boolean(),
32582
+ "autofocus?": types$1.boolean(),
32583
+ "getContextualColoredSymbolToken?": types$1.function([types$1.Token()], types$1.Color())
32584
+ }, {
32859
32585
  composerContent: "",
32860
32586
  defaultStatic: false
32861
- };
32587
+ });
32862
32588
  composerFocusStore;
32863
32589
  standaloneComposerStore;
32864
32590
  composerInterface;
@@ -32922,7 +32648,7 @@ var GaugeChartDesignPanel = class extends Component$1 {
32922
32648
  ChartHumanizeNumbers,
32923
32649
  Select
32924
32650
  };
32925
- static props = ChartSidePanelPropsObject;
32651
+ props = props(chartSidePanelPropsDefinition);
32926
32652
  state;
32927
32653
  setup() {
32928
32654
  this.state = proxy({
@@ -33053,11 +32779,11 @@ var GeoChartRegionSelectSection = class extends Component$1 {
33053
32779
  Section,
33054
32780
  Select
33055
32781
  };
33056
- static props = {
33057
- chartId: String,
33058
- definition: Object,
33059
- updateChart: Function
33060
- };
32782
+ props = props({
32783
+ chartId: types$1.UID(),
32784
+ definition: types$1.GeoChartDefinition(),
32785
+ updateChart: types$1.function([types$1.UID(), types$1.object({})], types$1.DispatchResult())
32786
+ });
33061
32787
  updateSelectedRegion(value) {
33062
32788
  this.props.updateChart(this.props.chartId, { region: value });
33063
32789
  }
@@ -33207,10 +32933,10 @@ var PieHoleSize = class extends Component$1 {
33207
32933
  Section,
33208
32934
  NumberInput
33209
32935
  };
33210
- static props = {
33211
- onValueChange: Function,
33212
- value: Number
33213
- };
32936
+ props = props({
32937
+ onValueChange: types$1.function([types$1.number()]),
32938
+ value: types$1.number()
32939
+ });
33214
32940
  onChange(value) {
33215
32941
  if (!isNaN(Number(value))) this.props.onValueChange(clip(Number(value), 0, 95));
33216
32942
  }
@@ -33232,7 +32958,7 @@ var PieChartDesignPanel = class extends Component$1 {
33232
32958
  RoundColorPicker,
33233
32959
  Select
33234
32960
  };
33235
- static props = ChartSidePanelPropsObject;
32961
+ props = props(chartSidePanelPropsDefinition);
33236
32962
  state = proxy({ index: 0 });
33237
32963
  get runtime() {
33238
32964
  return this.env.model.getters.getChartRuntime(this.props.chartId);
@@ -33292,7 +33018,7 @@ var RadarChartDesignPanel = class extends Component$1 {
33292
33018
  Checkbox,
33293
33019
  ChartHumanizeNumbers
33294
33020
  };
33295
- static props = ChartSidePanelPropsObject;
33021
+ props = props(chartSidePanelPropsDefinition);
33296
33022
  };
33297
33023
 
33298
33024
  //#endregion
@@ -33342,7 +33068,7 @@ var ScorecardChartConfigPanel = class extends Component$1 {
33342
33068
  Section,
33343
33069
  Select
33344
33070
  };
33345
- static props = ChartSidePanelPropsObject;
33071
+ props = props(chartSidePanelPropsDefinition);
33346
33072
  state = proxy({
33347
33073
  keyValueDispatchResult: void 0,
33348
33074
  baselineDispatchResult: void 0
@@ -33416,7 +33142,7 @@ var ScorecardChartDesignPanel = class extends Component$1 {
33416
33142
  ChartTitle,
33417
33143
  ChartHumanizeNumbers
33418
33144
  };
33419
- static props = ChartSidePanelPropsObject;
33145
+ props = props(chartSidePanelPropsDefinition);
33420
33146
  get colorsSectionTitle() {
33421
33147
  return this.props.definition.baselineMode === "progress" ? _t("Progress bar colors") : _t("Baseline colors");
33422
33148
  }
@@ -33497,7 +33223,7 @@ var SunburstChartDesignPanel = class extends Component$1 {
33497
33223
  PieHoleSize,
33498
33224
  ChartHumanizeNumbers
33499
33225
  };
33500
- static props = ChartSidePanelPropsObject;
33226
+ props = props(chartSidePanelPropsDefinition);
33501
33227
  defaults = SunburstChartDefaults;
33502
33228
  get showValues() {
33503
33229
  return this.props.definition.showValues ?? SunburstChartDefaults.showValues;
@@ -33530,11 +33256,11 @@ var TreeMapCategoryColors = class extends Component$1 {
33530
33256
  Checkbox,
33531
33257
  RoundColorPicker
33532
33258
  };
33533
- static props = {
33534
- chartId: String,
33535
- definition: Object,
33536
- onColorChanged: Function
33537
- };
33259
+ props = props({
33260
+ chartId: types$1.UID(),
33261
+ definition: types$1.TreeMapChartDefinition(),
33262
+ onColorChanged: types$1.function([types$1.TreeMapCategoryColorOptions()], types$1.DispatchResult())
33263
+ });
33538
33264
  get coloringOptions() {
33539
33265
  const coloringOptions = this.props.definition.coloringOptions ?? TreeMapChartDefaults.coloringOptions;
33540
33266
  if (coloringOptions.type !== "categoryColor") throw new Error("Coloring options is not solid color");
@@ -33562,11 +33288,11 @@ var TreeMapCategoryColors = class extends Component$1 {
33562
33288
  var TreeMapColorScale = class extends Component$1 {
33563
33289
  static template = "o-spreadsheet-TreeMapColorScale";
33564
33290
  static components = { RoundColorPicker };
33565
- static props = {
33566
- chartId: String,
33567
- definition: Object,
33568
- onColorChanged: Function
33569
- };
33291
+ props = props({
33292
+ chartId: types$1.UID(),
33293
+ definition: types$1.TreeMapChartDefinition(),
33294
+ onColorChanged: types$1.function([types$1.TreeMapColorScaleOptions()], types$1.DispatchResult())
33295
+ });
33570
33296
  get coloringOptions() {
33571
33297
  const coloringOptions = this.props.definition.coloringOptions ?? TreeMapChartDefaults.coloringOptions;
33572
33298
  if (coloringOptions.type !== "colorScale") throw new Error("Coloring options is not a color scale");
@@ -33608,7 +33334,7 @@ var TreeMapChartDesignPanel = class extends Component$1 {
33608
33334
  TreeMapColorScale,
33609
33335
  ChartHumanizeNumbers
33610
33336
  };
33611
- static props = ChartSidePanelPropsObject;
33337
+ props = props(chartSidePanelPropsDefinition);
33612
33338
  savedColors = {
33613
33339
  categoryColors: DEFAULT_SOLID_COLOR,
33614
33340
  colorScale: DEFAULT_COLOR_SCALE
@@ -33665,7 +33391,7 @@ var WaterfallChartDesignPanel = class extends Component$1 {
33665
33391
  ChartLegend,
33666
33392
  ChartHumanizeNumbers
33667
33393
  };
33668
- static props = ChartSidePanelPropsObject;
33394
+ props = props(chartSidePanelPropsDefinition);
33669
33395
  axisChoices = CHART_AXIS_CHOICES;
33670
33396
  onUpdateShowSubTotals(showSubTotals) {
33671
33397
  this.props.updateChart(this.props.chartId, { showSubTotals });
@@ -33779,10 +33505,10 @@ var ChartTypePicker = class extends Component$1 {
33779
33505
  Section,
33780
33506
  Popover
33781
33507
  };
33782
- static props = {
33783
- chartId: String,
33784
- chartPanelStore: Object
33785
- };
33508
+ props = props({
33509
+ chartId: types$1.UID(),
33510
+ chartPanelStore: types$1.Store()
33511
+ });
33786
33512
  categories = chartCategories;
33787
33513
  chartTypeByCategories = {};
33788
33514
  popoverRef = signal(null);
@@ -33957,10 +33683,10 @@ var ChartPanel = class extends Component$1 {
33957
33683
  Section,
33958
33684
  ChartTypePicker
33959
33685
  };
33960
- static props = {
33961
- onCloseSidePanel: Function,
33962
- chartId: String
33963
- };
33686
+ props = props({
33687
+ onCloseSidePanel: types$1.function([]),
33688
+ chartId: types$1.UID()
33689
+ });
33964
33690
  store;
33965
33691
  get chartId() {
33966
33692
  return this.props.chartId;
@@ -34351,13 +34077,13 @@ var ColumnStatisticsStore = class extends SpreadsheetStore {
34351
34077
  //#region src/components/side_panel/column_stats/column_stats_panel.ts
34352
34078
  var ColumnStatsPanel = class extends Component$1 {
34353
34079
  static template = "o-spreadsheet-ColumnStatsPanel";
34354
- static props = { onCloseSidePanel: Function };
34355
34080
  static components = {
34356
34081
  NumberInput,
34357
34082
  SidePanelCollapsible,
34358
34083
  BadgeSelection,
34359
34084
  Section
34360
34085
  };
34086
+ props = props({ onCloseSidePanel: types$1.function([]) });
34361
34087
  state = proxy({
34362
34088
  currentChart: "count",
34363
34089
  currentFrequencyOrder: "descending",
@@ -34600,7 +34326,7 @@ var CellIsRuleEditor = class extends Component$1 {
34600
34326
  ColorPickerWidget,
34601
34327
  Select
34602
34328
  };
34603
- static props = { store: Object };
34329
+ props = props({ store: types$1.Store() });
34604
34330
  getTextDecoration = getTextDecoration;
34605
34331
  get rule() {
34606
34332
  return this.props.store.state.rules.cellIs;
@@ -34610,18 +34336,12 @@ var CellIsRuleEditor = class extends Component$1 {
34610
34336
  //#endregion
34611
34337
  //#region src/components/side_panel/criterion_form/criterion_form.ts
34612
34338
  var CriterionForm = class extends Component$1 {
34613
- static props = {
34614
- criterion: Object,
34615
- onCriterionChanged: Function,
34616
- disableFormulas: {
34617
- type: Boolean,
34618
- optional: true
34619
- },
34620
- autofocus: {
34621
- type: Boolean,
34622
- optional: true
34623
- }
34624
- };
34339
+ props = props({
34340
+ criterion: types$1.object({}),
34341
+ onCriterionChanged: types$1.function([types$1.object({})]),
34342
+ "disableFormulas?": types$1.boolean(),
34343
+ "autofocus?": types$1.boolean()
34344
+ });
34625
34345
  setup() {
34626
34346
  const composerFocusStore = useStore(ComposerFocusStore);
34627
34347
  if (composerFocusStore.activeComposer.editionMode !== "inactive") composerFocusStore.activeComposer.stopEdition();
@@ -35202,41 +34922,22 @@ function getOccurrencesInRanges(criterionRanges, getters) {
35202
34922
  //#region src/components/side_panel/criterion_form/criterion_input/criterion_input.ts
35203
34923
  var CriterionInput = class extends Component$1 {
35204
34924
  static template = "o-spreadsheet-CriterionInput";
35205
- static props = {
35206
- value: {
35207
- type: String,
35208
- optional: true
35209
- },
35210
- criterionType: String,
35211
- onValueChanged: Function,
35212
- onKeyDown: {
35213
- type: Function,
35214
- optional: true
35215
- },
35216
- focused: {
35217
- type: Boolean,
35218
- optional: true
35219
- },
35220
- onBlur: {
35221
- type: Function,
35222
- optional: true
35223
- },
35224
- onFocus: {
35225
- type: Function,
35226
- optional: true
35227
- },
35228
- disableFormulas: {
35229
- type: Boolean,
35230
- optional: true
35231
- }
35232
- };
35233
- static defaultProps = {
34925
+ static components = { StandaloneComposer };
34926
+ props = props({
34927
+ "value?": types$1.string(),
34928
+ criterionType: types$1.DataValidationCriterionType(),
34929
+ onValueChanged: types$1.function([types$1.string()]),
34930
+ "onKeyDown?": types$1.function([types$1.instanceOf(KeyboardEvent)]),
34931
+ "focused?": types$1.boolean(),
34932
+ "onBlur?": types$1.function([]),
34933
+ "onFocus?": types$1.function([]),
34934
+ "disableFormulas?": types$1.boolean()
34935
+ }, {
35234
34936
  value: "",
35235
34937
  onKeyDown: () => {},
35236
34938
  focused: false,
35237
34939
  onBlur: () => {}
35238
- };
35239
- static components = { StandaloneComposer };
34940
+ });
35240
34941
  inputRef = signal(null);
35241
34942
  setup() {
35242
34943
  useLayoutEffect$1(() => {
@@ -36063,10 +35764,14 @@ var ColorScaleRuleEditorThreshold = class extends Component$1 {
36063
35764
  StandaloneComposer,
36064
35765
  Select
36065
35766
  };
36066
- static props = {
36067
- store: Object,
36068
- thresholdType: String
36069
- };
35767
+ props = props({
35768
+ store: types$1.Store(),
35769
+ thresholdType: types$1.or([
35770
+ types$1.literal("minimum"),
35771
+ types$1.literal("midpoint"),
35772
+ types$1.literal("maximum")
35773
+ ])
35774
+ });
36070
35775
  get rule() {
36071
35776
  return this.props.store.state.rules.colorScale;
36072
35777
  }
@@ -36137,7 +35842,7 @@ var ColorScaleRuleEditorThreshold = class extends Component$1 {
36137
35842
  var ColorScaleRuleEditor = class extends Component$1 {
36138
35843
  static template = "o-spreadsheet-ColorScaleRuleEditor";
36139
35844
  static components = { ColorScaleRuleEditorThreshold };
36140
- static props = { store: Object };
35845
+ props = props({ store: types$1.Store() });
36141
35846
  };
36142
35847
 
36143
35848
  //#endregion
@@ -36148,7 +35853,7 @@ var DataBarRuleEditor = class extends Component$1 {
36148
35853
  SelectionInput,
36149
35854
  RoundColorPicker
36150
35855
  };
36151
- static props = { store: Object };
35856
+ props = props({ store: types$1.Store() });
36152
35857
  get rule() {
36153
35858
  return this.props.store.state.rules.dataBar;
36154
35859
  }
@@ -36159,7 +35864,7 @@ var DataBarRuleEditor = class extends Component$1 {
36159
35864
  //#region src/components/icon_picker/icon_picker.ts
36160
35865
  var IconPicker = class extends Component$1 {
36161
35866
  static template = "o-spreadsheet-IconPicker";
36162
- static props = { onIconPicked: Function };
35867
+ props = props({ onIconPicked: types$1.function([types$1.string()]) });
36163
35868
  onIconClick(icon) {
36164
35869
  if (icon) this.props.onIconPicked(icon);
36165
35870
  }
@@ -36180,7 +35885,7 @@ var IconSetRuleEditor = class extends Component$1 {
36180
35885
  StandaloneComposer,
36181
35886
  Select
36182
35887
  };
36183
- static props = { store: Object };
35888
+ props = props({ store: types$1.Store() });
36184
35889
  get rule() {
36185
35890
  return this.props.store.state.rules.iconSet;
36186
35891
  }
@@ -36259,11 +35964,11 @@ var ConditionalFormattingEditor = class extends Component$1 {
36259
35964
  IconSetRuleEditor,
36260
35965
  DataBarRuleEditor
36261
35966
  };
36262
- static props = {
36263
- cf: Object,
36264
- isNewCf: Boolean,
36265
- onCloseSidePanel: Function
36266
- };
35967
+ props = props({
35968
+ cf: types$1.ConditionalFormat(),
35969
+ isNewCf: types$1.boolean(),
35970
+ onCloseSidePanel: types$1.function([])
35971
+ });
36267
35972
  activeSheetId;
36268
35973
  store;
36269
35974
  setup() {
@@ -36319,11 +36024,11 @@ var ConditionalFormattingEditor = class extends Component$1 {
36319
36024
  //#region src/components/side_panel/conditional_formatting/cf_preview/cf_preview.ts
36320
36025
  var ConditionalFormatPreview = class extends Component$1 {
36321
36026
  static template = "o-spreadsheet-ConditionalFormatPreview";
36322
- static props = {
36323
- conditionalFormat: Object,
36324
- onMouseDown: Function,
36325
- class: String
36326
- };
36027
+ props = props({
36028
+ conditionalFormat: types$1.ConditionalFormat(),
36029
+ onMouseDown: types$1.function([types$1.instanceOf(MouseEvent)]),
36030
+ class: types$1.string()
36031
+ });
36327
36032
  icons = ICONS;
36328
36033
  cfPreviewRef = signal(null);
36329
36034
  setup() {
@@ -36379,8 +36084,8 @@ var ConditionalFormatPreview = class extends Component$1 {
36379
36084
  //#region src/components/side_panel/conditional_formatting/cf_preview_list/cf_preview_list.ts
36380
36085
  var ConditionalFormatPreviewList = class extends Component$1 {
36381
36086
  static template = "o-spreadsheet-ConditionalFormatPreviewList";
36382
- static props = { onCloseSidePanel: Function };
36383
36087
  static components = { ConditionalFormatPreview };
36088
+ props = props({ onCloseSidePanel: types$1.function([]) });
36384
36089
  dragAndDrop = useDragAndDropListItems();
36385
36090
  cfListRef = signal(null);
36386
36091
  get conditionalFormats() {
@@ -36449,7 +36154,7 @@ var ConditionalFormatPreviewList = class extends Component$1 {
36449
36154
  //#region src/components/side_panel/data_validation/dv_preview/dv_preview.ts
36450
36155
  var DataValidationPreview = class extends Component$1 {
36451
36156
  static template = "o-spreadsheet-DataValidationPreview";
36452
- static props = { rule: Object };
36157
+ props = props({ rule: types$1.DataValidationRule() });
36453
36158
  dvPreviewRef = signal(null);
36454
36159
  setup() {
36455
36160
  useHighlightsOnHover(this.dvPreviewRef, this);
@@ -36484,8 +36189,8 @@ var DataValidationPreview = class extends Component$1 {
36484
36189
  //#region src/components/side_panel/data_validation/data_validation_panel.ts
36485
36190
  var DataValidationPanel = class extends Component$1 {
36486
36191
  static template = "o-spreadsheet-DataValidationPanel";
36487
- static props = { onCloseSidePanel: Function };
36488
36192
  static components = { DataValidationPreview };
36193
+ props = props({ onCloseSidePanel: types$1.function([]) });
36489
36194
  addDataValidationRule() {
36490
36195
  this.env.replaceSidePanel("DataValidationEditor", "DataValidation", { ruleId: UuidGenerator.smallUuid() });
36491
36196
  }
@@ -36539,14 +36244,11 @@ var DataValidationEditor = class extends Component$1 {
36539
36244
  Section,
36540
36245
  ValidationMessages
36541
36246
  };
36542
- static props = {
36543
- ruleId: String,
36544
- onCancel: {
36545
- type: Function,
36546
- optional: true
36547
- },
36548
- onCloseSidePanel: Function
36549
- };
36247
+ props = props({
36248
+ ruleId: types$1.UID(),
36249
+ "onCancel?": types$1.function([]),
36250
+ onCloseSidePanel: types$1.function([])
36251
+ });
36550
36252
  state = proxy({
36551
36253
  rule: this.defaultDataValidationRule,
36552
36254
  errors: [],
@@ -36993,7 +36695,7 @@ var FindAndReplacePanel = class extends Component$1 {
36993
36695
  ValidationMessages,
36994
36696
  Select
36995
36697
  };
36996
- static props = { onCloseSidePanel: Function };
36698
+ props = props({ onCloseSidePanel: types$1.function([]) });
36997
36699
  searchInputRef = signal(null);
36998
36700
  store;
36999
36701
  state;
@@ -37819,13 +37521,6 @@ var MoreFormatsStore = class extends SpreadsheetStore {
37819
37521
  //#region src/components/side_panel/more_formats/more_formats.ts
37820
37522
  var MoreFormatsPanel = class extends Component$1 {
37821
37523
  static template = "o-spreadsheet-MoreFormatsPanel";
37822
- static props = {
37823
- onCloseSidePanel: Function,
37824
- category: {
37825
- type: String,
37826
- optional: true
37827
- }
37828
- };
37829
37524
  static components = {
37830
37525
  BadgeSelection,
37831
37526
  Section,
@@ -37833,6 +37528,14 @@ var MoreFormatsPanel = class extends Component$1 {
37833
37528
  Checkbox,
37834
37529
  Select
37835
37530
  };
37531
+ props = props({
37532
+ onCloseSidePanel: types$1.function([]),
37533
+ "category?": types$1.or([
37534
+ types$1.literal("number"),
37535
+ types$1.literal("date"),
37536
+ types$1.literal("currency")
37537
+ ])
37538
+ });
37836
37539
  store;
37837
37540
  setup() {
37838
37541
  this.store = useLocalStore(MoreFormatsStore, this.props.category);
@@ -37888,11 +37591,11 @@ function handleResult(env, result) {
37888
37591
  //#region src/components/side_panel/named_ranges_panel/named_range_preview/named_range_preview.ts
37889
37592
  var NamedRangePreview = class extends Component$1 {
37890
37593
  static template = "o-spreadsheet-NamedRangePreview";
37891
- static props = { namedRange: Object };
37892
37594
  static components = {
37893
37595
  SelectionInput,
37894
37596
  TextInput
37895
37597
  };
37598
+ props = props({ namedRange: types$1.NamedRange() });
37896
37599
  state = proxy({});
37897
37600
  namedRangePreviewRef = signal(null);
37898
37601
  setup() {
@@ -37944,12 +37647,12 @@ var NamedRangePreview = class extends Component$1 {
37944
37647
  //#region src/components/side_panel/named_ranges_panel/named_ranges_panel.ts
37945
37648
  var NamedRangesPanel = class extends Component$1 {
37946
37649
  static template = "o-spreadsheet-NamedRangesPanel";
37947
- static props = { onCloseSidePanel: Function };
37948
37650
  static components = {
37949
37651
  NamedRangePreview,
37950
37652
  SelectionInput,
37951
37653
  TextInput
37952
37654
  };
37655
+ props = props({ onCloseSidePanel: types$1.function([]) });
37953
37656
  get namedRanges() {
37954
37657
  return this.env.model.getters.getNamedRanges();
37955
37658
  }
@@ -37970,7 +37673,7 @@ const HIGHLIGHT_COLOR = "#e28f08";
37970
37673
  var PerfProfilePanel = class extends Component$1 {
37971
37674
  static template = "o-spreadsheet-PerfProfilePanel";
37972
37675
  static components = { Section };
37973
- static props = { onCloseSidePanel: Function };
37676
+ props = props({ onCloseSidePanel: types$1.function([]) });
37974
37677
  state = proxy({
37975
37678
  selectedIndex: void 0,
37976
37679
  lastProfiledTime: 0
@@ -38186,11 +37889,11 @@ var PivotMeasureDisplayPanelStore = class extends SpreadsheetStore {
38186
37889
  //#region src/components/side_panel/pivot/pivot_measure_display_panel/pivot_measure_display_panel.ts
38187
37890
  var PivotMeasureDisplayPanel = class extends Component$1 {
38188
37891
  static template = "o-spreadsheet-PivotMeasureDisplayPanel";
38189
- static props = {
38190
- onCloseSidePanel: Function,
38191
- pivotId: String,
38192
- measure: Object
38193
- };
37892
+ props = props({
37893
+ onCloseSidePanel: types$1.function([]),
37894
+ pivotId: types$1.UID(),
37895
+ measure: types$1.PivotCoreMeasure()
37896
+ });
38194
37897
  static components = {
38195
37898
  Section,
38196
37899
  Checkbox,
@@ -38252,13 +37955,13 @@ function getVisiblePivotCellPositions(getters, pivotId) {
38252
37955
  //#region src/components/side_panel/pivot/pivot_defer_update/pivot_defer_update.ts
38253
37956
  var PivotDeferUpdate = class extends Component$1 {
38254
37957
  static template = "o-spreadsheet-PivotDeferUpdate";
38255
- static props = {
38256
- deferUpdate: Boolean,
38257
- isDirty: Boolean,
38258
- toggleDeferUpdate: Function,
38259
- discard: Function,
38260
- apply: Function
38261
- };
37958
+ props = props({
37959
+ deferUpdate: types$1.boolean(),
37960
+ isDirty: types$1.boolean(),
37961
+ toggleDeferUpdate: types$1.function([types$1.boolean()]),
37962
+ discard: types$1.function([]),
37963
+ apply: types$1.function([])
37964
+ });
38262
37965
  static components = {
38263
37966
  Section,
38264
37967
  Checkbox
@@ -38271,6 +37974,150 @@ var PivotDeferUpdate = class extends Component$1 {
38271
37974
  }
38272
37975
  };
38273
37976
 
37977
+ //#endregion
37978
+ //#region src/helpers/pivot/pivot_runtime_definition.ts
37979
+ /**
37980
+ * Represent a pivot runtime definition. A pivot runtime definition is a pivot
37981
+ * definition that has been enriched to include the display name of its attributes
37982
+ * (measures, columns, rows).
37983
+ */
37984
+ var PivotRuntimeDefinition = class {
37985
+ measures;
37986
+ columns;
37987
+ rows;
37988
+ filters;
37989
+ sortedColumn;
37990
+ collapsedDomains;
37991
+ customFields;
37992
+ constructor(definition, fields) {
37993
+ this.columns = definition.columns.map((dimension) => this.createPivotDimension(fields, dimension));
37994
+ this.rows = definition.rows.map((dimension) => this.createPivotDimension(fields, dimension));
37995
+ this.measures = definition.measures.map((measure) => this.createMeasure(fields, measure));
37996
+ this.filters = (definition.filters ?? []).map((filter) => this.createPivotFilter(fields, filter));
37997
+ this.sortedColumn = definition.sortedColumn;
37998
+ this.collapsedDomains = definition.collapsedDomains;
37999
+ this.customFields = definition.customFields;
38000
+ }
38001
+ getDimension(nameWithGranularity) {
38002
+ const dimension = this.columns.find((d) => d.nameWithGranularity === nameWithGranularity) || this.rows.find((d) => d.nameWithGranularity === nameWithGranularity);
38003
+ if (!dimension) throw new EvaluationError(_t("Dimension %s does not exist", nameWithGranularity));
38004
+ return dimension;
38005
+ }
38006
+ getMeasure(id) {
38007
+ const measure = this.measures.find((measure) => measure.id === id);
38008
+ if (!measure) throw new EvaluationError(_t("Field %s is not a measure", id));
38009
+ return measure;
38010
+ }
38011
+ get invalidAggregatorsForCustomField() {
38012
+ return [];
38013
+ }
38014
+ createMeasure(fields, measure) {
38015
+ const fieldName = measure.fieldName;
38016
+ const field = fieldName === "__count" ? {
38017
+ name: "__count",
38018
+ string: _t("Count"),
38019
+ type: "integer",
38020
+ aggregator: "sum"
38021
+ } : fields[fieldName];
38022
+ const aggregator = measure.aggregator;
38023
+ let isValid = !!(field || measure.computedBy);
38024
+ for (const dimension of [...this.rows, ...this.columns]) if (fields[dimension.fieldName]?.isCustomField && this.invalidAggregatorsForCustomField.includes(aggregator)) {
38025
+ isValid = false;
38026
+ break;
38027
+ }
38028
+ return {
38029
+ /**
38030
+ * Get the id of the measure, as it is stored in the pivot formula
38031
+ */
38032
+ id: measure.id,
38033
+ /**
38034
+ * Display name of the measure
38035
+ * e.g. "__count" -> "Count", "amount_total" -> "Total Amount"
38036
+ */
38037
+ get displayName() {
38038
+ return measure.userDefinedName ?? field?.string ?? measure.fieldName;
38039
+ },
38040
+ userDefinedName: measure.userDefinedName,
38041
+ /**
38042
+ * Get the name of the field of the measure
38043
+ */
38044
+ fieldName,
38045
+ /**
38046
+ * Get the aggregator of the measure
38047
+ */
38048
+ aggregator,
38049
+ /**
38050
+ * Get the type of the measure field
38051
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
38052
+ */
38053
+ type: fieldName === "__count" ? "integer" : field?.type ?? "integer",
38054
+ isValid,
38055
+ isHidden: measure.isHidden,
38056
+ format: measure.format,
38057
+ computedBy: measure.computedBy,
38058
+ display: measure.display
38059
+ };
38060
+ }
38061
+ createPivotDimension(fields, dimension) {
38062
+ const field = fields[dimension.fieldName];
38063
+ const type = field?.type ?? "integer";
38064
+ const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
38065
+ return {
38066
+ /**
38067
+ * Get the display name of the dimension
38068
+ * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
38069
+ */
38070
+ displayName: field?.string ?? dimension.fieldName,
38071
+ /**
38072
+ * Get the name of the dimension, as it is stored in the pivot formula
38073
+ * e.g. "stage_id", "create_date:month"
38074
+ */
38075
+ nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
38076
+ /**
38077
+ * Get the name of the field of the dimension
38078
+ * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
38079
+ */
38080
+ fieldName: dimension.fieldName,
38081
+ /**
38082
+ * Get the aggregate operator of the dimension
38083
+ * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
38084
+ */
38085
+ granularity,
38086
+ /**
38087
+ * Get the type of the field of the dimension
38088
+ * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
38089
+ */
38090
+ type: field?.isCustomField ? "custom" : type,
38091
+ order: dimension.order,
38092
+ isValid: !!field,
38093
+ isCustomField: !!field?.isCustomField,
38094
+ customGroups: field?.customGroups,
38095
+ parentField: field?.parentField
38096
+ };
38097
+ }
38098
+ createPivotFilter(fields, filter) {
38099
+ const field = fields[filter.fieldName];
38100
+ return {
38101
+ ...filter,
38102
+ displayName: field?.name ?? filter.fieldName,
38103
+ isValid: !!field
38104
+ };
38105
+ }
38106
+ };
38107
+
38108
+ //#endregion
38109
+ //#region src/helpers/pivot/spreadsheet_pivot/runtime_definition_spreadsheet_pivot.ts
38110
+ var SpreadsheetPivotRuntimeDefinition = class extends PivotRuntimeDefinition {
38111
+ range;
38112
+ constructor(definition, fields, getters) {
38113
+ super(definition, fields);
38114
+ if (definition.dataSet) {
38115
+ const { sheetId, zone } = definition.dataSet;
38116
+ this.range = getters.getRangeFromZone(sheetId, zone);
38117
+ }
38118
+ }
38119
+ };
38120
+
38274
38121
  //#endregion
38275
38122
  //#region src/types/table.ts
38276
38123
  const filterCriterions = [
@@ -38336,12 +38183,12 @@ const filterDateCriterionOperators = [
38336
38183
  //#region src/components/filters/filter_menu_criterion/filter_menu_criterion.ts
38337
38184
  var FilterMenuCriterion = class extends Component$1 {
38338
38185
  static template = "o-spreadsheet-FilterMenuCriterion";
38339
- static props = {
38340
- criterion: Object,
38341
- onCriterionChanged: Function,
38342
- criterionOperators: Array
38343
- };
38344
38186
  static components = { Select };
38187
+ props = props({
38188
+ criterion: types$1.CriterionFilter(),
38189
+ criterionOperators: types$1.array(types$1.GenericCriterionType()),
38190
+ onCriterionChanged: types$1.function([types$1.CriterionFilter()])
38191
+ });
38345
38192
  state;
38346
38193
  setup() {
38347
38194
  onWillUpdateProps((nextProps) => {
@@ -38374,17 +38221,14 @@ var FilterMenuCriterion = class extends Component$1 {
38374
38221
  var FilterMenuValueItem = class extends Component$1 {
38375
38222
  static template = "o-spreadsheet-FilterMenuValueItem";
38376
38223
  static components = { Checkbox };
38377
- static props = {
38378
- value: String,
38379
- isChecked: Boolean,
38380
- isSelected: Boolean,
38381
- onMouseMove: Function,
38382
- onClick: Function,
38383
- scrolledTo: {
38384
- type: String,
38385
- optional: true
38386
- }
38387
- };
38224
+ props = props({
38225
+ value: types.string(),
38226
+ isChecked: types.boolean(),
38227
+ isSelected: types.boolean(),
38228
+ onMouseMove: types.function([]),
38229
+ onClick: types.function([]),
38230
+ "scrolledTo?": types.or([types.literal("top"), types.literal("bottom")])
38231
+ });
38388
38232
  itemRef = signal(null);
38389
38233
  setup() {
38390
38234
  onWillPatch(() => {
@@ -38402,11 +38246,15 @@ var FilterMenuValueItem = class extends Component$1 {
38402
38246
  //#region src/components/filters/filter_menu_value_list/filter_menu_value_list.ts
38403
38247
  var FilterMenuValueList = class extends Component$1 {
38404
38248
  static template = "o-spreadsheet-FilterMenuValueList";
38405
- static props = {
38406
- values: Object,
38407
- onUpdateHiddenValues: Function
38408
- };
38409
38249
  static components = { FilterMenuValueItem };
38250
+ props = props({
38251
+ values: types$1.array(types$1.object({
38252
+ checked: types$1.boolean(),
38253
+ string: types$1.string(),
38254
+ "scrolledTo?": types$1.or([types$1.literal("top"), types$1.literal("bottom")])
38255
+ })),
38256
+ onUpdateHiddenValues: types$1.function([types$1.array(types$1.string())])
38257
+ });
38410
38258
  state = proxy({
38411
38259
  displayedValues: [],
38412
38260
  textFilter: "",
@@ -38507,17 +38355,6 @@ var FilterMenuValueList = class extends Component$1 {
38507
38355
  //#region src/components/filters/pivot_filter_menu/pivot_filter_menu.ts
38508
38356
  var PivotFilterMenu = class extends Component$1 {
38509
38357
  static template = "o-spreadsheet-PivotFilterMenu";
38510
- static props = {
38511
- pivotId: String,
38512
- definition: Object,
38513
- filter: Object,
38514
- values: Object,
38515
- onClosed: {
38516
- type: Function,
38517
- optional: true
38518
- },
38519
- onConfirmed: Function
38520
- };
38521
38358
  static components = {
38522
38359
  FilterMenuValueList,
38523
38360
  SidePanelCollapsible,
@@ -38525,6 +38362,18 @@ var PivotFilterMenu = class extends Component$1 {
38525
38362
  };
38526
38363
  criterionCategory = "char";
38527
38364
  updatedCriterionValue;
38365
+ props = props({
38366
+ pivotId: types$1.UID(),
38367
+ definition: types$1.instanceOf(SpreadsheetPivotRuntimeDefinition),
38368
+ filter: types$1.PivotFilter(),
38369
+ values: types$1.array(types$1.object({
38370
+ checked: types$1.boolean(),
38371
+ string: types$1.string(),
38372
+ "scrolledTo?": types$1.or([types$1.literal("top"), types$1.literal("bottom")])
38373
+ })),
38374
+ "onClosed?": types$1.function([]),
38375
+ onConfirmed: types$1.function([types$1.DataFilterValue()])
38376
+ });
38528
38377
  setup() {
38529
38378
  onWillUpdateProps((nextProps) => {
38530
38379
  if (!deepEquals(nextProps.definition, this.props.definition)) {
@@ -38576,21 +38425,29 @@ var PivotFilterMenu = class extends Component$1 {
38576
38425
  //#region src/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension/pivot_dimension.ts
38577
38426
  var PivotDimension = class extends Component$1 {
38578
38427
  static template = "o-spreadsheet-PivotDimension";
38579
- static props = {
38580
- dimension: Object,
38581
- onRemoved: {
38582
- type: Function,
38583
- optional: true
38584
- },
38585
- onNameUpdated: {
38586
- type: Function,
38587
- optional: true
38588
- },
38589
- slots: {
38590
- type: Object,
38591
- optional: true
38592
- }
38593
- };
38428
+ props = props({
38429
+ dimension: types$1.or([
38430
+ types$1.PivotDimension(),
38431
+ types$1.PivotMeasure(),
38432
+ types$1.PivotFilter()
38433
+ ]),
38434
+ "onRemoved?": types$1.function([types$1.or([
38435
+ types$1.PivotDimension(),
38436
+ types$1.PivotMeasure(),
38437
+ types$1.PivotFilter()
38438
+ ])]),
38439
+ "onNameUpdated?": types$1.function([types$1.or([
38440
+ types$1.PivotDimension(),
38441
+ types$1.PivotMeasure(),
38442
+ types$1.PivotFilter()
38443
+ ]), types$1.string()]),
38444
+ "type?": types$1.or([
38445
+ types$1.literal("row"),
38446
+ types$1.literal("col"),
38447
+ types$1.literal("measure"),
38448
+ types$1.literal("filter")
38449
+ ])
38450
+ });
38594
38451
  static components = {
38595
38452
  CogWheelMenu,
38596
38453
  TextInput
@@ -38613,12 +38470,12 @@ var PivotFilterEditor = class extends Component$1 {
38613
38470
  Popover,
38614
38471
  PivotFilterMenu
38615
38472
  };
38616
- static props = {
38617
- pivotId: String,
38618
- definition: Object,
38619
- filter: Object,
38620
- onFiltersUpdated: Function
38621
- };
38473
+ props = props({
38474
+ pivotId: types$1.UID(),
38475
+ definition: types$1.instanceOf(SpreadsheetPivotRuntimeDefinition),
38476
+ filter: types$1.PivotFilter(),
38477
+ onFiltersUpdated: types$1.function([types$1.SpreadsheetPivotCoreDefinition()])
38478
+ });
38622
38479
  state;
38623
38480
  buttonFilter = signal(null);
38624
38481
  popover;
@@ -38745,14 +38602,10 @@ var AddDimensionButton = class extends Component$1 {
38745
38602
  Popover,
38746
38603
  TextValueProvider
38747
38604
  };
38748
- static props = {
38749
- onFieldPicked: Function,
38750
- fields: Array,
38751
- slots: {
38752
- type: Object,
38753
- optional: true
38754
- }
38755
- };
38605
+ props = props({
38606
+ onFieldPicked: types$1.function([types$1.string()]),
38607
+ fields: types$1.array()
38608
+ });
38756
38609
  buttonRef = signal(null);
38757
38610
  popover = proxy({ isOpen: false });
38758
38611
  search = proxy({ input: "" });
@@ -38844,11 +38697,11 @@ var AddDimensionButton = class extends Component$1 {
38844
38697
  //#region src/components/side_panel/pivot/pivot_custom_groups_collapsible/pivot_custom_groups_collapsible.ts
38845
38698
  var PivotCustomGroupsCollapsible = class extends Component$1 {
38846
38699
  static template = "o-spreadsheet-PivotCustomGroupsCollapsible";
38847
- static props = {
38848
- pivotId: String,
38849
- customField: Object,
38850
- onCustomFieldUpdated: Function
38851
- };
38700
+ props = props({
38701
+ pivotId: types$1.UID(),
38702
+ customField: types$1.PivotCustomGroupedField(),
38703
+ onCustomFieldUpdated: types$1.function([types$1.object({})])
38704
+ });
38852
38705
  static components = {
38853
38706
  SidePanelCollapsible,
38854
38707
  TextInput,
@@ -38908,12 +38761,12 @@ var PivotCustomGroupsCollapsible = class extends Component$1 {
38908
38761
  //#region src/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension_granularity/pivot_dimension_granularity.ts
38909
38762
  var PivotDimensionGranularity = class extends Component$1 {
38910
38763
  static template = "o-spreadsheet-PivotDimensionGranularity";
38911
- static props = {
38912
- dimension: Object,
38913
- onUpdated: Function,
38914
- availableGranularities: Set,
38915
- allGranularities: Array
38916
- };
38764
+ props = props({
38765
+ dimension: types$1.PivotDimension(),
38766
+ onUpdated: types$1.function([types$1.PivotDimension(), types$1.instanceOf(InputEvent)]),
38767
+ availableGranularities: types$1.SetOf(),
38768
+ allGranularities: types$1.array()
38769
+ });
38917
38770
  static components = { Select };
38918
38771
  periods = ALL_PERIODS;
38919
38772
  get granularityOptions() {
@@ -38929,10 +38782,10 @@ var PivotDimensionGranularity = class extends Component$1 {
38929
38782
  //#region src/components/side_panel/pivot/pivot_layout_configurator/pivot_dimension_order/pivot_dimension_order.ts
38930
38783
  var PivotDimensionOrder = class extends Component$1 {
38931
38784
  static template = "o-spreadsheet-PivotDimensionOrder";
38932
- static props = {
38933
- dimension: Object,
38934
- onUpdated: Function
38935
- };
38785
+ props = props({
38786
+ dimension: types$1.PivotDimension(),
38787
+ onUpdated: types$1.function([types$1.PivotDimension(), types$1.instanceOf(InputEvent)])
38788
+ });
38936
38789
  static components = { Select };
38937
38790
  get orderSelectOptions() {
38938
38791
  const options = [{
@@ -39002,15 +38855,15 @@ var PivotMeasureEditor = class extends Component$1 {
39002
38855
  StandaloneComposer,
39003
38856
  Select
39004
38857
  };
39005
- static props = {
39006
- definition: Object,
39007
- measure: Object,
39008
- onMeasureUpdated: Function,
39009
- onRemoved: Function,
39010
- generateMeasureId: Function,
39011
- aggregators: Object,
39012
- pivotId: String
39013
- };
38858
+ props = props({
38859
+ pivotId: types$1.string(),
38860
+ definition: types$1.PivotRuntimeDefinition(),
38861
+ measure: types$1.PivotMeasure(),
38862
+ onMeasureUpdated: types$1.function([types$1.PivotMeasure()]),
38863
+ onRemoved: types$1.function([]),
38864
+ generateMeasureId: types$1.function([types$1.string(), types$1.string()], types$1.string()),
38865
+ aggregators: types$1.object({})
38866
+ });
39014
38867
  getMeasureAutocomplete() {
39015
38868
  return createMeasureAutoComplete(this.props.definition, this.props.measure);
39016
38869
  }
@@ -39090,10 +38943,10 @@ var PivotMeasureEditor = class extends Component$1 {
39090
38943
  var PivotSortSection = class extends Component$1 {
39091
38944
  static template = "o-spreadsheet-PivotSortSection";
39092
38945
  static components = { Section };
39093
- static props = {
39094
- definition: Object,
39095
- pivotId: String
39096
- };
38946
+ props = props({
38947
+ definition: types$1.PivotRuntimeDefinition(),
38948
+ pivotId: types$1.UID()
38949
+ });
39097
38950
  get hasValidSort() {
39098
38951
  const pivot = this.env.model.getters.getPivot(this.props.pivotId);
39099
38952
  return !!this.props.definition.sortedColumn && isSortedColumnValid(this.props.definition.sortedColumn, pivot);
@@ -39145,21 +38998,18 @@ var PivotLayoutConfigurator = class extends Component$1 {
39145
38998
  PivotCustomGroupsCollapsible,
39146
38999
  SidePanelCollapsible
39147
39000
  };
39148
- static props = {
39149
- definition: Object,
39150
- onDimensionsUpdated: Function,
39151
- onFiltersUpdated: Function,
39152
- unusedGroupableFields: Array,
39153
- measureFields: Array,
39154
- unusedGranularities: Object,
39155
- dateGranularities: Array,
39156
- datetimeGranularities: Array,
39157
- getScrollableContainerEl: {
39158
- type: Function,
39159
- optional: true
39160
- },
39161
- pivotId: String
39162
- };
39001
+ props = props({
39002
+ definition: types$1.instanceOf(PivotRuntimeDefinition),
39003
+ onDimensionsUpdated: types$1.function([types$1.PivotCoreDefinition()]),
39004
+ onFiltersUpdated: types$1.function([types$1.PivotCoreDefinition()]),
39005
+ unusedGroupableFields: types$1.array(types$1.PivotField()),
39006
+ measureFields: types$1.array(types$1.PivotField()),
39007
+ unusedGranularities: types$1.RecordOf(),
39008
+ dateGranularities: types$1.array(types$1.string()),
39009
+ datetimeGranularities: types$1.array(types$1.string()),
39010
+ "getScrollableContainerEl?": types$1.function([], types$1.instanceOf(HTMLElement)),
39011
+ pivotId: types$1.UID()
39012
+ });
39163
39013
  dimensionsRef = signal(null);
39164
39014
  dragAndDrop = useDragAndDropListItems();
39165
39015
  AGGREGATORS = AGGREGATORS;
@@ -39373,10 +39223,10 @@ var PivotTitleSection = class extends Component$1 {
39373
39223
  Section,
39374
39224
  TextInput
39375
39225
  };
39376
- static props = {
39377
- pivotId: String,
39378
- flipAxis: Function
39379
- };
39226
+ props = props({
39227
+ pivotId: types$1.UID(),
39228
+ flipAxis: types$1.function([])
39229
+ });
39380
39230
  get cogWheelMenuItems() {
39381
39231
  return [
39382
39232
  {
@@ -39442,150 +39292,6 @@ var PivotTitleSection = class extends Component$1 {
39442
39292
  }
39443
39293
  };
39444
39294
 
39445
- //#endregion
39446
- //#region src/helpers/pivot/pivot_runtime_definition.ts
39447
- /**
39448
- * Represent a pivot runtime definition. A pivot runtime definition is a pivot
39449
- * definition that has been enriched to include the display name of its attributes
39450
- * (measures, columns, rows).
39451
- */
39452
- var PivotRuntimeDefinition = class {
39453
- measures;
39454
- columns;
39455
- rows;
39456
- filters;
39457
- sortedColumn;
39458
- collapsedDomains;
39459
- customFields;
39460
- constructor(definition, fields) {
39461
- this.columns = definition.columns.map((dimension) => this.createPivotDimension(fields, dimension));
39462
- this.rows = definition.rows.map((dimension) => this.createPivotDimension(fields, dimension));
39463
- this.measures = definition.measures.map((measure) => this.createMeasure(fields, measure));
39464
- this.filters = (definition.filters ?? []).map((filter) => this.createPivotFilter(fields, filter));
39465
- this.sortedColumn = definition.sortedColumn;
39466
- this.collapsedDomains = definition.collapsedDomains;
39467
- this.customFields = definition.customFields;
39468
- }
39469
- getDimension(nameWithGranularity) {
39470
- const dimension = this.columns.find((d) => d.nameWithGranularity === nameWithGranularity) || this.rows.find((d) => d.nameWithGranularity === nameWithGranularity);
39471
- if (!dimension) throw new EvaluationError(_t("Dimension %s does not exist", nameWithGranularity));
39472
- return dimension;
39473
- }
39474
- getMeasure(id) {
39475
- const measure = this.measures.find((measure) => measure.id === id);
39476
- if (!measure) throw new EvaluationError(_t("Field %s is not a measure", id));
39477
- return measure;
39478
- }
39479
- get invalidAggregatorsForCustomField() {
39480
- return [];
39481
- }
39482
- createMeasure(fields, measure) {
39483
- const fieldName = measure.fieldName;
39484
- const field = fieldName === "__count" ? {
39485
- name: "__count",
39486
- string: _t("Count"),
39487
- type: "integer",
39488
- aggregator: "sum"
39489
- } : fields[fieldName];
39490
- const aggregator = measure.aggregator;
39491
- let isValid = !!(field || measure.computedBy);
39492
- for (const dimension of [...this.rows, ...this.columns]) if (fields[dimension.fieldName]?.isCustomField && this.invalidAggregatorsForCustomField.includes(aggregator)) {
39493
- isValid = false;
39494
- break;
39495
- }
39496
- return {
39497
- /**
39498
- * Get the id of the measure, as it is stored in the pivot formula
39499
- */
39500
- id: measure.id,
39501
- /**
39502
- * Display name of the measure
39503
- * e.g. "__count" -> "Count", "amount_total" -> "Total Amount"
39504
- */
39505
- get displayName() {
39506
- return measure.userDefinedName ?? field?.string ?? measure.fieldName;
39507
- },
39508
- userDefinedName: measure.userDefinedName,
39509
- /**
39510
- * Get the name of the field of the measure
39511
- */
39512
- fieldName,
39513
- /**
39514
- * Get the aggregator of the measure
39515
- */
39516
- aggregator,
39517
- /**
39518
- * Get the type of the measure field
39519
- * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
39520
- */
39521
- type: fieldName === "__count" ? "integer" : field?.type ?? "integer",
39522
- isValid,
39523
- isHidden: measure.isHidden,
39524
- format: measure.format,
39525
- computedBy: measure.computedBy,
39526
- display: measure.display
39527
- };
39528
- }
39529
- createPivotDimension(fields, dimension) {
39530
- const field = fields[dimension.fieldName];
39531
- const type = field?.type ?? "integer";
39532
- const granularity = field && isDateOrDatetimeField(field) ? dimension.granularity : void 0;
39533
- return {
39534
- /**
39535
- * Get the display name of the dimension
39536
- * e.g. "stage_id" -> "Stage", "create_date:month" -> "Create Date"
39537
- */
39538
- displayName: field?.string ?? dimension.fieldName,
39539
- /**
39540
- * Get the name of the dimension, as it is stored in the pivot formula
39541
- * e.g. "stage_id", "create_date:month"
39542
- */
39543
- nameWithGranularity: dimension.fieldName + (granularity ? `:${granularity}` : ""),
39544
- /**
39545
- * Get the name of the field of the dimension
39546
- * e.g. "stage_id" -> "stage_id", "create_date:month" -> "create_date"
39547
- */
39548
- fieldName: dimension.fieldName,
39549
- /**
39550
- * Get the aggregate operator of the dimension
39551
- * e.g. "stage_id" -> undefined, "create_date:month" -> "month"
39552
- */
39553
- granularity,
39554
- /**
39555
- * Get the type of the field of the dimension
39556
- * e.g. "stage_id" -> "many2one", "create_date:month" -> "date"
39557
- */
39558
- type: field?.isCustomField ? "custom" : type,
39559
- order: dimension.order,
39560
- isValid: !!field,
39561
- isCustomField: !!field?.isCustomField,
39562
- customGroups: field?.customGroups,
39563
- parentField: field?.parentField
39564
- };
39565
- }
39566
- createPivotFilter(fields, filter) {
39567
- const field = fields[filter.fieldName];
39568
- return {
39569
- ...filter,
39570
- displayName: field?.name ?? filter.fieldName,
39571
- isValid: !!field
39572
- };
39573
- }
39574
- };
39575
-
39576
- //#endregion
39577
- //#region src/helpers/pivot/spreadsheet_pivot/runtime_definition_spreadsheet_pivot.ts
39578
- var SpreadsheetPivotRuntimeDefinition = class extends PivotRuntimeDefinition {
39579
- range;
39580
- constructor(definition, fields, getters) {
39581
- super(definition, fields);
39582
- if (definition.dataSet) {
39583
- const { sheetId, zone } = definition.dataSet;
39584
- this.range = getters.getRangeFromZone(sheetId, zone);
39585
- }
39586
- }
39587
- };
39588
-
39589
39295
  //#endregion
39590
39296
  //#region src/helpers/filter_helpers.ts
39591
39297
  /**
@@ -41137,10 +40843,6 @@ var PivotSidePanelStore = class extends SpreadsheetStore {
41137
40843
  //#region src/components/side_panel/pivot/pivot_side_panel/pivot_spreadsheet_side_panel/pivot_spreadsheet_side_panel.ts
41138
40844
  var PivotSpreadsheetSidePanel = class extends Component$1 {
41139
40845
  static template = "o-spreadsheet-PivotSpreadsheetSidePanel";
41140
- static props = {
41141
- pivotId: String,
41142
- onCloseSidePanel: Function
41143
- };
41144
40846
  static components = {
41145
40847
  PivotLayoutConfigurator,
41146
40848
  Section,
@@ -41151,6 +40853,10 @@ var PivotSpreadsheetSidePanel = class extends Component$1 {
41151
40853
  AddDimensionButton,
41152
40854
  PivotFilterEditor
41153
40855
  };
40856
+ props = props({
40857
+ pivotId: types$1.UID(),
40858
+ onCloseSidePanel: types$1.function([])
40859
+ });
41154
40860
  store;
41155
40861
  state;
41156
40862
  pivotSidePanelRef = signal(null);
@@ -42385,23 +42091,14 @@ function drawTexts(ctx, tableStyle, params) {
42385
42091
  var TableStylePreview = class extends Component$1 {
42386
42092
  static template = "o-spreadsheet-TableStylePreview";
42387
42093
  static components = { MenuPopover };
42388
- static props = {
42389
- tableConfig: Object,
42390
- tableStyle: Object,
42391
- type: String,
42392
- styleId: {
42393
- type: String,
42394
- optional: true
42395
- },
42396
- selected: {
42397
- type: Boolean,
42398
- optional: true
42399
- },
42400
- onClick: {
42401
- type: Function,
42402
- optional: true
42403
- }
42404
- };
42094
+ props = props({
42095
+ tableConfig: types$1.TableConfig(),
42096
+ tableStyle: types$1.TableStyle(),
42097
+ type: types$1.or([types$1.literal("table"), types$1.literal("pivot")]),
42098
+ "styleId?": types$1.string(),
42099
+ "selected?": types$1.boolean(),
42100
+ "onClick?": types$1.function([])
42101
+ });
42405
42102
  canvasRef = signal(null);
42406
42103
  menu = proxy({
42407
42104
  isOpen: false,
@@ -42487,21 +42184,15 @@ var TableStylesPopover = class extends Component$1 {
42487
42184
  Popover,
42488
42185
  TableStylePreview
42489
42186
  };
42490
- static props = {
42491
- tableConfig: Object,
42492
- popoverProps: {
42493
- type: Object,
42494
- optional: true
42495
- },
42496
- closePopover: Function,
42497
- onStylePicked: Function,
42498
- selectedStyleId: {
42499
- type: String,
42500
- optional: true
42501
- },
42502
- tableStyles: Object,
42503
- type: String
42504
- };
42187
+ props = props({
42188
+ tableConfig: types$1.object({}),
42189
+ "popoverProps?": types$1.object({}),
42190
+ closePopover: types$1.function([]),
42191
+ onStylePicked: types$1.function([types$1.string()]),
42192
+ "selectedStyleId?": types$1.string(),
42193
+ tableStyles: types$1.RecordOf(),
42194
+ type: types$1.or([types$1.literal("table"), types$1.literal("pivot")])
42195
+ });
42505
42196
  tableStyleListRef = signal(null);
42506
42197
  state = proxy({ selectedCategory: this.initialSelectedCategory });
42507
42198
  setup() {
@@ -42541,12 +42232,12 @@ var TableStylePicker = class extends Component$1 {
42541
42232
  TableStylesPopover,
42542
42233
  TableStylePreview
42543
42234
  };
42544
- static props = {
42545
- tableConfig: Object,
42546
- onStylePicked: Function,
42547
- tableStyles: Object,
42548
- type: String
42549
- };
42235
+ props = props({
42236
+ tableConfig: types$1.TableConfig(),
42237
+ onStylePicked: types$1.function([types$1.string()]),
42238
+ tableStyles: types$1.RecordOf(),
42239
+ type: types$1.or([types$1.literal("table"), types$1.literal("pivot")])
42240
+ });
42550
42241
  state = proxy({ popoverProps: void 0 });
42551
42242
  getDisplayedTableStyles() {
42552
42243
  const allStyles = this.props.tableStyles;
@@ -42587,13 +42278,13 @@ var TableStylePicker = class extends Component$1 {
42587
42278
  //#region src/components/side_panel/pivot/pivot_side_panel/pivot_design_panel/pivot_design_panel.ts
42588
42279
  var PivotDesignPanel = class extends Component$1 {
42589
42280
  static template = "o-spreadsheet-PivotDesignPanel";
42590
- static props = { pivotId: String };
42591
42281
  static components = {
42592
42282
  Section,
42593
42283
  Checkbox,
42594
42284
  NumberInput,
42595
42285
  TableStylePicker
42596
42286
  };
42287
+ props = props({ pivotId: types$1.UID() });
42597
42288
  store;
42598
42289
  setup() {
42599
42290
  this.store = useLocalStore(PivotSidePanelStore, this.props.pivotId, "neverDefer");
@@ -42642,20 +42333,16 @@ var PivotDesignPanel = class extends Component$1 {
42642
42333
  //#region src/components/side_panel/pivot/pivot_side_panel/pivot_side_panel.ts
42643
42334
  var PivotSidePanel = class extends Component$1 {
42644
42335
  static template = "o-spreadsheet-PivotSidePanel";
42645
- static props = {
42646
- pivotId: String,
42647
- onCloseSidePanel: Function,
42648
- openTab: {
42649
- type: String,
42650
- optional: true
42651
- }
42652
- };
42653
- static defaultProps = { openTab: "configuration" };
42654
42336
  static components = {
42655
42337
  PivotLayoutConfigurator,
42656
42338
  Section,
42657
42339
  PivotDesignPanel
42658
42340
  };
42341
+ props = props({
42342
+ pivotId: types$1.UID(),
42343
+ onCloseSidePanel: types$1.function([]),
42344
+ "openTab?": types$1.or([types$1.literal("configuration"), types$1.literal("design")])
42345
+ }, { openTab: "configuration" });
42659
42346
  state = proxy({ panel: this.props.openTab || "configuration" });
42660
42347
  setup() {
42661
42348
  useHighlights(this);
@@ -42685,7 +42372,7 @@ var RemoveDuplicatesPanel = class extends Component$1 {
42685
42372
  Section,
42686
42373
  Checkbox
42687
42374
  };
42688
- static props = { onCloseSidePanel: Function };
42375
+ props = props({ onCloseSidePanel: types$1.function([]) });
42689
42376
  state = proxy({
42690
42377
  hasHeader: false,
42691
42378
  columns: {}
@@ -42769,7 +42456,7 @@ var SettingsPanel = class extends Component$1 {
42769
42456
  BadgeSelection,
42770
42457
  Select
42771
42458
  };
42772
- static props = { onCloseSidePanel: Function };
42459
+ props = props({ onCloseSidePanel: types$1.function([]) });
42773
42460
  loadedLocales = [];
42774
42461
  setup() {
42775
42462
  onWillStart(() => this.loadLocales());
@@ -42887,7 +42574,7 @@ var SplitIntoColumnsPanel = class extends Component$1 {
42887
42574
  Checkbox,
42888
42575
  Select
42889
42576
  };
42890
- static props = { onCloseSidePanel: Function };
42577
+ props = props({ onCloseSidePanel: types$1.function([]) });
42891
42578
  state = proxy({
42892
42579
  separatorValue: "auto",
42893
42580
  addNewColumns: false,
@@ -42963,10 +42650,10 @@ var TablePanel = class extends Component$1 {
42963
42650
  Section,
42964
42651
  NumberInput
42965
42652
  };
42966
- static props = {
42967
- onCloseSidePanel: Function,
42968
- table: Object
42969
- };
42653
+ props = props({
42654
+ onCloseSidePanel: types$1.function([]),
42655
+ table: types$1.CoreTable()
42656
+ });
42970
42657
  state;
42971
42658
  setup() {
42972
42659
  const sheetId = this.env.model.getters.getActiveSheetId();
@@ -43123,17 +42810,11 @@ var TableStyleEditorPanel = class extends Component$1 {
43123
42810
  RoundColorPicker,
43124
42811
  TableStylePreview
43125
42812
  };
43126
- static props = {
43127
- onCloseSidePanel: Function,
43128
- onStylePicked: {
43129
- type: Function,
43130
- optional: true
43131
- },
43132
- styleId: {
43133
- type: String,
43134
- optional: true
43135
- }
43136
- };
42813
+ props = props({
42814
+ onCloseSidePanel: types$1.function([]),
42815
+ "onStylePicked?": types$1.function([types$1.string()]),
42816
+ "styleId?": types$1.string()
42817
+ });
43137
42818
  state = proxy(this.getInitialState());
43138
42819
  setup() {
43139
42820
  useExternalListener$1(window, "click", () => this.state.pickerOpened = false);
@@ -45463,10 +45144,10 @@ function adjustIndexWithinBounds(index, position, max) {
45463
45144
  //#region src/components/autofill/autofill.ts
45464
45145
  var Autofill = class extends Component$1 {
45465
45146
  static template = "o-spreadsheet-Autofill";
45466
- static props = {
45467
- position: Object,
45468
- isVisible: Boolean
45469
- };
45147
+ props = props({
45148
+ position: types$1.DOMCoordinates(),
45149
+ isVisible: types$1.boolean()
45150
+ });
45470
45151
  state = proxy({
45471
45152
  position: {
45472
45153
  x: 0,
@@ -45541,7 +45222,7 @@ var Autofill = class extends Component$1 {
45541
45222
  }
45542
45223
  };
45543
45224
  var TooltipComponent = class extends Component$1 {
45544
- static props = { content: String };
45225
+ props = props({ content: types$1.string() });
45545
45226
  static template = xml`
45546
45227
  <div t-out="this.props.content"/>
45547
45228
  `;
@@ -45551,13 +45232,13 @@ var TooltipComponent = class extends Component$1 {
45551
45232
  //#region src/components/collaborative_client_tag/collaborative_client_tag.ts
45552
45233
  var ClientTag = class extends Component$1 {
45553
45234
  static template = "o-spreadsheet-ClientTag";
45554
- static props = {
45555
- active: Boolean,
45556
- name: String,
45557
- color: String,
45558
- col: Number,
45559
- row: Number
45560
- };
45235
+ props = props({
45236
+ active: types$1.boolean(),
45237
+ name: types$1.string(),
45238
+ color: types$1.Color(),
45239
+ col: types$1.HeaderIndex(),
45240
+ row: types$1.HeaderIndex()
45241
+ });
45561
45242
  get tagStyle() {
45562
45243
  const { col, row, color } = this.props;
45563
45244
  const { height } = this.env.model.getters.getSheetViewDimensionWithHeaders();
@@ -46131,11 +45812,11 @@ const GRID_CELL_REFERENCE_TOP_OFFSET = 28;
46131
45812
  */
46132
45813
  var GridComposer = class extends Component$1 {
46133
45814
  static template = "o-spreadsheet-GridComposer";
46134
- static props = {
46135
- gridDims: Object,
46136
- onInputContextMenu: Function
46137
- };
46138
45815
  static components = { Composer };
45816
+ props = props({
45817
+ gridDims: types$1.DOMDimension(),
45818
+ onInputContextMenu: types$1.function([types$1.instanceOf(MouseEvent)])
45819
+ });
46139
45820
  rect = this.defaultRect;
46140
45821
  isEditing = false;
46141
45822
  isCellReferenceVisible = false;
@@ -46595,7 +46276,6 @@ function getAxis(getters, figureUI, dnd, axisType) {
46595
46276
  */
46596
46277
  var FiguresContainer = class extends Component$1 {
46597
46278
  static template = "o-spreadsheet-FiguresContainer";
46598
- static props = {};
46599
46279
  static components = { FigureComponent };
46600
46280
  dnd = proxy({
46601
46281
  draggedFigure: void 0,
@@ -46946,7 +46626,6 @@ var FiguresContainer = class extends Component$1 {
46946
46626
  //#region src/components/grid_add_rows_footer/grid_add_rows_footer.ts
46947
46627
  var GridAddRowsFooter = class extends Component$1 {
46948
46628
  static template = "o-spreadsheet-GridAddRowsFooter";
46949
- static props = {};
46950
46629
  static components = { ValidationMessages };
46951
46630
  DOMFocusableElementStore;
46952
46631
  inputRef = signal(null);
@@ -47254,40 +46933,32 @@ function useCellHovered(env, gridRef) {
47254
46933
  }
47255
46934
  var GridOverlay = class extends Component$1 {
47256
46935
  static template = "o-spreadsheet-GridOverlay";
47257
- static props = {
47258
- onCellDoubleClicked: {
47259
- type: Function,
47260
- optional: true
47261
- },
47262
- onCellClicked: {
47263
- type: Function,
47264
- optional: true
47265
- },
47266
- onCellRightClicked: {
47267
- type: Function,
47268
- optional: true
47269
- },
47270
- onGridResized: {
47271
- type: Function,
47272
- optional: true
47273
- },
47274
- onGridMoved: Function,
47275
- gridOverlayDimensions: String,
47276
- slots: {
47277
- type: Object,
47278
- optional: true
47279
- }
47280
- };
47281
46936
  static components = {
47282
46937
  FiguresContainer,
47283
46938
  GridAddRowsFooter
47284
46939
  };
47285
- static defaultProps = {
46940
+ props = props({
46941
+ "onCellDoubleClicked?": types$1.function([types$1.HeaderIndex(), types$1.HeaderIndex()]),
46942
+ "onCellClicked?": types$1.function([
46943
+ types$1.HeaderIndex(),
46944
+ types$1.HeaderIndex(),
46945
+ types$1.GridClickModifiers(),
46946
+ types$1.ZoomedMouseEvent()
46947
+ ]),
46948
+ "onCellRightClicked?": types$1.function([
46949
+ types$1.HeaderIndex(),
46950
+ types$1.HeaderIndex(),
46951
+ types$1.DOMCoordinates()
46952
+ ]),
46953
+ "onGridResized?": types$1.function([]),
46954
+ onGridMoved: types$1.function([types$1.Pixel(), types$1.Pixel()]),
46955
+ gridOverlayDimensions: types$1.string()
46956
+ }, {
47286
46957
  onCellDoubleClicked: () => {},
47287
46958
  onCellClicked: () => {},
47288
46959
  onCellRightClicked: () => {},
47289
46960
  onGridResized: () => {}
47290
- };
46961
+ });
47291
46962
  gridOverlayRef = signal(null);
47292
46963
  cellPopovers;
47293
46964
  paintFormatStore;
@@ -47397,12 +47068,12 @@ var GridOverlay = class extends Component$1 {
47397
47068
  //#region src/components/grid_popover/grid_popover.ts
47398
47069
  var GridPopover = class extends Component$1 {
47399
47070
  static template = "o-spreadsheet-GridPopover";
47400
- static props = {
47401
- onClosePopover: Function,
47402
- onMouseWheel: Function,
47403
- gridRect: Object
47404
- };
47405
47071
  static components = { Popover };
47072
+ props = props({
47073
+ onClosePopover: types$1.function([]),
47074
+ onMouseWheel: types$1.function([types$1.instanceOf(WheelEvent)]),
47075
+ gridRect: types$1.Rect()
47076
+ });
47406
47077
  cellPopovers;
47407
47078
  setup() {
47408
47079
  this.cellPopovers = useStore(CellPopoverStore);
@@ -47426,15 +47097,14 @@ var GridPopover = class extends Component$1 {
47426
47097
  //#region src/components/headers_overlay/unhide_headers.ts
47427
47098
  var UnhideRowHeaders = class extends Component$1 {
47428
47099
  static template = "o-spreadsheet-UnhideRowHeaders";
47429
- static props = {
47430
- headersGroups: Array,
47431
- headerRange: Object,
47432
- offset: {
47433
- type: Number,
47434
- optional: true
47435
- }
47436
- };
47437
- static defaultProps = { offset: 0 };
47100
+ props = props({
47101
+ headersGroups: types$1.array(),
47102
+ headerRange: types$1.object({
47103
+ start: types$1.HeaderIndex(),
47104
+ end: types$1.HeaderIndex()
47105
+ }),
47106
+ "offset?": types$1.number()
47107
+ }, { offset: 0 });
47438
47108
  get sheetId() {
47439
47109
  return this.env.model.getters.getActiveSheetId();
47440
47110
  }
@@ -47470,15 +47140,14 @@ var UnhideRowHeaders = class extends Component$1 {
47470
47140
  };
47471
47141
  var UnhideColumnHeaders = class extends Component$1 {
47472
47142
  static template = "o-spreadsheet-UnhideColumnHeaders";
47473
- static props = {
47474
- headersGroups: Array,
47475
- headerRange: Object,
47476
- offset: {
47477
- type: Number,
47478
- optional: true
47479
- }
47480
- };
47481
- static defaultProps = { offset: 0 };
47143
+ props = props({
47144
+ headersGroups: types$1.array(),
47145
+ headerRange: types$1.object({
47146
+ start: types$1.HeaderIndex(),
47147
+ end: types$1.HeaderIndex()
47148
+ }),
47149
+ "offset?": types$1.number()
47150
+ }, { offset: 0 });
47482
47151
  get sheetId() {
47483
47152
  return this.env.model.getters.getActiveSheetId();
47484
47153
  }
@@ -47509,8 +47178,13 @@ var UnhideColumnHeaders = class extends Component$1 {
47509
47178
 
47510
47179
  //#endregion
47511
47180
  //#region src/components/headers_overlay/headers_overlay.ts
47181
+ const resizerPropsDefinition = { onOpenContextMenu: types$1.function([
47182
+ types$1.ContextMenuType(),
47183
+ types$1.Pixel(),
47184
+ types$1.Pixel()
47185
+ ]) };
47512
47186
  var AbstractResizer = class extends Component$1 {
47513
- static props = { onOpenContextMenu: Function };
47187
+ props = props(resizerPropsDefinition);
47514
47188
  composerFocusStore;
47515
47189
  PADDING = 0;
47516
47190
  MAX_SIZE_MARGIN = 0;
@@ -47708,7 +47382,6 @@ var AbstractResizer = class extends Component$1 {
47708
47382
  }
47709
47383
  };
47710
47384
  var ColResizer = class extends AbstractResizer {
47711
- static props = { onOpenContextMenu: Function };
47712
47385
  static template = "o-spreadsheet-ColResizer";
47713
47386
  static components = { UnhideColumnHeaders };
47714
47387
  colResizerRef = signal(null);
@@ -47843,7 +47516,6 @@ var ColResizer = class extends AbstractResizer {
47843
47516
  }
47844
47517
  };
47845
47518
  var RowResizer = class extends AbstractResizer {
47846
- static props = { onOpenContextMenu: Function };
47847
47519
  static template = "o-spreadsheet-RowResizer";
47848
47520
  static components = { UnhideRowHeaders };
47849
47521
  rowResizerRef = signal(null);
@@ -47974,8 +47646,8 @@ var RowResizer = class extends AbstractResizer {
47974
47646
  }
47975
47647
  };
47976
47648
  var HeadersOverlay = class extends Component$1 {
47977
- static props = { onOpenContextMenu: Function };
47978
47649
  static template = "o-spreadsheet-HeadersOverlay";
47650
+ props = props(resizerPropsDefinition);
47979
47651
  static components = {
47980
47652
  ColResizer,
47981
47653
  RowResizer
@@ -48963,12 +48635,17 @@ function useWheelHandler(handler) {
48963
48635
  //#region src/components/highlight/border/border.ts
48964
48636
  var Border = class extends Component$1 {
48965
48637
  static template = "o-spreadsheet-Border";
48966
- static props = {
48967
- zone: Object,
48968
- orientation: String,
48969
- isMoving: Boolean,
48970
- onMoveHighlight: Function
48971
- };
48638
+ props = props({
48639
+ zone: types$1.Zone(),
48640
+ orientation: types$1.or([
48641
+ types$1.literal("n"),
48642
+ types$1.literal("s"),
48643
+ types$1.literal("w"),
48644
+ types$1.literal("e")
48645
+ ]),
48646
+ isMoving: types$1.boolean(),
48647
+ onMoveHighlight: types$1.function([types$1.instanceOf(PointerEvent)])
48648
+ });
48972
48649
  get style() {
48973
48650
  const isTop = [
48974
48651
  "n",
@@ -49011,13 +48688,26 @@ var Border = class extends Component$1 {
49011
48688
  const MOBILE_HANDLER_WIDTH = 40;
49012
48689
  var Corner = class extends Component$1 {
49013
48690
  static template = "o-spreadsheet-Corner";
49014
- static props = {
49015
- zone: Object,
49016
- color: String,
49017
- orientation: String,
49018
- isResizing: Boolean,
49019
- onResizeHighlight: Function
49020
- };
48691
+ props = props({
48692
+ zone: types$1.Zone(),
48693
+ color: types$1.Color(),
48694
+ orientation: types$1.or([
48695
+ types$1.literal("nw"),
48696
+ types$1.literal("ne"),
48697
+ types$1.literal("sw"),
48698
+ types$1.literal("se"),
48699
+ types$1.literal("n"),
48700
+ types$1.literal("s"),
48701
+ types$1.literal("e"),
48702
+ types$1.literal("w")
48703
+ ]),
48704
+ isResizing: types$1.boolean(),
48705
+ onResizeHighlight: types$1.function([
48706
+ types$1.instanceOf(PointerEvent),
48707
+ types$1.ResizeDirection(),
48708
+ types$1.ResizeDirection()
48709
+ ])
48710
+ });
49021
48711
  dirX;
49022
48712
  dirY;
49023
48713
  setup() {
@@ -49072,14 +48762,14 @@ function orientationToDir(or) {
49072
48762
  //#region src/components/highlight/highlight/highlight.ts
49073
48763
  var Highlight = class extends Component$1 {
49074
48764
  static template = "o-spreadsheet-Highlight";
49075
- static props = {
49076
- range: Object,
49077
- color: String
49078
- };
49079
48765
  static components = {
49080
48766
  Corner,
49081
48767
  Border
49082
48768
  };
48769
+ props = props({
48770
+ range: types$1.Range(),
48771
+ color: types$1.Color()
48772
+ });
49083
48773
  highlightState = proxy({ shiftingMode: "none" });
49084
48774
  dragNDropGrid = useDragAndDropBeyondTheViewport(this.env);
49085
48775
  get cornerOrientations() {
@@ -49220,20 +48910,20 @@ var ScrollBar = class extends Component$1 {
49220
48910
  <div t-att-style="this.sizeCss"/>
49221
48911
  </div>
49222
48912
  `;
48913
+ props = props({
48914
+ "width?": types$1.Pixel(),
48915
+ "height?": types$1.Pixel(),
48916
+ direction: types$1.customValidator(types$1.string(), (direction) => ["horizontal", "vertical"].includes(direction)),
48917
+ position: types$1.CSSProperties(),
48918
+ offset: types$1.Pixel(),
48919
+ onScroll: types$1.function([types$1.Pixel()])
48920
+ }, {
48921
+ width: 1,
48922
+ height: 1
48923
+ });
49223
48924
  scrollbarRef = signal(null);
49224
48925
  scrollbar;
49225
48926
  setup() {
49226
- this.props = props({
49227
- "width?": types.number(),
49228
- "height?": types.number(),
49229
- direction: types.customValidator(types.string(), (direction) => ["horizontal", "vertical"].includes(direction)),
49230
- position: types.object({}),
49231
- offset: types.number(),
49232
- onScroll: types.function()
49233
- }, {
49234
- width: 1,
49235
- height: 1
49236
- });
49237
48927
  this.scrollbar = new ScrollBar$1(this.scrollbarRef(), this.props.direction);
49238
48928
  onMounted(() => {
49239
48929
  this.scrollbar.el = this.scrollbarRef();
@@ -49259,10 +48949,6 @@ var ScrollBar = class extends Component$1 {
49259
48949
  //#endregion
49260
48950
  //#region src/components/scrollbar/scrollbar_horizontal.ts
49261
48951
  var HorizontalScrollBar = class extends Component$1 {
49262
- static props = { leftOffset: {
49263
- type: Number,
49264
- optional: true
49265
- } };
49266
48952
  static components = { ScrollBar };
49267
48953
  static template = xml`
49268
48954
  <ScrollBar
@@ -49273,7 +48959,7 @@ var HorizontalScrollBar = class extends Component$1 {
49273
48959
  direction="'horizontal'"
49274
48960
  onScroll.bind="this.onScroll"
49275
48961
  />`;
49276
- static defaultProps = { leftOffset: 0 };
48962
+ props = props({ "leftOffset?": types$1.number() }, { leftOffset: 0 });
49277
48963
  get offset() {
49278
48964
  return this.env.model.getters.getActiveSheetScrollInfo().scrollX;
49279
48965
  }
@@ -49306,10 +48992,6 @@ var HorizontalScrollBar = class extends Component$1 {
49306
48992
  //#endregion
49307
48993
  //#region src/components/scrollbar/scrollbar_vertical.ts
49308
48994
  var VerticalScrollBar = class extends Component$1 {
49309
- static props = { topOffset: {
49310
- type: Number,
49311
- optional: true
49312
- } };
49313
48995
  static components = { ScrollBar };
49314
48996
  static template = xml`
49315
48997
  <ScrollBar
@@ -49320,7 +49002,7 @@ var VerticalScrollBar = class extends Component$1 {
49320
49002
  direction="'vertical'"
49321
49003
  onScroll.bind="(offset) => this.onScroll(offset)"
49322
49004
  />`;
49323
- static defaultProps = { topOffset: 0 };
49005
+ props = props({ "topOffset?": types$1.number() }, { topOffset: 0 });
49324
49006
  get offset() {
49325
49007
  return this.env.model.getters.getActiveSheetScrollInfo().scrollY;
49326
49008
  }
@@ -49354,7 +49036,6 @@ var VerticalScrollBar = class extends Component$1 {
49354
49036
  //#region src/components/selection/selection.ts
49355
49037
  var Selection = class extends Component$1 {
49356
49038
  static template = "o-spreadsheet-Selection";
49357
- static props = {};
49358
49039
  static components = { Highlight };
49359
49040
  get highlightProps() {
49360
49041
  const sheetId = this.env.model.getters.getActiveSheetId();
@@ -49372,7 +49053,7 @@ const SIZE = 3;
49372
49053
  const COLOR = "#777";
49373
49054
  var TableResizer = class extends Component$1 {
49374
49055
  static template = "o-spreadsheet-TableResizer";
49375
- static props = { table: Object };
49056
+ props = props({ table: types$1.Table() });
49376
49057
  state = proxy({ highlightZone: void 0 });
49377
49058
  dragNDropGrid = useDragAndDropBeyondTheViewport(this.env);
49378
49059
  setup() {
@@ -49445,10 +49126,6 @@ const registries$1 = {
49445
49126
  };
49446
49127
  var Grid = class extends Component$1 {
49447
49128
  static template = "o-spreadsheet-Grid";
49448
- static props = {
49449
- exposeFocus: Function,
49450
- getGridSize: Function
49451
- };
49452
49129
  static components = {
49453
49130
  GridComposer,
49454
49131
  GridOverlay,
@@ -49464,6 +49141,10 @@ var Grid = class extends Component$1 {
49464
49141
  TableResizer,
49465
49142
  Selection
49466
49143
  };
49144
+ props = props({
49145
+ exposeFocus: types$1.function([types$1.function([])]),
49146
+ getGridSize: types$1.function([], types$1.DOMDimension())
49147
+ });
49467
49148
  HEADER_HEIGHT = 26;
49468
49149
  HEADER_WIDTH = 48;
49469
49150
  menuState;
@@ -50103,10 +49784,10 @@ supportedPivotPositionalFormulaRegistry.add("SPREADSHEET", false);
50103
49784
  //#region src/components/dashboard/clickable_cell_sort_icon/clickable_cell_sort_icon.ts
50104
49785
  var ClickableCellSortIcon = class extends Component$1 {
50105
49786
  static template = "o-spreadsheet-ClickableCellSortIcon";
50106
- static props = {
50107
- position: Object,
50108
- sortDirection: String
50109
- };
49787
+ props = props({
49788
+ position: types$1.CellPosition(),
49789
+ sortDirection: types$1.or([types$1.SortDirection, types$1.literal("none")])
49790
+ });
50110
49791
  hoveredTableStore;
50111
49792
  setup() {
50112
49793
  this.hoveredTableStore = useStore(HoveredTableStore);
@@ -50139,7 +49820,6 @@ var ClickableCellSortIcon = class extends Component$1 {
50139
49820
  //#region src/components/full_screen_figure/full_screen_figure.ts
50140
49821
  var FullScreenFigure = class extends Component$1 {
50141
49822
  static template = "o-spreadsheet-FullScreenFigure";
50142
- static props = {};
50143
49823
  static components = { ChartFigure };
50144
49824
  fullScreenFigureStore;
50145
49825
  fullScreenFigureRef = signal(null);
@@ -50179,10 +49859,10 @@ var FullScreenFigure = class extends Component$1 {
50179
49859
  var PivotHTMLRenderer = class extends Component$1 {
50180
49860
  static template = "o_spreadsheet.PivotHTMLRenderer";
50181
49861
  static components = { Checkbox };
50182
- static props = {
50183
- pivotId: String,
50184
- onCellClicked: Function
50185
- };
49862
+ props = props({
49863
+ pivotId: types$1.UID(),
49864
+ onCellClicked: types$1.function([types$1.string()])
49865
+ });
50186
49866
  pivot = this.env.model.getters.getPivot(this.props.pivotId);
50187
49867
  data = {
50188
49868
  columns: [],
@@ -60717,7 +60397,8 @@ const invalidateTableStyleCommandsSet = new Set([
60717
60397
  "REMOVE_TABLE",
60718
60398
  "RESIZE_TABLE",
60719
60399
  "CREATE_TABLE_STYLE",
60720
- "REMOVE_TABLE_STYLE"
60400
+ "REMOVE_TABLE_STYLE",
60401
+ "DELETE_CONTENT"
60721
60402
  ]);
60722
60403
  function doesCommandInvalidatesTableStyle(cmd) {
60723
60404
  return invalidateTableStyleCommandsSet.has(cmd.type);
@@ -64520,7 +64201,7 @@ var ClipboardPlugin = class extends UIPlugin {
64520
64201
  if (this.getters.getFigure(figureSheetId, figureId).tag === "image") innerHTML = await this.craftImageHTML(figureId);
64521
64202
  else innerHTML = " ";
64522
64203
  } else innerHTML = " ";
64523
- else if (cells.length === 1 && cells[0].length === 1) innerHTML = `${this.getters.getCellText(cells[0][0].position)}`;
64204
+ else if (cells.length === 1 && cells[0].length === 1) innerHTML = xmlEscape(`${this.getters.getCellText(cells[0][0].position)}`);
64524
64205
  else if (!cells[0][0]) return "";
64525
64206
  else {
64526
64207
  let htmlTable = `<table border="1" style="border-collapse:collapse">`;
@@ -67877,20 +67558,22 @@ const RIPPLE_KEY_FRAMES = [
67877
67558
  ];
67878
67559
  var RippleEffect = class extends Component$1 {
67879
67560
  static template = "o-spreadsheet-RippleEffect";
67880
- static props = {
67881
- x: String,
67882
- y: String,
67883
- color: String,
67884
- opacity: Number,
67885
- duration: Number,
67886
- width: Number,
67887
- height: Number,
67888
- offsetY: Number,
67889
- offsetX: Number,
67890
- allowOverflow: Boolean,
67891
- onAnimationEnd: Function,
67892
- style: String
67893
- };
67561
+ props = props({
67562
+ x: types.string(),
67563
+ y: types.string(),
67564
+ color: types.string(),
67565
+ opacity: types.number(),
67566
+ duration: types.number(),
67567
+ /** Width of the ripple. Defaults to the width of the element the ripple is on (without margins). */
67568
+ width: types.number(),
67569
+ /** Height of the ripple. Defaults to the height of the element the ripple is on (without margins). */
67570
+ height: types.number(),
67571
+ offsetY: types.number(),
67572
+ offsetX: types.number(),
67573
+ allowOverflow: types.boolean(),
67574
+ onAnimationEnd: types.function(),
67575
+ style: types.string()
67576
+ });
67894
67577
  rippleRef = signal(null);
67895
67578
  setup() {
67896
67579
  let animation = void 0;
@@ -67927,66 +67610,31 @@ var RippleEffect = class extends Component$1 {
67927
67610
  };
67928
67611
  var Ripple = class extends Component$1 {
67929
67612
  static template = "o-spreadsheet-Ripple";
67930
- static props = {
67931
- color: {
67932
- type: String,
67933
- optional: true
67934
- },
67935
- opacity: {
67936
- type: Number,
67937
- optional: true
67938
- },
67939
- duration: {
67940
- type: Number,
67941
- optional: true
67942
- },
67943
- ignoreClickPosition: {
67944
- type: Boolean,
67945
- optional: true
67946
- },
67947
- width: {
67948
- type: Number,
67949
- optional: true
67950
- },
67951
- height: {
67952
- type: Number,
67953
- optional: true
67954
- },
67955
- offsetY: {
67956
- type: Number,
67957
- optional: true
67958
- },
67959
- offsetX: {
67960
- type: Number,
67961
- optional: true
67962
- },
67963
- allowOverflow: {
67964
- type: Boolean,
67965
- optional: true
67966
- },
67967
- enabled: {
67968
- type: Boolean,
67969
- optional: true
67970
- },
67971
- onAnimationEnd: {
67972
- type: Function,
67973
- optional: true
67974
- },
67975
- slots: Object,
67976
- class: {
67977
- type: String,
67978
- optional: true
67979
- }
67980
- };
67981
67613
  static components = { RippleEffect };
67982
- static defaultProps = {
67614
+ props = props({
67615
+ "color?": types.string(),
67616
+ "opacity?": types.number(),
67617
+ "duration?": types.number(),
67618
+ /** If true, the ripple will play from the element center instead of the position of the click */
67619
+ "ignoreClickPosition?": types.boolean(),
67620
+ /** Width of the ripple. Defaults to the width of the element the ripple is on (without margins). */
67621
+ "width?": types.number(),
67622
+ /** Height of the ripple. Defaults to the height of the element the ripple is on (without margins). */
67623
+ "height?": types.number(),
67624
+ "offsetY?": types.number(),
67625
+ "offsetX?": types.number(),
67626
+ "allowOverflow?": types.boolean(),
67627
+ "enabled?": types.boolean(),
67628
+ "onAnimationEnd?": types.function(),
67629
+ "class?": types.string()
67630
+ }, {
67983
67631
  color: "#aaaaaa",
67984
67632
  opacity: .4,
67985
67633
  duration: 800,
67986
67634
  enabled: true,
67987
67635
  onAnimationEnd: () => {},
67988
67636
  class: ""
67989
- };
67637
+ });
67990
67638
  childContainerRef = signal(null);
67991
67639
  state = proxy({ ripples: [] });
67992
67640
  currentId = 1;
@@ -68234,26 +67882,19 @@ const getSheetLockAnimation = (duration, iterations) => {
68234
67882
  };
68235
67883
  var BottomBarSheet = class extends Component$1 {
68236
67884
  static template = "o-spreadsheet-BottomBarSheet";
68237
- static props = {
68238
- sheetId: String,
68239
- openContextMenu: Function,
68240
- style: {
68241
- type: String,
68242
- optional: true
68243
- },
68244
- onMouseDown: {
68245
- type: Function,
68246
- optional: true
68247
- }
68248
- };
68249
67885
  static components = {
68250
67886
  Ripple,
68251
67887
  ColorPicker
68252
67888
  };
68253
- static defaultProps = {
67889
+ props = props({
67890
+ sheetId: types.string(),
67891
+ openContextMenu: types.function([types.instanceOf(MenuItemRegistry), types.instanceOf(MouseEvent)]),
67892
+ "style?": types.string(),
67893
+ "onMouseDown?": types.function([types.instanceOf(PointerEvent)])
67894
+ }, {
68254
67895
  onMouseDown: () => {},
68255
67896
  style: ""
68256
- };
67897
+ });
68257
67898
  state = proxy({
68258
67899
  isEditing: false,
68259
67900
  pickerOpened: false
@@ -68514,11 +68155,15 @@ var AggregateStatisticsStore = class extends SpreadsheetStore {
68514
68155
  //#region src/components/bottom_bar/bottom_bar_statistic/bottom_bar_statistic.ts
68515
68156
  var BottomBarStatistic = class extends Component$1 {
68516
68157
  static template = "o-spreadsheet-BottomBarStatistic";
68517
- static props = {
68518
- openContextMenu: Function,
68519
- closeContextMenu: Function
68520
- };
68521
68158
  static components = { Ripple };
68159
+ props = props({
68160
+ openContextMenu: types.function([
68161
+ types.number(),
68162
+ types.number(),
68163
+ types.instanceOf(MenuItemRegistry)
68164
+ ]),
68165
+ closeContextMenu: types.function([])
68166
+ });
68522
68167
  state = proxy({ selectedStatisticFn: "" });
68523
68168
  store;
68524
68169
  setup() {
@@ -68561,7 +68206,7 @@ var BottomBarStatistic = class extends Component$1 {
68561
68206
  const MENU_MAX_HEIGHT = 250;
68562
68207
  var BottomBar = class extends Component$1 {
68563
68208
  static template = "o-spreadsheet-BottomBar";
68564
- static props = { onClick: Function };
68209
+ props = props({ onClick: types.function([]) });
68565
68210
  static components = {
68566
68211
  MenuPopover,
68567
68212
  Ripple,
@@ -68837,7 +68482,6 @@ var ClickableCellsStore = class extends SpreadsheetStore {
68837
68482
  //#region src/components/dashboard/dashboard.ts
68838
68483
  var SpreadsheetDashboard = class extends Component$1 {
68839
68484
  static template = "o-spreadsheet-SpreadsheetDashboard";
68840
- static props = { getGridSize: Function };
68841
68485
  static components = {
68842
68486
  GridOverlay,
68843
68487
  GridPopover,
@@ -68845,6 +68489,7 @@ var SpreadsheetDashboard = class extends Component$1 {
68845
68489
  VerticalScrollBar,
68846
68490
  HorizontalScrollBar
68847
68491
  };
68492
+ props = props({ getGridSize: types$1.function([], types$1.DOMDimension()) });
68848
68493
  cellPopovers;
68849
68494
  onMouseWheel;
68850
68495
  canvasPosition;
@@ -68957,11 +68602,11 @@ var SpreadsheetDashboard = class extends Component$1 {
68957
68602
  //#region src/components/header_group/header_group.ts
68958
68603
  var AbstractHeaderGroup = class extends Component$1 {
68959
68604
  static template = "o-spreadsheet-HeaderGroup";
68960
- static props = {
68961
- group: Object,
68962
- layerOffset: Number,
68963
- openContextMenu: Function
68964
- };
68605
+ props = props({
68606
+ group: types$1.HeaderGroup(),
68607
+ layerOffset: types$1.number(),
68608
+ openContextMenu: types$1.function([types$1.DOMCoordinates(), types$1.ArrayOf()])
68609
+ });
68965
68610
  toggleGroup() {
68966
68611
  const sheetId = this.env.model.getters.getActiveSheetId();
68967
68612
  const { start, end } = this.props.group;
@@ -69106,15 +68751,15 @@ var ColGroup = class extends AbstractHeaderGroup {
69106
68751
  //#region src/components/header_group/header_group_container.ts
69107
68752
  var HeaderGroupContainer = class extends Component$1 {
69108
68753
  static template = "o-spreadsheet-HeaderGroupContainer";
69109
- static props = {
69110
- dimension: String,
69111
- layers: Array
69112
- };
69113
68754
  static components = {
69114
68755
  RowGroup,
69115
68756
  ColGroup,
69116
68757
  MenuPopover
69117
68758
  };
68759
+ props = props({
68760
+ dimension: types$1.Dimension(),
68761
+ layers: types$1.array()
68762
+ });
69118
68763
  menu = proxy({
69119
68764
  isOpen: false,
69120
68765
  anchorRect: null,
@@ -69187,29 +68832,17 @@ function useScreenWidth() {
69187
68832
  //#region src/components/side_panel/side_panel/side_panel.ts
69188
68833
  var SidePanel = class extends Component$1 {
69189
68834
  static template = "o-spreadsheet-SidePanel";
69190
- static props = {
69191
- panelContent: Object,
69192
- panelProps: Object,
69193
- onCloseSidePanel: Function,
69194
- onStartHandleDrag: Function,
69195
- onResetPanelSize: Function,
69196
- isPinned: {
69197
- type: Boolean,
69198
- optional: true
69199
- },
69200
- onTogglePinPanel: {
69201
- type: Function,
69202
- optional: true
69203
- },
69204
- onToggleCollapsePanel: {
69205
- type: Function,
69206
- optional: true
69207
- },
69208
- isCollapsed: {
69209
- type: Boolean,
69210
- optional: true
69211
- }
69212
- };
68835
+ props = props({
68836
+ panelContent: types$1.SidePanelContent(),
68837
+ panelProps: types$1.SidePanelComponentProps(),
68838
+ onCloseSidePanel: types$1.function([]),
68839
+ onStartHandleDrag: types$1.function([types$1.instanceOf(MouseEvent)]),
68840
+ onResetPanelSize: types$1.function([]),
68841
+ "isPinned?": types$1.boolean(),
68842
+ "onTogglePinPanel?": types$1.function([]),
68843
+ "onToggleCollapsePanel?": types$1.function([]),
68844
+ "isCollapsed?": types$1.boolean()
68845
+ });
69213
68846
  spreadsheetRect = useSpreadsheetRect();
69214
68847
  getTitle() {
69215
68848
  const panel = this.props.panelContent;
@@ -69221,7 +68854,6 @@ var SidePanel = class extends Component$1 {
69221
68854
  //#region src/components/side_panel/side_panels/side_panels.ts
69222
68855
  var SidePanels = class extends Component$1 {
69223
68856
  static template = "o-spreadsheet-SidePanels";
69224
- static props = {};
69225
68857
  static components = { SidePanel };
69226
68858
  sidePanelStore;
69227
68859
  spreadsheetRect = useSpreadsheetRect();
@@ -69293,8 +68925,8 @@ var SidePanels = class extends Component$1 {
69293
68925
  //#region src/components/small_bottom_bar/ribbon_menu/ribbon_menu.ts
69294
68926
  var RibbonMenu = class extends Component$1 {
69295
68927
  static template = "o-spreadsheet-RibbonMenu";
69296
- static props = { onClose: Function };
69297
68928
  static components = { Menu };
68929
+ props = props({ onClose: types$1.function([]) });
69298
68930
  rootItems = topbarMenuRegistry.getMenuItems();
69299
68931
  menuRef = signal(null);
69300
68932
  containerRef = signal(null);
@@ -69332,9 +68964,6 @@ var RibbonMenu = class extends Component$1 {
69332
68964
  onClickMenu: this.onClickMenu.bind(this)
69333
68965
  };
69334
68966
  }
69335
- get style() {
69336
- return cssPropertiesToCss({ height: `${this.props.height}px` });
69337
- }
69338
68967
  updateShadows() {
69339
68968
  const el = this.containerRef();
69340
68969
  if (!el) return;
@@ -69368,7 +68997,7 @@ var SmallBottomBar = class extends Component$1 {
69368
68997
  RibbonMenu
69369
68998
  };
69370
68999
  static template = "o-spreadsheet-SmallBottomBar";
69371
- static props = { onClick: Function };
69000
+ props = props({ onClick: types$1.function([]) });
69372
69001
  composerFocusStore;
69373
69002
  composerStore;
69374
69003
  composerInterface;
@@ -69569,11 +69198,11 @@ var FigureRendererStore = class extends DisposableStore {
69569
69198
  //#region src/components/standalone_grid_canvas/standalone_grid_canvas.ts
69570
69199
  var StandaloneGridCanvas = class extends Component$1 {
69571
69200
  static template = "o-spreadsheet-StandaloneGridCanvas";
69572
- static props = {
69573
- sheetId: String,
69574
- zone: Object,
69575
- renderingCtx: Object
69576
- };
69201
+ props = props({
69202
+ sheetId: types$1.UID(),
69203
+ zone: types$1.Zone(),
69204
+ renderingCtx: types$1.object({})
69205
+ });
69577
69206
  canvasRef = signal(null);
69578
69207
  rendererStore;
69579
69208
  figureRendererStore;
@@ -69894,7 +69523,7 @@ var SpreadsheetPrintStore = class extends SpreadsheetStore {
69894
69523
  //#region src/components/spreadsheet_print/spreadsheet_print.ts
69895
69524
  var SpreadsheetPrint = class extends Component$1 {
69896
69525
  static template = "o-spreadsheet-SpreadsheetPrint";
69897
- static props = { onExitPrintMode: Function };
69526
+ props = props({ onExitPrintMode: types$1.function([]) });
69898
69527
  static components = {
69899
69528
  StandaloneGridCanvas,
69900
69529
  Section,
@@ -69956,7 +69585,6 @@ var SpreadsheetPrint = class extends Component$1 {
69956
69585
  const COMPOSER_MAX_HEIGHT = 300;
69957
69586
  var TopBarComposer = class extends Component$1 {
69958
69587
  static template = "o-spreadsheet-TopBarComposer";
69959
- static props = {};
69960
69588
  static components = { Composer };
69961
69589
  composerFocusStore;
69962
69590
  composerStore;
@@ -70041,7 +69669,6 @@ function useToolBarDropdownStore() {
70041
69669
  //#region src/components/named_range_selector/named_range_selector.ts
70042
69670
  var NamedRangeSelector = class extends Component$1 {
70043
69671
  static template = "o-spreadsheet-NamedRangeSelector";
70044
- static props = {};
70045
69672
  static components = {
70046
69673
  TextInput,
70047
69674
  MenuPopover
@@ -70224,36 +69851,21 @@ const BORDER_POSITIONS = [[
70224
69851
  ]];
70225
69852
  var BorderEditor = class extends Component$1 {
70226
69853
  static template = "o-spreadsheet-BorderEditor";
70227
- static props = {
70228
- class: {
70229
- type: String,
70230
- optional: true
70231
- },
70232
- currentBorderColor: {
70233
- type: String,
70234
- optional: false
70235
- },
70236
- currentBorderStyle: {
70237
- type: String,
70238
- optional: false
70239
- },
70240
- currentBorderPosition: {
70241
- type: String,
70242
- optional: true
70243
- },
70244
- onBorderColorPicked: Function,
70245
- onBorderStylePicked: Function,
70246
- onBorderPositionPicked: Function,
70247
- maxHeight: {
70248
- type: Number,
70249
- optional: true
70250
- },
70251
- anchorRect: Object
70252
- };
70253
69854
  static components = {
70254
69855
  ColorPickerWidget,
70255
69856
  Popover
70256
69857
  };
69858
+ props = props({
69859
+ "class?": types$1.string(),
69860
+ currentBorderColor: types$1.Color(),
69861
+ currentBorderStyle: types$1.BorderStyle(),
69862
+ "currentBorderPosition?": types$1.BorderPosition(),
69863
+ onBorderColorPicked: types$1.function([types$1.Color()]),
69864
+ onBorderStylePicked: types$1.function([types$1.BorderStyle()]),
69865
+ onBorderPositionPicked: types$1.function([types$1.BorderPosition()]),
69866
+ "maxHeight?": types$1.Pixel(),
69867
+ anchorRect: types$1.Rect()
69868
+ });
70257
69869
  BORDER_POSITIONS = BORDER_POSITIONS;
70258
69870
  lineStyleButtonRef = signal(null);
70259
69871
  borderStyles = borderStyles;
@@ -70314,21 +69926,12 @@ var BorderEditor = class extends Component$1 {
70314
69926
  //#region src/components/border_editor/border_editor_widget.ts
70315
69927
  var BorderEditorWidget = class extends Component$1 {
70316
69928
  static template = "o-spreadsheet-BorderEditorWidget";
70317
- static props = {
70318
- disabled: {
70319
- type: Boolean,
70320
- optional: true
70321
- },
70322
- dropdownMaxHeight: {
70323
- type: Number,
70324
- optional: true
70325
- },
70326
- class: {
70327
- type: String,
70328
- optional: true
70329
- }
70330
- };
70331
69929
  static components = { BorderEditor };
69930
+ props = props({
69931
+ "disabled?": types$1.boolean(),
69932
+ "dropdownMaxHeight?": types$1.Pixel(),
69933
+ "class?": types$1.string()
69934
+ });
70332
69935
  topBarToolStore;
70333
69936
  borderEditorButtonRef = signal(null);
70334
69937
  state = proxy({
@@ -70385,10 +69988,7 @@ var BorderEditorWidget = class extends Component$1 {
70385
69988
  //#region src/components/paint_format_button/paint_format_button.ts
70386
69989
  var PaintFormatButton = class extends Component$1 {
70387
69990
  static template = "o-spreadsheet-PaintFormatButton";
70388
- static props = { class: {
70389
- type: String,
70390
- optional: true
70391
- } };
69991
+ props = props({ "class?": types$1.string() });
70392
69992
  paintFormatStore;
70393
69993
  setup() {
70394
69994
  this.paintFormatStore = useStore(PaintFormatStore);
@@ -70413,10 +70013,7 @@ var TableDropdownButton = class extends Component$1 {
70413
70013
  TableStylesPopover,
70414
70014
  ActionButton
70415
70015
  };
70416
- static props = { class: {
70417
- type: String,
70418
- optional: true
70419
- } };
70016
+ props = props({ "class?": types$1.string() });
70420
70017
  topBarToolStore;
70421
70018
  state = proxy({ popoverProps: void 0 });
70422
70019
  setup() {
@@ -70505,13 +70102,13 @@ var TableDropdownButton = class extends Component$1 {
70505
70102
  //#region src/components/top_bar/color_editor/color_editor.ts
70506
70103
  var TopBarColorEditor = class extends Component$1 {
70507
70104
  static components = { ColorPickerWidget };
70508
- static props = {
70509
- class: String,
70510
- style: String,
70511
- icon: String,
70512
- title: String
70513
- };
70514
70105
  static template = "o-spreadsheet-ColorEditor";
70106
+ props = props({
70107
+ class: types$1.string(),
70108
+ style: types$1.or([types$1.literal("textColor"), types$1.literal("fillColor")]),
70109
+ icon: types$1.string(),
70110
+ title: types$1.string()
70111
+ });
70515
70112
  topBarToolStore;
70516
70113
  state = proxy({ isOpen: false });
70517
70114
  setup() {
@@ -70541,12 +70138,12 @@ var DropdownAction = class extends Component$1 {
70541
70138
  ActionButton,
70542
70139
  Popover
70543
70140
  };
70544
- static props = {
70545
- parentAction: Object,
70546
- childActions: Array,
70547
- class: String,
70548
- childClass: String
70549
- };
70141
+ props = props({
70142
+ parentAction: types$1.ActionSpec(),
70143
+ childActions: types$1.array(types$1.ActionSpec()),
70144
+ class: types$1.string(),
70145
+ childClass: types$1.string()
70146
+ });
70550
70147
  topBarToolStore;
70551
70148
  actionRef = signal(null);
70552
70149
  setup() {
@@ -70573,8 +70170,8 @@ var DropdownAction = class extends Component$1 {
70573
70170
  //#region src/components/top_bar/font_size_editor/font_size_editor.ts
70574
70171
  var TopBarFontSizeEditor = class extends Component$1 {
70575
70172
  static components = { FontSizeEditor };
70576
- static props = { class: String };
70577
70173
  static template = "o-spreadsheet-TopBarFontSizeEditor";
70174
+ props = props({ class: types.string() });
70578
70175
  topBarToolStore;
70579
70176
  setup() {
70580
70177
  this.topBarToolStore = useToolBarDropdownStore();
@@ -70608,7 +70205,7 @@ var NumberFormatsTool = class extends Component$1 {
70608
70205
  MenuPopover,
70609
70206
  ActionButton
70610
70207
  };
70611
- static props = { class: String };
70208
+ props = props({ class: types$1.string() });
70612
70209
  formatNumberMenuItemSpec = formatNumberMenuItemSpec;
70613
70210
  topBarToolStore;
70614
70211
  buttonRef = signal(null);
@@ -70643,7 +70240,7 @@ var NumberFormatsTool = class extends Component$1 {
70643
70240
  var ToolBarZoom = class extends Component$1 {
70644
70241
  static template = "o-spreadsheet-TopBarZoom";
70645
70242
  static components = { NumberEditor };
70646
- static props = { class: String };
70243
+ props = props({ class: types$1.string() });
70647
70244
  topBarToolStore;
70648
70245
  valueList = ZOOM_VALUES;
70649
70246
  setup() {
@@ -70869,10 +70466,10 @@ topBarToolBarRegistry.add("edit").addChild("edit", {
70869
70466
  //#region src/components/top_bar/top_bar.ts
70870
70467
  var TopBar = class extends Component$1 {
70871
70468
  static template = "o-spreadsheet-TopBar";
70872
- static props = {
70873
- onClick: Function,
70874
- dropdownMaxHeight: Number
70875
- };
70469
+ props = props({
70470
+ onClick: types$1.function([]),
70471
+ dropdownMaxHeight: types$1.Pixel()
70472
+ });
70876
70473
  static components = {
70877
70474
  MenuPopover,
70878
70475
  TopBarComposer,
@@ -71147,21 +70744,16 @@ var WebClipboardWrapper = class {
71147
70744
  //#region src/components/spreadsheet/spreadsheet.ts
71148
70745
  var Spreadsheet = class extends Component$1 {
71149
70746
  static template = "o-spreadsheet-Spreadsheet";
71150
- static props = {
71151
- model: Object,
71152
- notifyUser: {
71153
- type: Function,
71154
- optional: true
71155
- },
71156
- raiseError: {
71157
- type: Function,
71158
- optional: true
71159
- },
71160
- askConfirmation: {
71161
- type: Function,
71162
- optional: true
71163
- }
71164
- };
70747
+ props = props({
70748
+ model: types$1.Model(),
70749
+ "notifyUser?": types$1.function([types$1.InformationNotification()]),
70750
+ "raiseError?": types$1.function([types$1.string(), types$1.function([])]),
70751
+ "askConfirmation?": types$1.function([
70752
+ types$1.string(),
70753
+ types$1.function([]),
70754
+ types$1.function([])
70755
+ ])
70756
+ });
71165
70757
  static components = {
71166
70758
  TopBar,
71167
70759
  Grid,
@@ -76739,13 +76331,10 @@ const ERROR_TOOLTIP_MAX_HEIGHT = 80;
76739
76331
  var ErrorToolTip = class extends Component$1 {
76740
76332
  static maxSize = { maxHeight: ERROR_TOOLTIP_MAX_HEIGHT };
76741
76333
  static template = "o-spreadsheet-ErrorToolTip";
76742
- static props = {
76743
- cellPosition: Object,
76744
- onClosed: {
76745
- type: Function,
76746
- optional: true
76747
- }
76748
- };
76334
+ props = props({
76335
+ cellPosition: types$1.CellPosition(),
76336
+ "onClosed?": types$1.function([])
76337
+ });
76749
76338
  get dataValidationErrorMessage() {
76750
76339
  return this.env.model.getters.getInvalidDataValidationMessage(this.props.cellPosition);
76751
76340
  }
@@ -76821,18 +76410,15 @@ const ErrorToolTipPopoverBuilder = { onHover: (position, getters) => {
76821
76410
  //#region src/components/filters/filter_menu/filter_menu.ts
76822
76411
  var FilterMenu = class extends Component$1 {
76823
76412
  static template = "o-spreadsheet-FilterMenu";
76824
- static props = {
76825
- filterPosition: Object,
76826
- onClosed: {
76827
- type: Function,
76828
- optional: true
76829
- }
76830
- };
76831
76413
  static components = {
76832
76414
  FilterMenuValueList,
76833
76415
  SidePanelCollapsible,
76834
76416
  FilterMenuCriterion
76835
76417
  };
76418
+ props = props({
76419
+ filterPosition: types$1.Position(),
76420
+ "onClosed?": types$1.function([])
76421
+ });
76836
76422
  state;
76837
76423
  criterionCategory = "text";
76838
76424
  updatedCriterionValue;
@@ -77009,13 +76595,10 @@ const FilterMenuPopoverBuilder = { onOpen: (position, getters) => {
77009
76595
  //#region src/components/link/link_display/link_display.ts
77010
76596
  var LinkDisplay = class extends Component$1 {
77011
76597
  static template = "o-spreadsheet-LinkDisplay";
77012
- static props = {
77013
- cellPosition: Object,
77014
- onClosed: {
77015
- type: Function,
77016
- optional: true
77017
- }
77018
- };
76598
+ props = props({
76599
+ cellPosition: types$1.CellPosition(),
76600
+ "onClosed?": types$1.function([])
76601
+ });
77019
76602
  cellPopovers;
77020
76603
  setup() {
77021
76604
  this.cellPopovers = useStore(CellPopoverStore);
@@ -77085,14 +76668,11 @@ const LinkCellPopoverBuilder = { onHover: (position, getters) => {
77085
76668
  //#region src/components/link/link_editor/link_editor.ts
77086
76669
  var LinkEditor = class extends Component$1 {
77087
76670
  static template = "o-spreadsheet-LinkEditor";
77088
- static props = {
77089
- cellPosition: Object,
77090
- onClosed: {
77091
- type: Function,
77092
- optional: true
77093
- }
77094
- };
77095
76671
  static components = { MenuPopover };
76672
+ props = props({
76673
+ cellPosition: types$1.CellPosition(),
76674
+ "onClosed?": types$1.function([])
76675
+ });
77096
76676
  static size = { maxHeight: 500 };
77097
76677
  urlInput = signal(null);
77098
76678
  suggestionListRef = signal(null);
@@ -86479,7 +86059,8 @@ const registries = {
86479
86059
  supportedPivotPositionalFormulaRegistry,
86480
86060
  pivotToFunctionValueRegistry,
86481
86061
  migrationStepRegistry,
86482
- chartJsExtensionRegistry
86062
+ chartJsExtensionRegistry,
86063
+ onIterationEndEvaluationRegistry
86483
86064
  };
86484
86065
  const helpers = {
86485
86066
  arg,
@@ -86552,7 +86133,10 @@ const helpers = {
86552
86133
  parseFormat,
86553
86134
  isFormula,
86554
86135
  domainToColRowDomain,
86555
- collapseHierarchicalDisplayName
86136
+ collapseHierarchicalDisplayName,
86137
+ getCanonicalSymbolName,
86138
+ fuzzyLookup,
86139
+ replaceSymbolInFormula
86556
86140
  };
86557
86141
  const links = {
86558
86142
  isMarkdownLink,
@@ -86603,6 +86187,7 @@ const components = {
86603
86187
  MenuPopover,
86604
86188
  Popover,
86605
86189
  SelectionInput,
86190
+ StandaloneComposer,
86606
86191
  ValidationMessages,
86607
86192
  AddDimensionButton,
86608
86193
  PivotDimensionGranularity,
@@ -86679,8 +86264,8 @@ const chartHelpers = {
86679
86264
  };
86680
86265
 
86681
86266
  //#endregion
86682
- export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, InvalidReferenceError, LocalTransportService, Model, NEXT_VALUE, NotAvailableError, NumberTooLargeError, OrderedLayers, PREVIOUS_VALUE, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, SplillBlockedError, Spreadsheet, SpreadsheetPivotTable, UIPlugin, UnknownFunctionError, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderStyles, canExecuteInReadonly, categories, chartHelpers, compatibility, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, errorTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
86267
+ export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, InvalidReferenceError, LocalTransportService, Model, NEXT_VALUE, NotAvailableError, NumberTooLargeError, OrderedLayers, PREVIOUS_VALUE, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, SplillBlockedError, Spreadsheet, SpreadsheetPivotTable, UIPlugin, UnknownFunctionError, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderPositions, borderStyles, canExecuteInReadonly, categories, chartHelpers, compatibility, components, composerFocusTypes, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, errorTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
86683
86268
 
86684
- __info__.version = "19.4.0-alpha.10";
86685
- __info__.date = "2026-06-02T12:07:58.355Z";
86686
- __info__.hash = "41144f9";
86269
+ __info__.version = "19.4.0-alpha.11";
86270
+ __info__.date = "2026-06-03T11:42:34.595Z";
86271
+ __info__.hash = "6f35bc7";