@gooddata/sdk-ui-catalog 11.55.0-alpha.1 → 11.55.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 (125) hide show
  1. package/esm/asCode/validateYaml.d.ts +3 -3
  2. package/esm/asCode/validateYaml.d.ts.map +1 -1
  3. package/esm/asCode/validateYaml.js +21 -5
  4. package/esm/catalogDetail/CatalogDetailGenerateDescription.d.ts +2 -2
  5. package/esm/catalogDetail/CatalogDetailGenerateDescription.d.ts.map +1 -1
  6. package/esm/catalogDetail/CatalogDetailGenerateDescription.js +0 -4
  7. package/esm/catalogDetail/CatalogDetailGenerateTitle.d.ts +2 -2
  8. package/esm/catalogDetail/CatalogDetailGenerateTitle.d.ts.map +1 -1
  9. package/esm/catalogDetail/CatalogDetailGenerateTitle.js +0 -4
  10. package/esm/catalogDetail/CatalogDetailHeader.d.ts.map +1 -1
  11. package/esm/catalogDetail/CatalogDetailHeader.js +2 -2
  12. package/esm/catalogItem/guards.d.ts +6 -1
  13. package/esm/catalogItem/guards.d.ts.map +1 -1
  14. package/esm/catalogItem/guards.js +11 -0
  15. package/esm/catalogItem/query.d.ts +1 -7
  16. package/esm/catalogItem/query.d.ts.map +1 -1
  17. package/esm/catalogItem/query.js +0 -11
  18. package/esm/catalogItem/types.d.ts +8 -1
  19. package/esm/catalogItem/types.d.ts.map +1 -1
  20. package/esm/computedAttribute/computedAttributeDescriptor.d.ts.map +1 -1
  21. package/esm/computedAttribute/computedAttributeDescriptor.js +4 -3
  22. package/esm/computedAttribute/computedAttributeMutationPort.d.ts +1 -1
  23. package/esm/computedAttribute/computedAttributeMutationPort.d.ts.map +1 -1
  24. package/esm/computedAttribute/computedAttributeMutationPort.js +2 -1
  25. package/esm/computedAttribute/computedAttributeSerialization.d.ts +6 -4
  26. package/esm/computedAttribute/computedAttributeSerialization.d.ts.map +1 -1
  27. package/esm/computedAttribute/computedAttributeSerialization.js +16 -8
  28. package/esm/computedAttribute/computedAttributeValidation.d.ts +1 -1
  29. package/esm/computedAttribute/computedAttributeValidation.d.ts.map +1 -1
  30. package/esm/computedAttribute/computedAttributeValidation.js +6 -1
  31. package/esm/localization/bundles/de-DE.localization-bundle.d.ts +20 -0
  32. package/esm/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  33. package/esm/localization/bundles/de-DE.localization-bundle.js +20 -0
  34. package/esm/localization/bundles/en-AU.localization-bundle.d.ts +20 -0
  35. package/esm/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  36. package/esm/localization/bundles/en-AU.localization-bundle.js +20 -0
  37. package/esm/localization/bundles/en-GB.localization-bundle.d.ts +20 -0
  38. package/esm/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  39. package/esm/localization/bundles/en-GB.localization-bundle.js +20 -0
  40. package/esm/localization/bundles/en-US.localization-bundle.d.ts +8 -0
  41. package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  42. package/esm/localization/bundles/en-US.localization-bundle.js +12 -4
  43. package/esm/localization/bundles/es-419.localization-bundle.d.ts +20 -0
  44. package/esm/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  45. package/esm/localization/bundles/es-419.localization-bundle.js +20 -0
  46. package/esm/localization/bundles/es-ES.localization-bundle.d.ts +20 -0
  47. package/esm/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  48. package/esm/localization/bundles/es-ES.localization-bundle.js +20 -0
  49. package/esm/localization/bundles/fi-FI.localization-bundle.d.ts +20 -0
  50. package/esm/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  51. package/esm/localization/bundles/fi-FI.localization-bundle.js +20 -0
  52. package/esm/localization/bundles/fr-CA.localization-bundle.d.ts +20 -0
  53. package/esm/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  54. package/esm/localization/bundles/fr-CA.localization-bundle.js +20 -0
  55. package/esm/localization/bundles/fr-FR.localization-bundle.d.ts +20 -0
  56. package/esm/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  57. package/esm/localization/bundles/fr-FR.localization-bundle.js +20 -0
  58. package/esm/localization/bundles/id-ID.localization-bundle.d.ts +20 -0
  59. package/esm/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  60. package/esm/localization/bundles/id-ID.localization-bundle.js +20 -0
  61. package/esm/localization/bundles/it-IT.localization-bundle.d.ts +20 -0
  62. package/esm/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  63. package/esm/localization/bundles/it-IT.localization-bundle.js +20 -0
  64. package/esm/localization/bundles/ja-JP.localization-bundle.d.ts +20 -0
  65. package/esm/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  66. package/esm/localization/bundles/ja-JP.localization-bundle.js +20 -0
  67. package/esm/localization/bundles/ko-KR.localization-bundle.d.ts +20 -0
  68. package/esm/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  69. package/esm/localization/bundles/ko-KR.localization-bundle.js +20 -0
  70. package/esm/localization/bundles/nl-NL.localization-bundle.d.ts +20 -0
  71. package/esm/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  72. package/esm/localization/bundles/nl-NL.localization-bundle.js +20 -0
  73. package/esm/localization/bundles/pl-PL.localization-bundle.d.ts +20 -0
  74. package/esm/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  75. package/esm/localization/bundles/pl-PL.localization-bundle.js +20 -0
  76. package/esm/localization/bundles/pt-BR.localization-bundle.d.ts +20 -0
  77. package/esm/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  78. package/esm/localization/bundles/pt-BR.localization-bundle.js +20 -0
  79. package/esm/localization/bundles/pt-PT.localization-bundle.d.ts +20 -0
  80. package/esm/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  81. package/esm/localization/bundles/pt-PT.localization-bundle.js +20 -0
  82. package/esm/localization/bundles/ru-RU.localization-bundle.d.ts +20 -0
  83. package/esm/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  84. package/esm/localization/bundles/ru-RU.localization-bundle.js +20 -0
  85. package/esm/localization/bundles/sl-SI.localization-bundle.d.ts +20 -0
  86. package/esm/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  87. package/esm/localization/bundles/sl-SI.localization-bundle.js +20 -0
  88. package/esm/localization/bundles/th-TH.localization-bundle.d.ts +20 -0
  89. package/esm/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  90. package/esm/localization/bundles/th-TH.localization-bundle.js +20 -0
  91. package/esm/localization/bundles/tr-TR.localization-bundle.d.ts +20 -0
  92. package/esm/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  93. package/esm/localization/bundles/tr-TR.localization-bundle.js +20 -0
  94. package/esm/localization/bundles/uk-UA.localization-bundle.d.ts +20 -0
  95. package/esm/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  96. package/esm/localization/bundles/uk-UA.localization-bundle.js +20 -0
  97. package/esm/localization/bundles/vi-VN.localization-bundle.d.ts +20 -0
  98. package/esm/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  99. package/esm/localization/bundles/vi-VN.localization-bundle.js +20 -0
  100. package/esm/localization/bundles/zh-HK.localization-bundle.d.ts +20 -0
  101. package/esm/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  102. package/esm/localization/bundles/zh-HK.localization-bundle.js +21 -1
  103. package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts +20 -0
  104. package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  105. package/esm/localization/bundles/zh-Hans.localization-bundle.js +20 -0
  106. package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts +20 -0
  107. package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  108. package/esm/localization/bundles/zh-Hant.localization-bundle.js +20 -0
  109. package/esm/metric/metricValidation.js +1 -1
  110. package/esm/parameter/parameterDescriptor.d.ts.map +1 -1
  111. package/esm/parameter/parameterDescriptor.js +1 -0
  112. package/esm/parameter/parameterSerialization.d.ts +8 -0
  113. package/esm/parameter/parameterSerialization.d.ts.map +1 -1
  114. package/esm/parameter/parameterSerialization.js +11 -1
  115. package/esm/parameter/parameterValidation.d.ts +1 -1
  116. package/esm/parameter/parameterValidation.d.ts.map +1 -1
  117. package/esm/parameter/parameterValidation.js +6 -0
  118. package/package.json +16 -19
  119. package/styles/css/codeDialog.css +3 -0
  120. package/styles/css/codeDialog.css.map +1 -1
  121. package/styles/css/detail.css +3 -0
  122. package/styles/css/detail.css.map +1 -1
  123. package/styles/css/main.css +3 -0
  124. package/styles/css/main.css.map +1 -1
  125. package/styles/scss/codeDialog.scss +4 -0
