@gooddata/sdk-ui-catalog 11.56.0-alpha.1 → 11.56.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 (163) hide show
  1. package/esm/asCode/AsCodeDetailActions.d.ts +1 -1
  2. package/esm/asCode/AsCodeDetailActions.d.ts.map +1 -1
  3. package/esm/asCode/AsCodeEditorBody.d.ts +1 -1
  4. package/esm/asCode/AsCodeEditorBody.d.ts.map +1 -1
  5. package/esm/asCode/asCodeEditorBody.test.utils.d.ts +1 -1
  6. package/esm/asCode/asCodeEditorBody.test.utils.d.ts.map +1 -1
  7. package/esm/automation/testIds.d.ts +3 -2
  8. package/esm/automation/testIds.d.ts.map +1 -1
  9. package/esm/automation/testIds.js +3 -2
  10. package/esm/catalog/Catalog.d.ts +1 -1
  11. package/esm/catalog/Catalog.d.ts.map +1 -1
  12. package/esm/catalogDetail/CatalogDetailActionBar.d.ts +1 -1
  13. package/esm/catalogDetail/CatalogDetailActionBar.d.ts.map +1 -1
  14. package/esm/catalogDetail/CatalogDetailActions.d.ts +1 -1
  15. package/esm/catalogDetail/CatalogDetailActions.d.ts.map +1 -1
  16. package/esm/catalogDetail/CatalogDetailConditionalFormatting.d.ts +12 -0
  17. package/esm/catalogDetail/CatalogDetailConditionalFormatting.d.ts.map +1 -0
  18. package/esm/catalogDetail/CatalogDetailConditionalFormatting.js +52 -0
  19. package/esm/catalogDetail/CatalogDetailContent.d.ts +1 -1
  20. package/esm/catalogDetail/CatalogDetailContent.d.ts.map +1 -1
  21. package/esm/catalogDetail/CatalogDetailContent.js +3 -1
  22. package/esm/catalogDetail/CatalogDetailContentRow.d.ts +2 -1
  23. package/esm/catalogDetail/CatalogDetailContentRow.d.ts.map +1 -1
  24. package/esm/catalogDetail/CatalogDetailContentRow.js +7 -2
  25. package/esm/catalogDetail/CatalogDetailHeader.d.ts +1 -1
  26. package/esm/catalogDetail/CatalogDetailHeader.d.ts.map +1 -1
  27. package/esm/catalogDetail/CatalogDetailTabMetadata.d.ts +5 -4
  28. package/esm/catalogDetail/CatalogDetailTabMetadata.d.ts.map +1 -1
  29. package/esm/catalogDetail/CatalogDetailTabMetadata.js +6 -3
  30. package/esm/catalogDetail/CatalogDetailTabQuality.d.ts +1 -1
  31. package/esm/catalogDetail/CatalogDetailTabQuality.d.ts.map +1 -1
  32. package/esm/catalogDetail/hooks/useCatalogItemUpdate.d.ts +4 -3
  33. package/esm/catalogDetail/hooks/useCatalogItemUpdate.d.ts.map +1 -1
  34. package/esm/catalogDetail/hooks/useCatalogItemUpdate.js +26 -1
  35. package/esm/catalogDetail/share/CatalogDetailAccessRow.d.ts +6 -7
  36. package/esm/catalogDetail/share/CatalogDetailAccessRow.d.ts.map +1 -1
  37. package/esm/catalogDetail/share/CatalogDetailAccessRow.js +15 -17
  38. package/esm/catalogDetail/share/CatalogItemAccessRow.js +3 -4
  39. package/esm/catalogDetail/share/CatalogItemShareProvider.d.ts +1 -1
  40. package/esm/catalogDetail/share/CatalogItemShareProvider.d.ts.map +1 -1
  41. package/esm/catalogDetail/share/CatalogItemShareProvider.js +10 -2
  42. package/esm/catalogDetail/share/messages.d.ts +1 -1
  43. package/esm/catalogDetail/share/messages.d.ts.map +1 -1
  44. package/esm/catalogDetail/share/messages.js +1 -1
  45. package/esm/catalogItem/converter.d.ts.map +1 -1
  46. package/esm/catalogItem/converter.js +1 -0
  47. package/esm/catalogItem/query.d.ts +10 -9
  48. package/esm/catalogItem/query.d.ts.map +1 -1
  49. package/esm/catalogItem/query.js +13 -0
  50. package/esm/catalogItem/types.d.ts +6 -1
  51. package/esm/catalogItem/types.d.ts.map +1 -1
  52. package/esm/catalogItem/useCatalogItemSemanticSearch.d.ts +1 -1
  53. package/esm/catalogItem/useCatalogItemSemanticSearch.d.ts.map +1 -1
  54. package/esm/insight/insightCodecContext.d.ts +1 -1
  55. package/esm/insight/insightCodecContext.d.ts.map +1 -1
  56. package/esm/localization/bundles/de-DE.localization-bundle.d.ts +5 -1
  57. package/esm/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  58. package/esm/localization/bundles/de-DE.localization-bundle.js +5 -1
  59. package/esm/localization/bundles/en-AU.localization-bundle.d.ts +5 -1
  60. package/esm/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  61. package/esm/localization/bundles/en-AU.localization-bundle.js +5 -1
  62. package/esm/localization/bundles/en-GB.localization-bundle.d.ts +5 -1
  63. package/esm/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  64. package/esm/localization/bundles/en-GB.localization-bundle.js +5 -1
  65. package/esm/localization/bundles/en-US.localization-bundle.d.ts +583 -567
  66. package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  67. package/esm/localization/bundles/en-US.localization-bundle.js +23 -7
  68. package/esm/localization/bundles/es-419.localization-bundle.d.ts +5 -1
  69. package/esm/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  70. package/esm/localization/bundles/es-419.localization-bundle.js +5 -1
  71. package/esm/localization/bundles/es-ES.localization-bundle.d.ts +5 -1
  72. package/esm/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  73. package/esm/localization/bundles/es-ES.localization-bundle.js +5 -1
  74. package/esm/localization/bundles/fi-FI.localization-bundle.d.ts +5 -1
  75. package/esm/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  76. package/esm/localization/bundles/fi-FI.localization-bundle.js +5 -1
  77. package/esm/localization/bundles/fr-CA.localization-bundle.d.ts +5 -1
  78. package/esm/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  79. package/esm/localization/bundles/fr-CA.localization-bundle.js +5 -1
  80. package/esm/localization/bundles/fr-FR.localization-bundle.d.ts +5 -1
  81. package/esm/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  82. package/esm/localization/bundles/fr-FR.localization-bundle.js +5 -1
  83. package/esm/localization/bundles/id-ID.localization-bundle.d.ts +5 -1
  84. package/esm/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  85. package/esm/localization/bundles/id-ID.localization-bundle.js +5 -1
  86. package/esm/localization/bundles/it-IT.localization-bundle.d.ts +5 -1
  87. package/esm/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  88. package/esm/localization/bundles/it-IT.localization-bundle.js +5 -1
  89. package/esm/localization/bundles/ja-JP.localization-bundle.d.ts +5 -1
  90. package/esm/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  91. package/esm/localization/bundles/ja-JP.localization-bundle.js +6 -2
  92. package/esm/localization/bundles/ko-KR.localization-bundle.d.ts +5 -1
  93. package/esm/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  94. package/esm/localization/bundles/ko-KR.localization-bundle.js +5 -1
  95. package/esm/localization/bundles/nl-NL.localization-bundle.d.ts +5 -1
  96. package/esm/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  97. package/esm/localization/bundles/nl-NL.localization-bundle.js +5 -1
  98. package/esm/localization/bundles/pl-PL.localization-bundle.d.ts +5 -1
  99. package/esm/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  100. package/esm/localization/bundles/pl-PL.localization-bundle.js +5 -1
  101. package/esm/localization/bundles/pt-BR.localization-bundle.d.ts +5 -1
  102. package/esm/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  103. package/esm/localization/bundles/pt-BR.localization-bundle.js +5 -1
  104. package/esm/localization/bundles/pt-PT.localization-bundle.d.ts +5 -1
  105. package/esm/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  106. package/esm/localization/bundles/pt-PT.localization-bundle.js +5 -1
  107. package/esm/localization/bundles/ru-RU.localization-bundle.d.ts +5 -1
  108. package/esm/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  109. package/esm/localization/bundles/ru-RU.localization-bundle.js +5 -1
  110. package/esm/localization/bundles/sl-SI.localization-bundle.d.ts +5 -1
  111. package/esm/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  112. package/esm/localization/bundles/sl-SI.localization-bundle.js +5 -1
  113. package/esm/localization/bundles/th-TH.localization-bundle.d.ts +5 -1
  114. package/esm/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  115. package/esm/localization/bundles/th-TH.localization-bundle.js +5 -1
  116. package/esm/localization/bundles/tr-TR.localization-bundle.d.ts +5 -1
  117. package/esm/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  118. package/esm/localization/bundles/tr-TR.localization-bundle.js +5 -1
  119. package/esm/localization/bundles/uk-UA.localization-bundle.d.ts +5 -1
  120. package/esm/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  121. package/esm/localization/bundles/uk-UA.localization-bundle.js +5 -1
  122. package/esm/localization/bundles/vi-VN.localization-bundle.d.ts +5 -1
  123. package/esm/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  124. package/esm/localization/bundles/vi-VN.localization-bundle.js +5 -1
  125. package/esm/localization/bundles/zh-HK.localization-bundle.d.ts +5 -1
  126. package/esm/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  127. package/esm/localization/bundles/zh-HK.localization-bundle.js +5 -1
  128. package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts +5 -1
  129. package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  130. package/esm/localization/bundles/zh-Hans.localization-bundle.js +5 -1
  131. package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts +5 -1
  132. package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  133. package/esm/localization/bundles/zh-Hant.localization-bundle.js +5 -1
  134. package/esm/main/Main.d.ts +3 -3
  135. package/esm/main/Main.d.ts.map +1 -1
  136. package/esm/main/Main.js +0 -1
  137. package/esm/main/hooks/useCatalogItemOpen.d.ts +1 -1
  138. package/esm/main/hooks/useCatalogItemOpen.d.ts.map +1 -1
  139. package/esm/objectType/ObjectTypeSelect.d.ts +1 -1
  140. package/esm/objectType/ObjectTypeSelect.d.ts.map +1 -1
  141. package/esm/permission/TestPermissionsProvider.d.ts +1 -1
  142. package/esm/permission/TestPermissionsProvider.d.ts.map +1 -1
  143. package/esm/quality/QualityScoreCardAction.d.ts +1 -1
  144. package/esm/quality/QualityScoreCardAction.d.ts.map +1 -1
  145. package/esm/sdk-ui-catalog.d.ts +7 -1
  146. package/esm/table/Table.d.ts +1 -1
  147. package/esm/table/Table.d.ts.map +1 -1
  148. package/esm/tabs/CatalogItemCard.d.ts +2 -2
  149. package/esm/tabs/CatalogItemCard.d.ts.map +1 -1
  150. package/esm/tabs/CatalogItemCard.js +1 -1
  151. package/esm/tabs/CatalogItemCardGrid.d.ts +2 -2
  152. package/esm/tabs/CatalogItemCardGrid.d.ts.map +1 -1
  153. package/esm/tabs/CatalogTabPanel.d.ts +2 -2
  154. package/esm/tabs/CatalogTabPanel.d.ts.map +1 -1
  155. package/esm/tabs/CatalogTabs.d.ts +2 -2
  156. package/esm/tabs/CatalogTabs.d.ts.map +1 -1
  157. package/package.json +19 -19
  158. package/styles/css/detail.css +14 -16
  159. package/styles/css/detail.css.map +1 -1
  160. package/styles/css/main.css +439 -17
  161. package/styles/css/main.css.map +1 -1
  162. package/styles/scss/detail.scss +16 -18
  163. package/styles/scss/main.scss +1 -0
