@copart/ops-tool-kit 1.13.0-beta.13 → 1.13.0-beta.15

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,7 +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
+ var ReactRouterDOM = require('react-router-dom');
10
10
 
11
11
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
12
 
@@ -46,9 +46,10 @@ function _mergeNamespaces(n, m) {
46
46
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
47
47
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
48
48
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
49
+ var ReactRouterDOM__namespace = /*#__PURE__*/_interopNamespace(ReactRouterDOM);
49
50
 
50
51
  const name$1 = "@copart/ops-tool-kit";
51
- const version$3 = "1.13.0-beta.13";
52
+ const version$3 = "1.13.0-beta.15";
52
53
  const main$1 = "dist/ops-tool-kit.js";
53
54
  const style = "dist/ops-tool-kit.css";
54
55
  const files = [
@@ -109,7 +110,7 @@ const devDependencies$1 = {
109
110
  const peerDependencies = {
110
111
  "@copart/core-components": "2.3.0-alpha.filters.6",
111
112
  react: "*",
112
- "react-router-dom": "^5.0.0"
113
+ "react-router-dom": "^5.0.0 || ^6.0.0"
113
114
  };
114
115
  const dependencies$1 = {
115
116
  "@reacting/purist": "0.1.0",
@@ -63583,6 +63584,47 @@ var formatNumber = function formatNumber(number) {
63583
63584
  return sign * Math.abs(number) + unitlist[unit];
63584
63585
  };
63585
63586
 
63587
+ /**
63588
+ * Default badge color thresholds used by many portal apps (e.g. MiOrg open tasks).
63589
+ * Matches legacy getStatus(count) logic: >1000 → 1, >500 → 2, >0 → 3.
63590
+ */
63591
+ var STANDARD_NAV_COUNT_THRESHOLDS = [{
63592
+ above: 1000,
63593
+ status: 1
63594
+ }, {
63595
+ above: 500,
63596
+ status: 2
63597
+ }, {
63598
+ above: 0,
63599
+ status: 3
63600
+ }];
63601
+
63602
+ /**
63603
+ * Resolve badge status from a count using getStatus (in-app) or countStatusThresholds (iframe shell).
63604
+ *
63605
+ * @param {number|string|null|undefined} count
63606
+ * @param {{ getStatus?: (n: number) => number, countStatusThresholds?: Array<{ above?: number, min?: number, status: number }> }} navItem
63607
+ * @returns {number|undefined}
63608
+ */
63609
+ function resolveCountStatus(count) {
63610
+ var navItem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
63611
+ if (count == null || count === '') return undefined;
63612
+ var num = Number(count);
63613
+ if (Number.isNaN(num)) return undefined;
63614
+ if (typeof navItem.getStatus === 'function') {
63615
+ return navItem.getStatus(num);
63616
+ }
63617
+ var thresholds = navItem.countStatusThresholds;
63618
+ if (!Array.isArray(thresholds) || thresholds.length === 0) return undefined;
63619
+ for (var i = 0; i < thresholds.length; i += 1) {
63620
+ var threshold = thresholds[i];
63621
+ if (!threshold || threshold.status == null) continue;
63622
+ if (threshold.above != null && num > threshold.above) return threshold.status;
63623
+ if (threshold.min != null && num >= threshold.min) return threshold.status;
63624
+ }
63625
+ return undefined;
63626
+ }
63627
+
63586
63628
  var css_248z$2 = ".utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer {\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n background: #3A4454;\r\n min-width: 50px;\r\n max-width: 50px;\r\n height: 100%;\r\n color: #ffffff;\r\n font-size: 14px;\r\n z-index: 101;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu {\r\n min-width: 70px;\r\n max-width: 70px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--withCounts {\r\n min-width: 100px;\r\n max-width: 100px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader {\r\n min-width: 0px;\r\n max-width: 0px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen {\r\n max-width: 500px;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n min-width: none;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton.utilities_ops-app-frame_NavigationBar_NavigationBar--showExpandIcons{\r\n min-width: auto;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton{\r\n min-width: auto;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenu {\r\n flex: 1;\r\n overflow-y: auto;\r\n -ms-overflow-style: none;\r\n scrollbar-width: none;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenu::-webkit-scrollbar { \r\n display: none;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem {\r\n display: flex;\r\n width: 100%;\r\n padding: 6px 12px 6px 12px;\r\n border-radius: 5px;\r\n cursor: pointer;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem.utilities_ops-app-frame_NavigationBar_NavigationBar--disabled {\r\n cursor: default;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemSelected {\r\n color: #323130;\r\n background-color: #fff;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemSelectedStatus {\r\n color: #fff;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n margin-left: auto;\r\n margin-right: 10px;\r\n min-width: none;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--withCounts:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--countsAvailable .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n min-width: 70px;\r\n text-align: right;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--countsAvailable:not(:hover) .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n min-width: auto;\r\n text-align: auto;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n min-width: 70px !important;\r\n text-align: right !important;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem.utilities_ops-app-frame_NavigationBar_NavigationBar--expandedMenu {\r\n background-color: #73A6FF;\r\n transition: background-color 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i {\r\n margin-left: auto;\r\n font-size: 12px;\r\n color: #fff;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem.utilities_ops-app-frame_NavigationBar_NavigationBar--selected .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i{\r\n color: #323130;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemCount {\r\n margin: 0 10px 0 auto;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemIcon {\r\n min-width: 20px;\r\n display: flex;\r\n justify-content: center;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemIcon i {\r\n font-size: 14px;\r\n /* width: 20px; */\r\n color: #fff;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem.utilities_ops-app-frame_NavigationBar_NavigationBar--disabled .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemIcon i {\r\n color: #A19F9D;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemSelected .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemIcon i{\r\n color: #323130;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemSelectedStatus .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemIcon i{\r\n color: #fff;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemSelected .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i{\r\n color: #323130;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemSelectedStatus .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i{\r\n color: #fff;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1NoHover .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n margin-right: 6px !important;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem.utilities_ops-app-frame_NavigationBar_NavigationBar--disabled .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i {\r\n color: #A19F9D;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i{\r\n font-size: 0px;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton.utilities_ops-app-frame_NavigationBar_NavigationBar--showExpandIcons i, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i{\r\n font-size: 12px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i{\r\n font-size: 12px;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName {\r\n max-width: 0;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n margin-top: 2px;\r\n font-weight: 100;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName {\r\n max-width: 100%;\r\n margin: 2px 10px 0 10px;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem.utilities_ops-app-frame_NavigationBar_NavigationBar--disabled .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName {\r\n color: #A19F9D;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName {\r\n max-width: 100%;\r\n margin: 0 5px 0 0;\r\n font-weight: 600;\r\n margin-left: 0px;\r\n cursor: auto;\r\n cursor: initial;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName {\r\n cursor: pointer;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName {\r\n margin: 0;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemIcon {\r\n margin-right: 0px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem {\r\n padding-left: 12px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemName > span {\r\n display: inline;\r\n display: initial;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n margin-left: auto;\r\n margin-right: 10px;\r\n min-width: none;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu.utilities_ops-app-frame_NavigationBar_NavigationBar--withCounts:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu.utilities_ops-app-frame_NavigationBar_NavigationBar--countsAvailable .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n min-width: 70px;\r\n text-align: right;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu.utilities_ops-app-frame_NavigationBar_NavigationBar--countsAvailable:not(:hover) .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n min-width: auto;\r\n text-align: auto;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton {\r\n min-width: 70px !important;\r\n text-align: right !important;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i {\r\n margin-left: auto;\r\n font-size: 12px;\r\n color: #fff;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem.utilities_ops-app-frame_NavigationBar_NavigationBar--selected .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i{\r\n color: #323130;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton.utilities_ops-app-frame_NavigationBar_NavigationBar--showExpandIcons i{\r\n font-size: 12px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 > .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--expandButton i{\r\n font-size: 12px;\r\n transition-delay: 0.25s;\r\n}\r\n\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--level3Menu .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel2 .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItemIcon {\r\n margin-right: 6px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel3 {\r\n display: flex;\r\n position: relative;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel3 .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem {\r\n padding: 6px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--statusColor {\r\n position: absolute;\r\n width: 10px;\r\n height: 95%;\r\n left: -13px;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--level1NavItem {\r\n width: 13px;\r\n margin-left: 1px;\r\n transition: all 0.5s ease-in-out;\r\n}\r\n\r\n.utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer:not(.utilities_ops-app-frame_NavigationBar_NavigationBar--showNavIconInHeader):hover .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--level1NavItem, .utilities_ops-app-frame_NavigationBar_NavigationBar--NavBarContainer.utilities_ops-app-frame_NavigationBar_NavigationBar--navBarOpen .utilities_ops-app-frame_NavigationBar_NavigationBar--NavMenuLevel1 .utilities_ops-app-frame_NavigationBar_NavigationBar--NavItem .utilities_ops-app-frame_NavigationBar_NavigationBar--level1NavItem {\r\n width: 100%;\r\n margin-left: 1px;\r\n transition-delay: 0.25s;\r\n}";
63587
63629
  styleInject(css_248z$2);
63588
63630
 
@@ -64329,9 +64371,9 @@ var NavigationMenuLevel3 = function NavigationMenuLevel3(_ref6) {
64329
64371
  var isHoverEnabled = showNavIconInHeader || isHover;
64330
64372
  var countText = !isHoverEnabled ? formatNumber(count) : count;
64331
64373
  var status, statusColor;
64332
- if (countText && navItem.getStatus && navItem.getStatus) {
64333
- status = navItem.getStatus(count);
64334
- statusColor = statusColors[status];
64374
+ if (countText != null && countText !== '') {
64375
+ status = resolveCountStatus(count, navItem);
64376
+ if (status != null) statusColor = statusColors[status];
64335
64377
  }
64336
64378
  var position = (navItem === null || navItem === void 0 ? void 0 : navItem.statusColorPosition) || '';
64337
64379
  var isDisabled = typeof navItem.disabled === 'function' ? navItem.disabled() : navItem.disabled;
@@ -68335,6 +68377,19 @@ function postNavConfig(navItems) {
68335
68377
  navItems: navItems
68336
68378
  });
68337
68379
  }
68380
+
68381
+ /**
68382
+ * Push nav badge counts to the shell.
68383
+ * @param {Record<string, Record<string, number>>} countsByMenu
68384
+ * Top-level menu route/name → sub-route counts, e.g.
68385
+ * { tasks: { 'open-tasks': 5 }, admin: { 'staged-users': 2 } }
68386
+ */
68387
+ function postNavCounts(countsByMenu) {
68388
+ if (!countsByMenu || _typeof$1(countsByMenu) !== 'object') return;
68389
+ post('UPDATE_NAV_COUNTS', {
68390
+ countsByMenu: countsByMenu
68391
+ });
68392
+ }
68338
68393
  function postAppEnv(toolkitEnv, mihelpAgentProps) {
68339
68394
  post('SET_APP_ENV', {
68340
68395
  toolkitEnv: toolkitEnv,
@@ -69600,6 +69655,7 @@ var iframeFacade = {
69600
69655
  postUpdateUri: postUpdateUri,
69601
69656
  postUpdateCrumbs: postUpdateCrumbs,
69602
69657
  postNavConfig: postNavConfig,
69658
+ postNavCounts: postNavCounts,
69603
69659
  postAppEnv: postAppEnv,
69604
69660
  addMessageListener: addMessageListener,
69605
69661
  getInitData: getInitData,
@@ -69617,6 +69673,20 @@ function normalizeIframePath(uri) {
69617
69673
  return uri.startsWith('/') ? uri : "/".concat(uri);
69618
69674
  }
69619
69675
 
69676
+ function serializeCountStatusThresholds(thresholds) {
69677
+ if (!Array.isArray(thresholds)) return undefined;
69678
+ var serialized = thresholds.filter(function (t) {
69679
+ return t && t.status != null && (t.above != null || t.min != null);
69680
+ }).map(function (t) {
69681
+ var entry = {
69682
+ status: t.status
69683
+ };
69684
+ if (t.above != null) entry.above = t.above;
69685
+ if (t.min != null) entry.min = t.min;
69686
+ return entry;
69687
+ });
69688
+ return serialized.length > 0 ? serialized : undefined;
69689
+ }
69620
69690
  function serializeNavItems(items) {
69621
69691
  if (!Array.isArray(items)) return [];
69622
69692
  return items.map(function (item) {
@@ -69644,6 +69714,11 @@ function serializeNavItems(items) {
69644
69714
  serialized.hidden = item.hidden;
69645
69715
  }
69646
69716
  if (item.isLandingPage) serialized.isLandingPage = true;
69717
+ if (typeof item.statusColorPosition === 'string') {
69718
+ serialized.statusColorPosition = item.statusColorPosition;
69719
+ }
69720
+ var thresholds = serializeCountStatusThresholds(item.countStatusThresholds);
69721
+ if (thresholds) serialized.countStatusThresholds = thresholds;
69647
69722
  if (item.subMenuItems && item.subMenuItems.length > 0) {
69648
69723
  serialized.subMenuItems = serializeNavItems(item.subMenuItems);
69649
69724
  }
@@ -69651,13 +69726,68 @@ function serializeNavItems(items) {
69651
69726
  });
69652
69727
  }
69653
69728
 
69729
+ /**
69730
+ * True when the host app uses react-router-dom v6+ (`useNavigate` present, `useHistory` removed).
69731
+ */
69732
+ var IS_REACT_ROUTER_V6 = typeof ReactRouterDOM__namespace.useNavigate === 'function' && typeof ReactRouterDOM__namespace.useHistory !== 'function';
69733
+ function normalizeNavigateTarget(to) {
69734
+ if (typeof to === 'string') return normalizeIframePath(to);
69735
+ return to;
69736
+ }
69737
+ function useRouterNavigationV5() {
69738
+ var history = ReactRouterDOM__namespace.useHistory();
69739
+ var location = ReactRouterDOM__namespace.useLocation();
69740
+ var navigate = React.useCallback(function (to, options) {
69741
+ if (typeof to === 'number') {
69742
+ history.go(to);
69743
+ return;
69744
+ }
69745
+ var target = normalizeNavigateTarget(to);
69746
+ if ((options === null || options === void 0 ? void 0 : options.state) != null) history.push(target, options.state);else if (options !== null && options !== void 0 && options.replace) history.replace(target);else history.push(target);
69747
+ }, [history]);
69748
+ return {
69749
+ navigate: navigate,
69750
+ location: location
69751
+ };
69752
+ }
69753
+ function useRouterNavigationV6() {
69754
+ var navigateFn = ReactRouterDOM__namespace.useNavigate();
69755
+ var location = ReactRouterDOM__namespace.useLocation();
69756
+ var navigate = React.useCallback(function (to, options) {
69757
+ if (typeof to === 'number') {
69758
+ navigateFn(to);
69759
+ return;
69760
+ }
69761
+ var target = normalizeNavigateTarget(to);
69762
+ if ((options === null || options === void 0 ? void 0 : options.state) != null || options !== null && options !== void 0 && options.replace) {
69763
+ navigateFn(target, {
69764
+ state: options === null || options === void 0 ? void 0 : options.state,
69765
+ replace: options === null || options === void 0 ? void 0 : options.replace
69766
+ });
69767
+ } else {
69768
+ navigateFn(target);
69769
+ }
69770
+ }, [navigateFn]);
69771
+ return {
69772
+ navigate: navigate,
69773
+ location: location
69774
+ };
69775
+ }
69776
+
69777
+ /**
69778
+ * Router-agnostic navigation for iframe shell components.
69779
+ * Uses `useHistory` on react-router-dom v5 and `useNavigate` on v6.
69780
+ */
69781
+ var useRouterNavigation = IS_REACT_ROUTER_V6 ? useRouterNavigationV6 : useRouterNavigationV5;
69782
+
69654
69783
  function IframeRouteSync(_ref) {
69655
69784
  var _ref$updateUriIsPath = _ref.updateUriIsPath,
69656
69785
  updateUriIsPath = _ref$updateUriIsPath === void 0 ? false : _ref$updateUriIsPath,
69657
69786
  _ref$suppressEcho = _ref.suppressEcho,
69658
69787
  suppressEcho = _ref$suppressEcho === void 0 ? true : _ref$suppressEcho;
69659
- var history = reactRouterDom.useHistory();
69660
- var location = reactRouterDom.useLocation();
69788
+ var _useRouterNavigation = useRouterNavigation(),
69789
+ navigate = _useRouterNavigation.navigate,
69790
+ location = _useRouterNavigation.location;
69661
69791
  var initialRef = React.useRef(true);
69662
69792
  var suppressUpdateUriRef = React.useRef(false);
69663
69793
  React.useEffect(function () {
@@ -69665,11 +69795,11 @@ function IframeRouteSync(_ref) {
69665
69795
  if (data.eventType === 'LOAD_URI' && data.eventProps) {
69666
69796
  var path = normalizeIframePath(data.eventProps.uri);
69667
69797
  if (suppressEcho) suppressUpdateUriRef.current = true;
69668
- history.push(path);
69798
+ navigate(path);
69669
69799
  }
69670
69800
  });
69671
69801
  return remove;
69672
- }, [history, suppressEcho]);
69802
+ }, [navigate, suppressEcho]);
69673
69803
  React.useEffect(function () {
69674
69804
  if (initialRef.current) {
69675
69805
  initialRef.current = false;
@@ -69727,6 +69857,70 @@ function NavConfigSender(_ref) {
69727
69857
  return null;
69728
69858
  }
69729
69859
 
69860
+ var DEFAULT_POLL_INTERVAL_MS = 60000;
69861
+ function resolveCountsLoader(mod) {
69862
+ if (!mod) return null;
69863
+ if (typeof mod === 'function') return mod;
69864
+ if (typeof mod.default === 'function') return mod.default;
69865
+ if (typeof mod.getNavCounts === 'function') return mod.getNavCounts;
69866
+ return null;
69867
+ }
69868
+
69869
+ /**
69870
+ * Polls nav badge counts inside the iframe and pushes them to the shell via UPDATE_NAV_COUNTS.
69871
+ *
69872
+ * @param {Object} props
69873
+ * @param {() => Promise<{ default?: Function, getNavCounts?: Function } | Function>} props.countsLoader
69874
+ * Dynamic import returning a function that resolves to countsByMenu, e.g.
69875
+ * { tasks: { 'open-tasks': 5 }, admin: { 'staged-users': 2 } }
69876
+ * @param {number} [props.pollIntervalMs=60000] Set to 0 to post once on mount only.
69877
+ * @param {(err: Error) => void} [props.onError]
69878
+ */
69879
+ function NavCountsSender(_ref) {
69880
+ var countsLoader = _ref.countsLoader,
69881
+ _ref$pollIntervalMs = _ref.pollIntervalMs,
69882
+ pollIntervalMs = _ref$pollIntervalMs === void 0 ? DEFAULT_POLL_INTERVAL_MS : _ref$pollIntervalMs,
69883
+ onError = _ref.onError;
69884
+ var mountedRef = React.useRef(true);
69885
+ React.useEffect(function () {
69886
+ mountedRef.current = true;
69887
+ if (!countsLoader) return undefined;
69888
+ var intervalId;
69889
+ var fetchAndPost = function fetchAndPost() {
69890
+ Promise.resolve().then(function () {
69891
+ return countsLoader();
69892
+ }).then(function (mod) {
69893
+ var loader = resolveCountsLoader(mod);
69894
+ if (!loader) {
69895
+ throw new Error('[NavCountsSender] countsLoader must export a function');
69896
+ }
69897
+ return loader();
69898
+ }).then(function (countsByMenu) {
69899
+ if (!mountedRef.current) return;
69900
+ if (countsByMenu && _typeof$1(countsByMenu) === 'object') {
69901
+ postNavCounts(countsByMenu);
69902
+ }
69903
+ }).catch(function (err) {
69904
+ if (!mountedRef.current) return;
69905
+ if (onError) {
69906
+ onError(err);
69907
+ } else {
69908
+ console.warn('[NavCountsSender] Failed to load/post nav counts:', err);
69909
+ }
69910
+ });
69911
+ };
69912
+ fetchAndPost();
69913
+ if (pollIntervalMs > 0) {
69914
+ intervalId = setInterval(fetchAndPost, pollIntervalMs);
69915
+ }
69916
+ return function () {
69917
+ mountedRef.current = false;
69918
+ if (intervalId) clearInterval(intervalId);
69919
+ };
69920
+ }, [countsLoader, pollIntervalMs, onError]);
69921
+ return null;
69922
+ }
69923
+
69730
69924
  var defaultContentStyle = {
69731
69925
  height: '100%',
69732
69926
  display: 'flex',
@@ -69740,13 +69934,15 @@ function IframeAppRootInner(_ref) {
69740
69934
  mihelpAgentProps = _ref.mihelpAgentProps,
69741
69935
  navItemsLoader = _ref.navItemsLoader,
69742
69936
  navConfigOnError = _ref.navConfigOnError,
69937
+ navCountsLoader = _ref.navCountsLoader,
69938
+ navCountsPollIntervalMs = _ref.navCountsPollIntervalMs,
69939
+ navCountsOnError = _ref.navCountsOnError,
69743
69940
  updateUriIsPath = _ref.updateUriIsPath,
69744
69941
  suppressRouteSyncEcho = _ref.suppressRouteSyncEcho;
69745
- var history = reactRouterDom.useHistory();
69942
+ var _useRouterNavigation = useRouterNavigation(),
69943
+ navigate = _useRouterNavigation.navigate;
69746
69944
  return /*#__PURE__*/React__default["default"].createElement(CrumbProvider, {
69747
- navigate: function navigate(path) {
69748
- return history.push(path);
69749
- }
69945
+ navigate: navigate
69750
69946
  }, /*#__PURE__*/React__default["default"].createElement(AppEnvSender, {
69751
69947
  toolkitEnv: toolkitEnv,
69752
69948
  mihelpAgentProps: mihelpAgentProps
@@ -69756,6 +69952,10 @@ function IframeAppRootInner(_ref) {
69756
69952
  }), navItemsLoader ? /*#__PURE__*/React__default["default"].createElement(NavConfigSender, {
69757
69953
  navItemsLoader: navItemsLoader,
69758
69954
  onError: navConfigOnError
69955
+ }) : null, navCountsLoader ? /*#__PURE__*/React__default["default"].createElement(NavCountsSender, {
69956
+ countsLoader: navCountsLoader,
69957
+ pollIntervalMs: navCountsPollIntervalMs,
69958
+ onError: navCountsOnError
69759
69959
  }) : null, /*#__PURE__*/React__default["default"].createElement("div", {
69760
69960
  style: contentStyle || defaultContentStyle
69761
69961
  }, children));
@@ -69770,12 +69970,15 @@ function IframeAppRoot(_ref2) {
69770
69970
  mihelpAgentProps = _ref2$mihelpAgentProp === void 0 ? null : _ref2$mihelpAgentProp,
69771
69971
  navItemsLoader = _ref2.navItemsLoader,
69772
69972
  navConfigOnError = _ref2.navConfigOnError,
69973
+ navCountsLoader = _ref2.navCountsLoader,
69974
+ navCountsPollIntervalMs = _ref2.navCountsPollIntervalMs,
69975
+ navCountsOnError = _ref2.navCountsOnError,
69773
69976
  _ref2$updateUriIsPath = _ref2.updateUriIsPath,
69774
69977
  updateUriIsPath = _ref2$updateUriIsPath === void 0 ? false : _ref2$updateUriIsPath,
69775
69978
  _ref2$suppressRouteSy = _ref2.suppressRouteSyncEcho,
69776
69979
  suppressRouteSyncEcho = _ref2$suppressRouteSy === void 0 ? true : _ref2$suppressRouteSy;
69777
69980
  var initialPath = normalizeIframePath(initialUri);
69778
- return /*#__PURE__*/React__default["default"].createElement(reactRouterDom.MemoryRouter, {
69981
+ return /*#__PURE__*/React__default["default"].createElement(ReactRouterDOM.MemoryRouter, {
69779
69982
  initialEntries: [initialPath],
69780
69983
  initialIndex: 0
69781
69984
  }, /*#__PURE__*/React__default["default"].createElement(IframeAppRootInner, {
@@ -69784,6 +69987,9 @@ function IframeAppRoot(_ref2) {
69784
69987
  mihelpAgentProps: mihelpAgentProps,
69785
69988
  navItemsLoader: navItemsLoader,
69786
69989
  navConfigOnError: navConfigOnError,
69990
+ navCountsLoader: navCountsLoader,
69991
+ navCountsPollIntervalMs: navCountsPollIntervalMs,
69992
+ navCountsOnError: navCountsOnError,
69787
69993
  updateUriIsPath: updateUriIsPath,
69788
69994
  suppressRouteSyncEcho: suppressRouteSyncEcho
69789
69995
  }, children));
@@ -81628,15 +81834,20 @@ exports.AutoRefresh = AutoRefresh;
81628
81834
  exports.CallLogger = CallLogger;
81629
81835
  exports.ContextualHelp = ContextualHelp;
81630
81836
  exports.Crumb = Crumb$1;
81837
+ exports.IS_REACT_ROUTER_V6 = IS_REACT_ROUTER_V6;
81631
81838
  exports.IframeAppRoot = IframeAppRoot;
81632
81839
  exports.IframeRouteSync = IframeRouteSync;
81633
81840
  exports.NavConfigSender = NavConfigSender;
81841
+ exports.NavCountsSender = NavCountsSender;
81842
+ exports.STANDARD_NAV_COUNT_THRESHOLDS = STANDARD_NAV_COUNT_THRESHOLDS;
81634
81843
  exports.accessHelpers = accessHelpers$1;
81635
81844
  exports.bootstrapIframeApp = bootstrapIframeApp;
81636
81845
  exports.fetcher = fetcher$1;
81637
81846
  exports.iframeFacade = iframeFacade;
81638
81847
  exports.normalizeIframePath = normalizeIframePath;
81639
81848
  exports.registerEarlyLoadUriListener = registerEarlyLoadUriListener;
81849
+ exports.resolveCountStatus = resolveCountStatus;
81640
81850
  exports.serializeNavItems = serializeNavItems;
81641
81851
  exports.storage = storage$2;
81852
+ exports.useRouterNavigation = useRouterNavigation;
81642
81853
  //# sourceMappingURL=ops-tool-kit.js.map