@arbidocs/blocks 0.4.93 → 0.4.95

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 (112) hide show
  1. package/dist/agents/index.cjs +281 -281
  2. package/dist/agents/index.js +5 -5
  3. package/dist/chat/index.cjs +127 -127
  4. package/dist/chat/index.js +4 -4
  5. package/dist/{chunk-HOXKR26S.js → chunk-24CS7JWU.js} +3 -3
  6. package/dist/{chunk-HOXKR26S.js.map → chunk-24CS7JWU.js.map} +1 -1
  7. package/dist/{chunk-6XS5IJ5R.cjs → chunk-3OXWJ3CZ.cjs} +5 -5
  8. package/dist/{chunk-6XS5IJ5R.cjs.map → chunk-3OXWJ3CZ.cjs.map} +1 -1
  9. package/dist/chunk-AF6RDAJF.js +14 -0
  10. package/dist/chunk-AF6RDAJF.js.map +1 -0
  11. package/dist/chunk-AOFATOT3.cjs +196 -0
  12. package/dist/chunk-AOFATOT3.cjs.map +1 -0
  13. package/dist/{chunk-NYBIKDWI.cjs → chunk-CKYA2IG5.cjs} +11 -5
  14. package/dist/chunk-CKYA2IG5.cjs.map +1 -0
  15. package/dist/chunk-D3QPYKZG.js +173 -0
  16. package/dist/chunk-D3QPYKZG.js.map +1 -0
  17. package/dist/{chunk-3WW32OUU.cjs → chunk-DCZGYCN2.cjs} +4 -4
  18. package/dist/{chunk-3WW32OUU.cjs.map → chunk-DCZGYCN2.cjs.map} +1 -1
  19. package/dist/{chunk-2ZDFVRGV.cjs → chunk-E2AAIMXO.cjs} +975 -61
  20. package/dist/chunk-E2AAIMXO.cjs.map +1 -0
  21. package/dist/{chunk-EWSEQEPL.js → chunk-EJAYB7PP.js} +4 -4
  22. package/dist/{chunk-EWSEQEPL.js.map → chunk-EJAYB7PP.js.map} +1 -1
  23. package/dist/{chunk-UO74FLRK.js → chunk-EOEDGJ75.js} +22 -53
  24. package/dist/chunk-EOEDGJ75.js.map +1 -0
  25. package/dist/{chunk-XMBYDLZQ.cjs → chunk-GNHOB2ZB.cjs} +4 -4
  26. package/dist/{chunk-XMBYDLZQ.cjs.map → chunk-GNHOB2ZB.cjs.map} +1 -1
  27. package/dist/{chunk-SF4BDUZS.js → chunk-HUFLBZWI.js} +3 -3
  28. package/dist/{chunk-SF4BDUZS.js.map → chunk-HUFLBZWI.js.map} +1 -1
  29. package/dist/{chunk-B4SRYJLM.cjs → chunk-KBPHLW2R.cjs} +3 -3
  30. package/dist/{chunk-B4SRYJLM.cjs.map → chunk-KBPHLW2R.cjs.map} +1 -1
  31. package/dist/{chunk-IF6VAYIA.cjs → chunk-OYMYNYFV.cjs} +5 -5
  32. package/dist/{chunk-IF6VAYIA.cjs.map → chunk-OYMYNYFV.cjs.map} +1 -1
  33. package/dist/{chunk-ICBAFX5B.js → chunk-PDEHIGJ5.js} +3 -3
  34. package/dist/{chunk-ICBAFX5B.js.map → chunk-PDEHIGJ5.js.map} +1 -1
  35. package/dist/{chunk-SJVUKXS6.js → chunk-QQH2NI5U.js} +6 -6
  36. package/dist/{chunk-SJVUKXS6.js.map → chunk-QQH2NI5U.js.map} +1 -1
  37. package/dist/chunk-RC25WMVB.cjs +16 -0
  38. package/dist/chunk-RC25WMVB.cjs.map +1 -0
  39. package/dist/{chunk-YFPIJUV3.cjs → chunk-RZGVMV6B.cjs} +5 -5
  40. package/dist/{chunk-YFPIJUV3.cjs.map → chunk-RZGVMV6B.cjs.map} +1 -1
  41. package/dist/{chunk-AMC5PMJ3.cjs → chunk-TOVSTC2M.cjs} +36 -68
  42. package/dist/chunk-TOVSTC2M.cjs.map +1 -0
  43. package/dist/{chunk-R3PDNQYT.js → chunk-UMY6Y6BM.js} +11 -5
  44. package/dist/chunk-UMY6Y6BM.js.map +1 -0
  45. package/dist/{chunk-MROSCSPW.cjs → chunk-VQ65UHTV.cjs} +45 -45
  46. package/dist/{chunk-MROSCSPW.cjs.map → chunk-VQ65UHTV.cjs.map} +1 -1
  47. package/dist/{chunk-MP6FK43E.cjs → chunk-VYKMBLDX.cjs} +8 -8
  48. package/dist/{chunk-MP6FK43E.cjs.map → chunk-VYKMBLDX.cjs.map} +1 -1
  49. package/dist/{chunk-W2R7YVFM.js → chunk-WXLKMEMB.js} +970 -65
  50. package/dist/chunk-WXLKMEMB.js.map +1 -0
  51. package/dist/{chunk-XQDM6T6C.js → chunk-YG7DGGCA.js} +3 -3
  52. package/dist/{chunk-XQDM6T6C.js.map → chunk-YG7DGGCA.js.map} +1 -1
  53. package/dist/{chunk-BX62HJZU.js → chunk-YPKSLTL5.js} +3 -3
  54. package/dist/{chunk-BX62HJZU.js.map → chunk-YPKSLTL5.js.map} +1 -1
  55. package/dist/{chunk-UDLMLU6T.js → chunk-ZNDAXSDP.js} +3 -3
  56. package/dist/{chunk-UDLMLU6T.js.map → chunk-ZNDAXSDP.js.map} +1 -1
  57. package/dist/connect/docx.cjs +8 -6
  58. package/dist/connect/docx.cjs.map +1 -1
  59. package/dist/connect/docx.js +6 -4
  60. package/dist/connect/docx.js.map +1 -1
  61. package/dist/connect/index.cjs +47 -45
  62. package/dist/connect/index.cjs.map +1 -1
  63. package/dist/connect/index.js +16 -14
  64. package/dist/connect/index.js.map +1 -1
  65. package/dist/docx/NativeDocxEditor.d.ts +6 -0
  66. package/dist/docx/definitions/DefinedTerms.d.ts +50 -0
  67. package/dist/docx/definitions/commands.d.ts +78 -0
  68. package/dist/docx/definitions/fragment.d.ts +29 -0
  69. package/dist/docx/definitions/port.d.ts +76 -0
  70. package/dist/docx/index.cjs +53 -15
  71. package/dist/docx/index.cjs.map +1 -1
  72. package/dist/docx/index.d.ts +3 -0
  73. package/dist/docx/index.js +5 -3
  74. package/dist/docx/index.js.map +1 -1
  75. package/dist/facts/index.cjs +7 -12
  76. package/dist/facts/index.cjs.map +1 -1
  77. package/dist/facts/index.js +3 -10
  78. package/dist/facts/index.js.map +1 -1
  79. package/dist/home/CreateTile.d.ts +3 -1
  80. package/dist/home/index.cjs +10 -4
  81. package/dist/home/index.cjs.map +1 -1
  82. package/dist/home/index.js +10 -4
  83. package/dist/home/index.js.map +1 -1
  84. package/dist/index.cjs +1207 -1067
  85. package/dist/index.cjs.map +1 -1
  86. package/dist/index.js +102 -15
  87. package/dist/index.js.map +1 -1
  88. package/dist/settings/PanelFrame.d.ts +3 -1
  89. package/dist/settings/index.cjs +12 -4
  90. package/dist/settings/index.cjs.map +1 -1
  91. package/dist/settings/index.js +12 -4
  92. package/dist/settings/index.js.map +1 -1
  93. package/dist/shell/Workspace.d.ts +6 -1
  94. package/dist/shell/index.cjs +67 -67
  95. package/dist/shell/index.js +3 -3
  96. package/dist/studio/index.cjs +7 -7
  97. package/dist/studio/index.js +6 -6
  98. package/dist/tags/definitions.d.ts +92 -0
  99. package/dist/tags/glossary.d.ts +44 -0
  100. package/dist/tags/index.d.ts +2 -0
  101. package/dist/tags/ooxml.d.ts +46 -0
  102. package/dist/tags/tagTableDocx.d.ts +1 -1
  103. package/dist/workflow-canvas/index.cjs +49 -49
  104. package/dist/workflow-canvas/index.js +6 -6
  105. package/package.json +4 -4
  106. package/src/docx/README.md +11 -0
  107. package/dist/chunk-2ZDFVRGV.cjs.map +0 -1
  108. package/dist/chunk-AMC5PMJ3.cjs.map +0 -1
  109. package/dist/chunk-NYBIKDWI.cjs.map +0 -1
  110. package/dist/chunk-R3PDNQYT.js.map +0 -1
  111. package/dist/chunk-UO74FLRK.js.map +0 -1
  112. package/dist/chunk-W2R7YVFM.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
