@arbidocs/react 0.3.170 → 0.3.172

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.
@@ -0,0 +1,43 @@
1
+ import { createContext, useMemo, useContext, useState, useEffect } from 'react';
2
+ import { Arbi } from '@arbidocs/sdk/browser';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ // src/ArbiProvider.tsx
6
+ var ArbiContext = createContext(null);
7
+ function ArbiProvider({ children, ...options }) {
8
+ const arbi = useMemo(
9
+ () => new Arbi(options),
10
+ // Stable on url + deploymentDomain — re-creating the instance on every render would be wrong
11
+ // eslint-disable-next-line react-hooks/exhaustive-deps
12
+ [options.url, options.deploymentDomain, options.credentials]
13
+ );
14
+ return /* @__PURE__ */ jsx(ArbiContext.Provider, { value: arbi, children });
15
+ }
16
+ function useArbi() {
17
+ const arbi = useContext(ArbiContext);
18
+ if (!arbi) {
19
+ throw new Error("useArbi() must be used within an <ArbiProvider>");
20
+ }
21
+ return arbi;
22
+ }
23
+ function AudioViewer({ blob, title }) {
24
+ const [objectUrl, setObjectUrl] = useState("");
25
+ useEffect(() => {
26
+ const url = URL.createObjectURL(blob);
27
+ setObjectUrl(url);
28
+ return () => URL.revokeObjectURL(url);
29
+ }, [blob]);
30
+ if (!objectUrl) return null;
31
+ return /* @__PURE__ */ jsx(
32
+ "div",
33
+ {
34
+ className: "h-full w-full flex items-center justify-center p-4 bg-muted/30",
35
+ "data-testid": "audio-viewer",
36
+ children: /* @__PURE__ */ jsx("audio", { src: objectUrl, controls: true, title, className: "w-full max-w-lg" })
37
+ }
38
+ );
39
+ }
40
+
41
+ export { ArbiProvider, AudioViewer, useArbi };
42
+ //# sourceMappingURL=chunk-Q6XAXIT3.js.map
43
+ //# sourceMappingURL=chunk-Q6XAXIT3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ArbiProvider.tsx","../src/useArbi.ts","../src/viewers/AudioViewer.tsx"],"names":["jsx"],"mappings":";;;;;AAYO,IAAM,WAAA,GAAc,cAA2B,IAAI,CAAA;AAMnD,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,SAAQ,EAAsB;AACxE,EAAA,MAAM,IAAA,GAAO,OAAA;AAAA,IACX,MAAM,IAAI,IAAA,CAAK,OAAO,CAAA;AAAA;AAAA;AAAA,IAGtB,CAAC,OAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,gBAAA,EAAkB,QAAQ,WAAW;AAAA,GAC7D;AAEA,EAAA,2BAAQ,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,MAAO,QAAA,EAAS,CAAA;AACtD;ACnBO,SAAS,OAAA,GAAgB;AAC9B,EAAA,MAAM,IAAA,GAAO,WAAW,WAAW,CAAA;AACnC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,IAAA;AACT;ACNO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAM,KAAA,EAAM,EAAqB;AAC7D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAiB,EAAE,CAAA;AAErD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,IAAA,YAAA,CAAa,GAAG,CAAA;AAChB,IAAA,OAAO,MAAM,GAAA,CAAI,eAAA,CAAgB,GAAG,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gEAAA;AAAA,MACV,aAAA,EAAY,cAAA;AAAA,MAEZ,QAAA,kBAAAA,IAAC,OAAA,EAAA,EAAM,GAAA,EAAK,WAAW,QAAA,EAAQ,IAAA,EAAC,KAAA,EAAc,SAAA,EAAU,iBAAA,EAAkB;AAAA;AAAA,GAC5E;AAEJ","file":"chunk-Q6XAXIT3.js","sourcesContent":["/**\n * ArbiProvider — React context that holds an Arbi instance.\n *\n * Usage:\n * <ArbiProvider url=\"https://arbi.mycompany.com\">\n * <App />\n * </ArbiProvider>\n */\n\nimport { createContext, useMemo, type ReactNode } from 'react'\nimport { Arbi, type ArbiOptions } from '@arbidocs/sdk/browser'\n\nexport const ArbiContext = createContext<Arbi | null>(null)\n\nexport interface ArbiProviderProps extends ArbiOptions {\n children: ReactNode\n}\n\nexport function ArbiProvider({ children, ...options }: ArbiProviderProps) {\n const arbi = useMemo(\n () => new Arbi(options),\n // Stable on url + deploymentDomain — re-creating the instance on every render would be wrong\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [options.url, options.deploymentDomain, options.credentials]\n )\n\n return <ArbiContext.Provider value={arbi}>{children}</ArbiContext.Provider>\n}\n","/**\n * Hook to access the Arbi instance from the nearest ArbiProvider.\n */\n\nimport { useContext } from 'react'\nimport type { Arbi } from '@arbidocs/sdk/browser'\nimport { ArbiContext } from './ArbiProvider'\n\nexport function useArbi(): Arbi {\n const arbi = useContext(ArbiContext)\n if (!arbi) {\n throw new Error('useArbi() must be used within an <ArbiProvider>')\n }\n return arbi\n}\n","import { useEffect, useState } from 'react'\n\nexport interface AudioViewerProps {\n blob: Blob\n title: string\n}\n\n/** Renders an audio blob with the browser's native transport controls. */\nexport function AudioViewer({ blob, title }: AudioViewerProps) {\n const [objectUrl, setObjectUrl] = useState<string>('')\n\n useEffect(() => {\n const url = URL.createObjectURL(blob)\n setObjectUrl(url)\n return () => URL.revokeObjectURL(url)\n }, [blob])\n\n if (!objectUrl) return null\n\n return (\n <div\n className=\"h-full w-full flex items-center justify-center p-4 bg-muted/30\"\n data-testid=\"audio-viewer\"\n >\n <audio src={objectUrl} controls title={title} className=\"w-full max-w-lg\" />\n </div>\n )\n}\n"]}
@@ -22,8 +22,26 @@ function useArbi() {
22
22
  }
