@lemoncat7/dsh-partner 1.10.5 → 1.11.1

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 (155) hide show
  1. package/README.md +50 -1
  2. package/docs/THIRD_PARTY_LICENSES.md +36 -1
  3. package/docs/architecture.md +26 -1
  4. package/lib/api/features/attachments-api.d.ts +6 -0
  5. package/lib/api/features/attachments-api.d.ts.map +1 -0
  6. package/lib/api/features/attachments-api.js +20 -0
  7. package/lib/api/features/attachments-api.js.map +1 -0
  8. package/lib/api/features/workspace-api.js +2 -2
  9. package/lib/api/features/workspace-api.js.map +1 -1
  10. package/lib/api.d.ts +2 -0
  11. package/lib/api.d.ts.map +1 -1
  12. package/lib/api.js +3 -0
  13. package/lib/api.js.map +1 -1
  14. package/lib/attachments/service.d.ts +35 -0
  15. package/lib/attachments/service.d.ts.map +1 -0
  16. package/lib/attachments/service.js +122 -0
  17. package/lib/attachments/service.js.map +1 -0
  18. package/lib/attachments/tool.d.ts +8 -0
  19. package/lib/attachments/tool.d.ts.map +1 -0
  20. package/lib/attachments/tool.js +59 -0
  21. package/lib/attachments/tool.js.map +1 -0
  22. package/lib/channels/manager.d.ts +2 -0
  23. package/lib/channels/manager.d.ts.map +1 -1
  24. package/lib/channels/manager.js +12 -0
  25. package/lib/channels/manager.js.map +1 -1
  26. package/lib/channels/outbound-media.d.ts +1 -1
  27. package/lib/channels/outbound-media.d.ts.map +1 -1
  28. package/lib/channels/outbound-media.js +6 -10
  29. package/lib/channels/outbound-media.js.map +1 -1
  30. package/lib/client-api.d.ts +8 -0
  31. package/lib/client-api.d.ts.map +1 -1
  32. package/lib/client-api.js.map +1 -1
  33. package/lib/client.js +1126 -932
  34. package/lib/client.js.map +4 -4
  35. package/lib/collaboration/composition.d.ts +3 -1
  36. package/lib/collaboration/composition.d.ts.map +1 -1
  37. package/lib/collaboration/composition.js +9 -3
  38. package/lib/collaboration/composition.js.map +1 -1
  39. package/lib/collaboration/domain.d.ts +2 -0
  40. package/lib/collaboration/domain.d.ts.map +1 -1
  41. package/lib/collaboration/domain.js.map +1 -1
  42. package/lib/collaboration/service.d.ts +1 -0
  43. package/lib/collaboration/service.d.ts.map +1 -1
  44. package/lib/collaboration/service.js +15 -4
  45. package/lib/collaboration/service.js.map +1 -1
  46. package/lib/domain.d.ts +1 -0
  47. package/lib/domain.d.ts.map +1 -1
  48. package/lib/domain.js.map +1 -1
  49. package/lib/execution/agent-support.d.ts.map +1 -1
  50. package/lib/execution/agent-support.js +2 -1
  51. package/lib/execution/agent-support.js.map +1 -1
  52. package/lib/index.d.ts.map +1 -1
  53. package/lib/index.js +6 -1
  54. package/lib/index.js.map +1 -1
  55. package/lib/pendant/card-image.d.ts +13 -3
  56. package/lib/pendant/card-image.d.ts.map +1 -1
  57. package/lib/pendant/card-image.js +40 -14
  58. package/lib/pendant/card-image.js.map +1 -1
  59. package/lib/pendant/image-coating.d.ts +8 -0
  60. package/lib/pendant/image-coating.d.ts.map +1 -0
  61. package/lib/pendant/image-coating.js +39 -0
  62. package/lib/pendant/image-coating.js.map +1 -0
  63. package/lib/pendant/motion-glare.d.ts +33 -0
  64. package/lib/pendant/motion-glare.d.ts.map +1 -0
  65. package/lib/pendant/motion-glare.js +56 -0
  66. package/lib/pendant/motion-glare.js.map +1 -0
  67. package/lib/pendant/physics.d.ts +1 -0
  68. package/lib/pendant/physics.d.ts.map +1 -1
  69. package/lib/pendant/physics.js +24 -2
  70. package/lib/pendant/physics.js.map +1 -1
  71. package/lib/pendant/renderer.d.ts.map +1 -1
  72. package/lib/pendant/renderer.js +46 -13
  73. package/lib/pendant/renderer.js.map +1 -1
  74. package/lib/pendant/settings-panel.d.ts.map +1 -1
  75. package/lib/pendant/settings-panel.js +6 -4
  76. package/lib/pendant/settings-panel.js.map +1 -1
  77. package/lib/pendant/settings.d.ts +7 -0
  78. package/lib/pendant/settings.d.ts.map +1 -1
  79. package/lib/pendant/settings.js +10 -3
  80. package/lib/pendant/settings.js.map +1 -1
  81. package/lib/pendant/strap-preview.d.ts +3 -1
  82. package/lib/pendant/strap-preview.d.ts.map +1 -1
  83. package/lib/pendant/strap-preview.js +6 -3
  84. package/lib/pendant/strap-preview.js.map +1 -1
  85. package/lib/pendant/strap-texture.d.ts +5 -0
  86. package/lib/pendant/strap-texture.d.ts.map +1 -0
  87. package/lib/pendant/strap-texture.js +9 -0
  88. package/lib/pendant/strap-texture.js.map +1 -0
  89. package/lib/pendant/strap.d.ts.map +1 -1
  90. package/lib/pendant/strap.js +39 -2
  91. package/lib/pendant/strap.js.map +1 -1
  92. package/lib/pendant/surface.d.ts +7 -7
  93. package/lib/pendant/surface.d.ts.map +1 -1
  94. package/lib/pendant/surface.js +19 -9
  95. package/lib/pendant/surface.js.map +1 -1
  96. package/lib/pendant-renderer.js +201 -170
  97. package/lib/requirements/draft.d.ts +3 -0
  98. package/lib/requirements/draft.d.ts.map +1 -0
  99. package/lib/requirements/draft.js +7 -0
  100. package/lib/requirements/draft.js.map +1 -0
  101. package/lib/requirements/plan-schema.d.ts +93 -0
  102. package/lib/requirements/plan-schema.d.ts.map +1 -0
  103. package/lib/requirements/plan-schema.js +16 -0
  104. package/lib/requirements/plan-schema.js.map +1 -0
  105. package/lib/requirements/plan.d.ts +30 -0
  106. package/lib/requirements/plan.d.ts.map +1 -0
  107. package/lib/requirements/plan.js +134 -0
  108. package/lib/requirements/plan.js.map +1 -0
  109. package/lib/requirements/service.d.ts +2 -1
  110. package/lib/requirements/service.d.ts.map +1 -1
  111. package/lib/requirements/service.js +4 -6
  112. package/lib/requirements/service.js.map +1 -1
  113. package/lib/requirements/tool.d.ts +1 -1
  114. package/lib/requirements/tool.d.ts.map +1 -1
  115. package/lib/requirements/tool.js +24 -3
  116. package/lib/requirements/tool.js.map +1 -1
  117. package/lib/skills/task-planning.d.ts +2 -2
  118. package/lib/skills/task-planning.d.ts.map +1 -1
  119. package/lib/skills/task-planning.js +10 -1
  120. package/lib/skills/task-planning.js.map +1 -1
  121. package/lib/store.js +2 -0
  122. package/lib/store.js.map +1 -1
  123. package/lib/tasks/context.d.ts.map +1 -1
  124. package/lib/tasks/context.js +9 -1
  125. package/lib/tasks/context.js.map +1 -1
  126. package/lib/tasks/contract.d.ts +63 -0
  127. package/lib/tasks/contract.d.ts.map +1 -0
  128. package/lib/tasks/contract.js +55 -0
  129. package/lib/tasks/contract.js.map +1 -0
  130. package/lib/tasks/domain.d.ts +6 -0
  131. package/lib/tasks/domain.d.ts.map +1 -1
  132. package/lib/tasks/draft.d.ts +7 -0
  133. package/lib/tasks/draft.d.ts.map +1 -0
  134. package/lib/tasks/draft.js +54 -0
  135. package/lib/tasks/draft.js.map +1 -0
  136. package/lib/tasks/result.d.ts +2 -0
  137. package/lib/tasks/result.d.ts.map +1 -1
  138. package/lib/tasks/result.js +17 -3
  139. package/lib/tasks/result.js.map +1 -1
  140. package/lib/tasks/scheduling.d.ts +15 -0
  141. package/lib/tasks/scheduling.d.ts.map +1 -0
  142. package/lib/tasks/scheduling.js +46 -0
  143. package/lib/tasks/scheduling.js.map +1 -0
  144. package/lib/tasks/service.d.ts +46 -3
  145. package/lib/tasks/service.d.ts.map +1 -1
  146. package/lib/tasks/service.js +55 -58
  147. package/lib/tasks/service.js.map +1 -1
  148. package/lib/ui/requirement-tasks-panel.d.ts.map +1 -1
  149. package/lib/ui/requirement-tasks-panel.js +18 -9
  150. package/lib/ui/requirement-tasks-panel.js.map +1 -1
  151. package/lib/ui/task-contract-panel.d.ts +10 -0
  152. package/lib/ui/task-contract-panel.d.ts.map +1 -0
  153. package/lib/ui/task-contract-panel.js +16 -0
  154. package/lib/ui/task-contract-panel.js.map +1 -0
  155. package/package.json +1 -1
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAMzC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAA;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAsB,MAAM,UAAU,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAA0B,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAA;AAElC,cAAc,aAAa,CAAA;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAA;AACjC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAA;AAYpK,MAAM,UAAU,KAAK,CAAC,OAAgB,EAAE,MAAqB;IAC3D,MAAM,GAAG,GAAG,OAAyB,CAAA;IACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACtC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACzD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAA;QACrG,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAChK,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAA;QAC/E,MAAM,WAAW,GAAG,IAAI,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC7E,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC7D,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC;YACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YACzD,IAAI,QAAQ,GAAG,CAAC;gBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,8BAA8B,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;YAChH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YACpE,MAAM,KAAK,GAAwB;gBACjC,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC1E,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,UAAmB;iBAC5F,CAAC,CAAC;gBACH,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAmB,EAAE,CAAC,CAAC;aACtE,CAAA;YACD,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YACjD,MAAM,MAAM,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC;YAAE,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC9G,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU;oBAAE,OAAO,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAA;YAC7F,CAAC,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,IAAI,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QACrE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;QAClH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;QACzB,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,IAAI,yBAAyB,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC/E,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,wBAAwB,EAAE,CAAA;QACjE,IAAI,eAAe,GAAG,CAAC;YAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,eAAe,+BAA+B,CAAC,CAAA;QACnH,MAAM,aAAa,GAAG,IAAI,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QACrF,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACjF,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAC9C,MAAM,UAAU,GAA+B,IAAI,0BAA0B,CAAC,KAAK,EAAE;YACnF,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpB,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpJ,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC3M,CAAC;YACF,MAAM,EAAE,CAAC,EAAE,EAAW,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;YACnD,MAAM,EAAE,KAAK,EAAC,EAAE,EAAC,EAAE;gBACjB,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;YAClC,CAAC;SACF,CAAC,CAAA;QACF,MAAM,eAAe,GAAG,IAAI,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;QAChK,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,CAAC,CAAA;QAC7J,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC/G,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;QACzF,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAA;QACnH,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,yBAAyB,CAAC,CAAA;QACrE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QACjH,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE;YACnE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACjD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAA;gBACvF,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;gBACrD,OAAO,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,eAAe,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;YAC9J,CAAC;YACD,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YAClG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;SACzC,CAAC,CAAA;QACF,MAAM,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;QACjG,aAAa,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAA;QACvE,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3E,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU;YAAE,MAAM,MAAM,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACxG,aAAa,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACjF,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC3E,KAAK,CAAC,mBAAmB,CAAC,0BAA0B,CAClD,KAAK,IAAI,EAAE,GAA+E,CAAC,EAC3F,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,cAAc,CAAC,EACzE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CACpC,CAAC,CAAA;QACF,8EAA8E;QAC9E,MAAM,aAAa,CAAC,KAAK,EAAE,CAAA;QAC3B,MAAM,sBAAsB,GAAG,GAAG,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YACxE,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YACtC,KAAK,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;YAClL,KAAK,QAAQ,CAAC,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5L,CAAC,CAAC,CAAA;QACF,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACnG,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACvG,MAAM,KAAK,GAAG,IAAI,kBAAkB,EAAE,CAAA;QACtC,IAAI,UAAoC,CAAA;QACxC,MAAM,QAAQ,GAAG,CAAC,OAAuB,EAAQ,EAAE;YACjD,IAAI,CAAC,QAAQ,CAAC,SAAS;gBAAE,OAAM;YAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAA8B,CAAA;YAC5F,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;YACxF,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;QACtP,CAAC,CAAA;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAA;aAC5D,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;;YAC9C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAA;QAC/F,IAAI,QAAQ,CAAC,iBAAiB;YAAE,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAA;QAC7D,SAAS,CAAC,KAAK,EAAE,CAAA;QACjB,WAAW,CAAC,KAAK,EAAE,CAAA;QACnB,SAAS,CAAC,KAAK,EAAE,CAAA;QACjB,iBAAiB,CAAC,KAAK,EAAE,CAAA;QACzB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,eAAe,CAAC,CAAA;QAC7F,OAAO,KAAK,IAAI,EAAE;YAChB,aAAa,CAAC,aAAa,EAAE,CAAA;YAC7B,iBAAiB,CAAC,aAAa,EAAE,CAAA;YACjC,UAAU,EAAE,EAAE,CAAA;YACd,sBAAsB,EAAE,CAAA;YACxB,kBAAkB,EAAE,CAAA;YACpB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;YACvB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;YACvB,MAAM,WAAW,CAAC,KAAK,EAAE,CAAA;YACzB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;YACtB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;YACtB,MAAM,aAAa,CAAC,KAAK,EAAE,CAAA;YAC3B,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAA;QACjC,CAAC,CAAA;IACH,CAAC,EAAE,qBAAqB,CAAC,CAAA;AAC3B,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1,6 +1,16 @@
1
+ import { type CardImageFit } from './settings.js';
2
+ export declare const CARD_IMAGE_BACKGROUND = "#253235";
3
+ /** Keep aspect ratio in both modes; only cover may extend beyond the face. */
4
+ export declare function cardImageRect(width: number, height: number, targetWidth: number, targetHeight: number, fit: CardImageFit): {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ export declare function drawCardImage(canvas: HTMLCanvasElement, image: HTMLImageElement, fit: CardImageFit): void;
1
11
  export declare function loadCardImage(source: string): Promise<HTMLImageElement>;
2
- /** Decode once on explicit upload; flatten and resize before persisting. No
3
- * remote URLs, SVG execution, server upload or full-size GPU textures.
12
+ /** Persist a bounded source with its aspect ratio intact, so fitting remains
13
+ * reversible. No remote URLs, SVG execution, server upload or full-size GPU textures.
4
14
  */
5
- export declare function prepareCardImage(file: File): Promise<string>;
15
+ export declare function prepareCardImage(file: File, maxDimension?: number): Promise<string>;
6
16
  //# sourceMappingURL=card-image.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"card-image.d.ts","sourceRoot":"","sources":["../../src/pendant/card-image.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOvE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBlE"}
1
+ {"version":3,"file":"card-image.d.ts","sourceRoot":"","sources":["../../src/pendant/card-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAExE,eAAO,MAAM,qBAAqB,YAAY,CAAA;AAE9C,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY;;;;;EAIxH;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CASzG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOvE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BvF"}
@@ -1,4 +1,23 @@
1
1
  import { MAX_CARD_IMAGE_LENGTH } from './settings.js';
2
+ export const CARD_IMAGE_BACKGROUND = '#253235';
3
+ /** Keep aspect ratio in both modes; only cover may extend beyond the face. */
4
+ export function cardImageRect(width, height, targetWidth, targetHeight, fit) {
5
+ if (![width, height, targetWidth, targetHeight].every(value => Number.isFinite(value) && value > 0))
6
+ throw new Error('图片尺寸无效。');
7
+ const scale = (fit === 'cover' ? Math.max : Math.min)(targetWidth / width, targetHeight / height);
8
+ return { x: (targetWidth - width * scale) / 2, y: (targetHeight - height * scale) / 2, width: width * scale, height: height * scale };
9
+ }
10
+ export function drawCardImage(canvas, image, fit) {
11
+ const context = canvas.getContext('2d');
12
+ if (!context)
13
+ throw new Error('当前浏览器无法处理图片。');
14
+ const rect = cardImageRect(image.naturalWidth, image.naturalHeight, canvas.width, canvas.height, fit);
15
+ context.fillStyle = CARD_IMAGE_BACKGROUND;
16
+ context.imageSmoothingEnabled = true;
17
+ context.imageSmoothingQuality = 'high';
18
+ context.fillRect(0, 0, canvas.width, canvas.height);
19
+ context.drawImage(image, rect.x, rect.y, rect.width, rect.height);
20
+ }
2
21
  export function loadCardImage(source) {
3
22
  return new Promise((resolve, reject) => {
4
23
  const image = new Image();
@@ -7,10 +26,10 @@ export function loadCardImage(source) {
7
26
  image.src = source;
8
27
  });
9
28
  }
10
- /** Decode once on explicit upload; flatten and resize before persisting. No
11
- * remote URLs, SVG execution, server upload or full-size GPU textures.
29
+ /** Persist a bounded source with its aspect ratio intact, so fitting remains
30
+ * reversible. No remote URLs, SVG execution, server upload or full-size GPU textures.
12
31
  */
13
- export async function prepareCardImage(file) {
32
+ export async function prepareCardImage(file, maxDimension = 1536) {
14
33
  if (!['image/png', 'image/jpeg', 'image/webp'].includes(file.type))
15
34
  throw new Error('请选择 PNG、JPEG 或 WebP 图片。');
16
35
  if (file.size > 5 * 1024 * 1024)
@@ -20,21 +39,28 @@ export async function prepareCardImage(file) {
20
39
  const image = await loadCardImage(url);
21
40
  if (!image.naturalWidth || !image.naturalHeight || image.naturalWidth * image.naturalHeight > 25_000_000)
22
41
  throw new Error('图片分辨率过大,请缩小至 2500 万像素以内。');
42
+ const scale = Math.min(1, maxDimension / Math.max(image.naturalWidth, image.naturalHeight));
23
43
  const canvas = document.createElement('canvas');
24
- canvas.width = 512;
25
- canvas.height = 704;
44
+ canvas.width = Math.max(1, Math.round(image.naturalWidth * scale));
45
+ canvas.height = Math.max(1, Math.round(image.naturalHeight * scale));
26
46
  const context = canvas.getContext('2d');
27
47
  if (!context)
28
48
  throw new Error('当前浏览器无法处理图片。');
29
- context.fillStyle = '#253235';
30
- context.fillRect(0, 0, 512, 704);
31
- const scale = Math.max(512 / image.naturalWidth, 704 / image.naturalHeight);
32
- const width = image.naturalWidth * scale, height = image.naturalHeight * scale;
33
- context.drawImage(image, (512 - width) / 2, (704 - height) / 2, width, height);
34
- const result = canvas.toDataURL('image/jpeg', .9);
35
- if (result.length > MAX_CARD_IMAGE_LENGTH)
36
- throw new Error('图片压缩后仍然过大,请换一张图片。');
37
- return result;
49
+ context.imageSmoothingQuality = 'high';
50
+ context.fillStyle = CARD_IMAGE_BACKGROUND;
51
+ context.fillRect(0, 0, canvas.width, canvas.height);
52
+ context.drawImage(image, 0, 0, canvas.width, canvas.height);
53
+ // Prefer lossless for text/illustrations; bounded high-quality compression
54
+ // for photos avoids silently consuming the browser's storage quota.
55
+ const png = canvas.toDataURL('image/png');
56
+ if (png.length <= MAX_CARD_IMAGE_LENGTH)
57
+ return png;
58
+ for (const quality of [.94, .88, .8]) {
59
+ const result = canvas.toDataURL('image/webp', quality);
60
+ if (result.length <= MAX_CARD_IMAGE_LENGTH)
61
+ return result;
62
+ }
63
+ throw new Error('图片压缩后仍然过大,请缩小图片或使用更简洁的图案。');
38
64
  }
39
65
  finally {
40
66
  URL.revokeObjectURL(url);
@@ -1 +1 @@
1
- {"version":3,"file":"card-image.js","sourceRoot":"","sources":["../../src/pendant/card-image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"card-image.js","sourceRoot":"","sources":["../../src/pendant/card-image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { MeshPhysicalMaterial } from 'three';
2
+ import { type MotionGlareUniforms } from './motion-glare.js';
3
+ /** Two logical layers in one draw: unlit source image + native physical gloss.
4
+ * Only reflection passes through exposure/tone mapping. No image recolouring,
5
+ * extra light sources, textures or render targets.
6
+ */
7
+ export declare function separateImageCoating(material: MeshPhysicalMaterial, glare?: MotionGlareUniforms): void;
8
+ //# sourceMappingURL=image-coating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-coating.d.ts","sourceRoot":"","sources":["../../src/pendant/image-coating.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AACjD,OAAO,EAAyB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEnF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAgCtG"}
@@ -0,0 +1,39 @@
1
+ import { MOTION_GLARE_FRAGMENT } from './motion-glare.js';
2
+ /** Two logical layers in one draw: unlit source image + native physical gloss.
3
+ * Only reflection passes through exposure/tone mapping. No image recolouring,
4
+ * extra light sources, textures or render targets.
5
+ */
6
+ export function separateImageCoating(material, glare) {
7
+ material.onBeforeCompile = shader => {
8
+ const opaque = '#include <opaque_fragment>';
9
+ const output = '#include <colorspace_fragment>';
10
+ if (!shader.fragmentShader.includes(opaque) || !shader.fragmentShader.includes(output)) {
11
+ throw new Error('Unsupported Three.js badge shader: image/coating output hooks missing');
12
+ }
13
+ if (glare) {
14
+ shader.uniforms.badgeGlareProgress = glare.badgeGlareProgress;
15
+ shader.uniforms.badgeGlareOpacity = glare.badgeGlareOpacity;
16
+ shader.fragmentShader = 'uniform float badgeGlareProgress;\nuniform float badgeGlareOpacity;\n' + shader.fragmentShader;
17
+ }
18
+ shader.fragmentShader = shader.fragmentShader.replace(opaque, `
19
+ // Reuse Three's BRDF and actual scene reflection, without diffuse lighting.
20
+ vec3 badgeReflection = totalSpecular;
21
+ #ifdef USE_CLEARCOAT
22
+ badgeReflection = badgeReflection * (1.0 - material.clearcoat * Fcc)
23
+ + (clearcoatSpecularDirect + clearcoatSpecularIndirect) * material.clearcoat;
24
+ #endif
25
+ outgoingLight = ${glare ? 'vec3(0.0)' : 'max(badgeReflection, vec3(0.0))'};
26
+ ${opaque}
27
+ `).replace(output, `
28
+ ${output}
29
+ // diffuseColor already contains the decoded linear-sRGB image sample.
30
+ // Convert it once, independently of the tone-mapped reflection above.
31
+ vec3 badgeImage = linearToOutputTexel(diffuseColor).rgb;
32
+ vec3 badgeCoating = 0.4 * clamp(gl_FragColor.rgb, 0.0, 1.0);
33
+ gl_FragColor.rgb = badgeImage + (vec3(1.0) - badgeImage) * badgeCoating;
34
+ ${glare ? MOTION_GLARE_FRAGMENT : ''}
35
+ `);
36
+ };
37
+ material.customProgramCacheKey = () => glare ? 'partner-motion-glare-v1' : 'partner-image-coating-v1';
38
+ }
39
+ //# sourceMappingURL=image-coating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-coating.js","sourceRoot":"","sources":["../../src/pendant/image-coating.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAA4B,MAAM,mBAAmB,CAAA;AAEnF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAA8B,EAAE,KAA2B;IAC9F,QAAQ,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE;QAClC,MAAM,MAAM,GAAG,4BAA4B,CAAA;QAC3C,MAAM,MAAM,GAAG,gCAAgC,CAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;QAC1F,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,QAAQ,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAA;YAC7D,MAAM,CAAC,QAAQ,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAA;YAC3D,MAAM,CAAC,cAAc,GAAG,uEAAuE,GAAG,MAAM,CAAC,cAAc,CAAA;QACzH,CAAC;QACD,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE;;;;;;;wBAO1C,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iCAAiC;QACvE,MAAM;KACT,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE;QACf,MAAM;;;;;;QAMN,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;KACrC,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,QAAQ,CAAC,qBAAqB,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,0BAA0B,CAAA;AACvG,CAAC"}
@@ -0,0 +1,33 @@
1
+ export interface MotionGlareUniforms {
2
+ badgeGlareProgress: {
3
+ value: number;
4
+ };
5
+ badgeGlareOpacity: {
6
+ value: number;
7
+ };
8
+ }
9
+ export declare const MOTION_GLARE: {
10
+ readonly opacity: 0.38;
11
+ };
12
+ interface Orientation {
13
+ x: number;
14
+ y: number;
15
+ z: number;
16
+ w: number;
17
+ }
18
+ /** A fixed world-space light/view half-vector projected into the card frame.
19
+ * Identical poses have identical highlights, even at rest or after reversal.
20
+ * This is a stylized strip reflection, not an animated sweep or full ray trace.
21
+ * Shares the existing frame; a visible highlight never keeps RAF awake.
22
+ */
23
+ export declare function createMotionGlare(): {
24
+ uniforms: MotionGlareUniforms;
25
+ clear: () => void;
26
+ update(q: Orientation, reduced: boolean): void;
27
+ };
28
+ /** Same -45deg / 250% / 60-70-85% CSS gradient in card-local coordinates.
29
+ * Rendered inside the existing rounded face, not a new rectangular overlay.
30
+ */
31
+ export declare const MOTION_GLARE_FRAGMENT = "\n #ifdef USE_MAP\n vec2 glareUv = (vec2(vMapUv.x, 1.0 - vMapUv.y)\n - vec2(mix(1.5, -1.5, badgeGlareProgress))) / 2.5;\n float glareInside = step(0.0, glareUv.x) * step(glareUv.x, 1.0)\n * step(0.0, glareUv.y) * step(glareUv.y, 1.0);\n float glareStop = 1.0 - dot(glareUv, vec2(1.42, 1.96)) / 3.38;\n float glareBand = clamp((glareStop - 0.60) / 0.10, 0.0, 1.0)\n * clamp((0.85 - glareStop) / 0.15, 0.0, 1.0);\n float glareAlpha = glareInside * glareBand * clamp(badgeGlareOpacity, 0.0, 0.5);\n gl_FragColor.rgb = mix(badgeImage, vec3(1.0), glareAlpha);\n #endif\n";
32
+ export {};
33
+ //# sourceMappingURL=motion-glare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-glare.d.ts","sourceRoot":"","sources":["../../src/pendant/motion-glare.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACrC,iBAAiB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACrC;AAID,eAAO,MAAM,YAAY;;CAA4B,CAAA;AACrD,UAAU,WAAW;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AAGpE;;;;GAIG;AACH,wBAAgB,iBAAiB;;iBAEb,IAAI;cAKV,WAAW,WAAW,OAAO,GAAG,IAAI;EAejD;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,6lBAYjC,CAAA"}
@@ -0,0 +1,56 @@
1
+ // React Bits GlareHover gradient, positioned by orientation, never elapsed time.
2
+ // See docs/THIRD_PARTY_LICENSES.md for the upstream license and source.
3
+ export const MOTION_GLARE = { opacity: .38 };
4
+ const clamp = (n, low, high) => Math.max(low, Math.min(high, n));
5
+ /** A fixed world-space light/view half-vector projected into the card frame.
6
+ * Identical poses have identical highlights, even at rest or after reversal.
7
+ * This is a stylized strip reflection, not an animated sweep or full ray trace.
8
+ * Shares the existing frame; a visible highlight never keeps RAF awake.
9
+ */
10
+ export function createMotionGlare() {
11
+ const uniforms = { badgeGlareProgress: { value: 1 }, badgeGlareOpacity: { value: 0 } };
12
+ const clear = () => {
13
+ uniforms.badgeGlareProgress.value = 1;
14
+ uniforms.badgeGlareOpacity.value = 0;
15
+ };
16
+ return {
17
+ uniforms, clear,
18
+ update(q, reduced) {
19
+ const length = Math.hypot(q.x, q.y, q.z, q.w);
20
+ if (reduced || !Number.isFinite(length) || length < 1e-8) {
21
+ clear();
22
+ return;
23
+ }
24
+ const x = q.x / length, y = q.y / length, z = q.z / length, w = q.w / length;
25
+ const facing = 1 - 2 * (x * x + y * y);
26
+ if (facing <= .1) {
27
+ clear();
28
+ return;
29
+ }
30
+ const norm = Math.hypot(.25, .4, 1), hx = .25 / norm, hy = .4 / norm, hz = 1 / norm;
31
+ const localX = (1 - 2 * (y * y + z * z)) * hx + 2 * (x * y + z * w) * hy + 2 * (x * z - y * w) * hz;
32
+ const localY = 2 * (x * y - z * w) * hx + (1 - 2 * (x * x + z * z)) * hy + 2 * (y * z + x * w) * hz;
33
+ const localZ = 2 * (x * z + y * w) * hx + 2 * (y * z - x * w) * hy + facing * hz;
34
+ uniforms.badgeGlareProgress.value = clamp(.55 + .48 * (localX - localY), 0, 1);
35
+ const visibility = clamp((facing - .1) / .3, 0, 1);
36
+ uniforms.badgeGlareOpacity.value = MOTION_GLARE.opacity * visibility * visibility * (3 - 2 * visibility) * clamp(localZ, 0, 1);
37
+ },
38
+ };
39
+ }
40
+ /** Same -45deg / 250% / 60-70-85% CSS gradient in card-local coordinates.
41
+ * Rendered inside the existing rounded face, not a new rectangular overlay.
42
+ */
43
+ export const MOTION_GLARE_FRAGMENT = `
44
+ #ifdef USE_MAP
45
+ vec2 glareUv = (vec2(vMapUv.x, 1.0 - vMapUv.y)
46
+ - vec2(mix(1.5, -1.5, badgeGlareProgress))) / 2.5;
47
+ float glareInside = step(0.0, glareUv.x) * step(glareUv.x, 1.0)
48
+ * step(0.0, glareUv.y) * step(glareUv.y, 1.0);
49
+ float glareStop = 1.0 - dot(glareUv, vec2(1.42, 1.96)) / 3.38;
50
+ float glareBand = clamp((glareStop - 0.60) / 0.10, 0.0, 1.0)
51
+ * clamp((0.85 - glareStop) / 0.15, 0.0, 1.0);
52
+ float glareAlpha = glareInside * glareBand * clamp(badgeGlareOpacity, 0.0, 0.5);
53
+ gl_FragColor.rgb = mix(badgeImage, vec3(1.0), glareAlpha);
54
+ #endif
55
+ `;
56
+ //# sourceMappingURL=motion-glare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-glare.js","sourceRoot":"","sources":["../../src/pendant/motion-glare.ts"],"names":[],"mappings":"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"}
@@ -10,5 +10,6 @@ export declare function createLanyardPhysics(): {
10
10
  beads: RAPIER.RigidBody[];
11
11
  badge: RAPIER.RigidBody;
12
12
  bodies: RAPIER.RigidBody[];
13
+ setLength: (value: number) => void;
13
14
  };
14
15
  //# sourceMappingURL=physics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"physics.d.ts","sourceRoot":"","sources":["../../src/pendant/physics.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,2BAA2B,CAAA;AAE9C,eAAO,MAAM,YAAY,QAAU,CAAA;AAEnC;;;GAGG;AACH,wBAAgB,oBAAoB;;;;;;EAuBnC"}
1
+ {"version":3,"file":"physics.d.ts","sourceRoot":"","sources":["../../src/pendant/physics.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,2BAA2B,CAAA;AAG9C,eAAO,MAAM,YAAY,QAAU,CAAA;AAEnC;;;GAGG;AACH,wBAAgB,oBAAoB;;;;;;uBAwBR,MAAM,KAAG,IAAI;EAexC"}
@@ -1,4 +1,5 @@
1
1
  import RAPIER from '@dimforge/rapier3d-compat';
2
+ import { normalizeStrapLength } from './settings.js';
2
3
  export const LANYARD_STEP = 1 / 120;
3
4
  /** Call after Rapier initialization. Elastic links store the energy of a held
4
5
  * stretch; unlike maximum-length rope joints, they recoil even after a pause.
@@ -21,9 +22,30 @@ export function createLanyardPhysics() {
21
22
  // static extension keeps the loaded strap at 3 world units as stiffness is
22
23
  // tuned. Underdamping preserves recoil, without launching ordinary pulls.
23
24
  const stiffness = 220, restLength = 1 - 60 / stiffness;
25
+ const springs = [];
24
26
  for (let i = 0; i < 3; i++)
25
- world.createImpulseJoint(RAPIER.JointData.spring(restLength, stiffness, 6, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 }), bodies[i], bodies[i + 1], true);
27
+ springs.push(world.createImpulseJoint(RAPIER.JointData.spring(restLength, stiffness, 6, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 }), bodies[i], bodies[i + 1], true));
26
28
  world.createImpulseJoint(RAPIER.JointData.spherical({ x: 0, y: 0, z: 0 }, { x: 0, y: 1.1, z: 0 }), beads[2], badge, true);
27
- return { world, anchor, beads, badge, bodies };
29
+ let length = 100;
30
+ const setLength = (value) => {
31
+ const next = normalizeStrapLength(value);
32
+ if (next === length)
33
+ return;
34
+ length = next;
35
+ const segment = next / 100;
36
+ for (const joint of springs)
37
+ world.removeImpulseJoint(joint, true);
38
+ springs.length = 0;
39
+ for (let i = 0; i < 3; i++) {
40
+ beads[i].setTranslation({ x: .015, y: 4.15 - segment * (i + 1), z: 0 }, true);
41
+ springs.push(world.createImpulseJoint(RAPIER.JointData.spring(segment - 60 / stiffness, stiffness, 6, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 }), bodies[i], bodies[i + 1], true));
42
+ }
43
+ badge.setTranslation({ x: .015, y: 4.15 - 3 * segment - 1.1, z: 0 }, true);
44
+ for (const body of [...beads, badge]) {
45
+ body.setLinvel({ x: 0, y: 0, z: 0 }, true);
46
+ body.setAngvel({ x: 0, y: 0, z: 0 }, true);
47
+ }
48
+ };
49
+ return { world, anchor, beads, badge, bodies, setLength };
28
50
  }
29
51
  //# sourceMappingURL=physics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"physics.js","sourceRoot":"","sources":["../../src/pendant/physics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"physics.js","sourceRoot":"","sources":["../../src/pendant/physics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/pendant/renderer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAOpD,MAAM,WAAW,YAAY;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACxF,MAAM,WAAW,aAAa;IAAG,UAAU,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAAC,QAAQ,IAAI,IAAI,CAAC;IAAC,OAAO,IAAI,IAAI,CAAA;CAAE;AAC9J,MAAM,WAAW,cAAc;IAAG,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,IAAI,IAAI,CAAC;IAAC,SAAS,IAAI,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE;AAGpH;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAsOtI"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/pendant/renderer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAQpD,MAAM,WAAW,YAAY;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACxF,MAAM,WAAW,aAAa;IAAG,UAAU,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAAC,QAAQ,IAAI,IAAI,CAAC;IAAC,OAAO,IAAI,IAAI,CAAA;CAAE;AAC9J,MAAM,WAAW,cAAc;IAAG,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,IAAI,IAAI,CAAC;IAAC,SAAS,IAAI,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE;AAGpH;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAoPtI"}
@@ -5,11 +5,12 @@ import { createLanyardPhysics, LANYARD_STEP } from './physics.js';
5
5
  import { createLanyardStrap } from './strap.js';
6
6
  import { createBadgeSheen } from './sheen.js';
7
7
  import { createNoticeMotion } from './notice-motion.js';
8
- import { loadCardImage } from './card-image.js';
8
+ import { drawCardImage, loadCardImage } from './card-image.js';
9
9
  import { createPendantFrameLoop } from './frame-loop.js';
10
- import { createBadgeFaceMaterial, BADGE_LIGHTING } from './surface.js';
10
+ import { createBadgeFaceMaterial, BADGE_LIGHTING, badgePixelRatio, configureBadgeTexture } from './surface.js';
11
11
  import { measureFixedLayerOrigin } from './coordinates.js';
12
12
  import { settleCardFacing } from './facing.js';
13
+ import { createMotionGlare } from './motion-glare.js';
13
14
  let physicsReady;
14
15
  /** React Bits-inspired Three + Rapier lanyard, with elastic/spherical joints.
15
16
  * Separate ESM asset: the main client never imports the renderer/physics bundle.
@@ -21,7 +22,7 @@ export async function createLanyard(canvas, hit, options) {
21
22
  options.signal.throwIfAborted();
22
23
  const renderer = new THREE.WebGLRenderer({ canvas, alpha: true, antialias: true, powerPreference: 'low-power' });
23
24
  renderer.setClearColor(0x000000, 0);
24
- renderer.setPixelRatio(Math.min(devicePixelRatio, 1.5));
25
+ renderer.setPixelRatio(badgePixelRatio(devicePixelRatio));
25
26
  renderer.outputColorSpace = THREE.SRGBColorSpace;
26
27
  renderer.toneMapping = THREE.ACESFilmicToneMapping;
27
28
  renderer.toneMappingExposure = .95;
@@ -54,10 +55,13 @@ export async function createLanyard(canvas, hit, options) {
54
55
  for (let i = 0; i < positions.count; i++)
55
56
  uv.setXY(i, positions.getX(i) / 1.42 + .5, positions.getY(i) / 1.96 + .5);
56
57
  const frontTexture = keep(badgeTexture(false)), backTexture = keep(badgeTexture(true));
57
- const front = new THREE.Mesh(face, keep(createBadgeFaceMaterial(frontTexture)));
58
+ for (const texture of [frontTexture, backTexture])
59
+ configureBadgeTexture(texture, renderer.capabilities.getMaxAnisotropy());
60
+ const glare = createMotionGlare();
61
+ const front = new THREE.Mesh(face, keep(createBadgeFaceMaterial(frontTexture, environment.texture, glare.uniforms)));
58
62
  front.position.z = .063;
59
63
  card.add(front);
60
- const back = new THREE.Mesh(face, keep(createBadgeFaceMaterial(backTexture)));
64
+ const back = new THREE.Mesh(face, keep(createBadgeFaceMaterial(backTexture, environment.texture)));
61
65
  back.rotation.y = Math.PI;
62
66
  back.position.z = -.025;
63
67
  card.add(back);
@@ -70,13 +74,15 @@ export async function createLanyard(canvas, hit, options) {
70
74
  clip.position.set(0, .94, .03);
71
75
  card.add(clip);
72
76
  scene.add(card);
73
- const { world, beads, badge, bodies } = createLanyardPhysics();
77
+ const { world, beads, badge, bodies, setLength } = createLanyardPhysics();
74
78
  const noticeMotion = createNoticeMotion(badge);
75
79
  const strap = createLanyardStrap(canvas), euler = new THREE.Euler();
76
80
  const movingBodies = [badge, ...beads];
77
81
  let quietTime = 0, accumulator = 0, disposed = false, scale = 58, canvasSize = 0, messageKey = '';
78
82
  let unread = 0, messageIdentity = '';
79
83
  let artSource, artRevision = 0;
84
+ let artFit;
85
+ let quality = 100, strapLength = 100;
80
86
  let home = canvas.parentElement.getBoundingClientRect();
81
87
  let layerOrigin = { left: 0, top: 0 };
82
88
  let gesture;
@@ -123,6 +129,9 @@ export async function createLanyard(canvas, hit, options) {
123
129
  canvas.dataset.noticeMotion = noticeMotion.phase;
124
130
  const shining = sheen.update(now, reduced.matches);
125
131
  canvas.dataset.shining = String(shining);
132
+ glare.update(badge.rotation(), reduced.matches);
133
+ canvas.dataset.glare = String(glare.uniforms.badgeGlareOpacity.value);
134
+ canvas.dataset.glareProgress = String(glare.uniforms.badgeGlareProgress.value);
126
135
  paint();
127
136
  const calm = movingBodies.every(body => {
128
137
  const v = body.linvel(), a = body.angvel();
@@ -219,6 +228,9 @@ export async function createLanyard(canvas, hit, options) {
219
228
  // Preserve the old resting size, without the old perspective projection.
220
229
  scale = home.height / (20 * Math.tan(Math.PI / 12));
221
230
  const nextSize = Math.ceil(scale * cardViewSize);
231
+ const nextPixelRatio = 1 + (Math.min(3, Math.max(2, devicePixelRatio || 1)) - 1) * quality / 100;
232
+ if (renderer.getPixelRatio() !== nextPixelRatio)
233
+ renderer.setPixelRatio(nextPixelRatio);
222
234
  if (nextSize !== canvasSize) {
223
235
  canvasSize = nextSize;
224
236
  renderer.setSize(canvasSize, canvasSize, false);
@@ -233,6 +245,7 @@ export async function createLanyard(canvas, hit, options) {
233
245
  const hide = () => { end(); if (document.hidden) {
234
246
  noticeMotion.cancel();
235
247
  sheen.clear();
248
+ glare.clear();
236
249
  loop.stop();
237
250
  accumulator = 0;
238
251
  }
@@ -261,10 +274,24 @@ export async function createLanyard(canvas, hit, options) {
261
274
  return;
262
275
  loop.setFps(settings.fps);
263
276
  canvas.dataset.fps = String(settings.fps);
277
+ if (strapLength !== settings.strapLength) {
278
+ end();
279
+ strapLength = settings.strapLength;
280
+ setLength(strapLength);
281
+ wake();
282
+ }
283
+ if (quality !== settings.quality) {
284
+ quality = settings.quality;
285
+ resize();
286
+ }
287
+ canvas.dataset.quality = String(quality);
288
+ canvas.dataset.strapLength = String(strapLength);
264
289
  strap.setAppearance(settings);
265
- if (settings.image === artSource)
290
+ if (settings.image === artSource && settings.imageFit === artFit)
266
291
  return;
267
292
  artSource = settings.image;
293
+ artFit = settings.imageFit;
294
+ const imageFit = settings.imageFit;
268
295
  const revision = ++artRevision, target = frontTexture.image;
269
296
  const restore = () => { drawBadge(target, false); frontTexture.needsUpdate = true; canvas.dataset.art = 'default'; wake(); };
270
297
  if (!settings.image) {
@@ -274,9 +301,10 @@ export async function createLanyard(canvas, hit, options) {
274
301
  void loadCardImage(settings.image).then(image => {
275
302
  if (disposed || revision !== artRevision)
276
303
  return;
277
- target.getContext('2d').drawImage(image, 0, 0, target.width, target.height);
304
+ drawCardImage(target, image, imageFit);
278
305
  frontTexture.needsUpdate = true;
279
306
  canvas.dataset.art = 'custom';
307
+ canvas.dataset.imageFit = imageFit;
280
308
  wake();
281
309
  }).catch(() => { if (!disposed && revision === artRevision)
282
310
  restore(); });
@@ -311,6 +339,7 @@ export async function createLanyard(canvas, hit, options) {
311
339
  return;
312
340
  end();
313
341
  disposed = true;
342
+ glare.clear();
314
343
  loop.stop();
315
344
  observer.disconnect();
316
345
  reduced.removeEventListener('change', wake);
@@ -348,8 +377,8 @@ function roundedRectangle(width, height, radius) {
348
377
  }
349
378
  function badgeTexture(back) {
350
379
  const canvas = document.createElement('canvas');
351
- canvas.width = 512;
352
- canvas.height = 704;
380
+ canvas.width = 1024;
381
+ canvas.height = 1408;
353
382
  drawBadge(canvas, back);
354
383
  const texture = new THREE.CanvasTexture(canvas);
355
384
  texture.colorSpace = THREE.SRGBColorSpace;
@@ -357,16 +386,18 @@ function badgeTexture(back) {
357
386
  }
358
387
  function drawBadge(canvas, back, message) {
359
388
  const c = canvas.getContext('2d');
389
+ c.save();
390
+ c.scale(canvas.width / 512, canvas.height / 704);
360
391
  c.textAlign = 'left';
361
- c.fillStyle = back ? '#e7e9e6' : '#253235';
392
+ c.fillStyle = back ? '#cbd2d5' : '#253235';
362
393
  c.fillRect(0, 0, 512, 704);
363
394
  if (back && message?.count) {
364
- const ink = back ? '#253235' : '#f1f3ec', muted = back ? '#405953' : '#b6cbc2';
395
+ const ink = '#253235', muted = '#43525a';
365
396
  c.textAlign = 'center';
366
397
  c.fillStyle = muted;
367
398
  c.font = '600 56px sans-serif';
368
399
  c.fillText('伙伴消息', 256, 104);
369
- c.fillStyle = back ? '#d0dcd5' : '#405c51';
400
+ c.fillStyle = '#b8c3c8';
370
401
  c.beginPath();
371
402
  c.roundRect(164, 154, 184, 132, 34);
372
403
  c.fill();
@@ -383,6 +414,7 @@ function drawBadge(canvas, back, message) {
383
414
  c.fillStyle = muted;
384
415
  c.font = '500 52px sans-serif';
385
416
  c.fillText('点击查看', 256, 628);
417
+ c.restore();
386
418
  return;
387
419
  }
388
420
  c.fillStyle = back ? '#536a65' : '#b6cbc2';
@@ -417,5 +449,6 @@ function drawBadge(canvas, back, message) {
417
449
  c.fillText(back ? 'A little pause. A little play.' : 'Always a little closer.', 256, 559);
418
450
  c.fillStyle = back ? '#b3beb8' : '#6d8b80';
419
451
  c.fillRect(213, 608, 86, 5);
452
+ c.restore();
420
453
  }
421
454
  //# sourceMappingURL=renderer.js.map