@gridsuite/commons-ui 0.281.0 → 0.283.0

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 (128) hide show
  1. package/dist/components/composite/customAGGrid/custom-aggrid-filters/hooks/use-custom-aggrid-comparator-filter.js +1 -0
  2. package/dist/components/composite/customAGGrid/hooks/use-custom-aggrid-sort.js +1 -0
  3. package/dist/components/composite/reactQueryBuilder/OperatorSelector.js +1 -0
  4. package/dist/components/composite/report/QuickSearch.js +1 -0
  5. package/dist/components/composite/report/report-viewer/log-table/log-table.js +1 -1
  6. package/dist/components/ui/directoryItemSelector/DirectoryItemSelector.js +1 -0
  7. package/dist/features/index.js +12 -9
  8. package/dist/features/network-modification-table/network-modifications-table.js +1 -0
  9. package/dist/features/network-modification-table/renderers/reference-link-cell.js +1 -1
  10. package/dist/features/network-modification-table/renderers/root-network-chip-cell.js +1 -0
  11. package/dist/features/network-modification-table/renderers/switch-cell.js +1 -0
  12. package/dist/features/network-modification-table/row/drag-row-clone.js +1 -0
  13. package/dist/features/network-modification-table/use-modifications-drag-and-drop.js +1 -0
  14. package/dist/features/network-modifications/battery/modification/BatteryDialogTabs.d.ts +3 -3
  15. package/dist/features/network-modifications/battery/modification/BatteryDialogTabs.js +2 -2
  16. package/dist/features/network-modifications/battery/modification/BatteryModificationForm.d.ts +4 -1
  17. package/dist/features/network-modifications/battery/modification/BatteryModificationForm.js +7 -11
  18. package/dist/features/network-modifications/generator/modification/GeneratorDialogTabs.d.ts +3 -3
  19. package/dist/features/network-modifications/generator/modification/GeneratorDialogTabs.js +2 -2
  20. package/dist/features/network-modifications/generator/modification/GeneratorModificationForm.d.ts +4 -1
  21. package/dist/features/network-modifications/generator/modification/GeneratorModificationForm.js +4 -8
  22. package/dist/features/network-modifications/index.d.ts +0 -1
  23. package/dist/features/network-modifications/index.js +3 -3
  24. package/dist/features/network-modifications/line/common/LineDialogTabs.d.ts +3 -3
  25. package/dist/features/network-modifications/line/common/LineDialogTabs.js +2 -2
  26. package/dist/features/network-modifications/line/common/LineForm.d.ts +4 -1
  27. package/dist/features/network-modifications/line/common/LineForm.js +7 -11
  28. package/dist/features/network-modifications/line/common/line.utils.d.ts +1 -1
  29. package/dist/features/network-modifications/load/common/LoadDialogTabs.d.ts +3 -3
  30. package/dist/features/network-modifications/load/common/LoadDialogTabs.js +2 -2
  31. package/dist/features/network-modifications/load/common/LoadForm.d.ts +4 -1
  32. package/dist/features/network-modifications/load/common/LoadForm.js +7 -11
  33. package/dist/features/network-modifications/static-var-compensator/common/static-var-compensator-dialog-tabs.d.ts +3 -2
  34. package/dist/features/network-modifications/static-var-compensator/common/static-var-compensator-dialog-tabs.js +2 -2
  35. package/dist/features/network-modifications/static-var-compensator/creation/static-var-compensator-creation-form.d.ts +4 -1
  36. package/dist/features/network-modifications/static-var-compensator/creation/static-var-compensator-creation-form.js +8 -11
  37. package/dist/features/network-modifications/twoWindingsTransformer/common/TwoWindingsTransformerDialogTabs.d.ts +3 -3
  38. package/dist/features/network-modifications/twoWindingsTransformer/common/TwoWindingsTransformerDialogTabs.js +2 -2
  39. package/dist/features/network-modifications/twoWindingsTransformer/common/TwoWindingsTransformerForm.d.ts +4 -1
  40. package/dist/features/network-modifications/twoWindingsTransformer/common/TwoWindingsTransformerForm.js +7 -11
  41. package/dist/features/network-modifications/voltageLevel/creation/VoltageLevelCreationForm.d.ts +4 -7
  42. package/dist/features/network-modifications/voltageLevel/creation/VoltageLevelCreationForm.js +16 -19
  43. package/dist/features/network-modifications/voltageLevel/creation/index.d.ts +1 -1
  44. package/dist/features/network-modifications/voltageLevel/creation/index.js +3 -1
  45. package/dist/features/network-modifications/voltageLevel/index.js +3 -1
  46. package/dist/features/parameters/common/hook/index.d.ts +0 -1
  47. package/dist/features/parameters/common/hook/index.js +1 -3
  48. package/dist/features/parameters/common/index.js +1 -3
  49. package/dist/features/parameters/dynamic-margin-calculation/dynamic-margin-calculation-form.d.ts +1 -1
  50. package/dist/features/parameters/dynamic-margin-calculation/dynamic-margin-calculation-inline.js +4 -4
  51. package/dist/features/parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.d.ts +1 -0
  52. package/dist/features/parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.js +2 -0
  53. package/dist/features/parameters/dynamic-security-analysis/dynamic-security-analysis-inline.js +3 -3
  54. package/dist/features/parameters/dynamic-security-analysis/dynamic-security-analysis-parameters-form.d.ts +1 -1
  55. package/dist/features/parameters/dynamic-security-analysis/dynamic-security-analysis.type.d.ts +1 -0
  56. package/dist/features/parameters/dynamic-security-analysis/dynamic-security-analysis.type.js +2 -0
  57. package/dist/features/parameters/dynamic-simulation/curve/dialog/curve-preview.js +1 -0
  58. package/dist/features/parameters/dynamic-simulation/curve/dialog/equipment-filter.js +1 -0
  59. package/dist/features/parameters/dynamic-simulation/dynamic-simulation-inline.js +3 -3
  60. package/dist/features/parameters/dynamic-simulation/dynamic-simulation-parameters-form.d.ts +1 -1
  61. package/dist/features/parameters/dynamic-simulation/dynamic-simulation.type.d.ts +1 -0
  62. package/dist/features/parameters/dynamic-simulation/dynamic-simulation.type.js +2 -0
  63. package/dist/features/parameters/index.js +10 -7
  64. package/dist/features/parameters/loadflow/load-flow-parameters-inline.js +1 -1
  65. package/dist/features/parameters/loadflow/load-flow-parameters-utils.d.ts +1 -0
  66. package/dist/features/parameters/loadflow/load-flow-parameters-utils.js +2 -0
  67. package/dist/features/parameters/loadflow/use-load-flow-parameters-form.js +3 -3
  68. package/dist/features/parameters/network-visualizations/constants.d.ts +1 -0
  69. package/dist/features/parameters/network-visualizations/constants.js +2 -0
  70. package/dist/features/parameters/network-visualizations/index.js +2 -1
  71. package/dist/features/parameters/network-visualizations/network-visualizations-parameters-inline.js +1 -1
  72. package/dist/features/parameters/network-visualizations/use-network-visualizations-parameters-form.js +3 -7
  73. package/dist/features/parameters/pcc-min/pcc-min-parameters-inline.js +1 -1
  74. package/dist/features/parameters/security-analysis/constants.d.ts +1 -0
  75. package/dist/features/parameters/security-analysis/constants.js +2 -0
  76. package/dist/features/parameters/security-analysis/index.js +2 -1
  77. package/dist/features/parameters/security-analysis/security-analysis-parameters-content.js +1 -1
  78. package/dist/features/parameters/security-analysis/security-analysis-parameters-dialog.js +1 -1
  79. package/dist/features/parameters/security-analysis/use-security-analysis-parameters-form.js +3 -3
  80. package/dist/features/parameters/sensi/columns-definitions.d.ts +2 -0
  81. package/dist/features/parameters/sensi/columns-definitions.js +36 -1
  82. package/dist/features/parameters/sensi/index.js +3 -1
  83. package/dist/features/parameters/sensi/sensitivity-analysis-parameters-dialog.js +1 -1
  84. package/dist/features/parameters/sensi/sensitivity-analysis-parameters-form.js +2 -1
  85. package/dist/features/parameters/sensi/sensitivity-analysis-parameters-inline.js +4 -1
  86. package/dist/features/parameters/sensi/sensitivity-parameters-selector.d.ts +3 -1
  87. package/dist/features/parameters/sensi/sensitivity-parameters-selector.js +19 -35
  88. package/dist/features/parameters/sensi/use-sensitivity-analysis-parameters.d.ts +9 -1
  89. package/dist/features/parameters/sensi/use-sensitivity-analysis-parameters.js +29 -1
  90. package/dist/features/parameters/short-circuit/short-circuit-parameters-inline.js +1 -1
  91. package/dist/features/parameters/short-circuit/short-circuit-parameters-utils.d.ts +1 -0
  92. package/dist/features/parameters/short-circuit/short-circuit-parameters-utils.js +2 -0
  93. package/dist/features/parameters/short-circuit/use-short-circuit-parameters-form.js +3 -3
  94. package/dist/features/parameters/voltage-init/constants.d.ts +1 -0
  95. package/dist/features/parameters/voltage-init/constants.js +2 -0
  96. package/dist/features/parameters/voltage-init/index.js +2 -1
  97. package/dist/features/parameters/voltage-init/use-voltage-init-parameters-form.js +4 -8
  98. package/dist/features/parameters/voltage-init/voltage-init-parameters-inline.js +1 -1
  99. package/dist/features/process-configs/loadflow/lf-process-config-edition.js +7 -1
  100. package/dist/features/process-configs/security-analysis/sa-process-config-edition.js +7 -1
  101. package/dist/features/process-configs/shortcircuit/sc-process-config-edition.js +7 -1
  102. package/dist/features/results/loadflow/limit-violation-result.js +1 -1
  103. package/dist/features/results/shortcircuit/shortcircuit-analysis-result.js +1 -1
  104. package/dist/features/side-bar/AppSideBar.js +2 -1
  105. package/dist/features/side-bar/AppSideBarHeader.js +3 -3
  106. package/dist/features/side-bar/footer/AppSideBarFooter.js +2 -0
  107. package/dist/features/side-bar/footer/common/SideBarMenuItem.d.ts +2 -1
  108. package/dist/features/side-bar/footer/common/SideBarMenuItem.js +5 -4
  109. package/dist/features/side-bar/footer/profile/ProfileMenu.js +1 -1
  110. package/dist/features/side-bar/footer/profile/UserIcon.d.ts +3 -7
  111. package/dist/features/side-bar/footer/profile/UserIcon.js +11 -7
  112. package/dist/features/side-bar/footer/settings/SettingsMenu.js +1 -1
  113. package/dist/hooks/index.d.ts +1 -0
  114. package/dist/hooks/index.js +3 -1
  115. package/dist/hooks/use-tabs.d.ts +33 -0
  116. package/dist/hooks/use-tabs.js +55 -0
  117. package/dist/index.js +13 -8
  118. package/dist/translations/en/topBarEn.d.ts +1 -0
  119. package/dist/translations/en/topBarEn.js +2 -1
  120. package/dist/translations/fr/topBarFr.d.ts +1 -0
  121. package/dist/translations/fr/topBarFr.js +1 -0
  122. package/package.json +1 -1
  123. package/dist/features/network-modifications/hooks/index.d.ts +0 -7
  124. package/dist/features/network-modifications/hooks/index.js +0 -4
  125. package/dist/features/network-modifications/hooks/useTabsWithError.d.ts +0 -15
  126. package/dist/features/network-modifications/hooks/useTabsWithError.js +0 -28
  127. package/dist/features/parameters/common/hook/use-tabs.d.ts +0 -16
  128. package/dist/features/parameters/common/hook/use-tabs.js +0 -65
