@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
@@ -0,0 +1,224 @@
1
+ import {
2
+ ActionButton,
3
+ Dialog,
4
+ Skeleton,
5
+ Surface,
6
+ } from "@agent-native/toolkit/design-system";
7
+ import {
8
+ useRef,
9
+ type KeyboardEvent,
10
+ type ReactNode,
11
+ type RefObject,
12
+ } from "react";
13
+
14
+ export interface TemplatePreviewThumbnail {
15
+ id: string;
16
+ title: string;
17
+ preview: ReactNode;
18
+ disabled?: boolean;
19
+ }
20
+
21
+ export type TemplatePreviewDialogProps = {
22
+ open: boolean;
23
+ onOpenChange: (open: boolean) => void;
24
+ title: ReactNode;
25
+ children: ReactNode;
26
+ size?: "large" | "viewport";
27
+ loading?: boolean;
28
+ error?: string | null;
29
+ onRetry?: () => void;
30
+ onUseTemplate?: () => void;
31
+ useTemplatePending?: boolean;
32
+ useTemplateDisabled?: boolean;
33
+ empty?: boolean;
34
+ labels: {
35
+ close: string;
36
+ useTemplate: string;
37
+ loading: string;
38
+ empty: string;
39
+ retry: string;
40
+ thumbnails: string;
41
+ };
42
+ initialFocusRef?: RefObject<HTMLElement | null>;
43
+ restoreFocusRef?: RefObject<HTMLElement | null>;
44
+ } & (
45
+ | {
46
+ thumbnails: readonly TemplatePreviewThumbnail[];
47
+ selectedId: string;
48
+ onSelectedIdChange: (id: string) => void;
49
+ }
50
+ | { thumbnails?: never; selectedId?: never; onSelectedIdChange?: never }
51
+ );
52
+
53
+ export function TemplatePreviewDialog({
54
+ open,
55
+ onOpenChange,
56
+ title,
57
+ children,
58
+ size = "viewport",
59
+ loading = false,
60
+ error,
61
+ onRetry,
62
+ empty = false,
63
+ labels,
64
+ thumbnails,
65
+ selectedId,
66
+ onSelectedIdChange,
67
+ initialFocusRef,
68
+ restoreFocusRef,
69
+ onUseTemplate,
70
+ useTemplatePending = false,
71
+ useTemplateDisabled = false,
72
+ }: TemplatePreviewDialogProps) {
73
+ const thumbnailElements = useRef(new Map<string, HTMLDivElement>());
74
+ const ready = !loading && !error && !empty;
75
+ const onRailKeyDown = (event: KeyboardEvent<HTMLElement>) => {
76
+ const target = event.target;
77
+ if (
78
+ !(target instanceof HTMLElement) ||
79
+ !target.closest('button, [role="button"]')
80
+ )
81
+ return;
82
+ const enabled = thumbnails?.filter((item) => !item.disabled) ?? [];
83
+ if (!enabled.length) return;
84
+ const currentId = target.closest<HTMLElement>(
85
+ "[data-template-preview-thumbnail]",
86
+ )?.dataset.templatePreviewThumbnail;
87
+ const index = enabled.findIndex((item) => item.id === currentId);
88
+ if (index < 0) return;
89
+ const offset = ["ArrowRight", "ArrowDown"].includes(event.key)
90
+ ? 1
91
+ : ["ArrowLeft", "ArrowUp"].includes(event.key)
92
+ ? -1
93
+ : 0;
94
+ const next =
95
+ event.key === "Home"
96
+ ? 0
97
+ : event.key === "End"
98
+ ? enabled.length - 1
99
+ : offset
100
+ ? (index + offset + enabled.length) % enabled.length
101
+ : -1;
102
+ if (next < 0) return;
103
+ event.preventDefault();
104
+ const item = enabled[next]!;
105
+ onSelectedIdChange?.(item.id);
106
+ thumbnailElements.current
107
+ .get(item.id)
108
+ ?.querySelector<HTMLElement>('button, [role="button"]')
109
+ ?.focus();
110
+ };
111
+ return (
112
+ <Dialog
113
+ open={open}
114
+ onOpenChange={onOpenChange}
115
+ title={title}
116
+ size={size}
117
+ className="agent-template-preview-dialog"
118
+ closeLabel={labels.close}
119
+ hideClose={Boolean(onUseTemplate)}
120
+ headerAction={
121
+ onUseTemplate ? (
122
+ <ActionButton
123
+ intent="primary"
124
+ emphasis="solid"
125
+ size="compact"
126
+ pending={useTemplatePending}
127
+ disabled={useTemplateDisabled || useTemplatePending || !ready}
128
+ onPress={onUseTemplate}
129
+ >
130
+ {labels.useTemplate}
131
+ </ActionButton>
132
+ ) : undefined
133
+ }
134
+ initialFocusRef={initialFocusRef}
135
+ restoreFocusRef={restoreFocusRef}
136
+ >
137
+ <div
138
+ className="agent-template-preview-viewer"
139
+ data-size={size}
140
+ data-has-rail={(ready && Boolean(thumbnails?.length)) || undefined}
141
+ aria-busy={loading || undefined}
142
+ >
143
+ {ready && thumbnails?.length ? (
144
+ <nav
145
+ className="agent-template-preview-rail"
146
+ aria-label={labels.thumbnails}
147
+ onKeyDown={onRailKeyDown}
148
+ >
149
+ {thumbnails.map((item) => (
150
+ <div
151
+ key={item.id}
152
+ className="agent-template-preview-thumbnail"
153
+ data-template-preview-thumbnail={item.id}
154
+ data-selected={item.id === selectedId || undefined}
155
+ role={item.disabled ? "button" : undefined}
156
+ aria-label={item.disabled ? item.title : undefined}
157
+ aria-disabled={item.disabled || undefined}
158
+ ref={(element) => {
159
+ if (element) thumbnailElements.current.set(item.id, element);
160
+ else thumbnailElements.current.delete(item.id);
161
+ }}
162
+ >
163
+ <Surface
164
+ padding="compact"
165
+ interactive={!item.disabled}
166
+ aria-label={item.title}
167
+ aria-pressed={
168
+ !item.disabled ? item.id === selectedId : undefined
169
+ }
170
+ onPress={
171
+ item.disabled
172
+ ? undefined
173
+ : () => onSelectedIdChange?.(item.id)
174
+ }
175
+ >
176
+ <div className="agent-template-library-preview" inert>
177
+ {item.preview}
178
+ </div>
179
+ <div className="truncate pt-2 text-sm">{item.title}</div>
180
+ </Surface>
181
+ </div>
182
+ ))}
183
+ </nav>
184
+ ) : null}
185
+ <div className="agent-template-preview-content">
186
+ {error ? (
187
+ <div
188
+ role="alert"
189
+ className="flex flex-wrap items-center justify-center gap-3 p-6"
190
+ >
191
+ <span className="text-sm text-destructive">{error}</span>
192
+ {onRetry ? (
193
+ <ActionButton
194
+ emphasis="outline"
195
+ disabled={loading}
196
+ onPress={onRetry}
197
+ >
198
+ {labels.retry}
199
+ </ActionButton>
200
+ ) : null}
201
+ </div>
202
+ ) : loading ? (
203
+ <div
204
+ role="status"
205
+ aria-label={labels.loading}
206
+ className="h-full p-4"
207
+ >
208
+ <Skeleton shape="rectangle" width="100%" height="100%" />
209
+ </div>
210
+ ) : empty ? (
211
+ <div
212
+ role="status"
213
+ className="p-6 text-center text-sm text-muted-foreground"
214
+ >
215
+ {labels.empty}
216
+ </div>
217
+ ) : (
218
+ children
219
+ )}
220
+ </div>
221
+ </div>
222
+ </Dialog>
223
+ );
224
+ }
@@ -1,3 +1,6 @@
1
+ export * from "./PromptHome.js";
2
+ export * from "./TemplateLibraryGrid.js";
3
+ export * from "./TemplatePreviewDialog.js";
1
4
  export * from "./header-actions.js";
