@nemme/js-sdk 0.5.1 → 0.6.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 (48) hide show
  1. package/README.md +46 -13
  2. package/dist/browser.d.ts +1 -1
  3. package/dist/chunks/client-CEykSZ2c.js +389 -0
  4. package/dist/chunks/client-CEykSZ2c.js.map +1 -0
  5. package/dist/chunks/client-DZJN73sh.js +2 -0
  6. package/dist/chunks/client-DZJN73sh.js.map +1 -0
  7. package/dist/chunks/form-manager-CdG9IzjD.js +12 -0
  8. package/dist/chunks/form-manager-CdG9IzjD.js.map +1 -0
  9. package/dist/chunks/form-manager-Dre89wMr.js +6143 -0
  10. package/dist/chunks/form-manager-Dre89wMr.js.map +1 -0
  11. package/dist/chunks/httpClient-D2IO92uv.js +149 -0
  12. package/dist/chunks/httpClient-D2IO92uv.js.map +1 -0
  13. package/dist/chunks/httpClient-hrn9Ffa2.js +2 -0
  14. package/dist/chunks/httpClient-hrn9Ffa2.js.map +1 -0
  15. package/dist/chunks/jsx-runtime-BubrbI3X.js +2 -0
  16. package/dist/chunks/jsx-runtime-BubrbI3X.js.map +1 -0
  17. package/dist/chunks/jsx-runtime-jIxVPx5o.js +32 -0
  18. package/dist/chunks/jsx-runtime-jIxVPx5o.js.map +1 -0
  19. package/dist/client.d.ts +2 -1
  20. package/dist/deliveries/delivery-manager.d.ts +3 -2
  21. package/dist/forms/form-manager.d.ts +1 -10
  22. package/dist/forms-entry.d.ts +3 -0
  23. package/dist/forms.cjs +2 -0
  24. package/dist/forms.cjs.map +1 -0
  25. package/dist/forms.esm.js +6 -0
  26. package/dist/forms.esm.js.map +1 -0
  27. package/dist/index.cjs +1 -46
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.esm.js +6 -6732
  31. package/dist/index.esm.js.map +1 -1
  32. package/dist/js-sdk.css +1 -0
  33. package/dist/nemme-sdk.umd.js +4 -39
  34. package/dist/nemme-sdk.umd.js.map +1 -1
  35. package/dist/react/NemmeProvider.d.ts +2 -2
  36. package/dist/react-entry.d.ts +3 -0
  37. package/dist/react.cjs +2 -0
  38. package/dist/react.cjs.map +1 -0
  39. package/dist/react.esm.js +67 -0
  40. package/dist/react.esm.js.map +1 -0
  41. package/dist/style-entry.d.ts +0 -0
  42. package/dist/style.cjs +2 -0
  43. package/dist/style.cjs.map +1 -0
  44. package/dist/style.esm.js +2 -0
  45. package/dist/style.esm.js.map +1 -0
  46. package/dist/types/forms.d.ts +10 -0
  47. package/package.json +57 -30
  48. package/dist/assets/js-sdk.css +0 -1
@@ -1,9 +1,9 @@
1
- import { default as React, ReactNode } from 'react';
2
1
  import { ClientConfigType } from '../client';
2
+ import * as React from 'react';
3
3
  interface NemmeProviderProps {
4
4
  clientKey: string;
5
5
  config: ClientConfigType;
6
- children: ReactNode;
6
+ children: React.ReactNode;
7
7
  }
8
8
  export declare const NemmeProvider: React.FC<NemmeProviderProps>;
9
9
  export {};
