@burdenoff/fe-libs 2026.527.2 → 2026.527.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/button/Button.js +18 -16
  2. package/dist/chrome/AccountSwitcher.js +10 -7
  3. package/dist/chrome/AutoBreadcrumbs.js +2 -0
  4. package/dist/chrome/Breadcrumbs.js +2 -0
  5. package/dist/chrome/CommandPalette.js +5 -3
  6. package/dist/chrome/ContextSwitcher.js +90 -338
  7. package/dist/chrome/DynamicFooter.js +7 -7
  8. package/dist/chrome/Footer.js +5 -5
  9. package/dist/chrome/GeographySwitcher.js +3 -3
  10. package/dist/chrome/GlobalSearch.js +73 -448
  11. package/dist/chrome/HeaderBar.js +6 -1
  12. package/dist/chrome/LanguagePickerSheet.js +1 -1
  13. package/dist/chrome/LanguageSwitcher.js +2 -2
  14. package/dist/chrome/NotificationCenter.js +69 -694
  15. package/dist/chrome/PanelTabs.js +7 -4
  16. package/dist/chrome/PluginContextMenuTarget.js +1 -1
  17. package/dist/chrome/ProductPickerSheet.js +4 -4
  18. package/dist/chrome/ProductSideNav.js +1 -1
  19. package/dist/chrome/ProductSwitcher.js +3 -3
  20. package/dist/chrome/ProfileSwitcher.js +13 -8
  21. package/dist/chrome/ShortcutHelpDialog.js +2 -1
  22. package/dist/chrome/SideNavigation.js +75 -239
  23. package/dist/chrome/Sidebar.js +1 -0
  24. package/dist/chrome/contextSwitcher/EmptyState.js +32 -0
  25. package/dist/chrome/contextSwitcher/OrganizationList.js +34 -0
  26. package/dist/chrome/contextSwitcher/ProjectList.js +34 -0
  27. package/dist/chrome/contextSwitcher/SearchInput.js +50 -0
  28. package/dist/chrome/contextSwitcher/TabButton.js +9 -0
  29. package/dist/chrome/contextSwitcher/TriggerButton.js +38 -0
  30. package/dist/chrome/contextSwitcher/WorkspaceList.js +34 -0
  31. package/dist/chrome/contextSwitcher/icons.js +58 -0
  32. package/dist/chrome/contextSwitcher/useIsMobile.js +11 -0
  33. package/dist/chrome/globalSearch/AdvancedFiltersPanel.js +253 -0
  34. package/dist/chrome/globalSearch/CategoryTabs.js +28 -0
  35. package/dist/chrome/globalSearch/ResultsList.js +58 -0
  36. package/dist/chrome/globalSearch/SearchInput.js +28 -0
  37. package/dist/chrome/globalSearch/SearchModeBar.js +36 -0
  38. package/dist/chrome/globalSearch/useAdvancedFilters.js +78 -0
  39. package/dist/chrome/globalSearch/utils.js +22 -0
  40. package/dist/chrome/notificationCenter/BellButton.js +27 -0
  41. package/dist/chrome/notificationCenter/NotificationCardItem.js +129 -0
  42. package/dist/chrome/notificationCenter/NotificationFilters.js +67 -0
  43. package/dist/chrome/notificationCenter/NotificationFooter.js +23 -0
  44. package/dist/chrome/notificationCenter/NotificationHeader.js +75 -0
  45. package/dist/chrome/notificationCenter/NotificationList.js +75 -0
  46. package/dist/chrome/notificationCenter/NotificationPanel.js +19 -0
  47. package/dist/chrome/notificationCenter/SkeletonCard.js +18 -0
  48. package/dist/chrome/notificationCenter/constants.js +93 -0
  49. package/dist/chrome/notificationCenter/gql.js +58 -0
  50. package/dist/chrome/notificationCenter/useNotificationCenter.js +149 -0
  51. package/dist/chrome/notificationCenter/usePanelChrome.js +36 -0
  52. package/dist/chrome/sideNavigation/CollapseToggle.js +29 -0
  53. package/dist/chrome/sideNavigation/MobileActionsBar.js +25 -0
  54. package/dist/chrome/sideNavigation/NavItemRenderer.js +79 -0
  55. package/dist/chrome/sideNavigation/SidebarHeader.js +29 -0
  56. package/dist/chrome/sideNavigation/helpers.js +19 -0
  57. package/dist/chrome/sideNavigation/useSideNavigationState.js +45 -0
  58. package/dist/form/Checkbox.js +17 -15
  59. package/dist/form/FormDescription.js +9 -10
  60. package/dist/form/FormField.js +11 -12
  61. package/dist/form/FormLabel.js +13 -13
  62. package/dist/form/FormMessage.js +10 -11
  63. package/dist/form/Input.js +11 -10
  64. package/dist/form/Radio.js +25 -21
  65. package/dist/form/Select.js +81 -66
  66. package/dist/form/Textarea.js +10 -9
  67. package/dist/shared/components/AccessDenied.js +8 -4
  68. package/dist/shared/components/AppErrorBoundary.js +2 -0
  69. package/dist/shared/components/ContextConversationWidget.js +173 -767
  70. package/dist/shared/components/ErrorFallback.js +3 -0
  71. package/dist/shared/components/PWAInstallBanner.js +8 -4
  72. package/dist/shared/components/RequireAuth.js +4 -4
  73. package/dist/shared/components/SSORedirectGuard.js +1 -1
  74. package/dist/shared/components/contextConversationWidget/Composer.js +66 -0
  75. package/dist/shared/components/contextConversationWidget/MessageItem.js +124 -0
  76. package/dist/shared/components/contextConversationWidget/MessageList.js +32 -0
  77. package/dist/shared/components/contextConversationWidget/NoWorkspaceCard.js +19 -0
  78. package/dist/shared/components/contextConversationWidget/PendingAttachmentsBar.js +28 -0
  79. package/dist/shared/components/contextConversationWidget/ReplyBanner.js +32 -0
  80. package/dist/shared/components/contextConversationWidget/WidgetHeader.js +70 -0
  81. package/dist/shared/components/contextConversationWidget/queries.js +197 -0
  82. package/dist/shared/components/contextConversationWidget/types.js +10 -0
  83. package/dist/shared/components/contextConversationWidget/useAttachmentUpload.js +57 -0
  84. package/dist/shared/components/contextConversationWidget/useConversationSubscriptions.js +26 -0
  85. package/dist/shared/components/contextConversationWidget/useMessageActions.js +34 -0
  86. package/dist/shared/components/contextConversationWidget/useSendMessage.js +45 -0
  87. package/dist/shared/components/contextConversationWidget/useWidgetMessages.js +44 -0
  88. package/dist/shared/components/contextConversationWidget/utils.js +56 -0
  89. package/dist/shared/feature-flags/FeatureFlagProvider.js +21 -21
  90. package/dist/shared/geography/GeographyProvider.js +20 -20
  91. package/dist/shared/graphql/GatewayContext.js +1 -1
  92. package/dist/shared/motion/MotionList.js +1 -1
  93. package/dist/shared/pages/AiPage.js +3 -3
  94. package/dist/shared/pages/SearchPage.js +293 -1071
  95. package/dist/shared/pages/searchPage/ActiveFilterChips.js +176 -0
  96. package/dist/shared/pages/searchPage/FiltersPanel.js +329 -0
  97. package/dist/shared/pages/searchPage/ResultsList.js +119 -0
  98. package/dist/shared/pages/searchPage/ResultsStatus.js +32 -0
  99. package/dist/shared/pages/searchPage/SearchInput.js +31 -0
  100. package/dist/shared/pages/searchPage/SearchPagination.js +37 -0
  101. package/dist/shared/pages/searchPage/SearchToolbar.js +58 -0
  102. package/dist/shared/pages/searchPage/constants.js +155 -0
  103. package/dist/shared/pages/searchPage/utils.js +24 -0
  104. package/dist/shared/plugins/PluginRuntimeProvider.js +1 -1
  105. package/dist/shared/providers/shell/ActiveContextProvider.js +12 -12
  106. package/dist/shared/providers/shell/AppShellContext.js +1 -1
  107. package/dist/shared/providers/shell/AuthProvider.js +130 -384
  108. package/dist/shared/providers/shell/AuthTokenProvider.js +6 -6
  109. package/dist/shared/providers/shell/ContextManagerProvider.js +1 -1
  110. package/dist/shared/providers/shell/FeatureFlagsProvider.js +5 -5
  111. package/dist/shared/providers/shell/GlobalUiProvider.js +17 -17
  112. package/dist/shared/providers/shell/I18nProvider.js +15 -15
  113. package/dist/shared/providers/shell/PageConversationContextProvider.js +14 -14
  114. package/dist/shared/providers/shell/PermissionProvider.js +16 -16
  115. package/dist/shared/providers/shell/ShellUiProvider.js +13 -13
  116. package/dist/shared/providers/shell/ThemeProvider.js +9 -9
  117. package/dist/shared/providers/shell/authProvider/bridgeStateSync.js +34 -0
  118. package/dist/shared/providers/shell/authProvider/jwt.js +13 -0
  119. package/dist/shared/providers/shell/authProvider/ssoRelay.js +38 -0
  120. package/dist/shared/providers/shell/authProvider/useAuthActions.js +170 -0
  121. package/dist/shared/providers/shell/authProvider/useBridgeInitialization.js +86 -0
  122. package/dist/shared/providers/shell/authProvider/useRemoteSLO.js +32 -0
  123. package/dist/shared/providers/shell/authProvider/useStorageSync.js +35 -0
  124. package/dist/shared/providers/shell/authProvider/useTokenExpiryTimer.js +37 -0
  125. package/dist/shared/tours/TourPlayer.js +1 -0
  126. package/dist/shared/tours/TourPlayerProvider.js +1 -1
  127. package/dist/shared/tours/TourTooltip.js +3 -0
  128. package/dist/shared/tours/TourTrigger.js +86 -259
  129. package/dist/shared/tours/ToursContext.js +108 -398
  130. package/dist/shared/tours/tourTrigger/DesktopTourDropdown.js +48 -0
  131. package/dist/shared/tours/tourTrigger/MobileTourSheet.js +68 -0
  132. package/dist/shared/tours/tourTrigger/TourListItemDesktop.js +36 -0
  133. package/dist/shared/tours/tourTrigger/TourListItemMobile.js +47 -0
  134. package/dist/shared/tours/tourTrigger/TourStatusChip.js +30 -0
  135. package/dist/shared/tours/tourTrigger/TourTriggerButton.js +22 -0
  136. package/dist/shared/tours/toursContext/errors.js +18 -0
  137. package/dist/shared/tours/toursContext/gql.js +152 -0
  138. package/dist/shared/tours/toursContext/route.js +20 -0
  139. package/dist/shared/tours/toursContext/session.js +19 -0
  140. package/dist/shared/tours/toursContext/useIdleReady.js +18 -0
  141. package/dist/shared/tours/toursContext/useTourMutations.js +118 -0
  142. package/dist/shared-events.js +3 -3
  143. package/dist/shared-hooks.js +1 -1
  144. package/dist/storage/SaveToFilesButton.js +3 -3
  145. package/dist/storage/SaveToFilesDialog.js +1 -1
  146. package/dist/tag/TagBadge.js +1 -1
  147. package/dist/tag/TagsWidget.js +81 -226
  148. package/dist/tag/tagsWidget/AddTagTrigger.js +14 -0
  149. package/dist/tag/tagsWidget/TagBadgeList.js +17 -0
  150. package/dist/tag/tagsWidget/TagSearchPopover.js +80 -0
  151. package/dist/tag/tagsWidget/operations.js +64 -0
  152. package/dist/tag/tagsWidget/useVocabResolver.js +30 -0
  153. package/dist/ui/card.js +44 -39
  154. package/dist/ui/dropdown-menu.js +82 -66
  155. package/dist/ui/input.js +10 -10
  156. package/dist/ui/label.js +13 -11
  157. package/dist/ui/select.js +80 -66
  158. package/dist/ui/table.js +61 -54
  159. package/dist/ui/textarea.js +9 -9
  160. package/dist/ui/tooltip.js +13 -11
  161. package/package.json +1 -1
