@copart/ops-tool-kit 1.13.0-beta.11 → 1.13.0-beta.12

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.
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var ReactDOM = require('react-dom');
7
7
  var frontEndUtils = require('@copart/front-end-utils');
8
8
  var coreComponents = require('@copart/core-components');
9
+ var reactRouterDom = require('react-router-dom');
9
10
 
10
11
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
12
 
@@ -47,12 +48,13 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
47
48
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
48
49
 
49
50
  const name$1 = "@copart/ops-tool-kit";
50
- const version$3 = "1.13.0-beta.11";
51
+ const version$3 = "1.13.0-beta.12";
51
52
  const main$1 = "dist/ops-tool-kit.js";
52
53
  const style = "dist/ops-tool-kit.css";
53
54
  const files = [
54
55
  "dist",
55
- "bin"
56
+ "bin",
57
+ "iframe-webpack-facade.js"
56
58
  ];
57
59
  const bin = {
58
60
  "generate-build-meta": "./bin/cli.js"
@@ -106,7 +108,8 @@ const devDependencies$1 = {
106
108
  };
107
109
  const peerDependencies = {
108
110
  "@copart/core-components": "2.3.0-alpha.filters.6",
109
- react: "*"
111
+ react: "*",
112
+ "react-router-dom": "^5.0.0"
110
113
  };
111
114
  const dependencies$1 = {
112
115
  "@reacting/purist": "0.1.0",
@@ -69561,6 +69564,419 @@ var iframeFacade = {
69561
69564
  }
69562
69565
  };
69563
69566
 
69567
+ function normalizeIframePath(uri) {
69568
+ if (uri === '' || uri == null) return '/';
69569
+ return uri.startsWith('/') ? uri : "/".concat(uri);
69570
+ }
69571
+
69572
+ function serializeNavItems(items) {
69573
+ if (!Array.isArray(items)) return [];
69574
+ return items.map(function (item) {
69575
+ var serialized = {
69576
+ name: item.name,
69577
+ route: item.route
69578
+ };
69579
+ if (item.icon && typeof item.icon === 'string') serialized.icon = item.icon;
69580
+ if (typeof item.disabled === 'function') {
69581
+ try {
69582
+ serialized.disabled = item.disabled();
69583
+ } catch (_) {
69584
+ serialized.disabled = false;
69585
+ }
69586
+ } else if (typeof item.disabled === 'boolean') {
69587
+ serialized.disabled = item.disabled;
69588
+ }
69589
+ if (typeof item.hidden === 'function') {
69590
+ try {
69591
+ serialized.hidden = item.hidden();
69592
+ } catch (_) {
69593
+ serialized.hidden = false;
69594
+ }
69595
+ } else if (typeof item.hidden === 'boolean') {
69596
+ serialized.hidden = item.hidden;
69597
+ }
69598
+ if (item.isLandingPage) serialized.isLandingPage = true;
69599
+ if (item.subMenuItems && item.subMenuItems.length > 0) {
69600
+ serialized.subMenuItems = serializeNavItems(item.subMenuItems);
69601
+ }
69602
+ return serialized;
69603
+ });
69604
+ }
69605
+
69606
+ function IframeRouteSync(_ref) {
69607
+ var _ref$updateUriIsPath = _ref.updateUriIsPath,
69608
+ updateUriIsPath = _ref$updateUriIsPath === void 0 ? false : _ref$updateUriIsPath,
69609
+ _ref$suppressEcho = _ref.suppressEcho,
69610
+ suppressEcho = _ref$suppressEcho === void 0 ? true : _ref$suppressEcho;
69611
+ var history = reactRouterDom.useHistory();
69612
+ var location = reactRouterDom.useLocation();
69613
+ var initialRef = React.useRef(true);
69614
+ var suppressUpdateUriRef = React.useRef(false);
69615
+ React.useEffect(function () {
69616
+ var remove = addMessageListener(function (data) {
69617
+ if (data.eventType === 'LOAD_URI' && data.eventProps) {
69618
+ var path = normalizeIframePath(data.eventProps.uri);
69619
+ if (suppressEcho) suppressUpdateUriRef.current = true;
69620
+ history.push(path);
69621
+ }
69622
+ });
69623
+ return remove;
69624
+ }, [history, suppressEcho]);
69625
+ React.useEffect(function () {
69626
+ if (initialRef.current) {
69627
+ initialRef.current = false;
69628
+ return;
69629
+ }
69630
+ if (suppressEcho && suppressUpdateUriRef.current) {
69631
+ suppressUpdateUriRef.current = false;
69632
+ return;
69633
+ }
69634
+ var pathname = location.pathname || '/';
69635
+ postUpdateUri(pathname, updateUriIsPath);
69636
+ }, [location.pathname, updateUriIsPath, suppressEcho]);
69637
+ return null;
69638
+ }
69639
+
69640
+ function defaultToolkitEnv() {
69641
+ return {
69642
+ STACK: process.env.STACK,
69643
+ APP_NAME: process.env.APP_NAME,
69644
+ CORE_CONFIG_URI: process.env.CORE_CONFIG_URI,
69645
+ CONFIG_URI: process.env.CONFIG_URI
69646
+ };
69647
+ }
69648
+ function AppEnvSender(_ref) {
69649
+ var toolkitEnv = _ref.toolkitEnv,
69650
+ _ref$mihelpAgentProps = _ref.mihelpAgentProps,
69651
+ mihelpAgentProps = _ref$mihelpAgentProps === void 0 ? null : _ref$mihelpAgentProps;
69652
+ var sentRef = React.useRef(false);
69653
+ React.useEffect(function () {
69654
+ if (sentRef.current) return;
69655
+ sentRef.current = true;
69656
+ postAppEnv(toolkitEnv || defaultToolkitEnv(), mihelpAgentProps);
69657
+ }, [toolkitEnv, mihelpAgentProps]);
69658
+ return null;
69659
+ }
69660
+
69661
+ function NavConfigSender(_ref) {
69662
+ var navItemsLoader = _ref.navItemsLoader,
69663
+ onError = _ref.onError;
69664
+ var sentRef = React.useRef(false);
69665
+ React.useEffect(function () {
69666
+ if (sentRef.current || !navItemsLoader) return;
69667
+ sentRef.current = true;
69668
+ navItemsLoader().then(function (mod) {
69669
+ var items = mod && (mod.default != null ? mod.default : mod);
69670
+ postNavConfig(serializeNavItems(items));
69671
+ }).catch(function (err) {
69672
+ if (onError) {
69673
+ onError(err);
69674
+ } else {
69675
+ console.warn('[Iframe] Failed to load navItems:', err);
69676
+ }
69677
+ });
69678
+ }, [navItemsLoader, onError]);
69679
+ return null;
69680
+ }
69681
+
69682
+ var defaultContentStyle = {
69683
+ height: '100%',
69684
+ display: 'flex',
69685
+ flexDirection: 'column',
69686
+ overflow: 'hidden'
69687
+ };
69688
+ function IframeAppRootInner(_ref) {
69689
+ var children = _ref.children,
69690
+ contentStyle = _ref.contentStyle,
69691
+ toolkitEnv = _ref.toolkitEnv,
69692
+ mihelpAgentProps = _ref.mihelpAgentProps,
69693
+ navItemsLoader = _ref.navItemsLoader,
69694
+ navConfigOnError = _ref.navConfigOnError,
69695
+ updateUriIsPath = _ref.updateUriIsPath,
69696
+ suppressRouteSyncEcho = _ref.suppressRouteSyncEcho;
69697
+ var history = reactRouterDom.useHistory();
69698
+ return /*#__PURE__*/React__default["default"].createElement(CrumbProvider, {
69699
+ navigate: function navigate(path) {
69700
+ return history.push(path);
69701
+ }
69702
+ }, /*#__PURE__*/React__default["default"].createElement(AppEnvSender, {
69703
+ toolkitEnv: toolkitEnv,
69704
+ mihelpAgentProps: mihelpAgentProps
69705
+ }), /*#__PURE__*/React__default["default"].createElement(IframeRouteSync, {
69706
+ updateUriIsPath: updateUriIsPath,
69707
+ suppressEcho: suppressRouteSyncEcho
69708
+ }), navItemsLoader ? /*#__PURE__*/React__default["default"].createElement(NavConfigSender, {
69709
+ navItemsLoader: navItemsLoader,
69710
+ onError: navConfigOnError
69711
+ }) : null, /*#__PURE__*/React__default["default"].createElement("div", {
69712
+ style: contentStyle || defaultContentStyle
69713
+ }, children));
69714
+ }
69715
+ function IframeAppRoot(_ref2) {
69716
+ var _ref2$initialUri = _ref2.initialUri,
69717
+ initialUri = _ref2$initialUri === void 0 ? '/' : _ref2$initialUri,
69718
+ children = _ref2.children,
69719
+ contentStyle = _ref2.contentStyle,
69720
+ toolkitEnv = _ref2.toolkitEnv,
69721
+ _ref2$mihelpAgentProp = _ref2.mihelpAgentProps,
69722
+ mihelpAgentProps = _ref2$mihelpAgentProp === void 0 ? null : _ref2$mihelpAgentProp,
69723
+ navItemsLoader = _ref2.navItemsLoader,
69724
+ navConfigOnError = _ref2.navConfigOnError,
69725
+ _ref2$updateUriIsPath = _ref2.updateUriIsPath,
69726
+ updateUriIsPath = _ref2$updateUriIsPath === void 0 ? false : _ref2$updateUriIsPath,
69727
+ _ref2$suppressRouteSy = _ref2.suppressRouteSyncEcho,
69728
+ suppressRouteSyncEcho = _ref2$suppressRouteSy === void 0 ? true : _ref2$suppressRouteSy;
69729
+ var initialPath = normalizeIframePath(initialUri);
69730
+ return /*#__PURE__*/React__default["default"].createElement(reactRouterDom.MemoryRouter, {
69731
+ initialEntries: [initialPath],
69732
+ initialIndex: 0
69733
+ }, /*#__PURE__*/React__default["default"].createElement(IframeAppRootInner, {
69734
+ contentStyle: contentStyle,
69735
+ toolkitEnv: toolkitEnv,
69736
+ mihelpAgentProps: mihelpAgentProps,
69737
+ navItemsLoader: navItemsLoader,
69738
+ navConfigOnError: navConfigOnError,
69739
+ updateUriIsPath: updateUriIsPath,
69740
+ suppressRouteSyncEcho: suppressRouteSyncEcho
69741
+ }, children));
69742
+ }
69743
+
69744
+ /**
69745
+ * Register a synchronous LOAD_URI listener before async bootstrap loads.
69746
+ * Call this from the app entry (index.js) before dynamic-importing bootstrap.
69747
+ */
69748
+ function registerEarlyLoadUriListener() {
69749
+ if (typeof window === 'undefined') return;
69750
+ if (window.__IFRAME_EARLY_LOAD_URI_LISTENER_REGISTERED) return;
69751
+ window.__IFRAME_EARLY_LOAD_URI_LISTENER_REGISTERED = true;
69752
+ window.__IFRAME_EARLY_LOAD_URI = null;
69753
+ window.addEventListener('message', function (event) {
69754
+ if (event.data && event.data.eventType === 'LOAD_URI' && event.data.eventProps) {
69755
+ window.__IFRAME_EARLY_LOAD_URI = event.data.eventProps.uri || '/';
69756
+ }
69757
+ });
69758
+ }
69759
+
69760
+ function resolveRootNode(rootSelector) {
69761
+ var selectors = rootSelector ? [rootSelector] : ['#root', '#app'];
69762
+ for (var i = 0; i < selectors.length; i += 1) {
69763
+ var node = document.querySelector(selectors[i]);
69764
+ if (node) return node;
69765
+ }
69766
+ return null;
69767
+ }
69768
+ function isInIframe() {
69769
+ return typeof window !== 'undefined' && window.self !== window.top;
69770
+ }
69771
+ function renderStandaloneError(rootNode, message) {
69772
+ rootNode.innerHTML = "<h1>".concat(message, "</h1>");
69773
+ }
69774
+ function normalizePermissionKeys(permissionKeys) {
69775
+ if (!permissionKeys) return [];
69776
+ return Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys];
69777
+ }
69778
+ function isValidAppConfig(config, validateAppConfig) {
69779
+ if (validateAppConfig) return validateAppConfig(config);
69780
+ return !!config;
69781
+ }
69782
+ function hydrateAppConfig(_x) {
69783
+ return _hydrateAppConfig.apply(this, arguments);
69784
+ }
69785
+ function _hydrateAppConfig() {
69786
+ _hydrateAppConfig = _asyncToGenerator$1(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
69787
+ var appName, sendStorageGet, setExtraLocal, fetcher, configFallbackUri, validateAppConfig, appConfig;
69788
+ return _regenerator().w(function (_context) {
69789
+ while (1) switch (_context.n) {
69790
+ case 0:
69791
+ appName = _ref.appName, sendStorageGet = _ref.sendStorageGet, setExtraLocal = _ref.setExtraLocal, fetcher = _ref.fetcher, configFallbackUri = _ref.configFallbackUri, validateAppConfig = _ref.validateAppConfig;
69792
+ _context.n = 1;
69793
+ return sendStorageGet({
69794
+ op: 'getLocalItem',
69795
+ key: "".concat(appName, ":config")
69796
+ });
69797
+ case 1:
69798
+ appConfig = _context.v;
69799
+ if (!(!isValidAppConfig(appConfig, validateAppConfig) && configFallbackUri && fetcher)) {
69800
+ _context.n = 3;
69801
+ break;
69802
+ }
69803
+ _context.n = 2;
69804
+ return fetcher.getConfig(configFallbackUri);
69805
+ case 2:
69806
+ appConfig = _context.v;
69807
+ case 3:
69808
+ if (isValidAppConfig(appConfig, validateAppConfig)) {
69809
+ setExtraLocal("".concat(appName, ":config"), appConfig);
69810
+ }
69811
+ case 4:
69812
+ return _context.a(2);
69813
+ }
69814
+ }, _callee);
69815
+ }));
69816
+ return _hydrateAppConfig.apply(this, arguments);
69817
+ }
69818
+ function hydratePermissions(_x2) {
69819
+ return _hydratePermissions.apply(this, arguments);
69820
+ }
69821
+ /**
69822
+ * Bootstrap an iframe-embedded portal app: init bridge data from shell, then render.
69823
+ *
69824
+ * @param {object} options
69825
+ * @param {string} [options.appName] - Defaults to process.env.APP_NAME
69826
+ * @param {string|string[]} [options.permissionKeys] - Shell localStorage permission key(s)
69827
+ * @param {string} [options.rootSelector] - Root element selector (default: #root then #app)
69828
+ * @param {(initData: *) => void} [options.onInitCache] - Called after setInitCache (e.g. initStoreData)
69829
+ * @param {(initialUri: string, rootNode: HTMLElement) => void} options.render - App render callback
69830
+ * @param {'render'|'error'|'skip'} [options.standaloneMode='render'] - Behavior when not in iframe
69831
+ * @param {(rootNode: HTMLElement) => void} [options.standaloneRender] - Custom standalone UI
69832
+ * @param {string} [options.standaloneErrorMessage] - Message when standaloneMode is 'error'
69833
+ * @param {boolean} [options.fetchConfigFromShell=true] - Fetch app config/permissions from shell
69834
+ * @param {string} [options.configFallbackUri] - Defaults to process.env.CONFIG_URI
69835
+ * @param {(config: *) => boolean} [options.validateAppConfig] - Config validity check before setExtraLocal
69836
+ * @param {boolean} [options.permissionsOnlyIfArray=true] - Only set permissions when shell returns an array
69837
+ */
69838
+ function _hydratePermissions() {
69839
+ _hydratePermissions = _asyncToGenerator$1(/*#__PURE__*/_regenerator().m(function _callee3(_ref2) {
69840
+ var permissionKeys, sendStorageGet, setExtraLocal, permissionsOnlyIfArray, keys;
69841
+ return _regenerator().w(function (_context3) {
69842
+ while (1) switch (_context3.n) {
69843
+ case 0:
69844
+ permissionKeys = _ref2.permissionKeys, sendStorageGet = _ref2.sendStorageGet, setExtraLocal = _ref2.setExtraLocal, permissionsOnlyIfArray = _ref2.permissionsOnlyIfArray;
69845
+ keys = normalizePermissionKeys(permissionKeys);
69846
+ _context3.n = 1;
69847
+ return Promise.all(keys.map(/*#__PURE__*/function () {
69848
+ var _ref3 = _asyncToGenerator$1(/*#__PURE__*/_regenerator().m(function _callee2(key) {
69849
+ var perms;
69850
+ return _regenerator().w(function (_context2) {
69851
+ while (1) switch (_context2.n) {
69852
+ case 0:
69853
+ _context2.n = 1;
69854
+ return sendStorageGet({
69855
+ op: 'getLocalItem',
69856
+ key: key
69857
+ });
69858
+ case 1:
69859
+ perms = _context2.v;
69860
+ if (!(permissionsOnlyIfArray && !Array.isArray(perms))) {
69861
+ _context2.n = 2;
69862
+ break;
69863
+ }
69864
+ return _context2.a(2);
69865
+ case 2:
69866
+ if (perms != null) setExtraLocal(key, perms);
69867
+ case 3:
69868
+ return _context2.a(2);
69869
+ }
69870
+ }, _callee2);
69871
+ }));
69872
+ return function (_x4) {
69873
+ return _ref3.apply(this, arguments);
69874
+ };
69875
+ }()));
69876
+ case 1:
69877
+ return _context3.a(2);
69878
+ }
69879
+ }, _callee3);
69880
+ }));
69881
+ return _hydratePermissions.apply(this, arguments);
69882
+ }
69883
+ function bootstrapIframeApp(_x3) {
69884
+ return _bootstrapIframeApp.apply(this, arguments);
69885
+ }
69886
+ function _bootstrapIframeApp() {
69887
+ _bootstrapIframeApp = _asyncToGenerator$1(/*#__PURE__*/_regenerator().m(function _callee4(options) {
69888
+ var _ref4, _ref4$appName, appName, permissionKeys, rootSelector, onInitCache, render, _ref4$standaloneMode, standaloneMode, standaloneRender, _ref4$standaloneError, standaloneErrorMessage, _ref4$fetchConfigFrom, fetchConfigFromShell, _ref4$configFallbackU, configFallbackUri, validateAppConfig, _ref4$permissionsOnly, permissionsOnlyIfArray, rootNode, bridge, fetcher, getInitialUri, getInitData, setInitCache, setExtraLocal, sendStorageGet, setAppName, _yield$Promise$all, _yield$Promise$all2, initialUri, initData, tasks, _t;
69889
+ return _regenerator().w(function (_context4) {
69890
+ while (1) switch (_context4.p = _context4.n) {
69891
+ case 0:
69892
+ _ref4 = options || {}, _ref4$appName = _ref4.appName, appName = _ref4$appName === void 0 ? process.env.APP_NAME : _ref4$appName, permissionKeys = _ref4.permissionKeys, rootSelector = _ref4.rootSelector, onInitCache = _ref4.onInitCache, render = _ref4.render, _ref4$standaloneMode = _ref4.standaloneMode, standaloneMode = _ref4$standaloneMode === void 0 ? 'render' : _ref4$standaloneMode, standaloneRender = _ref4.standaloneRender, _ref4$standaloneError = _ref4.standaloneErrorMessage, standaloneErrorMessage = _ref4$standaloneError === void 0 ? 'This application must be opened from the parent portal.' : _ref4$standaloneError, _ref4$fetchConfigFrom = _ref4.fetchConfigFromShell, fetchConfigFromShell = _ref4$fetchConfigFrom === void 0 ? true : _ref4$fetchConfigFrom, _ref4$configFallbackU = _ref4.configFallbackUri, configFallbackUri = _ref4$configFallbackU === void 0 ? process.env.CONFIG_URI : _ref4$configFallbackU, validateAppConfig = _ref4.validateAppConfig, _ref4$permissionsOnly = _ref4.permissionsOnlyIfArray, permissionsOnlyIfArray = _ref4$permissionsOnly === void 0 ? true : _ref4$permissionsOnly;
69893
+ if (!(typeof render !== 'function')) {
69894
+ _context4.n = 1;
69895
+ break;
69896
+ }
69897
+ throw new Error('bootstrapIframeApp requires a render(initialUri, rootNode) function');
69898
+ case 1:
69899
+ rootNode = resolveRootNode(rootSelector);
69900
+ if (rootNode) {
69901
+ _context4.n = 2;
69902
+ break;
69903
+ }
69904
+ console.error('[Iframe] No root element found');
69905
+ return _context4.a(2);
69906
+ case 2:
69907
+ if (isInIframe()) {
69908
+ _context4.n = 4;
69909
+ break;
69910
+ }
69911
+ if (!(standaloneMode === 'error')) {
69912
+ _context4.n = 3;
69913
+ break;
69914
+ }
69915
+ if (standaloneRender) standaloneRender(rootNode);else renderStandaloneError(rootNode, standaloneErrorMessage);
69916
+ return _context4.a(2);
69917
+ case 3:
69918
+ if (!(standaloneMode === 'skip')) {
69919
+ _context4.n = 4;
69920
+ break;
69921
+ }
69922
+ return _context4.a(2);
69923
+ case 4:
69924
+ bridge = iframeFacade.bridge, fetcher = iframeFacade.fetcher;
69925
+ getInitialUri = bridge.getInitialUri, getInitData = bridge.getInitData, setInitCache = bridge.setInitCache, setExtraLocal = bridge.setExtraLocal, sendStorageGet = bridge.sendStorageGet, setAppName = bridge.setAppName;
69926
+ _context4.n = 5;
69927
+ return Promise.all([getInitialUri(), getInitData()]);
69928
+ case 5:
69929
+ _yield$Promise$all = _context4.v;
69930
+ _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
69931
+ initialUri = _yield$Promise$all2[0];
69932
+ initData = _yield$Promise$all2[1];
69933
+ if (appName && typeof setAppName === 'function') setAppName(appName);
69934
+ if (!initData) {
69935
+ _context4.n = 9;
69936
+ break;
69937
+ }
69938
+ setInitCache(initData);
69939
+ if (onInitCache) onInitCache(initData);
69940
+ if (!(fetchConfigFromShell && appName)) {
69941
+ _context4.n = 9;
69942
+ break;
69943
+ }
69944
+ _context4.p = 6;
69945
+ tasks = [hydrateAppConfig({
69946
+ appName: appName,
69947
+ sendStorageGet: sendStorageGet,
69948
+ setExtraLocal: setExtraLocal,
69949
+ fetcher: fetcher,
69950
+ configFallbackUri: configFallbackUri,
69951
+ validateAppConfig: validateAppConfig
69952
+ })];
69953
+ if (permissionKeys) {
69954
+ tasks.push(hydratePermissions({
69955
+ permissionKeys: permissionKeys,
69956
+ sendStorageGet: sendStorageGet,
69957
+ setExtraLocal: setExtraLocal,
69958
+ permissionsOnlyIfArray: permissionsOnlyIfArray
69959
+ }));
69960
+ }
69961
+ _context4.n = 7;
69962
+ return Promise.all(tasks);
69963
+ case 7:
69964
+ _context4.n = 9;
69965
+ break;
69966
+ case 8:
69967
+ _context4.p = 8;
69968
+ _t = _context4.v;
69969
+ console.warn('[Iframe] failed to fetch app config/permissions from shell:', _t);
69970
+ case 9:
69971
+ render(initialUri, rootNode);
69972
+ case 10:
69973
+ return _context4.a(2);
69974
+ }
69975
+ }, _callee4, null, [[6, 8]]);
69976
+ }));
69977
+ return _bootstrapIframeApp.apply(this, arguments);
69978
+ }
69979
+
69564
69980
  setup({
69565
69981
  pkg: pkg
69566
69982
  });
