@dxos/plugin-wnfs 0.8.4-main.72ec0f3 → 0.8.4-main.937b3ca

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 (131) hide show
  1. package/dist/lib/browser/FileContainer-O5YFSIWV.mjs +91 -0
  2. package/dist/lib/browser/FileContainer-O5YFSIWV.mjs.map +7 -0
  3. package/dist/lib/browser/{blockstore-2JFU4NBU.mjs → blockstore-KKFOALUH.mjs} +12 -12
  4. package/dist/lib/browser/blockstore-KKFOALUH.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-GXXEH7H6.mjs +154 -0
  6. package/dist/lib/browser/chunk-GXXEH7H6.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-D6VTEQIE.mjs → chunk-NCTUASHL.mjs} +17 -9
  8. package/dist/lib/browser/chunk-NCTUASHL.mjs.map +7 -0
  9. package/dist/lib/browser/file-uploader-BUHAXRSV.mjs +34 -0
  10. package/dist/lib/browser/file-uploader-BUHAXRSV.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +83 -83
  12. package/dist/lib/browser/index.mjs.map +4 -4
  13. package/dist/lib/browser/{markdown-WYQDCVFQ.mjs → markdown-BRT2MN6C.mjs} +28 -25
  14. package/dist/lib/browser/markdown-BRT2MN6C.mjs.map +7 -0
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/operation-resolver-F6GUL54A.mjs +99 -0
  17. package/dist/lib/browser/operation-resolver-F6GUL54A.mjs.map +7 -0
  18. package/dist/lib/browser/react-surface-UNAYSIAC.mjs +81 -0
  19. package/dist/lib/browser/react-surface-UNAYSIAC.mjs.map +7 -0
  20. package/dist/lib/browser/types/index.mjs +7 -4
  21. package/dist/types/src/WnfsPlugin.d.ts +2 -1
  22. package/dist/types/src/WnfsPlugin.d.ts.map +1 -1
  23. package/dist/types/src/capabilities/blockstore/blockstore.d.ts +5 -0
  24. package/dist/types/src/capabilities/blockstore/blockstore.d.ts.map +1 -0
  25. package/dist/types/src/capabilities/blockstore/index.d.ts +3 -0
  26. package/dist/types/src/capabilities/blockstore/index.d.ts.map +1 -0
  27. package/dist/types/src/capabilities/file-uploader/file-uploader.d.ts +5 -0
  28. package/dist/types/src/capabilities/file-uploader/file-uploader.d.ts.map +1 -0
  29. package/dist/types/src/capabilities/file-uploader/index.d.ts +3 -0
  30. package/dist/types/src/capabilities/file-uploader/index.d.ts.map +1 -0
  31. package/dist/types/src/capabilities/index.d.ts +5 -6
  32. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  33. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  34. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  35. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  36. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  37. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  38. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  39. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  40. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  41. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  42. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  43. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  44. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  45. package/dist/types/src/components/FileContainer.d.ts +3 -5
  46. package/dist/types/src/components/FileContainer.d.ts.map +1 -1
  47. package/dist/types/src/components/index.d.ts +1 -1
  48. package/dist/types/src/components/index.d.ts.map +1 -1
  49. package/dist/types/src/extensions/image.d.ts +1 -1
  50. package/dist/types/src/extensions/image.d.ts.map +1 -1
  51. package/dist/types/src/helpers/load.d.ts +1 -1
  52. package/dist/types/src/helpers/load.d.ts.map +1 -1
  53. package/dist/types/src/helpers/upload.d.ts +1 -1
  54. package/dist/types/src/helpers/upload.d.ts.map +1 -1
  55. package/dist/types/src/index.d.ts +1 -1
  56. package/dist/types/src/index.d.ts.map +1 -1
  57. package/dist/types/src/meta.d.ts +2 -2
  58. package/dist/types/src/meta.d.ts.map +1 -1
  59. package/dist/types/src/translations.d.ts +4 -1
  60. package/dist/types/src/translations.d.ts.map +1 -1
  61. package/dist/types/src/types/File.d.ts +11 -11
  62. package/dist/types/src/types/File.d.ts.map +1 -1
  63. package/dist/types/src/{capabilities → types}/capabilities.d.ts +3 -2
  64. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  65. package/dist/types/src/types/index.d.ts +1 -0
  66. package/dist/types/src/types/index.d.ts.map +1 -1
  67. package/dist/types/src/types/types.d.ts +106 -49
  68. package/dist/types/src/types/types.d.ts.map +1 -1
  69. package/dist/types/tsconfig.tsbuildinfo +1 -1
  70. package/package.json +41 -35
  71. package/src/WnfsPlugin.tsx +48 -68
  72. package/src/capabilities/blockstore/blockstore.ts +22 -0
  73. package/src/capabilities/blockstore/index.ts +7 -0
  74. package/src/capabilities/file-uploader/file-uploader.ts +33 -0
  75. package/src/capabilities/file-uploader/index.ts +7 -0
  76. package/src/capabilities/index.ts +5 -9
  77. package/src/capabilities/markdown/index.ts +7 -0
  78. package/src/capabilities/markdown/markdown.ts +33 -0
  79. package/src/capabilities/operation-resolver/index.ts +7 -0
  80. package/src/capabilities/operation-resolver/operation-resolver.ts +62 -0
  81. package/src/capabilities/react-surface/index.ts +7 -0
  82. package/src/capabilities/react-surface/react-surface.tsx +49 -0
  83. package/src/components/FileContainer.tsx +7 -10
  84. package/src/components/FileInput.tsx +1 -1
  85. package/src/components/FilePreview.tsx +1 -1
  86. package/src/extensions/image.stories.tsx +2 -2
  87. package/src/extensions/image.tsx +3 -3
  88. package/src/helpers/load.ts +12 -7
  89. package/src/helpers/upload.ts +5 -2
  90. package/src/index.ts +1 -1
  91. package/src/meta.ts +2 -2
  92. package/src/translations.ts +4 -1
  93. package/src/types/File.ts +5 -5
  94. package/src/{capabilities → types}/capabilities.ts +3 -3
  95. package/src/types/index.ts +1 -0
  96. package/src/types/types.ts +51 -12
  97. package/dist/lib/browser/FileContainer-LLNI7WXR.mjs +0 -103
  98. package/dist/lib/browser/FileContainer-LLNI7WXR.mjs.map +0 -7
  99. package/dist/lib/browser/blockstore-2JFU4NBU.mjs.map +0 -7
  100. package/dist/lib/browser/chunk-CWMKN2F6.mjs +0 -71
  101. package/dist/lib/browser/chunk-CWMKN2F6.mjs.map +0 -7
  102. package/dist/lib/browser/chunk-D6VTEQIE.mjs.map +0 -7
  103. package/dist/lib/browser/chunk-F4QHZWQD.mjs +0 -16
  104. package/dist/lib/browser/chunk-F4QHZWQD.mjs.map +0 -7
  105. package/dist/lib/browser/chunk-OGPGLJCV.mjs +0 -25
  106. package/dist/lib/browser/chunk-OGPGLJCV.mjs.map +0 -7
  107. package/dist/lib/browser/chunk-ZFPJA5F4.mjs +0 -16
  108. package/dist/lib/browser/chunk-ZFPJA5F4.mjs.map +0 -7
  109. package/dist/lib/browser/file-uploader-W6TJLAAK.mjs +0 -30
  110. package/dist/lib/browser/file-uploader-W6TJLAAK.mjs.map +0 -7
  111. package/dist/lib/browser/intent-resolver-FSW2EQF4.mjs +0 -48
  112. package/dist/lib/browser/intent-resolver-FSW2EQF4.mjs.map +0 -7
  113. package/dist/lib/browser/markdown-WYQDCVFQ.mjs.map +0 -7
  114. package/dist/lib/browser/react-surface-DMU47U3X.mjs +0 -88
  115. package/dist/lib/browser/react-surface-DMU47U3X.mjs.map +0 -7
  116. package/dist/types/src/capabilities/blockstore.d.ts +0 -4
  117. package/dist/types/src/capabilities/blockstore.d.ts.map +0 -1
  118. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  119. package/dist/types/src/capabilities/file-uploader.d.ts +0 -4
  120. package/dist/types/src/capabilities/file-uploader.d.ts.map +0 -1
  121. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  122. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  123. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  124. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  125. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  126. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  127. package/src/capabilities/blockstore.ts +0 -19
  128. package/src/capabilities/file-uploader.ts +0 -27
  129. package/src/capabilities/intent-resolver.ts +0 -32
  130. package/src/capabilities/markdown.ts +0 -26
  131. package/src/capabilities/react-surface.tsx +0 -45