@@ -0,0 +1,3 @@
1
+ export { NemmeProvider } from './react/NemmeProvider';
2
+ export { useNemmeContext } from './react/useNemmeContext';
3
+ export { useNemme } from './react/useNemme';
package/dist/react.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const z=require("./chunks/jsx-runtime-BubrbI3X.js"),r=require("react"),w=require("./chunks/client-DZJN73sh.js"),d=r.createContext(void 0),y=({clientKey:e,config:n,children:s})=>{const[l,i]=r.useState(null),[o,u]=r.useState(!1),[C,a]=r.useState(null);r.useEffect(()=>{let c=null,m=!1;const x=async()=>{try{const t=new w.NemmeClient(e);if(await t.init(n),m){t.destroy();return}c=t,i(t),u(t.initialized),a(t.lastInitError?t.lastInitError.message:null)}catch(t){m||(a(t instanceof Error?t.message:"Failed to initialize Nemme client"),u(!1))}},v=setTimeout(()=>{i(null),u(!1),a(null)},0);return x(),()=>{clearTimeout(v),m=!0,c&&c.destroy()}},[e,n]);const N={client:l,isInitialized:o,error:C};return z.jsxRuntimeExports.jsx(d.Provider,{value:N,children:s})},f=()=>{const e=r.useContext(d);if(e===void 0)throw new Error("useNemmeContext must be used within a NemmeProvider");return e},E=()=>{const{client:e,isInitialized:n,error:s}=f(),l=r.useCallback(async o=>{if(!e||!n){console.warn("Nemme client not initialized");return}return e.track(o)},[e,n]),i=r.useCallback(async()=>{if(!e||!n){console.warn("Nemme client not initialized");return}return e.flush()},[e,n]);return{track:l,flush:i,isInitialized:n,error:s,client:e}};exports.NemmeProvider=y;exports.useNemme=E;exports.useNemmeContext=f;
2
+ //# sourceMappingURL=react.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.cjs","sources":["../src/react/context.ts","../src/react/NemmeProvider.tsx","../src/react/useNemmeContext.ts","../src/react/useNemme.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { NemmeClient } from '../client';\n\nexport interface NemmeContextType {\n client: NemmeClient | null;\n isInitialized: boolean;\n error: string | null;\n}\n\nexport const NemmeContext = createContext<NemmeContextType | undefined>(undefined);\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { ClientConfigType, NemmeClient } from '../client';\nimport { NemmeContext, NemmeContextType } from './context';\n\ninterface NemmeProviderProps {\n clientKey: string;\n config: ClientConfigType;\n children: React.ReactNode;\n}\n\nexport const NemmeProvider: React.FC<NemmeProviderProps> = ({ clientKey, config, children }) => {\n const [client, setClient] = useState<NemmeClient | null>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let currentClient: NemmeClient | null = null;\n let isCancelled = false;\n\n const initializeClient = async () => {\n try {\n const nemmeClient = new NemmeClient(clientKey);\n await nemmeClient.init(config);\n\n // Check if effect was cancelled during async operation\n if (isCancelled) {\n nemmeClient.destroy();\n return;\n }\n\n currentClient = nemmeClient;\n setClient(nemmeClient);\n setIsInitialized(nemmeClient.initialized);\n setError(nemmeClient.lastInitError ? nemmeClient.lastInitError.message : null);\n } catch (err) {\n if (!isCancelled) {\n setError(err instanceof Error ? err.message : 'Failed to initialize Nemme client');\n setIsInitialized(false);\n }\n }\n };\n\n // Reset state when starting new initialization (deferred to avoid sync setState in effect)\n const resetId = setTimeout(() => {\n setClient(null);\n setIsInitialized(false);\n setError(null);\n }, 0);\n\n initializeClient();\n\n return () => {\n clearTimeout(resetId);\n isCancelled = true;\n if (currentClient) {\n currentClient.destroy();\n }\n };\n }, [clientKey, config]);\n\n const value: NemmeContextType = {\n client,\n isInitialized,\n error\n };\n\n return <NemmeContext.Provider value={value}>{children}</NemmeContext.Provider>;\n};\n","import { useContext } from 'react';\nimport { NemmeContext } from './context';\n\nexport const useNemmeContext = () => {\n const context = useContext(NemmeContext);\n if (context === undefined) {\n throw new Error('useNemmeContext must be used within a NemmeProvider');\n }\n return context;\n};\n","import { useCallback } from 'react';\nimport { useNemmeContext } from './useNemmeContext';\nimport { TrackEventOptions } from '../client';\n\nexport const useNemme = () => {\n const { client, isInitialized, error } = useNemmeContext();\n\n const track = useCallback(\n async <T extends TrackEventOptions>(options: T) => {\n if (!client || !isInitialized) {\n console.warn('Nemme client not initialized');\n return;\n }\n return client.track(options);\n },\n [client, isInitialized]\n );\n\n const flush = useCallback(async () => {\n if (!client || !isInitialized) {\n console.warn('Nemme client not initialized');\n return;\n }\n return client.flush();\n }, [client, isInitialized]);\n\n return {\n track,\n flush,\n isInitialized,\n error,\n client\n };\n};\n"],"names":["NemmeContext","createContext","NemmeProvider","clientKey","config","children","client","setClient","useState","isInitialized","setIsInitialized","error","setError","useEffect","currentClient","isCancelled","initializeClient","nemmeClient","NemmeClient","err","resetId","value","jsx","useNemmeContext","context","useContext","useNemme","track","useCallback","options","flush"],"mappings":"gMASaA,EAAeC,EAAAA,cAA4C,MAAS,ECEpEC,EAA8C,CAAC,CAAE,UAAAC,EAAW,OAAAC,EAAQ,SAAAC,KAAe,CAC9F,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAA6B,IAAI,EACvD,CAACC,EAAeC,CAAgB,EAAIF,EAAAA,SAAS,EAAK,EAClD,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAAwB,IAAI,EAEtDK,EAAAA,UAAU,IAAM,CACd,IAAIC,EAAoC,KACpCC,EAAc,GAElB,MAAMC,EAAmB,SAAY,CACnC,GAAI,CACF,MAAMC,EAAc,IAAIC,EAAAA,YAAYf,CAAS,EAI7C,GAHA,MAAMc,EAAY,KAAKb,CAAM,EAGzBW,EAAa,CACfE,EAAY,QAAA,EACZ,MACF,CAEAH,EAAgBG,EAChBV,EAAUU,CAAW,EACrBP,EAAiBO,EAAY,WAAW,EACxCL,EAASK,EAAY,cAAgBA,EAAY,cAAc,QAAU,IAAI,CAC/E,OAASE,EAAK,CACPJ,IACHH,EAASO,aAAe,MAAQA,EAAI,QAAU,mCAAmC,EACjFT,EAAiB,EAAK,EAE1B,CACF,EAGMU,EAAU,WAAW,IAAM,CAC/Bb,EAAU,IAAI,EACdG,EAAiB,EAAK,EACtBE,EAAS,IAAI,CACf,EAAG,CAAC,EAEJ,OAAAI,EAAA,EAEO,IAAM,CACX,aAAaI,CAAO,EACpBL,EAAc,GACVD,GACFA,EAAc,QAAA,CAElB,CACF,EAAG,CAACX,EAAWC,CAAM,CAAC,EAEtB,MAAMiB,EAA0B,CAAA,OAC9Bf,EACA,cAAAG,EACA,MAAAE,CAAA,EAGF,OAAOW,EAAAA,kBAAAA,IAACtB,EAAa,SAAb,CAAsB,MAAAqB,EAAe,SAAAhB,CAAA,CAAS,CACxD,ECjEakB,EAAkB,IAAM,CACnC,MAAMC,EAAUC,EAAAA,WAAWzB,CAAY,EACvC,GAAIwB,IAAY,OACd,MAAM,IAAI,MAAM,qDAAqD,EAEvE,OAAOA,CACT,ECLaE,EAAW,IAAM,CAC5B,KAAM,CAAE,OAAApB,EAAQ,cAAAG,EAAe,MAAAE,CAAA,EAAUY,EAAA,EAEnCI,EAAQC,EAAAA,YACZ,MAAoCC,GAAe,CACjD,GAAI,CAACvB,GAAU,CAACG,EAAe,CAC7B,QAAQ,KAAK,8BAA8B,EAC3C,MACF,CACA,OAAOH,EAAO,MAAMuB,CAAO,CAC7B,EACA,CAACvB,EAAQG,CAAa,CAAA,EAGlBqB,EAAQF,EAAAA,YAAY,SAAY,CACpC,GAAI,CAACtB,GAAU,CAACG,EAAe,CAC7B,QAAQ,KAAK,8BAA8B,EAC3C,MACF,CACA,OAAOH,EAAO,MAAA,CAChB,EAAG,CAACA,EAAQG,CAAa,CAAC,EAE1B,MAAO,CACL,MAAAkB,EACA,MAAAG,EACA,cAAArB,EACA,MAAAE,EACA,OAAAL,CAAA,CAEJ"}
@@ -0,0 +1,67 @@
1
+ import { j as w } from "./chunks/jsx-runtime-jIxVPx5o.js";
2
+ import { createContext as E, useState as u, useEffect as I, useContext as v, useCallback as d } from "react";
3
+ import { N as h } from "./chunks/client-CEykSZ2c.js";
4
+ const f = E(void 0), P = ({ clientKey: e, config: n, children: i }) => {
5
+ const [s, r] = u(null), [o, l] = u(!1), [C, a] = u(null);
6
+ I(() => {
7
+ let c = null, m = !1;
8
+ const x = async () => {
9
+ try {
10
+ const t = new h(e);
11
+ if (await t.init(n), m) {
12
+ t.destroy();
13
+ return;
14
+ }
15
+ c = t, r(t), l(t.initialized), a(t.lastInitError ? t.lastInitError.message : null);
16
+ } catch (t) {
17
+ m || (a(t instanceof Error ? t.message : "Failed to initialize Nemme client"), l(!1));
18
+ }
19
+ }, z = setTimeout(() => {
20
+ r(null), l(!1), a(null);
21
+ }, 0);
22
+ return x(), () => {
23
+ clearTimeout(z), m = !0, c && c.destroy();
24
+ };
25
+ }, [e, n]);
26
+ const N = {
27
+ client: s,
28
+ isInitialized: o,
29
+ error: C
30
+ };
31
+ return /* @__PURE__ */ w.jsx(f.Provider, { value: N, children: i });
32
+ }, p = () => {
33
+ const e = v(f);
34
+ if (e === void 0)
35
+ throw new Error("useNemmeContext must be used within a NemmeProvider");
36
+ return e;
37
+ }, b = () => {
38
+ const { client: e, isInitialized: n, error: i } = p(), s = d(
39
+ async (o) => {
40
+ if (!e || !n) {
41
+ console.warn("Nemme client not initialized");
42
+ return;
43
+ }
44
+ return e.track(o);
45
+ },
46
+ [e, n]
47
+ ), r = d(async () => {
48
+ if (!e || !n) {
49
+ console.warn("Nemme client not initialized");
50
+ return;
51
+ }
52
+ return e.flush();
53
+ }, [e, n]);
54
+ return {
55
+ track: s,
56
+ flush: r,
57
+ isInitialized: n,
58
+ error: i,
59
+ client: e
60
+ };
61
+ };
62
+ export {
63
+ P as NemmeProvider,
64
+ b as useNemme,
65
+ p as useNemmeContext
66
+ };
67
+ //# sourceMappingURL=react.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.esm.js","sources":["../src/react/context.ts","../src/react/NemmeProvider.tsx","../src/react/useNemmeContext.ts","../src/react/useNemme.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { NemmeClient } from '../client';\n\nexport interface NemmeContextType {\n client: NemmeClient | null;\n isInitialized: boolean;\n error: string | null;\n}\n\nexport const NemmeContext = createContext<NemmeContextType | undefined>(undefined);\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { ClientConfigType, NemmeClient } from '../client';\nimport { NemmeContext, NemmeContextType } from './context';\n\ninterface NemmeProviderProps {\n clientKey: string;\n config: ClientConfigType;\n children: React.ReactNode;\n}\n\nexport const NemmeProvider: React.FC<NemmeProviderProps> = ({ clientKey, config, children }) => {\n const [client, setClient] = useState<NemmeClient | null>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let currentClient: NemmeClient | null = null;\n let isCancelled = false;\n\n const initializeClient = async () => {\n try {\n const nemmeClient = new NemmeClient(clientKey);\n await nemmeClient.init(config);\n\n // Check if effect was cancelled during async operation\n if (isCancelled) {\n nemmeClient.destroy();\n return;\n }\n\n currentClient = nemmeClient;\n setClient(nemmeClient);\n setIsInitialized(nemmeClient.initialized);\n setError(nemmeClient.lastInitError ? nemmeClient.lastInitError.message : null);\n } catch (err) {\n if (!isCancelled) {\n setError(err instanceof Error ? err.message : 'Failed to initialize Nemme client');\n setIsInitialized(false);\n }\n }\n };\n\n // Reset state when starting new initialization (deferred to avoid sync setState in effect)\n const resetId = setTimeout(() => {\n setClient(null);\n setIsInitialized(false);\n setError(null);\n }, 0);\n\n initializeClient();\n\n return () => {\n clearTimeout(resetId);\n isCancelled = true;\n if (currentClient) {\n currentClient.destroy();\n }\n };\n }, [clientKey, config]);\n\n const value: NemmeContextType = {\n client,\n isInitialized,\n error\n };\n\n return <NemmeContext.Provider value={value}>{children}</NemmeContext.Provider>;\n};\n","import { useContext } from 'react';\nimport { NemmeContext } from './context';\n\nexport const useNemmeContext = () => {\n const context = useContext(NemmeContext);\n if (context === undefined) {\n throw new Error('useNemmeContext must be used within a NemmeProvider');\n }\n return context;\n};\n","import { useCallback } from 'react';\nimport { useNemmeContext } from './useNemmeContext';\nimport { TrackEventOptions } from '../client';\n\nexport const useNemme = () => {\n const { client, isInitialized, error } = useNemmeContext();\n\n const track = useCallback(\n async <T extends TrackEventOptions>(options: T) => {\n if (!client || !isInitialized) {\n console.warn('Nemme client not initialized');\n return;\n }\n return client.track(options);\n },\n [client, isInitialized]\n );\n\n const flush = useCallback(async () => {\n if (!client || !isInitialized) {\n console.warn('Nemme client not initialized');\n return;\n }\n return client.flush();\n }, [client, isInitialized]);\n\n return {\n track,\n flush,\n isInitialized,\n error,\n client\n };\n};\n"],"names":["NemmeContext","createContext","NemmeProvider","clientKey","config","children","client","setClient","useState","isInitialized","setIsInitialized","error","setError","useEffect","currentClient","isCancelled","initializeClient","nemmeClient","NemmeClient","err","resetId","value","jsx","useNemmeContext","context","useContext","useNemme","track","useCallback","options","flush"],"mappings":";;;AASO,MAAMA,IAAeC,EAA4C,MAAS,GCEpEC,IAA8C,CAAC,EAAE,WAAAC,GAAW,QAAAC,GAAQ,UAAAC,QAAe;AAC9F,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAA6B,IAAI,GACvD,CAACC,GAAeC,CAAgB,IAAIF,EAAS,EAAK,GAClD,CAACG,GAAOC,CAAQ,IAAIJ,EAAwB,IAAI;AAEtD,EAAAK,EAAU,MAAM;AACd,QAAIC,IAAoC,MACpCC,IAAc;AAElB,UAAMC,IAAmB,YAAY;AACnC,UAAI;AACF,cAAMC,IAAc,IAAIC,EAAYf,CAAS;AAI7C,YAHA,MAAMc,EAAY,KAAKb,CAAM,GAGzBW,GAAa;AACf,UAAAE,EAAY,QAAA;AACZ;AAAA,QACF;AAEA,QAAAH,IAAgBG,GAChBV,EAAUU,CAAW,GACrBP,EAAiBO,EAAY,WAAW,GACxCL,EAASK,EAAY,gBAAgBA,EAAY,cAAc,UAAU,IAAI;AAAA,MAC/E,SAASE,GAAK;AACZ,QAAKJ,MACHH,EAASO,aAAe,QAAQA,EAAI,UAAU,mCAAmC,GACjFT,EAAiB,EAAK;AAAA,MAE1B;AAAA,IACF,GAGMU,IAAU,WAAW,MAAM;AAC/B,MAAAb,EAAU,IAAI,GACdG,EAAiB,EAAK,GACtBE,EAAS,IAAI;AAAA,IACf,GAAG,CAAC;AAEJ,WAAAI,EAAA,GAEO,MAAM;AACX,mBAAaI,CAAO,GACpBL,IAAc,IACVD,KACFA,EAAc,QAAA;AAAA,IAElB;AAAA,EACF,GAAG,CAACX,GAAWC,CAAM,CAAC;AAEtB,QAAMiB,IAA0B;AAAA,IAC9B,QAAAf;AAAA,IACA,eAAAG;AAAA,IACA,OAAAE;AAAA,EAAA;AAGF,SAAOW,gBAAAA,EAAAA,IAACtB,EAAa,UAAb,EAAsB,OAAAqB,GAAe,UAAAhB,EAAA,CAAS;AACxD,GCjEakB,IAAkB,MAAM;AACnC,QAAMC,IAAUC,EAAWzB,CAAY;AACvC,MAAIwB,MAAY;AACd,UAAM,IAAI,MAAM,qDAAqD;AAEvE,SAAOA;AACT,GCLaE,IAAW,MAAM;AAC5B,QAAM,EAAE,QAAApB,GAAQ,eAAAG,GAAe,OAAAE,EAAA,IAAUY,EAAA,GAEnCI,IAAQC;AAAA,IACZ,OAAoCC,MAAe;AACjD,UAAI,CAACvB,KAAU,CAACG,GAAe;AAC7B,gBAAQ,KAAK,8BAA8B;AAC3C;AAAA,MACF;AACA,aAAOH,EAAO,MAAMuB,CAAO;AAAA,IAC7B;AAAA,IACA,CAACvB,GAAQG,CAAa;AAAA,EAAA,GAGlBqB,IAAQF,EAAY,YAAY;AACpC,QAAI,CAACtB,KAAU,CAACG,GAAe;AAC7B,cAAQ,KAAK,8BAA8B;AAC3C;AAAA,IACF;AACA,WAAOH,EAAO,MAAA;AAAA,EAChB,GAAG,CAACA,GAAQG,CAAa,CAAC;AAE1B,SAAO;AAAA,IACL,OAAAkB;AAAA,IACA,OAAAG;AAAA,IACA,eAAArB;AAAA,IACA,OAAAE;AAAA,IACA,QAAAL;AAAA,EAAA;AAEJ;"}
File without changes
package/dist/style.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=style.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=style.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export type FormErrorType = 'FETCH_ERROR' | 'SUBMISSION_ERROR';
2
+ export declare class FormError extends Error {
3
+ errorType: string;
4
+ constructor(errorType: FormErrorType, message?: string);
5
+ }
6
+ export type FormConfig = {
7
+ zIndex?: number;
8
+ theme?: 'light' | 'dark';
9
+ onFormError?: (error: FormError) => void;
10
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nemme/js-sdk",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.esm.js",
@@ -21,7 +21,20 @@
21
21
  "require": "./dist/index.cjs",
22
22
  "default": "./dist/index.esm.js"
23
23
  },
