@sequent-org/moodboard 1.0.24 → 1.2.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 (346) hide show
  1. package/package.json +2 -2
  2. package/src/assets/emodji//320/226/320/265/320/275/321/201/320/272/320/270/320/265 /321/215/320/274/320/276/321/206/320/270/320/270/1f645.png +0 -0
  3. package/src/assets/emodji//320/226/320/265/320/275/321/201/320/272/320/270/320/265 /321/215/320/274/320/276/321/206/320/270/320/270/1f646.png +0 -0
  4. package/src/assets/emodji//320/226/320/265/320/275/321/201/320/272/320/270/320/265 /321/215/320/274/320/276/321/206/320/270/320/270/1f64b.png +0 -0
  5. package/src/assets/emodji//320/226/320/265/320/275/321/201/320/272/320/270/320/265 /321/215/320/274/320/276/321/206/320/270/320/270/1f64d.png +0 -0
  6. package/src/assets/emodji//320/226/320/265/320/275/321/201/320/272/320/270/320/265 /321/215/320/274/320/276/321/206/320/270/320/270/1f64e.png +0 -0
  7. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f446.png +0 -0
  8. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f447.png +0 -0
  9. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f448.png +0 -0
  10. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f449.png +0 -0
  11. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f44a.png +0 -0
  12. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f44b.png +0 -0
  13. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f44c.png +0 -0
  14. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f450.png +0 -0
  15. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f4aa.png +0 -0
  16. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f590.png +0 -0
  17. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f596.png +0 -0
  18. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f64c.png +0 -0
  19. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f64f.png +0 -0
  20. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/261d.png +0 -0
  21. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/270a.png +0 -0
  22. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/270b.png +0 -0
  23. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/270c.png +0 -0
  24. package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/270d.png +0 -0
  25. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f638.png +0 -0
  26. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f639.png +0 -0
  27. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63a.png +0 -0
  28. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63b.png +0 -0
  29. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63c.png +0 -0
  30. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63d.png +0 -0
  31. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63e.png +0 -0
  32. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63f.png +0 -0
  33. package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f640.png +0 -0
  34. package/src/assets/emodji//320/236/320/261/320/265/320/267/321/214/321/217/320/275/320/272/320/260/1f435.png +0 -0
  35. package/src/assets/emodji//320/236/320/261/320/265/320/267/321/214/321/217/320/275/320/272/320/260/1f648.png +0 -0
  36. package/src/assets/emodji//320/236/320/261/320/265/320/267/321/214/321/217/320/275/320/272/320/260/1f649.png +0 -0
  37. package/src/assets/emodji//320/236/320/261/320/265/320/267/321/214/321/217/320/275/320/272/320/260/1f64a.png +0 -0
  38. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f440.png +0 -0
  39. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f441.png +0 -0
  40. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f499.png +0 -0
  41. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4a1.png +0 -0
  42. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4a3.png +0 -0
  43. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4a9.png +0 -0
  44. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4ac.png +0 -0
  45. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4af.png +0 -0
  46. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/203c.png +0 -0
  47. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/26d4.png +0 -0
  48. package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/2764.png +0 -0
  49. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f600.png +0 -0
  50. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f601.png +0 -0
  51. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f602.png +0 -0
  52. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f603.png +0 -0
  53. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f604.png +0 -0
  54. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f605.png +0 -0
  55. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f606.png +0 -0
  56. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f607.png +0 -0
  57. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f609.png +0 -0
  58. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60a.png +0 -0
  59. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60b.png +0 -0
  60. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60c.png +0 -0
  61. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60d.png +0 -0
  62. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60e.png +0 -0
  63. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60f.png +0 -0
  64. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f610.png +0 -0
  65. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f611.png +0 -0
  66. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f612.png +0 -0
  67. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f613.png +0 -0
  68. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f614.png +0 -0
  69. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f615.png +0 -0
  70. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f616.png +0 -0
  71. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f617.png +0 -0
  72. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f618.png +0 -0
  73. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f619.png +0 -0
  74. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61a.png +0 -0
  75. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61b.png +0 -0
  76. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61c.png +0 -0
  77. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61d.png +0 -0
  78. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61e.png +0 -0
  79. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61f.png +0 -0
  80. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f620.png +0 -0
  81. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f621.png +0 -0
  82. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f622.png +0 -0
  83. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f623.png +0 -0
  84. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f624.png +0 -0
  85. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f625.png +0 -0
  86. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f626.png +0 -0
  87. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f627.png +0 -0
  88. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f628.png +0 -0
  89. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f629.png +0 -0
  90. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62a.png +0 -0
  91. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62b.png +0 -0
  92. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62c.png +0 -0
  93. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62d.png +0 -0
  94. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62e.png +0 -0
  95. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62f.png +0 -0
  96. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f630.png +0 -0
  97. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f631.png +0 -0
  98. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f632.png +0 -0
  99. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f633.png +0 -0
  100. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f635.png +0 -0
  101. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f636.png +0 -0
  102. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f641.png +0 -0
  103. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f642.png +0 -0
  104. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/2639.png +0 -0
  105. package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/263a.png +0 -0
  106. package/src/assets/fonts/amatic-sc/AmaticSC-Bold.ttf +0 -0
  107. package/src/assets/fonts/amatic-sc/AmaticSC-Regular.ttf +0 -0
  108. package/src/assets/fonts/caveat/Caveat-Bold.ttf +0 -0
  109. package/src/assets/fonts/caveat/Caveat-Medium.ttf +0 -0
  110. package/src/assets/fonts/caveat/Caveat-Regular.ttf +0 -0
  111. package/src/assets/fonts/caveat/Caveat-SemiBold.ttf +0 -0
  112. package/src/assets/fonts/caveat/Caveat-VariableFont_wght.ttf +0 -0
  113. package/src/assets/fonts/great-vibes/GreatVibes-Regular.ttf +0 -0
  114. package/src/assets/fonts/lobster/Lobster-Regular.ttf +0 -0
  115. package/src/assets/fonts/noto-serif/NotoSerif-Black.ttf +0 -0
  116. package/src/assets/fonts/noto-serif/NotoSerif-BlackItalic.ttf +0 -0
  117. package/src/assets/fonts/noto-serif/NotoSerif-Bold.ttf +0 -0
  118. package/src/assets/fonts/noto-serif/NotoSerif-BoldItalic.ttf +0 -0
  119. package/src/assets/fonts/noto-serif/NotoSerif-ExtraBold.ttf +0 -0
  120. package/src/assets/fonts/noto-serif/NotoSerif-ExtraBoldItalic.ttf +0 -0
  121. package/src/assets/fonts/noto-serif/NotoSerif-ExtraLight.ttf +0 -0
  122. package/src/assets/fonts/noto-serif/NotoSerif-ExtraLightItalic.ttf +0 -0
  123. package/src/assets/fonts/noto-serif/NotoSerif-Italic-VariableFont_wdth,wght.ttf +0 -0
  124. package/src/assets/fonts/noto-serif/NotoSerif-Italic.ttf +0 -0
  125. package/src/assets/fonts/noto-serif/NotoSerif-Light.ttf +0 -0
  126. package/src/assets/fonts/noto-serif/NotoSerif-LightItalic.ttf +0 -0
  127. package/src/assets/fonts/noto-serif/NotoSerif-Medium.ttf +0 -0
  128. package/src/assets/fonts/noto-serif/NotoSerif-MediumItalic.ttf +0 -0
  129. package/src/assets/fonts/noto-serif/NotoSerif-Regular.ttf +0 -0
  130. package/src/assets/fonts/noto-serif/NotoSerif-SemiBold.ttf +0 -0
  131. package/src/assets/fonts/noto-serif/NotoSerif-SemiBoldItalic.ttf +0 -0
  132. package/src/assets/fonts/noto-serif/NotoSerif-Thin.ttf +0 -0
  133. package/src/assets/fonts/noto-serif/NotoSerif-ThinItalic.ttf +0 -0
  134. package/src/assets/fonts/noto-serif/NotoSerif-VariableFont_wdth,wght.ttf +0 -0
  135. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Black.ttf +0 -0
  136. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-BlackItalic.ttf +0 -0
  137. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Bold.ttf +0 -0
  138. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-BoldItalic.ttf +0 -0
  139. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ExtraBold.ttf +0 -0
  140. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ExtraBoldItalic.ttf +0 -0
  141. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ExtraLight.ttf +0 -0
  142. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ExtraLightItalic.ttf +0 -0
  143. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Italic.ttf +0 -0
  144. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Light.ttf +0 -0
  145. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-LightItalic.ttf +0 -0
  146. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Medium.ttf +0 -0
  147. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-MediumItalic.ttf +0 -0
  148. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Regular.ttf +0 -0
  149. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-SemiBold.ttf +0 -0
  150. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-SemiBoldItalic.ttf +0 -0
  151. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Thin.ttf +0 -0
  152. package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ThinItalic.ttf +0 -0
  153. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Black.ttf +0 -0
  154. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-BlackItalic.ttf +0 -0
  155. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Bold.ttf +0 -0
  156. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-BoldItalic.ttf +0 -0
  157. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ExtraBold.ttf +0 -0
  158. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ExtraBoldItalic.ttf +0 -0
  159. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ExtraLight.ttf +0 -0
  160. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ExtraLightItalic.ttf +0 -0
  161. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Italic.ttf +0 -0
  162. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Light.ttf +0 -0
  163. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-LightItalic.ttf +0 -0
  164. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Medium.ttf +0 -0
  165. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-MediumItalic.ttf +0 -0
  166. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Regular.ttf +0 -0
  167. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-SemiBold.ttf +0 -0
  168. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-SemiBoldItalic.ttf +0 -0
  169. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Thin.ttf +0 -0
  170. package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ThinItalic.ttf +0 -0
  171. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Black.ttf +0 -0
  172. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-BlackItalic.ttf +0 -0
  173. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Bold.ttf +0 -0
  174. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-BoldItalic.ttf +0 -0
  175. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ExtraBold.ttf +0 -0
  176. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  177. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ExtraLight.ttf +0 -0
  178. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ExtraLightItalic.ttf +0 -0
  179. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Italic.ttf +0 -0
  180. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Light.ttf +0 -0
  181. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-LightItalic.ttf +0 -0
  182. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Medium.ttf +0 -0
  183. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-MediumItalic.ttf +0 -0
  184. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Regular.ttf +0 -0
  185. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-SemiBold.ttf +0 -0
  186. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-SemiBoldItalic.ttf +0 -0
  187. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Thin.ttf +0 -0
  188. package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ThinItalic.ttf +0 -0
  189. package/src/assets/fonts/oswald/Oswald-Bold.ttf +0 -0
  190. package/src/assets/fonts/oswald/Oswald-ExtraLight.ttf +0 -0
  191. package/src/assets/fonts/oswald/Oswald-Light.ttf +0 -0
  192. package/src/assets/fonts/oswald/Oswald-Medium.ttf +0 -0
  193. package/src/assets/fonts/oswald/Oswald-Regular.ttf +0 -0
  194. package/src/assets/fonts/oswald/Oswald-SemiBold.ttf +0 -0
  195. package/src/assets/fonts/oswald/Oswald-VariableFont_wght.ttf +0 -0
  196. package/src/assets/fonts/pacifico/Pacifico-Regular.ttf +0 -0
  197. package/src/assets/fonts/playfair/PlayfairDisplay-Black.ttf +0 -0
  198. package/src/assets/fonts/playfair/PlayfairDisplay-BlackItalic.ttf +0 -0
  199. package/src/assets/fonts/playfair/PlayfairDisplay-Bold.ttf +0 -0
  200. package/src/assets/fonts/playfair/PlayfairDisplay-BoldItalic.ttf +0 -0
  201. package/src/assets/fonts/playfair/PlayfairDisplay-ExtraBold.ttf +0 -0
  202. package/src/assets/fonts/playfair/PlayfairDisplay-ExtraBoldItalic.ttf +0 -0
  203. package/src/assets/fonts/playfair/PlayfairDisplay-Italic-VariableFont_wght.ttf +0 -0
  204. package/src/assets/fonts/playfair/PlayfairDisplay-Italic.ttf +0 -0
  205. package/src/assets/fonts/playfair/PlayfairDisplay-Medium.ttf +0 -0
  206. package/src/assets/fonts/playfair/PlayfairDisplay-MediumItalic.ttf +0 -0
  207. package/src/assets/fonts/playfair/PlayfairDisplay-Regular.ttf +0 -0
  208. package/src/assets/fonts/playfair/PlayfairDisplay-SemiBold.ttf +0 -0
  209. package/src/assets/fonts/playfair/PlayfairDisplay-SemiBoldItalic.ttf +0 -0
  210. package/src/assets/fonts/playfair/PlayfairDisplay-VariableFont_wght.ttf +0 -0
  211. package/src/assets/fonts/poiret-one/PoiretOne-Regular.ttf +0 -0
  212. package/src/assets/fonts/roboto/Roboto-Black.ttf +0 -0
  213. package/src/assets/fonts/roboto/Roboto-BlackItalic.ttf +0 -0
  214. package/src/assets/fonts/roboto/Roboto-Bold.ttf +0 -0
  215. package/src/assets/fonts/roboto/Roboto-BoldItalic.ttf +0 -0
  216. package/src/assets/fonts/roboto/Roboto-ExtraBold.ttf +0 -0
  217. package/src/assets/fonts/roboto/Roboto-ExtraBoldItalic.ttf +0 -0
  218. package/src/assets/fonts/roboto/Roboto-ExtraLight.ttf +0 -0
  219. package/src/assets/fonts/roboto/Roboto-ExtraLightItalic.ttf +0 -0
  220. package/src/assets/fonts/roboto/Roboto-Italic-VariableFont_wdth,wght.ttf +0 -0
  221. package/src/assets/fonts/roboto/Roboto-Italic.ttf +0 -0
  222. package/src/assets/fonts/roboto/Roboto-Light.ttf +0 -0
  223. package/src/assets/fonts/roboto/Roboto-LightItalic.ttf +0 -0
  224. package/src/assets/fonts/roboto/Roboto-Medium.ttf +0 -0
  225. package/src/assets/fonts/roboto/Roboto-MediumItalic.ttf +0 -0
  226. package/src/assets/fonts/roboto/Roboto-Regular.ttf +0 -0
  227. package/src/assets/fonts/roboto/Roboto-SemiBold.ttf +0 -0
  228. package/src/assets/fonts/roboto/Roboto-SemiBoldItalic.ttf +0 -0
  229. package/src/assets/fonts/roboto/Roboto-Thin.ttf +0 -0
  230. package/src/assets/fonts/roboto/Roboto-ThinItalic.ttf +0 -0
  231. package/src/assets/fonts/roboto/Roboto-VariableFont_wdth,wght.ttf +0 -0
  232. package/src/assets/fonts/roboto/Roboto_Condensed-Black.ttf +0 -0
  233. package/src/assets/fonts/roboto/Roboto_Condensed-BlackItalic.ttf +0 -0
  234. package/src/assets/fonts/roboto/Roboto_Condensed-Bold.ttf +0 -0
  235. package/src/assets/fonts/roboto/Roboto_Condensed-BoldItalic.ttf +0 -0
  236. package/src/assets/fonts/roboto/Roboto_Condensed-ExtraBold.ttf +0 -0
  237. package/src/assets/fonts/roboto/Roboto_Condensed-ExtraBoldItalic.ttf +0 -0
  238. package/src/assets/fonts/roboto/Roboto_Condensed-ExtraLight.ttf +0 -0
  239. package/src/assets/fonts/roboto/Roboto_Condensed-ExtraLightItalic.ttf +0 -0
  240. package/src/assets/fonts/roboto/Roboto_Condensed-Italic.ttf +0 -0
  241. package/src/assets/fonts/roboto/Roboto_Condensed-Light.ttf +0 -0
  242. package/src/assets/fonts/roboto/Roboto_Condensed-LightItalic.ttf +0 -0
  243. package/src/assets/fonts/roboto/Roboto_Condensed-Medium.ttf +0 -0
  244. package/src/assets/fonts/roboto/Roboto_Condensed-MediumItalic.ttf +0 -0
  245. package/src/assets/fonts/roboto/Roboto_Condensed-Regular.ttf +0 -0
  246. package/src/assets/fonts/roboto/Roboto_Condensed-SemiBold.ttf +0 -0
  247. package/src/assets/fonts/roboto/Roboto_Condensed-SemiBoldItalic.ttf +0 -0
  248. package/src/assets/fonts/roboto/Roboto_Condensed-Thin.ttf +0 -0
  249. package/src/assets/fonts/roboto/Roboto_Condensed-ThinItalic.ttf +0 -0
  250. package/src/assets/fonts/roboto/Roboto_SemiCondensed-Black.ttf +0 -0
  251. package/src/assets/fonts/roboto/Roboto_SemiCondensed-BlackItalic.ttf +0 -0
  252. package/src/assets/fonts/roboto/Roboto_SemiCondensed-Bold.ttf +0 -0
  253. package/src/assets/fonts/roboto/Roboto_SemiCondensed-BoldItalic.ttf +0 -0
  254. package/src/assets/fonts/roboto/Roboto_SemiCondensed-ExtraBold.ttf +0 -0
  255. package/src/assets/fonts/roboto/Roboto_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  256. package/src/assets/fonts/roboto/Roboto_SemiCondensed-ExtraLight.ttf +0 -0
  257. package/src/assets/fonts/roboto/Roboto_SemiCondensed-ExtraLightItalic.ttf +0 -0
  258. package/src/assets/fonts/roboto/Roboto_SemiCondensed-Italic.ttf +0 -0
  259. package/src/assets/fonts/roboto/Roboto_SemiCondensed-Light.ttf +0 -0
  260. package/src/assets/fonts/roboto/Roboto_SemiCondensed-LightItalic.ttf +0 -0
  261. package/src/assets/fonts/roboto/Roboto_SemiCondensed-Medium.ttf +0 -0
  262. package/src/assets/fonts/roboto/Roboto_SemiCondensed-MediumItalic.ttf +0 -0
  263. package/src/assets/fonts/roboto/Roboto_SemiCondensed-Regular.ttf +0 -0
  264. package/src/assets/fonts/roboto/Roboto_SemiCondensed-SemiBold.ttf +0 -0
  265. package/src/assets/fonts/roboto/Roboto_SemiCondensed-SemiBoldItalic.ttf +0 -0
  266. package/src/assets/fonts/roboto/Roboto_SemiCondensed-Thin.ttf +0 -0
  267. package/src/assets/fonts/roboto/Roboto_SemiCondensed-ThinItalic.ttf +0 -0
  268. package/src/assets/fonts/roboto-slab/RobotoSlab-Black.ttf +0 -0
  269. package/src/assets/fonts/roboto-slab/RobotoSlab-Bold.ttf +0 -0
  270. package/src/assets/fonts/roboto-slab/RobotoSlab-ExtraBold.ttf +0 -0
  271. package/src/assets/fonts/roboto-slab/RobotoSlab-ExtraLight.ttf +0 -0
  272. package/src/assets/fonts/roboto-slab/RobotoSlab-Light.ttf +0 -0
  273. package/src/assets/fonts/roboto-slab/RobotoSlab-Medium.ttf +0 -0
  274. package/src/assets/fonts/roboto-slab/RobotoSlab-Regular.ttf +0 -0
  275. package/src/assets/fonts/roboto-slab/RobotoSlab-SemiBold.ttf +0 -0
  276. package/src/assets/fonts/roboto-slab/RobotoSlab-Thin.ttf +0 -0
  277. package/src/assets/fonts/roboto-slab/RobotoSlab-VariableFont_wght.ttf +0 -0
  278. package/src/assets/fonts/rubik-mono-one/RubikMonoOne-Regular.ttf +0 -0
  279. package/src/assets/icons/arrows-up-down-left-right.svg +1 -0
  280. package/src/assets/icons/arrows-up-down.svg +1 -0
  281. package/src/assets/icons/attachments.svg +1 -3
  282. package/src/assets/icons/attachments2.svg +3 -0
  283. package/src/assets/icons/clear.svg +1 -5
  284. package/src/assets/icons/cursor-default-custom.svg +10 -0
  285. package/src/assets/icons/cursor-default.svg +1 -0
  286. package/src/assets/icons/cursor-default2.svg +1 -0
  287. package/src/assets/icons/emoji.svg +1 -6
  288. package/src/assets/icons/emoji2.svg +6 -0
  289. package/src/assets/icons/frame.svg +1 -3
  290. package/src/assets/icons/frame2.svg +3 -0
  291. package/src/assets/icons/i-cursor.svg +1 -0
  292. package/src/assets/icons/image.svg +1 -3
  293. package/src/assets/icons/image2.svg +3 -0
  294. package/src/assets/icons/note.svg +1 -3
  295. package/src/assets/icons/note2.svg +3 -0
  296. package/src/assets/icons/pencil.svg +1 -3
  297. package/src/assets/icons/pencil2.svg +3 -0
  298. package/src/assets/icons/rotate-icon.svg +3 -0
  299. package/src/assets/icons/select.svg +1 -1
  300. package/src/assets/icons/shapes.svg +1 -3
  301. package/src/assets/icons/shapes2.svg +3 -0
  302. package/src/assets/icons/text-add.svg +1 -3
  303. package/src/assets/icons/text-add2.svg +3 -0
  304. package/src/assets/icons/trash.svg +1 -0
  305. package/src/core/PixiEngine.js +32 -0
  306. package/src/core/commands/CopyObjectCommand.js +20 -9
  307. package/src/core/commands/GroupMoveCommand.js +49 -13
  308. package/src/core/commands/MoveObjectCommand.js +4 -24
  309. package/src/core/commands/PasteObjectCommand.js +26 -15
  310. package/src/core/events/Events.js +2 -0
  311. package/src/core/index.js +575 -47
  312. package/src/grid/GridFactory.js +3 -3
  313. package/src/grid/LineGrid.js +42 -20
  314. package/src/moodboard/MoodBoard.js +11 -0
  315. package/src/objects/DrawingObject.js +16 -7
  316. package/src/objects/FileObject.js +25 -11
  317. package/src/objects/FrameObject.js +38 -9
  318. package/src/objects/ImageObject.js +24 -5
  319. package/src/objects/NoteObject.js +227 -39
  320. package/src/objects/ShapeObject.js +9 -8
  321. package/src/objects/TextObject.js +2 -20
  322. package/src/services/BoardService.js +3 -3
  323. package/src/services/FrameService.js +95 -17
  324. package/src/services/ZoomPanController.js +14 -3
  325. package/src/tools/BaseTool.js +6 -1
  326. package/src/tools/ToolManager.js +24 -1
  327. package/src/tools/object-tools/DrawingTool.js +3 -1
  328. package/src/tools/object-tools/PlacementTool.js +366 -105
  329. package/src/tools/object-tools/SelectTool.js +508 -153
  330. package/src/tools/object-tools/TextTool.js +23 -2
  331. package/src/tools/object-tools/selection/BoxSelectController.js +5 -0
  332. package/src/ui/FilePropertiesPanel.js +9 -2
  333. package/src/ui/FramePropertiesPanel.js +239 -91
  334. package/src/ui/HtmlHandlesLayer.js +383 -126
  335. package/src/ui/HtmlTextLayer.js +122 -26
  336. package/src/ui/NotePropertiesPanel.js +128 -44
  337. package/src/ui/TextPropertiesPanel.js +100 -118
  338. package/src/ui/Toolbar.js +254 -65
  339. package/src/ui/Topbar.js +112 -10
  340. package/src/ui/ZoomPanel.js +8 -2
  341. package/src/ui/styles/index.css +5 -0
  342. package/src/ui/styles/panels.css +232 -0
  343. package/src/ui/styles/toolbar.css +77 -0
  344. package/src/ui/styles/topbar.css +113 -0
  345. package/src/ui/styles/workspace.css +481 -263
  346. package/src/utils/emojiResolver.js +121 -0
