@genesislcap/foundation-layout 14.393.3-FUI-2471.2 → 14.393.3-FUI-2471.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/POPOUT_TODO.md ADDED
@@ -0,0 +1,46 @@
1
+ # Foundation Layout TODOs
2
+
3
+ ## Multi-Instance Popouts
4
+ Currently, the popout system keys windows and state by their `registration` ID. This limits the layout to having only one instance of a specific component type (e.g., `rapid-grid-pro`) popped out at a time.
5
+
6
+ ### Proposed Improvement
7
+ Support multiple popouts of the same registration by introducing a unique `instanceId` (UUID).
8
+
9
+ - **URL Parameters**: Add a unique instance ID to the popout URL (e.g., `?layout-popout-control-key=my-grid&layout-popout-instance-id=uuid-123`).
10
+ - **Registry**: Update `FoundationLayoutPopoutController` to key the `popoutRegistry` by the unique `instanceId` rather than the `registration` name.
11
+ - **State Persistence**: Ensure the serialized layout stores the `registration` name alongside the state for each `instanceId` so they can be recreated correctly on restoration.
12
+ - **Communication**: Update the broadcast channel messages (`popout-update`, `popout-sync`, etc.) to use the `instanceId` for targeting and identification.
13
+
14
+ ## Configurable Popout Headers
15
+ A client has requested the ability to see the component header (title and custom buttons) inside the popout window, while still hiding the standard Golden Layout controls (Close, Maximise, and Popout-in-Popout).
16
+
17
+ ### Proposed Improvement
18
+ 1. **Update Configuration**: Add `showHeaders?: boolean` to the `LayoutPopoutConfig` interface (defaulting to `false`).
19
+ 2. **Update Activation Logic**:
20
+ - In `tryActivatePopoutMode`, pass the `showHeaders` value to the Golden Layout `settings.hasHeaders` property.
21
+ - Configure the root component item to disable standard buttons while allowing the header to render:
22
+ ```typescript
23
+ header: {
24
+ maximise: false,
25
+ close: false,
26
+ popout: false,
27
+ }
28
+ ```
29
+ 3. **Custom Buttons**: Ensure that the `setupCustomButtons` logic continues to run in the popout window so that the user's custom tools are injected into the newly visible header.
30
+
31
+ ## Restore on Manual Close
32
+ Currently, when a user manually closes a popout window, the component is removed from the layout entirely. We want to restore it to the main layout automatically.
33
+
34
+ ### Proposed Solution
35
+ 1. **Detect Manual Close**:
36
+ - In `FoundationLayoutPopoutController`, add a flag `isClosingAll` (boolean).
37
+ - Set `isClosingAll = true` at the start of `closeAllPopouts()` and `false` at the end.
38
+ - In the `popout-closed` event handler, check if `!isClosingAll`. If true, this is a manual user action.
39
+
40
+ 2. **Trigger Restoration**:
41
+ - If manual close is detected, call a restoration method on the parent `FoundationLayout` (e.g., `restoreItem`).
42
+ - Pass the `registration` ID and the final `state` (captured from the registry before deletion).
43
+
44
+ 3. **Implement `restoreItem`**:
45
+ - Update `FoundationLayout` to support restoring an item with its state preserved.
46
+ - This likely requires updating `addItem` or creating a new method that accepts `initialState` (or `componentState`) in the configuration, so the component re-initializes with its previous data (filters, scroll position, etc.).
@@ -670,16 +670,6 @@
670
670
  "text": "boolean"
671
671
  }
672
672
  },
673
- "parameters": [
674
- {
675
- "name": "autoloading",
676
- "default": "false",
677
- "type": {
678
- "text": "boolean"
679
- },
680
- "description": "If true, this respects the {@link LayoutPopoutConfig.loadAutomatically}property.\n * You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.\n * "
681
- }
682
- ],
683
673
  "description": "If in a popout window from the dynamic layout, this function will run the flow to put the component in popout mode.\nThis function is automatically called if using the declarative HTML API, but if only using the JavaScript API then you will need to call this function manually."
684
674
  },
685
675
  {
@@ -995,7 +985,7 @@
995
985
  {
996
986
  "kind": "variable",
997
987
  "name": "layoutTemplate",
998
- "default": "html<FoundationLayout>`\n <template>\n ${when(\n (x) => Boolean(x.popoutConfig),\n html<FoundationLayout>`\n <foundation-layout-popout-controller\n ${ref('popoutController')}\n channel-name=\"${(x) => x.popoutConfig?.channelName}\"\n ></foundation-layout-popout-controller>\n `,\n )}\n ${when((x) => !x.hasFirstLoaded && x.usingDeclerativeAPI, loadingTemplate)}\n <div class=\"layout-container\" ${ref('layoutElement')}></div>\n </template>\n`",
988
+ "default": "html<FoundationLayout>`\n <template>\n ${when(\n (x) => Boolean(x.popoutConfig),\n html<FoundationLayout>`\n <foundation-layout-popout-controller\n ${ref('popoutController')}\n :parentLayout=\"${(x) => x}\"\n channel-name=\"${(x) => x.popoutConfig?.channelName}\"\n ></foundation-layout-popout-controller>\n `,\n )}\n ${when((x) => !x.hasFirstLoaded && x.usingDeclerativeAPI, loadingTemplate)}\n <div class=\"layout-container\" ${ref('layoutElement')}></div>\n </template>\n`",
999
989
  "description": "`ViewTemplate` which defines the html for FoundationLayout.",
1000
990
  "privacy": "public"
1001
991
  }
@@ -1077,7 +1067,7 @@
1077
1067
  },