24
- "./style.css": "./dist/assets/js-sdk.css",
24
+ "./react": {
25
+ "types": "./dist/react-entry.d.ts",
26
+ "import": "./dist/react.esm.js",
27
+ "require": "./dist/react.cjs",
28
+ "default": "./dist/react.esm.js"
29
+ },
30
+ "./forms": {
31
+ "types": "./dist/forms-entry.d.ts",
32
+ "import": "./dist/forms.esm.js",
33
+ "require": "./dist/forms.cjs",
34
+ "default": "./dist/forms.esm.js"
35
+ },
36
+ "./style.css": "./dist/js-sdk.css",
37
+ "./dist/js-sdk.css": "./dist/js-sdk.css",
25
38
  "./dist/assets/js-sdk.css": "./dist/assets/js-sdk.css"
26
39
  },
27
40
  "scripts": {
@@ -30,9 +43,9 @@
30
43
  "debug": "vitest --test-timeout=0 --no-file-parallelism",
31
44
  "cov": "vitest run --coverage",
32
45
  "type-check": "tsc --noEmit",
33
- "build": "tsc && vite build",
34
- "build:dev": "tsc && vite build --mode development",
35
- "build:test": "tsc && vite build --mode test",
46
+ "build": "tsc && vite build && vite build -c vite.umd.config.ts",
47
+ "build:dev": "tsc && vite build --mode development && vite build -c vite.umd.config.ts --mode development",
48
+ "build:test": "tsc && vite build --mode test && vite build -c vite.umd.config.ts --mode test",
36
49
  "dev": "vite",
37
50
  "preview": "vite preview",
38
51
  "sb": "storybook dev -p 6006 --no-open",
@@ -45,53 +58,67 @@
45
58
  "author": "Nemme AS",
46
59
  "license": "MIT",
47
60
  "description": "Nemme JS SDK",
61
+ "peerDependencies": {
62
+ "react": "^18.0.0 || ^19.0.0",
63
+ "react-dom": "^18.0.0 || ^19.0.0"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "react": {
67
+ "optional": true
68
+ },
69
+ "react-dom": {
70
+ "optional": true
71
+ }
72
+ },
48
73
  "dependencies": {
49
74
  "@phosphor-icons/react": "^2.1.10",
50
75
  "date-fns": "^4.1.0",
51
- "i18next-browser-languagedetector": "^8.2.0",
52
- "react": "^18.0.0",
53
- "react-dom": "^18.0.0",
54
- "react-i18next": "^16.0.0"
76
+ "i18next-browser-languagedetector": "^8.2.1",
77
+ "react-i18next": "^16.5.4"
55
78
  },
56
79
  "devDependencies": {
57
- "@chromatic-com/storybook": "^4.1.2",
58
- "@eslint/compat": "^1.4.0",
80
+ "@chromatic-com/storybook": "^5.0.1",
81
+ "@eslint/compat": "^2.0.2",
59
82
  "@eslint/eslintrc": "^3.2.0",
60
- "@eslint/js": "^9.28.0",
83
+ "@eslint/js": "^9.39.0",
61
84
  "@nemme/ui-kit": "^0.2.1",
62
- "@storybook/addon-a11y": "^10.0.5",
63
- "@storybook/addon-docs": "^10.0.5",
64
- "@storybook/addon-vitest": "^10.0.5",
65
- "@storybook/react-vite": "^10.0.5",
85
+ "@storybook/addon-a11y": "^10.2.8",
86
+ "@storybook/addon-docs": "^10.2.8",
87
+ "@storybook/addon-vitest": "^10.2.8",
88
+ "@storybook/react-vite": "^10.2.8",
66
89
  "@tailwindcss/postcss": "^4.1.13",
67
90
  "@tailwindcss/vite": "^4.1.13",
68
91
  "@testing-library/jest-dom": "^6.6.3",
69
- "@testing-library/react": "^16.3.0",
70
- "@typescript-eslint/eslint-plugin": "^8.33.1",
71
- "@typescript-eslint/parser": "^8.33.1",
72
- "@vitejs/plugin-react": "^5.1.0",
73
- "@vitest/browser": "^4.0.6",
74
- "@vitest/coverage-v8": "^4.0.6",
75
- "eslint": "^9.28.0",
92
+ "@testing-library/react": "^16.3.2",
93
+ "@types/react": "^19.2.14",
94
+ "@types/react-dom": "^19.2.3",
95
+ "@typescript-eslint/eslint-plugin": "^8.56.0",
96
+ "@typescript-eslint/parser": "^8.56.0",
97
+ "@vitejs/plugin-react": "^5.1.4",
98
+ "@vitest/browser": "^4.0.18",
99
+ "@vitest/coverage-v8": "^4.0.18",
100
+ "react": "^19.2.4",
101
+ "react-dom": "^19.2.4",
102
+ "eslint": "^9.39.0",
76
103
  "eslint-config-prettier": "^10.1.5",
77
104
  "eslint-plugin-prettier": "^5.4.1",
78
105
  "eslint-plugin-react": "^7.37.5",
79
106
  "eslint-plugin-react-hooks": "^7.0.1",
80
- "eslint-plugin-storybook": "^10.0.5",
81
- "globals": "^16.2.0",
82
- "happy-dom": "^20.0.10",
107
+ "eslint-plugin-storybook": "^10.2.8",
108
+ "globals": "^17.3.0",
109
+ "happy-dom": "^20.6.1",
83
110
  "husky": "^9.1.7",
84
111
  "lint-staged": "^16.1.0",
85
- "playwright": "^1.56.1",
112
+ "playwright": "^1.58.2",
86
113
  "postcss": "^8.5.6",
87
114
  "postcss-import": "^16.1.1",
88
- "postcss-prefixwrap": "^1.57.0",
115
+ "postcss-prefixwrap": "^1.57.2",
89
116
  "prettier": "^3.5.1",
90
- "storybook": "^10.0.5",
117
+ "storybook": "^10.2.8",
91
118
  "tailwindcss": "^4.1.13",
92
119
  "typescript": "^5.8.3",
93
120
  "vite": "^7.1.7",
94
121
  "vite-plugin-dts": "^4.5.4",
95
- "vitest": "^4.0.6"
122
+ "vitest": "^4.0.18"
96
123
  }
97
124
  }
