@dxos/plugin-wnfs 0.8.2-main.f11618f → 0.8.2-staging.42af850

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 (71) hide show
  1. package/dist/lib/browser/FileContainer-SEU43TLT.mjs +106 -0
  2. package/dist/lib/browser/{FileContainer-W646BCAM.mjs.map → FileContainer-SEU43TLT.mjs.map} +1 -1
  3. package/dist/lib/browser/{blockstore-CTEISOKD.mjs → blockstore-UT7233RJ.mjs} +4 -4
  4. package/dist/lib/browser/blockstore-UT7233RJ.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-NIDFBTNY.mjs → chunk-DL7BBH57.mjs} +3 -3
  6. package/dist/lib/browser/{chunk-NIDFBTNY.mjs.map → chunk-DL7BBH57.mjs.map} +1 -1
  7. package/dist/lib/browser/chunk-LQYDI474.mjs +16 -0
  8. package/dist/lib/browser/{chunk-X54OT4V3.mjs → chunk-PHTWWADN.mjs} +2 -2
  9. package/dist/lib/browser/{chunk-X54OT4V3.mjs.map → chunk-PHTWWADN.mjs.map} +1 -1
  10. package/dist/lib/browser/{chunk-TOIGKYS7.mjs → chunk-RY5XZCVP.mjs} +18 -17
  11. package/dist/lib/browser/chunk-RY5XZCVP.mjs.map +7 -0
  12. package/dist/lib/browser/{file-uploader-F3C3A4TM.mjs → file-uploader-OQHVKRQ5.mjs} +4 -4
  13. package/dist/lib/browser/file-uploader-OQHVKRQ5.mjs.map +7 -0
  14. package/dist/lib/browser/index.mjs +4 -4
  15. package/dist/lib/browser/{intent-resolver-JSSHOBDG.mjs → intent-resolver-42B3MXJZ.mjs} +5 -5
  16. package/dist/lib/browser/intent-resolver-42B3MXJZ.mjs.map +7 -0
  17. package/dist/lib/browser/{markdown-G6DTBWWO.mjs → markdown-BWBHUHHH.mjs} +6 -8
  18. package/dist/lib/browser/markdown-BWBHUHHH.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-BAV7AAW6.mjs → react-surface-GTYQZY3L.mjs} +24 -18
  21. package/dist/lib/browser/react-surface-GTYQZY3L.mjs.map +7 -0
  22. package/dist/lib/browser/types/index.mjs +2 -2
  23. package/dist/types/src/blockstore.d.ts.map +1 -1
  24. package/dist/types/src/capabilities/blockstore.d.ts +2 -2
  25. package/dist/types/src/capabilities/blockstore.d.ts.map +1 -1
  26. package/dist/types/src/capabilities/file-uploader.d.ts +2 -2
  27. package/dist/types/src/capabilities/file-uploader.d.ts.map +1 -1
  28. package/dist/types/src/capabilities/index.d.ts +4 -4
  29. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  30. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  31. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  32. package/dist/types/src/capabilities/markdown.d.ts +2 -2
  33. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  35. package/dist/types/src/components/FileContainer.d.ts.map +1 -1
  36. package/dist/types/src/components/FileInput.d.ts +2 -2
  37. package/dist/types/src/components/FileInput.d.ts.map +1 -1
  38. package/dist/types/src/components/FilePreview.d.ts.map +1 -1
  39. package/dist/types/src/extensions/image.d.ts.map +1 -1
  40. package/dist/types/src/helpers/common.d.ts.map +1 -1
  41. package/dist/types/src/helpers/load.d.ts.map +1 -1
  42. package/dist/types/src/helpers/upload.d.ts.map +1 -1
  43. package/dist/types/src/helpers/wnfs-url.d.ts.map +1 -1
  44. package/dist/types/src/translations.d.ts +2 -10
  45. package/dist/types/src/translations.d.ts.map +1 -1
  46. package/dist/types/src/types/file.d.ts +10 -10
  47. package/dist/types/src/types/file.d.ts.map +1 -1
  48. package/dist/types/src/types/types.d.ts +15 -15
  49. package/dist/types/src/types/types.d.ts.map +1 -1
  50. package/dist/types/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +26 -23
  52. package/src/blockstore.ts +9 -9
  53. package/src/capabilities/blockstore.ts +3 -3
  54. package/src/capabilities/file-uploader.ts +3 -3
  55. package/src/capabilities/intent-resolver.ts +3 -3
  56. package/src/capabilities/markdown.ts +4 -4
  57. package/src/capabilities/react-surface.tsx +6 -3
  58. package/src/components/FileInput.tsx +2 -2
  59. package/src/extensions/image.tsx +2 -2
  60. package/src/meta.ts +1 -1
  61. package/src/types/file.ts +7 -5
  62. package/src/types/types.ts +11 -10
  63. package/dist/lib/browser/FileContainer-W646BCAM.mjs +0 -94
  64. package/dist/lib/browser/blockstore-CTEISOKD.mjs.map +0 -7
  65. package/dist/lib/browser/chunk-TOIGKYS7.mjs.map +0 -7
  66. package/dist/lib/browser/chunk-XZFJLSBE.mjs +0 -16
  67. package/dist/lib/browser/file-uploader-F3C3A4TM.mjs.map +0 -7
  68. package/dist/lib/browser/intent-resolver-JSSHOBDG.mjs.map +0 -7
  69. package/dist/lib/browser/markdown-G6DTBWWO.mjs.map +0 -7
  70. package/dist/lib/browser/react-surface-BAV7AAW6.mjs.map +0 -7
  71. /package/dist/lib/browser/{chunk-XZFJLSBE.mjs.map → chunk-LQYDI474.mjs.map} +0 -0