@@ -81139,13 +81555,21 @@ var index_es = /*#__PURE__*/Object.freeze({
81139
81555
  vectorsRatio: vectorsRatio
81140
81556
  });
81141
81557
 
81558
+ exports.AppEnvSender = AppEnvSender;
81142
81559
  exports.AppFrame = AppFrame;
81143
81560
  exports.AutoRefresh = AutoRefresh;
81144
81561
  exports.CallLogger = CallLogger;
81145
81562
  exports.ContextualHelp = ContextualHelp;
81146
81563
  exports.Crumb = Crumb$1;
81564
+ exports.IframeAppRoot = IframeAppRoot;
81565
+ exports.IframeRouteSync = IframeRouteSync;
81566
+ exports.NavConfigSender = NavConfigSender;
81147
81567
  exports.accessHelpers = accessHelpers$1;
81568
+ exports.bootstrapIframeApp = bootstrapIframeApp;
81148
81569
  exports.fetcher = fetcher$1;
81149
81570
  exports.iframeFacade = iframeFacade;
81571
+ exports.normalizeIframePath = normalizeIframePath;
81572
+ exports.registerEarlyLoadUriListener = registerEarlyLoadUriListener;
81573
+ exports.serializeNavItems = serializeNavItems;
81150
81574
  exports.storage = storage$2;
81151
81575
  //# sourceMappingURL=ops-tool-kit.js.map