@pieai/swimmer-ui-kit 1.0.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 (359) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/LICENSE +41 -0
  3. package/README.md +114 -0
  4. package/dist/assets/game/ui/clay/asset-manifest.json +2823 -0
  5. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-blue-large-v1.png +0 -0
  6. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-blue-large-v2.png +0 -0
  7. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-brown-large-v1.png +0 -0
  8. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-brown-large-v2.png +0 -0
  9. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-green-large-v1.png +0 -0
  10. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-green-large-v2.png +0 -0
  11. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-purple-large-v1.png +0 -0
  12. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-purple-large-v2.png +0 -0
  13. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-red-large-v1.png +0 -0
  14. package/dist/assets/game/ui/clay/phase03-clay-kit/buttons/button-red-large-v2.png +0 -0
  15. package/dist/assets/game/ui/clay/phase03-clay-kit/catalog/common-icons-contact-sheet-v1.png +0 -0
  16. package/dist/assets/game/ui/clay/phase03-clay-kit/catalog/component-candidates-contact-sheet-v1.png +0 -0
  17. package/dist/assets/game/ui/clay/phase03-clay-kit/catalog/function-icons-contact-sheet-v1.png +0 -0
  18. package/dist/assets/game/ui/clay/phase03-clay-kit/catalog/phase03-clay-ui-catalog.json +3476 -0
  19. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/alert-v1.png +0 -0
  20. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/bar-v1.png +0 -0
  21. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/best-v1.png +0 -0
  22. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/check-off-v1.png +0 -0
  23. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/check-on-v1.png +0 -0
  24. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/count-v1.png +0 -0
  25. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/direction-v1.png +0 -0
  26. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/gauge-v1.png +0 -0
  27. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/hot-v1.png +0 -0
  28. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/label-2-v1.png +0 -0
  29. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/label-v1.png +0 -0
  30. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/loading-v1.png +0 -0
  31. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/mission-badge-v1.png +0 -0
  32. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/new-v1.png +0 -0
  33. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/page-arrow-next-v1.png +0 -0
  34. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/page-arrow-prev-v1.png +0 -0
  35. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/pagenavigation-v1.png +0 -0
  36. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/radiobtn-off-v1.png +0 -0
  37. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/radiobtn-on-v1.png +0 -0
  38. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/ribbon-2-v1.png +0 -0
  39. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/ribbon-v1.png +0 -0
  40. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/slidebar-dim-v1.png +0 -0
  41. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/stage-v1.png +0 -0
  42. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/switch-off-v1.png +0 -0
  43. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/switch-on-v1.png +0 -0
  44. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/tab-n-v1.png +0 -0
  45. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/tab-s-v1.png +0 -0
  46. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/top-v1.png +0 -0
  47. package/dist/assets/game/ui/clay/phase03-clay-kit/components/common/user-info-v1.png +0 -0
  48. package/dist/assets/game/ui/clay/phase03-clay-kit/components/language/button-close-v1.png +0 -0
  49. package/dist/assets/game/ui/clay/phase03-clay-kit/components/language/check-v1.png +0 -0
  50. package/dist/assets/game/ui/clay/phase03-clay-kit/components/language/language-v1.png +0 -0
  51. package/dist/assets/game/ui/clay/phase03-clay-kit/components/popup/popup-v1.png +0 -0
  52. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/btn-blue-v1.png +0 -0
  53. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/btn-brown-2-v1.png +0 -0
  54. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/btn-brown-v1.png +0 -0
  55. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/btn-facebook-v1.png +0 -0
  56. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/btn-green-v1.png +0 -0
  57. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/button-close-v1.png +0 -0
  58. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/common-popup-title-v1.png +0 -0
  59. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/language-v1.png +0 -0
  60. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/radio-btn-v1.png +0 -0
  61. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/slidebar-v1.png +0 -0
  62. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/switch-2-v1.png +0 -0
  63. package/dist/assets/game/ui/clay/phase03-clay-kit/components/settings/switch-v1.png +0 -0
  64. package/dist/assets/game/ui/clay/phase03-clay-kit/components/stage-lock/stage-lock-badge-v1.png +0 -0
  65. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/checkbox-checked-v1.png +0 -0
  66. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/anvil-v1.png +0 -0
  67. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/arrow-v1.png +0 -0
  68. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/bomb-v1.png +0 -0
  69. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/candle-v1.png +0 -0
  70. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/chicken-v1.png +0 -0
  71. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/crown-v1.png +0 -0
  72. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/energy-v1.png +0 -0
  73. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/envelope-v1.png +0 -0
  74. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/gem-v1.png +0 -0
  75. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/gift-blue-v1.png +0 -0
  76. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/gift-red-v1.png +0 -0
  77. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/gold-v1.png +0 -0
  78. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/hammer-v1.png +0 -0
  79. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/horner-v1.png +0 -0
  80. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/horseshoes-v1.png +0 -0
  81. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/key-v1.png +0 -0
  82. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/laurel-v1.png +0 -0
  83. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/letter-v1.png +0 -0
  84. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/lock-v1.png +0 -0
  85. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/lucky-v1.png +0 -0
  86. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/medal-bronze-v1.png +0 -0
  87. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/medal-gold-v1.png +0 -0
  88. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/medal-silver-v1.png +0 -0
  89. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/mission-v1.png +0 -0
  90. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/pickax-v1.png +0 -0
  91. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/poition-red-v1.png +0 -0
  92. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/poiton-purple-v1.png +0 -0
  93. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/purplegem-v1.png +0 -0
  94. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/sandglass-v1.png +0 -0
  95. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/scroll-v1.png +0 -0
  96. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/setting-v1.png +0 -0
  97. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/shield-a-v1.png +0 -0
  98. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/shield-b-v1.png +0 -0
  99. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/shield-c-v1.png +0 -0
  100. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/shield-d-v1.png +0 -0
  101. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/shop-v1.png +0 -0
  102. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/skull-v1.png +0 -0
  103. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/soulgem-v1.png +0 -0
  104. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/sword-a-v1.png +0 -0
  105. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/sword-b-v1.png +0 -0
  106. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/talaria-v1.png +0 -0
  107. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/target-v1.png +0 -0
  108. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/timer-v1.png +0 -0
  109. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/treasure-v1.png +0 -0
  110. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/common/trophy-v1.png +0 -0
  111. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/account-v1.png +0 -0
  112. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/add-friend-v1.png +0 -0
  113. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/add-v1.png +0 -0
  114. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/align-v1.png +0 -0
  115. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/alram-v1.png +0 -0
  116. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/appstore-v1.png +0 -0
  117. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/arrow-down-v1.png +0 -0
  118. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/arrow-next-v1.png +0 -0
  119. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/arrow-prev-v1.png +0 -0
  120. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/arrow-up-v1.png +0 -0
  121. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/arrow-v1.png +0 -0
  122. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/asterisk-v1.png +0 -0
  123. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/attachment-v1.png +0 -0
  124. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/ax-v1.png +0 -0
  125. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/back-v1.png +0 -0
  126. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bad-v1.png +0 -0
  127. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/badge-v1.png +0 -0
  128. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bank-v1.png +0 -0
  129. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/basket-v1.png +0 -0
  130. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/battle-v1.png +0 -0
  131. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bin-v1.png +0 -0
  132. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/binoculars-v1.png +0 -0
  133. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bitcoin-v1.png +0 -0
  134. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/block-v1.png +0 -0
  135. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bluetooth-v1.png +0 -0
  136. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bomb-v1.png +0 -0
  137. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/book-v1.png +0 -0
  138. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bookmark-add-v1.png +0 -0
  139. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bookmark-v1.png +0 -0
  140. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bottom-v1.png +0 -0
  141. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/brain-v1.png +0 -0
  142. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bug-v1.png +0 -0
  143. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/bulb-v1.png +0 -0
  144. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/calendar-v1.png +0 -0
  145. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/call-reject-v1.png +0 -0
  146. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/call-v1.png +0 -0
  147. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/camera-v1.png +0 -0
  148. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/cancel-v1.png +0 -0
  149. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/card-v1.png +0 -0
  150. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/cart-v1.png +0 -0
  151. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/category-v1.png +0 -0
  152. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/chat-v1.png +0 -0
  153. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/check-v1.png +0 -0
  154. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/cloud-v1.png +0 -0
  155. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/cny-v1.png +0 -0
  156. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/coffee-v1.png +0 -0
  157. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/compass-v1.png +0 -0
  158. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/confirm-v1.png +0 -0
  159. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/contact-v1.png +0 -0
  160. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/control-next-v1.png +0 -0
  161. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/control-pause-v1.png +0 -0
  162. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/control-play-v1.png +0 -0
  163. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/control-prev-v1.png +0 -0
  164. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/control-stop-v1.png +0 -0
  165. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/control-v1.png +0 -0
  166. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/copy-v1.png +0 -0
  167. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/coupon-v1.png +0 -0
  168. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/crop-v1.png +0 -0
  169. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/crown-v1.png +0 -0
  170. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/defense-v1.png +0 -0
  171. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/delete-v1.png +0 -0
  172. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/dislike-v1.png +0 -0
  173. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/document-v1.png +0 -0
  174. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/dollar-v1.png +0 -0
  175. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/down-v1.png +0 -0
  176. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/download-v1.png +0 -0
  177. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/dynamite-v1.png +0 -0
  178. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/earth-v1.png +0 -0
  179. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/eat-v1.png +0 -0
  180. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/emoji-good-v1.png +0 -0
  181. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/emoji-soso-v1.png +0 -0
  182. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/energy-v1.png +0 -0
  183. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/exit-v1.png +0 -0
  184. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/expand-v1.png +0 -0
  185. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/export-v1.png +0 -0
  186. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/facebook-v1.png +0 -0
  187. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/feather-v1.png +0 -0
  188. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/filter-v1.png +0 -0
  189. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/fingerprint-v1.png +0 -0
  190. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/fire-v1.png +0 -0
  191. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/firm-v1.png +0 -0
  192. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/fix-v1.png +0 -0
  193. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/flag-v1.png +0 -0
  194. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/flask-01-v1.png +0 -0
  195. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/flask-02-v1.png +0 -0
  196. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/flask-03-v1.png +0 -0
  197. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/folder-open-v1.png +0 -0
  198. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/folder-v1.png +0 -0
  199. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/game-v1.png +0 -0
  200. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/gem-v1.png +0 -0
  201. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/gender-fale-v1.png +0 -0
  202. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/gender-female-v1.png +0 -0
  203. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/gift-v1.png +0 -0
  204. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/globe-v1.png +0 -0
  205. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/gmail-v1.png +0 -0
  206. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/gold-v1.png +0 -0
  207. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/googleplay-v1.png +0 -0
  208. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/graduation-v1.png +0 -0
  209. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/graph-v1.png +0 -0
  210. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/hammer-v1.png +0 -0
  211. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/hand-v1.png +0 -0
  212. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/hashtag-v1.png +0 -0
  213. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/headset-v1.png +0 -0
  214. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/heart-empty-v1.png +0 -0
  215. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/heart-v1.png +0 -0
  216. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/helmet-v1.png +0 -0
  217. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/hide-v1.png +0 -0
  218. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/home-v1.png +0 -0
  219. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/key-v1.png +0 -0
  220. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/knowledge-v1.png +0 -0
  221. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/left-v1.png +0 -0
  222. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/like-v1.png +0 -0
  223. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/link-v1.png +0 -0
  224. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/list-v1.png +0 -0
  225. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/location-v1.png +0 -0
  226. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/lock-v1.png +0 -0
  227. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/magnetic-v1.png +0 -0
  228. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mail-read-v1.png +0 -0
  229. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mail-unread-v1.png +0 -0
  230. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/map-v1.png +0 -0
  231. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mark-caution-1-v1.png +0 -0
  232. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mark-caution-2-v1.png +0 -0
  233. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mark-info-1-v1.png +0 -0
  234. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mark-info-2-v1.png +0 -0
  235. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mark-question-1-v1.png +0 -0
  236. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mark-question-2-v1.png +0 -0
  237. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/medal-v1.png +0 -0
  238. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/media-v1.png +0 -0
  239. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/megaphone-v1.png +0 -0
  240. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/menu-v1.png +0 -0
  241. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/message-v1.png +0 -0
  242. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/minus-v1.png +0 -0
  243. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/mobile-v1.png +0 -0
  244. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/money-v1.png +0 -0
  245. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/more-v1.png +0 -0
  246. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/music-1-v1.png +0 -0
  247. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/music-2-v1.png +0 -0
  248. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/newpaper-v1.png +0 -0
  249. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/next-v1.png +0 -0
  250. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/notification-off-v1.png +0 -0
  251. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/notification-v1.png +0 -0
  252. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/paper-v1.png +0 -0
  253. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/pc-v1.png +0 -0
  254. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/pen-v1.png +0 -0
  255. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/pencil-v1.png +0 -0
  256. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/percent-v1.png +0 -0
  257. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/photo-v1.png +0 -0
  258. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/pick-v1.png +0 -0
  259. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/piechart-v1.png +0 -0
  260. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/pinterest-v1.png +0 -0
  261. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/pinwheel-v1.png +0 -0
  262. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/planet-v1.png +0 -0
  263. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/player-v1.png +0 -0
  264. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/plus-v1.png +0 -0
  265. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/preferense-v1.png +0 -0
  266. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/prev-v1.png +0 -0
  267. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/printer-v1.png +0 -0
  268. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/quit-v1.png +0 -0
  269. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/random-v1.png +0 -0
  270. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/ranking-v1.png +0 -0
  271. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/record-off-v1.png +0 -0
  272. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/record-v1.png +0 -0
  273. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/refresh-v1.png +0 -0
  274. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/reload-v1.png +0 -0
  275. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/remove-v1.png +0 -0
  276. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/reset-v1.png +0 -0
  277. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/right-v1.png +0 -0
  278. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/ring-v1.png +0 -0
  279. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/safe-v1.png +0 -0
  280. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/sandglass-v1.png +0 -0
  281. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/scan-v1.png +0 -0
  282. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/screwdriver-v1.png +0 -0
  283. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/search-v1.png +0 -0
  284. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/send-1-v1.png +0 -0
  285. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/send-2-v1.png +0 -0
  286. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/service-v1.png +0 -0
  287. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/setting-1-v1.png +0 -0
  288. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/setting-2-v1.png +0 -0
  289. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/share-v1.png +0 -0
  290. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/shop-v1.png +0 -0
  291. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/shopping-v1.png +0 -0
  292. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/show-v1.png +0 -0
  293. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/sign-v1.png +0 -0
  294. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/siren-v1.png +0 -0
  295. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/skull-v1.png +0 -0
  296. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/skype-v1.png +0 -0
  297. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/sort-v1.png +0 -0
  298. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/sparkle-v1.png +0 -0
  299. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/speedmeter-v1.png +0 -0
  300. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/star-circle-v1.png +0 -0
  301. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/star-v1.png +0 -0
  302. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/stopwatch-v1.png +0 -0
  303. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/support-v1.png +0 -0
  304. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/sword-v1.png +0 -0
  305. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/tag-v1.png +0 -0
  306. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/target-v1.png +0 -0
  307. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/tent-v1.png +0 -0
  308. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/text-v1.png +0 -0
  309. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/thumbnails-v1.png +0 -0
  310. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/thunder-v1.png +0 -0
  311. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/time-v1.png +0 -0
  312. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/toolbox-v1.png +0 -0
  313. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/top-v1.png +0 -0
  314. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/treasure-v1.png +0 -0
  315. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/trophy-v1.png +0 -0
  316. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/twitter-v1.png +0 -0
  317. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/ufo-v1.png +0 -0
  318. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/unlock-v1.png +0 -0
  319. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/up-v1.png +0 -0
  320. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/upload-v1.png +0 -0
  321. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/user-v1.png +0 -0
  322. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/video-v1.png +0 -0
  323. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/volume-mute-v1.png +0 -0
  324. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/volume-v1.png +0 -0
  325. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/wallet-v1.png +0 -0
  326. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/warning-v1.png +0 -0
  327. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/water-v1.png +0 -0
  328. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/wifi-v1.png +0 -0
  329. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/youtube-v1.png +0 -0
  330. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/zoom-in-v1.png +0 -0
  331. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/function/zoom-out-v1.png +0 -0
  332. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/icon-add-friend-v1.png +0 -0
  333. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/icon-card-v1.png +0 -0
  334. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/icon-check-v1.png +0 -0
  335. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/icon-game-v1.png +0 -0
  336. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/icon-refresh-v1.png +0 -0
  337. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/icon-target-v1.png +0 -0
  338. package/dist/assets/game/ui/clay/phase03-clay-kit/icons/icon-user-v1.png +0 -0
  339. package/dist/assets/game/ui/clay/phase03-clay-kit/inputs/input-entered-v1.png +0 -0
  340. package/dist/assets/game/ui/clay/phase03-clay-kit/inputs/input-entered-v2.png +0 -0
  341. package/dist/assets/game/ui/clay/phase03-clay-kit/inputs/input-error-v1.png +0 -0
  342. package/dist/assets/game/ui/clay/phase03-clay-kit/inputs/input-error-v2.png +0 -0
  343. package/dist/assets/game/ui/clay/phase03-clay-kit/inputs/input-required-v1.png +0 -0
  344. package/dist/assets/game/ui/clay/phase03-clay-kit/inputs/input-required-v2.png +0 -0
  345. package/dist/assets/game/ui/clay/phase03-clay-kit/inputs/input-typing-v1.png +0 -0
  346. package/dist/assets/game/ui/clay/phase03-clay-kit/inputs/input-typing-v2.png +0 -0
  347. package/dist/assets/game/ui/clay/phase03-clay-kit/panels/popup-frame-v1.png +0 -0
  348. package/dist/assets/game/ui/clay/phase03-clay-kit/panels/settings-frame-v1.png +0 -0
  349. package/dist/assets/game/ui/clay/phase03-clay-kit/screens/00_title-v1.png +0 -0
  350. package/dist/assets/game/ui/clay/phase03-clay-kit/screens/01_login-v1.png +0 -0
  351. package/dist/assets/game/ui/clay/phase03-clay-kit/screens/03_stage-v1.png +0 -0
  352. package/dist/assets/game/ui/clay/phase03-clay-kit/screens/04_stageready-v1.png +0 -0
  353. package/dist/assets/game/ui/clay/phase03-clay-kit/screens/05_complete-v1.png +0 -0
  354. package/dist/assets/game/ui/clay/phase03-clay-kit/screens/06_lose-v1.png +0 -0
  355. package/dist/index.d.ts +1781 -0
  356. package/dist/index.js +3058 -0
  357. package/dist/styles.css +1 -0
  358. package/dist/tailwind.css +36 -0
  359. package/package.json +93 -0