@@ -0,0 +1,106 @@
1
+ import "./chunk-LQYDI474.mjs";
2
+ import {
3
+ filePath,
4
+ getBlobUrl,
5
+ loadWnfs,
6
+ wnfsUrl
7
+ } from "./chunk-YYAW4U6J.mjs";
8
+ import {
9
+ WnfsCapabilities
10
+ } from "./chunk-DL7BBH57.mjs";
11
+ import "./chunk-PHTWWADN.mjs";
12
+
13
+ // packages/plugins/plugin-wnfs/src/components/FileContainer.tsx
14
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
15
+ import React2, { useEffect, useState } from "react";
16
+ import { useCapability } from "@dxos/app-framework";
17
+ import { invariant } from "@dxos/invariant";
18
+ import { getSpace } from "@dxos/react-client/echo";
19
+ import { StackItem } from "@dxos/react-ui-stack";
20
+
21
+ // packages/plugins/plugin-wnfs/src/components/FilePreview.tsx
22
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
23
+ import React from "react";
24
+ import { mx } from "@dxos/react-ui-theme";
25
+ var FilePreview = ({ type, url, classNames }) => {
26
+ var _effect = _useSignals();
27
+ try {
28
+ if (type.startsWith("image/")) {
29
+ return /* @__PURE__ */ React.createElement("img", {
30
+ className: mx("w-full h-full object-contain", classNames),
31
+ src: url
32
+ });
33
+ } else if (type.startsWith("video/")) {
34
+ return /* @__PURE__ */ React.createElement("video", {
35
+ className: mx("w-full h-full object-contain", classNames),
36
+ src: url,
37
+ controls: true
38
+ });
39
+ } else {
40
+ return /* @__PURE__ */ React.createElement("iframe", {
41
+ className: mx("w-full h-full overflow-auto", classNames),
42
+ src: url
43
+ });
44
+ }
45
+ } finally {
46
+ _effect.f();
47
+ }
48
+ };
49
+
50
+ // packages/plugins/plugin-wnfs/src/components/FileContainer.tsx
51
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-wnfs/src/components/FileContainer.tsx";
52
+ var FileContainer = ({ file, role }) => {
53
+ var _effect = _useSignals2();
54
+ try {
55
+ const blockstore = useCapability(WnfsCapabilities.Blockstore);
56
+ const instances = useCapability(WnfsCapabilities.Instances);
57
+ const [blobUrl, setBlobUrl] = useState();
58
+ useEffect(() => {
59
+ const timeout = setTimeout(async () => {
60
+ const space = getSpace(file);
61
+ invariant(space, void 0, {
62
+ F: __dxlog_file,
63
+ L: 25,
64
+ S: void 0,
65
+ A: [
66
+ "space",
67
+ ""
68
+ ]
69
+ });
70
+ const { directory, forest } = await loadWnfs({
71
+ blockstore,
72
+ instances,
73
+ space
74
+ });
75
+ const path = filePath(file.cid.toString(), space);
76
+ const url = await getBlobUrl({
77
+ wnfsUrl: wnfsUrl(path),
78
+ blockstore,
79
+ directory,
80
+ forest,
81
+ type: file.type
82
+ });
83
+ setBlobUrl(url);
84
+ });
85
+ return () => clearTimeout(timeout);
86
+ }, [
87
+ file
88
+ ]);
89
+ if (!blobUrl) {
90
+ return null;
91
+ }
92
+ return /* @__PURE__ */ React2.createElement(StackItem.Content, {
93
+ role
94
+ }, /* @__PURE__ */ React2.createElement(FilePreview, {
95
+ type: file.type,
96
+ url: blobUrl
97
+ }));
98
+ } finally {
99
+ _effect.f();
100
+ }
101
+ };
102
+ var FileContainer_default = FileContainer;
103
+ export {
104
+ FileContainer_default as default
105
+ };
106
+ //# sourceMappingURL=FileContainer-SEU43TLT.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/FileContainer.tsx", "../../../src/components/FilePreview.tsx"],
4
4
  "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { FilePreview } from './FilePreview';\nimport { WnfsCapabilities } from '../capabilities';\nimport { filePath, getBlobUrl, loadWnfs, wnfsUrl } from '../helpers';\nimport { type FileType } from '../types';\n\nconst FileContainer = ({ file, role }: { file: FileType; role: string }) => {\n const blockstore = useCapability(WnfsCapabilities.Blockstore);\n const instances = useCapability(WnfsCapabilities.Instances);\n const [blobUrl, setBlobUrl] = useState<string>();\n\n useEffect(() => {\n const timeout = setTimeout(async () => {\n const space = getSpace(file);\n invariant(space);\n const { directory, forest } = await loadWnfs({ blockstore, instances, space });\n const path = filePath(file.cid.toString(), space);\n const url = await getBlobUrl({ wnfsUrl: wnfsUrl(path), blockstore, directory, forest, type: file.type });\n setBlobUrl(url);\n });\n\n return () => clearTimeout(timeout);\n }, [file]);\n\n if (!blobUrl) {\n return null;\n }\n\n return (\n <StackItem.Content role={role}>\n <FilePreview type={file.type} url={blobUrl} />\n </StackItem.Content>\n );\n};\n\nexport default FileContainer;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type FilePreviewProps = ThemedClassName<{ type: string; url: string }>;\n\n/**\n * File/content preview iframe.\n */\nexport const FilePreview = ({ type, url, classNames }: FilePreviewProps) => {\n if (type.startsWith('image/')) {\n return <img className={mx('w-full h-full object-contain', classNames)} src={url} />;\n } else if (type.startsWith('video/')) {\n return <video className={mx('w-full h-full object-contain', classNames)} src={url} controls />;\n } else {\n return <iframe className={mx('w-full h-full overflow-auto', classNames)} src={url} />;\n }\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;AAIA,OAAOA,UAASC,WAAWC,gBAAgB;AAE3C,SAASC,qBAAqB;AAC9B,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;;;ACL1B,OAAOC,WAAW;AAGlB,SAASC,UAAU;AAOZ,IAAMC,cAAc,CAAC,EAAEC,MAAMC,KAAKC,WAAU,MAAoB;AACrE,MAAIF,KAAKG,WAAW,QAAA,GAAW;AAC7B,WAAO,sBAAA,cAACC,OAAAA;MAAIC,WAAWC,GAAG,gCAAgCJ,UAAAA;MAAaK,KAAKN;;EAC9E,WAAWD,KAAKG,WAAW,QAAA,GAAW;AACpC,WAAO,sBAAA,cAACK,SAAAA;MAAMH,WAAWC,GAAG,gCAAgCJ,UAAAA;MAAaK,KAAKN;MAAKQ,UAAAA;;EACrF,OAAO;AACL,WAAO,sBAAA,cAACC,UAAAA;MAAOL,WAAWC,GAAG,+BAA+BJ,UAAAA;MAAaK,KAAKN;;EAChF;AACF;;;;ADNA,IAAMU,gBAAgB,CAAC,EAAEC,MAAMC,KAAI,MAAoC;AACrE,QAAMC,aAAaC,cAAcC,iBAAiBC,UAAU;AAC5D,QAAMC,YAAYH,cAAcC,iBAAiBG,SAAS;AAC1D,QAAM,CAACC,SAASC,UAAAA,IAAcC,SAAAA;AAE9BC,YAAU,MAAA;AACR,UAAMC,UAAUC,WAAW,YAAA;AACzB,YAAMC,QAAQC,SAASf,IAAAA;AACvBgB,gBAAUF,OAAAA,QAAAA;;;;;;;;;AACV,YAAM,EAAEG,WAAWC,OAAM,IAAK,MAAMC,SAAS;QAAEjB;QAAYI;QAAWQ;MAAM,CAAA;AAC5E,YAAMM,OAAOC,SAASrB,KAAKsB,IAAIC,SAAQ,GAAIT,KAAAA;AAC3C,YAAMU,MAAM,MAAMC,WAAW;QAAEC,SAASA,QAAQN,IAAAA;QAAOlB;QAAYe;QAAWC;QAAQS,MAAM3B,KAAK2B;MAAK,CAAA;AACtGlB,iBAAWe,GAAAA;IACb,CAAA;AAEA,WAAO,MAAMI,aAAahB,OAAAA;EAC5B,GAAG;IAACZ;GAAK;AAET,MAAI,CAACQ,SAAS;AACZ,WAAO;EACT;AAEA,SACE,gBAAAqB,OAAA,cAACC,UAAUC,SAAO;IAAC9B;KACjB,gBAAA4B,OAAA,cAACG,aAAAA;IAAYL,MAAM3B,KAAK2B;IAAMH,KAAKhB;;AAGzC;AAEA,IAAA,wBAAeT;",
