@cqa-lib/cqa-ui 1.1.541 → 1.1.542-gamma.10

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 (66) hide show
  1. package/.github/workflows/README.md +8 -1
  2. package/esm2020/lib/compare-runs/compare-runs.component.mjs +1 -1
  3. package/esm2020/lib/execution-screen/condition-debug-step/condition-branch-editor.component.mjs +32 -3
  4. package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs +1 -1
  5. package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +1 -1
  6. package/esm2020/lib/iterations-loop/iterations-loop.component.mjs +1 -1
  7. package/esm2020/lib/mixed-variable-input/mixed-variable-input.component.mjs +30 -10
  8. package/esm2020/lib/new-global-variable-dialog/global-variable-tags-input.component.mjs +129 -0
  9. package/esm2020/lib/new-global-variable-dialog/new-global-variable-dialog.component.mjs +16 -5
  10. package/esm2020/lib/new-global-variable-dialog/new-global-variable-dialog.models.mjs +1 -1
  11. package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.mjs +50 -51
  12. package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.mjs +1 -1
  13. package/esm2020/lib/segment-control/segment-control.component.mjs +12 -4
  14. package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +21 -3
  15. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +59 -23
  16. package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +21 -3
  17. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +88 -47
  18. package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +16 -3
  19. package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +495 -29
  20. package/esm2020/lib/templates/modular-table-template/modular-table-template.component.mjs +24 -6
  21. package/esm2020/lib/templates/table-template.component.mjs +5 -3
  22. package/esm2020/lib/test-case-details/ai-agent-step/ai-agent-step.component.mjs +3 -3
  23. package/esm2020/lib/test-case-details/ai-verify-step/ai-verify-step.component.mjs +3 -3
  24. package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +32 -7
  25. package/esm2020/lib/test-case-details/data-library-panel/data-library-panel.component.mjs +116 -0
  26. package/esm2020/lib/test-case-details/data-library-panel/data-library-panel.models.mjs +2 -0
  27. package/esm2020/lib/test-case-details/data-library-panel/element-card.component.mjs +36 -0
  28. package/esm2020/lib/test-case-details/data-library-panel/test-data-profile-card.component.mjs +38 -0
  29. package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +43 -4
  30. package/esm2020/lib/test-case-details/test-case-details.models.mjs +3 -1
  31. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-data.mjs +1 -1
  32. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +137 -7
  33. package/esm2020/lib/ui-kit.module.mjs +23 -3
  34. package/esm2020/public-api.mjs +6 -1
  35. package/fesm2015/cqa-lib-cqa-ui.mjs +1478 -267
  36. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  37. package/fesm2020/cqa-lib-cqa-ui.mjs +1384 -194
  38. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  39. package/lib/execution-screen/condition-debug-step/condition-branch-editor.component.d.ts +26 -1
  40. package/lib/new-global-variable-dialog/global-variable-tags-input.component.d.ts +39 -0
  41. package/lib/new-global-variable-dialog/new-global-variable-dialog.component.d.ts +5 -2
  42. package/lib/new-global-variable-dialog/new-global-variable-dialog.models.d.ts +8 -0
  43. package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.d.ts +9 -10
  44. package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.d.ts +1 -1
  45. package/lib/segment-control/segment-control.component.d.ts +3 -1
  46. package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +19 -1
  47. package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +23 -2
  48. package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +19 -1
  49. package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +40 -11
  50. package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +15 -1
  51. package/lib/step-builder/template-variables-form/template-variables-form.component.d.ts +103 -4
  52. package/lib/templates/modular-table-template/modular-table-template.component.d.ts +15 -2
  53. package/lib/templates/table-template.component.d.ts +8 -1
  54. package/lib/test-case-details/api-edit-step/api-edit-step.component.d.ts +14 -1
  55. package/lib/test-case-details/data-library-panel/data-library-panel.component.d.ts +42 -0
  56. package/lib/test-case-details/data-library-panel/data-library-panel.models.d.ts +17 -0
  57. package/lib/test-case-details/data-library-panel/element-card.component.d.ts +13 -0
  58. package/lib/test-case-details/data-library-panel/test-data-profile-card.component.d.ts +13 -0
  59. package/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.d.ts +7 -0
  60. package/lib/test-case-details/test-case-details.models.d.ts +2 -0
  61. package/lib/test-case-details/test-data-modal/test-data-modal-data.d.ts +23 -1
  62. package/lib/test-case-details/test-data-modal/test-data-modal.component.d.ts +40 -6
  63. package/lib/ui-kit.module.d.ts +100 -96
  64. package/package.json +1 -1
  65. package/public-api.d.ts +5 -0
  66. package/styles.css +1 -1
@@ -22,10 +22,12 @@ export interface TemplateVariable {
22
22
  value: string;
23
23
  label: string;
24
24
  }[];
25
- dataType?: 'plain-text' | 'parameter' | 'runtime' | 'environment';
25
+ dataType?: 'plain-text' | 'parameter' | 'runtime' | 'environment' | 'global';
26
26
  rawValue?: string;
27
27
  selectedEnvironment?: string;
28
28
  selectedEnvironmentId?: number;
29
+ selectedGlobalVariable?: string;
30
+ selectedGlobalVariableId?: number;
29
31
  selectedTestDataProfile?: string;
30
32
  selectedTestDataProfileId?: number;
31
33
  selectedDataSet?: string;