package/dist/index.js ADDED
@@ -0,0 +1,3058 @@
1
+ import { jsx as e, jsxs as o, Fragment as Ge } from "react/jsx-runtime";
2
+ import { useId as Y, useState as M, useEffect as te, forwardRef as Oe, useRef as aa, createContext as ia, useContext as ta } from "react";
3
+ let W = null, we = !1;
4
+ function Ne(a) {
5
+ return typeof a != "number" || !Number.isFinite(a) ? 1 : Math.min(1, Math.max(0, a));
6
+ }
7
+ function na() {
8
+ we || typeof document > "u" || (document.addEventListener("visibilitychange", () => {
9
+ document.visibilityState === "hidden" && W?.state === "running" && W.suspend();
10
+ }), we = !0);
11
+ }
12
+ function la() {
13
+ return typeof window > "u" || typeof window.AudioContext > "u" ? null : (na(), W ??= new window.AudioContext(), W);
14
+ }
15
+ function oa(a) {
16
+ const t = /* @__PURE__ */ new WeakMap();
17
+ return {
18
+ createGain: () => {
19
+ const i = a.createGain(), l = {
20
+ connect: (n) => {
21
+ n instanceof AudioNode && i.connect(n);
22
+ },
23
+ gain: i.gain
24
+ };
25
+ return t.set(l, i), l;
26
+ },
27
+ createOscillator: () => {
28
+ const i = a.createOscillator();
29
+ return {
30
+ connect: (l) => {
31
+ const n = t.get(l);
32
+ n && i.connect(n);
33
+ },
34
+ frequency: i.frequency,
35
+ start: (l) => i.start(l),
36
+ stop: (l) => i.stop(l),
37
+ get type() {
38
+ return i.type;
39
+ },
40
+ set type(l) {
41
+ i.type = l;
42
+ }
43
+ };
44
+ },
45
+ currentTime: a.currentTime,
46
+ destination: a.destination,
47
+ resume: () => a.resume(),
48
+ state: a.state,
49
+ suspend: () => a.suspend()
50
+ };
51
+ }
52
+ function sa(a, t = {}) {
53
+ if (t.enabled === !1) return !1;
54
+ const i = 0.06 * Ne(t.masterVolume) * Ne(t.sfxVolume);
55
+ if (i <= 0) return !1;
56
+ a.state === "suspended" && a.resume();
57
+ const l = a.currentTime, n = a.createOscillator(), s = a.createGain();
58
+ return n.type = "triangle", n.frequency.setValueAtTime(420, l), n.frequency.exponentialRampToValueAtTime(620, l + 0.045), s.gain.setValueAtTime(1e-4, l), s.gain.exponentialRampToValueAtTime(i, l + 8e-3), s.gain.exponentialRampToValueAtTime(1e-4, l + 0.055), n.connect(s), s.connect(a.destination), n.start(l), n.stop(l + 0.055), !0;
59
+ }
60
+ function ra(a = {}) {
61
+ const t = la();
62
+ return t ? sa(oa(t), a) : !1;
63
+ }
64
+ function C({
65
+ children: a,
66
+ className: t,
67
+ onClick: i,
68
+ sound: l = !1,
69
+ static: n = !1,
70
+ type: s = "button",
71
+ variant: r = "secondary",
72
+ ...d
73
+ }) {
74
+ const u = ["game-ui-button", `game-ui-button--${r}`, n && "game-ui-button--static", t].filter(Boolean).join(" ");
75
+ return /* @__PURE__ */ e("button", { className: u, onClick: (b) => {
76
+ l && ra(l), i?.(b);
77
+ }, type: s, ...d, children: a });
78
+ }
79
+ function ca({ children: a, className: t, title: i }) {
80
+ const l = Y(), n = ["game-ui-dialog", t].filter(Boolean).join(" ");
81
+ return /* @__PURE__ */ o("section", { "aria-labelledby": l, "aria-modal": "true", className: n, role: "dialog", children: [
82
+ /* @__PURE__ */ e("h2", { id: l, children: i }),
83
+ /* @__PURE__ */ e("div", { className: "game-ui-dialog-body", children: a })
84
+ ] });
85
+ }
86
+ function da({ entries: a, label: t }) {
87
+ return /* @__PURE__ */ e("section", { "aria-label": t, className: "game-ui-history", children: a.map((i) => /* @__PURE__ */ o("article", { className: "game-ui-history-entry", "data-entry-kind": i.kind, children: [
88
+ /* @__PURE__ */ o("div", { className: "game-ui-history-entry-header", children: [
89
+ /* @__PURE__ */ e("strong", { children: i.speaker }),
90
+ /* @__PURE__ */ e("span", { children: i.meta })
91
+ ] }),
92
+ /* @__PURE__ */ e("p", { children: i.text })
93
+ ] }, i.id)) });
94
+ }
95
+ function K({ children: a, className: t, label: i, ...l }) {
96
+ const n = ["game-ui-hud-actions", t].filter(Boolean).join(" ");
97
+ return /* @__PURE__ */ e("nav", { "aria-label": i, className: n, "data-safe-area": "hud-actions", ...l, children: a });
98
+ }
99
+ function B({ children: a, className: t, title: i, tone: l = "default", ...n }) {
100
+ const s = ["game-ui-panel", t].filter(Boolean).join(" ");
101
+ return /* @__PURE__ */ o("section", { ...n, className: s, "data-panel-tone": l, children: [
102
+ i ? /* @__PURE__ */ e("h3", { children: i }) : null,
103
+ a
104
+ ] });
105
+ }
106
+ function O({ children: a, className: t, label: i, type: l = "button", ...n }) {
107
+ const s = ["game-ui-icon-button", t].filter(Boolean).join(" ");
108
+ return /* @__PURE__ */ e("button", { "aria-label": i, className: s, type: l, ...n, children: a });
109
+ }
110
+ function ma({ children: a, label: t }) {
111
+ return /* @__PURE__ */ o("span", { className: "game-ui-tooltip", children: [
112
+ a,
113
+ /* @__PURE__ */ e("span", { role: "tooltip", children: t })
114
+ ] });
115
+ }
116
+ function ua({ activeId: a, onSelect: t, tabs: i }) {
117
+ return /* @__PURE__ */ e("div", { className: "game-ui-tabs", onKeyDown: (n) => {
118
+ if (!t || i.length === 0) return;
119
+ const s = Math.max(0, i.findIndex((c) => c.id === a));
120
+ let r;
121
+ switch (n.key) {
122
+ case "ArrowLeft":
123
+ r = (s - 1 + i.length) % i.length;
124
+ break;
125
+ case "ArrowRight":
126
+ r = (s + 1) % i.length;
127
+ break;
128
+ case "Home":
129
+ r = 0;
130
+ break;
131
+ case "End":
132
+ r = i.length - 1;
133
+ break;
134
+ default:
135
+ return;
136
+ }
137
+ n.preventDefault();
138
+ const d = i[r];
139
+ if (!d) return;
140
+ d.id !== a && t(d.id), n.currentTarget.querySelectorAll('[role="tab"]')[r]?.focus();
141
+ }, role: "tablist", children: i.map((n) => /* @__PURE__ */ e(
142
+ "button",
143
+ {
144
+ "aria-selected": n.id === a,
145
+ className: "game-ui-tab",
146
+ onClick: t ? () => t(n.id) : void 0,
147
+ role: "tab",
148
+ tabIndex: n.id === a ? 0 : -1,
149
+ type: "button",
150
+ children: n.label
151
+ },
152
+ n.id
153
+ )) });
154
+ }
155
+ function Pe({ activeId: a, label: t, onSelect: i, options: l }) {
156
+ return /* @__PURE__ */ e("div", { "aria-label": t, className: "game-ui-segmented", role: "group", children: l.map((n) => /* @__PURE__ */ e(
157
+ "button",
158
+ {
159
+ "aria-pressed": n.id === a,
160
+ className: "game-ui-segmented-option",
161
+ onClick: i ? () => i(n.id) : void 0,
162
+ type: "button",
163
+ children: n.label
164
+ },
165
+ n.id
166
+ )) });
167
+ }
168
+ function ga({ label: a, max: t, min: i, onChange: l, value: n }) {
169
+ return /* @__PURE__ */ o("label", { className: "game-ui-slider", children: [
170
+ /* @__PURE__ */ e("span", { children: a }),
171
+ /* @__PURE__ */ e(
172
+ "input",
173
+ {
174
+ "aria-label": a,
175
+ max: t,
176
+ min: i,
177
+ onChange: l ? (s) => l(Number(s.currentTarget.value)) : void 0,
178
+ readOnly: !l,
179
+ type: "range",
180
+ value: n
181
+ }
182
+ )
183
+ ] });
184
+ }
185
+ function pa({ checked: a, disabled: t, label: i, onClick: l }) {
186
+ return /* @__PURE__ */ o("button", { "aria-checked": a, className: "game-ui-toggle", disabled: t, onClick: l, role: "switch", type: "button", children: [
187
+ /* @__PURE__ */ e("span", { children: i }),
188
+ /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-toggle-track" })
189
+ ] });
190
+ }
191
+ function ha({ items: a, label: t }) {
192
+ return /* @__PURE__ */ e("div", { "aria-label": t, className: "game-ui-radial-menu", role: "menu", children: a.map((i) => /* @__PURE__ */ e("button", { className: "game-ui-radial-item", role: "menuitem", type: "button", children: i.label }, i.id)) });
193
+ }
194
+ function ke({ children: a, tone: t = "info" }) {
195
+ return /* @__PURE__ */ e("div", { className: "game-ui-toast", "data-toast-tone": t, role: t === "danger" ? "alert" : "status", children: a });
196
+ }
197
+ function Ti({ actionLabel: a, children: t, title: i }) {
198
+ return /* @__PURE__ */ o("section", { "aria-label": i, className: "game-ui-prompt", children: [
199
+ /* @__PURE__ */ o("div", { children: [
200
+ /* @__PURE__ */ e("h3", { children: i }),
201
+ /* @__PURE__ */ e("p", { children: t })
202
+ ] }),
203
+ a ? /* @__PURE__ */ e(C, { variant: "primary", children: a }) : null
204
+ ] });
205
+ }
206
+ const N = {
207
+ ink: "#3b2d23",
208
+ inkMuted: "#7b6652",
209
+ parchment: "#fff8ec",
210
+ parchmentDeep: "#f4e2c6",
211
+ cream: "#f3e8d8",
212
+ wood: "#6c4f38",
213
+ woodDeep: "#3a2518",
214
+ honey: "#f2b35c",
215
+ orange: "#e8743b",
216
+ teal: "#1d9a8b",
217
+ green: "#4f9d6b",
218
+ mint: "#7ee0b6",
219
+ berry: "#9b6dd6",
220
+ red: "#d85a45",
221
+ sky: "#5ca6d8",
222
+ shadow: "rgba(76, 52, 28, 0.24)",
223
+ glass: "rgba(255, 248, 236, 0.82)",
224
+ nightGlass: "rgba(31, 24, 18, 0.76)"
225
+ }, ne = {
226
+ background: "var(--game-ui-bg)",
227
+ playfieldScrim: "var(--game-ui-playfield-scrim)",
228
+ surface: "var(--game-ui-surface)",
229
+ surfaceRaised: "var(--game-ui-surface-raised)",
230
+ panel: "var(--game-ui-panel)",
231
+ panelStrong: "var(--game-ui-panel-strong)",
232
+ text: "var(--game-ui-text)",
233
+ textMuted: "var(--game-ui-text-muted)",
234
+ accent: "var(--game-ui-accent)",
235
+ accentContrast: "var(--game-ui-accent-contrast)",
236
+ secondary: "var(--game-ui-secondary)",
237
+ success: "var(--game-ui-success)",
238
+ danger: "var(--game-ui-danger)",
239
+ warning: "var(--game-ui-warning)",
240
+ focusRing: "var(--game-ui-focus-ring)",
241
+ borderSubtle: "var(--game-ui-border-subtle)",
242
+ borderStrong: "var(--game-ui-border-strong)",
243
+ disabled: "var(--game-ui-disabled)"
244
+ }, le = {
245
+ familyDisplay: "var(--game-ui-font-display)",
246
+ familyBody: "var(--game-ui-font-body)",
247
+ xs: "var(--game-ui-font-xs)",
248
+ sm: "var(--game-ui-font-sm)",
249
+ md: "var(--game-ui-font-md)",
250
+ lg: "var(--game-ui-font-lg)",
251
+ xl: "var(--game-ui-font-xl)",
252
+ xxl: "var(--game-ui-font-xxl)",
253
+ lineTight: "var(--game-ui-line-tight)",
254
+ lineBody: "var(--game-ui-line-body)",
255
+ weightBody: "var(--game-ui-weight-body)",
256
+ weightStrong: "var(--game-ui-weight-strong)",
257
+ weightTitle: "var(--game-ui-weight-title)"
258
+ }, oe = {
259
+ px2: "var(--game-ui-space-2)",
260
+ px4: "var(--game-ui-space-4)",
261
+ px6: "var(--game-ui-space-6)",
262
+ px8: "var(--game-ui-space-8)",
263
+ px10: "var(--game-ui-space-10)",
264
+ px12: "var(--game-ui-space-12)",
265
+ px16: "var(--game-ui-space-16)",
266
+ px20: "var(--game-ui-space-20)",
267
+ px24: "var(--game-ui-space-24)",
268
+ px32: "var(--game-ui-space-32)",
269
+ safeTop: "var(--game-ui-safe-top)",
270
+ safeRight: "var(--game-ui-safe-right)",
271
+ safeBottom: "var(--game-ui-safe-bottom)",
272
+ safeLeft: "var(--game-ui-safe-left)"
273
+ }, se = {
274
+ bead: "var(--game-ui-radius-bead)",
275
+ control: "var(--game-ui-radius-control)",
276
+ card: "var(--game-ui-radius-card)",
277
+ panel: "var(--game-ui-radius-panel)",
278
+ modal: "var(--game-ui-radius-modal)"
279
+ }, re = {
280
+ button: "var(--game-ui-shadow-button)",
281
+ panel: "var(--game-ui-shadow-panel)",
282
+ modal: "var(--game-ui-shadow-modal)",
283
+ inset: "var(--game-ui-shadow-inset)",
284
+ stroke: "var(--game-ui-stroke)"
285
+ }, ce = {
286
+ fast: "var(--game-ui-motion-fast)",
287
+ base: "var(--game-ui-motion-base)",
288
+ slow: "var(--game-ui-motion-slow)",
289
+ easingPop: "var(--game-ui-ease-pop)",
290
+ easingSoft: "var(--game-ui-ease-soft)",
291
+ reducedMotion: "var(--game-ui-reduced-motion-policy)"
292
+ }, de = {
293
+ playfield: "var(--game-ui-z-playfield)",
294
+ hud: "var(--game-ui-z-hud)",
295
+ sidebar: "var(--game-ui-z-sidebar)",
296
+ overlay: "var(--game-ui-z-overlay)",
297
+ modal: "var(--game-ui-z-modal)",
298
+ toast: "var(--game-ui-z-toast)"
299
+ }, me = {
300
+ touchMinimumPx: 44,
301
+ touchPrimaryPx: 52,
302
+ touchIconPx: 48,
303
+ touchRowPx: 46,
304
+ adjacentSpacingPx: 8,
305
+ mobileLandscapeMinHeightPx: 390,
306
+ desktopProofWidthPx: 1440,
307
+ desktopProofHeightPx: 900,
308
+ mobileLandscapeProofWidthPx: 844,
309
+ mobileLandscapeProofHeightPx: 390
310
+ }, ue = {
311
+ iconSm: "var(--game-ui-asset-icon-sm)",
312
+ iconMd: "var(--game-ui-asset-icon-md)",
313
+ iconLg: "var(--game-ui-asset-icon-lg)",
314
+ iconXl: "var(--game-ui-asset-icon-xl)",
315
+ buttonSkinMinWidth: "var(--game-ui-asset-button-min-width)",
316
+ cardFanWidth: "var(--game-ui-asset-card-fan-width)",
317
+ stageTileMinHeight: "var(--game-ui-stage-tile-min-height)",
318
+ terrainSwatchSize: "var(--game-ui-terrain-swatch-size)",
319
+ terrainToolHitSize: "var(--game-ui-terrain-tool-hit-size)",
320
+ buildRailCardSize: "var(--game-ui-build-rail-card-size)",
321
+ brushNumberWidth: "var(--game-ui-brush-number-width)"
322
+ }, Ci = {
323
+ colors: N,
324
+ semantic: ne,
325
+ typography: le,
326
+ spacing: oe,
327
+ radius: se,
328
+ elevation: re,
329
+ motion: ce,
330
+ layers: de,
331
+ targets: me,
332
+ assetSizing: ue
333
+ }, ba = "/assets/game/ui/clay/phase03-clay-kit", m = (a) => `${ba}/${a}`, ge = {
334
+ ai: { line: m("icons/function/brain-v1.png") },
335
+ alert: { game: m("components/common/alert-v1.png"), line: m("icons/function/warning-v1.png") },
336
+ card: { line: m("icons/function/card-v1.png") },
337
+ chat: { line: m("icons/function/chat-v1.png") },
338
+ check: { line: m("icons/function/check-v1.png") },
339
+ close: { game: m("components/language/button-close-v1.png"), line: m("icons/function/cancel-v1.png") },
340
+ coin: { game: m("icons/common/gold-v1.png"), line: m("icons/function/gold-v1.png") },
341
+ compass: { line: m("icons/function/compass-v1.png") },
342
+ copy: { line: m("icons/function/copy-v1.png") },
343
+ crown: { game: m("icons/common/crown-v1.png"), line: m("icons/function/crown-v1.png") },
344
+ energy: { game: m("icons/common/energy-v1.png"), line: m("icons/function/energy-v1.png") },
345
+ gem: { game: m("icons/common/gem-v1.png"), line: m("icons/function/gem-v1.png") },
346
+ gift: { game: m("icons/common/gift-red-v1.png"), line: m("icons/function/gift-v1.png") },
347
+ globe: { line: m("icons/function/globe-v1.png") },
348
+ history: { line: m("icons/function/list-v1.png") },
349
+ home: { line: m("icons/function/home-v1.png") },
350
+ hourglass: { game: m("icons/common/sandglass-v1.png"), line: m("icons/function/sandglass-v1.png") },
351
+ laurel: { game: m("icons/common/laurel-v1.png") },
352
+ lock: { game: m("icons/common/lock-v1.png"), line: m("icons/function/lock-v1.png") },
353
+ lucky: { game: m("icons/common/lucky-v1.png") },
354
+ mail: { game: m("icons/common/envelope-v1.png"), line: m("icons/function/mail-unread-v1.png") },
355
+ medal: { game: m("icons/common/medal-gold-v1.png"), line: m("icons/function/medal-v1.png") },
356
+ mission: { game: m("icons/common/mission-v1.png") },
357
+ mobile: { line: m("icons/function/mobile-v1.png") },
358
+ // Portal/Tavern entry: the game family has no compass, so the on-brand
359
+ // default is the sculpted key ("enter a code / unlock a table"). The flat
360
+ // compass stays available as the line alternate.
361
+ portal: { game: m("icons/common/key-v1.png"), line: m("icons/function/compass-v1.png") },
362
+ scroll: { game: m("icons/common/scroll-v1.png"), line: m("icons/function/list-v1.png") },
363
+ settings: { game: m("icons/common/setting-v1.png"), line: m("icons/function/setting-1-v1.png") },
364
+ shirt: { line: m("icons/function/user-v1.png") },
365
+ shop: { game: m("icons/common/shop-v1.png"), line: m("icons/function/shop-v1.png") },
366
+ smile: { line: m("icons/function/emoji-good-v1.png") },
367
+ timer: { game: m("icons/common/timer-v1.png"), line: m("icons/function/stopwatch-v1.png") },
368
+ trophy: { game: m("icons/common/trophy-v1.png"), line: m("icons/function/trophy-v1.png") },
369
+ undo: { line: m("icons/function/back-v1.png") },
370
+ redo: { line: m("icons/function/refresh-v1.png") },
371
+ vote: { game: m("icons/common/target-v1.png"), line: m("icons/function/target-v1.png") }
372
+ }, pe = Object.keys(ge);
373
+ function he(a, t) {
374
+ const i = ge[a];
375
+ return t === "line" ? i.line ?? i.game ?? "" : i.game ?? i.line ?? "";
376
+ }
377
+ function _e(a) {
378
+ const t = ge[a], i = [];
379
+ return t.game && i.push("game"), t.line && i.push("line"), i;
380
+ }
381
+ const ze = {
382
+ anvil: m("icons/common/anvil-v1.png"),
383
+ arrow: m("icons/common/arrow-v1.png"),
384
+ bomb: m("icons/common/bomb-v1.png"),
385
+ candle: m("icons/common/candle-v1.png"),
386
+ chicken: m("icons/common/chicken-v1.png"),
387
+ giftBlue: m("icons/common/gift-blue-v1.png"),
388
+ hammer: m("icons/common/hammer-v1.png"),
389
+ horn: m("icons/common/horner-v1.png"),
390
+ horseshoe: m("icons/common/horseshoes-v1.png"),
391
+ letter: m("icons/common/letter-v1.png"),
392
+ medalBronze: m("icons/common/medal-bronze-v1.png"),
393
+ medalSilver: m("icons/common/medal-silver-v1.png"),
394
+ pickaxe: m("icons/common/pickax-v1.png"),
395
+ potionPurple: m("icons/common/poiton-purple-v1.png"),
396
+ potionRed: m("icons/common/poition-red-v1.png"),
397
+ purpleGem: m("icons/common/purplegem-v1.png"),
398
+ shieldA: m("icons/common/shield-a-v1.png"),
399
+ shieldB: m("icons/common/shield-b-v1.png"),
400
+ shieldC: m("icons/common/shield-c-v1.png"),
401
+ shieldD: m("icons/common/shield-d-v1.png"),
402
+ skull: m("icons/common/skull-v1.png"),
403
+ soulGem: m("icons/common/soulgem-v1.png"),
404
+ swordA: m("icons/common/sword-a-v1.png"),
405
+ swordB: m("icons/common/sword-b-v1.png"),
406
+ talaria: m("icons/common/talaria-v1.png"),
407
+ treasure: m("icons/common/treasure-v1.png")
408
+ }, va = Object.keys(ze), V = {
409
+ buttons: {
410
+ primary: m("buttons/button-brown-large-v2.png"),
411
+ blue: m("buttons/button-blue-large-v2.png"),
412
+ brown: m("buttons/button-brown-large-v2.png"),
413
+ green: m("buttons/button-green-large-v2.png"),
414
+ purple: m("buttons/button-purple-large-v2.png"),
415
+ red: m("buttons/button-red-large-v2.png")
416
+ },
417
+ panels: {
418
+ popup: m("components/popup/popup-v1.png"),
419
+ commonTitle: m("components/settings/common-popup-title-v1.png"),
420
+ language: m("components/language/language-v1.png")
421
+ },
422
+ controls: {
423
+ switchOn: m("components/common/switch-on-v1.png"),
424
+ switchOff: m("components/common/switch-off-v1.png"),
425
+ slider: m("components/settings/slidebar-v1.png"),
426
+ tabSelected: m("components/common/tab-s-v1.png"),
427
+ tabNormal: m("components/common/tab-n-v1.png")
428
+ },
429
+ // The default (game-preferred) path for every semantic icon, derived from the
430
+ // variant table above so there is a single source of truth.
431
+ icons: Object.fromEntries(pe.map((a) => [a, he(a)])),
432
+ catalog: {
433
+ manifest: "/assets/game/ui/clay/asset-manifest.json",
434
+ sourceCatalog: m("catalog/phase03-clay-ui-catalog.json"),
435
+ contactSheetCommon: m("catalog/common-icons-contact-sheet-v1.png"),
436
+ contactSheetComponents: m("catalog/component-candidates-contact-sheet-v1.png"),
437
+ contactSheetFunction: m("catalog/function-icons-contact-sheet-v1.png")
438
+ }
439
+ }, fa = {
440
+ ai: "AI",
441
+ alert: "!",
442
+ card: "▣",
443
+ chat: "··",
444
+ check: "✓",
445
+ close: "×",
446
+ coin: "◉",
447
+ compass: "⌖",
448
+ copy: "⧉",
449
+ crown: "♛",
450
+ energy: "ϟ",
451
+ gem: "◆",
452
+ gift: "❦",
453
+ globe: "◎",
454
+ history: "≡",
455
+ redo: "↻",
456
+ undo: "↶",
457
+ home: "⌂",
458
+ hourglass: "⧗",
459
+ laurel: "❧",
460
+ lock: "⌘",
461
+ lucky: "✲",
462
+ mail: "✉",
463
+ medal: "✦",
464
+ mission: "❖",
465
+ mobile: "▯",
466
+ portal: "◇",
467
+ scroll: "☰",
468
+ settings: "⚙",
469
+ shirt: "◔",
470
+ shop: "⊞",
471
+ smile: "☺",
472
+ timer: "◷",
473
+ trophy: "★",
474
+ vote: "⌾"
475
+ }, ya = {
476
+ ai: N.berry,
477
+ alert: N.red,
478
+ card: N.honey,
479
+ chat: N.sky,
480
+ check: N.green,
481
+ close: N.red,
482
+ coin: N.honey,
483
+ compass: N.teal,
484
+ copy: N.wood,
485
+ crown: N.honey,
486
+ energy: N.orange,
487
+ gem: N.sky,
488
+ gift: N.red,
489
+ globe: N.teal,
490
+ history: N.inkMuted,
491
+ redo: N.wood,
492
+ undo: N.wood,
493
+ home: N.wood,
494
+ hourglass: N.orange,
495
+ laurel: N.green,
496
+ lock: N.ink,
497
+ lucky: N.green,
498
+ mail: N.sky,
499
+ medal: N.honey,
500
+ mission: N.berry,
501
+ mobile: N.sky,
502
+ portal: N.teal,
503
+ scroll: N.berry,
504
+ settings: N.inkMuted,
505
+ shirt: N.sky,
506
+ shop: N.inkMuted,
507
+ smile: N.honey,
508
+ timer: N.orange,
509
+ trophy: N.honey,
510
+ vote: N.red
511
+ };
512
+ function wa(a) {
513
+ const t = fa[a], i = ya[a], l = N.parchment, n = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96"><defs><filter id="s" x="-20%" y="-20%" width="140%" height="140%"><feDropShadow dx="0" dy="5" stdDeviation="4" flood-color="#4c341c" flood-opacity=".22"/></filter></defs><rect x="10" y="8" width="76" height="76" rx="25" fill="${l}" filter="url(#s)"/><circle cx="48" cy="46" r="28" fill="${i}" opacity=".88"/><path d="M23 28c10-12 36-16 52 0" stroke="#fff" stroke-width="6" stroke-linecap="round" opacity=".38"/><text x="48" y="58" text-anchor="middle" font-family="system-ui,sans-serif" font-size="28" font-weight="900" fill="${l}">${t}</text></svg>`;
514
+ return `data:image/svg+xml,${encodeURIComponent(n)}`;
515
+ }
516
+ let be = "inline";
517
+ function Ai(a) {
518
+ be = a;
519
+ }
520
+ function Bi() {
521
+ return be;
522
+ }
523
+ function Z(a, t = {}) {
524
+ return t.inline ?? be === "inline" ? wa(a) : he(a, t.style);
525
+ }
526
+ function xi(a, t) {
527
+ return he(a, t);
528
+ }
529
+ function S({ children: a, className: t, tone: i = "neutral" }) {
530
+ const l = ["game-ui-badge", t].filter(Boolean).join(" ");
531
+ return /* @__PURE__ */ e("span", { className: l, "data-badge-tone": i, children: a });
532
+ }
533
+ function L({ className: a, icon: t, label: i, size: l = "md", style: n, useSourceAsset: s = !1 }) {
534
+ const r = ["game-ui-asset-icon", a].filter(Boolean).join(" "), d = i ? { "aria-label": i } : { "aria-hidden": !0 }, u = Z(t, { ...n ? { style: n } : {}, ...s ? { inline: !1 } : {} });
535
+ return /* @__PURE__ */ e("span", { className: r, "data-icon-size": l, "data-icon-style": n ?? "game", ...d, children: /* @__PURE__ */ e("img", { alt: "", src: u }) });
536
+ }
537
+ function Ve({ actions: a, className: t, items: i, label: l }) {
538
+ const n = ["game-ui-hud", t].filter(Boolean).join(" ");
539
+ return /* @__PURE__ */ o("section", { "aria-label": l, className: n, children: [
540
+ /* @__PURE__ */ e("div", { className: "game-ui-hud-cluster", children: i.map((s) => /* @__PURE__ */ o("article", { className: "game-ui-hud-chip", children: [
541
+ s.icon ? /* @__PURE__ */ e(L, { icon: s.icon, size: "md" }) : null,
542
+ /* @__PURE__ */ o("span", { children: [
543
+ /* @__PURE__ */ e("small", { children: s.label }),
544
+ /* @__PURE__ */ e("strong", { children: s.value }),
545
+ s.meta ? /* @__PURE__ */ e("em", { children: s.meta }) : null
546
+ ] })
547
+ ] }, s.id)) }),
548
+ a ? /* @__PURE__ */ e("div", { className: "game-ui-hud-tools", children: a }) : null
549
+ ] });
550
+ }
551
+ function Na({ cards: a, className: t, label: i }) {
552
+ const l = ["game-ui-card-fan", t].filter(Boolean).join(" "), n = (a.length - 1) / 2;
553
+ return /* @__PURE__ */ e("div", { "aria-label": i, className: l, role: "list", children: a.map((s, r) => {
554
+ const d = {
555
+ "--game-ui-card-index": r,
556
+ "--game-ui-card-offset": r - n
557
+ };
558
+ return /* @__PURE__ */ o("article", { className: "game-ui-card-fan-card", role: "listitem", style: d, children: [
559
+ s.icon ? /* @__PURE__ */ e(L, { icon: s.icon, size: "lg" }) : null,
560
+ /* @__PURE__ */ e("small", { children: s.kicker }),
561
+ /* @__PURE__ */ e("strong", { children: s.title })
562
+ ] }, s.id);
563
+ }) });
564
+ }
565
+ function q({ badge: a, className: t, icon: i, kicker: l, selected: n = !1, summary: s, title: r, tone: d = "daily", type: u = "button", ...c }) {
566
+ const b = ["game-ui-stage-tile", t].filter(Boolean).join(" ");
567
+ return /* @__PURE__ */ o("button", { "aria-pressed": n, className: b, "data-stage-tone": d, type: u, ...c, children: [
568
+ i ? /* @__PURE__ */ e(L, { icon: i, size: "xl" }) : null,
569
+ /* @__PURE__ */ o("span", { className: "game-ui-stage-tile-copy", children: [
570
+ /* @__PURE__ */ e("small", { children: l }),
571
+ /* @__PURE__ */ e("strong", { children: r }),
572
+ /* @__PURE__ */ e("span", { children: s })
573
+ ] }),
574
+ a ? /* @__PURE__ */ e(S, { tone: n ? "success" : "neutral", children: a }) : null
575
+ ] });
576
+ }
577
+ function J() {
578
+ return typeof window > "u" ? !1 : (window.matchMedia?.("(pointer: coarse), (max-width: 899px)").matches ?? window.innerWidth < 900) && window.innerHeight > window.innerWidth;
579
+ }
580
+ function ka({ body: a, cta: t, badgeLabel: i = "Landscape only", manualHint: l = "Rotate manually if this browser blocks automatic landscape lock.", preview: n = !1, title: s }) {
581
+ const [r, d] = M(n || J), [u, c] = M("");
582
+ if (te(() => {
583
+ if (n) return;
584
+ const g = () => {
585
+ const v = J();
586
+ d(v), v || c("");
587
+ };
588
+ return g(), window.addEventListener("resize", g), window.addEventListener("orientationchange", g), () => {
589
+ window.removeEventListener("resize", g), window.removeEventListener("orientationchange", g);
590
+ };
591
+ }, [n]), !r) return null;
592
+ const b = async () => {
593
+ if (c(""), !n)
594
+ try {
595
+ const g = document.documentElement;
596
+ !document.fullscreenElement && g.requestFullscreen && await g.requestFullscreen(), await screen.orientation.lock?.("landscape-primary"), d(J());
597
+ } catch {
598
+ c(l);
599
+ }
600
+ };
601
+ return /* @__PURE__ */ e("aside", { "aria-label": s, className: "game-ui-orientation-gate", children: /* @__PURE__ */ o("div", { className: "game-ui-orientation-card", children: [
602
+ /* @__PURE__ */ e(L, { icon: "mobile", size: "xl" }),
603
+ /* @__PURE__ */ e(S, { tone: "warning", children: i }),
604
+ /* @__PURE__ */ e("h2", { children: s }),
605
+ /* @__PURE__ */ e("p", { children: a }),
606
+ /* @__PURE__ */ e("button", { onClick: () => {
607
+ b();
608
+ }, type: "button", children: t }),
609
+ u ? /* @__PURE__ */ e("small", { children: u }) : null
610
+ ] }) });
611
+ }
612
+ function Sa({ className: a, currentLabel: t, label: i, options: l, value: n, defaultValue: s, onSelect: r }) {
613
+ const [d, u] = M(!1), [c, b] = M(s ?? l[0]?.id ?? ""), g = Y(), v = ["game-ui-language-menu", a].filter(Boolean).join(" "), y = n ?? c, k = l.find((w) => w.id === y), p = t ?? k?.label ?? l[0]?.label ?? "", f = (w) => {
614
+ n === void 0 && b(w), r?.(w), u(!1);
615
+ };
616
+ return /* @__PURE__ */ o("div", { className: v, children: [
617
+ /* @__PURE__ */ o("button", { "aria-controls": g, "aria-expanded": d, className: "game-ui-language-trigger", onClick: () => u((w) => !w), type: "button", children: [
618
+ /* @__PURE__ */ e(L, { icon: "globe", size: "sm" }),
619
+ /* @__PURE__ */ e("span", { children: p })
620
+ ] }),
621
+ d ? /* @__PURE__ */ e("div", { "aria-label": i, className: "game-ui-language-popover", id: g, role: "menu", children: l.map((w) => /* @__PURE__ */ e(
622
+ "button",
623
+ {
624
+ "aria-checked": w.id === y,
625
+ "data-selected": w.id === y,
626
+ onClick: () => f(w.id),
627
+ role: "menuitemradio",
628
+ type: "button",
629
+ children: /* @__PURE__ */ o("span", { children: [
630
+ /* @__PURE__ */ e("strong", { children: w.label }),
631
+ /* @__PURE__ */ e("small", { children: w.meta })
632
+ ] })
633
+ },
634
+ w.id
635
+ )) }) : null
636
+ ] });
637
+ }
638
+ function Se({ label: a, tone: t = "loading" }) {
639
+ return /* @__PURE__ */ o("div", { className: "game-ui-loading-state", "data-loading-tone": t, role: t === "error" ? "alert" : "status", children: [
640
+ /* @__PURE__ */ e("img", { alt: "", src: Z(t === "error" ? "alert" : "timer") }),
641
+ /* @__PURE__ */ e("span", { children: a })
642
+ ] });
643
+ }
644
+ function Ii() {
645
+ return V.catalog;
646
+ }
647
+ function z({ fallback: a, slot: t }) {
648
+ return t ?? /* @__PURE__ */ e(L, { icon: a, size: "sm" });
649
+ }
650
+ function La({ authenticated: a, batteryCount: t, className: i, dailyStreak: l, iconSlots: n, labels: s, onHistory: r, onSettings: d, onWardrobe: u, playerName: c }) {
651
+ const b = ["swimmer-first-session-shell", i].filter(Boolean).join(" "), g = a ? `${t} 🔋` : s.guest ?? "guest";
652
+ return /* @__PURE__ */ o("section", { "aria-label": s.shell, className: b, children: [
653
+ /* @__PURE__ */ e(
654
+ Ve,
655
+ {
656
+ className: "swimmer-first-session-hud",
657
+ items: [
658
+ { icon: "crown", id: "role", label: s.roleLabel, meta: c, value: s.roleValue },
659
+ { icon: "portal", id: "room", label: s.roomLabel, meta: g, value: s.roomValue },
660
+ { icon: "trophy", id: "goal", label: s.goalLabel, meta: `${s.streak ?? "Daily"} ${l}`, value: s.goalValue },
661
+ { icon: "timer", id: "timer", label: s.timerLabel, value: s.timerValue }
662
+ ],
663
+ label: s.hud,
664
+ actions: /* @__PURE__ */ o(K, { className: "swimmer-first-session-hud-actions", label: s.tools, children: [
665
+ /* @__PURE__ */ o(C, { "aria-label": s.wardrobe, onClick: u, variant: "secondary", children: [
666
+ /* @__PURE__ */ e(z, { fallback: "shirt", slot: n?.wardrobe }),
667
+ s.wardrobe
668
+ ] }),
669
+ /* @__PURE__ */ o(C, { "aria-label": s.settings, onClick: d, variant: "secondary", children: [
670
+ /* @__PURE__ */ e(z, { fallback: "settings", slot: n?.settings }),
671
+ s.settings
672
+ ] }),
673
+ /* @__PURE__ */ o(C, { "aria-label": s.history, onClick: r, variant: "secondary", children: [
674
+ /* @__PURE__ */ e(z, { fallback: "history", slot: n?.history }),
675
+ s.history
676
+ ] })
677
+ ] })
678
+ }
679
+ ),
680
+ /* @__PURE__ */ o("div", { "aria-label": s.controls, className: "swimmer-first-session-controls", children: [
681
+ /* @__PURE__ */ e("div", { "aria-hidden": "true", className: "swimmer-first-session-joystick", children: /* @__PURE__ */ e("span", {}) }),
682
+ /* @__PURE__ */ o("div", { className: "swimmer-first-session-control-copy", children: [
683
+ /* @__PURE__ */ e(S, { tone: "ai", children: s.moveBadge }),
684
+ /* @__PURE__ */ e("strong", { children: s.move })
685
+ ] }),
686
+ /* @__PURE__ */ o("label", { className: "swimmer-first-session-input", children: [
687
+ /* @__PURE__ */ e(z, { fallback: "chat", slot: n?.input }),
688
+ /* @__PURE__ */ e("span", { children: s.input })
689
+ ] }),
690
+ /* @__PURE__ */ o("button", { className: "swimmer-first-session-emote", type: "button", children: [
691
+ /* @__PURE__ */ e(z, { fallback: "smile", slot: n?.emote }),
692
+ s.emote
693
+ ] })
694
+ ] })
695
+ ] });
696
+ }
697
+ function Ta({ labels: a, onDismiss: t, open: i }) {
698
+ return i ? /* @__PURE__ */ o("aside", { "aria-labelledby": "swimmer-first-session-onboarding-title", "aria-modal": "true", className: "swimmer-first-session-onboarding", role: "dialog", children: [
699
+ /* @__PURE__ */ e("div", { className: "swimmer-first-session-onboarding-scrim" }),
700
+ /* @__PURE__ */ o("div", { className: "swimmer-first-session-onboarding-card", children: [
701
+ /* @__PURE__ */ e(L, { icon: "trophy", size: "xl" }),
702
+ /* @__PURE__ */ e(S, { tone: "warning", children: a.badge }),
703
+ /* @__PURE__ */ e("h2", { id: "swimmer-first-session-onboarding-title", children: a.title }),
704
+ /* @__PURE__ */ e("p", { children: a.body }),
705
+ /* @__PURE__ */ e("ol", { className: "swimmer-first-session-onboarding-steps", children: a.steps.map((l, n) => /* @__PURE__ */ o("li", { children: [
706
+ /* @__PURE__ */ e("span", { children: String(n + 1).padStart(2, "0") }),
707
+ /* @__PURE__ */ e("strong", { children: l.title }),
708
+ /* @__PURE__ */ e("small", { children: l.body })
709
+ ] }, l.title)) }),
710
+ /* @__PURE__ */ o("div", { className: "swimmer-first-session-onboarding-actions", children: [
711
+ /* @__PURE__ */ e(C, { onClick: t, variant: "primary", children: a.start }),
712
+ /* @__PURE__ */ e(C, { onClick: t, variant: "ghost", children: a.skip })
713
+ ] })
714
+ ] })
715
+ ] }) : null;
716
+ }
717
+ const Le = Oe(function({ className: t, invalid: i, type: l = "text", ...n }, s) {
718
+ const r = ["game-ui-input", t].filter(Boolean).join(" ");
719
+ return /* @__PURE__ */ e("input", { className: r, "data-invalid": i ? "true" : void 0, ref: s, type: l, ...n });
720
+ }), Ca = Oe(function({ className: t, invalid: i, rows: l = 3, ...n }, s) {
721
+ const r = ["game-ui-input", "game-ui-textarea", t].filter(Boolean).join(" ");
722
+ return /* @__PURE__ */ e("textarea", { className: r, "data-invalid": i ? "true" : void 0, ref: s, rows: l, ...n });
723
+ });
724
+ function H({ children: a, className: t, error: i, hint: l, label: n, required: s }) {
725
+ const r = ["game-ui-field", t].filter(Boolean).join(" ");
726
+ return /* @__PURE__ */ o("label", { className: r, "data-invalid": i ? "true" : void 0, children: [
727
+ /* @__PURE__ */ o("span", { className: "game-ui-field-label", children: [
728
+ n,
729
+ s ? /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-field-required", children: " *" }) : null
730
+ ] }),
731
+ a,
732
+ l && !i ? /* @__PURE__ */ e("span", { className: "game-ui-field-hint", children: l }) : null,
733
+ i ? /* @__PURE__ */ e("span", { className: "game-ui-field-error", role: "alert", children: i }) : null
734
+ ] });
735
+ }
736
+ function Aa({ className: a, label: t, ...i }) {
737
+ const l = ["game-ui-checkbox", a].filter(Boolean).join(" ");
738
+ return /* @__PURE__ */ o("label", { className: l, children: [
739
+ /* @__PURE__ */ e("input", { className: "game-ui-checkbox-input", type: "checkbox", ...i }),
740
+ /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-checkbox-box" }),
741
+ /* @__PURE__ */ e("span", { className: "game-ui-checkbox-label", children: t })
742
+ ] });
743
+ }
744
+ function Ba(a) {
745
+ const t = a.trim().split(/\s+/).filter(Boolean);
746
+ return t.length === 0 ? "?" : t.slice(0, 2).map((l) => l[0] ?? "").join("").toUpperCase();
747
+ }
748
+ function $({ className: a, name: t, size: i = "md", src: l, status: n = "none" }) {
749
+ const s = ["game-ui-avatar", a].filter(Boolean).join(" ");
750
+ return /* @__PURE__ */ o("span", { className: s, "data-avatar-size": i, "data-avatar-status": n, children: [
751
+ l ? /* @__PURE__ */ e("img", { alt: t, src: l }) : /* @__PURE__ */ o(Ge, { children: [
752
+ /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-avatar-initials", children: Ba(t) }),
753
+ /* @__PURE__ */ e("span", { className: "game-ui-sr-only", children: t })
754
+ ] }),
755
+ n !== "none" ? /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-avatar-status" }) : null
756
+ ] });
757
+ }
758
+ function D({ className: a, label: t, max: i = 100, showValue: l = !1, tone: n = "accent", value: s }) {
759
+ const r = i <= 0 ? 100 : i, d = Math.max(0, Math.min(100, s / r * 100)), u = ["game-ui-progress", a].filter(Boolean).join(" ");
760
+ return /* @__PURE__ */ o("div", { className: u, "data-progress-tone": n, children: [
761
+ /* @__PURE__ */ e(
762
+ "div",
763
+ {
764
+ "aria-label": t,
765
+ "aria-valuemax": r,
766
+ "aria-valuemin": 0,
767
+ "aria-valuenow": s,
768
+ className: "game-ui-progress-track",
769
+ role: "progressbar",
770
+ children: /* @__PURE__ */ e("div", { className: "game-ui-progress-fill", style: { width: `${d}%` } })
771
+ }
772
+ ),
773
+ l ? /* @__PURE__ */ o("span", { className: "game-ui-progress-value", children: [
774
+ Math.round(d),
775
+ "%"
776
+ ] }) : null
777
+ ] });
778
+ }
779
+ function P({ action: a, className: t, description: i, icon: l, title: n }) {
780
+ const s = ["game-ui-empty-state", t].filter(Boolean).join(" ");
781
+ return /* @__PURE__ */ o("div", { className: s, children: [
782
+ l ? /* @__PURE__ */ e(L, { icon: l, size: "xl" }) : null,
783
+ /* @__PURE__ */ e("strong", { className: "game-ui-empty-state-title", children: n }),
784
+ i ? /* @__PURE__ */ e("p", { className: "game-ui-empty-state-body", children: i }) : null,
785
+ a ? /* @__PURE__ */ e("div", { className: "game-ui-empty-state-action", children: a }) : null
786
+ ] });
787
+ }
788
+ function He({
789
+ assetLibrary: a,
790
+ bottomBar: t,
791
+ children: i,
792
+ className: l,
793
+ density: n = "comfortable",
794
+ hud: s,
795
+ layout: r = "auto",
796
+ movementPad: d,
797
+ overlay: u,
798
+ sidePanel: c,
799
+ title: b
800
+ }) {
801
+ const g = ["game-ui-shell", l].filter(Boolean).join(" ");
802
+ return /* @__PURE__ */ o("section", { "aria-label": b, className: g, "data-density": n, "data-layout": r, children: [
803
+ /* @__PURE__ */ e("div", { className: "game-ui-shell-scene", children: i }),
804
+ s ? /* @__PURE__ */ e("div", { className: "game-ui-shell-hud", children: s }) : null,
805
+ a ? /* @__PURE__ */ e("aside", { className: "game-ui-shell-library", children: a }) : null,
806
+ c ? /* @__PURE__ */ e("aside", { className: "game-ui-shell-side-panel", children: c }) : null,
807
+ d ? /* @__PURE__ */ e("div", { className: "game-ui-shell-movement", children: d }) : null,
808
+ t ? /* @__PURE__ */ e("div", { className: "game-ui-shell-bottom-bar", children: t }) : null,
809
+ u ? /* @__PURE__ */ e("div", { className: "game-ui-shell-overlay", children: u }) : null
810
+ ] });
811
+ }
812
+ const Ei = He;
813
+ function ve({ className: a, density: t = "comfortable", facts: i, label: l, variant: n = "facts" }) {
814
+ const s = ["game-ui-fact-list", a].filter(Boolean).join(" ");
815
+ return /* @__PURE__ */ e("section", { "aria-label": l, className: s, "data-density": t, "data-variant": n, children: i.map((r) => /* @__PURE__ */ o("article", { className: "game-ui-fact", children: [
816
+ r.icon ? /* @__PURE__ */ e(L, { icon: r.icon, size: t === "dense" ? "sm" : "md" }) : null,
817
+ /* @__PURE__ */ o("span", { className: "game-ui-fact-copy", children: [
818
+ /* @__PURE__ */ e("small", { children: r.label }),
819
+ /* @__PURE__ */ e("strong", { children: r.value }),
820
+ r.meta ? /* @__PURE__ */ e("em", { children: r.meta }) : null
821
+ ] }),
822
+ r.tone ? /* @__PURE__ */ e(S, { tone: r.tone, children: n === "stats" ? r.label : r.value }) : null
823
+ ] }, r.id)) });
824
+ }
825
+ const Ri = ve;
826
+ function U({ actions: a, className: t, density: i = "comfortable", iconLabelMode: l = "hidden", label: n, style: s = "button" }) {
827
+ const r = ["game-ui-action-grid", t].filter(Boolean).join(" ");
828
+ return /* @__PURE__ */ o(K, { className: r, "data-icon-label-mode": s === "icon" ? l : void 0, label: n, children: [
829
+ /* @__PURE__ */ e("span", { className: "game-ui-sr-only", children: n }),
830
+ a.map((d) => {
831
+ const u = d.compactLabel ?? d.label, c = /* @__PURE__ */ o(Ge, { children: [
832
+ d.icon ? /* @__PURE__ */ e(L, { icon: d.icon, size: i === "dense" ? "sm" : "md", ...s === "icon" ? { style: "line" } : {} }) : null,
833
+ s === "button" ? /* @__PURE__ */ e("span", { children: d.label }) : null,
834
+ s === "icon" && l === "caption" ? /* @__PURE__ */ e("span", { className: "game-ui-action-grid-caption", children: u }) : null,
835
+ d.badge ? /* @__PURE__ */ e(S, { tone: d.selected ? "success" : "neutral", children: d.badge }) : null,
836
+ d.shortcut ? /* @__PURE__ */ e("kbd", { children: d.shortcut }) : null
837
+ ] }), b = () => d.onAction?.(d.id);
838
+ return s === "icon" ? /* @__PURE__ */ e(
839
+ O,
840
+ {
841
+ "aria-pressed": d.selected,
842
+ className: "game-ui-action-grid-button",
843
+ disabled: d.disabled,
844
+ label: d.ariaLabel ?? d.label,
845
+ onClick: b,
846
+ children: c
847
+ },
848
+ d.id
849
+ ) : /* @__PURE__ */ e(
850
+ C,
851
+ {
852
+ "aria-pressed": d.selected,
853
+ className: "game-ui-action-grid-button",
854
+ disabled: d.disabled,
855
+ onClick: b,
856
+ variant: d.tone ?? "secondary",
857
+ children: c
858
+ },
859
+ d.id
860
+ );
861
+ })
862
+ ] });
863
+ }
864
+ const xa = [
865
+ { direction: "forward", label: "Move forward", shortcut: "W / ↑", symbol: "↑" },
866
+ { direction: "left", label: "Move left", shortcut: "A / ←", symbol: "←" },
867
+ { direction: "right", label: "Move right", shortcut: "D / →", symbol: "→" },
868
+ { direction: "backward", label: "Move backward", shortcut: "S / ↓", symbol: "↓" }
869
+ ], Ia = {
870
+ ArrowUp: "forward",
871
+ w: "forward",
872
+ W: "forward",
873
+ ArrowLeft: "left",
874
+ a: "left",
875
+ A: "left",
876
+ ArrowRight: "right",
877
+ d: "right",
878
+ D: "right",
879
+ ArrowDown: "backward",
880
+ s: "backward",
881
+ S: "backward",
882
+ " ": "reset"
883
+ };
884
+ function Ea({
885
+ actions: a = xa,
886
+ className: t,
887
+ density: i = "comfortable",
888
+ disabled: l = !1,
889
+ helpText: n,
890
+ label: s,
891
+ layout: r = "dpad",
892
+ onMove: d
893
+ }) {
894
+ const u = ["game-ui-movement-pad", t].filter(Boolean).join(" "), c = (g) => {
895
+ l || d?.(g);
896
+ };
897
+ return /* @__PURE__ */ o("section", { "aria-label": s, className: u, "data-density": i, "data-layout": r, onKeyDown: (g) => {
898
+ const v = Ia[g.key];
899
+ if (!v) return;
900
+ const y = a.find((k) => k.direction === v);
901
+ !y || y.disabled || l || (g.preventDefault(), c(v));
902
+ }, tabIndex: 0, children: [
903
+ /* @__PURE__ */ e("div", { className: "game-ui-movement-pad-grid", children: a.map((g) => /* @__PURE__ */ o(
904
+ O,
905
+ {
906
+ className: "game-ui-movement-button",
907
+ "data-direction": g.direction,
908
+ disabled: l || g.disabled,
909
+ label: g.label,
910
+ onClick: () => c(g.direction),
911
+ children: [
912
+ g.icon ? /* @__PURE__ */ e(L, { icon: g.icon, size: i === "dense" ? "sm" : "md", style: "line" }) : /* @__PURE__ */ e("span", { "aria-hidden": "true", children: g.symbol ?? g.label }),
913
+ g.shortcut ? /* @__PURE__ */ e("kbd", { children: g.shortcut }) : null
914
+ ]
915
+ },
916
+ g.direction
917
+ )) }),
918
+ n ? /* @__PURE__ */ e("p", { children: n }) : null
919
+ ] });
920
+ }
921
+ const X = {
922
+ generated: "Generated",
923
+ imported: "Imported",
924
+ starter: "Starter"
925
+ }, Q = {
926
+ generated: "ai",
927
+ imported: "warning",
928
+ starter: "neutral"
929
+ }, Ra = {
930
+ error: "danger",
931
+ generating: "ai",
932
+ missing: "danger",
933
+ placed: "success",
934
+ ready: "neutral",
935
+ selected: "success"
936
+ };
937
+ function Ma({
938
+ assetId: a,
939
+ badges: t = [],
940
+ cardLayout: i = "list",
941
+ className: l,
942
+ description: n,
943
+ disabled: s,
944
+ facts: r = [],
945
+ icon: d = "gem",
946
+ onClick: u,
947
+ onSelect: c,
948
+ selected: b = !1,
949
+ source: g,
950
+ sourceLabel: v,
951
+ status: y = "ready",
952
+ statusLabel: k,
953
+ thumbnailAlt: p = "",
954
+ thumbnailSrc: f,
955
+ title: w,
956
+ type: h = "button",
957
+ ...A
958
+ }) {
959
+ const { "aria-label": T, ...G } = A, _ = ["game-ui-asset-card", l].filter(Boolean).join(" "), x = v ?? X[g], E = k ?? y;
960
+ return /* @__PURE__ */ o(
961
+ "button",
962
+ {
963
+ "aria-label": T ?? w,
964
+ "aria-pressed": b,
965
+ className: _,
966
+ "data-asset-card-layout": i,
967
+ "data-asset-source": g,
968
+ "data-asset-status": y,
969
+ disabled: s,
970
+ onClick: (I) => {
971
+ u?.(I), I.defaultPrevented || c?.(a);
972
+ },
973
+ type: h,
974
+ ...G,
975
+ children: [
976
+ /* @__PURE__ */ e("span", { className: "game-ui-asset-card-preview", children: f ? /* @__PURE__ */ e("img", { alt: p, src: f }) : /* @__PURE__ */ e(L, { className: "game-ui-asset-card-icon", icon: d, size: "xl" }) }),
977
+ /* @__PURE__ */ o("span", { className: "game-ui-asset-card-copy", children: [
978
+ /* @__PURE__ */ o("span", { className: "game-ui-asset-card-badges", children: [
979
+ /* @__PURE__ */ e(S, { tone: Q[g], children: x }),
980
+ /* @__PURE__ */ e(S, { tone: Ra[y], children: E }),
981
+ t.map((I) => /* @__PURE__ */ e(S, { tone: I.tone ?? "neutral", children: I.label }, I.label))
982
+ ] }),
983
+ /* @__PURE__ */ e("strong", { children: w }),
984
+ n ? /* @__PURE__ */ e("span", { children: n }) : null,
985
+ r.length > 0 ? /* @__PURE__ */ e("span", { className: "game-ui-asset-card-facts", children: r.map((I) => /* @__PURE__ */ o("span", { children: [
986
+ /* @__PURE__ */ e("small", { children: I.label }),
987
+ /* @__PURE__ */ e("b", { children: I.value })
988
+ ] }, I.id)) }) : null
989
+ ] })
990
+ ]
991
+ }
992
+ );
993
+ }
994
+ function De({
995
+ cardLayout: a = "auto",
996
+ className: t,
997
+ density: i = "comfortable",
998
+ emptyAction: l,
999
+ emptyDescription: n = "Assets will appear here when they are ready to place.",
1000
+ emptyTitle: s = "No assets ready",
1001
+ groups: r,
1002
+ label: d,
1003
+ onSelectAsset: u,
1004
+ selectedAssetId: c,
1005
+ subtitle: b,
1006
+ title: g
1007
+ }) {
1008
+ const v = ["game-ui-asset-library", t].filter(Boolean).join(" "), y = r.reduce((p, f) => p + f.assets.length, 0), k = r.reduce((p, f) => (f.assets.forEach((w) => {
1009
+ p[w.source] += 1;
1010
+ }), p), { generated: 0, imported: 0, starter: 0 });
1011
+ return /* @__PURE__ */ e(B, { className: v, "data-card-layout": a, title: g, tone: "strong", children: /* @__PURE__ */ o("section", { "aria-label": d, "data-density": i, children: [
1012
+ b ? /* @__PURE__ */ e("p", { className: "game-ui-asset-library-subtitle", children: b }) : null,
1013
+ /* @__PURE__ */ e("div", { "aria-label": "Asset source counts", className: "game-ui-asset-library-counts", children: Object.entries(k).map(([p, f]) => /* @__PURE__ */ o(S, { tone: Q[p], children: [
1014
+ X[p],
1015
+ " ",
1016
+ f
1017
+ ] }, p)) }),
1018
+ y === 0 ? /* @__PURE__ */ e(P, { action: l, description: n, icon: "gem", title: s }) : /* @__PURE__ */ e("div", { className: "game-ui-asset-library-groups", children: r.map((p) => /* @__PURE__ */ o("section", { "aria-label": p.label, className: "game-ui-asset-library-group", "data-asset-source": p.source, children: [
1019
+ /* @__PURE__ */ o("header", { children: [
1020
+ /* @__PURE__ */ e("strong", { children: p.label }),
1021
+ p.source ? /* @__PURE__ */ e(S, { tone: Q[p.source], children: X[p.source] }) : null
1022
+ ] }),
1023
+ /* @__PURE__ */ e("div", { className: "game-ui-asset-library-grid", children: p.assets.map((f) => {
1024
+ const w = a === "auto" ? f.cardLayout : a;
1025
+ return /* @__PURE__ */ e(
1026
+ Ma,
1027
+ {
1028
+ ...f,
1029
+ ...w ? { cardLayout: w } : {},
1030
+ ...u ? { onSelect: u } : {},
1031
+ selected: f.assetId === c
1032
+ },
1033
+ f.assetId
1034
+ );
1035
+ }) })
1036
+ ] }, p.id)) })
1037
+ ] }) });
1038
+ }
1039
+ function Ue({
1040
+ actions: a = [],
1041
+ capacityLabel: t = "Objects",
1042
+ className: i,
1043
+ density: l = "comfortable",
1044
+ maxObjects: n,
1045
+ objectActions: s = [],
1046
+ placedObjects: r,
1047
+ selectedLabel: d = "Selected",
1048
+ selectedTitle: u,
1049
+ statusLabel: c = "Status",
1050
+ statusTone: b = "neutral",
1051
+ statusValue: g = "Idle",
1052
+ title: v
1053
+ }) {
1054
+ const y = ["game-ui-placement-toolbar", i].filter(Boolean).join(" "), k = typeof r == "number" && typeof n == "number", p = k && n > 0 ? Math.min(n, r) : 0;
1055
+ return /* @__PURE__ */ e(B, { className: y, title: v, tone: "strong", children: /* @__PURE__ */ o("div", { "data-density": l, children: [
1056
+ /* @__PURE__ */ e(ve, { density: l, facts: [
1057
+ { icon: "gem", id: "selected", label: d, value: u ?? "None" },
1058
+ { icon: "check", id: "status", label: c, tone: b, value: g }
1059
+ ], label: `${v} facts` }),
1060
+ k ? /* @__PURE__ */ e(D, { label: t, max: n, showValue: !0, tone: p >= n ? "warning" : "success", value: p }) : null,
1061
+ a.length > 0 ? /* @__PURE__ */ e(U, { actions: a, density: l, label: `${v} actions` }) : null,
1062
+ s.length > 0 ? /* @__PURE__ */ e(U, { actions: s, density: l, label: `${v} object actions`, style: "icon" }) : null
1063
+ ] }) });
1064
+ }
1065
+ const Mi = Ue, fe = {
1066
+ build: "home",
1067
+ flatten: "card",
1068
+ inspect: "compass",
1069
+ lower: "close",
1070
+ paint: "gem",
1071
+ place: "gem",
1072
+ raise: "energy",
1073
+ smooth: "lucky",
1074
+ terrain: "portal"
1075
+ }, Ga = {
1076
+ error: "danger",
1077
+ locked: "warning",
1078
+ missing: "danger",
1079
+ progress: "ai",
1080
+ ready: "neutral",
1081
+ selected: "success"
1082
+ };
1083
+ function Oa(a, t, i, l) {
1084
+ const n = {
1085
+ disabled: !!(l || a.disabled),
1086
+ icon: a.icon ?? fe[a.id] ?? "gem",
1087
+ id: a.id,
1088
+ label: a.label,
1089
+ selected: a.id === t,
1090
+ tone: a.id === t ? "primary" : "secondary"
1091
+ };
1092
+ return a.ariaLabel && (n.ariaLabel = a.ariaLabel), a.compactLabel && (n.compactLabel = a.compactLabel), a.meta && (n.meta = a.meta), a.shortcut && (n.shortcut = a.shortcut), i && (n.onAction = i), n;
1093
+ }
1094
+ function F(a, t, i) {
1095
+ return Number.isNaN(a) ? t : Math.min(i, Math.max(t, a));
1096
+ }
1097
+ function Pa(a, t) {
1098
+ return a !== "auto" ? a : t === "mobile" || t === "small-mobile" ? "caption" : "hidden";
1099
+ }
1100
+ function _a({
1101
+ activeModeId: a,
1102
+ className: t,
1103
+ disabled: i = !1,
1104
+ label: l,
1105
+ modes: n,
1106
+ onModeChange: s,
1107
+ variant: r = "desktop",
1108
+ "data-testid": d
1109
+ }) {
1110
+ const u = ["game-ui-terrain-mode-control", t].filter(Boolean).join(" ");
1111
+ return /* @__PURE__ */ o("section", { "aria-label": l, className: u, "data-ui-hook": "terrain-mode-control", "data-variant": r, "data-testid": d, children: [
1112
+ /* @__PURE__ */ e("span", { className: "game-ui-sr-only", children: l }),
1113
+ /* @__PURE__ */ e("div", { className: "game-ui-terrain-mode-options", role: "group", children: n.map((c) => {
1114
+ const b = c.id === a, g = i || c.disabled, v = r === "small-mobile" ? c.compactLabel ?? c.label : c.label;
1115
+ return /* @__PURE__ */ o(
1116
+ "button",
1117
+ {
1118
+ "aria-describedby": c.meta ? `${c.id}-mode-meta` : void 0,
1119
+ "aria-label": c.ariaLabel ?? c.label,
1120
+ "aria-pressed": b,
1121
+ className: "game-ui-terrain-mode-option",
1122
+ "data-mode-id": c.id,
1123
+ "data-selected": b ? "true" : "false",
1124
+ disabled: g,
1125
+ onClick: s && !g ? () => s(c.id) : void 0,
1126
+ type: "button",
1127
+ children: [
1128
+ /* @__PURE__ */ e(L, { icon: c.icon ?? fe[c.id] ?? "portal", size: r === "small-mobile" ? "sm" : "md", style: "line" }),
1129
+ /* @__PURE__ */ e("span", { children: v }),
1130
+ c.meta ? /* @__PURE__ */ e("small", { id: `${c.id}-mode-meta`, children: c.meta }) : null
1131
+ ]
1132
+ },
1133
+ c.id
1134
+ );
1135
+ }) })
1136
+ ] });
1137
+ }
1138
+ function za({
1139
+ activeToolId: a,
1140
+ className: t,
1141
+ compactLabelMode: i = "auto",
1142
+ density: l = "comfortable",
1143
+ disabled: n = !1,
1144
+ label: s,
1145
+ onToolChange: r,
1146
+ tools: d,
1147
+ variant: u = "desktop",
1148
+ "data-testid": c
1149
+ }) {
1150
+ const b = ["game-ui-terrain-tool-strip", t].filter(Boolean).join(" "), g = Pa(i, u);
1151
+ return /* @__PURE__ */ e("section", { "aria-label": s, className: b, "data-active-tool": a, "data-icon-label-mode": g, "data-ui-hook": "terrain-tool-strip", "data-variant": u, "data-testid": c, children: /* @__PURE__ */ e(
1152
+ U,
1153
+ {
1154
+ actions: d.map((v) => Oa(v, a, r, n)),
1155
+ density: l,
1156
+ iconLabelMode: g,
1157
+ label: s,
1158
+ style: u === "desktop" ? "button" : "icon"
1159
+ }
1160
+ ) });
1161
+ }
1162
+ function Va({
1163
+ className: a,
1164
+ labels: t = {},
1165
+ onRadiusChange: i,
1166
+ onStrengthChange: l,
1167
+ state: n,
1168
+ variant: s = "desktop",
1169
+ "data-testid": r
1170
+ }) {
1171
+ const d = ["game-ui-brush-controls", a].filter(Boolean).join(" "), u = n.minRadius ?? 1, c = n.maxRadius ?? 8, b = n.radiusStep ?? 0.25, g = n.minStrength ?? 0, v = n.maxStrength ?? 1, y = n.strengthStep ?? 0.05, k = F(n.radius, u, c), p = F(n.strength, g, v), f = !!n.disabled, w = (A) => {
1172
+ i?.(F(Number(A.currentTarget.value), u, c));
1173
+ }, h = (A) => {
1174
+ l?.(F(Number(A.currentTarget.value), g, v));
1175
+ };
1176
+ return /* @__PURE__ */ o("section", { className: d, "data-ui-hook": "brush-controls", "data-variant": s, "data-testid": r, children: [
1177
+ /* @__PURE__ */ e(H, { ...t.radiusHint ? { hint: t.radiusHint } : {}, label: t.radius ?? "Brush radius", children: /* @__PURE__ */ o("div", { className: "game-ui-brush-control-row", "data-control": "radius", children: [
1178
+ /* @__PURE__ */ e(
1179
+ "input",
1180
+ {
1181
+ "aria-label": t.radius ?? "Brush radius",
1182
+ className: "game-ui-brush-range",
1183
+ disabled: f,
1184
+ max: c,
1185
+ min: u,
1186
+ onChange: i ? w : void 0,
1187
+ readOnly: !i,
1188
+ step: b,
1189
+ type: "range",
1190
+ value: k
1191
+ }
1192
+ ),
1193
+ /* @__PURE__ */ e(
1194
+ "input",
1195
+ {
1196
+ "aria-label": `${t.radius ?? "Brush radius"} value`,
1197
+ className: "game-ui-brush-number",
1198
+ disabled: f,
1199
+ max: c,
1200
+ min: u,
1201
+ onChange: i ? w : void 0,
1202
+ readOnly: !i,
1203
+ step: b,
1204
+ type: "number",
1205
+ value: k
1206
+ }
1207
+ )
1208
+ ] }) }),
1209
+ /* @__PURE__ */ e(H, { ...t.strengthHint ? { hint: t.strengthHint } : {}, label: t.strength ?? "Brush strength", children: /* @__PURE__ */ o("div", { className: "game-ui-brush-control-row", "data-control": "strength", children: [
1210
+ /* @__PURE__ */ e(
1211
+ "input",
1212
+ {
1213
+ "aria-label": t.strength ?? "Brush strength",
1214
+ className: "game-ui-brush-range",
1215
+ disabled: f,
1216
+ max: v,
1217
+ min: g,
1218
+ onChange: l ? h : void 0,
1219
+ readOnly: !l,
1220
+ step: y,
1221
+ type: "range",
1222
+ value: p
1223
+ }
1224
+ ),
1225
+ /* @__PURE__ */ e(
1226
+ "input",
1227
+ {
1228
+ "aria-label": `${t.strength ?? "Brush strength"} value`,
1229
+ className: "game-ui-brush-number",
1230
+ disabled: f,
1231
+ max: v,
1232
+ min: g,
1233
+ onChange: l ? h : void 0,
1234
+ readOnly: !l,
1235
+ step: y,
1236
+ type: "number",
1237
+ value: p
1238
+ }
1239
+ )
1240
+ ] }) })
1241
+ ] });
1242
+ }
1243
+ function Ha({
1244
+ activeMaterialId: a,
1245
+ className: t,
1246
+ disabled: i = !1,
1247
+ label: l,
1248
+ materials: n,
1249
+ onMaterialChange: s,
1250
+ variant: r = "desktop",
1251
+ "data-testid": d
1252
+ }) {
1253
+ const u = ["game-ui-material-swatches", t].filter(Boolean).join(" ");
1254
+ return /* @__PURE__ */ e("section", { "aria-label": l, className: u, "data-ui-hook": "material-swatches", "data-variant": r, "data-testid": d, children: /* @__PURE__ */ e("div", { className: "game-ui-material-swatch-grid", role: "listbox", "aria-label": l, children: n.map((c) => {
1255
+ const b = c.id === a, g = i || c.disabled, v = r === "small-mobile" ? c.compactLabel ?? c.label : c.label, y = {
1256
+ "--swatch-color": c.color,
1257
+ "--swatch-secondary-color": c.secondaryColor ?? c.color
1258
+ };
1259
+ return /* @__PURE__ */ o(
1260
+ "button",
1261
+ {
1262
+ "aria-describedby": c.meta ? `${c.id}-material-meta` : void 0,
1263
+ "aria-label": c.label,
1264
+ "aria-selected": b,
1265
+ className: "game-ui-material-swatch",
1266
+ "data-material-id": c.id,
1267
+ disabled: g,
1268
+ onClick: s && !g ? () => s(c.id) : void 0,
1269
+ role: "option",
1270
+ type: "button",
1271
+ children: [
1272
+ /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-material-swatch-chip", "data-swatch-pattern": c.pattern ?? "solid", style: y }),
1273
+ /* @__PURE__ */ o("span", { className: "game-ui-material-swatch-copy", children: [
1274
+ /* @__PURE__ */ e("strong", { children: v }),
1275
+ c.meta ? /* @__PURE__ */ e("small", { id: `${c.id}-material-meta`, children: c.meta }) : null
1276
+ ] })
1277
+ ]
1278
+ },
1279
+ c.id
1280
+ );
1281
+ }) }) });
1282
+ }
1283
+ function Da({
1284
+ canRedo: a = !1,
1285
+ canUndo: t = !1,
1286
+ className: i,
1287
+ disabled: l = !1,
1288
+ label: n,
1289
+ onRedo: s,
1290
+ onUndo: r,
1291
+ redoLabel: d = "Redo",
1292
+ undoLabel: u = "Undo",
1293
+ variant: c = "desktop",
1294
+ "data-testid": b
1295
+ }) {
1296
+ const g = ["game-ui-undo-redo-actions", i].filter(Boolean).join(" ");
1297
+ return /* @__PURE__ */ e("section", { "aria-label": n, className: g, "data-ui-hook": "undo-redo-actions", "data-variant": c, "data-testid": b, children: /* @__PURE__ */ e(U, { actions: [
1298
+ { disabled: l || !t, icon: "undo", id: "undo", label: u, onAction: (y) => {
1299
+ r?.();
1300
+ }, shortcut: "⌘Z" },
1301
+ { disabled: l || !a, icon: "redo", id: "redo", label: d, onAction: (y) => {
1302
+ s?.();
1303
+ }, shortcut: "⇧⌘Z" }
1304
+ ], density: "dense", label: n, style: "icon" }) });
1305
+ }
1306
+ function Ua({
1307
+ activeCategoryId: a,
1308
+ categories: t,
1309
+ className: i,
1310
+ density: l = "comfortable",
1311
+ emptyDescription: n = "Building pieces will appear here when a category is available.",
1312
+ emptyTitle: s = "No build pieces ready",
1313
+ label: r,
1314
+ onCategoryChange: d,
1315
+ onSelectItem: u,
1316
+ selectedItemId: c,
1317
+ title: b,
1318
+ variant: g = "desktop",
1319
+ "data-testid": v
1320
+ }) {
1321
+ const y = ["game-ui-build-library", i].filter(Boolean).join(" "), k = t.filter((h) => !h.disabled), p = t.find((h) => h.id === a) ?? k[0] ?? t[0], f = p?.items ?? [], w = g === "small-mobile";
1322
+ return /* @__PURE__ */ e(B, { className: y, "data-ui-hook": "build-library", "data-variant": g, "data-testid": v, title: b, tone: "strong", children: /* @__PURE__ */ o("section", { "aria-label": r, "data-density": l, children: [
1323
+ /* @__PURE__ */ e("div", { "aria-label": "Build categories", className: "game-ui-build-categories", role: "tablist", children: t.map((h) => {
1324
+ const A = h.id === p?.id, T = g === "small-mobile" ? h.compactLabel ?? h.label : h.label;
1325
+ return /* @__PURE__ */ o(
1326
+ "button",
1327
+ {
1328
+ "aria-controls": `${h.id}-build-panel`,
1329
+ "aria-label": h.label,
1330
+ "aria-selected": A,
1331
+ className: "game-ui-build-category",
1332
+ "data-build-category-id": h.id,
1333
+ disabled: h.disabled,
1334
+ onClick: d && !h.disabled ? () => d(h.id) : void 0,
1335
+ role: "tab",
1336
+ type: "button",
1337
+ children: [
1338
+ /* @__PURE__ */ e(L, { icon: h.icon ?? fe[h.id] ?? "home", size: "sm", style: "line" }),
1339
+ /* @__PURE__ */ e("span", { children: T }),
1340
+ h.meta ? /* @__PURE__ */ e("small", { children: h.meta }) : null
1341
+ ]
1342
+ },
1343
+ h.id
1344
+ );
1345
+ }) }),
1346
+ f.length === 0 || !p ? /* @__PURE__ */ e(P, { description: n, icon: "home", title: s }) : /* @__PURE__ */ e("div", { "aria-label": `${p.label} pieces`, className: "game-ui-build-items", "data-card-layout": w ? "rail" : "list", id: `${p.id}-build-panel`, role: "tabpanel", children: f.map((h) => {
1347
+ const A = h.id === c || h.status === "selected", T = A ? "selected" : h.status ?? "ready", G = !!(h.disabled || T === "locked" || T === "missing"), _ = w ? h.compactLabel ?? h.label : h.label;
1348
+ return /* @__PURE__ */ o(
1349
+ "button",
1350
+ {
1351
+ "aria-label": `${h.label}, ${T}`,
1352
+ "aria-pressed": A,
1353
+ className: "game-ui-build-item",
1354
+ "data-build-category-id": p.id,
1355
+ "data-build-item-id": h.id,
1356
+ "data-build-item-status": T,
1357
+ disabled: G,
1358
+ onClick: u && !G ? () => u(h.id, p.id) : void 0,
1359
+ type: "button",
1360
+ children: [
1361
+ /* @__PURE__ */ e("span", { className: "game-ui-build-item-icon", children: h.previewSrc ? /* @__PURE__ */ e("img", { alt: h.previewAlt ?? "", className: "game-ui-build-item-preview", src: h.previewSrc }) : /* @__PURE__ */ e(L, { icon: h.icon ?? p.icon ?? "home", size: w ? "sm" : "md" }) }),
1362
+ /* @__PURE__ */ o("span", { className: "game-ui-build-item-copy", children: [
1363
+ /* @__PURE__ */ o("span", { className: "game-ui-build-item-badges", children: [
1364
+ /* @__PURE__ */ e(S, { tone: Ga[T], children: T }),
1365
+ h.badges?.map((x) => /* @__PURE__ */ e(S, { tone: x.tone ?? "neutral", children: x.label }, x.label))
1366
+ ] }),
1367
+ /* @__PURE__ */ e("strong", { children: _ }),
1368
+ h.description ? /* @__PURE__ */ e("span", { children: h.description }) : null,
1369
+ h.meta ? /* @__PURE__ */ e("small", { children: h.meta }) : null
1370
+ ] })
1371
+ ]
1372
+ },
1373
+ h.id
1374
+ );
1375
+ }) })
1376
+ ] }) });
1377
+ }
1378
+ function $e({
1379
+ children: a,
1380
+ className: t,
1381
+ closeIcon: i = "close",
1382
+ closeLabel: l = "Close tools",
1383
+ disabled: n = !1,
1384
+ label: s,
1385
+ onOpenChange: r,
1386
+ open: d,
1387
+ panelId: u,
1388
+ title: c,
1389
+ triggerIcon: b = "settings",
1390
+ triggerLabel: g = "Tools",
1391
+ variant: v = "mobile",
1392
+ "data-testid": y
1393
+ }) {
1394
+ const k = ["game-ui-compact-game-drawer", t].filter(Boolean).join(" "), p = u ?? `${c.toLowerCase().replace(/[^a-z0-9]+/g, "-") || "tools"}-drawer-panel`;
1395
+ return /* @__PURE__ */ o("aside", { "aria-label": s, className: k, "data-open": d ? "true" : "false", "data-ui-hook": "compact-game-drawer", "data-variant": v, "data-testid": y, children: [
1396
+ /* @__PURE__ */ o(
1397
+ C,
1398
+ {
1399
+ "aria-controls": p,
1400
+ "aria-expanded": d,
1401
+ className: "game-ui-compact-game-drawer-trigger",
1402
+ disabled: n,
1403
+ onClick: r ? () => r(!d) : void 0,
1404
+ type: "button",
1405
+ variant: "secondary",
1406
+ children: [
1407
+ /* @__PURE__ */ e(L, { icon: d ? i : b, size: "sm", style: "line" }),
1408
+ d ? l : g
1409
+ ]
1410
+ }
1411
+ ),
1412
+ /* @__PURE__ */ e("div", { "aria-hidden": !d, className: "game-ui-compact-game-drawer-panel", "data-drawer-panel": "true", id: p, children: /* @__PURE__ */ e(B, { title: c, tone: "strong", children: a }) })
1413
+ ] });
1414
+ }
1415
+ function $a({ status: a }) {
1416
+ if (!a) return null;
1417
+ const t = typeof a.progressValue == "number" && typeof a.progressMax == "number", i = a.tone === "danger" ? "danger" : a.tone === "warning" ? "warning" : "success", l = a.progressMax ?? 100, n = a.progressValue ?? 0;
1418
+ return /* @__PURE__ */ o("div", { className: "game-ui-terrain-status", "data-status-tone": a.tone ?? "neutral", "data-ui-hook": "terrain-status", children: [
1419
+ /* @__PURE__ */ e(S, { tone: a.tone ?? "neutral", children: a.label }),
1420
+ a.description ? /* @__PURE__ */ e("p", { children: a.description }) : null,
1421
+ t ? /* @__PURE__ */ e(
1422
+ D,
1423
+ {
1424
+ label: a.progressLabel ?? a.label,
1425
+ max: l,
1426
+ showValue: !0,
1427
+ tone: i,
1428
+ value: n
1429
+ }
1430
+ ) : null
1431
+ ] });
1432
+ }
1433
+ function Fa({
1434
+ activeBuildCategoryId: a,
1435
+ activeMaterialId: t,
1436
+ activeModeId: i,
1437
+ activeToolId: l,
1438
+ brush: n,
1439
+ buildCategories: s = [],
1440
+ density: r = "comfortable",
1441
+ disabled: d = !1,
1442
+ materials: u = [],
1443
+ modes: c,
1444
+ onBrushRadiusChange: b,
1445
+ onBrushStrengthChange: g,
1446
+ onBuildCategoryChange: v,
1447
+ onMaterialChange: y,
1448
+ onModeChange: k,
1449
+ onRedo: p,
1450
+ onSelectBuildItem: f,
1451
+ onToolChange: w,
1452
+ onUndo: h,
1453
+ selectedBuildItemId: A,
1454
+ status: T,
1455
+ toolCompactLabelMode: G = "auto",
1456
+ tools: _,
1457
+ undoRedo: x,
1458
+ variant: E = "desktop"
1459
+ }) {
1460
+ return /* @__PURE__ */ o("div", { className: "game-ui-terrain-build-toolbox-body", "data-active-mode": i, "data-active-tool": l, "data-variant": E, children: [
1461
+ /* @__PURE__ */ e($a, { status: T }),
1462
+ /* @__PURE__ */ e(_a, { activeModeId: i, disabled: d, label: "Tool mode", modes: c, onModeChange: k, variant: E }),
1463
+ /* @__PURE__ */ o("div", { className: "game-ui-terrain-build-main-grid", children: [
1464
+ /* @__PURE__ */ e(za, { activeToolId: l, compactLabelMode: G, density: r, disabled: d, label: "Terrain tools", onToolChange: w, tools: _, variant: E }),
1465
+ /* @__PURE__ */ e(Da, { canRedo: x?.canRedo, canUndo: x?.canUndo, disabled: d, label: "Terrain history", onRedo: p, onUndo: h, redoLabel: x?.redoLabel, undoLabel: x?.undoLabel, variant: E }),
1466
+ /* @__PURE__ */ e(Va, { onRadiusChange: b, onStrengthChange: g, state: { ...n, disabled: !!(d || n.disabled) }, variant: E }),
1467
+ u.length > 0 ? /* @__PURE__ */ e(Ha, { activeMaterialId: t, disabled: d, label: "Terrain materials", materials: u, onMaterialChange: y, variant: E }) : null
1468
+ ] }),
1469
+ s.length > 0 ? /* @__PURE__ */ e(
1470
+ Ua,
1471
+ {
1472
+ activeCategoryId: a,
1473
+ categories: s,
1474
+ density: r,
1475
+ label: "Build library",
1476
+ onCategoryChange: v,
1477
+ onSelectItem: f,
1478
+ selectedItemId: A,
1479
+ title: "Build pieces",
1480
+ variant: E
1481
+ }
1482
+ ) : null
1483
+ ] });
1484
+ }
1485
+ function Te({
1486
+ className: a,
1487
+ drawerOpen: t = !1,
1488
+ drawerTitle: i = "Terrain and build tools",
1489
+ label: l,
1490
+ onDrawerOpenChange: n,
1491
+ title: s,
1492
+ variant: r = "desktop",
1493
+ "data-testid": d,
1494
+ ...u
1495
+ }) {
1496
+ const c = ["game-ui-terrain-build-toolbox", a].filter(Boolean).join(" "), b = /* @__PURE__ */ e(Fa, { ...u, variant: r });
1497
+ return r === "mobile" || r === "small-mobile" ? /* @__PURE__ */ e(
1498
+ $e,
1499
+ {
1500
+ className: c,
1501
+ label: l,
1502
+ onOpenChange: n,
1503
+ open: t,
1504
+ title: i,
1505
+ triggerLabel: s,
1506
+ variant: r,
1507
+ "data-testid": d,
1508
+ children: b
1509
+ }
1510
+ ) : /* @__PURE__ */ e(B, { className: c, "data-ui-hook": "terrain-build-toolbox", "data-variant": r, "data-testid": d, title: s, tone: "strong", children: /* @__PURE__ */ e("section", { "aria-label": l, children: b }) });
1511
+ }
1512
+ const Fe = {
1513
+ accepted: "success",
1514
+ blocked: "danger",
1515
+ cancelled: "neutral",
1516
+ draft: "neutral",
1517
+ preview: "ai",
1518
+ queued: "warning",
1519
+ readyForReview: "success",
1520
+ working: "ai"
1521
+ }, je = {
1522
+ accepted: "check",
1523
+ blocked: "alert",
1524
+ cancelled: "close",
1525
+ draft: "scroll",
1526
+ preview: "compass",
1527
+ queued: "hourglass",
1528
+ readyForReview: "vote",
1529
+ working: "energy"
1530
+ }, ja = {
1531
+ active: "ai",
1532
+ blocked: "danger",
1533
+ complete: "success",
1534
+ pending: "neutral"
1535
+ }, Wa = {
1536
+ blocked: "danger",
1537
+ done: "success",
1538
+ idle: "neutral",
1539
+ queued: "warning",
1540
+ working: "ai"
1541
+ }, We = {
1542
+ "local-only": "Local only",
1543
+ mock: "Mock run",
1544
+ "paid-disabled": "Paid provider off"
1545
+ }, Ye = {
1546
+ "local-only": "success",
1547
+ mock: "ai",
1548
+ "paid-disabled": "warning"
1549
+ }, Ya = {
1550
+ accepted: [{ id: "revert", label: "Revert", icon: "undo", tone: "ghost" }],
1551
+ blocked: [
1552
+ { id: "revise", label: "Revise", icon: "scroll", tone: "primary" },
1553
+ { id: "revert", label: "Revert", icon: "undo", tone: "ghost" },
1554
+ { id: "cancel", label: "Cancel", icon: "close", tone: "danger" }
1555
+ ],
1556
+ cancelled: [{ id: "revert", label: "Revert", icon: "undo", tone: "secondary" }],
1557
+ draft: [
1558
+ { id: "preview", label: "Preview", icon: "compass", tone: "primary" },
1559
+ { id: "revise", label: "Revise", icon: "scroll", tone: "secondary" },
1560
+ { id: "cancel", label: "Cancel", icon: "close", tone: "ghost" }
1561
+ ],
1562
+ preview: [
1563
+ { id: "approve", label: "Approve", icon: "check", tone: "primary" },
1564
+ { id: "revise", label: "Revise", icon: "scroll", tone: "secondary" },
1565
+ { id: "cancel", label: "Cancel", icon: "close", tone: "danger" }
1566
+ ],
1567
+ queued: [{ id: "cancel", label: "Cancel", icon: "close", tone: "danger" }],
1568
+ readyForReview: [
1569
+ { id: "approve", label: "Approve", icon: "check", tone: "primary" },
1570
+ { id: "revise", label: "Revise", icon: "scroll", tone: "secondary" },
1571
+ { id: "revert", label: "Revert", icon: "undo", tone: "ghost" }
1572
+ ],
1573
+ working: [{ id: "cancel", label: "Cancel", icon: "close", tone: "danger" }]
1574
+ };
1575
+ function Ke(a, t) {
1576
+ return t || (a === "readyForReview" ? "Ready for review" : a.replace(/([A-Z])/g, " $1").replace(/^./, (i) => i.toUpperCase()));
1577
+ }
1578
+ function Ka(a) {
1579
+ return a === "blocked" || a === "cancelled" ? "danger" : a === "accepted" || a === "readyForReview" ? "success" : a === "queued" || a === "draft" || a === "preview" ? "warning" : "accent";
1580
+ }
1581
+ function qa(a) {
1582
+ switch (a) {
1583
+ case "accepted":
1584
+ return 100;
1585
+ case "blocked":
1586
+ return 42;
1587
+ case "cancelled":
1588
+ return 0;
1589
+ case "draft":
1590
+ return 8;
1591
+ case "preview":
1592
+ return 22;
1593
+ case "queued":
1594
+ return 34;
1595
+ case "readyForReview":
1596
+ return 92;
1597
+ case "working":
1598
+ return 64;
1599
+ }
1600
+ }
1601
+ function Ja(a, t, i) {
1602
+ const l = {
1603
+ disabled: !!(i || a.disabled),
1604
+ id: a.id,
1605
+ label: a.label,
1606
+ tone: a.tone ?? "secondary"
1607
+ };
1608
+ return a.icon && (l.icon = a.icon), a.ariaLabel && (l.ariaLabel = a.ariaLabel), a.meta && (l.meta = a.meta), t && (l.onAction = t), l;
1609
+ }
1610
+ function Za(a) {
1611
+ return a === "danger" || a === "warning" ? "alert" : "status";
1612
+ }
1613
+ function ee(a) {
1614
+ return !!(a.before && a.after);
1615
+ }
1616
+ function qe({
1617
+ className: a,
1618
+ label: t,
1619
+ max: i = 100,
1620
+ progressLabel: l = "Construction progress",
1621
+ showStatusBadge: n = !0,
1622
+ status: s,
1623
+ statusLabel: r,
1624
+ steps: d = [],
1625
+ validationWarnings: u = [],
1626
+ value: c,
1627
+ variant: b = "desktop",
1628
+ "data-testid": g
1629
+ }) {
1630
+ const v = ["game-ui-construction-progress", a].filter(Boolean).join(" "), y = c ?? qa(s), k = Ke(s, r);
1631
+ return /* @__PURE__ */ o("section", { "aria-label": t, className: v, "data-status": s, "data-ui-hook": "construction-progress", "data-variant": b, "data-testid": g, children: [
1632
+ /* @__PURE__ */ o("header", { className: "game-ui-construction-progress-header", children: [
1633
+ /* @__PURE__ */ o("span", { children: [
1634
+ /* @__PURE__ */ e(L, { icon: je[s], size: "sm" }),
1635
+ /* @__PURE__ */ e("strong", { children: l })
1636
+ ] }),
1637
+ n ? /* @__PURE__ */ e(S, { tone: Fe[s], children: k }) : null
1638
+ ] }),
1639
+ /* @__PURE__ */ e(D, { label: l, max: i, showValue: !0, tone: Ka(s), value: y }),
1640
+ d.length > 0 ? /* @__PURE__ */ e("ol", { className: "game-ui-construction-steps", "aria-label": `${l} steps`, children: d.map((p) => /* @__PURE__ */ o("li", { "data-step-status": p.status, children: [
1641
+ /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-construction-step-dot" }),
1642
+ /* @__PURE__ */ o("span", { children: [
1643
+ /* @__PURE__ */ e("strong", { children: p.label }),
1644
+ p.caption ? /* @__PURE__ */ e("small", { children: p.caption }) : null
1645
+ ] }),
1646
+ /* @__PURE__ */ e(S, { tone: ja[p.status], children: p.status })
1647
+ ] }, p.id)) }) : null,
1648
+ u.length > 0 ? /* @__PURE__ */ e("div", { className: "game-ui-construction-warnings", "data-ui-hook": "construction-validation-warnings", children: u.map((p) => /* @__PURE__ */ o("div", { className: "game-ui-construction-warning", "data-warning-tone": p.tone ?? "warning", role: Za(p.tone), children: [
1649
+ /* @__PURE__ */ e(L, { icon: p.tone === "danger" || p.tone === "warning" ? "alert" : "check", size: "sm" }),
1650
+ /* @__PURE__ */ o("span", { children: [
1651
+ /* @__PURE__ */ e("strong", { children: p.label }),
1652
+ p.description ? /* @__PURE__ */ e("small", { children: p.description }) : null
1653
+ ] })
1654
+ ] }, p.id)) }) : null
1655
+ ] });
1656
+ }
1657
+ function Je({
1658
+ actions: a,
1659
+ className: t,
1660
+ disabled: i = !1,
1661
+ label: l,
1662
+ localOnlyLabel: n = "Local-only construction",
1663
+ onAction: s,
1664
+ providerMode: r,
1665
+ status: d,
1666
+ validationWarnings: u = [],
1667
+ variant: c = "desktop",
1668
+ "data-testid": b
1669
+ }) {
1670
+ const g = ["game-ui-construction-approval-bar", t].filter(Boolean).join(" "), v = a ?? Ya[d], y = u.filter((p) => p.tone !== "success").length, k = v.map((p) => Ja(p, s, i));
1671
+ return /* @__PURE__ */ o("section", { "aria-label": l, className: g, "data-status": d, "data-ui-hook": "construction-approval-bar", "data-variant": c, "data-testid": b, children: [
1672
+ /* @__PURE__ */ o("div", { className: "game-ui-construction-approval-meta", children: [
1673
+ r ? /* @__PURE__ */ e(S, { tone: Ye[r], children: We[r] }) : /* @__PURE__ */ e(S, { tone: "success", children: n }),
1674
+ y > 0 ? /* @__PURE__ */ o(S, { tone: "warning", children: [
1675
+ y,
1676
+ " validation warning",
1677
+ y === 1 ? "" : "s"
1678
+ ] }) : /* @__PURE__ */ e(S, { tone: "success", children: "Validation clear" })
1679
+ ] }),
1680
+ k.length > 0 ? /* @__PURE__ */ e(U, { actions: k, density: c === "small-mobile" ? "dense" : "comfortable", label: `${l} actions` }) : null
1681
+ ] });
1682
+ }
1683
+ function Ze({
1684
+ className: a,
1685
+ crew: t,
1686
+ emptyDescription: i = "Robot crew members appear here when a construction job starts.",
1687
+ emptyTitle: l = "No robot crew assigned",
1688
+ label: n,
1689
+ title: s,
1690
+ variant: r = "desktop",
1691
+ "data-testid": d
1692
+ }) {
1693
+ const u = ["game-ui-robot-crew-status", a].filter(Boolean).join(" ");
1694
+ return /* @__PURE__ */ o("section", { "aria-label": n, className: u, "data-ui-hook": "robot-crew-status", "data-variant": r, "data-testid": d, children: [
1695
+ s ? /* @__PURE__ */ e("header", { children: /* @__PURE__ */ e("strong", { children: s }) }) : null,
1696
+ t.length === 0 ? /* @__PURE__ */ e(P, { description: i, icon: "ai", title: l }) : /* @__PURE__ */ e("div", { className: "game-ui-robot-crew-list", children: t.map((c) => /* @__PURE__ */ o("article", { className: "game-ui-robot-crew-member", "data-crew-status": c.status, children: [
1697
+ /* @__PURE__ */ e(L, { icon: c.icon ?? "ai", size: r === "small-mobile" ? "sm" : "md" }),
1698
+ /* @__PURE__ */ o("span", { className: "game-ui-robot-crew-copy", children: [
1699
+ /* @__PURE__ */ e("strong", { children: c.name }),
1700
+ /* @__PURE__ */ e("small", { children: c.role }),
1701
+ c.task ? /* @__PURE__ */ e("em", { children: c.task }) : null
1702
+ ] }),
1703
+ /* @__PURE__ */ e(S, { tone: Wa[c.status], children: c.status })
1704
+ ] }, c.id)) })
1705
+ ] });
1706
+ }
1707
+ function Xe({
1708
+ activeView: a,
1709
+ after: t,
1710
+ before: i,
1711
+ className: l,
1712
+ label: n,
1713
+ onViewChange: s,
1714
+ variant: r = "desktop",
1715
+ "data-testid": d
1716
+ }) {
1717
+ const u = ["game-ui-before-after-toggle", l].filter(Boolean).join(" "), c = a === "before" ? i : t;
1718
+ return /* @__PURE__ */ o("section", { "aria-label": n, className: u, "data-active-view": a, "data-ui-hook": "before-after-toggle", "data-variant": r, "data-testid": d, children: [
1719
+ /* @__PURE__ */ e(
1720
+ Pe,
1721
+ {
1722
+ activeId: a,
1723
+ label: `${n} view`,
1724
+ ...s ? { onSelect: (b) => s(b) } : {},
1725
+ options: [{ id: "before", label: i.label }, { id: "after", label: t.label }]
1726
+ }
1727
+ ),
1728
+ /* @__PURE__ */ o("figure", { className: "game-ui-before-after-preview", children: [
1729
+ c.content ? /* @__PURE__ */ e("div", { className: "game-ui-before-after-content", children: c.content }) : /* @__PURE__ */ e("div", { "aria-hidden": "true", className: "game-ui-before-after-placeholder", children: /* @__PURE__ */ e(L, { icon: a === "before" ? "home" : "check", size: "xl" }) }),
1730
+ c.caption ? /* @__PURE__ */ e("figcaption", { children: c.caption }) : null
1731
+ ] })
1732
+ ] });
1733
+ }
1734
+ function ae({
1735
+ className: a,
1736
+ density: t = "comfortable",
1737
+ job: i,
1738
+ onAction: l,
1739
+ onSelect: n,
1740
+ selected: s = !1,
1741
+ showApprovalBar: r = !0,
1742
+ showBeforeAfter: d = !1,
1743
+ variant: u = "desktop",
1744
+ "data-testid": c
1745
+ }) {
1746
+ const b = ["game-ui-construction-job-card", a].filter(Boolean).join(" "), g = Ke(i.status, i.statusLabel), v = u === "mobile" || u === "small-mobile", y = i.facts ?? [], k = () => n?.(i.id), p = (f) => l?.(f, i.id);
1747
+ return /* @__PURE__ */ o("article", { className: b, "data-density": t, "data-job-id": i.id, "data-selected": s ? "true" : "false", "data-status": i.status, "data-ui-hook": "construction-job-card", "data-variant": u, "data-testid": c, children: [
1748
+ /* @__PURE__ */ o("header", { className: "game-ui-construction-job-header", children: [
1749
+ /* @__PURE__ */ o("button", { "aria-pressed": s, className: "game-ui-construction-job-select", disabled: !n, onClick: k, type: "button", children: [
1750
+ /* @__PURE__ */ e(L, { icon: je[i.status], size: v ? "sm" : "md" }),
1751
+ /* @__PURE__ */ o("span", { children: [
1752
+ /* @__PURE__ */ e("strong", { children: i.title }),
1753
+ i.description ? /* @__PURE__ */ e("small", { children: i.description }) : null
1754
+ ] })
1755
+ ] }),
1756
+ /* @__PURE__ */ o("span", { className: "game-ui-construction-job-badges", children: [
1757
+ /* @__PURE__ */ e(S, { tone: Fe[i.status], children: g }),
1758
+ i.providerMode ? /* @__PURE__ */ e(S, { tone: Ye[i.providerMode], children: We[i.providerMode] }) : null,
1759
+ i.badges?.map((f) => /* @__PURE__ */ e(S, { tone: f.tone ?? "neutral", children: f.label }, f.label))
1760
+ ] })
1761
+ ] }),
1762
+ /* @__PURE__ */ o("div", { className: "game-ui-construction-job-facts", "aria-label": `${i.title} facts`, children: [
1763
+ i.location ? /* @__PURE__ */ o("span", { children: [
1764
+ /* @__PURE__ */ e("small", { children: "Location" }),
1765
+ /* @__PURE__ */ e("b", { children: i.location })
1766
+ ] }) : null,
1767
+ i.estimate ? /* @__PURE__ */ o("span", { children: [
1768
+ /* @__PURE__ */ e("small", { children: "ETA" }),
1769
+ /* @__PURE__ */ e("b", { children: i.estimate })
1770
+ ] }) : null,
1771
+ y.map((f) => /* @__PURE__ */ o("span", { children: [
1772
+ /* @__PURE__ */ e("small", { children: f.label }),
1773
+ /* @__PURE__ */ e("b", { children: f.value })
1774
+ ] }, f.id))
1775
+ ] }),
1776
+ /* @__PURE__ */ e(
1777
+ qe,
1778
+ {
1779
+ label: `${i.title} progress`,
1780
+ progressLabel: i.progressLabel,
1781
+ status: i.status,
1782
+ statusLabel: g,
1783
+ steps: v ? [] : i.steps,
1784
+ validationWarnings: i.validationWarnings,
1785
+ value: i.progressValue,
1786
+ max: i.progressMax,
1787
+ variant: u
1788
+ }
1789
+ ),
1790
+ d && ee(i) ? /* @__PURE__ */ e(Xe, { activeView: "after", after: i.after, before: i.before, label: `${i.title} preview`, variant: u }) : null,
1791
+ i.crew && i.crew.length > 0 ? /* @__PURE__ */ e(Ze, { crew: i.crew, label: `${i.title} robot crew`, variant: u }) : null,
1792
+ r ? /* @__PURE__ */ e(
1793
+ Je,
1794
+ {
1795
+ actions: i.actions,
1796
+ label: `${i.title} approval`,
1797
+ onAction: p,
1798
+ providerMode: i.providerMode,
1799
+ status: i.status,
1800
+ validationWarnings: i.validationWarnings,
1801
+ variant: u
1802
+ }
1803
+ ) : null
1804
+ ] });
1805
+ }
1806
+ function Xa({
1807
+ children: a,
1808
+ className: t,
1809
+ closeLabel: i = "Close jobs",
1810
+ disabled: l = !1,
1811
+ jobs: n = [],
1812
+ label: s,
1813
+ onAction: r,
1814
+ onOpenChange: d,
1815
+ onSelectJob: u,
1816
+ open: c,
1817
+ panelId: b = "game-compact-job-drawer-panel",
1818
+ selectedJobId: g,
1819
+ title: v,
1820
+ triggerLabel: y = "Construction jobs",
1821
+ variant: k = "mobile",
1822
+ "data-testid": p
1823
+ }) {
1824
+ const f = ["game-ui-compact-job-drawer", t].filter(Boolean).join(" ");
1825
+ return /* @__PURE__ */ e(
1826
+ $e,
1827
+ {
1828
+ className: f,
1829
+ closeLabel: i,
1830
+ disabled: l,
1831
+ label: s,
1832
+ onOpenChange: d,
1833
+ open: c,
1834
+ panelId: b,
1835
+ title: v,
1836
+ triggerIcon: "energy",
1837
+ triggerLabel: y,
1838
+ variant: k,
1839
+ "data-testid": p,
1840
+ children: a ?? /* @__PURE__ */ e("div", { className: "game-ui-compact-job-drawer-list", children: n.map((w) => /* @__PURE__ */ e(
1841
+ ae,
1842
+ {
1843
+ density: "dense",
1844
+ job: w,
1845
+ onAction: r,
1846
+ onSelect: u,
1847
+ selected: w.id === g,
1848
+ showApprovalBar: !1,
1849
+ variant: k
1850
+ },
1851
+ w.id
1852
+ )) })
1853
+ }
1854
+ );
1855
+ }
1856
+ function Ce({
1857
+ activePreviewView: a = "after",
1858
+ className: t,
1859
+ density: i = "comfortable",
1860
+ drawerOpen: l = !1,
1861
+ emptyDescription: n = "Draft construction jobs will appear here before any provider call is allowed.",
1862
+ emptyTitle: s = "No construction jobs",
1863
+ jobs: r,
1864
+ label: d,
1865
+ onAction: u,
1866
+ onDrawerOpenChange: c,
1867
+ onPreviewViewChange: b,
1868
+ onSelectJob: g,
1869
+ selectedJobId: v,
1870
+ subtitle: y,
1871
+ title: k,
1872
+ variant: p = "desktop",
1873
+ "data-testid": f
1874
+ }) {
1875
+ const w = ["game-ui-contractor-panel", t].filter(Boolean).join(" "), h = r.find((T) => T.id === v) ?? r[0];
1876
+ return p === "mobile" || p === "small-mobile" ? /* @__PURE__ */ o("section", { "aria-label": d, className: w, "data-ui-hook": "contractor-panel", "data-variant": p, "data-testid": f, children: [
1877
+ /* @__PURE__ */ e(
1878
+ Xa,
1879
+ {
1880
+ jobs: r,
1881
+ label: `${d} drawer`,
1882
+ onAction: u,
1883
+ onOpenChange: c,
1884
+ onSelectJob: g,
1885
+ open: l,
1886
+ selectedJobId: h?.id,
1887
+ title: k,
1888
+ triggerLabel: "Contractor",
1889
+ variant: p
1890
+ }
1891
+ ),
1892
+ h ? /* @__PURE__ */ e(ae, { density: "dense", job: h, onAction: u, onSelect: g, selected: !0, showBeforeAfter: ee(h), variant: p }) : /* @__PURE__ */ e(P, { description: n, icon: "energy", title: s })
1893
+ ] }) : /* @__PURE__ */ e(B, { className: w, "data-ui-hook": "contractor-panel", "data-variant": p, "data-testid": f, title: k, tone: "strong", children: /* @__PURE__ */ o("section", { "aria-label": d, "data-density": i, children: [
1894
+ y ? /* @__PURE__ */ e("p", { className: "game-ui-contractor-panel-subtitle", children: y }) : null,
1895
+ r.length === 0 ? /* @__PURE__ */ e(P, { description: n, icon: "energy", title: s }) : null,
1896
+ r.length > 0 ? /* @__PURE__ */ o("div", { className: "game-ui-contractor-panel-grid", children: [
1897
+ /* @__PURE__ */ e("div", { className: "game-ui-contractor-job-list", "aria-label": "Construction job queue", children: r.map((T) => /* @__PURE__ */ e(
1898
+ ae,
1899
+ {
1900
+ density: i,
1901
+ job: T,
1902
+ onAction: u,
1903
+ onSelect: g,
1904
+ selected: T.id === h?.id,
1905
+ showApprovalBar: !1,
1906
+ variant: p
1907
+ },
1908
+ T.id
1909
+ )) }),
1910
+ h ? /* @__PURE__ */ o("aside", { className: "game-ui-contractor-detail", "aria-label": `${h.title} detail`, children: [
1911
+ /* @__PURE__ */ e(
1912
+ qe,
1913
+ {
1914
+ label: `${h.title} progress detail`,
1915
+ progressLabel: h.progressLabel,
1916
+ status: h.status,
1917
+ statusLabel: h.statusLabel,
1918
+ steps: h.steps,
1919
+ validationWarnings: h.validationWarnings,
1920
+ value: h.progressValue,
1921
+ max: h.progressMax,
1922
+ variant: p
1923
+ }
1924
+ ),
1925
+ ee(h) ? /* @__PURE__ */ e(
1926
+ Xe,
1927
+ {
1928
+ activeView: a,
1929
+ after: h.after,
1930
+ before: h.before,
1931
+ label: `${h.title} before and after`,
1932
+ onViewChange: b,
1933
+ variant: p
1934
+ }
1935
+ ) : null,
1936
+ /* @__PURE__ */ e(Ze, { crew: h.crew ?? [], label: `${h.title} robot crew`, title: "Robot crew", variant: p }),
1937
+ /* @__PURE__ */ e(
1938
+ Je,
1939
+ {
1940
+ actions: h.actions,
1941
+ label: `${h.title} approval`,
1942
+ onAction: u ? (T) => u(T, h.id) : void 0,
1943
+ providerMode: h.providerMode,
1944
+ status: h.status,
1945
+ validationWarnings: h.validationWarnings,
1946
+ variant: p
1947
+ }
1948
+ )
1949
+ ] }) : null
1950
+ ] }) : null
1951
+ ] }) });
1952
+ }
1953
+ function ye(...a) {
1954
+ return a.filter(Boolean).join(" ");
1955
+ }
1956
+ const Qa = {
1957
+ collapse: "Collapse",
1958
+ expand: "Expand"
1959
+ };
1960
+ function Gi({
1961
+ actions: a,
1962
+ children: t,
1963
+ className: i,
1964
+ defaultOpen: l = !0,
1965
+ labels: n,
1966
+ onOpenChange: s,
1967
+ open: r,
1968
+ title: d,
1969
+ tone: u = "default",
1970
+ ...c
1971
+ }) {
1972
+ const b = Y(), [g, v] = M(l), y = r ?? g, k = { ...Qa, ...n }, p = () => {
1973
+ const f = !y;
1974
+ r === void 0 && v(f), s?.(f);
1975
+ };
1976
+ return /* @__PURE__ */ o(
1977
+ "section",
1978
+ {
1979
+ ...c,
1980
+ className: ye("game-ui-collapsible", i),
1981
+ "data-open": y,
1982
+ "data-panel-tone": u,
1983
+ children: [
1984
+ /* @__PURE__ */ o("header", { className: "game-ui-collapsible-header", children: [
1985
+ /* @__PURE__ */ e("h3", { className: "game-ui-collapsible-heading", children: /* @__PURE__ */ o(
1986
+ "button",
1987
+ {
1988
+ "aria-controls": b,
1989
+ "aria-expanded": y,
1990
+ className: "game-ui-collapsible-toggle",
1991
+ onClick: p,
1992
+ title: y ? k.collapse : k.expand,
1993
+ type: "button",
1994
+ children: [
1995
+ /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-collapsible-chevron" }),
1996
+ /* @__PURE__ */ e("span", { className: "game-ui-collapsible-title", children: d })
1997
+ ]
1998
+ }
1999
+ ) }),
2000
+ a ? /* @__PURE__ */ e("span", { className: "game-ui-collapsible-actions", children: a }) : null
2001
+ ] }),
2002
+ /* @__PURE__ */ e("div", { className: "game-ui-collapsible-region", id: b, children: /* @__PURE__ */ e("div", { className: "game-ui-collapsible-clip", children: /* @__PURE__ */ e("div", { className: "game-ui-collapsible-content", children: t }) }) })
2003
+ ]
2004
+ }
2005
+ );
2006
+ }
2007
+ const ei = {
2008
+ close: "Close",
2009
+ maximize: "Maximize",
2010
+ minimize: "Minimize",
2011
+ restore: "Restore"
2012
+ };
2013
+ function j({ kind: a }) {
2014
+ return /* @__PURE__ */ e("svg", { "aria-hidden": "true", fill: "none", height: "14", viewBox: "0 0 14 14", width: "14", children: /* @__PURE__ */ e("path", { d: {
2015
+ close: "M3 3l8 8M11 3l-8 8",
2016
+ maximize: "M3 5V3h2M9 3h2v2M11 9v2H9M5 11H3V9",
2017
+ minimize: "M3 7h8",
2018
+ restore: "M4 6h6v5H4zM6 6V4h6v5h-2"
2019
+ }[a], stroke: "currentColor", strokeLinecap: "round", strokeWidth: "2" }) });
2020
+ }
2021
+ function Oi({
2022
+ allowMaximize: a = !0,
2023
+ allowMinimize: t = !0,
2024
+ children: i,
2025
+ className: l,
2026
+ defaultState: n = "normal",
2027
+ footer: s,
2028
+ icon: r,
2029
+ labels: d,
2030
+ onClose: u,
2031
+ onStateChange: c,
2032
+ state: b,
2033
+ title: g,
2034
+ ...v
2035
+ }) {
2036
+ const [y, k] = M(n), p = b ?? y, f = { ...ei, ...d }, w = (T) => {
2037
+ b === void 0 && k(T), c?.(T);
2038
+ }, h = p === "minimized", A = p === "maximized";
2039
+ return /* @__PURE__ */ o(
2040
+ "section",
2041
+ {
2042
+ ...v,
2043
+ "aria-label": g,
2044
+ className: ye("game-ui-window", l),
2045
+ "data-window-state": p,
2046
+ role: "group",
2047
+ children: [
2048
+ /* @__PURE__ */ o("header", { className: "game-ui-window-titlebar", children: [
2049
+ r ? /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "game-ui-window-icon", children: r }) : null,
2050
+ /* @__PURE__ */ e("h3", { className: "game-ui-window-title", children: g }),
2051
+ /* @__PURE__ */ o("span", { className: "game-ui-window-actions", children: [
2052
+ t ? /* @__PURE__ */ e(
2053
+ "button",
2054
+ {
2055
+ "aria-label": h ? f.restore : f.minimize,
2056
+ className: "game-ui-icon-button game-ui-window-button",
2057
+ onClick: () => w(h ? "normal" : "minimized"),
2058
+ type: "button",
2059
+ children: /* @__PURE__ */ e(j, { kind: h ? "restore" : "minimize" })
2060
+ }
2061
+ ) : null,
2062
+ a ? /* @__PURE__ */ e(
2063
+ "button",
2064
+ {
2065
+ "aria-label": A ? f.restore : f.maximize,
2066
+ className: "game-ui-icon-button game-ui-window-button",
2067
+ onClick: () => w(A ? "normal" : "maximized"),
2068
+ type: "button",
2069
+ children: /* @__PURE__ */ e(j, { kind: A ? "restore" : "maximize" })
2070
+ }
2071
+ ) : null,
2072
+ u ? /* @__PURE__ */ e(
2073
+ "button",
2074
+ {
2075
+ "aria-label": f.close,
2076
+ className: "game-ui-icon-button game-ui-window-button",
2077
+ onClick: u,
2078
+ type: "button",
2079
+ children: /* @__PURE__ */ e(j, { kind: "close" })
2080
+ }
2081
+ ) : null
2082
+ ] })
2083
+ ] }),
2084
+ /* @__PURE__ */ e("div", { className: "game-ui-window-region", children: /* @__PURE__ */ o("div", { className: "game-ui-window-clip", children: [
2085
+ /* @__PURE__ */ e("div", { className: "game-ui-window-body", children: i }),
2086
+ s ? /* @__PURE__ */ e("footer", { className: "game-ui-window-footer", children: s }) : null
2087
+ ] }) })
2088
+ ]
2089
+ }
2090
+ );
2091
+ }
2092
+ function Pi({
2093
+ children: a,
2094
+ className: t,
2095
+ closeLabel: i = "Close",
2096
+ closeOnBackdrop: l = !0,
2097
+ footer: n,
2098
+ onClose: s,
2099
+ open: r,
2100
+ size: d = "md",
2101
+ title: u
2102
+ }) {
2103
+ const c = aa(null), b = Y();
2104
+ te(() => {
2105
+ const v = c.current;
2106
+ v && (r && !v.open && v.showModal(), !r && v.open && v.close());
2107
+ }, [r]);
2108
+ const g = (v) => {
2109
+ l && v.target === c.current && s();
2110
+ };
2111
+ return /* @__PURE__ */ e(
2112
+ "dialog",
2113
+ {
2114
+ "aria-labelledby": b,
2115
+ className: ye("game-ui-modal", t),
2116
+ "data-size": d,
2117
+ onCancel: (v) => {
2118
+ v.preventDefault(), s();
2119
+ },
2120
+ onClick: g,
2121
+ ref: c,
2122
+ children: /* @__PURE__ */ o("div", { className: "game-ui-modal-frame", children: [
2123
+ /* @__PURE__ */ o("header", { className: "game-ui-modal-header", children: [
2124
+ /* @__PURE__ */ e("h2", { className: "game-ui-modal-title", id: b, children: u }),
2125
+ /* @__PURE__ */ e(
2126
+ "button",
2127
+ {
2128
+ "aria-label": i,
2129
+ className: "game-ui-icon-button game-ui-window-button",
2130
+ onClick: s,
2131
+ type: "button",
2132
+ children: /* @__PURE__ */ e(j, { kind: "close" })
2133
+ }
2134
+ )
2135
+ ] }),
2136
+ /* @__PURE__ */ e("div", { className: "game-ui-modal-body", children: r ? a : null }),
2137
+ n ? /* @__PURE__ */ e("footer", { className: "game-ui-modal-footer", children: n }) : null
2138
+ ] })
2139
+ }
2140
+ );
2141
+ }
2142
+ const ai = [
2143
+ {
2144
+ id: "history-human-long",
2145
+ kind: "human",
2146
+ meta: "Round 2 · public table",
2147
+ speaker: "Mika",
2148
+ text: "This answer feels rehearsed because it names every possibility but never risks a real preference."
2149
+ },
2150
+ {
2151
+ id: "history-zh-long",
2152
+ kind: "mystery",
2153
+ meta: "第 2 局 · 桌边发言",
2154
+ speaker: "Noa",
2155
+ text: "这段回答太顺了,像是在把所有安全选项都摆出来,却故意不留下能被追问的破绽。"
2156
+ },
2157
+ {
2158
+ id: "history-system",
2159
+ kind: "system",
2160
+ meta: "Reveal soon",
2161
+ speaker: "Table",
2162
+ text: "Three votes are locked. One more read can still change the pact."
2163
+ }
2164
+ ], ii = [
2165
+ { id: "history-human-long", kind: "human", meta: "第 2 局 · 公开桌", speaker: "Mika", text: "这个回答像背稿——把每种可能都点了一遍,却从不押一个真实的偏好。" },
2166
+ { id: "history-zh-long", kind: "mystery", meta: "第 2 局 · 桌边发言", speaker: "Noa", text: "这段回答太顺了,像是在把所有安全选项都摆出来,却故意不留下能被追问的破绽。" },
2167
+ { id: "history-system", kind: "system", meta: "即将揭晓", speaker: "牌桌", text: "三票已锁定。再读一轮,仍可能改写这份密约。" }
2168
+ ], Qe = {
2169
+ en: {
2170
+ triggerLabel: "EN",
2171
+ langMenuLabel: "Preview language",
2172
+ heroTitle: "Clay game UI kit",
2173
+ heroBody: "Self-contained React 19 + TypeScript game UI kit — zero runtime dependencies, 100% standard CSS. Tokens are CSS variables and the components do not depend on any host store or i18n.",
2174
+ sections: { tokens: "Tokens", icons: "Icon families", typography: "Typography scale", components: "Component surface", forms: "Forms, inputs and status", firstSession: "First-session shell", orientation: "Orientation gate preview", responsive: "Responsive proof targets" },
2175
+ tokenGroups: { colors: "colors", semantic: "semantic", typography: "typography", spacing: "spacing", radius: "radius", elevation: "elevation", motion: "motion", layers: "layers", targets: "targets", assetSizing: "asset sizing" },
2176
+ iconsIntro: "Every icon ships in two families. Cards default to the sculpted game family; the flat line family is the utility alternate.",
2177
+ gallery: {
2178
+ gameLabel: "Game · primary",
2179
+ gameHint: "Sculpted, colorful clay objects — the default, on-brand look for anything a player sees.",
2180
+ lineLabel: "Line · alternate",
2181
+ lineHint: "Flat white glyphs for dense toolbars or when a sculpted object would feel too heavy.",
2182
+ spriteLabel: "Game sprites · decorative",
2183
+ spriteHint: "Loot, weapons, currency and rewards from the same clay pack. For popups, inventories and win screens — not buttons or toolbars. Kept out of the UI icon set on purpose."
2184
+ },
2185
+ tiles: {
2186
+ daily: { badge: "solo", kicker: "Daily", title: "Daily Turing Challenge", summary: "Read one case, pick the AI, share the result." },
2187
+ portal: { badge: "free guests", kicker: "Portal", title: "Tavern Portal", summary: "Enter a code, resume a table, or open your own." },
2188
+ host: { kicker: "Host Gate", title: "Open my own table", summary: "Only hosts see account and battery checks. Guests never do." }
2189
+ },
2190
+ forms: {
2191
+ formsTitle: "Join a table",
2192
+ roomCodeLabel: "Room code",
2193
+ roomCodeHint: "Ask the host for the 6-character code.",
2194
+ roomCodePlaceholder: "74X8VB",
2195
+ nameLabel: "Display name",
2196
+ namePlaceholder: "How should the table see you?",
2197
+ readLabel: "Your read",
2198
+ readPlaceholder: "Type why this one feels human…",
2199
+ readError: "A read needs at least a few words.",
2200
+ rememberLabel: "Remember me on this device",
2201
+ displayTitle: "Players and status",
2202
+ revealLabel: "Reveal countdown",
2203
+ batteryLabel: "Batteries",
2204
+ emptyTitle: "No open tables yet",
2205
+ emptyBody: "Be the first to host. Guests join free through your invite.",
2206
+ emptyCta: "Open my own table",
2207
+ guestName: "Guest 74"
2208
+ },
2209
+ type: { kicker: "Round status", h1: "One of us isn’t.", h2: "Read the table, vote, reveal.", body: "Clay UI text remains DOM-rendered for localization and accessibility while the game world stays visible underneath.", small: "Reduced-motion keeps texture, shadow, and hierarchy but removes non-essential movement." },
2210
+ buttons: {
2211
+ panelTitle: "Buttons and controls",
2212
+ openTable: "Open my own table",
2213
+ useCode: "Use room code",
2214
+ continueHost: "Continue as host",
2215
+ readyUp: "Ready up",
2216
+ leaveTable: "Leave table",
2217
+ waiting: "Waiting",
2218
+ settingsTip: "Compact settings affordance",
2219
+ copyInvite: "Copy invite",
2220
+ aiBadge: "AI?",
2221
+ readyBadge: "Ready",
2222
+ hostGateBadge: "Host gate",
2223
+ segmentedLabel: "Preview mode",
2224
+ segDaily: "Daily",
2225
+ segLive: "Live room",
2226
+ segTokens: "Tokens",
2227
+ tabsPortal: "Portal",
2228
+ tabsVote: "Vote",
2229
+ tabsHistory: "History",
2230
+ radialLabel: "Emote wheel",
2231
+ wave: "Wave",
2232
+ think: "Think",
2233
+ doubt: "Doubt",
2234
+ sliderLabel: "Effects volume",
2235
+ toggleLabel: "Sound on"
2236
+ },
2237
+ hud: { label: "Persistent HUD cluster", youAre: "You are", roleValue: "Resistance", rolePrivate: "private", room: "Room", reveal: "Reveal", tools: "HUD tools", history: "History", settings: "Settings", calloutA: "Too perfect.", calloutB: "Maybe.", emote: "😀 Emote", sendRead: "Send read" },
2238
+ modals: { dialogTitle: "Host Gate", dialogBody: "Open your own table as host. Guests join free through your invite link or code.", actionsLabel: "Host gate actions", confirm: "Confirm host table", back: "Back to Portal", panelTitle: "Toast / loading / error", toastOk: "Seat confirmed. Waiting for the table host.", toastErr: "That room code expired. Ask for a fresh Portal link.", loading: "Opening the tavern portal…", loadingErr: "The portal could not reach the tavern." },
2239
+ cards: { fanTitle: "Card fan", fanLabel: "Reveal card fan", human: "Human", ai: "AI", sympathizer: "Sympathizer", assetTitle: "Asset inventory reference", assetNote: "The kit exports source asset paths and inline SVG fallbacks. Source inventory includes:" },
2240
+ firstSession: {
2241
+ controls: "First session controls",
2242
+ emote: "Emote",
2243
+ goalLabel: "Goal",
2244
+ goalValue: "Find the AI",
2245
+ streak: "Daily",
2246
+ guest: "guest",
2247
+ history: "History",
2248
+ hud: "First session HUD",
2249
+ input: "Type a read",
2250
+ moveBadge: "Move",
2251
+ move: "Drag to inspect the table",
2252
+ roomLabel: "Room",
2253
+ roomValue: "Portal",
2254
+ roleLabel: "Role",
2255
+ roleValue: "Guest",
2256
+ settings: "Settings",
2257
+ shell: "First session shell",
2258
+ timerLabel: "Timer",
2259
+ tools: "Player tools",
2260
+ wardrobe: "Wardrobe",
2261
+ playerName: "Guest 74",
2262
+ obBadge: "First table",
2263
+ obBody: "The package keeps onboarding copy injectable so the host app owns product language and routing.",
2264
+ obSkip: "Skip",
2265
+ obStart: "Start playing",
2266
+ obTitle: "Learn the table in 30 seconds",
2267
+ obMoveT: "Move",
2268
+ obMoveB: "Look around the clay table.",
2269
+ obReadT: "Read",
2270
+ obReadB: "Notice who sounds too clean.",
2271
+ obVoteT: "Vote",
2272
+ obVoteB: "Lock your guess before reveal."
2273
+ },
2274
+ responsive: { desktop: "desktop", mobileLandscape: "mobile landscape" },
2275
+ orientation: { title: "Please rotate your device", body: "Clay game surfaces are tuned for a landscape table. Rotate before live chat so keyboard, emotes, and vote rail do not crush the playfield.", cta: "Try landscape", badge: "Landscape only", hint: "Rotate manually if this browser blocks automatic landscape lock." },
2276
+ historyLabel: "Round history",
2277
+ history: ai
2278
+ },
2279
+ "zh-CN": {
2280
+ triggerLabel: "中",
2281
+ langMenuLabel: "预览语言",
2282
+ heroTitle: "黏土游戏 UI 套件",
2283
+ heroBody: "自包含的 React 19 + TypeScript 游戏 UI 组件库——零运行时依赖、100% 标准 CSS。令牌即 CSS 变量,组件不依赖任何宿主状态库或 i18n。",
2284
+ sections: { tokens: "设计令牌", icons: "图标双族", typography: "字号层级", components: "组件总览", forms: "表单、输入与状态", firstSession: "首次会话外壳", orientation: "横屏门预览", responsive: "响应式验证目标" },
2285
+ tokenGroups: { colors: "颜色", semantic: "语义", typography: "字体", spacing: "间距", radius: "圆角", elevation: "阴影", motion: "动效", layers: "层级", targets: "触控目标", assetSizing: "资源尺寸" },
2286
+ iconsIntro: "每个图标都有两族。卡片默认用立体游戏风,扁平线性风是工具型备选。",
2287
+ gallery: {
2288
+ gameLabel: "游戏风 · 主用",
2289
+ gameHint: "立体、彩色的黏土实物。玩家能看到的地方默认都用这一族,最贴合品牌。",
2290
+ lineLabel: "线性 · 备选",
2291
+ lineHint: "扁平白色线条图标,适合密集工具栏,或立体图标显得太重的场合。",
2292
+ spriteLabel: "游戏素材 · 装饰",
2293
+ spriteHint: "同一套黏土包里的战利品、武器、货币与奖励。用于奖励弹窗、背包、胜利结算等场景,不用于按钮或工具栏。刻意不放进 UI 图标集,以免污染界面词汇。"
2294
+ },
2295
+ tiles: {
2296
+ daily: { badge: "单人", kicker: "每日", title: "每日图灵挑战", summary: "读一个案例,指认 AI,分享结果。" },
2297
+ portal: { badge: "免费加入", kicker: "传送门", title: "酒馆传送门", summary: "输入房号、恢复牌桌,或自己开一桌。" },
2298
+ host: { kicker: "房主门槛", title: "开我自己的牌桌", summary: "只有房主看到账号与电量校验,客人永远看不到。" }
2299
+ },
2300
+ forms: {
2301
+ formsTitle: "加入牌桌",
2302
+ roomCodeLabel: "房间号",
2303
+ roomCodeHint: "向房主要 6 位房间号。",
2304
+ roomCodePlaceholder: "74X8VB",
2305
+ nameLabel: "显示昵称",
2306
+ namePlaceholder: "牌桌上别人怎么称呼你?",
2307
+ readLabel: "你的判断",
2308
+ readPlaceholder: "说说为什么觉得这个是真人…",
2309
+ readError: "判断至少要写几个字。",
2310
+ rememberLabel: "在此设备上记住我",
2311
+ displayTitle: "玩家与状态",
2312
+ revealLabel: "揭晓倒计时",
2313
+ batteryLabel: "电量",
2314
+ emptyTitle: "还没有开放的牌桌",
2315
+ emptyBody: "来当第一个房主吧。客人通过你的邀请免费加入。",
2316
+ emptyCta: "开我自己的牌桌",
2317
+ guestName: "访客 74"
2318
+ },
2319
+ type: { kicker: "回合状态", h1: '我们之中有"假"的。', h2: "读牌桌、投票、揭晓。", body: "黏土 UI 文字始终由 DOM 渲染,方便本地化与无障碍,而游戏世界仍透在下方可见。", small: "降低动效会保留质感、阴影与层次,只去掉非必要的运动。" },
2320
+ buttons: {
2321
+ panelTitle: "按钮与控件",
2322
+ openTable: "开我自己的牌桌",
2323
+ useCode: "用房间号",
2324
+ continueHost: "以房主继续",
2325
+ readyUp: "准备就绪",
2326
+ leaveTable: "离开牌桌",
2327
+ waiting: "等待中",
2328
+ settingsTip: "紧凑的设置入口",
2329
+ copyInvite: "复制邀请",
2330
+ aiBadge: "AI?",
2331
+ readyBadge: "就绪",
2332
+ hostGateBadge: "房主门槛",
2333
+ segmentedLabel: "预览模式",
2334
+ segDaily: "每日",
2335
+ segLive: "在线房",
2336
+ segTokens: "令牌",
2337
+ tabsPortal: "传送门",
2338
+ tabsVote: "投票",
2339
+ tabsHistory: "历史",
2340
+ radialLabel: "表情轮盘",
2341
+ wave: "挥手",
2342
+ think: "思考",
2343
+ doubt: "怀疑",
2344
+ sliderLabel: "音效音量",
2345
+ toggleLabel: "声音开"
2346
+ },
2347
+ hud: { label: "常驻 HUD 集群", youAre: "你的身份", roleValue: "反抗军", rolePrivate: "私密", room: "房间", reveal: "揭晓", tools: "HUD 工具", history: "历史", settings: "设置", calloutA: "太完美了。", calloutB: "也许吧。", emote: "😀 表情", sendRead: "发送判断" },
2348
+ modals: { dialogTitle: "房主门槛", dialogBody: "以房主身份开自己的牌桌。客人通过你的邀请链接或房号免费加入。", actionsLabel: "房主门槛操作", confirm: "确认开桌", back: "返回传送门", panelTitle: "提示 / 加载 / 错误", toastOk: "座位已确认,正在等待房主。", toastErr: "该房号已过期,请向房主要新的传送门链接。", loading: "正在开启酒馆传送门…", loadingErr: "传送门无法连到酒馆。" },
2349
+ cards: { fanTitle: "卡牌扇", fanLabel: "揭晓卡牌扇", human: "真人", ai: "AI", sympathizer: "同情者", assetTitle: "资源清单参考", assetNote: "套件导出源资源路径与内联 SVG 兜底。源清单包含:" },
2350
+ firstSession: {
2351
+ controls: "首次会话控件",
2352
+ emote: "表情",
2353
+ goalLabel: "目标",
2354
+ goalValue: "找出 AI",
2355
+ streak: "连续",
2356
+ guest: "访客",
2357
+ history: "历史",
2358
+ hud: "首次会话 HUD",
2359
+ input: "输入判断",
2360
+ moveBadge: "移动",
2361
+ move: "拖动以查看牌桌",
2362
+ roomLabel: "房间",
2363
+ roomValue: "传送门",
2364
+ roleLabel: "身份",
2365
+ roleValue: "客人",
2366
+ settings: "设置",
2367
+ shell: "首次会话外壳",
2368
+ timerLabel: "计时",
2369
+ tools: "玩家工具",
2370
+ wardrobe: "衣橱",
2371
+ playerName: "访客 74",
2372
+ obBadge: "第一桌",
2373
+ obBody: "套件让引导文案可注入,所以由宿主 App 掌管产品语言与路由。",
2374
+ obSkip: "跳过",
2375
+ obStart: "开始游戏",
2376
+ obTitle: "30 秒学会这一桌",
2377
+ obMoveT: "移动",
2378
+ obMoveB: "环顾这张黏土牌桌。",
2379
+ obReadT: "研判",
2380
+ obReadB: "留意谁说得太干净。",
2381
+ obVoteT: "投票",
2382
+ obVoteB: "揭晓前锁定你的判断。"
2383
+ },
2384
+ responsive: { desktop: "桌面", mobileLandscape: "手机横屏" },
2385
+ orientation: { title: "请旋转你的设备", body: "黏土游戏界面是为横屏牌桌调校的。开聊前请先横屏,以免键盘、表情与投票栏挤压牌面。", cta: "试试横屏", badge: "仅限横屏", hint: "若浏览器拦截了自动横屏锁定,请手动旋转。" },
2386
+ historyLabel: "回合历史",
2387
+ history: ii
2388
+ }
2389
+ }, ea = ia(Qe.en), R = () => ta(ea), ti = [
2390
+ { id: "colors", tokens: N },
2391
+ { id: "semantic", tokens: ne },
2392
+ { id: "typography", tokens: le },
2393
+ { id: "spacing", tokens: oe },
2394
+ { id: "radius", tokens: se },
2395
+ { id: "elevation", tokens: re },
2396
+ { id: "motion", tokens: ce },
2397
+ { id: "layers", tokens: de },
2398
+ { id: "targets", tokens: me },
2399
+ { id: "assetSizing", tokens: ue }
2400
+ ];
2401
+ function ni({ id: a, label: t, tokens: i }) {
2402
+ return /* @__PURE__ */ o("article", { className: "game-ui-token-card", children: [
2403
+ /* @__PURE__ */ e("h3", { children: t }),
2404
+ /* @__PURE__ */ e("div", { className: "game-ui-token-grid", children: Object.entries(i).map(([l, n]) => /* @__PURE__ */ o("div", { className: "game-ui-token-row", children: [
2405
+ /* @__PURE__ */ e("span", { children: l }),
2406
+ /* @__PURE__ */ e("code", { children: String(n) })
2407
+ ] }, `${a}-${l}`)) })
2408
+ ] });
2409
+ }
2410
+ function li() {
2411
+ return /* @__PURE__ */ e("div", { "aria-label": "Clay color swatches", className: "game-ui-swatch-grid", children: Object.entries(N).map(([a, t]) => /* @__PURE__ */ o("figure", { className: "game-ui-swatch", children: [
2412
+ /* @__PURE__ */ e("span", { style: { background: t } }),
2413
+ /* @__PURE__ */ o("figcaption", { children: [
2414
+ /* @__PURE__ */ e("strong", { children: a }),
2415
+ /* @__PURE__ */ e("code", { children: t })
2416
+ ] })
2417
+ ] }, a)) });
2418
+ }
2419
+ function oi() {
2420
+ const { type: a } = R();
2421
+ return /* @__PURE__ */ o("div", { className: "game-ui-type-scale", children: [
2422
+ /* @__PURE__ */ e("p", { className: "game-ui-type-kicker", children: a.kicker }),
2423
+ /* @__PURE__ */ e("h1", { children: a.h1 }),
2424
+ /* @__PURE__ */ e("h2", { children: a.h2 }),
2425
+ /* @__PURE__ */ e("p", { children: a.body }),
2426
+ /* @__PURE__ */ e("small", { children: a.small })
2427
+ ] });
2428
+ }
2429
+ function si() {
2430
+ const { buttons: a } = R();
2431
+ return /* @__PURE__ */ o(B, { title: a.panelTitle, tone: "strong", children: [
2432
+ /* @__PURE__ */ o("div", { className: "game-ui-component-row", children: [
2433
+ /* @__PURE__ */ e(C, { variant: "primary", children: a.openTable }),
2434
+ /* @__PURE__ */ e(C, { variant: "secondary", children: a.useCode }),
2435
+ /* @__PURE__ */ e(C, { variant: "ghost", children: a.continueHost }),
2436
+ /* @__PURE__ */ e(C, { variant: "success", children: a.readyUp }),
2437
+ /* @__PURE__ */ e(C, { variant: "danger", children: a.leaveTable }),
2438
+ /* @__PURE__ */ e(C, { disabled: !0, variant: "secondary", children: a.waiting })
2439
+ ] }),
2440
+ /* @__PURE__ */ o("div", { className: "game-ui-component-row", children: [
2441
+ /* @__PURE__ */ e(ma, { label: a.settingsTip, children: /* @__PURE__ */ e(O, { label: a.settingsTip, children: /* @__PURE__ */ e(L, { icon: "settings", size: "sm" }) }) }),
2442
+ /* @__PURE__ */ e(O, { label: a.copyInvite, children: /* @__PURE__ */ e(L, { icon: "copy", size: "sm" }) }),
2443
+ /* @__PURE__ */ e(S, { tone: "ai", children: a.aiBadge }),
2444
+ /* @__PURE__ */ e(S, { tone: "success", children: a.readyBadge }),
2445
+ /* @__PURE__ */ e(S, { tone: "warning", children: a.hostGateBadge })
2446
+ ] }),
2447
+ /* @__PURE__ */ e(Pe, { activeId: "live", label: a.segmentedLabel, options: [{ id: "daily", label: a.segDaily }, { id: "live", label: a.segLive }, { id: "tokens", label: a.segTokens }] }),
2448
+ /* @__PURE__ */ e(ua, { activeId: "portal", tabs: [{ id: "portal", label: a.tabsPortal }, { id: "vote", label: a.tabsVote }, { id: "history", label: a.tabsHistory }] }),
2449
+ /* @__PURE__ */ e(ha, { items: [{ id: "wave", label: a.wave }, { id: "think", label: a.think }, { id: "doubt", label: a.doubt }], label: a.radialLabel }),
2450
+ /* @__PURE__ */ e(ga, { label: a.sliderLabel, max: 100, min: 0, value: 68 }),
2451
+ /* @__PURE__ */ e(pa, { checked: !0, label: a.toggleLabel })
2452
+ ] });
2453
+ }
2454
+ function ie() {
2455
+ const { hud: a, tiles: t } = R();
2456
+ return /* @__PURE__ */ o("div", { className: "game-ui-stage-demo", children: [
2457
+ /* @__PURE__ */ o("div", { "aria-label": "Clay world HUD preview", className: "game-ui-stage-world", children: [
2458
+ /* @__PURE__ */ e(
2459
+ Ve,
2460
+ {
2461
+ label: a.label,
2462
+ items: [{ id: "role", icon: "lock", label: a.youAre, value: a.roleValue, meta: a.rolePrivate }, { id: "room", icon: "copy", label: a.room, value: "74X8VB" }, { id: "timer", icon: "timer", label: a.reveal, value: "02:46" }],
2463
+ actions: /* @__PURE__ */ o(K, { label: a.tools, children: [
2464
+ /* @__PURE__ */ e(O, { label: a.history, children: /* @__PURE__ */ e(L, { icon: "scroll", size: "sm" }) }),
2465
+ /* @__PURE__ */ e(O, { label: a.settings, children: /* @__PURE__ */ e(L, { icon: "settings", size: "sm" }) })
2466
+ ] })
2467
+ }
2468
+ ),
2469
+ /* @__PURE__ */ o("div", { "aria-hidden": "true", className: "game-ui-table-prop", children: [
2470
+ /* @__PURE__ */ e("span", { className: "game-ui-seat is-host" }),
2471
+ /* @__PURE__ */ e("span", { className: "game-ui-seat is-guest-a" }),
2472
+ /* @__PURE__ */ e("span", { className: "game-ui-seat is-guest-b" }),
2473
+ /* @__PURE__ */ e("span", { className: "game-ui-callout is-a", children: a.calloutA }),
2474
+ /* @__PURE__ */ e("span", { className: "game-ui-callout is-b", children: a.calloutB })
2475
+ ] }),
2476
+ /* @__PURE__ */ o("div", { className: "game-ui-input-strip", children: [
2477
+ /* @__PURE__ */ e(C, { variant: "secondary", children: a.emote }),
2478
+ /* @__PURE__ */ e(C, { variant: "primary", children: a.sendRead })
2479
+ ] })
2480
+ ] }),
2481
+ /* @__PURE__ */ o("div", { className: "game-ui-stage-sidecar", children: [
2482
+ /* @__PURE__ */ e(q, { badge: t.daily.badge, icon: "scroll", kicker: t.daily.kicker, selected: !0, summary: t.daily.summary, title: t.daily.title, tone: "daily" }),
2483
+ /* @__PURE__ */ e(q, { badge: t.portal.badge, icon: "portal", kicker: t.portal.kicker, summary: t.portal.summary, title: t.portal.title, tone: "portal" }),
2484
+ /* @__PURE__ */ e(q, { icon: "energy", kicker: t.host.kicker, summary: t.host.summary, title: t.host.title, tone: "host" })
2485
+ ] })
2486
+ ] });
2487
+ }
2488
+ function ri() {
2489
+ const { modals: a } = R();
2490
+ return /* @__PURE__ */ o("div", { className: "game-ui-preview-two-up", children: [
2491
+ /* @__PURE__ */ o(ca, { title: a.dialogTitle, children: [
2492
+ /* @__PURE__ */ e("p", { children: a.dialogBody }),
2493
+ /* @__PURE__ */ o(K, { label: a.actionsLabel, children: [
2494
+ /* @__PURE__ */ e(C, { variant: "primary", children: a.confirm }),
2495
+ /* @__PURE__ */ e(C, { variant: "ghost", children: a.back })
2496
+ ] })
2497
+ ] }),
2498
+ /* @__PURE__ */ o(B, { title: a.panelTitle, tone: "strong", children: [
2499
+ /* @__PURE__ */ e(ke, { tone: "success", children: a.toastOk }),
2500
+ /* @__PURE__ */ e(ke, { tone: "danger", children: a.toastErr }),
2501
+ /* @__PURE__ */ e(Se, { label: a.loading }),
2502
+ /* @__PURE__ */ e(Se, { label: a.loadingErr, tone: "error" })
2503
+ ] })
2504
+ ] });
2505
+ }
2506
+ function ci() {
2507
+ const { cards: a } = R();
2508
+ return /* @__PURE__ */ o("div", { className: "game-ui-preview-two-up", children: [
2509
+ /* @__PURE__ */ e(B, { title: a.fanTitle, tone: "strong", children: /* @__PURE__ */ e(Na, { label: a.fanLabel, cards: [{ id: "human", icon: "home", kicker: a.human, title: "Mika" }, { id: "ai", icon: "ai", kicker: a.ai, title: "River" }, { id: "sympathizer", icon: "crown", kicker: a.sympathizer, title: "Noa" }] }) }),
2510
+ /* @__PURE__ */ o(B, { title: a.assetTitle, tone: "strong", children: [
2511
+ /* @__PURE__ */ e("p", { className: "game-ui-small-copy", children: a.assetNote }),
2512
+ /* @__PURE__ */ o("div", { className: "game-ui-asset-path-grid", children: [
2513
+ /* @__PURE__ */ e("code", { children: V.catalog.manifest }),
2514
+ /* @__PURE__ */ e("code", { children: V.catalog.sourceCatalog }),
2515
+ /* @__PURE__ */ e("code", { children: V.buttons.primary }),
2516
+ /* @__PURE__ */ e("code", { children: V.icons.trophy })
2517
+ ] })
2518
+ ] })
2519
+ ] });
2520
+ }
2521
+ const Ae = [
2522
+ { id: "terrain", label: "Terrain", icon: "portal" },
2523
+ { id: "build", label: "Build", icon: "home" },
2524
+ { id: "place", label: "Place", icon: "gem" }
2525
+ ], Be = [
2526
+ { id: "raise", label: "Raise", shortcut: "1" },
2527
+ { id: "lower", label: "Lower", shortcut: "2" },
2528
+ { id: "flatten", label: "Flatten", shortcut: "3" },
2529
+ { id: "smooth", label: "Smooth", shortcut: "4" },
2530
+ { id: "paint", label: "Paint", shortcut: "5" }
2531
+ ], xe = [
2532
+ { id: "grass", label: "Grass", color: "#4f9d6b" },
2533
+ { id: "soil", label: "Soil", color: "#8a5a32" },
2534
+ { id: "path", label: "Path", color: "#b98d5d" }
2535
+ ], Ie = [
2536
+ { id: "foundation", label: "Foundation", icon: "home", items: [{ id: "floor-2x2", label: "2x2 floor", status: "selected" }] },
2537
+ { id: "wall", label: "Walls", icon: "card", items: [{ id: "wall-solid", label: "Solid wall", status: "ready" }] }
2538
+ ];
2539
+ function di() {
2540
+ return /* @__PURE__ */ o("div", { className: "game-ui-preview-two-up", children: [
2541
+ /* @__PURE__ */ e(
2542
+ Te,
2543
+ {
2544
+ activeBuildCategoryId: "foundation",
2545
+ activeMaterialId: "grass",
2546
+ activeModeId: "terrain",
2547
+ activeToolId: "raise",
2548
+ brush: { radius: 2.75, strength: 0.45 },
2549
+ buildCategories: Ie,
2550
+ label: "Desktop terrain and build tools",
2551
+ materials: xe,
2552
+ modes: Ae,
2553
+ selectedBuildItemId: "floor-2x2",
2554
+ status: { label: "Ready", tone: "success", description: "Brush edits are local and reversible.", progressLabel: "Optimization", progressMax: 100, progressValue: 68 },
2555
+ title: "Island tools",
2556
+ tools: Be,
2557
+ undoRedo: { canRedo: !1, canUndo: !0 }
2558
+ }
2559
+ ),
2560
+ /* @__PURE__ */ e(
2561
+ Te,
2562
+ {
2563
+ activeBuildCategoryId: "foundation",
2564
+ activeMaterialId: "path",
2565
+ activeModeId: "terrain",
2566
+ activeToolId: "paint",
2567
+ brush: { radius: 1.5, strength: 0.3 },
2568
+ buildCategories: Ie,
2569
+ drawerOpen: !0,
2570
+ label: "Small mobile terrain drawer",
2571
+ materials: xe,
2572
+ modes: Ae,
2573
+ selectedBuildItemId: "floor-2x2",
2574
+ status: { label: "Blocked", tone: "warning", description: "This edit would bury a placed object." },
2575
+ title: "Tools",
2576
+ tools: Be,
2577
+ undoRedo: { canRedo: !0, canUndo: !0 },
2578
+ variant: "small-mobile"
2579
+ }
2580
+ )
2581
+ ] });
2582
+ }
2583
+ function Ee({ label: a, mode: t }) {
2584
+ return /* @__PURE__ */ o("div", { className: "game-ui-construction-preview-card", "data-preview": t, children: [
2585
+ /* @__PURE__ */ e(L, { icon: t === "before" ? "home" : "check", size: "xl" }),
2586
+ /* @__PURE__ */ e("strong", { children: a }),
2587
+ /* @__PURE__ */ e("small", { children: t === "before" ? "current build zone" : "approved preview" })
2588
+ ] });
2589
+ }
2590
+ const Re = [
2591
+ {
2592
+ id: "preview-deck",
2593
+ title: "Deck robot crew",
2594
+ description: "Local-only construction queue for approved build assets.",
2595
+ status: "working",
2596
+ location: "South ledge",
2597
+ estimate: "4 min",
2598
+ progressValue: 64,
2599
+ providerMode: "local-only",
2600
+ crew: [
2601
+ { id: "bolt", name: "Bolt", role: "Foundation robot", status: "working", task: "Snapping beams", icon: "energy" },
2602
+ { id: "moss", name: "Moss", role: "Material robot", status: "queued", task: "Waiting for path tiles", icon: "gem" }
2603
+ ],
2604
+ steps: [
2605
+ { id: "draft", label: "Draft", status: "complete" },
2606
+ { id: "preview", label: "Preview", status: "complete" },
2607
+ { id: "build", label: "Build", status: "active", caption: "placing beams" },
2608
+ { id: "review", label: "Review", status: "pending" }
2609
+ ]
2610
+ },
2611
+ {
2612
+ id: "review-house-pad",
2613
+ title: "House pad review",
2614
+ description: "Owner approval required before accepting terrain and block placement.",
2615
+ status: "readyForReview",
2616
+ location: "Main island",
2617
+ estimate: "review",
2618
+ progressValue: 92,
2619
+ providerMode: "local-only",
2620
+ before: { label: "Before", caption: "Uneven terrain pad.", content: /* @__PURE__ */ e(Ee, { label: "Rough pad", mode: "before" }) },
2621
+ after: { label: "After", caption: "Flattened foundation pad with safe clearance.", content: /* @__PURE__ */ e(Ee, { label: "Foundation ready", mode: "after" }) },
2622
+ validationWarnings: [{ id: "clearance", label: "Validation clear", description: "Avatar path and saved objects stay clear.", tone: "success" }]
2623
+ },
2624
+ {
2625
+ id: "blocked-fence",
2626
+ title: "Garden fence blocked",
2627
+ description: "Fence segment crosses a saved object; revise or revert before commit.",
2628
+ status: "blocked",
2629
+ location: "Garden edge",
2630
+ estimate: "blocked",
2631
+ progressValue: 44,
2632
+ providerMode: "paid-disabled",
2633
+ validationWarnings: [{ id: "collision", label: "Collision risk", description: "Fence crosses an existing chair placement.", tone: "warning" }]
2634
+ }
2635
+ ];
2636
+ function mi() {
2637
+ return /* @__PURE__ */ o("div", { className: "game-ui-preview-two-up", children: [
2638
+ /* @__PURE__ */ e(
2639
+ Ce,
2640
+ {
2641
+ jobs: Re,
2642
+ label: "AI contractor jobs",
2643
+ selectedJobId: "review-house-pad",
2644
+ subtitle: "Official contractor UI covers drafts, previews, robot work, validation, review, and local-only provider boundaries.",
2645
+ title: "AI contractor",
2646
+ variant: "desktop"
2647
+ }
2648
+ ),
2649
+ /* @__PURE__ */ e(
2650
+ Ce,
2651
+ {
2652
+ drawerOpen: !0,
2653
+ jobs: Re,
2654
+ label: "Small mobile contractor jobs",
2655
+ selectedJobId: "blocked-fence",
2656
+ title: "Contractor",
2657
+ variant: "small-mobile"
2658
+ }
2659
+ )
2660
+ ] });
2661
+ }
2662
+ function ui() {
2663
+ return /* @__PURE__ */ e(
2664
+ He,
2665
+ {
2666
+ title: "OwnMySpace island editor preview",
2667
+ hud: /* @__PURE__ */ e(
2668
+ ve,
2669
+ {
2670
+ label: "Island facts",
2671
+ facts: [
2672
+ { id: "objects", icon: "gem", label: "Objects", value: "3/12" },
2673
+ { id: "status", icon: "check", label: "Status", tone: "success", value: "Ready" },
2674
+ { id: "position", icon: "compass", label: "Position", value: "0, 0, 0" }
2675
+ ]
2676
+ }
2677
+ ),
2678
+ movementPad: /* @__PURE__ */ e(Ea, { helpText: "WASD or arrows", label: "Move avatar" }),
2679
+ assetLibrary: /* @__PURE__ */ e(
2680
+ De,
2681
+ {
2682
+ label: "Placeable assets",
2683
+ title: "Assets",
2684
+ subtitle: "Starter, generated, and imported assets stay visibly distinct but share one placement path.",
2685
+ selectedAssetId: "manual-chair",
2686
+ groups: [
2687
+ { id: "starter", label: "Starter", source: "starter", assets: [{ assetId: "starter-table", source: "starter", title: "Starter table", description: "Built-in", status: "ready", icon: "home" }] },
2688
+ { id: "generated", label: "Generated", source: "generated", assets: [{ assetId: "generated-lamp", source: "generated", title: "Generated lamp", description: "Provider output", status: "ready", icon: "gem" }] },
2689
+ { id: "imported", label: "Imported", source: "imported", assets: [{ assetId: "manual-chair", source: "imported", title: "Manual chair", description: "Manual fixture", status: "selected", icon: "shop" }] }
2690
+ ]
2691
+ }
2692
+ ),
2693
+ bottomBar: /* @__PURE__ */ e(
2694
+ Ue,
2695
+ {
2696
+ title: "Placement",
2697
+ selectedTitle: "Manual chair",
2698
+ placedObjects: 3,
2699
+ maxObjects: 12,
2700
+ statusTone: "success",
2701
+ statusValue: "Ready",
2702
+ actions: [{ id: "place", label: "Place object", icon: "check", tone: "primary", shortcut: "Enter" }, { id: "save", label: "Save island", icon: "copy" }],
2703
+ objectActions: [{ id: "rotate", label: "Rotate object", icon: "compass", shortcut: "R" }, { id: "remove", label: "Remove object", icon: "close", tone: "danger" }]
2704
+ }
2705
+ ),
2706
+ children: /* @__PURE__ */ e("div", { className: "game-ui-surface-pack-demo-scene", children: /* @__PURE__ */ e("span", { children: "3D scene slot" }) })
2707
+ }
2708
+ );
2709
+ }
2710
+ const gi = [
2711
+ {
2712
+ id: "starter",
2713
+ label: "Starter pieces",
2714
+ source: "starter",
2715
+ assets: [
2716
+ { assetId: "asset-repro-platform", source: "starter", title: "Starter platform", status: "ready", icon: "portal", "data-testid": "asset-repro-platform" },
2717
+ { assetId: "asset-repro-chair", source: "starter", title: "Starter chair", status: "selected", icon: "shop", "data-testid": "asset-repro-chair" },
2718
+ { assetId: "asset-repro-table", source: "starter", title: "Starter table", status: "ready", icon: "card", "data-testid": "asset-repro-table" }
2719
+ ]
2720
+ }
2721
+ ];
2722
+ function pi() {
2723
+ return /* @__PURE__ */ e("div", { className: "game-ui-asset-compression-repro", "aria-label": "Asset card compression repro", children: [
2724
+ { id: "comfortable", label: "Comfortable library", width: "320px" },
2725
+ { id: "narrow", label: "Narrow library", width: "156px" },
2726
+ { id: "rail", label: "Rail library", width: "64px" }
2727
+ ].map((a) => /* @__PURE__ */ o("article", { className: "game-ui-asset-compression-repro-surface", "data-repro-surface": a.id, style: { "--repro-width": a.width }, children: [
2728
+ /* @__PURE__ */ e(S, { children: a.label }),
2729
+ /* @__PURE__ */ e(
2730
+ De,
2731
+ {
2732
+ density: "dense",
2733
+ groups: gi,
2734
+ label: `${a.label} assets`,
2735
+ selectedAssetId: "asset-repro-chair",
2736
+ title: "Build"
2737
+ }
2738
+ )
2739
+ ] }, a.id)) });
2740
+ }
2741
+ function hi() {
2742
+ const { firstSession: a } = R(), t = {
2743
+ controls: a.controls,
2744
+ emote: a.emote,
2745
+ goalLabel: a.goalLabel,
2746
+ goalValue: a.goalValue,
2747
+ streak: a.streak,
2748
+ guest: a.guest,
2749
+ history: a.history,
2750
+ hud: a.hud,
2751
+ input: a.input,
2752
+ moveBadge: a.moveBadge,
2753
+ move: a.move,
2754
+ roomLabel: a.roomLabel,
2755
+ roomValue: a.roomValue,
2756
+ roleLabel: a.roleLabel,
2757
+ roleValue: a.roleValue,
2758
+ settings: a.settings,
2759
+ shell: a.shell,
2760
+ timerLabel: a.timerLabel,
2761
+ timerValue: "02:46",
2762
+ tools: a.tools,
2763
+ wardrobe: a.wardrobe
2764
+ };
2765
+ return /* @__PURE__ */ o("div", { className: "game-ui-first-session-preview", children: [
2766
+ /* @__PURE__ */ e("div", { className: "game-ui-first-session-world", children: /* @__PURE__ */ e(La, { authenticated: !0, batteryCount: 5, dailyStreak: 3, labels: t, onHistory: () => {
2767
+ }, onSettings: () => {
2768
+ }, onWardrobe: () => {
2769
+ }, playerName: a.playerName }) }),
2770
+ /* @__PURE__ */ e("div", { className: "game-ui-first-session-modal-slot", children: /* @__PURE__ */ e(
2771
+ Ta,
2772
+ {
2773
+ open: !0,
2774
+ onDismiss: () => {
2775
+ },
2776
+ labels: {
2777
+ badge: a.obBadge,
2778
+ body: a.obBody,
2779
+ skip: a.obSkip,
2780
+ start: a.obStart,
2781
+ title: a.obTitle,
2782
+ steps: [
2783
+ { title: a.obMoveT, body: a.obMoveB },
2784
+ { title: a.obReadT, body: a.obReadB },
2785
+ { title: a.obVoteT, body: a.obVoteB }
2786
+ ]
2787
+ }
2788
+ }
2789
+ ) })
2790
+ ] });
2791
+ }
2792
+ function bi() {
2793
+ const { responsive: a } = R();
2794
+ return /* @__PURE__ */ o("div", { className: "game-ui-proof-frames", children: [
2795
+ /* @__PURE__ */ o("article", { className: "game-ui-proof-frame is-desktop", children: [
2796
+ /* @__PURE__ */ o("header", { children: [
2797
+ /* @__PURE__ */ e(S, { children: a.desktop }),
2798
+ /* @__PURE__ */ e("strong", { children: "1440×900" })
2799
+ ] }),
2800
+ /* @__PURE__ */ e(ie, {})
2801
+ ] }),
2802
+ /* @__PURE__ */ o("article", { className: "game-ui-proof-frame is-mobile-landscape", children: [
2803
+ /* @__PURE__ */ o("header", { children: [
2804
+ /* @__PURE__ */ e(S, { children: a.mobileLandscape }),
2805
+ /* @__PURE__ */ e("strong", { children: "844×390" })
2806
+ ] }),
2807
+ /* @__PURE__ */ e(ie, {})
2808
+ ] })
2809
+ ] });
2810
+ }
2811
+ function vi() {
2812
+ const { forms: a } = R();
2813
+ return /* @__PURE__ */ o("div", { className: "game-ui-preview-two-up", children: [
2814
+ /* @__PURE__ */ o(B, { title: a.formsTitle, tone: "strong", children: [
2815
+ /* @__PURE__ */ e(H, { hint: a.roomCodeHint, label: a.roomCodeLabel, children: /* @__PURE__ */ e(Le, { placeholder: a.roomCodePlaceholder }) }),
2816
+ /* @__PURE__ */ e(H, { label: a.nameLabel, required: !0, children: /* @__PURE__ */ e(Le, { placeholder: a.namePlaceholder }) }),
2817
+ /* @__PURE__ */ e(H, { error: a.readError, label: a.readLabel, children: /* @__PURE__ */ e(Ca, { invalid: !0, placeholder: a.readPlaceholder }) }),
2818
+ /* @__PURE__ */ e(Aa, { defaultChecked: !0, label: a.rememberLabel })
2819
+ ] }),
2820
+ /* @__PURE__ */ o(B, { title: a.displayTitle, tone: "strong", children: [
2821
+ /* @__PURE__ */ o("div", { className: "game-ui-component-row", children: [
2822
+ /* @__PURE__ */ e($, { name: "Mika Ono", status: "online" }),
2823
+ /* @__PURE__ */ e($, { name: "River", size: "lg", status: "busy" }),
2824
+ /* @__PURE__ */ e($, { name: "Noa", status: "away" }),
2825
+ /* @__PURE__ */ e($, { name: a.guestName, size: "sm" })
2826
+ ] }),
2827
+ /* @__PURE__ */ e(D, { label: a.revealLabel, showValue: !0, value: 64 }),
2828
+ /* @__PURE__ */ e(D, { label: a.batteryLabel, max: 20, showValue: !0, tone: "success", value: 14 }),
2829
+ /* @__PURE__ */ e(
2830
+ P,
2831
+ {
2832
+ action: /* @__PURE__ */ e(C, { variant: "primary", children: a.emptyCta }),
2833
+ description: a.emptyBody,
2834
+ icon: "scroll",
2835
+ title: a.emptyTitle
2836
+ }
2837
+ )
2838
+ ] })
2839
+ ] });
2840
+ }
2841
+ const fi = pe.filter((a) => _e(a).includes("game")), yi = pe.filter((a) => _e(a).includes("line"));
2842
+ function Me({ names: a, style: t }) {
2843
+ return /* @__PURE__ */ e("div", { className: "game-ui-icon-grid", children: a.map((i) => /* @__PURE__ */ o("figure", { className: "game-ui-icon-cell", children: [
2844
+ /* @__PURE__ */ e(L, { icon: i, size: "lg", style: t }),
2845
+ /* @__PURE__ */ e("figcaption", { children: i })
2846
+ ] }, `${t}-${i}`)) });
2847
+ }
2848
+ function wi() {
2849
+ return /* @__PURE__ */ e("div", { className: "game-ui-icon-grid", children: va.map((a) => /* @__PURE__ */ o("figure", { className: "game-ui-icon-cell", children: [
2850
+ /* @__PURE__ */ e("span", { className: "game-ui-asset-icon", "data-icon-size": "lg", "data-icon-style": "game", "aria-hidden": !0, children: /* @__PURE__ */ e("img", { alt: "", src: ze[a] }) }),
2851
+ /* @__PURE__ */ e("figcaption", { children: a })
2852
+ ] }, `sprite-${a}`)) });
2853
+ }
2854
+ function Ni() {
2855
+ const { gallery: a } = R();
2856
+ return /* @__PURE__ */ o("div", { className: "game-ui-icon-gallery", children: [
2857
+ /* @__PURE__ */ o("section", { className: "game-ui-icon-family", children: [
2858
+ /* @__PURE__ */ o("header", { className: "game-ui-icon-family-head", children: [
2859
+ /* @__PURE__ */ e(S, { tone: "success", children: a.gameLabel }),
2860
+ /* @__PURE__ */ e("p", { className: "game-ui-small-copy", children: a.gameHint })
2861
+ ] }),
2862
+ /* @__PURE__ */ e(Me, { names: fi, style: "game" })
2863
+ ] }),
2864
+ /* @__PURE__ */ o("section", { className: "game-ui-icon-family", children: [
2865
+ /* @__PURE__ */ o("header", { className: "game-ui-icon-family-head", children: [
2866
+ /* @__PURE__ */ e(S, { children: a.lineLabel }),
2867
+ /* @__PURE__ */ e("p", { className: "game-ui-small-copy", children: a.lineHint })
2868
+ ] }),
2869
+ /* @__PURE__ */ e(Me, { names: yi, style: "line" })
2870
+ ] }),
2871
+ /* @__PURE__ */ o("section", { className: "game-ui-icon-family", children: [
2872
+ /* @__PURE__ */ o("header", { className: "game-ui-icon-family-head", children: [
2873
+ /* @__PURE__ */ e(S, { tone: "warning", children: a.spriteLabel }),
2874
+ /* @__PURE__ */ e("p", { className: "game-ui-small-copy", children: a.spriteHint })
2875
+ ] }),
2876
+ /* @__PURE__ */ e(wi, {})
2877
+ ] })
2878
+ ] });
2879
+ }
2880
+ function _i({ title: a, body: t }) {
2881
+ const [i, l] = M("en"), n = Qe[i], s = a && i === "en" ? a : n.heroTitle, r = t && i === "en" ? t : n.heroBody;
2882
+ return te(() => (document.documentElement.dataset.gameUiPreview = "clay", () => {
2883
+ delete document.documentElement.dataset.gameUiPreview;
2884
+ }), []), /* @__PURE__ */ e(ea.Provider, { value: n, children: /* @__PURE__ */ o("main", { "aria-label": "Swimmer UI Kit clay preview", className: "game-ui-preview game-ui-clay-preview", children: [
2885
+ /* @__PURE__ */ o("header", { className: "game-ui-preview-hero", children: [
2886
+ /* @__PURE__ */ e(S, { tone: "ai", children: "@pieai/swimmer-ui-kit" }),
2887
+ /* @__PURE__ */ e(
2888
+ Sa,
2889
+ {
2890
+ currentLabel: n.triggerLabel,
2891
+ label: n.langMenuLabel,
2892
+ onSelect: (d) => l(d),
2893
+ options: [{ id: "en", label: "English", meta: "DOM UI labels" }, { id: "zh-CN", label: "简体中文", meta: "Host app owned copy" }],
2894
+ value: i
2895
+ }
2896
+ ),
2897
+ /* @__PURE__ */ e("h1", { children: s }),
2898
+ /* @__PURE__ */ e("p", { children: r })
2899
+ ] }),
2900
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-token-title", className: "game-ui-preview-section", children: [
2901
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-token-title", children: n.sections.tokens }),
2902
+ /* @__PURE__ */ e(li, {}),
2903
+ /* @__PURE__ */ e("div", { className: "game-ui-token-ledger", children: ti.map((d) => /* @__PURE__ */ e(ni, { id: d.id, label: n.tokenGroups[d.id] ?? d.id, tokens: d.tokens }, d.id)) })
2904
+ ] }),
2905
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-icons-title", className: "game-ui-preview-section", children: [
2906
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-icons-title", children: n.sections.icons }),
2907
+ /* @__PURE__ */ e("p", { className: "game-ui-small-copy", children: n.iconsIntro }),
2908
+ /* @__PURE__ */ e(Ni, {})
2909
+ ] }),
2910
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-type-title", className: "game-ui-preview-section", children: [
2911
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-type-title", children: n.sections.typography }),
2912
+ /* @__PURE__ */ e(oi, {})
2913
+ ] }),
2914
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-components-title", className: "game-ui-preview-section", children: [
2915
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-components-title", children: n.sections.components }),
2916
+ /* @__PURE__ */ e(si, {}),
2917
+ /* @__PURE__ */ e(ie, {}),
2918
+ /* @__PURE__ */ e(ri, {}),
2919
+ /* @__PURE__ */ e(ci, {}),
2920
+ /* @__PURE__ */ e(da, { entries: n.history, label: n.historyLabel })
2921
+ ] }),
2922
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-forms-title", className: "game-ui-preview-section", children: [
2923
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-forms-title", children: n.sections.forms }),
2924
+ /* @__PURE__ */ e(vi, {})
2925
+ ] }),
2926
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-ownmyspace-title", className: "game-ui-preview-section", children: [
2927
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-ownmyspace-title", children: "OwnMySpace game surface pack" }),
2928
+ /* @__PURE__ */ e(ui, {})
2929
+ ] }),
2930
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-terrain-build-title", className: "game-ui-preview-section", children: [
2931
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-terrain-build-title", children: "Terrain/build tooling" }),
2932
+ /* @__PURE__ */ e("p", { className: "game-ui-small-copy", children: "Official terrain controls cover mode, brush, material, undo/redo, build library, status, progress, and compact mobile drawer surfaces." }),
2933
+ /* @__PURE__ */ e(di, {})
2934
+ ] }),
2935
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-contractor-title", className: "game-ui-preview-section", children: [
2936
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-contractor-title", children: "AI contractor / construction robot UI" }),
2937
+ /* @__PURE__ */ e("p", { className: "game-ui-small-copy", children: "Official construction surfaces cover job queue states, before/after review, robot crew status, validation warnings, approval actions, and local-only provider badges." }),
2938
+ /* @__PURE__ */ e(mi, {})
2939
+ ] }),
2940
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-asset-compression-title", className: "game-ui-preview-section", children: [
2941
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-asset-compression-title", children: "Asset card compression proof" }),
2942
+ /* @__PURE__ */ e("p", { className: "game-ui-small-copy", children: "Official asset cards must stay visually complete when a game shell uses dense, narrow, or rail-style inventory slots." }),
2943
+ /* @__PURE__ */ e(pi, {})
2944
+ ] }),
2945
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-first-session-title", className: "game-ui-preview-section", children: [
2946
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-first-session-title", children: n.sections.firstSession }),
2947
+ /* @__PURE__ */ e(hi, {})
2948
+ ] }),
2949
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-orientation-title", className: "game-ui-preview-section", children: [
2950
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-orientation-title", children: n.sections.orientation }),
2951
+ /* @__PURE__ */ e(ka, { badgeLabel: n.orientation.badge, body: n.orientation.body, cta: n.orientation.cta, manualHint: n.orientation.hint, preview: !0, title: n.orientation.title })
2952
+ ] }),
2953
+ /* @__PURE__ */ o("section", { "aria-labelledby": "game-ui-preview-responsive-title", className: "game-ui-preview-section", children: [
2954
+ /* @__PURE__ */ e("h2", { id: "game-ui-preview-responsive-title", children: n.sections.responsive }),
2955
+ /* @__PURE__ */ e(bi, {})
2956
+ ] })
2957
+ ] }) });
2958
+ }
2959
+ const zi = {
2960
+ ...ne,
2961
+ ...le,
2962
+ ...oe,
2963
+ ...se,
2964
+ ...re,
2965
+ ...ce,
2966
+ ...de,
2967
+ ...ue
2968
+ }, Vi = me;
2969
+ export {
2970
+ V as CLAY_ASSETS,
2971
+ ba as CLAY_ASSET_BASE_PATH,
2972
+ ue as CLAY_ASSET_SIZE_TOKENS,
2973
+ N as CLAY_COLOR_TOKENS,
2974
+ re as CLAY_ELEVATION_TOKENS,
2975
+ ze as CLAY_GAME_SPRITES,
2976
+ va as CLAY_GAME_SPRITE_NAMES,
2977
+ pe as CLAY_ICON_NAMES,
2978
+ ge as CLAY_ICON_VARIANTS,
2979
+ de as CLAY_LAYER_TOKENS,
2980
+ ce as CLAY_MOTION_TOKENS,
2981
+ se as CLAY_RADIUS_TOKENS,
2982
+ ne as CLAY_SEMANTIC_TOKENS,
2983
+ oe as CLAY_SPACE_TOKENS,
2984
+ me as CLAY_TARGET_TOKENS,
2985
+ le as CLAY_TYPE_TOKENS,
2986
+ Ci as CLAY_UI_TOKENS,
2987
+ La as FirstSessionHud,
2988
+ Ta as FirstSessionOnboarding,
2989
+ ai as GAME_UI_PREVIEW_MESSAGES,
2990
+ Vi as GAME_UI_TARGETS,
2991
+ zi as GAME_UI_TOKENS,
2992
+ U as GameActionGrid,
2993
+ Ma as GameAssetCard,
2994
+ L as GameAssetIcon,
2995
+ De as GameAssetLibrary,
2996
+ $ as GameAvatar,
2997
+ S as GameBadge,
2998
+ Xe as GameBeforeAfterToggle,
2999
+ Va as GameBrushControls,
3000
+ Ua as GameBuildLibrary,
3001
+ C as GameButton,
3002
+ Na as GameCardFan,
3003
+ Aa as GameCheckbox,
3004
+ Gi as GameCollapsiblePanel,
3005
+ $e as GameCompactGameDrawer,
3006
+ Xa as GameCompactJobDrawer,
3007
+ Je as GameConstructionApprovalBar,
3008
+ ae as GameConstructionJobCard,
3009
+ qe as GameConstructionProgress,
3010
+ Ce as GameContractorPanel,
3011
+ ca as GameDialog,
3012
+ P as GameEmptyState,
3013
+ ve as GameFactList,
3014
+ H as GameField,
3015
+ da as GameHistoryPanel,
3016
+ Ve as GameHud,
3017
+ K as GameHudActions,
3018
+ O as GameIconButton,
3019
+ Le as GameInput,
3020
+ Sa as GameLanguageMenu,
3021
+ Se as GameLoadingState,
3022
+ Ha as GameMaterialSwatches,
3023
+ Pi as GameModal,
3024
+ Ea as GameMovementPad,
3025
+ Mi as GameObjectToolbar,
3026
+ ka as GameOrientationGate,
3027
+ B as GamePanel,
3028
+ Ue as GamePlacementToolbar,
3029
+ D as GameProgress,
3030
+ Ti as GamePrompt,
3031
+ ha as GameRadialMenu,
3032
+ Ze as GameRobotCrewStatus,
3033
+ Ei as GameSceneHudLayout,
3034
+ Pe as GameSegmentedControl,
3035
+ He as GameShell,
3036
+ ga as GameSlider,
3037
+ q as GameStageTile,
3038
+ Ri as GameStatList,
3039
+ ua as GameTabs,
3040
+ Te as GameTerrainBuildToolbox,
3041
+ _a as GameTerrainModeControl,
3042
+ za as GameTerrainToolStrip,
3043
+ Ca as GameTextArea,
3044
+ ke as GameToast,
3045
+ pa as GameToggle,
3046
+ ma as GameTooltip,
3047
+ _i as GameUiPreview,
3048
+ Da as GameUndoRedoActions,
3049
+ Oi as GameWindowPanel,
3050
+ Bi as getClayAssetMode,
3051
+ Ii as getClayCatalogPaths,
3052
+ Z as getClayIconPath,
3053
+ _e as getClayIconStyles,
3054
+ xi as getClaySourceAssetPath,
3055
+ ra as playGameInteractionSound,
3056
+ sa as playGameInteractionSoundForContext,
3057
+ Ai as setClayAssetMode
3058
+ };