@genesislcap/foundation-layout 14.393.3-FUI-2471.1 → 14.393.3-FUI-2471.2

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.
@@ -621,15 +621,6 @@
621
621
  "default": "undefined",
622
622
  "description": "Controls whether popout functionality is enabled on the layout. Defaults to disabled.\nPass an empty object `{}` to use default configurations, or a LayoutPopoutConfig object to further customise."
623
623
  },
624
- {
625
- "kind": "field",
626
- "name": "popupMode",
627
- "type": {
628
- "text": "boolean"
629
- },
630
- "privacy": "private",
631
- "default": "false"
632
- },
633
624
  {
634
625
  "kind": "method",
635
626
  "name": "layoutRequiredRegistrations",
@@ -1004,7 +995,7 @@
1004
995
  {
1005
996
  "kind": "variable",
1006
997
  "name": "layoutTemplate",
1007
- "default": "html<FoundationLayout>`\n <template>\n ${when((x) => !x.hasFirstLoaded && x.usingDeclerativeAPI, loadingTemplate)}\n <div class=\"layout-container\" ${ref('layoutElement')}></div>\n </template>\n`",
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`",
1008
999
  "description": "`ViewTemplate` which defines the html for FoundationLayout.",
1009
1000
  "privacy": "public"
1010
1001
  }
@@ -1036,6 +1027,227 @@
1036
1027
  }
1037
1028
  ]
1038
1029
  },
1030
+ {
1031
+ "kind": "javascript-module",
1032
+ "path": "src/main/layout-popout-controller.ts",
1033
+ "declarations": [
1034
+ {
1035
+ "kind": "class",
1036
+ "description": "",
1037
+ "name": "FoundationLayoutPopoutController",
1038
+ "members": [
1039
+ {
1040
+ "kind": "field",
1041
+ "name": "channelName",
1042
+ "type": {
1043
+ "text": "string"
1044
+ }
1045
+ },
1046
+ {
1047
+ "kind": "field",
1048
+ "name": "layoutKey",
1049
+ "type": {
1050
+ "text": "string"
1051
+ },
1052
+ "privacy": "private"
1053
+ },
1054
+ {
1055
+ "kind": "field",
1056
+ "name": "channel",
1057
+ "type": {
1058
+ "text": "TypedBroadcastChannel<LayoutPopoutEvents>"
1059
+ },
1060
+ "privacy": "private"
1061
+ },
1062
+ {
1063
+ "kind": "field",
1064
+ "name": "pollInterval",
1065
+ "type": {
1066
+ "text": "any"
1067
+ },
1068
+ "privacy": "private"
1069
+ },
1070
+ {
1071
+ "kind": "field",
1072
+ "name": "unloadHandler",
1073
+ "type": {
1074
+ "text": "() => void"
1075
+ },
1076
+ "privacy": "private"
1077
+ },
1078
+ {
1079
+ "kind": "field",
1080
+ "name": "lastGeometry",
1081
+ "type": {
1082
+ "text": "string"
1083
+ },
1084
+ "privacy": "private"
1085
+ },
1086
+ {
1087
+ "kind": "field",
1088
+ "name": "popoutRegistry",
1089
+ "type": {
1090
+ "text": "Map<string, { geometry: PopoutState['geometry']; window?: Window }>"
1091
+ },
1092
+ "privacy": "private",
1093
+ "default": "new Map()"
1094
+ },
1095
+ {
1096
+ "kind": "method",
1097
+ "name": "setupChannel",
1098
+ "privacy": "private"
1099
+ },
1100
+ {
1101
+ "kind": "method",
1102
+ "name": "setupListener",
1103
+ "privacy": "private"
1104
+ },
1105
+ {
1106
+ "kind": "method",
1107
+ "name": "setupUnloadListener",
1108
+ "privacy": "private"
1109
+ },
1110
+ {
1111
+ "kind": "method",
1112
+ "name": "teardownUnloadListener",
1113
+ "privacy": "private"
1114
+ },
1115
+ {
1116
+ "kind": "method",
1117
+ "name": "emitAutosave",
1118
+ "privacy": "private"
1119
+ },
1120
+ {
1121
+ "kind": "method",
1122
+ "name": "startPolling",
1123
+ "privacy": "private"
1124
+ },
1125
+ {
1126
+ "kind": "method",
1127
+ "name": "stopPolling",
1128
+ "privacy": "private"
1129
+ },
1130
+ {
1131
+ "kind": "method",
1132
+ "name": "getGeometry",
1133
+ "privacy": "private"
1134
+ },
1135
+ {
1136
+ "kind": "method",
1137
+ "name": "broadcastGeometry",
1138
+ "privacy": "private",
1139
+ "parameters": [
1140
+ {
1141
+ "name": "geometry",
1142
+ "type": {
1143
+ "text": "Awaited<ReturnType<typeof this.getGeometry>>"
1144
+ }
1145
+ }
1146
+ ]
1147
+ },
1148
+ {
1149
+ "kind": "method",
1150
+ "name": "openPopout",
1151
+ "privacy": "public",
1152
+ "parameters": [
1153
+ {
1154
+ "name": "registration",
1155
+ "type": {
1156
+ "text": "string"
1157
+ },
1158
+ "description": "The registration ID of the component to pop out."
1159
+ },
1160
+ {
1161
+ "name": "geometry",
1162
+ "optional": true,
1163
+ "type": {
1164
+ "text": "any"
1165
+ },
1166
+ "description": "Optional geometry to use for the new window."
1167
+ },
1168
+ {
1169
+ "name": "uuid",
1170
+ "optional": true,
1171
+ "type": {
1172
+ "text": "any"
1173
+ },
1174
+ "description": "UUID generator from parent layout"
1175
+ }
1176
+ ],
1177
+ "description": "Opens a component in a popout window."
1178
+ },
1179
+ {
1180
+ "kind": "method",
1181
+ "name": "getRegistry",
1182
+ "privacy": "public",
1183
+ "return": {
1184
+ "type": {
1185
+ "text": "{ [layoutKey: string]: PopoutState }"
1186
+ }
1187
+ }
1188
+ },
1189
+ {
1190
+ "kind": "method",
1191
+ "name": "restorePopouts",
1192
+ "privacy": "public",
1193
+ "parameters": [
1194
+ {
1195
+ "name": "registry",
1196
+ "type": {
1197
+ "text": "{ [layoutKey: string]: PopoutState }"
1198
+ }
1199
+ },
1200
+ {
1201
+ "name": "uuid",
1202
+ "type": {
1203
+ "text": "any"
1204
+ }
1205
+ }
1206
+ ],
1207
+ "description": "Restores popouts from a registry"
1208
+ },
1209
+ {
1210
+ "kind": "method",
1211
+ "name": "closeAllPopouts",
1212
+ "privacy": "public"
1213
+ }
1214
+ ],
1215
+ "attributes": [
1216
+ {
1217
+ "name": "channel-name",
1218
+ "type": {
1219
+ "text": "string"
1220
+ },
1221
+ "fieldName": "channelName"
1222
+ }
1223
+ ],
1224
+ "superclass": {
1225
+ "name": "FASTElement",
1226
+ "package": "@microsoft/fast-element"
1227
+ },
1228
+ "tagName": "foundation-layout-popout-controller",
1229
+ "customElement": true
1230
+ }
1231
+ ],
1232
+ "exports": [
1233
+ {
1234
+ "kind": "js",
1235
+ "name": "FoundationLayoutPopoutController",
1236
+ "declaration": {
1237
+ "name": "FoundationLayoutPopoutController",
1238
+ "module": "src/main/layout-popout-controller.ts"
1239
+ }
1240
+ },
1241
+ {
1242
+ "kind": "custom-element-definition",
1243
+ "name": "foundation-layout-popout-controller",
1244
+ "declaration": {
1245
+ "name": "FoundationLayoutPopoutController",
1246
+ "module": "src/main/layout-popout-controller.ts"
1247
+ }
1248
+ }
1249
+ ]
1250
+ },
1039
1251
  {
1040
1252
  "kind": "javascript-module",
1041
1253
  "path": "src/main/layout-region.ts",
@@ -1359,6 +1571,15 @@
1359
1571
  "default": "'f-layout-key'",
1360
1572
  "description": "Key to be used for controlling popout behaviour"
1361
1573
  },
1574
+ {
1575
+ "kind": "variable",
1576
+ "name": "POPOUT_GEOMETRY_BROADCAST_INTERVAL",
1577
+ "type": {
1578
+ "text": "number"
1579
+ },
1580
+ "default": "1000",
1581
+ "description": "How often a popout window should check to broadcast its\ngeometry"
1582
+ },
1362
1583
  {
1363
1584
  "kind": "variable",
1364
1585
  "name": "LAYOUT_POPOUT_CONTAINER_CLASS",
@@ -1398,6 +1619,14 @@
1398
1619
  "module": "src/utils/constants.ts"
1399
1620
  }
1400
1621
  },
1622
+ {
1623
+ "kind": "js",
1624
+ "name": "POPOUT_GEOMETRY_BROADCAST_INTERVAL",
1625
+ "declaration": {
1626
+ "name": "POPOUT_GEOMETRY_BROADCAST_INTERVAL",
1627
+ "module": "src/utils/constants.ts"
1628
+ }
1629
+ },
1401
1630
  {
1402
1631
  "kind": "js",
1403
1632
  "name": "LAYOUT_POPOUT_CONTAINER_CLASS",
@@ -1662,6 +1891,14 @@
1662
1891
  "package": "./templates"
1663
1892
  }
1664
1893
  },
1894
+ {
1895
+ "kind": "js",
1896
+ "name": "*",
1897
+ "declaration": {
1898
+ "name": "*",
1899
+ "package": "./popout-events"
1900
+ }
1901
+ },
1665
1902
  {
1666
1903
  "kind": "js",
1667
1904
  "name": "*",
@@ -1706,6 +1943,32 @@
1706
1943
  "declarations": [],
1707
1944
  "exports": []
1708
1945
  },
1946
+ {
1947
+ "kind": "javascript-module",
1948
+ "path": "src/utils/popout-events.ts",
1949
+ "declarations": [
1950
+ {
1951
+ "kind": "variable",
1952
+ "name": "LAYOUT_POPOUT_CHANNEL_NAME",
1953
+ "type": {
1954
+ "text": "string"
1955
+ },
1956
+ "default": "'f-layout-popout-channel'",
1957
+ "description": "Name of the default broadcast channel used for layout popouts",
1958
+ "privacy": "public"
1959
+ }
1960
+ ],
1961
+ "exports": [
1962
+ {
1963
+ "kind": "js",
1964
+ "name": "LAYOUT_POPOUT_CHANNEL_NAME",
1965
+ "declaration": {
1966
+ "name": "LAYOUT_POPOUT_CHANNEL_NAME",
1967
+ "module": "src/utils/popout-events.ts"
1968
+ }
1969
+ }
1970
+ ]
1971
+ },
1709
1972
  {
1710
1973
  "kind": "javascript-module",
1711
1974
  "path": "src/utils/templates.ts",
@@ -1,6 +1,7 @@
1
1
  import { LayoutConfig, RootItemConfig } from '@genesis-community/golden-layout';
2
2
  import { FoundationElement } from '@microsoft/fast-foundation';
3
3
  import { ComponentFactory, componentType, CustomButton, LayoutComponent, LayoutPopoutConfig, Placement, RegisteredElementConfig, RegistrationConfig, SerialisedLayout } from '../utils/';
4
+ import { FoundationLayoutPopoutController } from './layout-popout-controller';
4
5
  export { layoutStyles } from '../styles';
5
6
  /**
6
7
  * @public
@@ -95,13 +96,16 @@ export declare class FoundationLayout extends FoundationElement implements Layou
95
96
  * has changed and know you potentially need to gate some of your lifecycle functionality.
96
97
  */
97
98
  lifecycleUpdateToken: string | undefined;
99
+ /** @internal */
100
+ popupMode: boolean;
101
+ /** @internal */
102
+ popoutController: FoundationLayoutPopoutController;
98
103
  /**
99
104
  * Controls whether popout functionality is enabled on the layout. Defaults to disabled.
100
105
  * Pass an empty object `{}` to use default configurations, or a {@link LayoutPopoutConfig} object to further customise.
101
106
  * @beta
102
107
  */
103
108
  popoutConfig: LayoutPopoutConfig | undefined;
104
- private popupMode;
105
109
  /** @internal */
106
110
  constructor();
107
111
  /** @internal */
@@ -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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"}
@@ -0,0 +1,40 @@
1
+ import { FASTElement } from '@microsoft/fast-element';
2
+ import { PopoutState } from '../utils';
3
+ export declare class FoundationLayoutPopoutController extends FASTElement {
4
+ channelName: string;
5
+ private layoutKey;
6
+ private channel;
7
+ private pollInterval;
8
+ private unloadHandler;
9
+ private lastGeometry;
10
+ private popoutRegistry;
11
+ connectedCallback(): void;
12
+ disconnectedCallback(): void;
13
+ private setupChannel;
14
+ private setupListener;
15
+ private setupUnloadListener;
16
+ private teardownUnloadListener;
17
+ private emitAutosave;
18
+ private startPolling;
19
+ private stopPolling;
20
+ private getGeometry;
21
+ private broadcastGeometry;
22
+ /**
23
+ * Opens a component in a popout window.
24
+ * @param registration - The registration ID of the component to pop out.
25
+ * @param geometry - Optional geometry to use for the new window.
26
+ * @param uuid - UUID generator from parent layout
27
+ */
28
+ openPopout(registration: string, geometry?: any, uuid?: any): Promise<Window>;
29
+ getRegistry(): {
30
+ [layoutKey: string]: PopoutState;
31
+ };
32
+ /**
33
+ * Restores popouts from a registry
34
+ */
35
+ restorePopouts(registry: {
36
+ [layoutKey: string]: PopoutState;
37
+ }, uuid: any): Promise<void>;
38
+ closeAllPopouts(): void;
39
+ }
40
+ //# sourceMappingURL=layout-popout-controller.d.ts.map
@@ -0,0 +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"}
@@ -26,6 +26,12 @@ export declare const AUTOSAVE_KEY = "foundation-layout-autosave";
26
26
  * @beta
27
27
  */
28
28
  export declare const LAYOUT_POPOUT_CONTROL_KEY = "f-layout-key";
29
+ /**
30
+ * How often a popout window should check to broadcast its
31
+ * geometry
32
+ * @interal
33
+ */
34
+ export declare const POPOUT_GEOMETRY_BROADCAST_INTERVAL = 1000;
29
35
  /**
30
36
  * Put this classname on an element which is a DOM parent of the layout, and
31
37
  * if the layout goes into popout mode then it will place itself as the only child
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,aAAa,eAA2B,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,eAA+B,CAAC;AAE9D;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,YAAY,+BAA+B,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAExD;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAE/D,eAAO,MAAM,kBAAkB,SAAS,CAAC;AAGzC,eAAO,MAAM,qBAAqB,cAKjC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,aAAa,eAA2B,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,eAA+B,CAAC;AAE9D;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,YAAY,+BAA+B,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,OAAO,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAE/D,eAAO,MAAM,kBAAkB,SAAS,CAAC;AAGzC,eAAO,MAAM,qBAAqB,cAKjC,CAAC"}
@@ -4,6 +4,7 @@ export * from './events';
4
4
  export * from './factory-registry';
5
5
  export * from './misc';
6
6
  export * from './templates';
7
+ export * from './popout-events';
7
8
  export * from './types';
8
9
  export * from './error';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,37 @@
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
+ };
13
+ /**
14
+ * Events for layout popout communication
15
+ * @public
16
+ */
17
+ export interface LayoutPopoutEvents extends EventDetailMap {
18
+ /**
19
+ * Emitted by a popout window when its geometry changes
20
+ */
21
+ 'popout-geometry-change': {
22
+ layoutKey: string;
23
+ geometry: PopoutGeometry;
24
+ };
25
+ /**
26
+ * Emitted by a popout window when it is closed
27
+ */
28
+ 'popout-closed': {
29
+ layoutKey: string;
30
+ };
31
+ }
32
+ /**
33
+ * Name of the default broadcast channel used for layout popouts
34
+ * @public
35
+ */
36
+ export declare const LAYOUT_POPOUT_CHANNEL_NAME = "f-layout-popout-channel";
37
+ //# sourceMappingURL=popout-events.d.ts.map
@@ -0,0 +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,5 +1,6 @@
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
  /**
4
5
  * Definition of a custom button which will be added to all layout items.
5
6
  * @remarks
@@ -25,6 +26,20 @@ export type CustomButton = {
25
26
  export type SerialisedLayout = {
26
27
  v: '1';
27
28
  c: ResolvedLayoutConfig;
29
+ /**
30
+ * Optional registry of popped out components and their window geometry.
31
+ * @beta
32
+ */
33
+ popouts?: {
34
+ [layoutKey: string]: PopoutState;
35
+ };
36
+ };
37
+ /**
38
+ * @beta
39
+ * State of a popped out window
40
+ */
41
+ export type PopoutState = {
42
+ geometry: PopoutGeometry;
28
43
  };
29
44
  /**
30
45
  * 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.
@@ -202,6 +217,11 @@ export type AutosavedLayouts = {
202
217
  };
203
218
  /** @beta */
204
219
  export type LayoutPopoutConfig = {
220
+ /**
221
+ * The name of the broadcast channel to use for communication between the main window and popout windows.
222
+ * Defaults to 'f-layout-popout-channel'.
223
+ */
224
+ channelName?: string;
205
225
  loadAutomatically?: boolean;
206
226
  popoutDimension?: {
207
227
  width: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CAC9D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,GAAG,CAAC;IACP,CAAC,EAAE,oBAAoB,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoDK;AACL,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC;;OAEG;IACH,eAAe,IAAI,CAAC,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC1C,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,gBAAgB,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,gBAAgB;AAChB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,gBAAgB;AAChB,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,OAAO,GAC1C,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,GAAG;IACrC,CAAC,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,CAAC;CACzC,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,WAAW,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAE/E,gBAAgB;AAChB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,CACA;IACE,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,GACD;IACE,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CACJ,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,6CAA8C,CAAC;AAC7E;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,gBAAgB;AAChB,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhE,gBAAgB;AAChB,MAAM,WAAW,eAAe;IAC9B,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IAChC,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC;IAC7D,mBAAmB,IAAI,IAAI,CAAC;CAC7B;AAED,gBAAgB;AAChB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrB,CAAC;AAEF,YAAY;AACZ,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,9 @@ import { AUTOSAVE_KEY, componentType, DEFAULT_RELOAD_BUFFER, getMissingArrayItem
11
11
  import { LayoutRegistrationError, LayoutUsageError } from '../utils/error';
12
12
  import { getFactory } from '../utils/factory-registry';
13
13
  import { logger } from '../utils/logger';
14
+ import { FoundationLayoutPopoutController } from './layout-popout-controller';
14
15
  export { layoutStyles } from '../styles';
16
+ FoundationLayoutPopoutController;
15
17
  /*
16
18
  * We only want to apply the global stylesheet required for golden layout
17
19
  * to work once, and only apply it if we actually use an instance of the
@@ -101,13 +103,14 @@ export class FoundationLayout extends FoundationElement {
101
103
  * has changed and know you potentially need to gate some of your lifecycle functionality.
102
104
  */
103
105
  this.lifecycleUpdateToken = undefined;
106
+ /** @internal */
107
+ this.popupMode = false;
104
108
  /**
105
109
  * Controls whether popout functionality is enabled on the layout. Defaults to disabled.
106
110
  * Pass an empty object `{}` to use default configurations, or a {@link LayoutPopoutConfig} object to further customise.
107
111
  * @beta
108
112
  */
109
113
  this.popoutConfig = undefined;
110
- this.popupMode = false;
111
114
  /** @internal */
112
115
  _FoundationLayout__boundDragListener.set(this, undefined);
113
116
  /** @internal */
@@ -256,6 +259,7 @@ export class FoundationLayout extends FoundationElement {
256
259
  * @returns - latest version of {@link SerialisedLayout} describing the layout
257
260
  */
258
261
  getLayout() {
262
+ var _b, _c;
259
263
  const componentCollection = this.getLayoutComponents();
260
264
  componentCollection.forEach((items) => {
261
265
  if (!items.length)
@@ -276,7 +280,11 @@ export class FoundationLayout extends FoundationElement {
276
280
  orderedStates,
277
281
  });
278
282
  });
279
- return { v: '1', c: ResolvedLayoutConfig.minifyConfig(this.layout.saveLayout()) };
283
+ return {
284
+ v: '1',
285
+ c: ResolvedLayoutConfig.minifyConfig(this.layout.saveLayout()),
286
+ popouts: (_c = (_b = this.popoutController) === null || _b === void 0 ? void 0 : _b.getRegistry()) !== null && _c !== void 0 ? _c : {},
287
+ };
280
288
  }
281
289
  /**
282
290
  * If in a popout window from the dynamic layout, this function will run the flow to put the component in popout mode.
@@ -403,6 +411,7 @@ export class FoundationLayout extends FoundationElement {
403
411
  * @throws various errors if the layout string is malformed and cannot be parsed
404
412
  */
405
413
  loadLayout(layout, handleMissingItem = 'error', disableCache = false) {
414
+ var _b;
406
415
  const alreadyRegistered = this.registeredItems();
407
416
  const wantedRegistered = FoundationLayout.layoutRequiredRegistrations(layout);
408
417
  const missingRegisteredItems = getMissingArrayItems(wantedRegistered, alreadyRegistered);
@@ -414,6 +423,9 @@ export class FoundationLayout extends FoundationElement {
414
423
  const layoutConfig = LayoutConfig.fromResolved(ResolvedLayoutConfig.unminifyConfig(layout.c));
415
424
  if (disableCache)
416
425
  this.removeConfigCacheInformation(layoutConfig);
426
+ if (!this.popupMode && this.popoutController) {
427
+ this.popoutController.restorePopouts((_b = layout.popouts) !== null && _b !== void 0 ? _b : {}, this.uuid);
428
+ }
417
429
  if (missingRegisteredItems.length !== 0 && handleMissingItem === 'placeholder') {
418
430
  this.registerPlaceholdersAndSetClosable(layoutConfig, missingRegisteredItems);
419
431
  }
@@ -983,12 +995,18 @@ export class FoundationLayout extends FoundationElement {
983
995
  this.customButtons.push({
984
996
  svg: LAYOUT_ICONS.popoutSVG,
985
997
  onClick: (_, elem) => {
998
+ var _b;
986
999
  const registration = elem.firstChild[instanceContainer].registration;
987
- const url = new URL(window.location.toString());
988
- const itemParams = new URLSearchParams();
989
- itemParams.append(LAYOUT_POPOUT_CONTROL_KEY, registration);
990
- url.search = itemParams.toString();
991
- window.open(url, undefined, `popup,width=${configWithDefaults.popoutDimension.width},height=${configWithDefaults.popoutDimension.height}`);
1000
+ // Use default dimensions from config
1001
+ const defaultGeometry = {
1002
+ screenX: undefined,
1003
+ screenY: undefined,
1004
+ outerWidth: configWithDefaults.popoutDimension.width,
1005
+ outerHeight: configWithDefaults.popoutDimension.height,
1006
+ };
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);
1009
+ this.cacheAndSaveLayout();
992
1010
  },
993
1011
  });
994
1012
  this.popupMode = window.location.search.includes(LAYOUT_POPOUT_CONTROL_KEY);
@@ -1019,6 +1037,9 @@ __decorate([
1019
1037
  __decorate([
1020
1038
  observable
1021
1039
  ], FoundationLayout.prototype, "dragging", void 0);
1040
+ __decorate([
1041
+ observable
1042
+ ], FoundationLayout.prototype, "popupMode", void 0);
1022
1043
  __decorate([
1023
1044
  observable
1024
1045
  ], FoundationLayout.prototype, "popoutConfig", void 0);
@@ -1036,6 +1057,12 @@ const loadingTemplate = html `
1036
1057
  */
1037
1058
  export const layoutTemplate = html `
1038
1059
  <template>
1060
+ ${when((x) => Boolean(x.popoutConfig), html `
1061
+ <foundation-layout-popout-controller
1062
+ ${ref('popoutController')}
1063
+ channel-name="${(x) => { var _b; return (_b = x.popoutConfig) === null || _b === void 0 ? void 0 : _b.channelName; }}"
1064
+ ></foundation-layout-popout-controller>
1065
+ `)}
1039
1066
  ${when((x) => !x.hasFirstLoaded && x.usingDeclerativeAPI, loadingTemplate)}
1040
1067
  <div class="layout-container" ${ref('layoutElement')}></div>
1041
1068
  </template>
@@ -0,0 +1,243 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { createTypedBroadcastChannel, } from '@genesislcap/foundation-broadcast-channel';
3
+ import { attr, customElement, FASTElement } from '@microsoft/fast-element';
4
+ import { LAYOUT_POPOUT_CONTROL_KEY, LayoutReceiveEvents, POPOUT_GEOMETRY_BROADCAST_INTERVAL, } from '../utils';
5
+ import { LAYOUT_POPOUT_CHANNEL_NAME } from '../utils/popout-events';
6
+ let FoundationLayoutPopoutController = class FoundationLayoutPopoutController extends FASTElement {
7
+ constructor() {
8
+ super(...arguments);
9
+ // Internal registry to track both geometry and active window references
10
+ this.popoutRegistry = new Map();
11
+ }
12
+ connectedCallback() {
13
+ super.connectedCallback();
14
+ this.layoutKey = new URLSearchParams(window.location.search).get(LAYOUT_POPOUT_CONTROL_KEY);
15
+ this.setupChannel();
16
+ this.setupUnloadListener();
17
+ if (this.layoutKey) {
18
+ this.startPolling();
19
+ }
20
+ else {
21
+ this.setupListener();
22
+ }
23
+ }
24
+ disconnectedCallback() {
25
+ super.disconnectedCallback();
26
+ if (this.channel) {
27
+ this.channel.close();
28
+ }
29
+ this.stopPolling();
30
+ this.teardownUnloadListener();
31
+ if (!this.layoutKey) {
32
+ this.closeAllPopouts();
33
+ }
34
+ }
35
+ setupChannel() {
36
+ const name = this.channelName || LAYOUT_POPOUT_CHANNEL_NAME;
37
+ this.channel = createTypedBroadcastChannel(name);
38
+ }
39
+ setupListener() {
40
+ if (!this.channel)
41
+ return;
42
+ this.channel.onmessage = (ev) => {
43
+ if (this.channel.isMessageType('popout-geometry-change', ev)) {
44
+ const { layoutKey, geometry } = ev.data
45
+ .detail;
46
+ const current = this.popoutRegistry.get(layoutKey);
47
+ this.popoutRegistry.set(layoutKey, Object.assign(Object.assign({}, current), { geometry }));
48
+ this.emitAutosave();
49
+ }
50
+ else if (this.channel.isMessageType('popout-closed', ev)) {
51
+ const { layoutKey } = ev.data.detail;
52
+ this.popoutRegistry.delete(layoutKey);
53
+ this.emitAutosave();
54
+ }
55
+ };
56
+ }
57
+ setupUnloadListener() {
58
+ this.unloadHandler = () => {
59
+ if (this.layoutKey) {
60
+ if (this.channel) {
61
+ this.channel.postMessage('popout-closed', { layoutKey: this.layoutKey });
62
+ }
63
+ }
64
+ else {
65
+ this.closeAllPopouts();
66
+ }
67
+ };
68
+ window.addEventListener('beforeunload', this.unloadHandler);
69
+ }
70
+ teardownUnloadListener() {
71
+ if (this.unloadHandler) {
72
+ window.removeEventListener('beforeunload', this.unloadHandler);
73
+ this.unloadHandler = null;
74
+ }
75
+ }
76
+ emitAutosave() {
77
+ this.$emit(LayoutReceiveEvents.autosave, undefined, {
78
+ bubbles: true,
79
+ composed: true,
80
+ });
81
+ }
82
+ startPolling() {
83
+ 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;
89
+ }
90
+ }), POPOUT_GEOMETRY_BROADCAST_INTERVAL);
91
+ }
92
+ stopPolling() {
93
+ if (this.pollInterval) {
94
+ clearInterval(this.pollInterval);
95
+ }
96
+ }
97
+ getGeometry() {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ const screenId = yield (() => __awaiter(this, void 0, void 0, function* () {
100
+ var _a;
101
+ if ('getScreenDetails' in window) {
102
+ try {
103
+ // This may prompt the user for permission if not already granted
104
+ const details = yield window.getScreenDetails();
105
+ return (_a = details.currentScreen) === null || _a === void 0 ? void 0 : _a.label;
106
+ }
107
+ catch (e) {
108
+ // Silent fail - permission denied or API error
109
+ return undefined;
110
+ }
111
+ }
112
+ return undefined;
113
+ }))();
114
+ return {
115
+ screenX: window.screenX,
116
+ screenY: window.screenY,
117
+ outerWidth: window.outerWidth,
118
+ outerHeight: window.outerHeight,
119
+ screenId,
120
+ };
121
+ });
122
+ }
123
+ broadcastGeometry(geometry) {
124
+ if (!this.channel || !this.layoutKey)
125
+ return;
126
+ this.channel.postMessage('popout-geometry-change', {
127
+ layoutKey: this.layoutKey,
128
+ geometry,
129
+ });
130
+ console.log('[PopoutController] Broadcasting geometry:', geometry);
131
+ }
132
+ /**
133
+ * Opens a component in a popout window.
134
+ * @param registration - The registration ID of the component to pop out.
135
+ * @param geometry - Optional geometry to use for the new window.
136
+ * @param uuid - UUID generator from parent layout
137
+ */
138
+ openPopout(registration, geometry, uuid) {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ const url = new URL(window.location.toString());
141
+ const itemParams = new URLSearchParams();
142
+ itemParams.append(LAYOUT_POPOUT_CONTROL_KEY, registration);
143
+ url.search = itemParams.toString();
144
+ let features = 'popup';
145
+ let targetLeft = geometry === null || geometry === void 0 ? void 0 : geometry.screenX;
146
+ 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
+ if ((geometry === null || geometry === void 0 ? void 0 : geometry.screenId) && 'getScreenDetails' in window) {
149
+ try {
150
+ const details = yield window.getScreenDetails();
151
+ const targetScreen = details.screens.find((s) => s.label === geometry.screenId);
152
+ if (targetScreen) {
153
+ const isWithin = targetLeft >= targetScreen.availLeft &&
154
+ targetLeft < targetScreen.availLeft + targetScreen.availWidth &&
155
+ targetTop >= targetScreen.availTop &&
156
+ targetTop < targetScreen.availTop + targetScreen.availHeight;
157
+ if (!isWithin) {
158
+ targetLeft = targetScreen.availLeft;
159
+ targetTop = targetScreen.availTop;
160
+ }
161
+ }
162
+ else {
163
+ targetLeft = undefined;
164
+ targetTop = undefined;
165
+ }
166
+ }
167
+ catch (e) {
168
+ // Fallback
169
+ }
170
+ }
171
+ if (geometry) {
172
+ features += `,width=${geometry.outerWidth},height=${geometry.outerHeight}`;
173
+ if (targetLeft !== undefined)
174
+ features += `,left=${targetLeft}`;
175
+ if (targetTop !== undefined)
176
+ features += `,top=${targetTop}`;
177
+ }
178
+ else {
179
+ features += ',width=800,height=600'; // Default fallback
180
+ }
181
+ const win = window.open(url, `popout-${registration}-${(uuid === null || uuid === void 0 ? void 0 : uuid.createId()) || Date.now()}`, features);
182
+ if (!win) {
183
+ console.warn(`Popout window for ${registration} was blocked.`);
184
+ return null;
185
+ }
186
+ // Update registry with the window reference and geometry (if provided)
187
+ const current = this.popoutRegistry.get(registration);
188
+ this.popoutRegistry.set(registration, {
189
+ geometry: geometry || (current === null || current === void 0 ? void 0 : current.geometry),
190
+ window: win,
191
+ });
192
+ return win;
193
+ });
194
+ }
195
+ getRegistry() {
196
+ const output = {};
197
+ for (const [key, val] of this.popoutRegistry.entries()) {
198
+ if (val.geometry) {
199
+ output[key] = { geometry: val.geometry };
200
+ }
201
+ }
202
+ return output;
203
+ }
204
+ /**
205
+ * Restores popouts from a registry
206
+ */
207
+ restorePopouts(registry, uuid) {
208
+ return __awaiter(this, void 0, void 0, function* () {
209
+ this.closeAllPopouts();
210
+ // Populate the registry with serialized data
211
+ for (const [key, val] of Object.entries(registry)) {
212
+ this.popoutRegistry.set(key, { geometry: val.geometry });
213
+ }
214
+ const keys = Array.from(this.popoutRegistry.keys());
215
+ if (keys.length === 0)
216
+ return;
217
+ console.debug(`Restoring ${keys.length} popout windows`);
218
+ yield Promise.all(keys.map((key) => {
219
+ const state = this.popoutRegistry.get(key);
220
+ return this.openPopout(key, state.geometry, uuid);
221
+ }));
222
+ });
223
+ }
224
+ closeAllPopouts() {
225
+ for (const val of this.popoutRegistry.values()) {
226
+ if (val.window && !val.window.closed) {
227
+ val.window.close();
228
+ }
229
+ }
230
+ this.popoutRegistry.clear();
231
+ }
232
+ };
233
+ __decorate([
234
+ attr({ attribute: 'channel-name' })
235
+ ], FoundationLayoutPopoutController.prototype, "channelName", void 0);
236
+ FoundationLayoutPopoutController = __decorate([
237
+ customElement({
238
+ name: 'foundation-layout-popout-controller',
239
+ template: null,
240
+ styles: null,
241
+ })
242
+ ], FoundationLayoutPopoutController);
243
+ export { FoundationLayoutPopoutController };
@@ -28,6 +28,12 @@ export const AUTOSAVE_KEY = 'foundation-layout-autosave';
28
28
  * @beta
29
29
  */
30
30
  export const LAYOUT_POPOUT_CONTROL_KEY = 'f-layout-key';
31
+ /**
32
+ * How often a popout window should check to broadcast its
33
+ * geometry
34
+ * @interal
35
+ */
36
+ export const POPOUT_GEOMETRY_BROADCAST_INTERVAL = 1000;
31
37
  /**
32
38
  * Put this classname on an element which is a DOM parent of the layout, and
33
39
  * if the layout goes into popout mode then it will place itself as the only child
@@ -4,5 +4,6 @@ export * from './events';
4
4
  export * from './factory-registry';
5
5
  export * from './misc';
6
6
  export * from './templates';
7
+ export * from './popout-events';
7
8
  export * from './types';
8
9
  export * from './error';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Name of the default broadcast channel used for layout popouts
3
+ * @public
4
+ */
5
+ export const LAYOUT_POPOUT_CHANNEL_NAME = 'f-layout-popout-channel';
@@ -1908,7 +1908,7 @@
1908
1908
  },
1909
1909
  {
1910
1910
  "kind": "Content",
1911
- "text": "{\n loadAutomatically?: boolean;\n popoutDimension?: {\n width: number;\n height: number;\n };\n}"
1911
+ "text": "{\n channelName?: string;\n loadAutomatically?: boolean;\n popoutDimension?: {\n width: number;\n height: number;\n };\n}"
1912
1912
  },
1913
1913
  {
1914
1914
  "kind": "Content",
@@ -2474,7 +2474,16 @@
2474
2474
  },
2475
2475
  {
2476
2476
  "kind": "Content",
2477
- "text": ";\n}"
2477
+ "text": ";\n popouts?: {\n [layoutKey: string]: "
2478
+ },
2479
+ {
2480
+ "kind": "Reference",
2481
+ "text": "PopoutState",
2482
+ "canonicalReference": "@genesislcap/foundation-layout!~PopoutState:type"
2483
+ },
2484
+ {
2485
+ "kind": "Content",
2486
+ "text": ";\n };\n}"
2478
2487
  },
2479
2488
  {
2480
2489
  "kind": "Content",
@@ -2486,7 +2495,7 @@
2486
2495
  "name": "SerialisedLayout",
2487
2496
  "typeTokenRange": {
2488
2497
  "startIndex": 1,
2489
- "endIndex": 4
2498
+ "endIndex": 6
2490
2499
  }
2491
2500
  },
2492
2501
  {
@@ -1,5 +1,6 @@
1
1
  import type { Container } from '@microsoft/fast-foundation';
2
2
  import { ElementStyles } from '@microsoft/fast-element';
3
+ import { FASTElement } from '@microsoft/fast-element';
3
4
  import { FoundationElement } from '@microsoft/fast-foundation';
4
5
  import { FoundationElementRegistry } from '@microsoft/fast-foundation';
5
6
  import { LayoutConfig } from '@genesis-community/golden-layout';
@@ -170,13 +171,16 @@ export declare class FoundationLayout extends FoundationElement implements Layou
170
171
  * has changed and know you potentially need to gate some of your lifecycle functionality.
171
172
  */
172
173
  lifecycleUpdateToken: string | undefined;
174
+ /** @internal */
175
+ popupMode: boolean;
176
+ /** @internal */
177
+ popoutController: FoundationLayoutPopoutController;
173
178
  /**
174
179
  * Controls whether popout functionality is enabled on the layout. Defaults to disabled.
175
180
  * Pass an empty object `{}` to use default configurations, or a {@link LayoutPopoutConfig} object to further customise.
176
181
  * @beta
177
182
  */
178
183
  popoutConfig: LayoutPopoutConfig | undefined;
179
- private popupMode;
180
184
  /** @internal */
181
185
  constructor();
182
186
  /** @internal */
@@ -586,6 +590,44 @@ export declare class FoundationLayout extends FoundationElement implements Layou
586
590
  cacheElementsAndRegister(config: RegistrationConfig): string;
587
591
  }
588
592
 
593
+ declare class FoundationLayoutPopoutController extends FASTElement {
594
+ channelName: string;
595
+ private layoutKey;
596
+ private channel;
597
+ private pollInterval;
598
+ private unloadHandler;
599
+ private lastGeometry;
600
+ private popoutRegistry;
601
+ connectedCallback(): void;
602
+ disconnectedCallback(): void;
603
+ private setupChannel;
604
+ private setupListener;
605
+ private setupUnloadListener;
606
+ private teardownUnloadListener;
607
+ private emitAutosave;
608
+ private startPolling;
609
+ private stopPolling;
610
+ private getGeometry;
611
+ private broadcastGeometry;
612
+ /**
613
+ * Opens a component in a popout window.
614
+ * @param registration - The registration ID of the component to pop out.
615
+ * @param geometry - Optional geometry to use for the new window.
616
+ * @param uuid - UUID generator from parent layout
617
+ */
618
+ openPopout(registration: string, geometry?: any, uuid?: any): Promise<Window>;
619
+ getRegistry(): {
620
+ [layoutKey: string]: PopoutState;
621
+ };
622
+ /**
623
+ * Restores popouts from a registry
624
+ */
625
+ restorePopouts(registry: {
626
+ [layoutKey: string]: PopoutState;
627
+ }, uuid: any): Promise<void>;
628
+ closeAllPopouts(): void;
629
+ }
630
+
589
631
  /**
590
632
  * @public
591
633
  * `FoundationLayoutRegion` is a custom element that represents a region in the layout.
@@ -776,6 +818,11 @@ export declare class FoundationLayout extends FoundationElement implements Layou
776
818
 
777
819
  /** @beta */
778
820
  export declare type LayoutPopoutConfig = {
821
+ /**
822
+ * The name of the broadcast channel to use for communication between the main window and popout windows.
823
+ * Defaults to 'f-layout-popout-channel'.
824
+ */
825
+ channelName?: string;
779
826
  loadAutomatically?: boolean;
780
827
  popoutDimension?: {
781
828
  width: number;
@@ -868,6 +915,26 @@ export declare class FoundationLayout extends FoundationElement implements Layou
868
915
  };
869
916
  };
870
917
 
918
+ /**
919
+ * Geometry details for a popout window
920
+ * @public
921
+ */
922
+ declare type PopoutGeometry = {
923
+ screenX: number;
924
+ screenY: number;
925
+ outerWidth: number;
926
+ outerHeight: number;
927
+ screenId?: string;
928
+ };
929
+
930
+ /**
931
+ * @beta
932
+ * State of a popped out window
933
+ */
934
+ declare type PopoutState = {
935
+ geometry: PopoutGeometry;
936
+ };
937
+
871
938
  /**
872
939
  * @public
873
940
  * The parameters that can be set on a new item when being added by the {@link FoundationLayout.addItem} API
@@ -941,6 +1008,13 @@ export declare class FoundationLayout extends FoundationElement implements Layou
941
1008
  export declare type SerialisedLayout = {
942
1009
  v: '1';
943
1010
  c: ResolvedLayoutConfig;
1011
+ /**
1012
+ * Optional registry of popped out components and their window geometry.
1013
+ * @beta
1014
+ */
1015
+ popouts?: {
1016
+ [layoutKey: string]: PopoutState;
1017
+ };
944
1018
  };
945
1019
 
946
1020
  /**
@@ -12,6 +12,7 @@
12
12
 
13
13
  ```typescript
14
14
  export type LayoutPopoutConfig = {
15
+ channelName?: string;
15
16
  loadAutomatically?: boolean;
16
17
  popoutDimension?: {
17
18
  width: number;
@@ -12,6 +12,9 @@ Versioned layout config objects. `v` is the version and `c` contains the layout
12
12
  export type SerialisedLayout = {
13
13
  v: '1';
14
14
  c: ResolvedLayoutConfig;
15
+ popouts?: {
16
+ [layoutKey: string]: PopoutState;
17
+ };
15
18
  };
16
19
  ```
17
20
 
@@ -6,6 +6,7 @@
6
6
 
7
7
  import type { Container } from '@microsoft/fast-foundation';
8
8
  import { ElementStyles } from '@microsoft/fast-element';
9
+ import { FASTElement } from '@microsoft/fast-element';
9
10
  import { FoundationElement } from '@microsoft/fast-foundation';
10
11
  import { FoundationElementRegistry } from '@microsoft/fast-foundation';
11
12
  import { LayoutConfig } from '@genesis-community/golden-layout';
@@ -61,6 +62,12 @@ export class FoundationLayout extends FoundationElement implements LayoutCompone
61
62
  missingItemPlaceholder: (missingItem: string) => string;
62
63
  // @beta
63
64
  popoutConfig: LayoutPopoutConfig | undefined;
65
+ // Warning: (ae-forgotten-export) The symbol "FoundationLayoutPopoutController" needs to be exported by the entry point index.d.ts
66
+ //
67
+ // @internal (undocumented)
68
+ popoutController: FoundationLayoutPopoutController;
69
+ // @internal (undocumented)
70
+ popupMode: boolean;
64
71
  registeredItems(): string[];
65
72
  registerItem(registration: string, elementsOrFactory: Element[] | ComponentFactory): string;
66
73
  reloadBuffer: number;
@@ -169,6 +176,7 @@ export const LayoutEmitEvents: {
169
176
 
170
177
  // @beta (undocumented)
171
178
  export type LayoutPopoutConfig = {
179
+ channelName?: string;
172
180
  loadAutomatically?: boolean;
173
181
  popoutDimension?: {
174
182
  width: number;
@@ -253,11 +261,18 @@ export type RegistrationConfig = {
253
261
  export type SerialisedLayout = {
254
262
  v: '1';
255
263
  c: ResolvedLayoutConfig;
264
+ popouts?: {
265
+ [layoutKey: string]: PopoutState;
266
+ };
256
267
  };
257
268
 
258
269
  // @public
259
270
  export function unregisterFactory(key: string): boolean;
260
271
 
272
+ // Warnings were encountered during analysis:
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
275
+
261
276
  // (No @packageDocumentation comment for this package)
262
277
 
263
278
  ```
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.1",
4
+ "version": "14.393.3-FUI-2471.2",
5
5
  "license": "SEE LICENSE IN license.txt",
6
6
  "main": "dist/esm/index.js",
7
7
  "types": "dist/foundation-layout.d.ts",
@@ -38,20 +38,22 @@
38
38
  }
39
39
  },
40
40
  "devDependencies": {
41
- "@genesislcap/foundation-testing": "14.393.3-FUI-2471.1",
42
- "@genesislcap/genx": "14.393.3-FUI-2471.1",
43
- "@genesislcap/rollup-builder": "14.393.3-FUI-2471.1",
44
- "@genesislcap/ts-builder": "14.393.3-FUI-2471.1",
45
- "@genesislcap/uvu-playwright-builder": "14.393.3-FUI-2471.1",
46
- "@genesislcap/vite-builder": "14.393.3-FUI-2471.1",
47
- "@genesislcap/webpack-builder": "14.393.3-FUI-2471.1"
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"
48
48
  },
49
49
  "dependencies": {
50
50
  "@genesis-community/golden-layout": "^2.11.0",
51
- "@genesislcap/foundation-comms": "14.393.3-FUI-2471.1",
52
- "@genesislcap/foundation-logger": "14.393.3-FUI-2471.1",
53
- "@genesislcap/foundation-ui": "14.393.3-FUI-2471.1",
54
- "@genesislcap/foundation-utils": "14.393.3-FUI-2471.1",
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",
55
57
  "@microsoft/fast-components": "2.30.6",
56
58
  "@microsoft/fast-element": "1.14.0",
57
59
  "@microsoft/fast-foundation": "2.50.0"
@@ -65,5 +67,5 @@
65
67
  "access": "public"
66
68
  },
67
69
  "customElements": "dist/custom-elements.json",
68
- "gitHead": "1234c6eb62ef380e2552f20adf320494eae1c996"
70
+ "gitHead": "8d5276ff6ff9d909b67f0095a7cc2df458d1e8eb"
69
71
  }