@auticlabs/bulut 1.2.3 → 1.3.0

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/dist/index.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  'use client';
2
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react");function t({projectId:t,backendBaseUrl:r}){const n=e.useRef(null),s=e.useRef(`bulut-${Math.random().toString(36).slice(2,9)}`);return e.useEffect(()=>{const e=n.current;if(!e)return;const u=s.current;e.id=u;let o,c=!1;return(async()=>{const e=await Promise.resolve().then(()=>require("./embed.cjs"));c||(e.init({containerId:u,projectId:t,backendBaseUrl:r}),o=()=>e.destroy())})(),()=>{c=!0,null==o||o()}},[t,r]),e.createElement("div",{ref:n})}exports.Bulut=t,exports.default=t;
2
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react");function t({projectId:t,backendBaseUrl:r}){const n=e.useRef(null),s=e.useRef(`bulut-${Math.random().toString(36).slice(2,9)}`);return e.useEffect(()=>{const e=n.current;if(!e)return;const o=s.current;e.id=o;let u,c=!1;return(async()=>{const e=await Promise.resolve().then(()=>require("./embed.cjs"));c||(e.init({containerId:o,projectId:t,backendBaseUrl:r}),u=()=>e.destroy())})(),()=>{c=!0,u?.()}},[t,r]),e.createElement("div",{ref:n})}exports.Bulut=t,exports.default=t;
3
3
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/react.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { createElement, useEffect, useRef } from 'react';\r\n\r\nexport interface BulutProps {\r\n /** The project ID for your Bulut instance (required). */\r\n projectId: string;\r\n /** Backend API URL. Defaults to `\"https://api.bulut.lu\"`. */\r\n backendBaseUrl?: string;\r\n}\r\n\r\n/**\r\n * `<Bulut>` – drop-in React / Next.js chatbot widget.\r\n *\r\n * Renders the Bulut floating chat widget inside a Shadow DOM container\r\n * so its styles never leak into your application.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { Bulut } from 'bulut';\r\n *\r\n * export default function Page() {\r\n * return <Bulut projectId=\"proj_abc123\" />;\r\n * }\r\n * ```\r\n */\r\nexport function Bulut({\r\n projectId,\r\n backendBaseUrl,\r\n}: BulutProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const containerIdRef = useRef(\r\n `bulut-${Math.random().toString(36).slice(2, 9)}`,\r\n );\r\n\r\n useEffect(() => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n\r\n const containerId = containerIdRef.current;\r\n el.id = containerId;\r\n\r\n let destroyed = false;\r\n let cleanup: (() => void) | undefined;\r\n\r\n // Dynamic import keeps the Preact widget code out of the SSR bundle\r\n // and avoids `window`/`document` references at import time.\r\n (async () => {\r\n const mod = await import('./index');\r\n if (destroyed) return;\r\n\r\n mod.init({\r\n containerId,\r\n projectId,\r\n backendBaseUrl,\r\n });\r\n\r\n cleanup = () => mod.destroy();\r\n })();\r\n\r\n return () => {\r\n destroyed = true;\r\n cleanup?.();\r\n };\r\n }, [projectId, backendBaseUrl]);\r\n\r\n // Plain createElement – no JSX – so this file stays free of the\r\n // Preact JSX transform and keeps real React imports.\r\n return createElement('div', { ref: containerRef });\r\n}\r\n\r\nexport default Bulut;\r\n"],"names":["Bulut","projectId","backendBaseUrl","containerRef","useRef","containerIdRef","Math","random","toString","slice","useEffect","el","current","containerId","id","cleanup","destroyed","mod","Promise","resolve","then","require","init","destroy","createElement","ref"],"mappings":"qIA0BO,SAASA,GAAMC,UACpBA,EAAAC,eACAA,IAEA,MAAMC,EAAeC,EAAAA,OAAuB,MACtCC,EAAiBD,EAAAA,OACrB,SAASE,KAAKC,SAASC,SAAS,IAAIC,MAAM,EAAG,MAoC/C,OAjCAC,EAAAA,UAAU,KACR,MAAMC,EAAKR,EAAaS,QACxB,IAAKD,EAAI,OAET,MAAME,EAAcR,EAAeO,QACnCD,EAAGG,GAAKD,EAER,IACIE,EADAC,GAAY,EAkBhB,MAbA,WACE,MAAMC,QAAYC,QAAAC,UAAAC,KAAA,IAAAC,QAAO,gBACrBL,IAEJC,EAAIK,KAAK,CACPT,cACAZ,YACAC,mBAGFa,EAAU,IAAME,EAAIM,UACtB,EAXA,GAaO,KACLP,GAAY,EACZ,MAAAD,GAAAA,MAED,CAACd,EAAWC,IAIRsB,EAAAA,cAAc,MAAO,CAAEC,IAAKtB,GACrC"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/react.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { createElement, useEffect, useRef } from 'react';\r\n\r\nexport interface BulutProps {\r\n /** The project ID for your Bulut instance (required). */\r\n projectId: string;\r\n /** Backend API URL. Defaults to `\"https://api.bulut.lu\"`. */\r\n backendBaseUrl?: string;\r\n}\r\n\r\n/**\r\n * `<Bulut>` – drop-in React / Next.js chatbot widget.\r\n *\r\n * Renders the Bulut floating chat widget inside a Shadow DOM container\r\n * so its styles never leak into your application.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { Bulut } from 'bulut';\r\n *\r\n * export default function Page() {\r\n * return <Bulut projectId=\"proj_abc123\" />;\r\n * }\r\n * ```\r\n */\r\nexport function Bulut({\r\n projectId,\r\n backendBaseUrl,\r\n}: BulutProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const containerIdRef = useRef(\r\n `bulut-${Math.random().toString(36).slice(2, 9)}`,\r\n );\r\n\r\n useEffect(() => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n\r\n const containerId = containerIdRef.current;\r\n el.id = containerId;\r\n\r\n let destroyed = false;\r\n let cleanup: (() => void) | undefined;\r\n\r\n // Dynamic import keeps the Preact widget code out of the SSR bundle\r\n // and avoids `window`/`document` references at import time.\r\n (async () => {\r\n const mod = await import('./index');\r\n if (destroyed) return;\r\n\r\n mod.init({\r\n containerId,\r\n projectId,\r\n backendBaseUrl,\r\n });\r\n\r\n cleanup = () => mod.destroy();\r\n })();\r\n\r\n return () => {\r\n destroyed = true;\r\n cleanup?.();\r\n };\r\n }, [projectId, backendBaseUrl]);\r\n\r\n // Plain createElement – no JSX – so this file stays free of the\r\n // Preact JSX transform and keeps real React imports.\r\n return createElement('div', { ref: containerRef });\r\n}\r\n\r\nexport default Bulut;\r\n"],"names":["Bulut","projectId","backendBaseUrl","containerRef","useRef","containerIdRef","Math","random","toString","slice","useEffect","el","current","containerId","id","cleanup","destroyed","mod","Promise","resolve","then","require","init","destroy","createElement","ref"],"mappings":"qIA0BO,SAASA,GAAMC,UACpBA,EAAAC,eACAA,IAEA,MAAMC,EAAeC,EAAAA,OAAuB,MACtCC,EAAiBD,EAAAA,OACrB,SAASE,KAAKC,SAASC,SAAS,IAAIC,MAAM,EAAG,MAoC/C,OAjCAC,EAAAA,UAAU,KACR,MAAMC,EAAKR,EAAaS,QACxB,IAAKD,EAAI,OAET,MAAME,EAAcR,EAAeO,QACnCD,EAAGG,GAAKD,EAER,IACIE,EADAC,GAAY,EAkBhB,MAbA,WACE,MAAMC,QAAYC,QAAAC,UAAAC,KAAA,IAAAC,QAAO,gBACrBL,IAEJC,EAAIK,KAAK,CACPT,cACAZ,YACAC,mBAGFa,EAAU,IAAME,EAAIM,UACtB,EAXA,GAaO,KACLP,GAAY,EACZD,QAED,CAACd,EAAWC,IAIRsB,EAAAA,cAAc,MAAO,CAAEC,IAAKtB,GACrC"}
package/dist/index.js CHANGED
@@ -1,39 +1,3 @@
1
1
  'use client';
2
- import { useRef, useEffect, createElement } from "react";
3
- function Bulut({
4
- projectId,
5
- backendBaseUrl
6
- }) {
7
- const containerRef = useRef(null);
8
- const containerIdRef = useRef(
9
- `bulut-${Math.random().toString(36).slice(2, 9)}`
10
- );
11
- useEffect(() => {
12
- const el = containerRef.current;
13
- if (!el) return;
14
- const containerId = containerIdRef.current;
15
- el.id = containerId;
16
- let destroyed = false;
17
- let cleanup;
18
- (async () => {
19
- const mod = await import("./embed.js");
20
- if (destroyed) return;
21
- mod.init({
22
- containerId,
23
- projectId,
24
- backendBaseUrl
25
- });
26
- cleanup = () => mod.destroy();
27
- })();
28
- return () => {
29
- destroyed = true;
30
- cleanup == null ? void 0 : cleanup();
31
- };
32
- }, [projectId, backendBaseUrl]);
33
- return createElement("div", { ref: containerRef });
34
- }
35
- export {
36
- Bulut,
37
- Bulut as default
38
- };
2
+ import{useRef as t,useEffect as r,createElement as e}from"react";function n({projectId:n,backendBaseUrl:c}){const o=t(null),a=t(`bulut-${Math.random().toString(36).slice(2,9)}`);return r(()=>{const t=o.current;if(!t)return;const r=a.current;t.id=r;let e,i=!1;return(async()=>{const t=await import("./embed.js");i||(t.init({containerId:r,projectId:n,backendBaseUrl:c}),e=()=>t.destroy())})(),()=>{i=!0,e?.()}},[n,c]),e("div",{ref:o})}export{n as Bulut,n as default};
39
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/react.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { createElement, useEffect, useRef } from 'react';\r\n\r\nexport interface BulutProps {\r\n /** The project ID for your Bulut instance (required). */\r\n projectId: string;\r\n /** Backend API URL. Defaults to `\"https://api.bulut.lu\"`. */\r\n backendBaseUrl?: string;\r\n}\r\n\r\n/**\r\n * `<Bulut>` – drop-in React / Next.js chatbot widget.\r\n *\r\n * Renders the Bulut floating chat widget inside a Shadow DOM container\r\n * so its styles never leak into your application.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { Bulut } from 'bulut';\r\n *\r\n * export default function Page() {\r\n * return <Bulut projectId=\"proj_abc123\" />;\r\n * }\r\n * ```\r\n */\r\nexport function Bulut({\r\n projectId,\r\n backendBaseUrl,\r\n}: BulutProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const containerIdRef = useRef(\r\n `bulut-${Math.random().toString(36).slice(2, 9)}`,\r\n );\r\n\r\n useEffect(() => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n\r\n const containerId = containerIdRef.current;\r\n el.id = containerId;\r\n\r\n let destroyed = false;\r\n let cleanup: (() => void) | undefined;\r\n\r\n // Dynamic import keeps the Preact widget code out of the SSR bundle\r\n // and avoids `window`/`document` references at import time.\r\n (async () => {\r\n const mod = await import('./index');\r\n if (destroyed) return;\r\n\r\n mod.init({\r\n containerId,\r\n projectId,\r\n backendBaseUrl,\r\n });\r\n\r\n cleanup = () => mod.destroy();\r\n })();\r\n\r\n return () => {\r\n destroyed = true;\r\n cleanup?.();\r\n };\r\n }, [projectId, backendBaseUrl]);\r\n\r\n // Plain createElement – no JSX – so this file stays free of the\r\n // Preact JSX transform and keeps real React imports.\r\n return createElement('div', { ref: containerRef });\r\n}\r\n\r\nexport default Bulut;\r\n"],"names":[],"mappings":";AA0BO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AACF,GAAe;AACb,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,iBAAiB;AAAA,IACrB,SAAS,KAAK,SAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,EAAA;AAGjD,YAAU,MAAM;AACd,UAAM,KAAK,aAAa;AACxB,QAAI,CAAC,GAAI;AAET,UAAM,cAAc,eAAe;AACnC,OAAG,KAAK;AAER,QAAI,YAAY;AAChB,QAAI;AAIJ,KAAC,YAAY;AACX,YAAM,MAAM,MAAM,OAAO,YAAS;AAClC,UAAI,UAAW;AAEf,UAAI,KAAK;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAED,gBAAU,MAAM,IAAI,QAAA;AAAA,IACtB,GAAA;AAEA,WAAO,MAAM;AACX,kBAAY;AACZ;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAW,cAAc,CAAC;AAI9B,SAAO,cAAc,OAAO,EAAE,KAAK,cAAc;AACnD;"}
1
+ {"version":3,"file":"index.js","sources":["../src/react.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { createElement, useEffect, useRef } from 'react';\r\n\r\nexport interface BulutProps {\r\n /** The project ID for your Bulut instance (required). */\r\n projectId: string;\r\n /** Backend API URL. Defaults to `\"https://api.bulut.lu\"`. */\r\n backendBaseUrl?: string;\r\n}\r\n\r\n/**\r\n * `<Bulut>` – drop-in React / Next.js chatbot widget.\r\n *\r\n * Renders the Bulut floating chat widget inside a Shadow DOM container\r\n * so its styles never leak into your application.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { Bulut } from 'bulut';\r\n *\r\n * export default function Page() {\r\n * return <Bulut projectId=\"proj_abc123\" />;\r\n * }\r\n * ```\r\n */\r\nexport function Bulut({\r\n projectId,\r\n backendBaseUrl,\r\n}: BulutProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const containerIdRef = useRef(\r\n `bulut-${Math.random().toString(36).slice(2, 9)}`,\r\n );\r\n\r\n useEffect(() => {\r\n const el = containerRef.current;\r\n if (!el) return;\r\n\r\n const containerId = containerIdRef.current;\r\n el.id = containerId;\r\n\r\n let destroyed = false;\r\n let cleanup: (() => void) | undefined;\r\n\r\n // Dynamic import keeps the Preact widget code out of the SSR bundle\r\n // and avoids `window`/`document` references at import time.\r\n (async () => {\r\n const mod = await import('./index');\r\n if (destroyed) return;\r\n\r\n mod.init({\r\n containerId,\r\n projectId,\r\n backendBaseUrl,\r\n });\r\n\r\n cleanup = () => mod.destroy();\r\n })();\r\n\r\n return () => {\r\n destroyed = true;\r\n cleanup?.();\r\n };\r\n }, [projectId, backendBaseUrl]);\r\n\r\n // Plain createElement – no JSX – so this file stays free of the\r\n // Preact JSX transform and keeps real React imports.\r\n return createElement('div', { ref: containerRef });\r\n}\r\n\r\nexport default Bulut;\r\n"],"names":["Bulut","projectId","backendBaseUrl","containerRef","useRef","containerIdRef","Math","random","toString","slice","useEffect","el","current","containerId","id","cleanup","destroyed","mod","import","init","destroy","createElement","ref"],"mappings":"iEA0BO,SAASA,GAAMC,UACpBA,EAAAC,eACAA,IAEA,MAAMC,EAAeC,EAAuB,MACtCC,EAAiBD,EACrB,SAASE,KAAKC,SAASC,SAAS,IAAIC,MAAM,EAAG,MAoC/C,OAjCAC,EAAU,KACR,MAAMC,EAAKR,EAAaS,QACxB,IAAKD,EAAI,OAET,MAAME,EAAcR,EAAeO,QACnCD,EAAGG,GAAKD,EAER,IACIE,EADAC,GAAY,EAkBhB,MAbA,WACE,MAAMC,QAAYC,OAAO,cACrBF,IAEJC,EAAIE,KAAK,CACPN,cACAZ,YACAC,mBAGFa,EAAU,IAAME,EAAIG,UACtB,EAXA,GAaO,KACLJ,GAAY,EACZD,QAED,CAACd,EAAWC,IAIRmB,EAAc,MAAO,CAAEC,IAAKnB,GACrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auticlabs/bulut",
3
- "version": "1.2.3",
3
+ "version": "1.3.0",
4
4
  "description": "Bulut – a lightweight AI chatbot widget for React, Next.js and Vite applications",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -69,7 +69,10 @@
69
69
  "streaming-json": "^0.1.4",
70
70
  "terser": "^5.27.0",
71
71
  "typescript": "^5.3.3",
72
- "vite": "^5.0.11",
73
- "vitest": "^2.1.9"
72
+ "vite": "^7.3.1",
73
+ "vitest": "^4.0.18"
74
+ },
75
+ "dependencies": {
76
+ "@heroicons/react": "^2.2.0"
74
77
  }
75
78
  }