@adonis-agora/agent 0.78.0 → 0.79.0

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 (52) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/src/genui/index.d.ts +8 -0
  3. package/dist/src/genui/index.d.ts.map +1 -1
  4. package/dist/src/genui/index.js +13 -3
  5. package/dist/src/genui/index.js.map +1 -1
  6. package/dist/src/genui/kit/adonis.d.ts +20 -2
  7. package/dist/src/genui/kit/adonis.d.ts.map +1 -1
  8. package/dist/src/genui/kit/adonis.js +15 -5
  9. package/dist/src/genui/kit/adonis.js.map +1 -1
  10. package/dist/src/genui/kit/discover.d.ts +15 -1
  11. package/dist/src/genui/kit/discover.d.ts.map +1 -1
  12. package/dist/src/genui/kit/discover.js +19 -4
  13. package/dist/src/genui/kit/discover.js.map +1 -1
  14. package/dist/src/genui/kit/index.d.ts +3 -3
  15. package/dist/src/genui/kit/index.d.ts.map +1 -1
  16. package/dist/src/genui/kit/index.js +2 -2
  17. package/dist/src/genui/kit/index.js.map +1 -1
  18. package/dist/src/genui/kit/plugin.d.ts +26 -0
  19. package/dist/src/genui/kit/plugin.d.ts.map +1 -1
  20. package/dist/src/genui/kit/plugin.js +55 -10
  21. package/dist/src/genui/kit/plugin.js.map +1 -1
  22. package/dist/src/genui/kit/styles.d.ts +27 -0
  23. package/dist/src/genui/kit/styles.d.ts.map +1 -1
  24. package/dist/src/genui/kit/styles.js +29 -1
  25. package/dist/src/genui/kit/styles.js.map +1 -1
  26. package/dist/src/genui/sandbox-kit.d.ts +3 -1
  27. package/dist/src/genui/sandbox-kit.d.ts.map +1 -1
  28. package/dist/src/genui/sandbox-kit.js +1 -1
  29. package/dist/src/genui/sandbox-kit.js.map +1 -1
  30. package/dist/src/genui/sandbox-styles.d.ts +41 -4
  31. package/dist/src/genui/sandbox-styles.d.ts.map +1 -1
  32. package/dist/src/genui/sandbox-styles.js +287 -37
  33. package/dist/src/genui/sandbox-styles.js.map +1 -1
  34. package/dist/src/genui/sandbox.d.ts +44 -0
  35. package/dist/src/genui/sandbox.d.ts.map +1 -1
  36. package/dist/src/genui/sandbox.js +108 -25
  37. package/dist/src/genui/sandbox.js.map +1 -1
  38. package/dist/src/hooks/genui_kit.d.ts +2 -0
  39. package/dist/src/hooks/genui_kit.d.ts.map +1 -1
  40. package/dist/src/hooks/genui_kit.js +2 -1
  41. package/dist/src/hooks/genui_kit.js.map +1 -1
  42. package/dist/src/index.d.ts +1 -1
  43. package/dist/src/index.js +1 -1
  44. package/dist/src/react/core/genui/sandbox-assets.d.ts +1 -0
  45. package/dist/src/react/core/genui/sandbox-assets.d.ts.map +1 -1
  46. package/dist/src/react/core/genui/sandbox-assets.js +8 -7
  47. package/dist/src/react/core/genui/sandbox-assets.js.map +1 -1
  48. package/dist/src/react/core/genui/sandbox.d.ts +7 -0
  49. package/dist/src/react/core/genui/sandbox.d.ts.map +1 -1
  50. package/dist/src/react/core/genui/sandbox.js +35 -4
  51. package/dist/src/react/core/genui/sandbox.js.map +1 -1
  52. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @adonis-agora/agent
2
2
 
3
+ ## 0.79.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#368](https://github.com/DavideCarvalho/adonis-agora-agent/pull/368) [`090c31b`](https://github.com/DavideCarvalho/adonis-agora-agent/commit/090c31b209b7098e760a56a4041db68f641030ff) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - genui sandbox: lighter frames, purged kit styles, overlays that fit, and several kits per app.
8
+
9
+ - **Shared assets (new default).** A page fetches the kit, its styles and the Tailwind runtime once; each sandbox `srcdoc` now carries only placeholders for them, asks its host (`agora:sandbox:load`) and gets their text (`agora:sandbox:assets`), put in inline elements under the same CSP as before (no `blob:`, no network, no `allow-same-origin`). Five Lastro-kit sandboxes went from 5.36 MB of HTML to 0.25 MB, with less browser memory. `createSandboxRenderer({ assets: 'inline' })` keeps the old behaviour; React Native keeps inlining. New: `SandboxDocumentOptions.sharedAssets`, `SANDBOX_MESSAGE.load` / `.assets`, `sandboxSharedAssetsWanted()`.
10
+ - **Purged kit styles.** `genuiSandboxKit({ purge })`, on by default: with Tailwind v4, the utilities layer keeps only what the kit's code names (the frame's runtime generates the rest); Tailwind v3 drops rules naming classes the kit does not use; other CSS drops unused CSS-modules classes. `purge: false` ships everything, `{ safelist }` keeps more. New: `purgeCss()`, `classTokensOf()`, `purgeSandboxKitStyles()`.
11
+ - **Complete class vocabulary.** Non-Tailwind stylesheets are described as patterns (`m{,b,e,s,t,x,y}-{0..5,auto}`) instead of a list capped at 600 names: all of Bootstrap's 2,025 classes, spacing included, in about 10 KB. `extractCssVocabulary` gains `maxChars` (default 12,000); `maxClasses` / `maxPerFamily` now default to no cap.
12
+ - **Overlays grow the frame.** An open dialog, menu or popover (portals, `position: fixed`, `<dialog open>`, `:popover-open`, ARIA roles) counts in the frame's height while it is open, and the frame shrinks back once it closes, so a tall MUI `Dialog` or Radix `Popover` is no longer clipped.
13
+ - **See-through frame page.** The frame's `html`/`body` stay transparent whatever a kit's baseline paints (MUI `CssBaseline`, Bootstrap reboot): no more box of the theme's background beside a narrower card.
14
+ - **Named kits.** `genuiSandboxKit({ name })` builds several kits in one app, each under `/@genui-sandbox-kit/<name>/`, its own descriptor and manifest keys; the server picks one with `kitName` (`sandbox: { kit: true, kitName }`, `defineSandbox({ kitName })`), and named discovery is available for per-request choices.
15
+ - **Kit urls for a hook-only setup.** `genui({ sandboxKit: { kitUrl, cssUrl, tailwindUrl } })` tells the browser where an SPA serves the kit when the assembler hook (`genuiKitHook`) wrote docs without urls — the same options as Nest's `sandboxKit`, which gains `cssUrl` and `tailwindUrl`. `sandboxKitDiscovery` takes all three.
16
+
3
17
  ## 0.78.0
