@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
@@ -1,483 +1,108 @@
1
1
  import { cn as e } from "../utils/cn.js";
2
2
  import "../utils/index.js";
3
- import { useCallback as t, useEffect as n, useMemo as r, useState as i } from "react";
4
- import { ChevronDown as ee, ChevronUp as te, Clock as ne, ExternalLink as re, Loader2 as ie, Search as ae, SlidersHorizontal as oe, X as se } from "lucide-react";
5
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
3
+ import { debounce as t, isSearchResults as n } from "./globalSearch/utils.js";
4
+ import { SearchInput as r } from "./globalSearch/SearchInput.js";
5
+ import { CategoryTabs as i } from "./globalSearch/CategoryTabs.js";
6
+ import { SearchModeBar as a } from "./globalSearch/SearchModeBar.js";
7
+ import { AdvancedFiltersPanel as o } from "./globalSearch/AdvancedFiltersPanel.js";
8
+ import { ResultsList as s } from "./globalSearch/ResultsList.js";
9
+ import { useAdvancedFilters as c } from "./globalSearch/useAdvancedFilters.js";
10
+ import { useCallback as l, useEffect as u, useMemo as d, useState as f } from "react";
11
+ import { ExternalLink as p } from "lucide-react";
12
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
6
13
  //#region src/chrome/GlobalSearch.tsx