23
23
  return arbi;
24
24
  }
25
+ function AudioViewer({ blob, title }) {
26
+ const [objectUrl, setObjectUrl] = react.useState("");
27
+ react.useEffect(() => {
28
+ const url = URL.createObjectURL(blob);
29
+ setObjectUrl(url);
30
+ return () => URL.revokeObjectURL(url);
31
+ }, [blob]);
32
+ if (!objectUrl) return null;
33
+ return /* @__PURE__ */ jsxRuntime.jsx(
34
+ "div",
35
+ {
36
+ className: "h-full w-full flex items-center justify-center p-4 bg-muted/30",
37
+ "data-testid": "audio-viewer",
38
+ children: /* @__PURE__ */ jsxRuntime.jsx("audio", { src: objectUrl, controls: true, title, className: "w-full max-w-lg" })
39
+ }
40
+ );
41
+ }
25
42
 
26
43
  exports.ArbiProvider = ArbiProvider;
44
+ exports.AudioViewer = AudioViewer;
27
45
  exports.useArbi = useArbi;
28
- //# sourceMappingURL=chunk-ZMTLGO3K.cjs.map
29
- //# sourceMappingURL=chunk-ZMTLGO3K.cjs.map
46
+ //# sourceMappingURL=chunk-RWCMW36I.cjs.map
47
+ //# sourceMappingURL=chunk-RWCMW36I.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ArbiProvider.tsx","../src/useArbi.ts","../src/viewers/AudioViewer.tsx"],"names":["createContext","useMemo","Arbi","useContext","useState","useEffect","jsx"],"mappings":";;;;;;;AAYO,IAAM,WAAA,GAAcA,oBAA2B,IAAI,CAAA;AAMnD,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,SAAQ,EAAsB;AACxE,EAAA,MAAM,IAAA,GAAOC,aAAA;AAAA,IACX,MAAM,IAAIC,YAAA,CAAK,OAAO,CAAA;AAAA;AAAA;AAAA,IAGtB,CAAC,OAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,gBAAA,EAAkB,QAAQ,WAAW;AAAA,GAC7D;AAEA,EAAA,sCAAQ,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,MAAO,QAAA,EAAS,CAAA;AACtD;ACnBO,SAAS,OAAA,GAAgB;AAC9B,EAAA,MAAM,IAAA,GAAOC,iBAAW,WAAW,CAAA;AACnC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,IAAA;AACT;ACNO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAM,KAAA,EAAM,EAAqB;AAC7D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAAiB,EAAE,CAAA;AAErD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,IAAA,YAAA,CAAa,GAAG,CAAA;AAChB,IAAA,OAAO,MAAM,GAAA,CAAI,eAAA,CAAgB,GAAG,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gEAAA;AAAA,MACV,aAAA,EAAY,cAAA;AAAA,MAEZ,QAAA,kBAAAA,eAAC,OAAA,EAAA,EAAM,GAAA,EAAK,WAAW,QAAA,EAAQ,IAAA,EAAC,KAAA,EAAc,SAAA,EAAU,iBAAA,EAAkB;AAAA;AAAA,GAC5E;AAEJ","file":"chunk-RWCMW36I.cjs","sourcesContent":["/**\n * ArbiProvider — React context that holds an Arbi instance.\n *\n * Usage:\n * <ArbiProvider url=\"https://arbi.mycompany.com\">\n * <App />\n * </ArbiProvider>\n */\n\nimport { createContext, useMemo, type ReactNode } from 'react'\nimport { Arbi, type ArbiOptions } from '@arbidocs/sdk/browser'\n\nexport const ArbiContext = createContext<Arbi | null>(null)\n\nexport interface ArbiProviderProps extends ArbiOptions {\n children: ReactNode\n}\n\nexport function ArbiProvider({ children, ...options }: ArbiProviderProps) {\n const arbi = useMemo(\n () => new Arbi(options),\n // Stable on url + deploymentDomain — re-creating the instance on every render would be wrong\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [options.url, options.deploymentDomain, options.credentials]\n )\n\n return <ArbiContext.Provider value={arbi}>{children}</ArbiContext.Provider>\n}\n","/**\n * Hook to access the Arbi instance from the nearest ArbiProvider.\n */\n\nimport { useContext } from 'react'\nimport type { Arbi } from '@arbidocs/sdk/browser'\nimport { ArbiContext } from './ArbiProvider'\n\nexport function useArbi(): Arbi {\n const arbi = useContext(ArbiContext)\n if (!arbi) {\n throw new Error('useArbi() must be used within an <ArbiProvider>')\n }\n return arbi\n}\n","import { useEffect, useState } from 'react'\n\nexport interface AudioViewerProps {\n blob: Blob\n title: string\n}\n\n/** Renders an audio blob with the browser's native transport controls. */\nexport function AudioViewer({ blob, title }: AudioViewerProps) {\n const [objectUrl, setObjectUrl] = useState<string>('')\n\n useEffect(() => {\n const url = URL.createObjectURL(blob)\n setObjectUrl(url)\n return () => URL.revokeObjectURL(url)\n }, [blob])\n\n if (!objectUrl) return null\n\n return (\n <div\n className=\"h-full w-full flex items-center justify-center p-4 bg-muted/30\"\n data-testid=\"audio-viewer\"\n >\n <audio src={objectUrl} controls title={title} className=\"w-full max-w-lg\" />\n </div>\n )\n}\n"]}