5
4
  var chunkPPCATBOY_cjs = require('./chunk-PPCATBOY.cjs');
5
+ var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
6
6
  var react = require('react');
7
7
 
8
8
  function useMentionAutocomplete({
@@ -103,5 +103,5 @@ function rootFontSizePx() {
103
103
  exports.rootFontSizePx = rootFontSizePx;
104
104
  exports.useElementSize = useElementSize;
105
105
  exports.useMentionAutocomplete = useMentionAutocomplete;
106
- //# sourceMappingURL=chunk-B4SRYJLM.cjs.map
107
- //# sourceMappingURL=chunk-B4SRYJLM.cjs.map
106
+ //# sourceMappingURL=chunk-KBPHLW2R.cjs.map
107
+ //# sourceMappingURL=chunk-KBPHLW2R.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chat/useMentionAutocomplete.ts","../src/lib/useElementSize.ts"],"names":["useState","useEffect","useMemo","findMentionQuery","filterMentionCandidates","useCallback","insertMention","useListKeyNav","useLayoutEffect","observeResize"],"mappings":"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","file":"chunk-B4SRYJLM.cjs","sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type RefObject,\n type SyntheticEvent,\n} from 'react'\nimport { useListKeyNav, type UseListKeyNav } from '../lib/useListKeyNav'\nimport {\n filterMentionCandidates,\n findMentionQuery,\n insertMention,\n type MentionCandidate,\n} from './mentions'\n\nexport interface UseMentionAutocompleteOptions {\n /** The draft. */\n value: string\n /** Writes the draft (the same setter the composer uses). */\n onValueChange: (next: string) => void\n /** Who can be mentioned: workspace members and the assistant. */\n candidates: ReadonlyArray<MentionCandidate>\n /** The composer textarea; read for the caret and refocused after a pick. */\n textareaRef: RefObject<HTMLTextAreaElement | null>\n}\n\nexport interface UseMentionAutocomplete {\n isOpen: boolean\n /** Filtered candidates for the `@query` at the caret. */\n items: MentionCandidate[]\n /** Keyboard navigation; call `nav.handleKeyDown` first in the textarea's `onKeyDown`. */\n nav: UseListKeyNav\n /** Insert a candidate in place of the `@query`. */\n pick: (candidate: MentionCandidate) => void\n /** Wrap the composer's `onValueChange` with this so the caret is tracked as the user types. */\n onValueChange: (next: string) => void\n /** Spread onto the textarea (via `textareaProps`): tracks caret moves (clicks, arrows). */\n textareaProps: { onSelect: (event: SyntheticEvent<HTMLTextAreaElement>) => void }\n}\n\n/**\n * Headless `@mention` autocomplete for a textarea: finds the `@query` at the caret, filters the\n * candidates, and on pick replaces the query with `@<label> `. Pair with {@link MentionMenu}.\n */\nexport function useMentionAutocomplete({\n value,\n onValueChange,\n candidates,\n textareaRef,\n}: UseMentionAutocompleteOptions): UseMentionAutocomplete {\n const [caret, setCaret] = useState<number | null>(null)\n // Escape dismisses the menu for the `@` it was opened at, until the user starts another one.\n const [dismissedAt, setDismissedAt] = useState<number | null>(null)\n\n // The draft can change from outside (cleared on send, restored on error): once the dismissed\n // `@` is gone, re-arm so the next `@` there opens the menu again.\n useEffect(() => {\n if (dismissedAt !== null && value[dismissedAt] !== '@') setDismissedAt(null)\n }, [value, dismissedAt])\n\n const match = useMemo(() => {\n if (caret === null) return null\n const query = findMentionQuery(value, Math.min(caret, value.length))\n // A completed recipient followed by a space is no longer an autocomplete query.\n return query && candidates.some((candidate) => query.query === `${candidate.label} `)\n ? null\n : query\n }, [value, caret, candidates])\n const items = useMemo(\n () => (match ? filterMentionCandidates(candidates, match.query) : []),\n [match, candidates]\n )\n const isOpen = !!match && items.length > 0 && dismissedAt !== match.start\n\n const readCaret = useCallback(() => {\n const ta = textareaRef.current\n setCaret(ta ? ta.selectionStart : null)\n }, [textareaRef])\n\n const pick = useCallback(\n (candidate: MentionCandidate) => {\n if (!match || caret === null) return\n const next = insertMention(value, match.start, Math.min(caret, value.length), candidate.label)\n onValueChange(next.text)\n setCaret(next.caret)\n // The inserted `@<label> ` is complete: keep the menu shut for this `@`.\n setDismissedAt(match.start)\n requestAnimationFrame(() => {\n const ta = textareaRef.current\n if (!ta) return\n ta.focus()\n ta.setSelectionRange(next.caret, next.caret)\n })\n },\n [match, caret, value, onValueChange, textareaRef]\n )\n\n const nav = useListKeyNav({\n open: isOpen,\n items,\n onPick: pick,\n onDismiss: () => setDismissedAt(match?.start ?? null),\n resetKey: match?.query,\n })\n\n const handleValueChange = useCallback(\n (next: string) => {\n onValueChange(next)\n const ta = textareaRef.current\n setCaret(ta ? ta.selectionStart : next.length)\n // Deleting text (or the `@` itself) re-arms the menu: the user is editing that mention.\n if (dismissedAt !== null && (next.length < value.length || next[dismissedAt] !== '@')) {\n setDismissedAt(null)\n }\n },\n [onValueChange, textareaRef, dismissedAt, value]\n )\n\n return {\n isOpen,\n items,\n nav,\n pick,\n onValueChange: handleValueChange,\n textareaProps: { onSelect: readCaret },\n }\n}\n","import { useLayoutEffect, useState, type RefObject } from 'react'\nimport { observeResize } from './observe-resize'\n\nexport interface ElementSize {\n width: number\n height: number\n}\n\n/**\n * The border-box size of an element, kept current with a ResizeObserver. It is measured before\n * the first paint (layout effect), so a layout that depends on it never flashes the wrong mode.\n * Window resize is listened to as well (a no-ResizeObserver engine, jsdom, still re-measures).\n */\nexport function useElementSize<T extends HTMLElement>(ref: RefObject<T | null>): ElementSize {\n const [size, setSize] = useState<ElementSize>({ width: 0, height: 0 })\n useLayoutEffect(() => {\n const el = ref.current\n if (!el) return\n const measure = () => {\n const rect = el.getBoundingClientRect()\n setSize((prev) =>\n prev.width === rect.width && prev.height === rect.height\n ? prev\n : { width: rect.width, height: rect.height }\n )\n }\n measure()\n window.addEventListener('resize', measure)\n const stopObserving = observeResize(el, measure)\n return () => {\n window.removeEventListener('resize', measure)\n stopObserving()\n }\n }, [ref])\n return size\n}\n\n/** The root font size in px (what `rem` means), 16 when it cannot be read. */\nexport function rootFontSizePx(): number {\n if (typeof document === 'undefined') return 16\n const size = parseFloat(getComputedStyle(document.documentElement).fontSize)\n return Number.isFinite(size) && size > 0 ? size : 16\n}\n"]}
1
+ {"version":3,"sources":["../src/chat/useMentionAutocomplete.ts","../src/lib/useElementSize.ts"],"names":["useState","useEffect","useMemo","findMentionQuery","filterMentionCandidates","useCallback","insertMention","useListKeyNav","useLayoutEffect","observeResize"],"mappings":"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","file":"chunk-KBPHLW2R.cjs","sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type RefObject,\n type SyntheticEvent,\n} from 'react'\nimport { useListKeyNav, type UseListKeyNav } from '../lib/useListKeyNav'\nimport {\n filterMentionCandidates,\n findMentionQuery,\n insertMention,\n type MentionCandidate,\n} from './mentions'\n\nexport interface UseMentionAutocompleteOptions {\n /** The draft. */\n value: string\n /** Writes the draft (the same setter the composer uses). */\n onValueChange: (next: string) => void\n /** Who can be mentioned: workspace members and the assistant. */\n candidates: ReadonlyArray<MentionCandidate>\n /** The composer textarea; read for the caret and refocused after a pick. */\n textareaRef: RefObject<HTMLTextAreaElement | null>\n}\n\nexport interface UseMentionAutocomplete {\n isOpen: boolean\n /** Filtered candidates for the `@query` at the caret. */\n items: MentionCandidate[]\n /** Keyboard navigation; call `nav.handleKeyDown` first in the textarea's `onKeyDown`. */\n nav: UseListKeyNav\n /** Insert a candidate in place of the `@query`. */\n pick: (candidate: MentionCandidate) => void\n /** Wrap the composer's `onValueChange` with this so the caret is tracked as the user types. */\n onValueChange: (next: string) => void\n /** Spread onto the textarea (via `textareaProps`): tracks caret moves (clicks, arrows). */\n textareaProps: { onSelect: (event: SyntheticEvent<HTMLTextAreaElement>) => void }\n}\n\n/**\n * Headless `@mention` autocomplete for a textarea: finds the `@query` at the caret, filters the\n * candidates, and on pick replaces the query with `@<label> `. Pair with {@link MentionMenu}.\n */\nexport function useMentionAutocomplete({\n value,\n onValueChange,\n candidates,\n textareaRef,\n}: UseMentionAutocompleteOptions): UseMentionAutocomplete {\n const [caret, setCaret] = useState<number | null>(null)\n // Escape dismisses the menu for the `@` it was opened at, until the user starts another one.\n const [dismissedAt, setDismissedAt] = useState<number | null>(null)\n\n // The draft can change from outside (cleared on send, restored on error): once the dismissed\n // `@` is gone, re-arm so the next `@` there opens the menu again.\n useEffect(() => {\n if (dismissedAt !== null && value[dismissedAt] !== '@') setDismissedAt(null)\n }, [value, dismissedAt])\n\n const match = useMemo(() => {\n if (caret === null) return null\n const query = findMentionQuery(value, Math.min(caret, value.length))\n // A completed recipient followed by a space is no longer an autocomplete query.\n return query && candidates.some((candidate) => query.query === `${candidate.label} `)\n ? null\n : query\n }, [value, caret, candidates])\n const items = useMemo(\n () => (match ? filterMentionCandidates(candidates, match.query) : []),\n [match, candidates]\n )\n const isOpen = !!match && items.length > 0 && dismissedAt !== match.start\n\n const readCaret = useCallback(() => {\n const ta = textareaRef.current\n setCaret(ta ? ta.selectionStart : null)\n }, [textareaRef])\n\n const pick = useCallback(\n (candidate: MentionCandidate) => {\n if (!match || caret === null) return\n const next = insertMention(value, match.start, Math.min(caret, value.length), candidate.label)\n onValueChange(next.text)\n setCaret(next.caret)\n // The inserted `@<label> ` is complete: keep the menu shut for this `@`.\n setDismissedAt(match.start)\n requestAnimationFrame(() => {\n const ta = textareaRef.current\n if (!ta) return\n ta.focus()\n ta.setSelectionRange(next.caret, next.caret)\n })\n },\n [match, caret, value, onValueChange, textareaRef]\n )\n\n const nav = useListKeyNav({\n open: isOpen,\n items,\n onPick: pick,\n onDismiss: () => setDismissedAt(match?.start ?? null),\n resetKey: match?.query,\n })\n\n const handleValueChange = useCallback(\n (next: string) => {\n onValueChange(next)\n const ta = textareaRef.current\n setCaret(ta ? ta.selectionStart : next.length)\n // Deleting text (or the `@` itself) re-arms the menu: the user is editing that mention.\n if (dismissedAt !== null && (next.length < value.length || next[dismissedAt] !== '@')) {\n setDismissedAt(null)\n }\n },\n [onValueChange, textareaRef, dismissedAt, value]\n )\n\n return {\n isOpen,\n items,\n nav,\n pick,\n onValueChange: handleValueChange,\n textareaProps: { onSelect: readCaret },\n }\n}\n","import { useLayoutEffect, useState, type RefObject } from 'react'\nimport { observeResize } from './observe-resize'\n\nexport interface ElementSize {\n width: number\n height: number\n}\n\n/**\n * The border-box size of an element, kept current with a ResizeObserver. It is measured before\n * the first paint (layout effect), so a layout that depends on it never flashes the wrong mode.\n * Window resize is listened to as well (a no-ResizeObserver engine, jsdom, still re-measures).\n */\nexport function useElementSize<T extends HTMLElement>(ref: RefObject<T | null>): ElementSize {\n const [size, setSize] = useState<ElementSize>({ width: 0, height: 0 })\n useLayoutEffect(() => {\n const el = ref.current\n if (!el) return\n const measure = () => {\n const rect = el.getBoundingClientRect()\n setSize((prev) =>\n prev.width === rect.width && prev.height === rect.height\n ? prev\n : { width: rect.width, height: rect.height }\n )\n }\n measure()\n window.addEventListener('resize', measure)\n const stopObserving = observeResize(el, measure)\n return () => {\n window.removeEventListener('resize', measure)\n stopObserving()\n }\n }, [ref])\n return size\n}\n\n/** The root font size in px (what `rem` means), 16 when it cannot be read. */\nexport function rootFontSizePx(): number {\n if (typeof document === 'undefined') return 16\n const size = parseFloat(getComputedStyle(document.documentElement).fontSize)\n return Number.isFinite(size) && size > 0 ? size : 16\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkXKSFJYOD_cjs = require('./chunk-XKSFJYOD.cjs');
5
- var chunkMP6FK43E_cjs = require('./chunk-MP6FK43E.cjs');
5
+ var chunkVYKMBLDX_cjs = require('./chunk-VYKMBLDX.cjs');
6
6
  var chunkVGOFFCMT_cjs = require('./chunk-VGOFFCMT.cjs');
7
7
  var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
8
8
  var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
@@ -1598,8 +1598,8 @@ function LabelPinRow({
1598
1598
  );
1599
1599
  }
1600
1600
  function AssistantToaster(props) {
1601
- const dock = chunkMP6FK43E_cjs.useAssistantDock();
1602
- const { isDockAvailable } = chunkMP6FK43E_cjs.useChatSurface();
1601
+ const dock = chunkVYKMBLDX_cjs.useAssistantDock();
1602
+ const { isDockAvailable } = chunkVYKMBLDX_cjs.useChatSurface();
1603
1603
  return /* @__PURE__ */ jsxRuntime.jsx(chunkXKSFJYOD_cjs.Toaster, { ...props, dockOpen: dock.isOpen && isDockAvailable });
1604
1604
  }
1605
1605
  function hasMessageBody(value, recipientLabel = "ARBI") {
@@ -1709,5 +1709,5 @@ exports.isLongPastedText = isLongPastedText;
1709
1709
  exports.useDismissibleCard = useDismissibleCard;
1710
1710
  exports.useLongPaste = useLongPaste;
1711
1711
  exports.useRecipientDraft = useRecipientDraft;
1712
- //# sourceMappingURL=chunk-IF6VAYIA.cjs.map
1713
- //# sourceMappingURL=chunk-IF6VAYIA.cjs.map
1712
+ //# sourceMappingURL=chunk-OYMYNYFV.cjs.map
1713
+ //# sourceMappingURL=chunk-OYMYNYFV.cjs.map