1078
1068
  {
1079
1069
  "kind": "field",
1080
- "name": "lastGeometry",
1070
+ "name": "lastUpdate",
1081
1071
  "type": {
1082
1072
  "text": "string"
1083
1073
  },
@@ -1087,7 +1077,7 @@
1087
1077
  "kind": "field",
1088
1078
  "name": "popoutRegistry",
1089
1079
  "type": {
1090
- "text": "Map<string, { geometry: PopoutState['geometry']; window?: Window }>"
1080
+ "text": "Map<\n string,\n { geometry: PopoutGeometry; state?: unknown; window?: Window }\n >"
1091
1081
  },
1092
1082
  "privacy": "private",
1093
1083
  "default": "new Map()"
@@ -1102,6 +1092,19 @@
1102
1092
  "name": "setupListener",
1103
1093
  "privacy": "private"
1104
1094
  },
1095
+ {
1096
+ "kind": "method",
1097
+ "name": "applyStateToParent",
1098
+ "privacy": "private",
1099
+ "parameters": [
1100
+ {
1101
+ "name": "state",
1102
+ "type": {
1103
+ "text": "unknown"
1104
+ }
1105
+ }
1106
+ ]
1107
+ },
1105
1108
  {
1106
1109
  "kind": "method",
1107
1110
  "name": "setupUnloadListener",
@@ -1130,17 +1133,39 @@
1130
1133
  {
1131
1134
  "kind": "method",
1132
1135
  "name": "getGeometry",
1133
- "privacy": "private"
1136
+ "privacy": "private",
1137
+ "return": {
1138
+ "type": {
1139
+ "text": "Promise<PopoutGeometry>"
1140
+ }
1141
+ }
1134
1142
  },
1135
1143
  {
1136
1144
  "kind": "method",
1137
- "name": "broadcastGeometry",
1145
+ "name": "getComponentState",
1146
+ "privacy": "private",
1147
+ "return": {
1148
+ "type": {
1149
+ "text": "unknown"
1150
+ }
1151
+ }
1152
+ },
1153
+ {
1154
+ "kind": "method",
1155
+ "name": "broadcastUpdate",
1138
1156
  "privacy": "private",
1139
1157
  "parameters": [
1140
1158
  {
1141
1159
  "name": "geometry",
1142
1160
  "type": {
1143
- "text": "Awaited<ReturnType<typeof this.getGeometry>>"
1161
+ "text": "PopoutGeometry"
1162
+ }
1163
+ },
1164
+ {
1165
+ "name": "state",
1166
+ "optional": true,
1167
+ "type": {
1168
+ "text": "unknown"
1144
1169
  }
1145
1170
  }
1146
1171
  ]
@@ -1158,12 +1183,12 @@
1158
1183
  "description": "The registration ID of the component to pop out."
1159
1184
  },
1160
1185
  {
1161
- "name": "geometry",
1186
+ "name": "popoutState",
1162
1187
  "optional": true,
1163
1188
  "type": {
1164
- "text": "any"
1189
+ "text": "PopoutState"
1165
1190
  },
1166
- "description": "Optional geometry to use for the new window."
1191
+ "description": "Optional state (geometry and component state) to use for the new window."
1167
1192
  },
1168
1193
  {
1169
1194
  "name": "uuid",
@@ -1966,6 +1991,14 @@
1966
1991
  "name": "LAYOUT_POPOUT_CHANNEL_NAME",
1967
1992
  "module": "src/utils/popout-events.ts"
1968
1993
  }
1994
+ },
1995
+ {
1996
+ "kind": "js",
1997
+ "name": "PopoutGeometry",
1998
+ "declaration": {
1999
+ "name": "PopoutGeometry",
2000
+ "module": "src/utils/popout-events.ts"
2001
+ }
1969
2002
  }
1970
2003
  ]
1971
2004
  },
@@ -177,11 +177,9 @@ export declare class FoundationLayout extends FoundationElement implements Layou
177
177
  * then if the layout goes into popout mode then it will place itself as the only child for the popout container you set.
178
178
  * It is likely you'll want to attach this class to your design system provider.
179
179
  *
180
- * @param autoloading - If true, this respects the {@link LayoutPopoutConfig.loadAutomatically} property.
181
- * You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.
182
180
  * @beta
183
181
  */
184
- tryActivatePopoutMode(autoloading?: boolean): boolean;
182
+ tryActivatePopoutMode(): boolean;
185
183
  /**
186
184
  * Try to load a layout from local storage, or return false. Only required if manually calling {@link FoundationLayout.registerItem}
187
185
  * @remarks
@@ -1 +1 @@
1
- {"version":3,"file":"layout-main.d.ts","sourceRoot":"","sources":["../../../src/main/layout-main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout-main.d.ts","sourceRoot":"","sources":["../../../src/main/layout-main.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,40 @@
1
1
  import { FASTElement } from '@microsoft/fast-element';
2
- import { PopoutState } from '../utils';
2
+ import { LayoutComponent, PopoutState } from '../utils';
3
3
  export declare class FoundationLayoutPopoutController extends FASTElement {
4
4
  channelName: string;
5
+ /**
6
+ * Reference to the parent layout to retrieve component state
7
+ * @internal
8
+ */
9
+ parentLayout: LayoutComponent & {
10
+ getLayoutComponents(): any[][];
11
+ };
5
12
  private layoutKey;
6
13
  private channel;
7
14
  private pollInterval;
8
15
  private unloadHandler;
9
- private lastGeometry;
16
+ private lastUpdate;
10
17
  private popoutRegistry;
