@assistant-ui/react 0.15.22 → 0.15.24

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 (162) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +44 -23
  3. package/dist/assistant-transport.js.map +1 -1
  4. package/dist/cloud-renderer/CloudRendererHost.js.map +1 -1
  5. package/dist/context/providers/MessageProvider.js.map +1 -1
  6. package/dist/context/providers/ThreadViewportProvider.js.map +1 -1
  7. package/dist/hooks/useToolCallElapsed.js.map +1 -1
  8. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  9. package/dist/mcp-apps/app-frame.js.map +1 -1
  10. package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
  11. package/dist/model-context/makeAssistantVisible.js.map +1 -1
  12. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  13. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  14. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  15. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  16. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  17. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  18. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  19. package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -1
  20. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  21. package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -1
  22. package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
  23. package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
  24. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
  25. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
  26. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
  27. package/dist/primitives/actionBarMore/scope.js.map +1 -1
  28. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
  29. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  30. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  31. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
  32. package/dist/primitives/assistantModal/popoverRenderPrimitives.js.map +1 -1
  33. package/dist/primitives/assistantModal/scope.js.map +1 -1
  34. package/dist/primitives/attachment/AttachmentName.js.map +1 -1
  35. package/dist/primitives/attachment/AttachmentRemove.js.map +1 -1
  36. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
  37. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  38. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  39. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  40. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -1
  41. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  42. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  43. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  44. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -1
  45. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  46. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  47. package/dist/primitives/composer/ComposerDictate.js.map +1 -1
  48. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  49. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  50. package/dist/primitives/composer/ComposerInput.js +3 -2
  51. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  52. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
  53. package/dist/primitives/composer/ComposerQuote.js.map +1 -1
  54. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  55. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  56. package/dist/primitives/composer/ComposerStopDictation.js.map +1 -1
  57. package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -1
  58. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
  59. package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
  60. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
  61. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -1
  62. package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
  63. package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
  64. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -1
  65. package/dist/primitives/composer/trigger/index.js.map +1 -1
  66. package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -1
  67. package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -1
  68. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
  69. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
  70. package/dist/primitives/composer/useComposerInputState.js.map +1 -1
  71. package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -1
  72. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  73. package/dist/primitives/error/ErrorRoot.js.map +1 -1
  74. package/dist/primitives/message/MessageIf.d.ts.map +1 -1
  75. package/dist/primitives/message/MessageIf.js +6 -3
  76. package/dist/primitives/message/MessageIf.js.map +1 -1
  77. package/dist/primitives/message/MessageParts.js.map +1 -1
  78. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  79. package/dist/primitives/message/MessagePartsGrouped.js +42 -17
  80. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  81. package/dist/primitives/message/MessageRoot.js.map +1 -1
  82. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -1
  83. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -1
  84. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -1
  85. package/dist/primitives/queueItem/QueueItemText.js.map +1 -1
  86. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  87. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -1
  88. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  89. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
  90. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
  91. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  92. package/dist/primitives/thread/ThreadIf.js.map +1 -1
  93. package/dist/primitives/thread/ThreadRoot.d.ts +3 -2
  94. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  95. package/dist/primitives/thread/ThreadRoot.js +49 -27
  96. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  97. package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -1
  98. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  99. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  100. package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
  101. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -1
  102. package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -1
  103. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  104. package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
  105. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
  106. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
  107. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  108. package/dist/primitives/threadListItem/ThreadListItemRoot.js +1 -0
  109. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  110. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  111. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
  112. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
  113. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +1 -0
  114. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
  115. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
  116. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
  117. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
  118. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
  119. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +1 -0
  120. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
  121. package/dist/primitives/threadListItemMore/scope.js.map +1 -1
  122. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  123. package/dist/unstable/useModelContextSnapshot.js.map +1 -1
  124. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +1 -0
  125. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -1
  126. package/dist/unstable/webmcp/WebMcpRegistrationResource.js +27 -39
  127. package/dist/unstable/webmcp/WebMcpRegistrationResource.js.map +1 -1
  128. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -1
  129. package/dist/unstable/webmcp/useWebMcpProvider.js +22 -13
  130. package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -1
  131. package/dist/utils/Primitive.js.map +1 -1
  132. package/dist/utils/createActionButton.js.map +1 -1
  133. package/dist/utils/hooks/useManagedRef.js.map +1 -1
  134. package/dist/utils/hooks/useMediaQuery.js.map +1 -1
  135. package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
  136. package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -1
  137. package/dist/utils/hooks/useSizeHandle.js.map +1 -1
  138. package/dist/utils/isCompositionKey.d.ts +2 -0
  139. package/dist/utils/isCompositionKey.d.ts.map +1 -0
  140. package/dist/utils/isCompositionKey.js +6 -0
  141. package/dist/utils/isCompositionKey.js.map +1 -0
  142. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  143. package/package.json +15 -12
  144. package/src/primitives/composer/ComposerInput.test.tsx +33 -1
  145. package/src/primitives/composer/ComposerInput.tsx +3 -2
  146. package/src/primitives/message/MessageIf.test.tsx +72 -0
  147. package/src/primitives/message/MessageIf.ts +8 -3
  148. package/src/primitives/message/MessagePartsGrouped.test.tsx +271 -1
  149. package/src/primitives/message/MessagePartsGrouped.tsx +14 -6
  150. package/src/primitives/thread/ThreadRoot.test.tsx +163 -0
  151. package/src/primitives/thread/ThreadRoot.tsx +33 -3
  152. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +2 -0
  153. package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +65 -0
  154. package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +7 -0
  155. package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +2 -0
  156. package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +8 -13
  157. package/src/tests/remote-thread-list-test-helpers.ts +15 -0
  158. package/src/tests/threadListItemIsRunning.test.tsx +10 -7
  159. package/src/unstable/webmcp/WebMcpRegistrationResource.ts +9 -8
  160. package/src/unstable/webmcp/useWebMcpProvider.test.tsx +36 -2
  161. package/src/unstable/webmcp/useWebMcpProvider.ts +40 -13
  162. package/src/utils/isCompositionKey.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverResource.js","names":["useEffectEvent","useResource","resource","Unstable_TriggerAdapter","Unstable_TriggerCategory","Unstable_TriggerItem","AssistantClient","TriggerDetectionResource","TriggerKeyboardResource","TriggerNavigationResource","TriggerSelectionResource","SelectItemOverride","TriggerBehavior","TriggerMatcher","TriggerPopoverKeyEvent","OnSelectBehavior","TriggerPopoverResourceOutput","open","query","activeCategoryId","categories","items","highlightedIndex","isSearchMode","isLoading","popoverId","highlightedItemId","selectCategory","categoryId","goBack","selectItem","item","close","highlightIndex","index","handleKeyDown","e","key","shiftKey","preventDefault","setCursorPosition","pos","registerSelectItemOverride","fn","useTriggerPopoverResource","t0","$","_c","adapter","text","triggerChar","matcher","behavior","aui","t1","detection","trigger","undefined","t2","navigation","t3","onSelected","t4","selection","t5","navigableList","keyboard","t6","TriggerPopoverResource"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverResource.ts"],"sourcesContent":["import { useEffectEvent } from \"react\";\nimport { useResource, resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport type { AssistantClient } from \"@assistant-ui/store\";\nimport { TriggerDetectionResource } from \"./triggerDetectionResource\";\nimport { TriggerKeyboardResource } from \"./triggerKeyboardResource\";\nimport { TriggerNavigationResource } from \"./triggerNavigationResource\";\nimport {\n TriggerSelectionResource,\n type SelectItemOverride,\n type TriggerBehavior,\n} from \"./triggerSelectionResource\";\nimport type { TriggerMatcher } from \"./detectTrigger\";\n\nexport type { SelectItemOverride, TriggerBehavior };\nexport type { TriggerPopoverKeyEvent } from \"./triggerKeyboardResource\";\n\n/** @deprecated Use `TriggerBehavior`. */\nexport type OnSelectBehavior = TriggerBehavior;\n\nexport type TriggerPopoverResourceOutput = {\n readonly open: boolean;\n readonly query: string;\n readonly activeCategoryId: string | null;\n readonly categories: readonly Unstable_TriggerCategory[];\n readonly items: readonly Unstable_TriggerItem[];\n readonly highlightedIndex: number;\n readonly isSearchMode: boolean;\n /** Whether the adapter is currently resolving items (async sources). */\n readonly isLoading: boolean;\n /** Stable ID prefix for generating accessible element IDs. */\n readonly popoverId: string;\n /** ID of the currently highlighted item (for aria-activedescendant). */\n readonly highlightedItemId: string | undefined;\n\n selectCategory(categoryId: string): void;\n goBack(): void;\n selectItem(item: Unstable_TriggerItem): void;\n close(): void;\n /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */\n highlightIndex(index: number): void;\n handleKeyDown(e: {\n readonly key: string;\n readonly shiftKey: boolean;\n preventDefault(): void;\n }): boolean;\n\n setCursorPosition(pos: number): void;\n registerSelectItemOverride(fn: SelectItemOverride): () => void;\n};\n\n/** Composes detection, navigation, keyboard, and selection sub-resources. */\nconst useTriggerPopoverResource = ({\n adapter,\n text,\n triggerChar,\n matcher,\n behavior,\n aui,\n popoverId,\n isLoading,\n}: {\n adapter: Unstable_TriggerAdapter | undefined;\n text: string;\n triggerChar: string;\n matcher: TriggerMatcher | undefined;\n behavior: TriggerBehavior | undefined;\n aui: AssistantClient;\n /** Stable ID for accessible element IDs (pass React's useId() from component layer). */\n popoverId: string;\n isLoading: boolean;\n}): TriggerPopoverResourceOutput => {\n const detection = useResource(\n TriggerDetectionResource({ text, triggerChar, matcher }),\n );\n\n const open =\n detection.trigger !== null &&\n adapter !== undefined &&\n behavior !== undefined;\n\n const navigation = useResource(\n TriggerNavigationResource({\n adapter,\n query: detection.query,\n open,\n }),\n );\n\n const onSelected = useEffectEvent(() => {\n navigation.goBack();\n });\n\n const selection = useResource(\n TriggerSelectionResource({\n behavior,\n trigger: detection.trigger,\n aui,\n triggerChar,\n setCursorPosition: detection.setCursorPosition,\n onSelected,\n }),\n );\n\n const keyboard = useResource(\n TriggerKeyboardResource({\n navigableList: navigation.navigableList,\n isSearchMode: navigation.isSearchMode,\n activeCategoryId: navigation.activeCategoryId,\n query: detection.query,\n popoverId,\n open,\n selectItem: selection.selectItem,\n selectCategory: navigation.selectCategory,\n goBack: navigation.goBack,\n close: selection.close,\n }),\n );\n\n return {\n open,\n query: detection.query,\n activeCategoryId: navigation.activeCategoryId,\n categories: navigation.categories,\n items: navigation.items,\n highlightedIndex: keyboard.highlightedIndex,\n isSearchMode: navigation.isSearchMode,\n isLoading,\n popoverId,\n highlightedItemId: keyboard.highlightedItemId,\n selectCategory: navigation.selectCategory,\n goBack: navigation.goBack,\n selectItem: selection.selectItem,\n close: selection.close,\n highlightIndex: keyboard.highlightIndex,\n handleKeyDown: keyboard.handleKeyDown,\n setCursorPosition: detection.setCursorPosition,\n registerSelectItemOverride: selection.registerSelectItemOverride,\n };\n};\n\nexport const TriggerPopoverResource = resource(useTriggerPopoverResource);\n"],"mappings":"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"}
