@dxos/plugin-file 0.9.1-staging.ee54ba693a → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/PLUGIN.mdl +86 -77
  2. package/dist/lib/FilePlugin.mjs +37 -0
  3. package/dist/lib/FilePlugin.mjs.map +1 -0
  4. package/dist/lib/FilePlugin.node.mjs +12 -0
  5. package/dist/lib/FilePlugin.node.mjs.map +1 -0
  6. package/dist/lib/capabilities/node.mjs +8 -0
  7. package/dist/lib/capabilities/node.mjs.map +1 -0
  8. package/dist/lib/capabilities.mjs +15 -0
  9. package/dist/lib/capabilities.mjs.map +1 -0
  10. package/dist/lib/chunk-FileArticle.mjs +62 -0
  11. package/dist/lib/chunk-FileArticle.mjs.map +1 -0
  12. package/dist/lib/chunk-create-object.mjs +28 -0
  13. package/dist/lib/chunk-create-object.mjs.map +1 -0
  14. package/dist/lib/chunk-create.mjs +78 -0
  15. package/dist/lib/chunk-create.mjs.map +1 -0
  16. package/dist/lib/chunk-edge-backend.mjs +18 -0
  17. package/dist/lib/chunk-edge-backend.mjs.map +1 -0
  18. package/dist/lib/chunk-file-uploader.mjs +37 -0
  19. package/dist/lib/chunk-file-uploader.mjs.map +1 -0
  20. package/dist/lib/chunk-inline-backend.mjs +19 -0
  21. package/dist/lib/chunk-inline-backend.mjs.map +1 -0
  22. package/dist/lib/chunk-markdown-extension.mjs +182 -0
  23. package/dist/lib/chunk-markdown-extension.mjs.map +1 -0
  24. package/dist/lib/chunk-meta.mjs +44 -0
  25. package/dist/lib/chunk-meta.mjs.map +1 -0
  26. package/dist/lib/chunk-operation-handler.mjs +11 -0
  27. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  28. package/dist/lib/chunk-react-surface.mjs +55 -0
  29. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  30. package/dist/lib/chunk-read.mjs +32 -0
  31. package/dist/lib/chunk-read.mjs.map +1 -0
  32. package/dist/lib/chunk-settings.mjs +23 -0
  33. package/dist/lib/chunk-settings.mjs.map +1 -0
  34. package/dist/lib/chunk-skill-definition.mjs +10 -0
  35. package/dist/lib/chunk-skill-definition.mjs.map +1 -0
  36. package/dist/lib/chunk-skills.mjs +28 -0
  37. package/dist/lib/chunk-skills.mjs.map +1 -0
  38. package/dist/lib/chunk-types.mjs +98 -0
  39. package/dist/lib/chunk-types.mjs.map +1 -0
  40. package/dist/lib/components.mjs +57 -0
  41. package/dist/lib/components.mjs.map +1 -0
  42. package/dist/lib/containers.mjs +56 -0
  43. package/dist/lib/containers.mjs.map +1 -0
  44. package/dist/lib/index.mjs +4 -0
  45. package/dist/lib/meta.mjs +2 -0
  46. package/dist/lib/operations.mjs +7 -0
  47. package/dist/lib/operations.mjs.map +1 -0
  48. package/dist/lib/plugin.mjs +9 -0
  49. package/dist/lib/plugin.mjs.map +1 -0
  50. package/dist/lib/skills.mjs +2 -0
  51. package/dist/lib/translations.mjs +30 -0
  52. package/dist/lib/translations.mjs.map +1 -0
  53. package/dist/lib/types.mjs +2 -0
  54. package/dist/types/src/FilePlugin.d.ts.map +1 -1
  55. package/dist/types/src/FilePlugin.node.d.ts.map +1 -1
  56. package/dist/types/src/capabilities/FileUploadField.d.ts +12 -0
  57. package/dist/types/src/capabilities/FileUploadField.d.ts.map +1 -0
  58. package/dist/types/src/capabilities/create-object.d.ts +1 -1
  59. package/dist/types/src/capabilities/edge-backend.d.ts +5 -0
  60. package/dist/types/src/capabilities/edge-backend.d.ts.map +1 -0
  61. package/dist/types/src/capabilities/file-uploader.d.ts +1 -1
  62. package/dist/types/src/capabilities/file-uploader.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/index.d.ts +1 -0
  64. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  65. package/dist/types/src/capabilities/inline-backend.d.ts +2 -2
  66. package/dist/types/src/capabilities/inline-backend.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
  68. package/dist/types/src/capabilities/node.d.ts +5 -0
  69. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  70. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  71. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  72. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/settings.d.ts +1 -1
  74. package/dist/types/src/components/FileInput/FileInput.d.ts.map +1 -1
  75. package/dist/types/src/components/FilePreview/FilePreview.d.ts +1 -1
  76. package/dist/types/src/components/FilePreview/FilePreview.d.ts.map +1 -1
  77. package/dist/types/src/containers/FileArticle/FileArticle.d.ts +4 -1
  78. package/dist/types/src/containers/FileArticle/FileArticle.d.ts.map +1 -1
  79. package/dist/types/src/containers/FileSettings/FileSettings.d.ts +5 -3
  80. package/dist/types/src/containers/FileSettings/FileSettings.d.ts.map +1 -1
  81. package/dist/types/src/extensions/image.d.ts +0 -2
  82. package/dist/types/src/extensions/image.d.ts.map +1 -1
  83. package/dist/types/src/operations/create.d.ts +14 -5
  84. package/dist/types/src/operations/create.d.ts.map +1 -1
  85. package/dist/types/src/operations/read.d.ts.map +1 -1
  86. package/dist/types/src/types/FileCapabilities.d.ts +10 -28
  87. package/dist/types/src/types/FileCapabilities.d.ts.map +1 -1
  88. package/dist/types/src/types/Settings.d.ts +1 -1
  89. package/dist/types/src/types/Settings.d.ts.map +1 -1
  90. package/dist/types/src/types/limits.d.ts +0 -1
  91. package/dist/types/src/types/limits.d.ts.map +1 -1
  92. package/dist/types/tsconfig.tsbuildinfo +1 -1
  93. package/dx.config.ts +10 -6
  94. package/package.json +45 -41
  95. package/src/FilePlugin.node.ts +2 -1
  96. package/src/FilePlugin.tsx +8 -1
  97. package/src/capabilities/FileUploadField.tsx +37 -0
  98. package/src/capabilities/edge-backend.ts +27 -0
  99. package/src/capabilities/file-uploader.ts +6 -4
  100. package/src/capabilities/index.ts +1 -0
  101. package/src/capabilities/inline-backend.ts +4 -21
  102. package/src/capabilities/markdown-extension.ts +3 -8
  103. package/src/capabilities/node.ts +16 -0
  104. package/src/capabilities/react-surface.ts +46 -0
  105. package/src/components/FileInput/FileInput.tsx +3 -2
  106. package/src/containers/FileArticle/FileArticle.tsx +49 -42
  107. package/src/containers/FileSettings/FileSettings.tsx +19 -14
  108. package/src/extensions/image.tsx +49 -28
  109. package/src/operations/create.test.ts +122 -32
  110. package/src/operations/create.ts +44 -24
  111. package/src/operations/read.ts +24 -6
  112. package/src/types/FileCapabilities.ts +10 -31
  113. package/src/types/Settings.ts +1 -1
  114. package/src/types/limits.ts +0 -2
  115. package/dist/lib/neutral/FileArticle-YU6NN3KN.mjs +0 -80
  116. package/dist/lib/neutral/FileArticle-YU6NN3KN.mjs.map +0 -7
  117. package/dist/lib/neutral/FilePlugin.mjs +0 -58
  118. package/dist/lib/neutral/FilePlugin.mjs.map +0 -7
  119. package/dist/lib/neutral/FilePlugin.node.mjs +0 -23
  120. package/dist/lib/neutral/FilePlugin.node.mjs.map +0 -7
  121. package/dist/lib/neutral/capabilities/index.mjs +0 -23
  122. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  123. package/dist/lib/neutral/chunk-DKGTSUUH.mjs +0 -8
  124. package/dist/lib/neutral/chunk-DKGTSUUH.mjs.map +0 -7
  125. package/dist/lib/neutral/chunk-GMYSEHV4.mjs +0 -40
  126. package/dist/lib/neutral/chunk-GMYSEHV4.mjs.map +0 -7
  127. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  128. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  129. package/dist/lib/neutral/chunk-LBZ4MCLI.mjs +0 -45
  130. package/dist/lib/neutral/chunk-LBZ4MCLI.mjs.map +0 -7
  131. package/dist/lib/neutral/chunk-YODPX62X.mjs +0 -136
  132. package/dist/lib/neutral/chunk-YODPX62X.mjs.map +0 -7
  133. package/dist/lib/neutral/chunk-ZUXUTRAJ.mjs +0 -80
  134. package/dist/lib/neutral/chunk-ZUXUTRAJ.mjs.map +0 -7
  135. package/dist/lib/neutral/components/index.mjs +0 -74
  136. package/dist/lib/neutral/components/index.mjs.map +0 -7
  137. package/dist/lib/neutral/containers/index.mjs +0 -59
  138. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  139. package/dist/lib/neutral/create-IUUG7RI6.mjs +0 -17
  140. package/dist/lib/neutral/create-IUUG7RI6.mjs.map +0 -7
  141. package/dist/lib/neutral/create-object-V667G4ZL.mjs +0 -30
  142. package/dist/lib/neutral/create-object-V667G4ZL.mjs.map +0 -7
  143. package/dist/lib/neutral/file-uploader-BCJH6TUL.mjs +0 -41
  144. package/dist/lib/neutral/file-uploader-BCJH6TUL.mjs.map +0 -7
  145. package/dist/lib/neutral/index.mjs +0 -32
  146. package/dist/lib/neutral/index.mjs.map +0 -7
  147. package/dist/lib/neutral/inline-backend-FGGGDYRB.mjs +0 -37
  148. package/dist/lib/neutral/inline-backend-FGGGDYRB.mjs.map +0 -7
  149. package/dist/lib/neutral/markdown-extension-RA5YNMTW.mjs +0 -230
  150. package/dist/lib/neutral/markdown-extension-RA5YNMTW.mjs.map +0 -7
  151. package/dist/lib/neutral/meta.json +0 -1
  152. package/dist/lib/neutral/meta.mjs +0 -8
  153. package/dist/lib/neutral/meta.mjs.map +0 -7
  154. package/dist/lib/neutral/operation-handler-CPDANWGH.mjs +0 -13
  155. package/dist/lib/neutral/operation-handler-CPDANWGH.mjs.map +0 -7
  156. package/dist/lib/neutral/operations/index.mjs +0 -8
  157. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  158. package/dist/lib/neutral/plugin.mjs +0 -16
  159. package/dist/lib/neutral/plugin.mjs.map +0 -7
  160. package/dist/lib/neutral/react-surface-5BXKSHD2.mjs +0 -60
  161. package/dist/lib/neutral/react-surface-5BXKSHD2.mjs.map +0 -7
  162. package/dist/lib/neutral/read-HG6CSWKR.mjs +0 -28
  163. package/dist/lib/neutral/read-HG6CSWKR.mjs.map +0 -7
  164. package/dist/lib/neutral/settings-RR3RESL2.mjs +0 -28
  165. package/dist/lib/neutral/settings-RR3RESL2.mjs.map +0 -7
  166. package/dist/lib/neutral/skill-definition-YHBGWBUS.mjs +0 -15
  167. package/dist/lib/neutral/skill-definition-YHBGWBUS.mjs.map +0 -7
  168. package/dist/lib/neutral/skills/index.mjs +0 -11
  169. package/dist/lib/neutral/skills/index.mjs.map +0 -7
  170. package/dist/lib/neutral/translations.mjs +0 -36
  171. package/dist/lib/neutral/translations.mjs.map +0 -7
  172. package/dist/lib/neutral/types/index.mjs +0 -22
  173. package/dist/lib/neutral/types/index.mjs.map +0 -7
  174. package/src/capabilities/react-surface.tsx +0 -61