@@ -14,5 +14,5 @@ export interface IAsCodeDetailActionsProps {
14
14
  onCatalogItemDelete?: (ref: ICatalogItemRef) => void;
15
15
  }
16
16
  /** @internal */
17
- export declare function AsCodeDetailActions({ descriptor, item, onOpen, canShare, onShare, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete }: IAsCodeDetailActionsProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function AsCodeDetailActions({ descriptor, item, onOpen, canShare, onShare, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete, }: IAsCodeDetailActionsProps): import("react/jsx-runtime").JSX.Element;
18
18
  //# sourceMappingURL=AsCodeDetailActions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AsCodeDetailActions.d.ts","sourceRoot":"","sources":["../../src/asCode/AsCodeDetailActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,UAAU,EAAkC,MAAM,OAAO,CAAC;AAU5F,OAAO,KAAK,EAAwB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAUzD,gBAAgB;AAChB,MAAM,WAAW,yBAAyB;IACtC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CACxD;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,EAChC,UAAU,EACV,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACtB,EAAE,yBAAyB,2CAgG3B"}
1
+ {"version":3,"file":"AsCodeDetailActions.d.ts","sourceRoot":"","sources":["../../src/asCode/AsCodeDetailActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,UAAU,EAAkC,MAAM,OAAO,CAAC;AAU5F,OAAO,KAAK,EAAwB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAUzD,gBAAgB;AAChB,MAAM,WAAW,yBAAyB;IACtC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CACxD;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,EAChC,UAAU,EACV,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACtB,EAAE,yBAAyB,2CAgG3B"}
@@ -18,6 +18,6 @@ type Props = {
18
18
  * reports. The dialog reads the current value from `onChange` and never drives the value back in,
19
19
  * which the local state here preserves.
20
20
  */
21
- export declare function AsCodeEditorBody({ initialValue, onChange, disabled, completionSource, syntaxErrorMessage, label }: Props): import("react/jsx-runtime").JSX.Element;
21
+ export declare function AsCodeEditorBody({ initialValue, onChange, disabled, completionSource, syntaxErrorMessage, label, }: Props): import("react/jsx-runtime").JSX.Element;
22
22
  export {};
23
23
  //# sourceMappingURL=AsCodeEditorBody.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AsCodeEditorBody.d.ts","sourceRoot":"","sources":["../../src/asCode/AsCodeEditorBody.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAMjF,KAAK,KAAK,GAAG;IACT,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,EACR,EAAE,KAAK,2CAsBP"}
1
+ {"version":3,"file":"AsCodeEditorBody.d.ts","sourceRoot":"","sources":["../../src/asCode/AsCodeEditorBody.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAMjF,KAAK,KAAK,GAAG;IACT,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,GACR,EAAE,KAAK,2CAsBP"}
@@ -13,7 +13,7 @@
13
13
  * Local state seeded from `initialValue` mirrors the real body: the dialog reads the current value
14
14
  * from `onChange` and never drives it back in.
15
15
  */
16
- export declare function AsCodeEditorBody({ initialValue, onChange, disabled }: {
16
+ export declare function AsCodeEditorBody({ initialValue, onChange, disabled, }: {
17
17
  initialValue: string;
18
18
  onChange: (value: string) => void;
19
19
  disabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"asCodeEditorBody.test.utils.d.ts","sourceRoot":"","sources":["../../src/asCode/asCodeEditorBody.test.utils.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,YAAY,EACZ,QAAQ,EACR,QAAQ,EACX,EAAE;IACC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACrB,2CAcA"}
1
+ {"version":3,"file":"asCodeEditorBody.test.utils.d.ts","sourceRoot":"","sources":["../../src/asCode/asCodeEditorBody.test.utils.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,YAAY,EACZ,QAAQ,EACR,QAAQ,GACX,EAAE;IACC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACrB,2CAcA"}
@@ -14,8 +14,9 @@ export declare const catalogDetailActionDuplicate = "analytics-catalog-detail-ac
14
14
  export declare const catalogDetailActionDelete = "analytics-catalog-detail-actions/delete";
15
15
  export declare const catalogDetailActionShare = "analytics-catalog-detail-actions/share";
16
16
  export declare const catalogDetailAccessRow = "analytics-catalog-detail-access-row";
17
- export declare const catalogDetailAccessRowState = "analytics-catalog-detail-access-row/state";
18
- export declare const catalogDetailAccessRowSharedLink = "analytics-catalog-detail-access-row/shared-link";
17
+ export declare const catalogDetailAccessRowWorkspace = "analytics-catalog-detail-access-row/workspace";
18
+ export declare const catalogDetailAccessRowShared = "analytics-catalog-detail-access-row/shared";
19
+ export declare const catalogDetailAccessRowPrivate = "analytics-catalog-detail-access-row/private";
19
20
  export declare const catalogDetailLabels = "analytics-catalog-detail-labels";
20
21
  export declare const catalogDetailLabelsTrigger = "analytics-catalog-detail-labels/trigger";
21
22
  export declare const catalogDetailLabelsList = "analytics-catalog-detail-labels/list";
@@ -1 +1 @@
1
- {"version":3,"file":"testIds.d.ts","sourceRoot":"","sources":["../../src/automation/testIds.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,sBAAsB,CAAC;AAC3C,eAAO,MAAM,UAAU,kCAA2B,CAAC;AACnD,eAAO,MAAM,MAAM,6BAAsB,CAAC;AAC1C,eAAO,MAAM,eAAe,wCAAyB,CAAC;AACtD,eAAO,MAAM,YAAY,oCAAqB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,wCAAyB,CAAC;AACvD,eAAO,MAAM,mBAAmB,2CAA4B,CAAC;AAC7D,eAAO,MAAM,aAAa,qCAAsB,CAAC;AACjD,eAAO,MAAM,UAAU,kCAAmB,CAAC;AAC3C,eAAO,MAAM,WAAW,mCAAoB,CAAC;AAC7C,eAAO,MAAM,aAAa,6BAAsB,CAAC;AACjD,eAAO,MAAM,2BAA2B,6CAAqC,CAAC;AAC9E,eAAO,MAAM,4BAA4B,+CAAuC,CAAC;AACjF,eAAO,MAAM,yBAAyB,4CAAoC,CAAC;AAC3E,eAAO,MAAM,wBAAwB,2CAAmC,CAAC;AACzE,eAAO,MAAM,sBAAsB,wCAAgC,CAAC;AACpE,eAAO,MAAM,2BAA2B,8CAAsC,CAAC;AAC/E,eAAO,MAAM,gCAAgC,oDAA4C,CAAC;AAC1F,eAAO,MAAM,mBAAmB,oCAA4B,CAAC;AAC7D,eAAO,MAAM,0BAA0B,4CAAoC,CAAC;AAC5E,eAAO,MAAM,uBAAuB,yCAAiC,CAAC"}
1
+ {"version":3,"file":"testIds.d.ts","sourceRoot":"","sources":["../../src/automation/testIds.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,sBAAsB,CAAC;AAC3C,eAAO,MAAM,UAAU,kCAA2B,CAAC;AACnD,eAAO,MAAM,MAAM,6BAAsB,CAAC;AAC1C,eAAO,MAAM,eAAe,wCAAyB,CAAC;AACtD,eAAO,MAAM,YAAY,oCAAqB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,wCAAyB,CAAC;AACvD,eAAO,MAAM,mBAAmB,2CAA4B,CAAC;AAC7D,eAAO,MAAM,aAAa,qCAAsB,CAAC;AACjD,eAAO,MAAM,UAAU,kCAAmB,CAAC;AAC3C,eAAO,MAAM,WAAW,mCAAoB,CAAC;AAC7C,eAAO,MAAM,aAAa,6BAAsB,CAAC;AACjD,eAAO,MAAM,2BAA2B,6CAAqC,CAAC;AAC9E,eAAO,MAAM,4BAA4B,+CAAuC,CAAC;AACjF,eAAO,MAAM,yBAAyB,4CAAoC,CAAC;AAC3E,eAAO,MAAM,wBAAwB,2CAAmC,CAAC;AACzE,eAAO,MAAM,sBAAsB,wCAAgC,CAAC;AACpE,eAAO,MAAM,+BAA+B,kDAA0C,CAAC;AACvF,eAAO,MAAM,4BAA4B,+CAAuC,CAAC;AACjF,eAAO,MAAM,6BAA6B,gDAAwC,CAAC;AACnF,eAAO,MAAM,mBAAmB,oCAA4B,CAAC;AAC7D,eAAO,MAAM,0BAA0B,4CAAoC,CAAC;AAC5E,eAAO,MAAM,uBAAuB,yCAAiC,CAAC"}
@@ -18,8 +18,9 @@ export const catalogDetailActionDuplicate = `${catalogDetail}-actions/duplicate`
18
18
  export const catalogDetailActionDelete = `${catalogDetail}-actions/delete`;
19
19
  export const catalogDetailActionShare = `${catalogDetail}-actions/share`;
20
20
  export const catalogDetailAccessRow = `${catalogDetail}-access-row`;
21
- export const catalogDetailAccessRowState = `${catalogDetail}-access-row/state`;
22
- export const catalogDetailAccessRowSharedLink = `${catalogDetail}-access-row/shared-link`;
21
+ export const catalogDetailAccessRowWorkspace = `${catalogDetail}-access-row/workspace`;
22
+ export const catalogDetailAccessRowShared = `${catalogDetail}-access-row/shared`;
23
+ export const catalogDetailAccessRowPrivate = `${catalogDetail}-access-row/private`;
23
24
  export const catalogDetailLabels = `${catalogDetail}-labels`;
24
25
  export const catalogDetailLabelsTrigger = `${catalogDetail}-labels/trigger`;
25
26
  export const catalogDetailLabelsList = `${catalogDetail}-labels/list`;
@@ -13,6 +13,6 @@ type Props = {
13
13
  onCatalogDetailClosed?: () => void;
14
14
  onCreateObject?: (objectType: CatalogCreateObjectType) => void;
15
15
  };
16
- export declare function Catalog({ openCatalogItemRef, backend, workspace, onCatalogItemOpenClick, onCatalogItemNavigation, onCatalogDetailOpened, onCatalogDetailClosed, onCreateObject }: Props): import("react/jsx-runtime").JSX.Element;
16
+ export declare function Catalog({ openCatalogItemRef, backend, workspace, onCatalogItemOpenClick, onCatalogItemNavigation, onCatalogDetailOpened, onCatalogDetailClosed, onCreateObject, }: Props): import("react/jsx-runtime").JSX.Element;
17
17
  export {};
18
18
  //# sourceMappingURL=Catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Catalog.d.ts","sourceRoot":"","sources":["../../src/catalog/Catalog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK/D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAUtE,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC,sBAAsB,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnF,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/E,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAClE,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACpB,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACjB,EAAE,KAAK,2CA4DP"}
1
+ {"version":3,"file":"Catalog.d.ts","sourceRoot":"","sources":["../../src/catalog/Catalog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK/D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAUtE,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC,sBAAsB,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnF,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/E,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAClE,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACpB,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,GACjB,EAAE,KAAK,2CA4DP"}
@@ -14,5 +14,5 @@ export type ICatalogDetailActionBarProps = {
14
14
  /**
15
15
  * Detail action bar: optional leading actions, a primary Edit button, and an item actions menu.
16
16
  */
17
- export declare function CatalogDetailActionBar({ item, workspaceId, actionGroups, leadingActions, onEditClick, onActionsMenuSelect }: ICatalogDetailActionBarProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function CatalogDetailActionBar({ item, workspaceId, actionGroups, leadingActions, onEditClick, onActionsMenuSelect, }: ICatalogDetailActionBarProps): import("react/jsx-runtime").JSX.Element;
18
18
  //# sourceMappingURL=CatalogDetailActionBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailActionBar.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailActionBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAOrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAUzE,MAAM,MAAM,4BAA4B,GAAG;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,YAAY,EAAE,oBAAoB,EAAE,EAAE,CAAC;IACvC,6DAA6D;IAC7D,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5E,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC;CACtF,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EACnC,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,mBAAmB,EACtB,EAAE,4BAA4B,2CA4E9B"}
1
+ {"version":3,"file":"CatalogDetailActionBar.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailActionBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAOrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAUzE,MAAM,MAAM,4BAA4B,GAAG;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,YAAY,EAAE,oBAAoB,EAAE,EAAE,CAAC;IACvC,6DAA6D;IAC7D,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5E,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC;CACtF,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EACnC,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,mBAAmB,GACtB,EAAE,4BAA4B,2CA4E9B"}
@@ -18,5 +18,5 @@ export interface ICatalogDetailActionsProps {
18
18
  * {@link AsCodeDetailActions}; every other type gets the Open (+ Share) fallback.
19
19
  * @internal
20
20
  */
21
- export declare function CatalogDetailActions({ item, canEdit, onOpen, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete }: ICatalogDetailActionsProps): import("react/jsx-runtime").JSX.Element | null;
21
+ export declare function CatalogDetailActions({ item, canEdit, onOpen, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete, }: ICatalogDetailActionsProps): import("react/jsx-runtime").JSX.Element | null;
22
22
  //# sourceMappingURL=CatalogDetailActions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailActions.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AASxC,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClE,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CACxD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACtB,EAAE,0BAA0B,kDAgD5B"}
1
+ {"version":3,"file":"CatalogDetailActions.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AASxC,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClE,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CACxD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACtB,EAAE,0BAA0B,kDAgD5B"}
@@ -0,0 +1,12 @@
1
+ import { type ISemanticConditionalFormatting, type ISeparators } from "@gooddata/sdk-model";
2
+ export interface ICatalogDetailConditionalFormattingProps {
3
+ identifier: string;
4
+ title: string;
5
+ format?: string | null;
6
+ conditionalFormatting?: ISemanticConditionalFormatting;
7
+ canEdit: boolean;
8
+ onConditionalFormattingChange: (conditionalFormatting: ISemanticConditionalFormatting | undefined) => void;
9
+ separators?: ISeparators;
10
+ }
11
+ export declare function CatalogDetailConditionalFormatting({ identifier, title, format, conditionalFormatting, canEdit, onConditionalFormattingChange, separators, }: ICatalogDetailConditionalFormattingProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=CatalogDetailConditionalFormatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CatalogDetailConditionalFormatting.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailConditionalFormatting.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,8BAA8B,EACnC,KAAK,WAAW,EAEnB,MAAM,qBAAqB,CAAC;AAkB7B,MAAM,WAAW,wCAAwC;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qBAAqB,CAAC,EAAE,8BAA8B,CAAC;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,6BAA6B,EAAE,CAC3B,qBAAqB,EAAE,8BAA8B,GAAG,SAAS,KAChE,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,WAAW,CAAC;CAC5B;AAED,wBAAgB,kCAAkC,CAAC,EAC/C,UAAU,EACV,KAAK,EACL,MAAM,EACN,qBAAqB,EACrB,OAAO,EACP,6BAA6B,EAC7B,UAAU,GACb,EAAE,wCAAwC,2CAqF1C"}
@@ -0,0 +1,52 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useState } from "react";
4
+ import cx from "classnames";
5
+ import { FormattedMessage, defineMessages, useIntl } from "react-intl";
6
+ import { isSemanticConditionalFormattingEnabled, } from "@gooddata/sdk-model";
7
+ import { ConditionalFormattingDialog, isPercentFormat, newRule, semanticRuleFor, } from "@gooddata/sdk-ui-ext";
8
+ import { UiButton } from "@gooddata/sdk-ui-kit";
9
+ import { CatalogDetailContentRow } from "./CatalogDetailContentRow.js";
10
+ const messages = defineMessages({
11
+ toggleAriaLabel: { id: "analyticsCatalog.conditionalFormatting.toggleAriaLabel" },
12
+ edit: { id: "analyticsCatalog.conditionalFormatting.edit" },
13
+ add: { id: "analyticsCatalog.conditionalFormatting.add" },
14
+ });
15
+ export function CatalogDetailConditionalFormatting({ identifier, title, format, conditionalFormatting, canEdit, onConditionalFormattingChange, separators, }) {
16
+ const intl = useIntl();
17
+ const [isOpen, setIsOpen] = useState(false);
18
+ const targetOption = {
19
+ value: `measure:${identifier}`,
20
+ title,
21
+ target: { kind: "measure", measureIdentifier: identifier },
22
+ isPercent: isPercentFormat(format ?? undefined),
23
+ };
24
+ // A stored value with no conditions counts as no rule.
25
+ const authored = conditionalFormatting?.conditions.length ? conditionalFormatting : undefined;
26
+ const isEnabled = authored !== undefined && isSemanticConditionalFormattingEnabled(authored);
27
+ const rule = authored ? semanticRuleFor(targetOption, authored) : newRule(targetOption);
28
+ return (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.conditionalFormatting" }), content: _jsxs(_Fragment, { children: [authored ? (_jsxs("label", { className: "input-checkbox-toggle s-cf-catalog-toggle-label", children: [_jsx("input", { type: "checkbox", checked: isEnabled, disabled: !canEdit, "aria-label": intl.formatMessage(messages.toggleAriaLabel, { title }), onChange: (event) => {
29
+ onConditionalFormattingChange({
30
+ ...authored,
31
+ enabled: event.target.checked,
32
+ });
33
+ }, className: cx("s-checkbox-toggle", canEdit ? "s-enabled" : "s-disabled") }), _jsx("span", { className: "input-label-text" })] })) : null, _jsx(UiButton, { dataTestId: "cf-catalog-open", size: "small", variant: "tertiary", iconBefore: authored ? undefined : "plus", label: intl.formatMessage(authored ? messages.edit : messages.add), isDisabled: !canEdit, onClick: () => setIsOpen(true) }), _jsx("span", { className: "s-cf-catalog-popover-anchor" }), isOpen ? (_jsx(ConditionalFormattingDialog, { rule: rule, isNew: !authored, fixedTarget: true, targetOptions: [targetOption], separators: separators, alignTo: ".s-cf-catalog-popover-anchor", onDelete: authored
34
+ ? () => {
35
+ onConditionalFormattingChange(undefined);
36
+ setIsOpen(false);
37
+ }
38
+ : undefined, onSubmit: (intent) => {
39
+ // "inherited" needs the semanticByTarget fallback, which this usage never passes.
40
+ if (intent.mode !== "custom") {
41
+ return;
42
+ }
43
+ onConditionalFormattingChange({
44
+ ...(conditionalFormatting?.version
45
+ ? { version: conditionalFormatting.version }
46
+ : {}),
47
+ conditions: intent.rule.conditions,
48
+ // A new rule takes effect immediately; an edit keeps the row's toggle state.
49
+ enabled: authored ? isEnabled : true,
50
+ });
51
+ }, onClose: () => setIsOpen(false) })) : null] }) }));
52
+ }
@@ -50,5 +50,5 @@ export interface ICatalogDetailContentProps {
50
50
  /**
51
51
  * @internal
52
52
  */
53
- export declare function CatalogDetailContent({ objectId, objectType, objectDefinition, onOpenClick, onTagClick, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete, onCatalogItemUpdateError, onCatalogItemNavigation }: ICatalogDetailContentProps): import("react/jsx-runtime").JSX.Element;
53
+ export declare function CatalogDetailContent({ objectId, objectType, objectDefinition, onOpenClick, onTagClick, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete, onCatalogItemUpdateError, onCatalogItemNavigation, }: ICatalogDetailContentProps): import("react/jsx-runtime").JSX.Element;
54
54
  //# sourceMappingURL=CatalogDetailContent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailContent.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAgC,MAAM,OAAO,CAAC;AAUtE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAkBzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IACrD;;OAEG;IACH,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EAC1B,EAAE,0BAA0B,2CAoN5B"}
1
+ {"version":3,"file":"CatalogDetailContent.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAgC,MAAM,OAAO,CAAC;AAUtE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAkBzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IACrD;;OAEG;IACH,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GAC1B,EAAE,0BAA0B,2CAwN5B"}
@@ -39,7 +39,7 @@ const Tabs = {
39
39
  export function CatalogDetailContent({ objectId, objectType, objectDefinition, onOpenClick, onTagClick, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete, onCatalogItemUpdateError, onCatalogItemNavigation, }) {
40
40
  const intl = useIntl();
41
41
  const { result: { user: currentUser, permissions, settings } = {} } = usePermissionsState();
42
- const { item, status, error, updateItemTitle, updateItemDescription, updateItemTags, updateItemIsHidden, updateItemIsHiddenFromKda, updateItemMetricType, updateItemFormat, updateItemCertification, applyItemUpdate, applyItemDelete, } = useCatalogItemUpdate({
42
+ const { item, status, error, updateItemTitle, updateItemDescription, updateItemTags, updateItemIsHidden, updateItemIsHiddenFromKda, updateItemMetricType, updateItemFormat, updateItemConditionalFormatting, updateItemCertification, applyItemUpdate, applyItemDelete, } = useCatalogItemUpdate({
43
43
  currentUser,
44
44
  objectId,
45
45
  objectType,
@@ -130,6 +130,8 @@ export function CatalogDetailContent({ objectId, objectType, objectDefinition, o
130
130
  updateItemMetricType(metricType);
131
131
  }, onFormatChange: (format) => {
132
132
  updateItemFormat(format);
133
+ }, onConditionalFormattingChange: (conditionalFormatting) => {
134
+ updateItemConditionalFormatting(conditionalFormatting);
133
135
  }, separators: separators, currencyFormatOverride: enableMetricFormatOverrides ? currencyFormatOverride : undefined, enableMetricFormatOverrides: enableMetricFormatOverrides, accessRow: _jsx(CatalogItemAccessRow, {}) })), selectedTabId === Tabs.CERTIFICATION && isCertificationVisible ? (_jsx(CatalogDetailTabCertification, { item: item, canEdit: canEdit, onCertificationChange: (certification) => {
134
136
  updateItemCertification(certification);
135
137
  } })) : null, selectedTabId === Tabs.QUALITY &&
@@ -2,6 +2,7 @@ import type { ReactNode } from "react";
2
2
  export interface ICatalogDetailContentRowProps {
3
3
  title: ReactNode;
4
4
  content?: ReactNode;
5
+ alignTop?: boolean;
5
6
  }
6
- export declare function CatalogDetailContentRow({ title, content }: ICatalogDetailContentRowProps): import("react/jsx-runtime").JSX.Element | null;
7
+ export declare function CatalogDetailContentRow({ title, content, alignTop }: ICatalogDetailContentRowProps): import("react/jsx-runtime").JSX.Element | null;
7
8
  //# sourceMappingURL=CatalogDetailContentRow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailContentRow.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailContentRow.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,6BAA6B,kDAcxF"}
1
+ {"version":3,"file":"CatalogDetailContentRow.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailContentRow.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,6BAA6B,kDAalG"}
@@ -1,7 +1,12 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- export function CatalogDetailContentRow({ title, content }) {
2
+ // (C) 2025-2026 GoodData Corporation
3
+ import cx from "classnames";
4
+ export function CatalogDetailContentRow({ title, content, alignTop }) {
3
5
  if (!content) {
4
6
  return null;
5
7
  }
6
- return (_jsxs(_Fragment, { children: [_jsx("dt", { className: "gd-analytics-catalog-detail__tab-content__cell gd-analytics-catalog-detail__title-cell", children: title }), _jsx("dd", { className: "gd-analytics-catalog-detail__tab-content__cell gd-analytics-catalog-detail__detail-cell", children: content })] }));
8
+ const cell = cx("gd-analytics-catalog-detail__tab-content__cell", {
9
+ "gd-analytics-catalog-detail__tab-content__cell--align-top": alignTop,
10
+ });
11
+ return (_jsxs(_Fragment, { children: [_jsx("dt", { className: cx(cell, "gd-analytics-catalog-detail__title-cell"), children: title }), _jsx("dd", { className: cx(cell, "gd-analytics-catalog-detail__detail-cell"), children: content })] }));
7
12
  }
@@ -25,6 +25,6 @@ interface IProps {
25
25
  */
26
26
  showInfoRow?: boolean;
27
27
  }
28
- export declare function CatalogDetailHeader({ item, canEdit, actions, updateItemTitle, updateItemDescription, isDescriptionGenerationEnabled, headerRef, labels, labelsLoading, showInfoRow }: IProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function CatalogDetailHeader({ item, canEdit, actions, updateItemTitle, updateItemDescription, isDescriptionGenerationEnabled, headerRef, labels, labelsLoading, showInfoRow, }: IProps): import("react/jsx-runtime").JSX.Element;
29
29
  export {};
30
30
  //# sourceMappingURL=CatalogDetailHeader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailHeader.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAIpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAU9D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAS5D,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,UAAU,MAAM;IACZ,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,qBAAqB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,8BAA8B,EAAE,OAAO,CAAC;IACxC,SAAS,EAAE,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IACrD,mGAAmG;IACnG,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,8BAA8B,EAC9B,SAAS,EACT,MAAM,EACN,aAAa,EACb,WAAW,EACd,EAAE,MAAM,2CAqMR"}
1
+ {"version":3,"file":"CatalogDetailHeader.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAIpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAU9D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAS5D,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,UAAU,MAAM;IACZ,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,qBAAqB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,8BAA8B,EAAE,OAAO,CAAC;IACxC,SAAS,EAAE,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IACrD,mGAAmG;IACnG,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,8BAA8B,EAC9B,SAAS,EACT,MAAM,EACN,aAAa,EACb,WAAW,GACd,EAAE,MAAM,2CAqMR"}
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import type { ISeparators, MetricType } from "@gooddata/sdk-model";
2
+ import type { ISemanticConditionalFormatting, ISeparators, MetricType } from "@gooddata/sdk-model";
3
3
  import { type IUiTagDef } from "@gooddata/sdk-ui-kit";
4
4
  import { type ICatalogItem } from "../catalogItem/types.js";
5
5
  type Props = {
@@ -12,12 +12,13 @@ type Props = {
12
12
  onIsHiddenFromKdaChange: (isHiddenFromKda: boolean) => void;
13
13
  onMetricTypeChange?: (metricType: MetricType | undefined) => void;
14
14
  onFormatChange?: (format: string | null) => void;
15
+ onConditionalFormattingChange?: (conditionalFormatting: ISemanticConditionalFormatting | undefined) => void;
15
16
  separators?: ISeparators;
16
17
  currencyFormatOverride?: string | null;
17
18
  enableMetricFormatOverrides?: boolean;
18
19
  /**
19
- * Inline access row rendered at the top of the list. Self-contained (reads the
20
- * share context); undefined / nothing rendered when sharing is unavailable.
20
+ * Inline access row, rendered last before Tags. Self-contained (reads the share
21
+ * context); undefined / nothing rendered when sharing is unavailable.
21
22
  */
22
23
  accessRow?: ReactNode;
23
24
  /**
@@ -26,6 +27,6 @@ type Props = {
26
27
  */
27
28
  showDatasetRow?: boolean;
28
29
  };
29
- export declare function CatalogDetailTabMetadata({ item, canEdit, onTagClick, onTagAdd, onTagRemove, onIsHiddenChange, onIsHiddenFromKdaChange, onMetricTypeChange, onFormatChange, separators, currencyFormatOverride, enableMetricFormatOverrides, accessRow, showDatasetRow }: Props): import("react/jsx-runtime").JSX.Element;
30
+ export declare function CatalogDetailTabMetadata({ item, canEdit, onTagClick, onTagAdd, onTagRemove, onIsHiddenChange, onIsHiddenFromKdaChange, onMetricTypeChange, onFormatChange, onConditionalFormattingChange, separators, currencyFormatOverride, enableMetricFormatOverrides, accessRow, showDatasetRow, }: Props): import("react/jsx-runtime").JSX.Element;
30
31
  export {};
31
32
  //# sourceMappingURL=CatalogDetailTabMetadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailTabMetadata.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailTabMetadata.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,sBAAsB,CAAC;AASjF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAO5D,KAAK,KAAK,GAAG;IACT,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,uBAAuB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,KAAK,IAAI,CAAC;IAClE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EACrC,IAAI,EACJ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,SAAS,EACT,cAAc,EACjB,EAAE,KAAK,2CAiJP"}
1
+ {"version":3,"file":"CatalogDetailTabMetadata.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailTabMetadata.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,8BAA8B,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,sBAAsB,CAAC;AASjF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAS5D,KAAK,KAAK,GAAG;IACT,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,uBAAuB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,KAAK,IAAI,CAAC;IAClE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,6BAA6B,CAAC,EAAE,CAC5B,qBAAqB,EAAE,8BAA8B,GAAG,SAAS,KAChE,IAAI,CAAC;IACV,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EACrC,IAAI,EACJ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,6BAA6B,EAC7B,UAAU,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,SAAS,EACT,cAAc,GACjB,EAAE,KAAK,2CA6JP"}
@@ -5,17 +5,20 @@ import { FormattedMessage, useIntl } from "react-intl";
5
5
  import { UiDate, UiIcon, UiTooltip } from "@gooddata/sdk-ui-kit";
6
6
  import { isCatalogItemAttribute, isCatalogItemDataSet, isCatalogItemFact, isCatalogItemHidable, isCatalogItemMeasure, } from "../catalogItem/guards.js";
7
7
  import {} from "../catalogItem/types.js";
8
+ import { useFeatureFlag } from "../permission/PermissionsContext.js";
9
+ import { CatalogDetailConditionalFormatting } from "./CatalogDetailConditionalFormatting.js";
8
10
  import { CatalogDetailContentRow } from "./CatalogDetailContentRow.js";
9
11
  import { CatalogDetailGranularities } from "./CatalogDetailGranularities.js";
10
12
  import { CatalogDetailMetricSettings } from "./CatalogDetailMetricSettings.js";
11
13
  import { CatalogDetailTags } from "./CatalogDetailTags.js";
12
- export function CatalogDetailTabMetadata({ item, canEdit, onTagClick, onTagAdd, onTagRemove, onIsHiddenChange, onIsHiddenFromKdaChange, onMetricTypeChange, onFormatChange, separators, currencyFormatOverride, enableMetricFormatOverrides, accessRow, showDatasetRow, }) {
14
+ export function CatalogDetailTabMetadata({ item, canEdit, onTagClick, onTagAdd, onTagRemove, onIsHiddenChange, onIsHiddenFromKdaChange, onMetricTypeChange, onFormatChange, onConditionalFormattingChange, separators, currencyFormatOverride, enableMetricFormatOverrides, accessRow, showDatasetRow, }) {
15
+ const enableSemanticConditionalFormatting = useFeatureFlag("enableSemanticConditionalFormatting");
13
16
  const intl = useIntl();
14
17
  const isMeasure = isCatalogItemMeasure(item);
15
18
  const isDataSet = isCatalogItemDataSet(item);
16
19
  const granularities = isDataSet ? (item.dataSet.attributes ?? []) : [];
17
20
  const datasetTitle = isCatalogItemAttribute(item) || isCatalogItemFact(item) ? item.dataSet?.title : undefined;
18
- return (_jsxs("dl", { className: "gd-analytics-catalog-detail__tab-content", children: [accessRow, showDatasetRow && datasetTitle ? (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.dataSet" }), content: datasetTitle })) : null, isDataSet && granularities.length > 0 ? (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.granularities" }), content: _jsx(CatalogDetailGranularities, { granularities: granularities }) })) : null, _jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.createdBy" }), content: item.createdBy ?? undefined }), _jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.createdAt" }), content: item.createdAt ? _jsx(UiDate, { date: item.createdAt, locale: intl.locale }) : undefined }), item.createdBy === item.updatedBy && !item.updatedBy ? null : (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.updatedBy" }), content: item.updatedBy ?? undefined })), item.createdAt?.getTime() === item.updatedAt?.getTime() ? null : (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.updatedAt" }), content: item.updatedAt ? _jsx(UiDate, { date: item.updatedAt, locale: intl.locale }) : undefined })), isCatalogItemHidable(item) ? (_jsx(CatalogDetailContentRow, { title: _jsxs(_Fragment, { children: [_jsx(FormattedMessage, { id: "analyticsCatalog.column.title.isHidden" }), _jsx(UiTooltip, { anchor: _jsx(UiIcon, { type: "question", size: 12, color: "complementary-6" }), content: _jsx(FormattedMessage, { id: "analyticsCatalog.column.isHidden.field.tooltip" }), arrowPlacement: "left", optimalPlacement: true, offset: 10, width: 280, triggerBy: ["hover", "click"] })] }), content: _jsxs("label", { className: "input-checkbox-toggle", children: [_jsx("input", { type: "checkbox", checked: item.isHidden !== true, disabled: !canEdit, "aria-label": intl.formatMessage({
21
+ return (_jsxs("dl", { className: "gd-analytics-catalog-detail__tab-content", children: [showDatasetRow && datasetTitle ? (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.dataSet" }), content: datasetTitle })) : null, isDataSet && granularities.length > 0 ? (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.granularities" }), content: _jsx(CatalogDetailGranularities, { granularities: granularities }) })) : null, _jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.createdBy" }), content: item.createdBy ?? undefined }), _jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.createdAt" }), content: item.createdAt ? _jsx(UiDate, { date: item.createdAt, locale: intl.locale }) : undefined }), item.createdBy === item.updatedBy && !item.updatedBy ? null : (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.updatedBy" }), content: item.updatedBy ?? undefined })), item.createdAt?.getTime() === item.updatedAt?.getTime() ? null : (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.updatedAt" }), content: item.updatedAt ? _jsx(UiDate, { date: item.updatedAt, locale: intl.locale }) : undefined })), isCatalogItemHidable(item) ? (_jsx(CatalogDetailContentRow, { title: _jsxs(_Fragment, { children: [_jsx(FormattedMessage, { id: "analyticsCatalog.column.title.isHidden" }), _jsx(UiTooltip, { anchor: _jsx(UiIcon, { type: "question", size: 12, color: "complementary-6" }), content: _jsx(FormattedMessage, { id: "analyticsCatalog.column.isHidden.field.tooltip" }), arrowPlacement: "left", optimalPlacement: true, offset: 10, width: 280, triggerBy: ["hover", "click"] })] }), content: _jsxs("label", { className: "input-checkbox-toggle", children: [_jsx("input", { type: "checkbox", checked: item.isHidden !== true, disabled: !canEdit, "aria-label": intl.formatMessage({
19
22
  id: "analyticsCatalog.column.title.isHidden",
20
23
  }), onChange: (event) => {
21
24
  onIsHiddenChange(!event.target.checked);
@@ -23,5 +26,5 @@ export function CatalogDetailTabMetadata({ item, canEdit, onTagClick, onTagAdd,
23
26
  id: "analyticsCatalog.column.title.isHiddenFromKda",
24
27
  }), onChange: (event) => {
25
28
  onIsHiddenFromKdaChange(!event.target.checked);
26
- }, className: cx("s-checkbox-toggle", canEdit ? "s-enabled" : "s-disabled") }), _jsx("span", { className: "input-label-text" })] }) })) : null, isMeasure && enableMetricFormatOverrides ? (_jsx(CatalogDetailMetricSettings, { metricType: item.metricType, format: item.format, canEdit: canEdit, separators: separators, currencyFormatOverride: currencyFormatOverride, onMetricTypeChange: onMetricTypeChange, onFormatChange: onFormatChange, enableMetricFormatOverrides: enableMetricFormatOverrides })) : null, _jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.tags" }), content: _jsx(CatalogDetailTags, { tags: item.tags, canEdit: canEdit, onTagClick: onTagClick, onTagAdd: onTagAdd, onTagRemove: onTagRemove }) })] }));
29
+ }, className: cx("s-checkbox-toggle", canEdit ? "s-enabled" : "s-disabled") }), _jsx("span", { className: "input-label-text" })] }) })) : null, isMeasure && enableMetricFormatOverrides ? (_jsx(CatalogDetailMetricSettings, { metricType: item.metricType, format: item.format, canEdit: canEdit, separators: separators, currencyFormatOverride: currencyFormatOverride, onMetricTypeChange: onMetricTypeChange, onFormatChange: onFormatChange, enableMetricFormatOverrides: enableMetricFormatOverrides })) : null, isMeasure && enableSemanticConditionalFormatting && onConditionalFormattingChange ? (_jsx(CatalogDetailConditionalFormatting, { identifier: item.identifier, title: item.title, format: item.format, conditionalFormatting: item.conditionalFormatting, canEdit: canEdit, onConditionalFormattingChange: onConditionalFormattingChange, separators: separators })) : null, accessRow, _jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.column.title.tags" }), content: _jsx(CatalogDetailTags, { tags: item.tags, canEdit: canEdit, onTagClick: onTagClick, onTagAdd: onTagAdd, onTagRemove: onTagRemove }) })] }));
27
30
  }
