@nodaro/prompts 1.53.2 → 1.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/{catalog-packs-DeMcSVCR.d.cts → catalog-packs-Bw7OpufR.d.cts} +1 -1
  2. package/dist/{catalog-packs-DjqvicAR.d.ts → catalog-packs-CyS8NdLM.d.ts} +1 -1
  3. package/dist/{chunk-HOZPYHRA.js → chunk-242NZ6SI.js} +5 -5
  4. package/dist/{chunk-HOZPYHRA.js.map → chunk-242NZ6SI.js.map} +1 -1
  5. package/dist/{chunk-GRSKB3P7.cjs → chunk-2LWYFWZL.cjs} +528 -2
  6. package/dist/chunk-2LWYFWZL.cjs.map +1 -0
  7. package/dist/{chunk-P4BXE4OA.cjs → chunk-2MTFPGQC.cjs} +13 -13
  8. package/dist/{chunk-P4BXE4OA.cjs.map → chunk-2MTFPGQC.cjs.map} +1 -1
  9. package/dist/{chunk-EKRO42T3.cjs → chunk-32BMZ4Q5.cjs} +113 -41
  10. package/dist/chunk-32BMZ4Q5.cjs.map +1 -0
  11. package/dist/{chunk-WQ7FWGZ2.js → chunk-4MCK7Y6C.js} +524 -3
  12. package/dist/chunk-4MCK7Y6C.js.map +1 -0
  13. package/dist/{chunk-FFPFBNXH.cjs → chunk-7ZWWJY24.cjs} +8 -2
  14. package/dist/chunk-7ZWWJY24.cjs.map +1 -0
  15. package/dist/{chunk-F22GZF7T.cjs → chunk-AMUXCE7X.cjs} +8 -8
  16. package/dist/{chunk-F22GZF7T.cjs.map → chunk-AMUXCE7X.cjs.map} +1 -1
  17. package/dist/{chunk-OQ3J7OGR.cjs → chunk-BHBZN2AP.cjs} +49 -49
  18. package/dist/{chunk-OQ3J7OGR.cjs.map → chunk-BHBZN2AP.cjs.map} +1 -1
  19. package/dist/{chunk-YAIPYPMM.js → chunk-BJGD4DBP.js} +4 -4
  20. package/dist/{chunk-YAIPYPMM.js.map → chunk-BJGD4DBP.js.map} +1 -1
  21. package/dist/{chunk-ZRORO6OM.js → chunk-CYYHQNW3.js} +4 -4
  22. package/dist/{chunk-ZRORO6OM.js.map → chunk-CYYHQNW3.js.map} +1 -1
  23. package/dist/{chunk-E5EKWWOO.cjs → chunk-FEHXLXAV.cjs} +8 -7
  24. package/dist/chunk-FEHXLXAV.cjs.map +1 -0
  25. package/dist/{chunk-5XPELUES.js → chunk-GJX5N63V.js} +8 -2
  26. package/dist/chunk-GJX5N63V.js.map +1 -0
  27. package/dist/{chunk-XR7RAHZI.js → chunk-HZH6XXYK.js} +81 -9
  28. package/dist/chunk-HZH6XXYK.js.map +1 -0
  29. package/dist/{chunk-OMRFKG4M.js → chunk-KBWUO4P7.js} +3 -3
  30. package/dist/{chunk-OMRFKG4M.js.map → chunk-KBWUO4P7.js.map} +1 -1
  31. package/dist/{chunk-XRCK3BCF.cjs → chunk-M25N26II.cjs} +55 -10
  32. package/dist/chunk-M25N26II.cjs.map +1 -0
  33. package/dist/{chunk-PHCYQWJP.js → chunk-NCF5TAR6.js} +55 -10
  34. package/dist/chunk-NCF5TAR6.js.map +1 -0
  35. package/dist/{chunk-NUC5RV4P.cjs → chunk-NDKJW7RP.cjs} +4 -4
  36. package/dist/{chunk-NUC5RV4P.cjs.map → chunk-NDKJW7RP.cjs.map} +1 -1
  37. package/dist/{chunk-ED47NNIN.js → chunk-OXNJVQ2V.js} +3 -3
  38. package/dist/{chunk-ED47NNIN.js.map → chunk-OXNJVQ2V.js.map} +1 -1
  39. package/dist/{chunk-PWYASBX2.cjs → chunk-P5HAPDV3.cjs} +18 -18
  40. package/dist/{chunk-PWYASBX2.cjs.map → chunk-P5HAPDV3.cjs.map} +1 -1
  41. package/dist/{chunk-EUU5W7XR.js → chunk-TMYYALRF.js} +4 -4
  42. package/dist/{chunk-EUU5W7XR.js.map → chunk-TMYYALRF.js.map} +1 -1
  43. package/dist/{chunk-H322GC7M.js → chunk-VX3BIUGY.js} +5 -4
  44. package/dist/chunk-VX3BIUGY.js.map +1 -0
  45. package/dist/{chunk-VBCVQPQ4.js → chunk-WDKQQ7WL.js} +3 -3
  46. package/dist/{chunk-VBCVQPQ4.js.map → chunk-WDKQQ7WL.js.map} +1 -1
  47. package/dist/{chunk-KTNCB2IE.cjs → chunk-XMRDZRGV.cjs} +35 -35
  48. package/dist/{chunk-KTNCB2IE.cjs.map → chunk-XMRDZRGV.cjs.map} +1 -1
  49. package/dist/{chunk-7BWDATUZ.cjs → chunk-Y3TSRO3S.cjs} +125 -125
  50. package/dist/{chunk-7BWDATUZ.cjs.map → chunk-Y3TSRO3S.cjs.map} +1 -1
  51. package/dist/entries/assembly.cjs +29 -29
  52. package/dist/entries/assembly.d.cts +9 -0
  53. package/dist/entries/assembly.d.ts +9 -0
  54. package/dist/entries/assembly.js +6 -6
  55. package/dist/entries/catalog-packs.d.cts +4 -4
  56. package/dist/entries/catalog-packs.d.ts +4 -4
  57. package/dist/entries/doctrine.cjs +46 -46
  58. package/dist/entries/doctrine.js +1 -1
  59. package/dist/entries/person.d.cts +3 -3
  60. package/dist/entries/person.d.ts +3 -3
  61. package/dist/entries/picker-art.cjs +22 -22
  62. package/dist/entries/picker-art.d.cts +1 -1
  63. package/dist/entries/picker-art.d.ts +1 -1
  64. package/dist/entries/picker-art.js +2 -2
  65. package/dist/entries/picker-catalogs.cjs +57 -57
  66. package/dist/entries/picker-catalogs.d.cts +3 -3
  67. package/dist/entries/picker-catalogs.d.ts +3 -3
  68. package/dist/entries/picker-catalogs.js +5 -5
  69. package/dist/entries/pickers.cjs +383 -383
  70. package/dist/entries/pickers.js +3 -3
  71. package/dist/entries/presets.cjs +55 -35
  72. package/dist/entries/presets.d.cts +29 -1
  73. package/dist/entries/presets.d.ts +29 -1
  74. package/dist/entries/presets.js +1 -1
  75. package/dist/entries/prompt-builder.cjs +76 -76
  76. package/dist/entries/prompt-builder.js +5 -5
  77. package/dist/{images-ChAOLY5V.d.cts → images-BQ1jUWyZ.d.cts} +32 -3
  78. package/dist/{images-ChAOLY5V.d.ts → images-BQ1jUWyZ.d.ts} +32 -3
  79. package/dist/index.cjs +657 -637
  80. package/dist/index.d.cts +4 -4
  81. package/dist/index.d.ts +4 -4
  82. package/dist/index.js +12 -12
  83. package/dist/{picker-catalogs-DzLCu6qQ.d.cts → picker-catalogs-BuMGOVWC.d.cts} +1 -1
  84. package/dist/{picker-catalogs-SDSWrufc.d.ts → picker-catalogs-CVQopXwp.d.ts} +1 -1
  85. package/package.json +2 -2
  86. package/src/__tests__/doctrine-roster-completeness.test.ts +3 -0
  87. package/src/__tests__/factory-preset-previews.test.ts +38 -0
  88. package/src/__tests__/factory-preset-shelves.test.ts +30 -0
  89. package/src/__tests__/picker-art-images.test.ts +54 -0
  90. package/src/__tests__/seedance-extend.test.ts +37 -23
  91. package/src/__tests__/video-reference-features.test.ts +7 -5
  92. package/src/__tests__/video-reference-seatless-assets.test.ts +132 -0
  93. package/src/factory-presets/index.ts +4 -0
  94. package/src/factory-presets/preview-files.generated.ts +472 -0
  95. package/src/factory-presets/previews.ts +17 -2
  96. package/src/factory-presets/shelves.ts +50 -0
  97. package/src/picker-art/images.ts +39 -2
  98. package/src/picker-catalogs.ts +4 -2
  99. package/src/prompt-wizard-categories.ts +15 -3
  100. package/src/provider-prompt-doctrine.ts +44 -5
  101. package/src/seatless-assets.ts +141 -0
  102. package/src/video-reference-resolver.ts +31 -4
  103. package/dist/chunk-5XPELUES.js.map +0 -1
  104. package/dist/chunk-E5EKWWOO.cjs.map +0 -1
  105. package/dist/chunk-EKRO42T3.cjs.map +0 -1
  106. package/dist/chunk-FFPFBNXH.cjs.map +0 -1
  107. package/dist/chunk-GRSKB3P7.cjs.map +0 -1
  108. package/dist/chunk-H322GC7M.js.map +0 -1
  109. package/dist/chunk-PHCYQWJP.js.map +0 -1
  110. package/dist/chunk-WQ7FWGZ2.js.map +0 -1
  111. package/dist/chunk-XR7RAHZI.js.map +0 -1
  112. package/dist/chunk-XRCK3BCF.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wardrobe.ts","../src/character-motion-diagnostics.ts"],"names":["id","h"],"mappings":"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","file":"chunk-ED47NNIN.js","sourcesContent":["import { pickIds } from \"@nodaro/shared/catalogs\"\n\nexport type WardrobeDimension =\n | \"archetype\" | \"top\" | \"bottom\" | \"outerwear\" | \"footwear\"\n | \"headwear\" | \"accessories\" | \"color-palette\" | \"material\" | \"era\"\n\nexport interface WardrobeEntry {\n readonly id: string\n readonly label: string\n readonly dimension: WardrobeDimension\n readonly promptHint: string\n}\n\nexport interface WardrobeValue {\n archetype?: string\n top?: string\n bottom?: string\n outerwear?: string\n footwear?: string\n headwear?: string | ReadonlyArray<string>\n accessories?: string | ReadonlyArray<string>\n colorPalette?: string\n material?: string\n era?: string\n}\n\nexport const WARDROBE_DIMENSION_ORDER: ReadonlyArray<WardrobeDimension> = [\n \"archetype\", \"top\", \"bottom\", \"outerwear\", \"footwear\",\n \"headwear\", \"accessories\", \"color-palette\", \"material\", \"era\",\n]\n\nexport const WARDROBE_CATEGORY_LABELS: Readonly<Record<WardrobeDimension, string>> = {\n archetype: \"Archetype\", top: \"Top\", bottom: \"Bottom\", outerwear: \"Outerwear\",\n footwear: \"Footwear\", headwear: \"Headwear\", accessories: \"Accessories\",\n \"color-palette\": \"Color Palette\", material: \"Material\", era: \"Era\",\n}\n\nexport const WARDROBE_FIELD_BY_DIMENSION: Record<WardrobeDimension, keyof WardrobeValue> = {\n archetype: \"archetype\", top: \"top\", bottom: \"bottom\", outerwear: \"outerwear\",\n footwear: \"footwear\", headwear: \"headwear\", accessories: \"accessories\",\n \"color-palette\": \"colorPalette\", material: \"material\", era: \"era\",\n}\n\n/** Multi-pick dims emit each picked entry independently. */\nconst MULTI_PICK: ReadonlySet<WardrobeDimension> = new Set([\"headwear\", \"accessories\"])\n/** Sentinel ids that mean \"nothing here\" and emit no hint. */\nconst NONE_IDS: ReadonlySet<string> = new Set([\"wd-outer-none\"])\n\nexport const WARDROBE: ReadonlyArray<WardrobeEntry> = [\n // archetype\n { id: \"wd-casual\", label: \"Casual\", dimension: \"archetype\", promptHint: \"in casual everyday clothing\" },\n { id: \"wd-business\", label: \"Business\", dimension: \"archetype\", promptHint: \"in smart business attire\" },\n { id: \"wd-formal\", label: \"Formal\", dimension: \"archetype\", promptHint: \"in elegant formal wear\" },\n { id: \"wd-streetwear\", label: \"Streetwear\", dimension: \"archetype\", promptHint: \"in contemporary streetwear\" },\n { id: \"wd-athletic\", label: \"Athletic\", dimension: \"archetype\", promptHint: \"in athletic sportswear\" },\n { id: \"wd-fantasy\", label: \"Fantasy\", dimension: \"archetype\", promptHint: \"in fantasy costume\" },\n { id: \"wd-scifi\", label: \"Sci-Fi\", dimension: \"archetype\", promptHint: \"in futuristic sci-fi attire\" },\n { id: \"wd-historical\", label: \"Historical\", dimension: \"archetype\", promptHint: \"in period historical dress\" },\n { id: \"wd-uniform\", label: \"Uniform\", dimension: \"archetype\", promptHint: \"in a uniform\" },\n { id: \"wd-loungewear\", label: \"Loungewear\", dimension: \"archetype\", promptHint: \"in relaxed loungewear\" },\n // top\n { id: \"wd-tshirt\", label: \"T-Shirt\", dimension: \"top\", promptHint: \"wearing a t-shirt\" },\n { id: \"wd-blouse\", label: \"Blouse\", dimension: \"top\", promptHint: \"wearing a blouse\" },\n { id: \"wd-hoodie\", label: \"Hoodie\", dimension: \"top\", promptHint: \"wearing a hoodie\" },\n { id: \"wd-buttondown\", label: \"Button-down\", dimension: \"top\", promptHint: \"wearing a button-down shirt\" },\n { id: \"wd-tank\", label: \"Tank\", dimension: \"top\", promptHint: \"wearing a tank top\" },\n { id: \"wd-sweater\", label: \"Sweater\", dimension: \"top\", promptHint: \"wearing a sweater\" },\n { id: \"wd-turtleneck\", label: \"Turtleneck\", dimension: \"top\", promptHint: \"wearing a turtleneck\" },\n // bottom\n { id: \"wd-jeans\", label: \"Jeans\", dimension: \"bottom\", promptHint: \"wearing jeans\" },\n { id: \"wd-trousers\", label: \"Trousers\", dimension: \"bottom\", promptHint: \"wearing tailored trousers\" },\n { id: \"wd-skirt\", label: \"Skirt\", dimension: \"bottom\", promptHint: \"wearing a skirt\" },\n { id: \"wd-shorts\", label: \"Shorts\", dimension: \"bottom\", promptHint: \"wearing shorts\" },\n { id: \"wd-leggings\", label: \"Leggings\", dimension: \"bottom\", promptHint: \"wearing leggings\" },\n { id: \"wd-cargo\", label: \"Cargo\", dimension: \"bottom\", promptHint: \"wearing cargo pants\" },\n // outerwear\n { id: \"wd-outer-none\", label: \"None\", dimension: \"outerwear\", promptHint: \"\" },\n { id: \"wd-leatherjkt\", label: \"Leather Jacket\", dimension: \"outerwear\", promptHint: \"in a leather jacket\" },\n { id: \"wd-blazer\", label: \"Blazer\", dimension: \"outerwear\", promptHint: \"in a blazer\" },\n { id: \"wd-trench\", label: \"Trench Coat\", dimension: \"outerwear\", promptHint: \"in a trench coat\" },\n { id: \"wd-parka\", label: \"Parka\", dimension: \"outerwear\", promptHint: \"in a parka\" },\n { id: \"wd-cloak\", label: \"Cloak\", dimension: \"outerwear\", promptHint: \"in a flowing cloak\" },\n { id: \"wd-denimjkt\", label: \"Denim Jacket\", dimension: \"outerwear\", promptHint: \"in a denim jacket\" },\n { id: \"wd-cardigan\", label: \"Cardigan\", dimension: \"outerwear\", promptHint: \"in a cardigan\" },\n // footwear\n { id: \"wd-sneakers\", label: \"Sneakers\", dimension: \"footwear\", promptHint: \"wearing sneakers\" },\n { id: \"wd-boots\", label: \"Boots\", dimension: \"footwear\", promptHint: \"wearing boots\" },\n { id: \"wd-heels\", label: \"Heels\", dimension: \"footwear\", promptHint: \"wearing heels\" },\n { id: \"wd-sandals\", label: \"Sandals\", dimension: \"footwear\", promptHint: \"wearing sandals\" },\n { id: \"wd-dressshoe\", label: \"Dress Shoes\", dimension: \"footwear\", promptHint: \"wearing dress shoes\" },\n { id: \"wd-barefoot\", label: \"Barefoot\", dimension: \"footwear\", promptHint: \"barefoot\" },\n // headwear (multi)\n { id: \"wd-cap\", label: \"Cap\", dimension: \"headwear\", promptHint: \"wearing a cap\" },\n { id: \"wd-beanie\", label: \"Beanie\", dimension: \"headwear\", promptHint: \"wearing a beanie\" },\n { id: \"wd-widehat\", label: \"Wide-brim Hat\", dimension: \"headwear\", promptHint: \"wearing a wide-brim hat\" },\n { id: \"wd-hood\", label: \"Hood\", dimension: \"headwear\", promptHint: \"with the hood up\" },\n { id: \"wd-crown\", label: \"Crown\", dimension: \"headwear\", promptHint: \"wearing a crown\" },\n { id: \"wd-helmet\", label: \"Helmet\", dimension: \"headwear\", promptHint: \"wearing a helmet\" },\n // accessories (multi)\n { id: \"wd-glasses\", label: \"Glasses\", dimension: \"accessories\", promptHint: \"wearing glasses\" },\n { id: \"wd-sunglasses\", label: \"Sunglasses\", dimension: \"accessories\", promptHint: \"wearing sunglasses\" },\n { id: \"wd-scarf\", label: \"Scarf\", dimension: \"accessories\", promptHint: \"wearing a scarf\" },\n { id: \"wd-gloves\", label: \"Gloves\", dimension: \"accessories\", promptHint: \"wearing gloves\" },\n { id: \"wd-jewelry\", label: \"Jewelry\", dimension: \"accessories\", promptHint: \"wearing statement jewelry\" },\n { id: \"wd-belt\", label: \"Belt\", dimension: \"accessories\", promptHint: \"with a belt\" },\n { id: \"wd-watch\", label: \"Watch\", dimension: \"accessories\", promptHint: \"wearing a watch\" },\n // color-palette\n { id: \"wd-neutral\", label: \"Neutral\", dimension: \"color-palette\", promptHint: \"in a neutral color palette\" },\n { id: \"wd-all-black\", label: \"All Black\", dimension: \"color-palette\", promptHint: \"in an all-black palette\" },\n { id: \"wd-earth\", label: \"Earth Tones\", dimension: \"color-palette\", promptHint: \"in earth-tone colors\" },\n { id: \"wd-pastel\", label: \"Pastel\", dimension: \"color-palette\", promptHint: \"in pastel colors\" },\n { id: \"wd-jewel\", label: \"Jewel Tones\", dimension: \"color-palette\", promptHint: \"in rich jewel-tone colors\" },\n { id: \"wd-neon\", label: \"Neon\", dimension: \"color-palette\", promptHint: \"in vivid neon colors\" },\n { id: \"wd-all-white\", label: \"All White\", dimension: \"color-palette\", promptHint: \"in an all-white palette\" },\n // material\n { id: \"wd-cotton\", label: \"Cotton\", dimension: \"material\", promptHint: \"in cotton fabric\" },\n { id: \"wd-denim\", label: \"Denim\", dimension: \"material\", promptHint: \"in denim\" },\n { id: \"wd-leather\", label: \"Leather\", dimension: \"material\", promptHint: \"in leather\" },\n { id: \"wd-silk\", label: \"Silk\", dimension: \"material\", promptHint: \"in silk\" },\n { id: \"wd-wool\", label: \"Wool\", dimension: \"material\", promptHint: \"in wool\" },\n { id: \"wd-latex\", label: \"Latex\", dimension: \"material\", promptHint: \"in latex\" },\n { id: \"wd-linen\", label: \"Linen\", dimension: \"material\", promptHint: \"in linen\" },\n // era\n { id: \"wd-contemporary\", label: \"Contemporary\", dimension: \"era\", promptHint: \"in contemporary fashion\" },\n { id: \"wd-1920s\", label: \"1920s\", dimension: \"era\", promptHint: \"in 1920s fashion\" },\n { id: \"wd-1950s\", label: \"1950s\", dimension: \"era\", promptHint: \"in 1950s fashion\" },\n { id: \"wd-1980s\", label: \"1980s\", dimension: \"era\", promptHint: \"in 1980s fashion\" },\n { id: \"wd-victorian\", label: \"Victorian\", dimension: \"era\", promptHint: \"in Victorian-era dress\" },\n { id: \"wd-medieval\", label: \"Medieval\", dimension: \"era\", promptHint: \"in medieval dress\" },\n { id: \"wd-futuristic\", label: \"Futuristic\", dimension: \"era\", promptHint: \"in futuristic clothing\" },\n] as const\n\nconst BY_ID: Map<string, WardrobeEntry> = new Map(WARDROBE.map((e) => [e.id, e]))\n\n/** Entries grouped by dimension — precomputed once so per-dimension lookups\n * (the picker calls one per dimension per render) are O(1) with stable array\n * refs, instead of a full WARDROBE scan each call. */\nconst BY_DIMENSION: Map<WardrobeDimension, WardrobeEntry[]> = (() => {\n const map = new Map<WardrobeDimension, WardrobeEntry[]>()\n for (const e of WARDROBE) {\n const list = map.get(e.dimension)\n if (list) list.push(e)\n else map.set(e.dimension, [e])\n }\n return map\n})()\n\nexport function getWardrobeEntry(id: string | undefined | null): WardrobeEntry | undefined {\n return id ? BY_ID.get(id) : undefined\n}\n\nexport function getWardrobePromptHint(id: string | undefined | null): string {\n return getWardrobeEntry(id)?.promptHint ?? \"\"\n}\n\nexport function getWardrobeEntriesByDimension(dim: WardrobeDimension): WardrobeEntry[] {\n return BY_DIMENSION.get(dim) ?? []\n}\n\nexport function buildWardrobeHints(value: Record<string, unknown> & WardrobeValue): string[] {\n const hints: string[] = []\n for (const dimension of WARDROBE_DIMENSION_ORDER) {\n const field = WARDROBE_FIELD_BY_DIMENSION[dimension]\n const raw = value[field]\n if (MULTI_PICK.has(dimension)) {\n for (const id of pickIds(raw)) {\n if (NONE_IDS.has(id)) continue\n const h = getWardrobePromptHint(id)\n if (h) hints.push(h)\n }\n continue\n }\n const id = typeof raw === \"string\" ? raw : undefined\n if (!id || NONE_IDS.has(id)) continue\n const h = getWardrobePromptHint(id)\n if (h) hints.push(h)\n }\n return hints\n}\n","import { getCharacterMotion, CHARACTER_MOTION_MAX_PICKS, type CharacterMotionTiming } from \"./character-motion.js\"\n\nexport interface CharacterMotionDiagnostic {\n readonly code: \"unknown\" | \"omitted\" | \"retired\" | \"pose\" | \"visibility\" | \"hands\" | \"pace\" | \"requirements\" | \"compound\" | \"capacity\" | \"multiple-targets\" | \"roles\"\n readonly severity: \"error\" | \"warning\" | \"info\"\n readonly ids: readonly string[]\n readonly message: string\n}\nexport interface CharacterMotionBindings {\n readonly selfPairing?: boolean\n readonly subjectMinor?: boolean\n readonly partnerNames?: readonly string[]\n readonly targetNames?: readonly string[]\n}\n\n/** Shared by editor, API clients and local review. Missing metadata means\n * unknown; this never certifies a sequence or predicts clip duration. */\nexport function getCharacterMotionDiagnostics(\n value: string | readonly string[] | null | undefined,\n timing?: CharacterMotionTiming,\n bindings: CharacterMotionBindings = {},\n): readonly CharacterMotionDiagnostic[] {\n const requested = typeof value === \"string\" ? [value] : Array.isArray(value) ? [...new Set(value)] : []\n const result: CharacterMotionDiagnostic[] = []\n const add = (code: CharacterMotionDiagnostic[\"code\"], severity: CharacterMotionDiagnostic[\"severity\"], ids: readonly string[], message: string) => result.push({ code, severity, ids, message })\n if (requested.length > CHARACTER_MOTION_MAX_PICKS) add(\"capacity\", \"warning\", requested, \"Only the first three selections contribute. Remove extra selections.\")\n const picks = requested.slice(0, CHARACTER_MOTION_MAX_PICKS)\n for (const id of picks) if (!getCharacterMotion(id)) add(\"unknown\", \"error\", [id], `Motion “${id}” is unavailable and contributes no fragment. Remove or replace it.`)\n const entries = picks.flatMap(id => { const entry = getCharacterMotion(id); return entry?.promptHint ? [entry] : [] })\n const active = entries.filter(e => !bindings.subjectMinor || !e.adultOnly)\n if (bindings.selfPairing && active.some(e => e.twoPerson || e.counterpart)) add(\"roles\", \"error\", active.filter(e => e.twoPerson || e.counterpart).map(e => e.id), \"The same reference is connected as Target and Partner. Connect distinct participants before running this interaction.\")\n const omitted = entries.filter(e => bindings.subjectMinor && e.adultOnly)\n if (omitted.length) add(\"omitted\", active.length ? \"warning\" : \"error\", omitted.map(e => e.id), `${omitted.map(e => e.label).join(\", \")} omitted for a connected minor. ${active.length ? \"Replace these selections.\" : \"No selected motion contributes a fragment.\"}`)\n if ((bindings.targetNames?.length ?? 0) > 1) add(\"multiple-targets\", \"warning\", picks, \"Each target performs a separate copy of the sequence. Use separate motion nodes for coordinated choreography.\")\n for (const entry of active) {\n if (entry.deprecated) add(\"retired\", \"warning\", [entry.id], `${entry.label} is retired from new choices but still resolves in saved workflows.${entry.replacementId ? ` Use ${getCharacterMotion(entry.replacementId)?.label ?? entry.replacementId}.` : \"\"}`)\n if (entry.fixedPace && timing?.pace && timing.pace !== \"auto\") add(\"pace\", \"warning\", [entry.id], `${entry.label} sets its own timing. Set Pace to Auto or replace the motion.`)\n if (entry.requires?.length) add(\"requirements\", \"info\", [entry.id], `${entry.label} requires: ${entry.requires.join(\", \")}.${entry.twoPerson || entry.counterpart ? bindings.partnerNames?.length ? ` Partner reference: ${bindings.partnerNames.join(\", \")}; confirm it matches the required recipient.` : \" Connect a Partner reference to identify the recipient; otherwise the model chooses it.\" : \" Establish these in the scene or prompt; the fragment does not supply reference media.\"}`)\n }\n for (let i = 1; i < active.length; i++) {\n const before = active[i - 1]!, after = active[i]!, ids = [before.id, after.id]\n if (before.endVisibility === \"out-of-frame\") add(\"visibility\", \"warning\", ids, `${before.label} ends out of view before ${after.label}. Reorder or add an entrance.`)\n if (before.endPose && after.startPose && before.endPose !== \"any\" && after.startPose !== \"any\" && before.endPose !== after.startPose) add(\"pose\", \"warning\", ids, `${before.label} ends ${before.endPose}; ${after.label} starts ${after.startPose}. Add a transition or replace a motion.`)\n if (before.handsAfter && before.handsAfter !== \"free\" && after.needsFreeHands) add(\"hands\", \"warning\", ids, `${before.label} leaves hands occupied; ${after.label} needs free hands. Add a release first.`)\n }\n const compound = active.filter(e => e.kind === \"compound\")\n if (compound.length) add(\"compound\", \"warning\", compound.map(e => e.id), `${compound.length} selection${compound.length === 1 ? \" is\" : \"s are\"} compound choreography. Short clips may not fit every phase; test the sequence before adding more actions.`)\n return result\n}\n"]}
