@definable/ui 0.1.13 → 0.1.14
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/components/image-cropper.esm.js +1 -1
- package/dist/components/image-cropper.esm.js.map +1 -1
- package/dist/components/image-cropper.js +1 -1
- package/dist/components/image-cropper.js.map +1 -1
- package/dist/components/input.esm.js +1 -1
- package/dist/components/input.esm.js.map +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/table-mobile.esm.js +1 -1
- package/dist/components/table-mobile.esm.js.map +1 -1
- package/dist/components/table-mobile.js +1 -1
- package/dist/components/table-mobile.js.map +1 -1
- package/dist/components/use-toast.esm.js +1 -1
- package/dist/components/use-toast.esm.js.map +1 -1
- package/dist/components/use-toast.js +1 -1
- package/dist/components/use-toast.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -38,7 +38,7 @@ function L({
|
|
|
38
38
|
/* @__PURE__ */ e.jsx(
|
|
39
39
|
"div",
|
|
40
40
|
{
|
|
41
|
-
className: "rounded-full border-2 border-border overflow-hidden bg-background",
|
|
41
|
+
className: "rounded-full border-2 border-border/50 overflow-hidden bg-background",
|
|
42
42
|
style: { width: a, height: a },
|
|
43
43
|
children: /* @__PURE__ */ e.jsx(
|
|
44
44
|
"img",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-cropper.esm.js","sources":["../../src/components/image-cropper.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\nimport { Button } from './button';\nimport { Upload, RotateCw, X } from 'lucide-react';\nimport { ImageCropperModal } from './image-cropper-modal';\nimport { cn } from '@/lib/utils';\n\ninterface ImageCropperProps {\n value?: string | null;\n onChange: (croppedImage: string | null) => void;\n size?: number;\n className?: string;\n placeholder?: string;\n title?: string;\n outputSize?: number;\n}\n\nexport function ImageCropper({ \n value, \n onChange, \n size = 120, \n className,\n placeholder = \"Upload Image\",\n title = \"Crop Your Image\",\n outputSize = 200\n}: ImageCropperProps) {\n const [isCropModalOpen, setIsCropModalOpen] = useState(false);\n const [imageToEdit, setImageToEdit] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n const imageSrc = event.target?.result as string;\n setImageToEdit(imageSrc);\n setIsCropModalOpen(true);\n };\n reader.readAsDataURL(file);\n }\n // Reset the input value so the same file can be selected again\n e.target.value = '';\n }, []);\n\n const handleCrop = useCallback((croppedImage: string) => {\n onChange(croppedImage);\n setImageToEdit(null);\n }, [onChange]);\n\n const handleCloseCropModal = useCallback(() => {\n setIsCropModalOpen(false);\n setImageToEdit(null);\n // Reset file input to ensure it can be used again\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }, []);\n\n const handleRemoveImage = useCallback(() => {\n onChange(null);\n }, [onChange]);\n\n return (\n <>\n <div className={cn(\"space-y-3\", className)}>\n {value ? (\n <div className=\"flex flex-col items-center gap-3\">\n <div \n className=\"rounded-full border-2 border-border overflow-hidden bg-background\"\n style={{ width: size, height: size }}\n >\n <img \n src={value} \n alt=\"Agent avatar\" \n className=\"w-full h-full object-cover\"\n />\n </div>\n \n <div className=\"flex gap-2\">\n <Button \n variant=\"outline\" \n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n fileInputRef.current?.click();\n }}\n >\n <RotateCw className=\"h-3 w-3 mr-1\" />\n Replace\n </Button>\n <Button \n variant=\"outline\" \n size=\"sm\"\n onClick={handleRemoveImage}\n >\n <X className=\"h-3 w-3 mr-1\" />\n Remove\n </Button>\n </div>\n </div>\n ) : (\n <button\n onClick={(e) => {\n e.stopPropagation();\n fileInputRef.current?.click();\n }}\n className=\"w-full border-2 border-dashed border-border/50 rounded-lg p-6 hover:border-primary/50 hover:bg-primary/2 transition-colors group\"\n >\n <div \n className=\"mx-auto rounded-full bg-primary/10 flex items-center justify-center group-hover:bg-primary/15 transition-colors mb-3\"\n style={{ width: Math.min(size / 2, 60), height: Math.min(size / 2, 60) }}\n >\n <Upload className=\"h-6 w-6 text-primary\" />\n </div>\n <p className=\"text-sm font-medium text-foreground mb-1\">{placeholder}</p>\n <p className=\"text-xs text-muted-foreground\">Click to browse</p>\n </button>\n )}\n \n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n </div>\n\n <ImageCropperModal\n isOpen={isCropModalOpen}\n onClose={handleCloseCropModal}\n imageSrc={imageToEdit}\n onCrop={handleCrop}\n title={title}\n outputSize={outputSize}\n />\n </>\n );\n} "],"names":["ImageCropper","value","onChange","size","className","placeholder","title","outputSize","isCropModalOpen","setIsCropModalOpen","useState","imageToEdit","setImageToEdit","fileInputRef","useRef","handleFileSelect","useCallback","e","file","_a","reader","event","imageSrc","handleCrop","croppedImage","handleCloseCropModal","handleRemoveImage","jsxs","Fragment","cn","jsx","Button","RotateCw","X","Upload","ImageCropperModal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"image-cropper.esm.js","sources":["../../src/components/image-cropper.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\nimport { Button } from './button';\nimport { Upload, RotateCw, X } from 'lucide-react';\nimport { ImageCropperModal } from './image-cropper-modal';\nimport { cn } from '@/lib/utils';\n\ninterface ImageCropperProps {\n value?: string | null;\n onChange: (croppedImage: string | null) => void;\n size?: number;\n className?: string;\n placeholder?: string;\n title?: string;\n outputSize?: number;\n}\n\nexport function ImageCropper({ \n value, \n onChange, \n size = 120, \n className,\n placeholder = \"Upload Image\",\n title = \"Crop Your Image\",\n outputSize = 200\n}: ImageCropperProps) {\n const [isCropModalOpen, setIsCropModalOpen] = useState(false);\n const [imageToEdit, setImageToEdit] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n const imageSrc = event.target?.result as string;\n setImageToEdit(imageSrc);\n setIsCropModalOpen(true);\n };\n reader.readAsDataURL(file);\n }\n // Reset the input value so the same file can be selected again\n e.target.value = '';\n }, []);\n\n const handleCrop = useCallback((croppedImage: string) => {\n onChange(croppedImage);\n setImageToEdit(null);\n }, [onChange]);\n\n const handleCloseCropModal = useCallback(() => {\n setIsCropModalOpen(false);\n setImageToEdit(null);\n // Reset file input to ensure it can be used again\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }, []);\n\n const handleRemoveImage = useCallback(() => {\n onChange(null);\n }, [onChange]);\n\n return (\n <>\n <div className={cn(\"space-y-3\", className)}>\n {value ? (\n <div className=\"flex flex-col items-center gap-3\">\n <div \n className=\"rounded-full border-2 border-border/50 overflow-hidden bg-background\"\n style={{ width: size, height: size }}\n >\n <img \n src={value} \n alt=\"Agent avatar\" \n className=\"w-full h-full object-cover\"\n />\n </div>\n \n <div className=\"flex gap-2\">\n <Button \n variant=\"outline\" \n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n fileInputRef.current?.click();\n }}\n >\n <RotateCw className=\"h-3 w-3 mr-1\" />\n Replace\n </Button>\n <Button \n variant=\"outline\" \n size=\"sm\"\n onClick={handleRemoveImage}\n >\n <X className=\"h-3 w-3 mr-1\" />\n Remove\n </Button>\n </div>\n </div>\n ) : (\n <button\n onClick={(e) => {\n e.stopPropagation();\n fileInputRef.current?.click();\n }}\n className=\"w-full border-2 border-dashed border-border/50 rounded-lg p-6 hover:border-primary/50 hover:bg-primary/2 transition-colors group\"\n >\n <div \n className=\"mx-auto rounded-full bg-primary/10 flex items-center justify-center group-hover:bg-primary/15 transition-colors mb-3\"\n style={{ width: Math.min(size / 2, 60), height: Math.min(size / 2, 60) }}\n >\n <Upload className=\"h-6 w-6 text-primary\" />\n </div>\n <p className=\"text-sm font-medium text-foreground mb-1\">{placeholder}</p>\n <p className=\"text-xs text-muted-foreground\">Click to browse</p>\n </button>\n )}\n \n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n </div>\n\n <ImageCropperModal\n isOpen={isCropModalOpen}\n onClose={handleCloseCropModal}\n imageSrc={imageToEdit}\n onCrop={handleCrop}\n title={title}\n outputSize={outputSize}\n />\n </>\n );\n} "],"names":["ImageCropper","value","onChange","size","className","placeholder","title","outputSize","isCropModalOpen","setIsCropModalOpen","useState","imageToEdit","setImageToEdit","fileInputRef","useRef","handleFileSelect","useCallback","e","file","_a","reader","event","imageSrc","handleCrop","croppedImage","handleCloseCropModal","handleRemoveImage","jsxs","Fragment","cn","jsx","Button","RotateCw","X","Upload","ImageCropperModal"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../jsx-runtime-BYECrxsp.cjs"),r=require("react"),p=require("./button.js"),i=require("lucide-react"),w=require("./image-cropper-modal.js"),I=require("../utils-DSKoFOjv.cjs");function M({value:c,onChange:n,size:a=120,className:j,placeholder:g="Upload Image",title:h="Crop Your Image",outputSize:R=200}){const[f,u]=r.useState(!1),[b,l]=r.useState(null),o=r.useRef(null),E=r.useCallback(t=>{var m;const s=(m=t.target.files)==null?void 0:m[0];if(s){const x=new FileReader;x.onload=y=>{var d;const k=(d=y.target)==null?void 0:d.result;l(k),u(!0)},x.readAsDataURL(s)}t.target.value=""},[]),C=r.useCallback(t=>{n(t),l(null)},[n]),v=r.useCallback(()=>{u(!1),l(null),o.current&&(o.current.value="")},[]),N=r.useCallback(()=>{n(null)},[n]);return e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsxs("div",{className:I.cn("space-y-3",j),children:[c?e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsxRuntimeExports.jsx("div",{className:"rounded-full border-2 border-border overflow-hidden bg-background",style:{width:a,height:a},children:e.jsxRuntimeExports.jsx("img",{src:c,alt:"Agent avatar",className:"w-full h-full object-cover"})}),e.jsxRuntimeExports.jsxs("div",{className:"flex gap-2",children:[e.jsxRuntimeExports.jsxs(p.Button,{variant:"outline",size:"sm",onClick:t=>{var s;t.stopPropagation(),(s=o.current)==null||s.click()},children:[e.jsxRuntimeExports.jsx(i.RotateCw,{className:"h-3 w-3 mr-1"}),"Replace"]}),e.jsxRuntimeExports.jsxs(p.Button,{variant:"outline",size:"sm",onClick:N,children:[e.jsxRuntimeExports.jsx(i.X,{className:"h-3 w-3 mr-1"}),"Remove"]})]})]}):e.jsxRuntimeExports.jsxs("button",{onClick:t=>{var s;t.stopPropagation(),(s=o.current)==null||s.click()},className:"w-full border-2 border-dashed border-border/50 rounded-lg p-6 hover:border-primary/50 hover:bg-primary/2 transition-colors group",children:[e.jsxRuntimeExports.jsx("div",{className:"mx-auto rounded-full bg-primary/10 flex items-center justify-center group-hover:bg-primary/15 transition-colors mb-3",style:{width:Math.min(a/2,60),height:Math.min(a/2,60)},children:e.jsxRuntimeExports.jsx(i.Upload,{className:"h-6 w-6 text-primary"})}),e.jsxRuntimeExports.jsx("p",{className:"text-sm font-medium text-foreground mb-1",children:g}),e.jsxRuntimeExports.jsx("p",{className:"text-xs text-muted-foreground",children:"Click to browse"})]}),e.jsxRuntimeExports.jsx("input",{ref:o,type:"file",accept:"image/*",onChange:E,className:"hidden"})]}),e.jsxRuntimeExports.jsx(w.ImageCropperModal,{isOpen:f,onClose:v,imageSrc:b,onCrop:C,title:h,outputSize:R})]})}exports.ImageCropper=M;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../jsx-runtime-BYECrxsp.cjs"),r=require("react"),p=require("./button.js"),i=require("lucide-react"),w=require("./image-cropper-modal.js"),I=require("../utils-DSKoFOjv.cjs");function M({value:c,onChange:n,size:a=120,className:j,placeholder:g="Upload Image",title:h="Crop Your Image",outputSize:R=200}){const[f,u]=r.useState(!1),[b,l]=r.useState(null),o=r.useRef(null),E=r.useCallback(t=>{var m;const s=(m=t.target.files)==null?void 0:m[0];if(s){const x=new FileReader;x.onload=y=>{var d;const k=(d=y.target)==null?void 0:d.result;l(k),u(!0)},x.readAsDataURL(s)}t.target.value=""},[]),C=r.useCallback(t=>{n(t),l(null)},[n]),v=r.useCallback(()=>{u(!1),l(null),o.current&&(o.current.value="")},[]),N=r.useCallback(()=>{n(null)},[n]);return e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsxs("div",{className:I.cn("space-y-3",j),children:[c?e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsxRuntimeExports.jsx("div",{className:"rounded-full border-2 border-border/50 overflow-hidden bg-background",style:{width:a,height:a},children:e.jsxRuntimeExports.jsx("img",{src:c,alt:"Agent avatar",className:"w-full h-full object-cover"})}),e.jsxRuntimeExports.jsxs("div",{className:"flex gap-2",children:[e.jsxRuntimeExports.jsxs(p.Button,{variant:"outline",size:"sm",onClick:t=>{var s;t.stopPropagation(),(s=o.current)==null||s.click()},children:[e.jsxRuntimeExports.jsx(i.RotateCw,{className:"h-3 w-3 mr-1"}),"Replace"]}),e.jsxRuntimeExports.jsxs(p.Button,{variant:"outline",size:"sm",onClick:N,children:[e.jsxRuntimeExports.jsx(i.X,{className:"h-3 w-3 mr-1"}),"Remove"]})]})]}):e.jsxRuntimeExports.jsxs("button",{onClick:t=>{var s;t.stopPropagation(),(s=o.current)==null||s.click()},className:"w-full border-2 border-dashed border-border/50 rounded-lg p-6 hover:border-primary/50 hover:bg-primary/2 transition-colors group",children:[e.jsxRuntimeExports.jsx("div",{className:"mx-auto rounded-full bg-primary/10 flex items-center justify-center group-hover:bg-primary/15 transition-colors mb-3",style:{width:Math.min(a/2,60),height:Math.min(a/2,60)},children:e.jsxRuntimeExports.jsx(i.Upload,{className:"h-6 w-6 text-primary"})}),e.jsxRuntimeExports.jsx("p",{className:"text-sm font-medium text-foreground mb-1",children:g}),e.jsxRuntimeExports.jsx("p",{className:"text-xs text-muted-foreground",children:"Click to browse"})]}),e.jsxRuntimeExports.jsx("input",{ref:o,type:"file",accept:"image/*",onChange:E,className:"hidden"})]}),e.jsxRuntimeExports.jsx(w.ImageCropperModal,{isOpen:f,onClose:v,imageSrc:b,onCrop:C,title:h,outputSize:R})]})}exports.ImageCropper=M;
|
|
2
2
|
//# sourceMappingURL=image-cropper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-cropper.js","sources":["../../src/components/image-cropper.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\nimport { Button } from './button';\nimport { Upload, RotateCw, X } from 'lucide-react';\nimport { ImageCropperModal } from './image-cropper-modal';\nimport { cn } from '@/lib/utils';\n\ninterface ImageCropperProps {\n value?: string | null;\n onChange: (croppedImage: string | null) => void;\n size?: number;\n className?: string;\n placeholder?: string;\n title?: string;\n outputSize?: number;\n}\n\nexport function ImageCropper({ \n value, \n onChange, \n size = 120, \n className,\n placeholder = \"Upload Image\",\n title = \"Crop Your Image\",\n outputSize = 200\n}: ImageCropperProps) {\n const [isCropModalOpen, setIsCropModalOpen] = useState(false);\n const [imageToEdit, setImageToEdit] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n const imageSrc = event.target?.result as string;\n setImageToEdit(imageSrc);\n setIsCropModalOpen(true);\n };\n reader.readAsDataURL(file);\n }\n // Reset the input value so the same file can be selected again\n e.target.value = '';\n }, []);\n\n const handleCrop = useCallback((croppedImage: string) => {\n onChange(croppedImage);\n setImageToEdit(null);\n }, [onChange]);\n\n const handleCloseCropModal = useCallback(() => {\n setIsCropModalOpen(false);\n setImageToEdit(null);\n // Reset file input to ensure it can be used again\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }, []);\n\n const handleRemoveImage = useCallback(() => {\n onChange(null);\n }, [onChange]);\n\n return (\n <>\n <div className={cn(\"space-y-3\", className)}>\n {value ? (\n <div className=\"flex flex-col items-center gap-3\">\n <div \n className=\"rounded-full border-2 border-border overflow-hidden bg-background\"\n style={{ width: size, height: size }}\n >\n <img \n src={value} \n alt=\"Agent avatar\" \n className=\"w-full h-full object-cover\"\n />\n </div>\n \n <div className=\"flex gap-2\">\n <Button \n variant=\"outline\" \n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n fileInputRef.current?.click();\n }}\n >\n <RotateCw className=\"h-3 w-3 mr-1\" />\n Replace\n </Button>\n <Button \n variant=\"outline\" \n size=\"sm\"\n onClick={handleRemoveImage}\n >\n <X className=\"h-3 w-3 mr-1\" />\n Remove\n </Button>\n </div>\n </div>\n ) : (\n <button\n onClick={(e) => {\n e.stopPropagation();\n fileInputRef.current?.click();\n }}\n className=\"w-full border-2 border-dashed border-border/50 rounded-lg p-6 hover:border-primary/50 hover:bg-primary/2 transition-colors group\"\n >\n <div \n className=\"mx-auto rounded-full bg-primary/10 flex items-center justify-center group-hover:bg-primary/15 transition-colors mb-3\"\n style={{ width: Math.min(size / 2, 60), height: Math.min(size / 2, 60) }}\n >\n <Upload className=\"h-6 w-6 text-primary\" />\n </div>\n <p className=\"text-sm font-medium text-foreground mb-1\">{placeholder}</p>\n <p className=\"text-xs text-muted-foreground\">Click to browse</p>\n </button>\n )}\n \n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n </div>\n\n <ImageCropperModal\n isOpen={isCropModalOpen}\n onClose={handleCloseCropModal}\n imageSrc={imageToEdit}\n onCrop={handleCrop}\n title={title}\n outputSize={outputSize}\n />\n </>\n );\n} "],"names":["ImageCropper","value","onChange","size","className","placeholder","title","outputSize","isCropModalOpen","setIsCropModalOpen","useState","imageToEdit","setImageToEdit","fileInputRef","useRef","handleFileSelect","useCallback","e","file","_a","reader","event","imageSrc","handleCrop","croppedImage","handleCloseCropModal","handleRemoveImage","jsxs","Fragment","cn","jsx","Button","RotateCw","X","Upload","ImageCropperModal"],"mappings":"8QAgBO,SAASA,EAAa,CAC3B,MAAAC,EACA,SAAAC,EACA,KAAAC,EAAO,IACP,UAAAC,EACA,YAAAC,EAAc,eACd,MAAAC,EAAQ,kBACR,WAAAC,EAAa,GACf,EAAsB,CACpB,KAAM,CAACC,EAAiBC,CAAkB,EAAIC,EAAAA,SAAS,EAAK,EACtD,CAACC,EAAaC,CAAc,EAAIF,EAAAA,SAAwB,IAAI,EAC5DG,EAAeC,EAAAA,OAAyB,IAAI,EAE5CC,EAAmBC,cAAaC,GAA2C,OAC/E,MAAMC,GAAOC,EAAAF,EAAE,OAAO,QAAT,YAAAE,EAAiB,GAC9B,GAAID,EAAM,CACR,MAAME,EAAS,IAAI,WACnBA,EAAO,OAAUC,GAAU,OACzB,MAAMC,GAAWH,EAAAE,EAAM,SAAN,YAAAF,EAAc,OAC/BP,EAAeU,CAAQ,EACvBb,EAAmB,EAAI,CACzB,EACAW,EAAO,cAAcF,CAAI,CAC3B,CAEAD,EAAE,OAAO,MAAQ,EACnB,EAAG,CAAA,CAAE,EAECM,EAAaP,cAAaQ,GAAyB,CACvDtB,EAASsB,CAAY,EACrBZ,EAAe,IAAI,CACrB,EAAG,CAACV,CAAQ,CAAC,EAEPuB,EAAuBT,EAAAA,YAAY,IAAM,CAC7CP,EAAmB,EAAK,EACxBG,EAAe,IAAI,EAEfC,EAAa,UACfA,EAAa,QAAQ,MAAQ,GAEjC,EAAG,CAAA,CAAE,EAECa,EAAoBV,EAAAA,YAAY,IAAM,CAC1Cd,EAAS,IAAI,CACf,EAAG,CAACA,CAAQ,CAAC,EAEb,OACEyB,EAAAA,kBAAAA,KAAAC,6BAAA,CACE,SAAA,CAAAD,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAWE,EAAAA,GAAG,YAAazB,CAAS,EACtC,SAAA,CAAAH,EACC0B,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,mCACb,SAAA,CAAAG,EAAAA,kBAAAA,IAAC,MAAA,CACC,UAAU,
|
|
1
|
+
{"version":3,"file":"image-cropper.js","sources":["../../src/components/image-cropper.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\nimport { Button } from './button';\nimport { Upload, RotateCw, X } from 'lucide-react';\nimport { ImageCropperModal } from './image-cropper-modal';\nimport { cn } from '@/lib/utils';\n\ninterface ImageCropperProps {\n value?: string | null;\n onChange: (croppedImage: string | null) => void;\n size?: number;\n className?: string;\n placeholder?: string;\n title?: string;\n outputSize?: number;\n}\n\nexport function ImageCropper({ \n value, \n onChange, \n size = 120, \n className,\n placeholder = \"Upload Image\",\n title = \"Crop Your Image\",\n outputSize = 200\n}: ImageCropperProps) {\n const [isCropModalOpen, setIsCropModalOpen] = useState(false);\n const [imageToEdit, setImageToEdit] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n const imageSrc = event.target?.result as string;\n setImageToEdit(imageSrc);\n setIsCropModalOpen(true);\n };\n reader.readAsDataURL(file);\n }\n // Reset the input value so the same file can be selected again\n e.target.value = '';\n }, []);\n\n const handleCrop = useCallback((croppedImage: string) => {\n onChange(croppedImage);\n setImageToEdit(null);\n }, [onChange]);\n\n const handleCloseCropModal = useCallback(() => {\n setIsCropModalOpen(false);\n setImageToEdit(null);\n // Reset file input to ensure it can be used again\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }, []);\n\n const handleRemoveImage = useCallback(() => {\n onChange(null);\n }, [onChange]);\n\n return (\n <>\n <div className={cn(\"space-y-3\", className)}>\n {value ? (\n <div className=\"flex flex-col items-center gap-3\">\n <div \n className=\"rounded-full border-2 border-border/50 overflow-hidden bg-background\"\n style={{ width: size, height: size }}\n >\n <img \n src={value} \n alt=\"Agent avatar\" \n className=\"w-full h-full object-cover\"\n />\n </div>\n \n <div className=\"flex gap-2\">\n <Button \n variant=\"outline\" \n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n fileInputRef.current?.click();\n }}\n >\n <RotateCw className=\"h-3 w-3 mr-1\" />\n Replace\n </Button>\n <Button \n variant=\"outline\" \n size=\"sm\"\n onClick={handleRemoveImage}\n >\n <X className=\"h-3 w-3 mr-1\" />\n Remove\n </Button>\n </div>\n </div>\n ) : (\n <button\n onClick={(e) => {\n e.stopPropagation();\n fileInputRef.current?.click();\n }}\n className=\"w-full border-2 border-dashed border-border/50 rounded-lg p-6 hover:border-primary/50 hover:bg-primary/2 transition-colors group\"\n >\n <div \n className=\"mx-auto rounded-full bg-primary/10 flex items-center justify-center group-hover:bg-primary/15 transition-colors mb-3\"\n style={{ width: Math.min(size / 2, 60), height: Math.min(size / 2, 60) }}\n >\n <Upload className=\"h-6 w-6 text-primary\" />\n </div>\n <p className=\"text-sm font-medium text-foreground mb-1\">{placeholder}</p>\n <p className=\"text-xs text-muted-foreground\">Click to browse</p>\n </button>\n )}\n \n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n </div>\n\n <ImageCropperModal\n isOpen={isCropModalOpen}\n onClose={handleCloseCropModal}\n imageSrc={imageToEdit}\n onCrop={handleCrop}\n title={title}\n outputSize={outputSize}\n />\n </>\n );\n} "],"names":["ImageCropper","value","onChange","size","className","placeholder","title","outputSize","isCropModalOpen","setIsCropModalOpen","useState","imageToEdit","setImageToEdit","fileInputRef","useRef","handleFileSelect","useCallback","e","file","_a","reader","event","imageSrc","handleCrop","croppedImage","handleCloseCropModal","handleRemoveImage","jsxs","Fragment","cn","jsx","Button","RotateCw","X","Upload","ImageCropperModal"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ const f = s.forwardRef(
|
|
|
7
7
|
{
|
|
8
8
|
type: r,
|
|
9
9
|
className: n(
|
|
10
|
-
"flex h-10 w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
10
|
+
"flex h-10 w-full rounded-md border border-border/50 bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
11
11
|
e
|
|
12
12
|
),
|
|
13
13
|
ref: i,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.esm.js","sources":["../../src/components/input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input }; "],"names":["Input","React","className","type","props","ref","jsx","cn"],"mappings":";;;AAMA,MAAMA,IAAQC,EAAM;AAAA,EAClB,CAAC,EAAE,WAAAC,GAAW,MAAAC,GAAM,GAAGC,EAAA,GAASC,MAE5BC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAH;AAAA,MACA,WAAWI;AAAA,QACT;AAAA,QACAL;AAAA,MAAA;AAAA,MAEF,KAAAG;AAAA,MACC,GAAGD;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAJ,EAAM,cAAc;"}
|
|
1
|
+
{"version":3,"file":"input.esm.js","sources":["../../src/components/input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-border/50 bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input }; "],"names":["Input","React","className","type","props","ref","jsx","cn"],"mappings":";;;AAMA,MAAMA,IAAQC,EAAM;AAAA,EAClB,CAAC,EAAE,WAAAC,GAAW,MAAAC,GAAM,GAAGC,EAAA,GAASC,MAE5BC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAH;AAAA,MACA,WAAWI;AAAA,QACT;AAAA,QACAL;AAAA,MAAA;AAAA,MAEF,KAAAG;AAAA,MACC,GAAGD;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAJ,EAAM,cAAc;"}
|
package/dist/components/input.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../jsx-runtime-BYECrxsp.cjs"),s=require("react"),u=require("../utils-DSKoFOjv.cjs");function l(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const c=l(s),o=c.forwardRef(({className:e,type:r,...t},n)=>i.jsxRuntimeExports.jsx("input",{type:r,className:u.cn("flex h-10 w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:n,...t}));o.displayName="Input";exports.Input=o;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../jsx-runtime-BYECrxsp.cjs"),s=require("react"),u=require("../utils-DSKoFOjv.cjs");function l(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const c=l(s),o=c.forwardRef(({className:e,type:r,...t},n)=>i.jsxRuntimeExports.jsx("input",{type:r,className:u.cn("flex h-10 w-full rounded-md border border-border/50 bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:n,...t}));o.displayName="Input";exports.Input=o;
|
|
2
2
|
//# sourceMappingURL=input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sources":["../../src/components/input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input }; "],"names":["Input","React","className","type","props","ref","jsx","cn"],"mappings":"+cAMMA,EAAQC,EAAM,WAClB,CAAC,CAAE,UAAAC,EAAW,KAAAC,EAAM,GAAGC,CAAA,EAASC,IAE5BC,EAAAA,kBAAAA,IAAC,QAAA,CACC,KAAAH,EACA,UAAWI,EAAAA,GACT,
|
|
1
|
+
{"version":3,"file":"input.js","sources":["../../src/components/input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-border/50 bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input }; "],"names":["Input","React","className","type","props","ref","jsx","cn"],"mappings":"+cAMMA,EAAQC,EAAM,WAClB,CAAC,CAAE,UAAAC,EAAW,KAAAC,EAAM,GAAGC,CAAA,EAASC,IAE5BC,EAAAA,kBAAAA,IAAC,QAAA,CACC,KAAAH,EACA,UAAWI,EAAAA,GACT,mWACAL,CAAA,EAEF,IAAAG,EACC,GAAGD,CAAA,CAAA,CAIZ,EACAJ,EAAM,YAAc"}
|
|
@@ -18,7 +18,7 @@ function T({
|
|
|
18
18
|
return p ? /* @__PURE__ */ r.jsx("div", { className: "space-y-4", children: Array(c).fill(0).map((s, i) => /* @__PURE__ */ r.jsxs(
|
|
19
19
|
"div",
|
|
20
20
|
{
|
|
21
|
-
className: "border border-border/
|
|
21
|
+
className: "border border-border/50 rounded-xl p-4 space-y-4 shadow-sm bg-card/30 animate-pulse",
|
|
22
22
|
children: [
|
|
23
23
|
/* @__PURE__ */ r.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
24
24
|
/* @__PURE__ */ r.jsx("div", { className: "h-5 bg-muted/70 rounded-md w-2/5" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-mobile.esm.js","sources":["../../src/components/table-mobile.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { Tooltip } from \"./tooltip\"\nimport { useState } from \"react\"\nimport { Column, TableProps } from \"./table\"\nimport { ChevronRight } from \"lucide-react\"\n\nexport function TableMobile<T extends { id: string }>({\n data,\n columns,\n showCheckbox = true,\n onRowClick,\n selectedItems,\n onSelect,\n isLoading = false,\n loadingRows = 3\n}: TableProps<T>) {\n const [hoveredText, setHoveredText] = useState<string | null>(null);\n\n // Loading skeleton component for mobile\n if (isLoading) {\n return (\n <div className=\"space-y-4\">\n {Array(loadingRows).fill(0).map((_, index) => (\n <div \n key={`skeleton-${index}`} \n className=\"border border-border/
|
|
1
|
+
{"version":3,"file":"table-mobile.esm.js","sources":["../../src/components/table-mobile.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { Tooltip } from \"./tooltip\"\nimport { useState } from \"react\"\nimport { Column, TableProps } from \"./table\"\nimport { ChevronRight } from \"lucide-react\"\n\nexport function TableMobile<T extends { id: string }>({\n data,\n columns,\n showCheckbox = true,\n onRowClick,\n selectedItems,\n onSelect,\n isLoading = false,\n loadingRows = 3\n}: TableProps<T>) {\n const [hoveredText, setHoveredText] = useState<string | null>(null);\n\n // Loading skeleton component for mobile\n if (isLoading) {\n return (\n <div className=\"space-y-4\">\n {Array(loadingRows).fill(0).map((_, index) => (\n <div \n key={`skeleton-${index}`} \n className=\"border border-border/50 rounded-xl p-4 space-y-4 shadow-sm bg-card/30 animate-pulse\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"h-5 bg-muted/70 rounded-md w-2/5\" />\n {showCheckbox && (\n <div className=\"h-4 w-4 rounded-md bg-muted/50\" />\n )}\n </div>\n <div className=\"space-y-3 pt-2\">\n {columns.slice(0, 4).map((column, colIndex) => (\n <div key={`skeleton-col-${column.id}`} className=\"flex items-start gap-3\">\n <div className=\"h-4 bg-muted/40 rounded-md w-1/4\" />\n <div className=\"h-4 bg-muted/60 rounded-md\" style={{ width: Math.random() * 50 + 30 + '%' }} />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (data.length === 0) {\n return null; // Empty state is handled by the main Table component\n }\n\n return (\n <div className=\"space-y-4\">\n {data.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"border border-border/40 rounded-xl overflow-hidden bg-card/30 shadow-sm transition-all duration-200\",\n onRowClick && \"cursor-pointer hover:border-primary/30 hover:shadow-md hover:bg-card/50\"\n )}\n onClick={() => onRowClick?.(item)}\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border/30 bg-muted/5\">\n <div className=\"font-medium\">\n {/* Display a primary identifier */}\n {columns[0].cell(item) || `Item ${index + 1}`}\n </div>\n <div className=\"flex items-center gap-2\">\n {showCheckbox && (\n <Checkbox\n checked={selectedItems?.has(item.id)}\n onClick={(e) => {\n e.stopPropagation();\n onSelect?.(item.id, !selectedItems?.has(item.id));\n }}\n className=\"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\"\n />\n )}\n {onRowClick && (\n <ChevronRight className=\"h-4 w-4 text-muted-foreground/50\" />\n )}\n </div>\n </div>\n \n <div className=\"px-4 py-3 space-y-3\">\n {columns.slice(1).map((column) => (\n <div\n key={column.id}\n className=\"flex items-start gap-3 text-sm group\"\n onMouseEnter={() => column.tooltipValue && setHoveredText(`${index}-${column.id}`)}\n onMouseLeave={() => setHoveredText(null)}\n >\n <div className=\"font-medium text-muted-foreground w-1/3 min-w-[80px] text-xs uppercase tracking-wide pt-0.5\">\n {column.header}\n </div>\n <div className={cn(\n \"flex-1 min-w-0 text-foreground/90 group-hover:text-foreground transition-colors\",\n column.truncate && \"truncate\"\n )}>\n {column.cell(item)}\n </div>\n {column.tooltipValue && hoveredText === `${index}-${column.id}` && (\n <Tooltip\n content={column.tooltipValue(item)}\n side=\"bottom\"\n align=\"start\"\n isVisible={true}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n} "],"names":["TableMobile","data","columns","showCheckbox","onRowClick","selectedItems","onSelect","isLoading","loadingRows","hoveredText","setHoveredText","useState","jsx","_","index","jsxs","column","colIndex","item","cn","Checkbox","ChevronRight","Tooltip"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../jsx-runtime-BYECrxsp.cjs"),l=require("../utils-DSKoFOjv.cjs"),j=require("./checkbox.js"),h=require("./tooltip.js"),b=require("react"),v=require("lucide-react");function g({data:x,columns:d,showCheckbox:n=!0,onRowClick:i,selectedItems:t,onSelect:o,isLoading:p=!1,loadingRows:c=3}){const[m,u]=b.useState(null);return p?e.jsxRuntimeExports.jsx("div",{className:"space-y-4",children:Array(c).fill(0).map((r,a)=>e.jsxRuntimeExports.jsxs("div",{className:"border border-border/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../jsx-runtime-BYECrxsp.cjs"),l=require("../utils-DSKoFOjv.cjs"),j=require("./checkbox.js"),h=require("./tooltip.js"),b=require("react"),v=require("lucide-react");function g({data:x,columns:d,showCheckbox:n=!0,onRowClick:i,selectedItems:t,onSelect:o,isLoading:p=!1,loadingRows:c=3}){const[m,u]=b.useState(null);return p?e.jsxRuntimeExports.jsx("div",{className:"space-y-4",children:Array(c).fill(0).map((r,a)=>e.jsxRuntimeExports.jsxs("div",{className:"border border-border/50 rounded-xl p-4 space-y-4 shadow-sm bg-card/30 animate-pulse",children:[e.jsxRuntimeExports.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxRuntimeExports.jsx("div",{className:"h-5 bg-muted/70 rounded-md w-2/5"}),n&&e.jsxRuntimeExports.jsx("div",{className:"h-4 w-4 rounded-md bg-muted/50"})]}),e.jsxRuntimeExports.jsx("div",{className:"space-y-3 pt-2",children:d.slice(0,4).map((s,f)=>e.jsxRuntimeExports.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxRuntimeExports.jsx("div",{className:"h-4 bg-muted/40 rounded-md w-1/4"}),e.jsxRuntimeExports.jsx("div",{className:"h-4 bg-muted/60 rounded-md",style:{width:Math.random()*50+30+"%"}})]},`skeleton-col-${s.id}`))})]},`skeleton-${a}`))}):x.length===0?null:e.jsxRuntimeExports.jsx("div",{className:"space-y-4",children:x.map((r,a)=>e.jsxRuntimeExports.jsxs("div",{className:l.cn("border border-border/40 rounded-xl overflow-hidden bg-card/30 shadow-sm transition-all duration-200",i&&"cursor-pointer hover:border-primary/30 hover:shadow-md hover:bg-card/50"),onClick:()=>i==null?void 0:i(r),children:[e.jsxRuntimeExports.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border/30 bg-muted/5",children:[e.jsxRuntimeExports.jsx("div",{className:"font-medium",children:d[0].cell(r)||`Item ${a+1}`}),e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-2",children:[n&&e.jsxRuntimeExports.jsx(j.Checkbox,{checked:t==null?void 0:t.has(r.id),onClick:s=>{s.stopPropagation(),o==null||o(r.id,!(t!=null&&t.has(r.id)))},className:"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground"}),i&&e.jsxRuntimeExports.jsx(v.ChevronRight,{className:"h-4 w-4 text-muted-foreground/50"})]})]}),e.jsxRuntimeExports.jsx("div",{className:"px-4 py-3 space-y-3",children:d.slice(1).map(s=>e.jsxRuntimeExports.jsxs("div",{className:"flex items-start gap-3 text-sm group",onMouseEnter:()=>s.tooltipValue&&u(`${a}-${s.id}`),onMouseLeave:()=>u(null),children:[e.jsxRuntimeExports.jsx("div",{className:"font-medium text-muted-foreground w-1/3 min-w-[80px] text-xs uppercase tracking-wide pt-0.5",children:s.header}),e.jsxRuntimeExports.jsx("div",{className:l.cn("flex-1 min-w-0 text-foreground/90 group-hover:text-foreground transition-colors",s.truncate&&"truncate"),children:s.cell(r)}),s.tooltipValue&&m===`${a}-${s.id}`&&e.jsxRuntimeExports.jsx(h.Tooltip,{content:s.tooltipValue(r),side:"bottom",align:"start",isVisible:!0})]},s.id))})]},r.id))})}exports.TableMobile=g;
|
|
2
2
|
//# sourceMappingURL=table-mobile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-mobile.js","sources":["../../src/components/table-mobile.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { Tooltip } from \"./tooltip\"\nimport { useState } from \"react\"\nimport { Column, TableProps } from \"./table\"\nimport { ChevronRight } from \"lucide-react\"\n\nexport function TableMobile<T extends { id: string }>({\n data,\n columns,\n showCheckbox = true,\n onRowClick,\n selectedItems,\n onSelect,\n isLoading = false,\n loadingRows = 3\n}: TableProps<T>) {\n const [hoveredText, setHoveredText] = useState<string | null>(null);\n\n // Loading skeleton component for mobile\n if (isLoading) {\n return (\n <div className=\"space-y-4\">\n {Array(loadingRows).fill(0).map((_, index) => (\n <div \n key={`skeleton-${index}`} \n className=\"border border-border/
|
|
1
|
+
{"version":3,"file":"table-mobile.js","sources":["../../src/components/table-mobile.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\"\nimport { Checkbox } from \"./checkbox\"\nimport { Tooltip } from \"./tooltip\"\nimport { useState } from \"react\"\nimport { Column, TableProps } from \"./table\"\nimport { ChevronRight } from \"lucide-react\"\n\nexport function TableMobile<T extends { id: string }>({\n data,\n columns,\n showCheckbox = true,\n onRowClick,\n selectedItems,\n onSelect,\n isLoading = false,\n loadingRows = 3\n}: TableProps<T>) {\n const [hoveredText, setHoveredText] = useState<string | null>(null);\n\n // Loading skeleton component for mobile\n if (isLoading) {\n return (\n <div className=\"space-y-4\">\n {Array(loadingRows).fill(0).map((_, index) => (\n <div \n key={`skeleton-${index}`} \n className=\"border border-border/50 rounded-xl p-4 space-y-4 shadow-sm bg-card/30 animate-pulse\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"h-5 bg-muted/70 rounded-md w-2/5\" />\n {showCheckbox && (\n <div className=\"h-4 w-4 rounded-md bg-muted/50\" />\n )}\n </div>\n <div className=\"space-y-3 pt-2\">\n {columns.slice(0, 4).map((column, colIndex) => (\n <div key={`skeleton-col-${column.id}`} className=\"flex items-start gap-3\">\n <div className=\"h-4 bg-muted/40 rounded-md w-1/4\" />\n <div className=\"h-4 bg-muted/60 rounded-md\" style={{ width: Math.random() * 50 + 30 + '%' }} />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (data.length === 0) {\n return null; // Empty state is handled by the main Table component\n }\n\n return (\n <div className=\"space-y-4\">\n {data.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"border border-border/40 rounded-xl overflow-hidden bg-card/30 shadow-sm transition-all duration-200\",\n onRowClick && \"cursor-pointer hover:border-primary/30 hover:shadow-md hover:bg-card/50\"\n )}\n onClick={() => onRowClick?.(item)}\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border/30 bg-muted/5\">\n <div className=\"font-medium\">\n {/* Display a primary identifier */}\n {columns[0].cell(item) || `Item ${index + 1}`}\n </div>\n <div className=\"flex items-center gap-2\">\n {showCheckbox && (\n <Checkbox\n checked={selectedItems?.has(item.id)}\n onClick={(e) => {\n e.stopPropagation();\n onSelect?.(item.id, !selectedItems?.has(item.id));\n }}\n className=\"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\"\n />\n )}\n {onRowClick && (\n <ChevronRight className=\"h-4 w-4 text-muted-foreground/50\" />\n )}\n </div>\n </div>\n \n <div className=\"px-4 py-3 space-y-3\">\n {columns.slice(1).map((column) => (\n <div\n key={column.id}\n className=\"flex items-start gap-3 text-sm group\"\n onMouseEnter={() => column.tooltipValue && setHoveredText(`${index}-${column.id}`)}\n onMouseLeave={() => setHoveredText(null)}\n >\n <div className=\"font-medium text-muted-foreground w-1/3 min-w-[80px] text-xs uppercase tracking-wide pt-0.5\">\n {column.header}\n </div>\n <div className={cn(\n \"flex-1 min-w-0 text-foreground/90 group-hover:text-foreground transition-colors\",\n column.truncate && \"truncate\"\n )}>\n {column.cell(item)}\n </div>\n {column.tooltipValue && hoveredText === `${index}-${column.id}` && (\n <Tooltip\n content={column.tooltipValue(item)}\n side=\"bottom\"\n align=\"start\"\n isVisible={true}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n} "],"names":["TableMobile","data","columns","showCheckbox","onRowClick","selectedItems","onSelect","isLoading","loadingRows","hoveredText","setHoveredText","useState","jsx","_","index","jsxs","column","colIndex","item","cn","Checkbox","e","ChevronRight","Tooltip"],"mappings":"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"}
|
|
@@ -38,7 +38,7 @@ const d = () => {
|
|
|
38
38
|
return t.length === 0 ? null : /* @__PURE__ */ n.jsx("div", { className: "fixed top-4 right-4 z-50 flex flex-col gap-2 w-[350px]", children: t.map((e) => /* @__PURE__ */ n.jsxs(
|
|
39
39
|
"div",
|
|
40
40
|
{
|
|
41
|
-
className: `p-4 rounded-lg shadow-lg border border-border transition-all duration-300 ease-in-out ${e.type === "error" ? "bg-destructive text-destructive-foreground" : e.type === "success" ? "bg-green-50 text-green-800 border-green-200" : e.type === "warning" ? "bg-amber-50 text-amber-800 border-amber-200" : "bg-background text-foreground"}`,
|
|
41
|
+
className: `p-4 rounded-lg shadow-lg border border-border/50 transition-all duration-300 ease-in-out ${e.type === "error" ? "bg-destructive text-destructive-foreground" : e.type === "success" ? "bg-green-50 text-green-800 border-green-200" : e.type === "warning" ? "bg-amber-50 text-amber-800 border-amber-200" : "bg-background text-foreground"}`,
|
|
42
42
|
children: [
|
|
43
43
|
/* @__PURE__ */ n.jsxs("div", { className: "flex justify-between items-start", children: [
|
|
44
44
|
/* @__PURE__ */ n.jsx("div", { className: "font-medium", children: e.title }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-toast.esm.js","sources":["../../src/components/use-toast.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { createRoot } from 'react-dom/client';\n\ntype ToastProps = {\n title: string;\n description?: string;\n type?: 'default' | 'success' | 'error' | 'warning';\n duration?: number;\n};\n\ntype Toast = ToastProps & {\n id: string;\n};\n\nlet toasts: Toast[] = [];\nlet listeners: ((toasts: Toast[]) => void)[] = [];\n\nconst notifyListeners = () => {\n listeners.forEach(listener => listener([...toasts]));\n};\n\nexport const toast = (props: ToastProps) => {\n const id = `toast-${Date.now()}`;\n const newToast = { \n id, \n ...props,\n duration: props.duration || 5000,\n type: props.type || 'default' \n };\n \n toasts.push(newToast);\n notifyListeners();\n\n // Auto-dismiss after duration\n setTimeout(() => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }, newToast.duration);\n\n return {\n dismiss: () => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }\n };\n};\n\nexport const useToast = () => {\n const [currentToasts, setCurrentToasts] = useState<Toast[]>(toasts);\n\n const registerListener = useCallback(() => {\n const listener = (updatedToasts: Toast[]) => {\n setCurrentToasts(updatedToasts);\n };\n \n listeners.push(listener);\n return () => {\n listeners = listeners.filter(l => l !== listener);\n };\n }, []);\n\n // Register listener on mount\n useState(() => {\n const unregister = registerListener();\n return unregister;\n });\n\n return { \n toast,\n toasts: currentToasts,\n dismiss: (id: string) => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }\n };\n};\n\n// Toast Container Component\nexport const ToastContainer = () => {\n const { toasts, dismiss } = useToast();\n\n if (toasts.length === 0) return null;\n\n return (\n <div className=\"fixed top-4 right-4 z-50 flex flex-col gap-2 w-[350px]\">\n {toasts.map(toast => (\n <div \n key={toast.id}\n className={`p-4 rounded-lg shadow-lg border border-border transition-all duration-300 ease-in-out ${\n toast.type === 'error' ? 'bg-destructive text-destructive-foreground' : \n toast.type === 'success' ? 'bg-green-50 text-green-800 border-green-200' : \n toast.type === 'warning' ? 'bg-amber-50 text-amber-800 border-amber-200' : \n 'bg-background text-foreground'\n }`}\n >\n <div className=\"flex justify-between items-start\">\n <div className=\"font-medium\">{toast.title}</div>\n <button \n onClick={() => dismiss(toast.id)}\n className=\"text-sm opacity-70 hover:opacity-100\"\n >\n ×\n </button>\n </div>\n {toast.description && (\n <div className=\"mt-1 text-sm opacity-80\">{toast.description}</div>\n )}\n </div>\n ))}\n </div>\n );\n}; "],"names":["toasts","listeners","notifyListeners","listener","toast","props","id","newToast","useToast","currentToasts","setCurrentToasts","useState","registerListener","useCallback","updatedToasts","l","ToastContainer","dismiss","jsx","jsxs"],"mappings":";;AAcA,IAAIA,IAAkB,CAAA,GAClBC,IAA2C,CAAA;AAE/C,MAAMC,IAAkB,MAAM;AAC5B,EAAAD,EAAU,QAAQ,CAAAE,MAAYA,EAAS,CAAC,GAAGH,CAAM,CAAC,CAAC;AACrD,GAEaI,IAAQ,CAACC,MAAsB;AAC1C,QAAMC,IAAK,SAAS,KAAK,IAAA,CAAK,IACxBC,IAAW;AAAA,IACf,IAAAD;AAAA,IACA,GAAGD;AAAA,IACH,UAAUA,EAAM,YAAY;AAAA,IAC5B,MAAMA,EAAM,QAAQ;AAAA,EAAA;AAGtB,SAAAL,EAAO,KAAKO,CAAQ,GACpBL,EAAA,GAGA,WAAW,MAAM;AACf,IAAAF,IAASA,EAAO,OAAO,CAAAI,MAASA,EAAM,OAAOE,CAAE,GAC/CJ,EAAA;AAAA,EACF,GAAGK,EAAS,QAAQ,GAEb;AAAA,IACL,SAAS,MAAM;AACb,MAAAP,IAASA,EAAO,OAAO,CAAAI,MAASA,EAAM,OAAOE,CAAE,GAC/CJ,EAAA;AAAA,IACF;AAAA,EAAA;AAEJ,GAEaM,IAAW,MAAM;AAC5B,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAkBX,CAAM,GAE5DY,IAAmBC,EAAY,MAAM;AACzC,UAAMV,IAAW,CAACW,MAA2B;AAC3C,MAAAJ,EAAiBI,CAAa;AAAA,IAChC;AAEA,WAAAb,EAAU,KAAKE,CAAQ,GAChB,MAAM;AACX,MAAAF,IAAYA,EAAU,OAAO,CAAAc,MAAKA,MAAMZ,CAAQ;AAAA,IAClD;AAAA,EACF,GAAG,CAAA,CAAE;AAGL,SAAAQ,EAAS,MACYC,EAAA,CAEpB,GAEM;AAAA,IACL,OAAAR;AAAA,IACA,QAAQK;AAAA,IACR,SAAS,CAACH,MAAe;AACvB,MAAAN,IAASA,EAAO,OAAO,CAAAI,MAASA,EAAM,OAAOE,CAAE,GAC/CJ,EAAA;AAAA,IACF;AAAA,EAAA;AAEJ,GAGac,IAAiB,MAAM;AAClC,QAAM,EAAE,QAAAhB,GAAQ,SAAAiB,EAAA,IAAYT,EAAA;AAE5B,SAAIR,EAAO,WAAW,IAAU,OAG9BkB,gBAAAA,EAAAA,IAAC,SAAI,WAAU,0DACZ,UAAAlB,EAAO,IAAI,CAAAI,MACVe,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAW,
|
|
1
|
+
{"version":3,"file":"use-toast.esm.js","sources":["../../src/components/use-toast.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { createRoot } from 'react-dom/client';\n\ntype ToastProps = {\n title: string;\n description?: string;\n type?: 'default' | 'success' | 'error' | 'warning';\n duration?: number;\n};\n\ntype Toast = ToastProps & {\n id: string;\n};\n\nlet toasts: Toast[] = [];\nlet listeners: ((toasts: Toast[]) => void)[] = [];\n\nconst notifyListeners = () => {\n listeners.forEach(listener => listener([...toasts]));\n};\n\nexport const toast = (props: ToastProps) => {\n const id = `toast-${Date.now()}`;\n const newToast = { \n id, \n ...props,\n duration: props.duration || 5000,\n type: props.type || 'default' \n };\n \n toasts.push(newToast);\n notifyListeners();\n\n // Auto-dismiss after duration\n setTimeout(() => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }, newToast.duration);\n\n return {\n dismiss: () => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }\n };\n};\n\nexport const useToast = () => {\n const [currentToasts, setCurrentToasts] = useState<Toast[]>(toasts);\n\n const registerListener = useCallback(() => {\n const listener = (updatedToasts: Toast[]) => {\n setCurrentToasts(updatedToasts);\n };\n \n listeners.push(listener);\n return () => {\n listeners = listeners.filter(l => l !== listener);\n };\n }, []);\n\n // Register listener on mount\n useState(() => {\n const unregister = registerListener();\n return unregister;\n });\n\n return { \n toast,\n toasts: currentToasts,\n dismiss: (id: string) => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }\n };\n};\n\n// Toast Container Component\nexport const ToastContainer = () => {\n const { toasts, dismiss } = useToast();\n\n if (toasts.length === 0) return null;\n\n return (\n <div className=\"fixed top-4 right-4 z-50 flex flex-col gap-2 w-[350px]\">\n {toasts.map(toast => (\n <div \n key={toast.id}\n className={`p-4 rounded-lg shadow-lg border border-border/50 transition-all duration-300 ease-in-out ${\n toast.type === 'error' ? 'bg-destructive text-destructive-foreground' : \n toast.type === 'success' ? 'bg-green-50 text-green-800 border-green-200' : \n toast.type === 'warning' ? 'bg-amber-50 text-amber-800 border-amber-200' : \n 'bg-background text-foreground'\n }`}\n >\n <div className=\"flex justify-between items-start\">\n <div className=\"font-medium\">{toast.title}</div>\n <button \n onClick={() => dismiss(toast.id)}\n className=\"text-sm opacity-70 hover:opacity-100\"\n >\n ×\n </button>\n </div>\n {toast.description && (\n <div className=\"mt-1 text-sm opacity-80\">{toast.description}</div>\n )}\n </div>\n ))}\n </div>\n );\n}; "],"names":["toasts","listeners","notifyListeners","listener","toast","props","id","newToast","useToast","currentToasts","setCurrentToasts","useState","registerListener","useCallback","updatedToasts","l","ToastContainer","dismiss","jsx","jsxs"],"mappings":";;AAcA,IAAIA,IAAkB,CAAA,GAClBC,IAA2C,CAAA;AAE/C,MAAMC,IAAkB,MAAM;AAC5B,EAAAD,EAAU,QAAQ,CAAAE,MAAYA,EAAS,CAAC,GAAGH,CAAM,CAAC,CAAC;AACrD,GAEaI,IAAQ,CAACC,MAAsB;AAC1C,QAAMC,IAAK,SAAS,KAAK,IAAA,CAAK,IACxBC,IAAW;AAAA,IACf,IAAAD;AAAA,IACA,GAAGD;AAAA,IACH,UAAUA,EAAM,YAAY;AAAA,IAC5B,MAAMA,EAAM,QAAQ;AAAA,EAAA;AAGtB,SAAAL,EAAO,KAAKO,CAAQ,GACpBL,EAAA,GAGA,WAAW,MAAM;AACf,IAAAF,IAASA,EAAO,OAAO,CAAAI,MAASA,EAAM,OAAOE,CAAE,GAC/CJ,EAAA;AAAA,EACF,GAAGK,EAAS,QAAQ,GAEb;AAAA,IACL,SAAS,MAAM;AACb,MAAAP,IAASA,EAAO,OAAO,CAAAI,MAASA,EAAM,OAAOE,CAAE,GAC/CJ,EAAA;AAAA,IACF;AAAA,EAAA;AAEJ,GAEaM,IAAW,MAAM;AAC5B,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAkBX,CAAM,GAE5DY,IAAmBC,EAAY,MAAM;AACzC,UAAMV,IAAW,CAACW,MAA2B;AAC3C,MAAAJ,EAAiBI,CAAa;AAAA,IAChC;AAEA,WAAAb,EAAU,KAAKE,CAAQ,GAChB,MAAM;AACX,MAAAF,IAAYA,EAAU,OAAO,CAAAc,MAAKA,MAAMZ,CAAQ;AAAA,IAClD;AAAA,EACF,GAAG,CAAA,CAAE;AAGL,SAAAQ,EAAS,MACYC,EAAA,CAEpB,GAEM;AAAA,IACL,OAAAR;AAAA,IACA,QAAQK;AAAA,IACR,SAAS,CAACH,MAAe;AACvB,MAAAN,IAASA,EAAO,OAAO,CAAAI,MAASA,EAAM,OAAOE,CAAE,GAC/CJ,EAAA;AAAA,IACF;AAAA,EAAA;AAEJ,GAGac,IAAiB,MAAM;AAClC,QAAM,EAAE,QAAAhB,GAAQ,SAAAiB,EAAA,IAAYT,EAAA;AAE5B,SAAIR,EAAO,WAAW,IAAU,OAG9BkB,gBAAAA,EAAAA,IAAC,SAAI,WAAU,0DACZ,UAAAlB,EAAO,IAAI,CAAAI,MACVe,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAW,4FACTf,EAAM,SAAS,UAAU,+CACzBA,EAAM,SAAS,YAAY,gDAC3BA,EAAM,SAAS,YAAY,gDAC3B,+BACF;AAAA,MAEA,UAAA;AAAA,QAAAe,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,UAAAD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,eAAe,UAAAd,EAAM,OAAM;AAAA,UAC1Cc,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,MAAMD,EAAQb,EAAM,EAAE;AAAA,cAC/B,WAAU;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,GACF;AAAA,QACCA,EAAM,eACLc,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2BAA2B,UAAAd,EAAM,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAlBzDA,EAAM;AAAA,EAAA,CAqBd,GACH;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../jsx-runtime-BYECrxsp.cjs"),d=require("react");let r=[],a=[];const u=()=>{a.forEach(t=>t([...r]))},c=t=>{const i=`toast-${Date.now()}`,e={id:i,...t,duration:t.duration||5e3,type:t.type||"default"};return r.push(e),u(),setTimeout(()=>{r=r.filter(s=>s.id!==i),u()},e.duration),{dismiss:()=>{r=r.filter(s=>s.id!==i),u()}}},l=()=>{const[t,i]=d.useState(r),e=d.useCallback(()=>{const s=o=>{i(o)};return a.push(s),()=>{a=a.filter(o=>o!==s)}},[]);return d.useState(()=>e()),{toast:c,toasts:t,dismiss:s=>{r=r.filter(o=>o.id!==s),u()}}},x=()=>{const{toasts:t,dismiss:i}=l();return t.length===0?null:n.jsxRuntimeExports.jsx("div",{className:"fixed top-4 right-4 z-50 flex flex-col gap-2 w-[350px]",children:t.map(e=>n.jsxRuntimeExports.jsxs("div",{className:`p-4 rounded-lg shadow-lg border border-border transition-all duration-300 ease-in-out ${e.type==="error"?"bg-destructive text-destructive-foreground":e.type==="success"?"bg-green-50 text-green-800 border-green-200":e.type==="warning"?"bg-amber-50 text-amber-800 border-amber-200":"bg-background text-foreground"}`,children:[n.jsxRuntimeExports.jsxs("div",{className:"flex justify-between items-start",children:[n.jsxRuntimeExports.jsx("div",{className:"font-medium",children:e.title}),n.jsxRuntimeExports.jsx("button",{onClick:()=>i(e.id),className:"text-sm opacity-70 hover:opacity-100",children:"×"})]}),e.description&&n.jsxRuntimeExports.jsx("div",{className:"mt-1 text-sm opacity-80",children:e.description})]},e.id))})};exports.ToastContainer=x;exports.toast=c;exports.useToast=l;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../jsx-runtime-BYECrxsp.cjs"),d=require("react");let r=[],a=[];const u=()=>{a.forEach(t=>t([...r]))},c=t=>{const i=`toast-${Date.now()}`,e={id:i,...t,duration:t.duration||5e3,type:t.type||"default"};return r.push(e),u(),setTimeout(()=>{r=r.filter(s=>s.id!==i),u()},e.duration),{dismiss:()=>{r=r.filter(s=>s.id!==i),u()}}},l=()=>{const[t,i]=d.useState(r),e=d.useCallback(()=>{const s=o=>{i(o)};return a.push(s),()=>{a=a.filter(o=>o!==s)}},[]);return d.useState(()=>e()),{toast:c,toasts:t,dismiss:s=>{r=r.filter(o=>o.id!==s),u()}}},x=()=>{const{toasts:t,dismiss:i}=l();return t.length===0?null:n.jsxRuntimeExports.jsx("div",{className:"fixed top-4 right-4 z-50 flex flex-col gap-2 w-[350px]",children:t.map(e=>n.jsxRuntimeExports.jsxs("div",{className:`p-4 rounded-lg shadow-lg border border-border/50 transition-all duration-300 ease-in-out ${e.type==="error"?"bg-destructive text-destructive-foreground":e.type==="success"?"bg-green-50 text-green-800 border-green-200":e.type==="warning"?"bg-amber-50 text-amber-800 border-amber-200":"bg-background text-foreground"}`,children:[n.jsxRuntimeExports.jsxs("div",{className:"flex justify-between items-start",children:[n.jsxRuntimeExports.jsx("div",{className:"font-medium",children:e.title}),n.jsxRuntimeExports.jsx("button",{onClick:()=>i(e.id),className:"text-sm opacity-70 hover:opacity-100",children:"×"})]}),e.description&&n.jsxRuntimeExports.jsx("div",{className:"mt-1 text-sm opacity-80",children:e.description})]},e.id))})};exports.ToastContainer=x;exports.toast=c;exports.useToast=l;
|
|
2
2
|
//# sourceMappingURL=use-toast.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-toast.js","sources":["../../src/components/use-toast.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { createRoot } from 'react-dom/client';\n\ntype ToastProps = {\n title: string;\n description?: string;\n type?: 'default' | 'success' | 'error' | 'warning';\n duration?: number;\n};\n\ntype Toast = ToastProps & {\n id: string;\n};\n\nlet toasts: Toast[] = [];\nlet listeners: ((toasts: Toast[]) => void)[] = [];\n\nconst notifyListeners = () => {\n listeners.forEach(listener => listener([...toasts]));\n};\n\nexport const toast = (props: ToastProps) => {\n const id = `toast-${Date.now()}`;\n const newToast = { \n id, \n ...props,\n duration: props.duration || 5000,\n type: props.type || 'default' \n };\n \n toasts.push(newToast);\n notifyListeners();\n\n // Auto-dismiss after duration\n setTimeout(() => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }, newToast.duration);\n\n return {\n dismiss: () => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }\n };\n};\n\nexport const useToast = () => {\n const [currentToasts, setCurrentToasts] = useState<Toast[]>(toasts);\n\n const registerListener = useCallback(() => {\n const listener = (updatedToasts: Toast[]) => {\n setCurrentToasts(updatedToasts);\n };\n \n listeners.push(listener);\n return () => {\n listeners = listeners.filter(l => l !== listener);\n };\n }, []);\n\n // Register listener on mount\n useState(() => {\n const unregister = registerListener();\n return unregister;\n });\n\n return { \n toast,\n toasts: currentToasts,\n dismiss: (id: string) => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }\n };\n};\n\n// Toast Container Component\nexport const ToastContainer = () => {\n const { toasts, dismiss } = useToast();\n\n if (toasts.length === 0) return null;\n\n return (\n <div className=\"fixed top-4 right-4 z-50 flex flex-col gap-2 w-[350px]\">\n {toasts.map(toast => (\n <div \n key={toast.id}\n className={`p-4 rounded-lg shadow-lg border border-border transition-all duration-300 ease-in-out ${\n toast.type === 'error' ? 'bg-destructive text-destructive-foreground' : \n toast.type === 'success' ? 'bg-green-50 text-green-800 border-green-200' : \n toast.type === 'warning' ? 'bg-amber-50 text-amber-800 border-amber-200' : \n 'bg-background text-foreground'\n }`}\n >\n <div className=\"flex justify-between items-start\">\n <div className=\"font-medium\">{toast.title}</div>\n <button \n onClick={() => dismiss(toast.id)}\n className=\"text-sm opacity-70 hover:opacity-100\"\n >\n ×\n </button>\n </div>\n {toast.description && (\n <div className=\"mt-1 text-sm opacity-80\">{toast.description}</div>\n )}\n </div>\n ))}\n </div>\n );\n}; "],"names":["toasts","listeners","notifyListeners","listener","toast","props","id","newToast","useToast","currentToasts","setCurrentToasts","useState","registerListener","useCallback","updatedToasts","l","ToastContainer","dismiss","jsx","jsxs"],"mappings":"kJAcA,IAAIA,EAAkB,CAAA,EAClBC,EAA2C,CAAA,EAE/C,MAAMC,EAAkB,IAAM,CAC5BD,EAAU,QAAQE,GAAYA,EAAS,CAAC,GAAGH,CAAM,CAAC,CAAC,CACrD,EAEaI,EAASC,GAAsB,CAC1C,MAAMC,EAAK,SAAS,KAAK,IAAA,CAAK,GACxBC,EAAW,CACf,GAAAD,EACA,GAAGD,EACH,SAAUA,EAAM,UAAY,IAC5B,KAAMA,EAAM,MAAQ,SAAA,EAGtB,OAAAL,EAAO,KAAKO,CAAQ,EACpBL,EAAA,EAGA,WAAW,IAAM,CACfF,EAASA,EAAO,OAAOI,GAASA,EAAM,KAAOE,CAAE,EAC/CJ,EAAA,CACF,EAAGK,EAAS,QAAQ,EAEb,CACL,QAAS,IAAM,CACbP,EAASA,EAAO,OAAOI,GAASA,EAAM,KAAOE,CAAE,EAC/CJ,EAAA,CACF,CAAA,CAEJ,EAEaM,EAAW,IAAM,CAC5B,KAAM,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,SAAkBX,CAAM,EAE5DY,EAAmBC,EAAAA,YAAY,IAAM,CACzC,MAAMV,EAAYW,GAA2B,CAC3CJ,EAAiBI,CAAa,CAChC,EAEA,OAAAb,EAAU,KAAKE,CAAQ,EAChB,IAAM,CACXF,EAAYA,EAAU,OAAOc,GAAKA,IAAMZ,CAAQ,CAClD,CACF,EAAG,CAAA,CAAE,EAGLQ,OAAAA,EAAAA,SAAS,IACYC,EAAA,CAEpB,EAEM,CACL,MAAAR,EACA,OAAQK,EACR,QAAUH,GAAe,CACvBN,EAASA,EAAO,OAAOI,GAASA,EAAM,KAAOE,CAAE,EAC/CJ,EAAA,CACF,CAAA,CAEJ,EAGac,EAAiB,IAAM,CAClC,KAAM,CAAE,OAAAhB,EAAQ,QAAAiB,CAAA,EAAYT,EAAA,EAE5B,OAAIR,EAAO,SAAW,EAAU,KAG9BkB,EAAAA,kBAAAA,IAAC,OAAI,UAAU,yDACZ,SAAAlB,EAAO,IAAII,GACVe,EAAAA,kBAAAA,KAAC,MAAA,CAEC,UAAW,
|
|
1
|
+
{"version":3,"file":"use-toast.js","sources":["../../src/components/use-toast.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { createRoot } from 'react-dom/client';\n\ntype ToastProps = {\n title: string;\n description?: string;\n type?: 'default' | 'success' | 'error' | 'warning';\n duration?: number;\n};\n\ntype Toast = ToastProps & {\n id: string;\n};\n\nlet toasts: Toast[] = [];\nlet listeners: ((toasts: Toast[]) => void)[] = [];\n\nconst notifyListeners = () => {\n listeners.forEach(listener => listener([...toasts]));\n};\n\nexport const toast = (props: ToastProps) => {\n const id = `toast-${Date.now()}`;\n const newToast = { \n id, \n ...props,\n duration: props.duration || 5000,\n type: props.type || 'default' \n };\n \n toasts.push(newToast);\n notifyListeners();\n\n // Auto-dismiss after duration\n setTimeout(() => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }, newToast.duration);\n\n return {\n dismiss: () => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }\n };\n};\n\nexport const useToast = () => {\n const [currentToasts, setCurrentToasts] = useState<Toast[]>(toasts);\n\n const registerListener = useCallback(() => {\n const listener = (updatedToasts: Toast[]) => {\n setCurrentToasts(updatedToasts);\n };\n \n listeners.push(listener);\n return () => {\n listeners = listeners.filter(l => l !== listener);\n };\n }, []);\n\n // Register listener on mount\n useState(() => {\n const unregister = registerListener();\n return unregister;\n });\n\n return { \n toast,\n toasts: currentToasts,\n dismiss: (id: string) => {\n toasts = toasts.filter(toast => toast.id !== id);\n notifyListeners();\n }\n };\n};\n\n// Toast Container Component\nexport const ToastContainer = () => {\n const { toasts, dismiss } = useToast();\n\n if (toasts.length === 0) return null;\n\n return (\n <div className=\"fixed top-4 right-4 z-50 flex flex-col gap-2 w-[350px]\">\n {toasts.map(toast => (\n <div \n key={toast.id}\n className={`p-4 rounded-lg shadow-lg border border-border/50 transition-all duration-300 ease-in-out ${\n toast.type === 'error' ? 'bg-destructive text-destructive-foreground' : \n toast.type === 'success' ? 'bg-green-50 text-green-800 border-green-200' : \n toast.type === 'warning' ? 'bg-amber-50 text-amber-800 border-amber-200' : \n 'bg-background text-foreground'\n }`}\n >\n <div className=\"flex justify-between items-start\">\n <div className=\"font-medium\">{toast.title}</div>\n <button \n onClick={() => dismiss(toast.id)}\n className=\"text-sm opacity-70 hover:opacity-100\"\n >\n ×\n </button>\n </div>\n {toast.description && (\n <div className=\"mt-1 text-sm opacity-80\">{toast.description}</div>\n )}\n </div>\n ))}\n </div>\n );\n}; "],"names":["toasts","listeners","notifyListeners","listener","toast","props","id","newToast","useToast","currentToasts","setCurrentToasts","useState","registerListener","useCallback","updatedToasts","l","ToastContainer","dismiss","jsx","jsxs"],"mappings":"kJAcA,IAAIA,EAAkB,CAAA,EAClBC,EAA2C,CAAA,EAE/C,MAAMC,EAAkB,IAAM,CAC5BD,EAAU,QAAQE,GAAYA,EAAS,CAAC,GAAGH,CAAM,CAAC,CAAC,CACrD,EAEaI,EAASC,GAAsB,CAC1C,MAAMC,EAAK,SAAS,KAAK,IAAA,CAAK,GACxBC,EAAW,CACf,GAAAD,EACA,GAAGD,EACH,SAAUA,EAAM,UAAY,IAC5B,KAAMA,EAAM,MAAQ,SAAA,EAGtB,OAAAL,EAAO,KAAKO,CAAQ,EACpBL,EAAA,EAGA,WAAW,IAAM,CACfF,EAASA,EAAO,OAAOI,GAASA,EAAM,KAAOE,CAAE,EAC/CJ,EAAA,CACF,EAAGK,EAAS,QAAQ,EAEb,CACL,QAAS,IAAM,CACbP,EAASA,EAAO,OAAOI,GAASA,EAAM,KAAOE,CAAE,EAC/CJ,EAAA,CACF,CAAA,CAEJ,EAEaM,EAAW,IAAM,CAC5B,KAAM,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,SAAkBX,CAAM,EAE5DY,EAAmBC,EAAAA,YAAY,IAAM,CACzC,MAAMV,EAAYW,GAA2B,CAC3CJ,EAAiBI,CAAa,CAChC,EAEA,OAAAb,EAAU,KAAKE,CAAQ,EAChB,IAAM,CACXF,EAAYA,EAAU,OAAOc,GAAKA,IAAMZ,CAAQ,CAClD,CACF,EAAG,CAAA,CAAE,EAGLQ,OAAAA,EAAAA,SAAS,IACYC,EAAA,CAEpB,EAEM,CACL,MAAAR,EACA,OAAQK,EACR,QAAUH,GAAe,CACvBN,EAASA,EAAO,OAAOI,GAASA,EAAM,KAAOE,CAAE,EAC/CJ,EAAA,CACF,CAAA,CAEJ,EAGac,EAAiB,IAAM,CAClC,KAAM,CAAE,OAAAhB,EAAQ,QAAAiB,CAAA,EAAYT,EAAA,EAE5B,OAAIR,EAAO,SAAW,EAAU,KAG9BkB,EAAAA,kBAAAA,IAAC,OAAI,UAAU,yDACZ,SAAAlB,EAAO,IAAII,GACVe,EAAAA,kBAAAA,KAAC,MAAA,CAEC,UAAW,4FACTf,EAAM,OAAS,QAAU,6CACzBA,EAAM,OAAS,UAAY,8CAC3BA,EAAM,OAAS,UAAY,8CAC3B,+BACF,GAEA,SAAA,CAAAe,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,mCACb,SAAA,CAAAD,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,cAAe,SAAAd,EAAM,MAAM,EAC1Cc,EAAAA,kBAAAA,IAAC,SAAA,CACC,QAAS,IAAMD,EAAQb,EAAM,EAAE,EAC/B,UAAU,uCACX,SAAA,GAAA,CAAA,CAED,EACF,EACCA,EAAM,aACLc,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,0BAA2B,SAAAd,EAAM,WAAA,CAAY,CAAA,CAAA,EAlBzDA,EAAM,EAAA,CAqBd,EACH,CAEJ"}
|
package/dist/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 0 0% 0%;--card: 0 0% 100%;--card-foreground: 0 0% 0%;--popover: 0 0% 100%;--popover-foreground: 0 0% 0%;--primary: 0 0% 0%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 95%;--secondary-foreground: 0 0% 0%;--muted: 0 0% 95%;--muted-foreground: 0 0% 35%;--accent: 0 0% 92%;--accent-foreground: 0 0% 0%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--border: 0 0% 85%;--input: 0 0% 90%;--ring: 0 0% 0%;--radius: .5rem}.dark{--background: 0 0% 10%;--foreground: 0 0% 98%;--card: 0 0% 10%;--card-foreground: 0 0% 98%;--popover: 0 0% 10%;--popover-foreground: 0 0% 98%;--primary: 270 64% 50%;--primary-foreground: 0 0% 100%;--secondary: 270 40% 15%;--secondary-foreground: 0 0% 98%;--muted: 0 0% 15%;--muted-foreground: 0 0% 65%;--accent: 270 40% 20%;--accent-foreground: 270 64% 80%;--destructive: 0 62% 30%;--destructive-foreground: 0 0% 98%;--border: 0 0% 15%;--input: 0 0% 15%;--ring: 270 64% 50%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,sans-serif;font-feature-settings:"rlig" 1,"calt" 1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-2\.5{bottom:-.625rem}.-left-2\.5{left:-.625rem}.-right-1{right:-.25rem}.-right-2\.5{right:-.625rem}.-top-1{top:-.25rem}.-top-2\.5{top:-.625rem}.-top-\[26px\]{top:-26px}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.bottom-20{bottom:5rem}.bottom-4{bottom:1rem}.bottom-8{bottom:2rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-8{left:2rem}.left-\[15px\]{left:15px}.left-\[50\%\]{left:50%}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-2\.5{right:.625rem}.right-4{right:1rem}.right-full{right:100%}.top-0{top:0}.top-1\/2{top:50%}.top-2\.5{top:.625rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.top-full{top:100%}.z-10{z-index:10}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.z-\[100\]{z-index:100}.z-\[50\]{z-index:50}.z-\[60\]{z-index:60}.z-\[9999\]{z-index:9999}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.\!inline{display:inline!important}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[150px\]{height:150px}.h-\[1px\]{height:1px}.h-\[200px\]{height:200px}.h-\[24px\]{height:24px}.h-\[30px\]{height:30px}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-\[80vh\]{height:80vh}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-scroll-xl{height:calc(100vh - 15rem)}.max-h-96{max-height:24rem}.max-h-\[300px\]{max-height:300px}.max-h-\[85vh\]{max-height:85vh}.max-h-\[calc\(100vh-10rem\)\]{max-height:calc(100vh - 10rem)}.min-h-0{min-height:0px}.min-h-\[100px\]{min-height:100px}.min-h-\[120px\]{min-height:120px}.min-h-\[200px\]{min-height:200px}.min-h-\[80px\]{min-height:80px}.min-h-full{min-height:100%}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-1\/4{width:25%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-2\/5{width:40%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-32{width:8rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[180px\]{width:180px}.w-\[1px\]{width:1px}.w-\[200px\]{width:200px}.w-\[220px\]{width:220px}.w-\[2px\]{width:2px}.w-\[300px\]{width:300px}.w-\[30px\]{width:30px}.w-\[350px\]{width:350px}.w-\[380px\]{width:380px}.w-\[400px\]{width:400px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[120px\]{min-width:120px}.min-w-\[220px\]{min-width:220px}.min-w-\[80px\]{min-width:80px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[250px\]{max-width:250px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.origin-top{transform-origin:top}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-ne-resize{cursor:ne-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-nw-resize{cursor:nw-resize}.cursor-pointer{cursor:pointer}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[25px_1fr\]{grid-template-columns:25px 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/30>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .3)}.divide-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-current{border-color:currentColor}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-muted{border-color:hsl(var(--muted))}.border-muted-foreground\/25{border-color:hsl(var(--muted-foreground) / .25)}.border-muted-foreground\/30{border-color:hsl(var(--muted-foreground) / .3)}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-yellow-200{--tw-border-opacity: 1;border-color:rgb(254 240 138 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/30{background-color:hsl(var(--accent) / .3)}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-background\/90{background-color:hsl(var(--background) / .9)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-border{background-color:hsl(var(--border))}.bg-border\/40{background-color:hsl(var(--border) / .4)}.bg-card{background-color:hsl(var(--card))}.bg-card\/30{background-color:hsl(var(--card) / .3)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-foreground{background-color:hsl(var(--foreground))}.bg-foreground\/30{background-color:hsl(var(--foreground) / .3)}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/5{background-color:hsl(var(--muted) / .05)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-muted\/70{background-color:hsl(var(--muted) / .7)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/60{background-color:hsl(var(--primary) / .6)}.bg-primary\/80{background-color:hsl(var(--primary) / .8)}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity, 1))}.bg-yellow-600{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-muted\/30{--tw-gradient-from: hsl(var(--muted) / .3) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--muted) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/20{--tw-gradient-from: hsl(var(--primary) / .2) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from: #faf5ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-muted\/60{--tw-gradient-to: hsl(var(--muted) / .6) var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to: #fdf2f8 var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.fill-yellow-400{fill:#facc15}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-6{line-height:1.5rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-muted-foreground\/90{color:hsl(var(--muted-foreground) / .9)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/70{color:hsl(var(--primary) / .7)}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-yellow-800{--tw-text-opacity: 1;color:rgb(133 77 14 / var(--tw-text-opacity, 1))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-primary\/20{--tw-shadow-color: hsl(var(--primary) / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.prose{color:hsl(var(--foreground));max-width:none}.prose pre{background-color:hsl(var(--muted))}.prose code{background-color:hsl(var(--muted));color:hsl(var(--foreground))}.prose img{border-radius:var(--radius);margin:0!important}.prose a{color:hsl(var(--primary));text-decoration-line:none}.prose a:hover{color:hsl(var(--primary) / .9)}.prose strong{font-weight:600;color:hsl(var(--foreground))}.prose blockquote{margin-top:1rem;margin-bottom:1rem;border-left-width:4px;border-color:hsl(var(--border));background-color:hsl(var(--muted) / .5);padding:.25rem 1rem}.prose ul{margin-top:1rem;margin-bottom:1rem;list-style-position:inside;list-style-type:disc}.prose ul>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.prose ul *::marker{color:hsl(var(--muted-foreground))}.prose ul::marker{color:hsl(var(--muted-foreground))}.prose ol{margin-top:1rem;margin-bottom:1rem;list-style-position:inside;list-style-type:decimal}.prose ol>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.prose ol *::marker{color:hsl(var(--muted-foreground))}.prose ol::marker{color:hsl(var(--muted-foreground))}.prose table{margin-top:1rem;margin-bottom:1rem;width:100%;border-collapse:collapse}.prose th{border-width:1px;border-color:hsl(var(--border));background-color:hsl(var(--muted));padding:.5rem 1rem;text-align:left;font-weight:500}.prose td{border-width:1px;border-color:hsl(var(--border));padding:.5rem 1rem}.prose hr{margin-top:2rem;margin-bottom:2rem;border-color:hsl(var(--border))}.prose h1,.prose h2,.prose h3,.prose h4{margin-top:2rem;margin-bottom:1rem;font-weight:600;color:hsl(var(--foreground))}.prose h1{font-size:1.5rem;line-height:2rem}.prose h2{font-size:1.25rem;line-height:1.75rem}.prose h3{font-size:1.125rem;line-height:1.75rem}.prose h4{font-size:1rem;line-height:1.5rem}.prose>:first-child{margin-top:0!important}.prose>:last-child{margin-bottom:0!important}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-0:before{content:var(--tw-content);top:0;right:0;bottom:0;left:0}.before\:-translate-x-full:before{content:var(--tw-content);--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes shimmer{to{content:var(--tw-content);transform:translate(100%)}}.before\:animate-\[shimmer_2s_infinite\]:before{content:var(--tw-content);animation:shimmer 2s infinite}.before\:bg-gradient-to-r:before{content:var(--tw-content);background-image:linear-gradient(to right,var(--tw-gradient-stops))}.before\:from-transparent:before{content:var(--tw-content);--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.before\:via-white\/10:before{content:var(--tw-content);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.before\:to-transparent:before{content:var(--tw-content);--tw-gradient-to: transparent var(--tw-gradient-to-position)}.last\:mb-0:last-child{margin-bottom:0}.last\:border-b-0:last-child{border-bottom-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:h-2:hover{height:.5rem}.hover\:w-2:hover{width:.5rem}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-muted-foreground\/50:hover{border-color:hsl(var(--muted-foreground) / .5)}.hover\:border-primary\/20:hover{border-color:hsl(var(--primary) / .2)}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary) / .5)}.hover\:border-white:hover{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-background:hover{background-color:hsl(var(--background))}.hover\:bg-border\/70:hover{background-color:hsl(var(--border) / .7)}.hover\:bg-card\/50:hover{background-color:hsl(var(--card) / .5)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-foreground\/50:hover{background-color:hsl(var(--foreground) / .5)}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/30:hover{background-color:hsl(var(--muted) / .3)}.hover\:bg-primary:hover{background-color:hsl(var(--primary))}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-yellow-700:hover{--tw-bg-opacity: 1;background-color:rgb(161 98 7 / var(--tw-bg-opacity, 1))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-destructive:focus{color:hsl(var(--destructive))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:scale-90:active{--tw-scale-x: .9;--tw-scale-y: .9;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:bg-primary\/15{background-color:hsl(var(--primary) / .15)}.group:hover .group-hover\:text-foreground{color:hsl(var(--foreground))}.group:hover .group-hover\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=dragging\]\:bg-border\/70[data-state=dragging]{background-color:hsl(var(--border) / .7)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 640px){.sm\:mt-0{margin-top:0}.sm\:max-w-\[425px\]{max-width:425px}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (prefers-color-scheme: dark){.dark\:border-blue-800{--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-destructive{border-color:hsl(var(--destructive))}.dark\:border-green-800{--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-yellow-800{--tw-border-opacity: 1;border-color:rgb(133 77 14 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/10{background-color:#1e3a8a1a}.dark\:bg-blue-900\/20{background-color:#1e3a8a33}.dark\:bg-blue-950{--tw-bg-opacity: 1;background-color:rgb(23 37 84 / var(--tw-bg-opacity, 1))}.dark\:bg-green-950{--tw-bg-opacity: 1;background-color:rgb(5 46 22 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-950{--tw-bg-opacity: 1;background-color:rgb(66 32 6 / var(--tw-bg-opacity, 1))}.dark\:from-purple-950{--tw-gradient-from: #3b0764 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 7 100 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-pink-950{--tw-gradient-to: #500724 var(--tw-gradient-to-position)}.dark\:text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}}.\[\&\>\.bg-primary\]\:bg-green-500>.bg-primary{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.\[\&\>\.bg-primary\]\:bg-red-500>.bg-primary{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.\[\&\>\.bg-primary\]\:bg-yellow-500>.bg-primary{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.\[\&\>\.rounded-full\]\:border-green-500>.rounded-full{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.\[\&\>\.rounded-full\]\:border-red-500>.rounded-full{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.\[\&\>\.rounded-full\]\:border-yellow-500>.rounded-full{--tw-border-opacity: 1;border-color:rgb(234 179 8 / var(--tw-border-opacity, 1))}.\[\&\>div\]\:bg-blue-500>div{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.\[\&\>div\]\:bg-green-500>div{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.\[\&\>div\]\:bg-orange-500>div{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.\[\&\>div\]\:bg-primary\/50>div{background-color:hsl(var(--primary) / .5)}.\[\&\>div\]\:bg-red-500>div{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.hover\:\[\&\>div\]\:bg-primary\/70>div:hover{background-color:hsl(var(--primary) / .7)}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_p\]\:leading-relaxed p{line-height:1.625}
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 98%;--foreground: 222 22% 8%;--card: 0 0% 100%;--card-foreground: 222 22% 8%;--popover: 0 0% 100%;--popover-foreground: 222 22% 8%;--primary: 13 100% 59%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 96%;--secondary-foreground: 222 22% 15%;--muted: 210 10% 98%;--muted-foreground: 220 8% 48%;--accent: 13 30% 96%;--accent-foreground: 222 22% 15%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--border: 220 10% 92%;--input: 220 10% 98%;--ring: 13 100% 59%;--radius: .5rem}.dark{--background: 0 0% 10%;--foreground: 0 0% 98%;--card: 0 0% 10%;--card-foreground: 0 0% 98%;--popover: 0 0% 10%;--popover-foreground: 0 0% 98%;--primary: 270 64% 50%;--primary-foreground: 0 0% 100%;--secondary: 270 40% 15%;--secondary-foreground: 0 0% 98%;--muted: 0 0% 15%;--muted-foreground: 0 0% 65%;--accent: 270 40% 20%;--accent-foreground: 270 64% 80%;--destructive: 0 62% 30%;--destructive-foreground: 0 0% 98%;--border: 0 0% 15%;--input: 0 0% 15%;--ring: 270 64% 50%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,sans-serif;font-feature-settings:"rlig" 1,"calt" 1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-2\.5{bottom:-.625rem}.-left-2\.5{left:-.625rem}.-right-1{right:-.25rem}.-right-2\.5{right:-.625rem}.-top-1{top:-.25rem}.-top-2\.5{top:-.625rem}.-top-\[26px\]{top:-26px}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.bottom-20{bottom:5rem}.bottom-4{bottom:1rem}.bottom-8{bottom:2rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-8{left:2rem}.left-\[15px\]{left:15px}.left-\[50\%\]{left:50%}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-2\.5{right:.625rem}.right-4{right:1rem}.right-full{right:100%}.top-0{top:0}.top-1\/2{top:50%}.top-2\.5{top:.625rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.top-full{top:100%}.z-10{z-index:10}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.z-\[100\]{z-index:100}.z-\[50\]{z-index:50}.z-\[60\]{z-index:60}.z-\[9999\]{z-index:9999}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.\!inline{display:inline!important}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[150px\]{height:150px}.h-\[1px\]{height:1px}.h-\[200px\]{height:200px}.h-\[24px\]{height:24px}.h-\[30px\]{height:30px}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-\[80vh\]{height:80vh}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-scroll-xl{height:calc(100vh - 15rem)}.max-h-96{max-height:24rem}.max-h-\[300px\]{max-height:300px}.max-h-\[85vh\]{max-height:85vh}.max-h-\[calc\(100vh-10rem\)\]{max-height:calc(100vh - 10rem)}.min-h-0{min-height:0px}.min-h-\[100px\]{min-height:100px}.min-h-\[120px\]{min-height:120px}.min-h-\[200px\]{min-height:200px}.min-h-\[80px\]{min-height:80px}.min-h-full{min-height:100%}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-1\/4{width:25%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-2\/5{width:40%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-32{width:8rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[180px\]{width:180px}.w-\[1px\]{width:1px}.w-\[200px\]{width:200px}.w-\[220px\]{width:220px}.w-\[2px\]{width:2px}.w-\[300px\]{width:300px}.w-\[30px\]{width:30px}.w-\[350px\]{width:350px}.w-\[380px\]{width:380px}.w-\[400px\]{width:400px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[120px\]{min-width:120px}.min-w-\[220px\]{min-width:220px}.min-w-\[80px\]{min-width:80px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[250px\]{max-width:250px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.origin-top{transform-origin:top}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-move{cursor:move}.cursor-ne-resize{cursor:ne-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-nw-resize{cursor:nw-resize}.cursor-pointer{cursor:pointer}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[25px_1fr\]{grid-template-columns:25px 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/30>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .3)}.divide-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-current{border-color:currentColor}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-muted{border-color:hsl(var(--muted))}.border-muted-foreground\/25{border-color:hsl(var(--muted-foreground) / .25)}.border-muted-foreground\/30{border-color:hsl(var(--muted-foreground) / .3)}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-yellow-200{--tw-border-opacity: 1;border-color:rgb(254 240 138 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/30{background-color:hsl(var(--accent) / .3)}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-background\/90{background-color:hsl(var(--background) / .9)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-border{background-color:hsl(var(--border))}.bg-border\/40{background-color:hsl(var(--border) / .4)}.bg-card{background-color:hsl(var(--card))}.bg-card\/30{background-color:hsl(var(--card) / .3)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-foreground{background-color:hsl(var(--foreground))}.bg-foreground\/30{background-color:hsl(var(--foreground) / .3)}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/5{background-color:hsl(var(--muted) / .05)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-muted\/70{background-color:hsl(var(--muted) / .7)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/60{background-color:hsl(var(--primary) / .6)}.bg-primary\/80{background-color:hsl(var(--primary) / .8)}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity, 1))}.bg-yellow-600{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-muted\/30{--tw-gradient-from: hsl(var(--muted) / .3) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--muted) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/20{--tw-gradient-from: hsl(var(--primary) / .2) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from: #faf5ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-muted\/60{--tw-gradient-to: hsl(var(--muted) / .6) var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to: #fdf2f8 var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.fill-yellow-400{fill:#facc15}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-6{line-height:1.5rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-muted-foreground\/90{color:hsl(var(--muted-foreground) / .9)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/70{color:hsl(var(--primary) / .7)}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-yellow-800{--tw-text-opacity: 1;color:rgb(133 77 14 / var(--tw-text-opacity, 1))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-primary\/20{--tw-shadow-color: hsl(var(--primary) / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.prose{color:hsl(var(--foreground));max-width:none}.prose pre{background-color:hsl(var(--muted))}.prose code{background-color:hsl(var(--muted));color:hsl(var(--foreground))}.prose img{border-radius:var(--radius);margin:0!important}.prose a{color:hsl(var(--primary));text-decoration-line:none}.prose a:hover{color:hsl(var(--primary) / .9)}.prose strong{font-weight:600;color:hsl(var(--foreground))}.prose blockquote{margin-top:1rem;margin-bottom:1rem;border-left-width:4px;border-color:hsl(var(--border));background-color:hsl(var(--muted) / .5);padding:.25rem 1rem}.prose ul{margin-top:1rem;margin-bottom:1rem;list-style-position:inside;list-style-type:disc}.prose ul>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.prose ul *::marker{color:hsl(var(--muted-foreground))}.prose ul::marker{color:hsl(var(--muted-foreground))}.prose ol{margin-top:1rem;margin-bottom:1rem;list-style-position:inside;list-style-type:decimal}.prose ol>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.prose ol *::marker{color:hsl(var(--muted-foreground))}.prose ol::marker{color:hsl(var(--muted-foreground))}.prose table{margin-top:1rem;margin-bottom:1rem;width:100%;border-collapse:collapse}.prose th{border-width:1px;border-color:hsl(var(--border));background-color:hsl(var(--muted));padding:.5rem 1rem;text-align:left;font-weight:500}.prose td{border-width:1px;border-color:hsl(var(--border));padding:.5rem 1rem}.prose hr{margin-top:2rem;margin-bottom:2rem;border-color:hsl(var(--border))}.prose h1,.prose h2,.prose h3,.prose h4{margin-top:2rem;margin-bottom:1rem;font-weight:600;color:hsl(var(--foreground))}.prose h1{font-size:1.5rem;line-height:2rem}.prose h2{font-size:1.25rem;line-height:1.75rem}.prose h3{font-size:1.125rem;line-height:1.75rem}.prose h4{font-size:1rem;line-height:1.5rem}.prose>:first-child{margin-top:0!important}.prose>:last-child{margin-bottom:0!important}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-0:before{content:var(--tw-content);top:0;right:0;bottom:0;left:0}.before\:-translate-x-full:before{content:var(--tw-content);--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes shimmer{to{content:var(--tw-content);transform:translate(100%)}}.before\:animate-\[shimmer_2s_infinite\]:before{content:var(--tw-content);animation:shimmer 2s infinite}.before\:bg-gradient-to-r:before{content:var(--tw-content);background-image:linear-gradient(to right,var(--tw-gradient-stops))}.before\:from-transparent:before{content:var(--tw-content);--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.before\:via-white\/10:before{content:var(--tw-content);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.before\:to-transparent:before{content:var(--tw-content);--tw-gradient-to: transparent var(--tw-gradient-to-position)}.last\:mb-0:last-child{margin-bottom:0}.last\:border-b-0:last-child{border-bottom-width:0px}.last\:pb-0:last-child{padding-bottom:0}.hover\:h-2:hover{height:.5rem}.hover\:w-2:hover{width:.5rem}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-muted-foreground\/50:hover{border-color:hsl(var(--muted-foreground) / .5)}.hover\:border-primary\/20:hover{border-color:hsl(var(--primary) / .2)}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary) / .3)}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary) / .5)}.hover\:border-white:hover{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-background:hover{background-color:hsl(var(--background))}.hover\:bg-border\/70:hover{background-color:hsl(var(--border) / .7)}.hover\:bg-card\/50:hover{background-color:hsl(var(--card) / .5)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-foreground\/50:hover{background-color:hsl(var(--foreground) / .5)}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/30:hover{background-color:hsl(var(--muted) / .3)}.hover\:bg-primary:hover{background-color:hsl(var(--primary))}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-yellow-700:hover{--tw-bg-opacity: 1;background-color:rgb(161 98 7 / var(--tw-bg-opacity, 1))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-destructive:focus{color:hsl(var(--destructive))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:scale-90:active{--tw-scale-x: .9;--tw-scale-y: .9;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:bg-primary\/15{background-color:hsl(var(--primary) / .15)}.group:hover .group-hover\:text-foreground{color:hsl(var(--foreground))}.group:hover .group-hover\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=dragging\]\:bg-border\/70[data-state=dragging]{background-color:hsl(var(--border) / .7)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 640px){.sm\:mt-0{margin-top:0}.sm\:max-w-\[425px\]{max-width:425px}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (prefers-color-scheme: dark){.dark\:border-blue-800{--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-destructive{border-color:hsl(var(--destructive))}.dark\:border-green-800{--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-yellow-800{--tw-border-opacity: 1;border-color:rgb(133 77 14 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/10{background-color:#1e3a8a1a}.dark\:bg-blue-900\/20{background-color:#1e3a8a33}.dark\:bg-blue-950{--tw-bg-opacity: 1;background-color:rgb(23 37 84 / var(--tw-bg-opacity, 1))}.dark\:bg-green-950{--tw-bg-opacity: 1;background-color:rgb(5 46 22 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-950{--tw-bg-opacity: 1;background-color:rgb(66 32 6 / var(--tw-bg-opacity, 1))}.dark\:from-purple-950{--tw-gradient-from: #3b0764 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 7 100 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-pink-950{--tw-gradient-to: #500724 var(--tw-gradient-to-position)}.dark\:text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}}.\[\&\>\.bg-primary\]\:bg-green-500>.bg-primary{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.\[\&\>\.bg-primary\]\:bg-red-500>.bg-primary{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.\[\&\>\.bg-primary\]\:bg-yellow-500>.bg-primary{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.\[\&\>\.rounded-full\]\:border-green-500>.rounded-full{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.\[\&\>\.rounded-full\]\:border-red-500>.rounded-full{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.\[\&\>\.rounded-full\]\:border-yellow-500>.rounded-full{--tw-border-opacity: 1;border-color:rgb(234 179 8 / var(--tw-border-opacity, 1))}.\[\&\>div\]\:bg-blue-500>div{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.\[\&\>div\]\:bg-green-500>div{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.\[\&\>div\]\:bg-orange-500>div{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.\[\&\>div\]\:bg-primary\/50>div{background-color:hsl(var(--primary) / .5)}.\[\&\>div\]\:bg-red-500>div{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.hover\:\[\&\>div\]\:bg-primary\/70>div:hover{background-color:hsl(var(--primary) / .7)}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_p\]\:leading-relaxed p{line-height:1.625}
|