@elixpo/lixsketch 5.4.7 → 5.5.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.
Files changed (218) hide show
  1. package/dist/react/AIRenderer-M4LMJ66J.js +1105 -0
  2. package/dist/react/AIRenderer-M4LMJ66J.js.map +7 -0
  3. package/dist/react/Arrow-BJDAXPMH.js +8 -0
  4. package/dist/react/Arrow-BJDAXPMH.js.map +7 -0
  5. package/dist/react/Circle-KPG7TKIX.js +8 -0
  6. package/dist/react/Circle-KPG7TKIX.js.map +7 -0
  7. package/dist/react/CodeShape-K4DIZAIV.js +8 -0
  8. package/dist/react/CodeShape-K4DIZAIV.js.map +7 -0
  9. package/dist/react/CopyPaste-4CKJRHJ3.js +569 -0
  10. package/dist/react/CopyPaste-4CKJRHJ3.js.map +7 -0
  11. package/dist/react/EraserTrail-PA6IQLQN.js +20 -0
  12. package/dist/react/EraserTrail-PA6IQLQN.js.map +7 -0
  13. package/dist/react/EventDispatcher-SRFH6LQZ.js +463 -0
  14. package/dist/react/EventDispatcher-SRFH6LQZ.js.map +7 -0
  15. package/dist/react/Frame-6UR5XPAX.js +10 -0
  16. package/dist/react/Frame-6UR5XPAX.js.map +7 -0
  17. package/dist/react/FreehandStroke-CK24NUT3.js +8 -0
  18. package/dist/react/FreehandStroke-CK24NUT3.js.map +7 -0
  19. package/dist/react/GraphEngine-QE5B2PMR.js +340 -0
  20. package/dist/react/GraphEngine-QE5B2PMR.js.map +7 -0
  21. package/dist/react/GraphMathParser-2WMTY4IE.js +10 -0
  22. package/dist/react/GraphMathParser-2WMTY4IE.js.map +7 -0
  23. package/dist/react/IconShape-KMIA6T2H.js +10 -0
  24. package/dist/react/IconShape-KMIA6T2H.js.map +7 -0
  25. package/dist/react/ImageShape-CHHGBXUQ.js +10 -0
  26. package/dist/react/ImageShape-CHHGBXUQ.js.map +7 -0
  27. package/dist/react/LayerOrder-XCHF4MSS.js +66 -0
  28. package/dist/react/LayerOrder-XCHF4MSS.js.map +7 -0
  29. package/dist/react/Line-2KOQEEGA.js +10 -0
  30. package/dist/react/Line-2KOQEEGA.js.map +7 -0
  31. package/dist/react/LixScriptParser-JYWJX375.js +1033 -0
  32. package/dist/react/LixScriptParser-JYWJX375.js.map +7 -0
  33. package/dist/react/MermaidFlowchartRenderer-4QBAZ5MB.js +412 -0
  34. package/dist/react/MermaidFlowchartRenderer-4QBAZ5MB.js.map +7 -0
  35. package/dist/react/MermaidSequenceParser-UKG2NSZY.js +8 -0
  36. package/dist/react/MermaidSequenceParser-UKG2NSZY.js.map +7 -0
  37. package/dist/react/MermaidSequenceRenderer-HPLHY5II.js +387 -0
  38. package/dist/react/MermaidSequenceRenderer-HPLHY5II.js.map +7 -0
  39. package/dist/react/Rectangle-6FE7RN6W.js +8 -0
  40. package/dist/react/Rectangle-6FE7RN6W.js.map +7 -0
  41. package/dist/react/ResizeCode-WAMDTKSW.js +2 -0
  42. package/dist/react/ResizeCode-WAMDTKSW.js.map +7 -0
  43. package/dist/react/ResizeShapes-LKEQTITP.js +250 -0
  44. package/dist/react/ResizeShapes-LKEQTITP.js.map +7 -0
  45. package/dist/react/SceneSerializer-4U4B24JM.js +739 -0
  46. package/dist/react/SceneSerializer-4U4B24JM.js.map +7 -0
  47. package/dist/react/Selection-VVUHY5YJ.js +34 -0
  48. package/dist/react/Selection-VVUHY5YJ.js.map +7 -0
  49. package/dist/react/SketchEngine-YA4RG3KX.js +413 -0
  50. package/dist/react/SketchEngine-YA4RG3KX.js.map +7 -0
  51. package/dist/react/TextShape-54ZJ66E3.js +8 -0
  52. package/dist/react/TextShape-54ZJ66E3.js.map +7 -0
  53. package/dist/react/UndoRedo-M2JZUBKN.js +30 -0
  54. package/dist/react/UndoRedo-M2JZUBKN.js.map +7 -0
  55. package/dist/react/ZoomPan-U3TXC5AJ.js +186 -0
  56. package/dist/react/ZoomPan-U3TXC5AJ.js.map +7 -0
  57. package/dist/react/arrowTool-CWEMIRXK.js +17 -0
  58. package/dist/react/arrowTool-CWEMIRXK.js.map +7 -0
  59. package/dist/react/boxicons-5JNJQPUP.woff +0 -0
  60. package/dist/react/boxicons-6NVWQSCQ.eot +0 -0
  61. package/dist/react/boxicons-AQ5N6WP7.woff2 +0 -0
  62. package/dist/react/boxicons-GDR4JU3X.ttf +0 -0
  63. package/dist/react/boxicons-NNFHLMOR.svg +1660 -0
  64. package/dist/react/chunk-2OQXI7QB.js +564 -0
  65. package/dist/react/chunk-2OQXI7QB.js.map +7 -0
  66. package/dist/react/chunk-5OUBTHHO.js +187 -0
  67. package/dist/react/chunk-5OUBTHHO.js.map +7 -0
  68. package/dist/react/chunk-6PFXZKL2.js +628 -0
  69. package/dist/react/chunk-6PFXZKL2.js.map +7 -0
  70. package/dist/react/chunk-6SFNWGGZ.js +453 -0
  71. package/dist/react/chunk-6SFNWGGZ.js.map +7 -0
  72. package/dist/react/chunk-7TZSIR6V.js +210 -0
  73. package/dist/react/chunk-7TZSIR6V.js.map +7 -0
  74. package/dist/react/chunk-AJAZC37E.js +662 -0
  75. package/dist/react/chunk-AJAZC37E.js.map +7 -0
  76. package/dist/react/chunk-BU4D2WYQ.js +1213 -0
  77. package/dist/react/chunk-BU4D2WYQ.js.map +7 -0
  78. package/dist/react/chunk-BZE4CEBG.js +747 -0
  79. package/dist/react/chunk-BZE4CEBG.js.map +7 -0
  80. package/dist/react/chunk-CB2RANCB.js +212 -0
  81. package/dist/react/chunk-CB2RANCB.js.map +7 -0
  82. package/dist/react/chunk-DNAG7ML6.js +128 -0
  83. package/dist/react/chunk-DNAG7ML6.js.map +7 -0
  84. package/dist/react/chunk-HZWLPXFN.js +198 -0
  85. package/dist/react/chunk-HZWLPXFN.js.map +7 -0
  86. package/dist/react/chunk-I6HCCIXB.js +572 -0
  87. package/dist/react/chunk-I6HCCIXB.js.map +7 -0
  88. package/dist/react/chunk-IZ5OGWGW.js +235 -0
  89. package/dist/react/chunk-IZ5OGWGW.js.map +7 -0
  90. package/dist/react/chunk-JJCJNLNN.js +1490 -0
  91. package/dist/react/chunk-JJCJNLNN.js.map +7 -0
  92. package/dist/react/chunk-JQ3IRFDP.js +222 -0
  93. package/dist/react/chunk-JQ3IRFDP.js.map +7 -0
  94. package/dist/react/chunk-L5OARZJ7.js +1134 -0
  95. package/dist/react/chunk-L5OARZJ7.js.map +7 -0
  96. package/dist/react/chunk-LHRTXNVE.js +1600 -0
  97. package/dist/react/chunk-LHRTXNVE.js.map +7 -0
  98. package/dist/react/chunk-Q2GA4MBZ.js +1653 -0
  99. package/dist/react/chunk-Q2GA4MBZ.js.map +7 -0
  100. package/dist/react/chunk-QNSE5BAY.js +519 -0
  101. package/dist/react/chunk-QNSE5BAY.js.map +7 -0
  102. package/dist/react/chunk-QXFBG7OM.js +191 -0
  103. package/dist/react/chunk-QXFBG7OM.js.map +7 -0
  104. package/dist/react/chunk-T6ZVV5ZO.js +714 -0
  105. package/dist/react/chunk-T6ZVV5ZO.js.map +7 -0
  106. package/dist/react/chunk-URB6MY46.js +974 -0
  107. package/dist/react/chunk-URB6MY46.js.map +7 -0
  108. package/dist/react/chunk-VN62KLOC.js +931 -0
  109. package/dist/react/chunk-VN62KLOC.js.map +7 -0
  110. package/dist/react/chunk-VQVEPJSA.js +158 -0
  111. package/dist/react/chunk-VQVEPJSA.js.map +7 -0
  112. package/dist/react/chunk-XISEAGBV.js +1632 -0
  113. package/dist/react/chunk-XISEAGBV.js.map +7 -0
  114. package/dist/react/chunk-YKJUBFHE.js +575 -0
  115. package/dist/react/chunk-YKJUBFHE.js.map +7 -0
  116. package/dist/react/circleTool-NUATSEI2.js +14 -0
  117. package/dist/react/circleTool-NUATSEI2.js.map +7 -0
  118. package/dist/react/codeTool-MHCB2FNB.js +38 -0
  119. package/dist/react/codeTool-MHCB2FNB.js.map +7 -0
  120. package/dist/react/eraserTool-2GS2LQCS.js +103 -0
  121. package/dist/react/eraserTool-2GS2LQCS.js.map +7 -0
  122. package/dist/react/frameTool-PWVKKXSP.js +14 -0
  123. package/dist/react/frameTool-PWVKKXSP.js.map +7 -0
  124. package/dist/react/freehandTool-SLYGASVP.js +14 -0
  125. package/dist/react/freehandTool-SLYGASVP.js.map +7 -0
  126. package/dist/react/iconTool-GPZ7O7NH.js +18 -0
  127. package/dist/react/iconTool-GPZ7O7NH.js.map +7 -0
  128. package/dist/react/imageTool-D5R4XGEU.js +15 -0
  129. package/dist/react/imageTool-D5R4XGEU.js.map +7 -0
  130. package/dist/react/index.js +5349 -0
  131. package/dist/react/index.js.map +7 -0
  132. package/dist/react/laserTool-XVMV63AV.js +239 -0
  133. package/dist/react/laserTool-XVMV63AV.js.map +7 -0
  134. package/dist/react/lineTool-WNI5EMZ5.js +14 -0
  135. package/dist/react/lineTool-WNI5EMZ5.js.map +7 -0
  136. package/dist/react/lixCode-OJMVUXXI.ttf +0 -0
  137. package/dist/react/lixDefault-JEAPAUJL.ttf +0 -0
  138. package/dist/react/lixFancy-BPXYM5CQ.ttf +0 -0
  139. package/dist/react/lixFont-CPKEUDVM.woff2 +0 -0
  140. package/dist/react/rectangleTool-U7DZ6ZTA.js +14 -0
  141. package/dist/react/rectangleTool-U7DZ6ZTA.js.map +7 -0
  142. package/dist/react/styles.css +6627 -0
  143. package/dist/react/textTool-M7S6F3VC.js +21 -0
  144. package/dist/react/textTool-M7S6F3VC.js.map +7 -0
  145. package/package.json +39 -5
  146. package/src/EngineShortcuts.js +83 -27
  147. package/src/core/AIRenderer.js +30 -18
  148. package/src/core/GraphEngine.js +64 -41
  149. package/src/core/MermaidFlowchartRenderer.js +153 -88
  150. package/src/core/MermaidSequenceRenderer.js +168 -93
  151. package/src/core/SceneSerializer.js +86 -2
  152. package/src/core/Selection.js +119 -19
  153. package/src/core/UndoRedo.js +82 -15
  154. package/src/core/ZoomPan.js +15 -5
  155. package/src/index.js +14 -1
  156. package/src/react/LixSketchCanvas.jsx +347 -0
  157. package/src/react/components/AppMenu.jsx +482 -0
  158. package/src/react/components/Footer.jsx +85 -0
  159. package/src/react/components/Toolbar.jsx +140 -0
  160. package/src/react/components/canvas/CanvasLoadingOverlay.jsx +76 -0
  161. package/src/react/components/canvas/ContextMenu.jsx +466 -0
  162. package/src/react/components/canvas/FindBar.jsx +177 -0
  163. package/src/react/components/canvas/ImageSourcePicker.jsx +133 -0
  164. package/src/react/components/canvas/MultiSelectActions.jsx +120 -0
  165. package/src/react/components/canvas/SVGCanvas.jsx +145 -0
  166. package/src/react/components/canvas/SaveStatusIndicator.jsx +29 -0
  167. package/src/react/components/modals/CanvasPropertiesModal.jsx +358 -0
  168. package/src/react/components/modals/CommandPalette.jsx +307 -0
  169. package/src/react/components/modals/ExportImageModal.jsx +287 -0
  170. package/src/react/components/modals/GraphModal.jsx +174 -0
  171. package/src/react/components/modals/HelpModal.jsx +208 -0
  172. package/src/react/components/modals/LixScriptModal.jsx +130 -0
  173. package/src/react/components/modals/ShortcutsModal.jsx +125 -0
  174. package/src/react/components/sidebars/ArrowSidebar.jsx +173 -0
  175. package/src/react/components/sidebars/CircleSidebar.jsx +134 -0
  176. package/src/react/components/sidebars/FrameSidebar.jsx +263 -0
  177. package/src/react/components/sidebars/IconSidebar.jsx +279 -0
  178. package/src/react/components/sidebars/ImageSidebar.jsx +69 -0
  179. package/src/react/components/sidebars/LineSidebar.jsx +109 -0
  180. package/src/react/components/sidebars/PaintbrushSidebar.jsx +119 -0
  181. package/src/react/components/sidebars/RectangleSidebar.jsx +165 -0
  182. package/src/react/components/sidebars/ShapeSidebar.jsx +130 -0
  183. package/src/react/components/sidebars/TextSidebar.jsx +174 -0
  184. package/src/react/hooks/inertStores.js +58 -0
  185. package/src/react/hooks/useSketchEngine.js +76 -0
  186. package/src/react/hooks/useTranslation.js +92 -0
  187. package/src/react/index.js +41 -0
  188. package/src/react/store/useSketchStore.js +234 -0
  189. package/src/react/store/useUIStore.js +196 -0
  190. package/src/react/styles/arrowSidebar.css +263 -0
  191. package/src/react/styles/canvasStroke.css +47 -0
  192. package/src/react/styles/canvasTools.css +769 -0
  193. package/src/react/styles/circleSidebar.css +206 -0
  194. package/src/react/styles/fonts/fonts.css +29 -0
  195. package/src/react/styles/fonts/lixCode.ttf +0 -0
  196. package/src/react/styles/fonts/lixDefault.ttf +0 -0
  197. package/src/react/styles/fonts/lixDocs.ttf +0 -0
  198. package/src/react/styles/fonts/lixFancy.ttf +0 -0
  199. package/src/react/styles/fonts/lixFont.woff2 +0 -0
  200. package/src/react/styles/lineSidebar.css +207 -0
  201. package/src/react/styles/paintbrushSidebar.css +247 -0
  202. package/src/react/styles/squareSidebar.css +206 -0
  203. package/src/react/styles/writeText.css +149 -0
  204. package/src/react/styles.css +175 -0
  205. package/src/react/toolsEnum.js +20 -0
  206. package/src/react/utils/toast.js +18 -0
  207. package/src/shapes/Frame.js +7 -1
  208. package/src/shapes/Line.js +11 -5
  209. package/src/tools/arrowTool.js +30 -4
  210. package/src/tools/circleTool.js +33 -9
  211. package/src/tools/codeTool.js +5 -3
  212. package/src/tools/frameTool.js +47 -7
  213. package/src/tools/freehandTool.js +12 -4
  214. package/src/tools/iconTool.js +7 -1
  215. package/src/tools/imageTool.js +7 -1
  216. package/src/tools/lineTool.js +27 -3
  217. package/src/tools/rectangleTool.js +45 -8
  218. package/src/tools/textTool.js +23 -6
