@gram-ai/elements 1.24.2 → 1.25.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.
Files changed (42) hide show
  1. package/README.md +24 -0
  2. package/README.typedoc.md +14 -0
  3. package/dist/compat-plugin.cjs +2 -0
  4. package/dist/compat-plugin.cjs.map +1 -0
  5. package/dist/compat-plugin.d.ts +3 -0
  6. package/dist/compat-plugin.js +26 -0
  7. package/dist/compat-plugin.js.map +1 -0
  8. package/dist/compat-shims-BPJ7Q68c.js +38 -0
  9. package/dist/compat-shims-BPJ7Q68c.js.map +1 -0
  10. package/dist/compat-shims-CO9JXXV4.cjs +2 -0
  11. package/dist/compat-shims-CO9JXXV4.cjs.map +1 -0
  12. package/dist/compat-shims.d.ts +27 -0
  13. package/dist/compat.d.ts +8 -0
  14. package/dist/compat.test.d.ts +0 -0
  15. package/dist/elements.cjs +1 -1
  16. package/dist/elements.js +1 -1
  17. package/dist/{index-B9hEyUXQ.js → index-DDb23655.js} +4582 -4578
  18. package/dist/index-DDb23655.js.map +1 -0
  19. package/dist/{index-EMjYCXA1.cjs → index-wBHCO1r-.cjs} +50 -50
  20. package/dist/index-wBHCO1r-.cjs.map +1 -0
  21. package/dist/{profiler-DFrzs1Rd.js → profiler-CGIJBY8c.js} +2 -2
  22. package/dist/{profiler-DFrzs1Rd.js.map → profiler-CGIJBY8c.js.map} +1 -1
  23. package/dist/{profiler-DUyotQcs.cjs → profiler-CLtQEzfv.cjs} +2 -2
  24. package/dist/{profiler-DUyotQcs.cjs.map → profiler-CLtQEzfv.cjs.map} +1 -1
  25. package/dist/react-shim.cjs +2 -0
  26. package/dist/react-shim.cjs.map +1 -0
  27. package/dist/react-shim.d.ts +9 -0
  28. package/dist/react-shim.js +78 -0
  29. package/dist/react-shim.js.map +1 -0
  30. package/dist/{startRecording-CbzZg6Ct.cjs → startRecording-DXZPNn9e.cjs} +2 -2
  31. package/dist/{startRecording-CbzZg6Ct.cjs.map → startRecording-DXZPNn9e.cjs.map} +1 -1
  32. package/dist/{startRecording-CNklkzCM.js → startRecording-x0G7lOpP.js} +2 -2
  33. package/dist/{startRecording-CNklkzCM.js.map → startRecording-x0G7lOpP.js.map} +1 -1
  34. package/package.json +10 -5
  35. package/src/compat-plugin.ts +38 -0
  36. package/src/compat-shims.ts +75 -0
  37. package/src/compat.test.ts +80 -0
  38. package/src/compat.ts +19 -0
  39. package/src/index.ts +3 -0
  40. package/src/react-shim.ts +54 -0
  41. package/dist/index-B9hEyUXQ.js.map +0 -1
  42. package/dist/index-EMjYCXA1.cjs.map +0 -1
