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

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.
@@ -49,7 +49,7 @@ var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
49
49
  var ReactRouterDOM__namespace = /*#__PURE__*/_interopNamespace(ReactRouterDOM);
50
50
 
51
51
  const name$1 = "@copart/ops-tool-kit";
52
- const version$3 = "1.13.0-beta.15";
52
+ const version$3 = "1.13.0-beta.17";
53
53
  const main$1 = "dist/ops-tool-kit.js";
54
54
  const style = "dist/ops-tool-kit.css";
55
55
  const files = [
@@ -63587,6 +63587,7 @@ var formatNumber = function formatNumber(number) {
63587
63587
  /**
63588
63588
  * Default badge color thresholds used by many portal apps (e.g. MiOrg open tasks).
63589
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.
63590
63591
  */
63591
63592
  var STANDARD_NAV_COUNT_THRESHOLDS = [{
63592
63593
  above: 1000,
@@ -63599,6 +63600,38 @@ var STANDARD_NAV_COUNT_THRESHOLDS = [{
63599
63600
  status: 3
63600
63601
  }];
63601
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
+
63602
63635
  /**
63603
63636
  * Resolve badge status from a count using getStatus (in-app) or countStatusThresholds (iframe shell).
63604
63637
  *
@@ -63625,6 +63658,67 @@ function resolveCountStatus(count) {
63625
63658
  return undefined;
63626
63659
  }
63627
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
+
63628
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}";
63629
63723
  styleInject(css_248z$2);
63630
63724
 
@@ -64339,7 +64433,7 @@ var NavigationMenuLevel2 = function NavigationMenuLevel2(_ref5) {
64339
64433
  isHover: isHover,
64340
64434
  showNavIconInHeader: showNavIconInHeader,
64341
64435
  navItem: subItem,
64342
- count: counts && counts[subItem.route],
64436
+ countEntry: counts && counts[subItem.route],
64343
64437
  countsLoading: countsLoading,
64344
64438
  selected: selected,
64345
64439
  navigateToItem: navigateToItem,
@@ -64354,7 +64448,7 @@ var NavigationMenuLevel2 = function NavigationMenuLevel2(_ref5) {
64354
64448
  };
64355
64449
  var NavigationMenuLevel3 = function NavigationMenuLevel3(_ref6) {
64356
64450
  var navItem = _ref6.navItem,
64357
- count = _ref6.count,
64451
+ countEntry = _ref6.countEntry,
64358
64452
  countsLoading = _ref6.countsLoading,
64359
64453
  isHover = _ref6.isHover,
64360
64454
  showNavIconInHeader = _ref6.showNavIconInHeader,
@@ -64369,12 +64463,15 @@ var NavigationMenuLevel3 = function NavigationMenuLevel3(_ref6) {
64369
64463
  _ref6$showLevel3Navig = _ref6.showLevel3Navigation,
64370
64464
  showLevel3Navigation = _ref6$showLevel3Navig === void 0 ? false : _ref6$showLevel3Navig;
64371
64465
  var isHoverEnabled = showNavIconInHeader || isHover;
64372
- var countText = !isHoverEnabled ? formatNumber(count) : count;
64373
- var status, statusColor;
64374
- if (countText != null && countText !== '') {
64375
- status = resolveCountStatus(count, navItem);
64376
- if (status != null) statusColor = statusColors[status];
64377
- }
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];
64378
64475
  var position = (navItem === null || navItem === void 0 ? void 0 : navItem.statusColorPosition) || '';
64379
64476
  var isDisabled = typeof navItem.disabled === 'function' ? navItem.disabled() : navItem.disabled;
64380
64477
 
@@ -68380,9 +68477,12 @@ function postNavConfig(navItems) {
68380
68477
 
68381
68478
  /**
68382
68479
  * 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 } }
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 } }
68386
68486
  */
68387
68487
  function postNavCounts(countsByMenu) {
68388
68488
  if (!countsByMenu || _typeof$1(countsByMenu) !== 'object') return;
@@ -68409,7 +68509,7 @@ function addMessageListener(callback) {
68409
68509
  function extractUriFromFullPath(fullPath) {
68410
68510
  try {
68411
68511
  var url = new URL(fullPath);
68412
- return url.pathname || '/';
68512
+ return "".concat(url.pathname || '/').concat(url.search || '').concat(url.hash || '');
68413
68513
  } catch (_) {}
68414
68514
  return null;
68415
68515
  }
@@ -69672,6 +69772,32 @@ function normalizeIframePath(uri) {
69672
69772
  if (uri === '' || uri == null) return '/';
69673
69773
  return uri.startsWith('/') ? uri : "/".concat(uri);
69674
69774
  }
69775
+ function buildIframeAppUri() {
69776
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
69777
+ _ref$pathname = _ref.pathname,
69778
+ pathname = _ref$pathname === void 0 ? '/' : _ref$pathname,
69779
+ _ref$search = _ref.search,
69780
+ search = _ref$search === void 0 ? '' : _ref$search,
69781
+ _ref$hash = _ref.hash,
69782
+ hash = _ref$hash === void 0 ? '' : _ref$hash;
69783
+ var path = pathname || '/';
69784
+ return "".concat(path).concat(search || '').concat(hash || '');
69785
+ }
69786
+
69787
+ /**
69788
+ * Resolve LOAD_URI target without stripping in-app query params.
69789
+ * Shell often sends pathname-only; preserve existing search when paths match.
69790
+ */
69791
+ function resolveLoadUriTarget(eventProps) {
69792
+ var currentLocation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
69793
+ var target = normalizeIframePath(eventProps === null || eventProps === void 0 ? void 0 : eventProps.uri);
69794
+ var currentPath = currentLocation.pathname || '/';
69795
+ var hasIncomingQuery = target.includes('?') || target.includes('#');
69796
+ if (!hasIncomingQuery && target === currentPath && (currentLocation.search || currentLocation.hash)) {
69797
+ return buildIframeAppUri(currentLocation);
69798
+ }
69799
+ return target;
69800
+ }
69675
69801
 
69676
69802
  function serializeCountStatusThresholds(thresholds) {
69677
69803
  if (!Array.isArray(thresholds)) return undefined;
@@ -69790,12 +69916,17 @@ function IframeRouteSync(_ref) {
69790
69916
  location = _useRouterNavigation.location;
69791
69917
  var initialRef = React.useRef(true);
69792
69918
  var suppressUpdateUriRef = React.useRef(false);
69919
+ var locationRef = React.useRef(location);
69920
+ locationRef.current = location;
69793
69921
  React.useEffect(function () {
69794
69922
  var remove = addMessageListener(function (data) {
69795
69923
  if (data.eventType === 'LOAD_URI' && data.eventProps) {
69796
- var path = normalizeIframePath(data.eventProps.uri);
69924
+ var currentLocation = locationRef.current;
69925
+ var target = resolveLoadUriTarget(data.eventProps, currentLocation);
69926
+ var currentUri = buildIframeAppUri(currentLocation);
69927
+ if (target === currentUri) return;
69797
69928
  if (suppressEcho) suppressUpdateUriRef.current = true;
69798
- navigate(path);
69929
+ navigate(target);
69799
69930
  }
69800
69931
  });
69801
69932
  return remove;
@@ -69809,9 +69940,8 @@ function IframeRouteSync(_ref) {
69809
69940
  suppressUpdateUriRef.current = false;
69810
69941
  return;
69811
69942
  }
69812
- var pathname = location.pathname || '/';
69813
- postUpdateUri(pathname, updateUriIsPath);
69814
- }, [location.pathname, updateUriIsPath, suppressEcho]);
69943
+ postUpdateUri(buildIframeAppUri(location), updateUriIsPath);
69944
+ }, [location.pathname, location.search, location.hash, updateUriIsPath, suppressEcho]);
69815
69945
  return null;
69816
69946
  }
69817
69947
 
@@ -69872,7 +70002,8 @@ function resolveCountsLoader(mod) {
69872
70002
  * @param {Object} props
69873
70003
  * @param {() => Promise<{ default?: Function, getNavCounts?: Function } | Function>} props.countsLoader
69874
70004
  * Dynamic import returning a function that resolves to countsByMenu, e.g.
69875
- * { tasks: { 'open-tasks': 5 }, admin: { 'staged-users': 2 } }
70005
+ * { tasks: { 'open-tasks': { count: 750, status: 2 } }, admin: { 'staged-users': 12 } }
70006
+ * Use buildNavCountEntry() in the loader to run navItem.getStatus in the iframe before posting.
69876
70007
  * @param {number} [props.pollIntervalMs=60000] Set to 0 to post once on mount only.
69877
70008
  * @param {(err: Error) => void} [props.onError]
69878
70009
  */
@@ -81842,11 +81973,16 @@ exports.NavCountsSender = NavCountsSender;
81842
81973
  exports.STANDARD_NAV_COUNT_THRESHOLDS = STANDARD_NAV_COUNT_THRESHOLDS;
81843
81974
  exports.accessHelpers = accessHelpers$1;
81844
81975
  exports.bootstrapIframeApp = bootstrapIframeApp;
81976
+ exports.buildIframeAppUri = buildIframeAppUri;
81977
+ exports.buildNavCountEntry = buildNavCountEntry;
81845
81978
  exports.fetcher = fetcher$1;
81846
81979
  exports.iframeFacade = iframeFacade;
81847
81980
  exports.normalizeIframePath = normalizeIframePath;
81981
+ exports.normalizeNavCountEntry = normalizeNavCountEntry;
81848
81982
  exports.registerEarlyLoadUriListener = registerEarlyLoadUriListener;
81849
81983
  exports.resolveCountStatus = resolveCountStatus;
81984
+ exports.resolveLoadUriTarget = resolveLoadUriTarget;
81985
+ exports.resolveNavCountDisplay = resolveNavCountDisplay;
81850
81986
  exports.serializeNavItems = serializeNavItems;
81851
81987
  exports.storage = storage$2;
81852
81988
  exports.useRouterNavigation = useRouterNavigation;