@@ -1,30 +0,0 @@
1
- import {
2
- WnfsAction
3
- } from "./chunk-CWMKN2F6.mjs";
4
- import "./chunk-OGPGLJCV.mjs";
5
-
6
- // src/capabilities/file-uploader.ts
7
- import * as Effect from "effect/Effect";
8
- import * as Function from "effect/Function";
9
- import { Capabilities, chain, contributes, createIntent } from "@dxos/app-framework";
10
- import { SpaceAction } from "@dxos/plugin-space/types";
11
- var file_uploader_default = ((context) => {
12
- return contributes(Capabilities.FileUploader, (space, file) => {
13
- const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
14
- const program = Effect.gen(function* () {
15
- const fileInfo = yield* dispatch(createIntent(WnfsAction.Upload, {
16
- space,
17
- file
18
- }));
19
- yield* dispatch(Function.pipe(createIntent(WnfsAction.Create, fileInfo), chain(SpaceAction.AddObject, {
20
- target: space
21
- })));
22
- return fileInfo;
23
- });
24
- return Effect.runPromise(program);
25
- });
26
- });
27
- export {
28
- file_uploader_default as default
29
- };
30
- //# sourceMappingURL=file-uploader-W6TJLAAK.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/file-uploader.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\n\nimport { Capabilities, type PluginContext, chain, contributes, createIntent } 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, (space, file) => {\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const program = Effect.gen(function* () {\n const fileInfo = yield* dispatch(createIntent(WnfsAction.Upload, { space, file }));\n yield* dispatch(\n Function.pipe(createIntent(WnfsAction.Create, fileInfo), chain(SpaceAction.AddObject, { target: space })),\n );\n\n return fileInfo;\n });\n\n return Effect.runPromise(program);\n });\n};\n"],
5
- "mappings": ";;;;;;AAIA,YAAYA,YAAY;AACxB,YAAYC,cAAc;AAE1B,SAASC,cAAkCC,OAAOC,aAAaC,oBAAoB;AACnF,SAASC,mBAAmB;AAI5B,IAAA,yBAAe,CAACC,YAAAA;AACd,SAAOC,YAAYC,aAAaC,cAAc,CAACC,OAAOC,SAAAA;AACpD,UAAM,EAAEC,SAAQ,IAAKN,QAAQO,cAAcL,aAAaM,gBAAgB;AACxE,UAAMC,UAAiBC,WAAI,aAAA;AACzB,YAAMC,WAAW,OAAOL,SAASM,aAAaC,WAAWC,QAAQ;QAAEV;QAAOC;MAAK,CAAA,CAAA;AAC/E,aAAOC,SACIS,cAAKH,aAAaC,WAAWG,QAAQL,QAAAA,GAAWM,MAAMC,YAAYC,WAAW;QAAEC,QAAQhB;MAAM,CAAA,CAAA,CAAA;AAGxG,aAAOO;IACT,CAAA;AAEA,WAAcU,kBAAWZ,OAAAA;EAC3B,CAAA;AACF;",
6
- "names": ["Effect", "Function", "Capabilities", "chain", "contributes", "createIntent", "SpaceAction", "context", "contributes", "Capabilities", "FileUploader", "space", "file", "dispatch", "getCapability", "IntentDispatcher", "program", "gen", "fileInfo", "createIntent", "WnfsAction", "Upload", "pipe", "Create", "chain", "SpaceAction", "AddObject", "target", "runPromise"]
7
- }
@@ -1,48 +0,0 @@
1
- import {
2
- upload
3
- } from "./chunk-D6VTEQIE.mjs";
4
- import {
5
- WnfsCapabilities
6
- } from "./chunk-F4QHZWQD.mjs";
7
- import {
8
- File_exports,
9
- WnfsAction
10
- } from "./chunk-CWMKN2F6.mjs";
11
- import "./chunk-OGPGLJCV.mjs";
12
-
13
- // src/capabilities/intent-resolver.ts
14
- import { Capabilities, contributes, createResolver } from "@dxos/app-framework";
15
- var intent_resolver_default = ((context) => contributes(Capabilities.IntentResolver, [
16
- // TODO(wittjosiah): Deleting the object doesn't delete the wnfs blob.
17
- // Consider ways to trigger blob deletion based on object deletion and/or adding file system manager.
18
- createResolver({
19
- intent: WnfsAction.Create,
20
- resolve: ({ name, type, cid }) => ({
21
- data: {
22
- object: File_exports.make({
23
- name,
24
- type,
25
- cid
26
- })
27
- }
28
- })
29
- }),
30
- createResolver({
31
- intent: WnfsAction.Upload,
32
- resolve: async ({ file, space }) => {
33
- const blockstore = context.getCapability(WnfsCapabilities.Blockstore);
34
- const info = await upload({
35
- file,
36
- blockstore,
37
- space
38
- });
39
- return {
40
- data: info
41
- };
42
- }
43
- })
44
- ]));
45
- export {
46
- intent_resolver_default as default
47
- };
48
- //# sourceMappingURL=intent-resolver-FSW2EQF4.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, type PluginContext, contributes, createResolver } from '@dxos/app-framework';\n\nimport { upload } from '../helpers';\nimport { WnfsAction, WnfsFile } from '../types';\n\nimport { WnfsCapabilities } from './capabilities';\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: WnfsFile.make({ 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,cAAkCC,aAAaC,sBAAsB;AAO9E,IAAA,2BAAe,CAACC,YACdC,YAAYC,aAAaC,gBAAgB;;;EAGvCC,eAAe;IACbC,QAAQC,WAAWC;IACnBC,SAAS,CAAC,EAAEC,MAAMC,MAAMC,IAAG,OAAQ;MACjCC,MAAM;QACJC,QAAQC,aAASC,KAAK;UAAEN;UAAMC;UAAMC;QAAI,CAAA;MAC1C;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": ["Capabilities", "contributes", "createResolver", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "WnfsAction", "Create", "resolve", "name", "type", "cid", "data", "object", "WnfsFile", "make", "Upload", "file", "space", "blockstore", "getCapability", "WnfsCapabilities", "Blockstore", "info", "upload"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/markdown.ts", "../../../src/extensions/image.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type PluginContext, contributes } from '@dxos/app-framework';\nimport { MarkdownCapabilities } from '@dxos/plugin-markdown';\nimport { getSpace } from '@dxos/react-client/echo';\n\nimport { image } from '../extensions';\n\nimport { WnfsCapabilities } from './capabilities';\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, type Range, StateField } 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 state,\n from,\n to,\n blobUrlCache,\n preload,\n options: { blockstore, instances, space },\n}: {\n state: EditorState;\n from: number;\n to: number;\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) {\n return this._wnfsUrl === other._wnfsUrl;\n }\n\n override toDOM(view: EditorView) {\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
- }
@@ -1,88 +0,0 @@
1
- import {
2
- File_exports,
3
- WnfsAction
4
- } from "./chunk-CWMKN2F6.mjs";
5
- import {
6
- meta
7
- } from "./chunk-OGPGLJCV.mjs";
8
-
9
- // src/capabilities/react-surface.tsx
10
- import React2, { useCallback as useCallback2 } from "react";
11
- import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
12
- import { Obj } from "@dxos/echo";
13
- import { findAnnotation as findAnnotation2 } from "@dxos/effect";
14
-
15
- // src/components/index.ts
16
- import { lazy } from "react";
17
-
18
- // src/components/FileInput.tsx
19
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
20
- import React, { useCallback } from "react";
21
- import { useDropzone } from "react-dropzone";
22
- import { findAnnotation } from "@dxos/effect";
23
- import { useTranslation } from "@dxos/react-ui";
24
- import { mx } from "@dxos/react-ui-theme";
25
- var FileInput = ({ schema, onChange }) => {
26
- var _effect = _useSignals();
27
- try {
28
- const { t } = useTranslation(meta.id);
29
- const accept = findAnnotation(schema.ast, WnfsAction.UploadAnnotationId);
30
- const onDropAccepted = useCallback((files) => onChange?.(files[0]), [
31
- onChange
32
- ]);
33
- const { acceptedFiles, getRootProps, getInputProps, isFocused, isDragAccept, isDragReject } = useDropzone({
34
- multiple: false,
35
- accept,
36
- onDropAccepted
37
- });
38
- return /* @__PURE__ */ React.createElement("div", {
39
- ...getRootProps(),
40
- className: mx("flex flex-col items-center p-8 border border-separator", isFocused && "focus-ring", isDragAccept && "bg-attention", isDragReject && "border-roseFill")
41
- }, /* @__PURE__ */ React.createElement("input", getInputProps()), acceptedFiles[0] ? /* @__PURE__ */ React.createElement("p", null, acceptedFiles[0].name) : /* @__PURE__ */ React.createElement("p", null, t("file input placeholder")));
42
- } finally {
43
- _effect.f();
44
- }
45
- };
46
-
47
- // src/components/index.ts
48
- var FileContainer = lazy(() => import("./FileContainer-LLNI7WXR.mjs"));
49
-
50
- // src/capabilities/react-surface.tsx
51
- var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
52
- createSurface({
53
- id: `${meta.id}/article`,
54
- role: [
55
- "article",
56
- "section",
57
- "slide"
58
- ],
59
- filter: (data) => Obj.instanceOf(File_exports.File, data.subject),
60
- component: ({ data, role }) => /* @__PURE__ */ React2.createElement(FileContainer, {
61
- role,
62
- file: data.subject
63
- })
64
- }),
65
- createSurface({
66
- id: `${meta.id}/create-form`,
67
- role: "form-input",
68
- filter: (data) => {
69
- const annotation = findAnnotation2(data.schema.ast, WnfsAction.UploadAnnotationId);
70
- return !!annotation;
71
- },
72
- component: ({ data: { prop, schema }, ...props }) => {
73
- const inputProps = props;
74
- const handleChange = useCallback2((file) => inputProps.onValueChange?.("object", file), [
75
- prop,
76
- inputProps.onValueChange
77
- ]);
78
- return /* @__PURE__ */ React2.createElement(FileInput, {
79
- schema,
80
- onChange: handleChange
81
- });
82
- }
83
- })
84
- ]));
85
- export {
86
- react_surface_default as default
87
- };
88
- //# sourceMappingURL=react-surface-DMU47U3X.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/index.ts", "../../../src/components/FileInput.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { useCallback } from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { findAnnotation } from '@dxos/effect';\nimport { type InputProps } from '@dxos/react-ui-form';\n\nimport { FileContainer, FileInput } from '../components';\nimport { meta } from '../meta';\nimport { WnfsAction, WnfsFile } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${meta.id}/article`,\n role: ['article', 'section', 'slide'],\n filter: (data): data is { subject: WnfsFile.File } => Obj.instanceOf(WnfsFile.File, data.subject),\n component: ({ data, role }) => <FileContainer role={role} file={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/create-form`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: Schema.Schema.Any } => {\n const annotation = findAnnotation<boolean>(\n (data.schema as Schema.Schema.All).ast,\n WnfsAction.UploadAnnotationId,\n );\n return !!annotation;\n },\n component: ({ data: { prop, schema }, ...props }) => {\n const inputProps = props as unknown as InputProps;\n const handleChange = useCallback(\n (file: File) => inputProps.onValueChange?.('object', file),\n [prop, inputProps.onValueChange],\n );\n\n return <FileInput schema={schema} onChange={handleChange} />;\n },\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const FileContainer = lazy(() => import('./FileContainer'));\n\nexport * from './FileInput';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { useCallback } from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nimport { findAnnotation } from '@dxos/effect';\nimport { useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../meta';\nimport { WnfsAction } from '../types';\n\nexport type FileInputProps = {\n schema: Schema.Schema.Any;\n onChange: (file: File) => void;\n};\n\nexport const FileInput = ({ schema, onChange }: FileInputProps) => {\n const { t } = useTranslation(meta.id);\n const accept = findAnnotation<Record<string, string[]>>(schema.ast, WnfsAction.UploadAnnotationId);\n\n const onDropAccepted = useCallback((files: File[]) => onChange?.(files[0]), [onChange]);\n\n const { acceptedFiles, getRootProps, getInputProps, isFocused, isDragAccept, isDragReject } = useDropzone({\n multiple: false,\n accept,\n onDropAccepted,\n });\n\n return (\n <div\n {...getRootProps()}\n className={mx(\n 'flex flex-col items-center p-8 border border-separator',\n isFocused && 'focus-ring',\n isDragAccept && 'bg-attention',\n isDragReject && 'border-roseFill',\n )}\n >\n <input {...getInputProps()} />\n {acceptedFiles[0] ? <p>{acceptedFiles[0].name}</p> : <p>{t('file input placeholder')}</p>}\n </div>\n );\n};\n"],
5
- "mappings": ";;;;;;;;;AAKA,OAAOA,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,WAAW;AACpB,SAASC,kBAAAA,uBAAsB;;;ACL/B,SAASC,YAAY;;;;ACCrB,OAAOC,SAASC,mBAAmB;AACnC,SAASC,mBAAmB;AAE5B,SAASC,sBAAsB;AAC/B,SAASC,sBAAsB;AAC/B,SAASC,UAAU;AAUZ,IAAMC,YAAY,CAAC,EAAEC,QAAQC,SAAQ,MAAkB;;;AAC5D,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAMC,SAASC,eAAyCP,OAAOQ,KAAKC,WAAWC,kBAAkB;AAEjG,UAAMC,iBAAiBC,YAAY,CAACC,UAAkBZ,WAAWY,MAAM,CAAA,CAAE,GAAG;MAACZ;KAAS;AAEtF,UAAM,EAAEa,eAAeC,cAAcC,eAAeC,WAAWC,cAAcC,aAAY,IAAKC,YAAY;MACxGC,UAAU;MACVf;MACAK;IACF,CAAA;AAEA,WACE,sBAAA,cAACW,OAAAA;MACE,GAAGP,aAAAA;MACJQ,WAAWC,GACT,0DACAP,aAAa,cACbC,gBAAgB,gBAChBC,gBAAgB,iBAAA;OAGlB,sBAAA,cAACM,SAAUT,cAAAA,CAAAA,GACVF,cAAc,CAAA,IAAK,sBAAA,cAACY,KAAAA,MAAGZ,cAAc,CAAA,EAAGa,IAAI,IAAQ,sBAAA,cAACD,KAAAA,MAAGxB,EAAE,wBAAA,CAAA,CAAA;;;;AAGjE;;;ADxCO,IAAM0B,gBAAgBC,KAAK,MAAM,OAAO,8BAAA,CAAA;;;ADU/C,IAAA,yBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;MAAC;MAAW;MAAW;;IAC7BC,QAAQ,CAACC,SAA6CC,IAAIC,WAAWC,aAASC,MAAMJ,KAAKK,OAAO;IAChGC,WAAW,CAAC,EAAEN,MAAMF,KAAI,MAAO,gBAAAS,OAAA,cAACC,eAAAA;MAAcV;MAAYW,MAAMT,KAAKK;;EACvE,CAAA;EACAV,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAAA;AACP,YAAMU,aAAaC,gBAChBX,KAAKY,OAA6BC,KACnCC,WAAWC,kBAAkB;AAE/B,aAAO,CAAC,CAACL;IACX;IACAJ,WAAW,CAAC,EAAEN,MAAM,EAAEgB,MAAMJ,OAAM,GAAI,GAAGK,MAAAA,MAAO;AAC9C,YAAMC,aAAaD;AACnB,YAAME,eAAeC,aACnB,CAACX,SAAeS,WAAWG,gBAAgB,UAAUZ,IAAAA,GACrD;QAACO;QAAME,WAAWG;OAAc;AAGlC,aAAO,gBAAAd,OAAA,cAACe,WAAAA;QAAUV;QAAgBW,UAAUJ;;IAC9C;EACF,CAAA;CACD;",
6
- "names": ["React", "useCallback", "Capabilities", "contributes", "createSurface", "Obj", "findAnnotation", "lazy", "React", "useCallback", "useDropzone", "findAnnotation", "useTranslation", "mx", "FileInput", "schema", "onChange", "t", "useTranslation", "meta", "id", "accept", "findAnnotation", "ast", "WnfsAction", "UploadAnnotationId", "onDropAccepted", "useCallback", "files", "acceptedFiles", "getRootProps", "getInputProps", "isFocused", "isDragAccept", "isDragReject", "useDropzone", "multiple", "div", "className", "mx", "input", "p", "name", "FileContainer", "lazy", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "Obj", "instanceOf", "WnfsFile", "File", "subject", "component", "React", "FileContainer", "file", "annotation", "findAnnotation", "schema", "ast", "WnfsAction", "UploadAnnotationId", "prop", "props", "inputProps", "handleChange", "useCallback", "onValueChange", "FileInput", "onChange"]
7
- }
@@ -1,4 +0,0 @@
1
- import { type PluginContext } from '@dxos/app-framework';
2
- declare const _default: (context: PluginContext) => Promise<import("@dxos/app-framework").Capability<import("@dxos/app-framework").InterfaceDef<import("interface-blockstore").Blockstore<{}, {}, {}, {}, {}, {}, {}, {}>>>>;
3
- export default _default;
4
- //# sourceMappingURL=blockstore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blockstore.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/blockstore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,qBAAqB,CAAC;yBAOhD,SAAS,aAAa;AAA5C,wBAOE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/capabilities.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,MAAM,CAAC;AAGjE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,yBAAiB,gBAAgB,CAAC;IACzB,MAAM,UAAU,wFAAmE,CAAC;IAE3F,KAAY,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IACzF,MAAM,SAAS,uDAAiE,CAAC;CACzF"}
@@ -1,4 +0,0 @@
1
- import { Capabilities, type PluginContext } from '@dxos/app-framework';
2
- declare const _default: (context: PluginContext) => import("@dxos/app-framework").Capability<import("@dxos/app-framework").InterfaceDef<Capabilities.FileUploader>>;
3
- export default _default;
4
- //# sourceMappingURL=file-uploader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-uploader.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/file-uploader.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAoC,MAAM,qBAAqB,CAAC;yBAKzF,SAAS,aAAa;AAAtC,wBAcE"}
@@ -1,4 +0,0 @@
1
- import { Capabilities, type PluginContext } from '@dxos/app-framework';
2
- declare const _default: (context: PluginContext) => import("@dxos/app-framework").Capability<import("@dxos/app-framework").InterfaceDef<Capabilities.IntentResolver>>;
3
- export default _default;
4
- //# sourceMappingURL=intent-resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intent-resolver.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/intent-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAA+B,MAAM,qBAAqB,CAAC;yBAOpF,SAAS,aAAa;AAAtC,wBAoBK"}
@@ -1,4 +0,0 @@
1
- import { type PluginContext } from '@dxos/app-framework';
2
- declare const _default: (context: PluginContext) => import("@dxos/app-framework").Capability<import("@dxos/app-framework").InterfaceDef<import("@dxos/plugin-markdown").MarkdownExtensionProvider[]>>;
3
- export default _default;
4
- //# sourceMappingURL=markdown.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/markdown.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,qBAAqB,CAAC;yBAQtD,SAAS,aAAa;AAAtC,wBAaK"}
@@ -1,4 +0,0 @@
1
- import { Capabilities } from '@dxos/app-framework';
2
- declare const _default: () => import("@dxos/app-framework").Capability<import("@dxos/app-framework").InterfaceDef<Capabilities.ReactSurface>>;
3
- export default _default;
4
- //# sourceMappingURL=react-surface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAA8B,MAAM,qBAAqB,CAAC;;AAS/E,wBA4BK"}
@@ -1,19 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type PluginContext, contributes } from '@dxos/app-framework';
6
- import { ClientCapabilities } from '@dxos/plugin-client';
7
-
8
- import * as Blockstore from '../blockstore';
9
-
10
- import { WnfsCapabilities } from './capabilities';
11
-
12
- export default async (context: PluginContext) => {
13
- const client = context.getCapability(ClientCapabilities.Client);
14
- const apiHost = client.config.values.runtime?.services?.edge?.url || 'http://localhost:8787';
15
- const blockstore = Blockstore.create(apiHost);
16
- await blockstore.open();
17
-
18
- return contributes(WnfsCapabilities.Blockstore, blockstore);
19
- };
@@ -1,27 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import * as Effect from 'effect/Effect';
6
- import * as Function from 'effect/Function';
7
-
8
- import { Capabilities, type PluginContext, chain, contributes, createIntent } from '@dxos/app-framework';
9
- import { SpaceAction } from '@dxos/plugin-space/types';
10
-
11
- import { WnfsAction } from '../types';
12
-
13
- export default (context: PluginContext) => {
14
- return contributes(Capabilities.FileUploader, (space, file) => {
15
- const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
16
- const program = Effect.gen(function* () {
17
- const fileInfo = yield* dispatch(createIntent(WnfsAction.Upload, { space, file }));
18
- yield* dispatch(
19
- Function.pipe(createIntent(WnfsAction.Create, fileInfo), chain(SpaceAction.AddObject, { target: space })),
20
- );
21
-
22
- return fileInfo;
23
- });
24
-
25
- return Effect.runPromise(program);
26
- });
27
- };
@@ -1,32 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Capabilities, type PluginContext, contributes, createResolver } from '@dxos/app-framework';
6
-
7
- import { upload } from '../helpers';
8
- import { WnfsAction, WnfsFile } from '../types';
9
-
10
- import { WnfsCapabilities } from './capabilities';
11
-
12
- export default (context: PluginContext) =>
13
- contributes(Capabilities.IntentResolver, [
14
- // TODO(wittjosiah): Deleting the object doesn't delete the wnfs blob.
15
- // Consider ways to trigger blob deletion based on object deletion and/or adding file system manager.
16
- createResolver({
17
- intent: WnfsAction.Create,
18
- resolve: ({ name, type, cid }) => ({
19
- data: {
20
- object: WnfsFile.make({ name, type, cid }),
21
- },
22
- }),
23
- }),
24
- createResolver({
25
- intent: WnfsAction.Upload,
26
- resolve: async ({ file, space }) => {
27
- const blockstore = context.getCapability(WnfsCapabilities.Blockstore);
28
- const info = await upload({ file, blockstore, space });
29
- return { data: info };
30
- },
31
- }),
32
- ]);
@@ -1,26 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type PluginContext, contributes } from '@dxos/app-framework';
6
- import { MarkdownCapabilities } from '@dxos/plugin-markdown';
7
- import { getSpace } from '@dxos/react-client/echo';
8
-
9
- import { image } from '../extensions';
10
-
11
- import { WnfsCapabilities } from './capabilities';
12
-
13
- export default (context: PluginContext) =>
14
- contributes(MarkdownCapabilities.Extensions, [
15
- ({ document }) => {
16
- const blockstore = context.getCapability(WnfsCapabilities.Blockstore);
17
- const instances = context.getCapability(WnfsCapabilities.Instances);
18
-
19
- if (document) {
20
- const space = getSpace(document);
21
- return space ? [image({ blockstore, instances, space })] : [];
22
- }
23
-
24
- return [];
25
- },
26
- ]);
@@ -1,45 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import type * as Schema from 'effect/Schema';
6
- import React, { useCallback } from 'react';
7
-
8
- import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
9
- import { Obj } from '@dxos/echo';
10
- import { findAnnotation } from '@dxos/effect';
11
- import { type InputProps } from '@dxos/react-ui-form';
12
-
13
- import { FileContainer, FileInput } from '../components';
14
- import { meta } from '../meta';
15
- import { WnfsAction, WnfsFile } from '../types';
16
-
17
- export default () =>
18
- contributes(Capabilities.ReactSurface, [
19
- createSurface({
20
- id: `${meta.id}/article`,
21
- role: ['article', 'section', 'slide'],
22
- filter: (data): data is { subject: WnfsFile.File } => Obj.instanceOf(WnfsFile.File, data.subject),
23
- component: ({ data, role }) => <FileContainer role={role} file={data.subject} />,
24
- }),
25
- createSurface({
26
- id: `${meta.id}/create-form`,
27
- role: 'form-input',
28
- filter: (data): data is { prop: string; schema: Schema.Schema.Any } => {
29
- const annotation = findAnnotation<boolean>(
30
- (data.schema as Schema.Schema.All).ast,
31
- WnfsAction.UploadAnnotationId,
32
- );
33
- return !!annotation;
34
- },
35
- component: ({ data: { prop, schema }, ...props }) => {
36
- const inputProps = props as unknown as InputProps;
37
- const handleChange = useCallback(
38
- (file: File) => inputProps.onValueChange?.('object', file),
39
- [prop, inputProps.onValueChange],
40
- );
41
-
42
- return <FileInput schema={schema} onChange={handleChange} />;
43
- },
44
- }),
45
- ]);