@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 +63 -28
- package/dist/{chunk-J2GLSJLO.js → chunk-CSSMQNJ3.js} +2 -2
- package/dist/{chunk-J2GLSJLO.js.map → chunk-CSSMQNJ3.js.map} +1 -1
- package/dist/{chunk-XSTVWDTD.js → chunk-GINTASQ6.js} +2 -2
- package/dist/{chunk-ZII4VJ3N.js → chunk-MTKRHEZC.js} +2 -2
- package/dist/{chunk-BRK6MUQS.js → chunk-P7TWGOSX.js} +2 -2
- package/dist/{chunk-7ZBXCVHC.js → chunk-UXRLSYGD.js} +2 -2
- package/dist/chunk-W6M5VZ2B.js +2 -0
- package/dist/chunk-W6M5VZ2B.js.map +1 -0
- package/dist/flows/CostCalculator/CostCalculator.js +1 -1
- package/dist/flows/CostCalculator/Disclaimer/Disclaimer.js +1 -1
- package/dist/flows/CostCalculator/Disclaimer/index.js +1 -1
- package/dist/flows/CostCalculator/Results/CostCalculatorBenefitsBreakdown.js +1 -1
- package/dist/flows/CostCalculator/Results/CostCalculatorContributionsBreakdown.js +1 -1
- package/dist/flows/CostCalculator/Results/CostCalculatorResults.js +1 -1
- package/dist/flows/CostCalculator/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-V7QTPQZS.js +0 -2
- package/dist/chunk-V7QTPQZS.js.map +0 -1
- /package/dist/{chunk-XSTVWDTD.js.map → chunk-GINTASQ6.js.map} +0 -0
- /package/dist/{chunk-ZII4VJ3N.js.map → chunk-MTKRHEZC.js.map} +0 -0
- /package/dist/{chunk-BRK6MUQS.js.map → chunk-P7TWGOSX.js.map} +0 -0
- /package/dist/{chunk-7ZBXCVHC.js.map → chunk-UXRLSYGD.js.map} +0 -0
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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` |
|
|
332
|
-
| `includeCostBreakdowns` | `boolean` |
|
|
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
|
|
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
|
|
427
|
+
### Custom CSS
|
|
405
428
|
|
|
406
|
-
|
|
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
|
-
|
|
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
|
-
|
|
433
|
+
```css
|
|
434
|
+
.RemoteFlows__CostCalculatorForm {
|
|
435
|
+
display: grid;
|
|
436
|
+
grid-template-columns: 1fr 1fr;
|
|
437
|
+
gap: 1rem;
|
|
438
|
+
}
|
|
411
439
|
|
|
412
|
-
|
|
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
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
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
|
|
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-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
package/dist/chunk-V7QTPQZS.js
DELETED
|
@@ -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":"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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","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"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|