@gooddata/sdk-model 11.54.0-alpha.5 → 11.54.0-alpha.7

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 (77) hide show
  1. package/esm/dashboard/alerts.test.helpers.d.ts +5 -0
  2. package/esm/dashboard/alerts.test.helpers.d.ts.map +1 -0
  3. package/esm/dashboard/alerts.test.helpers.js +37 -0
  4. package/esm/dashboard/dashboard.d.ts +6 -0
  5. package/esm/dashboard/dashboard.d.ts.map +1 -1
  6. package/esm/dashboard/dashboard.js +21 -2
  7. package/esm/dashboard/drills.test.helpers.d.ts +7 -0
  8. package/esm/dashboard/drills.test.helpers.d.ts.map +1 -0
  9. package/esm/dashboard/drills.test.helpers.js +50 -0
  10. package/esm/dashboard/filterContext.test.helpers.d.ts +9 -0
  11. package/esm/dashboard/filterContext.test.helpers.d.ts.map +1 -0
  12. package/esm/dashboard/filterContext.test.helpers.js +42 -0
  13. package/esm/dashboard/kpi.test.helpers.d.ts +4 -0
  14. package/esm/dashboard/kpi.test.helpers.d.ts.map +1 -0
  15. package/esm/dashboard/kpi.test.helpers.js +11 -0
  16. package/esm/dashboard/parameter.test.helpers.d.ts +5 -0
  17. package/esm/dashboard/parameter.test.helpers.d.ts.map +1 -0
  18. package/esm/dashboard/parameter.test.helpers.js +20 -0
  19. package/esm/dashboard/widgets.test.helpers.d.ts +4 -0
  20. package/esm/dashboard/widgets.test.helpers.d.ts.map +1 -0
  21. package/esm/dashboard/widgets.test.helpers.js +16 -0
  22. package/esm/dateFilterConfig/index.d.ts +12 -0
  23. package/esm/dateFilterConfig/index.d.ts.map +1 -1
  24. package/esm/dateFilterConfig/index.js +11 -0
  25. package/esm/dateFilterConfig/typeGuards.test.helpers.d.ts +9 -0
  26. package/esm/dateFilterConfig/typeGuards.test.helpers.d.ts.map +1 -0
  27. package/esm/dateFilterConfig/typeGuards.test.helpers.js +56 -0
  28. package/esm/exports/csvDelimiter.d.ts +15 -7
  29. package/esm/exports/csvDelimiter.d.ts.map +1 -1
  30. package/esm/exports/csvDelimiter.js +12 -6
  31. package/esm/index.d.ts +11 -1
  32. package/esm/index.d.ts.map +1 -1
  33. package/esm/index.js +11 -1
  34. package/esm/ldm/catalog/computedAttribute/index.d.ts +38 -0
  35. package/esm/ldm/catalog/computedAttribute/index.d.ts.map +1 -0
  36. package/esm/ldm/catalog/computedAttribute/index.js +10 -0
  37. package/esm/ldm/catalog/index.d.ts +4 -3
  38. package/esm/ldm/catalog/index.d.ts.map +1 -1
  39. package/esm/ldm/catalog/index.js +4 -0
  40. package/esm/ldm/catalog/types.d.ts +3 -2
  41. package/esm/ldm/catalog/types.d.ts.map +1 -1
  42. package/esm/ldm/catalog/types.js +1 -1
  43. package/esm/ldm/metadata/computedAttribute/index.d.ts +102 -0
  44. package/esm/ldm/metadata/computedAttribute/index.d.ts.map +1 -0
  45. package/esm/ldm/metadata/computedAttribute/index.js +21 -0
  46. package/esm/ldm/metadata/index.d.ts +2 -1
  47. package/esm/ldm/metadata/index.d.ts.map +1 -1
  48. package/esm/objRef/index.d.ts +1 -1
  49. package/esm/objRef/index.d.ts.map +1 -1
  50. package/esm/reports/builtinPageLayouts.d.ts +27 -0
  51. package/esm/reports/builtinPageLayouts.d.ts.map +1 -0
  52. package/esm/reports/builtinPageLayouts.js +196 -0
  53. package/esm/reports/content.d.ts +54 -0
  54. package/esm/reports/content.d.ts.map +1 -0
  55. package/esm/reports/content.js +12 -0
  56. package/esm/reports/factory.d.ts +65 -0
  57. package/esm/reports/factory.d.ts.map +1 -0
  58. package/esm/reports/factory.js +126 -0
  59. package/esm/reports/layout.d.ts +59 -0
  60. package/esm/reports/layout.d.ts.map +1 -0
  61. package/esm/reports/layout.js +18 -0
  62. package/esm/reports/pageLayout.d.ts +120 -0
  63. package/esm/reports/pageLayout.d.ts.map +1 -0
  64. package/esm/reports/pageLayout.js +83 -0
  65. package/esm/reports/report.d.ts +116 -0
  66. package/esm/reports/report.d.ts.map +1 -0
  67. package/esm/reports/report.js +35 -0
  68. package/esm/reports/slot.d.ts +213 -0
  69. package/esm/reports/slot.d.ts.map +1 -0
  70. package/esm/reports/slot.js +40 -0
  71. package/esm/reports/variables.d.ts +62 -0
  72. package/esm/reports/variables.d.ts.map +1 -0
  73. package/esm/reports/variables.js +41 -0
  74. package/esm/sdk-model.d.ts +1026 -104
  75. package/esm/settings/settings.d.ts +8 -0
  76. package/esm/settings/settings.d.ts.map +1 -1
  77. package/package.json +6 -6
@@ -949,6 +949,42 @@ export declare function bucketsTotals(buckets: IBucket[]): ITotal[];
949
949
  */
950
950
  export declare function bucketTotals(bucket: IBucket): ITotal[];
951
951
 
952
+ /**
953
+ * Built-in cover page: report title and subtitle.
954
+ *
955
+ * @alpha
956
+ */
957
+ export declare const BuiltInReportPageLayoutCover: IReportPageLayout;
958
+
959
+ /**
960
+ * All built-in report pages served by the SPI. Built-ins are read-only: they cannot be
961
+ * edited or deleted, and they are never persisted on the backend.
962
+ *
963
+ * @alpha
964
+ */
965
+ export declare const BuiltInReportPageLayouts: readonly IReportPageLayout[];
966
+
967
+ /**
968
+ * Built-in section divider page.
969
+ *
970
+ * @alpha
971
+ */
972
+ export declare const BuiltInReportPageLayoutSection: IReportPageLayout;
973
+
974
+ /**
975
+ * Built-in content page with six visualizations and a text column on the left.
976
+ *
977
+ * @alpha
978
+ */
979
+ export declare const BuiltInReportPageLayoutViz6TextLeft: IReportPageLayout;
980
+
981
+ /**
982
+ * List of built-in report slot type names.
983
+ *
984
+ * @alpha
985
+ */
986
+ export declare const BuiltInReportSlotTypes: string[];
987
+
952
988
  /**
953
989
  * List of built-in widget types. These type names are reserved and must not be used by custom widgets.
954
990
  *
@@ -990,11 +1026,11 @@ export declare type CalendarContext = {
990
1026
  export declare type CalendarType = "STANDARD" | "FISCAL";
991
1027
 
992
1028
  /**
993
- * Type representing catalog item - attribute, measure, fact or dateDataset
1029
+ * Type representing catalog item - attribute, measure, fact, dateDataset or computedAttribute
994
1030
  *
995
1031
  * @public
996
1032
  */
997
- export declare type CatalogItem = ICatalogAttribute | ICatalogMeasure | ICatalogFact | ICatalogDateDataset | ICatalogAttributeHierarchy;
1033
+ export declare type CatalogItem = ICatalogAttribute | ICatalogMeasure | ICatalogFact | ICatalogDateDataset | ICatalogAttributeHierarchy | ICatalogComputedAttribute;
998
1034
 
999
1035
  /**
1000
1036
  * Get metadata object that catalog item represents
@@ -1006,11 +1042,12 @@ export declare type CatalogItem = ICatalogAttribute | ICatalogMeasure | ICatalog
1006
1042
  export declare const catalogItemMetadataObject: (catalogItem: CatalogItem) => MetadataObject;
1007
1043
 
1008
1044
  /**
1009
- * Type representing catalog item type - attribute, measure, fact, dateDataset or attributeHierarchy
1045
+ * Type representing catalog item type - attribute, measure, fact, dateDataset, attributeHierarchy
1046
+ * or computedAttribute
1010
1047
  *
1011
1048
  * @public
1012
1049
  */