@@ -32,9 +32,9 @@ type ValidateYamlOptions<TData> = {
32
32
  fixedIdentifier?: string;
33
33
  };
34
34
  /**
35
- * Runs the steps every as-code YAML shares: reject empty input, parse (strict) YAML, validate against
36
- * the schema, and enforce identity immutability. The schema itself and the conversion of validated data
37
- * into a definition are the caller's.
35
+ * Runs the steps every as-code YAML shares: reject empty input, parse (strict) YAML, drop a blank
36
+ * identity, validate against the schema, and enforce identity immutability. The schema itself and the
37
+ * conversion of validated data into a definition are the caller's.
38
38
  */
39
39
  export declare function validateYaml<TData extends {
40
40
  id?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"validateYaml.d.ts","sourceRoot":"","sources":["../../src/asCode/validateYaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,CAAC,MAAM,UAAU,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,IAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAA;CAAE,GACvD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,KAAK,eAAe,CAAC,KAAK,IAAI;IAC1B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;KAAE,CAAC;CAC3G,CAAC;AAEF,KAAK,mBAAmB,CAAC,KAAK,IAAI;IAC9B,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,qGAAqG;IACrG,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,KAAK,EAAE,MAAM,EACb,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,GACxD,cAAc,CAAC,KAAK,CAAC,CAsBvB"}
1
+ {"version":3,"file":"validateYaml.d.ts","sourceRoot":"","sources":["../../src/asCode/validateYaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,CAAC,MAAM,UAAU,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,IAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAA;CAAE,GACvD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,KAAK,eAAe,CAAC,KAAK,IAAI;IAC1B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;KAAE,CAAC;CAC3G,CAAC;AAEF,KAAK,mBAAmB,CAAC,KAAK,IAAI;IAC9B,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,qGAAqG;IACrG,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,KAAK,EAAE,MAAM,EACb,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,GACxD,cAAc,CAAC,KAAK,CAAC,CAuBvB"}
@@ -1,9 +1,9 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { parse as parseYaml } from "yaml";
3
3
  /**
4
- * Runs the steps every as-code YAML shares: reject empty input, parse (strict) YAML, validate against
5
- * the schema, and enforce identity immutability. The schema itself and the conversion of validated data
6
- * into a definition are the caller's.
4
+ * Runs the steps every as-code YAML shares: reject empty input, parse (strict) YAML, drop a blank
5
+ * identity, validate against the schema, and enforce identity immutability. The schema itself and the
6
+ * conversion of validated data into a definition are the caller's.
7
7
  */
8
8
  export function validateYaml(value, { schema, fixedIdentifier }) {
9
9
  if (value.trim() === "") {
@@ -16,12 +16,28 @@ export function validateYaml(value, { schema, fixedIdentifier }) {
16
16
  catch {
17
17
  return { ok: false, kind: "syntax" };
18
18
  }
19
- const result = schema.safeParse(parsed);
19
+ const document = withoutBlankIdentity(parsed);
20
+ const result = schema.safeParse(document);
20
21
  if (!result.success) {
21
- return { ok: false, kind: "schema", error: result.error, parsed };
22
+ return { ok: false, kind: "schema", error: result.error, parsed: document };
22
23
  }
23
24
  if (fixedIdentifier !== undefined && result.data.id !== fixedIdentifier) {
24
25
  return { ok: false, kind: "idImmutable" };
25
26
  }
26
27
  return { ok: true, data: result.data };
27
28
  }
29
+ /**
30
+ * Drops an `id` the author left blank, so the template can offer the key without forcing a value.
31
+ *
32
+ * The seeded template renders `id: ` for an object that has none yet; left untouched it parses to
33
+ * `null`, and a whitespace-only value to a blank string. Either means "no identity chosen" — the
34
+ * server derives one on create — so the key is removed rather than passed on as a value the schema
35
+ * would reject or the backend would take literally.
36
+ */
37
+ function withoutBlankIdentity(parsed) {
38
+ if (!parsed || typeof parsed !== "object" || !("id" in parsed)) {
39
+ return parsed;
40
+ }
41
+ const { id, ...rest } = parsed;
42
+ return id === null || (typeof id === "string" && id.trim() === "") ? rest : parsed;
43
+ }
@@ -1,6 +1,6 @@
1
- import type { ICatalogItem } from "../catalogItem/types.js";
1
+ import type { ICatalogItemTextGenerable } from "../catalogItem/types.js";
2
2
  interface ICatalogDetailGenerateDescriptionProps {
3
- item: ICatalogItem;
3
+ item: ICatalogItemTextGenerable;
4
4
  onApplyDescription: (description: string) => void;
5
5
  }
6
6
  export declare const CatalogDetailGenerateDescription: import("react").ForwardRefExoticComponent<ICatalogDetailGenerateDescriptionProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailGenerateDescription.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailGenerateDescription.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAqB5D,UAAU,sCAAsC;IAC5C,IAAI,EAAE,YAAY,CAAC;IACnB,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED,eAAO,MAAM,gCAAgC,mIA6D3C,CAAC"}
1
+ {"version":3,"file":"CatalogDetailGenerateDescription.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailGenerateDescription.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAqBzE,UAAU,sCAAsC;IAC5C,IAAI,EAAE,yBAAyB,CAAC;IAChC,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED,eAAO,MAAM,gCAAgC,mIAyD3C,CAAC"}
@@ -4,7 +4,6 @@ import { forwardRef, useCallback } from "react";
4
4
  import { defineMessages, useIntl } from "react-intl";
5
5
  import { useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
6
6
  import { UiInlineTextGenerator, useToastMessage, } from "@gooddata/sdk-ui-kit";
7
- import { isGenerateDescriptionSupportedObjectType } from "../catalogItem/query.js";
8
7
  const messages = defineMessages({
9
8
  generateDescriptionButton: {
10
9
  id: "analyticsCatalog.catalogItem.description.generate",
@@ -29,9 +28,6 @@ export const CatalogDetailGenerateDescription = forwardRef(({ item, onApplyDescr
29
28
  const workspaceId = useWorkspaceStrict();
30
29
  const { addError } = useToastMessage();
31
30
  const generateItemDescription = useCallback(async () => {
32
- if (!isGenerateDescriptionSupportedObjectType(item.type)) {
33
- throw new Error(`Unsupported object type for generated description: ${item.type}`);
34
- }
35
31
  const response = await backend
36
32
  .workspace(workspaceId)
37
33
  .genAI()
@@ -1,6 +1,6 @@
1
- import type { ICatalogItem } from "../catalogItem/types.js";
1
+ import type { ICatalogItemTextGenerable } from "../catalogItem/types.js";
2
2
  interface ICatalogDetailGenerateTitleProps {
3
- item: ICatalogItem;
3
+ item: ICatalogItemTextGenerable;
4
4
  onApplyTitle: (title: string) => void;
5
5
  }
6
6
  export declare const CatalogDetailGenerateTitle: import("react").ForwardRefExoticComponent<ICatalogDetailGenerateTitleProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailGenerateTitle.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailGenerateTitle.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAqB5D,UAAU,gCAAgC;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,eAAO,MAAM,0BAA0B,6HA4DtC,CAAC"}
1
+ {"version":3,"file":"CatalogDetailGenerateTitle.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailGenerateTitle.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAqBzE,UAAU,gCAAgC;IACtC,IAAI,EAAE,yBAAyB,CAAC;IAChC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,eAAO,MAAM,0BAA0B,6HAwDtC,CAAC"}
@@ -4,7 +4,6 @@ import { forwardRef, useCallback } from "react";
4
4
  import { defineMessages, useIntl } from "react-intl";
5
5
  import { useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
6
6
  import { UiInlineTextGenerator, useToastMessage, } from "@gooddata/sdk-ui-kit";
7
- import { isGenerateDescriptionSupportedObjectType } from "../catalogItem/query.js";
8
7
  const messages = defineMessages({
9
8
  generateTitleButton: {
10
9
  id: "analyticsCatalog.catalogItem.title.generate",
@@ -29,9 +28,6 @@ export const CatalogDetailGenerateTitle = forwardRef(({ item, onApplyTitle }, re
29
28
  const workspaceId = useWorkspaceStrict();
30
29
  const { addError } = useToastMessage();
31
30
  const generateItemTitle = useCallback(async () => {
32
- if (!isGenerateDescriptionSupportedObjectType(item.type)) {
33
- throw new Error(`Unsupported object type for generated title: ${item.type}`);
34
- }
35
31
  const response = await backend
36
32
  .workspace(workspaceId)
37
33
  .genAI()
@@ -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;AAK9D,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,EACd,EAAE,MAAM,2CAqMR"}
@@ -4,7 +4,7 @@ import { useImperativeHandle, useRef } from "react";
4
4
  import { FormattedMessage, useIntl } from "react-intl";
5
5
  import { EditableLabel, UiCard, UiCopyButton, UiSkeleton } from "@gooddata/sdk-ui-kit";
6
6
  import { CatalogItemLockMemo } from "../catalogItem/CatalogItemLock.js";
7
- import { getVisualizationType, isCatalogItemAttribute, isCatalogItemFact } from "../catalogItem/guards.js";
7
+ import { getVisualizationType, isCatalogItemAttribute, isCatalogItemFact, isCatalogItemTextGenerable, } from "../catalogItem/guards.js";
8
8
  import {} from "../catalogItem/types.js";
9
9
  import { CatalogCertificationIconMemo } from "../certification/CatalogCertificationIcon.js";
10
10
  import { ObjectTypeIconMemo } from "../objectType/ObjectTypeIcon.js";
@@ -16,7 +16,7 @@ export function CatalogDetailHeader({ item, canEdit, actions, updateItemTitle, u
16
16
  const intl = useIntl();
17
17
  const type = item.type ?? "analyticalDashboard";
18
18
  const visualizationType = getVisualizationType(item);
19
- const canGenerateText = canEdit && item.type !== "dataSet" && isDescriptionGenerationEnabled;
19
+ const canGenerateText = isDescriptionGenerationEnabled && isCatalogItemTextGenerable(item);
20
20
  // Header info columns: ID is always shown; Dataset only for attributes/facts
21
21
  // that carry one; Labels for attributes — a skeleton while they load, then the
22
22
  // value (or nothing if the attribute turns out to have no permissionable labels).
@@ -1,4 +1,4 @@
1
- import type { ICatalogItem, ICatalogItemAttribute, ICatalogItemComputedAttribute, ICatalogItemDashboard, ICatalogItemDataSet, ICatalogItemFact, ICatalogItemHidable, ICatalogItemInsight, ICatalogItemMeasure, ICatalogItemParameter, ICatalogItemRef, VisualizationType } from "./types.js";
1
+ import type { ICatalogItem, ICatalogItemAttribute, ICatalogItemComputedAttribute, ICatalogItemDashboard, ICatalogItemDataSet, ICatalogItemFact, ICatalogItemHidable, ICatalogItemInsight, ICatalogItemMeasure, ICatalogItemParameter, ICatalogItemRef, ICatalogItemTextGenerable, VisualizationType } from "./types.js";
2
2
  /**
3
3
  * @internal
4
4
  */
@@ -36,6 +36,11 @@ export declare function isCatalogItemDataSet(item: ICatalogItem | undefined | nu
36
36
  * @internal
37
37
  */
38
38
  export declare function isCatalogItemHidable(item: ICatalogItem | undefined | null): item is ICatalogItemHidable;
39
+ /**
40
+ * Type guard for catalog items that support AI text generation.
41
+ * @internal
42
+ */
43
+ export declare function isCatalogItemTextGenerable(item: ICatalogItem | undefined | null): item is ICatalogItemTextGenerable;
39
44
  /**
40
45
  * Returns true when the provided value is a fully loaded catalog item
41
46
  * as opposed to just an identity-only reference.
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/catalogItem/guards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EACZ,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GACtC,IAAI,IAAI,6BAA6B,CAEvC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAEjG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAOvG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,GACxD,IAAI,IAAI,YAAY,CAEtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAEzG"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/catalogItem/guards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EACZ,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GACtC,IAAI,IAAI,6BAA6B,CAEvC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAEjG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAOvG;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GACtC,IAAI,IAAI,yBAAyB,CAQnC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,GACxD,IAAI,IAAI,YAAY,CAEtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAEzG"}
@@ -57,6 +57,17 @@ export function isCatalogItemHidable(item) {
57
57
  isCatalogItemAttribute(item) ||
58
58
  isCatalogItemFact(item));
59
59
  }
60
+ /**
61
+ * Type guard for catalog items that support AI text generation.
62
+ * @internal
63
+ */
64
+ export function isCatalogItemTextGenerable(item) {
65
+ return (isCatalogItemInsight(item) ||
66
+ isCatalogItemDashboard(item) ||
67
+ isCatalogItemMeasure(item) ||
68
+ isCatalogItemFact(item) ||
69
+ isCatalogItemAttribute(item));
70
+ }
60
71
  /**
61
72
  * Returns true when the provided value is a fully loaded catalog item
62
73
  * as opposed to just an identity-only reference.
@@ -1,12 +1,6 @@
1
- import type { AnalyticsCatalogGenerateDescriptionObjectType, IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
1
+ import type { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
2
2
  import { type IMeasureMetadataObject, type IMeasureMetadataObjectDefinition, type IParameterMetadataObjectDefinition, type ObjRef } from "@gooddata/sdk-model";
3
- import type { ObjectType } from "../objectType/types.js";
4
3
  import type { ICatalogItem, ICatalogItemQueryOptions } from "./types.js";
5
- /**
6
- * Type guard for catalog object types supported by AI description generation.
7
- * @internal
8
- */
9
- export declare function isGenerateDescriptionSupportedObjectType(objectType: ObjectType): objectType is AnalyticsCatalogGenerateDescriptionObjectType;
10
4
  export declare function getDashboardsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IDashboardsQuery;
11
5
  export declare function getInsightsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IInsightsQuery;
12
6
  export declare function getMetricsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IMeasuresQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,gCAAgC,EACrC,KAAK,kCAAkC,EACvC,KAAK,MAAM,EAEd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACR,YAAY,EASZ,wBAAwB,EAE3B,MAAM,YAAY,CAAC;AAIpB,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,QAAoB,EACvB,EAAE,wBAAwB,wDAuB1B;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,QAAoB,EACvB,EAAE,wBAAwB,sDAsB1B;AAED,wBAAgB,eAAe,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,QAAoB,EACvB,EAAE,wBAAwB,sDAsB1B;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAoB,EACvB,EAAE,wBAAwB,wDAoB1B;AAED,wBAAgB,0BAA0B,CAAC,EACvC,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAoB,EACvB,EAAE,wBAAwB,gEAoB1B;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,QAAoB,EACvB,EAAE,wBAAwB,wDAwB1B;AAED,wBAAgB,aAAa,CAAC,EAC1B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,QAAoB,EACvB,EAAE,wBAAwB,mDAsB1B;AAED,wBAAgB,oBAAoB,CAAC,EACjC,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,QAAoB,EACvB,EAAE,wBAAwB,sDAuB1B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,ogBAqBnG;AAmGD,wBAAsB,0BAA0B,CAC5C,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kCAAkC,mEAGhD;AAkBD,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,kCAAkC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,mEAYlE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAErG;AAkBD,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gCAAgC,mCAG5C;AAED,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,mCAGlC;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAEnG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,mCAEhG;AAED,wBAAgB,uCAAuC,CACnD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,oEAGd;AAED,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,eAAe,CAAC,iBAcpE"}
@@ -1,17 +1,6 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { idRef, } from "@gooddata/sdk-model";
3
3
  const PAGE_SIZE = 50;
4
- /**
5
- * Type guard for catalog object types supported by AI description generation.
6
- * @internal
7
- */
8
- export function isGenerateDescriptionSupportedObjectType(objectType) {
9
- return (objectType === "insight" ||
10
- objectType === "analyticalDashboard" ||
11
- objectType === "measure" ||
12
- objectType === "fact" ||
13
- objectType === "attribute");
14
- }
15
4
  export function getDashboardsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize = PAGE_SIZE, }) {
16
5
  return backend
17
6
  .workspace(workspace)
@@ -1,4 +1,4 @@
1
- import type { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
1
+ import type { AnalyticsCatalogGenerateDescriptionObjectType, IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
2
2
  import type { CertificationStatus, IDataSetMetadataObject, IParameterDefinition, IdentifierRef, MetricType, ObjectOrigin } from "@gooddata/sdk-model";
3
3
  import { type AsyncStatus } from "../async/types.js";
4
4
  import type { ObjectType } from "../objectType/types.js";
@@ -120,6 +120,13 @@ export interface ICatalogItemDataSet extends ICatalogItemBase {
120
120
  export type ICatalogItemHidable = Extract<ICatalogItem, {
121
121
  type: "insight" | "measure" | "attribute" | "fact";
122
122
  }>;
123
+ /**
124
+ * Catalog items that support AI text generation.
125
+ * @internal
126
+ */
127
+ export type ICatalogItemTextGenerable = Extract<ICatalogItem, {
128
+ type: AnalyticsCatalogGenerateDescriptionObjectType;
129
+ }>;
123
130
  export type ICatalogItemFeedOptions = Omit<ICatalogItemQueryOptions, "origin" | "tags">;
124
131
  export interface ICatalogItemQueryOptions {
125
132
  backend: IAnalyticalBackend;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalogItem/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalogItem/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"computedAttributeDescriptor.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeDescriptor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAQtF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAkF7E;;GAEG;AACH,eAAO,MAAM,2BAA2B,gIAmCtC,CAAC"}
1
+ {"version":3,"file":"computedAttributeDescriptor.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeDescriptor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAQtF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAmF7E;;GAEG;AACH,eAAO,MAAM,2BAA2B,gIAmCtC,CAAC"}
@@ -39,6 +39,7 @@ const errorMessages = defineMessages({
39
39
  invalidStructure: { id: "analyticsCatalog.computedAttribute.validation.invalidStructure" },
40
40
  idImmutable: { id: "analyticsCatalog.computedAttribute.dialog.edit.idImmutable" },
41
41
  missingMaql: { id: "analyticsCatalog.computedAttribute.validation.missingMaql" },
42
+ invalidType: { id: "analyticsCatalog.computedAttribute.validation.invalidType" },
42
43
  invalidTags: { id: "analyticsCatalog.computedAttribute.validation.invalidTags" },
43
44
  });
44
45
  function useComputedAttributeEditing() {
@@ -83,9 +84,9 @@ export const computedAttributeDescriptor = defineAsCodeDescriptor({
83
84
  }),
84
85
  // The catalog item carries no MAQL, so the full object is fetched for editing.
85
86
  seed: { load: loadComputedAttribute, loadError: capabilityMessages.loadError },
86
- // Refuses the deletion while a visualization still groups by it, and names those
87
- // visualizations. The backend currently allows the delete (it would break the insight
88
- // silently), so the catalog is the guard.
87
+ // Refuses the deletion while a visualization, metric, or dashboard still references it,
88
+ // and names those objects. The backend currently allows the delete (it would break the
89
+ // dependents silently), so the catalog is the guard.
89
90
  referenceCounted: {
90
91
  load: listComputedAttributeReferences,
91
92
  usageWarning: capabilityMessages.deleteUsageWarning,
@@ -8,7 +8,7 @@ import type { ICatalogItemComputedAttribute } from "../catalogItem/types.js";
8
8
  export type IComputedAttributeMutationPort = IAsCodeMutationPort<IComputedAttributeMetadataObjectDefinition, ICatalogItemComputedAttribute>;
9
9
  /** Fetches the full computed attribute for editing (the catalog item carries no MAQL). @internal */
10
10
  export declare function loadComputedAttribute(backend: IAnalyticalBackend, workspace: string, item: ICatalogItemComputedAttribute): Promise<IComputedAttributeMetadataObjectDefinition>;
11
- /** Titles of the insights and metrics referencing a computed attribute. @internal */
11
+ /** Titles of the insights, metrics, and dashboards referencing a computed attribute. @internal */
12
12
  export declare function listComputedAttributeReferences(backend: IAnalyticalBackend, workspace: string, item: ICatalogItemComputedAttribute): Promise<string[]>;
13
13
  /**
14
14
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"computedAttributeMutationPort.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeMutationPort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAEH,KAAK,0CAA0C,EAIlD,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,mBAAmB,CAC5D,0CAA0C,EAC1C,6BAA6B,CAChC,CAAC;AAYF,oGAAoG;AACpG,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GACpC,OAAO,CAAC,0CAA0C,CAAC,CAKrD;AAED,qFAAqF;AACrF,wBAAsB,+BAA+B,CACjD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAClD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,GAClB,8BAA8B,CAyBhC"}
1
+ {"version":3,"file":"computedAttributeMutationPort.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeMutationPort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAEH,KAAK,0CAA0C,EAIlD,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,mBAAmB,CAC5D,0CAA0C,EAC1C,6BAA6B,CAChC,CAAC;AAYF,oGAAoG;AACpG,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GACpC,OAAO,CAAC,0CAA0C,CAAC,CAKrD;AAED,kGAAkG;AAClG,wBAAsB,+BAA+B,CACjD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnB;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAClD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,GAClB,8BAA8B,CAyBhC"}
@@ -13,7 +13,7 @@ export function loadComputedAttribute(backend, workspace, item) {
13
13
  .computedAttributes()
14
14
  .getComputedAttribute(idRef(item.identifier, "computedAttribute"));
15
15
  }
16
- /** Titles of the insights and metrics referencing a computed attribute. @internal */
16
+ /** Titles of the insights, metrics, and dashboards referencing a computed attribute. @internal */
17
17
  export async function listComputedAttributeReferences(backend, workspace, item) {
18
18
  const referencing = await backend
19
19
  .workspace(workspace)
@@ -22,6 +22,7 @@ export async function listComputedAttributeReferences(backend, workspace, item)
22
22
  return [
23
23
  ...(referencing.insights ?? []).map((insight) => insightTitle(insight)),
24
24
  ...(referencing.measures ?? []).map((measure) => measure.title),
25
+ ...(referencing.analyticalDashboards ?? []).map((dashboard) => dashboard.title),
25
26
  ];
26
27
  }
27
28
  /**
@@ -4,12 +4,14 @@ import type { ComputedAttributeYaml } from "./computedAttributeConverter.js";
4
4
  *
5
5
  * The document is a flat, gap-free list of lines in the order the design prescribes: `id`, `type`,
6
6
  * `title`, `description`, then `maql` last, so the expression the author came to write sits at the
7
- * bottom with the room below it. The `id` line is omitted when the computed attribute has none so
8
- * the server derives one on create.
7
+ * bottom with the room below it. The `id` line is always rendered, empty when the computed attribute
8
+ * has none, so an author who wants to choose the identity has the key waiting; left blank it is
9
+ * dropped on validation and the server derives one on create.
9
10
  *
10
11
  * `description` is always rendered, empty as `""`, so the field an author is likely to fill is
11
- * offered rather than hidden. An empty `maql` renders as a bare `maql:` (see `nullStr`), an
12
- * invitation to type rather than a quoted blank to delete.
12
+ * offered rather than hidden. An empty `maql` renders as `maql: ` (a trailing space after the
13
+ * colon) so the next character the author types is a YAML scalar, not `maql:SELECT` which is
14
+ * a syntax error; an empty `id` renders the same way for the same reason.
13
15
  */
14
16
  export declare function serializeComputedAttributeToYaml(computedAttribute: ComputedAttributeYaml): string;
15
17
  //# sourceMappingURL=computedAttributeSerialization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"computedAttributeSerialization.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeSerialization.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;;;;;;;;;;GAWG;AACH,wBAAgB,gCAAgC,CAAC,iBAAiB,EAAE,qBAAqB,GAAG,MAAM,CAkBjG"}
1
+ {"version":3,"file":"computedAttributeSerialization.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeSerialization.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAAC,iBAAiB,EAAE,qBAAqB,GAAG,MAAM,CAkBjG"}
@@ -5,17 +5,17 @@ import { Document } from "yaml";
5
5
  *
6
6
  * The document is a flat, gap-free list of lines in the order the design prescribes: `id`, `type`,
7
7
  * `title`, `description`, then `maql` last, so the expression the author came to write sits at the
8
- * bottom with the room below it. The `id` line is omitted when the computed attribute has none so
9
- * the server derives one on create.
8
+ * bottom with the room below it. The `id` line is always rendered, empty when the computed attribute
9
+ * has none, so an author who wants to choose the identity has the key waiting; left blank it is
10
+ * dropped on validation and the server derives one on create.
10
11
  *
11
12
  * `description` is always rendered, empty as `""`, so the field an author is likely to fill is
12
- * offered rather than hidden. An empty `maql` renders as a bare `maql:` (see `nullStr`), an
13
- * invitation to type rather than a quoted blank to delete.
13
+ * offered rather than hidden. An empty `maql` renders as `maql: ` (a trailing space after the
14
+ * colon) so the next character the author types is a YAML scalar, not `maql:SELECT` which is
15
+ * a syntax error; an empty `id` renders the same way for the same reason.
14
16
  */
15
17
  export function serializeComputedAttributeToYaml(computedAttribute) {
16
- const doc = new Document(computedAttribute.id === undefined
17
- ? { type: "computed_attribute" }
18
- : { id: computedAttribute.id, type: "computed_attribute" });
18
+ const doc = new Document({ id: computedAttribute.id ?? null, type: "computed_attribute" });
19
19
  doc.add(doc.createPair("title", computedAttribute.title ?? ""));
20
20
  doc.add(doc.createPair("description", computedAttribute.description ?? ""));
21
21
  if (computedAttribute.tags && computedAttribute.tags.length > 0) {
@@ -25,5 +25,13 @@ export function serializeComputedAttributeToYaml(computedAttribute) {
25
25
  doc.add(doc.createPair("locale", computedAttribute.locale));
26
26
  }
27
27
  doc.add(doc.createPair("maql", computedAttribute.maql ? computedAttribute.maql : null));
28
- return doc.toString({ lineWidth: 0, nullStr: "" }).trimEnd();
28
+ // An unset field is a null pair (`nullStr: ""` → `maql:`). Keep one space after the colon so the
29
+ // next character typed is a YAML scalar (`maql: SELECT …`), not `maql:SELECT` which is a syntax
30
+ // error. Do not `trimEnd` — that would strip the space.
31
+ const yaml = doc.toString({ lineWidth: 0, nullStr: "" }).replace(/\n+$/, "");
32
+ return withBlankLineSpace(withBlankLineSpace(yaml, "id"), "maql");
33
+ }
34
+ /** Restores the space `nullStr: ""` leaves out after a blank key's colon, wherever the line sits. */
35
+ function withBlankLineSpace(yaml, key) {
36
+ return yaml.replace(new RegExp(`^${key}:$`, "m"), `${key}: `);
29
37
  }
@@ -6,7 +6,7 @@ export type ComputedAttributeValidationResult = {
6
6
  isValid: false;
7
7
  errorCode: ComputedAttributeValidationErrorCode;
8
8
  };
9
- export type ComputedAttributeValidationErrorCode = "empty" | "syntax" | "invalidStructure" | "idImmutable" | "missingMaql" | "invalidTags";
9
+ export type ComputedAttributeValidationErrorCode = "empty" | "syntax" | "invalidStructure" | "idImmutable" | "missingMaql" | "invalidType" | "invalidTags";
10
10
  type ValidateComputedAttributeYamlOptions = {
11
11
  fixedIdentifier?: string;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"computedAttributeValidation.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeValidation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAOtF,MAAM,MAAM,iCAAiC,GACvC;IACI,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,EAAE,0CAA0C,CAAC;CACjE,GACD;IACI,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,EAAE,oCAAoC,CAAC;CACnD,CAAC;AAER,MAAM,MAAM,oCAAoC,GAC1C,OAAO,GACP,QAAQ,GACR,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,aAAa,CAAC;AAEpB,KAAK,oCAAoC,GAAG;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oCAAyC,GACnD,iCAAiC,CAgBnC"}
1
+ {"version":3,"file":"computedAttributeValidation.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeValidation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAOtF,MAAM,MAAM,iCAAiC,GACvC;IACI,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,EAAE,0CAA0C,CAAC;CACjE,GACD;IACI,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,EAAE,oCAAoC,CAAC;CACnD,CAAC;AAER,MAAM,MAAM,oCAAoC,GAC1C,OAAO,GACP,QAAQ,GACR,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,CAAC;AAEpB,KAAK,oCAAoC,GAAG;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oCAAyC,GACnD,iCAAiC,CAgBnC"}
@@ -18,7 +18,7 @@ export function validateComputedAttributeYaml(value, options = {}) {
18
18
  };
19
19
  }
20
20
  function classifyComputedAttributeError(error, parsed) {
21
- // A blank `maql:` line parses to null - the seeded template's state - and counts as unwritten,
21
+ // A blank `maql:` / `maql: ` line parses to null - the seeded template's state - and counts as unwritten,
22
22
  // not as a value of the wrong type.
23
23
  const maqlProvided = typeof parsed === "object" &&
24
24
  parsed !== null &&
@@ -29,6 +29,11 @@ function classifyComputedAttributeError(error, parsed) {
29
29
  // A present-but-wrong-typed maql is a structural error, not a missing field.
30
30
  return maqlProvided ? "invalidStructure" : "missingMaql";
31
31
  }
32
+ // A mistyped `type` is easy to make and impossible to spot in a generic structure error,
33
+ // so it gets its own message naming the one value the field accepts.
34
+ if (path === "type") {
35
+ return "invalidType";
36
+ }
32
37
  if (path === "tags" || path.startsWith("tags.")) {
33
38
  return "invalidTags";
34
39
  }
@@ -17,6 +17,7 @@ export declare const de_DE: {
17
17
  "analyticsCatalog.objectType.fact.name": string;
18
18
  "analyticsCatalog.objectType.dateDataset.name": string;
19
19
  "analyticsCatalog.objectType.parameter.name": string;
20
+ "analyticsCatalog.objectType.computedAttribute.name": string;
20
21
  "analyticsCatalog.visualizationType.table.tooltip": string;
21
22
  "analyticsCatalog.visualizationType.area.tooltip": string;
22
23
  "analyticsCatalog.visualizationType.treemap.tooltip": string;
@@ -193,11 +194,30 @@ export declare const de_DE: {
193
194
  "analyticsCatalog.parameter.dialog.delete.submit": string;
194
195
  "analyticsCatalog.parameter.delete.success": string;
195
196
  "analyticsCatalog.parameter.delete.error": string;
197
+ "analyticsCatalog.computedAttribute.dialog.create.title": string;
198
+ "analyticsCatalog.computedAttribute.dialog.edit.title": string;
196
199
  "analyticsCatalog.computedAttribute.dialog.edit.duplicate": string;
200
+ "analyticsCatalog.computedAttribute.dialog.edit.idImmutable": string;
201
+ "analyticsCatalog.computedAttribute.dialog.sectionHeader": string;
202
+ "analyticsCatalog.computedAttribute.dialog.sectionHeader.tooltip": string;
203
+ "analyticsCatalog.computedAttribute.dialog.help": string;
204
+ "analyticsCatalog.computedAttribute.dialog.submit.error": string;
205
+ "analyticsCatalog.computedAttribute.validation.empty": string;
197
206
  "analyticsCatalog.computedAttribute.validation.syntax": string;
207
+ "analyticsCatalog.computedAttribute.validation.invalidStructure": string;
208
+ "analyticsCatalog.computedAttribute.validation.missingMaql": string;
198
209
  "analyticsCatalog.computedAttribute.validation.invalidTags": string;
210
+ "analyticsCatalog.computedAttribute.create.defaultTitle": string;
211
+ "analyticsCatalog.computedAttribute.create.success": string;
212
+ "analyticsCatalog.computedAttribute.update.success": string;
213
+ "analyticsCatalog.computedAttribute.load.error": string;
214
+ "analyticsCatalog.computedAttribute.dialog.delete.title": string;
199
215
  "analyticsCatalog.computedAttribute.dialog.delete.body": string;
216
+ "analyticsCatalog.computedAttribute.dialog.delete.usageWarning": string;
217
+ "analyticsCatalog.computedAttribute.dialog.delete.blocked": string;
200
218
  "analyticsCatalog.computedAttribute.dialog.delete.submit": string;
219
+ "analyticsCatalog.computedAttribute.delete.success": string;
220
+ "analyticsCatalog.computedAttribute.delete.error": string;
201
221
  "analyticsCatalog.metric.dialog.create.title": string;
202
222
  "analyticsCatalog.metric.dialog.edit.title": string;
203
223
  "analyticsCatalog.metric.dialog.sectionHeader": string;
@@ -1 +1 @@
1
- {"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/localization/bundles/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsQjB,CAAC"}
1
+ {"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/localization/bundles/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0RjB,CAAC"}
@@ -19,6 +19,7 @@ export const de_DE = {
19
19
  "analyticsCatalog.objectType.fact.name": "Fakt",
20
20
  "analyticsCatalog.objectType.dateDataset.name": "Datumsdatensatz",
21
21
  "analyticsCatalog.objectType.parameter.name": "Parameter",
22
+ "analyticsCatalog.objectType.computedAttribute.name": "Berechnetes Attribut",
22
23
  "analyticsCatalog.visualizationType.table.tooltip": "Tabelle",
23
24
  "analyticsCatalog.visualizationType.area.tooltip": "Flächendiagramm",
24
25
  "analyticsCatalog.visualizationType.treemap.tooltip": "Baumkarte-Diagramm",
@@ -195,11 +196,30 @@ export const de_DE = {
195
196
  "analyticsCatalog.parameter.dialog.delete.submit": "Löschen",
196
197
  "analyticsCatalog.parameter.delete.success": "Parameter gelöscht.",
197
198
  "analyticsCatalog.parameter.delete.error": "Parameter konnte nicht gelöscht werden.",
199
+ "analyticsCatalog.computedAttribute.dialog.create.title": "Berechnetes Attribut erstellen",
200
+ "analyticsCatalog.computedAttribute.dialog.edit.title": "Berechnetes Attribut bearbeiten",
198
201
  "analyticsCatalog.computedAttribute.dialog.edit.duplicate": "Als neu speichern",
202
+ "analyticsCatalog.computedAttribute.dialog.edit.idImmutable": "Die ID des berechneten Attributs kann beim Speichern eines vorhandenen berechneten Attributs nicht geändert werden. Verwenden Sie stattdessen „Als neu speichern“.",
203
+ "analyticsCatalog.computedAttribute.dialog.sectionHeader": "Definition des berechneten Attributs",
204
+ "analyticsCatalog.computedAttribute.dialog.sectionHeader.tooltip": "Schreiben Sie einen MAQL-Ausdruck, der jeder Zeile mithilfe von CASE-WHEN-Verzweigungen über eine Metrik oder einen Fakt einen Wert zuweist.",
205
+ "analyticsCatalog.computedAttribute.dialog.help": "Wie erstelle ich ein berechnetes Attribut?",
206
+ "analyticsCatalog.computedAttribute.dialog.submit.error": "Das berechnete Attribut konnte nicht gespeichert werden.",
207
+ "analyticsCatalog.computedAttribute.validation.empty": "Die Definition des berechneten Attributs darf nicht leer sein.",
199
208
  "analyticsCatalog.computedAttribute.validation.syntax": "YAML-Syntaxfehler",
209
+ "analyticsCatalog.computedAttribute.validation.invalidStructure": "Die Definition des berechneten Attributs hat eine ungültige Struktur.",
210
+ "analyticsCatalog.computedAttribute.validation.missingMaql": "Das berechnete Attribut muss einen MAQL-Ausdruck definieren.",
200
211
  "analyticsCatalog.computedAttribute.validation.invalidTags": "Tags müssen eine Liste von Textwerten sein.",
212
+ "analyticsCatalog.computedAttribute.create.defaultTitle": "Mein berechnetes Attribut",
213
+ "analyticsCatalog.computedAttribute.create.success": "Berechnetes Attribut erstellt.",
214
+ "analyticsCatalog.computedAttribute.update.success": "Berechnetes Attribut gespeichert.",
215
+ "analyticsCatalog.computedAttribute.load.error": "Das berechnete Attribut konnte nicht geladen werden.",
216
+ "analyticsCatalog.computedAttribute.dialog.delete.title": "Berechnetes Attribut löschen?",
201
217
  "analyticsCatalog.computedAttribute.dialog.delete.body": "Möchten Sie <b>{name}</b> wirklich löschen?",
218
+ "analyticsCatalog.computedAttribute.dialog.delete.usageWarning": "Dieses Attribut wird in <b>{count, plural, one {# Visualisierung} other {# Visualisierungen}}</b> verwendet",
219
+ "analyticsCatalog.computedAttribute.dialog.delete.blocked": "Das berechnete Attribut <b>{name}</b> kann nicht gelöscht werden, weil es in einigen Visualisierungen verwendet wird. Um dieses Attribut zu löschen, entfernen Sie es zuerst aus allen Visualisierungen.",
202
220
  "analyticsCatalog.computedAttribute.dialog.delete.submit": "Löschen",
221
+ "analyticsCatalog.computedAttribute.delete.success": "Berechnetes Attribut gelöscht.",
222
+ "analyticsCatalog.computedAttribute.delete.error": "Das berechnete Attribut konnte nicht gelöscht werden.",
203
223
  "analyticsCatalog.metric.dialog.create.title": "Metrik erstellen",
204
224
  "analyticsCatalog.metric.dialog.edit.title": "Metrik bearbeiten",
205
225
  "analyticsCatalog.metric.dialog.sectionHeader": "Metrikdefinition",
@@ -17,6 +17,7 @@ export declare const en_AU: {
17
17
  "analyticsCatalog.objectType.fact.name": string;
18
18
  "analyticsCatalog.objectType.dateDataset.name": string;
19
19
  "analyticsCatalog.objectType.parameter.name": string;
20
+ "analyticsCatalog.objectType.computedAttribute.name": string;
20
21
  "analyticsCatalog.visualizationType.table.tooltip": string;
21
22
  "analyticsCatalog.visualizationType.area.tooltip": string;
22
23
  "analyticsCatalog.visualizationType.treemap.tooltip": string;
@@ -193,11 +194,30 @@ export declare const en_AU: {
193
194
  "analyticsCatalog.parameter.dialog.delete.submit": string;
194
195
  "analyticsCatalog.parameter.delete.success": string;
195
196
  "analyticsCatalog.parameter.delete.error": string;
197
+ "analyticsCatalog.computedAttribute.dialog.create.title": string;
198
+ "analyticsCatalog.computedAttribute.dialog.edit.title": string;
196
199
  "analyticsCatalog.computedAttribute.dialog.edit.duplicate": string;
200
+ "analyticsCatalog.computedAttribute.dialog.edit.idImmutable": string;
201
+ "analyticsCatalog.computedAttribute.dialog.sectionHeader": string;
202
+ "analyticsCatalog.computedAttribute.dialog.sectionHeader.tooltip": string;
203
+ "analyticsCatalog.computedAttribute.dialog.help": string;
204
+ "analyticsCatalog.computedAttribute.dialog.submit.error": string;
205
+ "analyticsCatalog.computedAttribute.validation.empty": string;
197
206
  "analyticsCatalog.computedAttribute.validation.syntax": string;
207
+ "analyticsCatalog.computedAttribute.validation.invalidStructure": string;
208
+ "analyticsCatalog.computedAttribute.validation.missingMaql": string;
198
209
  "analyticsCatalog.computedAttribute.validation.invalidTags": string;
210
+ "analyticsCatalog.computedAttribute.create.defaultTitle": string;
211
+ "analyticsCatalog.computedAttribute.create.success": string;
212
+ "analyticsCatalog.computedAttribute.update.success": string;
213
+ "analyticsCatalog.computedAttribute.load.error": string;
214
+ "analyticsCatalog.computedAttribute.dialog.delete.title": string;
199
215
  "analyticsCatalog.computedAttribute.dialog.delete.body": string;
216
+ "analyticsCatalog.computedAttribute.dialog.delete.usageWarning": string;
217
+ "analyticsCatalog.computedAttribute.dialog.delete.blocked": string;
200
218
  "analyticsCatalog.computedAttribute.dialog.delete.submit": string;
219
+ "analyticsCatalog.computedAttribute.delete.success": string;
220
+ "analyticsCatalog.computedAttribute.delete.error": string;
201
221
  "analyticsCatalog.metric.dialog.create.title": string;
202
222
  "analyticsCatalog.metric.dialog.edit.title": string;
203
223
  "analyticsCatalog.metric.dialog.sectionHeader": string;