5
+ "mappings": ";;;;;;;;;;;;;;AAIA,OAAOA,UAASC,WAAWC,gBAAgB;AAE3C,SAASC,qBAAqB;AAC9B,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;;;;ACL1B,OAAOC,WAAW;AAGlB,SAASC,UAAU;AAOZ,IAAMC,cAAc,CAAC,EAAEC,MAAMC,KAAKC,WAAU,MAAoB;;;AACrE,QAAIF,KAAKG,WAAW,QAAA,GAAW;AAC7B,aAAO,sBAAA,cAACC,OAAAA;QAAIC,WAAWC,GAAG,gCAAgCJ,UAAAA;QAAaK,KAAKN;;IAC9E,WAAWD,KAAKG,WAAW,QAAA,GAAW;AACpC,aAAO,sBAAA,cAACK,SAAAA;QAAMH,WAAWC,GAAG,gCAAgCJ,UAAAA;QAAaK,KAAKN;QAAKQ,UAAAA;;IACrF,OAAO;AACL,aAAO,sBAAA,cAACC,UAAAA;QAAOL,WAAWC,GAAG,+BAA+BJ,UAAAA;QAAaK,KAAKN;;IAChF;;;;AACF;;;;ADNA,IAAMU,gBAAgB,CAAC,EAAEC,MAAMC,KAAI,MAAoC;;;AACrE,UAAMC,aAAaC,cAAcC,iBAAiBC,UAAU;AAC5D,UAAMC,YAAYH,cAAcC,iBAAiBG,SAAS;AAC1D,UAAM,CAACC,SAASC,UAAAA,IAAcC,SAAAA;AAE9BC,cAAU,MAAA;AACR,YAAMC,UAAUC,WAAW,YAAA;AACzB,cAAMC,QAAQC,SAASf,IAAAA;AACvBgB,kBAAUF,OAAAA,QAAAA;;;;;;;;;AACV,cAAM,EAAEG,WAAWC,OAAM,IAAK,MAAMC,SAAS;UAAEjB;UAAYI;UAAWQ;QAAM,CAAA;AAC5E,cAAMM,OAAOC,SAASrB,KAAKsB,IAAIC,SAAQ,GAAIT,KAAAA;AAC3C,cAAMU,MAAM,MAAMC,WAAW;UAAEC,SAASA,QAAQN,IAAAA;UAAOlB;UAAYe;UAAWC;UAAQS,MAAM3B,KAAK2B;QAAK,CAAA;AACtGlB,mBAAWe,GAAAA;MACb,CAAA;AAEA,aAAO,MAAMI,aAAahB,OAAAA;IAC5B,GAAG;MAACZ;KAAK;AAET,QAAI,CAACQ,SAAS;AACZ,aAAO;IACT;AAEA,WACE,gBAAAqB,OAAA,cAACC,UAAUC,SAAO;MAAC9B;OACjB,gBAAA4B,OAAA,cAACG,aAAAA;MAAYL,MAAM3B,KAAK2B;MAAMH,KAAKhB;;;;;AAGzC;AAEA,IAAA,wBAAeT;",
6
6
  "names": ["React", "useEffect", "useState", "useCapability", "invariant", "getSpace", "StackItem", "React", "mx", "FilePreview", "type", "url", "classNames", "startsWith", "img", "className", "mx", "src", "video", "controls", "iframe", "FileContainer", "file", "role", "blockstore", "useCapability", "WnfsCapabilities", "Blockstore", "instances", "Instances", "blobUrl", "setBlobUrl", "useState", "useEffect", "timeout", "setTimeout", "space", "getSpace", "invariant", "directory", "forest", "loadWnfs", "path", "filePath", "cid", "toString", "url", "getBlobUrl", "wnfsUrl", "type", "clearTimeout", "React", "StackItem", "Content", "FilePreview"]
7
7
  }
@@ -3,8 +3,8 @@ import {
3
3
  } from "./chunk-YYAW4U6J.mjs";
4
4
  import {
5
5
  WnfsCapabilities
6
- } from "./chunk-NIDFBTNY.mjs";
7
- import "./chunk-X54OT4V3.mjs";
6
+ } from "./chunk-DL7BBH57.mjs";
7
+ import "./chunk-PHTWWADN.mjs";
8
8
 
9
9
  // packages/plugins/plugin-wnfs/src/capabilities/blockstore.ts
10
10
  import { contributes } from "@dxos/app-framework";
