@netless/fastboard-react 0.2.5 → 0.2.6

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/dist/index.js CHANGED
@@ -432,12 +432,7 @@ function RedoUndo({ theme, undoIcon, undoIconDisable, redoIcon, redoIconDisable
432
432
  // src/components/ZoomControl/hooks.ts
433
433
  var import_react10 = require("react");
434
434
  var ScalePoints = [
435
- 0.10737418240000011,
436
- 0.13421772800000012,
437
- 0.16777216000000014,
438
- 0.20971520000000016,
439
- 0.26214400000000015,
440
- 0.3276800000000002,
435
+ 0.3,
441
436
  0.4096000000000002,
442
437
  0.5120000000000001,
443
438
  0.6400000000000001,
@@ -447,12 +442,7 @@ var ScalePoints = [
447
442
  1.5876000000000001,
448
443
  2.000376,
449
444
  2.5204737600000002,
450
- 3.1757969376000004,
451
- 4.001504141376,
452
- 5.041895218133761,
453
- 6.352787974848539,
454
- 8.00451284830916,
455
- 10
445
+ 3
456
446
  ];
457
447
  function nextScale(scale, delta) {
458
448
  const { length } = ScalePoints;
@@ -795,97 +785,48 @@ function PageControl({
795
785
  }
796
786
 
797
787
  // src/components/Toolbar/hooks.ts
798
- var import_react22 = require("react");
799
- function useRoomState() {
800
- return useFastboardValue(useFastboardApp().memberState);
801
- }
802
- function useToolbar() {
803
- const app = useFastboardApp();
804
- const writable = useWritable();
805
- const memberState = useRoomState();
806
- const cleanCurrentScene = (0, import_react22.useCallback)(() => {
807
- app.cleanCurrentScene();
808
- }, [app]);
809
- const setAppliance = (0, import_react22.useCallback)((appliance, shape) => {
810
- app.setAppliance(appliance, shape);
811
- }, [app]);
812
- const setStrokeWidth = (0, import_react22.useCallback)((strokeWidth) => {
813
- app.setStrokeWidth(strokeWidth);
814
- }, [app]);
815
- const setStrokeColor = (0, import_react22.useCallback)((strokeColor) => {
816
- app.setStrokeColor(strokeColor);
817
- }, [app]);
818
- return {
819
- writable,
820
- memberState,
821
- cleanCurrentScene,
822
- setAppliance,
823
- setStrokeWidth,
824
- setStrokeColor
825
- };
826
- }
827
- var EmptyToolbarHook = {
828
- writable: false,
829
- memberState: void 0,
830
- cleanCurrentScene: noop,
831
- setAppliance: noop,
832
- setStrokeWidth: noop,
833
- setStrokeColor: noop
834
- };
835
-
836
- // src/components/Toolbar/Toolbar.tsx
837
- var import_clsx9 = __toESM(require("clsx"));
838
- var import_framer_motion = require("framer-motion");
839
- var import_react59 = __toESM(require("react"));
840
-
841
- // src/components/Toolbar/components/assets/expanded.png
842
- var expanded_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAB8CAYAAAAMw2JFAAAAAXNSR0IArs4c6QAAA5xJREFUeF7tnL9v00AUx5/TlRkJMSAxZ+jYCf4GtopK6dB2qBBsjshaJErboWVJpYaNLGDaIR2YYAFXqlxhlvzAJkhGJGlyDhVNSpWgyOiqBJnQ+urznW2Jy1JVVnKffv3x8yV9LxLE5CEBwFUA6ALAzyiZJFVVX21ubj7N5/MmACAAGEQBJDWbzQZCqGcYRm52dlbpdDpNAPgRNozkOE691+tBo9FItNtto1AorC0tLX0EAAzUDwvoDGS02NHREU4IarXatizLOV3XvwHAdwBweAP9BYIXGwwGcHh4mLBtG2matrGwsPB2mA5Xmf8BGf3lJycn+HRNtFqtd2HIfCEIBnIcBxBCEkKobxjGFk+ZPUFG6YQh86VAPGSuAUCbhcy+QMZktjVNW2cls28QD5k/A0CLtjJTg4zLbJpmLpVKvaStzIFAWMrMBISFzExBgsjMHIRWZm4gfmXmCnKezIqiLK+srOjDG+mfu3ooIG6Z6/X6r/39/Udzc3OvAQBX5jOYUEHwgqenp2BZlrS7u/sgnU6/Ge53wgfBMN1uV6pWq/b09PTdSqVSwtU49ERGp8myrISqqsszMzPPcSqRgRwfH0vlcvnD1NTUIgB8jQyk3+9DuVy2Jycn7wBANTIQvPsrlUqJZDJ5GwA+RQaCXSkWixPJZPKWABldOSKR8XeLIhGRCOkTBOGIcEQ4QkpAOEJKSNQR4YhwhJSAcISUkKgjTBy5fuPmNfxCNetLA/98srp25WFaxv+UpH5QnZpxEPz7/XuLnSAwzEBwFEFgmIIEgWEOQgvDBYQGhhuIXxiuIH5g/g8QP5czt0T8QFB/mHdeZXXXdr8QXEBoIJiD0EIwBQkCwQwksm0A9abD44lUl68A4ZEAkz0rDzDhiDg1JK+EI8IR4QgpAeEIKSFRR4QjwhFSAsIRUkKijsTSkdi0f8WmIS42LYKxaJqMRRtpLBpr8URTpK3GrrEYU1GUx6E3X7sHhUzTfJZKpV5cNFvBrY10NDqFEFKz2ex6Pp/3nDZhDuIaJrMPDg425ufncac3HrXzHCZjCuIar9vJZDI5TdPweN2lJpKYgLhlLBQKqzQDh4FA/MhI2ptQg/iVkTkIrYxMQdwyyrK8pet6uONxLGQMlAhLGalBXDK+z2azG6TKSFqIdNxrzNZXZSQtRDp+0eDxDmsZLwUSxvQqEWQ4nN4n3aZJLxT0uLS3t7cdhowk0Ph8gQGJNKzjvwGKWUjXcvHclAAAAABJRU5ErkJggg==";
843
-
844
- // src/components/Toolbar/Content.tsx
845
- var import_clsx8 = __toESM(require("clsx"));
846
- var import_react58 = __toESM(require("react"));
788
+ var import_react42 = require("react");
847
789
 
848
- // src/components/Toolbar/components/ApplianceButtons.tsx
849
- var import_react45 = __toESM(require("react"));
790
+ // src/components/Toolbar/const.ts
850
791
  var import_white_web_sdk = require("white-web-sdk");
851
792
 
852
793
  // src/components/Toolbar/icons/index.ts
853
- var import_react42 = require("react");
794
+ var import_react41 = require("react");
854
795
 
855
796
  // src/components/Toolbar/icons/Apps.tsx
856
- var import_react23 = __toESM(require("react"));
797
+ var import_react22 = __toESM(require("react"));
857
798
  var Apps = (props) => {
858
799
  const stroke = getStroke(props);
859
- return /* @__PURE__ */ import_react23.default.createElement("svg", {
800
+ return /* @__PURE__ */ import_react22.default.createElement("svg", {
860
801
  viewBox: "0 0 24 24"
861
- }, /* @__PURE__ */ import_react23.default.createElement("g", {
802
+ }, /* @__PURE__ */ import_react22.default.createElement("g", {
862
803
  fill: stroke
863
- }, /* @__PURE__ */ import_react23.default.createElement("path", {
804
+ }, /* @__PURE__ */ import_react22.default.createElement("path", {
864
805
  d: "M17.667 4.5h-3.334c-1.012 0-1.833.82-1.833 1.833V11.5h5.167c1.012 0 1.833-.82 1.833-1.833V6.333c0-1.012-.82-1.833-1.833-1.833Zm-3.334 1h3.334c.46 0 .833.373.833.833v3.334l-.006.104a.833.833 0 0 1-.827.729H13.5V6.333c0-.46.373-.833.833-.833Z"
865
- }), /* @__PURE__ */ import_react23.default.createElement("path", {
806
+ }), /* @__PURE__ */ import_react22.default.createElement("path", {
866
807
  d: "M6.333 19.5A1.833 1.833 0 0 1 4.5 17.667v-3.334c0-.525.221-1 .576-1.334a1.822 1.822 0 0 1-.576-1.332V8.333c0-1.012.82-1.833 1.833-1.833H10A1.5 1.5 0 0 1 11.5 8v4.5h4.167c.962 0 1.75.74 1.827 1.683l.006.15v3.334c0 1.012-.82 1.833-1.833 1.833Zm4.167-6H6.333a.833.833 0 0 0-.827.729l-.006.104v3.334c0 .46.373.833.833.833H10.5v-5Zm5.167 0H11.5v5h4.167c.46 0 .833-.373.833-.833v-3.334a.833.833 0 0 0-.833-.833ZM10 7.5H6.333a.833.833 0 0 0-.833.833v3.334c0 .46.373.833.833.833H10.5V8a.5.5 0 0 0-.41-.492L10 7.5Z"
867
808
  })));
868
809
  };
869
810
 
870
811
  // src/components/Toolbar/icons/Arrow.tsx
871
- var import_react24 = __toESM(require("react"));
812
+ var import_react23 = __toESM(require("react"));
872
813
  var Arrow = (props) => {
873
814
  const stroke = getStroke(props);
874
- return /* @__PURE__ */ import_react24.default.createElement("svg", {
815
+ return /* @__PURE__ */ import_react23.default.createElement("svg", {
875
816
  viewBox: "0 0 24 24"
876
- }, /* @__PURE__ */ import_react24.default.createElement("path", {
817
+ }, /* @__PURE__ */ import_react23.default.createElement("path", {
877
818
  fill: stroke,
878
819
  d: "M19 5v6l-2.647-2.646L5.99 18.718l-.708-.708L15.645 7.646 13 5h6Z"
879
820
  }));
880
821
  };
881
822
 
882
823
  // src/components/Toolbar/icons/Circle.tsx
883
- var import_react25 = __toESM(require("react"));
824
+ var import_react24 = __toESM(require("react"));
884
825
  var Circle = (props) => {
885
826
  const stroke = getStroke(props);
886
- return /* @__PURE__ */ import_react25.default.createElement("svg", {
827
+ return /* @__PURE__ */ import_react24.default.createElement("svg", {
887
828
  viewBox: "0 0 24 24"
888
- }, /* @__PURE__ */ import_react25.default.createElement("rect", {
829
+ }, /* @__PURE__ */ import_react24.default.createElement("rect", {
889
830
  width: "15",
890
831
  height: "15",
891
832
  x: "4.5",
@@ -897,40 +838,40 @@ var Circle = (props) => {
897
838
  };
898
839
 
899
840
  // src/components/Toolbar/icons/Clean.tsx
900
- var import_react26 = __toESM(require("react"));
841
+ var import_react25 = __toESM(require("react"));
901
842
  var Clean = (props) => {
902
843
  const stroke = getStroke(props);
903
- return /* @__PURE__ */ import_react26.default.createElement("svg", {
844
+ return /* @__PURE__ */ import_react25.default.createElement("svg", {
904
845
  viewBox: "0 0 24 24"
905
- }, /* @__PURE__ */ import_react26.default.createElement("path", {
846
+ }, /* @__PURE__ */ import_react25.default.createElement("path", {
906
847
  fill: stroke,
907
848
  d: "M9.754 11.99c0 1.856-.711 3.62-1.96 4.951l-.151.155h1.403l.855-.853h.707l.853.853h2.635l.094-.064a6.237 6.237 0 0 0 2.559-4.781l.005-.26h1a7.237 7.237 0 0 1-2.994 5.862l-.229.16-.277.083h-3l-.353-.146-.647-.647-.646.647-.354.146h-3l-.286-.91.214-.148a6.237 6.237 0 0 0 2.567-4.787l.005-.26h1Zm4.772-6.502v2l.35.039a2.98 2.98 0 0 1 2.644 2.78l.006.181h-8a2.98 2.98 0 0 1 2.65-2.961l.35-.039v-2h2Z"
908
849
  }));
909
850
  };
910
851
 
911
852
  // src/components/Toolbar/icons/Clicker.tsx
912
- var import_react27 = __toESM(require("react"));
853
+ var import_react26 = __toESM(require("react"));
913
854
  var Clicker = (props) => {
914
855
  const stroke = getStroke(props);
915
- return /* @__PURE__ */ import_react27.default.createElement("svg", {
856
+ return /* @__PURE__ */ import_react26.default.createElement("svg", {
916
857
  viewBox: "0 0 24 24"
917
- }, /* @__PURE__ */ import_react27.default.createElement("g", {
858
+ }, /* @__PURE__ */ import_react26.default.createElement("g", {
918
859
  fill: "none"
919
- }, /* @__PURE__ */ import_react27.default.createElement("path", {
860
+ }, /* @__PURE__ */ import_react26.default.createElement("path", {
920
861
  d: "M0 0h24v24H0z"
921
- }), /* @__PURE__ */ import_react27.default.createElement("path", {
862
+ }), /* @__PURE__ */ import_react26.default.createElement("path", {
922
863
  fill: stroke,
923
864
  d: "m7 5.072 10.33 7.892-4.879.549 3.232 5.598-.866.5-3.233-5.597-2.914 3.95L7 5.072Z"
924
865
  })));
925
866
  };
926
867
 
927
868
  // src/components/Toolbar/icons/Collapse.tsx
928
- var import_react28 = __toESM(require("react"));
869
+ var import_react27 = __toESM(require("react"));
929
870
  var Collapse = (props) => {
930
871
  const stroke = getStroke(props);
931
- return /* @__PURE__ */ import_react28.default.createElement("svg", {
872
+ return /* @__PURE__ */ import_react27.default.createElement("svg", {
932
873
  viewBox: "0 0 24 24"
933
- }, /* @__PURE__ */ import_react28.default.createElement("path", {
874
+ }, /* @__PURE__ */ import_react27.default.createElement("path", {
934
875
  fill: "none",
935
876
  stroke,
936
877
  d: "m8 10-2 2 2 2m10-8H6m12 12H6m12-4h-8m8-4h-8"
@@ -938,12 +879,12 @@ var Collapse = (props) => {
938
879
  };
939
880
 
940
881
  // src/components/Toolbar/icons/Diamond.tsx
941
- var import_react29 = __toESM(require("react"));
882
+ var import_react28 = __toESM(require("react"));
942
883
  var Diamond = (props) => {
943
884
  const stroke = getStroke(props);
944
- return /* @__PURE__ */ import_react29.default.createElement("svg", {
885
+ return /* @__PURE__ */ import_react28.default.createElement("svg", {
945
886
  viewBox: "0 0 24 24"
946
- }, /* @__PURE__ */ import_react29.default.createElement("path", {
887
+ }, /* @__PURE__ */ import_react28.default.createElement("path", {
947
888
  fill: "none",
948
889
  stroke,
949
890
  d: "M4.222 12 12 4.222 19.778 12 12 19.778z"
@@ -951,12 +892,12 @@ var Diamond = (props) => {
951
892
  };
952
893
 
953
894
  // src/components/Toolbar/icons/Down.tsx
954
- var import_react30 = __toESM(require("react"));
895
+ var import_react29 = __toESM(require("react"));
955
896
  var Down = (props) => {
956
897
  const stroke = getStroke(props);
957
- return /* @__PURE__ */ import_react30.default.createElement("svg", {
898
+ return /* @__PURE__ */ import_react29.default.createElement("svg", {
958
899
  viewBox: "0 0 24 24"
959
- }, /* @__PURE__ */ import_react30.default.createElement("path", {
900
+ }, /* @__PURE__ */ import_react29.default.createElement("path", {
960
901
  fill: "none",
961
902
  stroke,
962
903
  d: "m16 13-2 2-2 2-2-2-2-2m8-6-2 2-2 2-2-2-2-2"
@@ -964,24 +905,24 @@ var Down = (props) => {
964
905
  };
965
906
 
966
907
  // src/components/Toolbar/icons/Eraser.tsx
967
- var import_react31 = __toESM(require("react"));
908
+ var import_react30 = __toESM(require("react"));
968
909
  var Eraser = (props) => {
969
910
  const stroke = getStroke(props);
970
- return /* @__PURE__ */ import_react31.default.createElement("svg", {
911
+ return /* @__PURE__ */ import_react30.default.createElement("svg", {
971
912
  viewBox: "0 0 24 24"
972
- }, /* @__PURE__ */ import_react31.default.createElement("path", {
913
+ }, /* @__PURE__ */ import_react30.default.createElement("path", {
973
914
  fill: stroke,
974
915
  d: "m14.333 5.183.165.007c.494.037.978.245 1.356.623l2.333 2.333a2.15 2.15 0 0 1 0 3.04l-5.833 5.834a3.8 3.8 0 0 1-5.374 0l-1.167-1.166a2.15 2.15 0 0 1 0-3.04l7-7c.42-.42.97-.63 1.52-.63ZM11.52 8.52l-4.999 5a1.15 1.15 0 0 0 0 1.626l1.167 1.167a2.8 2.8 0 0 0 3.96 0l3.832-3.833-3.96-3.96Z"
975
916
  }));
976
917
  };
977
918
 
978
919
  // src/components/Toolbar/icons/Expand.tsx
979
- var import_react32 = __toESM(require("react"));
920
+ var import_react31 = __toESM(require("react"));
980
921
  var Expand = (props) => {
981
922
  const stroke = getStroke(props);
982
- return /* @__PURE__ */ import_react32.default.createElement("svg", {
923
+ return /* @__PURE__ */ import_react31.default.createElement("svg", {
983
924
  viewBox: "0 0 24 24"
984
- }, /* @__PURE__ */ import_react32.default.createElement("path", {
925
+ }, /* @__PURE__ */ import_react31.default.createElement("path", {
985
926
  fill: "none",
986
927
  stroke,
987
928
  d: "m16 10 2 2-2 2M6 6h12M6 18h12M6 14h8m-8-4h8"
@@ -989,36 +930,36 @@ var Expand = (props) => {
989
930
  };
990
931
 
991
932
  // src/components/Toolbar/icons/Line.tsx
992
- var import_react33 = __toESM(require("react"));
933
+ var import_react32 = __toESM(require("react"));
993
934
  var Line = (props) => {
994
935
  const stroke = getStroke(props);
995
- return /* @__PURE__ */ import_react33.default.createElement("svg", {
936
+ return /* @__PURE__ */ import_react32.default.createElement("svg", {
996
937
  viewBox: "0 0 24 24"
997
- }, /* @__PURE__ */ import_react33.default.createElement("path", {
938
+ }, /* @__PURE__ */ import_react32.default.createElement("path", {
998
939
  fill: stroke,
999
940
  d: "m18.01 5.282.708.708L5.99 18.718l-.708-.708z"
1000
941
  }));
1001
942
  };
1002
943
 
1003
944
  // src/components/Toolbar/icons/Pencil.tsx
1004
- var import_react34 = __toESM(require("react"));
945
+ var import_react33 = __toESM(require("react"));
1005
946
  var Pencil = (props) => {
1006
947
  const stroke = getStroke(props);
1007
- return /* @__PURE__ */ import_react34.default.createElement("svg", {
948
+ return /* @__PURE__ */ import_react33.default.createElement("svg", {
1008
949
  viewBox: "0 0 24 24"
1009
- }, /* @__PURE__ */ import_react34.default.createElement("path", {
950
+ }, /* @__PURE__ */ import_react33.default.createElement("path", {
1010
951
  fill: stroke,
1011
952
  d: "m17.497 4.84.116.105 1.442 1.442a1.52 1.52 0 0 1 .104 2.034l-.104.116L8.733 18.858l-4.347.756.756-4.347L15.463 4.945a1.52 1.52 0 0 1 2.034-.104ZM5.967 16.349l-.353 2.037 2.037-.354-1.683-1.683Zm8.407-8.901-7.946 7.946 2.178 2.178 7.946-7.946-2.178-2.178Zm-.728 2.2.708.707-5 5-.708-.708 5-5Zm2.596-4.055-.072.06-1.09 1.088 2.179 2.178 1.089-1.088a.52.52 0 0 0 .105-.584l-.045-.08-.06-.072-1.442-1.442a.52.52 0 0 0-.664-.06Z"
1012
953
  }));
1013
954
  };
1014
955
 
1015
956
  // src/components/Toolbar/icons/Rectangle.tsx
1016
- var import_react35 = __toESM(require("react"));
957
+ var import_react34 = __toESM(require("react"));
1017
958
  var Rectangle = (props) => {
1018
959
  const stroke = getStroke(props);
1019
- return /* @__PURE__ */ import_react35.default.createElement("svg", {
960
+ return /* @__PURE__ */ import_react34.default.createElement("svg", {
1020
961
  viewBox: "0 0 24 24"
1021
- }, /* @__PURE__ */ import_react35.default.createElement("path", {
962
+ }, /* @__PURE__ */ import_react34.default.createElement("path", {
1022
963
  fill: "none",
1023
964
  stroke,
1024
965
  d: "M5.5 5.5h13v13h-13z"
@@ -1026,24 +967,24 @@ var Rectangle = (props) => {
1026
967
  };
1027
968
 
1028
969
  // src/components/Toolbar/icons/Selector.tsx
1029
- var import_react36 = __toESM(require("react"));
970
+ var import_react35 = __toESM(require("react"));
1030
971
  var Selector = (props) => {
1031
972
  const stroke = getStroke(props);
1032
- return /* @__PURE__ */ import_react36.default.createElement("svg", {
973
+ return /* @__PURE__ */ import_react35.default.createElement("svg", {
1033
974
  viewBox: "0 0 24 24"
1034
- }, /* @__PURE__ */ import_react36.default.createElement("path", {
975
+ }, /* @__PURE__ */ import_react35.default.createElement("path", {
1035
976
  fill: stroke,
1036
977
  d: "m12 12 8 2.667-3.556 1.777L14.667 20 12 12Zm3-8v7.5h-1V5H5v9h6.5v1H4V4h11Z"
1037
978
  }));
1038
979
  };
1039
980
 
1040
981
  // src/components/Toolbar/icons/SpeechBalloon.tsx
1041
- var import_react37 = __toESM(require("react"));
982
+ var import_react36 = __toESM(require("react"));
1042
983
  var SpeechBalloon = (props) => {
1043
984
  const stroke = getStroke(props);
1044
- return /* @__PURE__ */ import_react37.default.createElement("svg", {
985
+ return /* @__PURE__ */ import_react36.default.createElement("svg", {
1045
986
  viewBox: "0 0 24 24"
1046
- }, /* @__PURE__ */ import_react37.default.createElement("path", {
987
+ }, /* @__PURE__ */ import_react36.default.createElement("path", {
1047
988
  fill: "none",
1048
989
  stroke,
1049
990
  d: "M17 4.5c.414 0 .79.168 1.06.44.272.27.44.646.44 1.06v9c0 .414-.168.79-.44 1.06a1.49 1.49 0 0 1-1.06.44h-4.207l-2.715 2.715-1.81-2.715H7a1.49 1.49 0 0 1-1.06-.44A1.495 1.495 0 0 1 5.5 15V6c0-.414.168-.79.44-1.06A1.49 1.49 0 0 1 7 4.5Z"
@@ -1051,12 +992,12 @@ var SpeechBalloon = (props) => {
1051
992
  };
1052
993
 
1053
994
  // src/components/Toolbar/icons/Star.tsx
1054
- var import_react38 = __toESM(require("react"));
995
+ var import_react37 = __toESM(require("react"));
1055
996
  var Star = (props) => {
1056
997
  const stroke = getStroke(props);
1057
- return /* @__PURE__ */ import_react38.default.createElement("svg", {
998
+ return /* @__PURE__ */ import_react37.default.createElement("svg", {
1058
999
  viewBox: "0 0 24 24"
1059
- }, /* @__PURE__ */ import_react38.default.createElement("path", {
1000
+ }, /* @__PURE__ */ import_react37.default.createElement("path", {
1060
1001
  fill: "none",
1061
1002
  stroke,
1062
1003
  d: "m12 3.523 1.993 5.734 6.07.123-4.838 3.668 1.758 5.81L12 15.391l-4.983 3.467 1.758-5.81L3.938 9.38l6.069-.123L12 3.523Z"
@@ -1064,24 +1005,24 @@ var Star = (props) => {
1064
1005
  };
1065
1006
 
1066
1007
  // src/components/Toolbar/icons/Text.tsx
1067
- var import_react39 = __toESM(require("react"));
1008
+ var import_react38 = __toESM(require("react"));
1068
1009
  var Text = (props) => {
1069
1010
  const stroke = getStroke(props);
1070
- return /* @__PURE__ */ import_react39.default.createElement("svg", {
1011
+ return /* @__PURE__ */ import_react38.default.createElement("svg", {
1071
1012
  viewBox: "0 0 24 24"
1072
- }, /* @__PURE__ */ import_react39.default.createElement("path", {
1013
+ }, /* @__PURE__ */ import_react38.default.createElement("path", {
1073
1014
  fill: stroke,
1074
1015
  d: "M18.5 5.5V8h-1V6.5H13v11h2v1H9v-1h2v-11H6.5V8h-1V5.5h13Z"
1075
1016
  }));
1076
1017
  };
1077
1018
 
1078
1019
  // src/components/Toolbar/icons/Triangle.tsx
1079
- var import_react40 = __toESM(require("react"));
1020
+ var import_react39 = __toESM(require("react"));
1080
1021
  var Triangle = (props) => {
1081
1022
  const stroke = getStroke(props);
1082
- return /* @__PURE__ */ import_react40.default.createElement("svg", {
1023
+ return /* @__PURE__ */ import_react39.default.createElement("svg", {
1083
1024
  viewBox: "0 0 24 24"
1084
- }, /* @__PURE__ */ import_react40.default.createElement("path", {
1025
+ }, /* @__PURE__ */ import_react39.default.createElement("path", {
1085
1026
  fill: "none",
1086
1027
  stroke,
1087
1028
  d: "M12 6.008 19.138 18.5H4.862L12 6.008Z"
@@ -1089,12 +1030,12 @@ var Triangle = (props) => {
1089
1030
  };
1090
1031
 
1091
1032
  // src/components/Toolbar/icons/Up.tsx
1092
- var import_react41 = __toESM(require("react"));
1033
+ var import_react40 = __toESM(require("react"));
1093
1034
  var Up = (props) => {
1094
1035
  const stroke = getStroke(props);
1095
- return /* @__PURE__ */ import_react41.default.createElement("svg", {
1036
+ return /* @__PURE__ */ import_react40.default.createElement("svg", {
1096
1037
  viewBox: "0 0 24 24"
1097
- }, /* @__PURE__ */ import_react41.default.createElement("path", {
1038
+ }, /* @__PURE__ */ import_react40.default.createElement("path", {
1098
1039
  fill: "none",
1099
1040
  stroke,
1100
1041
  d: "m16 11-2-2-2-2-2 2-2 2m8 6-2-2-2-2-2 2-2 2"
@@ -1103,27 +1044,117 @@ var Up = (props) => {
1103
1044
 
1104
1045
  // src/components/Toolbar/icons/index.ts
1105
1046
  var Icons = {
1106
- Clicker: (0, import_react42.memo)(Clicker),
1107
- Collapse: (0, import_react42.memo)(Collapse),
1108
- Eraser: (0, import_react42.memo)(Eraser),
1109
- Expand: (0, import_react42.memo)(Expand),
1110
- Pencil: (0, import_react42.memo)(Pencil),
1111
- Selector: (0, import_react42.memo)(Selector),
1112
- Rectangle: (0, import_react42.memo)(Rectangle),
1113
- Text: (0, import_react42.memo)(Text),
1114
- Apps: (0, import_react42.memo)(Apps),
1115
- Clean: (0, import_react42.memo)(Clean),
1116
- Circle: (0, import_react42.memo)(Circle),
1117
- Line: (0, import_react42.memo)(Line),
1118
- Arrow: (0, import_react42.memo)(Arrow),
1119
- Star: (0, import_react42.memo)(Star),
1120
- Diamond: (0, import_react42.memo)(Diamond),
1121
- SpeechBalloon: (0, import_react42.memo)(SpeechBalloon),
1122
- Triangle: (0, import_react42.memo)(Triangle),
1123
- Up: (0, import_react42.memo)(Up),
1124
- Down: (0, import_react42.memo)(Down)
1047
+ Clicker: (0, import_react41.memo)(Clicker),
1048
+ Collapse: (0, import_react41.memo)(Collapse),
1049
+ Eraser: (0, import_react41.memo)(Eraser),
1050
+ Expand: (0, import_react41.memo)(Expand),
1051
+ Pencil: (0, import_react41.memo)(Pencil),
1052
+ Selector: (0, import_react41.memo)(Selector),
1053
+ Rectangle: (0, import_react41.memo)(Rectangle),
1054
+ Text: (0, import_react41.memo)(Text),
1055
+ Apps: (0, import_react41.memo)(Apps),
1056
+ Clean: (0, import_react41.memo)(Clean),
1057
+ Circle: (0, import_react41.memo)(Circle),
1058
+ Line: (0, import_react41.memo)(Line),
1059
+ Arrow: (0, import_react41.memo)(Arrow),
1060
+ Star: (0, import_react41.memo)(Star),
1061
+ Diamond: (0, import_react41.memo)(Diamond),
1062
+ SpeechBalloon: (0, import_react41.memo)(SpeechBalloon),
1063
+ Triangle: (0, import_react41.memo)(Triangle),
1064
+ Up: (0, import_react41.memo)(Up),
1065
+ Down: (0, import_react41.memo)(Down)
1066
+ };
1067
+
1068
+ // src/components/Toolbar/const.ts
1069
+ var ShapesMap = {
1070
+ [import_white_web_sdk.ApplianceNames.rectangle]: Icons.Rectangle,
1071
+ [import_white_web_sdk.ApplianceNames.ellipse]: Icons.Circle,
1072
+ [import_white_web_sdk.ApplianceNames.straight]: Icons.Line,
1073
+ [import_white_web_sdk.ApplianceNames.arrow]: Icons.Arrow,
1074
+ [import_white_web_sdk.ShapeType.Pentagram]: Icons.Star,
1075
+ [import_white_web_sdk.ShapeType.Rhombus]: Icons.Diamond,
1076
+ [import_white_web_sdk.ShapeType.Triangle]: Icons.Triangle,
1077
+ [import_white_web_sdk.ShapeType.SpeechBalloon]: Icons.SpeechBalloon
1078
+ };
1079
+ var ApplianceShapes = [
1080
+ import_white_web_sdk.ApplianceNames.rectangle,
1081
+ import_white_web_sdk.ApplianceNames.ellipse,
1082
+ import_white_web_sdk.ApplianceNames.straight,
1083
+ import_white_web_sdk.ApplianceNames.arrow
1084
+ ];
1085
+ var Shapes = [
1086
+ import_white_web_sdk.ShapeType.Pentagram,
1087
+ import_white_web_sdk.ShapeType.Rhombus,
1088
+ import_white_web_sdk.ShapeType.Triangle,
1089
+ import_white_web_sdk.ShapeType.SpeechBalloon
1090
+ ];
1091
+ var ItemHeight = 32 + 4;
1092
+ var ItemsCount = 8;
1093
+ var MaxHeight = ItemHeight * ItemsCount - 4;
1094
+ var MinHeight = ItemHeight * 2 - 4;
1095
+
1096
+ // src/components/Toolbar/hooks.ts
1097
+ function useRoomState() {
1098
+ return useFastboardValue(useFastboardApp().memberState);
1099
+ }
1100
+ function useToolbar() {
1101
+ const app = useFastboardApp();
1102
+ const writable = useWritable();
1103
+ const memberState = useRoomState();
1104
+ const [lastShape, setLastShape] = (0, import_react42.useState)("rectangle");
1105
+ const cleanCurrentScene = (0, import_react42.useCallback)(() => {
1106
+ app.cleanCurrentScene();
1107
+ }, [app]);
1108
+ const setAppliance = (0, import_react42.useCallback)((appliance, shape) => {
1109
+ app.setAppliance(appliance, shape);
1110
+ if (shape) {
1111
+ setLastShape(shape);
1112
+ } else if (appliance in ShapesMap) {
1113
+ setLastShape(appliance);
1114
+ }
1115
+ }, [app]);
1116
+ const setStrokeWidth = (0, import_react42.useCallback)((strokeWidth) => {
1117
+ app.setStrokeWidth(strokeWidth);
1118
+ }, [app]);
1119
+ const setStrokeColor = (0, import_react42.useCallback)((strokeColor) => {
1120
+ app.setStrokeColor(strokeColor);
1121
+ }, [app]);
1122
+ return {
1123
+ writable,
1124
+ memberState,
1125
+ lastShape,
1126
+ cleanCurrentScene,
1127
+ setAppliance,
1128
+ setStrokeWidth,
1129
+ setStrokeColor
1130
+ };
1131
+ }
1132
+ var EmptyToolbarHook = {
1133
+ writable: false,
1134
+ memberState: void 0,
1135
+ lastShape: "rectangle",
1136
+ cleanCurrentScene: noop,
1137
+ setAppliance: noop,
1138
+ setStrokeWidth: noop,
1139
+ setStrokeColor: noop
1125
1140
  };
1126
1141
 
1142
+ // src/components/Toolbar/Toolbar.tsx
1143
+ var import_clsx9 = __toESM(require("clsx"));
1144
+ var import_framer_motion = require("framer-motion");
1145
+ var import_react59 = __toESM(require("react"));
1146
+
1147
+ // src/components/Toolbar/components/assets/expanded.png
1148
+ var expanded_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAB8CAYAAAAMw2JFAAAAAXNSR0IArs4c6QAAA5xJREFUeF7tnL9v00AUx5/TlRkJMSAxZ+jYCf4GtopK6dB2qBBsjshaJErboWVJpYaNLGDaIR2YYAFXqlxhlvzAJkhGJGlyDhVNSpWgyOiqBJnQ+urznW2Jy1JVVnKffv3x8yV9LxLE5CEBwFUA6ALAzyiZJFVVX21ubj7N5/MmACAAGEQBJDWbzQZCqGcYRm52dlbpdDpNAPgRNozkOE691+tBo9FItNtto1AorC0tLX0EAAzUDwvoDGS02NHREU4IarXatizLOV3XvwHAdwBweAP9BYIXGwwGcHh4mLBtG2matrGwsPB2mA5Xmf8BGf3lJycn+HRNtFqtd2HIfCEIBnIcBxBCEkKobxjGFk+ZPUFG6YQh86VAPGSuAUCbhcy+QMZktjVNW2cls28QD5k/A0CLtjJTg4zLbJpmLpVKvaStzIFAWMrMBISFzExBgsjMHIRWZm4gfmXmCnKezIqiLK+srOjDG+mfu3ooIG6Z6/X6r/39/Udzc3OvAQBX5jOYUEHwgqenp2BZlrS7u/sgnU6/Ge53wgfBMN1uV6pWq/b09PTdSqVSwtU49ERGp8myrISqqsszMzPPcSqRgRwfH0vlcvnD1NTUIgB8jQyk3+9DuVy2Jycn7wBANTIQvPsrlUqJZDJ5GwA+RQaCXSkWixPJZPKWABldOSKR8XeLIhGRCOkTBOGIcEQ4QkpAOEJKSNQR4YhwhJSAcISUkKgjTBy5fuPmNfxCNetLA/98srp25WFaxv+UpH5QnZpxEPz7/XuLnSAwzEBwFEFgmIIEgWEOQgvDBYQGhhuIXxiuIH5g/g8QP5czt0T8QFB/mHdeZXXXdr8QXEBoIJiD0EIwBQkCwQwksm0A9abD44lUl68A4ZEAkz0rDzDhiDg1JK+EI8IR4QgpAeEIKSFRR4QjwhFSAsIRUkKijsTSkdi0f8WmIS42LYKxaJqMRRtpLBpr8URTpK3GrrEYU1GUx6E3X7sHhUzTfJZKpV5cNFvBrY10NDqFEFKz2ex6Pp/3nDZhDuIaJrMPDg425ufncac3HrXzHCZjCuIar9vJZDI5TdPweN2lJpKYgLhlLBQKqzQDh4FA/MhI2ptQg/iVkTkIrYxMQdwyyrK8pet6uONxLGQMlAhLGalBXDK+z2azG6TKSFqIdNxrzNZXZSQtRDp+0eDxDmsZLwUSxvQqEWQ4nN4n3aZJLxT0uLS3t7cdhowk0Ph8gQGJNKzjvwGKWUjXcvHclAAAAABJRU5ErkJggg==";
1149
+
1150
+ // src/components/Toolbar/Content.tsx
1151
+ var import_clsx8 = __toESM(require("clsx"));
1152
+ var import_react58 = __toESM(require("react"));
1153
+
1154
+ // src/components/Toolbar/components/ApplianceButtons.tsx
1155
+ var import_react45 = __toESM(require("react"));
1156
+ var import_white_web_sdk2 = require("white-web-sdk");
1157
+
1127
1158
  // src/components/Toolbar/components/Button.tsx
1128
1159
  var import_clsx4 = __toESM(require("clsx"));
1129
1160
  var import_react43 = __toESM(require("react"));
@@ -1164,10 +1195,10 @@ function ClickerButton() {
1164
1195
  const app = useFastboardApp();
1165
1196
  const { t } = useTranslation();
1166
1197
  const { theme, icons, writable, setAppliance, memberState } = (0, import_react45.useContext)(ToolbarContext);
1167
- const changeAppliance = (0, import_react45.useCallback)(() => setAppliance(import_white_web_sdk.ApplianceNames.clicker), [setAppliance]);
1198
+ const changeAppliance = (0, import_react45.useCallback)(() => setAppliance(import_white_web_sdk2.ApplianceNames.clicker), [setAppliance]);
1168
1199
  const shortcut = (_a = app.hotKeys) == null ? void 0 : _a.changeToClick;
1169
1200
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1170
- const active = appliance === import_white_web_sdk.ApplianceNames.clicker;
1201
+ const active = appliance === import_white_web_sdk2.ApplianceNames.clicker;
1171
1202
  const disabled = !writable;
1172
1203
  return /* @__PURE__ */ import_react45.default.createElement(Button, {
1173
1204
  content: renderToolTip(t("clicker"), shortcut),
@@ -1186,9 +1217,9 @@ function SelectorButton() {
1186
1217
  const app = useFastboardApp();
1187
1218
  const { t } = useTranslation();
1188
1219
  const { theme, icons, writable, setAppliance, memberState } = (0, import_react45.useContext)(ToolbarContext);
1189
- const changeAppliance = (0, import_react45.useCallback)(() => setAppliance(import_white_web_sdk.ApplianceNames.selector), [setAppliance]);
1220
+ const changeAppliance = (0, import_react45.useCallback)(() => setAppliance(import_white_web_sdk2.ApplianceNames.selector), [setAppliance]);
1190
1221
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1191
- const active = appliance === import_white_web_sdk.ApplianceNames.selector;
1222
+ const active = appliance === import_white_web_sdk2.ApplianceNames.selector;
1192
1223
  const disabled = !writable;
1193
1224
  const shortcut = (app.hotKeys || defaultHotKeys).changeToSelector;
1194
1225
  return /* @__PURE__ */ import_react45.default.createElement(Button, {
@@ -1208,9 +1239,9 @@ function EraserButton() {
1208
1239
  const app = useFastboardApp();
1209
1240
  const { t } = useTranslation();
1210
1241
  const { theme, icons, writable, setAppliance, memberState } = (0, import_react45.useContext)(ToolbarContext);
1211
- const changeAppliance = (0, import_react45.useCallback)(() => setAppliance(import_white_web_sdk.ApplianceNames.eraser), [setAppliance]);
1242
+ const changeAppliance = (0, import_react45.useCallback)(() => setAppliance(import_white_web_sdk2.ApplianceNames.eraser), [setAppliance]);
1212
1243
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1213
- const active = appliance === import_white_web_sdk.ApplianceNames.eraser;
1244
+ const active = appliance === import_white_web_sdk2.ApplianceNames.eraser;
1214
1245
  const disabled = !writable;
1215
1246
  const shortcut = ((app == null ? void 0 : app.hotKeys) || defaultHotKeys).changeToEraser;
1216
1247
  return /* @__PURE__ */ import_react45.default.createElement(Button, {
@@ -1327,7 +1358,7 @@ function AppIcon({ title, src, alt, onClick }) {
1327
1358
  // src/components/Toolbar/components/PencilButton.tsx
1328
1359
  var import_react51 = __toESM(require("@tippyjs/react"));
1329
1360
  var import_react52 = __toESM(require("react"));
1330
- var import_white_web_sdk2 = require("white-web-sdk");
1361
+ var import_white_web_sdk3 = require("white-web-sdk");
1331
1362
 
1332
1363
  // src/components/Toolbar/components/ColorBox.tsx
1333
1364
  var import_clsx5 = __toESM(require("clsx"));
@@ -1404,10 +1435,10 @@ function PencilButton() {
1404
1435
  const { t } = useTranslation();
1405
1436
  const { theme, icons, writable, setAppliance, memberState } = (0, import_react52.useContext)(ToolbarContext);
1406
1437
  const changeAppliance = (0, import_react52.useCallback)(() => {
1407
- setAppliance(import_white_web_sdk2.ApplianceNames.pencil);
1438
+ setAppliance(import_white_web_sdk3.ApplianceNames.pencil);
1408
1439
  }, [setAppliance]);
1409
1440
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1410
- const active = appliance === import_white_web_sdk2.ApplianceNames.pencil;
1441
+ const active = appliance === import_white_web_sdk3.ApplianceNames.pencil;
1411
1442
  const disabled = !writable;
1412
1443
  const shortcut = ((app == null ? void 0 : app.hotKeys) || defaultHotKeys).changeToPencil;
1413
1444
  return /* @__PURE__ */ import_react52.default.createElement("span", {
@@ -1446,46 +1477,15 @@ function renderPencilButtonContent() {
1446
1477
  var import_react53 = __toESM(require("@tippyjs/react"));
1447
1478
  var import_react54 = __toESM(require("react"));
1448
1479
  var import_white_web_sdk4 = require("white-web-sdk");
1449
-
1450
- // src/components/Toolbar/const.ts
1451
- var import_white_web_sdk3 = require("white-web-sdk");
1452
- var ShapesMap = {
1453
- [import_white_web_sdk3.ApplianceNames.rectangle]: Icons.Rectangle,
1454
- [import_white_web_sdk3.ApplianceNames.ellipse]: Icons.Circle,
1455
- [import_white_web_sdk3.ApplianceNames.straight]: Icons.Line,
1456
- [import_white_web_sdk3.ApplianceNames.arrow]: Icons.Arrow,
1457
- [import_white_web_sdk3.ShapeType.Pentagram]: Icons.Star,
1458
- [import_white_web_sdk3.ShapeType.Rhombus]: Icons.Diamond,
1459
- [import_white_web_sdk3.ShapeType.Triangle]: Icons.Triangle,
1460
- [import_white_web_sdk3.ShapeType.SpeechBalloon]: Icons.SpeechBalloon
1461
- };
1462
- var ApplianceShapes = [
1463
- import_white_web_sdk3.ApplianceNames.rectangle,
1464
- import_white_web_sdk3.ApplianceNames.ellipse,
1465
- import_white_web_sdk3.ApplianceNames.straight,
1466
- import_white_web_sdk3.ApplianceNames.arrow
1467
- ];
1468
- var Shapes = [
1469
- import_white_web_sdk3.ShapeType.Pentagram,
1470
- import_white_web_sdk3.ShapeType.Rhombus,
1471
- import_white_web_sdk3.ShapeType.Triangle,
1472
- import_white_web_sdk3.ShapeType.SpeechBalloon
1473
- ];
1474
- var ItemHeight = 32 + 4;
1475
- var ItemsCount = 8;
1476
- var MaxHeight = ItemHeight * ItemsCount - 4;
1477
- var MinHeight = ItemHeight * 2 - 4;
1478
-
1479
- // src/components/Toolbar/components/ShapesButton.tsx
1480
1480
  var ShapeTypes = /* @__PURE__ */ new Set([...ApplianceShapes, ...Shapes]);
1481
1481
  function ShapesButton() {
1482
1482
  const { t } = useTranslation();
1483
- const { theme, memberState } = (0, import_react54.useContext)(ToolbarContext);
1483
+ const { theme, memberState, lastShape } = (0, import_react54.useContext)(ToolbarContext);
1484
1484
  const appliance = memberState == null ? void 0 : memberState.currentApplianceName;
1485
1485
  const shape = memberState == null ? void 0 : memberState.shapeType;
1486
1486
  const key = appliance === import_white_web_sdk4.ApplianceNames.shape ? shape : appliance;
1487
1487
  const active = ShapeTypes.has(key);
1488
- const CurrentIcon = ShapesMap[key] || Icons.Rectangle;
1488
+ const CurrentIcon = ShapesMap[lastShape];
1489
1489
  return /* @__PURE__ */ import_react54.default.createElement("span", {
1490
1490
  className: "fastboard-toolbar-btn-interactive"
1491
1491
  }, /* @__PURE__ */ import_react54.default.createElement(import_react53.default, {