@agent-native/toolkit 0.21.3 → 0.22.0-nightly-20260926081002
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/agent-native.eject.json +11 -0
- package/dist/agentkit.d.ts +5 -1
- package/dist/agentkit.d.ts.map +1 -1
- package/dist/agentkit.js +2 -0
- package/dist/agentkit.js.map +1 -1
- package/dist/app-shell/PromptHome.d.ts +26 -0
- package/dist/app-shell/PromptHome.d.ts.map +1 -0
- package/dist/app-shell/PromptHome.js +19 -0
- package/dist/app-shell/PromptHome.js.map +1 -0
- package/dist/app-shell/PromptHome.spec.d.ts +2 -0
- package/dist/app-shell/PromptHome.spec.d.ts.map +1 -0
- package/dist/app-shell/PromptHome.spec.js +206 -0
- package/dist/app-shell/PromptHome.spec.js.map +1 -0
- package/dist/app-shell/TemplateLibraryGrid.d.ts +48 -0
- package/dist/app-shell/TemplateLibraryGrid.d.ts.map +1 -0
- package/dist/app-shell/TemplateLibraryGrid.js +20 -0
- package/dist/app-shell/TemplateLibraryGrid.js.map +1 -0
- package/dist/app-shell/TemplatePreviewDialog.d.ts +41 -0
- package/dist/app-shell/TemplatePreviewDialog.d.ts.map +1 -0
- package/dist/app-shell/TemplatePreviewDialog.js +50 -0
- package/dist/app-shell/TemplatePreviewDialog.js.map +1 -0
- package/dist/app-shell/TemplatePreviewDialog.spec.d.ts +2 -0
- package/dist/app-shell/TemplatePreviewDialog.spec.d.ts.map +1 -0
- package/dist/app-shell/TemplatePreviewDialog.spec.js +258 -0
- package/dist/app-shell/TemplatePreviewDialog.spec.js.map +1 -0
- package/dist/app-shell/index.d.ts +3 -0
- package/dist/app-shell/index.d.ts.map +1 -1
- package/dist/app-shell/index.js +3 -0
- package/dist/app-shell/index.js.map +1 -1
- package/dist/app-shell/prompt-home.css +159 -0
- package/dist/composer/ComposerContextMenu.d.ts +48 -0
- package/dist/composer/ComposerContextMenu.d.ts.map +1 -0
- package/dist/composer/ComposerContextMenu.js +295 -0
- package/dist/composer/ComposerContextMenu.js.map +1 -0
- package/dist/composer/ComposerContextMenu.spec.d.ts +2 -0
- package/dist/composer/ComposerContextMenu.spec.d.ts.map +1 -0
- package/dist/composer/ComposerContextMenu.spec.js +270 -0
- package/dist/composer/ComposerContextMenu.spec.js.map +1 -0
- package/dist/composer/ComposerContextMenuSearch.d.ts +11 -0
- package/dist/composer/ComposerContextMenuSearch.d.ts.map +1 -0
- package/dist/composer/ComposerContextMenuSearch.js +42 -0
- package/dist/composer/ComposerContextMenuSearch.js.map +1 -0
- package/dist/composer/ComposerContextPicker.d.ts +7 -0
- package/dist/composer/ComposerContextPicker.d.ts.map +1 -0
- package/dist/composer/ComposerContextPicker.js +71 -0
- package/dist/composer/ComposerContextPicker.js.map +1 -0
- package/dist/composer/ComposerContextPicker.spec.d.ts +2 -0
- package/dist/composer/ComposerContextPicker.spec.d.ts.map +1 -0
- package/dist/composer/ComposerContextPicker.spec.js +454 -0
- package/dist/composer/ComposerContextPicker.spec.js.map +1 -0
- package/dist/composer/ComposerContextPickerDialog.d.ts +8 -0
- package/dist/composer/ComposerContextPickerDialog.d.ts.map +1 -0
- package/dist/composer/ComposerContextPickerDialog.js +101 -0
- package/dist/composer/ComposerContextPickerDialog.js.map +1 -0
- package/dist/composer/ComposerContextPickerDialog.spec.d.ts +2 -0
- package/dist/composer/ComposerContextPickerDialog.spec.d.ts.map +1 -0
- package/dist/composer/ComposerContextPickerDialog.spec.js +329 -0
- package/dist/composer/ComposerContextPickerDialog.spec.js.map +1 -0
- package/dist/composer/ComposerContextSearchInput.d.ts +7 -0
- package/dist/composer/ComposerContextSearchInput.d.ts.map +1 -0
- package/dist/composer/ComposerContextSearchInput.js +18 -0
- package/dist/composer/ComposerContextSearchInput.js.map +1 -0
- package/dist/composer/PromptComposer.context.spec.d.ts +2 -0
- package/dist/composer/PromptComposer.context.spec.d.ts.map +1 -0
- package/dist/composer/PromptComposer.context.spec.js +383 -0
- package/dist/composer/PromptComposer.context.spec.js.map +1 -0
- package/dist/composer/PromptComposer.d.ts +19 -5
- package/dist/composer/PromptComposer.d.ts.map +1 -1
- package/dist/composer/PromptComposer.js +30 -25
- package/dist/composer/PromptComposer.js.map +1 -1
- package/dist/composer/PromptComposer.spec.js +24 -1
- package/dist/composer/PromptComposer.spec.js.map +1 -1
- package/dist/composer/TiptapComposer.d.ts +13 -2
- package/dist/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/composer/TiptapComposer.js +89 -32
- package/dist/composer/TiptapComposer.js.map +1 -1
- package/dist/composer/context-items.d.ts +12 -0
- package/dist/composer/context-items.d.ts.map +1 -0
- package/dist/composer/context-items.js +46 -0
- package/dist/composer/context-items.js.map +1 -0
- package/dist/composer/context-items.spec.d.ts +2 -0
- package/dist/composer/context-items.spec.d.ts.map +1 -0
- package/dist/composer/context-items.spec.js +43 -0
- package/dist/composer/context-items.spec.js.map +1 -0
- package/dist/composer/index.d.ts +4 -1
- package/dist/composer/index.d.ts.map +1 -1
- package/dist/composer/index.js +3 -1
- package/dist/composer/index.js.map +1 -1
- package/dist/composer/runtime-adapters.d.ts +6 -1
- package/dist/composer/runtime-adapters.d.ts.map +1 -1
- package/dist/composer/runtime-adapters.js.map +1 -1
- package/dist/composer/useComposerContextPicker.d.ts +111 -0
- package/dist/composer/useComposerContextPicker.d.ts.map +1 -0
- package/dist/composer/useComposerContextPicker.js +299 -0
- package/dist/composer/useComposerContextPicker.js.map +1 -0
- package/dist/design-system/default-adapter.d.ts.map +1 -1
- package/dist/design-system/default-adapter.js +13 -7
- package/dist/design-system/default-adapter.js.map +1 -1
- package/dist/design-system/default-adapter.spec.js +13 -0
- package/dist/design-system/default-adapter.spec.js.map +1 -1
- package/dist/design-system/types.d.ts +4 -1
- package/dist/design-system/types.d.ts.map +1 -1
- package/dist/styles.css +1 -0
- package/dist/ui/command.d.ts +8 -2
- package/dist/ui/command.d.ts.map +1 -1
- package/dist/ui/command.js +9 -2
- package/dist/ui/command.js.map +1 -1
- package/dist/ui/command.spec.js +20 -1
- package/dist/ui/command.spec.js.map +1 -1
- package/package.json +2 -1
- package/src/agentkit.ts +26 -0
- package/src/app-shell/PromptHome.spec.tsx +404 -0
- package/src/app-shell/PromptHome.tsx +111 -0
- package/src/app-shell/TemplateLibraryGrid.tsx +212 -0
- package/src/app-shell/TemplatePreviewDialog.spec.tsx +473 -0
- package/src/app-shell/TemplatePreviewDialog.tsx +224 -0
- package/src/app-shell/index.ts +3 -0
- package/src/app-shell/prompt-home.css +159 -0
- package/src/composer/ComposerContextMenu.spec.tsx +343 -0
- package/src/composer/ComposerContextMenu.tsx +610 -0
- package/src/composer/ComposerContextMenuSearch.tsx +69 -0
- package/src/composer/ComposerContextPicker.spec.tsx +520 -0
- package/src/composer/ComposerContextPicker.tsx +280 -0
- package/src/composer/ComposerContextPickerDialog.spec.tsx +405 -0
- package/src/composer/ComposerContextPickerDialog.tsx +274 -0
- package/src/composer/ComposerContextSearchInput.tsx +48 -0
- package/src/composer/PromptComposer.context.spec.tsx +577 -0
- package/src/composer/PromptComposer.spec.ts +24 -1
- package/src/composer/PromptComposer.tsx +60 -26
- package/src/composer/TiptapComposer.tsx +198 -48
- package/src/composer/context-items.spec.ts +68 -0
- package/src/composer/context-items.ts +72 -0
- package/src/composer/index.ts +27 -0
- package/src/composer/runtime-adapters.tsx +6 -1
- package/src/composer/useComposerContextPicker.ts +441 -0
- package/src/design-system/default-adapter.spec.tsx +23 -0
- package/src/design-system/default-adapter.tsx +52 -23
- package/src/design-system/types.ts +4 -1
- package/src/styles.css +1 -0
- package/src/ui/command.spec.tsx +33 -1
- package/src/ui/command.tsx +52 -9
package/agent-native.eject.json
CHANGED
|
@@ -124,6 +124,12 @@
|
|
|
124
124
|
"entrypoints": ["./app-shell", "./app-shell/*"],
|
|
125
125
|
"strategy": "source-copy",
|
|
126
126
|
"sourceEntries": ["src/app-shell"],
|
|
127
|
+
"styles": [
|
|
128
|
+
{
|
|
129
|
+
"entrypoint": "./app-shell/prompt-home.css",
|
|
130
|
+
"source": "src/app-shell/prompt-home.css"
|
|
131
|
+
}
|
|
132
|
+
],
|
|
127
133
|
"targetRoot": "app/components/agent-native/toolkit",
|
|
128
134
|
"dependencies": [
|
|
129
135
|
"@radix-ui/react-collapsible",
|
|
@@ -134,6 +140,7 @@
|
|
|
134
140
|
"react",
|
|
135
141
|
"tailwind-merge"
|
|
136
142
|
],
|
|
143
|
+
"protectedImports": ["@agent-native/toolkit/design-system"],
|
|
137
144
|
"verification": ["pnpm typecheck"]
|
|
138
145
|
},
|
|
139
146
|
{
|
|
@@ -250,7 +257,10 @@
|
|
|
250
257
|
"targetRoot": "app/components/agent-native/toolkit",
|
|
251
258
|
"dependencies": [
|
|
252
259
|
"@assistant-ui/react",
|
|
260
|
+
"@radix-ui/react-checkbox",
|
|
261
|
+
"@radix-ui/react-dialog",
|
|
253
262
|
"@radix-ui/react-dropdown-menu",
|
|
263
|
+
"@radix-ui/react-label",
|
|
254
264
|
"@radix-ui/react-popover",
|
|
255
265
|
"@radix-ui/react-slot",
|
|
256
266
|
"@radix-ui/react-switch",
|
|
@@ -263,6 +273,7 @@
|
|
|
263
273
|
"@tiptap/starter-kit",
|
|
264
274
|
"class-variance-authority",
|
|
265
275
|
"clsx",
|
|
276
|
+
"cmdk",
|
|
266
277
|
"culori",
|
|
267
278
|
"react",
|
|
268
279
|
"react-dom",
|
package/dist/agentkit.d.ts
CHANGED
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
export { writeClipboardText } from "./clipboard.js";
|
|
9
9
|
export { AgentSuggestionBar, agentSuggestionPrompt, } from "./composer/AgentSuggestionBar.js";
|
|
10
10
|
export { MessageQueueDrawer } from "./composer/MessageQueueDrawer.js";
|
|
11
|
-
export {
|
|
11
|
+
export { ComposerContextMenu, ComposerContextSearchInput, type ComposerContextSearchInputProps, type ComposerContextPageControls, type ComposerContextMenuAction, type ComposerContextMenuCategory, type ComposerContextMenuItem, type ComposerContextMenuProps, type ComposerContextPickerConfig, type ComposerContextPickerItem, type ComposerContextPickerRequest, type ComposerContextPickerResult, type ComposerContextPickerSelection, type ComposerContextPickerFooterAction, } from "./composer/ComposerContextMenu.js";
|
|
12
|
+
export { PromptComposer, type PromptComposerFile, type PromptComposerProps, type PromptComposerSubmitOptions, } from "./composer/PromptComposer.js";
|
|
13
|
+
export { snapshotComposerContextItems, ComposerContextError, COMPOSER_CONTEXT_MAX_ITEMS, COMPOSER_CONTEXT_MAX_BYTES, type ComposerContextSnapshot, } from "./composer/context-items.js";
|
|
14
|
+
export type { AgentChatContextItem } from "./composer/runtime-adapters.js";
|
|
15
|
+
export type { Reference } from "./composer/types.js";
|
|
12
16
|
export type { TiptapComposerHandle } from "./composer/TiptapComposer.js";
|
|
13
17
|
export { ActionButton, IconButton, Surface, TextField, } from "./design-system/index.js";
|
|
14
18
|
export { splitMarkdownBlocks } from "./markdown-block-split.js";
|
package/dist/agentkit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentkit.d.ts","sourceRoot":"","sources":["../src/agentkit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"agentkit.d.ts","sourceRoot":"","sources":["../src/agentkit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,iCAAiC,GACvC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,GACjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,OAAO,EACP,SAAS,GACV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,mCAAmC,EACnC,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,mCAAmC,GACpC,MAAM,+BAA+B,CAAC"}
|
package/dist/agentkit.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
export { writeClipboardText } from "./clipboard.js";
|
|
9
9
|
export { AgentSuggestionBar, agentSuggestionPrompt, } from "./composer/AgentSuggestionBar.js";
|
|
10
10
|
export { MessageQueueDrawer } from "./composer/MessageQueueDrawer.js";
|
|
11
|
+
export { ComposerContextMenu, ComposerContextSearchInput, } from "./composer/ComposerContextMenu.js";
|
|
11
12
|
export { PromptComposer, } from "./composer/PromptComposer.js";
|
|
13
|
+
export { snapshotComposerContextItems, ComposerContextError, COMPOSER_CONTEXT_MAX_ITEMS, COMPOSER_CONTEXT_MAX_BYTES, } from "./composer/context-items.js";
|
|
12
14
|
export { ActionButton, IconButton, Surface, TextField, } from "./design-system/index.js";
|
|
13
15
|
export { splitMarkdownBlocks } from "./markdown-block-split.js";
|
|
14
16
|
export { initialSmoothStreamingGraphemeCount, smoothStreamingPunctuationDelayMs, smoothStreamingRevealCount, splitStreamingTextGraphemes, SMOOTH_STREAMING_COMMIT_INTERVAL_MS, } from "./streaming-text-smoothing.js";
|
package/dist/agentkit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentkit.js","sourceRoot":"","sources":["../src/agentkit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACL,cAAc,
|
|
1
|
+
{"version":3,"file":"agentkit.js","sourceRoot":"","sources":["../src/agentkit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAa3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,cAAc,GAIf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,GAE3B,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,OAAO,EACP,SAAS,GACV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,mCAAmC,EACnC,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,mCAAmC,GACpC,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface PromptHomeProps {
|
|
3
|
+
title: ReactNode;
|
|
4
|
+
composer: ReactNode;
|
|
5
|
+
mobileToolbar?: ReactNode;
|
|
6
|
+
connection?: ReactNode;
|
|
7
|
+
quickActions?: ReactNode;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export declare function PromptHome({ title, composer, mobileToolbar, connection, quickActions, children, }: PromptHomeProps): import("react").JSX.Element;
|
|
11
|
+
export type PromptHomeLibraryTab = "templates" | "recent";
|
|
12
|
+
export interface PromptHomeLibraryProps {
|
|
13
|
+
value: PromptHomeLibraryTab;
|
|
14
|
+
onValueChange: (value: PromptHomeLibraryTab) => void;
|
|
15
|
+
labels: {
|
|
16
|
+
templates: string;
|
|
17
|
+
recent: string;
|
|
18
|
+
};
|
|
19
|
+
showRecent: boolean;
|
|
20
|
+
browseAll?: ReactNode;
|
|
21
|
+
recentActions?: ReactNode;
|
|
22
|
+
templates: ReactNode;
|
|
23
|
+
recent?: ReactNode;
|
|
24
|
+
}
|
|
25
|
+
export declare function PromptHomeLibrary({ value, onValueChange, labels, showRecent, browseAll, recentActions, templates, recent, }: PromptHomeLibraryProps): import("react").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=PromptHome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptHome.d.ts","sourceRoot":"","sources":["../../src/app-shell/PromptHome.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,EAAE,eAAe,+BAiCjB;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACrD,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,aAAa,EACb,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,MAAM,GACP,EAAE,sBAAsB,+BAkCxB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tabs } from "@agent-native/toolkit/design-system";
|
|
3
|
+
import { useId } from "react";
|
|
4
|
+
export function PromptHome({ title, composer, mobileToolbar, connection, quickActions, children, }) {
|
|
5
|
+
const titleId = useId();
|
|
6
|
+
return (_jsxs("div", { className: "agent-prompt-home mx-auto w-full min-w-0 px-4 pb-14 sm:px-6 lg:px-8", children: [mobileToolbar ? (_jsx("div", { className: "agent-prompt-home-composer mx-auto flex items-center gap-2 pt-3 md:hidden", children: mobileToolbar })) : null, _jsxs("section", { className: "agent-prompt-home-hero", "aria-labelledby": titleId, children: [connection ? (_jsx("div", { className: "absolute top-7 flex flex-col items-center gap-2", children: connection })) : null, _jsx("h2", { id: titleId, className: "text-2xl font-semibold tracking-tight text-foreground", children: title }), _jsx("div", { className: "agent-prompt-home-composer mt-4 text-start", children: composer }), quickActions ? (_jsx("div", { className: "agent-prompt-home-composer mt-4 flex flex-wrap justify-center gap-2", children: quickActions })) : null] }), children] }));
|
|
7
|
+
}
|
|
8
|
+
export function PromptHomeLibrary({ value, onValueChange, labels, showRecent, browseAll, recentActions, templates, recent, }) {
|
|
9
|
+
const titleId = useId();
|
|
10
|
+
return (_jsx("section", { className: "agent-prompt-home-library", "aria-label": labels.templates, children: showRecent ? (_jsx(Tabs, { value: value, onChange: onValueChange, headerActions: value === "templates" ? browseAll : recentActions, items: [
|
|
11
|
+
{ value: "templates", label: labels.templates, content: templates },
|
|
12
|
+
{
|
|
13
|
+
value: "recent",
|
|
14
|
+
label: labels.recent,
|
|
15
|
+
content: recent,
|
|
16
|
+
},
|
|
17
|
+
] })) : (_jsxs("div", { className: "grid gap-4", "aria-labelledby": titleId, children: [_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx("h2", { id: titleId, className: "text-sm font-semibold", children: labels.templates }), browseAll] }), templates] })) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=PromptHome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptHome.js","sourceRoot":"","sources":["../../src/app-shell/PromptHome.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAkB,MAAM,OAAO,CAAC;AAW9C,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,GACQ;IAChB,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;IACxB,OAAO,CACL,eAAK,SAAS,EAAC,qEAAqE,aACjF,aAAa,CAAC,CAAC,CAAC,CACf,cAAK,SAAS,EAAC,2EAA2E,YACvF,aAAa,GACV,CACP,CAAC,CAAC,CAAC,IAAI,EACR,mBAAS,SAAS,EAAC,wBAAwB,qBAAkB,OAAO,aACjE,UAAU,CAAC,CAAC,CAAC,CACZ,cAAK,SAAS,EAAC,iDAAiD,YAC7D,UAAU,GACP,CACP,CAAC,CAAC,CAAC,IAAI,EACR,aACE,EAAE,EAAE,OAAO,EACX,SAAS,EAAC,uDAAuD,YAEhE,KAAK,GACH,EACL,cAAK,SAAS,EAAC,4CAA4C,YACxD,QAAQ,GACL,EACL,YAAY,CAAC,CAAC,CAAC,CACd,cAAK,SAAS,EAAC,qEAAqE,YACjF,YAAY,GACT,CACP,CAAC,CAAC,CAAC,IAAI,IACA,EACT,QAAQ,IACL,CACP,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,aAAa,EACb,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,MAAM,GACiB;IACvB,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;IACxB,OAAO,CACL,kBACE,SAAS,EAAC,2BAA2B,gBACzB,MAAM,CAAC,SAAS,YAE3B,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IACH,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAChE,KAAK,EAAE;gBACL,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;gBACnE;oBACE,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,OAAO,EAAE,MAAM;iBAChB;aACF,GACD,CACH,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,YAAY,qBAAkB,OAAO,aAClD,eAAK,SAAS,EAAC,yCAAyC,aACtD,aAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,uBAAuB,YAC/C,MAAM,CAAC,SAAS,GACd,EACJ,SAAS,IACN,EACL,SAAS,IACN,CACP,GACO,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptHome.spec.d.ts","sourceRoot":"","sources":["../../src/app-shell/PromptHome.spec.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// @vitest-environment happy-dom
|
|
3
|
+
import { DesignSystemContext } from "@agent-native/toolkit/design-system";
|
|
4
|
+
import { act, useState } from "react";
|
|
5
|
+
import { createRoot } from "react-dom/client";
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
7
|
+
import { PromptHome, PromptHomeLibrary } from "./PromptHome.js";
|
|
8
|
+
import { TemplateLibraryCard, TemplateLibraryGrid, } from "./TemplateLibraryGrid.js";
|
|
9
|
+
const labels = {
|
|
10
|
+
loading: "Loading templates",
|
|
11
|
+
empty: "No templates",
|
|
12
|
+
retry: "Retry",
|
|
13
|
+
};
|
|
14
|
+
const items = [
|
|
15
|
+
{ id: "one", title: "Pitch", description: "Stored description" },
|
|
16
|
+
{ id: "two", title: "Update" },
|
|
17
|
+
];
|
|
18
|
+
describe("prompt home and library", () => {
|
|
19
|
+
let container;
|
|
20
|
+
let root;
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
|
|
23
|
+
container = document.createElement("div");
|
|
24
|
+
document.body.appendChild(container);
|
|
25
|
+
root = createRoot(container);
|
|
26
|
+
});
|
|
27
|
+
afterEach(() => {
|
|
28
|
+
act(() => root.unmount());
|
|
29
|
+
container.remove();
|
|
30
|
+
vi.unstubAllGlobals();
|
|
31
|
+
});
|
|
32
|
+
const render = (node) => act(() => root.render(node));
|
|
33
|
+
it("places the prompt above the full-width library without extra chrome", () => {
|
|
34
|
+
render(_jsx(PromptHome, { title: "Create", composer: _jsx("textarea", { defaultValue: "Draft" }), connection: _jsx("button", { children: "Connect" }), mobileToolbar: _jsx("button", { children: "Import" }), quickActions: _jsx("button", { children: "Start" }), children: _jsx("div", { "data-library": true, children: "Templates" }) }));
|
|
35
|
+
expect(container.querySelectorAll("main")).toHaveLength(0);
|
|
36
|
+
expect(container.querySelector("h2")?.textContent).toBe("Create");
|
|
37
|
+
expect(container
|
|
38
|
+
.querySelector(".agent-prompt-home-hero")
|
|
39
|
+
?.nextElementSibling?.hasAttribute("data-library")).toBe(true);
|
|
40
|
+
expect(container
|
|
41
|
+
.querySelector("textarea")
|
|
42
|
+
?.closest(".agent-prompt-home-composer")).not.toBeNull();
|
|
43
|
+
expect(container.textContent).not.toContain("Getting Started");
|
|
44
|
+
});
|
|
45
|
+
it("leaves the main landmark owned by the app shell", () => {
|
|
46
|
+
render(_jsx("main", { children: _jsx(PromptHome, { title: "Create", composer: _jsx("textarea", {}) }) }));
|
|
47
|
+
expect(container.querySelectorAll("main")).toHaveLength(1);
|
|
48
|
+
});
|
|
49
|
+
it("keeps the existing composer mounted when connection or library changes", () => {
|
|
50
|
+
const home = (connected) => (_jsx(PromptHome, { title: "Create", composer: _jsx("textarea", { defaultValue: "Draft" }), connection: connected ? undefined : _jsx("button", { children: "Connect" }), children: _jsx("div", { children: connected ? "Recent" : "Templates" }) }));
|
|
51
|
+
render(home(false));
|
|
52
|
+
const textarea = container.querySelector("textarea");
|
|
53
|
+
textarea.value = "Unsaved user draft";
|
|
54
|
+
render(home(true));
|
|
55
|
+
expect(container.querySelector("textarea")).toBe(textarea);
|
|
56
|
+
expect(textarea.value).toBe("Unsaved user draft");
|
|
57
|
+
});
|
|
58
|
+
it("shows templates without fake tabs when recents are unavailable", () => {
|
|
59
|
+
const onValueChange = vi.fn();
|
|
60
|
+
render(_jsx(PromptHomeLibrary, { value: "recent", onValueChange: onValueChange, labels: { templates: "Templates", recent: "Recent" }, showRecent: false, browseAll: _jsx("a", { href: "/templates", children: "Browse all" }), templates: _jsx("div", { children: "Real catalog" }), recent: _jsx("div", { children: "Private history" }) }));
|
|
61
|
+
expect(container.querySelector('[role="tablist"]')).toBeNull();
|
|
62
|
+
expect(container.textContent).toContain("Real catalog");
|
|
63
|
+
expect(container.textContent).not.toContain("Private history");
|
|
64
|
+
expect(container.querySelector("a")?.getAttribute("href")).toBe("/templates");
|
|
65
|
+
expect(onValueChange).not.toHaveBeenCalled();
|
|
66
|
+
});
|
|
67
|
+
it("uses controlled semantic tabs with keyboard selection and active actions", async () => {
|
|
68
|
+
function Library() {
|
|
69
|
+
const [value, setValue] = useState("templates");
|
|
70
|
+
return (_jsx(PromptHomeLibrary, { value: value, onValueChange: setValue, labels: { templates: "Templates", recent: "Recent" }, showRecent: true, browseAll: _jsx("a", { href: "/templates", children: "Browse all" }), recentActions: _jsx("button", { children: "Filter" }), templates: _jsx("div", { children: "Catalog" }), recent: _jsx("div", { children: "Owned work" }) }));
|
|
71
|
+
}
|
|
72
|
+
render(_jsx(Library, {}));
|
|
73
|
+
const tabs = container.querySelectorAll('[role="tab"]');
|
|
74
|
+
expect(tabs).toHaveLength(2);
|
|
75
|
+
expect(container
|
|
76
|
+
.querySelector('[role="tablist"]')
|
|
77
|
+
?.parentElement?.querySelector('a[href="/templates"]')).not.toBeNull();
|
|
78
|
+
act(() => tabs[0].focus());
|
|
79
|
+
await act(async () => {
|
|
80
|
+
tabs[0].dispatchEvent(new KeyboardEvent("keydown", { key: "ArrowRight", bubbles: true }));
|
|
81
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
82
|
+
});
|
|
83
|
+
expect(tabs[1].getAttribute("aria-selected")).toBe("true");
|
|
84
|
+
expect(container.textContent).toContain("Owned work");
|
|
85
|
+
expect(container.textContent).toContain("Filter");
|
|
86
|
+
expect(container.querySelector('a[href="/templates"]')).toBeNull();
|
|
87
|
+
});
|
|
88
|
+
it("renders host previews and only stored descriptions", () => {
|
|
89
|
+
render(_jsx(TemplateLibraryGrid, { items: items, labels: labels, renderPreview: (item) => _jsx("img", { alt: item.title, src: "/preview.png" }), onSelect: vi.fn() }));
|
|
90
|
+
expect(container.querySelectorAll("img")).toHaveLength(2);
|
|
91
|
+
expect(container.querySelectorAll("p")).toHaveLength(1);
|
|
92
|
+
expect(container.querySelector("p")?.textContent).toBe("Stored description");
|
|
93
|
+
});
|
|
94
|
+
it("activates image and caption through one focus target while actions stay separate", () => {
|
|
95
|
+
const onSelect = vi.fn();
|
|
96
|
+
const secondary = vi.fn();
|
|
97
|
+
render(_jsx(TemplateLibraryCard, { item: items[0], preview: _jsx("img", { alt: "Preview", src: "/preview.png" }), actions: _jsx("button", { onClick: secondary, children: "Delete" }), onSelect: onSelect }));
|
|
98
|
+
expect(container.querySelectorAll('[role="button"]')).toHaveLength(1);
|
|
99
|
+
for (const selector of ["img", "h3", "p"])
|
|
100
|
+
act(() => container.querySelector(selector).click());
|
|
101
|
+
expect(onSelect).toHaveBeenCalledTimes(3);
|
|
102
|
+
act(() => container.querySelector("button").click());
|
|
103
|
+
expect(secondary).toHaveBeenCalledOnce();
|
|
104
|
+
expect(onSelect).toHaveBeenCalledTimes(3);
|
|
105
|
+
});
|
|
106
|
+
it("exposes selected state and supports Enter and Space selection", () => {
|
|
107
|
+
const onSelect = vi.fn();
|
|
108
|
+
render(_jsx(TemplateLibraryGrid, { items: items, labels: labels, selectedId: "one", renderPreview: () => null, onSelect: onSelect }));
|
|
109
|
+
const card = container.querySelector('[role="button"]');
|
|
110
|
+
act(() => card.focus());
|
|
111
|
+
expect(document.activeElement).toBe(card);
|
|
112
|
+
expect(card.getAttribute("aria-pressed")).toBe("true");
|
|
113
|
+
for (const key of ["Enter", " "])
|
|
114
|
+
act(() => card.dispatchEvent(new KeyboardEvent("keydown", { key, bubbles: true })));
|
|
115
|
+
expect(onSelect).toHaveBeenCalledTimes(2);
|
|
116
|
+
expect(onSelect).toHaveBeenLastCalledWith(items[0], card);
|
|
117
|
+
});
|
|
118
|
+
it.each(["disabled", "pending", "item-disabled"])("prevents %s card activation", (mode) => {
|
|
119
|
+
const onSelect = vi.fn();
|
|
120
|
+
render(_jsx(TemplateLibraryCard, { item: { ...items[0], disabled: mode === "item-disabled" }, preview: null, disabled: mode === "disabled", pending: mode === "pending", onSelect: onSelect }));
|
|
121
|
+
const card = container.querySelector('[role="button"]');
|
|
122
|
+
expect(card.getAttribute("aria-disabled")).toBe("true");
|
|
123
|
+
act(() => {
|
|
124
|
+
card.click();
|
|
125
|
+
card.dispatchEvent(new KeyboardEvent("keydown", { key: "Enter", bubbles: true }));
|
|
126
|
+
});
|
|
127
|
+
expect(onSelect).not.toHaveBeenCalled();
|
|
128
|
+
});
|
|
129
|
+
it("preserves native link modifier-click and keeps secondary actions outside", () => {
|
|
130
|
+
const action = vi.fn();
|
|
131
|
+
render(_jsx(TemplateLibraryGrid, { items: [items[0]], labels: labels, renderPreview: () => null, renderLink: (item, children) => (_jsx("a", { href: `/templates/${item.id}`, children: children })), renderActions: () => _jsx("button", { onClick: action, children: "Delete" }) }));
|
|
132
|
+
const link = container.querySelector("a");
|
|
133
|
+
expect(link.getAttribute("href")).toBe("/templates/one");
|
|
134
|
+
expect(link.querySelector("button")).toBeNull();
|
|
135
|
+
const modified = new MouseEvent("click", {
|
|
136
|
+
ctrlKey: true,
|
|
137
|
+
bubbles: true,
|
|
138
|
+
cancelable: true,
|
|
139
|
+
});
|
|
140
|
+
act(() => link.dispatchEvent(modified));
|
|
141
|
+
expect(modified.defaultPrevented).toBe(false);
|
|
142
|
+
act(() => container.querySelector("button").click());
|
|
143
|
+
expect(action).toHaveBeenCalledOnce();
|
|
144
|
+
});
|
|
145
|
+
it("removes navigation while a link card is pending", () => {
|
|
146
|
+
render(_jsx(TemplateLibraryCard, { item: items[0], preview: null, pending: true, renderLink: (_, children) => _jsx("a", { href: "/template", children: children }) }));
|
|
147
|
+
expect(container.querySelector("a")).toBeNull();
|
|
148
|
+
expect(container.querySelector('[role="link"]')?.getAttribute("aria-disabled")).toBe("true");
|
|
149
|
+
});
|
|
150
|
+
it("keeps secondary actions outside the disabled primary card semantics", () => {
|
|
151
|
+
const onSelect = vi.fn();
|
|
152
|
+
const onAction = vi.fn();
|
|
153
|
+
render(_jsx(TemplateLibraryCard, { item: items[0], preview: null, disabled: true, onSelect: onSelect, actions: _jsx("button", { onClick: onAction, children: "Manage" }) }));
|
|
154
|
+
expect(container.querySelector('[role="button"]')?.querySelector("button")).toBeNull();
|
|
155
|
+
act(() => container.querySelector("button").click());
|
|
156
|
+
expect(onAction).toHaveBeenCalledOnce();
|
|
157
|
+
expect(onSelect).not.toHaveBeenCalled();
|
|
158
|
+
});
|
|
159
|
+
it("makes initial loading, error, and empty mutually exclusive", () => {
|
|
160
|
+
const props = {
|
|
161
|
+
items: [],
|
|
162
|
+
labels,
|
|
163
|
+
renderPreview: () => null,
|
|
164
|
+
onSelect: vi.fn(),
|
|
165
|
+
};
|
|
166
|
+
render(_jsx(TemplateLibraryGrid, { ...props, loading: true }));
|
|
167
|
+
expect(container.querySelector('[role="status"]')?.getAttribute("aria-label")).toBe(labels.loading);
|
|
168
|
+
expect(container.textContent).not.toContain(labels.empty);
|
|
169
|
+
render(_jsx(TemplateLibraryGrid, { ...props, loading: true, error: "Access denied" }));
|
|
170
|
+
expect(container.querySelectorAll('[role="alert"]')).toHaveLength(1);
|
|
171
|
+
expect(container.querySelector('[role="status"]')).toBeNull();
|
|
172
|
+
render(_jsx(TemplateLibraryGrid, { ...props }));
|
|
173
|
+
expect(container.querySelector('[role="status"]')?.textContent).toBe(labels.empty);
|
|
174
|
+
});
|
|
175
|
+
it("retains loaded cards after a refresh failure and exposes retry", () => {
|
|
176
|
+
const onRetry = vi.fn();
|
|
177
|
+
render(_jsx(TemplateLibraryGrid, { items: items, labels: labels, error: "Refresh failed", onRetry: onRetry, renderPreview: () => null, onSelect: vi.fn() }));
|
|
178
|
+
expect(container.querySelectorAll("h3")).toHaveLength(2);
|
|
179
|
+
act(() => container.querySelector("button").click());
|
|
180
|
+
expect(onRetry).toHaveBeenCalledOnce();
|
|
181
|
+
expect(container.querySelector('[role="status"]')).toBeNull();
|
|
182
|
+
});
|
|
183
|
+
it("honors a non-Tailwind semantic Surface, Tabs, and ActionButton adapter", () => {
|
|
184
|
+
const surface = vi.fn();
|
|
185
|
+
const onSelect = vi.fn();
|
|
186
|
+
render(_jsx(DesignSystemContext.Provider, { value: {
|
|
187
|
+
definition: {
|
|
188
|
+
components: {
|
|
189
|
+
Surface: ({ children, interactive, onPress }) => {
|
|
190
|
+
surface();
|
|
191
|
+
return interactive ? (_jsx("button", { "data-company-surface": true, onClick: () => onPress?.(), children: children })) : (_jsx("article", { "data-company-surface": true, children: children }));
|
|
192
|
+
},
|
|
193
|
+
ActionButton: ({ children, onPress }) => (_jsx("button", { "data-company-action": true, onClick: () => onPress?.(), children: children })),
|
|
194
|
+
Tabs: ({ items: tabs, value, onChange }) => (_jsxs("section", { "data-company-tabs": true, children: [tabs.map((tab) => (_jsx("button", { onClick: () => onChange(tab.value), children: tab.label }, tab.value))), tabs.find((tab) => tab.value === value)?.content] })),
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
}, children: _jsx(PromptHomeLibrary, { value: "templates", onValueChange: vi.fn(), labels: { templates: "Templates", recent: "Recent" }, showRecent: true, templates: _jsx(TemplateLibraryGrid, { items: items, labels: labels, error: "Refresh failed", onRetry: vi.fn(), renderPreview: () => null, onSelect: onSelect }) }) }));
|
|
198
|
+
expect(container.querySelector("[data-company-tabs]")).not.toBeNull();
|
|
199
|
+
expect(container.querySelector("[data-company-action]")).not.toBeNull();
|
|
200
|
+
const card = container.querySelector("[data-company-surface]");
|
|
201
|
+
act(() => card.click());
|
|
202
|
+
expect(onSelect).toHaveBeenCalledWith(items[0], expect.any(HTMLElement));
|
|
203
|
+
expect(surface).toHaveBeenCalled();
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
//# sourceMappingURL=PromptHome.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptHome.spec.js","sourceRoot":"","sources":["../../src/app-shell/PromptHome.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from "react";
|
|
2
|
+
export interface TemplateLibraryItem {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
description?: string | null;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
type TemplateLibraryActivation<T extends TemplateLibraryItem> = {
|
|
9
|
+
onSelect: (item: T, element: HTMLElement) => void;
|
|
10
|
+
renderLink?: never;
|
|
11
|
+
} | {
|
|
12
|
+
renderLink: (item: T, children: ReactNode) => ReactElement;
|
|
13
|
+
onSelect?: never;
|
|
14
|
+
};
|
|
15
|
+
export type TemplateLibraryCardProps<T extends TemplateLibraryItem> = {
|
|
16
|
+
item: T;
|
|
17
|
+
preview: ReactNode;
|
|
18
|
+
actions?: ReactNode;
|
|
19
|
+
metadata?: ReactNode;
|
|
20
|
+
actionsVisible?: boolean;
|
|
21
|
+
selected?: boolean;
|
|
22
|
+
pending?: boolean;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
} & TemplateLibraryActivation<T>;
|
|
25
|
+
export declare function TemplateLibraryCard<T extends TemplateLibraryItem>({ item, preview, actions, metadata, actionsVisible, selected, pending, disabled, onSelect, renderLink, }: TemplateLibraryCardProps<T>): import("react").JSX.Element;
|
|
26
|
+
export type TemplateLibraryGridProps<T extends TemplateLibraryItem> = {
|
|
27
|
+
items: readonly T[];
|
|
28
|
+
renderPreview: (item: T) => ReactNode;
|
|
29
|
+
renderActions?: (item: T) => ReactNode;
|
|
30
|
+
renderMetadata?: (item: T) => ReactNode;
|
|
31
|
+
actionsVisible?: (item: T) => boolean;
|
|
32
|
+
isSelected?: (item: T) => boolean;
|
|
33
|
+
selectedId?: string | null;
|
|
34
|
+
pendingId?: string | null;
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
loading?: boolean;
|
|
37
|
+
error?: string | null;
|
|
38
|
+
onRetry?: () => void;
|
|
39
|
+
labels: {
|
|
40
|
+
loading: string;
|
|
41
|
+
empty: string;
|
|
42
|
+
retry: string;
|
|
43
|
+
};
|
|
44
|
+
empty?: ReactNode;
|
|
45
|
+
} & TemplateLibraryActivation<T>;
|
|
46
|
+
export declare function TemplateLibraryGrid<T extends TemplateLibraryItem>({ items, renderPreview, renderActions, renderMetadata, actionsVisible, isSelected, selectedId, pendingId, disabled, loading, error, onRetry, labels, empty, onSelect, renderLink, }: TemplateLibraryGridProps<T>): import("react").JSX.Element;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=TemplateLibraryGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateLibraryGrid.d.ts","sourceRoot":"","sources":["../../src/app-shell/TemplateLibraryGrid.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,yBAAyB,CAAC,CAAC,SAAS,mBAAmB,IACxD;IACE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAClD,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB,GACD;IACE,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,KAAK,YAAY,CAAC;IAC3D,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB,CAAC;AAEN,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,mBAAmB,IAAI;IACpE,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAEjC,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,mBAAmB,EAAE,EACjE,IAAI,EACJ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,cAAsB,EACtB,QAAgB,EAChB,OAAe,EACf,QAAgB,EAChB,QAAQ,EACR,UAAU,GACX,EAAE,wBAAwB,CAAC,CAAC,CAAC,+BAkE7B;AAED,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,mBAAmB,IAAI;IACpE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IACtC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IACxC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAEjC,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,mBAAmB,EAAE,EACjE,KAAK,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAe,EACf,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,QAAQ,EACR,UAAU,GACX,EAAE,wBAAwB,CAAC,CAAC,CAAC,+BA+D7B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ActionButton, Skeleton, Surface, } from "@agent-native/toolkit/design-system";
|
|
3
|
+
import { useId, useRef } from "react";
|
|
4
|
+
export function TemplateLibraryCard({ item, preview, actions, metadata, actionsVisible = false, selected = false, pending = false, disabled = false, onSelect, renderLink, }) {
|
|
5
|
+
const titleId = useId();
|
|
6
|
+
const container = useRef(null);
|
|
7
|
+
const unavailable = disabled || item.disabled || pending;
|
|
8
|
+
const card = (_jsxs(Surface, { padding: "none", elevation: "none", interactive: Boolean(onSelect) && !unavailable, "aria-labelledby": titleId, "aria-pressed": onSelect && !unavailable ? selected : undefined, onPress: onSelect && !unavailable
|
|
9
|
+
? (event) => {
|
|
10
|
+
const element = event?.currentTarget ?? container.current;
|
|
11
|
+
if (element)
|
|
12
|
+
onSelect(item, element);
|
|
13
|
+
}
|
|
14
|
+
: undefined, children: [_jsx(Surface, { padding: "none", children: _jsx("div", { className: "agent-template-library-preview", children: preview }) }), _jsxs("div", { className: "agent-template-library-caption grid content-start gap-1 pt-3", children: [_jsx("h3", { id: titleId, className: "truncate text-sm font-medium", children: item.title }), item.description ? (_jsx("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: item.description })) : null, metadata ? (_jsx("div", { className: "min-w-0 text-xs text-muted-foreground", children: metadata })) : null] })] }));
|
|
15
|
+
return (_jsxs("div", { ref: container, className: "agent-template-library-card min-w-0", "data-selected": selected || undefined, "aria-busy": pending || undefined, children: [_jsx("div", { className: "agent-template-library-primary", role: unavailable ? (renderLink ? "link" : "button") : undefined, "aria-pressed": unavailable && onSelect ? selected : undefined, "aria-disabled": unavailable || undefined, children: renderLink && !unavailable ? renderLink(item, card) : card }), actions ? (_jsx("div", { className: `agent-template-library-actions flex items-center gap-2 pt-3${actionsVisible ? " !opacity-100" : ""}`, children: actions })) : null] }));
|
|
16
|
+
}
|
|
17
|
+
export function TemplateLibraryGrid({ items, renderPreview, renderActions, renderMetadata, actionsVisible, isSelected, selectedId, pendingId, disabled, loading = false, error, onRetry, labels, empty, onSelect, renderLink, }) {
|
|
18
|
+
return (_jsxs("div", { className: "grid gap-4", "aria-busy": loading || undefined, children: [error ? (_jsxs("div", { className: "flex flex-wrap items-center gap-3", role: "alert", children: [_jsx("span", { className: "text-sm text-destructive", children: error }), onRetry ? (_jsx(ActionButton, { emphasis: "outline", disabled: loading, onPress: onRetry, children: labels.retry })) : null] })) : null, items.length ? (_jsx("div", { className: "agent-template-library-grid", children: items.map((item) => (_jsx(TemplateLibraryCard, { item: item, preview: renderPreview(item), actions: renderActions?.(item), metadata: renderMetadata?.(item), actionsVisible: actionsVisible?.(item), selected: isSelected?.(item) ?? item.id === selectedId, pending: item.id === pendingId, disabled: disabled, ...(renderLink ? { renderLink } : { onSelect: onSelect }) }, item.id))) })) : error ? null : loading ? (_jsx("div", { className: "agent-template-library-grid", role: "status", "aria-label": labels.loading, children: Array.from({ length: 4 }, (_, index) => (_jsxs("div", { children: [_jsx(Surface, { padding: "none", children: _jsx("div", { className: "agent-template-library-preview", children: _jsx(Skeleton, { shape: "rectangle", width: "100%", height: "100%" }) }) }), _jsx("div", { className: "pt-3", children: _jsx(Skeleton, { width: "70%", height: "1.25rem" }) })] }, index))) })) : (_jsx("div", { role: "status", className: "py-8 text-center text-sm text-muted-foreground", children: empty ?? labels.empty }))] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=TemplateLibraryGrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateLibraryGrid.js","sourceRoot":"","sources":["../../src/app-shell/TemplateLibraryGrid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type ReactNode, type RefObject } from "react";
|
|
2
|
+
export interface TemplatePreviewThumbnail {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
preview: ReactNode;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export type TemplatePreviewDialogProps = {
|
|
9
|
+
open: boolean;
|
|
10
|
+
onOpenChange: (open: boolean) => void;
|
|
11
|
+
title: ReactNode;
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
size?: "large" | "viewport";
|
|
14
|
+
loading?: boolean;
|
|
15
|
+
error?: string | null;
|
|
16
|
+
onRetry?: () => void;
|
|
17
|
+
onUseTemplate?: () => void;
|
|
18
|
+
useTemplatePending?: boolean;
|
|
19
|
+
useTemplateDisabled?: boolean;
|
|
20
|
+
empty?: boolean;
|
|
21
|
+
labels: {
|
|
22
|
+
close: string;
|
|
23
|
+
useTemplate: string;
|
|
24
|
+
loading: string;
|
|
25
|
+
empty: string;
|
|
26
|
+
retry: string;
|
|
27
|
+
thumbnails: string;
|
|
28
|
+
};
|
|
29
|
+
initialFocusRef?: RefObject<HTMLElement | null>;
|
|
30
|
+
restoreFocusRef?: RefObject<HTMLElement | null>;
|
|
31
|
+
} & ({
|
|
32
|
+
thumbnails: readonly TemplatePreviewThumbnail[];
|
|
33
|
+
selectedId: string;
|
|
34
|
+
onSelectedIdChange: (id: string) => void;
|
|
35
|
+
} | {
|
|
36
|
+
thumbnails?: never;
|
|
37
|
+
selectedId?: never;
|
|
38
|
+
onSelectedIdChange?: never;
|
|
39
|
+
});
|
|
40
|
+
export declare function TemplatePreviewDialog({ open, onOpenChange, title, children, size, loading, error, onRetry, empty, labels, thumbnails, selectedId, onSelectedIdChange, initialFocusRef, restoreFocusRef, onUseTemplate, useTemplatePending, useTemplateDisabled, }: TemplatePreviewDialogProps): import("react").JSX.Element;
|
|
41
|
+
//# sourceMappingURL=TemplatePreviewDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplatePreviewDialog.d.ts","sourceRoot":"","sources":["../../src/app-shell/TemplatePreviewDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACjD,GAAG,CACA;IACE,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,GACD;IAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,kBAAkB,CAAC,EAAE,KAAK,CAAA;CAAE,CACzE,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,IAAiB,EACjB,OAAe,EACf,KAAK,EACL,OAAO,EACP,KAAa,EACb,MAAM,EACN,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EACb,kBAA0B,EAC1B,mBAA2B,GAC5B,EAAE,0BAA0B,+BAwJ5B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ActionButton, Dialog, Skeleton, Surface, } from "@agent-native/toolkit/design-system";
|
|
3
|
+
import { useRef, } from "react";
|
|
4
|
+
export function TemplatePreviewDialog({ open, onOpenChange, title, children, size = "viewport", loading = false, error, onRetry, empty = false, labels, thumbnails, selectedId, onSelectedIdChange, initialFocusRef, restoreFocusRef, onUseTemplate, useTemplatePending = false, useTemplateDisabled = false, }) {
|
|
5
|
+
const thumbnailElements = useRef(new Map());
|
|
6
|
+
const ready = !loading && !error && !empty;
|
|
7
|
+
const onRailKeyDown = (event) => {
|
|
8
|
+
const target = event.target;
|
|
9
|
+
if (!(target instanceof HTMLElement) ||
|
|
10
|
+
!target.closest('button, [role="button"]'))
|
|
11
|
+
return;
|
|
12
|
+
const enabled = thumbnails?.filter((item) => !item.disabled) ?? [];
|
|
13
|
+
if (!enabled.length)
|
|
14
|
+
return;
|
|
15
|
+
const currentId = target.closest("[data-template-preview-thumbnail]")?.dataset.templatePreviewThumbnail;
|
|
16
|
+
const index = enabled.findIndex((item) => item.id === currentId);
|
|
17
|
+
if (index < 0)
|
|
18
|
+
return;
|
|
19
|
+
const offset = ["ArrowRight", "ArrowDown"].includes(event.key)
|
|
20
|
+
? 1
|
|
21
|
+
: ["ArrowLeft", "ArrowUp"].includes(event.key)
|
|
22
|
+
? -1
|
|
23
|
+
: 0;
|
|
24
|
+
const next = event.key === "Home"
|
|
25
|
+
? 0
|
|
26
|
+
: event.key === "End"
|
|
27
|
+
? enabled.length - 1
|
|
28
|
+
: offset
|
|
29
|
+
? (index + offset + enabled.length) % enabled.length
|
|
30
|
+
: -1;
|
|
31
|
+
if (next < 0)
|
|
32
|
+
return;
|
|
33
|
+
event.preventDefault();
|
|
34
|
+
const item = enabled[next];
|
|
35
|
+
onSelectedIdChange?.(item.id);
|
|
36
|
+
thumbnailElements.current
|
|
37
|
+
.get(item.id)
|
|
38
|
+
?.querySelector('button, [role="button"]')
|
|
39
|
+
?.focus();
|
|
40
|
+
};
|
|
41
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, title: title, size: size, className: "agent-template-preview-dialog", closeLabel: labels.close, hideClose: Boolean(onUseTemplate), headerAction: onUseTemplate ? (_jsx(ActionButton, { intent: "primary", emphasis: "solid", size: "compact", pending: useTemplatePending, disabled: useTemplateDisabled || useTemplatePending || !ready, onPress: onUseTemplate, children: labels.useTemplate })) : undefined, initialFocusRef: initialFocusRef, restoreFocusRef: restoreFocusRef, children: _jsxs("div", { className: "agent-template-preview-viewer", "data-size": size, "data-has-rail": (ready && Boolean(thumbnails?.length)) || undefined, "aria-busy": loading || undefined, children: [ready && thumbnails?.length ? (_jsx("nav", { className: "agent-template-preview-rail", "aria-label": labels.thumbnails, onKeyDown: onRailKeyDown, children: thumbnails.map((item) => (_jsx("div", { className: "agent-template-preview-thumbnail", "data-template-preview-thumbnail": item.id, "data-selected": item.id === selectedId || undefined, role: item.disabled ? "button" : undefined, "aria-label": item.disabled ? item.title : undefined, "aria-disabled": item.disabled || undefined, ref: (element) => {
|
|
42
|
+
if (element)
|
|
43
|
+
thumbnailElements.current.set(item.id, element);
|
|
44
|
+
else
|
|
45
|
+
thumbnailElements.current.delete(item.id);
|
|
46
|
+
}, children: _jsxs(Surface, { padding: "compact", interactive: !item.disabled, "aria-label": item.title, "aria-pressed": !item.disabled ? item.id === selectedId : undefined, onPress: item.disabled
|
|
47
|
+
? undefined
|
|
48
|
+
: () => onSelectedIdChange?.(item.id), children: [_jsx("div", { className: "agent-template-library-preview", inert: true, children: item.preview }), _jsx("div", { className: "truncate pt-2 text-sm", children: item.title })] }) }, item.id))) })) : null, _jsx("div", { className: "agent-template-preview-content", children: error ? (_jsxs("div", { role: "alert", className: "flex flex-wrap items-center justify-center gap-3 p-6", children: [_jsx("span", { className: "text-sm text-destructive", children: error }), onRetry ? (_jsx(ActionButton, { emphasis: "outline", disabled: loading, onPress: onRetry, children: labels.retry })) : null] })) : loading ? (_jsx("div", { role: "status", "aria-label": labels.loading, className: "h-full p-4", children: _jsx(Skeleton, { shape: "rectangle", width: "100%", height: "100%" }) })) : empty ? (_jsx("div", { role: "status", className: "p-6 text-center text-sm text-muted-foreground", children: labels.empty })) : (children) })] }) }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=TemplatePreviewDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplatePreviewDialog.js","sourceRoot":"","sources":["../../src/app-shell/TemplatePreviewDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,OAAO,GACR,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,MAAM,GAIP,MAAM,OAAO,CAAC;AAyCf,MAAM,UAAU,qBAAqB,CAAC,EACpC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,IAAI,GAAG,UAAU,EACjB,OAAO,GAAG,KAAK,EACf,KAAK,EACL,OAAO,EACP,KAAK,GAAG,KAAK,EACb,MAAM,EACN,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EACb,kBAAkB,GAAG,KAAK,EAC1B,mBAAmB,GAAG,KAAK,GACA;IAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,GAAG,EAA0B,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC;IAC3C,MAAM,aAAa,GAAG,CAAC,KAAiC,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IACE,CAAC,CAAC,MAAM,YAAY,WAAW,CAAC;YAChC,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;YAE1C,OAAO;QACT,MAAM,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAC9B,mCAAmC,CACpC,EAAE,OAAO,CAAC,wBAAwB,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACjE,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO;QACtB,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5D,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC5C,CAAC,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC,CAAC;QACR,MAAM,IAAI,GACR,KAAK,CAAC,GAAG,KAAK,MAAM;YAClB,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK;gBACnB,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM;oBACpD,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO;QACrB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAE,CAAC;QAC5B,kBAAkB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,iBAAiB,CAAC,OAAO;aACtB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACb,EAAE,aAAa,CAAc,yBAAyB,CAAC;YACvD,EAAE,KAAK,EAAE,CAAC;IACd,CAAC,CAAC;IACF,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,+BAA+B,EACzC,UAAU,EAAE,MAAM,CAAC,KAAK,EACxB,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,EACjC,YAAY,EACV,aAAa,CAAC,CAAC,CAAC,CACd,KAAC,YAAY,IACX,MAAM,EAAC,SAAS,EAChB,QAAQ,EAAC,OAAO,EAChB,IAAI,EAAC,SAAS,EACd,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,mBAAmB,IAAI,kBAAkB,IAAI,CAAC,KAAK,EAC7D,OAAO,EAAE,aAAa,YAErB,MAAM,CAAC,WAAW,GACN,CAChB,CAAC,CAAC,CAAC,SAAS,EAEf,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,YAEhC,eACE,SAAS,EAAC,+BAA+B,eAC9B,IAAI,mBACA,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,SAAS,eACvD,OAAO,IAAI,SAAS,aAE9B,KAAK,IAAI,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAC7B,cACE,SAAS,EAAC,6BAA6B,gBAC3B,MAAM,CAAC,UAAU,EAC7B,SAAS,EAAE,aAAa,YAEvB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,cAEE,SAAS,EAAC,kCAAkC,qCACX,IAAI,CAAC,EAAE,mBACzB,IAAI,CAAC,EAAE,KAAK,UAAU,IAAI,SAAS,EAClD,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,gBAC9B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,mBACnC,IAAI,CAAC,QAAQ,IAAI,SAAS,EACzC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;4BACf,IAAI,OAAO;gCAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;;gCACxD,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACjD,CAAC,YAED,MAAC,OAAO,IACN,OAAO,EAAC,SAAS,EACjB,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,gBACf,IAAI,CAAC,KAAK,kBAEpB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,EAErD,OAAO,EACL,IAAI,CAAC,QAAQ;gCACX,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAGzC,cAAK,SAAS,EAAC,gCAAgC,EAAC,KAAK,kBAClD,IAAI,CAAC,OAAO,GACT,EACN,cAAK,SAAS,EAAC,uBAAuB,YAAE,IAAI,CAAC,KAAK,GAAO,IACjD,IA7BL,IAAI,CAAC,EAAE,CA8BR,CACP,CAAC,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,gCAAgC,YAC5C,KAAK,CAAC,CAAC,CAAC,CACP,eACE,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,sDAAsD,aAEhE,eAAM,SAAS,EAAC,0BAA0B,YAAE,KAAK,GAAQ,EACxD,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,YAAY,IACX,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,YAEf,MAAM,CAAC,KAAK,GACA,CAChB,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACZ,cACE,IAAI,EAAC,QAAQ,gBACD,MAAM,CAAC,OAAO,EAC1B,SAAS,EAAC,YAAY,YAEtB,KAAC,QAAQ,IAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,GAAG,GACrD,CACP,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,cACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+CAA+C,YAExD,MAAM,CAAC,KAAK,GACT,CACP,CAAC,CAAC,CAAC,CACF,QAAQ,CACT,GACG,IACF,GACC,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplatePreviewDialog.spec.d.ts","sourceRoot":"","sources":["../../src/app-shell/TemplatePreviewDialog.spec.tsx"],"names":[],"mappings":""}
|