1
+ {"version":3,"file":"TriggerPopoverResource.js","names":["useEffectEvent","useResource","resource","Unstable_TriggerAdapter","Unstable_TriggerCategory","Unstable_TriggerItem","AssistantClient","TriggerDetectionResource","TriggerKeyboardResource","TriggerNavigationResource","TriggerSelectionResource","SelectItemOverride","TriggerBehavior","TriggerMatcher","TriggerPopoverKeyEvent","OnSelectBehavior","TriggerPopoverResourceOutput","open","query","activeCategoryId","categories","items","highlightedIndex","isSearchMode","isLoading","popoverId","highlightedItemId","selectCategory","categoryId","goBack","selectItem","item","close","highlightIndex","index","handleKeyDown","e","key","shiftKey","preventDefault","setCursorPosition","pos","registerSelectItemOverride","fn","useTriggerPopoverResource","t0","$","_c","adapter","text","triggerChar","matcher","behavior","aui","t1","detection","trigger","undefined","t2","navigation","t3","onSelected","t4","selection","t5","navigableList","keyboard","t6","TriggerPopoverResource","_c"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverResource.ts"],"sourcesContent":["import { useEffectEvent } from \"react\";\nimport { useResource, resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport type { AssistantClient } from \"@assistant-ui/store\";\nimport { TriggerDetectionResource } from \"./triggerDetectionResource\";\nimport { TriggerKeyboardResource } from \"./triggerKeyboardResource\";\nimport { TriggerNavigationResource } from \"./triggerNavigationResource\";\nimport {\n TriggerSelectionResource,\n type SelectItemOverride,\n type TriggerBehavior,\n} from \"./triggerSelectionResource\";\nimport type { TriggerMatcher } from \"./detectTrigger\";\n\nexport type { SelectItemOverride, TriggerBehavior };\nexport type { TriggerPopoverKeyEvent } from \"./triggerKeyboardResource\";\n\n/** @deprecated Use `TriggerBehavior`. */\nexport type OnSelectBehavior = TriggerBehavior;\n\nexport type TriggerPopoverResourceOutput = {\n readonly open: boolean;\n readonly query: string;\n readonly activeCategoryId: string | null;\n readonly categories: readonly Unstable_TriggerCategory[];\n readonly items: readonly Unstable_TriggerItem[];\n readonly highlightedIndex: number;\n readonly isSearchMode: boolean;\n /** Whether the adapter is currently resolving items (async sources). */\n readonly isLoading: boolean;\n /** Stable ID prefix for generating accessible element IDs. */\n readonly popoverId: string;\n /** ID of the currently highlighted item (for aria-activedescendant). */\n readonly highlightedItemId: string | undefined;\n\n selectCategory(categoryId: string): void;\n goBack(): void;\n selectItem(item: Unstable_TriggerItem): void;\n close(): void;\n /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */\n highlightIndex(index: number): void;\n handleKeyDown(e: {\n readonly key: string;\n readonly shiftKey: boolean;\n preventDefault(): void;\n }): boolean;\n\n setCursorPosition(pos: number): void;\n registerSelectItemOverride(fn: SelectItemOverride): () => void;\n};\n\n/** Composes detection, navigation, keyboard, and selection sub-resources. */\nconst useTriggerPopoverResource = ({\n adapter,\n text,\n triggerChar,\n matcher,\n behavior,\n aui,\n popoverId,\n isLoading,\n}: {\n adapter: Unstable_TriggerAdapter | undefined;\n text: string;\n triggerChar: string;\n matcher: TriggerMatcher | undefined;\n behavior: TriggerBehavior | undefined;\n aui: AssistantClient;\n /** Stable ID for accessible element IDs (pass React's useId() from component layer). */\n popoverId: string;\n isLoading: boolean;\n}): TriggerPopoverResourceOutput => {\n const detection = useResource(\n TriggerDetectionResource({ text, triggerChar, matcher }),\n );\n\n const open =\n detection.trigger !== null &&\n adapter !== undefined &&\n behavior !== undefined;\n\n const navigation = useResource(\n TriggerNavigationResource({\n adapter,\n query: detection.query,\n open,\n }),\n );\n\n const onSelected = useEffectEvent(() => {\n navigation.goBack();\n });\n\n const selection = useResource(\n TriggerSelectionResource({\n behavior,\n trigger: detection.trigger,\n aui,\n triggerChar,\n setCursorPosition: detection.setCursorPosition,\n onSelected,\n }),\n );\n\n const keyboard = useResource(\n TriggerKeyboardResource({\n navigableList: navigation.navigableList,\n isSearchMode: navigation.isSearchMode,\n activeCategoryId: navigation.activeCategoryId,\n query: detection.query,\n popoverId,\n open,\n selectItem: selection.selectItem,\n selectCategory: navigation.selectCategory,\n goBack: navigation.goBack,\n close: selection.close,\n }),\n );\n\n return {\n open,\n query: detection.query,\n activeCategoryId: navigation.activeCategoryId,\n categories: navigation.categories,\n items: navigation.items,\n highlightedIndex: keyboard.highlightedIndex,\n isSearchMode: navigation.isSearchMode,\n isLoading,\n popoverId,\n highlightedItemId: keyboard.highlightedItemId,\n selectCategory: navigation.selectCategory,\n goBack: navigation.goBack,\n selectItem: selection.selectItem,\n close: selection.close,\n highlightIndex: keyboard.highlightIndex,\n handleKeyDown: keyboard.handleKeyDown,\n setCursorPosition: detection.setCursorPosition,\n registerSelectItemOverride: selection.registerSelectItemOverride,\n };\n};\n\nexport const TriggerPopoverResource = resource(useTriggerPopoverResource);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverRootContext.js","names":["c","_c","createContext","useCallback","useContext","useMemo","useRef","useSyncExternalStore","FC","ReactNode","ComposerInputPluginProvider","useComposerInputPluginRegistryOptional","TriggerPopoverResourceOutput","TriggerBehavior","TriggerMatcher","RegisteredTrigger","char","matcher","behavior","resource","TriggerPopoverLifecycleListener","added","trigger","removed","TriggerPopoverActiveAria","popoverId","highlightedItemId","TriggerPopoverRootContextValue","register","getTriggers","ReadonlyMap","subscribe","listener","subscribeLifecycle","getActiveAria","subscribeAria","TriggerPopoverAriaPublish","setActiveAria","aria","TriggerPopoverRootContext","TriggerPopoverAriaPublishContext","useTriggerPopoverRootContext","ctx","Error","useTriggerPopoverRootContextOptional","useTriggerPopoverAriaPublish","useTriggerPopoverTriggers","EMPTY_TRIGGERS","Map","noopSubscribe","getEmptyTriggers","useTriggerPopoverTriggersOptional","getNullAria","useTriggerPopoverActiveAriaOptional","ComposerPrimitiveTriggerPopoverRoot","Props","children","useSimpleSubscribable","$","t0","Symbol","for","Set","listenersRef","t1","current","notify","t2","listener_0","add","delete","t3","TriggerPopoverRootInner","triggersRef","lifecycleListenersRef","has","process","env","NODE_ENV","console","warn","_temp","existing","values","startsWith","next","set","l","after","l_0","t4","t5","activeAriaRef","activeAriaCharRef","notifyAria","t6","char_0","prev","t7","t8","value","t9","ariaPublishValue","t10","t11","existingRegistry","displayName"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverRootContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useSyncExternalStore,\n type FC,\n type ReactNode,\n} from \"react\";\nimport {\n ComposerInputPluginProvider,\n useComposerInputPluginRegistryOptional,\n} from \"../ComposerInputPluginContext\";\nimport type { TriggerPopoverResourceOutput } from \"./TriggerPopoverResource\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\nimport type { TriggerMatcher } from \"./detectTrigger\";\n\nexport type RegisteredTrigger = {\n readonly char: string;\n readonly matcher?: TriggerMatcher | undefined;\n /** Behavior contributed by a child `TriggerPopover.Directive` / `.Action`. */\n readonly behavior?: TriggerBehavior;\n readonly resource: TriggerPopoverResourceOutput;\n};\n\nexport type TriggerPopoverLifecycleListener = {\n added(trigger: RegisteredTrigger): void;\n removed(char: string): void;\n};\n\n/**\n * ARIA descriptor of the popover that is currently open. Consumed by the\n * focused element (typically the composer textarea) so it can advertise the\n * combobox relationship per the WAI-ARIA editable combobox pattern.\n */\nexport type TriggerPopoverActiveAria = {\n popoverId: string;\n highlightedItemId: string | undefined;\n};\n\nexport type TriggerPopoverRootContextValue = {\n register(trigger: RegisteredTrigger): () => void;\n getTriggers(): ReadonlyMap<string, RegisteredTrigger>;\n subscribe(listener: () => void): () => void;\n /** Subscribe to per-trigger add/remove events. */\n subscribeLifecycle(listener: TriggerPopoverLifecycleListener): () => void;\n /** ARIA descriptor of the open popover, or null if none is open. */\n getActiveAria(): TriggerPopoverActiveAria | null;\n /** Subscribe to changes in the active ARIA descriptor. */\n subscribeAria(listener: () => void): () => void;\n};\n\n/**\n * Write-side of the ARIA descriptor, scoped to `TriggerPopover` children of a\n * `TriggerPopoverRoot`. Intentionally not exposed on the public root context\n * value: external consumers can read ARIA state but cannot publish or clear it.\n */\ntype TriggerPopoverAriaPublish = {\n setActiveAria(char: string, aria: TriggerPopoverActiveAria | null): void;\n};\n\nconst TriggerPopoverRootContext =\n createContext<TriggerPopoverRootContextValue | null>(null);\n\nconst TriggerPopoverAriaPublishContext =\n createContext<TriggerPopoverAriaPublish | null>(null);\n\nexport const useTriggerPopoverRootContext = () => {\n const ctx = useContext(TriggerPopoverRootContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverRootContext must be used within ComposerPrimitive.TriggerPopoverRoot\",\n );\n return ctx;\n};\n\nexport const useTriggerPopoverRootContextOptional = () =>\n useContext(TriggerPopoverRootContext);\n\n/**\n * Internal hook used by `TriggerPopover` children to publish their open and\n * highlight state. Not exported from the trigger module.\n */\nexport const useTriggerPopoverAriaPublish = (): TriggerPopoverAriaPublish => {\n const ctx = useContext(TriggerPopoverAriaPublishContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverAriaPublish must be used within ComposerPrimitive.TriggerPopoverRoot\",\n );\n return ctx;\n};\n\n/**\n * Live map of registered triggers, re-rendering on change. Prefer\n * `subscribeLifecycle` for incremental add/remove handling.\n */\nexport const useTriggerPopoverTriggers = () => {\n const ctx = useTriggerPopoverRootContext();\n return useSyncExternalStore(ctx.subscribe, ctx.getTriggers, ctx.getTriggers);\n};\n\nconst EMPTY_TRIGGERS: ReadonlyMap<string, RegisteredTrigger> = new Map();\nconst noopSubscribe = () => () => {};\nconst getEmptyTriggers = () => EMPTY_TRIGGERS;\n\n/** Like `useTriggerPopoverTriggers` but returns an empty map outside a root. */\nexport const useTriggerPopoverTriggersOptional = () => {\n const ctx = useTriggerPopoverRootContextOptional();\n return useSyncExternalStore(\n ctx ? ctx.subscribe : noopSubscribe,\n ctx ? ctx.getTriggers : getEmptyTriggers,\n ctx ? ctx.getTriggers : getEmptyTriggers,\n );\n};\n\nconst getNullAria = () => null;\n\n/**\n * Returns the ARIA descriptor of the currently open trigger popover, or\n * `null` if none is open or the consumer is rendered outside a\n * `TriggerPopoverRoot`.\n */\nexport const useTriggerPopoverActiveAriaOptional =\n (): TriggerPopoverActiveAria | null => {\n const ctx = useTriggerPopoverRootContextOptional();\n return useSyncExternalStore(\n ctx ? ctx.subscribeAria : noopSubscribe,\n ctx ? ctx.getActiveAria : getNullAria,\n ctx ? ctx.getActiveAria : getNullAria,\n );\n };\n\nexport namespace ComposerPrimitiveTriggerPopoverRoot {\n export type Props = {\n children: ReactNode;\n };\n}\n\n/**\n * Local helper for the simple \"notify-all listeners\" subscribable pattern.\n * Used twice in this file (trigger registry, active ARIA); kept inline to\n * avoid pulling a single-use abstraction into the wider tree.\n */\nfunction useSimpleSubscribable() {\n const listenersRef = useRef<Set<() => void>>(new Set());\n const notify = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n const subscribe = useCallback((listener: () => void) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n }, []);\n return { notify, subscribe };\n}\n\nconst TriggerPopoverRootInner: FC<\n ComposerPrimitiveTriggerPopoverRoot.Props\n> = ({ children }) => {\n const triggersRef = useRef<ReadonlyMap<string, RegisteredTrigger>>(new Map());\n const lifecycleListenersRef = useRef<Set<TriggerPopoverLifecycleListener>>(\n new Set(),\n );\n\n const { notify, subscribe } = useSimpleSubscribable();\n\n const register = useCallback<TriggerPopoverRootContextValue[\"register\"]>(\n (trigger) => {\n const { char } = trigger;\n if (triggersRef.current.has(char)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[assistant-ui] Duplicate TriggerPopover for char \"${char}\". Ignoring the second registration.`,\n );\n }\n return () => {};\n }\n if (process.env.NODE_ENV !== \"production\") {\n for (const existing of triggersRef.current.values()) {\n if (\n char.startsWith(existing.char) ||\n existing.char.startsWith(char)\n ) {\n console.warn(\n `[assistant-ui] Trigger prefix collision between \"${existing.char}\" and \"${char}\". One char is a prefix of the other; only one will match reliably.`,\n );\n }\n }\n }\n const next = new Map(triggersRef.current);\n next.set(char, trigger);\n triggersRef.current = next;\n notify();\n for (const l of lifecycleListenersRef.current) l.added(trigger);\n return () => {\n const after = new Map(triggersRef.current);\n after.delete(char);\n triggersRef.current = after;\n notify();\n for (const l of lifecycleListenersRef.current) l.removed(char);\n };\n },\n [notify],\n );\n\n const getTriggers = useCallback<\n TriggerPopoverRootContextValue[\"getTriggers\"]\n >(() => triggersRef.current, []);\n\n const subscribeLifecycle = useCallback<\n TriggerPopoverRootContextValue[\"subscribeLifecycle\"]\n >((listener) => {\n lifecycleListenersRef.current.add(listener);\n return () => {\n lifecycleListenersRef.current.delete(listener);\n };\n }, []);\n\n const activeAriaRef = useRef<TriggerPopoverActiveAria | null>(null);\n const activeAriaCharRef = useRef<string | null>(null);\n const { notify: notifyAria, subscribe: subscribeAria } =\n useSimpleSubscribable();\n\n const setActiveAria = useCallback<TriggerPopoverAriaPublish[\"setActiveAria\"]>(\n (char, aria) => {\n if (aria === null) {\n if (activeAriaCharRef.current !== char) return;\n activeAriaRef.current = null;\n activeAriaCharRef.current = null;\n notifyAria();\n return;\n }\n const prev = activeAriaRef.current;\n if (\n activeAriaCharRef.current === char &&\n prev !== null &&\n prev.popoverId === aria.popoverId &&\n prev.highlightedItemId === aria.highlightedItemId\n ) {\n return;\n }\n activeAriaRef.current = aria;\n activeAriaCharRef.current = char;\n notifyAria();\n },\n [notifyAria],\n );\n\n const getActiveAria = useCallback<\n TriggerPopoverRootContextValue[\"getActiveAria\"]\n >(() => activeAriaRef.current, []);\n\n const value = useMemo<TriggerPopoverRootContextValue>(\n () => ({\n register,\n getTriggers,\n subscribe,\n subscribeLifecycle,\n getActiveAria,\n subscribeAria,\n }),\n [\n register,\n getTriggers,\n subscribe,\n subscribeLifecycle,\n getActiveAria,\n subscribeAria,\n ],\n );\n\n const ariaPublishValue = useMemo<TriggerPopoverAriaPublish>(\n () => ({ setActiveAria }),\n [setActiveAria],\n );\n\n return (\n <TriggerPopoverRootContext.Provider value={value}>\n <TriggerPopoverAriaPublishContext.Provider value={ariaPublishValue}>\n {children}\n </TriggerPopoverAriaPublishContext.Provider>\n </TriggerPopoverRootContext.Provider>\n );\n};\n\n/**\n * Provider that groups one or more `TriggerPopover` declarations. Each trigger\n * is identified by its `char` (unique within the root). Behavior is contributed\n * by a child `TriggerPopover.Directive` or `TriggerPopover.Action`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopoverRoot>\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"@\" adapter={mentionAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />\n * ...\n * </ComposerPrimitive.Unstable_TriggerPopover>\n *\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"/\" adapter={slashAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Action onExecute={handler} />\n * ...\n * </ComposerPrimitive.Unstable_TriggerPopover>\n *\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input />\n * </ComposerPrimitive.Root>\n * </ComposerPrimitive.Unstable_TriggerPopoverRoot>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverRoot: FC<\n ComposerPrimitiveTriggerPopoverRoot.Props\n> = ({ children }) => {\n const existingRegistry = useComposerInputPluginRegistryOptional();\n\n if (existingRegistry) {\n return <TriggerPopoverRootInner>{children}</TriggerPopoverRootInner>;\n }\n\n return (\n <ComposerInputPluginProvider>\n <TriggerPopoverRootInner>{children}</TriggerPopoverRootInner>\n </ComposerInputPluginProvider>\n );\n};\n\nComposerPrimitiveTriggerPopoverRoot.displayName =\n \"ComposerPrimitive.TriggerPopoverRoot\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"TriggerPopoverRootContext.js","names":["c","_c","createContext","useCallback","useContext","useMemo","useRef","useSyncExternalStore","FC","ReactNode","ComposerInputPluginProvider","useComposerInputPluginRegistryOptional","TriggerPopoverResourceOutput","TriggerBehavior","TriggerMatcher","RegisteredTrigger","char","matcher","behavior","resource","TriggerPopoverLifecycleListener","added","trigger","removed","TriggerPopoverActiveAria","popoverId","highlightedItemId","TriggerPopoverRootContextValue","register","getTriggers","ReadonlyMap","subscribe","listener","subscribeLifecycle","getActiveAria","subscribeAria","TriggerPopoverAriaPublish","setActiveAria","aria","TriggerPopoverRootContext","TriggerPopoverAriaPublishContext","useTriggerPopoverRootContext","ctx","Error","useTriggerPopoverRootContextOptional","useTriggerPopoverAriaPublish","useTriggerPopoverTriggers","EMPTY_TRIGGERS","Map","noopSubscribe","getEmptyTriggers","useTriggerPopoverTriggersOptional","getNullAria","useTriggerPopoverActiveAriaOptional","ComposerPrimitiveTriggerPopoverRoot","Props","children","useSimpleSubscribable","$","t0","Symbol","for","Set","listenersRef","t1","current","notify","t2","listener_0","add","delete","t3","TriggerPopoverRootInner","triggersRef","lifecycleListenersRef","has","process","env","NODE_ENV","console","warn","_temp","existing","values","startsWith","next","set","l","after","l_0","t4","t5","activeAriaRef","activeAriaCharRef","notifyAria","t6","char_0","prev","t7","t8","value","t9","ariaPublishValue","t10","t11","existingRegistry","displayName","_c"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverRootContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useSyncExternalStore,\n type FC,\n type ReactNode,\n} from \"react\";\nimport {\n ComposerInputPluginProvider,\n useComposerInputPluginRegistryOptional,\n} from \"../ComposerInputPluginContext\";\nimport type { TriggerPopoverResourceOutput } from \"./TriggerPopoverResource\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\nimport type { TriggerMatcher } from \"./detectTrigger\";\n\nexport type RegisteredTrigger = {\n readonly char: string;\n readonly matcher?: TriggerMatcher | undefined;\n /** Behavior contributed by a child `TriggerPopover.Directive` / `.Action`. */\n readonly behavior?: TriggerBehavior;\n readonly resource: TriggerPopoverResourceOutput;\n};\n\nexport type TriggerPopoverLifecycleListener = {\n added(trigger: RegisteredTrigger): void;\n removed(char: string): void;\n};\n\n/**\n * ARIA descriptor of the popover that is currently open. Consumed by the\n * focused element (typically the composer textarea) so it can advertise the\n * combobox relationship per the WAI-ARIA editable combobox pattern.\n */\nexport type TriggerPopoverActiveAria = {\n popoverId: string;\n highlightedItemId: string | undefined;\n};\n\nexport type TriggerPopoverRootContextValue = {\n register(trigger: RegisteredTrigger): () => void;\n getTriggers(): ReadonlyMap<string, RegisteredTrigger>;\n subscribe(listener: () => void): () => void;\n /** Subscribe to per-trigger add/remove events. */\n subscribeLifecycle(listener: TriggerPopoverLifecycleListener): () => void;\n /** ARIA descriptor of the open popover, or null if none is open. */\n getActiveAria(): TriggerPopoverActiveAria | null;\n /** Subscribe to changes in the active ARIA descriptor. */\n subscribeAria(listener: () => void): () => void;\n};\n\n/**\n * Write-side of the ARIA descriptor, scoped to `TriggerPopover` children of a\n * `TriggerPopoverRoot`. Intentionally not exposed on the public root context\n * value: external consumers can read ARIA state but cannot publish or clear it.\n */\ntype TriggerPopoverAriaPublish = {\n setActiveAria(char: string, aria: TriggerPopoverActiveAria | null): void;\n};\n\nconst TriggerPopoverRootContext =\n createContext<TriggerPopoverRootContextValue | null>(null);\n\nconst TriggerPopoverAriaPublishContext =\n createContext<TriggerPopoverAriaPublish | null>(null);\n\nexport const useTriggerPopoverRootContext = () => {\n const ctx = useContext(TriggerPopoverRootContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverRootContext must be used within ComposerPrimitive.TriggerPopoverRoot\",\n );\n return ctx;\n};\n\nexport const useTriggerPopoverRootContextOptional = () =>\n useContext(TriggerPopoverRootContext);\n\n/**\n * Internal hook used by `TriggerPopover` children to publish their open and\n * highlight state. Not exported from the trigger module.\n */\nexport const useTriggerPopoverAriaPublish = (): TriggerPopoverAriaPublish => {\n const ctx = useContext(TriggerPopoverAriaPublishContext);\n if (!ctx)\n throw new Error(\n \"useTriggerPopoverAriaPublish must be used within ComposerPrimitive.TriggerPopoverRoot\",\n );\n return ctx;\n};\n\n/**\n * Live map of registered triggers, re-rendering on change. Prefer\n * `subscribeLifecycle` for incremental add/remove handling.\n */\nexport const useTriggerPopoverTriggers = () => {\n const ctx = useTriggerPopoverRootContext();\n return useSyncExternalStore(ctx.subscribe, ctx.getTriggers, ctx.getTriggers);\n};\n\nconst EMPTY_TRIGGERS: ReadonlyMap<string, RegisteredTrigger> = new Map();\nconst noopSubscribe = () => () => {};\nconst getEmptyTriggers = () => EMPTY_TRIGGERS;\n\n/** Like `useTriggerPopoverTriggers` but returns an empty map outside a root. */\nexport const useTriggerPopoverTriggersOptional = () => {\n const ctx = useTriggerPopoverRootContextOptional();\n return useSyncExternalStore(\n ctx ? ctx.subscribe : noopSubscribe,\n ctx ? ctx.getTriggers : getEmptyTriggers,\n ctx ? ctx.getTriggers : getEmptyTriggers,\n );\n};\n\nconst getNullAria = () => null;\n\n/**\n * Returns the ARIA descriptor of the currently open trigger popover, or\n * `null` if none is open or the consumer is rendered outside a\n * `TriggerPopoverRoot`.\n */\nexport const useTriggerPopoverActiveAriaOptional =\n (): TriggerPopoverActiveAria | null => {\n const ctx = useTriggerPopoverRootContextOptional();\n return useSyncExternalStore(\n ctx ? ctx.subscribeAria : noopSubscribe,\n ctx ? ctx.getActiveAria : getNullAria,\n ctx ? ctx.getActiveAria : getNullAria,\n );\n };\n\nexport namespace ComposerPrimitiveTriggerPopoverRoot {\n export type Props = {\n children: ReactNode;\n };\n}\n\n/**\n * Local helper for the simple \"notify-all listeners\" subscribable pattern.\n * Used twice in this file (trigger registry, active ARIA); kept inline to\n * avoid pulling a single-use abstraction into the wider tree.\n */\nfunction useSimpleSubscribable() {\n const listenersRef = useRef<Set<() => void>>(new Set());\n const notify = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n const subscribe = useCallback((listener: () => void) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n }, []);\n return { notify, subscribe };\n}\n\nconst TriggerPopoverRootInner: FC<\n ComposerPrimitiveTriggerPopoverRoot.Props\n> = ({ children }) => {\n const triggersRef = useRef<ReadonlyMap<string, RegisteredTrigger>>(new Map());\n const lifecycleListenersRef = useRef<Set<TriggerPopoverLifecycleListener>>(\n new Set(),\n );\n\n const { notify, subscribe } = useSimpleSubscribable();\n\n const register = useCallback<TriggerPopoverRootContextValue[\"register\"]>(\n (trigger) => {\n const { char } = trigger;\n if (triggersRef.current.has(char)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[assistant-ui] Duplicate TriggerPopover for char \"${char}\". Ignoring the second registration.`,\n );\n }\n return () => {};\n }\n if (process.env.NODE_ENV !== \"production\") {\n for (const existing of triggersRef.current.values()) {\n if (\n char.startsWith(existing.char) ||\n existing.char.startsWith(char)\n ) {\n console.warn(\n `[assistant-ui] Trigger prefix collision between \"${existing.char}\" and \"${char}\". One char is a prefix of the other; only one will match reliably.`,\n );\n }\n }\n }\n const next = new Map(triggersRef.current);\n next.set(char, trigger);\n triggersRef.current = next;\n notify();\n for (const l of lifecycleListenersRef.current) l.added(trigger);\n return () => {\n const after = new Map(triggersRef.current);\n after.delete(char);\n triggersRef.current = after;\n notify();\n for (const l of lifecycleListenersRef.current) l.removed(char);\n };\n },\n [notify],\n );\n\n const getTriggers = useCallback<\n TriggerPopoverRootContextValue[\"getTriggers\"]\n >(() => triggersRef.current, []);\n\n const subscribeLifecycle = useCallback<\n TriggerPopoverRootContextValue[\"subscribeLifecycle\"]\n >((listener) => {\n lifecycleListenersRef.current.add(listener);\n return () => {\n lifecycleListenersRef.current.delete(listener);\n };\n }, []);\n\n const activeAriaRef = useRef<TriggerPopoverActiveAria | null>(null);\n const activeAriaCharRef = useRef<string | null>(null);\n const { notify: notifyAria, subscribe: subscribeAria } =\n useSimpleSubscribable();\n\n const setActiveAria = useCallback<TriggerPopoverAriaPublish[\"setActiveAria\"]>(\n (char, aria) => {\n if (aria === null) {\n if (activeAriaCharRef.current !== char) return;\n activeAriaRef.current = null;\n activeAriaCharRef.current = null;\n notifyAria();\n return;\n }\n const prev = activeAriaRef.current;\n if (\n activeAriaCharRef.current === char &&\n prev !== null &&\n prev.popoverId === aria.popoverId &&\n prev.highlightedItemId === aria.highlightedItemId\n ) {\n return;\n }\n activeAriaRef.current = aria;\n activeAriaCharRef.current = char;\n notifyAria();\n },\n [notifyAria],\n );\n\n const getActiveAria = useCallback<\n TriggerPopoverRootContextValue[\"getActiveAria\"]\n >(() => activeAriaRef.current, []);\n\n const value = useMemo<TriggerPopoverRootContextValue>(\n () => ({\n register,\n getTriggers,\n subscribe,\n subscribeLifecycle,\n getActiveAria,\n subscribeAria,\n }),\n [\n register,\n getTriggers,\n subscribe,\n subscribeLifecycle,\n getActiveAria,\n subscribeAria,\n ],\n );\n\n const ariaPublishValue = useMemo<TriggerPopoverAriaPublish>(\n () => ({ setActiveAria }),\n [setActiveAria],\n );\n\n return (\n <TriggerPopoverRootContext.Provider value={value}>\n <TriggerPopoverAriaPublishContext.Provider value={ariaPublishValue}>\n {children}\n </TriggerPopoverAriaPublishContext.Provider>\n </TriggerPopoverRootContext.Provider>\n );\n};\n\n/**\n * Provider that groups one or more `TriggerPopover` declarations. Each trigger\n * is identified by its `char` (unique within the root). Behavior is contributed\n * by a child `TriggerPopover.Directive` or `TriggerPopover.Action`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopoverRoot>\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"@\" adapter={mentionAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive formatter={formatter} />\n * ...\n * </ComposerPrimitive.Unstable_TriggerPopover>\n *\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"/\" adapter={slashAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Action onExecute={handler} />\n * ...\n * </ComposerPrimitive.Unstable_TriggerPopover>\n *\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input />\n * </ComposerPrimitive.Root>\n * </ComposerPrimitive.Unstable_TriggerPopoverRoot>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverRoot: FC<\n ComposerPrimitiveTriggerPopoverRoot.Props\n> = ({ children }) => {\n const existingRegistry = useComposerInputPluginRegistryOptional();\n\n if (existingRegistry) {\n return <TriggerPopoverRootInner>{children}</TriggerPopoverRootInner>;\n }\n\n return (\n <ComposerInputPluginProvider>\n <TriggerPopoverRootInner>{children}</TriggerPopoverRootInner>\n </ComposerInputPluginProvider>\n );\n};\n\nComposerPrimitiveTriggerPopoverRoot.displayName =\n \"ComposerPrimitive.TriggerPopoverRoot\";\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ComposerPrimitiveTriggerPopoverRoot","useTriggerPopoverRootContext","useTriggerPopoverRootContextOptional","useTriggerPopoverTriggers","useTriggerPopoverTriggersOptional","RegisteredTrigger","TriggerPopoverRootContextValue","useTriggerPopoverScopeContext","useTriggerPopoverScopeContextOptional","ComposerPrimitiveTriggerPopoverCategories","ComposerPrimitiveTriggerPopoverCategoryItem","ComposerPrimitiveTriggerPopoverItems","ComposerPrimitiveTriggerPopoverItem","ComposerPrimitiveTriggerPopoverBack","TriggerBehavior","TriggerMatch","TriggerMatcher","ComposerPrimitiveTriggerPopover","Base","ComposerPrimitiveTriggerPopoverAction","ComposerPrimitiveTriggerPopoverDirective","Object","assign","Directive","Action"],"sources":["../../../../src/primitives/composer/trigger/index.ts"],"sourcesContent":["export {\n ComposerPrimitiveTriggerPopoverRoot,\n useTriggerPopoverRootContext,\n useTriggerPopoverRootContextOptional,\n useTriggerPopoverTriggers,\n useTriggerPopoverTriggersOptional,\n type RegisteredTrigger,\n type TriggerPopoverRootContextValue,\n} from \"./TriggerPopoverRootContext\";\nexport {\n useTriggerPopoverScopeContext,\n useTriggerPopoverScopeContextOptional,\n} from \"./TriggerPopover\";\nexport {\n ComposerPrimitiveTriggerPopoverCategories,\n ComposerPrimitiveTriggerPopoverCategoryItem,\n} from \"./TriggerPopoverCategories\";\nexport {\n ComposerPrimitiveTriggerPopoverItems,\n ComposerPrimitiveTriggerPopoverItem,\n} from \"./TriggerPopoverItems\";\nexport { ComposerPrimitiveTriggerPopoverBack } from \"./TriggerPopoverBack\";\nexport type { TriggerBehavior } from \"./triggerSelectionResource\";\nexport type { TriggerMatch, TriggerMatcher } from \"./detectTrigger\";\n\nimport { ComposerPrimitiveTriggerPopover as Base } from \"./TriggerPopover\";\nimport { ComposerPrimitiveTriggerPopoverAction } from \"./TriggerPopoverAction\";\nimport { ComposerPrimitiveTriggerPopoverDirective } from \"./TriggerPopoverDirective\";\n\nexport const ComposerPrimitiveTriggerPopover = Object.assign(Base, {\n Directive: ComposerPrimitiveTriggerPopoverDirective,\n Action: ComposerPrimitiveTriggerPopoverAction,\n});\n"],"mappings":";;;;;;;;AA6BA,MAAaiB,kCAAkCI,OAAOC,OAAOJ,mCAAM;CACjEK,WAAWH;CACXI,QAAQL;AACV,CAAC"}
1
+ {"version":3,"file":"index.js","names":["ComposerPrimitiveTriggerPopoverRoot","useTriggerPopoverRootContext","useTriggerPopoverRootContextOptional","useTriggerPopoverTriggers","useTriggerPopoverTriggersOptional","RegisteredTrigger","TriggerPopoverRootContextValue","useTriggerPopoverScopeContext","useTriggerPopoverScopeContextOptional","ComposerPrimitiveTriggerPopoverCategories","ComposerPrimitiveTriggerPopoverCategoryItem","ComposerPrimitiveTriggerPopoverItems","ComposerPrimitiveTriggerPopoverItem","ComposerPrimitiveTriggerPopoverBack","TriggerBehavior","TriggerMatch","TriggerMatcher","ComposerPrimitiveTriggerPopover","Base","ComposerPrimitiveTriggerPopoverAction","ComposerPrimitiveTriggerPopoverDirective","Object","assign","Directive","Action","Base"],"sources":["../../../../src/primitives/composer/trigger/index.ts"],"sourcesContent":["export {\n ComposerPrimitiveTriggerPopoverRoot,\n useTriggerPopoverRootContext,\n useTriggerPopoverRootContextOptional,\n useTriggerPopoverTriggers,\n useTriggerPopoverTriggersOptional,\n type RegisteredTrigger,\n type TriggerPopoverRootContextValue,\n} from \"./TriggerPopoverRootContext\";\nexport {\n useTriggerPopoverScopeContext,\n useTriggerPopoverScopeContextOptional,\n} from \"./TriggerPopover\";\nexport {\n ComposerPrimitiveTriggerPopoverCategories,\n ComposerPrimitiveTriggerPopoverCategoryItem,\n} from \"./TriggerPopoverCategories\";\nexport {\n ComposerPrimitiveTriggerPopoverItems,\n ComposerPrimitiveTriggerPopoverItem,\n} from \"./TriggerPopoverItems\";\nexport { ComposerPrimitiveTriggerPopoverBack } from \"./TriggerPopoverBack\";\nexport type { TriggerBehavior } from \"./triggerSelectionResource\";\nexport type { TriggerMatch, TriggerMatcher } from \"./detectTrigger\";\n\nimport { ComposerPrimitiveTriggerPopover as Base } from \"./TriggerPopover\";\nimport { ComposerPrimitiveTriggerPopoverAction } from \"./TriggerPopoverAction\";\nimport { ComposerPrimitiveTriggerPopoverDirective } from \"./TriggerPopoverDirective\";\n\nexport const ComposerPrimitiveTriggerPopover = Object.assign(Base, {\n Directive: ComposerPrimitiveTriggerPopoverDirective,\n Action: ComposerPrimitiveTriggerPopoverAction,\n});\n"],"mappings":";;;;;;;;AA6BA,MAAaiB,kCAAkCI,OAAOC,OAAOJ,mCAAM;CACjEK,WAAWH;CACXI,QAAQL;AACV,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"triggerDetectionResource.js","names":["useMemo","useState","resource","detectTrigger","TriggerMatch","TriggerMatcher","DetectedTrigger","TriggerDetectionResourceOutput","trigger","query","setCursorPosition","pos","useTriggerDetectionResource","t0","$","_c","text","triggerChar","matcher","cursorPosition","length","Math","min","t1","t2","TriggerDetectionResource"],"sources":["../../../../src/primitives/composer/trigger/triggerDetectionResource.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n detectTrigger,\n type TriggerMatch,\n type TriggerMatcher,\n} from \"./detectTrigger\";\n\n/** Detected trigger position within the composer text. */\nexport type DetectedTrigger = TriggerMatch;\n\nexport type TriggerDetectionResourceOutput = {\n /** Detected trigger (or `null` when inactive). */\n readonly trigger: DetectedTrigger | null;\n /** Current query string (empty when no trigger active). */\n readonly query: string;\n /** Update the tracked cursor position (wired to composer input). */\n setCursorPosition(pos: number): void;\n};\n\n/** Tracks cursor position and derives the active trigger + query from composer text. */\nconst useTriggerDetectionResource = ({\n text,\n triggerChar,\n matcher,\n}: {\n text: string;\n triggerChar: string;\n matcher?: TriggerMatcher | undefined;\n}): TriggerDetectionResourceOutput => {\n const [cursorPosition, setCursorPosition] = useState(text.length);\n\n const trigger = useMemo(() => {\n const pos = Math.min(cursorPosition, text.length);\n return detectTrigger(text, triggerChar, pos, matcher);\n }, [cursorPosition, matcher, text, triggerChar]);\n\n const query = trigger?.query ?? \"\";\n\n return {\n trigger,\n query,\n setCursorPosition,\n };\n};\n\nexport const TriggerDetectionResource = resource(useTriggerDetectionResource);\n"],"mappings":";;;;;;AAqBA,MAAMY,+BAA8BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,MAAAC,aAAAC,YAAAL;CASnC,MAAA,CAAAM,gBAAAT,qBAA4CT,SAASe,KAAII,MAAO;CAG9D,MAAAT,MAAYU,KAAIC,IAAKH,gBAAgBH,KAAII,MAAO;CAAE,IAAAG;CAAA,IAAAT,EAAA,OAAAI,WAAAJ,EAAA,OAAAH,OAAAG,EAAA,OAAAE,QAAAF,EAAA,OAAAG,aAAA;EAC3CM,KAAApB,cAAca,MAAMC,aAAaN,KAAKO,OAAO;EAACJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAH;EAAAG,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAFvD,MAAAN,UAEEe;CAGF,MAAAd,QAAcD,SAAOC,SAAP;CAAqB,IAAAe;CAAA,IAAAV,EAAA,OAAAL,SAAAK,EAAA,OAAAN,SAAA;EAE5BgB,KAAA;GAAAhB;GAAAC;GAAAC;EAIP;EAACI,EAAA,KAAAL;EAAAK,EAAA,KAAAN;EAAAM,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,OAJMU;AAIN;AAGH,MAAaC,2BAA2BvB,SAASU,2BAA2B"}
1
+ {"version":3,"file":"triggerDetectionResource.js","names":["useMemo","useState","resource","detectTrigger","TriggerMatch","TriggerMatcher","DetectedTrigger","TriggerDetectionResourceOutput","trigger","query","setCursorPosition","pos","useTriggerDetectionResource","t0","$","_c","text","triggerChar","matcher","cursorPosition","length","Math","min","t1","t2","TriggerDetectionResource","_c"],"sources":["../../../../src/primitives/composer/trigger/triggerDetectionResource.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n detectTrigger,\n type TriggerMatch,\n type TriggerMatcher,\n} from \"./detectTrigger\";\n\n/** Detected trigger position within the composer text. */\nexport type DetectedTrigger = TriggerMatch;\n\nexport type TriggerDetectionResourceOutput = {\n /** Detected trigger (or `null` when inactive). */\n readonly trigger: DetectedTrigger | null;\n /** Current query string (empty when no trigger active). */\n readonly query: string;\n /** Update the tracked cursor position (wired to composer input). */\n setCursorPosition(pos: number): void;\n};\n\n/** Tracks cursor position and derives the active trigger + query from composer text. */\nconst useTriggerDetectionResource = ({\n text,\n triggerChar,\n matcher,\n}: {\n text: string;\n triggerChar: string;\n matcher?: TriggerMatcher | undefined;\n}): TriggerDetectionResourceOutput => {\n const [cursorPosition, setCursorPosition] = useState(text.length);\n\n const trigger = useMemo(() => {\n const pos = Math.min(cursorPosition, text.length);\n return detectTrigger(text, triggerChar, pos, matcher);\n }, [cursorPosition, matcher, text, triggerChar]);\n\n const query = trigger?.query ?? \"\";\n\n return {\n trigger,\n query,\n setCursorPosition,\n };\n};\n\nexport const TriggerDetectionResource = resource(useTriggerDetectionResource);\n"],"mappings":";;;;;;AAqBA,MAAMY,+BAA8BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,MAAAC,aAAAC,YAAAL;CASnC,MAAA,CAAAM,gBAAAT,qBAA4CT,SAASe,KAAII,MAAO;CAG9D,MAAAT,MAAYU,KAAIC,IAAKH,gBAAgBH,KAAII,MAAO;CAAE,IAAAG;CAAA,IAAAT,EAAA,OAAAI,WAAAJ,EAAA,OAAAH,OAAAG,EAAA,OAAAE,QAAAF,EAAA,OAAAG,aAAA;EAC3CM,KAAApB,cAAca,MAAMC,aAAaN,KAAKO,OAAO;EAACJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAH;EAAAG,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAFvD,MAAAN,UAEEe;CAGF,MAAAd,QAAcD,SAAOC,SAAP;CAAqB,IAAAe;CAAA,IAAAV,EAAA,OAAAL,SAAAK,EAAA,OAAAN,SAAA;EAE5BgB,KAAA;GAAAhB;GAAAC;GAAAC;EAIP;EAACI,EAAA,KAAAL;EAAAK,EAAA,KAAAN;EAAAM,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,OAJMU;AAIN;AAGH,MAAaC,2BAA2BvB,SAASU,2BAA2B"}
@@ -1 +1 @@
1
- {"version":3,"file":"triggerKeyboardResource.js","names":["useEffectEvent","useState","resource","Unstable_TriggerCategory","Unstable_TriggerItem","isTriggerItem","x","TriggerPopoverKeyEvent","key","shiftKey","preventDefault","TriggerKeyboardResourceOutput","highlightedIndex","highlightedItemId","highlightIndex","index","handleKeyDown","e","useTriggerKeyboardResource","t0","$","_c","navigableList","isSearchMode","activeCategoryId","query","popoverId","open","selectItem","selectCategory","goBack","close","setHighlightedIndex","t1","highlightScope","setHighlightScope","t2","length","t3","prev_0","len_0","len","prev","item","id","highlightedEntry","undefined","t4","TriggerKeyboardResource"],"sources":["../../../../src/primitives/composer/trigger/triggerKeyboardResource.ts"],"sourcesContent":["import { useEffectEvent, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\n\n/** Relies on `Unstable_TriggerCategory` never carrying a `type` field. */\nfunction isTriggerItem(\n x: Unstable_TriggerItem | Unstable_TriggerCategory,\n): x is Unstable_TriggerItem {\n return \"type\" in x;\n}\n\n/** Key event shape accepted by the keyboard handler. */\nexport type TriggerPopoverKeyEvent = {\n readonly key: string;\n readonly shiftKey: boolean;\n preventDefault(): void;\n};\n\nexport type TriggerKeyboardResourceOutput = {\n /** Index of the currently highlighted entry within the navigable list. */\n readonly highlightedIndex: number;\n /** ID of the currently highlighted item (for `aria-activedescendant`). */\n readonly highlightedItemId: string | undefined;\n /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */\n highlightIndex(index: number): void;\n /** Handle a key event; returns `true` if it was consumed. */\n handleKeyDown(e: TriggerPopoverKeyEvent): boolean;\n};\n\n/**\n * Owns keyboard-driven highlight state for the popover. Delegates selection,\n * category drill-in, back, and close to the callbacks supplied by the parent.\n */\nconst useTriggerKeyboardResource = ({\n navigableList,\n isSearchMode,\n activeCategoryId,\n query,\n popoverId,\n open,\n selectItem,\n selectCategory,\n goBack,\n close,\n}: {\n navigableList: readonly (Unstable_TriggerCategory | Unstable_TriggerItem)[];\n isSearchMode: boolean;\n activeCategoryId: string | null;\n query: string;\n popoverId: string;\n open: boolean;\n selectItem: (item: Unstable_TriggerItem) => void;\n selectCategory: (categoryId: string) => void;\n goBack: () => void;\n close: () => void;\n}): TriggerKeyboardResourceOutput => {\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [highlightScope, setHighlightScope] = useState({\n navigableList,\n isSearchMode,\n activeCategoryId,\n });\n\n if (\n highlightScope.navigableList !== navigableList ||\n highlightScope.isSearchMode !== isSearchMode ||\n highlightScope.activeCategoryId !== activeCategoryId\n ) {\n setHighlightScope({ navigableList, isSearchMode, activeCategoryId });\n setHighlightedIndex(0);\n }\n\n const highlightIndex = useEffectEvent((index: number) => {\n if (index < 0 || index >= navigableList.length) return;\n if (index === highlightedIndex) return;\n setHighlightedIndex(index);\n });\n\n const handleKeyDown = useEffectEvent((e: TriggerPopoverKeyEvent): boolean => {\n if (!open) return false;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const len = navigableList.length;\n if (len === 0) return 0;\n return prev < len - 1 ? prev + 1 : 0;\n });\n return true;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const len = navigableList.length;\n if (len === 0) return 0;\n return prev > 0 ? prev - 1 : len - 1;\n });\n return true;\n }\n case \"Enter\":\n case \"Tab\": {\n if (e.shiftKey) return false;\n e.preventDefault();\n const item = navigableList[highlightedIndex];\n if (!item) return true;\n\n if (isTriggerItem(item)) {\n selectItem(item);\n } else {\n selectCategory(item.id);\n }\n return true;\n }\n case \"Escape\": {\n e.preventDefault();\n close();\n return true;\n }\n case \"Backspace\": {\n if (activeCategoryId && query === \"\") {\n e.preventDefault();\n goBack();\n return true;\n }\n return false;\n }\n default:\n return false;\n }\n });\n\n const highlightedEntry = navigableList[highlightedIndex];\n const highlightedItemId =\n open && highlightedEntry\n ? `${popoverId}-option-${highlightedEntry.id}`\n : undefined;\n\n return {\n highlightedIndex,\n highlightedItemId,\n highlightIndex,\n handleKeyDown,\n };\n};\n\nexport const TriggerKeyboardResource = resource(useTriggerKeyboardResource);\n"],"mappings":"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"}
1
+ {"version":3,"file":"triggerKeyboardResource.js","names":["useEffectEvent","useState","resource","Unstable_TriggerCategory","Unstable_TriggerItem","isTriggerItem","x","TriggerPopoverKeyEvent","key","shiftKey","preventDefault","TriggerKeyboardResourceOutput","highlightedIndex","highlightedItemId","highlightIndex","index","handleKeyDown","e","useTriggerKeyboardResource","t0","$","_c","navigableList","isSearchMode","activeCategoryId","query","popoverId","open","selectItem","selectCategory","goBack","close","setHighlightedIndex","t1","highlightScope","setHighlightScope","t2","length","t3","prev_0","len_0","len","prev","item","id","highlightedEntry","undefined","t4","TriggerKeyboardResource","_c"],"sources":["../../../../src/primitives/composer/trigger/triggerKeyboardResource.ts"],"sourcesContent":["import { useEffectEvent, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\n\n/** Relies on `Unstable_TriggerCategory` never carrying a `type` field. */\nfunction isTriggerItem(\n x: Unstable_TriggerItem | Unstable_TriggerCategory,\n): x is Unstable_TriggerItem {\n return \"type\" in x;\n}\n\n/** Key event shape accepted by the keyboard handler. */\nexport type TriggerPopoverKeyEvent = {\n readonly key: string;\n readonly shiftKey: boolean;\n preventDefault(): void;\n};\n\nexport type TriggerKeyboardResourceOutput = {\n /** Index of the currently highlighted entry within the navigable list. */\n readonly highlightedIndex: number;\n /** ID of the currently highlighted item (for `aria-activedescendant`). */\n readonly highlightedItemId: string | undefined;\n /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */\n highlightIndex(index: number): void;\n /** Handle a key event; returns `true` if it was consumed. */\n handleKeyDown(e: TriggerPopoverKeyEvent): boolean;\n};\n\n/**\n * Owns keyboard-driven highlight state for the popover. Delegates selection,\n * category drill-in, back, and close to the callbacks supplied by the parent.\n */\nconst useTriggerKeyboardResource = ({\n navigableList,\n isSearchMode,\n activeCategoryId,\n query,\n popoverId,\n open,\n selectItem,\n selectCategory,\n goBack,\n close,\n}: {\n navigableList: readonly (Unstable_TriggerCategory | Unstable_TriggerItem)[];\n isSearchMode: boolean;\n activeCategoryId: string | null;\n query: string;\n popoverId: string;\n open: boolean;\n selectItem: (item: Unstable_TriggerItem) => void;\n selectCategory: (categoryId: string) => void;\n goBack: () => void;\n close: () => void;\n}): TriggerKeyboardResourceOutput => {\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [highlightScope, setHighlightScope] = useState({\n navigableList,\n isSearchMode,\n activeCategoryId,\n });\n\n if (\n highlightScope.navigableList !== navigableList ||\n highlightScope.isSearchMode !== isSearchMode ||\n highlightScope.activeCategoryId !== activeCategoryId\n ) {\n setHighlightScope({ navigableList, isSearchMode, activeCategoryId });\n setHighlightedIndex(0);\n }\n\n const highlightIndex = useEffectEvent((index: number) => {\n if (index < 0 || index >= navigableList.length) return;\n if (index === highlightedIndex) return;\n setHighlightedIndex(index);\n });\n\n const handleKeyDown = useEffectEvent((e: TriggerPopoverKeyEvent): boolean => {\n if (!open) return false;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const len = navigableList.length;\n if (len === 0) return 0;\n return prev < len - 1 ? prev + 1 : 0;\n });\n return true;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const len = navigableList.length;\n if (len === 0) return 0;\n return prev > 0 ? prev - 1 : len - 1;\n });\n return true;\n }\n case \"Enter\":\n case \"Tab\": {\n if (e.shiftKey) return false;\n e.preventDefault();\n const item = navigableList[highlightedIndex];\n if (!item) return true;\n\n if (isTriggerItem(item)) {\n selectItem(item);\n } else {\n selectCategory(item.id);\n }\n return true;\n }\n case \"Escape\": {\n e.preventDefault();\n close();\n return true;\n }\n case \"Backspace\": {\n if (activeCategoryId && query === \"\") {\n e.preventDefault();\n goBack();\n return true;\n }\n return false;\n }\n default:\n return false;\n }\n });\n\n const highlightedEntry = navigableList[highlightedIndex];\n const highlightedItemId =\n open && highlightedEntry\n ? `${popoverId}-option-${highlightedEntry.id}`\n : undefined;\n\n return {\n highlightedIndex,\n highlightedItemId,\n highlightIndex,\n handleKeyDown,\n };\n};\n\nexport const TriggerKeyboardResource = resource(useTriggerKeyboardResource);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"triggerNavigationResource.js","names":["useEffectEvent","useMemo","useState","resource","Unstable_TriggerAdapter","Unstable_TriggerCategory","Unstable_TriggerItem","matchesTriggerItemQuery","TriggerNavigationResourceOutput","categories","items","isSearchMode","activeCategoryId","navigableList","selectCategory","categoryId","goBack","useTriggerNavigationResource","t0","$","_c","adapter","query","open","setActiveCategoryId","wasOpen","setWasOpen","t1","bb0","t2","Symbol","for","effectiveActiveCategoryId","bb1","t3","categoryItems","allItems","bb2","length","search","t4","all","lower","toLowerCase","cat","item","id","push","searchResults","bb3","t5","lower_0","filter","cat_0","label","includes","filteredCategories","bb4","t6","lower_1","item_0","filteredItems","bb5","t7","t8","t9","TriggerNavigationResource"],"sources":["../../../../src/primitives/composer/trigger/triggerNavigationResource.ts"],"sourcesContent":["import { useEffectEvent, useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { matchesTriggerItemQuery } from \"./matchesTriggerItemQuery\";\n\nexport type TriggerNavigationResourceOutput = {\n /** Filtered categories visible in the list (empty in search mode). */\n readonly categories: readonly Unstable_TriggerCategory[];\n /** Filtered items visible in the list. */\n readonly items: readonly Unstable_TriggerItem[];\n /** `true` when the current list is search results rather than categories. */\n readonly isSearchMode: boolean;\n /** Currently drilled-into category id (or `null` for the top level). */\n readonly activeCategoryId: string | null;\n /** Flat list used for keyboard navigation (categories or items). */\n readonly navigableList: readonly (\n | Unstable_TriggerCategory\n | Unstable_TriggerItem\n )[];\n /** Drill into a category. */\n selectCategory(categoryId: string): void;\n /** Return to the top-level category list. */\n goBack(): void;\n};\n\n/**\n * Computes categories, items, search results, and navigation state from the\n * adapter + current query. Pure derivation — no side effects on the composer.\n */\nconst useTriggerNavigationResource = ({\n adapter,\n query,\n open,\n}: {\n adapter: Unstable_TriggerAdapter | undefined;\n query: string;\n open: boolean;\n}): TriggerNavigationResourceOutput => {\n const [activeCategoryId, setActiveCategoryId] = useState<string | null>(null);\n const [wasOpen, setWasOpen] = useState(open);\n\n if (wasOpen !== open) {\n setWasOpen(open);\n if (!open) setActiveCategoryId(null);\n }\n\n const categories = useMemo<readonly Unstable_TriggerCategory[]>(() => {\n if (!open || !adapter) return [];\n return adapter.categories();\n }, [open, adapter]);\n\n const effectiveActiveCategoryId = open ? activeCategoryId : null;\n\n const allItems = useMemo<readonly Unstable_TriggerItem[]>(() => {\n if (!effectiveActiveCategoryId || !adapter) return [];\n return adapter.categoryItems(effectiveActiveCategoryId);\n }, [effectiveActiveCategoryId, adapter]);\n\n const searchResults = useMemo<readonly Unstable_TriggerItem[] | null>(() => {\n if (!open || !adapter || effectiveActiveCategoryId) return null;\n // If categories exist and query is empty, show categories first (not search)\n if (!query && categories.length > 0) return null;\n if (adapter.search) return adapter.search(query);\n\n // fallback: no adapter.search\n const all: Unstable_TriggerItem[] = [];\n const lower = query.toLowerCase();\n for (const cat of categories) {\n for (const item of adapter.categoryItems(cat.id)) {\n if (matchesTriggerItemQuery(item, lower)) {\n all.push(item);\n }\n }\n }\n return all;\n }, [open, adapter, query, effectiveActiveCategoryId, categories]);\n\n const isSearchMode = searchResults !== null;\n\n const filteredCategories = useMemo(() => {\n if (isSearchMode) return [];\n if (!query) return categories;\n const lower = query.toLowerCase();\n return categories.filter((cat) => cat.label.toLowerCase().includes(lower));\n }, [categories, query, isSearchMode]);\n\n const filteredItems = useMemo(() => {\n if (isSearchMode) return searchResults ?? [];\n if (!query) return allItems;\n const lower = query.toLowerCase();\n return allItems.filter((item) => matchesTriggerItemQuery(item, lower));\n }, [allItems, query, isSearchMode, searchResults]);\n\n const navigableList = useMemo(() => {\n if (isSearchMode) return searchResults ?? [];\n if (effectiveActiveCategoryId) return filteredItems;\n return filteredCategories;\n }, [\n isSearchMode,\n searchResults,\n effectiveActiveCategoryId,\n filteredItems,\n filteredCategories,\n ]);\n\n const selectCategory = useEffectEvent((categoryId: string) => {\n setActiveCategoryId(categoryId);\n });\n\n const goBack = useEffectEvent(() => {\n setActiveCategoryId(null);\n });\n\n return {\n categories: filteredCategories,\n items: filteredItems,\n isSearchMode,\n activeCategoryId: effectiveActiveCategoryId,\n navigableList,\n selectCategory,\n goBack,\n };\n};\n\nexport const TriggerNavigationResource = resource(useTriggerNavigationResource);\n"],"mappings":"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"}
1
+ {"version":3,"file":"triggerNavigationResource.js","names":["useEffectEvent","useMemo","useState","resource","Unstable_TriggerAdapter","Unstable_TriggerCategory","Unstable_TriggerItem","matchesTriggerItemQuery","TriggerNavigationResourceOutput","categories","items","isSearchMode","activeCategoryId","navigableList","selectCategory","categoryId","goBack","useTriggerNavigationResource","t0","$","_c","adapter","query","open","setActiveCategoryId","wasOpen","setWasOpen","t1","bb0","t2","Symbol","for","effectiveActiveCategoryId","bb1","t3","categoryItems","allItems","bb2","length","search","t4","all","lower","toLowerCase","cat","item","id","push","searchResults","bb3","t5","lower_0","filter","cat_0","label","includes","filteredCategories","bb4","t6","lower_1","item_0","filteredItems","bb5","t7","t8","t9","TriggerNavigationResource","_c"],"sources":["../../../../src/primitives/composer/trigger/triggerNavigationResource.ts"],"sourcesContent":["import { useEffectEvent, useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { matchesTriggerItemQuery } from \"./matchesTriggerItemQuery\";\n\nexport type TriggerNavigationResourceOutput = {\n /** Filtered categories visible in the list (empty in search mode). */\n readonly categories: readonly Unstable_TriggerCategory[];\n /** Filtered items visible in the list. */\n readonly items: readonly Unstable_TriggerItem[];\n /** `true` when the current list is search results rather than categories. */\n readonly isSearchMode: boolean;\n /** Currently drilled-into category id (or `null` for the top level). */\n readonly activeCategoryId: string | null;\n /** Flat list used for keyboard navigation (categories or items). */\n readonly navigableList: readonly (\n | Unstable_TriggerCategory\n | Unstable_TriggerItem\n )[];\n /** Drill into a category. */\n selectCategory(categoryId: string): void;\n /** Return to the top-level category list. */\n goBack(): void;\n};\n\n/**\n * Computes categories, items, search results, and navigation state from the\n * adapter + current query. Pure derivation — no side effects on the composer.\n */\nconst useTriggerNavigationResource = ({\n adapter,\n query,\n open,\n}: {\n adapter: Unstable_TriggerAdapter | undefined;\n query: string;\n open: boolean;\n}): TriggerNavigationResourceOutput => {\n const [activeCategoryId, setActiveCategoryId] = useState<string | null>(null);\n const [wasOpen, setWasOpen] = useState(open);\n\n if (wasOpen !== open) {\n setWasOpen(open);\n if (!open) setActiveCategoryId(null);\n }\n\n const categories = useMemo<readonly Unstable_TriggerCategory[]>(() => {\n if (!open || !adapter) return [];\n return adapter.categories();\n }, [open, adapter]);\n\n const effectiveActiveCategoryId = open ? activeCategoryId : null;\n\n const allItems = useMemo<readonly Unstable_TriggerItem[]>(() => {\n if (!effectiveActiveCategoryId || !adapter) return [];\n return adapter.categoryItems(effectiveActiveCategoryId);\n }, [effectiveActiveCategoryId, adapter]);\n\n const searchResults = useMemo<readonly Unstable_TriggerItem[] | null>(() => {\n if (!open || !adapter || effectiveActiveCategoryId) return null;\n // If categories exist and query is empty, show categories first (not search)\n if (!query && categories.length > 0) return null;\n if (adapter.search) return adapter.search(query);\n\n // fallback: no adapter.search\n const all: Unstable_TriggerItem[] = [];\n const lower = query.toLowerCase();\n for (const cat of categories) {\n for (const item of adapter.categoryItems(cat.id)) {\n if (matchesTriggerItemQuery(item, lower)) {\n all.push(item);\n }\n }\n }\n return all;\n }, [open, adapter, query, effectiveActiveCategoryId, categories]);\n\n const isSearchMode = searchResults !== null;\n\n const filteredCategories = useMemo(() => {\n if (isSearchMode) return [];\n if (!query) return categories;\n const lower = query.toLowerCase();\n return categories.filter((cat) => cat.label.toLowerCase().includes(lower));\n }, [categories, query, isSearchMode]);\n\n const filteredItems = useMemo(() => {\n if (isSearchMode) return searchResults ?? [];\n if (!query) return allItems;\n const lower = query.toLowerCase();\n return allItems.filter((item) => matchesTriggerItemQuery(item, lower));\n }, [allItems, query, isSearchMode, searchResults]);\n\n const navigableList = useMemo(() => {\n if (isSearchMode) return searchResults ?? [];\n if (effectiveActiveCategoryId) return filteredItems;\n return filteredCategories;\n }, [\n isSearchMode,\n searchResults,\n effectiveActiveCategoryId,\n filteredItems,\n filteredCategories,\n ]);\n\n const selectCategory = useEffectEvent((categoryId: string) => {\n setActiveCategoryId(categoryId);\n });\n\n const goBack = useEffectEvent(() => {\n setActiveCategoryId(null);\n });\n\n return {\n categories: filteredCategories,\n items: filteredItems,\n isSearchMode,\n activeCategoryId: effectiveActiveCategoryId,\n navigableList,\n selectCategory,\n goBack,\n };\n};\n\nexport const TriggerNavigationResource = resource(useTriggerNavigationResource);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"triggerSelectionResource.js","names":["useEffectEvent","useRef","resource","Unstable_DirectiveFormatter","Unstable_TriggerItem","AssistantClient","DetectedTrigger","SelectItemOverride","item","TriggerBehavior","kind","formatter","onInserted","onExecute","removeOnExecute","TriggerSelectionResourceOutput","selectItem","close","registerSelectItemOverride","fn","useTriggerSelectionResource","t0","$","_c","behavior","trigger","aui","setCursorPosition","onSelected","selectItemOverrideRef","t1","Symbol","for","current","t2","currentText","composer","getState","text","before","slice","offset","after","endOffset","insertDirective","directive","serialize","setText","startsWith","length","t3","t4","TriggerSelectionResource"],"sources":["../../../../src/primitives/composer/trigger/triggerSelectionResource.ts"],"sourcesContent":["import { useEffectEvent, useRef } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport type { AssistantClient } from \"@assistant-ui/store\";\nimport type { DetectedTrigger } from \"./triggerDetectionResource\";\n\n/** External override for selection (used by Lexical's DirectivePlugin). */\nexport type SelectItemOverride = (item: Unstable_TriggerItem) => boolean;\n\nexport type TriggerBehavior =\n | {\n readonly kind: \"directive\";\n readonly formatter: Unstable_DirectiveFormatter;\n readonly onInserted?: (item: Unstable_TriggerItem) => void;\n }\n | {\n readonly kind: \"action\";\n readonly formatter: Unstable_DirectiveFormatter;\n readonly onExecute: (item: Unstable_TriggerItem) => void;\n readonly removeOnExecute?: boolean;\n };\n\nexport type TriggerSelectionResourceOutput = {\n /** Select an item — runs override (if any) then applies behavior. */\n selectItem(item: Unstable_TriggerItem): void;\n /** Close the popover (moves cursor before trigger to deactivate detection). */\n close(): void;\n /** Register a Lexical-style selection override. Returns unregister fn. */\n registerSelectItemOverride(fn: SelectItemOverride): () => void;\n};\n\n/** Owns composer text mutation + behavior dispatch on item selection. */\nconst useTriggerSelectionResource = ({\n behavior,\n trigger,\n aui,\n setCursorPosition,\n onSelected,\n}: {\n behavior: TriggerBehavior | undefined;\n trigger: DetectedTrigger | null;\n aui: AssistantClient;\n triggerChar: string;\n setCursorPosition: (pos: number) => void;\n /** Called after a successful selection so the parent can reset nav state. */\n onSelected: () => void;\n}): TriggerSelectionResourceOutput => {\n // Select-item override: lets Lexical's DirectivePlugin intercept selection\n // and drive its own node insertion.\n const selectItemOverrideRef = useRef<SelectItemOverride | null>(null);\n\n const registerSelectItemOverride = useEffectEvent(\n (fn: SelectItemOverride) => {\n selectItemOverrideRef.current = fn;\n return () => {\n if (selectItemOverrideRef.current === fn) {\n selectItemOverrideRef.current = null;\n }\n };\n },\n );\n\n const selectItem = useEffectEvent((item: Unstable_TriggerItem) => {\n if (!trigger || !behavior) return;\n\n if (selectItemOverrideRef.current?.(item)) {\n onSelected();\n return;\n }\n\n const currentText = aui.composer.getState().text;\n const before = currentText.slice(0, trigger.offset);\n const after = currentText.slice(trigger.endOffset);\n\n const insertDirective = () => {\n const directive = behavior.formatter.serialize(item);\n aui.composer.setText(\n before + directive + (after.startsWith(\" \") ? after : ` ${after}`),\n );\n setCursorPosition(before.length + directive.length + 1);\n };\n\n if (behavior.kind === \"directive\") {\n insertDirective();\n behavior.onInserted?.(item);\n } else {\n if (behavior.removeOnExecute) {\n aui.composer.setText(\n before + (after.startsWith(\" \") ? after.slice(1) : after),\n );\n setCursorPosition(before.length);\n } else {\n // Leave directive chip in the composer as an audit trail\n insertDirective();\n }\n behavior.onExecute(item);\n }\n\n onSelected();\n });\n\n const close = useEffectEvent(() => {\n onSelected();\n // Move cursor before the trigger so trigger detection deactivates\n if (trigger) {\n setCursorPosition(trigger.offset);\n }\n });\n\n return {\n selectItem,\n close,\n registerSelectItemOverride,\n };\n};\n\nexport const TriggerSelectionResource = resource(useTriggerSelectionResource);\n"],"mappings":";;;;;AAmCA,MAAMoB,+BAA8BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,UAAAC,SAAAC,KAAAC,mBAAAC,eAAAP;CAiBnC,MAAAQ,wBAA8B5B,OAAkC,IAAI;CAAE,IAAA6B;CAAA,IAAAR,EAAA,OAAAS,OAAAC,IAAA,2BAAA,GAAA;EAGpEF,MAAAX,OAAA;GACEU,sBAAqBI,UAAWd;GAAH,aACtB;IACL,IAAIU,sBAAqBI,YAAad,IACpCU,sBAAqBI,UAAW;GACjC;EACF;EACFX,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CARH,MAAAJ,6BAAmClB,eACjC8B,EAQF;CAAE,IAAAI;CAAA,IAAAZ,EAAA,OAAAI,OAAAJ,EAAA,OAAAE,YAAAF,EAAA,OAAAM,cAAAN,EAAA,OAAAK,qBAAAL,EAAA,OAAAG,SAAA;EAEgCS,MAAA1B,SAAA;GAChC,IAAI,CAACiB,WAAD,CAAaD,UAAQ;GAEzB,IAAIK,sBAAqBI,UAAWzB,IAAI,GAAC;IACvCoB,WAAW;IAAC;GAAA;GAId,MAAAO,cAAoBT,IAAGU,SAASC,SAAU,CAAC,CAAAC;GAC3C,MAAAC,SAAeJ,YAAWK,MAAO,GAAGf,QAAOgB,MAAO;GAClD,MAAAC,QAAcP,YAAWK,MAAOf,QAAOkB,SAAU;GAEjD,MAAAC,wBAAwB;IACtB,MAAAC,YAAkBrB,SAAQb,UAAUmC,UAAWtC,IAAI;IACnDkB,IAAGU,SAASW,QACVR,SAASM,aAAaH,MAAKM,WAAY,GAAyB,IAA1CN,QAAA,IAAoCA,QAC5D;IACAf,kBAAkBY,OAAMU,SAAUJ,UAASI,SAAU,CAAC;GAAC;GAGzD,IAAIzB,SAAQd,SAAU,aAAW;IAC/BkC,gBAAgB;IAChBpB,SAAQZ,aAAcJ,IAAI;GAAC,OAAA;IAE3B,IAAIgB,SAAQV,iBAAgB;KAC1BY,IAAGU,SAASW,QACVR,UAAUG,MAAKM,WAAY,GAA4B,IAArBN,MAAKF,MAAO,CAAS,IAA7CE,MACZ;KACAf,kBAAkBY,OAAMU,MAAO;IAAC,OAGhCL,gBAAgB;IAElBpB,SAAQX,UAAWL,IAAI;GAAC;GAG1BoB,WAAW;EAAC;EACbN,EAAA,KAAAI;EAAAJ,EAAA,KAAAE;EAAAF,EAAA,KAAAM;EAAAN,EAAA,KAAAK;EAAAL,EAAA,KAAAG;EAAAH,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CArCD,MAAAN,aAAmBhB,eAAekC,EAqCjC;CAAE,IAAAgB;CAAA,IAAA5B,EAAA,OAAAM,cAAAN,EAAA,OAAAK,qBAAAL,EAAA,OAAAG,SAAA;EAE0ByB,WAAA;GAC3BtB,WAAW;GAEX,IAAIH,SACFE,kBAAkBF,QAAOgB,MAAO;EACjC;EACFnB,EAAA,KAAAM;EAAAN,EAAA,KAAAK;EAAAL,EAAA,KAAAG;EAAAH,EAAA,MAAA4B;CAAA,OAAAA,KAAA5B,EAAA;CAND,MAAAL,QAAcjB,eAAekD,EAM5B;CAAE,IAAAC;CAAA,IAAA7B,EAAA,QAAAL,SAAAK,EAAA,QAAAJ,8BAAAI,EAAA,QAAAN,YAAA;EAEImC,KAAA;GAAAnC;GAAAC;GAAAC;EAIP;EAACI,EAAA,MAAAL;EAAAK,EAAA,MAAAJ;EAAAI,EAAA,MAAAN;EAAAM,EAAA,MAAA6B;CAAA,OAAAA,KAAA7B,EAAA;CAAA,OAJM6B;AAIN;AAGH,MAAaC,2BAA2BlD,SAASkB,2BAA2B"}
1
+ {"version":3,"file":"triggerSelectionResource.js","names":["useEffectEvent","useRef","resource","Unstable_DirectiveFormatter","Unstable_TriggerItem","AssistantClient","DetectedTrigger","SelectItemOverride","item","TriggerBehavior","kind","formatter","onInserted","onExecute","removeOnExecute","TriggerSelectionResourceOutput","selectItem","close","registerSelectItemOverride","fn","useTriggerSelectionResource","t0","$","_c","behavior","trigger","aui","setCursorPosition","onSelected","selectItemOverrideRef","t1","Symbol","for","current","t2","currentText","composer","getState","text","before","slice","offset","after","endOffset","insertDirective","directive","serialize","setText","startsWith","length","t3","t4","TriggerSelectionResource","_c"],"sources":["../../../../src/primitives/composer/trigger/triggerSelectionResource.ts"],"sourcesContent":["import { useEffectEvent, useRef } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport type { AssistantClient } from \"@assistant-ui/store\";\nimport type { DetectedTrigger } from \"./triggerDetectionResource\";\n\n/** External override for selection (used by Lexical's DirectivePlugin). */\nexport type SelectItemOverride = (item: Unstable_TriggerItem) => boolean;\n\nexport type TriggerBehavior =\n | {\n readonly kind: \"directive\";\n readonly formatter: Unstable_DirectiveFormatter;\n readonly onInserted?: (item: Unstable_TriggerItem) => void;\n }\n | {\n readonly kind: \"action\";\n readonly formatter: Unstable_DirectiveFormatter;\n readonly onExecute: (item: Unstable_TriggerItem) => void;\n readonly removeOnExecute?: boolean;\n };\n\nexport type TriggerSelectionResourceOutput = {\n /** Select an item — runs override (if any) then applies behavior. */\n selectItem(item: Unstable_TriggerItem): void;\n /** Close the popover (moves cursor before trigger to deactivate detection). */\n close(): void;\n /** Register a Lexical-style selection override. Returns unregister fn. */\n registerSelectItemOverride(fn: SelectItemOverride): () => void;\n};\n\n/** Owns composer text mutation + behavior dispatch on item selection. */\nconst useTriggerSelectionResource = ({\n behavior,\n trigger,\n aui,\n setCursorPosition,\n onSelected,\n}: {\n behavior: TriggerBehavior | undefined;\n trigger: DetectedTrigger | null;\n aui: AssistantClient;\n triggerChar: string;\n setCursorPosition: (pos: number) => void;\n /** Called after a successful selection so the parent can reset nav state. */\n onSelected: () => void;\n}): TriggerSelectionResourceOutput => {\n // Select-item override: lets Lexical's DirectivePlugin intercept selection\n // and drive its own node insertion.\n const selectItemOverrideRef = useRef<SelectItemOverride | null>(null);\n\n const registerSelectItemOverride = useEffectEvent(\n (fn: SelectItemOverride) => {\n selectItemOverrideRef.current = fn;\n return () => {\n if (selectItemOverrideRef.current === fn) {\n selectItemOverrideRef.current = null;\n }\n };\n },\n );\n\n const selectItem = useEffectEvent((item: Unstable_TriggerItem) => {\n if (!trigger || !behavior) return;\n\n if (selectItemOverrideRef.current?.(item)) {\n onSelected();\n return;\n }\n\n const currentText = aui.composer.getState().text;\n const before = currentText.slice(0, trigger.offset);\n const after = currentText.slice(trigger.endOffset);\n\n const insertDirective = () => {\n const directive = behavior.formatter.serialize(item);\n aui.composer.setText(\n before + directive + (after.startsWith(\" \") ? after : ` ${after}`),\n );\n setCursorPosition(before.length + directive.length + 1);\n };\n\n if (behavior.kind === \"directive\") {\n insertDirective();\n behavior.onInserted?.(item);\n } else {\n if (behavior.removeOnExecute) {\n aui.composer.setText(\n before + (after.startsWith(\" \") ? after.slice(1) : after),\n );\n setCursorPosition(before.length);\n } else {\n // Leave directive chip in the composer as an audit trail\n insertDirective();\n }\n behavior.onExecute(item);\n }\n\n onSelected();\n });\n\n const close = useEffectEvent(() => {\n onSelected();\n // Move cursor before the trigger so trigger detection deactivates\n if (trigger) {\n setCursorPosition(trigger.offset);\n }\n });\n\n return {\n selectItem,\n close,\n registerSelectItemOverride,\n };\n};\n\nexport const TriggerSelectionResource = resource(useTriggerSelectionResource);\n"],"mappings":";;;;;AAmCA,MAAMoB,+BAA8BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,UAAAC,SAAAC,KAAAC,mBAAAC,eAAAP;CAiBnC,MAAAQ,wBAA8B5B,OAAkC,IAAI;CAAE,IAAA6B;CAAA,IAAAR,EAAA,OAAAS,OAAAC,IAAA,2BAAA,GAAA;EAGpEF,MAAAX,OAAA;GACEU,sBAAqBI,UAAWd;GAAH,aACtB;IACL,IAAIU,sBAAqBI,YAAad,IACpCU,sBAAqBI,UAAW;GACjC;EACF;EACFX,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CARH,MAAAJ,6BAAmClB,eACjC8B,EAQF;CAAE,IAAAI;CAAA,IAAAZ,EAAA,OAAAI,OAAAJ,EAAA,OAAAE,YAAAF,EAAA,OAAAM,cAAAN,EAAA,OAAAK,qBAAAL,EAAA,OAAAG,SAAA;EAEgCS,MAAA1B,SAAA;GAChC,IAAI,CAACiB,WAAD,CAAaD,UAAQ;GAEzB,IAAIK,sBAAqBI,UAAWzB,IAAI,GAAC;IACvCoB,WAAW;IAAC;GAAA;GAId,MAAAO,cAAoBT,IAAGU,SAASC,SAAU,CAAC,CAAAC;GAC3C,MAAAC,SAAeJ,YAAWK,MAAO,GAAGf,QAAOgB,MAAO;GAClD,MAAAC,QAAcP,YAAWK,MAAOf,QAAOkB,SAAU;GAEjD,MAAAC,wBAAwB;IACtB,MAAAC,YAAkBrB,SAAQb,UAAUmC,UAAWtC,IAAI;IACnDkB,IAAGU,SAASW,QACVR,SAASM,aAAaH,MAAKM,WAAY,GAAyB,IAA1CN,QAAA,IAAoCA,QAC5D;IACAf,kBAAkBY,OAAMU,SAAUJ,UAASI,SAAU,CAAC;GAAC;GAGzD,IAAIzB,SAAQd,SAAU,aAAW;IAC/BkC,gBAAgB;IAChBpB,SAAQZ,aAAcJ,IAAI;GAAC,OAAA;IAE3B,IAAIgB,SAAQV,iBAAgB;KAC1BY,IAAGU,SAASW,QACVR,UAAUG,MAAKM,WAAY,GAA4B,IAArBN,MAAKF,MAAO,CAAS,IAA7CE,MACZ;KACAf,kBAAkBY,OAAMU,MAAO;IAAC,OAGhCL,gBAAgB;IAElBpB,SAAQX,UAAWL,IAAI;GAAC;GAG1BoB,WAAW;EAAC;EACbN,EAAA,KAAAI;EAAAJ,EAAA,KAAAE;EAAAF,EAAA,KAAAM;EAAAN,EAAA,KAAAK;EAAAL,EAAA,KAAAG;EAAAH,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CArCD,MAAAN,aAAmBhB,eAAekC,EAqCjC;CAAE,IAAAgB;CAAA,IAAA5B,EAAA,OAAAM,cAAAN,EAAA,OAAAK,qBAAAL,EAAA,OAAAG,SAAA;EAE0ByB,WAAA;GAC3BtB,WAAW;GAEX,IAAIH,SACFE,kBAAkBF,QAAOgB,MAAO;EACjC;EACFnB,EAAA,KAAAM;EAAAN,EAAA,KAAAK;EAAAL,EAAA,KAAAG;EAAAH,EAAA,MAAA4B;CAAA,OAAAA,KAAA5B,EAAA;CAND,MAAAL,QAAcjB,eAAekD,EAM5B;CAAE,IAAAC;CAAA,IAAA7B,EAAA,QAAAL,SAAAK,EAAA,QAAAJ,8BAAAI,EAAA,QAAAN,YAAA;EAEImC,KAAA;GAAAnC;GAAAC;GAAAC;EAIP;EAACI,EAAA,MAAAL;EAAAK,EAAA,MAAAJ;EAAAI,EAAA,MAAAN;EAAAM,EAAA,MAAA6B;CAAA,OAAAA,KAAA7B,EAAA;CAAA,OAJM6B;AAIN;AAGH,MAAaC,2BAA2BlD,SAASkB,2BAA2B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useComposerInputState.js","names":["c","_c","useAuiState","useTriggerPopoverActiveAriaOptional","TriggerPopoverAriaProps","useComposerInputValue","_temp","s","composer","isEditing","text","useComposerInputDisabled","disabled","composerDisabled","_temp2","Boolean","thread","isDisabled","dictation","inputDisabled","useTriggerPopoverAriaProps","$","activeAria","t0","Symbol","for","highlightedItemId","popoverId"],"sources":["../../../src/primitives/composer/useComposerInputState.ts"],"sourcesContent":["\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/store\";\nimport { useTriggerPopoverActiveAriaOptional } from \"./trigger/TriggerPopoverRootContext\";\n\nexport type TriggerPopoverAriaProps = {\n \"aria-controls\"?: string;\n \"aria-expanded\"?: true;\n \"aria-haspopup\"?: \"listbox\";\n \"aria-activedescendant\"?: string | undefined;\n};\n\nexport function useComposerInputValue() {\n return useAuiState((s) => (s.composer.isEditing ? s.composer.text : \"\"));\n}\n\nexport function useComposerInputDisabled(disabled?: boolean | undefined) {\n const composerDisabled = useAuiState(\n (s) => s.thread.isDisabled || s.composer.dictation?.inputDisabled,\n );\n return Boolean(composerDisabled) || Boolean(disabled);\n}\n\nexport function useTriggerPopoverAriaProps(): TriggerPopoverAriaProps {\n const activeAria = useTriggerPopoverActiveAriaOptional();\n if (!activeAria) return {};\n\n return {\n \"aria-controls\": activeAria.popoverId,\n \"aria-expanded\": true,\n \"aria-haspopup\": \"listbox\",\n \"aria-activedescendant\": activeAria.highlightedItemId,\n };\n}\n"],"mappings":";;;;;AAYA,SAAOK,wBAAA;CAAA,OACEH,YAAYI,KAAoD;AAAC;AADnE,SAAAA,MAAAC,GAAA;CAAA,OACsBA,EAACC,SAASC,YAAaF,EAACC,SAASE,OAAjC;AAA2C;AAGxE,SAAOC,yBAAAC,UAAA;CACL,MAAAC,mBAAyBX,YACvBY,MACF;CAAE,OACKC,QAAQF,gBAAqC,KAAhBE,QAAQH,QAAQ;AAAC;AAJhD,SAAAE,OAAAP,GAAA;CAAA,OAEIA,EAACS,OAAOC,cAAeV,EAACC,SAASU,WAAyBC;AAAA;AAKrE,SAAOC,6BAAA;CAAA,MAAAC,IAAApB,EAAA,CAAA;CACL,MAAAqB,aAAmBnB,oCAAoC;CACvD,IAAI,CAACmB,YAAU;EAAA,IAAAC;EAAA,IAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;GAASF,KAAA,CAAC;GAACF,EAAA,KAAAE;EAAA,OAAAA,KAAAF,EAAA;EAAA,OAAFE;CAAE;CAAC,IAAAA;CAAA,IAAAF,EAAA,OAAAC,WAAAI,qBAAAL,EAAA,OAAAC,WAAAK,WAAA;EAEpBJ,KAAA;GAAA,iBACYD,WAAUK;GAAU,iBACpB;GAAI,iBACJ;GAAS,yBACDL,WAAUI;EACrC;EAACL,EAAA,KAAAC,WAAAI;EAAAL,EAAA,KAAAC,WAAAK;EAAAN,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,OALME;AAKN"}
1
+ {"version":3,"file":"useComposerInputState.js","names":["c","_c","useAuiState","useTriggerPopoverActiveAriaOptional","TriggerPopoverAriaProps","useComposerInputValue","_temp","s","composer","isEditing","text","useComposerInputDisabled","disabled","composerDisabled","_temp2","Boolean","thread","isDisabled","dictation","inputDisabled","useTriggerPopoverAriaProps","$","activeAria","t0","Symbol","for","highlightedItemId","popoverId","_c"],"sources":["../../../src/primitives/composer/useComposerInputState.ts"],"sourcesContent":["\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/store\";\nimport { useTriggerPopoverActiveAriaOptional } from \"./trigger/TriggerPopoverRootContext\";\n\nexport type TriggerPopoverAriaProps = {\n \"aria-controls\"?: string;\n \"aria-expanded\"?: true;\n \"aria-haspopup\"?: \"listbox\";\n \"aria-activedescendant\"?: string | undefined;\n};\n\nexport function useComposerInputValue() {\n return useAuiState((s) => (s.composer.isEditing ? s.composer.text : \"\"));\n}\n\nexport function useComposerInputDisabled(disabled?: boolean | undefined) {\n const composerDisabled = useAuiState(\n (s) => s.thread.isDisabled || s.composer.dictation?.inputDisabled,\n );\n return Boolean(composerDisabled) || Boolean(disabled);\n}\n\nexport function useTriggerPopoverAriaProps(): TriggerPopoverAriaProps {\n const activeAria = useTriggerPopoverActiveAriaOptional();\n if (!activeAria) return {};\n\n return {\n \"aria-controls\": activeAria.popoverId,\n \"aria-expanded\": true,\n \"aria-haspopup\": \"listbox\",\n \"aria-activedescendant\": activeAria.highlightedItemId,\n };\n}\n"],"mappings":";;;;;AAYA,SAAOK,wBAAA;CAAA,OACEH,YAAYI,KAAoD;AAAC;AADnE,SAAAA,MAAAC,GAAA;CAAA,OACsBA,EAACC,SAASC,YAAaF,EAACC,SAASE,OAAjC;AAA2C;AAGxE,SAAOC,yBAAAC,UAAA;CACL,MAAAC,mBAAyBX,YACvBY,MACF;CAAE,OACKC,QAAQF,gBAAqC,KAAhBE,QAAQH,QAAQ;AAAC;AAJhD,SAAAE,OAAAP,GAAA;CAAA,OAEIA,EAACS,OAAOC,cAAeV,EAACC,SAASU,WAAyBC;AAAA;AAKrE,SAAOC,6BAAA;CAAA,MAAAC,IAAApB,EAAA,CAAA;CACL,MAAAqB,aAAmBnB,oCAAoC;CACvD,IAAI,CAACmB,YAAU;EAAA,IAAAC;EAAA,IAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;GAASF,KAAA,CAAC;GAACF,EAAA,KAAAE;EAAA,OAAAA,KAAAF,EAAA;EAAA,OAAFE;CAAE;CAAC,IAAAA;CAAA,IAAAF,EAAA,OAAAC,WAAAI,qBAAAL,EAAA,OAAAC,WAAAK,WAAA;EAEpBJ,KAAA;GAAA,iBACYD,WAAUK;GAAU,iBACpB;GAAI,iBACJ;GAAS,yBACDL,WAAUI;EACrC;EAACL,EAAA,KAAAC,WAAAI;EAAAL,EAAA,KAAAC,WAAAK;EAAAN,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,OALME;AAKN"}
@@ -1 +1 @@
1
- {"version":3,"file":"dropdownMenuRenderPrimitives.js","names":["DropdownMenu","DropdownMenuPrimitive","withRenderProp","DropdownMenuRenderTrigger","Trigger","DropdownMenuRenderContent","Content","DropdownMenuRenderItem","Item","DropdownMenuRenderSeparator","Separator"],"sources":["../../src/primitives/dropdownMenuRenderPrimitives.ts"],"sourcesContent":["import { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\nimport { withRenderProp } from \"../utils/Primitive\";\n\nexport const DropdownMenuRenderTrigger = withRenderProp(\n DropdownMenuPrimitive.Trigger,\n);\nexport const DropdownMenuRenderContent = withRenderProp(\n DropdownMenuPrimitive.Content,\n);\nexport const DropdownMenuRenderItem = withRenderProp(\n DropdownMenuPrimitive.Item,\n);\nexport const DropdownMenuRenderSeparator = withRenderProp(\n DropdownMenuPrimitive.Separator,\n);\n"],"mappings":";;;AAGA,MAAaG,4BAA4BD,eACvCD,aAAsBG,OACxB;AACA,MAAaC,4BAA4BH,eACvCD,aAAsBK,OACxB;AACA,MAAaC,yBAAyBL,eACpCD,aAAsBO,IACxB;AACA,MAAaC,8BAA8BP,eACzCD,aAAsBS,SACxB"}
1
+ {"version":3,"file":"dropdownMenuRenderPrimitives.js","names":["DropdownMenu","DropdownMenuPrimitive","withRenderProp","DropdownMenuRenderTrigger","Trigger","DropdownMenuRenderContent","Content","DropdownMenuRenderItem","Item","DropdownMenuRenderSeparator","Separator","DropdownMenuPrimitive"],"sources":["../../src/primitives/dropdownMenuRenderPrimitives.ts"],"sourcesContent":["import { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\nimport { withRenderProp } from \"../utils/Primitive\";\n\nexport const DropdownMenuRenderTrigger = withRenderProp(\n DropdownMenuPrimitive.Trigger,\n);\nexport const DropdownMenuRenderContent = withRenderProp(\n DropdownMenuPrimitive.Content,\n);\nexport const DropdownMenuRenderItem = withRenderProp(\n DropdownMenuPrimitive.Item,\n);\nexport const DropdownMenuRenderSeparator = withRenderProp(\n DropdownMenuPrimitive.Separator,\n);\n"],"mappings":";;;AAGA,MAAaG,4BAA4BD,eACvCD,aAAsBG,OACxB;AACA,MAAaC,4BAA4BH,eACvCD,aAAsBK,OACxB;AACA,MAAaC,yBAAyBL,eACpCD,aAAsBO,IACxB;AACA,MAAaC,8BAA8BP,eACzCD,aAAsBS,SACxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorMessage.js","names":["c","_c","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","useMessageError","ErrorPrimitiveMessage","Element","span","Props","t0","$","children","props","error","undefined","t1","String","t2","displayName"],"sources":["../../../src/primitives/error/ErrorMessage.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport { useMessageError } from \"@assistant-ui/core/react\";\n\nexport namespace ErrorPrimitiveMessage {\n export type Element = ComponentRef<typeof Primitive.span>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.span>;\n}\n\nexport const ErrorPrimitiveMessage = forwardRef<\n ErrorPrimitiveMessage.Element,\n ErrorPrimitiveMessage.Props\n>(({ children, ...props }, forwardRef) => {\n const error = useMessageError();\n\n if (error === undefined) return null;\n\n return (\n <Primitive.span {...props} ref={forwardRef}>\n {children ?? String(error)}\n </Primitive.span>\n );\n});\n\nErrorPrimitiveMessage.displayName = \"ErrorPrimitive.Message\";\n"],"mappings":";;;;;;;AAeA,MAAaO,wBAAwBH,YAGnCO,IAAAP,eAAA;CAAA,MAAAQ,IAAAX,EAAA,CAAA;CAAA,IAAAY;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAD,IAAA;EAAC,CAAA,CAAAE,UAAA,GAAAC,SAAAH;EAAsBC,EAAA,KAAAD;EAAAC,EAAA,KAAAC;EAAAD,EAAA,KAAAE;CAAA,OAAA;EAAAD,WAAAD,EAAA;EAAAE,QAAAF,EAAA;CAAA;CACvB,MAAAG,QAAcT,gBAAgB;CAE9B,IAAIS,UAAUC,KAAAA,GAAS,OAAS;CAI3B,MAAAC,KAAAJ,YAAYK,OAAOH,KAAK;CAAC,IAAAI;CAAA,IAAAP,EAAA,OAAAR,cAAAQ,EAAA,OAAAE,SAAAF,EAAA,OAAAK,IAAA;EAD5BE,KAAA,oBAAA,UAAA,MAAA;GAAA,GAAoBL;GAAYV,KAAAA;GAC7Ba,UAAAA;EACH,CAAA;EAAiBL,EAAA,KAAAR;EAAAQ,EAAA,KAAAE;EAAAF,EAAA,KAAAK;EAAAL,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAFjBO;AAEiB,CAEpB;AAEDZ,sBAAsBa,cAAc"}
1
+ {"version":3,"file":"ErrorMessage.js","names":["c","_c","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","useMessageError","ErrorPrimitiveMessage","Element","span","Props","t0","$","children","props","error","undefined","t1","String","t2","displayName","_c"],"sources":["../../../src/primitives/error/ErrorMessage.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport { useMessageError } from \"@assistant-ui/core/react\";\n\nexport namespace ErrorPrimitiveMessage {\n export type Element = ComponentRef<typeof Primitive.span>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.span>;\n}\n\nexport const ErrorPrimitiveMessage = forwardRef<\n ErrorPrimitiveMessage.Element,\n ErrorPrimitiveMessage.Props\n>(({ children, ...props }, forwardRef) => {\n const error = useMessageError();\n\n if (error === undefined) return null;\n\n return (\n <Primitive.span {...props} ref={forwardRef}>\n {children ?? String(error)}\n </Primitive.span>\n );\n});\n\nErrorPrimitiveMessage.displayName = \"ErrorPrimitive.Message\";\n"],"mappings":";;;;;;;AAeA,MAAaO,wBAAwBH,YAGnCO,IAAAP,eAAA;CAAA,MAAAQ,IAAAX,EAAA,CAAA;CAAA,IAAAY;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAD,IAAA;EAAC,CAAA,CAAAE,UAAA,GAAAC,SAAAH;EAAsBC,EAAA,KAAAD;EAAAC,EAAA,KAAAC;EAAAD,EAAA,KAAAE;CAAA,OAAA;EAAAD,WAAAD,EAAA;EAAAE,QAAAF,EAAA;CAAA;CACvB,MAAAG,QAAcT,gBAAgB;CAE9B,IAAIS,UAAUC,KAAAA,GAAS,OAAS;CAI3B,MAAAC,KAAAJ,YAAYK,OAAOH,KAAK;CAAC,IAAAI;CAAA,IAAAP,EAAA,OAAAR,cAAAQ,EAAA,OAAAE,SAAAF,EAAA,OAAAK,IAAA;EAD5BE,KAAA,oBAAA,UAAA,MAAA;GAAA,GAAoBL;GAAYV,KAAAA;GAC7Ba,UAAAA;EACH,CAAA;EAAiBL,EAAA,KAAAR;EAAAQ,EAAA,KAAAE;EAAAF,EAAA,KAAAK;EAAAL,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAFjBO;AAEiB,CAEpB;AAEDZ,sBAAsBa,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorRoot.js","names":["c","_c","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","ErrorPrimitiveRoot","Element","div","Props","props","$","t0","displayName"],"sources":["../../../src/primitives/error/ErrorRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\n\nexport namespace ErrorPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.div>;\n}\n\nexport const ErrorPrimitiveRoot = forwardRef<\n ErrorPrimitiveRoot.Element,\n ErrorPrimitiveRoot.Props\n>((props, forwardRef) => {\n return <Primitive.div role=\"alert\" {...props} ref={forwardRef} />;\n});\n\nErrorPrimitiveRoot.displayName = \"ErrorPrimitive.Root\";\n"],"mappings":";;;;;;AAcA,MAAaM,qBAAqBF,YAGhCM,OAAAN,eAAA;CAAA,MAAAO,IAAAV,EAAA,CAAA;CAAA,IAAAW;CAAA,IAAAD,EAAA,OAAAP,cAAAO,EAAA,OAAAD,OAAA;EACOE,KAAA,oBAAA,UAAA,KAAA;GAAoB,MAAA;GAAO,GAAKF;GAAYN,KAAAA;EAAU,CAAA;EAAIO,EAAA,KAAAP;EAAAO,EAAA,KAAAD;EAAAC,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAAA,OAA1DC;AAA0D,CAClE;AAEDN,mBAAmBO,cAAc"}
1
+ {"version":3,"file":"ErrorRoot.js","names":["c","_c","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","ErrorPrimitiveRoot","Element","div","Props","props","$","t0","displayName","_c"],"sources":["../../../src/primitives/error/ErrorRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\n\nexport namespace ErrorPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = ComponentPropsWithoutRef<typeof Primitive.div>;\n}\n\nexport const ErrorPrimitiveRoot = forwardRef<\n ErrorPrimitiveRoot.Element,\n ErrorPrimitiveRoot.Props\n>((props, forwardRef) => {\n return <Primitive.div role=\"alert\" {...props} ref={forwardRef} />;\n});\n\nErrorPrimitiveRoot.displayName = \"ErrorPrimitive.Root\";\n"],"mappings":";;;;;;AAcA,MAAaM,qBAAqBF,YAGhCM,OAAAN,eAAA;CAAA,MAAAO,IAAAV,EAAA,CAAA;CAAA,IAAAW;CAAA,IAAAD,EAAA,OAAAP,cAAAO,EAAA,OAAAD,OAAA;EACOE,KAAA,oBAAA,UAAA,KAAA;GAAoB,MAAA;GAAO,GAAKF;GAAYN,KAAAA;EAAU,CAAA;EAAIO,EAAA,KAAAP;EAAAO,EAAA,KAAAD;EAAAC,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAAA,OAA1DC;AAA0D,CAClE;AAEDN,mBAAmBO,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"MessageIf.d.ts","sourceRoot":"","sources":["../../../src/primitives/message/MessageIf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,yCAAsC;AAEvE,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,iBAAiB,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;CAC/D,CAAC;AACF,KAAK,iBAAiB,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AAwD7D,yBAAiB,kBAAkB,CAAC;IAClC,KAAY,KAAK,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAM3D,CAAC"}
1
+ {"version":3,"file":"MessageIf.d.ts","sourceRoot":"","sources":["../../../src/primitives/message/MessageIf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,yCAAsC;AAEvE,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,iBAAiB,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;CAC/D,CAAC;AACF,KAAK,iBAAiB,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AA6D7D,yBAAiB,kBAAkB,CAAC;IAClC,KAAY,KAAK,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAM3D,CAAC"}
@@ -9,9 +9,12 @@ const useMessageIf = (props) => {
9
9
  t0 = (s) => {
10
10
  const { role, attachments, parts, branchCount, isLast, speech, isCopied, isHovering } = s.message;
11
11
  if (props.hasBranches === true && branchCount < 2) return false;
12
- if (props.user && role !== "user") return false;
13
- if (props.assistant && role !== "assistant") return false;
14
- if (props.system && role !== "system") return false;
12
+ if (props.user === true && role !== "user") return false;
13
+ if (props.user === false && role === "user") return false;
14
+ if (props.assistant === true && role !== "assistant") return false;
15
+ if (props.assistant === false && role === "assistant") return false;
16
+ if (props.system === true && role !== "system") return false;
17
+ if (props.system === false && role === "system") return false;
15
18
  if (props.lastOrHover === true && !isHovering && !isLast) return false;
16
19
  if (props.last !== void 0 && props.last !== isLast) return false;
17
20
  if (props.copied === true && !isCopied) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"MessageIf.js","names":["c","_c","FC","PropsWithChildren","useAuiState","RequireAtLeastOne","MessageIfFilters","user","assistant","system","hasBranches","copied","lastOrHover","last","speaking","hasAttachments","hasContent","submittedFeedback","UseMessageIfProps","useMessageIf","props","$","t0","s","role","attachments","parts","branchCount","isLast","speech","isCopied","isHovering","message","undefined","length","metadata","type","MessagePrimitiveIf","Props","children","query","result","displayName"],"sources":["../../../src/primitives/message/MessageIf.ts"],"sourcesContent":["\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n system: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n last: boolean | undefined;\n speaking: boolean | undefined;\n hasAttachments: boolean | undefined;\n hasContent: boolean | undefined;\n submittedFeedback: \"positive\" | \"negative\" | null | undefined;\n};\ntype UseMessageIfProps = RequireAtLeastOne<MessageIfFilters>;\n\nconst useMessageIf = (props: UseMessageIfProps) => {\n return useAuiState((s) => {\n const {\n role,\n attachments,\n parts,\n branchCount,\n isLast,\n speech,\n isCopied,\n isHovering,\n } = s.message;\n\n if (props.hasBranches === true && branchCount < 2) return false;\n\n if (props.user && role !== \"user\") return false;\n if (props.assistant && role !== \"assistant\") return false;\n if (props.system && role !== \"system\") return false;\n\n if (props.lastOrHover === true && !isHovering && !isLast) return false;\n if (props.last !== undefined && props.last !== isLast) return false;\n\n if (props.copied === true && !isCopied) return false;\n if (props.copied === false && isCopied) return false;\n\n if (props.speaking === true && speech == null) return false;\n if (props.speaking === false && speech != null) return false;\n\n if (\n props.hasAttachments === true &&\n (role !== \"user\" || !attachments?.length)\n )\n return false;\n if (\n props.hasAttachments === false &&\n role === \"user\" &&\n attachments?.length\n )\n return false;\n\n if (props.hasContent === true && parts.length === 0) return false;\n if (props.hasContent === false && parts.length > 0) return false;\n\n if (\n props.submittedFeedback !== undefined &&\n (s.message.metadata.submittedFeedback?.type ?? null) !==\n props.submittedFeedback\n )\n return false;\n\n return true;\n });\n};\n\nexport namespace MessagePrimitiveIf {\n export type Props = PropsWithChildren<UseMessageIfProps>;\n}\n\n/**\n * @deprecated Use `<AuiIf condition={(s) => s.message...} />` instead.\n */\nexport const MessagePrimitiveIf: FC<MessagePrimitiveIf.Props> = ({\n children,\n ...query\n}) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n\nMessagePrimitiveIf.displayName = \"MessagePrimitive.If\";\n"],"mappings":";;;;AAqBA,MAAMmB,gBAAeC,UAAA;CAAA,MAAAC,IAAApB,EAAA,EAAA;CAAA,IAAAqB;CAAA,IAAAD,EAAA,OAAAD,MAAAZ,aAAAa,EAAA,OAAAD,MAAAT,UAAAU,EAAA,OAAAD,MAAAL,kBAAAM,EAAA,OAAAD,MAAAV,eAAAW,EAAA,OAAAD,MAAAJ,cAAAK,EAAA,OAAAD,MAAAP,QAAAQ,EAAA,OAAAD,MAAAR,eAAAS,EAAA,OAAAD,MAAAN,YAAAO,EAAA,OAAAD,MAAAH,qBAAAI,EAAA,OAAAD,MAAAX,UAAAY,EAAA,QAAAD,MAAAb,MAAA;EACAe,MAAAC,MAAA;GACjB,MAAA,EAAAC,MAAAC,aAAAC,OAAAC,aAAAC,QAAAC,QAAAC,UAAAC,eASIR,EAACS;GAEL,IAAIZ,MAAKV,gBAAiB,QAAQiB,cAAc,GAAC,OAAS;GAE1D,IAAIP,MAAKb,QAASiB,SAAS,QAAM,OAAS;GAC1C,IAAIJ,MAAKZ,aAAcgB,SAAS,aAAW,OAAS;GACpD,IAAIJ,MAAKX,UAAWe,SAAS,UAAQ,OAAS;GAE9C,IAAIJ,MAAKR,gBAAiB,QAAtB,CAA+BmB,cAA/B,CAA8CH,QAAM,OAAS;GACjE,IAAIR,MAAKP,SAAUoB,KAAAA,KAAab,MAAKP,SAAUe,QAAM,OAAS;GAE9D,IAAIR,MAAKT,WAAY,QAAjB,CAA0BmB,UAAQ,OAAS;GAC/C,IAAIV,MAAKT,WAAY,SAAjBmB,UAAkC,OAAS;GAE/C,IAAIV,MAAKN,aAAc,QAAQe,UAAU,MAAI,OAAS;GACtD,IAAIT,MAAKN,aAAc,SAASe,UAAU,MAAI,OAAS;GAEvD,IACET,MAAKL,mBAAoB,SACxBS,SAAS,UAAT,CAAoBC,aAAWS,SAAS,OAElC;GACT,IACEd,MAAKL,mBAAoB,SACzBS,SAAS,UACTC,aAAWS,QAAQ,OAEZ;GAET,IAAId,MAAKJ,eAAgB,QAAQU,MAAKQ,WAAY,GAAC,OAAS;GAC5D,IAAId,MAAKJ,eAAgB,SAASU,MAAKQ,SAAU,GAAC,OAAS;GAE3D,IACEd,MAAKH,sBAAuBgB,KAAAA,MAC3BV,EAACS,QAAQG,SAASlB,mBAAwBmB,QAA1C,UACChB,MAAKH,mBAAkB,OAElB;GAAM,OAER;EAAI;EACZI,EAAA,KAAAD,MAAAZ;EAAAa,EAAA,KAAAD,MAAAT;EAAAU,EAAA,KAAAD,MAAAL;EAAAM,EAAA,KAAAD,MAAAV;EAAAW,EAAA,KAAAD,MAAAJ;EAAAK,EAAA,KAAAD,MAAAP;EAAAQ,EAAA,KAAAD,MAAAR;EAAAS,EAAA,KAAAD,MAAAN;EAAAO,EAAA,KAAAD,MAAAH;EAAAI,EAAA,KAAAD,MAAAX;EAAAY,EAAA,MAAAD,MAAAb;EAAAc,EAAA,MAAAC;CAAA,OAAAA,KAAAD,EAAA;CAAA,OAlDMjB,YAAYkB,EAkDlB;AAAC;;;;AAUJ,MAAae,sBAAmDf,OAAA;CAAA,MAAAD,IAAApB,EAAA,CAAA;CAAA,IAAAsC;CAAA,IAAAC;CAAA,IAAAnB,EAAA,OAAAC,IAAA;EAAC,CAAA,CAAAiB,UAAA,GAAAC,SAAAlB;EAGhED,EAAA,KAAAC;EAAAD,EAAA,KAAAkB;EAAAlB,EAAA,KAAAmB;CAAA,OAAA;EAAAD,WAAAlB,EAAA;EAAAmB,QAAAnB,EAAA;CAAA;CACoC,OAApBF,aAAaqB,KACrBC,IAAAF,WAAA;AAAwB;AAGjCF,mBAAmBK,cAAc"}
1
+ {"version":3,"file":"MessageIf.js","names":["c","_c","FC","PropsWithChildren","useAuiState","RequireAtLeastOne","MessageIfFilters","user","assistant","system","hasBranches","copied","lastOrHover","last","speaking","hasAttachments","hasContent","submittedFeedback","UseMessageIfProps","useMessageIf","props","$","t0","s","role","attachments","parts","branchCount","isLast","speech","isCopied","isHovering","message","undefined","length","metadata","type","MessagePrimitiveIf","Props","children","query","result","displayName","_c"],"sources":["../../../src/primitives/message/MessageIf.ts"],"sourcesContent":["\"use client\";\n\nimport type { FC, PropsWithChildren } from \"react\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport type { RequireAtLeastOne } from \"../../utils/RequireAtLeastOne\";\n\ntype MessageIfFilters = {\n user: boolean | undefined;\n assistant: boolean | undefined;\n system: boolean | undefined;\n hasBranches: boolean | undefined;\n copied: boolean | undefined;\n lastOrHover: boolean | undefined;\n last: boolean | undefined;\n speaking: boolean | undefined;\n hasAttachments: boolean | undefined;\n hasContent: boolean | undefined;\n submittedFeedback: \"positive\" | \"negative\" | null | undefined;\n};\ntype UseMessageIfProps = RequireAtLeastOne<MessageIfFilters>;\n\nconst useMessageIf = (props: UseMessageIfProps) => {\n return useAuiState((s) => {\n const {\n role,\n attachments,\n parts,\n branchCount,\n isLast,\n speech,\n isCopied,\n isHovering,\n } = s.message;\n\n if (props.hasBranches === true && branchCount < 2) return false;\n\n if (props.user === true && role !== \"user\") return false;\n if (props.user === false && role === \"user\") return false;\n\n if (props.assistant === true && role !== \"assistant\") return false;\n if (props.assistant === false && role === \"assistant\") return false;\n\n if (props.system === true && role !== \"system\") return false;\n if (props.system === false && role === \"system\") return false;\n\n if (props.lastOrHover === true && !isHovering && !isLast) return false;\n if (props.last !== undefined && props.last !== isLast) return false;\n\n if (props.copied === true && !isCopied) return false;\n if (props.copied === false && isCopied) return false;\n\n if (props.speaking === true && speech == null) return false;\n if (props.speaking === false && speech != null) return false;\n\n if (\n props.hasAttachments === true &&\n (role !== \"user\" || !attachments?.length)\n )\n return false;\n if (\n props.hasAttachments === false &&\n role === \"user\" &&\n attachments?.length\n )\n return false;\n\n if (props.hasContent === true && parts.length === 0) return false;\n if (props.hasContent === false && parts.length > 0) return false;\n\n if (\n props.submittedFeedback !== undefined &&\n (s.message.metadata.submittedFeedback?.type ?? null) !==\n props.submittedFeedback\n )\n return false;\n\n return true;\n });\n};\n\nexport namespace MessagePrimitiveIf {\n export type Props = PropsWithChildren<UseMessageIfProps>;\n}\n\n/**\n * @deprecated Use `<AuiIf condition={(s) => s.message...} />` instead.\n */\nexport const MessagePrimitiveIf: FC<MessagePrimitiveIf.Props> = ({\n children,\n ...query\n}) => {\n const result = useMessageIf(query);\n return result ? children : null;\n};\n\nMessagePrimitiveIf.displayName = \"MessagePrimitive.If\";\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MessageParts.js","names":["c","_c","FC","MessagePrimitiveParts","MessagePrimitivePartsBase","MessagePartComponent","MessagePartComponentBase","MessagePrimitivePartByIndex","MessagePrimitivePartByIndexBase","messagePartsDefaultComponents","MessagePartPrimitiveText","MessagePartPrimitiveImage","MessagePartPrimitiveInProgress","webDefaultComponents","Text","whiteSpace","fontFamily","Image","Props","props","$","t0","children","components","rest","merged","t1","t2","displayName"],"sources":["../../../src/primitives/message/MessageParts.tsx"],"sourcesContent":["\"use client\";\n\nimport type { FC } from \"react\";\nimport {\n MessagePrimitiveParts as MessagePrimitivePartsBase,\n MessagePartComponent as MessagePartComponentBase,\n MessagePrimitivePartByIndex as MessagePrimitivePartByIndexBase,\n messagePartsDefaultComponents,\n} from \"@assistant-ui/core/react\";\nimport { MessagePartPrimitiveText } from \"../messagePart/MessagePartText\";\nimport { MessagePartPrimitiveImage } from \"../messagePart/MessagePartImage\";\nimport { MessagePartPrimitiveInProgress } from \"../messagePart/MessagePartInProgress\";\n\nconst webDefaultComponents = {\n ...messagePartsDefaultComponents,\n Text: () => (\n <p style={{ whiteSpace: \"pre-line\" }}>\n <MessagePartPrimitiveText />\n <MessagePartPrimitiveInProgress>\n <span style={{ fontFamily: \"revert\" }}>{\" \\u25CF\"}</span>\n </MessagePartPrimitiveInProgress>\n </p>\n ),\n Image: () => <MessagePartPrimitiveImage />,\n} satisfies MessagePrimitiveParts.Props[\"components\"];\n\nexport namespace MessagePrimitiveParts {\n export type Props = MessagePrimitivePartsBase.Props;\n}\n\n/**\n * Renders the parts of a message with web-specific default components.\n */\nexport const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = (\n props,\n) => {\n if (\"children\" in props) {\n return (\n <MessagePrimitivePartsBase>{props.children}</MessagePrimitivePartsBase>\n );\n }\n\n const { components, ...rest } = props;\n const merged = components\n ? {\n ...components,\n Text: components.Text ?? webDefaultComponents.Text,\n Image: components.Image ?? webDefaultComponents.Image,\n }\n : webDefaultComponents;\n\n return <MessagePrimitivePartsBase components={merged as any} {...rest} />;\n};\n\nMessagePrimitiveParts.displayName = \"MessagePrimitive.Parts\";\n\n// Re-export everything else unchanged\nexport {\n MessagePartComponentBase as MessagePartComponent,\n MessagePrimitivePartByIndexBase as MessagePrimitivePartByIndex,\n};\n"],"mappings":";;;;;;;;AAaA,MAAMa,uBAAuB;CAC3B,GAAGJ;CACHK,YACE,qBAAC,KAAD;EAAG,OAAO,EAAEC,YAAY,WAAW;EAAnC,UAAA,CACE,oBAAC,0BAAD,CAAyB,CAAA,GACzB,oBAAC,gCAAD,EAAA,UACE,oBAAC,QAAD;GAAM,OAAO,EAAEC,YAAY,SAAS;GAAI,UAAA;EAAgB,CAAA,EAC1B,CAAA,CAC/B;;CAELC,aAAa,oBAAC,2BAAD,CAA0B,CAAA;AACzC;;;;AASA,MAAad,yBAAyDgB,UAAA;CAAA,MAAAC,IAAAnB,EAAA,EAAA;CAGpE,IAAI,cAAckB,OAAK;EAAA,IAAAE;EAAA,IAAAD,EAAA,OAAAD,MAAAG,UAAA;GAEnBD,KAAA,oBAAC,yBAAD,EAAA,UAA4BF,MAAKG,SAAP,CAAA;GAA6CF,EAAA,KAAAD,MAAAG;GAAAF,EAAA,KAAAC;EAAA,OAAAA,KAAAD,EAAA;EAAA,OAAvEC;CAAuE;CAE1E,IAAAE;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAD,OAAA;EAED,CAAA,CAAAI,YAAA,GAAAC,QAAgCL;EAAMC,EAAA,KAAAD;EAAAC,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAAD,aAAAH,EAAA;EAAAI,OAAAJ,EAAA;CAAA;CAAA,IAAAC;CAAA,IAAAD,EAAA,OAAAG,YAAA;EACvBF,KAAAE,aAAA;GAAA,GAENA;GAAUT,MACPS,WAAUT,QAASD,qBAAoBC;GAAKG,OAC3CM,WAAUN,SAAUJ,qBAAoBI;EAE9B,IANRJ;EAMSO,EAAA,KAAAG;EAAAH,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAEsB,MAAAM,KAAAD;CAAa,IAAAE;CAAA,IAAAP,EAAA,OAAAI,QAAAJ,EAAA,OAAAM,IAAA;EAApDC,KAAA,oBAAC,yBAAD;GAAuC,YAAAD;GAAa,GAAMF;EAAI,CAAA;EAAIJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAAlEO;AAAkE;AAG3ExB,sBAAsByB,cAAc"}
1
+ {"version":3,"file":"MessageParts.js","names":["c","_c","FC","MessagePrimitiveParts","MessagePrimitivePartsBase","MessagePartComponent","MessagePartComponentBase","MessagePrimitivePartByIndex","MessagePrimitivePartByIndexBase","messagePartsDefaultComponents","MessagePartPrimitiveText","MessagePartPrimitiveImage","MessagePartPrimitiveInProgress","webDefaultComponents","Text","whiteSpace","fontFamily","Image","Props","props","$","t0","children","components","rest","merged","t1","t2","displayName","_c","MessagePrimitivePartsBase","merged"],"sources":["../../../src/primitives/message/MessageParts.tsx"],"sourcesContent":["\"use client\";\n\nimport type { FC } from \"react\";\nimport {\n MessagePrimitiveParts as MessagePrimitivePartsBase,\n MessagePartComponent as MessagePartComponentBase,\n MessagePrimitivePartByIndex as MessagePrimitivePartByIndexBase,\n messagePartsDefaultComponents,\n} from \"@assistant-ui/core/react\";\nimport { MessagePartPrimitiveText } from \"../messagePart/MessagePartText\";\nimport { MessagePartPrimitiveImage } from \"../messagePart/MessagePartImage\";\nimport { MessagePartPrimitiveInProgress } from \"../messagePart/MessagePartInProgress\";\n\nconst webDefaultComponents = {\n ...messagePartsDefaultComponents,\n Text: () => (\n <p style={{ whiteSpace: \"pre-line\" }}>\n <MessagePartPrimitiveText />\n <MessagePartPrimitiveInProgress>\n <span style={{ fontFamily: \"revert\" }}>{\" \\u25CF\"}</span>\n </MessagePartPrimitiveInProgress>\n </p>\n ),\n Image: () => <MessagePartPrimitiveImage />,\n} satisfies MessagePrimitiveParts.Props[\"components\"];\n\nexport namespace MessagePrimitiveParts {\n export type Props = MessagePrimitivePartsBase.Props;\n}\n\n/**\n * Renders the parts of a message with web-specific default components.\n */\nexport const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = (\n props,\n) => {\n if (\"children\" in props) {\n return (\n <MessagePrimitivePartsBase>{props.children}</MessagePrimitivePartsBase>\n );\n }\n\n const { components, ...rest } = props;\n const merged = components\n ? {\n ...components,\n Text: components.Text ?? webDefaultComponents.Text,\n Image: components.Image ?? webDefaultComponents.Image,\n }\n : webDefaultComponents;\n\n return <MessagePrimitivePartsBase components={merged as any} {...rest} />;\n};\n\nMessagePrimitiveParts.displayName = \"MessagePrimitive.Parts\";\n\n// Re-export everything else unchanged\nexport {\n MessagePartComponentBase as MessagePartComponent,\n MessagePrimitivePartByIndexBase as MessagePrimitivePartByIndex,\n};\n"],"mappings":";;;;;;;;AAaA,MAAMa,uBAAuB;CAC3B,GAAGJ;CACHK,YACE,qBAAC,KAAD;EAAG,OAAO,EAAEC,YAAY,WAAW;EAAnC,UAAA,CACE,oBAAC,0BAAD,CAAyB,CAAA,GACzB,oBAAC,gCAAD,EAAA,UACE,oBAAC,QAAD;GAAM,OAAO,EAAEC,YAAY,SAAS;GAAI,UAAA;EAAgB,CAAA,EAC1B,CAAA,CAC/B;;CAELC,aAAa,oBAAC,2BAAD,CAA0B,CAAA;AACzC;;;;AASA,MAAad,yBAAyDgB,UAAA;CAAA,MAAAC,IAAAnB,EAAA,EAAA;CAGpE,IAAI,cAAckB,OAAK;EAAA,IAAAE;EAAA,IAAAD,EAAA,OAAAD,MAAAG,UAAA;GAEnBD,KAAA,oBAACS,yBAAD,EAAA,UAA4BX,MAAKG,SAAP,CAAA;GAA6CF,EAAA,KAAAD,MAAAG;GAAAF,EAAA,KAAAC;EAAA,OAAAA,KAAAD,EAAA;EAAA,OAAvEC;CAAuE;CAE1E,IAAAE;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAD,OAAA;EAED,CAAA,CAAAI,YAAA,GAAAC,QAAgCL;EAAMC,EAAA,KAAAD;EAAAC,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAAD,aAAAH,EAAA;EAAAI,OAAAJ,EAAA;CAAA;CAAA,IAAAC;CAAA,IAAAD,EAAA,OAAAG,YAAA;EACvBF,KAAAE,aAAA;GAAA,GAENA;GAAUT,MACPS,WAAUT,QAASD,qBAAoBC;GAAKG,OAC3CM,WAAUN,SAAUJ,qBAAoBI;EAE9B,IANRJ;EAMSO,EAAA,KAAAG;EAAAH,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAEsB,MAAAM,KAAAD;CAAa,IAAAE;CAAA,IAAAP,EAAA,OAAAI,QAAAJ,EAAA,OAAAM,IAAA;EAApDC,KAAA,oBAACG,yBAAD;GAAuC,YAAAJ;GAAa,GAAMF;EAAI,CAAA;EAAIJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAAlEO;AAAkE;AAG3ExB,sBAAsByB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"MessagePartsGrouped.d.ts","sourceRoot":"","sources":["../../../src/primitives/message/MessagePartsGrouped.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,EAAE,EAEP,KAAK,iBAAiB,EAEvB,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EACV,kCAAkC,EAClC,wBAAwB,EAExB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,0BAA0B,CAAC;AAIlC,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,KAAK,gBAAgB,EAAE,CAAC;AAmD7E,yBAAiB,qCAAqC,CAAC;IACrD,KAAY,KAAK,GAAG;QAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA0CG;QACH,gBAAgB,EAAE,gBAAgB,CAAC;QAEnC;;;;;WAKG;QACH,UAAU,EACN;YACE,6CAA6C;YAC7C,KAAK,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;YAC9C,2CAA2C;YAC3C,IAAI,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;YAC5C,mEAAmE;YACnE,SAAS,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;YACtD,6CAA6C;YAC7C,MAAM,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;YAChD,4CAA4C;YAC5C,KAAK,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;YAC9C,2CAA2C;YAC3C,IAAI,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;YAC5C;;;;;eAKG;YACH,cAAc,CAAC,EAAE,kCAAkC,GAAG,SAAS,CAAC;YAChE,4CAA4C;YAC5C,IAAI,CAAC,EACD;gBACE,kDAAkD;gBAClD,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,GACpD,SAAS,CAAC;gBACd,mDAAmD;gBACnD,QAAQ,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;aACjD,GACD,SAAS,CAAC;YACd,4CAA4C;YAC5C,KAAK,CAAC,EACF;gBACE,qDAAqD;gBACrD,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,4BAA4B,GAAG,SAAS,CAAC,GACxD,SAAS,CAAC;gBACd,gDAAgD;gBAChD,QAAQ,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;aAChE,GACD;gBACE,qDAAqD;gBACrD,QAAQ,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;aACnD,GACD,SAAS,CAAC;YAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAgCG;YACH,KAAK,CAAC,EAAE,aAAa,CACnB,iBAAiB,CAAC;gBAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;gBAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;aACnB,CAAC,CACH,CAAC;SACH,GACD,SAAS,CAAC;KACf,CAAC;CACH;AAuMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,qCAAqC,EAAE,EAAE,CACpD,qCAAqC,CAAC,KAAK,CAgC5C,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,+CAA+C,EAAE,EAAE,CAC9D,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAStE,CAAC"}
1
+ {"version":3,"file":"MessagePartsGrouped.d.ts","sourceRoot":"","sources":["../../../src/primitives/message/MessagePartsGrouped.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,EAAE,EAEP,KAAK,iBAAiB,EAEvB,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EACV,kCAAkC,EAClC,wBAAwB,EAExB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,0BAA0B,CAAC;AAKlC,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,KAAK,gBAAgB,EAAE,CAAC;AAoD7E,yBAAiB,qCAAqC,CAAC;IACrD,KAAY,KAAK,GAAG;QAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA0CG;QACH,gBAAgB,EAAE,gBAAgB,CAAC;QAEnC;;;;;WAKG;QACH,UAAU,EACN;YACE,6CAA6C;YAC7C,KAAK,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;YAC9C,2CAA2C;YAC3C,IAAI,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;YAC5C,mEAAmE;YACnE,SAAS,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;YACtD,6CAA6C;YAC7C,MAAM,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;YAChD,4CAA4C;YAC5C,KAAK,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;YAC9C,2CAA2C;YAC3C,IAAI,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;YAC5C;;;;;eAKG;YACH,cAAc,CAAC,EAAE,kCAAkC,GAAG,SAAS,CAAC;YAChE,4CAA4C;YAC5C,IAAI,CAAC,EACD;gBACE,kDAAkD;gBAClD,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,GACpD,SAAS,CAAC;gBACd,mDAAmD;gBACnD,QAAQ,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;aACjD,GACD,SAAS,CAAC;YACd,4CAA4C;YAC5C,KAAK,CAAC,EACF;gBACE,qDAAqD;gBACrD,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,4BAA4B,GAAG,SAAS,CAAC,GACxD,SAAS,CAAC;gBACd,gDAAgD;gBAChD,QAAQ,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;aAChE,GACD;gBACE,qDAAqD;gBACrD,QAAQ,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;aACnD,GACD,SAAS,CAAC;YAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAgCG;YACH,KAAK,CAAC,EAAE,aAAa,CACnB,iBAAiB,CAAC;gBAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;gBAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;aACnB,CAAC,CACH,CAAC;SACH,GACD,SAAS,CAAC;KACf,CAAC;CACH;AAuMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,qCAAqC,EAAE,EAAE,CACpD,qCAAqC,CAAC,KAAK,CAsC5C,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,+CAA+C,EAAE,EAAE,CAC9D,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAStE,CAAC"}
@@ -7,6 +7,7 @@ import { MessagePartPrimitiveInProgress } from "../messagePart/MessagePartInProg
7
7
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
8
8
  import { memo } from "@assistant-ui/tap/react-shim";
9
9
  import { useAui, useAuiState } from "@assistant-ui/store";
10
+ import { getMessagePartKeys } from "@assistant-ui/core/internal";
10
11
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
12
  //#region src/primitives/message/MessagePartsGrouped.tsx
12
13
  /**
@@ -33,7 +34,7 @@ const groupMessagePartsByParentId = (parts) => {
33
34
  return groups;
34
35
  };
35
36
  const useMessagePartsGrouped = (groupingFunction) => {
36
- const $ = c(4);
37
+ const $ = c(9);
37
38
  const parts = useAuiState(_temp);
38
39
  let t0;
39
40
  bb0: {
@@ -55,7 +56,24 @@ const useMessagePartsGrouped = (groupingFunction) => {
55
56
  } else t1 = $[3];
56
57
  t0 = t1;
57
58
  }
58
- return t0;
59
+ const groups = t0;
60
+ let t1;
61
+ if ($[4] !== parts) {
62
+ t1 = getMessagePartKeys(parts);
63
+ $[4] = parts;
64
+ $[5] = t1;
65
+ } else t1 = $[5];
66
+ let t2;
67
+ if ($[6] !== groups || $[7] !== t1) {
68
+ t2 = {
69
+ groups,
70
+ partKeys: t1
71
+ };
72
+ $[6] = groups;
73
+ $[7] = t1;
74
+ $[8] = t2;
75
+ } else t2 = $[8];
76
+ return t2;
59
77
  };
60
78
  const ToolUIDisplay = (t0) => {
61
79
  const $ = c(9);
@@ -431,10 +449,10 @@ const EmptyParts = memo(EmptyPartsImpl, (prev, next) => prev.components?.Empty =
431
449
  * ```
432
450
  */
433
451
  const MessagePrimitiveUnstable_PartsGrouped = (t0) => {
434
- const $ = c(9);
452
+ const $ = c(11);
435
453
  const { groupingFunction, components } = t0;
436
454
  const contentLength = useAuiState(_temp4);
437
- const messageGroups = useMessagePartsGrouped(groupingFunction);
455
+ const { groups: messageGroups, partKeys } = useMessagePartsGrouped(groupingFunction);
438
456
  let t1;
439
457
  bb0: {
440
458
  if (contentLength === 0) {
@@ -448,37 +466,44 @@ const MessagePrimitiveUnstable_PartsGrouped = (t0) => {
448
466
  break bb0;
449
467
  }
450
468
  let t2;
451
- if ($[2] !== components || $[3] !== messageGroups) {
469
+ if ($[2] !== components || $[3] !== messageGroups || $[4] !== partKeys) {
452
470
  let t3;
453
- if ($[5] !== components) {
471
+ if ($[6] !== components || $[7] !== partKeys) {
454
472
  t3 = (group, groupIndex) => {
455
473
  const GroupComponent = components?.Group ?? defaultComponents.Group;
474
+ const identity = partKeys[group.indices[0]];
456
475
  return /* @__PURE__ */ jsx(GroupComponent, {
457
476
  groupKey: group.groupKey,
458
477
  indices: group.indices,
459
478
  children: group.indices.map((partIndex) => /* @__PURE__ */ jsx(MessagePart, {
460
479
  partIndex,
461
480
  components
462
- }, partIndex))
463
- }, `group-${groupIndex}-${group.groupKey ?? "ungrouped"}`);
481
+ }, partKeys[partIndex]))
482
+ }, JSON.stringify([
483
+ "group",
484
+ group.groupKey ?? null,
485
+ identity?.includes(":") ? `id:${identity}` : groupIndex
486
+ ]));
464
487
  };
465
- $[5] = components;
466
- $[6] = t3;
467
- } else t3 = $[6];
488
+ $[6] = components;
489
+ $[7] = partKeys;
490
+ $[8] = t3;
491
+ } else t3 = $[8];
468
492
  t2 = messageGroups.map(t3);
469
493
  $[2] = components;
470
494
  $[3] = messageGroups;
471
- $[4] = t2;
472
- } else t2 = $[4];
495
+ $[4] = partKeys;
496
+ $[5] = t2;
497
+ } else t2 = $[5];
473
498
  t1 = t2;
474
499
  }
475
500
  const partsElements = t1;
476
501
  let t2;
477
- if ($[7] !== partsElements) {
502
+ if ($[9] !== partsElements) {
478
503
  t2 = /* @__PURE__ */ jsx(Fragment, { children: partsElements });
479
- $[7] = partsElements;
480
- $[8] = t2;
481
- } else t2 = $[8];
504
+ $[9] = partsElements;
505
+ $[10] = t2;
506
+ } else t2 = $[10];
482
507
  return t2;
483
508
  };
484
509
  MessagePrimitiveUnstable_PartsGrouped.displayName = "MessagePrimitive.Unstable_PartsGrouped";