@@ -8,6 +8,6 @@ type Props = {
8
8
  onEditClick?: (attributeName: SemanticQualityIssueAttributeName) => void;
9
9
  onCatalogItemNavigation?: (event: MouseEvent, ref: ICatalogItemRef) => void;
10
10
  };
11
- export declare function CatalogDetailTabQuality({ item, issues, canEdit, onEditClick, onCatalogItemNavigation }: Props): import("react/jsx-runtime").JSX.Element;
11
+ export declare function CatalogDetailTabQuality({ item, issues, canEdit, onEditClick, onCatalogItemNavigation, }: Props): import("react/jsx-runtime").JSX.Element;
12
12
  export {};
13
13
  //# sourceMappingURL=CatalogDetailTabQuality.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailTabQuality.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailTabQuality.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAGzG,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF,KAAK,KAAK,GAAG;IACT,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,iCAAiC,KAAK,IAAI,CAAC;IACzE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CAC/E,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EACpC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,WAAW,EACX,uBAAuB,EAC1B,EAAE,KAAK,2CAsBP"}
1
+ {"version":3,"file":"CatalogDetailTabQuality.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailTabQuality.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAGzG,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF,KAAK,KAAK,GAAG;IACT,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,iCAAiC,KAAK,IAAI,CAAC;IACzE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CAC/E,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EACpC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,WAAW,EACX,uBAAuB,GAC1B,EAAE,KAAK,2CAsBP"}
@@ -1,5 +1,5 @@
1
- import type { IUser, MetricType } from "@gooddata/sdk-model";
2
- import { type ICatalogItem, type ICatalogItemRef } from "../../catalogItem/types.js";
1
+ import { type IUser, type MetricType } from "@gooddata/sdk-model";
2
+ import { type ICatalogItem, type ICatalogItemMeasure, type ICatalogItemRef } from "../../catalogItem/types.js";
3
3
  import { type ObjectType } from "../../objectType/types.js";