1
+ {"version":3,"sources":["../src/wardrobe.ts","../src/character-motion-diagnostics.ts"],"names":["id","h"],"mappings":";;;AA0BO,IAAM,wBAAA,GAA6D;AAAA,EACxE,WAAA;AAAA,EAAa,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,WAAA;AAAA,EAAa,UAAA;AAAA,EAC3C,UAAA;AAAA,EAAY,aAAA;AAAA,EAAe,eAAA;AAAA,EAAiB,UAAA;AAAA,EAAY;AAC1D;AAEO,IAAM,wBAAA,GAAwE;AAAA,EACnF,SAAA,EAAW,WAAA;AAAA,EAAa,GAAA,EAAK,KAAA;AAAA,EAAO,MAAA,EAAQ,QAAA;AAAA,EAAU,SAAA,EAAW,WAAA;AAAA,EACjE,QAAA,EAAU,UAAA;AAAA,EAAY,QAAA,EAAU,UAAA;AAAA,EAAY,WAAA,EAAa,aAAA;AAAA,EACzD,eAAA,EAAiB,eAAA;AAAA,EAAiB,QAAA,EAAU,UAAA;AAAA,EAAY,GAAA,EAAK;AAC/D;AAEO,IAAM,2BAAA,GAA8E;AAAA,EACzF,SAAA,EAAW,WAAA;AAAA,EAAa,GAAA,EAAK,KAAA;AAAA,EAAO,MAAA,EAAQ,QAAA;AAAA,EAAU,SAAA,EAAW,WAAA;AAAA,EACjE,QAAA,EAAU,UAAA;AAAA,EAAY,QAAA,EAAU,UAAA;AAAA,EAAY,WAAA,EAAa,aAAA;AAAA,EACzD,eAAA,EAAiB,cAAA;AAAA,EAAgB,QAAA,EAAU,UAAA;AAAA,EAAY,GAAA,EAAK;AAC9D;AAGA,IAAM,6BAA6C,IAAI,GAAA,CAAI,CAAC,UAAA,EAAY,aAAa,CAAC,CAAA;AAEtF,IAAM,QAAA,mBAAgC,IAAI,GAAA,CAAI,CAAC,eAAe,CAAC,CAAA;AAExD,IAAM,QAAA,GAAyC;AAAA;AAAA,EAEpD,EAAE,IAAI,WAAA,EAAiB,KAAA,EAAO,UAAc,SAAA,EAAW,WAAA,EAAa,YAAY,6BAAA,EAA8B;AAAA,EAC9G,EAAE,IAAI,aAAA,EAAiB,KAAA,EAAO,YAAc,SAAA,EAAW,WAAA,EAAa,YAAY,0BAAA,EAA2B;AAAA,EAC3G,EAAE,IAAI,WAAA,EAAiB,KAAA,EAAO,UAAc,SAAA,EAAW,WAAA,EAAa,YAAY,wBAAA,EAAyB;AAAA,EACzG,EAAE,IAAI,eAAA,EAAiB,KAAA,EAAO,cAAc,SAAA,EAAW,WAAA,EAAa,YAAY,4BAAA,EAA6B;AAAA,EAC7G,EAAE,IAAI,aAAA,EAAiB,KAAA,EAAO,YAAc,SAAA,EAAW,WAAA,EAAa,YAAY,wBAAA,EAAyB;AAAA,EACzG,EAAE,IAAI,YAAA,EAAiB,KAAA,EAAO,WAAc,SAAA,EAAW,WAAA,EAAa,YAAY,oBAAA,EAAqB;AAAA,EACrG,EAAE,IAAI,UAAA,EAAiB,KAAA,EAAO,UAAc,SAAA,EAAW,WAAA,EAAa,YAAY,6BAAA,EAA8B;AAAA,EAC9G,EAAE,IAAI,eAAA,EAAiB,KAAA,EAAO,cAAc,SAAA,EAAW,WAAA,EAAa,YAAY,4BAAA,EAA6B;AAAA,EAC7G,EAAE,IAAI,YAAA,EAAiB,KAAA,EAAO,WAAc,SAAA,EAAW,WAAA,EAAa,YAAY,cAAA,EAAe;AAAA,EAC/F,EAAE,IAAI,eAAA,EAAiB,KAAA,EAAO,cAAc,SAAA,EAAW,WAAA,EAAa,YAAY,uBAAA,EAAwB;AAAA;AAAA,EAExG,EAAE,IAAI,WAAA,EAAiB,KAAA,EAAO,WAAe,SAAA,EAAW,KAAA,EAAO,YAAY,mBAAA,EAAoB;AAAA,EAC/F,EAAE,IAAI,WAAA,EAAiB,KAAA,EAAO,UAAe,SAAA,EAAW,KAAA,EAAO,YAAY,kBAAA,EAAmB;AAAA,EAC9F,EAAE,IAAI,WAAA,EAAiB,KAAA,EAAO,UAAe,SAAA,EAAW,KAAA,EAAO,YAAY,kBAAA,EAAmB;AAAA,EAC9F,EAAE,IAAI,eAAA,EAAiB,KAAA,EAAO,eAAe,SAAA,EAAW,KAAA,EAAO,YAAY,6BAAA,EAA8B;AAAA,EACzG,EAAE,IAAI,SAAA,EAAiB,KAAA,EAAO,QAAe,SAAA,EAAW,KAAA,EAAO,YAAY,oBAAA,EAAqB;AAAA,EAChG,EAAE,IAAI,YAAA,EAAiB,KAAA,EAAO,WAAe,SAAA,EAAW,KAAA,EAAO,YAAY,mBAAA,EAAoB;AAAA,EAC/F,EAAE,IAAI,eAAA,EAAiB,KAAA,EAAO,cAAe,SAAA,EAAW,KAAA,EAAO,YAAY,sBAAA,EAAuB;AAAA;AAAA,EAElG,EAAE,IAAI,UAAA,EAAe,KAAA,EAAO,SAAY,SAAA,EAAW,QAAA,EAAU,YAAY,eAAA,EAAgB;AAAA,EACzF,EAAE,IAAI,aAAA,EAAe,KAAA,EAAO,YAAY,SAAA,EAAW,QAAA,EAAU,YAAY,2BAAA,EAA4B;AAAA,EACrG,EAAE,IAAI,UAAA,EAAe,KAAA,EAAO,SAAY,SAAA,EAAW,QAAA,EAAU,YAAY,iBAAA,EAAkB;AAAA,EAC3F,EAAE,IAAI,WAAA,EAAe,KAAA,EAAO,UAAY,SAAA,EAAW,QAAA,EAAU,YAAY,gBAAA,EAAiB;AAAA,EAC1F,EAAE,IAAI,aAAA,EAAe,KAAA,EAAO,YAAY,SAAA,EAAW,QAAA,EAAU,YAAY,kBAAA,EAAmB;AAAA,EAC5F,EAAE,IAAI,UAAA,EAAe,KAAA,EAAO,SAAY,SAAA,EAAW,QAAA,EAAU,YAAY,qBAAA,EAAsB;AAAA;AAAA,EAE/F,EAAE,IAAI,eAAA,EAAkB,KAAA,EAAO,QAAgB,SAAA,EAAW,WAAA,EAAa,YAAY,EAAA,EAAG;AAAA,EACtF,EAAE,IAAI,eAAA,EAAkB,KAAA,EAAO,kBAAkB,SAAA,EAAW,WAAA,EAAa,YAAY,qBAAA,EAAsB;AAAA,EAC3G,EAAE,IAAI,WAAA,EAAkB,KAAA,EAAO,UAAgB,SAAA,EAAW,WAAA,EAAa,YAAY,aAAA,EAAc;AAAA,EACjG,EAAE,IAAI,WAAA,EAAkB,KAAA,EAAO,eAAgB,SAAA,EAAW,WAAA,EAAa,YAAY,kBAAA,EAAmB;AAAA,EACtG,EAAE,IAAI,UAAA,EAAkB,KAAA,EAAO,SAAgB,SAAA,EAAW,WAAA,EAAa,YAAY,YAAA,EAAa;AAAA,EAChG,EAAE,IAAI,UAAA,EAAkB,KAAA,EAAO,SAAgB,SAAA,EAAW,WAAA,EAAa,YAAY,oBAAA,EAAqB;AAAA,EACxG,EAAE,IAAI,aAAA,EAAkB,KAAA,EAAO,gBAAgB,SAAA,EAAW,WAAA,EAAa,YAAY,mBAAA,EAAoB;AAAA,EACvG,EAAE,IAAI,aAAA,EAAkB,KAAA,EAAO,YAAgB,SAAA,EAAW,WAAA,EAAa,YAAY,eAAA,EAAgB;AAAA;AAAA,EAEnG,EAAE,IAAI,aAAA,EAAgB,KAAA,EAAO,YAAc,SAAA,EAAW,UAAA,EAAY,YAAY,kBAAA,EAAmB;AAAA,EACjG,EAAE,IAAI,UAAA,EAAgB,KAAA,EAAO,SAAc,SAAA,EAAW,UAAA,EAAY,YAAY,eAAA,EAAgB;AAAA,EAC9F,EAAE,IAAI,UAAA,EAAgB,KAAA,EAAO,SAAc,SAAA,EAAW,UAAA,EAAY,YAAY,eAAA,EAAgB;AAAA,EAC9F,EAAE,IAAI,YAAA,EAAgB,KAAA,EAAO,WAAc,SAAA,EAAW,UAAA,EAAY,YAAY,iBAAA,EAAkB;AAAA,EAChG,EAAE,IAAI,cAAA,EAAgB,KAAA,EAAO,eAAe,SAAA,EAAW,UAAA,EAAY,YAAY,qBAAA,EAAsB;AAAA,EACrG,EAAE,IAAI,aAAA,EAAgB,KAAA,EAAO,YAAc,SAAA,EAAW,UAAA,EAAY,YAAY,UAAA,EAAW;AAAA;AAAA,EAEzF,EAAE,IAAI,QAAA,EAAe,KAAA,EAAO,OAAY,SAAA,EAAW,UAAA,EAAY,YAAY,eAAA,EAAgB;AAAA,EAC3F,EAAE,IAAI,WAAA,EAAe,KAAA,EAAO,UAAY,SAAA,EAAW,UAAA,EAAY,YAAY,kBAAA,EAAmB;AAAA,EAC9F,EAAE,IAAI,YAAA,EAAe,KAAA,EAAO,iBAAiB,SAAA,EAAW,UAAA,EAAY,YAAY,yBAAA,EAA0B;AAAA,EAC1G,EAAE,IAAI,SAAA,EAAe,KAAA,EAAO,QAAY,SAAA,EAAW,UAAA,EAAY,YAAY,kBAAA,EAAmB;AAAA,EAC9F,EAAE,IAAI,UAAA,EAAe,KAAA,EAAO,SAAY,SAAA,EAAW,UAAA,EAAY,YAAY,iBAAA,EAAkB;AAAA,EAC7F,EAAE,IAAI,WAAA,EAAe,KAAA,EAAO,UAAY,SAAA,EAAW,UAAA,EAAY,YAAY,kBAAA,EAAmB;AAAA;AAAA,EAE9F,EAAE,IAAI,YAAA,EAAgB,KAAA,EAAO,WAAa,SAAA,EAAW,aAAA,EAAe,YAAY,iBAAA,EAAkB;AAAA,EAClG,EAAE,IAAI,eAAA,EAAiB,KAAA,EAAO,cAAc,SAAA,EAAW,aAAA,EAAe,YAAY,oBAAA,EAAqB;AAAA,EACvG,EAAE,IAAI,UAAA,EAAgB,KAAA,EAAO,SAAa,SAAA,EAAW,aAAA,EAAe,YAAY,iBAAA,EAAkB;AAAA,EAClG,EAAE,IAAI,WAAA,EAAgB,KAAA,EAAO,UAAa,SAAA,EAAW,aAAA,EAAe,YAAY,gBAAA,EAAiB;AAAA,EACjG,EAAE,IAAI,YAAA,EAAgB,KAAA,EAAO,WAAa,SAAA,EAAW,aAAA,EAAe,YAAY,2BAAA,EAA4B;AAAA,EAC5G,EAAE,IAAI,SAAA,EAAgB,KAAA,EAAO,QAAa,SAAA,EAAW,aAAA,EAAe,YAAY,aAAA,EAAc;AAAA,EAC9F,EAAE,IAAI,UAAA,EAAgB,KAAA,EAAO,SAAa,SAAA,EAAW,aAAA,EAAe,YAAY,iBAAA,EAAkB;AAAA;AAAA,EAElG,EAAE,IAAI,YAAA,EAAgB,KAAA,EAAO,WAAa,SAAA,EAAW,eAAA,EAAiB,YAAY,4BAAA,EAA6B;AAAA,EAC/G,EAAE,IAAI,cAAA,EAAgB,KAAA,EAAO,aAAa,SAAA,EAAW,eAAA,EAAiB,YAAY,yBAAA,EAA0B;AAAA,EAC5G,EAAE,IAAI,UAAA,EAAgB,KAAA,EAAO,eAAe,SAAA,EAAW,eAAA,EAAiB,YAAY,sBAAA,EAAuB;AAAA,EAC3G,EAAE,IAAI,WAAA,EAAgB,KAAA,EAAO,UAAa,SAAA,EAAW,eAAA,EAAiB,YAAY,kBAAA,EAAmB;AAAA,EACrG,EAAE,IAAI,UAAA,EAAgB,KAAA,EAAO,eAAe,SAAA,EAAW,eAAA,EAAiB,YAAY,2BAAA,EAA4B;AAAA,EAChH,EAAE,IAAI,SAAA,EAAgB,KAAA,EAAO,QAAa,SAAA,EAAW,eAAA,EAAiB,YAAY,sBAAA,EAAuB;AAAA,EACzG,EAAE,IAAI,cAAA,EAAgB,KAAA,EAAO,aAAa,SAAA,EAAW,eAAA,EAAiB,YAAY,yBAAA,EAA0B;AAAA;AAAA,EAE5G,EAAE,IAAI,WAAA,EAAc,KAAA,EAAO,UAAW,SAAA,EAAW,UAAA,EAAY,YAAY,kBAAA,EAAmB;AAAA,EAC5F,EAAE,IAAI,UAAA,EAAc,KAAA,EAAO,SAAW,SAAA,EAAW,UAAA,EAAY,YAAY,UAAA,EAAW;AAAA,EACpF,EAAE,IAAI,YAAA,EAAc,KAAA,EAAO,WAAW,SAAA,EAAW,UAAA,EAAY,YAAY,YAAA,EAAa;AAAA,EACtF,EAAE,IAAI,SAAA,EAAc,KAAA,EAAO,QAAW,SAAA,EAAW,UAAA,EAAY,YAAY,SAAA,EAAU;AAAA,EACnF,EAAE,IAAI,SAAA,EAAc,KAAA,EAAO,QAAW,SAAA,EAAW,UAAA,EAAY,YAAY,SAAA,EAAU;AAAA,EACnF,EAAE,IAAI,UAAA,EAAc,KAAA,EAAO,SAAW,SAAA,EAAW,UAAA,EAAY,YAAY,UAAA,EAAW;AAAA,EACpF,EAAE,IAAI,UAAA,EAAc,KAAA,EAAO,SAAW,SAAA,EAAW,UAAA,EAAY,YAAY,UAAA,EAAW;AAAA;AAAA,EAEpF,EAAE,IAAI,iBAAA,EAAmB,KAAA,EAAO,gBAAgB,SAAA,EAAW,KAAA,EAAO,YAAY,yBAAA,EAA0B;AAAA,EACxG,EAAE,IAAI,UAAA,EAAY,KAAA,EAAO,SAAa,SAAA,EAAW,KAAA,EAAO,YAAY,kBAAA,EAAmB;AAAA,EACvF,EAAE,IAAI,UAAA,EAAY,KAAA,EAAO,SAAa,SAAA,EAAW,KAAA,EAAO,YAAY,kBAAA,EAAmB;AAAA,EACvF,EAAE,IAAI,UAAA,EAAY,KAAA,EAAO,SAAa,SAAA,EAAW,KAAA,EAAO,YAAY,kBAAA,EAAmB;AAAA,EACvF,EAAE,IAAI,cAAA,EAAgB,KAAA,EAAO,aAAa,SAAA,EAAW,KAAA,EAAO,YAAY,wBAAA,EAAyB;AAAA,EACjG,EAAE,IAAI,aAAA,EAAe,KAAA,EAAO,YAAY,SAAA,EAAW,KAAA,EAAO,YAAY,mBAAA,EAAoB;AAAA,EAC1F,EAAE,IAAI,eAAA,EAAiB,KAAA,EAAO,cAAc,SAAA,EAAW,KAAA,EAAO,YAAY,wBAAA;AAC5E;AAEA,IAAM,KAAA,GAAoC,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAKhF,IAAM,gBAAyD,MAAM;AACnE,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAwC;AACxD,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,SAAS,CAAA;AAChC,IAAA,IAAI,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAAA,aACZ,GAAA,CAAI,CAAA,CAAE,SAAA,EAAW,CAAC,CAAC,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,GAAA;AACT,CAAA,GAAG;AAEI,SAAS,iBAAiB,EAAA,EAA0D;AACzF,EAAA,OAAO,EAAA,GAAK,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,GAAI,MAAA;AAC9B;AAEO,SAAS,sBAAsB,EAAA,EAAuC;AAC3E,EAAA,OAAO,gBAAA,CAAiB,EAAE,CAAA,EAAG,UAAA,IAAc,EAAA;AAC7C;AAEO,SAAS,8BAA8B,GAAA,EAAyC;AACrF,EAAA,OAAO,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,IAAK,EAAC;AACnC;AAEO,SAAS,mBAAmB,KAAA,EAA0D;AAC3F,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,aAAa,wBAAA,EAA0B;AAChD,IAAA,MAAM,KAAA,GAAQ,4BAA4B,SAAS,CAAA;AACnD,IAAA,MAAM,GAAA,GAAM,MAAM,KAAK,CAAA;AACvB,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7B,MAAA,KAAA,MAAWA,GAAAA,IAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC7B,QAAA,IAAI,QAAA,CAAS,GAAA,CAAIA,GAAE,CAAA,EAAG;AACtB,QAAA,MAAMC,EAAAA,GAAI,sBAAsBD,GAAE,CAAA;AAClC,QAAA,IAAIC,EAAAA,EAAG,KAAA,CAAM,IAAA,CAAKA,EAAC,CAAA;AAAA,MACrB;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,MAAA;AAC3C,IAAA,IAAI,CAAC,EAAA,IAAM,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA,EAAG;AAC7B,IAAA,MAAM,CAAA,GAAI,sBAAsB,EAAE,CAAA;AAClC,IAAA,IAAI,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,KAAA;AACT;;;ACjKO,SAAS,6BAAA,CACd,KAAA,EACA,MAAA,EACA,QAAA,GAAoC,EAAC,EACC;AACtC,EAAA,MAAM,YAAY,OAAO,KAAA,KAAU,WAAW,CAAC,KAAK,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,EAAC;AACtG,EAAA,MAAM,SAAsC,EAAC;AAC7C,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,EAAyC,QAAA,EAAiD,GAAA,EAAwB,OAAA,KAAoB,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,GAAA,EAAK,SAAS,CAAA;AAC/L,EAAA,IAAI,UAAU,MAAA,GAAS,0BAAA,MAAgC,UAAA,EAAY,SAAA,EAAW,WAAW,sEAAsE,CAAA;AAC/J,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,0BAA0B,CAAA;AAC3D,EAAA,KAAA,MAAW,EAAA,IAAM,KAAA,EAAO,IAAI,CAAC,mBAAmB,EAAE,CAAA,EAAG,GAAA,CAAI,SAAA,EAAW,SAAS,CAAC,EAAE,CAAA,EAAG,CAAA,aAAA,EAAW,EAAE,CAAA,wEAAA,CAAqE,CAAA;AACrK,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAA,KAAM;AAAE,IAAA,MAAM,KAAA,GAAQ,mBAAmB,EAAE,CAAA;AAAG,IAAA,OAAO,KAAA,EAAO,UAAA,GAAa,CAAC,KAAK,IAAI,EAAC;AAAA,EAAE,CAAC,CAAA;AACrH,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,QAAA,CAAS,YAAA,IAAgB,CAAC,CAAA,CAAE,SAAS,CAAA;AACzE,EAAA,IAAI,QAAA,CAAS,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,WAAW,CAAA,EAAG,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,OAAO,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,WAAW,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAA,EAAG,uHAAuH,CAAA;AAC1R,EAAA,MAAM,UAAU,OAAA,CAAQ,MAAA,CAAO,OAAK,QAAA,CAAS,YAAA,IAAgB,EAAE,SAAS,CAAA;AACxE,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,MAAA,GAAS,SAAA,GAAY,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAA,EAAG,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,gCAAA,EAAmC,MAAA,CAAO,MAAA,GAAS,2BAAA,GAA8B,4CAA4C,CAAA,CAAE,CAAA;AACtQ,EAAA,IAAA,CAAK,QAAA,CAAS,aAAa,MAAA,IAAU,CAAA,IAAK,GAAG,GAAA,CAAI,kBAAA,EAAoB,SAAA,EAAW,KAAA,EAAO,+GAA+G,CAAA;AACtM,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,KAAA,CAAM,UAAA,EAAY,GAAA,CAAI,SAAA,EAAW,SAAA,EAAW,CAAC,KAAA,CAAM,EAAE,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,KAAK,sEAAsE,KAAA,CAAM,aAAA,GAAgB,CAAA,KAAA,EAAQ,kBAAA,CAAmB,KAAA,CAAM,aAAa,CAAA,EAAG,KAAA,IAAS,KAAA,CAAM,aAAa,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AAC7P,IAAA,IAAI,MAAM,SAAA,IAAa,MAAA,EAAQ,IAAA,IAAQ,MAAA,CAAO,SAAS,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,SAAA,EAAW,CAAC,KAAA,CAAM,EAAE,GAAG,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,6DAAA,CAA+D,CAAA;AAC/K,IAAA,IAAI,MAAM,QAAA,EAAU,MAAA,EAAQ,GAAA,CAAI,cAAA,EAAgB,QAAQ,CAAC,KAAA,CAAM,EAAE,CAAA,EAAG,GAAG,KAAA,CAAM,KAAK,CAAA,WAAA,EAAc,KAAA,CAAM,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM,SAAA,IAAa,KAAA,CAAM,WAAA,GAAc,QAAA,CAAS,cAAc,MAAA,GAAS,CAAA,oBAAA,EAAuB,QAAA,CAAS,YAAA,CAAa,KAAK,IAAI,CAAC,CAAA,4CAAA,CAAA,GAAiD,yFAAA,GAA4F,wFAAwF,CAAA,CAAE,CAAA;AAAA,EACpe;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,CAAA,GAAI,CAAC,GAAI,KAAA,GAAQ,MAAA,CAAO,CAAC,CAAA,EAAI,GAAA,GAAM,CAAC,MAAA,CAAO,EAAA,EAAI,MAAM,EAAE,CAAA;AAC7E,IAAA,IAAI,MAAA,CAAO,aAAA,KAAkB,cAAA,EAAgB,GAAA,CAAI,YAAA,EAAc,SAAA,EAAW,GAAA,EAAK,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,yBAAA,EAA4B,KAAA,CAAM,KAAK,CAAA,6BAAA,CAA+B,CAAA;AACpK,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,KAAA,CAAM,SAAA,IAAa,MAAA,CAAO,OAAA,KAAY,KAAA,IAAS,KAAA,CAAM,SAAA,KAAc,KAAA,IAAS,MAAA,CAAO,OAAA,KAAY,MAAM,SAAA,EAAW,GAAA,CAAI,MAAA,EAAQ,SAAA,EAAW,GAAA,EAAK,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,MAAA,EAAS,MAAA,CAAO,OAAO,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,KAAA,CAAM,SAAS,CAAA,uCAAA,CAAyC,CAAA;AAC3R,IAAA,IAAI,OAAO,UAAA,IAAc,MAAA,CAAO,UAAA,KAAe,MAAA,IAAU,MAAM,cAAA,EAAgB,GAAA,CAAI,OAAA,EAAS,SAAA,EAAW,KAAK,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,wBAAA,EAA2B,KAAA,CAAM,KAAK,CAAA,uCAAA,CAAyC,CAAA;AAAA,EAC5M;AACA,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AACzD,EAAA,IAAI,QAAA,CAAS,QAAQ,GAAA,CAAI,UAAA,EAAY,WAAW,QAAA,CAAS,GAAA,CAAI,OAAK,CAAA,CAAE,EAAE,GAAG,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,UAAA,EAAa,QAAA,CAAS,WAAW,CAAA,GAAI,KAAA,GAAQ,OAAO,CAAA,0GAAA,CAA4G,CAAA;AAC3P,EAAA,OAAO,MAAA;AACT","file":"chunk-OXNJVQ2V.js","sourcesContent":["import { pickIds } from \"@nodaro/shared/catalogs\"\n\nexport type WardrobeDimension =\n | \"archetype\" | \"top\" | \"bottom\" | \"outerwear\" | \"footwear\"\n | \"headwear\" | \"accessories\" | \"color-palette\" | \"material\" | \"era\"\n\nexport interface WardrobeEntry {\n readonly id: string\n readonly label: string\n readonly dimension: WardrobeDimension\n readonly promptHint: string\n}\n\nexport interface WardrobeValue {\n archetype?: string\n top?: string\n bottom?: string\n outerwear?: string\n footwear?: string\n headwear?: string | ReadonlyArray<string>\n accessories?: string | ReadonlyArray<string>\n colorPalette?: string\n material?: string\n era?: string\n}\n\nexport const WARDROBE_DIMENSION_ORDER: ReadonlyArray<WardrobeDimension> = [\n \"archetype\", \"top\", \"bottom\", \"outerwear\", \"footwear\",\n \"headwear\", \"accessories\", \"color-palette\", \"material\", \"era\",\n]\n\nexport const WARDROBE_CATEGORY_LABELS: Readonly<Record<WardrobeDimension, string>> = {\n archetype: \"Archetype\", top: \"Top\", bottom: \"Bottom\", outerwear: \"Outerwear\",\n footwear: \"Footwear\", headwear: \"Headwear\", accessories: \"Accessories\",\n \"color-palette\": \"Color Palette\", material: \"Material\", era: \"Era\",\n}\n\nexport const WARDROBE_FIELD_BY_DIMENSION: Record<WardrobeDimension, keyof WardrobeValue> = {\n archetype: \"archetype\", top: \"top\", bottom: \"bottom\", outerwear: \"outerwear\",\n footwear: \"footwear\", headwear: \"headwear\", accessories: \"accessories\",\n \"color-palette\": \"colorPalette\", material: \"material\", era: \"era\",\n}\n\n/** Multi-pick dims emit each picked entry independently. */\nconst MULTI_PICK: ReadonlySet<WardrobeDimension> = new Set([\"headwear\", \"accessories\"])\n/** Sentinel ids that mean \"nothing here\" and emit no hint. */\nconst NONE_IDS: ReadonlySet<string> = new Set([\"wd-outer-none\"])\n\nexport const WARDROBE: ReadonlyArray<WardrobeEntry> = [\n // archetype\n { id: \"wd-casual\", label: \"Casual\", dimension: \"archetype\", promptHint: \"in casual everyday clothing\" },\n { id: \"wd-business\", label: \"Business\", dimension: \"archetype\", promptHint: \"in smart business attire\" },\n { id: \"wd-formal\", label: \"Formal\", dimension: \"archetype\", promptHint: \"in elegant formal wear\" },\n { id: \"wd-streetwear\", label: \"Streetwear\", dimension: \"archetype\", promptHint: \"in contemporary streetwear\" },\n { id: \"wd-athletic\", label: \"Athletic\", dimension: \"archetype\", promptHint: \"in athletic sportswear\" },\n { id: \"wd-fantasy\", label: \"Fantasy\", dimension: \"archetype\", promptHint: \"in fantasy costume\" },\n { id: \"wd-scifi\", label: \"Sci-Fi\", dimension: \"archetype\", promptHint: \"in futuristic sci-fi attire\" },\n { id: \"wd-historical\", label: \"Historical\", dimension: \"archetype\", promptHint: \"in period historical dress\" },\n { id: \"wd-uniform\", label: \"Uniform\", dimension: \"archetype\", promptHint: \"in a uniform\" },\n { id: \"wd-loungewear\", label: \"Loungewear\", dimension: \"archetype\", promptHint: \"in relaxed loungewear\" },\n // top\n { id: \"wd-tshirt\", label: \"T-Shirt\", dimension: \"top\", promptHint: \"wearing a t-shirt\" },\n { id: \"wd-blouse\", label: \"Blouse\", dimension: \"top\", promptHint: \"wearing a blouse\" },\n { id: \"wd-hoodie\", label: \"Hoodie\", dimension: \"top\", promptHint: \"wearing a hoodie\" },\n { id: \"wd-buttondown\", label: \"Button-down\", dimension: \"top\", promptHint: \"wearing a button-down shirt\" },\n { id: \"wd-tank\", label: \"Tank\", dimension: \"top\", promptHint: \"wearing a tank top\" },\n { id: \"wd-sweater\", label: \"Sweater\", dimension: \"top\", promptHint: \"wearing a sweater\" },\n { id: \"wd-turtleneck\", label: \"Turtleneck\", dimension: \"top\", promptHint: \"wearing a turtleneck\" },\n // bottom\n { id: \"wd-jeans\", label: \"Jeans\", dimension: \"bottom\", promptHint: \"wearing jeans\" },\n { id: \"wd-trousers\", label: \"Trousers\", dimension: \"bottom\", promptHint: \"wearing tailored trousers\" },\n { id: \"wd-skirt\", label: \"Skirt\", dimension: \"bottom\", promptHint: \"wearing a skirt\" },\n { id: \"wd-shorts\", label: \"Shorts\", dimension: \"bottom\", promptHint: \"wearing shorts\" },\n { id: \"wd-leggings\", label: \"Leggings\", dimension: \"bottom\", promptHint: \"wearing leggings\" },\n { id: \"wd-cargo\", label: \"Cargo\", dimension: \"bottom\", promptHint: \"wearing cargo pants\" },\n // outerwear\n { id: \"wd-outer-none\", label: \"None\", dimension: \"outerwear\", promptHint: \"\" },\n { id: \"wd-leatherjkt\", label: \"Leather Jacket\", dimension: \"outerwear\", promptHint: \"in a leather jacket\" },\n { id: \"wd-blazer\", label: \"Blazer\", dimension: \"outerwear\", promptHint: \"in a blazer\" },\n { id: \"wd-trench\", label: \"Trench Coat\", dimension: \"outerwear\", promptHint: \"in a trench coat\" },\n { id: \"wd-parka\", label: \"Parka\", dimension: \"outerwear\", promptHint: \"in a parka\" },\n { id: \"wd-cloak\", label: \"Cloak\", dimension: \"outerwear\", promptHint: \"in a flowing cloak\" },\n { id: \"wd-denimjkt\", label: \"Denim Jacket\", dimension: \"outerwear\", promptHint: \"in a denim jacket\" },\n { id: \"wd-cardigan\", label: \"Cardigan\", dimension: \"outerwear\", promptHint: \"in a cardigan\" },\n // footwear\n { id: \"wd-sneakers\", label: \"Sneakers\", dimension: \"footwear\", promptHint: \"wearing sneakers\" },\n { id: \"wd-boots\", label: \"Boots\", dimension: \"footwear\", promptHint: \"wearing boots\" },\n { id: \"wd-heels\", label: \"Heels\", dimension: \"footwear\", promptHint: \"wearing heels\" },\n { id: \"wd-sandals\", label: \"Sandals\", dimension: \"footwear\", promptHint: \"wearing sandals\" },\n { id: \"wd-dressshoe\", label: \"Dress Shoes\", dimension: \"footwear\", promptHint: \"wearing dress shoes\" },\n { id: \"wd-barefoot\", label: \"Barefoot\", dimension: \"footwear\", promptHint: \"barefoot\" },\n // headwear (multi)\n { id: \"wd-cap\", label: \"Cap\", dimension: \"headwear\", promptHint: \"wearing a cap\" },\n { id: \"wd-beanie\", label: \"Beanie\", dimension: \"headwear\", promptHint: \"wearing a beanie\" },\n { id: \"wd-widehat\", label: \"Wide-brim Hat\", dimension: \"headwear\", promptHint: \"wearing a wide-brim hat\" },\n { id: \"wd-hood\", label: \"Hood\", dimension: \"headwear\", promptHint: \"with the hood up\" },\n { id: \"wd-crown\", label: \"Crown\", dimension: \"headwear\", promptHint: \"wearing a crown\" },\n { id: \"wd-helmet\", label: \"Helmet\", dimension: \"headwear\", promptHint: \"wearing a helmet\" },\n // accessories (multi)\n { id: \"wd-glasses\", label: \"Glasses\", dimension: \"accessories\", promptHint: \"wearing glasses\" },\n { id: \"wd-sunglasses\", label: \"Sunglasses\", dimension: \"accessories\", promptHint: \"wearing sunglasses\" },\n { id: \"wd-scarf\", label: \"Scarf\", dimension: \"accessories\", promptHint: \"wearing a scarf\" },\n { id: \"wd-gloves\", label: \"Gloves\", dimension: \"accessories\", promptHint: \"wearing gloves\" },\n { id: \"wd-jewelry\", label: \"Jewelry\", dimension: \"accessories\", promptHint: \"wearing statement jewelry\" },\n { id: \"wd-belt\", label: \"Belt\", dimension: \"accessories\", promptHint: \"with a belt\" },\n { id: \"wd-watch\", label: \"Watch\", dimension: \"accessories\", promptHint: \"wearing a watch\" },\n // color-palette\n { id: \"wd-neutral\", label: \"Neutral\", dimension: \"color-palette\", promptHint: \"in a neutral color palette\" },\n { id: \"wd-all-black\", label: \"All Black\", dimension: \"color-palette\", promptHint: \"in an all-black palette\" },\n { id: \"wd-earth\", label: \"Earth Tones\", dimension: \"color-palette\", promptHint: \"in earth-tone colors\" },\n { id: \"wd-pastel\", label: \"Pastel\", dimension: \"color-palette\", promptHint: \"in pastel colors\" },\n { id: \"wd-jewel\", label: \"Jewel Tones\", dimension: \"color-palette\", promptHint: \"in rich jewel-tone colors\" },\n { id: \"wd-neon\", label: \"Neon\", dimension: \"color-palette\", promptHint: \"in vivid neon colors\" },\n { id: \"wd-all-white\", label: \"All White\", dimension: \"color-palette\", promptHint: \"in an all-white palette\" },\n // material\n { id: \"wd-cotton\", label: \"Cotton\", dimension: \"material\", promptHint: \"in cotton fabric\" },\n { id: \"wd-denim\", label: \"Denim\", dimension: \"material\", promptHint: \"in denim\" },\n { id: \"wd-leather\", label: \"Leather\", dimension: \"material\", promptHint: \"in leather\" },\n { id: \"wd-silk\", label: \"Silk\", dimension: \"material\", promptHint: \"in silk\" },\n { id: \"wd-wool\", label: \"Wool\", dimension: \"material\", promptHint: \"in wool\" },\n { id: \"wd-latex\", label: \"Latex\", dimension: \"material\", promptHint: \"in latex\" },\n { id: \"wd-linen\", label: \"Linen\", dimension: \"material\", promptHint: \"in linen\" },\n // era\n { id: \"wd-contemporary\", label: \"Contemporary\", dimension: \"era\", promptHint: \"in contemporary fashion\" },\n { id: \"wd-1920s\", label: \"1920s\", dimension: \"era\", promptHint: \"in 1920s fashion\" },\n { id: \"wd-1950s\", label: \"1950s\", dimension: \"era\", promptHint: \"in 1950s fashion\" },\n { id: \"wd-1980s\", label: \"1980s\", dimension: \"era\", promptHint: \"in 1980s fashion\" },\n { id: \"wd-victorian\", label: \"Victorian\", dimension: \"era\", promptHint: \"in Victorian-era dress\" },\n { id: \"wd-medieval\", label: \"Medieval\", dimension: \"era\", promptHint: \"in medieval dress\" },\n { id: \"wd-futuristic\", label: \"Futuristic\", dimension: \"era\", promptHint: \"in futuristic clothing\" },\n] as const\n\nconst BY_ID: Map<string, WardrobeEntry> = new Map(WARDROBE.map((e) => [e.id, e]))\n\n/** Entries grouped by dimension — precomputed once so per-dimension lookups\n * (the picker calls one per dimension per render) are O(1) with stable array\n * refs, instead of a full WARDROBE scan each call. */\nconst BY_DIMENSION: Map<WardrobeDimension, WardrobeEntry[]> = (() => {\n const map = new Map<WardrobeDimension, WardrobeEntry[]>()\n for (const e of WARDROBE) {\n const list = map.get(e.dimension)\n if (list) list.push(e)\n else map.set(e.dimension, [e])\n }\n return map\n})()\n\nexport function getWardrobeEntry(id: string | undefined | null): WardrobeEntry | undefined {\n return id ? BY_ID.get(id) : undefined\n}\n\nexport function getWardrobePromptHint(id: string | undefined | null): string {\n return getWardrobeEntry(id)?.promptHint ?? \"\"\n}\n\nexport function getWardrobeEntriesByDimension(dim: WardrobeDimension): WardrobeEntry[] {\n return BY_DIMENSION.get(dim) ?? []\n}\n\nexport function buildWardrobeHints(value: Record<string, unknown> & WardrobeValue): string[] {\n const hints: string[] = []\n for (const dimension of WARDROBE_DIMENSION_ORDER) {\n const field = WARDROBE_FIELD_BY_DIMENSION[dimension]\n const raw = value[field]\n if (MULTI_PICK.has(dimension)) {\n for (const id of pickIds(raw)) {\n if (NONE_IDS.has(id)) continue\n const h = getWardrobePromptHint(id)\n if (h) hints.push(h)\n }\n continue\n }\n const id = typeof raw === \"string\" ? raw : undefined\n if (!id || NONE_IDS.has(id)) continue\n const h = getWardrobePromptHint(id)\n if (h) hints.push(h)\n }\n return hints\n}\n","import { getCharacterMotion, CHARACTER_MOTION_MAX_PICKS, type CharacterMotionTiming } from \"./character-motion.js\"\n\nexport interface CharacterMotionDiagnostic {\n readonly code: \"unknown\" | \"omitted\" | \"retired\" | \"pose\" | \"visibility\" | \"hands\" | \"pace\" | \"requirements\" | \"compound\" | \"capacity\" | \"multiple-targets\" | \"roles\"\n readonly severity: \"error\" | \"warning\" | \"info\"\n readonly ids: readonly string[]\n readonly message: string\n}\nexport interface CharacterMotionBindings {\n readonly selfPairing?: boolean\n readonly subjectMinor?: boolean\n readonly partnerNames?: readonly string[]\n readonly targetNames?: readonly string[]\n}\n\n/** Shared by editor, API clients and local review. Missing metadata means\n * unknown; this never certifies a sequence or predicts clip duration. */\nexport function getCharacterMotionDiagnostics(\n value: string | readonly string[] | null | undefined,\n timing?: CharacterMotionTiming,\n bindings: CharacterMotionBindings = {},\n): readonly CharacterMotionDiagnostic[] {\n const requested = typeof value === \"string\" ? [value] : Array.isArray(value) ? [...new Set(value)] : []\n const result: CharacterMotionDiagnostic[] = []\n const add = (code: CharacterMotionDiagnostic[\"code\"], severity: CharacterMotionDiagnostic[\"severity\"], ids: readonly string[], message: string) => result.push({ code, severity, ids, message })\n if (requested.length > CHARACTER_MOTION_MAX_PICKS) add(\"capacity\", \"warning\", requested, \"Only the first three selections contribute. Remove extra selections.\")\n const picks = requested.slice(0, CHARACTER_MOTION_MAX_PICKS)\n for (const id of picks) if (!getCharacterMotion(id)) add(\"unknown\", \"error\", [id], `Motion “${id}” is unavailable and contributes no fragment. Remove or replace it.`)\n const entries = picks.flatMap(id => { const entry = getCharacterMotion(id); return entry?.promptHint ? [entry] : [] })\n const active = entries.filter(e => !bindings.subjectMinor || !e.adultOnly)\n if (bindings.selfPairing && active.some(e => e.twoPerson || e.counterpart)) add(\"roles\", \"error\", active.filter(e => e.twoPerson || e.counterpart).map(e => e.id), \"The same reference is connected as Target and Partner. Connect distinct participants before running this interaction.\")\n const omitted = entries.filter(e => bindings.subjectMinor && e.adultOnly)\n if (omitted.length) add(\"omitted\", active.length ? \"warning\" : \"error\", omitted.map(e => e.id), `${omitted.map(e => e.label).join(\", \")} omitted for a connected minor. ${active.length ? \"Replace these selections.\" : \"No selected motion contributes a fragment.\"}`)\n if ((bindings.targetNames?.length ?? 0) > 1) add(\"multiple-targets\", \"warning\", picks, \"Each target performs a separate copy of the sequence. Use separate motion nodes for coordinated choreography.\")\n for (const entry of active) {\n if (entry.deprecated) add(\"retired\", \"warning\", [entry.id], `${entry.label} is retired from new choices but still resolves in saved workflows.${entry.replacementId ? ` Use ${getCharacterMotion(entry.replacementId)?.label ?? entry.replacementId}.` : \"\"}`)\n if (entry.fixedPace && timing?.pace && timing.pace !== \"auto\") add(\"pace\", \"warning\", [entry.id], `${entry.label} sets its own timing. Set Pace to Auto or replace the motion.`)\n if (entry.requires?.length) add(\"requirements\", \"info\", [entry.id], `${entry.label} requires: ${entry.requires.join(\", \")}.${entry.twoPerson || entry.counterpart ? bindings.partnerNames?.length ? ` Partner reference: ${bindings.partnerNames.join(\", \")}; confirm it matches the required recipient.` : \" Connect a Partner reference to identify the recipient; otherwise the model chooses it.\" : \" Establish these in the scene or prompt; the fragment does not supply reference media.\"}`)\n }\n for (let i = 1; i < active.length; i++) {\n const before = active[i - 1]!, after = active[i]!, ids = [before.id, after.id]\n if (before.endVisibility === \"out-of-frame\") add(\"visibility\", \"warning\", ids, `${before.label} ends out of view before ${after.label}. Reorder or add an entrance.`)\n if (before.endPose && after.startPose && before.endPose !== \"any\" && after.startPose !== \"any\" && before.endPose !== after.startPose) add(\"pose\", \"warning\", ids, `${before.label} ends ${before.endPose}; ${after.label} starts ${after.startPose}. Add a transition or replace a motion.`)\n if (before.handsAfter && before.handsAfter !== \"free\" && after.needsFreeHands) add(\"hands\", \"warning\", ids, `${before.label} leaves hands occupied; ${after.label} needs free hands. Add a release first.`)\n }\n const compound = active.filter(e => e.kind === \"compound\")\n if (compound.length) add(\"compound\", \"warning\", compound.map(e => e.id), `${compound.length} selection${compound.length === 1 ? \" is\" : \"s are\"} compound choreography. Short clips may not fit every phase; test the sequence before adding more actions.`)\n return result\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  var chunk4GKTOVFM_cjs = require('./chunk-4GKTOVFM.cjs');
4
4
  var chunkUXDKZVNN_cjs = require('./chunk-UXDKZVNN.cjs');
5
5
  var chunk2NJTFCKQ_cjs = require('./chunk-2NJTFCKQ.cjs');
6
- var chunkKTNCB2IE_cjs = require('./chunk-KTNCB2IE.cjs');
7
- var chunkE5EKWWOO_cjs = require('./chunk-E5EKWWOO.cjs');
6
+ var chunkXMRDZRGV_cjs = require('./chunk-XMRDZRGV.cjs');
7
+ var chunkFEHXLXAV_cjs = require('./chunk-FEHXLXAV.cjs');
8
8
  var chunk3UEA3UHQ_cjs = require('./chunk-3UEA3UHQ.cjs');
9
9
  var chunkK6NT635Z_cjs = require('./chunk-K6NT635Z.cjs');
10
10
  var models = require('@nodaro/shared/models');
@@ -46,7 +46,7 @@ function asBodyClauses(texts) {
46
46
  return texts.map((text) => ({ text, slot: "body" }));
47
47
  }
48
48
  function partitionStyleClauses(direction, opts) {
49
- return chunkKTNCB2IE_cjs.renderDirectionHintClauses(direction, opts).map((clause) => ({
49
+ return chunkXMRDZRGV_cjs.renderDirectionHintClauses(direction, opts).map((clause) => ({
50
50
  text: clause.text,
51
51
  slot: styleSlotFor(clause)
52
52
  }));
@@ -1247,7 +1247,7 @@ ${directives}`;
1247
1247
  prompt2 = appendReferenceLines(prompt2, describedLines, "hybrid");
1248
1248
  }
1249
1249
  const styleText2 = style?.trim();
1250
- const styleLine2 = styleText2 && !chunkE5EKWWOO_cjs.isDeniedStyleId(styleText2) ? `Style: ${chunkE5EKWWOO_cjs.getStylePromptHint(styleText2) || styleText2}` : "";
1250
+ const styleLine2 = styleText2 && !chunkFEHXLXAV_cjs.isDeniedStyleId(styleText2) ? `Style: ${chunkFEHXLXAV_cjs.getStylePromptHint(styleText2) || styleText2}` : "";
1251
1251
  const negPrompt2 = negativePrompt?.trim();
1252
1252
  let nativeNegativePrompt2;
1253
1253
  let avoidLine2 = "";
@@ -1333,7 +1333,7 @@ ${directives}`;
1333
1333
  prompt = section.length > 0 ? `${wrapped}${STYLE_SECTION_GAP}${section}` : wrapped;
1334
1334
  }
1335
1335
  const styleText = style?.trim();
1336
- const styleLine = styleText && !chunkE5EKWWOO_cjs.isDeniedStyleId(styleText) ? `Style: ${chunkE5EKWWOO_cjs.getStylePromptHint(styleText) || styleText}` : "";
1336
+ const styleLine = styleText && !chunkFEHXLXAV_cjs.isDeniedStyleId(styleText) ? `Style: ${chunkFEHXLXAV_cjs.getStylePromptHint(styleText) || styleText}` : "";
1337
1337
  const negPrompt = negativePrompt?.trim();
1338
1338
  let nativeNegativePrompt;
1339
1339
  let avoidLine = "";
@@ -1841,10 +1841,10 @@ var perId = (full, compact) => (ids, mode) => {
1841
1841
  };
1842
1842
  var SUBJECT_FIELDS = [
1843
1843
  { key: "person", kind: "group", surface: "both", render: viaFragmentBuilder(chunkK6NT635Z_cjs.buildPersonHints) },
1844
- { key: "styling", kind: "group", surface: "both", render: viaFragmentBuilder(chunkE5EKWWOO_cjs.buildStylingHints) },
1845
- { key: "heldProp", kind: "ids", surface: "both", maxPicks: 2, render: viaListBuilder(chunkE5EKWWOO_cjs.buildHeldPropHints) },
1846
- { key: "material", kind: "ids", surface: "both", maxPicks: 2, render: viaStringBuilder(chunkE5EKWWOO_cjs.buildMaterialHints) },
1847
- { key: "animal", kind: "ids", surface: "both", maxPicks: 1, render: perId(chunkKTNCB2IE_cjs.curatedAnimalPromptHint, chunkKTNCB2IE_cjs.curatedAnimalTerm) }
1844
+ { key: "styling", kind: "group", surface: "both", render: viaFragmentBuilder(chunkFEHXLXAV_cjs.buildStylingHints) },
1845
+ { key: "heldProp", kind: "ids", surface: "both", maxPicks: 2, render: viaListBuilder(chunkFEHXLXAV_cjs.buildHeldPropHints) },
1846
+ { key: "material", kind: "ids", surface: "both", maxPicks: 2, render: viaStringBuilder(chunkFEHXLXAV_cjs.buildMaterialHints) },
1847
+ { key: "animal", kind: "ids", surface: "both", maxPicks: 1, render: perId(chunkXMRDZRGV_cjs.curatedAnimalPromptHint, chunkXMRDZRGV_cjs.curatedAnimalTerm) }
1848
1848
  ];
1849
1849
  var SUBJECT_FOLD_KEYS = SUBJECT_FIELDS.map((f) => f.key);
1850
1850
  var IDS_ROWS = SUBJECT_FIELDS.filter((f) => f.kind === "ids");
@@ -1854,7 +1854,7 @@ var CUSTOM_AGE_MAX = 120;
1854
1854
  var SUBJECT_KEYS = [
1855
1855
  ...chunkK6NT635Z_cjs.PERSON_DIMENSION_ORDER.map((d) => chunkK6NT635Z_cjs.PERSON_FIELD_BY_DIMENSION[d]),
1856
1856
  SUBJECT_CUSTOM_AGE_KEY,
1857
- ...chunkE5EKWWOO_cjs.STYLING_DIMENSION_ORDER.map((d) => chunkE5EKWWOO_cjs.STYLING_FIELD_BY_DIMENSION[d]),
1857
+ ...chunkFEHXLXAV_cjs.STYLING_DIMENSION_ORDER.map((d) => chunkFEHXLXAV_cjs.STYLING_FIELD_BY_DIMENSION[d]),
1858
1858
  ...IDS_ROWS.map((f) => f.key)
1859
1859
  ];
1860
1860
  function getRegisteredSubjectKeys() {
@@ -1867,14 +1867,14 @@ function getRegisteredSubjectKeys() {
1867
1867
  return [
1868
1868
  ...personFields,
1869
1869
  SUBJECT_CUSTOM_AGE_KEY,
1870
- ...chunkE5EKWWOO_cjs.STYLING_DIMENSION_ORDER.map((d) => chunkE5EKWWOO_cjs.STYLING_FIELD_BY_DIMENSION[d]),
1870
+ ...chunkFEHXLXAV_cjs.STYLING_DIMENSION_ORDER.map((d) => chunkFEHXLXAV_cjs.STYLING_FIELD_BY_DIMENSION[d]),
1871
1871
  ...IDS_ROWS.map((f) => f.key)
1872
1872
  ];
1873
1873
  }
1874
1874
  var SUBJECT_IMAGE_HINT_MODE_DEFAULT = "full";
1875
1875
  var SUBJECT_VIDEO_HINT_MODE_DEFAULT = "compact";
1876
- var SUBJECT_ARRAY_CEILING = chunkKTNCB2IE_cjs.DIRECTION_ARRAY_CEILING;
1877
- var SUBJECT_ID_MAX_CHARS = chunkKTNCB2IE_cjs.DIRECTION_ID_MAX_CHARS;
1876
+ var SUBJECT_ARRAY_CEILING = chunkXMRDZRGV_cjs.DIRECTION_ARRAY_CEILING;
1877
+ var SUBJECT_ID_MAX_CHARS = chunkXMRDZRGV_cjs.DIRECTION_ID_MAX_CHARS;
1878
1878
  var MAX_SUBJECT_KEYS = 128;
1879
1879
  var SUBJECT_KEY_MAX_CHARS = 64;
1880
1880
  function normalizeIds(value, maxPicks) {
@@ -1896,10 +1896,10 @@ function limitByField() {
1896
1896
  const field = personFieldByDimension[dimension];
1897
1897
  if (field) out.set(field, chunkK6NT635Z_cjs.getPersonDimensionLimit(dimension));
1898
1898
  }
1899
- for (const dimension of chunkE5EKWWOO_cjs.STYLING_DIMENSION_ORDER) {
1899
+ for (const dimension of chunkFEHXLXAV_cjs.STYLING_DIMENSION_ORDER) {
1900
1900
  out.set(
1901
- chunkE5EKWWOO_cjs.STYLING_FIELD_BY_DIMENSION[dimension],
1902
- chunkE5EKWWOO_cjs.getStylingDimensionLimit(dimension)
1901
+ chunkFEHXLXAV_cjs.STYLING_FIELD_BY_DIMENSION[dimension],
1902
+ chunkFEHXLXAV_cjs.getStylingDimensionLimit(dimension)
1903
1903
  );
1904
1904
  }
1905
1905
  for (const row of IDS_ROWS) out.set(row.key, row.maxPicks);
@@ -1996,5 +1996,5 @@ exports.subjectFieldsForSurface = subjectFieldsForSurface;
1996
1996
  exports.tidyReferenceTokenGaps = tidyReferenceTokenGaps;
1997
1997
  exports.truncateText = truncateText;
1998
1998
  exports.unboundReferenceTokenText = unboundReferenceTokenText;
1999
- //# sourceMappingURL=chunk-PWYASBX2.cjs.map
2000
- //# sourceMappingURL=chunk-PWYASBX2.cjs.map
1999
+ //# sourceMappingURL=chunk-P5HAPDV3.cjs.map
2000
+ //# sourceMappingURL=chunk-P5HAPDV3.cjs.map