@sequent-org/moodboard 1.1.0 → 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 (336) 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/select.svg +1 -1
  299. package/src/assets/icons/shapes.svg +1 -3
  300. package/src/assets/icons/shapes2.svg +3 -0
  301. package/src/assets/icons/text-add.svg +1 -3
  302. package/src/assets/icons/text-add2.svg +3 -0
  303. package/src/assets/icons/trash.svg +1 -0
  304. package/src/core/commands/GroupMoveCommand.js +49 -13
  305. package/src/core/commands/MoveObjectCommand.js +4 -24
  306. package/src/core/events/Events.js +2 -0
  307. package/src/core/index.js +72 -40
  308. package/src/grid/GridFactory.js +3 -3
  309. package/src/grid/LineGrid.js +42 -20
  310. package/src/moodboard/MoodBoard.js +11 -0
  311. package/src/objects/DrawingObject.js +5 -5
  312. package/src/objects/FrameObject.js +1 -0
  313. package/src/objects/ImageObject.js +24 -5
  314. package/src/objects/NoteObject.js +221 -48
  315. package/src/services/BoardService.js +3 -3
  316. package/src/services/ZoomPanController.js +14 -3
  317. package/src/tools/BaseTool.js +6 -1
  318. package/src/tools/ToolManager.js +24 -1
  319. package/src/tools/object-tools/DrawingTool.js +3 -1
  320. package/src/tools/object-tools/PlacementTool.js +213 -93
  321. package/src/tools/object-tools/SelectTool.js +318 -134
  322. package/src/tools/object-tools/TextTool.js +23 -2
  323. package/src/ui/FramePropertiesPanel.js +101 -96
  324. package/src/ui/HtmlHandlesLayer.js +253 -52
  325. package/src/ui/HtmlTextLayer.js +120 -32
  326. package/src/ui/NotePropertiesPanel.js +115 -38
  327. package/src/ui/TextPropertiesPanel.js +100 -118
  328. package/src/ui/Toolbar.js +136 -50
  329. package/src/ui/Topbar.js +112 -10
  330. package/src/ui/ZoomPanel.js +8 -2
  331. package/src/ui/styles/index.css +5 -0
  332. package/src/ui/styles/panels.css +232 -0
  333. package/src/ui/styles/toolbar.css +77 -0
  334. package/src/ui/styles/topbar.css +113 -0
  335. package/src/ui/styles/workspace.css +412 -263
  336. package/src/utils/emojiResolver.js +121 -0
@@ -101,7 +101,6 @@ export class NotePropertiesPanel {
101
101
  }
102
102
  // Скрываем все палитры цветов
103
103
  if (this.backgroundColorPalette) this.backgroundColorPalette.style.display = 'none';
104
- if (this.borderColorPalette) this.borderColorPalette.style.display = 'none';
105
104
  if (this.textColorPalette) this.textColorPalette.style.display = 'none';
106
105
  }
107
106
 
@@ -114,16 +113,17 @@ export class NotePropertiesPanel {
114
113
  flexDirection: 'row',
115
114
  alignItems: 'center',
116
115
  gap: '8px',
117
- padding: '8px 12px',
116
+ padding: '8px 40px',
118
117
  backgroundColor: 'white',
119
118
  border: '1px solid #e0e0e0',
120
- borderRadius: '8px',
121
- boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)',
119
+ borderRadius: '9999px',
120
+ boxShadow: '0 6px 24px rgba(0, 0, 0, 0.16)',
122
121
  fontSize: '12px',
123
122
  fontFamily: 'Arial, sans-serif',
124
123
  minWidth: '320px',
125
124
  height: '40px',
126
- zIndex: '10000'
125
+ zIndex: '10000',
126
+ backdropFilter: 'blur(4px)'
127
127
  });
128
128
 
129
129
  // Создаем контролы для записки
@@ -179,6 +179,63 @@ export class NotePropertiesPanel {
179
179
  }
180
180
 
