@gooddata/sdk-ui-dashboard 11.40.0-alpha.1 → 11.40.0-alpha.3

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 (78) hide show
  1. package/NOTICE +245 -3
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +2 -2
  5. package/esm/index.js +2 -2
  6. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +35 -12
  7. package/esm/model/commandHandlers/index.js +0 -2
  8. package/esm/model/commandHandlers/tabs/createDashboardTabHandler.js +2 -2
  9. package/esm/model/commands/base.d.ts +1 -1
  10. package/esm/model/commands/index.d.ts +2 -2
  11. package/esm/model/commands/tabs.d.ts +0 -35
  12. package/esm/model/commands/tabs.js +0 -16
  13. package/esm/model/events/base.d.ts +1 -1
  14. package/esm/model/events/index.d.ts +2 -2
  15. package/esm/model/events/tabs.d.ts +0 -44
  16. package/esm/model/events/tabs.js +0 -28
  17. package/esm/model/react/useDashboardCommand.d.ts +0 -1
  18. package/esm/model/react/useDashboardCommandProcessing.d.ts +0 -4
  19. package/esm/model/store/tabs/index.d.ts +6 -0
  20. package/esm/model/store/tabs/tabsReducers.d.ts +6 -0
  21. package/esm/model/store/tabs/tabsReducers.js +16 -0
  22. package/esm/model/utils/tabLocalIdentifier.d.ts +4 -0
  23. package/esm/model/utils/tabLocalIdentifier.js +12 -0
  24. package/esm/presentation/dashboard/DashboardHeader/DashboardTabs.js +2 -10
  25. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +1 -0
  26. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +1 -0
  27. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +1 -0
  28. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +1 -0
  29. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +1 -0
  30. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +1 -0
  31. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +1 -0
  32. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +1 -0
  33. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +1 -0
  34. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +1 -0
  35. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +1 -0
  36. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +1 -0
  37. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +1 -0
  38. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +1 -0
  39. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +1 -0
  40. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +1 -0
  41. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +1 -0
  42. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +1 -0
  43. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +1 -0
  44. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +1 -0
  45. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +1 -0
  46. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +1 -0
  47. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +1 -0
  48. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +1 -0
  49. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +1 -0
  50. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +1 -0
  51. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +1 -0
  52. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +1 -0
  53. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +1 -0
  54. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +1 -0
  55. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +1 -0
  56. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +1 -0
  57. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +1 -0
  58. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +1 -0
  59. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +1 -0
  60. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +1 -0
  61. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +1 -0
  62. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +1 -0
  63. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +1 -0
  64. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +1 -0
  65. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +1 -0
  66. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +1 -0
  67. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +1 -0
  68. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +1 -0
  69. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +1 -0
  70. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +1 -0
  71. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +1 -0
  72. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +1 -0
  73. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +1 -0
  74. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +1 -0
  75. package/esm/sdk-ui-dashboard.d.ts +10 -94
  76. package/package.json +20 -20
  77. package/esm/model/commandHandlers/tabs/convertDashboardTabFromDefaultHandler.d.ts +0 -4
  78. package/esm/model/commandHandlers/tabs/convertDashboardTabFromDefaultHandler.js +0 -40
package/NOTICE CHANGED
@@ -7,9 +7,9 @@
7
7
 
8
8
  The following 3rd-party software packages may be used by or distributed with gooddata-ui-sdk. Any information relevant to third-party vendors listed below are collected using common, reasonable means.
9
9
 
10
- Date generated: 2026-5-27
10
+ Date generated: 2026-6-1
11
11
 
12
- Revision ID: cca91b63bcb24d8939c88b56da17c29f0346e9e2
12
+ Revision ID: 18e17a83de165c5692feed665b992e2839aefbf0
13
13
 
14
14
  ================================================================================
15
15
  ================================================================================
@@ -227,6 +227,10 @@ Revision ID: cca91b63bcb24d8939c88b56da17c29f0346e9e2
227
227
  - @mapbox/whoots-js (3.1.0) [ISC]
228
228
  - @maplibre/maplibre-gl-style-spec (20.4.0) [MIT, BSD-3-Clause, ISC]
229
229
  - @marijn/find-cluster-break (1.0.2) [MIT]
230
+ - @module-federation/error-codes (2.3.1) [MIT]
231
+ - @module-federation/runtime (2.3.1) [MIT]
232
+ - @module-federation/runtime-core (2.3.1) [MIT]
233
+ - @module-federation/sdk (2.3.1) [MIT]
230
234
  - @nodelib/fs.scandir (2.1.5) [MIT]
231
235
  - @nodelib/fs.stat (2.0.5) [MIT]
232
236
  - @nodelib/fs.walk (1.2.8) [MIT]
@@ -439,6 +443,7 @@ Revision ID: cca91b63bcb24d8939c88b56da17c29f0346e9e2
439
443
  - convert-source-map (1.9.0) [MIT]
440
444
  - convert-source-map (2.0.0) [MIT]
441
445
  - cookie (0.7.1) [MIT]
446
+ - cookie (1.1.1) [MIT]
442
447
  - cookie-signature (1.0.6) [MIT]
443
448
  - copy-to-clipboard (3.3.3) [MIT]
444
449
  - core-js-compat (3.45.1) [MIT]
@@ -669,6 +674,7 @@ Revision ID: cca91b63bcb24d8939c88b56da17c29f0346e9e2
669
674
  - isobject (3.0.1) [MIT]
670
675
  - jackspeak (4.1.1) [blueoak-1.0.0]
671
676
  - jest-worker (27.5.1) [MIT]
677
+ - jiti (2.6.1) [MIT]
672
678
  - js-tokens (4.0.0) [MIT]
673
679
  - js-yaml (4.1.1) [MIT]
674
680
  - jsesc (3.0.2) [MIT]
@@ -837,6 +843,7 @@ Revision ID: cca91b63bcb24d8939c88b56da17c29f0346e9e2
837
843
  - picocolors (1.1.1) [ISC]
838
844
  - picomatch (2.3.1) [MIT]
839
845
  - picomatch (4.0.3) [MIT]
846
+ - picomatch (4.0.4) [MIT]
840
847
  - pify (4.0.1) [MIT]
841
848
  - pkg-dir (4.2.0) [MIT]
842
849
  - playwright (1.60.0) [Apache-2.0, MIT, ISC, CC-BY-4.0, BSD-3-Clause]
@@ -887,6 +894,7 @@ Revision ID: cca91b63bcb24d8939c88b56da17c29f0346e9e2
887
894
  - react-portal (4.3.0) [MIT]
888
895
  - react-redux (9.2.0) [MIT]
889
896
  - react-responsive (10.0.1) [MIT, BSD-3-Clause]
897
+ - react-router (7.13.1) [MIT]
890
898
  - react-select (5.10.2) [MIT]
891
899
  - react-select-async-paginate (0.7.11) [MIT]
892
900
  - react-textarea-autosize (8.5.6) [MIT]
@@ -946,6 +954,7 @@ Revision ID: cca91b63bcb24d8939c88b56da17c29f0346e9e2
946
954
  - serialize-javascript (6.0.2) [BSD-3-Clause]
947
955
  - serve-index (1.9.1) [MIT]
948
956
  - serve-static (1.16.2) [MIT]
957
+ - set-cookie-parser (2.7.2) [MIT]
949
958
  - set-function-length (1.2.2) [MIT]
950
959
  - setprototypeof (1.1.0) [ISC]
951
960
  - setprototypeof (1.2.0) [ISC]
@@ -3558,6 +3567,54 @@ Package Depth: Transitive
3558
3567
  MIT
3559
3568
 
3560
3569
 
3570
+ --------------------------------------------------------------------------------
3571
+ Package Title: @module-federation/error-codes (2.3.1)
3572
+
3573
+ Package Locator: npm+@module-federation/error-codes$2.3.1
3574
+
3575
+ Package Depth: Transitive
3576
+ --------------------------------------------------------------------------------
3577
+
3578
+ * Declared Licenses *
3579
+ MIT
3580
+
3581
+
3582
+ --------------------------------------------------------------------------------
3583
+ Package Title: @module-federation/runtime (2.3.1)
3584
+
3585
+ Package Locator: npm+@module-federation/runtime$2.3.1
3586
+
3587
+ Package Depth: Direct
3588
+ --------------------------------------------------------------------------------
3589
+
3590
+ * Declared Licenses *
3591
+ MIT
3592
+
3593
+
3594
+ --------------------------------------------------------------------------------
3595
+ Package Title: @module-federation/runtime-core (2.3.1)
3596
+
3597
+ Package Locator: npm+@module-federation/runtime-core$2.3.1
3598
+
3599
+ Package Depth: Transitive
3600
+ --------------------------------------------------------------------------------
3601
+
3602
+ * Declared Licenses *
3603
+ MIT
3604
+
3605
+
3606
+ --------------------------------------------------------------------------------
3607
+ Package Title: @module-federation/sdk (2.3.1)
3608
+
3609
+ Package Locator: npm+@module-federation/sdk$2.3.1
3610
+
3611
+ Package Depth: Transitive
3612
+ --------------------------------------------------------------------------------
3613
+
3614
+ * Declared Licenses *
3615
+ MIT
3616
+
3617
+
3561
3618
  --------------------------------------------------------------------------------
