ima2-gen 3.19.0 → 3.20.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 (384) hide show
  1. package/docs/migration/runtime-test-inventory.md +2 -1
  2. package/lib/oauthLauncher.js +10 -5
  3. package/node_modules/zod/README.md +2 -2
  4. package/node_modules/zod/compile.cjs +19 -0
  5. package/node_modules/zod/index.cjs +19 -0
  6. package/node_modules/zod/locales/index.cjs +19 -0
  7. package/node_modules/zod/mini/index.cjs +19 -0
  8. package/node_modules/zod/package.json +8 -7
  9. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  10. package/node_modules/zod/src/v4/classic/external.ts +2 -0
  11. package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
  12. package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
  13. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
  14. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
  15. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  16. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
  17. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
  18. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
  19. package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
  20. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
  21. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  22. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
  23. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
  24. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
  25. package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
  26. package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
  27. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
  28. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  29. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  30. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
  31. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  32. package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
  33. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
  34. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
  35. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
  36. package/node_modules/zod/src/v4/core/api.ts +44 -28
  37. package/node_modules/zod/src/v4/core/checks.ts +62 -102
  38. package/node_modules/zod/src/v4/core/compile.ts +218 -93
  39. package/node_modules/zod/src/v4/core/core.ts +1 -3
  40. package/node_modules/zod/src/v4/core/doc.ts +6 -2
  41. package/node_modules/zod/src/v4/core/errors.ts +3 -6
  42. package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
  43. package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
  44. package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
  45. package/node_modules/zod/src/v4/core/parse.ts +37 -16
  46. package/node_modules/zod/src/v4/core/regexes.ts +14 -4
  47. package/node_modules/zod/src/v4/core/schemas.ts +296 -132
  48. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  49. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
  50. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  51. package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
  52. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  53. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  54. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  55. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
  56. package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
  57. package/node_modules/zod/src/v4/core/util.ts +218 -147
  58. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  59. package/node_modules/zod/src/v4/locales/ar.ts +2 -0
  60. package/node_modules/zod/src/v4/locales/az.ts +2 -0
  61. package/node_modules/zod/src/v4/locales/be.ts +2 -0
  62. package/node_modules/zod/src/v4/locales/bg.ts +2 -0
  63. package/node_modules/zod/src/v4/locales/bn.ts +2 -0
  64. package/node_modules/zod/src/v4/locales/ca.ts +2 -0
  65. package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
  66. package/node_modules/zod/src/v4/locales/cs.ts +2 -0
  67. package/node_modules/zod/src/v4/locales/da.ts +2 -0
  68. package/node_modules/zod/src/v4/locales/de.ts +2 -0
  69. package/node_modules/zod/src/v4/locales/el.ts +2 -0
  70. package/node_modules/zod/src/v4/locales/en.ts +2 -0
  71. package/node_modules/zod/src/v4/locales/eo.ts +2 -0
  72. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  73. package/node_modules/zod/src/v4/locales/fa.ts +2 -0
  74. package/node_modules/zod/src/v4/locales/fi.ts +2 -0
  75. package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
  76. package/node_modules/zod/src/v4/locales/fr.ts +2 -0
  77. package/node_modules/zod/src/v4/locales/gu.ts +2 -0
  78. package/node_modules/zod/src/v4/locales/he.ts +2 -0
  79. package/node_modules/zod/src/v4/locales/hi.ts +2 -0
  80. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  81. package/node_modules/zod/src/v4/locales/hu.ts +2 -0
  82. package/node_modules/zod/src/v4/locales/hy.ts +2 -0
  83. package/node_modules/zod/src/v4/locales/id.ts +2 -0
  84. package/node_modules/zod/src/v4/locales/index.ts +1 -0
  85. package/node_modules/zod/src/v4/locales/is.ts +2 -0
  86. package/node_modules/zod/src/v4/locales/it.ts +2 -0
  87. package/node_modules/zod/src/v4/locales/ja.ts +2 -0
  88. package/node_modules/zod/src/v4/locales/ka.ts +2 -0
  89. package/node_modules/zod/src/v4/locales/km.ts +2 -0
  90. package/node_modules/zod/src/v4/locales/kn.ts +2 -0
  91. package/node_modules/zod/src/v4/locales/ko.ts +2 -0
  92. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  93. package/node_modules/zod/src/v4/locales/mk.ts +2 -0
  94. package/node_modules/zod/src/v4/locales/ms.ts +2 -0
  95. package/node_modules/zod/src/v4/locales/ne.ts +2 -0
  96. package/node_modules/zod/src/v4/locales/nl.ts +2 -0
  97. package/node_modules/zod/src/v4/locales/nn.ts +2 -0
  98. package/node_modules/zod/src/v4/locales/no.ts +2 -0
  99. package/node_modules/zod/src/v4/locales/ota.ts +2 -0
  100. package/node_modules/zod/src/v4/locales/pl.ts +2 -0
  101. package/node_modules/zod/src/v4/locales/ps.ts +2 -0
  102. package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
  103. package/node_modules/zod/src/v4/locales/pt.ts +2 -0
  104. package/node_modules/zod/src/v4/locales/ro.ts +2 -0
  105. package/node_modules/zod/src/v4/locales/ru.ts +2 -0
  106. package/node_modules/zod/src/v4/locales/sk.ts +2 -0
  107. package/node_modules/zod/src/v4/locales/sl.ts +2 -0
  108. package/node_modules/zod/src/v4/locales/sv.ts +2 -0
  109. package/node_modules/zod/src/v4/locales/ta.ts +2 -0
  110. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  111. package/node_modules/zod/src/v4/locales/th.ts +2 -0
  112. package/node_modules/zod/src/v4/locales/tk.ts +2 -0
  113. package/node_modules/zod/src/v4/locales/tr.ts +2 -0
  114. package/node_modules/zod/src/v4/locales/uk.ts +2 -0
  115. package/node_modules/zod/src/v4/locales/ur.ts +2 -0
  116. package/node_modules/zod/src/v4/locales/uz.ts +2 -0
  117. package/node_modules/zod/src/v4/locales/vi.ts +2 -0
  118. package/node_modules/zod/src/v4/locales/yo.ts +2 -0
  119. package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
  120. package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
  121. package/node_modules/zod/src/v4/mini/external.ts +2 -0
  122. package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
  123. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
  124. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  125. package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
  126. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  127. package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
  128. package/node_modules/zod/v3/ZodError.cjs +19 -0
  129. package/node_modules/zod/v3/errors.cjs +19 -0
  130. package/node_modules/zod/v3/external.cjs +19 -0
  131. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  132. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  133. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  134. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  135. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  136. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  137. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  138. package/node_modules/zod/v3/index.cjs +19 -0
  139. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  140. package/node_modules/zod/v3/types.cjs +19 -0
  141. package/node_modules/zod/v4/classic/checks.cjs +19 -0
  142. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  143. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  144. package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
  145. package/node_modules/zod/v4/classic/errors.cjs +19 -0
  146. package/node_modules/zod/v4/classic/external.cjs +22 -1
  147. package/node_modules/zod/v4/classic/external.d.cts +1 -1
  148. package/node_modules/zod/v4/classic/external.d.ts +1 -1
  149. package/node_modules/zod/v4/classic/external.js +1 -1
  150. package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
  151. package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
  152. package/node_modules/zod/v4/classic/in-out.cjs +19 -0
  153. package/node_modules/zod/v4/classic/index.cjs +19 -0
  154. package/node_modules/zod/v4/classic/iso.cjs +19 -0
  155. package/node_modules/zod/v4/classic/parse.cjs +19 -0
  156. package/node_modules/zod/v4/classic/schemas.cjs +100 -35
  157. package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
  158. package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
  159. package/node_modules/zod/v4/classic/schemas.js +77 -33
  160. package/node_modules/zod/v4/core/api.cjs +45 -22
  161. package/node_modules/zod/v4/core/api.d.cts +12 -6
  162. package/node_modules/zod/v4/core/api.d.ts +12 -6
  163. package/node_modules/zod/v4/core/api.js +25 -22
  164. package/node_modules/zod/v4/core/checks.cjs +51 -97
  165. package/node_modules/zod/v4/core/checks.d.cts +17 -1
  166. package/node_modules/zod/v4/core/checks.d.ts +17 -1
  167. package/node_modules/zod/v4/core/checks.js +31 -96
  168. package/node_modules/zod/v4/core/compile.cjs +173 -78
  169. package/node_modules/zod/v4/core/compile.d.cts +18 -4
  170. package/node_modules/zod/v4/core/compile.d.ts +18 -4
  171. package/node_modules/zod/v4/core/compile.js +154 -79
  172. package/node_modules/zod/v4/core/core.cjs +20 -1
  173. package/node_modules/zod/v4/core/core.js +1 -1
  174. package/node_modules/zod/v4/core/doc.cjs +26 -2
  175. package/node_modules/zod/v4/core/doc.js +7 -2
  176. package/node_modules/zod/v4/core/errors.cjs +21 -5
  177. package/node_modules/zod/v4/core/errors.js +2 -5
  178. package/node_modules/zod/v4/core/index.cjs +19 -0
  179. package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
  180. package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
  181. package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
  182. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  183. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  184. package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
  185. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  186. package/node_modules/zod/v4/core/memoizer.cjs +111 -23
  187. package/node_modules/zod/v4/core/memoizer.js +69 -23
  188. package/node_modules/zod/v4/core/parse.cjs +56 -16
  189. package/node_modules/zod/v4/core/parse.js +37 -16
  190. package/node_modules/zod/v4/core/regexes.cjs +31 -6
  191. package/node_modules/zod/v4/core/regexes.d.cts +3 -0
  192. package/node_modules/zod/v4/core/regexes.d.ts +3 -0
  193. package/node_modules/zod/v4/core/regexes.js +10 -4
  194. package/node_modules/zod/v4/core/registries.cjs +19 -0
  195. package/node_modules/zod/v4/core/schemas.cjs +302 -114
  196. package/node_modules/zod/v4/core/schemas.d.cts +28 -8
  197. package/node_modules/zod/v4/core/schemas.d.ts +28 -8
  198. package/node_modules/zod/v4/core/schemas.js +279 -113
  199. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  200. package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
  201. package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
  202. package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
  203. package/node_modules/zod/v4/core/to-json-schema.js +7 -6
  204. package/node_modules/zod/v4/core/util.cjs +177 -143
  205. package/node_modules/zod/v4/core/util.d.cts +25 -4
  206. package/node_modules/zod/v4/core/util.d.ts +25 -4
  207. package/node_modules/zod/v4/core/util.js +156 -143
  208. package/node_modules/zod/v4/core/versions.cjs +21 -2
  209. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  210. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  211. package/node_modules/zod/v4/core/versions.js +2 -2
  212. package/node_modules/zod/v4/core/visit.cjs +19 -0
  213. package/node_modules/zod/v4/index.cjs +19 -0
  214. package/node_modules/zod/v4/locales/ar.cjs +2 -0
  215. package/node_modules/zod/v4/locales/ar.js +2 -0
  216. package/node_modules/zod/v4/locales/az.cjs +2 -0
  217. package/node_modules/zod/v4/locales/az.js +2 -0
  218. package/node_modules/zod/v4/locales/be.cjs +2 -0
  219. package/node_modules/zod/v4/locales/be.js +2 -0
  220. package/node_modules/zod/v4/locales/bg.cjs +2 -0
  221. package/node_modules/zod/v4/locales/bg.js +2 -0
  222. package/node_modules/zod/v4/locales/bn.cjs +2 -0
  223. package/node_modules/zod/v4/locales/bn.js +2 -0
  224. package/node_modules/zod/v4/locales/ca.cjs +2 -0
  225. package/node_modules/zod/v4/locales/ca.js +2 -0
  226. package/node_modules/zod/v4/locales/ckb.cjs +2 -0
  227. package/node_modules/zod/v4/locales/ckb.js +2 -0
  228. package/node_modules/zod/v4/locales/cs.cjs +2 -0
  229. package/node_modules/zod/v4/locales/cs.js +2 -0
  230. package/node_modules/zod/v4/locales/da.cjs +2 -0
  231. package/node_modules/zod/v4/locales/da.js +2 -0
  232. package/node_modules/zod/v4/locales/de.cjs +2 -0
  233. package/node_modules/zod/v4/locales/de.js +2 -0
  234. package/node_modules/zod/v4/locales/el.cjs +2 -0
  235. package/node_modules/zod/v4/locales/el.js +2 -0
  236. package/node_modules/zod/v4/locales/en.cjs +2 -0
  237. package/node_modules/zod/v4/locales/en.js +2 -0
  238. package/node_modules/zod/v4/locales/eo.cjs +2 -0
  239. package/node_modules/zod/v4/locales/eo.js +2 -0
  240. package/node_modules/zod/v4/locales/es.cjs +2 -0
  241. package/node_modules/zod/v4/locales/es.js +2 -0
  242. package/node_modules/zod/v4/locales/fa.cjs +2 -0
  243. package/node_modules/zod/v4/locales/fa.js +2 -0
  244. package/node_modules/zod/v4/locales/fi.cjs +2 -0
  245. package/node_modules/zod/v4/locales/fi.js +2 -0
  246. package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
  247. package/node_modules/zod/v4/locales/fr-CA.js +2 -0
  248. package/node_modules/zod/v4/locales/fr.cjs +2 -0
  249. package/node_modules/zod/v4/locales/fr.js +2 -0
  250. package/node_modules/zod/v4/locales/gu.cjs +2 -0
  251. package/node_modules/zod/v4/locales/gu.js +2 -0
  252. package/node_modules/zod/v4/locales/he.cjs +2 -0
  253. package/node_modules/zod/v4/locales/he.js +2 -0
  254. package/node_modules/zod/v4/locales/hi.cjs +2 -0
  255. package/node_modules/zod/v4/locales/hi.js +2 -0
  256. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  257. package/node_modules/zod/v4/locales/hr.js +2 -0
  258. package/node_modules/zod/v4/locales/hu.cjs +2 -0
  259. package/node_modules/zod/v4/locales/hu.js +2 -0
  260. package/node_modules/zod/v4/locales/hy.cjs +2 -0
  261. package/node_modules/zod/v4/locales/hy.js +2 -0
  262. package/node_modules/zod/v4/locales/id.cjs +2 -0
  263. package/node_modules/zod/v4/locales/id.js +2 -0
  264. package/node_modules/zod/v4/locales/index.cjs +22 -1
  265. package/node_modules/zod/v4/locales/index.d.cts +1 -0
  266. package/node_modules/zod/v4/locales/index.d.ts +1 -0
  267. package/node_modules/zod/v4/locales/index.js +1 -0
  268. package/node_modules/zod/v4/locales/is.cjs +2 -0
  269. package/node_modules/zod/v4/locales/is.js +2 -0
  270. package/node_modules/zod/v4/locales/it.cjs +2 -0
  271. package/node_modules/zod/v4/locales/it.js +2 -0
  272. package/node_modules/zod/v4/locales/ja.cjs +2 -0
  273. package/node_modules/zod/v4/locales/ja.js +2 -0
  274. package/node_modules/zod/v4/locales/ka.cjs +2 -0
  275. package/node_modules/zod/v4/locales/ka.js +2 -0
  276. package/node_modules/zod/v4/locales/km.cjs +2 -0
  277. package/node_modules/zod/v4/locales/km.js +2 -0
  278. package/node_modules/zod/v4/locales/kn.cjs +2 -0
  279. package/node_modules/zod/v4/locales/kn.js +2 -0
  280. package/node_modules/zod/v4/locales/ko.cjs +2 -0
  281. package/node_modules/zod/v4/locales/ko.js +2 -0
  282. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  283. package/node_modules/zod/v4/locales/lt.js +2 -0
  284. package/node_modules/zod/v4/locales/mk.cjs +2 -0
  285. package/node_modules/zod/v4/locales/mk.js +2 -0
  286. package/node_modules/zod/v4/locales/ms.cjs +2 -0
  287. package/node_modules/zod/v4/locales/ms.js +2 -0
  288. package/node_modules/zod/v4/locales/ne.cjs +2 -0
  289. package/node_modules/zod/v4/locales/ne.js +2 -0
  290. package/node_modules/zod/v4/locales/nl.cjs +2 -0
  291. package/node_modules/zod/v4/locales/nl.js +2 -0
  292. package/node_modules/zod/v4/locales/nn.cjs +2 -0
  293. package/node_modules/zod/v4/locales/nn.js +2 -0
  294. package/node_modules/zod/v4/locales/no.cjs +2 -0
  295. package/node_modules/zod/v4/locales/no.js +2 -0
  296. package/node_modules/zod/v4/locales/ota.cjs +2 -0
  297. package/node_modules/zod/v4/locales/ota.js +2 -0
  298. package/node_modules/zod/v4/locales/pl.cjs +2 -0
  299. package/node_modules/zod/v4/locales/pl.js +2 -0
  300. package/node_modules/zod/v4/locales/ps.cjs +2 -0
  301. package/node_modules/zod/v4/locales/ps.js +2 -0
  302. package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
  303. package/node_modules/zod/v4/locales/pt-BR.js +2 -0
  304. package/node_modules/zod/v4/locales/pt.cjs +2 -0
  305. package/node_modules/zod/v4/locales/pt.js +2 -0
  306. package/node_modules/zod/v4/locales/ro.cjs +2 -0
  307. package/node_modules/zod/v4/locales/ro.js +2 -0
  308. package/node_modules/zod/v4/locales/ru.cjs +2 -0
  309. package/node_modules/zod/v4/locales/ru.js +2 -0
  310. package/node_modules/zod/v4/locales/sk.cjs +2 -0
  311. package/node_modules/zod/v4/locales/sk.js +2 -0
  312. package/node_modules/zod/v4/locales/sl.cjs +2 -0
  313. package/node_modules/zod/v4/locales/sl.js +2 -0
  314. package/node_modules/zod/v4/locales/sv.cjs +2 -0
  315. package/node_modules/zod/v4/locales/sv.js +2 -0
  316. package/node_modules/zod/v4/locales/ta.cjs +2 -0
  317. package/node_modules/zod/v4/locales/ta.js +2 -0
  318. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  319. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  320. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  321. package/node_modules/zod/v4/locales/tg.js +117 -0
  322. package/node_modules/zod/v4/locales/th.cjs +2 -0
  323. package/node_modules/zod/v4/locales/th.js +2 -0
  324. package/node_modules/zod/v4/locales/tk.cjs +2 -0
  325. package/node_modules/zod/v4/locales/tk.js +2 -0
  326. package/node_modules/zod/v4/locales/tr.cjs +2 -0
  327. package/node_modules/zod/v4/locales/tr.js +2 -0
  328. package/node_modules/zod/v4/locales/uk.cjs +2 -0
  329. package/node_modules/zod/v4/locales/uk.js +2 -0
  330. package/node_modules/zod/v4/locales/ur.cjs +2 -0
  331. package/node_modules/zod/v4/locales/ur.js +2 -0
  332. package/node_modules/zod/v4/locales/uz.cjs +2 -0
  333. package/node_modules/zod/v4/locales/uz.js +2 -0
  334. package/node_modules/zod/v4/locales/vi.cjs +2 -0
  335. package/node_modules/zod/v4/locales/vi.js +2 -0
  336. package/node_modules/zod/v4/locales/yo.cjs +2 -0
  337. package/node_modules/zod/v4/locales/yo.js +2 -0
  338. package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
  339. package/node_modules/zod/v4/locales/zh-CN.js +2 -0
  340. package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
  341. package/node_modules/zod/v4/locales/zh-TW.js +2 -0
  342. package/node_modules/zod/v4/mini/checks.cjs +19 -0
  343. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  344. package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
  345. package/node_modules/zod/v4/mini/external.cjs +22 -1
  346. package/node_modules/zod/v4/mini/external.d.cts +1 -1
  347. package/node_modules/zod/v4/mini/external.d.ts +1 -1
  348. package/node_modules/zod/v4/mini/external.js +1 -1
  349. package/node_modules/zod/v4/mini/in-out.cjs +19 -0
  350. package/node_modules/zod/v4/mini/index.cjs +19 -0
  351. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  352. package/node_modules/zod/v4/mini/parse.cjs +19 -0
  353. package/node_modules/zod/v4/mini/schemas.cjs +44 -8
  354. package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
  355. package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
  356. package/node_modules/zod/v4/mini/schemas.js +21 -6
  357. package/node_modules/zod/v4-mini/index.cjs +19 -0
  358. package/package.json +6 -6
  359. package/routes/health.js +10 -1
  360. package/ui/dist/.vite/manifest.json +64 -64
  361. package/ui/dist/assets/{AgentWorkspace-C6ke6Eo4.js → AgentWorkspace-CENfXAob.js} +1 -1
  362. package/ui/dist/assets/{App-pMN1OjNW.js → App-B9y6oVuL.js} +8 -8
  363. package/ui/dist/assets/{AssetGenWorkspace-DzEfpUy_.js → AssetGenWorkspace-fL2MjYj9.js} +2 -2
  364. package/ui/dist/assets/{AssetMediaLightbox-Bx0azN0S.js → AssetMediaLightbox-Be4arnGs.js} +1 -1
  365. package/ui/dist/assets/{AssetsWorkspace-CHw1u9VC.js → AssetsWorkspace-7z4wyfp0.js} +1 -1
  366. package/ui/dist/assets/{CardNewsWorkspace-DsjqhaYO.js → CardNewsWorkspace-DSldDpsl.js} +1 -1
  367. package/ui/dist/assets/{GenerationRequestLogPanel-EYEiHIr9.js → GenerationRequestLogPanel-CcQKi89f.js} +1 -1
  368. package/ui/dist/assets/{HomeWorkspace-DbnY1YF2.js → HomeWorkspace-BZDk2X1U.js} +1 -1
  369. package/ui/dist/assets/{KeyingPanel-8J_RMrxg.js → KeyingPanel-snhXKnA3.js} +1 -1
  370. package/ui/dist/assets/{NodeCanvas-DmjbNcTa.js → NodeCanvas-CJQXsS0r.js} +1 -1
  371. package/ui/dist/assets/{PromptBuilderPanel-CL34Jpso.js → PromptBuilderPanel-B-YP1ph5.js} +1 -1
  372. package/ui/dist/assets/{PromptImportDialog-B24cvEkK.js → PromptImportDialog-ssPMxE4j.js} +2 -2
  373. package/ui/dist/assets/{PromptImportDiscoverySection-Bbw1_J_3.js → PromptImportDiscoverySection-CvOgGTOs.js} +1 -1
  374. package/ui/dist/assets/{PromptImportFolderSection-CMpxuE8e.js → PromptImportFolderSection-CxR9qxbi.js} +1 -1
  375. package/ui/dist/assets/{PromptLibraryPanel-Ct98TJ61.js → PromptLibraryPanel-DjYgbXes.js} +2 -2
  376. package/ui/dist/assets/{SettingsWorkspace-DL9Tm90P.js → SettingsWorkspace-BtruYb6g.js} +1 -1
  377. package/ui/dist/assets/{SpriteRecipeWorkspace-BJUH1ddP.js → SpriteRecipeWorkspace-DBrYOYOK.js} +1 -1
  378. package/ui/dist/assets/{index-D_LpLGWV.js → index-CWFgCqE1.js} +3 -3
  379. package/ui/dist/assets/{index-CHeVGnoy.js → index-va83o9G5.js} +12 -12
  380. package/ui/dist/assets/{pptxgen.es-s4xfPXLT.js → pptxgen.es-D-kntoLD.js} +1 -1
  381. package/ui/dist/assets/{promptBuilderStore-DQR29LwN.js → promptBuilderStore-BdGPLEra.js} +1 -1
  382. package/ui/dist/assets/useAgentDialogFocus-BDdVl-nq.js +1 -0
  383. package/ui/dist/index.html +1 -1
  384. package/ui/dist/assets/useAgentDialogFocus-DAeS9IWG.js +0 -1
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SpriteRecipeWorkspace-BJUH1ddP.js","assets/index-CHeVGnoy.js","assets/index-CxX85A3B.css","assets/App-pMN1OjNW.js","assets/AssetMediaLightbox-Bx0azN0S.js","assets/useAgentDialogFocus-DAeS9IWG.js","assets/KeyingPanel-8J_RMrxg.js"])))=>i.map(i=>d[i]);
2
- import{f as p,j as e,_ as U}from"./index-CHeVGnoy.js";import{u as G,a as n,ab as Q,ac as Z,a9 as J,k as X,ad as Y,ae as ee,aa as se}from"./App-pMN1OjNW.js";import{A as te}from"./AssetMediaLightbox-Bx0azN0S.js";import{K as ae}from"./KeyingPanel-8J_RMrxg.js";const ne=48;function le({selectedAssetId:t,onPreview:g,onAssetsLoaded:c}){const{t:r}=G(),l=n(d=>d.selectedProjectId),i=n(d=>d.assetGenItems.length),[m,h]=p.useState([]),[v,u]=p.useState(!1);return p.useEffect(()=>{let d=!1;return Q({kind:null,folderId:l,tag:null,q:"",limit:ne}).then(b=>{if(d)return;const o=b.assets.filter(j=>j.filePath&&(j.kind==="image"||j.kind==="video"));h(o),c?.(o.length),u(!1)}).catch(()=>{d||u(!0)}),()=>{d=!0}},[l,i]),e.jsxs("aside",{className:"assetgen-rail","aria-label":r("assetGen.railTitle"),children:[e.jsx("h2",{className:"assetgen-rail__title",children:r("assetGen.railTitle")}),v?e.jsx("p",{className:"assetgen-rail__empty",children:r("assetGen.railError")}):m.length===0?e.jsx("p",{className:"assetgen-rail__empty",children:r("assetGen.railEmpty")}):e.jsx("div",{className:"assetgen-rail__list",role:"listbox","aria-label":r("assetGen.railTitle"),children:(()=>{const d=new Map;for(const o of m)d.set(o.name,(d.get(o.name)??0)+1);const b=new Map;return m.map(o=>{const j=o.filePath?Z(o.filePath):null;if(!j)return null;const a=t===o.id,k=d.get(o.name)??1,x=(b.get(o.name)??0)+1;b.set(o.name,x);const f=k>1?`#${x} ${o.name}`:o.name;return e.jsxs("button",{type:"button",role:"option","aria-selected":a,className:`assetgen-rail__tile${a?" is-selected":""}`,title:f,onClick:()=>g(J(o),o.id),children:[o.kind==="video"?e.jsx("video",{src:j,muted:!0,playsInline:!0,preload:"metadata","aria-hidden":"true"}):e.jsx("img",{src:j,alt:"",loading:"lazy",decoding:"async"}),e.jsx("span",{className:"assetgen-rail__name",children:f})]},o.id)})})()})]})}const re=[{value:"chroma-green",swatch:"#00c853",labelKey:"assetGen.bgChroma"},{value:"white",swatch:"#ffffff",labelKey:"assetGen.bgWhite"},{value:"black",swatch:"#111111",labelKey:"assetGen.bgBlack"},{value:"transparent",swatch:null,labelKey:"assetGen.bgTransparent"}];function ie(){const{t}=G(),g=n(i=>i.assetGenBackground),c=n(i=>i.setAssetGenBackground),r=n(i=>i.assetGenProvider),l=r!=="grok"&&r!=="grok-api";return e.jsxs("div",{className:"assetgen-field",children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-bg-label",children:t("assetGen.background")}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-labelledby":"assetgen-bg-label",children:re.map(i=>{const m=i.value==="transparent"&&!l;return e.jsxs("button",{type:"button",className:g===i.value?"is-active":"","aria-pressed":g===i.value,disabled:m,...m?{title:t("assetGen.bgTransparentGptOnly")}:{},onClick:()=>c(i.value),children:[e.jsx("span",{className:i.swatch===null?"assetgen-bg-picker__swatch assetgen-bg-picker__swatch--alpha":"assetgen-bg-picker__swatch",...i.swatch===null?{}:{style:{background:i.swatch}},"aria-hidden":"true"}),t(i.labelKey)]},i.value)})}),e.jsx("p",{className:"assetgen-field__hint",children:t(l?g==="transparent"?"assetGen.backgroundHintTransparent":"assetGen.backgroundHint":"assetGen.bgTransparentGptOnly")})]})}const oe=[{value:"oauth",labelKey:"assetGen.modelGpt"},{value:"grok",labelKey:"assetGen.modelGrok"}];function ce(){const{t}=G(),g=n(l=>l.assetGenProvider),c=n(l=>l.setAssetGenProvider),r=g==="grok"||g==="grok-api"?"grok":"oauth";return e.jsxs("div",{className:"assetgen-field",children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-model-label",children:t("assetGen.model")}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-labelledby":"assetgen-model-label",children:oe.map(l=>e.jsx("button",{type:"button",className:r===l.value?"is-active":"","aria-pressed":r===l.value,onClick:()=>c(l.value),children:t(l.labelKey)},l.value))})]})}function de({onClose:t,onSelect:g}){const{t:c}=G(),r=n(u=>u.assetsFolders),[l,i]=p.useState(""),m=p.useRef(null),h=X(!0,t),v=p.useMemo(()=>{const u=r.filter(b=>b.parentId===null),d=l.trim().toLowerCase();return d?u.filter(b=>b.name.toLowerCase().includes(d)):u},[r,l]);return e.jsx("div",{className:"assetgen-popup-backdrop",onClick:t,children:e.jsxs("div",{ref:h,className:"assetgen-popup",role:"dialog","aria-modal":"true","aria-label":c("project.search"),onClick:u=>u.stopPropagation(),children:[e.jsx("input",{ref:m,type:"search",value:l,placeholder:c("project.searchPlaceholder"),"aria-label":c("project.search"),onChange:u=>i(u.target.value)}),e.jsxs("ul",{role:"listbox","aria-label":c("project.select"),children:[e.jsx("li",{children:e.jsx("button",{type:"button",onClick:()=>{g(null),t()},children:c("project.unassigned")})}),v.map(u=>e.jsx("li",{children:e.jsx("button",{type:"button",onClick:()=>{g(u.id),t()},children:u.name})},u.id)),v.length===0&&l.trim()?e.jsx("li",{className:"assetgen-popup__empty",children:c("project.searchEmpty")}):null]}),e.jsx("button",{type:"button",className:"assetgen-popup__close",onClick:t,children:c("project.close")})]})})}function ue(){return e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:e.jsx("path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"})})}function pe(){const{t}=G(),g=n(a=>a.assetsFolders),c=n(a=>a.selectedProjectId),r=n(a=>a.setSelectedProject),l=n(a=>a.loadAssetFolders),i=n(a=>a.createAssetFolder),[m,h]=p.useState(!1),[v,u]=p.useState(!1),d=p.useRef(null);p.useEffect(()=>{l()},[l]),p.useEffect(()=>{c&&g.length>0&&!g.some(a=>a.id===c)&&r(null)},[g,c,r]),p.useEffect(()=>{if(!m)return;const a=x=>{d.current&&!d.current.contains(x.target)&&h(!1)},k=x=>{x.key==="Escape"&&h(!1)};return window.addEventListener("mousedown",a),window.addEventListener("keydown",k),()=>{window.removeEventListener("mousedown",a),window.removeEventListener("keydown",k)}},[m]);const b=g.filter(a=>a.parentId===null),o=b.find(a=>a.id===c),j=async()=>{const a=window.prompt(t("project.newPrompt"));if(!a||!a.trim())return;if(await i(a.trim(),null)){await l();const x=n.getState().assetsFolders.find(f=>f.parentId===null&&f.name===a.trim());x&&r(x.id)}h(!1)};return e.jsxs("div",{className:"assetgen-field assetgen-project",ref:d,children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-project-label",children:t("project.select")}),e.jsxs("button",{type:"button",className:"assetgen-project__trigger","aria-haspopup":"listbox","aria-expanded":m,"aria-labelledby":"assetgen-project-label",onClick:()=>h(a=>!a),children:[e.jsx(ue,{}),o?o.name:t("project.unassigned"),e.jsx("span",{className:"assetgen-project__caret","aria-hidden":"true",children:"▾"})]}),m?e.jsxs("ul",{className:"assetgen-project__menu",role:"listbox","aria-labelledby":"assetgen-project-label",children:[e.jsx("li",{children:e.jsx("button",{type:"button","aria-selected":c===null,onClick:()=>{r(null),h(!1)},children:t("project.unassigned")})}),b.map(a=>e.jsx("li",{children:e.jsx("button",{type:"button","aria-selected":c===a.id,onClick:()=>{r(a.id),h(!1)},children:a.name})},a.id)),e.jsx("li",{className:"assetgen-project__menu-divider","aria-hidden":"true"}),e.jsx("li",{children:e.jsx("button",{type:"button",onClick:()=>{j()},children:t("project.new")})}),e.jsx("li",{children:e.jsx("button",{type:"button",onClick:()=>{h(!1),u(!0)},children:t("project.search")})})]}):null,v?e.jsx(de,{onClose:()=>u(!1),onSelect:a=>r(a)}):null]})}const ge=p.lazy(()=>U(()=>import("./SpriteRecipeWorkspace-BJUH1ddP.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(t=>({default:t.SpriteRecipeWorkspace})));function me(){const{t}=G(),g=n(s=>s.assetGenPrompt),c=n(s=>s.setAssetGenPrompt),r=n(s=>s.assetGenKind),l=n(s=>s.setAssetGenKind),i=n(s=>s.assetGenProvider),m=n(s=>s.assetGenVideoDuration),h=n(s=>s.setAssetGenVideoDuration),v=n(s=>s.assetGenVideoResolution),u=n(s=>s.setAssetGenVideoResolution),d=n(s=>s.assetGenVideoAspect),b=n(s=>s.setAssetGenVideoAspect),o=n(s=>s.activeGenerations),j=n(s=>s.assetGenItems),a=n(s=>s.generateAssetGen),k=n(s=>s.assetGenSaveFailures),x=n(s=>s.retryAssetGenSave),f=n(s=>s.setKeyingTarget),F=n(s=>s.setVectorizeTarget),A=n(s=>s.assetGenLastError),V=n(s=>s.setAssetGenLastError),I=n(s=>s.setUIMode),_=n(s=>s.assetGenWorkflow),S=n(s=>s.setAssetGenWorkflow),M=Y(),[T,C]=p.useState(null),[O,E]=p.useState(null),[D,W]=p.useState(0),z=p.useCallback(()=>{C(null),E(null)},[]),B=p.useCallback((s,y)=>{E(y),C(s)},[]),H=p.useCallback(()=>{document.getElementById("assetgen-prompt")?.focus()},[]),P=i==="grok"||i==="grok-api",N=r==="video"&&!P?"image":r,K=g.trim().length>0,L=e.jsxs("div",{className:"assetgen-workflow-tabs",role:"tablist","aria-label":t("sprite.tabs.label"),onKeyDown:M,children:[e.jsx("button",{type:"button",role:"tab","aria-selected":_==="generate",tabIndex:_==="generate"?0:-1,onClick:()=>S("generate"),children:t("sprite.tabs.generate")}),e.jsx("button",{type:"button",role:"tab","aria-selected":_==="sprite",tabIndex:_==="sprite"?0:-1,onClick:()=>S("sprite"),children:t("sprite.tabs.sprite")})]});return _==="sprite"?e.jsxs("section",{className:"assetgen-workspace","aria-labelledby":"assetgen-title",children:[e.jsxs("aside",{className:"assetgen-form",children:[e.jsx("h1",{id:"assetgen-title",children:t("sprite.title")}),e.jsx("p",{className:"assetgen-form__lede",children:t("sprite.lede")}),L]}),e.jsx("main",{className:"assetgen-results",children:e.jsx(p.Suspense,{fallback:e.jsx("p",{role:"status",children:t("sprite.loading")}),children:e.jsx(ge,{})})})]}):e.jsxs("section",{className:"assetgen-workspace","aria-labelledby":"assetgen-title",children:[e.jsxs("aside",{className:"assetgen-form",children:[e.jsx("h1",{id:"assetgen-title",children:t("assetGen.title")}),e.jsx("p",{className:"assetgen-form__lede",children:t("assetGen.lede")}),L,e.jsx(pe,{}),e.jsxs("div",{className:"assetgen-field",children:[e.jsx("label",{className:"assetgen-field__label",htmlFor:"assetgen-prompt",children:t("assetGen.prompt")}),e.jsx("textarea",{id:"assetgen-prompt",value:g,rows:4,placeholder:t("assetGen.promptPlaceholder"),onChange:s=>c(s.target.value)})]}),e.jsx(ie,{}),e.jsx(ce,{}),e.jsxs("div",{className:"assetgen-field",children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-kind-label",children:t("assetGen.kind")}),e.jsxs("div",{className:"assetgen-bg-picker",role:"group","aria-labelledby":"assetgen-kind-label",children:[e.jsx("button",{type:"button",className:N==="image"?"is-active":"","aria-pressed":N==="image",onClick:()=>l("image"),children:t("assetGen.kindImage")}),e.jsx("button",{type:"button",className:N==="video"?"is-active":"","aria-pressed":N==="video",disabled:!P,title:P?void 0:t("assetGen.videoGrokOnly"),onClick:()=>l("video"),children:t("assetGen.kindVideo")})]}),P?null:e.jsx("p",{className:"assetgen-field__hint",children:t("assetGen.videoGrokOnly")})]}),N==="video"?e.jsxs("div",{className:"assetgen-field",children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-video-label",children:t("assetGen.videoOptions")}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-label":t("assetGen.videoDuration"),children:[3,5,8].map(s=>e.jsxs("button",{type:"button",className:m===s?"is-active":"","aria-pressed":m===s,onClick:()=>h(s),children:[s,"s"]},s))}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-label":t("assetGen.videoResolution"),children:["480p","720p"].map(s=>e.jsx("button",{type:"button",className:v===s?"is-active":"","aria-pressed":v===s,onClick:()=>u(s),children:s},s))}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-label":t("assetGen.videoAspect"),children:["1:1","16:9","9:16"].map(s=>e.jsx("button",{type:"button",className:d===s?"is-active":"","aria-pressed":d===s,onClick:()=>b(s),children:s},s))})]}):null,e.jsx("button",{type:"button",className:"assetgen-generate",disabled:!K,onClick:()=>{a()},children:o>0?t("assetGen.generating"):t("assetGen.generate")}),K?null:e.jsx("p",{className:"assetgen-generate__hint",children:t("assetGen.generateHint")}),e.jsx(ee,{})]}),e.jsxs("main",{className:"assetgen-results",children:[e.jsxs("div",{className:"assetgen-results__main",children:[A?e.jsxs("div",{className:"assetgen-error",role:"alert",children:[e.jsxs("div",{className:"assetgen-error__text",children:[e.jsx("strong",{children:t("assetGen.errorTitle")}),e.jsx("span",{children:A})]}),e.jsx("button",{type:"button",className:"assetgen-error__dismiss",onClick:()=>V(null),children:t("assetGen.errorDismiss")})]}):null,j.length===0?e.jsx("div",{className:"assetgen-empty",children:D>0?e.jsxs(e.Fragment,{children:[e.jsx("h2",{children:t("assetGen.emptySessionTitle")}),e.jsx("p",{children:t("assetGen.emptySessionBody")}),e.jsx("button",{type:"button",className:"assetgen-empty__cta",onClick:()=>I("assets"),children:t("assetGen.emptySessionCta")})]}):e.jsxs(e.Fragment,{children:[e.jsx("h2",{children:t("assetGen.emptyTitle")}),e.jsx("p",{children:t("assetGen.emptyBody")}),e.jsx("button",{type:"button",className:"assetgen-empty__cta",onClick:H,children:t("assetGen.emptyCta")})]})}):e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"assetgen-saved-hint",children:[t("assetGen.savedHint")," ",e.jsx("button",{type:"button",className:"assetgen-saved-hint__link",onClick:()=>I("assets"),children:t("assetGen.savedLink")})]}),e.jsx("div",{className:"assetgen-grid",children:j.map(s=>{const y=s.kind==="edit",R=s.backgroundPreset==="transparent",w=s.mediaType==="video",$=t(w?"assetGen.videoFallback":"assetGen.imageFallback"),q=t(w?"assetGen.previewVideo":"assetGen.previewImage",{prompt:s.prompt?.trim()||$});return e.jsxs("figure",{className:`assetgen-tile${y?" is-keyed":""}${R?" is-alpha":""}`,children:[y?e.jsx("span",{className:"assetgen-tile__badge",children:t("keying.resultBadge")}):null,e.jsxs("button",{type:"button",className:"assetgen-tile__media","aria-label":q,onClick:()=>C(s),children:[w?e.jsx("video",{src:s.url||s.image,poster:s.thumb||void 0,muted:!0,playsInline:!0,preload:"metadata","aria-hidden":"true"}):e.jsx("img",{src:s.url||s.image,alt:"",loading:"lazy"}),e.jsx("span",{className:"assetgen-tile__open-hint","aria-hidden":"true",children:t(w?"assetGen.openHintVideo":"assetGen.openHintImage")})]}),e.jsx("figcaption",{title:s.prompt,children:s.prompt}),!y&&!R?e.jsx("button",{type:"button",className:"assetgen-tile__key",onClick:()=>f(s),children:t("keying.open")}):null,w?null:e.jsx("button",{type:"button",className:"assetgen-tile__key",onClick:()=>F(s),children:t("vectorize.open")}),!y&&s.requestId&&k.includes(s.requestId)?e.jsx("button",{type:"button",className:"assetgen-tile__retry",onClick:()=>{x(s.requestId)},children:t("project.saveRetry")}):null]},`${s.requestId}-${s.filename??s.createdAt}`)})})]})]}),e.jsx(le,{selectedAssetId:O,onPreview:B,onAssetsLoaded:W})]}),e.jsx(ae,{}),e.jsx(se,{}),T?e.jsx(te,{item:T,onClose:z}):null]})}const ke=Object.freeze(Object.defineProperty({__proto__:null,AssetGenWorkspace:me},Symbol.toStringTag,{value:"Module"}));export{ke as A,pe as P};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SpriteRecipeWorkspace-DBrYOYOK.js","assets/index-va83o9G5.js","assets/index-CxX85A3B.css","assets/App-B9y6oVuL.js","assets/AssetMediaLightbox-Be4arnGs.js","assets/useAgentDialogFocus-BDdVl-nq.js","assets/KeyingPanel-snhXKnA3.js"])))=>i.map(i=>d[i]);
2
+ import{f as p,j as e,_ as U}from"./index-va83o9G5.js";import{u as G,a as n,ab as Q,ac as Z,a9 as J,k as X,ad as Y,ae as ee,aa as se}from"./App-B9y6oVuL.js";import{A as te}from"./AssetMediaLightbox-Be4arnGs.js";import{K as ae}from"./KeyingPanel-snhXKnA3.js";const ne=48;function le({selectedAssetId:t,onPreview:g,onAssetsLoaded:c}){const{t:r}=G(),l=n(d=>d.selectedProjectId),i=n(d=>d.assetGenItems.length),[m,h]=p.useState([]),[v,u]=p.useState(!1);return p.useEffect(()=>{let d=!1;return Q({kind:null,folderId:l,tag:null,q:"",limit:ne}).then(b=>{if(d)return;const o=b.assets.filter(j=>j.filePath&&(j.kind==="image"||j.kind==="video"));h(o),c?.(o.length),u(!1)}).catch(()=>{d||u(!0)}),()=>{d=!0}},[l,i]),e.jsxs("aside",{className:"assetgen-rail","aria-label":r("assetGen.railTitle"),children:[e.jsx("h2",{className:"assetgen-rail__title",children:r("assetGen.railTitle")}),v?e.jsx("p",{className:"assetgen-rail__empty",children:r("assetGen.railError")}):m.length===0?e.jsx("p",{className:"assetgen-rail__empty",children:r("assetGen.railEmpty")}):e.jsx("div",{className:"assetgen-rail__list",role:"listbox","aria-label":r("assetGen.railTitle"),children:(()=>{const d=new Map;for(const o of m)d.set(o.name,(d.get(o.name)??0)+1);const b=new Map;return m.map(o=>{const j=o.filePath?Z(o.filePath):null;if(!j)return null;const a=t===o.id,k=d.get(o.name)??1,x=(b.get(o.name)??0)+1;b.set(o.name,x);const f=k>1?`#${x} ${o.name}`:o.name;return e.jsxs("button",{type:"button",role:"option","aria-selected":a,className:`assetgen-rail__tile${a?" is-selected":""}`,title:f,onClick:()=>g(J(o),o.id),children:[o.kind==="video"?e.jsx("video",{src:j,muted:!0,playsInline:!0,preload:"metadata","aria-hidden":"true"}):e.jsx("img",{src:j,alt:"",loading:"lazy",decoding:"async"}),e.jsx("span",{className:"assetgen-rail__name",children:f})]},o.id)})})()})]})}const re=[{value:"chroma-green",swatch:"#00c853",labelKey:"assetGen.bgChroma"},{value:"white",swatch:"#ffffff",labelKey:"assetGen.bgWhite"},{value:"black",swatch:"#111111",labelKey:"assetGen.bgBlack"},{value:"transparent",swatch:null,labelKey:"assetGen.bgTransparent"}];function ie(){const{t}=G(),g=n(i=>i.assetGenBackground),c=n(i=>i.setAssetGenBackground),r=n(i=>i.assetGenProvider),l=r!=="grok"&&r!=="grok-api";return e.jsxs("div",{className:"assetgen-field",children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-bg-label",children:t("assetGen.background")}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-labelledby":"assetgen-bg-label",children:re.map(i=>{const m=i.value==="transparent"&&!l;return e.jsxs("button",{type:"button",className:g===i.value?"is-active":"","aria-pressed":g===i.value,disabled:m,...m?{title:t("assetGen.bgTransparentGptOnly")}:{},onClick:()=>c(i.value),children:[e.jsx("span",{className:i.swatch===null?"assetgen-bg-picker__swatch assetgen-bg-picker__swatch--alpha":"assetgen-bg-picker__swatch",...i.swatch===null?{}:{style:{background:i.swatch}},"aria-hidden":"true"}),t(i.labelKey)]},i.value)})}),e.jsx("p",{className:"assetgen-field__hint",children:t(l?g==="transparent"?"assetGen.backgroundHintTransparent":"assetGen.backgroundHint":"assetGen.bgTransparentGptOnly")})]})}const oe=[{value:"oauth",labelKey:"assetGen.modelGpt"},{value:"grok",labelKey:"assetGen.modelGrok"}];function ce(){const{t}=G(),g=n(l=>l.assetGenProvider),c=n(l=>l.setAssetGenProvider),r=g==="grok"||g==="grok-api"?"grok":"oauth";return e.jsxs("div",{className:"assetgen-field",children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-model-label",children:t("assetGen.model")}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-labelledby":"assetgen-model-label",children:oe.map(l=>e.jsx("button",{type:"button",className:r===l.value?"is-active":"","aria-pressed":r===l.value,onClick:()=>c(l.value),children:t(l.labelKey)},l.value))})]})}function de({onClose:t,onSelect:g}){const{t:c}=G(),r=n(u=>u.assetsFolders),[l,i]=p.useState(""),m=p.useRef(null),h=X(!0,t),v=p.useMemo(()=>{const u=r.filter(b=>b.parentId===null),d=l.trim().toLowerCase();return d?u.filter(b=>b.name.toLowerCase().includes(d)):u},[r,l]);return e.jsx("div",{className:"assetgen-popup-backdrop",onClick:t,children:e.jsxs("div",{ref:h,className:"assetgen-popup",role:"dialog","aria-modal":"true","aria-label":c("project.search"),onClick:u=>u.stopPropagation(),children:[e.jsx("input",{ref:m,type:"search",value:l,placeholder:c("project.searchPlaceholder"),"aria-label":c("project.search"),onChange:u=>i(u.target.value)}),e.jsxs("ul",{role:"listbox","aria-label":c("project.select"),children:[e.jsx("li",{children:e.jsx("button",{type:"button",onClick:()=>{g(null),t()},children:c("project.unassigned")})}),v.map(u=>e.jsx("li",{children:e.jsx("button",{type:"button",onClick:()=>{g(u.id),t()},children:u.name})},u.id)),v.length===0&&l.trim()?e.jsx("li",{className:"assetgen-popup__empty",children:c("project.searchEmpty")}):null]}),e.jsx("button",{type:"button",className:"assetgen-popup__close",onClick:t,children:c("project.close")})]})})}function ue(){return e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:e.jsx("path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"})})}function pe(){const{t}=G(),g=n(a=>a.assetsFolders),c=n(a=>a.selectedProjectId),r=n(a=>a.setSelectedProject),l=n(a=>a.loadAssetFolders),i=n(a=>a.createAssetFolder),[m,h]=p.useState(!1),[v,u]=p.useState(!1),d=p.useRef(null);p.useEffect(()=>{l()},[l]),p.useEffect(()=>{c&&g.length>0&&!g.some(a=>a.id===c)&&r(null)},[g,c,r]),p.useEffect(()=>{if(!m)return;const a=x=>{d.current&&!d.current.contains(x.target)&&h(!1)},k=x=>{x.key==="Escape"&&h(!1)};return window.addEventListener("mousedown",a),window.addEventListener("keydown",k),()=>{window.removeEventListener("mousedown",a),window.removeEventListener("keydown",k)}},[m]);const b=g.filter(a=>a.parentId===null),o=b.find(a=>a.id===c),j=async()=>{const a=window.prompt(t("project.newPrompt"));if(!a||!a.trim())return;if(await i(a.trim(),null)){await l();const x=n.getState().assetsFolders.find(f=>f.parentId===null&&f.name===a.trim());x&&r(x.id)}h(!1)};return e.jsxs("div",{className:"assetgen-field assetgen-project",ref:d,children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-project-label",children:t("project.select")}),e.jsxs("button",{type:"button",className:"assetgen-project__trigger","aria-haspopup":"listbox","aria-expanded":m,"aria-labelledby":"assetgen-project-label",onClick:()=>h(a=>!a),children:[e.jsx(ue,{}),o?o.name:t("project.unassigned"),e.jsx("span",{className:"assetgen-project__caret","aria-hidden":"true",children:"▾"})]}),m?e.jsxs("ul",{className:"assetgen-project__menu",role:"listbox","aria-labelledby":"assetgen-project-label",children:[e.jsx("li",{children:e.jsx("button",{type:"button","aria-selected":c===null,onClick:()=>{r(null),h(!1)},children:t("project.unassigned")})}),b.map(a=>e.jsx("li",{children:e.jsx("button",{type:"button","aria-selected":c===a.id,onClick:()=>{r(a.id),h(!1)},children:a.name})},a.id)),e.jsx("li",{className:"assetgen-project__menu-divider","aria-hidden":"true"}),e.jsx("li",{children:e.jsx("button",{type:"button",onClick:()=>{j()},children:t("project.new")})}),e.jsx("li",{children:e.jsx("button",{type:"button",onClick:()=>{h(!1),u(!0)},children:t("project.search")})})]}):null,v?e.jsx(de,{onClose:()=>u(!1),onSelect:a=>r(a)}):null]})}const ge=p.lazy(()=>U(()=>import("./SpriteRecipeWorkspace-DBrYOYOK.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(t=>({default:t.SpriteRecipeWorkspace})));function me(){const{t}=G(),g=n(s=>s.assetGenPrompt),c=n(s=>s.setAssetGenPrompt),r=n(s=>s.assetGenKind),l=n(s=>s.setAssetGenKind),i=n(s=>s.assetGenProvider),m=n(s=>s.assetGenVideoDuration),h=n(s=>s.setAssetGenVideoDuration),v=n(s=>s.assetGenVideoResolution),u=n(s=>s.setAssetGenVideoResolution),d=n(s=>s.assetGenVideoAspect),b=n(s=>s.setAssetGenVideoAspect),o=n(s=>s.activeGenerations),j=n(s=>s.assetGenItems),a=n(s=>s.generateAssetGen),k=n(s=>s.assetGenSaveFailures),x=n(s=>s.retryAssetGenSave),f=n(s=>s.setKeyingTarget),F=n(s=>s.setVectorizeTarget),A=n(s=>s.assetGenLastError),V=n(s=>s.setAssetGenLastError),I=n(s=>s.setUIMode),_=n(s=>s.assetGenWorkflow),S=n(s=>s.setAssetGenWorkflow),M=Y(),[T,C]=p.useState(null),[O,E]=p.useState(null),[D,W]=p.useState(0),z=p.useCallback(()=>{C(null),E(null)},[]),B=p.useCallback((s,y)=>{E(y),C(s)},[]),H=p.useCallback(()=>{document.getElementById("assetgen-prompt")?.focus()},[]),P=i==="grok"||i==="grok-api",N=r==="video"&&!P?"image":r,K=g.trim().length>0,L=e.jsxs("div",{className:"assetgen-workflow-tabs",role:"tablist","aria-label":t("sprite.tabs.label"),onKeyDown:M,children:[e.jsx("button",{type:"button",role:"tab","aria-selected":_==="generate",tabIndex:_==="generate"?0:-1,onClick:()=>S("generate"),children:t("sprite.tabs.generate")}),e.jsx("button",{type:"button",role:"tab","aria-selected":_==="sprite",tabIndex:_==="sprite"?0:-1,onClick:()=>S("sprite"),children:t("sprite.tabs.sprite")})]});return _==="sprite"?e.jsxs("section",{className:"assetgen-workspace","aria-labelledby":"assetgen-title",children:[e.jsxs("aside",{className:"assetgen-form",children:[e.jsx("h1",{id:"assetgen-title",children:t("sprite.title")}),e.jsx("p",{className:"assetgen-form__lede",children:t("sprite.lede")}),L]}),e.jsx("main",{className:"assetgen-results",children:e.jsx(p.Suspense,{fallback:e.jsx("p",{role:"status",children:t("sprite.loading")}),children:e.jsx(ge,{})})})]}):e.jsxs("section",{className:"assetgen-workspace","aria-labelledby":"assetgen-title",children:[e.jsxs("aside",{className:"assetgen-form",children:[e.jsx("h1",{id:"assetgen-title",children:t("assetGen.title")}),e.jsx("p",{className:"assetgen-form__lede",children:t("assetGen.lede")}),L,e.jsx(pe,{}),e.jsxs("div",{className:"assetgen-field",children:[e.jsx("label",{className:"assetgen-field__label",htmlFor:"assetgen-prompt",children:t("assetGen.prompt")}),e.jsx("textarea",{id:"assetgen-prompt",value:g,rows:4,placeholder:t("assetGen.promptPlaceholder"),onChange:s=>c(s.target.value)})]}),e.jsx(ie,{}),e.jsx(ce,{}),e.jsxs("div",{className:"assetgen-field",children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-kind-label",children:t("assetGen.kind")}),e.jsxs("div",{className:"assetgen-bg-picker",role:"group","aria-labelledby":"assetgen-kind-label",children:[e.jsx("button",{type:"button",className:N==="image"?"is-active":"","aria-pressed":N==="image",onClick:()=>l("image"),children:t("assetGen.kindImage")}),e.jsx("button",{type:"button",className:N==="video"?"is-active":"","aria-pressed":N==="video",disabled:!P,title:P?void 0:t("assetGen.videoGrokOnly"),onClick:()=>l("video"),children:t("assetGen.kindVideo")})]}),P?null:e.jsx("p",{className:"assetgen-field__hint",children:t("assetGen.videoGrokOnly")})]}),N==="video"?e.jsxs("div",{className:"assetgen-field",children:[e.jsx("span",{className:"assetgen-field__label",id:"assetgen-video-label",children:t("assetGen.videoOptions")}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-label":t("assetGen.videoDuration"),children:[3,5,8].map(s=>e.jsxs("button",{type:"button",className:m===s?"is-active":"","aria-pressed":m===s,onClick:()=>h(s),children:[s,"s"]},s))}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-label":t("assetGen.videoResolution"),children:["480p","720p"].map(s=>e.jsx("button",{type:"button",className:v===s?"is-active":"","aria-pressed":v===s,onClick:()=>u(s),children:s},s))}),e.jsx("div",{className:"assetgen-bg-picker",role:"group","aria-label":t("assetGen.videoAspect"),children:["1:1","16:9","9:16"].map(s=>e.jsx("button",{type:"button",className:d===s?"is-active":"","aria-pressed":d===s,onClick:()=>b(s),children:s},s))})]}):null,e.jsx("button",{type:"button",className:"assetgen-generate",disabled:!K,onClick:()=>{a()},children:o>0?t("assetGen.generating"):t("assetGen.generate")}),K?null:e.jsx("p",{className:"assetgen-generate__hint",children:t("assetGen.generateHint")}),e.jsx(ee,{})]}),e.jsxs("main",{className:"assetgen-results",children:[e.jsxs("div",{className:"assetgen-results__main",children:[A?e.jsxs("div",{className:"assetgen-error",role:"alert",children:[e.jsxs("div",{className:"assetgen-error__text",children:[e.jsx("strong",{children:t("assetGen.errorTitle")}),e.jsx("span",{children:A})]}),e.jsx("button",{type:"button",className:"assetgen-error__dismiss",onClick:()=>V(null),children:t("assetGen.errorDismiss")})]}):null,j.length===0?e.jsx("div",{className:"assetgen-empty",children:D>0?e.jsxs(e.Fragment,{children:[e.jsx("h2",{children:t("assetGen.emptySessionTitle")}),e.jsx("p",{children:t("assetGen.emptySessionBody")}),e.jsx("button",{type:"button",className:"assetgen-empty__cta",onClick:()=>I("assets"),children:t("assetGen.emptySessionCta")})]}):e.jsxs(e.Fragment,{children:[e.jsx("h2",{children:t("assetGen.emptyTitle")}),e.jsx("p",{children:t("assetGen.emptyBody")}),e.jsx("button",{type:"button",className:"assetgen-empty__cta",onClick:H,children:t("assetGen.emptyCta")})]})}):e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"assetgen-saved-hint",children:[t("assetGen.savedHint")," ",e.jsx("button",{type:"button",className:"assetgen-saved-hint__link",onClick:()=>I("assets"),children:t("assetGen.savedLink")})]}),e.jsx("div",{className:"assetgen-grid",children:j.map(s=>{const y=s.kind==="edit",R=s.backgroundPreset==="transparent",w=s.mediaType==="video",$=t(w?"assetGen.videoFallback":"assetGen.imageFallback"),q=t(w?"assetGen.previewVideo":"assetGen.previewImage",{prompt:s.prompt?.trim()||$});return e.jsxs("figure",{className:`assetgen-tile${y?" is-keyed":""}${R?" is-alpha":""}`,children:[y?e.jsx("span",{className:"assetgen-tile__badge",children:t("keying.resultBadge")}):null,e.jsxs("button",{type:"button",className:"assetgen-tile__media","aria-label":q,onClick:()=>C(s),children:[w?e.jsx("video",{src:s.url||s.image,poster:s.thumb||void 0,muted:!0,playsInline:!0,preload:"metadata","aria-hidden":"true"}):e.jsx("img",{src:s.url||s.image,alt:"",loading:"lazy"}),e.jsx("span",{className:"assetgen-tile__open-hint","aria-hidden":"true",children:t(w?"assetGen.openHintVideo":"assetGen.openHintImage")})]}),e.jsx("figcaption",{title:s.prompt,children:s.prompt}),!y&&!R?e.jsx("button",{type:"button",className:"assetgen-tile__key",onClick:()=>f(s),children:t("keying.open")}):null,w?null:e.jsx("button",{type:"button",className:"assetgen-tile__key",onClick:()=>F(s),children:t("vectorize.open")}),!y&&s.requestId&&k.includes(s.requestId)?e.jsx("button",{type:"button",className:"assetgen-tile__retry",onClick:()=>{x(s.requestId)},children:t("project.saveRetry")}):null]},`${s.requestId}-${s.filename??s.createdAt}`)})})]})]}),e.jsx(le,{selectedAssetId:O,onPreview:B,onAssetsLoaded:W})]}),e.jsx(ae,{}),e.jsx(se,{}),T?e.jsx(te,{item:T,onClose:z}):null]})}const ke=Object.freeze(Object.defineProperty({__proto__:null,AssetGenWorkspace:me},Symbol.toStringTag,{value:"Module"}));export{ke as A,pe as P};
@@ -1 +1 @@
1
- import{f as a,j as t}from"./index-CHeVGnoy.js";import{u as E,a as x,m as P}from"./App-pMN1OjNW.js";import{u as F}from"./useAgentDialogFocus-DAeS9IWG.js";function R(){return t.jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18","aria-hidden":"true",children:t.jsx("path",{d:"M6 6l12 12M18 6 6 18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round"})})}function V({zoomed:e}){return t.jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18","aria-hidden":"true",children:[t.jsx("circle",{cx:"10.5",cy:"10.5",r:"6.5",fill:"none",stroke:"currentColor",strokeWidth:"1.7"}),t.jsx("path",{d:"M15.5 15.5 21 21M7.5 10.5h6",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"}),e?null:t.jsx("path",{d:"M10.5 7.5v6",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"})]})}function O({item:e,onClose:n,showAssetActions:u=!0}){const{t:o}=E(),[l,I]=a.useState(!1),r=e.metadata??null,[z,b]=a.useState(r),m=a.useId(),k=x(s=>s.setKeyingTarget),y=x(s=>s.setVectorizeTarget),v=x(s=>s.setCuratorTarget),p=a.useCallback(()=>n(),[n]),C=F(!0,p),i=e.mediaType==="video",j=e.kind!=="edit"&&!!e.filename&&e.backgroundPreset!=="transparent",d=r??z,g=typeof d?.spriteRunId=="string"?d.spriteRunId:null,h=typeof d?.manifestPath=="string"?d.manifestPath:null,_=!!(g&&h&&e.filename),w=!i&&!!e.filename&&!/\.svg$/i.test(e.filename??""),N=o(i?"assetGen.videoFallback":"assetGen.imageFallback"),f=e.prompt?.trim()||N,G=a.useCallback(()=>{k(e),n()},[e,n,k]),M=a.useCallback(()=>{y(e),n()},[e,n,y]),T=a.useCallback(()=>{!g||!h||!e.filename||(v({runId:g,atlasFile:e.filename,manifestFile:h}),n())},[e.filename,h,n,v,g]);return a.useEffect(()=>{b(r);const s=e.requestId?.startsWith("asset:")?e.requestId.slice(6):null;if(!s||r)return;let c=!0;return P(s).then(({asset:B})=>{c&&b(B.metadata)}).catch(()=>{c&&b(null)}),()=>{c=!1}},[r,e.requestId]),a.useEffect(()=>{const s=document.body.style.overflow,c=document.documentElement.style.overflow;return document.body.style.overflow="hidden",document.documentElement.style.overflow="hidden",()=>{document.body.style.overflow=s,document.documentElement.style.overflow=c}},[]),t.jsxs("div",{className:"assetgen-lightbox",role:"presentation",children:[t.jsx("button",{type:"button",className:"assetgen-lightbox__backdrop","aria-label":o("assetGen.closePreview"),onClick:p}),t.jsxs("section",{ref:C,className:"assetgen-lightbox__panel",role:"dialog","aria-modal":"true","aria-labelledby":m,children:[t.jsxs("header",{className:"assetgen-lightbox__header",children:[t.jsx("h2",{id:m,children:o("assetGen.previewDialogTitle",{prompt:f})}),t.jsx("button",{type:"button",className:"assetgen-lightbox__control","aria-label":o("assetGen.closePreview"),onClick:p,children:t.jsx(R,{})})]}),t.jsx("div",{className:["assetgen-lightbox__stage",e.kind==="edit"?"is-keyed":"",l?"is-zoomed":""].filter(Boolean).join(" "),tabIndex:l?0:void 0,children:i?t.jsx("video",{src:e.url||e.image,poster:e.thumb||void 0,controls:!0,autoPlay:!0,muted:!0,playsInline:!0,preload:"metadata","aria-label":f}):t.jsx("img",{src:e.url||e.image,alt:f})}),!i||u&&(j||_)?t.jsxs("footer",{className:"assetgen-lightbox__footer",children:[u&&_?t.jsx("button",{type:"button",className:"assetgen-lightbox__zoom assetgen-lightbox__curate",onClick:T,children:o("spriteCurator.open")}):null,u&&j?t.jsx("button",{type:"button",className:"assetgen-lightbox__zoom assetgen-lightbox__keybtn",onClick:G,children:o("keying.open")}):null,u&&w?t.jsx("button",{type:"button",className:"assetgen-lightbox__zoom assetgen-lightbox__vectorbtn",onClick:M,children:o("vectorize.open")}):null,i?null:t.jsxs("button",{type:"button",className:"assetgen-lightbox__zoom","aria-pressed":l,"aria-label":o(l?"assetGen.zoomOut":"assetGen.zoomIn"),onClick:()=>I(s=>!s),children:[t.jsx(V,{zoomed:l}),t.jsx("span",{children:o(l?"assetGen.zoomOut":"assetGen.zoomIn")})]})]}):null]})]})}export{O as A};
1
+ import{f as a,j as t}from"./index-va83o9G5.js";import{u as E,a as x,m as P}from"./App-B9y6oVuL.js";import{u as F}from"./useAgentDialogFocus-BDdVl-nq.js";function R(){return t.jsx("svg",{viewBox:"0 0 24 24",width:"18",height:"18","aria-hidden":"true",children:t.jsx("path",{d:"M6 6l12 12M18 6 6 18",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round"})})}function V({zoomed:e}){return t.jsxs("svg",{viewBox:"0 0 24 24",width:"18",height:"18","aria-hidden":"true",children:[t.jsx("circle",{cx:"10.5",cy:"10.5",r:"6.5",fill:"none",stroke:"currentColor",strokeWidth:"1.7"}),t.jsx("path",{d:"M15.5 15.5 21 21M7.5 10.5h6",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"}),e?null:t.jsx("path",{d:"M10.5 7.5v6",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round"})]})}function O({item:e,onClose:n,showAssetActions:u=!0}){const{t:o}=E(),[l,I]=a.useState(!1),r=e.metadata??null,[z,b]=a.useState(r),m=a.useId(),k=x(s=>s.setKeyingTarget),y=x(s=>s.setVectorizeTarget),v=x(s=>s.setCuratorTarget),p=a.useCallback(()=>n(),[n]),C=F(!0,p),i=e.mediaType==="video",j=e.kind!=="edit"&&!!e.filename&&e.backgroundPreset!=="transparent",d=r??z,g=typeof d?.spriteRunId=="string"?d.spriteRunId:null,h=typeof d?.manifestPath=="string"?d.manifestPath:null,_=!!(g&&h&&e.filename),w=!i&&!!e.filename&&!/\.svg$/i.test(e.filename??""),N=o(i?"assetGen.videoFallback":"assetGen.imageFallback"),f=e.prompt?.trim()||N,G=a.useCallback(()=>{k(e),n()},[e,n,k]),M=a.useCallback(()=>{y(e),n()},[e,n,y]),T=a.useCallback(()=>{!g||!h||!e.filename||(v({runId:g,atlasFile:e.filename,manifestFile:h}),n())},[e.filename,h,n,v,g]);return a.useEffect(()=>{b(r);const s=e.requestId?.startsWith("asset:")?e.requestId.slice(6):null;if(!s||r)return;let c=!0;return P(s).then(({asset:B})=>{c&&b(B.metadata)}).catch(()=>{c&&b(null)}),()=>{c=!1}},[r,e.requestId]),a.useEffect(()=>{const s=document.body.style.overflow,c=document.documentElement.style.overflow;return document.body.style.overflow="hidden",document.documentElement.style.overflow="hidden",()=>{document.body.style.overflow=s,document.documentElement.style.overflow=c}},[]),t.jsxs("div",{className:"assetgen-lightbox",role:"presentation",children:[t.jsx("button",{type:"button",className:"assetgen-lightbox__backdrop","aria-label":o("assetGen.closePreview"),onClick:p}),t.jsxs("section",{ref:C,className:"assetgen-lightbox__panel",role:"dialog","aria-modal":"true","aria-labelledby":m,children:[t.jsxs("header",{className:"assetgen-lightbox__header",children:[t.jsx("h2",{id:m,children:o("assetGen.previewDialogTitle",{prompt:f})}),t.jsx("button",{type:"button",className:"assetgen-lightbox__control","aria-label":o("assetGen.closePreview"),onClick:p,children:t.jsx(R,{})})]}),t.jsx("div",{className:["assetgen-lightbox__stage",e.kind==="edit"?"is-keyed":"",l?"is-zoomed":""].filter(Boolean).join(" "),tabIndex:l?0:void 0,children:i?t.jsx("video",{src:e.url||e.image,poster:e.thumb||void 0,controls:!0,autoPlay:!0,muted:!0,playsInline:!0,preload:"metadata","aria-label":f}):t.jsx("img",{src:e.url||e.image,alt:f})}),!i||u&&(j||_)?t.jsxs("footer",{className:"assetgen-lightbox__footer",children:[u&&_?t.jsx("button",{type:"button",className:"assetgen-lightbox__zoom assetgen-lightbox__curate",onClick:T,children:o("spriteCurator.open")}):null,u&&j?t.jsx("button",{type:"button",className:"assetgen-lightbox__zoom assetgen-lightbox__keybtn",onClick:G,children:o("keying.open")}):null,u&&w?t.jsx("button",{type:"button",className:"assetgen-lightbox__zoom assetgen-lightbox__vectorbtn",onClick:M,children:o("vectorize.open")}):null,i?null:t.jsxs("button",{type:"button",className:"assetgen-lightbox__zoom","aria-pressed":l,"aria-label":o(l?"assetGen.zoomOut":"assetGen.zoomIn"),onClick:()=>I(s=>!s),children:[t.jsx(V,{zoomed:l}),t.jsx("span",{children:o(l?"assetGen.zoomOut":"assetGen.zoomIn")})]})]}):null]})]})}export{O as A};
@@ -1 +1 @@
1
- import{f as d,j as s}from"./index-CHeVGnoy.js";import{u as I,a as b,_ as Y,$ as z,l as de,a0 as ce,a1 as ue,a2 as me,a3 as he,j as pe,a4 as fe,a5 as ge,a6 as xe,a7 as ve,D as be,p as je,m as ye,t as _e,a8 as we,a9 as ke,aa as Ne,k as Ae}from"./App-pMN1OjNW.js";import{A as Se}from"./AssetMediaLightbox-Bx0azN0S.js";import{K as Ie}from"./KeyingPanel-8J_RMrxg.js";import"./useAgentDialogFocus-DAeS9IWG.js";function Ce({folder:e,depth:a}){const{t:r}=I(),l=b(t=>t.assetsFilters.folderId),p=b(t=>t.setAssetsFilters),f=b(t=>t.renameAssetFolder),j=b(t=>t.deleteAssetFolder),o=b(t=>t.showToast),[i,g]=d.useState(!1),[_,h]=d.useState(e.name),[x,v]=d.useState(!1),k=l===e.id;async function m(){const t=_.trim();if(!t||t===e.name){h(e.name),g(!1);return}await f(e.id,t)||o(r("assets.actionFailed"),!0),g(!1)}async function u(){if(!x){v(!0);return}await j(e.id)||o(r("assets.actionFailed"),!0),v(!1)}return s.jsxs("div",{className:"assets-folder-row",style:{"--folder-depth":a},children:[i?s.jsx("input",{className:"assets-folder-input",value:_,autoFocus:!0,"aria-label":r("assets.renameFolder"),onChange:t=>h(t.target.value),onBlur:()=>{m()},onKeyDown:t=>{t.key==="Enter"&&m(),t.key==="Escape"&&(h(e.name),g(!1))}}):s.jsx("button",{type:"button",className:`assets-folder-row__name${k?" is-active":""}`,"aria-current":k?"page":void 0,onClick:()=>p({folderId:e.id,kind:null}),children:e.name}),!i&&s.jsxs("span",{className:"assets-folder-row__actions",children:[s.jsx("button",{type:"button","aria-label":r("assets.renameFolder"),onClick:()=>g(!0),children:s.jsx(Y,{})}),s.jsx("button",{type:"button","aria-label":r(x?"assets.confirmDelete":"assets.deleteFolder"),className:x?"is-danger is-armed":"",onClick:()=>{u()},children:x?r("assets.confirmDelete"):"×"})]})]})}function Fe(){const{t:e}=I(),a=b(m=>m.assetsFolders),r=b(m=>m.assetsFilters.folderId),l=b(m=>m.assetsFilters.kind),p=b(m=>m.setAssetsFilters),f=b(m=>m.createAssetFolder),j=b(m=>m.showToast),[o,i]=d.useState(!1),[g,_]=d.useState(""),h=r===null&&l!=="element",x=r===null&&l==="element",v=d.useMemo(()=>{const m=[],u=(t,c)=>a.filter(y=>y.parentId===t).forEach(y=>{m.push({folder:y,depth:c}),u(y.id,c+1)});return u(null,0),m},[a]);async function k(){const m=g.trim();if(!m){i(!1);return}await f(m,r)||j(e("assets.actionFailed"),!0),_(""),i(!1)}return s.jsxs("aside",{className:"assets-folders","aria-label":e("assets.rootFolder"),children:[s.jsxs("div",{className:"assets-folders__heading",children:[s.jsx("span",{children:e("assets.rootFolder")}),s.jsx("button",{type:"button","aria-label":e("assets.newFolder"),onClick:()=>i(!0),children:"+"})]}),s.jsxs("div",{className:"assets-folders__rows",children:[s.jsx("button",{type:"button",className:`assets-folder-all${h?" is-active":""}`,"aria-current":h?"page":void 0,onClick:()=>p({folderId:null,kind:null}),children:e("assets.allAssets")}),s.jsxs("button",{type:"button",className:`assets-folder-all assets-folder-elements${x?" is-active":""}`,"aria-current":x?"page":void 0,onClick:()=>p({folderId:null,kind:"element"}),children:[s.jsx("span",{className:"assets-folder-elements__glyph","aria-hidden":"true",children:"@"}),e("assets.elementLibrary")]}),v.map(({folder:m,depth:u})=>s.jsx(Ce,{folder:m,depth:u},m.id)),o&&s.jsx("input",{className:"assets-folder-input assets-folder-input--new",value:g,autoFocus:!0,"aria-label":e("assets.newFolder"),placeholder:e("assets.newFolder"),onChange:m=>_(m.target.value),onBlur:()=>{g.trim()||i(!1)},onKeyDown:m=>{m.key==="Enter"&&k(),m.key==="Escape"&&(_(""),i(!1))}})]})]})}let T={status:"idle",elements:[]},P=null;const G=new Set;function M(e){T=e,G.forEach(a=>a())}function Te(e){return G.add(e),()=>G.delete(e)}function O(e=!1){return!e&&T.status==="ready"?Promise.resolve(!0):P||(M({...T,status:"loading"}),P=de().then(a=>(M({status:"ready",elements:a}),!0)).catch(a=>(console.error("[ElementMembership] load failed",a),M({...T,status:"error"}),!1)).finally(()=>{P=null}),P)}function Ee(e){const a=[e,...T.elements.filter(r=>r.id!==e.id)];M({status:"ready",elements:a})}function Z(e){M({status:"ready",elements:T.elements.filter(a=>a.id!==e)})}function De(e){e.stopPropagation()}function Pe(e){e.stopPropagation()}function Me(e){(e.key==="Enter"||e.key===" ")&&e.stopPropagation()}async function Re(e,a){if(a){await ce(a.id),Z(a.id);return}const{asset:r}=await ue({result:{filePath:e.filePath??void 0},sourceAssetId:e.id,elementKind:"character",name:e.name,notes:e.notes??void 0,folderId:e.folderId,tags:[me(e.id)]});Ee(r)}function q({active:e,busy:a,label:r,onToggle:l}){return s.jsx("button",{type:"button",className:`asset-element-toggle${e?" is-active":""}`,title:r,"aria-label":r,"aria-pressed":e,"aria-busy":a||void 0,disabled:a,onPointerDown:De,onDoubleClick:Pe,onKeyDown:Me,onClick:p=>{p.stopPropagation(),l()},children:s.jsx("span",{className:"asset-element-toggle__glyph","aria-hidden":"true",children:"@"})})}function $e({item:e}){const{t:a}=I(),r=b(v=>v.showToast),l=b(v=>v.deleteAssetItem),[p,f]=d.useState(!1),j=e.kind==="element",o=j||(e.kind==="image"||e.kind==="video")&&!!e.filePath,i=a("assets.elementLibrary"),g=d.useSyncExternalStore(Te,()=>T,()=>T),_=!j&&o?z(g.elements,e.id):null,h=p||g.status==="loading"||g.status==="idle";if(d.useEffect(()=>{o&&!j&&O()},[o,j]),j){const v=async()=>{if(!p){f(!0);try{await l(e.id)?Z(e.id):r(a("assets.actionFailed"),!0)}finally{f(!1)}}};return s.jsx(q,{active:!0,busy:p,label:a("assets.removeFromElements"),onToggle:()=>{v()}})}if(!o)return null;async function x(){if(p||g.status==="loading")return;if(g.status!=="ready"&&!await O(!0)){r(a("assets.actionFailed"),!0);return}const v=z(T.elements,e.id);f(!0);try{await Re(e,v)}catch(k){console.error("[ElementMembership] toggle failed",k),r(a("assets.actionFailed"),!0)}finally{f(!1)}}return s.jsx(q,{active:!!_,busy:h,label:i,onToggle:()=>{x()}})}const L=12,V=180;function Be(e){return`/generated/${e.split("/").map(encodeURIComponent).join("/")}`}function Le({item:e,selected:a,onSelect:r,onPreview:l}){const{t:p}=I(),f=b(w=>w.deleteAssetItem),j=b(w=>w.updateAssetItem),o=b(w=>w.showToast),[i,g]=d.useState(!1),[_,h]=d.useState(!1),[x,v]=d.useState(!1),k=d.useRef(null);d.useEffect(()=>{const w=k.current;if(!w||e.kind!=="video"||typeof IntersectionObserver>"u"){v(!0);return}const R=new IntersectionObserver(([D])=>{D?.isIntersecting&&v(!0)},{rootMargin:"300px"});return R.observe(w),()=>R.disconnect()},[e.kind]);const m=e.kind==="element"&&!e.filePath?pe(e):e.filePath,u=m?Be(m):null,t=e.kind==="video",c=p(t?"assetGen.videoFallback":"assetGen.imageFallback"),y=p(t?"assetGen.previewVideo":"assetGen.previewImage",{prompt:e.name.trim()||c});async function A(){if(!i){g(!0);return}await f(e.id)||o(p("assets.actionFailed"),!0),g(!1)}const N=e.tags.includes("starred");async function S(){if(!_){h(!0);try{const w=ge(e.tags,N);await j(e.id,{tags:w})||o(p("assets.actionFailed"),!0)}finally{h(!1)}}}return s.jsxs("article",{ref:k,className:`assets-tile${a?" is-selected":""}`,tabIndex:0,"aria-selected":a,onClick:()=>r?.(e.id),onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&r&&(w.preventDefault(),r(e.id))},children:[s.jsxs("div",{className:"assets-tile__media",children:[u?s.jsxs("button",{type:"button",className:"assets-tile__preview","aria-label":y,onClick:w=>{w.stopPropagation(),r?.(e.id),l?.(e)},onKeyDown:w=>w.stopPropagation(),children:[t?x?s.jsx("video",{src:u,preload:"metadata",muted:!0,playsInline:!0,"aria-hidden":"true"}):null:s.jsx("img",{src:u,alt:"",loading:"lazy",decoding:"async"}),s.jsx("span",{className:"assets-tile__preview-hint","aria-hidden":"true",children:p(t?"assetGen.openHintVideo":"assetGen.openHintImage")})]}):s.jsx("span",{className:"assets-tile__glyph","aria-hidden":"true",children:e.kind.slice(0,1).toUpperCase()}),s.jsx(fe,{variant:"asset",active:N,busy:_,label:p(N?"assets.unstarAsset":"assets.starAsset"),onToggle:S}),s.jsx($e,{item:e}),s.jsx("button",{type:"button",className:`assets-tile__delete${i?" is-danger":""}`,"aria-label":p(i?"assets.confirmDelete":"assets.deleteAsset"),onClick:w=>{w.stopPropagation(),A()},children:i?p("assets.confirmDelete"):"×"})]}),s.jsxs("div",{className:"assets-tile__meta",children:[s.jsxs("div",{className:"assets-tile__title",children:[s.jsx("strong",{title:e.name,children:e.name}),s.jsx("span",{children:e.kind})]}),e.tags.length>0&&s.jsxs("div",{className:"assets-tile__tags",children:[e.tags.slice(0,2).map(w=>s.jsx("span",{children:w},w)),e.tags.length>2&&s.jsxs("span",{children:["+",e.tags.length-2]})]})]})]})}function Ue({onSelectAsset:e,onPreviewAsset:a,selectedId:r}){const{t:l}=I(),p=b(c=>c.assets),f=b(c=>c.assetsLoading),j=b(c=>c.assetsCursor),o=b(c=>c.loadMoreAssets),i=d.useRef(null),[g,_]=d.useState(960),h=Math.max(1,Math.floor((g+L)/(V+L))),x=d.useMemo(()=>Array.from({length:Math.ceil(p.length/h)},(c,y)=>p.slice(y*h,(y+1)*h)),[p,h]);d.useEffect(()=>{const c=i.current;if(!c)return;const y=()=>{const N=getComputedStyle(c),S=(parseFloat(N.paddingLeft)||0)+(parseFloat(N.paddingRight)||0);_(Math.max(0,c.clientWidth-S))};y();const A=new ResizeObserver(y);return A.observe(c),()=>A.disconnect()},[]);const v=Math.max(V,(g-L*(h-1))/h)+70+L,k=he({count:x.length,getScrollElement:()=>i.current,estimateSize:()=>v,overscan:4}),m=k.getVirtualItems(),u=m.at(-1)?.index,t=d.useCallback(()=>{j&&!f&&o()},[j,f,o]);return d.useEffect(()=>{u===x.length-1&&t()},[u,t,x.length]),s.jsxs("div",{ref:i,className:"assets-grid-scroll",children:[s.jsx("div",{className:"assets-grid-virtual",style:{height:k.getTotalSize()},children:m.map(c=>s.jsx("div",{className:"assets-grid-row",style:{transform:`translateY(${c.start}px)`,gridTemplateColumns:`repeat(${h}, minmax(0, 1fr))`},children:x[c.index]?.map(y=>s.jsx(Le,{item:y,selected:y.id===r,onSelect:e,onPreview:a},y.id))},c.key))}),j&&s.jsx("button",{type:"button",className:"assets-load-more",disabled:f,onClick:t,children:l("assets.loadMore")})]})}const Ke=5e3;function Ge({refs:e,onChange:a,maxRefs:r=6}){const{t:l}=I(),[p,f]=d.useState(null),[j,o]=d.useState(null),[i,g]=d.useState(null),_=d.useRef(null);d.useEffect(()=>()=>{_.current&&window.clearTimeout(_.current)},[]);const h=(u,t)=>{if(t<0||t>=e.length||u===t)return;const c=[...e],[y]=c.splice(u,1);c.splice(t,0,y),a(c)},x=u=>{if(e.length<=1)return;const t=e[u];a(e.filter((c,y)=>y!==u)),g({ref:t,index:u}),_.current&&window.clearTimeout(_.current),_.current=window.setTimeout(()=>g(null),Ke)},v=()=>{if(!i||e.some(t=>t.path===i.ref.path))return;const u=[...e];u.splice(Math.min(i.index,u.length),0,i.ref),a(u.slice(0,r)),g(null)},k=(u,t)=>{u.preventDefault();const c=u.dataTransfer.getData("application/ima2-element-ref")||p,y=e.findIndex(S=>S.id===c);if(f(null),y<0||y===t)return;const A=e[y],N=e.find((S,w)=>w!==y&&S.path===A.path);if(N){o(N.id),window.setTimeout(()=>o(null),1200);return}h(y,t)},m=(u,t)=>a(e.map((c,y)=>y===u?{...c,alt:t}:c));return s.jsxs("section",{className:"element-ref-grid","aria-labelledby":"element-refs-title",children:[s.jsxs("div",{className:"element-detail__section-heading",children:[s.jsxs("div",{children:[s.jsx("h3",{id:"element-refs-title",children:l("element.refsTitle")}),s.jsx("p",{children:l("element.refsHelp")})]}),s.jsxs("span",{children:[e.length," / ",r]})]}),s.jsx("div",{className:"element-ref-grid__items",children:e.map((u,t)=>s.jsxs("div",{className:`element-ref-card${p===u.id?" is-dragging":""}${j===u.id?" is-duplicate":""}`,draggable:!0,onDragStart:c=>{f(u.id),c.dataTransfer.setData("application/ima2-element-ref",u.id),c.dataTransfer.effectAllowed="move"},onDragEnd:()=>f(null),onDragOver:c=>c.preventDefault(),onDrop:c=>k(c,t),children:[s.jsxs("div",{className:"element-ref-card__image",children:[s.jsx("img",{src:u.previewUrl||u.path,alt:u.alt||l("element.refAlt",{n:t+1})}),t===0?s.jsx("span",{children:l("element.refPrimary")}):null]}),s.jsxs("div",{className:"element-ref-card__controls",children:[s.jsxs("label",{children:[l("element.refLabel"),s.jsx("input",{value:u.alt,maxLength:80,placeholder:l("element.refLabelPlaceholder"),onChange:c=>m(t,c.target.value)})]}),s.jsxs("div",{children:[s.jsx("button",{type:"button",disabled:t===0,onClick:()=>h(t,t-1),"aria-label":l("element.refMoveUp",{n:t+1}),children:"↑"}),s.jsx("button",{type:"button",disabled:t===e.length-1,onClick:()=>h(t,t+1),"aria-label":l("element.refMoveDown",{n:t+1}),children:"↓"}),s.jsx("button",{type:"button",className:"is-danger",disabled:e.length<=1,onClick:()=>x(t),"aria-label":l("element.refRemove"),children:l("element.refRemove")})]})]})]},u.id))}),i?s.jsxs("div",{className:"element-ref-grid__undo",role:"status",children:[s.jsx("span",{children:l("element.refRemoved")}),s.jsx("button",{type:"button",onClick:v,children:l("element.refUndo")})]}):null]})}const He=/^[A-Za-z0-9_-]{1,32}$/;function ze({bindings:e,refs:a,onSave:r}){const{t:l}=I(),p=e.find(v=>v.provider==="runway"),f=e.find(v=>v.provider==="higgsfield"),[j,o]=d.useState(p?.tag??""),[i,g]=d.useState(!1),[_,h]=d.useState(null),x=async()=>{const v=j.trim();if(v&&!He.test(v)){h(l("assets.bindingTagInvalid"));return}h(null),g(!0);try{const k=[{provider:"runway",mode:"stateless-refs",...v?{tag:v}:{}},...f?[f]:[]];await r(k)||h(l("assets.actionFailed"))}finally{g(!1)}};return s.jsxs("section",{className:"element-detail__section","data-testid":"character-bindings-card",children:[s.jsx("div",{className:"element-detail__section-heading",children:s.jsxs("div",{children:[s.jsx("h3",{children:l("assets.bindingsTitle")}),s.jsx("p",{children:l("assets.bindingsHelp")})]})}),s.jsxs("div",{className:"character-binding-row",children:[s.jsx("span",{className:"character-binding-row__provider",children:"Runway"}),s.jsx("span",{className:"character-binding-row__mode",children:l("assets.bindingStateless")}),s.jsx("input",{value:j,maxLength:32,placeholder:l("assets.bindingTagPlaceholder"),"aria-label":l("assets.bindingTagPlaceholder"),onChange:v=>o(v.target.value)}),s.jsx("button",{type:"button",disabled:i,onClick:()=>{x()},children:l(i?"assets.bindingSaving":"assets.bindingSave")})]}),xe(a)?s.jsx("p",{className:"element-detail__error",role:"alert",children:l("assets.bindingCapWarning",{count:a.length})}):null,s.jsxs("div",{className:"character-binding-row character-binding-row--locked",children:[s.jsx("span",{className:"character-binding-row__provider",children:"Higgsfield"}),f?.status?s.jsx("span",{className:"character-binding-row__status",children:f.status}):null,s.jsx("button",{type:"button",disabled:!0,title:l("assets.bindingTrainLockedHint"),children:l("assets.bindingTrain")}),s.jsx("span",{className:"character-binding-row__badge",children:l("assets.bindingPaidPlan")})]}),f&&ve(a,f)?s.jsx("p",{className:"element-detail__error",role:"alert",children:l("assets.bindingDriftWarning")}):null,_?s.jsx("p",{className:"element-detail__error",role:"alert",children:_}):null]})}const Oe=["character","product","style","scene"],W=e=>e[0].toUpperCase()+e.slice(1);function Q(e){return{id:e?.id,name:e?.name??"",kind:e?.kind??"character",refs:(e?.refs??[]).filter(a=>typeof a=="string"&&a.length>0).map((a,r)=>({id:`${e?.id??"new"}-${r}-${a}`,path:a,previewUrl:`/generated/${a.split("/").map(encodeURIComponent).join("/")}`,alt:""})),notes:e?.notes??"",defaultStrength:e?.defaultStrength??.75}}function qe({element:e,saving:a,testing:r,onSave:l,onDelete:p,onRunTestSheet:f,onSaveBindings:j}){const{t:o}=I(),[i,g]=d.useState(()=>Q(e)),[_,h]=d.useState(null);d.useEffect(()=>{g(Q(e)),h(null)},[e]);const x=800-i.notes.length,v=d.useMemo(()=>i.notes.trim()?`[Element: ${i.name.trim()||"Untitled"}] ${i.notes.trim()}`:null,[i.name,i.notes]),k=(t,c)=>g(y=>({...y,[t]:c})),m=async()=>{if(!i.name.trim())return h(o("element.errorName"));if(!i.refs.length)return h(o("element.errorRefs"));h(null),await l({...i,name:i.name.trim(),notes:i.notes.trim()?i.notes:""})},u=Oe.map(t=>({value:t,label:o(`element.kind${W(t)}`)}));return s.jsxs("aside",{className:"element-detail","aria-label":o("element.ariaLabel"),children:[s.jsxs("header",{className:"element-detail__header",children:[s.jsxs("div",{children:[s.jsx("span",{children:o("element.title")}),s.jsx("h2",{children:o(e?"element.titleEdit":"element.titleNew")})]}),e?s.jsx("span",{className:"element-detail__status",children:o("element.saved")}):null]}),s.jsxs("label",{className:"element-detail__field",children:[o("element.name"),s.jsx("input",{value:i.name,maxLength:120,placeholder:o("element.namePlaceholder"),onChange:t=>k("name",t.target.value)})]}),s.jsx(be,{title:o("element.kind"),items:u,value:i.kind,onChange:t=>k("kind",t)}),s.jsx("p",{className:"element-detail__kind-help",children:o(`element.help${W(i.kind)}`)}),s.jsx(Ge,{refs:i.refs,onChange:t=>k("refs",t),maxRefs:6}),e&&i.kind==="character"&&j?s.jsx(ze,{bindings:e.characterBindings??[],refs:e.refs,onSave:t=>j(e.id,t)}):null,s.jsxs("section",{className:"element-detail__section",children:[s.jsxs("div",{className:"element-detail__section-heading",children:[s.jsxs("div",{children:[s.jsx("h3",{children:o("element.notes")}),s.jsx("p",{children:o("element.notesHelp")})]}),x<=100?s.jsx("span",{children:o("element.remaining",{n:x})}):null]}),s.jsx("textarea",{value:i.notes,maxLength:800,rows:6,placeholder:o("element.notesPlaceholder"),onChange:t=>k("notes",t.target.value)}),v?s.jsx("p",{className:"element-detail__note-preview",children:v}):null]}),s.jsxs("section",{className:"element-detail__section",children:[s.jsxs("div",{className:"element-detail__section-heading",children:[s.jsxs("div",{children:[s.jsx("h3",{children:o("element.strength")}),s.jsx("p",{children:o("element.strengthHelp")})]}),s.jsx("output",{children:i.defaultStrength.toFixed(2)})]}),s.jsx("input",{className:"element-detail__strength",type:"range",min:"0",max:"1",step:"0.05",value:i.defaultStrength,onChange:t=>k("defaultStrength",Number(t.target.value))}),s.jsx("button",{type:"button",className:"element-detail__reset",onClick:()=>k("defaultStrength",.75),children:o("element.resetDefault")})]}),_?s.jsx("p",{className:"element-detail__error",role:"alert",children:_}):null,s.jsxs("footer",{className:"element-detail__actions",children:[s.jsx("button",{type:"button",className:"element-detail__save",disabled:a,onClick:()=>{m()},children:o(a?"element.saving":"element.save")}),s.jsx("button",{type:"button",disabled:!e||r,onClick:()=>e&&void f(e.id),children:o(r?"element.testing":"element.runTest")}),e&&p?s.jsx("button",{type:"button",className:"is-danger",onClick:()=>{p(e.id)},children:o("element.delete")}):null]})]})}const Ve=["image","video","element","preset","template"];function We(e,a){return Ae(e,a)}function ts(){const{t:e}=I(),a=b(n=>n.assets),r=b(n=>n.assetsTags),l=b(n=>n.assetsFilters),p=b(n=>n.assetsLoading),f=b(n=>n.assetsLoadError),j=b(n=>n.loadAssets),o=b(n=>n.setUIMode),i=b(n=>n.setAssetsFilters),g=b(n=>n.updateAssetItem),_=b(n=>n.deleteAssetItem),h=b(n=>n.showToast),[x,v]=d.useState(l.q),[k,m]=d.useState(null),[u,t]=d.useState(null),[c,y]=d.useState(null),A=je(),N=b(n=>n.keyingTarget),S=b(n=>n.pendingAssetDetailId);d.useEffect(()=>{if(!S)return;const n=S;b.setState({pendingAssetDetailId:null});const E=b.getState().assets.find(F=>F.id===n)??null;y(E),i({kind:null,folderId:null,tag:null,q:""}),v(""),m(n),E||ye(n).then(({asset:F})=>{b.setState(K=>({assets:[F,...K.assets.filter(B=>B.id!==F.id)]})),y(F)}).catch(()=>{})},[S,i]);const w=d.useRef(!1);d.useEffect(()=>{if(N){w.current=!0;return}w.current&&(w.current=!1,j(!0))},[N,j]);const R=d.useMemo(()=>[{value:"",label:e("assets.kindAll")},...Ve.map(n=>({value:n,label:e(`assets.kind${n[0].toUpperCase()}${n.slice(1)}`)}))],[e]);d.useEffect(()=>{j(!0)},[j]),d.useEffect(()=>{const n=window.setTimeout(()=>i({q:x}),300);return()=>window.clearTimeout(n)},[x,i]);const D=!!(l.q||l.kind||l.tag),J=a.length===0&&!p,U=l.kind==="element"&&!l.folderId&&!l.q&&!l.tag,X=U?"assets.emptyElementsTitle":l.folderId?"assets.emptyFolderTitle":D?"assets.emptySearchTitle":"assets.emptyTitle",ee=U?"assets.emptyElementsBody":l.folderId?"assets.emptyFolderBody":D?"assets.emptySearchBody":"assets.emptyBody",C=a.find(n=>n.id===k)??(c?.id===k?c:null),H=C?.kind==="element"?Ye(C):null,$=d.useCallback(()=>m(null),[]),se=We(!!(C&&A),$),te=d.useCallback(()=>t(null),[]),ae=async n=>{(!n.id||!await g(n.id,{name:n.name,notes:n.notes}))&&h(e("assets.actionFailed"),!0)},ne=async(n,E)=>{const K={...a.find(oe=>oe.id===n)?.metadata??{},characterBindings:E},B=await g(n,{metadata:K});return B||h(e("assets.actionFailed"),!0),B},le=async(n,E)=>{const F=await g(n,{name:E});return F||h(e("assets.actionFailed"),!0),F},ie=async n=>{await _(n)?$():h(e("assets.actionFailed"),!0)},re=async()=>h(e("assets.testSheetsUnavailable"),!0);return s.jsxs("section",{className:`assets-workspace${C?" assets-workspace--detail-open":""}`,"aria-labelledby":"assets-title",children:[s.jsx(Fe,{}),s.jsxs("main",{className:"assets-workspace__main",children:[s.jsxs("header",{className:"assets-toolbar",children:[s.jsxs("div",{className:"assets-toolbar__title",children:[s.jsx("h1",{id:"assets-title",children:e("assets.title")}),s.jsx("span",{children:e("assets.itemCount",{count:a.length})})]}),s.jsxs("div",{className:"assets-toolbar__controls",children:[s.jsx("input",{type:"search",value:x,placeholder:e("assets.searchPlaceholder"),"aria-label":e("assets.searchPlaceholder"),onChange:n=>v(n.target.value)}),s.jsx(_e,{items:R,value:l.kind??"",onChange:n=>i({kind:n||null}),ariaLabel:e("assets.kindAll")}),a.length>0&&s.jsx("button",{type:"button",className:"assets-clear-btn",onClick:async()=>{confirm(e("assets.clearConfirm"))&&(await we(),j(!0))},children:e("assets.clearAll")})]}),r.length>0&&s.jsx("div",{className:"assets-tag-filter",children:r.map(n=>s.jsx("button",{type:"button",className:l.tag===n?"is-active":"",onClick:()=>i({tag:l.tag===n?null:n}),children:n},n))})]}),f&&a.length===0?s.jsxs("div",{className:"assets-empty",role:"alert",children:[s.jsx("h2",{children:e("assets.loadErrorTitle")}),s.jsx("p",{children:e("assets.loadErrorBody")}),s.jsx("button",{type:"button",className:"assets-empty__cta",onClick:()=>{j(!0)},children:e("assets.retry")})]}):J?s.jsxs("div",{className:"assets-empty",children:[s.jsx("h2",{children:e(X)}),s.jsx("p",{children:e(ee)}),U||!D&&!l.folderId?s.jsx("button",{type:"button",className:"assets-empty__cta",onClick:()=>o("classic"),children:e("nav.create")}):null]}):s.jsx(Ue,{selectedId:k??void 0,onSelectAsset:m,onPreviewAsset:n=>t(ke(n))})]}),C&&A?s.jsx("button",{type:"button",className:"assets-workspace__detail-backdrop","aria-label":e("assets.detailClose"),onClick:$}):null,C&&s.jsxs("aside",{ref:se,className:"assets-workspace__detail",role:A?"dialog":void 0,"aria-modal":A?!0:void 0,"aria-label":e("assets.detailAria",{name:C.name}),children:[s.jsx("button",{type:"button",className:"assets-workspace__detail-close",onClick:$,"aria-label":e("assets.detailClose"),children:"×"}),H?s.jsx(qe,{element:H,saving:!1,testing:!1,onSave:ae,onSaveBindings:ne,onDelete:ie,onRunTestSheet:re}):s.jsx(Qe,{asset:C,onRename:n=>le(C.id,n)})]}),s.jsx(Ie,{}),s.jsx(Ne,{}),u?s.jsx(Se,{item:u,onClose:te}):null]})}function Qe({asset:e,onRename:a}){const{t:r,locale:l}=I(),[p,f]=d.useState(!1),[j,o]=d.useState(e.name),i=d.useRef(!1),g=typeof e.metadata?.prompt=="string"?e.metadata.prompt:null,_=typeof e.metadata?.provider=="string"?e.metadata.provider:null;d.useEffect(()=>{o(e.name),f(!1)},[e.id,e.name]);async function h(){if(i.current)return;const x=j.trim();if(!x||x===e.name){o(e.name),f(!1);return}i.current=!0;try{await a(x)||o(e.name)}finally{i.current=!1,f(!1)}}return s.jsxs("div",{className:"assets-workspace__detail-meta",children:[s.jsx("div",{className:"assets-workspace__detail-title",children:p?s.jsx("input",{className:"assets-folder-input assets-workspace__detail-name-input",value:j,autoFocus:!0,"aria-label":r("assets.renameAsset"),onChange:x=>o(x.target.value),onBlur:()=>{h()},onKeyDown:x=>{x.key==="Enter"&&h(),x.key==="Escape"&&(o(e.name),f(!1))}}):s.jsxs(s.Fragment,{children:[s.jsx("h2",{children:e.name}),s.jsx("button",{type:"button",className:"assets-workspace__detail-rename","aria-label":r("assets.renameAsset"),title:r("assets.renameAsset"),onClick:()=>f(!0),children:s.jsx(Y,{})})]})}),s.jsxs("dl",{children:[s.jsx("dt",{children:r("assets.detailKind")}),s.jsx("dd",{children:r(`assets.kind${e.kind[0].toUpperCase()}${e.kind.slice(1)}`)}),s.jsx("dt",{children:r("assets.detailCreated")}),s.jsx("dd",{children:new Intl.DateTimeFormat(l,{dateStyle:"medium",timeStyle:"short"}).format(new Date(e.createdAt))}),_?s.jsxs(s.Fragment,{children:[s.jsx("dt",{children:r("assets.detailProvider")}),s.jsx("dd",{children:_})]}):null,g?s.jsxs(s.Fragment,{children:[s.jsx("dt",{children:r("assets.detailPrompt")}),s.jsx("dd",{className:"assets-workspace__detail-prompt",children:g})]}):null,e.tags.length>0?s.jsxs(s.Fragment,{children:[s.jsx("dt",{children:r("assets.detailTags")}),s.jsx("dd",{children:e.tags.join(", ")})]}):null]})]})}function Ye(e){const a=e.metadata??{},r=a.elementKind,l=a.refs,p=Array.isArray(a.characterBindings)?a.characterBindings:void 0;return{id:e.id,name:e.name,kind:r==="product"||r==="style"||r==="scene"?r:"character",refs:Array.isArray(l)?l.filter(f=>typeof f=="string"):e.filePath?[e.filePath]:[],notes:e.notes??void 0,defaultStrength:typeof a.defaultStrength=="number"?a.defaultStrength:void 0,characterBindings:p}}export{ts as AssetsWorkspace};
1
+ import{f as d,j as s}from"./index-va83o9G5.js";import{u as I,a as b,_ as Y,$ as z,l as de,a0 as ce,a1 as ue,a2 as me,a3 as he,j as pe,a4 as fe,a5 as ge,a6 as xe,a7 as ve,D as be,p as je,m as ye,t as _e,a8 as we,a9 as ke,aa as Ne,k as Ae}from"./App-B9y6oVuL.js";import{A as Se}from"./AssetMediaLightbox-Be4arnGs.js";import{K as Ie}from"./KeyingPanel-snhXKnA3.js";import"./useAgentDialogFocus-BDdVl-nq.js";function Ce({folder:e,depth:a}){const{t:r}=I(),l=b(t=>t.assetsFilters.folderId),p=b(t=>t.setAssetsFilters),f=b(t=>t.renameAssetFolder),j=b(t=>t.deleteAssetFolder),o=b(t=>t.showToast),[i,g]=d.useState(!1),[_,h]=d.useState(e.name),[x,v]=d.useState(!1),k=l===e.id;async function m(){const t=_.trim();if(!t||t===e.name){h(e.name),g(!1);return}await f(e.id,t)||o(r("assets.actionFailed"),!0),g(!1)}async function u(){if(!x){v(!0);return}await j(e.id)||o(r("assets.actionFailed"),!0),v(!1)}return s.jsxs("div",{className:"assets-folder-row",style:{"--folder-depth":a},children:[i?s.jsx("input",{className:"assets-folder-input",value:_,autoFocus:!0,"aria-label":r("assets.renameFolder"),onChange:t=>h(t.target.value),onBlur:()=>{m()},onKeyDown:t=>{t.key==="Enter"&&m(),t.key==="Escape"&&(h(e.name),g(!1))}}):s.jsx("button",{type:"button",className:`assets-folder-row__name${k?" is-active":""}`,"aria-current":k?"page":void 0,onClick:()=>p({folderId:e.id,kind:null}),children:e.name}),!i&&s.jsxs("span",{className:"assets-folder-row__actions",children:[s.jsx("button",{type:"button","aria-label":r("assets.renameFolder"),onClick:()=>g(!0),children:s.jsx(Y,{})}),s.jsx("button",{type:"button","aria-label":r(x?"assets.confirmDelete":"assets.deleteFolder"),className:x?"is-danger is-armed":"",onClick:()=>{u()},children:x?r("assets.confirmDelete"):"×"})]})]})}function Fe(){const{t:e}=I(),a=b(m=>m.assetsFolders),r=b(m=>m.assetsFilters.folderId),l=b(m=>m.assetsFilters.kind),p=b(m=>m.setAssetsFilters),f=b(m=>m.createAssetFolder),j=b(m=>m.showToast),[o,i]=d.useState(!1),[g,_]=d.useState(""),h=r===null&&l!=="element",x=r===null&&l==="element",v=d.useMemo(()=>{const m=[],u=(t,c)=>a.filter(y=>y.parentId===t).forEach(y=>{m.push({folder:y,depth:c}),u(y.id,c+1)});return u(null,0),m},[a]);async function k(){const m=g.trim();if(!m){i(!1);return}await f(m,r)||j(e("assets.actionFailed"),!0),_(""),i(!1)}return s.jsxs("aside",{className:"assets-folders","aria-label":e("assets.rootFolder"),children:[s.jsxs("div",{className:"assets-folders__heading",children:[s.jsx("span",{children:e("assets.rootFolder")}),s.jsx("button",{type:"button","aria-label":e("assets.newFolder"),onClick:()=>i(!0),children:"+"})]}),s.jsxs("div",{className:"assets-folders__rows",children:[s.jsx("button",{type:"button",className:`assets-folder-all${h?" is-active":""}`,"aria-current":h?"page":void 0,onClick:()=>p({folderId:null,kind:null}),children:e("assets.allAssets")}),s.jsxs("button",{type:"button",className:`assets-folder-all assets-folder-elements${x?" is-active":""}`,"aria-current":x?"page":void 0,onClick:()=>p({folderId:null,kind:"element"}),children:[s.jsx("span",{className:"assets-folder-elements__glyph","aria-hidden":"true",children:"@"}),e("assets.elementLibrary")]}),v.map(({folder:m,depth:u})=>s.jsx(Ce,{folder:m,depth:u},m.id)),o&&s.jsx("input",{className:"assets-folder-input assets-folder-input--new",value:g,autoFocus:!0,"aria-label":e("assets.newFolder"),placeholder:e("assets.newFolder"),onChange:m=>_(m.target.value),onBlur:()=>{g.trim()||i(!1)},onKeyDown:m=>{m.key==="Enter"&&k(),m.key==="Escape"&&(_(""),i(!1))}})]})]})}let T={status:"idle",elements:[]},P=null;const G=new Set;function M(e){T=e,G.forEach(a=>a())}function Te(e){return G.add(e),()=>G.delete(e)}function O(e=!1){return!e&&T.status==="ready"?Promise.resolve(!0):P||(M({...T,status:"loading"}),P=de().then(a=>(M({status:"ready",elements:a}),!0)).catch(a=>(console.error("[ElementMembership] load failed",a),M({...T,status:"error"}),!1)).finally(()=>{P=null}),P)}function Ee(e){const a=[e,...T.elements.filter(r=>r.id!==e.id)];M({status:"ready",elements:a})}function Z(e){M({status:"ready",elements:T.elements.filter(a=>a.id!==e)})}function De(e){e.stopPropagation()}function Pe(e){e.stopPropagation()}function Me(e){(e.key==="Enter"||e.key===" ")&&e.stopPropagation()}async function Re(e,a){if(a){await ce(a.id),Z(a.id);return}const{asset:r}=await ue({result:{filePath:e.filePath??void 0},sourceAssetId:e.id,elementKind:"character",name:e.name,notes:e.notes??void 0,folderId:e.folderId,tags:[me(e.id)]});Ee(r)}function q({active:e,busy:a,label:r,onToggle:l}){return s.jsx("button",{type:"button",className:`asset-element-toggle${e?" is-active":""}`,title:r,"aria-label":r,"aria-pressed":e,"aria-busy":a||void 0,disabled:a,onPointerDown:De,onDoubleClick:Pe,onKeyDown:Me,onClick:p=>{p.stopPropagation(),l()},children:s.jsx("span",{className:"asset-element-toggle__glyph","aria-hidden":"true",children:"@"})})}function $e({item:e}){const{t:a}=I(),r=b(v=>v.showToast),l=b(v=>v.deleteAssetItem),[p,f]=d.useState(!1),j=e.kind==="element",o=j||(e.kind==="image"||e.kind==="video")&&!!e.filePath,i=a("assets.elementLibrary"),g=d.useSyncExternalStore(Te,()=>T,()=>T),_=!j&&o?z(g.elements,e.id):null,h=p||g.status==="loading"||g.status==="idle";if(d.useEffect(()=>{o&&!j&&O()},[o,j]),j){const v=async()=>{if(!p){f(!0);try{await l(e.id)?Z(e.id):r(a("assets.actionFailed"),!0)}finally{f(!1)}}};return s.jsx(q,{active:!0,busy:p,label:a("assets.removeFromElements"),onToggle:()=>{v()}})}if(!o)return null;async function x(){if(p||g.status==="loading")return;if(g.status!=="ready"&&!await O(!0)){r(a("assets.actionFailed"),!0);return}const v=z(T.elements,e.id);f(!0);try{await Re(e,v)}catch(k){console.error("[ElementMembership] toggle failed",k),r(a("assets.actionFailed"),!0)}finally{f(!1)}}return s.jsx(q,{active:!!_,busy:h,label:i,onToggle:()=>{x()}})}const L=12,V=180;function Be(e){return`/generated/${e.split("/").map(encodeURIComponent).join("/")}`}function Le({item:e,selected:a,onSelect:r,onPreview:l}){const{t:p}=I(),f=b(w=>w.deleteAssetItem),j=b(w=>w.updateAssetItem),o=b(w=>w.showToast),[i,g]=d.useState(!1),[_,h]=d.useState(!1),[x,v]=d.useState(!1),k=d.useRef(null);d.useEffect(()=>{const w=k.current;if(!w||e.kind!=="video"||typeof IntersectionObserver>"u"){v(!0);return}const R=new IntersectionObserver(([D])=>{D?.isIntersecting&&v(!0)},{rootMargin:"300px"});return R.observe(w),()=>R.disconnect()},[e.kind]);const m=e.kind==="element"&&!e.filePath?pe(e):e.filePath,u=m?Be(m):null,t=e.kind==="video",c=p(t?"assetGen.videoFallback":"assetGen.imageFallback"),y=p(t?"assetGen.previewVideo":"assetGen.previewImage",{prompt:e.name.trim()||c});async function A(){if(!i){g(!0);return}await f(e.id)||o(p("assets.actionFailed"),!0),g(!1)}const N=e.tags.includes("starred");async function S(){if(!_){h(!0);try{const w=ge(e.tags,N);await j(e.id,{tags:w})||o(p("assets.actionFailed"),!0)}finally{h(!1)}}}return s.jsxs("article",{ref:k,className:`assets-tile${a?" is-selected":""}`,tabIndex:0,"aria-selected":a,onClick:()=>r?.(e.id),onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&r&&(w.preventDefault(),r(e.id))},children:[s.jsxs("div",{className:"assets-tile__media",children:[u?s.jsxs("button",{type:"button",className:"assets-tile__preview","aria-label":y,onClick:w=>{w.stopPropagation(),r?.(e.id),l?.(e)},onKeyDown:w=>w.stopPropagation(),children:[t?x?s.jsx("video",{src:u,preload:"metadata",muted:!0,playsInline:!0,"aria-hidden":"true"}):null:s.jsx("img",{src:u,alt:"",loading:"lazy",decoding:"async"}),s.jsx("span",{className:"assets-tile__preview-hint","aria-hidden":"true",children:p(t?"assetGen.openHintVideo":"assetGen.openHintImage")})]}):s.jsx("span",{className:"assets-tile__glyph","aria-hidden":"true",children:e.kind.slice(0,1).toUpperCase()}),s.jsx(fe,{variant:"asset",active:N,busy:_,label:p(N?"assets.unstarAsset":"assets.starAsset"),onToggle:S}),s.jsx($e,{item:e}),s.jsx("button",{type:"button",className:`assets-tile__delete${i?" is-danger":""}`,"aria-label":p(i?"assets.confirmDelete":"assets.deleteAsset"),onClick:w=>{w.stopPropagation(),A()},children:i?p("assets.confirmDelete"):"×"})]}),s.jsxs("div",{className:"assets-tile__meta",children:[s.jsxs("div",{className:"assets-tile__title",children:[s.jsx("strong",{title:e.name,children:e.name}),s.jsx("span",{children:e.kind})]}),e.tags.length>0&&s.jsxs("div",{className:"assets-tile__tags",children:[e.tags.slice(0,2).map(w=>s.jsx("span",{children:w},w)),e.tags.length>2&&s.jsxs("span",{children:["+",e.tags.length-2]})]})]})]})}function Ue({onSelectAsset:e,onPreviewAsset:a,selectedId:r}){const{t:l}=I(),p=b(c=>c.assets),f=b(c=>c.assetsLoading),j=b(c=>c.assetsCursor),o=b(c=>c.loadMoreAssets),i=d.useRef(null),[g,_]=d.useState(960),h=Math.max(1,Math.floor((g+L)/(V+L))),x=d.useMemo(()=>Array.from({length:Math.ceil(p.length/h)},(c,y)=>p.slice(y*h,(y+1)*h)),[p,h]);d.useEffect(()=>{const c=i.current;if(!c)return;const y=()=>{const N=getComputedStyle(c),S=(parseFloat(N.paddingLeft)||0)+(parseFloat(N.paddingRight)||0);_(Math.max(0,c.clientWidth-S))};y();const A=new ResizeObserver(y);return A.observe(c),()=>A.disconnect()},[]);const v=Math.max(V,(g-L*(h-1))/h)+70+L,k=he({count:x.length,getScrollElement:()=>i.current,estimateSize:()=>v,overscan:4}),m=k.getVirtualItems(),u=m.at(-1)?.index,t=d.useCallback(()=>{j&&!f&&o()},[j,f,o]);return d.useEffect(()=>{u===x.length-1&&t()},[u,t,x.length]),s.jsxs("div",{ref:i,className:"assets-grid-scroll",children:[s.jsx("div",{className:"assets-grid-virtual",style:{height:k.getTotalSize()},children:m.map(c=>s.jsx("div",{className:"assets-grid-row",style:{transform:`translateY(${c.start}px)`,gridTemplateColumns:`repeat(${h}, minmax(0, 1fr))`},children:x[c.index]?.map(y=>s.jsx(Le,{item:y,selected:y.id===r,onSelect:e,onPreview:a},y.id))},c.key))}),j&&s.jsx("button",{type:"button",className:"assets-load-more",disabled:f,onClick:t,children:l("assets.loadMore")})]})}const Ke=5e3;function Ge({refs:e,onChange:a,maxRefs:r=6}){const{t:l}=I(),[p,f]=d.useState(null),[j,o]=d.useState(null),[i,g]=d.useState(null),_=d.useRef(null);d.useEffect(()=>()=>{_.current&&window.clearTimeout(_.current)},[]);const h=(u,t)=>{if(t<0||t>=e.length||u===t)return;const c=[...e],[y]=c.splice(u,1);c.splice(t,0,y),a(c)},x=u=>{if(e.length<=1)return;const t=e[u];a(e.filter((c,y)=>y!==u)),g({ref:t,index:u}),_.current&&window.clearTimeout(_.current),_.current=window.setTimeout(()=>g(null),Ke)},v=()=>{if(!i||e.some(t=>t.path===i.ref.path))return;const u=[...e];u.splice(Math.min(i.index,u.length),0,i.ref),a(u.slice(0,r)),g(null)},k=(u,t)=>{u.preventDefault();const c=u.dataTransfer.getData("application/ima2-element-ref")||p,y=e.findIndex(S=>S.id===c);if(f(null),y<0||y===t)return;const A=e[y],N=e.find((S,w)=>w!==y&&S.path===A.path);if(N){o(N.id),window.setTimeout(()=>o(null),1200);return}h(y,t)},m=(u,t)=>a(e.map((c,y)=>y===u?{...c,alt:t}:c));return s.jsxs("section",{className:"element-ref-grid","aria-labelledby":"element-refs-title",children:[s.jsxs("div",{className:"element-detail__section-heading",children:[s.jsxs("div",{children:[s.jsx("h3",{id:"element-refs-title",children:l("element.refsTitle")}),s.jsx("p",{children:l("element.refsHelp")})]}),s.jsxs("span",{children:[e.length," / ",r]})]}),s.jsx("div",{className:"element-ref-grid__items",children:e.map((u,t)=>s.jsxs("div",{className:`element-ref-card${p===u.id?" is-dragging":""}${j===u.id?" is-duplicate":""}`,draggable:!0,onDragStart:c=>{f(u.id),c.dataTransfer.setData("application/ima2-element-ref",u.id),c.dataTransfer.effectAllowed="move"},onDragEnd:()=>f(null),onDragOver:c=>c.preventDefault(),onDrop:c=>k(c,t),children:[s.jsxs("div",{className:"element-ref-card__image",children:[s.jsx("img",{src:u.previewUrl||u.path,alt:u.alt||l("element.refAlt",{n:t+1})}),t===0?s.jsx("span",{children:l("element.refPrimary")}):null]}),s.jsxs("div",{className:"element-ref-card__controls",children:[s.jsxs("label",{children:[l("element.refLabel"),s.jsx("input",{value:u.alt,maxLength:80,placeholder:l("element.refLabelPlaceholder"),onChange:c=>m(t,c.target.value)})]}),s.jsxs("div",{children:[s.jsx("button",{type:"button",disabled:t===0,onClick:()=>h(t,t-1),"aria-label":l("element.refMoveUp",{n:t+1}),children:"↑"}),s.jsx("button",{type:"button",disabled:t===e.length-1,onClick:()=>h(t,t+1),"aria-label":l("element.refMoveDown",{n:t+1}),children:"↓"}),s.jsx("button",{type:"button",className:"is-danger",disabled:e.length<=1,onClick:()=>x(t),"aria-label":l("element.refRemove"),children:l("element.refRemove")})]})]})]},u.id))}),i?s.jsxs("div",{className:"element-ref-grid__undo",role:"status",children:[s.jsx("span",{children:l("element.refRemoved")}),s.jsx("button",{type:"button",onClick:v,children:l("element.refUndo")})]}):null]})}const He=/^[A-Za-z0-9_-]{1,32}$/;function ze({bindings:e,refs:a,onSave:r}){const{t:l}=I(),p=e.find(v=>v.provider==="runway"),f=e.find(v=>v.provider==="higgsfield"),[j,o]=d.useState(p?.tag??""),[i,g]=d.useState(!1),[_,h]=d.useState(null),x=async()=>{const v=j.trim();if(v&&!He.test(v)){h(l("assets.bindingTagInvalid"));return}h(null),g(!0);try{const k=[{provider:"runway",mode:"stateless-refs",...v?{tag:v}:{}},...f?[f]:[]];await r(k)||h(l("assets.actionFailed"))}finally{g(!1)}};return s.jsxs("section",{className:"element-detail__section","data-testid":"character-bindings-card",children:[s.jsx("div",{className:"element-detail__section-heading",children:s.jsxs("div",{children:[s.jsx("h3",{children:l("assets.bindingsTitle")}),s.jsx("p",{children:l("assets.bindingsHelp")})]})}),s.jsxs("div",{className:"character-binding-row",children:[s.jsx("span",{className:"character-binding-row__provider",children:"Runway"}),s.jsx("span",{className:"character-binding-row__mode",children:l("assets.bindingStateless")}),s.jsx("input",{value:j,maxLength:32,placeholder:l("assets.bindingTagPlaceholder"),"aria-label":l("assets.bindingTagPlaceholder"),onChange:v=>o(v.target.value)}),s.jsx("button",{type:"button",disabled:i,onClick:()=>{x()},children:l(i?"assets.bindingSaving":"assets.bindingSave")})]}),xe(a)?s.jsx("p",{className:"element-detail__error",role:"alert",children:l("assets.bindingCapWarning",{count:a.length})}):null,s.jsxs("div",{className:"character-binding-row character-binding-row--locked",children:[s.jsx("span",{className:"character-binding-row__provider",children:"Higgsfield"}),f?.status?s.jsx("span",{className:"character-binding-row__status",children:f.status}):null,s.jsx("button",{type:"button",disabled:!0,title:l("assets.bindingTrainLockedHint"),children:l("assets.bindingTrain")}),s.jsx("span",{className:"character-binding-row__badge",children:l("assets.bindingPaidPlan")})]}),f&&ve(a,f)?s.jsx("p",{className:"element-detail__error",role:"alert",children:l("assets.bindingDriftWarning")}):null,_?s.jsx("p",{className:"element-detail__error",role:"alert",children:_}):null]})}const Oe=["character","product","style","scene"],W=e=>e[0].toUpperCase()+e.slice(1);function Q(e){return{id:e?.id,name:e?.name??"",kind:e?.kind??"character",refs:(e?.refs??[]).filter(a=>typeof a=="string"&&a.length>0).map((a,r)=>({id:`${e?.id??"new"}-${r}-${a}`,path:a,previewUrl:`/generated/${a.split("/").map(encodeURIComponent).join("/")}`,alt:""})),notes:e?.notes??"",defaultStrength:e?.defaultStrength??.75}}function qe({element:e,saving:a,testing:r,onSave:l,onDelete:p,onRunTestSheet:f,onSaveBindings:j}){const{t:o}=I(),[i,g]=d.useState(()=>Q(e)),[_,h]=d.useState(null);d.useEffect(()=>{g(Q(e)),h(null)},[e]);const x=800-i.notes.length,v=d.useMemo(()=>i.notes.trim()?`[Element: ${i.name.trim()||"Untitled"}] ${i.notes.trim()}`:null,[i.name,i.notes]),k=(t,c)=>g(y=>({...y,[t]:c})),m=async()=>{if(!i.name.trim())return h(o("element.errorName"));if(!i.refs.length)return h(o("element.errorRefs"));h(null),await l({...i,name:i.name.trim(),notes:i.notes.trim()?i.notes:""})},u=Oe.map(t=>({value:t,label:o(`element.kind${W(t)}`)}));return s.jsxs("aside",{className:"element-detail","aria-label":o("element.ariaLabel"),children:[s.jsxs("header",{className:"element-detail__header",children:[s.jsxs("div",{children:[s.jsx("span",{children:o("element.title")}),s.jsx("h2",{children:o(e?"element.titleEdit":"element.titleNew")})]}),e?s.jsx("span",{className:"element-detail__status",children:o("element.saved")}):null]}),s.jsxs("label",{className:"element-detail__field",children:[o("element.name"),s.jsx("input",{value:i.name,maxLength:120,placeholder:o("element.namePlaceholder"),onChange:t=>k("name",t.target.value)})]}),s.jsx(be,{title:o("element.kind"),items:u,value:i.kind,onChange:t=>k("kind",t)}),s.jsx("p",{className:"element-detail__kind-help",children:o(`element.help${W(i.kind)}`)}),s.jsx(Ge,{refs:i.refs,onChange:t=>k("refs",t),maxRefs:6}),e&&i.kind==="character"&&j?s.jsx(ze,{bindings:e.characterBindings??[],refs:e.refs,onSave:t=>j(e.id,t)}):null,s.jsxs("section",{className:"element-detail__section",children:[s.jsxs("div",{className:"element-detail__section-heading",children:[s.jsxs("div",{children:[s.jsx("h3",{children:o("element.notes")}),s.jsx("p",{children:o("element.notesHelp")})]}),x<=100?s.jsx("span",{children:o("element.remaining",{n:x})}):null]}),s.jsx("textarea",{value:i.notes,maxLength:800,rows:6,placeholder:o("element.notesPlaceholder"),onChange:t=>k("notes",t.target.value)}),v?s.jsx("p",{className:"element-detail__note-preview",children:v}):null]}),s.jsxs("section",{className:"element-detail__section",children:[s.jsxs("div",{className:"element-detail__section-heading",children:[s.jsxs("div",{children:[s.jsx("h3",{children:o("element.strength")}),s.jsx("p",{children:o("element.strengthHelp")})]}),s.jsx("output",{children:i.defaultStrength.toFixed(2)})]}),s.jsx("input",{className:"element-detail__strength",type:"range",min:"0",max:"1",step:"0.05",value:i.defaultStrength,onChange:t=>k("defaultStrength",Number(t.target.value))}),s.jsx("button",{type:"button",className:"element-detail__reset",onClick:()=>k("defaultStrength",.75),children:o("element.resetDefault")})]}),_?s.jsx("p",{className:"element-detail__error",role:"alert",children:_}):null,s.jsxs("footer",{className:"element-detail__actions",children:[s.jsx("button",{type:"button",className:"element-detail__save",disabled:a,onClick:()=>{m()},children:o(a?"element.saving":"element.save")}),s.jsx("button",{type:"button",disabled:!e||r,onClick:()=>e&&void f(e.id),children:o(r?"element.testing":"element.runTest")}),e&&p?s.jsx("button",{type:"button",className:"is-danger",onClick:()=>{p(e.id)},children:o("element.delete")}):null]})]})}const Ve=["image","video","element","preset","template"];function We(e,a){return Ae(e,a)}function ts(){const{t:e}=I(),a=b(n=>n.assets),r=b(n=>n.assetsTags),l=b(n=>n.assetsFilters),p=b(n=>n.assetsLoading),f=b(n=>n.assetsLoadError),j=b(n=>n.loadAssets),o=b(n=>n.setUIMode),i=b(n=>n.setAssetsFilters),g=b(n=>n.updateAssetItem),_=b(n=>n.deleteAssetItem),h=b(n=>n.showToast),[x,v]=d.useState(l.q),[k,m]=d.useState(null),[u,t]=d.useState(null),[c,y]=d.useState(null),A=je(),N=b(n=>n.keyingTarget),S=b(n=>n.pendingAssetDetailId);d.useEffect(()=>{if(!S)return;const n=S;b.setState({pendingAssetDetailId:null});const E=b.getState().assets.find(F=>F.id===n)??null;y(E),i({kind:null,folderId:null,tag:null,q:""}),v(""),m(n),E||ye(n).then(({asset:F})=>{b.setState(K=>({assets:[F,...K.assets.filter(B=>B.id!==F.id)]})),y(F)}).catch(()=>{})},[S,i]);const w=d.useRef(!1);d.useEffect(()=>{if(N){w.current=!0;return}w.current&&(w.current=!1,j(!0))},[N,j]);const R=d.useMemo(()=>[{value:"",label:e("assets.kindAll")},...Ve.map(n=>({value:n,label:e(`assets.kind${n[0].toUpperCase()}${n.slice(1)}`)}))],[e]);d.useEffect(()=>{j(!0)},[j]),d.useEffect(()=>{const n=window.setTimeout(()=>i({q:x}),300);return()=>window.clearTimeout(n)},[x,i]);const D=!!(l.q||l.kind||l.tag),J=a.length===0&&!p,U=l.kind==="element"&&!l.folderId&&!l.q&&!l.tag,X=U?"assets.emptyElementsTitle":l.folderId?"assets.emptyFolderTitle":D?"assets.emptySearchTitle":"assets.emptyTitle",ee=U?"assets.emptyElementsBody":l.folderId?"assets.emptyFolderBody":D?"assets.emptySearchBody":"assets.emptyBody",C=a.find(n=>n.id===k)??(c?.id===k?c:null),H=C?.kind==="element"?Ye(C):null,$=d.useCallback(()=>m(null),[]),se=We(!!(C&&A),$),te=d.useCallback(()=>t(null),[]),ae=async n=>{(!n.id||!await g(n.id,{name:n.name,notes:n.notes}))&&h(e("assets.actionFailed"),!0)},ne=async(n,E)=>{const K={...a.find(oe=>oe.id===n)?.metadata??{},characterBindings:E},B=await g(n,{metadata:K});return B||h(e("assets.actionFailed"),!0),B},le=async(n,E)=>{const F=await g(n,{name:E});return F||h(e("assets.actionFailed"),!0),F},ie=async n=>{await _(n)?$():h(e("assets.actionFailed"),!0)},re=async()=>h(e("assets.testSheetsUnavailable"),!0);return s.jsxs("section",{className:`assets-workspace${C?" assets-workspace--detail-open":""}`,"aria-labelledby":"assets-title",children:[s.jsx(Fe,{}),s.jsxs("main",{className:"assets-workspace__main",children:[s.jsxs("header",{className:"assets-toolbar",children:[s.jsxs("div",{className:"assets-toolbar__title",children:[s.jsx("h1",{id:"assets-title",children:e("assets.title")}),s.jsx("span",{children:e("assets.itemCount",{count:a.length})})]}),s.jsxs("div",{className:"assets-toolbar__controls",children:[s.jsx("input",{type:"search",value:x,placeholder:e("assets.searchPlaceholder"),"aria-label":e("assets.searchPlaceholder"),onChange:n=>v(n.target.value)}),s.jsx(_e,{items:R,value:l.kind??"",onChange:n=>i({kind:n||null}),ariaLabel:e("assets.kindAll")}),a.length>0&&s.jsx("button",{type:"button",className:"assets-clear-btn",onClick:async()=>{confirm(e("assets.clearConfirm"))&&(await we(),j(!0))},children:e("assets.clearAll")})]}),r.length>0&&s.jsx("div",{className:"assets-tag-filter",children:r.map(n=>s.jsx("button",{type:"button",className:l.tag===n?"is-active":"",onClick:()=>i({tag:l.tag===n?null:n}),children:n},n))})]}),f&&a.length===0?s.jsxs("div",{className:"assets-empty",role:"alert",children:[s.jsx("h2",{children:e("assets.loadErrorTitle")}),s.jsx("p",{children:e("assets.loadErrorBody")}),s.jsx("button",{type:"button",className:"assets-empty__cta",onClick:()=>{j(!0)},children:e("assets.retry")})]}):J?s.jsxs("div",{className:"assets-empty",children:[s.jsx("h2",{children:e(X)}),s.jsx("p",{children:e(ee)}),U||!D&&!l.folderId?s.jsx("button",{type:"button",className:"assets-empty__cta",onClick:()=>o("classic"),children:e("nav.create")}):null]}):s.jsx(Ue,{selectedId:k??void 0,onSelectAsset:m,onPreviewAsset:n=>t(ke(n))})]}),C&&A?s.jsx("button",{type:"button",className:"assets-workspace__detail-backdrop","aria-label":e("assets.detailClose"),onClick:$}):null,C&&s.jsxs("aside",{ref:se,className:"assets-workspace__detail",role:A?"dialog":void 0,"aria-modal":A?!0:void 0,"aria-label":e("assets.detailAria",{name:C.name}),children:[s.jsx("button",{type:"button",className:"assets-workspace__detail-close",onClick:$,"aria-label":e("assets.detailClose"),children:"×"}),H?s.jsx(qe,{element:H,saving:!1,testing:!1,onSave:ae,onSaveBindings:ne,onDelete:ie,onRunTestSheet:re}):s.jsx(Qe,{asset:C,onRename:n=>le(C.id,n)})]}),s.jsx(Ie,{}),s.jsx(Ne,{}),u?s.jsx(Se,{item:u,onClose:te}):null]})}function Qe({asset:e,onRename:a}){const{t:r,locale:l}=I(),[p,f]=d.useState(!1),[j,o]=d.useState(e.name),i=d.useRef(!1),g=typeof e.metadata?.prompt=="string"?e.metadata.prompt:null,_=typeof e.metadata?.provider=="string"?e.metadata.provider:null;d.useEffect(()=>{o(e.name),f(!1)},[e.id,e.name]);async function h(){if(i.current)return;const x=j.trim();if(!x||x===e.name){o(e.name),f(!1);return}i.current=!0;try{await a(x)||o(e.name)}finally{i.current=!1,f(!1)}}return s.jsxs("div",{className:"assets-workspace__detail-meta",children:[s.jsx("div",{className:"assets-workspace__detail-title",children:p?s.jsx("input",{className:"assets-folder-input assets-workspace__detail-name-input",value:j,autoFocus:!0,"aria-label":r("assets.renameAsset"),onChange:x=>o(x.target.value),onBlur:()=>{h()},onKeyDown:x=>{x.key==="Enter"&&h(),x.key==="Escape"&&(o(e.name),f(!1))}}):s.jsxs(s.Fragment,{children:[s.jsx("h2",{children:e.name}),s.jsx("button",{type:"button",className:"assets-workspace__detail-rename","aria-label":r("assets.renameAsset"),title:r("assets.renameAsset"),onClick:()=>f(!0),children:s.jsx(Y,{})})]})}),s.jsxs("dl",{children:[s.jsx("dt",{children:r("assets.detailKind")}),s.jsx("dd",{children:r(`assets.kind${e.kind[0].toUpperCase()}${e.kind.slice(1)}`)}),s.jsx("dt",{children:r("assets.detailCreated")}),s.jsx("dd",{children:new Intl.DateTimeFormat(l,{dateStyle:"medium",timeStyle:"short"}).format(new Date(e.createdAt))}),_?s.jsxs(s.Fragment,{children:[s.jsx("dt",{children:r("assets.detailProvider")}),s.jsx("dd",{children:_})]}):null,g?s.jsxs(s.Fragment,{children:[s.jsx("dt",{children:r("assets.detailPrompt")}),s.jsx("dd",{className:"assets-workspace__detail-prompt",children:g})]}):null,e.tags.length>0?s.jsxs(s.Fragment,{children:[s.jsx("dt",{children:r("assets.detailTags")}),s.jsx("dd",{children:e.tags.join(", ")})]}):null]})]})}function Ye(e){const a=e.metadata??{},r=a.elementKind,l=a.refs,p=Array.isArray(a.characterBindings)?a.characterBindings:void 0;return{id:e.id,name:e.name,kind:r==="product"||r==="style"||r==="scene"?r:"character",refs:Array.isArray(l)?l.filter(f=>typeof f=="string"):e.filePath?[e.filePath]:[],notes:e.notes??void 0,defaultStrength:typeof a.defaultStrength=="number"?a.defaultStrength:void 0,characterBindings:p}}export{ts as AssetsWorkspace};
@@ -1,2 +1,2 @@
1
- import{j as e,f as h}from"./index-CHeVGnoy.js";import{u,T as l,X as k,t as j,p as _}from"./App-pMN1OjNW.js";function C(s){const r=s.slots.filter(n=>n.kind==="text"||n.textKind).length,c=s.slots.filter(n=>n.kind==="image").length;return`${r} text / ${c} image`}function T(){const{t:s}=u(),r=l(t=>t.templates),c=l(t=>t.imageTemplateId),n=l(t=>t.setImageTemplate);return e.jsxs("section",{className:"card-news-panel",children:[e.jsxs("div",{className:"card-news-panel__head",children:[e.jsx("span",{children:s("cardNews.imageTemplate")}),e.jsx("button",{type:"button",disabled:!0,title:s("cardNews.newTemplateLater"),children:"+"})]}),e.jsx("div",{className:"card-news-template-grid",children:r.map(t=>e.jsxs("button",{type:"button",className:`card-news-template${c===t.id?" selected":""}`,onClick:()=>n(t.id),children:[e.jsx("img",{src:t.previewUrl,alt:""}),e.jsxs("span",{className:"card-news-template__body",children:[e.jsx("span",{className:"card-news-template__name",children:t.name}),e.jsx("span",{className:"card-news-template__meta",children:C(t)}),e.jsx("span",{className:"card-news-template__sizes",children:t.recommendedOutputSizes.join(" · ")})]})]},t.id))})]})}function I(){const{t:s}=u(),r=l(t=>t.roleTemplates),c=l(t=>t.roleTemplateId),n=l(t=>t.setRoleTemplate);return e.jsxs("section",{className:"card-news-panel",children:[e.jsx("div",{className:"card-news-panel__head",children:e.jsx("span",{children:s("cardNews.roleTemplate")})}),e.jsx("div",{className:"card-news-role-row",children:r.map(t=>e.jsx("button",{type:"button",className:c===t.id?"selected":"",onClick:()=>n(t.id),children:t.name},t.id))})]})}function F({status:s,locked:r}){const{t:c}=u(),n=r?"locked":s,t=n==="queued"||n==="generating";return e.jsxs("span",{className:`card-news-status-badge card-news-status-badge--${n}`,children:[t?e.jsx("span",{className:"card-news-spinner","aria-hidden":"true"}):null,c(`cardNews.status.${n}`)]})}function M(s,r){const c=`cardNews.roles.${s}`,n=r(c);return n===c?s:n}function S(){const{t:s}=u(),r=l(t=>t.activePlan),c=l(t=>t.selectedCardId),n=l(t=>t.selectCard);return r?e.jsx("div",{className:"card-news-deck","aria-label":s("common.cardDeck"),onWheel:k,children:r.cards.map(t=>e.jsxs("button",{type:"button",className:`card-news-deck-card${c===t.id?" selected":""}`,onClick:()=>n(t.id),children:[e.jsx("span",{children:String(t.order).padStart(2,"0")}),t.url?e.jsx("img",{src:t.url,alt:"",className:"card-news-deck-card__thumb"}):null,e.jsx("strong",{children:M(t.role,s)}),e.jsx("small",{children:t.headline||t.textFields.find(p=>p.renderMode==="in-image")?.text}),e.jsx(F,{status:t.status,locked:t.locked})]},t.id))}):null}const $=[];function E(){const{t:s}=u(),r=l(t=>t.activePlan?.cards??$),c=l(t=>t.generating),n={total:r.length,done:r.filter(t=>t.status==="generated").length,queued:r.filter(t=>t.status==="queued").length,errors:r.filter(t=>t.status==="error").length,skipped:r.filter(t=>t.locked||t.status==="skipped").length};return n.total?e.jsxs("div",{className:"card-news-batch-bar","aria-live":"polite",children:[e.jsx("span",{children:c?s("cardNews.progress.generating",{done:n.done,total:n.total}):s("cardNews.progress.summary",{done:n.done,total:n.total})}),e.jsx("span",{children:s("cardNews.progress.detail",{queued:n.queued,errors:n.errors,skipped:n.skipped})})]}):null}function P({meta:s}){const{t:r}=u();if(!s)return null;const c=s.mode==="structured-output"?r("cardNews.planner.structured"):s.mode==="json-mode"?r("cardNews.planner.jsonMode"):r("cardNews.planner.fallback");return e.jsxs("span",{className:"card-news-planner-badge",children:[c," · ",s.model,s.repaired?` · ${r("cardNews.planner.repaired")}`:""]})}function L(s){const r=s.textFields.filter(c=>c.renderMode==="in-image"&&c.text).map(c=>`[${c.placement}] ${c.text}`);return[s.headline,...r].filter(Boolean).join(`
1
+ import{j as e,f as h}from"./index-va83o9G5.js";import{u,T as l,X as k,t as j,p as _}from"./App-B9y6oVuL.js";function C(s){const r=s.slots.filter(n=>n.kind==="text"||n.textKind).length,c=s.slots.filter(n=>n.kind==="image").length;return`${r} text / ${c} image`}function T(){const{t:s}=u(),r=l(t=>t.templates),c=l(t=>t.imageTemplateId),n=l(t=>t.setImageTemplate);return e.jsxs("section",{className:"card-news-panel",children:[e.jsxs("div",{className:"card-news-panel__head",children:[e.jsx("span",{children:s("cardNews.imageTemplate")}),e.jsx("button",{type:"button",disabled:!0,title:s("cardNews.newTemplateLater"),children:"+"})]}),e.jsx("div",{className:"card-news-template-grid",children:r.map(t=>e.jsxs("button",{type:"button",className:`card-news-template${c===t.id?" selected":""}`,onClick:()=>n(t.id),children:[e.jsx("img",{src:t.previewUrl,alt:""}),e.jsxs("span",{className:"card-news-template__body",children:[e.jsx("span",{className:"card-news-template__name",children:t.name}),e.jsx("span",{className:"card-news-template__meta",children:C(t)}),e.jsx("span",{className:"card-news-template__sizes",children:t.recommendedOutputSizes.join(" · ")})]})]},t.id))})]})}function I(){const{t:s}=u(),r=l(t=>t.roleTemplates),c=l(t=>t.roleTemplateId),n=l(t=>t.setRoleTemplate);return e.jsxs("section",{className:"card-news-panel",children:[e.jsx("div",{className:"card-news-panel__head",children:e.jsx("span",{children:s("cardNews.roleTemplate")})}),e.jsx("div",{className:"card-news-role-row",children:r.map(t=>e.jsx("button",{type:"button",className:c===t.id?"selected":"",onClick:()=>n(t.id),children:t.name},t.id))})]})}function F({status:s,locked:r}){const{t:c}=u(),n=r?"locked":s,t=n==="queued"||n==="generating";return e.jsxs("span",{className:`card-news-status-badge card-news-status-badge--${n}`,children:[t?e.jsx("span",{className:"card-news-spinner","aria-hidden":"true"}):null,c(`cardNews.status.${n}`)]})}function M(s,r){const c=`cardNews.roles.${s}`,n=r(c);return n===c?s:n}function S(){const{t:s}=u(),r=l(t=>t.activePlan),c=l(t=>t.selectedCardId),n=l(t=>t.selectCard);return r?e.jsx("div",{className:"card-news-deck","aria-label":s("common.cardDeck"),onWheel:k,children:r.cards.map(t=>e.jsxs("button",{type:"button",className:`card-news-deck-card${c===t.id?" selected":""}`,onClick:()=>n(t.id),children:[e.jsx("span",{children:String(t.order).padStart(2,"0")}),t.url?e.jsx("img",{src:t.url,alt:"",className:"card-news-deck-card__thumb"}):null,e.jsx("strong",{children:M(t.role,s)}),e.jsx("small",{children:t.headline||t.textFields.find(p=>p.renderMode==="in-image")?.text}),e.jsx(F,{status:t.status,locked:t.locked})]},t.id))}):null}const $=[];function E(){const{t:s}=u(),r=l(t=>t.activePlan?.cards??$),c=l(t=>t.generating),n={total:r.length,done:r.filter(t=>t.status==="generated").length,queued:r.filter(t=>t.status==="queued").length,errors:r.filter(t=>t.status==="error").length,skipped:r.filter(t=>t.locked||t.status==="skipped").length};return n.total?e.jsxs("div",{className:"card-news-batch-bar","aria-live":"polite",children:[e.jsx("span",{children:c?s("cardNews.progress.generating",{done:n.done,total:n.total}):s("cardNews.progress.summary",{done:n.done,total:n.total})}),e.jsx("span",{children:s("cardNews.progress.detail",{queued:n.queued,errors:n.errors,skipped:n.skipped})})]}):null}function P({meta:s}){const{t:r}=u();if(!s)return null;const c=s.mode==="structured-output"?r("cardNews.planner.structured"):s.mode==="json-mode"?r("cardNews.planner.jsonMode"):r("cardNews.planner.fallback");return e.jsxs("span",{className:"card-news-planner-badge",children:[c," · ",s.model,s.repaired?` · ${r("cardNews.planner.repaired")}`:""]})}function L(s){const r=s.textFields.filter(c=>c.renderMode==="in-image"&&c.text).map(c=>`[${c.placement}] ${c.text}`);return[s.headline,...r].filter(Boolean).join(`
2
2
  `)}function R(s,r){const c=s.slotId?r?.slots.find(n=>n.id===s.slotId):null;return c?{left:`${c.x/20.48}%`,top:`${c.y/20.48}%`,width:`${c.w/20.48}%`,minHeight:`${c.h/20.48}%`}:B(s)}const b={"top-left":{left:"10%",top:"10%",width:"34%"},"top-center":{left:"50%",top:"10%",width:"42%",transform:"translateX(-50%)"},"top-right":{right:"10%",top:"10%",width:"34%"},"center-left":{left:"10%",top:"50%",width:"34%",transform:"translateY(-50%)"},center:{left:"50%",top:"50%",width:"44%",transform:"translate(-50%, -50%)"},"center-right":{right:"10%",top:"50%",width:"34%",transform:"translateY(-50%)"},"bottom-left":{left:"10%",bottom:"10%",width:"34%"},"bottom-center":{left:"50%",bottom:"10%",width:"42%",transform:"translateX(-50%)"},"bottom-right":{right:"10%",bottom:"10%",width:"34%"},free:{left:"50%",top:"50%",width:"44%",transform:"translate(-50%, -50%)"}};function B(s){return b[s.placement]||b.center}function D(){const{t:s}=u(),r=l(a=>a.activePlan),c=l(a=>a.selectedCardId),n=l(a=>a.selectedTextFieldId),t=l(a=>a.templates),p=l(a=>a.plannerMeta),m=l(a=>a.retryCard),x=l(a=>a.selectTextField),o=r?.cards.find(a=>a.id===c)||r?.cards[0],w=r?t.find(a=>a.id===r.imageTemplateId):void 0,d=o?.textFields.filter(a=>a.renderMode==="in-image")||[];return!r||!o?e.jsxs("section",{className:"card-news-empty",children:[e.jsxs("div",{className:"card-news-empty__deck","aria-hidden":"true",children:[e.jsx("div",{className:"card-news-empty__card card-news-empty__card--back"}),e.jsx("div",{className:"card-news-empty__card card-news-empty__card--mid"}),e.jsxs("div",{className:"card-news-empty__card",children:[e.jsx("span",{}),e.jsx("strong",{}),e.jsx("em",{})]})]}),e.jsxs("div",{className:"card-news-empty__copy",children:[e.jsx("span",{children:s("uiMode.cardNews")}),e.jsx("h2",{children:s("cardNews.emptyTitle")}),e.jsx("p",{children:s("cardNews.emptyBody")})]})]}):e.jsxs("section",{className:"card-news-stage",children:[e.jsxs("div",{className:"card-news-stage__header",children:[e.jsxs("div",{children:[e.jsx("h2",{children:r.title}),e.jsx("p",{children:r.generationStrategy}),e.jsx(P,{meta:p})]}),e.jsxs("span",{children:[o.order," / ",r.cards.length]})]}),e.jsx(E,{}),e.jsxs("div",{className:"card-news-preview",children:[o.status==="queued"||o.status==="generating"?e.jsx("div",{className:"card-news-preview__loading",children:s("cardNews.progress.cardGenerating")}):o.status==="error"?e.jsxs("div",{className:"card-news-preview__error",children:[e.jsx("span",{children:o.error||s("cardNews.error")}),o.locked?null:e.jsx("button",{type:"button",onClick:()=>{m(o.id)},children:s("cardNews.retryCard")})]}):o.url?e.jsx("img",{src:o.url,alt:o.headline}):e.jsx("div",{className:"card-news-preview__slot"}),d.length?e.jsx("div",{className:"card-news-stage-overlay",children:d.map(a=>e.jsx("button",{type:"button",className:`card-news-stage-overlay__field card-news-stage-overlay__field--${a.placement}${n===a.id?" selected":""}`,style:R(a,w),onClick:()=>x(a.id),"aria-label":s("cardNews.selectTextField",{text:a.text||a.kind}),children:e.jsx("span",{children:a.text||a.kind})},a.id))}):null]}),o.url?e.jsxs("div",{className:"card-news-result-actions",children:[e.jsx("button",{type:"button",onClick:()=>navigator.clipboard?.writeText(o.visualPrompt),children:s("cardNews.actions.copyPrompt")}),e.jsx("button",{type:"button",onClick:()=>navigator.clipboard?.writeText(L(o)),children:s("cardNews.actions.copyCopy")}),e.jsx("a",{href:o.url,target:"_blank",rel:"noreferrer",children:s("cardNews.actions.openImage")}),e.jsx("a",{href:o.url,download:!0,children:s("cardNews.actions.downloadCard")})]}):null]})}function y(s,r){const c=`cardNews.placements.${s}`,n=r(c);return n===c?s:n}function q({placement:s}){const{t:r}=u();return e.jsx("span",{className:"card-news-placement-chip",children:y(s,r)})}const K=["headline","body","caption","cta","badge","number"],A=["top-left","top-center","top-right","center-left","center","center-right","bottom-left","bottom-center","bottom-right","free"],H=["in-image","ui-only"],Y=["primary","secondary","supporting"];function N(s,r,c){const n=`cardNews.${s}.${r}`,t=c(n);return t===n?r:t}function z({field:s,locked:r,selected:c=!1,onSelect:n,onChange:t,onRemove:p}){const{t:m}=u(),x=s.text.length,o=typeof s.maxChars=="number"&&x>s.maxChars,w=s.maxChars===null||s.maxChars>80,d=h.useMemo(()=>K.map(i=>({value:i,label:N("textKinds",i,m)})),[m]),a=h.useMemo(()=>A.map(i=>({value:i,label:y(i,m)})),[m]),g=h.useMemo(()=>H.map(i=>({value:i,label:N("renderModes",i,m)})),[m]),f=h.useMemo(()=>Y.map(i=>({value:i,label:N("hierarchy",i,m)})),[m]);return e.jsxs("div",{className:`card-news-text-field-card${c?" selected":""}`,onClick:n,children:[e.jsxs("div",{className:"card-news-text-field-card__header",children:[e.jsx("span",{children:N("textKinds",s.kind,m)}),e.jsx(q,{placement:s.placement})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:m("cardNews.textFieldText")}),w?e.jsx("textarea",{value:s.text,disabled:r,onChange:i=>t({text:i.target.value,source:"user"})}):e.jsx("input",{value:s.text,disabled:r,onChange:i=>t({text:i.target.value,source:"user"})})]}),e.jsxs("div",{className:"card-news-text-field-card__grid",children:[e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:m("cardNews.textKind")}),e.jsx(j,{items:d,value:s.kind,disabled:r,onChange:i=>t({kind:i,source:"user"})})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:m("cardNews.placement")}),e.jsx(j,{items:a,value:s.placement,disabled:r,onChange:i=>t({placement:i,source:"user"})})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:m("cardNews.renderMode")}),e.jsx(j,{items:g,value:s.renderMode,disabled:r,onChange:i=>t({renderMode:i,source:"user"})})]}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:m("cardNews.hierarchyLabel")}),e.jsx(j,{items:f,value:s.hierarchy,disabled:r,onChange:i=>t({hierarchy:i,source:"user"})})]})]}),e.jsxs("div",{className:`card-news-text-field-card__meta${o?" over":""}`,children:[e.jsx("span",{children:s.maxChars===null?x:`${x}/${s.maxChars}`}),o?e.jsx("span",{children:m("cardNews.textTooLong")}):null,p?e.jsx("button",{type:"button",disabled:r,onClick:p,children:m("cardNews.removeTextField")}):null]})]})}function O(){return{id:`tf_${Date.now().toString(36)}`,kind:"body",text:"",renderMode:"in-image",placement:"center",slotId:null,hierarchy:"supporting",maxChars:null,language:null,source:"user"}}function W(){const{t:s}=u(),r=l(a=>a.activePlan),c=l(a=>a.selectedCardId),n=l(a=>a.selectedTextFieldId),t=l(a=>a.updateCard),p=l(a=>a.updateTextField),m=l(a=>a.addTextField),x=l(a=>a.removeTextField),o=l(a=>a.selectTextField),w=l(a=>a.retryCard),d=r?.cards.find(a=>a.id===c)||r?.cards[0];return d?e.jsxs("aside",{className:"card-news-inspector",children:[e.jsx("div",{className:"section-title",children:s("cardNews.inspector")}),e.jsxs("div",{className:"card-news-inspector-group",children:[e.jsx("span",{className:"card-news-inspector-label",children:s("cardNews.cardTitle")}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:s("cardNews.headline")}),e.jsx("input",{value:d.headline,disabled:d.locked,onChange:a=>t(d.id,{headline:a.target.value})})]})]}),e.jsxs("div",{className:"card-news-inspector-group",children:[e.jsxs("div",{className:"card-news-inspector-row",children:[e.jsx("span",{className:"card-news-inspector-label",children:s("cardNews.textFields")}),e.jsx("button",{type:"button",className:"secondary-btn",disabled:d.locked,onClick:()=>m(d.id,O()),children:s("cardNews.addTextField")})]}),d.textFields.length?d.textFields.map(a=>e.jsx(z,{field:a,locked:d.locked,selected:n===a.id,onSelect:()=>o(a.id),onChange:g=>p(d.id,a.id,g),onRemove:()=>x(d.id,a.id)},a.id)):e.jsx("p",{className:"card-news-muted",children:s("cardNews.noTextFields")})]}),e.jsxs("details",{className:"card-news-inspector-group card-news-advanced-prompt",children:[e.jsx("summary",{children:s("cardNews.designPrompt")}),e.jsxs("label",{className:"card-news-field",children:[e.jsx("span",{children:s("cardNews.visualPrompt")}),e.jsx("textarea",{value:d.visualPrompt,disabled:d.locked,onChange:a=>t(d.id,{visualPrompt:a.target.value})})]})]}),d.imageFilename?e.jsxs("div",{className:"card-news-generated-meta",children:[e.jsx("span",{children:s("cardNews.generatedMeta")}),e.jsx("code",{children:d.imageFilename}),e.jsx("span",{children:d.status})]}):null,d.locked?e.jsx("p",{className:"card-news-locked-help",children:s("cardNews.lockedHelp")}):null,e.jsx("button",{type:"button",className:`secondary-btn${d.locked?" active":""}`,onClick:()=>t(d.id,{locked:!d.locked}),children:d.locked?s("cardNews.locked"):s("cardNews.unlocked")}),e.jsx("button",{type:"button",className:"secondary-btn",disabled:d.locked||!["draft","error"].includes(d.status),onClick:()=>{w(d.id)},children:s("cardNews.retryCard")})]}):e.jsxs("aside",{className:"card-news-inspector card-news-inspector-empty",children:[e.jsx("div",{className:"section-title",children:s("cardNews.inspector")}),e.jsxs("div",{className:"card-news-inspector-empty__mock","aria-hidden":"true",children:[e.jsx("span",{}),e.jsx("strong",{}),e.jsx("i",{}),e.jsx("i",{})]}),e.jsx("p",{children:s("cardNews.noCard")})]})}const v="ima2:cardNewsMobileNoticeShown";function X(){const{t:s}=u(),r=_(),[c,n]=h.useState(()=>{if(typeof window>"u")return!0;try{return localStorage.getItem(v)==="1"}catch{return!1}});if(!r||c)return null;const t=()=>{try{localStorage.setItem(v,"1")}catch{}n(!0)};return e.jsxs("div",{className:"card-news-mobile-notice",role:"status",children:[e.jsx("span",{children:s("mobile.cardNewsBanner")}),e.jsx("button",{type:"button",onClick:t,children:s("mobile.dismiss")})]})}function J(){const{t:s}=u(),r=l(n=>n.hydrate),c=l(n=>n.error);return h.useEffect(()=>{r()},[r]),e.jsxs("main",{className:"card-news-workspace","aria-label":s("cardNews.workspace"),children:[e.jsx(X,{}),e.jsxs("div",{className:"card-news-setup",children:[e.jsx(T,{}),e.jsx(I,{})]}),e.jsxs("div",{className:"card-news-main",children:[c?e.jsx("div",{className:"card-news-error",role:"alert",children:c}):null,e.jsx(D,{}),e.jsx(S,{})]}),e.jsx(W,{})]})}export{J as CardNewsWorkspace};
@@ -1 +1 @@
1
- import{j as e,f as n}from"./index-CHeVGnoy.js";import{o as j,u as _,k as N,r as b,a as p}from"./App-pMN1OjNW.js";import{c as f}from"./clipboard-DirTPLEi.js";async function L(){return j("/api/generation-requests")}function v({entry:a,onClose:o,onCopyPrompt:r}){const{t:s}=_(),l=N(!0,o),i=a.succeeded===0;return b.createPortal(e.jsxs("div",{className:"generation-log-detail",role:"presentation",children:[e.jsx("div",{className:"generation-log-detail__backdrop",onClick:o}),e.jsxs("div",{ref:l,className:"generation-log-detail__content",role:"dialog","aria-modal":"true","aria-labelledby":"generation-log-detail-title",tabIndex:-1,children:[e.jsxs("div",{className:"generation-log-detail__header",children:[e.jsxs("h2",{id:"generation-log-detail-title",className:"generation-log-detail__title",children:[s("generationLog.detailTitle"),e.jsxs("span",{className:`generation-log-detail__badge${i?" is-error":" is-success"}`,children:[a.succeeded,"/",a.requested]})]}),e.jsx("button",{type:"button",className:"generation-log-detail__close",onClick:o,"aria-label":s("common.close"),children:"×"})]}),e.jsxs("div",{className:"generation-log-detail__grid",children:[e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailTime")}),e.jsx("span",{children:new Date(a.createdAt).toLocaleString()}),e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailRequestId")}),e.jsx("span",{className:"generation-log-detail__mono",children:a.requestId}),e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailCounts")}),e.jsxs("span",{children:[a.succeeded," / ",a.requested]}),a.error?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailError")}),e.jsx("span",{className:"generation-log-detail__mono is-error",children:a.error})]}):null,a.errorMessage?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailErrorMessage")}),e.jsx("span",{className:"generation-log-detail__reason",children:a.errorMessage})]}):null]}),e.jsxs("div",{className:"generation-log-detail__section",children:[e.jsx("div",{className:"generation-log-detail__label",children:s("generationLog.detailPrompt")}),e.jsx("div",{className:"generation-log-detail__prompt",children:a.prompt||s("generationLog.detailPromptEmpty")})]}),e.jsx("div",{className:"generation-log-detail__footer",children:e.jsx("button",{type:"button",className:"generation-log-detail__copy",onClick:()=>r(a),"data-modal-initial-focus":!0,children:s("generationLog.copy")})})]})]}),document.body)}function C(){const{t:a}=_(),o=p(t=>t.showToast),r=p(t=>t.activeGenerations),[s,l]=n.useState([]),[i,d]=n.useState(!0),[h,g]=n.useState(!1),[u,m]=n.useState(null),c=n.useCallback(async()=>{d(!0),g(!1);try{const t=await L();l(t.items)}catch{l([]),g(!0)}finally{d(!1)}},[]);n.useEffect(()=>{c()},[c,r]);const x=async t=>{try{await f(t.prompt),o(a("generationLog.copied"))}catch{o(a("toast.copyFailed"),!0)}};return i?e.jsx("div",{className:"generation-request-log__empty",children:a("common.loading")}):h?e.jsxs("div",{className:"generation-request-log__empty",role:"alert",children:[e.jsx("span",{children:a("generationLog.loadFailed")}),e.jsx("button",{type:"button",onClick:()=>{c()},children:a("generationLog.retry")})]}):e.jsxs("div",{className:"generation-request-log",role:"list",children:[s.length===0?e.jsx("div",{className:"generation-request-log__empty",children:a("generationLog.empty")}):s.map(t=>e.jsxs("button",{type:"button",role:"listitem",className:"generation-request-log__item",onClick:()=>m(t),title:a("generationLog.detailOpen"),children:[e.jsx("span",{className:"generation-request-log__prompt",children:t.prompt}),e.jsxs("span",{className:`generation-request-log__count${t.succeeded===0?" is-error":" is-success"}`,children:[t.succeeded,"/",t.requested]})]},t.id)),u?e.jsx(v,{entry:u,onClose:()=>m(null),onCopyPrompt:t=>{x(t)}}):null]})}export{C as GenerationRequestLogPanel};
1
+ import{j as e,f as n}from"./index-va83o9G5.js";import{o as j,u as _,k as N,r as b,a as p}from"./App-B9y6oVuL.js";import{c as f}from"./clipboard-DirTPLEi.js";async function L(){return j("/api/generation-requests")}function v({entry:a,onClose:o,onCopyPrompt:r}){const{t:s}=_(),l=N(!0,o),i=a.succeeded===0;return b.createPortal(e.jsxs("div",{className:"generation-log-detail",role:"presentation",children:[e.jsx("div",{className:"generation-log-detail__backdrop",onClick:o}),e.jsxs("div",{ref:l,className:"generation-log-detail__content",role:"dialog","aria-modal":"true","aria-labelledby":"generation-log-detail-title",tabIndex:-1,children:[e.jsxs("div",{className:"generation-log-detail__header",children:[e.jsxs("h2",{id:"generation-log-detail-title",className:"generation-log-detail__title",children:[s("generationLog.detailTitle"),e.jsxs("span",{className:`generation-log-detail__badge${i?" is-error":" is-success"}`,children:[a.succeeded,"/",a.requested]})]}),e.jsx("button",{type:"button",className:"generation-log-detail__close",onClick:o,"aria-label":s("common.close"),children:"×"})]}),e.jsxs("div",{className:"generation-log-detail__grid",children:[e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailTime")}),e.jsx("span",{children:new Date(a.createdAt).toLocaleString()}),e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailRequestId")}),e.jsx("span",{className:"generation-log-detail__mono",children:a.requestId}),e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailCounts")}),e.jsxs("span",{children:[a.succeeded," / ",a.requested]}),a.error?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailError")}),e.jsx("span",{className:"generation-log-detail__mono is-error",children:a.error})]}):null,a.errorMessage?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"generation-log-detail__label",children:s("generationLog.detailErrorMessage")}),e.jsx("span",{className:"generation-log-detail__reason",children:a.errorMessage})]}):null]}),e.jsxs("div",{className:"generation-log-detail__section",children:[e.jsx("div",{className:"generation-log-detail__label",children:s("generationLog.detailPrompt")}),e.jsx("div",{className:"generation-log-detail__prompt",children:a.prompt||s("generationLog.detailPromptEmpty")})]}),e.jsx("div",{className:"generation-log-detail__footer",children:e.jsx("button",{type:"button",className:"generation-log-detail__copy",onClick:()=>r(a),"data-modal-initial-focus":!0,children:s("generationLog.copy")})})]})]}),document.body)}function C(){const{t:a}=_(),o=p(t=>t.showToast),r=p(t=>t.activeGenerations),[s,l]=n.useState([]),[i,d]=n.useState(!0),[h,g]=n.useState(!1),[u,m]=n.useState(null),c=n.useCallback(async()=>{d(!0),g(!1);try{const t=await L();l(t.items)}catch{l([]),g(!0)}finally{d(!1)}},[]);n.useEffect(()=>{c()},[c,r]);const x=async t=>{try{await f(t.prompt),o(a("generationLog.copied"))}catch{o(a("toast.copyFailed"),!0)}};return i?e.jsx("div",{className:"generation-request-log__empty",children:a("common.loading")}):h?e.jsxs("div",{className:"generation-request-log__empty",role:"alert",children:[e.jsx("span",{children:a("generationLog.loadFailed")}),e.jsx("button",{type:"button",onClick:()=>{c()},children:a("generationLog.retry")})]}):e.jsxs("div",{className:"generation-request-log",role:"list",children:[s.length===0?e.jsx("div",{className:"generation-request-log__empty",children:a("generationLog.empty")}):s.map(t=>e.jsxs("button",{type:"button",role:"listitem",className:"generation-request-log__item",onClick:()=>m(t),title:a("generationLog.detailOpen"),children:[e.jsx("span",{className:"generation-request-log__prompt",children:t.prompt}),e.jsxs("span",{className:`generation-request-log__count${t.succeeded===0?" is-error":" is-success"}`,children:[t.succeeded,"/",t.requested]})]},t.id)),u?e.jsx(v,{entry:u,onClose:()=>m(null),onCopyPrompt:t=>{x(t)}}):null]})}export{C as GenerationRequestLogPanel};
@@ -1 +1 @@
1
- import{f as x,j as e}from"./index-CHeVGnoy.js";import{a as l,u as m,ai as A,aj as E,ak as C,al as R,t as M,am as w,an as T,ao as L,ap as O,aq as S,ar as H,as as G,at as U,au as D}from"./App-pMN1OjNW.js";const V={oauth:"GPT OAuth",api:"GPT API",grok:"Grok OAuth","grok-api":"Grok API",agy:"Antigravity","gemini-api":"Gemini API",atlascloud:"Atlas Cloud",minimax:"MiniMax",nai:"NovelAI",comfy:"ComfyUI"};function $(o){if(o.kind==="attachment")return o.source.dataUrl;if(o.source.thumbnailUrl)return o.source.thumbnailUrl;const s=o.source.referenceFilenames[0];if(s)return s.startsWith("/generated/")?s:`/generated/${s.split("/").map(encodeURIComponent).join("/")}`}function B({providerAvailability:o}){const s=l(t=>t.prompt),r=l(t=>t.setPrompt),n=l(t=>t.provider),a=l(t=>t.setProvider),c=l(t=>t.selectedPresetIds),j=l(t=>t.removePreset),h=l(t=>t.generate),N=l(t=>t.activeGenerations),p=l(t=>t.trayItems),b=x.useRef(!1),{t:i}=m(),k=new Set(c),y=A().filter(t=>k.has(t.id)),f=N>0,d=n==="nai",g=()=>{f||s.trim().length===0||(h(),l.getState().setUIMode("classic"))},P=Object.entries(V).map(([t,u])=>{const _=t,v=o[_];return{value:_,label:u,sub:_==="comfy"?v.reason:v.ok?i("readiness.ready"):v.reason,disabled:!v.ok&&_!=="comfy"}});return e.jsxs("div",{className:"home-prompt",children:[y.length>0?e.jsx(E,{className:"home-prompt__chips",ariaLabel:i("home.selectedPresets"),children:y.map(t=>e.jsx(C,{selected:!0,onRemove:()=>j(t.id),removeLabel:i("common.removeNamed",{name:t.name}),title:t.category,children:t.name},t.id))}):null,p.length>0?e.jsxs("div",{className:"home-prompt__reference-strip",role:"group","aria-label":i("home.referenceTrayAria",{count:p.length}),children:[e.jsx("span",{className:"home-prompt__reference-thumbs","aria-hidden":"true",children:p.map(t=>{const u=$(t);return e.jsx("span",{className:"home-prompt__reference-thumb",children:u?e.jsx("img",{src:u,alt:"",loading:"lazy",decoding:"async"}):"@"},t.tokenId)})}),e.jsx("span",{className:"home-prompt__reference-count",children:i("home.referenceTrayCount",{count:p.length})})]}):null,e.jsxs("div",{className:`home-prompt__panes${d?" home-prompt__panes--dual":""}`,children:[e.jsxs("div",{className:"home-prompt__pane",children:[e.jsx("label",{className:"home-prompt__label",htmlFor:"home-prompt-input",children:i(d?"nai.positivePrompt.label":"prompt.label")}),e.jsx("textarea",{id:"home-prompt-input",className:"home-prompt__textarea",rows:5,value:s,placeholder:i(d?"nai.positivePrompt.placeholder":"prompt.placeholder"),"aria-describedby":d?"home-prompt-hint":void 0,onCompositionStart:()=>{b.current=!0},onCompositionEnd:()=>{b.current=!1},onChange:t=>r(t.target.value),onKeyDown:t=>{t.key!=="Enter"||!(t.metaKey||t.ctrlKey)||t.defaultPrevented||b.current||t.nativeEvent.isComposing||t.nativeEvent.keyCode===229||(t.preventDefault(),g())}}),d?e.jsx("p",{id:"home-prompt-hint",className:"home-prompt__hint",children:i("nai.positivePrompt.hint",{count:s.length})}):null]}),e.jsx(R,{variant:"home",onSubmit:g})]}),e.jsxs("div",{className:"home-prompt__footer",children:[e.jsx(M,{className:"home-prompt__provider",items:P,value:n,onChange:a,ariaLabel:i("readiness.provider")}),e.jsx("button",{type:"button",className:"home-prompt__generate",disabled:f||s.trim().length===0,onClick:g,children:f?i("generate.buttonLoading",{n:N}):i("generate.button")})]})]})}const I=/\.(mp4|webm|mov)(?:$|[?#])/i;function F(o){return o.mediaType==="video"||I.test(o.filename??"")||I.test(o.url??o.image)?o.thumb:o.thumb||o.url||o.image||void 0}function K({item:o,featured:s}){const{t:r}=m(),[n,a]=x.useState(!1),c=F(o),j=(o.userPrompt?.trim()||o.prompt?.trim()||r("home.untitledResult")).slice(0,60),h=r("home.recentResultAlt",{prompt:j});return!c||n?e.jsx("div",{className:"home-recent-card__fallback",role:"img","aria-label":h,children:r("home.mediaUnavailable")}):e.jsx("img",{src:c,alt:h,loading:s?"eager":"lazy",decoding:"async",onError:()=>a(!0)})}function W(){const o=l(n=>n.history),{t:s}=m(),r=o.slice(0,5);return r.length===0?e.jsx("p",{className:"home-recent-empty",role:"status",children:s("history.emptyRecent")}):e.jsx("div",{className:"home-recent-row",role:"list","aria-label":s("home.recentTitle"),children:r.map((n,a)=>{const c=a===0;return e.jsx("figure",{className:`home-recent-card${c?" is-featured":""}`,role:"listitem",children:e.jsx(K,{item:n,featured:c})},w(n))})})}function z(){return e.jsxs("svg",{className:"home-hero__mode-arrow",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[e.jsx("path",{d:"M5 12h14"}),e.jsx("path",{d:"m12 5 7 7-7 7"})]})}function q(){const{t:o}=m(),s=T(),r=x.useMemo(()=>Object.values(s).filter(a=>a?.ok).length,[s]),n=x.useMemo(()=>Object.keys(s).length,[s]);return e.jsxs("div",{className:"home-hero",children:[e.jsx("div",{className:"home-hero__mark","aria-hidden":"true",children:"IMA2"}),e.jsxs("header",{className:"home-hero__intro",children:[e.jsx("h1",{className:"home-hero__title",children:o("home.heroTitle")}),e.jsx("p",{className:"home-hero__lede",children:o("home.heroLede")})]}),e.jsxs("p",{className:"home-hero__readiness",role:"status",children:[e.jsx("span",{className:`home-hero__dot${r>0?" is-ready":""}`,"aria-hidden":"true"}),r>0?o("home.lanesReady",{ready:r,total:n}):o("home.lanesNone")]}),e.jsx("div",{className:"home-workspace__composer",children:e.jsx(B,{providerAvailability:s})}),e.jsxs("section",{className:"home-workspace__recent","aria-labelledby":"home-recent-title",children:[e.jsx("h2",{id:"home-recent-title",children:o("home.recentTitle")}),e.jsx(W,{})]}),e.jsx(X,{})]})}function X(){const{t:o}=m(),s=l(a=>a.setUIMode),r=[{mode:"classic",label:o("nav.create"),hint:o("home.modeCreateHint"),enabled:!0,icon:L},{mode:"node",label:o("nav.node"),hint:o("home.modeNodeHint"),enabled:S,icon:O},{mode:"agent",label:o("nav.agent"),hint:o("home.modeAgentHint"),enabled:G,icon:H},{mode:"assets",label:o("nav.assets"),hint:o("home.modeAssetsHint"),enabled:!0,icon:U}];function n(a){s(a),history.replaceState(null,"",D[a]??"#create")}return e.jsxs("nav",{className:"home-modes","aria-label":o("home.modesTitle"),children:[e.jsx("h2",{className:"home-modes__title",children:o("home.modesTitle")}),r.filter(a=>a.enabled).map(a=>e.jsxs("button",{type:"button",className:"home-modes__item",onClick:()=>n(a.mode),children:[e.jsx("span",{className:"home-modes__icon",children:e.jsx(a.icon,{})}),e.jsx("span",{className:"home-modes__label",children:a.label}),e.jsx("span",{className:"home-modes__hint",children:a.hint}),e.jsx(z,{})]},a.mode))]})}function Y(){const{t:o}=m();return e.jsx("section",{className:"home-workspace","aria-label":o("nav.home"),children:e.jsx("div",{className:"home-workspace__inner",children:e.jsx(q,{})})})}export{Y as HomeWorkspace};
1
+ import{f as x,j as e}from"./index-va83o9G5.js";import{a as l,u as m,ai as A,aj as E,ak as C,al as R,t as M,am as w,an as T,ao as L,ap as O,aq as S,ar as H,as as G,at as U,au as D}from"./App-B9y6oVuL.js";const V={oauth:"GPT OAuth",api:"GPT API",grok:"Grok OAuth","grok-api":"Grok API",agy:"Antigravity","gemini-api":"Gemini API",atlascloud:"Atlas Cloud",minimax:"MiniMax",nai:"NovelAI",comfy:"ComfyUI"};function $(o){if(o.kind==="attachment")return o.source.dataUrl;if(o.source.thumbnailUrl)return o.source.thumbnailUrl;const s=o.source.referenceFilenames[0];if(s)return s.startsWith("/generated/")?s:`/generated/${s.split("/").map(encodeURIComponent).join("/")}`}function B({providerAvailability:o}){const s=l(t=>t.prompt),r=l(t=>t.setPrompt),n=l(t=>t.provider),a=l(t=>t.setProvider),c=l(t=>t.selectedPresetIds),j=l(t=>t.removePreset),h=l(t=>t.generate),N=l(t=>t.activeGenerations),p=l(t=>t.trayItems),b=x.useRef(!1),{t:i}=m(),k=new Set(c),y=A().filter(t=>k.has(t.id)),f=N>0,d=n==="nai",g=()=>{f||s.trim().length===0||(h(),l.getState().setUIMode("classic"))},P=Object.entries(V).map(([t,u])=>{const _=t,v=o[_];return{value:_,label:u,sub:_==="comfy"?v.reason:v.ok?i("readiness.ready"):v.reason,disabled:!v.ok&&_!=="comfy"}});return e.jsxs("div",{className:"home-prompt",children:[y.length>0?e.jsx(E,{className:"home-prompt__chips",ariaLabel:i("home.selectedPresets"),children:y.map(t=>e.jsx(C,{selected:!0,onRemove:()=>j(t.id),removeLabel:i("common.removeNamed",{name:t.name}),title:t.category,children:t.name},t.id))}):null,p.length>0?e.jsxs("div",{className:"home-prompt__reference-strip",role:"group","aria-label":i("home.referenceTrayAria",{count:p.length}),children:[e.jsx("span",{className:"home-prompt__reference-thumbs","aria-hidden":"true",children:p.map(t=>{const u=$(t);return e.jsx("span",{className:"home-prompt__reference-thumb",children:u?e.jsx("img",{src:u,alt:"",loading:"lazy",decoding:"async"}):"@"},t.tokenId)})}),e.jsx("span",{className:"home-prompt__reference-count",children:i("home.referenceTrayCount",{count:p.length})})]}):null,e.jsxs("div",{className:`home-prompt__panes${d?" home-prompt__panes--dual":""}`,children:[e.jsxs("div",{className:"home-prompt__pane",children:[e.jsx("label",{className:"home-prompt__label",htmlFor:"home-prompt-input",children:i(d?"nai.positivePrompt.label":"prompt.label")}),e.jsx("textarea",{id:"home-prompt-input",className:"home-prompt__textarea",rows:5,value:s,placeholder:i(d?"nai.positivePrompt.placeholder":"prompt.placeholder"),"aria-describedby":d?"home-prompt-hint":void 0,onCompositionStart:()=>{b.current=!0},onCompositionEnd:()=>{b.current=!1},onChange:t=>r(t.target.value),onKeyDown:t=>{t.key!=="Enter"||!(t.metaKey||t.ctrlKey)||t.defaultPrevented||b.current||t.nativeEvent.isComposing||t.nativeEvent.keyCode===229||(t.preventDefault(),g())}}),d?e.jsx("p",{id:"home-prompt-hint",className:"home-prompt__hint",children:i("nai.positivePrompt.hint",{count:s.length})}):null]}),e.jsx(R,{variant:"home",onSubmit:g})]}),e.jsxs("div",{className:"home-prompt__footer",children:[e.jsx(M,{className:"home-prompt__provider",items:P,value:n,onChange:a,ariaLabel:i("readiness.provider")}),e.jsx("button",{type:"button",className:"home-prompt__generate",disabled:f||s.trim().length===0,onClick:g,children:f?i("generate.buttonLoading",{n:N}):i("generate.button")})]})]})}const I=/\.(mp4|webm|mov)(?:$|[?#])/i;function F(o){return o.mediaType==="video"||I.test(o.filename??"")||I.test(o.url??o.image)?o.thumb:o.thumb||o.url||o.image||void 0}function K({item:o,featured:s}){const{t:r}=m(),[n,a]=x.useState(!1),c=F(o),j=(o.userPrompt?.trim()||o.prompt?.trim()||r("home.untitledResult")).slice(0,60),h=r("home.recentResultAlt",{prompt:j});return!c||n?e.jsx("div",{className:"home-recent-card__fallback",role:"img","aria-label":h,children:r("home.mediaUnavailable")}):e.jsx("img",{src:c,alt:h,loading:s?"eager":"lazy",decoding:"async",onError:()=>a(!0)})}function W(){const o=l(n=>n.history),{t:s}=m(),r=o.slice(0,5);return r.length===0?e.jsx("p",{className:"home-recent-empty",role:"status",children:s("history.emptyRecent")}):e.jsx("div",{className:"home-recent-row",role:"list","aria-label":s("home.recentTitle"),children:r.map((n,a)=>{const c=a===0;return e.jsx("figure",{className:`home-recent-card${c?" is-featured":""}`,role:"listitem",children:e.jsx(K,{item:n,featured:c})},w(n))})})}function z(){return e.jsxs("svg",{className:"home-hero__mode-arrow",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[e.jsx("path",{d:"M5 12h14"}),e.jsx("path",{d:"m12 5 7 7-7 7"})]})}function q(){const{t:o}=m(),s=T(),r=x.useMemo(()=>Object.values(s).filter(a=>a?.ok).length,[s]),n=x.useMemo(()=>Object.keys(s).length,[s]);return e.jsxs("div",{className:"home-hero",children:[e.jsx("div",{className:"home-hero__mark","aria-hidden":"true",children:"IMA2"}),e.jsxs("header",{className:"home-hero__intro",children:[e.jsx("h1",{className:"home-hero__title",children:o("home.heroTitle")}),e.jsx("p",{className:"home-hero__lede",children:o("home.heroLede")})]}),e.jsxs("p",{className:"home-hero__readiness",role:"status",children:[e.jsx("span",{className:`home-hero__dot${r>0?" is-ready":""}`,"aria-hidden":"true"}),r>0?o("home.lanesReady",{ready:r,total:n}):o("home.lanesNone")]}),e.jsx("div",{className:"home-workspace__composer",children:e.jsx(B,{providerAvailability:s})}),e.jsxs("section",{className:"home-workspace__recent","aria-labelledby":"home-recent-title",children:[e.jsx("h2",{id:"home-recent-title",children:o("home.recentTitle")}),e.jsx(W,{})]}),e.jsx(X,{})]})}function X(){const{t:o}=m(),s=l(a=>a.setUIMode),r=[{mode:"classic",label:o("nav.create"),hint:o("home.modeCreateHint"),enabled:!0,icon:L},{mode:"node",label:o("nav.node"),hint:o("home.modeNodeHint"),enabled:S,icon:O},{mode:"agent",label:o("nav.agent"),hint:o("home.modeAgentHint"),enabled:G,icon:H},{mode:"assets",label:o("nav.assets"),hint:o("home.modeAssetsHint"),enabled:!0,icon:U}];function n(a){s(a),history.replaceState(null,"",D[a]??"#create")}return e.jsxs("nav",{className:"home-modes","aria-label":o("home.modesTitle"),children:[e.jsx("h2",{className:"home-modes__title",children:o("home.modesTitle")}),r.filter(a=>a.enabled).map(a=>e.jsxs("button",{type:"button",className:"home-modes__item",onClick:()=>n(a.mode),children:[e.jsx("span",{className:"home-modes__icon",children:e.jsx(a.icon,{})}),e.jsx("span",{className:"home-modes__label",children:a.label}),e.jsx("span",{className:"home-modes__hint",children:a.hint}),e.jsx(z,{})]},a.mode))]})}function Y(){const{t:o}=m();return e.jsx("section",{className:"home-workspace","aria-label":o("nav.home"),children:e.jsx("div",{className:"home-workspace__inner",children:e.jsx(q,{})})})}export{Y as HomeWorkspace};
@@ -1 +1 @@
1
- import{f as T,j as f}from"./index-CHeVGnoy.js";import{u as he,a as X,k as de,af as ge,ag as me,ah as pe}from"./App-pMN1OjNW.js";const q={tolerance:40,softness:10,spill:50};function te(t,e,n){const o=128-.168736*t-.331264*e+.5*n,a=128+.5*t-.418688*e-.081312*n;return[o,a]}function ne(t,e,n){return .299*t+.587*e+.114*n}function ye(t,e,n,o){const a=e*n,u=new Uint8Array(a);for(let s=0;s<a;s++)t[s]<o&&(u[s]=1);const g=new Uint8Array(a),l=new Int32Array(a);let c=0,d=0;const h=s=>{u[s]&&!g[s]&&(g[s]=1,l[d++]=s)};for(let s=0;s<e;s++)h(s),h((n-1)*e+s);for(let s=0;s<n;s++)h(s*e),h(s*e+e-1);for(;c<d;){const s=l[c++],x=s%e,i=(s-x)/e;x>0&&h(s-1),x<e-1&&h(s+1),i>0&&h(s-e),i<n-1&&h(s+e)}for(let s=0;s<a;s++)u[s]&&!g[s]&&(t[s]=o)}function oe(t){const{width:e,height:n,data:o}=t;if(e<2||n<2||o.length<e*n*4)throw new Error("colorKey: image too small or malformed pixel buffer");const a=4,u=[0,Math.max(0,e-a)],g=[0,Math.max(0,n-a)],l=[],c=[],d=[];for(const s of u)for(const x of g)for(let i=x;i<Math.min(x+a,n);i++)for(let p=s;p<Math.min(s+a,e);p++){const _=(i*e+p)*4;l.push(o[_]),c.push(o[_+1]),d.push(o[_+2])}const h=s=>{const x=[...s].sort((i,p)=>i-p);return x[Math.floor(x.length/2)]};return{r:h(l),g:h(c),b:h(d)}}function xe(t,e){const{width:n,height:o,data:a}=t;if(!n||!o||a.length!==n*o*4)throw new Error("colorKey: empty or malformed pixel buffer");const u=Math.max(0,Math.min(100,e.tolerance)),g=Math.max(0,Math.min(50,e.softness)),l=Math.max(0,Math.min(100,e.spill))/100,c=u/100*120,d=c+g/100*120,[h,s]=te(e.keyColor.r,e.keyColor.g,e.keyColor.b),x=e.keyColor.r,i=e.keyColor.g,p=e.keyColor.b,_=i>x+20&&i>p+20&&i>60,U=Math.max(x,i,p)-Math.min(x,i,p)<40,P=ne(x,i,p),F=10+u/100*15,D=400,S=n*o,K=new Float32Array(S);for(let k=0;k<S;k++){const y=k*4,M=a[y],N=a[y+1],v=a[y+2],[I,A]=te(M,N,v),b=Math.hypot(I-h,A-s);if(U)if(b>F)K[k]=D;else{const C=Math.abs(ne(M,N,v)-P)*.8;K[k]=Math.hypot(b,C)}else K[k]=b}const B=new Float32Array(S);for(let k=0;k<o;k++)for(let y=0;y<n;y++){const M=k*n+y;if(K[M]>=D){B[M]=D;continue}let N=0,v=0;for(let I=-1;I<=1;I++){const A=k+I;if(!(A<0||A>=o))for(let b=-1;b<=1;b++){const C=y+b;if(C<0||C>=n)continue;const L=K[A*n+C];L>=D||(N+=L,v++)}}B[M]=v>0?N/v:D}U&&ye(B,n,o,d);const $=d+l*120,E=new Uint8ClampedArray(a.length);for(let k=0;k<S;k++){const y=k*4,M=a[y],N=a[y+1],v=a[y+2],I=a[y+3],A=B[k];let b;A<=c?b=0:A<d?b=Math.pow((A-c)/(d-c),1.5)*255:b=255;let C=M,L=N,O=v;if(_&&l>0&&b>0){const V=$>c?Math.max(0,1-(A-c)/($-c)):0;if(V>0){const J=(M+v)/2,r=Math.max(0,N-J)*V*l;L=Math.round(N-r);const m=r*.3;C=Math.min(255,Math.round(M+m)),O=Math.min(255,Math.round(v+m))}}E[y]=C,E[y+1]=L,E[y+2]=O,E[y+3]=Math.min(I,Math.round(b))}if(_&&l>0){let k=new Uint8Array(S);for(let y=0;y<o;y++)for(let M=0;M<n;M++){const N=y*n+M;if(E[N*4+3]===0)continue;let v=!1;e:for(let I=-1;I<=1;I++){const A=y+I;if(!(A<0||A>=o))for(let b=-1;b<=1;b++){const C=M+b;if(!(C<0||C>=n)&&E[(A*n+C)*4+3]===0){v=!0;break e}}}v&&(k[N]=1)}for(let y=0;y<3;y++){const M=new Uint8Array(S);for(let N=0;N<o;N++)for(let v=0;v<n;v++){const I=N*n+v;if(k[I]){M[I]=1;continue}if(E[I*4+3]===0)continue;let A=!1;for(let b=-1;b<=1&&!A;b++){const C=N+b;if(!(C<0||C>=o))for(let L=-1;L<=1&&!A;L++){const O=v+L;O<0||O>=n||k[C*n+O]&&(A=!0)}}A&&(M[I]=1)}k=M}for(let y=0;y<S;y++){if(!k[y])continue;const M=y*4,N=E[M],v=E[M+1],I=E[M+2],A=Math.max(N,I);if(v>A-8){const b=Math.max(0,A-4),C=Math.max(0,v-b);E[M+1]=Math.max(0,v-C),E[M]=Math.min(255,N+Math.round(C*.25)),E[M+2]=Math.min(255,I+Math.round(C*.25))}}}return{width:n,height:o,data:E}}function ke(t){return Math.round(Math.max(0,Math.min(100,t))*.7)}function ae(t,e,n){const o=Math.max(0,Math.min(e-1,Math.round(t.x*(e-1))));return Math.max(0,Math.min(n-1,Math.round(t.y*(n-1))))*e+o}function be(t,e,n,o){for(const a of n)if(Math.max(Math.abs(t[e]-a.r),Math.abs(t[e+1]-a.g),Math.abs(t[e+2]-a.b))<=o)return!0;return!1}function Me(t,e,n){const{width:o,height:a,data:u}=t,g=o*a,l=new Uint8Array(g),c=new Uint8Array(g),d=new Int32Array(g),h=e.map(i=>{const p=ae(i,o,a)*4;return{r:u[p],g:u[p+1],b:u[p+2]}});let s=0;const x=i=>{c[i]||(c[i]=1,u[i*4+3]!==0&&be(u,i*4,h,n)&&(d[s++]=i))};for(const i of e)x(ae(i,o,a));for(;s>0;){const i=d[--s];l[i]=1;const p=i%o;p>0&&x(i-1),p<o-1&&x(i+1),i>=o&&x(i-o),i<g-o&&x(i+o)}return l}function _e(t,e,n,o){if(n.length===0)return;if(t.width!==e.width||t.height!==e.height||t.data.length!==e.data.length)throw new Error("wandErase: target/source buffer size mismatch");const a=Me(e,n,ke(o));for(let u=0;u<a.length;u++)a[u]&&(t.data[u*4+3]=0)}const we={reach:4,spillMaxFraction:.005},se=18,ve=180,Ce=40,je=2,Q=0,Se=1,re=2,le=3;function Z(t){const e=[t.r,t.g,t.b],n=[],o=[];for(let a=0;a<3;a++)if(e[a]>=192)n.push(a);else if(e[a]<64)o.push(a);else return null;return n.length===0||o.length===0?null:{keyed:n,unkeyed:o}}function z(t,e,n,o){const a=[t,e,n];let u=0;for(const l of o.keyed)u+=a[l];let g=0;for(const l of o.unkeyed)g+=a[l];return u/o.keyed.length-g/o.unkeyed.length}function Ne(t,e,n,o){return Math.hypot(t-o.r,e-o.g,n-o.b)}function ce(t,e,n,o,a,u){const g=Math.min(u/a,1),l=1-g;if(l<=0)return[0,0,0,0];const c=(d,h)=>Math.min(255,Math.max(0,Math.round((d-g*h)/l)));return[l,c(t,o.r),c(e,o.g),c(n,o.b)]}function Ee(t,e,n,o){const a=e*n,u=255,g=new Uint8Array(a).fill(u);let l=[];for(let d=0;d<a;d++)t[d]&&(g[d]=0,l.push(d));let c=0;for(;l.length>0&&c<o;){c++;const d=[];for(const h of l){const s=h%e,x=(h-s)/e;for(let i=-1;i<=1;i++){const p=x+i;if(!(p<0||p>=n))for(let _=-1;_<=1;_++){const w=s+_;if(w<0||w>=e)continue;const U=p*e+w;g[U]===u&&(g[U]=c,d.push(U))}}}l=d}return g}function Ae(t,e,n,o){const a=t.width*t.height,u=new Uint8Array(a),g=new Uint8Array(a);for(let l=0;l<a;l++){const c=l*4;if(e.data[c+3]===0){u[l]=Q,g[l]=1;continue}const d=t.data[c],h=t.data[c+1],s=t.data[c+2];z(d,h,s,o)<se?u[l]=Se:Ne(d,h,s,n)<=ve?u[l]=re:u[l]=le}return{classes:u,keyedMask:g}}function Ue(t,e,n,o,a,u,g,l){const c=e.width*e.height,d=new Uint8Array(c);for(let h=0;h<c;h++){const s=u[h];if(!(s>0&&s<=l))continue;const x=g[h];if(x===re){if(s>je)continue}else if(x!==le)continue;const i=h*4,p=e.data[i],_=e.data[i+1],w=e.data[i+2],U=z(p,_,w,o),[P,F,D,S]=ce(p,_,w,n,a,U),K=Math.round(e.data[i+3]*P);K<=0?(t.data[i]=0,t.data[i+1]=0,t.data[i+2]=0,t.data[i+3]=0):(t.data[i]=F,t.data[i+1]=D,t.data[i+2]=S,t.data[i+3]=K),d[h]=1}return d}function Re(t,e,n,o,a,u,g,l){const{width:c,height:d}=e,h=c*d;let s=0;for(let w=0;w<h;w++)u[w]!==Q&&s++;const x=Math.max(32,Math.round(s*l)),i=new Float32Array(h).fill(-1);for(let w=0;w<h;w++){if(g[w]||u[w]===Q)continue;const U=w*4;if(t.data[U+3]===0)continue;const P=z(e.data[U],e.data[U+1],e.data[U+2],o);P>=se&&(i[w]=P)}const p=new Uint8Array(h),_=[];for(let w=0;w<h;w++){if(i[w]<0||p[w])continue;p[w]=1,_.length=0,_.push(w);const U=[];let P=-1;for(;_.length>0;){const F=_.pop();U.push(F),i[F]>P&&(P=i[F]);const D=F%c,S=(F-D)/c;for(let K=-1;K<=1;K++){const B=S+K;if(!(B<0||B>=d))for(let $=-1;$<=1;$++){const E=D+$;if(E<0||E>=c)continue;const k=B*c+E;i[k]>=0&&!p[k]&&(p[k]=1,_.push(k))}}}if(!(U.length>x)&&!(P<=Ce))for(const F of U){const D=F*4,S=e.data[D],K=e.data[D+1],B=e.data[D+2],[$,E,k,y]=ce(S,K,B,n,a,i[F]);$<=0||(t.data[D]=E,t.data[D+1]=k,t.data[D+2]=y)}}}function Ie(t,e,n){if(!t.width||!t.height||t.width!==e.width||t.height!==e.height||t.data.length!==e.data.length||t.data.length!==t.width*t.height*4)throw new Error("softUnmix: empty or mismatched pixel buffers");const o=Z(n.keyColor);if(!o)return;const a=z(n.keyColor.r,n.keyColor.g,n.keyColor.b,o);if(a<=0)return;const u=Math.max(0,Math.min(254,Math.round(n.reach))),{classes:g,keyedMask:l}=Ae(e,t,n.keyColor,o);let c;if(u>0){const d=Ee(l,e.width,e.height,u);c=Ue(t,e,n.keyColor,o,a,d,g,u)}else c=new Uint8Array(e.width*e.height);n.spillMaxFraction>0&&Re(t,e,n.keyColor,o,a,g,c,n.spillMaxFraction)}function ie(t,e,n){const o=`/generated/${encodeURIComponent(e)}`;return{...t,image:o,url:o,filename:e,mediaType:n,kind:"edit",requestId:`derived:${e}`,createdAt:Date.now(),providerUrl:null}}function Fe(){const{t}=he(),e=X(r=>r.keyingTarget),n=X(r=>r.setKeyingTarget),o=de(!!e,()=>n(null)),a=X(r=>r.addAssetGenDerivedItem),u=X(r=>r.selectedProjectId),g=X(r=>r.showToast),[l,c]=T.useState("loading"),[d,h]=T.useState(!1),[s,x]=T.useState(null),[i,p]=T.useState(null),[_,w]=T.useState(q.tolerance),[U,P]=T.useState(q.softness),[F,D]=T.useState(q.spill),[S,K]=T.useState(null),[B,$]=T.useState("erase"),[E,k]=T.useState([]),[y,M]=T.useState(!0),N=T.useRef(null),v=T.useRef(null),I=T.useRef(0),A=T.useRef(null),b=T.useRef(null),C=T.useCallback(()=>{A.current?.(),A.current=null},[]),L=e?.mediaType==="video",O=e?L&&e.filename?`/api/video/frame?file=${encodeURIComponent(e.filename)}&position=0`:e.url||e.image:null;T.useEffect(()=>{if(!O)return;let r=!0;c("loading"),N.current=null,K(null),k([]),$("erase");const m=new Image;return m.onload=()=>{if(r)try{const j=document.createElement("canvas");j.width=m.naturalWidth,j.height=m.naturalHeight;const R=j.getContext("2d");if(!R)throw new Error("no 2d context");R.drawImage(m,0,0);const Y=R.getImageData(0,0,j.width,j.height);N.current=Y,K(oe(Y)),c("ready")}catch{r&&c("error")}},m.onerror=()=>{r&&c("error")},m.src=O,()=>{r=!1,m.onload=null,m.onerror=null}},[O]),T.useEffect(()=>(b.current=e?.filename??null,C(),h(!1),p(null),x(null),C),[C,e?.filename]),T.useEffect(()=>{if(!(l!=="ready"||!S))return cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{const r=N.current,m=v.current;if(!(!r||!m))try{const j=xe({width:r.width,height:r.height,data:r.data},{keyColor:S,tolerance:_,softness:U,spill:F});y&&Z(S)&&Ie(j,{width:r.width,height:r.height,data:r.data},{keyColor:S,...we}),E.length>0&&_e(j,{width:r.width,height:r.height,data:r.data},E,_),m.width=j.width,m.height=j.height;const R=m.getContext("2d");if(!R)return;const Y=R.createImageData(j.width,j.height);Y.data.set(j.data),R.putImageData(Y,0,0)}catch{c("error")}}),()=>cancelAnimationFrame(I.current)},[l,S,_,U,F,E,y]);const V=T.useCallback(r=>{const m=N.current,j=v.current;if(!m||!j)return;const R=j.getBoundingClientRect(),Y=Math.max(0,Math.min(1,(r.clientX-R.left)/R.width)),G=Math.max(0,Math.min(1,(r.clientY-R.top)/R.height));if(B==="erase"&&!L){k(fe=>[...fe,{x:Y,y:G}]);return}const H=Math.floor((r.clientX-R.left)/R.width*m.width),ue=Math.floor((r.clientY-R.top)/R.height*m.height),W=(Math.max(0,Math.min(m.height-1,ue))*m.width+Math.max(0,Math.min(m.width-1,H)))*4;K({r:m.data[W],g:m.data[W+1],b:m.data[W+2]})},[B,L]),J=T.useCallback(()=>{const r=v.current;r&&r.toBlob(m=>{if(!m)return;const j=URL.createObjectURL(m),R=document.createElement("a");R.href=j,R.download=`${(e?.filename||"asset").replace(/\.[a-z]+$/i,"")}-keyed.png`,R.click(),URL.revokeObjectURL(j)},"image/png")},[e]),ee=T.useCallback(()=>{const r=v.current;if(!(!r||!e?.filename||d)){if(h(!0),x(null),L){ge({source:e.filename,keyParams:{tolerance:_,softness:U,keyColor:S??void 0},projectId:u,name:`${(e.prompt||"asset").trim().slice(0,60)} (keyed)`}).then(({requestId:m})=>{if(b.current!==e.filename)return;p(0),C();const j=me(m,null,(R,Y)=>{const G=Y&&typeof Y=="object"?Y:{};if(R==="keying-progress"){const H=G.outTimeMs;p(typeof H=="number"&&Number.isFinite(H)?H:0)}else if(R==="keying-done"){C();const H=G.filePath;if(typeof H=="string"&&H.trim()){a(ie(e,H.trim(),"video")),h(!1),p(null),g(t("keying.videoSaved")),n(null);return}h(!1),p(null),x(t("keying.saveError"))}else R==="keying-error"&&(C(),h(!1),p(null),x(typeof G.error=="string"&&G.error?G.error:t("keying.saveError")))});A.current=j}).catch(m=>{b.current===e.filename&&(h(!1),x(m instanceof Error?m.message:t("keying.saveError")))});return}r.toBlob(m=>{if(b.current===e.filename){if(!m){h(!1),x(t("keying.saveError"));return}pe(m,{source:e.filename,projectId:u,name:`${(e.prompt||"asset").trim().slice(0,60)} (keyed)`,meta:{keyParams:{tolerance:_,softness:U,spill:F},prompt:e.prompt}}).then(({filePath:j})=>{if(b.current===e.filename){if(typeof j!="string"||!j.trim())throw new Error(t("keying.saveError"));a(ie(e,j.trim(),"image")),g(t("keying.saved")),n(null)}}).catch(j=>{b.current===e.filename&&x(j instanceof Error?j.message:t("keying.saveError"))}).finally(()=>{b.current===e.filename&&h(!1)})}},"image/png")}},[e,d,L,S,u,_,U,F,C,a,g,n,t]);return e?f.jsx("div",{className:"assetgen-popup-backdrop",onClick:()=>n(null),children:f.jsxs("div",{ref:o,className:"keying-panel",role:"dialog","aria-modal":"true","aria-label":t("keying.title"),onClick:r=>r.stopPropagation(),children:[f.jsxs("header",{className:"keying-panel__head",children:[f.jsx("h2",{children:t("keying.title")}),S?f.jsxs("span",{className:"keying-panel__key",title:t("keying.keyColor"),children:[L?null:f.jsxs("span",{className:"keying-panel__modes",role:"group","aria-label":t("keying.clickMode"),children:[f.jsx("button",{type:"button",className:B==="erase"?"is-active":"","aria-pressed":B==="erase",onClick:()=>$("erase"),children:t("keying.modeErase")}),f.jsx("button",{type:"button",className:B==="pick"?"is-active":"","aria-pressed":B==="pick",onClick:()=>$("pick"),children:t("keying.modePick")})]}),E.length>0?f.jsx("button",{type:"button",className:"keying-panel__undo",onClick:()=>k(r=>r.slice(0,-1)),children:t("keying.undoClick",{count:String(E.length)})}):null,f.jsx("span",{className:"assetgen-bg-picker__swatch",style:{background:`rgb(${S.r},${S.g},${S.b})`},"aria-hidden":"true"}),f.jsx("span",{className:"keying-panel__hint",children:t(B==="erase"&&!L?"keying.eraseHint":"keying.pickHint")})]}):null]}),f.jsx("div",{className:"keying-panel__compare","aria-busy":l==="loading",children:l==="error"?f.jsxs("div",{className:"keying-panel__error",role:"alert",children:[f.jsx("p",{children:t("keying.loadError")}),f.jsx("button",{type:"button",onClick:()=>n(null),children:t("project.close")})]}):f.jsxs(f.Fragment,{children:[f.jsxs("figure",{className:"keying-panel__preview",children:[f.jsx("figcaption",{className:"keying-panel__preview-label",children:t("keying.original")}),f.jsx("div",{className:"keying-panel__stage keying-panel__stage--original",children:f.jsx("img",{src:O??"",alt:t("keying.originalAlt")})})]}),f.jsxs("figure",{className:"keying-panel__preview",children:[f.jsx("figcaption",{className:"keying-panel__preview-label",children:t("keying.removed")}),f.jsxs("div",{className:"keying-panel__stage",children:[f.jsx("canvas",{ref:v,className:"keying-panel__canvas",onClick:V,"aria-label":t("keying.previewAlt")}),l==="loading"?f.jsx("span",{className:"keying-panel__loading",role:"status",children:t("keying.previewLoading")}):null]})]})]})}),f.jsxs("details",{className:"keying-panel__advanced",children:[f.jsx("summary",{children:t("keying.advanced")}),f.jsxs("div",{className:"keying-panel__controls",children:[f.jsxs("label",{children:[t("keying.tolerance")," ",f.jsx("output",{children:_}),f.jsx("input",{type:"range",min:0,max:100,value:_,onChange:r=>w(Number(r.target.value))})]}),f.jsxs("label",{children:[t("keying.softness")," ",f.jsx("output",{children:U}),f.jsx("input",{type:"range",min:0,max:50,value:U,onChange:r=>P(Number(r.target.value))})]}),f.jsxs("label",{children:[t("keying.spill")," ",f.jsx("output",{children:F}),f.jsx("input",{type:"range",min:0,max:100,value:F,onChange:r=>D(Number(r.target.value))})]}),f.jsxs("label",{className:"keying-panel__unmix",children:[f.jsx("input",{type:"checkbox",checked:y,disabled:!S||!Z(S),onChange:r=>M(r.target.checked)}),t("keying.unmix"),f.jsx("span",{className:"keying-panel__hint",children:t("keying.unmixHint")})]}),f.jsx("button",{type:"button",className:"keying-panel__reset",onClick:()=>{w(q.tolerance),P(q.softness),D(q.spill),k([]),M(!0),N.current&&K(oe(N.current))},children:t("keying.reset")})]})]}),f.jsxs("footer",{className:"keying-panel__actions",children:[s?f.jsx("span",{className:"keying-panel__save-error",role:"alert",children:s}):null,f.jsx("button",{type:"button",className:"assetgen-generate",disabled:l!=="ready"||d||!e.filename,onClick:ee,children:d?i!==null?t("keying.videoKeying",{seconds:String(Math.round(i/1e3))}):t("keying.saving"):t(L?"keying.videoSave":"keying.save")}),L?null:f.jsx("button",{type:"button",className:"assetgen-popup__close",disabled:l!=="ready",onClick:J,children:t("keying.download")}),f.jsx("button",{type:"button",className:"assetgen-popup__close",onClick:()=>n(null),children:t("project.close")})]})]})}):null}export{Fe as K};
1
+ import{f as T,j as f}from"./index-va83o9G5.js";import{u as he,a as X,k as de,af as ge,ag as me,ah as pe}from"./App-B9y6oVuL.js";const q={tolerance:40,softness:10,spill:50};function te(t,e,n){const o=128-.168736*t-.331264*e+.5*n,a=128+.5*t-.418688*e-.081312*n;return[o,a]}function ne(t,e,n){return .299*t+.587*e+.114*n}function ye(t,e,n,o){const a=e*n,u=new Uint8Array(a);for(let s=0;s<a;s++)t[s]<o&&(u[s]=1);const g=new Uint8Array(a),l=new Int32Array(a);let c=0,d=0;const h=s=>{u[s]&&!g[s]&&(g[s]=1,l[d++]=s)};for(let s=0;s<e;s++)h(s),h((n-1)*e+s);for(let s=0;s<n;s++)h(s*e),h(s*e+e-1);for(;c<d;){const s=l[c++],x=s%e,i=(s-x)/e;x>0&&h(s-1),x<e-1&&h(s+1),i>0&&h(s-e),i<n-1&&h(s+e)}for(let s=0;s<a;s++)u[s]&&!g[s]&&(t[s]=o)}function oe(t){const{width:e,height:n,data:o}=t;if(e<2||n<2||o.length<e*n*4)throw new Error("colorKey: image too small or malformed pixel buffer");const a=4,u=[0,Math.max(0,e-a)],g=[0,Math.max(0,n-a)],l=[],c=[],d=[];for(const s of u)for(const x of g)for(let i=x;i<Math.min(x+a,n);i++)for(let p=s;p<Math.min(s+a,e);p++){const _=(i*e+p)*4;l.push(o[_]),c.push(o[_+1]),d.push(o[_+2])}const h=s=>{const x=[...s].sort((i,p)=>i-p);return x[Math.floor(x.length/2)]};return{r:h(l),g:h(c),b:h(d)}}function xe(t,e){const{width:n,height:o,data:a}=t;if(!n||!o||a.length!==n*o*4)throw new Error("colorKey: empty or malformed pixel buffer");const u=Math.max(0,Math.min(100,e.tolerance)),g=Math.max(0,Math.min(50,e.softness)),l=Math.max(0,Math.min(100,e.spill))/100,c=u/100*120,d=c+g/100*120,[h,s]=te(e.keyColor.r,e.keyColor.g,e.keyColor.b),x=e.keyColor.r,i=e.keyColor.g,p=e.keyColor.b,_=i>x+20&&i>p+20&&i>60,U=Math.max(x,i,p)-Math.min(x,i,p)<40,P=ne(x,i,p),F=10+u/100*15,D=400,S=n*o,K=new Float32Array(S);for(let k=0;k<S;k++){const y=k*4,M=a[y],N=a[y+1],v=a[y+2],[I,A]=te(M,N,v),b=Math.hypot(I-h,A-s);if(U)if(b>F)K[k]=D;else{const C=Math.abs(ne(M,N,v)-P)*.8;K[k]=Math.hypot(b,C)}else K[k]=b}const B=new Float32Array(S);for(let k=0;k<o;k++)for(let y=0;y<n;y++){const M=k*n+y;if(K[M]>=D){B[M]=D;continue}let N=0,v=0;for(let I=-1;I<=1;I++){const A=k+I;if(!(A<0||A>=o))for(let b=-1;b<=1;b++){const C=y+b;if(C<0||C>=n)continue;const L=K[A*n+C];L>=D||(N+=L,v++)}}B[M]=v>0?N/v:D}U&&ye(B,n,o,d);const $=d+l*120,E=new Uint8ClampedArray(a.length);for(let k=0;k<S;k++){const y=k*4,M=a[y],N=a[y+1],v=a[y+2],I=a[y+3],A=B[k];let b;A<=c?b=0:A<d?b=Math.pow((A-c)/(d-c),1.5)*255:b=255;let C=M,L=N,O=v;if(_&&l>0&&b>0){const V=$>c?Math.max(0,1-(A-c)/($-c)):0;if(V>0){const J=(M+v)/2,r=Math.max(0,N-J)*V*l;L=Math.round(N-r);const m=r*.3;C=Math.min(255,Math.round(M+m)),O=Math.min(255,Math.round(v+m))}}E[y]=C,E[y+1]=L,E[y+2]=O,E[y+3]=Math.min(I,Math.round(b))}if(_&&l>0){let k=new Uint8Array(S);for(let y=0;y<o;y++)for(let M=0;M<n;M++){const N=y*n+M;if(E[N*4+3]===0)continue;let v=!1;e:for(let I=-1;I<=1;I++){const A=y+I;if(!(A<0||A>=o))for(let b=-1;b<=1;b++){const C=M+b;if(!(C<0||C>=n)&&E[(A*n+C)*4+3]===0){v=!0;break e}}}v&&(k[N]=1)}for(let y=0;y<3;y++){const M=new Uint8Array(S);for(let N=0;N<o;N++)for(let v=0;v<n;v++){const I=N*n+v;if(k[I]){M[I]=1;continue}if(E[I*4+3]===0)continue;let A=!1;for(let b=-1;b<=1&&!A;b++){const C=N+b;if(!(C<0||C>=o))for(let L=-1;L<=1&&!A;L++){const O=v+L;O<0||O>=n||k[C*n+O]&&(A=!0)}}A&&(M[I]=1)}k=M}for(let y=0;y<S;y++){if(!k[y])continue;const M=y*4,N=E[M],v=E[M+1],I=E[M+2],A=Math.max(N,I);if(v>A-8){const b=Math.max(0,A-4),C=Math.max(0,v-b);E[M+1]=Math.max(0,v-C),E[M]=Math.min(255,N+Math.round(C*.25)),E[M+2]=Math.min(255,I+Math.round(C*.25))}}}return{width:n,height:o,data:E}}function ke(t){return Math.round(Math.max(0,Math.min(100,t))*.7)}function ae(t,e,n){const o=Math.max(0,Math.min(e-1,Math.round(t.x*(e-1))));return Math.max(0,Math.min(n-1,Math.round(t.y*(n-1))))*e+o}function be(t,e,n,o){for(const a of n)if(Math.max(Math.abs(t[e]-a.r),Math.abs(t[e+1]-a.g),Math.abs(t[e+2]-a.b))<=o)return!0;return!1}function Me(t,e,n){const{width:o,height:a,data:u}=t,g=o*a,l=new Uint8Array(g),c=new Uint8Array(g),d=new Int32Array(g),h=e.map(i=>{const p=ae(i,o,a)*4;return{r:u[p],g:u[p+1],b:u[p+2]}});let s=0;const x=i=>{c[i]||(c[i]=1,u[i*4+3]!==0&&be(u,i*4,h,n)&&(d[s++]=i))};for(const i of e)x(ae(i,o,a));for(;s>0;){const i=d[--s];l[i]=1;const p=i%o;p>0&&x(i-1),p<o-1&&x(i+1),i>=o&&x(i-o),i<g-o&&x(i+o)}return l}function _e(t,e,n,o){if(n.length===0)return;if(t.width!==e.width||t.height!==e.height||t.data.length!==e.data.length)throw new Error("wandErase: target/source buffer size mismatch");const a=Me(e,n,ke(o));for(let u=0;u<a.length;u++)a[u]&&(t.data[u*4+3]=0)}const we={reach:4,spillMaxFraction:.005},se=18,ve=180,Ce=40,je=2,Q=0,Se=1,re=2,le=3;function Z(t){const e=[t.r,t.g,t.b],n=[],o=[];for(let a=0;a<3;a++)if(e[a]>=192)n.push(a);else if(e[a]<64)o.push(a);else return null;return n.length===0||o.length===0?null:{keyed:n,unkeyed:o}}function z(t,e,n,o){const a=[t,e,n];let u=0;for(const l of o.keyed)u+=a[l];let g=0;for(const l of o.unkeyed)g+=a[l];return u/o.keyed.length-g/o.unkeyed.length}function Ne(t,e,n,o){return Math.hypot(t-o.r,e-o.g,n-o.b)}function ce(t,e,n,o,a,u){const g=Math.min(u/a,1),l=1-g;if(l<=0)return[0,0,0,0];const c=(d,h)=>Math.min(255,Math.max(0,Math.round((d-g*h)/l)));return[l,c(t,o.r),c(e,o.g),c(n,o.b)]}function Ee(t,e,n,o){const a=e*n,u=255,g=new Uint8Array(a).fill(u);let l=[];for(let d=0;d<a;d++)t[d]&&(g[d]=0,l.push(d));let c=0;for(;l.length>0&&c<o;){c++;const d=[];for(const h of l){const s=h%e,x=(h-s)/e;for(let i=-1;i<=1;i++){const p=x+i;if(!(p<0||p>=n))for(let _=-1;_<=1;_++){const w=s+_;if(w<0||w>=e)continue;const U=p*e+w;g[U]===u&&(g[U]=c,d.push(U))}}}l=d}return g}function Ae(t,e,n,o){const a=t.width*t.height,u=new Uint8Array(a),g=new Uint8Array(a);for(let l=0;l<a;l++){const c=l*4;if(e.data[c+3]===0){u[l]=Q,g[l]=1;continue}const d=t.data[c],h=t.data[c+1],s=t.data[c+2];z(d,h,s,o)<se?u[l]=Se:Ne(d,h,s,n)<=ve?u[l]=re:u[l]=le}return{classes:u,keyedMask:g}}function Ue(t,e,n,o,a,u,g,l){const c=e.width*e.height,d=new Uint8Array(c);for(let h=0;h<c;h++){const s=u[h];if(!(s>0&&s<=l))continue;const x=g[h];if(x===re){if(s>je)continue}else if(x!==le)continue;const i=h*4,p=e.data[i],_=e.data[i+1],w=e.data[i+2],U=z(p,_,w,o),[P,F,D,S]=ce(p,_,w,n,a,U),K=Math.round(e.data[i+3]*P);K<=0?(t.data[i]=0,t.data[i+1]=0,t.data[i+2]=0,t.data[i+3]=0):(t.data[i]=F,t.data[i+1]=D,t.data[i+2]=S,t.data[i+3]=K),d[h]=1}return d}function Re(t,e,n,o,a,u,g,l){const{width:c,height:d}=e,h=c*d;let s=0;for(let w=0;w<h;w++)u[w]!==Q&&s++;const x=Math.max(32,Math.round(s*l)),i=new Float32Array(h).fill(-1);for(let w=0;w<h;w++){if(g[w]||u[w]===Q)continue;const U=w*4;if(t.data[U+3]===0)continue;const P=z(e.data[U],e.data[U+1],e.data[U+2],o);P>=se&&(i[w]=P)}const p=new Uint8Array(h),_=[];for(let w=0;w<h;w++){if(i[w]<0||p[w])continue;p[w]=1,_.length=0,_.push(w);const U=[];let P=-1;for(;_.length>0;){const F=_.pop();U.push(F),i[F]>P&&(P=i[F]);const D=F%c,S=(F-D)/c;for(let K=-1;K<=1;K++){const B=S+K;if(!(B<0||B>=d))for(let $=-1;$<=1;$++){const E=D+$;if(E<0||E>=c)continue;const k=B*c+E;i[k]>=0&&!p[k]&&(p[k]=1,_.push(k))}}}if(!(U.length>x)&&!(P<=Ce))for(const F of U){const D=F*4,S=e.data[D],K=e.data[D+1],B=e.data[D+2],[$,E,k,y]=ce(S,K,B,n,a,i[F]);$<=0||(t.data[D]=E,t.data[D+1]=k,t.data[D+2]=y)}}}function Ie(t,e,n){if(!t.width||!t.height||t.width!==e.width||t.height!==e.height||t.data.length!==e.data.length||t.data.length!==t.width*t.height*4)throw new Error("softUnmix: empty or mismatched pixel buffers");const o=Z(n.keyColor);if(!o)return;const a=z(n.keyColor.r,n.keyColor.g,n.keyColor.b,o);if(a<=0)return;const u=Math.max(0,Math.min(254,Math.round(n.reach))),{classes:g,keyedMask:l}=Ae(e,t,n.keyColor,o);let c;if(u>0){const d=Ee(l,e.width,e.height,u);c=Ue(t,e,n.keyColor,o,a,d,g,u)}else c=new Uint8Array(e.width*e.height);n.spillMaxFraction>0&&Re(t,e,n.keyColor,o,a,g,c,n.spillMaxFraction)}function ie(t,e,n){const o=`/generated/${encodeURIComponent(e)}`;return{...t,image:o,url:o,filename:e,mediaType:n,kind:"edit",requestId:`derived:${e}`,createdAt:Date.now(),providerUrl:null}}function Fe(){const{t}=he(),e=X(r=>r.keyingTarget),n=X(r=>r.setKeyingTarget),o=de(!!e,()=>n(null)),a=X(r=>r.addAssetGenDerivedItem),u=X(r=>r.selectedProjectId),g=X(r=>r.showToast),[l,c]=T.useState("loading"),[d,h]=T.useState(!1),[s,x]=T.useState(null),[i,p]=T.useState(null),[_,w]=T.useState(q.tolerance),[U,P]=T.useState(q.softness),[F,D]=T.useState(q.spill),[S,K]=T.useState(null),[B,$]=T.useState("erase"),[E,k]=T.useState([]),[y,M]=T.useState(!0),N=T.useRef(null),v=T.useRef(null),I=T.useRef(0),A=T.useRef(null),b=T.useRef(null),C=T.useCallback(()=>{A.current?.(),A.current=null},[]),L=e?.mediaType==="video",O=e?L&&e.filename?`/api/video/frame?file=${encodeURIComponent(e.filename)}&position=0`:e.url||e.image:null;T.useEffect(()=>{if(!O)return;let r=!0;c("loading"),N.current=null,K(null),k([]),$("erase");const m=new Image;return m.onload=()=>{if(r)try{const j=document.createElement("canvas");j.width=m.naturalWidth,j.height=m.naturalHeight;const R=j.getContext("2d");if(!R)throw new Error("no 2d context");R.drawImage(m,0,0);const Y=R.getImageData(0,0,j.width,j.height);N.current=Y,K(oe(Y)),c("ready")}catch{r&&c("error")}},m.onerror=()=>{r&&c("error")},m.src=O,()=>{r=!1,m.onload=null,m.onerror=null}},[O]),T.useEffect(()=>(b.current=e?.filename??null,C(),h(!1),p(null),x(null),C),[C,e?.filename]),T.useEffect(()=>{if(!(l!=="ready"||!S))return cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{const r=N.current,m=v.current;if(!(!r||!m))try{const j=xe({width:r.width,height:r.height,data:r.data},{keyColor:S,tolerance:_,softness:U,spill:F});y&&Z(S)&&Ie(j,{width:r.width,height:r.height,data:r.data},{keyColor:S,...we}),E.length>0&&_e(j,{width:r.width,height:r.height,data:r.data},E,_),m.width=j.width,m.height=j.height;const R=m.getContext("2d");if(!R)return;const Y=R.createImageData(j.width,j.height);Y.data.set(j.data),R.putImageData(Y,0,0)}catch{c("error")}}),()=>cancelAnimationFrame(I.current)},[l,S,_,U,F,E,y]);const V=T.useCallback(r=>{const m=N.current,j=v.current;if(!m||!j)return;const R=j.getBoundingClientRect(),Y=Math.max(0,Math.min(1,(r.clientX-R.left)/R.width)),G=Math.max(0,Math.min(1,(r.clientY-R.top)/R.height));if(B==="erase"&&!L){k(fe=>[...fe,{x:Y,y:G}]);return}const H=Math.floor((r.clientX-R.left)/R.width*m.width),ue=Math.floor((r.clientY-R.top)/R.height*m.height),W=(Math.max(0,Math.min(m.height-1,ue))*m.width+Math.max(0,Math.min(m.width-1,H)))*4;K({r:m.data[W],g:m.data[W+1],b:m.data[W+2]})},[B,L]),J=T.useCallback(()=>{const r=v.current;r&&r.toBlob(m=>{if(!m)return;const j=URL.createObjectURL(m),R=document.createElement("a");R.href=j,R.download=`${(e?.filename||"asset").replace(/\.[a-z]+$/i,"")}-keyed.png`,R.click(),URL.revokeObjectURL(j)},"image/png")},[e]),ee=T.useCallback(()=>{const r=v.current;if(!(!r||!e?.filename||d)){if(h(!0),x(null),L){ge({source:e.filename,keyParams:{tolerance:_,softness:U,keyColor:S??void 0},projectId:u,name:`${(e.prompt||"asset").trim().slice(0,60)} (keyed)`}).then(({requestId:m})=>{if(b.current!==e.filename)return;p(0),C();const j=me(m,null,(R,Y)=>{const G=Y&&typeof Y=="object"?Y:{};if(R==="keying-progress"){const H=G.outTimeMs;p(typeof H=="number"&&Number.isFinite(H)?H:0)}else if(R==="keying-done"){C();const H=G.filePath;if(typeof H=="string"&&H.trim()){a(ie(e,H.trim(),"video")),h(!1),p(null),g(t("keying.videoSaved")),n(null);return}h(!1),p(null),x(t("keying.saveError"))}else R==="keying-error"&&(C(),h(!1),p(null),x(typeof G.error=="string"&&G.error?G.error:t("keying.saveError")))});A.current=j}).catch(m=>{b.current===e.filename&&(h(!1),x(m instanceof Error?m.message:t("keying.saveError")))});return}r.toBlob(m=>{if(b.current===e.filename){if(!m){h(!1),x(t("keying.saveError"));return}pe(m,{source:e.filename,projectId:u,name:`${(e.prompt||"asset").trim().slice(0,60)} (keyed)`,meta:{keyParams:{tolerance:_,softness:U,spill:F},prompt:e.prompt}}).then(({filePath:j})=>{if(b.current===e.filename){if(typeof j!="string"||!j.trim())throw new Error(t("keying.saveError"));a(ie(e,j.trim(),"image")),g(t("keying.saved")),n(null)}}).catch(j=>{b.current===e.filename&&x(j instanceof Error?j.message:t("keying.saveError"))}).finally(()=>{b.current===e.filename&&h(!1)})}},"image/png")}},[e,d,L,S,u,_,U,F,C,a,g,n,t]);return e?f.jsx("div",{className:"assetgen-popup-backdrop",onClick:()=>n(null),children:f.jsxs("div",{ref:o,className:"keying-panel",role:"dialog","aria-modal":"true","aria-label":t("keying.title"),onClick:r=>r.stopPropagation(),children:[f.jsxs("header",{className:"keying-panel__head",children:[f.jsx("h2",{children:t("keying.title")}),S?f.jsxs("span",{className:"keying-panel__key",title:t("keying.keyColor"),children:[L?null:f.jsxs("span",{className:"keying-panel__modes",role:"group","aria-label":t("keying.clickMode"),children:[f.jsx("button",{type:"button",className:B==="erase"?"is-active":"","aria-pressed":B==="erase",onClick:()=>$("erase"),children:t("keying.modeErase")}),f.jsx("button",{type:"button",className:B==="pick"?"is-active":"","aria-pressed":B==="pick",onClick:()=>$("pick"),children:t("keying.modePick")})]}),E.length>0?f.jsx("button",{type:"button",className:"keying-panel__undo",onClick:()=>k(r=>r.slice(0,-1)),children:t("keying.undoClick",{count:String(E.length)})}):null,f.jsx("span",{className:"assetgen-bg-picker__swatch",style:{background:`rgb(${S.r},${S.g},${S.b})`},"aria-hidden":"true"}),f.jsx("span",{className:"keying-panel__hint",children:t(B==="erase"&&!L?"keying.eraseHint":"keying.pickHint")})]}):null]}),f.jsx("div",{className:"keying-panel__compare","aria-busy":l==="loading",children:l==="error"?f.jsxs("div",{className:"keying-panel__error",role:"alert",children:[f.jsx("p",{children:t("keying.loadError")}),f.jsx("button",{type:"button",onClick:()=>n(null),children:t("project.close")})]}):f.jsxs(f.Fragment,{children:[f.jsxs("figure",{className:"keying-panel__preview",children:[f.jsx("figcaption",{className:"keying-panel__preview-label",children:t("keying.original")}),f.jsx("div",{className:"keying-panel__stage keying-panel__stage--original",children:f.jsx("img",{src:O??"",alt:t("keying.originalAlt")})})]}),f.jsxs("figure",{className:"keying-panel__preview",children:[f.jsx("figcaption",{className:"keying-panel__preview-label",children:t("keying.removed")}),f.jsxs("div",{className:"keying-panel__stage",children:[f.jsx("canvas",{ref:v,className:"keying-panel__canvas",onClick:V,"aria-label":t("keying.previewAlt")}),l==="loading"?f.jsx("span",{className:"keying-panel__loading",role:"status",children:t("keying.previewLoading")}):null]})]})]})}),f.jsxs("details",{className:"keying-panel__advanced",children:[f.jsx("summary",{children:t("keying.advanced")}),f.jsxs("div",{className:"keying-panel__controls",children:[f.jsxs("label",{children:[t("keying.tolerance")," ",f.jsx("output",{children:_}),f.jsx("input",{type:"range",min:0,max:100,value:_,onChange:r=>w(Number(r.target.value))})]}),f.jsxs("label",{children:[t("keying.softness")," ",f.jsx("output",{children:U}),f.jsx("input",{type:"range",min:0,max:50,value:U,onChange:r=>P(Number(r.target.value))})]}),f.jsxs("label",{children:[t("keying.spill")," ",f.jsx("output",{children:F}),f.jsx("input",{type:"range",min:0,max:100,value:F,onChange:r=>D(Number(r.target.value))})]}),f.jsxs("label",{className:"keying-panel__unmix",children:[f.jsx("input",{type:"checkbox",checked:y,disabled:!S||!Z(S),onChange:r=>M(r.target.checked)}),t("keying.unmix"),f.jsx("span",{className:"keying-panel__hint",children:t("keying.unmixHint")})]}),f.jsx("button",{type:"button",className:"keying-panel__reset",onClick:()=>{w(q.tolerance),P(q.softness),D(q.spill),k([]),M(!0),N.current&&K(oe(N.current))},children:t("keying.reset")})]})]}),f.jsxs("footer",{className:"keying-panel__actions",children:[s?f.jsx("span",{className:"keying-panel__save-error",role:"alert",children:s}):null,f.jsx("button",{type:"button",className:"assetgen-generate",disabled:l!=="ready"||d||!e.filename,onClick:ee,children:d?i!==null?t("keying.videoKeying",{seconds:String(Math.round(i/1e3))}):t("keying.saving"):t(L?"keying.videoSave":"keying.save")}),L?null:f.jsx("button",{type:"button",className:"assetgen-popup__close",disabled:l!=="ready",onClick:J,children:t("keying.download")}),f.jsx("button",{type:"button",className:"assetgen-popup__close",onClick:()=>n(null),children:t("project.close")})]})]})}):null}export{Fe as K};