1013
- export declare type CatalogItemType = "attribute" | "measure" | "fact" | "dateDataset" | "attributeHierarchy";
1050
+ export declare type CatalogItemType = "attribute" | "measure" | "fact" | "dateDataset" | "attributeHierarchy" | "computedAttribute";
1014
1051
 
1015
1052
  /**
1016
1053
  * Certification status.
@@ -1049,6 +1086,13 @@ export declare type ComparatorDirection = "asc" | "desc";
1049
1086
  */
1050
1087
  export declare type ComparisonConditionOperator = "GREATER_THAN" | "GREATER_THAN_OR_EQUAL_TO" | "LESS_THAN" | "LESS_THAN_OR_EQUAL_TO" | "EQUAL_TO" | "NOT_EQUAL_TO";
1051
1088
 
1089
+ /**
1090
+ * Data type of the computed attribute values.
1091
+ *
1092
+ * @public
1093
+ */
1094
+ export declare type ComputedAttributeDataType = "INT" | "STRING" | "DATE" | "NUMERIC" | "TIMESTAMP" | "TIMESTAMP_TZ" | "BOOLEAN" | "HLL";
1095
+
1052
1096
  /**
1053
1097
  * Defines possible compute ratio sanitization rules.
1054
1098
  *
@@ -1217,11 +1261,16 @@ export declare const CSV_DELIMITER_PRESETS: {
1217
1261
  };
1218
1262
 
1219
1263
  /**
1220
- * Identifier of a CSV delimiter preset, or "custom" when the user provides their own character.
1264
+ * Identifier of a CSV delimiter preset, "custom" when the user provides their own character,
1265
+ * or "inherit" when no delimiter should be sent and the backend-resolved default should apply.
1266
+ *
1267
+ * @remarks
1268
+ * "custom" and "inherit" are sentinels with no delimiter character of their own; only
1269
+ * {@link CsvDelimiterPresetId} members are valid keys into {@link CSV_DELIMITER_PRESETS}.
1221
1270
  *
1222
1271
  * @alpha
1223
1272
  */
1224
- export declare type CsvDelimiterPreset = CsvDelimiterPresetId | "custom";
1273
+ export declare type CsvDelimiterPreset = CsvDelimiterPresetId | "custom" | "inherit";
1225
1274
 
1226
1275
  /**
1227
1276
  * Identifier of a built-in CSV delimiter preset.
@@ -1572,6 +1621,12 @@ export declare const DateGranularity: {
1572
1621
  */
1573
1622
  export declare type DateString = string;
1574
1623
 
1624
+ /**
1625
+ * Standard-calendar granularities that an absolute (static) date filter can be configured with.
1626
+ * @alpha
1627
+ */
1628
+ export declare const DEFAULT_ABSOLUTE_DATE_FILTER_GRANULARITIES: DateFilterGranularity[];
1629
+
1575
1630
  /**
1576
1631
  * The default CSV delimiter character (comma).
1577
1632
  *
@@ -2408,10 +2463,10 @@ export declare const getChronologicalOrigin: (g: string | undefined) => DateAttr
2408
2463
  * Resolves a delimiter character to its corresponding preset identifier.
2409
2464
  *
2410
2465
  * Returns `"custom"` when the delimiter does not match any built-in preset,
2411
- * or the default preset id (`"comma"`) when no delimiter is provided.
2466
+ * or `"inherit"` when the delimiter is `undefined` or an empty string.
2412
2467
  *
2413
- * @param delimiter - delimiter character to look up
2414
- * @returns the matching preset id, `"custom"`, or the default
2468
+ * @param delimiter - delimiter character to look up; `undefined` or empty resolves to `"inherit"`
2469
+ * @returns the matching preset id, `"custom"`, or `"inherit"`
2415
2470
  * @alpha
2416
2471
  */
2417
2472
  export declare function getCsvDelimiterPreset(delimiter?: string): CsvDelimiterPreset;
@@ -2443,13 +2498,16 @@ export declare function getCsvDelimiterValidationError(delimiter: string): CsvDe
2443
2498
  * Returns the actual delimiter character for a given preset selection.
2444
2499
  *
2445
2500
  * When the preset is `"custom"`, the provided custom delimiter string is returned as-is.
2501
+ * When the preset is `"inherit"`, `undefined` is returned so the `delimiter` field is omitted
2502
+ * from the saved settings, letting the backend-resolved default (workspace or organization
2503
+ * setting) apply instead.
2446
2504
  *
2447
2505
  * @param selectedPreset - the selected preset identifier
2448
2506
  * @param customDelimiter - the user-provided custom delimiter (used only when preset is `"custom"`)
2449
- * @returns the resolved delimiter character
2507
+ * @returns the resolved delimiter character, or `undefined` when the preset is `"inherit"`
2450
2508
  * @alpha
2451
2509
  */
2452
- export declare function getCsvDelimiterValue(selectedPreset: CsvDelimiterPreset, customDelimiter: string): string;
2510
+ export declare function getCsvDelimiterValue(selectedPreset: CsvDelimiterPreset, customDelimiter: string): string | undefined;
2453
2511
 
2454
2512
  /**
2455
2513
  * Runs {@link getGranularities} and narrows the result to the {@link DateFilterGranularity} subset.
@@ -2535,6 +2593,13 @@ export declare function getParameterAllowedValueTitle(allowedValue: IParameterAl
2535
2593
  */
2536
2594
  export declare function getParameterValueTitle(definition: IParameterDefinition, value: ParameterValue): string;
2537
2595
 
2596
+ /**
2597
+ * Collects the distinct `{{variable}}` names referenced in the text, in order of first occurrence.
2598
+ *
2599
+ * @alpha
2600
+ */
2601
+ export declare function getReportTextPlaceholders(text: string): string[];
2602
+
2538
2603
  /**
2539
2604
  * Returns count of selected elements
2540
2605
  * @alpha
@@ -2571,7 +2636,7 @@ export declare type GranularityFamily = "chronological" | "generic";
2571
2636
  *
2572
2637
  * @public
2573
2638
  */
2574
- export declare type GroupableCatalogItem = ICatalogAttribute | ICatalogMeasure | ICatalogFact;
2639
+ export declare type GroupableCatalogItem = ICatalogAttribute | ICatalogMeasure | ICatalogFact | ICatalogComputedAttribute;
2575
2640
 
2576
2641
  /**
2577
2642
  * @public
@@ -2628,6 +2693,13 @@ export declare interface IAbsoluteDateFilterForm extends IDateFilterOption {
2628
2693
  * Type to identify the global absolute date filter
2629
2694
  */
2630
2695
  type: DateFilterOptionAbsoluteFormType;
2696
+ /**
2697
+ * Available granularities for the global absolute date filter.
2698
+ *
2699
+ * @remarks
2700
+ * When not set, the absolute date filter behaves exactly as it does today: day-level selection only.
2701
+ */
2702
+ availableGranularities?: DateFilterGranularity[];
2631
2703
  /**
2632
2704
  * Optional configuration for how this option should treat empty date values.
2633
2705
  */
@@ -4330,6 +4402,35 @@ export declare interface ICatalogAttributeHierarchy {
4330
4402
  attributeHierarchy: IAttributeHierarchyMetadataObject;
4331
4403
  }
4332
4404
 