@@ -179,7 +179,7 @@ var MixedBlockstore = class extends BaseBlockstore {
179
179
 
180
180
  // packages/plugins/plugin-wnfs/src/capabilities/blockstore.ts
181
181
  var blockstore_default = async (context) => {
182
- const client = context.requestCapability(ClientCapabilities.Client);
182
+ const client = context.getCapability(ClientCapabilities.Client);
183
183
  const apiHost = client.config.values.runtime?.services?.edge?.url || "http://localhost:8787";
184
184
  const blockstore = create(apiHost);
185
185
  await blockstore.open();
@@ -188,4 +188,4 @@ var blockstore_default = async (context) => {
188
188
  export {
189
189
  blockstore_default as default
190
190
  };
191
- //# sourceMappingURL=blockstore-CTEISOKD.mjs.map
191
+ //# sourceMappingURL=blockstore-UT7233RJ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/blockstore.ts", "../../../src/blockstore.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, type PluginContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { WnfsCapabilities } from './capabilities';\nimport * as Blockstore from '../blockstore';\n\nexport default async (context: PluginContext) => {\n const client = context.getCapability(ClientCapabilities.Client);\n const apiHost = client.config.values.runtime?.services?.edge?.url || 'http://localhost:8787';\n const blockstore = Blockstore.create(apiHost);\n await blockstore.open();\n\n return contributes(WnfsCapabilities.Blockstore, blockstore);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { CarWriter } from '@ipld/car';\nimport type { Block } from '@ipld/car/reader';\nimport { BaseBlockstore } from 'blockstore-core';\nimport { IDBBlockstore } from 'blockstore-idb';\nimport debounce from 'debounce';\nimport * as IDB from 'idb-keyval';\nimport all from 'it-all';\nimport { CID } from 'multiformats';\nimport * as Uint8Arrays from 'uint8arrays';\n\nimport { storeName } from './helpers';\n\nexport const create = (apiHost?: string) => {\n return new MixedBlockstore(apiHost);\n};\n\n/**\n * A blockstore that communicates with the DXOS blob service,\n * and which uses an indexedDB blockstore as a client cache.\n */\nexport class MixedBlockstore extends BaseBlockstore {\n readonly #apiHost: string | undefined;\n readonly #localStore: IDBBlockstore;\n\n #isConnected: boolean;\n #flushQueue: () => void;\n #queue: string[];\n\n constructor(apiHost?: string) {\n super();\n\n this.#apiHost = apiHost ? apiHost.replace(/\\/?$/, '') : undefined;\n this.#localStore = new IDBBlockstore(storeName());\n this.#isConnected = navigator.onLine;\n this.#queue = [];\n\n this.#flushQueue = debounce(this.#flushQueueInt, 5000);\n }\n\n async open(): Promise<void> {\n await this.#localStore.open();\n await this.#restoreQueue();\n\n window.addEventListener('offline', async () => {\n this.#isConnected = false;\n });\n\n window.addEventListener('online', async () => {\n this.#isConnected = true;\n this.#flushQueue();\n });\n }\n\n url(apiHost: string, cid?: CID): string {\n const path = cid ? cid.toString() : '';\n return `${apiHost}/api/file${path.length ? '/' + path : ''}`;\n }\n\n // BLOCKSTORE IMPLEMENTATION\n\n override async delete(key: CID): Promise<void> {\n await this.#localStore.delete(key);\n\n if (this.#isConnected && this.#apiHost) {\n await fetch(this.url(this.#apiHost, key), {\n method: 'DELETE',\n });\n }\n }\n\n override async get(key: CID): Promise<Uint8Array> {\n if (await this.#localStore.has(key)) {\n return await this.#localStore.get(key);\n }\n\n if (this.#isConnected && this.#apiHost) {\n const block = await fetch(this.url(this.#apiHost, key), {\n method: 'GET',\n })\n .then((r) => r.arrayBuffer())\n .then((r) => new Uint8Array(r));\n\n // Make sure it is cached locally\n await this.#localStore.put(key, block);\n\n return block;\n }\n\n return await this.#localStore.get(key);\n }\n\n override async has(key: CID): Promise<boolean> {\n if (await this.#localStore.has(key)) {\n return true;\n }\n\n if (this.#isConnected && this.#apiHost) {\n return await fetch(this.url(this.#apiHost, key), {\n method: 'HEAD',\n }).then((r) => r.ok);\n }\n\n return false;\n }\n\n override async put(key: CID, val: Uint8Array): Promise<CID> {\n await this.#localStore.put(key, val);\n\n await this.#addToQueue(key);\n this.#flushQueue();\n\n return key;\n }\n\n async destroy(): Promise<void> {\n await this.#localStore.destroy();\n }\n\n // REMOTE\n\n async putRemote(key: CID, val: Uint8Array): Promise<void> {\n if (this.#apiHost) {\n await fetch(this.url(this.#apiHost, key), {\n method: 'POST',\n body: val,\n });\n }\n }\n\n async putCarRemote(car: Uint8Array): Promise<void> {\n if (this.#apiHost) {\n await fetch(this.url(this.#apiHost), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/vnd.ipld.car',\n },\n body: car,\n });\n }\n }\n\n // QUEUE\n\n readonly queueCacheName = `${storeName()}/state/queue`;\n\n async #addToQueue(key: CID): Promise<void> {\n await this.#saveQueue([...this.#queue, key.toString()]);\n }\n\n async #flushQueueInt(): Promise<void> {\n if (!this.#isConnected || !this.#apiHost) {\n return;\n }\n\n const keys = [...this.#queue];\n if (keys.length === 0) {\n return;\n }\n\n // Collect blocks\n const blocks = await Promise.all(\n keys.map(async (key) => {\n const cid = CID.parse(key);\n const bytes = await this.#localStore.get(cid);\n return { cid, bytes };\n }),\n );\n\n // Create & submit CAR\n const car = await this.#createCar(blocks);\n await this.putCarRemote(car);\n\n // Adjust queue\n const queue = [...this.#queue].filter((k) => {\n if (keys.includes(k)) {\n return false;\n }\n\n return true;\n });\n\n await this.#saveQueue(queue);\n }\n\n async #restoreQueue(): Promise<void> {\n const fromCache = await IDB.get(this.queueCacheName);\n if (fromCache && Array.isArray(fromCache)) {\n this.#queue = fromCache;\n this.#flushQueue();\n }\n }\n\n async #saveQueue(items: string[]): Promise<void> {\n const arr = [...items];\n this.#queue = arr;\n await IDB.set(this.queueCacheName, arr);\n }\n\n // 🛠️\n\n async #createCar(blocks: Block[]): Promise<Uint8Array> {\n const { writer, out } = CarWriter.create();\n const outPromise = all(out);\n\n await Promise.all(\n blocks.map((block) => {\n return writer.put(block);\n }),\n );\n\n await writer.close();\n return Uint8Arrays.concat(await outPromise);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["contributes", "ClientCapabilities", "CarWriter", "BaseBlockstore", "IDBBlockstore", "debounce", "IDB", "all", "CID", "Uint8Arrays", "create", "apiHost", "MixedBlockstore", "BaseBlockstore", "queueCacheName", "storeName", "replace", "undefined", "IDBBlockstore", "navigator", "onLine", "debounce", "open", "window", "addEventListener", "url", "cid", "path", "toString", "length", "delete", "key", "fetch", "method", "get", "has", "block", "then", "r", "arrayBuffer", "Uint8Array", "put", "ok", "val", "destroy", "putRemote", "body", "putCarRemote", "car", "headers", "keys", "blocks", "Promise", "all", "map", "CID", "parse", "bytes", "queue", "filter", "k", "includes", "fromCache", "Array", "isArray", "items", "arr", "set", "writer", "out", "CarWriter", "outPromise", "close", "concat", "context", "client", "getCapability", "ClientCapabilities", "Client", "apiHost", "config", "values", "runtime", "services", "edge", "url", "blockstore", "create", "open", "contributes", "WnfsCapabilities", "Blockstore"]
7
+ }
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  WNFS_PLUGIN
3
- } from "./chunk-X54OT4V3.mjs";
3
+ } from "./chunk-PHTWWADN.mjs";
4
4
 
5
5
  // packages/plugins/plugin-wnfs/src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
7
- var WnfsCapabilities;
8
7
  (function(WnfsCapabilities2) {
9
8
  WnfsCapabilities2.Blockstore = defineCapability(`${WNFS_PLUGIN}/capability/blockstore`);
10
9
  WnfsCapabilities2.Instances = defineCapability(`${WNFS_PLUGIN}/capability/instances`);
11
10
  })(WnfsCapabilities || (WnfsCapabilities = {}));
11
+ var WnfsCapabilities;
12
12
 
13
13
  export {
14
14
  WnfsCapabilities
15
15
  };
16
- //# sourceMappingURL=chunk-NIDFBTNY.mjs.map
16
+ //# sourceMappingURL=chunk-DL7BBH57.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/capabilities.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Blockstore } from 'interface-blockstore';\nimport { type PrivateDirectory, type PrivateForest } from 'wnfs';\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type SpaceId } from '@dxos/keys';\n\nimport { WNFS_PLUGIN } from '../meta';\n\nexport namespace WnfsCapabilities {\n export const Blockstore = defineCapability<Blockstore>(`${WNFS_PLUGIN}/capability/blockstore`);\n\n export type Instances = Record<SpaceId, { directory: PrivateDirectory; forest: PrivateForest }>;\n export const Instances = defineCapability<Instances>(`${WNFS_PLUGIN}/capability/instances`);\n}\n"],
5
- "mappings": ";;;;;AAOA,SAASA,wBAAwB;;UAKhBC,mBAAAA;oBACFC,aAAaC,iBAA6B,GAAGC,WAAAA,wBAAmC;oBAGhFC,YAAYF,iBAA4B,GAAGC,WAAAA,uBAAkC;AAC5F,GALiBH,qBAAAA,mBAAAA,CAAAA,EAAAA;",
5
+ "mappings": ";;;;;AAOA,SAASA,wBAAwB;UAKhBC,mBAAAA;oBACFC,aAAaC,iBAA6B,GAAGC,WAAAA,wBAAmC;oBAGhFC,YAAYF,iBAA4B,GAAGC,WAAAA,uBAAkC;AAC5F,GALiBH,qBAAAA,mBAAAA,CAAAA,EAAAA;;",
6
6
  "names": ["defineCapability", "WnfsCapabilities", "Blockstore", "defineCapability", "WNFS_PLUGIN", "Instances"]
7
7
  }