11
18
  connectedCallback(): void;
12
19
  disconnectedCallback(): void;
13
20
  private setupChannel;
14
21
  private setupListener;
22
+ private applyStateToParent;
15
23
  private setupUnloadListener;
16
24
  private teardownUnloadListener;
17
25
  private emitAutosave;
18
26
  private startPolling;
19
27
  private stopPolling;
20
28
  private getGeometry;
21
- private broadcastGeometry;
29
+ private getComponentState;
30
+ private broadcastUpdate;
22
31
  /**
23
32
  * Opens a component in a popout window.
24
33
  * @param registration - The registration ID of the component to pop out.
25
- * @param geometry - Optional geometry to use for the new window.
34
+ * @param popoutState - Optional state (geometry and component state) to use for the new window.
26
35
  * @param uuid - UUID generator from parent layout
27
36
  */
28
- openPopout(registration: string, geometry?: any, uuid?: any): Promise<Window>;
37
+ openPopout(registration: string, popoutState?: PopoutState, uuid?: any): Promise<Window>;
29
38
  getRegistry(): {
30
39
  [layoutKey: string]: PopoutState;
31
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"layout-popout-controller.d.ts","sourceRoot":"","sources":["../../../src/main/layout-popout-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAIL,WAAW,EACZ,MAAM,UAAU,CAAC;AAGlB,qBAKa,gCAAiC,SAAQ,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEzD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,cAAc,CACV;IAEZ,iBAAiB;IAYjB,oBAAoB;IAapB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;YAML,WAAW;IAwBzB,OAAO,CAAC,iBAAiB;IAWzB;;;;;OAKG;IACU,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG;IA+DjE,WAAW,IAAI;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE;IAU1D;;OAEG;IACU,cAAc,CAAC,QAAQ,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,EAAE,IAAI,EAAE,GAAG;IAqB9E,eAAe;CAQvB"}
1
+ {"version":3,"file":"layout-popout-controller.d.ts","sourceRoot":"","sources":["../../../src/main/layout-popout-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,WAAW,EAAc,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAEL,eAAe,EAIf,WAAW,EACZ,MAAM,UAAU,CAAC;AAGlB,qBAKa,gCAAiC,SAAQ,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEzD;;;OAGG;IACS,YAAY,EAAE,eAAe,GAAG;QAAE,mBAAmB,IAAI,GAAG,EAAE,EAAE,CAAA;KAAE,CAAC;IAE/E,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,cAAc,CAGR;IAEd,iBAAiB;IAajB,oBAAoB;IAapB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,WAAW;YAML,WAAW;IAsBzB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,eAAe;IAUvB;;;;;OAKG;IACU,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,GAAG;IA8D5E,WAAW,IAAI;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE;IAQ1D;;OAEG;IACU,cAAc,CAAC,QAAQ,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,EAAE,IAAI,EAAE,GAAG;IAkB9E,eAAe;CAQvB"}
@@ -1,26 +1,17 @@
1
1
  import { EventDetailMap } from '@genesislcap/foundation-events';
2
- /**
3
- * Geometry details for a popout window
4
- * @public
5
- */
6
- export type PopoutGeometry = {
7
- screenX: number;
8
- screenY: number;
9
- outerWidth: number;
10
- outerHeight: number;
11
- screenId?: string;
12
- };
2
+ import { PopoutGeometry } from './types';
13
3
  /**
14
4
  * Events for layout popout communication
15
5
  * @public
16
6
  */
17
7
  export interface LayoutPopoutEvents extends EventDetailMap {
18
8
  /**
19
- * Emitted by a popout window when its geometry changes
9
+ * Emitted by a popout window when its geometry or component state changes
20
10
  */
21
- 'popout-geometry-change': {
11
+ 'popout-update': {
22
12
  layoutKey: string;
23
13
  geometry: PopoutGeometry;
14
+ state?: unknown;
24
15
  };
25
16
  /**
26
17
  * Emitted by a popout window when it is closed
@@ -28,10 +19,25 @@ export interface LayoutPopoutEvents extends EventDetailMap {
28
19
  'popout-closed': {
29
20
  layoutKey: string;
30
21
  };
22
+ /**
23
+ * Emitted by a popout window when it opens to request state
24
+ */
25
+ 'popout-handshake': {
26
+ layoutKey: string;
27
+ };
28
+ /**
29
+ * Emitted by the host to sync state to a popout window
30
+ */
31
+ 'popout-sync': {
32
+ layoutKey: string;
33
+ geometry?: PopoutGeometry;
34
+ state?: unknown;
35
+ };
31
36
  }
32
37
  /**
33
38
  * Name of the default broadcast channel used for layout popouts
34
39
  * @public
35
40
  */
36
41
  export declare const LAYOUT_POPOUT_CHANNEL_NAME = "f-layout-popout-channel";
42
+ export { PopoutGeometry };
37
43
  //# sourceMappingURL=popout-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"popout-events.d.ts","sourceRoot":"","sources":["../../../src/utils/popout-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;OAEG;IACH,wBAAwB,EAAE;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,cAAc,CAAC;KAC1B,CAAC;IACF;;OAEG;IACH,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,4BAA4B,CAAC"}
1
+ {"version":3,"file":"popout-events.d.ts","sourceRoot":"","sources":["../../../src/utils/popout-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;OAEG;IACH,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,cAAc,CAAC;QACzB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF;;OAEG;IACH,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;OAEG;IACH,kBAAkB,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;OAEG;IACH,aAAa,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;QAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,4BAA4B,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1,6 +1,24 @@
1
1
  import { ComponentContainer, ResolvedLayoutConfig } from '@genesis-community/golden-layout';
2
2
  import { componentType, instanceContainer } from './constants';
3
- import { PopoutGeometry } from './popout-events';
3
+ /**
4
+ * Geometry details for a popout window
5
+ * @public
6
+ */
7
+ export type PopoutGeometry = {
8
+ screenX: number;
9
+ screenY: number;
10
+ outerWidth: number;
11
+ outerHeight: number;
12
+ screenId?: string;
13
+ };
14
+ /**
15
+ * @beta
16
+ * State of a popped out window
17
+ */
18
+ export type PopoutState = {
19
+ geometry: PopoutGeometry;
20
+ state?: unknown;
21
+ };
4
22
  /**
5
23
  * Definition of a custom button which will be added to all layout items.
6
24
  * @remarks
@@ -34,13 +52,6 @@ export type SerialisedLayout = {
34
52
  [layoutKey: string]: PopoutState;
35
53
  };
36
54
  };
37
- /**
38
- * @beta
39
- * State of a popped out window
40
- */
41
- export type PopoutState = {
42
- geometry: PopoutGeometry;
43
- };
44
55
  /**
45
56
  * Interface to implement on an item which is a component of the layout and you wish to serialise state with. This is saved separately for each instance of the component, which allows you to restore multiple instances of the same component with different state.
46
57
  * @typeParam T - the type of the state object you wish to serialise with the component.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"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"}
@@ -296,16 +296,11 @@ export class FoundationLayout extends FoundationElement {
296
296
  * then if the layout goes into popout mode then it will place itself as the only child for the popout container you set.
297
297
  * It is likely you'll want to attach this class to your design system provider.
298
298
  *
299
- * @param autoloading - If true, this respects the {@link LayoutPopoutConfig.loadAutomatically} property.
300
- * You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.
301
299
  * @beta
302
300
  */
303
- tryActivatePopoutMode(autoloading = false) {
304
- var _b;
301
+ tryActivatePopoutMode() {
305
302
  if (!this.popupMode)
306
303
  return false;
307
- if (autoloading && ((_b = this.popoutConfig) === null || _b === void 0 ? void 0 : _b.loadAutomatically) === false)
308
- return;
309
304
  const popoutComponentRegistration = new URLSearchParams(window.location.search).get(LAYOUT_POPOUT_CONTROL_KEY);
310
305
  const glPopoutConfig = {
311
306
  root: {
@@ -657,12 +652,14 @@ export class FoundationLayout extends FoundationElement {
657
652
  return;
658
653
  this.reloadPending = true;
659
654
  setTimeout(() => {
655
+ var _b;
660
656
  this.reloadPending = false;
661
657
  if (!this.hasFirstLoaded) {
662
658
  this.hasFirstLoaded = true;
663
659
  // Store the default layout config before attempting to load from storage
664
660
  this.defaultLayoutConfig = JSON.parse(JSON.stringify(this.layoutConfig));
665
- const res = this.tryLoadLayoutFromLocalStorage() || this.tryActivatePopoutMode(true);
661
+ const res = this.tryLoadLayoutFromLocalStorage() ||
662
+ (((_b = this.popoutConfig) === null || _b === void 0 ? void 0 : _b.loadAutomatically) !== false && this.tryActivatePopoutMode());
666
663
  if (!res) {
667
664
  this.loadGLConfigAndSetup(this.layoutConfig);
668
665
  }
@@ -995,8 +992,11 @@ export class FoundationLayout extends FoundationElement {
995
992
  this.customButtons.push({
996
993
  svg: LAYOUT_ICONS.popoutSVG,
997
994
  onClick: (_, elem) => {
998
- var _b;
999
- const registration = elem.firstChild[instanceContainer].registration;
995
+ var _b, _c;
996
+ const instance = elem.firstChild[instanceContainer];
997
+ const registration = instance.registration;
998
+ const component = elem.firstChild;
999
+ const state = (_b = component === null || component === void 0 ? void 0 : component.getCurrentState) === null || _b === void 0 ? void 0 : _b.call(component);
1000
1000
  // Use default dimensions from config
1001
1001
  const defaultGeometry = {
1002
1002
  screenX: undefined,
@@ -1005,7 +1005,7 @@ export class FoundationLayout extends FoundationElement {
1005
1005
  outerHeight: configWithDefaults.popoutDimension.height,
1006
1006
  };
1007
1007
  // Add to controller registry immediately so it tracks it
1008
- (_b = this.popoutController) === null || _b === void 0 ? void 0 : _b.openPopout(registration, defaultGeometry, this.uuid);
1008
+ (_c = this.popoutController) === null || _c === void 0 ? void 0 : _c.openPopout(registration, { geometry: defaultGeometry, state }, this.uuid);
1009
1009
  this.cacheAndSaveLayout();
1010
1010
  },
1011
1011
  });
@@ -1060,6 +1060,7 @@ export const layoutTemplate = html `
1060
1060
  ${when((x) => Boolean(x.popoutConfig), html `
1061
1061
  <foundation-layout-popout-controller
1062
1062
  ${ref('popoutController')}
1063
+ :parentLayout="${(x) => x}"
1063
1064
  channel-name="${(x) => { var _b; return (_b = x.popoutConfig) === null || _b === void 0 ? void 0 : _b.channelName; }}"
1064
1065
  ></foundation-layout-popout-controller>
1065
1066
  `)}
@@ -1,6 +1,6 @@
1
1
  import { __awaiter, __decorate } from "tslib";
2
2
  import { createTypedBroadcastChannel, } from '@genesislcap/foundation-broadcast-channel';
3
- import { attr, customElement, FASTElement } from '@microsoft/fast-element';
3
+ import { attr, customElement, FASTElement, observable } from '@microsoft/fast-element';
4
4
  import { LAYOUT_POPOUT_CONTROL_KEY, LayoutReceiveEvents, POPOUT_GEOMETRY_BROADCAST_INTERVAL, } from '../utils';
5
5
  import { LAYOUT_POPOUT_CHANNEL_NAME } from '../utils/popout-events';
6
6
  let FoundationLayoutPopoutController = class FoundationLayoutPopoutController extends FASTElement {
@@ -16,6 +16,7 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
16
16
  this.setupUnloadListener();
17
17
  if (this.layoutKey) {
18
18
  this.startPolling();
19
+ this.channel.postMessage('popout-handshake', { layoutKey: this.layoutKey });
19
20
  }
20
21
  else {
21
22
  this.setupListener();
@@ -35,16 +36,26 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
35
36
  setupChannel() {
36
37
  const name = this.channelName || LAYOUT_POPOUT_CHANNEL_NAME;
37
38
  this.channel = createTypedBroadcastChannel(name);
39
+ if (this.layoutKey) {
40
+ this.channel.onmessage = (ev) => {
41
+ if (this.channel.isMessageType('popout-sync', ev)) {
42
+ const { layoutKey, state } = ev.data.detail;
43
+ if (layoutKey === this.layoutKey && state !== undefined) {
44
+ this.applyStateToParent(state);
45
+ }
46
+ }
47
+ };
48
+ }
38
49
  }
39
50
  setupListener() {
40
51
  if (!this.channel)
41
52
  return;
42
53
  this.channel.onmessage = (ev) => {
43
- if (this.channel.isMessageType('popout-geometry-change', ev)) {
44
- const { layoutKey, geometry } = ev.data
54
+ if (this.channel.isMessageType('popout-update', ev)) {
55
+ const { layoutKey, geometry, state } = ev.data
45
56
  .detail;
46
57
  const current = this.popoutRegistry.get(layoutKey);
47
- this.popoutRegistry.set(layoutKey, Object.assign(Object.assign({}, current), { geometry }));
58
+ this.popoutRegistry.set(layoutKey, Object.assign(Object.assign({}, current), { geometry, state }));
48
59
  this.emitAutosave();
49
60
  }
50
61
  else if (this.channel.isMessageType('popout-closed', ev)) {
@@ -52,8 +63,31 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
52
63
  this.popoutRegistry.delete(layoutKey);
53
64
  this.emitAutosave();
54
65
  }
66
+ else if (this.channel.isMessageType('popout-handshake', ev)) {
67
+ const { layoutKey } = ev.data.detail;
68
+ const current = this.popoutRegistry.get(layoutKey);
69
+ if (current) {
70
+ this.channel.postMessage('popout-sync', {
71
+ layoutKey,
72
+ geometry: current.geometry,
73
+ state: current.state,
74
+ });
75
+ }
76
+ }
55
77
  };
56
78
  }
79
+ applyStateToParent(state) {
80
+ if (!this.parentLayout)
81
+ return;
82
+ const components = this.parentLayout.getLayoutComponents();
83
+ for (const group of components) {
84
+ for (const item of group) {
85
+ if (item && typeof item.applyState === 'function') {
86
+ item.applyState(state);
87
+ }
88
+ }
89
+ }
90
+ }
57
91
  setupUnloadListener() {
58
92
  this.unloadHandler = () => {
59
93
  if (this.layoutKey) {
@@ -81,11 +115,13 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
81
115
  }
82
116
  startPolling() {
83
117
  this.pollInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
84
- const currentGeo = yield this.getGeometry();
85
- const geoString = JSON.stringify(currentGeo);
86
- if (geoString !== this.lastGeometry) {
87
- this.broadcastGeometry(currentGeo);
88
- this.lastGeometry = geoString;
118
+ const geometry = yield this.getGeometry();
119
+ const state = this.getComponentState();
120
+ const update = { geometry, state };
121
+ const updateString = JSON.stringify(update);
122
+ if (updateString !== this.lastUpdate) {
123
+ this.broadcastUpdate(geometry, state);
124
+ this.lastUpdate = updateString;
89
125
  }
90
126
  }), POPOUT_GEOMETRY_BROADCAST_INTERVAL);
91
127
  }
@@ -100,12 +136,10 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
100
136
  var _a;
101
137
  if ('getScreenDetails' in window) {
102
138
  try {
103
- // This may prompt the user for permission if not already granted
104
139
  const details = yield window.getScreenDetails();
105
140
  return (_a = details.currentScreen) === null || _a === void 0 ? void 0 : _a.label;
106
141
  }
107
142
  catch (e) {
108
- // Silent fail - permission denied or API error
109
143
  return undefined;
110
144
  }
111
145
  }
@@ -120,31 +154,45 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
120
154
  };
121
155
  });
122
156
  }
123
- broadcastGeometry(geometry) {
157
+ getComponentState() {
158
+ if (!this.parentLayout)
159
+ return undefined;
160
+ const components = this.parentLayout.getLayoutComponents();
161
+ // In a popout window, we expect exactly one component
162
+ for (const group of components) {
163
+ for (const item of group) {
164
+ if (item && typeof item.getCurrentState === 'function') {
165
+ return item.getCurrentState();
166
+ }
167
+ }
168
+ }
169
+ return undefined;
170
+ }
171
+ broadcastUpdate(geometry, state) {
124
172
  if (!this.channel || !this.layoutKey)
125
173
  return;
126
- this.channel.postMessage('popout-geometry-change', {
174
+ this.channel.postMessage('popout-update', {
127
175
  layoutKey: this.layoutKey,
128
176
  geometry,
177
+ state,
129
178
  });
130
- console.log('[PopoutController] Broadcasting geometry:', geometry);
131
179
  }
132
180
  /**
133
181
  * Opens a component in a popout window.
134
182
  * @param registration - The registration ID of the component to pop out.
135
- * @param geometry - Optional geometry to use for the new window.
183
+ * @param popoutState - Optional state (geometry and component state) to use for the new window.
136
184
  * @param uuid - UUID generator from parent layout
137
185
  */
138
- openPopout(registration, geometry, uuid) {
186
+ openPopout(registration, popoutState, uuid) {
139
187
  return __awaiter(this, void 0, void 0, function* () {
140
188
  const url = new URL(window.location.toString());
141
189
  const itemParams = new URLSearchParams();
142
190
  itemParams.append(LAYOUT_POPOUT_CONTROL_KEY, registration);
143
191
  url.search = itemParams.toString();
144
192
  let features = 'popup';
193
+ const geometry = popoutState === null || popoutState === void 0 ? void 0 : popoutState.geometry;
145
194
  let targetLeft = geometry === null || geometry === void 0 ? void 0 : geometry.screenX;
146
195
  let targetTop = geometry === null || geometry === void 0 ? void 0 : geometry.screenY;
147
- // If we have a screenId, try to find the screen and ensure coordinates are valid
148
196
  if ((geometry === null || geometry === void 0 ? void 0 : geometry.screenId) && 'getScreenDetails' in window) {
149
197
  try {
150
198
  const details = yield window.getScreenDetails();
@@ -176,17 +224,16 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
176
224
  features += `,top=${targetTop}`;
177
225
  }
178
226
  else {
179
- features += ',width=800,height=600'; // Default fallback
227
+ features += ',width=800,height=600';
180
228
  }
181
229
  const win = window.open(url, `popout-${registration}-${(uuid === null || uuid === void 0 ? void 0 : uuid.createId()) || Date.now()}`, features);
182
230
  if (!win) {
183
231
  console.warn(`Popout window for ${registration} was blocked.`);
184
232
  return null;
185
233
  }
186
- // Update registry with the window reference and geometry (if provided)
187
- const current = this.popoutRegistry.get(registration);
188
234
  this.popoutRegistry.set(registration, {
189
- geometry: geometry || (current === null || current === void 0 ? void 0 : current.geometry),
235
+ geometry: geometry || {},
236
+ state: popoutState === null || popoutState === void 0 ? void 0 : popoutState.state,
190
237
  window: win,
191
238
  });
192
239
  return win;
@@ -195,9 +242,7 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
195
242
  getRegistry() {
196
243
  const output = {};
197
244
  for (const [key, val] of this.popoutRegistry.entries()) {
198
- if (val.geometry) {
199
- output[key] = { geometry: val.geometry };
200
- }
245
+ output[key] = { geometry: val.geometry, state: val.state };
201
246
  }
202
247
  return output;
203
248
  }
@@ -207,17 +252,15 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
207
252
  restorePopouts(registry, uuid) {
208
253
  return __awaiter(this, void 0, void 0, function* () {
209
254
  this.closeAllPopouts();
210
- // Populate the registry with serialized data
211
255
  for (const [key, val] of Object.entries(registry)) {
212
- this.popoutRegistry.set(key, { geometry: val.geometry });
256
+ this.popoutRegistry.set(key, { geometry: val.geometry, state: val.state });
213
257
  }
214
258
  const keys = Array.from(this.popoutRegistry.keys());
215
259
  if (keys.length === 0)
216
260
  return;
217
- console.debug(`Restoring ${keys.length} popout windows`);
218
261
  yield Promise.all(keys.map((key) => {
219
262
  const state = this.popoutRegistry.get(key);
220
- return this.openPopout(key, state.geometry, uuid);
263
+ return this.openPopout(key, state, uuid);
221
264
  }));
222
265
  });
223
266
  }
@@ -233,6 +276,9 @@ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController ex
233
276
  __decorate([
234
277
  attr({ attribute: 'channel-name' })
235
278
  ], FoundationLayoutPopoutController.prototype, "channelName", void 0);
279
+ __decorate([
280
+ observable
281
+ ], FoundationLayoutPopoutController.prototype, "parentLayout", void 0);
236
282
  FoundationLayoutPopoutController = __decorate([
237
283
  customElement({
238
284
  name: 'foundation-layout-popout-controller',
@@ -1079,19 +1079,11 @@
1079
1079
  {
1080
1080
  "kind": "Method",
1081
1081
  "canonicalReference": "@genesislcap/foundation-layout!FoundationLayout#tryActivatePopoutMode:member(1)",
1082
- "docComment": "/**\n * If in a popout window from the dynamic layout, this function will run the flow to put the component in popout mode. This function is automatically called if using the declarative HTML API, but if only using the JavaScript API then you will need to call this function manually.\n *\n * @remarks\n *\n * If you need to call this manually then you should do it as soon as you register all of the required components with {@link FoundationLayout.registerItem}.\n *\n * If you set the `LAYOUT_POPOUT_CONTAINER_CLASS` on an element which is a DOM parent of the layout, then if the layout goes into popout mode then it will place itself as the only child for the popout container you set. It is likely you'll want to attach this class to your design system provider.\n *\n * @param autoloading - If true, this respects the {@link LayoutPopoutConfig.loadAutomatically} property. You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.\n *\n * @beta\n */\n",
1082
+ "docComment": "/**\n * If in a popout window from the dynamic layout, this function will run the flow to put the component in popout mode. This function is automatically called if using the declarative HTML API, but if only using the JavaScript API then you will need to call this function manually.\n *\n * @remarks\n *\n * If you need to call this manually then you should do it as soon as you register all of the required components with {@link FoundationLayout.registerItem}.\n *\n * If you set the `LAYOUT_POPOUT_CONTAINER_CLASS` on an element which is a DOM parent of the layout, then if the layout goes into popout mode then it will place itself as the only child for the popout container you set. It is likely you'll want to attach this class to your design system provider.\n *\n * @beta\n */\n",
1083
1083
  "excerptTokens": [
1084
1084
  {
1085
1085
  "kind": "Content",
1086
- "text": "tryActivatePopoutMode(autoloading?: "
1087
- },
1088
- {
1089
- "kind": "Content",
1090
- "text": "boolean"
1091
- },
1092
- {
1093
- "kind": "Content",
1094
- "text": "): "
1086
+ "text": "tryActivatePopoutMode(): "
1095
1087
  },
1096
1088
  {
1097
1089
  "kind": "Content",
@@ -1104,22 +1096,13 @@
1104
1096
  ],
1105
1097
  "isStatic": false,
1106
1098
  "returnTypeTokenRange": {
1107
- "startIndex": 3,
1108
- "endIndex": 4
1099
+ "startIndex": 1,
1100
+ "endIndex": 2
1109
1101
  },
1110
1102
  "releaseTag": "Beta",
1111
1103
  "isProtected": false,
1112
1104
  "overloadIndex": 1,
1113
- "parameters": [
1114
- {
1115
- "parameterName": "autoloading",
1116
- "parameterTypeTokenRange": {
1117
- "startIndex": 1,
1118
- "endIndex": 2
1119
- },
1120
- "isOptional": true
1121
- }
1122
- ],
1105
+ "parameters": [],
1123
1106
  "isOptional": false,
1124
1107
  "isAbstract": false,
1125
1108
  "name": "tryActivatePopoutMode"
@@ -252,11 +252,9 @@ export declare class FoundationLayout extends FoundationElement implements Layou
252
252
  * then if the layout goes into popout mode then it will place itself as the only child for the popout container you set.
253
253
  * It is likely you'll want to attach this class to your design system provider.
254
254
  *
255
- * @param autoloading - If true, this respects the {@link LayoutPopoutConfig.loadAutomatically} property.
256
- * You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.
257
255
  * @beta
258
256
  */
259
- tryActivatePopoutMode(autoloading?: boolean): boolean;
257
+ tryActivatePopoutMode(): boolean;
260
258
  /**
261
259
  * Try to load a layout from local storage, or return false. Only required if manually calling {@link FoundationLayout.registerItem}
262
260
  * @remarks
@@ -592,30 +590,39 @@ export declare class FoundationLayout extends FoundationElement implements Layou
592
590
 
593
591
  declare class FoundationLayoutPopoutController extends FASTElement {
594
592
  channelName: string;
593
+ /**
594
+ * Reference to the parent layout to retrieve component state
595
+ * @internal
596
+ */
597
+ parentLayout: LayoutComponent & {
598
+ getLayoutComponents(): any[][];
599
+ };
595
600
  private layoutKey;
596
601
  private channel;
597
602
  private pollInterval;
598
603
  private unloadHandler;
599
- private lastGeometry;
604
+ private lastUpdate;
600
605
  private popoutRegistry;
601
606
  connectedCallback(): void;
602
607
  disconnectedCallback(): void;
603
608
  private setupChannel;
604
609
  private setupListener;
610
+ private applyStateToParent;
605
611
  private setupUnloadListener;
606
612
  private teardownUnloadListener;
607
613
  private emitAutosave;
608
614
  private startPolling;
609
615
  private stopPolling;
610
616
  private getGeometry;
611
- private broadcastGeometry;
617
+ private getComponentState;
618
+ private broadcastUpdate;
612
619
  /**
613
620
  * Opens a component in a popout window.
614
621
  * @param registration - The registration ID of the component to pop out.
615
- * @param geometry - Optional geometry to use for the new window.
622
+ * @param popoutState - Optional state (geometry and component state) to use for the new window.
616
623
  * @param uuid - UUID generator from parent layout
617
624
  */
618
- openPopout(registration: string, geometry?: any, uuid?: any): Promise<Window>;
625
+ openPopout(registration: string, popoutState?: PopoutState, uuid?: any): Promise<Window>;
619
626
  getRegistry(): {
620
627
  [layoutKey: string]: PopoutState;
621
628
  };
@@ -933,6 +940,7 @@ export declare class FoundationLayout extends FoundationElement implements Layou
933
940
  */
934
941
  declare type PopoutState = {
935
942
  geometry: PopoutGeometry;
943
+ state?: unknown;
936
944
  };
937
945
 
938
946
  /**
@@ -370,7 +370,7 @@ Removes all instances of a specified registered item from the layout.
370
370
  </td></tr>
371
371
  <tr><td>
372
372
 
373
- [tryActivatePopoutMode(autoloading)](./foundation-layout.foundationlayout.tryactivatepopoutmode.md)
373
+ [tryActivatePopoutMode()](./foundation-layout.foundationlayout.tryactivatepopoutmode.md)
374
374
 
375
375
 
376
376
  </td><td>
@@ -12,45 +12,8 @@ If in a popout window from the dynamic layout, this function will run the flow t
12
12
  **Signature:**
13
13
 
14
14
  ```typescript
15
- tryActivatePopoutMode(autoloading?: boolean): boolean;
15
+ tryActivatePopoutMode(): boolean;
16
16
  ```
17
-
18
- ## Parameters
19
-
20
- <table><thead><tr><th>
21
-
22
- Parameter
23
-
24
-
25
- </th><th>
26
-
27
- Type
28
-
29
-
30
- </th><th>
31
-
32
- Description
33
-
34
-
35
- </th></tr></thead>
36
- <tbody><tr><td>
37
-
38
- autoloading
39
-
40
-
41
- </td><td>
42
-
43
- boolean
44
-
45
-
46
- </td><td>
47
-
48
- _(Optional)_ If true, this respects the property. You might want to set this to false and call it manually if you're manually registering components to the layout in order to avoid race conditions.
49
-
50
-
51
- </td></tr>
52
- </tbody></table>
53
-
54
17
  **Returns:**
55
18
 
56
19
  boolean
@@ -75,7 +75,7 @@ export class FoundationLayout extends FoundationElement implements LayoutCompone
75
75
  // @internal
76
76
  requestLayoutReload(): void;
77
77
  // @beta
78
- tryActivatePopoutMode(autoloading?: boolean): boolean;
78
+ tryActivatePopoutMode(): boolean;
79
79
  tryLoadLayoutFromLocalStorage(): boolean;
80
80
  // @internal (undocumented)
81
81
  usingDeclerativeAPI: boolean;
@@ -271,7 +271,7 @@ export function unregisterFactory(key: string): boolean;
271
271
 
272
272
  // Warnings were encountered during analysis:
273
273
  //
274
- // src/utils/types.ts:36:5 - (ae-forgotten-export) The symbol "PopoutState" needs to be exported by the entry point index.d.ts
274
+ // src/utils/types.ts:56:5 - (ae-forgotten-export) The symbol "PopoutState" needs to be exported by the entry point index.d.ts
275
275
 
276
276
  // (No @packageDocumentation comment for this package)
277
277
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/foundation-layout",
3
3
  "description": "Genesis Foundation UI App Layout",
4
- "version": "14.393.3-FUI-2471.2",
4
+ "version": "14.393.3-FUI-2471.4",
5
5
  "license": "SEE LICENSE IN license.txt",
6
6
  "main": "dist/esm/index.js",
7
7
  "types": "dist/foundation-layout.d.ts",
@@ -38,22 +38,22 @@
38
38
  }
39
39
  },
40
40
  "devDependencies": {
41
- "@genesislcap/foundation-testing": "14.393.3-FUI-2471.2",
42
- "@genesislcap/genx": "14.393.3-FUI-2471.2",
43
- "@genesislcap/rollup-builder": "14.393.3-FUI-2471.2",
44
- "@genesislcap/ts-builder": "14.393.3-FUI-2471.2",
45
- "@genesislcap/uvu-playwright-builder": "14.393.3-FUI-2471.2",
46
- "@genesislcap/vite-builder": "14.393.3-FUI-2471.2",
47
- "@genesislcap/webpack-builder": "14.393.3-FUI-2471.2"
41
+ "@genesislcap/foundation-testing": "14.393.3-FUI-2471.4",
42
+ "@genesislcap/genx": "14.393.3-FUI-2471.4",
43
+ "@genesislcap/rollup-builder": "14.393.3-FUI-2471.4",
44
+ "@genesislcap/ts-builder": "14.393.3-FUI-2471.4",
45
+ "@genesislcap/uvu-playwright-builder": "14.393.3-FUI-2471.4",
46
+ "@genesislcap/vite-builder": "14.393.3-FUI-2471.4",
47
+ "@genesislcap/webpack-builder": "14.393.3-FUI-2471.4"
48
48
  },
49
49
  "dependencies": {
50
50
  "@genesis-community/golden-layout": "^2.11.0",
51
- "@genesislcap/foundation-broadcast-channel": "14.393.3-FUI-2471.2",
52
- "@genesislcap/foundation-comms": "14.393.3-FUI-2471.2",
53
- "@genesislcap/foundation-events": "14.393.3-FUI-2471.2",
54
- "@genesislcap/foundation-logger": "14.393.3-FUI-2471.2",
55
- "@genesislcap/foundation-ui": "14.393.3-FUI-2471.2",
56
- "@genesislcap/foundation-utils": "14.393.3-FUI-2471.2",
51
+ "@genesislcap/foundation-broadcast-channel": "14.393.3-FUI-2471.4",
52
+ "@genesislcap/foundation-comms": "14.393.3-FUI-2471.4",
53
+ "@genesislcap/foundation-events": "14.393.3-FUI-2471.4",
54
+ "@genesislcap/foundation-logger": "14.393.3-FUI-2471.4",
55
+ "@genesislcap/foundation-ui": "14.393.3-FUI-2471.4",
56
+ "@genesislcap/foundation-utils": "14.393.3-FUI-2471.4",
57
57
  "@microsoft/fast-components": "2.30.6",
58
58
  "@microsoft/fast-element": "1.14.0",
59
59
  "@microsoft/fast-foundation": "2.50.0"
@@ -67,5 +67,5 @@
67
67
  "access": "public"
68
68
  },
69
69
  "customElements": "dist/custom-elements.json",
70
- "gitHead": "8d5276ff6ff9d909b67f0095a7cc2df458d1e8eb"
70
+ "gitHead": "774e9a5e7f1787920487b93a1f3ab6683fd08453"
71
71
  }