spec-snake 0.0.1-beta.2 → 0.0.1-beta.4

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.
package/dist/cli.js CHANGED
@@ -4,7 +4,7 @@
4
4
  import { defineCommand as defineCommand3, runMain } from "citty";
5
5
 
6
6
  // package.json
7
- var version = "0.0.1-beta.2";
7
+ var version = "0.0.1-beta.4";
8
8
 
9
9
  // src/cli/commands/init.ts
10
10
  import * as fs from "node:fs";
@@ -246,7 +246,7 @@ var ScenarioBaseSchema = v.object({
246
246
  id: v.string(),
247
247
  name: v.string(),
248
248
  steps: v.array(StepSchema),
249
- prompt: v.string(),
249
+ prompt: v.unknown(),
250
250
  aiSettings: AiSettingsSchema
251
251
  });
252
252
  var ScenarioSchema = ScenarioBaseSchema;
@@ -268,6 +268,7 @@ import { Hono as Hono3 } from "hono";
268
268
  // src/server/apps/docs.ts
269
269
  import { Hono } from "hono";
270
270
  import { createMiddleware } from "hono/factory";
271
+ import { streamSSE } from "hono/streaming";
271
272
 
272
273
  // src/server/helpers/docs/transform.ts
273
274
  var transformFormData = (body, sectionInfoMap) => {
@@ -410,30 +411,31 @@ var getFilename = (scenario, scenarioId, content, formData, inputData) => {
410
411
  import {
411
412
  query
412
413
  } from "@anthropic-ai/claude-agent-sdk";
413
- var generateDesignDoc = async ({
414
+ async function* generateDesignDocStream({
414
415
  scenario,
415
416
  formData,
416
417
  inputData
417
- }) => {
418
+ }) {
418
419
  const promptTemplate = typeof scenario.prompt === "function" ? scenario.prompt({ formData, inputData }) : scenario.prompt;
419
420
  const prompt = promptTemplate.replace(
420
421
  "{{INPUT_JSON}}",
421
422
  JSON.stringify(inputData, null, 2)
422
423
  );
423
- let message = null;
424
424
  for await (const msg of query({
425
425
  prompt,
426
- options: scenario.aiSettings
426
+ options: {
427
+ ...scenario.aiSettings,
428
+ includePartialMessages: true
429
+ }
427
430
  })) {
428
- if (msg.type === "result" && msg.subtype === "success") {
429
- message = msg;
431
+ if (msg.type === "stream_event") {
432
+ const event = msg.event;
433
+ if (event.type === "content_block_delta" && event.delta?.type === "text_delta" && event.delta.text != null) {
434
+ yield { type: "text_delta", text: event.delta.text };
435
+ }
430
436
  }
431
437
  }
432
- if (message == null) {
433
- throw new Error("Query failed");
434
- }
435
- return message.result;
436
- };
438
+ }
437
439
 
438
440
  // src/server/apps/docs.ts
439
441
  var createScenarioMiddleware = (scenarioInfoMap) => createMiddleware(async (c, next) => {
@@ -463,11 +465,31 @@ var createDocsApp = (config, scenarioInfoMap) => {
463
465
  const { scenario, sectionInfoMap } = c.get("scenarioInfo");
464
466
  const formData = await c.req.json();
465
467
  const inputData = transformFormData(formData, sectionInfoMap);
466
- const content = await generateDesignDoc({ scenario, formData, inputData });
467
- if (scenario.hooks?.onPreview != null) {
468
- await scenario.hooks.onPreview({ formData, inputData, content });
469
- }
470
- return c.json({ success: true, content });
468
+ return streamSSE(c, async (stream) => {
469
+ let fullContent = "";
470
+ for await (const chunk of generateDesignDocStream({
471
+ scenario,
472
+ formData,
473
+ inputData
474
+ })) {
475
+ fullContent += chunk.text;
476
+ await stream.writeSSE({
477
+ data: JSON.stringify({ type: "text_delta", text: chunk.text }),
478
+ event: "message"
479
+ });
480
+ }
481
+ await stream.writeSSE({
482
+ data: JSON.stringify({ type: "done", content: fullContent }),
483
+ event: "message"
484
+ });
485
+ if (scenario.hooks?.onPreview != null) {
486
+ await scenario.hooks.onPreview({
487
+ formData,
488
+ inputData,
489
+ content: fullContent
490
+ });
491
+ }
492
+ });
471
493
  });
472
494
  app.post("/api/scenarios/:scenarioId/docs", async (c) => {
473
495
  const scenarioId = c.req.param("scenarioId");
package/dist/cli.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/cli/index.ts", "../package.json", "../src/cli/commands/init.ts", "../src/cli/commands/start.ts", "../src/schema.ts", "../src/server/api.ts", "../src/server/apps/docs.ts", "../src/server/helpers/docs/transform.ts", "../src/server/repositories/document.ts", "../src/server/helpers/docs/metadata.ts", "../src/server/usecases/docs/generate-doc.ts", "../src/server/apps/scenarios.ts", "../src/server/helpers/scenarios/build-form-defaults.ts", "../src/server/helpers/scenarios/build-section-info.ts"],
4
- "sourcesContent": ["import { defineCommand, runMain } from 'citty';\n\nimport { version } from '../../package.json';\nimport { initCommand } from './commands/init';\nimport { startCommand } from './commands/start';\n\nconst main = defineCommand({\n meta: {\n name: 'spec-snake',\n version,\n description: 'AI-powered design document generator CLI',\n },\n subCommands: {\n init: initCommand,\n start: startCommand,\n },\n});\n\nrunMain(main);\n", "{\n \"name\": \"spec-snake\",\n \"version\": \"0.0.1-beta.2\",\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/cut0/spec-snake.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"types\": \"./dist/types.d.ts\",\n \"main\": \"./dist/types.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/types.d.ts\",\n \"import\": \"./dist/types.js\",\n \"default\": \"./dist/types.js\"\n }\n },\n \"bin\": {\n \"spec-snake\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"pnpm build:types && pnpm build:cli && pnpm build:client\",\n \"build:cli\": \"tsx scripts/build-cli.ts\",\n \"build:client\": \"vite build\",\n \"build:types\": \"tsc src/types.ts --declaration --outDir dist --skipLibCheck --module ESNext --moduleResolution bundler --target ES2022\",\n \"dev\": \"NODE_ENV=development SPEC_SNAKE_CONFIG=examples/local/spec-snake.config.ts vite\",\n \"prd\": \"pnpm build && pnpm build:client && node dist/cli.js\",\n \"i18n\": \"lingui extract && lingui compile\",\n \"i18n:compile\": \"lingui compile\",\n \"i18n:extract\": \"lingui extract\",\n \"lint:check\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\",\n \"release\": \"pnpm build && changeset publish\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.1.75\",\n \"@hono/node-server\": \"1.19.7\",\n \"citty\": \"0.1.6\",\n \"consola\": \"3.4.2\",\n \"hono\": \"4.11.1\",\n \"jiti\": \"2.6.1\",\n \"valibot\": \"1.2.0\"\n },\n \"devDependencies\": {\n \"@base-ui/react\": \"1.0.0\",\n \"@biomejs/biome\": \"1.9.4\",\n \"@changesets/cli\": \"2.28.1\",\n \"@hono/vite-dev-server\": \"0.23.0\",\n \"@hookform/resolvers\": \"5.2.2\",\n \"@lingui/babel-plugin-lingui-macro\": \"5.7.0\",\n \"@lingui/cli\": \"5.7.0\",\n \"@lingui/conf\": \"5.7.0\",\n \"@lingui/core\": \"5.7.0\",\n \"@lingui/react\": \"5.7.0\",\n \"@lingui/vite-plugin\": \"5.7.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tailwindcss/vite\": \"4.1.18\",\n \"@tanstack/react-query\": \"5.35.1\",\n \"@tanstack/react-router\": \"1.141.6\",\n \"@tanstack/router-plugin\": \"1.141.7\",\n \"@types/node\": \"^25.0.3\",\n \"@types/react\": \"19.1.8\",\n \"@types/react-dom\": \"19.1.6\",\n \"@vitejs/plugin-react\": \"4.5.2\",\n \"esbuild\": \"0.27.2\",\n \"motion\": \"12.23.26\",\n \"react\": \"19.2.3\",\n \"react-dom\": \"19.2.3\",\n \"react-hook-form\": \"7.69.0\",\n \"react-markdown\": \"10.1.0\",\n \"remark-gfm\": \"4.0.1\",\n \"tailwindcss\": \"4.1.18\",\n \"tsx\": \"4.20.6\",\n \"typescript\": \"5.8.3\",\n \"vite\": \"7.3.0\",\n \"zustand\": \"5.0.9\"\n },\n \"packageManager\": \"pnpm@10.26.2\"\n}\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { defineCommand } from 'citty';\nimport { consola } from 'consola';\n\nconst CONFIG_TEMPLATE = `// For more detailed configuration examples, see:\n// https://github.com/cut0/spec-snake/blob/main/examples\n\nimport { defineConfig, defineScenario } from 'spec-snake';\n\nexport default defineConfig({\n scenarios: [\n defineScenario({\n id: 'default',\n name: 'Design Doc Generator',\n steps: [\n {\n slug: 'overview',\n title: 'Overview',\n description: 'Basic information about the feature',\n section: {\n type: 'single',\n name: 'overview',\n fields: [\n {\n type: 'input',\n id: 'title',\n label: 'Title',\n description: 'Feature title',\n placeholder: 'Enter feature title',\n required: true,\n },\n {\n type: 'textarea',\n id: 'description',\n label: 'Description',\n description: 'Detailed description of the feature',\n placeholder: 'Describe the feature...',\n rows: 4,\n },\n {\n type: 'select',\n id: 'priority',\n label: 'Priority',\n description: 'Feature priority level',\n placeholder: 'Select priority',\n options: [\n { value: 'high', label: 'High' },\n { value: 'medium', label: 'Medium' },\n { value: 'low', label: 'Low' },\n ],\n },\n ],\n },\n },\n ],\n overrides: {\n filename: (params) => {\n return \\`\\${params.timestamp}.md\\`;\n },\n },\n prompt:\n 'Generate a design doc based on the following input: {{INPUT_JSON}}',\n }),\n ],\n permissions: {\n allowSave: true,\n },\n});\n`;\n\nexport const initCommand = defineCommand({\n meta: {\n name: 'init',\n description:\n 'Initialize a new spec-snake.config.ts file in the current directory',\n },\n args: {\n output: {\n type: 'string',\n description: 'Output file path',\n alias: 'o',\n default: 'spec-snake.config.ts',\n },\n force: {\n type: 'boolean',\n description: 'Overwrite existing file',\n alias: 'f',\n default: false,\n },\n },\n async run({ args }) {\n const outputPath = path.resolve(process.cwd(), args.output);\n\n if (fs.existsSync(outputPath) && !args.force) {\n consola.error(`File already exists: ${outputPath}`);\n consola.info('Use --force (-f) to overwrite');\n process.exit(1);\n }\n\n try {\n fs.writeFileSync(outputPath, CONFIG_TEMPLATE, 'utf-8');\n consola.success(`Config file created: ${outputPath}`);\n } catch (error) {\n consola.error('Failed to create config file:', error);\n process.exit(1);\n }\n },\n});\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as url from 'node:url';\n\nimport { serve } from '@hono/node-server';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport { defineCommand } from 'citty';\nimport { consola } from 'consola';\nimport { createJiti } from 'jiti';\n\nimport { type Config, safeParseConfig } from '../../definitions';\nimport { createApiServer } from '../../server/api';\n\nconst getDistClientDir = (): string => {\n const __filename = url.fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n\n // \u30D3\u30EB\u30C9\u5F8C: dist/cli.js \u2192 dist/client (\u540C\u3058 dist \u914D\u4E0B)\n // \u958B\u767A\u6642: src/cli/commands/start.ts \u2192 dist/client (3\u968E\u5C64\u4E0A\u306E dist \u914D\u4E0B)\n const isBuilt = __dirname.endsWith('/dist') || __dirname.includes('/dist/');\n return isBuilt\n ? path.resolve(__dirname, 'client')\n : path.resolve(__dirname, '../../../dist/client');\n};\n\nconst loadConfig = async (configPath: string): Promise<Config> => {\n const absolutePath = path.resolve(process.cwd(), configPath);\n\n if (!fs.existsSync(absolutePath)) {\n throw new Error(`Config file not found: ${absolutePath}`);\n }\n\n const jiti = createJiti(import.meta.url);\n const configModule = await jiti.import(absolutePath);\n const config = (configModule as { default: Config }).default;\n\n const result = safeParseConfig(config);\n if (!result.success) {\n const issues = result.issues.map((issue) => {\n const pathStr = issue.path?.map((p) => p.key).join('.') ?? '';\n return ` - ${pathStr}: ${issue.message}`;\n });\n throw new Error(`Invalid config:\\n${issues.join('\\n')}`);\n }\n\n // hooks \u306F valibot \u3067\u30D0\u30EA\u30C7\u30FC\u30B7\u30E7\u30F3\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u5143\u306E config \u304B\u3089\u4FDD\u6301\n return config;\n};\n\nconst runServer = async (\n config: Config,\n options: { distDir: string; port: number; host: string },\n) => {\n consola.start('Starting server...');\n\n const app = createApiServer(config);\n\n app.use(\n '/*',\n serveStatic({\n root: options.distDir,\n rewriteRequestPath: (requestPath) => {\n const fullPath = path.join(options.distDir, requestPath);\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n return requestPath;\n }\n return '/index.html';\n },\n }),\n );\n\n const server = serve(\n {\n fetch: app.fetch,\n port: options.port,\n hostname: options.host,\n },\n (info) => {\n const displayHost =\n info.address === '::1' || info.address === '127.0.0.1'\n ? 'localhost'\n : info.address;\n consola.success('Server started');\n consola.info(` \u279C Local: http://${displayHost}:${info.port}/`);\n },\n );\n\n const cleanup = () => {\n consola.info('Shutting down server...');\n server.close(() => {\n process.exit(0);\n });\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n};\n\nexport const startCommand = defineCommand({\n meta: {\n name: 'start',\n description: 'Start the server with the specified config',\n },\n args: {\n config: {\n type: 'string',\n description: 'Path to config file',\n alias: 'c',\n default: 'spec-snake.config.ts',\n },\n port: {\n type: 'string',\n description: 'Port to run the server on',\n alias: 'p',\n default: '3000',\n },\n host: {\n type: 'string',\n description: 'Host to bind the server to',\n default: 'localhost',\n },\n },\n async run({ args }) {\n const configPath = args.config;\n const port = Number.parseInt(args.port, 10);\n\n consola.start(`Loading config from: ${configPath}`);\n\n try {\n const config = await loadConfig(configPath);\n consola.success(\n `Config loaded successfully (${config.scenarios.length} scenarios)`,\n );\n\n await runServer(config, {\n distDir: getDistClientDir(),\n port,\n host: args.host,\n });\n } catch (error) {\n if (error instanceof Error) {\n consola.error(error.message);\n } else {\n consola.error('Failed to start server:', error);\n }\n process.exit(1);\n }\n },\n});\n", "import * as v from 'valibot';\nimport type { Field, GridLayout, LayoutField } from './types';\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport const isLayoutField = (field: Field): field is LayoutField => {\n return field.type === 'grid';\n};\n\n// =============================================================================\n// Form Field Schemas\n// =============================================================================\n\nconst FieldBaseSchema = v.object({\n id: v.string(),\n label: v.string(),\n description: v.string(),\n placeholder: v.optional(v.string()),\n required: v.optional(v.boolean()),\n});\n\nexport const SelectOptionSchema = v.object({\n value: v.string(),\n label: v.string(),\n});\n\nexport const InputFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('input'),\n inputType: v.optional(v.picklist(['text', 'date', 'url'])),\n suggestions: v.optional(v.array(v.string())),\n});\n\nexport const TextareaFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('textarea'),\n rows: v.optional(v.number()),\n});\n\nexport const SelectFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('select'),\n options: v.array(SelectOptionSchema),\n});\n\nexport const CheckboxFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('checkbox'),\n});\n\nexport const FormFieldSchema = v.union([\n InputFieldSchema,\n TextareaFieldSchema,\n SelectFieldSchema,\n CheckboxFieldSchema,\n]);\n\n// =============================================================================\n// Layout Schemas\n// =============================================================================\n\nexport const GridLayoutSchema: v.GenericSchema<GridLayout> = v.object({\n type: v.literal('grid'),\n columns: v.number(),\n fields: v.array(v.lazy(() => FieldSchema)),\n});\n\nexport const FieldSchema: v.GenericSchema<Field> = v.union([\n FormFieldSchema,\n GridLayoutSchema,\n]);\n\n// =============================================================================\n// Section Schemas\n// =============================================================================\n\nexport const SingleSectionSchema = v.object({\n type: v.literal('single'),\n name: v.string(),\n fields: v.array(FieldSchema),\n});\n\nexport const ArraySectionSchema = v.object({\n type: v.literal('array'),\n name: v.string(),\n fields: v.array(FieldSchema),\n minFieldCount: v.optional(v.number()),\n});\n\nexport const SectionSchema = v.union([SingleSectionSchema, ArraySectionSchema]);\n\n// =============================================================================\n// Step Schema\n// =============================================================================\n\nexport const StepSchema = v.object({\n slug: v.string(),\n title: v.string(),\n description: v.string(),\n section: SectionSchema,\n});\n\n// =============================================================================\n// AI Settings Schemas (Claude Agent SDK)\n// =============================================================================\n\nexport const McpServerConfigSchema = v.union([\n v.object({\n type: v.optional(v.literal('stdio')),\n command: v.string(),\n args: v.optional(v.array(v.string())),\n env: v.optional(v.record(v.string(), v.string())),\n }),\n v.object({\n type: v.literal('sse'),\n url: v.string(),\n headers: v.optional(v.record(v.string(), v.string())),\n }),\n v.object({\n type: v.literal('http'),\n url: v.string(),\n headers: v.optional(v.record(v.string(), v.string())),\n }),\n]);\n\nexport const AiSettingsSchema = v.optional(\n v.object({\n model: v.optional(v.string()),\n fallbackModel: v.optional(v.string()),\n maxThinkingTokens: v.optional(v.number()),\n maxTurns: v.optional(v.number()),\n maxBudgetUsd: v.optional(v.number()),\n allowedTools: v.optional(v.array(v.string())),\n disallowedTools: v.optional(v.array(v.string())),\n tools: v.optional(\n v.union([\n v.array(v.string()),\n v.object({\n type: v.literal('preset'),\n preset: v.literal('claude_code'),\n }),\n ]),\n ),\n permissionMode: v.optional(\n v.picklist([\n 'default',\n 'acceptEdits',\n 'bypassPermissions',\n 'plan',\n 'delegate',\n 'dontAsk',\n ]),\n ),\n allowDangerouslySkipPermissions: v.optional(v.boolean()),\n mcpServers: v.optional(v.record(v.string(), McpServerConfigSchema)),\n strictMcpConfig: v.optional(v.boolean()),\n }),\n);\n\n// =============================================================================\n// Scenario Schema\n// =============================================================================\n\nexport const ScenarioBaseSchema = v.object({\n id: v.string(),\n name: v.string(),\n steps: v.array(StepSchema),\n prompt: v.string(),\n aiSettings: AiSettingsSchema,\n});\n\nexport const ScenarioSchema = ScenarioBaseSchema;\n\n// =============================================================================\n// Configuration Schemas\n// =============================================================================\n\nexport const PermissionsSchema = v.object({\n allowSave: v.boolean(),\n});\n\nexport const ConfigSchema = v.object({\n scenarios: v.array(ScenarioSchema),\n permissions: PermissionsSchema,\n hosted: v.optional(v.boolean(), false),\n});\n\n// =============================================================================\n// Parser Functions\n// =============================================================================\n\nexport const parseConfig = (data: unknown) => {\n return v.parse(ConfigSchema, data);\n};\n\nexport const safeParseConfig = (data: unknown) => {\n return v.safeParse(ConfigSchema, data);\n};\n", "import { Hono } from 'hono';\n\nimport type { Config } from '../definitions';\n\nimport { createDocsApp } from './apps/docs';\nimport { createScenariosApp } from './apps/scenarios';\nimport { buildSectionInfoMap } from './helpers/scenarios/build-section-info';\n\nexport const createApiServer = (rawConfig: Config) => {\n const app = new Hono();\n\n // In hosted mode, allowSave is always false\n const config: Config = rawConfig.hosted\n ? {\n ...rawConfig,\n permissions: { ...rawConfig.permissions, allowSave: false },\n }\n : rawConfig;\n\n // \u30B7\u30CA\u30EA\u30AA\u3054\u3068\u306E\u60C5\u5831\u3092\u4E8B\u524D\u306B\u30D3\u30EB\u30C9\n const scenarioInfoMap = new Map(\n config.scenarios.map((scenario) => [\n scenario.id,\n {\n scenario,\n sectionInfoMap: buildSectionInfoMap(scenario.steps),\n },\n ]),\n );\n\n // Scenarios App\n const scenariosApp = createScenariosApp(config, scenarioInfoMap);\n\n // Docs App\n const docsApp = createDocsApp(config, scenarioInfoMap);\n\n // Mount sub-apps\n app.route('/', scenariosApp);\n app.route('/', docsApp);\n\n return app;\n};\n", "import { Hono } from 'hono';\nimport { createMiddleware } from 'hono/factory';\n\nimport type { Config } from '../../definitions';\nimport { transformFormData } from '../helpers/docs/transform';\nimport {\n getDocumentsForScenario,\n getFilename,\n readDocument,\n saveDocument,\n} from '../repositories/document';\nimport { generateDesignDoc } from '../usecases/docs/generate-doc';\n\nimport type { ScenarioInfoMapEntry } from './scenarios';\n\ntype Variables = {\n scenarioInfo: ScenarioInfoMapEntry;\n};\n\ntype CreateDocBody = {\n content: string;\n formData: Record<string, unknown>;\n};\n\ntype UpdateDocBody = {\n content: string;\n formData: Record<string, unknown>;\n};\n\nconst createScenarioMiddleware = (\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) =>\n createMiddleware<{ Variables: Variables }>(async (c, next) => {\n const scenarioId = c.req.param('scenarioId');\n\n if (scenarioId == null) {\n return c.json({ error: 'Scenario ID is required' }, 400);\n }\n\n const scenarioInfo = scenarioInfoMap.get(scenarioId);\n\n if (scenarioInfo == null) {\n return c.json({ error: 'Scenario not found' }, 404);\n }\n\n c.set('scenarioInfo', scenarioInfo);\n await next();\n });\n\nexport const createDocsApp = (\n config: Config,\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) => {\n const app = new Hono<{ Variables: Variables }>();\n\n app.use(\n '/api/scenarios/:scenarioId/*',\n createScenarioMiddleware(scenarioInfoMap),\n );\n\n app.get('/api/scenarios/:scenarioId/docs', async (c) => {\n const { scenario } = c.get('scenarioInfo');\n const docs = await getDocumentsForScenario(scenario);\n\n return c.json({ docs });\n });\n\n app.post('/api/scenarios/:scenarioId/docs/preview', async (c) => {\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n const formData = (await c.req.json()) as Record<string, unknown>;\n const inputData = transformFormData(formData, sectionInfoMap);\n const content = await generateDesignDoc({ scenario, formData, inputData });\n\n if (scenario.hooks?.onPreview != null) {\n await scenario.hooks.onPreview({ formData, inputData, content });\n }\n\n return c.json({ success: true, content });\n });\n\n app.post('/api/scenarios/:scenarioId/docs', async (c) => {\n const scenarioId = c.req.param('scenarioId');\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n if (!config.permissions.allowSave) {\n return c.json({ error: 'Save is not allowed' }, 403);\n }\n\n const { content, formData } = (await c.req.json()) as CreateDocBody;\n const inputData = transformFormData(formData, sectionInfoMap);\n const filename = getFilename(\n scenario,\n scenarioId,\n content,\n formData,\n inputData,\n );\n const { outputPath } = await saveDocument({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n });\n\n if (scenario.hooks?.onSave != null) {\n await scenario.hooks.onSave({\n content,\n filename,\n outputPath,\n formData,\n inputData,\n });\n }\n\n return c.json({ success: true, filename });\n });\n\n app.get('/api/scenarios/:scenarioId/docs/:filename', async (c) => {\n const filename = c.req.param('filename');\n const { scenario } = c.get('scenarioInfo');\n\n const result = await readDocument(scenario, filename);\n\n if (!result.success) {\n return c.json({ error: 'Document not found' }, 404);\n }\n\n return c.json({ doc: result.doc });\n });\n\n app.put('/api/scenarios/:scenarioId/docs/:filename', async (c) => {\n const scenarioId = c.req.param('scenarioId');\n const filename = c.req.param('filename');\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n if (!config.permissions.allowSave) {\n return c.json({ error: 'Save is not allowed' }, 403);\n }\n\n const { content, formData } = (await c.req.json()) as UpdateDocBody;\n const inputData = transformFormData(formData, sectionInfoMap);\n const { outputPath } = await saveDocument({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n });\n\n if (scenario.hooks?.onSave != null) {\n await scenario.hooks.onSave({\n content,\n filename,\n outputPath,\n formData,\n inputData,\n });\n }\n\n return c.json({ success: true, filename });\n });\n\n return app;\n};\n", "import type { InputData } from '../../../definitions';\nimport type { SectionInfo } from '../scenarios/build-section-info';\n\nexport const transformFormData = (\n body: Record<string, unknown>,\n sectionInfoMap: Map<string, SectionInfo>,\n): InputData => {\n const items: InputData['items'] = [];\n\n for (const [sectionName, sectionValue] of Object.entries(body)) {\n const sectionInfo = sectionInfoMap.get(sectionName);\n\n if (sectionInfo == null) {\n continue;\n }\n\n const fieldInfoMap = new Map(sectionInfo.fields.map((f) => [f.id, f]));\n\n const values = (\n Array.isArray(sectionValue) ? sectionValue : [sectionValue]\n ).map((item: Record<string, unknown>) => {\n const itemValues: Array<{\n label: string;\n description: string;\n value: unknown;\n }> = Object.entries(item)\n .map(([fieldId, fieldValue]) => {\n const fieldInfo = fieldInfoMap.get(fieldId);\n if (fieldInfo) {\n return {\n label: fieldInfo.label,\n description: fieldInfo.description,\n value: fieldValue,\n };\n }\n return null;\n })\n .filter((value) => value != null);\n\n return itemValues;\n });\n\n items.push({\n title: sectionInfo.title,\n description: sectionInfo.description,\n values,\n });\n }\n\n return { items };\n};\n", "import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport type { InputData, Scenario } from '../../definitions';\nimport {\n type DocumentWithMetadata,\n addMetadataToContent,\n parseMetadata,\n} from '../helpers/docs/metadata';\n\nexport const getOutputDir = (scenario: Scenario): string => {\n return scenario.outputDir ?? join(process.cwd(), 'output');\n};\n\ntype ReadDocumentResult =\n | { success: true; doc: DocumentWithMetadata }\n | { success: false; error: 'not_found' | 'scenario_mismatch' };\n\nexport const readDocument = async (\n scenario: Scenario,\n filename: string,\n): Promise<ReadDocumentResult> => {\n const outputDir = getOutputDir(scenario);\n const filePath = join(outputDir, filename);\n\n try {\n const rawContent = await readFile(filePath, 'utf-8');\n const { metadata, content } = parseMetadata(rawContent);\n\n if (metadata?.scenarioId !== scenario.id) {\n return { success: false, error: 'scenario_mismatch' };\n }\n\n return {\n success: true,\n doc: { filename, content, metadata },\n };\n } catch {\n return { success: false, error: 'not_found' };\n }\n};\n\nexport const getDocumentsForScenario = async (\n scenario: Scenario,\n): Promise<DocumentWithMetadata[]> => {\n const outputDir = getOutputDir(scenario);\n\n try {\n const files = await readdir(outputDir);\n const mdFiles = files.filter((file) => file.endsWith('.md'));\n\n const docs = await Promise.all(\n mdFiles.map(async (filename) => {\n const result = await readDocument(scenario, filename);\n return result.success ? result.doc : null;\n }),\n );\n\n return docs.filter((doc) => doc != null);\n } catch {\n return [];\n }\n};\n\ntype SaveDocumentOptions = {\n scenario: Scenario;\n scenarioId: string;\n filename: string;\n content: string;\n formData: Record<string, unknown>;\n};\n\nexport const saveDocument = async ({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n}: SaveDocumentOptions): Promise<{ outputPath: string }> => {\n const outputDir = getOutputDir(scenario);\n const outputPath = join(outputDir, filename);\n\n const contentWithMetadata = addMetadataToContent(content, {\n scenarioId,\n formData,\n });\n\n await mkdir(outputDir, { recursive: true });\n await writeFile(outputPath, contentWithMetadata, 'utf-8');\n\n return { outputPath };\n};\n\nexport const getFilename = (\n scenario: Scenario,\n scenarioId: string,\n content: string,\n formData: Record<string, unknown>,\n inputData: InputData,\n): string => {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n\n const filenameOverride = scenario.overrides?.filename;\n if (filenameOverride != null) {\n return typeof filenameOverride === 'function'\n ? filenameOverride({\n scenarioId,\n timestamp,\n content,\n formData,\n inputData,\n })\n : filenameOverride;\n }\n\n return `design-doc-${scenarioId}-${timestamp}.md`;\n};\n", "export type DocumentMetadata = {\n scenarioId: string;\n formData: Record<string, unknown>;\n};\n\nexport type DocumentWithMetadata = {\n filename: string;\n content: string;\n metadata: DocumentMetadata | null;\n};\n\nconst METADATA_START = '<!-- design-docs-metadata';\nconst METADATA_END = '-->';\n\nexport const serializeMetadata = (metadata: DocumentMetadata): string => {\n return `${METADATA_START}\\n${JSON.stringify(metadata, null, 2)}\\n${METADATA_END}`;\n};\n\nexport const parseMetadata = (\n content: string,\n): { metadata: DocumentMetadata | null; content: string } => {\n const metadataStartIndex = content.lastIndexOf(METADATA_START);\n if (metadataStartIndex === -1) {\n return { metadata: null, content };\n }\n\n const metadataEndIndex = content.indexOf(METADATA_END, metadataStartIndex);\n if (metadataEndIndex === -1) {\n return { metadata: null, content };\n }\n\n try {\n const metadataJson = content\n .slice(metadataStartIndex + METADATA_START.length, metadataEndIndex)\n .trim();\n const metadata = JSON.parse(metadataJson) as DocumentMetadata;\n const cleanContent = content.slice(0, metadataStartIndex).trim();\n return { metadata, content: cleanContent };\n } catch {\n return { metadata: null, content };\n }\n};\n\nexport const addMetadataToContent = (\n content: string,\n metadata: DocumentMetadata,\n): string => {\n return `${content}\\n\\n${serializeMetadata(metadata)}`;\n};\n", "import {\n type Options,\n type SDKResultMessage,\n query,\n} from '@anthropic-ai/claude-agent-sdk';\n\nimport type { InputData, Scenario } from '../../../definitions';\n\ntype GenerateDesignDocParams = {\n scenario: Scenario;\n formData: Record<string, unknown>;\n inputData: InputData;\n};\n\nexport const generateDesignDoc = async ({\n scenario,\n formData,\n inputData,\n}: GenerateDesignDocParams): Promise<string> => {\n const promptTemplate =\n typeof scenario.prompt === 'function'\n ? scenario.prompt({ formData, inputData })\n : scenario.prompt;\n const prompt = promptTemplate.replace(\n '{{INPUT_JSON}}',\n JSON.stringify(inputData, null, 2),\n );\n\n let message: SDKResultMessage | null = null;\n\n for await (const msg of query({\n prompt,\n options: scenario.aiSettings as Options,\n })) {\n if (msg.type === 'result' && msg.subtype === 'success') {\n message = msg;\n }\n }\n\n if (message == null) {\n throw new Error('Query failed');\n }\n\n return message.result;\n};\n", "import { Hono } from 'hono';\n\nimport type { Config, Scenario } from '../../definitions';\nimport { buildFormDefaultValues } from '../helpers/scenarios/build-form-defaults';\nimport type { buildSectionInfoMap } from '../helpers/scenarios/build-section-info';\n\nexport type ScenarioInfo = {\n sectionInfoMap: ReturnType<typeof buildSectionInfoMap>;\n};\n\nexport type ScenarioInfoMapEntry = {\n scenario: Scenario;\n sectionInfoMap: ReturnType<typeof buildSectionInfoMap>;\n};\n\nexport const createScenariosApp = (\n config: Config,\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) => {\n const app = new Hono();\n\n // \u5168\u30B7\u30CA\u30EA\u30AA\u53D6\u5F97\n app.get('/api/scenarios', (c) => {\n return c.json({\n scenarios: config.scenarios,\n });\n });\n\n // \u5358\u4E00\u30B7\u30CA\u30EA\u30AA\u53D6\u5F97\n app.get('/api/scenarios/:scenarioId', (c) => {\n const scenarioId = c.req.param('scenarioId');\n const scenarioInfo = scenarioInfoMap.get(scenarioId);\n\n if (scenarioInfo == null) {\n return c.json({ error: 'Scenario not found' }, 404);\n }\n\n const formDefaultValues = buildFormDefaultValues(\n scenarioInfo.scenario.steps,\n );\n\n return c.json({\n scenario: scenarioInfo.scenario,\n formDefaultValues,\n permissions: config.permissions,\n });\n });\n\n return app;\n};\n", "import { type Field, type Step, isLayoutField } from '../../../definitions';\n\nexport const buildFieldDefaults = (\n fields: Field[],\n): Record<string, unknown> => {\n const getFieldDefaultValue = (field: Field): unknown => {\n if (isLayoutField(field)) {\n return undefined;\n }\n switch (field.type) {\n case 'checkbox':\n return false;\n default:\n return '';\n }\n };\n\n const defaults: Record<string, unknown> = {};\n for (const field of fields) {\n if (isLayoutField(field)) {\n Object.assign(defaults, buildFieldDefaults(field.fields));\n } else {\n defaults[field.id] = getFieldDefaultValue(field);\n }\n }\n return defaults;\n};\n\nexport const buildFormDefaultValues = (\n steps: Step[],\n): Record<string, unknown> => {\n const defaults: Record<string, unknown> = {};\n for (const config of steps) {\n if (config.section.type === 'single') {\n defaults[config.section.name] = buildFieldDefaults(config.section.fields);\n } else {\n const minCount = config.section.minFieldCount ?? 1;\n defaults[config.section.name] = Array.from({ length: minCount }, () =>\n buildFieldDefaults(config.section.fields),\n );\n }\n }\n return defaults;\n};\n", "import { type Field, type Step, isLayoutField } from '../../../definitions';\n\nexport type FieldInfo = {\n id: string;\n label: string;\n description: string;\n};\n\nexport type SectionInfo = {\n name: string;\n title: string;\n description: string;\n fields: FieldInfo[];\n};\n\nexport const extractFieldInfos = (fields: Field[]): FieldInfo[] => {\n const result: FieldInfo[] = [];\n for (const field of fields) {\n if (isLayoutField(field)) {\n result.push(...extractFieldInfos(field.fields));\n } else {\n result.push({\n id: field.id,\n label: field.label,\n description: field.description,\n });\n }\n }\n return result;\n};\n\nexport const buildSectionInfoMap = (\n steps: Step[],\n): Map<string, SectionInfo> => {\n const sectionMap = new Map<string, SectionInfo>(\n steps.map((step) => [\n step.section.name,\n {\n name: step.section.name,\n title: step.title,\n description: step.description,\n fields: extractFieldInfos(step.section.fields),\n },\n ]),\n );\n\n return sectionMap;\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { defineCommand, runMain } from 'citty';\n\nimport { version } from '../../package.json';\nimport { initCommand } from './commands/init';\nimport { startCommand } from './commands/start';\n\nconst main = defineCommand({\n meta: {\n name: 'spec-snake',\n version,\n description: 'AI-powered design document generator CLI',\n },\n subCommands: {\n init: initCommand,\n start: startCommand,\n },\n});\n\nrunMain(main);\n", "{\n \"name\": \"spec-snake\",\n \"version\": \"0.0.1-beta.4\",\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/cut0/spec-snake.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"types\": \"./dist/types.d.ts\",\n \"main\": \"./dist/types.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/types.d.ts\",\n \"import\": \"./dist/types.js\",\n \"default\": \"./dist/types.js\"\n }\n },\n \"bin\": {\n \"spec-snake\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"pnpm build:types && pnpm build:cli && pnpm build:client\",\n \"build:cli\": \"tsx scripts/build-cli.ts\",\n \"build:client\": \"vite build\",\n \"build:types\": \"tsc src/types.ts --declaration --outDir dist --skipLibCheck --module ESNext --moduleResolution bundler --target ES2022\",\n \"dev\": \"NODE_ENV=development SPEC_SNAKE_CONFIG=examples/local/spec-snake.config.ts vite\",\n \"prd\": \"pnpm build && pnpm build:client && node dist/cli.js\",\n \"i18n\": \"lingui extract && lingui compile\",\n \"i18n:compile\": \"lingui compile\",\n \"i18n:extract\": \"lingui extract\",\n \"lint:check\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\",\n \"release\": \"pnpm build && changeset publish\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.1.75\",\n \"@hono/node-server\": \"1.19.7\",\n \"citty\": \"0.1.6\",\n \"consola\": \"3.4.2\",\n \"hono\": \"4.11.1\",\n \"jiti\": \"2.6.1\",\n \"valibot\": \"1.2.0\"\n },\n \"devDependencies\": {\n \"@base-ui/react\": \"1.0.0\",\n \"@biomejs/biome\": \"1.9.4\",\n \"@changesets/cli\": \"2.28.1\",\n \"@hono/vite-dev-server\": \"0.23.0\",\n \"@hookform/resolvers\": \"5.2.2\",\n \"@lingui/babel-plugin-lingui-macro\": \"5.7.0\",\n \"@lingui/cli\": \"5.7.0\",\n \"@lingui/conf\": \"5.7.0\",\n \"@lingui/core\": \"5.7.0\",\n \"@lingui/react\": \"5.7.0\",\n \"@lingui/vite-plugin\": \"5.7.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tailwindcss/vite\": \"4.1.18\",\n \"@tanstack/react-query\": \"5.35.1\",\n \"@tanstack/react-router\": \"1.141.6\",\n \"@tanstack/router-plugin\": \"1.141.7\",\n \"@types/node\": \"^25.0.3\",\n \"@types/react\": \"19.1.8\",\n \"@types/react-dom\": \"19.1.6\",\n \"@vitejs/plugin-react\": \"4.5.2\",\n \"esbuild\": \"0.27.2\",\n \"motion\": \"12.23.26\",\n \"react\": \"19.2.3\",\n \"react-dom\": \"19.2.3\",\n \"react-hook-form\": \"7.69.0\",\n \"react-markdown\": \"10.1.0\",\n \"remark-gfm\": \"4.0.1\",\n \"tailwindcss\": \"4.1.18\",\n \"tsx\": \"4.20.6\",\n \"typescript\": \"5.8.3\",\n \"vite\": \"7.3.0\",\n \"zustand\": \"5.0.9\"\n },\n \"packageManager\": \"pnpm@10.26.2\"\n}\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { defineCommand } from 'citty';\nimport { consola } from 'consola';\n\nconst CONFIG_TEMPLATE = `// For more detailed configuration examples, see:\n// https://github.com/cut0/spec-snake/blob/main/examples\n\nimport { defineConfig, defineScenario } from 'spec-snake';\n\nexport default defineConfig({\n scenarios: [\n defineScenario({\n id: 'default',\n name: 'Design Doc Generator',\n steps: [\n {\n slug: 'overview',\n title: 'Overview',\n description: 'Basic information about the feature',\n section: {\n type: 'single',\n name: 'overview',\n fields: [\n {\n type: 'input',\n id: 'title',\n label: 'Title',\n description: 'Feature title',\n placeholder: 'Enter feature title',\n required: true,\n },\n {\n type: 'textarea',\n id: 'description',\n label: 'Description',\n description: 'Detailed description of the feature',\n placeholder: 'Describe the feature...',\n rows: 4,\n },\n {\n type: 'select',\n id: 'priority',\n label: 'Priority',\n description: 'Feature priority level',\n placeholder: 'Select priority',\n options: [\n { value: 'high', label: 'High' },\n { value: 'medium', label: 'Medium' },\n { value: 'low', label: 'Low' },\n ],\n },\n ],\n },\n },\n ],\n overrides: {\n filename: (params) => {\n return \\`\\${params.timestamp}.md\\`;\n },\n },\n prompt:\n 'Generate a design doc based on the following input: {{INPUT_JSON}}',\n }),\n ],\n permissions: {\n allowSave: true,\n },\n});\n`;\n\nexport const initCommand = defineCommand({\n meta: {\n name: 'init',\n description:\n 'Initialize a new spec-snake.config.ts file in the current directory',\n },\n args: {\n output: {\n type: 'string',\n description: 'Output file path',\n alias: 'o',\n default: 'spec-snake.config.ts',\n },\n force: {\n type: 'boolean',\n description: 'Overwrite existing file',\n alias: 'f',\n default: false,\n },\n },\n async run({ args }) {\n const outputPath = path.resolve(process.cwd(), args.output);\n\n if (fs.existsSync(outputPath) && !args.force) {\n consola.error(`File already exists: ${outputPath}`);\n consola.info('Use --force (-f) to overwrite');\n process.exit(1);\n }\n\n try {\n fs.writeFileSync(outputPath, CONFIG_TEMPLATE, 'utf-8');\n consola.success(`Config file created: ${outputPath}`);\n } catch (error) {\n consola.error('Failed to create config file:', error);\n process.exit(1);\n }\n },\n});\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as url from 'node:url';\n\nimport { serve } from '@hono/node-server';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport { defineCommand } from 'citty';\nimport { consola } from 'consola';\nimport { createJiti } from 'jiti';\n\nimport { type Config, safeParseConfig } from '../../definitions';\nimport { createApiServer } from '../../server/api';\n\nconst getDistClientDir = (): string => {\n const __filename = url.fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n\n // \u30D3\u30EB\u30C9\u5F8C: dist/cli.js \u2192 dist/client (\u540C\u3058 dist \u914D\u4E0B)\n // \u958B\u767A\u6642: src/cli/commands/start.ts \u2192 dist/client (3\u968E\u5C64\u4E0A\u306E dist \u914D\u4E0B)\n const isBuilt = __dirname.endsWith('/dist') || __dirname.includes('/dist/');\n return isBuilt\n ? path.resolve(__dirname, 'client')\n : path.resolve(__dirname, '../../../dist/client');\n};\n\nconst loadConfig = async (configPath: string): Promise<Config> => {\n const absolutePath = path.resolve(process.cwd(), configPath);\n\n if (!fs.existsSync(absolutePath)) {\n throw new Error(`Config file not found: ${absolutePath}`);\n }\n\n const jiti = createJiti(import.meta.url);\n const configModule = await jiti.import(absolutePath);\n const config = (configModule as { default: Config }).default;\n\n const result = safeParseConfig(config);\n if (!result.success) {\n const issues = result.issues.map((issue) => {\n const pathStr = issue.path?.map((p) => p.key).join('.') ?? '';\n return ` - ${pathStr}: ${issue.message}`;\n });\n throw new Error(`Invalid config:\\n${issues.join('\\n')}`);\n }\n\n // hooks \u306F valibot \u3067\u30D0\u30EA\u30C7\u30FC\u30B7\u30E7\u30F3\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u5143\u306E config \u304B\u3089\u4FDD\u6301\n return config;\n};\n\nconst runServer = async (\n config: Config,\n options: { distDir: string; port: number; host: string },\n) => {\n consola.start('Starting server...');\n\n const app = createApiServer(config);\n\n app.use(\n '/*',\n serveStatic({\n root: options.distDir,\n rewriteRequestPath: (requestPath) => {\n const fullPath = path.join(options.distDir, requestPath);\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n return requestPath;\n }\n return '/index.html';\n },\n }),\n );\n\n const server = serve(\n {\n fetch: app.fetch,\n port: options.port,\n hostname: options.host,\n },\n (info) => {\n const displayHost =\n info.address === '::1' || info.address === '127.0.0.1'\n ? 'localhost'\n : info.address;\n consola.success('Server started');\n consola.info(` \u279C Local: http://${displayHost}:${info.port}/`);\n },\n );\n\n const cleanup = () => {\n consola.info('Shutting down server...');\n server.close(() => {\n process.exit(0);\n });\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n};\n\nexport const startCommand = defineCommand({\n meta: {\n name: 'start',\n description: 'Start the server with the specified config',\n },\n args: {\n config: {\n type: 'string',\n description: 'Path to config file',\n alias: 'c',\n default: 'spec-snake.config.ts',\n },\n port: {\n type: 'string',\n description: 'Port to run the server on',\n alias: 'p',\n default: '3000',\n },\n host: {\n type: 'string',\n description: 'Host to bind the server to',\n default: 'localhost',\n },\n },\n async run({ args }) {\n const configPath = args.config;\n const port = Number.parseInt(args.port, 10);\n\n consola.start(`Loading config from: ${configPath}`);\n\n try {\n const config = await loadConfig(configPath);\n consola.success(\n `Config loaded successfully (${config.scenarios.length} scenarios)`,\n );\n\n await runServer(config, {\n distDir: getDistClientDir(),\n port,\n host: args.host,\n });\n } catch (error) {\n if (error instanceof Error) {\n consola.error(error.message);\n } else {\n consola.error('Failed to start server:', error);\n }\n process.exit(1);\n }\n },\n});\n", "import * as v from 'valibot';\nimport type { Field, GridLayout, LayoutField } from './types';\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport const isLayoutField = (field: Field): field is LayoutField => {\n return field.type === 'grid';\n};\n\n// =============================================================================\n// Form Field Schemas\n// =============================================================================\n\nconst FieldBaseSchema = v.object({\n id: v.string(),\n label: v.string(),\n description: v.string(),\n placeholder: v.optional(v.string()),\n required: v.optional(v.boolean()),\n});\n\nexport const SelectOptionSchema = v.object({\n value: v.string(),\n label: v.string(),\n});\n\nexport const InputFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('input'),\n inputType: v.optional(v.picklist(['text', 'date', 'url'])),\n suggestions: v.optional(v.array(v.string())),\n});\n\nexport const TextareaFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('textarea'),\n rows: v.optional(v.number()),\n});\n\nexport const SelectFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('select'),\n options: v.array(SelectOptionSchema),\n});\n\nexport const CheckboxFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('checkbox'),\n});\n\nexport const FormFieldSchema = v.union([\n InputFieldSchema,\n TextareaFieldSchema,\n SelectFieldSchema,\n CheckboxFieldSchema,\n]);\n\n// =============================================================================\n// Layout Schemas\n// =============================================================================\n\nexport const GridLayoutSchema: v.GenericSchema<GridLayout> = v.object({\n type: v.literal('grid'),\n columns: v.number(),\n fields: v.array(v.lazy(() => FieldSchema)),\n});\n\nexport const FieldSchema: v.GenericSchema<Field> = v.union([\n FormFieldSchema,\n GridLayoutSchema,\n]);\n\n// =============================================================================\n// Section Schemas\n// =============================================================================\n\nexport const SingleSectionSchema = v.object({\n type: v.literal('single'),\n name: v.string(),\n fields: v.array(FieldSchema),\n});\n\nexport const ArraySectionSchema = v.object({\n type: v.literal('array'),\n name: v.string(),\n fields: v.array(FieldSchema),\n minFieldCount: v.optional(v.number()),\n});\n\nexport const SectionSchema = v.union([SingleSectionSchema, ArraySectionSchema]);\n\n// =============================================================================\n// Step Schema\n// =============================================================================\n\nexport const StepSchema = v.object({\n slug: v.string(),\n title: v.string(),\n description: v.string(),\n section: SectionSchema,\n});\n\n// =============================================================================\n// AI Settings Schemas (Claude Agent SDK)\n// =============================================================================\n\nexport const McpServerConfigSchema = v.union([\n v.object({\n type: v.optional(v.literal('stdio')),\n command: v.string(),\n args: v.optional(v.array(v.string())),\n env: v.optional(v.record(v.string(), v.string())),\n }),\n v.object({\n type: v.literal('sse'),\n url: v.string(),\n headers: v.optional(v.record(v.string(), v.string())),\n }),\n v.object({\n type: v.literal('http'),\n url: v.string(),\n headers: v.optional(v.record(v.string(), v.string())),\n }),\n]);\n\nexport const AiSettingsSchema = v.optional(\n v.object({\n model: v.optional(v.string()),\n fallbackModel: v.optional(v.string()),\n maxThinkingTokens: v.optional(v.number()),\n maxTurns: v.optional(v.number()),\n maxBudgetUsd: v.optional(v.number()),\n allowedTools: v.optional(v.array(v.string())),\n disallowedTools: v.optional(v.array(v.string())),\n tools: v.optional(\n v.union([\n v.array(v.string()),\n v.object({\n type: v.literal('preset'),\n preset: v.literal('claude_code'),\n }),\n ]),\n ),\n permissionMode: v.optional(\n v.picklist([\n 'default',\n 'acceptEdits',\n 'bypassPermissions',\n 'plan',\n 'delegate',\n 'dontAsk',\n ]),\n ),\n allowDangerouslySkipPermissions: v.optional(v.boolean()),\n mcpServers: v.optional(v.record(v.string(), McpServerConfigSchema)),\n strictMcpConfig: v.optional(v.boolean()),\n }),\n);\n\n// =============================================================================\n// Scenario Schema\n// =============================================================================\n\nexport const ScenarioBaseSchema = v.object({\n id: v.string(),\n name: v.string(),\n steps: v.array(StepSchema),\n prompt: v.unknown(),\n aiSettings: AiSettingsSchema,\n});\n\nexport const ScenarioSchema = ScenarioBaseSchema;\n\n// =============================================================================\n// Configuration Schemas\n// =============================================================================\n\nexport const PermissionsSchema = v.object({\n allowSave: v.boolean(),\n});\n\nexport const ConfigSchema = v.object({\n scenarios: v.array(ScenarioSchema),\n permissions: PermissionsSchema,\n hosted: v.optional(v.boolean(), false),\n});\n\n// =============================================================================\n// Parser Functions\n// =============================================================================\n\nexport const parseConfig = (data: unknown) => {\n return v.parse(ConfigSchema, data);\n};\n\nexport const safeParseConfig = (data: unknown) => {\n return v.safeParse(ConfigSchema, data);\n};\n", "import { Hono } from 'hono';\n\nimport type { Config } from '../definitions';\n\nimport { createDocsApp } from './apps/docs';\nimport { createScenariosApp } from './apps/scenarios';\nimport { buildSectionInfoMap } from './helpers/scenarios/build-section-info';\n\nexport const createApiServer = (rawConfig: Config) => {\n const app = new Hono();\n\n // In hosted mode, allowSave is always false\n const config: Config = rawConfig.hosted\n ? {\n ...rawConfig,\n permissions: { ...rawConfig.permissions, allowSave: false },\n }\n : rawConfig;\n\n // \u30B7\u30CA\u30EA\u30AA\u3054\u3068\u306E\u60C5\u5831\u3092\u4E8B\u524D\u306B\u30D3\u30EB\u30C9\n const scenarioInfoMap = new Map(\n config.scenarios.map((scenario) => [\n scenario.id,\n {\n scenario,\n sectionInfoMap: buildSectionInfoMap(scenario.steps),\n },\n ]),\n );\n\n // Scenarios App\n const scenariosApp = createScenariosApp(config, scenarioInfoMap);\n\n // Docs App\n const docsApp = createDocsApp(config, scenarioInfoMap);\n\n // Mount sub-apps\n app.route('/', scenariosApp);\n app.route('/', docsApp);\n\n return app;\n};\n", "import { Hono } from 'hono';\nimport { createMiddleware } from 'hono/factory';\nimport { streamSSE } from 'hono/streaming';\n\nimport type { Config } from '../../definitions';\nimport { transformFormData } from '../helpers/docs/transform';\nimport {\n getDocumentsForScenario,\n getFilename,\n readDocument,\n saveDocument,\n} from '../repositories/document';\nimport { generateDesignDocStream } from '../usecases/docs/generate-doc';\n\nimport type { ScenarioInfoMapEntry } from './scenarios';\n\ntype Variables = {\n scenarioInfo: ScenarioInfoMapEntry;\n};\n\ntype CreateDocBody = {\n content: string;\n formData: Record<string, unknown>;\n};\n\ntype UpdateDocBody = {\n content: string;\n formData: Record<string, unknown>;\n};\n\nconst createScenarioMiddleware = (\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) =>\n createMiddleware<{ Variables: Variables }>(async (c, next) => {\n const scenarioId = c.req.param('scenarioId');\n\n if (scenarioId == null) {\n return c.json({ error: 'Scenario ID is required' }, 400);\n }\n\n const scenarioInfo = scenarioInfoMap.get(scenarioId);\n\n if (scenarioInfo == null) {\n return c.json({ error: 'Scenario not found' }, 404);\n }\n\n c.set('scenarioInfo', scenarioInfo);\n await next();\n });\n\nexport const createDocsApp = (\n config: Config,\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) => {\n const app = new Hono<{ Variables: Variables }>();\n\n app.use(\n '/api/scenarios/:scenarioId/*',\n createScenarioMiddleware(scenarioInfoMap),\n );\n\n app.get('/api/scenarios/:scenarioId/docs', async (c) => {\n const { scenario } = c.get('scenarioInfo');\n const docs = await getDocumentsForScenario(scenario);\n\n return c.json({ docs });\n });\n\n app.post('/api/scenarios/:scenarioId/docs/preview', async (c) => {\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n const formData = (await c.req.json()) as Record<string, unknown>;\n const inputData = transformFormData(formData, sectionInfoMap);\n\n return streamSSE(c, async (stream) => {\n let fullContent = '';\n\n for await (const chunk of generateDesignDocStream({\n scenario,\n formData,\n inputData,\n })) {\n fullContent += chunk.text;\n await stream.writeSSE({\n data: JSON.stringify({ type: 'text_delta', text: chunk.text }),\n event: 'message',\n });\n }\n\n await stream.writeSSE({\n data: JSON.stringify({ type: 'done', content: fullContent }),\n event: 'message',\n });\n\n if (scenario.hooks?.onPreview != null) {\n await scenario.hooks.onPreview({\n formData,\n inputData,\n content: fullContent,\n });\n }\n });\n });\n\n app.post('/api/scenarios/:scenarioId/docs', async (c) => {\n const scenarioId = c.req.param('scenarioId');\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n if (!config.permissions.allowSave) {\n return c.json({ error: 'Save is not allowed' }, 403);\n }\n\n const { content, formData } = (await c.req.json()) as CreateDocBody;\n const inputData = transformFormData(formData, sectionInfoMap);\n const filename = getFilename(\n scenario,\n scenarioId,\n content,\n formData,\n inputData,\n );\n const { outputPath } = await saveDocument({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n });\n\n if (scenario.hooks?.onSave != null) {\n await scenario.hooks.onSave({\n content,\n filename,\n outputPath,\n formData,\n inputData,\n });\n }\n\n return c.json({ success: true, filename });\n });\n\n app.get('/api/scenarios/:scenarioId/docs/:filename', async (c) => {\n const filename = c.req.param('filename');\n const { scenario } = c.get('scenarioInfo');\n\n const result = await readDocument(scenario, filename);\n\n if (!result.success) {\n return c.json({ error: 'Document not found' }, 404);\n }\n\n return c.json({ doc: result.doc });\n });\n\n app.put('/api/scenarios/:scenarioId/docs/:filename', async (c) => {\n const scenarioId = c.req.param('scenarioId');\n const filename = c.req.param('filename');\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n if (!config.permissions.allowSave) {\n return c.json({ error: 'Save is not allowed' }, 403);\n }\n\n const { content, formData } = (await c.req.json()) as UpdateDocBody;\n const inputData = transformFormData(formData, sectionInfoMap);\n const { outputPath } = await saveDocument({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n });\n\n if (scenario.hooks?.onSave != null) {\n await scenario.hooks.onSave({\n content,\n filename,\n outputPath,\n formData,\n inputData,\n });\n }\n\n return c.json({ success: true, filename });\n });\n\n return app;\n};\n", "import type { InputData } from '../../../definitions';\nimport type { SectionInfo } from '../scenarios/build-section-info';\n\nexport const transformFormData = (\n body: Record<string, unknown>,\n sectionInfoMap: Map<string, SectionInfo>,\n): InputData => {\n const items: InputData['items'] = [];\n\n for (const [sectionName, sectionValue] of Object.entries(body)) {\n const sectionInfo = sectionInfoMap.get(sectionName);\n\n if (sectionInfo == null) {\n continue;\n }\n\n const fieldInfoMap = new Map(sectionInfo.fields.map((f) => [f.id, f]));\n\n const values = (\n Array.isArray(sectionValue) ? sectionValue : [sectionValue]\n ).map((item: Record<string, unknown>) => {\n const itemValues: Array<{\n label: string;\n description: string;\n value: unknown;\n }> = Object.entries(item)\n .map(([fieldId, fieldValue]) => {\n const fieldInfo = fieldInfoMap.get(fieldId);\n if (fieldInfo) {\n return {\n label: fieldInfo.label,\n description: fieldInfo.description,\n value: fieldValue,\n };\n }\n return null;\n })\n .filter((value) => value != null);\n\n return itemValues;\n });\n\n items.push({\n title: sectionInfo.title,\n description: sectionInfo.description,\n values,\n });\n }\n\n return { items };\n};\n", "import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport type { InputData, Scenario } from '../../definitions';\nimport {\n type DocumentWithMetadata,\n addMetadataToContent,\n parseMetadata,\n} from '../helpers/docs/metadata';\n\nexport const getOutputDir = (scenario: Scenario): string => {\n return scenario.outputDir ?? join(process.cwd(), 'output');\n};\n\ntype ReadDocumentResult =\n | { success: true; doc: DocumentWithMetadata }\n | { success: false; error: 'not_found' | 'scenario_mismatch' };\n\nexport const readDocument = async (\n scenario: Scenario,\n filename: string,\n): Promise<ReadDocumentResult> => {\n const outputDir = getOutputDir(scenario);\n const filePath = join(outputDir, filename);\n\n try {\n const rawContent = await readFile(filePath, 'utf-8');\n const { metadata, content } = parseMetadata(rawContent);\n\n if (metadata?.scenarioId !== scenario.id) {\n return { success: false, error: 'scenario_mismatch' };\n }\n\n return {\n success: true,\n doc: { filename, content, metadata },\n };\n } catch {\n return { success: false, error: 'not_found' };\n }\n};\n\nexport const getDocumentsForScenario = async (\n scenario: Scenario,\n): Promise<DocumentWithMetadata[]> => {\n const outputDir = getOutputDir(scenario);\n\n try {\n const files = await readdir(outputDir);\n const mdFiles = files.filter((file) => file.endsWith('.md'));\n\n const docs = await Promise.all(\n mdFiles.map(async (filename) => {\n const result = await readDocument(scenario, filename);\n return result.success ? result.doc : null;\n }),\n );\n\n return docs.filter((doc) => doc != null);\n } catch {\n return [];\n }\n};\n\ntype SaveDocumentOptions = {\n scenario: Scenario;\n scenarioId: string;\n filename: string;\n content: string;\n formData: Record<string, unknown>;\n};\n\nexport const saveDocument = async ({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n}: SaveDocumentOptions): Promise<{ outputPath: string }> => {\n const outputDir = getOutputDir(scenario);\n const outputPath = join(outputDir, filename);\n\n const contentWithMetadata = addMetadataToContent(content, {\n scenarioId,\n formData,\n });\n\n await mkdir(outputDir, { recursive: true });\n await writeFile(outputPath, contentWithMetadata, 'utf-8');\n\n return { outputPath };\n};\n\nexport const getFilename = (\n scenario: Scenario,\n scenarioId: string,\n content: string,\n formData: Record<string, unknown>,\n inputData: InputData,\n): string => {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n\n const filenameOverride = scenario.overrides?.filename;\n if (filenameOverride != null) {\n return typeof filenameOverride === 'function'\n ? filenameOverride({\n scenarioId,\n timestamp,\n content,\n formData,\n inputData,\n })\n : filenameOverride;\n }\n\n return `design-doc-${scenarioId}-${timestamp}.md`;\n};\n", "export type DocumentMetadata = {\n scenarioId: string;\n formData: Record<string, unknown>;\n};\n\nexport type DocumentWithMetadata = {\n filename: string;\n content: string;\n metadata: DocumentMetadata | null;\n};\n\nconst METADATA_START = '<!-- design-docs-metadata';\nconst METADATA_END = '-->';\n\nexport const serializeMetadata = (metadata: DocumentMetadata): string => {\n return `${METADATA_START}\\n${JSON.stringify(metadata, null, 2)}\\n${METADATA_END}`;\n};\n\nexport const parseMetadata = (\n content: string,\n): { metadata: DocumentMetadata | null; content: string } => {\n const metadataStartIndex = content.lastIndexOf(METADATA_START);\n if (metadataStartIndex === -1) {\n return { metadata: null, content };\n }\n\n const metadataEndIndex = content.indexOf(METADATA_END, metadataStartIndex);\n if (metadataEndIndex === -1) {\n return { metadata: null, content };\n }\n\n try {\n const metadataJson = content\n .slice(metadataStartIndex + METADATA_START.length, metadataEndIndex)\n .trim();\n const metadata = JSON.parse(metadataJson) as DocumentMetadata;\n const cleanContent = content.slice(0, metadataStartIndex).trim();\n return { metadata, content: cleanContent };\n } catch {\n return { metadata: null, content };\n }\n};\n\nexport const addMetadataToContent = (\n content: string,\n metadata: DocumentMetadata,\n): string => {\n return `${content}\\n\\n${serializeMetadata(metadata)}`;\n};\n", "import {\n type Options,\n type SDKResultMessage,\n query,\n} from '@anthropic-ai/claude-agent-sdk';\n\nimport type { InputData, Scenario } from '../../../definitions';\n\ntype GenerateDesignDocParams = {\n scenario: Scenario;\n formData: Record<string, unknown>;\n inputData: InputData;\n};\n\nexport const generateDesignDoc = async ({\n scenario,\n formData,\n inputData,\n}: GenerateDesignDocParams): Promise<string> => {\n const promptTemplate =\n typeof scenario.prompt === 'function'\n ? scenario.prompt({ formData, inputData })\n : scenario.prompt;\n const prompt = promptTemplate.replace(\n '{{INPUT_JSON}}',\n JSON.stringify(inputData, null, 2),\n );\n\n let message: SDKResultMessage | null = null;\n\n for await (const msg of query({\n prompt,\n options: scenario.aiSettings as Options,\n })) {\n if (msg.type === 'result' && msg.subtype === 'success') {\n message = msg;\n }\n }\n\n if (message == null) {\n throw new Error('Query failed');\n }\n\n return message.result;\n};\n\ntype StreamChunk = {\n type: 'text_delta';\n text: string;\n};\n\nexport async function* generateDesignDocStream({\n scenario,\n formData,\n inputData,\n}: GenerateDesignDocParams): AsyncGenerator<StreamChunk> {\n const promptTemplate =\n typeof scenario.prompt === 'function'\n ? scenario.prompt({ formData, inputData })\n : scenario.prompt;\n const prompt = promptTemplate.replace(\n '{{INPUT_JSON}}',\n JSON.stringify(inputData, null, 2),\n );\n\n for await (const msg of query({\n prompt,\n options: {\n ...(scenario.aiSettings as Options),\n includePartialMessages: true,\n },\n })) {\n if (msg.type === 'stream_event') {\n const event = msg.event as {\n type: string;\n delta?: { type: string; text?: string };\n };\n if (\n event.type === 'content_block_delta' &&\n event.delta?.type === 'text_delta' &&\n event.delta.text != null\n ) {\n yield { type: 'text_delta', text: event.delta.text };\n }\n }\n }\n}\n", "import { Hono } from 'hono';\n\nimport type { Config, Scenario } from '../../definitions';\nimport { buildFormDefaultValues } from '../helpers/scenarios/build-form-defaults';\nimport type { buildSectionInfoMap } from '../helpers/scenarios/build-section-info';\n\nexport type ScenarioInfo = {\n sectionInfoMap: ReturnType<typeof buildSectionInfoMap>;\n};\n\nexport type ScenarioInfoMapEntry = {\n scenario: Scenario;\n sectionInfoMap: ReturnType<typeof buildSectionInfoMap>;\n};\n\nexport const createScenariosApp = (\n config: Config,\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) => {\n const app = new Hono();\n\n // \u5168\u30B7\u30CA\u30EA\u30AA\u53D6\u5F97\n app.get('/api/scenarios', (c) => {\n return c.json({\n scenarios: config.scenarios,\n });\n });\n\n // \u5358\u4E00\u30B7\u30CA\u30EA\u30AA\u53D6\u5F97\n app.get('/api/scenarios/:scenarioId', (c) => {\n const scenarioId = c.req.param('scenarioId');\n const scenarioInfo = scenarioInfoMap.get(scenarioId);\n\n if (scenarioInfo == null) {\n return c.json({ error: 'Scenario not found' }, 404);\n }\n\n const formDefaultValues = buildFormDefaultValues(\n scenarioInfo.scenario.steps,\n );\n\n return c.json({\n scenario: scenarioInfo.scenario,\n formDefaultValues,\n permissions: config.permissions,\n });\n });\n\n return app;\n};\n", "import { type Field, type Step, isLayoutField } from '../../../definitions';\n\nexport const buildFieldDefaults = (\n fields: Field[],\n): Record<string, unknown> => {\n const getFieldDefaultValue = (field: Field): unknown => {\n if (isLayoutField(field)) {\n return undefined;\n }\n switch (field.type) {\n case 'checkbox':\n return false;\n default:\n return '';\n }\n };\n\n const defaults: Record<string, unknown> = {};\n for (const field of fields) {\n if (isLayoutField(field)) {\n Object.assign(defaults, buildFieldDefaults(field.fields));\n } else {\n defaults[field.id] = getFieldDefaultValue(field);\n }\n }\n return defaults;\n};\n\nexport const buildFormDefaultValues = (\n steps: Step[],\n): Record<string, unknown> => {\n const defaults: Record<string, unknown> = {};\n for (const config of steps) {\n if (config.section.type === 'single') {\n defaults[config.section.name] = buildFieldDefaults(config.section.fields);\n } else {\n const minCount = config.section.minFieldCount ?? 1;\n defaults[config.section.name] = Array.from({ length: minCount }, () =>\n buildFieldDefaults(config.section.fields),\n );\n }\n }\n return defaults;\n};\n", "import { type Field, type Step, isLayoutField } from '../../../definitions';\n\nexport type FieldInfo = {\n id: string;\n label: string;\n description: string;\n};\n\nexport type SectionInfo = {\n name: string;\n title: string;\n description: string;\n fields: FieldInfo[];\n};\n\nexport const extractFieldInfos = (fields: Field[]): FieldInfo[] => {\n const result: FieldInfo[] = [];\n for (const field of fields) {\n if (isLayoutField(field)) {\n result.push(...extractFieldInfos(field.fields));\n } else {\n result.push({\n id: field.id,\n label: field.label,\n description: field.description,\n });\n }\n }\n return result;\n};\n\nexport const buildSectionInfoMap = (\n steps: Step[],\n): Map<string, SectionInfo> => {\n const sectionMap = new Map<string, SectionInfo>(\n steps.map((step) => [\n step.section.name,\n {\n name: step.section.name,\n title: step.title,\n description: step.description,\n fields: extractFieldInfos(step.section.fields),\n },\n ]),\n );\n\n return sectionMap;\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["defineCommand", "fs", "path", "defineCommand", "consola", "Hono", "Hono", "Hono", "Hono", "consola", "defineCommand", "defineCommand"]
7
7
  }
@@ -1 +1 @@
1
- import{j as o}from"./index-DzfYNFpx.js";const e=r=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r,children:o.jsx("path",{d:"M6 4L10 8L6 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as C};
1
+ import{j as o}from"./index-DUBT0ryo.js";const e=r=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r,children:o.jsx("path",{d:"M6 4L10 8L6 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as C};
@@ -1 +1 @@
1
- import{j as o}from"./index-DzfYNFpx.js";const e=t=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t,children:o.jsx("path",{d:"M9 1H4C3.44772 1 3 1.44772 3 2V14C3 14.5523 3.44772 15 4 15H12C12.5523 15 13 14.5523 13 14V5M9 1L13 5M9 1V5H13M5 8H11M5 11H11",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as D};
1
+ import{j as o}from"./index-DUBT0ryo.js";const e=t=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t,children:o.jsx("path",{d:"M9 1H4C3.44772 1 3 1.44772 3 2V14C3 14.5523 3.44772 15 4 15H12C12.5523 15 13 14.5523 13 14V5M9 1L13 5M9 1V5H13M5 8H11M5 11H11",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as D};
@@ -1 +1 @@
1
- import{S as P,g as R,P as D,Q as E,U as L,V as B,W as N,X as A,Y as Q,n as F,r as d,k as H,j as n,Z as W,_,u as z,$ as V,L as Z}from"./index-DzfYNFpx.js";var $=class extends P{constructor(t,e){super(),this.options=e,this.#s=t,this.#i=null,this.bindMethods(),this.setOptions(e)}#s;#t=void 0;#f=void 0;#e=void 0;#n;#u;#i;#p;#c;#l;#o;#a;#r;#d=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),I(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return C(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return C(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#x(),this.#R(),this.#t.removeObserver(this)}setOptions(t,e){const s=this.options,i=this.#t;if(this.options=this.#s.defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.#C(),this.#t.setOptions(this.options),s._defaulted&&!R(this.options,s)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const a=this.hasListeners();a&&U(this.#t,i,this.options,s)&&this.#h(),this.updateResult(e),a&&(this.#t!==i||this.options.enabled!==s.enabled||this.options.staleTime!==s.staleTime)&&this.#g();const u=this.#v();a&&(this.#t!==i||this.options.enabled!==s.enabled||u!==this.#r)&&this.#b(u)}getOptimisticResult(t){const e=this.#s.getQueryCache().build(this.#s,t),s=this.createResult(e,t);return K(this,s)&&(this.#e=s,this.#u=this.options,this.#n=this.#t.state),s}getCurrentResult(){return this.#e}trackResult(t,e){const s={};return Object.keys(t).forEach(i=>{Object.defineProperty(s,i,{configurable:!1,enumerable:!0,get:()=>(this.trackProp(i),e?.(i),t[i])})}),s}trackProp(t){this.#d.add(t)}getCurrentQuery(){return this.#t}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const e=this.#s.defaultQueryOptions(t),s=this.#s.getQueryCache().build(this.#s,e);return s.isFetchingOptimistic=!0,s.fetch().then(()=>this.createResult(s,e))}fetch(t){return this.#h({...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#e))}#h(t){this.#C();let e=this.#t.fetch(this.options,t);return t?.throwOnError||(e=e.catch(D)),e}#g(){if(this.#x(),E||this.#e.isStale||!L(this.options.staleTime))return;const e=B(this.#e.dataUpdatedAt,this.options.staleTime)+1;this.#o=setTimeout(()=>{this.#e.isStale||this.updateResult()},e)}#v(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#b(t){this.#R(),this.#r=t,!(E||this.options.enabled===!1||!L(this.#r)||this.#r===0)&&(this.#a=setInterval(()=>{(this.options.refetchIntervalInBackground||N.isFocused())&&this.#h()},this.#r))}#y(){this.#g(),this.#b(this.#v())}#x(){this.#o&&(clearTimeout(this.#o),this.#o=void 0)}#R(){this.#a&&(clearInterval(this.#a),this.#a=void 0)}createResult(t,e){const s=this.#t,i=this.options,a=this.#e,u=this.#n,o=this.#u,f=t!==s?t.state:this.#f,{state:p}=t;let r={...p},O=!1,l;if(e._optimisticResults){const c=this.hasListeners(),x=!c&&I(t,e),T=c&&U(t,s,e,i);(x||T)&&(r={...r,...A(p.data,t.options)}),e._optimisticResults==="isRestoring"&&(r.fetchStatus="idle")}let{error:w,errorUpdatedAt:S,status:g}=r;if(e.select&&r.data!==void 0)if(a&&r.data===u?.data&&e.select===this.#p)l=this.#c;else try{this.#p=e.select,l=e.select(r.data),l=Q(a?.data,l,e),this.#c=l,this.#i=null}catch(c){this.#i=c}else l=r.data;if(e.placeholderData!==void 0&&l===void 0&&g==="pending"){let c;if(a?.isPlaceholderData&&e.placeholderData===o?.placeholderData)c=a.data;else if(c=typeof e.placeholderData=="function"?e.placeholderData(this.#l?.state.data,this.#l):e.placeholderData,e.select&&c!==void 0)try{c=e.select(c),this.#i=null}catch(x){this.#i=x}c!==void 0&&(g="success",l=Q(a?.data,c,e),O=!0)}this.#i&&(w=this.#i,l=this.#c,S=Date.now(),g="error");const v=r.fetchStatus==="fetching",b=g==="pending",y=g==="error",k=b&&v,j=l!==void 0;return{status:g,fetchStatus:r.fetchStatus,isPending:b,isSuccess:g==="success",isError:y,isInitialLoading:k,isLoading:k,data:l,dataUpdatedAt:r.dataUpdatedAt,error:w,errorUpdatedAt:S,failureCount:r.fetchFailureCount,failureReason:r.fetchFailureReason,errorUpdateCount:r.errorUpdateCount,isFetched:r.dataUpdateCount>0||r.errorUpdateCount>0,isFetchedAfterMount:r.dataUpdateCount>f.dataUpdateCount||r.errorUpdateCount>f.errorUpdateCount,isFetching:v,isRefetching:v&&!b,isLoadingError:y&&!j,isPaused:r.fetchStatus==="paused",isPlaceholderData:O,isRefetchError:y&&j,isStale:m(t,e),refetch:this.refetch}}updateResult(t){const e=this.#e,s=this.createResult(this.#t,this.options);if(this.#n=this.#t.state,this.#u=this.options,this.#n.data!==void 0&&(this.#l=this.#t),R(s,e))return;this.#e=s;const i={},a=()=>{if(!e)return!0;const{notifyOnChangeProps:u}=this.options,o=typeof u=="function"?u():u;if(o==="all"||!o&&!this.#d.size)return!0;const h=new Set(o??this.#d);return this.options.throwOnError&&h.add("error"),Object.keys(this.#e).some(f=>{const p=f;return this.#e[p]!==e[p]&&h.has(p)})};t?.listeners!==!1&&a()&&(i.listeners=!0),this.#m({...i,...t})}#C(){const t=this.#s.getQueryCache().build(this.#s,this.options);if(t===this.#t)return;const e=this.#t;this.#t=t,this.#f=t.state,this.hasListeners()&&(e?.removeObserver(this),t.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#m(t){F.batch(()=>{t.listeners&&this.listeners.forEach(e=>{e(this.#e)}),this.#s.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function G(t,e){return e.enabled!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&e.retryOnMount===!1)}function I(t,e){return G(t,e)||t.state.data!==void 0&&C(t,e,e.refetchOnMount)}function C(t,e,s){if(e.enabled!==!1){const i=typeof s=="function"?s(t):s;return i==="always"||i!==!1&&m(t,e)}return!1}function U(t,e,s,i){return(t!==e||i.enabled===!1)&&(!s.suspense||t.state.status!=="error")&&m(t,s)}function m(t,e){return e.enabled!==!1&&t.isStaleByTime(e.staleTime)}function K(t,e){return!R(t.getCurrentResult(),e)}var M=d.createContext(!1),X=()=>d.useContext(M);M.Provider;function Y(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var q=d.createContext(Y()),J=()=>d.useContext(q);function tt(t,e){return typeof t=="function"?t(...e):!!t}function vt(){}var et=(t,e)=>{(t.suspense||t.throwOnError)&&(e.isReset()||(t.retryOnMount=!1))},st=t=>{d.useEffect(()=>{t.clearReset()},[t])},it=({result:t,errorResetBoundary:e,throwOnError:s,query:i})=>t.isError&&!e.isReset()&&!t.isFetching&&i&&tt(s,[t.error,i]),rt=(t,e)=>e.state.data===void 0,nt=t=>{t.suspense&&typeof t.staleTime!="number"&&(t.staleTime=1e3)},ot=(t,e)=>t?.suspense&&e.isPending,at=(t,e,s)=>e.fetchOptimistic(t).catch(()=>{s.clearReset()});function ht(t,e,s){const i=H(),a=X(),u=J(),o=i.defaultQueryOptions(t);o._optimisticResults=a?"isRestoring":"optimistic",nt(o),et(o,u),st(u);const[h]=d.useState(()=>new e(i,o)),f=h.getOptimisticResult(o);if(d.useSyncExternalStore(d.useCallback(p=>{const r=a?()=>{}:h.subscribe(F.batchCalls(p));return h.updateResult(),r},[h,a]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),d.useEffect(()=>{h.setOptions(o,{listeners:!1})},[o,h]),ot(o,f))throw at(o,h,u);if(it({result:f,errorResetBoundary:u,throwOnError:o.throwOnError,query:i.getQueryCache().get(o.queryHash)}))throw f.error;return o.notifyOnChangeProps?f:h.trackResult(f)}function bt(t,e){return ht({...t,enabled:!0,suspense:!0,throwOnError:rt,placeholderData:void 0},$)}const ut=()=>n.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),ct=()=>n.jsxs("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[n.jsx("path",{d:"M0.666992 8.00004C0.666992 8.00004 3.33366 2.66671 8.00033 2.66671C12.667 2.66671 15.3337 8.00004 15.3337 8.00004C15.3337 8.00004 12.667 13.3334 8.00033 13.3334C3.33366 13.3334 0.666992 8.00004 0.666992 8.00004Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:"M8.00033 10C9.10489 10 10.0003 9.10461 10.0003 8.00004C10.0003 6.89547 9.10489 6.00004 8.00033 6.00004C6.89576 6.00004 6.00033 6.89547 6.00033 8.00004C6.00033 9.10461 6.89576 10 8.00033 10Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),lt=()=>n.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M2 4H14M2 8H14M2 12H14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),dt=({locale:t,isActive:e,onClick:s})=>{const i=d.useCallback(()=>{s(t)},[t,s]);return n.jsx("button",{className:`px-2 py-1 text-xs rounded transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2 ${e?"bg-indigo-500 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200"}`,type:"button",onClick:i,children:t.toUpperCase()})},ft=({currentLocale:t})=>{const e=d.useCallback(s=>{W(s),window.location.reload()},[]);return n.jsx("div",{className:"flex gap-1",children:Object.keys(_).map(s=>n.jsx(dt,{locale:s,isActive:t===s,onClick:e},s))})},yt=({isMenuOpen:t,onToggleMenu:e,onOpenPreview:s})=>{const{_:i}=z(),a=V();return n.jsxs("header",{className:"flex items-center justify-between h-14 px-4 xl:px-6 bg-white rounded-2xl border border-gray-100",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[e!=null&&n.jsx("button",{"aria-label":i(t?{id:"vcpc5o"}:{id:"GSr0rF"}),className:"xl:hidden p-2 rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors cursor-pointer *:size-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2",type:"button",onClick:e,children:t?n.jsx(ut,{}):n.jsx(lt,{})}),n.jsx(Z,{to:"/scenarios",className:"text-lg font-bold text-gray-900 hover:text-indigo-600 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2 rounded",children:"Spec Snake Beta"})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx(ft,{currentLocale:a}),s!=null&&n.jsx("button",{"aria-label":i({id:"fsyAH8"}),className:"lg:hidden p-2 rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors cursor-pointer *:size-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2",type:"button",onClick:s,children:n.jsx(ct,{})})]})]})};export{ut as C,ct as E,yt as H,vt as n,tt as s,bt as u};
1
+ import{S as P,g as R,P as D,Q as E,U as L,V as B,W as N,X as A,Y as Q,n as F,r as d,k as H,j as n,Z as W,_,u as z,$ as V,L as Z}from"./index-DUBT0ryo.js";var $=class extends P{constructor(t,e){super(),this.options=e,this.#s=t,this.#i=null,this.bindMethods(),this.setOptions(e)}#s;#t=void 0;#f=void 0;#e=void 0;#n;#u;#i;#p;#c;#l;#o;#a;#r;#d=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),I(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return C(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return C(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#x(),this.#R(),this.#t.removeObserver(this)}setOptions(t,e){const s=this.options,i=this.#t;if(this.options=this.#s.defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.#C(),this.#t.setOptions(this.options),s._defaulted&&!R(this.options,s)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const a=this.hasListeners();a&&U(this.#t,i,this.options,s)&&this.#h(),this.updateResult(e),a&&(this.#t!==i||this.options.enabled!==s.enabled||this.options.staleTime!==s.staleTime)&&this.#g();const u=this.#v();a&&(this.#t!==i||this.options.enabled!==s.enabled||u!==this.#r)&&this.#b(u)}getOptimisticResult(t){const e=this.#s.getQueryCache().build(this.#s,t),s=this.createResult(e,t);return K(this,s)&&(this.#e=s,this.#u=this.options,this.#n=this.#t.state),s}getCurrentResult(){return this.#e}trackResult(t,e){const s={};return Object.keys(t).forEach(i=>{Object.defineProperty(s,i,{configurable:!1,enumerable:!0,get:()=>(this.trackProp(i),e?.(i),t[i])})}),s}trackProp(t){this.#d.add(t)}getCurrentQuery(){return this.#t}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const e=this.#s.defaultQueryOptions(t),s=this.#s.getQueryCache().build(this.#s,e);return s.isFetchingOptimistic=!0,s.fetch().then(()=>this.createResult(s,e))}fetch(t){return this.#h({...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#e))}#h(t){this.#C();let e=this.#t.fetch(this.options,t);return t?.throwOnError||(e=e.catch(D)),e}#g(){if(this.#x(),E||this.#e.isStale||!L(this.options.staleTime))return;const e=B(this.#e.dataUpdatedAt,this.options.staleTime)+1;this.#o=setTimeout(()=>{this.#e.isStale||this.updateResult()},e)}#v(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#b(t){this.#R(),this.#r=t,!(E||this.options.enabled===!1||!L(this.#r)||this.#r===0)&&(this.#a=setInterval(()=>{(this.options.refetchIntervalInBackground||N.isFocused())&&this.#h()},this.#r))}#y(){this.#g(),this.#b(this.#v())}#x(){this.#o&&(clearTimeout(this.#o),this.#o=void 0)}#R(){this.#a&&(clearInterval(this.#a),this.#a=void 0)}createResult(t,e){const s=this.#t,i=this.options,a=this.#e,u=this.#n,o=this.#u,f=t!==s?t.state:this.#f,{state:p}=t;let r={...p},O=!1,l;if(e._optimisticResults){const c=this.hasListeners(),x=!c&&I(t,e),T=c&&U(t,s,e,i);(x||T)&&(r={...r,...A(p.data,t.options)}),e._optimisticResults==="isRestoring"&&(r.fetchStatus="idle")}let{error:w,errorUpdatedAt:S,status:g}=r;if(e.select&&r.data!==void 0)if(a&&r.data===u?.data&&e.select===this.#p)l=this.#c;else try{this.#p=e.select,l=e.select(r.data),l=Q(a?.data,l,e),this.#c=l,this.#i=null}catch(c){this.#i=c}else l=r.data;if(e.placeholderData!==void 0&&l===void 0&&g==="pending"){let c;if(a?.isPlaceholderData&&e.placeholderData===o?.placeholderData)c=a.data;else if(c=typeof e.placeholderData=="function"?e.placeholderData(this.#l?.state.data,this.#l):e.placeholderData,e.select&&c!==void 0)try{c=e.select(c),this.#i=null}catch(x){this.#i=x}c!==void 0&&(g="success",l=Q(a?.data,c,e),O=!0)}this.#i&&(w=this.#i,l=this.#c,S=Date.now(),g="error");const v=r.fetchStatus==="fetching",b=g==="pending",y=g==="error",k=b&&v,j=l!==void 0;return{status:g,fetchStatus:r.fetchStatus,isPending:b,isSuccess:g==="success",isError:y,isInitialLoading:k,isLoading:k,data:l,dataUpdatedAt:r.dataUpdatedAt,error:w,errorUpdatedAt:S,failureCount:r.fetchFailureCount,failureReason:r.fetchFailureReason,errorUpdateCount:r.errorUpdateCount,isFetched:r.dataUpdateCount>0||r.errorUpdateCount>0,isFetchedAfterMount:r.dataUpdateCount>f.dataUpdateCount||r.errorUpdateCount>f.errorUpdateCount,isFetching:v,isRefetching:v&&!b,isLoadingError:y&&!j,isPaused:r.fetchStatus==="paused",isPlaceholderData:O,isRefetchError:y&&j,isStale:m(t,e),refetch:this.refetch}}updateResult(t){const e=this.#e,s=this.createResult(this.#t,this.options);if(this.#n=this.#t.state,this.#u=this.options,this.#n.data!==void 0&&(this.#l=this.#t),R(s,e))return;this.#e=s;const i={},a=()=>{if(!e)return!0;const{notifyOnChangeProps:u}=this.options,o=typeof u=="function"?u():u;if(o==="all"||!o&&!this.#d.size)return!0;const h=new Set(o??this.#d);return this.options.throwOnError&&h.add("error"),Object.keys(this.#e).some(f=>{const p=f;return this.#e[p]!==e[p]&&h.has(p)})};t?.listeners!==!1&&a()&&(i.listeners=!0),this.#m({...i,...t})}#C(){const t=this.#s.getQueryCache().build(this.#s,this.options);if(t===this.#t)return;const e=this.#t;this.#t=t,this.#f=t.state,this.hasListeners()&&(e?.removeObserver(this),t.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#m(t){F.batch(()=>{t.listeners&&this.listeners.forEach(e=>{e(this.#e)}),this.#s.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function G(t,e){return e.enabled!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&e.retryOnMount===!1)}function I(t,e){return G(t,e)||t.state.data!==void 0&&C(t,e,e.refetchOnMount)}function C(t,e,s){if(e.enabled!==!1){const i=typeof s=="function"?s(t):s;return i==="always"||i!==!1&&m(t,e)}return!1}function U(t,e,s,i){return(t!==e||i.enabled===!1)&&(!s.suspense||t.state.status!=="error")&&m(t,s)}function m(t,e){return e.enabled!==!1&&t.isStaleByTime(e.staleTime)}function K(t,e){return!R(t.getCurrentResult(),e)}var M=d.createContext(!1),X=()=>d.useContext(M);M.Provider;function Y(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var q=d.createContext(Y()),J=()=>d.useContext(q);function tt(t,e){return typeof t=="function"?t(...e):!!t}function vt(){}var et=(t,e)=>{(t.suspense||t.throwOnError)&&(e.isReset()||(t.retryOnMount=!1))},st=t=>{d.useEffect(()=>{t.clearReset()},[t])},it=({result:t,errorResetBoundary:e,throwOnError:s,query:i})=>t.isError&&!e.isReset()&&!t.isFetching&&i&&tt(s,[t.error,i]),rt=(t,e)=>e.state.data===void 0,nt=t=>{t.suspense&&typeof t.staleTime!="number"&&(t.staleTime=1e3)},ot=(t,e)=>t?.suspense&&e.isPending,at=(t,e,s)=>e.fetchOptimistic(t).catch(()=>{s.clearReset()});function ht(t,e,s){const i=H(),a=X(),u=J(),o=i.defaultQueryOptions(t);o._optimisticResults=a?"isRestoring":"optimistic",nt(o),et(o,u),st(u);const[h]=d.useState(()=>new e(i,o)),f=h.getOptimisticResult(o);if(d.useSyncExternalStore(d.useCallback(p=>{const r=a?()=>{}:h.subscribe(F.batchCalls(p));return h.updateResult(),r},[h,a]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),d.useEffect(()=>{h.setOptions(o,{listeners:!1})},[o,h]),ot(o,f))throw at(o,h,u);if(it({result:f,errorResetBoundary:u,throwOnError:o.throwOnError,query:i.getQueryCache().get(o.queryHash)}))throw f.error;return o.notifyOnChangeProps?f:h.trackResult(f)}function bt(t,e){return ht({...t,enabled:!0,suspense:!0,throwOnError:rt,placeholderData:void 0},$)}const ut=()=>n.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),ct=()=>n.jsxs("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[n.jsx("path",{d:"M0.666992 8.00004C0.666992 8.00004 3.33366 2.66671 8.00033 2.66671C12.667 2.66671 15.3337 8.00004 15.3337 8.00004C15.3337 8.00004 12.667 13.3334 8.00033 13.3334C3.33366 13.3334 0.666992 8.00004 0.666992 8.00004Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:"M8.00033 10C9.10489 10 10.0003 9.10461 10.0003 8.00004C10.0003 6.89547 9.10489 6.00004 8.00033 6.00004C6.89576 6.00004 6.00033 6.89547 6.00033 8.00004C6.00033 9.10461 6.89576 10 8.00033 10Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),lt=()=>n.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M2 4H14M2 8H14M2 12H14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),dt=({locale:t,isActive:e,onClick:s})=>{const i=d.useCallback(()=>{s(t)},[t,s]);return n.jsx("button",{className:`px-2 py-1 text-xs rounded transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2 ${e?"bg-indigo-500 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200"}`,type:"button",onClick:i,children:t.toUpperCase()})},ft=({currentLocale:t})=>{const e=d.useCallback(s=>{W(s),window.location.reload()},[]);return n.jsx("div",{className:"flex gap-1",children:Object.keys(_).map(s=>n.jsx(dt,{locale:s,isActive:t===s,onClick:e},s))})},yt=({isMenuOpen:t,onToggleMenu:e,onOpenPreview:s})=>{const{_:i}=z(),a=V();return n.jsxs("header",{className:"flex items-center justify-between h-14 px-4 xl:px-6 bg-white rounded-2xl border border-gray-100",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[e!=null&&n.jsx("button",{"aria-label":i(t?{id:"vcpc5o"}:{id:"GSr0rF"}),className:"xl:hidden p-2 rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors cursor-pointer *:size-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2",type:"button",onClick:e,children:t?n.jsx(ut,{}):n.jsx(lt,{})}),n.jsx(Z,{to:"/scenarios",className:"text-lg font-bold text-gray-900 hover:text-indigo-600 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2 rounded",children:"Spec Snake Beta"})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx(ft,{currentLocale:a}),s!=null&&n.jsx("button",{"aria-label":i({id:"fsyAH8"}),className:"lg:hidden p-2 rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors cursor-pointer *:size-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2",type:"button",onClick:s,children:n.jsx(ct,{})})]})]})};export{ut as C,ct as E,yt as H,vt as n,tt as s,bt as u};
@@ -1 +1 @@
1
- import{j as o}from"./index-DzfYNFpx.js";const e=r=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r,children:o.jsx("path",{d:"M8 3V13M3 8H13",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as P};
1
+ import{j as o}from"./index-DUBT0ryo.js";const e=r=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r,children:o.jsx("path",{d:"M8 3V13M3 8H13",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as P};