@@ -1,8 +1,10 @@
1
- import { UseFormReturn } from 'react-hook-form';
1
+ import { FieldErrors, UseFormReturn } from 'react-hook-form';
2
2
  import { ObjectSchema } from 'yup';
3
3
  import { UUID } from 'node:crypto';
4
4
  import { ComputingType, FactorsCount, SensitivityAnalysisParametersInfosEnriched, UseParametersBackendReturnProps } from '../../../utils';
5
+ import { UseTabsReturn } from '../../../hooks';
5
6
  import { BuildStatus } from '../../node';
7
+ import { SensiTabValues, SensiBranchesTabValues } from './columns-definitions';
6
8
  export interface UseSensitivityAnalysisParametersReturn {
7
9
  formMethods: UseFormReturn<any>;
8
10
  formSchema: ObjectSchema<any>;
@@ -24,6 +26,12 @@ export interface UseSensitivityAnalysisParametersReturn {
24
26
  emptyFormData: Record<string, unknown>;
25
27
  factorsCount: FactorsCount;
26
28
  resetFactorsCount: () => void;
29
+ onValidationError: (errors: FieldErrors) => void;
30
+ useSensiTabsReturn: UseSensiTabsReturn;
31
+ }
32
+ export interface UseSensiTabsReturn {
33
+ useTabsReturn: UseTabsReturn<SensiTabValues>;
34
+ useSubTabsReturn: UseTabsReturn<SensiBranchesTabValues>;
27
35
  }
28
36
  type UseSensitivityAnalysisParametersFormProps = {
29
37
  name: string;
@@ -20,6 +20,7 @@ import "localized-countries";
20
20
  import "localized-countries/data/fr";
21
21
  import "localized-countries/data/en";
22
22
  import { useSnackMessage } from "../../../hooks/useSnackMessage.js";
23
+ import { useTabs } from "../../../hooks/use-tabs.js";
23
24
  import "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
24
25
  import "yup";
25
26
  import { getNameElementEditorEmptyFormData } from "../../../components/ui/dialogs/name-element-editor/name-element-editor-utils.js";
@@ -44,6 +45,7 @@ import "../../../components/ui/snackbarProvider/SnackbarProvider.js";
44
45
  import "mui-nested-menu";
45
46
  import "react-resizable-panels";
46
47
  import "react-papaparse";
48
+ import { SensiTabValues, SensiBranchesTabValues, SENSI_BRANCHES_TAB_FIELDS, SENSI_TAB_FIELDS } from "./columns-definitions.js";
47
49
  const useSensitivityAnalysisParametersForm = ({
48
50
  studyUuid,
49
51
  currentNodeUuid,
@@ -86,6 +88,30 @@ const useSensitivityAnalysisParametersForm = ({
86
88
  resolver: yupResolver(formSchema)
87
89
  });
88
90
  const { reset, getValues } = formMethods;
91
+ const useTabsReturn = useTabs({
92
+ defaultTab: SensiTabValues.SensitivityBranches,
93
+ errors: formMethods.formState.errors,
94
+ tabFields: SENSI_TAB_FIELDS
95
+ });
96
+ const useSubTabsReturn = useTabs({
97
+ defaultTab: SensiBranchesTabValues.SensiInjectionsSet,
98
+ errors: formMethods.formState.errors,
99
+ tabFields: SENSI_BRANCHES_TAB_FIELDS
100
+ });
101
+ const useSensiTabsReturn = useMemo(
102
+ () => ({
103
+ useTabsReturn,
104
+ useSubTabsReturn
105
+ }),
106
+ [useTabsReturn, useSubTabsReturn]
107
+ );
108
+ const onError = useCallback(
109
+ (errors) => {
110
+ useTabsReturn.onError(errors);
111
+ useSubTabsReturn.onError(errors);
112
+ },
113
+ [useTabsReturn, useSubTabsReturn]
114
+ );
89
115
  const formattedProviders = Object.keys(providers).map((key) => ({
90
116
  id: key,
91
117
  label: providers[key]
@@ -373,7 +399,9 @@ const useSensitivityAnalysisParametersForm = ({
373
399
  onFormChanged,
374
400
  emptyFormData,
375
401
  factorsCount,
376
- resetFactorsCount
402
+ resetFactorsCount,
403
+ onValidationError: onError,
404
+ useSensiTabsReturn
377
405
  };
378
406
  };
379
407
  export {
@@ -12,10 +12,10 @@ import "localized-countries";
12
12
  import "localized-countries/data/fr";
13
13
  import "localized-countries/data/en";
14
14
  import { useSnackMessage } from "../../../hooks/useSnackMessage.js";
15
+ import "react-hook-form";
15
16
  import { ParameterLayout } from "../common/parameter-layout/parameter-layout.js";
16
17
  import "../common/parameter-layout/parameter-layout-provider.js";
17
18
  import "../../../components/ui/overflowableText/OverflowableText.js";
18
- import "react-hook-form";
19
19
  import { CustomFormProvider } from "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
20
20
  import "yup";
21
21
  import "../../../components/ui/treeViewFinder/TreeViewFinder.js";
@@ -13,6 +13,7 @@ export declare enum ShortCircuitParametersTabValues {
13
13
  STUDY_AREA = "StudyArea",
14
14
  POWER_ELECTRONICS = "PowerElectronics"
15
15
  }
16
+ export declare const TAB_VALUES: ShortCircuitParametersTabValues[];
16
17
  export declare const TAB_FIELDS: Record<ShortCircuitParametersTabValues, string[]>;
17
18
  export declare const getCommonShortCircuitParametersFormSchema: () => yup.ObjectSchema<{
18
19
  commonParameters: {
@@ -47,6 +47,7 @@ var ShortCircuitParametersTabValues = /* @__PURE__ */ ((ShortCircuitParametersTa
47
47
  ShortCircuitParametersTabValues2["POWER_ELECTRONICS"] = "PowerElectronics";
48
48
  return ShortCircuitParametersTabValues2;
49
49
  })(ShortCircuitParametersTabValues || {});
50
+ const TAB_VALUES = Object.values(ShortCircuitParametersTabValues);
50
51
  const TAB_FIELDS = {
51
52
  [
52
53
  "General"
@@ -313,6 +314,7 @@ const formatShortCircuitSpecificParameters = (specificParametersDescriptionForPr
313
314
  export {
314
315
  ShortCircuitParametersTabValues,
315
316
  TAB_FIELDS,
317
+ TAB_VALUES,
316
318
  formatShortCircuitSpecificParameters,
317
319
  getCommonShortCircuitParametersFormSchema,
318
320
  getDefaultShortCircuitSpecificParamsValues,
@@ -16,6 +16,7 @@ import "localized-countries";
16
16
  import "localized-countries/data/fr";
17
17
  import "localized-countries/data/en";
18
18
  import { useSnackMessage } from "../../../hooks/useSnackMessage.js";
19
+ import { useTabs } from "../../../hooks/use-tabs.js";
19
20
  import "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
20
21
  import "../../../components/ui/treeViewFinder/TreeViewFinder.js";
21
22
  import { DESCRIPTION, NAME } from "../../../components/ui/reactHookForm/constants.js";
@@ -41,8 +42,7 @@ import { SPECIFIC_PARAMETERS, COMMON_PARAMETERS, VERSION_PARAMETER, PROVIDER } f
41
42
  import "../common/widget/parameter-line-slider.js";
42
43
  import "../common/contingency-table/contingency-table.js";
43
44
  import "../common/contingency-table/columns-definitions.js";
44
- import { useTabs } from "../common/hook/use-tabs.js";
45
- import { getDefaultShortCircuitSpecificParamsValues, getSpecificShortCircuitParametersFormSchema, getCommonShortCircuitParametersFormSchema, getShortCircuitSpecificParametersValues, formatShortCircuitSpecificParameters, ShortCircuitParametersTabValues, TAB_FIELDS } from "./short-circuit-parameters-utils.js";
45
+ import { getDefaultShortCircuitSpecificParamsValues, getSpecificShortCircuitParametersFormSchema, getCommonShortCircuitParametersFormSchema, getShortCircuitSpecificParametersValues, formatShortCircuitSpecificParameters, ShortCircuitParametersTabValues, TAB_VALUES, TAB_FIELDS } from "./short-circuit-parameters-utils.js";
46
46
  const useShortCircuitParametersForm = ({
47
47
  parametersBackend,
48
48
  parametersUuid,
@@ -181,7 +181,7 @@ const useShortCircuitParametersForm = ({
181
181
  onError: onValidationError
182
182
  } = useTabs({
183
183
  defaultTab: ShortCircuitParametersTabValues.GENERAL,
184
- tabEnum: ShortCircuitParametersTabValues,
184
+ tabValues: TAB_VALUES,
185
185
  errors: formMethods.formState.errors,
186
186
  tabFields: TAB_FIELDS
187
187
  });
@@ -9,6 +9,7 @@ export declare enum VoltageInitTabValues {
9
9
  VOLTAGE_LIMITS = "voltageLimits",
10
10
  EQUIPMENTS_SELECTION = "equipmentSelection"
11
11
  }
12
+ export declare const VOLTAGE_INIT_TAB_VALUES: VoltageInitTabValues[];
12
13
  export declare const GENERAL = "GENERAL";
13
14
  export declare const GENERAL_APPLY_MODIFICATIONS = "GENERAL_APPLY_MODIFICATIONS";
14
15
  export declare const DEFAULT_GENERAL_APPLY_MODIFICATIONS = true;
@@ -4,6 +4,7 @@ var VoltageInitTabValues = /* @__PURE__ */ ((VoltageInitTabValues2) => {
4
4
  VoltageInitTabValues2["EQUIPMENTS_SELECTION"] = "equipmentSelection";
5
5
  return VoltageInitTabValues2;
6
6
  })(VoltageInitTabValues || {});
7
+ const VOLTAGE_INIT_TAB_VALUES = Object.values(VoltageInitTabValues);
7
8
  const GENERAL = "GENERAL";
8
9
  const GENERAL_APPLY_MODIFICATIONS = "GENERAL_APPLY_MODIFICATIONS";
9
10
  const DEFAULT_GENERAL_APPLY_MODIFICATIONS = true;
@@ -51,6 +52,7 @@ export {
51
52
  VARIABLE_Q_GENERATORS,
52
53
  VARIABLE_SHUNT_COMPENSATORS,
53
54
  VARIABLE_TRANSFORMERS,
55
+ VOLTAGE_INIT_TAB_VALUES,
54
56
  VOLTAGE_LIMITS_DEFAULT,
55
57
  VOLTAGE_LIMITS_MODIFICATION,
56
58
  VoltageInitTabValues
@@ -1,4 +1,4 @@
1
- import { DEFAULT_GENERAL_APPLY_MODIFICATIONS, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, DEFAULT_UPDATE_BUS_VOLTAGE, GENERAL, GENERAL_APPLY_MODIFICATIONS, GENERATORS_SELECTION_TYPE, HIGH_VOLTAGE_LIMIT, LEG_SIDE, LOW_VOLTAGE_LIMIT, PRIORITY, RATIO_TAP_CHANGER_POSITION, RATIO_TAP_CHANGER_TARGET_V, REACTIVE_SLACKS_THRESHOLD, SELECTION_TYPE, SHUNT_COMPENSATORS_SELECTION_TYPE, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, TRANSFORMERS_SELECTION_TYPE, UPDATE_BUS_VOLTAGE, VARIABLE_Q_GENERATORS, VARIABLE_SHUNT_COMPENSATORS, VARIABLE_TRANSFORMERS, VOLTAGE_LIMITS_DEFAULT, VOLTAGE_LIMITS_MODIFICATION, VoltageInitTabValues } from "./constants.js";
1
+ import { DEFAULT_GENERAL_APPLY_MODIFICATIONS, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, DEFAULT_UPDATE_BUS_VOLTAGE, GENERAL, GENERAL_APPLY_MODIFICATIONS, GENERATORS_SELECTION_TYPE, HIGH_VOLTAGE_LIMIT, LEG_SIDE, LOW_VOLTAGE_LIMIT, PRIORITY, RATIO_TAP_CHANGER_POSITION, RATIO_TAP_CHANGER_TARGET_V, REACTIVE_SLACKS_THRESHOLD, SELECTION_TYPE, SHUNT_COMPENSATORS_SELECTION_TYPE, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, TRANSFORMERS_SELECTION_TYPE, UPDATE_BUS_VOLTAGE, VARIABLE_Q_GENERATORS, VARIABLE_SHUNT_COMPENSATORS, VARIABLE_TRANSFORMERS, VOLTAGE_INIT_TAB_VALUES, VOLTAGE_LIMITS_DEFAULT, VOLTAGE_LIMITS_MODIFICATION, VoltageInitTabValues } from "./constants.js";
2
2
  import { EquipmentsSelectionType } from "./voltage-init.type.js";
3
3
  import { VoltageInitParametersEditionDialog } from "./voltage-init-parameters-dialog.js";
4
4
  import { VoltageInitParametersInLine } from "./voltage-init-parameters-inline.js";
@@ -26,6 +26,7 @@ export {
26
26
  VARIABLE_Q_GENERATORS,
27
27
  VARIABLE_SHUNT_COMPENSATORS,
28
28
  VARIABLE_TRANSFORMERS,
29
+ VOLTAGE_INIT_TAB_VALUES,
29
30
  VOLTAGE_LIMITS_DEFAULT,
30
31
  VOLTAGE_LIMITS_MODIFICATION,
31
32
  VoltageInitParametersEditionDialog,
@@ -20,6 +20,7 @@ import "localized-countries";
20
20
  import "localized-countries/data/fr";
21
21
  import "localized-countries/data/en";
22
22
  import { useSnackMessage } from "../../../hooks/useSnackMessage.js";
23
+ import { useTabs } from "../../../hooks/use-tabs.js";
23
24
  import "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
24
25
  import "../../../components/ui/treeViewFinder/TreeViewFinder.js";
25
26
  import { NAME, DESCRIPTION } from "../../../components/ui/reactHookForm/constants.js";
@@ -39,15 +40,10 @@ import "../../../components/ui/snackbarProvider/SnackbarProvider.js";
39
40
  import "mui-nested-menu";
40
41
  import "react-resizable-panels";
41
42
  import "react-papaparse";
42
- import { VARIABLE_SHUNT_COMPENSATORS, SHUNT_COMPENSATORS_SELECTION_TYPE, VARIABLE_TRANSFORMERS, TRANSFORMERS_SELECTION_TYPE, VARIABLE_Q_GENERATORS, GENERATORS_SELECTION_TYPE, VOLTAGE_LIMITS_DEFAULT, HIGH_VOLTAGE_LIMIT, LOW_VOLTAGE_LIMIT, VOLTAGE_LIMITS_MODIFICATION, VoltageInitTabValues, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, REACTIVE_SLACKS_THRESHOLD, UPDATE_BUS_VOLTAGE, GENERAL_APPLY_MODIFICATIONS, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_UPDATE_BUS_VOLTAGE, DEFAULT_GENERAL_APPLY_MODIFICATIONS } from "./constants.js";
43
- import { TAB_FIELDS, fromVoltageInitParametersFormToParamValues, fromVoltageInitParamsDataToFormValues, fromStudyVoltageInitParamsDataToFormValues } from "./voltage-init-form-utils.js";
43
+ import { VARIABLE_SHUNT_COMPENSATORS, SHUNT_COMPENSATORS_SELECTION_TYPE, VARIABLE_TRANSFORMERS, TRANSFORMERS_SELECTION_TYPE, VARIABLE_Q_GENERATORS, GENERATORS_SELECTION_TYPE, VOLTAGE_LIMITS_DEFAULT, HIGH_VOLTAGE_LIMIT, LOW_VOLTAGE_LIMIT, VOLTAGE_LIMITS_MODIFICATION, VoltageInitTabValues, SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, REACTIVE_SLACKS_THRESHOLD, UPDATE_BUS_VOLTAGE, GENERAL_APPLY_MODIFICATIONS, DEFAULT_SHUNT_COMPENSATOR_ACTIVATION_THRESHOLD, DEFAULT_REACTIVE_SLACKS_THRESHOLD, DEFAULT_UPDATE_BUS_VOLTAGE, DEFAULT_GENERAL_APPLY_MODIFICATIONS, VOLTAGE_INIT_TAB_VALUES } from "./constants.js";
44
+ import { fromVoltageInitParametersFormToParamValues, fromVoltageInitParamsDataToFormValues, fromStudyVoltageInitParamsDataToFormValues, TAB_FIELDS } from "./voltage-init-form-utils.js";
44
45
  import "react-dom";
45
46
  import { SELECTED } from "../../../components/composite/dnd-table/dnd-table.type.js";
46
- import "../common/parameter-layout/parameter-layout-provider.js";
47
- import "../common/widget/parameter-line-slider.js";
48
- import "../common/contingency-table/contingency-table.js";
49
- import "../common/contingency-table/columns-definitions.js";
50
- import { useTabs } from "../common/hook/use-tabs.js";
51
47
  const useVoltageInitParametersForm = ({
52
48
  parametersUuid,
53
49
  name,
@@ -146,7 +142,7 @@ const useVoltageInitParametersForm = ({
146
142
  onError: onValidationError
147
143
  } = useTabs({
148
144
  defaultTab: VoltageInitTabValues.GENERAL,
149
- tabEnum: VoltageInitTabValues,
145
+ tabValues: VOLTAGE_INIT_TAB_VALUES,
150
146
  errors: formMethods.formState.errors,
151
147
  tabFields: TAB_FIELDS
152
148
  });
@@ -13,10 +13,10 @@ import "localized-countries";
13
13
  import "localized-countries/data/fr";
14
14
  import "localized-countries/data/en";
15
15
  import { useSnackMessage } from "../../../hooks/useSnackMessage.js";
16
+ import "react-hook-form";
16
17
  import { ParameterLayout } from "../common/parameter-layout/parameter-layout.js";
17
18
  import "../common/parameter-layout/parameter-layout-provider.js";
18
19
  import "../../../components/ui/overflowableText/OverflowableText.js";
19
- import "react-hook-form";
20
20
  import { CustomFormProvider } from "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
21
21
  import "yup";
22
22
  import "../../../components/ui/treeViewFinder/TreeViewFinder.js";
@@ -41,15 +41,19 @@ import "../../parameters/common/contingency-table/columns-definitions.js";
41
41
  import "@hookform/resolvers/yup";
42
42
  import "../../parameters/network-visualizations/constants.js";
43
43
  import "../../parameters/loadflow/load-flow-parameters-context.js";
44
- import "../../parameters/loadflow/load-flow-advanced-parameters.js";
44
+ import "../../parameters/loadflow/load-flow-parameters-utils.js";
45
45
  import "../../parameters/loadflow/load-flow-parameters-content.js";
46
46
  import "../../parameters/short-circuit/short-circuit-parameters-content.js";
47
+ import "../../parameters/short-circuit/short-circuit-parameters-utils.js";
48
+ import "../../parameters/voltage-init/constants.js";
47
49
  import "../../parameters/voltage-init/voltage-init-form-utils.js";
48
50
  import "react-dom";
51
+ import "../../parameters/security-analysis/constants.js";
49
52
  import "../../parameters/security-analysis/security-analysis-parameters-utils.js";
50
53
  import "../../parameters/sensi/utils.js";
51
54
  import "../../parameters/sensi/columns-definitions.js";
52
55
  import "../../parameters/dynamic-simulation/use-dynamic-simulation-parameters-form.js";
56
+ import "../../parameters/dynamic-simulation/dynamic-simulation.type.js";
53
57
  import "../../parameters/dynamic-simulation/time-delay/time-delay-parameters-utils.js";
54
58
  import "../../parameters/dynamic-simulation/time-delay/time-delay-parameters.js";
55
59
  import "../../parameters/dynamic-simulation/solver/solver-parameters-utils.js";
@@ -66,8 +70,10 @@ import "mathjs";
66
70
  import "../../parameters/dynamic-security-analysis/use-dynamic-security-analysis-parameters-form.js";
67
71
  import "../../parameters/dynamic-security-analysis/scenario-parameters.js";
68
72
  import "../../parameters/dynamic-security-analysis/contingency-parameters.js";
73
+ import "../../parameters/dynamic-security-analysis/dynamic-security-analysis.type.js";
69
74
  import "../../parameters/dynamic-margin-calculation/time-delay-parameters.js";
70
75
  import "../../parameters/dynamic-margin-calculation/loads-variations-parameters.js";
76
+ import "../../parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.js";
71
77
  import "../../parameters/dynamic-margin-calculation/use-dynamic-margin-calculation-parameters-form.js";
72
78
  function LFProcessConfigEdition() {
73
79
  return /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -41,15 +41,19 @@ import "../../parameters/common/contingency-table/columns-definitions.js";
41
41
  import "@hookform/resolvers/yup";
42
42
  import "../../parameters/network-visualizations/constants.js";
43
43
  import "../../parameters/loadflow/load-flow-parameters-context.js";
44
- import "../../parameters/loadflow/load-flow-advanced-parameters.js";
44
+ import "../../parameters/loadflow/load-flow-parameters-utils.js";
45
45
  import "../../parameters/loadflow/load-flow-parameters-content.js";
46
46
  import "../../parameters/short-circuit/short-circuit-parameters-content.js";
47
+ import "../../parameters/short-circuit/short-circuit-parameters-utils.js";
48
+ import "../../parameters/voltage-init/constants.js";
47
49
  import "../../parameters/voltage-init/voltage-init-form-utils.js";
48
50
  import "react-dom";
51
+ import "../../parameters/security-analysis/constants.js";
49
52
  import "../../parameters/security-analysis/security-analysis-parameters-utils.js";
50
53
  import "../../parameters/sensi/utils.js";
51
54
  import "../../parameters/sensi/columns-definitions.js";
52
55
  import "../../parameters/dynamic-simulation/use-dynamic-simulation-parameters-form.js";
56
+ import "../../parameters/dynamic-simulation/dynamic-simulation.type.js";
53
57
  import "../../parameters/dynamic-simulation/time-delay/time-delay-parameters-utils.js";
54
58
  import "../../parameters/dynamic-simulation/time-delay/time-delay-parameters.js";
55
59
  import "../../parameters/dynamic-simulation/solver/solver-parameters-utils.js";
@@ -66,8 +70,10 @@ import "mathjs";
66
70
  import "../../parameters/dynamic-security-analysis/use-dynamic-security-analysis-parameters-form.js";
67
71
  import "../../parameters/dynamic-security-analysis/scenario-parameters.js";
68
72
  import "../../parameters/dynamic-security-analysis/contingency-parameters.js";
73
+ import "../../parameters/dynamic-security-analysis/dynamic-security-analysis.type.js";
69
74
  import "../../parameters/dynamic-margin-calculation/time-delay-parameters.js";
70
75
  import "../../parameters/dynamic-margin-calculation/loads-variations-parameters.js";
76
+ import "../../parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.js";
71
77
  import "../../parameters/dynamic-margin-calculation/use-dynamic-margin-calculation-parameters-form.js";
72
78
  function SAProcessConfigEdition() {
73
79
  return /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -41,15 +41,19 @@ import "../../parameters/common/contingency-table/columns-definitions.js";
41
41
  import "@hookform/resolvers/yup";
42
42
  import "../../parameters/network-visualizations/constants.js";
43
43
  import "../../parameters/loadflow/load-flow-parameters-context.js";
44
- import "../../parameters/loadflow/load-flow-advanced-parameters.js";
44
+ import "../../parameters/loadflow/load-flow-parameters-utils.js";
45
45
  import "../../parameters/loadflow/load-flow-parameters-content.js";
46
46
  import "../../parameters/short-circuit/short-circuit-parameters-content.js";
47
+ import "../../parameters/short-circuit/short-circuit-parameters-utils.js";
48
+ import "../../parameters/voltage-init/constants.js";
47
49
  import "../../parameters/voltage-init/voltage-init-form-utils.js";
48
50
  import "react-dom";
51
+ import "../../parameters/security-analysis/constants.js";
49
52
  import "../../parameters/security-analysis/security-analysis-parameters-utils.js";
50
53
  import "../../parameters/sensi/utils.js";
51
54
  import "../../parameters/sensi/columns-definitions.js";
52
55
  import "../../parameters/dynamic-simulation/use-dynamic-simulation-parameters-form.js";
56
+ import "../../parameters/dynamic-simulation/dynamic-simulation.type.js";
53
57
  import "../../parameters/dynamic-simulation/time-delay/time-delay-parameters-utils.js";
54
58
  import "../../parameters/dynamic-simulation/time-delay/time-delay-parameters.js";
55
59
  import "../../parameters/dynamic-simulation/solver/solver-parameters-utils.js";
@@ -66,8 +70,10 @@ import "mathjs";
66
70
  import "../../parameters/dynamic-security-analysis/use-dynamic-security-analysis-parameters-form.js";
67
71
  import "../../parameters/dynamic-security-analysis/scenario-parameters.js";
68
72
  import "../../parameters/dynamic-security-analysis/contingency-parameters.js";
73
+ import "../../parameters/dynamic-security-analysis/dynamic-security-analysis.type.js";
69
74
  import "../../parameters/dynamic-margin-calculation/time-delay-parameters.js";
70
75
  import "../../parameters/dynamic-margin-calculation/loads-variations-parameters.js";
76
+ import "../../parameters/dynamic-margin-calculation/dynamic-margin-calculation.type.js";
71
77
  import "../../parameters/dynamic-margin-calculation/use-dynamic-margin-calculation-parameters-form.js";
72
78
  function SCProcessConfigEdition() {
73
79
  return /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -12,9 +12,9 @@ import "localized-countries/data/fr";
12
12
  import "localized-countries/data/en";
13
13
  import "notistack";
14
14
  import { useOpenLoaderShortWait } from "../../../hooks/useOpenLoaderShortWait.js";
15
+ import "react-hook-form";
15
16
  import { RESULTS_LOADING_DELAY } from "../constants.js";
16
17
  import "../../../components/ui/overflowableText/OverflowableText.js";
17
- import "react-hook-form";
18
18
  import "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
19
19
  import "yup";
20
20
  import "../../../components/ui/treeViewFinder/TreeViewFinder.js";
@@ -17,8 +17,8 @@ import "localized-countries/data/fr";
17
17
  import "localized-countries/data/en";
18
18
  import { useSnackMessage } from "../../../hooks/useSnackMessage.js";
19
19
  import { useOpenLoaderShortWait } from "../../../hooks/useOpenLoaderShortWait.js";
20
- import "../../../components/ui/overflowableText/OverflowableText.js";
21
20
  import "react-hook-form";
21
+ import "../../../components/ui/overflowableText/OverflowableText.js";
22
22
  import "../../../components/ui/reactHookForm/provider/CustomFormProvider.js";
23
23
  import "yup";
24
24
  import "../../../components/ui/treeViewFinder/TreeViewFinder.js";
@@ -55,7 +55,8 @@ function AppSideBar({
55
55
  component: "aside",
56
56
  sx: {
57
57
  width: isMinimized ? 64 : 224,
58
- height: "100%"
58
+ height: "100%",
59
+ overflow: "hidden"
59
60
  },
60
61
  children: [
61
62
  /* @__PURE__ */ jsx(
@@ -35,8 +35,8 @@ function AppSideBarHeader({
35
35
  isMinimized && /* @__PURE__ */ jsx(EnvironmentChip, { environment, variant: "minimized" })
36
36
  ] }),
37
37
  !isMinimized && /* @__PURE__ */ jsxs(Box, { sx: { position: "relative", display: "inline-block" }, children: [
38
- /* @__PURE__ */ jsxs(Typography, { variant: "h6", children: [
39
- "Grid",
38
+ /* @__PURE__ */ jsxs(Typography, { fontSize: 18, children: [
39
+ /* @__PURE__ */ jsx(Box, { component: "span", style: { fontWeight: "bold" }, children: "Grid" }),
40
40
  /* @__PURE__ */ jsx(Box, { component: "span", sx: { color: appNameColor }, children: appName })
41
41
  ] }),
42
42
  /* @__PURE__ */ jsx(EnvironmentChip, { environment, variant: "expanded" })
@@ -55,7 +55,7 @@ function AppSideBarHeader({
55
55
  "V",
56
56
  appVersion
57
57
  ] }),
58
- /* @__PURE__ */ jsx(Tooltip, { title: `V${appVersion}`, disableHoverListener: !isMinimized, children: /* @__PURE__ */ jsx(IconButton, { sx: { padding: 0 }, onClick: () => setOpenDialog(SideBarDialogType.ABOUT), children: /* @__PURE__ */ jsx(Info, { fontSize: "small", color: "disabled" }) }) })
58
+ /* @__PURE__ */ jsx(Tooltip, { title: `V${appVersion}`, disableHoverListener: !isMinimized, children: /* @__PURE__ */ jsx(IconButton, { sx: { padding: 0 }, onClick: () => setOpenDialog(SideBarDialogType.ABOUT), children: /* @__PURE__ */ jsx(Info, { fontSize: "small", sx: { color: "text.secondary" } }) }) })
59
59
  ] })
60
60
  }
61
61
  ),
@@ -35,6 +35,7 @@ function AppSideBarFooter({
35
35
  /* @__PURE__ */ jsx(
36
36
  SideBarMenuItem,
37
37
  {
38
+ tooltip: isMinimized ? "top-bar/logout" : void 0,
38
39
  label: "top-bar/logout",
39
40
  icon: /* @__PURE__ */ jsx(Logout, {}),
40
41
  onClick: onLogoutClick,
@@ -46,6 +47,7 @@ function AppSideBarFooter({
46
47
  /* @__PURE__ */ jsx(
47
48
  SideBarMenuItem,
48
49
  {
50
+ tooltip: isMinimized ? "top-bar/expand" : void 0,
49
51
  label: "top-bar/minimize",
50
52
  icon: isMinimized ? /* @__PURE__ */ jsx(KeyboardDoubleArrowRight, {}) : /* @__PURE__ */ jsx(KeyboardDoubleArrowLeft, {}),
51
53
  onClick: toggleSideBarMinimized,
@@ -5,6 +5,7 @@ interface SideBarMenuItemProps {
5
5
  onClick?: () => void;
6
6
  showLabel?: boolean;
7
7
  disabled?: boolean;
8
+ tooltip?: string;
8
9
  }
9
- export declare function SideBarMenuItem({ label, icon, onClick, showLabel, disabled, }: Readonly<SideBarMenuItemProps>): import("react").JSX.Element;
10
+ export declare function SideBarMenuItem({ label, icon, onClick, tooltip, showLabel, disabled, }: Readonly<SideBarMenuItemProps>): import("react").JSX.Element;
10
11
  export {};
@@ -1,5 +1,5 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { Typography } from "@mui/material";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Tooltip, Typography } from "@mui/material";
3
3
  import { useIntl } from "react-intl";
4
4
  import { submenuFooterStyle } from "./submenu-footer.style.js";
5
5
  import "@mui/icons-material";
@@ -61,15 +61,16 @@ function SideBarMenuItem({
61
61
  label,
62
62
  icon,
63
63
  onClick,
64
+ tooltip = "",
64
65
  showLabel = true,
65
66
  disabled = false
66
67
  }) {
67
68
  const intl = useIntl();
68
- return /* @__PURE__ */ jsxs(CustomMenuItem, { disabled, onClick, sx: submenuFooterStyle.subMenu, children: [
69
+ return /* @__PURE__ */ jsx(Tooltip, { placement: "right-start", title: tooltip && intl.formatMessage({ id: tooltip }), children: /* @__PURE__ */ jsxs(CustomMenuItem, { disabled, onClick, sx: submenuFooterStyle.subMenu, children: [
69
70
  icon,
70
71
  " ",
71
72
  showLabel && /* @__PURE__ */ jsx(Typography, { px: 1, children: intl.formatMessage({ id: label }) })
72
- ] });
73
+ ] }) });
73
74
  }
74
75
  export {
75
76
  SideBarMenuItem
@@ -72,7 +72,7 @@ function ProfileMenu({ isMinimized, userProfile }) {
72
72
  CustomNestedMenuItem,
73
73
  {
74
74
  label: !isMinimized ? profileLabel : "",
75
- leftIcon: /* @__PURE__ */ jsx(UserAvatarIcon, { label: userProfile?.name ?? "" }),
75
+ leftIcon: /* @__PURE__ */ jsx(UserAvatarIcon, { sx: { backgroundColor: "text.secondary" }, label: userProfile?.name ?? "" }),
76
76
  sx: submenuFooterStyle.subMenu,
77
77
  children: [
78
78
  isMinimized && /* @__PURE__ */ jsx(MinimizedSubMenuHeader, { label: profileLabel }),
@@ -1,9 +1,5 @@
1
- /**
2
- * Copyright (c) 2026, RTE (http://www.rte-france.com)
3
- * This Source Code Form is subject to the terms of the Mozilla Public
4
- * License, v. 2.0. If a copy of the MPL was not distributed with this
5
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
- */
7
- export declare function UserAvatarIcon({ label }: Readonly<{
1
+ import { SxProps, Theme } from '@mui/material';
2
+ export declare function UserAvatarIcon({ label, sx }: Readonly<{
8
3
  label: string;
4
+ sx?: SxProps<Theme>;
9
5
  }>): import("react").JSX.Element;
@@ -4,6 +4,7 @@ import "../../../../utils/conversionUtils.js";
4
4
  import "../../../../utils/types/equipmentType.js";
5
5
  import { isEmpty } from "../../../../utils/functions.js";
6
6
  import "@mui/icons-material";
7
+ import { mergeSx } from "../../../../utils/styles.js";
7
8
  function getAbbreviationFromUserName(name) {
8
9
  if (isEmpty(name)) {
9
10
  return "";
@@ -14,16 +15,19 @@ function getAbbreviationFromUserName(name) {
14
15
  }
15
16
  return firstName[0];
16
17
  }
17
- function UserAvatarIcon({ label }) {
18
+ function UserAvatarIcon({ label, sx }) {
18
19
  return /* @__PURE__ */ jsx(
19
20
  Avatar,
20
21
  {
21
- sx: (theme) => ({
22
- height: "24px",
23
- width: "24px",
24
- fontSize: theme.typography.pxToRem(11),
25
- textTransform: "uppercase"
26
- }),
22
+ sx: mergeSx(
23
+ (theme) => ({
24
+ height: "24px",
25
+ width: "24px",
26
+ fontSize: theme.typography.pxToRem(11),
27
+ textTransform: "uppercase"
28
+ }),
29
+ { ...sx }
30
+ ),
27
31
  children: getAbbreviationFromUserName(label)
28
32
  }
29
33
  );
@@ -85,7 +85,7 @@ function SettingsMenu({
85
85
  sx: submenuFooterStyle.subMenuChildren,
86
86
  renderLabel: () => /* @__PURE__ */ jsxs(Box, { children: [
87
87
  intl.formatMessage({ id: "top-bar/language" }),
88
- /* @__PURE__ */ jsxs(Typography, { component: "span", fontSize: 12, sx: { color: "text.disabled" }, children: [
88
+ /* @__PURE__ */ jsxs(Typography, { component: "span", fontSize: 12, sx: { color: "text.secondary" }, children: [
89
89
  " - ",
90
90
  intl.formatMessage({
91
91
  id: `top-bar/language/${selectedLanguage}`
@@ -18,3 +18,4 @@ export * from './useSelectAppearance';
18
18
  export * from './use-parameters-backend';
19
19
  export * from './useGetLabelEquipmentTypes';
20
20
  export * from './useOpenLoaderShortWait';
21
+ export * from './use-tabs';
@@ -13,6 +13,7 @@ import { useSelectAppearance } from "./useSelectAppearance.js";
13
13
  import { OptionalServicesStatus, useParametersBackend } from "./use-parameters-backend.js";
14
14
  import { useGetLabelEquipmentTypes } from "./useGetLabelEquipmentTypes.js";
15
15
  import { useOpenLoaderShortWait } from "./useOpenLoaderShortWait.js";
16
+ import { useTabs } from "./use-tabs.js";
16
17
  export {
17
18
  OptionalServicesStatus,
18
19
  getComputedLanguage,
@@ -31,5 +32,6 @@ export {
31
32
  useSelectAppearance,
32
33
  useSnackMessage,
33
34
  useStateBoolean,
34
- useStateNumber
35
+ useStateNumber,
36
+ useTabs
35
37
  };
@@ -0,0 +1,33 @@
1
+ import { SyntheticEvent } from 'react';
2
+ import { FieldErrors } from 'react-hook-form';
3
+ export type UseTabsProps<TTabValue extends string | number> = {
4
+ defaultTab: TTabValue;
5
+ /**
6
+ * Live form errors (usually `formState.errors`). Used to refresh the
7
+ * highlight when the user switches tabs. Navigation NEVER reacts to it:
8
+ * the only navigation trigger is `onError`.
9
+ */
10
+ errors?: FieldErrors;
11
+ /** All possible tab values. Required if `tabFields` is omitted. */
12
+ tabValues?: TTabValue[];
13
+ /**
14
+ * Maps each tab value to the react-hook-form field path(s) whose validity
15
+ * decides whether the tab is highlighted. Falls back to `[String(tabValue)]`.
16
+ */
17
+ tabFields?: Partial<Record<TTabValue, string[]>>;
18
+ };
19
+ export type UseTabsReturn<TTabValue extends string | number> = {
20
+ selectedTab: TTabValue;
21
+ setSelectedTab: (tab: TTabValue) => void;
22
+ /** Errored tabs, excluding the currently selected one. */
23
+ tabsWithError: TTabValue[];
24
+ /** Handler for MUI `<Tabs onChange>`. Refreshes the highlight. */
25
+ onTabChange: (event: SyntheticEvent<Element, Event>, newValue: TTabValue) => void;
26
+ /**
27
+ * Invalid-submit handler — pass it as the 2nd argument of
28
+ * `handleSubmit(onSubmit, onError)`. This is the ONLY place navigation happens:
29
+ * stays on the current tab if it has errors, otherwise jumps to the first errored tab.
30
+ */
31
+ onError: (errors: FieldErrors) => void;
32
+ };
33
+ export declare function useTabs<TTabValue extends string | number>({ defaultTab, errors, tabValues, tabFields, }: Readonly<UseTabsProps<TTabValue>>): UseTabsReturn<TTabValue>;