@@ -75,6 +77,36 @@ export declare class TemplateVariablesFormComponent implements OnChanges {
75
77
  hasMoreEnvironments: boolean;
76
78
  /** True while parent is loading environments (search or load more) */
77
79
  isLoadingEnvironments: boolean;
80
+ /** Global Data variables (workspace-scoped) for the new Global Data tab */
81
+ globalVariableOptions: {
82
+ id: number | string;
83
+ name: string;
84
+ value: string;
85
+ type?: string;
86
+ readWriteMode?: string;
87
+ }[];
88
+ /** True while parent is loading global variables */
89
+ isLoadingGlobalVariables: boolean;
90
+ /** Resolved test-case environment name, used for the env banner subhead. */
91
+ testCaseEnvironmentName?: string;
92
+ /** Suffix appended to the env-name option label only (e.g. '(default)'). When set, also locks the env dropdown. */
93
+ testCaseEnvironmentLabelSuffix?: string;
94
+ /** When set, renders an italic note under the env dropdown — e.g. legacy step-level env deprecation notice. */
95
+ environmentLegacyDeprecationMessage?: string;
96
+ /**
97
+ * True only under Tier 1 of the env-on-test-case 3-tier resolution
98
+ * (testCase.environmentId set). Hides the redundant "Environment Name"
99
+ * picker — the env banner already states it.
100
+ * Tier 2 (legacy step env, depth-modal): deprecation message set → false.
101
+ * Tier 3 (workspace default): labelSuffix='(default)' + deprecation set → false.
102
+ * Both 'no suffix' AND 'no deprecation' are required because in the depth
103
+ * modal Tier 2 leaves suffix undefined but populates testCaseEnvironmentName
104
+ * with the legacy step env name — the deprecation message is what
105
+ * distinguishes Tier 1 from Tier 2.
106
+ */
107
+ get hideEnvironmentNameField(): boolean;
108
+ /** Test case's TDP id (when set, the TDP picker is locked in the parameter tab). */
109
+ testCaseTestDataId?: number | null;
78
110
  /** Default test data profile ID from test case (if available, profile and data set dropdowns will be disabled) */
79
111
  defaultTestDataProfileId?: number;
80
112
  /** Default test data start index from test case (data set index in the profile) */
@@ -113,13 +145,16 @@ export declare class TemplateVariablesFormComponent implements OnChanges {
113
145
  loadMoreUploads: EventEmitter<void>;
114
146
  searchEnvironments: EventEmitter<string>;
115
147
  loadMoreEnvironments: EventEmitter<void>;
148
+ searchGlobalVariables: EventEmitter<string>;
116
149
  cancelElementForm: EventEmitter<void>;
117
150
  elementFormVisibilityChange: EventEmitter<boolean>;
118
151
  private selectConfigCache;
119
152
  private dataTypeSelectConfigCache;
120
153
  private parameterSelectConfigCache;
121
154
  private environmentSelectConfigCache;
155
+ private environmentNameSelectConfigCache;
122
156
  private environmentParameterSelectConfigCache;
157
+ private globalVariableSelectConfigCache;
123
158
  private screenNameSelectConfigCache;
124
159
  private elementSelectConfigCache;
125
160
  private testDataProfileSelectConfigCache;
@@ -133,11 +168,31 @@ export declare class TemplateVariablesFormComponent implements OnChanges {
133
168
  private needsDataTypeDropdownCache;
134
169
  private shouldShowDropdownCache;
135
170
  private readonly dataTypeOptions;
171
+ /**
172
+ * Stable segment options for the Value Source segment strip. MUST be a field
173
+ * (not a getter) — see feedback_segment_control_no_getter_input.md: a getter
174
+ * triggers a CD loop in cqa-segment-control.
175
+ */
176
+ readonly dataTypeSegments: {
177
+ value: string;
178
+ label: string;
179
+ }[];
180
+ /**
181
+ * Memoized filtered segments — drops Test Data Profile when neither TC nor FOR loop has a TDP.
182
+ * Held as a field (not a getter) so cqa-segment-control's [segments] stays a stable reference.
183
+ * Recomputed in ngOnChanges when isInsideForLoopStep / hasTestDataProfile change.
184
+ */
185
+ visibleDataTypeSegments: {
186
+ value: string;
187
+ label: string;
188
+ }[];
189
+ private recomputeVisibleSegments;
136
190
  createElementVisible: boolean;
137
191
  constructor(cdr: ChangeDetectorRef);
138
192
  onCreateElement(payload: ElementCreatePayload): void;
139
193
  onCancelElementForm(): void;
140
194
  ngOnChanges(changes: SimpleChanges): void;
195
+ private backfillGlobalVariableIds;
141
196
  private initializeTestDataVariables;
142
197
  /** Get form group for a variable by name from FormArray */
143
198
  getVariableFormGroup(variableName: string): FormGroup | null;
@@ -152,9 +207,33 @@ export declare class TemplateVariablesFormComponent implements OnChanges {
152
207
  onVariableBooleanChange(variableName: string, value: boolean): void;
153
208
  shouldShowDropdown(variable: TemplateVariable): boolean;
154
209
  needsDataTypeDropdown(variable: TemplateVariable): boolean;
210
+ /** True when the variable is the synthetic AI Ask / AI Verify environment dropdown. */
211
+ isEnvironmentNameType(variable: TemplateVariable): boolean;
212
+ /**
213
+ * Builds the dynamic-select config for the synthetic AI Ask / AI Verify
214
+ * environment dropdown. Prepends a sentinel "None" entry (empty value) so
215
+ * the user can explicitly clear the choice — the empty value round-trips
216
+ * through onVariableValueChange → setValue('') → backend reads
217
+ * `event.environment` as '' and treats it as no environment context.
218
+ *
219
+ * Deduplicates by environment name to mirror getUniqueEnvironments() used
220
+ * by the existing test-data environment selector.
221
+ */
222
+ getEnvironmentNameSelectConfig(variable: TemplateVariable): DynamicSelectFieldConfig;
223
+ /** Look up an environment's display name from the numeric id stored on the variable. */
224
+ private resolveEnvironmentNameById;
155
225
  getDataTypeOptions(): SelectOption[];
156
226
  getDataTypeSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig;
157
- getCurrentDataType(variable: TemplateVariable): 'plain-text' | 'parameter' | 'runtime' | 'environment';
227
+ getCurrentDataType(variable: TemplateVariable): 'plain-text' | 'parameter' | 'runtime' | 'environment' | 'global';
228
+ /** Whether the variable is currently using the Global Data tab. */
229
+ isGlobalType(variable: TemplateVariable): boolean;
230
+ /** Whether the user has picked a global variable on this row. */
231
+ hasSelectedGlobalVariable(variable: TemplateVariable): boolean;
232
+ /**
233
+ * Build select config for the Global Data dropdown.
234
+ * Each row inserts `{{name}}` on selection.
235
+ */
236
+ getGlobalVariableSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig;
158
237
  getRawValue(variable: TemplateVariable): string;
159
238
  /**
160
239
  * Check if selector variable is available in templateVariables
@@ -168,7 +247,7 @@ export declare class TemplateVariablesFormComponent implements OnChanges {
168
247
  * Check if environment variable is available (testData with environment type)
169
248
  */
170
249
  get environmentVariableAvailable(): boolean;
171
- onDataTypeChange(variableName: string, dataType: 'plain-text' | 'parameter' | 'runtime' | 'environment'): void;
250
+ onDataTypeChange(variableName: string, dataType: 'plain-text' | 'parameter' | 'runtime' | 'environment' | 'global'): void;
172
251
  onElementSearch(event: {
173
252
  key: string;
174
253
  query: string;
@@ -223,6 +302,26 @@ export declare class TemplateVariablesFormComponent implements OnChanges {
223
302
  * Get select config for parameter dropdown (third dropdown for parameters - shows parameters from selected data set)
224
303
  */
225
304
  getParameterSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig;
305
+ /**
306
+ * Env-on-test-case contract: a test case has exactly one environment, so the
307
+ * "Environment Name" dropdown has nothing meaningful to choose from. We trust
308
+ * `testCaseEnvironmentName` as the source of truth — even if it's not in the
309
+ * loaded `environmentOptions` yet (those are async, env-scoped, and may be
310
+ * empty when the env has no parameters). The dropdown's `optionsArray.unshift`
311
+ * fallback in `getEnvironmentSelectConfig` ensures the value renders even when
312
+ * missing from the option list.
313
+ */
314
+ private resolveDefaultEnvironmentName;
315
+ /**
316
+ * Proactive companion to `resolveDefaultEnvironmentName`: walks every env-type
317
+ * template variable that hasn't been seeded yet and pre-fills its
318
+ * `selectedEnvironment` (plus the matching form control) with the test case's
319
+ * environment. Idempotent — variables that already have a selection are
320
+ * skipped. Called from `ngOnChanges` whenever the inputs that could unlock the
321
+ * seed (`testCaseEnvironmentName`, `environmentOptions`, `templateVariables`)
322
+ * change.
323
+ */
324
+ private seedDefaultEnvironmentForVariables;
226
325
  /**
227
326
  * Get unique environments from environment options
228
327
  */
@@ -310,6 +409,6 @@ export declare class TemplateVariablesFormComponent implements OnChanges {
310
409
  */
311
410
  isRuntimeType(variable: TemplateVariable): boolean;
312
411
  static ɵfac: i0.ɵɵFactoryDeclaration<TemplateVariablesFormComponent, never>;
313
- static ɵcmp: i0.ɵɵComponentDeclaration<TemplateVariablesFormComponent, "cqa-template-variables-form", never, { "templateVariables": "templateVariables"; "variablesForm": "variablesForm"; "metadata": "metadata"; "description": "description"; "elementOptions": "elementOptions"; "hasMoreElements": "hasMoreElements"; "isLoadingElements": "isLoadingElements"; "screenNameOptions": "screenNameOptions"; "hasMoreScreenNames": "hasMoreScreenNames"; "isLoadingScreenNames": "isLoadingScreenNames"; "parameterOptions": "parameterOptions"; "hasMoreParameters": "hasMoreParameters"; "isLoadingParameters": "isLoadingParameters"; "uploadOptions": "uploadOptions"; "hasMoreUploads": "hasMoreUploads"; "isLoadingUploads": "isLoadingUploads"; "environmentOptions": "environmentOptions"; "hasMoreEnvironments": "hasMoreEnvironments"; "isLoadingEnvironments": "isLoadingEnvironments"; "defaultTestDataProfileId": "defaultTestDataProfileId"; "defaultTestDataStartIndex": "defaultTestDataStartIndex"; "defaultTestDataEndIndex": "defaultTestDataEndIndex"; "isInsideForLoopStep": "isInsideForLoopStep"; "hasTestDataProfile": "hasTestDataProfile"; "isEditInDepth": "isEditInDepth"; "isDebug": "isDebug"; "createElementVisible": "createElementVisible"; }, { "variableValueChange": "variableValueChange"; "variableBooleanChange": "variableBooleanChange"; "metadataChange": "metadataChange"; "descriptionChange": "descriptionChange"; "loadMoreElements": "loadMoreElements"; "searchElements": "searchElements"; "searchElementsByScreenName": "searchElementsByScreenName"; "createElement": "createElement"; "searchScreenName": "searchScreenName"; "loadMoreScreenNames": "loadMoreScreenNames"; "createScreenNameRequest": "createScreenNameRequest"; "searchParameters": "searchParameters"; "loadMoreParameters": "loadMoreParameters"; "searchUploads": "searchUploads"; "loadMoreUploads": "loadMoreUploads"; "searchEnvironments": "searchEnvironments"; "loadMoreEnvironments": "loadMoreEnvironments"; "cancelElementForm": "cancelElementForm"; "elementFormVisibilityChange": "elementFormVisibilityChange"; }, never, never>;
412
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplateVariablesFormComponent, "cqa-template-variables-form", never, { "templateVariables": "templateVariables"; "variablesForm": "variablesForm"; "metadata": "metadata"; "description": "description"; "elementOptions": "elementOptions"; "hasMoreElements": "hasMoreElements"; "isLoadingElements": "isLoadingElements"; "screenNameOptions": "screenNameOptions"; "hasMoreScreenNames": "hasMoreScreenNames"; "isLoadingScreenNames": "isLoadingScreenNames"; "parameterOptions": "parameterOptions"; "hasMoreParameters": "hasMoreParameters"; "isLoadingParameters": "isLoadingParameters"; "uploadOptions": "uploadOptions"; "hasMoreUploads": "hasMoreUploads"; "isLoadingUploads": "isLoadingUploads"; "environmentOptions": "environmentOptions"; "hasMoreEnvironments": "hasMoreEnvironments"; "isLoadingEnvironments": "isLoadingEnvironments"; "globalVariableOptions": "globalVariableOptions"; "isLoadingGlobalVariables": "isLoadingGlobalVariables"; "testCaseEnvironmentName": "testCaseEnvironmentName"; "testCaseEnvironmentLabelSuffix": "testCaseEnvironmentLabelSuffix"; "environmentLegacyDeprecationMessage": "environmentLegacyDeprecationMessage"; "testCaseTestDataId": "testCaseTestDataId"; "defaultTestDataProfileId": "defaultTestDataProfileId"; "defaultTestDataStartIndex": "defaultTestDataStartIndex"; "defaultTestDataEndIndex": "defaultTestDataEndIndex"; "isInsideForLoopStep": "isInsideForLoopStep"; "hasTestDataProfile": "hasTestDataProfile"; "isEditInDepth": "isEditInDepth"; "isDebug": "isDebug"; "createElementVisible": "createElementVisible"; }, { "variableValueChange": "variableValueChange"; "variableBooleanChange": "variableBooleanChange"; "metadataChange": "metadataChange"; "descriptionChange": "descriptionChange"; "loadMoreElements": "loadMoreElements"; "searchElements": "searchElements"; "searchElementsByScreenName": "searchElementsByScreenName"; "createElement": "createElement"; "searchScreenName": "searchScreenName"; "loadMoreScreenNames": "loadMoreScreenNames"; "createScreenNameRequest": "createScreenNameRequest"; "searchParameters": "searchParameters"; "loadMoreParameters": "loadMoreParameters"; "searchUploads": "searchUploads"; "loadMoreUploads": "loadMoreUploads"; "searchEnvironments": "searchEnvironments"; "loadMoreEnvironments": "loadMoreEnvironments"; "searchGlobalVariables": "searchGlobalVariables"; "cancelElementForm": "cancelElementForm"; "elementFormVisibilityChange": "elementFormVisibilityChange"; }, never, never>;
314
413
  }
315
414
  export {};
@@ -116,6 +116,12 @@ export declare class ModularTableTemplateComponent implements OnInit, OnChanges,
116
116
  filteredRows: any[];
117
117
  pagedRows: any[];
118
118
  folders: FolderNode[];
119
+ /** Host-provided snapshot of root-level folders for the "Organised" grid.
120
+ * When set, takes precedence over `this.folders` for `rootFolderTiles` so
121
+ * the Organised section stays stable while sidebar search swaps `folders`
122
+ * to a filtered result set. Mirrors the host-driven fallback pattern used
123
+ * by `selectedFolderNode` (subfolders) and `selectedFolderTrail` (breadcrumb). */
124
+ rootFolders: FolderNode[] | null;
119
125
  selectedFolderId: number | null;
120
126
  expandedFolderIds: number[];
121
127
  unorganisedCount: number;
@@ -372,6 +378,10 @@ export declare class ModularTableTemplateComponent implements OnInit, OnChanges,
372
378
  get arrowClasses(): string;
373
379
  /**
374
380
  * Flat list of root-level folders for the "Organised" grid on the root view.
381
+ * Prefers the host-provided `rootFolders` snapshot when set — analogous to
382
+ * how `subfolderTiles` falls back to `selectedFolderNode` and `breadcrumbTrail`
383
+ * falls back to `selectedFolderTrail` when `folders` has been swapped to a
384
+ * search-results list. Falls back to `this.folders` otherwise.
375
385
  */
376
386
  get rootFolderTiles(): FolderNode[];
377
387
  /**
@@ -426,7 +436,10 @@ export declare class ModularTableTemplateComponent implements OnInit, OnChanges,
426
436
  /** Horizontal-scroll handler for the "Organised" root tiles. Emits
427
437
  * `rootLoadMoreRequested` when the user scrolls within
428
438
  * `GRID_SCROLL_LOAD_THRESHOLD_PX` of the right edge AND more roots are
429
- * available on the backend. Throttled by `lastRootGridLoadAt`. */
439
+ * available on the backend. Throttled by `lastRootGridLoadAt`.
440
+ * Uses `rootFolderTiles.length` (not `folders.length`) so the gate stays
441
+ * correct when `rootFolders` decouples the Organised grid from the
442
+ * search-filtered `folders` input. */
430
443
  onRootGridScroll(event: Event): void;
431
444
  /** Horizontal-scroll handler for the "Subfolders in X" tiles. Emits
432
445
  * `folderLoadMoreRequested({ id: selectedFolderId, nextPage })` when the
@@ -520,5 +533,5 @@ export declare class ModularTableTemplateComponent implements OnInit, OnChanges,
520
533
  */
521
534
  buildRowDragPayload: (row: any) => Array<string | number>;
522
535
  static ɵfac: i0.ɵɵFactoryDeclaration<ModularTableTemplateComponent, never>;
523
- static ɵcmp: i0.ɵɵComponentDeclaration<ModularTableTemplateComponent, "cqa-modular-table-template", never, { "searchPlaceholder": "searchPlaceholder"; "searchValue": "searchValue"; "showClear": "showClear"; "showSearchBar": "showSearchBar"; "showExportButton": "showExportButton"; "isExporting": "isExporting"; "filterConfig": "filterConfig"; "filterModel": "filterModel"; "showFilterPanel": "showFilterPanel"; "showFilterButton": "showFilterButton"; "otherButtons": "otherButtons"; "otherDropDownButtons": "otherDropDownButtons"; "otherSelectDropDownButtons": "otherSelectDropDownButtons"; "otherButtonLabel": "otherButtonLabel"; "otherButtonVariant": "otherButtonVariant"; "showOtherButton": "showOtherButton"; "showActionButton": "showActionButton"; "showSettingsButton": "showSettingsButton"; "showAutoRefreshButton": "showAutoRefreshButton"; "showViewModeToggle": "showViewModeToggle"; "viewMode": "viewMode"; "viewModeLabels": "viewModeLabels"; "data": "data"; "isEmptyState": "isEmptyState"; "emptyStateConfig": "emptyStateConfig"; "actions": "actions"; "chips": "chips"; "filterApplied": "filterApplied"; "columns": "columns"; "rowSelectable": "rowSelectable"; "selectedAutoRefreshInterval": "selectedAutoRefreshInterval"; "pageIndex": "pageIndex"; "pageSize": "pageSize"; "pageSizeOptions": "pageSizeOptions"; "pageSizeMenuDirection": "pageSizeMenuDirection"; "serverSidePagination": "serverSidePagination"; "totalElements": "totalElements"; "enableLocalSort": "enableLocalSort"; "isTableLoading": "isTableLoading"; "isTableDataLoading": "isTableDataLoading"; "cellJsonPathGetter": "cellJsonPathGetter"; "onJsonPathCopiedHandler": "onJsonPathCopiedHandler"; "selectedItems": "selectedItems"; "showSelectAllInToolbar": "showSelectAllInToolbar"; "showDismissInToolbar": "showDismissInToolbar"; "allSelectedInToolbar": "allSelectedInToolbar"; "folders": "folders"; "selectedFolderId": "selectedFolderId"; "expandedFolderIds": "expandedFolderIds"; "unorganisedCount": "unorganisedCount"; "folderIdAccessor": "folderIdAccessor"; "modularConfig": "modularConfig"; "modularLabels": "modularLabels"; "bulkActions": "bulkActions"; "sidebarCollapsed": "sidebarCollapsed"; "serverSideSearch": "serverSideSearch"; "rootTotal": "rootTotal"; "folderSearchLoading": "folderSearchLoading"; "rootFoldersLoading": "rootFoldersLoading"; "selectedFolderNode": "selectedFolderNode"; "selectedFolderTrail": "selectedFolderTrail"; "useInternalDialogs": "useInternalDialogs"; "showReorderButton": "showReorderButton"; "reorderSaving": "reorderSaving"; "reorderLabels": "reorderLabels"; "columnVisibility": "columnVisibility"; }, { "onSearchChange": "onSearchChange"; "onExportClick": "onExportClick"; "onApplyFilterClick": "onApplyFilterClick"; "onResetFilterClick": "onResetFilterClick"; "onClearAll": "onClearAll"; "removeChip": "removeChip"; "viewModeChange": "viewModeChange"; "pageChange": "pageChange"; "sortChange": "sortChange"; "folderSelected": "folderSelected"; "folderExpansionToggled": "folderExpansionToggled"; "folderChildrenRequested": "folderChildrenRequested"; "folderLoadMoreRequested": "folderLoadMoreRequested"; "rootLoadMoreRequested": "rootLoadMoreRequested"; "folderSearchChange": "folderSearchChange"; "folderCreated": "folderCreated"; "folderCreateRequested": "folderCreateRequested"; "folderRenamed": "folderRenamed"; "folderDeleted": "folderDeleted"; "testsMoved": "testsMoved"; "bulkActionClick": "bulkActionClick"; "bulkSelectAllChange": "bulkSelectAllChange"; "bulkDismiss": "bulkDismiss"; "bulkActionInvoked": "bulkActionInvoked"; "sidebarCollapsedChange": "sidebarCollapsedChange"; "reorderStart": "reorderStart"; "reorderCancel": "reorderCancel"; "reorderSave": "reorderSave"; "moveRequested": "moveRequested"; "selectedItemsChange": "selectedItemsChange"; "folderDeleteRequested": "folderDeleteRequested"; "folderMoveRequested": "folderMoveRequested"; "folderMoved": "folderMoved"; "folderDuplicateRequested": "folderDuplicateRequested"; "onReload": "onReload"; "onAutoRefreshClick": "onAutoRefreshClick"; "columnVisibilityChange": "columnVisibilityChange"; "autoRefreshIntervalChange": "autoRefreshIntervalChange"; }, never, never>;
536
+ static ɵcmp: i0.ɵɵComponentDeclaration<ModularTableTemplateComponent, "cqa-modular-table-template", never, { "searchPlaceholder": "searchPlaceholder"; "searchValue": "searchValue"; "showClear": "showClear"; "showSearchBar": "showSearchBar"; "showExportButton": "showExportButton"; "isExporting": "isExporting"; "filterConfig": "filterConfig"; "filterModel": "filterModel"; "showFilterPanel": "showFilterPanel"; "showFilterButton": "showFilterButton"; "otherButtons": "otherButtons"; "otherDropDownButtons": "otherDropDownButtons"; "otherSelectDropDownButtons": "otherSelectDropDownButtons"; "otherButtonLabel": "otherButtonLabel"; "otherButtonVariant": "otherButtonVariant"; "showOtherButton": "showOtherButton"; "showActionButton": "showActionButton"; "showSettingsButton": "showSettingsButton"; "showAutoRefreshButton": "showAutoRefreshButton"; "showViewModeToggle": "showViewModeToggle"; "viewMode": "viewMode"; "viewModeLabels": "viewModeLabels"; "data": "data"; "isEmptyState": "isEmptyState"; "emptyStateConfig": "emptyStateConfig"; "actions": "actions"; "chips": "chips"; "filterApplied": "filterApplied"; "columns": "columns"; "rowSelectable": "rowSelectable"; "selectedAutoRefreshInterval": "selectedAutoRefreshInterval"; "pageIndex": "pageIndex"; "pageSize": "pageSize"; "pageSizeOptions": "pageSizeOptions"; "pageSizeMenuDirection": "pageSizeMenuDirection"; "serverSidePagination": "serverSidePagination"; "totalElements": "totalElements"; "enableLocalSort": "enableLocalSort"; "isTableLoading": "isTableLoading"; "isTableDataLoading": "isTableDataLoading"; "cellJsonPathGetter": "cellJsonPathGetter"; "onJsonPathCopiedHandler": "onJsonPathCopiedHandler"; "selectedItems": "selectedItems"; "showSelectAllInToolbar": "showSelectAllInToolbar"; "showDismissInToolbar": "showDismissInToolbar"; "allSelectedInToolbar": "allSelectedInToolbar"; "folders": "folders"; "rootFolders": "rootFolders"; "selectedFolderId": "selectedFolderId"; "expandedFolderIds": "expandedFolderIds"; "unorganisedCount": "unorganisedCount"; "folderIdAccessor": "folderIdAccessor"; "modularConfig": "modularConfig"; "modularLabels": "modularLabels"; "bulkActions": "bulkActions"; "sidebarCollapsed": "sidebarCollapsed"; "serverSideSearch": "serverSideSearch"; "rootTotal": "rootTotal"; "folderSearchLoading": "folderSearchLoading"; "rootFoldersLoading": "rootFoldersLoading"; "selectedFolderNode": "selectedFolderNode"; "selectedFolderTrail": "selectedFolderTrail"; "useInternalDialogs": "useInternalDialogs"; "showReorderButton": "showReorderButton"; "reorderSaving": "reorderSaving"; "reorderLabels": "reorderLabels"; "columnVisibility": "columnVisibility"; }, { "onSearchChange": "onSearchChange"; "onExportClick": "onExportClick"; "onApplyFilterClick": "onApplyFilterClick"; "onResetFilterClick": "onResetFilterClick"; "onClearAll": "onClearAll"; "removeChip": "removeChip"; "viewModeChange": "viewModeChange"; "pageChange": "pageChange"; "sortChange": "sortChange"; "folderSelected": "folderSelected"; "folderExpansionToggled": "folderExpansionToggled"; "folderChildrenRequested": "folderChildrenRequested"; "folderLoadMoreRequested": "folderLoadMoreRequested"; "rootLoadMoreRequested": "rootLoadMoreRequested"; "folderSearchChange": "folderSearchChange"; "folderCreated": "folderCreated"; "folderCreateRequested": "folderCreateRequested"; "folderRenamed": "folderRenamed"; "folderDeleted": "folderDeleted"; "testsMoved": "testsMoved"; "bulkActionClick": "bulkActionClick"; "bulkSelectAllChange": "bulkSelectAllChange"; "bulkDismiss": "bulkDismiss"; "bulkActionInvoked": "bulkActionInvoked"; "sidebarCollapsedChange": "sidebarCollapsedChange"; "reorderStart": "reorderStart"; "reorderCancel": "reorderCancel"; "reorderSave": "reorderSave"; "moveRequested": "moveRequested"; "selectedItemsChange": "selectedItemsChange"; "folderDeleteRequested": "folderDeleteRequested"; "folderMoveRequested": "folderMoveRequested"; "folderMoved": "folderMoved"; "folderDuplicateRequested": "folderDuplicateRequested"; "onReload": "onReload"; "onAutoRefreshClick": "onAutoRefreshClick"; "columnVisibilityChange": "columnVisibilityChange"; "autoRefreshIntervalChange": "autoRefreshIntervalChange"; }, never, never>;
524
537
  }
@@ -31,6 +31,13 @@ export declare class TableTemplateComponent implements OnInit, OnChanges, OnDest
31
31
  otherButtons: TemplateRef<any>[];
32
32
  otherDropDownButtons: TemplateRef<any>[];
33
33
  otherSelectDropDownButtons: TemplateRef<any>[];
34
+ /**
35
+ * Optional template rendered between the search/toolbar row and the
36
+ * selected-filters chip block. Used to slot in feature-specific filters
37
+ * (e.g. Global Data's tag chip bar) so they sit visually inside the
38
+ * table-template's sticky header instead of floating above it.
39
+ */
40
+ tagFilterTemplate?: TemplateRef<any>;
34
41
  /** @deprecated Use otherButtons array instead */
35
42
  otherButtonLabel: string;
36
43
  /** @deprecated Use otherButtons array instead */
@@ -201,5 +208,5 @@ export declare class TableTemplateComponent implements OnInit, OnChanges, OnDest
201
208
  }>;
202
209
  get arrowClasses(): string;
203
210
  static ɵfac: i0.ɵɵFactoryDeclaration<TableTemplateComponent, never>;
204
- static ɵcmp: i0.ɵɵComponentDeclaration<TableTemplateComponent, "cqa-table-template", never, { "searchPlaceholder": "searchPlaceholder"; "searchValue": "searchValue"; "showClear": "showClear"; "showSearchBar": "showSearchBar"; "showExportButton": "showExportButton"; "isExporting": "isExporting"; "filterConfig": "filterConfig"; "filterModel": "filterModel"; "showFilterPanel": "showFilterPanel"; "showFilterButton": "showFilterButton"; "otherButtons": "otherButtons"; "otherDropDownButtons": "otherDropDownButtons"; "otherSelectDropDownButtons": "otherSelectDropDownButtons"; "otherButtonLabel": "otherButtonLabel"; "otherButtonVariant": "otherButtonVariant"; "showOtherButton": "showOtherButton"; "showActionButton": "showActionButton"; "showSettingsButton": "showSettingsButton"; "showAutoRefreshButton": "showAutoRefreshButton"; "showViewModeToggle": "showViewModeToggle"; "viewMode": "viewMode"; "viewModeLabels": "viewModeLabels"; "data": "data"; "isEmptyState": "isEmptyState"; "emptyStateConfig": "emptyStateConfig"; "actions": "actions"; "chips": "chips"; "filterApplied": "filterApplied"; "columns": "columns"; "rowSelectable": "rowSelectable"; "selectedAutoRefreshInterval": "selectedAutoRefreshInterval"; "pageIndex": "pageIndex"; "pageSize": "pageSize"; "pageSizeOptions": "pageSizeOptions"; "pageSizeMenuDirection": "pageSizeMenuDirection"; "serverSidePagination": "serverSidePagination"; "totalElements": "totalElements"; "enableLocalSort": "enableLocalSort"; "isTableLoading": "isTableLoading"; "isTableDataLoading": "isTableDataLoading"; "cellJsonPathGetter": "cellJsonPathGetter"; "onJsonPathCopiedHandler": "onJsonPathCopiedHandler"; "selectedItems": "selectedItems"; "showSelectAllInToolbar": "showSelectAllInToolbar"; "showDismissInToolbar": "showDismissInToolbar"; "allSelectedInToolbar": "allSelectedInToolbar"; "columnVisibility": "columnVisibility"; }, { "onSearchChange": "onSearchChange"; "onExportClick": "onExportClick"; "onApplyFilterClick": "onApplyFilterClick"; "onResetFilterClick": "onResetFilterClick"; "onClearAll": "onClearAll"; "removeChip": "removeChip"; "viewModeChange": "viewModeChange"; "pageChange": "pageChange"; "sortChange": "sortChange"; "onReload": "onReload"; "onAutoRefreshClick": "onAutoRefreshClick"; "columnVisibilityChange": "columnVisibilityChange"; "autoRefreshIntervalChange": "autoRefreshIntervalChange"; "bulkActionClick": "bulkActionClick"; "bulkSelectAllChange": "bulkSelectAllChange"; "bulkDismiss": "bulkDismiss"; "selectedItemsChange": "selectedItemsChange"; }, never, never>;
211
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableTemplateComponent, "cqa-table-template", never, { "searchPlaceholder": "searchPlaceholder"; "searchValue": "searchValue"; "showClear": "showClear"; "showSearchBar": "showSearchBar"; "showExportButton": "showExportButton"; "isExporting": "isExporting"; "filterConfig": "filterConfig"; "filterModel": "filterModel"; "showFilterPanel": "showFilterPanel"; "showFilterButton": "showFilterButton"; "otherButtons": "otherButtons"; "otherDropDownButtons": "otherDropDownButtons"; "otherSelectDropDownButtons": "otherSelectDropDownButtons"; "tagFilterTemplate": "tagFilterTemplate"; "otherButtonLabel": "otherButtonLabel"; "otherButtonVariant": "otherButtonVariant"; "showOtherButton": "showOtherButton"; "showActionButton": "showActionButton"; "showSettingsButton": "showSettingsButton"; "showAutoRefreshButton": "showAutoRefreshButton"; "showViewModeToggle": "showViewModeToggle"; "viewMode": "viewMode"; "viewModeLabels": "viewModeLabels"; "data": "data"; "isEmptyState": "isEmptyState"; "emptyStateConfig": "emptyStateConfig"; "actions": "actions"; "chips": "chips"; "filterApplied": "filterApplied"; "columns": "columns"; "rowSelectable": "rowSelectable"; "selectedAutoRefreshInterval": "selectedAutoRefreshInterval"; "pageIndex": "pageIndex"; "pageSize": "pageSize"; "pageSizeOptions": "pageSizeOptions"; "pageSizeMenuDirection": "pageSizeMenuDirection"; "serverSidePagination": "serverSidePagination"; "totalElements": "totalElements"; "enableLocalSort": "enableLocalSort"; "isTableLoading": "isTableLoading"; "isTableDataLoading": "isTableDataLoading"; "cellJsonPathGetter": "cellJsonPathGetter"; "onJsonPathCopiedHandler": "onJsonPathCopiedHandler"; "selectedItems": "selectedItems"; "showSelectAllInToolbar": "showSelectAllInToolbar"; "showDismissInToolbar": "showDismissInToolbar"; "allSelectedInToolbar": "allSelectedInToolbar"; "columnVisibility": "columnVisibility"; }, { "onSearchChange": "onSearchChange"; "onExportClick": "onExportClick"; "onApplyFilterClick": "onApplyFilterClick"; "onResetFilterClick": "onResetFilterClick"; "onClearAll": "onClearAll"; "removeChip": "removeChip"; "viewModeChange": "viewModeChange"; "pageChange": "pageChange"; "sortChange": "sortChange"; "onReload": "onReload"; "onAutoRefreshClick": "onAutoRefreshClick"; "columnVisibilityChange": "columnVisibilityChange"; "autoRefreshIntervalChange": "autoRefreshIntervalChange"; "bulkActionClick": "bulkActionClick"; "bulkSelectAllChange": "bulkSelectAllChange"; "bulkDismiss": "bulkDismiss"; "selectedItemsChange": "selectedItemsChange"; }, never, never>;
205
212
  }
@@ -219,6 +219,19 @@ export declare class ApiEditStepComponent implements OnChanges, OnInit, AfterVie
219
219
  isLoadingEnvironments: boolean;
220
220
  /** URL field options when an environment is selected (base URL + parameters as *|key|). Parent fills this when environmentChange fires. */
221
221
  urlOptions: CqaAutocompleteOption[];
222
+ /** Resolved test-case env name; drives banner + env-dropdown auto-select + lock. */
223
+ testCaseEnvironmentName?: string;
224
+ /** Suffix appended to the env-name option label (e.g. '(default)'). Also locks the env dropdown. */
225
+ testCaseEnvironmentLabelSuffix?: string;
226
+ /** Italic note rendered under env dropdown (legacy step-env deprecation). */
227
+ environmentLegacyDeprecationMessage?: string;
228
+ /**
229
+ * True only under Tier 1 (testCase.environmentId set). Hides the
230
+ * Environments picker — the env banner already states it. Tier 2/3 keep
231
+ * the picker visible. Both 'no suffix' AND 'no deprecation' are required
232
+ * because Tier 2 leaves suffix undefined but populates the env name.
233
+ */
234
+ get hideEnvironmentNameField(): boolean;
222
235
  /** Config for environment dropdown (updated when environmentOptions changes to avoid new reference every CD) */
223
236
  environmentSelectConfig: DynamicSelectFieldConfig;
224
237
  private static toSelectOption;
@@ -538,5 +551,5 @@ export declare class ApiEditStepComponent implements OnChanges, OnInit, AfterVie
538
551
  */
539
552
  private scrollPreviewIntoView;
540
553
  static ɵfac: i0.ɵɵFactoryDeclaration<ApiEditStepComponent, never>;
541
- static ɵcmp: i0.ɵɵComponentDeclaration<ApiEditStepComponent, "cqa-api-edit-step", never, { "initialMethod": "initialMethod"; "initialEnvironment": "initialEnvironment"; "initialStep": "initialStep"; "initialUrl": "initialUrl"; "initialPayloadTab": "initialPayloadTab"; "initialPayloadType": "initialPayloadType"; "initialPayloadText": "initialPayloadText"; "initialSummary": "initialSummary"; "initialHeaders": "initialHeaders"; "initialResponsePreview": "initialResponsePreview"; "initialVariableName": "initialVariableName"; "initialResponseBodyVerifications": "initialResponseBodyVerifications"; "initialStatusVerifications": "initialStatusVerifications"; "initialActiveResponseVerificationTab": "initialActiveResponseVerificationTab"; "editMode": "editMode"; "isCreatingStep": "isCreatingStep"; "httpMethodOptions": "httpMethodOptions"; "environmentOptions": "environmentOptions"; "hasMoreEnvironments": "hasMoreEnvironments"; "isLoadingEnvironments": "isLoadingEnvironments"; "urlOptions": "urlOptions"; "authTypeOptions": "authTypeOptions"; "initialAuthType": "initialAuthType"; "formatOptions": "formatOptions"; "initialFormat": "initialFormat"; "headerNameOptions": "headerNameOptions"; "verificationOptions": "verificationOptions"; "verificationDataTypeOptions": "verificationDataTypeOptions"; "statusVerificationOptions": "statusVerificationOptions"; "advancedSettingsVariables": "advancedSettingsVariables"; }, { "importCurl": "importCurl"; "importCurlCancel": "importCurlCancel"; "sendRequest": "sendRequest"; "back": "back"; "cancel": "cancel"; "next": "next"; "create": "create"; "headersChange": "headersChange"; "environmentChange": "environmentChange"; "environmentSearch": "environmentSearch"; "environmentLoadMore": "environmentLoadMore"; }, never, never>;
554
+ static ɵcmp: i0.ɵɵComponentDeclaration<ApiEditStepComponent, "cqa-api-edit-step", never, { "initialMethod": "initialMethod"; "initialEnvironment": "initialEnvironment"; "initialStep": "initialStep"; "initialUrl": "initialUrl"; "initialPayloadTab": "initialPayloadTab"; "initialPayloadType": "initialPayloadType"; "initialPayloadText": "initialPayloadText"; "initialSummary": "initialSummary"; "initialHeaders": "initialHeaders"; "initialResponsePreview": "initialResponsePreview"; "initialVariableName": "initialVariableName"; "initialResponseBodyVerifications": "initialResponseBodyVerifications"; "initialStatusVerifications": "initialStatusVerifications"; "initialActiveResponseVerificationTab": "initialActiveResponseVerificationTab"; "editMode": "editMode"; "isCreatingStep": "isCreatingStep"; "httpMethodOptions": "httpMethodOptions"; "environmentOptions": "environmentOptions"; "hasMoreEnvironments": "hasMoreEnvironments"; "isLoadingEnvironments": "isLoadingEnvironments"; "urlOptions": "urlOptions"; "testCaseEnvironmentName": "testCaseEnvironmentName"; "testCaseEnvironmentLabelSuffix": "testCaseEnvironmentLabelSuffix"; "environmentLegacyDeprecationMessage": "environmentLegacyDeprecationMessage"; "authTypeOptions": "authTypeOptions"; "initialAuthType": "initialAuthType"; "formatOptions": "formatOptions"; "initialFormat": "initialFormat"; "headerNameOptions": "headerNameOptions"; "verificationOptions": "verificationOptions"; "verificationDataTypeOptions": "verificationDataTypeOptions"; "statusVerificationOptions": "statusVerificationOptions"; "advancedSettingsVariables": "advancedSettingsVariables"; }, { "importCurl": "importCurl"; "importCurlCancel": "importCurlCancel"; "sendRequest": "sendRequest"; "back": "back"; "cancel": "cancel"; "next": "next"; "create": "create"; "headersChange": "headersChange"; "environmentChange": "environmentChange"; "environmentSearch": "environmentSearch"; "environmentLoadMore": "environmentLoadMore"; }, never, never>;
542
555
  }
@@ -0,0 +1,42 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { SegmentOption } from '../../segment-control/segment-control.component';
3
+ import { DataLibrarySubTab, ElementCardVm, ProfileCardVm } from './data-library-panel.models';
4
+ import * as i0 from "@angular/core";
5
+ export declare class DataLibraryPanelComponent {
6
+ searchTerm: string;
7
+ searchPlaceholder: string;
8
+ /** The active environment name, e.g. "QA". Empty/undefined renders "this test case" in the banner and hides the env chip on profile cards. */
9
+ environmentName?: string;
10
+ activeSubTab: DataLibrarySubTab;
11
+ elements: ElementCardVm[];
12
+ profiles: ProfileCardVm[];
13
+ isLoadingElements: boolean;
14
+ isLoadingProfiles: boolean;
15
+ selectedElementId: number | string | null;
16
+ hasEnvironment: boolean;
17
+ showElementsLink: boolean;
18
+ showManageProfilesLink: boolean;
19
+ searchTermChange: EventEmitter<string>;
20
+ search: EventEmitter<string>;
21
+ searchCleared: EventEmitter<void>;
22
+ activeSubTabChange: EventEmitter<DataLibrarySubTab>;
23
+ elementCardClick: EventEmitter<string | number>;
24
+ viewFullElementsClick: EventEmitter<void>;
25
+ manageProfilesClick: EventEmitter<void>;
26
+ /** Stable reference required by cqa-segment-control. */
27
+ readonly segments: SegmentOption[];
28
+ /** Stable iteration source for skeleton placeholders during loading. */
29
+ readonly skeletonCards: number[];
30
+ onSearchValueChange(value: string): void;
31
+ onSearchSubmit(value: string): void;
32
+ onSearchCleared(): void;
33
+ onSegmentChange(value: string): void;
34
+ onElementClick(id: number | string): void;
35
+ onViewFullElements(event: Event): void;
36
+ onManageProfiles(event: Event): void;
37
+ trackByElementId(_i: number, item: ElementCardVm): number | string;
38
+ trackByAttachmentId(_i: number, item: ProfileCardVm): number | string;
39
+ get bannerLabel(): string;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<DataLibraryPanelComponent, never>;
41
+ static ɵcmp: i0.ɵɵComponentDeclaration<DataLibraryPanelComponent, "cqa-data-library-panel", never, { "searchTerm": "searchTerm"; "searchPlaceholder": "searchPlaceholder"; "environmentName": "environmentName"; "activeSubTab": "activeSubTab"; "elements": "elements"; "profiles": "profiles"; "isLoadingElements": "isLoadingElements"; "isLoadingProfiles": "isLoadingProfiles"; "selectedElementId": "selectedElementId"; "hasEnvironment": "hasEnvironment"; "showElementsLink": "showElementsLink"; "showManageProfilesLink": "showManageProfilesLink"; }, { "searchTermChange": "searchTermChange"; "search": "search"; "searchCleared": "searchCleared"; "activeSubTabChange": "activeSubTabChange"; "elementCardClick": "elementCardClick"; "viewFullElementsClick": "viewFullElementsClick"; "manageProfilesClick": "manageProfilesClick"; }, never, never>;
42
+ }
@@ -0,0 +1,17 @@
1
+ export interface ElementCardVm {
2
+ id: number | string;
3
+ name: string;
4
+ screen: string;
5
+ updatedRelative: string;
6
+ locatorBadge: string;
7
+ }
8
+ export interface ProfileCardVm {
9
+ attachmentId: number | string;
10
+ testDataId: number | string;
11
+ name: string;
12
+ rowsCount: number;
13
+ columnsCount: number;
14
+ permission: 'RO' | 'RW' | null;
15
+ activeOnTestCase: boolean;
16
+ }
17
+ export declare type DataLibrarySubTab = 'elements' | 'profiles';
@@ -0,0 +1,13 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ElementCardComponent {
4
+ name: string;
5
+ screen: string;
6
+ updatedRelative: string;
7
+ locatorBadge: string;
8
+ selected: boolean;
9
+ cardClick: EventEmitter<void>;
10
+ onClick(): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<ElementCardComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<ElementCardComponent, "cqa-element-card", never, { "name": "name"; "screen": "screen"; "updatedRelative": "updatedRelative"; "locatorBadge": "locatorBadge"; "selected": "selected"; }, { "cardClick": "cardClick"; }, never, never>;
13
+ }
@@ -0,0 +1,13 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class TestDataProfileCardComponent {
3
+ name: string;
4
+ rowsCount: number;
5
+ columnsCount: number;
6
+ environmentName?: string;
7
+ permission?: 'RO' | 'RW' | null;
8
+ activeOnTestCase: boolean;
9
+ get rowsLabel(): string;
10
+ get colsLabel(): string;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<TestDataProfileCardComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<TestDataProfileCardComponent, "cqa-test-data-profile-card", never, { "name": "name"; "rowsCount": "rowsCount"; "columnsCount": "columnsCount"; "environmentName": "environmentName"; "permission": "permission"; "activeOnTestCase": "activeOnTestCase"; }, {}, never, never>;
13
+ }
@@ -18,6 +18,10 @@ export interface SelectConfigOverride {
18
18
  searchable?: boolean;
19
19
  /** When true, triggers initial search on panel open (serverSearch mode). */
20
20
  initialFetchOnOpen?: boolean;
21
+ /** Disable the select (e.g. dependent dropdown waiting on a parent value). */
22
+ disabled?: boolean;
23
+ /** Override the placeholder shown when no value is selected. */
24
+ placeholder?: string;
21
25
  /** Callback when user types in search. Call API, then update options via selectConfigOverrides. */
22
26
  onSearch?: (query: string) => void;
23
27
  /** Callback when user scrolls to load more. Call API, append options via selectConfigOverrides. */
@@ -32,6 +36,7 @@ export declare const TEST_CASE_DETAILS_SELECT_KEYS: {
32
36
  readonly type: "type";
33
37
  readonly labels: "labels";
34
38
  readonly prerequisiteCases: "prerequisiteCases";
39
+ readonly environment: "environment";
35
40
  readonly testDataProfile: "testDataProfile";
36
41
  readonly testDataSet: "testDataSet";
37
42
  readonly videoRecording: "videoRecording";
@@ -50,6 +55,7 @@ export interface TestCaseDetailsEditFormData {
50
55
  priority: string;
51
56
  type?: string | number;
52
57
  labels: string[];
58
+ environmentId?: number | string | null;
53
59
  testDataProfileId?: number | string | null;
54
60
  testDataSetIndex?: number | string | null;
55
61
  configSections: TestCaseDetailsConfigSection[];
@@ -179,6 +185,7 @@ export declare class TestCaseDetailsEditComponent implements OnInit, OnChanges {
179
185
  /** Cached configs to avoid new object refs each change detection (prevents infinite loops) */
180
186
  readonly statusSelectConfig: DynamicSelectFieldConfig;
181
187
  readonly typeSelectConfig: DynamicSelectFieldConfig;
188
+ readonly environmentSelectConfig: DynamicSelectFieldConfig;
182
189
  readonly testDataProfileSelectConfig: DynamicSelectFieldConfig;
183
190
  readonly testDataSetSelectConfig: DynamicSelectFieldConfig;
184
191
  private readonly defaultPrerequisiteCaseOptions;
@@ -36,6 +36,7 @@ export declare const TEST_CASE_DETAILS_FIELD_MAP: {
36
36
  };
37
37
  /** Execution config */
38
38
  readonly execution: {
39
+ readonly environment: "environment";
39
40
  readonly prerequisiteCase: "prerequisiteCase";
40
41
  readonly defaultBrowser: "defaultBrowser";
41
42
  readonly videoRecording: "videoRecording";
@@ -74,6 +75,7 @@ export interface TestCaseDetailsApiData {
74
75
  type?: string;
75
76
  typeId?: number | string;
76
77
  environment?: string;
78
+ environmentId?: number | string | null;
77
79
  version?: string;
78
80
  testPlanName?: string;
79
81
  testPlanRedirectUrl?: string;
@@ -1,7 +1,15 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import type { ParameterScopeFilter, ParameterItem } from './test-data-modal-parameter.model';
3
3
  import type { EnvironmentItem } from './test-data-modal-environment.model';
4
- export declare type TestDataModalTab = 'plain-text' | 'parameter' | 'environment' | 'runtime';
4
+ export declare type TestDataModalTab = 'plain-text' | 'parameter' | 'environment' | 'runtime' | 'global';
5
+ /** Global Data list item supplied by the consuming app (workspace-scoped global variables). */
6
+ export interface GlobalVariableItem {
7
+ id: number | string;
8
+ name: string;
9
+ value: string;
10
+ type?: string;
11
+ readWriteMode?: string;
12
+ }
5
13
  /**
6
14
  * Config/data for Test Data Modal controls.
7
15
  * Mirrors Loop Step pattern: single config object holds all control state;
@@ -30,6 +38,20 @@ export interface TestDataModalData {
30
38
  environmentItems?: EnvironmentItem[];
31
39
  /** Runtime tab: value (independent from Plain Text / Parameter / Environment). */
32
40
  runtimeValue?: string;
41
+ /** Global Data tab: search query. */
42
+ globalVariableSearchQuery?: string;
43
+ /** Global Data tab: selected global variable id (for highlight). Always the variable name. */
44
+ selectedGlobalVariableId?: string | null;
45
+ /** Global Data tab: list of variables to display. */
46
+ globalVariables?: GlobalVariableItem[];
47
+ /** When set, the Test Data Profile (legacy "Parameter") tab is visible. */
48
+ testCaseTestDataId?: number | null;
49
+ /** Resolved test-case environment name. Drives Environment-tab subtitle. */
50
+ testCaseEnvironmentName?: string;
51
+ /** Suffix for the environment label (e.g. '(default)'). Applied at render only — selection state stays raw. */
52
+ testCaseEnvironmentLabelSuffix?: string;
53
+ /** Italic note rendered atop Environment tab body. Used for legacy step-level env deprecation. */
54
+ environmentLegacyDeprecationMessage?: string;
33
55
  }
34
56
  /** Sentinel returned from afterClosed() when user clicked "Edit in depth". */
35
57
  export declare const TEST_DATA_MODAL_EDIT_IN_DEPTH: unique symbol;
@@ -1,13 +1,17 @@
1
1
  import { ChangeDetectorRef, EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { FormBuilder, FormGroup } from '@angular/forms';
3
3
  import { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.component';
4
- import { TestDataModalData, TestDataModalTab } from './test-data-modal-data';
4
+ import { TestDataModalData, TestDataModalTab, GlobalVariableItem } from './test-data-modal-data';
5
5
  import { TestDataModalRef } from './test-data-modal-ref';
6
6
  import { TestDataModalResult } from './test-data-modal.service';
7
7
  import { EnvironmentItem } from './test-data-modal-environment.model';
8
8
  import { ParameterItem, ParameterScopeFilter } from './test-data-modal-parameter.model';
9
9
  import { CqaListItemConfig } from '../../item-list/item-list.model';
10
10
  import * as i0 from "@angular/core";
11
+ interface TabSegment {
12
+ label: string;
13
+ value: TestDataModalTab;
14
+ }
11
15
  export declare class TestDataModalComponent implements OnInit, OnChanges {
12
16
  private readonly fb;
13
17
  private readonly cdr;
@@ -22,10 +26,10 @@ export declare class TestDataModalComponent implements OnInit, OnChanges {
22
26
  parameterEdit: EventEmitter<string>;
23
27
  environmentCreate: EventEmitter<void>;
24
28
  environmentEdit: EventEmitter<string>;
25
- readonly tabSegments: {
26
- label: string;
27
- value: string;
28
- }[];
29
+ /** Server-side search for global variables. */
30
+ searchGlobalVariables: EventEmitter<string>;
31
+ /** Computed segments — recomputed in ngOnChanges, never as a getter (segment-control needs a stable ref). */
32
+ tabSegments: TabSegment[];
29
33
  readonly parameterFilterTabs: {
30
34
  label: string;
31
35
  value: ParameterScopeFilter;
@@ -34,6 +38,18 @@ export declare class TestDataModalComponent implements OnInit, OnChanges {
34
38
  parameters: ParameterItem[];
35
39
  /** Environment list from input, falls back to mock data if not provided. */
36
40
  environmentItems: EnvironmentItem[];
41
+ /** Global Data variables (workspace-scoped) for the new Global Data tab. */
42
+ globalVariables: GlobalVariableItem[];
43
+ /** True while the consuming app loads global variables (search/initial). */
44
+ isLoadingGlobalVariables: boolean;
45
+ /** When set, the Test Data Profile tab is shown — gated on test case having a TDP. */
46
+ testCaseTestDataId: number | null;
47
+ /** Resolved test-case environment name. Drives the Environment-tab subhead. */
48
+ testCaseEnvironmentName?: string;
49
+ /** Suffix on the env-name shown in the Environment tab (e.g. '(default)'). Render-only. */
50
+ testCaseEnvironmentLabelSuffix?: string;
51
+ /** Italic note rendered atop the Environment tab body — used for legacy step-level env deprecation. */
52
+ environmentLegacyDeprecationMessage?: string;
37
53
  /** Runtime tab: suggested variable chips. */
38
54
  readonly runtimeSuggestedValues: readonly string[];
39
55
  /** Form for all modal controls (same pattern as Loop Step editForm). */
@@ -56,10 +72,15 @@ export declare class TestDataModalComponent implements OnInit, OnChanges {
56
72
  selectedParameterId: string | null;
57
73
  environmentSearchQuery: string;
58
74
  selectedEnvironmentId: string | null;
75
+ globalVariableSearchQuery: string;
76
+ /** Stores the variable NAME (used as the id for the row, since names are unique within a workspace). */
77
+ selectedGlobalVariableId: string | null;
59
78
  runtimeValue: string;
60
79
  constructor(fb: FormBuilder, cdr: ChangeDetectorRef, ref: TestDataModalRef<TestDataModalResult>, data?: TestDataModalData);
61
80
  ngOnInit(): void;
62
81
  ngOnChanges(changes: SimpleChanges): void;
82
+ /** Memoize visible segments — `[segments]`-style refs must be stable across CD passes. */
83
+ private recomputeVisibleTabs;
63
84
  /** Build form with all control values (same pattern as Loop Step buildEditForm). */
64
85
  private buildEditForm;
65
86
  /** Build select configs once (same pattern as Loop Step buildSelectConfigs). */
@@ -74,6 +95,10 @@ export declare class TestDataModalComponent implements OnInit, OnChanges {
74
95
  get filteredEnvironments(): EnvironmentItem[];
75
96
  /** Parameter tab: list config for cqa-item-list (search-friendly: bind filtered list). */
76
97
  get parameterListConfig(): CqaListItemConfig[];
98
+ /** Filtered global variables by search (Global Data tab). */
99
+ get filteredGlobalVariables(): GlobalVariableItem[];
100
+ /** Global Data tab: list config (mirrors environment listing pattern). */
101
+ get globalVariableListConfig(): CqaListItemConfig[];
77
102
  /** Environment tab: list config for cqa-item-list. */
78
103
  get environmentListConfig(): CqaListItemConfig[];
79
104
  onTabChange(tabValue: string): void;
@@ -92,13 +117,22 @@ export declare class TestDataModalComponent implements OnInit, OnChanges {
92
117
  onEnvironmentSelect(itemId: string): void;
93
118
  onEnvironmentEdit(itemId: string): void;
94
119
  onCreateNewEnvironment(event: Event): void;
120
+ onGlobalVariableSearchInput(value: string): void;
121
+ onGlobalVariableSelect(name: string): void;
95
122
  /** Runtime tab: replace the runtime input with the selected suggestion. */
96
123
  onRuntimeChipInsert(snippet: string): void;
124
+ /**
125
+ * When the user picks a value in any tab, the others' visual selection must
126
+ * reset — the modal applies only the active tab's value, so keeping stale
127
+ * highlights confuses which one will land on Apply.
128
+ */
129
+ private clearSelectionsExcept;
97
130
  onApply(): void;
98
131
  onCancel(): void;
99
132
  onClose(): void;
100
133
  onEditInDepth(event: Event): void;
101
134
  onHelp(event: Event): void;
102
135
  static ɵfac: i0.ɵɵFactoryDeclaration<TestDataModalComponent, [null, null, null, { optional: true; }]>;
103
- static ɵcmp: i0.ɵɵComponentDeclaration<TestDataModalComponent, "cqa-test-data-modal", never, { "parameters": "parameters"; "environmentItems": "environmentItems"; "activeTab": "activeTab"; "value": "value"; "helpUrl": "helpUrl"; }, { "apply": "apply"; "cancel": "cancel"; "editInDepth": "editInDepth"; "parameterCreate": "parameterCreate"; "parameterEdit": "parameterEdit"; "environmentCreate": "environmentCreate"; "environmentEdit": "environmentEdit"; }, never, never>;
136
+ static ɵcmp: i0.ɵɵComponentDeclaration<TestDataModalComponent, "cqa-test-data-modal", never, { "parameters": "parameters"; "environmentItems": "environmentItems"; "globalVariables": "globalVariables"; "isLoadingGlobalVariables": "isLoadingGlobalVariables"; "testCaseTestDataId": "testCaseTestDataId"; "testCaseEnvironmentName": "testCaseEnvironmentName"; "testCaseEnvironmentLabelSuffix": "testCaseEnvironmentLabelSuffix"; "environmentLegacyDeprecationMessage": "environmentLegacyDeprecationMessage"; "activeTab": "activeTab"; "value": "value"; "helpUrl": "helpUrl"; }, { "apply": "apply"; "cancel": "cancel"; "editInDepth": "editInDepth"; "parameterCreate": "parameterCreate"; "parameterEdit": "parameterEdit"; "environmentCreate": "environmentCreate"; "environmentEdit": "environmentEdit"; "searchGlobalVariables": "searchGlobalVariables"; }, never, never>;
104
137
  }
138
+ export {};