@sequent-org/moodboard 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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/commands/GroupMoveCommand.js +49 -13
- package/src/core/commands/MoveObjectCommand.js +4 -24
- package/src/core/events/Events.js +2 -0
- package/src/core/index.js +72 -40
- package/src/grid/GridFactory.js +3 -3
- package/src/grid/LineGrid.js +42 -20
- package/src/index.js +6 -1
- package/src/initNoBundler.js +145 -0
- package/src/moodboard/MoodBoard.js +11 -0
- package/src/objects/DrawingObject.js +5 -5
- package/src/objects/FrameObject.js +1 -0
- package/src/objects/ImageObject.js +24 -5
- package/src/objects/NoteObject.js +221 -48
- package/src/services/BoardService.js +3 -3
- 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 +213 -93
- package/src/tools/object-tools/SelectTool.js +318 -134
- package/src/tools/object-tools/TextTool.js +23 -2
- package/src/ui/FramePropertiesPanel.js +101 -96
- package/src/ui/HtmlHandlesLayer.js +253 -52
- package/src/ui/HtmlTextLayer.js +120 -32
- package/src/ui/NotePropertiesPanel.js +115 -38
- package/src/ui/TextPropertiesPanel.js +100 -118
- package/src/ui/Toolbar.js +212 -48
- 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 +412 -263
- package/src/utils/emojiLoaderNoBundler.js +120 -0
- package/src/utils/emojiResolver.js +121 -0
- package/src/utils/styleLoader.js +84 -0
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
import { BaseTool } from '../BaseTool.js';
|
|
2
|
+
import iCursorSvg from '../../assets/icons/i-cursor.svg?raw';
|
|
3
|
+
|
|
4
|
+
// Масштабируем I-курсор в 2 раза меньше
|
|
5
|
+
const _scaledICursorSvg = (() => {
|
|
6
|
+
try {
|
|
7
|
+
if (!/\bwidth="/i.test(iCursorSvg)) {
|
|
8
|
+
return iCursorSvg.replace('<svg ', '<svg width="16px" height="32px" ');
|
|
9
|
+
}
|
|
10
|
+
return iCursorSvg
|
|
11
|
+
.replace(/width="[^"]+"/i, 'width="16px"')
|
|
12
|
+
.replace(/height="[^"]+"/i, 'height="32px"');
|
|
13
|
+
} catch (_) {
|
|
14
|
+
return iCursorSvg;
|
|
15
|
+
}
|
|
16
|
+
})();
|
|
17
|
+
|
|
18
|
+
const TEXT_CURSOR = `url("data:image/svg+xml;charset=utf-8,${encodeURIComponent(_scaledICursorSvg)}") 0 0, text`;
|
|
2
19
|
import { Events } from '../../core/events/Events.js';
|
|
3
20
|
import * as PIXI from 'pixi.js';
|
|
4
21
|
|
|
@@ -9,7 +26,7 @@ import * as PIXI from 'pixi.js';
|
|
|
9
26
|
export class PlacementTool extends BaseTool {
|
|
10
27
|
constructor(eventBus, core = null) {
|
|
11
28
|
super('place', eventBus);
|
|
12
|
-
this.cursor = '
|
|
29
|
+
this.cursor = 'default';
|
|
13
30
|
this.hotkey = null;
|
|
14
31
|
this.app = null;
|
|
15
32
|
this.world = null;
|
|
@@ -25,6 +42,11 @@ export class PlacementTool extends BaseTool {
|
|
|
25
42
|
if (this.eventBus) {
|
|
26
43
|
this.eventBus.on(Events.Place.Set, (cfg) => {
|
|
27
44
|
this.pending = cfg ? { ...cfg } : null;
|
|
45
|
+
// Обновляем курсор в зависимости от pending
|
|
46
|
+
if (this.app && this.app.view) {
|
|
47
|
+
const cur = this._getPendingCursor();
|
|
48
|
+
this.app.view.style.cursor = (cur === 'default') ? '' : cur;
|
|
49
|
+
}
|
|
28
50
|
|
|
29
51
|
// Показываем призрак для текста, записки, эмоджи, фрейма или фигур, если они активны
|
|
30
52
|
if (this.pending && this.app && this.world) {
|
|
@@ -34,6 +56,8 @@ export class PlacementTool extends BaseTool {
|
|
|
34
56
|
this.showNoteGhost();
|
|
35
57
|
} else if (this.pending.type === 'emoji') {
|
|
36
58
|
this.showEmojiGhost();
|
|
59
|
+
} else if (this.pending.type === 'image') {
|
|
60
|
+
this.showImageUrlGhost();
|
|
37
61
|
} else if (this.pending.type === 'frame') {
|
|
38
62
|
this.showFrameGhost();
|
|
39
63
|
} else if (this.pending.type === 'frame-draw') {
|
|
@@ -41,6 +65,29 @@ export class PlacementTool extends BaseTool {
|
|
|
41
65
|
} else if (this.pending.type === 'shape') {
|
|
42
66
|
this.showShapeGhost();
|
|
43
67
|
}
|
|
68
|
+
// Поддержка сценария перетаскивания из панели: отпускание без предварительного mousedown на канвасе
|
|
69
|
+
if (this.pending.placeOnMouseUp && this.app && this.app.view) {
|
|
70
|
+
const onUp = (ev) => {
|
|
71
|
+
this.app.view.removeEventListener('mouseup', onUp);
|
|
72
|
+
if (!this.pending) return;
|
|
73
|
+
const worldPoint = this._toWorld(ev.x, ev.y);
|
|
74
|
+
const position = {
|
|
75
|
+
x: Math.round(worldPoint.x - (this.pending.size?.width ?? 100) / 2),
|
|
76
|
+
y: Math.round(worldPoint.y - (this.pending.size?.height ?? 100) / 2)
|
|
77
|
+
};
|
|
78
|
+
const props = { ...(this.pending.properties || {}) };
|
|
79
|
+
this.eventBus.emit(Events.UI.ToolbarAction, {
|
|
80
|
+
type: this.pending.type,
|
|
81
|
+
id: this.pending.type,
|
|
82
|
+
position,
|
|
83
|
+
properties: props
|
|
84
|
+
});
|
|
85
|
+
this.pending = null;
|
|
86
|
+
this.hideGhost();
|
|
87
|
+
this.eventBus.emit(Events.Keyboard.ToolSelect, { tool: 'select' });
|
|
88
|
+
};
|
|
89
|
+
this.app.view.addEventListener('mouseup', onUp, { once: true });
|
|
90
|
+
}
|
|
44
91
|
}
|
|
45
92
|
});
|
|
46
93
|
|
|
@@ -90,9 +137,9 @@ export class PlacementTool extends BaseTool {
|
|
|
90
137
|
super.activate();
|
|
91
138
|
this.app = app;
|
|
92
139
|
this.world = this._getWorldLayer();
|
|
93
|
-
// Курсор
|
|
140
|
+
// Курсор в зависимости от типа размещаемого объекта
|
|
94
141
|
if (this.app && this.app.view) {
|
|
95
|
-
this.app.view.style.cursor =
|
|
142
|
+
this.app.view.style.cursor = this._getPendingCursor();
|
|
96
143
|
// Добавляем обработчик движения мыши для "призрака"
|
|
97
144
|
this.app.view.addEventListener('mousemove', this._onMouseMove.bind(this));
|
|
98
145
|
}
|
|
@@ -145,6 +192,31 @@ export class PlacementTool extends BaseTool {
|
|
|
145
192
|
}
|
|
146
193
|
|
|
147
194
|
if (!this.pending) return;
|
|
195
|
+
// Если включен режим "перетянуть и отпустить" из панели (placeOnMouseUp),
|
|
196
|
+
// то размещение выполняем на mouseup, а здесь только показываем призрак и запоминаем старт
|
|
197
|
+
if (this.pending.placeOnMouseUp) {
|
|
198
|
+
const onUp = (ev) => {
|
|
199
|
+
this.app.view.removeEventListener('mouseup', onUp);
|
|
200
|
+
// Имитация обычного place по текущему положению курсора
|
|
201
|
+
const worldPoint = this._toWorld(ev.x, ev.y);
|
|
202
|
+
const position = {
|
|
203
|
+
x: Math.round(worldPoint.x - (this.pending.size?.width ?? 100) / 2),
|
|
204
|
+
y: Math.round(worldPoint.y - (this.pending.size?.height ?? 100) / 2)
|
|
205
|
+
};
|
|
206
|
+
const props = { ...(this.pending.properties || {}) };
|
|
207
|
+
this.eventBus.emit(Events.UI.ToolbarAction, {
|
|
208
|
+
type: this.pending.type,
|
|
209
|
+
id: this.pending.type,
|
|
210
|
+
position,
|
|
211
|
+
properties: props
|
|
212
|
+
});
|
|
213
|
+
this.pending = null;
|
|
214
|
+
this.hideGhost();
|
|
215
|
+
this.eventBus.emit(Events.Keyboard.ToolSelect, { tool: 'select' });
|
|
216
|
+
};
|
|
217
|
+
this.app.view.addEventListener('mouseup', onUp, { once: true });
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
148
220
|
// Если включен режим рисования фрейма — инициируем рамку
|
|
149
221
|
if (this.pending.type === 'frame-draw') {
|
|
150
222
|
const start = this._toWorld(event.x, event.y);
|
|
@@ -360,12 +432,14 @@ export class PlacementTool extends BaseTool {
|
|
|
360
432
|
} else {
|
|
361
433
|
// Для записки: выставляем фактические габариты и центрируем по курсору
|
|
362
434
|
if (this.pending.type === 'note') {
|
|
363
|
-
const
|
|
364
|
-
const
|
|
365
|
-
|
|
435
|
+
const base = 250; // квадрат 250x250
|
|
436
|
+
const noteW = (typeof props.width === 'number') ? props.width : base;
|
|
437
|
+
const noteH = (typeof props.height === 'number') ? props.height : base;
|
|
438
|
+
const side = Math.max(noteW, noteH);
|
|
439
|
+
props = { ...props, width: side, height: side };
|
|
366
440
|
position = {
|
|
367
|
-
x: Math.round(worldPoint.x -
|
|
368
|
-
y: Math.round(worldPoint.y -
|
|
441
|
+
x: Math.round(worldPoint.x - side / 2),
|
|
442
|
+
y: Math.round(worldPoint.y - side / 2)
|
|
369
443
|
};
|
|
370
444
|
}
|
|
371
445
|
// Обычное размещение через общий канал
|
|
@@ -399,9 +473,14 @@ export class PlacementTool extends BaseTool {
|
|
|
399
473
|
const h = Math.abs(p.y - this._frameDrawState.startY);
|
|
400
474
|
const g = this._frameDrawState.graphics;
|
|
401
475
|
g.clear();
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
476
|
+
// Снапим к полупикселю и используем внутреннее выравнивание линии для чётких 1px краёв
|
|
477
|
+
const x0 = Math.floor(x) + 0.5;
|
|
478
|
+
const y0 = Math.floor(y) + 0.5;
|
|
479
|
+
const w0 = Math.max(1, Math.round(w));
|
|
480
|
+
const h0 = Math.max(1, Math.round(h));
|
|
481
|
+
g.lineStyle(1, 0x3B82F6, 1, 1 /* alignment: inner */);
|
|
482
|
+
g.beginFill(0xFFFFFF, 0.6);
|
|
483
|
+
g.drawRect(x0, y0, w0, h0);
|
|
405
484
|
g.endFill();
|
|
406
485
|
}
|
|
407
486
|
|
|
@@ -454,6 +533,11 @@ export class PlacementTool extends BaseTool {
|
|
|
454
533
|
*/
|
|
455
534
|
_onMouseMove(event) {
|
|
456
535
|
if ((this.selectedFile || this.selectedImage || this.pending) && this.ghostContainer) {
|
|
536
|
+
// Сохраним последние координаты мыши (в экранных координатах) — пригодится для первичной позиции призрака
|
|
537
|
+
if (this.app && this.app.view) {
|
|
538
|
+
this.app.view._lastMouseX = event.x;
|
|
539
|
+
this.app.view._lastMouseY = event.y;
|
|
540
|
+
}
|
|
457
541
|
const worldPoint = this._toWorld(event.offsetX, event.offsetY);
|
|
458
542
|
this.updateGhostPosition(worldPoint.x, worldPoint.y);
|
|
459
543
|
}
|
|
@@ -470,6 +554,17 @@ export class PlacementTool extends BaseTool {
|
|
|
470
554
|
// Создаем контейнер для призрака
|
|
471
555
|
this.ghostContainer = new PIXI.Container();
|
|
472
556
|
this.ghostContainer.alpha = 0.6; // Полупрозрачность
|
|
557
|
+
// Сразу ставим контейнер в позицию курсора, чтобы он не мигал в левом верхнем углу
|
|
558
|
+
if (this.app && this.app.view) {
|
|
559
|
+
const rect = this.app.view.getBoundingClientRect();
|
|
560
|
+
const cursorX = (typeof this.app.view._lastMouseX === 'number') ? this.app.view._lastMouseX : (rect.left + rect.width / 2);
|
|
561
|
+
const cursorY = (typeof this.app.view._lastMouseY === 'number') ? this.app.view._lastMouseY : (rect.top + rect.height / 2);
|
|
562
|
+
const worldPoint = this._toWorld(cursorX, cursorY);
|
|
563
|
+
this.updateGhostPosition(worldPoint.x, worldPoint.y);
|
|
564
|
+
}
|
|
565
|
+
// Попробуем дождаться загрузки веб-шрифта Caveat до отрисовки
|
|
566
|
+
const pendingFont = (this.pending.properties?.fontFamily) || 'Caveat, Arial, cursive';
|
|
567
|
+
const primaryFont = String(pendingFont).split(',')[0].trim().replace(/^['"]|['"]$/g, '') || 'Caveat';
|
|
473
568
|
|
|
474
569
|
// Размеры
|
|
475
570
|
const width = this.selectedFile.properties.width || 120;
|
|
@@ -708,6 +803,67 @@ export class PlacementTool extends BaseTool {
|
|
|
708
803
|
this.world.addChild(this.ghostContainer);
|
|
709
804
|
}
|
|
710
805
|
|
|
806
|
+
/**
|
|
807
|
+
* Показать "призрак" изображения по URL (для выбора из панели эмоджи)
|
|
808
|
+
*/
|
|
809
|
+
async showImageUrlGhost() {
|
|
810
|
+
if (!this.pending || this.pending.type !== 'image' || !this.world) return;
|
|
811
|
+
const src = this.pending.properties?.src;
|
|
812
|
+
if (!src) return;
|
|
813
|
+
|
|
814
|
+
this.hideGhost();
|
|
815
|
+
|
|
816
|
+
this.ghostContainer = new PIXI.Container();
|
|
817
|
+
this.ghostContainer.alpha = 0.6;
|
|
818
|
+
|
|
819
|
+
const maxWidth = this.pending.size?.width || this.pending.properties?.width || 56;
|
|
820
|
+
const maxHeight = this.pending.size?.height || this.pending.properties?.height || 56;
|
|
821
|
+
|
|
822
|
+
try {
|
|
823
|
+
const texture = await PIXI.Texture.fromURL(src);
|
|
824
|
+
const imageAspect = (texture.width || 1) / (texture.height || 1);
|
|
825
|
+
let width = maxWidth;
|
|
826
|
+
let height = maxWidth / imageAspect;
|
|
827
|
+
if (height > maxHeight) {
|
|
828
|
+
height = maxHeight;
|
|
829
|
+
width = maxHeight * imageAspect;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
const sprite = new PIXI.Sprite(texture);
|
|
833
|
+
sprite.width = Math.max(1, Math.round(width));
|
|
834
|
+
sprite.height = Math.max(1, Math.round(height));
|
|
835
|
+
|
|
836
|
+
const border = new PIXI.Graphics();
|
|
837
|
+
try { border.lineStyle({ width: 2, color: 0xDEE2E6, alpha: 0.8 }); }
|
|
838
|
+
catch (_) { border.lineStyle(2, 0xDEE2E6, 0.8); }
|
|
839
|
+
border.drawRoundedRect(-2, -2, sprite.width + 4, sprite.height + 4, 4);
|
|
840
|
+
|
|
841
|
+
this.ghostContainer.addChild(border);
|
|
842
|
+
this.ghostContainer.addChild(sprite);
|
|
843
|
+
this.ghostContainer.pivot.set(sprite.width / 2, sprite.height / 2);
|
|
844
|
+
} catch (e) {
|
|
845
|
+
const g = new PIXI.Graphics();
|
|
846
|
+
g.beginFill(0xF0F0F0, 0.8);
|
|
847
|
+
g.lineStyle(2, 0xDEE2E6, 0.8);
|
|
848
|
+
g.drawRoundedRect(0, 0, maxWidth, maxHeight, 8);
|
|
849
|
+
g.endFill();
|
|
850
|
+
this.ghostContainer.addChild(g);
|
|
851
|
+
this.ghostContainer.pivot.set(maxWidth / 2, maxHeight / 2);
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
this.world.addChild(this.ghostContainer);
|
|
855
|
+
|
|
856
|
+
// Кастомный курсор: мини-превью иконки рядом с курсором
|
|
857
|
+
try {
|
|
858
|
+
if (this.app && this.app.view && src) {
|
|
859
|
+
const cursorSize = 24;
|
|
860
|
+
const url = encodeURI(src);
|
|
861
|
+
// Используем CSS cursor с изображением, если поддерживается
|
|
862
|
+
this.app.view.style.cursor = `url(${url}) ${Math.floor(cursorSize/2)} ${Math.floor(cursorSize/2)}, default`;
|
|
863
|
+
}
|
|
864
|
+
} catch (_) {}
|
|
865
|
+
}
|
|
866
|
+
|
|
711
867
|
/**
|
|
712
868
|
* Показать "призрак" текста
|
|
713
869
|
*/
|
|
@@ -772,70 +928,36 @@ export class PlacementTool extends BaseTool {
|
|
|
772
928
|
this.ghostContainer = new PIXI.Container();
|
|
773
929
|
this.ghostContainer.alpha = 0.6; // Полупрозрачность
|
|
774
930
|
|
|
775
|
-
// Размеры и
|
|
776
|
-
const width = this.pending.properties?.width ||
|
|
777
|
-
const height = this.pending.properties?.height ||
|
|
778
|
-
const fontSize = this.pending.properties?.fontSize || 16;
|
|
779
|
-
const content = this.pending.properties?.content || 'Новая записка';
|
|
931
|
+
// Размеры и стили (без текста у призрака)
|
|
932
|
+
const width = this.pending.properties?.width || 250;
|
|
933
|
+
const height = this.pending.properties?.height || 250;
|
|
780
934
|
const backgroundColor = (typeof this.pending.properties?.backgroundColor === 'number')
|
|
781
935
|
? this.pending.properties.backgroundColor
|
|
782
|
-
: 0xFFF9C4;
|
|
783
|
-
const borderColor = (typeof this.pending.properties?.borderColor === 'number')
|
|
784
|
-
? this.pending.properties.borderColor
|
|
785
|
-
: 0xF9A825;
|
|
936
|
+
: 0xFFF9C4; // желтый как у записки
|
|
786
937
|
const textColor = (typeof this.pending.properties?.textColor === 'number')
|
|
787
938
|
? this.pending.properties.textColor
|
|
788
939
|
: 0x1A1A1A;
|
|
789
940
|
|
|
790
|
-
//
|
|
791
|
-
const shadow = new PIXI.Graphics();
|
|
792
|
-
try {
|
|
793
|
-
shadow.filters = [new PIXI.filters.BlurFilter(6)];
|
|
794
|
-
} catch (e) {}
|
|
795
|
-
shadow.beginFill(0x000000, 1);
|
|
796
|
-
shadow.drawRect(0, 0, width, height);
|
|
797
|
-
shadow.endFill();
|
|
798
|
-
shadow.x = 2;
|
|
799
|
-
shadow.y = 3;
|
|
800
|
-
shadow.alpha = 0.18;
|
|
941
|
+
// Тени для призрака отключены по требованию (без тени)
|
|
801
942
|
|
|
802
|
-
// Основной фон записки (
|
|
943
|
+
// Основной фон записки (желтый как у оригинала)
|
|
803
944
|
const background = new PIXI.Graphics();
|
|
804
945
|
background.beginFill(backgroundColor, 1);
|
|
805
|
-
background.
|
|
946
|
+
background.drawRoundedRect(0, 0, width, height, 2);
|
|
806
947
|
background.endFill();
|
|
807
948
|
|
|
808
|
-
//
|
|
809
|
-
const header = new PIXI.Graphics();
|
|
810
|
-
header.beginFill(borderColor, 1);
|
|
811
|
-
header.drawRect(0, 0, width, 8);
|
|
812
|
-
header.endFill();
|
|
813
|
-
|
|
814
|
-
// Текст записки, выровнен как в NoteObject (центр по X, отступ сверху)
|
|
815
|
-
const noteText = new PIXI.Text(content, {
|
|
816
|
-
fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif',
|
|
817
|
-
fontSize: fontSize,
|
|
818
|
-
fill: textColor,
|
|
819
|
-
align: 'center',
|
|
820
|
-
wordWrap: true,
|
|
821
|
-
wordWrapWidth: width - 16,
|
|
822
|
-
lineHeight: fontSize * 1.2
|
|
823
|
-
});
|
|
824
|
-
noteText.anchor.set(0.5, 0);
|
|
825
|
-
noteText.x = Math.round(width / 2);
|
|
826
|
-
noteText.y = 20; // как в NoteObject topMargin
|
|
949
|
+
// У призрака текста нет — только фон записки
|
|
827
950
|
|
|
828
951
|
// Порядок добавления: тень → фон → шапка → текст
|
|
829
|
-
|
|
952
|
+
// Без тени
|
|
830
953
|
this.ghostContainer.addChild(background);
|
|
831
|
-
this.ghostContainer.addChild(header);
|
|
832
|
-
this.ghostContainer.addChild(noteText);
|
|
833
954
|
|
|
834
955
|
// Центрируем контейнер относительно курсора
|
|
835
956
|
this.ghostContainer.pivot.x = width / 2;
|
|
836
957
|
this.ghostContainer.pivot.y = height / 2;
|
|
837
958
|
|
|
838
959
|
this.world.addChild(this.ghostContainer);
|
|
960
|
+
// Текст убран — дополнительная загрузка шрифтов для призрака не требуется
|
|
839
961
|
}
|
|
840
962
|
|
|
841
963
|
/**
|
|
@@ -911,15 +1033,33 @@ export class PlacementTool extends BaseTool {
|
|
|
911
1033
|
// Получаем параметры фрейма из pending
|
|
912
1034
|
const width = this.pending.properties?.width || 200;
|
|
913
1035
|
const height = this.pending.properties?.height || 300;
|
|
914
|
-
const fillColor = this.pending.properties?.fillColor
|
|
915
|
-
const borderColor = this.pending.properties?.borderColor || 0x333333;
|
|
1036
|
+
const fillColor = (this.pending.properties?.backgroundColor ?? this.pending.properties?.fillColor) ?? 0xFFFFFF;
|
|
916
1037
|
const title = this.pending.properties?.title || 'Новый';
|
|
1038
|
+
|
|
1039
|
+
// Читаем стили рамки как у реального фрейма (FrameObject)
|
|
1040
|
+
const rootStyles = (typeof window !== 'undefined') ? getComputedStyle(document.documentElement) : null;
|
|
1041
|
+
const cssBorderWidth = rootStyles ? parseFloat(rootStyles.getPropertyValue('--frame-border-width') || '4') : 4;
|
|
1042
|
+
const cssCornerRadius = rootStyles ? parseFloat(rootStyles.getPropertyValue('--frame-corner-radius') || '6') : 6;
|
|
1043
|
+
const cssBorderColor = rootStyles ? rootStyles.getPropertyValue('--frame-border-color').trim() : '';
|
|
1044
|
+
const borderWidth = Number.isFinite(cssBorderWidth) ? cssBorderWidth : 4;
|
|
1045
|
+
const cornerRadius = Number.isFinite(cssCornerRadius) ? cssCornerRadius : 6;
|
|
1046
|
+
let strokeColor;
|
|
1047
|
+
if (cssBorderColor && cssBorderColor.startsWith('#')) {
|
|
1048
|
+
strokeColor = parseInt(cssBorderColor.slice(1), 16);
|
|
1049
|
+
} else {
|
|
1050
|
+
strokeColor = (typeof this.pending.properties?.borderColor === 'number') ? this.pending.properties.borderColor : 0xE0E0E0;
|
|
1051
|
+
}
|
|
917
1052
|
|
|
918
|
-
// Создаем фон фрейма (как в FrameObject)
|
|
1053
|
+
// Создаем фон фрейма (как в FrameObject) — повторяем стили рамки
|
|
919
1054
|
const frameGraphics = new PIXI.Graphics();
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
1055
|
+
try {
|
|
1056
|
+
frameGraphics.lineStyle({ width: borderWidth, color: strokeColor, alpha: 1, alignment: 1 });
|
|
1057
|
+
} catch (e) {
|
|
1058
|
+
frameGraphics.lineStyle(borderWidth, strokeColor, 1);
|
|
1059
|
+
}
|
|
1060
|
+
// Заливка как у фрейма, прозрачность задаётся через контейнер (alpha)
|
|
1061
|
+
frameGraphics.beginFill(fillColor, 1);
|
|
1062
|
+
frameGraphics.drawRoundedRect(0, 0, width, height, cornerRadius);
|
|
923
1063
|
frameGraphics.endFill();
|
|
924
1064
|
|
|
925
1065
|
// Создаем заголовок фрейма (как в FrameObject)
|
|
@@ -929,41 +1069,13 @@ export class PlacementTool extends BaseTool {
|
|
|
929
1069
|
fill: 0x333333,
|
|
930
1070
|
fontWeight: 'bold'
|
|
931
1071
|
});
|
|
932
|
-
|
|
933
|
-
titleText.
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
const dashedBorder = new PIXI.Graphics();
|
|
937
|
-
dashedBorder.lineStyle(1, 0x007BFF, 0.6);
|
|
938
|
-
// Создаем пунктирную линию вручную
|
|
939
|
-
for (let i = 0; i <= width; i += 10) {
|
|
940
|
-
if ((i / 10) % 2 === 0) {
|
|
941
|
-
dashedBorder.moveTo(i, -2);
|
|
942
|
-
dashedBorder.lineTo(Math.min(i + 5, width), -2);
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
for (let i = 0; i <= height; i += 10) {
|
|
946
|
-
if ((i / 10) % 2 === 0) {
|
|
947
|
-
dashedBorder.moveTo(-2, i);
|
|
948
|
-
dashedBorder.lineTo(-2, Math.min(i + 5, height));
|
|
949
|
-
}
|
|
950
|
-
}
|
|
951
|
-
for (let i = 0; i <= width; i += 10) {
|
|
952
|
-
if ((i / 10) % 2 === 0) {
|
|
953
|
-
dashedBorder.moveTo(i, height + 2);
|
|
954
|
-
dashedBorder.lineTo(Math.min(i + 5, width), height + 2);
|
|
955
|
-
}
|
|
956
|
-
}
|
|
957
|
-
for (let i = 0; i <= height; i += 10) {
|
|
958
|
-
if ((i / 10) % 2 === 0) {
|
|
959
|
-
dashedBorder.moveTo(width + 2, i);
|
|
960
|
-
dashedBorder.lineTo(width + 2, Math.min(i + 5, height));
|
|
961
|
-
}
|
|
962
|
-
}
|
|
1072
|
+
// Размещаем заголовок внутри верхней части фрейма
|
|
1073
|
+
titleText.anchor.set(0, 0);
|
|
1074
|
+
titleText.x = 8;
|
|
1075
|
+
titleText.y = 4;
|
|
963
1076
|
|
|
964
1077
|
this.ghostContainer.addChild(frameGraphics);
|
|
965
1078
|
this.ghostContainer.addChild(titleText);
|
|
966
|
-
this.ghostContainer.addChild(dashedBorder);
|
|
967
1079
|
|
|
968
1080
|
// Центрируем контейнер относительно курсора
|
|
969
1081
|
this.ghostContainer.pivot.x = width / 2;
|
|
@@ -1143,4 +1255,12 @@ export class PlacementTool extends BaseTool {
|
|
|
1143
1255
|
}
|
|
1144
1256
|
}
|
|
1145
1257
|
|
|
1258
|
+
// Возвращает подходящий курсор для текущего pending состояния
|
|
1259
|
+
PlacementTool.prototype._getPendingCursor = function() {
|
|
1260
|
+
if (!this.pending) return 'crosshair';
|
|
1261
|
+
if (this.pending.type === 'text') return TEXT_CURSOR;
|
|
1262
|
+
if (this.pending.type === 'frame-draw') return 'crosshair';
|
|
1263
|
+
return 'crosshair';
|
|
1264
|
+
};
|
|
1265
|
+
|
|
1146
1266
|
|