@copilotkit/vue 2.0.0-rc.1 → 2.0.0-rc.2
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/PARITY.md +13 -12
- package/README.md +1 -2
- package/dist/components/copilot-provider/CopilotKit.vue.d.ts +3 -1
- package/dist/components/copilot-provider/CopilotKit.vue.d.ts.map +1 -1
- package/dist/index.cjs +43 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +10170 -7506
- package/dist/index.mjs.map +1 -1
- package/dist/v2/components/A2UIMessageRenderer.d.ts +7 -0
- package/dist/v2/components/A2UIMessageRenderer.d.ts.map +1 -1
- package/dist/v2/components/A2UISurfaceActivityRenderer.vue.d.ts.map +1 -1
- package/dist/v2/components/a2ui/A2UIBuiltInToolCallRenderer.d.ts +11 -2
- package/dist/v2/components/a2ui/A2UIBuiltInToolCallRenderer.d.ts.map +1 -1
- package/dist/v2/components/a2ui/A2UIRecoveryStates.d.ts +136 -0
- package/dist/v2/components/a2ui/A2UIRecoveryStates.d.ts.map +1 -0
- package/dist/v2/components/chat/BasicMarkdown.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChat.vue.d.ts +1 -0
- package/dist/v2/components/chat/CopilotChat.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatAssistantMessage.vue.d.ts +3 -1
- package/dist/v2/components/chat/CopilotChatAssistantMessage.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatAssistantToolbarButton.vue.d.ts +16 -0
- package/dist/v2/components/chat/CopilotChatAssistantToolbarButton.vue.d.ts.map +1 -0
- package/dist/v2/components/chat/CopilotChatAttachmentQueue.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatAttachmentRenderer.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatAudioRecorder.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatFeedbackCommentPopover.vue.d.ts +22 -0
- package/dist/v2/components/chat/CopilotChatFeedbackCommentPopover.vue.d.ts.map +1 -0
- package/dist/v2/components/chat/CopilotChatInput.vue.d.ts +69 -16
- package/dist/v2/components/chat/CopilotChatInput.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatInspectorButton.vue.d.ts +12 -0
- package/dist/v2/components/chat/CopilotChatInspectorButton.vue.d.ts.map +1 -0
- package/dist/v2/components/chat/CopilotChatLightbox.vue.d.ts +22 -0
- package/dist/v2/components/chat/CopilotChatLightbox.vue.d.ts.map +1 -0
- package/dist/v2/components/chat/CopilotChatMessageView.vue.d.ts +20 -0
- package/dist/v2/components/chat/CopilotChatMessageView.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatReasoningMessage.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatSuggestionPill.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatSuggestionView.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatToggleButton.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatToolCallGroup.vue.d.ts +32 -0
- package/dist/v2/components/chat/CopilotChatToolCallGroup.vue.d.ts.map +1 -0
- package/dist/v2/components/chat/CopilotChatToolCallItem.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatToolCallsView.vue.d.ts +11 -1
- package/dist/v2/components/chat/CopilotChatToolCallsView.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatUserMessage.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatView.vue.d.ts +1 -0
- package/dist/v2/components/chat/CopilotChatView.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotChatWorkSummary.vue.d.ts +5 -0
- package/dist/v2/components/chat/CopilotChatWorkSummary.vue.d.ts.map +1 -0
- package/dist/v2/components/chat/CopilotModalHeader.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotModalHeaderCloseButton.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotModalHeaderTitle.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotPopup.vue.d.ts +1 -0
- package/dist/v2/components/chat/CopilotPopup.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotPopupView.vue.d.ts +1 -0
- package/dist/v2/components/chat/CopilotPopupView.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotPopupViewInternal.vue.d.ts +1 -0
- package/dist/v2/components/chat/CopilotPopupViewInternal.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotPopupWelcomeScreen.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotSidebar.vue.d.ts +2 -0
- package/dist/v2/components/chat/CopilotSidebar.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotSidebarView.vue.d.ts +2 -0
- package/dist/v2/components/chat/CopilotSidebarView.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotSidebarViewInternal.vue.d.ts +2 -0
- package/dist/v2/components/chat/CopilotSidebarViewInternal.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/CopilotSidebarWelcomeScreen.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/StreamingMarkdownDefault.vue.d.ts.map +1 -1
- package/dist/v2/components/chat/index.d.ts +17 -0
- package/dist/v2/components/chat/index.d.ts.map +1 -1
- package/dist/v2/components/chat/inspector-shortcuts.d.ts +12 -0
- package/dist/v2/components/chat/inspector-shortcuts.d.ts.map +1 -0
- package/dist/v2/components/chat/message-feedback.d.ts +89 -0
- package/dist/v2/components/chat/message-feedback.d.ts.map +1 -0
- package/dist/v2/components/chat/tool-call-capture.d.ts +39 -0
- package/dist/v2/components/chat/tool-call-capture.d.ts.map +1 -0
- package/dist/v2/components/chat/tool-call-display-context.d.ts +39 -0
- package/dist/v2/components/chat/tool-call-display-context.d.ts.map +1 -0
- package/dist/v2/components/chat/tool-call-group-parts.d.ts +144 -0
- package/dist/v2/components/chat/tool-call-group-parts.d.ts.map +1 -0
- package/dist/v2/components/chat/tool-call-layout.d.ts +115 -0
- package/dist/v2/components/chat/tool-call-layout.d.ts.map +1 -0
- package/dist/v2/components/chat/turn-work.d.ts +35 -0
- package/dist/v2/components/chat/turn-work.d.ts.map +1 -0
- package/dist/v2/components/chat/types.d.ts +104 -4
- package/dist/v2/components/chat/types.d.ts.map +1 -1
- package/dist/v2/components/chat/use-lightbox.d.ts +18 -0
- package/dist/v2/components/chat/use-lightbox.d.ts.map +1 -0
- package/dist/v2/components/icons/index.d.ts +1 -1
- package/dist/v2/components/icons/index.d.ts.map +1 -1
- package/dist/v2/components/ui/CopilotDropdownMenuContent.vue.d.ts +55 -0
- package/dist/v2/components/ui/CopilotDropdownMenuContent.vue.d.ts.map +1 -0
- package/dist/v2/components/ui/CopilotPopover.vue.d.ts +40 -0
- package/dist/v2/components/ui/CopilotPopover.vue.d.ts.map +1 -0
- package/dist/v2/components/ui/CopilotTooltip.vue.d.ts +37 -0
- package/dist/v2/components/ui/CopilotTooltip.vue.d.ts.map +1 -0
- package/dist/v2/components/ui/dropdown-menu.d.ts +14 -0
- package/dist/v2/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/v2/components/ui/floating.d.ts +84 -0
- package/dist/v2/components/ui/floating.d.ts.map +1 -0
- package/dist/v2/components/ui/presence.d.ts +9 -0
- package/dist/v2/components/ui/presence.d.ts.map +1 -0
- package/dist/v2/components/ui/use-id.d.ts +9 -0
- package/dist/v2/components/ui/use-id.d.ts.map +1 -0
- package/dist/v2/hooks/use-default-render-tool.d.ts +6 -0
- package/dist/v2/hooks/use-default-render-tool.d.ts.map +1 -1
- package/dist/v2/hooks/use-render-tool.d.ts +4 -0
- package/dist/v2/hooks/use-render-tool.d.ts.map +1 -1
- package/dist/v2/index.cjs +1 -1
- package/dist/v2/index.d.cts +3 -0
- package/dist/v2/index.d.mts +3 -0
- package/dist/v2/index.d.ts +3 -0
- package/dist/v2/index.d.ts.map +1 -1
- package/dist/v2/index.mjs +165 -162
- package/dist/v2/lib/message-feedback.d.ts +33 -0
- package/dist/v2/lib/message-feedback.d.ts.map +1 -0
- package/dist/v2/providers/CopilotChatConfigurationProvider.vue.d.ts.map +1 -1
- package/dist/v2/providers/CopilotKitProvider.types.d.ts +56 -1
- package/dist/v2/providers/CopilotKitProvider.types.d.ts.map +1 -1
- package/dist/v2/providers/CopilotKitProvider.vue.d.ts +5 -1
- package/dist/v2/providers/CopilotKitProvider.vue.d.ts.map +1 -1
- package/dist/v2/providers/index.d.ts +1 -1
- package/dist/v2/providers/index.d.ts.map +1 -1
- package/dist/v2/providers/keys.d.ts +8 -0
- package/dist/v2/providers/keys.d.ts.map +1 -1
- package/dist/v2/providers/types.d.ts +9 -0
- package/dist/v2/providers/types.d.ts.map +1 -1
- package/dist/v2/styles/CopilotKitStyles.d.ts +18 -0
- package/dist/v2/styles/CopilotKitStyles.d.ts.map +1 -0
- package/dist/v2/types/defineToolCallRenderer.d.ts +2 -0
- package/dist/v2/types/defineToolCallRenderer.d.ts.map +1 -1
- package/dist/v2/types/vue-tool-call-renderer.d.ts +7 -0
- package/dist/v2/types/vue-tool-call-renderer.d.ts.map +1 -1
- package/package.json +11 -23
- package/src/components/copilot-provider/CopilotKit.vue +4 -1
- package/src/v2/__tests__/exports.test.ts +4 -2
- package/src/v2/components/A2UIMessageRenderer.ts +55 -67
- package/src/v2/components/A2UISurfaceActivityRenderer.vue +11 -23
- package/src/v2/components/__tests__/A2UIBasicCatalogColors.test.ts +8 -9
- package/src/v2/components/__tests__/A2UIMessageRenderer.test.ts +63 -36
- package/src/v2/components/a2ui/A2UIBuiltInToolCallRenderer.ts +14 -257
- package/src/v2/components/a2ui/A2UIRecoveryStates.ts +444 -0
- package/src/v2/components/a2ui/__tests__/A2UIRecoveryStates.test.ts +175 -0
- package/src/v2/components/chat/BasicMarkdown.vue +8 -6
- package/src/v2/components/chat/CopilotChat.vue +7 -0
- package/src/v2/components/chat/CopilotChatAssistantMessage.vue +267 -67
- package/src/v2/components/chat/CopilotChatAssistantToolbarButton.vue +46 -0
- package/src/v2/components/chat/CopilotChatAttachmentQueue.vue +141 -168
- package/src/v2/components/chat/CopilotChatAttachmentRenderer.vue +67 -18
- package/src/v2/components/chat/CopilotChatAudioRecorder.vue +2 -2
- package/src/v2/components/chat/CopilotChatFeedbackCommentPopover.vue +240 -0
- package/src/v2/components/chat/CopilotChatInput.vue +210 -161
- package/src/v2/components/chat/CopilotChatInspectorButton.vue +331 -0
- package/src/v2/components/chat/CopilotChatLightbox.vue +105 -0
- package/src/v2/components/chat/CopilotChatMessageView.vue +261 -18
- package/src/v2/components/chat/CopilotChatReasoningMessage.vue +21 -22
- package/src/v2/components/chat/CopilotChatSuggestionPill.vue +5 -14
- package/src/v2/components/chat/CopilotChatSuggestionView.vue +1 -4
- package/src/v2/components/chat/CopilotChatToggleButton.vue +3 -9
- package/src/v2/components/chat/CopilotChatToggleButtonCloseIcon.ts +1 -1
- package/src/v2/components/chat/CopilotChatToggleButtonOpenIcon.ts +1 -1
- package/src/v2/components/chat/CopilotChatToolCallGroup.vue +330 -0
- package/src/v2/components/chat/CopilotChatToolCallItem.vue +21 -11
- package/src/v2/components/chat/CopilotChatToolCallsView.vue +192 -21
- package/src/v2/components/chat/CopilotChatUserMessage.vue +105 -42
- package/src/v2/components/chat/CopilotChatView.vue +33 -38
- package/src/v2/components/chat/CopilotChatWorkSummary.vue +85 -0
- package/src/v2/components/chat/CopilotModalHeader.vue +10 -8
- package/src/v2/components/chat/CopilotModalHeaderCloseButton.ts +7 -6
- package/src/v2/components/chat/CopilotModalHeaderTitle.ts +1 -4
- package/src/v2/components/chat/CopilotPopup.vue +3 -0
- package/src/v2/components/chat/CopilotPopupView.vue +1 -0
- package/src/v2/components/chat/CopilotPopupViewInternal.vue +9 -19
- package/src/v2/components/chat/CopilotPopupWelcomeScreen.vue +5 -8
- package/src/v2/components/chat/CopilotSidebar.vue +5 -0
- package/src/v2/components/chat/CopilotSidebarView.vue +2 -0
- package/src/v2/components/chat/CopilotSidebarViewInternal.vue +24 -17
- package/src/v2/components/chat/CopilotSidebarWelcomeScreen.vue +7 -10
- package/src/v2/components/chat/StreamingMarkdownDefault.vue +3 -5
- package/src/v2/components/chat/__tests__/CopilotChatAssistantMessage.inspector.test.ts +269 -0
- package/src/v2/components/chat/__tests__/CopilotChatAssistantMessage.learningFeedback.test.ts +760 -0
- package/src/v2/components/chat/__tests__/CopilotChatAssistantMessage.slots.e2e.test.ts +3 -5
- package/src/v2/components/chat/__tests__/CopilotChatAssistantMessage.test.ts +2 -2
- package/src/v2/components/chat/__tests__/CopilotChatInput.addMenu.test.ts +328 -0
- package/src/v2/components/chat/__tests__/CopilotChatInput.slots.e2e.test.ts +6 -3
- package/src/v2/components/chat/__tests__/CopilotChatInput.test.ts +22 -13
- package/src/v2/components/chat/__tests__/CopilotChatLightbox.test.ts +160 -0
- package/src/v2/components/chat/__tests__/CopilotChatMessageView.toolCallDisplay.test.ts +735 -0
- package/src/v2/components/chat/__tests__/CopilotChatSuggestionPill.test.ts +1 -1
- package/src/v2/components/chat/__tests__/CopilotChatSuggestionView.slots.e2e.test.ts +3 -1
- package/src/v2/components/chat/__tests__/CopilotChatToolCallsView.learning.test.ts +75 -0
- package/src/v2/components/chat/__tests__/CopilotChatUserMessage.attachments.test.ts +143 -0
- package/src/v2/components/chat/__tests__/CopilotChatView.inputOverlay.test.ts +5 -4
- package/src/v2/components/chat/__tests__/CopilotChatView.rootWidth.test.ts +7 -33
- package/src/v2/components/chat/__tests__/CopilotModalHeader.slots.e2e.test.ts +1 -1
- package/src/v2/components/chat/__tests__/CopilotPopupView.slots.e2e.test.ts +3 -3
- package/src/v2/components/chat/__tests__/CopilotSidebarView.position.test.ts +126 -0
- package/src/v2/components/chat/__tests__/messageFeedbackDefaults.test.ts +33 -0
- package/src/v2/components/chat/__tests__/modalChatDisplayProps.test.ts +44 -0
- package/src/v2/components/chat/index.ts +2 -0
- package/src/v2/components/chat/inspector-shortcuts.ts +34 -0
- package/src/v2/components/chat/message-feedback.ts +291 -0
- package/src/v2/components/chat/tool-call-capture.ts +55 -0
- package/src/v2/components/chat/tool-call-display-context.ts +49 -0
- package/src/v2/components/chat/tool-call-group-parts.ts +292 -0
- package/src/v2/components/chat/tool-call-layout.ts +304 -0
- package/src/v2/components/chat/turn-work.ts +61 -0
- package/src/v2/components/chat/types.ts +113 -3
- package/src/v2/components/chat/use-lightbox.ts +64 -0
- package/src/v2/components/icons/index.ts +4 -0
- package/src/v2/components/ui/CopilotDropdownMenuContent.vue +465 -0
- package/src/v2/components/ui/CopilotPopover.vue +138 -0
- package/src/v2/components/ui/CopilotTooltip.vue +237 -0
- package/src/v2/components/ui/__tests__/CopilotTooltip.test.ts +168 -0
- package/src/v2/components/ui/dropdown-menu.ts +15 -0
- package/src/v2/components/ui/floating.ts +321 -0
- package/src/v2/components/ui/presence.ts +54 -0
- package/src/v2/components/ui/use-id.ts +16 -0
- package/src/v2/hooks/use-default-render-tool.ts +123 -62
- package/src/v2/hooks/use-render-tool.ts +8 -0
- package/src/v2/index.ts +3 -0
- package/src/v2/lib/__tests__/message-feedback.test.ts +152 -0
- package/src/v2/lib/message-feedback.ts +120 -0
- package/src/v2/providers/CopilotChatConfigurationProvider.vue +29 -2
- package/src/v2/providers/CopilotKitProvider.types.ts +57 -0
- package/src/v2/providers/CopilotKitProvider.vue +125 -3
- package/src/v2/providers/__tests__/CopilotChatConfigurationProvider.openThread.test.ts +69 -0
- package/src/v2/providers/__tests__/CopilotKitProvider.learning.test.ts +534 -0
- package/src/v2/providers/index.ts +4 -1
- package/src/v2/providers/keys.ts +12 -0
- package/src/v2/providers/types.ts +11 -0
- package/src/v2/styles/CopilotKitStyles.ts +95 -0
- package/src/v2/styles/__tests__/CopilotKitStyles.client.test.ts +149 -0
- package/src/v2/styles/__tests__/CopilotKitStyles.ssr.test.ts +71 -0
- package/src/v2/types/defineToolCallRenderer.ts +4 -0
- package/src/v2/types/vue-tool-call-renderer.ts +7 -0
- package/vite.config.ts +2 -1
- package/dist/styles.css +0 -2
- package/scripts/scope-preflight.mjs +0 -100
- package/src/styles/globals.css +0 -233
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
createApp,
|
|
4
|
+
createSSRApp,
|
|
5
|
+
defineComponent,
|
|
6
|
+
h,
|
|
7
|
+
nextTick,
|
|
8
|
+
ref,
|
|
9
|
+
} from "vue";
|
|
10
|
+
import type { Component } from "vue";
|
|
11
|
+
import { renderToString } from "vue/server-renderer";
|
|
12
|
+
import { mount } from "@vue/test-utils";
|
|
13
|
+
import type { VueWrapper } from "@vue/test-utils";
|
|
14
|
+
import { stylesheet } from "@copilotkit/core/styles";
|
|
15
|
+
import CopilotKitProvider from "../../providers/CopilotKitProvider.vue";
|
|
16
|
+
import { StateCapturingAgent } from "../../__tests__/utils/agents";
|
|
17
|
+
import CopilotChat from "../../components/chat/CopilotChat.vue";
|
|
18
|
+
import CopilotKitV1 from "../../../components/copilot-provider/CopilotKit.vue";
|
|
19
|
+
import { CopilotKitStyles } from "../CopilotKitStyles";
|
|
20
|
+
|
|
21
|
+
const styleTags = () =>
|
|
22
|
+
document.querySelectorAll("style[data-copilotkit-styles]");
|
|
23
|
+
|
|
24
|
+
let wrapper: VueWrapper | undefined;
|
|
25
|
+
|
|
26
|
+
afterEach(() => {
|
|
27
|
+
wrapper?.unmount();
|
|
28
|
+
wrapper = undefined;
|
|
29
|
+
document.body.innerHTML = "";
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
function mountWithProvider(
|
|
33
|
+
children: () => unknown,
|
|
34
|
+
providerProps: Record<string, unknown> = {},
|
|
35
|
+
provider: Component = CopilotKitProvider as Component,
|
|
36
|
+
) {
|
|
37
|
+
wrapper = mount(provider, {
|
|
38
|
+
attachTo: document.body,
|
|
39
|
+
props: {
|
|
40
|
+
agents__unsafe_dev_only: { default: new StateCapturingAgent() },
|
|
41
|
+
...providerProps,
|
|
42
|
+
},
|
|
43
|
+
slots: { default: children },
|
|
44
|
+
});
|
|
45
|
+
return wrapper;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
describe("CopilotKitStyles in the browser", () => {
|
|
49
|
+
it("is rendered by CopilotChat, so apps don't import a stylesheet", () => {
|
|
50
|
+
mountWithProvider(() => h(CopilotChat, { welcomeScreen: false }));
|
|
51
|
+
|
|
52
|
+
const tags = styleTags();
|
|
53
|
+
expect(tags).toHaveLength(1);
|
|
54
|
+
expect(tags[0]!.textContent).toBe(stylesheet);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("keeps one copy for many chats, and keeps it while any chat is mounted", async () => {
|
|
58
|
+
const showFirst = ref(true);
|
|
59
|
+
const showSecond = ref(true);
|
|
60
|
+
mountWithProvider(() => [
|
|
61
|
+
showFirst.value ? h(CopilotChat, { welcomeScreen: false }) : null,
|
|
62
|
+
showSecond.value ? h(CopilotChat, { welcomeScreen: false }) : null,
|
|
63
|
+
]);
|
|
64
|
+
expect(styleTags()).toHaveLength(1);
|
|
65
|
+
|
|
66
|
+
// The first chat owns the tag. Unmounting it hands the tag on.
|
|
67
|
+
showFirst.value = false;
|
|
68
|
+
await nextTick();
|
|
69
|
+
expect(styleTags()).toHaveLength(1);
|
|
70
|
+
|
|
71
|
+
showFirst.value = true;
|
|
72
|
+
await nextTick();
|
|
73
|
+
expect(styleTags()).toHaveLength(1);
|
|
74
|
+
|
|
75
|
+
showFirst.value = false;
|
|
76
|
+
showSecond.value = false;
|
|
77
|
+
await nextTick();
|
|
78
|
+
expect(styleTags()).toHaveLength(0);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("adds the CSP nonce to the style tag", () => {
|
|
82
|
+
mountWithProvider(() => h(CopilotKitStyles), { nonce: "abc123" });
|
|
83
|
+
|
|
84
|
+
const tags = styleTags();
|
|
85
|
+
expect(tags).toHaveLength(1);
|
|
86
|
+
expect(tags[0]!.getAttribute("nonce")).toBe("abc123");
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("adds no style tag when the app loads styles.css itself", () => {
|
|
90
|
+
mountWithProvider(() => h(CopilotChat, { welcomeScreen: false }), {
|
|
91
|
+
injectStyles: false,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
expect(styleTags()).toHaveLength(0);
|
|
95
|
+
expect(document.querySelectorAll("style")).toHaveLength(0);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it("injects through the v1 CopilotKit provider by default", () => {
|
|
99
|
+
mountWithProvider(() => h(CopilotKitStyles), {}, CopilotKitV1 as Component);
|
|
100
|
+
|
|
101
|
+
expect(styleTags()).toHaveLength(1);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("injects without a provider", () => {
|
|
105
|
+
wrapper = mount(CopilotKitStyles, { attachTo: document.body });
|
|
106
|
+
|
|
107
|
+
expect(styleTags()).toHaveLength(1);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it("hydrates the server-rendered tag without a mismatch", async () => {
|
|
111
|
+
const Page = defineComponent({
|
|
112
|
+
render: () =>
|
|
113
|
+
h(
|
|
114
|
+
CopilotKitProvider as Component,
|
|
115
|
+
{ agents__unsafe_dev_only: { default: new StateCapturingAgent() } },
|
|
116
|
+
{ default: () => [h(CopilotKitStyles), h(CopilotKitStyles)] },
|
|
117
|
+
),
|
|
118
|
+
});
|
|
119
|
+
const container = document.createElement("div");
|
|
120
|
+
container.innerHTML = await renderToString(createSSRApp(Page));
|
|
121
|
+
document.body.appendChild(container);
|
|
122
|
+
const serverTag = styleTags()[0];
|
|
123
|
+
const warn = vi.spyOn(console, "warn").mockImplementation(() => {});
|
|
124
|
+
const error = vi.spyOn(console, "error").mockImplementation(() => {});
|
|
125
|
+
|
|
126
|
+
const app = createSSRApp(Page);
|
|
127
|
+
app.mount(container);
|
|
128
|
+
await nextTick();
|
|
129
|
+
|
|
130
|
+
const mismatches = [...warn.mock.calls, ...error.mock.calls].filter(
|
|
131
|
+
(args) => String(args[0]).includes("Hydration"),
|
|
132
|
+
);
|
|
133
|
+
expect(mismatches).toEqual([]);
|
|
134
|
+
expect(styleTags()).toHaveLength(1);
|
|
135
|
+
expect(styleTags()[0]).toBe(serverTag);
|
|
136
|
+
app.unmount();
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it("gives separate apps on one page their own copy", () => {
|
|
140
|
+
const first = createApp({ render: () => h(CopilotKitStyles) });
|
|
141
|
+
const second = createApp({ render: () => h(CopilotKitStyles) });
|
|
142
|
+
first.mount(document.body.appendChild(document.createElement("div")));
|
|
143
|
+
second.mount(document.body.appendChild(document.createElement("div")));
|
|
144
|
+
|
|
145
|
+
expect(styleTags()).toHaveLength(2);
|
|
146
|
+
first.unmount();
|
|
147
|
+
second.unmount();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { createSSRApp, h } from "vue";
|
|
4
|
+
import type { Component } from "vue";
|
|
5
|
+
import { renderToString } from "vue/server-renderer";
|
|
6
|
+
import { stylesheet } from "@copilotkit/core/styles";
|
|
7
|
+
import CopilotKitProvider from "../../providers/CopilotKitProvider.vue";
|
|
8
|
+
import { StateCapturingAgent } from "../../__tests__/utils/agents";
|
|
9
|
+
import { CopilotKitStyles } from "../CopilotKitStyles";
|
|
10
|
+
|
|
11
|
+
function renderPage(
|
|
12
|
+
children: () => unknown[],
|
|
13
|
+
providerProps: Record<string, unknown> = {},
|
|
14
|
+
): Promise<string> {
|
|
15
|
+
const app = createSSRApp({
|
|
16
|
+
render: () =>
|
|
17
|
+
h(
|
|
18
|
+
CopilotKitProvider as Component,
|
|
19
|
+
{
|
|
20
|
+
agents__unsafe_dev_only: { default: new StateCapturingAgent() },
|
|
21
|
+
...providerProps,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
default: children,
|
|
25
|
+
},
|
|
26
|
+
),
|
|
27
|
+
});
|
|
28
|
+
return renderToString(app);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
describe("CopilotKitStyles on the server", () => {
|
|
32
|
+
it("puts one copy of the stylesheet in the server HTML", async () => {
|
|
33
|
+
const html = await renderPage(() => [
|
|
34
|
+
h(CopilotKitStyles),
|
|
35
|
+
h(CopilotKitStyles),
|
|
36
|
+
]);
|
|
37
|
+
|
|
38
|
+
const tags = html.match(/<style[^>]*>/g) ?? [];
|
|
39
|
+
expect(tags).toHaveLength(1);
|
|
40
|
+
expect(tags[0]).toContain("data-copilotkit-styles");
|
|
41
|
+
// Unescaped, so selectors such as `a > b` still work.
|
|
42
|
+
expect(html).toContain(`>${stylesheet}</style>`);
|
|
43
|
+
expect(stylesheet).toContain(".cpk-suggestion-pill)");
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("gives each server-rendered app its own copy", async () => {
|
|
47
|
+
const first = await renderPage(() => [h(CopilotKitStyles)]);
|
|
48
|
+
const second = await renderPage(() => [h(CopilotKitStyles)]);
|
|
49
|
+
|
|
50
|
+
expect(first).toContain("<style");
|
|
51
|
+
expect(second).toContain("<style");
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("adds the CSP nonce to the style tag when the app passes one", async () => {
|
|
55
|
+
const html = await renderPage(() => [h(CopilotKitStyles)], {
|
|
56
|
+
nonce: "abc123",
|
|
57
|
+
});
|
|
58
|
+
const tags = html.match(/<style[^>]*>/g) ?? [];
|
|
59
|
+
|
|
60
|
+
expect(tags).toHaveLength(1);
|
|
61
|
+
expect(tags[0]).toContain('nonce="abc123"');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("adds no style tag when the app loads styles.css itself", async () => {
|
|
65
|
+
const html = await renderPage(() => [h(CopilotKitStyles)], {
|
|
66
|
+
injectStyles: false,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
expect(html).not.toContain("<style");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -7,6 +7,7 @@ export function defineToolCallRenderer(def: {
|
|
|
7
7
|
name: "*";
|
|
8
8
|
render: VueToolCallRendererRenderFn<unknown>;
|
|
9
9
|
agentId?: string;
|
|
10
|
+
group?: boolean;
|
|
10
11
|
}): VueToolCallRenderer<unknown>;
|
|
11
12
|
|
|
12
13
|
export function defineToolCallRenderer<S extends StandardSchemaV1>(def: {
|
|
@@ -14,6 +15,7 @@ export function defineToolCallRenderer<S extends StandardSchemaV1>(def: {
|
|
|
14
15
|
args: S;
|
|
15
16
|
render: VueToolCallRendererRenderFn<InferSchemaOutput<S>>;
|
|
16
17
|
agentId?: string;
|
|
18
|
+
group?: boolean;
|
|
17
19
|
}): VueToolCallRenderer<InferSchemaOutput<S>>;
|
|
18
20
|
|
|
19
21
|
export function defineToolCallRenderer<S extends StandardSchemaV1>(def: {
|
|
@@ -21,6 +23,7 @@ export function defineToolCallRenderer<S extends StandardSchemaV1>(def: {
|
|
|
21
23
|
args?: S;
|
|
22
24
|
render: VueToolCallRendererRenderFn<unknown>;
|
|
23
25
|
agentId?: string;
|
|
26
|
+
group?: boolean;
|
|
24
27
|
}): VueToolCallRenderer<unknown> {
|
|
25
28
|
const argsSchema = def.name === "*" && !def.args ? z.any() : def.args;
|
|
26
29
|
return {
|
|
@@ -28,5 +31,6 @@ export function defineToolCallRenderer<S extends StandardSchemaV1>(def: {
|
|
|
28
31
|
args: argsSchema as StandardSchemaV1<any, unknown>,
|
|
29
32
|
render: def.render as VueToolCallRenderer<unknown>["render"],
|
|
30
33
|
...(def.agentId ? { agentId: def.agentId } : {}),
|
|
34
|
+
...(def.group ? { group: true } : {}),
|
|
31
35
|
};
|
|
32
36
|
}
|
|
@@ -40,5 +40,12 @@ export interface VueToolCallRenderer<T = unknown> {
|
|
|
40
40
|
name: string;
|
|
41
41
|
args: StandardSchemaV1<any, T>;
|
|
42
42
|
agentId?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Whether calls this renderer draws join the chat's tool-call groups (see
|
|
45
|
+
* `toolCallDisplay` on `CopilotChatMessageView`). CopilotKit's built-in card
|
|
46
|
+
* sets it; a renderer that leaves it unset always shows its calls on their
|
|
47
|
+
* own, since the chat can't tell what it draws (it may even draw nothing).
|
|
48
|
+
*/
|
|
49
|
+
group?: boolean;
|
|
43
50
|
render: VueToolCallRendererRenderFn<T>;
|
|
44
51
|
}
|
package/vite.config.ts
CHANGED
|
@@ -28,7 +28,8 @@ export default defineConfig({
|
|
|
28
28
|
"@a2ui/web_core/v0_9/basic_catalog",
|
|
29
29
|
"@ag-ui/client",
|
|
30
30
|
"@ag-ui/core",
|
|
31
|
-
|
|
31
|
+
// Core and its `/styles` subpath, so the stylesheet isn't bundled here.
|
|
32
|
+
/^@copilotkit\/core(\/.*)?$/,
|
|
32
33
|
// Keep the shared MCP Apps host + its subpaths external. The root entry
|
|
33
34
|
// carries the ext-apps AppBridge and is loaded through a dynamic
|
|
34
35
|
// import() in the renderer, so it must stay a real runtime import (not
|
package/dist/styles.css
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--cpk-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--cpk-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--cpk-color-red-50:oklch(97.1% .013 17.38);--cpk-color-red-200:oklch(88.5% .062 18.334);--cpk-color-red-700:oklch(50.5% .213 27.518);--cpk-color-gray-50:oklch(98.5% .002 247.839);--cpk-color-gray-100:oklch(96.7% .003 264.542);--cpk-color-gray-200:oklch(92.8% .006 264.531);--cpk-color-gray-400:oklch(70.7% .022 261.325);--cpk-color-gray-500:oklch(55.1% .027 264.364);--cpk-color-gray-600:oklch(44.6% .03 256.802);--cpk-color-gray-700:oklch(37.3% .034 259.733);--cpk-color-gray-800:oklch(27.8% .033 256.848);--cpk-color-gray-900:oklch(21% .034 264.665);--cpk-color-black:#000;--cpk-color-white:#fff;--cpk-spacing:.25rem;--cpk-container-3xl:48rem;--cpk-text-xs:.75rem;--cpk-text-xs--line-height:calc(1/.75);--cpk-text-sm:.875rem;--cpk-text-sm--line-height:calc(1.25/.875);--cpk-text-base:1rem;--cpk-text-base--line-height:calc(1.5/1);--cpk-text-xl:1.25rem;--cpk-text-xl--line-height:calc(1.75/1.25);--cpk-text-2xl:1.5rem;--cpk-text-2xl--line-height:calc(2/1.5);--cpk-font-weight-normal:400;--cpk-font-weight-medium:500;--cpk-font-weight-semibold:600;--cpk-font-weight-bold:700;--cpk-tracking-tight:-.025em;--cpk-leading-tight:1.25;--cpk-leading-relaxed:1.625;--cpk-radius-2xl:1rem;--cpk-ease-out:cubic-bezier(0,0,.2,1);--cpk-ease-in-out:cubic-bezier(.4,0,.2,1);--cpk-animate-spin:spin 1s linear infinite;--cpk-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--cpk-default-transition-duration:.15s;--cpk-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--cpk-default-font-family:var(--cpk-font-sans);--cpk-default-mono-font-family:var(--cpk-font-mono);--cpk-animate-pulse-cursor:pulse-cursor .9s cubic-bezier(.4,0,.2,1)infinite}}@layer base{[data-copilotkit],[data-copilotkit] *,[data-copilotkit] :after,[data-copilotkit] :before{box-sizing:border-box;border:0 solid;margin:0;padding:0}[data-copilotkit] ::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}[data-copilotkit],[data-copilotkit]{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--cpk-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--cpk-default-font-feature-settings,normal);font-variation-settings:var(--cpk-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}[data-copilotkit] hr,hr[data-copilotkit]{height:0;color:inherit;border-top-width:1px}[data-copilotkit] abbr:where([title]),abbr:where([title])[data-copilotkit]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}[data-copilotkit] h1,h1[data-copilotkit],[data-copilotkit] h2,h2[data-copilotkit],[data-copilotkit] h3,h3[data-copilotkit],[data-copilotkit] h4,h4[data-copilotkit],[data-copilotkit] h5,h5[data-copilotkit],[data-copilotkit] h6,h6[data-copilotkit]{font-size:inherit;font-weight:inherit}[data-copilotkit] a,a[data-copilotkit]{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}[data-copilotkit] b,b[data-copilotkit],[data-copilotkit] strong,strong[data-copilotkit]{font-weight:bolder}[data-copilotkit] code,code[data-copilotkit],[data-copilotkit] kbd,kbd[data-copilotkit],[data-copilotkit] samp,samp[data-copilotkit],[data-copilotkit] pre,pre[data-copilotkit]{font-family:var(--cpk-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--cpk-default-mono-font-feature-settings,normal);font-variation-settings:var(--cpk-default-mono-font-variation-settings,normal);font-size:1em}[data-copilotkit] small,small[data-copilotkit]{font-size:80%}[data-copilotkit] sub,sub[data-copilotkit],[data-copilotkit] sup,sup[data-copilotkit]{vertical-align:baseline;font-size:75%;line-height:0;position:relative}[data-copilotkit] sub,sub[data-copilotkit]{bottom:-.25em}[data-copilotkit] sup,sup[data-copilotkit]{top:-.5em}[data-copilotkit] table,table[data-copilotkit]{text-indent:0;border-color:inherit;border-collapse:collapse}[data-copilotkit] :-moz-focusring{outline:auto}[data-copilotkit] progress,progress[data-copilotkit]{vertical-align:baseline}[data-copilotkit] summary,summary[data-copilotkit]{display:list-item}[data-copilotkit] ol,ol[data-copilotkit],[data-copilotkit] ul,ul[data-copilotkit],[data-copilotkit] menu,menu[data-copilotkit]{list-style:none}[data-copilotkit] img,img[data-copilotkit],[data-copilotkit] svg,svg[data-copilotkit],[data-copilotkit] video,video[data-copilotkit],[data-copilotkit] canvas,canvas[data-copilotkit],[data-copilotkit] audio,audio[data-copilotkit],[data-copilotkit] iframe,iframe[data-copilotkit],[data-copilotkit] embed,embed[data-copilotkit],[data-copilotkit] object,object[data-copilotkit]{vertical-align:middle;display:block}[data-copilotkit] img,img[data-copilotkit],[data-copilotkit] video,video[data-copilotkit]{max-width:100%;height:auto}[data-copilotkit] button,button[data-copilotkit],[data-copilotkit] input,input[data-copilotkit],[data-copilotkit] select,select[data-copilotkit],[data-copilotkit] optgroup,optgroup[data-copilotkit],[data-copilotkit] textarea,textarea[data-copilotkit]{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}[data-copilotkit] ::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}[data-copilotkit] :where(select:is([multiple],[size])) optgroup{font-weight:bolder}[data-copilotkit] :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}[data-copilotkit] ::file-selector-button{margin-inline-end:4px}[data-copilotkit] ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){[data-copilotkit] ::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){[data-copilotkit] ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}[data-copilotkit] textarea,textarea[data-copilotkit]{resize:vertical}[data-copilotkit] ::-webkit-search-decoration{-webkit-appearance:none}[data-copilotkit] ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}[data-copilotkit] ::-webkit-datetime-edit{display:inline-flex}[data-copilotkit] ::-webkit-datetime-edit-fields-wrapper{padding:0}[data-copilotkit] ::-webkit-datetime-edit{padding-block:0}[data-copilotkit] ::-webkit-datetime-edit-year-field{padding-block:0}[data-copilotkit] ::-webkit-datetime-edit-month-field{padding-block:0}[data-copilotkit] ::-webkit-datetime-edit-day-field{padding-block:0}[data-copilotkit] ::-webkit-datetime-edit-hour-field{padding-block:0}[data-copilotkit] ::-webkit-datetime-edit-minute-field{padding-block:0}[data-copilotkit] ::-webkit-datetime-edit-second-field{padding-block:0}[data-copilotkit] ::-webkit-datetime-edit-millisecond-field{padding-block:0}[data-copilotkit] ::-webkit-datetime-edit-meridiem-field{padding-block:0}[data-copilotkit] ::-webkit-calendar-picker-indicator{line-height:1}[data-copilotkit] :-moz-ui-invalid{box-shadow:none}[data-copilotkit] button,button[data-copilotkit],[data-copilotkit] input:where([type=button],[type=reset],[type=submit]),input:where([type=button],[type=reset],[type=submit])[data-copilotkit]{appearance:button}[data-copilotkit] ::file-selector-button{appearance:button}[data-copilotkit] ::-webkit-inner-spin-button{height:auto}[data-copilotkit] ::-webkit-outer-spin-button{height:auto}[data-copilotkit] [hidden]:where(:not([hidden=until-found])),[hidden]:where(:not([hidden=until-found]))[data-copilotkit]{display:none!important}[data-copilotkit],[data-copilotkit] *{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){[data-copilotkit],[data-copilotkit] *{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}[data-copilotkit]{color:var(--foreground);background-color:var(--background)}.copilotKitChat[data-copilotkit]{width:100%}@supports (height:100dvh){[data-copilot-sidebar]{height:100dvh}}@media (min-width:768px){[data-copilot-sidebar]{width:var(--sidebar-width,480px)!important}}@media (max-width:767px){[data-copilot-sidebar]{-webkit-overflow-scrolling:touch;width:100%!important}[data-sidebar-chat]{touch-action:pan-y}}}@layer components;@layer utilities{.cpk\:\@container{container-type:inline-size}.cpk\:pointer-events-auto{pointer-events:auto}.cpk\:pointer-events-none{pointer-events:none}.cpk\:invisible{visibility:hidden}.cpk\:absolute{position:absolute}.cpk\:fixed{position:fixed}.cpk\:relative{position:relative}.cpk\:inset-0{inset:calc(var(--cpk-spacing)*0)}.cpk\:inset-x-0{inset-inline:calc(var(--cpk-spacing)*0)}.cpk\:top-0{top:calc(var(--cpk-spacing)*0)}.cpk\:top-1{top:calc(var(--cpk-spacing)*1)}.cpk\:top-4{top:calc(var(--cpk-spacing)*4)}.cpk\:right-0{right:calc(var(--cpk-spacing)*0)}.cpk\:right-1{right:calc(var(--cpk-spacing)*1)}.cpk\:right-4{right:calc(var(--cpk-spacing)*4)}.cpk\:right-6{right:calc(var(--cpk-spacing)*6)}.cpk\:bottom-0{bottom:calc(var(--cpk-spacing)*0)}.cpk\:bottom-6{bottom:calc(var(--cpk-spacing)*6)}.cpk\:bottom-full{bottom:100%}.cpk\:left-0{left:calc(var(--cpk-spacing)*0)}.cpk\:z-10{z-index:10}.cpk\:z-20{z-index:20}.cpk\:z-30{z-index:30}.cpk\:z-50{z-index:50}.cpk\:z-\[1100\]{z-index:1100}.cpk\:z-\[1200\]{z-index:1200}.cpk\:z-\[9999\]{z-index:9999}.cpk\:col-span-3{grid-column:span 3/span 3}.cpk\:col-start-1{grid-column-start:1}.cpk\:col-start-2{grid-column-start:2}.cpk\:col-start-3{grid-column-start:3}.cpk\:row-start-1{grid-row-start:1}.cpk\:row-start-2{grid-row-start:2}.cpk\:m-0{margin:calc(var(--cpk-spacing)*0)}.cpk\:m-2{margin:calc(var(--cpk-spacing)*2)}.cpk\:mx-auto{margin-inline:auto}.cpk\:my-1{margin-block:calc(var(--cpk-spacing)*1)}.cpk\:prose{color:var(--tw-prose-body);max-width:65ch}.cpk\:prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.cpk\:prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.cpk\:prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.cpk\:prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.cpk\:prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.cpk\:prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.cpk\:prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.cpk\:prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.cpk\:prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.cpk\:prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.cpk\:prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.cpk\:prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.cpk\:prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.cpk\:prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.cpk\:prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.cpk\:prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.cpk\:prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.cpk\:prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.cpk\:prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.cpk\:prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.cpk\:prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.cpk\:prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.cpk\:prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.cpk\:prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.cpk\:prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.cpk\:prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.cpk\:prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.cpk\:prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.cpk\:prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.cpk\:prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.cpk\:prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.cpk\:prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.cpk\:prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.cpk\:prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.cpk\:prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.cpk\:prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.cpk\:prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.cpk\:prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.cpk\:prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.cpk\:prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.cpk\:prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.cpk\:prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.cpk\:prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.cpk\:prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.cpk\:prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.cpk\:prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.cpk\:prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.cpk\:prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.cpk\:prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.cpk\:prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.cpk\:prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.cpk\:prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.cpk\:prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.cpk\:prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.cpk\:prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.cpk\:prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.cpk\:prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.cpk\:prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.cpk\:prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.cpk\:prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.cpk\:prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.cpk\:prose :where(.cpk\:prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.cpk\:prose :where(.cpk\:prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.cpk\:prose :where(.cpk\:prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.cpk\:prose :where(.cpk\:prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.cpk\:prose :where(.cpk\:prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.cpk\:prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.cpk\:prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.cpk\:prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.cpk\:prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.cpk\:prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.cpk\:prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.cpk\:prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.cpk\:prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.cpk\:prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.cpk\:prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.cpk\:prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.cpk\:prose :where(.cpk\:prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.cpk\:prose :where(.cpk\:prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.cpk\:-mt-\[0px\]{margin-top:0}.cpk\:mt-1{margin-top:calc(var(--cpk-spacing)*1)}.cpk\:mt-4{margin-top:calc(var(--cpk-spacing)*4)}.cpk\:mt-\[4px\]{margin-top:4px}.cpk\:-mr-\[5px\]{margin-right:-5px}.cpk\:mr-0{margin-right:calc(var(--cpk-spacing)*0)}.cpk\:mr-2{margin-right:calc(var(--cpk-spacing)*2)}.cpk\:mr-\[10px\]{margin-right:10px}.cpk\:mb-2{margin-bottom:calc(var(--cpk-spacing)*2)}.cpk\:mb-3{margin-bottom:calc(var(--cpk-spacing)*3)}.cpk\:mb-4{margin-bottom:calc(var(--cpk-spacing)*4)}.cpk\:mb-6{margin-bottom:calc(var(--cpk-spacing)*6)}.cpk\:-ml-\[5px\]{margin-left:-5px}.cpk\:ml-0{margin-left:calc(var(--cpk-spacing)*0)}.cpk\:ml-1{margin-left:calc(var(--cpk-spacing)*1)}.cpk\:block{display:block}.cpk\:flex{display:flex}.cpk\:grid{display:grid}.cpk\:hidden{display:none}.cpk\:inline-block{display:inline-block}.cpk\:inline-flex{display:inline-flex}.cpk\:size-3{width:calc(var(--cpk-spacing)*3);height:calc(var(--cpk-spacing)*3)}.cpk\:size-3\.5{width:calc(var(--cpk-spacing)*3.5);height:calc(var(--cpk-spacing)*3.5)}.cpk\:size-8{width:calc(var(--cpk-spacing)*8);height:calc(var(--cpk-spacing)*8)}.cpk\:size-\[18px\]{width:18px;height:18px}.cpk\:size-\[20px\]{width:20px;height:20px}.cpk\:size-\[26px\]{width:26px;height:26px}.cpk\:h-1\.5{height:calc(var(--cpk-spacing)*1.5)}.cpk\:h-2{height:calc(var(--cpk-spacing)*2)}.cpk\:h-3{height:calc(var(--cpk-spacing)*3)}.cpk\:h-3\.5{height:calc(var(--cpk-spacing)*3.5)}.cpk\:h-4{height:calc(var(--cpk-spacing)*4)}.cpk\:h-5{height:calc(var(--cpk-spacing)*5)}.cpk\:h-6{height:calc(var(--cpk-spacing)*6)}.cpk\:h-7{height:calc(var(--cpk-spacing)*7)}.cpk\:h-8{height:calc(var(--cpk-spacing)*8)}.cpk\:h-9{height:calc(var(--cpk-spacing)*9)}.cpk\:h-10{height:calc(var(--cpk-spacing)*10)}.cpk\:h-14{height:calc(var(--cpk-spacing)*14)}.cpk\:h-16{height:calc(var(--cpk-spacing)*16)}.cpk\:h-\[11px\]{height:11px}.cpk\:h-\[26px\]{height:26px}.cpk\:h-\[72px\]{height:72px}.cpk\:h-\[80vh\]{height:80vh}.cpk\:h-\[90vh\]{height:90vh}.cpk\:h-\[100dvh\]{height:100dvh}.cpk\:h-\[100vh\]{height:100vh}.cpk\:h-auto{height:auto}.cpk\:h-full{height:100%}.cpk\:h-px{height:1px}.cpk\:max-h-64{max-height:calc(var(--cpk-spacing)*64)}.cpk\:max-h-\[90vh\]{max-height:90vh}.cpk\:max-h-full{max-height:100%}.cpk\:max-h-screen{max-height:100vh}.cpk\:min-h-0{min-height:calc(var(--cpk-spacing)*0)}.cpk\:min-h-\[50px\]{min-height:50px}.cpk\:w-1\.5{width:calc(var(--cpk-spacing)*1.5)}.cpk\:w-2{width:calc(var(--cpk-spacing)*2)}.cpk\:w-3{width:calc(var(--cpk-spacing)*3)}.cpk\:w-3\.5{width:calc(var(--cpk-spacing)*3.5)}.cpk\:w-4{width:calc(var(--cpk-spacing)*4)}.cpk\:w-5{width:calc(var(--cpk-spacing)*5)}.cpk\:w-6{width:calc(var(--cpk-spacing)*6)}.cpk\:w-8{width:calc(var(--cpk-spacing)*8)}.cpk\:w-9{width:calc(var(--cpk-spacing)*9)}.cpk\:w-10{width:calc(var(--cpk-spacing)*10)}.cpk\:w-14{width:calc(var(--cpk-spacing)*14)}.cpk\:w-16{width:calc(var(--cpk-spacing)*16)}.cpk\:w-\[11px\]{width:11px}.cpk\:w-\[72px\]{width:72px}.cpk\:w-\[90vw\]{width:90vw}.cpk\:w-fit{width:fit-content}.cpk\:w-full{width:100%}.cpk\:max-w-3xl{max-width:var(--cpk-container-3xl)}.cpk\:max-w-\[80\%\]{max-width:80%}.cpk\:max-w-\[90vw\]{max-width:90vw}.cpk\:max-w-\[240px\]{max-width:240px}.cpk\:max-w-\[280px\]{max-width:280px}.cpk\:max-w-\[300px\]{max-width:300px}.cpk\:max-w-\[400px\]{max-width:400px}.cpk\:max-w-\[800px\]{max-width:800px}.cpk\:max-w-\[1000px\]{max-width:1000px}.cpk\:max-w-full{max-width:100%}.cpk\:min-w-0{min-width:calc(var(--cpk-spacing)*0)}.cpk\:min-w-\[200px\]{min-width:200px}.cpk\:min-w-\[220px\]{min-width:220px}.cpk\:flex-1{flex:1}.cpk\:flex-none{flex:none}.cpk\:shrink-0{flex-shrink:0}.cpk\:origin-bottom{transform-origin:bottom}.cpk\:translate-x-0{--tw-translate-x:calc(var(--cpk-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.cpk\:translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.cpk\:translate-y-0{--tw-translate-y:calc(var(--cpk-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.cpk\:translate-y-4{--tw-translate-y:calc(var(--cpk-spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.cpk\:rotate-90{rotate:90deg}.cpk\:transform-gpu{transform:translateZ(0)var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cpk\:animate-pulse{animation:var(--cpk-animate-pulse)}.cpk\:animate-pulse-cursor{animation:var(--cpk-animate-pulse-cursor)}.cpk\:animate-spin{animation:var(--cpk-animate-spin)}.cpk\:cursor-default{cursor:default}.cpk\:cursor-pointer{cursor:pointer}.cpk\:cursor-text{cursor:text}.cpk\:grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.cpk\:grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.cpk\:flex-col{flex-direction:column}.cpk\:flex-wrap{flex-wrap:wrap}.cpk\:items-center{align-items:center}.cpk\:items-end{align-items:flex-end}.cpk\:items-stretch{align-items:stretch}.cpk\:justify-between{justify-content:space-between}.cpk\:justify-center{justify-content:center}.cpk\:justify-end{justify-content:flex-end}.cpk\:justify-start{justify-content:flex-start}.cpk\:gap-1{gap:calc(var(--cpk-spacing)*1)}.cpk\:gap-1\.5{gap:calc(var(--cpk-spacing)*1.5)}.cpk\:gap-2{gap:calc(var(--cpk-spacing)*2)}.cpk\:gap-3{gap:calc(var(--cpk-spacing)*3)}.cpk\:gap-4{gap:calc(var(--cpk-spacing)*4)}.cpk\:gap-6{gap:calc(var(--cpk-spacing)*6)}.cpk\:gap-x-3{column-gap:calc(var(--cpk-spacing)*3)}.cpk\:gap-y-3{row-gap:calc(var(--cpk-spacing)*3)}.cpk\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cpk\:overflow-auto{overflow:auto}.cpk\:overflow-hidden{overflow:hidden}.cpk\:overflow-visible{overflow:visible}.cpk\:overflow-x-auto{overflow-x:auto}.cpk\:overflow-x-hidden{overflow-x:hidden}.cpk\:overflow-y-auto{overflow-y:auto}.cpk\:overflow-y-scroll{overflow-y:scroll}.cpk\:rounded{border-radius:.25rem}.cpk\:rounded-\[18px\]{border-radius:18px}.cpk\:rounded-\[28px\]{border-radius:28px}.cpk\:rounded-full{border-radius:3.40282e38px}.cpk\:rounded-lg{border-radius:var(--radius)}.cpk\:rounded-md{border-radius:calc(var(--radius) - 2px)}.cpk\:rounded-none{border-radius:0}.cpk\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.cpk\:border{border-style:var(--tw-border-style);border-width:1px}.cpk\:border-2{border-style:var(--tw-border-style);border-width:2px}.cpk\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.cpk\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.cpk\:border-dashed{--tw-border-style:dashed;border-style:dashed}.cpk\:border-none{--tw-border-style:none;border-style:none}.cpk\:border-border,.cpk\:border-border\/0{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.cpk\:border-border\/0{border-color:color-mix(in oklab,var(--border)0%,transparent)}}.cpk\:border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.cpk\:border-border\/60{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.cpk\:border-gray-100{border-color:var(--cpk-color-gray-100)}.cpk\:border-gray-200{border-color:var(--cpk-color-gray-200)}.cpk\:border-primary,.cpk\:border-primary\/40{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cpk\:border-primary\/40{border-color:color-mix(in oklab,var(--primary)40%,transparent)}}.cpk\:border-red-200{border-color:var(--cpk-color-red-200)}.cpk\:border-white{border-color:var(--cpk-color-white)}.cpk\:border-t-transparent{border-top-color:#0000}.cpk\:bg-background,.cpk\:bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-background\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.cpk\:bg-black,.cpk\:bg-black\/5{background-color:var(--cpk-color-black)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-black\/5{background-color:color-mix(in oklab,var(--cpk-color-black)5%,transparent)}}.cpk\:bg-black\/20{background-color:var(--cpk-color-black)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-black\/20{background-color:color-mix(in oklab,var(--cpk-color-black)20%,transparent)}}.cpk\:bg-black\/40{background-color:var(--cpk-color-black)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-black\/40{background-color:color-mix(in oklab,var(--cpk-color-black)40%,transparent)}}.cpk\:bg-black\/60{background-color:var(--cpk-color-black)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-black\/60{background-color:color-mix(in oklab,var(--cpk-color-black)60%,transparent)}}.cpk\:bg-black\/80{background-color:var(--cpk-color-black)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-black\/80{background-color:color-mix(in oklab,var(--cpk-color-black)80%,transparent)}}.cpk\:bg-border{background-color:var(--border)}.cpk\:bg-foreground{background-color:var(--foreground)}.cpk\:bg-gray-50\/50{background-color:var(--cpk-color-gray-50)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-gray-50\/50{background-color:color-mix(in oklab,var(--cpk-color-gray-50)50%,transparent)}}.cpk\:bg-gray-200,.cpk\:bg-gray-200\/70{background-color:var(--cpk-color-gray-200)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-gray-200\/70{background-color:color-mix(in oklab,var(--cpk-color-gray-200)70%,transparent)}}.cpk\:bg-muted{background-color:var(--muted)}.cpk\:bg-muted-foreground,.cpk\:bg-muted-foreground\/20{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-muted-foreground\/20{background-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.cpk\:bg-primary,.cpk\:bg-primary\/5{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-primary\/5{background-color:color-mix(in oklab,var(--primary)5%,transparent)}}.cpk\:bg-red-50{background-color:var(--cpk-color-red-50)}.cpk\:bg-transparent{background-color:#0000}.cpk\:bg-white,.cpk\:bg-white\/10{background-color:var(--cpk-color-white)}@supports (color:color-mix(in lab, red, red)){.cpk\:bg-white\/10{background-color:color-mix(in oklab,var(--cpk-color-white)10%,transparent)}}.cpk\:bg-clip-padding{background-clip:padding-box}.cpk\:fill-current{fill:currentColor}.cpk\:object-contain{object-fit:contain}.cpk\:object-cover{object-fit:cover}.cpk\:p-0{padding:calc(var(--cpk-spacing)*0)}.cpk\:p-1{padding:calc(var(--cpk-spacing)*1)}.cpk\:p-2{padding:calc(var(--cpk-spacing)*2)}.cpk\:p-3{padding:calc(var(--cpk-spacing)*3)}.cpk\:p-4{padding:calc(var(--cpk-spacing)*4)}.cpk\:p-5{padding:calc(var(--cpk-spacing)*5)}.cpk\:p-6{padding:calc(var(--cpk-spacing)*6)}.cpk\:p-8{padding:calc(var(--cpk-spacing)*8)}.cpk\:px-0{padding-inline:calc(var(--cpk-spacing)*0)}.cpk\:px-1{padding-inline:calc(var(--cpk-spacing)*1)}.cpk\:px-2\.5{padding-inline:calc(var(--cpk-spacing)*2.5)}.cpk\:px-3{padding-inline:calc(var(--cpk-spacing)*3)}.cpk\:px-4{padding-inline:calc(var(--cpk-spacing)*4)}.cpk\:px-5{padding-inline:calc(var(--cpk-spacing)*5)}.cpk\:px-8{padding-inline:calc(var(--cpk-spacing)*8)}.cpk\:py-0{padding-block:calc(var(--cpk-spacing)*0)}.cpk\:py-0\.5{padding-block:calc(var(--cpk-spacing)*.5)}.cpk\:py-1{padding-block:calc(var(--cpk-spacing)*1)}.cpk\:py-1\.5{padding-block:calc(var(--cpk-spacing)*1.5)}.cpk\:py-2{padding-block:calc(var(--cpk-spacing)*2)}.cpk\:py-3{padding-block:calc(var(--cpk-spacing)*3)}.cpk\:py-4{padding-block:calc(var(--cpk-spacing)*4)}.cpk\:py-6{padding-block:calc(var(--cpk-spacing)*6)}.cpk\:pt-1{padding-top:calc(var(--cpk-spacing)*1)}.cpk\:pt-10{padding-top:calc(var(--cpk-spacing)*10)}.cpk\:pr-4{padding-right:calc(var(--cpk-spacing)*4)}.cpk\:pr-5{padding-right:calc(var(--cpk-spacing)*5)}.cpk\:pr-8{padding-right:calc(var(--cpk-spacing)*8)}.cpk\:pb-2{padding-bottom:calc(var(--cpk-spacing)*2)}.cpk\:pb-4{padding-bottom:calc(var(--cpk-spacing)*4)}.cpk\:pl-0{padding-left:calc(var(--cpk-spacing)*0)}.cpk\:text-center{text-align:center}.cpk\:text-left{text-align:left}.cpk\:align-middle{vertical-align:middle}.cpk\:font-mono{font-family:var(--cpk-font-mono)}.cpk\:text-base{font-size:var(--cpk-text-base);line-height:var(--tw-leading,var(--cpk-text-base--line-height))}.cpk\:text-sm{font-size:var(--cpk-text-sm);line-height:var(--tw-leading,var(--cpk-text-sm--line-height))}.cpk\:text-xl{font-size:var(--cpk-text-xl);line-height:var(--tw-leading,var(--cpk-text-xl--line-height))}.cpk\:text-xs{font-size:var(--cpk-text-xs);line-height:var(--tw-leading,var(--cpk-text-xs--line-height))}.cpk\:text-\[10px\]{font-size:10px}.cpk\:text-\[11px\]{font-size:11px}.cpk\:text-\[16px\]{font-size:16px}.cpk\:leading-none{--tw-leading:1;line-height:1}.cpk\:leading-relaxed{--tw-leading:var(--cpk-leading-relaxed);line-height:var(--cpk-leading-relaxed)}.cpk\:leading-tight{--tw-leading:var(--cpk-leading-tight);line-height:var(--cpk-leading-tight)}.cpk\:font-bold{--tw-font-weight:var(--cpk-font-weight-bold);font-weight:var(--cpk-font-weight-bold)}.cpk\:font-medium{--tw-font-weight:var(--cpk-font-weight-medium);font-weight:var(--cpk-font-weight-medium)}.cpk\:font-normal{--tw-font-weight:var(--cpk-font-weight-normal);font-weight:var(--cpk-font-weight-normal)}.cpk\:font-semibold{--tw-font-weight:var(--cpk-font-weight-semibold);font-weight:var(--cpk-font-weight-semibold)}.cpk\:tracking-tight{--tw-tracking:var(--cpk-tracking-tight);letter-spacing:var(--cpk-tracking-tight)}.cpk\:break-words,.cpk\:wrap-break-word{overflow-wrap:break-word}.cpk\:break-all{word-break:break-all}.cpk\:text-ellipsis{text-overflow:ellipsis}.cpk\:whitespace-nowrap{white-space:nowrap}.cpk\:whitespace-pre-wrap{white-space:pre-wrap}.cpk\:text-\[\#444444\]{color:#444}.cpk\:text-\[rgb\(93\,93\,93\)\]{color:#5d5d5d}.cpk\:text-foreground{color:var(--foreground)}.cpk\:text-gray-400{color:var(--cpk-color-gray-400)}.cpk\:text-gray-500{color:var(--cpk-color-gray-500)}.cpk\:text-gray-600{color:var(--cpk-color-gray-600)}.cpk\:text-gray-800{color:var(--cpk-color-gray-800)}.cpk\:text-muted-foreground{color:var(--muted-foreground)}.cpk\:text-primary-foreground{color:var(--primary-foreground)}.cpk\:text-primary\/70{color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cpk\:text-primary\/70{color:color-mix(in oklab,var(--primary)70%,transparent)}}.cpk\:text-red-700{color:var(--cpk-color-red-700)}.cpk\:text-white{color:var(--cpk-color-white)}.cpk\:uppercase{text-transform:uppercase}.cpk\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.cpk\:opacity-0{opacity:0}.cpk\:opacity-100{opacity:1}.cpk\:shadow-\[0_4px_4px_0_\#0000000a\,0_0_1px_0_\#0000009e\]{--tw-shadow:0 4px 4px 0 var(--tw-shadow-color,#0000000a),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.cpk\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--cpk-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cpk-default-transition-duration))}.cpk\:transition-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--cpk-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cpk-default-transition-duration))}.cpk\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--cpk-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cpk-default-transition-duration))}.cpk\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--cpk-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cpk-default-transition-duration))}.cpk\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--cpk-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cpk-default-transition-duration))}.cpk\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--cpk-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cpk-default-transition-duration))}.cpk\:duration-200{--tw-duration:.2s;transition-duration:.2s}.cpk\:duration-300{--tw-duration:.3s;transition-duration:.3s}.cpk\:ease-in-out{--tw-ease:var(--cpk-ease-in-out);transition-timing-function:var(--cpk-ease-in-out)}.cpk\:ease-out{--tw-ease:var(--cpk-ease-out);transition-timing-function:var(--cpk-ease-out)}.cpk\:will-change-transform{will-change:transform}.cpk\:contain-inline-size{--tw-contain-size:inline-size;contain:var(--tw-contain-size,)var(--tw-contain-layout,)var(--tw-contain-paint,)var(--tw-contain-style,)}.cpk\:outline-none{--tw-outline-style:none;outline-style:none}.cpk\:select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.cpk\:group-hover\:visible:is(:where(.cpk\:group):hover *){visibility:visible}}.cpk\:placeholder\:text-\[\#00000077\]::placeholder{color:#0007}@media (hover:hover){.cpk\:hover\:scale-\[1\.04\]:hover{scale:1.04}.cpk\:hover\:bg-\[\#E8E8E8\]:hover{background-color:#e8e8e8}.cpk\:hover\:bg-\[\#f8f8f8\]:hover{background-color:#f8f8f8}.cpk\:hover\:bg-accent\/60:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.cpk\:hover\:bg-accent\/60:hover{background-color:color-mix(in oklab,var(--accent)60%,transparent)}}.cpk\:hover\:bg-gray-50:hover{background-color:var(--cpk-color-gray-50)}.cpk\:hover\:bg-muted:hover{background-color:var(--muted)}.cpk\:hover\:bg-white\/20:hover{background-color:var(--cpk-color-white)}@supports (color:color-mix(in lab, red, red)){.cpk\:hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--cpk-color-white)20%,transparent)}}.cpk\:hover\:text-\[\#333333\]:hover{color:#333}.cpk\:hover\:text-\[rgb\(93\,93\,93\)\]:hover{color:#5d5d5d}.cpk\:hover\:text-foreground:hover{color:var(--foreground)}.cpk\:hover\:opacity-70:hover{opacity:.7}.cpk\:hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.cpk\:focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.cpk\:focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:focus-visible\:ring-primary\/50:focus-visible{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cpk\:focus-visible\:ring-primary\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--primary)50%,transparent)}}.cpk\:focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--ring)}.cpk\:focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.cpk\:focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:var(--background)}.cpk\:focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.cpk\:active\:scale-\[0\.96\]:active{scale:.96}.cpk\:disabled\:pointer-events-none:disabled{pointer-events:none}.cpk\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.cpk\:disabled\:bg-\[\#00000014\]:disabled{background-color:#00000014}.cpk\:disabled\:text-\[rgb\(13\,13\,13\)\]:disabled{color:#0d0d0d}.cpk\:disabled\:text-muted-foreground:disabled{color:var(--muted-foreground)}.cpk\:disabled\:opacity-50:disabled{opacity:.5}.cpk\:disabled\:opacity-60:disabled{opacity:.6}@media (hover:hover){.cpk\:disabled\:hover\:bg-background:disabled:hover{background-color:var(--background)}.cpk\:disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}.cpk\:disabled\:hover\:text-\[\#444444\]:disabled:hover{color:#444}.cpk\:disabled\:hover\:text-muted-foreground:disabled:hover{color:var(--muted-foreground)}.cpk\:disabled\:hover\:opacity-100:disabled:hover{opacity:1}}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.cpk\:supports-\[backdrop-filter\]\:bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.cpk\:supports-\[backdrop-filter\]\:bg-background\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}}}@media (min-width:40rem){.cpk\:sm\:h-4{height:calc(var(--cpk-spacing)*4)}.cpk\:sm\:h-8{height:calc(var(--cpk-spacing)*8)}.cpk\:sm\:w-4{width:calc(var(--cpk-spacing)*4)}.cpk\:sm\:gap-1\.5{gap:calc(var(--cpk-spacing)*1.5)}.cpk\:sm\:gap-2{gap:calc(var(--cpk-spacing)*2)}.cpk\:sm\:px-3{padding-inline:calc(var(--cpk-spacing)*3)}.cpk\:sm\:text-2xl{font-size:var(--cpk-text-2xl);line-height:var(--tw-leading,var(--cpk-text-2xl--line-height))}.cpk\:sm\:text-xs{font-size:var(--cpk-text-xs);line-height:var(--tw-leading,var(--cpk-text-xs--line-height))}}@media (min-width:48rem){.cpk\:md\:inset-auto{inset:auto}.cpk\:md\:right-6{right:calc(var(--cpk-spacing)*6)}.cpk\:md\:bottom-24{bottom:calc(var(--cpk-spacing)*24)}.cpk\:md\:h-\[var\(--copilot-popup-height\)\]{height:var(--copilot-popup-height)}.cpk\:md\:max-h-\[var\(--copilot-popup-max-height\)\]{max-height:var(--copilot-popup-max-height)}.cpk\:md\:w-\[var\(--copilot-popup-width\)\]{width:var(--copilot-popup-width)}.cpk\:md\:max-w-\[var\(--copilot-popup-max-width\)\]{max-width:var(--copilot-popup-max-width)}.cpk\:md\:origin-bottom-right{transform-origin:100% 100%}.cpk\:md\:translate-y-5{--tw-translate-y:calc(var(--cpk-spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.cpk\:md\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.cpk\:md\:scale-\[0\.95\]{scale:.95}.cpk\:md\:items-end{align-items:flex-end}.cpk\:md\:gap-4{gap:calc(var(--cpk-spacing)*4)}.cpk\:md\:rounded-2xl{border-radius:var(--cpk-radius-2xl)}.cpk\:md\:border-border{border-color:var(--border)}.cpk\:md\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:md\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cpk\:md\:ring-border\/40{--tw-ring-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.cpk\:md\:ring-border\/40{--tw-ring-color:color-mix(in oklab,var(--border)40%,transparent)}}.cpk\:md\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--cpk-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cpk-default-transition-duration))}.cpk\:md\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--cpk-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cpk-default-transition-duration))}}@media (min-width:64rem){.cpk\:lg\:mr-4{margin-right:calc(var(--cpk-spacing)*4)}.cpk\:lg\:ml-4{margin-left:calc(var(--cpk-spacing)*4)}}@container (min-width:48rem){.cpk\:\@3xl\:px-0{padding-inline:calc(var(--cpk-spacing)*0)}}.cpk\:dark\:border-\[\#3a3a3a\]:is(.dark *){border-color:#3a3a3a}.cpk\:dark\:border-gray-700:is(.dark *){border-color:var(--cpk-color-gray-700)}.cpk\:dark\:bg-\[\#1f1f1f\]:is(.dark *){background-color:#1f1f1f}.cpk\:dark\:bg-\[\#2f2f2f\]:is(.dark *){background-color:#2f2f2f}.cpk\:dark\:bg-\[\#303030\]:is(.dark *){background-color:#303030}.cpk\:dark\:bg-\[\#333333\]:is(.dark *){background-color:#333}.cpk\:dark\:bg-gray-900:is(.dark *){background-color:var(--cpk-color-gray-900)}.cpk\:dark\:bg-white:is(.dark *){background-color:var(--cpk-color-white)}.cpk\:dark\:text-\[rgb\(243\,243\,243\)\]:is(.dark *){color:#f3f3f3}.cpk\:dark\:text-black:is(.dark *){color:var(--cpk-color-black)}.cpk\:dark\:text-gray-200:is(.dark *){color:var(--cpk-color-gray-200)}.cpk\:dark\:text-gray-400:is(.dark *){color:var(--cpk-color-gray-400)}.cpk\:dark\:text-gray-500:is(.dark *){color:var(--cpk-color-gray-500)}.cpk\:dark\:text-white:is(.dark *){color:var(--cpk-color-white)}.cpk\:dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.cpk\:dark\:placeholder\:text-\[\#fffc\]:is(.dark *)::placeholder{color:#fffc}@media (hover:hover){.cpk\:dark\:hover\:bg-\[\#2f2f2f\]:is(.dark *):hover{background-color:#2f2f2f}.cpk\:dark\:hover\:bg-\[\#303030\]:is(.dark *):hover{background-color:#303030}.cpk\:dark\:hover\:bg-\[\#404040\]:is(.dark *):hover{background-color:#404040}.cpk\:dark\:hover\:bg-gray-800:is(.dark *):hover{background-color:var(--cpk-color-gray-800)}.cpk\:dark\:hover\:text-\[\#FFFFFF\]:is(.dark *):hover{color:#fff}.cpk\:dark\:hover\:text-\[rgb\(243\,243\,243\)\]:is(.dark *):hover{color:#f3f3f3}}.cpk\:dark\:disabled\:bg-\[\#454545\]:is(.dark *):disabled{background-color:#454545}.cpk\:dark\:disabled\:text-white:is(.dark *):disabled{color:var(--cpk-color-white)}@media (hover:hover){.cpk\:dark\:disabled\:hover\:bg-transparent:is(.dark *):disabled:hover{background-color:#0000}.cpk\:dark\:disabled\:hover\:text-\[\#CCCCCC\]:is(.dark *):disabled:hover{color:#ccc}}div[data-popup-chat] .cpk\:\[div\[data-popup-chat\]_\&\]\:px-4{padding-inline:calc(var(--cpk-spacing)*4)}div[data-popup-chat] .cpk\:\[div\[data-popup-chat\]_\&\]\:px-6{padding-inline:calc(var(--cpk-spacing)*6)}div[data-sidebar-chat] .cpk\:\[div\[data-sidebar-chat\]_\&\]\:px-8{padding-inline:calc(var(--cpk-spacing)*8)}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}[data-copilotkit]{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark [data-copilotkit],[data-copilotkit].dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(14.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(14.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(98.5% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(39.6% .141 25.723);--destructive-foreground:oklch(63.7% .237 25.331);--border:oklch(26.9% 0 0);--input:oklch(26.9% 0 0);--ring:oklch(55.6% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(26.9% 0 0);--sidebar-ring:oklch(43.9% 0 0);--a2ui-color-surface:var(--card);--a2ui-color-border:oklch(37.1% 0 0);--a2ui-color-muted:var(--muted-foreground);--a2ui-color-error:#f87171}[data-copilotkit] .prose input[type=checkbox]{appearance:none;color:#004f99;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;background-color:#fff;background-origin:border-box;border-width:1px;border-color:#9b9b9b;border-radius:2px;flex-shrink:0;width:1rem;height:1rem;padding:0;display:inline-block}[data-copilotkit] .prose input[type=checkbox]:checked{background-color:#004f99;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:#004f99}.copilot-chat-assistant-markdown .sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-contain-size{syntax:"*";inherits:false}@property --tw-contain-layout{syntax:"*";inherits:false}@property --tw-contain-paint{syntax:"*";inherits:false}@property --tw-contain-style{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes pulse-cursor{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.5)}}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Post-processes compiled Tailwind CSS to scope all @layer base rules
|
|
3
|
-
* under [data-copilotkit], preventing CopilotKit styles from leaking
|
|
4
|
-
* into the host application.
|
|
5
|
-
*
|
|
6
|
-
* Run after `tailwindcss` CLI: node scripts/scope-preflight.mjs <file>
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { readFileSync, writeFileSync } from "fs";
|
|
10
|
-
import { parse } from "postcss";
|
|
11
|
-
|
|
12
|
-
const SCOPE = "[data-copilotkit]";
|
|
13
|
-
const file = process.argv[2];
|
|
14
|
-
if (!file) {
|
|
15
|
-
console.error("Usage: node scripts/scope-preflight.mjs <css-file>");
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** Selectors that are already scoped and should be left alone. */
|
|
20
|
-
function isAlreadyScoped(selector) {
|
|
21
|
-
return (
|
|
22
|
-
selector.includes("[data-copilot") || selector.includes("[data-sidebar")
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** Rewrite a single selector to be scoped under [data-copilotkit]. */
|
|
27
|
-
function scopeSelector(sel) {
|
|
28
|
-
sel = sel.trim();
|
|
29
|
-
|
|
30
|
-
// Already scoped — keep as-is
|
|
31
|
-
if (isAlreadyScoped(sel)) return sel;
|
|
32
|
-
|
|
33
|
-
// html, :host → [data-copilotkit]
|
|
34
|
-
if (sel === "html" || sel === ":host" || sel === "html,:host") {
|
|
35
|
-
return SCOPE;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// body → null (remove)
|
|
39
|
-
if (sel === "body") return null;
|
|
40
|
-
|
|
41
|
-
// ::backdrop → null (cannot be scoped to a container)
|
|
42
|
-
if (sel === "::backdrop") return null;
|
|
43
|
-
|
|
44
|
-
// Bare universal selector → scope to container + descendants
|
|
45
|
-
if (sel === "*") return `${SCOPE}, ${SCOPE} *`;
|
|
46
|
-
|
|
47
|
-
// Pseudo-elements (::) and vendor pseudo-classes (:-) → descendant only
|
|
48
|
-
// These can't be combined with an attribute selector suffix
|
|
49
|
-
if (sel.startsWith(":")) {
|
|
50
|
-
return `${SCOPE} ${sel}`;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Element / attribute selectors → descendant AND self-matching
|
|
54
|
-
// e.g. button → [data-copilotkit] button, button[data-copilotkit]
|
|
55
|
-
// This ensures <button data-copilotkit> also receives the preflight reset
|
|
56
|
-
return `${SCOPE} ${sel}, ${sel}${SCOPE}`;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function scopeRule(rule) {
|
|
60
|
-
const newSelectors = [];
|
|
61
|
-
|
|
62
|
-
for (const sel of rule.selectors) {
|
|
63
|
-
const scoped = scopeSelector(sel);
|
|
64
|
-
if (scoped !== null) {
|
|
65
|
-
// scopeSelector may return comma-separated selectors (for *)
|
|
66
|
-
if (typeof scoped === "string" && scoped.includes(", ")) {
|
|
67
|
-
newSelectors.push(...scoped.split(", "));
|
|
68
|
-
} else if (scoped) {
|
|
69
|
-
newSelectors.push(scoped);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (newSelectors.length === 0) {
|
|
75
|
-
rule.remove();
|
|
76
|
-
} else {
|
|
77
|
-
rule.selectors = newSelectors;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/** Recursively scope all rules within a node (handles @supports, @media, etc.) */
|
|
82
|
-
function scopeChildren(node) {
|
|
83
|
-
node.walk((child) => {
|
|
84
|
-
if (child.type === "rule") {
|
|
85
|
-
scopeRule(child);
|
|
86
|
-
}
|
|
87
|
-
// @supports / @media blocks are walked automatically
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// --- Main ---
|
|
92
|
-
const css = readFileSync(file, "utf8");
|
|
93
|
-
const root = parse(css);
|
|
94
|
-
|
|
95
|
-
root.walkAtRules("layer", (layer) => {
|
|
96
|
-
if (layer.params !== "base") return;
|
|
97
|
-
scopeChildren(layer);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
writeFileSync(file, root.toString());
|