4
18
 
5
19
  ### Minor Changes
@@ -3,6 +3,7 @@
3
3
  * renderers and UI tools. The same local definitions can be imported by browser code.
4
4
  */
5
5
  import { type GenuiFactory } from './factory.js';
6
+ import type { AdonisSandboxKitUrls } from './kit/adonis.js';
6
7
  import { type Catalog, type GenuiCatalogScope, type GenuiToolsOptions } from './public.js';
7
8
  import { type DefineSandboxOptions } from './sandbox.js';
8
9
  export { AgentGenui, type GenuiFactory, type GenuiFactoryContext, type GenuiSetup, } from './factory.js';
@@ -34,6 +35,13 @@ export interface GenuiOptions extends Omit<GenuiToolsOptions, 'resolveCatalog'>
34
35
  * catalog file) so the renderer enforces the same policy.
35
36
  */
36
37
  sandbox?: boolean | DefineSandboxOptions;
38
+ /**
39
+ * Where the kit's assets are when this process cannot find them through Vite: a separate SPA
40
+ * that builds them with `genuiSandboxKit()` and serves them itself, while the assembler hook
41
+ * (`genuiKitHook`) writes the docs here. `{ kitUrl: '/spa/assets/genui-sandbox-kit.js', cssUrl,
42
+ * tailwindUrl }` — urls the browser can fetch (same origin, or CORS-enabled).
43
+ */
44
+ sandboxKit?: AdonisSandboxKitUrls;
37
45
  }
38
46
  /**
39
47
  * Generative UI for `config/agent.ts`:
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/genui/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,cAAc,CAAC;AAE3E,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC;AACtB,cAAc,aAAa,CAAC;AAE5B;;;;GAIG;AACH,8BAAsB,oBAAoB;IACxC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE;AAED,KAAK,cAAc,GACf,oBAAoB,GACpB,CAAC,QAAQ,MACP,GAAG,IAAI,EAAE,KAAK,EAAE,KACb,oBAAoB,CAAC,GAC1B,CAAC,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/D,iGAAiG;AACjG,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAC7E,yGAAyG;IACzG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;CAC1C;AAoCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,YAAY,CAmE9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/genui/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC;AACtB,cAAc,aAAa,CAAC;AAE5B;;;;GAIG;AACH,8BAAsB,oBAAoB;IACxC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE;AAED,KAAK,cAAc,GACf,oBAAoB,GACpB,CAAC,QAAQ,MACP,GAAG,IAAI,EAAE,KAAK,EAAE,KACb,oBAAoB,CAAC,GAC1B,CAAC,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/D,iGAAiG;AACjG,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAC7E,yGAAyG;IACzG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;IACzC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAsCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,YAAY,CAkF9D"}
@@ -20,6 +20,8 @@ function mergeSandboxClients(clients) {
20
20
  for (const client of clients) {
21
21
  const one = client();
22
22
  merged.theme ||= one.theme;
23
+ if (one.name !== undefined && merged.kit === undefined && one.kit !== undefined)
24
+ merged.name = one.name;
23
25
  if (one.kit !== undefined)
24
26
  merged.kit ??= one.kit;
25
27
  if (one.css !== undefined)
@@ -61,12 +63,12 @@ async function resolveCatalogFn(resolver, ctx) {
61
63
  */
