@remoteoss/remote-flows 0.0.1 → 0.0.2

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/README.md CHANGED
@@ -4,6 +4,29 @@
4
4
 
5
5
  Welcome to the `@remoteoss/remote-flows` package, a React library that provides components for Remote's embbeded solution.
6
6
 
7
+ ## Table of Contents
8
+
9
+ - [Overview](#overview)
10
+ - [Installation](#installation)
11
+ - [Getting Started](#getting-started)
12
+ - [Basic Setup](#basic-setup)
13
+ - [Simple Cost calculator](#simple-cost-calculator)
14
+ - [Cost Calculator with default values and a custom disclaimer label](#cost-calculator-with-default-values-and-a-custom-disclaimer-label)
15
+ - [Cost calculator with results](#cost-calculator-with-results)
16
+ - [Cost calculator with button that exports results to pdf](#cost-calculator-with-button-that-exports-results-to-pdf)
17
+ - [Components API](#components-api)
18
+ - [RemoteFlows](#remoteflows)
19
+ - [CostCalculator](#costcalculator)
20
+ - [CostCalculatorResults](#costcalculatorresults)
21
+ - [Authentication](#authentication)
22
+ - [Styling Options](#styling-options)
23
+ - [Using Default Styles](#using-default-styles)
24
+ - [Theme Customization](#theme-customization)
25
+ - [CSS Overrides](#css-overrides)
26
+ - [Advanced Usage](#advanced-usage)
27
+ - [Custom Implementation](#custom-implementation)
28
+ - [Example](#example)
29
+
7
30
  ## Installation
8
31
 
9
32
  ```sh
@@ -20,7 +43,7 @@ After installation, import the main CSS file in your application:
20
43
 
21
44
  ### Basic Setup
22
45
 
23
- #### Cost calculator rendering
46
+ #### Simple Cost calculator
24
47
 
25
48
  ```tsx
26
49
  import { CostCalculator, RemoteFlows } from '@remoteoss/remote-flows';
@@ -46,8 +69,6 @@ function CostCalculatorForm() {
46
69
  label: 'Remote Disclaimer',
47
70
  },
48
71
  }}
49
- onSubmit={(payload) => console.log(payload)}
50
- onError={(error) => console.error({ error })}
51
72
  onSuccess={(response) => console.log({ response })}
52
73
  />
53
74
  );
@@ -75,7 +96,7 @@ export function BasicCostCalculator() {
75
96
  }
76
97
  ```
77
98
 
78
- #### Cost Calculator + default values + custom disclaimer label
99
+ #### Cost Calculator with default values and a custom disclaimer label
79
100
 
80
101
  ```tsx
81
102
  import { CostCalculator, RemoteFlows } from '@remoteoss/remote-flows';
@@ -101,8 +122,6 @@ function CostCalculatorForm() {
101
122
  },
102
123
  }}
103
124
  estimationOptions={estimationOptions}
104
- onSubmit={(payload) => console.log(payload)}
105
- onError={(error) => console.error({ error })}
106
125
  onSuccess={(response) => console.log({ response })}
107
126
  />
108
127
  );
@@ -130,7 +149,7 @@ export function BasicCostCalculatorWithDefaultValues() {
130
149
  }
131
150
  ```
132
151
 
133
- #### Cost calculator + results component
152
+ #### Cost calculator with results
134
153
 
135
154
  ```tsx
136
155
  import type { CostCalculatorEstimateResponse } from '@remoteoss/remote-flows';
@@ -166,7 +185,6 @@ function CostCalculatorForm() {
166
185
  label: 'Remote Disclaimer',
167
186
  },
168
187
  }}
169
- onError={(error) => console.error({ error })}
170
188
  onSuccess={(response) => {
171
189
  setEstimations(response);
172
190
  }}
@@ -200,7 +218,7 @@ export function CostCalculatoWithResults() {
200
218
  }
201
219
  ```
202
220
 
203
- #### Cost calculator with export to pdf
221
+ #### Cost calculator with button that exports results to pdf
204
222
 
205
223
  ```tsx
206
224
  import type {
@@ -266,7 +284,6 @@ function CostCalculatorForm() {
266
284
  },
267
285
  }}
268
286
  onSubmit={(payload) => setPayload(payload)}
269
- onError={(error) => console.error({ error })}
270
287
  onSuccess={(response) => {
271
288
  setEstimations(response);
272
289
  }}
@@ -314,22 +331,22 @@ The `RemoteFlows` component serves as a provider for authentication and theming.
314
331
 
315
332
  The `CostCalculator` component renders a form for calculating employment costs.
316
333
 
317
- | Prop | Type | Required | Description |
318
- | ------------------ | ---------------------------------------------------- | -------- | ----------------------------------------------------------- |
319
- | `estimationParams` | object | No | Customization for the estimation response (see table below) |
320
- | `defaultValues` | object | No | Predefined form values (see table below) |
321
- | `params` | `{ disclaimer?: { label?: string } }` | No | Additional configuration parameters |
322
- | `onSubmit` | `(payload: CostCalculatorEstimateParams) => void` | No | Callback with the payload sent to Remote server |
323
- | `onSuccess` | `(response: CostCalculatorEstimateResponse) => void` | No | Callback with the successful estimation data |
324
- | `onError` | `(error: Error) => void` | No | Error handling callback |
334
+ | Prop | Type | Required | Description |
335
+ | ------------------ | ---------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------- |
336
+ | `estimationParams` | object | No | Customization for the estimation response (see table below) |
337
+ | `defaultValues` | object | No | Predefined form values (see table below) |
338
+ | `params` | `{ disclaimer?: { label?: string } }` | No | Additional configuration parameters |
339
+ | `onSubmit` | `(payload: CostCalculatorEstimateParams) => void` | No | Callback with the form payload sent to Remote API. Runs before submitting the form to Remote |
340
+ | `onSuccess` | `(response: CostCalculatorEstimateResponse) => void` | No | Callback with the successful estimation data |
341
+ | `onError` | `(error: Error) => void` | No | Error handling callback |
325
342
 
326
343
  #### estimationParams Properties
327
344
 
328
345
  | Property | Type | Description |
329
346
  | ----------------------- | --------- | ------------------------------------------------------------ |
330
347
  | `title` | `string` | Custom title for the estimation report |
331
- | `includeBenefits` | `boolean` | When true, includes benefits information in the response |
332
- | `includeCostBreakdowns` | `boolean` | When true, includes detailed cost breakdowns in the response |
348
+ | `includeBenefits` | `boolean` | If `true`, includes benefits information in the response |
349
+ | `includeCostBreakdowns` | `boolean` | If `true`, includes detailed cost breakdowns in the response |
333
350
 
334
351
  #### defaultValues Properties
335
352
 
@@ -343,14 +360,20 @@ The `CostCalculator` component renders a form for calculating employment costs.
343
360
 
344
361
  A component to display cost calculation results.
345
362
 
346
- | Prop | Type | Required | Description |
347
- | ---------------- | ------------------------------------ | -------- | ------------------------------ |
348
- | `employmentData` | `CostCalculatorEstimateResponseData` | Yes | The estimation data to display |
363
+ | Prop | Type | Required | Description |
364
+ | ---------------- | ------------------------------------ | -------- | ---------------------------- |
365
+ | `employmentData` | `CostCalculatorEstimateResponseData` | Yes | The estimation response data |
349
366
 
350
367
  ## Authentication
351
368
 
352
369
  You need to implement a server endpoint to securely handle authentication with Remote. This prevents exposing client credentials in your frontend code.
353
370
 
371
+ Your server should:
372
+
373
+ 1. Store your client credentials securely
374
+ 2. Implement an endpoint that exchanges these credentials for an access token
375
+ 3. Return `access_token` and `expires_in` to the frontend application
376
+
354
377
  For a complete implementation, check our [example server implementation](https://github.com/remoteoss/remote-flows/blob/main/example/server.js).
355
378
 
356
379
  ### API Gateway Endpoints
@@ -401,15 +424,27 @@ Import the CSS file in your application:
401
424
  | `borderRadius` | The main border radius value (default: 0.625rem). This is the foundation for all other radius values. |
402
425
  | `font.fontSizeBase` | The main font size value (default: 1rem). Controls the base text size of the component. |
403
426
 
404
- ### CSS Overrides
427
+ ### Custom CSS
405
428
 
406
- #### Using CSS variables:
429
+ All components expose CSS classes with the prefix `RemoteFlows__` that you can target for custom styling. This approach gives you fine-grained control over specific elements without having to rebuild the components.
407
430
 
408
- You can override the CSS variables defined in `:root` in the library's `styles/global.css`
431
+ For example, let's say you want to render the currency field next to the salary field. You can achieve this with the following CSS:
409
432
 
410
- #### Override CSS Classes:
433
+ ```css
434
+ .RemoteFlows__CostCalculatorForm {
435
+ display: grid;
436
+ grid-template-columns: 1fr 1fr;
437
+ gap: 1rem;
438
+ }
411
439
 
412
- Use css or your css in js solution to override any classes from the SDK
440
+ .RemoteFlows__SelectField__Item__country {
441
+ grid-column: span 2;
442
+ }
443
+
444
+ .RemoteFlows__CostCalculatorForm .RemoteFlows__Button {
445
+ grid-column: span 2;
446
+ }
447
+ ```
413
448
 
414
449
  ## Advanced Usage
415
450
 
@@ -1,2 +1,2 @@
1
- import{a as e}from"./chunk-ATKR5HCM.js";import{a as t}from"./chunk-AYDF3IFZ.js";import*as o from"react";import{Slot as d}from"@radix-ui/react-slot";import{cva as u}from"class-variance-authority";var p=u("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none aria-invalid:ring-destructive/20 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90",outline:"border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-link-button-primary underline-offset-4 hover:underline button-link"},size:{default:"h-9 px-4 py-7 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9",link:"px-0"}},defaultVariants:{variant:"default",size:"default"}});function h({className:r,variant:n,size:a,asChild:s=!1,...i}){return o.createElement(s?d:"button",{"data-slot":"button",className:e(p({variant:n,size:a,className:r}),"Button__Wrapper"),...i})}t(h,"Button");export{h as a};
2
- //# sourceMappingURL=chunk-J2GLSJLO.js.map
1
+ import{a as e}from"./chunk-ATKR5HCM.js";import{a as t}from"./chunk-AYDF3IFZ.js";import{Slot as d}from"@radix-ui/react-slot";import{cva as u}from"class-variance-authority";import*as o from"react";var c=u("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none aria-invalid:ring-destructive/20 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90",outline:"border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-link-button-primary underline-offset-4 hover:underline button-link"},size:{default:"h-9 px-4 py-7 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9",link:"px-0"}},defaultVariants:{variant:"default",size:"default"}});function h({className:r,variant:n,size:a,asChild:s=!1,...i}){return o.createElement(s?d:"button",{"data-slot":"button",className:e(c({variant:n,size:a,className:r}),"RemoteFlows__Button"),...i})}t(h,"Button");export{h as a};
2
+ //# sourceMappingURL=chunk-CSSMQNJ3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/src/lib/utils';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white shadow-xs hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-link-button-primary underline-offset-4 hover:underline button-link',\n },\n size: {\n default: 'h-9 px-4 py-7 has-[>svg]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n link: 'px-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(\n buttonVariants({ variant, size, className }),\n 'Button__Wrapper',\n )}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n"],"mappings":"gFAAA,UAAYA,MAAW,QACvB,OAAS,QAAAC,MAAY,uBACrB,OAAS,OAAAC,MAA8B,2BAIvC,IAAMC,EAAiBC,EACrB,yVACA,CACE,SAAU,CACR,QAAS,CACP,QACE,mEACF,YACE,8DACF,QACE,2FACF,UACE,yEACF,MAAO,+CACP,KAAM,yEACR,EACA,KAAM,CACJ,QAAS,gCACT,GAAI,gDACJ,GAAI,uCACJ,KAAM,SACN,KAAM,MACR,CACF,EACA,gBAAiB,CACf,QAAS,UACT,KAAM,SACR,CACF,CACF,EAEA,SAASC,EAAO,CACd,UAAAC,EACA,QAAAC,EACA,KAAAC,EACA,QAAAC,EAAU,GACV,GAAGC,CACL,EAGK,CAGH,OACE,gBAHWD,EAAUE,EAAO,SAG3B,CACC,YAAU,SACV,UAAWC,EACTT,EAAe,CAAE,QAAAI,EAAS,KAAAC,EAAM,UAAAF,CAAU,CAAC,EAC3C,iBACF,EACC,GAAGI,EACN,CAEJ,CAtBSG,EAAAR,EAAA","names":["React","Slot","cva","buttonVariants","cva","Button","className","variant","size","asChild","props","Slot","cn","__name"]}
1
+ {"version":3,"sources":["../src/components/ui/button.tsx"],"sourcesContent":["import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '@/src/lib/utils';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white shadow-xs hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-link-button-primary underline-offset-4 hover:underline button-link',\n },\n size: {\n default: 'h-9 px-4 py-7 has-[>svg]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n link: 'px-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(\n buttonVariants({ variant, size, className }),\n 'RemoteFlows__Button',\n )}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n"],"mappings":"gFAAA,OAAS,QAAAA,MAAY,uBACrB,OAAS,OAAAC,MAA8B,2BACvC,UAAYC,MAAW,QAIvB,IAAMC,EAAiBC,EACrB,yVACA,CACE,SAAU,CACR,QAAS,CACP,QACE,mEACF,YACE,8DACF,QACE,2FACF,UACE,yEACF,MAAO,+CACP,KAAM,yEACR,EACA,KAAM,CACJ,QAAS,gCACT,GAAI,gDACJ,GAAI,uCACJ,KAAM,SACN,KAAM,MACR,CACF,EACA,gBAAiB,CACf,QAAS,UACT,KAAM,SACR,CACF,CACF,EAEA,SAASC,EAAO,CACd,UAAAC,EACA,QAAAC,EACA,KAAAC,EACA,QAAAC,EAAU,GACV,GAAGC,CACL,EAGK,CAGH,OACE,gBAHWD,EAAUE,EAAO,SAG3B,CACC,YAAU,SACV,UAAWC,EACTT,EAAe,CAAE,QAAAI,EAAS,KAAAC,EAAM,UAAAF,CAAU,CAAC,EAC3C,qBACF,EACC,GAAGI,EACN,CAEJ,CAtBSG,EAAAR,EAAA","names":["Slot","cva","React","buttonVariants","cva","Button","className","variant","size","asChild","props","Slot","cn","__name"]}
@@ -1,2 +1,2 @@
1
- import{a,b as m,c as p,d}from"./chunk-Z5SEXEAZ.js";import{a as l}from"./chunk-DE6ICD4X.js";import{a as i}from"./chunk-J2GLSJLO.js";import{b as s}from"./chunk-ATKR5HCM.js";import{a as t}from"./chunk-AYDF3IFZ.js";import{Info as g}from"lucide-react";import o from"react";function y({contributionsTotal:u,currency:e,contributionsBreakdown:n}){return o.createElement("div",null,o.createElement("div",{className:"flex justify-between items-center mb-2"},o.createElement("h3",{className:"font-medium text-primary-foreground"},"Employer Contributions"),o.createElement("span",{className:"font-semibold text-lg"},s(u,e))),n?o.createElement(o.Fragment,null,o.createElement(l,{className:"mb-3"}),o.createElement("div",{className:"space-y-3 pl-2"},n.map((r,f)=>o.createElement("div",{key:f,className:"flex justify-between items-start text-sm"},o.createElement("div",{className:"flex items-start gap-2"},o.createElement("span",null,r.name),o.createElement(a,null,o.createElement(m,null,o.createElement(p,{asChild:!0},o.createElement(i,{variant:"ghost",size:"icon",className:"h-4 w-4 p-0"},o.createElement(g,{className:"h-3 w-3 text-gray-400"}),o.createElement("span",{className:"sr-only"},"Info"))),o.createElement(d,null,o.createElement("p",{className:"max-w-xs"},r.description),r.zendesk_article_url&&o.createElement("a",{href:r.zendesk_article_url,target:"_blank",rel:"noopener noreferrer",className:"text-blue-500 hover:underline block mt-1 text-xs"},"Learn more"))))),o.createElement("span",null,s(r.amount,e)))))):null)}t(y,"CostCalculatorContributionsBreakdown");export{y as a};
2
- //# sourceMappingURL=chunk-XSTVWDTD.js.map
1
+ import{a,b as m,c as p,d}from"./chunk-Z5SEXEAZ.js";import{a as l}from"./chunk-DE6ICD4X.js";import{a as i}from"./chunk-CSSMQNJ3.js";import{b as s}from"./chunk-ATKR5HCM.js";import{a as t}from"./chunk-AYDF3IFZ.js";import{Info as g}from"lucide-react";import o from"react";function y({contributionsTotal:u,currency:e,contributionsBreakdown:n}){return o.createElement("div",null,o.createElement("div",{className:"flex justify-between items-center mb-2"},o.createElement("h3",{className:"font-medium text-primary-foreground"},"Employer Contributions"),o.createElement("span",{className:"font-semibold text-lg"},s(u,e))),n?o.createElement(o.Fragment,null,o.createElement(l,{className:"mb-3"}),o.createElement("div",{className:"space-y-3 pl-2"},n.map((r,f)=>o.createElement("div",{key:f,className:"flex justify-between items-start text-sm"},o.createElement("div",{className:"flex items-start gap-2"},o.createElement("span",null,r.name),o.createElement(a,null,o.createElement(m,null,o.createElement(p,{asChild:!0},o.createElement(i,{variant:"ghost",size:"icon",className:"h-4 w-4 p-0"},o.createElement(g,{className:"h-3 w-3 text-gray-400"}),o.createElement("span",{className:"sr-only"},"Info"))),o.createElement(d,null,o.createElement("p",{className:"max-w-xs"},r.description),r.zendesk_article_url&&o.createElement("a",{href:r.zendesk_article_url,target:"_blank",rel:"noopener noreferrer",className:"text-blue-500 hover:underline block mt-1 text-xs"},"Learn more"))))),o.createElement("span",null,s(r.amount,e)))))):null)}t(y,"CostCalculatorContributionsBreakdown");export{y as a};
2
+ //# sourceMappingURL=chunk-GINTASQ6.js.map
@@ -1,2 +1,2 @@
1
- import{a,b as m,c as p,d as l}from"./chunk-Z5SEXEAZ.js";import{a as e}from"./chunk-DE6ICD4X.js";import{a as n}from"./chunk-J2GLSJLO.js";import{b as i}from"./chunk-ATKR5HCM.js";import{a as t}from"./chunk-AYDF3IFZ.js";import{Info as v}from"lucide-react";import o from"react";function w({benefitsTotal:d,benefitsBreakdown:f,currency:r}){return o.createElement("div",null,o.createElement("div",{className:"flex justify-between items-center mb-2"},o.createElement("h3",{className:"font-medium text-primary-foreground-800"},"Benefits"),o.createElement("span",{className:"font-semibold text-lg"},i(d,r))),o.createElement(e,{className:"mb-3"}),o.createElement("div",{className:"space-y-3 pl-2"},f.map((s,u)=>o.createElement("div",{key:u,className:"flex justify-between items-start text-sm"},o.createElement("div",{className:"flex items-start gap-2"},o.createElement("span",null,s.name),o.createElement(a,null,o.createElement(m,null,o.createElement(p,{asChild:!0},o.createElement(n,{variant:"ghost",size:"icon",className:"h-4 w-4 p-0"},o.createElement(v,{className:"h-3 w-3 text-gray-400"}),o.createElement("span",{className:"sr-only"},"Info"))),o.createElement(l,null,o.createElement("p",{className:"max-w-xs"},s.description))))),o.createElement("span",null,i(s.amount,r))))))}t(w,"CostCalculatorBenefitsBreakdown");export{w as a};
2
- //# sourceMappingURL=chunk-ZII4VJ3N.js.map
1
+ import{a,b as m,c as p,d as l}from"./chunk-Z5SEXEAZ.js";import{a as e}from"./chunk-DE6ICD4X.js";import{a as n}from"./chunk-CSSMQNJ3.js";import{b as i}from"./chunk-ATKR5HCM.js";import{a as t}from"./chunk-AYDF3IFZ.js";import{Info as v}from"lucide-react";import o from"react";function w({benefitsTotal:d,benefitsBreakdown:f,currency:r}){return o.createElement("div",null,o.createElement("div",{className:"flex justify-between items-center mb-2"},o.createElement("h3",{className:"font-medium text-primary-foreground-800"},"Benefits"),o.createElement("span",{className:"font-semibold text-lg"},i(d,r))),o.createElement(e,{className:"mb-3"}),o.createElement("div",{className:"space-y-3 pl-2"},f.map((s,u)=>o.createElement("div",{key:u,className:"flex justify-between items-start text-sm"},o.createElement("div",{className:"flex items-start gap-2"},o.createElement("span",null,s.name),o.createElement(a,null,o.createElement(m,null,o.createElement(p,{asChild:!0},o.createElement(n,{variant:"ghost",size:"icon",className:"h-4 w-4 p-0"},o.createElement(v,{className:"h-3 w-3 text-gray-400"}),o.createElement("span",{className:"sr-only"},"Info"))),o.createElement(l,null,o.createElement("p",{className:"max-w-xs"},s.description))))),o.createElement("span",null,i(s.amount,r))))))}t(w,"CostCalculatorBenefitsBreakdown");export{w as a};
2
+ //# sourceMappingURL=chunk-MTKRHEZC.js.map
@@ -1,2 +1,2 @@
1
- import{a as x}from"./chunk-ZII4VJ3N.js";import{a as T}from"./chunk-XSTVWDTD.js";import{a as P}from"./chunk-Q2ZB5MOF.js";import{a as y,b as v,c as h,d as _,e as w}from"./chunk-JEULWBZA.js";import{a as k}from"./chunk-BIWKEH5R.js";import{a as n}from"./chunk-ATKR5HCM.js";import{a as s}from"./chunk-AYDF3IFZ.js";import{Euro as H}from"lucide-react";import t,{lazy as G,useState as A}from"react";import*as N from"react";import{Slot as z}from"@radix-ui/react-slot";import{cva as F}from"class-variance-authority";var E=F("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",{variants:{variant:{default:"border-transparent bg-badge text-badge-foreground rounded-full [a&]:hover:bg-primary/90",secondary:"border-transparent bg-secondary text-secondary-foreground rounded-full [a&]:hover:bg-secondary/90",destructive:"border-transparent bg-destructive text-white rounded-full [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",outline:"text-foreground rounded-full [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"}},defaultVariants:{variant:"default"}});function B({className:a,variant:o,asChild:r=!1,...u}){return N.createElement(r?z:"span",{"data-slot":"badge",className:n(E({variant:o}),a),...u})}s(B,"Badge");import*as m from"react";import*as i from"@radix-ui/react-tabs";function S({className:a,...o}){return m.createElement(i.Root,{"data-slot":"tabs",className:n("flex flex-col gap-2",a),...o})}s(S,"Tabs");function V({className:a,...o}){return m.createElement(i.List,{"data-slot":"tabs-list",className:n("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-1",a),...o})}s(V,"TabsList");function b({className:a,...o}){return m.createElement(i.Trigger,{"data-slot":"tabs-trigger",className:n("data-[state=active]:bg-background data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",a),...o})}s(b,"TabsTrigger");var M=G(()=>import("./flows/CostCalculator/Results/CostCalculatorResultsChart.js"));function st({employmentData:a,options:o}){let[r,u]=A("monthly"),l=a.employments?.[0];if(!l)return null;let e=l.employer_currency_costs,c=e.currency.symbol,f=r==="monthly"?e.monthly_gross_salary:e.annual_gross_salary,p=r==="monthly"?e.monthly_benefits_total:e.annual_benefits_total,g=r==="monthly"?e.monthly_contributions_total:e.annual_contributions_total,D=r==="monthly"?e.monthly_total:e.annual_total,d=r==="monthly"?e.monthly_benefits_breakdown:e.annual_benefits_breakdown,L=r==="monthly"?e.monthly_contributions_breakdown:e.annual_contributions_breakdown,C=[{name:"Gross Salary",value:f,color:o?.chartColors?.grossSalary??"#3b82f6"},{name:"Contributions",value:g,color:o?.chartColors?.contributions??"#f59e0b"}];return d&&C.push({name:"Benefits",value:p??0,color:o?.chartColors?.benefits??"#10b981"}),t.createElement(t.Fragment,null,t.createElement("div",{className:"flex flex-col md:flex-row gap-4 md:items-center justify-between mb-6 RemoteFlows__CostCalculatorResults"},t.createElement("div",{className:"RemoteFlows__CostCalculatorResults__Header"},t.createElement("h2",{className:"text-xl font-semibold flex items-center gap-2"},t.createElement("span",{className:"flex items-center gap-1"},t.createElement(H,{className:"h-5 w-5 text-gray-600"}),o?.title??"Cost Calculator"),t.createElement(B,{className:"ml-2"},l.country.name)),t.createElement("p",{className:"text-primary-foreground font-medium mt-1"},o?.description??`Total cost of employment in ${l.country.name}`)),t.createElement(S,{value:r,onValueChange:j=>u(j),className:"w-full md:w-auto RemoteFlows__CostCalculatorResults__Tabs"},t.createElement(V,{className:"grid w-full md:w-[200px] grid-cols-2"},t.createElement(b,{value:"monthly"},"Monthly"),t.createElement(b,{value:"annual"},"Annual")))),t.createElement("div",{className:n("grid grid-cols-1 gap-6",o?.showChart?"md:grid-cols-3":"","RemoteFlows__CostCalculatorResults_CostBreakdown")},t.createElement(y,{className:"md:col-span-2 rounded-lg"},t.createElement(v,{className:"pb-2"},t.createElement(h,null,"Cost Breakdown"),t.createElement(_,null,"Detailed breakdown of all employer costs")),t.createElement(w,null,t.createElement("div",{className:"space-y-6"},t.createElement(P,{grossSalary:f,currency:c}),d?t.createElement(x,{benefitsBreakdown:d,benefitsTotal:p,currency:c}):null,t.createElement(T,{contributionsBreakdown:L,contributionsTotal:g,currency:c}),t.createElement(k,{totalCost:D,currency:c})))),o?.showChart&&t.createElement(M,{chartData:C,currency:c})))}s(st,"CostCalculatorResults");export{st as a};
2
- //# sourceMappingURL=chunk-BRK6MUQS.js.map
1
+ import{a as x}from"./chunk-MTKRHEZC.js";import{a as T}from"./chunk-GINTASQ6.js";import{a as P}from"./chunk-Q2ZB5MOF.js";import{a as y,b as v,c as h,d as _,e as w}from"./chunk-JEULWBZA.js";import{a as k}from"./chunk-BIWKEH5R.js";import{a as n}from"./chunk-ATKR5HCM.js";import{a as s}from"./chunk-AYDF3IFZ.js";import{Euro as H}from"lucide-react";import t,{lazy as G,useState as A}from"react";import*as N from"react";import{Slot as z}from"@radix-ui/react-slot";import{cva as F}from"class-variance-authority";var E=F("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",{variants:{variant:{default:"border-transparent bg-badge text-badge-foreground rounded-full [a&]:hover:bg-primary/90",secondary:"border-transparent bg-secondary text-secondary-foreground rounded-full [a&]:hover:bg-secondary/90",destructive:"border-transparent bg-destructive text-white rounded-full [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",outline:"text-foreground rounded-full [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"}},defaultVariants:{variant:"default"}});function B({className:a,variant:o,asChild:r=!1,...u}){return N.createElement(r?z:"span",{"data-slot":"badge",className:n(E({variant:o}),a),...u})}s(B,"Badge");import*as m from"react";import*as i from"@radix-ui/react-tabs";function S({className:a,...o}){return m.createElement(i.Root,{"data-slot":"tabs",className:n("flex flex-col gap-2",a),...o})}s(S,"Tabs");function V({className:a,...o}){return m.createElement(i.List,{"data-slot":"tabs-list",className:n("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-1",a),...o})}s(V,"TabsList");function b({className:a,...o}){return m.createElement(i.Trigger,{"data-slot":"tabs-trigger",className:n("data-[state=active]:bg-background data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",a),...o})}s(b,"TabsTrigger");var M=G(()=>import("./flows/CostCalculator/Results/CostCalculatorResultsChart.js"));function st({employmentData:a,options:o}){let[r,u]=A("monthly"),l=a.employments?.[0];if(!l)return null;let e=l.employer_currency_costs,c=e.currency.symbol,f=r==="monthly"?e.monthly_gross_salary:e.annual_gross_salary,p=r==="monthly"?e.monthly_benefits_total:e.annual_benefits_total,g=r==="monthly"?e.monthly_contributions_total:e.annual_contributions_total,D=r==="monthly"?e.monthly_total:e.annual_total,d=r==="monthly"?e.monthly_benefits_breakdown:e.annual_benefits_breakdown,L=r==="monthly"?e.monthly_contributions_breakdown:e.annual_contributions_breakdown,C=[{name:"Gross Salary",value:f,color:o?.chartColors?.grossSalary??"#3b82f6"},{name:"Contributions",value:g,color:o?.chartColors?.contributions??"#f59e0b"}];return d&&C.push({name:"Benefits",value:p??0,color:o?.chartColors?.benefits??"#10b981"}),t.createElement(t.Fragment,null,t.createElement("div",{className:"flex flex-col md:flex-row gap-4 md:items-center justify-between mb-6 RemoteFlows__CostCalculatorResults"},t.createElement("div",{className:"RemoteFlows__CostCalculatorResults__Header"},t.createElement("h2",{className:"text-xl font-semibold flex items-center gap-2"},t.createElement("span",{className:"flex items-center gap-1"},t.createElement(H,{className:"h-5 w-5 text-gray-600"}),o?.title??"Cost Calculator"),t.createElement(B,{className:"ml-2"},l.country.name)),t.createElement("p",{className:"text-primary-foreground font-medium mt-1"},o?.description??`Total cost of employment in ${l.country.name}`)),t.createElement(S,{value:r,onValueChange:j=>u(j),className:"w-full md:w-auto RemoteFlows__CostCalculatorResults__Tabs"},t.createElement(V,{className:"grid w-full md:w-[200px] grid-cols-2"},t.createElement(b,{value:"monthly"},"Monthly"),t.createElement(b,{value:"annual"},"Annual")))),t.createElement("div",{className:n("grid grid-cols-1 gap-6",o?.showChart?"md:grid-cols-3":"","RemoteFlows__CostCalculatorResults_CostBreakdown")},t.createElement(y,{className:"md:col-span-2 rounded-lg"},t.createElement(v,{className:"pb-2"},t.createElement(h,null,"Cost Breakdown"),t.createElement(_,null,"Detailed breakdown of all employer costs")),t.createElement(w,null,t.createElement("div",{className:"space-y-6"},t.createElement(P,{grossSalary:f,currency:c}),d?t.createElement(x,{benefitsBreakdown:d,benefitsTotal:p,currency:c}):null,t.createElement(T,{contributionsBreakdown:L,contributionsTotal:g,currency:c}),t.createElement(k,{totalCost:D,currency:c})))),o?.showChart&&t.createElement(M,{chartData:C,currency:c})))}s(st,"CostCalculatorResults");export{st as a};
2
+ //# sourceMappingURL=chunk-P7TWGOSX.js.map
@@ -1,2 +1,2 @@
1
- import{a as p}from"./chunk-J2GLSJLO.js";import{g}from"./chunk-7EZH5DCX.js";import{a as s}from"./chunk-ATKR5HCM.js";import{a as m}from"./chunk-AYDF3IFZ.js";import o from"react";import*as a from"react";import{Drawer as l}from"vaul";var d=m(({shouldScaleBackground:e=!0,...r})=>a.createElement(l.Root,{shouldScaleBackground:e,...r}),"Drawer");d.displayName="Drawer";var y=l.Trigger,h=l.Portal,P=l.Close,N=a.forwardRef(({className:e,...r},i)=>a.createElement(l.Overlay,{ref:i,className:s("fixed inset-0 z-50 bg-black/80",e),...r}));N.displayName=l.Overlay.displayName;var f=a.forwardRef(({className:e,children:r,...i},c)=>a.createElement(h,null,a.createElement(N,null),a.createElement(l.Content,{ref:c,className:s("fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background",e),...i},a.createElement("div",{className:"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted"}),r)));f.displayName="DrawerContent";var D=m(({className:e,...r})=>a.createElement("div",{className:s("grid gap-1.5 p-4 text-center sm:text-left",e),...r}),"DrawerHeader");D.displayName="DrawerHeader";var S=m(({className:e,...r})=>a.createElement("div",{className:s("mt-auto flex flex-col gap-2 p-4",e),...r}),"DrawerFooter");S.displayName="DrawerFooter";var w=a.forwardRef(({className:e,...r},i)=>a.createElement(l.Title,{ref:i,className:s("text-lg font-semibold leading-none tracking-tight",e),...r}));w.displayName=l.Title.displayName;var u=a.forwardRef(({className:e,...r},i)=>a.createElement(l.Description,{ref:i,className:s("text-sm text-muted-foreground",e),...r}));u.displayName=l.Description.displayName;import*as n from"react";import*as t from"@radix-ui/react-scroll-area";var v=n.forwardRef(({className:e,children:r,...i},c)=>n.createElement(t.Root,{ref:c,className:s("relative overflow-hidden",e),...i},n.createElement(t.Viewport,{className:"h-full w-full rounded-[inherit]"},r),n.createElement(b,null),n.createElement(t.Corner,null)));v.displayName=t.Root.displayName;var b=n.forwardRef(({className:e,orientation:r="vertical",...i},c)=>n.createElement(t.ScrollAreaScrollbar,{ref:c,orientation:r,className:s("flex touch-none select-none transition-colors",r==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",r==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...i},n.createElement(t.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})));b.displayName=t.ScrollAreaScrollbar.displayName;import{X as x}from"lucide-react";var O=m(({label:e="Disclaimer"})=>{let{data:r}=g();return o.createElement(d,null,o.createElement(y,{asChild:!0},o.createElement(p,{variant:"link",size:"link"},e)),o.createElement(f,null,o.createElement(D,null,o.createElement(P,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none"},o.createElement(x,{className:"h-4 w-4"}),o.createElement("span",{className:"sr-only"},"Close")),o.createElement(w,null,r?.data.title),o.createElement(u,null,"For more details read our"," ",o.createElement(p,{variant:"link",size:"link",asChild:!0},o.createElement("a",{href:r?.data.html_url,target:"_blank",rel:"noopener noreferrer"},"Disclaimer")))),o.createElement(v,{className:"px-4 pb-4 overflow-y-auto max-h-[calc(80vh-120px)] cost-calculator-disclaimer-drawer-scroll-area"},o.createElement("div",{className:"cost-calculator-disclaimer-drawer-body",dangerouslySetInnerHTML:{__html:r?.data.body??""}}))))},"Disclaimer");export{O as a};
2
- //# sourceMappingURL=chunk-7ZBXCVHC.js.map
1
+ import{a as p}from"./chunk-CSSMQNJ3.js";import{g}from"./chunk-7EZH5DCX.js";import{a as s}from"./chunk-ATKR5HCM.js";import{a as m}from"./chunk-AYDF3IFZ.js";import o from"react";import*as a from"react";import{Drawer as l}from"vaul";var d=m(({shouldScaleBackground:e=!0,...r})=>a.createElement(l.Root,{shouldScaleBackground:e,...r}),"Drawer");d.displayName="Drawer";var y=l.Trigger,h=l.Portal,P=l.Close,N=a.forwardRef(({className:e,...r},i)=>a.createElement(l.Overlay,{ref:i,className:s("fixed inset-0 z-50 bg-black/80",e),...r}));N.displayName=l.Overlay.displayName;var f=a.forwardRef(({className:e,children:r,...i},c)=>a.createElement(h,null,a.createElement(N,null),a.createElement(l.Content,{ref:c,className:s("fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background",e),...i},a.createElement("div",{className:"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted"}),r)));f.displayName="DrawerContent";var D=m(({className:e,...r})=>a.createElement("div",{className:s("grid gap-1.5 p-4 text-center sm:text-left",e),...r}),"DrawerHeader");D.displayName="DrawerHeader";var S=m(({className:e,...r})=>a.createElement("div",{className:s("mt-auto flex flex-col gap-2 p-4",e),...r}),"DrawerFooter");S.displayName="DrawerFooter";var w=a.forwardRef(({className:e,...r},i)=>a.createElement(l.Title,{ref:i,className:s("text-lg font-semibold leading-none tracking-tight",e),...r}));w.displayName=l.Title.displayName;var u=a.forwardRef(({className:e,...r},i)=>a.createElement(l.Description,{ref:i,className:s("text-sm text-muted-foreground",e),...r}));u.displayName=l.Description.displayName;import*as n from"react";import*as t from"@radix-ui/react-scroll-area";var v=n.forwardRef(({className:e,children:r,...i},c)=>n.createElement(t.Root,{ref:c,className:s("relative overflow-hidden",e),...i},n.createElement(t.Viewport,{className:"h-full w-full rounded-[inherit]"},r),n.createElement(b,null),n.createElement(t.Corner,null)));v.displayName=t.Root.displayName;var b=n.forwardRef(({className:e,orientation:r="vertical",...i},c)=>n.createElement(t.ScrollAreaScrollbar,{ref:c,orientation:r,className:s("flex touch-none select-none transition-colors",r==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",r==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...i},n.createElement(t.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})));b.displayName=t.ScrollAreaScrollbar.displayName;import{X as x}from"lucide-react";var O=m(({label:e="Disclaimer"})=>{let{data:r}=g();return o.createElement(d,null,o.createElement(y,{asChild:!0},o.createElement(p,{variant:"link",size:"link"},e)),o.createElement(f,null,o.createElement(D,null,o.createElement(P,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none"},o.createElement(x,{className:"h-4 w-4"}),o.createElement("span",{className:"sr-only"},"Close")),o.createElement(w,null,r?.data.title),o.createElement(u,null,"For more details read our"," ",o.createElement(p,{variant:"link",size:"link",asChild:!0},o.createElement("a",{href:r?.data.html_url,target:"_blank",rel:"noopener noreferrer"},"Disclaimer")))),o.createElement(v,{className:"px-4 pb-4 overflow-y-auto max-h-[calc(80vh-120px)] cost-calculator-disclaimer-drawer-scroll-area"},o.createElement("div",{className:"cost-calculator-disclaimer-drawer-body",dangerouslySetInnerHTML:{__html:r?.data.body??""}}))))},"Disclaimer");export{O as a};
2
+ //# sourceMappingURL=chunk-UXRLSYGD.js.map
@@ -0,0 +1,2 @@
1
+ import{a as B}from"./chunk-UXRLSYGD.js";import{a as D}from"./chunk-CSSMQNJ3.js";import{e as M,f as O}from"./chunk-7EZH5DCX.js";import{a as s}from"./chunk-ATKR5HCM.js";import{a as o}from"./chunk-AYDF3IFZ.js";import v from"react";import{useForm as he}from"react-hook-form";import*as m from"react";import{Slot as me}from"@radix-ui/react-slot";import{Controller as ce,FormProvider as de,useFormContext as pe,useFormState as ue}from"react-hook-form";import*as k from"react";import*as z from"@radix-ui/react-label";function $({className:e,...t}){return k.createElement(z.Root,{"data-slot":"label",className:s("flex items-center gap-2 text-sm leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",e),...t})}o($,"Label");var j=de,A=m.createContext({}),C=o(({...e})=>m.createElement(A.Provider,{value:{name:e.name}},m.createElement(ce,{...e})),"FormField"),w=o(()=>{let e=m.useContext(A),t=m.useContext(U),{getFieldState:r}=pe(),i=ue({name:e.name}),l=r(e.name,i);if(!e)throw new Error("useFormField should be used within <FormField>");let{id:d}=t;return{id:d,name:e.name,formItemId:`${d}-form-item`,formDescriptionId:`${d}-form-item-description`,formMessageId:`${d}-form-item-message`,...l}},"useFormField"),U=m.createContext({});function S({className:e,...t}){let r=m.useId();return m.createElement(U.Provider,{value:{id:r}},m.createElement("div",{"data-slot":"form-item",className:s("grid gap-2",e),...t}))}o(S,"FormItem");function b({className:e,...t}){let{error:r,formItemId:i}=w();return m.createElement($,{"data-slot":"form-label","data-error":!!r,className:s("text-base-color mb-1 data-[error=true]:text-destructive",e),htmlFor:i,...t})}o(b,"FormLabel");function x({...e}){let{error:t,formItemId:r,formDescriptionId:i,formMessageId:l}=w();return m.createElement(me,{"data-slot":"form-control",id:r,"aria-describedby":t?`${i} ${l}`:`${i}`,"aria-invalid":!!t,...e})}o(x,"FormControl");function P({className:e,...t}){let{formDescriptionId:r}=w();return m.createElement("p",{"data-slot":"form-description",id:r,className:s("text-base-color text-sm",e),...t})}o(P,"FormDescription");function R({className:e,...t}){let{error:r,formMessageId:i}=w(),l=r?String(r?.message??""):t.children;return l?m.createElement("p",{"data-slot":"form-message",id:i,className:s("text-destructive text-sm",e),...t},l):null}o(R,"FormMessage");import V from"react";import*as I from"react";function J({legend:e,name:t,fields:r}){return I.createElement("fieldset",{className:s("border-1 border-input p-4 rounded-xl",`RemoteFlows__FieldSetField__${t}`)},I.createElement("legend",{className:"text-sm font-semibold px-2"},e),I.createElement("div",{className:"grid gap-4"},r.map(i=>{let l=T[i.type];return I.createElement(l,{...i,key:i.name,name:`${t}.${i.name}`})})))}o(J,"FieldSetField");import*as _ from"@radix-ui/react-radio-group";import{CircleIcon as fe}from"lucide-react";import*as N from"react";function W({className:e,...t}){return N.createElement(_.Root,{"data-slot":"radio-group",className:s("grid gap-3",e),...t})}o(W,"RadioGroup");function H({className:e,...t}){return N.createElement(_.Item,{"data-slot":"radio-group-item",className:s("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",e),...t},N.createElement(_.Indicator,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center"},N.createElement(fe,{className:"fill-radio absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})))}o(H,"RadioGroupItem");import*as p from"react";import{useFormContext as Fe}from"react-hook-form";function q({name:e,defaultValue:t,description:r,label:i,options:l}){let{control:d}=Fe();return p.createElement(C,{control:d,name:e,defaultValue:t,render:({field:y,fieldState:F})=>p.createElement(S,{className:s("space-y-3",`RemoteFlows__RadioGroupField__Item__${e}`)},p.createElement(b,null,i),p.createElement(x,null,p.createElement(W,{onValueChange:y.onChange,defaultValue:y.value,className:"flex flex-col space-y-1"},l.map(u=>p.createElement(S,{key:u.value,className:"flex items-center space-x-3 space-y-0 gap-0 RemoteFlows__RadioField__Item"},p.createElement(x,null,p.createElement(H,{value:u.value,className:"RemoteFlows__RadioField__Input"})),p.createElement(b,{className:"font-normal mb-0 RemoteFlows__RadioField__Label"},u.label))))),r&&p.createElement(P,null,r),F.error&&p.createElement(R,null))})}o(q,"RadioGroupField");import*as c from"react";import*as n from"react";import*as a from"@radix-ui/react-select";import{CheckIcon as ge,ChevronDownIcon as Y,ChevronUpIcon as ve}from"lucide-react";function K({...e}){return n.createElement(a.Root,{"data-slot":"select",...e})}o(K,"Select");function Q({...e}){return n.createElement(a.Group,{"data-slot":"select-group",...e})}o(Q,"SelectGroup");function X({...e}){return n.createElement(a.Value,{"data-slot":"select-value",...e})}o(X,"SelectValue");function Z({className:e,children:t,...r}){return n.createElement(a.Trigger,{"data-slot":"select-trigger",className:s("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex w-full items-center justify-between rounded-xl border bg-transparent px-4 py-7 text-sm whitespace-nowrap transition-[color] outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","focus-visible:border-focused",e),...r},t,n.createElement(a.Icon,{asChild:!0,className:"absolute right-4"},n.createElement(Y,{className:"size-4"})))}o(Z,"SelectTrigger");function ee({className:e,children:t,position:r="popper",...i}){return n.createElement(a.Portal,null,n.createElement(a.Content,{"data-slot":"select-content",className:s("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-xl border",r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,...i},n.createElement(ye,null),n.createElement(a.Viewport,{className:s(r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1")},t),n.createElement(Se,null)))}o(ee,"SelectContent");function te({className:e,children:t,...r}){return n.createElement(a.Item,{"data-slot":"select-item",className:s("focus:bg-accent focus:text-accent-foreground min-h-11 justify-between [&_svg:not([class*='text-'])]:text-muted-foreground flex w-full cursor-default items-center gap-2 py-2 px-4 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r},n.createElement(a.ItemText,null,t),n.createElement("span",{className:"flex size-3.5 items-center justify-center"},n.createElement(a.ItemIndicator,null,n.createElement(ge,{className:"size-4"}))))}o(te,"SelectItem");function ye({className:e,...t}){return n.createElement(a.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:s("flex cursor-default items-center justify-center py-1",e),...t},n.createElement(ve,{className:"size-4"}))}o(ye,"SelectScrollUpButton");function Se({className:e,...t}){return n.createElement(a.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:s("flex cursor-default items-center justify-center py-1",e),...t},n.createElement(Y,{className:"size-4"}))}o(Se,"SelectScrollDownButton");import{useFormContext as be}from"react-hook-form";function oe({label:e,name:t,options:r,defaultValue:i,description:l,onChange:d}){let{control:y}=be();return c.createElement(C,{defaultValue:i,control:y,name:t,render:({field:F,fieldState:u})=>c.createElement(S,{className:`RemoteFlows__SelectField__Item__${t}`},c.createElement(b,{className:"RemoteFlows__SelectField__Label"},e),c.createElement(x,null,c.createElement("div",{className:"relative"},c.createElement(K,{value:F.value,onValueChange:f=>{F.onChange(f),d?.(f)}},c.createElement(Z,{className:"RemoteFlows__SelectField__Trigger","aria-invalid":!!u.error},c.createElement("span",{className:"absolute"},c.createElement(X,null))),c.createElement(ee,{className:"RemoteFlows__SelectField__Content"},c.createElement(Q,{className:"RemoteFlows__SelectField__Group"},r.map(f=>c.createElement(te,{key:f.value,value:f.value,className:"RemoteFlows__SelectField__SelectItem"},f.label))))))),l&&c.createElement(P,null,l),u.error&&c.createElement(R,null))})}o(oe,"SelectField");import*as g from"react";import{useFormContext as xe}from"react-hook-form";import*as re from"react";function ie({className:e,type:t,...r}){return re.createElement("input",{type:t,"data-slot":"input",className:s("shadow-xs border-input file:text-foreground placeholder:text-muted-foreground flex h-9 w-full min-w-0 rounded-xl border bg-transparent px-4 py-7 text-sm transition-[color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-focused","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...r})}o(ie,"Input");var Ce={type:"text",inputMode:"decimal",pattern:"^[0-9.]*$"};function E({name:e,description:t,label:r,type:i,onChange:l}){let{control:d}=xe(),F=i==="number"?Ce:{type:i};return g.createElement(C,{control:d,name:e,render:({field:u,fieldState:f})=>g.createElement(S,{className:`RemoteFlows__TextField__Item__${e}`},g.createElement(b,{className:"RemoteFlows__TextField__Label"},r),g.createElement(x,null,g.createElement(ie,{...u,onChange:h=>{u.onChange(h),l?.(h)},...F,className:"TextField__Input"})),t&&g.createElement(P,{className:"RemoteFlows__TextField__Description"},t),f.error&&g.createElement(R,{className:"RemoteFlows__TextField__Error"}))})}o(E,"TextField");import Pe from"react";var T={text:E,select:oe,radio:q,number:o(e=>Pe.createElement(E,{...e,type:"text"}),"number"),fieldset:J};var ae=o(({fields:e})=>!e||e.length===0?null:V.createElement(V.Fragment,null,e.map(t=>{if(t.isVisible===!1||t.deprecated)return null;let r=T[t.inputType];return r?V.createElement(r,{key:t.name,...t}):V.createElement("p",{className:"error"},"Field type ",t.inputType," not supported")})),"JSONSchemaFormFields");import{useCallback as se}from"react";var Re=o(e=>se(async t=>await e.validate(t,{abortEarly:!1}),[e]),"useValidationYupResolver");function _e(e){return e.inner.reduce((r,i)=>({...r,[i.path]:{type:i.type??"validation",message:i.message}}),{})}o(_e,"iterateErrors");var le=o(e=>{let t=Re(e);return se(async r=>{let i,l={};try{i=await t(r)}catch(d){l=_e(d)}return Object.keys(l).length>0?{values:{},errors:l}:{values:i,errors:{}}},[e])},"useValidationFormResolver");function Bt({estimationOptions:e=M,defaultValues:t={countryRegionSlug:"",currencySlug:"",salary:""},options:r,onSubmit:i,onError:l,onSuccess:d}){let{onSubmit:y,fields:F,validationSchema:u}=O({defaultRegion:t.countryRegionSlug,estimationOptions:e}),f=le(u),h=he({resolver:f,defaultValues:{country:t?.countryRegionSlug,currency:t?.currencySlug,region:"",salary:t?.salary},mode:"onBlur"}),ne=o(async L=>{await i?.(L);let G=await y(L);G.error?l?.(G.error):d?.(G.data)},"handleSubmit");return v.createElement(v.Fragment,null,v.createElement(j,{...h},v.createElement("form",{onSubmit:h.handleSubmit(ne),className:"space-y-4 RemoteFlows__CostCalculatorForm"},v.createElement(ae,{fields:F}),v.createElement(D,{type:"submit",className:"w-full bg-gray-900 hover:bg-gray-800 text-white"},"Save"))),v.createElement("div",{className:"RemoteFlows__CostCalculator__Disclaimer"},v.createElement(B,{label:r?.disclaimer?.label})))}o(Bt,"CostCalculator");export{Bt as a};
2
+ //# sourceMappingURL=chunk-W6M5VZ2B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/flows/CostCalculator/CostCalculator.tsx","../src/components/ui/form.tsx","../src/components/ui/label.tsx","../src/components/form/JSONSchemaForm.tsx","../src/components/form/fields/FieldSetField.tsx","../src/components/ui/radio-group.tsx","../src/components/form/fields/RadioGroupField.tsx","../src/components/form/fields/SelectField.tsx","../src/components/ui/select.tsx","../src/components/form/fields/TextField.tsx","../src/components/ui/input.tsx","../src/components/form/fields/fieldsMapping.tsx","../src/components/form/yupValidationResolver.ts"],"sourcesContent":["import React from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport type { CostCalculatorEstimateResponse } from '@/src/client';\nimport { Form } from '@/src/components/ui/form';\n\nimport { JSONSchemaFormFields } from '@/src/components/form/JSONSchemaForm';\nimport { useValidationFormResolver } from '@/src/components/form/yupValidationResolver';\nimport { Button } from '@/src/components/ui/button';\nimport { Disclaimer } from '@/src/flows/CostCalculator/Disclaimer';\nimport {\n defaultEstimationOptions,\n useCostCalculator,\n} from '@/src/flows/CostCalculator/hooks';\n\nimport type {\n CostCalculatorEstimationFormValues,\n CostCalculatorEstimationOptions,\n} from './types';\n\ntype CostCalculatorProps = Partial<{\n /**\n * Estimation params allows you to customize the parameters sent to the /cost-calculator/estimation endpoint.\n */\n estimationOptions?: CostCalculatorEstimationOptions;\n /**\n * Default values for the form fields.\n */\n defaultValues: Partial<{\n /**\n * Default value for the country field.\n */\n countryRegionSlug: string;\n /**\n * Default value for the currency field.\n */\n currencySlug: string;\n /**\n * Default value for the salary field.\n */\n salary: string;\n }>;\n /**\n * Options for the CostCalculator component.\n */\n options: Partial<{\n /**\n * Disclaimer options.\n */\n disclaimer: {\n /**\n * Label for the disclaimer\n * @default 'Disclaimer'\n * */\n label: string;\n };\n }>;\n /**\n * Callback function that handles form submission. When form is submit, the form values are sent to the consumer app before behind submitted to Remote.\n * @param data - The payload sent to the /cost-calculator/estimation endpoint.\n */\n onSubmit: (data: CostCalculatorEstimationFormValues) => Promise<void> | void;\n /**\n * Callback function to handle the success when the estimation succeeds. The CostCalculatorEstimateResponse is sent back to you.\n * @param data - The response data from the /cost-calculator/estimation endpoint.\n */\n onSuccess: (data: CostCalculatorEstimateResponse) => Promise<void> | void;\n /**\n * Callback function to handle the error when the estimation fails.\n * @param error - The error object.\n */\n onError: (error: Error) => void;\n}>;\n\nexport function CostCalculator({\n estimationOptions = defaultEstimationOptions,\n defaultValues = {\n countryRegionSlug: '',\n currencySlug: '',\n salary: '',\n },\n options,\n onSubmit,\n onError,\n onSuccess,\n}: CostCalculatorProps) {\n const {\n onSubmit: submitCostCalculator,\n fields,\n validationSchema,\n } = useCostCalculator({\n defaultRegion: defaultValues.countryRegionSlug,\n estimationOptions,\n });\n\n const resolver = useValidationFormResolver(validationSchema);\n const form = useForm<CostCalculatorEstimationFormValues>({\n resolver: resolver,\n defaultValues: {\n country: defaultValues?.countryRegionSlug,\n currency: defaultValues?.currencySlug,\n region: '',\n salary: defaultValues?.salary,\n },\n mode: 'onBlur',\n });\n\n const handleSubmit = async (values: CostCalculatorEstimationFormValues) => {\n await onSubmit?.(values);\n\n const estimation = await submitCostCalculator(values);\n\n if (estimation.error) {\n onError?.(estimation.error);\n } else {\n onSuccess?.(estimation.data);\n }\n };\n\n return (\n <>\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(handleSubmit)}\n className=\"space-y-4 RemoteFlows__CostCalculatorForm\"\n >\n <JSONSchemaFormFields fields={fields} />\n <Button\n type=\"submit\"\n className=\"w-full bg-gray-900 hover:bg-gray-800 text-white\"\n >\n Save\n </Button>\n </form>\n </Form>\n <div className=\"RemoteFlows__CostCalculator__Disclaimer\">\n <Disclaimer label={options?.disclaimer?.label} />\n </div>\n </>\n );\n}\n","import * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { Slot } from '@radix-ui/react-slot';\nimport {\n Controller,\n ControllerProps,\n FieldPath,\n FieldValues,\n FormProvider,\n useFormContext,\n useFormState,\n} from 'react-hook-form';\n\nimport { cn } from '@/src/lib/utils';\nimport { Label } from '@/src/components/ui/label';\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue,\n);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue,\n);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn('grid gap-2', className)}\n {...props}\n />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\n 'text-base-color mb-1 data-[error=true]:text-destructive',\n className,\n )}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn('text-base-color text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn('text-destructive text-sm', className)}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'flex items-center gap-2 text-sm leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import React from 'react';\nimport { fieldsMap } from '@/src/components/form/fields/fieldsMapping';\nimport { Fields } from '@remoteoss/json-schema-form';\nimport { SupportedTypes } from '@/src/components/form/fields/types';\n\ntype JSONSchemaFormFieldsProps = {\n fields: Fields;\n};\n\nexport const JSONSchemaFormFields = ({ fields }: JSONSchemaFormFieldsProps) => {\n if (!fields || fields.length === 0) return null;\n\n return (\n <>\n {fields.map((field) => {\n if (field.isVisible === false || field.deprecated) {\n return null; // Skip hidden or deprecated fields\n }\n\n const FieldComponent = fieldsMap[field.inputType as SupportedTypes];\n\n return FieldComponent ? (\n <FieldComponent key={field.name} {...field} />\n ) : (\n <p className=\"error\">\n Field type {field.inputType as string} not supported\n </p>\n );\n })}\n </>\n );\n};\n","import { fieldsMap } from '@/src/components/form/fields/fieldsMapping';\nimport { cn } from '@/src/lib/utils';\nimport * as React from 'react';\nimport { SupportedTypes } from './types';\n\ntype FieldBase = {\n label: string;\n name: string;\n description: string;\n};\n\ntype FieldWithOptions = FieldBase & {\n type: 'select' | 'radio';\n options: Array<{ value: string; label: string }>;\n};\n\ntype FieldWithoutOptions = FieldBase & {\n type: Exclude<SupportedTypes, 'select' | 'radio'>;\n options?: never;\n};\n\ntype Field = FieldWithOptions | FieldWithoutOptions;\n\ntype FieldSetProps = {\n legend: string;\n name: string;\n fields: Field[];\n};\n\nexport function FieldSetField({ legend, name, fields }: FieldSetProps) {\n return (\n <fieldset\n className={cn(\n 'border-1 border-input p-4 rounded-xl',\n `RemoteFlows__FieldSetField__${name}`,\n )}\n >\n <legend className=\"text-sm font-semibold px-2\">{legend}</legend>\n <div className=\"grid gap-4\">\n {fields.map((field) => {\n const FieldComponent = fieldsMap[field.type];\n return (\n <FieldComponent\n {...field}\n key={field.name}\n name={`${name}.${field.name}`}\n />\n );\n })}\n </div>\n </fieldset>\n );\n}\n","import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { CircleIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn('grid gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n 'border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-radio absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","import {\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '@/src/components/ui/form';\nimport { RadioGroup, RadioGroupItem } from '@/src/components/ui/radio-group';\nimport { cn } from '@/src/lib/utils';\nimport * as React from 'react';\nimport { useFormContext } from 'react-hook-form';\n\ntype RadioGroupFieldProps = {\n name: string;\n label: string;\n description?: string;\n defaultValue?: string;\n options: Array<{ value: string; label: string }>;\n};\n\nexport function RadioGroupField({\n name,\n defaultValue,\n description,\n label,\n options,\n}: RadioGroupFieldProps) {\n const { control } = useFormContext();\n return (\n <FormField\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field, fieldState }) => (\n <FormItem\n className={cn(\n 'space-y-3',\n `RemoteFlows__RadioGroupField__Item__${name}`,\n )}\n >\n <FormLabel>{label}</FormLabel>\n <FormControl>\n <RadioGroup\n onValueChange={field.onChange}\n defaultValue={field.value}\n className=\"flex flex-col space-y-1\"\n >\n {options.map((option) => (\n <FormItem\n key={option.value}\n className=\"flex items-center space-x-3 space-y-0 gap-0 RemoteFlows__RadioField__Item\"\n >\n <FormControl>\n <RadioGroupItem\n value={option.value}\n className=\"RemoteFlows__RadioField__Input\"\n />\n </FormControl>\n <FormLabel className=\"font-normal mb-0 RemoteFlows__RadioField__Label\">\n {option.label}\n </FormLabel>\n </FormItem>\n ))}\n </RadioGroup>\n </FormControl>\n {description && <FormDescription>{description}</FormDescription>}\n {fieldState.error && <FormMessage />}\n </FormItem>\n )}\n />\n );\n}\n","import * as React from 'react';\n\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/src/components/ui/select';\nimport { useFormContext } from 'react-hook-form';\nimport {\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '../../ui/form';\n\ntype SelectFieldProps = {\n label: string;\n name: string;\n placeholder?: string;\n description?: string;\n options: Array<{ value: string; label: string }>;\n defaultValue?: string;\n className?: string;\n onChange?: (value: string) => void;\n};\n\nexport function SelectField({\n label,\n name,\n options,\n defaultValue,\n description,\n onChange,\n}: SelectFieldProps) {\n const { control } = useFormContext();\n\n return (\n <FormField\n defaultValue={defaultValue}\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormItem className={`RemoteFlows__SelectField__Item__${name}`}>\n <FormLabel className=\"RemoteFlows__SelectField__Label\">\n {label}\n </FormLabel>\n <FormControl>\n <div className=\"relative\">\n <Select\n value={field.value}\n onValueChange={(value: string) => {\n field.onChange(value);\n onChange?.(value);\n }}\n >\n <SelectTrigger\n className=\"RemoteFlows__SelectField__Trigger\"\n aria-invalid={Boolean(fieldState.error)}\n >\n <span className=\"absolute\">\n <SelectValue />\n </span>\n </SelectTrigger>\n <SelectContent className=\"RemoteFlows__SelectField__Content\">\n <SelectGroup className=\"RemoteFlows__SelectField__Group\">\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n className=\"RemoteFlows__SelectField__SelectItem\"\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n </FormControl>\n {description && <FormDescription>{description}</FormDescription>}\n {fieldState.error && <FormMessage />}\n </FormItem>\n )}\n />\n );\n}\n","import * as React from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex w-full items-center justify-between rounded-xl border bg-transparent px-4 py-7 text-sm whitespace-nowrap transition-[color] outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n 'focus-visible:border-focused',\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild className=\"absolute right-4\">\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-xl border',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1',\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn('px-2 py-1.5 text-sm font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground min-h-11 justify-between [&_svg:not([class*='text-'])]:text-muted-foreground flex w-full cursor-default items-center gap-2 py-2 px-4 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import * as React from 'react';\n\nimport { useFormContext } from 'react-hook-form';\nimport {\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '../../ui/form';\nimport { Input } from '../../ui/input';\n\ntype TextFieldProps = React.ComponentProps<'input'> & {\n label: string;\n description?: string;\n name: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\ntype InputModeAttrsProps = Pick<\n React.ComponentProps<'input'>,\n 'type' | 'inputMode' | 'pattern'\n>;\n\nconst inputModeAttrs: InputModeAttrsProps = {\n type: 'text',\n inputMode: 'decimal',\n pattern: '^[0-9.]*$',\n};\n\nexport function TextField({\n name,\n description,\n label,\n type,\n onChange,\n}: TextFieldProps) {\n const { control } = useFormContext();\n const isTypeNumber = type === 'number';\n const typeAttrs = isTypeNumber ? inputModeAttrs : { type };\n return (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormItem className={`RemoteFlows__TextField__Item__${name}`}>\n <FormLabel className=\"RemoteFlows__TextField__Label\">\n {label}\n </FormLabel>\n <FormControl>\n <Input\n {...field}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n field.onChange(event);\n onChange?.(event);\n }}\n {...typeAttrs}\n className=\"TextField__Input\"\n />\n </FormControl>\n {description && (\n <FormDescription className=\"RemoteFlows__TextField__Description\">\n {description}\n </FormDescription>\n )}\n {fieldState.error && (\n <FormMessage className=\"RemoteFlows__TextField__Error\" />\n )}\n </FormItem>\n )}\n />\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'shadow-xs border-input file:text-foreground placeholder:text-muted-foreground flex h-9 w-full min-w-0 rounded-xl border bg-transparent px-4 py-7 text-sm transition-[color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-focused',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { FieldSetField } from '@/src/components/form/fields/FieldSetField';\nimport { RadioGroupField } from '@/src/components/form/fields/RadioGroupField';\nimport { SelectField } from '@/src/components/form/fields/SelectField';\nimport { TextField } from '@/src/components/form/fields/TextField';\nimport { SupportedTypes } from '@/src/components/form/fields/types';\nimport React from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const fieldsMap: Record<SupportedTypes, React.ComponentType<any>> = {\n text: TextField,\n select: SelectField,\n radio: RadioGroupField,\n number: (props) => <TextField {...props} type=\"text\" />,\n fieldset: FieldSetField,\n};\n","import { useCallback } from 'react';\nimport { FieldValues, Resolver } from 'react-hook-form';\nimport type { AnyObjectSchema, InferType, ValidationError } from 'yup';\n\nconst useValidationYupResolver = <T extends AnyObjectSchema>(\n validationSchema: T,\n) => {\n return useCallback(\n async (data: FieldValues) => {\n return await validationSchema.validate(data, {\n abortEarly: false,\n });\n },\n [validationSchema],\n );\n};\n\nfunction iterateErrors(error: ValidationError) {\n const errors = (error as ValidationError).inner.reduce(\n (\n allErrors: Record<string, { type: string; message: string }>,\n currentError: ValidationError,\n ) => {\n return {\n ...allErrors,\n [currentError.path as string]: {\n type: currentError.type ?? 'validation',\n message: currentError.message,\n },\n };\n },\n {} as Record<string, { type: string; message: string }>,\n );\n\n return errors;\n}\n\nexport const useValidationFormResolver = <T extends AnyObjectSchema>(\n validationSchema: T,\n): Resolver<InferType<T>> => {\n const yupValidation = useValidationYupResolver(validationSchema);\n return useCallback(\n async (data: FieldValues) => {\n let values;\n let errors = {};\n\n try {\n values = await yupValidation(data);\n } catch (error) {\n errors = iterateErrors(error as ValidationError);\n }\n\n if (Object.keys(errors).length > 0) {\n return {\n values: {},\n errors: errors,\n };\n }\n\n return {\n values,\n errors: {},\n };\n },\n [validationSchema],\n );\n};\n"],"mappings":"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","names":["React","useForm","React","Slot","Controller","FormProvider","useFormContext","useFormState","React","LabelPrimitive","Label","className","props","cn","__name","Form","FormProvider","FormFieldContext","FormField","__name","props","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","useFormContext","formState","useFormState","fieldState","id","FormItem","className","cn","FormLabel","error","formItemId","Label","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","body","React","React","FieldSetField","legend","name","fields","cn","field","FieldComponent","fieldsMap","__name","RadioGroupPrimitive","CircleIcon","React","RadioGroup","className","props","cn","__name","RadioGroupItem","CircleIcon","React","useFormContext","RadioGroupField","name","defaultValue","description","label","options","control","useFormContext","FormField","field","fieldState","FormItem","cn","FormLabel","FormControl","RadioGroup","option","RadioGroupItem","FormDescription","FormMessage","__name","React","React","SelectPrimitive","CheckIcon","ChevronDownIcon","ChevronUpIcon","Select","props","__name","SelectGroup","SelectValue","SelectTrigger","className","children","cn","ChevronDownIcon","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectItem","className","children","props","cn","CheckIcon","__name","SelectScrollUpButton","className","props","cn","ChevronUpIcon","__name","SelectScrollDownButton","ChevronDownIcon","useFormContext","SelectField","label","name","options","defaultValue","description","onChange","control","useFormContext","FormField","field","fieldState","FormItem","FormLabel","FormControl","Select","value","SelectTrigger","SelectValue","SelectContent","SelectGroup","option","SelectItem","FormDescription","FormMessage","__name","React","useFormContext","React","Input","className","type","props","cn","__name","inputModeAttrs","TextField","name","description","label","type","onChange","control","useFormContext","typeAttrs","FormField","field","fieldState","FormItem","FormLabel","FormControl","Input","event","FormDescription","FormMessage","__name","React","fieldsMap","TextField","SelectField","RadioGroupField","__name","props","React","FieldSetField","JSONSchemaFormFields","__name","fields","React","field","FieldComponent","fieldsMap","useCallback","useValidationYupResolver","__name","validationSchema","useCallback","data","iterateErrors","error","allErrors","currentError","useValidationFormResolver","yupValidation","values","errors","CostCalculator","estimationOptions","defaultEstimationOptions","defaultValues","options","onSubmit","onError","onSuccess","submitCostCalculator","fields","validationSchema","useCostCalculator","resolver","useValidationFormResolver","form","useForm","handleSubmit","__name","values","estimation","React","Form","JSONSchemaFormFields","Button","Disclaimer"]}
@@ -1,2 +1,2 @@
1
- import{a}from"../../chunk-V7QTPQZS.js";import"../../chunk-FX6BYIQS.js";import"../../chunk-7ZBXCVHC.js";import"../../chunk-J2GLSJLO.js";import"../../chunk-7EZH5DCX.js";import"../../chunk-ATKR5HCM.js";import"../../chunk-2AGPO366.js";import"../../chunk-AYDF3IFZ.js";export{a as CostCalculator};
1
+ import{a}from"../../chunk-W6M5VZ2B.js";import"../../chunk-FX6BYIQS.js";import"../../chunk-UXRLSYGD.js";import"../../chunk-CSSMQNJ3.js";import"../../chunk-7EZH5DCX.js";import"../../chunk-ATKR5HCM.js";import"../../chunk-2AGPO366.js";import"../../chunk-AYDF3IFZ.js";export{a as CostCalculator};
2
2
  //# sourceMappingURL=CostCalculator.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../../../chunk-7ZBXCVHC.js";import"../../../chunk-J2GLSJLO.js";import"../../../chunk-7EZH5DCX.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-2AGPO366.js";import"../../../chunk-AYDF3IFZ.js";export{a as Disclaimer};
1
+ import{a}from"../../../chunk-UXRLSYGD.js";import"../../../chunk-CSSMQNJ3.js";import"../../../chunk-7EZH5DCX.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-2AGPO366.js";import"../../../chunk-AYDF3IFZ.js";export{a as Disclaimer};
2
2
  //# sourceMappingURL=Disclaimer.js.map
@@ -1,2 +1,2 @@
1
- import"../../../chunk-FX6BYIQS.js";import{a}from"../../../chunk-7ZBXCVHC.js";import"../../../chunk-J2GLSJLO.js";import"../../../chunk-7EZH5DCX.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-2AGPO366.js";import"../../../chunk-AYDF3IFZ.js";export{a as Disclaimer};
1
+ import"../../../chunk-FX6BYIQS.js";import{a}from"../../../chunk-UXRLSYGD.js";import"../../../chunk-CSSMQNJ3.js";import"../../../chunk-7EZH5DCX.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-2AGPO366.js";import"../../../chunk-AYDF3IFZ.js";export{a as Disclaimer};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../../../chunk-ZII4VJ3N.js";import"../../../chunk-Z5SEXEAZ.js";import"../../../chunk-DE6ICD4X.js";import"../../../chunk-J2GLSJLO.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-AYDF3IFZ.js";export{a as CostCalculatorBenefitsBreakdown};
1
+ import{a}from"../../../chunk-MTKRHEZC.js";import"../../../chunk-Z5SEXEAZ.js";import"../../../chunk-DE6ICD4X.js";import"../../../chunk-CSSMQNJ3.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-AYDF3IFZ.js";export{a as CostCalculatorBenefitsBreakdown};
2
2
  //# sourceMappingURL=CostCalculatorBenefitsBreakdown.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../../../chunk-XSTVWDTD.js";import"../../../chunk-Z5SEXEAZ.js";import"../../../chunk-DE6ICD4X.js";import"../../../chunk-J2GLSJLO.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-AYDF3IFZ.js";export{a as CostCalculatorContributionsBreakdown};
1
+ import{a}from"../../../chunk-GINTASQ6.js";import"../../../chunk-Z5SEXEAZ.js";import"../../../chunk-DE6ICD4X.js";import"../../../chunk-CSSMQNJ3.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-AYDF3IFZ.js";export{a as CostCalculatorContributionsBreakdown};
2
2
  //# sourceMappingURL=CostCalculatorContributionsBreakdown.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../../../chunk-BRK6MUQS.js";import"../../../chunk-ZII4VJ3N.js";import"../../../chunk-XSTVWDTD.js";import"../../../chunk-Z5SEXEAZ.js";import"../../../chunk-Q2ZB5MOF.js";import"../../../chunk-DE6ICD4X.js";import"../../../chunk-JEULWBZA.js";import"../../../chunk-BIWKEH5R.js";import"../../../chunk-J2GLSJLO.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-AYDF3IFZ.js";export{a as CostCalculatorResults};
1
+ import{a}from"../../../chunk-P7TWGOSX.js";import"../../../chunk-MTKRHEZC.js";import"../../../chunk-GINTASQ6.js";import"../../../chunk-Z5SEXEAZ.js";import"../../../chunk-Q2ZB5MOF.js";import"../../../chunk-DE6ICD4X.js";import"../../../chunk-JEULWBZA.js";import"../../../chunk-BIWKEH5R.js";import"../../../chunk-CSSMQNJ3.js";import"../../../chunk-ATKR5HCM.js";import"../../../chunk-AYDF3IFZ.js";export{a as CostCalculatorResults};
2
2
  //# sourceMappingURL=CostCalculatorResults.js.map
@@ -1,2 +1,2 @@
1
- import"../../chunk-HMDVBCX2.js";import{a as f}from"../../chunk-BRK6MUQS.js";import"../../chunk-ZII4VJ3N.js";import"../../chunk-XSTVWDTD.js";import"../../chunk-Z5SEXEAZ.js";import"../../chunk-Q2ZB5MOF.js";import"../../chunk-DE6ICD4X.js";import"../../chunk-JEULWBZA.js";import"../../chunk-BIWKEH5R.js";import{a as e}from"../../chunk-V7QTPQZS.js";import"../../chunk-FX6BYIQS.js";import"../../chunk-7ZBXCVHC.js";import"../../chunk-J2GLSJLO.js";import{c as a,d as b,f as c,g as d}from"../../chunk-7EZH5DCX.js";import"../../chunk-ATKR5HCM.js";import"../../chunk-2AGPO366.js";import"../../chunk-AYDF3IFZ.js";export{e as CostCalculator,f as CostCalculatorResults,a as buildCostCalculatorEstimationPayload,c as useCostCalculator,d as useCostCalculatorDisclaimer,b as useCostCalculatorEstimationPdf};
1
+ import"../../chunk-HMDVBCX2.js";import{a as f}from"../../chunk-P7TWGOSX.js";import"../../chunk-MTKRHEZC.js";import"../../chunk-GINTASQ6.js";import"../../chunk-Z5SEXEAZ.js";import"../../chunk-Q2ZB5MOF.js";import"../../chunk-DE6ICD4X.js";import"../../chunk-JEULWBZA.js";import"../../chunk-BIWKEH5R.js";import{a as e}from"../../chunk-W6M5VZ2B.js";import"../../chunk-FX6BYIQS.js";import"../../chunk-UXRLSYGD.js";import"../../chunk-CSSMQNJ3.js";import{c as a,d as b,f as c,g as d}from"../../chunk-7EZH5DCX.js";import"../../chunk-ATKR5HCM.js";import"../../chunk-2AGPO366.js";import"../../chunk-AYDF3IFZ.js";export{e as CostCalculator,f as CostCalculatorResults,a as buildCostCalculatorEstimationPayload,c as useCostCalculator,d as useCostCalculatorDisclaimer,b as useCostCalculatorEstimationPdf};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import"./chunk-HMDVBCX2.js";import{a as n}from"./chunk-BRK6MUQS.js";import"./chunk-ZII4VJ3N.js";import"./chunk-XSTVWDTD.js";import"./chunk-Z5SEXEAZ.js";import"./chunk-Q2ZB5MOF.js";import"./chunk-DE6ICD4X.js";import"./chunk-JEULWBZA.js";import"./chunk-BIWKEH5R.js";import{a as i}from"./chunk-V7QTPQZS.js";import"./chunk-FX6BYIQS.js";import"./chunk-7ZBXCVHC.js";import"./chunk-J2GLSJLO.js";import{a,c as r,d as e,g as o}from"./chunk-7EZH5DCX.js";import{d as t}from"./chunk-ATKR5HCM.js";import"./chunk-2AGPO366.js";import"./chunk-AYDF3IFZ.js";export{i as CostCalculator,n as CostCalculatorResults,a as RemoteFlows,r as buildCostCalculatorEstimationPayload,t as transformYupErrorsIntoObject,o as useCostCalculatorDisclaimer,e as useCostCalculatorEstimationPdf};
1
+ import"./chunk-HMDVBCX2.js";import{a as n}from"./chunk-P7TWGOSX.js";import"./chunk-MTKRHEZC.js";import"./chunk-GINTASQ6.js";import"./chunk-Z5SEXEAZ.js";import"./chunk-Q2ZB5MOF.js";import"./chunk-DE6ICD4X.js";import"./chunk-JEULWBZA.js";import"./chunk-BIWKEH5R.js";import{a as i}from"./chunk-W6M5VZ2B.js";import"./chunk-FX6BYIQS.js";import"./chunk-UXRLSYGD.js";import"./chunk-CSSMQNJ3.js";import{a,c as r,d as e,g as o}from"./chunk-7EZH5DCX.js";import{d as t}from"./chunk-ATKR5HCM.js";import"./chunk-2AGPO366.js";import"./chunk-AYDF3IFZ.js";export{i as CostCalculator,n as CostCalculatorResults,a as RemoteFlows,r as buildCostCalculatorEstimationPayload,t as transformYupErrorsIntoObject,o as useCostCalculatorDisclaimer,e as useCostCalculatorEstimationPdf};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remoteoss/remote-flows",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "scripts": {
5
5
  "build": "NODE_ENV=production tsup",
6
6
  "ci": "npm run build && npm run check-format && npm run check-exports && npm run lint && npm run test",
@@ -1,2 +0,0 @@
1
- import{a as B}from"./chunk-7ZBXCVHC.js";import{a as D}from"./chunk-J2GLSJLO.js";import{e as M,f as O}from"./chunk-7EZH5DCX.js";import{a as n}from"./chunk-ATKR5HCM.js";import{a as o}from"./chunk-AYDF3IFZ.js";import v from"react";import{useForm as he}from"react-hook-form";import*as m from"react";import{Slot as me}from"@radix-ui/react-slot";import{Controller as ce,FormProvider as de,useFormContext as pe,useFormState as ue}from"react-hook-form";import*as k from"react";import*as z from"@radix-ui/react-label";function j({className:e,...t}){return k.createElement(z.Root,{"data-slot":"label",className:n("flex items-center gap-2 text-sm leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",e),...t})}o(j,"Label");var A=de,$=m.createContext({}),C=o(({...e})=>m.createElement($.Provider,{value:{name:e.name}},m.createElement(ce,{...e})),"FormField"),w=o(()=>{let e=m.useContext($),t=m.useContext(U),{getFieldState:r}=pe(),i=ue({name:e.name}),s=r(e.name,i);if(!e)throw new Error("useFormField should be used within <FormField>");let{id:d}=t;return{id:d,name:e.name,formItemId:`${d}-form-item`,formDescriptionId:`${d}-form-item-description`,formMessageId:`${d}-form-item-message`,...s}},"useFormField"),U=m.createContext({});function S({className:e,...t}){let r=m.useId();return m.createElement(U.Provider,{value:{id:r}},m.createElement("div",{"data-slot":"form-item",className:n("grid gap-2",e),...t}))}o(S,"FormItem");function b({className:e,...t}){let{error:r,formItemId:i}=w();return m.createElement(j,{"data-slot":"form-label","data-error":!!r,className:n("text-base-color mb-1 data-[error=true]:text-destructive",e),htmlFor:i,...t})}o(b,"FormLabel");function x({...e}){let{error:t,formItemId:r,formDescriptionId:i,formMessageId:s}=w();return m.createElement(me,{"data-slot":"form-control",id:r,"aria-describedby":t?`${i} ${s}`:`${i}`,"aria-invalid":!!t,...e})}o(x,"FormControl");function P({className:e,...t}){let{formDescriptionId:r}=w();return m.createElement("p",{"data-slot":"form-description",id:r,className:n("text-base-color text-sm",e),...t})}o(P,"FormDescription");function R({className:e,...t}){let{error:r,formMessageId:i}=w(),s=r?String(r?.message??""):t.children;return s?m.createElement("p",{"data-slot":"form-message",id:i,className:n("text-destructive text-sm",e),...t},s):null}o(R,"FormMessage");import V from"react";import*as I from"react";function J({legend:e,name:t,fields:r}){return I.createElement("fieldset",{className:"border-1 border-input p-4 rounded-xl RemoteFlows__FieldSetField"},I.createElement("legend",{className:"text-sm font-semibold px-2"},e),I.createElement("div",{className:"grid gap-4"},r.map(i=>{let s=T[i.type];return I.createElement(s,{...i,key:i.name,name:`${t}.${i.name}`})})))}o(J,"FieldSetField");import*as _ from"@radix-ui/react-radio-group";import{CircleIcon as fe}from"lucide-react";import*as N from"react";function W({className:e,...t}){return N.createElement(_.Root,{"data-slot":"radio-group",className:n("grid gap-3",e),...t})}o(W,"RadioGroup");function H({className:e,...t}){return N.createElement(_.Item,{"data-slot":"radio-group-item",className:n("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",e),...t},N.createElement(_.Indicator,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center"},N.createElement(fe,{className:"fill-radio absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})))}o(H,"RadioGroupItem");import*as p from"react";import{useFormContext as Fe}from"react-hook-form";function q({name:e,defaultValue:t,description:r,label:i,options:s}){let{control:d}=Fe();return p.createElement(C,{control:d,name:e,defaultValue:t,render:({field:y,fieldState:F})=>p.createElement(S,{className:"space-y-3 RemoteFlows__RadioGroupField__Item"},p.createElement(b,null,i),p.createElement(x,null,p.createElement(W,{onValueChange:y.onChange,defaultValue:y.value,className:"flex flex-col space-y-1"},s.map(u=>p.createElement(S,{key:u.value,className:"flex items-center space-x-3 space-y-0 gap-0 RemoteFlows__RadioField__Item"},p.createElement(x,null,p.createElement(H,{value:u.value,className:"RemoteFlows__RadioField__Input"})),p.createElement(b,{className:"font-normal mb-0 RemoteFlows__RadioField__Label"},u.label))))),r&&p.createElement(P,null,r),F.error&&p.createElement(R,null))})}o(q,"RadioGroupField");import*as c from"react";import*as l from"react";import*as a from"@radix-ui/react-select";import{CheckIcon as ge,ChevronDownIcon as Y,ChevronUpIcon as ve}from"lucide-react";function K({...e}){return l.createElement(a.Root,{"data-slot":"select",...e})}o(K,"Select");function Q({...e}){return l.createElement(a.Group,{"data-slot":"select-group",...e})}o(Q,"SelectGroup");function X({...e}){return l.createElement(a.Value,{"data-slot":"select-value",...e})}o(X,"SelectValue");function Z({className:e,children:t,...r}){return l.createElement(a.Trigger,{"data-slot":"select-trigger",className:n("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex w-full items-center justify-between rounded-xl border bg-transparent px-4 py-7 text-sm whitespace-nowrap transition-[color] outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","focus-visible:border-focused",e),...r},t,l.createElement(a.Icon,{asChild:!0,className:"absolute right-4"},l.createElement(Y,{className:"size-4"})))}o(Z,"SelectTrigger");function ee({className:e,children:t,position:r="popper",...i}){return l.createElement(a.Portal,null,l.createElement(a.Content,{"data-slot":"select-content",className:n("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-xl border",r==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,...i},l.createElement(ye,null),l.createElement(a.Viewport,{className:n(r==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1")},t),l.createElement(Se,null)))}o(ee,"SelectContent");function te({className:e,children:t,...r}){return l.createElement(a.Item,{"data-slot":"select-item",className:n("focus:bg-accent focus:text-accent-foreground min-h-11 justify-between [&_svg:not([class*='text-'])]:text-muted-foreground flex w-full cursor-default items-center gap-2 py-2 px-4 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r},l.createElement(a.ItemText,null,t),l.createElement("span",{className:"flex size-3.5 items-center justify-center"},l.createElement(a.ItemIndicator,null,l.createElement(ge,{className:"size-4"}))))}o(te,"SelectItem");function ye({className:e,...t}){return l.createElement(a.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:n("flex cursor-default items-center justify-center py-1",e),...t},l.createElement(ve,{className:"size-4"}))}o(ye,"SelectScrollUpButton");function Se({className:e,...t}){return l.createElement(a.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:n("flex cursor-default items-center justify-center py-1",e),...t},l.createElement(Y,{className:"size-4"}))}o(Se,"SelectScrollDownButton");import{useFormContext as be}from"react-hook-form";function oe({label:e,name:t,options:r,defaultValue:i,description:s,onChange:d}){let{control:y}=be();return c.createElement(C,{defaultValue:i,control:y,name:t,render:({field:F,fieldState:u})=>c.createElement(S,{className:"RemoteFlows__SelectField__Item"},c.createElement(b,{className:"RemoteFlows__SelectField__Label"},e),c.createElement(x,null,c.createElement("div",{className:"relative"},c.createElement(K,{value:F.value,onValueChange:f=>{F.onChange(f),d?.(f)}},c.createElement(Z,{className:"RemoteFlows__SelectField__Trigger","aria-invalid":!!u.error},c.createElement("span",{className:"absolute"},c.createElement(X,null))),c.createElement(ee,{className:"RemoteFlows__SelectField__Content"},c.createElement(Q,{className:"RemoteFlows__SelectField__Group"},r.map(f=>c.createElement(te,{key:f.value,value:f.value,className:"RemoteFlows__SelectField__SelectItem"},f.label))))))),s&&c.createElement(P,null,s),u.error&&c.createElement(R,null))})}o(oe,"SelectField");import*as g from"react";import{useFormContext as xe}from"react-hook-form";import*as re from"react";function ie({className:e,type:t,...r}){return re.createElement("input",{type:t,"data-slot":"input",className:n("shadow-xs border-input file:text-foreground placeholder:text-muted-foreground flex h-9 w-full min-w-0 rounded-xl border bg-transparent px-4 py-7 text-sm transition-[color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-focused","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...r})}o(ie,"Input");var Ce={type:"text",inputMode:"decimal",pattern:"^[0-9.]*$"};function E({name:e,description:t,label:r,type:i,onChange:s}){let{control:d}=xe(),F=i==="number"?Ce:{type:i};return g.createElement(C,{control:d,name:e,render:({field:u,fieldState:f})=>g.createElement(S,{className:"RemoteFlows__TextField__Item"},g.createElement(b,{className:"RemoteFlows__TextField__Label"},r),g.createElement(x,null,g.createElement(ie,{...u,onChange:h=>{u.onChange(h),s?.(h)},...F,className:"TextField__Input"})),t&&g.createElement(P,{className:"RemoteFlows__TextField__Description"},t),f.error&&g.createElement(R,{className:"RemoteFlows__TextField__Error"}))})}o(E,"TextField");import Pe from"react";var T={text:E,select:oe,radio:q,number:o(e=>Pe.createElement(E,{...e,type:"text"}),"number"),fieldset:J};var ae=o(({fields:e})=>!e||e.length===0?null:V.createElement(V.Fragment,null,e.map(t=>{if(t.isVisible===!1||t.deprecated)return null;let r=T[t.inputType];return r?V.createElement(r,{key:t.name,...t}):V.createElement("p",{className:"error"},"Field type ",t.inputType," not supported")})),"JSONSchemaFormFields");import{useCallback as se}from"react";var Re=o(e=>se(async t=>await e.validate(t,{abortEarly:!1}),[e]),"useValidationYupResolver");function _e(e){return e.inner.reduce((r,i)=>({...r,[i.path]:{type:i.type??"validation",message:i.message}}),{})}o(_e,"iterateErrors");var le=o(e=>{let t=Re(e);return se(async r=>{let i,s={};try{i=await t(r)}catch(d){s=_e(d)}return Object.keys(s).length>0?{values:{},errors:s}:{values:i,errors:{}}},[e])},"useValidationFormResolver");function Mt({estimationOptions:e=M,defaultValues:t={countryRegionSlug:"",currencySlug:"",salary:""},options:r,onSubmit:i,onError:s,onSuccess:d}){let{onSubmit:y,fields:F,validationSchema:u}=O({defaultRegion:t.countryRegionSlug,estimationOptions:e}),f=le(u),h=he({resolver:f,defaultValues:{country:t?.countryRegionSlug,currency:t?.currencySlug,region:"",salary:t?.salary},mode:"onBlur"}),ne=o(async L=>{await i?.(L);let G=await y(L);G.error?s?.(G.error):d?.(G.data)},"handleSubmit");return v.createElement(v.Fragment,null,v.createElement(A,{...h},v.createElement("form",{onSubmit:h.handleSubmit(ne),className:"space-y-4 RemoteFlows__CostCalculatorForm"},v.createElement(ae,{fields:F}),v.createElement(D,{type:"submit",className:"w-full bg-gray-900 hover:bg-gray-800 text-white"},"Save"))),v.createElement("div",{className:"RemoteFlows__CostCalculator__Disclaimer"},v.createElement(B,{label:r?.disclaimer?.label})))}o(Mt,"CostCalculator");export{Mt as a};
2
- //# sourceMappingURL=chunk-V7QTPQZS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/flows/CostCalculator/CostCalculator.tsx","../src/components/ui/form.tsx","../src/components/ui/label.tsx","../src/components/form/JSONSchemaForm.tsx","../src/components/form/fields/FieldSetField.tsx","../src/components/ui/radio-group.tsx","../src/components/form/fields/RadioGroupField.tsx","../src/components/form/fields/SelectField.tsx","../src/components/ui/select.tsx","../src/components/form/fields/TextField.tsx","../src/components/ui/input.tsx","../src/components/form/fields/fieldsMapping.tsx","../src/components/form/yupValidationResolver.ts"],"sourcesContent":["import React from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport type { CostCalculatorEstimateResponse } from '@/src/client';\nimport { Form } from '@/src/components/ui/form';\n\nimport { JSONSchemaFormFields } from '@/src/components/form/JSONSchemaForm';\nimport { useValidationFormResolver } from '@/src/components/form/yupValidationResolver';\nimport { Button } from '@/src/components/ui/button';\nimport { Disclaimer } from '@/src/flows/CostCalculator/Disclaimer';\nimport {\n defaultEstimationOptions,\n useCostCalculator,\n} from '@/src/flows/CostCalculator/hooks';\n\nimport type {\n CostCalculatorEstimationFormValues,\n CostCalculatorEstimationOptions,\n} from './types';\n\ntype CostCalculatorProps = Partial<{\n /**\n * Estimation params allows you to customize the parameters sent to the /cost-calculator/estimation endpoint.\n */\n estimationOptions?: CostCalculatorEstimationOptions;\n /**\n * Default values for the form fields.\n */\n defaultValues: Partial<{\n /**\n * Default value for the country field.\n */\n countryRegionSlug: string;\n /**\n * Default value for the currency field.\n */\n currencySlug: string;\n /**\n * Default value for the salary field.\n */\n salary: string;\n }>;\n /**\n * Options for the CostCalculator component.\n */\n options: Partial<{\n /**\n * Disclaimer options.\n */\n disclaimer: {\n /**\n * Label for the disclaimer\n * @default 'Disclaimer'\n * */\n label: string;\n };\n }>;\n /**\n * Callback function that handles form submission. When form is submit, the form values are sent to the consumer app before behind submitted to Remote.\n * @param data - The payload sent to the /cost-calculator/estimation endpoint.\n */\n onSubmit: (data: CostCalculatorEstimationFormValues) => Promise<void> | void;\n /**\n * Callback function to handle the success when the estimation succeeds. The CostCalculatorEstimateResponse is sent back to you.\n * @param data - The response data from the /cost-calculator/estimation endpoint.\n */\n onSuccess: (data: CostCalculatorEstimateResponse) => Promise<void> | void;\n /**\n * Callback function to handle the error when the estimation fails.\n * @param error - The error object.\n */\n onError: (error: Error) => void;\n}>;\n\nexport function CostCalculator({\n estimationOptions = defaultEstimationOptions,\n defaultValues = {\n countryRegionSlug: '',\n currencySlug: '',\n salary: '',\n },\n options,\n onSubmit,\n onError,\n onSuccess,\n}: CostCalculatorProps) {\n const {\n onSubmit: submitCostCalculator,\n fields,\n validationSchema,\n } = useCostCalculator({\n defaultRegion: defaultValues.countryRegionSlug,\n estimationOptions,\n });\n\n const resolver = useValidationFormResolver(validationSchema);\n const form = useForm<CostCalculatorEstimationFormValues>({\n resolver: resolver,\n defaultValues: {\n country: defaultValues?.countryRegionSlug,\n currency: defaultValues?.currencySlug,\n region: '',\n salary: defaultValues?.salary,\n },\n mode: 'onBlur',\n });\n\n const handleSubmit = async (values: CostCalculatorEstimationFormValues) => {\n await onSubmit?.(values);\n\n const estimation = await submitCostCalculator(values);\n\n if (estimation.error) {\n onError?.(estimation.error);\n } else {\n onSuccess?.(estimation.data);\n }\n };\n\n return (\n <>\n <Form {...form}>\n <form\n onSubmit={form.handleSubmit(handleSubmit)}\n className=\"space-y-4 RemoteFlows__CostCalculatorForm\"\n >\n <JSONSchemaFormFields fields={fields} />\n <Button\n type=\"submit\"\n className=\"w-full bg-gray-900 hover:bg-gray-800 text-white\"\n >\n Save\n </Button>\n </form>\n </Form>\n <div className=\"RemoteFlows__CostCalculator__Disclaimer\">\n <Disclaimer label={options?.disclaimer?.label} />\n </div>\n </>\n );\n}\n","import * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { Slot } from '@radix-ui/react-slot';\nimport {\n Controller,\n ControllerProps,\n FieldPath,\n FieldValues,\n FormProvider,\n useFormContext,\n useFormState,\n} from 'react-hook-form';\n\nimport { cn } from '@/src/lib/utils';\nimport { Label } from '@/src/components/ui/label';\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue,\n);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue,\n);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn('grid gap-2', className)}\n {...props}\n />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\n 'text-base-color mb-1 data-[error=true]:text-destructive',\n className,\n )}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn('text-base-color text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn('text-destructive text-sm', className)}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'flex items-center gap-2 text-sm leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import React from 'react';\nimport { fieldsMap } from '@/src/components/form/fields/fieldsMapping';\nimport { Fields } from '@remoteoss/json-schema-form';\nimport { SupportedTypes } from '@/src/components/form/fields/types';\n\ntype JSONSchemaFormFieldsProps = {\n fields: Fields;\n};\n\nexport const JSONSchemaFormFields = ({ fields }: JSONSchemaFormFieldsProps) => {\n if (!fields || fields.length === 0) return null;\n\n return (\n <>\n {fields.map((field) => {\n if (field.isVisible === false || field.deprecated) {\n return null; // Skip hidden or deprecated fields\n }\n\n const FieldComponent = fieldsMap[field.inputType as SupportedTypes];\n\n return FieldComponent ? (\n <FieldComponent key={field.name} {...field} />\n ) : (\n <p className=\"error\">\n Field type {field.inputType as string} not supported\n </p>\n );\n })}\n </>\n );\n};\n","import { fieldsMap } from '@/src/components/form/fields/fieldsMapping';\nimport * as React from 'react';\nimport { SupportedTypes } from './types';\n\ntype FieldBase = {\n label: string;\n name: string;\n description: string;\n};\n\ntype FieldWithOptions = FieldBase & {\n type: 'select' | 'radio';\n options: Array<{ value: string; label: string }>;\n};\n\ntype FieldWithoutOptions = FieldBase & {\n type: Exclude<SupportedTypes, 'select' | 'radio'>;\n options?: never;\n};\n\ntype Field = FieldWithOptions | FieldWithoutOptions;\n\ntype FieldSetProps = {\n legend: string;\n name: string;\n fields: Field[];\n};\n\nexport function FieldSetField({ legend, name, fields }: FieldSetProps) {\n return (\n <fieldset className=\"border-1 border-input p-4 rounded-xl RemoteFlows__FieldSetField\">\n <legend className=\"text-sm font-semibold px-2\">{legend}</legend>\n <div className=\"grid gap-4\">\n {fields.map((field) => {\n const FieldComponent = fieldsMap[field.type];\n return (\n <FieldComponent\n {...field}\n key={field.name}\n name={`${name}.${field.name}`}\n />\n );\n })}\n </div>\n </fieldset>\n );\n}\n","import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { CircleIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn('grid gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n 'border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-radio absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","import {\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '@/src/components/ui/form';\nimport { RadioGroup, RadioGroupItem } from '@/src/components/ui/radio-group';\nimport * as React from 'react';\nimport { useFormContext } from 'react-hook-form';\n\ntype RadioGroupFieldProps = {\n name: string;\n label: string;\n description?: string;\n defaultValue?: string;\n options: Array<{ value: string; label: string }>;\n};\n\nexport function RadioGroupField({\n name,\n defaultValue,\n description,\n label,\n options,\n}: RadioGroupFieldProps) {\n const { control } = useFormContext();\n return (\n <FormField\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field, fieldState }) => (\n <FormItem className=\"space-y-3 RemoteFlows__RadioGroupField__Item\">\n <FormLabel>{label}</FormLabel>\n <FormControl>\n <RadioGroup\n onValueChange={field.onChange}\n defaultValue={field.value}\n className=\"flex flex-col space-y-1\"\n >\n {options.map((option) => (\n <FormItem\n key={option.value}\n className=\"flex items-center space-x-3 space-y-0 gap-0 RemoteFlows__RadioField__Item\"\n >\n <FormControl>\n <RadioGroupItem\n value={option.value}\n className=\"RemoteFlows__RadioField__Input\"\n />\n </FormControl>\n <FormLabel className=\"font-normal mb-0 RemoteFlows__RadioField__Label\">\n {option.label}\n </FormLabel>\n </FormItem>\n ))}\n </RadioGroup>\n </FormControl>\n {description && <FormDescription>{description}</FormDescription>}\n {fieldState.error && <FormMessage />}\n </FormItem>\n )}\n />\n );\n}\n","import * as React from 'react';\n\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/src/components/ui/select';\nimport { useFormContext } from 'react-hook-form';\nimport {\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '../../ui/form';\n\ntype SelectFieldProps = {\n label: string;\n name: string;\n placeholder?: string;\n description?: string;\n options: Array<{ value: string; label: string }>;\n defaultValue?: string;\n className?: string;\n onChange?: (value: string) => void;\n};\n\nexport function SelectField({\n label,\n name,\n options,\n defaultValue,\n description,\n onChange,\n}: SelectFieldProps) {\n const { control } = useFormContext();\n\n return (\n <FormField\n defaultValue={defaultValue}\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormItem className=\"RemoteFlows__SelectField__Item\">\n <FormLabel className=\"RemoteFlows__SelectField__Label\">\n {label}\n </FormLabel>\n <FormControl>\n <div className=\"relative\">\n <Select\n value={field.value}\n onValueChange={(value: string) => {\n field.onChange(value);\n onChange?.(value);\n }}\n >\n <SelectTrigger\n className=\"RemoteFlows__SelectField__Trigger\"\n aria-invalid={Boolean(fieldState.error)}\n >\n <span className=\"absolute\">\n <SelectValue />\n </span>\n </SelectTrigger>\n <SelectContent className=\"RemoteFlows__SelectField__Content\">\n <SelectGroup className=\"RemoteFlows__SelectField__Group\">\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n className=\"RemoteFlows__SelectField__SelectItem\"\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n </FormControl>\n {description && <FormDescription>{description}</FormDescription>}\n {fieldState.error && <FormMessage />}\n </FormItem>\n )}\n />\n );\n}\n","import * as React from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger>) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex w-full items-center justify-between rounded-xl border bg-transparent px-4 py-7 text-sm whitespace-nowrap transition-[color] outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n 'focus-visible:border-focused',\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild className=\"absolute right-4\">\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-xl border',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1',\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn('px-2 py-1.5 text-sm font-medium', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground min-h-11 justify-between [&_svg:not([class*='text-'])]:text-muted-foreground flex w-full cursor-default items-center gap-2 py-2 px-4 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import * as React from 'react';\n\nimport { useFormContext } from 'react-hook-form';\nimport {\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '../../ui/form';\nimport { Input } from '../../ui/input';\n\ntype TextFieldProps = React.ComponentProps<'input'> & {\n label: string;\n description?: string;\n name: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\ntype InputModeAttrsProps = Pick<\n React.ComponentProps<'input'>,\n 'type' | 'inputMode' | 'pattern'\n>;\n\nconst inputModeAttrs: InputModeAttrsProps = {\n type: 'text',\n inputMode: 'decimal',\n pattern: '^[0-9.]*$',\n};\n\nexport function TextField({\n name,\n description,\n label,\n type,\n onChange,\n}: TextFieldProps) {\n const { control } = useFormContext();\n const isTypeNumber = type === 'number';\n const typeAttrs = isTypeNumber ? inputModeAttrs : { type };\n return (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormItem className=\"RemoteFlows__TextField__Item\">\n <FormLabel className=\"RemoteFlows__TextField__Label\">\n {label}\n </FormLabel>\n <FormControl>\n <Input\n {...field}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n field.onChange(event);\n onChange?.(event);\n }}\n {...typeAttrs}\n className=\"TextField__Input\"\n />\n </FormControl>\n {description && (\n <FormDescription className=\"RemoteFlows__TextField__Description\">\n {description}\n </FormDescription>\n )}\n {fieldState.error && (\n <FormMessage className=\"RemoteFlows__TextField__Error\" />\n )}\n </FormItem>\n )}\n />\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'shadow-xs border-input file:text-foreground placeholder:text-muted-foreground flex h-9 w-full min-w-0 rounded-xl border bg-transparent px-4 py-7 text-sm transition-[color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-focused',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import { FieldSetField } from '@/src/components/form/fields/FieldSetField';\nimport { RadioGroupField } from '@/src/components/form/fields/RadioGroupField';\nimport { SelectField } from '@/src/components/form/fields/SelectField';\nimport { TextField } from '@/src/components/form/fields/TextField';\nimport { SupportedTypes } from '@/src/components/form/fields/types';\nimport React from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const fieldsMap: Record<SupportedTypes, React.ComponentType<any>> = {\n text: TextField,\n select: SelectField,\n radio: RadioGroupField,\n number: (props) => <TextField {...props} type=\"text\" />,\n fieldset: FieldSetField,\n};\n","import { useCallback } from 'react';\nimport { FieldValues, Resolver } from 'react-hook-form';\nimport type { AnyObjectSchema, InferType, ValidationError } from 'yup';\n\nconst useValidationYupResolver = <T extends AnyObjectSchema>(\n validationSchema: T,\n) => {\n return useCallback(\n async (data: FieldValues) => {\n return await validationSchema.validate(data, {\n abortEarly: false,\n });\n },\n [validationSchema],\n );\n};\n\nfunction iterateErrors(error: ValidationError) {\n const errors = (error as ValidationError).inner.reduce(\n (\n allErrors: Record<string, { type: string; message: string }>,\n currentError: ValidationError,\n ) => {\n return {\n ...allErrors,\n [currentError.path as string]: {\n type: currentError.type ?? 'validation',\n message: currentError.message,\n },\n };\n },\n {} as Record<string, { type: string; message: string }>,\n );\n\n return errors;\n}\n\nexport const useValidationFormResolver = <T extends AnyObjectSchema>(\n validationSchema: T,\n): Resolver<InferType<T>> => {\n const yupValidation = useValidationYupResolver(validationSchema);\n return useCallback(\n async (data: FieldValues) => {\n let values;\n let errors = {};\n\n try {\n values = await yupValidation(data);\n } catch (error) {\n errors = iterateErrors(error as ValidationError);\n }\n\n if (Object.keys(errors).length > 0) {\n return {\n values: {},\n errors: errors,\n };\n }\n\n return {\n values,\n errors: {},\n };\n },\n [validationSchema],\n );\n};\n"],"mappings":"+MAAA,OAAOA,MAAW,QAClB,OAAS,WAAAC,OAAe,kBCDxB,UAAYC,MAAW,QAEvB,OAAS,QAAAC,OAAY,uBACrB,OACE,cAAAC,GAIA,gBAAAC,GACA,kBAAAC,GACA,gBAAAC,OACK,kBCTP,UAAYC,MAAW,QACvB,UAAYC,MAAoB,wBAIhC,SAASC,EAAM,CACb,UAAAC,EACA,GAAGC,CACL,EAAqD,CACnD,OACE,gBAAgB,OAAf,CACC,YAAU,QACV,UAAWC,EACT,gJACAF,CACF,EACC,GAAGC,EACN,CAEJ,CAdSE,EAAAJ,EAAA,SDST,IAAMK,EAAOC,GASPC,EAAyB,gBAC7B,CAAC,CACH,EAEMC,EAAYC,EAAA,CAGhB,CACA,GAAGC,CACL,IAEI,gBAACH,EAAiB,SAAjB,CAA0B,MAAO,CAAE,KAAMG,EAAM,IAAK,GACnD,gBAACC,GAAA,CAAY,GAAGD,EAAO,CACzB,EATc,aAaZE,EAAeH,EAAA,IAAM,CACzB,IAAMI,EAAqB,aAAWN,CAAgB,EAChDO,EAAoB,aAAWC,CAAe,EAC9C,CAAE,cAAAC,CAAc,EAAIC,GAAe,EACnCC,EAAYC,GAAa,CAAE,KAAMN,EAAa,IAAK,CAAC,EACpDO,EAAaJ,EAAcH,EAAa,KAAMK,CAAS,EAE7D,GAAI,CAACL,EACH,MAAM,IAAI,MAAM,gDAAgD,EAGlE,GAAM,CAAE,GAAAQ,CAAG,EAAIP,EAEf,MAAO,CACL,GAAAO,EACA,KAAMR,EAAa,KACnB,WAAY,GAAGQ,CAAE,aACjB,kBAAmB,GAAGA,CAAE,yBACxB,cAAe,GAAGA,CAAE,qBACpB,GAAGD,CACL,CACF,EArBqB,gBA2BfL,EAAwB,gBAC5B,CAAC,CACH,EAEA,SAASO,EAAS,CAAE,UAAAC,EAAW,GAAGb,CAAM,EAAgC,CACtE,IAAMW,EAAW,QAAM,EAEvB,OACE,gBAACN,EAAgB,SAAhB,CAAyB,MAAO,CAAE,GAAAM,CAAG,GACpC,gBAAC,OACC,YAAU,YACV,UAAWG,EAAG,aAAcD,CAAS,EACpC,GAAGb,EACN,CACF,CAEJ,CAZSD,EAAAa,EAAA,YAcT,SAASG,EAAU,CACjB,UAAAF,EACA,GAAGb,CACL,EAAqD,CACnD,GAAM,CAAE,MAAAgB,EAAO,WAAAC,CAAW,EAAIf,EAAa,EAE3C,OACE,gBAACgB,EAAA,CACC,YAAU,aACV,aAAY,CAAC,CAACF,EACd,UAAWF,EACT,0DACAD,CACF,EACA,QAASI,EACR,GAAGjB,EACN,CAEJ,CAlBSD,EAAAgB,EAAA,aAoBT,SAASI,EAAY,CAAE,GAAGnB,CAAM,EAAsC,CACpE,GAAM,CAAE,MAAAgB,EAAO,WAAAC,EAAY,kBAAAG,EAAmB,cAAAC,CAAc,EAC1DnB,EAAa,EAEf,OACE,gBAACoB,GAAA,CACC,YAAU,eACV,GAAIL,EACJ,mBACGD,EAEG,GAAGI,CAAiB,IAAIC,CAAa,GADrC,GAAGD,CAAiB,GAG1B,eAAc,CAAC,CAACJ,EACf,GAAGhB,EACN,CAEJ,CAjBSD,EAAAoB,EAAA,eAmBT,SAASI,EAAgB,CAAE,UAAAV,EAAW,GAAGb,CAAM,EAA8B,CAC3E,GAAM,CAAE,kBAAAoB,CAAkB,EAAIlB,EAAa,EAE3C,OACE,gBAAC,KACC,YAAU,mBACV,GAAIkB,EACJ,UAAWN,EAAG,0BAA2BD,CAAS,EACjD,GAAGb,EACN,CAEJ,CAXSD,EAAAwB,EAAA,mBAaT,SAASC,EAAY,CAAE,UAAAX,EAAW,GAAGb,CAAM,EAA8B,CACvE,GAAM,CAAE,MAAAgB,EAAO,cAAAK,CAAc,EAAInB,EAAa,EACxCuB,EAAOT,EAAQ,OAAOA,GAAO,SAAW,EAAE,EAAIhB,EAAM,SAE1D,OAAKyB,EAKH,gBAAC,KACC,YAAU,eACV,GAAIJ,EACJ,UAAWP,EAAG,2BAA4BD,CAAS,EAClD,GAAGb,GAEHyB,CACH,EAXO,IAaX,CAlBS1B,EAAAyB,EAAA,eE3IT,OAAOE,MAAW,QCClB,UAAYC,MAAW,QA2BhB,SAASC,EAAc,CAAE,OAAAC,EAAQ,KAAAC,EAAM,OAAAC,CAAO,EAAkB,CACrE,OACE,gBAAC,YAAS,UAAU,mEAClB,gBAAC,UAAO,UAAU,8BAA8BF,CAAO,EACvD,gBAAC,OAAI,UAAU,cACZE,EAAO,IAAKC,GAAU,CACrB,IAAMC,EAAiBC,EAAUF,EAAM,IAAI,EAC3C,OACE,gBAACC,EAAA,CACE,GAAGD,EACJ,IAAKA,EAAM,KACX,KAAM,GAAGF,CAAI,IAAIE,EAAM,IAAI,GAC7B,CAEJ,CAAC,CACH,CACF,CAEJ,CAlBgBG,EAAAP,EAAA,iBC5BhB,UAAYQ,MAAyB,8BACrC,OAAS,cAAAC,OAAkB,eAC3B,UAAYC,MAAW,QAIvB,SAASC,EAAW,CAClB,UAAAC,EACA,GAAGC,CACL,EAA0D,CACxD,OACE,gBAAqB,OAApB,CACC,YAAU,cACV,UAAWC,EAAG,aAAcF,CAAS,EACpC,GAAGC,EACN,CAEJ,CAXSE,EAAAJ,EAAA,cAaT,SAASK,EAAe,CACtB,UAAAJ,EACA,GAAGC,CACL,EAA0D,CACxD,OACE,gBAAqB,OAApB,CACC,YAAU,mBACV,UAAWC,EACT,wWACAF,CACF,EACC,GAAGC,GAEJ,gBAAqB,YAApB,CACC,YAAU,wBACV,UAAU,6CAEV,gBAACI,GAAA,CAAW,UAAU,gFAAgF,CACxG,CACF,CAEJ,CArBSF,EAAAC,EAAA,kBCVT,UAAYE,MAAW,QACvB,OAAS,kBAAAC,OAAsB,kBAUxB,SAASC,EAAgB,CAC9B,KAAAC,EACA,aAAAC,EACA,YAAAC,EACA,MAAAC,EACA,QAAAC,CACF,EAAyB,CACvB,GAAM,CAAE,QAAAC,CAAQ,EAAIC,GAAe,EACnC,OACE,gBAACC,EAAA,CACC,QAASF,EACT,KAAML,EACN,aAAcC,EACd,OAAQ,CAAC,CAAE,MAAAO,EAAO,WAAAC,CAAW,IAC3B,gBAACC,EAAA,CAAS,UAAU,gDAClB,gBAACC,EAAA,KAAWR,CAAM,EAClB,gBAACS,EAAA,KACC,gBAACC,EAAA,CACC,cAAeL,EAAM,SACrB,aAAcA,EAAM,MACpB,UAAU,2BAETJ,EAAQ,IAAKU,GACZ,gBAACJ,EAAA,CACC,IAAKI,EAAO,MACZ,UAAU,6EAEV,gBAACF,EAAA,KACC,gBAACG,EAAA,CACC,MAAOD,EAAO,MACd,UAAU,iCACZ,CACF,EACA,gBAACH,EAAA,CAAU,UAAU,mDAClBG,EAAO,KACV,CACF,CACD,CACH,CACF,EACCZ,GAAe,gBAACc,EAAA,KAAiBd,CAAY,EAC7CO,EAAW,OAAS,gBAACQ,EAAA,IAAY,CACpC,EAEJ,CAEJ,CA9CgBC,EAAAnB,EAAA,mBCpBhB,UAAYoB,MAAW,QCAvB,UAAYC,MAAW,QACvB,UAAYC,MAAqB,yBACjC,OAAS,aAAAC,GAAW,mBAAAC,EAAiB,iBAAAC,OAAqB,eAI1D,SAASC,EAAO,CACd,GAAGC,CACL,EAAsD,CACpD,OAAO,gBAAiB,OAAhB,CAAqB,YAAU,SAAU,GAAGA,EAAO,CAC7D,CAJSC,EAAAF,EAAA,UAMT,SAASG,EAAY,CACnB,GAAGF,CACL,EAAuD,CACrD,OAAO,gBAAiB,QAAhB,CAAsB,YAAU,eAAgB,GAAGA,EAAO,CACpE,CAJSC,EAAAC,EAAA,eAMT,SAASC,EAAY,CACnB,GAAGH,CACL,EAAuD,CACrD,OAAO,gBAAiB,QAAhB,CAAsB,YAAU,eAAgB,GAAGA,EAAO,CACpE,CAJSC,EAAAE,EAAA,eAMT,SAASC,EAAc,CACrB,UAAAC,EACA,SAAAC,EACA,GAAGN,CACL,EAAyD,CACvD,OACE,gBAAiB,UAAhB,CACC,YAAU,iBACV,UAAWO,EACT,onBACA,+BACAF,CACF,EACC,GAAGL,GAEHM,EACD,gBAAiB,OAAhB,CAAqB,QAAO,GAAC,UAAU,oBACtC,gBAACE,EAAA,CAAgB,UAAU,SAAS,CACtC,CACF,CAEJ,CArBSP,EAAAG,EAAA,iBAuBT,SAASK,GAAc,CACrB,UAAAJ,EACA,SAAAC,EACA,SAAAI,EAAW,SACX,GAAGV,CACL,EAAyD,CACvD,OACE,gBAAiB,SAAhB,KACC,gBAAiB,UAAhB,CACC,YAAU,iBACV,UAAWO,EACT,4bACAG,IAAa,UACX,kIACFL,CACF,EACA,SAAUK,EACT,GAAGV,GAEJ,gBAACW,GAAA,IAAqB,EACtB,gBAAiB,WAAhB,CACC,UAAWJ,EACTG,IAAa,UACX,qGACJ,GAECJ,CACH,EACA,gBAACM,GAAA,IAAuB,CAC1B,CACF,CAEJ,CAhCSX,EAAAQ,GAAA,iBA+CT,SAASI,GAAW,CAClB,UAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAsD,CACpD,OACE,gBAAiB,OAAhB,CACC,YAAU,cACV,UAAWC,EACT,0aACAH,CACF,EACC,GAAGE,GAEJ,gBAAiB,WAAhB,KAA0BD,CAAS,EACpC,gBAAC,QAAK,UAAU,6CACd,gBAAiB,gBAAhB,KACC,gBAACG,GAAA,CAAU,UAAU,SAAS,CAChC,CACF,CACF,CAEJ,CAtBSC,EAAAN,GAAA,cAqCT,SAASO,GAAqB,CAC5B,UAAAC,EACA,GAAGC,CACL,EAAgE,CAC9D,OACE,gBAAiB,iBAAhB,CACC,YAAU,0BACV,UAAWC,EACT,uDACAF,CACF,EACC,GAAGC,GAEJ,gBAACE,GAAA,CAAc,UAAU,SAAS,CACpC,CAEJ,CAhBSC,EAAAL,GAAA,wBAkBT,SAASM,GAAuB,CAC9B,UAAAL,EACA,GAAGC,CACL,EAAkE,CAChE,OACE,gBAAiB,mBAAhB,CACC,YAAU,4BACV,UAAWC,EACT,uDACAF,CACF,EACC,GAAGC,GAEJ,gBAACK,EAAA,CAAgB,UAAU,SAAS,CACtC,CAEJ,CAhBSF,EAAAC,GAAA,0BD3IT,OAAS,kBAAAE,OAAsB,kBAqBxB,SAASC,GAAY,CAC1B,MAAAC,EACA,KAAAC,EACA,QAAAC,EACA,aAAAC,EACA,YAAAC,EACA,SAAAC,CACF,EAAqB,CACnB,GAAM,CAAE,QAAAC,CAAQ,EAAIC,GAAe,EAEnC,OACE,gBAACC,EAAA,CACC,aAAcL,EACd,QAASG,EACT,KAAML,EACN,OAAQ,CAAC,CAAE,MAAAQ,EAAO,WAAAC,CAAW,IAC3B,gBAACC,EAAA,CAAS,UAAU,kCAClB,gBAACC,EAAA,CAAU,UAAU,mCAClBZ,CACH,EACA,gBAACa,EAAA,KACC,gBAAC,OAAI,UAAU,YACb,gBAACC,EAAA,CACC,MAAOL,EAAM,MACb,cAAgBM,GAAkB,CAChCN,EAAM,SAASM,CAAK,EACpBV,IAAWU,CAAK,CAClB,GAEA,gBAACC,EAAA,CACC,UAAU,oCACV,eAAc,EAAQN,EAAW,OAEjC,gBAAC,QAAK,UAAU,YACd,gBAACO,EAAA,IAAY,CACf,CACF,EACA,gBAACC,GAAA,CAAc,UAAU,qCACvB,gBAACC,EAAA,CAAY,UAAU,mCACpBjB,EAAQ,IAAKkB,GACZ,gBAACC,GAAA,CACC,IAAKD,EAAO,MACZ,MAAOA,EAAO,MACd,UAAU,wCAETA,EAAO,KACV,CACD,CACH,CACF,CACF,CACF,CACF,EACChB,GAAe,gBAACkB,EAAA,KAAiBlB,CAAY,EAC7CM,EAAW,OAAS,gBAACa,EAAA,IAAY,CACpC,EAEJ,CAEJ,CA3DgBC,EAAAzB,GAAA,eE/BhB,UAAY0B,MAAW,QAEvB,OAAS,kBAAAC,OAAsB,kBCF/B,UAAYC,OAAW,QAIvB,SAASC,GAAM,CAAE,UAAAC,EAAW,KAAAC,EAAM,GAAGC,CAAM,EAAkC,CAC3E,OACE,iBAAC,SACC,KAAMD,EACN,YAAU,QACV,UAAWE,EACT,6WACA,+BACA,yGACAH,CACF,EACC,GAAGE,EACN,CAEJ,CAdSE,EAAAL,GAAA,SDqBT,IAAMM,GAAsC,CAC1C,KAAM,OACN,UAAW,UACX,QAAS,WACX,EAEO,SAASC,EAAU,CACxB,KAAAC,EACA,YAAAC,EACA,MAAAC,EACA,KAAAC,EACA,SAAAC,CACF,EAAmB,CACjB,GAAM,CAAE,QAAAC,CAAQ,EAAIC,GAAe,EAE7BC,EADeJ,IAAS,SACGL,GAAiB,CAAE,KAAAK,CAAK,EACzD,OACE,gBAACK,EAAA,CACC,QAASH,EACT,KAAML,EACN,OAAQ,CAAC,CAAE,MAAAS,EAAO,WAAAC,CAAW,IAC3B,gBAACC,EAAA,CAAS,UAAU,gCAClB,gBAACC,EAAA,CAAU,UAAU,iCAClBV,CACH,EACA,gBAACW,EAAA,KACC,gBAACC,GAAA,CACE,GAAGL,EACJ,SAAWM,GAA+C,CACxDN,EAAM,SAASM,CAAK,EACpBX,IAAWW,CAAK,CAClB,EACC,GAAGR,EACJ,UAAU,mBACZ,CACF,EACCN,GACC,gBAACe,EAAA,CAAgB,UAAU,uCACxBf,CACH,EAEDS,EAAW,OACV,gBAACO,EAAA,CAAY,UAAU,gCAAgC,CAE3D,EAEJ,CAEJ,CA1CgBC,EAAAnB,EAAA,aE1BhB,OAAOoB,OAAW,QAGX,IAAMC,EAA8D,CACzE,KAAMC,EACN,OAAQC,GACR,MAAOC,EACP,OAAQC,EAACC,GAAUC,GAAA,cAACL,EAAA,CAAW,GAAGI,EAAO,KAAK,OAAO,EAA7C,UACR,SAAUE,CACZ,ERLO,IAAMC,GAAuBC,EAAA,CAAC,CAAE,OAAAC,CAAO,IACxC,CAACA,GAAUA,EAAO,SAAW,EAAU,KAGzCC,EAAA,cAAAA,EAAA,cACGD,EAAO,IAAKE,GAAU,CACrB,GAAIA,EAAM,YAAc,IAASA,EAAM,WACrC,OAAO,KAGT,IAAMC,EAAiBC,EAAUF,EAAM,SAA2B,EAElE,OAAOC,EACLF,EAAA,cAACE,EAAA,CAAe,IAAKD,EAAM,KAAO,GAAGA,EAAO,EAE5CD,EAAA,cAAC,KAAE,UAAU,SAAQ,cACPC,EAAM,UAAoB,gBACxC,CAEJ,CAAC,CACH,EApBgC,wBSTpC,OAAS,eAAAG,OAAmB,QAI5B,IAAMC,GAA2BC,EAC/BC,GAEOC,GACL,MAAOC,GACE,MAAMF,EAAiB,SAASE,EAAM,CAC3C,WAAY,EACd,CAAC,EAEH,CAACF,CAAgB,CACnB,EAV+B,4BAajC,SAASG,GAAcC,EAAwB,CAiB7C,OAhBgBA,EAA0B,MAAM,OAC9C,CACEC,EACAC,KAEO,CACL,GAAGD,EACH,CAACC,EAAa,IAAc,EAAG,CAC7B,KAAMA,EAAa,MAAQ,aAC3B,QAASA,EAAa,OACxB,CACF,GAEF,CAAC,CACH,CAGF,CAlBSP,EAAAI,GAAA,iBAoBF,IAAMI,GAA4BR,EACvCC,GAC2B,CAC3B,IAAMQ,EAAgBV,GAAyBE,CAAgB,EAC/D,OAAOC,GACL,MAAOC,GAAsB,CAC3B,IAAIO,EACAC,EAAS,CAAC,EAEd,GAAI,CACFD,EAAS,MAAMD,EAAcN,CAAI,CACnC,OAASE,EAAO,CACdM,EAASP,GAAcC,CAAwB,CACjD,CAEA,OAAI,OAAO,KAAKM,CAAM,EAAE,OAAS,EACxB,CACL,OAAQ,CAAC,EACT,OAAQA,CACV,EAGK,CACL,OAAAD,EACA,OAAQ,CAAC,CACX,CACF,EACA,CAACT,CAAgB,CACnB,CACF,EA7ByC,6BZqClC,SAASW,GAAe,CAC7B,kBAAAC,EAAoBC,EACpB,cAAAC,EAAgB,CACd,kBAAmB,GACnB,aAAc,GACd,OAAQ,EACV,EACA,QAAAC,EACA,SAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAAwB,CACtB,GAAM,CACJ,SAAUC,EACV,OAAAC,EACA,iBAAAC,CACF,EAAIC,EAAkB,CACpB,cAAeR,EAAc,kBAC7B,kBAAAF,CACF,CAAC,EAEKW,EAAWC,GAA0BH,CAAgB,EACrDI,EAAOC,GAA4C,CACvD,SAAUH,EACV,cAAe,CACb,QAAST,GAAe,kBACxB,SAAUA,GAAe,aACzB,OAAQ,GACR,OAAQA,GAAe,MACzB,EACA,KAAM,QACR,CAAC,EAEKa,GAAeC,EAAA,MAAOC,GAA+C,CACzE,MAAMb,IAAWa,CAAM,EAEvB,IAAMC,EAAa,MAAMX,EAAqBU,CAAM,EAEhDC,EAAW,MACbb,IAAUa,EAAW,KAAK,EAE1BZ,IAAYY,EAAW,IAAI,CAE/B,EAVqB,gBAYrB,OACEC,EAAA,cAAAA,EAAA,cACEA,EAAA,cAACC,EAAA,CAAM,GAAGP,GACRM,EAAA,cAAC,QACC,SAAUN,EAAK,aAAaE,EAAY,EACxC,UAAU,6CAEVI,EAAA,cAACE,GAAA,CAAqB,OAAQb,EAAQ,EACtCW,EAAA,cAACG,EAAA,CACC,KAAK,SACL,UAAU,mDACX,MAED,CACF,CACF,EACAH,EAAA,cAAC,OAAI,UAAU,2CACbA,EAAA,cAACI,EAAA,CAAW,MAAOpB,GAAS,YAAY,MAAO,CACjD,CACF,CAEJ,CAlEgBa,EAAAjB,GAAA","names":["React","useForm","React","Slot","Controller","FormProvider","useFormContext","useFormState","React","LabelPrimitive","Label","className","props","cn","__name","Form","FormProvider","FormFieldContext","FormField","__name","props","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","useFormContext","formState","useFormState","fieldState","id","FormItem","className","cn","FormLabel","error","formItemId","Label","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","body","React","React","FieldSetField","legend","name","fields","field","FieldComponent","fieldsMap","__name","RadioGroupPrimitive","CircleIcon","React","RadioGroup","className","props","cn","__name","RadioGroupItem","CircleIcon","React","useFormContext","RadioGroupField","name","defaultValue","description","label","options","control","useFormContext","FormField","field","fieldState","FormItem","FormLabel","FormControl","RadioGroup","option","RadioGroupItem","FormDescription","FormMessage","__name","React","React","SelectPrimitive","CheckIcon","ChevronDownIcon","ChevronUpIcon","Select","props","__name","SelectGroup","SelectValue","SelectTrigger","className","children","cn","ChevronDownIcon","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectItem","className","children","props","cn","CheckIcon","__name","SelectScrollUpButton","className","props","cn","ChevronUpIcon","__name","SelectScrollDownButton","ChevronDownIcon","useFormContext","SelectField","label","name","options","defaultValue","description","onChange","control","useFormContext","FormField","field","fieldState","FormItem","FormLabel","FormControl","Select","value","SelectTrigger","SelectValue","SelectContent","SelectGroup","option","SelectItem","FormDescription","FormMessage","__name","React","useFormContext","React","Input","className","type","props","cn","__name","inputModeAttrs","TextField","name","description","label","type","onChange","control","useFormContext","typeAttrs","FormField","field","fieldState","FormItem","FormLabel","FormControl","Input","event","FormDescription","FormMessage","__name","React","fieldsMap","TextField","SelectField","RadioGroupField","__name","props","React","FieldSetField","JSONSchemaFormFields","__name","fields","React","field","FieldComponent","fieldsMap","useCallback","useValidationYupResolver","__name","validationSchema","useCallback","data","iterateErrors","error","allErrors","currentError","useValidationFormResolver","yupValidation","values","errors","CostCalculator","estimationOptions","defaultEstimationOptions","defaultValues","options","onSubmit","onError","onSuccess","submitCostCalculator","fields","validationSchema","useCostCalculator","resolver","useValidationFormResolver","form","useForm","handleSubmit","__name","values","estimation","React","Form","JSONSchemaFormFields","Button","Disclaimer"]}