181
181
  _createNoteControls(panel) {
182
+ // Контейнер для выбора шрифта (как в панели текста)
183
+ const fontContainer = document.createElement('div');
184
+ Object.assign(fontContainer.style, {
185
+ display: 'flex',
186
+ alignItems: 'center',
187
+ gap: '6px'
188
+ });
189
+
190
+ const fontLabel = document.createElement('span');
191
+ fontLabel.textContent = 'Шрифт:';
192
+ Object.assign(fontLabel.style, {
193
+ fontSize: '11px',
194
+ color: '#666',
195
+ minWidth: '40px'
196
+ });
197
+
198
+ const fontSelect = document.createElement('select');
199
+ Object.assign(fontSelect.style, {
200
+ border: '1px solid #ddd',
201
+ borderRadius: '4px',
202
+ padding: '3px 8px',
203
+ fontSize: '12px',
204
+ backgroundColor: '#fff',
205
+ cursor: 'pointer',
206
+ minWidth: '140px',
207
+ });
208
+ this.fontSelect = fontSelect;
209
+
210
+ const fonts = [
211
+ { value: 'Caveat, Arial, cursive', name: 'Caveat' },
212
+ { value: 'Roboto, Arial, sans-serif', name: 'Roboto' },
213
+ { value: 'Oswald, Arial, sans-serif', name: 'Oswald' },
214
+ { value: 'Playfair Display, Georgia, serif', name: 'Playfair Display' },
215
+ { value: 'Roboto Slab, Georgia, serif', name: 'Roboto Slab' },
216
+ { value: 'Noto Serif, Georgia, serif', name: 'Noto Serif' },
217
+ { value: 'Lobster, Arial, cursive', name: 'Lobster' },
218
+ { value: 'Rubik Mono One, Arial, sans-serif', name: 'Rubik Mono One' },
219
+ { value: 'Great Vibes, Arial, cursive', name: 'Great Vibes' },
220
+ { value: 'Amatic SC, Arial, cursive', name: 'Amatic SC' },
221
+ { value: 'Poiret One, Arial, cursive', name: 'Poiret One' },
222
+ { value: 'Pacifico, Arial, cursive', name: 'Pacifico' },
223
+ ];
224
+ fonts.forEach((font) => {
225
+ const option = document.createElement('option');
226
+ option.value = font.value;
227
+ option.textContent = font.name;
228
+ option.style.fontFamily = font.value;
229
+ fontSelect.appendChild(option);
230
+ });
231
+
232
+ fontSelect.addEventListener('change', (e) => {
233
+ this._changeFontFamily(e.target.value);
234
+ });
235
+
236
+ fontContainer.appendChild(fontLabel);
237
+ fontContainer.appendChild(fontSelect);
238
+
182
239
  // Контейнер для цвета фона
183
240
  const backgroundContainer = this._createColorControl(
184
241
  'Фон:',
@@ -195,21 +252,7 @@ export class NotePropertiesPanel {
195
252
  'backgroundColor'
196
253
  );
197
254
 
198
- // Контейнер для цвета границы
199
- const borderContainer = this._createColorControl(
200
- 'Граница:',
201
- 'borderColorButton',
202
- 'borderColorPalette',
203
- [
204
- { name: 'Золотой', hex: '#F9A825', pixi: 0xF9A825 },
205
- { name: 'Розовый', hex: '#E91E63', pixi: 0xE91E63 },
206
- { name: 'Синий', hex: '#2196F3', pixi: 0x2196F3 },
207
- { name: 'Зеленый', hex: '#4CAF50', pixi: 0x4CAF50 },
208
- { name: 'Оранжевый', hex: '#FF9800', pixi: 0xFF9800 },
209
- { name: 'Фиолетовый', hex: '#9C27B0', pixi: 0x9C27B0 }
210
- ],
211
- 'borderColor'
212
- );
255
+ // Раздел "Граница" удалён по требованиям дизайна
213
256
 
214
257
  // Контейнер для цвета текста
215
258
  const textContainer = this._createColorControl(
@@ -270,8 +313,8 @@ export class NotePropertiesPanel {
270
313
  fontSizeContainer.appendChild(fontSizeLabel);
271
314
  fontSizeContainer.appendChild(fontSizeInput);
272
315
 
316
+ panel.appendChild(fontContainer);
273
317
  panel.appendChild(backgroundContainer);
274
- panel.appendChild(borderContainer);
275
318
  panel.appendChild(textContainer);
276
319
  panel.appendChild(fontSizeContainer);
277
320
  }
@@ -295,12 +338,13 @@ export class NotePropertiesPanel {
295
338
 
296
339
  const button = document.createElement('button');
297
340
  Object.assign(button.style, {
298
- width: '32px',
299
- height: '20px',
300
- border: '1px solid #ccc',
301
- borderRadius: '4px',
341
+ width: '24px',
342
+ height: '24px',
343
+ border: `1px solid ${this._darkenHex(colors[0].hex, 0.28)}`,
344
+ borderRadius: '50%',
302
345
  cursor: 'pointer',
303
- backgroundColor: colors[0].hex
346
+ backgroundColor: colors[0].hex,
347
+ padding: '0'
304
348
  });
305
349
 
306
350
  button.addEventListener('click', (e) => {
@@ -342,11 +386,11 @@ export class NotePropertiesPanel {
342
386
  colors.forEach(color => {
343
387
  const colorSwatch = document.createElement('div');
344
388
  Object.assign(colorSwatch.style, {
345
- width: '20px',
346
- height: '20px',
389
+ width: '22px',
390
+ height: '22px',
347
391
  backgroundColor: color.hex,
348
- border: '1px solid #ccc',
349
- borderRadius: '4px',
392
+ border: `1px solid ${this._darkenHex(color.hex, 0.28)}`,
393
+ borderRadius: '50%',
350
394
  cursor: 'pointer',
351
395
  transition: 'transform 0.1s'
352
396
  });
@@ -400,8 +444,8 @@ export class NotePropertiesPanel {
400
444
  }
401
445
 
402
446
  _documentClickHandler(e) {
403
- const palettes = [this.backgroundColorPalette, this.borderColorPalette, this.textColorPalette];
404
- const buttons = [this.backgroundColorButton, this.borderColorButton, this.textColorButton];
447
+ const palettes = [this.backgroundColorPalette, this.textColorPalette];
448
+ const buttons = [this.backgroundColorButton, this.textColorButton];
405
449
 
406
450
  let shouldClose = true;
407
451
 
@@ -432,12 +476,11 @@ export class NotePropertiesPanel {
432
476
  // Обновляем соответствующую кнопку
433
477
  if (propertyName === 'backgroundColor' && this.backgroundColorButton) {
434
478
  this.backgroundColorButton.style.backgroundColor = color.hex;
479
+ this.backgroundColorButton.style.borderColor = this._darkenHex(color.hex, 0.28);
435
480
  this.backgroundColorButton.title = `Цвет фона: ${color.name}`;
436
- } else if (propertyName === 'borderColor' && this.borderColorButton) {
437
- this.borderColorButton.style.backgroundColor = color.hex;
438
- this.borderColorButton.title = `Цвет границы: ${color.name}`;
439
481
  } else if (propertyName === 'textColor' && this.textColorButton) {
440
482
  this.textColorButton.style.backgroundColor = color.hex;
483
+ this.textColorButton.style.borderColor = this._darkenHex(color.hex, 0.28);
441
484
  this.textColorButton.title = `Цвет текста: ${color.name}`;
442
485
  }
443
486
 
@@ -463,6 +506,17 @@ export class NotePropertiesPanel {
463
506
  });
464
507
  }
465
508
 
509
+ _changeFontFamily(fontFamily) {
510
+ if (!this.currentId) return;
511
+
512
+ console.log('📝 NotePropertiesPanel: Changing font family to:', fontFamily);
513
+
514
+ this.eventBus.emit(Events.Object.StateChanged, {
515
+ objectId: this.currentId,
516
+ updates: { properties: { fontFamily: fontFamily } }
517
+ });
518
+ }
519
+
466
520
  _updateControlsFromObject() {
467
521
  if (!this.currentId) return;
468
522
 
@@ -474,9 +528,7 @@ export class NotePropertiesPanel {
474
528
  if (this.backgroundColorButton && props.backgroundColor !== undefined) {
475
529
  this._updateColorButton(this.backgroundColorButton, props.backgroundColor);
476
530
  }
477
- if (this.borderColorButton && props.borderColor !== undefined) {
478
- this._updateColorButton(this.borderColorButton, props.borderColor);
479
- }
531
+ // Раздел "Граница" удалён пропускаем обновление кнопки границы
480
532
  if (this.textColorButton && props.textColor !== undefined) {
481
533
  this._updateColorButton(this.textColorButton, props.textColor);
482
534
  }
@@ -485,6 +537,11 @@ export class NotePropertiesPanel {
485
537
  if (this.fontSizeInput && props.fontSize !== undefined) {
486
538
  this.fontSizeInput.value = props.fontSize.toString();
487
539
  }
540
+
541
+ // Обновляем выбранный шрифт
542
+ if (this.fontSelect) {
543
+ this.fontSelect.value = props.fontFamily || 'Pacifico, Arial, sans-serif';
544
+ }
488
545
  }
489
546
  }
490
547
 
@@ -494,6 +551,26 @@ export class NotePropertiesPanel {
494
551
  // Конвертируем PIXI цвет в hex строку
495
552
  const hexColor = `#${pixiColor.toString(16).padStart(6, '0').toUpperCase()}`;
496
553
  button.style.backgroundColor = hexColor;
554
+ button.style.borderColor = this._darkenHex(hexColor, 0.28);
555
+ }
556
+
557
+ /**
558
+ * Затемняет hex-цвет на заданную долю (0..1)
559
+ */
560
+ _darkenHex(hex, amount = 0.2) {
561
+ try {
562
+ const norm = (hex || '').trim();
563
+ const m = /^#?([a-fA-F0-9]{6})$/.exec(norm.startsWith('#') ? norm : `#${norm}`);
564
+ if (!m) return '#777777';
565
+ const num = parseInt(m[1], 16);
566
+ const r = Math.max(0, Math.min(255, Math.floor(((num >> 16) & 0xFF) * (1 - amount))));
567
+ const g = Math.max(0, Math.min(255, Math.floor(((num >> 8) & 0xFF) * (1 - amount))));
568
+ const b = Math.max(0, Math.min(255, Math.floor((num & 0xFF) * (1 - amount))));
569
+ const toHex = (v) => v.toString(16).padStart(2, '0').toUpperCase();
570
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
571
+ } catch (_) {
572
+ return '#777777';
573
+ }
497
574
  }
498
575
 
499
576
  destroy() {
@@ -41,7 +41,7 @@ export class TextPropertiesPanel {
41
41
  if (this.currentId && objectId === this.currentId) this.hide();
42
42
  });
43
43
 
44
- // Скрываем панель во время редактирования текста
44
+ // Во время редактирования текста скрываем панель
45
45
  this.eventBus.on(Events.UI.TextEditStart, () => {
46
46
  this.isTextEditing = true;
47
47
  this.hide();
@@ -119,23 +119,7 @@ export class TextPropertiesPanel {
119
119
  _createPanel() {
120
120
  const panel = document.createElement('div');
121
121
  panel.className = 'text-properties-panel';
122
- Object.assign(panel.style, {
123
- position: 'absolute',
124
- pointerEvents: 'auto',
125
- display: 'flex',
126
- flexDirection: 'row',
127
- alignItems: 'center',
128
- gap: '12px',
129
- padding: '8px 16px',
130
- backgroundColor: 'white',
131
- border: '1px solid #e0e0e0',
132
- borderRadius: '8px',
133
- boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)',
134
- fontSize: '14px',
135
- fontFamily: 'Arial, sans-serif',
136
- minWidth: '550px',
137
- height: '44px'
138
- });
122
+ // Основные стили панели вынесены в CSS (.text-properties-panel)
139
123
 
140
124
  // Создаем контролы
141
125
  this._createFontControls(panel);
@@ -147,36 +131,28 @@ export class TextPropertiesPanel {
147
131
  // Лейбл для шрифта
148
132
  const fontLabel = document.createElement('span');
149
133
  fontLabel.textContent = 'Шрифт:';
150
- fontLabel.style.fontSize = '12px';
151
- fontLabel.style.color = '#666';
152
- fontLabel.style.fontWeight = '500';
134
+ fontLabel.className = 'tpp-label';
153
135
  panel.appendChild(fontLabel);
154
136
 
155
137
  // Выпадающий список шрифтов
156
138
  this.fontSelect = document.createElement('select');
157
139
  this.fontSelect.className = 'font-select';
158
- Object.assign(this.fontSelect.style, {
159
- border: '1px solid #ddd',
160
- borderRadius: '4px',
161
- padding: '4px 8px',
162
- fontSize: '13px',
163
- backgroundColor: 'white',
164
- cursor: 'pointer',
165
- minWidth: '140px'
166
- });
140
+ this.fontSelect.className = 'font-select';
167
141
 
168
142
  // Список популярных шрифтов
169
143
  const fonts = [
170
- { value: 'Arial, sans-serif', name: 'Arial' },
171
- { value: 'Helvetica, sans-serif', name: 'Helvetica' },
172
- { value: 'Georgia, serif', name: 'Georgia' },
173
- { value: 'Times New Roman, serif', name: 'Times New Roman' },
174
- { value: 'Courier New, monospace', name: 'Courier New' },
175
- { value: 'Verdana, sans-serif', name: 'Verdana' },
176
- { value: 'Tahoma, sans-serif', name: 'Tahoma' },
177
- { value: 'Impact, sans-serif', name: 'Impact' },
178
- { value: 'Comic Sans MS, cursive', name: 'Comic Sans MS' },
179
- { value: 'Trebuchet MS, sans-serif', name: 'Trebuchet MS' }
144
+ { value: 'Roboto, Arial, sans-serif', name: 'Roboto' },
145
+ { value: 'Oswald, Arial, sans-serif', name: 'Oswald' },
146
+ { value: '"Playfair Display", Georgia, serif', name: 'Playfair Display' },
147
+ { value: '"Roboto Slab", Georgia, serif', name: 'Roboto Slab' },
148
+ { value: '"Noto Serif", Georgia, serif', name: 'Noto Serif' },
149
+ { value: 'Lobster, "Comic Sans MS", cursive', name: 'Lobster' },
150
+ { value: 'Caveat, "Comic Sans MS", cursive', name: 'Caveat' },
151
+ { value: '"Rubik Mono One", "Courier New", monospace', name: 'Rubik Mono One' },
152
+ { value: '"Great Vibes", "Comic Sans MS", cursive', name: 'Great Vibes' },
153
+ { value: '"Amatic SC", "Comic Sans MS", cursive', name: 'Amatic SC' },
154
+ { value: '"Poiret One", Arial, sans-serif', name: 'Poiret One' },
155
+ { value: 'Pacifico, "Comic Sans MS", cursive', name: 'Pacifico' }
180
156
  ];
181
157
 
182
158
  fonts.forEach(font => {
@@ -197,24 +173,13 @@ export class TextPropertiesPanel {
197
173
  // Лейбл для размера
198
174
  const sizeLabel = document.createElement('span');
199
175
  sizeLabel.textContent = 'Размер:';
200
- sizeLabel.style.fontSize = '12px';
201
- sizeLabel.style.color = '#666';
202
- sizeLabel.style.fontWeight = '500';
203
- sizeLabel.style.marginLeft = '8px';
176
+ sizeLabel.className = 'tpp-label tpp-label--spaced';
204
177
  panel.appendChild(sizeLabel);
205
178
 
206
179
  // Выпадающий список размеров шрифта
207
180
  this.fontSizeSelect = document.createElement('select');
208
181
  this.fontSizeSelect.className = 'font-size-select';
209
- Object.assign(this.fontSizeSelect.style, {
210
- border: '1px solid #ddd',
211
- borderRadius: '4px',
212
- padding: '4px 8px',
213
- fontSize: '13px',
214
- backgroundColor: 'white',
215
- cursor: 'pointer',
216
- minWidth: '70px'
217
- });
182
+ this.fontSizeSelect.className = 'font-size-select';
218
183
 
219
184
  // Популярные размеры шрифта
220
185
  const fontSizes = [8, 10, 12, 14, 16, 18, 20, 24, 28, 32, 36, 48, 60, 72];
@@ -236,22 +201,16 @@ export class TextPropertiesPanel {
236
201
  // Лейбл для цвета
237
202
  const colorLabel = document.createElement('span');
238
203
  colorLabel.textContent = 'Цвет:';
239
- colorLabel.style.fontSize = '12px';
240
- colorLabel.style.color = '#666';
241
- colorLabel.style.fontWeight = '500';
242
- colorLabel.style.marginLeft = '8px';
204
+ colorLabel.className = 'tpp-label tpp-label--spaced';
243
205
  panel.appendChild(colorLabel);
244
206
 
245
207
  // Создаем компактный селектор цвета текста
246
208
  this._createCompactColorSelector(panel);
247
209
 
248
- // Лейбл для выделения
210
+ // Лейбл для фона
249
211
  const bgColorLabel = document.createElement('span');
250
- bgColorLabel.textContent = 'Выделение:';
251
- bgColorLabel.style.fontSize = '12px';
252
- bgColorLabel.style.color = '#666';
253
- bgColorLabel.style.fontWeight = '500';
254
- bgColorLabel.style.marginLeft = '8px';
212
+ bgColorLabel.textContent = 'Фон:';
213
+ bgColorLabel.className = 'tpp-label tpp-label--spaced';
255
214
  panel.appendChild(bgColorLabel);
256
215
 
257
216
  // Создаем компактный селектор цвета фона
@@ -271,19 +230,7 @@ export class TextPropertiesPanel {
271
230
  this.currentColorButton = document.createElement('button');
272
231
  this.currentColorButton.type = 'button';
273
232
  this.currentColorButton.title = 'Выбрать цвет';
274
- this.currentColorButton.style.cssText = `
275
- width: 32px;
276
- height: 24px;
277
- border: 2px solid #ddd;
278
- border-radius: 4px;
279
- background-color: #000000;
280
- cursor: pointer;
281
- margin: 0;
282
- padding: 0;
283
- display: block;
284
- box-sizing: border-box;
285
- position: relative;
286
- `;
233
+ this.currentColorButton.className = 'current-color-button';
287
234
 
288
235
  // Создаем выпадающую панель с цветами
289
236
  this.colorDropdown = document.createElement('div');
@@ -325,27 +272,27 @@ export class TextPropertiesPanel {
325
272
  _createColorGrid(container) {
326
273
  // Популярные цвета для текста
327
274
  const presetColors = [
328
- { color: '#000000', name: 'Черный' },
329
- { color: '#333333', name: 'Темно-серый' },
330
- { color: '#666666', name: 'Серый' },
331
- { color: '#999999', name: 'Светло-серый' },
332
- { color: '#ffffff', name: 'Белый' },
333
- { color: '#ff0000', name: 'Красный' },
334
- { color: '#00ff00', name: 'Зеленый' },
335
- { color: '#0000ff', name: 'Синий' },
336
- { color: '#ffff00', name: 'Желтый' },
337
- { color: '#ff00ff', name: 'Фиолетовый' },
338
- { color: '#00ffff', name: 'Голубой' },
339
- { color: '#ffa500', name: 'Оранжевый' }
275
+ { color: '#000000', name: '#000000' },
276
+ { color: '#404040', name: '#404040' },
277
+ { color: '#999999', name: '#999999' },
278
+ { color: '#FF2D55', name: '#FF2D55' },
279
+ { color: '#CB30E0', name: '#CB30E0' },
280
+ { color: '#6155F5', name: '#6155F5' },
281
+ { color: '#00C0E8', name: '#00C0E8' },
282
+ { color: '#34C759', name: '#34C759' },
283
+ { color: '#FF8D28', name: '#FF8D28' },
284
+ { color: '#FFCC00', name: '#FFCC00' }
340
285
  ];
341
286
 
342
287
  // Сетка заготовленных цветов
343
288
  const presetsGrid = document.createElement('div');
344
289
  presetsGrid.style.cssText = `
345
290
  display: grid;
346
- grid-template-columns: repeat(6, 1fr);
347
- gap: 4px;
291
+ grid-template-columns: repeat(6, 28px);
292
+ gap: 6px;
348
293
  margin-bottom: 8px;
294
+ align-items: center;
295
+ justify-items: center;
349
296
  `;
350
297
 
351
298
  presetColors.forEach(preset => {
@@ -353,10 +300,10 @@ export class TextPropertiesPanel {
353
300
  colorButton.type = 'button';
354
301
  colorButton.title = preset.name;
355
302
  colorButton.style.cssText = `
356
- width: 24px;
357
- height: 24px;
303
+ width: 28px;
304
+ height: 28px;
358
305
  border: 1px solid #ddd;
359
- border-radius: 3px;
306
+ border-radius: 50%;
360
307
  background-color: ${preset.color};
361
308
  cursor: pointer;
362
309
  margin: 0;
@@ -364,9 +311,31 @@ export class TextPropertiesPanel {
364
311
  display: block;
365
312
  box-sizing: border-box;
366
313
  ${preset.color === '#ffffff' ? 'border-color: #ccc;' : ''}
314
+ position: relative;
315
+ `;
316
+ // Галочка по центру активного пресета
317
+ const tick = document.createElement('i');
318
+ tick.style.cssText = `
319
+ position: absolute;
320
+ left: 50%;
321
+ top: 50%;
322
+ width: 8px;
323
+ height: 5px;
324
+ transform: translate(-50%, -50%) rotate(315deg) scaleX(-1);
325
+ border-right: 2px solid #111;
326
+ border-bottom: 2px solid #111;
327
+ display: none;
328
+ pointer-events: none;
367
329
  `;
330
+ colorButton.appendChild(tick);
368
331
 
369
332
  colorButton.addEventListener('click', () => {
333
+ // Снимаем активность с других и ставим на текущий
334
+ Array.from(presetsGrid.children).forEach((el) => {
335
+ const i = el.querySelector('i');
336
+ if (i) i.style.display = 'none';
337
+ });
338
+ tick.style.display = 'block';
370
339
  this._selectColor(preset.color);
371
340
  });
372
341
 
@@ -462,19 +431,7 @@ export class TextPropertiesPanel {
462
431
  this.currentBgColorButton = document.createElement('button');
463
432
  this.currentBgColorButton.type = 'button';
464
433
  this.currentBgColorButton.title = 'Выбрать цвет выделения';
465
- this.currentBgColorButton.style.cssText = `
466
- width: 32px;
467
- height: 24px;
468
- border: 2px solid #ddd;
469
- border-radius: 4px;
470
- background-color: transparent;
471
- cursor: pointer;
472
- margin: 0;
473
- padding: 0;
474
- display: block;
475
- box-sizing: border-box;
476
- position: relative;
477
- `;
434
+ this.currentBgColorButton.className = 'current-bgcolor-button';
478
435
 
479
436
  // Создаем выпадающую панель с цветами фона
480
437
  this.bgColorDropdown = document.createElement('div');
@@ -534,9 +491,11 @@ export class TextPropertiesPanel {
534
491
  const presetsGrid = document.createElement('div');
535
492
  presetsGrid.style.cssText = `
536
493
  display: grid;
537
- grid-template-columns: repeat(6, 1fr);
538
- gap: 4px;
494
+ grid-template-columns: repeat(6, 28px);
495
+ gap: 6px;
539
496
  margin-bottom: 8px;
497
+ align-items: center;
498
+ justify-items: center;
540
499
  `;
541
500
 
542
501
  bgColors.forEach(preset => {
@@ -547,10 +506,10 @@ export class TextPropertiesPanel {
547
506
  if (preset.color === 'transparent') {
548
507
  // Специальная кнопка для "без выделения"
549
508
  colorButton.style.cssText = `
550
- width: 24px;
551
- height: 24px;
509
+ width: 28px;
510
+ height: 28px;
552
511
  border: 1px solid #ddd;
553
- border-radius: 3px;
512
+ border-radius: 50%;
554
513
  background: white;
555
514
  cursor: pointer;
556
515
  margin: 0;
@@ -573,10 +532,10 @@ export class TextPropertiesPanel {
573
532
  colorButton.appendChild(line);
574
533
  } else {
575
534
  colorButton.style.cssText = `
576
- width: 24px;
577
- height: 24px;
535
+ width: 28px;
536
+ height: 28px;
578
537
  border: 1px solid #ddd;
579
- border-radius: 3px;
538
+ border-radius: 50%;
580
539
  background-color: ${preset.color};
581
540
  cursor: pointer;
582
541
  margin: 0;
@@ -584,10 +543,33 @@ export class TextPropertiesPanel {
584
543
  display: block;
585
544
  box-sizing: border-box;
586
545
  ${preset.color === '#ffffff' ? 'border-color: #ccc;' : ''}
546
+ position: relative;
547
+ `;
548
+ // Галочка по центру активного пресета
549
+ const tick = document.createElement('i');
550
+ tick.style.cssText = `
551
+ position: absolute;
552
+ left: 50%;
553
+ top: 50%;
554
+ width: 8px;
555
+ height: 5px;
556
+ transform: translate(-50%, -50%) rotate(315deg) scaleX(-1);
557
+ border-right: 2px solid #111;
558
+ border-bottom: 2px solid #111;
559
+ display: none;
560
+ pointer-events: none;
587
561
  `;
562
+ colorButton.appendChild(tick);
588
563
  }
589
564
 
590
565
  colorButton.addEventListener('click', () => {
566
+ // Снимаем активность с других и ставим на текущий
567
+ Array.from(presetsGrid.children).forEach((el) => {
568
+ const i = el.querySelector('i');
569
+ if (i) i.style.display = 'none';
570
+ });
571
+ const selfTick = colorButton.querySelector('i');
572
+ if (selfTick) selfTick.style.display = 'block';
591
573
  this._selectBgColor(preset.color);
592
574
  });
593
575
 
@@ -701,11 +683,11 @@ export class TextPropertiesPanel {
701
683
 
702
684
  console.log('🔧 TextPropertiesPanel: Changing font family to:', fontFamily);
703
685
 
704
- // Обновляем свойства объекта через StateManager
686
+ // Обновляем свойства объекта через StateManager (в properties)
705
687
  this.eventBus.emit(Events.Object.StateChanged, {
706
688
  objectId: this.currentId,
707
689
  updates: {
708
- fontFamily: fontFamily
690
+ properties: { fontFamily }
709
691
  }
710
692
  });
711
693
 
@@ -822,7 +804,7 @@ export class TextPropertiesPanel {
822
804
  this.fontSelect.value = properties.fontFamily;
823
805
  } else {
824
806
  // Устанавливаем дефолтный шрифт
825
- this.fontSelect.value = 'Arial, sans-serif';
807
+ this.fontSelect.value = 'Roboto, Arial, sans-serif';
826
808
  }
827
809
 
828
810
  // Устанавливаем размер шрифта в селекте
@@ -881,7 +863,7 @@ export class TextPropertiesPanel {
881
863
 
882
864
  // Позиционируем панель над объектом
883
865
  const panelX = screenX + (objectWidth / 2) - (this.panel.offsetWidth / 2);
884
- const panelY = screenY - this.panel.offsetHeight - 10; // 10px отступ от объекта
866
+ const panelY = screenY - this.panel.offsetHeight - 20; // поднимем выше ещё
885
867
 
886
868
  // Проверяем границы контейнера
887
869
  const containerRect = this.container.getBoundingClientRect();