@arbidocs/blocks 0.4.63 → 0.4.65

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 (34) hide show
  1. package/dist/{StreamedArtifactEditor-373E5JE7.js → StreamedArtifactEditor-OPL4KXOT.js} +3 -3
  2. package/dist/{StreamedArtifactEditor-373E5JE7.js.map → StreamedArtifactEditor-OPL4KXOT.js.map} +1 -1
  3. package/dist/{StreamedArtifactEditor-DBB7MXM3.cjs → StreamedArtifactEditor-RIKG6CJQ.cjs} +5 -5
  4. package/dist/{StreamedArtifactEditor-DBB7MXM3.cjs.map → StreamedArtifactEditor-RIKG6CJQ.cjs.map} +1 -1
  5. package/dist/artifacts/VersionTimeline.d.ts +4 -0
  6. package/dist/artifacts/index.cjs +21 -21
  7. package/dist/artifacts/index.js +1 -1
  8. package/dist/{chunk-YDVSD2XZ.js → chunk-5EBGRG3X.js} +8 -3
  9. package/dist/{chunk-YDVSD2XZ.js.map → chunk-5EBGRG3X.js.map} +1 -1
  10. package/dist/{chunk-FKIRBH5S.js → chunk-65HZ36MY.js} +13 -2
  11. package/dist/chunk-65HZ36MY.js.map +1 -0
  12. package/dist/{chunk-QWK7XXBP.cjs → chunk-SVJQWLOF.cjs} +13 -2
  13. package/dist/chunk-SVJQWLOF.cjs.map +1 -0
  14. package/dist/{chunk-KLPHGTQA.cjs → chunk-ZWA7UUZL.cjs} +8 -3
  15. package/dist/chunk-ZWA7UUZL.cjs.map +1 -0
  16. package/dist/connect/docx.cjs +4 -4
  17. package/dist/connect/docx.js +1 -1
  18. package/dist/connect/index.cjs +1 -1
  19. package/dist/connect/index.js +1 -1
  20. package/dist/connection/ai.d.ts +20 -3
  21. package/dist/docx/NativeDocxEditor.d.ts +7 -0
  22. package/dist/docx/index.cjs +24 -16
  23. package/dist/docx/index.cjs.map +1 -1
  24. package/dist/docx/index.js +12 -4
  25. package/dist/docx/index.js.map +1 -1
  26. package/dist/files/cells/DocumentNameCell.d.ts +3 -1
  27. package/dist/files/index.cjs +5 -0
  28. package/dist/files/index.cjs.map +1 -1
  29. package/dist/files/index.js +6 -1
  30. package/dist/files/index.js.map +1 -1
  31. package/package.json +4 -4
  32. package/dist/chunk-FKIRBH5S.js.map +0 -1
  33. package/dist/chunk-KLPHGTQA.cjs.map +0 -1
  34. package/dist/chunk-QWK7XXBP.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { ArtifactMarkdownEditor } from './chunk-NEFHQHQV.js';
3
- import { ArtifactEditor, ArtifactRedlineView } from './chunk-FKIRBH5S.js';
3
+ import { ArtifactEditor, ArtifactRedlineView } from './chunk-65HZ36MY.js';
4
4
  import './chunk-LOJVUGBJ.js';
5
5
  import './chunk-7F6CBP3Z.js';
6
6
  import { useState } from 'react';