@@ -10,29 +10,32 @@ var o = ({ tabs: o, activeTabId: s, onTabClick: c, onClose: l, onMinimize: u, on
10
10
  return /* @__PURE__ */ a("button", {
11
11
  onClick: () => c(e.id),
12
12
  className: `flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-t transition-colors ${e.id === s ? "bg-bg-surface text-text-primary border-b-2 border-action-primary-bg" : "text-text-secondary hover:text-text-primary hover:bg-bg-surface-hover"}`,
13
- children: [t && /* @__PURE__ */ i(t, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ i("span", { children: e.title })]
13
+ children: [t && /* @__PURE__ */ i(t, { className: "size-3.5" }), /* @__PURE__ */ i("span", { children: e.title })]
14
14
  }, e.id);
15
15
  })
16
16
  }), /* @__PURE__ */ a("div", {
17
17
  className: "flex items-center gap-0.5",
18
18
  children: [
19
19
  u && /* @__PURE__ */ i("button", {
20
+ type: "button",
20
21
  onClick: u,
21
22
  className: "p-1 rounded text-text-tertiary hover:text-text-primary hover:bg-bg-surface-hover transition-colors",
22
23
  "aria-label": "Minimize panel",
23
- children: /* @__PURE__ */ i(n, { className: "w-3.5 h-3.5" })
24
+ children: /* @__PURE__ */ i(n, { className: "size-3.5" })
24
25
  }),
25
26
  d && /* @__PURE__ */ i("button", {
27
+ type: "button",
26
28
  onClick: d,
27
29
  className: "p-1 rounded text-text-tertiary hover:text-text-primary hover:bg-bg-surface-hover transition-colors",
28
30
  "aria-label": f ? "Restore panel" : "Maximize panel",
29
- children: i(f ? t : e, { className: "w-3.5 h-3.5" })
31
+ children: i(f ? t : e, { className: "size-3.5" })
30
32
  }),
31
33
  /* @__PURE__ */ i("button", {
34
+ type: "button",
32
35
  onClick: l,
33
36
  className: "p-1 rounded text-text-tertiary hover:text-text-primary hover:bg-bg-surface-hover transition-colors",
34
37
  "aria-label": "Close panel",
35
- children: /* @__PURE__ */ i(r, { className: "w-3.5 h-3.5" })
38
+ children: /* @__PURE__ */ i(r, { className: "size-3.5" })
36
39
  })
37
40
  ]
38
41
  })]
