@flexkit/studio 0.0.15 → 0.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/asset-GMXBEENP.js +2 -0
- package/dist/{asset-65455B7V.js.map → asset-GMXBEENP.js.map} +1 -1
- package/dist/astro.js +1 -1
- package/dist/{chunk-HIMN6EYJ.js → chunk-L4ER5RUF.js} +2 -2
- package/dist/{chunk-HIMN6EYJ.js.map → chunk-L4ER5RUF.js.map} +1 -1
- package/dist/chunk-PHGUSZ22.js +2 -0
- package/dist/{chunk-2WWU4XFO.js.map → chunk-PHGUSZ22.js.map} +1 -1
- package/dist/{chunk-TL6JXN6O.js → chunk-QOSBN65B.js} +23 -3
- package/dist/{chunk-OTQ3BR2A.js → chunk-SPWSXOXS.js} +2 -2
- package/dist/chunk-SPWSXOXS.js.map +1 -0
- package/dist/{chunk-OOYWOWHR.js → chunk-TEKVBWRU.js} +2 -2
- package/dist/{chunk-OOYWOWHR.js.map → chunk-TEKVBWRU.js.map} +1 -1
- package/dist/chunk-WA4EGOM4.js +2 -0
- package/dist/chunk-WA4EGOM4.js.map +1 -0
- package/dist/chunk-WB6HSMJT.js +2 -0
- package/dist/chunk-WB6HSMJT.js.map +1 -0
- package/dist/index.js +23 -23
- package/dist/index.js.map +1 -1
- package/dist/nextjs.js +1 -1
- package/dist/switch-HXXPL3GZ.js +2 -0
- package/dist/{switch-FU7XZ34K.js.map → switch-HXXPL3GZ.js.map} +1 -1
- package/dist/tanstack-start.js +1 -1
- package/dist/text-XQO4VSS3.js +2 -0
- package/dist/{text-DFG6LLN6.js.map → text-XQO4VSS3.js.map} +1 -1
- package/dist/textarea-JDQEV6HE.js +2 -0
- package/dist/{textarea-XFHA5IEI.js.map → textarea-JDQEV6HE.js.map} +1 -1
- package/dist/ui.d.ts +3 -20
- package/dist/ui.js +1 -1
- package/dist/ui.js.map +1 -1
- package/dist/user-nav-7U3KULA6.js +2 -0
- package/dist/user-nav-7U3KULA6.js.map +1 -0
- package/package.json +4 -7
- package/dist/asset-65455B7V.js +0 -2
- package/dist/chunk-2WWU4XFO.js +0 -2
- package/dist/chunk-D5N42D57.js +0 -2
- package/dist/chunk-D5N42D57.js.map +0 -1
- package/dist/chunk-NJN7EGGK.js +0 -2
- package/dist/chunk-NJN7EGGK.js.map +0 -1
- package/dist/chunk-OTQ3BR2A.js.map +0 -1
- package/dist/switch-FU7XZ34K.js +0 -2
- package/dist/text-DFG6LLN6.js +0 -2
- package/dist/textarea-XFHA5IEI.js +0 -2
- package/dist/user-nav-5LW5USDZ.js +0 -2
- package/dist/user-nav-5LW5USDZ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"asset-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"asset-GMXBEENP.js"}
|
package/dist/astro.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {b}from'./chunk-AYKEFG4H.js';import {c,e,f,h,g,i}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {b}from'./chunk-AYKEFG4H.js';import {c,e,f,h,g,i}from'./chunk-SPWSXOXS.js';import {a}from'./chunk-AXB7FQV2.js';import*as x from'react';import {jsx,jsxs}from'react/jsx-runtime';var n=x.forwardRef(({className:o,...t},i)=>jsx("textarea",{className:a("fk-flex fk-min-h-[80px] fk-w-full fk-rounded-md fk-border fk-border-input fk-bg-background fk-px-3 fk-py-2 fk-text-sm fk-ring-offset-background placeholder:fk-text-muted-foreground focus-visible:fk-outline-none focus-visible:fk-ring-2 focus-visible:fk-ring-ring focus-visible:fk-ring-offset-2 disabled:fk-cursor-not-allowed disabled:fk-opacity-50",o),ref:i,...t}));n.displayName="Textarea";function P({control:o,fieldSchema:t,getValues:i$1,setValue:f$1}){let{name:l,label:g$1,isEditable:T,options:s}=t;function h$1(e,r){f$1(l,{...r,value:e.currentTarget.value});}function y(e,r){f$1(l,{...r,disabled:e});}return jsx(c,{control:o,name:l,render:({field:e$1})=>jsxs(e,{children:[jsxs("div",{className:"fk-flex",children:[jsxs("div",{className:"fk-full-w",children:[jsx(f,{children:g$1}),s?.comment?jsx(h,{children:s.comment}):null]}),jsx("div",{className:"fk-h-full fk-self-end fk-ml-auto"})]}),jsx(g,{children:jsx(n,{className:`fk-w-full fk-mt-[0.1875rem] ${!e$1.value?.scope||e$1.value.scope==="default"?"fk-mb-3":""}`,disabled:T===false||e$1.value?.disabled,...e$1,onChange:r=>{h$1(r,e$1.value);},value:e$1.value?.value||""})}),jsx(b,{checked:e$1.value?.disabled??false,onChange:r=>{y(r,e$1.value);},scope:e$1.value?.scope}),jsx(i,{})]})})}export{P as a};//# sourceMappingURL=chunk-L4ER5RUF.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-L4ER5RUF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/primitives/textarea.tsx","../src/form/fields/textarea.tsx"],"names":["Textarea","className","props","ref","jsx","cn","control","fieldSchema","getValues","setValue","name","label","isEditable","options","handleInput","event","previousValue","handleCheckbox","checked","value","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"2MAMA,IAAMA,CAAAA,CAAiB,CAAA,CAAA,UAAA,CAA+C,CAAC,CAAE,SAAA,CAAAC,EAAW,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAE5FC,GAAAA,CAAC,UAAA,CAAA,CACC,UAAWC,CAAAA,CACT,4VAAA,CACAJ,CACF,CAAA,CACA,GAAA,CAAKE,CAAAA,CACJ,GAAGD,CAAAA,CACN,CAEH,CAAA,CACDF,CAAAA,CAAS,WAAA,CAAc,UAAA,CCZhB,SAASA,EAAS,CAAE,OAAA,CAAAM,CAAAA,CAAS,WAAA,CAAAC,CAAAA,CAAa,SAAA,CAAAC,IAAW,QAAA,CAAAC,GAAS,CAAA,CAA6C,CAChH,GAAM,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,IAAO,UAAA,CAAAC,CAAAA,CAAY,QAAAC,CAAQ,CAAA,CAAIN,CAAAA,CAE7C,SAASO,GAAAA,CACPC,CAAAA,CACAC,EACM,CACNP,GAAAA,CAASC,CAAAA,CAAM,CACb,GAAGM,CAAAA,CACH,MAAOD,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASE,CAAAA,CAAeC,CAAAA,CAAkBC,CAAAA,CAAyC,CACjFV,GAAAA,CAASC,CAAAA,CAAM,CACb,GAAGS,CAAAA,CACH,QAAA,CAAUD,CACZ,CAAC,EACH,CAEA,OACEd,GAAAA,CAACgB,CAAAA,CAAA,CACC,OAAA,CAASd,CAAAA,CACT,KAAMI,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAW,GAAM,IACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,IAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAAlB,GAAAA,CAACoB,CAAAA,CAAA,CAAW,QAAA,CAAAb,GAAAA,CAAM,EACjBE,CAAAA,EAAS,OAAA,CAAUT,GAAAA,CAACqB,CAAAA,CAAA,CAAiB,QAAA,CAAAZ,EAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAAA,CAC7E,CAAA,CACAT,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kCAAA,CAEf,CAAA,CAAA,CACF,CAAA,CACAA,GAAAA,CAACsB,CAAAA,CAAA,CACC,SAAAtB,GAAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAW,CAAA,4BAAA,EACT,CAACqB,IAAM,KAAA,EAAO,KAAA,EAASA,GAAAA,CAAM,KAAA,CAAM,KAAA,GAAU,SAAA,CAAY,UAAY,EACvE,CAAA,CAAA,CACA,QAAA,CAAUT,CAAAA,GAAe,KAAA,EAASS,GAAAA,CAAM,OAAO,QAAA,CAC9C,GAAGA,GAAAA,CACJ,QAAA,CAAWN,CAAAA,EAAU,CACnBD,IAAYC,CAAAA,CAAOM,GAAAA,CAAM,KAAK,EAChC,CAAA,CACA,KAAA,CAAQA,IAAM,KAAA,EAAO,KAAA,EAAoB,EAAA,CAC3C,CAAA,CACF,CAAA,CACAjB,GAAAA,CAACuB,EAAA,CACC,OAAA,CAASN,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,SAAWH,CAAAA,EAAY,CACrBD,CAAAA,CAAeC,CAAAA,CAASG,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACAjB,IAACwB,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/ui/primitives/textarea.tsx","../src/form/fields/textarea.tsx"],"names":["Textarea","className","props","ref","jsx","cn","control","fieldSchema","getValues","setValue","name","label","isEditable","options","handleInput","event","previousValue","handleCheckbox","checked","value","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"2MAMA,IAAMA,CAAAA,CAAiB,CAAA,CAAA,UAAA,CAA+C,CAAC,CAAE,SAAA,CAAAC,EAAW,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAE5FC,GAAAA,CAAC,UAAA,CAAA,CACC,UAAWC,CAAAA,CACT,4VAAA,CACAJ,CACF,CAAA,CACA,GAAA,CAAKE,CAAAA,CACJ,GAAGD,CAAAA,CACN,CAEH,CAAA,CACDF,CAAAA,CAAS,WAAA,CAAc,UAAA,CCZhB,SAASA,EAAS,CAAE,OAAA,CAAAM,CAAAA,CAAS,WAAA,CAAAC,CAAAA,CAAa,SAAA,CAAAC,IAAW,QAAA,CAAAC,GAAS,CAAA,CAA6C,CAChH,GAAM,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,IAAO,UAAA,CAAAC,CAAAA,CAAY,QAAAC,CAAQ,CAAA,CAAIN,CAAAA,CAE7C,SAASO,GAAAA,CACPC,CAAAA,CACAC,EACM,CACNP,GAAAA,CAASC,CAAAA,CAAM,CACb,GAAGM,CAAAA,CACH,MAAOD,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASE,CAAAA,CAAeC,CAAAA,CAAkBC,CAAAA,CAAyC,CACjFV,GAAAA,CAASC,CAAAA,CAAM,CACb,GAAGS,CAAAA,CACH,QAAA,CAAUD,CACZ,CAAC,EACH,CAEA,OACEd,GAAAA,CAACgB,CAAAA,CAAA,CACC,OAAA,CAASd,CAAAA,CACT,KAAMI,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAW,GAAM,IACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,IAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAAlB,GAAAA,CAACoB,CAAAA,CAAA,CAAW,QAAA,CAAAb,GAAAA,CAAM,EACjBE,CAAAA,EAAS,OAAA,CAAUT,GAAAA,CAACqB,CAAAA,CAAA,CAAiB,QAAA,CAAAZ,EAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAAA,CAC7E,CAAA,CACAT,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kCAAA,CAEf,CAAA,CAAA,CACF,CAAA,CACAA,GAAAA,CAACsB,CAAAA,CAAA,CACC,SAAAtB,GAAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAW,CAAA,4BAAA,EACT,CAACqB,IAAM,KAAA,EAAO,KAAA,EAASA,GAAAA,CAAM,KAAA,CAAM,KAAA,GAAU,SAAA,CAAY,UAAY,EACvE,CAAA,CAAA,CACA,QAAA,CAAUT,CAAAA,GAAe,KAAA,EAASS,GAAAA,CAAM,OAAO,QAAA,CAC9C,GAAGA,GAAAA,CACJ,QAAA,CAAWN,CAAAA,EAAU,CACnBD,IAAYC,CAAAA,CAAOM,GAAAA,CAAM,KAAK,EAChC,CAAA,CACA,KAAA,CAAQA,IAAM,KAAA,EAAO,KAAA,EAAoB,EAAA,CAC3C,CAAA,CACF,CAAA,CACAjB,GAAAA,CAACuB,EAAA,CACC,OAAA,CAASN,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,SAAWH,CAAAA,EAAY,CACrBD,CAAAA,CAAeC,CAAAA,CAASG,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACAjB,IAACwB,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ","file":"chunk-L4ER5RUF.js","sourcesContent":["import * as React from 'react';\nimport { cn } from 'src/ui/lib/utils';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface -- intentionally empty, so it can be extended in the future\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n 'fk-flex fk-min-h-[80px] fk-w-full fk-rounded-md fk-border fk-border-input fk-bg-background fk-px-3 fk-py-2 fk-text-sm fk-ring-offset-background placeholder:fk-text-muted-foreground focus-visible:fk-outline-none focus-visible:fk-ring-2 focus-visible:fk-ring-ring focus-visible:fk-ring-offset-2 disabled:fk-cursor-not-allowed disabled:fk-opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","import type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Textarea as TextareaPrimitive } from '../../ui/primitives/textarea';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Textarea({ control, fieldSchema, getValues, setValue }: FormFieldParams<'textarea'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk-flex\">\n <div className=\"fk-full-w\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <div className=\"fk-h-full fk-self-end fk-ml-auto\">\n {/* TODO: this should be a slot that can receive user-defined components and system components like Presence and AI Writting Tools */}\n </div>\n </div>\n <FormControl>\n <TextareaPrimitive\n className={`fk-w-full fk-mt-[0.1875rem] ${\n !field.value?.scope || field.value.scope === 'default' ? 'fk-mb-3' : ''\n }`}\n disabled={isEditable === false || field.value?.disabled}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {a}from'./chunk-OX6FVDUT.js';import {b}from'./chunk-AYKEFG4H.js';import {c,e,f,h,g,i}from'./chunk-SPWSXOXS.js';import {useId}from'react';import {jsx,jsxs}from'react/jsx-runtime';function L({control:v,fieldSchema:f$1,setValue:r}){let{name:l,label:b$1,isEditable:h$1,options:t}=f$1,m=useId();function g$1(e,o){r(l,{...o,value:e.currentTarget.value});}function C(e,o){r(l,{...o,disabled:e});}return jsx(c,{control:v,name:l,render:({field:e$1})=>jsxs(e,{children:[jsx(f,{htmlFor:m,children:b$1}),t?.comment?jsx(h,{children:t.comment}):null,jsx(g,{children:jsx(a,{className:`fk-w-full fk-mt-[0.1875rem] ${!e$1.value?.scope||e$1.value.scope==="default"?"fk-mb-3":""}`,disabled:h$1===false||e$1.value?.disabled,id:m,...e$1,onChange:o=>{g$1(o,e$1.value);},value:e$1.value?.value||""})}),jsx(b,{checked:e$1.value?.disabled??false,onChange:o=>{C(o,e$1.value);},scope:e$1.value?.scope}),jsx(i,{})]})})}export{L as a};//# sourceMappingURL=chunk-PHGUSZ22.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-PHGUSZ22.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/form/fields/text.tsx"],"names":["Text","control","fieldSchema","setValue","name","label","isEditable","options","id","useId","handleInput","event","previousValue","handleCheckbox","checked","value","jsx","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","Input","DefaultValueSwitch","FormMessage"],"mappings":"6MAOO,SAASA,CAAAA,CAAK,CAAE,OAAA,CAAAC,CAAAA,CAAS,YAAAC,GAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAAyC,CAC7F,GAAM,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,IAAO,UAAA,CAAAC,GAAAA,CAAY,QAAAC,CAAQ,CAAA,CAAIL,IACvCM,CAAAA,CAAKC,KAAAA,GAEX,SAASC,GAAAA,CACPC,EACAC,CAAAA,CACM,CACNT,EAASC,CAAAA,CAAM,CACb,GAAGQ,CAAAA,CACH,MAAOD,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASE,CAAAA,CAAeC,CAAAA,CAAkBC,CAAAA,CAAyC,CACjFZ,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGW,CAAAA,CACH,SAAUD,CACZ,CAAC,EACH,CAEA,OACEE,GAAAA,CAACC,CAAAA,CAAA,CACC,OAAA,CAAShB,CAAAA,CACT,KAAMG,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAc,GAAM,CAAA,GACfC,IAAAA,CAACC,EAAA,CACC,QAAA,CAAA,CAAAJ,IAACK,CAAAA,CAAA,CAAU,OAAA,CAASb,CAAAA,CAAK,SAAAH,GAAAA,CAAM,CAAA,CAC9BE,
|
|
1
|
+
{"version":3,"sources":["../src/form/fields/text.tsx"],"names":["Text","control","fieldSchema","setValue","name","label","isEditable","options","id","useId","handleInput","event","previousValue","handleCheckbox","checked","value","jsx","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","Input","DefaultValueSwitch","FormMessage"],"mappings":"6MAOO,SAASA,CAAAA,CAAK,CAAE,OAAA,CAAAC,CAAAA,CAAS,YAAAC,GAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAAyC,CAC7F,GAAM,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,IAAO,UAAA,CAAAC,GAAAA,CAAY,QAAAC,CAAQ,CAAA,CAAIL,IACvCM,CAAAA,CAAKC,KAAAA,GAEX,SAASC,GAAAA,CACPC,EACAC,CAAAA,CACM,CACNT,EAASC,CAAAA,CAAM,CACb,GAAGQ,CAAAA,CACH,MAAOD,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASE,CAAAA,CAAeC,CAAAA,CAAkBC,CAAAA,CAAyC,CACjFZ,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGW,CAAAA,CACH,SAAUD,CACZ,CAAC,EACH,CAEA,OACEE,GAAAA,CAACC,CAAAA,CAAA,CACC,OAAA,CAAShB,CAAAA,CACT,KAAMG,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAc,GAAM,CAAA,GACfC,IAAAA,CAACC,EAAA,CACC,QAAA,CAAA,CAAAJ,IAACK,CAAAA,CAAA,CAAU,OAAA,CAASb,CAAAA,CAAK,SAAAH,GAAAA,CAAM,CAAA,CAC9BE,GAAS,OAAA,CAAUS,GAAAA,CAACM,EAAA,CAAiB,QAAA,CAAAf,CAAAA,CAAQ,OAAA,CAAQ,EAAqB,IAAA,CAC3ES,GAAAA,CAACO,EAAA,CACC,QAAA,CAAAP,IAACQ,CAAAA,CAAA,CACC,SAAA,CAAW,CAAA,4BAAA,EACT,CAACN,GAAAA,CAAM,KAAA,EAAO,OAASA,GAAAA,CAAM,KAAA,CAAM,QAAU,SAAA,CAAY,SAAA,CAAY,EACvE,CAAA,CAAA,CACA,QAAA,CAAUZ,MAAe,KAAA,EAASY,GAAAA,CAAM,OAAO,QAAA,CAC/C,EAAA,CAAIV,EACH,GAAGU,GAAAA,CACJ,QAAA,CAAWP,CAAAA,EAAU,CACnBD,GAAAA,CAAYC,CAAAA,CAAOO,IAAM,KAAK,EAChC,EACA,KAAA,CAAQA,GAAAA,CAAM,KAAA,EAAO,KAAA,EAAoB,GAC3C,CAAA,CACF,CAAA,CAEAF,IAACS,CAAAA,CAAA,CACC,QAASP,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,SAAWJ,CAAAA,EAAY,CACrBD,EAAeC,CAAAA,CAASI,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,MAAOA,GAAAA,CAAM,KAAA,EAAO,MACtB,CAAA,CACAF,GAAAA,CAACU,EAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAEJ","file":"chunk-PHGUSZ22.js","sourcesContent":["import { useId } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Input } from '../../ui/primitives/input';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Text({ control, fieldSchema, setValue }: FormFieldParams<'text'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n const id = useId();\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <Input\n className={`fk-w-full fk-mt-[0.1875rem] ${\n !field.value?.scope || field.value.scope === 'default' ? 'fk-mb-3' : ''\n }`}\n disabled={isEditable === false || field.value?.disabled}\n id={id}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n"]}
|
|
@@ -43,6 +43,22 @@ var hopByHopHeaders = /* @__PURE__ */ new Set([
|
|
|
43
43
|
"transfer-encoding",
|
|
44
44
|
"upgrade"
|
|
45
45
|
]);
|
|
46
|
+
function getBearerToken(authorizationHeader) {
|
|
47
|
+
if (!authorizationHeader) {
|
|
48
|
+
return "";
|
|
49
|
+
}
|
|
50
|
+
const [scheme, token, ...rest] = authorizationHeader.trim().split(/\s+/);
|
|
51
|
+
if (rest.length > 0) {
|
|
52
|
+
return "";
|
|
53
|
+
}
|
|
54
|
+
if (!scheme || !token) {
|
|
55
|
+
return "";
|
|
56
|
+
}
|
|
57
|
+
if (scheme.toLowerCase() !== "bearer") {
|
|
58
|
+
return "";
|
|
59
|
+
}
|
|
60
|
+
return token;
|
|
61
|
+
}
|
|
46
62
|
function sanitizeForwardHeaders(headers) {
|
|
47
63
|
const sanitized = new Headers();
|
|
48
64
|
headers.forEach((value, key) => {
|
|
@@ -141,11 +157,15 @@ async function handleFlexkitRequest(ctx) {
|
|
|
141
157
|
}
|
|
142
158
|
}
|
|
143
159
|
const forwardHeaders = sanitizeForwardHeaders(request.headers);
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
160
|
+
const bearerToken = getBearerToken(request.headers.get("authorization"));
|
|
161
|
+
const effectiveSessionToken = sessionToken || bearerToken;
|
|
162
|
+
forwardHeaders.delete("Authorization");
|
|
163
|
+
if (!effectiveSessionToken) {
|
|
147
164
|
forwardHeaders.delete("Cookie");
|
|
148
165
|
}
|
|
166
|
+
if (effectiveSessionToken) {
|
|
167
|
+
forwardHeaders.set("Cookie", `sessionToken=${effectiveSessionToken}`);
|
|
168
|
+
}
|
|
149
169
|
if (method !== "GET" && method !== "HEAD") {
|
|
150
170
|
forwardHeaders.set("Content-Type", forwardContentType);
|
|
151
171
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {a}from'./chunk-AXB7FQV2.js';import*as r from'react';import*as c from'@radix-ui/react-label';import {cva}from'class-variance-authority';import {jsx}from'react/jsx-runtime';import {Slot}from'@radix-ui/react-slot';import {useFormContext,FormProvider,Controller}from'react-hook-form';var v=cva("fk-w-fit fk-text-sm fk-font-medium fk-leading-none peer-disabled:fk-cursor-not-allowed peer-disabled:fk-opacity-70"),u=r.forwardRef(({className:e,...o},t)=>jsx(c.Root,{className:a(v(),e),ref:t,...o}));u.displayName=c.Root.displayName;var _=FormProvider,F=r.createContext({});function $({...e}){return jsx(F.Provider,{value:{name:e.name},children:jsx(Controller,{...e})})}var f=()=>{let e=r.useContext(F),o=r.useContext(R),{getFieldState:t,formState:a}=useFormContext(),i=t(e.name,a);if(!e.name)throw new Error("useFormField should be used within <FormField>");let{id:m}=o;return {id:m,name:e.name,formItemId:`${m}-form-item`,formDescriptionId:`${m}-form-item-description`,formMessageId:`${m}-form-item-message`,...i}},R=r.createContext({}),I=r.forwardRef(({className:e,...o},t)=>{let a$1=r.useId();return jsx(R.Provider,{value:{id:a$1},children:jsx("div",{className:a("fk-flex fk-flex-col fk-space-y-2",e),ref:t,...o})})});I.displayName="FormItem";var V=r.forwardRef(({className:e,...o},t)=>{let{error:a$1,formItemId:i}=f();return jsx(u,{className:a(a$1&&"fk-text-destructive",e),htmlFor:i,ref:t,...o})});V.displayName="FormLabel";var L=r.forwardRef(({...e},o)=>{let{error:t,formItemId:a,formDescriptionId:i,formMessageId:m}=f();return jsx(Slot,{"aria-describedby":t?`${i} ${m}`:i,"aria-invalid":!!t,id:a,ref:o,...e})});L.displayName="FormControl";var T=r.forwardRef(({className:e,...o},t)=>{let{formDescriptionId:a$1}=f();return jsx("p",{className:a("fk-text-xs fk-text-muted-foreground",e),id:a$1,ref:t,...o})});T.displayName="FormDescription";var h=r.forwardRef(({className:e,children:o,...t},a$1)=>{let{error:i,formMessageId:m}=f(),n=o;if(i){let s=i;s.message?n=s.message:s.value?.message?n=s.value.message:s.value?._errors&&s.value._errors.length>0?n=s.value._errors[0]:s.value?.validation?.errors&&s.value.validation.errors.length>0&&(n=s.value.validation.errors[0].message);}return n?jsx("p",{className:a("fk-text-sm fk-font-medium fk-text-destructive",e),id:m,ref:a$1,...t,children:n}):null});h.displayName="FormMessage";export{u as a,_ as b,$ as c,f as d,I as e,V as f,L as g,T as h,h as i};//# sourceMappingURL=chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {a}from'./chunk-AXB7FQV2.js';import*as r from'react';import*as c from'@radix-ui/react-label';import {cva}from'class-variance-authority';import {jsx}from'react/jsx-runtime';import {Slot}from'@radix-ui/react-slot';import {useFormContext,FormProvider,Controller}from'react-hook-form';var v=cva("fk-w-fit fk-text-sm fk-font-medium fk-leading-none peer-disabled:fk-cursor-not-allowed peer-disabled:fk-opacity-70"),u=r.forwardRef(({className:e,...o},t)=>jsx(c.Root,{className:a(v(),e),ref:t,...o}));u.displayName=c.Root.displayName;var _=FormProvider,F=r.createContext({});function $({...e}){return jsx(F.Provider,{value:{name:e.name},children:jsx(Controller,{...e})})}var f=()=>{let e=r.useContext(F),o=r.useContext(R),{getFieldState:t,formState:a}=useFormContext(),i=t(e.name,a);if(!e.name)throw new Error("useFormField should be used within <FormField>");let{id:m}=o;return {id:m,name:e.name,formItemId:`${m}-form-item`,formDescriptionId:`${m}-form-item-description`,formMessageId:`${m}-form-item-message`,...i}},R=r.createContext({}),I=r.forwardRef(({className:e,...o},t)=>{let a$1=r.useId();return jsx(R.Provider,{value:{id:a$1},children:jsx("div",{className:a("fk-flex fk-flex-col fk-space-y-2",e),ref:t,...o})})});I.displayName="FormItem";var V=r.forwardRef(({className:e,...o},t)=>{let{error:a$1,formItemId:i}=f();return jsx(u,{className:a(a$1&&"fk-text-destructive",e),htmlFor:i,ref:t,...o})});V.displayName="FormLabel";var L=r.forwardRef(({...e},o)=>{let{error:t,formItemId:a,formDescriptionId:i,formMessageId:m}=f();return jsx(Slot,{"aria-describedby":t?`${i} ${m}`:i,"aria-invalid":!!t,id:a,ref:o,...e})});L.displayName="FormControl";var T=r.forwardRef(({className:e,...o},t)=>{let{formDescriptionId:a$1}=f();return jsx("p",{className:a("fk-text-xs fk-text-muted-foreground",e),id:a$1,ref:t,...o})});T.displayName="FormDescription";var h=r.forwardRef(({className:e,children:o,...t},a$1)=>{let{error:i,formMessageId:m}=f(),n=o;if(i){let s=i;s.message?n=s.message:s.value?.message?n=s.value.message:s.value?._errors&&s.value._errors.length>0?n=s.value._errors[0]:s.value?.validation?.errors&&s.value.validation.errors.length>0&&(n=s.value.validation.errors[0].message);}return n?jsx("p",{className:a("fk-text-sm fk-font-medium fk-text-destructive",e),id:m,ref:a$1,...t,children:n}):null});h.displayName="FormMessage";export{u as a,_ as b,$ as c,f as d,I as e,V as f,L as g,T as h,h as i};//# sourceMappingURL=chunk-SPWSXOXS.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-SPWSXOXS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/primitives/label.tsx","../src/ui/primitives/form.tsx"],"names":["labelVariants","cva","Label","p","className","props","ref","jsx","cn","Form","FormProvider","FormFieldContext","FormField","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","formState","useFormContext","fieldState","id","FormItem","FormLabel","error","formItemId","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","children","body","errorObj"],"mappings":"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","file":"chunk-SPWSXOXS.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from 'src/ui/lib/utils';\n\nconst labelVariants = cva(\n 'fk-w-fit fk-text-sm fk-font-medium fk-leading-none peer-disabled:fk-cursor-not-allowed peer-disabled:fk-opacity-70'\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root className={cn(labelVariants(), className)} ref={ref} {...props} />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from 'react';\nimport type * as LabelPrimitive from '@radix-ui/react-label';\nimport { Slot } from '@radix-ui/react-slot';\nimport { Controller, FormProvider, useFormContext } from 'react-hook-form';\nimport type { ControllerProps, FieldPath, FieldError, FieldValues } from 'react-hook-form';\nimport { cn } from 'src/ui/lib/utils';\nimport { Label } from 'src/ui/primitives/label';\n\nconst Form: typeof FormProvider = 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>({} as FormFieldContextValue);\n\nfunction FormField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ ...props }: ControllerProps<TFieldValues, TName>): JSX.Element {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n}\n\ntype FormFieldState = {\n invalid: boolean;\n isDirty: boolean;\n isTouched: boolean;\n error?: FieldError | undefined;\n id: string;\n name: string;\n formItemId: string;\n formDescriptionId: string;\n formMessageId: string;\n};\n\nconst useFormField = (): FormFieldState => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState, formState } = useFormContext();\n\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext.name) {\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>({} as FormItemContextValue);\n\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div className={cn('fk-flex fk-flex-col fk-space-y-2', className)} ref={ref} {...props} />\n </FormItemContext.Provider>\n );\n }\n);\nFormItem.displayName = 'FormItem';\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField();\n\n return <Label className={cn(error && 'fk-text-destructive', className)} htmlFor={formItemId} ref={ref} {...props} />;\n});\nFormLabel.displayName = 'FormLabel';\n\nconst FormControl = React.forwardRef<React.ElementRef<typeof Slot>, React.ComponentPropsWithoutRef<typeof Slot>>(\n ({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n return (\n <Slot\n aria-describedby={!error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={Boolean(error)}\n id={formItemId}\n ref={ref}\n {...props}\n />\n );\n }\n);\nFormControl.displayName = 'FormControl';\n\nconst FormDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField();\n\n return (\n <p className={cn('fk-text-xs fk-text-muted-foreground', className)} id={formDescriptionId} ref={ref} {...props} />\n );\n }\n);\nFormDescription.displayName = 'FormDescription';\n\ninterface NestedError extends Record<string, any> {\n message?: string;\n value?: {\n message?: string;\n _errors?: string[];\n validation?: {\n errors?: Array<{ message: string }>;\n };\n };\n type?: string;\n}\n\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField();\n let body = children;\n\n // Improved error message extraction\n if (error) {\n const errorObj = error as unknown as NestedError;\n\n // Check for direct message\n if (errorObj.message) {\n body = errorObj.message;\n }\n // Check for value.message\n else if (errorObj.value?.message) {\n body = errorObj.value.message;\n }\n // Check for nested value._errors (Zod array pattern)\n else if (errorObj.value?._errors && errorObj.value._errors.length > 0) {\n body = errorObj.value._errors[0];\n }\n // Try to extract from validation.errors (Zod pattern)\n else if (errorObj.value?.validation?.errors && errorObj.value.validation.errors.length > 0) {\n body = errorObj.value.validation.errors[0].message;\n }\n }\n\n // Log error for debugging\n if (error && !body && process.env.NODE_ENV !== 'production') {\n console.warn('FormMessage: Could not extract error message from', error);\n }\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n className={cn('fk-text-sm fk-font-medium fk-text-destructive', className)}\n id={formMessageId}\n ref={ref}\n {...props}\n >\n {body}\n </p>\n );\n }\n);\nFormMessage.displayName = 'FormMessage';\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {b}from'./chunk-AYKEFG4H.js';import {c,e,f,h,g as g$1,i}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {b}from'./chunk-AYKEFG4H.js';import {c,e,f,h,g as g$1,i}from'./chunk-SPWSXOXS.js';import {a}from'./chunk-AXB7FQV2.js';import*as g from'react';import*as t from'@radix-ui/react-switch';import {jsx,jsxs}from'react/jsx-runtime';var l=g.forwardRef(({className:a$1,...n},r)=>jsx(t.Root,{className:a("fk-peer fk-inline-flex fk-h-6 fk-w-11 fk-shrink-0 fk-cursor-pointer fk-items-center fk-rounded-full fk-border-2 fk-border-transparent fk-transition-colors focus-visible:fk-outline-none focus-visible:fk-ring-2 focus-visible:fk-ring-ring focus-visible:fk-ring-offset-2 focus-visible:fk-ring-offset-background disabled:fk-cursor-not-allowed disabled:fk-opacity-50 data-[state=checked]:fk-bg-primary data-[state=unchecked]:fk-bg-input",a$1),...n,ref:r,children:jsx(t.Thumb,{className:a("fk-pointer-events-none fk-block fk-h-5 fk-w-5 fk-rounded-full fk-bg-background fk-shadow-lg fk-ring-0 fk-transition-transform data-[state=checked]:fk-translate-x-5 data-[state=unchecked]:fk-translate-x-0")})}));l.displayName=t.Root.displayName;function E({control:a,fieldSchema:n,setValue:r}){let{name:f$1,label:F,isEditable:y,options:d}=n;function S(e,o){r(f$1,{...o,value:e});}function R(e,o){r(f$1,{...o,disabled:e});}return jsx(c,{control:a,name:f$1,render:({field:e$1})=>jsxs(e,{children:[jsxs("div",{className:"fk-flex fk-flex-row fk-items-center fk-justify-between fk-rounded-lg fk-border fk-border-input fk-p-3 fk-ring-offset-background focus-within:fk-outline-none focus-within:fk-ring-2 focus-within:fk-ring-ring focus-within:fk-ring-offset-2 disabled:fk-cursor-not-allowed disabled:fk-opacity-50",children:[jsxs("div",{className:"fk-space-y-0.5",children:[jsx(f,{children:F}),d?.comment?jsx(h,{children:d.comment}):null]}),jsx(g$1,{children:jsx(l,{checked:e$1.value?.value?!!e$1.value.value:false,disabled:y===false||e$1.value?.disabled,onCheckedChange:o=>{S(o,e$1.value);}})})]}),jsx(b,{checked:e$1.value?.disabled??false,onChange:o=>{R(o,e$1.value);},scope:e$1.value?.scope}),jsx(i,{})]})})}export{E as a};//# sourceMappingURL=chunk-TEKVBWRU.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-TEKVBWRU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/primitives/switch.tsx","../src/form/fields/switch.tsx"],"names":["Switch","className","props","ref","jsx","cn","control","fieldSchema","setValue","name","label","isEditable","options","handleInput","checked","previousValue","handleCheckbox","value","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"2PAMA,IAAMA,CAAAA,CAAe,CAAA,CAAA,UAAA,CAGnB,CAAC,CAAE,SAAA,CAAAC,IAAW,GAAGC,CAAM,EAAGC,CAAAA,GAC1BC,GAAAA,CAAkB,CAAA,CAAA,IAAA,CAAjB,CACC,SAAA,CAAWC,CAAAA,CACT,ibACAJ,GACF,CAAA,CACC,GAAGC,CAAAA,CACJ,GAAA,CAAKC,EAEL,QAAA,CAAAC,GAAAA,CAAkB,CAAA,CAAA,KAAA,CAAjB,CACC,SAAA,CAAWC,CAAAA,CACT,6MACF,CAAA,CACF,CAAA,CACF,CACD,CAAA,CACDL,CAAAA,CAAO,WAAA,CAA+B,OAAK,WAAA,CCnBpC,SAASA,CAAAA,CAAO,CAAE,OAAA,CAAAM,CAAAA,CAAS,YAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAA2C,CACjG,GAAM,CAAE,IAAA,CAAAC,GAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,QAAAC,CAAQ,CAAA,CAAIL,CAAAA,CAE7C,SAASM,CAAAA,CAAYC,CAAAA,CAAkBC,EAAiD,CACtFP,CAAAA,CAASC,IAAM,CACb,GAAGM,EACH,KAAA,CAAOD,CACT,CAAC,EACH,CAEA,SAASE,EAAeF,CAAAA,CAAkBG,CAAAA,CAAyC,CACjFT,CAAAA,CAASC,GAAAA,CAAM,CACb,GAAGQ,CAAAA,CACH,QAAA,CAAUH,CACZ,CAAC,EACH,CAEA,OACEV,GAAAA,CAACc,CAAAA,CAAA,CACC,OAAA,CAASZ,CAAAA,CACT,KAAMG,GAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAU,GAAM,IACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mSAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAA,CACb,UAAAhB,GAAAA,CAACkB,CAAAA,CAAA,CAAW,QAAA,CAAAZ,CAAAA,CAAM,EACjBE,CAAAA,EAAS,OAAA,CAAUR,GAAAA,CAACmB,CAAAA,CAAA,CAAiB,QAAA,CAAAX,EAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAAA,CAC7E,CAAA,CACAR,GAAAA,CAACoB,GAAAA,CAAA,CACC,QAAA,CAAApB,GAAAA,CAACJ,CAAAA,CAAA,CACC,OAAA,CAASmB,GAAAA,CAAM,OAAO,KAAA,CAAQ,CAAA,CAAQA,IAAM,KAAA,CAAM,KAAA,CAAS,MAC3D,QAAA,CAAUR,CAAAA,GAAe,KAAA,EAASQ,GAAAA,CAAM,KAAA,EAAO,QAAA,CAC/C,gBAAkBL,CAAAA,EAAY,CAC5BD,CAAAA,CAAYC,CAAAA,CAASK,GAAAA,CAAM,KAAK,EAClC,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACAf,GAAAA,CAACqB,CAAAA,CAAA,CACC,OAAA,CAASN,GAAAA,CAAM,OAAO,QAAA,EAAY,KAAA,CAClC,SAAWL,CAAAA,EAAY,CACrBE,CAAAA,CAAeF,CAAAA,CAASK,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACAf,IAACsB,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/ui/primitives/switch.tsx","../src/form/fields/switch.tsx"],"names":["Switch","className","props","ref","jsx","cn","control","fieldSchema","setValue","name","label","isEditable","options","handleInput","checked","previousValue","handleCheckbox","value","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"2PAMA,IAAMA,CAAAA,CAAe,CAAA,CAAA,UAAA,CAGnB,CAAC,CAAE,SAAA,CAAAC,IAAW,GAAGC,CAAM,EAAGC,CAAAA,GAC1BC,GAAAA,CAAkB,CAAA,CAAA,IAAA,CAAjB,CACC,SAAA,CAAWC,CAAAA,CACT,ibACAJ,GACF,CAAA,CACC,GAAGC,CAAAA,CACJ,GAAA,CAAKC,EAEL,QAAA,CAAAC,GAAAA,CAAkB,CAAA,CAAA,KAAA,CAAjB,CACC,SAAA,CAAWC,CAAAA,CACT,6MACF,CAAA,CACF,CAAA,CACF,CACD,CAAA,CACDL,CAAAA,CAAO,WAAA,CAA+B,OAAK,WAAA,CCnBpC,SAASA,CAAAA,CAAO,CAAE,OAAA,CAAAM,CAAAA,CAAS,YAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAA2C,CACjG,GAAM,CAAE,IAAA,CAAAC,GAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,QAAAC,CAAQ,CAAA,CAAIL,CAAAA,CAE7C,SAASM,CAAAA,CAAYC,CAAAA,CAAkBC,EAAiD,CACtFP,CAAAA,CAASC,IAAM,CACb,GAAGM,EACH,KAAA,CAAOD,CACT,CAAC,EACH,CAEA,SAASE,EAAeF,CAAAA,CAAkBG,CAAAA,CAAyC,CACjFT,CAAAA,CAASC,GAAAA,CAAM,CACb,GAAGQ,CAAAA,CACH,QAAA,CAAUH,CACZ,CAAC,EACH,CAEA,OACEV,GAAAA,CAACc,CAAAA,CAAA,CACC,OAAA,CAASZ,CAAAA,CACT,KAAMG,GAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAU,GAAM,IACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mSAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAA,CACb,UAAAhB,GAAAA,CAACkB,CAAAA,CAAA,CAAW,QAAA,CAAAZ,CAAAA,CAAM,EACjBE,CAAAA,EAAS,OAAA,CAAUR,GAAAA,CAACmB,CAAAA,CAAA,CAAiB,QAAA,CAAAX,EAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAAA,CAC7E,CAAA,CACAR,GAAAA,CAACoB,GAAAA,CAAA,CACC,QAAA,CAAApB,GAAAA,CAACJ,CAAAA,CAAA,CACC,OAAA,CAASmB,GAAAA,CAAM,OAAO,KAAA,CAAQ,CAAA,CAAQA,IAAM,KAAA,CAAM,KAAA,CAAS,MAC3D,QAAA,CAAUR,CAAAA,GAAe,KAAA,EAASQ,GAAAA,CAAM,KAAA,EAAO,QAAA,CAC/C,gBAAkBL,CAAAA,EAAY,CAC5BD,CAAAA,CAAYC,CAAAA,CAASK,GAAAA,CAAM,KAAK,EAClC,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACAf,GAAAA,CAACqB,CAAAA,CAAA,CACC,OAAA,CAASN,GAAAA,CAAM,OAAO,QAAA,EAAY,KAAA,CAClC,SAAWL,CAAAA,EAAY,CACrBE,CAAAA,CAAeF,CAAAA,CAASK,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACAf,IAACsB,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ","file":"chunk-TEKVBWRU.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport { cn } from 'src/ui/lib/utils';\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'fk-peer fk-inline-flex fk-h-6 fk-w-11 fk-shrink-0 fk-cursor-pointer fk-items-center fk-rounded-full fk-border-2 fk-border-transparent fk-transition-colors focus-visible:fk-outline-none focus-visible:fk-ring-2 focus-visible:fk-ring-ring focus-visible:fk-ring-offset-2 focus-visible:fk-ring-offset-background disabled:fk-cursor-not-allowed disabled:fk-opacity-50 data-[state=checked]:fk-bg-primary data-[state=unchecked]:fk-bg-input',\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'fk-pointer-events-none fk-block fk-h-5 fk-w-5 fk-rounded-full fk-bg-background fk-shadow-lg fk-ring-0 fk-transition-transform data-[state=checked]:fk-translate-x-5 data-[state=unchecked]:fk-translate-x-0'\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Switch as SwitchPrimitive } from '../../ui/primitives/switch';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Switch({ control, fieldSchema, setValue }: FormFieldParams<'switch'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n\n function handleInput(checked: boolean, previousValue: FormFieldValue | undefined): void {\n setValue(name, {\n ...previousValue,\n value: checked,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk-flex fk-flex-row fk-items-center fk-justify-between fk-rounded-lg fk-border fk-border-input fk-p-3 fk-ring-offset-background focus-within:fk-outline-none focus-within:fk-ring-2 focus-within:fk-ring-ring focus-within:fk-ring-offset-2 disabled:fk-cursor-not-allowed disabled:fk-opacity-50\">\n <div className=\"fk-space-y-0.5\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <FormControl>\n <SwitchPrimitive\n checked={field.value?.value ? Boolean(field.value.value) : false}\n disabled={isEditable === false || field.value?.disabled}\n onCheckedChange={(checked) => {\n handleInput(checked, field.value);\n }}\n />\n </FormControl>\n </div>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {c}from'./chunk-7YBJLUUE.js';import {createContext,useState,useCallback,useEffect,useMemo,useContext}from'react';import {jsx}from'react/jsx-runtime';import _ from'swr';import {useParams}from'react-router-dom';var Q=["light","dark"],E="(prefers-color-scheme: dark)",C=createContext(void 0);function H({attribute:e="data-theme",children:r,defaultTheme:t,disableTransitionOnChange:u=false,enableColorScheme:h=true,enableSystem:o=true,forcedTheme:i,storageKey:f="theme",themes:d=Q,value:l}){let[c,L]=useState(()=>J(f,t,o)),[a,w]=useState(()=>O()),v=A(i??c,o,a),y=useCallback(n=>{if(!i&&(L(n),!!m()))try{window.localStorage.setItem(f,n);}catch{}},[i,f]);useEffect(()=>{if(!m()||!o)return;let n=window.matchMedia(E);function g(s){w(s.matches?"dark":"light");}return w(n.matches?"dark":"light"),n.addEventListener("change",g),()=>{n.removeEventListener("change",g);}},[o]),useEffect(()=>{if(!m())return;let n=window.document.documentElement,s=A(i??c??t,o,a);if(!s)return;let R=u?D():void 0,M=l?Object.values(l):d,P=l?.[s]??s;e==="class"&&(n.classList.remove(...M),n.classList.add(P)),e!=="class"&&n.setAttribute(e,P),h&&(s==="dark"||s==="light")&&(n.style.colorScheme=s),R?.();},[e,t,u,h,o,i,a,c,d,l]);let k=useMemo(()=>({forcedTheme:i,resolvedTheme:v,setTheme:y,systemTheme:a,theme:i??c,themes:o?[...d,"system"]:d}),[o,i,v,y,a,c,d]);return jsx(C.Provider,{value:k,children:r})}function W(){let e=useContext(C);if(!e)throw new Error("useTheme must be used within ThemeProvider");return e}function D(){let e=window.document.createElement("style");return e.appendChild(window.document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),window.document.head.appendChild(e),()=>{window.getComputedStyle(window.document.body),window.setTimeout(()=>{e.remove();},0);}}function J(e,r,t){if(!m())return r??(t?"system":"light");try{let u=window.localStorage.getItem(e);if(u)return u}catch{}return r??(t?"system":"light")}function O(){if(m())return window.matchMedia(E).matches?"dark":"light"}function m(){return typeof window<"u"}function A(e,r,t){if(e)return e!=="system"?e:r?t??"light":"light"}function T(){let{projectId:e}=useParams(),{data:r,isLoading:t}=_(c(e??"").currentUser,h=>fetch(h,{mode:"cors",credentials:"include"}).then(o=>o.json()));return [t,{user:r,logout:async()=>{await fetch(c(e??"").logout("/studio"),{method:"POST",mode:"cors",credentials:"include"}),await fetch("/api/flexkit/logout",{method:"GET",credentials:"include"}),window.location.reload();}}]}var U=createContext([true,{user:null,logout:()=>Promise.resolve()}]);function re({children:e}){let[r,t]=T();return jsx(U.Provider,{value:[r,t],children:e})}function oe(){return useContext(U)}export{H as a,W as b,re as c,oe as d};//# sourceMappingURL=chunk-WA4EGOM4.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-WA4EGOM4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/theme-context.tsx","../src/auth/use-auth-service.ts","../src/auth/auth-context.tsx"],"names":["DEFAULT_THEMES","MEDIA_QUERY","ThemeContext","createContext","ThemeProvider","attribute","children","defaultTheme","disableTransitionOnChange","enableColorScheme","enableSystem","forcedTheme","storageKey","themes","value","theme","setThemeState","useState","getInitialTheme","systemTheme","setSystemTheme","getSystemTheme","resolvedTheme","resolveTheme","setTheme","useCallback","nextTheme","isBrowser","useEffect","mediaQuery","handleChange","event","root","nextResolvedTheme","cleanupTransitions","disableTransitions","themeValues","attributeValue","context","useMemo","jsx","useTheme","useContext","style","storedTheme","useAuthService","projectId","useParams","user","isLoadingUser","useSWR","apiPaths","url","res","AuthContext","AuthProvider","isLoading","auth","useAuth"],"mappings":"4OAgCA,IAAMA,CAAAA,CAAiB,CAAC,OAAA,CAAS,MAAM,CAAA,CACjCC,EAAc,8BAAA,CACdC,CAAAA,CAAeC,aAAAA,CAAyC,MAAS,EAEhE,SAASC,CAAAA,CAAc,CAC5B,SAAA,CAAAC,EAAY,YAAA,CACZ,QAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,yBAAA,CAAAC,CAAAA,CAA4B,KAAA,CAC5B,kBAAAC,CAAAA,CAAoB,IAAA,CACpB,YAAA,CAAAC,CAAAA,CAAe,IAAA,CACf,WAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,EAAa,OAAA,CACb,MAAA,CAAAC,CAAAA,CAASb,CAAAA,CACT,KAAA,CAAAc,CACF,CAAA,CAAoC,CAClC,GAAM,CAACC,CAAAA,CAAOC,CAAa,CAAA,CAAIC,SAA6B,IAAMC,CAAAA,CAAgBN,CAAAA,CAAYL,CAAAA,CAAcG,CAAY,CAAC,CAAA,CACnH,CAACS,CAAAA,CAAaC,CAAc,CAAA,CAAIH,QAAAA,CAAkC,IAAMI,GAAgB,CAAA,CACxFC,CAAAA,CAAgBC,CAAAA,CAAaZ,CAAAA,EAAeI,CAAAA,CAAOL,CAAAA,CAAcS,CAAW,EAE5EK,CAAAA,CAAWC,WAAAA,CACdC,CAAAA,EAAsB,CACrB,GAAI,CAAAf,CAAAA,GAIJK,CAAAA,CAAcU,CAAS,CAAA,CAEnB,CAAA,CAACC,CAAAA,EAAU,CAAA,CAIf,GAAI,CACF,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQf,EAAYc,CAAS,EACnD,CAAA,KAAQ,CAER,CACF,CAAA,CACA,CAACf,CAAAA,CAAaC,CAAU,CAC1B,CAAA,CAEAgB,SAAAA,CAAU,IAAM,CACd,GAAI,CAACD,CAAAA,EAAU,EAAK,CAACjB,CAAAA,CACnB,OAGF,IAAMmB,CAAAA,CAAa,MAAA,CAAO,UAAA,CAAW5B,CAAW,CAAA,CAEhD,SAAS6B,CAAAA,CAAaC,CAAAA,CAAkC,CACtDX,CAAAA,CAAeW,EAAM,OAAA,CAAU,MAAA,CAAS,OAAO,EACjD,CAEA,OAAAX,CAAAA,CAAeS,CAAAA,CAAW,OAAA,CAAU,MAAA,CAAS,OAAO,CAAA,CACpDA,CAAAA,CAAW,iBAAiB,QAAA,CAAUC,CAAY,CAAA,CAE3C,IAAM,CACXD,CAAAA,CAAW,mBAAA,CAAoB,QAAA,CAAUC,CAAY,EACvD,CACF,CAAA,CAAG,CAACpB,CAAY,CAAC,CAAA,CAEjBkB,SAAAA,CAAU,IAAM,CACd,GAAI,CAACD,CAAAA,GACH,OAGF,IAAMK,CAAAA,CAAO,MAAA,CAAO,SAAS,eAAA,CAEvBC,CAAAA,CAAoBV,CAAAA,CADJZ,CAAAA,EAAeI,CAAAA,EAASR,CAAAA,CACQG,CAAAA,CAAcS,CAAW,EAE/E,GAAI,CAACc,CAAAA,CACH,OAGF,IAAMC,CAAAA,CAAqB1B,CAAAA,CAA4B2B,CAAAA,EAAmB,CAAI,OACxEC,CAAAA,CAActB,CAAAA,CAAQ,MAAA,CAAO,MAAA,CAAOA,CAAK,CAAA,CAAID,CAAAA,CAC7CwB,CAAAA,CAAiBvB,IAAQmB,CAAiB,CAAA,EAAKA,CAAAA,CAEjD5B,CAAAA,GAAc,UAChB2B,CAAAA,CAAK,SAAA,CAAU,MAAA,CAAO,GAAGI,CAAW,CAAA,CACpCJ,CAAAA,CAAK,SAAA,CAAU,GAAA,CAAIK,CAAc,CAAA,CAAA,CAG/BhC,CAAAA,GAAc,OAAA,EAChB2B,EAAK,YAAA,CAAa3B,CAAAA,CAAWgC,CAAc,CAAA,CAGzC5B,CAAAA,GAAsBwB,CAAAA,GAAsB,MAAA,EAAUA,CAAAA,GAAsB,WAC9ED,CAAAA,CAAK,KAAA,CAAM,WAAA,CAAcC,CAAAA,CAAAA,CAG3BC,CAAAA,KACF,CAAA,CAAG,CACD7B,EACAE,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,EACAQ,CAAAA,CACAJ,CAAAA,CACAF,CAAAA,CACAC,CACF,CAAC,CAAA,CAED,IAAMwB,CAAAA,CAAUC,OAAAA,CAAuB,KAC9B,CACL,WAAA,CAAA5B,CAAAA,CACA,cAAAW,CAAAA,CACA,QAAA,CAAAE,CAAAA,CACA,WAAA,CAAAL,EACA,KAAA,CAAOR,CAAAA,EAAeI,CAAAA,CACtB,MAAA,CAAQL,EAAe,CAAC,GAAGG,CAAAA,CAAQ,QAAQ,CAAA,CAAIA,CACjD,CAAA,CAAA,CACC,CAACH,EAAcC,CAAAA,CAAaW,CAAAA,CAAeE,CAAAA,CAAUL,CAAAA,CAAaJ,EAAOF,CAAM,CAAC,CAAA,CAEnF,OAAO2B,IAACtC,CAAAA,CAAa,QAAA,CAAb,CAAsB,KAAA,CAAOoC,CAAAA,CAAU,QAAA,CAAAhC,CAAAA,CAAS,CAC1D,CAEO,SAASmC,CAAAA,EAA0B,CACxC,IAAMH,CAAAA,CAAUI,UAAAA,CAAWxC,CAAY,CAAA,CAEvC,GAAI,CAACoC,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAG9D,OAAOA,CACT,CAEA,SAASH,CAAAA,EAAiC,CACxC,IAAMQ,CAAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CACnD,OAAAA,CAAAA,CAAM,WAAA,CACJ,MAAA,CAAO,QAAA,CAAS,cAAA,CACd,0JACF,CACF,CAAA,CACA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,YAAYA,CAAK,CAAA,CAE/B,IAAM,CACX,OAAO,gBAAA,CAAiB,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAE5C,MAAA,CAAO,UAAA,CAAW,IAAM,CACtBA,CAAAA,CAAM,MAAA,GACR,CAAA,CAAG,CAAC,EACN,CACF,CAEA,SAASzB,EAAgBN,CAAAA,CAAoBL,CAAAA,CAAkCG,CAAAA,CAA+B,CAC5G,GAAI,CAACiB,CAAAA,EAAU,CACb,OAAOpB,CAAAA,GAAiBG,CAAAA,CAAe,QAAA,CAAW,OAAA,CAAA,CAGpD,GAAI,CACF,IAAMkC,CAAAA,CAAc,OAAO,YAAA,CAAa,OAAA,CAAQhC,CAAU,CAAA,CAE1D,GAAIgC,CAAAA,CACF,OAAOA,CAEX,MAAQ,CAER,CAEA,OAAOrC,CAAAA,GAAiBG,EAAe,QAAA,CAAW,OAAA,CACpD,CAEA,SAASW,GAA0C,CACjD,GAAKM,CAAAA,EAAU,CAIf,OAAO,MAAA,CAAO,UAAA,CAAW1B,CAAW,EAAE,OAAA,CAAU,MAAA,CAAS,OAC3D,CAEA,SAAS0B,CAAAA,EAAqB,CAC5B,OAAO,OAAO,OAAW,GAC3B,CAEA,SAASJ,CAAAA,CACPR,CAAAA,CACAL,CAAAA,CACAS,CAAAA,CACoB,CACpB,GAAKJ,CAAAA,CAIL,OAAIA,CAAAA,GAAU,QAAA,CACLA,EAGJL,CAAAA,CAIES,CAAAA,EAAe,OAAA,CAHb,OAIX,CC3Ne,SAAR0B,CAAAA,EAA+C,CACpD,GAAM,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAIC,SAAAA,EAAU,CAC1B,CAAE,IAAA,CAAMC,CAAAA,CAAM,UAAWC,CAAc,CAAA,CAAIC,CAAAA,CAAOC,CAAAA,CAASL,GAAa,EAAE,CAAA,CAAE,WAAA,CAAcM,CAAAA,EAC9F,MAAMA,CAAAA,CAAK,CAAE,IAAA,CAAM,MAAA,CAAQ,WAAA,CAAa,SAAU,CAAC,CAAA,CAAE,KAAMC,CAAAA,EAAQA,CAAAA,CAAI,IAAA,EAAuB,CAChG,CAAA,CAGA,OAAO,CAFWJ,CAAAA,CAIhB,CACE,IAAA,CAAAD,CAAAA,CACA,MAAA,CAAQ,SAAY,CAElB,MAAM,KAAA,CAAMG,CAAAA,CAASL,GAAa,EAAE,CAAA,CAAE,MAAA,CAAO,SAAS,EAAG,CACvD,MAAA,CAAQ,MAAA,CACR,IAAA,CAAM,OACN,WAAA,CAAa,SACf,CAAC,CAAA,CAGD,MAAM,KAAA,CAAM,qBAAA,CAAuB,CAAE,OAAQ,KAAA,CAAO,WAAA,CAAa,SAAU,CAAC,CAAA,CAE5E,MAAA,CAAO,QAAA,CAAS,MAAA,GAClB,CACF,CACF,CACF,CC3BA,IAAMQ,EAAcnD,aAAAA,CAAc,CAChC,IAAA,CACA,CACE,KAAM,IAAA,CACN,MAAA,CAAQ,IAAM,OAAA,CAAQ,SACxB,CACF,CAAC,CAAA,CAEM,SAASoD,EAAAA,CAAa,CAAE,QAAA,CAAAjD,CAAS,CAAA,CAA+C,CACrF,GAAM,CAACkD,EAAWC,CAAI,CAAA,CAAIZ,CAAAA,EAAe,CAEzC,OAAOL,GAAAA,CAACc,CAAAA,CAAY,QAAA,CAAZ,CAAqB,KAAA,CAAO,CAACE,CAAAA,CAAWC,CAAI,EAAI,QAAA,CAAAnD,CAAAA,CAAS,CACnE,CAEO,SAASoD,EAAAA,EAAuB,CACrC,OAAOhB,UAAAA,CAAWY,CAAW,CAC/B","file":"chunk-WA4EGOM4.js","sourcesContent":["'use client';\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\ntype SystemTheme = 'dark' | 'light';\n\ninterface ThemeValue {\n [themeName: string]: string;\n}\n\nexport interface UseThemeProps {\n themes: string[];\n forcedTheme?: string;\n setTheme: (theme: string) => void;\n theme?: string;\n resolvedTheme?: string;\n systemTheme?: SystemTheme;\n}\n\nexport interface ThemeProviderProps {\n themes?: string[];\n forcedTheme?: string;\n enableSystem?: boolean;\n disableTransitionOnChange?: boolean;\n enableColorScheme?: boolean;\n storageKey?: string;\n defaultTheme?: string;\n attribute?: string | 'class';\n value?: ThemeValue;\n children?: React.ReactNode;\n}\n\nconst DEFAULT_THEMES = ['light', 'dark'];\nconst MEDIA_QUERY = '(prefers-color-scheme: dark)';\nconst ThemeContext = createContext<UseThemeProps | undefined>(undefined);\n\nexport function ThemeProvider({\n attribute = 'data-theme',\n children,\n defaultTheme,\n disableTransitionOnChange = false,\n enableColorScheme = true,\n enableSystem = true,\n forcedTheme,\n storageKey = 'theme',\n themes = DEFAULT_THEMES,\n value,\n}: ThemeProviderProps): JSX.Element {\n const [theme, setThemeState] = useState<string | undefined>(() => getInitialTheme(storageKey, defaultTheme, enableSystem));\n const [systemTheme, setSystemTheme] = useState<SystemTheme | undefined>(() => getSystemTheme());\n const resolvedTheme = resolveTheme(forcedTheme ?? theme, enableSystem, systemTheme);\n\n const setTheme = useCallback(\n (nextTheme: string) => {\n if (forcedTheme) {\n return;\n }\n\n setThemeState(nextTheme);\n\n if (!isBrowser()) {\n return;\n }\n\n try {\n window.localStorage.setItem(storageKey, nextTheme);\n } catch {\n //\n }\n },\n [forcedTheme, storageKey]\n );\n\n useEffect(() => {\n if (!isBrowser() || !enableSystem) {\n return;\n }\n\n const mediaQuery = window.matchMedia(MEDIA_QUERY);\n\n function handleChange(event: MediaQueryListEvent): void {\n setSystemTheme(event.matches ? 'dark' : 'light');\n }\n\n setSystemTheme(mediaQuery.matches ? 'dark' : 'light');\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, [enableSystem]);\n\n useEffect(() => {\n if (!isBrowser()) {\n return;\n }\n\n const root = window.document.documentElement;\n const selectedTheme = forcedTheme ?? theme ?? defaultTheme;\n const nextResolvedTheme = resolveTheme(selectedTheme, enableSystem, systemTheme);\n\n if (!nextResolvedTheme) {\n return;\n }\n\n const cleanupTransitions = disableTransitionOnChange ? disableTransitions() : undefined;\n const themeValues = value ? Object.values(value) : themes;\n const attributeValue = value?.[nextResolvedTheme] ?? nextResolvedTheme;\n\n if (attribute === 'class') {\n root.classList.remove(...themeValues);\n root.classList.add(attributeValue);\n }\n\n if (attribute !== 'class') {\n root.setAttribute(attribute, attributeValue);\n }\n\n if (enableColorScheme && (nextResolvedTheme === 'dark' || nextResolvedTheme === 'light')) {\n root.style.colorScheme = nextResolvedTheme;\n }\n\n cleanupTransitions?.();\n }, [\n attribute,\n defaultTheme,\n disableTransitionOnChange,\n enableColorScheme,\n enableSystem,\n forcedTheme,\n systemTheme,\n theme,\n themes,\n value,\n ]);\n\n const context = useMemo<UseThemeProps>(() => {\n return {\n forcedTheme,\n resolvedTheme,\n setTheme,\n systemTheme,\n theme: forcedTheme ?? theme,\n themes: enableSystem ? [...themes, 'system'] : themes,\n };\n }, [enableSystem, forcedTheme, resolvedTheme, setTheme, systemTheme, theme, themes]);\n\n return <ThemeContext.Provider value={context}>{children}</ThemeContext.Provider>;\n}\n\nexport function useTheme(): UseThemeProps {\n const context = useContext(ThemeContext);\n\n if (!context) {\n throw new Error('useTheme must be used within ThemeProvider');\n }\n\n return context;\n}\n\nfunction disableTransitions(): () => void {\n const style = window.document.createElement('style');\n style.appendChild(\n window.document.createTextNode(\n '*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}'\n )\n );\n window.document.head.appendChild(style);\n\n return () => {\n window.getComputedStyle(window.document.body);\n\n window.setTimeout(() => {\n style.remove();\n }, 0);\n };\n}\n\nfunction getInitialTheme(storageKey: string, defaultTheme: string | undefined, enableSystem: boolean): string {\n if (!isBrowser()) {\n return defaultTheme ?? (enableSystem ? 'system' : 'light');\n }\n\n try {\n const storedTheme = window.localStorage.getItem(storageKey);\n\n if (storedTheme) {\n return storedTheme;\n }\n } catch {\n //\n }\n\n return defaultTheme ?? (enableSystem ? 'system' : 'light');\n}\n\nfunction getSystemTheme(): SystemTheme | undefined {\n if (!isBrowser()) {\n return undefined;\n }\n\n return window.matchMedia(MEDIA_QUERY).matches ? 'dark' : 'light';\n}\n\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\nfunction resolveTheme(\n theme: string | undefined,\n enableSystem: boolean,\n systemTheme: SystemTheme | undefined\n): string | undefined {\n if (!theme) {\n return undefined;\n }\n\n if (theme !== 'system') {\n return theme;\n }\n\n if (!enableSystem) {\n return 'light';\n }\n\n return systemTheme ?? 'light';\n}\n","'use client';\n\nimport useSWR from 'swr';\nimport { useParams } from 'react-router-dom';\nimport { apiPaths } from '../core/api-paths';\nimport type { AuthService, User } from './types';\n\nexport default function useAuthService(): AuthService {\n const { projectId } = useParams();\n const { data: user, isLoading: isLoadingUser } = useSWR(apiPaths(projectId ?? '').currentUser, (url: string) =>\n fetch(url, { mode: 'cors', credentials: 'include' }).then((res) => res.json() as Promise<User>)\n );\n const isLoading = isLoadingUser;\n\n return [\n isLoading,\n {\n user,\n logout: async () => {\n // wipe remote session\n await fetch(apiPaths(projectId ?? '').logout('/studio'), {\n method: 'POST',\n mode: 'cors',\n credentials: 'include',\n });\n\n // delete first-party auth cookie\n await fetch('/api/flexkit/logout', { method: 'GET', credentials: 'include' });\n\n window.location.reload();\n },\n },\n ];\n}\n","'use client';\n\nimport { createContext, useContext } from 'react';\nimport useAuthService from './use-auth-service';\nimport type { Auth, AuthService, User } from './types';\n\nconst AuthContext = createContext([\n true,\n {\n user: null as User | null,\n logout: () => Promise.resolve(),\n } as Auth,\n]);\n\nexport function AuthProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const [isLoading, auth] = useAuthService();\n\n return <AuthContext.Provider value={[isLoading, auth]}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuth(): AuthService {\n return useContext(AuthContext) as AuthService;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {a,b as b$1,c,d as d$1,e}from'./chunk-RMSYYUQM.js';import {b}from'./chunk-7YBJLUUE.js';import {defaultStyles,FileIcon}from'react-file-icon';import {useMemo,useState,useEffect}from'react';import {jsx,jsxs}from'react/jsx-runtime';var y=250,P=25e5,r=new Map,k=new Map,v=new Set,U=new Map;function d(t){if(U.has(t))return;let e=new Image;e.decoding="async",e.src=t,U.set(t,e);}function g(t){let e=r.get(t);e&&r.set(t,{...e,lastUsedAt:Date.now()});}function L(){if(r.size<=y)return;let t=Array.from(r.entries()).sort((n,o)=>n[1].lastUsedAt-o[1].lastUsedAt),e=Math.max(1,Math.ceil(y*.1));for(let n=0;n<e&&n<t.length;n+=1){let[o,s]=t[n];r.delete(o),URL.revokeObjectURL(s.objectUrl);}}async function M(t){if(v.has(t)){d(t);return}if(r.has(t)){g(t);return}let e=k.get(t);if(e){await e;return}let n=(async()=>{try{let o=await fetch(t,{mode:"cors",cache:"force-cache"});if(!o.ok){d(t);return}let s=await o.blob();if(s.size>P)return;let c=URL.createObjectURL(s);r.set(t,{objectUrl:c,byteSize:s.size,lastUsedAt:Date.now()}),L();}catch(o){o instanceof TypeError&&v.add(t),d(t);}})();k.set(t,n),await n,k.delete(t);}function C(t){let e=useMemo(()=>{if(!t)return null;let s=r.get(t);return s?(g(t),s.objectUrl):null},[t]),[n,o]=useState(e);return useEffect(()=>{if(!t){o(null);return}if(v.has(t)){d(t),o(null);return}let s=r.get(t);if(s){g(t),o(s.objectUrl);return}o(null);let c=false;return M(t).then(()=>{let l=r.get(t);l&&(c||(g(t),o(l.objectUrl)));}),()=>{c=true;}},[t]),n}function O({value:t}){let e$1=t?.path??"",n=!!e$1,o=n&&/\.(png|jpe?g|gif|webp|avif|svg)$/i.test(e$1),s=f=>{let[m]=f.split("?"),T=m.split(".");return T.length>1?T.pop().toLowerCase():"file"},c$1=n?e$1.endsWith(".svg")?`${b}${e$1}`:`${b}${e$1}?w=84&h=84&f=webp`:null,l=n?e$1.endsWith(".svg")?`${b}${e$1}`:`${b}${e$1}?w=624&h=624&f=webp`:"",A=C(c$1);return n?jsx("div",{className:"fk-z-10",children:jsx(a,{children:o?jsxs(b$1,{children:[jsx(c,{asChild:true,children:jsx("img",{alt:"asset",className:"fk-w-7 fk-h-7 fk-cursor-zoom-in fk-bg-muted/40 fk-rounded-sm",decoding:"async",src:A??void 0})}),jsx(d$1,{children:jsx(e,{children:jsx("img",{alt:"asset",className:"fk-w-52 fk-h-52 fk-bg-muted/40 fk-rounded-sm",decoding:"async",src:l})})})]}):jsxs(b$1,{children:[jsx(c,{asChild:true,children:jsx("div",{className:"fk-w-7 fk-h-7 fk-rounded fk-bg-transparent fk-flex fk-items-center fk-justify-center [&>svg]:fk-h-full [&>svg]:fk-w-auto",children:(()=>{let f=s(e$1),m=defaultStyles[f];return jsx(FileIcon,{extension:f,...m||{}})})()})}),jsx(d$1,{children:jsx(e,{children:jsx("div",{className:"fk-text-sm fk-text-muted-foreground",children:"Preview not available"})})})]})})}):null}export{O as a};//# sourceMappingURL=chunk-WB6HSMJT.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-WB6HSMJT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/hooks/use-cached-image-src.ts","../src/data-grid/preview-components/asset.tsx"],"names":["MAX_CACHE_ENTRIES","MAX_SINGLE_BLOB_BYTES","blobUrlCache","inFlightLoads","corsBlockedUrls","preloadedImages","ensurePreloaded","url","img","touch","entry","evictIfNeeded","entries","a","b","evictCount","i","loadToCache","existing","promise","res","blob","objectUrl","err","useCachedImageSrc","initial","useMemo","cached","src","setSrc","useState","useEffect","isStale","next","Asset","value","path","hasPath","isImage","getExtensionFromPath","p","clean","parts","thumbnaillUrl","IMAGES_BASE_URL","fullUrl","cachedThumbnailSrc","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","TooltipPortal","TooltipContent","ext","style","defaultStyles","FileTypeIcon"],"mappings":"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","file":"chunk-WB6HSMJT.js","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\ntype CacheEntry = {\n objectUrl: string;\n byteSize: number;\n lastUsedAt: number;\n};\n\nconst MAX_CACHE_ENTRIES = 250;\nconst MAX_SINGLE_BLOB_BYTES = 2_500_000; // ~2.5MB\n\nconst blobUrlCache = new Map<string, CacheEntry>();\nconst inFlightLoads = new Map<string, Promise<void>>();\nconst corsBlockedUrls = new Set<string>();\nconst preloadedImages = new Map<string, HTMLImageElement>();\n\nfunction ensurePreloaded(url: string): void {\n if (preloadedImages.has(url)) {\n return;\n }\n\n const img = new Image();\n img.decoding = 'async';\n img.src = url;\n preloadedImages.set(url, img);\n}\n\nfunction touch(url: string): void {\n const entry = blobUrlCache.get(url);\n\n if (!entry) {\n return;\n }\n\n blobUrlCache.set(url, { ...entry, lastUsedAt: Date.now() });\n}\n\nfunction evictIfNeeded(): void {\n if (blobUrlCache.size <= MAX_CACHE_ENTRIES) {\n return;\n }\n\n const entries = Array.from(blobUrlCache.entries()).sort((a, b) => a[1].lastUsedAt - b[1].lastUsedAt);\n const evictCount = Math.max(1, Math.ceil(MAX_CACHE_ENTRIES * 0.1));\n\n for (let i = 0; i < evictCount && i < entries.length; i += 1) {\n const [url, entry] = entries[i];\n blobUrlCache.delete(url);\n\n URL.revokeObjectURL(entry.objectUrl);\n }\n}\n\nasync function loadToCache(url: string): Promise<void> {\n if (corsBlockedUrls.has(url)) {\n ensurePreloaded(url);\n\n return;\n }\n\n if (blobUrlCache.has(url)) {\n touch(url);\n\n return;\n }\n\n const existing = inFlightLoads.get(url);\n\n if (existing) {\n await existing;\n\n return;\n }\n\n const promise = (async () => {\n try {\n const res = await fetch(url, {\n mode: 'cors',\n cache: 'force-cache',\n });\n\n if (!res.ok) {\n ensurePreloaded(url);\n\n return;\n }\n\n const blob = await res.blob();\n\n if (blob.size > MAX_SINGLE_BLOB_BYTES) {\n return;\n }\n\n const objectUrl = URL.createObjectURL(blob);\n blobUrlCache.set(url, { objectUrl, byteSize: blob.size, lastUsedAt: Date.now() });\n evictIfNeeded();\n } catch (err: unknown) {\n // Most common failure is CORS (TypeError: Failed to fetch). If so, avoid retrying.\n if (err instanceof TypeError) {\n corsBlockedUrls.add(url);\n }\n\n ensurePreloaded(url);\n }\n })();\n\n inFlightLoads.set(url, promise);\n\n await promise;\n\n inFlightLoads.delete(url);\n}\n\n/**\n * Keeps a stable, in-memory cached image src across virtualized unmount/remount cycles.\n * Falls back to the original URL if the image can’t be fetched (e.g. due to CORS).\n */\nexport function useCachedImageSrc(url: string | null | undefined): string | null {\n const initial = useMemo(() => {\n if (!url) {\n return null;\n }\n\n const cached = blobUrlCache.get(url);\n\n if (!cached) {\n return null;\n }\n\n touch(url);\n\n return cached.objectUrl;\n }, [url]);\n\n const [src, setSrc] = useState<string | null>(initial);\n\n useEffect(() => {\n if (!url) {\n setSrc(null);\n\n return;\n }\n\n if (corsBlockedUrls.has(url)) {\n ensurePreloaded(url);\n setSrc(null);\n\n return;\n }\n\n const cached = blobUrlCache.get(url);\n\n if (cached) {\n touch(url);\n setSrc(cached.objectUrl);\n\n return;\n }\n\n setSrc(null);\n let isStale = false;\n\n loadToCache(url).then(() => {\n const next = blobUrlCache.get(url);\n\n if (!next) {\n return;\n }\n\n if (isStale) {\n return;\n }\n\n touch(url);\n setSrc(next.objectUrl);\n });\n\n return () => {\n isStale = true;\n };\n }, [url]);\n\n return src;\n}\n","import { Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger } from '../../ui/primitives/tooltip';\nimport { IMAGES_BASE_URL } from '../../core/api-paths';\nimport { FileIcon as FileTypeIcon, defaultStyles } from 'react-file-icon';\nimport { useCachedImageSrc } from '../../ui/hooks/use-cached-image-src';\n\nexport type Asset = {\n _id: string;\n path: string;\n};\n\nexport function Asset({ value }: { value: Asset }) {\n const path = value?.path ?? '';\n const hasPath = Boolean(path);\n const isImage = hasPath && /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(path);\n\n const getExtensionFromPath = (p: string): string => {\n const [clean] = p.split('?');\n const parts = clean.split('.');\n\n if (parts.length > 1) {\n return parts.pop()!.toLowerCase();\n }\n\n return 'file';\n };\n\n const thumbnaillUrl = hasPath\n ? path.endsWith('.svg')\n ? `${IMAGES_BASE_URL}${path}`\n : `${IMAGES_BASE_URL}${path}?w=84&h=84&f=webp`\n : null;\n\n const fullUrl = hasPath\n ? path.endsWith('.svg')\n ? `${IMAGES_BASE_URL}${path}`\n : `${IMAGES_BASE_URL}${path}?w=624&h=624&f=webp`\n : '';\n\n const cachedThumbnailSrc = useCachedImageSrc(thumbnaillUrl);\n\n if (!hasPath) {\n return null;\n }\n\n return (\n <div className=\"fk-z-10\">\n <TooltipProvider>\n {isImage ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <img\n alt=\"asset\"\n className=\"fk-w-7 fk-h-7 fk-cursor-zoom-in fk-bg-muted/40 fk-rounded-sm\"\n decoding=\"async\"\n src={cachedThumbnailSrc ?? undefined}\n />\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent>\n <img\n alt=\"asset\"\n className=\"fk-w-52 fk-h-52 fk-bg-muted/40 fk-rounded-sm\"\n decoding=\"async\"\n src={fullUrl}\n />\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"fk-w-7 fk-h-7 fk-rounded fk-bg-transparent fk-flex fk-items-center fk-justify-center [&>svg]:fk-h-full [&>svg]:fk-w-auto\">\n {(() => {\n const ext = getExtensionFromPath(path);\n const style = (\n defaultStyles as Record<string, Record<string, string | number | boolean | undefined>>\n )[ext];\n\n return <FileTypeIcon extension={ext} {...(style || {})} />;\n })()}\n </div>\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent>\n <div className=\"fk-text-sm fk-text-muted-foreground\">Preview not available</div>\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n )}\n </TooltipProvider>\n </div>\n );\n}\n"]}
|