@@ -100,5 +100,5 @@ function StreamedArtifactEditor({
100
100
  }
101
101
 
102
102
  export { StreamedArtifactEditor as default };
103
- //# sourceMappingURL=StreamedArtifactEditor-373E5JE7.js.map
104
- //# sourceMappingURL=StreamedArtifactEditor-373E5JE7.js.map
103
+ //# sourceMappingURL=StreamedArtifactEditor-OPL4KXOT.js.map
104
+ //# sourceMappingURL=StreamedArtifactEditor-OPL4KXOT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/StreamedArtifactEditor.tsx"],"names":[],"mappings":"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","file":"StreamedArtifactEditor-373E5JE7.js","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Copy, Download } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { renderArtifactMarkdown, useArtifactSession } from '@arbidocs/react/artifacts'\nimport { ArtifactEditor, ArtifactRedlineView, type ArtifactEditorLabels } from '../artifacts'\nimport {\n ArtifactMarkdownEditor,\n type ArtifactMarkdownEditorProps,\n} from '../artifacts/editor/ArtifactMarkdownEditor'\n\nexport interface StreamedArtifactEditorProps {\n workspaceId: string | undefined\n /** The stored first version (the lineage's root as far as this panel goes). */\n docId: string\n /** File name for the versions saved from here. */\n title: string\n testId: string\n className?: string\n /** Extra props of the rich-text editor (`dictation`, labels). */\n editorProps?: Partial<Omit<ArtifactMarkdownEditorProps, 'markdown' | 'onChange' | 'onNormalized'>>\n /** Called after a version is saved. */\n onSaved?: (docId: string | undefined) => void\n onSaveError?: (error: unknown) => void\n /** Extra header actions next to the toolbar. */\n actions?: (ctx: { content: string; title: string }) => ReactNode\n /** Hide the default Copy and Download buttons. */\n hideDefaultActions?: boolean\n labels?: Partial<ArtifactEditorLabels>\n}\n\n/**\n * The editing stage of `StreamedArtifact`: `ArtifactEditor` bound to `useArtifactSession`. It is\n * a separate module because it pulls the rich-text editor (Lexical), which must stay behind a\n * `lazy()` boundary.\n */\nexport default function StreamedArtifactEditor({\n workspaceId,\n docId,\n title,\n testId,\n className,\n editorProps,\n onSaved,\n onSaveError,\n actions,\n hideDefaultActions,\n labels,\n}: StreamedArtifactEditorProps) {\n const [openId, setOpenId] = useState(docId)\n const s = useArtifactSession({\n workspaceId,\n docId: openId,\n title,\n onSaved: ({ docId: next }) => {\n if (next) setOpenId(next)\n onSaved?.(next)\n },\n onSaveError,\n })\n\n const copy = () => void navigator.clipboard.writeText(s.content)\n const download = () => {\n const url = URL.createObjectURL(new Blob([s.content], { type: 'text/markdown' }))\n const a = document.createElement('a')\n a.href = url\n a.download = `${title.replace(/\\.md$/i, '')}.md`\n a.click()\n URL.revokeObjectURL(url)\n }\n\n return (\n <div\n className={cn(\n 'flex min-h-[560px] flex-col rounded-xl border border-border bg-card',\n className\n )}\n data-testid={testId}\n >\n <ArtifactEditor\n {...s.view}\n className=\"min-h-[560px] flex-1\"\n labels={labels}\n onOpenVersion={setOpenId}\n renderMarkdown={renderArtifactMarkdown}\n editor={<ArtifactMarkdownEditor {...editorProps} {...s.editorProps} />}\n redline={\n <ArtifactRedlineView {...s.redlineProps} renderMarkdown={renderArtifactMarkdown} />\n }\n actions={\n <>\n {!hideDefaultActions && (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={copy}\n data-testid={`${testId}-copy`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Copy className=\"size-4\" aria-hidden /> Copy\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={download}\n data-testid={`${testId}-download`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Download className=\"size-4\" aria-hidden /> Download\n </Button>\n </>\n )}\n {actions?.({ content: s.content, title })}\n </>\n }\n />\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/StreamedArtifactEditor.tsx"],"names":[],"mappings":"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","file":"StreamedArtifactEditor-OPL4KXOT.js","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Copy, Download } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { renderArtifactMarkdown, useArtifactSession } from '@arbidocs/react/artifacts'\nimport { ArtifactEditor, ArtifactRedlineView, type ArtifactEditorLabels } from '../artifacts'\nimport {\n ArtifactMarkdownEditor,\n type ArtifactMarkdownEditorProps,\n} from '../artifacts/editor/ArtifactMarkdownEditor'\n\nexport interface StreamedArtifactEditorProps {\n workspaceId: string | undefined\n /** The stored first version (the lineage's root as far as this panel goes). */\n docId: string\n /** File name for the versions saved from here. */\n title: string\n testId: string\n className?: string\n /** Extra props of the rich-text editor (`dictation`, labels). */\n editorProps?: Partial<Omit<ArtifactMarkdownEditorProps, 'markdown' | 'onChange' | 'onNormalized'>>\n /** Called after a version is saved. */\n onSaved?: (docId: string | undefined) => void\n onSaveError?: (error: unknown) => void\n /** Extra header actions next to the toolbar. */\n actions?: (ctx: { content: string; title: string }) => ReactNode\n /** Hide the default Copy and Download buttons. */\n hideDefaultActions?: boolean\n labels?: Partial<ArtifactEditorLabels>\n}\n\n/**\n * The editing stage of `StreamedArtifact`: `ArtifactEditor` bound to `useArtifactSession`. It is\n * a separate module because it pulls the rich-text editor (Lexical), which must stay behind a\n * `lazy()` boundary.\n */\nexport default function StreamedArtifactEditor({\n workspaceId,\n docId,\n title,\n testId,\n className,\n editorProps,\n onSaved,\n onSaveError,\n actions,\n hideDefaultActions,\n labels,\n}: StreamedArtifactEditorProps) {\n const [openId, setOpenId] = useState(docId)\n const s = useArtifactSession({\n workspaceId,\n docId: openId,\n title,\n onSaved: ({ docId: next }) => {\n if (next) setOpenId(next)\n onSaved?.(next)\n },\n onSaveError,\n })\n\n const copy = () => void navigator.clipboard.writeText(s.content)\n const download = () => {\n const url = URL.createObjectURL(new Blob([s.content], { type: 'text/markdown' }))\n const a = document.createElement('a')\n a.href = url\n a.download = `${title.replace(/\\.md$/i, '')}.md`\n a.click()\n URL.revokeObjectURL(url)\n }\n\n return (\n <div\n className={cn(\n 'flex min-h-[560px] flex-col rounded-xl border border-border bg-card',\n className\n )}\n data-testid={testId}\n >\n <ArtifactEditor\n {...s.view}\n className=\"min-h-[560px] flex-1\"\n labels={labels}\n onOpenVersion={setOpenId}\n renderMarkdown={renderArtifactMarkdown}\n editor={<ArtifactMarkdownEditor {...editorProps} {...s.editorProps} />}\n redline={\n <ArtifactRedlineView {...s.redlineProps} renderMarkdown={renderArtifactMarkdown} />\n }\n actions={\n <>\n {!hideDefaultActions && (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={copy}\n data-testid={`${testId}-copy`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Copy className=\"size-4\" aria-hidden /> Copy\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={download}\n data-testid={`${testId}-download`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Download className=\"size-4\" aria-hidden /> Download\n </Button>\n </>\n )}\n {actions?.({ content: s.content, title })}\n </>\n }\n />\n </div>\n )\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkQS4RV3MA_cjs = require('./chunk-QS4RV3MA.cjs');
5
- var chunkQWK7XXBP_cjs = require('./chunk-QWK7XXBP.cjs');
5
+ var chunkSVJQWLOF_cjs = require('./chunk-SVJQWLOF.cjs');
6
6
  require('./chunk-QVBZESYQ.cjs');
7
7
  require('./chunk-MHVNT4J3.cjs');
8
8
  var react = require('react');
@@ -53,7 +53,7 @@ function StreamedArtifactEditor({
53
53
  ),
54
54
  "data-testid": testId,
55
55
  children: /* @__PURE__ */ jsxRuntime.jsx(
56
- chunkQWK7XXBP_cjs.ArtifactEditor,
56
+ chunkSVJQWLOF_cjs.ArtifactEditor,
57
57
  {
58
58
  ...s.view,
59
59
  className: "min-h-[560px] flex-1",
@@ -61,7 +61,7 @@ function StreamedArtifactEditor({
61
61
  onOpenVersion: setOpenId,
62
62
  renderMarkdown: artifacts.renderArtifactMarkdown,
63
63
  editor: /* @__PURE__ */ jsxRuntime.jsx(chunkQS4RV3MA_cjs.ArtifactMarkdownEditor, { ...editorProps, ...s.editorProps }),
64
- redline: /* @__PURE__ */ jsxRuntime.jsx(chunkQWK7XXBP_cjs.ArtifactRedlineView, { ...s.redlineProps, renderMarkdown: artifacts.renderArtifactMarkdown }),
64
+ redline: /* @__PURE__ */ jsxRuntime.jsx(chunkSVJQWLOF_cjs.ArtifactRedlineView, { ...s.redlineProps, renderMarkdown: artifacts.renderArtifactMarkdown }),
65
65
  actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
66
66
  !hideDefaultActions && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
67
67
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -102,5 +102,5 @@ function StreamedArtifactEditor({
102
102
  }
103
103
 
104
104
  module.exports = StreamedArtifactEditor;
105
- //# sourceMappingURL=StreamedArtifactEditor-DBB7MXM3.cjs.map
106
- //# sourceMappingURL=StreamedArtifactEditor-DBB7MXM3.cjs.map
105
+ //# sourceMappingURL=StreamedArtifactEditor-RIKG6CJQ.cjs.map
106
+ //# sourceMappingURL=StreamedArtifactEditor-RIKG6CJQ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/StreamedArtifactEditor.tsx"],"names":["useState","useArtifactSession","jsx","cn","ArtifactEditor","renderArtifactMarkdown","ArtifactMarkdownEditor","ArtifactRedlineView","jsxs","Fragment","Button","Copy","Download"],"mappings":"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","file":"StreamedArtifactEditor-DBB7MXM3.cjs","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Copy, Download } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { renderArtifactMarkdown, useArtifactSession } from '@arbidocs/react/artifacts'\nimport { ArtifactEditor, ArtifactRedlineView, type ArtifactEditorLabels } from '../artifacts'\nimport {\n ArtifactMarkdownEditor,\n type ArtifactMarkdownEditorProps,\n} from '../artifacts/editor/ArtifactMarkdownEditor'\n\nexport interface StreamedArtifactEditorProps {\n workspaceId: string | undefined\n /** The stored first version (the lineage's root as far as this panel goes). */\n docId: string\n /** File name for the versions saved from here. */\n title: string\n testId: string\n className?: string\n /** Extra props of the rich-text editor (`dictation`, labels). */\n editorProps?: Partial<Omit<ArtifactMarkdownEditorProps, 'markdown' | 'onChange' | 'onNormalized'>>\n /** Called after a version is saved. */\n onSaved?: (docId: string | undefined) => void\n onSaveError?: (error: unknown) => void\n /** Extra header actions next to the toolbar. */\n actions?: (ctx: { content: string; title: string }) => ReactNode\n /** Hide the default Copy and Download buttons. */\n hideDefaultActions?: boolean\n labels?: Partial<ArtifactEditorLabels>\n}\n\n/**\n * The editing stage of `StreamedArtifact`: `ArtifactEditor` bound to `useArtifactSession`. It is\n * a separate module because it pulls the rich-text editor (Lexical), which must stay behind a\n * `lazy()` boundary.\n */\nexport default function StreamedArtifactEditor({\n workspaceId,\n docId,\n title,\n testId,\n className,\n editorProps,\n onSaved,\n onSaveError,\n actions,\n hideDefaultActions,\n labels,\n}: StreamedArtifactEditorProps) {\n const [openId, setOpenId] = useState(docId)\n const s = useArtifactSession({\n workspaceId,\n docId: openId,\n title,\n onSaved: ({ docId: next }) => {\n if (next) setOpenId(next)\n onSaved?.(next)\n },\n onSaveError,\n })\n\n const copy = () => void navigator.clipboard.writeText(s.content)\n const download = () => {\n const url = URL.createObjectURL(new Blob([s.content], { type: 'text/markdown' }))\n const a = document.createElement('a')\n a.href = url\n a.download = `${title.replace(/\\.md$/i, '')}.md`\n a.click()\n URL.revokeObjectURL(url)\n }\n\n return (\n <div\n className={cn(\n 'flex min-h-[560px] flex-col rounded-xl border border-border bg-card',\n className\n )}\n data-testid={testId}\n >\n <ArtifactEditor\n {...s.view}\n className=\"min-h-[560px] flex-1\"\n labels={labels}\n onOpenVersion={setOpenId}\n renderMarkdown={renderArtifactMarkdown}\n editor={<ArtifactMarkdownEditor {...editorProps} {...s.editorProps} />}\n redline={\n <ArtifactRedlineView {...s.redlineProps} renderMarkdown={renderArtifactMarkdown} />\n }\n actions={\n <>\n {!hideDefaultActions && (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={copy}\n data-testid={`${testId}-copy`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Copy className=\"size-4\" aria-hidden /> Copy\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={download}\n data-testid={`${testId}-download`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Download className=\"size-4\" aria-hidden /> Download\n </Button>\n </>\n )}\n {actions?.({ content: s.content, title })}\n </>\n }\n />\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/StreamedArtifactEditor.tsx"],"names":["useState","useArtifactSession","jsx","cn","ArtifactEditor","renderArtifactMarkdown","ArtifactMarkdownEditor","ArtifactRedlineView","jsxs","Fragment","Button","Copy","Download"],"mappings":";;;;;;;;;;;;AAmCe,SAAR,sBAAA,CAAwC;AAAA,EAC7C,WAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,EAAgC;AAC9B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,IAAIC,4BAAA,CAAmB;AAAA,IAC3B,WAAA;AAAA,IACA,KAAA,EAAO,MAAA;AAAA,IACP,KAAA;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,KAAA,EAAO,MAAK,KAAM;AAC5B,MAAA,IAAI,IAAA,YAAgB,IAAI,CAAA;AACxB,MAAA,OAAA,GAAU,IAAI,CAAA;AAAA,IAChB,CAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,OAAO,MAAM,KAAK,UAAU,SAAA,CAAU,SAAA,CAAU,EAAE,OAAO,CAAA;AAC/D,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,IAAA,CAAK,CAAC,CAAA,CAAE,OAAO,CAAA,EAAG,EAAE,IAAA,EAAM,eAAA,EAAiB,CAAC,CAAA;AAChF,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,IAAA,CAAA,CAAE,IAAA,GAAO,GAAA;AACT,IAAA,CAAA,CAAE,WAAW,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAC,CAAA,GAAA,CAAA;AAC3C,IAAA,CAAA,CAAE,KAAA,EAAM;AACR,IAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,KAAA;AAAA,QACT,qEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,kBAAAD,cAAA;AAAA,QAACE,gCAAA;AAAA,QAAA;AAAA,UACE,GAAG,CAAA,CAAE,IAAA;AAAA,UACN,SAAA,EAAU,sBAAA;AAAA,UACV,MAAA;AAAA,UACA,aAAA,EAAe,SAAA;AAAA,UACf,cAAA,EAAgBC,gCAAA;AAAA,UAChB,wBAAQH,cAAA,CAACI,wCAAA,EAAA,EAAwB,GAAG,WAAA,EAAc,GAAG,EAAE,WAAA,EAAa,CAAA;AAAA,UACpE,yBACEJ,cAAA,CAACK,qCAAA,EAAA,EAAqB,GAAG,CAAA,CAAE,YAAA,EAAc,gBAAgBF,gCAAA,EAAwB,CAAA;AAAA,UAEnF,yBACEG,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,CAAC,sCACAD,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAAD,eAAA;AAAA,gBAACE,SAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAS,IAAA;AAAA,kBACT,aAAA,EAAa,GAAG,MAAM,CAAA,KAAA,CAAA;AAAA,kBACtB,SAAA,EAAU,yBAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAR,cAAA,CAACS,gBAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,oBAAE;AAAA;AAAA;AAAA,eACzC;AAAA,8BACAH,eAAA;AAAA,gBAACE,SAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAS,QAAA;AAAA,kBACT,aAAA,EAAa,GAAG,MAAM,CAAA,SAAA,CAAA;AAAA,kBACtB,SAAA,EAAU,yBAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAR,cAAA,CAACU,oBAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,oBAAE;AAAA;AAAA;AAAA;AAC7C,aAAA,EACF,CAAA;AAAA,YAED,UAAU,EAAE,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,OAAO;AAAA,WAAA,EAC1C;AAAA;AAAA;AAEJ;AAAA,GACF;AAEJ","file":"StreamedArtifactEditor-RIKG6CJQ.cjs","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Copy, Download } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { renderArtifactMarkdown, useArtifactSession } from '@arbidocs/react/artifacts'\nimport { ArtifactEditor, ArtifactRedlineView, type ArtifactEditorLabels } from '../artifacts'\nimport {\n ArtifactMarkdownEditor,\n type ArtifactMarkdownEditorProps,\n} from '../artifacts/editor/ArtifactMarkdownEditor'\n\nexport interface StreamedArtifactEditorProps {\n workspaceId: string | undefined\n /** The stored first version (the lineage's root as far as this panel goes). */\n docId: string\n /** File name for the versions saved from here. */\n title: string\n testId: string\n className?: string\n /** Extra props of the rich-text editor (`dictation`, labels). */\n editorProps?: Partial<Omit<ArtifactMarkdownEditorProps, 'markdown' | 'onChange' | 'onNormalized'>>\n /** Called after a version is saved. */\n onSaved?: (docId: string | undefined) => void\n onSaveError?: (error: unknown) => void\n /** Extra header actions next to the toolbar. */\n actions?: (ctx: { content: string; title: string }) => ReactNode\n /** Hide the default Copy and Download buttons. */\n hideDefaultActions?: boolean\n labels?: Partial<ArtifactEditorLabels>\n}\n\n/**\n * The editing stage of `StreamedArtifact`: `ArtifactEditor` bound to `useArtifactSession`. It is\n * a separate module because it pulls the rich-text editor (Lexical), which must stay behind a\n * `lazy()` boundary.\n */\nexport default function StreamedArtifactEditor({\n workspaceId,\n docId,\n title,\n testId,\n className,\n editorProps,\n onSaved,\n onSaveError,\n actions,\n hideDefaultActions,\n labels,\n}: StreamedArtifactEditorProps) {\n const [openId, setOpenId] = useState(docId)\n const s = useArtifactSession({\n workspaceId,\n docId: openId,\n title,\n onSaved: ({ docId: next }) => {\n if (next) setOpenId(next)\n onSaved?.(next)\n },\n onSaveError,\n })\n\n const copy = () => void navigator.clipboard.writeText(s.content)\n const download = () => {\n const url = URL.createObjectURL(new Blob([s.content], { type: 'text/markdown' }))\n const a = document.createElement('a')\n a.href = url\n a.download = `${title.replace(/\\.md$/i, '')}.md`\n a.click()\n URL.revokeObjectURL(url)\n }\n\n return (\n <div\n className={cn(\n 'flex min-h-[560px] flex-col rounded-xl border border-border bg-card',\n className\n )}\n data-testid={testId}\n >\n <ArtifactEditor\n {...s.view}\n className=\"min-h-[560px] flex-1\"\n labels={labels}\n onOpenVersion={setOpenId}\n renderMarkdown={renderArtifactMarkdown}\n editor={<ArtifactMarkdownEditor {...editorProps} {...s.editorProps} />}\n redline={\n <ArtifactRedlineView {...s.redlineProps} renderMarkdown={renderArtifactMarkdown} />\n }\n actions={\n <>\n {!hideDefaultActions && (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={copy}\n data-testid={`${testId}-copy`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Copy className=\"size-4\" aria-hidden /> Copy\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={download}\n data-testid={`${testId}-download`}\n className=\"pointer-coarse:min-h-11\"\n >\n <Download className=\"size-4\" aria-hidden /> Download\n </Button>\n </>\n )}\n {actions?.({ content: s.content, title })}\n </>\n }\n />\n </div>\n )\n}\n"]}
@@ -8,6 +8,8 @@ export interface VersionTimelineLabels {
8
8
  current: string;
9
9
  version: (n: number) => string;
10
10
  branchedFrom: (n: number) => string;
11
+ /** Why a version exists, keyed by its `reason` (upload | edit | signed | sync). */
12
+ reasons: Record<string, string>;
11
13
  open: string;
12
14
  compare: string;
13
15
  }
@@ -32,6 +34,8 @@ export interface VersionEntry {
32
34
  number?: number;
33
35
  /** The version this one was saved from (a restore when it is not the row above). */
34
36
  savedFromId?: string | null;
37
+ /** Why the version exists: upload | edit | signed | sync. Shown as a label on the row. */
38
+ reason?: string | null;
35
39
  }
36
40
  export interface VersionTimelineProps {
37
41
  /** Versions in creation order (oldest first). */
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkQWK7XXBP_cjs = require('../chunk-QWK7XXBP.cjs');
4
+ var chunkSVJQWLOF_cjs = require('../chunk-SVJQWLOF.cjs');
5
5
  var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
6
6
  require('../chunk-MHVNT4J3.cjs');
7
7
 
@@ -9,83 +9,83 @@ require('../chunk-MHVNT4J3.cjs');
9
9
 
10
10
  Object.defineProperty(exports, "ArtifactCompareBar", {
11
11
  enumerable: true,
12
- get: function () { return chunkQWK7XXBP_cjs.ArtifactCompareBar; }
12
+ get: function () { return chunkSVJQWLOF_cjs.ArtifactCompareBar; }
13
13
  });
14
14
  Object.defineProperty(exports, "ArtifactEditor", {
15
15
  enumerable: true,
16
- get: function () { return chunkQWK7XXBP_cjs.ArtifactEditor; }
16
+ get: function () { return chunkSVJQWLOF_cjs.ArtifactEditor; }
17
17
  });
18
18
  Object.defineProperty(exports, "ArtifactEditorBody", {
19
19
  enumerable: true,
20
- get: function () { return chunkQWK7XXBP_cjs.ArtifactEditorBody; }
20
+ get: function () { return chunkSVJQWLOF_cjs.ArtifactEditorBody; }
21
21
  });
22
22
  Object.defineProperty(exports, "ArtifactRedlineView", {
23
23
  enumerable: true,
24
- get: function () { return chunkQWK7XXBP_cjs.ArtifactRedlineView; }
24
+ get: function () { return chunkSVJQWLOF_cjs.ArtifactRedlineView; }
25
25
  });
26
26
  Object.defineProperty(exports, "ArtifactToolbar", {
27
27
  enumerable: true,
28
- get: function () { return chunkQWK7XXBP_cjs.ArtifactToolbar; }
28
+ get: function () { return chunkSVJQWLOF_cjs.ArtifactToolbar; }
29
29
  });
30
30
  Object.defineProperty(exports, "ArtifactVersionBar", {
31
31
  enumerable: true,
32
- get: function () { return chunkQWK7XXBP_cjs.ArtifactVersionBar; }
32
+ get: function () { return chunkSVJQWLOF_cjs.ArtifactVersionBar; }
33
33
  });
34
34
  Object.defineProperty(exports, "DEFAULT_ARTIFACT_COMPARE_BAR_LABELS", {
35
35
  enumerable: true,
36
- get: function () { return chunkQWK7XXBP_cjs.DEFAULT_ARTIFACT_COMPARE_BAR_LABELS; }
36
+ get: function () { return chunkSVJQWLOF_cjs.DEFAULT_ARTIFACT_COMPARE_BAR_LABELS; }
37
37
  });
38
38
  Object.defineProperty(exports, "DEFAULT_ARTIFACT_EDITOR_STATUS_LABELS", {
39
39
  enumerable: true,
40
- get: function () { return chunkQWK7XXBP_cjs.DEFAULT_ARTIFACT_EDITOR_STATUS_LABELS; }
40
+ get: function () { return chunkSVJQWLOF_cjs.DEFAULT_ARTIFACT_EDITOR_STATUS_LABELS; }
41
41
  });
42
42
  Object.defineProperty(exports, "DEFAULT_ARTIFACT_TOOLBAR_LABELS", {
43
43
  enumerable: true,
44
- get: function () { return chunkQWK7XXBP_cjs.DEFAULT_ARTIFACT_TOOLBAR_LABELS; }
44
+ get: function () { return chunkSVJQWLOF_cjs.DEFAULT_ARTIFACT_TOOLBAR_LABELS; }
45
45
  });
46
46
  Object.defineProperty(exports, "DEFAULT_ARTIFACT_VERSION_BAR_LABELS", {
47
47
  enumerable: true,
48
- get: function () { return chunkQWK7XXBP_cjs.DEFAULT_ARTIFACT_VERSION_BAR_LABELS; }
48
+ get: function () { return chunkSVJQWLOF_cjs.DEFAULT_ARTIFACT_VERSION_BAR_LABELS; }
49
49
  });
50
50
  Object.defineProperty(exports, "DEFAULT_REDLINE_LABELS", {
51
51
  enumerable: true,
52
- get: function () { return chunkQWK7XXBP_cjs.DEFAULT_REDLINE_LABELS; }
52
+ get: function () { return chunkSVJQWLOF_cjs.DEFAULT_REDLINE_LABELS; }
53
53
  });
54
54
  Object.defineProperty(exports, "DEFAULT_VERSION_TIMELINE_LABELS", {
55
55
  enumerable: true,
56
- get: function () { return chunkQWK7XXBP_cjs.DEFAULT_VERSION_TIMELINE_LABELS; }
56
+ get: function () { return chunkSVJQWLOF_cjs.DEFAULT_VERSION_TIMELINE_LABELS; }
57
57
  });
58
58
  Object.defineProperty(exports, "RedlineComputing", {
59
59
  enumerable: true,
60
- get: function () { return chunkQWK7XXBP_cjs.RedlineComputing; }
60
+ get: function () { return chunkSVJQWLOF_cjs.RedlineComputing; }
61
61
  });
62
62
  Object.defineProperty(exports, "RedlineDocument", {
63
63
  enumerable: true,
64
- get: function () { return chunkQWK7XXBP_cjs.RedlineDocument; }
64
+ get: function () { return chunkSVJQWLOF_cjs.RedlineDocument; }
65
65
  });
66
66
  Object.defineProperty(exports, "RedlineFrame", {
67
67
  enumerable: true,
68
- get: function () { return chunkQWK7XXBP_cjs.RedlineFrame; }
68
+ get: function () { return chunkSVJQWLOF_cjs.RedlineFrame; }
69
69
  });
70
70
  Object.defineProperty(exports, "RedlineHeader", {
71
71
  enumerable: true,
72
- get: function () { return chunkQWK7XXBP_cjs.RedlineHeader; }
72
+ get: function () { return chunkSVJQWLOF_cjs.RedlineHeader; }
73
73
  });
74
74
  Object.defineProperty(exports, "RedlineMark", {
75
75
  enumerable: true,
76
- get: function () { return chunkQWK7XXBP_cjs.RedlineMark; }
76
+ get: function () { return chunkSVJQWLOF_cjs.RedlineMark; }
77
77
  });
78
78
  Object.defineProperty(exports, "RedlineRevertGutter", {
79
79
  enumerable: true,
80
- get: function () { return chunkQWK7XXBP_cjs.RedlineRevertGutter; }
80
+ get: function () { return chunkSVJQWLOF_cjs.RedlineRevertGutter; }
81
81
  });
82
82
  Object.defineProperty(exports, "RedlineStatus", {
83
83
  enumerable: true,
84
- get: function () { return chunkQWK7XXBP_cjs.RedlineStatus; }
84
+ get: function () { return chunkSVJQWLOF_cjs.RedlineStatus; }
85
85
  });
86
86
  Object.defineProperty(exports, "VersionTimeline", {
87
87
  enumerable: true,
88
- get: function () { return chunkQWK7XXBP_cjs.VersionTimeline; }
88
+ get: function () { return chunkSVJQWLOF_cjs.VersionTimeline; }
89
89
  });
90
90
  Object.defineProperty(exports, "DEFAULT_STREAMED_ARTIFACT_FRAME_LABELS", {
91
91
  enumerable: true,
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- export { ArtifactCompareBar, ArtifactEditor, ArtifactEditorBody, ArtifactRedlineView, ArtifactToolbar, ArtifactVersionBar, DEFAULT_ARTIFACT_COMPARE_BAR_LABELS, DEFAULT_ARTIFACT_EDITOR_STATUS_LABELS, DEFAULT_ARTIFACT_TOOLBAR_LABELS, DEFAULT_ARTIFACT_VERSION_BAR_LABELS, DEFAULT_REDLINE_LABELS, DEFAULT_VERSION_TIMELINE_LABELS, RedlineComputing, RedlineDocument, RedlineFrame, RedlineHeader, RedlineMark, RedlineRevertGutter, RedlineStatus, VersionTimeline } from '../chunk-FKIRBH5S.js';
2
+ export { ArtifactCompareBar, ArtifactEditor, ArtifactEditorBody, ArtifactRedlineView, ArtifactToolbar, ArtifactVersionBar, DEFAULT_ARTIFACT_COMPARE_BAR_LABELS, DEFAULT_ARTIFACT_EDITOR_STATUS_LABELS, DEFAULT_ARTIFACT_TOOLBAR_LABELS, DEFAULT_ARTIFACT_VERSION_BAR_LABELS, DEFAULT_REDLINE_LABELS, DEFAULT_VERSION_TIMELINE_LABELS, RedlineComputing, RedlineDocument, RedlineFrame, RedlineHeader, RedlineMark, RedlineRevertGutter, RedlineStatus, VersionTimeline } from '../chunk-65HZ36MY.js';
3
3
  export { DEFAULT_STREAMED_ARTIFACT_FRAME_LABELS, StreamedArtifactFrame } from '../chunk-LOJVUGBJ.js';
4
4
  import '../chunk-7F6CBP3Z.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -991,6 +991,10 @@ var WordDraftStream = class {
991
991
  }
992
992
  }
993
993
  };
994
+ function contentPath(documentId) {
995
+ const match = /^(doc-[A-Za-z0-9]+)@v([1-9][0-9]*)$/.exec(documentId);
996
+ return match ? `/${encodeURIComponent(match[1])}/content?version=${match[2]}` : `/${encodeURIComponent(documentId)}/content`;
997
+ }
994
998
  var drafts = /* @__PURE__ */ new Map();
995
999
  var stateBytes = (room) => Y.encodeStateAsUpdate(room.ydoc);
996
1000
  var encodeState = (room) => {
@@ -1097,6 +1101,7 @@ function DocxRibbon({ onSave }) {
1097
1101
  /* @__PURE__ */ jsxs(DocxEditor.Toolbar, { t, preset: false, onSave, children: [
1098
1102
  /* @__PURE__ */ jsx(DocxEditor.Toolbar.Undo, {}),
1099
1103
  /* @__PURE__ */ jsx(DocxEditor.Toolbar.Redo, {}),
1104
+ /* @__PURE__ */ jsx(DocxEditor.Toolbar.Save, {}),
1100
1105
  tab === "Home" && /* @__PURE__ */ jsxs(Fragment, { children: [
1101
1106
  /* @__PURE__ */ jsx(DocxEditor.Toolbar.Bold, {}),
1102
1107
  /* @__PURE__ */ jsx(DocxEditor.Toolbar.Italic, {}),
@@ -1208,7 +1213,7 @@ function NativeDocxEditor({
1208
1213
  method: "POST",
1209
1214
  headers: { "Content-Type": "application/json" },
1210
1215
  body: JSON.stringify({ content: draftContent })
1211
- })).arrayBuffer() : await (await adapter.request(`/${documentId}/content`)).arrayBuffer();
1216
+ })).arrayBuffer() : await (await adapter.request(contentPath(documentId))).arrayBuffer();
1212
1217
  if (!cancelled) {
1213
1218
  setReady({
1214
1219
  document: new Uint8Array(data),
@@ -1659,5 +1664,5 @@ function StreamedWordArtifact({
1659
1664
  }
1660
1665
 
1661
1666
  export { DocxCommentActivity, DocxEditorReview, DocxMentions, DocxParticipants, DocxRibbon, NativeDocxEditor, StreamedWordArtifact, loadDocxFonts, normalizeDocxExport, reviewModule, useReview, useReviewItem };
1662
- //# sourceMappingURL=chunk-YDVSD2XZ.js.map
1663
- //# sourceMappingURL=chunk-YDVSD2XZ.js.map
1667
+ //# sourceMappingURL=chunk-5EBGRG3X.js.map
1668
+ //# sourceMappingURL=chunk-5EBGRG3X.js.map