@@ -0,0 +1,16 @@
1
+ // packages/plugins/plugin-wnfs/src/capabilities/index.ts
2
+ import { lazy } from "@dxos/app-framework";
3
+ var Blockstore = lazy(() => import("./blockstore-UT7233RJ.mjs"));
4
+ var FileUploader = lazy(() => import("./file-uploader-OQHVKRQ5.mjs"));
5
+ var IntentResolver = lazy(() => import("./intent-resolver-42B3MXJZ.mjs"));
6
+ var Markdown = lazy(() => import("./markdown-BWBHUHHH.mjs"));
7
+ var ReactSurface = lazy(() => import("./react-surface-GTYQZY3L.mjs"));
8
+
9
+ export {
10
+ Blockstore,
11
+ FileUploader,
12
+ IntentResolver,
13
+ Markdown,
14
+ ReactSurface
15
+ };
16
+ //# sourceMappingURL=chunk-LQYDI474.mjs.map
@@ -5,11 +5,11 @@ var meta = {
5
5
  name: "WNFS",
6
6
  description: "Manage and view files with via the Web Native File System (WNFS).",
7
7
  icon: "ph--file-cloud--regular",
8
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-wnfs"
8
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-wnfs"
9
9
  };
10
10
 
11
11
  export {
12
12
  WNFS_PLUGIN,
13
13
  meta
14
14
  };
15
- //# sourceMappingURL=chunk-X54OT4V3.mjs.map
15
+ //# sourceMappingURL=chunk-PHTWWADN.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const WNFS_PLUGIN = 'dxos.org/plugin/wnfs';\n\nexport const meta: PluginMeta = {\n id: WNFS_PLUGIN,\n name: 'WNFS',\n description: 'Manage and view files with via the Web Native File System (WNFS).',\n icon: 'ph--file-cloud--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-wnfs',\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const WNFS_PLUGIN = 'dxos.org/plugin/wnfs';\n\nexport const meta: PluginMeta = {\n id: WNFS_PLUGIN,\n name: 'WNFS',\n description: 'Manage and view files with via the Web Native File System (WNFS).',\n icon: 'ph--file-cloud--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-wnfs',\n};\n"],
5
5
  "mappings": ";AAMO,IAAMA,cAAc;AAEpB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
6
  "names": ["WNFS_PLUGIN", "meta", "id", "name", "description", "icon", "source"]
7
7
  }
@@ -1,37 +1,37 @@
1
1
  import {
2
2
  WNFS_PLUGIN
3
- } from "./chunk-X54OT4V3.mjs";
3
+ } from "./chunk-PHTWWADN.mjs";
4
4
 
5
5
  // packages/plugins/plugin-wnfs/src/types/file.ts
6
- import { S, TypedObject } from "@dxos/echo-schema";
6
+ import { Schema } from "effect";
7
+ import { TypedObject } from "@dxos/echo-schema";
7
8
  var FileType = class extends TypedObject({
8
9
  typename: "dxos.org/type/File",
9
10
  version: "0.1.0"
10
11
  })({
11
- name: S.optional(S.String),
12
- type: S.String,
13
- cid: S.String,
14
- timestamp: S.optional(S.String)
12
+ name: Schema.optional(Schema.String),
13
+ type: Schema.String,
14
+ cid: Schema.String,
15
+ timestamp: Schema.optional(Schema.String)
15
16
  }) {
16
17
  };
17
18
 
18
19
  // packages/plugins/plugin-wnfs/src/types/types.ts
20
+ import { Schema as Schema2 } from "effect";
19
21
  import { FileInfoSchema } from "@dxos/app-framework";
20
- import { S as S2 } from "@dxos/echo-schema";
21
22
  import { SpaceSchema } from "@dxos/react-client/echo";