package/README.md CHANGED
@@ -324,6 +324,30 @@ function MarketingDemo() {
324
324
  | `assistantStartDelay` | `400` | Milliseconds before the assistant starts typing |
325
325
  | `onComplete` | — | Callback when replay finishes |
326
326
 
327
+ ## React Compatibility
328
+
329
+ `@gram-ai/elements` supports React 16.8+, React 17, React 18, and React 19.
330
+
331
+ React 18 and 19 work out of the box. For React 16 or 17, you need to configure your bundler to shim newer React APIs (`useSyncExternalStore`, `useId`, `useInsertionEffect`) that are used by transitive dependencies like zustand and @assistant-ui/react.
332
+
333
+ > **Note:** React 16 and React 17 are not regularly tested. If you run into any issues using Elements with these versions, please reach out to us for support.
334
+
335
+ ### Vite Setup (React 16/17)
336
+
337
+ Add the compatibility plugin to your Vite config:
338
+
339
+ ```typescript
340
+ import react from '@vitejs/plugin-react'
341
+ import { reactCompat } from '@gram-ai/elements/compat'
342
+ import { defineConfig } from 'vite'
343
+
344
+ export default defineConfig({
345
+ plugins: [react(), reactCompat()],
346
+ })
347
+ ```
348
+
349
+ This automatically shims React 18 APIs (`useSyncExternalStore`, `useId`, `useInsertionEffect`) so that Elements and its dependencies work correctly on older React versions.
350
+
327
351
  ## Contributing
328
352
 
329
353
  We welcome pull requests to Elements. Please read the contributing guide.
package/README.typedoc.md CHANGED
@@ -19,6 +19,20 @@ const config: ElementsConfig = {
19
19
 
20
20
  The `mcp` and `projectSlug` values can be retrieved from the MCP and project pages respectively.
21
21
 
22
+ ## React Compatibility
23
+
24
+ `@gram-ai/elements` supports React 16.8+, React 17, React 18, and React 19. React 18 and 19 work out of the box. For React 16 or 17, add the compatibility plugin to your Vite config:
25
+
26
+ ```ts
27
+ import { reactCompat } from '@gram-ai/elements/compat'
28
+
29
+ export default defineConfig({
30
+ plugins: [react(), reactCompat()],
31
+ })
32
+ ```
33
+
34
+ React 16 and React 17 are not regularly tested — please reach out to us for support if you run into any issues with these versions.
35
+
22
36
  ## API Documentation
23
37
 
24
38
  `ElementsConfig` is the top level configuration object for the Elements library. Please refer the [ElementsConfig](./docs/interfaces/ElementsConfig.md) interface documentation for more details on how to configure Elements.
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("node:module"),e=require("node:path"),n=require("node:url");var r=typeof document<"u"?document.currentScript:null;const c=e.dirname(n.fileURLToPath(typeof document>"u"?require("url").pathToFileURL(__filename).href:r&&r.tagName.toUpperCase()==="SCRIPT"&&r.src||new URL("compat-plugin.cjs",document.baseURI).href)),o=e.resolve(c,"react-shim.js");function i(){return{name:"gram-elements-react-compat",enforce:"pre",config(){const t=a.createRequire(e.resolve(process.cwd(),"package.json"));return{resolve:{alias:[{find:"react-original",replacement:e.dirname(t.resolve("react/package.json"))},{find:/^react$/,replacement:o}],dedupe:["react","react-dom"]}}}}}exports.reactCompat=i;
2
+ //# sourceMappingURL=compat-plugin.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat-plugin.cjs","sources":["../src/compat-plugin.ts"],"sourcesContent":null,"names":["__dirname","dirname","fileURLToPath","_documentCurrentScript","shimPath","resolve","reactCompat","require","createRequire"],"mappings":"kNAeA,MAAMA,EAAYC,EAAAA,QAAQC,gBAAc,OAAA,SAAA,IAAA,QAAA,KAAA,EAAA,cAAA,UAAA,EAAA,KAAAC,GAAAA,EAAA,QAAA,YAAA,IAAA,UAAAA,EAAA,KAAA,IAAA,IAAA,oBAAA,SAAA,OAAA,EAAA,IAAe,CAAC,EAClDC,EAAWC,EAAAA,QAAQL,EAAW,eAAe,EAG5C,SAASM,GAAsB,CACpC,MAAO,CACL,KAAM,6BACN,QAAS,MACT,QAAS,CACP,MAAMC,EAAUC,EAAAA,cAAcH,EAAAA,QAAQ,QAAQ,IAAA,EAAO,cAAc,CAAC,EAEpE,MAAO,CACL,QAAS,CACP,MAAO,CACL,CAAE,KAAM,iBAAkB,YAJVJ,EAAAA,QAAQM,EAAQ,QAAQ,oBAAoB,CAAC,CAItB,EACvC,CAAE,KAAM,UAAW,YAAaH,CAAA,CAAS,EAE3C,OAAQ,CAAC,QAAS,WAAW,CAAA,CAC/B,CAEJ,CAAA,CAEJ"}
@@ -0,0 +1,3 @@
1
+ import { Plugin } from 'vite';
2
+ /** Redirects `import ... from 'react'` through a shim that polyfills React 18 APIs. */
3
+ export declare function reactCompat(): Plugin;
@@ -0,0 +1,26 @@
1
+ import { createRequire as t } from "node:module";
2
+ import { dirname as e, resolve as r } from "node:path";
3
+ import { fileURLToPath as o } from "node:url";
4
+ const c = e(o(import.meta.url)), n = r(c, "react-shim.js");
5
+ function l() {
6
+ return {
7
+ name: "gram-elements-react-compat",
8
+ enforce: "pre",
9
+ config() {
10
+ const a = t(r(process.cwd(), "package.json"));
11
+ return {
12
+ resolve: {
13
+ alias: [
14
+ { find: "react-original", replacement: e(a.resolve("react/package.json")) },
15
+ { find: /^react$/, replacement: n }
16
+ ],
17
+ dedupe: ["react", "react-dom"]
18
+ }
19
+ };
20
+ }
21
+ };
22
+ }
23
+ export {
24
+ l as reactCompat
25
+ };
26
+ //# sourceMappingURL=compat-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat-plugin.js","sources":["../src/compat-plugin.ts"],"sourcesContent":null,"names":["__dirname","dirname","fileURLToPath","shimPath","resolve","reactCompat","require","createRequire"],"mappings":";;;AAeA,MAAMA,IAAYC,EAAQC,EAAc,YAAY,GAAG,CAAC,GAClDC,IAAWC,EAAQJ,GAAW,eAAe;AAG5C,SAASK,IAAsB;AACpC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AACP,YAAMC,IAAUC,EAAcH,EAAQ,QAAQ,IAAA,GAAO,cAAc,CAAC;AAEpE,aAAO;AAAA,QACL,SAAS;AAAA,UACP,OAAO;AAAA,YACL,EAAE,MAAM,kBAAkB,aAJVH,EAAQK,EAAQ,QAAQ,oBAAoB,CAAC,EAItB;AAAA,YACvC,EAAE,MAAM,WAAW,aAAaH,EAAA;AAAA,UAAS;AAAA,UAE3C,QAAQ,CAAC,SAAS,WAAW;AAAA,QAAA;AAAA,MAC/B;AAAA,IAEJ;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,38 @@
1
+ function a(e) {
2
+ try {
3
+ return !Object.is(e.value, e.getSnapshot());
4
+ } catch {
5
+ return !0;
6
+ }
7
+ }
8
+ function f(e) {
9
+ return function(u, n) {
10
+ const s = n(), [{ inst: r }, c] = e.useState({ inst: { value: s, getSnapshot: n } });
11
+ return e.useLayoutEffect(() => {
12
+ r.value = s, r.getSnapshot = n, a(r) && c({ inst: r });
13
+ }, [u, s, n]), e.useEffect(() => (a(r) && c({ inst: r }), u(() => {
14
+ a(r) && c({ inst: r });
15
+ })), [u]), s;
16
+ };
17
+ }
18
+ function o(e) {
19
+ let t = 0;
20
+ return function() {
21
+ const n = e.useRef(null);
22
+ return n.current === null && (n.current = `:r${t++}:`), n.current;
23
+ };
24
+ }
25
+ function i(e) {
26
+ return {
27
+ useSyncExternalStore: e.useSyncExternalStore ?? f(e),
28
+ useId: e.useId ?? o(e),
29
+ useInsertionEffect: e.useInsertionEffect ?? e.useLayoutEffect,
30
+ startTransition: e.startTransition ?? ((t) => t()),
31
+ useTransition: e.useTransition ?? (() => [!1, (t) => t()]),
32
+ useDeferredValue: e.useDeferredValue ?? ((t) => t)
33
+ };
34
+ }
35
+ export {
36
+ i as c
37
+ };
38
+ //# sourceMappingURL=compat-shims-BPJ7Q68c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat-shims-BPJ7Q68c.js","sources":["../src/compat-shims.ts"],"sourcesContent":null,"names":["snapshotChanged","inst","createUseSyncExternalStoreShim","R","subscribe","getSnapshot","value","forceUpdate","createUseIdShim","counter","ref","createShims","cb"],"mappings":"AAmBA,SAASA,EAAmBC,GAAmD;AAC7E,MAAI;AACF,WAAO,CAAC,OAAO,GAAGA,EAAK,OAAOA,EAAK,aAAa;AAAA,EAClD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAASC,EAA+BC,GAAc;AACpD,SAAO,SACLC,GACAC,GACG;AACH,UAAMC,IAAQD,EAAA,GACR,CAAC,EAAE,MAAAJ,KAAQM,CAAW,IAAIJ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAAG,GAAO,aAAAD,EAAA,GAAe;AAE3E,WAAAF,EAAE,gBAAgB,MAAM;AACtB,MAAAF,EAAK,QAAQK,GACbL,EAAK,cAAcI,GACfL,EAAgBC,CAAI,KAAGM,EAAY,EAAE,MAAAN,GAAM;AAAA,IACjD,GAAG,CAACG,GAAWE,GAAOD,CAAW,CAAC,GAElCF,EAAE,UAAU,OACNH,EAAgBC,CAAI,KAAGM,EAAY,EAAE,MAAAN,GAAM,GACxCG,EAAU,MAAM;AACrB,MAAIJ,EAAgBC,CAAI,KAAGM,EAAY,EAAE,MAAAN,GAAM;AAAA,IACjD,CAAC,IACA,CAACG,CAAS,CAAC,GAEPE;AAAA,EACT;AACF;AAEA,SAASE,EAAgBL,GAAc;AACrC,MAAIM,IAAU;AACd,SAAO,WAAyB;AAC9B,UAAMC,IAAMP,EAAE,OAAsB,IAAI;AACxC,WAAIO,EAAI,YAAY,SAAMA,EAAI,UAAU,KAAKD,GAAS,MAC/CC,EAAI;AAAA,EACb;AACF;AAGO,SAASC,EAAYR,GAAc;AACxC,SAAO;AAAA,IACL,sBACEA,EAAE,wBAAwBD,EAA+BC,CAAC;AAAA,IAC5D,OAAOA,EAAE,SAASK,EAAgBL,CAAC;AAAA,IACnC,oBAAoBA,EAAE,sBAAsBA,EAAE;AAAA,IAC9C,iBAAiBA,EAAE,oBAAoB,CAACS,MAAmBA,EAAA;AAAA,IAC3D,eACET,EAAE,kBACD,MAA2C,CAAC,IAAO,CAACS,MAAOA,EAAA,CAAI;AAAA,IAClE,kBAAkBT,EAAE,qBAAqB,CAAIG,MAAgBA;AAAA,EAAA;AAEjE;"}
@@ -0,0 +1,2 @@
1
+ "use strict";function a(e){try{return!Object.is(e.value,e.getSnapshot())}catch{return!0}}function f(e){return function(u,n){const s=n(),[{inst:r},c]=e.useState({inst:{value:s,getSnapshot:n}});return e.useLayoutEffect(()=>{r.value=s,r.getSnapshot=n,a(r)&&c({inst:r})},[u,s,n]),e.useEffect(()=>(a(r)&&c({inst:r}),u(()=>{a(r)&&c({inst:r})})),[u]),s}}function i(e){let t=0;return function(){const n=e.useRef(null);return n.current===null&&(n.current=`:r${t++}:`),n.current}}function o(e){return{useSyncExternalStore:e.useSyncExternalStore??f(e),useId:e.useId??i(e),useInsertionEffect:e.useInsertionEffect??e.useLayoutEffect,startTransition:e.startTransition??(t=>t()),useTransition:e.useTransition??(()=>[!1,t=>t()]),useDeferredValue:e.useDeferredValue??(t=>t)}}exports.createShims=o;
2
+ //# sourceMappingURL=compat-shims-CO9JXXV4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat-shims-CO9JXXV4.cjs","sources":["../src/compat-shims.ts"],"sourcesContent":null,"names":["snapshotChanged","inst","createUseSyncExternalStoreShim","R","subscribe","getSnapshot","value","forceUpdate","createUseIdShim","counter","ref","createShims","cb"],"mappings":"aAmBA,SAASA,EAAmBC,EAAmD,CAC7E,GAAI,CACF,MAAO,CAAC,OAAO,GAAGA,EAAK,MAAOA,EAAK,aAAa,CAClD,MAAQ,CACN,MAAO,EACT,CACF,CAEA,SAASC,EAA+BC,EAAc,CACpD,OAAO,SACLC,EACAC,EACG,CACH,MAAMC,EAAQD,EAAA,EACR,CAAC,CAAE,KAAAJ,GAAQM,CAAW,EAAIJ,EAAE,SAAS,CAAE,KAAM,CAAE,MAAAG,EAAO,YAAAD,CAAA,EAAe,EAE3E,OAAAF,EAAE,gBAAgB,IAAM,CACtBF,EAAK,MAAQK,EACbL,EAAK,YAAcI,EACfL,EAAgBC,CAAI,GAAGM,EAAY,CAAE,KAAAN,EAAM,CACjD,EAAG,CAACG,EAAWE,EAAOD,CAAW,CAAC,EAElCF,EAAE,UAAU,KACNH,EAAgBC,CAAI,GAAGM,EAAY,CAAE,KAAAN,EAAM,EACxCG,EAAU,IAAM,CACjBJ,EAAgBC,CAAI,GAAGM,EAAY,CAAE,KAAAN,EAAM,CACjD,CAAC,GACA,CAACG,CAAS,CAAC,EAEPE,CACT,CACF,CAEA,SAASE,EAAgBL,EAAc,CACrC,IAAIM,EAAU,EACd,OAAO,UAAyB,CAC9B,MAAMC,EAAMP,EAAE,OAAsB,IAAI,EACxC,OAAIO,EAAI,UAAY,OAAMA,EAAI,QAAU,KAAKD,GAAS,KAC/CC,EAAI,OACb,CACF,CAGO,SAASC,EAAYR,EAAc,CACxC,MAAO,CACL,qBACEA,EAAE,sBAAwBD,EAA+BC,CAAC,EAC5D,MAAOA,EAAE,OAASK,EAAgBL,CAAC,EACnC,mBAAoBA,EAAE,oBAAsBA,EAAE,gBAC9C,gBAAiBA,EAAE,kBAAqBS,GAAmBA,EAAA,GAC3D,cACET,EAAE,gBACD,IAA2C,CAAC,GAAQS,GAAOA,EAAA,CAAI,GAClE,iBAAkBT,EAAE,mBAAyBG,GAAgBA,EAAA,CAEjE"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Polyfill factories for React 18 APIs. Shared by compat.ts (runtime patching)
3
+ * and react-shim.ts (bundler-level replacement). This module must NOT import
4
+ * from 'react' to avoid circular dependencies when the Vite plugin is active.
5
+ */
6
+ interface ReactLike {
7
+ useState: typeof import('react').useState;
8
+ useEffect: typeof import('react').useEffect;
9
+ useLayoutEffect: typeof import('react').useLayoutEffect;
10
+ useRef: typeof import('react').useRef;
11
+ useSyncExternalStore?: typeof import('react').useSyncExternalStore;
12
+ useId?: typeof import('react').useId;
13
+ useInsertionEffect?: typeof import('react').useInsertionEffect;
14
+ startTransition?: typeof import('react').startTransition;
15
+ useTransition?: typeof import('react').useTransition;
16
+ useDeferredValue?: typeof import('react').useDeferredValue;
17
+ }
18
+ /** Build polyfills for a React instance. Native APIs take precedence via ??. */
19
+ export declare function createShims(R: ReactLike): {
20
+ useSyncExternalStore: typeof import('react').useSyncExternalStore;
21
+ useId: typeof import('react').useId;
22
+ useInsertionEffect: typeof import('react').useLayoutEffect;
23
+ startTransition: typeof import('react').startTransition;
24
+ useTransition: typeof import('react').useTransition;
25
+ useDeferredValue: typeof import('react').useDeferredValue;
26
+ };
27
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Runtime React 16/17 compatibility shims.
3
+ *
4
+ * Patches the React module object with polyfills for React 18 APIs used by
5
+ * transitive deps (zustand, @assistant-ui/react, @tanstack/react-query).
6
+ * Must be imported before any modules that depend on these APIs.
7
+ */
8
+ export {};
File without changes
package/dist/elements.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-EMjYCXA1.cjs"),r=require("./index-iUSSoKFz.cjs");exports.Chat=e.Chat;exports.ChatHistory=e.ChatHistory;exports.ElementsProvider=e.ElementsProvider;exports.GramElementsProvider=e.ElementsProvider;exports.MODELS=e.MODELS;exports.Replay=e.Replay;exports.ShareButton=e.ShareButton;exports.defineFrontendTool=e.defineFrontendTool;exports.trackError=e.trackError;exports.useRecordCassette=e.useRecordCassette;exports.useThreadId=e.useThreadId;exports.useElements=r.useElements;exports.useGramElements=r.useElements;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-wBHCO1r-.cjs"),r=require("./index-iUSSoKFz.cjs");exports.Chat=e.Chat;exports.ChatHistory=e.ChatHistory;exports.ElementsProvider=e.ElementsProvider;exports.GramElementsProvider=e.ElementsProvider;exports.MODELS=e.MODELS;exports.Replay=e.Replay;exports.ShareButton=e.ShareButton;exports.defineFrontendTool=e.defineFrontendTool;exports.trackError=e.trackError;exports.useRecordCassette=e.useRecordCassette;exports.useThreadId=e.useThreadId;exports.useElements=r.useElements;exports.useGramElements=r.useElements;
2
2
  //# sourceMappingURL=elements.cjs.map
package/dist/elements.js CHANGED
@@ -1,4 +1,4 @@
1
- import { aa as s, ab as r, a8 as t, a8 as o, ah as d, ad as m, ac as n, af as u, ag as l, ae as E, a9 as h } from "./index-B9hEyUXQ.js";
1
+ import { aa as s, ab as r, a8 as t, a8 as o, ah as d, ad as m, ac as n, af as u, ag as l, ae as E, a9 as h } from "./index-DDb23655.js";
2
2
  import { u as i, u as c } from "./index-CtyV0c-T.js";
3
3
  export {
4
4
  s as Chat,