@adonis-agora/agent 0.72.0 → 0.74.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/configure.d.ts +5 -4
  3. package/dist/configure.d.ts.map +1 -1
  4. package/dist/configure.js +8 -4
  5. package/dist/configure.js.map +1 -1
  6. package/dist/providers/agent_provider.d.ts.map +1 -1
  7. package/dist/providers/agent_provider.js +15 -1
  8. package/dist/providers/agent_provider.js.map +1 -1
  9. package/dist/src/a2ui/adapter.d.ts.map +1 -1
  10. package/dist/src/a2ui/adapter.js +1 -0
  11. package/dist/src/a2ui/adapter.js.map +1 -1
  12. package/dist/src/a2ui/core.d.ts.map +1 -1
  13. package/dist/src/a2ui/core.js +11 -1
  14. package/dist/src/a2ui/core.js.map +1 -1
  15. package/dist/src/action-proposal-executor.d.ts.map +1 -1
  16. package/dist/src/action-proposal-executor.js +3 -0
  17. package/dist/src/action-proposal-executor.js.map +1 -1
  18. package/dist/src/ag-ui/adapter.d.ts.map +1 -1
  19. package/dist/src/ag-ui/adapter.js +2 -0
  20. package/dist/src/ag-ui/adapter.js.map +1 -1
  21. package/dist/src/ag-ui/core/encoder.d.ts.map +1 -1
  22. package/dist/src/ag-ui/core/encoder.js +3 -0
  23. package/dist/src/ag-ui/core/encoder.js.map +1 -1
  24. package/dist/src/agent-deps-factory.d.ts +3 -1
  25. package/dist/src/agent-deps-factory.d.ts.map +1 -1
  26. package/dist/src/agent-deps-factory.js +3 -0
  27. package/dist/src/agent-deps-factory.js.map +1 -1
  28. package/dist/src/agent-deps.d.ts +3 -1
  29. package/dist/src/agent-deps.d.ts.map +1 -1
  30. package/dist/src/agent-deps.js.map +1 -1
  31. package/dist/src/agent-loop.d.ts +7 -1
  32. package/dist/src/agent-loop.d.ts.map +1 -1
  33. package/dist/src/agent-loop.js +52 -2
  34. package/dist/src/agent-loop.js.map +1 -1
  35. package/dist/src/agent-service.d.ts +6 -0
  36. package/dist/src/agent-service.d.ts.map +1 -1
  37. package/dist/src/agent-service.js +5 -3
  38. package/dist/src/agent-service.js.map +1 -1
  39. package/dist/src/channels/adapters/evolution_api.d.ts.map +1 -1
  40. package/dist/src/channels/adapters/evolution_api.js +35 -0
  41. package/dist/src/channels/adapters/evolution_api.js.map +1 -1
  42. package/dist/src/channels/adapters/telegram.d.ts.map +1 -1
  43. package/dist/src/channels/adapters/telegram.js +25 -7
  44. package/dist/src/channels/adapters/telegram.js.map +1 -1
  45. package/dist/src/channels/adapters/whatsapp_cloud.d.ts.map +1 -1
  46. package/dist/src/channels/adapters/whatsapp_cloud.js +44 -0
  47. package/dist/src/channels/adapters/whatsapp_cloud.js.map +1 -1
  48. package/dist/src/channels/handler.d.ts +29 -1
  49. package/dist/src/channels/handler.d.ts.map +1 -1
  50. package/dist/src/channels/handler.js +231 -9
  51. package/dist/src/channels/handler.js.map +1 -1
  52. package/dist/src/channels/index.d.ts +2 -2
  53. package/dist/src/channels/index.d.ts.map +1 -1
  54. package/dist/src/channels/index.js.map +1 -1
  55. package/dist/src/channels/types.d.ts +40 -0
  56. package/dist/src/channels/types.d.ts.map +1 -1
  57. package/dist/src/genui/catalog.d.ts +12 -1
  58. package/dist/src/genui/catalog.d.ts.map +1 -1
  59. package/dist/src/genui/catalog.js +18 -1
  60. package/dist/src/genui/catalog.js.map +1 -1
  61. package/dist/src/genui/channels.d.ts +252 -0
  62. package/dist/src/genui/channels.d.ts.map +1 -0
  63. package/dist/src/genui/channels.js +516 -0
  64. package/dist/src/genui/channels.js.map +1 -0
  65. package/dist/src/genui/chart-image.d.ts +46 -0
  66. package/dist/src/genui/chart-image.d.ts.map +1 -0
  67. package/dist/src/genui/chart-image.js +155 -0
  68. package/dist/src/genui/chart-image.js.map +1 -0
  69. package/dist/src/genui/factory.d.ts +23 -1
  70. package/dist/src/genui/factory.d.ts.map +1 -1
  71. package/dist/src/genui/factory.js +13 -1
  72. package/dist/src/genui/factory.js.map +1 -1
  73. package/dist/src/genui/index.d.ts.map +1 -1
  74. package/dist/src/genui/index.js +64 -3
  75. package/dist/src/genui/index.js.map +1 -1
  76. package/dist/src/genui/kit/adonis.d.ts +4 -0
  77. package/dist/src/genui/kit/adonis.d.ts.map +1 -0
  78. package/dist/src/genui/kit/adonis.js +38 -0
  79. package/dist/src/genui/kit/adonis.js.map +1 -0
  80. package/dist/src/genui/kit/bundle.d.ts +25 -0
  81. package/dist/src/genui/kit/bundle.d.ts.map +1 -0
  82. package/dist/src/genui/kit/bundle.js +144 -0
  83. package/dist/src/genui/kit/bundle.js.map +1 -0
  84. package/dist/src/genui/kit/discover.d.ts +41 -0
  85. package/dist/src/genui/kit/discover.d.ts.map +1 -0
  86. package/dist/src/genui/kit/discover.js +100 -0
  87. package/dist/src/genui/kit/discover.js.map +1 -0
  88. package/dist/src/genui/kit/docs.d.ts +22 -0
  89. package/dist/src/genui/kit/docs.d.ts.map +1 -0
  90. package/dist/src/genui/kit/docs.js +237 -0
  91. package/dist/src/genui/kit/docs.js.map +1 -0
  92. package/dist/src/genui/kit/files.d.ts +27 -0
  93. package/dist/src/genui/kit/files.d.ts.map +1 -0
  94. package/dist/src/genui/kit/files.js +126 -0
  95. package/dist/src/genui/kit/files.js.map +1 -0
  96. package/dist/src/genui/kit/index.d.ts +12 -0
  97. package/dist/src/genui/kit/index.d.ts.map +1 -0
  98. package/dist/src/genui/kit/index.js +12 -0
  99. package/dist/src/genui/kit/index.js.map +1 -0
  100. package/dist/src/genui/kit/plugin.d.ts +52 -0
  101. package/dist/src/genui/kit/plugin.d.ts.map +1 -0
  102. package/dist/src/genui/kit/plugin.js +314 -0
  103. package/dist/src/genui/kit/plugin.js.map +1 -0
  104. package/dist/src/genui/kit/write.d.ts +14 -0
  105. package/dist/src/genui/kit/write.d.ts.map +1 -0
  106. package/dist/src/genui/kit/write.js +39 -0
  107. package/dist/src/genui/kit/write.js.map +1 -0
  108. package/dist/src/genui/public.d.ts +7 -3
  109. package/dist/src/genui/public.d.ts.map +1 -1
  110. package/dist/src/genui/public.js +5 -1
  111. package/dist/src/genui/public.js.map +1 -1
  112. package/dist/src/genui/sandbox-jsx.d.ts +29 -0
  113. package/dist/src/genui/sandbox-jsx.d.ts.map +1 -0
  114. package/dist/src/genui/sandbox-jsx.js +656 -0
  115. package/dist/src/genui/sandbox-jsx.js.map +1 -0
  116. package/dist/src/genui/sandbox-kit.d.ts +88 -0
  117. package/dist/src/genui/sandbox-kit.d.ts.map +1 -0
  118. package/dist/src/genui/sandbox-kit.js +89 -0
  119. package/dist/src/genui/sandbox-kit.js.map +1 -0
  120. package/dist/src/genui/sandbox-theme.d.ts +61 -0
  121. package/dist/src/genui/sandbox-theme.d.ts.map +1 -0
  122. package/dist/src/genui/sandbox-theme.js +255 -0
  123. package/dist/src/genui/sandbox-theme.js.map +1 -0
  124. package/dist/src/genui/sandbox.d.ts +73 -2
  125. package/dist/src/genui/sandbox.d.ts.map +1 -1
  126. package/dist/src/genui/sandbox.js +106 -16
  127. package/dist/src/genui/sandbox.js.map +1 -1
  128. package/dist/src/genui/text.d.ts.map +1 -1
  129. package/dist/src/genui/text.js +33 -1
  130. package/dist/src/genui/text.js.map +1 -1
  131. package/dist/src/genui/tools.d.ts +26 -0
  132. package/dist/src/genui/tools.d.ts.map +1 -1
  133. package/dist/src/genui/tools.js +94 -14
  134. package/dist/src/genui/tools.js.map +1 -1
  135. package/dist/src/genui/tree.d.ts +25 -2
  136. package/dist/src/genui/tree.d.ts.map +1 -1
  137. package/dist/src/genui/tree.js +161 -4
  138. package/dist/src/genui/tree.js.map +1 -1
  139. package/dist/src/hooks/genui_kit.d.ts +20 -0
  140. package/dist/src/hooks/genui_kit.d.ts.map +1 -0
  141. package/dist/src/hooks/genui_kit.js +55 -0
  142. package/dist/src/hooks/genui_kit.js.map +1 -0
  143. package/dist/src/index.d.ts +2 -2
  144. package/dist/src/index.d.ts.map +1 -1
  145. package/dist/src/index.js +2 -2
  146. package/dist/src/index.js.map +1 -1
  147. package/dist/src/negotiated-tool-ui.d.ts +27 -0
  148. package/dist/src/negotiated-tool-ui.d.ts.map +1 -1
  149. package/dist/src/negotiated-tool-ui.js +52 -0
  150. package/dist/src/negotiated-tool-ui.js.map +1 -1
  151. package/dist/src/react/core/genui/sandbox-assets.d.ts +32 -0
  152. package/dist/src/react/core/genui/sandbox-assets.d.ts.map +1 -0
  153. package/dist/src/react/core/genui/sandbox-assets.js +174 -0
  154. package/dist/src/react/core/genui/sandbox-assets.js.map +1 -0
  155. package/dist/src/react/core/genui/sandbox.d.ts +9 -0
  156. package/dist/src/react/core/genui/sandbox.d.ts.map +1 -1
  157. package/dist/src/react/core/genui/sandbox.js +119 -19
  158. package/dist/src/react/core/genui/sandbox.js.map +1 -1
  159. package/dist/src/react/core/index.d.ts +1 -1
  160. package/dist/src/react/core/index.d.ts.map +1 -1
  161. package/dist/src/react/core/index.js +1 -1
  162. package/dist/src/react/core/index.js.map +1 -1
  163. package/dist/src/react/core/presentation/phrasing.d.ts +3 -2
  164. package/dist/src/react/core/presentation/phrasing.d.ts.map +1 -1
  165. package/dist/src/react/core/presentation/phrasing.js +4 -27
  166. package/dist/src/react/core/presentation/phrasing.js.map +1 -1
  167. package/dist/src/react/core/presentation/tool-activity.d.ts +8 -0
  168. package/dist/src/react/core/presentation/tool-activity.d.ts.map +1 -1
  169. package/dist/src/react/core/presentation/tool-activity.js +28 -1
  170. package/dist/src/react/core/presentation/tool-activity.js.map +1 -1
  171. package/dist/src/react/core/transcript/model.d.ts +6 -0
  172. package/dist/src/react/core/transcript/model.d.ts.map +1 -1
  173. package/dist/src/react/core/transcript/model.js +6 -1
  174. package/dist/src/react/core/transcript/model.js.map +1 -1
  175. package/dist/src/react/core/transcript/use-chat-transcript.d.ts +5 -0
  176. package/dist/src/react/core/transcript/use-chat-transcript.d.ts.map +1 -1
  177. package/dist/src/react/core/transcript/use-chat-transcript.js +3 -0
  178. package/dist/src/react/core/transcript/use-chat-transcript.js.map +1 -1
  179. package/dist/src/spi/tool.d.ts +7 -0
  180. package/dist/src/spi/tool.d.ts.map +1 -1
  181. package/dist/src/tool-presentation.d.ts +15 -0
  182. package/dist/src/tool-presentation.d.ts.map +1 -1
  183. package/dist/src/tool-presentation.js +48 -0
  184. package/dist/src/tool-presentation.js.map +1 -1
  185. package/dist/src/tool-registry.d.ts.map +1 -1
  186. package/dist/src/tool-registry.js +2 -0
  187. package/dist/src/tool-registry.js.map +1 -1
  188. package/dist/src/types.d.ts +10 -0
  189. package/dist/src/types.d.ts.map +1 -1
  190. package/dist/src/vite/index.d.ts +24 -0
  191. package/dist/src/vite/index.d.ts.map +1 -0
  192. package/dist/src/vite/index.js +29 -0
  193. package/dist/src/vite/index.js.map +1 -0
  194. package/package.json +38 -2
  195. package/skills/agent-setup/SKILL.md +3 -1
  196. package/skills/agent-tools/SKILL.md +5 -3