4
4
  export interface IUseCatalogItemUpdate {
5
5
  currentUser: IUser | null | undefined;
@@ -10,7 +10,7 @@ export interface IUseCatalogItemUpdate {
10
10
  onDelete?: (ref: ICatalogItemRef) => void;
11
11
  onError?: (error: Error) => void;
12
12
  }
13
- export declare function useCatalogItemUpdate({ currentUser, objectId, objectType, objectDefinition, onUpdate, onDelete, onError }: IUseCatalogItemUpdate): {
13
+ export declare function useCatalogItemUpdate({ currentUser, objectId, objectType, objectDefinition, onUpdate, onDelete, onError, }: IUseCatalogItemUpdate): {
14
14
  item: ICatalogItem | null | undefined;
15
15
  status: "error" | "loading" | "pending" | "success";
16
16
  error: Error | undefined;
@@ -21,6 +21,7 @@ export declare function useCatalogItemUpdate({ currentUser, objectId, objectType
21
21
  updateItemIsHiddenFromKda: (isHiddenFromKda: boolean) => void;
22
22
  updateItemMetricType: (metricType: MetricType | undefined) => void;
23
23
  updateItemFormat: (format: string | null) => void;
24
+ updateItemConditionalFormatting: (conditionalFormatting: ICatalogItemMeasure["conditionalFormatting"]) => void;
24
25
  updateItemCertification: (certification: ICatalogItem["certification"]) => void;
25
26
  applyItemUpdate: (updated: ICatalogItem) => void;
26
27
  applyItemDelete: (ref: ICatalogItemRef) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useCatalogItemUpdate.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/hooks/useCatalogItemUpdate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAM7D,OAAO,EACH,KAAK,YAAY,EAEjB,KAAK,eAAe,EACvB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACpC;AAID,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,OAAO,EACV,EAAE,qBAAqB;;;;6BA4DR,MAAM;yCAsBA,MAAM;2BAsBb,MAAM,EAAE;mCAsBJ,OAAO;iDA0BA,OAAO;uCA8BZ,UAAU,GAAG,SAAS;+BA2B1B,MAAM,GAAG,IAAI;6CA+BN,YAAY,CAAC,eAAe,CAAC;+BAtMnC,YAAY;2BAUhB,eAAe;EAqP5B"}
1
+ {"version":3,"file":"useCatalogItemUpdate.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/hooks/useCatalogItemUpdate.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAUlE,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACvB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACpC;AAID,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,OAAO,GACV,EAAE,qBAAqB;;;;6BA4DR,MAAM;yCAsBA,MAAM;2BAsBb,MAAM,EAAE;mCAsBJ,OAAO;iDA0BA,OAAO;uCA8BZ,UAAU,GAAG,SAAS;+BA2B1B,MAAM,GAAG,IAAI;6DA+BE,mBAAmB,CAAC,uBAAuB,CAAC;6CAwCpD,YAAY,CAAC,eAAe,CAAC;+BA9OnC,YAAY;2BAUhB,eAAe;EA8R5B"}
@@ -1,10 +1,11 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { useCallback, useEffect, useState } from "react";
3
3
  import { isEqual } from "lodash-es";
4
+ import {} from "@gooddata/sdk-model";
4
5
  import { useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
5
6
  import { getDisplayName } from "../../catalogItem/converter.js";
6
7
  import { isCatalogItemHidable, isCatalogItemLoaded, isCatalogItemMeasure } from "../../catalogItem/guards.js";
7
- import { updateCatalogItem, updateCatalogItemCertification } from "../../catalogItem/query.js";
8
+ import { persistMeasureConditionalFormatting, updateCatalogItem, updateCatalogItemCertification, } from "../../catalogItem/query.js";
8
9
  import {} from "../../catalogItem/types.js";
9
10
  import { useMounted } from "../../hooks/useMounted.js";
10
11
  import {} from "../../objectType/types.js";
@@ -130,6 +131,29 @@ export function useCatalogItemUpdate({ currentUser, objectId, objectType, object
130
131
  revertItemUpdate(err, item);
131
132
  }, persistMeasureChanges);
132
133
  }, [backend, currentUser, item, onUpdate, persistMeasureChanges, revertItemUpdate, status, workspace]);
134
+ const persistMeasureConditionalFormattingChanges = useCallback((nextItem) => persistMeasureConditionalFormatting(backend, workspace, nextItem), [backend, workspace]);
135
+ const updateItemConditionalFormatting = useCallback((conditionalFormatting) => {
136
+ if (!isCatalogItemMeasure(item)) {
137
+ return;
138
+ }
139
+ updateItem(backend, workspace, currentUser, item, status !== "success", () => ({
140
+ conditionalFormatting,
141
+ }), (newItem) => {
142
+ setItem(newItem);
143
+ onUpdate?.(newItem);
144
+ }, (err) => {
145
+ revertItemUpdate(err, item);
146
+ }, persistMeasureConditionalFormattingChanges);
147
+ }, [
148
+ backend,
149
+ currentUser,
150
+ item,
151
+ onUpdate,
152
+ persistMeasureConditionalFormattingChanges,
153
+ revertItemUpdate,
154
+ status,
155
+ workspace,
156
+ ]);
133
157
  const persistCertificationChanges = useCallback((newItem) => updateCatalogItemCertification(backend, workspace, newItem), [backend, workspace]);
134
158
  const updateItemCertification = useCallback((certification) => {
135
159
  updateItem(backend, workspace, currentUser, item, status !== "success", () => ({
@@ -171,6 +195,7 @@ export function useCatalogItemUpdate({ currentUser, objectId, objectType, object
171
195
  updateItemIsHiddenFromKda,
172
196
  updateItemMetricType,
173
197
  updateItemFormat,
198
+ updateItemConditionalFormatting,
174
199
  updateItemCertification,
175
200
  applyItemUpdate,
176
201
  applyItemDelete,
@@ -1,19 +1,18 @@
1
- import type { IObjectAccessSummary } from "@gooddata/sdk-ui-ext";
1
+ import { type IObjectAccessSummary } from "@gooddata/sdk-ui-ext";
2
2
  /**
3
3
  * @internal
4
4
  */
5
5
  export interface ICatalogDetailAccessRowProps {
6
6
  summary: IObjectAccessSummary;
7
- onOpen: () => void;
8
7
  }
9
8
  /**
10
- * Inline metadata row showing the current access state. Composed of two chips:
9
+ * Static description of who can reach the object, for the metadata grid. Workspace-wide
10
+ * access and named grantees are independent, so both lines can show at once; neither one
11
+ * showing means nobody but the caller has access.
11
12
  *
12
- * - State chip: lock (restricted) or earth (workspace-wide), with text describing
13
- * the permission level.
14
- * - Grantee count chip: users icon + "Shared with N" link that opens the dialog.
13
+ * Read-only by design — the header's Share button is the way in to editing access.
15
14
  *
16
15
  * @internal
17
16
  */
18
- export declare function CatalogDetailAccessRow({ summary, onOpen }: ICatalogDetailAccessRowProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function CatalogDetailAccessRow({ summary }: ICatalogDetailAccessRowProps): import("react/jsx-runtime").JSX.Element;
19
18
  //# sourceMappingURL=CatalogDetailAccessRow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailAccessRow.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/CatalogDetailAccessRow.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAYjE;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;CACtB;AASD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,4BAA4B,2CA8CvF"}
1
+ {"version":3,"file":"CatalogDetailAccessRow.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/CatalogDetailAccessRow.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,oBAAoB,EAA4B,MAAM,sBAAsB,CAAC;AAa3F;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC,OAAO,EAAE,oBAAoB,CAAC;CACjC;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,EAAE,4BAA4B,2CAgC/E"}
@@ -1,31 +1,29 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // (C) 2026 GoodData Corporation
3
- import { FormattedMessage, useIntl } from "react-intl";
2
+ import { FormattedMessage } from "react-intl";
3
+ import { summaryOtherGranteeCount } from "@gooddata/sdk-ui-ext";
4
4
  import { UiIcon } from "@gooddata/sdk-ui-kit";
5
- import { catalogDetailAccessRow, catalogDetailAccessRowSharedLink, catalogDetailAccessRowState, } from "../../automation/testIds.js";
5
+ import { catalogDetailAccessRow, catalogDetailAccessRowPrivate, catalogDetailAccessRowShared, catalogDetailAccessRowWorkspace, } from "../../automation/testIds.js";
6
6
  import { CatalogDetailContentRow } from "../CatalogDetailContentRow.js";
7
7
  import { shareMessages } from "./messages.js";
8
- // Chip copy for each workspace-wide access level.
9
- const WORKSPACE_ACCESS_ROW_MESSAGE = {
8
+ const WORKSPACE_MESSAGE = {
10
9
  EDIT: shareMessages.accessRowWorkspaceEdit,
11
10
  SHARE: shareMessages.accessRowWorkspaceShare,
12
11
  VIEW: shareMessages.accessRowWorkspaceView,
13
12
  };
13
+ function AccessLine({ icon, testId, children }) {
14
+ return (_jsxs("li", { className: "gd-analytics-catalog-detail__access-row__line", "data-testid": testId, children: [_jsx("span", { className: "gd-analytics-catalog-detail__access-row__icon", children: _jsx(UiIcon, { type: icon, size: 14, color: "complementary-7" }) }), _jsx("span", { children: children })] }));
15
+ }
14
16
  /**
15
- * Inline metadata row showing the current access state. Composed of two chips:
17
+ * Static description of who can reach the object, for the metadata grid. Workspace-wide
18
+ * access and named grantees are independent, so both lines can show at once; neither one
19
+ * showing means nobody but the caller has access.
16
20
  *
17
- * - State chip: lock (restricted) or earth (workspace-wide), with text describing
18
- * the permission level.
19
- * - Grantee count chip: users icon + "Shared with N" link that opens the dialog.
21
+ * Read-only by design — the header's Share button is the way in to editing access.
20
22
  *
21
23
  * @internal
22
24
  */
23
- export function CatalogDetailAccessRow({ summary, onOpen }) {
24
- const intl = useIntl();
25
- const { generalAccess, workspaceLevel, granteeCount } = summary;
26
- const stateText = intl.formatMessage(generalAccess === "RESTRICTED"
27
- ? shareMessages.accessRowRestricted
28
- : WORKSPACE_ACCESS_ROW_MESSAGE[workspaceLevel]);
29
- const stateIcon = generalAccess === "RESTRICTED" ? "lock" : "building";
30
- return (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { ...shareMessages.accessRowLabel }), content: _jsxs("div", { className: "gd-analytics-catalog-detail__access-row", "data-testid": catalogDetailAccessRow, children: [_jsxs("span", { className: "gd-analytics-catalog-detail__access-row__chip", "data-testid": catalogDetailAccessRowState, children: [_jsx("span", { className: "gd-analytics-catalog-detail__access-row__chip-icon", children: _jsx(UiIcon, { type: stateIcon, size: 14, color: "complementary-7" }) }), _jsx("span", { children: stateText })] }), _jsxs("button", { type: "button", className: "gd-analytics-catalog-detail__access-row__chip gd-analytics-catalog-detail__access-row__shared-link", onClick: onOpen, "data-testid": catalogDetailAccessRowSharedLink, children: [_jsx("span", { className: "gd-analytics-catalog-detail__access-row__chip-icon", children: _jsx(UiIcon, { type: "users", size: 14, color: "complementary-7" }) }), _jsx("span", { children: _jsx(FormattedMessage, { ...shareMessages.accessRowSharedWith, values: { count: granteeCount } }) })] })] }) }));
25
+ export function CatalogDetailAccessRow({ summary }) {
26
+ const isWorkspaceWide = summary.generalAccess === "WORKSPACE";
27
+ const otherGrantees = summaryOtherGranteeCount(summary);
28
+ return (_jsx(CatalogDetailContentRow, { alignTop: true, title: _jsx(FormattedMessage, { ...shareMessages.accessRowLabel }), content: _jsxs("ul", { className: "gd-analytics-catalog-detail__access-row", "data-testid": catalogDetailAccessRow, children: [isWorkspaceWide ? (_jsx(AccessLine, { icon: "building", testId: catalogDetailAccessRowWorkspace, children: _jsx(FormattedMessage, { ...WORKSPACE_MESSAGE[summary.workspaceLevel] }) })) : null, otherGrantees > 0 ? (_jsx(AccessLine, { icon: "users", testId: catalogDetailAccessRowShared, children: _jsx(FormattedMessage, { ...shareMessages.accessRowSharedWith, values: { count: otherGrantees } }) })) : null, !isWorkspaceWide && otherGrantees === 0 ? (_jsx(AccessLine, { icon: "invisible", testId: catalogDetailAccessRowPrivate, children: _jsx(FormattedMessage, { ...shareMessages.accessRowPrivate }) })) : null] }) }));
31
29
  }