@nice2dev/ui-api 1.0.20 → 1.0.22
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/NiceAPIDesigner.d.ts +1 -1
- package/dist/NiceAPITester.d.ts +1 -1
- package/dist/NiceIntegrationBuilder.d.ts +1 -1
- package/dist/NiceWebhookTester.d.ts +61 -0
- package/dist/index.cjs +29 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +2858 -849
- package/dist/style.css +1 -1
- package/dist/types.d.ts +8 -4
- package/package.json +3 -1
|
@@ -4,5 +4,5 @@ import { NiceAPIDesignerProps } from './types';
|
|
|
4
4
|
/**
|
|
5
5
|
* NiceAPIDesigner - Visual OpenAPI Editor
|
|
6
6
|
*/
|
|
7
|
-
export declare function NiceAPIDesigner({ schema: initialSchema, onChange, onSave, readOnly, className, }: NiceAPIDesignerProps): React.ReactElement;
|
|
7
|
+
export declare function NiceAPIDesigner({ schema: initialSchema, onChange, onSave, readOnly, className, tutorial, }: NiceAPIDesignerProps): React.ReactElement;
|
|
8
8
|
export default NiceAPIDesigner;
|
package/dist/NiceAPITester.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ import { NiceAPITesterProps } from './types';
|
|
|
4
4
|
/**
|
|
5
5
|
* NiceAPITester - API Testing Studio
|
|
6
6
|
*/
|
|
7
|
-
export declare function NiceAPITester({ collections: initialCollections, environments: initialEnvironments, onRequest, onSaveCollection, className, }: NiceAPITesterProps): React.ReactElement;
|
|
7
|
+
export declare function NiceAPITester({ collections: initialCollections, environments: initialEnvironments, onRequest, onSaveCollection, className, tutorial, }: NiceAPITesterProps): React.ReactElement;
|
|
8
8
|
export default NiceAPITester;
|
|
@@ -4,5 +4,5 @@ import { NiceIntegrationBuilderProps } from './types';
|
|
|
4
4
|
/**
|
|
5
5
|
* NiceIntegrationBuilder - Visual Flow Builder
|
|
6
6
|
*/
|
|
7
|
-
export declare function NiceIntegrationBuilder({ flow: initialFlow, connectors, onChange, onSave, onRun, className, }: NiceIntegrationBuilderProps): React.ReactElement;
|
|
7
|
+
export declare function NiceIntegrationBuilder({ flow: initialFlow, connectors, onChange, onSave, onRun, className, tutorial, }: NiceIntegrationBuilderProps): React.ReactElement;
|
|
8
8
|
export default NiceIntegrationBuilder;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { NiceComponentTutorial } from '@nice2dev/ui-core';
|
|
2
|
+
import { default as React } from 'react';
|
|
3
|
+
|
|
4
|
+
/** A saved webhook payload preset. */
|
|
5
|
+
export interface NiceWebhookSample {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
payload: string;
|
|
9
|
+
headers?: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
/** HMAC request-signing configuration. */
|
|
12
|
+
export interface NiceWebhookSigning {
|
|
13
|
+
/** Header the signature is written to (e.g. `X-Signature`). */
|
|
14
|
+
header: string;
|
|
15
|
+
/** Shared secret. */
|
|
16
|
+
secret: string;
|
|
17
|
+
/** Algorithm. Only `hmac-sha256` is supported. */
|
|
18
|
+
algorithm?: 'hmac-sha256';
|
|
19
|
+
/** Prefix prepended to the hex digest (e.g. `sha256=`). */
|
|
20
|
+
prefix?: string;
|
|
21
|
+
}
|
|
22
|
+
/** The request handed to `onSend`. */
|
|
23
|
+
export interface NiceWebhookRequest {
|
|
24
|
+
url: string;
|
|
25
|
+
method: string;
|
|
26
|
+
headers: Record<string, string>;
|
|
27
|
+
body: string;
|
|
28
|
+
}
|
|
29
|
+
/** The response returned by `onSend`. */
|
|
30
|
+
export interface NiceWebhookResponse {
|
|
31
|
+
status: number;
|
|
32
|
+
body?: string;
|
|
33
|
+
headers?: Record<string, string>;
|
|
34
|
+
durationMs?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface NiceWebhookTesterProps {
|
|
37
|
+
/** Initial target URL. */
|
|
38
|
+
url?: string;
|
|
39
|
+
/** Initial HTTP method. Default `'POST'`. */
|
|
40
|
+
method?: 'POST' | 'PUT' | 'GET' | 'PATCH' | 'DELETE';
|
|
41
|
+
/** Initial headers. */
|
|
42
|
+
headers?: Record<string, string>;
|
|
43
|
+
/** Initial payload (raw body). */
|
|
44
|
+
payload?: string;
|
|
45
|
+
/** Saved payload presets. */
|
|
46
|
+
samples?: NiceWebhookSample[];
|
|
47
|
+
/** Sends/replays the request. The consumer performs the actual network call. */
|
|
48
|
+
onSend: (req: NiceWebhookRequest) => Promise<NiceWebhookResponse>;
|
|
49
|
+
/** When set, an HMAC signature header is computed from the body and added. */
|
|
50
|
+
signing?: NiceWebhookSigning;
|
|
51
|
+
/** When provided, a "Save as sample" button is shown. */
|
|
52
|
+
onSaveSample?: (sample: NiceWebhookSample) => void;
|
|
53
|
+
/** Optional guided tour. `true` = built-in; array/object = custom steps. Shows a "?" button. */
|
|
54
|
+
tutorial?: NiceComponentTutorial;
|
|
55
|
+
className?: string;
|
|
56
|
+
style?: React.CSSProperties;
|
|
57
|
+
id?: string;
|
|
58
|
+
'data-testid'?: string;
|
|
59
|
+
}
|
|
60
|
+
export declare const NiceWebhookTester: React.ForwardRefExoticComponent<NiceWebhookTesterProps & React.RefAttributes<HTMLDivElement>>;
|
|
61
|
+
export default NiceWebhookTester;
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,30 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react"),ie={openapi:"3.0.3",info:{title:"New API",version:"1.0.0",description:"API description"},paths:{},components:{schemas:{},securitySchemes:{}},tags:[]},W=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];function Q(s){var r,i;const t=[];return s.openapi||t.push({path:"openapi",message:"OpenAPI version is required",severity:"error"}),(r=s.info)!=null&&r.title||t.push({path:"info.title",message:"API title is required",severity:"error"}),(i=s.info)!=null&&i.version||t.push({path:"info.version",message:"API version is required",severity:"error"}),Object.entries(s.paths||{}).forEach(([n,o])=>{n.startsWith("/")||t.push({path:`paths.${n}`,message:"Path must start with /",severity:"error"}),W.forEach(l=>{const j=o[l.toLowerCase()];j&&!j.responses&&t.push({path:`paths.${n}.${l.toLowerCase()}.responses`,message:"Responses are required",severity:"error"})})}),t}function te({schema:s,onChange:t,onSave:r,readOnly:i=!1,className:n=""}){var D,I;const[o,l]=d.useState(s||ie),[j,u]=d.useState(null),[p,C]=d.useState(null),[h,x]=d.useState("info"),[w,y]=d.useState([]),N=d.useCallback(g=>{l(b=>{const f=g(b);return t==null||t(f),y(Q(f)),f})},[t]),T=d.useCallback(()=>{const g="/new-endpoint";N(b=>({...b,paths:{...b.paths,[g]:{get:{summary:"New endpoint",responses:{200:{description:"Success"}}}}}})),u(g),C("get")},[N]),P=d.useCallback(g=>{N(b=>{const{[g]:f,...O}=b.paths;return{...b,paths:O}}),u(null),C(null)},[N]),K=d.useCallback(()=>{const g="NewSchema";N(b=>{var f;return{...b,components:{...b.components,schemas:{...(f=b.components)==null?void 0:f.schemas,[g]:{type:"object",properties:{}}}}}})},[N]),A=d.useCallback(()=>{const g=Q(o);y(g),g.filter(b=>b.severity==="error").length===0&&(r==null||r(o))},[o,r]),$=Object.entries(o.paths).flatMap(([g,b])=>W.filter(f=>b[f.toLowerCase()]).map(f=>({path:g,method:f,operation:b[f.toLowerCase()]})));return e.jsxs("div",{className:`nice-api-designer ${n}`,children:[e.jsxs("div",{className:"nice-api-designer__toolbar",children:[e.jsx("div",{className:"nice-api-designer__tabs",children:["info","paths","schemas","security","preview"].map(g=>e.jsx("button",{className:`nice-api-designer__tab ${h===g?"nice-api-designer__tab--active":""}`,onClick:()=>x(g),children:g.charAt(0).toUpperCase()+g.slice(1)},g))}),!i&&e.jsx("button",{className:"nice-api-designer__save-btn",onClick:A,children:"Save"})]}),w.length>0&&e.jsx("div",{className:"nice-api-designer__errors",children:w.map((g,b)=>e.jsxs("div",{className:`nice-api-designer__error nice-api-designer__error--${g.severity}`,children:[e.jsxs("strong",{children:[g.path,":"]})," ",g.message]},b))}),e.jsxs("div",{className:"nice-api-designer__content",children:[h==="info"&&e.jsx(ne,{schema:o,onChange:N,readOnly:i}),h==="paths"&&e.jsx(ae,{endpoints:$,schema:o,selectedPath:j,selectedMethod:p,onSelectEndpoint:(g,b)=>{u(g),C(b)},onAdd:T,onDelete:P,onChange:N,readOnly:i}),h==="schemas"&&e.jsx(re,{schemas:((D=o.components)==null?void 0:D.schemas)||{},onAdd:K,onChange:g=>N(b=>({...b,components:{...b.components,schemas:g}})),readOnly:i}),h==="security"&&e.jsx(ce,{schemes:((I=o.components)==null?void 0:I.securitySchemes)||{},onChange:g=>N(b=>({...b,components:{...b.components,securitySchemes:g}})),readOnly:i}),h==="preview"&&e.jsx(le,{schema:o})]})]})}function ne({schema:s,onChange:t,readOnly:r}){return e.jsxs("div",{className:"nice-api-designer__info-editor",children:[e.jsx("h3",{children:"API Information"}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Title"}),e.jsx("input",{type:"text",value:s.info.title,onChange:i=>t(n=>({...n,info:{...n.info,title:i.target.value}})),disabled:r})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Version"}),e.jsx("input",{type:"text",value:s.info.version,onChange:i=>t(n=>({...n,info:{...n.info,version:i.target.value}})),disabled:r})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Description"}),e.jsx("textarea",{value:s.info.description||"",onChange:i=>t(n=>({...n,info:{...n.info,description:i.target.value}})),disabled:r,rows:5})]}),e.jsx("h4",{children:"Servers"}),(s.servers||[]).map((i,n)=>e.jsxs("div",{className:"nice-api-designer__server",children:[e.jsx("input",{type:"text",value:i.url,placeholder:"Server URL",onChange:o=>t(l=>{var j;return{...l,servers:(j=l.servers)==null?void 0:j.map((u,p)=>p===n?{...u,url:o.target.value}:u)}}),disabled:r}),e.jsx("input",{type:"text",value:i.description||"",placeholder:"Description",onChange:o=>t(l=>{var j;return{...l,servers:(j=l.servers)==null?void 0:j.map((u,p)=>p===n?{...u,description:o.target.value}:u)}}),disabled:r})]},n)),!r&&e.jsx("button",{onClick:()=>t(i=>({...i,servers:[...i.servers||[],{url:"https://api.example.com"}]})),children:"Add Server"})]})}function ae({endpoints:s,schema:t,selectedPath:r,selectedMethod:i,onSelectEndpoint:n,onAdd:o,onDelete:l,onChange:j,readOnly:u}){var C;const p=r&&i?(C=t.paths[r])==null?void 0:C[i]:null;return e.jsxs("div",{className:"nice-api-designer__paths-editor",children:[e.jsxs("div",{className:"nice-api-designer__endpoints-list",children:[e.jsxs("div",{className:"nice-api-designer__list-header",children:[e.jsx("h3",{children:"Endpoints"}),!u&&e.jsx("button",{onClick:o,children:"+ Add"})]}),s.map(({path:h,method:x})=>e.jsxs("div",{className:`nice-api-designer__endpoint ${r===h&&i===x.toLowerCase()?"nice-api-designer__endpoint--selected":""}`,onClick:()=>n(h,x.toLowerCase()),children:[e.jsx("span",{className:`nice-api-designer__method nice-api-designer__method--${x.toLowerCase()}`,children:x}),e.jsx("span",{className:"nice-api-designer__path",children:h})]},`${x}-${h}`))]}),p&&r&&i&&e.jsxs("div",{className:"nice-api-designer__operation-editor",children:[e.jsxs("h3",{children:[i.toUpperCase()," ",r]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Summary"}),e.jsx("input",{type:"text",value:p.summary||"",onChange:h=>j(x=>({...x,paths:{...x.paths,[r]:{...x.paths[r],[i]:{...p,summary:h.target.value}}}})),disabled:u})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Description"}),e.jsx("textarea",{value:p.description||"",onChange:h=>j(x=>({...x,paths:{...x.paths,[r]:{...x.paths[r],[i]:{...p,description:h.target.value}}}})),disabled:u,rows:3})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Operation ID"}),e.jsx("input",{type:"text",value:p.operationId||"",onChange:h=>j(x=>({...x,paths:{...x.paths,[r]:{...x.paths[r],[i]:{...p,operationId:h.target.value}}}})),disabled:u})]}),!u&&e.jsx("button",{className:"nice-api-designer__delete-btn",onClick:()=>l(r),children:"Delete Endpoint"})]})]})}function re({schemas:s,onAdd:t,onChange:r,readOnly:i}){const[n,o]=d.useState(null);return e.jsxs("div",{className:"nice-api-designer__schemas-editor",children:[e.jsxs("div",{className:"nice-api-designer__schemas-list",children:[e.jsxs("div",{className:"nice-api-designer__list-header",children:[e.jsx("h3",{children:"Schemas"}),!i&&e.jsx("button",{onClick:t,children:"+ Add"})]}),Object.keys(s).map(l=>e.jsx("div",{className:`nice-api-designer__schema-item ${n===l?"nice-api-designer__schema-item--selected":""}`,onClick:()=>o(l),children:l},l))]}),n&&s[n]&&e.jsxs("div",{className:"nice-api-designer__schema-editor",children:[e.jsx("h3",{children:n}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Type"}),e.jsxs("select",{value:s[n].type||"object",onChange:l=>r({...s,[n]:{...s[n],type:l.target.value}}),disabled:i,children:[e.jsx("option",{value:"object",children:"object"}),e.jsx("option",{value:"array",children:"array"}),e.jsx("option",{value:"string",children:"string"}),e.jsx("option",{value:"number",children:"number"}),e.jsx("option",{value:"integer",children:"integer"}),e.jsx("option",{value:"boolean",children:"boolean"})]})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Description"}),e.jsx("textarea",{value:s[n].description||"",onChange:l=>r({...s,[n]:{...s[n],description:l.target.value}}),disabled:i,rows:3})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"JSON Schema"}),e.jsx("textarea",{value:JSON.stringify(s[n],null,2),onChange:l=>{try{const j=JSON.parse(l.target.value);r({...s,[n]:j})}catch{}},disabled:i,rows:10,className:"nice-api-designer__code"})]})]})]})}function ce({schemes:s,onChange:t,readOnly:r}){const i=()=>{t({...s,newScheme:{type:"apiKey",name:"X-API-Key",in:"header"}})};return e.jsxs("div",{className:"nice-api-designer__security-editor",children:[e.jsxs("div",{className:"nice-api-designer__list-header",children:[e.jsx("h3",{children:"Security Schemes"}),!r&&e.jsx("button",{onClick:i,children:"+ Add"})]}),Object.entries(s).map(([n,o])=>e.jsxs("div",{className:"nice-api-designer__security-item",children:[e.jsx("h4",{children:n}),e.jsx("pre",{children:JSON.stringify(o,null,2)})]},n))]})}function le({schema:s}){return e.jsxs("div",{className:"nice-api-designer__json-preview",children:[e.jsx("h3",{children:"OpenAPI Specification"}),e.jsx("pre",{className:"nice-api-designer__code",children:JSON.stringify(s,null,2)})]})}const oe=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"],de={id:"",name:"New Request",method:"GET",url:"",headers:{},queryParams:{}};function G(s,t){return s.replace(/\{\{(\w+)\}\}/g,(r,i)=>t[i]||`{{${i}}}`)}function pe(s,t){const r=Object.entries(t).filter(([,i])=>i).map(([i,n])=>`${encodeURIComponent(i)}=${encodeURIComponent(n)}`).join("&");return r?`${s}?${r}`:s}function ue({collections:s=[],environments:t=[],onRequest:r,onSaveCollection:i,className:n=""}){const[o,l]=d.useState(s),[j,u]=d.useState(t),[p,C]=d.useState(t.find(a=>a.isActive)||null),[h,x]=d.useState({...de,id:crypto.randomUUID()}),[w,y]=d.useState(null),[N,T]=d.useState(!1),[P,K]=d.useState("none"),[A,$]=d.useState("params"),[D,I]=d.useState("body"),[g,b]=d.useState(""),[f,O]=d.useState(""),[q,U]=d.useState([]),[F,B]=d.useState([]),R=d.useRef(null),M=d.useCallback(async()=>{var L;if(!h.url)return;T(!0),y(null),U([]);const a=Object.fromEntries(Object.entries((p==null?void 0:p.variables)||{}).map(([S,E])=>[S,E.value])),_={...h,url:G(h.url,a),headers:Object.fromEntries(Object.entries(h.headers).map(([S,E])=>[S,G(E,a)])),queryParams:Object.fromEntries(Object.entries(h.queryParams).map(([S,E])=>[S,G(E,a)]))},k=performance.now();try{let S;if(r)S=await r(_);else{R.current=new AbortController;const E={..._.headers};h.auth&&he(E,h.auth);const ee=pe(_.url,_.queryParams),Y={method:_.method,headers:E,signal:R.current.signal};["POST","PUT","PATCH"].includes(_.method)&&((L=h.body)!=null&&L.content)&&(Y.body=typeof h.body.content=="string"?h.body.content:JSON.stringify(h.body.content),h.body.type==="json"&&(E["Content-Type"]="application/json"));const V=await fetch(ee,Y),J=await V.text();let z;try{z=JSON.parse(J)}catch{z=J}const se=performance.now();S={status:V.status,statusText:V.statusText,headers:Object.fromEntries(V.headers.entries()),body:z,time:Math.round(se-k),size:new Blob([J]).size,timestamp:new Date}}if(y(S),B(E=>[...E,{request:h,response:S}].slice(-50)),f){const E=xe(f,S);U(E)}}catch(S){S.name!=="AbortError"&&y({status:0,statusText:"Error",headers:{},body:{error:S.message},time:Math.round(performance.now()-k),size:0,timestamp:new Date})}finally{T(!1),R.current=null}},[h,p,r,f]),H=d.useCallback(()=>{var a;(a=R.current)==null||a.abort(),T(!1)},[]),c=d.useCallback(()=>{x(a=>({...a,headers:{...a.headers,"":""}}))},[]),m=d.useCallback(()=>{x(a=>({...a,queryParams:{...a.queryParams,"":""}}))},[]),v=d.useCallback(()=>{if(o.length===0){const a={id:crypto.randomUUID(),name:"My Collection",requests:[h]};l([a]),i==null||i(a)}else{const a={...o[0],requests:[...o[0].requests,h]};l(_=>[a,..._.slice(1)]),i==null||i(a)}},[o,h,i]);return e.jsxs("div",{className:`nice-api-tester ${n}`,children:[e.jsx("div",{className:"nice-api-tester__toolbar",children:e.jsx("div",{className:"nice-api-tester__env-selector",children:e.jsxs("select",{value:(p==null?void 0:p.id)||"",onChange:a=>C(j.find(_=>_.id===a.target.value)||null),children:[e.jsx("option",{value:"",children:"No Environment"}),j.map(a=>e.jsx("option",{value:a.id,children:a.name},a.id))]})})}),e.jsxs("div",{className:"nice-api-tester__request-bar",children:[e.jsx("select",{value:h.method,onChange:a=>x(_=>({..._,method:a.target.value})),className:`nice-api-tester__method nice-api-tester__method--${h.method.toLowerCase()}`,children:oe.map(a=>e.jsx("option",{value:a,children:a},a))}),e.jsx("input",{type:"text",value:h.url,onChange:a=>x(_=>({..._,url:a.target.value})),placeholder:"Enter request URL",className:"nice-api-tester__url-input"}),e.jsx("button",{onClick:N?H:M,className:`nice-api-tester__send-btn ${N?"nice-api-tester__send-btn--loading":""}`,children:N?"Cancel":"Send"}),e.jsx("button",{onClick:v,className:"nice-api-tester__save-btn",children:"Save"})]}),e.jsxs("div",{className:"nice-api-tester__main",children:[e.jsxs("div",{className:"nice-api-tester__request-panel",children:[e.jsx("div",{className:"nice-api-tester__tabs",children:["params","headers","body","auth","tests"].map(a=>e.jsx("button",{className:`nice-api-tester__tab ${A===a?"nice-api-tester__tab--active":""}`,onClick:()=>$(a),children:a.charAt(0).toUpperCase()+a.slice(1)},a))}),e.jsxs("div",{className:"nice-api-tester__tab-content",children:[A==="params"&&e.jsx(_e,{params:h.queryParams,onChange:a=>x(_=>({..._,queryParams:a})),onAdd:m}),A==="headers"&&e.jsx(je,{headers:h.headers,onChange:a=>x(_=>({..._,headers:a})),onAdd:c}),A==="body"&&e.jsx(ge,{body:h.body,bodyTab:P,onBodyTabChange:K,onChange:a=>x(_=>({..._,body:a}))}),A==="auth"&&e.jsx(be,{auth:h.auth,onChange:a=>x(_=>({..._,auth:a}))}),A==="tests"&&e.jsx(ve,{preRequestScript:g,testScript:f,onPreRequestChange:b,onTestChange:O})]})]}),e.jsx("div",{className:"nice-api-tester__response-panel",children:w?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-api-tester__response-meta",children:[e.jsxs("span",{className:`nice-api-tester__status nice-api-tester__status--${Math.floor(w.status/100)}`,children:[w.status," ",w.statusText]}),e.jsxs("span",{className:"nice-api-tester__time",children:[w.time,"ms"]}),e.jsx("span",{className:"nice-api-tester__size",children:me(w.size)})]}),e.jsx("div",{className:"nice-api-tester__tabs",children:["body","headers","tests"].map(a=>e.jsxs("button",{className:`nice-api-tester__tab ${D===a?"nice-api-tester__tab--active":""}`,onClick:()=>I(a),children:[a.charAt(0).toUpperCase()+a.slice(1),a==="tests"&&q.length>0&&e.jsxs("span",{className:"nice-api-tester__test-badge",children:[q.filter(_=>_.passed).length,"/",q.length]})]},a))}),e.jsxs("div",{className:"nice-api-tester__response-content",children:[D==="body"&&e.jsx("pre",{className:"nice-api-tester__response-body",children:typeof w.body=="string"?w.body:JSON.stringify(w.body,null,2)}),D==="headers"&&e.jsx("div",{className:"nice-api-tester__response-headers",children:Object.entries(w.headers).map(([a,_])=>e.jsxs("div",{className:"nice-api-tester__header-row",children:[e.jsx("span",{className:"nice-api-tester__header-key",children:a}),e.jsx("span",{className:"nice-api-tester__header-value",children:_})]},a))}),D==="tests"&&e.jsx("div",{className:"nice-api-tester__test-results",children:q.map((a,_)=>e.jsxs("div",{className:`nice-api-tester__test-result nice-api-tester__test-result--${a.passed?"pass":"fail"}`,children:[e.jsx("span",{className:"nice-api-tester__test-icon",children:a.passed?"✓":"✗"}),e.jsx("span",{className:"nice-api-tester__test-name",children:a.name}),a.message&&e.jsx("span",{className:"nice-api-tester__test-message",children:a.message})]},_))})]})]}):e.jsx("div",{className:"nice-api-tester__empty-response",children:N?"Loading...":"Send a request to see the response"})})]}),F.length>0&&e.jsxs("div",{className:"nice-api-tester__history",children:[e.jsx("h4",{children:"History"}),e.jsx("div",{className:"nice-api-tester__history-list",children:F.slice().reverse().map(({request:a,response:_},k)=>e.jsxs("div",{className:"nice-api-tester__history-item",onClick:()=>x(a),children:[e.jsx("span",{className:`nice-api-tester__method nice-api-tester__method--${a.method.toLowerCase()}`,children:a.method}),e.jsx("span",{className:"nice-api-tester__history-url",children:a.url}),e.jsx("span",{className:`nice-api-tester__status nice-api-tester__status--${Math.floor(_.status/100)}`,children:_.status})]},k))})]})]})}function he(s,t){var r,i,n,o,l;switch(t.type){case"bearer":s.Authorization=`${((r=t.bearer)==null?void 0:r.prefix)||"Bearer"} ${(i=t.bearer)==null?void 0:i.token}`;break;case"basic":s.Authorization=`Basic ${btoa(`${(n=t.basic)==null?void 0:n.username}:${(o=t.basic)==null?void 0:o.password}`)}`;break;case"api-key":((l=t.apiKey)==null?void 0:l.in)==="header"&&(s[t.apiKey.key]=t.apiKey.value);break}}function me(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:`${(s/(1024*1024)).toFixed(1)} MB`}function xe(s,t){const r=[],i={response:{code:t.status,status:t.statusText,headers:t.headers,json:()=>t.body,text:()=>typeof t.body=="string"?t.body:JSON.stringify(t.body),responseTime:t.time},test:(n,o)=>{const l=performance.now();try{o(),r.push({name:n,passed:!0,duration:performance.now()-l})}catch(j){r.push({name:n,passed:!1,message:j.message,duration:performance.now()-l})}},expect:n=>({to:{equal:o=>{if(n!==o)throw new Error(`Expected ${o} but got ${n}`)},be:{oneOf:o=>{if(!o.includes(n))throw new Error(`Expected ${n} to be one of ${o}`)}},have:{property:o=>{if(typeof n!="object"||n===null||!(o in n))throw new Error(`Expected object to have property ${o}`)}}}})};try{new Function("pm",s)(i)}catch(n){r.push({name:"Script Error",passed:!1,message:n.message,duration:0})}return r}function Z({items:s,onChange:t,onAdd:r,keyPlaceholder:i="Key",valuePlaceholder:n="Value"}){return e.jsxs("div",{className:"nice-api-tester__kv-editor",children:[Object.entries(s).map(([o,l],j)=>e.jsxs("div",{className:"nice-api-tester__kv-row",children:[e.jsx("input",{type:"text",value:o,placeholder:i,onChange:u=>{const p=Object.entries(s);p[j]=[u.target.value,l],t(Object.fromEntries(p))}}),e.jsx("input",{type:"text",value:l,placeholder:n,onChange:u=>t({...s,[o]:u.target.value})}),e.jsx("button",{onClick:()=>{const{[o]:u,...p}=s;t(p)},children:"×"})]},j)),e.jsx("button",{onClick:r,className:"nice-api-tester__add-btn",children:"+ Add"})]})}function _e({params:s,onChange:t,onAdd:r}){return e.jsx(Z,{items:s,onChange:t,onAdd:r,keyPlaceholder:"Parameter",valuePlaceholder:"Value"})}function je({headers:s,onChange:t,onAdd:r}){return e.jsx(Z,{items:s,onChange:t,onAdd:r,keyPlaceholder:"Header",valuePlaceholder:"Value"})}function ge({body:s,bodyTab:t,onBodyTabChange:r,onChange:i}){return e.jsxs("div",{className:"nice-api-tester__body-editor",children:[e.jsx("div",{className:"nice-api-tester__body-tabs",children:["none","json","form-data","raw"].map(n=>e.jsxs("label",{children:[e.jsx("input",{type:"radio",checked:t===n,onChange:()=>{r(n),i({type:n,content:""})}}),n]},n))}),t!=="none"&&e.jsx("textarea",{value:typeof(s==null?void 0:s.content)=="string"?s.content:JSON.stringify(s==null?void 0:s.content,null,2),onChange:n=>i({type:t,content:n.target.value}),placeholder:t==="json"?'{ "key": "value" }':"Enter body content",rows:10,className:"nice-api-tester__body-textarea"})]})}function be({auth:s,onChange:t}){var r,i,n,o,l,j;return e.jsxs("div",{className:"nice-api-tester__auth-editor",children:[e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Type"}),e.jsxs("select",{value:(s==null?void 0:s.type)||"none",onChange:u=>t({type:u.target.value}),children:[e.jsx("option",{value:"none",children:"No Auth"}),e.jsx("option",{value:"api-key",children:"API Key"}),e.jsx("option",{value:"bearer",children:"Bearer Token"}),e.jsx("option",{value:"basic",children:"Basic Auth"}),e.jsx("option",{value:"oauth2",children:"OAuth 2.0"})]})]}),(s==null?void 0:s.type)==="api-key"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Key"}),e.jsx("input",{type:"text",value:((r=s.apiKey)==null?void 0:r.key)||"",onChange:u=>{var p,C;return t({...s,apiKey:{...s.apiKey,key:u.target.value,value:((p=s.apiKey)==null?void 0:p.value)||"",in:((C=s.apiKey)==null?void 0:C.in)||"header"}})},placeholder:"X-API-Key"})]}),e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Value"}),e.jsx("input",{type:"text",value:((i=s.apiKey)==null?void 0:i.value)||"",onChange:u=>{var p,C;return t({...s,apiKey:{...s.apiKey,value:u.target.value,key:((p=s.apiKey)==null?void 0:p.key)||"",in:((C=s.apiKey)==null?void 0:C.in)||"header"}})},placeholder:"your-api-key"})]}),e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Add to"}),e.jsxs("select",{value:((n=s.apiKey)==null?void 0:n.in)||"header",onChange:u=>{var p,C;return t({...s,apiKey:{...s.apiKey,in:u.target.value,key:((p=s.apiKey)==null?void 0:p.key)||"",value:((C=s.apiKey)==null?void 0:C.value)||""}})},children:[e.jsx("option",{value:"header",children:"Header"}),e.jsx("option",{value:"query",children:"Query Params"})]})]})]}),(s==null?void 0:s.type)==="bearer"&&e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Token"}),e.jsx("input",{type:"text",value:((o=s.bearer)==null?void 0:o.token)||"",onChange:u=>t({...s,bearer:{token:u.target.value}}),placeholder:"your-bearer-token"})]}),(s==null?void 0:s.type)==="basic"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Username"}),e.jsx("input",{type:"text",value:((l=s.basic)==null?void 0:l.username)||"",onChange:u=>{var p;return t({...s,basic:{...s.basic,username:u.target.value,password:((p=s.basic)==null?void 0:p.password)||""}})}})]}),e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Password"}),e.jsx("input",{type:"password",value:((j=s.basic)==null?void 0:j.password)||"",onChange:u=>{var p;return t({...s,basic:{...s.basic,password:u.target.value,username:((p=s.basic)==null?void 0:p.username)||""}})}})]})]})]})}function ve({preRequestScript:s,testScript:t,onPreRequestChange:r,onTestChange:i}){return e.jsxs("div",{className:"nice-api-tester__tests-editor",children:[e.jsxs("div",{className:"nice-api-tester__script-section",children:[e.jsx("h4",{children:"Pre-request Script"}),e.jsx("textarea",{value:s,onChange:n=>r(n.target.value),placeholder:"// Code to run before the request",rows:5})]}),e.jsxs("div",{className:"nice-api-tester__script-section",children:[e.jsx("h4",{children:"Tests"}),e.jsx("textarea",{value:t,onChange:n=>i(n.target.value),placeholder:`pm.test("Status code is 200", function () {
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),c=require("react"),ve=(r,a)=>a,xe=c.createContext(ve);function _e(){return{t:c.useContext(xe)}}c.createContext({dir:"ltr",isRTL:!1,flip:r=>r,value:r=>r.ltr});c.createContext(null);c.createContext(null);const je={radius:"md",shadow:"md",fill:"solid",buttonStyle:"flat",inputStyle:"bordered",cardStyle:"elevated",badgeStyle:"solid",tabStyle:"underline",toggleStyle:"default",tooltipStyle:"dark",modalStyle:"default",tableStyle:"default",menuStyle:"default",animation:"normal",density:"normal"};c.createContext({displayStyle:"default",variantConfig:je,setDisplayStyle:()=>{}});c.createContext({});c.createContext({direction:"ltr",isRTL:!1,flip:r=>r,flipStyle:(r,a)=>({[r]:a})});c.createContext({permissions:{},getAccessMode:()=>"full"});c.createContext(null);const we=process.env.NODE_ENV==="development";let oe={enabled:we,slowRenderThreshold:16};const de=[],ae=new Map,le=new Map;function Ne(){de.length=0,ae.clear(),le.clear()}function Se(r){const a=oe.slowRenderThreshold;return de.filter(s=>s.actualDuration>a)}function F(r){return r<1?`${(r*1e3).toFixed(0)}μs`:r<1e3?`${r.toFixed(2)}ms`:`${(r/1e3).toFixed(2)}s`}function Ce(){const r=Array.from(ae.values()),a=Se(),s=r.reduce((u,f)=>u+f.renderCount,0),i=r.length>0?r.reduce((u,f)=>u+f.avgRenderTime,0)/r.length:0,t=Array.from(le.values());return{stats:r,slowRenders:a,totalRenders:s,avgRenderTime:i,marks:t}}function ke(){const r=Ce();console.group("%c[Nice2Dev Performance Report]","color: var(--nice-info, #6366f1); font-weight: bold; font-size: 14px"),console.log(`Total renders: ${r.totalRenders}`),console.log(`Average render time: ${F(r.avgRenderTime)}`),console.log(`Slow renders: ${r.slowRenders.length}`),console.group("Component Stats"),console.table(r.stats.sort((a,s)=>s.totalRenderTime-a.totalRenderTime).map(a=>({Name:a.componentName,Renders:a.renderCount,"Avg Time":F(a.avgRenderTime),"Max Time":F(a.maxRenderTime),"Total Time":F(a.totalRenderTime),"Slow Renders":a.slowRenderCount}))),console.groupEnd(),r.slowRenders.length>0&&(console.group("Slow Renders (last 10)"),console.table(r.slowRenders.slice(-10).map(a=>({Component:a.componentName,Phase:a.phase,Duration:F(a.actualDuration),Time:new Date(a.timestamp).toLocaleTimeString()}))),console.groupEnd()),r.marks.length>0&&(console.group("Custom Marks"),console.table(r.marks.filter(a=>a.duration).map(a=>({Name:a.name,Duration:F(a.duration)}))),console.groupEnd()),console.groupEnd()}const He=c.memo(({position:r="bottom-right",defaultCollapsed:a=!0})=>{const[s,i]=c.useState(a),[t,u]=c.useState([]),[f,y]=c.useState({used:0,total:0});if(c.useEffect(()=>{const d=()=>{const C=Array.from(ae.values());u(C.sort((k,v)=>v.totalRenderTime-k.totalRenderTime).slice(0,10));const m=window.performance;m.memory&&y({used:m.memory.usedJSHeapSize/1024/1024,total:m.memory.totalJSHeapSize/1024/1024})};d();const g=setInterval(d,2e3);return()=>clearInterval(g)},[]),!oe.enabled)return null;const b={position:"fixed",zIndex:99999,...r.includes("top")?{top:8}:{bottom:8},...r.includes("left")?{left:8}:{right:8}};return e.jsxs("div",{style:{...b,background:"var(--nice-overlay-85, rgba(0, 0, 0, 0.85))",color:"var(--bg-primary, #fff)",borderRadius:8,fontSize:11,fontFamily:"Monaco, Consolas, monospace",padding:s?"4px 8px":8,maxWidth:s?"auto":300,maxHeight:s?"auto":400,overflow:"auto"},children:[e.jsxs("div",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:8},onClick:()=>i(d=>!d),children:[e.jsx("span",{style:{color:"var(--color-success, #22c55e)"},children:"●"}),e.jsx("span",{children:"Profiler"}),f.used>0&&e.jsxs("span",{style:{color:f.used>100?"var(--color-warning, #f59e0b)":"var(--text-muted, #64748b)"},children:[f.used.toFixed(0),"MB"]}),e.jsx("span",{style:{marginLeft:"auto",opacity:.5},children:s?"▼":"▲"})]}),!s&&e.jsxs("div",{style:{marginTop:8},children:[e.jsx("div",{style:{borderBottom:"1px solid var(--border-color, #333)",paddingBottom:4,marginBottom:8},children:e.jsx("strong",{children:"Top Components"})}),t.map(d=>e.jsxs("div",{style:{marginBottom:4,display:"flex",gap:8},children:[e.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis"},children:d.componentName}),e.jsx("span",{style:{color:d.avgRenderTime>16?"var(--color-warning, #f59e0b)":"var(--color-success, #22c55e)"},children:F(d.avgRenderTime)}),e.jsxs("span",{style:{color:"var(--text-muted, #64748b)",minWidth:30,textAlign:"right"},children:["x",d.renderCount]})]},d.componentName)),e.jsxs("div",{style:{marginTop:8,display:"flex",gap:8},children:[e.jsx("button",{onClick:ke,style:{flex:1,padding:"4px 8px",background:"var(--bg-tertiary, #333)",border:"none",borderRadius:4,color:"var(--bg-primary, #fff)",cursor:"pointer",fontSize:10},children:"Print Report"}),e.jsx("button",{onClick:Ne,style:{flex:1,padding:"4px 8px",background:"var(--bg-tertiary, #333)",border:"none",borderRadius:4,color:"var(--bg-primary, #fff)",cursor:"pointer",fontSize:10},children:"Clear"})]})]})]})});He.displayName="ProfilerOverlay";process.env.NODE_ENV;c.createContext(null);const Te=c.createContext({enabled:!0,active:!1,run:()=>{}});function Ee(){return c.useContext(Te)}function X(r,a){if(!r)return null;if(r===!0)return a&&a.length>0?a:null;if(Array.isArray(r))return r.length>0?r:null;const s=r.steps??a;return s&&s.length>0?s:null}function Re(r,a){return r.map(s=>({target:s.target,title:s.titleKey?a(s.titleKey,s.title??""):s.title??"",content:s.contentKey?a(s.contentKey,s.content??""):s.content??"",placement:s.placement,highlightPadding:s.highlightPadding,showArrow:s.showArrow,scrollIntoView:s.scrollIntoView,disableInteraction:s.disableInteraction}))}const Y=({steps:r,autoStart:a,label:s,size:i="md",className:t,style:u,"data-testid":f})=>{const{enabled:y,run:b}=Ee(),{t:d}=_e();if(!y||!r||r.length===0)return null;const g=s??d("tutorial.startAria","Start tutorial");return e.jsx("button",{type:"button",className:`nice-tutorial-button nice-tutorial-button--${i}`+(t?` ${t}`:""),style:u,"data-testid":f,"aria-label":g,title:g,onClick:()=>b(Re(r,d),{autoStart:a}),children:"?"})},ie="nice-tutorial-button-styles";if(typeof document<"u"&&!document.getElementById(ie)){const r=document.createElement("style");r.id=ie,r.textContent=`
|
|
2
|
+
.nice-tutorial-button {
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
justify-content: center;
|
|
6
|
+
border: 1px solid var(--nice-border, #cbd5e1);
|
|
7
|
+
background: var(--nice-bg, #fff);
|
|
8
|
+
color: var(--nice-text-secondary, #475569);
|
|
9
|
+
border-radius: var(--nice-radius-full, 9999px);
|
|
10
|
+
cursor: help;
|
|
11
|
+
font-weight: 700;
|
|
12
|
+
line-height: 1;
|
|
13
|
+
padding: 0;
|
|
14
|
+
transition: background var(--nice-transition, 200ms ease), color var(--nice-transition, 200ms ease), border-color var(--nice-transition, 200ms ease);
|
|
15
|
+
}
|
|
16
|
+
.nice-tutorial-button:hover {
|
|
17
|
+
background: var(--nice-primary, #2563eb);
|
|
18
|
+
border-color: var(--nice-primary, #2563eb);
|
|
19
|
+
color: var(--nice-text-inverse, #fff);
|
|
20
|
+
}
|
|
21
|
+
.nice-tutorial-button:focus-visible {
|
|
22
|
+
outline: none;
|
|
23
|
+
box-shadow: 0 0 0 2px var(--nice-bg, #fff), 0 0 0 4px var(--nice-primary, #2563eb);
|
|
24
|
+
}
|
|
25
|
+
.nice-tutorial-button--sm { width: 16px; height: 16px; font-size: 11px; }
|
|
26
|
+
.nice-tutorial-button--md { width: 20px; height: 20px; font-size: 12px; }
|
|
27
|
+
`,document.head.appendChild(r)}c.createContext(null);c.createContext(null);c.createContext(null);const fe={space1:"4px",space2:"8px",space3:"12px",space4:"16px",space5:"20px",space6:"24px",space8:"32px"},pe={fontFamily:"'Inter', system-ui, -apple-system, sans-serif",fontSizeXs:"0.75rem",fontSizeSm:"0.8125rem",fontSizeMd:"0.875rem",fontSizeLg:"1rem",fontSizeXl:"1.125rem",fontWeightNormal:400,fontWeightMedium:500,fontWeightSemibold:600,fontWeightBold:700,lineHeight:1.5},me={fast:"120ms ease",normal:"200ms ease",slow:"300ms ease"},ye=r=>({color:r,radiusSm:"4px",radiusMd:"6px",radiusLg:"8px",radiusXl:"12px",radiusFull:"9999px"}),Ae={sm:"0 1px 2px rgba(0,0,0,0.05)",md:"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)",lg:"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)",xl:"0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1)"},Pe={sm:"0 1px 2px rgba(0,0,0,0.3)",md:"0 4px 6px -1px rgba(0,0,0,0.4)",lg:"0 10px 15px -3px rgba(0,0,0,0.4)",xl:"0 20px 25px -5px rgba(0,0,0,0.4)"};function l(r,a,s,i,t){return{name:r,darkMode:"light",colors:{...a,surface:a.surface??s.primary,surfaceHover:a.surfaceHover??s.secondary},backgrounds:{...s,elevated:s.elevated??s.primary,inset:s.inset??s.tertiary,canvas:s.canvas??s.primary},text:{...i,inverse:i.inverse??"#ffffff"},borders:ye(t),shadows:Ae,spacing:fe,typography:pe,transitions:me}}function E(r,a,s,i,t){return{name:r,darkMode:"dark",colors:{...a,surface:a.surface??s.secondary,surfaceHover:a.surfaceHover??s.tertiary},backgrounds:{...s,elevated:s.elevated??s.secondary,inset:s.inset??s.primary,canvas:s.canvas??s.primary},text:{...i,inverse:i.inverse??"#0f172a"},borders:ye(t),shadows:Pe,spacing:fe,typography:pe,transitions:me}}l("Slate",{primary:"#64748b",primaryHover:"#475569",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#f8fafc",secondary:"#f1f5f9",tertiary:"#e2e8f0",hover:"#e2e8f0"},{primary:"#1e293b",secondary:"#475569",muted:"#94a3b8"},"#cbd5e1");l("Zinc",{primary:"#71717a",primaryHover:"#52525b",success:"#22c55e",warning:"#eab308",error:"#ef4444",info:"#06b6d4"},{primary:"#fafafa",secondary:"#f4f4f5",tertiary:"#e4e4e7",hover:"#e4e4e7"},{primary:"#18181b",secondary:"#3f3f46",muted:"#a1a1aa"},"#d4d4d8");l("Stone",{primary:"#78716c",primaryHover:"#57534e",success:"#16a34a",warning:"#ca8a04",error:"#dc2626",info:"#0891b2"},{primary:"#fafaf9",secondary:"#f5f5f4",tertiary:"#e7e5e4",hover:"#e7e5e4"},{primary:"#1c1917",secondary:"#44403c",muted:"#a8a29e"},"#d6d3d1");l("Cool Gray",{primary:"#6b7280",primaryHover:"#4b5563",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#3b82f6"},{primary:"#f9fafb",secondary:"#f3f4f6",tertiary:"#e5e7eb",hover:"#e5e7eb"},{primary:"#111827",secondary:"#374151",muted:"#9ca3af"},"#d1d5db");l("Warm Gray",{primary:"#7c7568",primaryHover:"#5c564c",success:"#4d7c0f",warning:"#a16207",error:"#b91c1c",info:"#0e7490"},{primary:"#faf9f7",secondary:"#f5f4f0",tertiary:"#e8e6e1",hover:"#e8e6e1"},{primary:"#1f1d19",secondary:"#4a463d",muted:"#a09888"},"#d4d0c8");l("Silver",{primary:"#94a3b8",primaryHover:"#64748b",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#38bdf8"},{primary:"#f8fafc",secondary:"#f1f5f9",tertiary:"#e2e8f0",hover:"#e2e8f0"},{primary:"#334155",secondary:"#64748b",muted:"#94a3b8"},"#cbd5e1");l("Charcoal",{primary:"#374151",primaryHover:"#1f2937",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0284c7"},{primary:"#f9fafb",secondary:"#f3f4f6",tertiary:"#e5e7eb",hover:"#e5e7eb"},{primary:"#111827",secondary:"#374151",muted:"#6b7280"},"#d1d5db");l("Ivory",{primary:"#92876d",primaryHover:"#7a6f55",success:"#4d7c0f",warning:"#a16207",error:"#b91c1c",info:"#0e7490"},{primary:"#fffef7",secondary:"#faf6eb",tertiary:"#f0ead6",hover:"#f0ead6"},{primary:"#2b2517",secondary:"#5c5340",muted:"#9c9280"},"#ddd8c4");l("Rose",{primary:"#e11d48",primaryHover:"#be123c",success:"#16a34a",warning:"#ea580c",error:"#dc2626",info:"#0891b2"},{primary:"#fff1f2",secondary:"#ffe4e6",tertiary:"#fecdd3",hover:"#ffe4e6"},{primary:"#4c0519",secondary:"#881337",muted:"#f43f5e"},"#fda4af");l("Emerald",{primary:"#059669",primaryHover:"#047857",success:"#16a34a",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#ecfdf5",secondary:"#d1fae5",tertiary:"#a7f3d0",hover:"#d1fae5"},{primary:"#064e3b",secondary:"#065f46",muted:"#34d399"},"#6ee7b7");l("Amber",{primary:"#d97706",primaryHover:"#b45309",success:"#16a34a",warning:"#ca8a04",error:"#dc2626",info:"#0284c7"},{primary:"#fffbeb",secondary:"#fef3c7",tertiary:"#fde68a",hover:"#fef3c7"},{primary:"#451a03",secondary:"#78350f",muted:"#f59e0b"},"#fcd34d");l("Violet",{primary:"#7c3aed",primaryHover:"#6d28d9",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#f5f3ff",secondary:"#ede9fe",tertiary:"#ddd6fe",hover:"#ede9fe"},{primary:"#2e1065",secondary:"#4c1d95",muted:"#a78bfa"},"#c4b5fd");l("Teal",{primary:"#0d9488",primaryHover:"#0f766e",success:"#16a34a",warning:"#d97706",error:"#dc2626",info:"#0284c7"},{primary:"#f0fdfa",secondary:"#ccfbf1",tertiary:"#99f6e4",hover:"#ccfbf1"},{primary:"#134e4a",secondary:"#115e59",muted:"#2dd4bf"},"#5eead4");l("Indigo",{primary:"#4f46e5",primaryHover:"#4338ca",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#eef2ff",secondary:"#e0e7ff",tertiary:"#c7d2fe",hover:"#e0e7ff"},{primary:"#1e1b4b",secondary:"#312e81",muted:"#818cf8"},"#a5b4fc");l("Cyan",{primary:"#0891b2",primaryHover:"#0e7490",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#0284c7"},{primary:"#ecfeff",secondary:"#cffafe",tertiary:"#a5f3fc",hover:"#cffafe"},{primary:"#164e63",secondary:"#155e75",muted:"#22d3ee"},"#67e8f9");l("Lime",{primary:"#65a30d",primaryHover:"#4d7c0f",success:"#16a34a",warning:"#ca8a04",error:"#dc2626",info:"#0891b2"},{primary:"#f7fee7",secondary:"#ecfccb",tertiary:"#d9f99d",hover:"#ecfccb"},{primary:"#1a2e05",secondary:"#365314",muted:"#84cc16"},"#bef264");l("Pink",{primary:"#db2777",primaryHover:"#be185d",success:"#10b981",warning:"#f59e0b",error:"#dc2626",info:"#06b6d4"},{primary:"#fdf2f8",secondary:"#fce7f3",tertiary:"#fbcfe8",hover:"#fce7f3"},{primary:"#500724",secondary:"#831843",muted:"#f472b6"},"#f9a8d4");l("Orange",{primary:"#ea580c",primaryHover:"#c2410c",success:"#16a34a",warning:"#ca8a04",error:"#dc2626",info:"#0891b2"},{primary:"#fff7ed",secondary:"#ffedd5",tertiary:"#fed7aa",hover:"#ffedd5"},{primary:"#431407",secondary:"#7c2d12",muted:"#fb923c"},"#fdba74");l("Fuchsia",{primary:"#c026d3",primaryHover:"#a21caf",success:"#10b981",warning:"#eab308",error:"#ef4444",info:"#06b6d4"},{primary:"#fdf4ff",secondary:"#fae8ff",tertiary:"#f5d0fe",hover:"#fae8ff"},{primary:"#4a044e",secondary:"#701a75",muted:"#d946ef"},"#e879f9");l("Sky",{primary:"#0284c7",primaryHover:"#0369a1",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#f0f9ff",secondary:"#e0f2fe",tertiary:"#bae6fd",hover:"#e0f2fe"},{primary:"#0c4a6e",secondary:"#075985",muted:"#38bdf8"},"#7dd3fc");l("Ruby",{primary:"#be123c",primaryHover:"#9f1239",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0284c7"},{primary:"#fff1f2",secondary:"#ffe4e6",tertiary:"#fecdd3",hover:"#ffe4e6"},{primary:"#4c0519",secondary:"#881337",muted:"#fb7185"},"#fda4af");l("Coral",{primary:"#f97316",primaryHover:"#ea580c",success:"#10b981",warning:"#eab308",error:"#ef4444",info:"#06b6d4"},{primary:"#fff7ed",secondary:"#ffedd5",tertiary:"#fed7aa",hover:"#ffedd5"},{primary:"#431407",secondary:"#9a3412",muted:"#fb923c"},"#fdba74");E("Midnight",{primary:"#818cf8",primaryHover:"#6366f1",success:"#34d399",warning:"#fbbf24",error:"#f87171",info:"#22d3ee"},{primary:"#020617",secondary:"#0f172a",tertiary:"#1e293b",hover:"#1e293b"},{primary:"#f1f5f9",secondary:"#94a3b8",muted:"#475569"},"#1e293b");E("Obsidian",{primary:"#a78bfa",primaryHover:"#8b5cf6",success:"#4ade80",warning:"#facc15",error:"#fb7185",info:"#38bdf8"},{primary:"#09090b",secondary:"#18181b",tertiary:"#27272a",hover:"#27272a"},{primary:"#fafafa",secondary:"#a1a1aa",muted:"#52525b"},"#3f3f46");E("Eclipse",{primary:"#c084fc",primaryHover:"#a855f7",success:"#34d399",warning:"#fbbf24",error:"#f87171",info:"#67e8f9"},{primary:"#0c0a1d",secondary:"#1a1533",tertiary:"#2a2248",hover:"#2a2248"},{primary:"#f5f3ff",secondary:"#a78bfa",muted:"#6d5eac"},"#3b3266");E("Onyx",{primary:"#60a5fa",primaryHover:"#3b82f6",success:"#4ade80",warning:"#fbbf24",error:"#f87171",info:"#22d3ee"},{primary:"#000000",secondary:"#0a0a0a",tertiary:"#171717",hover:"#171717"},{primary:"#ffffff",secondary:"#a3a3a3",muted:"#525252"},"#262626");E("Carbon",{primary:"#38bdf8",primaryHover:"#0ea5e9",success:"#4ade80",warning:"#facc15",error:"#f87171",info:"#67e8f9"},{primary:"#161616",secondary:"#262626",tertiary:"#393939",hover:"#393939"},{primary:"#f4f4f4",secondary:"#c6c6c6",muted:"#6f6f6f"},"#525252");E("Cosmos",{primary:"#6366f1",primaryHover:"#4f46e5",success:"#34d399",warning:"#fbbf24",error:"#f87171",info:"#22d3ee"},{primary:"#030712",secondary:"#111827",tertiary:"#1f2937",hover:"#1f2937"},{primary:"#e5e7eb",secondary:"#9ca3af",muted:"#4b5563"},"#374151");E("Nebula",{primary:"#e879f9",primaryHover:"#d946ef",success:"#4ade80",warning:"#fbbf24",error:"#fb7185",info:"#67e8f9"},{primary:"#0d0117",secondary:"#1a0533",tertiary:"#2d0a52",hover:"#2d0a52"},{primary:"#fae8ff",secondary:"#d8b4fe",muted:"#7c3aed"},"#581c87");E("Abyss",{primary:"#22d3ee",primaryHover:"#06b6d4",success:"#34d399",warning:"#fbbf24",error:"#f87171",info:"#38bdf8"},{primary:"#001219",secondary:"#002a3a",tertiary:"#003e54",hover:"#003e54"},{primary:"#e0f2fe",secondary:"#7dd3fc",muted:"#0369a1"},"#075985");E("Shadow",{primary:"#a3a3a3",primaryHover:"#737373",success:"#4ade80",warning:"#facc15",error:"#f87171",info:"#38bdf8"},{primary:"#171717",secondary:"#1f1f1f",tertiary:"#2a2a2a",hover:"#2a2a2a"},{primary:"#e5e5e5",secondary:"#a3a3a3",muted:"#525252"},"#404040");E("Emerald Dark",{primary:"#34d399",primaryHover:"#10b981",success:"#4ade80",warning:"#fbbf24",error:"#f87171",info:"#22d3ee"},{primary:"#022c22",secondary:"#064e3b",tertiary:"#065f46",hover:"#065f46"},{primary:"#ecfdf5",secondary:"#6ee7b7",muted:"#047857"},"#047857");l("Forest",{primary:"#166534",primaryHover:"#14532d",success:"#22c55e",warning:"#ca8a04",error:"#dc2626",info:"#0891b2"},{primary:"#f0fdf4",secondary:"#dcfce7",tertiary:"#bbf7d0",hover:"#dcfce7"},{primary:"#052e16",secondary:"#166534",muted:"#4ade80"},"#86efac");l("Ocean",{primary:"#0369a1",primaryHover:"#075985",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0284c7"},{primary:"#f0f9ff",secondary:"#e0f2fe",tertiary:"#bae6fd",hover:"#e0f2fe"},{primary:"#0c4a6e",secondary:"#0369a1",muted:"#38bdf8"},"#7dd3fc");l("Desert",{primary:"#b45309",primaryHover:"#92400e",success:"#4d7c0f",warning:"#a16207",error:"#b91c1c",info:"#0e7490"},{primary:"#fefce8",secondary:"#fef9c3",tertiary:"#fef08a",hover:"#fef9c3"},{primary:"#422006",secondary:"#713f12",muted:"#ca8a04"},"#fde047");l("Sunset",{primary:"#ea580c",primaryHover:"#c2410c",success:"#16a34a",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#fff7ed",secondary:"#ffedd5",tertiary:"#fed7aa",hover:"#ffedd5"},{primary:"#431407",secondary:"#9a3412",muted:"#f97316"},"#fdba74");l("Aurora",{primary:"#0d9488",primaryHover:"#0f766e",success:"#22c55e",warning:"#eab308",error:"#ef4444",info:"#06b6d4"},{primary:"#f0fdfa",secondary:"#ccfbf1",tertiary:"#99f6e4",hover:"#ccfbf1"},{primary:"#134e4a",secondary:"#115e59",muted:"#2dd4bf"},"#5eead4");l("Lavender",{primary:"#7e22ce",primaryHover:"#6b21a8",success:"#16a34a",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#faf5ff",secondary:"#f3e8ff",tertiary:"#e9d5ff",hover:"#f3e8ff"},{primary:"#3b0764",secondary:"#581c87",muted:"#a855f7"},"#d8b4fe");l("Autumn",{primary:"#c2410c",primaryHover:"#9a3412",success:"#4d7c0f",warning:"#a16207",error:"#b91c1c",info:"#0e7490"},{primary:"#fef2f2",secondary:"#fee2e2",tertiary:"#fecaca",hover:"#fee2e2"},{primary:"#450a0a",secondary:"#7f1d1d",muted:"#f87171"},"#fca5a5");l("Spring",{primary:"#16a34a",primaryHover:"#15803d",success:"#22c55e",warning:"#eab308",error:"#ef4444",info:"#06b6d4"},{primary:"#f0fdf4",secondary:"#dcfce7",tertiary:"#bbf7d0",hover:"#dcfce7"},{primary:"#14532d",secondary:"#166534",muted:"#4ade80"},"#86efac");l("Arctic",{primary:"#0ea5e9",primaryHover:"#0284c7",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#f0f9ff",secondary:"#e0f2fe",tertiary:"#bae6fd",hover:"#e0f2fe"},{primary:"#0c4a6e",secondary:"#0369a1",muted:"#7dd3fc"},"#bae6fd");l("Tropical",{primary:"#0d9488",primaryHover:"#0f766e",success:"#16a34a",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#ecfdf5",secondary:"#d1fae5",tertiary:"#a7f3d0",hover:"#d1fae5"},{primary:"#064e3b",secondary:"#065f46",muted:"#6ee7b7"},"#a7f3d0");l("Pastel Rose",{primary:"#f472b6",primaryHover:"#ec4899",success:"#4ade80",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#fdf2f8",secondary:"#fce7f3",tertiary:"#fbcfe8",hover:"#fce7f3"},{primary:"#831843",secondary:"#9d174d",muted:"#f9a8d4"},"#f9a8d4");l("Pastel Sky",{primary:"#38bdf8",primaryHover:"#0ea5e9",success:"#4ade80",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#f0f9ff",secondary:"#e0f2fe",tertiary:"#bae6fd",hover:"#e0f2fe"},{primary:"#075985",secondary:"#0369a1",muted:"#7dd3fc"},"#bae6fd");l("Pastel Mint",{primary:"#34d399",primaryHover:"#10b981",success:"#4ade80",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#ecfdf5",secondary:"#d1fae5",tertiary:"#a7f3d0",hover:"#d1fae5"},{primary:"#065f46",secondary:"#047857",muted:"#6ee7b7"},"#a7f3d0");l("Pastel Peach",{primary:"#fb923c",primaryHover:"#f97316",success:"#4ade80",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#fff7ed",secondary:"#ffedd5",tertiary:"#fed7aa",hover:"#ffedd5"},{primary:"#7c2d12",secondary:"#9a3412",muted:"#fdba74"},"#fed7aa");l("Pastel Lavender",{primary:"#a78bfa",primaryHover:"#8b5cf6",success:"#4ade80",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#f5f3ff",secondary:"#ede9fe",tertiary:"#ddd6fe",hover:"#ede9fe"},{primary:"#4c1d95",secondary:"#5b21b6",muted:"#c4b5fd"},"#ddd6fe");l("Pastel Lemon",{primary:"#facc15",primaryHover:"#eab308",success:"#4ade80",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#fefce8",secondary:"#fef9c3",tertiary:"#fef08a",hover:"#fef9c3"},{primary:"#713f12",secondary:"#854d0e",muted:"#fde047"},"#fef08a");l("Pastel Sage",{primary:"#86efac",primaryHover:"#4ade80",success:"#22c55e",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#f0fdf4",secondary:"#dcfce7",tertiary:"#bbf7d0",hover:"#dcfce7"},{primary:"#166534",secondary:"#15803d",muted:"#86efac"},"#bbf7d0");l("Pastel Coral",{primary:"#fb7185",primaryHover:"#f43f5e",success:"#4ade80",warning:"#fcd34d",error:"#ef4444",info:"#67e8f9"},{primary:"#fff1f2",secondary:"#ffe4e6",tertiary:"#fecdd3",hover:"#ffe4e6"},{primary:"#881337",secondary:"#9f1239",muted:"#fda4af"},"#fecdd3");l("Banking",{primary:"#1e3a5f",primaryHover:"#152c4a",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#f8fafc",secondary:"#f1f5f9",tertiary:"#e2e8f0",hover:"#e2e8f0"},{primary:"#0f172a",secondary:"#334155",muted:"#94a3b8"},"#cbd5e1");l("Healthcare",{primary:"#0891b2",primaryHover:"#0e7490",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0284c7"},{primary:"#f0fdfa",secondary:"#e0f7fa",tertiary:"#b2ebf2",hover:"#e0f7fa"},{primary:"#134e4a",secondary:"#1a6b6a",muted:"#80cbc4"},"#b2dfdb");l("Legal",{primary:"#1e293b",primaryHover:"#0f172a",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0284c7"},{primary:"#fafaf9",secondary:"#f5f5f4",tertiary:"#e7e5e4",hover:"#e7e5e4"},{primary:"#0f172a",secondary:"#44403c",muted:"#a8a29e"},"#d6d3d1");l("Tech Startup",{primary:"#7c3aed",primaryHover:"#6d28d9",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#faf5ff",secondary:"#f3e8ff",tertiary:"#e9d5ff",hover:"#f3e8ff"},{primary:"#1e1b4b",secondary:"#4c1d95",muted:"#a78bfa"},"#c4b5fd");l("Enterprise",{primary:"#1e40af",primaryHover:"#1e3a8a",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#eff6ff",secondary:"#dbeafe",tertiary:"#bfdbfe",hover:"#dbeafe"},{primary:"#1e3a5f",secondary:"#1e40af",muted:"#60a5fa"},"#93c5fd");l("Government",{primary:"#1d4ed8",primaryHover:"#1e40af",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#f8fafc",secondary:"#f1f5f9",tertiary:"#e2e8f0",hover:"#e2e8f0"},{primary:"#0f172a",secondary:"#1e293b",muted:"#64748b"},"#cbd5e1");l("Education",{primary:"#059669",primaryHover:"#047857",success:"#16a34a",warning:"#f59e0b",error:"#ef4444",info:"#0891b2"},{primary:"#f0fdf9",secondary:"#d1fae5",tertiary:"#a7f3d0",hover:"#d1fae5"},{primary:"#064e3b",secondary:"#065f46",muted:"#6ee7b7"},"#a7f3d0");l("Real Estate",{primary:"#92400e",primaryHover:"#78350f",success:"#059669",warning:"#b45309",error:"#dc2626",info:"#0891b2"},{primary:"#fffbeb",secondary:"#fef3c7",tertiary:"#fde68a",hover:"#fef3c7"},{primary:"#422006",secondary:"#713f12",muted:"#d97706"},"#fcd34d");l("Nord",{primary:"#5e81ac",primaryHover:"#4c6b90",success:"#a3be8c",warning:"#ebcb8b",error:"#bf616a",info:"#88c0d0"},{primary:"#eceff4",secondary:"#e5e9f0",tertiary:"#d8dee9",hover:"#d8dee9"},{primary:"#2e3440",secondary:"#3b4252",muted:"#4c566a"},"#d8dee9");E("Dracula",{primary:"#bd93f9",primaryHover:"#9d79d9",success:"#50fa7b",warning:"#f1fa8c",error:"#ff5555",info:"#8be9fd"},{primary:"#282a36",secondary:"#343746",tertiary:"#44475a",hover:"#44475a"},{primary:"#f8f8f2",secondary:"#c0c0c0",muted:"#6272a4"},"#44475a");l("Solarized Light",{primary:"#268bd2",primaryHover:"#1a6da0",success:"#859900",warning:"#b58900",error:"#dc322f",info:"#2aa198"},{primary:"#fdf6e3",secondary:"#eee8d5",tertiary:"#e0dbc7",hover:"#eee8d5"},{primary:"#073642",secondary:"#586e75",muted:"#93a1a1"},"#eee8d5");E("Solarized Dark",{primary:"#268bd2",primaryHover:"#3d98db",success:"#859900",warning:"#b58900",error:"#dc322f",info:"#2aa198"},{primary:"#002b36",secondary:"#073642",tertiary:"#0a4858",hover:"#073642"},{primary:"#eee8d5",secondary:"#93a1a1",muted:"#586e75"},"#073642");E("Monokai",{primary:"#66d9ef",primaryHover:"#45c0d6",success:"#a6e22e",warning:"#e6db74",error:"#f92672",info:"#66d9ef"},{primary:"#272822",secondary:"#34352e",tertiary:"#3e3d32",hover:"#3e3d32"},{primary:"#f8f8f2",secondary:"#cfcfc2",muted:"#75715e"},"#3e3d32");E("One Dark",{primary:"#61afef",primaryHover:"#4b9ee0",success:"#98c379",warning:"#e5c07b",error:"#e06c75",info:"#56b6c2"},{primary:"#282c34",secondary:"#2c313a",tertiary:"#353b45",hover:"#353b45"},{primary:"#abb2bf",secondary:"#828997",muted:"#545862"},"#3e4452");E("Synthwave",{primary:"#ff7edb",primaryHover:"#e660c2",success:"#72f1b8",warning:"#fede5d",error:"#fe4450",info:"#36f9f6"},{primary:"#241b2f",secondary:"#2d2140",tertiary:"#362a50",hover:"#362a50"},{primary:"#f0e4fc",secondary:"#b4a0cc",muted:"#6c5c84"},"#4a3866");l("Vaporwave",{primary:"#ff71ce",primaryHover:"#e655b5",success:"#78dcca",warning:"#ffb86c",error:"#ff5555",info:"#76e8fc"},{primary:"#fce4f7",secondary:"#e8d0f4",tertiary:"#d4bcf0",hover:"#e8d0f4"},{primary:"#4a1a4e",secondary:"#7b3f7d",muted:"#c080c0"},"#d8a8e8");E("Terminal Green",{primary:"#00ff41",primaryHover:"#00cc34",success:"#00ff41",warning:"#ffff00",error:"#ff0000",info:"#00ffff"},{primary:"#0a0a0a",secondary:"#0d1a0d",tertiary:"#1a2e1a",hover:"#1a2e1a"},{primary:"#00ff41",secondary:"#00cc33",muted:"#008822"},"#003300");l("Sepia",{primary:"#8b6914",primaryHover:"#704f10",success:"#6b8e23",warning:"#cd853f",error:"#b22222",info:"#5f9ea0"},{primary:"#faf0e6",secondary:"#f5e6d3",tertiary:"#eddcc7",hover:"#f5e6d3"},{primary:"#3e2723",secondary:"#5d4037",muted:"#a1887f"},"#d7ccc8");l("Vintage",{primary:"#8d6e63",primaryHover:"#6d4c41",success:"#66bb6a",warning:"#ffb300",error:"#e53935",info:"#29b6f6"},{primary:"#efebe9",secondary:"#d7ccc8",tertiary:"#bcaaa4",hover:"#d7ccc8"},{primary:"#3e2723",secondary:"#5d4037",muted:"#a1887f"},"#bcaaa4");E("Cyberpunk",{primary:"#00f0ff",primaryHover:"#00c8d4",success:"#39ff14",warning:"#ffff00",error:"#ff003c",info:"#bf00ff"},{primary:"#0a0e17",secondary:"#131824",tertiary:"#1c2333",hover:"#1c2333"},{primary:"#e0fbfc",secondary:"#80d4dd",muted:"#3a6b72"},"#1c3a44");E("Neon",{primary:"#ff00ff",primaryHover:"#cc00cc",success:"#00ff00",warning:"#ffff00",error:"#ff0000",info:"#00ffff"},{primary:"#0d0d0d",secondary:"#1a1a1a",tertiary:"#262626",hover:"#262626"},{primary:"#ffffff",secondary:"#cccccc",muted:"#666666"},"#333333");E("Retrowave",{primary:"#f77fbe",primaryHover:"#e462a3",success:"#72f1b8",warning:"#ffe261",error:"#ff4444",info:"#79e8fb"},{primary:"#1b0a2e",secondary:"#261440",tertiary:"#321e52",hover:"#321e52"},{primary:"#ffe6f7",secondary:"#c9a0c9",muted:"#6b4c7a"},"#4a2d66");l("Christmas",{primary:"#c41e3a",primaryHover:"#a01830",success:"#228b22",warning:"#ffd700",error:"#dc2626",info:"#0891b2"},{primary:"#fef2f2",secondary:"#fde8e8",tertiary:"#f8d0d0",hover:"#fde8e8"},{primary:"#3b0a0a",secondary:"#7f1d1d",muted:"#dc6868"},"#e8a0a0");E("Halloween",{primary:"#ff6600",primaryHover:"#e05500",success:"#4ade80",warning:"#fbbf24",error:"#ff0000",info:"#9333ea"},{primary:"#1a0a00",secondary:"#2d1500",tertiary:"#402000",hover:"#402000"},{primary:"#ffedd5",secondary:"#fdba74",muted:"#9a5c28"},"#5c3400");l("Valentine",{primary:"#e11d48",primaryHover:"#be123c",success:"#10b981",warning:"#f59e0b",error:"#dc2626",info:"#ec4899"},{primary:"#fff1f2",secondary:"#ffe4e6",tertiary:"#fecdd3",hover:"#ffe4e6"},{primary:"#4c0519",secondary:"#881337",muted:"#f9a8d4"},"#fda4af");l("Easter",{primary:"#a78bfa",primaryHover:"#8b5cf6",success:"#4ade80",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#fef9ff",secondary:"#f3e8ff",tertiary:"#e8d5ff",hover:"#f3e8ff"},{primary:"#581c87",secondary:"#6d28d9",muted:"#c4b5fd"},"#ddd6fe");l("Summer Beach",{primary:"#0ea5e9",primaryHover:"#0284c7",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#fffbeb",secondary:"#fef3c7",tertiary:"#fde68a",hover:"#fef3c7"},{primary:"#0c4a6e",secondary:"#0369a1",muted:"#7dd3fc"},"#fcd34d");l("Winter Frost",{primary:"#3b82f6",primaryHover:"#2563eb",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#f0f9ff",secondary:"#e0f2fe",tertiary:"#bae6fd",hover:"#e0f2fe"},{primary:"#1e3a5f",secondary:"#1e40af",muted:"#93c5fd"},"#bfdbfe");l("Cherry Blossom",{primary:"#ec4899",primaryHover:"#db2777",success:"#10b981",warning:"#f59e0b",error:"#ef4444",info:"#06b6d4"},{primary:"#fdf2f8",secondary:"#fce7f3",tertiary:"#fbcfe8",hover:"#fce7f3"},{primary:"#831843",secondary:"#9d174d",muted:"#f9a8d4"},"#fbcfe8");l("Harvest",{primary:"#b45309",primaryHover:"#92400e",success:"#4d7c0f",warning:"#a16207",error:"#b91c1c",info:"#0e7490"},{primary:"#fffbeb",secondary:"#fef3c7",tertiary:"#fde68a",hover:"#fef3c7"},{primary:"#451a03",secondary:"#78350f",muted:"#d97706"},"#fcd34d");l("Japanese Zen",{primary:"#6b7280",primaryHover:"#4b5563",success:"#6b8e23",warning:"#d4a017",error:"#c0392b",info:"#5f9ea0"},{primary:"#faf9f6",secondary:"#f0ece3",tertiary:"#e6e0d4",hover:"#f0ece3"},{primary:"#2c2c2c",secondary:"#5c5c5c",muted:"#a0998a"},"#d5cec0");l("Moroccan",{primary:"#c2410c",primaryHover:"#9a3412",success:"#15803d",warning:"#ca8a04",error:"#b91c1c",info:"#0e7490"},{primary:"#fffbf0",secondary:"#fef3e0",tertiary:"#fde6c4",hover:"#fef3e0"},{primary:"#3a1a00",secondary:"#7c2d12",muted:"#d97706"},"#f5d0a0");l("Scandinavian",{primary:"#4b5563",primaryHover:"#374151",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#ffffff",secondary:"#f9fafb",tertiary:"#f3f4f6",hover:"#f3f4f6"},{primary:"#111827",secondary:"#374151",muted:"#9ca3af"},"#e5e7eb");l("Mediterranean",{primary:"#1e40af",primaryHover:"#1e3a8a",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#eff6ff",secondary:"#dbeafe",tertiary:"#bfdbfe",hover:"#dbeafe"},{primary:"#1e3a5f",secondary:"#2563eb",muted:"#93c5fd"},"#bfdbfe");l("Chinese New Year",{primary:"#dc2626",primaryHover:"#b91c1c",success:"#16a34a",warning:"#d4a017",error:"#ef4444",info:"#0891b2"},{primary:"#fef2f2",secondary:"#fee2e2",tertiary:"#fecaca",hover:"#fee2e2"},{primary:"#450a0a",secondary:"#991b1b",muted:"#f87171"},"#fca5a5");l("Indian Festive",{primary:"#d97706",primaryHover:"#b45309",success:"#16a34a",warning:"#ca8a04",error:"#dc2626",info:"#7c3aed"},{primary:"#fffbeb",secondary:"#fef3c7",tertiary:"#fde68a",hover:"#fef3c7"},{primary:"#451a03",secondary:"#92400e",muted:"#f59e0b"},"#fcd34d");l("Brazilian Carnival",{primary:"#16a34a",primaryHover:"#15803d",success:"#22c55e",warning:"#facc15",error:"#ef4444",info:"#0ea5e9"},{primary:"#f0fdf4",secondary:"#dcfce7",tertiary:"#bbf7d0",hover:"#dcfce7"},{primary:"#052e16",secondary:"#166534",muted:"#4ade80"},"#86efac");l("African Earth",{primary:"#92400e",primaryHover:"#78350f",success:"#4d7c0f",warning:"#a16207",error:"#b91c1c",info:"#0e7490"},{primary:"#faf5f0",secondary:"#f0e6d6",tertiary:"#e6d5bb",hover:"#f0e6d6"},{primary:"#2b1a0e",secondary:"#5c3d1e",muted:"#a08060"},"#d4b896");E("High Contrast Dark",{primary:"#ffff00",primaryHover:"#cccc00",success:"#00ff00",warning:"#ff8c00",error:"#ff0000",info:"#00ffff"},{primary:"#000000",secondary:"#1a1a1a",tertiary:"#333333",hover:"#333333"},{primary:"#ffffff",secondary:"#ffffff",muted:"#cccccc"},"#ffffff");l("Monochrome",{primary:"#404040",primaryHover:"#262626",success:"#4d7c0f",warning:"#a16207",error:"#b91c1c",info:"#0e7490"},{primary:"#fafafa",secondary:"#f0f0f0",tertiary:"#e0e0e0",hover:"#e0e0e0"},{primary:"#1a1a1a",secondary:"#404040",muted:"#808080"},"#c0c0c0");l("Enhanced Contrast",{primary:"#0050b3",primaryHover:"#003d8c",success:"#006400",warning:"#cc7000",error:"#cc0000",info:"#006680"},{primary:"#ffffff",secondary:"#f5f5f5",tertiary:"#ebebeb",hover:"#ebebeb"},{primary:"#000000",secondary:"#1a1a1a",muted:"#595959"},"#8c8c8c");l("Minimalist",{primary:"#18181b",primaryHover:"#27272a",success:"#22c55e",warning:"#eab308",error:"#ef4444",info:"#3b82f6"},{primary:"#ffffff",secondary:"#fafafa",tertiary:"#f5f5f5",hover:"#f5f5f5"},{primary:"#0a0a0a",secondary:"#404040",muted:"#a3a3a3"},"#e5e5e5");E("Warm Dark",{primary:"#f59e0b",primaryHover:"#d97706",success:"#10b981",warning:"#fbbf24",error:"#f87171",info:"#38bdf8"},{primary:"#1c1917",secondary:"#292524",tertiary:"#44403c",hover:"#44403c"},{primary:"#fafaf9",secondary:"#d6d3d1",muted:"#78716c"},"#57534e");E("Soft Dark",{primary:"#a78bfa",primaryHover:"#8b5cf6",success:"#34d399",warning:"#fcd34d",error:"#fb7185",info:"#67e8f9"},{primary:"#1e1e2e",secondary:"#262637",tertiary:"#313147",hover:"#313147"},{primary:"#e8e8f0",secondary:"#a0a0b8",muted:"#5c5c74"},"#3e3e58");l("Coffee",{primary:"#6f4e37",primaryHover:"#5c3d28",success:"#4d7c0f",warning:"#a16207",error:"#b91c1c",info:"#0e7490"},{primary:"#faf6f1",secondary:"#f0e8dc",tertiary:"#e6d8c6",hover:"#f0e8dc"},{primary:"#2c1a0e",secondary:"#5c3d28",muted:"#a08868"},"#d4c4a8");l("Wine",{primary:"#7f1d1d",primaryHover:"#641717",success:"#059669",warning:"#d97706",error:"#dc2626",info:"#0891b2"},{primary:"#fef2f2",secondary:"#fde8e8",tertiary:"#f8d0d0",hover:"#fde8e8"},{primary:"#3b0a0a",secondary:"#7f1d1d",muted:"#dc6868"},"#e8a0a0");c.createContext(null);const De=[{target:".nice-api-designer",titleKey:"tutorial.apiDesigner.intro.title",title:"API designer",contentKey:"tutorial.apiDesigner.intro.content",content:"Define endpoints, parameters, request/response schemas and security for your OpenAPI document.",placement:"auto"}],Ie={openapi:"3.0.3",info:{title:"New API",version:"1.0.0",description:"API description"},paths:{},components:{schemas:{},securitySchemes:{}},tags:[]},ue=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"];function te(r){var s,i;const a=[];return r.openapi||a.push({path:"openapi",message:"OpenAPI version is required",severity:"error"}),(s=r.info)!=null&&s.title||a.push({path:"info.title",message:"API title is required",severity:"error"}),(i=r.info)!=null&&i.version||a.push({path:"info.version",message:"API version is required",severity:"error"}),Object.entries(r.paths||{}).forEach(([t,u])=>{t.startsWith("/")||a.push({path:`paths.${t}`,message:"Path must start with /",severity:"error"}),ue.forEach(f=>{const y=u[f.toLowerCase()];y&&!y.responses&&a.push({path:`paths.${t}.${f.toLowerCase()}.responses`,message:"Responses are required",severity:"error"})})}),a}function $e({schema:r,onChange:a,onSave:s,readOnly:i=!1,className:t="",tutorial:u}){var D,L;const[f,y]=c.useState(r||Ie),[b,d]=c.useState(null),[g,C]=c.useState(null),[m,k]=c.useState("info"),[v,A]=c.useState([]),S=c.useCallback(x=>{y(j=>{const w=x(j);return a==null||a(w),A(te(w)),w})},[a]),O=c.useCallback(()=>{const x="/new-endpoint";S(j=>({...j,paths:{...j.paths,[x]:{get:{summary:"New endpoint",responses:{200:{description:"Success"}}}}}})),d(x),C("get")},[S]),M=c.useCallback(x=>{S(j=>{const{[x]:w,...U}=j.paths;return{...j,paths:U}}),d(null),C(null)},[S]),V=c.useCallback(()=>{const x="NewSchema";S(j=>{var w;return{...j,components:{...j.components,schemas:{...(w=j.components)==null?void 0:w.schemas,[x]:{type:"object",properties:{}}}}}})},[S]),P=c.useCallback(()=>{const x=te(f);A(x),x.filter(j=>j.severity==="error").length===0&&(s==null||s(f))},[f,s]),$=Object.entries(f.paths).flatMap(([x,j])=>ue.filter(w=>j[w.toLowerCase()]).map(w=>({path:x,method:w,operation:j[w.toLowerCase()]})));return e.jsxs("div",{className:`nice-api-designer ${t}`,style:{position:"relative"},children:[u&&e.jsx("div",{style:{position:"absolute",top:8,right:8,zIndex:5},children:e.jsx(Y,{steps:X(u,De)})}),e.jsxs("div",{className:"nice-api-designer__toolbar",children:[e.jsx("div",{className:"nice-api-designer__tabs",children:["info","paths","schemas","security","preview"].map(x=>e.jsx("button",{className:`nice-api-designer__tab ${m===x?"nice-api-designer__tab--active":""}`,onClick:()=>k(x),children:x.charAt(0).toUpperCase()+x.slice(1)},x))}),!i&&e.jsx("button",{className:"nice-api-designer__save-btn",onClick:P,children:"Save"})]}),v.length>0&&e.jsx("div",{className:"nice-api-designer__errors",children:v.map((x,j)=>e.jsxs("div",{className:`nice-api-designer__error nice-api-designer__error--${x.severity}`,children:[e.jsxs("strong",{children:[x.path,":"]})," ",x.message]},j))}),e.jsxs("div",{className:"nice-api-designer__content",children:[m==="info"&&e.jsx(Oe,{schema:f,onChange:S,readOnly:i}),m==="paths"&&e.jsx(Me,{endpoints:$,schema:f,selectedPath:b,selectedMethod:g,onSelectEndpoint:(x,j)=>{d(x),C(j)},onAdd:O,onDelete:M,onChange:S,readOnly:i}),m==="schemas"&&e.jsx(Le,{schemas:((D=f.components)==null?void 0:D.schemas)||{},onAdd:V,onChange:x=>S(j=>({...j,components:{...j.components,schemas:x}})),readOnly:i}),m==="security"&&e.jsx(Ue,{schemes:((L=f.components)==null?void 0:L.securitySchemes)||{},onChange:x=>S(j=>({...j,components:{...j.components,securitySchemes:x}})),readOnly:i}),m==="preview"&&e.jsx(qe,{schema:f})]})]})}function Oe({schema:r,onChange:a,readOnly:s}){return e.jsxs("div",{className:"nice-api-designer__info-editor",children:[e.jsx("h3",{children:"API Information"}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Title"}),e.jsx("input",{type:"text",value:r.info.title,onChange:i=>a(t=>({...t,info:{...t.info,title:i.target.value}})),disabled:s})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Version"}),e.jsx("input",{type:"text",value:r.info.version,onChange:i=>a(t=>({...t,info:{...t.info,version:i.target.value}})),disabled:s})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Description"}),e.jsx("textarea",{value:r.info.description||"",onChange:i=>a(t=>({...t,info:{...t.info,description:i.target.value}})),disabled:s,rows:5})]}),e.jsx("h4",{children:"Servers"}),(r.servers||[]).map((i,t)=>e.jsxs("div",{className:"nice-api-designer__server",children:[e.jsx("input",{type:"text",value:i.url,placeholder:"Server URL",onChange:u=>a(f=>{var y;return{...f,servers:(y=f.servers)==null?void 0:y.map((b,d)=>d===t?{...b,url:u.target.value}:b)}}),disabled:s}),e.jsx("input",{type:"text",value:i.description||"",placeholder:"Description",onChange:u=>a(f=>{var y;return{...f,servers:(y=f.servers)==null?void 0:y.map((b,d)=>d===t?{...b,description:u.target.value}:b)}}),disabled:s})]},t)),!s&&e.jsx("button",{onClick:()=>a(i=>({...i,servers:[...i.servers||[],{url:"https://api.example.com"}]})),children:"Add Server"})]})}function Me({endpoints:r,schema:a,selectedPath:s,selectedMethod:i,onSelectEndpoint:t,onAdd:u,onDelete:f,onChange:y,readOnly:b}){var g;const d=s&&i?(g=a.paths[s])==null?void 0:g[i]:null;return e.jsxs("div",{className:"nice-api-designer__paths-editor",children:[e.jsxs("div",{className:"nice-api-designer__endpoints-list",children:[e.jsxs("div",{className:"nice-api-designer__list-header",children:[e.jsx("h3",{children:"Endpoints"}),!b&&e.jsx("button",{onClick:u,children:"+ Add"})]}),r.map(({path:C,method:m})=>e.jsxs("div",{className:`nice-api-designer__endpoint ${s===C&&i===m.toLowerCase()?"nice-api-designer__endpoint--selected":""}`,onClick:()=>t(C,m.toLowerCase()),children:[e.jsx("span",{className:`nice-api-designer__method nice-api-designer__method--${m.toLowerCase()}`,children:m}),e.jsx("span",{className:"nice-api-designer__path",children:C})]},`${m}-${C}`))]}),d&&s&&i&&e.jsxs("div",{className:"nice-api-designer__operation-editor",children:[e.jsxs("h3",{children:[i.toUpperCase()," ",s]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Summary"}),e.jsx("input",{type:"text",value:d.summary||"",onChange:C=>y(m=>({...m,paths:{...m.paths,[s]:{...m.paths[s],[i]:{...d,summary:C.target.value}}}})),disabled:b})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Description"}),e.jsx("textarea",{value:d.description||"",onChange:C=>y(m=>({...m,paths:{...m.paths,[s]:{...m.paths[s],[i]:{...d,description:C.target.value}}}})),disabled:b,rows:3})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Operation ID"}),e.jsx("input",{type:"text",value:d.operationId||"",onChange:C=>y(m=>({...m,paths:{...m.paths,[s]:{...m.paths[s],[i]:{...d,operationId:C.target.value}}}})),disabled:b})]}),!b&&e.jsx("button",{className:"nice-api-designer__delete-btn",onClick:()=>f(s),children:"Delete Endpoint"})]})]})}function Le({schemas:r,onAdd:a,onChange:s,readOnly:i}){const[t,u]=c.useState(null);return e.jsxs("div",{className:"nice-api-designer__schemas-editor",children:[e.jsxs("div",{className:"nice-api-designer__schemas-list",children:[e.jsxs("div",{className:"nice-api-designer__list-header",children:[e.jsx("h3",{children:"Schemas"}),!i&&e.jsx("button",{onClick:a,children:"+ Add"})]}),Object.keys(r).map(f=>e.jsx("div",{className:`nice-api-designer__schema-item ${t===f?"nice-api-designer__schema-item--selected":""}`,onClick:()=>u(f),children:f},f))]}),t&&r[t]&&e.jsxs("div",{className:"nice-api-designer__schema-editor",children:[e.jsx("h3",{children:t}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Type"}),e.jsxs("select",{value:r[t].type||"object",onChange:f=>s({...r,[t]:{...r[t],type:f.target.value}}),disabled:i,children:[e.jsx("option",{value:"object",children:"object"}),e.jsx("option",{value:"array",children:"array"}),e.jsx("option",{value:"string",children:"string"}),e.jsx("option",{value:"number",children:"number"}),e.jsx("option",{value:"integer",children:"integer"}),e.jsx("option",{value:"boolean",children:"boolean"})]})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"Description"}),e.jsx("textarea",{value:r[t].description||"",onChange:f=>s({...r,[t]:{...r[t],description:f.target.value}}),disabled:i,rows:3})]}),e.jsxs("div",{className:"nice-api-designer__field",children:[e.jsx("label",{children:"JSON Schema"}),e.jsx("textarea",{value:JSON.stringify(r[t],null,2),onChange:f=>{try{const y=JSON.parse(f.target.value);s({...r,[t]:y})}catch{}},disabled:i,rows:10,className:"nice-api-designer__code"})]})]})]})}function Ue({schemes:r,onChange:a,readOnly:s}){const i=()=>{a({...r,newScheme:{type:"apiKey",name:"X-API-Key",in:"header"}})};return e.jsxs("div",{className:"nice-api-designer__security-editor",children:[e.jsxs("div",{className:"nice-api-designer__list-header",children:[e.jsx("h3",{children:"Security Schemes"}),!s&&e.jsx("button",{onClick:i,children:"+ Add"})]}),Object.entries(r).map(([t,u])=>e.jsxs("div",{className:"nice-api-designer__security-item",children:[e.jsx("h4",{children:t}),e.jsx("pre",{children:JSON.stringify(u,null,2)})]},t))]})}function qe({schema:r}){return e.jsxs("div",{className:"nice-api-designer__json-preview",children:[e.jsx("h3",{children:"OpenAPI Specification"}),e.jsx("pre",{className:"nice-api-designer__code",children:JSON.stringify(r,null,2)})]})}const Ke=[{target:".nice-api-tester",titleKey:"tutorial.apiTester.intro.title",title:"API tester",contentKey:"tutorial.apiTester.intro.content",content:"Build requests with collections and environment variables, send them and assert on the responses.",placement:"auto"}],Be=["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"],Fe={id:"",name:"New Request",method:"GET",url:"",headers:{},queryParams:{}};function ee(r,a){return r.replace(/\{\{(\w+)\}\}/g,(s,i)=>a[i]||`{{${i}}}`)}function Ve(r,a){const s=Object.entries(a).filter(([,i])=>i).map(([i,t])=>`${encodeURIComponent(i)}=${encodeURIComponent(t)}`).join("&");return s?`${r}?${s}`:r}function ze({collections:r=[],environments:a=[],onRequest:s,onSaveCollection:i,className:t="",tutorial:u}){const[f,y]=c.useState(r),[b,d]=c.useState(a),[g,C]=c.useState(a.find(n=>n.isActive)||null),[m,k]=c.useState({...Fe,id:crypto.randomUUID()}),[v,A]=c.useState(null),[S,O]=c.useState(!1),[M,V]=c.useState("none"),[P,$]=c.useState("params"),[D,L]=c.useState("body"),[x,j]=c.useState(""),[w,U]=c.useState(""),[q,K]=c.useState([]),[I,z]=c.useState([]),B=c.useRef(null),J=c.useCallback(async()=>{var R;if(!m.url)return;O(!0),A(null),K([]);const n=Object.fromEntries(Object.entries((g==null?void 0:g.variables)||{}).map(([H,T])=>[H,T.value])),o={...m,url:ee(m.url,n),headers:Object.fromEntries(Object.entries(m.headers).map(([H,T])=>[H,ee(T,n)])),queryParams:Object.fromEntries(Object.entries(m.queryParams).map(([H,T])=>[H,ee(T,n)]))},_=performance.now();try{let H;if(s)H=await s(o);else{B.current=new AbortController;const T={...o.headers};m.auth&&We(T,m.auth);const he=Ve(o.url,o.queryParams),se={method:o.method,headers:T,signal:B.current.signal};["POST","PUT","PATCH"].includes(o.method)&&((R=m.body)!=null&&R.content)&&(se.body=typeof m.body.content=="string"?m.body.content:JSON.stringify(m.body.content),m.body.type==="json"&&(T["Content-Type"]="application/json"));const G=await fetch(he,se),Q=await G.text();let Z;try{Z=JSON.parse(Q)}catch{Z=Q}const ge=performance.now();H={status:G.status,statusText:G.statusText,headers:Object.fromEntries(G.headers.entries()),body:Z,time:Math.round(ge-_),size:new Blob([Q]).size,timestamp:new Date}}if(A(H),z(T=>[...T,{request:m,response:H}].slice(-50)),w){const T=Ge(w,H);K(T)}}catch(H){H.name!=="AbortError"&&A({status:0,statusText:"Error",headers:{},body:{error:H.message},time:Math.round(performance.now()-_),size:0,timestamp:new Date})}finally{O(!1),B.current=null}},[m,g,s,w]),W=c.useCallback(()=>{var n;(n=B.current)==null||n.abort(),O(!1)},[]),p=c.useCallback(()=>{k(n=>({...n,headers:{...n.headers,"":""}}))},[]),h=c.useCallback(()=>{k(n=>({...n,queryParams:{...n.queryParams,"":""}}))},[]),N=c.useCallback(()=>{if(f.length===0){const n={id:crypto.randomUUID(),name:"My Collection",requests:[m]};y([n]),i==null||i(n)}else{const n={...f[0],requests:[...f[0].requests,m]};y(o=>[n,...o.slice(1)]),i==null||i(n)}},[f,m,i]);return e.jsxs("div",{className:`nice-api-tester ${t}`,style:{position:"relative"},children:[u&&e.jsx("div",{style:{position:"absolute",top:8,right:8,zIndex:5},children:e.jsx(Y,{steps:X(u,Ke)})}),e.jsx("div",{className:"nice-api-tester__toolbar",children:e.jsx("div",{className:"nice-api-tester__env-selector",children:e.jsxs("select",{value:(g==null?void 0:g.id)||"",onChange:n=>C(b.find(o=>o.id===n.target.value)||null),children:[e.jsx("option",{value:"",children:"No Environment"}),b.map(n=>e.jsx("option",{value:n.id,children:n.name},n.id))]})})}),e.jsxs("div",{className:"nice-api-tester__request-bar",children:[e.jsx("select",{value:m.method,onChange:n=>k(o=>({...o,method:n.target.value})),className:`nice-api-tester__method nice-api-tester__method--${m.method.toLowerCase()}`,children:Be.map(n=>e.jsx("option",{value:n,children:n},n))}),e.jsx("input",{type:"text",value:m.url,onChange:n=>k(o=>({...o,url:n.target.value})),placeholder:"Enter request URL",className:"nice-api-tester__url-input"}),e.jsx("button",{onClick:S?W:J,className:`nice-api-tester__send-btn ${S?"nice-api-tester__send-btn--loading":""}`,children:S?"Cancel":"Send"}),e.jsx("button",{onClick:N,className:"nice-api-tester__save-btn",children:"Save"})]}),e.jsxs("div",{className:"nice-api-tester__main",children:[e.jsxs("div",{className:"nice-api-tester__request-panel",children:[e.jsx("div",{className:"nice-api-tester__tabs",children:["params","headers","body","auth","tests"].map(n=>e.jsx("button",{className:`nice-api-tester__tab ${P===n?"nice-api-tester__tab--active":""}`,onClick:()=>$(n),children:n.charAt(0).toUpperCase()+n.slice(1)},n))}),e.jsxs("div",{className:"nice-api-tester__tab-content",children:[P==="params"&&e.jsx(Xe,{params:m.queryParams,onChange:n=>k(o=>({...o,queryParams:n})),onAdd:h}),P==="headers"&&e.jsx(Ye,{headers:m.headers,onChange:n=>k(o=>({...o,headers:n})),onAdd:p}),P==="body"&&e.jsx(Qe,{body:m.body,bodyTab:M,onBodyTabChange:V,onChange:n=>k(o=>({...o,body:n}))}),P==="auth"&&e.jsx(Ze,{auth:m.auth,onChange:n=>k(o=>({...o,auth:n}))}),P==="tests"&&e.jsx(er,{preRequestScript:x,testScript:w,onPreRequestChange:j,onTestChange:U})]})]}),e.jsx("div",{className:"nice-api-tester__response-panel",children:v?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-api-tester__response-meta",children:[e.jsxs("span",{className:`nice-api-tester__status nice-api-tester__status--${Math.floor(v.status/100)}`,children:[v.status," ",v.statusText]}),e.jsxs("span",{className:"nice-api-tester__time",children:[v.time,"ms"]}),e.jsx("span",{className:"nice-api-tester__size",children:Je(v.size)})]}),e.jsx("div",{className:"nice-api-tester__tabs",children:["body","headers","tests"].map(n=>e.jsxs("button",{className:`nice-api-tester__tab ${D===n?"nice-api-tester__tab--active":""}`,onClick:()=>L(n),children:[n.charAt(0).toUpperCase()+n.slice(1),n==="tests"&&q.length>0&&e.jsxs("span",{className:"nice-api-tester__test-badge",children:[q.filter(o=>o.passed).length,"/",q.length]})]},n))}),e.jsxs("div",{className:"nice-api-tester__response-content",children:[D==="body"&&e.jsx("pre",{className:"nice-api-tester__response-body",children:typeof v.body=="string"?v.body:JSON.stringify(v.body,null,2)}),D==="headers"&&e.jsx("div",{className:"nice-api-tester__response-headers",children:Object.entries(v.headers).map(([n,o])=>e.jsxs("div",{className:"nice-api-tester__header-row",children:[e.jsx("span",{className:"nice-api-tester__header-key",children:n}),e.jsx("span",{className:"nice-api-tester__header-value",children:o})]},n))}),D==="tests"&&e.jsx("div",{className:"nice-api-tester__test-results",children:q.map((n,o)=>e.jsxs("div",{className:`nice-api-tester__test-result nice-api-tester__test-result--${n.passed?"pass":"fail"}`,children:[e.jsx("span",{className:"nice-api-tester__test-icon",children:n.passed?"✓":"✗"}),e.jsx("span",{className:"nice-api-tester__test-name",children:n.name}),n.message&&e.jsx("span",{className:"nice-api-tester__test-message",children:n.message})]},o))})]})]}):e.jsx("div",{className:"nice-api-tester__empty-response",children:S?"Loading...":"Send a request to see the response"})})]}),I.length>0&&e.jsxs("div",{className:"nice-api-tester__history",children:[e.jsx("h4",{children:"History"}),e.jsx("div",{className:"nice-api-tester__history-list",children:I.slice().reverse().map(({request:n,response:o},_)=>e.jsxs("div",{className:"nice-api-tester__history-item",onClick:()=>k(n),children:[e.jsx("span",{className:`nice-api-tester__method nice-api-tester__method--${n.method.toLowerCase()}`,children:n.method}),e.jsx("span",{className:"nice-api-tester__history-url",children:n.url}),e.jsx("span",{className:`nice-api-tester__status nice-api-tester__status--${Math.floor(o.status/100)}`,children:o.status})]},_))})]})]})}function We(r,a){var s,i,t,u,f;switch(a.type){case"bearer":r.Authorization=`${((s=a.bearer)==null?void 0:s.prefix)||"Bearer"} ${(i=a.bearer)==null?void 0:i.token}`;break;case"basic":r.Authorization=`Basic ${btoa(`${(t=a.basic)==null?void 0:t.username}:${(u=a.basic)==null?void 0:u.password}`)}`;break;case"api-key":((f=a.apiKey)==null?void 0:f.in)==="header"&&(r[a.apiKey.key]=a.apiKey.value);break}}function Je(r){return r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:`${(r/(1024*1024)).toFixed(1)} MB`}function Ge(r,a){const s=[],i={response:{code:a.status,status:a.statusText,headers:a.headers,json:()=>a.body,text:()=>typeof a.body=="string"?a.body:JSON.stringify(a.body),responseTime:a.time},test:(t,u)=>{const f=performance.now();try{u(),s.push({name:t,passed:!0,duration:performance.now()-f})}catch(y){s.push({name:t,passed:!1,message:y.message,duration:performance.now()-f})}},expect:t=>({to:{equal:u=>{if(t!==u)throw new Error(`Expected ${u} but got ${t}`)},be:{oneOf:u=>{if(!u.includes(t))throw new Error(`Expected ${t} to be one of ${u}`)}},have:{property:u=>{if(typeof t!="object"||t===null||!(u in t))throw new Error(`Expected object to have property ${u}`)}}}})};try{new Function("pm",r)(i)}catch(t){s.push({name:"Script Error",passed:!1,message:t.message,duration:0})}return s}function be({items:r,onChange:a,onAdd:s,keyPlaceholder:i="Key",valuePlaceholder:t="Value"}){return e.jsxs("div",{className:"nice-api-tester__kv-editor",children:[Object.entries(r).map(([u,f],y)=>e.jsxs("div",{className:"nice-api-tester__kv-row",children:[e.jsx("input",{type:"text",value:u,placeholder:i,onChange:b=>{const d=Object.entries(r);d[y]=[b.target.value,f],a(Object.fromEntries(d))}}),e.jsx("input",{type:"text",value:f,placeholder:t,onChange:b=>a({...r,[u]:b.target.value})}),e.jsx("button",{onClick:()=>{const{[u]:b,...d}=r;a(d)},children:"×"})]},y)),e.jsx("button",{onClick:s,className:"nice-api-tester__add-btn",children:"+ Add"})]})}function Xe({params:r,onChange:a,onAdd:s}){return e.jsx(be,{items:r,onChange:a,onAdd:s,keyPlaceholder:"Parameter",valuePlaceholder:"Value"})}function Ye({headers:r,onChange:a,onAdd:s}){return e.jsx(be,{items:r,onChange:a,onAdd:s,keyPlaceholder:"Header",valuePlaceholder:"Value"})}function Qe({body:r,bodyTab:a,onBodyTabChange:s,onChange:i}){return e.jsxs("div",{className:"nice-api-tester__body-editor",children:[e.jsx("div",{className:"nice-api-tester__body-tabs",children:["none","json","form-data","raw"].map(t=>e.jsxs("label",{children:[e.jsx("input",{type:"radio",checked:a===t,onChange:()=>{s(t),i({type:t,content:""})}}),t]},t))}),a!=="none"&&e.jsx("textarea",{value:typeof(r==null?void 0:r.content)=="string"?r.content:JSON.stringify(r==null?void 0:r.content,null,2),onChange:t=>i({type:a,content:t.target.value}),placeholder:a==="json"?'{ "key": "value" }':"Enter body content",rows:10,className:"nice-api-tester__body-textarea"})]})}function Ze({auth:r,onChange:a}){var s,i,t,u,f,y;return e.jsxs("div",{className:"nice-api-tester__auth-editor",children:[e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Type"}),e.jsxs("select",{value:(r==null?void 0:r.type)||"none",onChange:b=>a({type:b.target.value}),children:[e.jsx("option",{value:"none",children:"No Auth"}),e.jsx("option",{value:"api-key",children:"API Key"}),e.jsx("option",{value:"bearer",children:"Bearer Token"}),e.jsx("option",{value:"basic",children:"Basic Auth"}),e.jsx("option",{value:"oauth2",children:"OAuth 2.0"})]})]}),(r==null?void 0:r.type)==="api-key"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Key"}),e.jsx("input",{type:"text",value:((s=r.apiKey)==null?void 0:s.key)||"",onChange:b=>{var d,g;return a({...r,apiKey:{...r.apiKey,key:b.target.value,value:((d=r.apiKey)==null?void 0:d.value)||"",in:((g=r.apiKey)==null?void 0:g.in)||"header"}})},placeholder:"X-API-Key"})]}),e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Value"}),e.jsx("input",{type:"text",value:((i=r.apiKey)==null?void 0:i.value)||"",onChange:b=>{var d,g;return a({...r,apiKey:{...r.apiKey,value:b.target.value,key:((d=r.apiKey)==null?void 0:d.key)||"",in:((g=r.apiKey)==null?void 0:g.in)||"header"}})},placeholder:"your-api-key"})]}),e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Add to"}),e.jsxs("select",{value:((t=r.apiKey)==null?void 0:t.in)||"header",onChange:b=>{var d,g;return a({...r,apiKey:{...r.apiKey,in:b.target.value,key:((d=r.apiKey)==null?void 0:d.key)||"",value:((g=r.apiKey)==null?void 0:g.value)||""}})},children:[e.jsx("option",{value:"header",children:"Header"}),e.jsx("option",{value:"query",children:"Query Params"})]})]})]}),(r==null?void 0:r.type)==="bearer"&&e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Token"}),e.jsx("input",{type:"text",value:((u=r.bearer)==null?void 0:u.token)||"",onChange:b=>a({...r,bearer:{token:b.target.value}}),placeholder:"your-bearer-token"})]}),(r==null?void 0:r.type)==="basic"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Username"}),e.jsx("input",{type:"text",value:((f=r.basic)==null?void 0:f.username)||"",onChange:b=>{var d;return a({...r,basic:{...r.basic,username:b.target.value,password:((d=r.basic)==null?void 0:d.password)||""}})}})]}),e.jsxs("div",{className:"nice-api-tester__field",children:[e.jsx("label",{children:"Password"}),e.jsx("input",{type:"password",value:((y=r.basic)==null?void 0:y.password)||"",onChange:b=>{var d;return a({...r,basic:{...r.basic,password:b.target.value,username:((d=r.basic)==null?void 0:d.username)||""}})}})]})]})]})}function er({preRequestScript:r,testScript:a,onPreRequestChange:s,onTestChange:i}){return e.jsxs("div",{className:"nice-api-tester__tests-editor",children:[e.jsxs("div",{className:"nice-api-tester__script-section",children:[e.jsx("h4",{children:"Pre-request Script"}),e.jsx("textarea",{value:r,onChange:t=>s(t.target.value),placeholder:"// Code to run before the request",rows:5})]}),e.jsxs("div",{className:"nice-api-tester__script-section",children:[e.jsx("h4",{children:"Tests"}),e.jsx("textarea",{value:a,onChange:t=>i(t.target.value),placeholder:`pm.test("Status code is 200", function () {
|
|
2
28
|
pm.expect(pm.response.code).to.equal(200);
|
|
3
|
-
});`,rows:8})]})]})}const
|
|
4
|
-
return input;`};case"error-handler":return{strategy:"retry",maxRetries:3};default:return{}}}function Ce({node:s,isSelected:t,onSelect:r,onDelete:i,onPositionChange:n,onStartConnection:o,onEndConnection:l}){const[j,u]=d.useState(!1),[p,C]=d.useState({x:0,y:0}),h=d.useRef(null),x=X.find(y=>y.type===s.type),w=y=>{y.button===0&&(y.stopPropagation(),u(!0),C({x:y.clientX-s.position.x,y:y.clientY-s.position.y}),r())};return d.useEffect(()=>{if(!j)return;const y=T=>{n({x:T.clientX-p.x,y:T.clientY-p.y})},N=()=>{u(!1)};return window.addEventListener("mousemove",y),window.addEventListener("mouseup",N),()=>{window.removeEventListener("mousemove",y),window.removeEventListener("mouseup",N)}},[j,p,n]),e.jsxs("div",{ref:h,className:`nice-integration-builder__node nice-integration-builder__node--${s.type} ${t?"nice-integration-builder__node--selected":""}`,style:{left:s.position.x,top:s.position.y},onMouseDown:w,children:[e.jsxs("div",{className:"nice-integration-builder__node-header",children:[e.jsx("span",{className:"nice-integration-builder__node-icon",children:(x==null?void 0:x.icon)||"📦"}),e.jsx("span",{className:"nice-integration-builder__node-name",children:s.name}),e.jsx("button",{className:"nice-integration-builder__node-delete",onClick:y=>{y.stopPropagation(),i()},children:"×"})]}),s.inputs.map(y=>e.jsxs("div",{className:"nice-integration-builder__port nice-integration-builder__port--input",onMouseUp:()=>l(y),children:[e.jsx("span",{className:"nice-integration-builder__port-dot"}),e.jsx("span",{className:"nice-integration-builder__port-label",children:y})]},y)),s.outputs.map(y=>e.jsxs("div",{className:"nice-integration-builder__port nice-integration-builder__port--output",onMouseDown:N=>{N.stopPropagation(),o(y)},children:[e.jsx("span",{className:"nice-integration-builder__port-label",children:y}),e.jsx("span",{className:"nice-integration-builder__port-dot"})]},y))]})}function we({node:s,onChange:t,onClose:r}){return e.jsxs("div",{className:"nice-integration-builder__properties",children:[e.jsxs("div",{className:"nice-integration-builder__properties-header",children:[e.jsx("h4",{children:s.name}),e.jsx("button",{onClick:r,children:"×"})]}),e.jsxs("div",{className:"nice-integration-builder__properties-content",children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Name"}),e.jsx("input",{type:"text",value:s.name,onChange:i=>t({name:i.target.value})})]}),s.type==="http-request"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Method"}),e.jsx("select",{value:s.config.method||"GET",onChange:i=>t({config:{...s.config,method:i.target.value}}),children:["GET","POST","PUT","PATCH","DELETE"].map(i=>e.jsx("option",{value:i,children:i},i))})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"URL"}),e.jsx("input",{type:"text",value:s.config.url||"",onChange:i=>t({config:{...s.config,url:i.target.value}}),placeholder:"https://api.example.com/endpoint"})]})]}),s.type==="delay"&&e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Duration (ms)"}),e.jsx("input",{type:"number",value:s.config.duration||1e3,onChange:i=>t({config:{...s.config,duration:parseInt(i.target.value,10)}})})]}),s.type==="set-variable"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Variable Name"}),e.jsx("input",{type:"text",value:s.config.name||"",onChange:i=>t({config:{...s.config,name:i.target.value}})})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Value"}),e.jsx("input",{type:"text",value:s.config.value||"",onChange:i=>t({config:{...s.config,value:i.target.value}})})]})]}),s.type==="function"&&e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Code"}),e.jsx("textarea",{value:s.config.code||"",onChange:i=>t({config:{...s.config,code:i.target.value}}),rows:10,className:"nice-integration-builder__code-input"})]}),s.type==="email"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"To"}),e.jsx("input",{type:"text",value:s.config.to||"",onChange:i=>t({config:{...s.config,to:i.target.value}})})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Subject"}),e.jsx("input",{type:"text",value:s.config.subject||"",onChange:i=>t({config:{...s.config,subject:i.target.value}})})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Body"}),e.jsx("textarea",{value:s.config.body||"",onChange:i=>t({config:{...s.config,body:i.target.value}}),rows:5})]})]})]})]})}function Se({variables:s,onChange:t}){const r=()=>{t({...s,newVariable:""})};return e.jsxs("div",{className:"nice-integration-builder__variables",children:[e.jsx("h4",{children:"Flow Variables"}),e.jsx("div",{className:"nice-integration-builder__variables-list",children:Object.entries(s).map(([i,n])=>e.jsxs("div",{className:"nice-integration-builder__variable-row",children:[e.jsx("input",{type:"text",value:i,onChange:o=>{const{[i]:l,...j}=s;t({...j,[o.target.value]:n})},placeholder:"Name"}),e.jsx("input",{type:"text",value:String(n),onChange:o=>t({...s,[i]:o.target.value}),placeholder:"Value"}),e.jsx("button",{onClick:()=>{const{[i]:o,...l}=s;t(l)},children:"×"})]},i))}),e.jsx("button",{onClick:r,children:"+ Add Variable"})]})}function Ee({errorHandling:s,schedule:t,onChange:r}){return e.jsxs("div",{className:"nice-integration-builder__settings",children:[e.jsx("h4",{children:"Error Handling"}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Strategy"}),e.jsxs("select",{value:s.strategy,onChange:i=>r({...s,strategy:i.target.value},t),children:[e.jsx("option",{value:"stop",children:"Stop on error"}),e.jsx("option",{value:"continue",children:"Continue on error"}),e.jsx("option",{value:"retry",children:"Retry on error"})]})]}),s.strategy==="retry"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Max Retries"}),e.jsx("input",{type:"number",value:s.maxRetries||3,onChange:i=>r({...s,maxRetries:parseInt(i.target.value,10)},t)})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Retry Delay (ms)"}),e.jsx("input",{type:"number",value:s.retryDelay||1e3,onChange:i=>r({...s,retryDelay:parseInt(i.target.value,10)},t)})]})]}),e.jsx("h4",{children:"Schedule"}),e.jsx("div",{className:"nice-integration-builder__field",children:e.jsxs("label",{children:[e.jsx("input",{type:"checkbox",checked:(t==null?void 0:t.enabled)||!1,onChange:i=>r(s,{...t,enabled:i.target.checked})}),"Enable scheduled execution"]})}),(t==null?void 0:t.enabled)&&e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Cron Expression"}),e.jsx("input",{type:"text",value:t.cron||"",onChange:i=>r(s,{...t,cron:i.target.value}),placeholder:"0 0 * * *"})]})]})}exports.NiceAPIDesigner=te;exports.NiceAPITester=ue;exports.NiceIntegrationBuilder=ye;
|
|
29
|
+
});`,rows:8})]})]})}const rr=[{target:".nice-integration-builder",titleKey:"tutorial.integrationBuilder.intro.title",title:"Integration builder",contentKey:"tutorial.integrationBuilder.intro.content",content:"Wire a flow of nodes (triggers → actions → error handling) and connect them to build an integration.",placement:"auto"}],re=[{type:"trigger",label:"Trigger",icon:"⚡",category:"Control"},{type:"http-request",label:"HTTP Request",icon:"🌐",category:"Actions"},{type:"transform",label:"Transform",icon:"🔄",category:"Data"},{type:"filter",label:"Filter",icon:"🔍",category:"Data"},{type:"switch",label:"Switch",icon:"⑂",category:"Control"},{type:"loop",label:"Loop",icon:"🔁",category:"Control"},{type:"delay",label:"Delay",icon:"⏱️",category:"Control"},{type:"set-variable",label:"Set Variable",icon:"📝",category:"Data"},{type:"database",label:"Database",icon:"🗄️",category:"Actions"},{type:"email",label:"Email",icon:"✉️",category:"Actions"},{type:"webhook",label:"Webhook",icon:"🔗",category:"Actions"},{type:"function",label:"Function",icon:"ƒ",category:"Actions"},{type:"error-handler",label:"Error Handler",icon:"⚠️",category:"Control"}],ar={id:"",name:"New Flow",nodes:[],connections:[],variables:{},triggers:[],errorHandling:{strategy:"stop"}};function sr({flow:r,connectors:a=[],onChange:s,onSave:i,onRun:t,className:u="",tutorial:f}){const[y,b]=c.useState(r||{...ar,id:crypto.randomUUID()}),[d,g]=c.useState(null),[C,m]=c.useState(!0),[k,v]=c.useState("canvas"),[A,S]=c.useState(!1),[O,M]=c.useState(null),[V,P]=c.useState(!1),[$,D]=c.useState(null),[L,x]=c.useState(!1),j=c.useRef(null),w=c.useCallback(p=>{b(h=>{const N=p(h);return s==null||s(N),N})},[s]),U=c.useCallback((p,h)=>{var n;const N={id:crypto.randomUUID(),type:p,name:((n=re.find(o=>o.type===p))==null?void 0:n.label)||p,position:h,config:ir(p),inputs:p!=="trigger"?["input"]:[],outputs:["output"]};w(o=>({...o,nodes:[...o.nodes,N]})),g(N)},[w]),q=c.useCallback(p=>{w(h=>({...h,nodes:h.nodes.filter(N=>N.id!==p),connections:h.connections.filter(N=>N.sourceNodeId!==p&&N.targetNodeId!==p)})),g(null)},[w]),K=c.useCallback((p,h)=>{w(N=>({...N,nodes:N.nodes.map(n=>n.id===p?{...n,...h}:n)})),(d==null?void 0:d.id)===p&&g(N=>N?{...N,...h}:null)},[w,d]),I=c.useCallback((p,h,N,n)=>{p===N||y.connections.some(_=>_.sourceNodeId===p&&_.targetNodeId===N&&_.sourceOutput===h&&_.targetInput===n)||w(_=>({..._,connections:[..._.connections,{id:crypto.randomUUID(),sourceNodeId:p,sourceOutput:h,targetNodeId:N,targetInput:n}]}))},[y.connections,w]),z=c.useCallback(p=>{w(h=>({...h,connections:h.connections.filter(N=>N.id!==p)}))},[w]),B=c.useCallback(p=>{if(p.preventDefault(),!O||!j.current)return;const h=j.current.getBoundingClientRect(),N=p.clientX-h.left,n=p.clientY-h.top;U(O,{x:N,y:n}),S(!1),M(null)},[O,U]),J=c.useCallback(async()=>{if(t){x(!0);try{await t(y)}finally{x(!1)}}},[y,t]),W=c.useCallback(()=>{i==null||i(y)},[y,i]);return e.jsxs("div",{className:`nice-integration-builder ${u}`,style:{position:"relative"},children:[f&&e.jsx("div",{style:{position:"absolute",top:8,right:8,zIndex:5},children:e.jsx(Y,{steps:X(f,rr)})}),e.jsxs("div",{className:"nice-integration-builder__toolbar",children:[e.jsx("input",{type:"text",value:y.name,onChange:p=>w(h=>({...h,name:p.target.value})),className:"nice-integration-builder__name-input"}),e.jsx("div",{className:"nice-integration-builder__tabs",children:["canvas","code","variables","settings"].map(p=>e.jsx("button",{className:`nice-integration-builder__tab ${k===p?"nice-integration-builder__tab--active":""}`,onClick:()=>v(p),children:p.charAt(0).toUpperCase()+p.slice(1)},p))}),e.jsxs("div",{className:"nice-integration-builder__actions",children:[e.jsx("button",{onClick:J,disabled:L,className:"nice-integration-builder__run-btn",children:L?"⏳ Running...":"▶ Run"}),e.jsx("button",{onClick:W,className:"nice-integration-builder__save-btn",children:"💾 Save"})]})]}),e.jsxs("div",{className:"nice-integration-builder__main",children:[C&&k==="canvas"&&e.jsxs("div",{className:"nice-integration-builder__palette",children:[e.jsx("h4",{children:"Nodes"}),["Control","Actions","Data"].map(p=>e.jsxs("div",{className:"nice-integration-builder__category",children:[e.jsx("h5",{children:p}),re.filter(h=>h.category===p).map(h=>e.jsxs("div",{className:"nice-integration-builder__palette-item",draggable:!0,onDragStart:()=>{S(!0),M(h.type)},onDragEnd:()=>{S(!1),M(null)},children:[e.jsx("span",{className:"nice-integration-builder__palette-icon",children:h.icon}),e.jsx("span",{children:h.label})]},h.type))]},p)),a.length>0&&e.jsxs("div",{className:"nice-integration-builder__category",children:[e.jsx("h5",{children:"Connectors"}),a.map(p=>e.jsxs("div",{className:"nice-integration-builder__palette-item",children:[e.jsx("span",{className:"nice-integration-builder__palette-icon",children:"🔌"}),e.jsx("span",{children:p.name})]},p.id))]})]}),k==="canvas"&&e.jsxs("div",{ref:j,className:`nice-integration-builder__canvas ${A?"nice-integration-builder__canvas--dragging":""}`,onDragOver:p=>p.preventDefault(),onDrop:B,onClick:()=>g(null),children:[e.jsx("svg",{className:"nice-integration-builder__connections",children:y.connections.map(p=>{const h=y.nodes.find(T=>T.id===p.sourceNodeId),N=y.nodes.find(T=>T.id===p.targetNodeId);if(!h||!N)return null;const n=h.position.x+150,o=h.position.y+30,_=N.position.x,R=N.position.y+30,H=(n+_)/2;return e.jsx("g",{onClick:()=>z(p.id),children:e.jsx("path",{d:`M ${n} ${o} C ${H} ${o}, ${H} ${R}, ${_} ${R}`,className:"nice-integration-builder__connection"})},p.id)})}),y.nodes.map(p=>e.jsx(tr,{node:p,isSelected:(d==null?void 0:d.id)===p.id,onSelect:()=>g(p),onDelete:()=>q(p.id),onPositionChange:h=>K(p.id,{position:h}),onStartConnection:h=>{P(!0),D({nodeId:p.id,output:h})},onEndConnection:h=>{$&&I($.nodeId,$.output,p.id,h),P(!1),D(null)}},p.id)),y.nodes.length===0&&e.jsx("div",{className:"nice-integration-builder__empty",children:"Drag nodes from the palette to build your flow"})]}),k==="code"&&e.jsx("div",{className:"nice-integration-builder__code-view",children:e.jsx("pre",{children:JSON.stringify(y,null,2)})}),k==="variables"&&e.jsx(cr,{variables:y.variables,onChange:p=>w(h=>({...h,variables:p}))}),k==="settings"&&e.jsx(or,{errorHandling:y.errorHandling,schedule:y.schedule,onChange:(p,h)=>w(N=>({...N,errorHandling:p,schedule:h}))}),d&&k==="canvas"&&e.jsx(nr,{node:d,onChange:p=>K(d.id,p),onClose:()=>g(null)})]})]})}function ir(r){switch(r){case"http-request":return{method:"GET",url:"",headers:{},body:""};case"transform":return{mapping:[]};case"filter":return{condition:""};case"switch":return{cases:[]};case"loop":return{collection:"",itemVariable:"item"};case"delay":return{duration:1e3};case"set-variable":return{name:"",value:""};case"database":return{operation:"query",query:""};case"email":return{to:"",subject:"",body:""};case"webhook":return{method:"POST",url:""};case"function":return{code:`// Your code here
|
|
30
|
+
return input;`};case"error-handler":return{strategy:"retry",maxRetries:3};default:return{}}}function tr({node:r,isSelected:a,onSelect:s,onDelete:i,onPositionChange:t,onStartConnection:u,onEndConnection:f}){const[y,b]=c.useState(!1),[d,g]=c.useState({x:0,y:0}),C=c.useRef(null),m=re.find(v=>v.type===r.type),k=v=>{v.button===0&&(v.stopPropagation(),b(!0),g({x:v.clientX-r.position.x,y:v.clientY-r.position.y}),s())};return c.useEffect(()=>{if(!y)return;const v=S=>{t({x:S.clientX-d.x,y:S.clientY-d.y})},A=()=>{b(!1)};return window.addEventListener("mousemove",v),window.addEventListener("mouseup",A),()=>{window.removeEventListener("mousemove",v),window.removeEventListener("mouseup",A)}},[y,d,t]),e.jsxs("div",{ref:C,className:`nice-integration-builder__node nice-integration-builder__node--${r.type} ${a?"nice-integration-builder__node--selected":""}`,style:{left:r.position.x,top:r.position.y},onMouseDown:k,children:[e.jsxs("div",{className:"nice-integration-builder__node-header",children:[e.jsx("span",{className:"nice-integration-builder__node-icon",children:(m==null?void 0:m.icon)||"📦"}),e.jsx("span",{className:"nice-integration-builder__node-name",children:r.name}),e.jsx("button",{className:"nice-integration-builder__node-delete",onClick:v=>{v.stopPropagation(),i()},children:"×"})]}),r.inputs.map(v=>e.jsxs("div",{className:"nice-integration-builder__port nice-integration-builder__port--input",onMouseUp:()=>f(v),children:[e.jsx("span",{className:"nice-integration-builder__port-dot"}),e.jsx("span",{className:"nice-integration-builder__port-label",children:v})]},v)),r.outputs.map(v=>e.jsxs("div",{className:"nice-integration-builder__port nice-integration-builder__port--output",onMouseDown:A=>{A.stopPropagation(),u(v)},children:[e.jsx("span",{className:"nice-integration-builder__port-label",children:v}),e.jsx("span",{className:"nice-integration-builder__port-dot"})]},v))]})}function nr({node:r,onChange:a,onClose:s}){return e.jsxs("div",{className:"nice-integration-builder__properties",children:[e.jsxs("div",{className:"nice-integration-builder__properties-header",children:[e.jsx("h4",{children:r.name}),e.jsx("button",{onClick:s,children:"×"})]}),e.jsxs("div",{className:"nice-integration-builder__properties-content",children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Name"}),e.jsx("input",{type:"text",value:r.name,onChange:i=>a({name:i.target.value})})]}),r.type==="http-request"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Method"}),e.jsx("select",{value:r.config.method||"GET",onChange:i=>a({config:{...r.config,method:i.target.value}}),children:["GET","POST","PUT","PATCH","DELETE"].map(i=>e.jsx("option",{value:i,children:i},i))})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"URL"}),e.jsx("input",{type:"text",value:r.config.url||"",onChange:i=>a({config:{...r.config,url:i.target.value}}),placeholder:"https://api.example.com/endpoint"})]})]}),r.type==="delay"&&e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Duration (ms)"}),e.jsx("input",{type:"number",value:r.config.duration||1e3,onChange:i=>a({config:{...r.config,duration:parseInt(i.target.value,10)}})})]}),r.type==="set-variable"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Variable Name"}),e.jsx("input",{type:"text",value:r.config.name||"",onChange:i=>a({config:{...r.config,name:i.target.value}})})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Value"}),e.jsx("input",{type:"text",value:r.config.value||"",onChange:i=>a({config:{...r.config,value:i.target.value}})})]})]}),r.type==="function"&&e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Code"}),e.jsx("textarea",{value:r.config.code||"",onChange:i=>a({config:{...r.config,code:i.target.value}}),rows:10,className:"nice-integration-builder__code-input"})]}),r.type==="email"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"To"}),e.jsx("input",{type:"text",value:r.config.to||"",onChange:i=>a({config:{...r.config,to:i.target.value}})})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Subject"}),e.jsx("input",{type:"text",value:r.config.subject||"",onChange:i=>a({config:{...r.config,subject:i.target.value}})})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Body"}),e.jsx("textarea",{value:r.config.body||"",onChange:i=>a({config:{...r.config,body:i.target.value}}),rows:5})]})]})]})]})}function cr({variables:r,onChange:a}){const s=()=>{a({...r,newVariable:""})};return e.jsxs("div",{className:"nice-integration-builder__variables",children:[e.jsx("h4",{children:"Flow Variables"}),e.jsx("div",{className:"nice-integration-builder__variables-list",children:Object.entries(r).map(([i,t])=>e.jsxs("div",{className:"nice-integration-builder__variable-row",children:[e.jsx("input",{type:"text",value:i,onChange:u=>{const{[i]:f,...y}=r;a({...y,[u.target.value]:t})},placeholder:"Name"}),e.jsx("input",{type:"text",value:String(t),onChange:u=>a({...r,[i]:u.target.value}),placeholder:"Value"}),e.jsx("button",{onClick:()=>{const{[i]:u,...f}=r;a(f)},children:"×"})]},i))}),e.jsx("button",{onClick:s,children:"+ Add Variable"})]})}function or({errorHandling:r,schedule:a,onChange:s}){return e.jsxs("div",{className:"nice-integration-builder__settings",children:[e.jsx("h4",{children:"Error Handling"}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Strategy"}),e.jsxs("select",{value:r.strategy,onChange:i=>s({...r,strategy:i.target.value},a),children:[e.jsx("option",{value:"stop",children:"Stop on error"}),e.jsx("option",{value:"continue",children:"Continue on error"}),e.jsx("option",{value:"retry",children:"Retry on error"})]})]}),r.strategy==="retry"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Max Retries"}),e.jsx("input",{type:"number",value:r.maxRetries||3,onChange:i=>s({...r,maxRetries:parseInt(i.target.value,10)},a)})]}),e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Retry Delay (ms)"}),e.jsx("input",{type:"number",value:r.retryDelay||1e3,onChange:i=>s({...r,retryDelay:parseInt(i.target.value,10)},a)})]})]}),e.jsx("h4",{children:"Schedule"}),e.jsx("div",{className:"nice-integration-builder__field",children:e.jsxs("label",{children:[e.jsx("input",{type:"checkbox",checked:(a==null?void 0:a.enabled)||!1,onChange:i=>s(r,{...a,enabled:i.target.checked})}),"Enable scheduled execution"]})}),(a==null?void 0:a.enabled)&&e.jsxs("div",{className:"nice-integration-builder__field",children:[e.jsx("label",{children:"Cron Expression"}),e.jsx("input",{type:"text",value:a.cron||"",onChange:i=>s(r,{...a,cron:i.target.value}),placeholder:"0 0 * * *"})]})]})}const dr=[{target:".nice-webhook-tester",titleKey:"tutorial.webhookTester.intro.title",title:"Webhook tester",contentKey:"tutorial.webhookTester.intro.content",content:"Pick a saved payload (or write one), optionally sign it, send it to the endpoint and inspect the response.",placement:"auto"}];function ne(r){return r?Object.entries(r).map(([a,s])=>({key:a,value:s})):[]}function ce(r){const a={};for(const s of r)s.key.trim()!==""&&(a[s.key]=s.value);return a}async function lr(r,a){var f;const s=(f=globalThis.crypto)==null?void 0:f.subtle;if(!s)throw new Error("Web Crypto (crypto.subtle) is unavailable in this environment");const i=new TextEncoder,t=await s.importKey("raw",i.encode(r),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),u=await s.sign("HMAC",t,i.encode(a));return[...new Uint8Array(u)].map(y=>y.toString(16).padStart(2,"0")).join("")}const fr=c.forwardRef(function(a,s){const{url:i="",method:t="POST",headers:u,payload:f="",samples:y=[],onSend:b,signing:d,onSaveSample:g,tutorial:C,className:m,style:k,id:v,"data-testid":A}=a,[S,O]=c.useState(i),[M,V]=c.useState(t),[P,$]=c.useState(()=>ne(u)),[D,L]=c.useState(f),[x,j]=c.useState(""),[w,U]=c.useState(!1),[q,K]=c.useState(null),[I,z]=c.useState(null),B=c.useMemo(()=>{const o=new Map;for(const _ of y)o.set(_.id,_);return o},[y]),J=o=>{j(o);const _=B.get(o);_&&(L(_.payload),_.headers&&$(ne(_.headers)))},W=(o,_)=>{$(R=>R.map((H,T)=>T===o?{...H,..._}:H))},p=async()=>{U(!0),K(null),z(null);try{const o=ce(P);if(d&&d.secret){const T=await lr(d.secret,D);o[d.header]=`${d.prefix??""}${T}`}const _=typeof performance<"u"?performance.now():Date.now(),R=await b({url:S,method:M??"POST",headers:o,body:D}),H=Math.round((typeof performance<"u"?performance.now():Date.now())-_);z({...R,durationMs:R.durationMs??H})}catch(o){K(o instanceof Error?o.message:String(o))}finally{U(!1)}},h=()=>{var _;if(!g)return;const o=typeof window<"u"&&((_=window.prompt)==null?void 0:_.call(window,"Sample name"))||"";o&&g({id:`sample_${Date.now().toString(36)}`,name:o,payload:D,headers:ce(P)})},N=I==null?"":I.status>=200&&I.status<300?" nice-webhook-tester__status--ok":" nice-webhook-tester__status--error",n="nice-webhook-tester"+(m?` ${m}`:"");return e.jsxs("div",{ref:s,id:v,className:n,style:k,"data-testid":A,children:[C&&e.jsx("div",{className:"nice-webhook-tester__tutorial",children:e.jsx(Y,{steps:X(C,dr)})}),e.jsxs("div",{className:"nice-webhook-tester__bar",children:[e.jsx("select",{className:"nice-webhook-tester__method",value:M,onChange:o=>V(o.target.value),"aria-label":"Method",children:["POST","PUT","GET","PATCH","DELETE"].map(o=>e.jsx("option",{value:o,children:o},o))}),e.jsx("input",{type:"text",className:"nice-webhook-tester__url",value:S,placeholder:"https://example.com/api/payments/stripe/webhook",onChange:o=>O(o.target.value),"aria-label":"URL"}),e.jsx("button",{type:"button",className:"nice-webhook-tester__send",onClick:()=>void p(),disabled:w||S.trim()==="",children:w?"Sending…":"Send"})]}),y.length>0&&e.jsx("div",{className:"nice-webhook-tester__samples",children:e.jsxs("label",{children:["Sample:"," ",e.jsxs("select",{value:x,onChange:o=>J(o.target.value),children:[e.jsx("option",{value:"",children:"— choose a saved payload —"}),y.map(o=>e.jsx("option",{value:o.id,children:o.name},o.id))]})]})}),e.jsxs("div",{className:"nice-webhook-tester__headers",children:[e.jsxs("div",{className:"nice-webhook-tester__section-label",children:["Headers",d&&e.jsxs("span",{className:"nice-webhook-tester__signed",children:[" ","· auto-signs ",e.jsx("code",{children:d.header})]})]}),P.map((o,_)=>e.jsxs("div",{className:"nice-webhook-tester__header-row",children:[e.jsx("input",{type:"text",value:o.key,placeholder:"Header",onChange:R=>W(_,{key:R.target.value}),"aria-label":"Header name"}),e.jsx("input",{type:"text",value:o.value,placeholder:"Value",onChange:R=>W(_,{value:R.target.value}),"aria-label":"Header value"}),e.jsx("button",{type:"button",onClick:()=>$(R=>R.filter((H,T)=>T!==_)),"aria-label":"Remove header",children:"✕"})]},_)),e.jsx("button",{type:"button",className:"nice-webhook-tester__add-header",onClick:()=>$(o=>[...o,{key:"",value:""}]),children:"+ Header"})]}),e.jsxs("div",{className:"nice-webhook-tester__payload",children:[e.jsxs("div",{className:"nice-webhook-tester__section-label",children:["Payload",g&&e.jsx("button",{type:"button",className:"nice-webhook-tester__save",onClick:h,children:"Save as sample"})]}),e.jsx("textarea",{className:"nice-webhook-tester__textarea",value:D,spellCheck:!1,rows:8,placeholder:'{ "type": "payment.succeeded", "data": { ... } }',onChange:o=>L(o.target.value),"aria-label":"Payload"})]}),q&&e.jsx("div",{className:"nice-webhook-tester__error",children:q}),I&&e.jsxs("div",{className:"nice-webhook-tester__response",children:[e.jsxs("div",{className:"nice-webhook-tester__section-label",children:["Response"," ",e.jsx("span",{className:"nice-webhook-tester__status"+N,children:I.status}),I.durationMs!=null&&e.jsxs("span",{className:"nice-webhook-tester__time",children:[" · ",I.durationMs," ms"]})]}),I.body!=null&&e.jsx("pre",{className:"nice-webhook-tester__response-body",children:I.body})]})]})});exports.NiceAPIDesigner=$e;exports.NiceAPITester=ze;exports.NiceIntegrationBuilder=sr;exports.NiceWebhookTester=fr;
|
package/dist/index.d.ts
CHANGED
|
@@ -5,4 +5,6 @@
|
|
|
5
5
|
export { NiceAPIDesigner } from './NiceAPIDesigner';
|
|
6
6
|
export { NiceAPITester } from './NiceAPITester';
|
|
7
7
|
export { NiceIntegrationBuilder } from './NiceIntegrationBuilder';
|
|
8
|
+
export { NiceWebhookTester } from './NiceWebhookTester';
|
|
9
|
+
export type { NiceWebhookTesterProps, NiceWebhookSample, NiceWebhookSigning, NiceWebhookRequest, NiceWebhookResponse, } from './NiceWebhookTester';
|
|
8
10
|
export type { OpenAPISchema, OpenAPIInfo, OpenAPIServer, OpenAPIPathItem, OpenAPIOperation, OpenAPIParameter, OpenAPIRequestBody, OpenAPIResponse, OpenAPIComponents, SchemaObject, SecurityScheme, OAuth2Flow, OpenAPITag, APIDesignerState, ValidationError, EndpointDefinition, APIRequest, RequestBody, AuthConfig, APIResponse, APIEnvironment, EnvironmentVariable, APICollection, APIFolder, TestScript, TestResult, CollectionRunResult, RequestRunResult, IntegrationFlow, FlowNode, FlowNodeType, FlowConnection, FlowTrigger, ErrorHandlingConfig, ScheduleConfig, Connector, ConnectorOperation, ConnectorParameter, TransformMapping, MockServer, MockEndpoint, MockResponse, MockCondition, NiceAPIDesignerProps, NiceAPITesterProps, NiceIntegrationBuilderProps, NiceOpenAPIViewerProps, NiceMockServerProps, NiceSchemaEditorProps, } from './types';
|