@nodaro/shared 1.4.2

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 (665) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +32 -0
  3. package/dist/index.cjs +12506 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +12269 -0
  6. package/dist/index.d.ts +12269 -0
  7. package/dist/index.js +11831 -0
  8. package/dist/index.js.map +1 -0
  9. package/package.json +54 -0
  10. package/src/__tests__/__snapshots__/prompt-builder-segments.test.ts.snap +65 -0
  11. package/src/__tests__/ai-avatar-pricing.test.ts +321 -0
  12. package/src/__tests__/apply-video-negative-prompt.test.ts +76 -0
  13. package/src/__tests__/attach-columns.test.ts +28 -0
  14. package/src/__tests__/audio-crossfade-curves.test.ts +33 -0
  15. package/src/__tests__/build-model-menu.test.ts +58 -0
  16. package/src/__tests__/character-aspect-defaults.test.ts +142 -0
  17. package/src/__tests__/character-mention-slug.test.ts +199 -0
  18. package/src/__tests__/character-reference-photo-kinds.test.ts +32 -0
  19. package/src/__tests__/character-usage-mode.test.ts +147 -0
  20. package/src/__tests__/character-variant-assets.test.ts +142 -0
  21. package/src/__tests__/character-voice.test.ts +130 -0
  22. package/src/__tests__/cinematic-avatar-pricing.test.ts +119 -0
  23. package/src/__tests__/combine-transitions.test.ts +137 -0
  24. package/src/__tests__/component-types.test.ts +87 -0
  25. package/src/__tests__/condition-variables.test.ts +98 -0
  26. package/src/__tests__/credit-identifiers.test.ts +811 -0
  27. package/src/__tests__/default-video-provider.test.ts +63 -0
  28. package/src/__tests__/entity-image-handle.test.ts +43 -0
  29. package/src/__tests__/entity-variants.test.ts +33 -0
  30. package/src/__tests__/fal-lip-sync-sets.test.ts +31 -0
  31. package/src/__tests__/featured-entities.test.ts +33 -0
  32. package/src/__tests__/film-pricing.test.ts +64 -0
  33. package/src/__tests__/filter-condition.test.ts +285 -0
  34. package/src/__tests__/freecut-protocol.test.ts +35 -0
  35. package/src/__tests__/generate-text-items.test.ts +19 -0
  36. package/src/__tests__/generated-results.test.ts +50 -0
  37. package/src/__tests__/graph-utils.test.ts +618 -0
  38. package/src/__tests__/group-aggregation.test.ts +83 -0
  39. package/src/__tests__/i18n-locale-completeness.test.ts +156 -0
  40. package/src/__tests__/image-critic-node.test.ts +86 -0
  41. package/src/__tests__/image-mask-mode.test.ts +16 -0
  42. package/src/__tests__/image-ref-limit.test.ts +78 -0
  43. package/src/__tests__/inpaint-region.test.ts +24 -0
  44. package/src/__tests__/input-field-map-parity.test.ts +30 -0
  45. package/src/__tests__/json-evaluator.test.ts +289 -0
  46. package/src/__tests__/json-path.test.ts +64 -0
  47. package/src/__tests__/lip-sync-pricing.test.ts +142 -0
  48. package/src/__tests__/list-merge.test.ts +96 -0
  49. package/src/__tests__/list-sort.test.ts +134 -0
  50. package/src/__tests__/llm-models.test.ts +445 -0
  51. package/src/__tests__/location-mention-slug.test.ts +246 -0
  52. package/src/__tests__/locations-coverage-critic-schema.test.ts +92 -0
  53. package/src/__tests__/loop-delimiter.test.ts +39 -0
  54. package/src/__tests__/lottie-slots.test.ts +245 -0
  55. package/src/__tests__/model-catalog-flux2-resolutions.test.ts +21 -0
  56. package/src/__tests__/model-constants-location.test.ts +20 -0
  57. package/src/__tests__/model-constants.test.ts +122 -0
  58. package/src/__tests__/model-tree.test.ts +86 -0
  59. package/src/__tests__/no-internal-imports.test.ts +25 -0
  60. package/src/__tests__/node-default-mappings.test.ts +175 -0
  61. package/src/__tests__/node-mappable-fields.test.ts +7 -0
  62. package/src/__tests__/node-preset-export.test.ts +46 -0
  63. package/src/__tests__/node-preset-extract.test.ts +166 -0
  64. package/src/__tests__/node-refs-canonical.test.ts +54 -0
  65. package/src/__tests__/node-refs-combine.test.ts +54 -0
  66. package/src/__tests__/node-refs.test.ts +187 -0
  67. package/src/__tests__/node-runtime-keys.test.ts +99 -0
  68. package/src/__tests__/object-aspect-defaults.test.ts +59 -0
  69. package/src/__tests__/parameter-node-value.test.ts +137 -0
  70. package/src/__tests__/pinterest-url.test.ts +35 -0
  71. package/src/__tests__/pipeline-chat.test.ts +110 -0
  72. package/src/__tests__/pipeline-validation.test.ts +98 -0
  73. package/src/__tests__/presentation-utils.test.ts +1137 -0
  74. package/src/__tests__/producer-types.test.ts +47 -0
  75. package/src/__tests__/prompt-length-limits.test.ts +156 -0
  76. package/src/__tests__/provider-directive-defaults.test.ts +46 -0
  77. package/src/__tests__/reduce-strategy-registry.test.ts +43 -0
  78. package/src/__tests__/reference-board-templates.test.ts +33 -0
  79. package/src/__tests__/reference-roles.test.ts +36 -0
  80. package/src/__tests__/resolve-field-mappings.test.ts +110 -0
  81. package/src/__tests__/resolve-pipeline-model.test.ts +76 -0
  82. package/src/__tests__/scene-node-types.test.ts +80 -0
  83. package/src/__tests__/scraper-actors.test.ts +67 -0
  84. package/src/__tests__/seedance-2-catalog.test.ts +18 -0
  85. package/src/__tests__/seedance-2-credit-id.test.ts +23 -0
  86. package/src/__tests__/seedance-aspects.test.ts +52 -0
  87. package/src/__tests__/selector.test.ts +1151 -0
  88. package/src/__tests__/settled-with-limit.test.ts +214 -0
  89. package/src/__tests__/social-media-specs.test.ts +129 -0
  90. package/src/__tests__/sub-workflow-validation.test.ts +88 -0
  91. package/src/__tests__/switchx-pricing.test.ts +28 -0
  92. package/src/__tests__/to-connected-references.test.ts +153 -0
  93. package/src/__tests__/utilities.test.ts +541 -0
  94. package/src/__tests__/video-analysis-pricing.test.ts +58 -0
  95. package/src/__tests__/video-analysis.test.ts +63 -0
  96. package/src/__tests__/video-audio-capability.test.ts +204 -0
  97. package/src/__tests__/video-gen-providers.test.ts +28 -0
  98. package/src/__tests__/video-mode-aliases.test.ts +150 -0
  99. package/src/__tests__/video-ref-limits.test.ts +72 -0
  100. package/src/__tests__/video-utils.test.ts +303 -0
  101. package/src/__tests__/voice-changer-models.test.ts +33 -0
  102. package/src/__tests__/workflow-export-strip.test.ts +46 -0
  103. package/src/ai-avatar-pricing.ts +213 -0
  104. package/src/ancestor-refs.ts +48 -0
  105. package/src/animals.ts +231 -0
  106. package/src/audio-crossfade-curves.ts +73 -0
  107. package/src/audio-fx-presets.ts +64 -0
  108. package/src/avatar-payload-validators.ts +214 -0
  109. package/src/caption-styles.ts +31 -0
  110. package/src/character-aspect-defaults.ts +102 -0
  111. package/src/character-facets.ts +37 -0
  112. package/src/character-mention-slug.ts +166 -0
  113. package/src/character-usage-mode.ts +109 -0
  114. package/src/character-variant-assets.ts +121 -0
  115. package/src/character-voice.ts +151 -0
  116. package/src/cinematic-avatar-pricing.ts +111 -0
  117. package/src/clone-utils.ts +46 -0
  118. package/src/combine-transitions.ts +482 -0
  119. package/src/community.ts +112 -0
  120. package/src/component-types.ts +127 -0
  121. package/src/condition-variables.ts +65 -0
  122. package/src/credit-estimators/index.ts +15 -0
  123. package/src/credit-estimators/video-utils.ts +165 -0
  124. package/src/credit-identifiers.ts +304 -0
  125. package/src/entity-approval-types.ts +31 -0
  126. package/src/entity-aspect-defaults.ts +82 -0
  127. package/src/entity-asset-types.ts +296 -0
  128. package/src/entity-image-handle.ts +36 -0
  129. package/src/extra-refs.ts +139 -0
  130. package/src/featured-entities.ts +136 -0
  131. package/src/film-pricing.ts +117 -0
  132. package/src/filter-condition.ts +250 -0
  133. package/src/flux2-pricing.ts +18 -0
  134. package/src/freecut-protocol.ts +52 -0
  135. package/src/furniture.ts +167 -0
  136. package/src/generate-text-items.ts +15 -0
  137. package/src/generated-results.ts +63 -0
  138. package/src/group-aggregation.ts +75 -0
  139. package/src/hint-graph-types.ts +18 -0
  140. package/src/i18n/action-fx.ar.ts +89 -0
  141. package/src/i18n/action-fx.de.ts +89 -0
  142. package/src/i18n/action-fx.es.ts +89 -0
  143. package/src/i18n/action-fx.fr.ts +89 -0
  144. package/src/i18n/action-fx.he.ts +89 -0
  145. package/src/i18n/action-fx.hi.ts +89 -0
  146. package/src/i18n/action-fx.ja.ts +89 -0
  147. package/src/i18n/action-fx.ko.ts +89 -0
  148. package/src/i18n/action-fx.pt-BR.ts +89 -0
  149. package/src/i18n/action-fx.ru.ts +89 -0
  150. package/src/i18n/action-fx.zh-CN.ts +89 -0
  151. package/src/i18n/aesthetic.ar.ts +170 -0
  152. package/src/i18n/aesthetic.de.ts +48 -0
  153. package/src/i18n/aesthetic.es.ts +169 -0
  154. package/src/i18n/aesthetic.fr.ts +52 -0
  155. package/src/i18n/aesthetic.he.ts +169 -0
  156. package/src/i18n/aesthetic.hi.ts +55 -0
  157. package/src/i18n/aesthetic.ja.ts +165 -0
  158. package/src/i18n/aesthetic.ko.ts +169 -0
  159. package/src/i18n/aesthetic.pt-BR.ts +148 -0
  160. package/src/i18n/aesthetic.ru.ts +155 -0
  161. package/src/i18n/aesthetic.zh-CN.ts +172 -0
  162. package/src/i18n/animals.ar.ts +145 -0
  163. package/src/i18n/animals.de.ts +144 -0
  164. package/src/i18n/animals.es.ts +158 -0
  165. package/src/i18n/animals.fr.ts +144 -0
  166. package/src/i18n/animals.he.ts +155 -0
  167. package/src/i18n/animals.hi.ts +157 -0
  168. package/src/i18n/animals.ja.ts +159 -0
  169. package/src/i18n/animals.ko.ts +159 -0
  170. package/src/i18n/animals.pt-BR.ts +157 -0
  171. package/src/i18n/animals.ru.ts +155 -0
  172. package/src/i18n/animals.zh-CN.ts +155 -0
  173. package/src/i18n/atmosphere.ar.ts +49 -0
  174. package/src/i18n/atmosphere.de.ts +47 -0
  175. package/src/i18n/atmosphere.es.ts +50 -0
  176. package/src/i18n/atmosphere.fr.ts +47 -0
  177. package/src/i18n/atmosphere.he.ts +47 -0
  178. package/src/i18n/atmosphere.hi.ts +49 -0
  179. package/src/i18n/atmosphere.ja.ts +49 -0
  180. package/src/i18n/atmosphere.ko.ts +49 -0
  181. package/src/i18n/atmosphere.pt-BR.ts +49 -0
  182. package/src/i18n/atmosphere.ru.ts +47 -0
  183. package/src/i18n/atmosphere.zh-CN.ts +152 -0
  184. package/src/i18n/backdrop.ar.ts +53 -0
  185. package/src/i18n/backdrop.de.ts +46 -0
  186. package/src/i18n/backdrop.es.ts +54 -0
  187. package/src/i18n/backdrop.fr.ts +52 -0
  188. package/src/i18n/backdrop.he.ts +51 -0
  189. package/src/i18n/backdrop.hi.ts +59 -0
  190. package/src/i18n/backdrop.ja.ts +61 -0
  191. package/src/i18n/backdrop.ko.ts +59 -0
  192. package/src/i18n/backdrop.pt-BR.ts +59 -0
  193. package/src/i18n/backdrop.ru.ts +57 -0
  194. package/src/i18n/backdrop.zh-CN.ts +57 -0
  195. package/src/i18n/camera-format.ar.ts +40 -0
  196. package/src/i18n/camera-format.de.ts +37 -0
  197. package/src/i18n/camera-format.es.ts +41 -0
  198. package/src/i18n/camera-format.fr.ts +37 -0
  199. package/src/i18n/camera-format.he.ts +37 -0
  200. package/src/i18n/camera-format.hi.ts +42 -0
  201. package/src/i18n/camera-format.ja.ts +37 -0
  202. package/src/i18n/camera-format.ko.ts +37 -0
  203. package/src/i18n/camera-format.pt-BR.ts +46 -0
  204. package/src/i18n/camera-format.ru.ts +42 -0
  205. package/src/i18n/camera-format.zh-CN.ts +42 -0
  206. package/src/i18n/camera-motions.ar.ts +86 -0
  207. package/src/i18n/camera-motions.de.ts +74 -0
  208. package/src/i18n/camera-motions.es.ts +86 -0
  209. package/src/i18n/camera-motions.fr.ts +86 -0
  210. package/src/i18n/camera-motions.he.ts +86 -0
  211. package/src/i18n/camera-motions.hi.ts +99 -0
  212. package/src/i18n/camera-motions.ja.ts +99 -0
  213. package/src/i18n/camera-motions.ko.ts +99 -0
  214. package/src/i18n/camera-motions.pt-BR.ts +99 -0
  215. package/src/i18n/camera-motions.ru.ts +99 -0
  216. package/src/i18n/camera-motions.zh-CN.ts +99 -0
  217. package/src/i18n/character-fx.ar.ts +72 -0
  218. package/src/i18n/character-fx.de.ts +72 -0
  219. package/src/i18n/character-fx.es.ts +72 -0
  220. package/src/i18n/character-fx.fr.ts +72 -0
  221. package/src/i18n/character-fx.he.ts +72 -0
  222. package/src/i18n/character-fx.hi.ts +72 -0
  223. package/src/i18n/character-fx.ja.ts +72 -0
  224. package/src/i18n/character-fx.ko.ts +72 -0
  225. package/src/i18n/character-fx.pt-BR.ts +72 -0
  226. package/src/i18n/character-fx.ru.ts +72 -0
  227. package/src/i18n/character-fx.zh-CN.ts +72 -0
  228. package/src/i18n/color-look.ar.ts +50 -0
  229. package/src/i18n/color-look.de.ts +47 -0
  230. package/src/i18n/color-look.es.ts +50 -0
  231. package/src/i18n/color-look.fr.ts +50 -0
  232. package/src/i18n/color-look.he.ts +49 -0
  233. package/src/i18n/color-look.hi.ts +52 -0
  234. package/src/i18n/color-look.ja.ts +54 -0
  235. package/src/i18n/color-look.ko.ts +54 -0
  236. package/src/i18n/color-look.pt-BR.ts +54 -0
  237. package/src/i18n/color-look.ru.ts +52 -0
  238. package/src/i18n/color-look.zh-CN.ts +53 -0
  239. package/src/i18n/composition-effects.ar.ts +26 -0
  240. package/src/i18n/composition-effects.de.ts +25 -0
  241. package/src/i18n/composition-effects.es.ts +27 -0
  242. package/src/i18n/composition-effects.fr.ts +25 -0
  243. package/src/i18n/composition-effects.he.ts +25 -0
  244. package/src/i18n/composition-effects.hi.ts +27 -0
  245. package/src/i18n/composition-effects.ja.ts +27 -0
  246. package/src/i18n/composition-effects.ko.ts +27 -0
  247. package/src/i18n/composition-effects.pt-BR.ts +25 -0
  248. package/src/i18n/composition-effects.ru.ts +82 -0
  249. package/src/i18n/composition-effects.zh-CN.ts +25 -0
  250. package/src/i18n/era.ar.ts +37 -0
  251. package/src/i18n/era.de.ts +34 -0
  252. package/src/i18n/era.es.ts +37 -0
  253. package/src/i18n/era.fr.ts +37 -0
  254. package/src/i18n/era.he.ts +36 -0
  255. package/src/i18n/era.hi.ts +39 -0
  256. package/src/i18n/era.ja.ts +41 -0
  257. package/src/i18n/era.ko.ts +39 -0
  258. package/src/i18n/era.pt-BR.ts +41 -0
  259. package/src/i18n/era.ru.ts +121 -0
  260. package/src/i18n/era.zh-CN.ts +39 -0
  261. package/src/i18n/exposure-settings.ar.ts +28 -0
  262. package/src/i18n/exposure-settings.de.ts +26 -0
  263. package/src/i18n/exposure-settings.es.ts +28 -0
  264. package/src/i18n/exposure-settings.fr.ts +29 -0
  265. package/src/i18n/exposure-settings.he.ts +28 -0
  266. package/src/i18n/exposure-settings.hi.ts +31 -0
  267. package/src/i18n/exposure-settings.ja.ts +31 -0
  268. package/src/i18n/exposure-settings.ko.ts +31 -0
  269. package/src/i18n/exposure-settings.pt-BR.ts +31 -0
  270. package/src/i18n/exposure-settings.ru.ts +31 -0
  271. package/src/i18n/exposure-settings.zh-CN.ts +31 -0
  272. package/src/i18n/framing.ar.ts +78 -0
  273. package/src/i18n/framing.de.ts +73 -0
  274. package/src/i18n/framing.es.ts +78 -0
  275. package/src/i18n/framing.fr.ts +78 -0
  276. package/src/i18n/framing.he.ts +77 -0
  277. package/src/i18n/framing.hi.ts +82 -0
  278. package/src/i18n/framing.ja.ts +84 -0
  279. package/src/i18n/framing.ko.ts +82 -0
  280. package/src/i18n/framing.pt-BR.ts +84 -0
  281. package/src/i18n/framing.ru.ts +82 -0
  282. package/src/i18n/framing.zh-CN.ts +82 -0
  283. package/src/i18n/furniture.ar.ts +92 -0
  284. package/src/i18n/furniture.de.ts +93 -0
  285. package/src/i18n/furniture.es.ts +101 -0
  286. package/src/i18n/furniture.fr.ts +93 -0
  287. package/src/i18n/furniture.he.ts +101 -0
  288. package/src/i18n/furniture.hi.ts +101 -0
  289. package/src/i18n/furniture.ja.ts +101 -0
  290. package/src/i18n/furniture.ko.ts +101 -0
  291. package/src/i18n/furniture.pt-BR.ts +101 -0
  292. package/src/i18n/furniture.ru.ts +101 -0
  293. package/src/i18n/furniture.zh-CN.ts +101 -0
  294. package/src/i18n/held-prop.ar.ts +74 -0
  295. package/src/i18n/held-prop.de.ts +65 -0
  296. package/src/i18n/held-prop.es.ts +83 -0
  297. package/src/i18n/held-prop.fr.ts +74 -0
  298. package/src/i18n/held-prop.he.ts +73 -0
  299. package/src/i18n/held-prop.hi.ts +82 -0
  300. package/src/i18n/held-prop.ja.ts +84 -0
  301. package/src/i18n/held-prop.ko.ts +84 -0
  302. package/src/i18n/held-prop.pt-BR.ts +84 -0
  303. package/src/i18n/held-prop.ru.ts +82 -0
  304. package/src/i18n/held-prop.zh-CN.ts +82 -0
  305. package/src/i18n/index.ts +208 -0
  306. package/src/i18n/instrumentation.ar.ts +195 -0
  307. package/src/i18n/instrumentation.de.ts +195 -0
  308. package/src/i18n/instrumentation.es.ts +195 -0
  309. package/src/i18n/instrumentation.fr.ts +195 -0
  310. package/src/i18n/instrumentation.he.ts +195 -0
  311. package/src/i18n/instrumentation.hi.ts +195 -0
  312. package/src/i18n/instrumentation.ja.ts +195 -0
  313. package/src/i18n/instrumentation.ko.ts +195 -0
  314. package/src/i18n/instrumentation.pt-BR.ts +195 -0
  315. package/src/i18n/instrumentation.ru.ts +195 -0
  316. package/src/i18n/instrumentation.zh-CN.ts +195 -0
  317. package/src/i18n/lens.ar.ts +24 -0
  318. package/src/i18n/lens.de.ts +24 -0
  319. package/src/i18n/lens.es.ts +24 -0
  320. package/src/i18n/lens.fr.ts +24 -0
  321. package/src/i18n/lens.he.ts +24 -0
  322. package/src/i18n/lens.hi.ts +24 -0
  323. package/src/i18n/lens.ja.ts +24 -0
  324. package/src/i18n/lens.ko.ts +24 -0
  325. package/src/i18n/lens.pt-BR.ts +24 -0
  326. package/src/i18n/lens.ru.ts +25 -0
  327. package/src/i18n/lens.zh-CN.ts +24 -0
  328. package/src/i18n/lighting.ar.ts +86 -0
  329. package/src/i18n/lighting.de.ts +84 -0
  330. package/src/i18n/lighting.es.ts +89 -0
  331. package/src/i18n/lighting.fr.ts +84 -0
  332. package/src/i18n/lighting.he.ts +88 -0
  333. package/src/i18n/lighting.hi.ts +90 -0
  334. package/src/i18n/lighting.ja.ts +90 -0
  335. package/src/i18n/lighting.ko.ts +90 -0
  336. package/src/i18n/lighting.pt-BR.ts +90 -0
  337. package/src/i18n/lighting.ru.ts +88 -0
  338. package/src/i18n/lighting.zh-CN.ts +92 -0
  339. package/src/i18n/loop-subject.ar.ts +39 -0
  340. package/src/i18n/loop-subject.de.ts +39 -0
  341. package/src/i18n/loop-subject.es.ts +39 -0
  342. package/src/i18n/loop-subject.fr.ts +39 -0
  343. package/src/i18n/loop-subject.he.ts +39 -0
  344. package/src/i18n/loop-subject.hi.ts +39 -0
  345. package/src/i18n/loop-subject.ja.ts +39 -0
  346. package/src/i18n/loop-subject.ko.ts +39 -0
  347. package/src/i18n/loop-subject.pt-BR.ts +39 -0
  348. package/src/i18n/loop-subject.ru.ts +39 -0
  349. package/src/i18n/loop-subject.zh-CN.ts +39 -0
  350. package/src/i18n/materials.ar.ts +80 -0
  351. package/src/i18n/materials.de.ts +80 -0
  352. package/src/i18n/materials.es.ts +87 -0
  353. package/src/i18n/materials.fr.ts +80 -0
  354. package/src/i18n/materials.he.ts +86 -0
  355. package/src/i18n/materials.hi.ts +86 -0
  356. package/src/i18n/materials.ja.ts +88 -0
  357. package/src/i18n/materials.ko.ts +88 -0
  358. package/src/i18n/materials.pt-BR.ts +88 -0
  359. package/src/i18n/materials.ru.ts +86 -0
  360. package/src/i18n/materials.zh-CN.ts +86 -0
  361. package/src/i18n/mood.ar.ts +61 -0
  362. package/src/i18n/mood.de.ts +61 -0
  363. package/src/i18n/mood.es.ts +66 -0
  364. package/src/i18n/mood.fr.ts +61 -0
  365. package/src/i18n/mood.he.ts +64 -0
  366. package/src/i18n/mood.hi.ts +66 -0
  367. package/src/i18n/mood.ja.ts +66 -0
  368. package/src/i18n/mood.ko.ts +66 -0
  369. package/src/i18n/mood.pt-BR.ts +64 -0
  370. package/src/i18n/mood.ru.ts +64 -0
  371. package/src/i18n/mood.zh-CN.ts +64 -0
  372. package/src/i18n/music-genre.ar.ts +302 -0
  373. package/src/i18n/music-genre.de.ts +302 -0
  374. package/src/i18n/music-genre.es.ts +302 -0
  375. package/src/i18n/music-genre.fr.ts +302 -0
  376. package/src/i18n/music-genre.he.ts +302 -0
  377. package/src/i18n/music-genre.hi.ts +302 -0
  378. package/src/i18n/music-genre.ja.ts +302 -0
  379. package/src/i18n/music-genre.ko.ts +302 -0
  380. package/src/i18n/music-genre.pt-BR.ts +302 -0
  381. package/src/i18n/music-genre.ru.ts +302 -0
  382. package/src/i18n/music-genre.zh-CN.ts +302 -0
  383. package/src/i18n/music-mood.ar.ts +75 -0
  384. package/src/i18n/music-mood.de.ts +75 -0
  385. package/src/i18n/music-mood.es.ts +75 -0
  386. package/src/i18n/music-mood.fr.ts +75 -0
  387. package/src/i18n/music-mood.he.ts +75 -0
  388. package/src/i18n/music-mood.hi.ts +75 -0
  389. package/src/i18n/music-mood.ja.ts +75 -0
  390. package/src/i18n/music-mood.ko.ts +75 -0
  391. package/src/i18n/music-mood.pt-BR.ts +75 -0
  392. package/src/i18n/music-mood.ru.ts +75 -0
  393. package/src/i18n/music-mood.zh-CN.ts +75 -0
  394. package/src/i18n/person.ar.ts +638 -0
  395. package/src/i18n/person.de.ts +629 -0
  396. package/src/i18n/person.es.ts +645 -0
  397. package/src/i18n/person.fr.ts +621 -0
  398. package/src/i18n/person.he.ts +656 -0
  399. package/src/i18n/person.hi.ts +654 -0
  400. package/src/i18n/person.ja.ts +662 -0
  401. package/src/i18n/person.ko.ts +662 -0
  402. package/src/i18n/person.pt-BR.ts +656 -0
  403. package/src/i18n/person.ru.ts +656 -0
  404. package/src/i18n/person.zh-CN.ts +656 -0
  405. package/src/i18n/photo-genre.ar.ts +58 -0
  406. package/src/i18n/photo-genre.de.ts +52 -0
  407. package/src/i18n/photo-genre.es.ts +64 -0
  408. package/src/i18n/photo-genre.fr.ts +58 -0
  409. package/src/i18n/photo-genre.he.ts +62 -0
  410. package/src/i18n/photo-genre.hi.ts +63 -0
  411. package/src/i18n/photo-genre.ja.ts +65 -0
  412. package/src/i18n/photo-genre.ko.ts +63 -0
  413. package/src/i18n/photo-genre.pt-BR.ts +65 -0
  414. package/src/i18n/photo-genre.ru.ts +63 -0
  415. package/src/i18n/photo-genre.zh-CN.ts +63 -0
  416. package/src/i18n/photographer.ar.ts +75 -0
  417. package/src/i18n/photographer.de.ts +74 -0
  418. package/src/i18n/photographer.es.ts +77 -0
  419. package/src/i18n/photographer.fr.ts +77 -0
  420. package/src/i18n/photographer.he.ts +78 -0
  421. package/src/i18n/photographer.hi.ts +80 -0
  422. package/src/i18n/photographer.ja.ts +84 -0
  423. package/src/i18n/photographer.ko.ts +84 -0
  424. package/src/i18n/photographer.pt-BR.ts +83 -0
  425. package/src/i18n/photographer.ru.ts +78 -0
  426. package/src/i18n/photographer.zh-CN.ts +78 -0
  427. package/src/i18n/pose.ar.ts +95 -0
  428. package/src/i18n/pose.de.ts +96 -0
  429. package/src/i18n/pose.es.ts +104 -0
  430. package/src/i18n/pose.fr.ts +96 -0
  431. package/src/i18n/pose.he.ts +104 -0
  432. package/src/i18n/pose.hi.ts +104 -0
  433. package/src/i18n/pose.ja.ts +104 -0
  434. package/src/i18n/pose.ko.ts +104 -0
  435. package/src/i18n/pose.pt-BR.ts +104 -0
  436. package/src/i18n/pose.ru.ts +104 -0
  437. package/src/i18n/pose.zh-CN.ts +104 -0
  438. package/src/i18n/post-process-effects.ar.ts +25 -0
  439. package/src/i18n/post-process-effects.de.ts +24 -0
  440. package/src/i18n/post-process-effects.es.ts +26 -0
  441. package/src/i18n/post-process-effects.fr.ts +24 -0
  442. package/src/i18n/post-process-effects.he.ts +24 -0
  443. package/src/i18n/post-process-effects.hi.ts +26 -0
  444. package/src/i18n/post-process-effects.ja.ts +26 -0
  445. package/src/i18n/post-process-effects.ko.ts +26 -0
  446. package/src/i18n/post-process-effects.pt-BR.ts +24 -0
  447. package/src/i18n/post-process-effects.ru.ts +24 -0
  448. package/src/i18n/post-process-effects.zh-CN.ts +24 -0
  449. package/src/i18n/render-quality.ar.ts +34 -0
  450. package/src/i18n/render-quality.de.ts +30 -0
  451. package/src/i18n/render-quality.es.ts +35 -0
  452. package/src/i18n/render-quality.fr.ts +34 -0
  453. package/src/i18n/render-quality.he.ts +33 -0
  454. package/src/i18n/render-quality.hi.ts +39 -0
  455. package/src/i18n/render-quality.ja.ts +39 -0
  456. package/src/i18n/render-quality.ko.ts +39 -0
  457. package/src/i18n/render-quality.pt-BR.ts +37 -0
  458. package/src/i18n/render-quality.ru.ts +37 -0
  459. package/src/i18n/render-quality.zh-CN.ts +37 -0
  460. package/src/i18n/seasons.ar.ts +10 -0
  461. package/src/i18n/seasons.de.ts +10 -0
  462. package/src/i18n/seasons.es.ts +10 -0
  463. package/src/i18n/seasons.fr.ts +10 -0
  464. package/src/i18n/seasons.he.ts +10 -0
  465. package/src/i18n/seasons.hi.ts +10 -0
  466. package/src/i18n/seasons.ja.ts +10 -0
  467. package/src/i18n/seasons.ko.ts +10 -0
  468. package/src/i18n/seasons.pt-BR.ts +10 -0
  469. package/src/i18n/seasons.ru.ts +10 -0
  470. package/src/i18n/seasons.zh-CN.ts +10 -0
  471. package/src/i18n/setting.ar.ts +73 -0
  472. package/src/i18n/setting.de.ts +73 -0
  473. package/src/i18n/setting.es.ts +77 -0
  474. package/src/i18n/setting.fr.ts +73 -0
  475. package/src/i18n/setting.he.ts +76 -0
  476. package/src/i18n/setting.hi.ts +76 -0
  477. package/src/i18n/setting.ja.ts +78 -0
  478. package/src/i18n/setting.ko.ts +76 -0
  479. package/src/i18n/setting.pt-BR.ts +78 -0
  480. package/src/i18n/setting.ru.ts +76 -0
  481. package/src/i18n/setting.zh-CN.ts +76 -0
  482. package/src/i18n/style.ar.ts +55 -0
  483. package/src/i18n/style.de.ts +54 -0
  484. package/src/i18n/style.es.ts +54 -0
  485. package/src/i18n/style.fr.ts +54 -0
  486. package/src/i18n/style.he.ts +54 -0
  487. package/src/i18n/style.hi.ts +54 -0
  488. package/src/i18n/style.ja.ts +54 -0
  489. package/src/i18n/style.ko.ts +54 -0
  490. package/src/i18n/style.pt-BR.ts +56 -0
  491. package/src/i18n/style.ru.ts +54 -0
  492. package/src/i18n/style.zh-CN.ts +54 -0
  493. package/src/i18n/styling.ar.ts +295 -0
  494. package/src/i18n/styling.de.ts +285 -0
  495. package/src/i18n/styling.es.ts +317 -0
  496. package/src/i18n/styling.fr.ts +285 -0
  497. package/src/i18n/styling.he.ts +307 -0
  498. package/src/i18n/styling.hi.ts +323 -0
  499. package/src/i18n/styling.ja.ts +317 -0
  500. package/src/i18n/styling.ko.ts +311 -0
  501. package/src/i18n/styling.pt-BR.ts +301 -0
  502. package/src/i18n/styling.ru.ts +301 -0
  503. package/src/i18n/styling.zh-CN.ts +307 -0
  504. package/src/i18n/temporal.ar.ts +31 -0
  505. package/src/i18n/temporal.de.ts +24 -0
  506. package/src/i18n/temporal.es.ts +27 -0
  507. package/src/i18n/temporal.fr.ts +28 -0
  508. package/src/i18n/temporal.he.ts +31 -0
  509. package/src/i18n/temporal.hi.ts +31 -0
  510. package/src/i18n/temporal.ja.ts +31 -0
  511. package/src/i18n/temporal.ko.ts +31 -0
  512. package/src/i18n/temporal.pt-BR.ts +31 -0
  513. package/src/i18n/temporal.ru.ts +31 -0
  514. package/src/i18n/temporal.zh-CN.ts +31 -0
  515. package/src/i18n/transitions.ar.ts +97 -0
  516. package/src/i18n/transitions.de.ts +97 -0
  517. package/src/i18n/transitions.es.ts +97 -0
  518. package/src/i18n/transitions.fr.ts +97 -0
  519. package/src/i18n/transitions.he.ts +97 -0
  520. package/src/i18n/transitions.hi.ts +97 -0
  521. package/src/i18n/transitions.ja.ts +97 -0
  522. package/src/i18n/transitions.ko.ts +97 -0
  523. package/src/i18n/transitions.pt-BR.ts +97 -0
  524. package/src/i18n/transitions.ru.ts +97 -0
  525. package/src/i18n/transitions.zh-CN.ts +97 -0
  526. package/src/i18n/types.ts +158 -0
  527. package/src/i18n/vehicles.ar.ts +137 -0
  528. package/src/i18n/vehicles.de.ts +125 -0
  529. package/src/i18n/vehicles.es.ts +138 -0
  530. package/src/i18n/vehicles.fr.ts +125 -0
  531. package/src/i18n/vehicles.he.ts +136 -0
  532. package/src/i18n/vehicles.hi.ts +138 -0
  533. package/src/i18n/vehicles.ja.ts +138 -0
  534. package/src/i18n/vehicles.ko.ts +138 -0
  535. package/src/i18n/vehicles.pt-BR.ts +136 -0
  536. package/src/i18n/vehicles.ru.ts +136 -0
  537. package/src/i18n/vehicles.zh-CN.ts +136 -0
  538. package/src/i18n/voice-character.ar.ts +126 -0
  539. package/src/i18n/voice-character.de.ts +126 -0
  540. package/src/i18n/voice-character.es.ts +126 -0
  541. package/src/i18n/voice-character.fr.ts +126 -0
  542. package/src/i18n/voice-character.he.ts +126 -0
  543. package/src/i18n/voice-character.hi.ts +126 -0
  544. package/src/i18n/voice-character.ja.ts +126 -0
  545. package/src/i18n/voice-character.ko.ts +126 -0
  546. package/src/i18n/voice-character.pt-BR.ts +126 -0
  547. package/src/i18n/voice-character.ru.ts +126 -0
  548. package/src/i18n/voice-character.zh-CN.ts +126 -0
  549. package/src/i18n/voice-delivery.ar.ts +77 -0
  550. package/src/i18n/voice-delivery.de.ts +77 -0
  551. package/src/i18n/voice-delivery.es.ts +77 -0
  552. package/src/i18n/voice-delivery.fr.ts +77 -0
  553. package/src/i18n/voice-delivery.he.ts +77 -0
  554. package/src/i18n/voice-delivery.hi.ts +77 -0
  555. package/src/i18n/voice-delivery.ja.ts +77 -0
  556. package/src/i18n/voice-delivery.ko.ts +77 -0
  557. package/src/i18n/voice-delivery.pt-BR.ts +77 -0
  558. package/src/i18n/voice-delivery.ru.ts +77 -0
  559. package/src/i18n/voice-delivery.zh-CN.ts +77 -0
  560. package/src/i18n/weapons.ar.ts +115 -0
  561. package/src/i18n/weapons.de.ts +114 -0
  562. package/src/i18n/weapons.es.ts +116 -0
  563. package/src/i18n/weapons.fr.ts +103 -0
  564. package/src/i18n/weapons.he.ts +114 -0
  565. package/src/i18n/weapons.hi.ts +116 -0
  566. package/src/i18n/weapons.ja.ts +116 -0
  567. package/src/i18n/weapons.ko.ts +116 -0
  568. package/src/i18n/weapons.pt-BR.ts +114 -0
  569. package/src/i18n/weapons.ru.ts +114 -0
  570. package/src/i18n/weapons.zh-CN.ts +114 -0
  571. package/src/image-critic-node.ts +61 -0
  572. package/src/image-critic-types.ts +40 -0
  573. package/src/index.ts +866 -0
  574. package/src/inject-upstream.ts +15 -0
  575. package/src/inpaint-region.ts +51 -0
  576. package/src/json-evaluator.ts +732 -0
  577. package/src/json-path.ts +52 -0
  578. package/src/lip-sync-pricing.ts +90 -0
  579. package/src/list-merge.ts +40 -0
  580. package/src/list-sort.ts +122 -0
  581. package/src/list-source-resolver.ts +50 -0
  582. package/src/llm-models.ts +245 -0
  583. package/src/location-mention-slug.ts +291 -0
  584. package/src/location-preset-catalog-map.ts +128 -0
  585. package/src/loop-delimiter.ts +73 -0
  586. package/src/lora-routing.ts +95 -0
  587. package/src/lottie-overlay-catalog.ts +175 -0
  588. package/src/lottie-slots.ts +309 -0
  589. package/src/model-catalog.ts +2386 -0
  590. package/src/model-constants.ts +1910 -0
  591. package/src/model-tree.ts +120 -0
  592. package/src/monetization.ts +15 -0
  593. package/src/multi-pick.ts +42 -0
  594. package/src/node-default-mappings.ts +262 -0
  595. package/src/node-mappable-fields.ts +70 -0
  596. package/src/node-preset-export.ts +56 -0
  597. package/src/node-preset-extract.ts +147 -0
  598. package/src/node-refs.ts +253 -0
  599. package/src/node-runtime-keys.ts +117 -0
  600. package/src/object-aspect-defaults.ts +72 -0
  601. package/src/object-picker-types.ts +22 -0
  602. package/src/parameter-node-value.ts +284 -0
  603. package/src/pinterest-url.ts +28 -0
  604. package/src/pipeline-chat.ts +72 -0
  605. package/src/pipeline-defaults.ts +318 -0
  606. package/src/pipeline-events.ts +162 -0
  607. package/src/pipeline-state-types.ts +196 -0
  608. package/src/pipeline-types.ts +647 -0
  609. package/src/pipeline-validation.ts +87 -0
  610. package/src/presentation-types.ts +23 -0
  611. package/src/presentation-utils.ts +397 -0
  612. package/src/producer-types.ts +188 -0
  613. package/src/progress-curve.ts +99 -0
  614. package/src/provider-directive-defaults.ts +69 -0
  615. package/src/reduce-strategy-registry.ts +121 -0
  616. package/src/reference-board-templates.ts +81 -0
  617. package/src/reference-roles.ts +153 -0
  618. package/src/reference-sheet/__tests__/board-to-column.test.ts +20 -0
  619. package/src/reference-sheet/__tests__/catalog.test.ts +50 -0
  620. package/src/reference-sheet/__tests__/cost.test.ts +38 -0
  621. package/src/reference-sheet/__tests__/no-drift.test.ts +28 -0
  622. package/src/reference-sheet/__tests__/panel-plan.test.ts +61 -0
  623. package/src/reference-sheet/__tests__/panel-prompts.test.ts +17 -0
  624. package/src/reference-sheet/__tests__/plan-generation.test.ts +72 -0
  625. package/src/reference-sheet/__tests__/presets.test.ts +54 -0
  626. package/src/reference-sheet/__tests__/types.test.ts +24 -0
  627. package/src/reference-sheet/catalog.ts +144 -0
  628. package/src/reference-sheet/cost.ts +37 -0
  629. package/src/reference-sheet/credit-id.ts +7 -0
  630. package/src/reference-sheet/index.ts +8 -0
  631. package/src/reference-sheet/panel-plan.ts +65 -0
  632. package/src/reference-sheet/panel-prompts.ts +14 -0
  633. package/src/reference-sheet/plan-generation.ts +79 -0
  634. package/src/reference-sheet/presets.ts +77 -0
  635. package/src/reference-sheet/types.ts +92 -0
  636. package/src/repeat-types.ts +97 -0
  637. package/src/resolve-field-mappings.ts +119 -0
  638. package/src/route-filter.ts +80 -0
  639. package/src/scene-helper-types.ts +249 -0
  640. package/src/scene-node-types.ts +281 -0
  641. package/src/scraper-actors.ts +57 -0
  642. package/src/scraper-output-schemas.ts +25 -0
  643. package/src/seasons.ts +45 -0
  644. package/src/selector.ts +864 -0
  645. package/src/settled-with-limit.ts +42 -0
  646. package/src/shot-element.ts +43 -0
  647. package/src/social-media-specs.ts +121 -0
  648. package/src/social-post.ts +24 -0
  649. package/src/sub-workflow-validation.ts +78 -0
  650. package/src/supported-fonts.ts +40 -0
  651. package/src/surround.ts +113 -0
  652. package/src/switchx-pricing.ts +33 -0
  653. package/src/text-separators.ts +59 -0
  654. package/src/to-connected-references.ts +77 -0
  655. package/src/types.ts +272 -0
  656. package/src/variant-job-id.ts +17 -0
  657. package/src/vehicles.ts +213 -0
  658. package/src/video-analysis-pricing.ts +74 -0
  659. package/src/video-analysis.ts +127 -0
  660. package/src/video-duration.ts +25 -0
  661. package/src/voice-changer-models.ts +36 -0
  662. package/src/voice-matcher-types.ts +37 -0
  663. package/src/voices.ts +92 -0
  664. package/src/weapons.ts +190 -0
  665. package/src/workflow-export.ts +153 -0
