@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.
- package/dist/custom-elements.json +273 -10
- package/dist/dts/main/layout-main.d.ts +5 -1
- package/dist/dts/main/layout-main.d.ts.map +1 -1
- package/dist/dts/main/layout-popout-controller.d.ts +40 -0
- package/dist/dts/main/layout-popout-controller.d.ts.map +1 -0
- package/dist/dts/utils/constants.d.ts +6 -0
- package/dist/dts/utils/constants.d.ts.map +1 -1
- package/dist/dts/utils/index.d.ts +1 -0
- package/dist/dts/utils/index.d.ts.map +1 -1
- package/dist/dts/utils/popout-events.d.ts +37 -0
- package/dist/dts/utils/popout-events.d.ts.map +1 -0
- package/dist/dts/utils/types.d.ts +20 -0
- package/dist/dts/utils/types.d.ts.map +1 -1
- package/dist/esm/main/layout-main.js +34 -7
- package/dist/esm/main/layout-popout-controller.js +243 -0
- package/dist/esm/utils/constants.js +6 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/popout-events.js +5 -0
- package/dist/foundation-layout.api.json +12 -3
- package/dist/foundation-layout.d.ts +75 -1
- package/docs/api/foundation-layout.layoutpopoutconfig.md +1 -0
- package/docs/api/foundation-layout.serialisedlayout.md +3 -0
- package/docs/api-report.md.api.md +15 -0
- package/package.json +15 -13
|
@@ -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":"AAAA,OAAO,EAKL,YAAY,EAEZ,cAAc,EAGf,MAAM,kCAAkC,CAAC;AAK1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAGL,gBAAgB,EAChB,aAAa,EACb,YAAY,EAOZ,eAAe,EAGf,kBAAkB,EAGlB,SAAS,EAET,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,WAAW,CAAC;
|
|
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"}
|
|
@@ -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;
|
|
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;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;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;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE;QACR,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC;KAClC,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,cAAc,CAAC;CAC1B,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;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC"}
|
|
@@ -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 {
|
|
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
|
-
|
|
988
|
-
const
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
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
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -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":
|
|
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
|
/**
|
|
@@ -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.
|
|
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.
|
|
42
|
-
"@genesislcap/genx": "14.393.3-FUI-2471.
|
|
43
|
-
"@genesislcap/rollup-builder": "14.393.3-FUI-2471.
|
|
44
|
-
"@genesislcap/ts-builder": "14.393.3-FUI-2471.
|
|
45
|
-
"@genesislcap/uvu-playwright-builder": "14.393.3-FUI-2471.
|
|
46
|
-
"@genesislcap/vite-builder": "14.393.3-FUI-2471.
|
|
47
|
-
"@genesislcap/webpack-builder": "14.393.3-FUI-2471.
|
|
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-
|
|
52
|
-
"@genesislcap/foundation-
|
|
53
|
-
"@genesislcap/foundation-
|
|
54
|
-
"@genesislcap/foundation-
|
|
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": "
|
|
70
|
+
"gitHead": "8d5276ff6ff9d909b67f0095a7cc2df458d1e8eb"
|
|
69
71
|
}
|