@databricks/appkit-ui 0.46.0 → 0.47.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.
@@ -1,3 +1,4 @@
1
+ import { METRIC_CONFIG_FILE } from "../../schemas/metric-fqn.js";
1
2
  import { acquireSpawnLock, getSpawnLockPath, releaseSpawnLock } from "./spawn-lock.js";
2
3
  import fs from "node:fs";
3
4
  import path from "node:path";
@@ -33,16 +34,20 @@ async function runGenerateTypes(rootDir, outFile, warehouseId, options) {
33
34
  if (resolvedWarehouseId) {
34
35
  const resolvedOutFile = outFile || path.join(process.cwd(), "shared/appkit-types/analytics.d.ts");
35
36
  const queryFolder = path.join(resolvedRootDir, "config/queries");
36
- if (fs.existsSync(queryFolder)) {
37
+ const metricViewsFolder = path.join(resolvedRootDir, "config/metric-views");
38
+ const hasQueries = fs.existsSync(queryFolder);
39
+ const hasMetricViews = fs.existsSync(metricViewsFolder);
40
+ if (hasQueries || hasMetricViews) {
37
41
  await typeGen.generateFromEntryPoint({
38
- queryFolder,
42
+ queryFolder: hasQueries ? queryFolder : void 0,
43
+ metricViewsFolder: hasMetricViews ? metricViewsFolder : void 0,
39
44
  outFile: resolvedOutFile,
40
45
  warehouseId: resolvedWarehouseId,
41
46
  noCache,
42
47
  mode
43
48
  });
44
- console.log(`Generated query types: ${resolvedOutFile}`);
45
- const metricConfig = path.join(queryFolder, "metric-views.json");
49
+ if (hasQueries) console.log(`Generated query types: ${resolvedOutFile}`);
50
+ const metricConfig = path.join(metricViewsFolder, METRIC_CONFIG_FILE);
46
51
  if (fs.existsSync(metricConfig)) {
47
52
  const typesDir = path.dirname(resolvedOutFile);
48
53
  console.log(`Generated metric types: ${path.join(typesDir, "metric-views.d.ts")}`);
@@ -1 +1 @@
1
- {"version":3,"file":"generate-types.js","names":[],"sources":["../../../src/cli/commands/generate-types.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Command, Option } from \"commander\";\nimport {\n acquireSpawnLock,\n getSpawnLockPath,\n releaseSpawnLock,\n} from \"./spawn-lock.js\";\n\n/**\n * Resolve the typegen pre-flight mode for the CLI. Defaults to \"non-blocking\" —\n * a one-shot CLI can't describe in the background, so by default it never\n * describes at all: it skips the warehouse probe AND every DESCRIBE, emits\n * best-available types (cache where the SQL hash matches, else `result: unknown`)\n * and returns immediately, never blocking on — or failing because of — a\n * warehouse, even a RUNNING one. Pass `--wait` (commander sets `wait: true`)\n * for a deliberate/CI invocation that should wait for a starting warehouse and\n * fail fast on a stopped one.\n */\nexport function resolveTypegenMode(options?: {\n wait?: boolean;\n}): \"non-blocking\" | \"blocking\" {\n return options?.wait ? \"blocking\" : \"non-blocking\";\n}\n\n/** Options parsed by commander for the generate-types command. */\ninterface GenerateTypesOptions {\n noCache?: boolean;\n wait?: boolean;\n /**\n * Internal: present only on the detached worker invocation. Carries the path\n * of the single-flight lock this worker must release when it finishes. Its\n * presence is what marks an invocation as \"the worker\" — workers always run\n * with `--wait`, so they never spawn another worker (only non-blocking runs\n * spawn), which terminates the recursion.\n */\n workerLock?: string;\n}\n\n/**\n * Generate types command implementation. Runs the library generate (which, in\n * non-blocking mode, writes degraded types and returns immediately). This is the\n * SAME work the worker performs in blocking mode in the background.\n */\nasync function runGenerateTypes(\n rootDir?: string,\n outFile?: string,\n warehouseId?: string,\n options?: GenerateTypesOptions,\n) {\n try {\n const resolvedRootDir = rootDir || process.cwd();\n const noCache = options?.noCache || false;\n const mode = resolveTypegenMode(options);\n\n const typeGen = await import(\"@databricks/appkit/type-generator\");\n\n // Generate analytics query types (requires warehouse ID)\n const resolvedWarehouseId =\n warehouseId || process.env.DATABRICKS_WAREHOUSE_ID;\n\n if (resolvedWarehouseId) {\n const resolvedOutFile =\n outFile ||\n path.join(process.cwd(), \"shared/appkit-types/analytics.d.ts\");\n\n const queryFolder = path.join(resolvedRootDir, \"config/queries\");\n if (fs.existsSync(queryFolder)) {\n await typeGen.generateFromEntryPoint({\n queryFolder,\n outFile: resolvedOutFile,\n warehouseId: resolvedWarehouseId,\n noCache,\n mode,\n });\n console.log(`Generated query types: ${resolvedOutFile}`);\n\n const metricConfig = path.join(queryFolder, \"metric-views.json\");\n if (fs.existsSync(metricConfig)) {\n const typesDir = path.dirname(resolvedOutFile);\n console.log(\n `Generated metric types: ${path.join(typesDir, \"metric-views.d.ts\")}`,\n );\n }\n }\n } else {\n console.error(\n \"Skipping query type generation: no warehouse ID. Set DATABRICKS_WAREHOUSE_ID or pass as argument.\",\n );\n }\n\n // Generate serving endpoint types (no warehouse required)\n const servingOutFile = path.join(\n process.cwd(),\n \"shared/appkit-types/serving.d.ts\",\n );\n await typeGen.generateServingTypes({\n outFile: servingOutFile,\n noCache,\n });\n console.log(`Generated serving types: ${servingOutFile}`);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Cannot find module\")\n ) {\n console.error(\n \"Error: The 'generate-types' command is only available in @databricks/appkit.\",\n );\n console.error(\"Please install @databricks/appkit to use this command.\");\n process.exit(1);\n }\n // TypegenSyntaxError / TypegenFatalError carry a complete, actionable\n // message (which queries failed and how to debug them). The stack trace\n // points into appkit internals and is noise for app developers, so print\n // only the message and exit non-zero instead of letting it bubble up.\n if (\n error instanceof Error &&\n (error.name === \"TypegenSyntaxError\" ||\n error.name === \"TypegenFatalError\")\n ) {\n console.error(error.message);\n process.exit(1);\n }\n throw error;\n }\n}\n\n/**\n * Spawn the detached blocking worker that refreshes real types in the background\n * after the foreground non-blocking generate has already written degraded types.\n *\n * Re-invokes THIS CLI (`process.execPath` + `process.argv[1]` — the bin entry\n * that launched us) with `generate-types --wait --worker-lock <lockPath>` plus\n * the same positional target options the foreground used, so the worker writes\n * to the same out file / reads the same query folder. The worker is:\n * - `detached: true` + `.unref()` so it outlives this process (install/dev-setup\n * can finish and exit while the worker keeps warming the warehouse).\n * - `stdio: \"ignore\"` so it never holds the parent's pipes open or interleaves\n * output into the install/dev log.\n *\n * Spawning is wrapped so any failure is non-fatal: the caller still has degraded\n * types and exits 0.\n *\n * @param lockPath - the acquired single-flight lock; passed to the worker so it\n * releases the SAME lock when it finishes.\n * @param targets - the foreground's positional args, forwarded verbatim.\n * @returns true if the worker was spawned, false if spawning threw.\n */\nexport function spawnTypegenWorker(\n lockPath: string,\n targets: { rootDir?: string; outFile?: string; warehouseId?: string },\n): boolean {\n // The script the runtime launched us with (the `appkit` bin shim). Re-running\n // it under the same node binary reproduces this exact CLI in the worker.\n const cliEntry = process.argv[1];\n\n // Forward the positionals in declaration order (rootDir, outFile,\n // warehouseId). Stop at the first undefined so we never pass a literal\n // \"undefined\" — commander would treat it as a positional value. (rootDir is\n // effectively always set by commander's default, but guard anyway.)\n const positionals: string[] = [];\n for (const value of [targets.rootDir, targets.outFile, targets.warehouseId]) {\n if (value === undefined) break;\n positionals.push(value);\n }\n\n const args = [\n // Forward the parent's node/loader flags so the worker runs under the same\n // runtime. Critically this carries tsx's `--require`/`--import` when the CLI\n // is run from source (`tsx index.ts …`); without them the worker would be\n // `node index.ts …`, which can't parse TypeScript and dies silently — the\n // degraded types would then never refresh. Empty for the built bin (plain\n // `node bin/appkit.js`), so production behaviour is unchanged.\n ...process.execArgv,\n cliEntry,\n \"generate-types\",\n \"--wait\",\n \"--worker-lock\",\n lockPath,\n ...positionals,\n ];\n\n try {\n const child = spawn(process.execPath, args, {\n detached: true,\n stdio: \"ignore\",\n });\n child.unref();\n return true;\n } catch (error) {\n // Non-fatal: the foreground already wrote degraded types. Log and move on.\n console.error(\n `Could not start background type refresh: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n return false;\n }\n}\n\n/**\n * The command action. Orchestrates the non-blocking foreground contract:\n * 1. Run the library generate (writes degraded types immediately in non-blocking\n * mode; does the full blocking lifecycle when this is the worker).\n * 2. If this is a non-blocking, non-worker invocation, try to spawn the detached\n * blocking worker behind the single-flight lock. If the lock is already held\n * by a live worker, skip (single-flight) with a one-line note. Either way the\n * foreground returns normally (exit 0).\n * 3. If this IS the worker (`--worker-lock` present), it ran blocking above and\n * releases the lock here (and via a process-exit guard, so a hard failure /\n * process.exit still frees it).\n */\nasync function generateTypesAction(\n rootDir: string | undefined,\n outFile: string | undefined,\n warehouseId: string | undefined,\n options: GenerateTypesOptions,\n) {\n const isWorker = typeof options.workerLock === \"string\";\n\n // A worker must always free its lock, even if the blocking generate throws or\n // calls process.exit (TypegenFatalError → exit 1). The exit handler covers the\n // process.exit / uncaught paths; the finally covers the normal return.\n if (isWorker && options.workerLock) {\n const lockPath = options.workerLock;\n process.once(\"exit\", () => releaseSpawnLock(lockPath));\n }\n\n try {\n await runGenerateTypes(rootDir, outFile, warehouseId, options);\n } finally {\n if (isWorker && options.workerLock) {\n releaseSpawnLock(options.workerLock);\n }\n }\n\n // Only a non-blocking, non-worker invocation spawns. A worker is always\n // --wait (so resolveTypegenMode → \"blocking\"), which both prevents recursion\n // and means we never get here for a worker.\n if (!isWorker && resolveTypegenMode(options) === \"non-blocking\") {\n const resolvedRootDir = rootDir || process.cwd();\n const lockPath = getSpawnLockPath(resolvedRootDir);\n\n if (acquireSpawnLock(lockPath)) {\n spawnTypegenWorker(lockPath, { rootDir, outFile, warehouseId });\n } else {\n console.log(\"Type refresh already in progress, skipping.\");\n }\n }\n}\n\nexport const generateTypesCommand = new Command(\"generate-types\")\n .description(\"Generate TypeScript types from SQL queries\")\n .argument(\"[rootDir]\", \"Root directory of the project\", process.cwd())\n .argument(\n \"[outFile]\",\n \"Output file path\",\n path.join(process.cwd(), \"shared/appkit-types/analytics.d.ts\"),\n )\n .argument(\"[warehouseId]\", \"Databricks warehouse ID\")\n .option(\"--no-cache\", \"Disable caching for type generation\")\n .option(\n \"--wait\",\n \"Wait for warehouse readiness instead of degrading (use for CI)\",\n )\n // Internal: marks the detached background worker and carries the lock it must\n // release. Hidden from --help; users should never pass it.\n .addOption(\n new Option(\n \"--worker-lock <path>\",\n \"Internal: detached worker lock path\",\n ).hideHelp(),\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n $ appkit generate-types\n $ appkit generate-types . shared/appkit-types/analytics.d.ts\n $ appkit generate-types . shared/appkit-types/analytics.d.ts my-warehouse-id\n $ appkit generate-types --no-cache\n $ appkit generate-types --wait # CI: wait for the warehouse and fail on a cold one`,\n )\n .action(generateTypesAction);\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,SAAgB,mBAAmB,SAEH;AAC9B,QAAO,SAAS,OAAO,aAAa;;;;;;;AAsBtC,eAAe,iBACb,SACA,SACA,aACA,SACA;AACA,KAAI;EACF,MAAM,kBAAkB,WAAW,QAAQ,KAAK;EAChD,MAAM,UAAU,SAAS,WAAW;EACpC,MAAM,OAAO,mBAAmB,QAAQ;EAExC,MAAM,UAAU,MAAM,OAAO;EAG7B,MAAM,sBACJ,eAAe,QAAQ,IAAI;AAE7B,MAAI,qBAAqB;GACvB,MAAM,kBACJ,WACA,KAAK,KAAK,QAAQ,KAAK,EAAE,qCAAqC;GAEhE,MAAM,cAAc,KAAK,KAAK,iBAAiB,iBAAiB;AAChE,OAAI,GAAG,WAAW,YAAY,EAAE;AAC9B,UAAM,QAAQ,uBAAuB;KACnC;KACA,SAAS;KACT,aAAa;KACb;KACA;KACD,CAAC;AACF,YAAQ,IAAI,0BAA0B,kBAAkB;IAExD,MAAM,eAAe,KAAK,KAAK,aAAa,oBAAoB;AAChE,QAAI,GAAG,WAAW,aAAa,EAAE;KAC/B,MAAM,WAAW,KAAK,QAAQ,gBAAgB;AAC9C,aAAQ,IACN,2BAA2B,KAAK,KAAK,UAAU,oBAAoB,GACpE;;;QAIL,SAAQ,MACN,oGACD;EAIH,MAAM,iBAAiB,KAAK,KAC1B,QAAQ,KAAK,EACb,mCACD;AACD,QAAM,QAAQ,qBAAqB;GACjC,SAAS;GACT;GACD,CAAC;AACF,UAAQ,IAAI,4BAA4B,iBAAiB;UAClD,OAAO;AACd,MACE,iBAAiB,SACjB,MAAM,QAAQ,SAAS,qBAAqB,EAC5C;AACA,WAAQ,MACN,+EACD;AACD,WAAQ,MAAM,yDAAyD;AACvE,WAAQ,KAAK,EAAE;;AAMjB,MACE,iBAAiB,UAChB,MAAM,SAAS,wBACd,MAAM,SAAS,sBACjB;AACA,WAAQ,MAAM,MAAM,QAAQ;AAC5B,WAAQ,KAAK,EAAE;;AAEjB,QAAM;;;;;;;;;;;;;;;;;;;;;;;;AAyBV,SAAgB,mBACd,UACA,SACS;CAGT,MAAM,WAAW,QAAQ,KAAK;CAM9B,MAAM,cAAwB,EAAE;AAChC,MAAK,MAAM,SAAS;EAAC,QAAQ;EAAS,QAAQ;EAAS,QAAQ;EAAY,EAAE;AAC3E,MAAI,UAAU,OAAW;AACzB,cAAY,KAAK,MAAM;;CAGzB,MAAM,OAAO;EAOX,GAAG,QAAQ;EACX;EACA;EACA;EACA;EACA;EACA,GAAG;EACJ;AAED,KAAI;AAKF,EAJc,MAAM,QAAQ,UAAU,MAAM;GAC1C,UAAU;GACV,OAAO;GACR,CAAC,CACI,OAAO;AACb,SAAO;UACA,OAAO;AAEd,UAAQ,MACN,4CACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAEzD;AACD,SAAO;;;;;;;;;;;;;;;AAgBX,eAAe,oBACb,SACA,SACA,aACA,SACA;CACA,MAAM,WAAW,OAAO,QAAQ,eAAe;AAK/C,KAAI,YAAY,QAAQ,YAAY;EAClC,MAAM,WAAW,QAAQ;AACzB,UAAQ,KAAK,cAAc,iBAAiB,SAAS,CAAC;;AAGxD,KAAI;AACF,QAAM,iBAAiB,SAAS,SAAS,aAAa,QAAQ;WACtD;AACR,MAAI,YAAY,QAAQ,WACtB,kBAAiB,QAAQ,WAAW;;AAOxC,KAAI,CAAC,YAAY,mBAAmB,QAAQ,KAAK,gBAAgB;EAE/D,MAAM,WAAW,iBADO,WAAW,QAAQ,KAAK,CACE;AAElD,MAAI,iBAAiB,SAAS,CAC5B,oBAAmB,UAAU;GAAE;GAAS;GAAS;GAAa,CAAC;MAE/D,SAAQ,IAAI,8CAA8C;;;AAKhE,MAAa,uBAAuB,IAAI,QAAQ,iBAAiB,CAC9D,YAAY,6CAA6C,CACzD,SAAS,aAAa,iCAAiC,QAAQ,KAAK,CAAC,CACrE,SACC,aACA,oBACA,KAAK,KAAK,QAAQ,KAAK,EAAE,qCAAqC,CAC/D,CACA,SAAS,iBAAiB,0BAA0B,CACpD,OAAO,cAAc,sCAAsC,CAC3D,OACC,UACA,iEACD,CAGA,UACC,IAAI,OACF,wBACA,sCACD,CAAC,UAAU,CACb,CACA,YACC,SACA;;;;;;wFAOD,CACA,OAAO,oBAAoB"}
1
+ {"version":3,"file":"generate-types.js","names":[],"sources":["../../../src/cli/commands/generate-types.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Command, Option } from \"commander\";\nimport { METRIC_CONFIG_FILE } from \"../../schemas/metric-fqn\";\nimport {\n acquireSpawnLock,\n getSpawnLockPath,\n releaseSpawnLock,\n} from \"./spawn-lock.js\";\n\n/**\n * Resolve the typegen pre-flight mode for the CLI. Defaults to \"non-blocking\" —\n * a one-shot CLI can't describe in the background, so by default it never\n * describes at all: it skips the warehouse probe AND every DESCRIBE, emits\n * best-available types (cache where the SQL hash matches, else `result: unknown`)\n * and returns immediately, never blocking on — or failing because of — a\n * warehouse, even a RUNNING one. Pass `--wait` (commander sets `wait: true`)\n * for a deliberate/CI invocation that should wait for a starting warehouse and\n * fail fast on a stopped one.\n */\nexport function resolveTypegenMode(options?: {\n wait?: boolean;\n}): \"non-blocking\" | \"blocking\" {\n return options?.wait ? \"blocking\" : \"non-blocking\";\n}\n\n/** Options parsed by commander for the generate-types command. */\ninterface GenerateTypesOptions {\n noCache?: boolean;\n wait?: boolean;\n /**\n * Internal: present only on the detached worker invocation. Carries the path\n * of the single-flight lock this worker must release when it finishes. Its\n * presence is what marks an invocation as \"the worker\" — workers always run\n * with `--wait`, so they never spawn another worker (only non-blocking runs\n * spawn), which terminates the recursion.\n */\n workerLock?: string;\n}\n\n/**\n * Generate types command implementation. Runs the library generate (which, in\n * non-blocking mode, writes degraded types and returns immediately). This is the\n * SAME work the worker performs in blocking mode in the background.\n */\nasync function runGenerateTypes(\n rootDir?: string,\n outFile?: string,\n warehouseId?: string,\n options?: GenerateTypesOptions,\n) {\n try {\n const resolvedRootDir = rootDir || process.cwd();\n const noCache = options?.noCache || false;\n const mode = resolveTypegenMode(options);\n\n const typeGen = await import(\"@databricks/appkit/type-generator\");\n\n // Generate analytics query types (requires warehouse ID)\n const resolvedWarehouseId =\n warehouseId || process.env.DATABRICKS_WAREHOUSE_ID;\n\n if (resolvedWarehouseId) {\n const resolvedOutFile =\n outFile ||\n path.join(process.cwd(), \"shared/appkit-types/analytics.d.ts\");\n\n const queryFolder = path.join(resolvedRootDir, \"config/queries\");\n const metricViewsFolder = path.join(\n resolvedRootDir,\n \"config/metric-views\",\n );\n const hasQueries = fs.existsSync(queryFolder);\n const hasMetricViews = fs.existsSync(metricViewsFolder);\n\n // Generate when either config surface exists. Metric-view types are\n // independent of `.sql` queries — an app can declare metric views in\n // `config/metric-views/` without a `config/queries/` folder.\n if (hasQueries || hasMetricViews) {\n await typeGen.generateFromEntryPoint({\n queryFolder: hasQueries ? queryFolder : undefined,\n metricViewsFolder: hasMetricViews ? metricViewsFolder : undefined,\n outFile: resolvedOutFile,\n warehouseId: resolvedWarehouseId,\n noCache,\n mode,\n });\n\n if (hasQueries) {\n console.log(`Generated query types: ${resolvedOutFile}`);\n }\n\n const metricConfig = path.join(metricViewsFolder, METRIC_CONFIG_FILE);\n if (fs.existsSync(metricConfig)) {\n const typesDir = path.dirname(resolvedOutFile);\n console.log(\n `Generated metric types: ${path.join(typesDir, \"metric-views.d.ts\")}`,\n );\n }\n }\n } else {\n console.error(\n \"Skipping query type generation: no warehouse ID. Set DATABRICKS_WAREHOUSE_ID or pass as argument.\",\n );\n }\n\n // Generate serving endpoint types (no warehouse required)\n const servingOutFile = path.join(\n process.cwd(),\n \"shared/appkit-types/serving.d.ts\",\n );\n await typeGen.generateServingTypes({\n outFile: servingOutFile,\n noCache,\n });\n console.log(`Generated serving types: ${servingOutFile}`);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Cannot find module\")\n ) {\n console.error(\n \"Error: The 'generate-types' command is only available in @databricks/appkit.\",\n );\n console.error(\"Please install @databricks/appkit to use this command.\");\n process.exit(1);\n }\n // TypegenSyntaxError / TypegenFatalError carry a complete, actionable\n // message (which queries failed and how to debug them). The stack trace\n // points into appkit internals and is noise for app developers, so print\n // only the message and exit non-zero instead of letting it bubble up.\n if (\n error instanceof Error &&\n (error.name === \"TypegenSyntaxError\" ||\n error.name === \"TypegenFatalError\")\n ) {\n console.error(error.message);\n process.exit(1);\n }\n throw error;\n }\n}\n\n/**\n * Spawn the detached blocking worker that refreshes real types in the background\n * after the foreground non-blocking generate has already written degraded types.\n *\n * Re-invokes THIS CLI (`process.execPath` + `process.argv[1]` — the bin entry\n * that launched us) with `generate-types --wait --worker-lock <lockPath>` plus\n * the same positional target options the foreground used, so the worker writes\n * to the same out file / reads the same query folder. The worker is:\n * - `detached: true` + `.unref()` so it outlives this process (install/dev-setup\n * can finish and exit while the worker keeps warming the warehouse).\n * - `stdio: \"ignore\"` so it never holds the parent's pipes open or interleaves\n * output into the install/dev log.\n *\n * Spawning is wrapped so any failure is non-fatal: the caller still has degraded\n * types and exits 0.\n *\n * @param lockPath - the acquired single-flight lock; passed to the worker so it\n * releases the SAME lock when it finishes.\n * @param targets - the foreground's positional args, forwarded verbatim.\n * @returns true if the worker was spawned, false if spawning threw.\n */\nexport function spawnTypegenWorker(\n lockPath: string,\n targets: { rootDir?: string; outFile?: string; warehouseId?: string },\n): boolean {\n // The script the runtime launched us with (the `appkit` bin shim). Re-running\n // it under the same node binary reproduces this exact CLI in the worker.\n const cliEntry = process.argv[1];\n\n // Forward the positionals in declaration order (rootDir, outFile,\n // warehouseId). Stop at the first undefined so we never pass a literal\n // \"undefined\" — commander would treat it as a positional value. (rootDir is\n // effectively always set by commander's default, but guard anyway.)\n const positionals: string[] = [];\n for (const value of [targets.rootDir, targets.outFile, targets.warehouseId]) {\n if (value === undefined) break;\n positionals.push(value);\n }\n\n const args = [\n // Forward the parent's node/loader flags so the worker runs under the same\n // runtime. Critically this carries tsx's `--require`/`--import` when the CLI\n // is run from source (`tsx index.ts …`); without them the worker would be\n // `node index.ts …`, which can't parse TypeScript and dies silently — the\n // degraded types would then never refresh. Empty for the built bin (plain\n // `node bin/appkit.js`), so production behaviour is unchanged.\n ...process.execArgv,\n cliEntry,\n \"generate-types\",\n \"--wait\",\n \"--worker-lock\",\n lockPath,\n ...positionals,\n ];\n\n try {\n const child = spawn(process.execPath, args, {\n detached: true,\n stdio: \"ignore\",\n });\n child.unref();\n return true;\n } catch (error) {\n // Non-fatal: the foreground already wrote degraded types. Log and move on.\n console.error(\n `Could not start background type refresh: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n return false;\n }\n}\n\n/**\n * The command action. Orchestrates the non-blocking foreground contract:\n * 1. Run the library generate (writes degraded types immediately in non-blocking\n * mode; does the full blocking lifecycle when this is the worker).\n * 2. If this is a non-blocking, non-worker invocation, try to spawn the detached\n * blocking worker behind the single-flight lock. If the lock is already held\n * by a live worker, skip (single-flight) with a one-line note. Either way the\n * foreground returns normally (exit 0).\n * 3. If this IS the worker (`--worker-lock` present), it ran blocking above and\n * releases the lock here (and via a process-exit guard, so a hard failure /\n * process.exit still frees it).\n */\nasync function generateTypesAction(\n rootDir: string | undefined,\n outFile: string | undefined,\n warehouseId: string | undefined,\n options: GenerateTypesOptions,\n) {\n const isWorker = typeof options.workerLock === \"string\";\n\n // A worker must always free its lock, even if the blocking generate throws or\n // calls process.exit (TypegenFatalError → exit 1). The exit handler covers the\n // process.exit / uncaught paths; the finally covers the normal return.\n if (isWorker && options.workerLock) {\n const lockPath = options.workerLock;\n process.once(\"exit\", () => releaseSpawnLock(lockPath));\n }\n\n try {\n await runGenerateTypes(rootDir, outFile, warehouseId, options);\n } finally {\n if (isWorker && options.workerLock) {\n releaseSpawnLock(options.workerLock);\n }\n }\n\n // Only a non-blocking, non-worker invocation spawns. A worker is always\n // --wait (so resolveTypegenMode → \"blocking\"), which both prevents recursion\n // and means we never get here for a worker.\n if (!isWorker && resolveTypegenMode(options) === \"non-blocking\") {\n const resolvedRootDir = rootDir || process.cwd();\n const lockPath = getSpawnLockPath(resolvedRootDir);\n\n if (acquireSpawnLock(lockPath)) {\n spawnTypegenWorker(lockPath, { rootDir, outFile, warehouseId });\n } else {\n console.log(\"Type refresh already in progress, skipping.\");\n }\n }\n}\n\nexport const generateTypesCommand = new Command(\"generate-types\")\n .description(\"Generate TypeScript types from SQL queries\")\n .argument(\"[rootDir]\", \"Root directory of the project\", process.cwd())\n .argument(\n \"[outFile]\",\n \"Output file path\",\n path.join(process.cwd(), \"shared/appkit-types/analytics.d.ts\"),\n )\n .argument(\"[warehouseId]\", \"Databricks warehouse ID\")\n .option(\"--no-cache\", \"Disable caching for type generation\")\n .option(\n \"--wait\",\n \"Wait for warehouse readiness instead of degrading (use for CI)\",\n )\n // Internal: marks the detached background worker and carries the lock it must\n // release. Hidden from --help; users should never pass it.\n .addOption(\n new Option(\n \"--worker-lock <path>\",\n \"Internal: detached worker lock path\",\n ).hideHelp(),\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n $ appkit generate-types\n $ appkit generate-types . shared/appkit-types/analytics.d.ts\n $ appkit generate-types . shared/appkit-types/analytics.d.ts my-warehouse-id\n $ appkit generate-types --no-cache\n $ appkit generate-types --wait # CI: wait for the warehouse and fail on a cold one`,\n )\n .action(generateTypesAction);\n"],"mappings":";;;;;;;;;;;;;;;;;;AAqBA,SAAgB,mBAAmB,SAEH;AAC9B,QAAO,SAAS,OAAO,aAAa;;;;;;;AAsBtC,eAAe,iBACb,SACA,SACA,aACA,SACA;AACA,KAAI;EACF,MAAM,kBAAkB,WAAW,QAAQ,KAAK;EAChD,MAAM,UAAU,SAAS,WAAW;EACpC,MAAM,OAAO,mBAAmB,QAAQ;EAExC,MAAM,UAAU,MAAM,OAAO;EAG7B,MAAM,sBACJ,eAAe,QAAQ,IAAI;AAE7B,MAAI,qBAAqB;GACvB,MAAM,kBACJ,WACA,KAAK,KAAK,QAAQ,KAAK,EAAE,qCAAqC;GAEhE,MAAM,cAAc,KAAK,KAAK,iBAAiB,iBAAiB;GAChE,MAAM,oBAAoB,KAAK,KAC7B,iBACA,sBACD;GACD,MAAM,aAAa,GAAG,WAAW,YAAY;GAC7C,MAAM,iBAAiB,GAAG,WAAW,kBAAkB;AAKvD,OAAI,cAAc,gBAAgB;AAChC,UAAM,QAAQ,uBAAuB;KACnC,aAAa,aAAa,cAAc;KACxC,mBAAmB,iBAAiB,oBAAoB;KACxD,SAAS;KACT,aAAa;KACb;KACA;KACD,CAAC;AAEF,QAAI,WACF,SAAQ,IAAI,0BAA0B,kBAAkB;IAG1D,MAAM,eAAe,KAAK,KAAK,mBAAmB,mBAAmB;AACrE,QAAI,GAAG,WAAW,aAAa,EAAE;KAC/B,MAAM,WAAW,KAAK,QAAQ,gBAAgB;AAC9C,aAAQ,IACN,2BAA2B,KAAK,KAAK,UAAU,oBAAoB,GACpE;;;QAIL,SAAQ,MACN,oGACD;EAIH,MAAM,iBAAiB,KAAK,KAC1B,QAAQ,KAAK,EACb,mCACD;AACD,QAAM,QAAQ,qBAAqB;GACjC,SAAS;GACT;GACD,CAAC;AACF,UAAQ,IAAI,4BAA4B,iBAAiB;UAClD,OAAO;AACd,MACE,iBAAiB,SACjB,MAAM,QAAQ,SAAS,qBAAqB,EAC5C;AACA,WAAQ,MACN,+EACD;AACD,WAAQ,MAAM,yDAAyD;AACvE,WAAQ,KAAK,EAAE;;AAMjB,MACE,iBAAiB,UAChB,MAAM,SAAS,wBACd,MAAM,SAAS,sBACjB;AACA,WAAQ,MAAM,MAAM,QAAQ;AAC5B,WAAQ,KAAK,EAAE;;AAEjB,QAAM;;;;;;;;;;;;;;;;;;;;;;;;AAyBV,SAAgB,mBACd,UACA,SACS;CAGT,MAAM,WAAW,QAAQ,KAAK;CAM9B,MAAM,cAAwB,EAAE;AAChC,MAAK,MAAM,SAAS;EAAC,QAAQ;EAAS,QAAQ;EAAS,QAAQ;EAAY,EAAE;AAC3E,MAAI,UAAU,OAAW;AACzB,cAAY,KAAK,MAAM;;CAGzB,MAAM,OAAO;EAOX,GAAG,QAAQ;EACX;EACA;EACA;EACA;EACA;EACA,GAAG;EACJ;AAED,KAAI;AAKF,EAJc,MAAM,QAAQ,UAAU,MAAM;GAC1C,UAAU;GACV,OAAO;GACR,CAAC,CACI,OAAO;AACb,SAAO;UACA,OAAO;AAEd,UAAQ,MACN,4CACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAEzD;AACD,SAAO;;;;;;;;;;;;;;;AAgBX,eAAe,oBACb,SACA,SACA,aACA,SACA;CACA,MAAM,WAAW,OAAO,QAAQ,eAAe;AAK/C,KAAI,YAAY,QAAQ,YAAY;EAClC,MAAM,WAAW,QAAQ;AACzB,UAAQ,KAAK,cAAc,iBAAiB,SAAS,CAAC;;AAGxD,KAAI;AACF,QAAM,iBAAiB,SAAS,SAAS,aAAa,QAAQ;WACtD;AACR,MAAI,YAAY,QAAQ,WACtB,kBAAiB,QAAQ,WAAW;;AAOxC,KAAI,CAAC,YAAY,mBAAmB,QAAQ,KAAK,gBAAgB;EAE/D,MAAM,WAAW,iBADO,WAAW,QAAQ,KAAK,CACE;AAElD,MAAI,iBAAiB,SAAS,CAC5B,oBAAmB,UAAU;GAAE;GAAS;GAAS;GAAa,CAAC;MAE/D,SAAQ,IAAI,8CAA8C;;;AAKhE,MAAa,uBAAuB,IAAI,QAAQ,iBAAiB,CAC9D,YAAY,6CAA6C,CACzD,SAAS,aAAa,iCAAiC,QAAQ,KAAK,CAAC,CACrE,SACC,aACA,oBACA,KAAK,KAAK,QAAQ,KAAK,EAAE,qCAAqC,CAC/D,CACA,SAAS,iBAAiB,0BAA0B,CACpD,OAAO,cAAc,sCAAsC,CAC3D,OACC,UACA,iEACD,CAGA,UACC,IAAI,OACF,wBACA,sCACD,CAAC,UAAU,CACb,CACA,YACC,SACA;;;;;;wFAOD,CACA,OAAO,oBAAoB"}
@@ -0,0 +1,14 @@
1
+ //#region src/schemas/metric-fqn.ts
2
+ /**
3
+ * Basename of the metric-view declarations file, resolved inside a
4
+ * `config/metric-views/` folder. Single source of truth shared by the analytics
5
+ * runtime (`plugins/analytics/mv`), the type-generator, its Vite watcher, and
6
+ * the `generate-types` CLI. It lives in this zod-free module (rather than the
7
+ * canonical `metric-source.ts` schema) so the type-generator can import it
8
+ * without pulling zod into its locked dependency graph.
9
+ */
10
+ const METRIC_CONFIG_FILE = "definitions.json";
11
+
12
+ //#endregion
13
+ export { METRIC_CONFIG_FILE };
14
+ //# sourceMappingURL=metric-fqn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-fqn.js","names":[],"sources":["../../src/schemas/metric-fqn.ts"],"sourcesContent":["/**\n * Unity Catalog object-name grammar\n * the single source of truth for metric view FQN (Fully Qualified Name).\n *\n * A metric view's `source` FQN is validated in two places that must agree:\n *\n * 1. The canonical Zod schema (`./metric-source.ts`), which composes the\n * three-part FQN regex from {@link UC_FQN_PATTERN} for IDE/CI and the\n * generated JSON schema (`docs/static/schemas/metric-source.schema.json`).\n * 2. The type-generator runtime (`packages/appkit/src/type-generator/mv-registry/config.ts`),\n * which imports {@link UC_FQN_PATTERN} as a plain value to validate each\n * dot-split segment.\n *\n *\n * A Unity Catalog object name:\n * - cannot exceed 255 characters ({@link MAX_UC_OBJECT_NAME_LENGTH}); and\n * - cannot contain any of these characters:\n * - period (`.`)\n * - space (U+0020)\n * - forward slash (`/`)\n * - all ASCII control characters (U+0000-U+001F)\n * - the DELETE character (U+007F)\n *\n * Every other character is permitted in a quoted name, including non-ASCII\n * letters (the docs demonstrate Chinese/Russian/Portuguese names) and hyphens.\n *\n * @note the regex is the per-segment character set; structure (3 parts) and length are intentionally left to the callers.\n */\n\nexport const MAX_UC_OBJECT_NAME_LENGTH = 255;\n\n/**\n * Basename of the metric-view declarations file, resolved inside a\n * `config/metric-views/` folder. Single source of truth shared by the analytics\n * runtime (`plugins/analytics/mv`), the type-generator, its Vite watcher, and\n * the `generate-types` CLI. It lives in this zod-free module (rather than the\n * canonical `metric-source.ts` schema) so the type-generator can import it\n * without pulling zod into its locked dependency graph.\n */\nexport const METRIC_CONFIG_FILE = \"definitions.json\";\n\n/**\n * Matches a single, non-empty Unity Catalog object name as it may appear in a backtick-quoted (delimited) identifier.\n *\n * @example\n * UC_FQN_PATTERN.test(\"revenue_metrics\"); // true\n * UC_FQN_PATTERN.test(\"prod-data\"); // true (hyphens are UC-legal)\n * UC_FQN_PATTERN.test(\"cafe\\u0301\"); // true (non-ASCII is UC-legal)\n * UC_FQN_PATTERN.test(\"bad name\"); // false (space is prohibited)\n * UC_FQN_PATTERN.test(\"a/b\"); // false (slash is prohibited)\n */\n// biome-ignore lint/suspicious/noControlCharactersInRegex: UC explicitly prohibits ASCII control characters in object names; this negated class encodes that rule.\nexport const UC_FQN_PATTERN = /^[^\\x00-\\x20\\x7f./]+$/;\n\n/** A metric view FQN is exactly three segments: catalog.schema.metric_view. */\nconst FQN_SEGMENT_COUNT = 3;\n\n/**\n * Total predicate: is `fqn` a well-formed three-part UC metric view FQN?\n * Well-formed = exactly three non-empty, dot-separated segments, each a valid Unity Catalog object name per {@link UC_FQN_PATTERN}.\n * @example\n * isValidFqn(\"main.analytics.revenue\"); // true\n * isValidFqn(\"prod-data.analytics.rev\"); // true (hyphens are UC-legal)\n * isValidFqn(\"main.analytics\"); // false (only two segments)\n */\nexport function isValidFqn(fqn: string): boolean {\n const segments = fqn.split(\".\");\n if (segments.length !== FQN_SEGMENT_COUNT) {\n return false;\n }\n return segments.every((segment) => UC_FQN_PATTERN.test(segment));\n}\n\n/**\n * Quote a dot-separated FQN for safe interpolation into a Spark/Databricks SQL\n * statement.\n *\n * Each dot-split segment is wrapped in backtick-quoted-identifier syntax. The\n * one character that can break out of a backtick-quoted identifier is the\n * backtick itself, escaped by doubling (`` ` `` → `` `` ``) — so every backtick\n * inside a segment is doubled before the segment is wrapped. Control characters\n * and newlines have no valid escape inside a quoted identifier, so a segment\n * containing one is rejected outright.\n *\n * This is a pure, standalone escaper: it is intentionally independent of FQN\n * naming validation ({@link isValidFqn}). Naming validation decides whether an\n * FQN is an acceptable metric source; this function only guarantees that\n * whatever it is handed cannot break out of the quoted identifier it produces.\n * Grammar and quoting live together here so a metric source is validated and\n * escaped against one shared source of truth.\n *\n * An ordinary identifier is unchanged apart from the wrapping backticks:\n * `catalog.schema.view` → `` `catalog`.`schema`.`view` ``.\n *\n * @param fqn - Dot-separated identifier (e.g. `catalog.schema.view`).\n * @returns The backtick-quoted, escaped identifier ready for interpolation.\n * @throws If any segment contains a control character or newline.\n */\nexport function quoteFqnForSql(fqn: string): string {\n return fqn.split(\".\").map(quoteIdentifier).join(\".\");\n}\n\n/**\n * The Unicode \"control\" category (`\\p{Cc}`): C0 (incl. `\\n`, `\\r`, `\\t`), DEL,\n * and C1 — every control character/newline. These have no valid escape inside\n * a backtick-quoted identifier, so a name containing one cannot be safely\n * quoted and is rejected.\n */\nconst CONTROL_OR_NEWLINE = /\\p{Cc}/u;\n\nexport function isValidColumnName(name: string): boolean {\n return name.length > 0 && !CONTROL_OR_NEWLINE.test(name);\n}\n\n/**\n * Quote a single identifier (one column/measure/dimension name, or one FQN\n * segment) as a backtick-delimited identifier for safe SQL interpolation.\n *\n * @throws If `name` contains a control character or newline.\n */\nexport function quoteIdentifier(name: string): string {\n if (CONTROL_OR_NEWLINE.test(name)) {\n throw new Error(\n `Cannot quote identifier \"${name}\" for SQL: it contains a control character or newline, which has no valid escape inside a backtick-quoted identifier.`,\n );\n }\n // Double every backtick, then wrap in backticks.\n return `\\`${name.replace(/`/g, \"``\")}\\``;\n}\n"],"mappings":";;;;;;;;;AAuCA,MAAa,qBAAqB"}
@@ -88,13 +88,13 @@ In blocking mode the generator starts a stopped warehouse, waits (bounded) for i
88
88
 
89
89
  ## Metric-view types[​](#metric-view-types "Direct link to Metric-view types")
90
90
 
91
- `generate-types` (and the Vite plugin) emit metric-view types **additively** — there is no separate command. When a `config/queries/metric-views.json` file is present, the same run that generates your query types also DESCRIBEs each declared [UC Metric View](./docs/plugins/analytics.md) and writes `metric-views.d.ts` into `shared/appkit-types/`:
91
+ `generate-types` (and the Vite plugin) emit metric-view types **additively** — there is no separate command. When a `config/metric-views/definitions.json` file is present, the same run that generates your query types also DESCRIBEs each declared [UC Metric View](./docs/plugins/analytics.md) and writes `metric-views.d.ts` into `shared/appkit-types/`:
92
92
 
93
93
  * `metric-views.d.ts` — augments the `MetricRegistry` interface so `useMetricView('<key>', …)` is autocompleted and type-checked. Each view's measures, dimensions, and their semantic metadata (SQL type, display name, format, time grains) are encoded at the type level.
94
94
 
95
- If `metric-views.json` is absent the metric path stays dormant (nothing is emitted). When present it follows the **same** warehouse-readiness contract as query types: in the default non-blocking run a view that can't be described yet — a cold warehouse, or a bad/unreachable source — is written with permissive types and a warning, while under `--wait` that same situation fails the build so CI never ships incomplete metric types. A malformed `metric-views.json` (invalid JSON, or a source that isn't a three-part UC FQN) fails fast in every mode.
95
+ If `config/metric-views/definitions.json` is absent the metric path stays dormant (nothing is emitted). When present it follows the **same** warehouse-readiness contract as query types: in the default non-blocking run a view that can't be described yet — a cold warehouse, or a bad/unreachable source — is written with permissive types and a warning, while under `--wait` that same situation fails the build so CI never ships incomplete metric types. A malformed `definitions.json` (invalid JSON, or a source that isn't a three-part UC FQN) fails fast in every mode.
96
96
 
97
- `metric-views.json` is keyed by metric key; each entry names the three-part UC FQN of the view and, optionally, the executor it runs as (`app_service_principal`, the default, or `user`):
97
+ `definitions.json` is keyed by metric key; each entry names the three-part UC FQN of the view and, optionally, the executor it runs as (`app_service_principal`, the default, or `user`):
98
98
 
99
99
  ```json
100
100
  {
@@ -86,12 +86,154 @@ The analytics plugin exposes these endpoints (mounted under `/api/analytics`):
86
86
 
87
87
  * `POST /api/analytics/query/:query_key`
88
88
  * `GET /api/analytics/arrow-result/:jobId`
89
+ * `POST /api/analytics/metric/:key` — measure a Unity Catalog Metric View (see [Metric views](#metric-views))
89
90
 
90
91
  ## Format options[​](#format-options "Direct link to Format options")
91
92
 
92
93
  * `format: "JSON"` (default) returns JSON rows
93
94
  * `format: "ARROW"` returns an Arrow "statement\_id" payload over SSE, then the client fetches binary Arrow from `/api/analytics/arrow-result/:jobId`
94
95
 
96
+ ## Metric views[​](#metric-views "Direct link to Metric views")
97
+
98
+ `POST /api/analytics/metric/:key` measures a [Unity Catalog Metric View](https://docs.databricks.com/en/metric-views/index.html) that you declared in `config/metric-views/definitions.json`. Instead of writing SQL, the caller sends a structured request — which measures to aggregate, which dimensions to group by, and an optional filter — and the plugin builds and runs the `SELECT MEASURE(...) ... GROUP BY ALL` for you against the view.
99
+
100
+ The route is **dormant until `config/metric-views/definitions.json` exists**: with no config file, every metric key returns `404`. Declaring the file (and generating types) is covered in [Metric-view types](./docs/development/type-generation.md#metric-view-types); this section documents the runtime endpoint that config activates.
101
+
102
+ ### Request body[​](#request-body "Direct link to Request body")
103
+
104
+ ```text
105
+ POST /api/analytics/metric/:key
106
+ Content-Type: application/json
107
+
108
+ {
109
+ "measures": ["arr", "revenue"],
110
+ "dimensions": ["region", "order_date"],
111
+ "timeGrain": "month",
112
+ "timeDimension": "order_date",
113
+ "filter": { "member": "region", "operator": "in", "values": ["EMEA", "APAC"] },
114
+ "limit": 100
115
+ }
116
+
117
+ ```
118
+
119
+ `:key` is a metric key from `definitions.json`. The body fields:
120
+
121
+ | Field | Type | Required | Description |
122
+ | --------------- | ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
123
+ | `measures` | `string[]` | yes | Measures to aggregate. At least 1, at most 50. Each becomes `MEASURE(<name>) AS <name>`. |
124
+ | `dimensions` | `string[]` | no | Dimensions to group by (max 20). Selected verbatim and grouped via `GROUP BY ALL`. |
125
+ | `filter` | object | no | Structured predicate tree translated into a parameterized `WHERE` clause (see [Filters](#filters)). |
126
+ | `timeGrain` | `string` | no | Bucket a time dimension via `date_trunc('<grain>', …)` — e.g. `day`, `month`. Requires `timeDimension`. |
127
+ | `timeDimension` | `string` | no | The single dimension `timeGrain` buckets. Must be one of `dimensions`. Required whenever `timeGrain` is set. |
128
+ | `limit` | `number` | no | Positive integer row cap (max 100000). |
129
+ | `format` | `string` | no | `JSON_ARRAY` (default). `JSON` is accepted as a deprecated alias for it; Arrow formats (`ARROW`, `ARROW_STREAM`) are rejected on this route. |
130
+
131
+ Measures and dimensions must be unique across both lists — a name cannot repeat, nor appear as both a measure and a dimension.
132
+
133
+ ### How the request becomes SQL[​](#how-the-request-becomes-sql "Direct link to How the request becomes SQL")
134
+
135
+ Given a view registered as `catalog.schema.revenue_metrics`, the request above produces (measures and dimensions are sorted for a deterministic SELECT list):
136
+
137
+ ```sql
138
+ SELECT MEASURE(`arr`) AS `arr`, MEASURE(`revenue`) AS `revenue`,
139
+ date_trunc('month', `order_date`) AS `order_date`, `region`
140
+ FROM `catalog`.`schema`.`revenue_metrics`
141
+ WHERE `region` IN (:f_0, :f_1)
142
+ GROUP BY ALL
143
+ LIMIT 100
144
+
145
+ ```
146
+
147
+ The metric view's FQN and every measure/dimension identifier are backtick-quoted; filter values are bound as parameters (`:f_0`, `:f_1`, …), never interpolated into the SQL string.
148
+
149
+ ### Filters[​](#filters "Direct link to Filters")
150
+
151
+ `filter` is a recursive tree. A leaf is a single predicate:
152
+
153
+ ```json
154
+ { "member": "region", "operator": "equals", "values": ["EMEA"] }
155
+
156
+ ```
157
+
158
+ Predicates combine with `and` / `or` groups, which can nest:
159
+
160
+ ```json
161
+ {
162
+ "and": [
163
+ { "member": "region", "operator": "in", "values": ["EMEA", "APAC"] },
164
+ {
165
+ "or": [
166
+ { "member": "segment", "operator": "equals", "values": ["Enterprise"] },
167
+ { "member": "deal_size", "operator": "gt", "values": [50000] }
168
+ ]
169
+ }
170
+ ]
171
+ }
172
+
173
+ ```
174
+
175
+ The operator vocabulary:
176
+
177
+ | Operator | SQL | Values |
178
+ | --------------------------- | ----------------------- | ------------------ |
179
+ | `equals` | `=` | exactly one |
180
+ | `notEquals` | `<>` | exactly one |
181
+ | `in` | `IN (…)` | one or more |
182
+ | `notIn` | `NOT IN (…)` | one or more |
183
+ | `gt` / `gte` / `lt` / `lte` | `>` / `>=` / `<` / `<=` | exactly one |
184
+ | `contains` | `LIKE :param` | exactly one string |
185
+ | `notContains` | `NOT LIKE :param` | exactly one string |
186
+ | `set` | `IS NOT NULL` | none |
187
+ | `notSet` | `IS NULL` | none |
188
+
189
+ For `contains` / `notContains`, the `%…%` wildcards are applied to the *bound parameter value* (`%value%`), not written into the SQL text — so the value is never interpolated, consistent with every other operator.
190
+
191
+ Empty groups of either kind (`{ "or": [] }`, `{ "and": [] }`) are rejected with `400` — every `and` / `or` group must contain at least one predicate. To send no filter, omit the `filter` field entirely rather than passing an empty group.
192
+
193
+ Filters are bounded to keep hostile input from exhausting the server: nesting depth ≤ 8, ≤ 100 children per `and` / `or` group, and ≤ 1000 values per predicate. A request that exceeds a cap is rejected with `400`.
194
+
195
+ ### Executors (cache scope)[​](#executors-cache-scope "Direct link to Executors (cache scope)")
196
+
197
+ Each entry in `definitions.json` names the executor the query runs as, which also sets the cache scope. This is fixed by config, not the request:
198
+
199
+ | `executor` | Runs as | Cache |
200
+ | --------------------------------- | ---------------------------------- | ----------------------- |
201
+ | `app_service_principal` (default) | The app service principal | Shared across all users |
202
+ | `user` | The requesting user (on-behalf-of) | Per user |
203
+
204
+ This mirrors the `<key>.sql` vs `<key>.obo.sql` distinction for [file-based queries](#execution-context).
205
+
206
+ ### Response[​](#response "Direct link to Response")
207
+
208
+ The response is the same SSE stream as `POST /api/analytics/query/:query_key`. If the SQL warehouse is cold it first emits `warehouse_status` events (see [Warehouse readiness](#warehouse-readiness)), then a single `result` event with the rows as objects:
209
+
210
+ ```json
211
+ {
212
+ "type": "result",
213
+ "data": [
214
+ {
215
+ "region": "EMEA",
216
+ "order_date": "2025-01-01",
217
+ "arr": 1200000,
218
+ "revenue": 340000
219
+ }
220
+ ]
221
+ }
222
+
223
+ ```
224
+
225
+ On failure it emits an `error` event instead.
226
+
227
+ ### Errors and behavior[​](#errors-and-behavior "Direct link to Errors and behavior")
228
+
229
+ | Status | Body | When |
230
+ | ------ | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
231
+ | `404` | `{ "error": "Metric not found" }` | `:key` is not declared in `definitions.json` (also the response for every key when the file is absent). |
232
+ | `400` | `{ "error": "Invalid metric request body (fields: …)", "code": … }` | The request body fails validation. The message names only the offending field paths, never the submitted values. |
233
+ | `503` | `{ "error": "Metric registry not available", "code": "METRIC_REGISTRY_LOAD_FAILED" }` | `definitions.json` is present but malformed or unreadable. |
234
+
235
+ Editing `definitions.json` is picked up on the next request — no server restart is needed. A previously malformed file that you fix likewise starts working on the next request.
236
+
95
237
  ## Frontend usage[​](#frontend-usage "Direct link to Frontend usage")
96
238
 
97
239
  ### useAnalyticsQuery[​](#useanalyticsquery "Direct link to useAnalyticsQuery")
@@ -101,7 +243,11 @@ React hook that subscribes to an analytics query over SSE and returns its latest
101
243
  ```ts
102
244
  import { useAnalyticsQuery } from "@databricks/appkit-ui/react";
103
245
 
104
- const { data, loading, error } = useAnalyticsQuery(queryKey, parameters, options);
246
+ const { data, loading, error } = useAnalyticsQuery(
247
+ queryKey,
248
+ parameters,
249
+ options,
250
+ );
105
251
 
106
252
  ```
107
253
 
@@ -109,8 +255,8 @@ const { data, loading, error } = useAnalyticsQuery(queryKey, parameters, options
109
255
 
110
256
  ```ts
111
257
  {
112
- data: T | null; // query result (typed array for JSON, TypedArrowTable for ARROW)
113
- loading: boolean; // true while the query is executing
258
+ data: T | null; // query result (typed array for JSON, TypedArrowTable for ARROW)
259
+ loading: boolean; // true while the query is executing
114
260
  error: string | null; // error message, or null on success
115
261
  warehouseStatus: WarehouseStatus | null; // see "Warehouse readiness" below
116
262
  }
@@ -139,8 +285,10 @@ This means a cold start no longer freezes the UI on a stalled spinner. Render th
139
285
  import { useAnalyticsQuery } from "@databricks/appkit-ui/react";
140
286
 
141
287
  function SpendTable() {
142
- const { data, loading, error, warehouseStatus } =
143
- useAnalyticsQuery("spend_summary", params);
288
+ const { data, loading, error, warehouseStatus } = useAnalyticsQuery(
289
+ "spend_summary",
290
+ params,
291
+ );
144
292
 
145
293
  if (warehouseStatus && warehouseStatus.state !== "RUNNING") {
146
294
  return <div>Warehouse is {warehouseStatus.state.toLowerCase()}…</div>;
@@ -184,10 +332,7 @@ export function AppShell({ children }) {
184
332
  If you already render your own `<Toaster />` for unrelated app toasts, drop the indicator and call `useResourceStatusToaster()` instead so resource-status toasts share that single Toaster:
185
333
 
186
334
  ```tsx
187
- import {
188
- useResourceStatusToaster,
189
- Toaster,
190
- } from "@databricks/appkit-ui/react";
335
+ import { useResourceStatusToaster, Toaster } from "@databricks/appkit-ui/react";
191
336
 
192
337
  function App() {
193
338
  useResourceStatusToaster();
@@ -207,7 +352,8 @@ For a fully custom toast body, pass `render` (rendered through `toast.custom`):
207
352
  <ResourceStatusIndicator
208
353
  render={(agg) => (
209
354
  <div className="rounded-lg border bg-background p-3 shadow">
210
- {agg.worst?.kind} {agg.worst?.state.toLowerCase()} ({agg.activeCount} waiting)
355
+ {agg.worst?.kind} {agg.worst?.state.toLowerCase()} ({agg.activeCount}{" "}
356
+ waiting)
211
357
  </div>
212
358
  )}
213
359
  />
@@ -221,8 +367,7 @@ To override copy for a specific kind without rewriting the whole UI, pass `rende
221
367
  renderers={{
222
368
  warehouse: {
223
369
  title: () => "Spinning up your data",
224
- description: (_s, agg) =>
225
- `${agg.affectedLabels.length} chart(s) waiting`,
370
+ description: (_s, agg) => `${agg.affectedLabels.length} chart(s) waiting`,
226
371
  },
227
372
  }}
228
373
  />
@@ -254,11 +399,9 @@ import { useEffect, useId } from "react";
254
399
 
255
400
  function useLakebaseReadiness() {
256
401
  const id = useId();
257
- const { publish, unpublish } = useResourceStatusPublisher(
258
- id,
259
- "lakebase",
260
- { kindHint: "lakebase" },
261
- );
402
+ const { publish, unpublish } = useResourceStatusPublisher(id, "lakebase", {
403
+ kindHint: "lakebase",
404
+ });
262
405
 
263
406
  useEffect(() => {
264
407
  publish({
@@ -288,21 +431,27 @@ import { sql } from "@databricks/appkit-ui/js";
288
431
  import { Skeleton } from "@databricks/appkit-ui";
289
432
 
290
433
  function SpendTable() {
291
- const params = useMemo(() => ({
292
- startDate: sql.date("2025-01-01"),
293
- endDate: sql.date("2025-12-31"),
294
- }), []);
434
+ const params = useMemo(
435
+ () => ({
436
+ startDate: sql.date("2025-01-01"),
437
+ endDate: sql.date("2025-12-31"),
438
+ }),
439
+ [],
440
+ );
295
441
 
296
442
  const { data, loading, error } = useAnalyticsQuery("spend_summary", params);
297
443
 
298
444
  if (loading) return <Skeleton className="h-32 w-full" />;
299
445
  if (error) return <div className="text-destructive">{error}</div>;
300
- if (!data?.length) return <div className="text-muted-foreground">No results</div>;
446
+ if (!data?.length)
447
+ return <div className="text-muted-foreground">No results</div>;
301
448
 
302
449
  return (
303
450
  <ul>
304
451
  {data.map((row) => (
305
- <li key={row.id}>{row.name}: ${row.cost_usd}</li>
452
+ <li key={row.id}>
453
+ {row.name}: ${row.cost_usd}
454
+ </li>
306
455
  ))}
307
456
  </ul>
308
457
  );
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@databricks/appkit-ui",
3
3
  "type": "module",
4
- "version": "0.46.0",
4
+ "version": "0.47.0",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": [
7
7
  "**/*.css"
package/sbom.cdx.json CHANGED
@@ -1 +1 @@
1
- {"bomFormat":"CycloneDX","specVersion":"1.6","serialNumber":"urn:uuid:8da66ff0-544f-46a4-af77-ee029fa98b8e","version":1,"metadata":{"timestamp":"2026-07-22T11:27:34Z","tools":{"components":[{"group":"@cyclonedx","name":"cdxgen","version":"12.1.2","purl":"pkg:npm/%40cyclonedx/cdxgen@12.1.2","type":"application","bom-ref":"pkg:npm/@cyclonedx/cdxgen@12.1.2","publisher":"OWASP Foundation","authors":[{"name":"OWASP Foundation"}]}]},"authors":[{"name":"OWASP Foundation"}],"lifecycles":[{"phase":"build"}],"component":{"name":"appkit-ui","group":"@databricks","version":"0.46.0","purl":"pkg:npm/%40databricks/appkit-ui@0.46.0","bom-ref":"pkg:npm/@databricks/appkit-ui@0.46.0","type":"application","licenses":[{"license":{"id":"Apache-2.0","url":"https://opensource.org/licenses/Apache-2.0"}}],"externalReferences":[{"type":"vcs","url":"git+https://github.com/databricks/appkit.git"}]},"properties":[{"name":"cdx:bom:componentTypes","value":"npm"},{"name":"cdx:bom:componentNamespaces","value":"@radix-ui\\n@tanstack"},{"name":"cdx:bom:componentSrcFiles","value":"packages/appkit-ui/node_modules/@radix-ui/react-accordion/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-alert-dialog/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-aspect-ratio/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-avatar/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-checkbox/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-collapsible/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-context-menu/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-dialog/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-dropdown-menu/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-hover-card/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-label/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-menubar/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-navigation-menu/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-popover/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-progress/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-radio-group/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-scroll-area/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-select/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-separator/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-slider/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-slot/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-switch/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-tabs/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-toggle-group/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-toggle/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-tooltip/package.json\\npackages/appkit-ui/node_modules/@tanstack/react-table/package.json\\npackages/appkit-ui/node_modules/apache-arrow/package.json\\npackages/appkit-ui/node_modules/class-variance-authority/package.json\\npackages/appkit-ui/node_modules/clsx/package.json\\npackages/appkit-ui/node_modules/cmdk/package.json\\npackages/appkit-ui/node_modules/dompurify/package.json\\npackages/appkit-ui/node_modules/echarts-for-react/package.json\\npackages/appkit-ui/node_modules/echarts/package.json\\npackages/appkit-ui/node_modules/embla-carousel-react/package.json\\npackages/appkit-ui/node_modules/input-otp/package.json\\npackages/appkit-ui/node_modules/lucide-react/package.json\\npackages/appkit-ui/node_modules/marked/package.json\\npackages/appkit-ui/node_modules/next-themes/package.json\\npackages/appkit-ui/node_modules/react-day-picker/package.json\\npackages/appkit-ui/node_modules/react-hook-form/package.json\\npackages/appkit-ui/node_modules/react-resizable-panels/package.json\\npackages/appkit-ui/node_modules/react/package.json\\npackages/appkit-ui/node_modules/shared/package.json\\npackages/appkit-ui/node_modules/sonner/package.json\\npackages/appkit-ui/node_modules/tailwind-merge/package.json\\npackages/appkit-ui/node_modules/vaul/package.json"}]},"components":[{"group":"@radix-ui","name":"react-accordion","version":"1.2.12","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-accordion@1.2.12","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-accordion@1.2.12","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-accordion/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-accordion"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-accordion/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-accordion/package.json"}],"occurrences":[{"location":"dist/react/ui/accordion.js#4"},{"location":"tmp/dist/react/ui/accordion.js#4"},{"location":"src/react/ui/accordion.tsx#2"}]}},{"group":"@radix-ui","name":"react-alert-dialog","version":"1.1.15","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-alert-dialog@1.1.15","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-alert-dialog@1.1.15","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-alert-dialog/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-alert-dialog"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-alert-dialog/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-alert-dialog/package.json"}],"occurrences":[{"location":"dist/react/ui/alert-dialog.js#5"},{"location":"tmp/dist/react/ui/alert-dialog.js#5"},{"location":"src/react/ui/alert-dialog.tsx#2"}]}},{"group":"@radix-ui","name":"react-aspect-ratio","version":"1.1.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-aspect-ratio@1.1.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-aspect-ratio@1.1.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-aspect-ratio/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-aspect-ratio"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-aspect-ratio/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-aspect-ratio/package.json"}],"occurrences":[{"location":"dist/react/ui/aspect-ratio.js#4"},{"location":"tmp/dist/react/ui/aspect-ratio.js#4"},{"location":"src/react/ui/aspect-ratio.tsx#3"}]}},{"group":"@radix-ui","name":"react-avatar","version":"1.1.11","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-avatar@1.1.11","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-avatar@1.1.11","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-avatar/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-avatar"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-avatar/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-avatar/package.json"}],"occurrences":[{"location":"dist/react/ui/avatar.js#3"},{"location":"tmp/dist/react/ui/avatar.js#3"},{"location":"src/react/ui/avatar.tsx#2"}]}},{"group":"@radix-ui","name":"react-checkbox","version":"1.3.3","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-checkbox@1.3.3","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-checkbox@1.3.3","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-checkbox/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-checkbox"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-checkbox/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-checkbox/package.json"}],"occurrences":[{"location":"dist/react/ui/checkbox.js#6"},{"location":"tmp/dist/react/ui/checkbox.js#6"},{"location":"src/react/ui/checkbox.tsx#4"}]}},{"group":"@radix-ui","name":"react-collapsible","version":"1.1.12","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-collapsible@1.1.12","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-collapsible@1.1.12","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-collapsible/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-collapsible"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-collapsible/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-collapsible/package.json"}],"occurrences":[{"location":"dist/react/ui/collapsible.js#2"},{"location":"tmp/dist/react/ui/collapsible.js#2"},{"location":"src/react/ui/collapsible.tsx#1"}]}},{"group":"@radix-ui","name":"react-context-menu","version":"2.2.16","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-context-menu@2.2.16","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-context-menu@2.2.16","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-context-menu/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-context-menu"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-context-menu/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-context-menu/package.json"}],"occurrences":[{"location":"dist/react/ui/context-menu.js#7"},{"location":"tmp/dist/react/ui/context-menu.js#7"},{"location":"src/react/ui/context-menu.tsx#4"}]}},{"group":"@radix-ui","name":"react-dialog","version":"1.1.15","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-dialog@1.1.15","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-dialog@1.1.15","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-dialog/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-dialog"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-dialog/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-dialog/package.json"}],"occurrences":[{"location":"dist/react/ui/dialog.js#5"},{"location":"dist/react/ui/sheet.js#5"},{"location":"tmp/dist/react/ui/dialog.js#5"},{"location":"tmp/dist/react/ui/sheet.js#5"},{"location":"src/react/ui/dialog.tsx#2"},{"location":"src/react/ui/sheet.tsx#2"}]}},{"group":"@radix-ui","name":"react-dropdown-menu","version":"2.1.16","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-dropdown-menu@2.1.16","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-dropdown-menu@2.1.16","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-dropdown-menu/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-dropdown-menu"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-dropdown-menu/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-dropdown-menu/package.json"}],"occurrences":[{"location":"dist/react/ui/dropdown-menu.js#5"},{"location":"tmp/dist/react/ui/dropdown-menu.js#5"},{"location":"src/react/ui/dropdown-menu.tsx#2"}]}},{"group":"@radix-ui","name":"react-hover-card","version":"1.1.15","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-hover-card@1.1.15","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-hover-card@1.1.15","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-hover-card/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-hover-card"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-hover-card/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-hover-card/package.json"}],"occurrences":[{"location":"dist/react/ui/hover-card.js#6"},{"location":"tmp/dist/react/ui/hover-card.js#6"},{"location":"src/react/ui/hover-card.tsx#4"}]}},{"group":"@radix-ui","name":"react-label","version":"2.1.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-label@2.1.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-label@2.1.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-label/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-label"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-label/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-label/package.json"}],"occurrences":[{"location":"dist/react/ui/label.js#5"},{"location":"tmp/dist/react/ui/label.js#5"},{"location":"src/react/ui/form.tsx#4"},{"location":"src/react/ui/label.tsx#4"}]}},{"group":"@radix-ui","name":"react-menubar","version":"1.1.16","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-menubar@1.1.16","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-menubar@1.1.16","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-menubar/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-menubar"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-menubar/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-menubar/package.json"}],"occurrences":[{"location":"dist/react/ui/menubar.js#5"},{"location":"tmp/dist/react/ui/menubar.js#5"},{"location":"src/react/ui/menubar.tsx#2"}]}},{"group":"@radix-ui","name":"react-navigation-menu","version":"1.2.14","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-navigation-menu@1.2.14","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-navigation-menu@1.2.14","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-navigation-menu/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-navigation-menu"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-navigation-menu/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-navigation-menu/package.json"}],"occurrences":[{"location":"dist/react/ui/navigation-menu.js#5"},{"location":"tmp/dist/react/ui/navigation-menu.js#5"},{"location":"src/react/ui/navigation-menu.tsx#2"}]}},{"group":"@radix-ui","name":"react-popover","version":"1.1.15","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-popover@1.1.15","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-popover@1.1.15","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-popover/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-popover"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-popover/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-popover/package.json"}],"occurrences":[{"location":"dist/react/ui/popover.js#6"},{"location":"tmp/dist/react/ui/popover.js#6"},{"location":"src/react/ui/popover.tsx#4"}]}},{"group":"@radix-ui","name":"react-progress","version":"1.1.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-progress@1.1.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-progress@1.1.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-progress/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-progress"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-progress/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-progress/package.json"}],"occurrences":[{"location":"dist/react/ui/progress.js#3"},{"location":"tmp/dist/react/ui/progress.js#3"},{"location":"src/react/ui/progress.tsx#2"}]}},{"group":"@radix-ui","name":"react-radio-group","version":"1.3.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-radio-group@1.3.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-radio-group@1.3.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-radio-group/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-radio-group"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-radio-group/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-radio-group/package.json"}],"occurrences":[{"location":"dist/react/ui/radio-group.js#6"},{"location":"tmp/dist/react/ui/radio-group.js#6"},{"location":"src/react/ui/radio-group.tsx#4"}]}},{"group":"@radix-ui","name":"react-scroll-area","version":"1.2.10","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-scroll-area@1.2.10","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-scroll-area@1.2.10","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-scroll-area/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-scroll-area"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-scroll-area/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-scroll-area/package.json"}],"occurrences":[{"location":"dist/react/ui/scroll-area.js#5"},{"location":"tmp/dist/react/ui/scroll-area.js#5"},{"location":"src/react/ui/scroll-area.tsx#4"}]}},{"group":"@radix-ui","name":"react-select","version":"2.2.6","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-select@2.2.6","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-select@2.2.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-select/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-select"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-select/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-select/package.json"}],"occurrences":[{"location":"dist/react/ui/select.js#5"},{"location":"tmp/dist/react/ui/select.js#5"},{"location":"src/react/ui/select.tsx#2"}]}},{"group":"@radix-ui","name":"react-separator","version":"1.1.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-separator@1.1.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-separator@1.1.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-separator/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-separator"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-separator/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-separator/package.json"}],"occurrences":[{"location":"dist/react/ui/separator.js#5"},{"location":"tmp/dist/react/ui/separator.js#5"},{"location":"src/react/ui/separator.tsx#4"}]}},{"group":"@radix-ui","name":"react-slider","version":"1.3.6","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-slider@1.3.6","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-slider@1.3.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-slider/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-slider"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-slider/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-slider/package.json"}],"occurrences":[{"location":"dist/react/ui/slider.js#6"},{"location":"tmp/dist/react/ui/slider.js#6"},{"location":"src/react/ui/slider.tsx#4"}]}},{"group":"@radix-ui","name":"react-slot","version":"1.2.4","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-slot@1.2.4","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-slot@1.2.4","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-slot/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-slot,Slot,@radix-ui/react-slot/Slot"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-slot/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-slot/package.json"}],"occurrences":[{"location":"dist/react/ui/badge.js#3"},{"location":"dist/react/ui/breadcrumb.js#4"},{"location":"dist/react/ui/button-group.js#4"},{"location":"dist/react/ui/button.js#3"},{"location":"dist/react/ui/form.js#7"},{"location":"dist/react/ui/item.js#4"},{"location":"dist/react/ui/sidebar.js#14"},{"location":"tmp/dist/react/ui/badge.js#3"},{"location":"tmp/dist/react/ui/breadcrumb.js#4"},{"location":"tmp/dist/react/ui/button-group.js#4"},{"location":"tmp/dist/react/ui/button.js#3"},{"location":"tmp/dist/react/ui/form.js#7"},{"location":"tmp/dist/react/ui/item.js#4"},{"location":"tmp/dist/react/ui/sidebar.js#14"},{"location":"src/react/ui/badge.tsx#2"},{"location":"src/react/ui/breadcrumb.tsx#2"},{"location":"src/react/ui/button-group.tsx#1"},{"location":"src/react/ui/button.tsx#2"},{"location":"src/react/ui/form.tsx#5"},{"location":"src/react/ui/item.tsx#2"},{"location":"src/react/ui/sidebar.tsx#4"}]}},{"group":"@radix-ui","name":"react-switch","version":"1.2.6","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-switch@1.2.6","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-switch@1.2.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-switch/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-switch"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-switch/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-switch/package.json"}],"occurrences":[{"location":"dist/react/ui/switch.js#5"},{"location":"tmp/dist/react/ui/switch.js#5"},{"location":"src/react/ui/switch.tsx#4"}]}},{"group":"@radix-ui","name":"react-tabs","version":"1.1.13","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-tabs@1.1.13","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-tabs@1.1.13","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-tabs/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-tabs"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-tabs/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-tabs/package.json"}],"occurrences":[{"location":"dist/react/ui/tabs.js#5"},{"location":"tmp/dist/react/ui/tabs.js#5"},{"location":"src/react/ui/tabs.tsx#4"}]}},{"group":"@radix-ui","name":"react-toggle-group","version":"1.1.11","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-toggle-group@1.1.11","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-toggle-group@1.1.11","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-toggle-group/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-toggle-group"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-toggle-group/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-toggle-group/package.json"}],"occurrences":[{"location":"dist/react/ui/toggle-group.js#5"},{"location":"tmp/dist/react/ui/toggle-group.js#5"},{"location":"src/react/ui/toggle-group.tsx#2"}]}},{"group":"@radix-ui","name":"react-toggle","version":"1.1.10","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-toggle@1.1.10","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-toggle@1.1.10","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-toggle/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-toggle"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-toggle/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-toggle/package.json"}],"occurrences":[{"location":"dist/react/ui/toggle.js#4"},{"location":"tmp/dist/react/ui/toggle.js#4"},{"location":"src/react/ui/toggle.tsx#2"}]}},{"group":"@radix-ui","name":"react-tooltip","version":"1.2.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-tooltip@1.2.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-tooltip@1.2.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-tooltip/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-tooltip"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-tooltip/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-tooltip/package.json"}],"occurrences":[{"location":"dist/react/ui/tooltip.js#6"},{"location":"tmp/dist/react/ui/tooltip.js#6"},{"location":"src/react/ui/tooltip.tsx#4"}]}},{"authors":[{"name":"Tanner Linsley"}],"group":"@tanstack","name":"react-table","version":"8.21.3","description":"Headless UI for building powerful tables & datagrids for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40tanstack/react-table@8.21.3","externalReferences":[{"type":"website","url":"https://tanstack.com/table"},{"type":"vcs","url":"https://github.com/TanStack/table.git"}],"type":"library","bom-ref":"pkg:npm/@tanstack/react-table@8.21.3","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@tanstack/react-table/package.json"},{"name":"ImportedModules","value":"@tanstack/react-table,flexRender,@tanstack/react-table/flexRender,getCoreRowModel,@tanstack/react-table/getCoreRowModel,getFilteredRowModel,@tanstack/react-table/getFilteredRowModel,getPaginationRowModel,@tanstack/react-table/getPaginationRowModel,getSortedRowModel,@tanstack/react-table/getSortedRowModel,useReactTable,@tanstack/react-table/useReactTable,RowSelectionState,@tanstack/react-table/RowSelectionState,Table,@tanstack/react-table/Table,Column,@tanstack/react-table/Column,ColumnFiltersState,@tanstack/react-table/ColumnFiltersState,@tanstack/react-table/Row,SortingState,@tanstack/react-table/SortingState,VisibilityState,@tanstack/react-table/VisibilityState"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@tanstack/react-table/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@tanstack/react-table/package.json"}],"occurrences":[{"location":"dist/react/table/data-table.js#10"},{"location":"dist/react/table/table-wrapper.js#11"},{"location":"tmp/dist/react/table/data-table.js#10"},{"location":"tmp/dist/react/table/table-wrapper.js#11"},{"location":"src/react/table/types.ts#1"},{"location":"src/react/table/data-table.tsx#1"},{"location":"src/react/table/table-wrapper.tsx#14"}]}},{"authors":[{"name":"Apache Software Foundation"}],"group":"","name":"apache-arrow","version":"21.1.0","description":"Apache Arrow columnar in-memory format","scope":"required","licenses":[{"license":{"id":"Apache-2.0","url":"https://opensource.org/licenses/Apache-2.0"}}],"purl":"pkg:npm/apache-arrow@21.1.0","externalReferences":[{"type":"website","url":"https://arrow.apache.org/js/"},{"type":"vcs","url":"git+https://github.com/apache/arrow-js.git"}],"type":"library","bom-ref":"pkg:npm/apache-arrow@21.1.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/apache-arrow/package.json"},{"name":"ImportedModules","value":"apache-arrow,Field,apache-arrow/Field,Table,apache-arrow/Table,Vector,apache-arrow/Vector"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/apache-arrow/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/apache-arrow/package.json"}],"occurrences":[{"location":"src/js/arrow/arrow-client.ts#1"},{"location":"src/react/charts/normalize.ts#1"},{"location":"src/react/charts/types.ts#1"},{"location":"src/react/hooks/types.ts#1"},{"location":"src/react/hooks/use-chart-data.ts#1"}]}},{"authors":[{"name":"Joe Bell (https://joebell.co.uk)"}],"group":"","name":"class-variance-authority","version":"0.7.1","description":"Class Variance Authority 🧬","scope":"required","licenses":[{"license":{"id":"Apache-2.0","url":"https://opensource.org/licenses/Apache-2.0"}}],"purl":"pkg:npm/class-variance-authority@0.7.1","externalReferences":[{"type":"vcs","url":"https://github.com/joe-bell/cva#readme"}],"type":"library","bom-ref":"pkg:npm/class-variance-authority@0.7.1","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/class-variance-authority/package.json"},{"name":"ImportedModules","value":"class-variance-authority,class-variance-authority/cva,VariantProps,class-variance-authority/VariantProps"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/class-variance-authority/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/class-variance-authority/package.json"}],"occurrences":[{"location":"dist/react/ui/alert.js#3"},{"location":"dist/react/ui/badge.js#4"},{"location":"dist/react/ui/button-group.js#5"},{"location":"dist/react/ui/button.js#4"},{"location":"dist/react/ui/empty.js#3"},{"location":"dist/react/ui/field.js#6"},{"location":"dist/react/ui/input-group.js#8"},{"location":"dist/react/ui/item.js#5"},{"location":"dist/react/ui/navigation-menu.js#4"},{"location":"dist/react/ui/sidebar.js#15"},{"location":"dist/react/ui/toggle.js#3"},{"location":"tmp/dist/react/ui/alert.js#3"},{"location":"tmp/dist/react/ui/badge.js#4"},{"location":"tmp/dist/react/ui/button-group.js#5"},{"location":"tmp/dist/react/ui/button.js#4"},{"location":"tmp/dist/react/ui/empty.js#3"},{"location":"tmp/dist/react/ui/field.js#6"},{"location":"tmp/dist/react/ui/input-group.js#8"},{"location":"tmp/dist/react/ui/item.js#5"},{"location":"tmp/dist/react/ui/navigation-menu.js#4"},{"location":"tmp/dist/react/ui/sidebar.js#15"},{"location":"tmp/dist/react/ui/toggle.js#3"},{"location":"src/react/ui/alert.tsx#2"},{"location":"src/react/ui/badge.tsx#3"},{"location":"src/react/ui/button-group.tsx#2"},{"location":"src/react/ui/button.tsx#3"},{"location":"src/react/ui/empty.tsx#1"},{"location":"src/react/ui/field.tsx#2"},{"location":"src/react/ui/input-group.tsx#4"},{"location":"src/react/ui/item.tsx#3"},{"location":"src/react/ui/navigation-menu.tsx#3"},{"location":"src/react/ui/sidebar.tsx#5"},{"location":"src/react/ui/toggle-group.tsx#3"},{"location":"src/react/ui/toggle.tsx#3"}]}},{"authors":[{"name":"Luke Edwards <luke.edwards05@gmail.com> (https://lukeed.com)"}],"group":"","name":"clsx","version":"2.1.1","description":"A tiny (239B) utility for constructing className strings conditionally.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/clsx@2.1.1","type":"library","bom-ref":"pkg:npm/clsx@2.1.1","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/clsx/package.json"},{"name":"ImportedModules","value":"clsx,clsx/clsx,ClassValue,clsx/ClassValue"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/clsx/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/clsx/package.json"}],"occurrences":[{"location":"dist/react/lib/utils.js#1"},{"location":"tmp/dist/react/lib/utils.js#1"},{"location":"src/react/lib/utils.ts#1"}]}},{"authors":[{"name":"Paco (https://github.com/pacocoursey)"}],"group":"","name":"cmdk","version":"1.1.1","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/cmdk@1.1.1","externalReferences":[{"type":"vcs","url":"https://github.com/pacocoursey/cmdk#readme"},{"type":"vcs","url":"git+https://github.com/pacocoursey/cmdk.git"}],"type":"library","bom-ref":"pkg:npm/cmdk@1.1.1","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/cmdk/package.json"},{"name":"ImportedModules","value":"cmdk,Command,cmdk/Command"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/cmdk/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/cmdk/package.json"}],"occurrences":[{"location":"dist/react/ui/command.js#5"},{"location":"tmp/dist/react/ui/command.js#5"},{"location":"src/react/ui/command.tsx#2"}]}},{"authors":[{"name":"Dr.-Ing. Mario Heiderich"},{"name":" Cure53 <mario@cure53.de> (https://cure53.de/)"}],"group":"","name":"dompurify","version":"3.4.11","description":"DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. It runs as JavaScript and works in all modern browsers, as well as in Node.js (via jsdom). DOMPurify is written by security people who have vast background in web attacks and XSS. Fear not.","scope":"required","licenses":[{"expression":"(MPL-2.0 OR Apache-2.0)"}],"purl":"pkg:npm/dompurify@3.4.11","externalReferences":[{"type":"vcs","url":"https://github.com/cure53/DOMPurify"},{"type":"vcs","url":"git://github.com/cure53/DOMPurify.git"}],"type":"library","bom-ref":"pkg:npm/dompurify@3.4.11","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/dompurify/package.json"},{"name":"ImportedModules","value":"dompurify"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/dompurify/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/dompurify/package.json"}],"occurrences":[{"location":"dist/react/genie/genie-chat-message.js#7"},{"location":"tmp/dist/react/genie/genie-chat-message.js#7"},{"location":"src/react/genie/genie-chat-message.tsx#1"}]},"tags":["security","web"]},{"authors":[{"name":"hustcc (http://github.com/hustcc)"}],"group":"","name":"echarts-for-react","version":"3.0.5","description":" Apache Echarts components for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/echarts-for-react@3.0.5","externalReferences":[{"type":"vcs","url":"https://github.com/hustcc/echarts-for-react"},{"type":"vcs","url":"https://github.com/hustcc/echarts-for-react.git"}],"type":"library","bom-ref":"pkg:npm/echarts-for-react@3.0.5","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/echarts-for-react/package.json"},{"name":"ImportedModules","value":"echarts-for-react/esm/core"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/echarts-for-react/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/echarts-for-react/package.json"}],"occurrences":[{"location":"dist/react/charts/base.js#9"},{"location":"tmp/dist/react/charts/base.js#9"},{"location":"src/react/charts/base.tsx#28"},{"location":"dist/react/charts/base.js#9"},{"location":"tmp/dist/react/charts/base.js#9"},{"location":"src/react/charts/base.tsx#28"}]}},{"group":"","name":"echarts","version":"6.0.0","description":"Apache ECharts is a powerful, interactive charting and data visualization library for browser","scope":"required","licenses":[{"license":{"id":"Apache-2.0","url":"https://opensource.org/licenses/Apache-2.0"}}],"purl":"pkg:npm/echarts@6.0.0","externalReferences":[{"type":"website","url":"https://echarts.apache.org"},{"type":"vcs","url":"git+https://github.com/apache/echarts.git"}],"type":"library","bom-ref":"pkg:npm/echarts@6.0.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/echarts/package.json"},{"name":"ImportedModules","value":"echarts/charts,BarChart,echarts/charts/BarChart,HeatmapChart,echarts/charts/HeatmapChart,LineChart,echarts/charts/LineChart,PieChart,echarts/charts/PieChart,RadarChart,echarts/charts/RadarChart,ScatterChart,echarts/charts/ScatterChart,echarts/components,GridComponent,echarts/components/GridComponent,LegendComponent,echarts/components/LegendComponent,TitleComponent,echarts/components/TitleComponent,TooltipComponent,echarts/components/TooltipComponent,VisualMapComponent,echarts/components/VisualMapComponent,echarts/core,echarts/features,LegacyGridContainLabel,echarts/features/LegacyGridContainLabel,echarts/renderers,CanvasRenderer,echarts/renderers/CanvasRenderer,echarts,ECharts,echarts/ECharts"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/echarts/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/echarts/package.json"}],"occurrences":[{"location":"dist/react/charts/base.js#4"},{"location":"tmp/dist/react/charts/base.js#4"},{"location":"src/react/charts/base.tsx#11"},{"location":"dist/react/charts/base.js#4"},{"location":"dist/react/charts/base.js#5"},{"location":"dist/react/charts/base.js#6"},{"location":"dist/react/charts/base.js#7"},{"location":"dist/react/charts/base.js#8"},{"location":"tmp/dist/react/charts/base.js#4"},{"location":"tmp/dist/react/charts/base.js#5"},{"location":"tmp/dist/react/charts/base.js#6"},{"location":"tmp/dist/react/charts/base.js#7"},{"location":"tmp/dist/react/charts/base.js#8"},{"location":"src/react/charts/base.tsx#3"},{"location":"src/react/charts/base.tsx#11"},{"location":"src/react/charts/base.tsx#18"},{"location":"src/react/charts/base.tsx#19"},{"location":"src/react/charts/base.tsx#20"},{"location":"src/react/charts/base.tsx#21"},{"location":"dist/react/charts/base.js#5"},{"location":"tmp/dist/react/charts/base.js#5"},{"location":"src/react/charts/base.tsx#18"},{"location":"dist/react/charts/base.js#6"},{"location":"tmp/dist/react/charts/base.js#6"},{"location":"src/react/charts/base.tsx#19"},{"location":"dist/react/charts/base.js#7"},{"location":"tmp/dist/react/charts/base.js#7"},{"location":"src/react/charts/base.tsx#20"},{"location":"dist/react/charts/base.js#8"},{"location":"tmp/dist/react/charts/base.js#8"},{"location":"src/react/charts/base.tsx#21"}]}},{"authors":[{"name":"David Jerleke"}],"group":"","name":"embla-carousel-react","version":"8.6.0","description":"A lightweight carousel library with fluid motion and great swipe precision","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/embla-carousel-react@8.6.0","externalReferences":[{"type":"website","url":"https://www.embla-carousel.com"},{"type":"vcs","url":"git+https://github.com/davidjerleke/embla-carousel"}],"type":"library","bom-ref":"pkg:npm/embla-carousel-react@8.6.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/embla-carousel-react/package.json"},{"name":"ImportedModules","value":"embla-carousel-react,UseEmblaCarouselType,embla-carousel-react/UseEmblaCarouselType"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/embla-carousel-react/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/embla-carousel-react/package.json"}],"occurrences":[{"location":"dist/react/ui/carousel.js#6"},{"location":"tmp/dist/react/ui/carousel.js#6"},{"location":"src/react/ui/carousel.tsx#4"}]}},{"authors":[{"name":"Guilherme Rodz <g@rodz.dev>"}],"group":"","name":"input-otp","version":"1.4.2","description":"One-time password input component for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/input-otp@1.4.2","externalReferences":[{"type":"website","url":"https://input-otp.rodz.dev/"},{"type":"vcs","url":"git+https://github.com/guilhermerodz/input-otp.git"}],"type":"library","bom-ref":"pkg:npm/input-otp@1.4.2","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/input-otp/package.json"},{"name":"ImportedModules","value":"input-otp,OTPInput,input-otp/OTPInput,OTPInputContext,input-otp/OTPInputContext"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/input-otp/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/input-otp/package.json"}],"occurrences":[{"location":"dist/react/ui/input-otp.js#5"},{"location":"tmp/dist/react/ui/input-otp.js#5"},{"location":"src/react/ui/input-otp.tsx#2"}]}},{"authors":[{"name":"Eric Fennis"}],"group":"","name":"lucide-react","version":"0.554.0","description":"A Lucide icon library package for React applications.","scope":"required","licenses":[{"license":{"id":"ISC","url":"https://opensource.org/licenses/ISC"}}],"purl":"pkg:npm/lucide-react@0.554.0","externalReferences":[{"type":"website","url":"https://lucide.dev"},{"type":"vcs","url":"https://github.com/lucide-icons/lucide.git"}],"type":"library","bom-ref":"pkg:npm/lucide-react@0.554.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/lucide-react/package.json"},{"name":"ImportedModules","value":"lucide-react,Loader2Icon,lucide-react/Loader2Icon,AlertCircle,lucide-react/AlertCircle,ArrowLeft,lucide-react/ArrowLeft,FileIcon,lucide-react/FileIcon,ChevronRight,lucide-react/ChevronRight,FolderIcon,lucide-react/FolderIcon,Download,lucide-react/Download,Loader2,lucide-react/Loader2,Trash2,lucide-react/Trash2,FolderPlus,lucide-react/FolderPlus,lucide-react/X,BarChart3Icon,lucide-react/BarChart3Icon,ChevronDownIcon,lucide-react/ChevronDownIcon,ChevronDown,lucide-react/ChevronDown,ArrowUpDown,lucide-react/ArrowUpDown,MoreHorizontal,lucide-react/MoreHorizontal,ChevronLeftIcon,lucide-react/ChevronLeftIcon,ChevronRightIcon,lucide-react/ChevronRightIcon,ArrowRight,lucide-react/ArrowRight,CheckIcon,lucide-react/CheckIcon,SearchIcon,lucide-react/SearchIcon,CircleIcon,lucide-react/CircleIcon,XIcon,lucide-react/XIcon,MinusIcon,lucide-react/MinusIcon,MoreHorizontalIcon,lucide-react/MoreHorizontalIcon,GripVerticalIcon,lucide-react/GripVerticalIcon,ChevronUpIcon,lucide-react/ChevronUpIcon,PanelLeftIcon,lucide-react/PanelLeftIcon,CircleCheckIcon,lucide-react/CircleCheckIcon,InfoIcon,lucide-react/InfoIcon,OctagonXIcon,lucide-react/OctagonXIcon,TriangleAlertIcon,lucide-react/TriangleAlertIcon,LucideIcon,lucide-react/LucideIcon"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/lucide-react/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/lucide-react/package.json"}],"occurrences":[{"location":"dist/react/charts/loading.js#2"},{"location":"dist/react/file-browser/directory-list.js#6"},{"location":"dist/react/file-browser/file-entry.js#4"},{"location":"dist/react/file-browser/file-preview-panel.js#6"},{"location":"dist/react/file-browser/new-folder-input.js#5"},{"location":"dist/react/genie/genie-query-visualization.js#12"},{"location":"dist/react/table/data-table.js#9"},{"location":"dist/react/table/table-wrapper.js#10"},{"location":"dist/react/ui/accordion.js#3"},{"location":"dist/react/ui/breadcrumb.js#3"},{"location":"dist/react/ui/calendar.js#7"},{"location":"dist/react/ui/carousel.js#5"},{"location":"dist/react/ui/checkbox.js#5"},{"location":"dist/react/ui/command.js#4"},{"location":"dist/react/ui/context-menu.js#6"},{"location":"dist/react/ui/dialog.js#4"},{"location":"dist/react/ui/dropdown-menu.js#4"},{"location":"dist/react/ui/input-otp.js#4"},{"location":"dist/react/ui/menubar.js#4"},{"location":"dist/react/ui/navigation-menu.js#3"},{"location":"dist/react/ui/pagination.js#4"},{"location":"dist/react/ui/radio-group.js#5"},{"location":"dist/react/ui/resizable.js#3"},{"location":"dist/react/ui/select.js#4"},{"location":"dist/react/ui/sheet.js#4"},{"location":"dist/react/ui/sidebar.js#13"},{"location":"dist/react/ui/sonner.js#2"},{"location":"dist/react/ui/spinner.js#3"},{"location":"tmp/dist/react/charts/loading.js#2"},{"location":"tmp/dist/react/file-browser/directory-list.js#6"},{"location":"tmp/dist/react/file-browser/file-entry.js#4"},{"location":"tmp/dist/react/file-browser/file-preview-panel.js#6"},{"location":"tmp/dist/react/file-browser/new-folder-input.js#5"},{"location":"tmp/dist/react/genie/genie-query-visualization.js#12"},{"location":"tmp/dist/react/table/data-table.js#9"},{"location":"tmp/dist/react/table/table-wrapper.js#10"},{"location":"tmp/dist/react/ui/accordion.js#3"},{"location":"tmp/dist/react/ui/breadcrumb.js#3"},{"location":"tmp/dist/react/ui/calendar.js#7"},{"location":"tmp/dist/react/ui/carousel.js#5"},{"location":"tmp/dist/react/ui/checkbox.js#5"},{"location":"tmp/dist/react/ui/command.js#4"},{"location":"tmp/dist/react/ui/context-menu.js#6"},{"location":"tmp/dist/react/ui/dialog.js#4"},{"location":"tmp/dist/react/ui/dropdown-menu.js#4"},{"location":"tmp/dist/react/ui/input-otp.js#4"},{"location":"tmp/dist/react/ui/menubar.js#4"},{"location":"tmp/dist/react/ui/navigation-menu.js#3"},{"location":"tmp/dist/react/ui/pagination.js#4"},{"location":"tmp/dist/react/ui/radio-group.js#5"},{"location":"tmp/dist/react/ui/resizable.js#3"},{"location":"tmp/dist/react/ui/select.js#4"},{"location":"tmp/dist/react/ui/sheet.js#4"},{"location":"tmp/dist/react/ui/sidebar.js#13"},{"location":"tmp/dist/react/ui/sonner.js#2"},{"location":"tmp/dist/react/ui/spinner.js#3"},{"location":"src/react/charts/loading.tsx#1"},{"location":"src/react/file-browser/directory-list.tsx#1"},{"location":"src/react/file-browser/file-entry.tsx#1"},{"location":"src/react/file-browser/file-preview-panel.tsx#1"},{"location":"src/react/file-browser/new-folder-input.tsx#1"},{"location":"src/react/genie/genie-query-visualization.tsx#1"},{"location":"src/react/resource-status-indicator.tsx#1"},{"location":"src/react/table/data-table.tsx#2"},{"location":"src/react/table/table-wrapper.tsx#15"},{"location":"src/react/ui/accordion.tsx#3"},{"location":"src/react/ui/breadcrumb.tsx#3"},{"location":"src/react/ui/calendar.tsx#9"},{"location":"src/react/ui/carousel.tsx#5"},{"location":"src/react/ui/checkbox.tsx#5"},{"location":"src/react/ui/command.tsx#3"},{"location":"src/react/ui/context-menu.tsx#5"},{"location":"src/react/ui/dialog.tsx#3"},{"location":"src/react/ui/dropdown-menu.tsx#3"},{"location":"src/react/ui/input-otp.tsx#3"},{"location":"src/react/ui/menubar.tsx#3"},{"location":"src/react/ui/navigation-menu.tsx#4"},{"location":"src/react/ui/pagination.tsx#6"},{"location":"src/react/ui/radio-group.tsx#5"},{"location":"src/react/ui/resizable.tsx#2"},{"location":"src/react/ui/select.tsx#3"},{"location":"src/react/ui/sheet.tsx#3"},{"location":"src/react/ui/sidebar.tsx#6"},{"location":"src/react/ui/sonner.tsx#8"},{"location":"src/react/ui/spinner.tsx#2"}]}},{"authors":[{"name":"Christopher Jeffrey"}],"group":"","name":"marked","version":"17.0.3","description":"A markdown parser built for speed","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/marked@17.0.3","externalReferences":[{"type":"website","url":"https://marked.js.org"},{"type":"vcs","url":"git://github.com/markedjs/marked.git"}],"type":"library","bom-ref":"pkg:npm/marked@17.0.3","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/marked/package.json"},{"name":"ImportedModules","value":"marked,marked/marked"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/marked/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/marked/package.json"}],"occurrences":[{"location":"dist/react/genie/genie-chat-message.js#8"},{"location":"tmp/dist/react/genie/genie-chat-message.js#8"},{"location":"src/react/genie/genie-chat-message.tsx#2"}]}},{"group":"","name":"next-themes","version":"0.4.6","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/next-themes@0.4.6","externalReferences":[{"type":"vcs","url":"https://github.com/pacocoursey/next-themes.git"}],"type":"framework","bom-ref":"pkg:npm/next-themes@0.4.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/next-themes/package.json"},{"name":"ImportedModules","value":"next-themes,useTheme,next-themes/useTheme"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/next-themes/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/next-themes/package.json"}],"occurrences":[{"location":"dist/react/ui/sonner.js#4"},{"location":"tmp/dist/react/ui/sonner.js#4"},{"location":"src/react/ui/sonner.tsx#9"}]},"tags":["framework"]},{"authors":[{"name":"Giampaolo Bellavite <io@gpbl.dev>"}],"group":"","name":"react-day-picker","version":"9.12.0","description":"Customizable Date Picker for React","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/react-day-picker@9.12.0","externalReferences":[{"type":"website","url":"https://daypicker.dev"},{"type":"vcs","url":"https://github.com/gpbl/react-day-picker"}],"type":"framework","bom-ref":"pkg:npm/react-day-picker@9.12.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/react-day-picker/package.json"},{"name":"ImportedModules","value":"react-day-picker,DayPicker,react-day-picker/DayPicker,getDefaultClassNames,react-day-picker/getDefaultClassNames,DayButton,react-day-picker/DayButton"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/react-day-picker/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/react-day-picker/package.json"}],"occurrences":[{"location":"dist/react/ui/calendar.js#8"},{"location":"tmp/dist/react/ui/calendar.js#8"},{"location":"src/react/ui/calendar.tsx#10"}]},"tags":["framework"]},{"authors":[{"name":"Beier(Bill) Luo <bluebill1049@hotmail.com>"}],"group":"","name":"react-hook-form","version":"7.68.0","description":"Performant, flexible and extensible forms library for React Hooks","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/react-hook-form@7.68.0","externalReferences":[{"type":"website","url":"https://react-hook-form.com"},{"type":"vcs","url":"https://github.com/react-hook-form/react-hook-form"}],"type":"framework","bom-ref":"pkg:npm/react-hook-form@7.68.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/react-hook-form/package.json"},{"name":"ImportedModules","value":"react-hook-form,Controller,react-hook-form/Controller,FormProvider,react-hook-form/FormProvider,useFormContext,react-hook-form/useFormContext,useFormState,react-hook-form/useFormState,ControllerProps,react-hook-form/ControllerProps,FieldPath,react-hook-form/FieldPath,FieldValues,react-hook-form/FieldValues"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/react-hook-form/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/react-hook-form/package.json"}],"occurrences":[{"location":"dist/react/ui/form.js#8"},{"location":"tmp/dist/react/ui/form.js#8"},{"location":"src/react/ui/form.tsx#14"}]},"tags":["framework"]},{"authors":[{"name":"Brian Vaughn <brian.david.vaughn@gmail.com>"}],"group":"","name":"react-resizable-panels","version":"3.0.6","description":"React components for resizable panel groups/layouts","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/react-resizable-panels@3.0.6","externalReferences":[{"type":"vcs","url":"git+https://github.com/bvaughn/react-resizable-panels.git"}],"type":"framework","bom-ref":"pkg:npm/react-resizable-panels@3.0.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/react-resizable-panels/package.json"},{"name":"ImportedModules","value":"react-resizable-panels"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/react-resizable-panels/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/react-resizable-panels/package.json"}],"occurrences":[{"location":"dist/react/ui/resizable.js#4"},{"location":"tmp/dist/react/ui/resizable.js#4"},{"location":"src/react/ui/resizable.tsx#3"}]},"tags":["framework"]},{"group":"","name":"react","version":"19.2.0","description":"React is a JavaScript library for building user interfaces.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/react@19.2.0","externalReferences":[{"type":"website","url":"https://react.dev/"},{"type":"vcs","url":"https://github.com/facebook/react.git"}],"type":"framework","bom-ref":"pkg:npm/react@19.2.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/react/package.json"},{"name":"ExportedModules","value":"react/charts/area,react/charts/bar,react/charts/heatmap,react/charts/line,react/charts/pie,react/charts/radar,react/charts/scatter,react/hooks/use-chart-data,react/charts/base,react/charts/create-chart,react/charts/loading,react/charts/wrapper,react/charts/normalize,react/charts/constants,react/charts/theme,react/charts/utils,react/charts/options,react/charts/types,react/lib/format,react/genie/genie-chart-inference,react/genie/genie-chat,react/genie/genie-chat-input,react/genie/genie-chat-message,react/genie/genie-chat-message-list,react/genie/genie-query-transform,react/genie/genie-query-visualization,react/genie/use-genie-chat,react/resource-status-indicator,react/hooks/types,react/hooks/use-agent-chat,react/hooks/use-analytics-query,react/hooks/use-mobile,react/hooks/use-plugin-config,react/hooks/use-resource-status,react/hooks/use-serving-invoke,react/hooks/use-serving-stream,DonutChart,pie/DonutChart,PieChart,pie/PieChart,UseChartDataOptions,.hooks/use-chart-data/UseChartDataOptions,UseChartDataResult,.hooks/use-chart-data/UseChartDataResult,useChartData,.hooks/use-chart-data/useChartData,use-chart-data/UseChartDataOptions,use-chart-data/UseChartDataResult,use-chart-data/useChartData,BaseChart,base/BaseChart,BaseChartProps,base/BaseChartProps,LoadingSkeleton,loading/LoadingSkeleton,ResourceWaitingPlaceholder,loading/ResourceWaitingPlaceholder,ChartWrapper,wrapper/ChartWrapper,ChartWrapperProps,wrapper/ChartWrapperProps,NormalizedHeatmapData,normalize/NormalizedHeatmapData,normalizeChartData,normalize/normalizeChartData,normalizeHeatmapData,normalize/normalizeHeatmapData,CHART_COLOR_VARS,constants/CHART_COLOR_VARS,CHART_COLOR_VARS_CATEGORICAL,constants/CHART_COLOR_VARS_CATEGORICAL,CHART_COLOR_VARS_DIVERGING,constants/CHART_COLOR_VARS_DIVERGING,CHART_COLOR_VARS_SEQUENTIAL,constants/CHART_COLOR_VARS_SEQUENTIAL,DATE_FIELD_PATTERNS,constants/DATE_FIELD_PATTERNS,FALLBACK_COLORS_CATEGORICAL,constants/FALLBACK_COLORS_CATEGORICAL,FALLBACK_COLORS_DIVERGING,constants/FALLBACK_COLORS_DIVERGING,FALLBACK_COLORS_SEQUENTIAL,constants/FALLBACK_COLORS_SEQUENTIAL,METADATA_DATE_PATTERNS,constants/METADATA_DATE_PATTERNS,NAME_FIELD_PATTERNS,constants/NAME_FIELD_PATTERNS,useAllThemeColors,theme/useAllThemeColors,useChartUITokens,theme/useChartUITokens,useThemeColors,theme/useThemeColors,createTimeSeriesData,utils/createTimeSeriesData,formatLabel,utils/formatLabel,sortTimeSeriesAscending,utils/sortTimeSeriesAscending,toChartArray,utils/toChartArray,toChartValue,utils/toChartValue,truncateLabel,utils/truncateLabel,buildCartesianOption,options/buildCartesianOption,buildHeatmapOption,options/buildHeatmapOption,buildHorizontalBarOption,options/buildHorizontalBarOption,buildPieOption,options/buildPieOption,buildRadarOption,options/buildRadarOption,CartesianContext,options/CartesianContext,HeatmapContext,options/HeatmapContext,OptionBuilderContext,options/OptionBuilderContext,AreaChartProps,types/AreaChartProps,AreaChartSpecificProps,types/AreaChartSpecificProps,BarChartProps,types/BarChartProps,BarChartSpecificProps,types/BarChartSpecificProps,ChartBaseProps,types/ChartBaseProps,ChartColorPalette,types/ChartColorPalette,ChartData,types/ChartData,ChartType,types/ChartType,ChartUITokens,types/ChartUITokens,DataFormat,types/DataFormat,DataProps,types/DataProps,DonutChartProps,types/DonutChartProps,HeatmapChartProps,types/HeatmapChartProps,HeatmapChartSpecificProps,types/HeatmapChartSpecificProps,LineChartProps,types/LineChartProps,LineChartSpecificProps,types/LineChartSpecificProps,NormalizedChartData,types/NormalizedChartData,NormalizedChartDataBase,types/NormalizedChartDataBase,Orientation,types/Orientation,PieChartProps,types/PieChartProps,PieChartSpecificProps,types/PieChartSpecificProps,QueryProps,types/QueryProps,RadarChartProps,types/RadarChartProps,RadarChartSpecificProps,types/RadarChartSpecificProps,ScatterChartProps,types/ScatterChartProps,ScatterChartSpecificProps,types/ScatterChartSpecificProps,UnifiedChartProps,types/UnifiedChartProps,isArrowTable,types/isArrowTable,isDataProps,types/isDataProps,isQueryProps,types/isQueryProps,ChartInference,genie-chart-inference/ChartInference,getCompatibleChartTypes,genie-chart-inference/getCompatibleChartTypes,inferChartType,genie-chart-inference/inferChartType,ColumnCategory,genie-query-transform/ColumnCategory,GenieColumnMeta,genie-query-transform/GenieColumnMeta,TransformedGenieData,genie-query-transform/TransformedGenieData,transformGenieData,genie-query-transform/transformGenieData,ResourceKindRenderer,.resource-status-indicator/ResourceKindRenderer,ResourceStatusIndicator,.resource-status-indicator/ResourceStatusIndicator,ResourceStatusIndicatorProps,.resource-status-indicator/ResourceStatusIndicatorProps,ResourceStatusToasterOptions,.resource-status-indicator/ResourceStatusToasterOptions,useResourceStatusToaster,.resource-status-indicator/useResourceStatusToaster,AnalyticsFormat,types/AnalyticsFormat,InferResultByFormat,types/InferResultByFormat,InferRowType,types/InferRowType,InferServingChunk,types/InferServingChunk,InferServingRequest,types/InferServingRequest,InferServingResponse,types/InferServingResponse,PluginRegistry,types/PluginRegistry,QueryRegistry,types/QueryRegistry,ServingAlias,types/ServingAlias,ServingEndpointRegistry,types/ServingEndpointRegistry,TypedArrowTable,types/TypedArrowTable,UseAnalyticsQueryOptions,types/UseAnalyticsQueryOptions,UseAnalyticsQueryResult,types/UseAnalyticsQueryResult,WarehouseState,types/WarehouseState,WarehouseStatus,types/WarehouseStatus,AgentChatEvent,use-agent-chat/AgentChatEvent,UseAgentChatOptions,use-agent-chat/UseAgentChatOptions,UseAgentChatResult,use-agent-chat/UseAgentChatResult,useAgentChat,use-agent-chat/useAgentChat,AggregatedResourceStatus,use-resource-status/AggregatedResourceStatus,ResourceSeverity,use-resource-status/ResourceSeverity,ResourceStatus,use-resource-status/ResourceStatus,ResourceStatusFilter,use-resource-status/ResourceStatusFilter,ResourceStatusProvider,use-resource-status/ResourceStatusProvider,ResourceStatusProviderProps,use-resource-status/ResourceStatusProviderProps,useResourceStatus,use-resource-status/useResourceStatus,useResourceStatusPublisher,use-resource-status/useResourceStatusPublisher,UseServingInvokeOptions,use-serving-invoke/UseServingInvokeOptions,UseServingInvokeResult,use-serving-invoke/UseServingInvokeResult,useServingInvoke,use-serving-invoke/useServingInvoke,UseServingStreamOptions,use-serving-stream/UseServingStreamOptions,UseServingStreamResult,use-serving-stream/UseServingStreamResult,useServingStream,use-serving-stream/useServingStream"},{"name":"ImportedModules","value":"react,useCallback,react/useCallback,useMemo,react/useMemo,useRef,react/useRef,react/jsx-runtime,react/jsx-runtime/jsx,Component,react/Component,jsxs,react/jsx-runtime/jsxs,useEffect,react/useEffect,useState,react/useState,useLayoutEffect,react/useLayoutEffect,useId,react/useId,createContext,react/createContext,useContext,react/useContext,useSyncExternalStore,react/useSyncExternalStore,Fragment,react/jsx-runtime/Fragment,react/JSX,ReactNode,react/ReactNode,KeyboardEvent,react/KeyboardEvent"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/react/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/react/package.json"}],"occurrences":[{"location":"dist/react/charts/base.js#10"},{"location":"dist/react/charts/base.js#11"},{"location":"dist/react/charts/chart-error-boundary.js#1"},{"location":"dist/react/charts/chart-error-boundary.js#2"},{"location":"dist/react/charts/create-chart.js#3"},{"location":"dist/react/charts/empty.js#1"},{"location":"dist/react/charts/error.js#1"},{"location":"dist/react/charts/loading.js#1"},{"location":"dist/react/charts/theme.js#2"},{"location":"dist/react/charts/wrapper.js#7"},{"location":"dist/react/file-browser/directory-list.js#5"},{"location":"dist/react/file-browser/file-breadcrumb.js#2"},{"location":"dist/react/file-browser/file-entry.js#3"},{"location":"dist/react/file-browser/file-preview-panel.js#5"},{"location":"dist/react/file-browser/new-folder-input.js#3"},{"location":"dist/react/file-browser/new-folder-input.js#4"},{"location":"dist/react/genie/genie-chat-input.js#3"},{"location":"dist/react/genie/genie-chat-input.js#4"},{"location":"dist/react/genie/genie-chat-message-list.js#7"},{"location":"dist/react/genie/genie-chat-message-list.js#8"},{"location":"dist/react/genie/genie-chat-message.js#5"},{"location":"dist/react/genie/genie-chat-message.js#6"},{"location":"dist/react/genie/genie-chat.js#6"},{"location":"dist/react/genie/genie-query-visualization.js#10"},{"location":"dist/react/genie/genie-query-visualization.js#11"},{"location":"dist/react/genie/use-genie-chat.js#3"},{"location":"dist/react/hooks/use-agent-chat.js#2"},{"location":"dist/react/hooks/use-analytics-query.js#5"},{"location":"dist/react/hooks/use-analytics-warehouse-status.js#2"},{"location":"dist/react/hooks/use-chart-data.js#2"},{"location":"dist/react/hooks/use-mobile.js#1"},{"location":"dist/react/hooks/use-query-hmr.js#1"},{"location":"dist/react/hooks/use-resource-status.js#1"},{"location":"dist/react/hooks/use-resource-status.js#2"},{"location":"dist/react/hooks/use-serving-invoke.js#2"},{"location":"dist/react/hooks/use-serving-stream.js#3"},{"location":"dist/react/portal-container-context.js#1"},{"location":"dist/react/portal-container-context.js#2"},{"location":"dist/react/resource-status-indicator.js#3"},{"location":"dist/react/resource-status-indicator.js#4"},{"location":"dist/react/table/data-table.js#8"},{"location":"dist/react/table/empty.js#1"},{"location":"dist/react/table/error.js#1"},{"location":"dist/react/table/loading.js#1"},{"location":"dist/react/table/table-wrapper.js#8"},{"location":"dist/react/table/table-wrapper.js#9"},{"location":"dist/react/ui/accordion.js#2"},{"location":"dist/react/ui/alert-dialog.js#4"},{"location":"dist/react/ui/alert.js#2"},{"location":"dist/react/ui/aspect-ratio.js#3"},{"location":"dist/react/ui/avatar.js#2"},{"location":"dist/react/ui/badge.js#2"},{"location":"dist/react/ui/breadcrumb.js#2"},{"location":"dist/react/ui/button-group.js#3"},{"location":"dist/react/ui/button.js#2"},{"location":"dist/react/ui/calendar.js#5"},{"location":"dist/react/ui/calendar.js#6"},{"location":"dist/react/ui/card.js#2"},{"location":"dist/react/ui/carousel.js#3"},{"location":"dist/react/ui/carousel.js#4"},{"location":"dist/react/ui/checkbox.js#4"},{"location":"dist/react/ui/collapsible.js#1"},{"location":"dist/react/ui/command.js#3"},{"location":"dist/react/ui/context-menu.js#5"},{"location":"dist/react/ui/dialog.js#3"},{"location":"dist/react/ui/drawer.js#5"},{"location":"dist/react/ui/dropdown-menu.js#3"},{"location":"dist/react/ui/empty.js#2"},{"location":"dist/react/ui/field.js#4"},{"location":"dist/react/ui/field.js#5"},{"location":"dist/react/ui/form.js#5"},{"location":"dist/react/ui/form.js#6"},{"location":"dist/react/ui/hover-card.js#5"},{"location":"dist/react/ui/input-group.js#7"},{"location":"dist/react/ui/input-otp.js#2"},{"location":"dist/react/ui/input-otp.js#3"},{"location":"dist/react/ui/input.js#2"},{"location":"dist/react/ui/item.js#3"},{"location":"dist/react/ui/kbd.js#2"},{"location":"dist/react/ui/label.js#4"},{"location":"dist/react/ui/menubar.js#3"},{"location":"dist/react/ui/navigation-menu.js#2"},{"location":"dist/react/ui/pagination.js#3"},{"location":"dist/react/ui/popover.js#5"},{"location":"dist/react/ui/progress.js#2"},{"location":"dist/react/ui/radio-group.js#4"},{"location":"dist/react/ui/resizable.js#2"},{"location":"dist/react/ui/scroll-area.js#4"},{"location":"dist/react/ui/select.js#3"},{"location":"dist/react/ui/separator.js#4"},{"location":"dist/react/ui/sheet.js#3"},{"location":"dist/react/ui/sidebar.js#11"},{"location":"dist/react/ui/sidebar.js#12"},{"location":"dist/react/ui/skeleton.js#2"},{"location":"dist/react/ui/slider.js#4"},{"location":"dist/react/ui/slider.js#5"},{"location":"dist/react/ui/sonner.js#1"},{"location":"dist/react/ui/spinner.js#2"},{"location":"dist/react/ui/switch.js#4"},{"location":"dist/react/ui/table.js#2"},{"location":"dist/react/ui/tabs.js#4"},{"location":"dist/react/ui/textarea.js#2"},{"location":"dist/react/ui/toggle-group.js#3"},{"location":"dist/react/ui/toggle-group.js#4"},{"location":"dist/react/ui/toggle.js#2"},{"location":"dist/react/ui/tooltip.js#5"},{"location":"tmp/dist/react/charts/base.js#10"},{"location":"tmp/dist/react/charts/base.js#11"},{"location":"tmp/dist/react/charts/chart-error-boundary.js#1"},{"location":"tmp/dist/react/charts/chart-error-boundary.js#2"},{"location":"tmp/dist/react/charts/create-chart.js#3"},{"location":"tmp/dist/react/charts/empty.js#1"},{"location":"tmp/dist/react/charts/error.js#1"},{"location":"tmp/dist/react/charts/loading.js#1"},{"location":"tmp/dist/react/charts/theme.js#2"},{"location":"tmp/dist/react/charts/wrapper.js#7"},{"location":"tmp/dist/react/file-browser/directory-list.js#5"},{"location":"tmp/dist/react/file-browser/file-breadcrumb.js#2"},{"location":"tmp/dist/react/file-browser/file-entry.js#3"},{"location":"tmp/dist/react/file-browser/file-preview-panel.js#5"},{"location":"tmp/dist/react/file-browser/new-folder-input.js#3"},{"location":"tmp/dist/react/file-browser/new-folder-input.js#4"},{"location":"tmp/dist/react/genie/genie-chat-input.js#3"},{"location":"tmp/dist/react/genie/genie-chat-input.js#4"},{"location":"tmp/dist/react/genie/genie-chat-message-list.js#7"},{"location":"tmp/dist/react/genie/genie-chat-message-list.js#8"},{"location":"tmp/dist/react/genie/genie-chat-message.js#5"},{"location":"tmp/dist/react/genie/genie-chat-message.js#6"},{"location":"tmp/dist/react/genie/genie-chat.js#6"},{"location":"tmp/dist/react/genie/genie-query-visualization.js#10"},{"location":"tmp/dist/react/genie/genie-query-visualization.js#11"},{"location":"tmp/dist/react/genie/use-genie-chat.js#3"},{"location":"tmp/dist/react/hooks/use-agent-chat.js#2"},{"location":"tmp/dist/react/hooks/use-analytics-query.js#5"},{"location":"tmp/dist/react/hooks/use-analytics-warehouse-status.js#2"},{"location":"tmp/dist/react/hooks/use-chart-data.js#2"},{"location":"tmp/dist/react/hooks/use-mobile.js#1"},{"location":"tmp/dist/react/hooks/use-query-hmr.js#1"},{"location":"tmp/dist/react/hooks/use-resource-status.js#1"},{"location":"tmp/dist/react/hooks/use-resource-status.js#2"},{"location":"tmp/dist/react/hooks/use-serving-invoke.js#2"},{"location":"tmp/dist/react/hooks/use-serving-stream.js#3"},{"location":"tmp/dist/react/portal-container-context.js#1"},{"location":"tmp/dist/react/portal-container-context.js#2"},{"location":"tmp/dist/react/resource-status-indicator.js#3"},{"location":"tmp/dist/react/resource-status-indicator.js#4"},{"location":"tmp/dist/react/table/data-table.js#8"},{"location":"tmp/dist/react/table/empty.js#1"},{"location":"tmp/dist/react/table/error.js#1"},{"location":"tmp/dist/react/table/loading.js#1"},{"location":"tmp/dist/react/table/table-wrapper.js#8"},{"location":"tmp/dist/react/table/table-wrapper.js#9"},{"location":"tmp/dist/react/ui/accordion.js#2"},{"location":"tmp/dist/react/ui/alert-dialog.js#4"},{"location":"tmp/dist/react/ui/alert.js#2"},{"location":"tmp/dist/react/ui/aspect-ratio.js#3"},{"location":"tmp/dist/react/ui/avatar.js#2"},{"location":"tmp/dist/react/ui/badge.js#2"},{"location":"tmp/dist/react/ui/breadcrumb.js#2"},{"location":"tmp/dist/react/ui/button-group.js#3"},{"location":"tmp/dist/react/ui/button.js#2"},{"location":"tmp/dist/react/ui/calendar.js#5"},{"location":"tmp/dist/react/ui/calendar.js#6"},{"location":"tmp/dist/react/ui/card.js#2"},{"location":"tmp/dist/react/ui/carousel.js#3"},{"location":"tmp/dist/react/ui/carousel.js#4"},{"location":"tmp/dist/react/ui/checkbox.js#4"},{"location":"tmp/dist/react/ui/collapsible.js#1"},{"location":"tmp/dist/react/ui/command.js#3"},{"location":"tmp/dist/react/ui/context-menu.js#5"},{"location":"tmp/dist/react/ui/dialog.js#3"},{"location":"tmp/dist/react/ui/drawer.js#5"},{"location":"tmp/dist/react/ui/dropdown-menu.js#3"},{"location":"tmp/dist/react/ui/empty.js#2"},{"location":"tmp/dist/react/ui/field.js#4"},{"location":"tmp/dist/react/ui/field.js#5"},{"location":"tmp/dist/react/ui/form.js#5"},{"location":"tmp/dist/react/ui/form.js#6"},{"location":"tmp/dist/react/ui/hover-card.js#5"},{"location":"tmp/dist/react/ui/input-group.js#7"},{"location":"tmp/dist/react/ui/input-otp.js#2"},{"location":"tmp/dist/react/ui/input-otp.js#3"},{"location":"tmp/dist/react/ui/input.js#2"},{"location":"tmp/dist/react/ui/item.js#3"},{"location":"tmp/dist/react/ui/kbd.js#2"},{"location":"tmp/dist/react/ui/label.js#4"},{"location":"tmp/dist/react/ui/menubar.js#3"},{"location":"tmp/dist/react/ui/navigation-menu.js#2"},{"location":"tmp/dist/react/ui/pagination.js#3"},{"location":"tmp/dist/react/ui/popover.js#5"},{"location":"tmp/dist/react/ui/progress.js#2"},{"location":"tmp/dist/react/ui/radio-group.js#4"},{"location":"tmp/dist/react/ui/resizable.js#2"},{"location":"tmp/dist/react/ui/scroll-area.js#4"},{"location":"tmp/dist/react/ui/select.js#3"},{"location":"tmp/dist/react/ui/separator.js#4"},{"location":"tmp/dist/react/ui/sheet.js#3"},{"location":"tmp/dist/react/ui/sidebar.js#11"},{"location":"tmp/dist/react/ui/sidebar.js#12"},{"location":"tmp/dist/react/ui/skeleton.js#2"},{"location":"tmp/dist/react/ui/slider.js#4"},{"location":"tmp/dist/react/ui/slider.js#5"},{"location":"tmp/dist/react/ui/sonner.js#1"},{"location":"tmp/dist/react/ui/spinner.js#2"},{"location":"tmp/dist/react/ui/switch.js#4"},{"location":"tmp/dist/react/ui/table.js#2"},{"location":"tmp/dist/react/ui/tabs.js#4"},{"location":"tmp/dist/react/ui/textarea.js#2"},{"location":"tmp/dist/react/ui/toggle-group.js#3"},{"location":"tmp/dist/react/ui/toggle-group.js#4"},{"location":"tmp/dist/react/ui/toggle.js#2"},{"location":"tmp/dist/react/ui/tooltip.js#5"},{"location":"src/react/charts/theme.ts#1"},{"location":"src/react/genie/use-genie-chat.ts#1"},{"location":"src/react/hooks/use-agent-chat.ts#1"},{"location":"src/react/hooks/use-analytics-query.ts#8"},{"location":"src/react/hooks/use-analytics-warehouse-status.ts#1"},{"location":"src/react/hooks/use-chart-data.ts#2"},{"location":"src/react/hooks/use-mobile.ts#1"},{"location":"src/react/hooks/use-query-hmr.ts#1"},{"location":"src/react/hooks/use-serving-invoke.ts#1"},{"location":"src/react/hooks/use-serving-stream.ts#1"},{"location":"src/react/charts/area/index.tsx#1"},{"location":"src/react/charts/bar/index.tsx#1"},{"location":"src/react/charts/base.tsx#29"},{"location":"src/react/charts/chart-error-boundary.tsx#1"},{"location":"src/react/charts/heatmap/index.tsx#1"},{"location":"src/react/charts/line/index.tsx#1"},{"location":"src/react/charts/pie/index.tsx#1"},{"location":"src/react/charts/radar/index.tsx#1"},{"location":"src/react/charts/scatter/index.tsx#1"},{"location":"src/react/charts/wrapper.tsx#1"},{"location":"src/react/file-browser/new-folder-input.tsx#2"},{"location":"src/react/genie/genie-chat-input.tsx#1"},{"location":"src/react/genie/genie-chat-message-list.tsx#1"},{"location":"src/react/genie/genie-chat-message.tsx#3"},{"location":"src/react/genie/genie-query-visualization.tsx#2"},{"location":"src/react/hooks/use-resource-status.tsx#9"},{"location":"src/react/portal-container-context.tsx#1"},{"location":"src/react/portal-container-context.tsx#2"},{"location":"src/react/resource-status-indicator.tsx#2"},{"location":"src/react/table/table-wrapper.tsx#16"},{"location":"src/react/ui/accordion.tsx#1"},{"location":"src/react/ui/alert-dialog.tsx#1"},{"location":"src/react/ui/alert.tsx#1"},{"location":"src/react/ui/avatar.tsx#1"},{"location":"src/react/ui/badge.tsx#1"},{"location":"src/react/ui/breadcrumb.tsx#1"},{"location":"src/react/ui/button.tsx#1"},{"location":"src/react/ui/calendar.tsx#4"},{"location":"src/react/ui/card.tsx#1"},{"location":"src/react/ui/carousel.tsx#1"},{"location":"src/react/ui/checkbox.tsx#3"},{"location":"src/react/ui/command.tsx#1"},{"location":"src/react/ui/context-menu.tsx#3"},{"location":"src/react/ui/dialog.tsx#1"},{"location":"src/react/ui/drawer.tsx#3"},{"location":"src/react/ui/dropdown-menu.tsx#1"},{"location":"src/react/ui/field.tsx#1"},{"location":"src/react/ui/form.tsx#3"},{"location":"src/react/ui/hover-card.tsx#3"},{"location":"src/react/ui/input-group.tsx#3"},{"location":"src/react/ui/input-otp.tsx#1"},{"location":"src/react/ui/input.tsx#1"},{"location":"src/react/ui/item.tsx#1"},{"location":"src/react/ui/label.tsx#3"},{"location":"src/react/ui/menubar.tsx#1"},{"location":"src/react/ui/navigation-menu.tsx#1"},{"location":"src/react/ui/pagination.tsx#1"},{"location":"src/react/ui/popover.tsx#3"},{"location":"src/react/ui/progress.tsx#1"},{"location":"src/react/ui/radio-group.tsx#3"},{"location":"src/react/ui/resizable.tsx#1"},{"location":"src/react/ui/scroll-area.tsx#3"},{"location":"src/react/ui/select.tsx#1"},{"location":"src/react/ui/separator.tsx#3"},{"location":"src/react/ui/sheet.tsx#1"},{"location":"src/react/ui/sidebar.tsx#3"},{"location":"src/react/ui/slider.tsx#3"},{"location":"src/react/ui/switch.tsx#3"},{"location":"src/react/ui/table.tsx#1"},{"location":"src/react/ui/tabs.tsx#3"},{"location":"src/react/ui/textarea.tsx#1"},{"location":"src/react/ui/toggle-group.tsx#1"},{"location":"src/react/ui/toggle.tsx#1"},{"location":"src/react/ui/tooltip.tsx#3"},{"location":"dist/react/charts/base.js#11"},{"location":"dist/react/charts/chart-error-boundary.js#2"},{"location":"dist/react/charts/create-chart.js#3"},{"location":"dist/react/charts/empty.js#1"},{"location":"dist/react/charts/error.js#1"},{"location":"dist/react/charts/loading.js#1"},{"location":"dist/react/charts/wrapper.js#7"},{"location":"dist/react/file-browser/directory-list.js#5"},{"location":"dist/react/file-browser/file-breadcrumb.js#2"},{"location":"dist/react/file-browser/file-entry.js#3"},{"location":"dist/react/file-browser/file-preview-panel.js#5"},{"location":"dist/react/file-browser/new-folder-input.js#4"},{"location":"dist/react/genie/genie-chat-input.js#4"},{"location":"dist/react/genie/genie-chat-message-list.js#8"},{"location":"dist/react/genie/genie-chat-message.js#6"},{"location":"dist/react/genie/genie-chat.js#6"},{"location":"dist/react/genie/genie-query-visualization.js#11"},{"location":"dist/react/hooks/use-resource-status.js#2"},{"location":"dist/react/portal-container-context.js#2"},{"location":"dist/react/resource-status-indicator.js#4"},{"location":"dist/react/table/data-table.js#8"},{"location":"dist/react/table/empty.js#1"},{"location":"dist/react/table/error.js#1"},{"location":"dist/react/table/loading.js#1"},{"location":"dist/react/table/table-wrapper.js#9"},{"location":"dist/react/ui/accordion.js#2"},{"location":"dist/react/ui/alert-dialog.js#4"},{"location":"dist/react/ui/alert.js#2"},{"location":"dist/react/ui/aspect-ratio.js#3"},{"location":"dist/react/ui/avatar.js#2"},{"location":"dist/react/ui/badge.js#2"},{"location":"dist/react/ui/breadcrumb.js#2"},{"location":"dist/react/ui/button-group.js#3"},{"location":"dist/react/ui/button.js#2"},{"location":"dist/react/ui/calendar.js#6"},{"location":"dist/react/ui/card.js#2"},{"location":"dist/react/ui/carousel.js#4"},{"location":"dist/react/ui/checkbox.js#4"},{"location":"dist/react/ui/collapsible.js#1"},{"location":"dist/react/ui/command.js#3"},{"location":"dist/react/ui/context-menu.js#5"},{"location":"dist/react/ui/dialog.js#3"},{"location":"dist/react/ui/drawer.js#5"},{"location":"dist/react/ui/dropdown-menu.js#3"},{"location":"dist/react/ui/empty.js#2"},{"location":"dist/react/ui/field.js#5"},{"location":"dist/react/ui/form.js#6"},{"location":"dist/react/ui/hover-card.js#5"},{"location":"dist/react/ui/input-group.js#7"},{"location":"dist/react/ui/input-otp.js#3"},{"location":"dist/react/ui/input.js#2"},{"location":"dist/react/ui/item.js#3"},{"location":"dist/react/ui/kbd.js#2"},{"location":"dist/react/ui/label.js#4"},{"location":"dist/react/ui/menubar.js#3"},{"location":"dist/react/ui/navigation-menu.js#2"},{"location":"dist/react/ui/pagination.js#3"},{"location":"dist/react/ui/popover.js#5"},{"location":"dist/react/ui/progress.js#2"},{"location":"dist/react/ui/radio-group.js#4"},{"location":"dist/react/ui/resizable.js#2"},{"location":"dist/react/ui/scroll-area.js#4"},{"location":"dist/react/ui/select.js#3"},{"location":"dist/react/ui/separator.js#4"},{"location":"dist/react/ui/sheet.js#3"},{"location":"dist/react/ui/sidebar.js#12"},{"location":"dist/react/ui/skeleton.js#2"},{"location":"dist/react/ui/slider.js#5"},{"location":"dist/react/ui/sonner.js#1"},{"location":"dist/react/ui/spinner.js#2"},{"location":"dist/react/ui/switch.js#4"},{"location":"dist/react/ui/table.js#2"},{"location":"dist/react/ui/tabs.js#4"},{"location":"dist/react/ui/textarea.js#2"},{"location":"dist/react/ui/toggle-group.js#4"},{"location":"dist/react/ui/toggle.js#2"},{"location":"dist/react/ui/tooltip.js#5"},{"location":"tmp/dist/react/charts/base.js#11"},{"location":"tmp/dist/react/charts/chart-error-boundary.js#2"},{"location":"tmp/dist/react/charts/create-chart.js#3"},{"location":"tmp/dist/react/charts/empty.js#1"},{"location":"tmp/dist/react/charts/error.js#1"},{"location":"tmp/dist/react/charts/loading.js#1"},{"location":"tmp/dist/react/charts/wrapper.js#7"},{"location":"tmp/dist/react/file-browser/directory-list.js#5"},{"location":"tmp/dist/react/file-browser/file-breadcrumb.js#2"},{"location":"tmp/dist/react/file-browser/file-entry.js#3"},{"location":"tmp/dist/react/file-browser/file-preview-panel.js#5"},{"location":"tmp/dist/react/file-browser/new-folder-input.js#4"},{"location":"tmp/dist/react/genie/genie-chat-input.js#4"},{"location":"tmp/dist/react/genie/genie-chat-message-list.js#8"},{"location":"tmp/dist/react/genie/genie-chat-message.js#6"},{"location":"tmp/dist/react/genie/genie-chat.js#6"},{"location":"tmp/dist/react/genie/genie-query-visualization.js#11"},{"location":"tmp/dist/react/hooks/use-resource-status.js#2"},{"location":"tmp/dist/react/portal-container-context.js#2"},{"location":"tmp/dist/react/resource-status-indicator.js#4"},{"location":"tmp/dist/react/table/data-table.js#8"},{"location":"tmp/dist/react/table/empty.js#1"},{"location":"tmp/dist/react/table/error.js#1"},{"location":"tmp/dist/react/table/loading.js#1"},{"location":"tmp/dist/react/table/table-wrapper.js#9"},{"location":"tmp/dist/react/ui/accordion.js#2"},{"location":"tmp/dist/react/ui/alert-dialog.js#4"},{"location":"tmp/dist/react/ui/alert.js#2"},{"location":"tmp/dist/react/ui/aspect-ratio.js#3"},{"location":"tmp/dist/react/ui/avatar.js#2"},{"location":"tmp/dist/react/ui/badge.js#2"},{"location":"tmp/dist/react/ui/breadcrumb.js#2"},{"location":"tmp/dist/react/ui/button-group.js#3"},{"location":"tmp/dist/react/ui/button.js#2"},{"location":"tmp/dist/react/ui/calendar.js#6"},{"location":"tmp/dist/react/ui/card.js#2"},{"location":"tmp/dist/react/ui/carousel.js#4"},{"location":"tmp/dist/react/ui/checkbox.js#4"},{"location":"tmp/dist/react/ui/collapsible.js#1"},{"location":"tmp/dist/react/ui/command.js#3"},{"location":"tmp/dist/react/ui/context-menu.js#5"},{"location":"tmp/dist/react/ui/dialog.js#3"},{"location":"tmp/dist/react/ui/drawer.js#5"},{"location":"tmp/dist/react/ui/dropdown-menu.js#3"},{"location":"tmp/dist/react/ui/empty.js#2"},{"location":"tmp/dist/react/ui/field.js#5"},{"location":"tmp/dist/react/ui/form.js#6"},{"location":"tmp/dist/react/ui/hover-card.js#5"},{"location":"tmp/dist/react/ui/input-group.js#7"},{"location":"tmp/dist/react/ui/input-otp.js#3"},{"location":"tmp/dist/react/ui/input.js#2"},{"location":"tmp/dist/react/ui/item.js#3"},{"location":"tmp/dist/react/ui/kbd.js#2"},{"location":"tmp/dist/react/ui/label.js#4"},{"location":"tmp/dist/react/ui/menubar.js#3"},{"location":"tmp/dist/react/ui/navigation-menu.js#2"},{"location":"tmp/dist/react/ui/pagination.js#3"},{"location":"tmp/dist/react/ui/popover.js#5"},{"location":"tmp/dist/react/ui/progress.js#2"},{"location":"tmp/dist/react/ui/radio-group.js#4"},{"location":"tmp/dist/react/ui/resizable.js#2"},{"location":"tmp/dist/react/ui/scroll-area.js#4"},{"location":"tmp/dist/react/ui/select.js#3"},{"location":"tmp/dist/react/ui/separator.js#4"},{"location":"tmp/dist/react/ui/sheet.js#3"},{"location":"tmp/dist/react/ui/sidebar.js#12"},{"location":"tmp/dist/react/ui/skeleton.js#2"},{"location":"tmp/dist/react/ui/slider.js#5"},{"location":"tmp/dist/react/ui/sonner.js#1"},{"location":"tmp/dist/react/ui/spinner.js#2"},{"location":"tmp/dist/react/ui/switch.js#4"},{"location":"tmp/dist/react/ui/table.js#2"},{"location":"tmp/dist/react/ui/tabs.js#4"},{"location":"tmp/dist/react/ui/textarea.js#2"},{"location":"tmp/dist/react/ui/toggle-group.js#4"},{"location":"tmp/dist/react/ui/toggle.js#2"},{"location":"tmp/dist/react/ui/tooltip.js#5"}]},"tags":["framework"]},{"group":"","name":"shared","version":"0.0.1","scope":"required","purl":"pkg:npm/shared@0.0.1","type":"library","bom-ref":"pkg:npm/shared@0.0.1","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/shared/package.json"},{"name":"ExportedModules","value":"shared,isSQLTypeMarker,shared/isSQLTypeMarker,SQLBinaryMarker,shared/SQLBinaryMarker,SQLBooleanMarker,shared/SQLBooleanMarker,SQLDateMarker,shared/SQLDateMarker,SQLNumberMarker,shared/SQLNumberMarker,SQLStringMarker,shared/SQLStringMarker,SQLTimestampMarker,shared/SQLTimestampMarker,SQLTypeMarker,shared/SQLTypeMarker,shared/sql,GenieAttachmentResponse,shared/GenieAttachmentResponse,GenieMessageResponse,shared/GenieMessageResponse,GenieStatementResponse,shared/GenieStatementResponse,GenieStreamEvent,shared/GenieStreamEvent"},{"name":"ImportedModules","value":"shared,GenieStatementResponse,shared/GenieStatementResponse,GenieAttachmentResponse,shared/GenieAttachmentResponse"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/shared/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/shared/package.json"}],"occurrences":[{"location":"src/js/index.ts#11"},{"location":"src/react/genie/genie-query-transform.ts#11"},{"location":"src/react/genie/types.ts#1"},{"location":"src/react/genie/types.ts#8"},{"location":"src/react/genie/genie-query-visualization.tsx#3"}]},"tags":["sql"]},{"authors":[{"name":"Emil Kowalski <e@emilkowal.ski>"}],"group":"","name":"sonner","version":"2.0.7","description":"An opinionated toast component for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/sonner@2.0.7","externalReferences":[{"type":"website","url":"https://sonner.emilkowal.ski/"},{"type":"vcs","url":"git+https://github.com/emilkowalski/sonner.git"}],"type":"library","bom-ref":"pkg:npm/sonner@2.0.7","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/sonner/package.json"},{"name":"ImportedModules","value":"sonner,toast,sonner/toast,Toaster,sonner/Toaster,ToasterProps,sonner/ToasterProps"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/sonner/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/sonner/package.json"}],"occurrences":[{"location":"dist/react/resource-status-indicator.js#5"},{"location":"dist/react/ui/sonner.js#3"},{"location":"tmp/dist/react/resource-status-indicator.js#5"},{"location":"tmp/dist/react/ui/sonner.js#3"},{"location":"src/react/resource-status-indicator.tsx#3"},{"location":"src/react/ui/sonner.tsx#10"}]}},{"authors":[{"name":"Dany Castillo"}],"group":"","name":"tailwind-merge","version":"3.4.0","description":"Merge Tailwind CSS classes without style conflicts","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/tailwind-merge@3.4.0","externalReferences":[{"type":"vcs","url":"https://github.com/dcastil/tailwind-merge"},{"type":"vcs","url":"https://github.com/dcastil/tailwind-merge.git"}],"type":"library","bom-ref":"pkg:npm/tailwind-merge@3.4.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/tailwind-merge/package.json"},{"name":"ImportedModules","value":"tailwind-merge,twMerge,tailwind-merge/twMerge"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/tailwind-merge/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/tailwind-merge/package.json"}],"occurrences":[{"location":"dist/react/lib/utils.js#2"},{"location":"tmp/dist/react/lib/utils.js#2"},{"location":"src/react/lib/utils.ts#2"}]}},{"authors":[{"name":"Emil Kowalski <e@emilkowal.ski>"}],"group":"","name":"vaul","version":"1.1.2","description":"Drawer component for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/vaul@1.1.2","externalReferences":[{"type":"website","url":"https://vaul.emilkowal.ski/"},{"type":"vcs","url":"https://github.com/emilkowalski/vaul.git"}],"type":"library","bom-ref":"pkg:npm/vaul@1.1.2","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/vaul/package.json"},{"name":"ImportedModules","value":"vaul,Drawer,vaul/Drawer"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/vaul/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/vaul/package.json"}],"occurrences":[{"location":"dist/react/ui/drawer.js#6"},{"location":"tmp/dist/react/ui/drawer.js#6"},{"location":"src/react/ui/drawer.tsx#4"}]}}],"dependencies":[],"compositions":[{"bom-ref":"pkg:npm/@databricks/appkit-ui@0.46.0","aggregate":"incomplete"}],"annotations":[{"bom-ref":"metadata-annotations","subjects":["pkg:npm/@databricks/appkit-ui@0.46.0"],"annotator":{"component":{"group":"@cyclonedx","name":"cdxgen","version":"12.1.2","purl":"pkg:npm/%40cyclonedx/cdxgen@12.1.2","type":"application","bom-ref":"pkg:npm/@cyclonedx/cdxgen@12.1.2","publisher":"OWASP Foundation","authors":[{"name":"OWASP Foundation"}]}},"timestamp":"2026-07-22T11:27:34Z","text":"This Software Bill-of-Materials (SBOM) document was created on Wednesday, July 22, 2026 with cdxgen. The data was captured during the build lifecycle phase. The document describes an application named 'appkit-ui' with version '0.46.0'. There are 47 components. The package type in this SBOM is npm with 2 purl namespaces described under components. The components were identified from 47 source files."}]}
1
+ {"bomFormat":"CycloneDX","specVersion":"1.6","serialNumber":"urn:uuid:c609b1a7-1e38-40aa-97f7-8c9decda8eb0","version":1,"metadata":{"timestamp":"2026-07-23T08:34:07Z","tools":{"components":[{"group":"@cyclonedx","name":"cdxgen","version":"12.1.2","purl":"pkg:npm/%40cyclonedx/cdxgen@12.1.2","type":"application","bom-ref":"pkg:npm/@cyclonedx/cdxgen@12.1.2","publisher":"OWASP Foundation","authors":[{"name":"OWASP Foundation"}]}]},"authors":[{"name":"OWASP Foundation"}],"lifecycles":[{"phase":"build"}],"component":{"name":"appkit-ui","group":"@databricks","version":"0.47.0","purl":"pkg:npm/%40databricks/appkit-ui@0.47.0","bom-ref":"pkg:npm/@databricks/appkit-ui@0.47.0","type":"application","licenses":[{"license":{"id":"Apache-2.0","url":"https://opensource.org/licenses/Apache-2.0"}}],"externalReferences":[{"type":"vcs","url":"git+https://github.com/databricks/appkit.git"}]},"properties":[{"name":"cdx:bom:componentTypes","value":"npm"},{"name":"cdx:bom:componentNamespaces","value":"@radix-ui\\n@tanstack"},{"name":"cdx:bom:componentSrcFiles","value":"packages/appkit-ui/node_modules/@radix-ui/react-accordion/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-alert-dialog/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-aspect-ratio/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-avatar/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-checkbox/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-collapsible/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-context-menu/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-dialog/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-dropdown-menu/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-hover-card/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-label/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-menubar/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-navigation-menu/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-popover/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-progress/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-radio-group/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-scroll-area/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-select/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-separator/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-slider/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-slot/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-switch/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-tabs/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-toggle-group/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-toggle/package.json\\npackages/appkit-ui/node_modules/@radix-ui/react-tooltip/package.json\\npackages/appkit-ui/node_modules/@tanstack/react-table/package.json\\npackages/appkit-ui/node_modules/apache-arrow/package.json\\npackages/appkit-ui/node_modules/class-variance-authority/package.json\\npackages/appkit-ui/node_modules/clsx/package.json\\npackages/appkit-ui/node_modules/cmdk/package.json\\npackages/appkit-ui/node_modules/dompurify/package.json\\npackages/appkit-ui/node_modules/echarts-for-react/package.json\\npackages/appkit-ui/node_modules/echarts/package.json\\npackages/appkit-ui/node_modules/embla-carousel-react/package.json\\npackages/appkit-ui/node_modules/input-otp/package.json\\npackages/appkit-ui/node_modules/lucide-react/package.json\\npackages/appkit-ui/node_modules/marked/package.json\\npackages/appkit-ui/node_modules/next-themes/package.json\\npackages/appkit-ui/node_modules/react-day-picker/package.json\\npackages/appkit-ui/node_modules/react-hook-form/package.json\\npackages/appkit-ui/node_modules/react-resizable-panels/package.json\\npackages/appkit-ui/node_modules/react/package.json\\npackages/appkit-ui/node_modules/shared/package.json\\npackages/appkit-ui/node_modules/sonner/package.json\\npackages/appkit-ui/node_modules/tailwind-merge/package.json\\npackages/appkit-ui/node_modules/vaul/package.json"}]},"components":[{"group":"@radix-ui","name":"react-accordion","version":"1.2.12","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-accordion@1.2.12","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-accordion@1.2.12","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-accordion/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-accordion"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-accordion/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-accordion/package.json"}],"occurrences":[{"location":"dist/react/ui/accordion.js#4"},{"location":"tmp/dist/react/ui/accordion.js#4"},{"location":"src/react/ui/accordion.tsx#2"}]}},{"group":"@radix-ui","name":"react-alert-dialog","version":"1.1.15","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-alert-dialog@1.1.15","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-alert-dialog@1.1.15","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-alert-dialog/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-alert-dialog"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-alert-dialog/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-alert-dialog/package.json"}],"occurrences":[{"location":"dist/react/ui/alert-dialog.js#5"},{"location":"tmp/dist/react/ui/alert-dialog.js#5"},{"location":"src/react/ui/alert-dialog.tsx#2"}]}},{"group":"@radix-ui","name":"react-aspect-ratio","version":"1.1.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-aspect-ratio@1.1.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-aspect-ratio@1.1.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-aspect-ratio/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-aspect-ratio"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-aspect-ratio/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-aspect-ratio/package.json"}],"occurrences":[{"location":"dist/react/ui/aspect-ratio.js#4"},{"location":"tmp/dist/react/ui/aspect-ratio.js#4"},{"location":"src/react/ui/aspect-ratio.tsx#3"}]}},{"group":"@radix-ui","name":"react-avatar","version":"1.1.11","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-avatar@1.1.11","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-avatar@1.1.11","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-avatar/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-avatar"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-avatar/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-avatar/package.json"}],"occurrences":[{"location":"dist/react/ui/avatar.js#3"},{"location":"tmp/dist/react/ui/avatar.js#3"},{"location":"src/react/ui/avatar.tsx#2"}]}},{"group":"@radix-ui","name":"react-checkbox","version":"1.3.3","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-checkbox@1.3.3","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-checkbox@1.3.3","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-checkbox/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-checkbox"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-checkbox/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-checkbox/package.json"}],"occurrences":[{"location":"dist/react/ui/checkbox.js#6"},{"location":"tmp/dist/react/ui/checkbox.js#6"},{"location":"src/react/ui/checkbox.tsx#4"}]}},{"group":"@radix-ui","name":"react-collapsible","version":"1.1.12","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-collapsible@1.1.12","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-collapsible@1.1.12","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-collapsible/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-collapsible"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-collapsible/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-collapsible/package.json"}],"occurrences":[{"location":"dist/react/ui/collapsible.js#2"},{"location":"tmp/dist/react/ui/collapsible.js#2"},{"location":"src/react/ui/collapsible.tsx#1"}]}},{"group":"@radix-ui","name":"react-context-menu","version":"2.2.16","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-context-menu@2.2.16","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-context-menu@2.2.16","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-context-menu/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-context-menu"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-context-menu/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-context-menu/package.json"}],"occurrences":[{"location":"dist/react/ui/context-menu.js#7"},{"location":"tmp/dist/react/ui/context-menu.js#7"},{"location":"src/react/ui/context-menu.tsx#4"}]}},{"group":"@radix-ui","name":"react-dialog","version":"1.1.15","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-dialog@1.1.15","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-dialog@1.1.15","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-dialog/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-dialog"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-dialog/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-dialog/package.json"}],"occurrences":[{"location":"dist/react/ui/dialog.js#5"},{"location":"dist/react/ui/sheet.js#5"},{"location":"tmp/dist/react/ui/dialog.js#5"},{"location":"tmp/dist/react/ui/sheet.js#5"},{"location":"src/react/ui/dialog.tsx#2"},{"location":"src/react/ui/sheet.tsx#2"}]}},{"group":"@radix-ui","name":"react-dropdown-menu","version":"2.1.16","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-dropdown-menu@2.1.16","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-dropdown-menu@2.1.16","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-dropdown-menu/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-dropdown-menu"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-dropdown-menu/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-dropdown-menu/package.json"}],"occurrences":[{"location":"dist/react/ui/dropdown-menu.js#5"},{"location":"tmp/dist/react/ui/dropdown-menu.js#5"},{"location":"src/react/ui/dropdown-menu.tsx#2"}]}},{"group":"@radix-ui","name":"react-hover-card","version":"1.1.15","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-hover-card@1.1.15","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-hover-card@1.1.15","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-hover-card/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-hover-card"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-hover-card/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-hover-card/package.json"}],"occurrences":[{"location":"dist/react/ui/hover-card.js#6"},{"location":"tmp/dist/react/ui/hover-card.js#6"},{"location":"src/react/ui/hover-card.tsx#4"}]}},{"group":"@radix-ui","name":"react-label","version":"2.1.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-label@2.1.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-label@2.1.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-label/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-label"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-label/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-label/package.json"}],"occurrences":[{"location":"dist/react/ui/label.js#5"},{"location":"tmp/dist/react/ui/label.js#5"},{"location":"src/react/ui/form.tsx#4"},{"location":"src/react/ui/label.tsx#4"}]}},{"group":"@radix-ui","name":"react-menubar","version":"1.1.16","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-menubar@1.1.16","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-menubar@1.1.16","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-menubar/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-menubar"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-menubar/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-menubar/package.json"}],"occurrences":[{"location":"dist/react/ui/menubar.js#5"},{"location":"tmp/dist/react/ui/menubar.js#5"},{"location":"src/react/ui/menubar.tsx#2"}]}},{"group":"@radix-ui","name":"react-navigation-menu","version":"1.2.14","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-navigation-menu@1.2.14","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-navigation-menu@1.2.14","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-navigation-menu/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-navigation-menu"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-navigation-menu/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-navigation-menu/package.json"}],"occurrences":[{"location":"dist/react/ui/navigation-menu.js#5"},{"location":"tmp/dist/react/ui/navigation-menu.js#5"},{"location":"src/react/ui/navigation-menu.tsx#2"}]}},{"group":"@radix-ui","name":"react-popover","version":"1.1.15","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-popover@1.1.15","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-popover@1.1.15","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-popover/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-popover"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-popover/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-popover/package.json"}],"occurrences":[{"location":"dist/react/ui/popover.js#6"},{"location":"tmp/dist/react/ui/popover.js#6"},{"location":"src/react/ui/popover.tsx#4"}]}},{"group":"@radix-ui","name":"react-progress","version":"1.1.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-progress@1.1.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-progress@1.1.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-progress/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-progress"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-progress/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-progress/package.json"}],"occurrences":[{"location":"dist/react/ui/progress.js#3"},{"location":"tmp/dist/react/ui/progress.js#3"},{"location":"src/react/ui/progress.tsx#2"}]}},{"group":"@radix-ui","name":"react-radio-group","version":"1.3.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-radio-group@1.3.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-radio-group@1.3.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-radio-group/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-radio-group"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-radio-group/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-radio-group/package.json"}],"occurrences":[{"location":"dist/react/ui/radio-group.js#6"},{"location":"tmp/dist/react/ui/radio-group.js#6"},{"location":"src/react/ui/radio-group.tsx#4"}]}},{"group":"@radix-ui","name":"react-scroll-area","version":"1.2.10","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-scroll-area@1.2.10","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-scroll-area@1.2.10","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-scroll-area/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-scroll-area"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-scroll-area/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-scroll-area/package.json"}],"occurrences":[{"location":"dist/react/ui/scroll-area.js#5"},{"location":"tmp/dist/react/ui/scroll-area.js#5"},{"location":"src/react/ui/scroll-area.tsx#4"}]}},{"group":"@radix-ui","name":"react-select","version":"2.2.6","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-select@2.2.6","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-select@2.2.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-select/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-select"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-select/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-select/package.json"}],"occurrences":[{"location":"dist/react/ui/select.js#5"},{"location":"tmp/dist/react/ui/select.js#5"},{"location":"src/react/ui/select.tsx#2"}]}},{"group":"@radix-ui","name":"react-separator","version":"1.1.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-separator@1.1.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-separator@1.1.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-separator/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-separator"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-separator/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-separator/package.json"}],"occurrences":[{"location":"dist/react/ui/separator.js#5"},{"location":"tmp/dist/react/ui/separator.js#5"},{"location":"src/react/ui/separator.tsx#4"}]}},{"group":"@radix-ui","name":"react-slider","version":"1.3.6","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-slider@1.3.6","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-slider@1.3.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-slider/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-slider"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-slider/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-slider/package.json"}],"occurrences":[{"location":"dist/react/ui/slider.js#6"},{"location":"tmp/dist/react/ui/slider.js#6"},{"location":"src/react/ui/slider.tsx#4"}]}},{"group":"@radix-ui","name":"react-slot","version":"1.2.4","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-slot@1.2.4","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-slot@1.2.4","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-slot/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-slot,Slot,@radix-ui/react-slot/Slot"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-slot/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-slot/package.json"}],"occurrences":[{"location":"dist/react/ui/badge.js#3"},{"location":"dist/react/ui/breadcrumb.js#4"},{"location":"dist/react/ui/button-group.js#4"},{"location":"dist/react/ui/button.js#3"},{"location":"dist/react/ui/form.js#7"},{"location":"dist/react/ui/item.js#4"},{"location":"dist/react/ui/sidebar.js#14"},{"location":"tmp/dist/react/ui/badge.js#3"},{"location":"tmp/dist/react/ui/breadcrumb.js#4"},{"location":"tmp/dist/react/ui/button-group.js#4"},{"location":"tmp/dist/react/ui/button.js#3"},{"location":"tmp/dist/react/ui/form.js#7"},{"location":"tmp/dist/react/ui/item.js#4"},{"location":"tmp/dist/react/ui/sidebar.js#14"},{"location":"src/react/ui/badge.tsx#2"},{"location":"src/react/ui/breadcrumb.tsx#2"},{"location":"src/react/ui/button-group.tsx#1"},{"location":"src/react/ui/button.tsx#2"},{"location":"src/react/ui/form.tsx#5"},{"location":"src/react/ui/item.tsx#2"},{"location":"src/react/ui/sidebar.tsx#4"}]}},{"group":"@radix-ui","name":"react-switch","version":"1.2.6","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-switch@1.2.6","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-switch@1.2.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-switch/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-switch"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-switch/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-switch/package.json"}],"occurrences":[{"location":"dist/react/ui/switch.js#5"},{"location":"tmp/dist/react/ui/switch.js#5"},{"location":"src/react/ui/switch.tsx#4"}]}},{"group":"@radix-ui","name":"react-tabs","version":"1.1.13","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-tabs@1.1.13","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-tabs@1.1.13","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-tabs/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-tabs"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-tabs/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-tabs/package.json"}],"occurrences":[{"location":"dist/react/ui/tabs.js#5"},{"location":"tmp/dist/react/ui/tabs.js#5"},{"location":"src/react/ui/tabs.tsx#4"}]}},{"group":"@radix-ui","name":"react-toggle-group","version":"1.1.11","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-toggle-group@1.1.11","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-toggle-group@1.1.11","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-toggle-group/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-toggle-group"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-toggle-group/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-toggle-group/package.json"}],"occurrences":[{"location":"dist/react/ui/toggle-group.js#5"},{"location":"tmp/dist/react/ui/toggle-group.js#5"},{"location":"src/react/ui/toggle-group.tsx#2"}]}},{"group":"@radix-ui","name":"react-toggle","version":"1.1.10","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-toggle@1.1.10","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-toggle@1.1.10","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-toggle/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-toggle"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-toggle/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-toggle/package.json"}],"occurrences":[{"location":"dist/react/ui/toggle.js#4"},{"location":"tmp/dist/react/ui/toggle.js#4"},{"location":"src/react/ui/toggle.tsx#2"}]}},{"group":"@radix-ui","name":"react-tooltip","version":"1.2.8","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40radix-ui/react-tooltip@1.2.8","externalReferences":[{"type":"website","url":"https://radix-ui.com/primitives"},{"type":"vcs","url":"git+https://github.com/radix-ui/primitives.git"}],"type":"library","bom-ref":"pkg:npm/@radix-ui/react-tooltip@1.2.8","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@radix-ui/react-tooltip/package.json"},{"name":"ImportedModules","value":"@radix-ui/react-tooltip"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@radix-ui/react-tooltip/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@radix-ui/react-tooltip/package.json"}],"occurrences":[{"location":"dist/react/ui/tooltip.js#6"},{"location":"tmp/dist/react/ui/tooltip.js#6"},{"location":"src/react/ui/tooltip.tsx#4"}]}},{"authors":[{"name":"Tanner Linsley"}],"group":"@tanstack","name":"react-table","version":"8.21.3","description":"Headless UI for building powerful tables & datagrids for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/%40tanstack/react-table@8.21.3","externalReferences":[{"type":"website","url":"https://tanstack.com/table"},{"type":"vcs","url":"https://github.com/TanStack/table.git"}],"type":"library","bom-ref":"pkg:npm/@tanstack/react-table@8.21.3","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/@tanstack/react-table/package.json"},{"name":"ImportedModules","value":"@tanstack/react-table,flexRender,@tanstack/react-table/flexRender,getCoreRowModel,@tanstack/react-table/getCoreRowModel,getFilteredRowModel,@tanstack/react-table/getFilteredRowModel,getPaginationRowModel,@tanstack/react-table/getPaginationRowModel,getSortedRowModel,@tanstack/react-table/getSortedRowModel,useReactTable,@tanstack/react-table/useReactTable,RowSelectionState,@tanstack/react-table/RowSelectionState,Table,@tanstack/react-table/Table,Column,@tanstack/react-table/Column,ColumnFiltersState,@tanstack/react-table/ColumnFiltersState,@tanstack/react-table/Row,SortingState,@tanstack/react-table/SortingState,VisibilityState,@tanstack/react-table/VisibilityState"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/@tanstack/react-table/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/@tanstack/react-table/package.json"}],"occurrences":[{"location":"dist/react/table/data-table.js#10"},{"location":"dist/react/table/table-wrapper.js#11"},{"location":"tmp/dist/react/table/data-table.js#10"},{"location":"tmp/dist/react/table/table-wrapper.js#11"},{"location":"src/react/table/types.ts#1"},{"location":"src/react/table/data-table.tsx#1"},{"location":"src/react/table/table-wrapper.tsx#14"}]}},{"authors":[{"name":"Apache Software Foundation"}],"group":"","name":"apache-arrow","version":"21.1.0","description":"Apache Arrow columnar in-memory format","scope":"required","licenses":[{"license":{"id":"Apache-2.0","url":"https://opensource.org/licenses/Apache-2.0"}}],"purl":"pkg:npm/apache-arrow@21.1.0","externalReferences":[{"type":"website","url":"https://arrow.apache.org/js/"},{"type":"vcs","url":"git+https://github.com/apache/arrow-js.git"}],"type":"library","bom-ref":"pkg:npm/apache-arrow@21.1.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/apache-arrow/package.json"},{"name":"ImportedModules","value":"apache-arrow,Field,apache-arrow/Field,Table,apache-arrow/Table,Vector,apache-arrow/Vector"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/apache-arrow/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/apache-arrow/package.json"}],"occurrences":[{"location":"src/js/arrow/arrow-client.ts#1"},{"location":"src/react/charts/normalize.ts#1"},{"location":"src/react/charts/types.ts#1"},{"location":"src/react/hooks/types.ts#1"},{"location":"src/react/hooks/use-chart-data.ts#1"}]}},{"authors":[{"name":"Joe Bell (https://joebell.co.uk)"}],"group":"","name":"class-variance-authority","version":"0.7.1","description":"Class Variance Authority 🧬","scope":"required","licenses":[{"license":{"id":"Apache-2.0","url":"https://opensource.org/licenses/Apache-2.0"}}],"purl":"pkg:npm/class-variance-authority@0.7.1","externalReferences":[{"type":"vcs","url":"https://github.com/joe-bell/cva#readme"}],"type":"library","bom-ref":"pkg:npm/class-variance-authority@0.7.1","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/class-variance-authority/package.json"},{"name":"ImportedModules","value":"class-variance-authority,class-variance-authority/cva,VariantProps,class-variance-authority/VariantProps"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/class-variance-authority/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/class-variance-authority/package.json"}],"occurrences":[{"location":"dist/react/ui/alert.js#3"},{"location":"dist/react/ui/badge.js#4"},{"location":"dist/react/ui/button-group.js#5"},{"location":"dist/react/ui/button.js#4"},{"location":"dist/react/ui/empty.js#3"},{"location":"dist/react/ui/field.js#6"},{"location":"dist/react/ui/input-group.js#8"},{"location":"dist/react/ui/item.js#5"},{"location":"dist/react/ui/navigation-menu.js#4"},{"location":"dist/react/ui/sidebar.js#15"},{"location":"dist/react/ui/toggle.js#3"},{"location":"tmp/dist/react/ui/alert.js#3"},{"location":"tmp/dist/react/ui/badge.js#4"},{"location":"tmp/dist/react/ui/button-group.js#5"},{"location":"tmp/dist/react/ui/button.js#4"},{"location":"tmp/dist/react/ui/empty.js#3"},{"location":"tmp/dist/react/ui/field.js#6"},{"location":"tmp/dist/react/ui/input-group.js#8"},{"location":"tmp/dist/react/ui/item.js#5"},{"location":"tmp/dist/react/ui/navigation-menu.js#4"},{"location":"tmp/dist/react/ui/sidebar.js#15"},{"location":"tmp/dist/react/ui/toggle.js#3"},{"location":"src/react/ui/alert.tsx#2"},{"location":"src/react/ui/badge.tsx#3"},{"location":"src/react/ui/button-group.tsx#2"},{"location":"src/react/ui/button.tsx#3"},{"location":"src/react/ui/empty.tsx#1"},{"location":"src/react/ui/field.tsx#2"},{"location":"src/react/ui/input-group.tsx#4"},{"location":"src/react/ui/item.tsx#3"},{"location":"src/react/ui/navigation-menu.tsx#3"},{"location":"src/react/ui/sidebar.tsx#5"},{"location":"src/react/ui/toggle-group.tsx#3"},{"location":"src/react/ui/toggle.tsx#3"}]}},{"authors":[{"name":"Luke Edwards <luke.edwards05@gmail.com> (https://lukeed.com)"}],"group":"","name":"clsx","version":"2.1.1","description":"A tiny (239B) utility for constructing className strings conditionally.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/clsx@2.1.1","type":"library","bom-ref":"pkg:npm/clsx@2.1.1","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/clsx/package.json"},{"name":"ImportedModules","value":"clsx,clsx/clsx,ClassValue,clsx/ClassValue"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/clsx/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/clsx/package.json"}],"occurrences":[{"location":"dist/react/lib/utils.js#1"},{"location":"tmp/dist/react/lib/utils.js#1"},{"location":"src/react/lib/utils.ts#1"}]}},{"authors":[{"name":"Paco (https://github.com/pacocoursey)"}],"group":"","name":"cmdk","version":"1.1.1","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/cmdk@1.1.1","externalReferences":[{"type":"vcs","url":"https://github.com/pacocoursey/cmdk#readme"},{"type":"vcs","url":"git+https://github.com/pacocoursey/cmdk.git"}],"type":"library","bom-ref":"pkg:npm/cmdk@1.1.1","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/cmdk/package.json"},{"name":"ImportedModules","value":"cmdk,Command,cmdk/Command"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/cmdk/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/cmdk/package.json"}],"occurrences":[{"location":"dist/react/ui/command.js#5"},{"location":"tmp/dist/react/ui/command.js#5"},{"location":"src/react/ui/command.tsx#2"}]}},{"authors":[{"name":"Dr.-Ing. Mario Heiderich"},{"name":" Cure53 <mario@cure53.de> (https://cure53.de/)"}],"group":"","name":"dompurify","version":"3.4.11","description":"DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. It runs as JavaScript and works in all modern browsers, as well as in Node.js (via jsdom). DOMPurify is written by security people who have vast background in web attacks and XSS. Fear not.","scope":"required","licenses":[{"expression":"(MPL-2.0 OR Apache-2.0)"}],"purl":"pkg:npm/dompurify@3.4.11","externalReferences":[{"type":"vcs","url":"https://github.com/cure53/DOMPurify"},{"type":"vcs","url":"git://github.com/cure53/DOMPurify.git"}],"type":"library","bom-ref":"pkg:npm/dompurify@3.4.11","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/dompurify/package.json"},{"name":"ImportedModules","value":"dompurify"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/dompurify/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/dompurify/package.json"}],"occurrences":[{"location":"dist/react/genie/genie-chat-message.js#7"},{"location":"tmp/dist/react/genie/genie-chat-message.js#7"},{"location":"src/react/genie/genie-chat-message.tsx#1"}]},"tags":["security","web"]},{"authors":[{"name":"hustcc (http://github.com/hustcc)"}],"group":"","name":"echarts-for-react","version":"3.0.5","description":" Apache Echarts components for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/echarts-for-react@3.0.5","externalReferences":[{"type":"vcs","url":"https://github.com/hustcc/echarts-for-react"},{"type":"vcs","url":"https://github.com/hustcc/echarts-for-react.git"}],"type":"library","bom-ref":"pkg:npm/echarts-for-react@3.0.5","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/echarts-for-react/package.json"},{"name":"ImportedModules","value":"echarts-for-react/esm/core"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/echarts-for-react/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/echarts-for-react/package.json"}],"occurrences":[{"location":"dist/react/charts/base.js#9"},{"location":"tmp/dist/react/charts/base.js#9"},{"location":"src/react/charts/base.tsx#28"},{"location":"dist/react/charts/base.js#9"},{"location":"tmp/dist/react/charts/base.js#9"},{"location":"src/react/charts/base.tsx#28"}]}},{"group":"","name":"echarts","version":"6.0.0","description":"Apache ECharts is a powerful, interactive charting and data visualization library for browser","scope":"required","licenses":[{"license":{"id":"Apache-2.0","url":"https://opensource.org/licenses/Apache-2.0"}}],"purl":"pkg:npm/echarts@6.0.0","externalReferences":[{"type":"website","url":"https://echarts.apache.org"},{"type":"vcs","url":"git+https://github.com/apache/echarts.git"}],"type":"library","bom-ref":"pkg:npm/echarts@6.0.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/echarts/package.json"},{"name":"ImportedModules","value":"echarts/charts,BarChart,echarts/charts/BarChart,HeatmapChart,echarts/charts/HeatmapChart,LineChart,echarts/charts/LineChart,PieChart,echarts/charts/PieChart,RadarChart,echarts/charts/RadarChart,ScatterChart,echarts/charts/ScatterChart,echarts/components,GridComponent,echarts/components/GridComponent,LegendComponent,echarts/components/LegendComponent,TitleComponent,echarts/components/TitleComponent,TooltipComponent,echarts/components/TooltipComponent,VisualMapComponent,echarts/components/VisualMapComponent,echarts/core,echarts/features,LegacyGridContainLabel,echarts/features/LegacyGridContainLabel,echarts/renderers,CanvasRenderer,echarts/renderers/CanvasRenderer,echarts,ECharts,echarts/ECharts"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/echarts/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/echarts/package.json"}],"occurrences":[{"location":"dist/react/charts/base.js#4"},{"location":"tmp/dist/react/charts/base.js#4"},{"location":"src/react/charts/base.tsx#11"},{"location":"dist/react/charts/base.js#4"},{"location":"dist/react/charts/base.js#5"},{"location":"dist/react/charts/base.js#6"},{"location":"dist/react/charts/base.js#7"},{"location":"dist/react/charts/base.js#8"},{"location":"tmp/dist/react/charts/base.js#4"},{"location":"tmp/dist/react/charts/base.js#5"},{"location":"tmp/dist/react/charts/base.js#6"},{"location":"tmp/dist/react/charts/base.js#7"},{"location":"tmp/dist/react/charts/base.js#8"},{"location":"src/react/charts/base.tsx#3"},{"location":"src/react/charts/base.tsx#11"},{"location":"src/react/charts/base.tsx#18"},{"location":"src/react/charts/base.tsx#19"},{"location":"src/react/charts/base.tsx#20"},{"location":"src/react/charts/base.tsx#21"},{"location":"dist/react/charts/base.js#5"},{"location":"tmp/dist/react/charts/base.js#5"},{"location":"src/react/charts/base.tsx#18"},{"location":"dist/react/charts/base.js#6"},{"location":"tmp/dist/react/charts/base.js#6"},{"location":"src/react/charts/base.tsx#19"},{"location":"dist/react/charts/base.js#7"},{"location":"tmp/dist/react/charts/base.js#7"},{"location":"src/react/charts/base.tsx#20"},{"location":"dist/react/charts/base.js#8"},{"location":"tmp/dist/react/charts/base.js#8"},{"location":"src/react/charts/base.tsx#21"}]}},{"authors":[{"name":"David Jerleke"}],"group":"","name":"embla-carousel-react","version":"8.6.0","description":"A lightweight carousel library with fluid motion and great swipe precision","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/embla-carousel-react@8.6.0","externalReferences":[{"type":"website","url":"https://www.embla-carousel.com"},{"type":"vcs","url":"git+https://github.com/davidjerleke/embla-carousel"}],"type":"library","bom-ref":"pkg:npm/embla-carousel-react@8.6.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/embla-carousel-react/package.json"},{"name":"ImportedModules","value":"embla-carousel-react,UseEmblaCarouselType,embla-carousel-react/UseEmblaCarouselType"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/embla-carousel-react/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/embla-carousel-react/package.json"}],"occurrences":[{"location":"dist/react/ui/carousel.js#6"},{"location":"tmp/dist/react/ui/carousel.js#6"},{"location":"src/react/ui/carousel.tsx#4"}]}},{"authors":[{"name":"Guilherme Rodz <g@rodz.dev>"}],"group":"","name":"input-otp","version":"1.4.2","description":"One-time password input component for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/input-otp@1.4.2","externalReferences":[{"type":"website","url":"https://input-otp.rodz.dev/"},{"type":"vcs","url":"git+https://github.com/guilhermerodz/input-otp.git"}],"type":"library","bom-ref":"pkg:npm/input-otp@1.4.2","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/input-otp/package.json"},{"name":"ImportedModules","value":"input-otp,OTPInput,input-otp/OTPInput,OTPInputContext,input-otp/OTPInputContext"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/input-otp/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/input-otp/package.json"}],"occurrences":[{"location":"dist/react/ui/input-otp.js#5"},{"location":"tmp/dist/react/ui/input-otp.js#5"},{"location":"src/react/ui/input-otp.tsx#2"}]}},{"authors":[{"name":"Eric Fennis"}],"group":"","name":"lucide-react","version":"0.554.0","description":"A Lucide icon library package for React applications.","scope":"required","licenses":[{"license":{"id":"ISC","url":"https://opensource.org/licenses/ISC"}}],"purl":"pkg:npm/lucide-react@0.554.0","externalReferences":[{"type":"website","url":"https://lucide.dev"},{"type":"vcs","url":"https://github.com/lucide-icons/lucide.git"}],"type":"library","bom-ref":"pkg:npm/lucide-react@0.554.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/lucide-react/package.json"},{"name":"ImportedModules","value":"lucide-react,Loader2Icon,lucide-react/Loader2Icon,AlertCircle,lucide-react/AlertCircle,ArrowLeft,lucide-react/ArrowLeft,FileIcon,lucide-react/FileIcon,ChevronRight,lucide-react/ChevronRight,FolderIcon,lucide-react/FolderIcon,Download,lucide-react/Download,Loader2,lucide-react/Loader2,Trash2,lucide-react/Trash2,FolderPlus,lucide-react/FolderPlus,lucide-react/X,BarChart3Icon,lucide-react/BarChart3Icon,ChevronDownIcon,lucide-react/ChevronDownIcon,ChevronDown,lucide-react/ChevronDown,ArrowUpDown,lucide-react/ArrowUpDown,MoreHorizontal,lucide-react/MoreHorizontal,ChevronLeftIcon,lucide-react/ChevronLeftIcon,ChevronRightIcon,lucide-react/ChevronRightIcon,ArrowRight,lucide-react/ArrowRight,CheckIcon,lucide-react/CheckIcon,SearchIcon,lucide-react/SearchIcon,CircleIcon,lucide-react/CircleIcon,XIcon,lucide-react/XIcon,MinusIcon,lucide-react/MinusIcon,MoreHorizontalIcon,lucide-react/MoreHorizontalIcon,GripVerticalIcon,lucide-react/GripVerticalIcon,ChevronUpIcon,lucide-react/ChevronUpIcon,PanelLeftIcon,lucide-react/PanelLeftIcon,CircleCheckIcon,lucide-react/CircleCheckIcon,InfoIcon,lucide-react/InfoIcon,OctagonXIcon,lucide-react/OctagonXIcon,TriangleAlertIcon,lucide-react/TriangleAlertIcon,LucideIcon,lucide-react/LucideIcon"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/lucide-react/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/lucide-react/package.json"}],"occurrences":[{"location":"dist/react/charts/loading.js#2"},{"location":"dist/react/file-browser/directory-list.js#6"},{"location":"dist/react/file-browser/file-entry.js#4"},{"location":"dist/react/file-browser/file-preview-panel.js#6"},{"location":"dist/react/file-browser/new-folder-input.js#5"},{"location":"dist/react/genie/genie-query-visualization.js#12"},{"location":"dist/react/table/data-table.js#9"},{"location":"dist/react/table/table-wrapper.js#10"},{"location":"dist/react/ui/accordion.js#3"},{"location":"dist/react/ui/breadcrumb.js#3"},{"location":"dist/react/ui/calendar.js#7"},{"location":"dist/react/ui/carousel.js#5"},{"location":"dist/react/ui/checkbox.js#5"},{"location":"dist/react/ui/command.js#4"},{"location":"dist/react/ui/context-menu.js#6"},{"location":"dist/react/ui/dialog.js#4"},{"location":"dist/react/ui/dropdown-menu.js#4"},{"location":"dist/react/ui/input-otp.js#4"},{"location":"dist/react/ui/menubar.js#4"},{"location":"dist/react/ui/navigation-menu.js#3"},{"location":"dist/react/ui/pagination.js#4"},{"location":"dist/react/ui/radio-group.js#5"},{"location":"dist/react/ui/resizable.js#3"},{"location":"dist/react/ui/select.js#4"},{"location":"dist/react/ui/sheet.js#4"},{"location":"dist/react/ui/sidebar.js#13"},{"location":"dist/react/ui/sonner.js#2"},{"location":"dist/react/ui/spinner.js#3"},{"location":"tmp/dist/react/charts/loading.js#2"},{"location":"tmp/dist/react/file-browser/directory-list.js#6"},{"location":"tmp/dist/react/file-browser/file-entry.js#4"},{"location":"tmp/dist/react/file-browser/file-preview-panel.js#6"},{"location":"tmp/dist/react/file-browser/new-folder-input.js#5"},{"location":"tmp/dist/react/genie/genie-query-visualization.js#12"},{"location":"tmp/dist/react/table/data-table.js#9"},{"location":"tmp/dist/react/table/table-wrapper.js#10"},{"location":"tmp/dist/react/ui/accordion.js#3"},{"location":"tmp/dist/react/ui/breadcrumb.js#3"},{"location":"tmp/dist/react/ui/calendar.js#7"},{"location":"tmp/dist/react/ui/carousel.js#5"},{"location":"tmp/dist/react/ui/checkbox.js#5"},{"location":"tmp/dist/react/ui/command.js#4"},{"location":"tmp/dist/react/ui/context-menu.js#6"},{"location":"tmp/dist/react/ui/dialog.js#4"},{"location":"tmp/dist/react/ui/dropdown-menu.js#4"},{"location":"tmp/dist/react/ui/input-otp.js#4"},{"location":"tmp/dist/react/ui/menubar.js#4"},{"location":"tmp/dist/react/ui/navigation-menu.js#3"},{"location":"tmp/dist/react/ui/pagination.js#4"},{"location":"tmp/dist/react/ui/radio-group.js#5"},{"location":"tmp/dist/react/ui/resizable.js#3"},{"location":"tmp/dist/react/ui/select.js#4"},{"location":"tmp/dist/react/ui/sheet.js#4"},{"location":"tmp/dist/react/ui/sidebar.js#13"},{"location":"tmp/dist/react/ui/sonner.js#2"},{"location":"tmp/dist/react/ui/spinner.js#3"},{"location":"src/react/charts/loading.tsx#1"},{"location":"src/react/file-browser/directory-list.tsx#1"},{"location":"src/react/file-browser/file-entry.tsx#1"},{"location":"src/react/file-browser/file-preview-panel.tsx#1"},{"location":"src/react/file-browser/new-folder-input.tsx#1"},{"location":"src/react/genie/genie-query-visualization.tsx#1"},{"location":"src/react/resource-status-indicator.tsx#1"},{"location":"src/react/table/data-table.tsx#2"},{"location":"src/react/table/table-wrapper.tsx#15"},{"location":"src/react/ui/accordion.tsx#3"},{"location":"src/react/ui/breadcrumb.tsx#3"},{"location":"src/react/ui/calendar.tsx#9"},{"location":"src/react/ui/carousel.tsx#5"},{"location":"src/react/ui/checkbox.tsx#5"},{"location":"src/react/ui/command.tsx#3"},{"location":"src/react/ui/context-menu.tsx#5"},{"location":"src/react/ui/dialog.tsx#3"},{"location":"src/react/ui/dropdown-menu.tsx#3"},{"location":"src/react/ui/input-otp.tsx#3"},{"location":"src/react/ui/menubar.tsx#3"},{"location":"src/react/ui/navigation-menu.tsx#4"},{"location":"src/react/ui/pagination.tsx#6"},{"location":"src/react/ui/radio-group.tsx#5"},{"location":"src/react/ui/resizable.tsx#2"},{"location":"src/react/ui/select.tsx#3"},{"location":"src/react/ui/sheet.tsx#3"},{"location":"src/react/ui/sidebar.tsx#6"},{"location":"src/react/ui/sonner.tsx#8"},{"location":"src/react/ui/spinner.tsx#2"}]}},{"authors":[{"name":"Christopher Jeffrey"}],"group":"","name":"marked","version":"17.0.3","description":"A markdown parser built for speed","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/marked@17.0.3","externalReferences":[{"type":"website","url":"https://marked.js.org"},{"type":"vcs","url":"git://github.com/markedjs/marked.git"}],"type":"library","bom-ref":"pkg:npm/marked@17.0.3","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/marked/package.json"},{"name":"ImportedModules","value":"marked,marked/marked"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/marked/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/marked/package.json"}],"occurrences":[{"location":"dist/react/genie/genie-chat-message.js#8"},{"location":"tmp/dist/react/genie/genie-chat-message.js#8"},{"location":"src/react/genie/genie-chat-message.tsx#2"}]}},{"group":"","name":"next-themes","version":"0.4.6","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/next-themes@0.4.6","externalReferences":[{"type":"vcs","url":"https://github.com/pacocoursey/next-themes.git"}],"type":"framework","bom-ref":"pkg:npm/next-themes@0.4.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/next-themes/package.json"},{"name":"ImportedModules","value":"next-themes,useTheme,next-themes/useTheme"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/next-themes/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/next-themes/package.json"}],"occurrences":[{"location":"dist/react/ui/sonner.js#4"},{"location":"tmp/dist/react/ui/sonner.js#4"},{"location":"src/react/ui/sonner.tsx#9"}]},"tags":["framework"]},{"authors":[{"name":"Giampaolo Bellavite <io@gpbl.dev>"}],"group":"","name":"react-day-picker","version":"9.12.0","description":"Customizable Date Picker for React","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/react-day-picker@9.12.0","externalReferences":[{"type":"website","url":"https://daypicker.dev"},{"type":"vcs","url":"https://github.com/gpbl/react-day-picker"}],"type":"framework","bom-ref":"pkg:npm/react-day-picker@9.12.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/react-day-picker/package.json"},{"name":"ImportedModules","value":"react-day-picker,DayPicker,react-day-picker/DayPicker,getDefaultClassNames,react-day-picker/getDefaultClassNames,DayButton,react-day-picker/DayButton"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/react-day-picker/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/react-day-picker/package.json"}],"occurrences":[{"location":"dist/react/ui/calendar.js#8"},{"location":"tmp/dist/react/ui/calendar.js#8"},{"location":"src/react/ui/calendar.tsx#10"}]},"tags":["framework"]},{"authors":[{"name":"Beier(Bill) Luo <bluebill1049@hotmail.com>"}],"group":"","name":"react-hook-form","version":"7.68.0","description":"Performant, flexible and extensible forms library for React Hooks","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/react-hook-form@7.68.0","externalReferences":[{"type":"website","url":"https://react-hook-form.com"},{"type":"vcs","url":"https://github.com/react-hook-form/react-hook-form"}],"type":"framework","bom-ref":"pkg:npm/react-hook-form@7.68.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/react-hook-form/package.json"},{"name":"ImportedModules","value":"react-hook-form,Controller,react-hook-form/Controller,FormProvider,react-hook-form/FormProvider,useFormContext,react-hook-form/useFormContext,useFormState,react-hook-form/useFormState,ControllerProps,react-hook-form/ControllerProps,FieldPath,react-hook-form/FieldPath,FieldValues,react-hook-form/FieldValues"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/react-hook-form/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/react-hook-form/package.json"}],"occurrences":[{"location":"dist/react/ui/form.js#8"},{"location":"tmp/dist/react/ui/form.js#8"},{"location":"src/react/ui/form.tsx#14"}]},"tags":["framework"]},{"authors":[{"name":"Brian Vaughn <brian.david.vaughn@gmail.com>"}],"group":"","name":"react-resizable-panels","version":"3.0.6","description":"React components for resizable panel groups/layouts","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/react-resizable-panels@3.0.6","externalReferences":[{"type":"vcs","url":"git+https://github.com/bvaughn/react-resizable-panels.git"}],"type":"framework","bom-ref":"pkg:npm/react-resizable-panels@3.0.6","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/react-resizable-panels/package.json"},{"name":"ImportedModules","value":"react-resizable-panels"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/react-resizable-panels/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/react-resizable-panels/package.json"}],"occurrences":[{"location":"dist/react/ui/resizable.js#4"},{"location":"tmp/dist/react/ui/resizable.js#4"},{"location":"src/react/ui/resizable.tsx#3"}]},"tags":["framework"]},{"group":"","name":"react","version":"19.2.0","description":"React is a JavaScript library for building user interfaces.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/react@19.2.0","externalReferences":[{"type":"website","url":"https://react.dev/"},{"type":"vcs","url":"https://github.com/facebook/react.git"}],"type":"framework","bom-ref":"pkg:npm/react@19.2.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/react/package.json"},{"name":"ExportedModules","value":"react/charts/area,react/charts/bar,react/charts/heatmap,react/charts/line,react/charts/pie,react/charts/radar,react/charts/scatter,react/hooks/use-chart-data,react/charts/base,react/charts/create-chart,react/charts/loading,react/charts/wrapper,react/charts/normalize,react/charts/constants,react/charts/theme,react/charts/utils,react/charts/options,react/charts/types,react/lib/format,react/genie/genie-chart-inference,react/genie/genie-chat,react/genie/genie-chat-input,react/genie/genie-chat-message,react/genie/genie-chat-message-list,react/genie/genie-query-transform,react/genie/genie-query-visualization,react/genie/use-genie-chat,react/resource-status-indicator,react/hooks/types,react/hooks/use-agent-chat,react/hooks/use-analytics-query,react/hooks/use-mobile,react/hooks/use-plugin-config,react/hooks/use-resource-status,react/hooks/use-serving-invoke,react/hooks/use-serving-stream,DonutChart,pie/DonutChart,PieChart,pie/PieChart,UseChartDataOptions,.hooks/use-chart-data/UseChartDataOptions,UseChartDataResult,.hooks/use-chart-data/UseChartDataResult,useChartData,.hooks/use-chart-data/useChartData,use-chart-data/UseChartDataOptions,use-chart-data/UseChartDataResult,use-chart-data/useChartData,BaseChart,base/BaseChart,BaseChartProps,base/BaseChartProps,LoadingSkeleton,loading/LoadingSkeleton,ResourceWaitingPlaceholder,loading/ResourceWaitingPlaceholder,ChartWrapper,wrapper/ChartWrapper,ChartWrapperProps,wrapper/ChartWrapperProps,NormalizedHeatmapData,normalize/NormalizedHeatmapData,normalizeChartData,normalize/normalizeChartData,normalizeHeatmapData,normalize/normalizeHeatmapData,CHART_COLOR_VARS,constants/CHART_COLOR_VARS,CHART_COLOR_VARS_CATEGORICAL,constants/CHART_COLOR_VARS_CATEGORICAL,CHART_COLOR_VARS_DIVERGING,constants/CHART_COLOR_VARS_DIVERGING,CHART_COLOR_VARS_SEQUENTIAL,constants/CHART_COLOR_VARS_SEQUENTIAL,DATE_FIELD_PATTERNS,constants/DATE_FIELD_PATTERNS,FALLBACK_COLORS_CATEGORICAL,constants/FALLBACK_COLORS_CATEGORICAL,FALLBACK_COLORS_DIVERGING,constants/FALLBACK_COLORS_DIVERGING,FALLBACK_COLORS_SEQUENTIAL,constants/FALLBACK_COLORS_SEQUENTIAL,METADATA_DATE_PATTERNS,constants/METADATA_DATE_PATTERNS,NAME_FIELD_PATTERNS,constants/NAME_FIELD_PATTERNS,useAllThemeColors,theme/useAllThemeColors,useChartUITokens,theme/useChartUITokens,useThemeColors,theme/useThemeColors,createTimeSeriesData,utils/createTimeSeriesData,formatLabel,utils/formatLabel,sortTimeSeriesAscending,utils/sortTimeSeriesAscending,toChartArray,utils/toChartArray,toChartValue,utils/toChartValue,truncateLabel,utils/truncateLabel,buildCartesianOption,options/buildCartesianOption,buildHeatmapOption,options/buildHeatmapOption,buildHorizontalBarOption,options/buildHorizontalBarOption,buildPieOption,options/buildPieOption,buildRadarOption,options/buildRadarOption,CartesianContext,options/CartesianContext,HeatmapContext,options/HeatmapContext,OptionBuilderContext,options/OptionBuilderContext,AreaChartProps,types/AreaChartProps,AreaChartSpecificProps,types/AreaChartSpecificProps,BarChartProps,types/BarChartProps,BarChartSpecificProps,types/BarChartSpecificProps,ChartBaseProps,types/ChartBaseProps,ChartColorPalette,types/ChartColorPalette,ChartData,types/ChartData,ChartType,types/ChartType,ChartUITokens,types/ChartUITokens,DataFormat,types/DataFormat,DataProps,types/DataProps,DonutChartProps,types/DonutChartProps,HeatmapChartProps,types/HeatmapChartProps,HeatmapChartSpecificProps,types/HeatmapChartSpecificProps,LineChartProps,types/LineChartProps,LineChartSpecificProps,types/LineChartSpecificProps,NormalizedChartData,types/NormalizedChartData,NormalizedChartDataBase,types/NormalizedChartDataBase,Orientation,types/Orientation,PieChartProps,types/PieChartProps,PieChartSpecificProps,types/PieChartSpecificProps,QueryProps,types/QueryProps,RadarChartProps,types/RadarChartProps,RadarChartSpecificProps,types/RadarChartSpecificProps,ScatterChartProps,types/ScatterChartProps,ScatterChartSpecificProps,types/ScatterChartSpecificProps,UnifiedChartProps,types/UnifiedChartProps,isArrowTable,types/isArrowTable,isDataProps,types/isDataProps,isQueryProps,types/isQueryProps,ChartInference,genie-chart-inference/ChartInference,getCompatibleChartTypes,genie-chart-inference/getCompatibleChartTypes,inferChartType,genie-chart-inference/inferChartType,ColumnCategory,genie-query-transform/ColumnCategory,GenieColumnMeta,genie-query-transform/GenieColumnMeta,TransformedGenieData,genie-query-transform/TransformedGenieData,transformGenieData,genie-query-transform/transformGenieData,ResourceKindRenderer,.resource-status-indicator/ResourceKindRenderer,ResourceStatusIndicator,.resource-status-indicator/ResourceStatusIndicator,ResourceStatusIndicatorProps,.resource-status-indicator/ResourceStatusIndicatorProps,ResourceStatusToasterOptions,.resource-status-indicator/ResourceStatusToasterOptions,useResourceStatusToaster,.resource-status-indicator/useResourceStatusToaster,AnalyticsFormat,types/AnalyticsFormat,InferResultByFormat,types/InferResultByFormat,InferRowType,types/InferRowType,InferServingChunk,types/InferServingChunk,InferServingRequest,types/InferServingRequest,InferServingResponse,types/InferServingResponse,PluginRegistry,types/PluginRegistry,QueryRegistry,types/QueryRegistry,ServingAlias,types/ServingAlias,ServingEndpointRegistry,types/ServingEndpointRegistry,TypedArrowTable,types/TypedArrowTable,UseAnalyticsQueryOptions,types/UseAnalyticsQueryOptions,UseAnalyticsQueryResult,types/UseAnalyticsQueryResult,WarehouseState,types/WarehouseState,WarehouseStatus,types/WarehouseStatus,AgentChatEvent,use-agent-chat/AgentChatEvent,UseAgentChatOptions,use-agent-chat/UseAgentChatOptions,UseAgentChatResult,use-agent-chat/UseAgentChatResult,useAgentChat,use-agent-chat/useAgentChat,AggregatedResourceStatus,use-resource-status/AggregatedResourceStatus,ResourceSeverity,use-resource-status/ResourceSeverity,ResourceStatus,use-resource-status/ResourceStatus,ResourceStatusFilter,use-resource-status/ResourceStatusFilter,ResourceStatusProvider,use-resource-status/ResourceStatusProvider,ResourceStatusProviderProps,use-resource-status/ResourceStatusProviderProps,useResourceStatus,use-resource-status/useResourceStatus,useResourceStatusPublisher,use-resource-status/useResourceStatusPublisher,UseServingInvokeOptions,use-serving-invoke/UseServingInvokeOptions,UseServingInvokeResult,use-serving-invoke/UseServingInvokeResult,useServingInvoke,use-serving-invoke/useServingInvoke,UseServingStreamOptions,use-serving-stream/UseServingStreamOptions,UseServingStreamResult,use-serving-stream/UseServingStreamResult,useServingStream,use-serving-stream/useServingStream"},{"name":"ImportedModules","value":"react,useCallback,react/useCallback,useMemo,react/useMemo,useRef,react/useRef,react/jsx-runtime,react/jsx-runtime/jsx,Component,react/Component,jsxs,react/jsx-runtime/jsxs,useEffect,react/useEffect,useState,react/useState,useLayoutEffect,react/useLayoutEffect,useId,react/useId,createContext,react/createContext,useContext,react/useContext,useSyncExternalStore,react/useSyncExternalStore,Fragment,react/jsx-runtime/Fragment,react/JSX,ReactNode,react/ReactNode,KeyboardEvent,react/KeyboardEvent"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/react/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/react/package.json"}],"occurrences":[{"location":"dist/react/charts/base.js#10"},{"location":"dist/react/charts/base.js#11"},{"location":"dist/react/charts/chart-error-boundary.js#1"},{"location":"dist/react/charts/chart-error-boundary.js#2"},{"location":"dist/react/charts/create-chart.js#3"},{"location":"dist/react/charts/empty.js#1"},{"location":"dist/react/charts/error.js#1"},{"location":"dist/react/charts/loading.js#1"},{"location":"dist/react/charts/theme.js#2"},{"location":"dist/react/charts/wrapper.js#7"},{"location":"dist/react/file-browser/directory-list.js#5"},{"location":"dist/react/file-browser/file-breadcrumb.js#2"},{"location":"dist/react/file-browser/file-entry.js#3"},{"location":"dist/react/file-browser/file-preview-panel.js#5"},{"location":"dist/react/file-browser/new-folder-input.js#3"},{"location":"dist/react/file-browser/new-folder-input.js#4"},{"location":"dist/react/genie/genie-chat-input.js#3"},{"location":"dist/react/genie/genie-chat-input.js#4"},{"location":"dist/react/genie/genie-chat-message-list.js#7"},{"location":"dist/react/genie/genie-chat-message-list.js#8"},{"location":"dist/react/genie/genie-chat-message.js#5"},{"location":"dist/react/genie/genie-chat-message.js#6"},{"location":"dist/react/genie/genie-chat.js#6"},{"location":"dist/react/genie/genie-query-visualization.js#10"},{"location":"dist/react/genie/genie-query-visualization.js#11"},{"location":"dist/react/genie/use-genie-chat.js#3"},{"location":"dist/react/hooks/use-agent-chat.js#2"},{"location":"dist/react/hooks/use-analytics-query.js#5"},{"location":"dist/react/hooks/use-analytics-warehouse-status.js#2"},{"location":"dist/react/hooks/use-chart-data.js#2"},{"location":"dist/react/hooks/use-mobile.js#1"},{"location":"dist/react/hooks/use-query-hmr.js#1"},{"location":"dist/react/hooks/use-resource-status.js#1"},{"location":"dist/react/hooks/use-resource-status.js#2"},{"location":"dist/react/hooks/use-serving-invoke.js#2"},{"location":"dist/react/hooks/use-serving-stream.js#3"},{"location":"dist/react/portal-container-context.js#1"},{"location":"dist/react/portal-container-context.js#2"},{"location":"dist/react/resource-status-indicator.js#3"},{"location":"dist/react/resource-status-indicator.js#4"},{"location":"dist/react/table/data-table.js#8"},{"location":"dist/react/table/empty.js#1"},{"location":"dist/react/table/error.js#1"},{"location":"dist/react/table/loading.js#1"},{"location":"dist/react/table/table-wrapper.js#8"},{"location":"dist/react/table/table-wrapper.js#9"},{"location":"dist/react/ui/accordion.js#2"},{"location":"dist/react/ui/alert-dialog.js#4"},{"location":"dist/react/ui/alert.js#2"},{"location":"dist/react/ui/aspect-ratio.js#3"},{"location":"dist/react/ui/avatar.js#2"},{"location":"dist/react/ui/badge.js#2"},{"location":"dist/react/ui/breadcrumb.js#2"},{"location":"dist/react/ui/button-group.js#3"},{"location":"dist/react/ui/button.js#2"},{"location":"dist/react/ui/calendar.js#5"},{"location":"dist/react/ui/calendar.js#6"},{"location":"dist/react/ui/card.js#2"},{"location":"dist/react/ui/carousel.js#3"},{"location":"dist/react/ui/carousel.js#4"},{"location":"dist/react/ui/checkbox.js#4"},{"location":"dist/react/ui/collapsible.js#1"},{"location":"dist/react/ui/command.js#3"},{"location":"dist/react/ui/context-menu.js#5"},{"location":"dist/react/ui/dialog.js#3"},{"location":"dist/react/ui/drawer.js#5"},{"location":"dist/react/ui/dropdown-menu.js#3"},{"location":"dist/react/ui/empty.js#2"},{"location":"dist/react/ui/field.js#4"},{"location":"dist/react/ui/field.js#5"},{"location":"dist/react/ui/form.js#5"},{"location":"dist/react/ui/form.js#6"},{"location":"dist/react/ui/hover-card.js#5"},{"location":"dist/react/ui/input-group.js#7"},{"location":"dist/react/ui/input-otp.js#2"},{"location":"dist/react/ui/input-otp.js#3"},{"location":"dist/react/ui/input.js#2"},{"location":"dist/react/ui/item.js#3"},{"location":"dist/react/ui/kbd.js#2"},{"location":"dist/react/ui/label.js#4"},{"location":"dist/react/ui/menubar.js#3"},{"location":"dist/react/ui/navigation-menu.js#2"},{"location":"dist/react/ui/pagination.js#3"},{"location":"dist/react/ui/popover.js#5"},{"location":"dist/react/ui/progress.js#2"},{"location":"dist/react/ui/radio-group.js#4"},{"location":"dist/react/ui/resizable.js#2"},{"location":"dist/react/ui/scroll-area.js#4"},{"location":"dist/react/ui/select.js#3"},{"location":"dist/react/ui/separator.js#4"},{"location":"dist/react/ui/sheet.js#3"},{"location":"dist/react/ui/sidebar.js#11"},{"location":"dist/react/ui/sidebar.js#12"},{"location":"dist/react/ui/skeleton.js#2"},{"location":"dist/react/ui/slider.js#4"},{"location":"dist/react/ui/slider.js#5"},{"location":"dist/react/ui/sonner.js#1"},{"location":"dist/react/ui/spinner.js#2"},{"location":"dist/react/ui/switch.js#4"},{"location":"dist/react/ui/table.js#2"},{"location":"dist/react/ui/tabs.js#4"},{"location":"dist/react/ui/textarea.js#2"},{"location":"dist/react/ui/toggle-group.js#3"},{"location":"dist/react/ui/toggle-group.js#4"},{"location":"dist/react/ui/toggle.js#2"},{"location":"dist/react/ui/tooltip.js#5"},{"location":"tmp/dist/react/charts/base.js#10"},{"location":"tmp/dist/react/charts/base.js#11"},{"location":"tmp/dist/react/charts/chart-error-boundary.js#1"},{"location":"tmp/dist/react/charts/chart-error-boundary.js#2"},{"location":"tmp/dist/react/charts/create-chart.js#3"},{"location":"tmp/dist/react/charts/empty.js#1"},{"location":"tmp/dist/react/charts/error.js#1"},{"location":"tmp/dist/react/charts/loading.js#1"},{"location":"tmp/dist/react/charts/theme.js#2"},{"location":"tmp/dist/react/charts/wrapper.js#7"},{"location":"tmp/dist/react/file-browser/directory-list.js#5"},{"location":"tmp/dist/react/file-browser/file-breadcrumb.js#2"},{"location":"tmp/dist/react/file-browser/file-entry.js#3"},{"location":"tmp/dist/react/file-browser/file-preview-panel.js#5"},{"location":"tmp/dist/react/file-browser/new-folder-input.js#3"},{"location":"tmp/dist/react/file-browser/new-folder-input.js#4"},{"location":"tmp/dist/react/genie/genie-chat-input.js#3"},{"location":"tmp/dist/react/genie/genie-chat-input.js#4"},{"location":"tmp/dist/react/genie/genie-chat-message-list.js#7"},{"location":"tmp/dist/react/genie/genie-chat-message-list.js#8"},{"location":"tmp/dist/react/genie/genie-chat-message.js#5"},{"location":"tmp/dist/react/genie/genie-chat-message.js#6"},{"location":"tmp/dist/react/genie/genie-chat.js#6"},{"location":"tmp/dist/react/genie/genie-query-visualization.js#10"},{"location":"tmp/dist/react/genie/genie-query-visualization.js#11"},{"location":"tmp/dist/react/genie/use-genie-chat.js#3"},{"location":"tmp/dist/react/hooks/use-agent-chat.js#2"},{"location":"tmp/dist/react/hooks/use-analytics-query.js#5"},{"location":"tmp/dist/react/hooks/use-analytics-warehouse-status.js#2"},{"location":"tmp/dist/react/hooks/use-chart-data.js#2"},{"location":"tmp/dist/react/hooks/use-mobile.js#1"},{"location":"tmp/dist/react/hooks/use-query-hmr.js#1"},{"location":"tmp/dist/react/hooks/use-resource-status.js#1"},{"location":"tmp/dist/react/hooks/use-resource-status.js#2"},{"location":"tmp/dist/react/hooks/use-serving-invoke.js#2"},{"location":"tmp/dist/react/hooks/use-serving-stream.js#3"},{"location":"tmp/dist/react/portal-container-context.js#1"},{"location":"tmp/dist/react/portal-container-context.js#2"},{"location":"tmp/dist/react/resource-status-indicator.js#3"},{"location":"tmp/dist/react/resource-status-indicator.js#4"},{"location":"tmp/dist/react/table/data-table.js#8"},{"location":"tmp/dist/react/table/empty.js#1"},{"location":"tmp/dist/react/table/error.js#1"},{"location":"tmp/dist/react/table/loading.js#1"},{"location":"tmp/dist/react/table/table-wrapper.js#8"},{"location":"tmp/dist/react/table/table-wrapper.js#9"},{"location":"tmp/dist/react/ui/accordion.js#2"},{"location":"tmp/dist/react/ui/alert-dialog.js#4"},{"location":"tmp/dist/react/ui/alert.js#2"},{"location":"tmp/dist/react/ui/aspect-ratio.js#3"},{"location":"tmp/dist/react/ui/avatar.js#2"},{"location":"tmp/dist/react/ui/badge.js#2"},{"location":"tmp/dist/react/ui/breadcrumb.js#2"},{"location":"tmp/dist/react/ui/button-group.js#3"},{"location":"tmp/dist/react/ui/button.js#2"},{"location":"tmp/dist/react/ui/calendar.js#5"},{"location":"tmp/dist/react/ui/calendar.js#6"},{"location":"tmp/dist/react/ui/card.js#2"},{"location":"tmp/dist/react/ui/carousel.js#3"},{"location":"tmp/dist/react/ui/carousel.js#4"},{"location":"tmp/dist/react/ui/checkbox.js#4"},{"location":"tmp/dist/react/ui/collapsible.js#1"},{"location":"tmp/dist/react/ui/command.js#3"},{"location":"tmp/dist/react/ui/context-menu.js#5"},{"location":"tmp/dist/react/ui/dialog.js#3"},{"location":"tmp/dist/react/ui/drawer.js#5"},{"location":"tmp/dist/react/ui/dropdown-menu.js#3"},{"location":"tmp/dist/react/ui/empty.js#2"},{"location":"tmp/dist/react/ui/field.js#4"},{"location":"tmp/dist/react/ui/field.js#5"},{"location":"tmp/dist/react/ui/form.js#5"},{"location":"tmp/dist/react/ui/form.js#6"},{"location":"tmp/dist/react/ui/hover-card.js#5"},{"location":"tmp/dist/react/ui/input-group.js#7"},{"location":"tmp/dist/react/ui/input-otp.js#2"},{"location":"tmp/dist/react/ui/input-otp.js#3"},{"location":"tmp/dist/react/ui/input.js#2"},{"location":"tmp/dist/react/ui/item.js#3"},{"location":"tmp/dist/react/ui/kbd.js#2"},{"location":"tmp/dist/react/ui/label.js#4"},{"location":"tmp/dist/react/ui/menubar.js#3"},{"location":"tmp/dist/react/ui/navigation-menu.js#2"},{"location":"tmp/dist/react/ui/pagination.js#3"},{"location":"tmp/dist/react/ui/popover.js#5"},{"location":"tmp/dist/react/ui/progress.js#2"},{"location":"tmp/dist/react/ui/radio-group.js#4"},{"location":"tmp/dist/react/ui/resizable.js#2"},{"location":"tmp/dist/react/ui/scroll-area.js#4"},{"location":"tmp/dist/react/ui/select.js#3"},{"location":"tmp/dist/react/ui/separator.js#4"},{"location":"tmp/dist/react/ui/sheet.js#3"},{"location":"tmp/dist/react/ui/sidebar.js#11"},{"location":"tmp/dist/react/ui/sidebar.js#12"},{"location":"tmp/dist/react/ui/skeleton.js#2"},{"location":"tmp/dist/react/ui/slider.js#4"},{"location":"tmp/dist/react/ui/slider.js#5"},{"location":"tmp/dist/react/ui/sonner.js#1"},{"location":"tmp/dist/react/ui/spinner.js#2"},{"location":"tmp/dist/react/ui/switch.js#4"},{"location":"tmp/dist/react/ui/table.js#2"},{"location":"tmp/dist/react/ui/tabs.js#4"},{"location":"tmp/dist/react/ui/textarea.js#2"},{"location":"tmp/dist/react/ui/toggle-group.js#3"},{"location":"tmp/dist/react/ui/toggle-group.js#4"},{"location":"tmp/dist/react/ui/toggle.js#2"},{"location":"tmp/dist/react/ui/tooltip.js#5"},{"location":"src/react/charts/theme.ts#1"},{"location":"src/react/genie/use-genie-chat.ts#1"},{"location":"src/react/hooks/use-agent-chat.ts#1"},{"location":"src/react/hooks/use-analytics-query.ts#8"},{"location":"src/react/hooks/use-analytics-warehouse-status.ts#1"},{"location":"src/react/hooks/use-chart-data.ts#2"},{"location":"src/react/hooks/use-mobile.ts#1"},{"location":"src/react/hooks/use-query-hmr.ts#1"},{"location":"src/react/hooks/use-serving-invoke.ts#1"},{"location":"src/react/hooks/use-serving-stream.ts#1"},{"location":"src/react/charts/area/index.tsx#1"},{"location":"src/react/charts/bar/index.tsx#1"},{"location":"src/react/charts/base.tsx#29"},{"location":"src/react/charts/chart-error-boundary.tsx#1"},{"location":"src/react/charts/heatmap/index.tsx#1"},{"location":"src/react/charts/line/index.tsx#1"},{"location":"src/react/charts/pie/index.tsx#1"},{"location":"src/react/charts/radar/index.tsx#1"},{"location":"src/react/charts/scatter/index.tsx#1"},{"location":"src/react/charts/wrapper.tsx#1"},{"location":"src/react/file-browser/new-folder-input.tsx#2"},{"location":"src/react/genie/genie-chat-input.tsx#1"},{"location":"src/react/genie/genie-chat-message-list.tsx#1"},{"location":"src/react/genie/genie-chat-message.tsx#3"},{"location":"src/react/genie/genie-query-visualization.tsx#2"},{"location":"src/react/hooks/use-resource-status.tsx#9"},{"location":"src/react/portal-container-context.tsx#1"},{"location":"src/react/portal-container-context.tsx#2"},{"location":"src/react/resource-status-indicator.tsx#2"},{"location":"src/react/table/table-wrapper.tsx#16"},{"location":"src/react/ui/accordion.tsx#1"},{"location":"src/react/ui/alert-dialog.tsx#1"},{"location":"src/react/ui/alert.tsx#1"},{"location":"src/react/ui/avatar.tsx#1"},{"location":"src/react/ui/badge.tsx#1"},{"location":"src/react/ui/breadcrumb.tsx#1"},{"location":"src/react/ui/button.tsx#1"},{"location":"src/react/ui/calendar.tsx#4"},{"location":"src/react/ui/card.tsx#1"},{"location":"src/react/ui/carousel.tsx#1"},{"location":"src/react/ui/checkbox.tsx#3"},{"location":"src/react/ui/command.tsx#1"},{"location":"src/react/ui/context-menu.tsx#3"},{"location":"src/react/ui/dialog.tsx#1"},{"location":"src/react/ui/drawer.tsx#3"},{"location":"src/react/ui/dropdown-menu.tsx#1"},{"location":"src/react/ui/field.tsx#1"},{"location":"src/react/ui/form.tsx#3"},{"location":"src/react/ui/hover-card.tsx#3"},{"location":"src/react/ui/input-group.tsx#3"},{"location":"src/react/ui/input-otp.tsx#1"},{"location":"src/react/ui/input.tsx#1"},{"location":"src/react/ui/item.tsx#1"},{"location":"src/react/ui/label.tsx#3"},{"location":"src/react/ui/menubar.tsx#1"},{"location":"src/react/ui/navigation-menu.tsx#1"},{"location":"src/react/ui/pagination.tsx#1"},{"location":"src/react/ui/popover.tsx#3"},{"location":"src/react/ui/progress.tsx#1"},{"location":"src/react/ui/radio-group.tsx#3"},{"location":"src/react/ui/resizable.tsx#1"},{"location":"src/react/ui/scroll-area.tsx#3"},{"location":"src/react/ui/select.tsx#1"},{"location":"src/react/ui/separator.tsx#3"},{"location":"src/react/ui/sheet.tsx#1"},{"location":"src/react/ui/sidebar.tsx#3"},{"location":"src/react/ui/slider.tsx#3"},{"location":"src/react/ui/switch.tsx#3"},{"location":"src/react/ui/table.tsx#1"},{"location":"src/react/ui/tabs.tsx#3"},{"location":"src/react/ui/textarea.tsx#1"},{"location":"src/react/ui/toggle-group.tsx#1"},{"location":"src/react/ui/toggle.tsx#1"},{"location":"src/react/ui/tooltip.tsx#3"},{"location":"dist/react/charts/base.js#11"},{"location":"dist/react/charts/chart-error-boundary.js#2"},{"location":"dist/react/charts/create-chart.js#3"},{"location":"dist/react/charts/empty.js#1"},{"location":"dist/react/charts/error.js#1"},{"location":"dist/react/charts/loading.js#1"},{"location":"dist/react/charts/wrapper.js#7"},{"location":"dist/react/file-browser/directory-list.js#5"},{"location":"dist/react/file-browser/file-breadcrumb.js#2"},{"location":"dist/react/file-browser/file-entry.js#3"},{"location":"dist/react/file-browser/file-preview-panel.js#5"},{"location":"dist/react/file-browser/new-folder-input.js#4"},{"location":"dist/react/genie/genie-chat-input.js#4"},{"location":"dist/react/genie/genie-chat-message-list.js#8"},{"location":"dist/react/genie/genie-chat-message.js#6"},{"location":"dist/react/genie/genie-chat.js#6"},{"location":"dist/react/genie/genie-query-visualization.js#11"},{"location":"dist/react/hooks/use-resource-status.js#2"},{"location":"dist/react/portal-container-context.js#2"},{"location":"dist/react/resource-status-indicator.js#4"},{"location":"dist/react/table/data-table.js#8"},{"location":"dist/react/table/empty.js#1"},{"location":"dist/react/table/error.js#1"},{"location":"dist/react/table/loading.js#1"},{"location":"dist/react/table/table-wrapper.js#9"},{"location":"dist/react/ui/accordion.js#2"},{"location":"dist/react/ui/alert-dialog.js#4"},{"location":"dist/react/ui/alert.js#2"},{"location":"dist/react/ui/aspect-ratio.js#3"},{"location":"dist/react/ui/avatar.js#2"},{"location":"dist/react/ui/badge.js#2"},{"location":"dist/react/ui/breadcrumb.js#2"},{"location":"dist/react/ui/button-group.js#3"},{"location":"dist/react/ui/button.js#2"},{"location":"dist/react/ui/calendar.js#6"},{"location":"dist/react/ui/card.js#2"},{"location":"dist/react/ui/carousel.js#4"},{"location":"dist/react/ui/checkbox.js#4"},{"location":"dist/react/ui/collapsible.js#1"},{"location":"dist/react/ui/command.js#3"},{"location":"dist/react/ui/context-menu.js#5"},{"location":"dist/react/ui/dialog.js#3"},{"location":"dist/react/ui/drawer.js#5"},{"location":"dist/react/ui/dropdown-menu.js#3"},{"location":"dist/react/ui/empty.js#2"},{"location":"dist/react/ui/field.js#5"},{"location":"dist/react/ui/form.js#6"},{"location":"dist/react/ui/hover-card.js#5"},{"location":"dist/react/ui/input-group.js#7"},{"location":"dist/react/ui/input-otp.js#3"},{"location":"dist/react/ui/input.js#2"},{"location":"dist/react/ui/item.js#3"},{"location":"dist/react/ui/kbd.js#2"},{"location":"dist/react/ui/label.js#4"},{"location":"dist/react/ui/menubar.js#3"},{"location":"dist/react/ui/navigation-menu.js#2"},{"location":"dist/react/ui/pagination.js#3"},{"location":"dist/react/ui/popover.js#5"},{"location":"dist/react/ui/progress.js#2"},{"location":"dist/react/ui/radio-group.js#4"},{"location":"dist/react/ui/resizable.js#2"},{"location":"dist/react/ui/scroll-area.js#4"},{"location":"dist/react/ui/select.js#3"},{"location":"dist/react/ui/separator.js#4"},{"location":"dist/react/ui/sheet.js#3"},{"location":"dist/react/ui/sidebar.js#12"},{"location":"dist/react/ui/skeleton.js#2"},{"location":"dist/react/ui/slider.js#5"},{"location":"dist/react/ui/sonner.js#1"},{"location":"dist/react/ui/spinner.js#2"},{"location":"dist/react/ui/switch.js#4"},{"location":"dist/react/ui/table.js#2"},{"location":"dist/react/ui/tabs.js#4"},{"location":"dist/react/ui/textarea.js#2"},{"location":"dist/react/ui/toggle-group.js#4"},{"location":"dist/react/ui/toggle.js#2"},{"location":"dist/react/ui/tooltip.js#5"},{"location":"tmp/dist/react/charts/base.js#11"},{"location":"tmp/dist/react/charts/chart-error-boundary.js#2"},{"location":"tmp/dist/react/charts/create-chart.js#3"},{"location":"tmp/dist/react/charts/empty.js#1"},{"location":"tmp/dist/react/charts/error.js#1"},{"location":"tmp/dist/react/charts/loading.js#1"},{"location":"tmp/dist/react/charts/wrapper.js#7"},{"location":"tmp/dist/react/file-browser/directory-list.js#5"},{"location":"tmp/dist/react/file-browser/file-breadcrumb.js#2"},{"location":"tmp/dist/react/file-browser/file-entry.js#3"},{"location":"tmp/dist/react/file-browser/file-preview-panel.js#5"},{"location":"tmp/dist/react/file-browser/new-folder-input.js#4"},{"location":"tmp/dist/react/genie/genie-chat-input.js#4"},{"location":"tmp/dist/react/genie/genie-chat-message-list.js#8"},{"location":"tmp/dist/react/genie/genie-chat-message.js#6"},{"location":"tmp/dist/react/genie/genie-chat.js#6"},{"location":"tmp/dist/react/genie/genie-query-visualization.js#11"},{"location":"tmp/dist/react/hooks/use-resource-status.js#2"},{"location":"tmp/dist/react/portal-container-context.js#2"},{"location":"tmp/dist/react/resource-status-indicator.js#4"},{"location":"tmp/dist/react/table/data-table.js#8"},{"location":"tmp/dist/react/table/empty.js#1"},{"location":"tmp/dist/react/table/error.js#1"},{"location":"tmp/dist/react/table/loading.js#1"},{"location":"tmp/dist/react/table/table-wrapper.js#9"},{"location":"tmp/dist/react/ui/accordion.js#2"},{"location":"tmp/dist/react/ui/alert-dialog.js#4"},{"location":"tmp/dist/react/ui/alert.js#2"},{"location":"tmp/dist/react/ui/aspect-ratio.js#3"},{"location":"tmp/dist/react/ui/avatar.js#2"},{"location":"tmp/dist/react/ui/badge.js#2"},{"location":"tmp/dist/react/ui/breadcrumb.js#2"},{"location":"tmp/dist/react/ui/button-group.js#3"},{"location":"tmp/dist/react/ui/button.js#2"},{"location":"tmp/dist/react/ui/calendar.js#6"},{"location":"tmp/dist/react/ui/card.js#2"},{"location":"tmp/dist/react/ui/carousel.js#4"},{"location":"tmp/dist/react/ui/checkbox.js#4"},{"location":"tmp/dist/react/ui/collapsible.js#1"},{"location":"tmp/dist/react/ui/command.js#3"},{"location":"tmp/dist/react/ui/context-menu.js#5"},{"location":"tmp/dist/react/ui/dialog.js#3"},{"location":"tmp/dist/react/ui/drawer.js#5"},{"location":"tmp/dist/react/ui/dropdown-menu.js#3"},{"location":"tmp/dist/react/ui/empty.js#2"},{"location":"tmp/dist/react/ui/field.js#5"},{"location":"tmp/dist/react/ui/form.js#6"},{"location":"tmp/dist/react/ui/hover-card.js#5"},{"location":"tmp/dist/react/ui/input-group.js#7"},{"location":"tmp/dist/react/ui/input-otp.js#3"},{"location":"tmp/dist/react/ui/input.js#2"},{"location":"tmp/dist/react/ui/item.js#3"},{"location":"tmp/dist/react/ui/kbd.js#2"},{"location":"tmp/dist/react/ui/label.js#4"},{"location":"tmp/dist/react/ui/menubar.js#3"},{"location":"tmp/dist/react/ui/navigation-menu.js#2"},{"location":"tmp/dist/react/ui/pagination.js#3"},{"location":"tmp/dist/react/ui/popover.js#5"},{"location":"tmp/dist/react/ui/progress.js#2"},{"location":"tmp/dist/react/ui/radio-group.js#4"},{"location":"tmp/dist/react/ui/resizable.js#2"},{"location":"tmp/dist/react/ui/scroll-area.js#4"},{"location":"tmp/dist/react/ui/select.js#3"},{"location":"tmp/dist/react/ui/separator.js#4"},{"location":"tmp/dist/react/ui/sheet.js#3"},{"location":"tmp/dist/react/ui/sidebar.js#12"},{"location":"tmp/dist/react/ui/skeleton.js#2"},{"location":"tmp/dist/react/ui/slider.js#5"},{"location":"tmp/dist/react/ui/sonner.js#1"},{"location":"tmp/dist/react/ui/spinner.js#2"},{"location":"tmp/dist/react/ui/switch.js#4"},{"location":"tmp/dist/react/ui/table.js#2"},{"location":"tmp/dist/react/ui/tabs.js#4"},{"location":"tmp/dist/react/ui/textarea.js#2"},{"location":"tmp/dist/react/ui/toggle-group.js#4"},{"location":"tmp/dist/react/ui/toggle.js#2"},{"location":"tmp/dist/react/ui/tooltip.js#5"}]},"tags":["framework"]},{"group":"","name":"shared","version":"0.0.1","scope":"required","purl":"pkg:npm/shared@0.0.1","type":"library","bom-ref":"pkg:npm/shared@0.0.1","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/shared/package.json"},{"name":"ExportedModules","value":"shared,isSQLTypeMarker,shared/isSQLTypeMarker,SQLBinaryMarker,shared/SQLBinaryMarker,SQLBooleanMarker,shared/SQLBooleanMarker,SQLDateMarker,shared/SQLDateMarker,SQLNumberMarker,shared/SQLNumberMarker,SQLStringMarker,shared/SQLStringMarker,SQLTimestampMarker,shared/SQLTimestampMarker,SQLTypeMarker,shared/SQLTypeMarker,shared/sql,GenieAttachmentResponse,shared/GenieAttachmentResponse,GenieMessageResponse,shared/GenieMessageResponse,GenieStatementResponse,shared/GenieStatementResponse,GenieStreamEvent,shared/GenieStreamEvent"},{"name":"ImportedModules","value":"shared,GenieStatementResponse,shared/GenieStatementResponse,GenieAttachmentResponse,shared/GenieAttachmentResponse"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/shared/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/shared/package.json"}],"occurrences":[{"location":"src/js/index.ts#11"},{"location":"src/react/genie/genie-query-transform.ts#11"},{"location":"src/react/genie/types.ts#1"},{"location":"src/react/genie/types.ts#8"},{"location":"src/react/genie/genie-query-visualization.tsx#3"}]},"tags":["sql"]},{"authors":[{"name":"Emil Kowalski <e@emilkowal.ski>"}],"group":"","name":"sonner","version":"2.0.7","description":"An opinionated toast component for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/sonner@2.0.7","externalReferences":[{"type":"website","url":"https://sonner.emilkowal.ski/"},{"type":"vcs","url":"git+https://github.com/emilkowalski/sonner.git"}],"type":"library","bom-ref":"pkg:npm/sonner@2.0.7","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/sonner/package.json"},{"name":"ImportedModules","value":"sonner,toast,sonner/toast,Toaster,sonner/Toaster,ToasterProps,sonner/ToasterProps"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/sonner/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/sonner/package.json"}],"occurrences":[{"location":"dist/react/resource-status-indicator.js#5"},{"location":"dist/react/ui/sonner.js#3"},{"location":"tmp/dist/react/resource-status-indicator.js#5"},{"location":"tmp/dist/react/ui/sonner.js#3"},{"location":"src/react/resource-status-indicator.tsx#3"},{"location":"src/react/ui/sonner.tsx#10"}]}},{"authors":[{"name":"Dany Castillo"}],"group":"","name":"tailwind-merge","version":"3.4.0","description":"Merge Tailwind CSS classes without style conflicts","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/tailwind-merge@3.4.0","externalReferences":[{"type":"vcs","url":"https://github.com/dcastil/tailwind-merge"},{"type":"vcs","url":"https://github.com/dcastil/tailwind-merge.git"}],"type":"library","bom-ref":"pkg:npm/tailwind-merge@3.4.0","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/tailwind-merge/package.json"},{"name":"ImportedModules","value":"tailwind-merge,twMerge,tailwind-merge/twMerge"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/tailwind-merge/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/tailwind-merge/package.json"}],"occurrences":[{"location":"dist/react/lib/utils.js#2"},{"location":"tmp/dist/react/lib/utils.js#2"},{"location":"src/react/lib/utils.ts#2"}]}},{"authors":[{"name":"Emil Kowalski <e@emilkowal.ski>"}],"group":"","name":"vaul","version":"1.1.2","description":"Drawer component for React.","scope":"required","licenses":[{"license":{"id":"MIT","url":"https://opensource.org/licenses/MIT"}}],"purl":"pkg:npm/vaul@1.1.2","externalReferences":[{"type":"website","url":"https://vaul.emilkowal.ski/"},{"type":"vcs","url":"https://github.com/emilkowalski/vaul.git"}],"type":"library","bom-ref":"pkg:npm/vaul@1.1.2","properties":[{"name":"SrcFile","value":"packages/appkit-ui/node_modules/vaul/package.json"},{"name":"ImportedModules","value":"vaul,Drawer,vaul/Drawer"}],"evidence":{"identity":[{"field":"purl","confidence":0.7,"methods":[{"technique":"manifest-analysis","confidence":0.7,"value":"packages/appkit-ui/node_modules/vaul/package.json"}],"concludedValue":"packages/appkit-ui/node_modules/vaul/package.json"}],"occurrences":[{"location":"dist/react/ui/drawer.js#6"},{"location":"tmp/dist/react/ui/drawer.js#6"},{"location":"src/react/ui/drawer.tsx#4"}]}}],"dependencies":[],"compositions":[{"bom-ref":"pkg:npm/@databricks/appkit-ui@0.47.0","aggregate":"incomplete"}],"annotations":[{"bom-ref":"metadata-annotations","subjects":["pkg:npm/@databricks/appkit-ui@0.47.0"],"annotator":{"component":{"group":"@cyclonedx","name":"cdxgen","version":"12.1.2","purl":"pkg:npm/%40cyclonedx/cdxgen@12.1.2","type":"application","bom-ref":"pkg:npm/@cyclonedx/cdxgen@12.1.2","publisher":"OWASP Foundation","authors":[{"name":"OWASP Foundation"}]}},"timestamp":"2026-07-23T08:34:07Z","text":"This Software Bill-of-Materials (SBOM) document was created on Thursday, July 23, 2026 with cdxgen. The data was captured during the build lifecycle phase. The document describes an application named 'appkit-ui' with version '0.47.0'. There are 47 components. The package type in this SBOM is npm with 2 purl namespaces described under components. The components were identified from 47 source files."}]}