62
64
  export function genui(options = {}) {
63
65
  return async (ctx) => {
64
- const { catalog: given, resolver, sandbox: asked, channels: askedChannels, ...rest } = options;
66
+ const { catalog: given, resolver, sandbox: asked, channels: askedChannels, sandboxKit: _urls, ...rest } = options;
65
67
  assertGenuiChannels(askedChannels);
66
68
  const base = given ?? defineCatalog([]);
67
69
  // A sandbox's kit (styles, components, wrapper) and theme names are found through the app's Vite setup.
68
70
  const clients = [];
69
- let discovery;
71
+ const discoveries = new Map();
70
72
  const resolveSandbox = async (value) => {
71
73
  if (value === undefined || value === false)
72
74
  return value;
@@ -75,7 +77,15 @@ export function genui(options = {}) {
75
77
  import('./kit/adonis.js'),
76
78
  import('./kit/discover.js'),
77
79
  ]);
78
- discovery ??= await adonisSandboxKitDiscovery(ctx.app);
80
+ const kitName = value === true ? undefined : value.kitName;
81
+ let discovery = discoveries.get(kitName ?? '');
82
+ if (discovery === undefined) {
83
+ discovery = await adonisSandboxKitDiscovery(ctx.app, {
84
+ ...(kitName !== undefined ? { name: kitName } : {}),
85
+ ...(options.sandboxKit ?? {}),
86
+ });
87
+ discoveries.set(kitName ?? '', discovery);
88
+ }
79
89
  const resolved = resolveSandboxServer(value, discovery);
80
90
  clients.push(resolved.client);
81
91
  return resolved.define;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/genui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/genui/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,22 @@
1
1
  import { type SandboxKitDiscovery } from './discover.js';
2
- /** Find the kit through the app's Vite setup. `app` is the Adonis application. */
3
- export declare function adonisSandboxKitDiscovery(app: unknown): Promise<SandboxKitDiscovery>;
2
+ /**
3
+ * Where the kit's assets are when this process cannot find them — an SPA built and served by its own
4
+ * Vite, with the assembler hook (`genuiKitHook`) writing the docs here. Same names as Nest's
5
+ * `sandboxKit` options.
6
+ */
7
+ export interface AdonisSandboxKitUrls {
8
+ /** The kit bundle (React, the components, the wrapper): what JSX views draw with. */
9
+ kitUrl?: string;
10
+ /** The compiled styles. */
11
+ cssUrl?: string;
12
+ /** The Tailwind browser runtime (`@tailwindcss/browser`), when the styles use Tailwind. */
13
+ tailwindUrl?: string;
14
+ }
15
+ /**
16
+ * Find the kit through the app's Vite setup. `app` is the Adonis application; `name`, a named kit's
17
+ * (`genuiSandboxKit({ name })`).
18
+ */
19
+ export declare function adonisSandboxKitDiscovery(app: unknown, options?: {
20
+ name?: string;
21
+ } & AdonisSandboxKitUrls): Promise<SandboxKitDiscovery>;
4
22
  //# sourceMappingURL=adonis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adonis.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/adonis.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,eAAe,CAAC;AAc9E,kFAAkF;AAClF,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6B1F"}
1
+ {"version":3,"file":"adonis.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/adonis.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,eAAe,CAAC;AAG9E;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,oBAAyB,GACrD,OAAO,CAAC,mBAAmB,CAAC,CAsC9B"}
@@ -6,8 +6,12 @@
6
6
  import { fileURLToPath } from 'node:url';
7
7
  import { ADONIS_SANDBOX_KIT_DESCRIPTOR } from '../../vite/index.js';
8
8
  import { sandboxKitDiscovery } from './discover.js';
9
- /** Find the kit through the app's Vite setup. `app` is the Adonis application. */
10
- export async function adonisSandboxKitDiscovery(app) {
9
+ import { sandboxKitDescriptorPath } from './plugin.js';
10
+ /**
11
+ * Find the kit through the app's Vite setup. `app` is the Adonis application; `name`, a named kit's
12
+ * (`genuiSandboxKit({ name })`).
13
+ */
14
+ export async function adonisSandboxKitDiscovery(app, options = {}) {
11
15
  const adonis = app;
12
16
  const root = adonis === undefined
13
17
  ? process.cwd()
@@ -25,14 +29,20 @@ export async function adonisSandboxKitDiscovery(app) {
25
29
  const buildDirectory = config.buildDirectory ?? 'public/assets';
26
30
  return sandboxKitDiscovery({
27
31
  root,
28
- descriptor: ADONIS_SANDBOX_KIT_DESCRIPTOR,
32
+ ...(options.name !== undefined ? { name: options.name } : {}),
33
+ descriptor: sandboxKitDescriptorPath(ADONIS_SANDBOX_KIT_DESCRIPTOR, options.name),
29
34
  manifest: {
30
35
  file: config.manifestFile ?? `${buildDirectory}/.vite/manifest.json`,
31
36
  outDir: buildDirectory,
32
37
  },
33
- plugin: () => vite?.getDevServer?.()?.config.plugins.find((plugin) => plugin.name === 'genui-sandbox-kit')
34
- ?.api,
38
+ plugin: () => vite
39
+ ?.getDevServer?.()
40
+ ?.config.plugins.find((plugin) => plugin.name === 'genui-sandbox-kit' &&
41
+ plugin.api?.kitName === options.name)?.api,
35
42
  ...(adonis?.inProduction !== undefined ? { production: adonis.inProduction } : {}),
43
+ ...(options.kitUrl !== undefined ? { kitUrl: options.kitUrl } : {}),
44
+ ...(options.cssUrl !== undefined ? { cssUrl: options.cssUrl } : {}),
45
+ ...(options.tailwindUrl !== undefined ? { tailwindUrl: options.tailwindUrl } : {}),
36
46
  });
37
47
  }
38
48
  //# sourceMappingURL=adonis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adonis.js","sourceRoot":"","sources":["../../../../src/genui/kit/adonis.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAA4B,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAc9E,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAAY;IAC1D,MAAM,MAAM,GAAG,GAAgC,CAAC;IAChD,MAAM,IAAI,GACR,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAiC,CAAC;IACtC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAgC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GACV,MAAM,EAAE,MAAM,CAAC,GAAG,CAAqD,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3F,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC;IAChE,OAAO,mBAAmB,CAAC;QACzB,IAAI;QACJ,UAAU,EAAE,6BAA6B;QACzC,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC,YAAY,IAAI,GAAG,cAAc,sBAAsB;YACpE,MAAM,EAAE,cAAc;SACvB;QACD,MAAM,EAAE,GAAG,EAAE,CACX,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC;YAC1F,EAAE,GAAqC;QAC3C,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"adonis.js","sourceRoot":"","sources":["../../../../src/genui/kit/adonis.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAA4B,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAA2B,wBAAwB,EAAE,MAAM,aAAa,CAAC;AA2BhF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAY,EACZ,OAAO,GAA6C,EAAE;IAEtD,MAAM,MAAM,GAAG,GAAgC,CAAC;IAChD,MAAM,IAAI,GACR,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAiC,CAAC;IACtC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAgC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GACV,MAAM,EAAE,MAAM,CAAC,GAAG,CAAqD,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3F,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC;IAChE,OAAO,mBAAmB,CAAC;QACzB,IAAI;QACJ,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,UAAU,EAAE,wBAAwB,CAAC,6BAA6B,EAAE,OAAO,CAAC,IAAI,CAAC;QACjF,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC,YAAY,IAAI,GAAG,cAAc,sBAAsB;YACpE,MAAM,EAAE,cAAc;SACvB;QACD,MAAM,EAAE,GAAG,EAAE,CACX,IAAI;YACF,EAAE,YAAY,EAAE,EAAE;YAClB,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CACnB,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,IAAI,KAAK,mBAAmB;YAClC,MAAM,CAAC,GAAsC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAC3E,EAAE,GAAqC;QAC5C,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC,CAAC;AACL,CAAC"}
@@ -4,6 +4,11 @@ import { type GenuiSandboxKitApi } from './plugin.js';
4
4
  export interface SandboxKitDiscoveryOptions {
5
5
  /** The app root (relative paths below resolve against it). */
6
6
  root: string;
7
+ /**
8
+ * The kit's name (`genuiSandboxKit({ name })`): its manifest keys. `descriptor` and `plugin` are
9
+ * given for that kit already. Unnamed: the app's one kit.
10
+ */
11
+ name?: string;
7
12
  /** The descriptor the dev plugin (or a docs generator) writes. */
8
13
  descriptor?: string;
9
14
  /** The production manifest, and the directory its `file`s are relative to. */
@@ -18,10 +23,19 @@ export interface SandboxKitDiscoveryOptions {
18
23
  * descriptor and the build's descriptor was written last. Default: `NODE_ENV === 'production'`.
19
24
  */
20
25
  production?: boolean;
21
- /** An explicit kit url (an SPA served from elsewhere), over what is found. */
26
+ /**
27
+ * Explicit asset urls, over what is found: for an app whose Vite does not run in the server
28
+ * process (an SPA built and served elsewhere), where the descriptor the assembler hook / codegen
29
+ * writes has docs but no urls. `kitUrl`: the kit bundle (React, the components); `cssUrl`: the
30
+ * compiled styles; `tailwindUrl`: the Tailwind browser runtime.
31
+ */
22
32
  kitUrl?: string;
33
+ cssUrl?: string;
34
+ tailwindUrl?: string;
23
35
  }
24
36
  export interface SandboxKitDiscovery {
37
+ /** The kit's name, for a named kit. */
38
+ readonly name?: string;
25
39
  /** What is known now: docs, theme names, asset urls — `null` when nothing was found. */
26
40
  descriptor(): SandboxKitDescriptor | null;
27
41
  }
@@ -1 +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;;;OAGG;IACH,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;AAoBD,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,mBAAmB,CAyD5F;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,CA4BvB"}
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,EAA0B,MAAM,aAAa,CAAC;AAE9E,MAAM,WAAW,0BAA0B;IACzC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,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;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,UAAU,IAAI,oBAAoB,GAAG,IAAI,CAAC;CAC3C;AAoBD,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,mBAAmB,CAwE5F;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,CA6BvB"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { existsSync, readFileSync, statSync } from 'node:fs';
8
8
  import { join, resolve } from 'node:path';
9
- import { SANDBOX_KIT_MANIFEST_KEYS } from './plugin.js';
9
+ import { sandboxKitManifestKeys } from './plugin.js';
10
10
  function readJson(path) {
11
11
  try {
12
12
  return JSON.parse(readFileSync(path, 'utf8'));
@@ -50,7 +50,7 @@ export function sandboxKitDiscovery(options) {
50
50
  if (options.manifest === undefined)
51
51
  return null;
52
52
  const manifest = cached(resolve(options.root, options.manifest.file));
53
- const file = manifest?.[SANDBOX_KIT_MANIFEST_KEYS.descriptor]?.file;
53
+ const file = manifest?.[sandboxKitManifestKeys(options.name).descriptor]?.file;
54
54
  if (file === undefined)
55
55
  return null;
56
56
  const path = join(resolve(options.root, options.manifest.outDir), file);
@@ -81,11 +81,25 @@ export function sandboxKitDiscovery(options) {
81
81
  return dev.mtime >= built.mtime ? dev.value : built.value;
82
82
  };
83
83
  return {
84
+ ...(options.name !== undefined ? { name: options.name } : {}),
84
85
  descriptor() {
85
86
  const found = find();
86
- if (found === null || options.kitUrl === undefined)
87
+ if (found === null ||
88
+ (options.kitUrl === undefined &&
89
+ options.cssUrl === undefined &&
90
+ options.tailwindUrl === undefined))
87
91
  return found;
88
- return { ...found, jsx: true, assets: { ...found.assets, kit: { url: options.kitUrl } } };
92
+ const assets = { ...found.assets };
93
+ if (options.kitUrl !== undefined)
94
+ assets.kit = { url: options.kitUrl };
95
+ if (options.cssUrl !== undefined)
96
+ assets.css = { url: options.cssUrl };
97
+ if (options.tailwindUrl !== undefined)
98
+ assets.tailwind = {
99
+ url: options.tailwindUrl,
100
+ ...(found.assets.tailwind?.css !== undefined ? { css: found.assets.tailwind.css } : {}),
101
+ };
102
+ return { ...found, ...(options.kitUrl !== undefined ? { jsx: true } : {}), assets };
89
103
  },
90
104
  };
91
105
  }
@@ -117,6 +131,7 @@ export function resolveSandboxServer(sandbox, discovery) {
117
131
  const assets = kitOn ? discovery.descriptor()?.assets : undefined;
118
132
  return {
119
133
  theme: themeOn,
134
+ ...(assets !== undefined && discovery.name !== undefined ? { name: discovery.name } : {}),
120
135
  ...(assets?.kit ? { kit: assets.kit } : {}),
121
136
  ...(assets?.css ? { css: assets.css } : {}),
122
137
  ...(assets?.tailwind ? { tailwind: assets.tailwind } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../../src/genui/kit/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../../src/genui/kit/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAA2B,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAuC9E,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA+B,CAAC,OAAO,KAAK,CAAC;QAC9C,KAAK,CAAC,OAAO,CAAE,KAAkC,CAAC,UAAU,CAAC;QAC7D,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,CAC3D,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CAAC,OAAmC;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC/E,MAAM,KAAK,GAAG,IAAI,GAAG,EAA6C,CAAC;IACnE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAW,EAAE;QACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE;QACvC,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC,CAAC;IACF,uDAAuD;IACvD,MAAM,YAAY,GAAG,GAA0D,EAAE;QAC/E,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAEvD,CAAC;QACd,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;QAC/E,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC,CAAC;IACF,iEAAiE;IACjE,MAAM,WAAW,GAAG,GAA0D,EAAE;QAC9E,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,GAAgC,EAAE;QAC7C,yDAAyD;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACrD,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,IAAI,UAAU;YAAE,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,EAAE,KAAK,IAAI,IAAI,CAAC;QACpE,8FAA8F;QAC9F,mEAAmE;QACnE,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,GAAG,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC;QAC9E,OAAO,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5D,CAAC,CAAC;IACF,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,UAAU;YACR,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;YACrB,IACE,KAAK,KAAK,IAAI;gBACd,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;oBAC3B,OAAO,CAAC,MAAM,KAAK,SAAS;oBAC5B,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC;gBAEpC,OAAO,KAAK,CAAC;YACf,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACvE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACvE,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;gBACnC,MAAM,CAAC,QAAQ,GAAG;oBAChB,GAAG,EAAE,OAAO,CAAC,WAAW;oBACxB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxF,CAAC;YACJ,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;QACtF,CAAC;KACF,CAAC;AACJ,CAAC;AAUD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAoC,EACpC,SAA8B;IAE9B,MAAM,KAAK,GAAyB,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC;IACpC,MAAM,IAAI,GAAG,GAA+B,EAAE;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;QACrC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;IACtC,MAAM,MAAM,GAAyB;QACnC,GAAG,KAAK;QACR,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;YAC5C,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,OAAO;QACL,MAAM;QACN,MAAM;YACJ,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC;YAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAClE,OAAO;gBACL,KAAK,EAAE,OAAO;gBACd,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -3,12 +3,12 @@
3
3
  * docs generated from their types, the bundle, and finding all of it at runtime. The Vite plugin is
4
4
  * `@adonis-agora/agent/vite`; the assembler hook `@adonis-agora/agent/hooks/genui_kit`.
5
5
  */
6
- export { adonisSandboxKitDiscovery } from './adonis.js';
6
+ export { type AdonisSandboxKitUrls, adonisSandboxKitDiscovery } from './adonis.js';
7
7
  export { type BuildSandboxKitOptions, buildSandboxKitBundle, kitDocsFromBundle, type SandboxKitBundle, } from './bundle.js';
8
8
  export { type ResolvedSandboxServer, resolveSandboxServer, type SandboxKitDiscovery, type SandboxKitDiscoveryOptions, sandboxKitDiscovery, } from './discover.js';
9
9
  export { type GenerateSandboxKitDocsOptions, generateSandboxKitDocs } from './docs.js';
10
10
  export { assertNoLegacyKitOptions, DEFAULT_KIT_DIRS, globFiles, globToRegExp, resolveSandboxKitFiles, resolveSandboxKitWrapper, type SandboxKitFiles, type SandboxKitSourceOptions, } from './files.js';
11
- export { createGenuiSandboxKitPlugin, type GenuiSandboxKitApi, type GenuiSandboxKitDefaults, type GenuiSandboxKitOptions, type GenuiSandboxKitPlugin, SANDBOX_KIT_DEV_PREFIX, SANDBOX_KIT_MANIFEST_KEYS, SANDBOX_KIT_UPDATE_EVENT, } from './plugin.js';
12
- export { type BuildSandboxKitStylesOptions, buildSandboxKitStyles, collectStyleSources, discoverStyleEntries, readStylesGuide, resolveStyleEntries, resolveStyleImport, type SandboxKitStyles, STYLE_EXTENSIONS, type StyleSource, } from './styles.js';
11
+ export { createGenuiSandboxKitPlugin, type GenuiSandboxKitApi, type GenuiSandboxKitDefaults, type GenuiSandboxKitOptions, type GenuiSandboxKitPlugin, SANDBOX_KIT_DEV_PREFIX, SANDBOX_KIT_MANIFEST_KEYS, SANDBOX_KIT_UPDATE_EVENT, sandboxKitDescriptorPath, sandboxKitManifestKeys, } from './plugin.js';
12
+ export { type BuildSandboxKitStylesOptions, buildSandboxKitStyles, collectStyleSources, discoverStyleEntries, purgeSandboxKitStyles, readStylesGuide, resolveStyleEntries, resolveStyleImport, type SandboxKitPurgeOption, type SandboxKitStyles, STYLE_EXTENSIONS, type StyleSource, } from './styles.js';
13
13
  export { type WriteSandboxKitDocsOptions, writeSandboxKitDocs } from './write.js';
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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,iBAAiB,EACjB,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,wBAAwB,EACxB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,uBAAuB,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EACL,KAAK,sBAAsB,EAC3B,qBAAqB,EACrB,iBAAiB,EACjB,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,wBAAwB,EACxB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,uBAAuB,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -8,7 +8,7 @@ export { buildSandboxKitBundle, kitDocsFromBundle, } from './bundle.js';
8
8
  export { resolveSandboxServer, sandboxKitDiscovery, } from './discover.js';
9
9
  export { generateSandboxKitDocs } from './docs.js';
10
10
  export { assertNoLegacyKitOptions, DEFAULT_KIT_DIRS, globFiles, globToRegExp, resolveSandboxKitFiles, resolveSandboxKitWrapper, } from './files.js';
11
- export { createGenuiSandboxKitPlugin, SANDBOX_KIT_DEV_PREFIX, SANDBOX_KIT_MANIFEST_KEYS, SANDBOX_KIT_UPDATE_EVENT, } from './plugin.js';
12
- export { buildSandboxKitStyles, collectStyleSources, discoverStyleEntries, readStylesGuide, resolveStyleEntries, resolveStyleImport, STYLE_EXTENSIONS, } from './styles.js';
11
+ export { createGenuiSandboxKitPlugin, SANDBOX_KIT_DEV_PREFIX, SANDBOX_KIT_MANIFEST_KEYS, SANDBOX_KIT_UPDATE_EVENT, sandboxKitDescriptorPath, sandboxKitManifestKeys, } from './plugin.js';
12
+ export { buildSandboxKitStyles, collectStyleSources, discoverStyleEntries, purgeSandboxKitStyles, readStylesGuide, resolveStyleEntries, resolveStyleImport, STYLE_EXTENSIONS, } from './styles.js';
13
13
  export { writeSandboxKitDocs } from './write.js';
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +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,EACrB,iBAAiB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,oBAAoB,EAGpB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsC,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,GAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAK3B,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAElB,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAmC,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/genui/kit/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAA6B,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAEL,qBAAqB,EACrB,iBAAiB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,oBAAoB,EAGpB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAsC,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,GAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAK3B,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAGlB,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAmC,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -1,7 +1,16 @@
1
1
  import type { Plugin } from 'vite';
2
2
  import type { SandboxKitDescriptor } from '../sandbox-kit.js';
3
3
  import { type SandboxKitSourceOptions } from './files.js';
4
+ import { type SandboxKitPurgeOption } from './styles.js';
4
5
  export interface GenuiSandboxKitOptions extends SandboxKitSourceOptions {
6
+ /**
7
+ * A name, for several kits in one app (variants of the design system, a tenant's own, an A/B
8
+ * test): each `genuiSandboxKit({ name })` builds its own kit, served under
9
+ * `/@genui-sandbox-kit/<name>/`, written to its own descriptor and listed under its own manifest
10
+ * keys ({@link sandboxKitManifestKeys}); the server picks one by that name (`kitName`). Unnamed:
11
+ * the app's one kit.
12
+ */
13
+ name?: string;
5
14
  /**
6
15
  * The app's style entry files — plain CSS, Sass/Less, PostCSS, CSS modules, a `.scss` importing
7
16
  * Bootstrap, a Tailwind v3/v4 stylesheet… — compiled with the app's Vite CSS pipeline and inlined
@@ -26,6 +35,15 @@ export interface GenuiSandboxKitOptions extends SandboxKitSourceOptions {
26
35
  inlineAssetLimit?: number;
27
36
  /** Most bytes of fonts and images inlined in all. Default 1 MB. */
28
37
  inlineAssetBudget?: number;
38
+ /**
39
+ * Take out of the compiled styles what the frame can never use (default on): with Tailwind v4,
40
+ * every utility the kit's own code does not name (the frame's Tailwind runtime generates the
41
+ * ones the model writes; the theme, base and components layers stay); with Tailwind v3, every
42
+ * rule naming a class the kit does not use; with other CSS, generated CSS-modules classes the kit
43
+ * does not use. `false` ships the whole stylesheet; `{ safelist }` keeps more classes (names or
44
+ * patterns) — say, a Tailwind plugin's utilities the model is told about in `stylesDocs`.
45
+ */
46
+ purge?: SandboxKitPurgeOption;
29
47
  }
30
48
  /** The library-specific defaults the shared plugin is built with. */
31
49
  export interface GenuiSandboxKitDefaults {
@@ -45,8 +63,16 @@ export declare const SANDBOX_KIT_MANIFEST_KEYS: {
45
63
  };
46
64
  /** The event a page gets (`window`) when the kit was rebuilt in dev. */
47
65
  export declare const SANDBOX_KIT_UPDATE_EVENT = "genui-sandbox-kit:update";
66
+ /** The manifest keys a named kit's assets are listed under (`genui-sandbox-kit.<name>.js`…). */
67
+ export declare function sandboxKitManifestKeys(name?: string): Record<keyof typeof SANDBOX_KIT_MANIFEST_KEYS, string>;
68
+ /** A named kit's descriptor path, from the unnamed one's (`genui_sandbox_kit.json` → `genui_sandbox_kit.<name>.json`). */
69
+ export declare function sandboxKitDescriptorPath(path: string, name?: string): string;
70
+ /** Throws unless a kit name is a plain identifier (it goes into urls and file names). */
71
+ export declare function assertSandboxKitName(name: unknown): asserts name is string | undefined;
48
72
  /** What the plugin exposes to the server process it runs in (`plugin.api`). */
49
73
  export interface GenuiSandboxKitApi {
74
+ /** The kit's name (`genuiSandboxKit({ name })`), `undefined` for the unnamed one. */
75
+ readonly kitName?: string | undefined;
50
76
  /** The current descriptor (dev), once the first build is done. */
51
77
  descriptor(): SandboxKitDescriptor | null;
52
78
  /** Resolves when the first build is done. */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/plugin.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAItF,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AAYpB,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACpC,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,yHAAyH;IACzH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qEAAqE;AACrE,MAAM,WAAW,uBAAuB;IACtC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,8CAA8C;AAC9C,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAC5D,yDAAyD;AACzD,eAAO,MAAM,yBAAyB;aACpC,GAAG,EAAE,sBAAsB;aAC3B,GAAG,EAAE,uBAAuB;aAC5B,QAAQ,EAAE,2BAA2B;aACrC,UAAU,EAAE,wBAAwB;CAC5B,CAAC;AACX,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,UAAU,IAAI,oBAAoB,GAAG,IAAI,CAAC;IAC1C,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAkCD,qFAAqF;AACrF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG;IAAE,GAAG,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAkBzE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,uBAAuB,GAChC,qBAAqB,CA2WvB"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/plugin.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAItF,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAML,KAAK,qBAAqB,EAK3B,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACpC,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,yHAAyH;IACzH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B;AAED,qEAAqE;AACrE,MAAM,WAAW,uBAAuB;IACtC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,8CAA8C;AAC9C,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAC5D,yDAAyD;AACzD,eAAO,MAAM,yBAAyB;aACpC,GAAG,EAAE,sBAAsB;aAC3B,GAAG,EAAE,uBAAuB;aAC5B,QAAQ,EAAE,2BAA2B;aACrC,UAAU,EAAE,wBAAwB;CAC5B,CAAC;AACX,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,gGAAgG;AAChG,wBAAgB,sBAAsB,CACpC,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,OAAO,yBAAyB,EAAE,MAAM,CAAC,CASxD;AAED,0HAA0H;AAC1H,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,GAAG,SAAS,CAKtF;AAED,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,kEAAkE;IAClE,UAAU,IAAI,oBAAoB,GAAG,IAAI,CAAC;IAC1C,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAkCD,qFAAqF;AACrF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG;IAAE,GAAG,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAsBzE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,uBAAuB,GAChC,qBAAqB,CAwYvB"}
@@ -24,7 +24,7 @@ import { themeVarsFromCss } from '../sandbox-theme.js';
24
24
  import { buildSandboxKitBundle, kitDocsFromBundle } from './bundle.js';
25
25
  import { generateSandboxKitDocs } from './docs.js';
26
26
  import { assertNoLegacyKitOptions, resolveSandboxKitFiles, } from './files.js';
27
- import { buildSandboxKitStyles, discoverStyleEntries, readStylesGuide, resolveStyleEntries, STYLE_EXTENSIONS, stylesDocs, tailwindVitePluginFor, } from './styles.js';
27
+ import { buildSandboxKitStyles, discoverStyleEntries, purgeSandboxKitStyles, readStylesGuide, resolveStyleEntries, STYLE_EXTENSIONS, stylesDocs, tailwindVitePluginFor, } from './styles.js';
28
28
  /** Where the dev server serves the assets. */
29
29
  export const SANDBOX_KIT_DEV_PREFIX = '@genui-sandbox-kit/';
30
30
  /** The Vite manifest keys the build lists them under. */
@@ -36,6 +36,24 @@ export const SANDBOX_KIT_MANIFEST_KEYS = {
36
36
  };
37
37
  /** The event a page gets (`window`) when the kit was rebuilt in dev. */
38
38
  export const SANDBOX_KIT_UPDATE_EVENT = 'genui-sandbox-kit:update';
39
+ /** The manifest keys a named kit's assets are listed under (`genui-sandbox-kit.<name>.js`…). */
40
+ export function sandboxKitManifestKeys(name) {
41
+ if (name === undefined)
42
+ return { ...SANDBOX_KIT_MANIFEST_KEYS };
43
+ const keys = {};
44
+ for (const [key, file] of Object.entries(SANDBOX_KIT_MANIFEST_KEYS))
45
+ keys[key] = file.replace(/(\.[a-z]+)$/, `.${name}$1`);
46
+ return keys;
47
+ }
48
+ /** A named kit's descriptor path, from the unnamed one's (`genui_sandbox_kit.json` → `genui_sandbox_kit.<name>.json`). */
49
+ export function sandboxKitDescriptorPath(path, name) {
50
+ return name === undefined ? path : path.replace(/(\.json)?$/, `.${name}$1`);
51
+ }
52
+ /** Throws unless a kit name is a plain identifier (it goes into urls and file names). */
53
+ export function assertSandboxKitName(name) {
54
+ if (name !== undefined && (typeof name !== 'string' || !/^[a-z0-9][a-z0-9_-]{0,63}$/i.test(name)))
55
+ throw new TypeError(`genuiSandboxKit: name "${String(name)}" must be letters, digits, "-" or "_" (up to 64)`);
56
+ }
39
57
  function tailwindRuntimePath() {
40
58
  try {
41
59
  const require = createRequire(import.meta.url);
@@ -63,8 +81,15 @@ function WORKSPACE_LINKED(path) {
63
81
  }
64
82
  /** A file a change to which may change the compiled styles. */
65
83
  const STYLE_CHANGE = new RegExp(`(${STYLE_EXTENSIONS.map((ext) => ext.replace('.', '\\.')).join('|')}|tailwind\\.config\\.[cm]?[jt]s)$`, 'i');
84
+ function kib(chars) {
85
+ return `${Math.round(chars / 1024)} KB`;
86
+ }
66
87
  export function createGenuiSandboxKitPlugin(options, defaults) {
67
88
  assertNoLegacyKitOptions(options, 'genuiSandboxKit');
89
+ // Read once: the kit's identity (its urls, files, manifest keys) does not change while it runs.
90
+ const kitName = options.name;
91
+ assertSandboxKitName(kitName);
92
+ const manifestKeys = sandboxKitManifestKeys(kitName);
68
93
  let config;
69
94
  let files = null;
70
95
  let bundle = null;
@@ -84,7 +109,8 @@ export function createGenuiSandboxKitPlugin(options, defaults) {
84
109
  warned.add(message);
85
110
  config?.logger.warn(`[genui-sandbox-kit] ${message}`);
86
111
  };
87
- const devUrl = (name, hash) => `${config?.base ?? '/'}${SANDBOX_KIT_DEV_PREFIX}${name}${hash ? `?v=${hash}` : ''}`;
112
+ const devDir = `${SANDBOX_KIT_DEV_PREFIX}${kitName === undefined ? '' : `${kitName}/`}`;
113
+ const devUrl = (name, hash) => `${config?.base ?? '/'}${devDir}${name}${hash ? `?v=${hash}` : ''}`;
88
114
  /** The descriptor, given where each asset is (`null`: none). */
89
115
  const describe = (urls) => {
90
116
  const vars = styles !== null && Object.keys(styles.vars).length > 0 ? styles.vars : scannedVars;
@@ -120,7 +146,7 @@ export function createGenuiSandboxKitPlugin(options, defaults) {
120
146
  if (config === undefined)
121
147
  return;
122
148
  descriptor = describeDev();
123
- const path = resolve(config.root, options.descriptor ?? defaults.descriptor);
149
+ const path = resolve(config.root, options.descriptor ?? sandboxKitDescriptorPath(defaults.descriptor, kitName));
124
150
  try {
125
151
  mkdirSync(dirname(path), { recursive: true });
126
152
  writeFileSync(path, `${JSON.stringify(descriptor, null, 2)}\n`);
@@ -208,7 +234,18 @@ export function createGenuiSandboxKitPlugin(options, defaults) {
208
234
  return null;
209
235
  }),
210
236
  ]);
211
- styles = builtStyles;
237
+ const purge = options.purge ?? true;
238
+ styles =
239
+ builtStyles === null || purge === false
240
+ ? builtStyles
241
+ : purgeSandboxKitStyles(builtStyles, {
242
+ ...(built !== null ? { kitCode: built.code } : {}),
243
+ ...(typeof purge === 'object' && purge.safelist !== undefined
244
+ ? { safelist: purge.safelist }
245
+ : {}),
246
+ });
247
+ if (styles?.purged !== undefined)
248
+ config.logger.info(`[genui-sandbox-kit] styles purged: ${kib(styles.purged.before)} → ${kib(styles.css.length)}`);
212
249
  bundle = built;
213
250
  docs = generated ?? (built === null ? [] : kitDocsFromBundle(built.code));
214
251
  if (generated === null && docs.length === 0 && built !== null)
@@ -219,6 +256,7 @@ export function createGenuiSandboxKitPlugin(options, defaults) {
219
256
  name: 'genui-sandbox-kit',
220
257
  enforce: 'pre',
221
258
  api: {
259
+ kitName,
222
260
  descriptor: () => descriptor,
223
261
  ready: () => ready,
224
262
  },
@@ -271,10 +309,16 @@ export function createGenuiSandboxKitPlugin(options, defaults) {
271
309
  });
272
310
  server.middlewares.use((req, res, next) => {
273
311
  const url = String(req.url ?? '').split('?')[0] ?? '';
274
- const prefix = `${config?.base ?? '/'}${SANDBOX_KIT_DEV_PREFIX}`;
275
- if (!url.startsWith(prefix) && !url.startsWith(`/${SANDBOX_KIT_DEV_PREFIX}`))
312
+ const prefix = `${config?.base ?? '/'}${devDir}`;
313
+ const rest = url.startsWith(prefix)
314
+ ? url.slice(prefix.length)
315
+ : url.startsWith(`/${devDir}`)
316
+ ? url.slice(devDir.length + 1)
317
+ : undefined;
318
+ // Its own files only: `<prefix>kit.js` — another kit's (`<prefix><name>/kit.js`) is not its.
319
+ if (rest === undefined || rest.includes('/'))
276
320
  return next();
277
- const name = url.slice(url.lastIndexOf('/') + 1);
321
+ const name = rest;
278
322
  void (async () => {
279
323
  await firstBuild;
280
324
  let body = null;
@@ -327,6 +371,7 @@ export function createGenuiSandboxKitPlugin(options, defaults) {
327
371
  type: 'custom',
328
372
  event: SANDBOX_KIT_UPDATE_EVENT,
329
373
  data: {
374
+ ...(kitName !== undefined ? { name: kitName } : {}),
330
375
  hash: bundle?.hash ?? null,
331
376
  url: descriptor?.assets.kit?.url ?? null,
332
377
  css: descriptor?.assets.css?.url ?? null,
@@ -351,8 +396,8 @@ export function createGenuiSandboxKitPlugin(options, defaults) {
351
396
  const emit = (key, source) => {
352
397
  const ref = this.emitFile({
353
398
  type: 'asset',
354
- name: SANDBOX_KIT_MANIFEST_KEYS[key],
355
- originalFileName: SANDBOX_KIT_MANIFEST_KEYS[key],
399
+ name: manifestKeys[key],
400
+ originalFileName: manifestKeys[key],
356
401
  source,
357
402
  });
358
403
  const fileName = this.getFileName(ref);
@@ -377,7 +422,7 @@ export function createGenuiSandboxKitPlugin(options, defaults) {
377
422
  for (const [key, file] of Object.entries(emitted)) {
378
423
  if (file === undefined)
379
424
  continue;
380
- const name = SANDBOX_KIT_MANIFEST_KEYS[key];
425
+ const name = manifestKeys[key];
381
426
  manifest[name] = { file, src: name };
382
427
  }
383
428
  writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));