3562
3619
  Package Title: @nodelib/fs.scandir (2.1.5)
3563
3620
 
@@ -6122,6 +6179,18 @@ Package Depth: Transitive
6122
6179
  MIT
6123
6180
 
6124
6181
 
6182
+ --------------------------------------------------------------------------------
6183
+ Package Title: cookie (1.1.1)
6184
+
6185
+ Package Locator: npm+cookie$1.1.1
6186
+
6187
+ Package Depth: Transitive
6188
+ --------------------------------------------------------------------------------
6189
+
6190
+ * Declared Licenses *
6191
+ MIT
6192
+
6193
+
6125
6194
  --------------------------------------------------------------------------------
6126
6195
  Package Title: cookie-signature (1.0.6)
6127
6196
 
@@ -8898,6 +8967,18 @@ Package Depth: Transitive
8898
8967
  MIT
8899
8968
 
8900
8969
 
8970
+ --------------------------------------------------------------------------------
8971
+ Package Title: jiti (2.6.1)
8972
+
8973
+ Package Locator: npm+jiti$2.6.1
8974
+
8975
+ Package Depth: Direct
8976
+ --------------------------------------------------------------------------------
8977
+
8978
+ * Declared Licenses *
8979
+ MIT
8980
+
8981
+
8901
8982
  --------------------------------------------------------------------------------
8902
8983
  Package Title: js-tokens (4.0.0)
8903
8984
 
@@ -10936,6 +11017,18 @@ Package Depth: Transitive
10936
11017
  MIT
10937
11018
 
10938
11019
 
11020
+ --------------------------------------------------------------------------------
11021
+ Package Title: picomatch (4.0.4)
11022
+
11023
+ Package Locator: npm+picomatch$4.0.4
11024
+
11025
+ Package Depth: Transitive
11026
+ --------------------------------------------------------------------------------
11027
+
11028
+ * Declared Licenses *
11029
+ MIT
11030
+
11031
+
10939
11032
  --------------------------------------------------------------------------------
10940
11033
  Package Title: pify (4.0.1)
10941
11034
 
@@ -11560,6 +11653,18 @@ MIT
11560
11653
  BSD-3-Clause
11561
11654
 
11562
11655
 
11656
+ --------------------------------------------------------------------------------
11657
+ Package Title: react-router (7.13.1)
11658
+
11659
+ Package Locator: npm+react-router$7.13.1
11660
+
11661
+ Package Depth: Direct
11662
+ --------------------------------------------------------------------------------
11663
+
11664
+ * Declared Licenses *
11665
+ MIT
11666
+
11667
+
11563
11668
  --------------------------------------------------------------------------------
11564
11669
  Package Title: react-select (5.10.2)
11565
11670
 
@@ -12280,6 +12385,18 @@ Package Depth: Transitive
12280
12385
  MIT
12281
12386
 
12282
12387
 
12388
+ --------------------------------------------------------------------------------
12389
+ Package Title: set-cookie-parser (2.7.2)
12390
+
12391
+ Package Locator: npm+set-cookie-parser$2.7.2
12392
+
12393
+ Package Depth: Transitive
12394
+ --------------------------------------------------------------------------------
12395
+
12396
+ * Declared Licenses *
12397
+ MIT
12398
+
12399
+
12283
12400
  --------------------------------------------------------------------------------
12284
12401
  Package Title: set-function-length (1.2.2)
12285
12402
 
@@ -32218,6 +32335,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32218
32335
  SOFTWARE.
32219
32336
 
32220
32337
 
32338
+ * MIT *
32339
+
32340
+ MIT License
32341
+
32342
+ Copyright (c) 2020 ScriptedAlchemy LLC (Zack Jackson) Zhou Shaw (zhouxiao)
32343
+
32344
+ Permission is hereby granted, free of charge, to any person obtaining a copy
32345
+ of this software and associated documentation files (the "Software"), to deal
32346
+ in the Software without restriction, including without limitation the rights
32347
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
32348
+ copies of the Software, and to permit persons to whom the Software is
32349
+ furnished to do so, subject to the following conditions:
32350
+
32351
+ The above copyright notice and this permission notice shall be included in all
32352
+ copies or substantial portions of the Software.
32353
+
32354
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32355
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32356
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
32357
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32358
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32359
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32360
+ SOFTWARE.
32361
+
32362
+
32221
32363
  * MIT *
32222
32364
 
32223
32365
  MIT License
@@ -32752,6 +32894,56 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32752
32894
  SOFTWARE.
32753
32895
 
32754
32896
 
32897
+ * MIT *
32898
+
32899
+ MIT License
32900
+
32901
+ Copyright (c) 2023-present zhanghang(2heal1)
32902
+
32903
+ Permission is hereby granted, free of charge, to any person obtaining a copy
32904
+ of this software and associated documentation files (the "Software"), to deal
32905
+ in the Software without restriction, including without limitation the rights
32906
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
32907
+ copies of the Software, and to permit persons to whom the Software is
32908
+ furnished to do so, subject to the following conditions:
32909
+
32910
+ The above copyright notice and this permission notice shall be included in all
32911
+ copies or substantial portions of the Software.
32912
+
32913
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32914
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32915
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
32916
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32917
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32918
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32919
+ SOFTWARE.
32920
+
32921
+
32922
+ * MIT *
32923
+
32924
+ MIT License
32925
+
32926
+ Copyright (c) 2023-present zhouxiao(zhoushaw)
32927
+
32928
+ Permission is hereby granted, free of charge, to any person obtaining a copy
32929
+ of this software and associated documentation files (the "Software"), to deal
32930
+ in the Software without restriction, including without limitation the rights
32931
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
32932
+ copies of the Software, and to permit persons to whom the Software is
32933
+ furnished to do so, subject to the following conditions:
32934
+
32935
+ The above copyright notice and this permission notice shall be included in all
32936
+ copies or substantial portions of the Software.
32937
+
32938
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32939
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32940
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
32941
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32942
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32943
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32944
+ SOFTWARE.
32945
+
32946
+
32755
32947
  * MIT *
32756
32948
 
32757
32949
  MIT License
@@ -33280,6 +33472,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33280
33472
  SOFTWARE.
33281
33473
 
33282
33474
 
33475
+ * MIT *
33476
+
33477
+ MIT License
33478
+
33479
+ Copyright (c) Pooya Parsa <pooya@pi0.io>
33480
+
33481
+ Permission is hereby granted, free of charge, to any person obtaining a copy
33482
+ of this software and associated documentation files (the "Software"), to deal
33483
+ in the Software without restriction, including without limitation the rights
33484
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
33485
+ copies of the Software, and to permit persons to whom the Software is
33486
+ furnished to do so, subject to the following conditions:
33487
+
33488
+ The above copyright notice and this permission notice shall be included in all
33489
+ copies or substantial portions of the Software.
33490
+
33491
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
33492
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33493
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
33494
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
33495
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
33496
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33497
+ SOFTWARE.
33498
+
33499
+
33283
33500
 
33284
33501
  * MIT *
33285
33502
 
@@ -35520,6 +35737,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
35520
35737
  THE SOFTWARE.
35521
35738
 
35522
35739
 
