openxiangda 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1058,7 +1058,7 @@ var createPageSdk = (context) => {
1058
1058
 
1059
1059
  // packages/sdk/src/runtime/react/createReactPage.tsx
1060
1060
  import { StyleProvider } from "@ant-design/cssinjs";
1061
- import { App as AntdApp, ConfigProvider } from "antd";
1061
+ import { App as AntdApp, ConfigProvider, message } from "antd";
1062
1062
  import zhCN from "antd/locale/zh_CN.js";
1063
1063
  import { createRoot } from "react-dom/client";
1064
1064
 
@@ -1125,33 +1125,38 @@ var antdTheme = {
1125
1125
  // packages/sdk/src/runtime/react/createReactPage.tsx
1126
1126
  import { jsx as jsx2 } from "react/jsx-runtime";
1127
1127
  var NAMESPACE_ROOT_CLASS = "sy-app-workspace";
1128
+ var RUNTIME_PORTAL_ATTR = "data-sy-runtime-portal";
1128
1129
  var PORTAL_CONTAINER_STACK_GLOBAL = "__OPENXIANGDA_PORTAL_CONTAINER_STACK__";
1129
1130
  var PORTAL_CONTAINER_RESOLVER_GLOBAL = "__OPENXIANGDA_GET_PORTAL_CONTAINER__";
1130
1131
  var createRuntimeRoot = (el) => {
1131
1132
  return createRoot(el);
1132
1133
  };
1134
+ var isShadowRoot = (rootNode) => typeof ShadowRoot !== "undefined" && rootNode instanceof ShadowRoot;
1133
1135
  var getStyleContainer = (el) => {
1134
1136
  const rootNode = el.getRootNode?.();
1135
- if (typeof ShadowRoot !== "undefined" && rootNode instanceof ShadowRoot) {
1137
+ if (isShadowRoot(rootNode)) {
1136
1138
  return rootNode;
1137
1139
  }
1138
1140
  return document.head;
1139
1141
  };
1140
- var getRuntimeOverlayContainer = (el) => {
1142
+ var getRuntimeRoot = (el, triggerNode) => {
1141
1143
  const rootNode = el.getRootNode?.();
1142
- const isShadowRoot = typeof ShadowRoot !== "undefined" && rootNode instanceof ShadowRoot;
1143
- const getNamespaceRoot = (triggerNode) => {
1144
- if (isShadowRoot) return el;
1145
- const triggerRoot = triggerNode?.closest?.(
1146
- `.${NAMESPACE_ROOT_CLASS}`
1147
- );
1148
- return triggerRoot || el.closest(`.${NAMESPACE_ROOT_CLASS}`) || el.querySelector(`.${NAMESPACE_ROOT_CLASS}`) || el;
1144
+ if (isShadowRoot(rootNode)) return el;
1145
+ const triggerRoot = triggerNode?.closest?.(
1146
+ `.${NAMESPACE_ROOT_CLASS}`
1147
+ );
1148
+ return triggerRoot || el.closest(`.${NAMESPACE_ROOT_CLASS}`) || el.querySelector(`.${NAMESPACE_ROOT_CLASS}`) || el;
1149
+ };
1150
+ var getRuntimeOverlayContainer = (el, portalContainer) => {
1151
+ const getOverlayRoot = (triggerNode) => {
1152
+ if (portalContainer?.isConnected) return portalContainer;
1153
+ return getRuntimeRoot(el, triggerNode);
1149
1154
  };
1150
1155
  return {
1151
1156
  getPopupContainer: (triggerNode) => {
1152
- return getNamespaceRoot(triggerNode);
1157
+ return getOverlayRoot(triggerNode);
1153
1158
  },
1154
- getTargetContainer: () => getNamespaceRoot()
1159
+ getTargetContainer: () => getRuntimeRoot(el)
1155
1160
  };
1156
1161
  };
1157
1162
  var createAntdConfig = (overlayContainer) => ({
@@ -1162,56 +1167,89 @@ var createAntdConfig = (overlayContainer) => ({
1162
1167
  getPopupContainer: overlayContainer.getPopupContainer,
1163
1168
  getTargetContainer: overlayContainer.getTargetContainer
1164
1169
  });
1170
+ var createPortalContainer = (el) => {
1171
+ const rootNode = el.getRootNode?.();
1172
+ const parent = isShadowRoot(rootNode) ? rootNode : el.ownerDocument?.body || document.body;
1173
+ const portalContainer = el.ownerDocument.createElement("div");
1174
+ portalContainer.setAttribute(RUNTIME_PORTAL_ATTR, "");
1175
+ portalContainer.classList.add(NAMESPACE_ROOT_CLASS);
1176
+ parent.appendChild(portalContainer);
1177
+ return portalContainer;
1178
+ };
1165
1179
  var installRuntimePortalContainer = (el) => {
1166
1180
  const globalScope = globalThis;
1181
+ const portalContainer = createPortalContainer(el);
1167
1182
  const stack = Array.isArray(globalScope[PORTAL_CONTAINER_STACK_GLOBAL]) ? globalScope[PORTAL_CONTAINER_STACK_GLOBAL] : [];
1168
- stack.push(el);
1183
+ stack.push(portalContainer);
1169
1184
  globalScope[PORTAL_CONTAINER_STACK_GLOBAL] = stack;
1170
1185
  globalScope[PORTAL_CONTAINER_RESOLVER_GLOBAL] = () => {
1171
1186
  for (let index = stack.length - 1; index >= 0; index -= 1) {
1172
1187
  const candidate = stack[index];
1173
1188
  if (candidate?.isConnected) {
1174
- return candidate.closest(`.${NAMESPACE_ROOT_CLASS}`) || candidate.querySelector(`.${NAMESPACE_ROOT_CLASS}`) || candidate;
1189
+ return candidate;
1175
1190
  }
1176
1191
  }
1177
- return document.querySelector(`.${NAMESPACE_ROOT_CLASS}`) || document.body;
1192
+ return document.querySelector(`[${RUNTIME_PORTAL_ATTR}]`) || document.querySelector(`.${NAMESPACE_ROOT_CLASS}`) || document.body;
1178
1193
  };
1179
- return () => {
1180
- const position = stack.lastIndexOf(el);
1181
- if (position >= 0) {
1182
- stack.splice(position, 1);
1194
+ return {
1195
+ container: portalContainer,
1196
+ release: () => {
1197
+ const position = stack.lastIndexOf(portalContainer);
1198
+ if (position >= 0) {
1199
+ stack.splice(position, 1);
1200
+ }
1201
+ portalContainer.remove();
1183
1202
  }
1184
1203
  };
1185
1204
  };
1186
- var installAntdStaticHolder = (el) => {
1205
+ var installAntdStaticHolder = (el, portalContainer) => {
1206
+ const getMessageContainer = () => {
1207
+ if (portalContainer?.isConnected) return portalContainer;
1208
+ return getRuntimeRoot(el);
1209
+ };
1187
1210
  ConfigProvider.config({
1188
1211
  prefixCls: "sy-ant",
1189
1212
  iconPrefixCls: "sy-anticon",
1190
1213
  theme: antdTheme,
1191
1214
  holderRender: (children) => {
1192
1215
  if (!el.isConnected) {
1193
- return /* @__PURE__ */ jsx2(ConfigProvider, { prefixCls: "sy-ant", iconPrefixCls: "sy-anticon", theme: antdTheme, children });
1216
+ return /* @__PURE__ */ jsx2(
1217
+ ConfigProvider,
1218
+ {
1219
+ prefixCls: "sy-ant",
1220
+ iconPrefixCls: "sy-anticon",
1221
+ theme: antdTheme,
1222
+ children
1223
+ }
1224
+ );
1194
1225
  }
1195
- const overlayContainer = getRuntimeOverlayContainer(el);
1226
+ const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);
1196
1227
  return /* @__PURE__ */ jsx2(StyleProvider, { hashPriority: "high", container: getStyleContainer(el), children: /* @__PURE__ */ jsx2(ConfigProvider, { ...createAntdConfig(overlayContainer), children }) });
1197
1228
  }
1198
1229
  });
1230
+ message.config({
1231
+ prefixCls: "sy-ant-message",
1232
+ getContainer: getMessageContainer
1233
+ });
1199
1234
  };
1200
1235
  var createReactPage = (AppComponent) => {
1201
1236
  let root = null;
1202
1237
  let currentContainer = null;
1203
1238
  let releasePortalContainer = null;
1239
+ let portalContainer = null;
1204
1240
  const render = (el, context) => {
1205
1241
  el.classList.add(NAMESPACE_ROOT_CLASS);
1206
- if (!root || currentContainer !== el) {
1242
+ if (!root || currentContainer !== el || !portalContainer?.isConnected) {
1207
1243
  root?.unmount();
1208
1244
  releasePortalContainer?.();
1209
1245
  root = createRuntimeRoot(el);
1210
1246
  currentContainer = el;
1211
- releasePortalContainer = installRuntimePortalContainer(el);
1247
+ const portalHandle = installRuntimePortalContainer(el);
1248
+ portalContainer = portalHandle.container;
1249
+ releasePortalContainer = portalHandle.release;
1212
1250
  }
1213
- const overlayContainer = getRuntimeOverlayContainer(el);
1214
- installAntdStaticHolder(el);
1251
+ const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);
1252
+ installAntdStaticHolder(el, portalContainer);
1215
1253
  const antdConfig = createAntdConfig(overlayContainer);
1216
1254
  root.render(
1217
1255
  /* @__PURE__ */ jsx2(StyleProvider, { hashPriority: "high", container: getStyleContainer(el), children: /* @__PURE__ */ jsx2(ConfigProvider, { ...antdConfig, children: /* @__PURE__ */ jsx2(AntdApp, { children: /* @__PURE__ */ jsx2(PageProvider, { context, children: /* @__PURE__ */ jsx2(AppComponent, {}) }) }) }) })
@@ -1230,6 +1268,7 @@ var createReactPage = (AppComponent) => {
1230
1268
  root = null;
1231
1269
  currentContainer = null;
1232
1270
  releasePortalContainer = null;
1271
+ portalContainer = null;
1233
1272
  }
1234
1273
  };
1235
1274
  };