22
- var WnfsAction;
23
23
  (function(WnfsAction2) {
24
- class Create extends S2.TaggedClass()(`${WNFS_PLUGIN}/action/create`, {
25
- input: FileInfoSchema.pick("name", "type", "cid").pipe(S2.required),
26
- output: S2.Struct({
24
+ class Create extends Schema2.TaggedClass()(`${WNFS_PLUGIN}/action/create`, {
25
+ input: FileInfoSchema.pick("name", "type", "cid").pipe(Schema2.required),
26
+ output: Schema2.Struct({
27
27
  object: FileType
28
28
  })
29
29
  }) {
30
30
  }
31
31
  WnfsAction2.Create = Create;
32
32
  WnfsAction2.UploadAnnotationId = Symbol.for(`${WNFS_PLUGIN}/annotation/upload`);
33
- WnfsAction2.UploadFileSchema = S2.Struct({
34
- file: S2.instanceOf(File).annotations({
33
+ WnfsAction2.UploadFileSchema = Schema2.Struct({
34
+ file: Schema2.instanceOf(File).annotations({
35
35
  [WnfsAction2.UploadAnnotationId]: {
36
36
  // Accept file types.
37
37
  "image/*": [
@@ -46,18 +46,19 @@ var WnfsAction;
46
46
  }
47
47
  })
48
48
  });
49
- class Upload extends S2.TaggedClass()(`${WNFS_PLUGIN}/action/upload`, {
50
- input: S2.extend(WnfsAction2.UploadFileSchema, S2.Struct({
49
+ class Upload extends Schema2.TaggedClass()(`${WNFS_PLUGIN}/action/upload`, {
50
+ input: Schema2.extend(WnfsAction2.UploadFileSchema, Schema2.Struct({
51
51
  space: SpaceSchema
52
52
  })),
53
- output: S2.required(FileInfoSchema)
53
+ output: Schema2.required(FileInfoSchema)
54
54
  }) {
55
55
  }
56
56
  WnfsAction2.Upload = Upload;
57
57
  })(WnfsAction || (WnfsAction = {}));
58
+ var WnfsAction;
58
59
 
59
60
  export {
60
61
  FileType,
61
62
  WnfsAction
62
63
  };
63
- //# sourceMappingURL=chunk-TOIGKYS7.mjs.map
64
+ //# sourceMappingURL=chunk-RY5XZCVP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/file.ts", "../../../src/types/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { TypedObject } from '@dxos/echo-schema';\n\nexport class FileType extends TypedObject({ typename: 'dxos.org/type/File', version: '0.1.0' })({\n name: Schema.optional(Schema.String),\n type: Schema.String,\n cid: Schema.String,\n timestamp: Schema.optional(Schema.String),\n}) {}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { FileInfoSchema } from '@dxos/app-framework';\nimport { SpaceSchema } from '@dxos/react-client/echo';\n\nimport { FileType } from './file';\nimport { WNFS_PLUGIN } from '../meta';\n\nexport namespace WnfsAction {\n export class Create extends Schema.TaggedClass<Create>()(`${WNFS_PLUGIN}/action/create`, {\n input: FileInfoSchema.pick('name', 'type', 'cid').pipe(Schema.required),\n output: Schema.Struct({\n object: FileType,\n }),\n }) {}\n\n export const UploadAnnotationId = Symbol.for(`${WNFS_PLUGIN}/annotation/upload`);\n\n export const UploadFileSchema = Schema.Struct({\n file: Schema.instanceOf(File).annotations({\n [UploadAnnotationId]: {\n // Accept file types.\n 'image/*': ['.jpg', '.jpeg', '.png', '.gif'],\n 'application/pdf': ['.pdf'],\n // TODO(wittjosiah): Add more file types.\n },\n }),\n });\n\n export type UploadFileForm = Schema.Schema.Type<typeof UploadFileSchema>;\n\n export class Upload extends Schema.TaggedClass<Upload>()(`${WNFS_PLUGIN}/action/upload`, {\n input: Schema.extend(UploadFileSchema, Schema.Struct({ space: SpaceSchema })),\n output: Schema.required(FileInfoSchema),\n }) {}\n}\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,cAAc;AAEvB,SAASC,mBAAmB;AAErB,IAAMC,WAAN,cAAuBC,YAAY;EAAEC,UAAU;EAAsBC,SAAS;AAAQ,CAAA,EAAG;EAC9FC,MAAMC,OAAOC,SAASD,OAAOE,MAAM;EACnCC,MAAMH,OAAOE;EACbE,KAAKJ,OAAOE;EACZG,WAAWL,OAAOC,SAASD,OAAOE,MAAM;AAC1C,CAAA,EAAA;AAAI;;;ACTJ,SAASI,UAAAA,eAAc;AAEvB,SAASC,sBAAsB;AAC/B,SAASC,mBAAmB;UAKXC,aAAAA;EACR,MAAMC,eAAeC,QAAOC,YAAW,EAAW,GAAGC,WAAAA,kBAA6B;IACvFC,OAAOC,eAAeC,KAAK,QAAQ,QAAQ,KAAA,EAAOC,KAAKN,QAAOO,QAAQ;IACtEC,QAAQR,QAAOS,OAAO;MACpBC,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;cALSZ,SAAAA;cAOAa,qBAAqBC,OAAOC,IAAI,GAAGZ,WAAAA,oBAA+B;cAElEa,mBAAmBf,QAAOS,OAAO;IAC5CO,MAAMhB,QAAOiB,WAAWC,IAAAA,EAAMC,YAAY;MACxC,CAAArB,YAACc,kBAAAA,GAAqB;;QAEpB,WAAW;UAAC;UAAQ;UAAS;UAAQ;;QACrC,mBAAmB;UAAC;;MAEtB;IACF,CAAA;EACF,CAAA;EAIO,MAAMQ,eAAepB,QAAOC,YAAW,EAAW,GAAGC,WAAAA,kBAA6B;IACvFC,OAAOH,QAAOqB,OAAMvB,YAACiB,kBAAkBf,QAAOS,OAAO;MAAEa,OAAOC;IAAY,CAAA,CAAA;IAC1Ef,QAAQR,QAAOO,SAASH,cAAAA;EAC1B,CAAA,EAAA;EAAI;cAHSgB,SAAAA;AAIf,GA3BiBtB,eAAAA,aAAAA,CAAAA,EAAAA;;",
6
+ "names": ["Schema", "TypedObject", "FileType", "TypedObject", "typename", "version", "name", "Schema", "optional", "String", "type", "cid", "timestamp", "Schema", "FileInfoSchema", "SpaceSchema", "WnfsAction", "Create", "Schema", "TaggedClass", "WNFS_PLUGIN", "input", "FileInfoSchema", "pick", "pipe", "required", "output", "Struct", "object", "FileType", "UploadAnnotationId", "Symbol", "for", "UploadFileSchema", "file", "instanceOf", "File", "annotations", "Upload", "extend", "space", "SpaceSchema"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  WnfsAction
3
- } from "./chunk-TOIGKYS7.mjs";
4
- import "./chunk-X54OT4V3.mjs";
3
+ } from "./chunk-RY5XZCVP.mjs";
4
+ import "./chunk-PHTWWADN.mjs";
5
5
 
6
6
  // packages/plugins/plugin-wnfs/src/capabilities/file-uploader.ts
7
7
  import { Effect, pipe } from "effect";
@@ -9,7 +9,7 @@ import { Capabilities, chain, contributes, createIntent } from "@dxos/app-framew
9
9
  import { SpaceAction } from "@dxos/plugin-space/types";
10
10
  var file_uploader_default = (context) => {
11
11
  return contributes(Capabilities.FileUploader, (file, space) => {
12
- const { dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
12
+ const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
13
13
  const program = Effect.gen(function* () {
14
14
  const fileInfo = yield* dispatch(createIntent(WnfsAction.Upload, {
15
15
  file,
@@ -26,4 +26,4 @@ var file_uploader_default = (context) => {
26
26
  export {
27
27
  file_uploader_default as default
28
28
  };
29
- //# sourceMappingURL=file-uploader-F3C3A4TM.mjs.map
29
+ //# sourceMappingURL=file-uploader-OQHVKRQ5.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/file-uploader.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect, pipe } from 'effect';\n\nimport { Capabilities, chain, contributes, createIntent, type PluginContext } from '@dxos/app-framework';\nimport { SpaceAction } from '@dxos/plugin-space/types';\n\nimport { WnfsAction } from '../types';\n\nexport default (context: PluginContext) => {\n return contributes(Capabilities.FileUploader, (file, space) => {\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n\n const program = Effect.gen(function* () {\n const fileInfo = yield* dispatch(createIntent(WnfsAction.Upload, { file, space }));\n yield* dispatch(pipe(createIntent(WnfsAction.Create, fileInfo), chain(SpaceAction.AddObject, { target: space })));\n return fileInfo;\n });\n\n return Effect.runPromise(program);\n });\n};\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,QAAQC,YAAY;AAE7B,SAASC,cAAcC,OAAOC,aAAaC,oBAAwC;AACnF,SAASC,mBAAmB;AAI5B,IAAA,wBAAe,CAACC,YAAAA;AACd,SAAOC,YAAYC,aAAaC,cAAc,CAACC,MAAMC,UAAAA;AACnD,UAAM,EAAEC,SAAQ,IAAKN,QAAQO,cAAcL,aAAaM,gBAAgB;AAExE,UAAMC,UAAUC,OAAOC,IAAI,aAAA;AACzB,YAAMC,WAAW,OAAON,SAASO,aAAaC,WAAWC,QAAQ;QAAEX;QAAMC;MAAM,CAAA,CAAA;AAC/E,aAAOC,SAASU,KAAKH,aAAaC,WAAWG,QAAQL,QAAAA,GAAWM,MAAMC,YAAYC,WAAW;QAAEC,QAAQhB;MAAM,CAAA,CAAA,CAAA;AAC7G,aAAOO;IACT,CAAA;AAEA,WAAOF,OAAOY,WAAWb,OAAAA;EAC3B,CAAA;AACF;",
6
+ "names": ["Effect", "pipe", "Capabilities", "chain", "contributes", "createIntent", "SpaceAction", "context", "contributes", "Capabilities", "FileUploader", "file", "space", "dispatch", "getCapability", "IntentDispatcher", "program", "Effect", "gen", "fileInfo", "createIntent", "WnfsAction", "Upload", "pipe", "Create", "chain", "SpaceAction", "AddObject", "target", "runPromise"]
7
+ }
@@ -4,18 +4,18 @@ import {
4
4
  IntentResolver,
5
5
  Markdown,
6
6
  ReactSurface
7
- } from "./chunk-XZFJLSBE.mjs";
7
+ } from "./chunk-LQYDI474.mjs";
8
8
  import {
9
9
  WnfsCapabilities
10
- } from "./chunk-NIDFBTNY.mjs";
10
+ } from "./chunk-DL7BBH57.mjs";
11
11
  import {
12
12
  FileType,
13
13
  WnfsAction
14
- } from "./chunk-TOIGKYS7.mjs";
14
+ } from "./chunk-RY5XZCVP.mjs";
15
15
  import {
16
16
  WNFS_PLUGIN,
17
17
  meta
18
- } from "./chunk-X54OT4V3.mjs";
18
+ } from "./chunk-PHTWWADN.mjs";
19
19
 
20
20
  // packages/plugins/plugin-wnfs/src/WnfsPlugin.tsx
21
21
  import { pipe } from "effect";
@@ -3,12 +3,12 @@ import {
3
3
  } from "./chunk-YYAW4U6J.mjs";
4
4
  import {
5
5
  WnfsCapabilities
6
- } from "./chunk-NIDFBTNY.mjs";
6
+ } from "./chunk-DL7BBH57.mjs";
7
7
  import {
8
8
  FileType,
9
9
  WnfsAction
10
- } from "./chunk-TOIGKYS7.mjs";
11
- import "./chunk-X54OT4V3.mjs";
10
+ } from "./chunk-RY5XZCVP.mjs";
11
+ import "./chunk-PHTWWADN.mjs";
12
12
 
13
13
  // packages/plugins/plugin-wnfs/src/capabilities/intent-resolver.ts
14
14
  import { contributes, Capabilities, createResolver } from "@dxos/app-framework";
@@ -31,7 +31,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
31
31
  createResolver({
32
32
  intent: WnfsAction.Upload,
33
33
  resolve: async ({ file, space }) => {
34
- const blockstore = context.requestCapability(WnfsCapabilities.Blockstore);
34
+ const blockstore = context.getCapability(WnfsCapabilities.Blockstore);
35
35
  const info = await upload({
36
36
  file,
37
37
  blockstore,
@@ -46,4 +46,4 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
46
46
  export {
47
47
  intent_resolver_default as default
48
48
  };
49
- //# sourceMappingURL=intent-resolver-JSSHOBDG.mjs.map
49
+ //# sourceMappingURL=intent-resolver-42B3MXJZ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver, type PluginContext } from '@dxos/app-framework';\nimport { live } from '@dxos/react-client/echo';\n\nimport { WnfsCapabilities } from './capabilities';\nimport { upload } from '../helpers';\nimport { FileType, WnfsAction } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.IntentResolver, [\n // TODO(wittjosiah): Deleting the object doesn't delete the wnfs blob.\n // Consider ways to trigger blob deletion based on object deletion and/or adding file system manager.\n createResolver({\n intent: WnfsAction.Create,\n resolve: ({ name, type, cid }) => ({\n data: {\n object: live(FileType, { name, type, cid }),\n },\n }),\n }),\n createResolver({\n intent: WnfsAction.Upload,\n resolve: async ({ file, space }) => {\n const blockstore = context.getCapability(WnfsCapabilities.Blockstore);\n const info = await upload({ file, blockstore, space });\n return { data: info };\n },\n }),\n ]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;AAIA,SAASA,aAAaC,cAAcC,sBAA0C;AAC9E,SAASC,YAAY;AAMrB,IAAA,0BAAe,CAACC,YACdC,YAAYC,aAAaC,gBAAgB;;;EAGvCC,eAAe;IACbC,QAAQC,WAAWC;IACnBC,SAAS,CAAC,EAAEC,MAAMC,MAAMC,IAAG,OAAQ;MACjCC,MAAM;QACJC,QAAQC,KAAKC,UAAU;UAAEN;UAAMC;UAAMC;QAAI,CAAA;MAC3C;IACF;EACF,CAAA;EACAP,eAAe;IACbC,QAAQC,WAAWU;IACnBR,SAAS,OAAO,EAAES,MAAMC,MAAK,MAAE;AAC7B,YAAMC,aAAanB,QAAQoB,cAAcC,iBAAiBC,UAAU;AACpE,YAAMC,OAAO,MAAMC,OAAO;QAAEP;QAAME;QAAYD;MAAM,CAAA;AACpD,aAAO;QAAEN,MAAMW;MAAK;IACtB;EACF,CAAA;CACD;",
6
+ "names": ["contributes", "Capabilities", "createResolver", "live", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "WnfsAction", "Create", "resolve", "name", "type", "cid", "data", "object", "live", "FileType", "Upload", "file", "space", "blockstore", "getCapability", "WnfsCapabilities", "Blockstore", "info", "upload"]
7
+ }
@@ -5,8 +5,8 @@ import {
5
5
  } from "./chunk-YYAW4U6J.mjs";
6
6
  import {
7
7
  WnfsCapabilities
8
- } from "./chunk-NIDFBTNY.mjs";
9
- import "./chunk-X54OT4V3.mjs";
8
+ } from "./chunk-DL7BBH57.mjs";
9
+ import "./chunk-PHTWWADN.mjs";
10
10
 
11
11
  // packages/plugins/plugin-wnfs/src/capabilities/markdown.ts
12
12
  import { contributes } from "@dxos/app-framework";
@@ -138,9 +138,7 @@ var createImg = (view, url) => {
138
138
  };
139
139
  var WnfsImageWidget = class extends WidgetType {
140
140
  constructor(_wnfsUrl, _url) {
141
- super();
142
- this._wnfsUrl = _wnfsUrl;
143
- this._url = _url;
141
+ super(), this._wnfsUrl = _wnfsUrl, this._url = _url;
144
142
  }
145
143
  eq(other) {
146
144
  return this._wnfsUrl === other._wnfsUrl;
@@ -177,8 +175,8 @@ var WnfsImageWidget = class extends WidgetType {
177
175
  // packages/plugins/plugin-wnfs/src/capabilities/markdown.ts
178
176
  var markdown_default = (context) => contributes(MarkdownCapabilities.Extensions, [
179
177
  ({ document: document2 }) => {
180
- const blockstore = context.requestCapability(WnfsCapabilities.Blockstore);
181
- const instances = context.requestCapability(WnfsCapabilities.Instances);
178
+ const blockstore = context.getCapability(WnfsCapabilities.Blockstore);
179
+ const instances = context.getCapability(WnfsCapabilities.Instances);
182
180
  if (document2) {
183
181
  const space = getSpace(document2);
184
182
  return space ? [
@@ -195,4 +193,4 @@ var markdown_default = (context) => contributes(MarkdownCapabilities.Extensions,
195
193
  export {
196
194
  markdown_default as default
197
195
  };
198
- //# sourceMappingURL=markdown-G6DTBWWO.mjs.map
196
+ //# sourceMappingURL=markdown-BWBHUHHH.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/markdown.ts", "../../../src/extensions/image.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, type PluginContext } from '@dxos/app-framework';\nimport { MarkdownCapabilities } from '@dxos/plugin-markdown';\nimport { getSpace } from '@dxos/react-client/echo';\n\nimport { WnfsCapabilities } from './capabilities';\nimport { image } from '../extensions';\n\nexport default (context: PluginContext) =>\n contributes(MarkdownCapabilities.Extensions, [\n ({ document }) => {\n const blockstore = context.getCapability(WnfsCapabilities.Blockstore);\n const instances = context.getCapability(WnfsCapabilities.Instances);\n\n if (document) {\n const space = getSpace(document);\n return space ? [image({ blockstore, instances, space })] : [];\n }\n\n return [];\n },\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport { type EditorState, type Extension, StateField, type Range } from '@codemirror/state';\nimport { Decoration, EditorView, WidgetType } from '@codemirror/view';\nimport type { Blockstore } from 'interface-blockstore';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { Status, ThemeProvider } from '@dxos/react-ui';\nimport { focusField } from '@dxos/react-ui-editor';\nimport { defaultTx } from '@dxos/react-ui-theme';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { type WnfsCapabilities } from '../capabilities';\nimport { getBlobUrl, getPathFromUrl, loadWnfs } from '../helpers';\n\nconst WAIT_UNTIL_LOADER = 1500;\n\nexport type ImageOptions = {\n blockstore: Blockstore;\n instances: WnfsCapabilities.Instances;\n space: Space;\n};\n\n/**\n * Create WNFS image decorations.\n */\nexport const image = (options: ImageOptions): Extension[] => {\n const blobUrlCache: Record<string, string> = {};\n const preloaded = new Set<string>();\n\n const preload = (url: string) => {\n if (!preloaded.has(url)) {\n const img = document.createElement('img');\n img.src = url;\n preloaded.add(url);\n }\n };\n\n return [\n StateField.define({\n create: (state) => {\n return Decoration.set(\n buildDecorations({ from: 0, to: state.doc.length, state, blobUrlCache, preload, options }),\n );\n },\n update: (value, tr) => {\n if (!tr.docChanged && !tr.selection) {\n return value;\n }\n\n // Find range of changes and cursor changes.\n const cursor = tr.state.selection.main.head;\n const oldCursor = tr.changes.mapPos(tr.startState.selection.main.head);\n let from = Math.min(cursor, oldCursor);\n let to = Math.max(cursor, oldCursor);\n tr.changes.iterChangedRanges((fromA, toA, fromB, toB) => {\n from = Math.min(from, fromB);\n to = Math.max(to, toB);\n });\n\n // Expand to cover lines.\n from = tr.state.doc.lineAt(from).from;\n to = tr.state.doc.lineAt(to).to;\n\n return value.map(tr.changes).update({\n filterFrom: from,\n filterTo: to,\n filter: () => false,\n add: buildDecorations({ from, to, state: tr.state, blobUrlCache, preload, options }),\n });\n },\n provide: (field) => EditorView.decorations.from(field),\n }),\n ];\n};\n\nconst buildDecorations = ({\n from,\n to,\n state,\n blobUrlCache,\n preload,\n options: { blockstore, instances, space },\n}: {\n from: number;\n to: number;\n state: EditorState;\n blobUrlCache: Record<string, string>;\n preload: (url: string) => void;\n options: ImageOptions;\n}) => {\n const decorations: Range<Decoration>[] = [];\n const cursor = state.selection.main.head;\n syntaxTree(state).iterate({\n enter: (node) => {\n if (node.name !== 'Image') {\n return;\n }\n\n const urlNode = node.node.getChild('URL');\n if (!urlNode) {\n return;\n }\n\n const hide = state.readOnly || cursor < node.from || cursor > node.to;\n const wnfsUrl = state.sliceDoc(urlNode.from, urlNode.to);\n if (!wnfsUrl.startsWith('wnfs://')) {\n return;\n }\n\n const path = getPathFromUrl(wnfsUrl);\n\n // Cannot load images from other spaces\n const spaceId = path[1];\n if (spaceId !== space.id) {\n return;\n }\n\n // Load image contents into memory blob\n const blobUrlPromise = (async () => {\n const { directory, forest } = await loadWnfs({ blockstore, instances, space });\n const url = await getBlobUrl({ wnfsUrl, blockstore, directory, forest });\n blobUrlCache[path.join('/')] = url;\n preload(url);\n return url;\n })();\n\n decorations.push(\n Decoration.replace({\n block: true, // Prevent cursor from entering.\n widget: new WnfsImageWidget(wnfsUrl, blobUrlCache[path.join('/')] ?? blobUrlPromise),\n }).range(hide ? node.from : node.to, node.to),\n );\n },\n from,\n to,\n });\n\n return decorations;\n};\n\nconst createImg = (view: EditorView, url: string) => {\n const img = document.createElement('img');\n img.setAttribute('src', url);\n img.setAttribute('class', 'cm-image-with-loader');\n // If focused, hide image until successfully loaded to avoid flickering effects.\n if (view.state.field(focusField)) {\n img.onload = () => img.classList.add('cm-loaded-image');\n } else {\n img.classList.add('cm-loaded-image');\n }\n return img;\n};\n\nclass WnfsImageWidget extends WidgetType {\n constructor(\n readonly _wnfsUrl: string,\n readonly _url: MaybePromise<string>,\n ) {\n super();\n }\n\n override eq(other: this): boolean {\n return this._wnfsUrl === (other as any as WnfsImageWidget)._wnfsUrl;\n }\n\n override toDOM(view: EditorView): HTMLDivElement {\n if (typeof this._url === 'string') {\n return createImg(view, this._url);\n }\n\n const widget = document.createElement('div');\n widget.className = 'cm-image-wrapper';\n const loader = document.createElement('div');\n loader.className = 'mx-auto transition-opacity';\n let loaderAdded = false;\n\n const timeout = setTimeout(() => {\n const root = createRoot(loader);\n root.render(\n <ThemeProvider tx={defaultTx}>\n <Status indeterminate />\n </ThemeProvider>,\n );\n widget.appendChild(loader);\n loaderAdded = true;\n }, WAIT_UNTIL_LOADER);\n\n void this._url.then((url) => {\n clearTimeout(timeout);\n const img = createImg(view, url);\n loaderAdded && widget.removeChild(loader);\n widget.appendChild(img);\n });\n\n return widget;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["contributes", "MarkdownCapabilities", "getSpace", "syntaxTree", "StateField", "Decoration", "EditorView", "WidgetType", "React", "createRoot", "Status", "ThemeProvider", "focusField", "defaultTx", "WAIT_UNTIL_LOADER", "image", "options", "blobUrlCache", "preloaded", "Set", "preload", "url", "has", "img", "document", "createElement", "src", "add", "StateField", "define", "create", "state", "Decoration", "set", "buildDecorations", "from", "to", "doc", "length", "update", "value", "tr", "docChanged", "selection", "cursor", "main", "head", "oldCursor", "changes", "mapPos", "startState", "Math", "min", "max", "iterChangedRanges", "fromA", "toA", "fromB", "toB", "lineAt", "map", "filterFrom", "filterTo", "filter", "provide", "field", "EditorView", "decorations", "blockstore", "instances", "space", "syntaxTree", "iterate", "enter", "node", "name", "urlNode", "getChild", "hide", "readOnly", "wnfsUrl", "sliceDoc", "startsWith", "path", "getPathFromUrl", "spaceId", "id", "blobUrlPromise", "directory", "forest", "loadWnfs", "getBlobUrl", "join", "push", "replace", "block", "widget", "WnfsImageWidget", "range", "createImg", "view", "setAttribute", "focusField", "onload", "classList", "WidgetType", "_wnfsUrl", "_url", "eq", "other", "toDOM", "className", "loader", "loaderAdded", "timeout", "setTimeout", "root", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "Status", "indeterminate", "appendChild", "then", "clearTimeout", "removeChild", "context", "contributes", "MarkdownCapabilities", "Extensions", "document", "blockstore", "getCapability", "WnfsCapabilities", "Blockstore", "instances", "Instances", "space", "getSpace", "image"]
7
+ }