4405
+ /**
4406
+ * Type representing catalog computed attribute.
4407
+ *
4408
+ * @remarks
4409
+ * Shaped after {@link ICatalogAttribute} so it can be listed and dragged among
4410
+ * normal attributes; `defaultDisplayForm` is the fabricated display form of the
4411
+ * computed attribute (see {@link IComputedAttributeMetadataObject}).
4412
+ *
4413
+ * @public
4414
+ */
4415
+ export declare interface ICatalogComputedAttribute extends IGroupableCatalogItemBase {
4416
+ /**
4417
+ * Catalog item type
4418
+ */
4419
+ type: "computedAttribute";
4420
+ /**
4421
+ * Computed attribute metadata object that this catalog item represents
4422
+ */
4423
+ computedAttribute: IComputedAttributeMetadataObject;
4424
+ /**
4425
+ * Default (and only) display form of the computed attribute
4426
+ */
4427
+ defaultDisplayForm: IAttributeDisplayFormMetadataObject;
4428
+ /**
4429
+ * Display forms of the computed attribute
4430
+ */
4431
+ displayForms: IAttributeDisplayFormMetadataObject[];
4432
+ }
4433
+
4333
4434
  /**
4334
4435
  * Type representing catalog dateDataset date attribute
4335
4436
  *
@@ -4557,6 +4658,85 @@ export declare interface IComparisonConditionBody {
4557
4658
  treatNullValuesAs?: number;
4558
4659
  }
4559
4660
 
4661
+ /**
4662
+ * Computed attribute metadata object.
4663
+ *
4664
+ * @remarks
4665
+ * A computed attribute is an attribute whose values are computed by a MAQL expression
4666
+ * instead of being backed by a data source column. It is deliberately shaped as close
4667
+ * to {@link IAttributeMetadataObject} as possible so that UI treats it like a normal
4668
+ * attribute wherever it appears (buckets, catalog, ...).
4669
+ *
4670
+ * @public
4671
+ */
4672
+ export declare type IComputedAttributeMetadataObject = IMetadataObject & IComputedAttributeMetadataObjectBase & IAuditable & {
4673
+ /**
4674
+ * Display forms of the computed attribute.
4675
+ *
4676
+ * @remarks
4677
+ * A computed attribute has no real labels on the backend. To mimic the structure of
4678
+ * a normal attribute, the backend implementation fabricates exactly one display form
4679
+ * (isDefault and isPrimary, attribute ref pointing to this computed attribute).
4680
+ */
4681
+ displayForms: IAttributeDisplayFormMetadataObject[];
4682
+ /**
4683
+ * Whether the computed attribute is locked for editing (e.g. inherited from a parent workspace).
4684
+ */
4685
+ isLocked?: boolean;
4686
+ /**
4687
+ * Dataset the computed attribute belongs to (if supplied by backend include).
4688
+ */
4689
+ dataSet?: IDataSetMetadataObject;
4690
+ /**
4691
+ * Certification metadata.
4692
+ * @internal
4693
+ */
4694
+ certification?: IObjectCertification;
4695
+ };
4696
+
4697
+ /**
4698
+ * @public
4699
+ */
4700
+ export declare interface IComputedAttributeMetadataObjectBase {
4701
+ type: "computedAttribute";
4702
+ /**
4703
+ * MAQL expression computing the attribute values.
4704
+ */
4705
+ expression: string;
4706
+ /**
4707
+ * Formatting of the computed values.
4708
+ * If empty, a backend implementation-dependent default is used.
4709
+ */
4710
+ format?: string;
4711
+ /**
4712
+ * Categorizes the semantics of the computed values (e.g., currency).
4713
+ */
4714
+ metricType?: MetricType;
4715
+ /**
4716
+ * Data type of the computed values.
4717
+ */
4718
+ dataType?: ComputedAttributeDataType;
4719
+ /**
4720
+ * Whether the computed values may contain nulls.
4721
+ */
4722
+ isNullable?: boolean;
4723
+ /**
4724
+ * Value used in place of null computed values.
4725
+ */
4726
+ nullValue?: string;
4727
+ /**
4728
+ * Locale whose collation order the computed values are sorted by.
4729
+ */
4730
+ locale?: string;
4731
+ }
4732
+
4733
+ /**
4734
+ * Computed attribute metadata object definition (not yet persisted).
4735
+ *
4736
+ * @public
4737
+ */
4738
+ export declare type IComputedAttributeMetadataObjectDefinition = IMetadataObjectDefinition & IComputedAttributeMetadataObjectBase;
4739
+
4560
4740
  /**
4561
4741
  * Conditional-formatting settings: an on/off toggle plus the ordered list of rules. Stored on the
4562
4742
  * table config and (when persisted) on the insight's `properties.controls.conditionalFormatting`.
@@ -7742,6 +7922,14 @@ export declare interface IFeatureFlags {
7742
7922
  * Enable granularity selection for the absolute (static) date filter.
7743
7923
  */
7744
7924
  enableAbsoluteDateFilterGranularity?: boolean;
7925
+ /**
7926
+ * Enable computed attributes.
7927
+ */
7928
+ enableComputedAttributes?: boolean;
7929
+ /**
7930
+ * Enable the Business Briefing reports application.
7931
+ */
7932
+ enableBusinessBriefingReportsApp?: boolean;
7745
7933
  }
7746
7934
 
7747
7935
  /**
@@ -11750,144 +11938,591 @@ export declare interface IRemotePluggableApplicationsRegistryV1 {
11750
11938
  }
11751
11939
 
11752
11940
  /**
11753
- * Attribute header specifies name and URI of the attribute element to which the calculated measure
11754
- * values in the particular data view slice belong.
11941
+ * Report metadata object.
11755
11942
  *
11756
- * @public
11943
+ * @alpha
11757
11944
  */