@@ -0,0 +1,41 @@
1
+ import type { DefineSandboxOptions } from '../sandbox.js';
2
+ import type { SandboxClientConfig, SandboxKitDescriptor } from '../sandbox-kit.js';
3
+ import { type GenuiSandboxKitApi } from './plugin.js';
4
+ export interface SandboxKitDiscoveryOptions {
5
+ /** The app root (relative paths below resolve against it). */
6
+ root: string;
7
+ /** The descriptor the dev plugin (or a docs generator) writes. */
8
+ descriptor?: string;
9
+ /** The production manifest, and the directory its `file`s are relative to. */
10
+ manifest?: {
11
+ file: string;
12
+ outDir: string;
13
+ };
14
+ /** The plugin's live API, when Vite runs in this process (the Adonis dev server). */
15
+ plugin?: () => GenuiSandboxKitApi | undefined;
16
+ /** Read the manifest first (production). Default: `NODE_ENV === 'production'`. */
17
+ production?: boolean;
18
+ /** An explicit kit url (an SPA served from elsewhere), over what is found. */
19
+ kitUrl?: string;
20
+ }
21
+ export interface SandboxKitDiscovery {
22
+ /** What is known now: docs, theme names, asset urls — `null` when nothing was found. */
23
+ descriptor(): SandboxKitDescriptor | null;
24
+ }
25
+ /** Find the kit (re-read when the files change — dev rewrites them). */
26
+ export declare function sandboxKitDiscovery(options: SandboxKitDiscoveryOptions): SandboxKitDiscovery;
27
+ /** The server's sandbox options, resolved against what was discovered. */
28
+ export interface ResolvedSandboxServer {
29
+ /** For `defineSandbox`: the kit's docs and the theme's names read from the discovery each time. */
30
+ define: DefineSandboxOptions;
31
+ /** For `GET <agent>/config` → `genui.sandbox`. */
32
+ client(): SandboxClientConfig;
33
+ }
34
+ /**
35
+ * `sandbox: { kit: true, tailwind: true }` (or `true`) as the definition and the browser need it:
36
+ * docs and theme names from the discovery, asset urls for the client. A kit or Tailwind asked for
37
+ * but not found is left out of what the browser is told (and the model is still told of a kit only
38
+ * when docs exist), so a missing build degrades to the plain sandbox.
39
+ */
40
+ export declare function resolveSandboxServer(sandbox: true | DefineSandboxOptions, discovery: SandboxKitDiscovery): ResolvedSandboxServer;
41
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/discover.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAkB,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,KAAK,kBAAkB,EAA6B,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,0BAA0B;IACzC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,kBAAkB,GAAG,SAAS,CAAC;IAC9C,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,wFAAwF;IACxF,UAAU,IAAI,oBAAoB,GAAG,IAAI,CAAC;CAC3C;AAmBD,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,mBAAmB,CAoC5F;AAED,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,mGAAmG;IACnG,MAAM,EAAE,oBAAoB,CAAC;IAC7B,kDAAkD;IAClD,MAAM,IAAI,mBAAmB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,GAAG,oBAAoB,EACpC,SAAS,EAAE,mBAAmB,GAC7B,qBAAqB,CA0BvB"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Finding the sandbox kit at runtime, the way an app's `@vite()` finds its assets: the Vite plugin
3
+ * running in this process (dev), the descriptor it wrote (dev, Vite in another process), or the
4
+ * production manifest (`genui-sandbox-kit.json` and the assets it names). And turning what is found
5
+ * into what the sandbox definition tells the model and what `GET <agent>/config` tells the browser.
6
+ */
7
+ import { existsSync, readFileSync, statSync } from 'node:fs';
8
+ import { join, resolve } from 'node:path';
9
+ import { SANDBOX_KIT_MANIFEST_KEYS } from './plugin.js';
10
+ function readJson(path) {
11
+ try {
12
+ return JSON.parse(readFileSync(path, 'utf8'));
13
+ }
14
+ catch {
15
+ return undefined;
16
+ }
17
+ }
18
+ function isDescriptor(value) {
19
+ return (typeof value === 'object' &&
20
+ value !== null &&
21
+ value.version === 1 &&
22
+ Array.isArray(value.components));
23
+ }
24
+ /** Find the kit (re-read when the files change — dev rewrites them). */
25
+ export function sandboxKitDiscovery(options) {
26
+ const production = options.production ?? process.env.NODE_ENV === 'production';
27
+ const cache = new Map();
28
+ const cached = (path) => {
29
+ if (!existsSync(path))
30
+ return undefined;
31
+ const mtime = statSync(path).mtimeMs;
32
+ const hit = cache.get(path);
33
+ if (hit !== undefined && hit.mtime === mtime)
34
+ return hit.value;
35
+ const value = readJson(path);
36
+ cache.set(path, { mtime, value });
37
+ return value;
38
+ };
39
+ const fromManifest = () => {
40
+ if (options.manifest === undefined)
41
+ return null;
42
+ const manifest = cached(resolve(options.root, options.manifest.file));
43
+ const file = manifest?.[SANDBOX_KIT_MANIFEST_KEYS.descriptor]?.file;
44
+ if (file === undefined)
45
+ return null;
46
+ const value = cached(join(resolve(options.root, options.manifest.outDir), file));
47
+ return isDescriptor(value) ? value : null;
48
+ };
49
+ const fromDev = () => {
50
+ const live = options.plugin?.()?.descriptor();
51
+ if (live !== undefined && live !== null)
52
+ return live;
53
+ if (options.descriptor === undefined)
54
+ return null;
55
+ const value = cached(resolve(options.root, options.descriptor));
56
+ return isDescriptor(value) ? value : null;
57
+ };
58
+ return {
59
+ descriptor() {
60
+ const found = production ? (fromManifest() ?? fromDev()) : (fromDev() ?? fromManifest());
61
+ if (found === null || options.kitUrl === undefined)
62
+ return found;
63
+ return { ...found, kit: { url: options.kitUrl } };
64
+ },
65
+ };
66
+ }
67
+ /**
68
+ * `sandbox: { kit: true, tailwind: true }` (or `true`) as the definition and the browser need it:
69
+ * docs and theme names from the discovery, asset urls for the client. A kit or Tailwind asked for
70
+ * but not found is left out of what the browser is told (and the model is still told of a kit only
71
+ * when docs exist), so a missing build degrades to the plain sandbox.
72
+ */
73
+ export function resolveSandboxServer(sandbox, discovery) {
74
+ const given = sandbox === true ? {} : sandbox;
75
+ const kitAsked = given.kit === true;
76
+ const docs = () => {
77
+ const found = discovery.descriptor();
78
+ return found === null ? undefined : found;
79
+ };
80
+ const themeOn = given.theme !== false;
81
+ const define = {
82
+ ...given,
83
+ ...(kitAsked ? { kit: docs } : {}),
84
+ ...(themeOn && typeof given.theme !== 'object'
85
+ ? { theme: { vars: () => docs()?.theme?.vars } }
86
+ : {}),
87
+ };
88
+ return {
89
+ define,
90
+ client() {
91
+ const found = discovery.descriptor();
92
+ return {
93
+ theme: themeOn,
94
+ ...(given.tailwind === true && found?.tailwind ? { tailwind: found.tailwind } : {}),
95
+ ...(given.kit !== undefined && given.kit !== false && found?.kit ? { kit: found.kit } : {}),
96
+ };
97
+ },
98
+ };
99
+ }
100
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../../src/genui/kit/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { SandboxKitComponentDoc } from '../sandbox-kit.js';
2
+ import { type SandboxKitFiles, type SandboxKitSourceOptions } from './files.js';
3
+ export interface GenerateSandboxKitDocsOptions extends SandboxKitSourceOptions {
4
+ /** The project root. Default `process.cwd()`. */
5
+ root?: string;
6
+ /** The tsconfig the kit compiles under. Default: the nearest to the kit's first file. */
7
+ tsconfig?: string;
8
+ /** Already resolved files (skips `entry` / `include`). */
9
+ files?: SandboxKitFiles;
10
+ /**
11
+ * The TypeScript module to read the types with. Default: the project's own `typescript` — one with
12
+ * the JavaScript compiler API (5.x/6.x; TypeScript 7's native compiler has none).
13
+ */
14
+ typescript?: unknown;
15
+ }
16
+ /**
17
+ * The docs of every component the kit exports, in declaration order. A component is an export named
18
+ * in PascalCase whose type is callable with one props argument and returns JSX (function components,
19
+ * `forwardRef`, `memo`).
20
+ */
21
+ export declare function generateSandboxKitDocs(options?: GenerateSandboxKitDocsOptions): Promise<SandboxKitComponentDoc[]>;
22
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/docs.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,sBAAsB,EAAqB,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,6BAA8B,SAAQ,uBAAuB;IAC5E,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAkID;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAoHnC"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * The kit's docs, generated from its TypeScript types with the compiler API: each exported
3
+ * component, its props (name, type, required, JSDoc description, `@default`), and the element whose
4
+ * native attributes it also takes — so the model writes the props the components really have.
5
+ *
6
+ * `typescript` is an optional peer dependency (every TypeScript project has it).
7
+ */
8
+ import { existsSync } from 'node:fs';
9
+ import { dirname, resolve } from 'node:path';
10
+ import { resolveSandboxKitFiles, } from './files.js';
11
+ /** React's own DOM props a component inherits — listed only when they say something. */
12
+ const KEPT_DOM_PROPS = new Set([
13
+ 'children',
14
+ 'className',
15
+ 'disabled',
16
+ 'value',
17
+ 'defaultValue',
18
+ 'onChange',
19
+ 'onClick',
20
+ 'placeholder',
21
+ 'type',
22
+ 'checked',
23
+ 'defaultChecked',
24
+ 'min',
25
+ 'max',
26
+ 'step',
27
+ 'href',
28
+ ]);
29
+ const ELEMENT_OF_INTERFACE = {
30
+ ButtonHTMLAttributes: 'button',
31
+ InputHTMLAttributes: 'input',
32
+ AnchorHTMLAttributes: 'a',
33
+ TextareaHTMLAttributes: 'textarea',
34
+ SelectHTMLAttributes: 'select',
35
+ LabelHTMLAttributes: 'label',
36
+ ImgHTMLAttributes: 'img',
37
+ FormHTMLAttributes: 'form',
38
+ TableHTMLAttributes: 'table',
39
+ TdHTMLAttributes: 'td',
40
+ ThHTMLAttributes: 'th',
41
+ OptionHTMLAttributes: 'option',
42
+ };
43
+ const ELEMENT_OF_CLASS = {
44
+ Div: 'div',
45
+ Span: 'span',
46
+ Button: 'button',
47
+ Input: 'input',
48
+ Anchor: 'a',
49
+ Paragraph: 'p',
50
+ Heading: 'h3',
51
+ TextArea: 'textarea',
52
+ Select: 'select',
53
+ Label: 'label',
54
+ Image: 'img',
55
+ Form: 'form',
56
+ Table: 'table',
57
+ TableRow: 'tr',
58
+ TableCell: 'td',
59
+ TableSection: 'tbody',
60
+ UList: 'ul',
61
+ OList: 'ol',
62
+ LI: 'li',
63
+ };
64
+ function hasCompilerApi(mod) {
65
+ return typeof mod?.createProgram === 'function';
66
+ }
67
+ async function loadTypescript(root, given) {
68
+ const unwrap = (mod) => mod.default ?? mod;
69
+ if (given !== undefined) {
70
+ const mod = unwrap(given);
71
+ if (hasCompilerApi(mod))
72
+ return mod;
73
+ throw new TypeError('genui: `typescript` must be the TypeScript module (with createProgram)');
74
+ }
75
+ let found;
76
+ try {
77
+ const { createRequire } = await import('node:module');
78
+ // The app's own TypeScript: the version its code is written for.
79
+ found = unwrap(await import(createRequire(resolve(root, 'package.json')).resolve('typescript')));
80
+ }
81
+ catch {
82
+ found = undefined;
83
+ }
84
+ if (hasCompilerApi(found))
85
+ return found;
86
+ throw new Error(found === undefined
87
+ ? 'genui: generating the sandbox kit docs needs `typescript` (npm i -D typescript)'
88
+ : "genui: the project's `typescript` has no JavaScript compiler API (TypeScript 7's native compiler) — add typescript@5 for the kit docs (npm i -D typescript5@npm:typescript@5 and pass `typescript: await import('typescript5')`)");
89
+ }
90
+ function compilerOptionsFor(ts, files, tsconfig, root) {
91
+ const defaults = {
92
+ jsx: ts.JsxEmit.ReactJSX,
93
+ allowJs: true,
94
+ strict: true,
95
+ target: ts.ScriptTarget.ES2022,
96
+ module: ts.ModuleKind.ESNext,
97
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
98
+ skipLibCheck: true,
99
+ noEmit: true,
100
+ esModuleInterop: true,
101
+ };
102
+ const start = dirname(files.files[0] ?? resolve(root, 'index.ts'));
103
+ const path = tsconfig !== undefined
104
+ ? resolve(root, tsconfig)
105
+ : ts.findConfigFile(start, ts.sys.fileExists, 'tsconfig.json');
106
+ if (path === undefined || !existsSync(path))
107
+ return defaults;
108
+ const read = ts.readConfigFile(path, ts.sys.readFile);
109
+ if (read.error !== undefined)
110
+ return defaults;
111
+ const parsed = ts.parseJsonConfigFileContent(read.config, ts.sys, dirname(path));
112
+ return {
113
+ ...parsed.options,
114
+ noEmit: true,
115
+ allowJs: true,
116
+ skipLibCheck: true,
117
+ jsx: parsed.options.jsx ?? ts.JsxEmit.ReactJSX,
118
+ };
119
+ }
120
+ const fromReactTypes = (fileName) => /[\\/]node_modules[\\/](?:\.pnpm[\\/][^\\/]+[\\/]node_modules[\\/])?(?:@types[\\/]react|react)[\\/]/.test(fileName);
121
+ /**
122
+ * The docs of every component the kit exports, in declaration order. A component is an export named
123
+ * in PascalCase whose type is callable with one props argument and returns JSX (function components,
124
+ * `forwardRef`, `memo`).
125
+ */
126
+ export async function generateSandboxKitDocs(options = {}) {
127
+ const root = options.root ?? process.cwd();
128
+ const files = options.files ?? resolveSandboxKitFiles(root, options);
129
+ if (files === null || files.files.length === 0)
130
+ return [];
131
+ const ts = await loadTypescript(root, options.typescript);
132
+ const program = ts.createProgram(files.files, compilerOptionsFor(ts, files, options.tsconfig, root));
133
+ const checker = program.getTypeChecker();
134
+ const format = ts.TypeFormatFlags.NoTruncation |
135
+ ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope |
136
+ ts.TypeFormatFlags.WriteArrowStyleSignature;
137
+ const docs = [];
138
+ const seen = new Set();
139
+ for (const file of files.files) {
140
+ const source = program.getSourceFile(file);
141
+ if (source === undefined)
142
+ continue;
143
+ const moduleSymbol = checker.getSymbolAtLocation(source);
144
+ if (moduleSymbol === undefined)
145
+ continue;
146
+ for (const exported of checker.getExportsOfModule(moduleSymbol)) {
147
+ const name = exported.getName();
148
+ if (!/^[A-Z][A-Za-z0-9]*$/.test(name) || seen.has(name))
149
+ continue;
150
+ const symbol = exported.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(exported) : exported;
151
+ const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];
152
+ if (declaration === undefined)
153
+ continue;
154
+ const type = checker.getTypeOfSymbolAtLocation(symbol, declaration);
155
+ const signature = type.getCallSignatures()[0];
156
+ if (signature === undefined)
157
+ continue;
158
+ const returns = checker.typeToString(signature.getReturnType(), undefined, format);
159
+ if (!/Element|ReactNode|ReactElement|JSX|null/.test(returns))
160
+ continue;
161
+ const param = signature.getParameters()[0];
162
+ const propsType = param === undefined ? undefined : checker.getTypeOfSymbolAtLocation(param, declaration);
163
+ const props = [];
164
+ const inheritedFrom = new Map();
165
+ let elementHint;
166
+ for (const prop of propsType === undefined
167
+ ? []
168
+ : checker.getPropertiesOfType(checker.getApparentType(propsType))) {
169
+ const propName = prop.getName();
170
+ if (propName === 'ref' || propName === 'key' || propName === 'asChild')
171
+ continue;
172
+ const declarations = prop.getDeclarations() ?? [];
173
+ const propDeclaration = prop.valueDeclaration ?? declarations[0];
174
+ const inherited = declarations.length > 0 &&
175
+ declarations.every((each) => fromReactTypes(each.getSourceFile().fileName));
176
+ if (inherited) {
177
+ for (const each of declarations) {
178
+ const parent = each.parent;
179
+ if (parent !== undefined && ts.isInterfaceDeclaration(parent)) {
180
+ const iface = parent.name.text;
181
+ inheritedFrom.set(iface, (inheritedFrom.get(iface) ?? 0) + 1);
182
+ }
183
+ }
184
+ if (elementHint === undefined && (propName === 'onClick' || propName === 'onChange')) {
185
+ const text = checker.typeToString(checker.getTypeOfSymbolAtLocation(prop, propDeclaration ?? declaration), undefined, format);
186
+ const match = /HTML(\w+?)Element/.exec(text);
187
+ if (match?.[1] !== undefined)
188
+ elementHint = ELEMENT_OF_CLASS[match[1]];
189
+ }
190
+ // Of the element's own attributes, only what a model reaches for: children, className,
191
+ // and what the element's specific interface declares (a button's `type`, an input's
192
+ // `value`/`onChange`…) — never the hundreds every element shares.
193
+ const specific = declarations.some((each) => {
194
+ const parent = each.parent;
195
+ return (parent !== undefined &&
196
+ ts.isInterfaceDeclaration(parent) &&
197
+ ELEMENT_OF_INTERFACE[parent.name.text] !== undefined);
198
+ });
199
+ if (!KEPT_DOM_PROPS.has(propName) ||
200
+ !(specific || propName === 'children' || propName === 'className'))
201
+ continue;
202
+ }
203
+ const optional = (prop.flags & ts.SymbolFlags.Optional) !== 0;
204
+ let propType = checker.getTypeOfSymbolAtLocation(prop, propDeclaration ?? declaration);
205
+ if (optional)
206
+ propType = checker.getNonNullableType(propType);
207
+ let text = checker.typeToString(propType, undefined, format);
208
+ if (propName === 'children')
209
+ text = 'ReactNode';
210
+ const description = ts.displayPartsToString(prop.getDocumentationComment(checker)).trim();
211
+ const defaultTag = prop.getJsDocTags(checker).find((tag) => tag.name === 'default');
212
+ const defaultValue = defaultTag?.text !== undefined ? ts.displayPartsToString(defaultTag.text).trim() : '';
213
+ props.push({
214
+ name: propName,
215
+ type: text,
216
+ required: !optional,
217
+ ...(description !== '' ? { description } : {}),
218
+ ...(defaultValue !== '' ? { default: defaultValue } : {}),
219
+ });
220
+ }
221
+ const specific = [...inheritedFrom.keys()]
222
+ .map((iface) => ELEMENT_OF_INTERFACE[iface])
223
+ .find((element) => element !== undefined);
224
+ const inherits = inheritedFrom.size > 0 ? (specific ?? elementHint ?? 'div') : undefined;
225
+ const description = ts.displayPartsToString(symbol.getDocumentationComment(checker)).trim();
226
+ seen.add(name);
227
+ docs.push({
228
+ name,
229
+ ...(description !== '' ? { description } : {}),
230
+ props: props.slice(0, 40),
231
+ ...(inherits !== undefined ? { inherits } : {}),
232
+ });
233
+ }
234
+ }
235
+ return docs;
236
+ }
237
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../../src/genui/kit/docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface SandboxKitSourceOptions {
2
+ /** A module whose exports are the kit (`resources/js/genui/kit.ts`). */
3
+ entry?: string;
4
+ /** A glob (or several) whose files' exports are the kit (`inertia/components/ui/*.tsx`). */
5
+ include?: string | readonly string[];
6
+ }
7
+ /** Where a shadcn `components.json` puts `ui` by default, per framework layout. */
8
+ export declare const DEFAULT_KIT_DIRS: readonly ['inertia/components/ui', 'resources/js/components/ui', 'src/components/ui', 'app/components/ui', 'components/ui'];
9
+ /** A glob as a regular expression over `/`-separated paths: `**`, `*`, `?`, `{a,b}`. */
10
+ export declare function globToRegExp(glob: string): RegExp;
11
+ /** The files matching `globs` under `root`, sorted, absolute. Test and story files are left out. */
12
+ export declare function globFiles(root: string, globs: string | readonly string[]): string[];
13
+ /** What the kit is made of: an entry, or the files of `include`, or the default `components/ui`. */
14
+ export interface SandboxKitFiles {
15
+ /** The entry module, when the kit has one. */
16
+ entry?: string;
17
+ /** Every file whose exports are kit components (the entry alone, or each matched file). */
18
+ files: string[];
19
+ /** Directories to watch for changes. */
20
+ dirs: string[];
21
+ }
22
+ /**
23
+ * Resolve the kit's files. `null` when there is nothing to build — no `entry`, no file matching
24
+ * `include`, and none of the {@link DEFAULT_KIT_DIRS}.
25
+ */
26
+ export declare function resolveSandboxKitFiles(root: string, options: SandboxKitSourceOptions): SandboxKitFiles | null;
27
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/files.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,YAC3B,uBAAuB,EACvB,4BAA4B,EAC5B,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,CACP,CAAC;AAEX,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4BjD;AAuBD,oGAAoG;AACpG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAsBnF;AAED,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,wCAAwC;IACxC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,uBAAuB,GAC/B,eAAe,GAAG,IAAI,CAmBxB"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Which files make up the app's sandbox kit: an `entry` module (its exports are the kit), or an
3
+ * `include` glob (every matching file's exports are), or — with neither — the first shadcn-style
4
+ * `components/ui` folder the project has.
5
+ */
6
+ import { existsSync, readdirSync, statSync } from 'node:fs';
7
+ import { isAbsolute, join, relative, resolve, sep } from 'node:path';
8
+ /** Where a shadcn `components.json` puts `ui` by default, per framework layout. */
9
+ export const DEFAULT_KIT_DIRS = [
10
+ 'inertia/components/ui',
11
+ 'resources/js/components/ui',
12
+ 'src/components/ui',
13
+ 'app/components/ui',
14
+ 'components/ui',
15
+ ];
16
+ /** A glob as a regular expression over `/`-separated paths: `**`, `*`, `?`, `{a,b}`. */
17
+ export function globToRegExp(glob) {
18
+ let out = '';
19
+ for (let index = 0; index < glob.length; index++) {
20
+ const c = glob[index];
21
+ if (c === '*') {
22
+ if (glob[index + 1] === '*') {
23
+ index++;
24
+ if (glob[index + 1] === '/') {
25
+ index++;
26
+ out += '(?:.*/)?';
27
+ }
28
+ else
29
+ out += '.*';
30
+ }
31
+ else
32
+ out += '[^/]*';
33
+ }
34
+ else if (c === '?')
35
+ out += '[^/]';
36
+ else if (c === '{') {
37
+ const close = glob.indexOf('}', index);
38
+ if (close < 0) {
39
+ out += '\\{';
40
+ continue;
41
+ }
42
+ out += `(?:${glob
43
+ .slice(index + 1, close)
44
+ .split(',')
45
+ .map((part) => part.replace(/[.+^$()|[\]\\]/g, '\\$&').replace(/\*/g, '[^/]*'))
46
+ .join('|')})`;
47
+ index = close;
48
+ }
49
+ else
50
+ out += c.replace(/[.+^$()|[\]\\]/g, '\\$&');
51
+ }
52
+ return new RegExp(`^${out}$`);
53
+ }
54
+ /** The part of a glob before its first wildcard: where to start walking. */
55
+ function globBase(glob) {
56
+ const parts = glob.split('/');
57
+ const base = [];
58
+ for (const part of parts) {
59
+ if (/[*?{]/.test(part))
60
+ break;
61
+ base.push(part);
62
+ }
63
+ return base.join('/');
64
+ }
65
+ function walk(dir, into, depth = 0) {
66
+ if (depth > 12 || !existsSync(dir))
67
+ return;
68
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
69
+ if (entry.name === 'node_modules' || entry.name.startsWith('.'))
70
+ continue;
71
+ const path = join(dir, entry.name);
72
+ if (entry.isDirectory())
73
+ walk(path, into, depth + 1);
74
+ else
75
+ into.push(path);
76
+ }
77
+ }
78
+ /** The files matching `globs` under `root`, sorted, absolute. Test and story files are left out. */
79
+ export function globFiles(root, globs) {
80
+ const list = typeof globs === 'string' ? [globs] : [...globs];
81
+ const found = new Set();
82
+ for (const glob of list) {
83
+ const normalized = glob.replace(/\\/g, '/').replace(/^\.\//, '');
84
+ const base = globBase(normalized);
85
+ const pattern = globToRegExp(normalized);
86
+ const files = [];
87
+ const start = resolve(root, base);
88
+ if (existsSync(start) && statSync(start).isFile())
89
+ files.push(start);
90
+ else
91
+ walk(start, files);
92
+ for (const file of files) {
93
+ const rel = relative(root, file).split(sep).join('/');
94
+ if (pattern.test(rel) &&
95
+ !/\.(test|spec|stories)\.[jt]sx?$/.test(rel) &&
96
+ !rel.endsWith('.d.ts'))
97
+ found.add(file);
98
+ }
99
+ }
100
+ return [...found].sort();
101
+ }
102
+ /**
103
+ * Resolve the kit's files. `null` when there is nothing to build — no `entry`, no file matching
104
+ * `include`, and none of the {@link DEFAULT_KIT_DIRS}.
105
+ */
106
+ export function resolveSandboxKitFiles(root, options) {
107
+ if (options.entry !== undefined) {
108
+ const entry = isAbsolute(options.entry) ? options.entry : resolve(root, options.entry);
109
+ if (!existsSync(entry))
110
+ return null;
111
+ return { entry, files: [entry], dirs: [resolve(entry, '..')] };
112
+ }
113
+ const include = options.include ??
114
+ DEFAULT_KIT_DIRS.filter((dir) => existsSync(resolve(root, dir))).map((dir) => `${dir}/*.{tsx,jsx,ts,js}`)[0];
115
+ if (include === undefined)
116
+ return null;
117
+ const files = globFiles(root, include);
118
+ if (files.length === 0)
119
+ return null;
120
+ const globs = typeof include === 'string' ? [include] : [...include];
121
+ return {
122
+ files,
123
+ dirs: [...new Set(globs.map((glob) => resolve(root, globBase(glob.replace(/\\/g, '/')))))],
124
+ };
125
+ }
126
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../../../src/genui/kit/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `@adonis-agora/agent/genui/kit` — the Node half of the sandbox kit: the files a kit is made of, the
3
+ * docs generated from their types, the bundle, and finding all of it at runtime. The Vite plugin is
4
+ * `@adonis-agora/agent/vite`; the assembler hook `@adonis-agora/agent/hooks/genui_kit`.
5
+ */
6
+ export { adonisSandboxKitDiscovery } from './adonis.js';
7
+ export { type BuildSandboxKitOptions, buildSandboxKitBundle, type SandboxKitBundle, } from './bundle.js';
8
+ export { type ResolvedSandboxServer, resolveSandboxServer, type SandboxKitDiscovery, type SandboxKitDiscoveryOptions, sandboxKitDiscovery, } from './discover.js';
9
+ export { type GenerateSandboxKitDocsOptions, generateSandboxKitDocs } from './docs.js';
10
+ export { DEFAULT_KIT_DIRS, globFiles, globToRegExp, resolveSandboxKitFiles, type SandboxKitFiles, type SandboxKitSourceOptions, } from './files.js';
11
+ export { writeSandboxKitDocs } from './write.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,KAAK,sBAAsB,EAC3B,qBAAqB,EACrB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,qBAAqB,EAC1B,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,uBAAuB,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `@adonis-agora/agent/genui/kit` — the Node half of the sandbox kit: the files a kit is made of, the
3
+ * docs generated from their types, the bundle, and finding all of it at runtime. The Vite plugin is
4
+ * `@adonis-agora/agent/vite`; the assembler hook `@adonis-agora/agent/hooks/genui_kit`.
5
+ */
6
+ export { adonisSandboxKitDiscovery } from './adonis.js';
7
+ export { buildSandboxKitBundle, } from './bundle.js';
8
+ export { resolveSandboxServer, sandboxKitDiscovery, } from './discover.js';
9
+ export { generateSandboxKitDocs } from './docs.js';
10
+ export { DEFAULT_KIT_DIRS, globFiles, globToRegExp, resolveSandboxKitFiles, } from './files.js';
11
+ export { writeSandboxKitDocs } from './write.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/genui/kit/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAEL,qBAAqB,GAEtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,oBAAoB,EAGpB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsC,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,sBAAsB,GAGvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}