@inkeep/cxkit-primitives 0.0.0-dev-20250313015805 → 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 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
  };
@@ -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.25",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.25",
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"});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-20250313015805",
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-20250313015805",
62
- "@inkeep/cxkit-theme": "0.0.0-dev-20250313015805",
63
- "@inkeep/cxkit-types": "0.0.0-dev-20250313015805"
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",