@inkeep/cxkit-primitives 0.0.0-dev-20250312234650 → 0.0.0-dev-20250313232451

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("react"),M=require("react-markdown"),m=require("rehype-raw"),y=require("../../providers/markdown-provider.cjs"),g=require("../codeblock/index.cjs"),n=require("./components.cjs"),C=require("./rehype-inline-code-property.cjs");const b=({children:c,componentStyles:a,shouldOpenLinksInNewTab:h,onLinkClick:u,onCodeCopy:k,...p})=>{if(!c)return null;const w={h1:({children:r})=>e.jsx(n.MarkdownH1,{children:r}),h2:({children:r})=>e.jsx(n.MarkdownH2,{children:r}),p:({children:r})=>e.jsx(n.MarkdownP,{children:r}),li:({children:r})=>e.jsx(n.MarkdownLi,{children:r}),ul:({children:r})=>e.jsx(n.MarkdownUl,{children:r}),ol:({children:r,node:o})=>{const t=o?.properties?.start;return e.jsx(n.MarkdownOl,{style:{"--start":t?.toString()??"0"},children:r})},a:({children:r,href:o})=>{const t=x.Children.toArray(r),i=t[0],d=typeof i=="string"&&/^\(\d+\)$/.test(i)&&t.length===1,s=d?i.match(/\d+/):r,l=e.jsx(n.MarkdownLink,{isExternal:h,href:o,onClick:()=>{u?.(o,s?.toString())},children:s});return d?e.jsx(n.MarkdownSourceLink,{children:l}):l},img:({src:r,alt:o})=>`![${o||""}](${r||""})`,table:({children:r})=>e.jsx(n.MarkdownTable,{children:r}),th:({children:r,isHeader:o})=>o?e.jsx(n.MarkdownTh,{children:r}):e.jsx(n.MarkdownTd,{children:r}),pre:({children:r})=>e.jsx("pre",{children:r}),code:({children:r,inline:o,className:t})=>o?e.jsx(n.MarkdownCode,{children:r}):e.jsx(g.CodeBlock,{className:t,onCopy:k,children:r})},j=e.jsx(M,{rehypePlugins:[m,C.rehypeInlineCodeProperty],components:w,disallowedElements:f,children:c.toString(),...p});return e.jsx(y.ChatMarkdownProvider,{componentStyles:a,children:j})},f=["script","iframe","frame","embed","meta","base","form","style","object"];exports.Markdown=b;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),x=require("react"),m=require("react-markdown"),M=require("rehype-raw"),y=require("../../providers/markdown-provider.cjs"),g=require("../codeblock/index.cjs"),n=require("./components.cjs"),b=require("./rehype-inline-code-property.cjs");const f=({children:c,componentStyles:a,shouldOpenLinksInNewTab:h,onLinkClick:u,onCodeCopy:k,...p})=>{if(!c)return null;const w={h1:({children:r})=>e.jsx(n.MarkdownH1,{children:r}),h2:({children:r})=>e.jsx(n.MarkdownH2,{children:r}),p:({children:r})=>e.jsx(n.MarkdownP,{children:r}),li:({children:r})=>e.jsx(n.MarkdownLi,{children:r}),ul:({children:r})=>e.jsx(n.MarkdownUl,{children:r}),ol:({children:r,node:o})=>{const t=o?.properties?.start,i=typeof t=="number"?t:void 0;return e.jsx(n.MarkdownOl,{style:{"--start":t?.toString()??"0"},start:i,children:r})},a:({children:r,href:o})=>{const t=x.Children.toArray(r),i=t[0],d=typeof i=="string"&&/^\(\d+\)$/.test(i)&&t.length===1,s=d?i.match(/\d+/):r,l=e.jsx(n.MarkdownLink,{isExternal:h,href:o,onClick:()=>{u?.(o,s?.toString())},children:s});return d?e.jsx(n.MarkdownSourceLink,{children:l}):l},img:({src:r,alt:o})=>`![${o||""}](${r||""})`,table:({children:r})=>e.jsx(n.MarkdownTable,{children:r}),th:({children:r,isHeader:o})=>o?e.jsx(n.MarkdownTh,{children:r}):e.jsx(n.MarkdownTd,{children:r}),pre:({children:r})=>e.jsx("pre",{children:r}),code:({children:r,inline:o,className:t})=>o?e.jsx(n.MarkdownCode,{children:r}):e.jsx(g.CodeBlock,{className:t,onCopy:k,children:r})},j=e.jsx(m,{rehypePlugins:[M,b.rehypeInlineCodeProperty],components:w,disallowedElements:C,children:c.toString(),...p});return e.jsx(y.ChatMarkdownProvider,{componentStyles:a,children:j})},C=["script","iframe","frame","embed","meta","base","form","style","object"];exports.Markdown=f;
@@ -1,12 +1,12 @@
1
- import { jsx as n } from "react/jsx-runtime";
2
- import f from "react";
3
- import u from "react-markdown";
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ import w from "react";
3
+ import f from "react-markdown";
4
4
  import M from "rehype-raw";
5
5
  import { ChatMarkdownProvider as y } from "../../providers/markdown-provider.js";
6
6
  import { CodeBlock as g } from "../codeblock/index.js";
