@memberjunction/ng-dashboards 6.2.0-edge.2 → 6.2.0-edge.4
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.
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts +4 -3
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js +8 -5
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js.map +1 -1
- package/dist/AI/components/duplicates/compare-value.component.d.ts +67 -0
- package/dist/AI/components/duplicates/compare-value.component.d.ts.map +1 -0
- package/dist/AI/components/duplicates/compare-value.component.js +168 -0
- package/dist/AI/components/duplicates/compare-value.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +49 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +287 -169
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +77 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +116 -0
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +16 -4
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +2 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +12 -6
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-index-auto.d.ts +29 -0
- package/dist/AI/components/vectors/vector-index-auto.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-index-auto.js +59 -0
- package/dist/AI/components/vectors/vector-index-auto.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +9 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +65 -20
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +7 -3
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +3 -2
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +0 -3
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +5 -14
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +1 -0
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +1 -0
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +12 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/form-override-dialog.component.js +128 -81
- package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +12 -10
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts +14 -43
- package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-agent-context.js +6 -29
- package/dist/DashboardBrowser/dashboard-browser-agent-context.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +174 -321
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +522 -1195
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-library-filter.d.ts +116 -0
- package/dist/DashboardBrowser/dashboard-library-filter.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboard-library-filter.js +277 -0
- package/dist/DashboardBrowser/dashboard-library-filter.js.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboards-agent-tools.d.ts +26 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.js +32 -0
- package/dist/DashboardBrowser/dashboards-agent-tools.js.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts +58 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.js +391 -0
- package/dist/DashboardBrowser/dashboards-categories-resource.component.js.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts +37 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.js +68 -0
- package/dist/DashboardBrowser/dashboards-categories.helpers.js.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +295 -0
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.component.js +1022 -0
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.types.d.ts +23 -0
- package/dist/DashboardEditor/dashboard-editor.types.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-editor.types.js +3 -0
- package/dist/DashboardEditor/dashboard-editor.types.js.map +1 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.d.ts +11 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.d.ts.map +1 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.js +17 -0
- package/dist/DashboardEditor/dashboard-viewer-factory.js.map +1 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +30 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +349 -232
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +2 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.d.ts +0 -14
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +7 -29
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Home/home-agent-context.d.ts +29 -10
- package/dist/Home/home-agent-context.d.ts.map +1 -1
- package/dist/Home/home-agent-context.js +50 -24
- package/dist/Home/home-agent-context.js.map +1 -1
- package/dist/Home/home-dashboard-switcher.component.d.ts +95 -0
- package/dist/Home/home-dashboard-switcher.component.d.ts.map +1 -0
- package/dist/Home/home-dashboard-switcher.component.js +442 -0
- package/dist/Home/home-dashboard-switcher.component.js.map +1 -0
- package/dist/Home/home-dashboard.component.d.ts +330 -17
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +1702 -1014
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Home/home-menus.d.ts +38 -0
- package/dist/Home/home-menus.d.ts.map +1 -0
- package/dist/Home/home-menus.js +53 -0
- package/dist/Home/home-menus.js.map +1 -0
- package/dist/Home/home-pinned-dashboards.d.ts +33 -0
- package/dist/Home/home-pinned-dashboards.d.ts.map +1 -0
- package/dist/Home/home-pinned-dashboards.js +76 -0
- package/dist/Home/home-pinned-dashboards.js.map +1 -0
- package/dist/PredictiveStudio/components/ps-production.component.d.ts +5 -1
- package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-production.component.js +64 -41
- package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +3 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js +2 -2
- package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js.map +1 -1
- package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts +107 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.js +216 -0
- package/dist/TelephonyOperations/telephony-operations-agent-context.js.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts +58 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts.map +1 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.js +812 -0
- package/dist/TelephonyOperations/telephony-operations-dashboard.component.js.map +1 -0
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +7 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/WorkQueue/components/work-queue-bindings.component.d.ts +37 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.js +210 -0
- package/dist/WorkQueue/components/work-queue-bindings.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts +70 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.js +496 -0
- package/dist/WorkQueue/components/work-queue-dead-letters.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts +22 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.js +99 -0
- package/dist/WorkQueue/components/work-queue-discard-dialog.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-overview.component.d.ts +29 -0
- package/dist/WorkQueue/components/work-queue-overview.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-overview.component.js +278 -0
- package/dist/WorkQueue/components/work-queue-overview.component.js.map +1 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.d.ts +59 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.d.ts.map +1 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.js +359 -0
- package/dist/WorkQueue/components/work-queue-partitions.component.js.map +1 -0
- package/dist/WorkQueue/services/work-queue-operator.service.d.ts +22 -0
- package/dist/WorkQueue/services/work-queue-operator.service.d.ts.map +1 -0
- package/dist/WorkQueue/services/work-queue-operator.service.js +44 -0
- package/dist/WorkQueue/services/work-queue-operator.service.js.map +1 -0
- package/dist/WorkQueue/work-queue-agent-context.d.ts +67 -0
- package/dist/WorkQueue/work-queue-agent-context.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-agent-context.js +119 -0
- package/dist/WorkQueue/work-queue-agent-context.js.map +1 -0
- package/dist/WorkQueue/work-queue-dashboard.component.d.ts +94 -0
- package/dist/WorkQueue/work-queue-dashboard.component.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-dashboard.component.js +545 -0
- package/dist/WorkQueue/work-queue-dashboard.component.js.map +1 -0
- package/dist/WorkQueue/work-queue-types.d.ts +40 -0
- package/dist/WorkQueue/work-queue-types.d.ts.map +1 -0
- package/dist/WorkQueue/work-queue-types.js +2 -0
- package/dist/WorkQueue/work-queue-types.js.map +1 -0
- package/dist/ai-dashboards.module.d.ts +21 -20
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +4 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +69 -61
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +29 -2
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +1 -1
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +3 -1
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +14 -13
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +6 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +9 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/dashboard-library-changes.d.ts +23 -0
- package/dist/shared/dashboard-library-changes.d.ts.map +1 -0
- package/dist/shared/dashboard-library-changes.js +26 -0
- package/dist/shared/dashboard-library-changes.js.map +1 -0
- package/dist/shared/dashboard-owner-names.d.ts +17 -0
- package/dist/shared/dashboard-owner-names.d.ts.map +1 -0
- package/dist/shared/dashboard-owner-names.js +65 -0
- package/dist/shared/dashboard-owner-names.js.map +1 -0
- package/dist/shared/dashboard-recents.d.ts +34 -0
- package/dist/shared/dashboard-recents.d.ts.map +1 -0
- package/dist/shared/dashboard-recents.js +87 -0
- package/dist/shared/dashboard-recents.js.map +1 -0
- package/dist/shared/dashboards-app-install.d.ts +59 -0
- package/dist/shared/dashboards-app-install.d.ts.map +1 -0
- package/dist/shared/dashboards-app-install.js +97 -0
- package/dist/shared/dashboards-app-install.js.map +1 -0
- package/dist/shared/dashboards-app.helpers.d.ts +42 -0
- package/dist/shared/dashboards-app.helpers.d.ts.map +1 -0
- package/dist/shared/dashboards-app.helpers.js +143 -0
- package/dist/shared/dashboards-app.helpers.js.map +1 -0
- package/dist/work-queue-dashboards.module.d.ts +23 -0
- package/dist/work-queue-dashboards.module.d.ts.map +1 -0
- package/dist/work-queue-dashboards.module.js +92 -0
- package/dist/work-queue-dashboards.module.js.map +1 -0
- package/package.json +73 -66
|
@@ -10,17 +10,23 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Deep ("hardcore", Data-Explorer depth) enrichment: bounded name lists (cap
|
|
12
12
|
* {@link HOME_AGENT_CONTEXT_NAME_LIST_CAP} with a companion `*Count` flag when
|
|
13
|
-
* truncated) for apps, pins, pin groups, notifications, and
|
|
14
|
-
* recent-item summaries;
|
|
15
|
-
*
|
|
13
|
+
* truncated) for apps, pins, pin groups, notifications, recents and pinned
|
|
14
|
+
* dashboards; structured recent-item summaries; whether the Pinned section is
|
|
15
|
+
* collapsed; the Home view (the overview, or a dashboard by name and id and
|
|
16
|
+
* whether it is being edited); and a tolerant name resolver so the agent can
|
|
17
|
+
* open a pin / app / recent / pinned dashboard the way the user named it (exact
|
|
18
|
+
* name → partial contains).
|
|
16
19
|
*
|
|
17
20
|
* 🔒 SAFETY BOUNDARY: the Home dashboard exposes ONLY navigation / discovery /
|
|
18
|
-
* panel-toggle operations
|
|
19
|
-
* pin create / delete /
|
|
21
|
+
* panel-toggle operations; showing a pinned dashboard in Home is navigation. No
|
|
22
|
+
* helper here describes — and no tool may perform — pin create / delete /
|
|
23
|
+
* rename, group mutation, reordering, or dashboard create / rename / edit /
|
|
24
|
+
* save / delete.
|
|
20
25
|
*/
|
|
21
26
|
/**
|
|
22
27
|
* Upper bound on how many names we publish in a name-list context field
|
|
23
|
-
* (AvailableApps, PinnedItems, PinGroupNames, NotificationTitles, RecentItems
|
|
28
|
+
* (AvailableApps, PinnedItems, PinGroupNames, NotificationTitles, RecentItems,
|
|
29
|
+
* PinnedDashboardNames).
|
|
24
30
|
* Keeping the streamed note bounded avoids flooding the co-agent with hundreds of
|
|
25
31
|
* names; when the underlying list is larger we surface a companion total-count
|
|
26
32
|
* field instead.
|
|
@@ -98,16 +104,29 @@ export interface HomeAgentContextInput {
|
|
|
98
104
|
SidebarOpen: boolean;
|
|
99
105
|
/** Current search query inside the Add Pin panel (empty when not searching). */
|
|
100
106
|
AddPanelSearchQuery: string;
|
|
107
|
+
/** Whether the Pinned section is collapsed. */
|
|
108
|
+
PinnedCollapsed: boolean;
|
|
109
|
+
/** The dashboard Home shows in place of its overview: its name, or null on the overview. */
|
|
110
|
+
CurrentDashboardName: string | null;
|
|
111
|
+
/** ID of that dashboard, or null. */
|
|
112
|
+
CurrentDashboardID: string | null;
|
|
113
|
+
/** True while that dashboard is in edit mode. */
|
|
114
|
+
IsEditingDashboard: boolean;
|
|
115
|
+
/** Names of the pinned dashboards the Dashboards switcher lists, in pin order. */
|
|
116
|
+
PinnedDashboardNames: string[];
|
|
101
117
|
}
|
|
102
118
|
/**
|
|
103
119
|
* Build the agent-visible context object for the Home dashboard.
|
|
104
120
|
*
|
|
105
121
|
* Reports the app launcher state (app counts + names), the pin board state (pin
|
|
106
122
|
* counts + names + groups + edit mode), the notifications (count + bounded titles),
|
|
107
|
-
* the recents (count + bounded structured summaries), the Add Pin panel state,
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
123
|
+
* the recents (count + bounded structured summaries), the Add Pin panel state, the
|
|
124
|
+
* sidebar state, whether the Pinned section is collapsed, the Home view (the
|
|
125
|
+
* overview, or the dashboard Home shows by name and id and whether it is being
|
|
126
|
+
* edited) and the pinned dashboards' names. Each name list is bounded with a
|
|
127
|
+
* companion total-count when truncated. Keeping this a pure function (no `this`)
|
|
128
|
+
* makes the context shape unit-testable and decouples it from change-detection
|
|
129
|
+
* timing.
|
|
111
130
|
*
|
|
112
131
|
* @param input - the component's current state snapshot
|
|
113
132
|
* @returns a flat key-value object suitable for `SetAgentContext`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home-agent-context.d.ts","sourceRoot":"","sources":["../../src/Home/home-agent-context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"home-agent-context.d.ts","sourceRoot":"","sources":["../../src/Home/home-agent-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAUnD;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAW3G;AAED,kDAAkD;AAClD,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAE3G;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAG9G;AAED,sDAAsD;AACtD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAE9G;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mFAAmF;IACnF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,0DAA0D;IAC1D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,CAAC;IACzB,2FAA2F;IAC3F,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,gFAAgF;IAChF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,4FAA4F;IAC5F,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,qCAAqC;IACrC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iDAAiD;IACjD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kFAAkF;IAClF,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAClC;AA6BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+C3F;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE3F"}
|
|
@@ -10,17 +10,23 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Deep ("hardcore", Data-Explorer depth) enrichment: bounded name lists (cap
|
|
12
12
|
* {@link HOME_AGENT_CONTEXT_NAME_LIST_CAP} with a companion `*Count` flag when
|
|
13
|
-
* truncated) for apps, pins, pin groups, notifications, and
|
|
14
|
-
* recent-item summaries;
|
|
15
|
-
*
|
|
13
|
+
* truncated) for apps, pins, pin groups, notifications, recents and pinned
|
|
14
|
+
* dashboards; structured recent-item summaries; whether the Pinned section is
|
|
15
|
+
* collapsed; the Home view (the overview, or a dashboard by name and id and
|
|
16
|
+
* whether it is being edited); and a tolerant name resolver so the agent can
|
|
17
|
+
* open a pin / app / recent / pinned dashboard the way the user named it (exact
|
|
18
|
+
* name → partial contains).
|
|
16
19
|
*
|
|
17
20
|
* 🔒 SAFETY BOUNDARY: the Home dashboard exposes ONLY navigation / discovery /
|
|
18
|
-
* panel-toggle operations
|
|
19
|
-
* pin create / delete /
|
|
21
|
+
* panel-toggle operations; showing a pinned dashboard in Home is navigation. No
|
|
22
|
+
* helper here describes — and no tool may perform — pin create / delete /
|
|
23
|
+
* rename, group mutation, reordering, or dashboard create / rename / edit /
|
|
24
|
+
* save / delete.
|
|
20
25
|
*/
|
|
21
26
|
/**
|
|
22
27
|
* Upper bound on how many names we publish in a name-list context field
|
|
23
|
-
* (AvailableApps, PinnedItems, PinGroupNames, NotificationTitles, RecentItems
|
|
28
|
+
* (AvailableApps, PinnedItems, PinGroupNames, NotificationTitles, RecentItems,
|
|
29
|
+
* PinnedDashboardNames).
|
|
24
30
|
* Keeping the streamed note bounded avoids flooding the co-agent with hundreds of
|
|
25
31
|
* names; when the underlying list is larger we surface a companion total-count
|
|
26
32
|
* field instead.
|
|
@@ -74,15 +80,43 @@ export function BuildHomeNotFoundError(input, kind, candidates) {
|
|
|
74
80
|
export function buildHomeNotFoundError(input, kind, candidates) {
|
|
75
81
|
return BuildHomeNotFoundError(input, kind, candidates);
|
|
76
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Add a bounded name list under `key` when it is not empty, plus `countKey` with the true total
|
|
85
|
+
* when the list is longer than {@link HOME_AGENT_CONTEXT_NAME_LIST_CAP}.
|
|
86
|
+
*/
|
|
87
|
+
function addBoundedNames(context, key, countKey, names) {
|
|
88
|
+
if (names.length === 0) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
context[key] = capNames(names);
|
|
92
|
+
if (names.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {
|
|
93
|
+
context[countKey] = names.length;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Add the Home view (overview or a dashboard), the open dashboard and the pinned dashboards to the context. */
|
|
97
|
+
function addDashboardViewContext(context, input) {
|
|
98
|
+
context['HomeView'] = input.CurrentDashboardName ? 'Dashboard' : 'Overview';
|
|
99
|
+
if (input.CurrentDashboardName) {
|
|
100
|
+
context['CurrentDashboardName'] = input.CurrentDashboardName;
|
|
101
|
+
context['IsEditingDashboard'] = input.IsEditingDashboard;
|
|
102
|
+
if (input.CurrentDashboardID) {
|
|
103
|
+
context['CurrentDashboardID'] = input.CurrentDashboardID;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
addBoundedNames(context, 'PinnedDashboardNames', 'PinnedDashboardNameCount', input.PinnedDashboardNames);
|
|
107
|
+
}
|
|
77
108
|
/**
|
|
78
109
|
* Build the agent-visible context object for the Home dashboard.
|
|
79
110
|
*
|
|
80
111
|
* Reports the app launcher state (app counts + names), the pin board state (pin
|
|
81
112
|
* counts + names + groups + edit mode), the notifications (count + bounded titles),
|
|
82
|
-
* the recents (count + bounded structured summaries), the Add Pin panel state,
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
113
|
+
* the recents (count + bounded structured summaries), the Add Pin panel state, the
|
|
114
|
+
* sidebar state, whether the Pinned section is collapsed, the Home view (the
|
|
115
|
+
* overview, or the dashboard Home shows by name and id and whether it is being
|
|
116
|
+
* edited) and the pinned dashboards' names. Each name list is bounded with a
|
|
117
|
+
* companion total-count when truncated. Keeping this a pure function (no `this`)
|
|
118
|
+
* makes the context shape unit-testable and decouples it from change-detection
|
|
119
|
+
* timing.
|
|
86
120
|
*
|
|
87
121
|
* @param input - the component's current state snapshot
|
|
88
122
|
* @returns a flat key-value object suitable for `SetAgentContext`
|
|
@@ -100,6 +134,7 @@ export function BuildHomeAgentContext(input) {
|
|
|
100
134
|
EditMode: input.EditMode,
|
|
101
135
|
AddPanelOpen: input.AddPanelOpen,
|
|
102
136
|
SidebarOpen: input.SidebarOpen,
|
|
137
|
+
PinnedCollapsed: input.PinnedCollapsed,
|
|
103
138
|
};
|
|
104
139
|
// When the lists are longer than we publish names for, tell the co-agent the
|
|
105
140
|
// true totals so it knows the name lists are truncated.
|
|
@@ -109,20 +144,10 @@ export function BuildHomeAgentContext(input) {
|
|
|
109
144
|
if (input.PinNames.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {
|
|
110
145
|
context['PinnedItemNameCount'] = input.PinNames.length;
|
|
111
146
|
}
|
|
112
|
-
// Pin group names — bounded;
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
context['PinGroupNameCount'] = input.PinGroupNames.length;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Notification titles — bounded; only surfaced when there are unread notifications.
|
|
120
|
-
if (input.NotificationTitles.length > 0) {
|
|
121
|
-
context['NotificationTitles'] = capNames(input.NotificationTitles);
|
|
122
|
-
if (input.NotificationTitles.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {
|
|
123
|
-
context['NotificationTitleCount'] = input.NotificationTitles.length;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
147
|
+
// Pin group names and unread notification titles — bounded; only surfaced when
|
|
148
|
+
// there are some, with a companion count when over the cap.
|
|
149
|
+
addBoundedNames(context, 'PinGroupNames', 'PinGroupNameCount', input.PinGroupNames);
|
|
150
|
+
addBoundedNames(context, 'NotificationTitles', 'NotificationTitleCount', input.NotificationTitles);
|
|
126
151
|
// Recent items — bounded structured summaries (name + resource type).
|
|
127
152
|
if (input.RecentItems.length > 0) {
|
|
128
153
|
context['RecentItems'] = input.RecentItems.slice(0, HOME_AGENT_CONTEXT_NAME_LIST_CAP);
|
|
@@ -135,6 +160,7 @@ export function BuildHomeAgentContext(input) {
|
|
|
135
160
|
if (input.AddPanelOpen && input.AddPanelSearchQuery) {
|
|
136
161
|
context['AddPanelSearchQuery'] = input.AddPanelSearchQuery;
|
|
137
162
|
}
|
|
163
|
+
addDashboardViewContext(context, input);
|
|
138
164
|
return context;
|
|
139
165
|
}
|
|
140
166
|
/** @deprecated Use {@link BuildHomeAgentContext}. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home-agent-context.js","sourceRoot":"","sources":["../../src/Home/home-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure helpers for the Home dashboard's AI-agent integration.\n *\n * These functions are intentionally free of Angular / component dependencies so\n * they can be unit-tested in isolation. The component\n * ({@link HomeDashboardComponent}) supplies a plain snapshot of its current\n * state and these helpers shape it into the key-value `AgentContext` object that\n * flows to the async chat agent and the realtime co-agent via\n * `NavigationService.SetAgentContext`.\n *\n * Deep (\"hardcore\", Data-Explorer depth) enrichment: bounded name lists (cap\n * {@link HOME_AGENT_CONTEXT_NAME_LIST_CAP} with a companion `*Count` flag when\n * truncated) for apps, pins, pin groups, notifications, and recents; structured\n * recent-item summaries; and a tolerant name resolver so the agent can open a\n * pin / app / recent the way the user named it (exact name → partial contains).\n *\n * 🔒 SAFETY BOUNDARY: the Home dashboard exposes ONLY navigation / discovery /\n * panel-toggle operations. No helper here describes — and no tool may perform —\n * pin create / delete / rename, group mutation, or reordering.\n */\n\n/**\n * Upper bound on how many names we publish in a name-list context field\n * (AvailableApps, PinnedItems, PinGroupNames, NotificationTitles, RecentItems).\n * Keeping the streamed note bounded avoids flooding the co-agent with hundreds of\n * names; when the underlying list is larger we surface a companion total-count\n * field instead.\n */\nexport const HOME_AGENT_CONTEXT_NAME_LIST_CAP = 25;\n\n/**\n * Cap an array of names to {@link HOME_AGENT_CONTEXT_NAME_LIST_CAP} entries.\n * Pure + deterministic so the context shape stays unit-testable.\n */\nfunction capNames(names: readonly string[]): string[] {\n return names.slice(0, HOME_AGENT_CONTEXT_NAME_LIST_CAP);\n}\n\n/**\n * A minimal name-bearing record the agent can refer to (an app, pin, or recent).\n */\nexport interface NamedRecord {\n Name: string;\n}\n\n/**\n * Resolve an agent-supplied reference to one of the available named records,\n * matching the way a user names things. Tries, in order:\n * 1. exact name (case-insensitive, trimmed)\n * 2. partial (contains) match (case-insensitive)\n *\n * Pure + deterministic over the supplied candidate list, so it's unit-testable in\n * isolation.\n *\n * @param input - whatever the agent passed (typically the on-screen display name)\n * @param candidates - the records available on the Home screen\n * @returns the matched candidate, or null on a miss\n */\nexport function ResolveNamedRecord<T extends NamedRecord>(input: string, candidates: readonly T[]): T | null {\n const needle = input.trim().toLowerCase();\n if (!needle) {\n return null;\n }\n const exact = candidates.find(c => c.Name.trim().toLowerCase() === needle);\n if (exact) {\n return exact;\n }\n const contains = candidates.find(c => c.Name.toLowerCase().includes(needle));\n return contains ?? null;\n}\n\n/** @deprecated Use {@link ResolveNamedRecord}. */\nexport function resolveNamedRecord<T extends NamedRecord>(input: string, candidates: readonly T[]): T | null {\n return ResolveNamedRecord(input, candidates);\n}\n\n/**\n * Build a tolerant \"not found\" error listing a bounded sample of available names so\n * the agent can correct itself.\n */\nexport function BuildHomeNotFoundError(input: string, kind: string, candidates: readonly NamedRecord[]): string {\n const sample = candidates.slice(0, HOME_AGENT_CONTEXT_NAME_LIST_CAP).map(c => c.Name).join(', ');\n return `No ${kind} named \"${input}\". Available ${kind}s: ${sample || '(none)'}.`;\n}\n\n/** @deprecated Use {@link BuildHomeNotFoundError}. */\nexport function buildHomeNotFoundError(input: string, kind: string, candidates: readonly NamedRecord[]): string {\n return BuildHomeNotFoundError(input, kind, candidates);\n}\n\n/**\n * A structured summary of one recent item the agent can navigate to — its display\n * name and the resource type (record / view / dashboard / artifact / report).\n */\nexport interface RecentItemSummary {\n Name: string;\n ResourceType: string;\n}\n\n/**\n * The plain, component-supplied snapshot used to build the Home agent context.\n * Mirrors the salient slice of the Home dashboard's state.\n */\nexport interface HomeAgentContextInput {\n /** Total apps available to the user (Home itself excluded). */\n AppCount: number;\n /** Apps currently visible after any display filtering (== AppCount today). */\n VisibleAppCount: number;\n /** Names of the available apps (the ones the agent can open via OpenApp). */\n AppNames: string[];\n /** Total pinned items on the Home screen. */\n PinnedItemCount: number;\n /** Number of distinct pin groups. */\n PinGroupCount: number;\n /** Names of the distinct pin groups (bounded). */\n PinGroupNames: string[];\n /** Display names of the pinned items (the ones the agent can open via OpenPin). */\n PinNames: string[];\n /** Count of unread notifications shown in the sidebar. */\n UnreadNotifications: number;\n /** Titles of the unread notifications (bounded). */\n NotificationTitles: string[];\n /** Count of recent items shown in the sidebar. */\n RecentItemsCount: number;\n /** Structured summaries of the recent items (bounded) — the ones OpenRecent can target. */\n RecentItems: RecentItemSummary[];\n /** Whether pin edit mode is active. */\n EditMode: boolean;\n /** Whether the Add Pin panel is open. */\n AddPanelOpen: boolean;\n /** Whether the sidebar (notifications / favorites / recents) is open. */\n SidebarOpen: boolean;\n /** Current search query inside the Add Pin panel (empty when not searching). */\n AddPanelSearchQuery: string;\n}\n\n/**\n * Build the agent-visible context object for the Home dashboard.\n *\n * Reports the app launcher state (app counts + names), the pin board state (pin\n * counts + names + groups + edit mode), the notifications (count + bounded titles),\n * the recents (count + bounded structured summaries), the Add Pin panel state, and\n * the sidebar state. Each name list is bounded with a companion total-count when\n * truncated. Keeping this a pure function (no `this`) makes the context shape\n * unit-testable and decouples it from change-detection timing.\n *\n * @param input - the component's current state snapshot\n * @returns a flat key-value object suitable for `SetAgentContext`\n */\nexport function BuildHomeAgentContext(input: HomeAgentContextInput): Record<string, unknown> {\n const context: Record<string, unknown> = {\n AppCount: input.AppCount,\n VisibleAppCount: input.VisibleAppCount,\n AvailableApps: capNames(input.AppNames),\n PinnedItemCount: input.PinnedItemCount,\n PinGroupCount: input.PinGroupCount,\n PinnedItems: capNames(input.PinNames),\n UnreadNotifications: input.UnreadNotifications,\n RecentItemsCount: input.RecentItemsCount,\n EditMode: input.EditMode,\n AddPanelOpen: input.AddPanelOpen,\n SidebarOpen: input.SidebarOpen,\n };\n\n // When the lists are longer than we publish names for, tell the co-agent the\n // true totals so it knows the name lists are truncated.\n if (input.AppNames.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context['AvailableAppCount'] = input.AppNames.length;\n }\n if (input.PinNames.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context['PinnedItemNameCount'] = input.PinNames.length;\n }\n\n // Pin group names — bounded; companion count when over the cap.\n if (input.PinGroupNames.length > 0) {\n context['PinGroupNames'] = capNames(input.PinGroupNames);\n if (input.PinGroupNames.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context['PinGroupNameCount'] = input.PinGroupNames.length;\n }\n }\n\n // Notification titles — bounded; only surfaced when there are unread notifications.\n if (input.NotificationTitles.length > 0) {\n context['NotificationTitles'] = capNames(input.NotificationTitles);\n if (input.NotificationTitles.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context['NotificationTitleCount'] = input.NotificationTitles.length;\n }\n }\n\n // Recent items — bounded structured summaries (name + resource type).\n if (input.RecentItems.length > 0) {\n context['RecentItems'] = input.RecentItems.slice(0, HOME_AGENT_CONTEXT_NAME_LIST_CAP);\n if (input.RecentItems.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context['RecentItemNameCount'] = input.RecentItems.length;\n }\n }\n\n // Only surface the panel search text when the panel is open and there's a query —\n // keeps the context lean when the panel is closed.\n if (input.AddPanelOpen && input.AddPanelSearchQuery) {\n context['AddPanelSearchQuery'] = input.AddPanelSearchQuery;\n }\n\n return context;\n}\n\n/** @deprecated Use {@link BuildHomeAgentContext}. */\nexport function buildHomeAgentContext(input: HomeAgentContextInput): Record<string, unknown> {\n return BuildHomeAgentContext(input);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"home-agent-context.js","sourceRoot":"","sources":["../../src/Home/home-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure helpers for the Home dashboard's AI-agent integration.\n *\n * These functions are intentionally free of Angular / component dependencies so\n * they can be unit-tested in isolation. The component\n * ({@link HomeDashboardComponent}) supplies a plain snapshot of its current\n * state and these helpers shape it into the key-value `AgentContext` object that\n * flows to the async chat agent and the realtime co-agent via\n * `NavigationService.SetAgentContext`.\n *\n * Deep (\"hardcore\", Data-Explorer depth) enrichment: bounded name lists (cap\n * {@link HOME_AGENT_CONTEXT_NAME_LIST_CAP} with a companion `*Count` flag when\n * truncated) for apps, pins, pin groups, notifications, recents and pinned\n * dashboards; structured recent-item summaries; whether the Pinned section is\n * collapsed; the Home view (the overview, or a dashboard by name and id and\n * whether it is being edited); and a tolerant name resolver so the agent can\n * open a pin / app / recent / pinned dashboard the way the user named it (exact\n * name → partial contains).\n *\n * 🔒 SAFETY BOUNDARY: the Home dashboard exposes ONLY navigation / discovery /\n * panel-toggle operations; showing a pinned dashboard in Home is navigation. No\n * helper here describes — and no tool may perform — pin create / delete /\n * rename, group mutation, reordering, or dashboard create / rename / edit /\n * save / delete.\n */\n\n/**\n * Upper bound on how many names we publish in a name-list context field\n * (AvailableApps, PinnedItems, PinGroupNames, NotificationTitles, RecentItems,\n * PinnedDashboardNames).\n * Keeping the streamed note bounded avoids flooding the co-agent with hundreds of\n * names; when the underlying list is larger we surface a companion total-count\n * field instead.\n */\nexport const HOME_AGENT_CONTEXT_NAME_LIST_CAP = 25;\n\n/**\n * Cap an array of names to {@link HOME_AGENT_CONTEXT_NAME_LIST_CAP} entries.\n * Pure + deterministic so the context shape stays unit-testable.\n */\nfunction capNames(names: readonly string[]): string[] {\n return names.slice(0, HOME_AGENT_CONTEXT_NAME_LIST_CAP);\n}\n\n/**\n * A minimal name-bearing record the agent can refer to (an app, pin, or recent).\n */\nexport interface NamedRecord {\n Name: string;\n}\n\n/**\n * Resolve an agent-supplied reference to one of the available named records,\n * matching the way a user names things. Tries, in order:\n * 1. exact name (case-insensitive, trimmed)\n * 2. partial (contains) match (case-insensitive)\n *\n * Pure + deterministic over the supplied candidate list, so it's unit-testable in\n * isolation.\n *\n * @param input - whatever the agent passed (typically the on-screen display name)\n * @param candidates - the records available on the Home screen\n * @returns the matched candidate, or null on a miss\n */\nexport function ResolveNamedRecord<T extends NamedRecord>(input: string, candidates: readonly T[]): T | null {\n const needle = input.trim().toLowerCase();\n if (!needle) {\n return null;\n }\n const exact = candidates.find(c => c.Name.trim().toLowerCase() === needle);\n if (exact) {\n return exact;\n }\n const contains = candidates.find(c => c.Name.toLowerCase().includes(needle));\n return contains ?? null;\n}\n\n/** @deprecated Use {@link ResolveNamedRecord}. */\nexport function resolveNamedRecord<T extends NamedRecord>(input: string, candidates: readonly T[]): T | null {\n return ResolveNamedRecord(input, candidates);\n}\n\n/**\n * Build a tolerant \"not found\" error listing a bounded sample of available names so\n * the agent can correct itself.\n */\nexport function BuildHomeNotFoundError(input: string, kind: string, candidates: readonly NamedRecord[]): string {\n const sample = candidates.slice(0, HOME_AGENT_CONTEXT_NAME_LIST_CAP).map(c => c.Name).join(', ');\n return `No ${kind} named \"${input}\". Available ${kind}s: ${sample || '(none)'}.`;\n}\n\n/** @deprecated Use {@link BuildHomeNotFoundError}. */\nexport function buildHomeNotFoundError(input: string, kind: string, candidates: readonly NamedRecord[]): string {\n return BuildHomeNotFoundError(input, kind, candidates);\n}\n\n/**\n * A structured summary of one recent item the agent can navigate to — its display\n * name and the resource type (record / view / dashboard / artifact / report).\n */\nexport interface RecentItemSummary {\n Name: string;\n ResourceType: string;\n}\n\n/**\n * The plain, component-supplied snapshot used to build the Home agent context.\n * Mirrors the salient slice of the Home dashboard's state.\n */\nexport interface HomeAgentContextInput {\n /** Total apps available to the user (Home itself excluded). */\n AppCount: number;\n /** Apps currently visible after any display filtering (== AppCount today). */\n VisibleAppCount: number;\n /** Names of the available apps (the ones the agent can open via OpenApp). */\n AppNames: string[];\n /** Total pinned items on the Home screen. */\n PinnedItemCount: number;\n /** Number of distinct pin groups. */\n PinGroupCount: number;\n /** Names of the distinct pin groups (bounded). */\n PinGroupNames: string[];\n /** Display names of the pinned items (the ones the agent can open via OpenPin). */\n PinNames: string[];\n /** Count of unread notifications shown in the sidebar. */\n UnreadNotifications: number;\n /** Titles of the unread notifications (bounded). */\n NotificationTitles: string[];\n /** Count of recent items shown in the sidebar. */\n RecentItemsCount: number;\n /** Structured summaries of the recent items (bounded) — the ones OpenRecent can target. */\n RecentItems: RecentItemSummary[];\n /** Whether pin edit mode is active. */\n EditMode: boolean;\n /** Whether the Add Pin panel is open. */\n AddPanelOpen: boolean;\n /** Whether the sidebar (notifications / favorites / recents) is open. */\n SidebarOpen: boolean;\n /** Current search query inside the Add Pin panel (empty when not searching). */\n AddPanelSearchQuery: string;\n /** Whether the Pinned section is collapsed. */\n PinnedCollapsed: boolean;\n /** The dashboard Home shows in place of its overview: its name, or null on the overview. */\n CurrentDashboardName: string | null;\n /** ID of that dashboard, or null. */\n CurrentDashboardID: string | null;\n /** True while that dashboard is in edit mode. */\n IsEditingDashboard: boolean;\n /** Names of the pinned dashboards the Dashboards switcher lists, in pin order. */\n PinnedDashboardNames: string[];\n}\n\n/**\n * Add a bounded name list under `key` when it is not empty, plus `countKey` with the true total\n * when the list is longer than {@link HOME_AGENT_CONTEXT_NAME_LIST_CAP}.\n */\nfunction addBoundedNames(context: Record<string, unknown>, key: string, countKey: string, names: readonly string[]): void {\n if (names.length === 0) {\n return;\n }\n context[key] = capNames(names);\n if (names.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context[countKey] = names.length;\n }\n}\n\n/** Add the Home view (overview or a dashboard), the open dashboard and the pinned dashboards to the context. */\nfunction addDashboardViewContext(context: Record<string, unknown>, input: HomeAgentContextInput): void {\n context['HomeView'] = input.CurrentDashboardName ? 'Dashboard' : 'Overview';\n if (input.CurrentDashboardName) {\n context['CurrentDashboardName'] = input.CurrentDashboardName;\n context['IsEditingDashboard'] = input.IsEditingDashboard;\n if (input.CurrentDashboardID) {\n context['CurrentDashboardID'] = input.CurrentDashboardID;\n }\n }\n addBoundedNames(context, 'PinnedDashboardNames', 'PinnedDashboardNameCount', input.PinnedDashboardNames);\n}\n\n/**\n * Build the agent-visible context object for the Home dashboard.\n *\n * Reports the app launcher state (app counts + names), the pin board state (pin\n * counts + names + groups + edit mode), the notifications (count + bounded titles),\n * the recents (count + bounded structured summaries), the Add Pin panel state, the\n * sidebar state, whether the Pinned section is collapsed, the Home view (the\n * overview, or the dashboard Home shows by name and id and whether it is being\n * edited) and the pinned dashboards' names. Each name list is bounded with a\n * companion total-count when truncated. Keeping this a pure function (no `this`)\n * makes the context shape unit-testable and decouples it from change-detection\n * timing.\n *\n * @param input - the component's current state snapshot\n * @returns a flat key-value object suitable for `SetAgentContext`\n */\nexport function BuildHomeAgentContext(input: HomeAgentContextInput): Record<string, unknown> {\n const context: Record<string, unknown> = {\n AppCount: input.AppCount,\n VisibleAppCount: input.VisibleAppCount,\n AvailableApps: capNames(input.AppNames),\n PinnedItemCount: input.PinnedItemCount,\n PinGroupCount: input.PinGroupCount,\n PinnedItems: capNames(input.PinNames),\n UnreadNotifications: input.UnreadNotifications,\n RecentItemsCount: input.RecentItemsCount,\n EditMode: input.EditMode,\n AddPanelOpen: input.AddPanelOpen,\n SidebarOpen: input.SidebarOpen,\n PinnedCollapsed: input.PinnedCollapsed,\n };\n\n // When the lists are longer than we publish names for, tell the co-agent the\n // true totals so it knows the name lists are truncated.\n if (input.AppNames.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context['AvailableAppCount'] = input.AppNames.length;\n }\n if (input.PinNames.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context['PinnedItemNameCount'] = input.PinNames.length;\n }\n\n // Pin group names and unread notification titles — bounded; only surfaced when\n // there are some, with a companion count when over the cap.\n addBoundedNames(context, 'PinGroupNames', 'PinGroupNameCount', input.PinGroupNames);\n addBoundedNames(context, 'NotificationTitles', 'NotificationTitleCount', input.NotificationTitles);\n\n // Recent items — bounded structured summaries (name + resource type).\n if (input.RecentItems.length > 0) {\n context['RecentItems'] = input.RecentItems.slice(0, HOME_AGENT_CONTEXT_NAME_LIST_CAP);\n if (input.RecentItems.length > HOME_AGENT_CONTEXT_NAME_LIST_CAP) {\n context['RecentItemNameCount'] = input.RecentItems.length;\n }\n }\n\n // Only surface the panel search text when the panel is open and there's a query —\n // keeps the context lean when the panel is closed.\n if (input.AddPanelOpen && input.AddPanelSearchQuery) {\n context['AddPanelSearchQuery'] = input.AddPanelSearchQuery;\n }\n\n addDashboardViewContext(context, input);\n\n return context;\n}\n\n/** @deprecated Use {@link BuildHomeAgentContext}. */\nexport function buildHomeAgentContext(input: HomeAgentContextInput): Record<string, unknown> {\n return BuildHomeAgentContext(input);\n}\n"]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { EventEmitter, OnDestroy } from '@angular/core';
|
|
2
|
+
import { HomeSwitcherDashboard } from './home-pinned-dashboards';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* The Dashboards switcher on Home: a trigger and a menu with a filter box, Home, the pinned dashboards, New dashboard
|
|
6
|
+
* and Manage pins. The Pinned header shows it as the "Dashboards" button (menu right-aligned); the dashboard view shows
|
|
7
|
+
* it as the dashboard title (menu left-aligned), whose trigger can be a heading (HeadingLevel). The menu is
|
|
8
|
+
* fixed-position under the trigger, so a collapsed accordion does not clip it. A click outside, Escape, focus moving
|
|
9
|
+
* out, a change of the window's width or a page scroll closes it. Home handles the picks.
|
|
10
|
+
*/
|
|
11
|
+
export declare class HomeDashboardSwitcherComponent implements OnDestroy {
|
|
12
|
+
/** The pinned dashboards, in pin order. */
|
|
13
|
+
Dashboards: HomeSwitcherDashboard[];
|
|
14
|
+
/** The dashboard Home shows, or null on the overview. */
|
|
15
|
+
CurrentId: string | null;
|
|
16
|
+
/** 'button': the Pinned header button. 'title': the dashboard title in the dashboard view. */
|
|
17
|
+
Look: 'button' | 'title';
|
|
18
|
+
/** The trigger text: "Dashboards" for the button, the dashboard name for the title. */
|
|
19
|
+
Label: string;
|
|
20
|
+
/** 'right' lines the menu up with the trigger's right edge; 'left' with its left edge. */
|
|
21
|
+
Align: 'left' | 'right';
|
|
22
|
+
/**
|
|
23
|
+
* For the title look: 1 or 2 puts the trigger in an h1 or h2, with no margin or font of its own, and the menu stays
|
|
24
|
+
* outside the heading. Null puts it in no heading. The button look ignores it.
|
|
25
|
+
*/
|
|
26
|
+
HeadingLevel: 1 | 2 | null;
|
|
27
|
+
/** Emits the dashboard the user picks, or null for Home. */
|
|
28
|
+
Pick: EventEmitter<string | null>;
|
|
29
|
+
/** Emits when the user picks New dashboard. */
|
|
30
|
+
New: EventEmitter<void>;
|
|
31
|
+
/** Emits when the user picks Manage pins. */
|
|
32
|
+
ManagePins: EventEmitter<void>;
|
|
33
|
+
/** True while the menu shows. */
|
|
34
|
+
IsOpen: boolean;
|
|
35
|
+
/** The text in the filter box. */
|
|
36
|
+
Query: string;
|
|
37
|
+
/** The menu's left edge, in viewport pixels. */
|
|
38
|
+
MenuLeft: number;
|
|
39
|
+
/** The menu's top edge, in viewport pixels. */
|
|
40
|
+
MenuTop: number;
|
|
41
|
+
/** The menu's max height in pixels: the room on its side of the trigger. Null while the menu is measured. */
|
|
42
|
+
MenuMaxHeight: number | null;
|
|
43
|
+
private trigger?;
|
|
44
|
+
private menu?;
|
|
45
|
+
private readonly host;
|
|
46
|
+
private readonly cdr;
|
|
47
|
+
/** The window's width when the menu opened. A resize that keeps it, such as an on-screen keyboard opening, keeps the menu open. */
|
|
48
|
+
private openWidth;
|
|
49
|
+
/**
|
|
50
|
+
* Closes the menu on a click outside the switcher. It listens in the capture phase, so a click whose target stops
|
|
51
|
+
* it still counts.
|
|
52
|
+
*/
|
|
53
|
+
private readonly onDocumentClick;
|
|
54
|
+
/** Closes the menu when the page scrolls under it. A scroll inside the menu, such as its list, keeps it open. */
|
|
55
|
+
private readonly onScroll;
|
|
56
|
+
/** The pinned dashboards whose name matches the filter box. */
|
|
57
|
+
get FilteredDashboards(): HomeSwitcherDashboard[];
|
|
58
|
+
/** True for the dashboard Home shows. */
|
|
59
|
+
IsCurrent(dashboard: HomeSwitcherDashboard): boolean;
|
|
60
|
+
/** Opens the menu when it is closed, and closes it when it is open. */
|
|
61
|
+
Toggle(): void;
|
|
62
|
+
/** Opens the menu under the trigger, inside the viewport, with an empty filter box that has focus. */
|
|
63
|
+
Open(): void;
|
|
64
|
+
/** Closes the menu. `returnFocus` puts focus back on the trigger (Escape). */
|
|
65
|
+
Close(returnFocus?: boolean): void;
|
|
66
|
+
/** Closes the menu and emits the picked dashboard, or null for Home. */
|
|
67
|
+
Choose(dashboardId: string | null): void;
|
|
68
|
+
/** Closes the menu and emits New. */
|
|
69
|
+
ChooseNew(): void;
|
|
70
|
+
/** Closes the menu and emits ManagePins. */
|
|
71
|
+
ChooseManagePins(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Keys in the menu: Escape closes it and puts focus back on the trigger. ArrowDown and ArrowUp move from the filter
|
|
74
|
+
* box to the first or last row and between the rows; Home and End move between the rows. Other keys do nothing here.
|
|
75
|
+
*/
|
|
76
|
+
OnMenuKeydown(event: KeyboardEvent): void;
|
|
77
|
+
/** Closes the menu when focus moves to an element outside the switcher, as Tab does past the last row. */
|
|
78
|
+
OnFocusOut(event: FocusEvent): void;
|
|
79
|
+
/**
|
|
80
|
+
* Closes the menu when the window's width differs from its width at open. A resize of the height only, such as an
|
|
81
|
+
* on-screen keyboard opening for the filter box, keeps the menu open.
|
|
82
|
+
*/
|
|
83
|
+
OnWindowResize(): void;
|
|
84
|
+
ngOnDestroy(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Places the menu next to the trigger, lined up by Align, and limits its height to the room on that side. A height
|
|
87
|
+
* of 0 places it below the trigger.
|
|
88
|
+
*/
|
|
89
|
+
private placeMenu;
|
|
90
|
+
/** Removes the page click and scroll listeners the open menu uses. */
|
|
91
|
+
private stopWatchingPage;
|
|
92
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<HomeDashboardSwitcherComponent, never>;
|
|
93
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HomeDashboardSwitcherComponent, "mj-home-dashboard-switcher", never, { "Dashboards": { "alias": "Dashboards"; "required": false; }; "CurrentId": { "alias": "CurrentId"; "required": false; }; "Look": { "alias": "Look"; "required": false; }; "Label": { "alias": "Label"; "required": false; }; "Align": { "alias": "Align"; "required": false; }; "HeadingLevel": { "alias": "HeadingLevel"; "required": false; }; }, { "Pick": "Pick"; "New": "New"; "ManagePins": "ManagePins"; }, never, never, false, never>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=home-dashboard-switcher.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-dashboard-switcher.component.d.ts","sourceRoot":"","sources":["../../src/Home/home-dashboard-switcher.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,YAAY,EAGZ,SAAS,EAIV,MAAM,eAAe,CAAC;AAGvB,OAAO,EAA4B,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;;AAU3F;;;;;;GAMG;AACH,qBA4Ga,8BAA+B,YAAW,SAAS;IAC9D,2CAA2C;IAClC,UAAU,EAAE,qBAAqB,EAAE,CAAM;IAClD,yDAAyD;IAChD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IACzC,8FAA8F;IACrF,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAY;IAC7C,uFAAuF;IAC9E,KAAK,SAAgB;IAC9B,0FAA0F;IACjF,KAAK,EAAE,MAAM,GAAG,OAAO,CAAW;IAC3C;;;OAGG;IACM,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAC3C,4DAA4D;IAClD,IAAI,8BAAqC;IACnD,+CAA+C;IACrC,GAAG,qBAA4B;IACzC,6CAA6C;IACnC,UAAU,qBAA4B;IAEhD,iCAAiC;IAC1B,MAAM,UAAS;IACtB,kCAAkC;IAC3B,KAAK,SAAM;IAClB,gDAAgD;IACzC,QAAQ,SAAK;IACpB,+CAA+C;IACxC,OAAO,SAAK;IACnB,6GAA6G;IACtG,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAErB,OAAO,CAAC,OAAO,CAAC,CAAgC;IACnD,OAAO,CAAC,IAAI,CAAC,CAA0B;IAC1D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+C;IACpE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IACjD,mIAAmI;IACnI,OAAO,CAAC,SAAS,CAAK;IAEtB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAI9B;IAEF,iHAAiH;IACjH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAIvB;IAEF,+DAA+D;IAC/D,IAAW,kBAAkB,IAAI,qBAAqB,EAAE,CAEvD;IAED,yCAAyC;IAClC,SAAS,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO;IAI3D,uEAAuE;IAChE,MAAM,IAAI,IAAI;IAQrB,sGAAsG;IAC/F,IAAI,IAAI,IAAI;IAmBnB,8EAA8E;IACvE,KAAK,CAAC,WAAW,UAAQ,GAAG,IAAI;IAUvC,wEAAwE;IACjE,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAK/C,qCAAqC;IAC9B,SAAS,IAAI,IAAI;IAKxB,4CAA4C;IACrC,gBAAgB,IAAI,IAAI;IAK/B;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAchD,0GAA0G;IAEnG,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAM1C;;;OAGG;IAEI,cAAc,IAAI,IAAI;IAM7B,WAAW,IAAI,IAAI;IAInB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAQjB,sEAAsE;IACtE,OAAO,CAAC,gBAAgB;yCApLb,8BAA8B;2CAA9B,8BAA8B;CAwL1C"}
|