11758
- export declare interface IResultAttributeHeader {
11759
- attributeHeaderItem: IResultAttributeHeaderItem;
11945
+ export declare interface IReport extends IReportDefinition, IAuditableDates, IAuditableUsers {
11946
+ ref: ObjRef;
11947
+ /**
11948
+ * When true, the object comes from a parent workspace and is not editable
11949
+ * in the current workspace.
11950
+ */
11951
+ isLocked?: boolean;
11760
11952
  }
11761
11953
 
11762
11954
  /**
11763
- * Attribute header item specifies name and URI of the attribute element to which the calculated measure
11764
- * values in the particular data view slice belong.
11955
+ * Text generated by AI at report-build time.
11765
11956
  *
11766
- * @public
11957
+ * @alpha
11767
11958
  */
11768
- export declare interface IResultAttributeHeaderItem {
11959
+ export declare interface IReportAiTextSource {
11960
+ type: "ai";
11769
11961
  /**
11770
- * Human readable name of the attribute element.
11771
- *
11772
- * @remarks
11962
+ * Instruction for the generator. Supports `{{variables}}`.
11773
11963
  */
11774
- name: string | null;
11964
+ prompt: string;
11775
11965
  /**
11776
- * URI of the attribute element.
11777
- *
11778
- * @remarks
11779
- * This is essentially a primary key of the attribute element. It can
11780
- * be used in places where attribute elements have to be exactly specified - such as positive or
11781
- * negative attribute filters.
11782
- *
11783
- * It is up to the backend implementation whether the URI is transferable across workspaces or not in the
11784
- * data distribution scenarios. In other words, if a data for one attribute (say Product) is distributed
11785
- * into multiple workspaces, it is up to the backend whether the URIs of the elements will be same across
11786
- * all workspaces or not.
11787
- *
11788
- * Recommendation for the consumers: URI is safe to use if you obtain in programmatically from this header
11789
- * and then use it in the same workspace for instance for filtering. It is not safe to hardcode URIs
11790
- * and use them in a solution which should operate on top of different workspaces.
11791
- *
11792
- * Note that this can actually be null on some backends if your data contains NULL values.
11793
- * We will change the type of this to string | null in the next major (since it is a breaking change),
11794
- * but for now, if you expect NULLs in your data, treat this as string | null already.
11966
+ * Materialized generation result (markdown), stored so the report renders
11967
+ * deterministically without re-invoking AI. Absent until first generation.
11795
11968
  */
11796
- uri: string;
11969
+ content?: string;
11797
11970
  /**
11798
- * Formatted name of attribute element.
11799
- *
11800
- * @remarks
11801
- * This property holds the formatted form of name property in case of date attributes. When using attribute
11802
- * elements in visualisations, formatted name should have precedence over original name to show a more
11803
- * readable form of dates. In other cases, such as drilling, original name property must be used to avoid
11804
- * inconsistencies.
11971
+ * ISO 8601 timestamp of the stored generation.
11805
11972
  */
11806
- formattedName?: string;
11973
+ generatedAt?: string;
11974
+ }
11975
+
11976
+ /**
11977
+ * Fields shared by report definitions and persisted reports.
11978
+ *
11979
+ * @alpha
11980
+ */
11981
+ export declare interface IReportBase {
11982
+ title: string;
11983
+ description?: string;
11984
+ tags?: string[];
11807
11985
  /**
11808
- * Normalized value of attribute element.
11986
+ * Reported period start, ISO 8601 date (YYYY-MM-DD), inclusive.
11809
11987
  *
11810
11988
  * @remarks
11811
- * This property holds the normalized form of value property in case of attributes if its differ from
11812
- * name property. Its used by date attributes for example when normalized value can hold ISO string of date.
11813
- * Its related to type of attribute and can differ for different implementations.
11989
+ * At execution time the period materializes as an absolute date filter on each
11990
+ * visualization slot's dateDataSet (lowest precedence, per-slot opt-out via
11991
+ * ignoreReportPeriod). Also available as `{{periodStart}}` in text.
11814
11992
  */
11815
- normalizedValue?: string;
11993
+ periodStart: ReportDateString;
11994
+ /**
11995
+ * Reported period end, ISO 8601 date (YYYY-MM-DD), inclusive.
11996
+ */
11997
+ periodEnd: ReportDateString;
11998
+ /**
11999
+ * Content of the report. When created from a template the content is deep-copied
12000
+ * and NO reference to the template is kept — the report stays frozen while pages
12001
+ * and templates evolve.
12002
+ */
12003
+ content: IReportContent;
12004
+ /**
12005
+ * Values for variables declared in content.variables, keyed by variable name.
12006
+ */
12007
+ variableValues?: Record<string, string>;
11816
12008
  }
11817
12009
 
11818
12010
  /**
11819
- * Result headers provide metadata about data included in the data view.
11820
- *
11821
- * @remarks
11822
- * They are integral part of the data view and are organized in per-dimension and per-dimension-item arrays.
11823
- *
11824
- * @remarks see {@link @gooddata/sdk-backend-spi#IDataView} for further detail on the organization.
12011
+ * Versioned content shared verbatim by report templates and reports.
11825
12012
  *
11826
- * @public
12013
+ * @alpha
11827
12014
  */
11828
- export declare type IResultHeader = IResultAttributeHeader | IResultMeasureHeader | IResultTotalHeader;
12015
+ export declare interface IReportContent {
12016
+ /**
12017
+ * Content model version, for stored-content evolution.
12018
+ */
12019
+ version: "1";
12020
+ /**
12021
+ * Ordered pages of the document.
12022
+ */
12023
+ pages: IReportContentPage[];
12024
+ /**
12025
+ * Content-level default filters; pages and slots may extend or override them.
12026
+ * The report period is NOT stored here — it is derived from periodStart/periodEnd
12027
+ * at execution time.
12028
+ */
12029
+ filters?: FilterContextItem[];
12030
+ /**
12031
+ * Custom variable declarations. Values live on the report
12032
+ * ({@link IReportBase.variableValues}).
12033
+ */
12034
+ variables?: IReportVariableDefinition[];
12035
+ }
11829
12036
 
11830
12037
  /**
11831
- * Measure header specifies name of the measure to which the calculated values in the particular data view slice belong.
12038
+ * Page instance embedded in template/report content: a deep clone of a page body
12039
+ * plus its own identity.
11832
12040
  *
11833
12041
  * @remarks
11834
- * Measure header also specifies 'order' - this is essentially an index into measure group descriptor's item array; it
11835
- * can be used to obtain further information about the measure.
12042
+ * Cloning a {@link IReportPageLayout} into content assigns the localIdentifier and regenerates
12043
+ * slot localIdentifiers (with the layout slotIds) so repeated use of one page stays unique.
12044
+ * Deliberately carries NO reference back to the source page — later page edits never
12045
+ * affect existing templates or reports.
11836
12046
  *
11837
- * @public
12047
+ * @alpha
11838
12048
  */
11839
- export declare interface IResultMeasureHeader {
11840
- measureHeaderItem: IResultMeasureHeaderItem;
12049
+ export declare interface IReportContentPage extends IReportPageBody {
12050
+ /**
12051
+ * Identifier unique within the content; stable across template-to-report copy and reordering.
12052
+ */
12053
+ localIdentifier: string;
11841
12054
  }
11842
12055
 
11843
12056
  /**
11844
- * Measure header specifies name of the measure to which the calculated values in the particular data view slice belong.
11845
- *
11846
- * @remarks
11847
- * Measure header also specifies 'order' - this is essentially an index into measure group descriptor's item array; it
11848
- * can be used to obtain further information about the measure.
12057
+ * Payload for creating or updating a report.
11849
12058
  *
11850
- * @public
12059
+ * @alpha
11851
12060
  */
11852
- export declare interface IResultMeasureHeaderItem {
12061
+ export declare interface IReportDefinition extends IReportBase {
12062
+ type: "report";
11853
12063
  /**
11854
- * Measure name - equals to the measure name contained in the respective measure descriptor, included here
11855
- * for convenience and easy access.
11856
- *
11857
- * Note: check out the contract for measure name as described in {@link IMeasureDescriptor} - it is
11858
- * somewhat more convoluted than one would expect.
11859
- */
11860
- name: string;
11861
- /**
11862
- * Index of this measure's descriptor within the measure group description. The measure group descriptor
11863
- * is included in the execution result.
12064
+ * Present when updating an existing report.
11864
12065
  */
11865
- order: number;
12066
+ ref?: ObjRef;
11866
12067
  }
11867
12068
 
11868
12069
  /**
11869
- * Total header specifies name and type of total to which the calculated values in particular data view slice belong.
12070
+ * Slot rendering an image.
11870
12071
  *
11871
- * @public
12072
+ * @alpha
11872
12073
  */
11873
- export declare interface IResultTotalHeader {
11874
- totalHeaderItem: IResultTotalHeaderItem;
12074
+ export declare interface IReportImageSlot extends IReportSlotBase {
12075
+ type: "image";
12076
+ /**
12077
+ * Undefined = declared-but-empty slot.
12078
+ */
12079
+ source?: ReportImageSource;
12080
+ altText?: string;
12081
+ /**
12082
+ * How the image fills the slot area. Defaults to "contain".
12083
+ */
12084
+ fit?: "contain" | "cover" | "fill";
11875
12085
  }
11876
12086
 
11877
12087
  /**
11878
- * Total header specifies name and type of total to which the calculated values in particular data view slice belong.
11879
- * Also can contain measure index which can be used to lookup the measure which belongs to this total.
12088
+ * Fields common to all report layout nodes.
11880
12089
  *
11881
- * @public
12090
+ * @alpha
11882
12091
  */
11883
- export declare interface IResultTotalHeaderItem {
11884
- name: string;
11885
- type: string;
11886
- measureIndex?: number;
12092
+ export declare interface IReportLayoutNodeBase {
12093
+ /**
12094
+ * Fractional weight of this node inside its parent (flex-grow semantics).
12095
+ * Defaults to 1. Example: sibling weights [2, 1] render a 2/3 + 1/3 split.
12096
+ */
12097
+ weight?: number;
11887
12098
  }
11888
12099
 
11889
12100
  /**
11890
- * Represents an execution result warning.
12101
+ * A container splitting its area into children laid out along a direction.
12102
+ *
12103
+ * @alpha
12104
+ */
12105
+ export declare interface IReportLayoutSection extends IReportLayoutNodeBase {
12106
+ type: "section";
12107
+ /**
12108
+ * "row" lays children out horizontally, "column" vertically.
12109
+ */
12110
+ direction: "row" | "column";
12111
+ children: ReportPageLayoutNode[];
12112
+ }
12113
+
12114
+ /**
12115
+ * A leaf assigning its area to a slot. The slot fills the area completely.
12116
+ *
12117
+ * @alpha
12118
+ */
12119
+ export declare interface IReportLayoutSlotRef extends IReportLayoutNodeBase {
12120
+ type: "slotRef";
12121
+ /**
12122
+ * Local identifier of a slot in {@link IReportPageBody.slots}.
12123
+ * A slotId with no matching slot renders as an empty area.
12124
+ */
12125
+ slotId: string;
12126
+ }
12127
+
12128
+ /**
12129
+ * Body of a report page: geometry (flex split tree) plus the slots it places.
12130
+ *
12131
+ * @remarks
12132
+ * This is both the content of the standalone {@link IReportPageLayout} object and the shape
12133
+ * embedded in template/report content ({@link IReportContentPage}).
12134
+ *
12135
+ * There is no header/footer chrome: page title, description, footer, page numbers and
12136
+ * logos are ordinary slots in the layout tree (text slots with `{{pageNumber}}`/`{{totalPages}}`,
12137
+ * an image slot with `{{logo}}`). Every slot fills its layout area completely.
12138
+ *
12139
+ * @alpha
12140
+ */
12141
+ export declare interface IReportPageBody {
12142
+ /**
12143
+ * Editor hint only (template galleries, default styling, AI context).
12144
+ * Renderers must not branch layout logic on it — geometry always comes from `layout`.
12145
+ */
12146
+ kind?: "cover" | "section" | "content";
12147
+ /**
12148
+ * Root of the page layout tree.
12149
+ */
12150
+ layout: ReportPageLayoutNode;
12151
+ /**
12152
+ * All slots referenced by the layout, flat, keyed by localIdentifier.
12153
+ */
12154
+ slots: ReportSlot[];
12155
+ /**
12156
+ * Page-level filters: merged over content-level filters (a filter targeting the
12157
+ * same object replaces the inherited one); slot filters apply on top.
12158
+ */
12159
+ filters?: FilterContextItem[];
12160
+ }
12161
+
12162
+ /**
12163
+ * Validation issue found in a report page body.
12164
+ *
12165
+ * @alpha
12166
+ */
12167
+ export declare interface IReportPageBodyValidationIssue {
12168
+ severity: "error" | "warning";
12169
+ message: string;
12170
+ }
12171
+
12172
+ /**
12173
+ * Reusable report page metadata object.
12174
+ *
12175
+ * @alpha
12176
+ */
12177
+ export declare interface IReportPageLayout extends IReportPageLayoutDefinition, IAuditableDates, IAuditableUsers {
12178
+ ref: ObjRef;
12179
+ /**
12180
+ * When true, the object comes from a parent workspace and is not editable
12181
+ * in the current workspace.
12182
+ */
12183
+ isLocked?: boolean;
12184
+ /**
12185
+ * Predefined page shipped with the product, populated by the SPI. Never sent to or
12186
+ * stored on the backend; UI must disable deletion and editing of built-in pages.
12187
+ */
12188
+ isBuiltIn?: boolean;
12189
+ }
12190
+
12191
+ /**
12192
+ * Stored content of the reportPage entity.
12193
+ *
12194
+ * @alpha
12195
+ */
12196
+ export declare interface IReportPageLayoutContent extends IReportPageBody {
12197
+ /**
12198
+ * Content model version, for stored-content evolution.
12199
+ */
12200
+ version: "1";
12201
+ }
12202
+
12203
+ /**
12204
+ * Payload for creating or updating a report page.
12205
+ *
12206
+ * @alpha
12207
+ */
12208
+ export declare interface IReportPageLayoutDefinition {
12209
+ type: "reportPageLayout";
12210
+ /**
12211
+ * Present when updating an existing page.
12212
+ */
12213
+ ref?: ObjRef;
12214
+ title: string;
12215
+ description?: string;
12216
+ tags?: string[];
12217
+ content: IReportPageLayoutContent;
12218
+ }
12219
+
12220
+ /**
12221
+ * Structural base of every report slot.
12222
+ *
12223
+ * @remarks
12224
+ * Parsers written against this base can skip slot types introduced by a newer
12225
+ * content version instead of failing.
12226
+ *
12227
+ * @alpha
12228
+ */
12229
+ export declare interface IReportSlotBase {
12230
+ type: string;
12231
+ /**
12232
+ * Identifier unique within the page body. The layout tree references it, and it is
12233
+ * the join key when a report fills a template's slots. Regenerated when a page is
12234
+ * cloned into template content so repeated use of one page stays unique.
12235
+ */
12236
+ localIdentifier: string;
12237
+ /**
12238
+ * Present when the slot is an unfilled placeholder.
12239
+ */
12240
+ placeholder?: IReportSlotPlaceholder;
12241
+ }
12242
+
12243
+ /**
12244
+ * Metadata of a slot that is intentionally left unfilled in a report page or template.
12245
+ *
12246
+ * @alpha
12247
+ */
12248
+ export declare interface IReportSlotPlaceholder {
12249
+ /**
12250
+ * Authoring hint shown in the empty slot.
12251
+ */
12252
+ hint?: string;
12253
+ /**
12254
+ * When true, a report is not considered complete until this slot is filled.
12255
+ */
12256
+ required?: boolean;
12257
+ }
12258
+
12259
+ /**
12260
+ * Author-written text.
12261
+ *
12262
+ * @alpha
12263
+ */
12264
+ export declare interface IReportStaticTextSource {
12265
+ type: "static";
12266
+ /**
12267
+ * Markdown content with `{{variable}}` placeholders. Stored raw — placeholders are
12268
+ * resolved only at render/export time.
12269
+ */
12270
+ content: string;
12271
+ }
12272
+
12273
+ /**
12274
+ * Report template metadata object.
12275
+ *
12276
+ * @alpha
12277
+ */
12278
+ export declare interface IReportTemplate extends IReportTemplateDefinition, IAuditableDates, IAuditableUsers {
12279
+ ref: ObjRef;
12280
+ /**
12281
+ * When true, the object comes from a parent workspace and is not editable
12282
+ * in the current workspace.
12283
+ */
12284
+ isLocked?: boolean;
12285
+ }
12286
+
12287
+ /**
12288
+ * Payload for creating or updating a report template.
12289
+ *
12290
+ * @alpha
12291
+ */
12292
+ export declare interface IReportTemplateDefinition {
12293
+ type: "reportTemplate";
12294
+ /**
12295
+ * Present when updating an existing template.
12296
+ */
12297
+ ref?: ObjRef;
12298
+ title: string;
12299
+ description?: string;
12300
+ tags?: string[];
12301
+ content: IReportContent;
12302
+ }
12303
+
12304
+ /**
12305
+ * Slot rendering text.
12306
+ *
12307
+ * @alpha
12308
+ */
12309
+ export declare interface IReportTextSlot extends IReportSlotBase {
12310
+ type: "text";
12311
+ kind: ReportTextSlotKind;
12312
+ /**
12313
+ * Undefined = declared-but-empty slot.
12314
+ */
12315
+ source?: ReportTextSource;
12316
+ }
12317
+
12318
+ /**
12319
+ * A custom variable declared by report content and given a value by a report.
12320
+ *
12321
+ * @remarks
12322
+ * Referenced from text as `{{name}}`. Values come from {@link IReportBase.variableValues},
12323
+ * falling back to {@link IReportVariableDefinition.defaultValue}.
12324
+ *
12325
+ * @alpha
12326
+ */
12327
+ export declare interface IReportVariableDefinition {
12328
+ /**
12329
+ * Variable name as used inside the `{{...}}` marker. Must match /^[a-zA-Z][a-zA-Z0-9_]*$/.
12330
+ * Built-in names ({@link ReportBuiltInVariable}) are reserved.
12331
+ */
12332
+ name: string;
12333
+ /**
12334
+ * Human readable label shown in the editor.
12335
+ */
12336
+ title?: string;
12337
+ description?: string;
12338
+ /**
12339
+ * Value used when the report does not provide one. May not contain further
12340
+ * placeholders — there is no recursive expansion.
12341
+ */
12342
+ defaultValue?: string;
12343
+ }
12344
+
12345
+ /**
12346
+ * Slot rendering an insight, with its own filter context.
12347
+ *
12348
+ * @alpha
12349
+ */
12350
+ export declare interface IReportVisualizationSlot extends IReportSlotBase {
12351
+ type: "visualization";
12352
+ /**
12353
+ * Insight to render. Undefined = declared-but-empty slot; renderers show a placeholder.
12354
+ */
12355
+ insight?: ObjRef;
12356
+ /**
12357
+ * Optional title rendered above the visualization. Supports `{{variables}}`.
12358
+ */
12359
+ title?: string;
12360
+ showTitle?: boolean;
12361
+ /**
12362
+ * Visualization properties overriding the insight's own.
12363
+ */
12364
+ properties?: VisualizationProperties;
12365
+ /**
12366
+ * Slot-level filters, applied on top of the effective content and page filters.
12367
+ * A slot filter targeting the same object replaces the inherited one.
12368
+ */
12369
+ filters?: FilterContextItem[];
12370
+ /**
12371
+ * Content- and page-level filters this slot ignores (matched by display form / date dataset).
12372
+ */
12373
+ ignoredFilters?: IDashboardFilterReference[];
12374
+ /**
12375
+ * Date dataset the report's period (periodStart/periodEnd) is applied to as an
12376
+ * absolute date filter at execution time. Undefined = backend date-dataset
12377
+ * auto-resolution applies.
12378
+ */
12379
+ dateDataSet?: ObjRef;
12380
+ /**
12381
+ * When true, the implicit date filter derived from the report's period is not
12382
+ * applied to this slot.
12383
+ */
12384
+ ignoreReportPeriod?: boolean;
12385
+ }
12386
+
12387
+ /**
12388
+ * Attribute header specifies name and URI of the attribute element to which the calculated measure
12389
+ * values in the particular data view slice belong.
12390
+ *
12391
+ * @public
12392
+ */
12393
+ export declare interface IResultAttributeHeader {
12394
+ attributeHeaderItem: IResultAttributeHeaderItem;
12395
+ }
12396
+
12397
+ /**
12398
+ * Attribute header item specifies name and URI of the attribute element to which the calculated measure
12399
+ * values in the particular data view slice belong.
12400
+ *
12401
+ * @public
12402
+ */
12403
+ export declare interface IResultAttributeHeaderItem {
12404
+ /**
12405
+ * Human readable name of the attribute element.
12406
+ *
12407
+ * @remarks
12408
+ */
12409
+ name: string | null;
12410
+ /**
12411
+ * URI of the attribute element.
12412
+ *
12413
+ * @remarks
12414
+ * This is essentially a primary key of the attribute element. It can
12415
+ * be used in places where attribute elements have to be exactly specified - such as positive or
12416
+ * negative attribute filters.
12417
+ *
12418
+ * It is up to the backend implementation whether the URI is transferable across workspaces or not in the
12419
+ * data distribution scenarios. In other words, if a data for one attribute (say Product) is distributed
12420
+ * into multiple workspaces, it is up to the backend whether the URIs of the elements will be same across
12421
+ * all workspaces or not.
12422
+ *
12423
+ * Recommendation for the consumers: URI is safe to use if you obtain in programmatically from this header
12424
+ * and then use it in the same workspace for instance for filtering. It is not safe to hardcode URIs
12425
+ * and use them in a solution which should operate on top of different workspaces.
12426
+ *
12427
+ * Note that this can actually be null on some backends if your data contains NULL values.
12428
+ * We will change the type of this to string | null in the next major (since it is a breaking change),
12429
+ * but for now, if you expect NULLs in your data, treat this as string | null already.
12430
+ */
12431
+ uri: string;
12432
+ /**
12433
+ * Formatted name of attribute element.
12434
+ *
12435
+ * @remarks
12436
+ * This property holds the formatted form of name property in case of date attributes. When using attribute
12437
+ * elements in visualisations, formatted name should have precedence over original name to show a more
12438
+ * readable form of dates. In other cases, such as drilling, original name property must be used to avoid
12439
+ * inconsistencies.
12440
+ */
12441
+ formattedName?: string;
12442
+ /**
12443
+ * Normalized value of attribute element.
12444
+ *
12445
+ * @remarks
12446
+ * This property holds the normalized form of value property in case of attributes if its differ from
12447
+ * name property. Its used by date attributes for example when normalized value can hold ISO string of date.
12448
+ * Its related to type of attribute and can differ for different implementations.
12449
+ */
12450
+ normalizedValue?: string;
12451
+ }
12452
+
12453
+ /**
12454
+ * Result headers provide metadata about data included in the data view.
12455
+ *
12456
+ * @remarks
12457
+ * They are integral part of the data view and are organized in per-dimension and per-dimension-item arrays.
12458
+ *
12459
+ * @remarks see {@link @gooddata/sdk-backend-spi#IDataView} for further detail on the organization.
12460
+ *
12461
+ * @public
12462
+ */
12463
+ export declare type IResultHeader = IResultAttributeHeader | IResultMeasureHeader | IResultTotalHeader;
12464
+
12465
+ /**
12466
+ * Measure header specifies name of the measure to which the calculated values in the particular data view slice belong.
12467
+ *
12468
+ * @remarks
12469
+ * Measure header also specifies 'order' - this is essentially an index into measure group descriptor's item array; it
12470
+ * can be used to obtain further information about the measure.
12471
+ *
12472
+ * @public
12473
+ */
12474
+ export declare interface IResultMeasureHeader {
12475
+ measureHeaderItem: IResultMeasureHeaderItem;
12476
+ }
12477
+
12478
+ /**
12479
+ * Measure header specifies name of the measure to which the calculated values in the particular data view slice belong.
12480
+ *
12481
+ * @remarks
12482
+ * Measure header also specifies 'order' - this is essentially an index into measure group descriptor's item array; it
12483
+ * can be used to obtain further information about the measure.
12484
+ *
12485
+ * @public
12486
+ */
12487
+ export declare interface IResultMeasureHeaderItem {
12488
+ /**
12489
+ * Measure name - equals to the measure name contained in the respective measure descriptor, included here
12490
+ * for convenience and easy access.
12491
+ *
12492
+ * Note: check out the contract for measure name as described in {@link IMeasureDescriptor} - it is
12493
+ * somewhat more convoluted than one would expect.
12494
+ */
12495
+ name: string;
12496
+ /**
12497
+ * Index of this measure's descriptor within the measure group description. The measure group descriptor
12498
+ * is included in the execution result.
12499
+ */
12500
+ order: number;
12501
+ }
12502
+
12503
+ /**
12504
+ * Total header specifies name and type of total to which the calculated values in particular data view slice belong.
12505
+ *
12506
+ * @public
12507
+ */
12508
+ export declare interface IResultTotalHeader {
12509
+ totalHeaderItem: IResultTotalHeaderItem;
12510
+ }
12511
+
12512
+ /**
12513
+ * Total header specifies name and type of total to which the calculated values in particular data view slice belong.
12514
+ * Also can contain measure index which can be used to lookup the measure which belongs to this total.
12515
+ *
12516
+ * @public
12517
+ */
12518
+ export declare interface IResultTotalHeaderItem {
12519
+ name: string;
12520
+ type: string;
12521
+ measureIndex?: number;
12522
+ }
12523
+
12524
+ /**
12525
+ * Represents an execution result warning.
11891
12526
  * (e.g. when execution was executed successfully, but backend didn't take something into the account)
11892
12527
  *
11893
12528
  * @public
@@ -12288,6 +12923,13 @@ export declare function isCatalogAttribute(obj: unknown): obj is ICatalogAttribu
12288
12923
  */
12289
12924
  export declare function isCatalogAttributeHierarchy(obj: unknown): obj is ICatalogAttributeHierarchy;
12290
12925
 
12926
+ /**
12927
+ * Type guard checking whether the provided object is a {@link ICatalogComputedAttribute}
12928
+ *
12929
+ * @public
12930
+ */
12931
+ export declare function isCatalogComputedAttribute(obj: unknown): obj is ICatalogComputedAttribute;
12932
+
12291
12933
  /**
12292
12934
  * Type guard checking whether object is an instance of ICatalogDateDataset.
12293
12935
  *
@@ -12490,6 +13132,22 @@ export declare function isComparisonCondition(obj: unknown): obj is IComparisonC
12490
13132
  */
12491
13133
  export declare function isComparisonConditionOperator(obj: unknown): obj is ComparisonConditionOperator;
12492
13134
 
13135
+ /**
13136
+ * Tests whether the provided object is of type {@link IComputedAttributeMetadataObject}.
13137
+ *
13138
+ * @param obj - object to test
13139
+ * @public
13140
+ */
13141
+ export declare function isComputedAttributeMetadataObject(obj: unknown): obj is IComputedAttributeMetadataObject;
13142
+
13143
+ /**
13144
+ * Tests whether the provided object is of type {@link IComputedAttributeMetadataObjectDefinition}.
13145
+ *
13146
+ * @param obj - object to test
13147
+ * @public
13148
+ */
13149
+ export declare function isComputedAttributeMetadataObjectDefinition(obj: unknown): obj is IComputedAttributeMetadataObjectDefinition;
13150
+
12493
13151
  /**
12494
13152
  * Type-guard testing whether the provided object is an instance of {@link ICrossFiltering}.
12495
13153
  * @alpha
@@ -13758,6 +14416,104 @@ export declare function isRelativeUpperBoundedDateFilterBody(obj: unknown): obj
13758
14416
  */
13759
14417
  export declare function isRemotePluggableApplicationRegistryItem(app: PluggableApplicationRegistryItem): app is RemotePluggableApplicationRegistryItem;
13760
14418
 
14419
+ /**
14420
+ * Type-guard testing whether the provided object is an instance of {@link IReport}.
14421
+ *
14422
+ * @alpha
14423
+ */
14424
+ export declare function isReport(obj: unknown): obj is IReport;
14425
+
14426
+ /**
14427
+ * Type-guard testing whether the provided object is an instance of {@link IReportContent}.
14428
+ *
14429
+ * @alpha
14430
+ */
14431
+ export declare function isReportContentV1(obj: unknown): obj is IReportContent;
14432
+
14433
+ /**
14434
+ * Type-guard testing whether the provided object is an instance of {@link IReportDefinition}.
14435
+ *
14436
+ * @alpha
14437
+ */
14438
+ export declare function isReportDefinition(obj: unknown): obj is IReportDefinition;
14439
+
14440
+ /**
14441
+ * Type-guard testing whether the provided object is an instance of {@link IReportImageSlot}.
14442
+ *
14443
+ * @alpha
14444
+ */
14445
+ export declare function isReportImageSlot(obj: unknown): obj is IReportImageSlot;
14446
+
14447
+ /**
14448
+ * Type-guard testing whether the provided object is an instance of {@link IReportLayoutSection}.
14449
+ *
14450
+ * @alpha
14451
+ */
14452
+ export declare function isReportLayoutSection(obj: unknown): obj is IReportLayoutSection;
14453
+
14454
+ /**
14455
+ * Type-guard testing whether the provided object is an instance of {@link IReportLayoutSlotRef}.
14456
+ *
14457
+ * @alpha
14458
+ */
14459
+ export declare function isReportLayoutSlotRef(obj: unknown): obj is IReportLayoutSlotRef;
14460
+
14461
+ /**
14462
+ * Type-guard testing whether the provided object is an instance of {@link IReportPageLayout}.
14463
+ *
14464
+ * @alpha
14465
+ */
14466
+ export declare function isReportPageLayout(obj: unknown): obj is IReportPageLayout;
14467
+
14468
+ /**
14469
+ * Type-guard testing whether the provided object is an instance of {@link IReportPageLayoutContent}.
14470
+ *
14471
+ * @alpha
14472
+ */
14473
+ export declare function isReportPageLayoutContentV1(obj: unknown): obj is IReportPageLayoutContent;
14474
+
14475
+ /**
14476
+ * Type-guard testing whether the provided object is an instance of {@link IReportPageLayoutDefinition}.
14477
+ *
14478
+ * @alpha
14479
+ */
14480
+ export declare function isReportPageLayoutDefinition(obj: unknown): obj is IReportPageLayoutDefinition;
14481
+
14482
+ /**
14483
+ * Type-guard testing whether the provided object is an instance of {@link ReportSlot}.
14484
+ *
14485
+ * @alpha
14486
+ */
14487
+ export declare function isReportSlot(obj: unknown): obj is ReportSlot;
14488
+
14489
+ /**
14490
+ * Type-guard testing whether the provided object is an instance of {@link IReportTemplate}.
14491
+ *
14492
+ * @alpha
14493
+ */
14494
+ export declare function isReportTemplate(obj: unknown): obj is IReportTemplate;
14495
+
14496
+ /**
14497
+ * Type-guard testing whether the provided object is an instance of {@link IReportTemplateDefinition}.
14498
+ *
14499
+ * @alpha
14500
+ */
14501
+ export declare function isReportTemplateDefinition(obj: unknown): obj is IReportTemplateDefinition;
14502
+
14503
+ /**
14504
+ * Type-guard testing whether the provided object is an instance of {@link IReportTextSlot}.
14505
+ *
14506
+ * @alpha
14507
+ */
14508
+ export declare function isReportTextSlot(obj: unknown): obj is IReportTextSlot;
14509
+
14510
+ /**
14511
+ * Type-guard testing whether the provided object is an instance of {@link IReportVisualizationSlot}.
14512
+ *
14513
+ * @alpha
14514
+ */
14515
+ export declare function isReportVisualizationSlot(obj: unknown): obj is IReportVisualizationSlot;
14516
+
13761
14517
  /**
13762
14518
  * Type-guard testing whether the provided object is an instance of {@link IResultAttributeHeader}.
13763
14519
  *
@@ -14016,6 +14772,12 @@ export declare function isValidDashboardTimezoneId(timezoneId: DashboardTimezone
14016
14772
  * sentinel is not a valid IANA ID — use {@link isValidDashboardTimezoneId} for
14017
14773
  * values stored on the dashboard.
14018
14774
  *
14775
+ * Identifiers are case-sensitive. `Intl` accepts timezones case-insensitively, so
14776
+ * a value that only differs in case from the canonical form (e.g. `"america/new_york"`)
14777
+ * is rejected. Aliases that resolve to a different identifier (e.g. `"Etc/UTC"` → `"UTC"`)
14778
+ * are still accepted as ICU-known IDs. Offset-style identifiers (e.g. `"+01"`, `"+0100"`,
14779
+ * `"+01:00"`) are rejected.
14780
+ *
14019
14781
  * @param timezoneId - timezone identifier to test
14020
14782
  * @alpha
14021
14783
  */
@@ -16851,7 +17613,7 @@ export declare function mergeFilters(originalFilters: IFilter[], addedFilters: I
16851
17613
  *
16852
17614
  * @public
16853
17615
  */
16854
- export declare type MetadataObject = IAttributeMetadataObject | IAttributeDisplayFormMetadataObject | IFactMetadataObject | IMeasureMetadataObject | IParameterMetadataObject | IDataSetMetadataObject | IVariableMetadataObject | IDashboardMetadataObject | IAttributeHierarchyMetadataObject | IMemoryItemMetadataObject;
17616
+ export declare type MetadataObject = IAttributeMetadataObject | IComputedAttributeMetadataObject | IAttributeDisplayFormMetadataObject | IFactMetadataObject | IMeasureMetadataObject | IParameterMetadataObject | IDataSetMetadataObject | IVariableMetadataObject | IDashboardMetadataObject | IAttributeHierarchyMetadataObject | IMemoryItemMetadataObject;
16855
17617
 
16856
17618
  /**
16857
17619
  * Get metadata object identifier
@@ -16990,6 +17752,18 @@ export declare function newAbsoluteDashboardDateFilter(from: DateString, to: Dat
16990
17752
  */
16991
17753
  export declare function newAbsoluteDateFilter(dateDataSet: ObjRef | Identifier, from: string, to: string, localIdentifier?: string, emptyValueHandling?: EmptyValues): IAbsoluteDateFilter;
16992
17754
 
17755
+ /**
17756
+ * Creates an ad-hoc report definition not based on any template.
17757
+ *
17758
+ * @alpha
17759
+ */
17760
+ export declare function newAdHocReportDefinition(options: {
17761
+ title: string;
17762
+ periodStart: ReportDateString;
17763
+ periodEnd: ReportDateString;
17764
+ pages?: IReportContentPage[];
17765
+ }, modifications?: Partial<Omit<IReportDefinition, "type" | "title" | "periodStart" | "periodEnd" | "content">>): IReportDefinition;
17766
+
16993
17767
  /**
16994
17768
  * Creates a new all time date filter. This filter is used to indicate that there should be no filtering on the dates.
16995
17769
  *
@@ -17380,6 +18154,54 @@ export declare function newRelativeDashboardDateFilter(granularity: DateFilterGr
17380
18154
  */
17381
18155
  export declare function newRelativeDateFilter(dateDataSet: ObjRef | Identifier, granularity: DateAttributeGranularity, from: number, to: number, localIdentifier?: string, boundedFilter?: IUpperBoundedFilter | ILowerBoundedFilter, emptyValueHandling?: EmptyValues): IRelativeDateFilter;
17382
18156
 
18157
+ /**
18158
+ * Creates report content from page instances.
18159
+ *
18160
+ * @alpha
18161
+ */
18162
+ export declare function newReportContent(pages: IReportContentPage[], modifications?: Partial<Omit<IReportContent, "version" | "pages">>): IReportContent;
18163
+
18164
+ /**
18165
+ * Clones a report page into a page instance embeddable in template/report content.
18166
+ *
18167
+ * @remarks
18168
+ * The body is deep-copied and detached from the source page — no reference is kept.
18169
+ * Slot localIdentifiers (and the layout slotIds pointing at them) are prefixed with the
18170
+ * page-instance localIdentifier, so one page used repeatedly in the same content stays unique.
18171
+ *
18172
+ * @alpha
18173
+ */
18174
+ export declare function newReportContentPageFromLayout(page: IReportPageLayout | IReportPageLayoutDefinition, localIdentifier?: string): IReportContentPage;
18175
+
18176
+ /**
18177
+ * Creates a report definition from a template.
18178
+ *
18179
+ * @remarks
18180
+ * The template content is deep-copied; no reference to the template is kept, so the
18181
+ * report stays frozen while the template evolves.
18182
+ *
18183
+ * @alpha
18184
+ */
18185
+ export declare function newReportDefinitionFromTemplate(template: IReportTemplate | IReportTemplateDefinition, options: {
18186
+ title: string;
18187
+ periodStart: ReportDateString;
18188
+ periodEnd: ReportDateString;
18189
+ }, modifications?: Partial<Omit<IReportDefinition, "type" | "title" | "periodStart" | "periodEnd" | "content">>): IReportDefinition;
18190
+
18191
+ /**
18192
+ * Creates a new report page definition.
18193
+ *
18194
+ * @alpha
18195
+ */
18196
+ export declare function newReportPageLayoutDefinition(title: string, body: IReportPageBody, modifications?: Partial<Omit<IReportPageLayoutDefinition, "type" | "title" | "content">>): IReportPageLayoutDefinition;
18197
+
18198
+ /**
18199
+ * Creates a new report template definition.
18200
+ *
18201
+ * @alpha
18202
+ */
18203
+ export declare function newReportTemplateDefinition(title: string, content: IReportContent, modifications?: Partial<Omit<IReportTemplateDefinition, "type" | "title" | "content">>): IReportTemplateDefinition;
18204
+
17383
18205
  /**
17384
18206
  * Creates a new total.
17385
18207
  *
@@ -17490,7 +18312,7 @@ export declare type ObjectPermissionsObjectKind = "attribute" | "fact" | "label"
17490
18312
  *
17491
18313
  * @public
17492
18314
  */
17493
- export declare type ObjectType = "measure" | "fact" | "attribute" | "displayForm" | "dataSet" | "tag" | "insight" | "variable" | "analyticalDashboard" | "theme" | "colorPalette" | "workspaceTheme" | "workspaceColorPalette" | "filterContext" | "dashboardPlugin" | "attributeHierarchy" | "user" | "userGroup" | "dateHierarchyTemplate" | "dateAttributeHierarchy" | "exportDefinition" | "automation" | "filterView" | "workspaceDataFilter" | "workspaceDataFilterSetting" | "userDataFilter" | "notificationChannel" | "memoryItem" | "parameter";
18315
+ export declare type ObjectType = "measure" | "fact" | "attribute" | "computedAttribute" | "displayForm" | "dataSet" | "tag" | "insight" | "variable" | "analyticalDashboard" | "theme" | "colorPalette" | "workspaceTheme" | "workspaceColorPalette" | "filterContext" | "dashboardPlugin" | "attributeHierarchy" | "user" | "userGroup" | "dateHierarchyTemplate" | "dateAttributeHierarchy" | "exportDefinition" | "automation" | "filterView" | "workspaceDataFilter" | "workspaceDataFilterSetting" | "userDataFilter" | "notificationChannel" | "memoryItem" | "parameter" | "reportPageLayout" | "reportTemplate" | "report";
17494
18316
 
17495
18317
  /**
17496
18318
  * Model object reference.
@@ -17789,6 +18611,88 @@ export declare type RemotePluggableApplicationRegistryItem = IRemotePluggableApp
17789
18611
  */
17790
18612
  export declare type RemotePluggableApplicationsRegistry = IRemotePluggableApplicationsRegistryV1;
17791
18613
 
18614
+ /**
18615
+ * Variables resolved by the rendering runtime; they are never declared or stored.
18616
+ *
18617
+ * @remarks
18618
+ * Referenced from report text as `{{name}}`. Custom variable names must not collide with these;
18619
+ * on collision the built-in wins.
18620
+ *
18621
+ * @alpha
18622
+ */
18623
+ export declare type ReportBuiltInVariable = "reportTitle" | "periodStart" | "periodEnd" | "workspaceName" | "generatedAt" | "pageNumber" | "totalPages" | "logo";
18624
+
18625
+ /**
18626
+ * All built-in report variable names.
18627
+ *
18628
+ * @alpha
18629
+ */
18630
+ export declare const ReportBuiltInVariables: ReportBuiltInVariable[];
18631
+
18632
+ /**
18633
+ * Convenience accessor for a report or template page by its localIdentifier.
18634
+ *
18635
+ * @alpha
18636
+ */
18637
+ export declare function reportContentPage(reportOrTemplate: IReport | IReportDefinition | IReportTemplate | IReportTemplateDefinition, pageLocalIdentifier: string): IReportContentPage | undefined;
18638
+
18639
+ /**
18640
+ * ISO 8601 calendar date (YYYY-MM-DD).
18641
+ *
18642
+ * @alpha
18643
+ */
18644
+ export declare type ReportDateString = string;
18645
+
18646
+ /**
18647
+ * What an image slot displays.
18648
+ *
18649
+ * @alpha
18650
+ */
18651
+ export declare type ReportImageSource = {
18652
+ type: "url";
18653
+ /**
18654
+ * Image URL. Supports `{{variables}}` — a logo slot uses `{{logo}}`.
18655
+ */
18656
+ url: string;
18657
+ } | {
18658
+ type: "asset";
18659
+ /**
18660
+ * Reference to a backend-managed asset.
18661
+ */
18662
+ ref: ObjRef;
18663
+ };
18664
+
18665
+ /**
18666
+ * Node of a report page layout: a recursive row/column split tree (flexbox semantics)
18667
+ * over a fixed page. Leaves assign their area to slots; the tree carries only geometry,
18668
+ * slot content lives in {@link IReportPageBody.slots}.
18669
+ *
18670
+ * @alpha
18671
+ */
18672
+ export declare type ReportPageLayoutNode = IReportLayoutSection | IReportLayoutSlotRef;
18673
+
18674
+ /**
18675
+ * All slot types of report content version 1.
18676
+ *
18677
+ * @alpha
18678
+ */
18679
+ export declare type ReportSlot = IReportVisualizationSlot | IReportTextSlot | IReportImageSlot;
18680
+
18681
+ /**
18682
+ * Semantic kind of a text slot. Drives default typography/styling and AI context only —
18683
+ * never geometry (geometry always comes from the layout tree).
18684
+ *
18685
+ * @alpha
18686
+ */
18687
+ export declare type ReportTextSlotKind = "title" | "subtitle" | "sectionTitle" | "description" | "summary" | "body" | "custom";
18688
+
18689
+ /**
18690
+ * Where the text of a text slot comes from.
18691
+ *
18692
+ * @alpha
18693
+ */
18694
+ export declare type ReportTextSource = IReportStaticTextSource | IReportAiTextSource;
18695
+
17792
18696
  /**
17793
18697
  * Entitlements and their values that must be set for the pluggable application to be accessible for
17794
18698
  * the currently logged user.
@@ -17823,6 +18727,14 @@ export declare type RequiredSettings = Condition<Partial<IPermanentSettings | IF
17823
18727
  */
17824
18728
  export declare type RequiredWorkspacePermissions = Condition<Partial<IPluggableApplicationWorkspacePermissions>>;
17825
18729
 
18730
+ /**
18731
+ * Replaces `{{variable}}` markers with values. Markers with no value are left as-is.
18732
+ * Values are inserted verbatim — there is no recursive expansion.
18733
+ *
18734
+ * @alpha
18735
+ */
18736
+ export declare function resolveReportTextPlaceholders(text: string, values: Record<string, string>): string;
18737
+
17826
18738
  /**
17827
18739
  * Resolves a dashboard timezone value to a concrete IANA timezone ID: the {@link BROWSER_DETECTED}
17828
18740
  * sentinel resolves to the browser/runtime timezone, any other value is returned as-is.
@@ -18184,6 +19096,16 @@ export declare type UserDataFilterDefinition = IUserDataFilterDefinition | IUser
18184
19096
  */
18185
19097
  export declare function userFullName(user: IUser): string | undefined;
18186
19098
 
19099
+ /**
19100
+ * Validates the structural invariants of a page body the type system cannot express:
19101
+ * slot localIdentifiers are unique, layout weights are positive, every slot is placed
19102
+ * by the layout, and every layout slotId resolves (unresolved ones are warnings —
19103
+ * they render as empty areas).
19104
+ *
19105
+ * @alpha
19106
+ */
19107
+ export declare function validateReportPageBody(body: IReportPageBody): IReportPageBodyValidationIssue[];
19108
+
18187
19109
  /**
18188
19110
  * Builder for virtual arithmetic measures.
18189
19111
  *