@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.
- package/package.json +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
- 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
- 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
- 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
- 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
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f446.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f447.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f448.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f449.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f44a.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f44b.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f44c.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f450.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f4aa.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f590.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f596.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f64c.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/1f64f.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/261d.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/270a.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/270b.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/270c.png +0 -0
- package/src/assets/emodji//320/226/320/265/321/201/321/202/321/213/270d.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f638.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f639.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63a.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63b.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63c.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63d.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63e.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f63f.png +0 -0
- package/src/assets/emodji//320/232/320/276/321/202/320/270/320/272/320/270/1f640.png +0 -0
- 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
- 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
- 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
- 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
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f440.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f441.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f499.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4a1.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4a3.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4a9.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4ac.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/1f4af.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/203c.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/26d4.png +0 -0
- package/src/assets/emodji//320/240/320/260/320/267/320/275/320/276/320/265/2764.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f600.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f601.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f602.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f603.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f604.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f605.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f606.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f607.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f609.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60a.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60b.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60c.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60d.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60e.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f60f.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f610.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f611.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f612.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f613.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f614.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f615.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f616.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f617.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f618.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f619.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61a.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61b.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61c.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61d.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61e.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f61f.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f620.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f621.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f622.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f623.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f624.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f625.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f626.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f627.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f628.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f629.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62a.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62b.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62c.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62d.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62e.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f62f.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f630.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f631.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f632.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f633.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f635.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f636.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f641.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/1f642.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/2639.png +0 -0
- package/src/assets/emodji//320/241/320/274/320/260/320/271/320/273/320/270/320/272/320/270/263a.png +0 -0
- package/src/assets/fonts/amatic-sc/AmaticSC-Bold.ttf +0 -0
- package/src/assets/fonts/amatic-sc/AmaticSC-Regular.ttf +0 -0
- package/src/assets/fonts/caveat/Caveat-Bold.ttf +0 -0
- package/src/assets/fonts/caveat/Caveat-Medium.ttf +0 -0
- package/src/assets/fonts/caveat/Caveat-Regular.ttf +0 -0
- package/src/assets/fonts/caveat/Caveat-SemiBold.ttf +0 -0
- package/src/assets/fonts/caveat/Caveat-VariableFont_wght.ttf +0 -0
- package/src/assets/fonts/great-vibes/GreatVibes-Regular.ttf +0 -0
- package/src/assets/fonts/lobster/Lobster-Regular.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-Black.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-BlackItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-Bold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-BoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-ExtraBold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-ExtraLight.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-ExtraLightItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-Italic-VariableFont_wdth,wght.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-Italic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-Light.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-LightItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-Medium.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-MediumItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-Regular.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-SemiBold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-Thin.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-ThinItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif-VariableFont_wdth,wght.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Black.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-BlackItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Bold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-BoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ExtraBold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ExtraLight.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ExtraLightItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Italic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Light.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-LightItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Medium.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-MediumItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Regular.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-SemiBold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-Thin.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_Condensed-ThinItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Black.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-BlackItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Bold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-BoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ExtraBold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ExtraLight.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ExtraLightItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Italic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Light.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-LightItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Medium.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-MediumItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Regular.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-SemiBold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-Thin.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_ExtraCondensed-ThinItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Black.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-BlackItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Bold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-BoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ExtraBold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ExtraLight.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ExtraLightItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Italic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Light.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-LightItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Medium.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-MediumItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Regular.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-SemiBold.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-Thin.ttf +0 -0
- package/src/assets/fonts/noto-serif/NotoSerif_SemiCondensed-ThinItalic.ttf +0 -0
- package/src/assets/fonts/oswald/Oswald-Bold.ttf +0 -0
- package/src/assets/fonts/oswald/Oswald-ExtraLight.ttf +0 -0
- package/src/assets/fonts/oswald/Oswald-Light.ttf +0 -0
- package/src/assets/fonts/oswald/Oswald-Medium.ttf +0 -0
- package/src/assets/fonts/oswald/Oswald-Regular.ttf +0 -0
- package/src/assets/fonts/oswald/Oswald-SemiBold.ttf +0 -0
- package/src/assets/fonts/oswald/Oswald-VariableFont_wght.ttf +0 -0
- package/src/assets/fonts/pacifico/Pacifico-Regular.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-Black.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-BlackItalic.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-Bold.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-BoldItalic.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-ExtraBold.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-Italic-VariableFont_wght.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-Italic.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-Medium.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-MediumItalic.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-Regular.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-SemiBold.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/playfair/PlayfairDisplay-VariableFont_wght.ttf +0 -0
- package/src/assets/fonts/poiret-one/PoiretOne-Regular.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-Black.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-BlackItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-Bold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-BoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-ExtraBold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-ExtraLight.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-ExtraLightItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-Italic-VariableFont_wdth,wght.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-Italic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-Light.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-LightItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-Medium.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-MediumItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-Regular.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-SemiBold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-Thin.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-ThinItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto-VariableFont_wdth,wght.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-Black.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-BlackItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-Bold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-BoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-ExtraBold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-ExtraLight.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-ExtraLightItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-Italic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-Light.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-LightItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-Medium.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-MediumItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-Regular.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-SemiBold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-Thin.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_Condensed-ThinItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-Black.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-BlackItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-Bold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-BoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-ExtraBold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-ExtraLight.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-ExtraLightItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-Italic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-Light.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-LightItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-Medium.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-MediumItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-Regular.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-SemiBold.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-SemiBoldItalic.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-Thin.ttf +0 -0
- package/src/assets/fonts/roboto/Roboto_SemiCondensed-ThinItalic.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-Black.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-Bold.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-ExtraBold.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-ExtraLight.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-Light.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-Medium.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-Regular.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-SemiBold.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-Thin.ttf +0 -0
- package/src/assets/fonts/roboto-slab/RobotoSlab-VariableFont_wght.ttf +0 -0
- package/src/assets/fonts/rubik-mono-one/RubikMonoOne-Regular.ttf +0 -0
- package/src/assets/icons/arrows-up-down-left-right.svg +1 -0
- package/src/assets/icons/arrows-up-down.svg +1 -0
- package/src/assets/icons/attachments.svg +1 -3
- package/src/assets/icons/attachments2.svg +3 -0
- package/src/assets/icons/clear.svg +1 -5
- package/src/assets/icons/cursor-default-custom.svg +10 -0
- package/src/assets/icons/cursor-default.svg +1 -0
- package/src/assets/icons/cursor-default2.svg +1 -0
- package/src/assets/icons/emoji.svg +1 -6
- package/src/assets/icons/emoji2.svg +6 -0
- package/src/assets/icons/frame.svg +1 -3
- package/src/assets/icons/frame2.svg +3 -0
- package/src/assets/icons/i-cursor.svg +1 -0
- package/src/assets/icons/image.svg +1 -3
- package/src/assets/icons/image2.svg +3 -0
- package/src/assets/icons/note.svg +1 -3
- package/src/assets/icons/note2.svg +3 -0
- package/src/assets/icons/pencil.svg +1 -3
- package/src/assets/icons/pencil2.svg +3 -0
- package/src/assets/icons/rotate-icon.svg +3 -0
- package/src/assets/icons/select.svg +1 -1
- package/src/assets/icons/shapes.svg +1 -3
- package/src/assets/icons/shapes2.svg +3 -0
- package/src/assets/icons/text-add.svg +1 -3
- package/src/assets/icons/text-add2.svg +3 -0
- package/src/assets/icons/trash.svg +1 -0
- package/src/core/PixiEngine.js +32 -0
- package/src/core/commands/CopyObjectCommand.js +20 -9
- package/src/core/commands/GroupMoveCommand.js +49 -13
- package/src/core/commands/MoveObjectCommand.js +4 -24
- package/src/core/commands/PasteObjectCommand.js +26 -15
- package/src/core/events/Events.js +2 -0
- package/src/core/index.js +575 -47
- package/src/grid/GridFactory.js +3 -3
- package/src/grid/LineGrid.js +42 -20
- package/src/moodboard/MoodBoard.js +11 -0
- package/src/objects/DrawingObject.js +16 -7
- package/src/objects/FileObject.js +25 -11
- package/src/objects/FrameObject.js +38 -9
- package/src/objects/ImageObject.js +24 -5
- package/src/objects/NoteObject.js +227 -39
- package/src/objects/ShapeObject.js +9 -8
- package/src/objects/TextObject.js +2 -20
- package/src/services/BoardService.js +3 -3
- package/src/services/FrameService.js +95 -17
- package/src/services/ZoomPanController.js +14 -3
- package/src/tools/BaseTool.js +6 -1
- package/src/tools/ToolManager.js +24 -1
- package/src/tools/object-tools/DrawingTool.js +3 -1
- package/src/tools/object-tools/PlacementTool.js +366 -105
- package/src/tools/object-tools/SelectTool.js +508 -153
- package/src/tools/object-tools/TextTool.js +23 -2
- package/src/tools/object-tools/selection/BoxSelectController.js +5 -0
- package/src/ui/FilePropertiesPanel.js +9 -2
- package/src/ui/FramePropertiesPanel.js +239 -91
- package/src/ui/HtmlHandlesLayer.js +383 -126
- package/src/ui/HtmlTextLayer.js +122 -26
- package/src/ui/NotePropertiesPanel.js +128 -44
- package/src/ui/TextPropertiesPanel.js +100 -118
- package/src/ui/Toolbar.js +254 -65
- package/src/ui/Topbar.js +112 -10
- package/src/ui/ZoomPanel.js +8 -2
- package/src/ui/styles/index.css +5 -0
- package/src/ui/styles/panels.css +232 -0
- package/src/ui/styles/toolbar.css +77 -0
- package/src/ui/styles/topbar.css +113 -0
- package/src/ui/styles/workspace.css +481 -263
- package/src/utils/emojiResolver.js +121 -0
package/src/grid/GridFactory.js
CHANGED
package/src/grid/LineGrid.js
CHANGED
|
@@ -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 ||
|
|
15
|
-
this.subGridOpacity = options.subGridOpacity || 0.
|
|
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
|
-
|
|
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 <=
|
|
39
|
-
|
|
40
|
-
this.graphics.
|
|
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 <=
|
|
45
|
-
|
|
46
|
-
this.graphics.
|
|
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
|
-
|
|
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 <
|
|
60
|
-
// Пропускаем основные линии
|
|
81
|
+
for (let x = subSize; x < w; x += subSize) {
|
|
61
82
|
if (x % this.size !== 0) {
|
|
62
|
-
|
|
63
|
-
this.graphics.
|
|
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 <
|
|
69
|
-
// Пропускаем основные линии
|
|
90
|
+
for (let y = subSize; y < h; y += subSize) {
|
|
70
91
|
if (y % this.size !== 0) {
|
|
71
|
-
|
|
72
|
-
this.graphics.
|
|
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
|
-
|
|
77
|
-
const
|
|
76
|
+
// Сохраняем текущий центр и поворот
|
|
77
|
+
const centerX = g.x;
|
|
78
|
+
const centerY = g.y;
|
|
78
79
|
const rot = g.rotation || 0;
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
|
|
81
|
+
// Перерисовываем геометрию
|
|
81
82
|
this._draw(points, this.color, this.strokeWidth, this.mode);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
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
|
-
|
|
159
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36
|
-
this.titleText.
|
|
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 =
|
|
104
|
-
const pivotY =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
62
|
-
|
|
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;
|