@@ -1,28 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/capabilities/settings.ts
4
- import * as Effect from "effect/Effect";
5
- import { Capability } from "@dxos/app-framework";
6
- import { AppCapabilities } from "@dxos/app-toolkit";
7
- import { createKvsStore } from "@dxos/effect";
8
- import { meta } from "#meta";
9
- import { FileCapabilities, Settings } from "#types";
10
- var settings_default = Capability.makeModule(() => Effect.sync(() => {
11
- const settingsAtom = createKvsStore({
12
- key: meta.profile.key,
13
- schema: Settings.Settings,
14
- defaultValue: () => ({})
15
- });
16
- return [
17
- Capability.contributes(FileCapabilities.SettingsAtom, settingsAtom),
18
- Capability.contributes(AppCapabilities.Settings, {
19
- prefix: meta.profile.key,
20
- schema: Settings.Settings,
21
- atom: settingsAtom
22
- })
23
- ];
24
- }));
25
- export {
26
- settings_default as default
27
- };
28
- //# sourceMappingURL=settings-RR3RESL2.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/settings.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { createKvsStore } from '@dxos/effect';\n\nimport { meta } from '#meta';\nimport { FileCapabilities, Settings } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.sync(() => {\n const settingsAtom = createKvsStore({\n key: meta.profile.key,\n schema: Settings.Settings,\n defaultValue: () => ({}),\n });\n\n return [\n Capability.contributes(FileCapabilities.SettingsAtom, settingsAtom),\n Capability.contributes(AppCapabilities.Settings, {\n prefix: meta.profile.key,\n schema: Settings.Settings,\n atom: settingsAtom,\n }),\n ];\n }),\n);\n"],
5
- "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAChC,SAASC,sBAAsB;AAE/B,SAASC,YAAY;AACrB,SAASC,kBAAkBC,gBAAgB;AAE3C,IAAA,mBAAeL,WAAWM,WAAW,MAC5BC,YAAK,MAAA;AACV,QAAMC,eAAeN,eAAe;IAClCO,KAAKN,KAAKO,QAAQD;IAClBE,QAAQN,SAASA;IACjBO,cAAc,OAAO,CAAC;EACxB,CAAA;AAEA,SAAO;IACLZ,WAAWa,YAAYT,iBAAiBU,cAAcN,YAAAA;IACtDR,WAAWa,YAAYZ,gBAAgBI,UAAU;MAC/CU,QAAQZ,KAAKO,QAAQD;MACrBE,QAAQN,SAASA;MACjBW,MAAMR;IACR,CAAA;;AAEJ,CAAA,CAAA;",
6
- "names": ["Effect", "Capability", "AppCapabilities", "createKvsStore", "meta", "FileCapabilities", "Settings", "makeModule", "sync", "settingsAtom", "key", "profile", "schema", "defaultValue", "contributes", "SettingsAtom", "prefix", "atom"]
7
- }
@@ -1,15 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/capabilities/skill-definition.ts
4
- import * as Effect from "effect/Effect";
5
- import { Capability } from "@dxos/app-framework";
6
- import { AppCapabilities } from "@dxos/app-toolkit";
7
- import { FileSkill } from "#skills";
8
- var skillDefinition = () => Effect.succeed([
9
- Capability.contributes(AppCapabilities.SkillDefinition, FileSkill)
10
- ]);
11
- var skill_definition_default = skillDefinition;
12
- export {
13
- skill_definition_default as default
14
- };
15
- //# sourceMappingURL=skill-definition-YHBGWBUS.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/skill-definition.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nimport { FileSkill } from '#skills';\n\nconst skillDefinition = () => Effect.succeed([Capability.contributes(AppCapabilities.SkillDefinition, FileSkill)]);\n\nexport default skillDefinition;\n"],
5
- "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAEhC,SAASC,iBAAiB;AAE1B,IAAMC,kBAAkB,MAAaC,eAAQ;EAACJ,WAAWK,YAAYJ,gBAAgBK,iBAAiBJ,SAAAA;CAAW;AAEjH,IAAA,2BAAeC;",
6
- "names": ["Effect", "Capability", "AppCapabilities", "FileSkill", "skillDefinition", "succeed", "contributes", "SkillDefinition"]
7
- }
@@ -1,11 +0,0 @@
1
- import {
2
- SKILL_KEY,
3
- file_skill_default
4
- } from "../chunk-GMYSEHV4.mjs";
5
- import "../chunk-YODPX62X.mjs";
6
- import "../chunk-J5LGTIGS.mjs";
7
- export {
8
- file_skill_default as FileSkill,
9
- SKILL_KEY
10
- };
11
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
@@ -1,36 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/translations.ts
4
- import { Type } from "@dxos/echo";
5
- import { meta } from "#meta";
6
- import { File } from "#types";
7
- var translations = [
8
- {
9
- "en-US": {
10
- [Type.getTypename(File.File)]: {
11
- "typename.label": "File",
12
- "typename.label_zero": "Files",
13
- "typename.label_one": "File",
14
- "typename.label_other": "Files",
15
- "object-name.placeholder": "New file",
16
- "add-object.label": "Add file",
17
- "rename-object.label": "Rename file",
18
- "delete-object.label": "Delete file",
19
- "object-deleted.label": "File deleted"
20
- },
21
- [meta.profile.key]: {
22
- "plugin.name": "File",
23
- "file-input.placeholder": "Drop a file here, or click to select a file",
24
- "too-large-error.message": "File is too large. Maximum size is 4MB.",
25
- "unsupported-type-error.message": "Unsupported file type. Only images, videos, and PDFs are allowed.",
26
- "settings.backend.label": "Storage backend",
27
- "settings.backend.description": "Where uploaded files are stored. Install additional plugins (e.g. WNFS) to add backends.",
28
- "settings.backend.placeholder": "Select backend"
29
- }
30
- }
31
- }
32
- ];
33
- export {
34
- translations
35
- };
36
- //# sourceMappingURL=translations.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Type } from '@dxos/echo';\nimport { type Resource } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\nimport { File } from '#types';\n\nexport const translations = [\n {\n 'en-US': {\n [Type.getTypename(File.File)]: {\n 'typename.label': 'File',\n 'typename.label_zero': 'Files',\n 'typename.label_one': 'File',\n 'typename.label_other': 'Files',\n 'object-name.placeholder': 'New file',\n 'add-object.label': 'Add file',\n 'rename-object.label': 'Rename file',\n 'delete-object.label': 'Delete file',\n 'object-deleted.label': 'File deleted',\n },\n [meta.profile.key]: {\n 'plugin.name': 'File',\n 'file-input.placeholder': 'Drop a file here, or click to select a file',\n 'too-large-error.message': 'File is too large. Maximum size is 4MB.',\n 'unsupported-type-error.message': 'Unsupported file type. Only images, videos, and PDFs are allowed.',\n 'settings.backend.label': 'Storage backend',\n 'settings.backend.description':\n 'Where uploaded files are stored. Install additional plugins (e.g. WNFS) to add backends.',\n 'settings.backend.placeholder': 'Select backend',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
- "mappings": ";;;AAIA,SAASA,YAAY;AAGrB,SAASC,YAAY;AACrB,SAASC,YAAY;AAEd,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACH,KAAKI,YAAYF,KAAKA,IAAI,CAAA,GAAI;QAC7B,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,wBAAwB;QACxB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;MAC1B;MACA,CAACD,KAAKI,QAAQC,GAAG,GAAG;QAClB,eAAe;QACf,0BAA0B;QAC1B,2BAA2B;QAC3B,kCAAkC;QAClC,0BAA0B;QAC1B,gCACE;QACF,gCAAgC;MAClC;IACF;EACF;;",
6
- "names": ["Type", "meta", "File", "translations", "getTypename", "profile", "key"]
7
- }
@@ -1,22 +0,0 @@
1
- import {
2
- ACCEPTED_MIME,
3
- File,
4
- FileAction,
5
- FileCapabilities_exports,
6
- FileOperation_exports,
7
- MAX_FILE_SIZE,
8
- Settings_exports,
9
- isAcceptedMimeType
10
- } from "../chunk-YODPX62X.mjs";
11
- import "../chunk-J5LGTIGS.mjs";
12
- export {
13
- ACCEPTED_MIME,
14
- File,
15
- FileAction,
16
- FileCapabilities_exports as FileCapabilities,
17
- FileOperation_exports as FileOperation,
18
- MAX_FILE_SIZE,
19
- Settings_exports as Settings,
20
- isAcceptedMimeType
21
- };
22
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
@@ -1,61 +0,0 @@
1
- //
2
- // Copyright 2026 DXOS.org
3
- //
4
-
5
- import * as Effect from 'effect/Effect';
6
- import React, { useCallback } from 'react';
7
-
8
- import { Capabilities, Capability } from '@dxos/app-framework';
9
- import { Surface, useSettingsState } from '@dxos/app-framework/ui';
10
- import { AppSurface } from '@dxos/app-toolkit/ui';
11
- import { SchemaEx } from '@dxos/effect';
12
- import { type FormFieldRendererProps } from '@dxos/react-ui-form';
13
-
14
- import { FileInput } from '#components';
15
- import { FileArticle, FileSettings } from '#containers';
16
- import { meta } from '#meta';
17
- import { File, FileAction, type Settings } from '#types';
18
-
19
- export default Capability.makeModule(() =>
20
- Effect.succeed(
21
- Capability.contributes(Capabilities.ReactSurface, [
22
- Surface.create({
23
- id: 'article',
24
- filter: AppSurface.oneOf(
25
- AppSurface.object(AppSurface.Article, File.File),
26
- AppSurface.object(AppSurface.Section, File.File),
27
- AppSurface.object(AppSurface.Slide, File.File),
28
- ),
29
- component: ({ data, role }) => <FileArticle role={role} subject={data.subject} />,
30
- }),
31
- Surface.create({
32
- id: 'createForm',
33
- filter: AppSurface.formInputBySchema(
34
- (ast) => !!SchemaEx.findAnnotation<Record<string, string[]>>(ast, FileAction.UploadAnnotationId),
35
- ),
36
- component: ({ data, ...props }) => {
37
- const ast = data.fieldPropertyAst;
38
- if (!ast) {
39
- return null;
40
- }
41
-
42
- const inputProps = { ...props, type: ast } as unknown as FormFieldRendererProps;
43
- const handleChange = useCallback(
44
- (file: File) => inputProps.onValueChange?.(ast, file),
45
- [ast, inputProps.onValueChange],
46
- );
47
-
48
- return <FileInput schema={data.schema} onChange={handleChange} />;
49
- },
50
- }),
51
- Surface.create({
52
- id: 'pluginSettings',
53
- filter: AppSurface.settings(AppSurface.Article, meta.profile.key),
54
- component: ({ data: { subject } }) => {
55
- const { settings, updateSettings } = useSettingsState<Settings.Settings>(subject.atom);
56
- return <FileSettings settings={settings} onSettingsChange={updateSettings} />;
57
- },
58
- }),
59
- ]),
60
- ),
61
- );