RGB/Hex color adjusting contraption I made for a small project. :3

%%WGT0{"w":[{"name":"Color Selector","type":"contraption","size":[162,79],"pos":[177,117],"def":"Color Selector","widgets":{"rs":{},"gs":{},"p":{},"bs":{},"rgb":{},"canvas1":{},"hex":{}}}],"d":{"Color Selector":{"name":"Color Selector","size":[162,79],"margin":[0,0,0,0],"description":"Adjust color patterns by using their rgb and hex values.","version":1,"script":"on get_s do p.pattern end\non set_s x do setz[x] end\non get_rgb do rgb.text end\non set_rgb x do \n patterns[p.pattern]:\"%h\" parse convertRgbz[x]\n setz[p.pattern]\nend\non get_hex do hex.text end\non set_hex x do \n patterns[p.pattern]:\"%h\" parse x\n setz[p.pattern]\nend\n\non setz x do\n previewz[x]\n h:hexz[x]\n hex.text:h\n v:rgbz[h]\n rgb.text:v\n v:\",\" split v\n rs.value:v[0]\n gs.value:v[1]\n bs.value:v[2]\nend\n\non sliderz x y do\n c:(\"r\",\"g\",\"b\") dict (rs.value,gs.value,bs.value)\n c[y]:x\n c:\",\" fuse c\n rgb.text:c\n hex.text:convertRgbz[c]\n patterns[p.pattern]:\"%h\" parse hex.text\nend\n\non previewz x do\n p.clear\n p.pattern:x\n p.fill[]\nend\n\non hexz x do\n r:patterns[x]\n r:\"%h\" format r\n r:\"\" split r\n if !r[2] r:\"00\",r end\n if !r[4] r:\"00\",r end\n r:\"\" fuse r\nend\n\non convertRgbz x do\n d:(10,11,12,13,14,15) dict (\"a\",\"b\",\"c\",\"d\",\"e\",\"f\")\n show[d]\n x:\",\" split x\n r:()\n each v i in x\n i1:floor v/16\n i2:((v/16)-i1)*16\n if i1>9 i1:d[i1] end\n if i2>9 i2:d[i2] end\n r:r,i1,i2\n end\n \"\" fuse r\nend\n\non rgbz x do\n d:\"abcdef\" dict 10,11,12,13,14,15\n r:()\n each v i in 2 window \"\" split x\n each v2 i2 in v\n if d[v2]\n v[i2]:d[v2]\n end\n v[i2]+0\n r[i]:(v[0]*16)+v[1]\n end\n end\n r:\",\" fuse r\nend","image":"%%IMG2AKIATwGjAKABAgCgAQIAoAECAKABAgCgAQIAoAECAKABAgCgAQIAoAECAKABAgCgAQIAoAECAKABAgCgAaQAoAECAKABAgCgAQIAoAECAKABAgCgAQIAAQEDAJwBAgABAQIAAQEBAJsBAgABAQIAAQEBAJsBAgABAQMAnAECAAEBAgABAQEAmwECAKABAgCgAQIAoAECAKABAgCgAQIAoAECAKABAgCgAQIAoAECAKABAgCgAQIAAQEEAJsBAgABAQIAnQECAAEBAgABAQEAmwECAAEBBACbAQIAAQEEAJsBAgCgAQIAoAECAKABAgCgAQIAoAECAKABAgCgAQIAoAECAKABAgCgAQIAAQEDAJwBAgABAQIAAQEBAJsBAgABAQMAnAECAAEBAgABAQEAmwECAAEBAwCcAQIAoAECAKABAgCgAQIAoAECAKABAgCgAQgAAQGhADgBBQBeAQEAAgEBAD0BAQBgAQIAAwEBADoBAQABAQEAXwEBAAIBAQCeAQYAOQEFAF4BAQABAQEAAQEBADsBAQBhAQEAAQEBAAEBAQA7AQIAYAEBAKEBBgA5AQUAXgEBAD4BAQABAQEAYAEDAAEBAgA6AQEAAQECAF4BAQChAagAOAEHAFwBAQ==","attributes":{"name":["s","rgb","hex"],"label":["selected","rgb","hex"],"type":["number","string","string"]},"widgets":{"rs":{"type":"slider","size":[106,14],"pos":[7,18],"volatile":1,"script":"on change val do\n sliderz[val \"r\"]\nend","font":"mono","interval":[0,255],"style":"bar"},"gs":{"type":"slider","size":[106,14],"pos":[7,33],"volatile":1,"script":"on change val do\n sliderz[val \"g\"]\nend","font":"mono","interval":[0,255],"style":"bar"},"p":{"type":"canvas","size":[44,44],"pos":[115,18],"locked":1,"volatile":1,"pattern":47,"scale":1},"bs":{"type":"slider","size":[106,14],"pos":[7,48],"volatile":1,"script":"on change val do\n sliderz[val \"b\"]\nend","font":"mono","interval":[0,255],"style":"bar"},"rgb":{"type":"field","size":[94,15],"pos":[68,64],"volatile":1,"script":"on change val do\n set_rgb[val]\nend","font":"mono","border":1,"style":"plain","align":"center"},"canvas1":{"type":"canvas","size":[160,14],"pos":[1,1],"locked":1,"script":"on sendz x do\n c:me[x]\n if c=0 c:32\n elseif c=1 c:47\n end\n setz[c]\nend\n\non click pos do\n sendz[pos]\nend\n\non drag pos do\n sendz[pos]\nend\n\non release pos do\n \nend","border":0,"image":"%%IMG2AKAADgEUIRQkFCUUKBQpFCwULRQBFCEUJBQlFCgUKRQsFC0UARQhFCQUJRQoFCkULBQtFAEUIRQkFCUUKBQpFCwULRQBFCEUJBQlFCgUKRQsFC0UARQhFCQUJRQoFCkULBQtFAEUIRQkFCUUKBQpFCwULRQAFCIUIxQmFCcUKhQrFC4UABQiFCMUJhQnFCoUKxQuFAAUIhQjFCYUJxQqFCsULhQAFCIUIxQmFCcUKhQrFC4UABQiFCMUJhQnFCoUKxQuFAAUIhQjFCYUJxQqFCsULhQAFCIUIxQmFCcUKhQrFC4U","scale":1},"hex":{"type":"field","size":[57,15],"pos":[6,64],"volatile":1,"script":"on change val do\n set_hex[val]\nend","font":"mono","border":1,"style":"plain","align":"center"}}}}}