@@ -1 +0,0 @@
1
- @import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Plus+Jakarta+Sans:wght@400;500;600;700&family=Fira+Code:wght@400;500;600&display=swap";@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){#nm *,#nm :before,#nm :after,#nm ::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}#nm,#nm :host{--font-sans:Inter,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-grey-0:#fff;--color-opacity-grey-200:#ffffff24;--color-opacity-grey-300:#ffffff0f;--color-opacity-grey-600:#00000012;--color-opacity-grey-700:#00000024;--color-background-primary-light:#fbfbfd;--color-background-primary-dark:#101011;--color-background-primary-grouped-light:#e5e5ea;--color-background-primary-grouped-dark:#101011;--color-background-secondary-grouped-light:#fbfbfd;--color-background-secondary-grouped-dark:#1c1c1e;--color-background-tertiary-grouped-light:#f2f2f7;--color-background-tertiary-grouped-dark:#242426;--color-background-universal-overlay-light:#48484a12;--color-background-universal-overlay-dark:#aeaeb20f;--color-overlay-fill-default-light:#00000012;--color-overlay-fill-default-dark:#ffffff0f;--color-overlay-fill-alternative-light:#00000024;--color-overlay-fill-alternative-dark:#ffffff24;--color-overlay-background-default-light:#0000008c;--color-overlay-background-default-dark:#000000a6;--color-label-primary-light:#000;--color-label-primary-dark:#fff;--color-label-secondary-light:#636366;--color-label-secondary-dark:#8e8e93;--color-label-tertiary-light:#8e8e93;--color-label-tertiary-dark:#636366;--color-label-placeholder-light:#8e8e93;--color-label-placeholder-dark:#8e8e93;--color-label-quaternary-light:#fff;--color-label-quaternary-dark:#000;--color-primary-action-button-light:#3461da;--color-primary-action-button-dark:#325fcb;--color-primary-action-button-hover-light:#2c4db9;--color-primary-action-button-hover-dark:#2c4db9;--color-primary-action-disabled-light:#d1d1d6;--color-primary-action-disabled-dark:#3a3a3c;--color-secondary-action-button-light:#000;--color-secondary-action-button-dark:#fff;--color-secondary-action-button-hover-light:#242426;--color-secondary-action-button-hover-dark:#d1d1d6;--color-secondary-action-disabled-light:#d1d1d6;--color-secondary-action-disabled-dark:#3a3a3c;--color-tertiary-action-button-light:var(--color-opacity-grey-600);--color-tertiary-action-button-dark:var(--color-opacity-grey-300);--color-tertiary-action-button-hover-light:var(--color-opacity-grey-700);--color-tertiary-action-button-hover-dark:var(--color-opacity-grey-200);--color-brand-coral-default-light:#ff6832;--color-brand-coral-default-dark:#ff6832;--color-separator-regular-light:#aeaeb2;--color-separator-regular-dark:#48484a;--color-separator-opaque-light:#e5e5ea;--color-separator-opaque-dark:#242426;--color-separator-opaque-alternative-light:#d1d1d6;--color-separator-opaque-alternative-dark:#2c2c2e;--color-nonadaptable-text-light:#fff;--color-nonadaptable-text-dark:#000;--color-success-default-light:#35c759;--color-success-default-dark:#31d158;--color-danger-background-light:#fef1f2;--color-danger-background-dark:#a10010;--color-danger-default-light:#ff3b2f;--color-danger-default-dark:#ff453a;--color-danger-hover-light:#d70015;--color-danger-hover-dark:#ff8680;--color-danger-accessible-light:#a10010;--color-danger-accessible-dark:#fef1f2;--font-mc:Plus Jakarta Sans,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-code:Fira Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}#nm .sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}#nm .static{position:static}#nm .top-1{top:calc(var(--spacing)*1)}#nm .top-2{top:calc(var(--spacing)*2)}#nm .right-0{right:calc(var(--spacing)*0)}#nm .right-2{right:calc(var(--spacing)*2)}#nm .right-4{right:calc(var(--spacing)*4)}#nm .left-0{left:calc(var(--spacing)*0)}#nm .z-10{z-index:10}#nm .m-10{margin:calc(var(--spacing)*10)}#nm .h-96{height:calc(var(--spacing)*96)}#nm .h-\[17\.5px\]{height:17.5px}#nm .h-\[20px\]{height:20px}#nm .h-\[21px\]{height:21px}#nm .h-\[24px\]{height:24px}#nm .h-\[28px\]{height:28px}#nm .h-\[32px\]{height:32px}#nm .h-\[35px\]{height:35px}#nm .h-\[40px\]{height:40px}#nm .h-px{height:1px}#nm .w-4{width:calc(var(--spacing)*4)}#nm .w-\[17\.5px\]{width:17.5px}#nm .w-\[21px\]{width:21px}#nm .w-\[28px\]{width:28px}#nm .w-\[32\.5px\]{width:32.5px}#nm .w-\[35px\]{width:35px}#nm .w-\[39px\]{width:39px}#nm .w-\[52px\]{width:52px}#nm .w-\[65px\]{width:65px}#nm .w-max{width:max-content}#nm .w-px{width:1px}#nm .max-w-60{max-width:calc(var(--spacing)*60)}#nm .min-w-36{min-width:calc(var(--spacing)*36)}#nm .flex-1{flex:1}#nm .\!grow{flex-grow:1!important}#nm .grow{flex-grow:1}#nm .translate-x-\[12px\]{--tw-translate-x:12px;translate:var(--tw-translate-x)var(--tw-translate-y)}#nm .translate-x-\[15px\]{--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}#nm .translate-x-\[20px\]{--tw-translate-x:20px;translate:var(--tw-translate-x)var(--tw-translate-y)}#nm .translate-x-\[25px\]{--tw-translate-x:25px;translate:var(--tw-translate-x)var(--tw-translate-y)}#nm .transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}#nm .animate-pulse{animation:var(--animate-pulse)}#nm .animate-spin{animation:var(--animate-spin)}#nm .cursor-pointer{cursor:pointer}#nm .flex-row{flex-direction:row}#nm .justify-start{justify-content:flex-start}#nm .gap-3{gap:calc(var(--spacing)*3)}#nm .gap-4{gap:calc(var(--spacing)*4)}#nm .overflow-x-auto{overflow-x:auto}#nm .rounded-\[3\.75px\]{border-radius:3.75px}#nm .rounded-\[4\.5px\]{border-radius:4.5px}#nm .rounded-\[5px\]{border-radius:5px}#nm .rounded-\[6px\]{border-radius:6px}#nm .rounded-\[7\.5px\]{border-radius:7.5px}#nm .rounded-\[8px\]{border-radius:8px}#nm .rounded-\[10px\]{border-radius:10px}#nm .rounded-full{border-radius:3.40282e38px}#nm .rounded-md{border-radius:var(--radius-md)}#nm .rounded-sm{border-radius:var(--radius-sm)}#nm .border-solid{--tw-border-style:solid;border-style:solid}#nm .border-\[rgba\(255\,255\,255\,0\.0\)\]{border-color:#fff0}#nm .border-danger-default-light{border-color:var(--color-danger-default-light)}#nm .border-grey-0\/0{border-color:#0000}@supports (color:color-mix(in lab,red,red)){#nm .border-grey-0\/0{border-color:var(--color-grey-0)}@supports (color:color-mix(in lab,red,red)){#nm .border-grey-0\/0{border-color:color-mix(in oklab,var(--color-grey-0)0%,transparent)}}}#nm .border-b-label-primary-light{border-bottom-color:var(--color-label-primary-light)}#nm .bg-background-primary-grouped-light{background-color:var(--color-background-primary-grouped-light)}#nm .bg-background-secondary-grouped-light{background-color:var(--color-background-secondary-grouped-light)}#nm .bg-background-tertiary-grouped-light{background-color:var(--color-background-tertiary-grouped-light)}#nm .bg-background-universal-overlay-light{background-color:var(--color-background-universal-overlay-light)}#nm .bg-danger-background-light{background-color:var(--color-danger-background-light)}#nm .bg-nonadaptable-text-light{background-color:var(--color-nonadaptable-text-light)}#nm .bg-overlay-fill-alternative-light{background-color:var(--color-overlay-fill-alternative-light)}#nm .bg-overlay-fill-default-light{background-color:var(--color-overlay-fill-default-light)}#nm .bg-primary-action-button-light{background-color:var(--color-primary-action-button-light)}#nm .bg-separator-opaque-alternative-light{background-color:var(--color-separator-opaque-alternative-light)}#nm .bg-separator-opaque-light{background-color:var(--color-separator-opaque-light)}#nm .bg-separator-regular-light{background-color:var(--color-separator-regular-light)}#nm .bg-success-default-light{background-color:var(--color-success-default-light)}#nm .bg-tertiary-action-button-light{background-color:var(--color-tertiary-action-button-light)}#nm .bg-transparent{background-color:#0000}#nm .p-1{padding:calc(var(--spacing)*1)}#nm .p-2{padding:calc(var(--spacing)*2)}#nm .p-\[1\.5px\]{padding:1.5px}#nm .p-\[1\.25px\]{padding:1.25px}#nm .p-\[2\.5px\]{padding:2.5px}#nm .p-\[2px\]{padding:2px}#nm .px-1{padding-inline:calc(var(--spacing)*1)}#nm .px-2{padding-inline:calc(var(--spacing)*2)}#nm .px-3{padding-inline:calc(var(--spacing)*3)}#nm .py-0\.5{padding-block:calc(var(--spacing)*.5)}#nm .py-1{padding-block:calc(var(--spacing)*1)}#nm .py-2{padding-block:calc(var(--spacing)*2)}#nm .pb-6{padding-bottom:calc(var(--spacing)*6)}#nm .font-code{font-family:var(--font-code)}#nm .font-mc{font-family:var(--font-mc)}#nm .font-sans{font-family:var(--font-sans)}#nm .text-\[10px\]{font-size:10px}#nm .text-\[12px\]{font-size:12px}#nm .text-\[13px\]{font-size:13px}#nm .text-\[15px\]{font-size:15px}#nm .text-\[20px\]{font-size:20px}#nm .text-\[24px\]{font-size:24px}#nm .text-\[32px\]{font-size:32px}#nm .text-\[40px\]{font-size:40px}#nm .text-\[48px\]{font-size:48px}#nm .text-\[60px\]{font-size:60px}#nm .text-\[72px\]{font-size:72px}#nm .leading-\[14px\]{--tw-leading:14px;line-height:14px}#nm .leading-\[16px\]{--tw-leading:16px;line-height:16px}#nm .leading-\[20px\]{--tw-leading:20px;line-height:20px}#nm .leading-\[24px\]{--tw-leading:24px;line-height:24px}#nm .leading-\[32px\]{--tw-leading:32px;line-height:32px}#nm .leading-\[40px\]{--tw-leading:40px;line-height:40px}#nm .leading-\[48px\]{--tw-leading:48px;line-height:48px}#nm .leading-\[60px\]{--tw-leading:60px;line-height:60px}#nm .leading-\[72px\]{--tw-leading:72px;line-height:72px}#nm .leading-\[90px\]{--tw-leading:90px;line-height:90px}#nm .font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}#nm .font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}#nm .font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}#nm .text-brand-coral-default-light{color:var(--color-brand-coral-default-light)}#nm .text-label-placeholder-light{color:var(--color-label-placeholder-light)}#nm .text-label-secondary-light{color:var(--color-label-secondary-light)}#nm .text-label-tertiary-light{color:var(--color-label-tertiary-light)}#nm .text-nonadaptable-text-dark{color:var(--color-nonadaptable-text-dark)}#nm .text-nonadaptable-text-light{color:var(--color-nonadaptable-text-light)}#nm .text-primary-action-disabled-light{color:var(--color-primary-action-disabled-light)}#nm .capitalize{text-transform:capitalize}#nm .shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#nm .backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}#nm .transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}#nm .transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}#nm .duration-300{--tw-duration:.3s;transition-duration:.3s}#nm .ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}@media (hover:hover){#nm .group-hover\:visible:is(:where(.group):hover *){visibility:visible}#nm .group-hover\:block:is(:where(.group):hover *){display:block}#nm .group-hover\:text-label-quaternary-light:is(:where(.group):hover *){color:var(--color-label-quaternary-light)}}#nm .placeholder\:text-label-placeholder-light::placeholder{color:var(--color-label-placeholder-light)}@media (hover:hover){#nm .hover\:border-danger-accessible-light:hover{border-color:var(--color-danger-accessible-light)}#nm .hover\:bg-background-universal-overlay-light:hover{background-color:var(--color-background-universal-overlay-light)}#nm .hover\:bg-danger-background-light:hover{background-color:var(--color-danger-background-light)}#nm .hover\:bg-danger-hover-light:hover{background-color:var(--color-danger-hover-light)}#nm .hover\:bg-overlay-fill-default-light:hover{background-color:var(--color-overlay-fill-default-light)}#nm .hover\:bg-primary-action-button-hover-light:hover{background-color:var(--color-primary-action-button-hover-light)}#nm .hover\:bg-secondary-action-button-hover-light:hover{background-color:var(--color-secondary-action-button-hover-light)}#nm .hover\:bg-tertiary-action-button-hover-light:hover{background-color:var(--color-tertiary-action-button-hover-light)}}#nm .focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){#nm .focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}#nm .disabled\:pointer-events-none:disabled{pointer-events:none}#nm .disabled\:border:disabled{border-style:var(--tw-border-style);border-width:1px}#nm .disabled\:border-separator-opaque-light:disabled{border-color:var(--color-separator-opaque-light)}#nm .disabled\:bg-primary-action-disabled-light:disabled{background-color:var(--color-primary-action-disabled-light)}#nm .disabled\:bg-secondary-action-disabled-light:disabled{background-color:var(--color-secondary-action-disabled-light)}#nm .disabled\:text-primary-action-disabled-light:disabled{color:var(--color-primary-action-disabled-light)}@media (prefers-color-scheme:dark){#nm .dark\:border-danger-default-dark{border-color:var(--color-danger-default-dark)}#nm .dark\:border-separator-opaque-dark{border-color:var(--color-separator-opaque-dark)}#nm .dark\:border-separator-regular-dark{border-color:var(--color-separator-regular-dark)}#nm .dark\:border-b-label-primary-dark{border-bottom-color:var(--color-label-primary-dark)}#nm .dark\:bg-background-primary-dark{background-color:var(--color-background-primary-dark)}#nm .dark\:bg-background-primary-grouped-dark{background-color:var(--color-background-primary-grouped-dark)}#nm .dark\:bg-background-secondary-grouped-dark{background-color:var(--color-background-secondary-grouped-dark)}#nm .dark\:bg-background-tertiary-grouped-dark{background-color:var(--color-background-tertiary-grouped-dark)}#nm .dark\:bg-background-universal-overlay-dark{background-color:var(--color-background-universal-overlay-dark)}#nm .dark\:bg-danger-background-dark{background-color:var(--color-danger-background-dark)}#nm .dark\:bg-overlay-background-default-dark{background-color:var(--color-overlay-background-default-dark)}#nm .dark\:bg-overlay-fill-alternative-dark{background-color:var(--color-overlay-fill-alternative-dark)}#nm .dark\:bg-overlay-fill-default-dark{background-color:var(--color-overlay-fill-default-dark)}#nm .dark\:bg-primary-action-button-dark{background-color:var(--color-primary-action-button-dark)}#nm .dark\:bg-secondary-action-button-dark{background-color:var(--color-secondary-action-button-dark)}#nm .dark\:bg-separator-opaque-alternative-dark{background-color:var(--color-separator-opaque-alternative-dark)}#nm .dark\:bg-separator-opaque-dark{background-color:var(--color-separator-opaque-dark)}#nm .dark\:bg-separator-regular-dark{background-color:var(--color-separator-regular-dark)}#nm .dark\:bg-success-default-dark{background-color:var(--color-success-default-dark)}#nm .dark\:bg-tertiary-action-button-dark{background-color:var(--color-tertiary-action-button-dark)}#nm .dark\:text-brand-coral-default-dark{color:var(--color-brand-coral-default-dark)}#nm .dark\:text-label-placeholder-dark{color:var(--color-label-placeholder-dark)}#nm .dark\:text-label-primary-dark{color:var(--color-label-primary-dark)}#nm .dark\:text-label-quaternary-dark{color:var(--color-label-quaternary-dark)}#nm .dark\:text-label-secondary-dark{color:var(--color-label-secondary-dark)}#nm .dark\:text-label-tertiary-dark{color:var(--color-label-tertiary-dark)}#nm .dark\:text-nonadaptable-text-dark{color:var(--color-nonadaptable-text-dark)}#nm .dark\:text-primary-action-disabled-dark{color:var(--color-primary-action-disabled-dark)}@media (hover:hover){#nm .dark\:group-hover\:text-label-quaternary-dark:is(:where(.group):hover *){color:var(--color-label-quaternary-dark)}}#nm .dark\:placeholder\:text-label-placeholder-dark::placeholder{color:var(--color-label-placeholder-dark)}@media (hover:hover){#nm .dark\:hover\:border-danger-accessible-dark:hover{border-color:var(--color-danger-accessible-dark)}#nm .dark\:hover\:bg-background-universal-overlay-dark:hover{background-color:var(--color-background-universal-overlay-dark)}#nm .dark\:hover\:bg-danger-background-dark:hover{background-color:var(--color-danger-background-dark)}#nm .dark\:hover\:bg-danger-hover-dark:hover{background-color:var(--color-danger-hover-dark)}#nm .dark\:hover\:bg-overlay-fill-default-dark:hover{background-color:var(--color-overlay-fill-default-dark)}#nm .dark\:hover\:bg-primary-action-button-hover-dark:hover{background-color:var(--color-primary-action-button-hover-dark)}#nm .dark\:hover\:bg-secondary-action-button-hover-dark:hover{background-color:var(--color-secondary-action-button-hover-dark)}#nm .dark\:hover\:bg-tertiary-action-button-hover-dark:hover{background-color:var(--color-tertiary-action-button-hover-dark)}}#nm .dark\:disabled\:border-separator-opaque-dark:disabled{border-color:var(--color-separator-opaque-dark)}#nm .dark\:disabled\:bg-primary-action-disabled-dark:disabled{background-color:var(--color-primary-action-disabled-dark)}#nm .dark\:disabled\:bg-secondary-action-disabled-dark:disabled{background-color:var(--color-secondary-action-disabled-dark)}#nm .dark\:disabled\:text-primary-action-disabled-dark:disabled{color:var(--color-primary-action-disabled-dark)}}#nm .\[\&\]\:text-danger-accessible-light{color:var(--color-danger-accessible-light)}#nm .\[\&\]\:text-label-tertiary-light{color:var(--color-label-tertiary-light)}@media (hover:hover){#nm .group-hover\:\[\&\]\:text-label-tertiary-light:is(:where(.group):hover *){color:var(--color-label-tertiary-light)}}@media (prefers-color-scheme:dark){#nm .dark\:\[\&\]\:text-danger-accessible-dark{color:var(--color-danger-accessible-dark)}#nm .dark\:\[\&\]\:text-label-tertiary-dark{color:var(--color-label-tertiary-dark)}@media (hover:hover){#nm .dark\:group-hover\:\[\&\]\:text-label-tertiary-dark:is(:where(.group):hover *){color:var(--color-label-tertiary-dark)}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){#nm *,#nm :before,#nm :after,#nm ::backdrop{--tw-border-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}#nm,#nm :host{--font-sans:Inter,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--radius-lg:.5rem;--radius-xl:.75rem;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-material-grey-5:#f6f6f6d6;--color-material-grey-50:#f6f6f699;--color-material-grey-850:#0000004a;--color-material-grey-950:#00000080;--color-background-primary-light:#fbfbfd;--color-background-primary-dark:#101011;--color-background-secondary-light:#f2f2f7;--color-background-secondary-dark:#1c1c1e;--color-overlay-background-default-light:#0000008c;--color-overlay-background-default-dark:#000000a6;--color-label-primary-light:#000;--color-label-primary-dark:#fff;--color-label-quaternary-light:#fff;--color-label-quaternary-dark:#000;--color-secondary-action-button-light:#000;--color-secondary-action-button-dark:#fff;--color-separator-regular-light:#aeaeb2;--color-separator-regular-dark:#48484a;--color-separator-opaque-light:#e5e5ea;--color-separator-opaque-dark:#242426}#nm *,#nm :after,#nm :before,#nm ::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}#nm ::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}#nm,#nm :host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}#nm hr{height:0;color:inherit;border-top-width:1px}#nm abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}#nm h1,#nm h2,#nm h3,#nm h4,#nm h5,#nm h6{font-size:inherit;font-weight:inherit}#nm a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}#nm b,#nm strong{font-weight:bolder}#nm code,#nm kbd,#nm samp,#nm pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}#nm small{font-size:80%}#nm sub,#nm sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}#nm sub{bottom:-.25em}#nm sup{top:-.5em}#nm table{text-indent:0;border-color:inherit;border-collapse:collapse}#nm :-moz-focusring{outline:auto}#nm progress{vertical-align:baseline}#nm summary{display:list-item}#nm ol,#nm ul,#nm menu{list-style:none}#nm img,#nm svg,#nm video,#nm canvas,#nm audio,#nm iframe,#nm embed,#nm object{vertical-align:middle;display:block}#nm img,#nm video{max-width:100%;height:auto}#nm button,#nm input,#nm select,#nm optgroup,#nm textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}#nm ::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}#nm :where(select:is([multiple],[size])) optgroup{font-weight:bolder}#nm :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}#nm ::file-selector-button{margin-inline-end:4px}#nm ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){#nm ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){#nm ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){#nm ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}}#nm textarea{resize:vertical}#nm ::-webkit-search-decoration{-webkit-appearance:none}#nm ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}#nm ::-webkit-datetime-edit{display:inline-flex}#nm ::-webkit-datetime-edit-fields-wrapper{padding:0}#nm ::-webkit-datetime-edit{padding-block:0}#nm ::-webkit-datetime-edit-year-field{padding-block:0}#nm ::-webkit-datetime-edit-month-field{padding-block:0}#nm ::-webkit-datetime-edit-day-field{padding-block:0}#nm ::-webkit-datetime-edit-hour-field{padding-block:0}#nm ::-webkit-datetime-edit-minute-field{padding-block:0}#nm ::-webkit-datetime-edit-second-field{padding-block:0}#nm ::-webkit-datetime-edit-millisecond-field{padding-block:0}#nm ::-webkit-datetime-edit-meridiem-field{padding-block:0}#nm ::-webkit-calendar-picker-indicator{line-height:1}#nm :-moz-ui-invalid{box-shadow:none}#nm button,#nm input:where([type=button],[type=reset],[type=submit]){appearance:button}#nm ::file-selector-button{appearance:button}#nm ::-webkit-inner-spin-button{height:auto}#nm ::-webkit-outer-spin-button{height:auto}#nm [hidden]:where(:not([hidden=until-found])){display:none!important}#nm *,#nm :after,#nm :before,#nm ::backdrop{border-color:var(--color-gray-200,currentcolor)}#nm ::file-selector-button{border-color:var(--color-gray-200,currentcolor)}#nm button:not(:disabled),#nm [role=button]:not(:disabled){cursor:pointer}#nm .invisible{visibility:hidden}#nm .visible{visibility:visible}#nm .absolute{position:absolute}#nm .fixed{position:fixed}#nm .relative{position:relative}#nm .inset-0{inset:calc(var(--spacing)*0)}#nm .-top-2{top:calc(var(--spacing)*-2)}#nm .-right-2{right:calc(var(--spacing)*-2)}#nm .order-1{order:1}#nm .order-2{order:2}#nm .container{width:100%}@media (min-width:40rem){#nm .container{max-width:40rem}}@media (min-width:48rem){#nm .container{max-width:48rem}}@media (min-width:64rem){#nm .container{max-width:64rem}}@media (min-width:80rem){#nm .container{max-width:80rem}}@media (min-width:96rem){#nm .container{max-width:96rem}}#nm .mx-4{margin-inline:calc(var(--spacing)*4)}#nm .my-8{margin-block:calc(var(--spacing)*8)}#nm .mb-1{margin-bottom:calc(var(--spacing)*1)}#nm .mb-6{margin-bottom:calc(var(--spacing)*6)}#nm .block{display:block}#nm .flex{display:flex}#nm .grid{display:grid}#nm .hidden{display:none}#nm .aspect-video{aspect-ratio:var(--aspect-video)}#nm .h-8{height:calc(var(--spacing)*8)}#nm .h-\[1200px\]{height:1200px}#nm .h-full{height:100%}#nm .max-h-\[272px\]{max-height:272px}#nm .min-h-20{min-height:calc(var(--spacing)*20)}#nm .w-8{width:calc(var(--spacing)*8)}#nm .w-full{width:100%}#nm .shrink{flex-shrink:1}#nm .shrink-0{flex-shrink:0}#nm .resize-none{resize:none}#nm .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}#nm .flex-col{flex-direction:column}#nm .flex-wrap{flex-wrap:wrap}#nm .items-center{align-items:center}#nm .items-end{align-items:flex-end}#nm .justify-between{justify-content:space-between}#nm .justify-center{justify-content:center}#nm .justify-end{justify-content:flex-end}#nm .gap-1{gap:calc(var(--spacing)*1)}#nm .gap-2{gap:calc(var(--spacing)*2)}#nm .gap-6{gap:calc(var(--spacing)*6)}#nm .overflow-hidden{overflow:hidden}#nm .overflow-y-auto{overflow-y:auto}#nm .overflow-y-hidden{overflow-y:hidden}#nm .rounded-lg{border-radius:var(--radius-lg)}#nm .rounded-xl{border-radius:var(--radius-xl)}#nm .border{border-style:var(--tw-border-style);border-width:1px}#nm .border-label-quaternary-light{border-color:var(--color-label-quaternary-light)}#nm .border-separator-opaque-light{border-color:var(--color-separator-opaque-light)}#nm .border-separator-regular-light{border-color:var(--color-separator-regular-light)}#nm .material-medium{background-color:var(--color-material-grey-50);--tw-backdrop-blur:blur(30px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}@media (prefers-color-scheme:dark){#nm .material-medium{background-color:var(--color-material-grey-850)}}#nm .material-ultra-thick{background-color:var(--color-material-grey-5);--tw-backdrop-blur:blur(30px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}@media (prefers-color-scheme:dark){#nm .material-ultra-thick{background-color:var(--color-material-grey-950)}}#nm .bg-background-primary-light{background-color:var(--color-background-primary-light)}#nm .bg-background-secondary-light{background-color:var(--color-background-secondary-light)}#nm .bg-overlay-background-default-light{background-color:var(--color-overlay-background-default-light)}#nm .bg-secondary-action-button-light{background-color:var(--color-secondary-action-button-light)}#nm .object-cover{object-fit:cover}#nm .p-3{padding:calc(var(--spacing)*3)}#nm .p-4{padding:calc(var(--spacing)*4)}#nm .p-10{padding:calc(var(--spacing)*10)}#nm .px-4{padding-inline:calc(var(--spacing)*4)}#nm .py-3{padding-block:calc(var(--spacing)*3)}#nm .pt-4{padding-top:calc(var(--spacing)*4)}#nm .pt-10{padding-top:calc(var(--spacing)*10)}#nm .pb-3{padding-bottom:calc(var(--spacing)*3)}#nm .break-words{overflow-wrap:break-word}#nm .whitespace-pre-wrap{white-space:pre-wrap}#nm .text-label-primary-light{color:var(--color-label-primary-light)}#nm .text-label-quaternary-light{color:var(--color-label-quaternary-light)}#nm .outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){#nm .outline-hidden{outline-offset:2px;outline:2px solid #0000}}#nm .transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (min-width:48rem){#nm .md\:-top-4{top:calc(var(--spacing)*-4)}#nm .md\:-right-4{right:calc(var(--spacing)*-4)}#nm .md\:order-1{order:1}#nm .md\:order-2{order:2}#nm .md\:mb-0{margin-bottom:calc(var(--spacing)*0)}#nm .md\:mb-2{margin-bottom:calc(var(--spacing)*2)}#nm .md\:block{display:block}#nm .md\:aspect-square{aspect-ratio:1}#nm .md\:max-h-full{max-height:100%}#nm .md\:max-w-\[960px\]{max-width:960px}#nm .md\:min-w-\[660px\]{min-width:660px}#nm .md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}#nm .md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}#nm .md\:flex-row-reverse{flex-direction:row-reverse}#nm .md\:items-start{align-items:flex-start}#nm .md\:justify-start{justify-content:flex-start}#nm .md\:gap-2{gap:calc(var(--spacing)*2)}#nm .md\:gap-4{gap:calc(var(--spacing)*4)}#nm .md\:gap-8{gap:calc(var(--spacing)*8)}#nm .md\:gap-16{gap:calc(var(--spacing)*16)}#nm .md\:p-8{padding:calc(var(--spacing)*8)}#nm .md\:py-4{padding-block:calc(var(--spacing)*4)}}@media (prefers-color-scheme:dark){#nm .dark\:border-label-quaternary-dark{border-color:var(--color-label-quaternary-dark)}#nm .dark\:border-separator-opaque-dark{border-color:var(--color-separator-opaque-dark)}#nm .dark\:border-separator-regular-dark{border-color:var(--color-separator-regular-dark)}#nm .dark\:bg-background-primary-dark{background-color:var(--color-background-primary-dark)}#nm .dark\:bg-background-secondary-dark{background-color:var(--color-background-secondary-dark)}#nm .dark\:bg-overlay-background-default-dark{background-color:var(--color-overlay-background-default-dark)}#nm .dark\:bg-secondary-action-button-dark{background-color:var(--color-secondary-action-button-dark)}#nm .dark\:text-label-primary-dark{color:var(--color-label-primary-dark)}#nm .dark\:text-label-quaternary-dark{color:var(--color-label-quaternary-dark)}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}