@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.
- package/dist/agents/index.cjs +281 -281
- package/dist/agents/index.js +5 -5
- package/dist/chat/index.cjs +127 -127
- package/dist/chat/index.js +4 -4
- package/dist/{chunk-HOXKR26S.js → chunk-24CS7JWU.js} +3 -3
- package/dist/{chunk-HOXKR26S.js.map → chunk-24CS7JWU.js.map} +1 -1
- package/dist/{chunk-6XS5IJ5R.cjs → chunk-3OXWJ3CZ.cjs} +5 -5
- package/dist/{chunk-6XS5IJ5R.cjs.map → chunk-3OXWJ3CZ.cjs.map} +1 -1
- package/dist/chunk-AF6RDAJF.js +14 -0
- package/dist/chunk-AF6RDAJF.js.map +1 -0
- package/dist/chunk-AOFATOT3.cjs +196 -0
- package/dist/chunk-AOFATOT3.cjs.map +1 -0
- package/dist/{chunk-NYBIKDWI.cjs → chunk-CKYA2IG5.cjs} +11 -5
- package/dist/chunk-CKYA2IG5.cjs.map +1 -0
- package/dist/chunk-D3QPYKZG.js +173 -0
- package/dist/chunk-D3QPYKZG.js.map +1 -0
- package/dist/{chunk-3WW32OUU.cjs → chunk-DCZGYCN2.cjs} +4 -4
- package/dist/{chunk-3WW32OUU.cjs.map → chunk-DCZGYCN2.cjs.map} +1 -1
- package/dist/{chunk-2ZDFVRGV.cjs → chunk-E2AAIMXO.cjs} +975 -61
- package/dist/chunk-E2AAIMXO.cjs.map +1 -0
- package/dist/{chunk-EWSEQEPL.js → chunk-EJAYB7PP.js} +4 -4
- package/dist/{chunk-EWSEQEPL.js.map → chunk-EJAYB7PP.js.map} +1 -1
- package/dist/{chunk-UO74FLRK.js → chunk-EOEDGJ75.js} +22 -53
- package/dist/chunk-EOEDGJ75.js.map +1 -0
- package/dist/{chunk-XMBYDLZQ.cjs → chunk-GNHOB2ZB.cjs} +4 -4
- package/dist/{chunk-XMBYDLZQ.cjs.map → chunk-GNHOB2ZB.cjs.map} +1 -1
- package/dist/{chunk-SF4BDUZS.js → chunk-HUFLBZWI.js} +3 -3
- package/dist/{chunk-SF4BDUZS.js.map → chunk-HUFLBZWI.js.map} +1 -1
- package/dist/{chunk-B4SRYJLM.cjs → chunk-KBPHLW2R.cjs} +3 -3
- package/dist/{chunk-B4SRYJLM.cjs.map → chunk-KBPHLW2R.cjs.map} +1 -1
- package/dist/{chunk-IF6VAYIA.cjs → chunk-OYMYNYFV.cjs} +5 -5
- package/dist/{chunk-IF6VAYIA.cjs.map → chunk-OYMYNYFV.cjs.map} +1 -1
- package/dist/{chunk-ICBAFX5B.js → chunk-PDEHIGJ5.js} +3 -3
- package/dist/{chunk-ICBAFX5B.js.map → chunk-PDEHIGJ5.js.map} +1 -1
- package/dist/{chunk-SJVUKXS6.js → chunk-QQH2NI5U.js} +6 -6
- package/dist/{chunk-SJVUKXS6.js.map → chunk-QQH2NI5U.js.map} +1 -1
- package/dist/chunk-RC25WMVB.cjs +16 -0
- package/dist/chunk-RC25WMVB.cjs.map +1 -0
- package/dist/{chunk-YFPIJUV3.cjs → chunk-RZGVMV6B.cjs} +5 -5
- package/dist/{chunk-YFPIJUV3.cjs.map → chunk-RZGVMV6B.cjs.map} +1 -1
- package/dist/{chunk-AMC5PMJ3.cjs → chunk-TOVSTC2M.cjs} +36 -68
- package/dist/chunk-TOVSTC2M.cjs.map +1 -0
- package/dist/{chunk-R3PDNQYT.js → chunk-UMY6Y6BM.js} +11 -5
- package/dist/chunk-UMY6Y6BM.js.map +1 -0
- package/dist/{chunk-MROSCSPW.cjs → chunk-VQ65UHTV.cjs} +45 -45
- package/dist/{chunk-MROSCSPW.cjs.map → chunk-VQ65UHTV.cjs.map} +1 -1
- package/dist/{chunk-MP6FK43E.cjs → chunk-VYKMBLDX.cjs} +8 -8
- package/dist/{chunk-MP6FK43E.cjs.map → chunk-VYKMBLDX.cjs.map} +1 -1
- package/dist/{chunk-W2R7YVFM.js → chunk-WXLKMEMB.js} +970 -65
- package/dist/chunk-WXLKMEMB.js.map +1 -0
- package/dist/{chunk-XQDM6T6C.js → chunk-YG7DGGCA.js} +3 -3
- package/dist/{chunk-XQDM6T6C.js.map → chunk-YG7DGGCA.js.map} +1 -1
- package/dist/{chunk-BX62HJZU.js → chunk-YPKSLTL5.js} +3 -3
- package/dist/{chunk-BX62HJZU.js.map → chunk-YPKSLTL5.js.map} +1 -1
- package/dist/{chunk-UDLMLU6T.js → chunk-ZNDAXSDP.js} +3 -3
- package/dist/{chunk-UDLMLU6T.js.map → chunk-ZNDAXSDP.js.map} +1 -1
- package/dist/connect/docx.cjs +8 -6
- package/dist/connect/docx.cjs.map +1 -1
- package/dist/connect/docx.js +6 -4
- package/dist/connect/docx.js.map +1 -1
- package/dist/connect/index.cjs +47 -45
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +16 -14
- package/dist/connect/index.js.map +1 -1
- package/dist/docx/NativeDocxEditor.d.ts +6 -0
- package/dist/docx/definitions/DefinedTerms.d.ts +50 -0
- package/dist/docx/definitions/commands.d.ts +78 -0
- package/dist/docx/definitions/fragment.d.ts +29 -0
- package/dist/docx/definitions/port.d.ts +76 -0
- package/dist/docx/index.cjs +53 -15
- package/dist/docx/index.cjs.map +1 -1
- package/dist/docx/index.d.ts +3 -0
- package/dist/docx/index.js +5 -3
- package/dist/docx/index.js.map +1 -1
- package/dist/facts/index.cjs +7 -12
- package/dist/facts/index.cjs.map +1 -1
- package/dist/facts/index.js +3 -10
- package/dist/facts/index.js.map +1 -1
- package/dist/home/CreateTile.d.ts +3 -1
- package/dist/home/index.cjs +10 -4
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +10 -4
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +1207 -1067
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +102 -15
- package/dist/index.js.map +1 -1
- package/dist/settings/PanelFrame.d.ts +3 -1
- package/dist/settings/index.cjs +12 -4
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.js +12 -4
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/Workspace.d.ts +6 -1
- package/dist/shell/index.cjs +67 -67
- package/dist/shell/index.js +3 -3
- package/dist/studio/index.cjs +7 -7
- package/dist/studio/index.js +6 -6
- package/dist/tags/definitions.d.ts +92 -0
- package/dist/tags/glossary.d.ts +44 -0
- package/dist/tags/index.d.ts +2 -0
- package/dist/tags/ooxml.d.ts +46 -0
- package/dist/tags/tagTableDocx.d.ts +1 -1
- package/dist/workflow-canvas/index.cjs +49 -49
- package/dist/workflow-canvas/index.js +6 -6
- package/package.json +4 -4
- package/src/docx/README.md +11 -0
- package/dist/chunk-2ZDFVRGV.cjs.map +0 -1
- package/dist/chunk-AMC5PMJ3.cjs.map +0 -1
- package/dist/chunk-NYBIKDWI.cjs.map +0 -1
- package/dist/chunk-R3PDNQYT.js.map +0 -1
- package/dist/chunk-UO74FLRK.js.map +0 -1
- package/dist/chunk-W2R7YVFM.js.map +0 -1
package/dist/chat/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { AssistantToaster, BranchControls, ComposerAccessories, ComposerTools, ContextActionButton, ContextCheckRow, ContextPanelContent, ContextPanelFooter, ContextPanelTabs, ContextPickerList, ContextPickerRow, ContextSearchInput, ContextSelectList, ContextSelectRow, Conversation, ConversationBody, ConversationHeader, ConversationHeaderActions, ConversationHistoryPane, ConversationLoading, ConversationMain, ConversationRoot, ConversationSearchView, ConversationSettingsButton, DEFAULT_BRANCH_CONTROLS_LABELS, DEFAULT_CONVERSATION_LAYOUT_LABELS, DEFAULT_CONVERSATION_PARTS_LABELS, DEFAULT_CONVERSATION_SEARCH_LABELS, DEFAULT_LABEL_PIN_ROW_LABELS, DEFAULT_MODEL_PRICING_TIP_LABELS, DEFAULT_PENDING_ANSWER_BAR_LABELS, DEFAULT_PINNED_DOC_CHIP_LABELS, DEFAULT_SLASH_MENU_LABELS, DEFAULT_THREAD_MAP_LABELS, LabelPinRow, ModelAutoIcon, ModelConfigureButton, ModelDot, ModelMenuDivider, ModelMenuMessage, ModelOption, ModelOptionLabel, ModelPickerPopover, ModelPickerTrigger, ModelPricingTip, ModelTierIcon, ModelTierOption, ModelTriggerContent, NewChatButton, NewPaChatButton, PaModeBadge, PendingAnswerBar, PinnedDocChip, SlashMenu, ThreadMap, ThreadMapDiagram, ThreadMapError, ThreadMapLoading, getParticipantTints, hasMessageBody, isLongPastedText, useDismissibleCard, useLongPaste, useRecipientDraft } from '../chunk-
|
|
2
|
+
export { AssistantToaster, BranchControls, ComposerAccessories, ComposerTools, ContextActionButton, ContextCheckRow, ContextPanelContent, ContextPanelFooter, ContextPanelTabs, ContextPickerList, ContextPickerRow, ContextSearchInput, ContextSelectList, ContextSelectRow, Conversation, ConversationBody, ConversationHeader, ConversationHeaderActions, ConversationHistoryPane, ConversationLoading, ConversationMain, ConversationRoot, ConversationSearchView, ConversationSettingsButton, DEFAULT_BRANCH_CONTROLS_LABELS, DEFAULT_CONVERSATION_LAYOUT_LABELS, DEFAULT_CONVERSATION_PARTS_LABELS, DEFAULT_CONVERSATION_SEARCH_LABELS, DEFAULT_LABEL_PIN_ROW_LABELS, DEFAULT_MODEL_PRICING_TIP_LABELS, DEFAULT_PENDING_ANSWER_BAR_LABELS, DEFAULT_PINNED_DOC_CHIP_LABELS, DEFAULT_SLASH_MENU_LABELS, DEFAULT_THREAD_MAP_LABELS, LabelPinRow, ModelAutoIcon, ModelConfigureButton, ModelDot, ModelMenuDivider, ModelMenuMessage, ModelOption, ModelOptionLabel, ModelPickerPopover, ModelPickerTrigger, ModelPricingTip, ModelTierIcon, ModelTierOption, ModelTriggerContent, NewChatButton, NewPaChatButton, PaModeBadge, PendingAnswerBar, PinnedDocChip, SlashMenu, ThreadMap, ThreadMapDiagram, ThreadMapError, ThreadMapLoading, getParticipantTints, hasMessageBody, isLongPastedText, useDismissibleCard, useLongPaste, useRecipientDraft } from '../chunk-PDEHIGJ5.js';
|
|
3
3
|
import '../chunk-BV7FEMSI.js';
|
|
4
|
-
export { AssistantDock, AssistantDockToggle, AssistantModeToggle, ChatDocuments, ChatMessageContent, ChatPage, ChatThreadList, ChatThreadSelect, CitationMark, Composer, ComposerBranchingNotice, ComposerContainer, ComposerDock, ComposerFrame, ComposerInput, ComposerRoot, ComposerSend, ComposerToolbar, ComposerVoiceButton, ContextChip, ConversationEmpty, DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS, DEFAULT_CHAT_PAGE_LABELS, DEFAULT_COMPOSER_LABELS, DEFAULT_CONVERSATION_EMPTY_LABELS, DEFAULT_MESSAGE_ALERT_LABELS, DEFAULT_MESSAGE_LABELS, DEFAULT_MESSAGE_LIST_LABELS, DEFAULT_WORKFLOW_STEP_CHIP_LABELS, Message, MessageActionButton, MessageActionMenu, MessageAlert, MessageBody, MessageBubble, MessageByline, MessageContent, MessageFooter, MessageList, MessageListBanner, MessageListEmpty, MessageListRoot, MessageListRow, MessageListRows, MessageListStatus, MessageListTail, MessageNarration, MessageRoot, MessageSources, MessageSubagentBadge, ScrollToBottom, SourceChip, WorkflowStepChip, toSpeakableText, useAssistantDock, useChatSurface, useRegisterEmbeddedChat, useStreamAnnouncement } from '../chunk-
|
|
4
|
+
export { AssistantDock, AssistantDockToggle, AssistantModeToggle, ChatDocuments, ChatMessageContent, ChatPage, ChatThreadList, ChatThreadSelect, CitationMark, Composer, ComposerBranchingNotice, ComposerContainer, ComposerDock, ComposerFrame, ComposerInput, ComposerRoot, ComposerSend, ComposerToolbar, ComposerVoiceButton, ContextChip, ConversationEmpty, DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS, DEFAULT_CHAT_PAGE_LABELS, DEFAULT_COMPOSER_LABELS, DEFAULT_CONVERSATION_EMPTY_LABELS, DEFAULT_MESSAGE_ALERT_LABELS, DEFAULT_MESSAGE_LABELS, DEFAULT_MESSAGE_LIST_LABELS, DEFAULT_WORKFLOW_STEP_CHIP_LABELS, Message, MessageActionButton, MessageActionMenu, MessageAlert, MessageBody, MessageBubble, MessageByline, MessageContent, MessageFooter, MessageList, MessageListBanner, MessageListEmpty, MessageListRoot, MessageListRow, MessageListRows, MessageListStatus, MessageListTail, MessageNarration, MessageRoot, MessageSources, MessageSubagentBadge, ScrollToBottom, SourceChip, WorkflowStepChip, toSpeakableText, useAssistantDock, useChatSurface, useRegisterEmbeddedChat, useStreamAnnouncement } from '../chunk-EJAYB7PP.js';
|
|
5
5
|
import '../chunk-KZJAG7T3.js';
|
|
6
|
-
export { useMentionAutocomplete } from '../chunk-
|
|
7
|
-
export { DEFAULT_MENTION_LABELS, MENTION_HREF_PREFIX, MentionChip, MentionMenu, extractMentions, filterMentionCandidates, findMentionQuery, insertMention, linkMentions, mentionFromHref, toMessageMentions, useListKeyNav } from '../chunk-AA3PT6KR.js';
|
|
6
|
+
export { useMentionAutocomplete } from '../chunk-24CS7JWU.js';
|
|
8
7
|
import '../chunk-NPLYHR2E.js';
|
|
9
8
|
import '../chunk-OXF2IFXG.js';
|
|
10
9
|
import '../chunk-SLSBJRWW.js';
|
|
10
|
+
export { DEFAULT_MENTION_LABELS, MENTION_HREF_PREFIX, MentionChip, MentionMenu, extractMentions, filterMentionCandidates, findMentionQuery, insertMention, linkMentions, mentionFromHref, toMessageMentions, useListKeyNav } from '../chunk-AA3PT6KR.js';
|
|
11
11
|
import '../chunk-7F6CBP3Z.js';
|
|
12
12
|
import '../chunk-VUNV25KB.js';
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { findMentionQuery, filterMentionCandidates, insertMention, useListKeyNav } from './chunk-AA3PT6KR.js';
|
|
3
2
|
import { observeResize } from './chunk-NPLYHR2E.js';
|
|
3
|
+
import { findMentionQuery, filterMentionCandidates, insertMention, useListKeyNav } from './chunk-AA3PT6KR.js';
|
|
4
4
|
import { useState, useEffect, useMemo, useCallback, useLayoutEffect } from 'react';
|
|
5
5
|
|
|
6
6
|
function useMentionAutocomplete({
|
|
@@ -99,5 +99,5 @@ function rootFontSizePx() {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
export { rootFontSizePx, useElementSize, useMentionAutocomplete };
|
|
102
|
-
//# sourceMappingURL=chunk-
|
|
103
|
-
//# sourceMappingURL=chunk-
|
|
102
|
+
//# sourceMappingURL=chunk-24CS7JWU.js.map
|
|
103
|
+
//# sourceMappingURL=chunk-24CS7JWU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chat/useMentionAutocomplete.ts","../src/lib/useElementSize.ts"],"names":["useState"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/chat/useMentionAutocomplete.ts","../src/lib/useElementSize.ts"],"names":["useState"],"mappings":"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","file":"chunk-24CS7JWU.js","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,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkE2AAIMXO_cjs = require('./chunk-E2AAIMXO.cjs');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
|
|
7
7
|
function StreamedWordArtifact({
|
|
@@ -15,7 +15,7 @@ function StreamedWordArtifact({
|
|
|
15
15
|
}) {
|
|
16
16
|
if (!busy && documentId) {
|
|
17
17
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
18
|
-
|
|
18
|
+
chunkE2AAIMXO_cjs.NativeDocxEditor,
|
|
19
19
|
{
|
|
20
20
|
adapter,
|
|
21
21
|
documentId,
|
|
@@ -26,7 +26,7 @@ function StreamedWordArtifact({
|
|
|
26
26
|
);
|
|
27
27
|
}
|
|
28
28
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
29
|
-
|
|
29
|
+
chunkE2AAIMXO_cjs.NativeDocxEditor,
|
|
30
30
|
{
|
|
31
31
|
adapter,
|
|
32
32
|
documentId: "stream-preview",
|
|
@@ -39,5 +39,5 @@ function StreamedWordArtifact({
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
exports.StreamedWordArtifact = StreamedWordArtifact;
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
42
|
+
//# sourceMappingURL=chunk-3OXWJ3CZ.cjs.map
|
|
43
|
+
//# sourceMappingURL=chunk-3OXWJ3CZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/docx/StreamedWordArtifact.tsx"],"names":["jsx","NativeDocxEditor"],"mappings":";;;;;AAmBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,IAAA,uBACEA,cAAA;AAAA,MAACC,kCAAA;AAAA,MAAA;AAAA,QAEC,OAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAJK;AAAA,KAKP;AAAA,EAEJ;AACA,EAAA,uBACED,cAAA;AAAA,IAACC,kCAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA,EAAW,gBAAA;AAAA,MACX,KAAA;AAAA,MACA,YAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA;AAAM,KAAA;AAAA,IAL3B;AAAA,GAMN;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/docx/StreamedWordArtifact.tsx"],"names":["jsx","NativeDocxEditor"],"mappings":";;;;;AAmBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,IAAA,uBACEA,cAAA;AAAA,MAACC,kCAAA;AAAA,MAAA;AAAA,QAEC,OAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAJK;AAAA,KAKP;AAAA,EAEJ;AACA,EAAA,uBACED,cAAA;AAAA,IAACC,kCAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,UAAA,EAAW,gBAAA;AAAA,MACX,KAAA;AAAA,MACA,YAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA;AAAM,KAAA;AAAA,IAL3B;AAAA,GAMN;AAEJ","file":"chunk-3OXWJ3CZ.cjs","sourcesContent":["import { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface StreamedWordArtifactProps {\n adapter: NativeDocxAdapter\n /** Streamed Markdown, shown as a read-only preview while the draft is generated. */\n content: string\n title: string\n busy: boolean\n error?: string | null\n /** The DOCX draft the server stored for this generation (`doc-…`), once known. */\n documentId?: string\n onSaved?: (documentId: string) => void\n}\n\n/**\n * One drafting surface for an AI document draft. The server stores every draft as DOCX, so\n * this component never creates a document: it previews the streamed Markdown until generation\n * ends and the stored DOCX is known, then opens that DOCX in the live collaborative editor.\n */\nexport function StreamedWordArtifact({\n adapter,\n content,\n title,\n busy,\n error,\n documentId,\n onSaved,\n}: StreamedWordArtifactProps) {\n if (!busy && documentId) {\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={title}\n onSaved={onSaved}\n />\n )\n }\n return (\n <NativeDocxEditor\n key=\"stream-preview\"\n adapter={adapter}\n documentId=\"stream-preview\"\n title={title}\n draftContent=\"\"\n stream={{ content, busy, error }}\n />\n )\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
// src/facts/fact-text.ts
|
|
3
|
+
var WHITESPACE_CODE_POINTS = /* @__PURE__ */ new Set([32, 9, 160]);
|
|
4
|
+
function decodeWhitespaceEntities(text) {
|
|
5
|
+
if (!text) return "";
|
|
6
|
+
return text.replace(/&#x([0-9a-f]+);|&#(\d+);/gi, (match, hex, dec) => {
|
|
7
|
+
const code = hex ? parseInt(hex, 16) : parseInt(dec, 10);
|
|
8
|
+
return WHITESPACE_CODE_POINTS.has(code) ? String.fromCodePoint(code) : match;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { decodeWhitespaceEntities };
|
|
13
|
+
//# sourceMappingURL=chunk-AF6RDAJF.js.map
|
|
14
|
+
//# sourceMappingURL=chunk-AF6RDAJF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/facts/fact-text.ts"],"names":[],"mappings":";AAiBA,IAAM,yCAAyB,IAAI,GAAA,CAAI,CAAC,EAAA,EAAM,CAAA,EAAM,GAAI,CAAC,CAAA;AAElD,SAAS,yBAAyB,IAAA,EAAyC;AAChF,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,OAAO,KAAK,OAAA,CAAQ,4BAAA,EAA8B,CAAC,KAAA,EAAO,KAAa,GAAA,KAAgB;AACrF,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA,GAAI,QAAA,CAAS,KAAK,EAAE,CAAA;AACvD,IAAA,OAAO,uBAAuB,GAAA,CAAI,IAAI,IAAI,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA,GAAI,KAAA;AAAA,EACzE,CAAC,CAAA;AACH","file":"chunk-AF6RDAJF.js","sourcesContent":["/**\n * A fact's text is written in the rich markdown editor, which encodes\n * otherwise-insignificant whitespace as HTML character references so it survives\n * markdown's round-trip — a trailing space becomes ` `, a tab `	`, and\n * so on. The editor decodes them back when it re-renders, but anything that\n * shows the raw text (the grid cell, its tooltip) prints the reference verbatim,\n * so a fact reads like `This is a fact. ` instead of `This is a fact.`.\n *\n * {@link decodeWhitespaceEntities} turns those references back into the\n * characters they stand for. Only WHITESPACE code points are decoded, so the\n * result is safe both to store as markdown (an escaped `*` or `<` is never\n * turned back into active syntax) and to show as plain text.\n */\n\n// Horizontal whitespace the editor emits as an entity: space, tab, no-break\n// space. Newline/CR are deliberately left alone — decoding them could change a\n// stored fact's block structure.\nconst WHITESPACE_CODE_POINTS = new Set([0x20, 0x09, 0xa0])\n\nexport function decodeWhitespaceEntities(text: string | null | undefined): string {\n if (!text) return ''\n return text.replace(/&#x([0-9a-f]+);|&#(\\d+);/gi, (match, hex: string, dec: string) => {\n const code = hex ? parseInt(hex, 16) : parseInt(dec, 10)\n return WHITESPACE_CODE_POINTS.has(code) ? String.fromCodePoint(code) : match\n })\n}\n"]}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkRC25WMVB_cjs = require('./chunk-RC25WMVB.cjs');
|
|
5
|
+
var fflate = require('fflate');
|
|
6
|
+
|
|
7
|
+
// src/tags/definitions.ts
|
|
8
|
+
var DEFINITIONS_LABEL = "Definitions";
|
|
9
|
+
var QUOTES = `"\u201C\u201D\u201E\u201F'\u2018\u2019\u201A\u201B\xAB\xBB`;
|
|
10
|
+
var OPEN_CLOSE = {
|
|
11
|
+
'"': '"',
|
|
12
|
+
"\u201C": "\u201D",
|
|
13
|
+
"\u201E": "\u201C",
|
|
14
|
+
"\u201F": "\u201D",
|
|
15
|
+
"'": "'",
|
|
16
|
+
"\u2018": "\u2019",
|
|
17
|
+
"\u201A": "\u2018",
|
|
18
|
+
"\u201B": "\u2019",
|
|
19
|
+
"\xAB": "\xBB"
|
|
20
|
+
};
|
|
21
|
+
var EMPHASIS = /^(\*\*|__|\*|_)/;
|
|
22
|
+
var CONNECTORS = /^(?:shall\s+(?:have\s+the\s+meaning|mean|include)s?|ha(?:s|ve)\s+the\s+meanings?|means?\s+and\s+includes?|means|mean|includes|include|[:—–]|\s-\s|-\s)/i;
|
|
23
|
+
var MAX_TERM_LENGTH = 80;
|
|
24
|
+
var MAX_TERM_WORDS = 10;
|
|
25
|
+
function plain(text) {
|
|
26
|
+
return chunkRC25WMVB_cjs.decodeWhitespaceEntities(text).replace(/\\([\\`*_{}[\]()#+\-.!"'])/g, "$1").replace(/(\*\*|__)(.+?)\1/g, "$2").replace(/\s+/g, " ").trim();
|
|
27
|
+
}
|
|
28
|
+
function termKey(term) {
|
|
29
|
+
return plain(term).replace(new RegExp(`[${QUOTES}*_]`, "g"), "").replace(/\s+/g, " ").trim().toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
var validTerm = (term) => term.length > 0 && term.length <= MAX_TERM_LENGTH && term.split(/\s+/).length <= MAX_TERM_WORDS && /\p{L}/u.test(term);
|
|
32
|
+
function connectorAt(rest) {
|
|
33
|
+
const lead = rest.length - rest.trimStart().length;
|
|
34
|
+
const spaced = /^\s-\s/.exec(rest);
|
|
35
|
+
if (spaced) return spaced[0].length;
|
|
36
|
+
const match = CONNECTORS.exec(rest.slice(lead));
|
|
37
|
+
return match ? lead + match[0].length : 0;
|
|
38
|
+
}
|
|
39
|
+
function parseDefinition(text) {
|
|
40
|
+
let s = plain(text);
|
|
41
|
+
for (let i = 0; i < 3; i++) s = s.replace(EMPHASIS, "").trimStart();
|
|
42
|
+
let term;
|
|
43
|
+
let rest;
|
|
44
|
+
const open = s[0];
|
|
45
|
+
const close = open ? OPEN_CLOSE[open] : void 0;
|
|
46
|
+
if (close) {
|
|
47
|
+
const end = s.indexOf(close, 1);
|
|
48
|
+
if (end < 0) return null;
|
|
49
|
+
term = s.slice(1, end);
|
|
50
|
+
rest = s.slice(end + 1);
|
|
51
|
+
rest = rest.replace(new RegExp(`^(?:\\*\\*|__|\\*|_|[${QUOTES}])+`), "");
|
|
52
|
+
} else {
|
|
53
|
+
const match = /^(.+?)(\s+(?:shall\s+(?:have\s+the\s+meaning|mean|include)s?|ha(?:s|ve)\s+the\s+meanings?|means?\s+and\s+includes?|means|includes)\b|\s*[:—–]|\s+-\s)/i.exec(
|
|
54
|
+
s
|
|
55
|
+
);
|
|
56
|
+
if (!match) return null;
|
|
57
|
+
term = match[1];
|
|
58
|
+
rest = s.slice(match[1].length);
|
|
59
|
+
}
|
|
60
|
+
term = term.replace(/(\*\*|__|\*|_)/g, "").trim();
|
|
61
|
+
const joint = connectorAt(rest);
|
|
62
|
+
if (!joint || !validTerm(term)) return null;
|
|
63
|
+
const meaning = rest.slice(joint).trim();
|
|
64
|
+
if (!meaning) return null;
|
|
65
|
+
return { term, rest: rest.replace(/^\s+/, " ").replace(/^ (?=[:—–])/, ""), meaning };
|
|
66
|
+
}
|
|
67
|
+
function toDefinition(source) {
|
|
68
|
+
const parsed = parseDefinition(source.text);
|
|
69
|
+
return parsed ? { ...source, ...parsed, key: termKey(parsed.term) } : null;
|
|
70
|
+
}
|
|
71
|
+
var time = (iso) => iso ? Date.parse(iso) || 0 : 0;
|
|
72
|
+
function compareDefinitions(a, b) {
|
|
73
|
+
return Number(!!b.confirmed) - Number(!!a.confirmed) || time(b.updatedAt) - time(a.updatedAt) || a.id.localeCompare(b.id);
|
|
74
|
+
}
|
|
75
|
+
var compareTerms = (a, b) => a.localeCompare(b, void 0, { sensitivity: "base", numeric: true });
|
|
76
|
+
function groupDefinitions(sources, options = {}) {
|
|
77
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
78
|
+
const unparsed = [];
|
|
79
|
+
for (const source of sources) {
|
|
80
|
+
if (options.labelId && !source.labels?.some((l) => l.id === options.labelId)) continue;
|
|
81
|
+
const definition = toDefinition(source);
|
|
82
|
+
if (!definition) {
|
|
83
|
+
unparsed.push(source);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const list = byKey.get(definition.key) ?? [];
|
|
87
|
+
list.push(definition);
|
|
88
|
+
byKey.set(definition.key, list);
|
|
89
|
+
}
|
|
90
|
+
const groups = [...byKey.entries()].map(([key, list]) => {
|
|
91
|
+
const definitions = [...list].sort(compareDefinitions);
|
|
92
|
+
return { key, term: definitions[0].term, preferred: definitions[0], definitions };
|
|
93
|
+
});
|
|
94
|
+
groups.sort((a, b) => compareTerms(a.term, b.term));
|
|
95
|
+
return { groups, unparsed };
|
|
96
|
+
}
|
|
97
|
+
function definitionLabels(sources) {
|
|
98
|
+
const byId = /* @__PURE__ */ new Map();
|
|
99
|
+
for (const s of sources) for (const l of s.labels ?? []) byId.set(l.id, l);
|
|
100
|
+
return [...byId.values()].sort((a, b) => compareTerms(a.name, b.name));
|
|
101
|
+
}
|
|
102
|
+
function filterTermGroups(groups, query) {
|
|
103
|
+
const q = termKey(query);
|
|
104
|
+
if (!q) return [...groups];
|
|
105
|
+
const rank = (g) => g.key.startsWith(q) ? 0 : g.key.split(" ").some((w) => w.startsWith(q)) ? 1 : 2;
|
|
106
|
+
return groups.filter((g) => g.key.includes(q)).map((g) => ({ g, r: rank(g) })).sort((a, b) => a.r - b.r || compareTerms(a.g.term, b.g.term)).map(({ g }) => g);
|
|
107
|
+
}
|
|
108
|
+
var DEFINITION_BOOKMARK_PREFIX = "_dt_";
|
|
109
|
+
var MAX_BOOKMARK_LENGTH = 40;
|
|
110
|
+
function definitionBookmark(factId) {
|
|
111
|
+
return (DEFINITION_BOOKMARK_PREFIX + factId.replace(/[^A-Za-z0-9_]/g, "_")).slice(
|
|
112
|
+
0,
|
|
113
|
+
MAX_BOOKMARK_LENGTH
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
function definitionIdOfBookmark(name) {
|
|
117
|
+
const match = /^_dt_([a-z]{3})_([A-Za-z0-9]+)$/.exec(name);
|
|
118
|
+
return match ? `${match[1]}-${match[2]}` : null;
|
|
119
|
+
}
|
|
120
|
+
var DOCX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
121
|
+
var W_NAMESPACES = 'xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"';
|
|
122
|
+
var INVALID_XML = /[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g;
|
|
123
|
+
var esc = (text) => text.replace(INVALID_XML, "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
124
|
+
var run = ({ text, bold, italic, muted }) => {
|
|
125
|
+
const props = [bold && "<w:b/>", italic && "<w:i/>", muted && '<w:color w:val="595959"/>'].filter(Boolean).join("");
|
|
126
|
+
const body = text.split(/\r?\n/).map((line) => `<w:t xml:space="preserve">${esc(line)}</w:t>`).join("<w:br/>");
|
|
127
|
+
return `<w:r>${props ? `<w:rPr>${props}</w:rPr>` : ""}${body}</w:r>`;
|
|
128
|
+
};
|
|
129
|
+
var paragraph = (runs, style) => `<w:p>${style ? `<w:pPr><w:pStyle w:val="${style}"/></w:pPr>` : ""}${runs.map(run).join("")}</w:p>`;
|
|
130
|
+
var cell = (paragraphs, width, fill) => `<w:tc><w:tcPr><w:tcW w:w="${width}" w:type="dxa"/>${fill ? `<w:shd w:val="clear" w:color="auto" w:fill="${fill}"/>` : ""}</w:tcPr>${paragraphs.length ? paragraphs.join("") : "<w:p/>"}</w:tc>`;
|
|
131
|
+
function page(landscape) {
|
|
132
|
+
const [short, long] = [11906, 16838];
|
|
133
|
+
const margin = landscape ? 1080 : 1440;
|
|
134
|
+
const width = landscape ? long : short;
|
|
135
|
+
return {
|
|
136
|
+
margin,
|
|
137
|
+
textWidth: width - 2 * margin,
|
|
138
|
+
sectPr: `<w:sectPr><w:pgSz w:w="${landscape ? long : short}" w:h="${landscape ? short : long}"${landscape ? ' w:orient="landscape"' : ""}/><w:pgMar w:top="${margin}" w:right="${margin}" w:bottom="${margin}" w:left="${margin}" w:header="708" w:footer="708" w:gutter="0"/></w:sectPr>`
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
var minuteUtc = (at) => new Date(at).toISOString().slice(0, 16).replace("T", " ");
|
|
142
|
+
var documentXml = (body) => `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
143
|
+
<w:document ${W_NAMESPACES}><w:body>${body}</w:body></w:document>`;
|
|
144
|
+
var stylesXml = (defaults, styles) => `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
145
|
+
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">${defaults}${styles}</w:styles>`;
|
|
146
|
+
var DOC_DEFAULTS = `<w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" w:eastAsia="Calibri" w:cs="Calibri"/><w:sz w:val="22"/><w:szCs w:val="22"/><w:lang w:val="en-GB"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after="160" w:line="259" w:lineRule="auto"/></w:pPr></w:pPrDefault></w:docDefaults>`;
|
|
147
|
+
var TABLE_DOCUMENT_STYLES = stylesXml(
|
|
148
|
+
DOC_DEFAULTS,
|
|
149
|
+
`<w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/></w:style><w:style w:type="paragraph" w:styleId="Title"><w:name w:val="Title"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:qFormat/><w:pPr><w:spacing w:after="80" w:line="240" w:lineRule="auto"/></w:pPr><w:rPr><w:sz w:val="48"/><w:szCs w:val="48"/></w:rPr></w:style><w:style w:type="paragraph" w:customStyle="1" w:styleId="TagTableCell"><w:name w:val="Tag Table Cell"/><w:basedOn w:val="Normal"/><w:qFormat/><w:pPr><w:spacing w:after="40" w:line="240" w:lineRule="auto"/></w:pPr><w:rPr><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:style><w:style w:type="table" w:default="1" w:styleId="TableNormal"><w:name w:val="Normal Table"/><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="table" w:customStyle="1" w:styleId="TagTableGrid"><w:name w:val="Tag Table"/><w:basedOn w:val="TableNormal"/><w:tblPr><w:tblBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:left w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:right w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:insideH w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/><w:insideV w:val="single" w:sz="4" w:space="0" w:color="BFBFBF"/></w:tblBorders><w:tblCellMar><w:top w:w="60" w:type="dxa"/><w:left w:w="100" w:type="dxa"/><w:bottom w:w="60" w:type="dxa"/><w:right w:w="100" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style>`
|
|
150
|
+
);
|
|
151
|
+
var CONTENT_TYPES = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
152
|
+
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/><Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/></Types>`;
|
|
153
|
+
var ROOT_RELS = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
154
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/></Relationships>`;
|
|
155
|
+
var DOCUMENT_RELS = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
156
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>`;
|
|
157
|
+
var coreXml = (title, at) => `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
158
|
+
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>${esc(
|
|
159
|
+
title
|
|
160
|
+
)}</dc:title><dcterms:created xsi:type="dcterms:W3CDTF">${at}</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">${at}</dcterms:modified></cp:coreProperties>`;
|
|
161
|
+
function docxPackage(parts) {
|
|
162
|
+
const at = new Date(parts.at ?? Date.now()).toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
163
|
+
return fflate.zipSync({
|
|
164
|
+
"[Content_Types].xml": fflate.strToU8(CONTENT_TYPES),
|
|
165
|
+
"_rels/.rels": fflate.strToU8(ROOT_RELS),
|
|
166
|
+
"docProps/core.xml": fflate.strToU8(coreXml(parts.title, at)),
|
|
167
|
+
"word/document.xml": fflate.strToU8(parts.document),
|
|
168
|
+
"word/styles.xml": fflate.strToU8(parts.styles),
|
|
169
|
+
"word/_rels/document.xml.rels": fflate.strToU8(DOCUMENT_RELS)
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
exports.DEFINITIONS_LABEL = DEFINITIONS_LABEL;
|
|
174
|
+
exports.DEFINITION_BOOKMARK_PREFIX = DEFINITION_BOOKMARK_PREFIX;
|
|
175
|
+
exports.DOCX_MIME_TYPE = DOCX_MIME_TYPE;
|
|
176
|
+
exports.TABLE_DOCUMENT_STYLES = TABLE_DOCUMENT_STYLES;
|
|
177
|
+
exports.cell = cell;
|
|
178
|
+
exports.compareDefinitions = compareDefinitions;
|
|
179
|
+
exports.compareTerms = compareTerms;
|
|
180
|
+
exports.definitionBookmark = definitionBookmark;
|
|
181
|
+
exports.definitionIdOfBookmark = definitionIdOfBookmark;
|
|
182
|
+
exports.definitionLabels = definitionLabels;
|
|
183
|
+
exports.documentXml = documentXml;
|
|
184
|
+
exports.docxPackage = docxPackage;
|
|
185
|
+
exports.esc = esc;
|
|
186
|
+
exports.filterTermGroups = filterTermGroups;
|
|
187
|
+
exports.groupDefinitions = groupDefinitions;
|
|
188
|
+
exports.minuteUtc = minuteUtc;
|
|
189
|
+
exports.page = page;
|
|
190
|
+
exports.paragraph = paragraph;
|
|
191
|
+
exports.parseDefinition = parseDefinition;
|
|
192
|
+
exports.stylesXml = stylesXml;
|
|
193
|
+
exports.termKey = termKey;
|
|
194
|
+
exports.toDefinition = toDefinition;
|
|
195
|
+
//# sourceMappingURL=chunk-AOFATOT3.cjs.map
|
|
196
|
+
//# sourceMappingURL=chunk-AOFATOT3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tags/definitions.ts","../src/tags/ooxml.ts"],"names":["decodeWhitespaceEntities","zipSync","strToU8"],"mappings":"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","file":"chunk-AOFATOT3.cjs","sourcesContent":["/**\n * Defined terms. A definition is an ordinary fact carrying the workspace's \"Definitions\" label; its\n * TERM is read from the start of its text — `\"Shares\" means …`, `**Business Day** shall mean …`,\n * `Completion: the date …` — and facts defining the same term (one per agreement, say) are grouped,\n * a confirmed one preferred over the rest, then the most recent. Pure helpers, no React: the Word\n * editor inserts terms with them and the Tags page prints the glossary with them.\n */\n\nimport { decodeWhitespaceEntities } from '../facts/fact-text'\n\n/** The label that marks a fact as a definition. */\nexport const DEFINITIONS_LABEL = 'Definitions'\n\n/** A label on a definition other than {@link DEFINITIONS_LABEL} (e.g. the agreement it is from). */\nexport interface DefinitionLabel {\n id: string\n name: string\n}\n\n/** A definition fact, as the host reads it. */\nexport interface DefinitionSource {\n /** The fact's id (`fct-…`). */\n id: string\n /** The fact text, as written (it may be Markdown). */\n text: string\n /** A human vouched for it: preferred over unconfirmed definitions of the same term. */\n confirmed?: boolean\n /** ISO time it was last written; the most recent wins between equals. */\n updatedAt?: string\n /** Where it comes from: the cited document's name. */\n source?: string\n /** Its other labels, e.g. the agreement (\"SPA\") it defines a term of. */\n labels?: DefinitionLabel[]\n}\n\n/** A definition's text split into its term and the rest. */\nexport interface ParsedDefinition {\n /** The term as written, without quotes or emphasis (`Business Day`). */\n term: string\n /** What follows the term, its connecting word included (`means a day …`, `: the date …`). */\n rest: string\n /** Just the meaning, the connecting word dropped (`a day …`). */\n meaning: string\n}\n\n/** A parsed definition fact. */\nexport interface Definition extends DefinitionSource, ParsedDefinition {\n /** The term's matching key (case and whitespace folded). */\n key: string\n}\n\n/** Every definition of one term, the preferred one first. */\nexport interface DefinedTermGroup {\n key: string\n /** The term as the preferred definition writes it. */\n term: string\n /** The preferred definition (first of {@link DefinedTermGroup.definitions}). */\n preferred: Definition\n definitions: Definition[]\n}\n\nconst QUOTES = `\"“”„‟'‘’‚‛«»`\nconst OPEN_CLOSE: Record<string, string> = {\n '\"': '\"',\n '“': '”',\n '„': '“',\n '‟': '”',\n \"'\": \"'\",\n '‘': '’',\n '‚': '‘',\n '‛': '’',\n '«': '»',\n}\nconst EMPHASIS = /^(\\*\\*|__|\\*|_)/\n/** The words (or punctuation) joining a term to its meaning, longest first. */\nconst CONNECTORS =\n /^(?:shall\\s+(?:have\\s+the\\s+meaning|mean|include)s?|ha(?:s|ve)\\s+the\\s+meanings?|means?\\s+and\\s+includes?|means|mean|includes|include|[:—–]|\\s-\\s|-\\s)/i\nconst MAX_TERM_LENGTH = 80\nconst MAX_TERM_WORDS = 10\n\n/** Markdown emphasis and escapes dropped, entity-encoded whitespace decoded, whitespace collapsed. */\nfunction plain(text: string): string {\n return decodeWhitespaceEntities(text)\n .replace(/\\\\([\\\\`*_{}[\\]()#+\\-.!\"'])/g, '$1')\n .replace(/(\\*\\*|__)(.+?)\\1/g, '$2')\n .replace(/\\s+/g, ' ')\n .trim()\n}\n\n/** The matching key of a term: case and whitespace folded, quotes and emphasis dropped. */\nexport function termKey(term: string): string {\n return plain(term)\n .replace(new RegExp(`[${QUOTES}*_]`, 'g'), '')\n .replace(/\\s+/g, ' ')\n .trim()\n .toLowerCase()\n}\n\nconst validTerm = (term: string) =>\n term.length > 0 &&\n term.length <= MAX_TERM_LENGTH &&\n term.split(/\\s+/).length <= MAX_TERM_WORDS &&\n /\\p{L}/u.test(term)\n\n/** A connector at the start of `rest` (after optional whitespace): its length, or 0. */\nfunction connectorAt(rest: string): number {\n const lead = rest.length - rest.trimStart().length\n // A spaced hyphen needs its leading space, so try the raw text before the trimmed one.\n const spaced = /^\\s-\\s/.exec(rest)\n if (spaced) return spaced[0].length\n const match = CONNECTORS.exec(rest.slice(lead))\n return match ? lead + match[0].length : 0\n}\n\n/**\n * Read a definition's term from the start of its text, or `null` when it does not start with one.\n *\n * Optional straight or curly quotes and bold markers around the term are dropped; the term is what\n * comes before \"means\", \"shall mean\", \"includes\", \"has the meaning\", a colon, or a dash. A quoted\n * term is taken whole, so `\"Long-Stop Date\" means …` keeps its hyphen.\n */\nexport function parseDefinition(text: string): ParsedDefinition | null {\n let s = plain(text)\n // Leading emphasis markers (`**\"Shares\"** means`), any order with the opening quote.\n for (let i = 0; i < 3; i++) s = s.replace(EMPHASIS, '').trimStart()\n let term: string\n let rest: string\n const open = s[0]\n const close = open ? OPEN_CLOSE[open] : undefined\n if (close) {\n const end = s.indexOf(close, 1)\n if (end < 0) return null\n term = s.slice(1, end)\n rest = s.slice(end + 1)\n // Emphasis or a closing quote between the term and its connector (`\"Shares\"**`, `**\"X**\"`).\n rest = rest.replace(new RegExp(`^(?:\\\\*\\\\*|__|\\\\*|_|[${QUOTES}])+`), '')\n } else {\n // Unquoted: the term runs up to the first connector.\n const match =\n /^(.+?)(\\s+(?:shall\\s+(?:have\\s+the\\s+meaning|mean|include)s?|ha(?:s|ve)\\s+the\\s+meanings?|means?\\s+and\\s+includes?|means|includes)\\b|\\s*[:—–]|\\s+-\\s)/i.exec(\n s\n )\n if (!match) return null\n term = match[1]\n rest = s.slice(match[1].length)\n }\n term = term.replace(/(\\*\\*|__|\\*|_)/g, '').trim()\n const joint = connectorAt(rest)\n if (!joint || !validTerm(term)) return null\n const meaning = rest.slice(joint).trim()\n if (!meaning) return null\n return { term, rest: rest.replace(/^\\s+/, ' ').replace(/^ (?=[:—–])/, ''), meaning }\n}\n\n/** A definition parsed, or `null` when its text names no term. */\nexport function toDefinition(source: DefinitionSource): Definition | null {\n const parsed = parseDefinition(source.text)\n return parsed ? { ...source, ...parsed, key: termKey(parsed.term) } : null\n}\n\nconst time = (iso?: string) => (iso ? Date.parse(iso) || 0 : 0)\n\n/** Preferred first: confirmed, then most recently written, then by id (stable). */\nexport function compareDefinitions(a: DefinitionSource, b: DefinitionSource): number {\n return (\n Number(!!b.confirmed) - Number(!!a.confirmed) ||\n time(b.updatedAt) - time(a.updatedAt) ||\n a.id.localeCompare(b.id)\n )\n}\n\n/** Alphabetical order of terms, as a reader sorts a glossary (case and accents folded). */\nexport const compareTerms = (a: string, b: string) =>\n a.localeCompare(b, undefined, { sensitivity: 'base', numeric: true })\n\n/**\n * Definitions grouped by term, alphabetically, each group's preferred definition first. Facts whose\n * text names no term are returned apart (`unparsed`), so a host can say how many it could not read.\n * With `labelId`, only definitions carrying that label (one agreement's, say) are kept.\n */\nexport function groupDefinitions(\n sources: readonly DefinitionSource[],\n options: { labelId?: string | null } = {}\n): { groups: DefinedTermGroup[]; unparsed: DefinitionSource[] } {\n const byKey = new Map<string, Definition[]>()\n const unparsed: DefinitionSource[] = []\n for (const source of sources) {\n if (options.labelId && !source.labels?.some((l) => l.id === options.labelId)) continue\n const definition = toDefinition(source)\n if (!definition) {\n unparsed.push(source)\n continue\n }\n const list = byKey.get(definition.key) ?? []\n list.push(definition)\n byKey.set(definition.key, list)\n }\n const groups = [...byKey.entries()].map(([key, list]) => {\n const definitions = [...list].sort(compareDefinitions)\n return { key, term: definitions[0].term, preferred: definitions[0], definitions }\n })\n groups.sort((a, b) => compareTerms(a.term, b.term))\n return { groups, unparsed }\n}\n\n/** The labels (agreements) definitions carry besides the Definitions label, by name. */\nexport function definitionLabels(sources: readonly DefinitionSource[]): DefinitionLabel[] {\n const byId = new Map<string, DefinitionLabel>()\n for (const s of sources) for (const l of s.labels ?? []) byId.set(l.id, l)\n return [...byId.values()].sort((a, b) => compareTerms(a.name, b.name))\n}\n\n/** Groups whose term matches a typed query: prefix matches first, then any word, then anywhere. */\nexport function filterTermGroups(\n groups: readonly DefinedTermGroup[],\n query: string\n): DefinedTermGroup[] {\n const q = termKey(query)\n if (!q) return [...groups]\n const rank = (g: DefinedTermGroup) =>\n g.key.startsWith(q) ? 0 : g.key.split(' ').some((w) => w.startsWith(q)) ? 1 : 2\n return groups\n .filter((g) => g.key.includes(q))\n .map((g) => ({ g, r: rank(g) }))\n .sort((a, b) => a.r - b.r || compareTerms(a.g.term, b.g.term))\n .map(({ g }) => g)\n}\n\n/** Prefix of every bookmark a defined term links to: hidden in Word (leading underscore). */\nexport const DEFINITION_BOOKMARK_PREFIX = '_dt_'\nconst MAX_BOOKMARK_LENGTH = 40\n\n/**\n * The Word bookmark of a definition: `_dt_` and the fact id in valid bookmark characters\n * (`fct-AbC12345` → `_dt_fct_AbC12345`), at most 40 characters as Word requires.\n */\nexport function definitionBookmark(factId: string): string {\n return (DEFINITION_BOOKMARK_PREFIX + factId.replace(/[^A-Za-z0-9_]/g, '_')).slice(\n 0,\n MAX_BOOKMARK_LENGTH\n )\n}\n\n/** The fact id a definition bookmark names, or `null` for any other bookmark. */\nexport function definitionIdOfBookmark(name: string): string | null {\n const match = /^_dt_([a-z]{3})_([A-Za-z0-9]+)$/.exec(name)\n return match ? `${match[1]}-${match[2]}` : null\n}\n","/**\n * The small WordprocessingML vocabulary the tags exports write: escaped runs, paragraphs, table\n * cells, an A4 page, and the minimal package around a `word/document.xml`. Zipped with `fflate`, so\n * the result opens in the native Word editor and in Word without pulling the editor engine in.\n */\n\nimport { strToU8, zipSync } from 'fflate'\n\nexport const DOCX_MIME_TYPE =\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\nexport const W_NAMESPACES =\n 'xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"'\n\n// Text that is not allowed in XML 1.0 at all (control characters) is dropped, not escaped.\n// eslint-disable-next-line no-control-regex\nconst INVALID_XML = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F]/g\n\n/** Text as XML character data or an attribute value. */\nexport const esc = (text: string) =>\n text\n .replace(INVALID_XML, '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n\nexport interface Run {\n text: string\n bold?: boolean\n italic?: boolean\n muted?: boolean\n}\n\nexport const run = ({ text, bold, italic, muted }: Run) => {\n const props = [bold && '<w:b/>', italic && '<w:i/>', muted && '<w:color w:val=\"595959\"/>']\n .filter(Boolean)\n .join('')\n // Line breaks inside a value become Word line breaks rather than being lost.\n const body = text\n .split(/\\r?\\n/)\n .map((line) => `<w:t xml:space=\"preserve\">${esc(line)}</w:t>`)\n .join('<w:br/>')\n return `<w:r>${props ? `<w:rPr>${props}</w:rPr>` : ''}${body}</w:r>`\n}\n\nexport const paragraph = (runs: Run[], style?: string) =>\n `<w:p>${style ? `<w:pPr><w:pStyle w:val=\"${style}\"/></w:pPr>` : ''}${runs.map(run).join('')}</w:p>`\n\n/** A table cell: its paragraphs (a cell must hold at least one), shaded when given a fill. */\nexport const cell = (paragraphs: string[], width: number, fill?: string) =>\n `<w:tc><w:tcPr><w:tcW w:w=\"${width}\" w:type=\"dxa\"/>${\n fill ? `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${fill}\"/>` : ''\n }</w:tcPr>${paragraphs.length ? paragraphs.join('') : '<w:p/>'}</w:tc>`\n\n/** Page geometry in twips (A4), turned for landscape. */\nexport function page(landscape: boolean) {\n const [short, long] = [11906, 16838]\n const margin = landscape ? 1080 : 1440\n const width = landscape ? long : short\n return {\n margin,\n textWidth: width - 2 * margin,\n sectPr: `<w:sectPr><w:pgSz w:w=\"${landscape ? long : short}\" w:h=\"${landscape ? short : long}\"${\n landscape ? ' w:orient=\"landscape\"' : ''\n }/><w:pgMar w:top=\"${margin}\" w:right=\"${margin}\" w:bottom=\"${margin}\" w:left=\"${margin}\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/></w:sectPr>`,\n }\n}\n\n/** `YYYY-MM-DD HH:MM` (UTC) of an ISO time, for a \"taken at\" line. */\nexport const minuteUtc = (at: string) => new Date(at).toISOString().slice(0, 16).replace('T', ' ')\n\n/** A `word/document.xml` around body content (paragraphs, tables, then the section). */\nexport const documentXml = (body: string) =>\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:document ${W_NAMESPACES}><w:body>${body}</w:body></w:document>`\n\n/** `word/styles.xml` holding the given style definitions. */\nexport const stylesXml = (defaults: string, styles: string) =>\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:styles xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">${defaults}${styles}</w:styles>`\n\n/** Calibri 11pt (en-GB), 8pt after each paragraph: the document defaults the exports share. */\nexport const DOC_DEFAULTS = `<w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii=\"Calibri\" w:hAnsi=\"Calibri\" w:eastAsia=\"Calibri\" w:cs=\"Calibri\"/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/><w:lang w:val=\"en-GB\"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after=\"160\" w:line=\"259\" w:lineRule=\"auto\"/></w:pPr></w:pPrDefault></w:docDefaults>`\n\n/**\n * Styles of a document that is a title and a table: `Title`, the compact `TagTableCell` paragraph\n * and the bordered `TagTableGrid` table.\n */\nexport const TABLE_DOCUMENT_STYLES = stylesXml(\n DOC_DEFAULTS,\n `<w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style><w:style w:type=\"paragraph\" w:styleId=\"Title\"><w:name w:val=\"Title\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"80\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"48\"/><w:szCs w:val=\"48\"/></w:rPr></w:style><w:style w:type=\"paragraph\" w:customStyle=\"1\" w:styleId=\"TagTableCell\"><w:name w:val=\"Tag Table Cell\"/><w:basedOn w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"40\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/></w:rPr></w:style><w:style w:type=\"table\" w:default=\"1\" w:styleId=\"TableNormal\"><w:name w:val=\"Normal Table\"/><w:tblPr><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblCellMar><w:top w:w=\"0\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/><w:bottom w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style><w:style w:type=\"table\" w:customStyle=\"1\" w:styleId=\"TagTableGrid\"><w:name w:val=\"Tag Table\"/><w:basedOn w:val=\"TableNormal\"/><w:tblPr><w:tblBorders><w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:insideH w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:insideV w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/></w:tblBorders><w:tblCellMar><w:top w:w=\"60\" w:type=\"dxa\"/><w:left w:w=\"100\" w:type=\"dxa\"/><w:bottom w:w=\"60\" w:type=\"dxa\"/><w:right w:w=\"100\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style>`\n)\n\nconst CONTENT_TYPES = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/><Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/><Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/></Types>`\n\nconst ROOT_RELS = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"word/document.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/></Relationships>`\n\nconst DOCUMENT_RELS = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/></Relationships>`\n\nconst coreXml = (\n title: string,\n at: string\n) => `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><dc:title>${esc(\n title\n)}</dc:title><dcterms:created xsi:type=\"dcterms:W3CDTF\">${at}</dcterms:created><dcterms:modified xsi:type=\"dcterms:W3CDTF\">${at}</dcterms:modified></cp:coreProperties>`\n\n/** The minimal `.docx` package: a document, its styles, and its title and time. */\nexport function docxPackage(parts: {\n document: string\n styles: string\n title: string\n /** ISO time; default now. */\n at?: string\n}): Uint8Array {\n const at = new Date(parts.at ?? Date.now()).toISOString().replace(/\\.\\d{3}Z$/, 'Z')\n return zipSync({\n '[Content_Types].xml': strToU8(CONTENT_TYPES),\n '_rels/.rels': strToU8(ROOT_RELS),\n 'docProps/core.xml': strToU8(coreXml(parts.title, at)),\n 'word/document.xml': strToU8(parts.document),\n 'word/styles.xml': strToU8(parts.styles),\n 'word/_rels/document.xml.rels': strToU8(DOCUMENT_RELS),\n })\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var chunkOB5F4577_cjs = require('./chunk-OB5F4577.cjs');
|
|
5
4
|
var chunkVGOFFCMT_cjs = require('./chunk-VGOFFCMT.cjs');
|
|
5
|
+
var chunkOB5F4577_cjs = require('./chunk-OB5F4577.cjs');
|
|
6
6
|
var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
|
|
7
7
|
var react = require('react');
|
|
8
8
|
var lucideReact = require('lucide-react');
|
|
@@ -670,6 +670,7 @@ function WorkspaceSwitcher({
|
|
|
670
670
|
onSwitch,
|
|
671
671
|
onGoToList,
|
|
672
672
|
onNewWorkspace,
|
|
673
|
+
newWorkspaceDisabledReason,
|
|
673
674
|
labels,
|
|
674
675
|
className,
|
|
675
676
|
testId,
|
|
@@ -737,12 +738,17 @@ function WorkspaceSwitcher({
|
|
|
737
738
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
738
739
|
ui.DropdownMenuItem,
|
|
739
740
|
{
|
|
740
|
-
onClick: onNewWorkspace,
|
|
741
|
+
onClick: newWorkspaceDisabledReason ? void 0 : onNewWorkspace,
|
|
742
|
+
disabled: !!newWorkspaceDisabledReason,
|
|
743
|
+
title: newWorkspaceDisabledReason,
|
|
741
744
|
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.new, { testId: "workspace-switcher-new" }),
|
|
742
745
|
className: "gap-2",
|
|
743
746
|
children: [
|
|
744
747
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4 flex-shrink-0 text-muted-foreground" }),
|
|
745
|
-
|
|
748
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
749
|
+
l.newWorkspace(singular),
|
|
750
|
+
newWorkspaceDisabledReason && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: newWorkspaceDisabledReason })
|
|
751
|
+
] })
|
|
746
752
|
]
|
|
747
753
|
}
|
|
748
754
|
),
|
|
@@ -1941,5 +1947,5 @@ exports.useSidebarContext = useSidebarContext;
|
|
|
1941
1947
|
exports.useSidebarSettle = useSidebarSettle;
|
|
1942
1948
|
exports.workspaceKindColor = workspaceKindColor;
|
|
1943
1949
|
exports.workspaceKindMeta = workspaceKindMeta;
|
|
1944
|
-
//# sourceMappingURL=chunk-
|
|
1945
|
-
//# sourceMappingURL=chunk-
|
|
1950
|
+
//# sourceMappingURL=chunk-CKYA2IG5.cjs.map
|
|
1951
|
+
//# sourceMappingURL=chunk-CKYA2IG5.cjs.map
|