@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
package/src/ui/Toolbar.js
CHANGED
|
@@ -418,9 +418,10 @@ export class Toolbar {
|
|
|
418
418
|
type: 'note',
|
|
419
419
|
properties: {
|
|
420
420
|
content: 'Новая записка',
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
421
|
+
fontFamily: 'Caveat, Arial, cursive',
|
|
422
|
+
fontSize: 32,
|
|
423
|
+
width: 250,
|
|
424
|
+
height: 250
|
|
424
425
|
}
|
|
425
426
|
});
|
|
426
427
|
return;
|
|
@@ -529,6 +530,13 @@ export class Toolbar {
|
|
|
529
530
|
this.setActiveToolbarButton('place'); // ← Исправление: подсвечиваем кнопку эмоджи
|
|
530
531
|
return;
|
|
531
532
|
}
|
|
533
|
+
|
|
534
|
+
// Очистка холста - требует подтверждения
|
|
535
|
+
if (toolType === 'clear') {
|
|
536
|
+
this.animateButton(button);
|
|
537
|
+
this.showClearConfirmation();
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
532
540
|
|
|
533
541
|
// Эмитим событие для других инструментов
|
|
534
542
|
this.eventBus.emit(Events.UI.ToolbarAction, {
|
|
@@ -743,9 +751,9 @@ export class Toolbar {
|
|
|
743
751
|
|
|
744
752
|
// Первый ряд: карандаш, маркер, ластик (иконки SVG)
|
|
745
753
|
const tools = [
|
|
746
|
-
{ id: 'pencil-tool', tool: 'pencil', title: 'Карандаш', svg: '<svg width="20" height="20" viewBox="0 0
|
|
747
|
-
{ id: 'marker-tool', tool: 'marker', title: 'Маркер', svg: '<svg
|
|
748
|
-
{ id: 'eraser-tool', tool: 'eraser', title: 'Ластик', svg: '<svg
|
|
754
|
+
{ id: 'pencil-tool', tool: 'pencil', title: 'Карандаш', svg: '<svg width="20" height="20" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path fill="currentColor" fill-rule="evenodd" d="M14.492 3.414 8.921 8.985a4.312 4.312 0 0 0 6.105 6.09l5.564-5.562 1.414 1.414-5.664 5.664a6.002 6.002 0 0 1-2.182 1.392L3.344 21.94 2.06 20.656 6.02 9.845c.3-.82.774-1.563 1.391-2.18l.093-.092.01-.01L13.077 2l1.415 1.414ZM4.68 19.32l4.486-1.64a6.305 6.305 0 0 1-1.651-1.19 6.306 6.306 0 0 1-1.192-1.655L4.68 19.32Z" clip-rule="evenodd"/></svg>' },
|
|
755
|
+
{ id: 'marker-tool', tool: 'marker', title: 'Маркер', svg: '<svg aria-hidden="true" viewBox="0 0 24 24" fill="none" width="20" height="20" class="c-bxOhME c-bxOhME-dvzWZT-size-medium"><path fill="currentColor" fill-rule="evenodd" d="M12.737 2.676 8.531 7.264a1 1 0 0 0 .03 1.382l7.674 7.675a1 1 0 0 0 1.442-.029l4.589-4.97 1.468 1.357-4.588 4.97a3 3 0 0 1-3.46.689l-1.917 2.303-1.454.087-.63-.593-.828 1.38L10 22v-1l-.001-.001L10 22H1v-3l.18-.573 3.452-4.93-.817-.77.045-1.496 2.621-2.184a2.999 2.999 0 0 1 .577-3.134l4.205-4.589 1.474 1.352ZM3 19.315v.684h6.434l.76-1.268-4.09-3.85L3 19.314Zm3.007-7.27 6.904 6.498 1.217-1.46-6.667-6.25-1.454 1.212Z" clip-rule="evenodd"></path></svg>' },
|
|
756
|
+
{ id: 'eraser-tool', tool: 'eraser', title: 'Ластик', svg: '<svg aria-hidden="true" viewBox="0 0 24 24" fill="none" width="20" height="20" class="c-bxOhME c-bxOhME-dvzWZT-size-medium"><path fill="currentColor" fill-rule="evenodd" d="M12.63 3.957 4.319 12.27a3 3 0 0 0 0 4.242L7.905 20.1 8.612 20.394H21v-2h-5.6l6.629-6.63a3 3 0 0 0 0-4.242L17.858 3.42a3 3 0 0 0-4.242 0ZM5.12 14.293a1 1 0 0 0 0 1.414L8.414 19h3.172l3-3L9 10.414l-3.879 3.88Zm10.336-8.922a1 1 0 0 0-1.414 0l-3.629 3.63L16 14.585l3.63-3.629a1 1 0 0 0 0-1.414L15.457 5.37Z" clip-rule="evenodd"></path></svg>' }
|
|
749
757
|
];
|
|
750
758
|
const row1 = document.createElement('div');
|
|
751
759
|
row1.className = 'moodboard-draw__row';
|
|
@@ -781,7 +789,7 @@ export class Toolbar {
|
|
|
781
789
|
if (this.currentDrawTool === 'pencil') {
|
|
782
790
|
const sizes = [
|
|
783
791
|
{ id: 'size-thin-black', title: 'Тонкий черный', color: '#111827', dot: 4, width: 2 },
|
|
784
|
-
{ id: 'size-medium-red', title: 'Средний красный', color: '#ef4444', dot:
|
|
792
|
+
{ id: 'size-medium-red', title: 'Средний красный', color: '#ef4444', dot: 8, width: 4 },
|
|
785
793
|
{ id: 'size-thick-green', title: 'Толстый зеленый', color: '#16a34a', dot: 10, width: 6 }
|
|
786
794
|
];
|
|
787
795
|
sizes.forEach(s => {
|
|
@@ -899,70 +907,194 @@ export class Toolbar {
|
|
|
899
907
|
this.emojiPopupEl.className = 'moodboard-toolbar__popup moodboard-toolbar__popup--emoji';
|
|
900
908
|
this.emojiPopupEl.style.display = 'none';
|
|
901
909
|
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
910
|
+
// Определяем способ загрузки эмоджи
|
|
911
|
+
let groups = new Map();
|
|
912
|
+
|
|
913
|
+
if (typeof import.meta !== 'undefined' && import.meta.glob) {
|
|
914
|
+
// Режим с bundler (Vite) - используем import.meta.glob
|
|
915
|
+
const modules = import.meta.glob('../assets/emodji/**/*.{png,PNG,svg,SVG}', { eager: true, as: 'url' });
|
|
916
|
+
|
|
917
|
+
// Группируем по подпапкам внутри emodji (категории)
|
|
918
|
+
const entries = Object.entries(modules).sort(([a], [b]) => a.localeCompare(b));
|
|
919
|
+
entries.forEach(([path, url]) => {
|
|
920
|
+
const marker = '/emodji/';
|
|
921
|
+
const idx = path.indexOf(marker);
|
|
922
|
+
let category = 'Разное';
|
|
923
|
+
if (idx >= 0) {
|
|
924
|
+
const after = path.slice(idx + marker.length);
|
|
925
|
+
const parts = after.split('/');
|
|
926
|
+
category = parts.length > 1 ? parts[0] : 'Разное';
|
|
927
|
+
}
|
|
928
|
+
if (!groups.has(category)) groups.set(category, []);
|
|
929
|
+
groups.get(category).push({ path, url });
|
|
930
|
+
});
|
|
931
|
+
} else {
|
|
932
|
+
// Режим без bundler - используем статичный список
|
|
933
|
+
console.log('🎭 Toolbar: Режим без bundler, используем статичные эмоджи');
|
|
934
|
+
groups = this.getFallbackEmojiGroups();
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
// Задаем желаемый порядок категорий
|
|
938
|
+
const ORDER = ['Смайлики', 'Жесты', 'Женские эмоции', 'Котики', 'Разное'];
|
|
939
|
+
const present = [...groups.keys()];
|
|
940
|
+
const orderedFirst = ORDER.filter(name => groups.has(name));
|
|
941
|
+
const theRest = present.filter(name => !ORDER.includes(name)).sort((a, b) => a.localeCompare(b));
|
|
942
|
+
const orderedCategories = [...orderedFirst, ...theRest];
|
|
909
943
|
|
|
910
|
-
|
|
944
|
+
// Рендерим секции по категориям в нужном порядке
|
|
945
|
+
orderedCategories.forEach((cat) => {
|
|
911
946
|
const section = document.createElement('div');
|
|
912
947
|
section.className = 'moodboard-emoji__section';
|
|
948
|
+
|
|
913
949
|
const title = document.createElement('div');
|
|
914
950
|
title.className = 'moodboard-emoji__title';
|
|
915
|
-
title.textContent = cat
|
|
951
|
+
title.textContent = cat;
|
|
952
|
+
section.appendChild(title);
|
|
953
|
+
|
|
916
954
|
const grid = document.createElement('div');
|
|
917
955
|
grid.className = 'moodboard-emoji__grid';
|
|
918
|
-
|
|
956
|
+
|
|
957
|
+
groups.get(cat).forEach(({ url }) => {
|
|
919
958
|
const btn = document.createElement('button');
|
|
920
959
|
btn.className = 'moodboard-emoji__btn';
|
|
921
|
-
btn.title =
|
|
922
|
-
|
|
960
|
+
btn.title = 'Добавить изображение';
|
|
961
|
+
const img = document.createElement('img');
|
|
962
|
+
img.className = 'moodboard-emoji__img';
|
|
963
|
+
img.src = url;
|
|
964
|
+
img.alt = '';
|
|
965
|
+
btn.appendChild(img);
|
|
966
|
+
|
|
967
|
+
// Перетаскивание: начинаем только если был реальный drag (движение > 4px)
|
|
968
|
+
btn.addEventListener('mousedown', (e) => {
|
|
969
|
+
const startX = e.clientX;
|
|
970
|
+
const startY = e.clientY;
|
|
971
|
+
let startedDrag = false;
|
|
972
|
+
const onMove = (ev) => {
|
|
973
|
+
if (startedDrag) return;
|
|
974
|
+
const dx = Math.abs(ev.clientX - startX);
|
|
975
|
+
const dy = Math.abs(ev.clientY - startY);
|
|
976
|
+
if (dx > 4 || dy > 4) {
|
|
977
|
+
startedDrag = true;
|
|
978
|
+
btn.__dragActive = true;
|
|
979
|
+
const target = 64;
|
|
980
|
+
const targetW = target;
|
|
981
|
+
const targetH = target;
|
|
982
|
+
// Активируем инструмент размещения и включаем режим placeOnMouseUp
|
|
983
|
+
this.eventBus.emit(Events.Keyboard.ToolSelect, { tool: 'place' });
|
|
984
|
+
this.eventBus.emit(Events.Place.Set, {
|
|
985
|
+
type: 'image',
|
|
986
|
+
properties: { src: url, width: targetW, height: targetH, isEmojiIcon: true },
|
|
987
|
+
size: { width: targetW, height: targetH },
|
|
988
|
+
placeOnMouseUp: true
|
|
989
|
+
});
|
|
990
|
+
// Закрываем поповер, чтобы не мешал курсору над холстом
|
|
991
|
+
this.closeEmojiPopup();
|
|
992
|
+
cleanup();
|
|
993
|
+
}
|
|
994
|
+
};
|
|
995
|
+
const onUp = () => {
|
|
996
|
+
cleanup();
|
|
997
|
+
// Снимем флаг сразу после клика, чтобы click мог отфильтроваться
|
|
998
|
+
setTimeout(() => { btn.__dragActive = false; }, 0);
|
|
999
|
+
};
|
|
1000
|
+
const cleanup = () => {
|
|
1001
|
+
document.removeEventListener('mousemove', onMove);
|
|
1002
|
+
document.removeEventListener('mouseup', onUp);
|
|
1003
|
+
};
|
|
1004
|
+
document.addEventListener('mousemove', onMove);
|
|
1005
|
+
document.addEventListener('mouseup', onUp, { once: true });
|
|
1006
|
+
});
|
|
1007
|
+
|
|
923
1008
|
btn.addEventListener('click', () => {
|
|
1009
|
+
if (btn.__dragActive) return; // не обрабатываем клик после drag
|
|
924
1010
|
this.animateButton(btn);
|
|
925
|
-
//
|
|
926
|
-
const
|
|
1011
|
+
const target = 64; // кратно 128 для лучшей четкости при даунскейле
|
|
1012
|
+
const targetW = target;
|
|
1013
|
+
const targetH = target;
|
|
927
1014
|
this.eventBus.emit(Events.Place.Set, {
|
|
928
|
-
type: '
|
|
929
|
-
properties: {
|
|
930
|
-
size: { width:
|
|
931
|
-
// anchorCentered не используем, позиция ставится как топ-левт со смещением на половину размера
|
|
1015
|
+
type: 'image',
|
|
1016
|
+
properties: { src: url, width: targetW, height: targetH, isEmojiIcon: true },
|
|
1017
|
+
size: { width: targetW, height: targetH }
|
|
932
1018
|
});
|
|
933
1019
|
this.closeEmojiPopup();
|
|
934
1020
|
});
|
|
1021
|
+
|
|
935
1022
|
grid.appendChild(btn);
|
|
936
1023
|
});
|
|
937
|
-
|
|
1024
|
+
|
|
938
1025
|
section.appendChild(grid);
|
|
939
1026
|
this.emojiPopupEl.appendChild(section);
|
|
940
1027
|
});
|
|
1028
|
+
this.container.appendChild(this.emojiPopupEl);
|
|
1029
|
+
}
|
|
941
1030
|
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
1031
|
+
/**
|
|
1032
|
+
* Возвращает fallback группы эмоджи для работы без bundler
|
|
1033
|
+
*/
|
|
1034
|
+
getFallbackEmojiGroups() {
|
|
1035
|
+
const groups = new Map();
|
|
1036
|
+
|
|
1037
|
+
// Определяем базовый путь для эмоджи
|
|
1038
|
+
const basePath = this.getEmojiBasePath();
|
|
1039
|
+
|
|
1040
|
+
// Статичный список эмоджи с реальными именами файлов
|
|
1041
|
+
const fallbackEmojis = {
|
|
1042
|
+
'Смайлики': [
|
|
1043
|
+
'1f600.png', '1f601.png', '1f602.png', '1f603.png', '1f604.png',
|
|
1044
|
+
'1f605.png', '1f606.png', '1f607.png', '1f609.png', '1f60a.png',
|
|
1045
|
+
'1f60b.png', '1f60c.png', '1f60d.png', '1f60e.png', '1f60f.png',
|
|
1046
|
+
'1f610.png', '1f611.png', '1f612.png', '1f613.png', '1f614.png',
|
|
1047
|
+
'1f615.png', '1f616.png', '1f617.png', '1f618.png', '1f619.png'
|
|
1048
|
+
],
|
|
1049
|
+
'Жесты': [
|
|
1050
|
+
'1f446.png', '1f447.png', '1f448.png', '1f449.png', '1f44a.png',
|
|
1051
|
+
'1f44b.png', '1f44c.png', '1f450.png', '1f4aa.png', '1f590.png',
|
|
1052
|
+
'1f596.png', '1f64c.png', '1f64f.png', '270c.png', '270d.png'
|
|
1053
|
+
],
|
|
1054
|
+
'Женские эмоции': [
|
|
1055
|
+
'1f645.png', '1f646.png', '1f64b.png', '1f64d.png', '1f64e.png'
|
|
1056
|
+
],
|
|
1057
|
+
'Котики': [
|
|
1058
|
+
'1f638.png', '1f639.png', '1f63a.png', '1f63b.png', '1f63c.png',
|
|
1059
|
+
'1f63d.png', '1f63e.png', '1f63f.png', '1f640.png'
|
|
1060
|
+
],
|
|
1061
|
+
'Разное': [
|
|
1062
|
+
'1f440.png', '1f441.png', '1f499.png', '1f4a1.png', '1f4a3.png',
|
|
1063
|
+
'1f4a9.png', '1f4ac.png', '1f4af.png', '2764.png', '203c.png', '26d4.png'
|
|
1064
|
+
]
|
|
1065
|
+
};
|
|
953
1066
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
btn.addEventListener('click', () => this.animateButton(btn));
|
|
961
|
-
stickersGrid.appendChild(btn);
|
|
1067
|
+
Object.entries(fallbackEmojis).forEach(([category, emojis]) => {
|
|
1068
|
+
const emojiList = emojis.map(file => ({
|
|
1069
|
+
path: `${basePath}${category}/${file}`,
|
|
1070
|
+
url: `${basePath}${category}/${file}`
|
|
1071
|
+
}));
|
|
1072
|
+
groups.set(category, emojiList);
|
|
962
1073
|
});
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
1074
|
+
|
|
1075
|
+
return groups;
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
/**
|
|
1079
|
+
* Определяет базовый путь для эмоджи в зависимости от режима
|
|
1080
|
+
*/
|
|
1081
|
+
getEmojiBasePath() {
|
|
1082
|
+
// Проверяем, есть ли глобальная настройка базового пути
|
|
1083
|
+
if (window.MOODBOARD_BASE_PATH) {
|
|
1084
|
+
return `${window.MOODBOARD_BASE_PATH}src/assets/emodji/`;
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
// Попытка определить автоматически
|
|
1088
|
+
const scripts = document.querySelectorAll('script[src]');
|
|
1089
|
+
for (const script of scripts) {
|
|
1090
|
+
if (script.src.includes('moodboard') || script.src.includes('node_modules')) {
|
|
1091
|
+
const baseUrl = new URL(script.src).origin;
|
|
1092
|
+
return `${baseUrl}/node_modules/moodboard-futurello/src/assets/emodji/`;
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
// Fallback: относительный путь
|
|
1097
|
+
return './src/assets/emodji/';
|
|
966
1098
|
}
|
|
967
1099
|
|
|
968
1100
|
toggleEmojiPopup(anchorButton) {
|
|
@@ -999,6 +1131,38 @@ export class Toolbar {
|
|
|
999
1131
|
this.emojiPopupEl.style.display = 'none';
|
|
1000
1132
|
}
|
|
1001
1133
|
}
|
|
1134
|
+
|
|
1135
|
+
/**
|
|
1136
|
+
* Показывает диалог подтверждения очистки холста
|
|
1137
|
+
*/
|
|
1138
|
+
showClearConfirmation() {
|
|
1139
|
+
// Проверяем, есть ли объекты на холсте для очистки
|
|
1140
|
+
let hasObjects = false;
|
|
1141
|
+
const checkData = { objects: [] };
|
|
1142
|
+
this.eventBus.emit(Events.Tool.GetAllObjects, checkData);
|
|
1143
|
+
hasObjects = checkData.objects && checkData.objects.length > 0;
|
|
1144
|
+
|
|
1145
|
+
if (!hasObjects) {
|
|
1146
|
+
// Если холст уже пуст, показываем уведомление
|
|
1147
|
+
alert('Холст уже пуст');
|
|
1148
|
+
return;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
// Показываем диалог подтверждения
|
|
1152
|
+
const confirmed = confirm(
|
|
1153
|
+
'Вы уверены, что хотите очистить холст?\n\n' +
|
|
1154
|
+
'Это действие удалит все объекты с холста и не может быть отменено.'
|
|
1155
|
+
);
|
|
1156
|
+
|
|
1157
|
+
if (confirmed) {
|
|
1158
|
+
// Пользователь подтвердил - выполняем очистку
|
|
1159
|
+
this.eventBus.emit(Events.UI.ToolbarAction, {
|
|
1160
|
+
type: 'clear',
|
|
1161
|
+
id: 'clear'
|
|
1162
|
+
});
|
|
1163
|
+
}
|
|
1164
|
+
// Если не подтвердил - ничего не делаем
|
|
1165
|
+
}
|
|
1002
1166
|
|
|
1003
1167
|
/**
|
|
1004
1168
|
* Изменение темы
|
package/src/ui/Topbar.js
CHANGED
|
@@ -14,6 +14,15 @@ export class Topbar {
|
|
|
14
14
|
// Загружаем иконки
|
|
15
15
|
this.iconLoader = new TopbarIconLoader();
|
|
16
16
|
this.icons = this.iconLoader.icons;
|
|
17
|
+
// Палитра кнопки заливки и соответствие цвету фона доски
|
|
18
|
+
this._palette = [
|
|
19
|
+
{ id: 1, name: 'default-light', btnHex: '#B3E5FC', board: '#f7fbff' },
|
|
20
|
+
{ id: 2, name: 'mint-light', btnHex: '#E8F5E9', board: '#f8fff7' },
|
|
21
|
+
{ id: 3, name: 'peach-light', btnHex: '#FFF3E0', board: '#fffcf7' },
|
|
22
|
+
{ id: 4, name: 'gray-light', btnHex: '#f5f5f5', board: '#f5f5f5' },
|
|
23
|
+
{ id: 5, name: 'white', btnHex: '#ffffff', board: '#ffffff' }
|
|
24
|
+
];
|
|
25
|
+
this._pendingPaintHex = null;
|
|
17
26
|
this.init();
|
|
18
27
|
}
|
|
19
28
|
|
|
@@ -34,6 +43,21 @@ export class Topbar {
|
|
|
34
43
|
this.eventBus.on(Events.UI.GridCurrent, ({ type }) => {
|
|
35
44
|
this.setActive(type);
|
|
36
45
|
});
|
|
46
|
+
|
|
47
|
+
// Обновляем цвет кнопки "краски" при выборе цвета фона
|
|
48
|
+
this.eventBus.on(Events.UI.PaintPick, ({ btnHex }) => {
|
|
49
|
+
if (!btnHex) return;
|
|
50
|
+
this.setPaintButtonHex(btnHex);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Инициализация цвета кнопки "краска" из текущего фона доски, если доступен
|
|
54
|
+
try {
|
|
55
|
+
const bgHex = this._getCurrentBoardBackgroundHex();
|
|
56
|
+
if (bgHex) {
|
|
57
|
+
const mapped = this.mapBoardToBtnHex(bgHex);
|
|
58
|
+
this.setPaintButtonHex(mapped);
|
|
59
|
+
}
|
|
60
|
+
} catch (_) {}
|
|
37
61
|
}
|
|
38
62
|
|
|
39
63
|
createTopbar() {
|
|
@@ -104,6 +128,12 @@ export class Topbar {
|
|
|
104
128
|
|
|
105
129
|
paintBtn.dataset.action = 'paint-toggle';
|
|
106
130
|
this.element.appendChild(paintBtn);
|
|
131
|
+
this._paintBtn = paintBtn;
|
|
132
|
+
// Применяем отложенный цвет, если был задан до создания кнопки
|
|
133
|
+
if (this._pendingPaintHex) {
|
|
134
|
+
try { this._paintBtn.style.setProperty('--paint-btn-color', this._pendingPaintHex); } catch (_) {}
|
|
135
|
+
this._pendingPaintHex = null;
|
|
136
|
+
}
|
|
107
137
|
|
|
108
138
|
// (кнопки зума вынесены в отдельную панель справа)
|
|
109
139
|
|
|
@@ -160,6 +190,34 @@ export class Topbar {
|
|
|
160
190
|
// Зум обрабатывается в отдельной панели
|
|
161
191
|
}
|
|
162
192
|
|
|
193
|
+
/** Возвращает текущий цвет фона канваса как hex-строку #RRGGBB */
|
|
194
|
+
_getCurrentBoardBackgroundHex() {
|
|
195
|
+
try {
|
|
196
|
+
const app = window?.moodboard?.core?.pixi?.app;
|
|
197
|
+
const colorInt = app?.renderer?.background?.color ?? app?.renderer?.backgroundColor;
|
|
198
|
+
if (typeof colorInt !== 'number') return null;
|
|
199
|
+
const hex = `#${colorInt.toString(16).padStart(6, '0')}`;
|
|
200
|
+
return hex.toLowerCase();
|
|
201
|
+
} catch (_) { return null; }
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Маппинг цвета фона к цвету кнопки палитры */
|
|
205
|
+
mapBoardToBtnHex(boardHex) {
|
|
206
|
+
if (!boardHex) return null;
|
|
207
|
+
const found = this._palette.find(p => p.board.toLowerCase() === boardHex.toLowerCase());
|
|
208
|
+
return found ? found.btnHex : boardHex;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** Установить цвет кнопки палитры */
|
|
212
|
+
setPaintButtonHex(btnHex) {
|
|
213
|
+
if (!btnHex) return;
|
|
214
|
+
if (this._paintBtn) {
|
|
215
|
+
try { this._paintBtn.style.setProperty('--paint-btn-color', btnHex); } catch (_) {}
|
|
216
|
+
} else {
|
|
217
|
+
this._pendingPaintHex = btnHex;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
163
221
|
setActive(type) {
|
|
164
222
|
const buttons = this.element.querySelectorAll('.moodboard-topbar__button');
|
|
165
223
|
buttons.forEach((b) => b.classList.remove('moodboard-topbar__button--active'));
|
|
@@ -186,37 +244,81 @@ export class Topbar {
|
|
|
186
244
|
// 3: фон #fffcf7, кнопка #FFF3E0
|
|
187
245
|
// 4: фон #f5f5f5, кнопка #f5f5f5
|
|
188
246
|
// 5: фон #ffffff, кнопка #ffffff
|
|
189
|
-
const colors =
|
|
190
|
-
{ id: 1, name: 'default-light', hex: '#B3E5FC', board: '#f7fbff' },
|
|
191
|
-
{ id: 2, name: 'mint-light', hex: '#E8F5E9', board: '#f8fff7' },
|
|
192
|
-
{ id: 3, name: 'peach-light', hex: '#FFF3E0', board: '#fffcf7' },
|
|
193
|
-
{ id: 4, name: 'gray-light', hex: '#f5f5f5', board: '#f5f5f5' },
|
|
194
|
-
{ id: 5, name: 'white', hex: '#ffffff', board: '#ffffff' }
|
|
195
|
-
];
|
|
247
|
+
const colors = this._palette.map(c => ({ id: c.id, name: c.name, hex: c.btnHex, board: c.board }));
|
|
196
248
|
const grid = document.createElement('div');
|
|
197
249
|
grid.className = 'moodboard-topbar__paint-grid';
|
|
250
|
+
const darken = (hex, amount = 0.25) => {
|
|
251
|
+
try {
|
|
252
|
+
const h = hex.replace('#','');
|
|
253
|
+
const r = parseInt(h.substring(0,2), 16);
|
|
254
|
+
const g = parseInt(h.substring(2,4), 16);
|
|
255
|
+
const b = parseInt(h.substring(4,6), 16);
|
|
256
|
+
const dr = Math.max(0, Math.min(255, Math.round(r * (1 - amount))));
|
|
257
|
+
const dg = Math.max(0, Math.min(255, Math.round(g * (1 - amount))));
|
|
258
|
+
const db = Math.max(0, Math.min(255, Math.round(b * (1 - amount))));
|
|
259
|
+
return `#${dr.toString(16).padStart(2,'0')}${dg.toString(16).padStart(2,'0')}${db.toString(16).padStart(2,'0')}`;
|
|
260
|
+
} catch (_) { return hex; }
|
|
261
|
+
};
|
|
262
|
+
|
|
198
263
|
colors.forEach(c => {
|
|
199
264
|
const b = document.createElement('button');
|
|
200
265
|
b.type = 'button';
|
|
201
266
|
b.className = 'moodboard-topbar__paint-btn';
|
|
202
267
|
b.title = `Цвет ${c.id}`;
|
|
203
268
|
b.style.background = c.hex;
|
|
269
|
+
// Тёмная обводка того же цвета
|
|
270
|
+
b.style.borderColor = darken(c.hex, 0.35);
|
|
271
|
+
// Цвет галочки — чёрный для максимальной видимости
|
|
272
|
+
b.style.color = '#111';
|
|
273
|
+
// Для надёжного сравнения — сохраняем исходный hex в dataset
|
|
274
|
+
b.dataset.hex = String(c.hex).toLowerCase();
|
|
275
|
+
// Галочка по центру
|
|
276
|
+
const tick = document.createElement('i');
|
|
277
|
+
tick.className = 'moodboard-topbar__paint-tick';
|
|
278
|
+
b.appendChild(tick);
|
|
204
279
|
b.dataset.colorId = String(c.id);
|
|
205
280
|
b.addEventListener('click', () => {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
281
|
+
// Обновляем галочку на выбранном цвете
|
|
282
|
+
try {
|
|
283
|
+
const prev = grid.querySelector('.moodboard-topbar__paint-btn.is-active');
|
|
284
|
+
if (prev) prev.classList.remove('is-active');
|
|
285
|
+
b.classList.add('is-active');
|
|
286
|
+
} catch (_) {}
|
|
287
|
+
// Мгновенно обновляем цвет кнопки "краска"
|
|
288
|
+
this.setPaintButtonHex(c.hex);
|
|
289
|
+
// Передаём выбор в ядро для смены фона
|
|
290
|
+
this.eventBus.emit(Events.UI.PaintPick, { id: c.id, color: c.board, name: c.name, btnHex: c.hex });
|
|
291
|
+
// Поповер не закрываем, чтобы пользователь видел галочку и мог передумать
|
|
209
292
|
});
|
|
210
293
|
grid.appendChild(b);
|
|
211
294
|
});
|
|
212
295
|
pop.appendChild(grid);
|
|
213
296
|
|
|
297
|
+
// Выделяем активный цвет галочкой
|
|
298
|
+
try {
|
|
299
|
+
const boardHex = this._getCurrentBoardBackgroundHex();
|
|
300
|
+
const targetHex = (this.mapBoardToBtnHex(boardHex) || '#B3E5FC').toLowerCase();
|
|
301
|
+
const match = grid.querySelector(`[data-hex="${targetHex}"]`);
|
|
302
|
+
if (match) match.classList.add('is-active');
|
|
303
|
+
} catch (_) {}
|
|
304
|
+
|
|
214
305
|
// позиционируем поповер
|
|
215
306
|
const rect = anchorBtn.getBoundingClientRect();
|
|
216
307
|
pop.style.position = 'absolute';
|
|
217
308
|
pop.style.left = `${rect.left - this.element.getBoundingClientRect().left}px`;
|
|
218
309
|
pop.style.top = `${rect.bottom - this.element.getBoundingClientRect().top + 6}px`;
|
|
219
310
|
|
|
311
|
+
// Подсветить текущий активный кружок (с галочкой)
|
|
312
|
+
try {
|
|
313
|
+
const currentBtnHex = (this._paintBtn && getComputedStyle(this._paintBtn).getPropertyValue('--paint-btn-color')) || '';
|
|
314
|
+
const normalized = currentBtnHex.trim() || '#B3E5FC';
|
|
315
|
+
const match = Array.from(grid.children).find((el) => {
|
|
316
|
+
const bg = el && el.style && el.style.background ? el.style.background.toLowerCase() : '';
|
|
317
|
+
return bg === normalized.toLowerCase();
|
|
318
|
+
});
|
|
319
|
+
if (match) match.classList.add('is-active');
|
|
320
|
+
} catch (_) {}
|
|
321
|
+
|
|
220
322
|
this.element.appendChild(pop);
|
|
221
323
|
this._paintPopover = pop;
|
|
222
324
|
|
package/src/ui/ZoomPanel.js
CHANGED
|
@@ -18,7 +18,10 @@ export class ZoomPanel {
|
|
|
18
18
|
const zoomOutBtn = document.createElement('button');
|
|
19
19
|
zoomOutBtn.className = 'moodboard-zoombar__button';
|
|
20
20
|
zoomOutBtn.title = 'Уменьшить масштаб';
|
|
21
|
-
|
|
21
|
+
const zoomOutIcon = document.createElement('span');
|
|
22
|
+
zoomOutIcon.className = 'moodboard-zoombar__icon';
|
|
23
|
+
zoomOutIcon.textContent = '−';
|
|
24
|
+
zoomOutBtn.appendChild(zoomOutIcon);
|
|
22
25
|
zoomOutBtn.dataset.action = 'zoom-out';
|
|
23
26
|
|
|
24
27
|
const label = document.createElement('span');
|
|
@@ -37,7 +40,10 @@ export class ZoomPanel {
|
|
|
37
40
|
const zoomInBtn = document.createElement('button');
|
|
38
41
|
zoomInBtn.className = 'moodboard-zoombar__button';
|
|
39
42
|
zoomInBtn.title = 'Увеличить масштаб';
|
|
40
|
-
|
|
43
|
+
const zoomInIcon = document.createElement('span');
|
|
44
|
+
zoomInIcon.className = 'moodboard-zoombar__icon';
|
|
45
|
+
zoomInIcon.textContent = '+';
|
|
46
|
+
zoomInBtn.appendChild(zoomInIcon);
|
|
41
47
|
zoomInBtn.dataset.action = 'zoom-in';
|
|
42
48
|
|
|
43
49
|
this.element.appendChild(zoomOutBtn);
|