35740
+ * MIT *
35741
+
35742
+ The MIT License (MIT)
35743
+
35744
+ Copyright (c) 2015 Nathan Friedly <nathan@nfriedly.com> (http://nfriedly.com/)
35745
+
35746
+ Permission is hereby granted, free of charge, to any person obtaining a copy
35747
+ of this software and associated documentation files (the "Software"), to deal
35748
+ in the Software without restriction, including without limitation the rights
35749
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
35750
+ copies of the Software, and to permit persons to whom the Software is
35751
+ furnished to do so, subject to the following conditions:
35752
+
35753
+ The above copyright notice and this permission notice shall be included in
35754
+ all copies or substantial portions of the Software.
35755
+
35756
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
35757
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35758
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
35759
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35760
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
35761
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
35762
+ THE SOFTWARE.
35763
+
35764
+
35523
35765
  * MIT *
35524
35766
 
35525
35767
  The MIT License (MIT)
@@ -38189,4 +38431,4 @@ POSSIBILITY OF SUCH DAMAGE.
38189
38431
  --------------------------------------------------------------------------------
38190
38432
  --------------------------------------------------------------------------------
38191
38433
 
38192
- Report Generated by FOSSA on 2026-5-27
38434
+ Report Generated by FOSSA on 2026-6-1
@@ -1,3 +1,3 @@
1
- export declare const LIB_VERSION = "11.40.0-alpha.1";
1
+ export declare const LIB_VERSION = "11.40.0-alpha.3";
2
2
  export declare const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
3
3
  export declare const LIB_NAME = "@gooddata/sdk-ui-dashboard";
package/esm/__version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // (C) 2021 GoodData Corporation
2
2
  // DO NOT CHANGE THIS FILE, IT IS RE-GENERATED ON EVERY BUILD
3
- export const LIB_VERSION = "11.40.0-alpha.1";
3
+ export const LIB_VERSION = "11.40.0-alpha.3";
4
4
  export const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
5
5
  export const LIB_NAME = "@gooddata/sdk-ui-dashboard";
package/esm/index.d.ts CHANGED
@@ -57,10 +57,10 @@ export { type IChangeRenderMode, type IChangeRenderModePayload, type IRenderMode
57
57
  export { type IChangeDashboardDensity, type IChangeDashboardDensityPayload, changeDashboardDensity, type IRequestOpenDensityDialog, requestOpenDensityDialog, } from "./model/commands/density.js";
58
58
  export { type IAddDrillTargets, type IAddDrillTargetsPayload, addDrillTargets, } from "./model/commands/drillTargets.js";
59
59
  export { type ISetShowWidgetAsTable, type ISetShowWidgetAsTablePayload, setShowWidgetAsTable, } from "./model/commands/showWidgetAsTable.js";
60
- export { type ISwitchDashboardTab, type ISwitchDashboardTabPayload, type IConvertDashboardTabFromDefault, type IConvertDashboardTabFromDefaultPayload, type ICreateDashboardTab, type ICreateDashboardTabPayload, type IRepositionDashboardTab, type IRepositionDashboardTabPayload, type IDeleteDashboardTab, type IDeleteDashboardTabPayload, type IStartRenamingDashboardTab, type IStartRenamingDashboardTabPayload, type ICancelRenamingDashboardTab, type ICancelRenamingDashboardTabPayload, type IRenameDashboardTab, type IRenameDashboardTabPayload, switchDashboardTab, repositionDashboardTab, convertDashboardTabFromDefault, createDashboardTab, deleteDashboardTab, startRenamingDashboardTab, cancelRenamingDashboardTab, renameDashboardTab, } from "./model/commands/tabs.js";
60
+ export { type ISwitchDashboardTab, type ISwitchDashboardTabPayload, type ICreateDashboardTab, type ICreateDashboardTabPayload, type IRepositionDashboardTab, type IRepositionDashboardTabPayload, type IDeleteDashboardTab, type IDeleteDashboardTabPayload, type IStartRenamingDashboardTab, type IStartRenamingDashboardTabPayload, type ICancelRenamingDashboardTab, type ICancelRenamingDashboardTabPayload, type IRenameDashboardTab, type IRenameDashboardTabPayload, switchDashboardTab, repositionDashboardTab, createDashboardTab, deleteDashboardTab, startRenamingDashboardTab, cancelRenamingDashboardTab, renameDashboardTab, } from "./model/commands/tabs.js";
61
61
  export { type IDashboardEvent, type DashboardEventType, type ICustomDashboardEvent, type DashboardEventBody, isDashboardEvent, isCustomDashboardEvent, isDashboardEventOrCustomDashboardEvent, } from "./model/events/base.js";
62
62
  export { type DateFilterValidationFailed, type DateFilterValidationFailedPayload, type DashboardInitialized, type DashboardInitializedPayload, type DashboardDeinitialized, type DashboardDeinitializedPayload, type DashboardSaved, type DashboardSavedPayload, type DashboardCopySaved, type DashboardCopySavedPayload, type IDashboardRenamed, type IDashboardRenamedPayload, type IDashboardWasReset, type IDashboardWasResetPayload, type IDashboardDeleted, type IDashboardDeletedPayload, type IDashboardExportToPdfRequested, type IDashboardExportToPdfResolved, type IDashboardExportToPdfResolvedPayload, type DashboardSharingChanged, type DashboardSharingChangedPayload, type IDashboardExportToExcelRequested, type IDashboardExportToExcelResolved, type IDashboardExportToPdfPresentationRequested, type IDashboardExportToPdfPresentationResolved, type IDashboardExportToPptPresentationRequested, type IDashboardExportToPptPresentationResolved, type IDashboardExportToExcelResolvedPayload, type IDashboardExportToPdfPresentationResolvedPayload, type IDashboardExportToPptPresentationResolvedPayload, type IDashboardIgnoreExecutionTimestampChanged, type IDashboardIgnoreExecutionTimestampChangedPayload, type IDashboardExportToImageRequested, type IDashboardExportToImageResolved, type IDashboardExportToImageResolvedPayload, isDashboardSaved, isDashboardCopySaved, isDashboardInitialized, isDashboardDeinitialized, isDashboardRenamed, isDashboardWasReset, isDashboardDeleted, isDateFilterValidationFailed, isDashboardExportToPdfRequested, isDashboardExportToPdfResolved, isDashboardSharingChanged, isDashboardExportToExcelRequested, isDashboardExportToExcelResolved, isDashboardExportToPdfPresentationRequested, isDashboardExportToPdfPresentationResolved, isDashboardExportToPptPresentationResolved, isDashboardExportToPptPresentationRequested, isDashboardExportToImageRequested, isDashboardExportToImageResolved, isDashboardIgnoreExecutionTimestampChanged, } from "./model/events/dashboard.js";
63
- export { type IDashboardTabSwitched, type IDashboardTabSwitchedPayload, type IDashboardTabCreated, type IDashboardTabCreatedPayload, type IDashboardTabConvertedFromDefault, type IDashboardTabConvertedFromDefaultPayload, type IDashboardTabDeleted, type IDashboardTabDeletedPayload, type IDashboardTabRenamingStarted, type IDashboardTabRenamingStartedPayload, type IDashboardTabRenamingCanceled, type IDashboardTabRenamingCanceledPayload, type IDashboardTabRenamed, type IDashboardTabRenamedPayload, dashboardTabSwitched, isDashboardTabSwitched, dashboardTabCreated, isDashboardTabCreated, dashboardTabConvertedFromDefault, isDashboardTabConvertedFromDefault, dashboardTabDeleted, isDashboardTabDeleted, dashboardTabRenamingStarted, isDashboardTabRenamingStarted, dashboardTabRenamingCanceled, isDashboardTabRenamingCanceled, dashboardTabRenamed, isDashboardTabRenamed, } from "./model/events/tabs.js";
63
+ export { type IDashboardTabSwitched, type IDashboardTabSwitchedPayload, type IDashboardTabCreated, type IDashboardTabCreatedPayload, type IDashboardTabDeleted, type IDashboardTabDeletedPayload, type IDashboardTabRenamingStarted, type IDashboardTabRenamingStartedPayload, type IDashboardTabRenamingCanceled, type IDashboardTabRenamingCanceledPayload, type IDashboardTabRenamed, type IDashboardTabRenamedPayload, dashboardTabSwitched, isDashboardTabSwitched, dashboardTabCreated, isDashboardTabCreated, dashboardTabDeleted, isDashboardTabDeleted, dashboardTabRenamingStarted, isDashboardTabRenamingStarted, dashboardTabRenamingCanceled, isDashboardTabRenamingCanceled, dashboardTabRenamed, isDashboardTabRenamed, } from "./model/events/tabs.js";
64
64
  export { type IDashboardParametersSelectionReset, parametersSelectionReset, isDashboardParametersSelectionReset, } from "./model/events/parameters.js";
65
65
  export { type IDashboardCommandStarted, type IDashboardCommandStartedPayload, type IDashboardCommandRejected, type IDashboardCommandFailed, type IDashboardCommandFailedPayload, type ActionFailedErrorReason, type IDashboardQueryRejected, type IDashboardQueryFailed, type IDashboardQueryFailedPayload, type IDashboardQueryStarted, type IDashboardQueryStartedPayload, type IDashboardQueryCompleted, type IDashboardQueryCompletedPayload, isDashboardCommandStarted, isDashboardCommandFailed, isDashboardQueryFailed, isDashboardCommandRejected, isDashboardQueryCompleted, isDashboardQueryRejected, isDashboardQueryStarted, } from "./model/events/general.js";
66
66
  export { type DashboardDateFilterSelectionChanged, type DashboardDateFilterSelectionChangedPayload, type DashboardAttributeFilterSelectionChangedPayload, type DashboardAttributeFilterItemSelectionReplaced, type DashboardAttributeFilterItemSelectionReplacedPayload, type DashboardFilterContextChanged, type DashboardFilterContextChangedPayload, type IDashboardAttributeFilterParentChanged, type IDashboardAttributeFilterParentChangedPayload, type IDashboardAttributeFilterRemoved, type IDashboardAttributeFilterRemovedPayload, type DashboardAttributeFilterSelectionChanged, type IDashboardAttributeTitleChanged, type IDashboardAttributeTitleChangedPayload, type IDashboardAttributeSelectionModeChanged, type IDashboardAttributeSelectionModeChangedPayload, type IDashboardAttributeFilterMoved, type IDashboardAttributeFilterMovedPayload, type IDashboardAttributeFilterAdded, type IDashboardAttributeFilterAddedPayload, type IDashboardAttributeFilterConfigModeChanged, type IDashboardAttributeFilterConfigModeChangedPayload, type IDashboardAttributeFilterConfigLimitingItemsChanged, type IDashboardAttributeFilterConfigLimitingItemsChangedPayload, type IDashboardMeasureValueFilterAdded, type IDashboardMeasureValueFilterAddedPayload, type IDashboardMeasureValueFilterRemoved, type IDashboardMeasureValueFilterRemovedPayload, type IDashboardMeasureValueFilterMoved, type IDashboardMeasureValueFilterMovedPayload, type IDashboardMeasureValueFilterTitleChanged, type IDashboardMeasureValueFilterTitleChangedPayload, type IDashboardMeasureValueFilterConfigModeChanged, type IDashboardMeasureValueFilterConfigModeChangedPayload, type IDashboardFilterViewCreationSucceeded, type IDashboardFilterViewCreationSucceededPayload, type IDashboardFilterViewCreationFailed, type IDashboardFilterViewDeletionSucceeded, type IDashboardFilterViewDeletionSucceededPayload, type IDashboardFilterViewDeletionFailed, type IDashboardFilterViewApplicationSucceeded, type IDashboardFilterViewApplicationSucceededPayload, type IDashboardFilterViewApplicationFailed, type IDashboardFilterViewDefaultStatusChangeSucceeded, type IDashboardFilterViewDefaultStatusChangeSucceededPayload, type IDashboardFilterViewDefaultStatusChangeFailed, type IDashboardFilterViewDefaultStatusChangeFailedPayload, type IDashboardFilterContextSelectionReset, type IDashboardFilterContextWorkingSelectionApplied, type IDashboardMeasureValueFilterConditionChanged, type IDashboardMeasureValueFilterConditionChangedPayload, type IDashboardMeasureValueFilterDimensionalityChanged, type IDashboardMeasureValueFilterDimensionalityChangedPayload, isDashboardMeasureValueFilterAdded, isDashboardMeasureValueFilterRemoved, isDashboardMeasureValueFilterMoved, isDashboardMeasureValueFilterTitleChanged, isDashboardMeasureValueFilterConfigModeChanged, isDashboardMeasureValueFilterConditionChanged, isDashboardMeasureValueFilterDimensionalityChanged, isDashboardAttributeFilterAdded, isDashboardAttributeFilterMoved, isDashboardAttributeFilterParentChanged, isDashboardAttributeFilterRemoved, isDashboardAttributeFilterSelectionChanged, isDashboardAttributeFilterItemSelectionReplaced, isDashboardAttributeFilterSelectionModeChanged, isDashboardAttributeFilterTitleChanged, isDashboardDateFilterSelectionChanged, isDashboardFilterContextChanged, isDashboardAttributeFilterConfigModeChanged, isDashboardAttributeFilterConfigLimitingItemsChanged, isDashboardFilterViewCreationSucceeded, isDashboardFilterViewCreationFailed, isDashboardFilterViewDeletionSucceeded, isDashboardFilterViewDeletionFailed, isDashboardFilterViewApplicationSucceeded, isDashboardFilterViewApplicationFailed, isDashboardFilterViewDefaultStatusChangeSucceeded, isDashboardFilterViewDefaultStatusChangeFailed, isDashboardFilterContextSelectionReset, isDashboardFilterContextWorkingSelectionApplied, filterContextSelectionReset, filterContextWorkingSelectionApplied, } from "./model/events/filters.js";
package/esm/index.js CHANGED
@@ -42,11 +42,11 @@ export { changeRenderMode, cancelEditRenderMode, switchToEditRenderMode, } from
42
42
  export { changeDashboardDensity, requestOpenDensityDialog, } from "./model/commands/density.js";
43
43
  export { addDrillTargets, } from "./model/commands/drillTargets.js";
44
44
  export { setShowWidgetAsTable, } from "./model/commands/showWidgetAsTable.js";
45
- export { switchDashboardTab, repositionDashboardTab, convertDashboardTabFromDefault, createDashboardTab, deleteDashboardTab, startRenamingDashboardTab, cancelRenamingDashboardTab, renameDashboardTab, } from "./model/commands/tabs.js";
45
+ export { switchDashboardTab, repositionDashboardTab, createDashboardTab, deleteDashboardTab, startRenamingDashboardTab, cancelRenamingDashboardTab, renameDashboardTab, } from "./model/commands/tabs.js";
46
46
  // Re-export from events
47
47
  export { isDashboardEvent, isCustomDashboardEvent, isDashboardEventOrCustomDashboardEvent, } from "./model/events/base.js";
48
48
  export { isDashboardSaved, isDashboardCopySaved, isDashboardInitialized, isDashboardDeinitialized, isDashboardRenamed, isDashboardWasReset, isDashboardDeleted, isDateFilterValidationFailed, isDashboardExportToPdfRequested, isDashboardExportToPdfResolved, isDashboardSharingChanged, isDashboardExportToExcelRequested, isDashboardExportToExcelResolved, isDashboardExportToPdfPresentationRequested, isDashboardExportToPdfPresentationResolved, isDashboardExportToPptPresentationResolved, isDashboardExportToPptPresentationRequested, isDashboardExportToImageRequested, isDashboardExportToImageResolved, isDashboardIgnoreExecutionTimestampChanged, } from "./model/events/dashboard.js";
49
- export { dashboardTabSwitched, isDashboardTabSwitched, dashboardTabCreated, isDashboardTabCreated, dashboardTabConvertedFromDefault, isDashboardTabConvertedFromDefault, dashboardTabDeleted, isDashboardTabDeleted, dashboardTabRenamingStarted, isDashboardTabRenamingStarted, dashboardTabRenamingCanceled, isDashboardTabRenamingCanceled, dashboardTabRenamed, isDashboardTabRenamed, } from "./model/events/tabs.js";
49
+ export { dashboardTabSwitched, isDashboardTabSwitched, dashboardTabCreated, isDashboardTabCreated, dashboardTabDeleted, isDashboardTabDeleted, dashboardTabRenamingStarted, isDashboardTabRenamingStarted, dashboardTabRenamingCanceled, isDashboardTabRenamingCanceled, dashboardTabRenamed, isDashboardTabRenamed, } from "./model/events/tabs.js";
50
50
  export { parametersSelectionReset, isDashboardParametersSelectionReset, } from "./model/events/parameters.js";
51
51
  export { isDashboardCommandStarted, isDashboardCommandFailed, isDashboardQueryFailed, isDashboardCommandRejected, isDashboardQueryCompleted, isDashboardQueryRejected, isDashboardQueryStarted, } from "./model/events/general.js";
52
52
  export { isDashboardMeasureValueFilterAdded, isDashboardMeasureValueFilterRemoved, isDashboardMeasureValueFilterMoved, isDashboardMeasureValueFilterTitleChanged, isDashboardMeasureValueFilterConfigModeChanged, isDashboardMeasureValueFilterConditionChanged, isDashboardMeasureValueFilterDimensionalityChanged, isDashboardAttributeFilterAdded, isDashboardAttributeFilterMoved, isDashboardAttributeFilterParentChanged, isDashboardAttributeFilterRemoved, isDashboardAttributeFilterSelectionChanged, isDashboardAttributeFilterItemSelectionReplaced, isDashboardAttributeFilterSelectionModeChanged, isDashboardAttributeFilterTitleChanged, isDashboardDateFilterSelectionChanged, isDashboardFilterContextChanged, isDashboardAttributeFilterConfigModeChanged, isDashboardAttributeFilterConfigLimitingItemsChanged, isDashboardFilterViewCreationSucceeded, isDashboardFilterViewCreationFailed, isDashboardFilterViewDeletionSucceeded, isDashboardFilterViewDeletionFailed, isDashboardFilterViewApplicationSucceeded, isDashboardFilterViewApplicationFailed, isDashboardFilterViewDefaultStatusChangeSucceeded, isDashboardFilterViewDefaultStatusChangeFailed, isDashboardFilterContextSelectionReset, isDashboardFilterContextWorkingSelectionApplied, filterContextSelectionReset, filterContextWorkingSelectionApplied, } from "./model/events/filters.js";
@@ -2,7 +2,6 @@
2
2
  import { batchActions } from "redux-batched-actions";
3
3
  import { call, put, select } from "redux-saga/effects";
4
4
  import { invariant } from "ts-invariant";
5
- import { v4 as uuid } from "uuid";
6
5
  import { isTempFilterContext, } from "@gooddata/sdk-model";
7
6
  import { dashboardFilterContextIdentity } from "../../../_staging/dashboard/dashboardFilterContext.js";
8
7
  import { dashboardLayoutRemoveIdentity, dashboardLayoutWidgetIdentityMap, } from "../../../_staging/dashboard/dashboardLayout.js";
@@ -29,7 +28,9 @@ import { filterOutCustomWidgets, selectBasicLayoutByTab } from "../../store/tabs
29
28
  import { selectMeasureValueFilterConfigsOverridesByTab } from "../../store/tabs/measureValueFilterConfigs/measureValueFilterConfigsSelectors.js";
30
29
  import { selectSmartPersistedTabsParameters } from "../../store/tabs/parameters/parametersSelectors.js";
31
30
  import { selectTabs } from "../../store/tabs/tabsSelectors.js";
31
+ import { DEFAULT_TAB_ID } from "../../store/tabs/tabsState.js";
32
32
  import { isTemporaryIdentity } from "../../utils/dashboardItemUtils.js";
33
+ import { generateTabLocalIdentifier } from "../../utils/tabLocalIdentifier.js";
33
34
  import { changeRenderModeHandler } from "../renderMode/changeRenderModeHandler.js";
34
35
  import { switchDashboardTabHandler } from "../tabs/switchDashboardTabHandler.js";
35
36
  function createDashboard(ctx, saveCtx) {
@@ -69,7 +70,7 @@ export function getDashboardWithSharing(dashboard, sharingSupported = true, isNe
69
70
  * @param parametersByTab - Smart-persisted parameters keyed by tab localIdentifier
70
71
  * @returns Array of IDashboardTab objects ready for saving to backend
71
72
  */
72
- function processExistingTabs(tabs, parametersByTab) {
73
+ function processExistingTabs(tabs, parametersByTab, defaultTabNewLocalIdentifier) {
73
74
  return tabs.map((tab) => {
74
75
  const dateFilterConfig = tab.dateFilterConfig?.dateFilterConfig;
75
76
  const dateFilterConfigProp = dateFilterConfig ? { dateFilterConfig } : {};
@@ -97,7 +98,9 @@ function processExistingTabs(tabs, parametersByTab) {
97
98
  const tabParameters = parametersByTab[tab.localIdentifier] ?? [];
98
99
  const result = {
99
100
  // explicitly type the result to avoid type errors caused by spread operators
100
- localIdentifier: tab.localIdentifier,
101
+ localIdentifier: tab.localIdentifier === DEFAULT_TAB_ID && defaultTabNewLocalIdentifier
102
+ ? defaultTabNewLocalIdentifier
103
+ : tab.localIdentifier,
101
104
  title: tab.title ?? "",
102
105
  // Use each tab's own layout, filter out custom widgets, then process
103
106
  layout: tabLayout ? processLayout(filterOutCustomWidgets(tabLayout)) : undefined,
@@ -127,7 +130,7 @@ function buildOptionalFilterConfigsProps(attributeFilterConfigs, dateFilterConfi
127
130
  function createDefaultTab(layout, rootFilterContext, dateFilterConfig, attributeFilterConfigs, dateFilterConfigs, measureValueFilterConfigs) {
128
131
  return [
129
132
  {
130
- localIdentifier: uuid(),
133
+ localIdentifier: generateTabLocalIdentifier(),
131
134
  title: "",
132
135
  layout: layout ? processLayout(layout) : undefined,
133
136
  filterContext: rootFilterContext,
@@ -136,14 +139,14 @@ function createDefaultTab(layout, rootFilterContext, dateFilterConfig, attribute
136
139
  },
137
140
  ];
138
141
  }
139
- function resolveProcessedTabs(tabs, rootFilterContext, layout, dateFilterConfig, attributeFilterConfigs, dateFilterConfigs, measureValueFilterConfigs, parametersByTab) {
142
+ function resolveProcessedTabs(tabs, rootFilterContext, layout, dateFilterConfig, attributeFilterConfigs, dateFilterConfigs, measureValueFilterConfigs, parametersByTab, defaultTabNewLocalIdentifier) {
140
143
  // If no tabs exist, create a default tab with root-level properties
141
144
  const shouldCreateDefaultTab = !tabs || tabs.length === 0;
142
145
  if (shouldCreateDefaultTab && rootFilterContext) {
143
146
  return createDefaultTab(layout, rootFilterContext, dateFilterConfig, attributeFilterConfigs, dateFilterConfigs, measureValueFilterConfigs);
144
147
  }
145
148
  if (tabs) {
146
- return processExistingTabs(tabs, parametersByTab);
149
+ return processExistingTabs(tabs, parametersByTab, defaultTabNewLocalIdentifier);
147
150
  }
148
151
  return undefined;
149
152
  }
@@ -157,6 +160,13 @@ function* createDashboardSaveContext(cmd, isNewDashboard) {
157
160
  const persistedDashboard = yield select(selectPersistedDashboard);
158
161
  const dashboardDescriptor = yield select(selectDashboardDescriptor);
159
162
  const tabs = yield select(selectTabs);
163
+ // Generate a real UUID for the UI placeholder tab (DEFAULT_TAB_ID) only when it has never
164
+ // been persisted. If the backend already owns a tab with that identifier (e.g. set intentionally
165
+ // via API or as-code definition) we must leave it unchanged.
166
+ const hasPersistedDefaultTab = persistedDashboard?.tabs?.some((t) => t.localIdentifier === DEFAULT_TAB_ID);
167
+ const defaultTabNewLocalIdentifier = !hasPersistedDefaultTab && tabs?.some((t) => t.localIdentifier === DEFAULT_TAB_ID)
168
+ ? generateTabLocalIdentifier()
169
+ : undefined;
160
170
  // Root-level properties must always reflect the first tab, regardless of which tab is active.
161
171
  // Using active-tab selectors here would persist the wrong data when saving from a non-first tab.
162
172
  const firstTabId = tabs?.[0]?.localIdentifier;
@@ -194,7 +204,7 @@ function* createDashboardSaveContext(cmd, isNewDashboard) {
194
204
  ...filterContextDefinition,
195
205
  }
196
206
  : undefined;
197
- const processedTabs = resolveProcessedTabs(tabs, rootFilterContext, layout, dateFilterConfig, attributeFilterConfigs, dateFilterConfigs, measureValueFilterConfigs, parametersByTab);
207
+ const processedTabs = resolveProcessedTabs(tabs, rootFilterContext, layout, dateFilterConfig, attributeFilterConfigs, dateFilterConfigs, measureValueFilterConfigs, parametersByTab, defaultTabNewLocalIdentifier);
198
208
  const locale = yield select(selectLocale);
199
209
  const translations = yield call(resolveMessages, locale);
200
210
  const title = (cmd.payload.title ?? dashboardDescriptor.title) || translations[messages.untitled.id];
@@ -226,6 +236,7 @@ function* createDashboardSaveContext(cmd, isNewDashboard) {
226
236
  persistedDashboard,
227
237
  dashboardFromState,
228
238
  dashboardToSave: getDashboardWithSharing(dashboardToSave, capabilities.supportsAccessControl, isNewDashboard),
239
+ defaultTabNewLocalIdentifier,
229
240
  };
230
241
  }
231
242
  function* save(ctx, saveCtx, saveFn, saveActionName) {
@@ -248,9 +259,15 @@ function* save(ctx, saveCtx, saveFn, saveActionName) {
248
259
  const stateTabs = yield select(selectTabs);
249
260
  // For each tab in the saved dashboard, update its widget identities and filter context identity
250
261
  dashboard.tabs.forEach((savedTab) => {
251
- const stateTab = stateTabs?.find((t) => t.localIdentifier === savedTab.localIdentifier);
262
+ // If this tab was the DEFAULT_TAB_ID placeholder being saved for the first time,
263
+ // find the state tab by DEFAULT_TAB_ID (its current state ID) and use it as the tabId
264
+ // for identity updates. resolveDefaultTab (pushed below) will rename it afterwards.
265
+ const isDefaultTabBeingSaved = savedTab.localIdentifier === saveCtx.defaultTabNewLocalIdentifier;
266
+ const stateTab = isDefaultTabBeingSaved
267
+ ? stateTabs?.find((t) => t.localIdentifier === DEFAULT_TAB_ID)
268
+ : stateTabs?.find((t) => t.localIdentifier === savedTab.localIdentifier);
269
+ const tabIdForUpdate = stateTab?.localIdentifier ?? savedTab.localIdentifier;
252
270
  // Update filter context identity for this tab
253
- // Extract identity directly from the filter context
254
271
  const filterContext = savedTab.filterContext;
255
272
  const filterContextIdentity = filterContext && !isTempFilterContext(filterContext) && filterContext.ref
256
273
  ? {
@@ -260,20 +277,26 @@ function* save(ctx, saveCtx, saveFn, saveActionName) {
260
277
  }
261
278
  : undefined;
262
279
  actions.push(tabsActions.updateFilterContextIdentityForTab({
263
- tabId: savedTab.localIdentifier,
280
+ tabId: tabIdForUpdate,
264
281
  filterContextIdentity,
265
282
  }));
266
283
  // Update widget identities for this tab if both layouts exist
267
284
  if (stateTab?.layout?.layout && savedTab.layout) {
268
- // Filter out custom widgets from state layout to match the saved layout structure
269
285
  const stateLayoutWithoutCustomWidgets = filterOutCustomWidgets(stateTab.layout.layout);
270
286
  const mapping = dashboardLayoutWidgetIdentityMap(stateLayoutWithoutCustomWidgets, savedTab.layout);
271
287
  actions.push(tabsActions.updateWidgetIdentitiesForTab({
272
- tabId: savedTab.localIdentifier,
288
+ tabId: tabIdForUpdate,
273
289
  mapping,
274
290
  }));
275
291
  }
276
292
  });
293
+ // After all identity updates, rename DEFAULT_TAB_ID to its real UUID in state.
294
+ // This makes the identifier stable for filter views, drill targets, and future saves.
295
+ if (saveCtx.defaultTabNewLocalIdentifier) {
296
+ actions.push(tabsActions.resolveDefaultTab({
297
+ newLocalIdentifier: saveCtx.defaultTabNewLocalIdentifier,
298
+ }));
299
+ }
277
300
  }
278
301
  else {
279
302
  // For dashboards without tabs, use the original approach with active tab actions
@@ -87,7 +87,6 @@ import { refreshAutomationsHandlers } from "./scheduledEmail/refreshAutomationsH
87
87
  import { saveScheduledEmailHandler } from "./scheduledEmail/saveScheduledEmailHandler.js";
88
88
  import { handleSetWidgetToShowAsTable } from "./showWidgetAsTable/showWidgetAsTableHandler.js";
89
89
  import { cancelRenamingDashboardTabHandler } from "./tabs/cancelRenamingDashboardTabHandler.js";
90
- import { convertDashboardTabFromDefaultHandler } from "./tabs/convertDashboardTabFromDefaultHandler.js";
91
90
  import { createDashboardTabHandler } from "./tabs/createDashboardTabHandler.js";
92
91
  import { deleteDashboardTabHandler } from "./tabs/deleteDashboardTabHandler.js";
93
92
  import { renameDashboardTabHandler } from "./tabs/renameDashboardTabHandler.js";
@@ -254,7 +253,6 @@ export const DefaultCommandHandlers = {
254
253
  "GDC.DASH/CMD.CHANGE_IGNORE_EXECUTION_TIMESTAMP": changeIgnoreExecutionTimestampHandler,
255
254
  "GDC.DASH/CMD.SHOW_WIDGET_AS_TABLE.SET": handleSetWidgetToShowAsTable,
256
255
  "GDC.DASH/CMD.TAB.CREATE": createDashboardTabHandler,
257
- "GDC.DASH/CMD.TAB.CONVERT_FROM_DEFAULT": convertDashboardTabFromDefaultHandler,
258
256
  "GDC.DASH/CMD.TAB.SWITCH": switchDashboardTabHandler,
259
257
  "GDC.DASH/CMD.TAB.REPOSITION": repositionDashboardTabHandler,
260
258
  "GDC.DASH/CMD.TAB.DELETE": deleteDashboardTabHandler,
@@ -1,6 +1,5 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { call, put, select } from "redux-saga/effects";
3
- import { v4 as uuid } from "uuid";
4
3
  import { createDefaultFilterContext } from "../../../_staging/dashboard/defaultFilterContext.js";
5
4
  import { DEFAULT_FISCAL_DATE_FILTER_PRESET } from "../../../_staging/dateFilterConfig/defaultConfig.js";
6
5
  import { configHasFiscalPresets } from "../../../_staging/dateFilterConfig/validation.js";
@@ -12,6 +11,7 @@ import { selectActiveCalendars, selectDateFilterConfig } from "../../store/confi
12
11
  import { tabsActions } from "../../store/tabs/index.js";
13
12
  import { selectScreen } from "../../store/tabs/layout/layoutSelectors.js";
14
13
  import { selectActiveTabLocalIdentifier, selectTabs } from "../../store/tabs/tabsSelectors.js";
14
+ import { generateTabLocalIdentifier } from "../../utils/tabLocalIdentifier.js";
15
15
  import { EmptyDashboardLayout } from "../dashboard/common/dashboardInitialize.js";
16
16
  import { switchDashboardTabHandler } from "./switchDashboardTabHandler.js";
17
17
  const getTabState = ({ title, localIdentifier, isRenaming, filterContext, dateFilterConfig, dateFilterConfigs, attributeFilterConfigs, layout, screen, }) => {
@@ -61,7 +61,7 @@ export function* createDashboardTabHandler(ctx, cmd) {
61
61
  configHasFiscalPresets(dateFilterConfig)
62
62
  ? { ...dateFilterConfig, selectedOption: DEFAULT_FISCAL_DATE_FILTER_PRESET }
63
63
  : dateFilterConfig;
64
- const newTabId = uuid();
64
+ const newTabId = generateTabLocalIdentifier();
65
65
  const newTabFilterContext = createDefaultFilterContext(effectiveDateFilterConfig, true);
66
66
  const newTab = getTabState({
67
67
  localIdentifier: newTabId,
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * @public
11
11
  */
12
- export type DashboardCommandType = "GDC.DASH/CMD.INITIALIZE" | "GDC.DASH/CMD.SAVE" | "GDC.DASH/CMD.SAVEAS" | "GDC.DASH/CMD.RESET" | "GDC.DASH/CMD.RENAME" | "GDC.DASH/CMD.DELETE" | "GDC.DASH/CMD.CHANGE_RENDER_MODE" | "GDC.DASH/CMD.SHARING.CHANGE" | "GDC.DASH/CMD.EXPORT.PDF" | "GDC.DASH/CMD.EXPORT.EXCEL" | "GDC.DASH/CMD.EXPORT.PDF_PRESENTATION" | "GDC.DASH/CMD.EXPORT.PPT_PRESENTATION" | "GDC.DASH/CMD.EVENT.TRIGGER" | "GDC.DASH/CMD.EXECUTION_RESULT.UPSERT" | "GDC.DASH/CMD.FILTER_CONTEXT.CHANGE_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.DATE_FILTER.CHANGE_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.ADD" | "GDC.DASH/CMD.FILTER_CONTEXT.TEXT_ATTRIBUTE_FILTER.ADD" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.REMOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.MOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.CHANGE_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER_ITEM.REPLACE_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_PARENTS" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_DISPLAY_FORM" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_TITLE" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_SELECTION_MODE" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_DEPENDENT_DATE_FILTERS" | "GDC.DASH/CMD.FILTER_CONTEXT.DATE_FILTER.ADD" | "GDC.DASH/CMD.FILTER_CONTEXT.DATE_FILTER.REMOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.DATE_FILTER.MOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.ADD" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.REMOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.MOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.CHANGE_CONDITION" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.SET_DIMENSIONALITY" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.SET_TITLE" | "GDC.DASH/CMD.ATTRIBUTE_FILTER_CONFIG.SET_MODE" | "GDC.DASH/CMD.MEASURE_VALUE_FILTER_CONFIG.SET_MODE" | "GDC.DASH/CMD.ATTRIBUTE_FILTER_CONFIG.SET_AVAILABLE_MODE" | "GDC.DASH/CMD.ATTRIBUTE_FILTER_CONFIG.SET_LIMITING_ITEMS" | "GDC.DASH/CMD.ATTRIBUTE_FILTER_CONFIG.SET_DISPLAY_AS_LABEL" | "GDC.DASH/CMD.DATE_FILTER_CONFIG.SET_MODE" | "GDC.DASH/CMD.DATE_FILTER_WITH_DIMENSION_CONFIG.SET_MODE" | "GDC.DASH/CMD.DATE_FILTER_CONFIG.SET_TITLE" | "GDC.DASH/CMD.FLUID_LAYOUT.ADD_SECTION" | "GDC.DASH/CMD.FLUID_LAYOUT.MOVE_SECTION" | "GDC.DASH/CMD.FLUID_LAYOUT.MOVE_ITEM_TO_NEW_SECTION" | "GDC.DASH/CMD.FLUID_LAYOUT.REMOVE_SECTION" | "GDC.DASH/CMD.FLUID_LAYOUT.CHANGE_SECTION_HEADER" | "GDC.DASH/CMD.FLUID_LAYOUT.ADD_ITEMS" | "GDC.DASH/CMD.FLUID_LAYOUT.REPLACE_ITEM" | "GDC.DASH/CMD.FLUID_LAYOUT.MOVE_ITEM" | "GDC.DASH/CMD.FLUID_LAYOUT.REMOVE_ITEM" | "GDC.DASH/CMD.FLUID_LAYOUT.REMOVE_ITEM_BY_WIDGET_REF" | "GDC.DASH/CMD.FLUID_LAYOUT.UNDO" | "GDC.DASH/CMD.FLUID_LAYOUT.RESIZE_HEIGHT" | "GDC.DASH/CMD.FLUID_LAYOUT.RESIZE_WIDTH" | "GDC.DASH/CMD.FLUID_LAYOUT.SET_SCREEN_SIZE" | "GDC.DASH/CMD.FLEXIBLE_LAYOUT.TOGGLE_LAYOUT_SECTION_HEADERS" | "GDC.DASH/CMD.FLEXIBLE_LAYOUT.TOGGLE_LAYOUT_DIRECTION" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_HEADER" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_MEASURE" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_FILTER_SETTINGS" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_COMPARISON" | "GDC.DASH/CMD.KPI_WIDGET.REFRESH" | "GDC.DASH/CMD.KPI_WIDGET.SET_DRILL" | "GDC.DASH/CMD.KPI_WIDGET.REMOVE_DRILL" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_DESCRIPTION" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_CONFIGURATION" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_HEADER" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_DESCRIPTION" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_FILTER_SETTINGS" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_PROPERTIES" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_CONFIGURATION" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_INSIGHT" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_IGNORE_CROSS_FILTERING" | "GDC.DASH/CMD.INSIGHT_WIDGET.EXPORT" | "GDC.DASH/CMD.INSIGHT_WIDGET.MODIFY_DRILLS" | "GDC.DASH/CMD.INSIGHT_WIDGET.REMOVE_DRILLS" | "GDC.DASH/CMD.INSIGHT_WIDGET.REMOVE_DRILL_DOWN" | "GDC.DASH/CMD.INSIGHT_WIDGET.REMOVE_DRILL_TO_URL" | "GDC.DASH/CMD.INSIGHT_WIDGET.ADD_DRILL_DOWN" | "GDC.DASH/CMD.INSIGHT_WIDGET.MODIFY_DRILL_DOWN" | "GDC.DASH/CMD.INSIGHT_WIDGET.REFRESH" | "GDC.DASH/CMD.RICH_TEXT_WIDGET.CHANGE_CONTENT" | "GDC.DASH/CMD.RICH_TEXT_WIDGET.CHANGE_FILTER_SETTINGS" | "GDC.DASH/CMD.VISUALIZATION_SWITCHER_WIDGET.ADD_VISUALIZATION" | "GDC.DASH/CMD.VISUALIZATION_SWITCHER_WIDGET.UPDATE_VISUALIZATIONS" | "GDC.DASH/CMD.ALERT.CREATE" | "GDC.DASH/CMD.ALERT.SAVE" | "GDC.DASH/CMD.SCHEDULED_EMAIL.CREATE" | "GDC.DASH/CMD.SCHEDULED_EMAIL.SAVE" | "GDC.DASH/CMD.DRILL" | "GDC.DASH/CMD.DRILL.DRILL_DOWN" | "GDC.DASH/CMD.DRILL.DRILL_TO_INSIGHT" | "GDC.DASH/CMD.DRILL.DRILL_TO_DASHBOARD" | "GDC.DASH/CMD.DRILL.DRILL_TO_ATTRIBUTE_URL" | "GDC.DASH/CMD.DRILL.DRILL_TO_CUSTOM_URL" | "GDC.DASH/CMD.DRILL.DRILL_TO_LEGACY_DASHBOARD" | "GDC.DASH/CMD.DRILL.DRILLABLE_ITEMS.CHANGE" | "GDC.DASH/CMD.DRILL.CROSS_FILTERING" | "GDC.DASH/CMD.DRILL.KEY_DRIVER_ANALYSIS" | "GDC.DASH/CMD.DRILL_TARGETS.ADD" | "GDC.DASH/CMD.RENDER.ASYNC.REQUEST" | "GDC.DASH/CMD.RENDER.ASYNC.RESOLVE" | "GDC.DASH/CMD.ATTRIBUTE_HIERARCHY_MODIFIED" | "GDC.DASH/CMD.AUTOMATIONS.INITIALIZE" | "GDC.DASH/CMD.AUTOMATIONS.REFRESH" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.SAVE" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.DELETE" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.APPLY" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.CHANGE_DEFAULT_STATUS" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.RELOAD" | "GDC.DASH/CMD.FILTER_CONTEXT.APPLY_WORKING_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.RESET_WORKING_SELECTION" | "GDC.DASH/CMD.CHANGE_IGNORE_EXECUTION_TIMESTAMP" | "GDC.DASH/CMD.TAB.SWITCH" | "GDC.DASH/CMD.TAB.REPOSITION" | "GDC.DASH/CMD.TAB.CREATE" | "GDC.DASH/CMD.TAB.CONVERT_FROM_DEFAULT" | "GDC.DASH/CMD.TAB.DELETE" | "GDC.DASH/CMD.TAB.RENAME_MODE.START" | "GDC.DASH/CMD.TAB.RENAME_MODE.CANCEL" | "GDC.DASH/CMD.TAB.RENAME" | "GDC.DASH/CMD.USERS.LOAD_ALL" | "GDC.DASH/CMD.INSIGHT_WIDGET.EXPORT_RAW" | "GDC.DASH/CMD.INSIGHT_WIDGET.EXPORT_SLIDES" | "GDC.DASH/CMD.INSIGHT_WIDGET.EXPORT_IMAGE" | "GDC.DASH/CMD.SHOW_WIDGET_AS_TABLE.SET" | "GDC.DASH/CMD.CHANGE_DENSITY" | "GDC.DASH/CMD.OPEN_DENSITY_DIALOG";
12
+ export type DashboardCommandType = "GDC.DASH/CMD.INITIALIZE" | "GDC.DASH/CMD.SAVE" | "GDC.DASH/CMD.SAVEAS" | "GDC.DASH/CMD.RESET" | "GDC.DASH/CMD.RENAME" | "GDC.DASH/CMD.DELETE" | "GDC.DASH/CMD.CHANGE_RENDER_MODE" | "GDC.DASH/CMD.SHARING.CHANGE" | "GDC.DASH/CMD.EXPORT.PDF" | "GDC.DASH/CMD.EXPORT.EXCEL" | "GDC.DASH/CMD.EXPORT.PDF_PRESENTATION" | "GDC.DASH/CMD.EXPORT.PPT_PRESENTATION" | "GDC.DASH/CMD.EVENT.TRIGGER" | "GDC.DASH/CMD.EXECUTION_RESULT.UPSERT" | "GDC.DASH/CMD.FILTER_CONTEXT.CHANGE_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.DATE_FILTER.CHANGE_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.ADD" | "GDC.DASH/CMD.FILTER_CONTEXT.TEXT_ATTRIBUTE_FILTER.ADD" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.REMOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.MOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.CHANGE_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER_ITEM.REPLACE_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_PARENTS" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_DISPLAY_FORM" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_TITLE" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_SELECTION_MODE" | "GDC.DASH/CMD.FILTER_CONTEXT.ATTRIBUTE_FILTER.SET_DEPENDENT_DATE_FILTERS" | "GDC.DASH/CMD.FILTER_CONTEXT.DATE_FILTER.ADD" | "GDC.DASH/CMD.FILTER_CONTEXT.DATE_FILTER.REMOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.DATE_FILTER.MOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.ADD" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.REMOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.MOVE" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.CHANGE_CONDITION" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.SET_DIMENSIONALITY" | "GDC.DASH/CMD.FILTER_CONTEXT.MEASURE_VALUE_FILTER.SET_TITLE" | "GDC.DASH/CMD.ATTRIBUTE_FILTER_CONFIG.SET_MODE" | "GDC.DASH/CMD.MEASURE_VALUE_FILTER_CONFIG.SET_MODE" | "GDC.DASH/CMD.ATTRIBUTE_FILTER_CONFIG.SET_AVAILABLE_MODE" | "GDC.DASH/CMD.ATTRIBUTE_FILTER_CONFIG.SET_LIMITING_ITEMS" | "GDC.DASH/CMD.ATTRIBUTE_FILTER_CONFIG.SET_DISPLAY_AS_LABEL" | "GDC.DASH/CMD.DATE_FILTER_CONFIG.SET_MODE" | "GDC.DASH/CMD.DATE_FILTER_WITH_DIMENSION_CONFIG.SET_MODE" | "GDC.DASH/CMD.DATE_FILTER_CONFIG.SET_TITLE" | "GDC.DASH/CMD.FLUID_LAYOUT.ADD_SECTION" | "GDC.DASH/CMD.FLUID_LAYOUT.MOVE_SECTION" | "GDC.DASH/CMD.FLUID_LAYOUT.MOVE_ITEM_TO_NEW_SECTION" | "GDC.DASH/CMD.FLUID_LAYOUT.REMOVE_SECTION" | "GDC.DASH/CMD.FLUID_LAYOUT.CHANGE_SECTION_HEADER" | "GDC.DASH/CMD.FLUID_LAYOUT.ADD_ITEMS" | "GDC.DASH/CMD.FLUID_LAYOUT.REPLACE_ITEM" | "GDC.DASH/CMD.FLUID_LAYOUT.MOVE_ITEM" | "GDC.DASH/CMD.FLUID_LAYOUT.REMOVE_ITEM" | "GDC.DASH/CMD.FLUID_LAYOUT.REMOVE_ITEM_BY_WIDGET_REF" | "GDC.DASH/CMD.FLUID_LAYOUT.UNDO" | "GDC.DASH/CMD.FLUID_LAYOUT.RESIZE_HEIGHT" | "GDC.DASH/CMD.FLUID_LAYOUT.RESIZE_WIDTH" | "GDC.DASH/CMD.FLUID_LAYOUT.SET_SCREEN_SIZE" | "GDC.DASH/CMD.FLEXIBLE_LAYOUT.TOGGLE_LAYOUT_SECTION_HEADERS" | "GDC.DASH/CMD.FLEXIBLE_LAYOUT.TOGGLE_LAYOUT_DIRECTION" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_HEADER" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_MEASURE" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_FILTER_SETTINGS" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_COMPARISON" | "GDC.DASH/CMD.KPI_WIDGET.REFRESH" | "GDC.DASH/CMD.KPI_WIDGET.SET_DRILL" | "GDC.DASH/CMD.KPI_WIDGET.REMOVE_DRILL" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_DESCRIPTION" | "GDC.DASH/CMD.KPI_WIDGET.CHANGE_CONFIGURATION" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_HEADER" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_DESCRIPTION" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_FILTER_SETTINGS" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_PROPERTIES" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_CONFIGURATION" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_INSIGHT" | "GDC.DASH/CMD.INSIGHT_WIDGET.CHANGE_IGNORE_CROSS_FILTERING" | "GDC.DASH/CMD.INSIGHT_WIDGET.EXPORT" | "GDC.DASH/CMD.INSIGHT_WIDGET.MODIFY_DRILLS" | "GDC.DASH/CMD.INSIGHT_WIDGET.REMOVE_DRILLS" | "GDC.DASH/CMD.INSIGHT_WIDGET.REMOVE_DRILL_DOWN" | "GDC.DASH/CMD.INSIGHT_WIDGET.REMOVE_DRILL_TO_URL" | "GDC.DASH/CMD.INSIGHT_WIDGET.ADD_DRILL_DOWN" | "GDC.DASH/CMD.INSIGHT_WIDGET.MODIFY_DRILL_DOWN" | "GDC.DASH/CMD.INSIGHT_WIDGET.REFRESH" | "GDC.DASH/CMD.RICH_TEXT_WIDGET.CHANGE_CONTENT" | "GDC.DASH/CMD.RICH_TEXT_WIDGET.CHANGE_FILTER_SETTINGS" | "GDC.DASH/CMD.VISUALIZATION_SWITCHER_WIDGET.ADD_VISUALIZATION" | "GDC.DASH/CMD.VISUALIZATION_SWITCHER_WIDGET.UPDATE_VISUALIZATIONS" | "GDC.DASH/CMD.ALERT.CREATE" | "GDC.DASH/CMD.ALERT.SAVE" | "GDC.DASH/CMD.SCHEDULED_EMAIL.CREATE" | "GDC.DASH/CMD.SCHEDULED_EMAIL.SAVE" | "GDC.DASH/CMD.DRILL" | "GDC.DASH/CMD.DRILL.DRILL_DOWN" | "GDC.DASH/CMD.DRILL.DRILL_TO_INSIGHT" | "GDC.DASH/CMD.DRILL.DRILL_TO_DASHBOARD" | "GDC.DASH/CMD.DRILL.DRILL_TO_ATTRIBUTE_URL" | "GDC.DASH/CMD.DRILL.DRILL_TO_CUSTOM_URL" | "GDC.DASH/CMD.DRILL.DRILL_TO_LEGACY_DASHBOARD" | "GDC.DASH/CMD.DRILL.DRILLABLE_ITEMS.CHANGE" | "GDC.DASH/CMD.DRILL.CROSS_FILTERING" | "GDC.DASH/CMD.DRILL.KEY_DRIVER_ANALYSIS" | "GDC.DASH/CMD.DRILL_TARGETS.ADD" | "GDC.DASH/CMD.RENDER.ASYNC.REQUEST" | "GDC.DASH/CMD.RENDER.ASYNC.RESOLVE" | "GDC.DASH/CMD.ATTRIBUTE_HIERARCHY_MODIFIED" | "GDC.DASH/CMD.AUTOMATIONS.INITIALIZE" | "GDC.DASH/CMD.AUTOMATIONS.REFRESH" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.SAVE" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.DELETE" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.APPLY" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.CHANGE_DEFAULT_STATUS" | "GDC.DASH/CMD.FILTER_CONTEXT.FILTER_VIEW.RELOAD" | "GDC.DASH/CMD.FILTER_CONTEXT.APPLY_WORKING_SELECTION" | "GDC.DASH/CMD.FILTER_CONTEXT.RESET_WORKING_SELECTION" | "GDC.DASH/CMD.CHANGE_IGNORE_EXECUTION_TIMESTAMP" | "GDC.DASH/CMD.TAB.SWITCH" | "GDC.DASH/CMD.TAB.REPOSITION" | "GDC.DASH/CMD.TAB.CREATE" | "GDC.DASH/CMD.TAB.DELETE" | "GDC.DASH/CMD.TAB.RENAME_MODE.START" | "GDC.DASH/CMD.TAB.RENAME_MODE.CANCEL" | "GDC.DASH/CMD.TAB.RENAME" | "GDC.DASH/CMD.USERS.LOAD_ALL" | "GDC.DASH/CMD.INSIGHT_WIDGET.EXPORT_RAW" | "GDC.DASH/CMD.INSIGHT_WIDGET.EXPORT_SLIDES" | "GDC.DASH/CMD.INSIGHT_WIDGET.EXPORT_IMAGE" | "GDC.DASH/CMD.SHOW_WIDGET_AS_TABLE.SET" | "GDC.DASH/CMD.CHANGE_DENSITY" | "GDC.DASH/CMD.OPEN_DENSITY_DIALOG";
13
13
  /**
14
14
  * @public
15
15
  */