7
- import { MarkdownCode as C, MarkdownTh as b, MarkdownTd as S, MarkdownTable as P, MarkdownSourceLink as x, MarkdownOl as L, MarkdownUl as R, MarkdownLi as T, MarkdownP as $, MarkdownH2 as j, MarkdownH1 as A, MarkdownLink as E } from "./components.js";
8
- import { rehypeInlineCodeProperty as H } from "./rehype-inline-code-property.js";
9
- const F = ({
7
+ import { MarkdownCode as C, MarkdownTh as b, MarkdownTd as S, MarkdownTable as P, MarkdownSourceLink as x, MarkdownOl as L, MarkdownUl as R, MarkdownLi as T, MarkdownP as $, MarkdownH2 as j, MarkdownH1 as v, MarkdownLink as A } from "./components.js";
8
+ import { rehypeInlineCodeProperty as E } from "./rehype-inline-code-property.js";
9
+ const D = ({
10
10
  children: i,
11
11
  componentStyles: a,
12
12
  shouldOpenLinksInNewTab: h,
@@ -16,54 +16,55 @@ const F = ({
16
16
  }) => {
17
17
  if (!i) return null;
18
18
  const k = {
19
- h1: ({ children: r }) => /* @__PURE__ */ n(A, { children: r }),
20
- h2: ({ children: r }) => /* @__PURE__ */ n(j, { children: r }),
21
- p: ({ children: r }) => /* @__PURE__ */ n($, { children: r }),
22
- li: ({ children: r }) => /* @__PURE__ */ n(T, { children: r }),
23
- ul: ({ children: r }) => /* @__PURE__ */ n(R, { children: r }),
24
- ol: ({ children: r, node: e }) => {
25
- const o = e?.properties?.start;
26
- return /* @__PURE__ */ n(
19
+ h1: ({ children: r }) => /* @__PURE__ */ e(v, { children: r }),
20
+ h2: ({ children: r }) => /* @__PURE__ */ e(j, { children: r }),
21
+ p: ({ children: r }) => /* @__PURE__ */ e($, { children: r }),
22
+ li: ({ children: r }) => /* @__PURE__ */ e(T, { children: r }),
23
+ ul: ({ children: r }) => /* @__PURE__ */ e(R, { children: r }),
24
+ ol: ({ children: r, node: n }) => {
25
+ const o = n?.properties?.start, t = typeof o == "number" ? o : void 0;
26
+ return /* @__PURE__ */ e(
27
27
  L,
28
28
  {
29
29
  style: {
30
30
  "--start": o?.toString() ?? "0"
31
31
  },
32
+ start: t,
32
33
  children: r
33
34
  }
34
35
  );
35
36
  },
36
- a: ({ children: r, href: e }) => {
37
- const o = f.Children.toArray(r), t = o[0], d = typeof t == "string" && /^\(\d+\)$/.test(t) && o.length === 1, c = d ? t.match(/\d+/) : r, l = /* @__PURE__ */ n(
38
- E,
37
+ a: ({ children: r, href: n }) => {
38
+ const o = w.Children.toArray(r), t = o[0], d = typeof t == "string" && /^\(\d+\)$/.test(t) && o.length === 1, c = d ? t.match(/\d+/) : r, l = /* @__PURE__ */ e(
39
+ A,
39
40
  {
40
41
  isExternal: h,
41
- href: e,
42
+ href: n,
42
43
  onClick: () => {
43
- s?.(e, c?.toString());
44
+ s?.(n, c?.toString());
44
45
  },
45
46
  children: c
46
47
  }
47
48
  );
48
- return d ? /* @__PURE__ */ n(x, { children: l }) : l;
49
+ return d ? /* @__PURE__ */ e(x, { children: l }) : l;
49
50
  },
50
- img: ({ src: r, alt: e }) => `![${e || ""}](${r || ""})`,
51
- table: ({ children: r }) => /* @__PURE__ */ n(P, { children: r }),
52
- th: ({ children: r, isHeader: e }) => e ? /* @__PURE__ */ n(b, { children: r }) : /* @__PURE__ */ n(S, { children: r }),
53
- pre: ({ children: r }) => /* @__PURE__ */ n("pre", { children: r }),
54
- code: ({ children: r, inline: e, className: o }) => e ? /* @__PURE__ */ n(C, { children: r }) : /* @__PURE__ */ n(g, { className: o, onCopy: m, children: r })
55
- }, w = /* @__PURE__ */ n(
56
- u,
51
+ img: ({ src: r, alt: n }) => `![${n || ""}](${r || ""})`,
52
+ table: ({ children: r }) => /* @__PURE__ */ e(P, { children: r }),
53
+ th: ({ children: r, isHeader: n }) => n ? /* @__PURE__ */ e(b, { children: r }) : /* @__PURE__ */ e(S, { children: r }),
54
+ pre: ({ children: r }) => /* @__PURE__ */ e("pre", { children: r }),
55
+ code: ({ children: r, inline: n, className: o }) => n ? /* @__PURE__ */ e(C, { children: r }) : /* @__PURE__ */ e(g, { className: o, onCopy: m, children: r })
56
+ }, u = /* @__PURE__ */ e(
57
+ f,
57
58
  {
58
- rehypePlugins: [M, H],
59
+ rehypePlugins: [M, E],
59
60
  components: k,
60
- disallowedElements: _,
61
+ disallowedElements: H,
61
62
  children: i.toString(),
62
63
  ...p
63
64
  }
64
65
  );
65
- return /* @__PURE__ */ n(y, { componentStyles: a, children: w });
66
- }, _ = [
66
+ return /* @__PURE__ */ e(y, { componentStyles: a, children: u });
67
+ }, H = [
67
68
  "script",
68
69
  "iframe",
69
70
  "frame",
@@ -75,5 +76,5 @@ const F = ({
75
76
  "object"
76
77
  ];
77
78
  export {
78
- F as Markdown
79
+ D as Markdown
79
80
  };
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("react"),S=require("../../providers/config-provider.cjs"),T=require("../../utils/transform-source/index.cjs"),v=(e,o)=>{const{baseSettings:{transformSource:r,organizationDisplayName:s},searchSettings:{tabs:u,searchQueryParamKey:p,shouldOpenLinksInNewTab:g}}=S.useInkeepConfig();return w.useMemo(()=>{const R=u.length>0?u:["All"],n={},y=new Set,i=R.map(t=>typeof t=="string"?t:t[0]);for(const t of i)n[t]=[];for(const t of e){const a=t.url||"";if(y.has(a))continue;y.add(a);const d=I(a,o,p),c=T.transformInkeepSource({title:t.title,url:d,description:k(t),type:O(t.rootRecord.__typename),tag:D(t),breadcrumbs:t.rootRecord.pathBreadcrumbs??[],contentType:t.rootRecord.contentType},"searchResultItem",{organizationDisplayName:s,tabs:u,transformSource:r}),l={...c,id:t.id,isExternal:c.shouldOpenInNewTab!==void 0?c.shouldOpenInNewTab:g},m=l.tabs||[];for(const f of m){const b=typeof f=="string"?f:f[0];if(!i.includes(b)){console.warn(`Tab "${b}" found in item but not configured in tabs`);continue}n[b].push(l)}i.includes("All")&&n.All.push(l)}for(const t of Object.keys(n)){const a=R.find(c=>typeof c=="string"?c===t:c[0]===t),d=typeof a=="object"?a[1]?.isAlwaysVisible===!0:!1;n[t].length===0&&!d&&delete n[t]}return n},[e,r,s,u,o,p,g])};function I(e,o,r){try{const s=new URL(e);return s.searchParams.set(r,o),s.toString()}catch{return e}}const k=e=>{switch(e.rootRecord.__typename){case"DocumentationRecord":{const o=h(e.pathHeadings?.at(-1)?.content||""),r=h(e.content?.content||"");return e.preview||r||o}case"GitHubIssueRecord":case"StackOverflowRecord":case"DiscourseRecord":return e.rootRecord.body;default:return e.preview}},D=e=>{switch(e.rootRecord.__typename){case"StackOverflowRecord":return e.rootRecord.markedAsCorrectAnswer?"Resolved":void 0;case"GitHubIssueRecord":return e.rootRecord.state==="CLOSED"?"Closed":void 0}},h=e=>{const o=/(https?:\/\/\S+)/g;return e.replace(o,r=>{const s=r.split("/");return s.length>3?`...${s.slice(-2).join("/")}`:r})},O=e=>{switch(e){case"DocumentationRecord":return"documentation";case"GitHubIssueRecord":return"github_issue";case"DiscourseRecord":return"discourse";case"DiscordRecord":return"discord";case"StackOverflowRecord":return"stackoverflow";case"SlackEntry":return"slack_message";default:return"site"}};exports.useTransformResults=v;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("react"),S=require("../../providers/config-provider.cjs"),T=require("../../utils/transform-source/index.cjs"),v=(e,o)=>{const{baseSettings:{transformSource:r,organizationDisplayName:s},searchSettings:{tabs:u,searchQueryParamKey:i,shouldOpenLinksInNewTab:g}}=S.useInkeepConfig();return w.useMemo(()=>{const R=u.length>0?u:["All"],n={},y=new Set,d=R.map(t=>typeof t=="string"?t:t[0]);for(const t of d)n[t]=[];for(const t of e){const c=t.url||"";if(y.has(c))continue;y.add(c);const l=i?I(c,o,i):c,a=T.transformInkeepSource({title:t.title,url:l,description:k(t),type:O(t.rootRecord.__typename),tag:D(t),breadcrumbs:t.rootRecord.pathBreadcrumbs??[],contentType:t.rootRecord.contentType},"searchResultItem",{organizationDisplayName:s,tabs:u,transformSource:r}),f={...a,id:t.id,isExternal:a.shouldOpenInNewTab!==void 0?a.shouldOpenInNewTab:g},m=f.tabs||[];for(const b of m){const p=typeof b=="string"?b:b[0];if(!d.includes(p)){console.warn(`Tab "${p}" found in item but not configured in tabs`);continue}n[p].push(f)}d.includes("All")&&n.All.push(f)}for(const t of Object.keys(n)){const c=R.find(a=>typeof a=="string"?a===t:a[0]===t),l=typeof c=="object"?c[1]?.isAlwaysVisible===!0:!1;n[t].length===0&&!l&&delete n[t]}return n},[e,r,s,u,o,i,g])};function I(e,o,r){try{const s=new URL(e);return s.searchParams.set(r,o),s.toString()}catch{return e}}const k=e=>{switch(e.rootRecord.__typename){case"DocumentationRecord":{const o=h(e.pathHeadings?.at(-1)?.content||""),r=h(e.content?.content||"");return e.preview||r||o}case"GitHubIssueRecord":case"StackOverflowRecord":case"DiscourseRecord":return e.rootRecord.body;default:return e.preview}},D=e=>{switch(e.rootRecord.__typename){case"StackOverflowRecord":return e.rootRecord.markedAsCorrectAnswer?"Resolved":void 0;case"GitHubIssueRecord":return e.rootRecord.state==="CLOSED"?"Closed":void 0}},h=e=>{const o=/(https?:\/\/\S+)/g;return e.replace(o,r=>{const s=r.split("/");return s.length>3?`...${s.slice(-2).join("/")}`:r})},O=e=>{switch(e){case"DocumentationRecord":return"documentation";case"GitHubIssueRecord":return"github_issue";case"DiscourseRecord":return"discourse";case"DiscordRecord":return"discord";case"StackOverflowRecord":return"stackoverflow";case"SlackEntry":return"slack_message";default:return"site"}};exports.useTransformResults=v;
@@ -5,20 +5,20 @@ import { transformInkeepSource as I } from "../../utils/transform-source/index.j
5
5
  const N = (e, r) => {
6
6
  const {
7
7
  baseSettings: { transformSource: o, organizationDisplayName: s },
8
- searchSettings: { tabs: u, searchQueryParamKey: b, shouldOpenLinksInNewTab: g }
8
+ searchSettings: { tabs: u, searchQueryParamKey: i, shouldOpenLinksInNewTab: g }
9
9
  } = S();
10
10
  return w(() => {
11
- const m = u.length > 0 ? u : ["All"], n = {}, R = /* @__PURE__ */ new Set(), i = m.map((t) => typeof t == "string" ? t : t[0]);
12
- for (const t of i)
11
+ const m = u.length > 0 ? u : ["All"], n = {}, R = /* @__PURE__ */ new Set(), d = m.map((t) => typeof t == "string" ? t : t[0]);
12
+ for (const t of d)
13
13
  n[t] = [];
14
14
  for (const t of e) {
15
- const a = t.url || "";
16
- if (R.has(a)) continue;
17
- R.add(a);
18
- const d = T(a, r, b), c = I(
15
+ const c = t.url || "";
16
+ if (R.has(c)) continue;
17
+ R.add(c);
18
+ const l = i ? T(c, r, i) : c, a = I(
19
19
  {
20
20
  title: t.title,
21
- url: d,
21
+ url: l,
22
22
  description: k(t),
23
23
  type: D(t.rootRecord.__typename),
24
24
  tag: v(t),
@@ -27,24 +27,24 @@ const N = (e, r) => {
27
27
  },
28
28
  "searchResultItem",
29
29
  { organizationDisplayName: s, tabs: u, transformSource: o }
30
- ), l = {
31
- ...c,
30
+ ), f = {
31
+ ...a,
32
32
  id: t.id,
33
- isExternal: c.shouldOpenInNewTab !== void 0 ? c.shouldOpenInNewTab : g
34
- }, y = l.tabs || [];
35
- for (const f of y) {
36
- const p = typeof f == "string" ? f : f[0];
37
- if (!i.includes(p)) {
38
- console.warn(`Tab "${p}" found in item but not configured in tabs`);
33
+ isExternal: a.shouldOpenInNewTab !== void 0 ? a.shouldOpenInNewTab : g
34
+ }, y = f.tabs || [];
35
+ for (const p of y) {
36
+ const b = typeof p == "string" ? p : p[0];
37
+ if (!d.includes(b)) {
38
+ console.warn(`Tab "${b}" found in item but not configured in tabs`);
39
39
  continue;
40
40
  }
41
- n[p].push(l);
41
+ n[b].push(f);
42
42
  }
43
- i.includes("All") && n.All.push(l);
43
+ d.includes("All") && n.All.push(f);
44
44
  }
45
45
  for (const t of Object.keys(n)) {
46
- const a = m.find((c) => typeof c == "string" ? c === t : c[0] === t), d = typeof a == "object" ? a[1]?.isAlwaysVisible === !0 : !1;
47
- n[t].length === 0 && !d && delete n[t];
46
+ const c = m.find((a) => typeof a == "string" ? a === t : a[0] === t), l = typeof c == "object" ? c[1]?.isAlwaysVisible === !0 : !1;
47
+ n[t].length === 0 && !l && delete n[t];
48
48
  }
49
49
  return n;
50
50
  }, [
@@ -53,7 +53,7 @@ const N = (e, r) => {
53
53
  s,
54
54
  u,
55
55
  r,
56
- b,
56
+ i,
57
57
  g
58
58
  ]);
59
59
  };
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),X=require("../../providers/config-provider.cjs"),Y=require("../../hooks/use-media-query.cjs"),Z=require("./search-query.graphql.cjs"),ee=require("./transform-results.cjs"),te=require("../../providers/search-events-provider.cjs"),se=require("../../hooks/use-instant-update.cjs"),re=require("../../utils/graphql-client.cjs"),ne=()=>{const{baseSettings:N,searchSettings:O}=X.useInkeepConfig(),{apiKey:S,aiApiBaseUrl:x,userAuthToken:l,filters:R}=N,{maxResults:Q,placeholder:q,defaultQuery:B,debounceTimeMs:C,onQueryChange:H,searchFunctionsRef:$,tabs:i,filters:T}=O,{logEvent:k}=te.useSearchEvents(),[c,v]=t.useState(B),E=t.useRef(null),[M,w]=t.useState(!1),[z,h]=t.useState(null),[D,a]=t.useState("NONE"),K=t.useCallback(e=>{a(e)},[]),[f,d]=t.useState([]),s=ee.useTransformResults(f,c),I=typeof i?.[0]=="string"?i[0]:i[0][0],[y,A]=t.useState(I),{disableTransition:P,disabled:W}=se.useInstantUpdate(),G=t.useCallback(e=>{P(),A(e);const r=s[e][0].id;a(r)},[s,P]);t.useEffect(()=>{let e=y in s?y:Object.keys(s)[0];if(!s[e]?.length){const n=Object.keys(s).find(u=>s[u]?.length);n?e=n:e=I}if(!e)return;A(e);const r=s[e]?.[0];r&&a(r.id)},[s]);const b=Y.useMediaQuery("(max-width: 768px)"),o=t.useRef({}),m=t.useRef(null),g=t.useRef(null);t.useImperativeHandle($,()=>({updateQuery(e){v(e)},focusInput:()=>{E.current?.focus()}}));const U=`${x}/graphql`,_=t.useMemo(()=>({Authorization:`Bearer ${S}`,"Content-Type":"application/json",...l?{"User-Token":l}:{}}),[S,l]),j=t.useCallback(async e=>{m.current&&m.current.abort();const r=new AbortController;m.current=r;try{w(!0),h(null);const u=(await re.graphqlRequest(U,Z.default,{searchInput:e},_))?.search.searchHits;o.current[e.searchQuery]=u,d(u)}catch(n){if(n.name==="AbortError")return;h("Failed to fetch search results. Please try again.")}w(!1)},[U,_]),F=t.useCallback(e=>{const r=o.current[e.searchQuery];k({eventName:"search_query_response_received",properties:{searchQuery:e.searchQuery,totalResults:r?.length}})},[]),L=t.useCallback(e=>{if(g.current&&window.clearTimeout(g.current),!e.searchQuery){d([]),h(null);return}g.current=window.setTimeout(()=>{k({eventName:"search_query_submitted",properties:{searchQuery:e.searchQuery}}),o.current[e.searchQuery]?(d(o.current[e.searchQuery]),F(e)):j(e).then(()=>{F(e)})},C)},[C,j]),p=t.useMemo(()=>({searchQuery:c,filters:{...R,...T,limit:Q}}),[c,Q,R,T]);t.useEffect(()=>{H?.(p.searchQuery),L(p)},[L,p]);const J=t.useCallback(e=>v(e.target.value),[]),V=t.useMemo(()=>q||(b?"Search...":"Search for anything..."),[q,b]);return{results:s,resultsList:f,hasContent:f.length>0||M,loading:M,error:z,query:c,onInput:J,placeholder:V,tab:y,onTabChange:G,selectedItem:D,setSelectedItem:a,onSelectedItemChange:K,transitionsDisabled:W,inputRef:E,isMobile:b}};exports.useInkeepSearch=ne;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),Y=require("../../providers/config-provider.cjs"),Z=require("../../hooks/use-media-query.cjs"),ee=require("./search-query.graphql.cjs"),te=require("./transform-results.cjs"),se=require("../../providers/search-events-provider.cjs"),re=require("../../hooks/use-instant-update.cjs"),ne=require("../../utils/graphql-client.cjs"),ae=()=>{const{baseSettings:O,searchSettings:x}=Y.useInkeepConfig(),{apiKey:R,aiApiBaseUrl:B,userAuthToken:l,filters:Q}=O,{maxResults:q,placeholder:C,defaultQuery:H,debounceTimeMs:T,onQueryChange:$,searchFunctionsRef:z,tabs:i,filters:k}=x,{logEvent:v}=se.useSearchEvents(),[a,E]=t.useState(H),M=t.useRef(null),[w,h]=t.useState(!1),[D,f]=t.useState(null),[K,c]=t.useState("NONE"),W=t.useCallback(e=>{c(e)},[]),[d,y]=t.useState([]),s=te.useTransformResults(d,a),I=typeof i?.[0]=="string"?i[0]:i[0][0],[b,A]=t.useState(I),{disableTransition:P,disabled:G}=re.useInstantUpdate(),J=t.useCallback(e=>{P(),A(e);const r=s[e][0].id;c(r)},[s,P]);t.useEffect(()=>{let e=b in s?b:Object.keys(s)[0];if(!s[e]?.length){const n=Object.keys(s).find(u=>s[u]?.length);n?e=n:e=I}if(!e)return;A(e);const r=s[e]?.[0];r&&c(r.id)},[s]);const g=Z.useMediaQuery("(max-width: 768px)"),o=t.useRef({}),m=t.useRef(null),p=t.useRef(null);t.useImperativeHandle(z,()=>({updateQuery(e){E(e)},focusInput:()=>{M.current?.focus()}}));const U=`${B}/graphql`,_=t.useMemo(()=>({Authorization:`Bearer ${R}`,"Content-Type":"application/json",...l?{"User-Token":l}:{}}),[R,l]),j=t.useCallback(async e=>{const r=new AbortController;m.current=r;try{f(null);const u=(await ne.graphqlRequest(U,ee.default,{searchInput:e},_,r.signal))?.search.searchHits;o.current[e.searchQuery]=u,y(u)}catch(n){if(n.name==="AbortError")return;f("Failed to fetch search results. Please try again.")}finally{h(!1)}},[U,_]),F=t.useCallback(e=>{const r=o.current[e.searchQuery];v({eventName:"search_query_response_received",properties:{searchQuery:e.searchQuery,totalResults:r?.length}})},[]),L=()=>{m.current&&(m.current.abort(),h(!1))},N=t.useCallback(e=>{if(p.current&&window.clearTimeout(p.current),!e.searchQuery){L(),y([]),f(null);return}p.current=window.setTimeout(()=>{L(),v({eventName:"search_query_submitted",properties:{searchQuery:e.searchQuery}}),o.current[e.searchQuery]?(y(o.current[e.searchQuery]),F(e)):(h(!0),j(e).then(()=>{F(e)}))},T)},[T,j]),S=t.useMemo(()=>({searchQuery:a,filters:{...Q,...k,limit:q}}),[a,q,Q,k]);t.useEffect(()=>{$?.(S.searchQuery),N(S)},[N,S]);const V=t.useCallback(e=>E(e.target.value),[]),X=t.useMemo(()=>C||(g?"Search...":"Search for anything..."),[C,g]);return{results:s,resultsList:d,hasContent:d.length>0||w,loading:w,error:D,query:a,onInput:V,placeholder:X,tab:b,onTabChange:J,selectedItem:K,setSelectedItem:c,onSelectedItemChange:W,transitionsDisabled:G,inputRef:M,isMobile:g}};exports.useInkeepSearch=ae;
@@ -1,25 +1,25 @@
1
1
  "use client";
2
- import { useState as s, useRef as l, useCallback as n, useEffect as H, useImperativeHandle as te, useMemo as T } from "react";
3
- import { useInkeepConfig as re } from "../../providers/config-provider.js";
4
- import { useMediaQuery as se } from "../../hooks/use-media-query.js";
5
- import ne from "./search-query.graphql.js";
6
- import { useTransformResults as oe } from "./transform-results.js";
7
- import { useSearchEvents as ce } from "../../providers/search-events-provider.js";
8
- import { useInstantUpdate as ae } from "../../hooks/use-instant-update.js";
9
- import { graphqlRequest as ie } from "../../utils/graphql-client.js";
10
- const be = () => {
11
- const { baseSettings: P, searchSettings: $ } = re(), { apiKey: S, aiApiBaseUrl: z, userAuthToken: h, filters: C } = P, {
12
- maxResults: v,
13
- placeholder: k,
14
- defaultQuery: D,
15
- debounceTimeMs: w,
16
- onQueryChange: K,
17
- searchFunctionsRef: W,
2
+ import { useState as s, useRef as u, useCallback as n, useEffect as P, useImperativeHandle as re, useMemo as S } from "react";
3
+ import { useInkeepConfig as se } from "../../providers/config-provider.js";
4
+ import { useMediaQuery as ne } from "../../hooks/use-media-query.js";
5
+ import oe from "./search-query.graphql.js";
6
+ import { useTransformResults as ce } from "./transform-results.js";
7
+ import { useSearchEvents as ae } from "../../providers/search-events-provider.js";
8
+ import { useInstantUpdate as ie } from "../../hooks/use-instant-update.js";
9
+ import { graphqlRequest as le } from "../../utils/graphql-client.js";
10
+ const ge = () => {
11
+ const { baseSettings: $, searchSettings: z } = se(), { apiKey: C, aiApiBaseUrl: D, userAuthToken: h, filters: v } = $, {
12
+ maxResults: k,
13
+ placeholder: w,
14
+ defaultQuery: K,
15
+ debounceTimeMs: q,
16
+ onQueryChange: W,
17
+ searchFunctionsRef: G,
18
18
  tabs: f,
19
- filters: q
20
- } = $, { logEvent: E } = ce(), [c, A] = s(D), I = l(null), [_, x] = s(!1), [G, m] = s(null), [J, a] = s("NONE"), V = n((e) => {
19
+ filters: E
20
+ } = z, { logEvent: A } = ae(), [c, I] = s(K), _ = u(null), [x, m] = s(!1), [J, d] = s(null), [V, a] = s("NONE"), X = n((e) => {
21
21
  a(e);
22
- }, []), [d, p] = s([]), t = oe(d, c), F = typeof f?.[0] == "string" ? f[0] : f[0][0], [y, L] = s(F), { disableTransition: M, disabled: X } = ae(), Y = n(
22
+ }, []), [y, p] = s([]), t = ce(y, c), F = typeof f?.[0] == "string" ? f[0] : f[0][0], [b, L] = s(F), { disableTransition: M, disabled: Y } = ie(), Z = n(
23
23
  (e) => {
24
24
  M(), L(e);
25
25
  const r = t[e][0].id;
@@ -27,10 +27,10 @@ const be = () => {
27
27
  },
28
28
  [t, M]
29
29
  );
30
- H(() => {
31
- let e = y in t ? y : Object.keys(t)[0];
30
+ P(() => {
31
+ let e = b in t ? b : Object.keys(t)[0];
32
32
  if (!t[e]?.length) {
33
- const o = Object.keys(t).find((u) => t[u]?.length);
33
+ const o = Object.keys(t).find((l) => t[l]?.length);
34
34
  o ? e = o : e = F;
35
35
  }
36
36
  if (!e) return;
@@ -38,106 +38,114 @@ const be = () => {
38
38
  const r = t[e]?.[0];
39
39
  r && a(r.id);
40
40
  }, [t]);
41
- const b = se("(max-width: 768px)"), i = l({}), g = l(null), Q = l(null);
42
- te(W, () => ({
41
+ const g = ne("(max-width: 768px)"), i = u({}), Q = u(null), R = u(null);
42
+ re(G, () => ({
43
43
  updateQuery(e) {
44
- A(e);
44
+ I(e);
45
45
  },
46
46
  focusInput: () => {
47
- I.current?.focus();
47
+ _.current?.focus();
48
48
  }
49
49
  }));
50
- const N = `${z}/graphql`, U = T(
50
+ const N = `${D}/graphql`, U = S(
51
51
  () => ({
52
- Authorization: `Bearer ${S}`,
52
+ Authorization: `Bearer ${C}`,
53
53
  "Content-Type": "application/json",
54
54
  ...h ? { "User-Token": h } : {}
55
55
  }),
56
- [S, h]
56
+ [C, h]
57
57
  ), j = n(
58
58
  async (e) => {
59
- g.current && g.current.abort();
60
59
  const r = new AbortController();
61
- g.current = r;
60
+ Q.current = r;
62
61
  try {
63
- x(!0), m(null);
64
- const u = (await ie(N, ne, { searchInput: e }, U))?.search.searchHits;
65
- i.current[e.searchQuery] = u, p(u);
62
+ d(null);
63
+ const l = (await le(
64
+ N,
65
+ oe,
66
+ { searchInput: e },
67
+ U,
68
+ r.signal
69
+ ))?.search.searchHits;
70
+ i.current[e.searchQuery] = l, p(l);
66
71
  } catch (o) {
67
72
  if (o.name === "AbortError")
68
73
  return;
69
- m("Failed to fetch search results. Please try again.");
74
+ d("Failed to fetch search results. Please try again.");
75
+ } finally {
76
+ m(!1);
70
77
  }
71
- x(!1);
72
78
  },
73
79
  [N, U]
74
80
  ), O = n((e) => {
75
81
  const r = i.current[e.searchQuery];
76
- E({
82
+ A({
77
83
  eventName: "search_query_response_received",
78
84
  properties: {
79
85
  searchQuery: e.searchQuery,
80
86
  totalResults: r?.length
81
87
  }
82
88
  });
83
- }, []), B = n(
89
+ }, []), B = () => {
90
+ Q.current && (Q.current.abort(), m(!1));
91
+ }, H = n(
84
92
  (e) => {
85
- if (Q.current && window.clearTimeout(Q.current), !e.searchQuery) {
86
- p([]), m(null);
93
+ if (R.current && window.clearTimeout(R.current), !e.searchQuery) {
94
+ B(), p([]), d(null);
87
95
  return;
88
96
  }
89
- Q.current = window.setTimeout(() => {
90
- E({
97
+ R.current = window.setTimeout(() => {
98
+ B(), A({
91
99
  eventName: "search_query_submitted",
92
100
  properties: {
93
101
  searchQuery: e.searchQuery
94
102
  }
95
- }), i.current[e.searchQuery] ? (p(i.current[e.searchQuery]), O(e)) : j(e).then(() => {
103
+ }), i.current[e.searchQuery] ? (p(i.current[e.searchQuery]), O(e)) : (m(!0), j(e).then(() => {
96
104
  O(e);
97
- });
98
- }, w);
105
+ }));
106
+ }, q);
99
107
  },
100
- [w, j]
101
- ), R = T(
108
+ [q, j]
109
+ ), T = S(
102
110
  () => ({
103
111
  searchQuery: c,
104
112
  filters: {
105
- ...C,
106
- ...q,
107
- limit: v
113
+ ...v,
114
+ ...E,
115
+ limit: k
108
116
  }
109
117
  }),
110
- [c, v, C, q]
118
+ [c, k, v, E]
111
119
  );
112
- H(() => {
113
- K?.(R.searchQuery), B(R);
114
- }, [B, R]);
115
- const Z = n(
116
- (e) => A(e.target.value),
120
+ P(() => {
121
+ W?.(T.searchQuery), H(T);
122
+ }, [H, T]);
123
+ const ee = n(
124
+ (e) => I(e.target.value),
117
125
  []
118
- ), ee = T(
119
- () => k || (b ? "Search..." : "Search for anything..."),
120
- [k, b]
126
+ ), te = S(
127
+ () => w || (g ? "Search..." : "Search for anything..."),
128
+ [w, g]
121
129
  );
122
130
  return {
123
131
  results: t,
124
- resultsList: d,
125
- hasContent: d.length > 0 || _,
126
- loading: _,
127
- error: G,
132
+ resultsList: y,
133
+ hasContent: y.length > 0 || x,
134
+ loading: x,
135
+ error: J,
128
136
  query: c,
129
- onInput: Z,
130
- placeholder: ee,
131
- tab: y,
132
- onTabChange: Y,
133
- selectedItem: J,
137
+ onInput: ee,
138
+ placeholder: te,
139
+ tab: b,
140
+ onTabChange: Z,
141
+ selectedItem: V,
134
142
  setSelectedItem: a,
135
- onSelectedItemChange: V,
136
- transitionsDisabled: X,
137
- inputRef: I,
138
- isMobile: b
143
+ onSelectedItemChange: X,
144
+ transitionsDisabled: Y,
145
+ inputRef: _,
146
+ isMobile: g
139
147
  };
140
148
  };
141
149
  export {
142
- be as useInkeepSearch
150
+ ge as useInkeepSearch
143
151
  };
package/dist/index.d.cts CHANGED
@@ -1015,7 +1015,6 @@ declare const defaultInkeepSearchSettings: {
1015
1015
  defaultQuery: string;
1016
1016
  debounceTimeMs: number;
1017
1017
  tabs: string[];
1018
- searchQueryParamKey: string;
1019
1018
  placeholder: string;
1020
1019
  };
1021
1020
 
package/dist/index.d.ts CHANGED
@@ -1015,7 +1015,6 @@ declare const defaultInkeepSearchSettings: {
1015
1015
  defaultQuery: string;
1016
1016
  debounceTimeMs: number;
1017
1017
  tabs: string[];
1018
- searchQueryParamKey: string;
1019
1018
  placeholder: string;
1020
1019
  };
1021
1020
 
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("react/jsx-runtime"),t=require("react"),y=require("../atoms/api/analytics/events.cjs"),B=require("./config-provider.cjs"),b=require("./user-provider.cjs"),p=t.createContext(void 0),f=({children:e})=>{const{baseSettings:s,componentType:n}=B.useInkeepConfig(),{apiKey:o,analyticsApiBaseUrl:r,tags:i,privacyPreferences:d,env:E}=s,{userProperties:c}=b.useUser(),a=t.useMemo(()=>({widgetLibraryVersion:"0.5.24",componentType:n,tags:i}),[n,i]),u=!d.optOutAllAnalytics&&E!=="development",g={logEvent:t.useCallback(async v=>{const m={...a,...v.properties},l={eventName:v.eventName,properties:m,userProperties:c};u&&y.logEvent(l,o,r),s.onEvent?.(l)},[u,s,o,r,c,a])};return P.jsx(p.Provider,{value:g,children:e})},x=()=>{const e=t.useContext(p);if(!e)throw new Error("useBaseEvents must be used within a BaseEventsProvider");return e};exports.BaseEventsProvider=f;exports.useBaseEvents=x;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("react/jsx-runtime"),t=require("react"),y=require("../atoms/api/analytics/events.cjs"),B=require("./config-provider.cjs"),b=require("./user-provider.cjs"),p=t.createContext(void 0),f=({children:e})=>{const{baseSettings:s,componentType:n}=B.useInkeepConfig(),{apiKey:o,analyticsApiBaseUrl:r,tags:i,privacyPreferences:d,env:E}=s,{userProperties:c}=b.useUser(),a=t.useMemo(()=>({widgetLibraryVersion:"0.5.26",componentType:n,tags:i}),[n,i]),u=!d.optOutAllAnalytics&&E!=="development",g={logEvent:t.useCallback(async v=>{const m={...a,...v.properties},l={eventName:v.eventName,properties:m,userProperties:c};u&&y.logEvent(l,o,r),s.onEvent?.(l)},[u,s,o,r,c,a])};return P.jsx(p.Provider,{value:g,children:e})},x=()=>{const e=t.useContext(p);if(!e)throw new Error("useBaseEvents must be used within a BaseEventsProvider");return e};exports.BaseEventsProvider=f;exports.useBaseEvents=x;
@@ -7,7 +7,7 @@ import { useUser as b } from "./user-provider.js";
7
7
  const m = x(void 0), U = ({ children: e }) => {
8
8
  const { baseSettings: t, componentType: o } = C(), { apiKey: n, analyticsApiBaseUrl: s, tags: r, privacyPreferences: u, env: l } = t, { userProperties: i } = b(), a = d(
9
9
  () => ({
10
- widgetLibraryVersion: "0.5.24",
10
+ widgetLibraryVersion: "0.5.26",
11
11
  componentType: o,
12
12
  tags: r
13
13
  }),
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@inkeep/cxkit-theme"),t=require("./tools/links-schema.cjs"),s={model:"inkeep-qa-expert",placeholder:"How do I get started?",aiAssistantName:void 0,shouldOpenLinksInNewTab:!0,disclaimerSettings:{isEnabled:!1,label:"Usage policy"},isShareButtonVisible:!1,isViewOnly:!1,exampleQuestionsLabel:"Example questions",exampleQuestions:[],isFirstExampleQuestionHighlighted:!0,isCopyChatButtonVisible:!1,getHelpOptions:[],workflowsHeader:"Workflows",workflows:[],toolbarButtonLabels:{clear:"Clear",share:"Share",getHelp:"Get help",stop:"Stop",copyChat:"Copy"},prompts:[],tools:[{type:"function",function:{name:"provideLinks",description:"Provides links",parameters:t.linksSchema}}],onToolCall:l=>{}},a={env:"production",apiKey:"",aiApiBaseUrl:"https://api.inkeep.com",analyticsApiBaseUrl:"https://api.io.inkeep.com",shouldBypassCaptcha:!1,privacyPreferences:{optOutAnalyticalCookies:!1,optOutAllAnalytics:!1,optOutFunctionalCookies:!1},tags:[],userProperties:{},primaryBrandColor:e.DEFAULT_PRIMARY_BRAND_COLOR,theme:{varsClassName:"inkeep-widget-vars",...e.theme}},i={shouldOpenLinksInNewTab:!1,maxResults:40,defaultQuery:"",debounceTimeMs:0,tabs:["All","Publications","PDFs","GitHub","Forums","Discord","Slack","StackOverflow"],searchQueryParamKey:"q",placeholder:"Search for anything..."};exports.defaultInkeepAIChatSettings=s;exports.defaultInkeepBaseSettings=a;exports.defaultInkeepSearchSettings=i;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@inkeep/cxkit-theme"),t=require("./tools/links-schema.cjs"),s={model:"inkeep-qa-expert",placeholder:"How do I get started?",aiAssistantName:void 0,shouldOpenLinksInNewTab:!0,disclaimerSettings:{isEnabled:!1,label:"Usage policy"},isShareButtonVisible:!1,isViewOnly:!1,exampleQuestionsLabel:"Example questions",exampleQuestions:[],isFirstExampleQuestionHighlighted:!0,isCopyChatButtonVisible:!1,getHelpOptions:[],workflowsHeader:"Workflows",workflows:[],toolbarButtonLabels:{clear:"Clear",share:"Share",getHelp:"Get help",stop:"Stop",copyChat:"Copy"},prompts:[],tools:[{type:"function",function:{name:"provideLinks",description:"Provides links",parameters:t.linksSchema}}],onToolCall:l=>{}},a={env:"production",apiKey:"",aiApiBaseUrl:"https://api.inkeep.com",analyticsApiBaseUrl:"https://api.io.inkeep.com",shouldBypassCaptcha:!1,privacyPreferences:{optOutAnalyticalCookies:!1,optOutAllAnalytics:!1,optOutFunctionalCookies:!1},tags:[],userProperties:{},primaryBrandColor:e.DEFAULT_PRIMARY_BRAND_COLOR,theme:{varsClassName:"inkeep-widget-vars",...e.theme}},i={shouldOpenLinksInNewTab:!1,maxResults:40,defaultQuery:"",debounceTimeMs:0,tabs:["All","Publications","PDFs","GitHub","Forums","Discord","Slack","StackOverflow"],placeholder:"Search for anything..."};exports.defaultInkeepAIChatSettings=s;exports.defaultInkeepBaseSettings=a;exports.defaultInkeepSearchSettings=i;
@@ -61,17 +61,16 @@ const i = {
61
61
  varsClassName: "inkeep-widget-vars",
62
62
  ...e
63
63
  }
64
- }, r = {
64
+ }, p = {
65
65
  shouldOpenLinksInNewTab: !1,
66
66
  maxResults: 40,
67
67
  defaultQuery: "",
68
68
  debounceTimeMs: 0,
69
69
  tabs: ["All", "Publications", "PDFs", "GitHub", "Forums", "Discord", "Slack", "StackOverflow"],
70
- searchQueryParamKey: "q",
71
70
  placeholder: "Search for anything..."
72
71
  };
73
72
  export {
74
73
  i as defaultInkeepAIChatSettings,
75
74
  n as defaultInkeepBaseSettings,
76
- r as defaultInkeepSearchSettings
75
+ p as defaultInkeepSearchSettings
77
76
  };
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});async function a(r,s,o,n){const e=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...n},body:JSON.stringify({query:s,variables:o})});if(!e.ok)throw new Error(`Network response was not OK (status: ${e.status})`);const t=await e.json();if(t.errors?.length)throw new Error(t.errors[0].message);return t.data}exports.graphqlRequest=a;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});async function i(r,s,o,n,a){const e=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...n},signal:a,body:JSON.stringify({query:s,variables:o})});if(!e.ok)throw new Error(`Network response was not OK (status: ${e.status})`);const t=await e.json();if(t.errors?.length)throw new Error(t.errors[0].message);return t.data}exports.graphqlRequest=i;
@@ -1,11 +1,12 @@
1
1
  "use client";
2
- async function a(r, s, o, n) {
2
+ async function i(r, s, o, n, a) {
3
3
  const t = await fetch(r, {
4
4
  method: "POST",
5
5
  headers: {
6
6
  "Content-Type": "application/json",
7
7
  ...n
8
8
  },
9
+ signal: a,
9
10
  body: JSON.stringify({
10
11
  query: s,
11
12
  variables: o
@@ -19,5 +20,5 @@ async function a(r, s, o, n) {
19
20
  return e.data;
20
21
  }
21
22
  export {
22
- a as graphqlRequest
23
+ i as graphqlRequest
23
24
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkeep/cxkit-primitives",
3
- "version": "0.0.0-dev-20250312234650",
3
+ "version": "0.0.0-dev-20250313232451",
4
4
  "description": "",
5
5
  "license": "Inkeep, Inc. Customer License (IICL) v1.1",
6
6
  "homepage": "",
@@ -58,9 +58,9 @@
58
58
  "rehype-raw": "7.0.0",
59
59
  "unist-util-visit": "^5.0.0",
60
60
  "use-sync-external-store": "^1.4.0",
61
- "@inkeep/cxkit-color-mode": "0.0.0-dev-20250312234650",
62
- "@inkeep/cxkit-theme": "0.0.0-dev-20250312234650",
63
- "@inkeep/cxkit-types": "0.0.0-dev-20250312234650"
61
+ "@inkeep/cxkit-color-mode": "0.0.0-dev-20250313232451",
62
+ "@inkeep/cxkit-theme": "0.0.0-dev-20250313232451",
63
+ "@inkeep/cxkit-types": "0.0.0-dev-20250313232451"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@biomejs/biome": "1.9.4",