@aicontextgateway/search-react 0.0.1
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.
- package/README.md +98 -0
- package/dist/aicontextgateway-search.iife.js +14 -0
- package/dist/search-react.css +2 -0
- package/dist/search-react.js +561 -0
- package/dist/search-react.umd.cjs +11 -0
- package/loader/loader.js +58 -0
- package/package.json +32 -0
- package/src/searchCore.js +269 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.pa-search{width:100%;font-family:var(--pa-search-font,system-ui, -apple-system, Segoe UI, Roboto, sans-serif);color:var(--pa-search-fg,#0f172a);position:relative}.pa-search-input{box-sizing:border-box;width:100%;color:inherit;background:var(--pa-search-input-bg,#fff);border:1px solid var(--pa-search-border,#cbd5e1);border-radius:var(--pa-search-radius,.6rem);outline:none;padding:.6rem .85rem;font-size:.95rem}.pa-search-input:focus{border-color:var(--pa-search-accent,#7c3aed);box-shadow:0 0 0 3px var(--pa-search-accent-soft,#7c3aed2e)}.pa-search-panel{z-index:50;background:var(--pa-search-panel-bg,#fff);border:1px solid var(--pa-search-border,#cbd5e1);border-radius:var(--pa-search-radius,.6rem);max-height:26rem;box-shadow:var(--pa-search-shadow,0 12px 32px #0f172a29);padding:.4rem;position:absolute;top:calc(100% + .35rem);left:0;right:0;overflow-y:auto}.pa-search-facets{flex-wrap:wrap;gap:.35rem;padding:.25rem .35rem .5rem;display:flex}.pa-search-facet{cursor:pointer;color:inherit;background:var(--pa-search-facet-bg,#f1f5f9);border:1px solid #0000;border-radius:999px;padding:.2rem .55rem;font-size:.78rem}.pa-search-facet.is-active{background:var(--pa-search-accent-soft,#7c3aed2e);border-color:var(--pa-search-accent,#7c3aed)}.pa-search-facet-count{opacity:.6}.pa-search-results{margin:0;padding:0;list-style:none}.pa-search-result{cursor:pointer;border-radius:.45rem;flex-direction:column;gap:.15rem;padding:.5rem .6rem;display:flex}.pa-search-result.is-active{background:var(--pa-search-hover-bg,#f1f5f9)}.pa-search-title{font-size:.92rem}.pa-search-subtitle{opacity:.65;font-size:.78rem}.pa-search-mark{background:var(--pa-search-mark-bg,#fde68a);color:inherit;border-radius:.2rem}.pa-search-empty,.pa-search-more{opacity:.7;padding:.55rem .6rem;font-size:.82rem}.pa-search-ai{border-top:1px solid var(--pa-search-border,#cbd5e1);margin-top:.35rem;padding:.5rem .6rem}.pa-search-ai-ask{cursor:pointer;color:var(--pa-search-accent,#7c3aed);background:0 0;border:none;padding:0;font-size:.82rem}.pa-search-ai-ask:disabled{opacity:.6;cursor:default}.pa-search-ai-answer{white-space:pre-wrap;margin-top:.4rem;font-size:.85rem;line-height:1.4}@media (prefers-color-scheme:dark){.pa-search{color:var(--pa-search-fg,#e2e8f0)}.pa-search-input{background:var(--pa-search-input-bg,#0f172a);border-color:var(--pa-search-border,#334155)}.pa-search-panel{background:var(--pa-search-panel-bg,#0f172a);border-color:var(--pa-search-border,#334155)}.pa-search-facet{background:var(--pa-search-facet-bg,#1e293b)}.pa-search-result.is-active{background:var(--pa-search-hover-bg,#1e293b)}.pa-search-mark{background:var(--pa-search-mark-bg,#b45309);color:#fff}}
|
|
2
|
+
/*$vite$:1*/
|
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
import { useEffect as e, useMemo as t, useRef as n, useState as r } from "react";
|
|
2
|
+
//#region \0rolldown/runtime.js
|
|
3
|
+
var i = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), a = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(e, { get: (e, t) => (typeof require < "u" ? require : e)[t] }) : e)(function(e) {
|
|
4
|
+
if (typeof require < "u") return require.apply(this, arguments);
|
|
5
|
+
throw Error("Calling `require` for \"" + e + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
|
|
6
|
+
}), o = class extends Error {
|
|
7
|
+
constructor(e, t, n) {
|
|
8
|
+
super(n || t || `Chat request failed (${e})`), this.name = "ChatRequestError", this.status = e, this.code = t || "request_failed";
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
async function s({ endpoint: e, message: t, session: n = null, signal: r, onEvent: i }) {
|
|
12
|
+
let a = await fetch(e, {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: {
|
|
15
|
+
"Content-Type": "application/json",
|
|
16
|
+
Accept: "text/event-stream"
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify({
|
|
19
|
+
message: t,
|
|
20
|
+
session: n,
|
|
21
|
+
stream: !0
|
|
22
|
+
}),
|
|
23
|
+
signal: r
|
|
24
|
+
});
|
|
25
|
+
if (!a.ok) throw await l(a);
|
|
26
|
+
let o = a.body.getReader(), s = new TextDecoder(), u = "";
|
|
27
|
+
for (;;) {
|
|
28
|
+
let { done: e, value: t } = await o.read();
|
|
29
|
+
if (e) break;
|
|
30
|
+
u = (u + s.decode(t, { stream: !0 })).replace(/\r\n/g, "\n");
|
|
31
|
+
let n;
|
|
32
|
+
for (; (n = u.indexOf("\n\n")) !== -1;) {
|
|
33
|
+
let e = u.slice(0, n);
|
|
34
|
+
u = u.slice(n + 2), c(e, i);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
u.trim() !== "" && c(u, i);
|
|
38
|
+
}
|
|
39
|
+
function c(e, t) {
|
|
40
|
+
let n = "message", r = [];
|
|
41
|
+
for (let t of e.split("\n")) t.startsWith("event:") ? n = t.slice(6).trim() : t.startsWith("data:") && r.push(t.slice(5).trim());
|
|
42
|
+
if (r.length === 0) return;
|
|
43
|
+
let i;
|
|
44
|
+
try {
|
|
45
|
+
i = JSON.parse(r.join("\n"));
|
|
46
|
+
} catch {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
t(n, i);
|
|
50
|
+
}
|
|
51
|
+
async function l(e) {
|
|
52
|
+
let t = null;
|
|
53
|
+
try {
|
|
54
|
+
t = await e.json();
|
|
55
|
+
} catch {}
|
|
56
|
+
return new o(e.status, t?.error?.code ?? null, t?.error?.message ?? t?.message ?? null);
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/searchCore.js
|
|
60
|
+
function u(e) {
|
|
61
|
+
return e == null ? [] : String(e).toLowerCase().split(/[^a-z0-9]+/i).filter(Boolean);
|
|
62
|
+
}
|
|
63
|
+
function d(e, t, n) {
|
|
64
|
+
if (e === t) return 0;
|
|
65
|
+
let r = e.length, i = t.length;
|
|
66
|
+
if (Math.abs(r - i) > n) return n + 1;
|
|
67
|
+
let a = null, o = Array(i + 1);
|
|
68
|
+
for (let e = 0; e <= i; e++) o[e] = e;
|
|
69
|
+
for (let s = 1; s <= r; s++) {
|
|
70
|
+
let r = Array(i + 1);
|
|
71
|
+
r[0] = s;
|
|
72
|
+
let c = r[0];
|
|
73
|
+
for (let n = 1; n <= i; n++) {
|
|
74
|
+
let i = e[s - 1] === t[n - 1] ? 0 : 1, l = Math.min(o[n] + 1, r[n - 1] + 1, o[n - 1] + i);
|
|
75
|
+
s > 1 && n > 1 && e[s - 1] === t[n - 2] && e[s - 2] === t[n - 1] && (l = Math.min(l, a[n - 2] + 1)), r[n] = l, l < c && (c = l);
|
|
76
|
+
}
|
|
77
|
+
if (c > n) return n + 1;
|
|
78
|
+
a = o, o = r;
|
|
79
|
+
}
|
|
80
|
+
return o[i];
|
|
81
|
+
}
|
|
82
|
+
function f(e, t) {
|
|
83
|
+
return t === !1 ? 0 : typeof t == "number" ? Math.max(0, t) : e.length >= 8 ? 2 : +(e.length >= 4);
|
|
84
|
+
}
|
|
85
|
+
function p(e) {
|
|
86
|
+
let t = /* @__PURE__ */ new Map();
|
|
87
|
+
if (!e) return t;
|
|
88
|
+
for (let [n, r] of Object.entries(e)) {
|
|
89
|
+
let e = new Set([n.toLowerCase(), ...(r || []).map((e) => String(e).toLowerCase())]);
|
|
90
|
+
for (let n of e) {
|
|
91
|
+
let r = t.get(n) || /* @__PURE__ */ new Set();
|
|
92
|
+
for (let t of e) r.add(t);
|
|
93
|
+
t.set(n, r);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return t;
|
|
97
|
+
}
|
|
98
|
+
function m(e, t) {
|
|
99
|
+
let n = t.get(e);
|
|
100
|
+
return n ? Array.from(n) : [e];
|
|
101
|
+
}
|
|
102
|
+
function h(e, t) {
|
|
103
|
+
let n = t && t.length ? t : Object.keys(e || {}), r = [];
|
|
104
|
+
for (let t of n) {
|
|
105
|
+
let n = e ? e[t] : void 0;
|
|
106
|
+
if (n != null) if (Array.isArray(n)) for (let e of n) r.push(...u(e).map((e) => ({
|
|
107
|
+
field: t,
|
|
108
|
+
token: e
|
|
109
|
+
})));
|
|
110
|
+
else if (typeof n == "object") continue;
|
|
111
|
+
else r.push(...u(n).map((e) => ({
|
|
112
|
+
field: t,
|
|
113
|
+
token: e
|
|
114
|
+
})));
|
|
115
|
+
}
|
|
116
|
+
return r;
|
|
117
|
+
}
|
|
118
|
+
function g(e, t, n, r) {
|
|
119
|
+
let i = 0;
|
|
120
|
+
for (let a of e) {
|
|
121
|
+
let e = f(a, r);
|
|
122
|
+
for (let { field: r, token: o } of t) {
|
|
123
|
+
let t = n[r] ?? 1, s = 0;
|
|
124
|
+
o === a ? s = 3 : a.length >= 2 && o.startsWith(a) ? s = 2 : e > 0 && d(a, o, e) <= e && (s = 1);
|
|
125
|
+
let c = s * t;
|
|
126
|
+
c > i && (i = c);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return i;
|
|
130
|
+
}
|
|
131
|
+
function _(e, t, n = {}) {
|
|
132
|
+
let r = Array.isArray(e) ? e : [], { fields: i, fieldWeights: a = {}, synonyms: o, fuzzy: s = !0, facetKeys: c = [], activeFacets: l = {}, limit: d = 20 } = n, f = p(o), _ = u(t), v;
|
|
133
|
+
if (_.length === 0) v = r.map((e, t) => ({
|
|
134
|
+
item: e,
|
|
135
|
+
index: t,
|
|
136
|
+
score: 0,
|
|
137
|
+
matched: []
|
|
138
|
+
}));
|
|
139
|
+
else {
|
|
140
|
+
let e = _.map((e) => m(e, f));
|
|
141
|
+
v = [], r.forEach((t, n) => {
|
|
142
|
+
let r = h(t, i), o = 0, c = [];
|
|
143
|
+
_.forEach((t, n) => {
|
|
144
|
+
let i = g(e[n], r, a, s);
|
|
145
|
+
i > 0 && (o += i, c.push(t));
|
|
146
|
+
}), c.length !== 0 && (o += c.length, c.length === _.length && (o += 5), v.push({
|
|
147
|
+
item: t,
|
|
148
|
+
index: n,
|
|
149
|
+
score: o,
|
|
150
|
+
matched: c
|
|
151
|
+
}));
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
let y = {};
|
|
155
|
+
for (let e of c) {
|
|
156
|
+
let t = /* @__PURE__ */ new Map();
|
|
157
|
+
for (let { item: n } of v) {
|
|
158
|
+
let r = n ? n[e] : void 0, i = Array.isArray(r) ? r : r == null ? [] : [r];
|
|
159
|
+
for (let e of i) t.set(e, (t.get(e) || 0) + 1);
|
|
160
|
+
}
|
|
161
|
+
y[e] = Array.from(t, ([e, t]) => ({
|
|
162
|
+
value: e,
|
|
163
|
+
count: t
|
|
164
|
+
})).sort((e, t) => t.count - e.count || String(e.value).localeCompare(String(t.value)));
|
|
165
|
+
}
|
|
166
|
+
let b = v;
|
|
167
|
+
for (let [e, t] of Object.entries(l)) t == null || t === "" || (b = b.filter(({ item: n }) => {
|
|
168
|
+
let r = n ? n[e] : void 0;
|
|
169
|
+
return Array.isArray(r) ? r.includes(t) : r === t;
|
|
170
|
+
}));
|
|
171
|
+
b.sort((e, t) => t.score - e.score || e.index - t.index);
|
|
172
|
+
let x = b.length;
|
|
173
|
+
return {
|
|
174
|
+
results: b.slice(0, d).map(({ item: e, score: t, matched: n }) => ({
|
|
175
|
+
item: e,
|
|
176
|
+
score: t,
|
|
177
|
+
matched: n
|
|
178
|
+
})),
|
|
179
|
+
facets: y,
|
|
180
|
+
total: x
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
function v(e, t, n = {}) {
|
|
184
|
+
let r = e == null ? "" : String(e), i = p(n.synonyms), a = /* @__PURE__ */ new Set();
|
|
185
|
+
for (let e of u(t)) for (let t of m(e, i)) a.add(t);
|
|
186
|
+
if (a.size === 0 || r === "") return [{
|
|
187
|
+
text: r,
|
|
188
|
+
match: !1
|
|
189
|
+
}];
|
|
190
|
+
let o = Array.from(a), s = (e) => {
|
|
191
|
+
let t = e.toLowerCase();
|
|
192
|
+
return o.some((e) => {
|
|
193
|
+
let r = f(e, n.fuzzy ?? !0);
|
|
194
|
+
return t === e || e.length >= 2 && t.startsWith(e) || r > 0 && d(e, t, r) <= r;
|
|
195
|
+
});
|
|
196
|
+
}, c = [], l = r.split(/(\s+)/);
|
|
197
|
+
for (let e of l) {
|
|
198
|
+
if (e === "") continue;
|
|
199
|
+
let t = /\s/.test(e) ? !1 : s(e.replace(/[^a-z0-9]/gi, "")), n = c[c.length - 1];
|
|
200
|
+
n && n.match === t ? n.text += e : c.push({
|
|
201
|
+
text: e,
|
|
202
|
+
match: t
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return c;
|
|
206
|
+
}
|
|
207
|
+
//#endregion
|
|
208
|
+
//#region ../../node_modules/react/cjs/react-jsx-runtime.production.js
|
|
209
|
+
var y = /* @__PURE__ */ i(((e) => {
|
|
210
|
+
var t = Symbol.for("react.transitional.element"), n = Symbol.for("react.fragment");
|
|
211
|
+
function r(e, n, r) {
|
|
212
|
+
var i = null;
|
|
213
|
+
if (r !== void 0 && (i = "" + r), n.key !== void 0 && (i = "" + n.key), "key" in n) for (var a in r = {}, n) a !== "key" && (r[a] = n[a]);
|
|
214
|
+
else r = n;
|
|
215
|
+
return n = r.ref, {
|
|
216
|
+
$$typeof: t,
|
|
217
|
+
type: e,
|
|
218
|
+
key: i,
|
|
219
|
+
ref: n === void 0 ? null : n,
|
|
220
|
+
props: r
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
e.Fragment = n, e.jsx = r, e.jsxs = r;
|
|
224
|
+
})), b = /* @__PURE__ */ i(((e) => {
|
|
225
|
+
process.env.NODE_ENV !== "production" && (function() {
|
|
226
|
+
function t(e) {
|
|
227
|
+
if (e == null) return null;
|
|
228
|
+
if (typeof e == "function") return e.$$typeof === k ? null : e.displayName || e.name || null;
|
|
229
|
+
if (typeof e == "string") return e;
|
|
230
|
+
switch (e) {
|
|
231
|
+
case v: return "Fragment";
|
|
232
|
+
case b: return "Profiler";
|
|
233
|
+
case y: return "StrictMode";
|
|
234
|
+
case w: return "Suspense";
|
|
235
|
+
case T: return "SuspenseList";
|
|
236
|
+
case O: return "Activity";
|
|
237
|
+
}
|
|
238
|
+
if (typeof e == "object") switch (typeof e.tag == "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), e.$$typeof) {
|
|
239
|
+
case _: return "Portal";
|
|
240
|
+
case S: return e.displayName || "Context";
|
|
241
|
+
case x: return (e._context.displayName || "Context") + ".Consumer";
|
|
242
|
+
case C:
|
|
243
|
+
var n = e.render;
|
|
244
|
+
return e = e.displayName, e ||= (e = n.displayName || n.name || "", e === "" ? "ForwardRef" : "ForwardRef(" + e + ")"), e;
|
|
245
|
+
case E: return n = e.displayName || null, n === null ? t(e.type) || "Memo" : n;
|
|
246
|
+
case D:
|
|
247
|
+
n = e._payload, e = e._init;
|
|
248
|
+
try {
|
|
249
|
+
return t(e(n));
|
|
250
|
+
} catch {}
|
|
251
|
+
}
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
function n(e) {
|
|
255
|
+
return "" + e;
|
|
256
|
+
}
|
|
257
|
+
function r(e) {
|
|
258
|
+
try {
|
|
259
|
+
n(e);
|
|
260
|
+
var t = !1;
|
|
261
|
+
} catch {
|
|
262
|
+
t = !0;
|
|
263
|
+
}
|
|
264
|
+
if (t) {
|
|
265
|
+
t = console;
|
|
266
|
+
var r = t.error, i = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
|
|
267
|
+
return r.call(t, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", i), n(e);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function i(e) {
|
|
271
|
+
if (e === v) return "<>";
|
|
272
|
+
if (typeof e == "object" && e && e.$$typeof === D) return "<...>";
|
|
273
|
+
try {
|
|
274
|
+
var n = t(e);
|
|
275
|
+
return n ? "<" + n + ">" : "<...>";
|
|
276
|
+
} catch {
|
|
277
|
+
return "<...>";
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function o() {
|
|
281
|
+
var e = A.A;
|
|
282
|
+
return e === null ? null : e.getOwner();
|
|
283
|
+
}
|
|
284
|
+
function s() {
|
|
285
|
+
return Error("react-stack-top-frame");
|
|
286
|
+
}
|
|
287
|
+
function c(e) {
|
|
288
|
+
if (j.call(e, "key")) {
|
|
289
|
+
var t = Object.getOwnPropertyDescriptor(e, "key").get;
|
|
290
|
+
if (t && t.isReactWarning) return !1;
|
|
291
|
+
}
|
|
292
|
+
return e.key !== void 0;
|
|
293
|
+
}
|
|
294
|
+
function l(e, t) {
|
|
295
|
+
function n() {
|
|
296
|
+
P || (P = !0, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", t));
|
|
297
|
+
}
|
|
298
|
+
n.isReactWarning = !0, Object.defineProperty(e, "key", {
|
|
299
|
+
get: n,
|
|
300
|
+
configurable: !0
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
function u() {
|
|
304
|
+
var e = t(this.type);
|
|
305
|
+
return F[e] || (F[e] = !0, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")), e = this.props.ref, e === void 0 ? null : e;
|
|
306
|
+
}
|
|
307
|
+
function d(e, t, n, r, i, a) {
|
|
308
|
+
var o = n.ref;
|
|
309
|
+
return e = {
|
|
310
|
+
$$typeof: g,
|
|
311
|
+
type: e,
|
|
312
|
+
key: t,
|
|
313
|
+
props: n,
|
|
314
|
+
_owner: r
|
|
315
|
+
}, (o === void 0 ? null : o) === null ? Object.defineProperty(e, "ref", {
|
|
316
|
+
enumerable: !1,
|
|
317
|
+
value: null
|
|
318
|
+
}) : Object.defineProperty(e, "ref", {
|
|
319
|
+
enumerable: !1,
|
|
320
|
+
get: u
|
|
321
|
+
}), e._store = {}, Object.defineProperty(e._store, "validated", {
|
|
322
|
+
configurable: !1,
|
|
323
|
+
enumerable: !1,
|
|
324
|
+
writable: !0,
|
|
325
|
+
value: 0
|
|
326
|
+
}), Object.defineProperty(e, "_debugInfo", {
|
|
327
|
+
configurable: !1,
|
|
328
|
+
enumerable: !1,
|
|
329
|
+
writable: !0,
|
|
330
|
+
value: null
|
|
331
|
+
}), Object.defineProperty(e, "_debugStack", {
|
|
332
|
+
configurable: !1,
|
|
333
|
+
enumerable: !1,
|
|
334
|
+
writable: !0,
|
|
335
|
+
value: i
|
|
336
|
+
}), Object.defineProperty(e, "_debugTask", {
|
|
337
|
+
configurable: !1,
|
|
338
|
+
enumerable: !1,
|
|
339
|
+
writable: !0,
|
|
340
|
+
value: a
|
|
341
|
+
}), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
|
|
342
|
+
}
|
|
343
|
+
function f(e, n, i, a, s, u) {
|
|
344
|
+
var f = n.children;
|
|
345
|
+
if (f !== void 0) if (a) if (M(f)) {
|
|
346
|
+
for (a = 0; a < f.length; a++) p(f[a]);
|
|
347
|
+
Object.freeze && Object.freeze(f);
|
|
348
|
+
} else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
|
|
349
|
+
else p(f);
|
|
350
|
+
if (j.call(n, "key")) {
|
|
351
|
+
f = t(e);
|
|
352
|
+
var m = Object.keys(n).filter(function(e) {
|
|
353
|
+
return e !== "key";
|
|
354
|
+
});
|
|
355
|
+
a = 0 < m.length ? "{key: someKey, " + m.join(": ..., ") + ": ...}" : "{key: someKey}", R[f + a] || (m = 0 < m.length ? "{" + m.join(": ..., ") + ": ...}" : "{}", console.error("A props object containing a \"key\" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />", a, f, m, f), R[f + a] = !0);
|
|
356
|
+
}
|
|
357
|
+
if (f = null, i !== void 0 && (r(i), f = "" + i), c(n) && (r(n.key), f = "" + n.key), "key" in n) for (var h in i = {}, n) h !== "key" && (i[h] = n[h]);
|
|
358
|
+
else i = n;
|
|
359
|
+
return f && l(i, typeof e == "function" ? e.displayName || e.name || "Unknown" : e), d(e, f, i, o(), s, u);
|
|
360
|
+
}
|
|
361
|
+
function p(e) {
|
|
362
|
+
m(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e && e.$$typeof === D && (e._payload.status === "fulfilled" ? m(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
|
|
363
|
+
}
|
|
364
|
+
function m(e) {
|
|
365
|
+
return typeof e == "object" && !!e && e.$$typeof === g;
|
|
366
|
+
}
|
|
367
|
+
var h = a("react"), g = Symbol.for("react.transitional.element"), _ = Symbol.for("react.portal"), v = Symbol.for("react.fragment"), y = Symbol.for("react.strict_mode"), b = Symbol.for("react.profiler"), x = Symbol.for("react.consumer"), S = Symbol.for("react.context"), C = Symbol.for("react.forward_ref"), w = Symbol.for("react.suspense"), T = Symbol.for("react.suspense_list"), E = Symbol.for("react.memo"), D = Symbol.for("react.lazy"), O = Symbol.for("react.activity"), k = Symbol.for("react.client.reference"), A = h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, j = Object.prototype.hasOwnProperty, M = Array.isArray, N = console.createTask ? console.createTask : function() {
|
|
368
|
+
return null;
|
|
369
|
+
};
|
|
370
|
+
h = { react_stack_bottom_frame: function(e) {
|
|
371
|
+
return e();
|
|
372
|
+
} };
|
|
373
|
+
var P, F = {}, I = h.react_stack_bottom_frame.bind(h, s)(), L = N(i(s)), R = {};
|
|
374
|
+
e.Fragment = v, e.jsx = function(e, t, n) {
|
|
375
|
+
var r = 1e4 > A.recentlyCreatedOwnerStacks++;
|
|
376
|
+
return f(e, t, n, !1, r ? Error("react-stack-top-frame") : I, r ? N(i(e)) : L);
|
|
377
|
+
}, e.jsxs = function(e, t, n) {
|
|
378
|
+
var r = 1e4 > A.recentlyCreatedOwnerStacks++;
|
|
379
|
+
return f(e, t, n, !0, r ? Error("react-stack-top-frame") : I, r ? N(i(e)) : L);
|
|
380
|
+
};
|
|
381
|
+
})();
|
|
382
|
+
})), x = (/* @__PURE__ */ i(((e, t) => {
|
|
383
|
+
process.env.NODE_ENV === "production" ? t.exports = y() : t.exports = b();
|
|
384
|
+
})))();
|
|
385
|
+
function S({ items: i = null, fetchUrl: a = null, fields: o = void 0, fieldWeights: c = void 0, synonyms: l = void 0, facets: u = [], fuzzy: d = !0, limit: f = 8, placeholder: p = "Search…", titleField: m = "title", subtitleField: h = null, onSelect: g = null, aiMode: y = !1, token: b = "", baseUrl: S = "" }) {
|
|
386
|
+
let [C, w] = r(null), [T, E] = r(""), [D, O] = r(!1), [k, A] = r(0), [j, M] = r({}), [N, P] = r({
|
|
387
|
+
open: !1,
|
|
388
|
+
streaming: !1,
|
|
389
|
+
answer: "",
|
|
390
|
+
error: null
|
|
391
|
+
}), F = n(null), I = n(null), L = Array.isArray(u) ? u : [], R = i ?? (C || []), z = !!(y && b);
|
|
392
|
+
e(() => {
|
|
393
|
+
if (i != null || !a) return;
|
|
394
|
+
let e = !0;
|
|
395
|
+
return fetch(a, { headers: { Accept: "application/json" } }).then((e) => e.ok ? e.json() : []).then((t) => e && w(Array.isArray(t) ? t : t?.items || [])).catch(() => e && w([])), () => {
|
|
396
|
+
e = !1;
|
|
397
|
+
};
|
|
398
|
+
}, [i, a]), e(() => {
|
|
399
|
+
let e = (e) => {
|
|
400
|
+
I.current && !I.current.contains(e.target) && O(!1);
|
|
401
|
+
};
|
|
402
|
+
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
403
|
+
}, []);
|
|
404
|
+
let { results: B, facets: V, total: H } = t(() => _(R, T, {
|
|
405
|
+
fields: o,
|
|
406
|
+
fieldWeights: c,
|
|
407
|
+
synonyms: l,
|
|
408
|
+
fuzzy: d,
|
|
409
|
+
facetKeys: L,
|
|
410
|
+
activeFacets: j,
|
|
411
|
+
limit: f
|
|
412
|
+
}), [
|
|
413
|
+
R,
|
|
414
|
+
T,
|
|
415
|
+
o,
|
|
416
|
+
c,
|
|
417
|
+
l,
|
|
418
|
+
d,
|
|
419
|
+
L.join(","),
|
|
420
|
+
JSON.stringify(j),
|
|
421
|
+
f
|
|
422
|
+
]);
|
|
423
|
+
e(() => A(0), [T, j]);
|
|
424
|
+
let U = (e) => {
|
|
425
|
+
O(!1), g && g(e);
|
|
426
|
+
}, W = (e, t) => {
|
|
427
|
+
M((n) => n[e] === t ? {
|
|
428
|
+
...n,
|
|
429
|
+
[e]: void 0
|
|
430
|
+
} : {
|
|
431
|
+
...n,
|
|
432
|
+
[e]: t
|
|
433
|
+
});
|
|
434
|
+
}, G = (e) => {
|
|
435
|
+
D && (e.key === "ArrowDown" ? (e.preventDefault(), A((e) => Math.min(e + 1, B.length - 1))) : e.key === "ArrowUp" ? (e.preventDefault(), A((e) => Math.max(e - 1, 0))) : e.key === "Enter" ? B[k] && U(B[k].item) : e.key === "Escape" && O(!1));
|
|
436
|
+
}, K = () => {
|
|
437
|
+
if (!z || !T.trim()) return;
|
|
438
|
+
F.current?.abort();
|
|
439
|
+
let e = new AbortController();
|
|
440
|
+
F.current = e, P({
|
|
441
|
+
open: !0,
|
|
442
|
+
streaming: !0,
|
|
443
|
+
answer: "",
|
|
444
|
+
error: null
|
|
445
|
+
}), s({
|
|
446
|
+
endpoint: `${S.replace(/\/$/, "")}/api/chat/${b}`,
|
|
447
|
+
message: T,
|
|
448
|
+
signal: e.signal,
|
|
449
|
+
onEvent: (e, t) => {
|
|
450
|
+
if (e === "delta") {
|
|
451
|
+
let e = t?.delta ?? t?.text ?? t?.content ?? "";
|
|
452
|
+
P((t) => ({
|
|
453
|
+
...t,
|
|
454
|
+
answer: t.answer + e
|
|
455
|
+
}));
|
|
456
|
+
} else e === "done" ? P((e) => ({
|
|
457
|
+
...e,
|
|
458
|
+
streaming: !1
|
|
459
|
+
})) : e === "error" && P((e) => ({
|
|
460
|
+
...e,
|
|
461
|
+
streaming: !1,
|
|
462
|
+
error: t?.message || "Assistant error"
|
|
463
|
+
}));
|
|
464
|
+
}
|
|
465
|
+
}).catch((e) => P((t) => ({
|
|
466
|
+
...t,
|
|
467
|
+
streaming: !1,
|
|
468
|
+
error: e?.message || "Assistant unavailable"
|
|
469
|
+
})));
|
|
470
|
+
}, q = (e) => v(String(e?.[m] ?? ""), T, {
|
|
471
|
+
synonyms: l,
|
|
472
|
+
fuzzy: d
|
|
473
|
+
}).map((e, t) => e.match ? /* @__PURE__ */ (0, x.jsx)("mark", {
|
|
474
|
+
className: "pa-search-mark",
|
|
475
|
+
children: e.text
|
|
476
|
+
}, t) : /* @__PURE__ */ (0, x.jsx)("span", { children: e.text }, t));
|
|
477
|
+
return /* @__PURE__ */ (0, x.jsxs)("div", {
|
|
478
|
+
className: "pa-search",
|
|
479
|
+
ref: I,
|
|
480
|
+
children: [/* @__PURE__ */ (0, x.jsx)("input", {
|
|
481
|
+
type: "text",
|
|
482
|
+
className: "pa-search-input",
|
|
483
|
+
role: "combobox",
|
|
484
|
+
"aria-expanded": D,
|
|
485
|
+
"aria-autocomplete": "list",
|
|
486
|
+
placeholder: p,
|
|
487
|
+
value: T,
|
|
488
|
+
onChange: (e) => {
|
|
489
|
+
E(e.target.value), O(!0);
|
|
490
|
+
},
|
|
491
|
+
onFocus: () => O(!0),
|
|
492
|
+
onKeyDown: G
|
|
493
|
+
}), D && T.trim() !== "" && /* @__PURE__ */ (0, x.jsxs)("div", {
|
|
494
|
+
className: "pa-search-panel",
|
|
495
|
+
role: "listbox",
|
|
496
|
+
children: [
|
|
497
|
+
L.map((e) => (V[e] || []).length > 0 ? /* @__PURE__ */ (0, x.jsx)("div", {
|
|
498
|
+
className: "pa-search-facets",
|
|
499
|
+
children: V[e].slice(0, 6).map((t) => /* @__PURE__ */ (0, x.jsxs)("button", {
|
|
500
|
+
type: "button",
|
|
501
|
+
className: `pa-search-facet${j[e] === t.value ? " is-active" : ""}`,
|
|
502
|
+
onClick: () => W(e, t.value),
|
|
503
|
+
children: [
|
|
504
|
+
String(t.value),
|
|
505
|
+
" ",
|
|
506
|
+
/* @__PURE__ */ (0, x.jsx)("span", {
|
|
507
|
+
className: "pa-search-facet-count",
|
|
508
|
+
children: t.count
|
|
509
|
+
})
|
|
510
|
+
]
|
|
511
|
+
}, String(t.value)))
|
|
512
|
+
}, e) : null),
|
|
513
|
+
B.length === 0 ? /* @__PURE__ */ (0, x.jsxs)("div", {
|
|
514
|
+
className: "pa-search-empty",
|
|
515
|
+
children: [
|
|
516
|
+
"No matches for “",
|
|
517
|
+
T,
|
|
518
|
+
"”."
|
|
519
|
+
]
|
|
520
|
+
}) : /* @__PURE__ */ (0, x.jsx)("ul", {
|
|
521
|
+
className: "pa-search-results",
|
|
522
|
+
children: B.map((e, t) => /* @__PURE__ */ (0, x.jsxs)("li", {
|
|
523
|
+
role: "option",
|
|
524
|
+
"aria-selected": t === k,
|
|
525
|
+
className: `pa-search-result${t === k ? " is-active" : ""}`,
|
|
526
|
+
onMouseEnter: () => A(t),
|
|
527
|
+
onMouseDown: (t) => {
|
|
528
|
+
t.preventDefault(), U(e.item);
|
|
529
|
+
},
|
|
530
|
+
children: [/* @__PURE__ */ (0, x.jsx)("span", {
|
|
531
|
+
className: "pa-search-title",
|
|
532
|
+
children: q(e.item)
|
|
533
|
+
}), h && e.item?.[h] != null && /* @__PURE__ */ (0, x.jsx)("span", {
|
|
534
|
+
className: "pa-search-subtitle",
|
|
535
|
+
children: String(e.item[h])
|
|
536
|
+
})]
|
|
537
|
+
}, e.item?.id ?? t))
|
|
538
|
+
}),
|
|
539
|
+
H > B.length && /* @__PURE__ */ (0, x.jsxs)("div", {
|
|
540
|
+
className: "pa-search-more",
|
|
541
|
+
children: [H - B.length, " more…"]
|
|
542
|
+
}),
|
|
543
|
+
z && /* @__PURE__ */ (0, x.jsxs)("div", {
|
|
544
|
+
className: "pa-search-ai",
|
|
545
|
+
children: [/* @__PURE__ */ (0, x.jsx)("button", {
|
|
546
|
+
type: "button",
|
|
547
|
+
className: "pa-search-ai-ask",
|
|
548
|
+
onClick: K,
|
|
549
|
+
disabled: N.streaming,
|
|
550
|
+
children: N.streaming ? "Asking…" : `Ask AI about “${T}”`
|
|
551
|
+
}), N.open && (N.answer || N.error) && /* @__PURE__ */ (0, x.jsx)("div", {
|
|
552
|
+
className: "pa-search-ai-answer",
|
|
553
|
+
children: N.error ? N.error : N.answer
|
|
554
|
+
})]
|
|
555
|
+
})
|
|
556
|
+
]
|
|
557
|
+
})]
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
//#endregion
|
|
561
|
+
export { S as AiContextGatewaySearch, S as default, p as buildSynonyms, d as editDistance, v as highlightSegments, _ as search, u as tokenize };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react")):typeof define==`function`&&define.amd?define([`exports`,`react`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.AiContextGatewaySearchReact={},e.React))})(this,function(e,t){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var n=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),r=class extends Error{constructor(e,t,n){super(n||t||`Chat request failed (${e})`),this.name=`ChatRequestError`,this.status=e,this.code=t||`request_failed`}};async function i({endpoint:e,message:t,session:n=null,signal:r,onEvent:i}){let s=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({message:t,session:n,stream:!0}),signal:r});if(!s.ok)throw await o(s);let c=s.body.getReader(),l=new TextDecoder,u=``;for(;;){let{done:e,value:t}=await c.read();if(e)break;u=(u+l.decode(t,{stream:!0})).replace(/\r\n/g,`
|
|
2
|
+
`);let n;for(;(n=u.indexOf(`
|
|
3
|
+
|
|
4
|
+
`))!==-1;){let e=u.slice(0,n);u=u.slice(n+2),a(e,i)}}u.trim()!==``&&a(u,i)}function a(e,t){let n=`message`,r=[];for(let t of e.split(`
|
|
5
|
+
`))t.startsWith(`event:`)?n=t.slice(6).trim():t.startsWith(`data:`)&&r.push(t.slice(5).trim());if(r.length===0)return;let i;try{i=JSON.parse(r.join(`
|
|
6
|
+
`))}catch{return}t(n,i)}async function o(e){let t=null;try{t=await e.json()}catch{}return new r(e.status,t?.error?.code??null,t?.error?.message??t?.message??null)}function s(e){return e==null?[]:String(e).toLowerCase().split(/[^a-z0-9]+/i).filter(Boolean)}function c(e,t,n){if(e===t)return 0;let r=e.length,i=t.length;if(Math.abs(r-i)>n)return n+1;let a=null,o=Array(i+1);for(let e=0;e<=i;e++)o[e]=e;for(let s=1;s<=r;s++){let r=Array(i+1);r[0]=s;let c=r[0];for(let n=1;n<=i;n++){let i=e[s-1]===t[n-1]?0:1,l=Math.min(o[n]+1,r[n-1]+1,o[n-1]+i);s>1&&n>1&&e[s-1]===t[n-2]&&e[s-2]===t[n-1]&&(l=Math.min(l,a[n-2]+1)),r[n]=l,l<c&&(c=l)}if(c>n)return n+1;a=o,o=r}return o[i]}function l(e,t){return t===!1?0:typeof t==`number`?Math.max(0,t):e.length>=8?2:+(e.length>=4)}function u(e){let t=new Map;if(!e)return t;for(let[n,r]of Object.entries(e)){let e=new Set([n.toLowerCase(),...(r||[]).map(e=>String(e).toLowerCase())]);for(let n of e){let r=t.get(n)||new Set;for(let t of e)r.add(t);t.set(n,r)}}return t}function d(e,t){let n=t.get(e);return n?Array.from(n):[e]}function f(e,t){let n=t&&t.length?t:Object.keys(e||{}),r=[];for(let t of n){let n=e?e[t]:void 0;if(n!=null)if(Array.isArray(n))for(let e of n)r.push(...s(e).map(e=>({field:t,token:e})));else if(typeof n==`object`)continue;else r.push(...s(n).map(e=>({field:t,token:e})))}return r}function p(e,t,n,r){let i=0;for(let a of e){let e=l(a,r);for(let{field:r,token:o}of t){let t=n[r]??1,s=0;o===a?s=3:a.length>=2&&o.startsWith(a)?s=2:e>0&&c(a,o,e)<=e&&(s=1);let l=s*t;l>i&&(i=l)}}return i}function m(e,t,n={}){let r=Array.isArray(e)?e:[],{fields:i,fieldWeights:a={},synonyms:o,fuzzy:c=!0,facetKeys:l=[],activeFacets:m={},limit:h=20}=n,g=u(o),_=s(t),v;if(_.length===0)v=r.map((e,t)=>({item:e,index:t,score:0,matched:[]}));else{let e=_.map(e=>d(e,g));v=[],r.forEach((t,n)=>{let r=f(t,i),o=0,s=[];_.forEach((t,n)=>{let i=p(e[n],r,a,c);i>0&&(o+=i,s.push(t))}),s.length!==0&&(o+=s.length,s.length===_.length&&(o+=5),v.push({item:t,index:n,score:o,matched:s}))})}let y={};for(let e of l){let t=new Map;for(let{item:n}of v){let r=n?n[e]:void 0,i=Array.isArray(r)?r:r==null?[]:[r];for(let e of i)t.set(e,(t.get(e)||0)+1)}y[e]=Array.from(t,([e,t])=>({value:e,count:t})).sort((e,t)=>t.count-e.count||String(e.value).localeCompare(String(t.value)))}let b=v;for(let[e,t]of Object.entries(m))t==null||t===``||(b=b.filter(({item:n})=>{let r=n?n[e]:void 0;return Array.isArray(r)?r.includes(t):r===t}));b.sort((e,t)=>t.score-e.score||e.index-t.index);let x=b.length;return{results:b.slice(0,h).map(({item:e,score:t,matched:n})=>({item:e,score:t,matched:n})),facets:y,total:x}}function h(e,t,n={}){let r=e==null?``:String(e),i=u(n.synonyms),a=new Set;for(let e of s(t))for(let t of d(e,i))a.add(t);if(a.size===0||r===``)return[{text:r,match:!1}];let o=Array.from(a),f=e=>{let t=e.toLowerCase();return o.some(e=>{let r=l(e,n.fuzzy??!0);return t===e||e.length>=2&&t.startsWith(e)||r>0&&c(e,t,r)<=r})},p=[],m=r.split(/(\s+)/);for(let e of m){if(e===``)continue;let t=/\s/.test(e)?!1:f(e.replace(/[^a-z0-9]/gi,``)),n=p[p.length-1];n&&n.match===t?n.text+=e:p.push({text:e,match:t})}return p}var g=n((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),_=n((e=>{process.env.NODE_ENV!==`production`&&(function(){function t(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===O?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case _:return`Fragment`;case y:return`Profiler`;case v:return`StrictMode`;case C:return`Suspense`;case w:return`SuspenseList`;case D:return`Activity`}if(typeof e==`object`)switch(typeof e.tag==`number`&&console.error(`Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.`),e.$$typeof){case g:return`Portal`;case x:return e.displayName||`Context`;case b:return(e._context.displayName||`Context`)+`.Consumer`;case S:var n=e.render;return e=e.displayName,e||=(e=n.displayName||n.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case T:return n=e.displayName||null,n===null?t(e.type)||`Memo`:n;case E:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function n(e){return``+e}function r(e){try{n(e);var t=!1}catch{t=!0}if(t){t=console;var r=t.error,i=typeof Symbol==`function`&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||`Object`;return r.call(t,`The provided key is an unsupported type %s. This value must be coerced to a string before using it here.`,i),n(e)}}function i(e){if(e===_)return`<>`;if(typeof e==`object`&&e&&e.$$typeof===E)return`<...>`;try{var n=t(e);return n?`<`+n+`>`:`<...>`}catch{return`<...>`}}function a(){var e=k.A;return e===null?null:e.getOwner()}function o(){return Error(`react-stack-top-frame`)}function s(e){if(A.call(e,`key`)){var t=Object.getOwnPropertyDescriptor(e,`key`).get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function c(e,t){function n(){N||(N=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",t))}n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function l(){var e=t(this.type);return P[e]||(P[e]=!0,console.error(`Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.`)),e=this.props.ref,e===void 0?null:e}function u(e,t,n,r,i,a){var o=n.ref;return e={$$typeof:h,type:e,key:t,props:n,_owner:r},(o===void 0?null:o)===null?Object.defineProperty(e,"ref",{enumerable:!1,value:null}):Object.defineProperty(e,"ref",{enumerable:!1,get:l}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:i}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:a}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function d(e,n,i,o,l,d){var p=n.children;if(p!==void 0)if(o)if(j(p)){for(o=0;o<p.length;o++)f(p[o]);Object.freeze&&Object.freeze(p)}else console.error(`React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.`);else f(p);if(A.call(n,`key`)){p=t(e);var m=Object.keys(n).filter(function(e){return e!==`key`});o=0<m.length?`{key: someKey, `+m.join(`: ..., `)+`: ...}`:`{key: someKey}`,L[p+o]||(m=0<m.length?`{`+m.join(`: ..., `)+`: ...}`:`{}`,console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
7
|
+
let props = %s;
|
|
8
|
+
<%s {...props} />
|
|
9
|
+
React keys must be passed directly to JSX without using spread:
|
|
10
|
+
let props = %s;
|
|
11
|
+
<%s key={someKey} {...props} />`,o,p,m,p),L[p+o]=!0)}if(p=null,i!==void 0&&(r(i),p=``+i),s(n)&&(r(n.key),p=``+n.key),`key`in n)for(var h in i={},n)h!==`key`&&(i[h]=n[h]);else i=n;return p&&c(i,typeof e==`function`?e.displayName||e.name||`Unknown`:e),u(e,p,i,a(),l,d)}function f(e){p(e)?e._store&&(e._store.validated=1):typeof e==`object`&&e&&e.$$typeof===E&&(e._payload.status===`fulfilled`?p(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function p(e){return typeof e==`object`&&!!e&&e.$$typeof===h}var m=require("react"),h=Symbol.for(`react.transitional.element`),g=Symbol.for(`react.portal`),_=Symbol.for(`react.fragment`),v=Symbol.for(`react.strict_mode`),y=Symbol.for(`react.profiler`),b=Symbol.for(`react.consumer`),x=Symbol.for(`react.context`),S=Symbol.for(`react.forward_ref`),C=Symbol.for(`react.suspense`),w=Symbol.for(`react.suspense_list`),T=Symbol.for(`react.memo`),E=Symbol.for(`react.lazy`),D=Symbol.for(`react.activity`),O=Symbol.for(`react.client.reference`),k=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,A=Object.prototype.hasOwnProperty,j=Array.isArray,M=console.createTask?console.createTask:function(){return null};m={react_stack_bottom_frame:function(e){return e()}};var N,P={},F=m.react_stack_bottom_frame.bind(m,o)(),I=M(i(o)),L={};e.Fragment=_,e.jsx=function(e,t,n){var r=1e4>k.recentlyCreatedOwnerStacks++;return d(e,t,n,!1,r?Error(`react-stack-top-frame`):F,r?M(i(e)):I)},e.jsxs=function(e,t,n){var r=1e4>k.recentlyCreatedOwnerStacks++;return d(e,t,n,!0,r?Error(`react-stack-top-frame`):F,r?M(i(e)):I)}})()})),v=n(((e,t)=>{process.env.NODE_ENV===`production`?t.exports=g():t.exports=_()}))();function y({items:e=null,fetchUrl:n=null,fields:r=void 0,fieldWeights:a=void 0,synonyms:o=void 0,facets:s=[],fuzzy:c=!0,limit:l=8,placeholder:u=`Search…`,titleField:d=`title`,subtitleField:f=null,onSelect:p=null,aiMode:g=!1,token:_=``,baseUrl:y=``}){let[b,x]=(0,t.useState)(null),[S,C]=(0,t.useState)(``),[w,T]=(0,t.useState)(!1),[E,D]=(0,t.useState)(0),[O,k]=(0,t.useState)({}),[A,j]=(0,t.useState)({open:!1,streaming:!1,answer:``,error:null}),M=(0,t.useRef)(null),N=(0,t.useRef)(null),P=Array.isArray(s)?s:[],F=e??(b||[]),I=!!(g&&_);(0,t.useEffect)(()=>{if(e!=null||!n)return;let t=!0;return fetch(n,{headers:{Accept:`application/json`}}).then(e=>e.ok?e.json():[]).then(e=>t&&x(Array.isArray(e)?e:e?.items||[])).catch(()=>t&&x([])),()=>{t=!1}},[e,n]),(0,t.useEffect)(()=>{let e=e=>{N.current&&!N.current.contains(e.target)&&T(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let{results:L,facets:R,total:z}=(0,t.useMemo)(()=>m(F,S,{fields:r,fieldWeights:a,synonyms:o,fuzzy:c,facetKeys:P,activeFacets:O,limit:l}),[F,S,r,a,o,c,P.join(`,`),JSON.stringify(O),l]);(0,t.useEffect)(()=>D(0),[S,O]);let B=e=>{T(!1),p&&p(e)},V=(e,t)=>{k(n=>n[e]===t?{...n,[e]:void 0}:{...n,[e]:t})},H=e=>{w&&(e.key===`ArrowDown`?(e.preventDefault(),D(e=>Math.min(e+1,L.length-1))):e.key===`ArrowUp`?(e.preventDefault(),D(e=>Math.max(e-1,0))):e.key===`Enter`?L[E]&&B(L[E].item):e.key===`Escape`&&T(!1))},U=()=>{if(!I||!S.trim())return;M.current?.abort();let e=new AbortController;M.current=e,j({open:!0,streaming:!0,answer:``,error:null}),i({endpoint:`${y.replace(/\/$/,``)}/api/chat/${_}`,message:S,signal:e.signal,onEvent:(e,t)=>{if(e===`delta`){let e=t?.delta??t?.text??t?.content??``;j(t=>({...t,answer:t.answer+e}))}else e===`done`?j(e=>({...e,streaming:!1})):e===`error`&&j(e=>({...e,streaming:!1,error:t?.message||`Assistant error`}))}}).catch(e=>j(t=>({...t,streaming:!1,error:e?.message||`Assistant unavailable`})))},W=e=>h(String(e?.[d]??``),S,{synonyms:o,fuzzy:c}).map((e,t)=>e.match?(0,v.jsx)(`mark`,{className:`pa-search-mark`,children:e.text},t):(0,v.jsx)(`span`,{children:e.text},t));return(0,v.jsxs)(`div`,{className:`pa-search`,ref:N,children:[(0,v.jsx)(`input`,{type:`text`,className:`pa-search-input`,role:`combobox`,"aria-expanded":w,"aria-autocomplete":`list`,placeholder:u,value:S,onChange:e=>{C(e.target.value),T(!0)},onFocus:()=>T(!0),onKeyDown:H}),w&&S.trim()!==``&&(0,v.jsxs)(`div`,{className:`pa-search-panel`,role:`listbox`,children:[P.map(e=>(R[e]||[]).length>0?(0,v.jsx)(`div`,{className:`pa-search-facets`,children:R[e].slice(0,6).map(t=>(0,v.jsxs)(`button`,{type:`button`,className:`pa-search-facet${O[e]===t.value?` is-active`:``}`,onClick:()=>V(e,t.value),children:[String(t.value),` `,(0,v.jsx)(`span`,{className:`pa-search-facet-count`,children:t.count})]},String(t.value)))},e):null),L.length===0?(0,v.jsxs)(`div`,{className:`pa-search-empty`,children:[`No matches for “`,S,`”.`]}):(0,v.jsx)(`ul`,{className:`pa-search-results`,children:L.map((e,t)=>(0,v.jsxs)(`li`,{role:`option`,"aria-selected":t===E,className:`pa-search-result${t===E?` is-active`:``}`,onMouseEnter:()=>D(t),onMouseDown:t=>{t.preventDefault(),B(e.item)},children:[(0,v.jsx)(`span`,{className:`pa-search-title`,children:W(e.item)}),f&&e.item?.[f]!=null&&(0,v.jsx)(`span`,{className:`pa-search-subtitle`,children:String(e.item[f])})]},e.item?.id??t))}),z>L.length&&(0,v.jsxs)(`div`,{className:`pa-search-more`,children:[z-L.length,` more…`]}),I&&(0,v.jsxs)(`div`,{className:`pa-search-ai`,children:[(0,v.jsx)(`button`,{type:`button`,className:`pa-search-ai-ask`,onClick:U,disabled:A.streaming,children:A.streaming?`Asking…`:`Ask AI about “${S}”`}),A.open&&(A.answer||A.error)&&(0,v.jsx)(`div`,{className:`pa-search-ai-answer`,children:A.error?A.error:A.answer})]})]})]})}e.AiContextGatewaySearch=y,e.default=y,e.buildSynonyms=u,e.editDistance=c,e.highlightSegments=h,e.search=m,e.tokenize=s});
|
package/loader/loader.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-line AiContextGateway smart-search loader.
|
|
3
|
+
*
|
|
4
|
+
* <script src="https://YOUR-CDN/loader.js" data-fetch-url="/api/catalog.json"
|
|
5
|
+
* data-placeholder="Search…" data-facets="category,brand" defer></script>
|
|
6
|
+
*
|
|
7
|
+
* Loads aicontextgateway-search.iife.js from the same directory and drops a
|
|
8
|
+
* configured <aicontextgateway-search> element where the script tag sits. Hosts
|
|
9
|
+
* that only want the element registered can omit data-fetch-url and place the
|
|
10
|
+
* <aicontextgateway-search> markup themselves.
|
|
11
|
+
*/
|
|
12
|
+
(function () {
|
|
13
|
+
var current = document.currentScript;
|
|
14
|
+
|
|
15
|
+
if (!current) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
var base = current.src.replace(/[^/]*$/, '');
|
|
20
|
+
var bundle = document.createElement('script');
|
|
21
|
+
bundle.src = base + 'aicontextgateway-search.iife.js';
|
|
22
|
+
bundle.defer = true;
|
|
23
|
+
|
|
24
|
+
var attrMap = {
|
|
25
|
+
'data-fetch-url': 'fetch-url',
|
|
26
|
+
'data-placeholder': 'placeholder',
|
|
27
|
+
'data-facets': 'facets',
|
|
28
|
+
'data-title-field': 'title-field',
|
|
29
|
+
'data-subtitle-field': 'subtitle-field',
|
|
30
|
+
'data-token': 'token',
|
|
31
|
+
'data-base-url': 'base-url',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
var hasConfig = Object.keys(attrMap).some(function (k) {
|
|
35
|
+
return current.getAttribute(k) != null;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (hasConfig || current.hasAttribute('data-ai-mode')) {
|
|
39
|
+
bundle.addEventListener('load', function () {
|
|
40
|
+
var el = document.createElement('aicontextgateway-search');
|
|
41
|
+
|
|
42
|
+
Object.keys(attrMap).forEach(function (dataKey) {
|
|
43
|
+
var value = current.getAttribute(dataKey);
|
|
44
|
+
if (value != null) {
|
|
45
|
+
el.setAttribute(attrMap[dataKey], value);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
if (current.hasAttribute('data-ai-mode')) {
|
|
50
|
+
el.setAttribute('ai-mode', '');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
current.parentNode.insertBefore(el, current.nextSibling);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
document.head.appendChild(bundle);
|
|
58
|
+
})();
|