@@ -67,9 +67,9 @@ export class GridFactory {
67
67
  const defaults = {
68
68
  line: {
69
69
  enabled: true,
70
- size: 20,
71
- color: 0xE0E0E0,
72
- opacity: 0.5,
70
+ size: 32,
71
+ color: 0x6a6aff,
72
+ opacity: 0.4,
73
73
  lineWidth: 1,
74
74
  showSubGrid: false,
75
75
  subGridDivisions: 4
@@ -11,15 +11,26 @@ export class LineGrid extends BaseGrid {
11
11
  // Дополнительные настройки для линейной сетки
12
12
  this.showSubGrid = options.showSubGrid ?? false;
13
13
  this.subGridDivisions = options.subGridDivisions || 4;
14
- this.subGridColor = options.subGridColor || 0xF0F0F0;
15
- this.subGridOpacity = options.subGridOpacity || 0.3;
14
+ this.subGridColor = options.subGridColor || 0xE3E3E3;
15
+ this.subGridOpacity = options.subGridOpacity || 0.45;
16
+ // Более тонкие основные линии и более контрастные
17
+ this.lineWidth = Math.max(0.5, (options.lineWidth || this.lineWidth) / 2);
18
+ this.color = options.color || 0xB0B0B0;
19
+ this.opacity = options.opacity || 0.9;
16
20
  }
17
21
 
18
22
  /**
19
23
  * Создает визуальное представление линейной сетки
20
24
  */
21
25
  createVisual() {
22
- this.graphics.lineStyle(this.lineWidth, this.color, 1);
26
+ // Применяем непрозрачность на графику (умножится на alpha линий)
27
+ this.graphics.alpha = this.opacity;
28
+ try {
29
+ // В новых версиях можно указать alignment для большей чёткости
30
+ this.graphics.lineStyle({ width: this.lineWidth, color: this.color, alpha: 1, alignment: 0.5 });
31
+ } catch (_) {
32
+ this.graphics.lineStyle(this.lineWidth, this.color, 1);
33
+ }
23
34
 
24
35
  // Основные линии сетки
25
36
  this.drawMainGrid();
@@ -34,16 +45,23 @@ export class LineGrid extends BaseGrid {
34
45
  * Рисует основную сетку
35
46
  */
36
47
  drawMainGrid() {
48
+ const w = this.width;
49
+ const h = this.height;
50
+ const step = this.size;
51
+ const half = this.lineWidth / 2;
52
+ // Выравниваем к половине пикселя для чётких линий на любых DPI
37
53
  // Вертикальные линии
38
- for (let x = 0; x <= this.width; x += this.size) {
39
- this.graphics.moveTo(x, 0);
40
- this.graphics.lineTo(x, this.height);
54
+ for (let x = 0; x <= w; x += step) {
55
+ const px = Math.round(x) + (Number.isFinite(half) ? 0.5 : 0);
56
+ this.graphics.moveTo(px, 0);
57
+ this.graphics.lineTo(px, h);
41
58
  }
42
59
 
43
60
  // Горизонтальные линии
44
- for (let y = 0; y <= this.height; y += this.size) {
45
- this.graphics.moveTo(0, y);
46
- this.graphics.lineTo(this.width, y);
61
+ for (let y = 0; y <= h; y += step) {
62
+ const py = Math.round(y) + (Number.isFinite(half) ? 0.5 : 0);
63
+ this.graphics.moveTo(0, py);
64
+ this.graphics.lineTo(w, py);
47
65
  }
48
66
  }
49
67
 
@@ -52,24 +70,28 @@ export class LineGrid extends BaseGrid {
52
70
  */
53
71
  drawSubGrid() {
54
72
  const subSize = this.size / this.subGridDivisions;
55
-
56
- this.graphics.lineStyle(1, this.subGridColor, this.subGridOpacity);
57
-
73
+ try {
74
+ this.graphics.lineStyle({ width: 0.5, color: this.subGridColor, alpha: this.subGridOpacity, alignment: 0.5 });
75
+ } catch (_) {
76
+ this.graphics.lineStyle(0.5, this.subGridColor, this.subGridOpacity);
77
+ }
78
+ const w = this.width;
79
+ const h = this.height;
58
80
  // Вертикальные подлинии
59
- for (let x = subSize; x < this.width; x += subSize) {
60
- // Пропускаем основные линии
81
+ for (let x = subSize; x < w; x += subSize) {
61
82
  if (x % this.size !== 0) {
62
- this.graphics.moveTo(x, 0);
63
- this.graphics.lineTo(x, this.height);
83
+ const px = Math.round(x) + 0.5;
84
+ this.graphics.moveTo(px, 0);
85
+ this.graphics.lineTo(px, h);
64
86
  }
65
87
  }
66
88
 
67
89
  // Горизонтальные подлинии
68
- for (let y = subSize; y < this.height; y += subSize) {
69
- // Пропускаем основные линии
90
+ for (let y = subSize; y < h; y += subSize) {
70
91
  if (y % this.size !== 0) {
71
- this.graphics.moveTo(0, y);
72
- this.graphics.lineTo(this.width, y);
92
+ const py = Math.round(y) + 0.5;
93
+ this.graphics.moveTo(0, py);
94
+ this.graphics.lineTo(w, py);
73
95
  }
74
96
  }
75
97
  }
@@ -186,6 +186,17 @@ export class MoodBoard {
186
186
  this.options.theme
187
187
  );
188
188
 
189
+ // Инициализация цвета кнопки "краска" по текущему фону канваса
190
+ try {
191
+ const app = this.coreMoodboard?.pixi?.app;
192
+ const colorInt = (app?.renderer?.background && app.renderer.background.color) || app?.renderer?.backgroundColor;
193
+ if (typeof colorInt === 'number') {
194
+ const boardHex = `#${colorInt.toString(16).padStart(6, '0')}`;
195
+ const btnHex = this.topbar.mapBoardToBtnHex(boardHex);
196
+ this.topbar.setPaintButtonHex(btnHex || '#B3E5FC');
197
+ }
198
+ } catch (_) {}
199
+
189
200
  // Смена фона доски по выбору цвета в топбаре
190
201
  this.coreMoodboard.eventBus.on(Events.UI.PaintPick, ({ color }) => {
191
202
  if (!color) return;
@@ -73,15 +73,24 @@ export class DrawingObject {
73
73
 
74
74
  _redrawPreserveTransform(points) {
75
75
  const g = this.graphics;
76
- const x = g.x;
77
- const y = g.y;
76
+ // Сохраняем текущий центр и поворот
77
+ const centerX = g.x;
78
+ const centerY = g.y;
78
79
  const rot = g.rotation || 0;
79
- const pivotX = g.pivot?.x || 0;
80
- const pivotY = g.pivot?.y || 0;
80
+
81
+ // Перерисовываем геометрию
81
82
  this._draw(points, this.color, this.strokeWidth, this.mode);
82
- g.pivot.set(pivotX, pivotY);
83
- g.x = x;
84
- g.y = y;
83
+
84
+ // После перерисовки выставляем pivot по ЦЕНТРУ ЛОКАЛЬНЫХ границ,
85
+ // чтобы поворот происходил вокруг геометрического центра без диагонального смещения
86
+ const lb = g.getLocalBounds();
87
+ const pX = (lb.x || 0) + Math.max(0, lb.width / 2);
88
+ const pY = (lb.y || 0) + Math.max(0, lb.height / 2);
89
+ g.pivot.set(pX, pY);
90
+
91
+ // Восстанавливаем центр и поворот
92
+ g.x = centerX;
93
+ g.y = centerY;
85
94
  g.rotation = rot;
86
95
  }
87
96
 
@@ -31,6 +31,13 @@ export class FileObject {
31
31
  this.container.eventMode = 'static';
32
32
  this.container.interactiveChildren = true;
33
33
 
34
+ // Размытая тень (подложка)
35
+ this.shadow = new PIXI.Graphics();
36
+ try {
37
+ this.shadow.filters = [new PIXI.filters.BlurFilter(6)];
38
+ } catch (e) {}
39
+ this.container.addChild(this.shadow);
40
+
34
41
  // Графика фона и иконки
35
42
  this.graphics = new PIXI.Graphics();
36
43
  this.container.addChild(this.graphics);
@@ -147,19 +154,23 @@ export class FileObject {
147
154
  const w = this.width;
148
155
  const h = this.height;
149
156
 
150
- g.clear();
157
+ // Обновляем тень (прямоугольная, размытая)
158
+ if (this.shadow) {
159
+ const s = this.shadow;
160
+ s.clear();
161
+ s.beginFill(0x000000, 1);
162
+ s.drawRect(0, 0, w, h);
163
+ s.endFill();
164
+ s.x = 2;
165
+ s.y = 3;
166
+ s.alpha = 0.18;
167
+ }
151
168
 
152
- // Тень
153
- g.beginFill(0x000000, 0.1);
154
- g.drawRoundedRect(2, 2, w, h, 8);
155
- g.endFill();
169
+ g.clear();
156
170
 
157
- // Основной фон (блеклый для удаленных файлов)
158
- const bgColor = this.isDeleted ? 0xF1F3F4 : 0xF8F9FA;
159
- const borderColor = this.isDeleted ? 0xDADCE0 : 0xDEE2E6;
160
- g.beginFill(bgColor, 1);
161
- g.lineStyle(2, borderColor, 1);
162
- g.drawRoundedRect(0, 0, w, h, 8);
171
+ // Основной фон белый, без скруглений и рамки
172
+ g.beginFill(0xFFFFFF, 1);
173
+ g.drawRect(0, 0, w, h);
163
174
  g.endFill();
164
175
 
165
176
  // Иконка файла в верхней части
@@ -184,6 +195,9 @@ export class FileObject {
184
195
  point.y >= bounds.y &&
185
196
  point.y <= bounds.y + bounds.height;
186
197
  };
198
+
199
+ // Важное выравнивание: pivot контейнера по центру, чтобы рамка совпадала
200
+ this.container.pivot.set(w / 2, h / 2);
187
201
  }
188
202
 
189
203
  _drawFileIcon(graphics, x, y, size, color, extension) {
@@ -12,10 +12,21 @@ export class FrameObject {
12
12
  this.objectData = objectData || {};
13
13
  this.width = this.objectData.width || 100;
14
14
  this.height = this.objectData.height || 100;
15
- this.borderWidth = 2;
15
+ // Берем стили рамки из CSS-переменных, с дефолтом
16
+ const rootStyles = (typeof window !== 'undefined') ? getComputedStyle(document.documentElement) : null;
17
+ const cssBorderWidth = rootStyles ? parseFloat(rootStyles.getPropertyValue('--frame-border-width') || '4') : 4;
18
+ const cssCornerRadius = rootStyles ? parseFloat(rootStyles.getPropertyValue('--frame-corner-radius') || '6') : 6;
19
+ const cssBorderColor = rootStyles ? rootStyles.getPropertyValue('--frame-border-color').trim() : '';
20
+ this.borderWidth = Number.isFinite(cssBorderWidth) ? cssBorderWidth : 4;
16
21
  // Используем backgroundColor из данных объекта, если есть, иначе белый
17
22
  this.fillColor = this.objectData.backgroundColor || this.objectData.properties?.backgroundColor || 0xFFFFFF;
18
- this.strokeColor = this.objectData.borderColor || 0x333333;
23
+ // Парсим цвет из CSS переменной, если задан
24
+ if (cssBorderColor && cssBorderColor.startsWith('#')) {
25
+ this.strokeColor = parseInt(cssBorderColor.slice(1), 16);
26
+ } else {
27
+ this.strokeColor = (typeof this.objectData.borderColor === 'number') ? this.objectData.borderColor : 0xE0E0E0;
28
+ }
29
+ this.cornerRadius = Number.isFinite(cssCornerRadius) ? cssCornerRadius : 6;
19
30
  this.title = this.objectData.title || this.objectData.properties?.title || 'Новый';
20
31
 
21
32
  // Создаем контейнер для фрейма и заголовка
@@ -32,11 +43,16 @@ export class FrameObject {
32
43
  fill: 0x333333,
33
44
  fontWeight: 'bold'
34
45
  });
35
- this.titleText.anchor.set(0, 1); // Левый нижний угол текста
36
- this.titleText.y = -5; // Немного выше фрейма
46
+ // Размещаем заголовок внутри верхней части фрейма, чтобы не влиять на внешние границы
47
+ this.titleText.anchor.set(0, 0);
48
+ this.titleText.x = 8;
49
+ this.titleText.y = 4;
37
50
  this.container.addChild(this.titleText);
38
51
 
39
52
  this._draw(this.width, this.height, this.fillColor);
53
+ // Центрируем pivot контейнера, чтобы совпадали рамка и ручки
54
+ // pivot по центру, чтобы позиция (x,y) контейнера соответствовала центру видимой области фрейма
55
+ this.container.pivot.set(this.width / 2, this.height / 2);
40
56
  }
41
57
 
42
58
  /**
@@ -100,8 +116,8 @@ export class FrameObject {
100
116
  const x = container.x;
101
117
  const y = container.y;
102
118
  const rot = container.rotation || 0;
103
- const pivotX = container.pivot?.x || 0;
104
- const pivotY = container.pivot?.y || 0;
119
+ const pivotX = width / 2;
120
+ const pivotY = height / 2;
105
121
 
106
122
  this._draw(width, height, color);
107
123
 
@@ -117,11 +133,24 @@ export class FrameObject {
117
133
  _draw(width, height, color) {
118
134
  const g = this.graphics;
119
135
  g.clear();
120
- g.lineStyle(this.borderWidth, this.strokeColor, 1);
136
+ // Рисуем с выравниванием обводки внутрь, чтобы внешний контур был ровно width x height
137
+ try {
138
+ g.lineStyle({ width: this.borderWidth, color: this.strokeColor, alpha: 1, alignment: 1 });
139
+ } catch (e) {
140
+ g.lineStyle(this.borderWidth, this.strokeColor, 1);
141
+ }
121
142
  g.beginFill(typeof color === 'number' ? color : 0xFFFFFF, 1);
122
- const halfBorder = this.borderWidth / 2;
123
- g.drawRect(halfBorder, halfBorder, Math.max(0, width - this.borderWidth), Math.max(0, height - this.borderWidth));
143
+ g.drawRoundedRect(0, 0, Math.max(0, width), Math.max(0, height), this.cornerRadius);
124
144
  g.endFill();
145
+ // Обновляем hitArea и корректный hit testing
146
+ this.container.hitArea = new PIXI.Rectangle(0, 0, width, height);
147
+ this.container.containsPoint = (point) => {
148
+ const bounds = this.container.getBounds();
149
+ return point.x >= bounds.x &&
150
+ point.x <= bounds.x + bounds.width &&
151
+ point.y >= bounds.y &&
152
+ point.y <= bounds.y + bounds.height;
153
+ };
125
154
  }
126
155
  }
127
156
 
@@ -7,15 +7,19 @@ export class ImageObject {
7
7
  constructor(objectData = {}) {
8
8
  this.objectData = objectData;
9
9
  let src = objectData.properties?.src || objectData.src;
10
+ const isEmojiIcon = !!objectData.properties?.isEmojiIcon;
10
11
  // Не используем устаревшие blob: URL — они недолговечны и приводят к ERR_FILE_NOT_FOUND
11
12
  if (typeof src === 'string' && src.startsWith('blob:')) {
12
13
  src = null;
13
14
  }
14
- this.width = objectData.width || objectData.properties?.width || 200;
15
- this.height = objectData.height || objectData.properties?.height || 150;
16
- const texture = src ? PIXI.Texture.from(src) : PIXI.Texture.WHITE;
15
+ this.width = Math.max(1, Math.round(objectData.width || objectData.properties?.width || 200));
16
+ this.height = Math.max(1, Math.round(objectData.height || objectData.properties?.height || 150));
17
+ const texture = src ? PIXI.Texture.from(src, { resourceOptions: { resolution: (typeof window !== 'undefined' && window.devicePixelRatio) ? window.devicePixelRatio : 1 } }) : PIXI.Texture.WHITE;
17
18
  this.sprite = new PIXI.Sprite(texture);
18
19
  this.sprite.anchor.set(0.5, 0.5); // центр для совместимости с позиционированием по центру
20
+ if (isEmojiIcon) {
21
+ this.sprite.roundPixels = true; // без nearest, чтобы не форсить увеличение
22
+ }
19
23
  if (!src) {
20
24
  this.sprite.tint = 0xcccccc;
21
25
  }
@@ -45,6 +49,15 @@ export class ImageObject {
45
49
  this.sprite.texture.baseTexture.once('error', onError);
46
50
  }
47
51
 
52
+ if (this.sprite.texture.baseTexture) {
53
+ // Ставим ту же resolution, что у renderer, чтобы минимизировать блюр
54
+ try {
55
+ const dpr = (typeof window !== 'undefined' && window.devicePixelRatio) ? window.devicePixelRatio : 1;
56
+ this.sprite.texture.baseTexture.setResolution(dpr);
57
+ } catch (_) {}
58
+ // оставляем стандартную фильтрацию, чтобы не усиливать пиксельную лесенку при уменьшении
59
+ }
60
+
48
61
  if (this.sprite.texture.baseTexture?.valid) {
49
62
  fitToSize();
50
63
  } else if (this.sprite.texture.baseTexture) {
@@ -58,8 +71,14 @@ export class ImageObject {
58
71
 
59
72
  updateSize(size) {
60
73
  if (!size) return;
61
- const w = Math.max(1, size.width || 1);
62
- const h = Math.max(1, size.height || 1);
74
+ let w = Math.max(1, size.width || 1);
75
+ let h = Math.max(1, size.height || 1);
76
+ // Если объект помечен как emoji icon — сохраняем квадратные пропорции
77
+ const isEmojiIcon = !!(this.objectData?.properties?.isEmojiIcon);
78
+ if (isEmojiIcon) {
79
+ const s = Math.max(w, h);
80
+ w = s; h = s;
81
+ }
63
82
  const apply = () => {
64
83
  const texW = this.sprite.texture.width || 1;
65
84
  const texH = this.sprite.texture.height || 1;