@@ -57,7 +57,7 @@ var o = ({ targetId: o, children: s, className: c }) => {
57
57
  role: "menuitem",
58
58
  children: [/* @__PURE__ */ a("span", {
59
59
  className: "flex items-center gap-2",
60
- children: [t ? /* @__PURE__ */ i(t, { className: "h-4 w-4" }) : null, /* @__PURE__ */ i("span", { children: e.label })]
60
+ children: [t ? /* @__PURE__ */ i(t, { className: "size-4" }) : null, /* @__PURE__ */ i("span", { children: e.label })]
61
61
  }), e.shortcut ? /* @__PURE__ */ i("span", {
62
62
  className: "text-xs text-text-secondary",
63
63
  children: e.shortcut
@@ -24,10 +24,10 @@ var o = ({ open: o, onOpenChange: s, products: c, currentProductId: l, onProduct
24
24
  className: `w-full flex items-center gap-4 px-4 py-3.5 text-body-sm transition-colors ${e.id === l ? "bg-action-ghost-bg-hover" : "hover:bg-action-ghost-bg-hover"}`,
25
25
  children: [
26
26
  e.icon ? /* @__PURE__ */ i("div", {
27
- className: "w-10 h-10 rounded-lg bg-action-primary-bg/10 flex items-center justify-center flex-shrink-0",
27
+ className: "size-10 rounded-lg bg-action-primary-bg/10 flex items-center justify-center flex-shrink-0",
28
28
  children: e.icon
29
29
  }) : /* @__PURE__ */ i("div", {
30
- className: "w-10 h-10 rounded-lg bg-action-primary-bg flex items-center justify-center flex-shrink-0",
30
+ className: "size-10 rounded-lg bg-action-primary-bg flex items-center justify-center flex-shrink-0",
31
31
  children: /* @__PURE__ */ i("span", {
32
32
  className: "text-action-primary-text font-bold text-sm",
33
33
  children: e.name.substring(0, 2).toUpperCase()
@@ -44,7 +44,7 @@ var o = ({ open: o, onOpenChange: s, products: c, currentProductId: l, onProduct
44
44
  })]
45
45
  }),
46
46
  e.id === l && /* @__PURE__ */ i("svg", {
47
- className: "w-5 h-5 text-action-primary-bg flex-shrink-0",
47
+ className: "size-5 text-action-primary-bg flex-shrink-0",
48
48
  fill: "currentColor",
49
49
  viewBox: "0 0 20 20",
50
50
  children: /* @__PURE__ */ i("path", {
@@ -54,7 +54,7 @@ var o = ({ open: o, onOpenChange: s, products: c, currentProductId: l, onProduct
54
54
  })
55
55
  }),
56
56
  e.url && e.id !== l && /* @__PURE__ */ i("svg", {
57
- className: "w-4 h-4 text-text-tertiary flex-shrink-0",
57
+ className: "size-4 text-text-tertiary flex-shrink-0",
58
58
  fill: "none",
59
59
  stroke: "currentColor",
60
60
  viewBox: "0 0 24 24",
@@ -20,7 +20,7 @@ function c({ logo: c, appName: l, groupOrder: u, groupLabels: d, mobileActions:
20
20
  },
21
21
  "aria-label": m,
22
22
  children: [/* @__PURE__ */ i("div", {
23
- className: "w-8 h-8 bg-action-primary-bg rounded-md flex items-center justify-center flex-shrink-0",
23
+ className: "size-8 bg-action-primary-bg rounded-md flex items-center justify-center flex-shrink-0",
24
24
  children: /* @__PURE__ */ i("span", {
25
25
  className: "text-action-primary-text font-bold text-sm",
26
26
  children: c
@@ -22,7 +22,7 @@ var a = ({ products: a, currentProductId: o, onProductChange: s, compact: c = !1
22
22
  "aria-expanded": l,
23
23
  children: [
24
24
  /* @__PURE__ */ r("div", {
25
- className: "w-6 h-6 rounded flex items-center justify-center flex-shrink-0 text-white font-semibold text-xs",
25
+ className: "size-6 rounded flex items-center justify-center flex-shrink-0 text-white font-semibold text-xs",
26
26
  style: { backgroundColor: f?.color || "#3b82f6" },
27
27
  children: f?.icon || f?.name.charAt(0)
28
28
  }),
@@ -61,7 +61,7 @@ var a = ({ products: a, currentProductId: o, onProductChange: s, compact: c = !1
61
61
  className: `w-full flex items-center gap-3 px-4 py-2.5 text-body-sm transition-colors ${e.comingSoon ? "text-text-tertiary cursor-not-allowed opacity-60" : e.id === o ? "bg-action-ghost-bg-hover text-text-primary font-medium" : "text-text-primary hover:bg-action-ghost-bg-hover"}`,
62
62
  children: [
63
63
  /* @__PURE__ */ r("div", {
64
- className: "w-8 h-8 rounded flex items-center justify-center flex-shrink-0 text-white font-semibold text-sm",
64
+ className: "size-8 rounded flex items-center justify-center flex-shrink-0 text-white font-semibold text-sm",
65
65
  style: { backgroundColor: e.color || "#3b82f6" },
66
66
  children: e.icon || e.name.charAt(0)
67
67
  }),
@@ -73,7 +73,7 @@ var a = ({ products: a, currentProductId: o, onProductChange: s, compact: c = !1
73
73
  className: "text-body-xs px-2 py-0.5 rounded-full bg-bg-sunken text-text-secondary border border-border-subtle",
74
74
  children: "Coming soon"
75
75
  }) : e.id === o && /* @__PURE__ */ r("svg", {
76
- className: "w-5 h-5 text-action-primary-text",
76
+ className: "size-5 text-action-primary-text",
77
77
  fill: "currentColor",
78
78
  viewBox: "0 0 20 20",
79
79
  children: /* @__PURE__ */ r("path", {
@@ -20,7 +20,7 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
20
20
  "aria-expanded": h,
21
21
  children: [
22
22
  /* @__PURE__ */ i("div", {
23
- className: "w-8 h-8 rounded-full bg-action-primary-bg flex items-center justify-center flex-shrink-0",
23
+ className: "size-8 rounded-full bg-action-primary-bg flex items-center justify-center flex-shrink-0",
24
24
  children: o.avatar ? /* @__PURE__ */ i("img", {
25
25
  src: o.avatar,
26
26
  alt: `${o.firstName} ${o.lastName}`,
@@ -39,7 +39,7 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
39
39
  ]
40
40
  }),
41
41
  !m && y && /* @__PURE__ */ i("span", {
42
- className: "text-xs bg-action-primary-bg text-action-primary-text rounded-full w-5 h-5 flex items-center justify-center font-semibold",
42
+ className: "text-xs bg-action-primary-bg text-action-primary-text rounded-full size-5 flex items-center justify-center font-semibold",
43
43
  children: s.length
44
44
  }),
45
45
  !m && /* @__PURE__ */ i("svg", {
@@ -62,7 +62,7 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
62
62
  className: "px-6 py-4 text-center border-b border-border-subtle",
63
63
  children: [
64
64
  /* @__PURE__ */ i("div", {
65
- className: "w-20 h-20 mx-auto mb-3 rounded-full bg-action-primary-bg flex items-center justify-center",
65
+ className: "size-20 mx-auto mb-3 rounded-full bg-action-primary-bg flex items-center justify-center",
66
66
  children: o.avatar ? /* @__PURE__ */ i("img", {
67
67
  src: o.avatar,
68
68
  alt: o.firstName,
@@ -103,6 +103,7 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
103
103
  l && /* @__PURE__ */ i("div", {
104
104
  className: "px-4 py-2",
105
105
  children: /* @__PURE__ */ i("button", {
106
+ type: "button",
106
107
  onClick: () => {
107
108
  l(), g(!1);
108
109
  },
@@ -126,7 +127,7 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
126
127
  className: "flex items-center gap-3",
127
128
  children: [
128
129
  /* @__PURE__ */ i("div", {
129
- className: "w-10 h-10 rounded-full bg-action-primary-bg flex items-center justify-center flex-shrink-0",
130
+ className: "size-10 rounded-full bg-action-primary-bg flex items-center justify-center flex-shrink-0",
130
131
  children: e.avatar ? /* @__PURE__ */ i("img", {
131
132
  src: e.avatar,
132
133
  alt: e.name,
@@ -137,6 +138,7 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
137
138
  })
138
139
  }),
139
140
  /* @__PURE__ */ a("button", {
141
+ type: "button",
140
142
  onClick: () => {
141
143
  d && (d(e), g(!1));
142
144
  },
@@ -154,13 +156,14 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
154
156
  })]
155
157
  }),
156
158
  p && /* @__PURE__ */ i("button", {
159
+ type: "button",
157
160
  onClick: (t) => {
158
161
  t.stopPropagation(), p(e.id);
159
162
  },
160
- className: "w-6 h-6 flex items-center justify-center rounded-full hover:bg-status-error-bg/20 text-text-tertiary hover:text-status-error-text transition-colors opacity-0 group-hover:opacity-100",
163
+ className: "size-6 flex items-center justify-center rounded-full hover:bg-status-error-bg/20 text-text-tertiary hover:text-status-error-text transition-colors opacity-0 group-hover:opacity-100",
161
164
  "aria-label": "Remove account",
162
165
  children: /* @__PURE__ */ i("svg", {
163
- className: "w-4 h-4",
166
+ className: "size-4",
164
167
  fill: "none",
165
168
  stroke: "currentColor",
166
169
  viewBox: "0 0 24 24",
@@ -182,12 +185,13 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
182
185
  children: /* @__PURE__ */ a("div", {
183
186
  className: "grid grid-cols-2 gap-2",
184
187
  children: [f && /* @__PURE__ */ a("button", {
188
+ type: "button",
185
189
  onClick: () => {
186
190
  f(), g(!1);
187
191
  },
188
192
  className: "flex items-center justify-center gap-2 px-3 py-2.5 text-body-sm font-medium text-text-primary bg-action-ghost-bg hover:bg-action-ghost-bg-hover rounded-button border border-border-default transition-colors",
189
193
  children: [/* @__PURE__ */ i("svg", {
190
- className: "w-4 h-4",
194
+ className: "size-4",
191
195
  fill: "none",
192
196
  stroke: "currentColor",
193
197
  viewBox: "0 0 24 24",
@@ -199,12 +203,13 @@ var o = ({ user: o, accounts: s = [], activeAccountId: c, onViewProfile: l, onLo
199
203
  })
200
204
  }), /* @__PURE__ */ i("span", { children: "Add account" })]
201
205
  }), u && /* @__PURE__ */ a("button", {
206
+ type: "button",
202
207
  onClick: () => {
203
208
  u(), g(!1);
204
209
  },
205
210
  className: "flex items-center justify-center gap-2 px-3 py-2.5 text-body-sm font-medium text-text-primary bg-action-ghost-bg hover:bg-action-ghost-bg-hover rounded-button border border-border-default transition-colors",
206
211
  children: [/* @__PURE__ */ i("svg", {
207
- className: "w-4 h-4",
212
+ className: "size-4",
208
213
  fill: "none",
209
214
  stroke: "currentColor",
210
215
  viewBox: "0 0 24 24",
@@ -56,10 +56,11 @@ var s = ({ isOpen: s, onClose: c, shortcuts: l }) => {
56
56
  className: "text-text-secondary text-sm mt-1",
57
57
  children: "Quickly navigate and perform actions using your keyboard"
58
58
  })] }), /* @__PURE__ */ a("button", {
59
+ type: "button",
59
60
  onClick: c,
60
61
  className: "p-2 hover:bg-action-ghost-bg-hover rounded-button text-text-secondary transition-colors",
61
62
  "aria-label": "Close",
62
- children: /* @__PURE__ */ a(i, { className: "w-5 h-5" })
63
+ children: /* @__PURE__ */ a(i, { className: "size-5" })
63
64
  })]
64
65
  }),
65
66
  /* @__PURE__ */ a("div", {
@@ -1,153 +1,43 @@
1
1
  import { Tooltip as e, TooltipContent as t, TooltipProvider as n, TooltipTrigger as r } from "../ui/tooltip.js";
2
- import { useCallback as i, useEffect as a, useRef as o, useState as s } from "react";
3
- import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
2
+ import { NavItemRenderer as i } from "./sideNavigation/NavItemRenderer.js";
3
+ import { SidebarHeader as a } from "./sideNavigation/SidebarHeader.js";
4
+ import { MobileActionsBar as o } from "./sideNavigation/MobileActionsBar.js";
5
+ import { CollapseToggle as s } from "./sideNavigation/CollapseToggle.js";
6
+ import { useSideNavigationState as c } from "./sideNavigation/useSideNavigationState.js";
7
+ import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
4
8
  //#region src/chrome/SideNavigation.tsx
5
- function d(e, t, n = !1) {
6
- return e ? e === "/" ? t === "/" : n ? t === e : t === e || t.startsWith(`${e}/`) : !1;
7
- }
8
- function f(e, t) {
9
- return d(e.path, t, e.exact) || d(e.homePath, t, e.exact);
10
- }
11
- var p = (e, t) => f(e, t) ? !0 : e.children ? e.children.some((e) => p(e, t)) : !1, m = (e, t, n = []) => {
12
- for (let r of e) {
13
- if (r.children && r.children.length > 0) {
14
- let e = m(r.children, t, [...n, r.id]);
15
- if (e.size > 0 || r.children.some((e) => f(e, t))) return e.add(r.id), n.forEach((t) => e.add(t)), e;
16
- }
17
- if (f(r, t)) return new Set(n);
18
- }
19
- return /* @__PURE__ */ new Set();
20
- }, h = ({ item: e, depth: t, maxDepth: n, currentPath: r, expandedItems: i, toggleExpand: a, onItemClick: o, onToggleCollapse: s, collapsed: c }) => {
21
- let d = e.children && e.children.length > 0 && t < n, m = i.has(e.id), g = p(e, r), _ = f(e, r), v = t === 0 ? "w-icon-md h-icon-md" : "w-4 h-4";
22
- return /* @__PURE__ */ u("li", { children: [/* @__PURE__ */ l("div", {
23
- className: "relative",
24
- children: /* @__PURE__ */ u("button", {
25
- onClick: () => {
26
- if (c && t === 0 && d) {
27
- o(e.homePath || e.children?.[0]?.path || e.path);
28
- return;
29
- }
30
- d ? a(e.id) : (o(e.path), window.innerWidth < 768 && s && !c && s());
31
- },
32
- className: `
33
- w-full flex items-center gap-icon-gap ${t === 0 ? "py-2" : "py-1.5"} rounded-button
34
- transition-colors duration-200 ease-out
35
- active:scale-[0.98]
36
- ${c && t === 0 ? "md:px-2 md:justify-center" : "px-card-padding"}
37
- ${_ && !d ? "bg-action-primary-bg text-action-primary-text shadow-sm" : g && !m ? "bg-action-ghost-bg-hover text-text-primary" : "text-text-secondary hover:bg-action-ghost-bg-hover hover:text-text-primary"}
38
- `,
39
- "aria-label": e.label,
40
- children: [
41
- e.icon && /* @__PURE__ */ l("div", {
42
- className: `${v} flex-shrink-0 flex items-center justify-center [&>svg]:w-full [&>svg]:h-full [&>svg]:stroke-[1.75]`,
43
- children: typeof e.icon == "string" ? /* @__PURE__ */ l("svg", {
44
- className: "w-full h-full",
45
- fill: "none",
46
- stroke: "currentColor",
47
- viewBox: "0 0 24 24",
48
- children: /* @__PURE__ */ l("path", {
49
- strokeLinecap: "round",
50
- strokeLinejoin: "round",
51
- strokeWidth: 2,
52
- d: e.icon
53
- })
54
- }) : e.icon
55
- }),
56
- /* @__PURE__ */ l("span", {
57
- className: `text-body-sm font-medium flex-1 text-left ${c && t === 0 ? "md:hidden" : ""}`,
58
- children: e.label
59
- }),
60
- e.badge !== void 0 && e.badge > 0 && /* @__PURE__ */ l("span", {
61
- className: `text-xs bg-status-error-bg text-status-error-text px-2 py-0.5 rounded-pill ${c && t === 0 ? "md:hidden" : ""}`,
62
- children: e.badge
63
- }),
64
- d && !(c && t === 0) && /* @__PURE__ */ l("svg", {
65
- className: `w-4 h-4 transition-transform ${m ? "rotate-90" : ""}`,
66
- fill: "none",
67
- stroke: "currentColor",
68
- viewBox: "0 0 24 24",
69
- children: /* @__PURE__ */ l("path", {
70
- strokeLinecap: "round",
71
- strokeLinejoin: "round",
72
- strokeWidth: 2,
73
- d: "M9 5l7 7-7 7"
74
- })
75
- })
76
- ]
77
- })
78
- }), d && m && !c && /* @__PURE__ */ l("ul", {
79
- className: "mt-1 ml-6 space-y-1 border-l border-border-subtle pl-3 animate-in fade-in-0 slide-in-from-top-2 duration-200",
80
- children: e.children.map((e) => /* @__PURE__ */ l(h, {
81
- item: e,
82
- depth: t + 1,
83
- maxDepth: n,
84
- currentPath: r,
85
- expandedItems: i,
86
- toggleExpand: a,
87
- onItemClick: o,
88
- onToggleCollapse: s,
89
- collapsed: c
90
- }, e.id))
91
- })] });
92
- }, g = ({ items: d, currentPath: f, collapsed: p = !1, onItemClick: g, onToggleCollapse: _, collapseLabel: v = "Collapse", header: y, footer: b, mobileActions: x, groupOrder: S, groupLabels: C, maxDepth: w = 4 }) => {
93
- let [T, E] = s(/* @__PURE__ */ new Set()), D = o(p);
94
- a(() => {
95
- D.current = p;
96
- }, [p]), a(() => {
97
- let e = m(d, f);
98
- e.size > 0 && E((t) => {
99
- let n = new Set(t), r = !1;
100
- return e.forEach((e) => {
101
- n.has(e) || (n.add(e), r = !0);
102
- }), r ? n : t;
103
- });
104
- }, [f, d]), a(() => {
105
- if (typeof window > "u" || !_) return;
106
- let e = window.innerWidth < 768, t = () => {
107
- let t = window.innerWidth < 768;
108
- t && (!e || !D.current) && _(), e = t;
109
- };
110
- return t(), window.addEventListener("resize", t), () => {
111
- window.removeEventListener("resize", t);
112
- };
113
- }, [_]);
114
- let O = d.filter((e) => e.visible !== !1), k = (() => {
115
- if (p) return [{
9
+ var f = ({ items: f, currentPath: p, collapsed: m = !1, onItemClick: h, onToggleCollapse: g, collapseLabel: _ = "Collapse", header: v, footer: y, mobileActions: b, groupOrder: x, groupLabels: S, maxDepth: C = 4 }) => {
10
+ let { expandedItems: w, toggleExpand: T, collapseAll: E } = c({
11
+ items: f,
12
+ currentPath: p,
13
+ collapsed: m,
14
+ onToggleCollapse: g
15
+ }), D = f.filter((e) => e.visible !== !1), O = (() => {
16
+ if (m) return [{
116
17
  id: "__all__",
117
18
  label: null,
118
- items: O
19
+ items: D
119
20
  }];
120
21
  let e = /* @__PURE__ */ new Map();
121
- for (let t of O) {
22
+ for (let t of D) {
122
23
  let n = t.group ?? "__default__", r = e.get(n);
123
24
  r ? r.push(t) : e.set(n, [t]);
124
25
  }
125
- return [...S ?? [], ...Array.from(e.keys()).filter((e) => !(S ?? []).includes(e))].filter((t) => (e.get(t)?.length ?? 0) > 0).map((t) => ({
26
+ return [...x ?? [], ...Array.from(e.keys()).filter((e) => !(x ?? []).includes(e))].filter((t) => (e.get(t)?.length ?? 0) > 0).map((t) => ({
126
27
  id: t,
127
- label: t === "__default__" ? null : C?.[t] ?? t,
28
+ label: t === "__default__" ? null : S?.[t] ?? t,
128
29
  items: e.get(t) ?? []
129
30
  }));
130
- })(), A = i((e) => {
131
- E((t) => {
132
- let n = new Set(t);
133
- return n.has(e) ? n.delete(e) : n.add(e), n;
134
- });
135
- }, []);
136
- return a(() => {
137
- if (p) return;
138
- let e = (e) => {
139
- e.key === "Escape" && _ && _();
140
- };
141
- return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
142
- }, [p, _]), /* @__PURE__ */ u(c, { children: [!p && /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l("div", {
31
+ })();
32
+ return /* @__PURE__ */ d(l, { children: [!m && /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u("div", {
143
33
  className: "fixed inset-0 bg-bg-overlay z-[109] md:hidden",
144
34
  "aria-hidden": "true"
145
- }), /* @__PURE__ */ l("button", {
35
+ }), /* @__PURE__ */ u("button", {
146
36
  type: "button",
147
37
  className: "fixed inset-y-0 right-0 left-64 z-[112] md:hidden cursor-pointer",
148
- onClick: _,
38
+ onClick: g,
149
39
  "aria-label": "Close sidebar"
150
- })] }), /* @__PURE__ */ u("aside", {
40
+ })] }), /* @__PURE__ */ d("aside", {
151
41
  className: `
152
42
  bg-bg-surface border-r border-border-subtle
153
43
  transition-all duration-normal
@@ -157,27 +47,28 @@ var p = (e, t) => f(e, t) ? !0 : e.children ? e.children.some((e) => p(e, t)) :
157
47
  z-[110] md:z-auto
158
48
  md:h-full
159
49
  overflow-x-hidden
160
- ${p ? "-translate-x-full md:translate-x-0" : "translate-x-0"}
50
+ ${m ? "-translate-x-full md:translate-x-0" : "translate-x-0"}
161
51
  w-64 md:w-auto
162
- ${p ? "md:w-16" : "md:w-64"}
52
+ ${m ? "md:w-16" : "md:w-64"}
163
53
  `,
164
54
  style: {
165
55
  paddingTop: "env(safe-area-inset-top)",
166
56
  paddingBottom: "env(safe-area-inset-bottom)"
167
57
  },
168
58
  children: [
169
- !p && _ && /* @__PURE__ */ l("div", {
59
+ !m && g && /* @__PURE__ */ u("div", {
170
60
  className: "md:hidden flex justify-end px-2 pt-2",
171
- children: /* @__PURE__ */ l("button", {
172
- onClick: _,
61
+ children: /* @__PURE__ */ u("button", {
62
+ type: "button",
63
+ onClick: g,
173
64
  className: "p-2 rounded-button hover:bg-action-ghost-bg-hover text-text-secondary hover:text-text-primary transition-colors",
174
65
  "aria-label": "Close sidebar",
175
- children: /* @__PURE__ */ l("svg", {
176
- className: "w-5 h-5",
66
+ children: /* @__PURE__ */ u("svg", {
67
+ className: "size-5",
177
68
  fill: "none",
178
69
  stroke: "currentColor",
179
70
  viewBox: "0 0 24 24",
180
- children: /* @__PURE__ */ l("path", {
71
+ children: /* @__PURE__ */ u("path", {
181
72
  strokeLinecap: "round",
182
73
  strokeLinejoin: "round",
183
74
  strokeWidth: 2,
@@ -186,77 +77,57 @@ var p = (e, t) => f(e, t) ? !0 : e.children ? e.children.some((e) => p(e, t)) :
186
77
  })
187
78
  })
188
79
  }),
189
- y && /* @__PURE__ */ u("div", {
190
- className: `py-card-padding border-b border-border-subtle ${p ? "md:px-2" : "px-card-padding"} relative`,
191
- children: [/* @__PURE__ */ l("div", {
192
- className: T.size > 0 && !p ? "mr-8" : "",
193
- children: y
194
- }), !p && T.size > 0 && /* @__PURE__ */ l("button", {
195
- onClick: () => {
196
- E(/* @__PURE__ */ new Set());
197
- },
198
- className: "absolute top-1/2 -translate-y-1/2 right-3 p-1.5 rounded-button hover:bg-action-ghost-bg-hover text-text-secondary hover:text-text-primary transition-colors",
199
- title: "Collapse all",
200
- "aria-label": "Collapse all menu items",
201
- children: /* @__PURE__ */ l("svg", {
202
- className: "w-4 h-4",
203
- fill: "none",
204
- stroke: "currentColor",
205
- viewBox: "0 0 24 24",
206
- children: /* @__PURE__ */ l("path", {
207
- strokeLinecap: "round",
208
- strokeLinejoin: "round",
209
- strokeWidth: 2,
210
- d: "M5 15l7-7 7 7"
211
- })
212
- })
213
- })]
80
+ v && /* @__PURE__ */ u(a, {
81
+ header: v,
82
+ collapsed: m,
83
+ expandedCount: w.size,
84
+ onCollapseAll: E
214
85
  }),
215
- /* @__PURE__ */ l("nav", {
86
+ /* @__PURE__ */ u("nav", {
216
87
  className: "flex-1 min-h-0 py-card-padding overflow-y-auto overflow-x-hidden",
217
- children: /* @__PURE__ */ l(n, {
88
+ children: /* @__PURE__ */ u(n, {
218
89
  delayDuration: 300,
219
- children: /* @__PURE__ */ l("ul", {
90
+ children: /* @__PURE__ */ u("ul", {
220
91
  className: "space-y-list-gap",
221
- children: k.map((n, i) => /* @__PURE__ */ u("li", {
92
+ children: O.map((n, a) => /* @__PURE__ */ d("li", {
222
93
  className: "list-none",
223
94
  children: [
224
- i > 0 && !p && /* @__PURE__ */ l("div", { className: "my-2 border-t border-border-subtle" }),
225
- n.label && !p && /* @__PURE__ */ l("p", {
95
+ a > 0 && !m && /* @__PURE__ */ u("div", { className: "my-2 border-t border-border-subtle" }),
96
+ n.label && !m && /* @__PURE__ */ u("p", {
226
97
  className: "px-card-padding pb-1 text-xs font-semibold uppercase tracking-wider text-text-tertiary",
227
98
  children: n.label
228
99
  }),
229
- /* @__PURE__ */ l("ul", {
100
+ /* @__PURE__ */ u("ul", {
230
101
  className: "space-y-list-gap",
231
- children: n.items.map((n) => p ? /* @__PURE__ */ u(e, { children: [/* @__PURE__ */ l(r, {
102
+ children: n.items.map((n) => m ? /* @__PURE__ */ d(e, { children: [/* @__PURE__ */ u(r, {
232
103
  asChild: !0,
233
- children: /* @__PURE__ */ l(h, {
104
+ children: /* @__PURE__ */ u(i, {
234
105
  item: n,
235
106
  depth: 0,
236
- maxDepth: w,
237
- currentPath: f,
238
- expandedItems: T,
239
- toggleExpand: A,
240
- onItemClick: g,
241
- onToggleCollapse: _,
242
- collapsed: p
107
+ maxDepth: C,
108
+ currentPath: p,
109
+ expandedItems: w,
110
+ toggleExpand: T,
111
+ onItemClick: h,
112
+ onToggleCollapse: g,
113
+ collapsed: m
243
114
  })
244
- }), /* @__PURE__ */ u(t, {
115
+ }), /* @__PURE__ */ d(t, {
245
116
  side: "right",
246
- children: [/* @__PURE__ */ l("p", { children: n.label }), n.badge !== void 0 && n.badge > 0 && /* @__PURE__ */ l("span", {
117
+ children: [/* @__PURE__ */ u("p", { children: n.label }), n.badge !== void 0 && n.badge > 0 && /* @__PURE__ */ u("span", {
247
118
  className: "ml-2 text-xs bg-status-error-bg text-status-error-text px-2 py-0.5 rounded-pill",
248
119
  children: n.badge
249
120
  })]
250
- })] }, n.id) : /* @__PURE__ */ l(h, {
121
+ })] }, n.id) : /* @__PURE__ */ u(i, {
251
122
  item: n,
252
123
  depth: 0,
253
- maxDepth: w,
254
- currentPath: f,
255
- expandedItems: T,
256
- toggleExpand: A,
257
- onItemClick: g,
258
- onToggleCollapse: _,
259
- collapsed: p
124
+ maxDepth: C,
125
+ currentPath: p,
126
+ expandedItems: w,
127
+ toggleExpand: T,
128
+ onItemClick: h,
129
+ onToggleCollapse: g,
130
+ collapsed: m
260
131
  }, n.id))
261
132
  })
262
133
  ]
@@ -264,57 +135,22 @@ var p = (e, t) => f(e, t) ? !0 : e.children ? e.children.some((e) => p(e, t)) :
264
135
  })
265
136
  })
266
137
  }),
267
- b && /* @__PURE__ */ l("div", {
268
- className: `py-card-padding border-t border-border-subtle ${p ? "md:px-2" : "px-card-padding"}`,
269
- children: b
138
+ y && /* @__PURE__ */ u("div", {
139
+ className: `py-card-padding border-t border-border-subtle ${m ? "md:px-2" : "px-card-padding"}`,
140
+ children: y
270
141
  }),
271
- x && x.length > 0 && /* @__PURE__ */ u("div", {
272
- className: "md:hidden py-4 px-4 border-t border-border-subtle bg-bg-canvas/50",
273
- children: [/* @__PURE__ */ l("p", {
274
- className: "text-caption text-text-tertiary mb-3 font-medium uppercase tracking-wider",
275
- children: "Quick Actions"
276
- }), /* @__PURE__ */ l("div", {
277
- className: "flex items-center justify-center gap-3",
278
- children: x.map((e) => /* @__PURE__ */ l("button", {
279
- onClick: () => {
280
- e.onClick(), e.closeSidebar !== !1 && _ && !p && _();
281
- },
282
- className: `flex items-center justify-center w-12 h-12 rounded-xl text-body-sm font-medium transition-all ${e.isToggle && e.isActive ? "bg-action-primary-bg text-action-primary-text shadow-sm" : "bg-bg-surface text-text-primary hover:bg-action-ghost-bg-hover border border-border-subtle hover:border-border-default active:scale-95"}`,
283
- "aria-label": e.label,
284
- title: e.label,
285
- children: /* @__PURE__ */ l("span", {
286
- className: "w-5 h-5",
287
- children: e.icon
288
- })
289
- }, e.id))
290
- })]
142
+ b && b.length > 0 && /* @__PURE__ */ u(o, {
143
+ actions: b,
144
+ collapsed: m,
145
+ onToggleCollapse: g
291
146
  }),
292
- _ && /* @__PURE__ */ l("div", {
293
- className: `hidden md:block py-4 border-t border-border-subtle ${p ? "px-2" : "px-card-padding"}`,
294
- children: /* @__PURE__ */ u("button", {
295
- onClick: _,
296
- className: `w-full flex items-center gap-icon-gap py-2 rounded-button text-text-secondary hover:bg-action-ghost-bg-hover hover:text-text-primary transition-colors ${p ? "justify-center px-2" : "px-card-padding"}`,
297
- "aria-label": p ? "Expand sidebar" : "Collapse sidebar",
298
- title: p ? "Expand sidebar" : "Collapse sidebar",
299
- children: [/* @__PURE__ */ l("svg", {
300
- className: `w-icon-md h-icon-md transition-transform ${p ? "rotate-180" : ""}`,
301
- fill: "none",
302
- stroke: "currentColor",
303
- viewBox: "0 0 24 24",
304
- children: /* @__PURE__ */ l("path", {
305
- strokeLinecap: "round",
306
- strokeLinejoin: "round",
307
- strokeWidth: 2,
308
- d: "M15 19l-7-7 7-7"
309
- })
310
- }), !p && /* @__PURE__ */ l("span", {
311
- className: "text-body-sm font-medium",
312
- children: v
313
- })]
314
- })
147
+ g && /* @__PURE__ */ u(s, {
148
+ collapsed: m,
149
+ collapseLabel: _,
150
+ onToggleCollapse: g
315
151
  })
316
152
  ]
317
153
  })] });
318
154
  };
319
155
  //#endregion
320
- export { g as SideNavigation };
156
+ export { f as SideNavigation };
@@ -26,6 +26,7 @@ var a = ({ sections: a, isCollapsed: o = !1, onToggleCollapse: s, header: c, foo
26
26
  children: [!o && /* @__PURE__ */ r("div", {
27
27
  className: "px-card-padding mb-2",
28
28
  children: t.collapsible ? /* @__PURE__ */ i("button", {
29
+ type: "button",
29
30
  onClick: () => h(t.title),
30
31
  className: "flex items-center justify-between w-full text-text-tertiary text-xs font-semibold uppercase tracking-wider hover:text-text-secondary transition-colors",
31
32
  "aria-expanded": !a,