extract-color.js (3196B)
1 "use strict";var h=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var N=(n,o)=>{for(var i in o)h(n,i,{get:o[i],enumerable:!0})},A=(n,o,i,l)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of F(o))!P.call(n,s)&&s!==i&&h(n,s,{get:()=>o[s],enumerable:!(l=b(o,s))||l.enumerable});return n};var E=n=>A(h({},"__esModule",{value:!0}),n);var j={};N(j,{default:()=>I});module.exports=E(j);var e=require("@raycast/api"),u=require("react");var y=require("@raycast/api"),w=require("path"),x=require("fs/promises"),S=require("child_process");async function D(n,...o){let i=(0,w.join)(y.environment.assetsPath,"compiled_raycast_swift/extract-color");return await(0,x.chmod)(i,"755"),new Promise((l,s)=>{let g=[n];for(let t of o)try{g.push(JSON.stringify(t,(r,a)=>a===void 0?null:a))}catch(r){s(new p("Failed to serialize input to JSON: "+r.message));return}let m=(0,S.spawn)(i,g),d=[],f=[];m.stdout?.on("data",t=>{d.push(t.toString())}),m.stderr?.on("data",t=>{f.push(t.toString())}),m.on("exit",t=>{if(t===0)try{let r=d.join("").trim();r.length!=0?l(JSON.parse(r)):l(null)}catch(r){let a=new p("Failed to deserialize result from JSON: "+r.message);a.stdout=d.join("").trim(),a.stderr=f.join("").trim(),s(a)}else{let r=new p(f.join("").trim()||d.join("").trim()||"Could not get any data");r.stdout=d.join("").trim(),r.stderr=f.join("").trim(),s(r)}}),m.on("error",t=>{s(t)})})}async function C(n,o,i){return await D("extractColor",n,o,i)}var p=class extends Error{constructor(o){super(o),this.name="SwiftError"}};var c=require("react/jsx-runtime");function I(){let[n,o]=(0,u.useState)(3),[i,l]=(0,u.useState)(!0),[s,g]=(0,u.useState)([]),[m,d]=(0,u.useState)({title:"No image found",description:"Select an image from finder to extract colors"});async function f(){let t=await(0,e.showToast)({style:e.Toast.Style.Animated,title:"Extracting colors"}),r;try{let a=await(0,e.getSelectedFinderItems)();a.length===0&&l(!1),r=a[0].path}catch{}r?C(r,40,!1).then(a=>{g(a),t.style=e.Toast.Style.Success,t.title="Colors extracted",t.message=`${a.length} colors extracted from the image`,l(!1)}).catch(()=>{l(!1),t.style=e.Toast.Style.Failure,t.title="Error extracting colors",t.message="Please select a valid image file"}):(l(!1),d({title:"No image selected",description:"Please select an image from finder"}),t.style=e.Toast.Style.Failure,t.title="No image selected",t.message="Please select an image from finder")}return(0,u.useEffect)(()=>{f()},[]),(0,c.jsxs)(e.Grid,{columns:n,inset:e.Grid.Inset.Zero,isLoading:i,searchBarAccessory:(0,c.jsxs)(e.Grid.Dropdown,{tooltip:"Grid Item Size",storeValue:!0,onChange:t=>{o(parseInt(t)),l(!1)},children:[(0,c.jsx)(e.Grid.Dropdown.Item,{title:"Large",value:"4"}),(0,c.jsx)(e.Grid.Dropdown.Item,{title:"Medium",value:"6"}),(0,c.jsx)(e.Grid.Dropdown.Item,{title:"Small",value:"8"})]}),children:[(0,c.jsx)(e.Grid.EmptyView,{icon:e.Icon.Eye,title:m.title,description:m.description}),!i&&s.map((t,r)=>(0,c.jsx)(e.Grid.Item,{content:{color:t.hex},title:`${t.hex.toUpperCase()}`,actions:(0,c.jsx)(e.ActionPanel,{children:(0,c.jsx)(e.Action.CopyToClipboard,{content:t.hex})})},t.hex+r))]})}