@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.
Files changed (141) hide show
  1. package/agent-native.eject.json +11 -0
  2. package/dist/agentkit.d.ts +5 -1
  3. package/dist/agentkit.d.ts.map +1 -1
  4. package/dist/agentkit.js +2 -0
  5. package/dist/agentkit.js.map +1 -1
  6. package/dist/app-shell/PromptHome.d.ts +26 -0
  7. package/dist/app-shell/PromptHome.d.ts.map +1 -0
  8. package/dist/app-shell/PromptHome.js +19 -0
  9. package/dist/app-shell/PromptHome.js.map +1 -0
  10. package/dist/app-shell/PromptHome.spec.d.ts +2 -0
  11. package/dist/app-shell/PromptHome.spec.d.ts.map +1 -0
  12. package/dist/app-shell/PromptHome.spec.js +206 -0
  13. package/dist/app-shell/PromptHome.spec.js.map +1 -0
  14. package/dist/app-shell/TemplateLibraryGrid.d.ts +48 -0
  15. package/dist/app-shell/TemplateLibraryGrid.d.ts.map +1 -0
  16. package/dist/app-shell/TemplateLibraryGrid.js +20 -0
  17. package/dist/app-shell/TemplateLibraryGrid.js.map +1 -0
  18. package/dist/app-shell/TemplatePreviewDialog.d.ts +41 -0
  19. package/dist/app-shell/TemplatePreviewDialog.d.ts.map +1 -0
  20. package/dist/app-shell/TemplatePreviewDialog.js +50 -0
  21. package/dist/app-shell/TemplatePreviewDialog.js.map +1 -0
  22. package/dist/app-shell/TemplatePreviewDialog.spec.d.ts +2 -0
  23. package/dist/app-shell/TemplatePreviewDialog.spec.d.ts.map +1 -0
  24. package/dist/app-shell/TemplatePreviewDialog.spec.js +258 -0
  25. package/dist/app-shell/TemplatePreviewDialog.spec.js.map +1 -0
  26. package/dist/app-shell/index.d.ts +3 -0
  27. package/dist/app-shell/index.d.ts.map +1 -1
  28. package/dist/app-shell/index.js +3 -0
  29. package/dist/app-shell/index.js.map +1 -1
  30. package/dist/app-shell/prompt-home.css +159 -0
  31. package/dist/composer/ComposerContextMenu.d.ts +48 -0
  32. package/dist/composer/ComposerContextMenu.d.ts.map +1 -0
  33. package/dist/composer/ComposerContextMenu.js +295 -0
  34. package/dist/composer/ComposerContextMenu.js.map +1 -0
  35. package/dist/composer/ComposerContextMenu.spec.d.ts +2 -0
  36. package/dist/composer/ComposerContextMenu.spec.d.ts.map +1 -0
  37. package/dist/composer/ComposerContextMenu.spec.js +270 -0
  38. package/dist/composer/ComposerContextMenu.spec.js.map +1 -0
  39. package/dist/composer/ComposerContextMenuSearch.d.ts +11 -0
  40. package/dist/composer/ComposerContextMenuSearch.d.ts.map +1 -0
  41. package/dist/composer/ComposerContextMenuSearch.js +42 -0
  42. package/dist/composer/ComposerContextMenuSearch.js.map +1 -0
  43. package/dist/composer/ComposerContextPicker.d.ts +7 -0
  44. package/dist/composer/ComposerContextPicker.d.ts.map +1 -0
  45. package/dist/composer/ComposerContextPicker.js +71 -0
  46. package/dist/composer/ComposerContextPicker.js.map +1 -0
  47. package/dist/composer/ComposerContextPicker.spec.d.ts +2 -0
  48. package/dist/composer/ComposerContextPicker.spec.d.ts.map +1 -0
  49. package/dist/composer/ComposerContextPicker.spec.js +454 -0
  50. package/dist/composer/ComposerContextPicker.spec.js.map +1 -0
  51. package/dist/composer/ComposerContextPickerDialog.d.ts +8 -0
  52. package/dist/composer/ComposerContextPickerDialog.d.ts.map +1 -0
  53. package/dist/composer/ComposerContextPickerDialog.js +101 -0
  54. package/dist/composer/ComposerContextPickerDialog.js.map +1 -0
  55. package/dist/composer/ComposerContextPickerDialog.spec.d.ts +2 -0
  56. package/dist/composer/ComposerContextPickerDialog.spec.d.ts.map +1 -0
  57. package/dist/composer/ComposerContextPickerDialog.spec.js +329 -0
  58. package/dist/composer/ComposerContextPickerDialog.spec.js.map +1 -0
  59. package/dist/composer/ComposerContextSearchInput.d.ts +7 -0
  60. package/dist/composer/ComposerContextSearchInput.d.ts.map +1 -0
  61. package/dist/composer/ComposerContextSearchInput.js +18 -0
  62. package/dist/composer/ComposerContextSearchInput.js.map +1 -0
  63. package/dist/composer/PromptComposer.context.spec.d.ts +2 -0
  64. package/dist/composer/PromptComposer.context.spec.d.ts.map +1 -0
  65. package/dist/composer/PromptComposer.context.spec.js +383 -0
  66. package/dist/composer/PromptComposer.context.spec.js.map +1 -0
  67. package/dist/composer/PromptComposer.d.ts +19 -5
  68. package/dist/composer/PromptComposer.d.ts.map +1 -1
  69. package/dist/composer/PromptComposer.js +30 -25
  70. package/dist/composer/PromptComposer.js.map +1 -1
  71. package/dist/composer/PromptComposer.spec.js +24 -1
  72. package/dist/composer/PromptComposer.spec.js.map +1 -1
  73. package/dist/composer/TiptapComposer.d.ts +13 -2
  74. package/dist/composer/TiptapComposer.d.ts.map +1 -1
  75. package/dist/composer/TiptapComposer.js +89 -32
  76. package/dist/composer/TiptapComposer.js.map +1 -1
  77. package/dist/composer/context-items.d.ts +12 -0
  78. package/dist/composer/context-items.d.ts.map +1 -0
  79. package/dist/composer/context-items.js +46 -0
  80. package/dist/composer/context-items.js.map +1 -0
  81. package/dist/composer/context-items.spec.d.ts +2 -0
  82. package/dist/composer/context-items.spec.d.ts.map +1 -0
  83. package/dist/composer/context-items.spec.js +43 -0
  84. package/dist/composer/context-items.spec.js.map +1 -0
  85. package/dist/composer/index.d.ts +4 -1
  86. package/dist/composer/index.d.ts.map +1 -1
  87. package/dist/composer/index.js +3 -1
  88. package/dist/composer/index.js.map +1 -1
  89. package/dist/composer/runtime-adapters.d.ts +6 -1
  90. package/dist/composer/runtime-adapters.d.ts.map +1 -1
  91. package/dist/composer/runtime-adapters.js.map +1 -1
  92. package/dist/composer/useComposerContextPicker.d.ts +111 -0
  93. package/dist/composer/useComposerContextPicker.d.ts.map +1 -0
  94. package/dist/composer/useComposerContextPicker.js +299 -0
  95. package/dist/composer/useComposerContextPicker.js.map +1 -0
  96. package/dist/design-system/default-adapter.d.ts.map +1 -1
  97. package/dist/design-system/default-adapter.js +13 -7
  98. package/dist/design-system/default-adapter.js.map +1 -1
  99. package/dist/design-system/default-adapter.spec.js +13 -0
  100. package/dist/design-system/default-adapter.spec.js.map +1 -1
  101. package/dist/design-system/types.d.ts +4 -1
  102. package/dist/design-system/types.d.ts.map +1 -1
  103. package/dist/styles.css +1 -0
  104. package/dist/ui/command.d.ts +8 -2
  105. package/dist/ui/command.d.ts.map +1 -1
  106. package/dist/ui/command.js +9 -2
  107. package/dist/ui/command.js.map +1 -1
  108. package/dist/ui/command.spec.js +20 -1
  109. package/dist/ui/command.spec.js.map +1 -1
  110. package/package.json +2 -1
  111. package/src/agentkit.ts +26 -0
  112. package/src/app-shell/PromptHome.spec.tsx +404 -0
  113. package/src/app-shell/PromptHome.tsx +111 -0
  114. package/src/app-shell/TemplateLibraryGrid.tsx +212 -0
  115. package/src/app-shell/TemplatePreviewDialog.spec.tsx +473 -0
  116. package/src/app-shell/TemplatePreviewDialog.tsx +224 -0
  117. package/src/app-shell/index.ts +3 -0
  118. package/src/app-shell/prompt-home.css +159 -0
  119. package/src/composer/ComposerContextMenu.spec.tsx +343 -0
  120. package/src/composer/ComposerContextMenu.tsx +610 -0
  121. package/src/composer/ComposerContextMenuSearch.tsx +69 -0
  122. package/src/composer/ComposerContextPicker.spec.tsx +520 -0
  123. package/src/composer/ComposerContextPicker.tsx +280 -0
  124. package/src/composer/ComposerContextPickerDialog.spec.tsx +405 -0
  125. package/src/composer/ComposerContextPickerDialog.tsx +274 -0
  126. package/src/composer/ComposerContextSearchInput.tsx +48 -0
  127. package/src/composer/PromptComposer.context.spec.tsx +577 -0
  128. package/src/composer/PromptComposer.spec.ts +24 -1
  129. package/src/composer/PromptComposer.tsx +60 -26
  130. package/src/composer/TiptapComposer.tsx +198 -48
  131. package/src/composer/context-items.spec.ts +68 -0
  132. package/src/composer/context-items.ts +72 -0
  133. package/src/composer/index.ts +27 -0
  134. package/src/composer/runtime-adapters.tsx +6 -1
  135. package/src/composer/useComposerContextPicker.ts +441 -0
  136. package/src/design-system/default-adapter.spec.tsx +23 -0
  137. package/src/design-system/default-adapter.tsx +52 -23
  138. package/src/design-system/types.ts +4 -1
  139. package/src/styles.css +1 -0
  140. package/src/ui/command.spec.tsx +33 -1
  141. package/src/ui/command.tsx +52 -9
@@ -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",
@@ -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 { PromptComposer, type PromptComposerFile, type PromptComposerProps, } from "./composer/PromptComposer.js";
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";
@@ -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,GACzB,MAAM,8BAA8B,CAAC;AACtC,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"}
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";
@@ -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,GAGf,MAAM,8BAA8B,CAAC;AAEtC,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"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PromptHome.spec.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TemplatePreviewDialog.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplatePreviewDialog.spec.d.ts","sourceRoot":"","sources":["../../src/app-shell/TemplatePreviewDialog.spec.tsx"],"names":[],"mappings":""}