client side sketch updating properly with direct changes to the editor (#2283)

* client side sketch updating properly with direct changes to the editor

* try tweak
This commit is contained in:
Kurt Hutten
2024-05-02 20:53:57 +10:00
committed by GitHub
parent 2c1f53f0f0
commit cf830f9895
3 changed files with 45 additions and 4 deletions

View File

@ -150,12 +150,15 @@ export type ModelingMachineEvent =
data: SketchDetails
}
| { type: 'Set mouse state'; data: MouseState }
| {
type: 'Rejig sketch'
}
export type MoveDesc = { line: number; snippet: string }
export const modelingMachine = createMachine(
{
/** @xstate-layout N4IgpgJg5mDOIC5QFkD2EwBsCWA7KAxAMICGuAxlgNoAMAuoqAA6qzYAu2qujIAHogC0AdgCsAZgB04gEyjhADnEA2GgoUAWJQBoQAT0QBGGuICckmoZkbTM42YWKAvk91oMOfAQDKYdgAJYLDByTm5aBiQQFjYwniiBBEFTU2VJYWFxDUNDbPFxCQ1dAwQZO0lDW3EcuQzlBRoNFzd0LDxCXwCAW1QAVyDA9hJ2MAjeGI4ueNBE5JTJVUNNBUNlLQ05YsQsjQWNLVE5Yw0aZXFmkHc2-ElsCEwwAgBRXBGAJ0CAaz9yAAsxqITOK8WYyZTCCpg1JaKw5cFFfSIGSmXYaLKyPI0UwKZSmC5XTxQW73R4vd5fH7-QyRZisSbcEFCaw0STZRaiNTiNQ0YRbBAnGSSWzCZSiKz1QziFbKfGtQnEh7PPjsN69DAA2mxKaMpKieSSZE0US40QaUQrPk5DkGnEKFIcmz7QyyjztBWkvgsN7sDXROnAhJM9Q25llXIo818jKGBZiLKihoyYRml3XIneb7sP7EMiUTAZym+oHawMIHI4io8-YNBpmWSWpYx8srSWWBTm1PygtZ36Sbt-ACSJIIyBI30CYCgXTAr38ADcwN7sOQSJgi-6SzMjMimwoZJoRZoaEnLXlpDQL3IJEmlE1XJc5W7+73n0PFaPx0EpzOAr9UG9sAAL24IY13ocYNwZUsrGTBY1FUMUYPBGRLWqGNTXkSwzmMPUZE7J9Mz+PtCN+N9HiIbhYBVEg8H8P8AOA15V38CBsCo3NRnAwFIOmfht1NCwNi5bEslMJYFD5GQzDSI09QvM0xMlfCbmfYjKTI4hKOo2iFyXFdMBYtihgoTiaT9LUoK3MswQUIVDnbVZsjUDZJKTKRDmyA8MjBU1lPTEi1J7DSKNwKi3ho3B-AAQQAIW8fwAA11ws3jEisdtWXEMRw2qZEpMk0wBMK8EGmPURTEyc57wJAjKUCwdhxCsKIuiuL-AATWS+lUu3DLrDsZQjmNY0UMRBAuWDYQrzFVRHH2Pz6pfEjgq08LaLIKAHi6gMrMlNFpCUPd20UQxhFMSSOQhORjoyY0zoqhbVNfRrVpah58HYf4uM1bqdUlLLpFFVQxNkapREk5QlnSXFsjO6sVGER6AuexUmu0yKmEXTHcFY8hekwEgPlY9iTO2zc+Os-dWRSXKTiWVRlEklZdmESo7W8-YNDEJG6pR8jXto+igJA1dMD0fxV2wKBcDJyyKfFQV22WQpTVOcRLRmg1Cq8pNjXyHme0WlbQvR+dF04fSxYlnBpdlnrrLOzL9zOmazDFS1BtESRzQq7F6mRRwqpaV0VOR5aXpNtbItgXASCYfx2FQRK7b+6opDBKU1AqvczEkxpBTKY1lGLo1HDKA2iL5zTI5amO44TpPOu+8zfugtOLBFaoMiy45JNyCFTTL8rTo0NYg4fEP-N58PUYFyKwAAR16Zj3qgT6U+g5F3P7s7hCNOQsstTIWTREwLyNIG8Wqx9Q+n9SI+a2imEJ0XqGb4s5bS2QIWPDPDHKrII9LSmABiYaokMUg8jUKICuS176zxrrRN4YAegLn8OQOe7BYAb12tYWykNrAjU0P-HQY0ljVAsKsWwjR8jwTwtfSei0jbDgAEpgEEGAPgIRegjBwfLAoUhJSLGmmIRmY1UhpHKt3c0VgxKNFgcwxUTwl7YHjgAGTwGABuqAwJmQ-vbJYqRvb5DWPaLI6g+RKC9pdfqchR6IQUVXZRvRVEJw2j+bAzFCbkAbnwxIdg5CsixEaQq+RR7qzIVnA0eoVCnD9kaceNVb6GycSo+OyDQgbQeNo3REEUo6jKGIA0xhNDIn2ByCJJQrCWFZAHRMW9MgKKigAdxor+f8wsmIGWJsZSg-g8AADNUAEAgNwMAtxcBzlQN8SQMB2CCCFoxUCghBmoD8UiLkqJR4nAqmYCqmRJLZHMO2fcUkqFyHBE01pHA6IdKWcxHpHF+m4CGQQRcbx-ySCYATdgQy3hdFmX4BZdyRaYBWS8tZ78eIFK5F7HITo9r2QqpJKUgpGinAvAUJMkMrltLNnpB5RknmrJGWMiZUyZlzMELpC2q5wVDPWaUXKFQsorBMOCSoJ4xplCUJIRwhxDj-VOvQ4OaYmEtLxTS5chKSZ9JJe8z53zhh-IBVSqV+l6WQr0dC0sZzFZGjEGJMQmhXIbAqEDY8UojpKFxTc2K8UErPNeaM3A4y8AUvGVSkgAAjWAgg+CasZWctIIoZCXgPpGblqRBS5EaI5WQg1GkMLFapCVdq2qOvlW8D5bwvk-JVYC+ZPq-UBtWUGrumUrUFFMEaLQBVVjSHNKKaojRkxX1FV2AKaaAj2o6k64ZLq3WTOmZ6oFxbBB6EDVC-JurwGNvkHqWwIDkzgzGlycE1M7QcnNLCu8HbaqG27a1eK7V+1vOzYq-N-5VVjt9ROqd2qZ1WTOT-bFWUwRnDZHycBuw4nF0LpKKatqAhZK0SSwd5KR2FsEKBh9eTW7PorVyHIWLyqFUMBdY0QpYWWH-k2jIwGJb4GyVmnNeblXXug7Bst06EMUzObZPe2R9zVLtKdC6p0KiSkwnIfelzk2drqke1en0z0QfdVBqlInfhwe4k++jYMnZmFhhsY8vJuX1C9mrLuKhTpWEI9Js9Crc1Kt+ZRqTM414yZo4+uj-i53GBMDI+oXNRolDBGa-9WgURiFujKATB6iJHsxm8bGuN8aE0MrKsDELSWusg5SoFIWwvLgi28QQjyTKyZ+jtejYJBTawxINGymxuV7i9j3Ueop7QH0I8lmc4WCZEyJSZIzF6TNXv+dB+rONUtNYyy1yg2WW65f8fluyShrDFf9qu9zGQISVeLmhgViSb5T0Nho11OTnhpLcfgDxXi3g+MTkGs6aRsT9xocukBfJs5BOqFoUUU1IYKAUZtrRicdE7ZcekkIxlNofdQDooNutilYiyKzS19YyH-xDVNRzigHJyDe5onJkgBy4A4AQEHKg+VSjFA0FEchzpjQlAaKUICa1ZTOlJFHW3PuYHR5j9g2PqTwdG0iJMgoOQsbWNU3EUZHbhIkLYY0NajR08BzoyQAA5JOAAFVAeAsEECihACAgxCYBBYMroNxddg1uGkThoaw+TF3MGiX2e9EdSkl2juX-hFfK9gDmEyuS5N2aMJocwJgpJ7ixAcCxY094xhsBA-I6UzgKIx1jxlxgG0HD3rEw4AfLRSSkKPUNDNjx8+j8z1ntmOdliNDGO0wTwlhssAiKpO50jtnjOKGwKgFEABV3GvE8QZbxDdvuuPezkvX+xMo8nbIVU4bnEAojh2UAoe9TiZ4Ub0HGSd2LemfAAeVwHFodHrJBRW8C3wQS-RmCFX+wDfMtaNF-+rZQ4mRFL7AKGoPk5oWSpEqM5TISgsoKLYZk4jUujO3a7Q-gHSUAeAqu6u-gGS-22SYBeAfCVS2QXs6gjY+4LaWI6m-ijgkimyYuFUhisC-guAScAyJAlAPgwQoQLEYAZB+M2uBMrqjKggdgu4KI1Oj2bas2iAg0aQKwUkaI90IoNgC0ZA2AXQwwIBic-gSqrq2+CW4yYhEhIwggicggZBlAjKeou4I+6Kv8PIZuVMuUtC+4FUWgr2AWNwShkh+ADc-gnCRkIBsAJE8hEmMy1hKhahzhhYV+5MiQnsFg+WZ0Kwpo7636UMxcX+qQ6gPmFh94JBGA8AUQSSUA7OfhQgDQMYsg8gSgs0ywlSRgZqo8lQooO6-8Z2C0dwDwaRn8Qgawt+4Iuymg5oXMliKwxiag-8xhlg7aE8KaJENR9s0RrIx07K+8qe3KyIQo4e2IdQxcp0jiM8YAgxf0Jw6cZhNOzRwRDYKIFQzG66+QSeq2jCqa1y7SDEoKUWvSMWQyKx0EtorIOyigrMSYe8E+TKtg0gZoXIpwuISYzolh62QWZx+KtK3Sg2NxqAdxu06gMaqglgAig0Ykrk1ox4nkuQS2YohGvamaEK0J8sdoUgnIsiKgdgF4JO7mICoed0OIWEpcIqfRgmh6IJvap6qy+JaUdo3O+4aISw+c36pwXshceohqsJvRKR4qIJoG-aHJXuhUCwPxaIDghwN23KHItkOc7YxoPIg0BQBmlmom7JHu1+Ze92w0KwICxcYi7mZwIaYksxjRZoUegJkpeKPWjWkWmWcqeJxp6RZY7YdpoozkjQqQ+QkkJ06QbMw8IpqQduDOsppQ9gHc+Q7YNg6g9QL+7RlOx8SwHImmcZQOjOMe7ACZdgYoyZ+OaZtoZunxqwn64SNao84pa2TC-eDOkgJB-yq4pZNgEIXMmQhotYZQUYNSYelQEe+4ZwDJEpqkbZhZsuCuSurwSROWfphC6cSguQbKoMZwUYg0NoOQkoSwwhKweeHACZOE5gawpozIUoZguQDY7RzYKGbYHYLpqkbe+2Heh2x2UJvptRpQ5oP8qKGwo8YIGJlogpewFU5UjgPIKQ05LZqkx+K+Qwa+JEm+F59Q5gEgg8esO6yIL+o8rIEChCNJxov+f20p8Z-59sB8aQ15K6cYfJ1pvUWRKwjgqQU0vxlF-+AOaOwBthQQGCOM6C-4rqbwpZLRew8gZozFJuGsNamUaw2UR5SgzZJxAUf+sBgBe+ZxIB8BvE+iBSkMaQeQUIvZhip4-8fKHF6UGBD075JExBpB5ByxtFOoLB+QCw5oYa-UawflfIXM6cI00adQdYohmOyhUhScsh7lq5AFqwUgFUuIIZ8g-OhhMkVqIog8E0iMLpHhMV9hfAjhQlAxHl0EFU6QRcPGuQ1QtgTMLIJcZezIOI+4LgLgQAA */
/** @xstate-layout N4IgpgJg5mDOIC5QFkD2EwBsCWA7KAxAMICGuAxlgNoAMAuoqAA6qzYAu2qujIAHogC0AdgCsAZgB04gEyjhADnEA2GgoUAWJQBoQAT0QBGGuICckmoZkbTM42YWKAvk91oMOfAQDKYdgAJYLDByTm5aBiQQFjYwniiBBEFTU2VJYWFxDUNDbPFxCQ1dAwQZO0lDW3EcuQzlBRoNFzd0LDxCXwCAW1QAVyDA9hJ2MAjeGI4ueNBE5JTJVUNNBUNlLQ05YsQsjQWNLVE5Yw0aZXFmkHc2-ElsCEwwAgBRXBGAJ0CAaz9yAAsxqITOK8WYyZTCCpg1JaKw5cFFfSIGSmXYaLKyPI0UwKZSmC5XTxQW73R4vd5fH7-QyRZisSbcEFCaw0STZRaiNTiNQ0YRbBAnGSSWzCZSiKz1QziFbKfGtQnEh7PPjsN69DAA2mxKaMpKieSSZE0US40QaUQrPk5DkGnEKFIcmz7QyyjztBWkvgsN7sDXROnAhJM9Q25llXIo818jKGBZiLKihoyYRml3XIneb7sP7EMiUTAZym+oHawMIHI4io8-YNBpmWSWpYx8srSWWBTm1PygtZ36Sbt-ACSJIIyBI30CYCgXTAr38ADcwN7sOQSJgi-6SzMjMimwoZJoRZoaEnLXlpDQL3IJEmlE1XJc5W7+73n0PFaPx0EpzOAr9UG9sAAL24IY13ocYNwZUsrGTBY1FUMUYPBGRLWqGNTXkSwzmMPUZE7J9Mz+PtCN+N9HiIbhYBVEg8H8P8AOA15V38CBsCo3NRnAwFIOmfht1NCwNi5bEslMJYFD5GQzDSI09QvM0xMlfCbmfYjKTI4hKOo2iFyXFdMBYtihgoTiaT9LUoK3MswQUIVDnbVZsjUDZJKTKRDmyA8MjBU1lPTEi1J7DSKNwKi3ho3B-AAQQAIW8fwAA11ws3jEisdtWXEMRw2qZEpMk0wBMK8EGmPURTEyc57wJAjKUCwdhxCsKIuiuL-AATWS+lUu3DLrDsZQjmNY0UMRBAuWDYQrzFVRHH2Pz6pfEjgq08LaLIKAHi6gMrMlNFpCUPd20UQxhFMSSOQhORjoyY0zoqhbVNfRrVpah58HYf4uM1bqdUlLLpFFVQxNkapREk5QlnSXFsjO6sVGER6AuexUmu0yKmEXTHcFY8hekwEgPlY9iTO2zc+Os-dWRSXKTiWVRlEklZdmESo7W8-YNDEJG6pR8jXto+igJA1dMD0fxV2wKBcDJyyKfFQV22WQpTVOcRLRmg1Cq8pNjXyHme0WlbQvR+dF04fSxYlnBpdlnrrLOzL9zOmazDFS1BtESRzQq7F6mRRwqpaV0VOR5aXpNtbItgXASCYfx2FQRK7b+6opDBKU1AqvczEkxpBTKY1lGLo1HDKA2iL5zTI5amO44TpPOu+8zfugtOLBFaoMiy45JNyCFTTL8rTo0NYg4fEP-N58PUYFyKwAAR16Zj3qgT6U+g5F3P7s7hCNOQsstTIWTREwLyNIG8Wqx9Q+n9SI+a2imEJ0XqGb4s5bS2QIWPDPDHKrII9LSmABiYaokMUg8jUKICuS176zxrrRN4YAegLn8OQOe7BYAb12tYWykNrAjU0P-HQY0ljVAsKsWwjR8jwTwtfSei0jbDgAEpgEEGAPgIRegjBwfLAoUhJSLGmmIRmY1UhpHKt3c0VgxKNFgcwxUTwl7YHjgAGTwGABuqAwJmQ-vbJYqRvb5DWPaLI6g+RKC9pdfqchR6IQUVXZRvRVEJw2j+bAzFCbkAbnwxIdg5CsixEaQq+RR7qzIVnA0eoVCnD9kaceNVb6GycSo+OyDQgbQeNo3REEUo6jKGIA0xhNDIn2ByCJJQrCWFZAHRMW9MiOJno8NhAArKWFIex+KMDYCEtg8F4IaCkCSY1NDmD3CkG8YkxRcwUVFAA7jRX8-5hZMQMsTYylB-B4AAGaoAIBAbgYBbi4DnKgb4kgYDsEEELRioFBC7NQN00oXJUSjxOBVMwFVMiSWyOM+yUkqFyHBHMxZHA6IrLucxDZHFtm4D2QQRcbx-ySCYATdgey3hdEuX4G5kKRaYAefCp578eIFK5F7HITo9r2QqpJKUgpGinAvAUJMkNQVLLNnpaFRlYWPIOUck5ZyLlXMELpC2q4iV7OeYCwUkoTomHBJUE8Y0yhKEkI4Q4hx-qnXocHNMTCFmcvFcuHlJMtn8qRSitFwxMXYtFSa-SUqSV6LJaWWVGqjRiDEmITQrkNgVCBseKUR0lAcvBbFeKCU4UIsObgY5eBhXHNFSQAARrAQQfBnUyvAdDGQl4D6RlVakOVJw2RojBG5cNARI2JRjfsq1bxUXortTi65aaM1ZseTm06mUQ0FFMEaLQBVVjSHNKKaojRkxX31V2AKRqI1tXavWgV8ahXnOTbijtgg9DZtJfk91uaCjyD1LYEByZwZjS5OCamdoOTmgpXeWdtVDYLprUuldjbm22v-Pard6ad17tdQeqygKf5sqymCM4bI+TgN2HE4uhd5V6onga1Sb6Jb4GyfyuNCbTkbrbYILJ7Du37tbqBru54cisvKoVQwF1jRCgpZYf+46MjVsw5tLRlq3jIqbTajFv7CPEaA3k8jFNAW2T3tkfc1S7SnQur26jmE5D7xBQwtD86wUBFXp9FduH10itxbp34onuIgYk2DJ2ZhYYbGPLyVV9QvZqy7ioU6VgOMmc-bx61LahOipM2Zn6O1LOjuMCYGR9QuajRKGCANiGtAojELdGUGm511Qw5jN42Ncb40JoZc13HiWrrw0mwjWWcvLjy28QQMKTJBZbiF-xla7JKGsINGymxVV7i9j3Ueop7QHw4xVmcuWCZE15SZbzfHv2CaxeVrGo2qvjdq5NygDX9EFJa9rDEHX-aXtixkCEfXi60a1Ykm+U9DYaPjTk54aS3H4A8V4t4PjE4yrOmkbE-caHnpAXybOQTqhaFFFNSGCgFE3a0YnHR92XHpJCMZLjOSZW62KViLIrNg31jIf-NI3lwuKAcnISHmicmSAHLgDgBBUcqA1VKMUQyNjlT5BKA0UoQGDqymdKSpPbsw8wBTqn7AafUjE01pESZBQclk2sapuIoyO3CRIWwxpB1Gj59D1AOjJAADkk4AAVUB4CwQQKKEAICDEJgEFgJuZXF12IO4aKJ9ynARCUYu5g0S+z3kTqUmvyf6-8Ebk3sAcwmVyeZ8TaUxkWFBnuLEBwLFjT3jGGwED8jpTOAoyn1PnnGFHQcPesTDiJ8tFJKQo8RRgmZXF50aWX1EVzyLqgYuo8S7LEaGMdpgnhPzZYd324xLpHbPGcUNgVAKIACruNeJ4gy3iG5w9cVDlHZGO9xdRFyRQ5UOSDQB6PdIU0pKYTd+p59ySiK9Bxkndi3pnwAHlcAlcM8cqK3gp+CGv4cwQd-2CP5lnX3Ji-ilG9jckUn2AKDUD5HNBZFSEqGckyCUCygUTYUySwy1x1zfXaH8BWSgDwDNwt38AySR2yTwLwD4SqWyC9nUEbH3EnSxAc38UcEkVeTVwqkMVgX8FwCTh2RIEoB8GCFCBYjAD4PxhtwJnjWeUEDsF3BRG5xB2nQO0QEGjSBWCkjRHuhFBsAWjIGwC6GGBwMTn8BtXjRf0TQIz0IMJGEEETkED4MoGeT1F3B5AaBOF-h5FZyplyloX3Aqi0AhwbxuCsMMPwAbn8E4SMhwNgBInMPwwuRCJsLsJiMLCAM-hUMCWPEGjOhWFNEg1gyhmLiQNSHUCS0CIvyuyIjQNIMwMwAIDaQ6RSK6TSPtiTCKUbBLR5D3lISqT3jgJUBVyxwyAeiCMqN7FXwF3qLAHaSgE6T+BlQ8kylcN31OBi0QDEnMBOitFhEGjMBcHvB4IwHgCiCSSgHF2AKEAaBjFkHkCUFmmWEqR6UFFHn73kAqmcjBAWjuAeHOPSKSDWFsjuk+U0HNC5ksRWGMTUH-h8MsBnVQ3Sx7F+PthKNZGOkVX3jL1VWRCFAgUhkhj1HeSfXhMbzgSChJCRL+hOHTn8J5xBJyIbBRAqBk2vXyGLwu0YXQ20whQYgJQK02SKz2QpOgltFZA+UUFZjaOPHpVsGkDNC5FOFxCTHrwqMNS5MdTNX5PrSFN2nUDlVUEsAEUGjElcmtGPE8lyFOzFA41rWjUeW1PljtCkE5FkRUDsAvHOmLQoTNBKkWAQj3GtI-TtPbwuLLDtGl33DRCWHzlg1OC9kLj1G9V1LhNONVM5WIy1ODL+MMS9jOHknyGxEOH+1VQ5FshznbGNB5F2JgVGNTPBS8yDOCxDMMRPgiwTEqBUGLghjpzOjZhFDhj1mG0WxxmW3yzqwtWJXtJj0Y0+xLLLVSHyEkhOnSDZmHgTNSADwF0nKRHsA7nyHbBsHUHqBgIhM52IRryyg7BrNUgmO10F2by3NKH-hjB5D3NNGxFtFZxlNWGg3CUHVHmTMuyYRvJ1x4KxVXAfOsAqlZG7kNFrDKCjBqXT3bNyhxFkA3NvL10N2N1eGOMbL+MIXTiUFyBWBMCkjOCjEGhtByElCWG0JWBz2FwfJwnMDWFNGZClDMFyAbAhObGozbEvJVNUhnyeznxeze1QAgvNB-gZQ2BeMhlHktFjL2AqnKkcB5EmQUW-1vyGHvxIifyYvqHMAkEHj1gfWRBgMP1HmVTNDunbFS0EoCmqPTM3MzNaIkDSFYovTjCjLESqVkwOlOhxEUDkH8NQMR2cowuwLCKCAwRxnQX-HjTeEks0D2HkDNG8oaF8qMHKhPhUC5kQmqCUAAo5McvCowPJyitmPIN4k23dTxNZElChF6UMVPH-g1RWHUKIvdMRivJIm4N4P4LAAfJkPyAWHNHzX6jWAmr5C5nThGhLTqDrF0Kp2sKMKTlMKGtcr+jOCFBFD-MKglNOC8JkhDRFEHgmh6pVMSLWoiL4CiOipIiYqgtEVB2PFyGqFsCZhZBLh72ZBxH3H2KcCAA */
id: 'Modeling',
tsTypes: {} as import('./modelingMachine.typegen').Typegen0,
@ -334,6 +337,11 @@ export const modelingMachine = createMachine(
target: 'Rectangle tool',
cond: 'Sketch is empty',
},
'Rejig sketch': {
actions: 'Rejig sketch',
internal: true,
},
},
entry: 'setup client side sketch segments',
@ -436,6 +444,11 @@ export const modelingMachine = createMachine(
target: 'Rectangle tool',
cond: 'Sketch is empty',
},
'Rejig sketch': {
target: 'Line tool',
internal: true,
},
},
states: {
@ -497,6 +510,7 @@ export const modelingMachine = createMachine(
'Rectangle tool': {
entry: ['listen for rectangle origin'],
states: {
'Awaiting second corner': {},
@ -511,6 +525,13 @@ export const modelingMachine = createMachine(
},
initial: 'Awaiting origin',
on: {
'Rejig sketch': {
target: 'Rectangle tool',
internal: true,
},
},
},
},
@ -1034,6 +1055,19 @@ export const modelingMachine = createMachine(
},
}),
'set selection filter to defaults': () => kclManager.enterEditMode(),
'Rejig sketch': ({ sketchDetails }, c, d) => {
console.log('state', c, d)
// if(!state.matches('Sketch.SketchIdle')) return
if (!sketchDetails) return
sceneEntitiesManager.updateAstAndRejigSketch(
sketchDetails.sketchPathToNode,
kclManager.ast,
sketchDetails.zAxis,
sketchDetails.yAxis,
sketchDetails.origin,
false
)
},
},
// end actions
}