@@ -0,0 +1,97 @@
1
+ import type { LocaleCatalogMap } from "./types.js"
2
+
3
+ const map: LocaleCatalogMap = {
4
+ // ── Standard ──
5
+ "auto": { label: "自动", description: "让模型自主选择" },
6
+ "none": { label: "硬切", description: "瞬间切换,无过渡" },
7
+ "cross-dissolve": { label: "交叉溶解", description: "两个镜头间的渐进融合" },
8
+ "fade-to-black": { label: "淡出至黑", description: "画面变暗至全黑,第二幕浮现" },
9
+ "fade-to-white": { label: "淡出至白", description: "画面泛白,第二幕从白光中显现" },
10
+ "match-cut": { label: "匹配剪辑", description: "镜头间形状或动作的视觉呼应" },
11
+ "smash-cut": { label: "撞击剪辑", description: "对比强烈的镜头间的突兀硬切" },
12
+ "iris": { label: "虹膜转场", description: "圆形虹膜收缩后展开至第二幕" },
13
+ "wipe": { label: "划像", description: "直线划过替换第一个镜头" },
14
+ "roll-transition": { label: "滚动转场", description: "画面旋转90–180°,第二幕正立落定" },
15
+ "seamless-match": { label: "无缝匹配", description: "以运动与色调伪装的隐形剪辑" },
16
+
17
+ // ── Time ──
18
+ "fast-forward-day-night": { label: "快进(日→夜)", description: "同一场景日转夜的延时摄影" },
19
+ "fast-forward-night-day": { label: "快进(夜→晨)", description: "同一场景夜转黎明的延时摄影" },
20
+ "seasonal-shift": { label: "季节更迭", description: "同一场景四季流转" },
21
+ "aging": { label: "岁月流逝", description: "主体明显衰老" },
22
+ "rewind": { label: "倒带", description: "时间倒流,动作逆向播放" },
23
+ "freeze-frame-jump": { label: "定格跳跃", description: "动作定格后跳跃至未来时刻" },
24
+ "weather-shift": { label: "天气变换", description: "同一场景天气骤变" },
25
+ "flashback": { label: "闪回", description: "记忆闪回,回到过去一刻" },
26
+
27
+ // ── Element ──
28
+ "dissolve-to-mist": { label: "化雾消散", description: "主体化为薄雾飘散后重新凝聚" },
29
+ "water-splash": { label: "水花飞溅", description: "主体化为水流,飞溅后重新成形" },
30
+ "sand-scatter": { label: "沙尘飞散", description: "主体化为沙粒被风吹散后重新聚合" },
31
+ "fire-burnup": { label: "燃烬", description: "主体燃烧成余烬,余烬重新汇聚" },
32
+ "smoke-puff": { label: "烟雾消散", description: "主体消失于烟雾,又从烟雾中显现" },
33
+ "magic-sparkles": { label: "魔法粒子", description: "复仇者联盟风格的粒子消散" },
34
+ "lightning-flash": { label: "雷光闪击", description: "闪电划过画面,闪光中场景切换" },
35
+ "ink-splash": { label: "泼墨", description: "墨水铺满画面后收回,露出新场景" },
36
+ "sand-storm": { label: "沙尘暴", description: "沙暴席卷画面,内部场景转换" },
37
+ "paint-splash": { label: "泼彩", description: "彩漆覆盖画面后收缩,露出新场景" },
38
+ "aurora-sweep": { label: "极光扫场", description: "极光帷幕扫过画面,场景转换" },
39
+ "sakura-petals": { label: "樱花飞舞", description: "樱花瓣风暴横扫画面" },
40
+ "garden-bloom": { label: "百花齐放", description: "花朵盛开向外蔓延,如帷幕揭开新场景" },
41
+ "powder-burst": { label: "彩粉爆炸", description: "彩色粉末爆炸扩散后沉落,新场景显现" },
42
+
43
+ // ── Morph ──
44
+ "liquid-morph": { label: "液态变形", description: "主体液化流动,变形为新主体" },
45
+ "pixelate-reform": { label: "像素化重组", description: "像素化后散开,重新聚合" },
46
+ "shatter-glass": { label: "碎裂重组", description: "主体如玻璃碎裂后重新拼合" },
47
+ "origami-fold": { label: "折纸变形", description: "主体如纸折叠变化为新形态" },
48
+ "vortex-swirl": { label: "漩涡旋入", description: "主体旋入漩涡,展开为新形态" },
49
+ "dream-ripple": { label: "梦境涟漪", description: "水面涟漪扩散,新场景随之显现" },
50
+ "wireframe-morph": { label: "线框变形", description: "主体简化为线框,重构为新主体" },
51
+ "polygon-shatter": { label: "多边形碎裂", description: "主体碎成低多边形,重新拼合为新形态" },
52
+ "melt-down": { label: "融化重生", description: "主体熔化成水洼,升起重构为新主体" },
53
+
54
+ // ── Portal ──
55
+ "zoom-into-eye": { label: "推入眼睛", description: "推入瞳孔,内部是新世界" },
56
+ "zoom-into-mirror": { label: "推入镜子", description: "推入镜面,进入反射世界" },
57
+ "zoom-into-screen": { label: "推入屏幕", description: "推入电视/手机/显示器画面" },
58
+ "zoom-into-book": { label: "推入书本", description: "推入书页插图,插图变为新场景" },
59
+ "walk-through-door": { label: "穿越门洞", description: "穿过门进入全新场景" },
60
+ "fall-into-hole": { label: "坠入洞口", description: "镜头坠落穿越开口" },
61
+ "pull-out-reveal": { label: "拉远揭示", description: "拉远后发现第一幕只是画中画" },
62
+ "zoom-into-mouth": { label: "推入口腔", description: "推入张开的嘴,进入内部新世界" },
63
+ "push-through-glass": { label: "穿越玻璃", description: "镜头推过玻璃折射进入新世界" },
64
+ "soul-jump": { label: "灵魂跃迁", description: "半透明灵魂离体,跃入新身体" },
65
+
66
+ // ── Physics ──
67
+ "explosion-blast": { label: "爆炸", description: "爆炸席卷画面,新场景从烟尘中浮现" },
68
+ "shockwave": { label: "冲击波", description: "冲击波扭曲画面,场景随之转换" },
69
+ "punch-into-camera": { label: "拳击摄像机", description: "拳头击中镜头,场景在冲击中转换" },
70
+ "debris-shower": { label: "碎片横飞", description: "碎片扫过镜头,背后场景已换" },
71
+ "gravity-flip": { label: "重力翻转", description: "重力反向,镜头旋转180°" },
72
+ "building-explosion": { label: "建筑爆炸", description: "建筑爆炸,烟尘散去后场景切换" },
73
+ "vehicle-explosion": { label: "车辆爆炸", description: "前景车辆爆炸,火焰散去后新场景" },
74
+ "jump-match": { label: "跳跃匹配", description: "主体起跳,落地衔接新场景" },
75
+ "hand-swipe": { label: "手掌划过", description: "手掌扫过镜头,遮挡间场景切换" },
76
+
77
+ // ── Light ──
78
+ "white-flash": { label: "白色闪光", description: "画面泛出纯白" },
79
+ "lens-flare-swipe": { label: "镜头光晕扫场", description: "变形镜头光晕横扫画面" },
80
+ "light-streak": { label: "光束扫场", description: "光束划过画面,场景转换" },
81
+ "color-invert": { label: "颜色反转闪光", description: "颜色瞬间反转" },
82
+ "sun-glare": { label: "阳光眩光", description: "强烈日光眩光漂白画面" },
83
+ "lens-crack": { label: "镜头裂痕", description: "镜头开裂,透过裂纹看到新场景" },
84
+ "dirty-lens-wipe": { label: "镜头污渍擦拭", description: "镜头污渍被擦净,场景随之更换" },
85
+ "eye-light-burst": { label: "眼部光束爆发", description: "主体眼睛射出强光,画面白屏后新场景" },
86
+
87
+ // ── Glitch ──
88
+ "digital-glitch": { label: "数字故障", description: "RGB分离+扫描线+数据溶解故障" },
89
+ "vhs-rewind": { label: "VHS倒带", description: "VHS磁带倒带式画面扭曲" },
90
+ "datamosh": { label: "Datamosh", description: "运动向量模糊渗透场景切换" },
91
+ "channel-flip": { label: "频道切换", description: "电视静电加频道跳转" },
92
+ "hologram-flicker": { label: "全息闪烁", description: "全息风闪烁中新场景物化显现" },
93
+ "display-wipe": { label: "显示屏切换", description: "场景压缩入显示屏,展开为新场景" },
94
+ "double-exposure": { label: "双重曝光", description: "两个场景叠合,前者渐渐消融" },
95
+ }
96
+
97
+ export default map
@@ -0,0 +1,158 @@
1
+ /**
2
+ * i18n types and language registry for parameter-node pickers.
3
+ *
4
+ * Architecture:
5
+ * - English is the canonical source — every catalog entry has its `label` and
6
+ * `description` in English in the catalog file itself.
7
+ * - Non-English translations live in sidecar files under
8
+ * `packages/shared/src/i18n/<catalog>.<locale>.ts`.
9
+ * - Each sidecar exports a `Record<id, LocalizedEntry>` keyed by entry id.
10
+ * - Lazy-loaded per locale via dynamic import so users only download languages
11
+ * they actually use.
12
+ *
13
+ * Translation rules (see picker-i18n design doc):
14
+ * - `id` and `promptHint` are NEVER translated.
15
+ * - `label` is translated when it's a common noun/adjective (e.g. "Smoky Eye"
16
+ * → "Ojo Ahumado"). Proper names, brand names, model numbers, technical
17
+ * units, and Latin/Italian/Japanese cinematography jargon stay in their
18
+ * canonical form (e.g. Tim Walker, Sony A7III, chiaroscuro, anamorphic,
19
+ * Y2K, ukiyo-e).
20
+ * - `description` is translated freely, with proper nouns preserved inside.
21
+ *
22
+ * Search rule: pickers filter on the union of current-locale + English text,
23
+ * so a French user typing "soie" finds "Silk" AND a French user typing "silk"
24
+ * still finds it.
25
+ */
26
+
27
+ /** Canonical language code (BCP-47 or simplified two-letter). */
28
+ export type LocaleId =
29
+ | "en"
30
+ | "es"
31
+ | "fr"
32
+ | "de"
33
+ | "pt-BR"
34
+ | "ru"
35
+ | "hi"
36
+ | "ja"
37
+ | "ko"
38
+ | "zh-CN"
39
+ | "he"
40
+ | "ar"
41
+
42
+ /** Reading direction. RTL languages need `dir="rtl"` on the picker container. */
43
+ export type LocaleDirection = "ltr" | "rtl"
44
+
45
+ export interface LanguageDefinition {
46
+ readonly id: LocaleId
47
+ /** English name shown in language pickers when current locale is English. */
48
+ readonly englishName: string
49
+ /** Native name shown to native speakers (in their own script). */
50
+ readonly nativeName: string
51
+ /** Two-letter or short code displayed inside the small locale chip. */
52
+ readonly shortCode: string
53
+ /** Reading direction. */
54
+ readonly dir: LocaleDirection
55
+ /** Optional flag emoji for visual recognition. */
56
+ readonly flag: string
57
+ }
58
+
59
+ /**
60
+ * Master language registry. Order = display order in the language picker
61
+ * dropdown. English first as canonical default, then mainstream LTR
62
+ * languages, then RTL languages last.
63
+ */
64
+ export const LANGUAGES: ReadonlyArray<LanguageDefinition> = [
65
+ { id: "en", englishName: "English", nativeName: "English", shortCode: "EN", dir: "ltr", flag: "🇬🇧" },
66
+ { id: "es", englishName: "Spanish", nativeName: "Español", shortCode: "ES", dir: "ltr", flag: "🇪🇸" },
67
+ { id: "fr", englishName: "French", nativeName: "Français", shortCode: "FR", dir: "ltr", flag: "🇫🇷" },
68
+ { id: "de", englishName: "German", nativeName: "Deutsch", shortCode: "DE", dir: "ltr", flag: "🇩🇪" },
69
+ { id: "pt-BR", englishName: "Portuguese (Brazil)", nativeName: "Português", shortCode: "PT", dir: "ltr", flag: "🇧🇷" },
70
+ { id: "ru", englishName: "Russian", nativeName: "Русский", shortCode: "RU", dir: "ltr", flag: "🇷🇺" },
71
+ { id: "hi", englishName: "Hindi", nativeName: "हिन्दी", shortCode: "HI", dir: "ltr", flag: "🇮🇳" },
72
+ { id: "ja", englishName: "Japanese", nativeName: "日本語", shortCode: "JA", dir: "ltr", flag: "🇯🇵" },
73
+ { id: "ko", englishName: "Korean", nativeName: "한국어", shortCode: "KO", dir: "ltr", flag: "🇰🇷" },
74
+ { id: "zh-CN", englishName: "Chinese (Simplified)", nativeName: "简体中文", shortCode: "ZH", dir: "ltr", flag: "🇨🇳" },
75
+ { id: "he", englishName: "Hebrew", nativeName: "עברית", shortCode: "HE", dir: "rtl", flag: "🇮🇱" },
76
+ { id: "ar", englishName: "Arabic", nativeName: "العربية", shortCode: "AR", dir: "rtl", flag: "🇸🇦" },
77
+ ] as const
78
+
79
+ export const LOCALE_IDS: ReadonlyArray<LocaleId> = LANGUAGES.map((l) => l.id)
80
+ export const NON_EN_LOCALE_IDS: ReadonlyArray<Exclude<LocaleId, "en">> = LANGUAGES
81
+ .filter((l) => l.id !== "en")
82
+ .map((l) => l.id) as ReadonlyArray<Exclude<LocaleId, "en">>
83
+
84
+ const languageById = new Map<LocaleId, LanguageDefinition>(LANGUAGES.map((l) => [l.id, l]))
85
+
86
+ export function getLanguage(id: string | undefined | null): LanguageDefinition | undefined {
87
+ if (!id) return undefined
88
+ return languageById.get(id as LocaleId)
89
+ }
90
+
91
+ export function getLocaleDirection(id: string | undefined | null): LocaleDirection {
92
+ return getLanguage(id)?.dir ?? "ltr"
93
+ }
94
+
95
+ export function isRTL(id: string | undefined | null): boolean {
96
+ return getLocaleDirection(id) === "rtl"
97
+ }
98
+
99
+ /**
100
+ * A single localized entry. Either or both fields may be missing — the
101
+ * resolver falls back to the canonical English `label` / `description` from
102
+ * the catalog when a field is absent.
103
+ */
104
+ export interface LocalizedEntry {
105
+ readonly label?: string
106
+ readonly description?: string
107
+ }
108
+
109
+ /** Map shape exported by every sidecar file (`<catalog>.<locale>.ts`). */
110
+ export type LocaleCatalogMap = Readonly<Record<string, LocalizedEntry>>
111
+
112
+ /**
113
+ * The catalogs that have i18n sidecar files. Each name corresponds to a
114
+ * shared catalog file (e.g. "mood" → `packages/shared/src/mood.ts`).
115
+ */
116
+ export const I18N_CATALOGS = [
117
+ "action-fx",
118
+ "aesthetic",
119
+ "animals",
120
+ "atmosphere",
121
+ "backdrop",
122
+ "camera-format",
123
+ "camera-motions",
124
+ "character-fx",
125
+ "color-look",
126
+ "composition-effects",
127
+ "era",
128
+ "exposure-settings",
129
+ "framing",
130
+ "furniture",
131
+ "held-prop",
132
+ "instrumentation",
133
+ "lens",
134
+ "lighting",
135
+ "loop-subject",
136
+ "materials",
137
+ "mood",
138
+ "music-genre",
139
+ "music-mood",
140
+ "person",
141
+ "photo-genre",
142
+ "photographer",
143
+ "pose",
144
+ "post-process-effects",
145
+ "render-quality",
146
+ "seasons",
147
+ "setting",
148
+ "style",
149
+ "styling",
150
+ "temporal",
151
+ "transitions",
152
+ "vehicles",
153
+ "voice-character",
154
+ "voice-delivery",
155
+ "weapons",
156
+ ] as const
157
+
158
+ export type I18nCatalogId = (typeof I18N_CATALOGS)[number]
@@ -0,0 +1,137 @@
1
+ import type { LocaleCatalogMap } from "./types.js"
2
+
3
+ const map: LocaleCatalogMap = {
4
+ // Classic Cars
5
+ "muscle-car": { label: "سيارة Muscle", description: "سيارة Muscle أمريكية شرسة بغطاء محرك طويل ووقفة عريضة وعادمين كروم مزدوجين وحضور V8 عميق هادر" },
6
+ "car-57-chevy": { label: "'57 Chevy", description: "سيارة Chevrolet Bel Air 1957 الأيقونية بزعانف ذيل وصدامات كروم وطلاء بلونين وإطارات بحواف بيضاء" },
7
+ "hot-rod": { label: "Hot Rod", description: "سيارة Hot Rod مقطوعة ومعدلة بطلاء لهب ومحرك كروم مكشوف وإطارات خلفية سمينة وأمامية نحيلة" },
8
+ "vintage-roadster": { label: "Roadster كلاسيكي", description: "سيارة Roadster مكشوفة من حقبة ما قبل الحرب برفارف منحنية وعتبات جانبية وعجلات بأسلاك سلكية وغطاء محرك طويل مصقول" },
9
+ "model-t": { label: "Ford Model T", description: "سيارة Model T سوداء من أوائل القرن العشرين بهيكل مربع منتصب ومصابيح نحاسية وعجلات بأسلاك ومحرك يدار بمقبض" },
10
+ "vw-beetle": { label: "VW Beetle", description: "سيارة Volkswagen Beetle مدورة بألوان باستيلية بغطاء محرك منحن ومحرك خلفي مبرد بالهواء ووجه مرح يشبه الحشرة" },
11
+ "checker-cab": { label: "Checker Cab", description: "تاكسي نيويورك الكلاسيكي الأصفر بهيكل مربع وشريط شطرنجي أبيض وأسود وضوء على السقف" },
12
+ "woody-wagon": { label: "Woody Wagon", description: "سيارة Station Wagon من حقبة ركوب الأمواج بأبواب جانبية بألواح خشبية وصدامات كروم وباب خلفي طويل" },
13
+ "lowrider": { label: "Lowrider", description: "سيارة Lowrider بطلاء حلوى وتعليق هيدروليكي وعجلات كروم بأسلاك وإطارات بحواف بيضاء ورسومات مرشوشة" },
14
+
15
+ // Everyday Cars
16
+ "sedan": { label: "سيدان", description: "سيارة سيدان متوسطة بأربعة أبواب بصورة ظلية انسيابية ولمسات كروم ومصابيح LED حديثة" },
17
+ "suv": { label: "SUV", description: "سيارة دفع رباعي كبيرة بوقفة عالية وقضبان سقف وعجلات سبائكية كبيرة وهيكل عضلي مربع الزوايا" },
18
+ "hatchback": { label: "هاتشباك", description: "سيارة هاتشباك مدمجة بمؤخرة قصيرة وباب خلفي يرفع وأبعاد رشيقة وطلاء زاه" },
19
+ "minivan": { label: "ميني فان", description: "سيارة عائلية ميني فان بأبواب جانبية منزلقة ومقصورة عالية وفسيحة ونوافذ خلفية معتمة وباب خلفي رحب" },
20
+ "station-wagon": { label: "Station Wagon", description: "سيارة Station Wagon بسقف طويل ومنطقة شحن ممتدة ونوافذ ربعية خلفية وصورة ظلية عائلية" },
21
+ "crossover": { label: "Crossover", description: "سيارة Crossover SUV متوسطة الحجم بارتفاع قيادة مرفوع وتصميم يشبه السيارات ولمسات LED انسيابية" },
22
+ "electric-car": { label: "سيارة كهربائية", description: "سيارة كهربائية حديثة أنيقة بمقدمة ناعمة بدون شبك ومقابض أبواب مدمجة في الهيكل وخطوط نظيفة انسيابية" },
23
+ "hatchback-econobox": { label: "Econobox", description: "سيارة مدينة صغيرة اقتصادية بابين بغطاء محرك قصير وعجلات صغيرة وتصميم مدمج بسيط" },
24
+
25
+ // Performance / Exotic
26
+ "sports-car": { label: "سيارة رياضية", description: "سيارة رياضية منخفضة بابين بوقفة عريضة شرسة وهيكل انسيابي وطلاء لامع زاه" },
27
+ "supercar": { label: "Supercar", description: "سيارة Supercar بمحرك أوسط بأبواب مقصية وغطاء محرك منخفض جدا وفتحات خلفية ضخمة وجناح خلفي من ألياف الكربون" },
28
+ "convertible": { label: "كابريوليه", description: "سيارة كابريوليه بمقعدين بسقف ناعم منزل وغطاء محرك طويل منحوت ورياح تنساب فوق الأبواب المنخفضة" },
29
+ "grand-tourer": { label: "Grand Tourer", description: "سيارة Grand Tourer كوبيه أنيقة بغطاء محرك طويل انسيابي وأربعة عوادم وأبعاد فاخرة" },
30
+ "roadster": { label: "Roadster", description: "سيارة Roadster مدمجة بمقعدين بزجاج أمامي ملتف وسقف ناعم مطوي وصورة ظلية كلاسيكية بسقف منزل" },
31
+ "racing-car": { label: "سيارة سباق", description: "سيارة سباق Formula بعجلات مكشوفة وإطارات Slick وجناح خلفي كبير وقمرة Halo وجوانب انسيابية مغطاة بشعارات الرعاة" },
32
+ "rally-car": { label: "سيارة Rally", description: "سيارة هاتشباك Rally ملطخة بالطين بإطارات وعرة ومرشات طين ضخمة وأضواء مثبتة على السقف وألوان السباق" },
33
+ "drift-car": { label: "سيارة Drift", description: "سيارة كوبيه معدلة للـ Drift بعدة هيكل عريضة وجناح خلفي ضخم وإضاءة نيون سفلية ودخان إطارات يلاحقها" },
34
+
35
+ // Motorcycles
36
+ "sportbike": { label: "Sportbike", description: "دراجة نارية رياضية انسيابية بوضعية ركوب منحنية وغطاء كامل وإطارات لاصقة ورسومات سباق زاهية" },
37
+ "cruiser": { label: "Cruiser", description: "دراجة نارية Cruiser منخفضة بخزان طويل بشكل دمعة ومقابض مرتدة للخلف وعوادم كروم وإطار خلفي سمين" },
38
+ "chopper": { label: "Chopper", description: "دراجة Chopper مخصصة ممدودة بمقدمة مائلة ومقابض Ape-hanger طويلة وعجلة أمامية رفيعة وكروم في كل مكان" },
39
+ "dirt-bike": { label: "Dirt Bike", description: "دراجة Dirt Bike للطرق الوعرة بإطارات وعرة وتعليق طويل وغطاء بلاستيكي بألوان زاهية ومقابض عالية" },
40
+ "scooter": { label: "Scooter", description: "Scooter مدمج بدخول مباشر بهيكل أملس وعجلات صغيرة ومسند قدم مسطح ومخزن صغير تحت المقعد" },
41
+ "moped": { label: "Moped", description: "Moped صغير ببداية بالدواسة وإطار فولاذي بسيط وسلة أمامية ومحرك بنزين صغير تحت المقعد" },
42
+ "cafe-racer": { label: "Cafe Racer", description: "دراجة Cafe Racer مجردة بمقابض Clip-on ومقعد Solo بحدبة وإطار مكشوف وخزان بسيط" },
43
+
44
+ // Bicycles & Human-Powered
45
+ "road-bike": { label: "دراجة طريق", description: "دراجة طريق خفيفة بمقابض Drop وإطارات نحيلة بضغط عال وإطار من ألياف الكربون انسيابي" },
46
+ "mountain-bike": { label: "دراجة جبلية", description: "دراجة جبلية صلبة بإطارات وعرة وشوكة تعليق أمامية ومقابض مسطحة وإطار ملطخ بالطين" },
47
+ "bmx": { label: "دراجة BMX", description: "دراجة BMX للحيل بإطار صغير وأوتاد على المحاور وإطارات سمينة ومقابض بدعامة عرضية" },
48
+ "cruiser-bike": { label: "دراجة Cruiser شاطئية", description: "دراجة Cruiser شاطئية مريحة بإطار منحن ومقابض مرتدة للخلف ومقعد عريض وإطارات بالون" },
49
+ "penny-farthing": { label: "Penny Farthing", description: "دراجة Penny Farthing فيكتورية بعجلة أمامية ضخمة وعجلة خلفية صغيرة ومقعد جلدي مرفوع عاليا" },
50
+ "unicycle": { label: "دراجة أحادية العجلة", description: "دراجة أحادية العجلة بعمود مقعد طويل ودواسات بسيطة على المحور ومظهر سيرك بسيط" },
51
+ "skateboard": { label: "Skateboard", description: "لوح Skateboard خشبي بشريط قبضة على السطح وأربع عجلات بوليوريثان ورسومات ملونة على الجانب السفلي" },
52
+ "kick-scooter": { label: "Kick Scooter", description: "Kick Scooter بعجلتين بمقبض T طويل وسطح ضيق وعجلات صغيرة صلبة" },
53
+
54
+ // Trucks
55
+ "pickup-truck": { label: "شاحنة بيك آب", description: "شاحنة بيك آب كاملة الحجم بمقصورة طاقم عالية وصندوق خلفي مفتوح وشبك كروم وإطارات وعرة شرسة" },
56
+ "semi-truck": { label: "شاحنة Semi", description: "شاحنة Semi للنقل لمسافات طويلة بمقصورة نوم وعوادم كروم عالية ومقطورة ضخمة مفصلية خلفها" },
57
+ "dump-truck": { label: "شاحنة قلاب", description: "شاحنة قلاب ثقيلة بصندوق قابل للإمالة وإطارات وعرة ضخمة وألوان البناء الصفراء" },
58
+ "tow-truck": { label: "شاحنة قطر", description: "شاحنة قطر بذراع هيدروليكية وخطاف وصندوق مسطح للاسترداد وأضواء تحذير كهرمانية دوارة وعلامات بارزة" },
59
+ "delivery-van": { label: "فان توصيل", description: "فان توصيل أبيض بحوض شحن مربع وباب جانبي منزلق وقضبان سقف ولاصقات ألوان الشركة" },
60
+ "ice-cream-truck": { label: "شاحنة بوظة", description: "شاحنة بوظة مرحة بطلاء باستيلي ونافذة عرض الحلويات ولاصقات ملونة وزخرفة سقف على شكل مخروط" },
61
+ "food-truck": { label: "شاحنة طعام", description: "شاحنة طعام بأسلوب بنافذة خدمة قابلة للطي وقائمة طباشير وأضواء سلسلة ولفافة مخصصة زاهية" },
62
+ "box-truck": { label: "شاحنة صندوق", description: "شاحنة صندوق متوسطة بصندوق شحن مستطيل بسيط وباب خلفي يلف لأعلى ومقصورة أمامية" },
63
+
64
+ // Transit
65
+ "city-bus": { label: "حافلة مدينة", description: "حافلة مدينة حديثة مفصلية بأرضية منخفضة وأبواب منزلقة ولوحة وجهة أمامية ولفافة إعلانية" },
66
+ "school-bus": { label: "حافلة مدرسية", description: "حافلة مدرسية أمريكية كلاسيكية صفراء بحواف سوداء وعلامات توقف حمراء وامضة وذراع توقف ممتدة وأرقام سوداء مطبوعة" },
67
+ "double-decker": { label: "حافلة بطابقين", description: "حافلة بطابقين حمراء أيقونية بسقف مدور ودرج مفتوح في الداخل ولفافة وجهة أمامية" },
68
+ "coach-bus": { label: "حافلة Coach", description: "حافلة Coach للمسافات الطويلة بنوافذ بانورامية معتمة ومخازن أمتعة في الأسفل وهيكل انسيابي" },
69
+ "train": { label: "قطار", description: "قطار ركاب حديث بمقدمة انسيابية أنيقة ونوافذ بانورامية وصف من العربات اللامعة" },
70
+ "steam-locomotive": { label: "قاطرة بخارية", description: "قاطرة بخارية سوداء بمدخنة طويلة تطلق البخار ومرجل وقضبان ربط وعربة فحم خلفها" },
71
+ "bullet-train": { label: "قطار سريع", description: "قطار Bullet Train عالي السرعة بمقدمة مدببة انسيابية وألوان أبيض وأزرق ناعمة ونوافذ ضيقة" },
72
+ "subway": { label: "قطار مترو", description: "عربة مترو من الفولاذ المقاوم للصدأ بألواح مقاومة للجرافيتي وأبواب منزلقة وصفوف من أضواء الفلورسنت في الداخل" },
73
+ "tram": { label: "ترام", description: "عربة ترام مدينة كلاسيكية بهيكل خشبي مربع وعمود تيار علوي وقضبان تحتها" },
74
+ "stagecoach": { label: "عربة Stagecoach", description: "عربة Stagecoach من الغرب القديم بهيكل خشبي وتعليق بنوابض ورف أمتعة على السقف وفريق من الخيول مربوط أمامها" },
75
+ "horse-carriage": { label: "عربة تجرها الخيول", description: "عربة مزخرفة تجرها الخيول بألواح خشبية مصقولة وعجلات كبيرة بأسلاك ومقصورة منجدة بالمخمل" },
76
+
77
+ // Aircraft
78
+ "airliner": { label: "طائرة ركاب", description: "طائرة ركاب تجارية واسعة الجسم بمحركي نفاثين تحت أجنحة منكسرة وصفوف من النوافذ البيضاوية وذيل عمودي طويل منكسر" },
79
+ "biplane": { label: "Biplane", description: "طائرة Biplane كلاسيكية بجناحين متراكبين متصلين بدعامات وأسلاك وقمرة قيادة مفتوحة ومروحة خشبية" },
80
+ "propeller-plane": { label: "طائرة بمروحة", description: "طائرة صغيرة أحادية المحرك بمروحة بمروحة دوارة في المقدمة وأجنحة عالية ومعدات هبوط ثابتة وقمرة قيادة فقاعية" },
81
+ "helicopter": { label: "هليكوبتر", description: "هليكوبتر للمهام بدوار رئيسي كبير في الأعلى وذراع ذيل نحيلة ومزالج تحتها وقمرة قيادة بمقدمة فقاعية" },
82
+ "seaplane": { label: "طائرة مائية", description: "طائرة مائية بعوامات Pontoon مزدوجة بدلا من العجلات وأجنحة عالية ومروحة، تستقر على ماء هادئ" },
83
+ "hot-air-balloon": { label: "بالون هواء ساخن", description: "بالون هواء ساخن عملاق بغلاف ملون مخطط وحارق لهب يشتعل لأعلى وسلة من الخيزران تحته" },
84
+ "blimp": { label: "Blimp", description: "منطاد Blimp بشكل سجق بغلاف فضي أنيق وزعانف خلفية صغيرة وقمرة معلقة تحته" },
85
+ "glider": { label: "طائرة شراعية", description: "طائرة شراعية أنيقة بأجنحة طويلة جدا وضيقة بدون محرك وقمرة قيادة بشكل دمعة" },
86
+ "drone": { label: "Drone", description: "Drone كاميرا رباعي المراوح بأربع مراوح دوارة على أذرع نحيلة وجسم مركزي وكاميرا بحامل تحته" },
87
+
88
+ // Watercraft
89
+ "yacht": { label: "يخت", description: "يخت محرك فاخر أنيق بطوابق متعددة ونوافذ معتمة وصارية رادار وهيكل أبيض لامع يشق الماء الأزرق" },
90
+ "sailboat": { label: "قارب شراعي", description: "قارب شراعي رشيق بصارية طويلة وأشرعة بيضاء مشدودة تلتقط الرياح وهيكل ضيق من الألياف الزجاجية" },
91
+ "speedboat": { label: "قارب سريع", description: "قارب سريع قوي بهيكل V عميق مدبب وزجاج أمامي منخفض ومحرك خارجي هادر يخلف موجة" },
92
+ "cruise-ship": { label: "سفينة سياحية", description: "سفينة سياحية ضخمة بطوابق متعددة شاهقة وصفوف من الشرفات ومداخن زاهية ومقدمة مدببة" },
93
+ "cargo-ship": { label: "سفينة شحن", description: "سفينة شحن حاويات عملاقة مكدسة بحاويات شحن بألوان قوس قزح وبرج جسر في المؤخرة" },
94
+ "canoe": { label: "كانو", description: "كانو خشبي كلاسيكي بمقدمة ومؤخرة مدببتين وداخل بأضلاع أرز ومجداف واحد يستقر بداخله" },
95
+ "kayak": { label: "كاياك", description: "كاياك بلاستيكي نحيل بصورة ظلية منخفضة وفتحة قمرة قيادة مغلقة ومجداف بنصلين" },
96
+ "rowboat": { label: "قارب تجديف", description: "قارب تجديف خشبي صغير بألواح قاع مسطحة ومثبتات مجاديف على الحواف ومجدافين خشبيين" },
97
+ "jet-ski": { label: "Jet Ski", description: "Jet Ski وقوف بغطاء شرس ومقابض ومقعد فردي وفوهة دفع نفاثة" },
98
+ "submarine": { label: "غواصة", description: "غواصة عسكرية بهيكل أسطواني طويل وبرج قيادة بمناظير ومقدمة منتفخة تغوص في الماء العميق" },
99
+ "pirate-ship": { label: "سفينة قراصنة", description: "سفينة قراصنة Galleon خشبية بصواري طويلة وأشرعة مربعة ورأس منحوت في المقدمة ومدافع على طول الهيكل وعلم أسود ممزق" },
100
+
101
+ // Military
102
+ "tank": { label: "دبابة", description: "دبابة قتال ثقيلة بفوهة مدفع طويلة وبرج دوار ودرع مائل سميك وجنازير مستمرة عريضة" },
103
+ "humvee": { label: "Humvee", description: "Humvee عسكري بوقفة عريضة وهيكل مدرع زاوي وإطارات وعرة وبرج مثبت على السقف" },
104
+ "armored-personnel-carrier": { label: "ناقلة أفراد مدرعة", description: "ناقلة أفراد مدرعة بجنازير وهيكل مربع ومنحدر خلفي وبرج صغير في الأعلى" },
105
+ "fighter-jet": { label: "طائرة مقاتلة", description: "طائرة مقاتلة فوق صوتية بأجنحة Delta منكسرة وأنف حاد مدبب وزعنفتي ذيل مزدوجتين وصواريخ على دعامات الأجنحة" },
106
+ "stealth-bomber": { label: "قاذفة Stealth", description: "قاذفة Stealth بشكل جناح طائر بصورة ظلية مثلثة سوداء غير لامعة وبدون زعانف ذيل وأسطح متوزعة ماصة للرادار" },
107
+ "destroyer": { label: "مدمرة", description: "مدمرة بحرية أنيقة بهيكل رمادي طويل وأبراج مدفعية وقاذفات صواريخ وبنية فوقية مليئة بالرادارات" },
108
+ "aircraft-carrier": { label: "حاملة طائرات", description: "حاملة طائرات ضخمة بسطح طيران مسطح وبرج جزيرة بمصفوفات رادار وطائرات مقاتلة متوقفة في صفوف" },
109
+
110
+ // Construction
111
+ "bulldozer": { label: "بلدوزر", description: "بلدوزر بناء أصفر بشفرة دفع ضخمة في المقدمة وجنازير ثقيلة ومدخنة عادم طويلة" },
112
+ "excavator": { label: "حفارة", description: "حفارة هيدروليكية بذراع مفصلية ودلو مسنن ومقصورة دوارة وقاعدة بجنازير ثقيلة" },
113
+ "crane-truck": { label: "شاحنة رافعة", description: "شاحنة رافعة متنقلة بذراع تلسكوبية ضخمة ممتدة لأعلى وداعمات استقرار ووزن ثقل خلفي ثقيل" },
114
+ "cement-mixer": { label: "خلاطة إسمنت", description: "شاحنة خلاطة إسمنت بأسطوانة دوارة كبيرة ومزلق في المؤخرة ومقصورة مربعة" },
115
+ "forklift": { label: "رافعة شوكية", description: "رافعة شوكية مستودع بشوكتين فولاذيتين مرفوعتين في المقدمة وقفص حماية فوق السائق ووزن ثقل خلفي مدمج" },
116
+ "backhoe": { label: "Backhoe", description: "محمل Backhoe بدلو أمامي للغرف وذراع خلفية مفصلية بدلو حفر مسنن" },
117
+ "tractor": { label: "جرار", description: "جرار مزرعة بإطارات خلفية وعرة كبيرة وإطارات أمامية أصغر ومظلة سقف وخطاف سحب في الخلف" },
118
+
119
+ // Sci-Fi
120
+ "spaceship": { label: "سفينة فضاء", description: "سفينة فضاء بين النجوم أنيقة بجسم منحن وفوهات محرك متوهجة ومصفوفات هوائي ونافذة جسر قيادة" },
121
+ "starfighter": { label: "Starfighter", description: "Starfighter رشيق بطيار واحد بأجنحة منكسرة ومدافع ليزر على أطراف الأجنحة وقمرة قيادة فقاعية ودوافع متوهجة" },
122
+ "hovercar": { label: "Hovercar", description: "Hovercar مستقبلية تطفو فوق الأرض بدون عجلات ودوافع متوهجة من الأسفل وهيكل سلس وغطاء منحن" },
123
+ "mech": { label: "Mech", description: "روبوت Mech ثنائي الأرجل عملاق بدرع ومكابس هيدروليكية وقمرة قيادة في الجذع وأسلحة ثقيلة على الذراعين" },
124
+ "flying-saucer": { label: "صحن طائر", description: "صحن طائر UFO كلاسيكي بجسم قرصي معدني وأضواء كوات متوهجة حول الحافة وقمرة قيادة بقبة في الأعلى" },
125
+ "space-shuttle": { label: "مكوك فضائي", description: "مكوك فضائي مداري بأجنحة Delta بيضاء وبطن أسود لدرع حراري وفوهات صواريخ ضخمة في الخلف" },
126
+ "rocket": { label: "صاروخ", description: "صاروخ أسطواني طويل بمخروط أنف مدبب وزعانف ذيل ومراحل دفع ولهب يهدر من المحركات عند الإطلاق" },
127
+ "hoverboard": { label: "Hoverboard", description: "Hoverboard مستقبلي يطفو على بعد بوصات من الأرض بنفاثات سفلية متوهجة وجسم لوح أنيق فردي" },
128
+
129
+ "ambulance": { label: "سيارة إسعاف", description: "مركبة طبية للطوارئ" },
130
+ "police-car": { label: "سيارة شرطة", description: "سيارة دورية بألوان أبيض وأسود مع شريط أضواء" },
131
+ "hovercraft": { label: "Hovercraft", description: "مركبة على وسادة هوائية على الماء / اليابسة" },
132
+ "paraglider": { label: "Paraglider", description: "طائرة شراعية ناعمة الجناح تنطلق بالأقدام" },
133
+ "microlight": { label: "طائرة Microlight", description: "طائرة ترفيهية خفيفة بطيار واحد" },
134
+ "airship": { label: "Airship / منطاد", description: "مركبة كبيرة جامدة أخف من الهواء" },
135
+ }
136
+
137
+ export default map
@@ -0,0 +1,125 @@
1
+ import type { LocaleCatalogMap } from "./types.js"
2
+
3
+ const map: LocaleCatalogMap = {
4
+ // Classic Cars
5
+ "muscle-car": { label: "Muscle Car", description: "Aggressives amerikanisches Muscle Car mit langer Motorhaube, breiter Spur, dualen Chromauspuffen und tiefer kehliger V8-Präsenz" },
6
+ "car-57-chevy": { label: "'57er Chevy", description: "Ikonischer 1957er Chevrolet Bel Air mit Heckflossen, Chromstoßstangen, zweifarbigem Lack und Weißwandreifen" },
7
+ "hot-rod": { description: "Gekürzter und tiefergelegter Hot Rod mit Flammenlackierung, freiliegendem Chrommotor, dicken Hinterreifen und schmalen Vorderreifen" },
8
+ "vintage-roadster": { label: "Vintage-Roadster", description: "Vorkriegs-Cabrio-Roadster mit geschwungenen Kotflügeln, Trittbrettern, Drahtspeichenrädern und langer polierter Motorhaube" },
9
+ "model-t": { description: "Schwarzes Model T des frühen 20. Jahrhunderts mit kantigem aufrechtem Aufbau, Messingscheinwerfern, Speichenrädern und einem mit Kurbel gestarteten Motor" },
10
+ "vw-beetle": { label: "VW Käfer", description: "Pastellfarbener VW Käfer mit gerundeter Haube, luftgekühltem Heckmotor und fröhlichem käferartigem Gesicht" },
11
+ "checker-cab": { description: "Klassisches gelbes New Yorker Checker-Taxi mit kantiger Karosserie, schwarz-weißem Karoband und Dachleuchte" },
12
+ "woody-wagon": { label: "Woody-Kombi", description: "Surfer-Ära-Kombi mit holzverkleideten Seitentüren, Chromstoßstangen und langer Heckklappe" },
13
+ "lowrider": { description: "Candy-lackierter Lowrider mit Hydraulikfahrwerk, Chromspeichenrädern, Weißwandreifen und Airbrush-Wandgemälden" },
14
+ // Everyday Cars
15
+ "sedan": { label: "Limousine", description: "Viertüriger Mittelklasse-Sedan mit stromlinienförmiger Silhouette, Chromakzenten und modernen LED-Scheinwerfern" },
16
+ "suv": { label: "SUV", description: "Großer Sport Utility Vehicle mit hoher Statur, Dachreling, großen Alufelgen und muskulösem kantigem Aufbau" },
17
+ "hatchback": { label: "Schrägheck", description: "Kompaktes Schrägheck mit kurzem Heck, hochklappbarer Heckklappe, wendigen Proportionen und kräftigem Lack" },
18
+ "minivan": { label: "Minivan", description: "Familien-Minivan mit Schiebetüren, hoher geräumiger Kabine, getönten Heckscheiben und großzügiger Heckklappe" },
19
+ "station-wagon": { label: "Kombi", description: "Langdach-Kombi mit erweitertem Laderaum, Heckseitenscheiben und familienorientierter Silhouette" },
20
+ "crossover": { label: "Crossover", description: "Mittelgroßer Crossover-SUV mit erhöhter Bodenfreiheit, autoartigem Styling und aerodynamischen LED-Akzenten" },
21
+ "electric-car": { label: "Elektroauto", description: "Schlankes modernes Elektroauto mit glatter grilllosen Front, bündigen Türgriffen und aerodynamisch klaren Linien" },
22
+ "hatchback-econobox": { label: "Sparmobil", description: "Winziger erschwinglicher zweitüriger Stadtwagen mit kurzer Motorhaube, kleinen Rädern und einfachem kompaktem Styling" },
23
+ // Performance Cars
24
+ "sports-car": { label: "Sportwagen", description: "Tiefliegender zweitüriger Sportwagen mit breiter aggressiver Spur, aerodynamischer Karosserie und glänzendem Lack" },
25
+ "supercar": { label: "Supersportwagen", description: "Exotischer Mittelmotor-Supersportwagen mit Scherentüren, ultraflacher Motorhaube, riesigen Heckansaugern und einem Carbonheckspoiler" },
26
+ "convertible": { label: "Cabrio", description: "Zweisitziges Cabriolet mit heruntergeklapptem Verdeck, langer geformter Motorhaube und Wind, der an niedrig geschnittenen Türen vorbeistreicht" },
27
+ "grand-tourer": { label: "Gran Turismo", description: "Eleganter Grand-Tourer-Coupé mit langer fließender Motorhaube, vier Auspuffrohren und luxuriösen Proportionen" },
28
+ "roadster": { label: "Roadster", description: "Kompakter zweisitziger Roadster mit Panorama-Windschutzscheibe, weggeklapptem Verdeck und klassischer Top-Down-Silhouette" },
29
+ "racing-car": { label: "Rennwagen", description: "Formel-Rennwagen mit Slicks, großem Heckflügel, Halo-Cockpit und aerodynamischen Seitenkästen voller Sponsorenlogos" },
30
+ "rally-car": { label: "Rallye-Auto", description: "Schmutzbespritzter Rallye-Schrägheck mit Stollenreifen, riesigen Schmutzfängern, dachmontierten Lichtern und Renndekors" },
31
+ "drift-car": { label: "Drift-Auto", description: "Aggressives Drift-getuntes Coupé mit breitem Karosserie-Kit, übergroßem Heckflügel, Neon-Unterboden und nachziehendem Reifenrauch" },
32
+ // Motorcycles
33
+ "sportbike": { label: "Supersportler", description: "Aerodynamisches Sportmotorrad mit gekauerter Sitzhaltung, Vollverkleidungen, klebrigen Reifen und hellen Renngrafiken" },
34
+ "cruiser": { label: "Cruiser", description: "Tiefliegendes Cruiser-Motorrad mit langem Tropfentank, zurückgeschwungenem Lenker, Chromauspuffen und dickem Hinterreifen" },
35
+ "chopper": { label: "Chopper", description: "Gestreckter Custom-Chopper mit nach vorn gerichteter Vordergabel, hohen Ape-Hangern, schmalem Vorderrad und überall Chrom" },
36
+ "dirt-bike": { label: "Crossmotorrad", description: "Geländegängiges Crossmotorrad mit Stollenreifen, hoher Federung, Plastikverkleidungen in hellen Farben und hohem Lenker" },
37
+ "scooter": { label: "Roller", description: "Kompakter Schwellenroller mit glattem Karosseriegehäuse, kleinen Rädern, flacher Fußstütze und einer Stauraumbeule unter dem Sitz" },
38
+ "moped": { label: "Mofa", description: "Kleines Pedalstart-Mofa mit einfachem Stahlrahmen, Korb vorne und winzigem Benzinmotor unter dem Sitz" },
39
+ "cafe-racer": { description: "Reduzierter Cafe-Racer mit Clip-on-Lenker, gehöckerter Solo-Sitzbank, freiliegendem Rahmen und minimalistischem Tank" },
40
+ // Bicycles
41
+ "road-bike": { label: "Rennrad", description: "Leichtes Rennrad mit Rennlenker, dünnen Hochdruckreifen und aerodynamischem Carbonrahmen" },
42
+ "mountain-bike": { label: "Mountainbike", description: "Robustes Mountainbike mit Stollenreifen, Federgabel, geradem Lenker und einem schmutzbespritzten Rahmen" },
43
+ "bmx": { label: "BMX-Rad", description: "Stunt-BMX-Rad mit kleinem Rahmen, Pegs an den Achsen, klobigen Reifen und einem Crossbrace-Lenker" },
44
+ "cruiser-bike": { label: "Beach Cruiser", description: "Entspannter Beach-Cruiser mit geschwungenem Rahmen, zurückgebogenem Lenker, breitem Sattel und Ballonreifen" },
45
+ "penny-farthing": { label: "Hochrad", description: "Viktorianisches Hochrad mit riesigem Vorderrad, winzigem Hinterrad und einem hoch oben thronenden Ledersattel" },
46
+ "unicycle": { label: "Einrad", description: "Einrädriges Einrad mit hohem Sattelrohr, einfachen Pedalen an der Nabe und einem minimalistischen Zirkus-Look" },
47
+ "skateboard": { label: "Skateboard", description: "Hölzernes Skateboard-Deck mit Griptape oben, vier Polyurethanrollen und farbenfroher grafischer Kunst auf der Unterseite" },
48
+ "kick-scooter": { label: "Tretroller", description: "Zweirädriger Tretroller mit hohem T-Lenker, schmalem Trittbrett und kleinen harten Rollen" },
49
+ // Trucks
50
+ "pickup-truck": { label: "Pickup", description: "Großer Pickup-Truck mit hoher Doppelkabine, offener Ladefläche, Chromgrill und aggressiven Geländereifen" },
51
+ "semi-truck": { label: "Sattelschlepper", description: "Langstrecken-Sattelschlepper mit Schlafkabine, hohen Chromauspuffstapeln und einem riesigen Sattelauflieger dahinter" },
52
+ "dump-truck": { label: "Kipplaster", description: "Schwerer Kipplaster mit angehobener Kippmulde, riesigen Geländereifen und gelber Baustellendecodierung" },
53
+ "tow-truck": { label: "Abschleppwagen", description: "Abschleppwagen mit hydraulischem Ausleger, Haken und flacher Ladefläche, rotierenden gelben Warnleuchten und auffälliger Beschilderung" },
54
+ "delivery-van": { label: "Lieferwagen", description: "Weißer Lieferwagen mit kantigem Laderaum, Schiebetür, Dachträgern und Firmenbeklebungen" },
55
+ "ice-cream-truck": { label: "Eiswagen", description: "Fröhlicher Eiswagen mit Pastelllack, Verkaufsfenster, an dem Leckereien gezeigt werden, bunten Aufklebern und einem kegelförmigen Dachornament" },
56
+ "food-truck": { label: "Foodtruck", description: "Stilisierter Foodtruck mit aufklappbarem Verkaufsfenster, Kreidetafel-Menü, Lichterketten und einer hellen Custom-Folierung" },
57
+ "box-truck": { label: "Kofferaufbau-Lkw", description: "Mittlerer Kofferaufbau-Lkw mit einfachem rechteckigem Frachtkasten, Rolltor hinten und einer Frontkabine" },
58
+ // Transit
59
+ "city-bus": { label: "Stadtbus", description: "Moderner Gelenk-Stadtbus mit niedrigem Boden, Schiebetüren, Zielanzeige vorne und einer Werbefolierung" },
60
+ "school-bus": { label: "Schulbus", description: "Klassischer gelber amerikanischer Schulbus mit schwarzem Zierwerk, blinkenden roten Stoppschildern, ausgefahrenem Stopparm und schwarzen Schablonennummern" },
61
+ "double-decker": { label: "Doppeldeckerbus", description: "Ikonischer roter Doppeldeckerbus mit gerundetem Dach, offener Treppe innen und Zielanzeige vorne" },
62
+ "coach-bus": { label: "Reisebus", description: "Langstrecken-Reisebus mit getönten Panoramafenstern, Gepäckfächern darunter und stromlinienförmiger Karosserie" },
63
+ "train": { label: "Zug", description: "Moderner Personenzug mit schlanker stromlinienförmiger Nase, Panoramafenstern und einer Reihe glänzender Wagen" },
64
+ "steam-locomotive": { label: "Dampflokomotive", description: "Schwarze Dampflokomotive mit hohem Schornstein, der Dampf ausstößt, einem Kessel, Kurbeltrieb und einem Kohletender dahinter" },
65
+ "bullet-train": { label: "Hochgeschwindigkeitszug", description: "Hochgeschwindigkeits-Bullet-Train mit aerodynamischer spitzer Nase, glatter weiß-blauer Lackierung und schmalen Fenstern" },
66
+ "subway": { label: "U-Bahn-Wagen", description: "Edelstahl-U-Bahn-Wagen mit graffitiresistenten Paneelen, Schiebetüren und Reihen von Leuchtstoffröhren innen" },
67
+ "tram": { label: "Straßenbahn", description: "Klassischer Straßenbahnwagen mit kantiger holzgerahmter Karosserie, Oberleitungspantograph und Schienen darunter" },
68
+ "stagecoach": { label: "Postkutsche", description: "Wild-West-Postkutsche mit hölzerner Karosserie, Blattfederaufhängung, Dachgepäckträger und einem Pferdegespann vorne" },
69
+ "horse-carriage": { label: "Pferdekutsche", description: "Verzierte Pferdekutsche mit polierten Holzpaneelen, großen Speichenrädern und einer samtgepolsterten Kabine" },
70
+ // Aircraft
71
+ "airliner": { label: "Verkehrsflugzeug", description: "Großraum-Verkehrsflugzeug mit zwei Düsentriebwerken unter gepfeilten Flügeln, Reihen ovaler Fenster und einem hohen gepfeilten Heckflügel" },
72
+ "biplane": { label: "Doppeldecker", description: "Vintage-Doppeldecker mit zwei übereinander angeordneten Flügeln, durch Streben und Drahtverspannungen verbunden, einem offenen Cockpit und einem Holzpropeller" },
73
+ "propeller-plane": { label: "Propellerflugzeug", description: "Kleines einmotoriges Propellerflugzeug mit drehendem Bugpropeller, hohen Flügeln, festem Fahrwerk und einem Bubble-Cockpit" },
74
+ "helicopter": { label: "Hubschrauber", description: "Mehrzweck-Hubschrauber mit großem Hauptrotor oben, schmalem Heckausleger, Kufen darunter und einem Bubble-Front-Cockpit" },
75
+ "seaplane": { label: "Wasserflugzeug", description: "Wasserflugzeug mit zwei Schwimmern statt Rädern, hohen Flügeln und einem Propeller, das auf ruhigem Wasser ruht" },
76
+ "hot-air-balloon": { label: "Heißluftballon", description: "Riesiger Heißluftballon mit bunt gestreifter Hülle, einem nach oben flackernden Flammenbrenner und einem Korb darunter" },
77
+ "blimp": { label: "Luftschiff", description: "Wurstförmiges Luftschiff mit schlanker silberner Hülle, kleinen Heckflossen und einer untergehängten Gondel" },
78
+ "glider": { label: "Segelflugzeug", description: "Elegantes Segelflugzeug mit ultralangen schmalen Flügeln, ohne Motor und einem tropfenförmigen Cockpit" },
79
+ "drone": { label: "Drohne", description: "Quadcopter-Kameradrohne mit vier sich drehenden Rotoren an schmalen Armen, einem zentralen Körper und einer kardanisch aufgehängten Kamera darunter" },
80
+ // Watercraft
81
+ "yacht": { label: "Yacht", description: "Schlanke Luxus-Motoryacht mit mehreren Decks, getönten Fenstern, Radarmast und glänzendem weißem Rumpf, der durch blaues Wasser schneidet" },
82
+ "sailboat": { label: "Segelboot", description: "Anmutiges Segelboot mit hohem Mast, straffen weißen Segeln, die den Wind einfangen, und einem schmalen Glasfaserrumpf" },
83
+ "speedboat": { label: "Schnellboot", description: "Schnelles Motorboot mit spitzem Tief-V-Rumpf, niedriger Windschutzscheibe und einem brüllenden Außenbordmotor, der Kielwasser aufwirbelt" },
84
+ "cruise-ship": { label: "Kreuzfahrtschiff", description: "Massives Kreuzfahrtschiff mit mehreren hoch aufragenden Decks, Reihen von Balkonen, hellen Schornsteinen und einem spitzen Bug" },
85
+ "cargo-ship": { label: "Frachtschiff", description: "Riesiges Containerfrachtschiff hoch beladen mit regenbogenfarbenen Containern, einem Brückenturm am Heck" },
86
+ "canoe": { label: "Kanu", description: "Klassisches Holzkanu mit spitzem Bug und Heck, einem zedernverrippten Innenraum und einem einzelnen Paddel innen" },
87
+ "kayak": { label: "Kajak", description: "Schmales Kunststoff-Kajak mit niedrigem Profil, geschlossenem Cockpit-Eingang und einem Doppelpaddel" },
88
+ "rowboat": { label: "Ruderboot", description: "Kleines Holz-Ruderboot mit Flachboden-Planken, Dollen am Schandeck und zwei Holzrudern" },
89
+ "jet-ski": { label: "Jetski", description: "Stehender Personal Watercraft mit aggressiver Verkleidung, Lenker, einem einzelnen Sitz und einer Düsenantriebsdüse" },
90
+ "submarine": { label: "U-Boot", description: "Militär-U-Boot mit langem zylindrischem Rumpf, einem Kommandoturm mit Periskopen und einem zwiebelförmigen Bug, der durch tiefes Wasser taucht" },
91
+ "pirate-ship": { label: "Piratenschiff", description: "Hölzerne Piratengaleone mit hohen Masten, Rahsegeln, einer Galionsfigur am Bug, Kanonen entlang des Rumpfs und einer zerfetzten schwarzen Flagge" },
92
+ // Military
93
+ "tank": { label: "Panzer", description: "Schwerer Kampfpanzer mit langem Kanonenrohr, drehbarem Turm, dicker schräger Panzerung und breiten durchgehenden Ketten" },
94
+ "humvee": { description: "Militärischer Humvee mit breiter Spur, gepanzerter eckiger Karosserie, Geländereifen und einem dachmontierten Geschützturm" },
95
+ "armored-personnel-carrier": { label: "Schützenpanzer", description: "Kettenfahrzeug-Schützenpanzer mit kantigem Rumpf, Heckklappe und einem kleinen Turm oben" },
96
+ "fighter-jet": { label: "Kampfjet", description: "Überschall-Kampfjet mit gepfeilten Deltaflügeln, scharfer spitzer Nase, doppelten Heckflossen und Raketen an Flügelpylonen" },
97
+ "stealth-bomber": { label: "Stealth-Bomber", description: "Nurflügel-Stealth-Bomber mit matt-schwarzer Dreiecksilhouette, ohne Heckflossen und facettierten radarabsorbierenden Oberflächen" },
98
+ "destroyer": { label: "Zerstörer", description: "Schlanker Marine-Zerstörer mit langem grauem Rumpf, Geschütztürmen, Raketenwerfern und einem radarbestückten Aufbau" },
99
+ "aircraft-carrier": { label: "Flugzeugträger", description: "Massiver Flugzeugträger mit flachem Flugdeck, Inselturm mit Radaranlagen und in Reihen geparkten Kampfjets" },
100
+ // Construction
101
+ "bulldozer": { label: "Planierraupe", description: "Gelbe Bau-Planierraupe mit großer Schubschaufel vorne, schweren Ketten und einem hohen Auspuffrohr" },
102
+ "excavator": { label: "Bagger", description: "Hydraulikbagger mit beweglichem Arm, Zähnchenschaufel, drehbarer Kabine und schwerem Kettenfahrwerk" },
103
+ "crane-truck": { label: "Kran-Lkw", description: "Mobiler Kran-Lkw mit massivem ausgefahrenem Teleskopausleger, Stützen und schwerem Gegengewicht" },
104
+ "cement-mixer": { label: "Betonmischer", description: "Betonmischer-Lkw mit großer rotierender Trommel, Rinne hinten und einer kantigen Kabine" },
105
+ "forklift": { label: "Gabelstapler", description: "Lager-Gabelstapler mit zwei vorne erhobenen Stahlgabelzinken, einem Überrollkäfig über dem Fahrer und einem kompakten Heck mit Gegengewicht" },
106
+ "backhoe": { label: "Baggerlader", description: "Baggerlader mit Frontschaufel zum Ausbaggern und einem hinteren beweglichen Arm mit Zähnchen-Grabschaufel" },
107
+ "tractor": { label: "Traktor", description: "Bauerntraktor mit großen Stollenreifen hinten, kleineren Reifen vorne, einem Dachverdeck und einer Anhängerkupplung am Heck" },
108
+ // Sci-Fi
109
+ "spaceship": { label: "Raumschiff", description: "Schlankes interstellares Raumschiff mit geschwungenem Rumpf, glühenden Triebwerksdüsen, Antennenanlagen und einem Kommandobrücken-Fenster" },
110
+ "starfighter": { label: "Sternjäger", description: "Wendiger Einzelpiloten-Sternjäger mit gepfeilten Flügeln, Laserkanonen an den Flügelspitzen, einem Bubble-Cockpit und glühenden Triebwerken" },
111
+ "hovercar": { description: "Futuristisches Hovercar, das ohne Räder über dem Boden schwebt, mit glühenden Untertriebwerken, nahtloser Karosserie und einem geschwungenen Verdeck" },
112
+ "mech": { description: "Riesiger zweibeiniger Mech-Roboter mit gepanzerten Platten, Hydraulikkolben, einem Cockpit im Torso und schweren auf den Armen montierten Waffen" },
113
+ "flying-saucer": { label: "Fliegende Untertasse", description: "Klassische UFO-fliegende Untertasse mit metallisch-scheibenförmiger Karosserie, glühenden Bullaugen-Lichtern entlang des Randes und einem gewölbten Cockpit oben" },
114
+ "space-shuttle": { label: "Space Shuttle", description: "Space-Shuttle-Orbiter mit weißen Deltaflügeln, schwarzem Hitzeschild-Unterboden und riesigen Raketendüsen am Heck" },
115
+ "rocket": { label: "Rakete", description: "Hohe zylindrische Rakete mit spitzem Nasenkonus, Heckflossen, Booster-Stufen und Flammen, die bei Start aus den Triebwerken brüllen" },
116
+ "hoverboard": { description: "Futuristisches Hoverboard, das Zentimeter über dem Boden schwebt, mit glühenden Untertriebwerken und einer schlanken Einzelplankenkarosserie" },
117
+ "ambulance": { label: "Krankenwagen", description: "Medizinisches Notfallfahrzeug" },
118
+ "police-car": { label: "Polizeiauto", description: "Schwarz-weißer Streifenwagen mit Lichtbalken" },
119
+ "hovercraft": { label: "Luftkissenfahrzeug", description: "Luftkissenfahrzeug auf Wasser / Land" },
120
+ "paraglider": { label: "Gleitschirm", description: "Fußstart-Gleitschirm mit Flügelsegel" },
121
+ "microlight": { label: "Ultraleichtflugzeug", description: "Leichtes Einsitzer-Freizeitflugzeug" },
122
+ "airship": { label: "Luftschiff / Zeppelin", description: "Großes starres Leichter-als-Luft-Fahrzeug" },
123
+ }
124
+
125
+ export default map