@@ -0,0 +1,769 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Kanit:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap');
2
+
3
+
4
+
5
+
6
+ .toolbar {
7
+ position: absolute;
8
+ top: 60px;
9
+ left: 10px;
10
+ border-radius: 12px;
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: 4px;
14
+ justify-content: flex-start;
15
+ align-items: center;
16
+ background: #232329;
17
+ width: 42px;
18
+ padding: 6px 0;
19
+ box-sizing: border-box;
20
+ z-index: 1000;
21
+ max-height: calc(100vh - 48px - 10px - 70px);
22
+ overflow-y: auto;
23
+ overflow-x: hidden;
24
+ }
25
+
26
+ .toolbar::-webkit-scrollbar {
27
+ display: none;
28
+ }
29
+
30
+ .toolbar .spacer
31
+ {
32
+ height: 1px;
33
+ position: relative;
34
+ width: 55%;
35
+ background: #555;
36
+ }
37
+ .toolbar i {
38
+ font-size: 18px;
39
+ color: #ffffffad;
40
+ margin: 0;
41
+ padding: 4px;
42
+ cursor: pointer;
43
+ transition: 0.2s;
44
+ border-radius: 6px;
45
+ }
46
+
47
+ .toolbar i:hover {
48
+ color: #f259efad;
49
+ background: #343448;
50
+ transition: 0.2s;
51
+ }
52
+
53
+ .toolbar ion-icon {
54
+ font-size: 18px;
55
+ color: #c873e4;
56
+ margin: 0;
57
+ padding: 4px;
58
+ cursor: pointer;
59
+ transition: 0.2s;
60
+ border-radius: 6px;
61
+ }
62
+
63
+ .toolbar i.selected
64
+ {
65
+ background: #444480;
66
+ transition: 0.2s;
67
+ }
68
+ .iconsToolBar.hidden
69
+ {
70
+ filter: blur(10px);
71
+ opacity: 0;
72
+ pointer-events: none;
73
+ transition: 0.25s;
74
+ }
75
+ .iconsToolBar
76
+ {
77
+ position: absolute;
78
+ height: 70%;
79
+ left: 66px;
80
+ top: 55%;
81
+ transform: translateY(-50%);
82
+ display: flex;
83
+ z-index: 10;
84
+ flex-direction: column;
85
+ backdrop-filter: blur(10px);
86
+ align-items: center;
87
+ border: 2px solid rgb(91, 84, 84);
88
+ border-radius: 10px;
89
+ padding: 10px 5px;
90
+ gap: 10px;
91
+ box-sizing: border-box;
92
+ opacity: 1;
93
+ pointer-events: all;
94
+ filter: blur(0px);
95
+ transition: 0.25s;
96
+ }
97
+ .iconsToolBar::-webkit-scrollbar
98
+ {
99
+ display: none;
100
+ }
101
+ .choiceBoxes
102
+ {
103
+ width: 90%;
104
+ height: 50px;
105
+ margin-bottom: 5px;
106
+ padding: 5px 5px;
107
+ display: flex;
108
+ justify-content: space-between;
109
+ align-items: center;
110
+ border: 2px solid #444448;
111
+ border-radius: 10px;
112
+ cursor: pointer;
113
+ }
114
+ .choiceBoxes:hover
115
+ {
116
+ background: #343448;
117
+ transition: 0.25s;
118
+ }
119
+ .choiceBoxes.selected
120
+ {
121
+ background: #3a3a5c;
122
+ border: 1px solid #5B57D1;
123
+ transition: 0.25s;
124
+ }
125
+ .choiceBoxes.selected i,
126
+ .choiceBoxes.selected p
127
+ {
128
+ color: #b8a4f4;
129
+ }
130
+ .choiceBoxes .information
131
+ {
132
+ display: flex;
133
+ flex-direction: row;
134
+ align-items: center;
135
+ justify-content: left;
136
+ margin-left: 10px;
137
+ gap: 10px;
138
+ width: 100%;
139
+ }
140
+ .choiceBoxes i
141
+ {
142
+ font-size: 1.5em;
143
+ color: #fff;
144
+ cursor: pointer;
145
+ transition: 0.25s;
146
+ }
147
+
148
+ .choiceBoxes p
149
+ {
150
+ font-size: 1.2em;
151
+ color: #fff;
152
+ font-family: "lixFont", serif;
153
+ font-weight: 300;
154
+ user-select: none;
155
+ margin-left: 10px;
156
+ }
157
+
158
+ .searchBar
159
+ {
160
+ position: relative;
161
+ top: 0;
162
+ left: 0;
163
+ width: 90%;
164
+ padding: 5px 10px;
165
+ display: flex;
166
+ flex-direction: row;
167
+ gap: 10px;
168
+ }
169
+
170
+ .searchBar i
171
+ {
172
+ font-size: 1.5em;
173
+ color: #fff;
174
+ }
175
+ .searchBar input[type="text"]
176
+ {
177
+ height: 30px;
178
+ width: 100%;
179
+ background: transparent;
180
+ border: none;
181
+ outline: none;
182
+ color: #fff;
183
+ font-size: 1.3em;
184
+ font-family: "lixFont", serif;
185
+ font-weight: 300;
186
+ user-select: none;
187
+ }
188
+ .iconsContainer
189
+ {
190
+ position: relative;
191
+ display: flex;
192
+ flex-direction: row;
193
+ align-items: center;
194
+ max-width: 340px;
195
+ max-height: 90%;
196
+ flex-wrap: wrap;
197
+ overflow-y: auto;
198
+ overflow-x: hidden;
199
+ padding: 5px 5px;
200
+ gap: 2px;
201
+ box-sizing: border-box;
202
+ }
203
+ .iconsContainer::-webkit-scrollbar
204
+ {
205
+ display: none;
206
+ }
207
+ .icons
208
+ {
209
+ height: 50px;
210
+ width: 50px;
211
+ display: flex;
212
+ flex-direction: column;
213
+ align-items: center;
214
+ justify-content: center;
215
+ background: transparent;
216
+ border-radius: 5px;
217
+ cursor: pointer;
218
+ transition: 0.25s;
219
+ border: 2px solid #444448;
220
+ margin: 5px;
221
+ position: relative;
222
+ overflow: hidden;
223
+ }
224
+ .icons svg
225
+ {
226
+ height: 35px !important;
227
+ width: 35px !important;
228
+ /* fill: #fff; */
229
+ }
230
+ .icons:hover
231
+ {
232
+ background: #343448;
233
+ border: 2px solid #5555a0;
234
+ transition: 0.25s;
235
+ }
236
+
237
+ #freehand-canvas
238
+ {
239
+ height: 100%;
240
+ width: 100%;
241
+ top: 0;
242
+ left: 0;
243
+ transform: translate(0, 0);
244
+ transform-origin: center;
245
+ /* background: rgba(255, 255, 204, 0.304); */
246
+ }
247
+
248
+
249
+ .footerSection
250
+ {
251
+ position: absolute;
252
+ bottom: 10px;
253
+ left: 0;
254
+ width: 100%;
255
+ height: 50px;
256
+ display: flex;
257
+ background: transparent;
258
+ flex-direction: row;
259
+ gap: 10px;
260
+ align-items: center;
261
+ justify-content: right;
262
+ padding-right: 20px;
263
+ box-sizing: border-box;
264
+ }
265
+
266
+ .stackControls
267
+ {
268
+ position: relative;
269
+ display: flex;
270
+ flex-direction: row;
271
+ background: #343448;
272
+ height: 40px;
273
+ width: 100px;
274
+ border-radius: 10px;
275
+ align-items: center;
276
+ justify-content: center;
277
+ gap: 20px;
278
+ }
279
+ .stackControls i
280
+ {
281
+ color: #fff;
282
+ font-size: 2em;
283
+ cursor: pointer;
284
+ }
285
+ .stackControls i.disabled
286
+ {
287
+ opacity: 0.4;
288
+ pointer-events: none;
289
+ }
290
+
291
+
292
+ .zoomControls
293
+ {
294
+ display: flex;
295
+ background: #343448;
296
+ height: 40px;
297
+ width: 150px;
298
+ border-radius: 10px;
299
+ padding: 0 5px;
300
+ align-items: center;
301
+ justify-content: center;
302
+ gap: 20px;
303
+ }
304
+
305
+ .zoomControls i
306
+ {
307
+ color: #fff;
308
+ font-size: 2em;
309
+ cursor: pointer;
310
+ transition: 0.15s;
311
+ }
312
+ .zoomControls i:active
313
+ {
314
+ background: #444480;
315
+ border-radius: 8px;
316
+ transition: 0.15s;
317
+ }
318
+ .zoomControls span
319
+ {
320
+ color: #fff;
321
+ cursor: pointer;
322
+ font-family: "lixFont";
323
+ font-weight: 300;
324
+ user-select: none;
325
+ }
326
+
327
+
328
+ .headerSection
329
+ {
330
+ position: absolute;
331
+ top: 0;
332
+ left: 0;
333
+ width: 100%;
334
+ height: 48px;
335
+ display: flex;
336
+ background: #1a1a20;
337
+ border-bottom: 1px solid #2c2c35;
338
+ flex-direction: row;
339
+ align-items: center;
340
+ justify-content: space-between;
341
+ padding: 0 16px;
342
+ box-sizing: border-box;
343
+ z-index: 1001;
344
+ }
345
+
346
+ .appMenu
347
+ {
348
+ display: flex;
349
+ flex-direction: row;
350
+ align-items: center;
351
+ gap: 12px;
352
+ height: 100%;
353
+ }
354
+
355
+ .hamburgerBtn
356
+ {
357
+ display: flex;
358
+ align-items: center;
359
+ justify-content: center;
360
+ width: 34px;
361
+ height: 34px;
362
+ background: #232329;
363
+ border: 1px solid #333;
364
+ border-radius: 8px;
365
+ cursor: pointer;
366
+ transition: 0.2s;
367
+ }
368
+ .hamburgerBtn:hover
369
+ {
370
+ background: #343448;
371
+ border-color: #444480;
372
+ }
373
+ .hamburgerBtn i
374
+ {
375
+ font-size: 20px;
376
+ color: #999;
377
+ transition: 0.2s;
378
+ }
379
+ .hamburgerBtn:hover i
380
+ {
381
+ color: #fff;
382
+ }
383
+
384
+ .logo
385
+ {
386
+ height: 26px;
387
+ width: 26px;
388
+ background: none no-repeat center center;
389
+ background-size: contain;
390
+ }
391
+
392
+ .headerDivider
393
+ {
394
+ width: 1px;
395
+ height: 24px;
396
+ background: #3a3a45;
397
+ }
398
+
399
+ .workspaceName input
400
+ {
401
+ height: 28px;
402
+ width: 180px;
403
+ background: transparent;
404
+ border: 1px solid transparent;
405
+ border-radius: 6px;
406
+ outline: none;
407
+ color: #ddd;
408
+ font-size: 0.95em;
409
+ font-family: "lixFont", serif;
410
+ font-weight: 400;
411
+ padding: 0 8px;
412
+ transition: 0.2s;
413
+ }
414
+ .workspaceName input:hover
415
+ {
416
+ border-color: #3a3a50;
417
+ background: #232329;
418
+ }
419
+ .workspaceName input:focus
420
+ {
421
+ border-color: #5B57D1;
422
+ background: #232329;
423
+ color: #fff;
424
+ }
425
+
426
+ .outsource
427
+ {
428
+ display: flex;
429
+ flex-direction: row;
430
+ gap: 8px;
431
+ align-items: center;
432
+ height: 100%;
433
+ }
434
+
435
+ .outsource i
436
+ {
437
+ font-size: 1.4em;
438
+ color: #888;
439
+ cursor: pointer;
440
+ transition: 0.2s;
441
+ padding: 4px;
442
+ border-radius: 6px;
443
+ }
444
+ .outsource i:hover
445
+ {
446
+ color: #fff;
447
+ background: #343448;
448
+ }
449
+
450
+ .outsourceBtns {
451
+ padding: 5px 16px;
452
+ border: 1px solid #333;
453
+ background-color: #232329;
454
+ color: #ccc;
455
+ font-size: 0.85rem;
456
+ font-family: "lixFont";
457
+ cursor: pointer;
458
+ border-radius: 8px;
459
+ transition: all 0.25s ease;
460
+ outline: none;
461
+ position: relative;
462
+ overflow: hidden;
463
+ font-weight: 500;
464
+ }
465
+
466
+ .outsourceBtns.shareBtn:first-child {
467
+ background-color: #5B57D1;
468
+ border-color: #4a46b8;
469
+ color: #ffffff;
470
+ font-weight: 600;
471
+ }
472
+
473
+ .outsourceBtns.shareBtn:first-child:hover {
474
+ background-color: #6c67f3;
475
+ border-color: #5B57D1;
476
+ }
477
+
478
+ .outsourceBtns.shareBtn:last-of-type {
479
+ background-color: #2a2a38;
480
+ border-color: #3a3a50;
481
+ color: #bbb;
482
+ }
483
+
484
+ .outsourceBtns.shareBtn:last-of-type:hover {
485
+ background-color: #343448;
486
+ border-color: #5555a0;
487
+ color: #fff;
488
+ }
489
+
490
+ .outsourceBtns::after {
491
+ content: "";
492
+ position: absolute;
493
+ top: 0;
494
+ left: 0;
495
+ width: 100%;
496
+ height: 100%;
497
+ background: radial-gradient(
498
+ circle,
499
+ rgba(255, 255, 255, 0.15) 0%,
500
+ rgba(255, 255, 255, 0) 70%
501
+ );
502
+ transform: scale(0);
503
+ transition: transform 0.5s ease;
504
+ }
505
+
506
+ .outsourceBtns:hover::after {
507
+ transform: scale(4);
508
+ }
509
+
510
+ .outsourceBtns:hover {
511
+ border-color: #555;
512
+ }
513
+
514
+ #menuIcon
515
+ {
516
+ display: flex;
517
+ }
518
+
519
+ /* --- Keyboard Shortcuts Modal --- */
520
+ .shortcuts-modal {
521
+ position: fixed;
522
+ top: 0;
523
+ left: 0;
524
+ width: 100%;
525
+ height: 100%;
526
+ z-index: 9999;
527
+ display: flex;
528
+ align-items: center;
529
+ justify-content: center;
530
+ transition: opacity 0.2s ease, visibility 0.2s ease;
531
+ visibility: visible;
532
+ }
533
+ .shortcuts-modal.hidden {
534
+ opacity: 0;
535
+ pointer-events: none;
536
+ visibility: hidden;
537
+ }
538
+ .shortcuts-overlay {
539
+ position: absolute;
540
+ top: 0;
541
+ left: 0;
542
+ width: 100%;
543
+ height: 100%;
544
+ background: rgba(0, 0, 0, 0.55);
545
+ }
546
+ .shortcuts-content {
547
+ position: relative;
548
+ background: #1e1e28;
549
+ border: 1px solid #3a3a50;
550
+ border-radius: 14px;
551
+ width: 620px;
552
+ max-width: 90vw;
553
+ max-height: 80vh;
554
+ overflow-y: auto;
555
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
556
+ }
557
+ .shortcuts-content::-webkit-scrollbar {
558
+ width: 6px;
559
+ }
560
+ .shortcuts-content::-webkit-scrollbar-thumb {
561
+ background: #444;
562
+ border-radius: 3px;
563
+ }
564
+ .shortcuts-header {
565
+ display: flex;
566
+ align-items: center;
567
+ justify-content: space-between;
568
+ padding: 16px 20px;
569
+ border-bottom: 1px solid #2c2c3a;
570
+ }
571
+ .shortcuts-header h2 {
572
+ margin: 0;
573
+ font-family: "lixFont", sans-serif;
574
+ font-size: 1.1em;
575
+ font-weight: 500;
576
+ color: #ddd;
577
+ }
578
+ .shortcuts-close {
579
+ font-size: 22px;
580
+ color: #888;
581
+ cursor: pointer;
582
+ padding: 4px;
583
+ border-radius: 6px;
584
+ transition: 0.2s;
585
+ }
586
+ .shortcuts-close:hover {
587
+ color: #fff;
588
+ background: #343448;
589
+ }
590
+ .shortcuts-body {
591
+ display: flex;
592
+ gap: 24px;
593
+ padding: 16px 20px 20px;
594
+ }
595
+ .shortcuts-column {
596
+ flex: 1;
597
+ }
598
+ .shortcuts-column h3 {
599
+ font-family: "lixFont", sans-serif;
600
+ font-size: 0.85em;
601
+ font-weight: 600;
602
+ color: #8a8aad;
603
+ text-transform: uppercase;
604
+ letter-spacing: 0.6px;
605
+ margin: 0 0 8px 0;
606
+ padding-bottom: 4px;
607
+ border-bottom: 1px solid #2c2c3a;
608
+ }
609
+ .shortcuts-column h3:not(:first-child) {
610
+ margin-top: 16px;
611
+ }
612
+ .shortcut-row {
613
+ display: flex;
614
+ align-items: center;
615
+ justify-content: space-between;
616
+ padding: 5px 0;
617
+ font-family: "lixFont", sans-serif;
618
+ font-size: 0.88em;
619
+ color: #bbb;
620
+ }
621
+ .shortcut-keys {
622
+ display: flex;
623
+ align-items: center;
624
+ gap: 3px;
625
+ color: #999;
626
+ font-size: 0.85em;
627
+ }
628
+ .shortcut-keys kbd {
629
+ display: inline-block;
630
+ background: #2a2a38;
631
+ border: 1px solid #3a3a50;
632
+ border-radius: 4px;
633
+ padding: 1px 6px;
634
+ font-family: "lixFont", sans-serif;
635
+ font-size: 0.9em;
636
+ color: #ccc;
637
+ min-width: 18px;
638
+ text-align: center;
639
+ }
640
+
641
+ /* --- Save As Modal --- */
642
+ .save-modal {
643
+ position: fixed;
644
+ top: 0;
645
+ left: 0;
646
+ width: 100%;
647
+ height: 100%;
648
+ z-index: 9999;
649
+ display: flex;
650
+ align-items: center;
651
+ justify-content: center;
652
+ transition: opacity 0.2s ease, visibility 0.2s ease;
653
+ visibility: visible;
654
+ }
655
+ .save-modal.hidden {
656
+ opacity: 0;
657
+ pointer-events: none;
658
+ visibility: hidden;
659
+ }
660
+ .save-modal-overlay {
661
+ position: absolute;
662
+ top: 0;
663
+ left: 0;
664
+ width: 100%;
665
+ height: 100%;
666
+ background: rgba(0, 0, 0, 0.55);
667
+ }
668
+ .save-modal-content {
669
+ position: relative;
670
+ background: #1e1e28;
671
+ border: 1px solid #3a3a50;
672
+ border-radius: 14px;
673
+ width: 380px;
674
+ max-width: 90vw;
675
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
676
+ }
677
+ .save-modal-header {
678
+ display: flex;
679
+ align-items: center;
680
+ justify-content: space-between;
681
+ padding: 14px 18px;
682
+ border-bottom: 1px solid #2c2c3a;
683
+ }
684
+ .save-modal-header h2 {
685
+ margin: 0;
686
+ font-family: "lixFont", sans-serif;
687
+ font-size: 1.05em;
688
+ font-weight: 500;
689
+ color: #ddd;
690
+ }
691
+ .save-modal-close {
692
+ font-size: 22px;
693
+ color: #888;
694
+ cursor: pointer;
695
+ padding: 4px;
696
+ border-radius: 6px;
697
+ transition: 0.2s;
698
+ }
699
+ .save-modal-close:hover {
700
+ color: #fff;
701
+ background: #343448;
702
+ }
703
+ .save-modal-body {
704
+ padding: 10px 14px 14px;
705
+ display: flex;
706
+ flex-direction: column;
707
+ gap: 6px;
708
+ }
709
+ .save-option {
710
+ display: flex;
711
+ align-items: center;
712
+ gap: 12px;
713
+ padding: 10px 12px;
714
+ border-radius: 10px;
715
+ cursor: pointer;
716
+ transition: 0.2s;
717
+ border: 1px solid transparent;
718
+ }
719
+ .save-option:hover {
720
+ background: #2a2a3a;
721
+ border-color: #444480;
722
+ }
723
+ .save-option.disabled {
724
+ opacity: 0.45;
725
+ cursor: default;
726
+ pointer-events: none;
727
+ position: relative;
728
+ }
729
+ .save-option-icon {
730
+ display: flex;
731
+ align-items: center;
732
+ justify-content: center;
733
+ width: 36px;
734
+ height: 36px;
735
+ border-radius: 8px;
736
+ background: #2a2a38;
737
+ flex-shrink: 0;
738
+ }
739
+ .save-option-icon i {
740
+ font-size: 18px;
741
+ color: #c873e4;
742
+ }
743
+ .save-option-info {
744
+ flex: 1;
745
+ }
746
+ .save-option-title {
747
+ margin: 0;
748
+ font-family: "lixFont", sans-serif;
749
+ font-size: 0.92em;
750
+ font-weight: 500;
751
+ color: #ddd;
752
+ }
753
+ .save-option-desc {
754
+ margin: 2px 0 0;
755
+ font-family: "lixFont", sans-serif;
756
+ font-size: 0.78em;
757
+ color: #777;
758
+ }
759
+ .coming-soon-badge {
760
+ font-family: "lixFont", sans-serif;
761
+ font-size: 0.7em;
762
+ color: #c873e4;
763
+ background: #2a2038;
764
+ border: 1px solid #c873e444;
765
+ border-radius: 6px;
766
+ padding: 2px 8px;
767
+ white-space: nowrap;
768
+ pointer-events: none;
769
+ }