7
- function ce(e, t) {
8
- let n;
9
- return (...r) => {
10
- n !== void 0 && clearTimeout(n), n = setTimeout(() => {
11
- e(...r);
12
- }, t);
13
- };
14
- }
15
- function s(e) {
16
- return e.split(",").map((e) => e.trim()).filter(Boolean);
17
- }
18
- function c(e) {
19
- if (typeof e != "object" || !e) return !1;
20
- let t = e;
21
- return typeof t.id == "string" && typeof t.title == "string" && typeof t.category == "string" && typeof t.href == "string" && (t.description === void 0 || typeof t.description == "string");
22
- }
23
- function le(e) {
24
- return Array.isArray(e) && e.every(c);
25
- }
26
- function l({ open: c, onClose: l, categories: ue = [], placeholder: de = "Search everything...", recentSearches: fe = [], onSearch: pe, onSelect: me, onViewAllResults: he, className: ge }) {
27
- let [u, d] = i(""), [f, p] = i(void 0), [m, h] = i([]), [g, _] = i(!1), [v, y] = i(null), [b, _e] = i(!1), [x, S] = i("PARTIAL"), [C, w] = i("SCORE_DESC"), [T, E] = i(""), [D, O] = i(""), [k, A] = i(""), [j, M] = i(""), [N, P] = i(""), [F, I] = i(""), [L, R] = i(""), [z, B] = i(""), [V, H] = i(""), [U, W] = i(""), [G, K] = i(""), [q, J] = i(""), [Y, X] = i(""), [Z, Q] = i("EQUALS"), $ = t(() => {
28
- let e = { searchMode: x };
29
- C !== "SCORE_DESC" && (e.sortBy = C);
30
- let t = s(T);
31
- t.length > 0 && (e.productSources = t), D.trim() && (e.projectId = D.trim()), k.trim() && (e.createdBy = k.trim()), j.trim() && (e.updatedBy = j.trim()), (N || F) && (e.dateRange = {}, N && (e.dateRange.from = new Date(N).toISOString()), F && (e.dateRange.to = new Date(F).toISOString())), (L || z) && (e.updatedDateRange = {}, L && (e.updatedDateRange.from = new Date(L).toISOString()), z && (e.updatedDateRange.to = new Date(z).toISOString()));
32
- let n = s(U), r = s(V), i = s(G);
33
- return (n.length > 0 || r.length > 0 || i.length > 0) && (e.tagFilter = {
34
- tagIds: n.length > 0 ? n : void 0,
35
- tagKeys: r.length > 0 ? r : void 0,
36
- hierarchyPaths: i.length > 0 ? i : void 0
37
- }), q.trim() && Y.trim() && (e.metadataConditions = [{
38
- key: q.trim(),
39
- value: Y.trim(),
40
- operator: Z
41
- }]), e;
42
- }, [
43
- k,
44
- N,
45
- F,
46
- q,
47
- Z,
48
- Y,
49
- T,
50
- D,
51
- x,
52
- C,
53
- U,
54
- V,
55
- G,
56
- j,
57
- L,
58
- z
59
- ]);
60
- n(() => {
61
- c || (d(""), p(void 0), h([]), y(null), _e(!1), S("PARTIAL"), w("SCORE_DESC"), E(""), O(""), A(""), M(""), P(""), I(""), R(""), B(""), H(""), W(""), K(""), J(""), X(""), Q("EQUALS"));
62
- }, [c]), n(() => {
63
- if (!c) return;
14
+ function g({ open: g, onClose: _, categories: v = [], placeholder: y = "Search everything...", recentSearches: b = [], onSearch: x, onSelect: S, onViewAllResults: C, className: w }) {
15
+ let [T, E] = f(""), [D, O] = f(void 0), [k, A] = f([]), [j, M] = f(!1), [N, P] = f(null), [F, I] = f(!1), L = c(), { buildFilters: R, reset: z, searchMode: B, setSearchMode: V } = L;
16
+ u(() => {
17
+ g || (E(""), O(void 0), A([]), P(null), I(!1), z());
18
+ }, [g, z]), u(() => {
19
+ if (!g) return;
64
20
  let e = (e) => {
65
- e.key === "Escape" && (e.preventDefault(), l());
21
+ e.key === "Escape" && (e.preventDefault(), _());
66
22
  };
67
23
  return document.addEventListener("keydown", e), () => {
68
24
  document.removeEventListener("keydown", e);
69
25
  };
70
- }, [c, l]);
71
- let ve = r(() => ce(async (e, t, n) => {
26
+ }, [g, _]);
27
+ let H = d(() => t(async (e, t, r) => {
72
28
  if (!e.trim()) {
73
- h([]), y(null);
29
+ A([]), P(null);
74
30
  return;
75
31
  }
76
- _(!0), y(null);
32
+ M(!0), P(null);
77
33
  try {
78
- let r = await pe(e, t, n);
79
- if (!le(r)) throw TypeError("Invalid search results format");
80
- h(r);
34
+ let i = await x(e, t, r);
35
+ if (!n(i)) throw TypeError("Invalid search results format");
36
+ A(i);
81
37
  } catch (e) {
82
- y(e instanceof Error ? e.message : "Search failed"), h([]), console.error("Search error:", e);
38
+ P(e instanceof Error ? e.message : "Search failed"), A([]), console.error("Search error:", e);
83
39
  } finally {
84
- _(!1);
40
+ M(!1);
85
41
  }
86
- }, 300), [pe]);
87
- n(() => {
88
- ve(u, f, $());
42
+ }, 300), [x]);
43
+ u(() => {
44
+ H(T, D, R());
89
45
  }, [
90
- u,
91
- f,
92
- ve,
93
- $
46
+ T,
47
+ D,
48
+ H,
49
+ R
94
50
  ]);
95
- let ye = r(() => m.reduce((e, t) => {
51
+ let U = d(() => k.reduce((e, t) => {
96
52
  let n = t.category;
97
53
  return e[n] || (e[n] = []), e[n].push(t), e;
98
- }, {}), [m]), be = t((e) => {
99
- me(e), l();
100
- }, [me, l]);
101
- return c ? /* @__PURE__ */ a("div", {
102
- className: e("fixed inset-0 z-[9999] flex items-center justify-center bg-bg-overlay backdrop-blur-md", "data-[state=open]:animate-in data-[state=closed]:animate-out", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", ge),
103
- onClick: l,
104
- "data-state": c ? "open" : "closed",
54
+ }, {}), [k]), W = l((e) => {
55
+ S(e), _();
56
+ }, [S, _]);
57
+ return g ? /* @__PURE__ */ m("div", {
58
+ className: e("fixed inset-0 z-[9999] flex items-center justify-center bg-bg-overlay backdrop-blur-md", "data-[state=open]:animate-in data-[state=closed]:animate-out", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", w),
59
+ onClick: _,
60
+ "data-state": g ? "open" : "closed",
105
61
  role: "dialog",
106
62
  "aria-modal": "true",
107
- children: /* @__PURE__ */ a("div", {
63
+ children: /* @__PURE__ */ m("div", {
108
64
  className: "w-full max-w-lg mx-4 max-h-[85dvh] overflow-hidden",
109
65
  onClick: (e) => e.stopPropagation(),
110
- children: /* @__PURE__ */ o("div", {
66
+ children: /* @__PURE__ */ h("div", {
111
67
  className: "overflow-hidden rounded-xl border-2 border-border/50 bg-background shadow-2xl",
112
68
  children: [
113
- /* @__PURE__ */ o("div", {
114
- className: "flex items-center border-b px-3",
115
- children: [
116
- /* @__PURE__ */ a(ae, { className: "h-4 w-4 mr-2 flex-shrink-0 opacity-50" }),
117
- /* @__PURE__ */ a("input", {
118
- type: "text",
119
- placeholder: de,
120
- value: u,
121
- onChange: (e) => d(e.target.value),
122
- className: "flex-1 bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground",
123
- autoFocus: !0
124
- }),
125
- u && /* @__PURE__ */ a("button", {
126
- onClick: () => d(""),
127
- className: "ml-2 rounded-sm opacity-70 hover:opacity-100",
128
- "aria-label": "Clear search",
129
- children: /* @__PURE__ */ a(se, { className: "h-4 w-4" })
130
- })
131
- ]
132
- }),
133
- ue.length > 0 && /* @__PURE__ */ o("div", {
134
- className: "flex items-center gap-1 p-2 border-b overflow-x-auto scrollbar-hide scroll-smooth snap-x snap-mandatory",
135
- children: [/* @__PURE__ */ a("button", {
136
- onClick: () => p(void 0),
137
- className: e("px-3 py-1.5 text-xs rounded-md transition-colors whitespace-nowrap flex-shrink-0 snap-start", f === void 0 ? "bg-primary text-primary-foreground" : "bg-muted hover:bg-muted/80"),
138
- children: "All"
139
- }), ue.map((t) => {
140
- let n = t.icon;
141
- return /* @__PURE__ */ o("button", {
142
- onClick: () => p(t.name),
143
- className: e("px-3 py-1.5 text-xs rounded-md transition-colors whitespace-nowrap flex-shrink-0 flex items-center gap-1.5 snap-start", f === t.name ? "bg-primary text-primary-foreground" : "bg-muted hover:bg-muted/80"),
144
- children: [/* @__PURE__ */ a(n, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ a("span", {
145
- className: "hidden xs:inline",
146
- children: t.label
147
- })]
148
- }, t.name);
149
- })]
69
+ /* @__PURE__ */ m(r, {
70
+ value: T,
71
+ placeholder: y,
72
+ onChange: E,
73
+ onClear: () => E("")
150
74
  }),
151
- /* @__PURE__ */ o("div", {
152
- className: "flex items-center justify-between px-3 py-1.5 border-b",
153
- children: [/* @__PURE__ */ a("div", {
154
- className: "flex items-center gap-1",
155
- children: [
156
- "PARTIAL",
157
- "FULLTEXT",
158
- "EXACT"
159
- ].map((t) => /* @__PURE__ */ a("button", {
160
- onClick: () => S(t),
161
- className: e("px-2 py-1 text-[10px] font-medium rounded transition-colors", x === t ? "bg-primary text-primary-foreground" : "bg-muted/60 text-muted-foreground hover:bg-muted"),
162
- title: t === "PARTIAL" ? "Autocomplete — matches prefixes and substrings" : t === "FULLTEXT" ? "Full-text — BM25 word matching with stemming" : "Exact — all search terms must appear",
163
- children: t === "PARTIAL" ? "Partial" : t === "FULLTEXT" ? "Fulltext" : "Exact"
164
- }, t))
165
- }), /* @__PURE__ */ o("button", {
166
- onClick: () => _e((e) => !e),
167
- className: "flex items-center gap-1 px-2 py-1 text-[10px] font-medium text-muted-foreground rounded hover:bg-muted transition-colors",
168
- "aria-expanded": b,
169
- children: [
170
- /* @__PURE__ */ a(oe, { className: "h-3 w-3" }),
171
- "Filters",
172
- a(b ? te : ee, { className: "h-3 w-3" })
173
- ]
174
- })]
75
+ /* @__PURE__ */ m(i, {
76
+ categories: v,
77
+ selectedCategory: D,
78
+ onSelect: O
175
79
  }),
176
- b && /* @__PURE__ */ o("div", {
177
- className: "px-3 py-2 border-b space-y-2 bg-muted/30 max-h-64 overflow-y-auto",
178
- children: [
179
- /* @__PURE__ */ o("div", {
180
- className: "flex items-center gap-2",
181
- children: [/* @__PURE__ */ a("label", {
182
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
183
- children: "Sort by"
184
- }), /* @__PURE__ */ o("select", {
185
- value: C,
186
- onChange: (e) => w(e.target.value),
187
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none",
188
- children: [
189
- /* @__PURE__ */ a("option", {
190
- value: "SCORE_DESC",
191
- children: "Relevance"
192
- }),
193
- /* @__PURE__ */ a("option", {
194
- value: "CREATED_DESC",
195
- children: "Newest first"
196
- }),
197
- /* @__PURE__ */ a("option", {
198
- value: "CREATED_ASC",
199
- children: "Oldest first"
200
- }),
201
- /* @__PURE__ */ a("option", {
202
- value: "UPDATED_DESC",
203
- children: "Recently updated"
204
- }),
205
- /* @__PURE__ */ a("option", {
206
- value: "UPDATED_ASC",
207
- children: "Least recently updated"
208
- }),
209
- /* @__PURE__ */ a("option", {
210
- value: "TITLE_ASC",
211
- children: "Title A-Z"
212
- }),
213
- /* @__PURE__ */ a("option", {
214
- value: "TITLE_DESC",
215
- children: "Title Z-A"
216
- })
217
- ]
218
- })]
219
- }),
220
- /* @__PURE__ */ o("div", {
221
- className: "flex items-center gap-2",
222
- children: [/* @__PURE__ */ a("label", {
223
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
224
- children: "Products"
225
- }), /* @__PURE__ */ a("input", {
226
- "aria-label": "Product sources filter",
227
- type: "text",
228
- placeholder: "vibecontrols, wspace-tags",
229
- value: T,
230
- onChange: (e) => E(e.target.value),
231
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
232
- })]
233
- }),
234
- /* @__PURE__ */ o("div", {
235
- className: "flex items-center gap-2",
236
- children: [/* @__PURE__ */ a("label", {
237
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
238
- children: "Project"
239
- }), /* @__PURE__ */ a("input", {
240
- "aria-label": "Project ID filter",
241
- type: "text",
242
- placeholder: "Project ID",
243
- value: D,
244
- onChange: (e) => O(e.target.value),
245
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
246
- })]
247
- }),
248
- /* @__PURE__ */ o("div", {
249
- className: "flex items-center gap-2",
250
- children: [/* @__PURE__ */ a("label", {
251
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
252
- children: "Created by"
253
- }), /* @__PURE__ */ a("input", {
254
- type: "text",
255
- placeholder: "Actor ID",
256
- value: k,
257
- onChange: (e) => A(e.target.value),
258
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
259
- })]
260
- }),
261
- /* @__PURE__ */ o("div", {
262
- className: "flex items-center gap-2",
263
- children: [/* @__PURE__ */ a("label", {
264
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
265
- children: "Updated by"
266
- }), /* @__PURE__ */ a("input", {
267
- "aria-label": "Updated by filter",
268
- type: "text",
269
- placeholder: "Actor ID",
270
- value: j,
271
- onChange: (e) => M(e.target.value),
272
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
273
- })]
274
- }),
275
- /* @__PURE__ */ o("div", {
276
- className: "flex items-center gap-2",
277
- children: [/* @__PURE__ */ a("label", {
278
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
279
- children: "Date from"
280
- }), /* @__PURE__ */ a("input", {
281
- type: "date",
282
- value: N,
283
- onChange: (e) => P(e.target.value),
284
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none"
285
- })]
286
- }),
287
- /* @__PURE__ */ o("div", {
288
- className: "flex items-center gap-2",
289
- children: [/* @__PURE__ */ a("label", {
290
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
291
- children: "Date to"
292
- }), /* @__PURE__ */ a("input", {
293
- type: "date",
294
- value: F,
295
- onChange: (e) => I(e.target.value),
296
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none"
297
- })]
298
- }),
299
- /* @__PURE__ */ o("div", {
300
- className: "flex items-center gap-2",
301
- children: [/* @__PURE__ */ a("label", {
302
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
303
- children: "Updated from"
304
- }), /* @__PURE__ */ a("input", {
305
- "aria-label": "Updated from date",
306
- type: "date",
307
- value: L,
308
- onChange: (e) => R(e.target.value),
309
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none"
310
- })]
311
- }),
312
- /* @__PURE__ */ o("div", {
313
- className: "flex items-center gap-2",
314
- children: [/* @__PURE__ */ a("label", {
315
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
316
- children: "Updated to"
317
- }), /* @__PURE__ */ a("input", {
318
- "aria-label": "Updated to date",
319
- type: "date",
320
- value: z,
321
- onChange: (e) => B(e.target.value),
322
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none"
323
- })]
324
- }),
325
- /* @__PURE__ */ o("div", {
326
- className: "flex items-center gap-2",
327
- children: [/* @__PURE__ */ a("label", {
328
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
329
- children: "Tag keys"
330
- }), /* @__PURE__ */ a("input", {
331
- "aria-label": "Tag keys filter",
332
- type: "text",
333
- placeholder: "search, team/platform",
334
- value: V,
335
- onChange: (e) => H(e.target.value),
336
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
337
- })]
338
- }),
339
- /* @__PURE__ */ o("div", {
340
- className: "flex items-center gap-2",
341
- children: [/* @__PURE__ */ a("label", {
342
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
343
- children: "Tag IDs"
344
- }), /* @__PURE__ */ a("input", {
345
- "aria-label": "Tag IDs filter",
346
- type: "text",
347
- placeholder: "Comma-separated IDs",
348
- value: U,
349
- onChange: (e) => W(e.target.value),
350
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
351
- })]
352
- }),
353
- /* @__PURE__ */ o("div", {
354
- className: "flex items-center gap-2",
355
- children: [/* @__PURE__ */ a("label", {
356
- className: "text-[10px] font-medium text-muted-foreground w-16 flex-shrink-0",
357
- children: "Tag paths"
358
- }), /* @__PURE__ */ a("input", {
359
- "aria-label": "Tag hierarchy filter",
360
- type: "text",
361
- placeholder: "team/engineering",
362
- value: G,
363
- onChange: (e) => K(e.target.value),
364
- className: "flex-1 h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
365
- })]
366
- }),
367
- /* @__PURE__ */ o("div", {
368
- className: "grid grid-cols-[1fr_auto_1fr] gap-2 items-center",
369
- children: [
370
- /* @__PURE__ */ a("input", {
371
- "aria-label": "Metadata key filter",
372
- type: "text",
373
- placeholder: "metadata.path",
374
- value: q,
375
- onChange: (e) => J(e.target.value),
376
- className: "h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
377
- }),
378
- /* @__PURE__ */ o("select", {
379
- "aria-label": "Metadata operator filter",
380
- value: Z,
381
- onChange: (e) => Q(e.target.value),
382
- className: "h-7 text-xs rounded border border-border bg-background px-2 outline-none",
383
- children: [
384
- /* @__PURE__ */ a("option", {
385
- value: "EQUALS",
386
- children: "="
387
- }),
388
- /* @__PURE__ */ a("option", {
389
- value: "NOT_EQUALS",
390
- children: "≠"
391
- }),
392
- /* @__PURE__ */ a("option", {
393
- value: "CONTAINS",
394
- children: "contains"
395
- }),
396
- /* @__PURE__ */ a("option", {
397
- value: "STARTS_WITH",
398
- children: "starts"
399
- })
400
- ]
401
- }),
402
- /* @__PURE__ */ a("input", {
403
- "aria-label": "Metadata value filter",
404
- type: "text",
405
- placeholder: "Value",
406
- value: Y,
407
- onChange: (e) => X(e.target.value),
408
- className: "h-7 text-xs rounded border border-border bg-background px-2 outline-none placeholder:text-muted-foreground"
409
- })
410
- ]
411
- }),
412
- /* @__PURE__ */ a("div", {
413
- className: "flex justify-end",
414
- children: /* @__PURE__ */ a("button", {
415
- onClick: () => {
416
- S("PARTIAL"), w("SCORE_DESC"), E(""), O(""), A(""), M(""), P(""), I(""), R(""), B(""), H(""), W(""), K(""), J(""), X(""), Q("EQUALS");
417
- },
418
- className: "text-[10px] text-muted-foreground hover:text-foreground transition-colors",
419
- children: "Clear filters"
420
- })
421
- })
422
- ]
80
+ /* @__PURE__ */ m(a, {
81
+ searchMode: B,
82
+ onSearchModeChange: V,
83
+ showAdvanced: F,
84
+ onToggleAdvanced: () => I((e) => !e)
423
85
  }),
424
- /* @__PURE__ */ o("div", {
425
- className: "max-h-[60dvh] overflow-y-auto p-2",
426
- children: [
427
- g && /* @__PURE__ */ a("div", {
428
- className: "flex items-center justify-center py-6",
429
- children: /* @__PURE__ */ a(ie, { className: "h-4 w-4 animate-spin" })
430
- }),
431
- v && /* @__PURE__ */ a("div", {
432
- className: "py-6 text-center text-sm text-destructive",
433
- children: v
434
- }),
435
- !g && !v && !u && fe.length > 0 && /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("div", {
436
- className: "px-2 py-1.5 text-xs font-medium text-muted-foreground",
437
- children: "Recent Searches"
438
- }), fe.map((e, t) => /* @__PURE__ */ o("button", {
439
- onClick: () => d(e),
440
- className: "w-full flex items-center gap-2 px-2 py-2 text-sm rounded-md hover:bg-accent transition-colors text-left",
441
- children: [/* @__PURE__ */ a(ne, { className: "h-4 w-4 opacity-50" }), e]
442
- }, t))] }),
443
- !g && !v && u && m.length === 0 && /* @__PURE__ */ o("div", {
444
- className: "py-6 text-center text-sm text-muted-foreground",
445
- children: [
446
- "No results found for \"",
447
- u,
448
- "\""
449
- ]
450
- }),
451
- !g && !v && Object.entries(ye).map(([e, t]) => /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("div", {
452
- className: "px-2 py-1.5 text-xs font-medium text-muted-foreground",
453
- children: e
454
- }), t.map((e) => {
455
- let t = e.icon;
456
- return /* @__PURE__ */ o("button", {
457
- onClick: () => be(e),
458
- className: "w-full flex items-start gap-2 px-2 py-2 text-sm rounded-md hover:bg-accent transition-colors text-left",
459
- children: [t && /* @__PURE__ */ a(t, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }), /* @__PURE__ */ o("div", {
460
- className: "flex-1 min-w-0",
461
- children: [/* @__PURE__ */ a("div", {
462
- className: "font-medium truncate",
463
- children: e.title
464
- }), e.description && /* @__PURE__ */ a("div", {
465
- className: "text-xs text-muted-foreground truncate",
466
- children: e.description
467
- })]
468
- })]
469
- }, e.id);
470
- })] }, e))
471
- ]
86
+ F && /* @__PURE__ */ m(o, { filters: L }),
87
+ /* @__PURE__ */ m(s, {
88
+ loading: j,
89
+ error: N,
90
+ query: T,
91
+ results: k,
92
+ groupedResults: U,
93
+ recentSearches: b,
94
+ onRecentSelect: E,
95
+ onResultSelect: W
472
96
  }),
473
- u && m.length > 0 && he && /* @__PURE__ */ a("div", {
97
+ T && k.length > 0 && C && /* @__PURE__ */ m("div", {
474
98
  className: "border-t p-2",
475
- children: /* @__PURE__ */ o("button", {
99
+ children: /* @__PURE__ */ h("button", {
100
+ type: "button",
476
101
  onClick: () => {
477
- he(u, $(), f), l();
102
+ C(T, R(), D), _();
478
103
  },
479
104
  className: "w-full flex items-center justify-center gap-2 py-2 text-sm text-primary hover:bg-accent rounded-md transition-colors",
480
- children: [/* @__PURE__ */ a(re, { className: "h-4 w-4" }), "View all results"]
105
+ children: [/* @__PURE__ */ m(p, { className: "size-4" }), "View all results"]
481
106
  })
482
107
  })
483
108
  ]
@@ -486,4 +111,4 @@ function l({ open: c, onClose: l, categories: ue = [], placeholder: de = "Search
486
111
  }) : null;
487
112
  }
488
113
  //#endregion
489
- export { l as GlobalSearch };
114
+ export { g as GlobalSearch };
@@ -5,6 +5,7 @@ var n = ({ logo: n, appName: r, onLogoClick: i, onMenuToggle: a, onSearchClick:
5
5
  children: [/* @__PURE__ */ t("div", {
6
6
  className: "flex items-center gap-2 md:gap-control-gap",
7
7
  children: [a && /* @__PURE__ */ e("button", {
8
+ type: "button",
8
9
  onClick: a,
9
10
  className: "p-2 hover:bg-action-ghost-bg-hover rounded-button text-text-primary",
10
11
  "aria-label": "Toggle sidebar",
@@ -52,6 +53,7 @@ var n = ({ logo: n, appName: r, onLogoClick: i, onMenuToggle: a, onSearchClick:
52
53
  }),
53
54
  (_ || v || y || b) && /* @__PURE__ */ e("div", { className: "hidden md:block h-6 w-px bg-border-subtle" }),
54
55
  S && /* @__PURE__ */ e("button", {
56
+ type: "button",
55
57
  onClick: S,
56
58
  className: `p-2 hover:bg-action-ghost-bg-hover rounded-button text-text-primary ${C ? "hidden md:block" : ""}`,
57
59
  "aria-label": "Keyboard shortcuts",
@@ -70,6 +72,7 @@ var n = ({ logo: n, appName: r, onLogoClick: i, onMenuToggle: a, onSearchClick:
70
72
  })
71
73
  }),
72
74
  o && /* @__PURE__ */ e("button", {
75
+ type: "button",
73
76
  onClick: o,
74
77
  className: "p-2 hover:bg-action-ghost-bg-hover rounded-button text-text-primary",
75
78
  "aria-label": "Search",
@@ -89,6 +92,7 @@ var n = ({ logo: n, appName: r, onLogoClick: i, onMenuToggle: a, onSearchClick:
89
92
  }),
90
93
  g,
91
94
  d || (u ? /* @__PURE__ */ t("button", {
95
+ type: "button",
92
96
  onClick: u,
93
97
  className: "relative p-2 hover:bg-action-ghost-bg-hover rounded-button text-text-primary",
94
98
  "aria-label": "Notifications",
@@ -103,9 +107,10 @@ var n = ({ logo: n, appName: r, onLogoClick: i, onMenuToggle: a, onSearchClick:
103
107
  strokeWidth: 2,
104
108
  d: "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9"
105
109
  })
106
- }), l > 0 && /* @__PURE__ */ e("span", { className: "absolute top-1 right-1 w-2 h-2 bg-status-error-bg rounded-full border border-bg-elevated" })]
110
+ }), l > 0 && /* @__PURE__ */ e("span", { className: "absolute top-1 right-1 size-2 bg-status-error-bg rounded-full border border-bg-elevated" })]
107
111
  }) : null),
108
112
  p && /* @__PURE__ */ e("button", {
113
+ type: "button",
109
114
  onClick: p,
110
115
  className: `p-2 hover:bg-action-ghost-bg-hover rounded-button text-text-primary ${C ? "hidden md:block" : ""}`,
111
116
  "aria-label": "Toggle theme",
@@ -38,7 +38,7 @@ var o = ({ open: o, onOpenChange: s, languages: c, currentLanguage: l, onLanguag
38
38
  })]
39
39
  }),
40
40
  e.code === l && /* @__PURE__ */ i("svg", {
41
- className: "w-5 h-5 text-action-primary-bg flex-shrink-0",
41
+ className: "size-5 text-action-primary-bg flex-shrink-0",
42
42
  fill: "currentColor",
43
43
  viewBox: "0 0 20 20",
44
44
  children: /* @__PURE__ */ i("path", {
@@ -21,7 +21,7 @@ var o = ({ languages: o, currentLanguage: s, onLanguageChange: c, compact: l = !
21
21
  "aria-label": "Change language",
22
22
  "aria-expanded": u,
23
23
  children: l ? /* @__PURE__ */ i("svg", {
24
- className: "w-5 h-5 text-text-primary",
24
+ className: "size-5 text-text-primary",
25
25
  fill: "none",
26
26
  stroke: "currentColor",
27
27
  viewBox: "0 0 24 24",
@@ -75,7 +75,7 @@ var o = ({ languages: o, currentLanguage: s, onLanguageChange: c, compact: l = !
75
75
  })]
76
76
  }),
77
77
  e.code === s && /* @__PURE__ */ i("svg", {
78
- className: "w-5 h-5 text-action-primary-bg flex-shrink-0",
78
+ className: "size-5 text-action-primary-bg flex-shrink-0",
79
79
  fill: "currentColor",
80
80
  viewBox: "0 0 20 20",
81
81
  children: /* @__PURE__ */ i("path", {