glirastes 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/README.md +146 -9
- package/codegen/package.json +5 -0
- package/dist/cjs/codegen/asset-sync.d.ts +20 -0
- package/dist/cjs/codegen/asset-sync.js +28 -0
- package/dist/cjs/codegen/coverage.d.ts +66 -0
- package/dist/cjs/codegen/coverage.js +408 -0
- package/dist/cjs/codegen/endpoint-scanner.d.ts +16 -0
- package/dist/cjs/codegen/endpoint-scanner.js +197 -0
- package/dist/cjs/codegen/format.d.ts +17 -0
- package/dist/cjs/codegen/format.js +34 -0
- package/dist/cjs/codegen/fs-utils.d.ts +45 -0
- package/dist/cjs/codegen/fs-utils.js +165 -0
- package/dist/cjs/codegen/index.d.ts +13 -0
- package/dist/cjs/codegen/index.js +33 -0
- package/dist/cjs/codegen/mcp-generator.d.ts +50 -0
- package/dist/cjs/codegen/mcp-generator.js +803 -0
- package/dist/cjs/codegen/module-generator.d.ts +11 -0
- package/dist/cjs/codegen/module-generator.js +353 -0
- package/dist/cjs/codegen/nestjs-scanner.d.ts +43 -0
- package/dist/cjs/codegen/nestjs-scanner.js +241 -0
- package/dist/cjs/codegen/output-recommender.d.ts +23 -0
- package/dist/cjs/codegen/output-recommender.js +33 -0
- package/dist/cjs/codegen/scaffolder.d.ts +36 -0
- package/dist/cjs/codegen/scaffolder.js +262 -0
- package/dist/cjs/codegen/skill-generator.d.ts +49 -0
- package/dist/cjs/codegen/skill-generator.js +967 -0
- package/dist/cjs/codegen/types.d.ts +52 -0
- package/dist/cjs/codegen/types.js +16 -0
- package/dist/cjs/codegen/ui-scanner.d.ts +24 -0
- package/dist/cjs/codegen/ui-scanner.js +202 -0
- package/dist/cjs/codegen/validator.d.ts +35 -0
- package/dist/cjs/codegen/validator.js +292 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +23 -0
- package/dist/cjs/openapi/index.d.ts +78 -0
- package/dist/cjs/openapi/index.js +347 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/react/audio-worklet-processor.d.ts +16 -0
- package/dist/cjs/react/audio-worklet-processor.js +27 -0
- package/dist/cjs/react/bridges/rest-session-bridge.d.ts +113 -0
- package/dist/cjs/react/bridges/rest-session-bridge.js +209 -0
- package/dist/cjs/react/components/ai-chat-panel.d.ts +12 -0
- package/dist/cjs/react/components/ai-chat-panel.js +67 -0
- package/dist/cjs/react/components/ai-trigger-button.d.ts +2 -0
- package/dist/cjs/react/components/ai-trigger-button.js +239 -0
- package/dist/cjs/react/components/approval-card.d.ts +9 -0
- package/dist/cjs/react/components/approval-card.js +24 -0
- package/dist/cjs/react/components/bulk-approval-card.d.ts +9 -0
- package/dist/cjs/react/components/bulk-approval-card.js +36 -0
- package/dist/cjs/react/components/chat-input.d.ts +10 -0
- package/dist/cjs/react/components/chat-input.js +60 -0
- package/dist/cjs/react/components/chat-window.d.ts +2 -0
- package/dist/cjs/react/components/chat-window.js +134 -0
- package/dist/cjs/react/components/confirm-dialog.d.ts +32 -0
- package/dist/cjs/react/components/confirm-dialog.js +48 -0
- package/dist/cjs/react/components/floating-chat-ui.d.ts +90 -0
- package/dist/cjs/react/components/floating-chat-ui.js +163 -0
- package/dist/cjs/react/components/mention-chip.d.ts +16 -0
- package/dist/cjs/react/components/mention-chip.js +42 -0
- package/dist/cjs/react/components/mention-input.d.ts +8 -0
- package/dist/cjs/react/components/mention-input.js +117 -0
- package/dist/cjs/react/components/message-bubble.d.ts +11 -0
- package/dist/cjs/react/components/message-bubble.js +171 -0
- package/dist/cjs/react/components/message-list.d.ts +8 -0
- package/dist/cjs/react/components/message-list.js +52 -0
- package/dist/cjs/react/components/pipeline-timeline.d.ts +7 -0
- package/dist/cjs/react/components/pipeline-timeline.js +72 -0
- package/dist/cjs/react/components/recording-bar.d.ts +2 -0
- package/dist/cjs/react/components/recording-bar.js +81 -0
- package/dist/cjs/react/components/recording-controls.d.ts +18 -0
- package/dist/cjs/react/components/recording-controls.js +38 -0
- package/dist/cjs/react/components/rich-mention-input.d.ts +2 -0
- package/dist/cjs/react/components/rich-mention-input.js +571 -0
- package/dist/cjs/react/components/session-switcher.d.ts +14 -0
- package/dist/cjs/react/components/session-switcher.js +133 -0
- package/dist/cjs/react/components/suggestion-bar.d.ts +9 -0
- package/dist/cjs/react/components/suggestion-bar.js +47 -0
- package/dist/cjs/react/components/suggestion-chip.d.ts +9 -0
- package/dist/cjs/react/components/suggestion-chip.js +14 -0
- package/dist/cjs/react/components/voice-input-addon.d.ts +13 -0
- package/dist/cjs/react/components/voice-input-addon.js +31 -0
- package/dist/cjs/react/components/voice-input-button.d.ts +2 -0
- package/dist/cjs/react/components/voice-input-button.js +55 -0
- package/dist/cjs/react/components/wavesurfer-loader.d.ts +5 -0
- package/dist/cjs/react/components/wavesurfer-loader.js +36 -0
- package/dist/cjs/react/hooks/use-ai-chat.d.ts +22 -0
- package/dist/cjs/react/hooks/use-ai-chat.js +51 -0
- package/dist/cjs/react/hooks/use-approvals.d.ts +23 -0
- package/dist/cjs/react/hooks/use-approvals.js +63 -0
- package/dist/cjs/react/hooks/use-deepgram-transcription.d.ts +2 -0
- package/dist/cjs/react/hooks/use-deepgram-transcription.js +329 -0
- package/dist/cjs/react/hooks/use-drag-resize-panel.d.ts +48 -0
- package/dist/cjs/react/hooks/use-drag-resize-panel.js +308 -0
- package/dist/cjs/react/hooks/use-draggable-position.d.ts +25 -0
- package/dist/cjs/react/hooks/use-draggable-position.js +134 -0
- package/dist/cjs/react/hooks/use-keyboard-shortcut.d.ts +20 -0
- package/dist/cjs/react/hooks/use-keyboard-shortcut.js +93 -0
- package/dist/cjs/react/hooks/use-mentions.d.ts +23 -0
- package/dist/cjs/react/hooks/use-mentions.js +42 -0
- package/dist/cjs/react/hooks/use-suggestions.d.ts +22 -0
- package/dist/cjs/react/hooks/use-suggestions.js +39 -0
- package/dist/cjs/react/index.d.ts +43 -0
- package/dist/cjs/react/index.js +111 -0
- package/dist/cjs/react/provider/ai-chat-provider.d.ts +45 -0
- package/dist/cjs/react/provider/ai-chat-provider.js +1024 -0
- package/dist/cjs/react/provider/chat-context.d.ts +84 -0
- package/dist/cjs/react/provider/chat-context.js +13 -0
- package/dist/cjs/react/template.d.ts +84 -0
- package/dist/cjs/react/template.js +90 -0
- package/dist/cjs/react/themes.d.ts +24 -0
- package/dist/cjs/react/themes.js +273 -0
- package/dist/cjs/react/transports/langgraph/index.d.ts +2 -0
- package/dist/cjs/react/transports/langgraph/index.js +8 -0
- package/dist/cjs/react/transports/langgraph/langgraph-ai-chat.d.ts +62 -0
- package/dist/cjs/react/transports/langgraph/langgraph-ai-chat.js +94 -0
- package/dist/cjs/react/transports/langgraph.d.ts +71 -0
- package/dist/cjs/react/transports/langgraph.js +369 -0
- package/dist/cjs/react/transports/vercel/index.d.ts +2 -0
- package/dist/cjs/react/transports/vercel/index.js +8 -0
- package/dist/cjs/react/transports/vercel/vercel-ai-chat.d.ts +49 -0
- package/dist/cjs/react/transports/vercel/vercel-ai-chat.js +81 -0
- package/dist/cjs/react/transports/vercel.d.ts +30 -0
- package/dist/cjs/react/transports/vercel.js +69 -0
- package/dist/cjs/react/types.d.ts +760 -0
- package/dist/cjs/react/types.js +2 -0
- package/dist/cjs/react/ui.d.ts +73 -0
- package/dist/cjs/react/ui.js +183 -0
- package/dist/cjs/react/utils/create-approval-description.d.ts +53 -0
- package/dist/cjs/react/utils/create-approval-description.js +122 -0
- package/dist/cjs/react/utils/create-tool-result-handler.d.ts +90 -0
- package/dist/cjs/react/utils/create-tool-result-handler.js +168 -0
- package/dist/cjs/react/utils/mention-markup.d.ts +13 -0
- package/dist/cjs/react/utils/mention-markup.js +117 -0
- package/dist/cjs/react/utils/merge-pipeline-steps.d.ts +19 -0
- package/dist/cjs/react/utils/merge-pipeline-steps.js +81 -0
- package/dist/cjs/react/utils/sanitize-stored-messages.d.ts +23 -0
- package/dist/cjs/react/utils/sanitize-stored-messages.js +52 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat-auth.guard.d.ts +10 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat-auth.guard.js +42 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat-module-options.interface.d.ts +32 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat-module-options.interface.js +4 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.controller.d.ts +11 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.controller.js +80 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.module.d.ts +9 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.module.js +119 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.service.d.ts +13 -0
- package/dist/cjs/server/adapters/nestjs/chat/ai-chat.service.js +131 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/ai-chat-request.dto.d.ts +7 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js +52 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message-part.dto.d.ts +19 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message-part.dto.js +108 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message.dto.d.ts +8 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/chat-message.dto.js +59 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/index.d.ts +3 -0
- package/dist/cjs/server/adapters/nestjs/chat/dto/index.js +9 -0
- package/dist/cjs/server/adapters/nestjs/chat/index.d.ts +3 -0
- package/dist/cjs/server/adapters/nestjs/chat/index.js +9 -0
- package/dist/cjs/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +4 -0
- package/dist/cjs/server/adapters/nestjs/chat/speech-stream.gateway.js +73 -0
- package/dist/cjs/server/adapters/nestjs/chat/ws-loader.d.ts +5 -0
- package/dist/cjs/server/adapters/nestjs/chat/ws-loader.js +72 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-module.decorator.d.ts +6 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-module.decorator.js +13 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-param.decorator.d.ts +5 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-param.decorator.js +15 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-tool.decorator.d.ts +6 -0
- package/dist/cjs/server/adapters/nestjs/decorators/ai-tool.decorator.js +22 -0
- package/dist/cjs/server/adapters/nestjs/decorators/constants.d.ts +4 -0
- package/dist/cjs/server/adapters/nestjs/decorators/constants.js +7 -0
- package/dist/cjs/server/adapters/nestjs/index.d.ts +14 -0
- package/dist/cjs/server/adapters/nestjs/index.js +42 -0
- package/dist/cjs/server/adapters/nestjs/metadata.d.ts +39 -0
- package/dist/cjs/server/adapters/nestjs/metadata.js +36 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools-explorer.service.d.ts +36 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools-explorer.service.js +159 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools.module.d.ts +37 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools.module.js +44 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools.service.d.ts +28 -0
- package/dist/cjs/server/adapters/nestjs/module/ai-tools.service.js +41 -0
- package/dist/cjs/server/adapters/nestjs/scanner/nestjs-scanner.d.ts +16 -0
- package/dist/cjs/server/adapters/nestjs/scanner/nestjs-scanner.js +117 -0
- package/dist/cjs/server/adapters/nestjs/scanner/schema-builder.d.ts +26 -0
- package/dist/cjs/server/adapters/nestjs/scanner/schema-builder.js +259 -0
- package/dist/cjs/server/adapters/nestjs/swagger.d.ts +7 -0
- package/dist/cjs/server/adapters/nestjs/swagger.js +39 -0
- package/dist/cjs/server/adapters/nextjs/context-helpers.d.ts +22 -0
- package/dist/cjs/server/adapters/nextjs/context-helpers.js +60 -0
- package/dist/cjs/server/adapters/nextjs/create-ai-chat-handler.d.ts +94 -0
- package/dist/cjs/server/adapters/nextjs/create-ai-chat-handler.js +965 -0
- package/dist/cjs/server/adapters/nextjs/filter-fallback-error.d.ts +11 -0
- package/dist/cjs/server/adapters/nextjs/filter-fallback-error.js +41 -0
- package/dist/cjs/server/adapters/nextjs/index.d.ts +8 -0
- package/dist/cjs/server/adapters/nextjs/index.js +22 -0
- package/dist/cjs/server/adapters/nextjs/prepare-model-messages.d.ts +58 -0
- package/dist/cjs/server/adapters/nextjs/prepare-model-messages.js +114 -0
- package/dist/cjs/server/adapters/nextjs/sanitize-model-messages.d.ts +64 -0
- package/dist/cjs/server/adapters/nextjs/sanitize-model-messages.js +489 -0
- package/dist/cjs/server/adapters/nextjs/server-action-helper.d.ts +7 -0
- package/dist/cjs/server/adapters/nextjs/server-action-helper.js +40 -0
- package/dist/cjs/server/adapters/nextjs/types.d.ts +246 -0
- package/dist/cjs/server/adapters/nextjs/types.js +2 -0
- package/dist/cjs/server/adapters/nextjs/with-ai-tool.d.ts +9 -0
- package/dist/cjs/server/adapters/nextjs/with-ai-tool.js +12 -0
- package/dist/cjs/server/core/followup-tool.d.ts +9 -0
- package/dist/cjs/server/core/followup-tool.js +82 -0
- package/dist/cjs/server/core/index.d.ts +139 -0
- package/dist/cjs/server/core/index.js +818 -0
- package/dist/cjs/server/core/intent-classifier.d.ts +94 -0
- package/dist/cjs/server/core/intent-classifier.js +324 -0
- package/dist/cjs/server/core/model-selector.d.ts +12 -0
- package/dist/cjs/server/core/model-selector.js +48 -0
- package/dist/cjs/server/core/module-router.d.ts +14 -0
- package/dist/cjs/server/core/module-router.js +110 -0
- package/dist/cjs/server/core/zod-compact.d.ts +18 -0
- package/dist/cjs/server/core/zod-compact.js +129 -0
- package/dist/cjs/server/index.d.ts +6 -0
- package/dist/cjs/server/index.js +28 -0
- package/dist/cjs/server/lancer/cache.d.ts +9 -0
- package/dist/cjs/server/lancer/cache.js +33 -0
- package/dist/cjs/server/lancer/client.d.ts +2 -0
- package/dist/cjs/server/lancer/client.js +279 -0
- package/dist/cjs/server/lancer/errors.d.ts +13 -0
- package/dist/cjs/server/lancer/errors.js +21 -0
- package/dist/cjs/server/lancer/index.d.ts +3 -0
- package/dist/cjs/server/lancer/index.js +7 -0
- package/dist/cjs/server/lancer/telemetry-buffer.d.ts +15 -0
- package/dist/cjs/server/lancer/telemetry-buffer.js +64 -0
- package/dist/cjs/server/lancer/types.d.ts +201 -0
- package/dist/cjs/server/lancer/types.js +5 -0
- package/dist/cjs/server/pii-shield/aegis-detector.d.ts +26 -0
- package/dist/cjs/server/pii-shield/aegis-detector.js +26 -0
- package/dist/cjs/server/pii-shield/create-pii-shield.d.ts +2 -0
- package/dist/cjs/server/pii-shield/create-pii-shield.js +191 -0
- package/dist/cjs/server/pii-shield/deep-walk.d.ts +1 -0
- package/dist/cjs/server/pii-shield/deep-walk.js +19 -0
- package/dist/cjs/server/pii-shield/fake-data.d.ts +5 -0
- package/dist/cjs/server/pii-shield/fake-data.js +170 -0
- package/dist/cjs/server/pii-shield/index.d.ts +4 -0
- package/dist/cjs/server/pii-shield/index.js +9 -0
- package/dist/cjs/server/pii-shield/leakage.d.ts +1 -0
- package/dist/cjs/server/pii-shield/leakage.js +15 -0
- package/dist/cjs/server/pii-shield/session-mapping.d.ts +12 -0
- package/dist/cjs/server/pii-shield/session-mapping.js +70 -0
- package/dist/cjs/server/pipeline.d.ts +26 -0
- package/dist/cjs/server/pipeline.js +127 -0
- package/dist/cjs/server/testing/approvals.d.ts +11 -0
- package/dist/cjs/server/testing/approvals.js +41 -0
- package/dist/cjs/server/testing/combination.d.ts +3 -0
- package/dist/cjs/server/testing/combination.js +83 -0
- package/dist/cjs/server/testing/create-test-suite.d.ts +29 -0
- package/dist/cjs/server/testing/create-test-suite.js +81 -0
- package/dist/cjs/server/testing/edge-cases.d.ts +8 -0
- package/dist/cjs/server/testing/edge-cases.js +277 -0
- package/dist/cjs/server/testing/guardrails.d.ts +14 -0
- package/dist/cjs/server/testing/guardrails.js +152 -0
- package/dist/cjs/server/testing/helpers.d.ts +14 -0
- package/dist/cjs/server/testing/helpers.js +119 -0
- package/dist/cjs/server/testing/index.d.ts +12 -0
- package/dist/cjs/server/testing/index.js +37 -0
- package/dist/cjs/server/testing/mock-executor.d.ts +8 -0
- package/dist/cjs/server/testing/mock-executor.js +40 -0
- package/dist/cjs/server/testing/regression.d.ts +7 -0
- package/dist/cjs/server/testing/regression.js +27 -0
- package/dist/cjs/server/testing/routing.d.ts +12 -0
- package/dist/cjs/server/testing/routing.js +63 -0
- package/dist/cjs/server/testing/schema-consistency.d.ts +6 -0
- package/dist/cjs/server/testing/schema-consistency.js +56 -0
- package/dist/cjs/server/testing/smoke.d.ts +11 -0
- package/dist/cjs/server/testing/smoke.js +64 -0
- package/dist/cjs/server/testing/types.d.ts +156 -0
- package/dist/cjs/server/testing/types.js +2 -0
- package/dist/cjs/types.d.ts +696 -0
- package/dist/cjs/types.js +91 -0
- package/dist/cli/commands/install-skills.d.ts +17 -0
- package/dist/cli/commands/install-skills.js +185 -0
- package/dist/cli/commands/install-skills.js.map +1 -0
- package/dist/cli/index.js +25 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/react/components/ai-trigger-button.js +4 -6
- package/dist/react/components/ai-trigger-button.js.map +1 -1
- package/dist/react/components/recording-bar.js +4 -6
- package/dist/react/components/recording-bar.js.map +1 -1
- package/dist/react/components/wavesurfer-loader.d.ts +5 -0
- package/dist/react/components/wavesurfer-loader.js +34 -0
- package/dist/react/components/wavesurfer-loader.js.map +1 -0
- package/dist/server/adapters/nestjs/chat/ai-chat.module.d.ts +1 -1
- package/dist/server/adapters/nestjs/chat/ai-chat.module.js +3 -2
- package/dist/server/adapters/nestjs/chat/ai-chat.module.js.map +1 -1
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +1 -1
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js +10 -8
- package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js.map +1 -1
- package/dist/server/adapters/nestjs/chat/ws-loader.d.ts +5 -0
- package/dist/server/adapters/nestjs/chat/ws-loader.js +37 -0
- package/dist/server/adapters/nestjs/chat/ws-loader.js.map +1 -0
- package/openapi/package.json +5 -0
- package/package.json +59 -16
- package/react/langgraph/package.json +5 -0
- package/react/package.json +5 -0
- package/react/vercel/package.json +5 -0
- package/server/nestjs/package.json +5 -0
- package/server/nextjs/package.json +5 -0
- package/server/package.json +5 -0
- package/server/testing/package.json +5 -0
- package/skills/README.md +107 -0
- package/skills/building-glirastes-chat-ui/SKILL.md +378 -0
- package/skills/integrating-glirastes-nestjs/SKILL.md +346 -0
- package/skills/integrating-glirastes-nextjs/SKILL.md +306 -0
- package/skills/integrating-glirastes-nextjs-with-nestjs-backend/SKILL.md +359 -0
- package/skills/maintaining-glirastes-tools/SKILL.md +463 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface UseDraggablePositionOptions {
|
|
2
|
+
/** Enable dragging. Default: true */
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
/** Movement threshold in px before a mousedown is treated as a drag. Default: 5 */
|
|
5
|
+
dragThreshold?: number;
|
|
6
|
+
/** SessionStorage key prefix for persisting position. Falsy = no persistence. */
|
|
7
|
+
persistKey?: string | false;
|
|
8
|
+
}
|
|
9
|
+
export interface UseDraggablePositionReturn {
|
|
10
|
+
/** Current position, or null if at default (not yet dragged / reset). */
|
|
11
|
+
position: {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
} | null;
|
|
15
|
+
/** Whether the user is currently dragging. */
|
|
16
|
+
isDragging: boolean;
|
|
17
|
+
/** Attach to onMouseDown on the draggable element. */
|
|
18
|
+
onMouseDown: (e: React.MouseEvent<HTMLElement>) => void;
|
|
19
|
+
/** Whether the last interaction was a drag (true) vs a click (false).
|
|
20
|
+
* Reset to false on the next mousedown. Use to suppress onClick. */
|
|
21
|
+
wasDragged: boolean;
|
|
22
|
+
/** Programmatically reset to default position. */
|
|
23
|
+
resetPosition: () => void;
|
|
24
|
+
}
|
|
25
|
+
export declare function useDraggablePosition(options?: UseDraggablePositionOptions): UseDraggablePositionReturn;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useDraggablePosition = useDraggablePosition;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Helpers
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
function readPosition(key) {
|
|
9
|
+
if (typeof window === 'undefined')
|
|
10
|
+
return null;
|
|
11
|
+
try {
|
|
12
|
+
const raw = sessionStorage.getItem(key);
|
|
13
|
+
if (!raw)
|
|
14
|
+
return null;
|
|
15
|
+
const parsed = JSON.parse(raw);
|
|
16
|
+
if (typeof parsed.x === 'number' && typeof parsed.y === 'number') {
|
|
17
|
+
return parsed;
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function writePosition(key, pos) {
|
|
26
|
+
if (typeof window === 'undefined')
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
if (pos) {
|
|
30
|
+
sessionStorage.setItem(key, JSON.stringify(pos));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
sessionStorage.removeItem(key);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Ignore quota / private-browsing errors
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function clampToViewport(x, y, elWidth, elHeight) {
|
|
41
|
+
const margin = 8;
|
|
42
|
+
return {
|
|
43
|
+
x: Math.max(margin, Math.min(x, window.innerWidth - elWidth - margin)),
|
|
44
|
+
y: Math.max(margin, Math.min(y, window.innerHeight - elHeight - margin)),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Hook
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
function useDraggablePosition(options = {}) {
|
|
51
|
+
const { enabled = true, dragThreshold = 5, persistKey = false } = options;
|
|
52
|
+
const storageKey = persistKey ? `draggable-pos-${persistKey}` : null;
|
|
53
|
+
const [position, setPosition] = (0, react_1.useState)(() => (storageKey ? readPosition(storageKey) : null));
|
|
54
|
+
const [isDragging, setIsDragging] = (0, react_1.useState)(false);
|
|
55
|
+
const [wasDragged, setWasDragged] = (0, react_1.useState)(false);
|
|
56
|
+
const dragRef = (0, react_1.useRef)(null);
|
|
57
|
+
// Persist position changes
|
|
58
|
+
(0, react_1.useEffect)(() => {
|
|
59
|
+
if (storageKey) {
|
|
60
|
+
writePosition(storageKey, position);
|
|
61
|
+
}
|
|
62
|
+
}, [storageKey, position]);
|
|
63
|
+
// ------ mousedown handler ------
|
|
64
|
+
const onMouseDown = (0, react_1.useCallback)((e) => {
|
|
65
|
+
if (!enabled)
|
|
66
|
+
return;
|
|
67
|
+
if (e.button !== 0)
|
|
68
|
+
return;
|
|
69
|
+
// Don't intercept clicks on nested interactive children (but allow
|
|
70
|
+
// when the matched element is the container itself, i.e. currentTarget)
|
|
71
|
+
const interactiveEl = e.target.closest('button, a, input, [role="button"]');
|
|
72
|
+
if (interactiveEl && interactiveEl !== e.currentTarget) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const el = e.currentTarget;
|
|
76
|
+
const rect = el.getBoundingClientRect();
|
|
77
|
+
dragRef.current = {
|
|
78
|
+
startMouseX: e.clientX,
|
|
79
|
+
startMouseY: e.clientY,
|
|
80
|
+
startElX: rect.left,
|
|
81
|
+
startElY: rect.top,
|
|
82
|
+
el,
|
|
83
|
+
didMove: false,
|
|
84
|
+
};
|
|
85
|
+
setWasDragged(false);
|
|
86
|
+
// We don't preventDefault here yet — we do it once we confirm a drag
|
|
87
|
+
}, [enabled]);
|
|
88
|
+
// ------ global mousemove / mouseup ------
|
|
89
|
+
(0, react_1.useEffect)(() => {
|
|
90
|
+
const onMouseMove = (e) => {
|
|
91
|
+
const drag = dragRef.current;
|
|
92
|
+
if (!drag)
|
|
93
|
+
return;
|
|
94
|
+
const dx = e.clientX - drag.startMouseX;
|
|
95
|
+
const dy = e.clientY - drag.startMouseY;
|
|
96
|
+
if (!drag.didMove) {
|
|
97
|
+
if (Math.abs(dx) < dragThreshold && Math.abs(dy) < dragThreshold) {
|
|
98
|
+
return; // Below threshold — not a drag yet
|
|
99
|
+
}
|
|
100
|
+
drag.didMove = true;
|
|
101
|
+
setIsDragging(true);
|
|
102
|
+
// Prevent text selection once we start dragging
|
|
103
|
+
document.body.style.userSelect = 'none';
|
|
104
|
+
}
|
|
105
|
+
const rect = drag.el.getBoundingClientRect();
|
|
106
|
+
const newX = drag.startElX + dx;
|
|
107
|
+
const newY = drag.startElY + dy;
|
|
108
|
+
const clamped = clampToViewport(newX, newY, rect.width, rect.height);
|
|
109
|
+
setPosition(clamped);
|
|
110
|
+
};
|
|
111
|
+
const onMouseUp = () => {
|
|
112
|
+
const drag = dragRef.current;
|
|
113
|
+
if (!drag)
|
|
114
|
+
return;
|
|
115
|
+
if (drag.didMove) {
|
|
116
|
+
setWasDragged(true);
|
|
117
|
+
document.body.style.userSelect = '';
|
|
118
|
+
}
|
|
119
|
+
dragRef.current = null;
|
|
120
|
+
setIsDragging(false);
|
|
121
|
+
};
|
|
122
|
+
document.addEventListener('mousemove', onMouseMove);
|
|
123
|
+
document.addEventListener('mouseup', onMouseUp);
|
|
124
|
+
return () => {
|
|
125
|
+
document.removeEventListener('mousemove', onMouseMove);
|
|
126
|
+
document.removeEventListener('mouseup', onMouseUp);
|
|
127
|
+
};
|
|
128
|
+
}, [dragThreshold]);
|
|
129
|
+
const resetPosition = (0, react_1.useCallback)(() => {
|
|
130
|
+
setPosition(null);
|
|
131
|
+
setWasDragged(false);
|
|
132
|
+
}, []);
|
|
133
|
+
return { position, isDragging, onMouseDown, wasDragged, resetPosition };
|
|
134
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface UseKeyboardShortcutOptions {
|
|
2
|
+
/** Disable without removing the call site. Default: true. */
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
/**
|
|
5
|
+
* When true, the handler fires even if the event target is an editable
|
|
6
|
+
* element (input / textarea / contenteditable). Default: false — except
|
|
7
|
+
* for the `escape` key which always fires.
|
|
8
|
+
*/
|
|
9
|
+
allowInEditable?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Global keyboard shortcut. `mod` maps to ⌘ on Mac and Ctrl elsewhere.
|
|
13
|
+
* Escape always fires regardless of focused element so modal-style widgets
|
|
14
|
+
* can close even while an input has focus.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* useKeyboardShortcut('mod+i', () => setOpen((v) => !v));
|
|
18
|
+
* useKeyboardShortcut('escape', () => setOpen(false), { enabled: open });
|
|
19
|
+
*/
|
|
20
|
+
export declare function useKeyboardShortcut(combo: string | false | null | undefined, handler: () => void, options?: UseKeyboardShortcutOptions): void;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useKeyboardShortcut = useKeyboardShortcut;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
function isMac() {
|
|
6
|
+
if (typeof navigator === 'undefined')
|
|
7
|
+
return false;
|
|
8
|
+
return /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent || '');
|
|
9
|
+
}
|
|
10
|
+
function parseCombo(combo) {
|
|
11
|
+
const parts = combo.toLowerCase().trim().split('+').map((p) => p.trim()).filter(Boolean);
|
|
12
|
+
if (parts.length === 0)
|
|
13
|
+
return null;
|
|
14
|
+
const result = { key: '', mod: false, shift: false, alt: false };
|
|
15
|
+
for (const part of parts) {
|
|
16
|
+
if (part === 'mod' || part === 'cmd' || part === 'ctrl' || part === 'meta' || part === 'control') {
|
|
17
|
+
result.mod = true;
|
|
18
|
+
}
|
|
19
|
+
else if (part === 'shift') {
|
|
20
|
+
result.shift = true;
|
|
21
|
+
}
|
|
22
|
+
else if (part === 'alt' || part === 'option' || part === 'opt') {
|
|
23
|
+
result.alt = true;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
result.key = part;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return result.key ? result : null;
|
|
30
|
+
}
|
|
31
|
+
function matches(event, combo) {
|
|
32
|
+
const wantMod = combo.mod;
|
|
33
|
+
const gotMod = isMac() ? event.metaKey : event.ctrlKey;
|
|
34
|
+
if (wantMod !== gotMod)
|
|
35
|
+
return false;
|
|
36
|
+
if (combo.shift !== event.shiftKey)
|
|
37
|
+
return false;
|
|
38
|
+
if (combo.alt !== event.altKey)
|
|
39
|
+
return false;
|
|
40
|
+
const key = event.key.toLowerCase();
|
|
41
|
+
if (combo.key === 'escape')
|
|
42
|
+
return key === 'escape' || key === 'esc';
|
|
43
|
+
return key === combo.key;
|
|
44
|
+
}
|
|
45
|
+
function isEditableTarget(target) {
|
|
46
|
+
if (!(target instanceof HTMLElement))
|
|
47
|
+
return false;
|
|
48
|
+
const tag = target.tagName;
|
|
49
|
+
if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT')
|
|
50
|
+
return true;
|
|
51
|
+
if (target.isContentEditable)
|
|
52
|
+
return true;
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Global keyboard shortcut. `mod` maps to ⌘ on Mac and Ctrl elsewhere.
|
|
57
|
+
* Escape always fires regardless of focused element so modal-style widgets
|
|
58
|
+
* can close even while an input has focus.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* useKeyboardShortcut('mod+i', () => setOpen((v) => !v));
|
|
62
|
+
* useKeyboardShortcut('escape', () => setOpen(false), { enabled: open });
|
|
63
|
+
*/
|
|
64
|
+
function useKeyboardShortcut(combo, handler, options = {}) {
|
|
65
|
+
const { enabled = true, allowInEditable = false } = options;
|
|
66
|
+
const handlerRef = (0, react_1.useRef)(handler);
|
|
67
|
+
handlerRef.current = handler;
|
|
68
|
+
(0, react_1.useEffect)(() => {
|
|
69
|
+
if (!enabled || !combo)
|
|
70
|
+
return;
|
|
71
|
+
const parsed = parseCombo(combo);
|
|
72
|
+
if (!parsed)
|
|
73
|
+
return;
|
|
74
|
+
const listener = (event) => {
|
|
75
|
+
if (event.defaultPrevented)
|
|
76
|
+
return;
|
|
77
|
+
if (!matches(event, parsed))
|
|
78
|
+
return;
|
|
79
|
+
// Shortcuts that include ⌘/Ctrl always fire (e.g. ⌘I, ⌘K) — even
|
|
80
|
+
// inside a textarea — matching standard webapp conventions. Escape
|
|
81
|
+
// always fires so modal-style widgets can close from any focus.
|
|
82
|
+
// Bare-key shortcuts are suppressed in editable targets.
|
|
83
|
+
const isEscape = parsed.key === 'escape';
|
|
84
|
+
const skipEditableCheck = allowInEditable || isEscape || parsed.mod;
|
|
85
|
+
if (!skipEditableCheck && isEditableTarget(event.target))
|
|
86
|
+
return;
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
handlerRef.current();
|
|
89
|
+
};
|
|
90
|
+
window.addEventListener('keydown', listener);
|
|
91
|
+
return () => window.removeEventListener('keydown', listener);
|
|
92
|
+
}, [combo, enabled, allowInEditable]);
|
|
93
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { UseMentionsReturn } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Hook for accessing mention search and selection.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* function MentionSearch() {
|
|
8
|
+
* const { query, results, select, isSearching } = useMentions();
|
|
9
|
+
*
|
|
10
|
+
* return (
|
|
11
|
+
* <div>
|
|
12
|
+
* {isSearching && <Spinner />}
|
|
13
|
+
* {results.map(r => (
|
|
14
|
+
* <button key={r.id} onClick={() => select(r)}>
|
|
15
|
+
* {r.label}
|
|
16
|
+
* </button>
|
|
17
|
+
* ))}
|
|
18
|
+
* </div>
|
|
19
|
+
* );
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function useMentions(): UseMentionsReturn;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useMentions = useMentions;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const chat_context_js_1 = require("../provider/chat-context.js");
|
|
6
|
+
/**
|
|
7
|
+
* Hook for accessing mention search and selection.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* function MentionSearch() {
|
|
12
|
+
* const { query, results, select, isSearching } = useMentions();
|
|
13
|
+
*
|
|
14
|
+
* return (
|
|
15
|
+
* <div>
|
|
16
|
+
* {isSearching && <Spinner />}
|
|
17
|
+
* {results.map(r => (
|
|
18
|
+
* <button key={r.id} onClick={() => select(r)}>
|
|
19
|
+
* {r.label}
|
|
20
|
+
* </button>
|
|
21
|
+
* ))}
|
|
22
|
+
* </div>
|
|
23
|
+
* );
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
function useMentions() {
|
|
28
|
+
const ctx = (0, chat_context_js_1.useChatContext)();
|
|
29
|
+
return (0, react_1.useMemo)(() => ({
|
|
30
|
+
query: ctx.mentionQuery,
|
|
31
|
+
results: ctx.mentionResults,
|
|
32
|
+
select: ctx.selectMention,
|
|
33
|
+
activeMentions: ctx.activeMentions,
|
|
34
|
+
isSearching: ctx.isMentionSearching,
|
|
35
|
+
}), [
|
|
36
|
+
ctx.mentionQuery,
|
|
37
|
+
ctx.mentionResults,
|
|
38
|
+
ctx.selectMention,
|
|
39
|
+
ctx.activeMentions,
|
|
40
|
+
ctx.isMentionSearching,
|
|
41
|
+
]);
|
|
42
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { UseSuggestionsReturn } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Hook for accessing followup suggestion chips.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* function SuggestionBar() {
|
|
8
|
+
* const { chips, select, isGenerating } = useSuggestions();
|
|
9
|
+
*
|
|
10
|
+
* return (
|
|
11
|
+
* <div>
|
|
12
|
+
* {chips.map(chip => (
|
|
13
|
+
* <button key={chip} onClick={() => select(chip)}>
|
|
14
|
+
* {chip}
|
|
15
|
+
* </button>
|
|
16
|
+
* ))}
|
|
17
|
+
* </div>
|
|
18
|
+
* );
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function useSuggestions(): UseSuggestionsReturn;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useSuggestions = useSuggestions;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const chat_context_js_1 = require("../provider/chat-context.js");
|
|
6
|
+
/**
|
|
7
|
+
* Hook for accessing followup suggestion chips.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* function SuggestionBar() {
|
|
12
|
+
* const { chips, select, isGenerating } = useSuggestions();
|
|
13
|
+
*
|
|
14
|
+
* return (
|
|
15
|
+
* <div>
|
|
16
|
+
* {chips.map(chip => (
|
|
17
|
+
* <button key={chip} onClick={() => select(chip)}>
|
|
18
|
+
* {chip}
|
|
19
|
+
* </button>
|
|
20
|
+
* ))}
|
|
21
|
+
* </div>
|
|
22
|
+
* );
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
function useSuggestions() {
|
|
27
|
+
const ctx = (0, chat_context_js_1.useChatContext)();
|
|
28
|
+
return (0, react_1.useMemo)(() => ({
|
|
29
|
+
chips: ctx.suggestionChips,
|
|
30
|
+
refresh: ctx.refreshSuggestions,
|
|
31
|
+
select: ctx.selectSuggestion,
|
|
32
|
+
isGenerating: ctx.isSuggestionsGenerating,
|
|
33
|
+
}), [
|
|
34
|
+
ctx.suggestionChips,
|
|
35
|
+
ctx.refreshSuggestions,
|
|
36
|
+
ctx.selectSuggestion,
|
|
37
|
+
ctx.isSuggestionsGenerating,
|
|
38
|
+
]);
|
|
39
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export type { ChatMessage, MessagePart, TextPart, ToolInvocationPart, ToolResultPart, TruncationInfo, PipelineStepUsage, PipelineStepReport, PipelineStatus, PipelineState, MentionResult, MentionData, MentionConfig, MentionSerializationConfig, SessionConfig, SessionSummary, WireChatMessage, ChatTheme, ChatThemePreset, ChatThemeOverride, ChatThemeColors, ChatLocale, ChatSize, ChatSizePreset, SuggestionsConfig, ToolLabelConfig, ToolResultDisplayMode, ToolResultDisplayConfig, VoiceInputConfig, Mention, MentionChipProps, MentionChipListProps, ChatClassNames, ChatComponents, OnBeforeSend, OnToolResult, ApprovalDescriptionFn, PipelineMessageTranslator, StepSummaryFormatter, AiChatProviderConfig, UseAiChatReturn, PendingApproval, UseApprovalsReturn, UseMentionsReturn, UseSuggestionsReturn, AiChatPanelProps, MessageListProps, MessageBubbleProps, ChatInputProps, MentionInputProps, RichMentionInputHandle, RichMentionInputProps, RichMentionInputComponents, MentionDropdownItemProps, ChatWindowHeaderRenderProps, ChatWindowProps, ApprovalCardProps, BulkApprovalCardProps, PipelineTimelineProps, SuggestionChipProps, SuggestionBarProps, AiTriggerButtonProps, ToolResultBlockProps, MarkdownProps, ChatTransport, ChatTransportConfig, ChatTransportDataPart, ChatTransportDataHandler, ChatTransportApprovalResponse, } from './types.js';
|
|
2
|
+
export type { UseDeepgramTranscriptionOptions, UseDeepgramTranscriptionReturn, VoiceInputButtonProps, RecordingBarProps, } from './types.js';
|
|
3
|
+
export { AiChatProvider, type AiChatProviderProps } from './provider/ai-chat-provider.js';
|
|
4
|
+
export { useChatContext } from './provider/chat-context.js';
|
|
5
|
+
export type { ChatContextValue } from './provider/chat-context.js';
|
|
6
|
+
export { useAiChat } from './hooks/use-ai-chat.js';
|
|
7
|
+
export { useApprovals } from './hooks/use-approvals.js';
|
|
8
|
+
export { useMentions } from './hooks/use-mentions.js';
|
|
9
|
+
export { useSuggestions } from './hooks/use-suggestions.js';
|
|
10
|
+
export { useDeepgramTranscription } from './hooks/use-deepgram-transcription.js';
|
|
11
|
+
export { useDragResizePanel } from './hooks/use-drag-resize-panel.js';
|
|
12
|
+
export type { UseDragResizePanelOptions, UseDragResizePanelReturn, ResizeEdge, } from './hooks/use-drag-resize-panel.js';
|
|
13
|
+
export { useDraggablePosition } from './hooks/use-draggable-position.js';
|
|
14
|
+
export { useKeyboardShortcut } from './hooks/use-keyboard-shortcut.js';
|
|
15
|
+
export type { UseKeyboardShortcutOptions } from './hooks/use-keyboard-shortcut.js';
|
|
16
|
+
export type { UseDraggablePositionOptions, UseDraggablePositionReturn, } from './hooks/use-draggable-position.js';
|
|
17
|
+
export { AiChatPanel } from './components/ai-chat-panel.js';
|
|
18
|
+
export { FloatingChatUI, type FloatingChatUIProps } from './components/floating-chat-ui.js';
|
|
19
|
+
export { MessageList } from './components/message-list.js';
|
|
20
|
+
export { MessageBubble } from './components/message-bubble.js';
|
|
21
|
+
export { ChatInput } from './components/chat-input.js';
|
|
22
|
+
export { MentionInput } from './components/mention-input.js';
|
|
23
|
+
export { RichMentionInput } from './components/rich-mention-input.js';
|
|
24
|
+
export { ChatWindow } from './components/chat-window.js';
|
|
25
|
+
export { ApprovalCard } from './components/approval-card.js';
|
|
26
|
+
export { BulkApprovalCard } from './components/bulk-approval-card.js';
|
|
27
|
+
export { PipelineTimeline } from './components/pipeline-timeline.js';
|
|
28
|
+
export { SuggestionChip } from './components/suggestion-chip.js';
|
|
29
|
+
export { SuggestionBar } from './components/suggestion-bar.js';
|
|
30
|
+
export { MentionChip, MentionChipList } from './components/mention-chip.js';
|
|
31
|
+
export { VoiceInputButton } from './components/voice-input-button.js';
|
|
32
|
+
export { RecordingBar } from './components/recording-bar.js';
|
|
33
|
+
export { AiTriggerButton } from './components/ai-trigger-button.js';
|
|
34
|
+
export { SessionSwitcher, type SessionSwitcherProps } from './components/session-switcher.js';
|
|
35
|
+
export { createRestSessionBridge, type RestSessionBridgeOptions, type HeadersResolver, } from './bridges/rest-session-bridge.js';
|
|
36
|
+
export { getThemeVars, CHAT_THEME_PRESETS, DEFAULT_THEME_PRESET } from './themes.js';
|
|
37
|
+
export { mergePipelineSteps } from './utils/merge-pipeline-steps.js';
|
|
38
|
+
export { sanitizeStoredMessages } from './utils/sanitize-stored-messages.js';
|
|
39
|
+
export { stripContextBlocks, parseMentionSegments, serializeMentionsForSend, inferMentionPrefix, normalizeMentionSlug, } from './utils/mention-markup.js';
|
|
40
|
+
export { createToolResultHandler, type ToolResultHandlerConfig, } from './utils/create-tool-result-handler.js';
|
|
41
|
+
export { createApprovalDescriptionGenerator, type ApprovalDescriptionConfig, } from './utils/create-approval-description.js';
|
|
42
|
+
export * from './ui.js';
|
|
43
|
+
export * from './template.js';
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// glirastes/react
|
|
4
|
+
//
|
|
5
|
+
// React components, hooks, and provider for AI chat UI.
|
|
6
|
+
// Styling-neutral: uses className props and data-* attributes.
|
|
7
|
+
// ============================================================================
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.createApprovalDescriptionGenerator = exports.createToolResultHandler = exports.normalizeMentionSlug = exports.inferMentionPrefix = exports.serializeMentionsForSend = exports.parseMentionSegments = exports.stripContextBlocks = exports.sanitizeStoredMessages = exports.mergePipelineSteps = exports.DEFAULT_THEME_PRESET = exports.CHAT_THEME_PRESETS = exports.getThemeVars = exports.createRestSessionBridge = exports.SessionSwitcher = exports.AiTriggerButton = exports.RecordingBar = exports.VoiceInputButton = exports.MentionChipList = exports.MentionChip = exports.SuggestionBar = exports.SuggestionChip = exports.PipelineTimeline = exports.BulkApprovalCard = exports.ApprovalCard = exports.ChatWindow = exports.RichMentionInput = exports.MentionInput = exports.ChatInput = exports.MessageBubble = exports.MessageList = exports.FloatingChatUI = exports.AiChatPanel = exports.useKeyboardShortcut = exports.useDraggablePosition = exports.useDragResizePanel = exports.useDeepgramTranscription = exports.useSuggestions = exports.useMentions = exports.useApprovals = exports.useAiChat = exports.useChatContext = exports.AiChatProvider = void 0;
|
|
24
|
+
// Provider
|
|
25
|
+
var ai_chat_provider_js_1 = require("./provider/ai-chat-provider.js");
|
|
26
|
+
Object.defineProperty(exports, "AiChatProvider", { enumerable: true, get: function () { return ai_chat_provider_js_1.AiChatProvider; } });
|
|
27
|
+
// Context (for advanced use cases)
|
|
28
|
+
var chat_context_js_1 = require("./provider/chat-context.js");
|
|
29
|
+
Object.defineProperty(exports, "useChatContext", { enumerable: true, get: function () { return chat_context_js_1.useChatContext; } });
|
|
30
|
+
// Hooks
|
|
31
|
+
var use_ai_chat_js_1 = require("./hooks/use-ai-chat.js");
|
|
32
|
+
Object.defineProperty(exports, "useAiChat", { enumerable: true, get: function () { return use_ai_chat_js_1.useAiChat; } });
|
|
33
|
+
var use_approvals_js_1 = require("./hooks/use-approvals.js");
|
|
34
|
+
Object.defineProperty(exports, "useApprovals", { enumerable: true, get: function () { return use_approvals_js_1.useApprovals; } });
|
|
35
|
+
var use_mentions_js_1 = require("./hooks/use-mentions.js");
|
|
36
|
+
Object.defineProperty(exports, "useMentions", { enumerable: true, get: function () { return use_mentions_js_1.useMentions; } });
|
|
37
|
+
var use_suggestions_js_1 = require("./hooks/use-suggestions.js");
|
|
38
|
+
Object.defineProperty(exports, "useSuggestions", { enumerable: true, get: function () { return use_suggestions_js_1.useSuggestions; } });
|
|
39
|
+
var use_deepgram_transcription_js_1 = require("./hooks/use-deepgram-transcription.js");
|
|
40
|
+
Object.defineProperty(exports, "useDeepgramTranscription", { enumerable: true, get: function () { return use_deepgram_transcription_js_1.useDeepgramTranscription; } });
|
|
41
|
+
var use_drag_resize_panel_js_1 = require("./hooks/use-drag-resize-panel.js");
|
|
42
|
+
Object.defineProperty(exports, "useDragResizePanel", { enumerable: true, get: function () { return use_drag_resize_panel_js_1.useDragResizePanel; } });
|
|
43
|
+
var use_draggable_position_js_1 = require("./hooks/use-draggable-position.js");
|
|
44
|
+
Object.defineProperty(exports, "useDraggablePosition", { enumerable: true, get: function () { return use_draggable_position_js_1.useDraggablePosition; } });
|
|
45
|
+
var use_keyboard_shortcut_js_1 = require("./hooks/use-keyboard-shortcut.js");
|
|
46
|
+
Object.defineProperty(exports, "useKeyboardShortcut", { enumerable: true, get: function () { return use_keyboard_shortcut_js_1.useKeyboardShortcut; } });
|
|
47
|
+
// Components
|
|
48
|
+
var ai_chat_panel_js_1 = require("./components/ai-chat-panel.js");
|
|
49
|
+
Object.defineProperty(exports, "AiChatPanel", { enumerable: true, get: function () { return ai_chat_panel_js_1.AiChatPanel; } });
|
|
50
|
+
var floating_chat_ui_js_1 = require("./components/floating-chat-ui.js");
|
|
51
|
+
Object.defineProperty(exports, "FloatingChatUI", { enumerable: true, get: function () { return floating_chat_ui_js_1.FloatingChatUI; } });
|
|
52
|
+
var message_list_js_1 = require("./components/message-list.js");
|
|
53
|
+
Object.defineProperty(exports, "MessageList", { enumerable: true, get: function () { return message_list_js_1.MessageList; } });
|
|
54
|
+
var message_bubble_js_1 = require("./components/message-bubble.js");
|
|
55
|
+
Object.defineProperty(exports, "MessageBubble", { enumerable: true, get: function () { return message_bubble_js_1.MessageBubble; } });
|
|
56
|
+
var chat_input_js_1 = require("./components/chat-input.js");
|
|
57
|
+
Object.defineProperty(exports, "ChatInput", { enumerable: true, get: function () { return chat_input_js_1.ChatInput; } });
|
|
58
|
+
var mention_input_js_1 = require("./components/mention-input.js");
|
|
59
|
+
Object.defineProperty(exports, "MentionInput", { enumerable: true, get: function () { return mention_input_js_1.MentionInput; } });
|
|
60
|
+
var rich_mention_input_js_1 = require("./components/rich-mention-input.js");
|
|
61
|
+
Object.defineProperty(exports, "RichMentionInput", { enumerable: true, get: function () { return rich_mention_input_js_1.RichMentionInput; } });
|
|
62
|
+
var chat_window_js_1 = require("./components/chat-window.js");
|
|
63
|
+
Object.defineProperty(exports, "ChatWindow", { enumerable: true, get: function () { return chat_window_js_1.ChatWindow; } });
|
|
64
|
+
var approval_card_js_1 = require("./components/approval-card.js");
|
|
65
|
+
Object.defineProperty(exports, "ApprovalCard", { enumerable: true, get: function () { return approval_card_js_1.ApprovalCard; } });
|
|
66
|
+
var bulk_approval_card_js_1 = require("./components/bulk-approval-card.js");
|
|
67
|
+
Object.defineProperty(exports, "BulkApprovalCard", { enumerable: true, get: function () { return bulk_approval_card_js_1.BulkApprovalCard; } });
|
|
68
|
+
var pipeline_timeline_js_1 = require("./components/pipeline-timeline.js");
|
|
69
|
+
Object.defineProperty(exports, "PipelineTimeline", { enumerable: true, get: function () { return pipeline_timeline_js_1.PipelineTimeline; } });
|
|
70
|
+
var suggestion_chip_js_1 = require("./components/suggestion-chip.js");
|
|
71
|
+
Object.defineProperty(exports, "SuggestionChip", { enumerable: true, get: function () { return suggestion_chip_js_1.SuggestionChip; } });
|
|
72
|
+
var suggestion_bar_js_1 = require("./components/suggestion-bar.js");
|
|
73
|
+
Object.defineProperty(exports, "SuggestionBar", { enumerable: true, get: function () { return suggestion_bar_js_1.SuggestionBar; } });
|
|
74
|
+
var mention_chip_js_1 = require("./components/mention-chip.js");
|
|
75
|
+
Object.defineProperty(exports, "MentionChip", { enumerable: true, get: function () { return mention_chip_js_1.MentionChip; } });
|
|
76
|
+
Object.defineProperty(exports, "MentionChipList", { enumerable: true, get: function () { return mention_chip_js_1.MentionChipList; } });
|
|
77
|
+
var voice_input_button_js_1 = require("./components/voice-input-button.js");
|
|
78
|
+
Object.defineProperty(exports, "VoiceInputButton", { enumerable: true, get: function () { return voice_input_button_js_1.VoiceInputButton; } });
|
|
79
|
+
var recording_bar_js_1 = require("./components/recording-bar.js");
|
|
80
|
+
Object.defineProperty(exports, "RecordingBar", { enumerable: true, get: function () { return recording_bar_js_1.RecordingBar; } });
|
|
81
|
+
var ai_trigger_button_js_1 = require("./components/ai-trigger-button.js");
|
|
82
|
+
Object.defineProperty(exports, "AiTriggerButton", { enumerable: true, get: function () { return ai_trigger_button_js_1.AiTriggerButton; } });
|
|
83
|
+
var session_switcher_js_1 = require("./components/session-switcher.js");
|
|
84
|
+
Object.defineProperty(exports, "SessionSwitcher", { enumerable: true, get: function () { return session_switcher_js_1.SessionSwitcher; } });
|
|
85
|
+
// Bridges
|
|
86
|
+
var rest_session_bridge_js_1 = require("./bridges/rest-session-bridge.js");
|
|
87
|
+
Object.defineProperty(exports, "createRestSessionBridge", { enumerable: true, get: function () { return rest_session_bridge_js_1.createRestSessionBridge; } });
|
|
88
|
+
// Theme helpers
|
|
89
|
+
var themes_js_1 = require("./themes.js");
|
|
90
|
+
Object.defineProperty(exports, "getThemeVars", { enumerable: true, get: function () { return themes_js_1.getThemeVars; } });
|
|
91
|
+
Object.defineProperty(exports, "CHAT_THEME_PRESETS", { enumerable: true, get: function () { return themes_js_1.CHAT_THEME_PRESETS; } });
|
|
92
|
+
Object.defineProperty(exports, "DEFAULT_THEME_PRESET", { enumerable: true, get: function () { return themes_js_1.DEFAULT_THEME_PRESET; } });
|
|
93
|
+
// Utilities
|
|
94
|
+
var merge_pipeline_steps_js_1 = require("./utils/merge-pipeline-steps.js");
|
|
95
|
+
Object.defineProperty(exports, "mergePipelineSteps", { enumerable: true, get: function () { return merge_pipeline_steps_js_1.mergePipelineSteps; } });
|
|
96
|
+
var sanitize_stored_messages_js_1 = require("./utils/sanitize-stored-messages.js");
|
|
97
|
+
Object.defineProperty(exports, "sanitizeStoredMessages", { enumerable: true, get: function () { return sanitize_stored_messages_js_1.sanitizeStoredMessages; } });
|
|
98
|
+
var mention_markup_js_1 = require("./utils/mention-markup.js");
|
|
99
|
+
Object.defineProperty(exports, "stripContextBlocks", { enumerable: true, get: function () { return mention_markup_js_1.stripContextBlocks; } });
|
|
100
|
+
Object.defineProperty(exports, "parseMentionSegments", { enumerable: true, get: function () { return mention_markup_js_1.parseMentionSegments; } });
|
|
101
|
+
Object.defineProperty(exports, "serializeMentionsForSend", { enumerable: true, get: function () { return mention_markup_js_1.serializeMentionsForSend; } });
|
|
102
|
+
Object.defineProperty(exports, "inferMentionPrefix", { enumerable: true, get: function () { return mention_markup_js_1.inferMentionPrefix; } });
|
|
103
|
+
Object.defineProperty(exports, "normalizeMentionSlug", { enumerable: true, get: function () { return mention_markup_js_1.normalizeMentionSlug; } });
|
|
104
|
+
var create_tool_result_handler_js_1 = require("./utils/create-tool-result-handler.js");
|
|
105
|
+
Object.defineProperty(exports, "createToolResultHandler", { enumerable: true, get: function () { return create_tool_result_handler_js_1.createToolResultHandler; } });
|
|
106
|
+
var create_approval_description_js_1 = require("./utils/create-approval-description.js");
|
|
107
|
+
Object.defineProperty(exports, "createApprovalDescriptionGenerator", { enumerable: true, get: function () { return create_approval_description_js_1.createApprovalDescriptionGenerator; } });
|
|
108
|
+
// UI action bus + hooks (client action dispatch)
|
|
109
|
+
__exportStar(require("./ui.js"), exports);
|
|
110
|
+
// Pre-styled template (Tailwind wrappers around the unstyled components)
|
|
111
|
+
__exportStar(require("./template.js"), exports);
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { AiChatProviderConfig, ChatTransport } from '../types.js';
|
|
3
|
+
import type { ChatLocale } from '../types.js';
|
|
4
|
+
export declare const DEFAULT_LOCALE: ChatLocale;
|
|
5
|
+
export interface AiChatProviderProps extends AiChatProviderConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Chat transport — required. Use one of the built-in hooks or implement
|
|
8
|
+
* the `ChatTransport` interface for a custom backend.
|
|
9
|
+
*
|
|
10
|
+
* - `useVercelAiChatTransport` from `glirastes/react/vercel`
|
|
11
|
+
* - `useLangGraphChatTransport` from `glirastes/react/langgraph`
|
|
12
|
+
*/
|
|
13
|
+
transport: ChatTransport;
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Provider component that manages chat state and exposes it to child components.
|
|
18
|
+
*
|
|
19
|
+
* Transport-agnostic: pick a transport hook (Vercel, LangGraph, or your own)
|
|
20
|
+
* and pass it via the `transport` prop.
|
|
21
|
+
*
|
|
22
|
+
* Features:
|
|
23
|
+
* - Message sanitization (removes orphaned approval-requested tool parts)
|
|
24
|
+
* - Session persistence (load on mount, save on change)
|
|
25
|
+
* - Approval extraction and response handling
|
|
26
|
+
* - Truncation detection via `data-truncation` data parts
|
|
27
|
+
* - Suggestion extraction from `suggest_followups` tool output
|
|
28
|
+
* - Pagination (visible message count, loadMore)
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* import { AiChatProvider, AiChatPanel } from 'glirastes/react';
|
|
33
|
+
* import { useVercelAiChatTransport } from 'glirastes/react/vercel';
|
|
34
|
+
*
|
|
35
|
+
* function App() {
|
|
36
|
+
* const transport = useVercelAiChatTransport({ endpoint: '/api/ai/chat' });
|
|
37
|
+
* return (
|
|
38
|
+
* <AiChatProvider transport={transport}>
|
|
39
|
+
* <AiChatPanel />
|
|
40
|
+
* </AiChatProvider>
|
|
41
|
+
* );
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function AiChatProvider({ transport, mentions, toolResults: userToolResults, voice: userVoice, session, classNames: userClassNames, components: userComponents, suggestions: userSuggestions, locale: userLocale, theme: userTheme, onToolResult, onBeforeSend, approvalDescription: userApprovalDescription, continueMessage, toolLabels: userToolLabels, pipelineMessageTranslator, stepSummaryFormatter, children, }: AiChatProviderProps): import("react/jsx-runtime").JSX.Element;
|