@copart/ops-tool-kit 1.13.0-beta.14 → 1.13.0-beta.16

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.14";
52
+ const version$3 = "1.13.0-beta.16";
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",
@@ -63586,6 +63587,7 @@ var formatNumber = function formatNumber(number) {
63586
63587
  /**
63587
63588
  * Default badge color thresholds used by many portal apps (e.g. MiOrg open tasks).
63588
63589
  * Matches legacy getStatus(count) logic: >1000 → 1, >500 → 2, >0 → 3.
63590
+ * Optional declarative fallback when apps prefer not to pre-resolve status in iframe mode.
63589
63591
  */
63590
63592
  var STANDARD_NAV_COUNT_THRESHOLDS = [{
63591
63593
  above: 1000,
@@ -63598,6 +63600,38 @@ var STANDARD_NAV_COUNT_THRESHOLDS = [{
63598
63600
  status: 3
63599
63601
  }];
63600
63602
 
63603
+ /**
63604
+ * @typedef {number|string} NavCountValue
63605
+ * @typedef {{ count?: NavCountValue, status?: number }} NavCountEntryObject
63606
+ * @typedef {NavCountValue|NavCountEntryObject} NavCountEntry
63607
+ */
63608
+
63609
+ /**
63610
+ * Normalize a nav count payload entry to { count, status }.
63611
+ * Accepts a plain number/string or { count, status } from iframe UPDATE_NAV_COUNTS.
63612
+ *
63613
+ * @param {NavCountEntry|null|undefined} entry
63614
+ * @returns {{ count: NavCountValue|undefined, status: number|undefined }}
63615
+ */
63616
+ function normalizeNavCountEntry(entry) {
63617
+ if (entry == null) {
63618
+ return {
63619
+ count: undefined,
63620
+ status: undefined
63621
+ };
63622
+ }
63623
+ if (_typeof$1(entry) === 'object' && !Array.isArray(entry)) {
63624
+ return {
63625
+ count: entry.count,
63626
+ status: entry.status != null ? entry.status : undefined
63627
+ };
63628
+ }
63629
+ return {
63630
+ count: entry,
63631
+ status: undefined
63632
+ };
63633
+ }
63634
+
63601
63635
  /**
63602
63636
  * Resolve badge status from a count using getStatus (in-app) or countStatusThresholds (iframe shell).
63603
63637
  *
@@ -63624,6 +63658,67 @@ function resolveCountStatus(count) {
63624
63658
  return undefined;
63625
63659
  }
63626
63660
 
63661
+ /**
63662
+ * Resolve count display value and badge status for NavigationBar.
63663
+ * Pre-resolved status from iframe payloads takes priority over local navItem rules.
63664
+ *
63665
+ * @param {NavCountEntry|null|undefined} entry
63666
+ * @param {{ getStatus?: (n: number) => number, countStatusThresholds?: Array<{ above?: number, min?: number, status: number }> }} navItem
63667
+ * @returns {{ count: number|undefined, status: number|undefined }}
63668
+ */
63669
+ function resolveNavCountDisplay(entry) {
63670
+ var navItem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
63671
+ var _normalizeNavCountEnt = normalizeNavCountEntry(entry),
63672
+ rawCount = _normalizeNavCountEnt.count,
63673
+ preResolvedStatus = _normalizeNavCountEnt.status;
63674
+ if (rawCount == null || rawCount === '') {
63675
+ return {
63676
+ count: undefined,
63677
+ status: undefined
63678
+ };
63679
+ }
63680
+ var num = Number(rawCount);
63681
+ if (Number.isNaN(num)) {
63682
+ return {
63683
+ count: undefined,
63684
+ status: undefined
63685
+ };
63686
+ }
63687
+ var status = preResolvedStatus;
63688
+ if (status == null) {
63689
+ status = resolveCountStatus(num, navItem);
63690
+ }
63691
+ return {
63692
+ count: num,
63693
+ status: status
63694
+ };
63695
+ }
63696
+
63697
+ /**
63698
+ * Build a nav count payload entry from a count and optional nav item getStatus callback.
63699
+ * Use inside iframe apps before posting UPDATE_NAV_COUNTS so arbitrary getStatus logic
63700
+ * runs in the app while only serializable data crosses postMessage.
63701
+ *
63702
+ * @param {NavCountValue|null|undefined} count
63703
+ * @param {{ getStatus?: (n: number) => number|null|undefined }} [navItem]
63704
+ * @returns {NavCountEntry|undefined}
63705
+ */
63706
+ function buildNavCountEntry(count, navItem) {
63707
+ if (count == null || count === '') return undefined;
63708
+ var num = Number(count);
63709
+ if (Number.isNaN(num)) return undefined;
63710
+ if (typeof (navItem === null || navItem === void 0 ? void 0 : navItem.getStatus) === 'function') {
63711
+ var status = navItem.getStatus(num);
63712
+ if (status != null) {
63713
+ return {
63714
+ count: num,
63715
+ status: status
63716
+ };
63717
+ }
63718
+ }
63719
+ return num;
63720
+ }
63721
+
63627
63722
  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}";
63628
63723
  styleInject(css_248z$2);
63629
63724
 
@@ -64338,7 +64433,7 @@ var NavigationMenuLevel2 = function NavigationMenuLevel2(_ref5) {
64338
64433
  isHover: isHover,
64339
64434
  showNavIconInHeader: showNavIconInHeader,
64340
64435
  navItem: subItem,
64341
- count: counts && counts[subItem.route],
64436
+ countEntry: counts && counts[subItem.route],
64342
64437
  countsLoading: countsLoading,
64343
64438
  selected: selected,
64344
64439
  navigateToItem: navigateToItem,
@@ -64353,7 +64448,7 @@ var NavigationMenuLevel2 = function NavigationMenuLevel2(_ref5) {
64353
64448
  };
64354
64449
  var NavigationMenuLevel3 = function NavigationMenuLevel3(_ref6) {
64355
64450
  var navItem = _ref6.navItem,
64356
- count = _ref6.count,
64451
+ countEntry = _ref6.countEntry,
64357
64452
  countsLoading = _ref6.countsLoading,
64358
64453
  isHover = _ref6.isHover,
64359
64454
  showNavIconInHeader = _ref6.showNavIconInHeader,
@@ -64368,12 +64463,15 @@ var NavigationMenuLevel3 = function NavigationMenuLevel3(_ref6) {
64368
64463
  _ref6$showLevel3Navig = _ref6.showLevel3Navigation,
64369
64464
  showLevel3Navigation = _ref6$showLevel3Navig === void 0 ? false : _ref6$showLevel3Navig;
64370
64465
  var isHoverEnabled = showNavIconInHeader || isHover;
64371
- var countText = !isHoverEnabled ? formatNumber(count) : count;
64372
- var status, statusColor;
64373
- if (countText != null && countText !== '') {
64374
- status = resolveCountStatus(count, navItem);
64375
- if (status != null) statusColor = statusColors[status];
64376
- }
64466
+ var _resolveNavCountDispl = resolveNavCountDisplay(countEntry, navItem),
64467
+ count = _resolveNavCountDispl.count,
64468
+ status = _resolveNavCountDispl.status;
64469
+ var countText;
64470
+ if (count != null && count !== '') {
64471
+ countText = !isHoverEnabled ? formatNumber(count) : count;
64472
+ }
64473
+ var statusColor;
64474
+ if (status != null) statusColor = statusColors[status];
64377
64475
  var position = (navItem === null || navItem === void 0 ? void 0 : navItem.statusColorPosition) || '';
64378
64476
  var isDisabled = typeof navItem.disabled === 'function' ? navItem.disabled() : navItem.disabled;
64379
64477
 
@@ -68379,9 +68477,12 @@ function postNavConfig(navItems) {
68379
68477
 
68380
68478
  /**
68381
68479
  * Push nav badge counts to the shell.
68382
- * @param {Record<string, Record<string, number>>} countsByMenu
68383
- * Top-level menu route/name → sub-route counts, e.g.
68384
- * { tasks: { 'open-tasks': 5 }, admin: { 'staged-users': 2 } }
68480
+ * @param {Record<string, Record<string, import('../utilities/navCountStatus').NavCountEntry>>} countsByMenu
68481
+ * Top-level menu route → sub-route counts. Each value may be:
68482
+ * - a plain number (count only, no badge color), or
68483
+ * - `{ count, status }` where status is pre-resolved in the iframe (1|2|3).
68484
+ * Example:
68485
+ * { tasks: { 'open-tasks': { count: 750, status: 2 } }, admin: { 'staged-users': 12 } }
68385
68486
  */
68386
68487
  function postNavCounts(countsByMenu) {
68387
68488
  if (!countsByMenu || _typeof$1(countsByMenu) !== 'object') return;
@@ -69725,13 +69826,68 @@ function serializeNavItems(items) {
69725
69826
  });
69726
69827
  }
69727
69828
 
69829
+ /**
69830
+ * True when the host app uses react-router-dom v6+ (`useNavigate` present, `useHistory` removed).
69831
+ */
69832
+ var IS_REACT_ROUTER_V6 = typeof ReactRouterDOM__namespace.useNavigate === 'function' && typeof ReactRouterDOM__namespace.useHistory !== 'function';
69833
+ function normalizeNavigateTarget(to) {
69834
+ if (typeof to === 'string') return normalizeIframePath(to);
69835
+ return to;
69836
+ }
69837
+ function useRouterNavigationV5() {
69838
+ var history = ReactRouterDOM__namespace.useHistory();
69839
+ var location = ReactRouterDOM__namespace.useLocation();
69840
+ var navigate = React.useCallback(function (to, options) {
69841
+ if (typeof to === 'number') {
69842
+ history.go(to);
69843
+ return;
69844
+ }
69845
+ var target = normalizeNavigateTarget(to);
69846
+ 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);
69847
+ }, [history]);
69848
+ return {
69849
+ navigate: navigate,
69850
+ location: location
69851
+ };
69852
+ }
69853
+ function useRouterNavigationV6() {
69854
+ var navigateFn = ReactRouterDOM__namespace.useNavigate();
69855
+ var location = ReactRouterDOM__namespace.useLocation();
69856
+ var navigate = React.useCallback(function (to, options) {
69857
+ if (typeof to === 'number') {
69858
+ navigateFn(to);
69859
+ return;
69860
+ }
69861
+ var target = normalizeNavigateTarget(to);
69862
+ if ((options === null || options === void 0 ? void 0 : options.state) != null || options !== null && options !== void 0 && options.replace) {
69863
+ navigateFn(target, {
69864
+ state: options === null || options === void 0 ? void 0 : options.state,
69865
+ replace: options === null || options === void 0 ? void 0 : options.replace
69866
+ });
69867
+ } else {
69868
+ navigateFn(target);
69869
+ }
69870
+ }, [navigateFn]);
69871
+ return {
69872
+ navigate: navigate,
69873
+ location: location
69874
+ };
69875
+ }
69876
+
69877
+ /**
69878
+ * Router-agnostic navigation for iframe shell components.
69879
+ * Uses `useHistory` on react-router-dom v5 and `useNavigate` on v6.
69880
+ */
69881
+ var useRouterNavigation = IS_REACT_ROUTER_V6 ? useRouterNavigationV6 : useRouterNavigationV5;
69882
+
69728
69883
  function IframeRouteSync(_ref) {
69729
69884
  var _ref$updateUriIsPath = _ref.updateUriIsPath,
69730
69885
  updateUriIsPath = _ref$updateUriIsPath === void 0 ? false : _ref$updateUriIsPath,
69731
69886
  _ref$suppressEcho = _ref.suppressEcho,
69732
69887
  suppressEcho = _ref$suppressEcho === void 0 ? true : _ref$suppressEcho;
69733
- var history = reactRouterDom.useHistory();
69734
- var location = reactRouterDom.useLocation();
69888
+ var _useRouterNavigation = useRouterNavigation(),
69889
+ navigate = _useRouterNavigation.navigate,
69890
+ location = _useRouterNavigation.location;
69735
69891
  var initialRef = React.useRef(true);
69736
69892
  var suppressUpdateUriRef = React.useRef(false);
69737
69893
  React.useEffect(function () {
@@ -69739,11 +69895,11 @@ function IframeRouteSync(_ref) {
69739
69895
  if (data.eventType === 'LOAD_URI' && data.eventProps) {
69740
69896
  var path = normalizeIframePath(data.eventProps.uri);
69741
69897
  if (suppressEcho) suppressUpdateUriRef.current = true;
69742
- history.push(path);
69898
+ navigate(path);
69743
69899
  }
69744
69900
  });
69745
69901
  return remove;
69746
- }, [history, suppressEcho]);
69902
+ }, [navigate, suppressEcho]);
69747
69903
  React.useEffect(function () {
69748
69904
  if (initialRef.current) {
69749
69905
  initialRef.current = false;
@@ -69816,7 +69972,8 @@ function resolveCountsLoader(mod) {
69816
69972
  * @param {Object} props
69817
69973
  * @param {() => Promise<{ default?: Function, getNavCounts?: Function } | Function>} props.countsLoader
69818
69974
  * Dynamic import returning a function that resolves to countsByMenu, e.g.
69819
- * { tasks: { 'open-tasks': 5 }, admin: { 'staged-users': 2 } }
69975
+ * { tasks: { 'open-tasks': { count: 750, status: 2 } }, admin: { 'staged-users': 12 } }
69976
+ * Use buildNavCountEntry() in the loader to run navItem.getStatus in the iframe before posting.
69820
69977
  * @param {number} [props.pollIntervalMs=60000] Set to 0 to post once on mount only.
69821
69978
  * @param {(err: Error) => void} [props.onError]
69822
69979
  */
@@ -69883,11 +70040,10 @@ function IframeAppRootInner(_ref) {
69883
70040
  navCountsOnError = _ref.navCountsOnError,
69884
70041
  updateUriIsPath = _ref.updateUriIsPath,
69885
70042
  suppressRouteSyncEcho = _ref.suppressRouteSyncEcho;
69886
- var history = reactRouterDom.useHistory();
70043
+ var _useRouterNavigation = useRouterNavigation(),
70044
+ navigate = _useRouterNavigation.navigate;
69887
70045
  return /*#__PURE__*/React__default["default"].createElement(CrumbProvider, {
69888
- navigate: function navigate(path) {
69889
- return history.push(path);
69890
- }
70046
+ navigate: navigate
69891
70047
  }, /*#__PURE__*/React__default["default"].createElement(AppEnvSender, {
69892
70048
  toolkitEnv: toolkitEnv,
69893
70049
  mihelpAgentProps: mihelpAgentProps
@@ -69923,7 +70079,7 @@ function IframeAppRoot(_ref2) {
69923
70079
  _ref2$suppressRouteSy = _ref2.suppressRouteSyncEcho,
69924
70080
  suppressRouteSyncEcho = _ref2$suppressRouteSy === void 0 ? true : _ref2$suppressRouteSy;
69925
70081
  var initialPath = normalizeIframePath(initialUri);
69926
- return /*#__PURE__*/React__default["default"].createElement(reactRouterDom.MemoryRouter, {
70082
+ return /*#__PURE__*/React__default["default"].createElement(ReactRouterDOM.MemoryRouter, {
69927
70083
  initialEntries: [initialPath],
69928
70084
  initialIndex: 0
69929
70085
  }, /*#__PURE__*/React__default["default"].createElement(IframeAppRootInner, {
@@ -81779,6 +81935,7 @@ exports.AutoRefresh = AutoRefresh;
81779
81935
  exports.CallLogger = CallLogger;
81780
81936
  exports.ContextualHelp = ContextualHelp;
81781
81937
  exports.Crumb = Crumb$1;
81938
+ exports.IS_REACT_ROUTER_V6 = IS_REACT_ROUTER_V6;
81782
81939
  exports.IframeAppRoot = IframeAppRoot;
81783
81940
  exports.IframeRouteSync = IframeRouteSync;
81784
81941
  exports.NavConfigSender = NavConfigSender;
@@ -81786,11 +81943,15 @@ exports.NavCountsSender = NavCountsSender;
81786
81943
  exports.STANDARD_NAV_COUNT_THRESHOLDS = STANDARD_NAV_COUNT_THRESHOLDS;
81787
81944
  exports.accessHelpers = accessHelpers$1;
81788
81945
  exports.bootstrapIframeApp = bootstrapIframeApp;
81946
+ exports.buildNavCountEntry = buildNavCountEntry;
81789
81947
  exports.fetcher = fetcher$1;
81790
81948
  exports.iframeFacade = iframeFacade;
81791
81949
  exports.normalizeIframePath = normalizeIframePath;
81950
+ exports.normalizeNavCountEntry = normalizeNavCountEntry;
81792
81951
  exports.registerEarlyLoadUriListener = registerEarlyLoadUriListener;
81793
81952
  exports.resolveCountStatus = resolveCountStatus;
81953
+ exports.resolveNavCountDisplay = resolveNavCountDisplay;
81794
81954
  exports.serializeNavItems = serializeNavItems;
81795
81955
  exports.storage = storage$2;
81956
+ exports.useRouterNavigation = useRouterNavigation;
81796
81957
  //# sourceMappingURL=ops-tool-kit.js.map