2
5
  export * from "./sidebar-footer-actions.js";
3
6
  export * from "./sidebar.js";
@@ -0,0 +1,159 @@
1
+ .agent-prompt-home {
2
+ max-width: 92.5rem;
3
+ }
4
+
5
+ .agent-prompt-home-hero {
6
+ position: relative;
7
+ display: flex;
8
+ min-height: clamp(36rem, 64svh, 44rem);
9
+ flex-direction: column;
10
+ align-items: center;
11
+ padding-block-start: clamp(12rem, 33svh, 22rem);
12
+ text-align: center;
13
+ }
14
+
15
+ .agent-prompt-home-composer {
16
+ width: 100%;
17
+ max-width: 43.75rem;
18
+ }
19
+
20
+ .agent-prompt-home-library {
21
+ padding-block-start: 2rem;
22
+ }
23
+
24
+ .agent-template-library-grid {
25
+ display: grid;
26
+ grid-template-columns: minmax(0, 1fr);
27
+ gap: 1rem;
28
+ }
29
+
30
+ .agent-template-library-preview {
31
+ aspect-ratio: 16 / 9;
32
+ overflow: hidden;
33
+ border-radius: inherit;
34
+ }
35
+
36
+ .agent-template-library-card {
37
+ display: grid;
38
+ grid-template-columns: minmax(0, 1fr) auto;
39
+ grid-template-rows: auto 5rem;
40
+ }
41
+
42
+ .agent-template-library-primary {
43
+ grid-area: 1 / 1 / 3 / 3;
44
+ min-width: 0;
45
+ }
46
+
47
+ .agent-template-library-caption {
48
+ height: 5rem;
49
+ padding-inline-end: 3rem;
50
+ }
51
+
52
+ .agent-template-library-actions {
53
+ grid-column: 2;
54
+ grid-row: 2;
55
+ align-self: start;
56
+ opacity: 1;
57
+ }
58
+
59
+ @media (hover: hover) {
60
+ .agent-template-library-actions {
61
+ opacity: 0;
62
+ }
63
+
64
+ .agent-template-library-card:hover .agent-template-library-actions,
65
+ .agent-template-library-card:focus-within .agent-template-library-actions {
66
+ opacity: 1;
67
+ }
68
+ }
69
+
70
+ .agent-template-preview-dialog {
71
+ grid-template-rows: auto minmax(0, 1fr);
72
+ min-height: 0;
73
+ overflow: hidden;
74
+ }
75
+
76
+ .agent-template-preview-dialog[data-size="large"] {
77
+ height: min(85dvh, 60rem);
78
+ }
79
+
80
+ .agent-template-preview-viewer {
81
+ display: grid;
82
+ min-height: 0;
83
+ height: 100%;
84
+ grid-template-rows: minmax(0, 1fr);
85
+ }
86
+
87
+ .agent-template-preview-viewer[data-has-rail] {
88
+ grid-template-rows: auto minmax(0, 1fr);
89
+ gap: 1rem;
90
+ }
91
+
92
+ .agent-template-preview-rail {
93
+ display: flex;
94
+ gap: 0.75rem;
95
+ overflow: auto;
96
+ padding: 0.25rem;
97
+ }
98
+
99
+ .agent-template-preview-thumbnail {
100
+ flex: 0 0 10rem;
101
+ min-width: 0;
102
+ }
103
+
104
+ .agent-template-preview-thumbnail:focus-within,
105
+ .agent-template-preview-thumbnail[data-selected] {
106
+ outline: 2px solid hsl(var(--ring));
107
+ outline-offset: 2px;
108
+ }
109
+
110
+ .agent-template-preview-content {
111
+ display: grid;
112
+ grid-template-rows: minmax(0, 1fr);
113
+ min-width: 0;
114
+ min-height: 0;
115
+ overflow: auto;
116
+ }
117
+
118
+ @media (min-width: 48rem) {
119
+ .agent-template-preview-viewer[data-has-rail] {
120
+ grid-template-columns: 12rem minmax(0, 1fr);
121
+ grid-template-rows: minmax(0, 1fr);
122
+ }
123
+
124
+ .agent-template-preview-rail {
125
+ display: block;
126
+ }
127
+
128
+ .agent-template-preview-thumbnail + .agent-template-preview-thumbnail {
129
+ margin-block-start: 0.75rem;
130
+ }
131
+ }
132
+
133
+ .agent-template-library-card:focus-within {
134
+ outline: 2px solid hsl(var(--ring));
135
+ outline-offset: 2px;
136
+ }
137
+
138
+ .agent-template-library-card[data-selected] {
139
+ outline: 2px solid hsl(var(--ring));
140
+ outline-offset: 2px;
141
+ }
142
+
143
+ @media (min-width: 40rem) {
144
+ .agent-template-library-grid {
145
+ grid-template-columns: repeat(2, minmax(0, 1fr));
146
+ }
147
+ }
148
+
149
+ @media (min-width: 64rem) {
150
+ .agent-template-library-grid {
151
+ grid-template-columns: repeat(3, minmax(0, 1fr));
152
+ }
153
+ }
154
+
155
+ @media (min-width: 80rem) {
156
+ .agent-template-library-grid {
157
+ grid-template-columns: repeat(4, minmax(0, 1fr));
158
+ }
159
+ }