@cryptlex/web-components 6.6.120 → 6.7.1

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.
Files changed (53) hide show
  1. package/dist/components/alert.d.ts +1 -1
  2. package/dist/components/alert.js +1 -1
  3. package/dist/components/alert.js.map +1 -1
  4. package/dist/components/badge.d.ts +1 -1
  5. package/dist/components/button.d.ts +1 -1
  6. package/dist/components/card.js +1 -1
  7. package/dist/components/card.js.map +1 -1
  8. package/dist/components/charts.js +1 -1
  9. package/dist/components/charts.js.map +1 -1
  10. package/dist/components/checkbox.js +1 -1
  11. package/dist/components/checkbox.js.map +1 -1
  12. package/dist/components/code-block.js +1 -1
  13. package/dist/components/code-block.js.map +1 -1
  14. package/dist/components/data-table.js +1 -1
  15. package/dist/components/data-table.js.map +1 -1
  16. package/dist/components/date-picker.js +1 -1
  17. package/dist/components/date-picker.js.map +1 -1
  18. package/dist/components/dialog.js +1 -1
  19. package/dist/components/dialog.js.map +1 -1
  20. package/dist/components/duration-field.js +1 -1
  21. package/dist/components/duration-field.js.map +1 -1
  22. package/dist/components/form.js +1 -1
  23. package/dist/components/form.js.map +1 -1
  24. package/dist/components/list-box.js +1 -1
  25. package/dist/components/list-box.js.map +1 -1
  26. package/dist/components/loader.js +1 -1
  27. package/dist/components/loader.js.map +1 -1
  28. package/dist/components/offline-request-file-input.js +1 -1
  29. package/dist/components/offline-request-file-input.js.map +1 -1
  30. package/dist/components/popover.js +1 -1
  31. package/dist/components/popover.js.map +1 -1
  32. package/dist/components/progress-bar.js +1 -1
  33. package/dist/components/progress-bar.js.map +1 -1
  34. package/dist/components/searchfield.js +1 -1
  35. package/dist/components/searchfield.js.map +1 -1
  36. package/dist/components/select.js +1 -1
  37. package/dist/components/select.js.map +1 -1
  38. package/dist/components/sidebar.js +1 -1
  39. package/dist/components/sidebar.js.map +1 -1
  40. package/dist/components/table-of-contents.js +1 -1
  41. package/dist/components/table-of-contents.js.map +1 -1
  42. package/dist/components/tabs.js +1 -1
  43. package/dist/components/tabs.js.map +1 -1
  44. package/dist/components/tooltip.js +1 -1
  45. package/dist/components/tooltip.js.map +1 -1
  46. package/dist/utilities/shiki.js +1 -1
  47. package/dist/utilities/shiki.js.map +1 -1
  48. package/dist/utilities/theme.js.map +1 -1
  49. package/dist/utilities/use-mobile.js +1 -1
  50. package/dist/utilities/use-mobile.js.map +1 -1
  51. package/lib/index.css +22 -92
  52. package/lib/tokens.css +30 -205
  53. package/package.json +3 -5
@@ -2,7 +2,7 @@ import { VariantProps } from 'class-variance-authority';
2
2
  import { default as React } from 'react';
3
3
  import { CtxIcon } from './icons';
4
4
  export declare const alertVariants: (props?: ({
5
- variant?: "success" | "default" | "destructive" | "neutral" | "warning" | null | undefined;
5
+ variant?: "warning" | "success" | "destructive" | "default" | "neutral" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
7
  export declare function Alert({ children, className, variant, icon, ...props }: React.ComponentProps<'div'> & VariantProps<typeof alertVariants> & {
8
8
  icon?: CtxIcon;
@@ -1,2 +1,2 @@
1
- import{jsxs as i,jsx as s}from"react/jsx-runtime";import{cva as o}from"class-variance-authority";import{classNames as l}from"../utilities/theme.js";import{IcInfo as u,IcWarning as m,IcCheck as d,IcError as f}from"./icons.js";import"clsx";import"@icons-pack/react-simple-icons";import"react";const p=o("rounded-md transition-colors bg-elevation-1 border p-icon body-sm inline-flex items-start gap-2 w-full sm:w-auto",{variants:{variant:{destructive:"text-destructive border-destructive",success:"text-success border-success",warning:"text-warning",neutral:"text-muted border-muted",default:""}},defaultVariants:{variant:"default"}}),v=e=>{switch(e){case"destructive":return f;case"success":return d;case"warning":return m;default:return u}};function N({children:e,className:n,variant:t,icon:a,...c}){const r=a??v(t);return i("div",{role:"alert",className:l(p({variant:t}),n),...c,children:[r&&s(r,{className:"inline-block size-icon shrink-0"}),s("span",{className:"inline-block flex-1 min-w-0 mt-0",children:e})]})}export{N as Alert,p as alertVariants};
1
+ import{jsxs as i,jsx as s}from"react/jsx-runtime";import{cva as o}from"class-variance-authority";import{classNames as u}from"../utilities/theme.js";import{IcInfo as l,IcWarning as m,IcCheck as d,IcError as f}from"./icons.js";import"clsx";import"@icons-pack/react-simple-icons";import"react";const p=o("rounded-md transition-colors bg-surface-primary border p-icon body-sm inline-flex items-start gap-2 w-full sm:w-auto",{variants:{variant:{destructive:"text-destructive border-destructive",success:"text-success border-success",warning:"text-warning",neutral:"text-muted border-muted",default:""}},defaultVariants:{variant:"default"}}),v=e=>{switch(e){case"destructive":return f;case"success":return d;case"warning":return m;default:return l}};function N({children:e,className:a,variant:r,icon:n,...c}){const t=n??v(r);return i("div",{role:"alert",className:u(p({variant:r}),a),...c,children:[t&&s(t,{className:"inline-block size-icon shrink-0"}),s("span",{className:"inline-block flex-1 min-w-0 mt-0",children:e})]})}export{N as Alert,p as alertVariants};
2
2
  //# sourceMappingURL=alert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","sources":["../../lib/components/alert.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { classNames } from '../utilities/theme';\nimport type { CtxIcon } from './icons';\nimport { IcCheck, IcError, IcInfo, IcWarning } from './icons';\n\nexport const alertVariants = cva(\n `rounded-md transition-colors bg-elevation-1 border p-icon body-sm inline-flex items-start gap-2 w-full sm:w-auto`,\n {\n variants: {\n variant: {\n destructive: 'text-destructive border-destructive',\n success: 'text-success border-success',\n warning: 'text-warning',\n neutral: 'text-muted border-muted',\n default: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\n// Default icons for each variant\nconst getDefaultIcon = (variant: string | null | undefined): CtxIcon | null => {\n switch (variant) {\n case 'destructive':\n return IcError;\n case 'success':\n return IcCheck;\n case 'warning':\n return IcWarning;\n case 'neutral':\n case undefined:\n default:\n return IcInfo;\n }\n};\nexport function Alert({\n children,\n className,\n variant,\n icon,\n ...props\n}: React.ComponentProps<'div'> &\n VariantProps<typeof alertVariants> & {\n icon?: CtxIcon;\n }) {\n // Overrides the default icon with the provided icon\n const Icon = icon ?? getDefaultIcon(variant);\n\n return (\n <div role=\"alert\" className={classNames(alertVariants({ variant }), className)} {...props}>\n {Icon && <Icon className=\"inline-block size-icon shrink-0\" />}\n <span className=\"inline-block flex-1 min-w-0 mt-0\">{children}</span>\n </div>\n );\n}\n"],"names":["alertVariants","cva","getDefaultIcon","variant","IcError","IcCheck","IcWarning","IcInfo","Alert","children","className","icon","props","Icon","jsxs","classNames","jsx"],"mappings":"mSAMO,MAAMA,EAAgBC,EACzB,mHACA,CACI,SAAU,CACN,QAAS,CACL,YAAa,sCACb,QAAS,8BACT,QAAS,eACT,QAAS,0BACT,QAAS,EAAA,CACb,EAEJ,gBAAiB,CACb,QAAS,SAAA,CACb,CAER,EAGMC,EAAkBC,GAAuD,CAC3E,OAAQA,EAAA,CACJ,IAAK,cACD,OAAOC,EACX,IAAK,UACD,OAAOC,EACX,IAAK,UACD,OAAOC,EAGX,QACI,OAAOC,CAAA,CAEnB,EACO,SAASC,EAAM,CAClB,SAAAC,EACA,UAAAC,EACA,QAAAP,EACA,KAAAQ,EACA,GAAGC,CACP,EAGO,CAEH,MAAMC,EAAOF,GAAQT,EAAeC,CAAO,EAE3C,OACIW,EAAC,MAAA,CAAI,KAAK,QAAQ,UAAWC,EAAWf,EAAc,CAAE,QAAAG,CAAA,CAAS,EAAGO,CAAS,EAAI,GAAGE,EAC/E,SAAA,CAAAC,GAAQG,EAACH,EAAA,CAAK,UAAU,iCAAA,CAAkC,EAC3DG,EAAC,OAAA,CAAK,UAAU,mCAAoC,SAAAP,CAAA,CAAS,CAAA,EACjE,CAER"}
1
+ {"version":3,"file":"alert.js","sources":["../../lib/components/alert.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { classNames } from '../utilities/theme';\nimport type { CtxIcon } from './icons';\nimport { IcCheck, IcError, IcInfo, IcWarning } from './icons';\n\nexport const alertVariants = cva(\n `rounded-md transition-colors bg-surface-primary border p-icon body-sm inline-flex items-start gap-2 w-full sm:w-auto`,\n {\n variants: {\n variant: {\n destructive: 'text-destructive border-destructive',\n success: 'text-success border-success',\n warning: 'text-warning',\n neutral: 'text-muted border-muted',\n default: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\n// Default icons for each variant\nconst getDefaultIcon = (variant: string | null | undefined): CtxIcon | null => {\n switch (variant) {\n case 'destructive':\n return IcError;\n case 'success':\n return IcCheck;\n case 'warning':\n return IcWarning;\n case 'neutral':\n case undefined:\n default:\n return IcInfo;\n }\n};\nexport function Alert({\n children,\n className,\n variant,\n icon,\n ...props\n}: React.ComponentProps<'div'> &\n VariantProps<typeof alertVariants> & {\n icon?: CtxIcon;\n }) {\n // Overrides the default icon with the provided icon\n const Icon = icon ?? getDefaultIcon(variant);\n\n return (\n <div role=\"alert\" className={classNames(alertVariants({ variant }), className)} {...props}>\n {Icon && <Icon className=\"inline-block size-icon shrink-0\" />}\n <span className=\"inline-block flex-1 min-w-0 mt-0\">{children}</span>\n </div>\n );\n}\n"],"names":["alertVariants","cva","getDefaultIcon","variant","IcError","IcCheck","IcWarning","IcInfo","Alert","children","className","icon","props","Icon","jsxs","classNames","jsx"],"mappings":"mSAMO,MAAMA,EAAgBC,EACzB,uHACA,CACI,SAAU,CACN,QAAS,CACL,YAAa,sCACb,QAAS,8BACT,QAAS,eACT,QAAS,0BACT,QAAS,EAAA,CACb,EAEJ,gBAAiB,CACb,QAAS,SAAA,CACb,CAER,EAGMC,EAAkBC,GAAuD,CAC3E,OAAQA,EAAA,CACJ,IAAK,cACD,OAAOC,EACX,IAAK,UACD,OAAOC,EACX,IAAK,UACD,OAAOC,EAGX,QACI,OAAOC,CAAA,CAEnB,EACO,SAASC,EAAM,CAClB,SAAAC,EACA,UAAAC,EACA,QAAAP,EACA,KAAAQ,EACA,GAAGC,CACP,EAGO,CAEH,MAAMC,EAAOF,GAAQT,EAAeC,CAAO,EAE3C,OACIW,EAAC,MAAA,CAAI,KAAK,QAAQ,UAAWC,EAAWf,EAAc,CAAE,QAAAG,CAAA,CAAS,EAAGO,CAAS,EAAI,GAAGE,EAC/E,SAAA,CAAAC,GAAQG,EAACH,EAAA,CAAK,UAAU,iCAAA,CAAkC,EAC3DG,EAAC,OAAA,CAAK,UAAU,mCAAoC,SAAAP,CAAA,CAAS,CAAA,EACjE,CAER"}
@@ -1,6 +1,6 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  import { default as React } from 'react';
3
3
  export declare const badgeVariants: (props?: ({
4
- variant?: "success" | "destructive" | "neutral" | "warning" | "info" | "discovery" | null | undefined;
4
+ variant?: "warning" | "success" | "destructive" | "neutral" | "info" | "discovery" | null | undefined;
5
5
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
6
  export declare function Badge({ className, children, variant, ...props }: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants>): import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  import { ButtonProps as AriaButtonProps } from 'react-aria-components';
3
3
  export declare const buttonVariants: (props?: ({
4
- variant?: "link" | "primary" | "destructive" | "destructive_neutral" | "neutral" | "primary_neutral" | "ghost" | null | undefined;
4
+ variant?: "primary" | "destructive" | "link" | "destructive_neutral" | "neutral" | "primary_neutral" | "ghost" | null | undefined;
5
5
  size?: "none" | "default" | "sm" | "icon" | "icon-sm" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
7
  export type ButtonProps = AriaButtonProps & VariantProps<typeof buttonVariants> & {
@@ -1,2 +1,2 @@
1
- import{jsx as n}from"react/jsx-runtime";import{classNames as o}from"../utilities/theme.js";import"clsx";function d({className:e,...r}){return n("div",{className:o("flex flex-col p-icon border border-border rounded-lg bg-elevation-1 text-foreground",e),...r})}function s({className:e,...r}){return n("div",{className:o("flex flex-col gap-y-1 pb-icon shrink-0",e),...r})}function c({className:e,...r}){return n("h3",{className:o("heading-3 leading-none",e),...r})}function l({className:e,...r}){return n("p",{className:o("body-sm text-muted",e),...r})}function u({className:e,...r}){return n("div",{className:o("grow body",e),...r})}function f({className:e,...r}){return n("div",{className:o("flex items-center w-full pt-icon gap-2 justify-end",e),...r})}export{d as Card,u as CardContent,l as CardDescription,f as CardFooter,s as CardHeader,c as CardTitle};
1
+ import{jsx as n}from"react/jsx-runtime";import{classNames as t}from"../utilities/theme.js";import"clsx";function d({className:r,...e}){return n("div",{className:t("flex flex-col p-icon border border-border rounded-lg bg-surface-primary text-text-primary",r),...e})}function s({className:r,...e}){return n("div",{className:t("flex flex-col gap-y-1 pb-icon shrink-0",r),...e})}function c({className:r,...e}){return n("h3",{className:t("heading-3 leading-none",r),...e})}function l({className:r,...e}){return n("p",{className:t("body-sm text-muted",r),...e})}function m({className:r,...e}){return n("div",{className:t("grow body",r),...e})}function u({className:r,...e}){return n("div",{className:t("flex items-center w-full pt-icon gap-2 justify-end",r),...e})}export{d as Card,m as CardContent,l as CardDescription,u as CardFooter,s as CardHeader,c as CardTitle};
2
2
  //# sourceMappingURL=card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sources":["../../lib/components/card.tsx"],"sourcesContent":["import type * as React from 'react';\nimport { classNames } from '../utilities/theme';\n\nexport function Card({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n className={classNames(\n 'flex flex-col p-icon border border-border rounded-lg bg-elevation-1 text-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames('flex flex-col gap-y-1 pb-icon shrink-0', className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: React.ComponentProps<'h3'>) {\n return <h3 className={classNames('heading-3 leading-none', className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return <p className={classNames('body-sm text-muted', className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames('grow body', className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames('flex items-center w-full pt-icon gap-2 justify-end', className)} {...props} />;\n}\n"],"names":["Card","className","props","jsx","classNames","CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],"mappings":"wGAGO,SAASA,EAAK,CAAE,UAAAC,EAAW,GAAGC,GAAsC,CACvE,OACIC,EAAC,MAAA,CACG,UAAWC,EACP,sFACAH,CAAA,EAEH,GAAGC,CAAA,CAAA,CAGhB,CAEO,SAASG,EAAW,CAAE,UAAAJ,EAAW,GAAGC,GAAsC,CAC7E,OAAOC,EAAC,OAAI,UAAWC,EAAW,yCAA0CH,CAAS,EAAI,GAAGC,EAAO,CACvG,CAEO,SAASI,EAAU,CAAE,UAAAL,EAAW,GAAGC,GAAqC,CAC3E,OAAOC,EAAC,MAAG,UAAWC,EAAW,yBAA0BH,CAAS,EAAI,GAAGC,EAAO,CACtF,CAEO,SAASK,EAAgB,CAAE,UAAAN,EAAW,GAAGC,GAAoC,CAChF,OAAOC,EAAC,KAAE,UAAWC,EAAW,qBAAsBH,CAAS,EAAI,GAAGC,EAAO,CACjF,CAEO,SAASM,EAAY,CAAE,UAAAP,EAAW,GAAGC,GAAsC,CAC9E,OAAOC,EAAC,OAAI,UAAWC,EAAW,YAAaH,CAAS,EAAI,GAAGC,EAAO,CAC1E,CAEO,SAASO,EAAW,CAAE,UAAAR,EAAW,GAAGC,GAAsC,CAC7E,OAAOC,EAAC,OAAI,UAAWC,EAAW,qDAAsDH,CAAS,EAAI,GAAGC,EAAO,CACnH"}
1
+ {"version":3,"file":"card.js","sources":["../../lib/components/card.tsx"],"sourcesContent":["import type * as React from 'react';\nimport { classNames } from '../utilities/theme';\n\nexport function Card({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n className={classNames(\n 'flex flex-col p-icon border border-border rounded-lg bg-surface-primary text-text-primary',\n className\n )}\n {...props}\n />\n );\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames('flex flex-col gap-y-1 pb-icon shrink-0', className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: React.ComponentProps<'h3'>) {\n return <h3 className={classNames('heading-3 leading-none', className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return <p className={classNames('body-sm text-muted', className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames('grow body', className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames('flex items-center w-full pt-icon gap-2 justify-end', className)} {...props} />;\n}\n"],"names":["Card","className","props","jsx","classNames","CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],"mappings":"wGAGO,SAASA,EAAK,CAAE,UAAAC,EAAW,GAAGC,GAAsC,CACvE,OACIC,EAAC,MAAA,CACG,UAAWC,EACP,4FACAH,CAAA,EAEH,GAAGC,CAAA,CAAA,CAGhB,CAEO,SAASG,EAAW,CAAE,UAAAJ,EAAW,GAAGC,GAAsC,CAC7E,OAAOC,EAAC,OAAI,UAAWC,EAAW,yCAA0CH,CAAS,EAAI,GAAGC,EAAO,CACvG,CAEO,SAASI,EAAU,CAAE,UAAAL,EAAW,GAAGC,GAAqC,CAC3E,OAAOC,EAAC,MAAG,UAAWC,EAAW,yBAA0BH,CAAS,EAAI,GAAGC,EAAO,CACtF,CAEO,SAASK,EAAgB,CAAE,UAAAN,EAAW,GAAGC,GAAoC,CAChF,OAAOC,EAAC,KAAE,UAAWC,EAAW,qBAAsBH,CAAS,EAAI,GAAGC,EAAO,CACjF,CAEO,SAASM,EAAY,CAAE,UAAAP,EAAW,GAAGC,GAAsC,CAC9E,OAAOC,EAAC,OAAI,UAAWC,EAAW,YAAaH,CAAS,EAAI,GAAGC,EAAO,CAC1E,CAEO,SAASO,EAAW,CAAE,UAAAR,EAAW,GAAGC,GAAsC,CAC7E,OAAOC,EAAC,OAAI,UAAWC,EAAW,qDAAsDH,CAAS,EAAI,GAAGC,EAAO,CACnH"}
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as r,jsxs as l}from"react/jsx-runtime";import{ResponsiveContainer as c,BarChart as b,Bar as v,CartesianGrid as k,Legend as S,Tooltip as C,XAxis as A,YAxis as L,LineChart as $,Line as z,PieChart as K,Pie as T}from"recharts";import{formatNumber as m}from"../utilities/numbers.js";function W(t){return m(t,{notation:"compact",maximumFractionDigits:2})}function u({...t}){return r(A,{axisLine:!1,tickLine:!1,tick:{fill:"var(--color-muted-foreground)",fontSize:12},...t})}function p({...t}){return r(L,{axisLine:!1,tickLine:!1,tick:{fill:"var(--color-muted-foreground)",fontSize:12},width:48,tickFormatter:W,...t})}function h({...t}){return r(k,{vertical:!1,stroke:"var(--color-border)",strokeDasharray:"3 3",...t})}function s({...t}){return r(S,{iconSize:8,iconType:"circle",formatter:e=>r("span",{style:{color:"var(--color-muted-foreground)",fontSize:12,marginLeft:4},children:e}),wrapperStyle:{paddingTop:"1rem"},...t})}function d({...t}){return r(C,{formatter:e=>typeof e=="number"?m(e):e,cursor:{fill:"var(--color-neutral-3)",opacity:.5},contentStyle:{backgroundColor:"var(--color-elevation-1)",border:"1px solid var(--color-border)",borderRadius:"6px",boxShadow:"0 4px 12px rgba(0,0,0,0.08)",padding:"8px 12px"},labelStyle:{color:"var(--color-foreground)",fontWeight:"600",marginBottom:"4px",fontSize:12},itemStyle:{color:"var(--color-muted-foreground)",padding:"1px 0",fontSize:12},...t})}function j({className:t,data:e,config:o,...n}){return r(c,{...n,children:l($,{className:"body-sm",data:e,margin:{top:4,right:4,left:0,bottom:0},children:[r(h,{}),r(u,{dataKey:o.xAxis.toString()}),r(p,{}),r(d,{}),r(s,{iconType:"plainline"}),o.lines.map((a,i)=>r(z,{strokeWidth:2,type:"monotone",dataKey:a.toString(),stroke:`var(--color-chart-${i%5+1})`,dot:!1,activeDot:{r:4,strokeWidth:0}},a.toString()))]})})}function w({className:t,data:e,config:o,...n}){return r(c,{className:t,...n,children:l(b,{className:"body-sm",data:e,margin:{top:4,right:4,left:0,bottom:0},barCategoryGap:"30%",children:[r(h,{}),r(u,{dataKey:o.xAxis.toString()}),r(p,{}),r(d,{cursor:{fill:"var(--color-neutral-3)",opacity:.4}}),r(s,{}),o.bars.map((a,i)=>r(v,{dataKey:a.toString(),fill:`var(--color-chart-${i%5+1})`,fillOpacity:.15,stroke:`var(--color-chart-${i%5+1})`,strokeWidth:1.5,radius:[4,4,0,0]},a.toString()))]})})}function B(t){const{name:e,percent:o}=t;return`${e}: ${((typeof o=="number"?o:0)*100).toFixed(0)}%`}function D({data:t,variant:e="full",showLabels:o=!0,...n}){const a=e==="semi"?180:0,i=e==="semi"?0:360,g=e==="semi"?"100%":"50%";return r(c,{...n,children:l(K,{children:[r(d,{}),r(s,{}),r(T,{data:Object.entries(t).map(([x,y],f)=>({fill:`var(--color-chart-${f%5+1})`,fillOpacity:.75,stroke:`var(--color-chart-${f%5+1})`,strokeWidth:1.5,strokeOpacity:1,name:x,value:y})),dataKey:"value",nameKey:"name",cx:"50%",cy:g,innerRadius:"40%",paddingAngle:2,startAngle:a,endAngle:i,label:o?B:void 0,labelLine:{stroke:"var(--color-neutral-6)"},isAnimationActive:!0})]})})}export{w as Barchart,h as ChartCartesianGrid,s as ChartLegend,d as ChartTooltip,u as ChartXAxis,p as ChartYAxis,j as Linechart,D as PieChart,W as formateYAxisTick};
1
+ "use client";import{jsx as r,jsxs as l}from"react/jsx-runtime";import{ResponsiveContainer as c,BarChart as b,Bar as k,CartesianGrid as v,Legend as S,Tooltip as C,XAxis as A,YAxis as L,LineChart as $,Line as z,PieChart as K,Pie as T}from"recharts";import{formatNumber as m}from"../utilities/numbers.js";function W(t){return m(t,{notation:"compact",maximumFractionDigits:2})}function u({...t}){return r(A,{axisLine:!1,tickLine:!1,tick:{fill:"var(--color-muted-foreground)",fontSize:12},...t})}function p({...t}){return r(L,{axisLine:!1,tickLine:!1,tick:{fill:"var(--color-muted-foreground)",fontSize:12},width:48,tickFormatter:W,...t})}function h({...t}){return r(v,{vertical:!1,stroke:"var(--color-border)",strokeDasharray:"3 3",...t})}function s({...t}){return r(S,{iconSize:8,iconType:"circle",formatter:e=>r("span",{style:{color:"var(--color-muted-foreground)",fontSize:12,marginLeft:4},children:e}),wrapperStyle:{paddingTop:"1rem"},...t})}function d({...t}){return r(C,{formatter:e=>typeof e=="number"?m(e):e,cursor:{fill:"var(--color-surface-tertiary)",opacity:.5},contentStyle:{backgroundColor:"var(--color-surface-primary)",border:"1px solid var(--color-border)",borderRadius:"6px",boxShadow:"0 4px 12px rgba(0,0,0,0.08)",padding:"8px 12px"},labelStyle:{color:"var(--color-text-primary)",fontWeight:"600",marginBottom:"4px",fontSize:12},itemStyle:{color:"var(--color-muted-foreground)",padding:"1px 0",fontSize:12},...t})}function j({className:t,data:e,config:o,...n}){return r(c,{...n,children:l($,{className:"body-sm",data:e,margin:{top:4,right:4,left:0,bottom:0},children:[r(h,{}),r(u,{dataKey:o.xAxis.toString()}),r(p,{}),r(d,{}),r(s,{iconType:"plainline"}),o.lines.map((a,i)=>r(z,{strokeWidth:2,type:"monotone",dataKey:a.toString(),stroke:`var(--color-chart-${i%5+1})`,dot:!1,activeDot:{r:4,strokeWidth:0}},a.toString()))]})})}function w({className:t,data:e,config:o,...n}){return r(c,{className:t,...n,children:l(b,{className:"body-sm",data:e,margin:{top:4,right:4,left:0,bottom:0},barCategoryGap:"30%",children:[r(h,{}),r(u,{dataKey:o.xAxis.toString()}),r(p,{}),r(d,{cursor:{fill:"var(--color-surface-tertiary)",opacity:.4}}),r(s,{}),o.bars.map((a,i)=>r(k,{dataKey:a.toString(),fill:`var(--color-chart-${i%5+1})`,fillOpacity:.15,stroke:`var(--color-chart-${i%5+1})`,strokeWidth:1.5,radius:[4,4,0,0]},a.toString()))]})})}function B(t){const{name:e,percent:o}=t;return`${e}: ${((typeof o=="number"?o:0)*100).toFixed(0)}%`}function D({data:t,variant:e="full",showLabels:o=!0,...n}){const a=e==="semi"?180:0,i=e==="semi"?0:360,g=e==="semi"?"100%":"50%";return r(c,{...n,children:l(K,{children:[r(d,{}),r(s,{}),r(T,{data:Object.entries(t).map(([y,x],f)=>({fill:`var(--color-chart-${f%5+1})`,fillOpacity:.75,stroke:`var(--color-chart-${f%5+1})`,strokeWidth:1.5,strokeOpacity:1,name:y,value:x})),dataKey:"value",nameKey:"name",cx:"50%",cy:g,innerRadius:"40%",paddingAngle:2,startAngle:a,endAngle:i,label:o?B:void 0,labelLine:{stroke:"var(--color-stroke-secondary)"},isAnimationActive:!0})]})})}export{w as Barchart,h as ChartCartesianGrid,s as ChartLegend,d as ChartTooltip,u as ChartXAxis,p as ChartYAxis,j as Linechart,D as PieChart,W as formateYAxisTick};
2
2
  //# sourceMappingURL=charts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"charts.js","sources":["../../lib/components/charts.tsx"],"sourcesContent":["'use client';\nimport {\n Bar,\n BarChart,\n Line,\n LineChart,\n Pie,\n CartesianGrid as RechartsCartesianGrid,\n Legend as RechartsLegend,\n PieChart as RechartsPieChart,\n Tooltip as RechartsTooltip,\n XAxis as RechartsXAxis,\n YAxis as RechartsYAxis,\n ResponsiveContainer,\n type PieLabelRenderProps,\n} from 'recharts';\nimport { formatNumber } from '../utilities/numbers';\n\nexport function formateYAxisTick(value: number) {\n return formatNumber(value, {\n notation: 'compact',\n maximumFractionDigits: 2,\n });\n}\n\nexport function ChartXAxis({ ...props }: React.ComponentProps<typeof RechartsXAxis>) {\n return (\n <RechartsXAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: 'var(--color-muted-foreground)', fontSize: 12 }}\n {...props}\n />\n );\n}\n\nexport function ChartYAxis({ ...props }: React.ComponentProps<typeof RechartsYAxis>) {\n return (\n <RechartsYAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: 'var(--color-muted-foreground)', fontSize: 12 }}\n width={48}\n tickFormatter={formateYAxisTick}\n {...props}\n />\n );\n}\n\nexport function ChartCartesianGrid({ ...props }: React.ComponentProps<typeof RechartsCartesianGrid>) {\n return <RechartsCartesianGrid vertical={false} stroke=\"var(--color-border)\" strokeDasharray=\"3 3\" {...props} />;\n}\n\nexport function ChartLegend({ ...props }: React.ComponentProps<typeof RechartsLegend>) {\n return (\n <RechartsLegend\n iconSize={8}\n iconType=\"circle\"\n formatter={v => (\n <span style={{ color: 'var(--color-muted-foreground)', fontSize: 12, marginLeft: 4 }}>{v}</span>\n )}\n wrapperStyle={{ paddingTop: '1rem' }}\n {...props}\n />\n );\n}\n\nexport function ChartTooltip({ ...props }: React.ComponentProps<typeof RechartsTooltip>) {\n return (\n <RechartsTooltip\n formatter={v => (typeof v === 'number' ? formatNumber(v) : v)}\n cursor={{ fill: 'var(--color-neutral-3)', opacity: 0.5 }}\n contentStyle={{\n backgroundColor: 'var(--color-elevation-1)',\n border: '1px solid var(--color-border)',\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.08)',\n padding: '8px 12px',\n }}\n labelStyle={{\n color: 'var(--color-foreground)',\n fontWeight: '600',\n marginBottom: '4px',\n fontSize: 12,\n }}\n itemStyle={{\n color: 'var(--color-muted-foreground)',\n padding: '1px 0',\n fontSize: 12,\n }}\n {...props}\n />\n );\n}\n\nexport function Linechart<T extends object>({\n className,\n data,\n config,\n ...props\n}: Omit<React.ComponentProps<typeof ResponsiveContainer>, 'children'> & {\n data: T[];\n config: {\n xAxis: keyof T;\n lines: (keyof T)[];\n };\n}) {\n return (\n <ResponsiveContainer {...props}>\n <LineChart className=\"body-sm\" data={data} margin={{ top: 4, right: 4, left: 0, bottom: 0 }}>\n <ChartCartesianGrid />\n <ChartXAxis dataKey={config.xAxis.toString()} />\n <ChartYAxis />\n <ChartTooltip />\n <ChartLegend iconType=\"plainline\" />\n {config.lines.map((l, i) => (\n <Line\n key={l.toString()}\n strokeWidth={2}\n type=\"monotone\"\n dataKey={l.toString()}\n stroke={`var(--color-chart-${(i % 5) + 1})`}\n dot={false}\n activeDot={{ r: 4, strokeWidth: 0 }}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n );\n}\n\nexport function Barchart<T>({\n className,\n data,\n config,\n ...props\n}: Omit<React.ComponentProps<typeof ResponsiveContainer>, 'children'> & {\n data: T[];\n config: {\n xAxis: keyof T;\n bars: (keyof T)[];\n };\n}) {\n return (\n <ResponsiveContainer className={className} {...props}>\n <BarChart\n className=\"body-sm\"\n data={data}\n margin={{ top: 4, right: 4, left: 0, bottom: 0 }}\n barCategoryGap=\"30%\"\n >\n <ChartCartesianGrid />\n <ChartXAxis dataKey={config.xAxis.toString()} />\n <ChartYAxis />\n <ChartTooltip cursor={{ fill: 'var(--color-neutral-3)', opacity: 0.4 }} />\n <ChartLegend />\n {config.bars.map((b, i) => (\n <Bar\n key={b.toString()}\n dataKey={b.toString()}\n fill={`var(--color-chart-${(i % 5) + 1})`}\n fillOpacity={0.15}\n stroke={`var(--color-chart-${(i % 5) + 1})`}\n strokeWidth={1.5}\n radius={[4, 4, 0, 0]}\n />\n ))}\n </BarChart>\n </ResponsiveContainer>\n );\n}\n\nfunction getLabel(props: PieLabelRenderProps) {\n const { name, percent } = props;\n return `${name}: ${((typeof percent === 'number' ? percent : 0) * 100).toFixed(0)}%`;\n}\n\nexport function PieChart<T extends Record<string, number>>({\n data,\n variant = 'full',\n showLabels = true,\n ...props\n}: Omit<React.ComponentProps<typeof ResponsiveContainer>, 'children'> & {\n data: T;\n variant?: 'full' | 'semi';\n showLabels?: boolean;\n}) {\n const finalStartAngle = variant === 'semi' ? 180 : 0;\n const finalEndAngle = variant === 'semi' ? 0 : 360;\n const cy = variant === 'semi' ? '100%' : '50%';\n\n return (\n <ResponsiveContainer {...props}>\n <RechartsPieChart>\n <ChartTooltip />\n <ChartLegend />\n <Pie\n data={Object.entries(data).map(([name, value], i) => ({\n fill: `var(--color-chart-${(i % 5) + 1})`,\n fillOpacity: 0.75,\n stroke: `var(--color-chart-${(i % 5) + 1})`,\n strokeWidth: 1.5,\n strokeOpacity: 1,\n name,\n value,\n }))}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy={cy}\n innerRadius=\"40%\"\n paddingAngle={2}\n startAngle={finalStartAngle}\n endAngle={finalEndAngle}\n label={showLabels ? getLabel : undefined}\n labelLine={{ stroke: 'var(--color-neutral-6)' }}\n isAnimationActive={true}\n />\n </RechartsPieChart>\n </ResponsiveContainer>\n );\n}\n"],"names":["formateYAxisTick","value","formatNumber","ChartXAxis","props","jsx","RechartsXAxis","ChartYAxis","RechartsYAxis","ChartCartesianGrid","RechartsCartesianGrid","ChartLegend","RechartsLegend","v","ChartTooltip","RechartsTooltip","Linechart","className","data","config","ResponsiveContainer","jsxs","LineChart","l","Line","Barchart","BarChart","b","Bar","getLabel","name","percent","PieChart","variant","showLabels","finalStartAngle","finalEndAngle","cy","RechartsPieChart","Pie","i"],"mappings":"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"}
1
+ {"version":3,"file":"charts.js","sources":["../../lib/components/charts.tsx"],"sourcesContent":["'use client';\nimport {\n Bar,\n BarChart,\n Line,\n LineChart,\n Pie,\n CartesianGrid as RechartsCartesianGrid,\n Legend as RechartsLegend,\n PieChart as RechartsPieChart,\n Tooltip as RechartsTooltip,\n XAxis as RechartsXAxis,\n YAxis as RechartsYAxis,\n ResponsiveContainer,\n type PieLabelRenderProps,\n} from 'recharts';\nimport { formatNumber } from '../utilities/numbers';\n\nexport function formateYAxisTick(value: number) {\n return formatNumber(value, {\n notation: 'compact',\n maximumFractionDigits: 2,\n });\n}\n\nexport function ChartXAxis({ ...props }: React.ComponentProps<typeof RechartsXAxis>) {\n return (\n <RechartsXAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: 'var(--color-muted-foreground)', fontSize: 12 }}\n {...props}\n />\n );\n}\n\nexport function ChartYAxis({ ...props }: React.ComponentProps<typeof RechartsYAxis>) {\n return (\n <RechartsYAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: 'var(--color-muted-foreground)', fontSize: 12 }}\n width={48}\n tickFormatter={formateYAxisTick}\n {...props}\n />\n );\n}\n\nexport function ChartCartesianGrid({ ...props }: React.ComponentProps<typeof RechartsCartesianGrid>) {\n return <RechartsCartesianGrid vertical={false} stroke=\"var(--color-border)\" strokeDasharray=\"3 3\" {...props} />;\n}\n\nexport function ChartLegend({ ...props }: React.ComponentProps<typeof RechartsLegend>) {\n return (\n <RechartsLegend\n iconSize={8}\n iconType=\"circle\"\n formatter={v => (\n <span style={{ color: 'var(--color-muted-foreground)', fontSize: 12, marginLeft: 4 }}>{v}</span>\n )}\n wrapperStyle={{ paddingTop: '1rem' }}\n {...props}\n />\n );\n}\n\nexport function ChartTooltip({ ...props }: React.ComponentProps<typeof RechartsTooltip>) {\n return (\n <RechartsTooltip\n formatter={v => (typeof v === 'number' ? formatNumber(v) : v)}\n cursor={{ fill: 'var(--color-surface-tertiary)', opacity: 0.5 }}\n contentStyle={{\n backgroundColor: 'var(--color-surface-primary)',\n border: '1px solid var(--color-border)',\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.08)',\n padding: '8px 12px',\n }}\n labelStyle={{\n color: 'var(--color-text-primary)',\n fontWeight: '600',\n marginBottom: '4px',\n fontSize: 12,\n }}\n itemStyle={{\n color: 'var(--color-muted-foreground)',\n padding: '1px 0',\n fontSize: 12,\n }}\n {...props}\n />\n );\n}\n\nexport function Linechart<T extends object>({\n className,\n data,\n config,\n ...props\n}: Omit<React.ComponentProps<typeof ResponsiveContainer>, 'children'> & {\n data: T[];\n config: {\n xAxis: keyof T;\n lines: (keyof T)[];\n };\n}) {\n return (\n <ResponsiveContainer {...props}>\n <LineChart className=\"body-sm\" data={data} margin={{ top: 4, right: 4, left: 0, bottom: 0 }}>\n <ChartCartesianGrid />\n <ChartXAxis dataKey={config.xAxis.toString()} />\n <ChartYAxis />\n <ChartTooltip />\n <ChartLegend iconType=\"plainline\" />\n {config.lines.map((l, i) => (\n <Line\n key={l.toString()}\n strokeWidth={2}\n type=\"monotone\"\n dataKey={l.toString()}\n stroke={`var(--color-chart-${(i % 5) + 1})`}\n dot={false}\n activeDot={{ r: 4, strokeWidth: 0 }}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n );\n}\n\nexport function Barchart<T>({\n className,\n data,\n config,\n ...props\n}: Omit<React.ComponentProps<typeof ResponsiveContainer>, 'children'> & {\n data: T[];\n config: {\n xAxis: keyof T;\n bars: (keyof T)[];\n };\n}) {\n return (\n <ResponsiveContainer className={className} {...props}>\n <BarChart\n className=\"body-sm\"\n data={data}\n margin={{ top: 4, right: 4, left: 0, bottom: 0 }}\n barCategoryGap=\"30%\"\n >\n <ChartCartesianGrid />\n <ChartXAxis dataKey={config.xAxis.toString()} />\n <ChartYAxis />\n <ChartTooltip cursor={{ fill: 'var(--color-surface-tertiary)', opacity: 0.4 }} />\n <ChartLegend />\n {config.bars.map((b, i) => (\n <Bar\n key={b.toString()}\n dataKey={b.toString()}\n fill={`var(--color-chart-${(i % 5) + 1})`}\n fillOpacity={0.15}\n stroke={`var(--color-chart-${(i % 5) + 1})`}\n strokeWidth={1.5}\n radius={[4, 4, 0, 0]}\n />\n ))}\n </BarChart>\n </ResponsiveContainer>\n );\n}\n\nfunction getLabel(props: PieLabelRenderProps) {\n const { name, percent } = props;\n return `${name}: ${((typeof percent === 'number' ? percent : 0) * 100).toFixed(0)}%`;\n}\n\nexport function PieChart<T extends Record<string, number>>({\n data,\n variant = 'full',\n showLabels = true,\n ...props\n}: Omit<React.ComponentProps<typeof ResponsiveContainer>, 'children'> & {\n data: T;\n variant?: 'full' | 'semi';\n showLabels?: boolean;\n}) {\n const finalStartAngle = variant === 'semi' ? 180 : 0;\n const finalEndAngle = variant === 'semi' ? 0 : 360;\n const cy = variant === 'semi' ? '100%' : '50%';\n\n return (\n <ResponsiveContainer {...props}>\n <RechartsPieChart>\n <ChartTooltip />\n <ChartLegend />\n <Pie\n data={Object.entries(data).map(([name, value], i) => ({\n fill: `var(--color-chart-${(i % 5) + 1})`,\n fillOpacity: 0.75,\n stroke: `var(--color-chart-${(i % 5) + 1})`,\n strokeWidth: 1.5,\n strokeOpacity: 1,\n name,\n value,\n }))}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy={cy}\n innerRadius=\"40%\"\n paddingAngle={2}\n startAngle={finalStartAngle}\n endAngle={finalEndAngle}\n label={showLabels ? getLabel : undefined}\n labelLine={{ stroke: 'var(--color-stroke-secondary)' }}\n isAnimationActive={true}\n />\n </RechartsPieChart>\n </ResponsiveContainer>\n );\n}\n"],"names":["formateYAxisTick","value","formatNumber","ChartXAxis","props","jsx","RechartsXAxis","ChartYAxis","RechartsYAxis","ChartCartesianGrid","RechartsCartesianGrid","ChartLegend","RechartsLegend","v","ChartTooltip","RechartsTooltip","Linechart","className","data","config","ResponsiveContainer","jsxs","LineChart","l","Line","Barchart","BarChart","b","Bar","getLabel","name","percent","PieChart","variant","showLabels","finalStartAngle","finalEndAngle","cy","RechartsPieChart","Pie","i"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as e,Fragment as y,jsxs as d}from"react/jsx-runtime";import{useId as I}from"react";import{Checkbox as w,composeRenderProps as x,CheckboxGroup as B}from"react-aria-components";import{useFieldContext as S}from"../utilities/form-context.js";import{classNames as s}from"../utilities/theme.js";import{labelVariants as z,FormField as D,FormFieldLabel as j,FormFieldDescription as G}from"./form.js";import{IcMinus as R,IcCheck as q}from"./icons.js";import"@tanstack/react-form";import"clsx";import"class-variance-authority";import"./card.js";import"@icons-pack/react-simple-icons";const n="group-data-[disabled]/checkbox:cursor-not-allowed group-data-[disabled]/checkbox:opacity-50",l="group-data-[invalid]/checkbox:border-destructive",g="focus:outline-none focus-visible:outline-none",p="group-data-[selected]/checkbox:bg-primary",$="relative shrink-0 h-6 w-11 rounded-full border border-input bg-elevation-1 transition-colors duration-200",K="absolute top-1/2 -translate-y-1/2 left-0.5 h-5 w-5 rounded-full bg-background border border-input transition-transform duration-200",L="flex shrink-0 items-center bg-elevation-1 rounded-sm justify-center border border-input text-current ring-offset-background",T={sm:"size-icon",lg:"size-input"},f={sm:"size-3",lg:"size-icon"},Y=B;function V({className:o,label:t,description:r,errorMessage:u,requiredIndicator:k,variant:v="checkbox",size:i="sm",...m}){const C=I(),c=m.id||C,F=v==="switch",N=!!(t||r||u||k),b=e(w,{className:x(o,h=>s("group/checkbox cursor-pointer relative focus-ring flex items-center gap-x-2 disabled-muted",z,h)),id:c,...m,children:x(e(y,{}),(h,a)=>F?e("div",{className:s($,p,n,l,"group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive",g),children:e("div",{className:s(K,"group-data-[selected]/checkbox:translate-x-4.5",n,l)})}):d("div",{className:s(L,"group-data-[indeterminate]/checkbox:bg-primary",p,"group-data-[indeterminate]/checkbox:text-primary-foreground group-data-[selected]/checkbox:text-primary-foreground",n,l,"group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive group-data-[invalid]/checkbox:group-data-[selected]/checkbox:text-destructive-foreground",g,T[i]),children:[a.isIndeterminate&&e(R,{className:f[i]}),!a.isIndeterminate&&a.isSelected&&e(q,{className:f[i]})]}))});return N?e("div",{className:"group form-field",children:e(D,{errorMessage:u,htmlFor:c,children:d("div",{className:"flex items-start gap-1",children:[b,d("div",{className:"flex flex-col gap-1",children:[t&&e(j,{htmlFor:c,children:t}),r&&e(G,{children:r})]})]})})}):e("div",{className:"group flex",children:b})}function Z({...o}){const t=S({disabled:o.isDisabled});return e(V,{requiredIndicator:t.isRequired,isSelected:t.state.value,isDisabled:t.isSubmitting||o.isDisabled,onChange:()=>t.handleChange(!t.state.value),onBlur:t.handleBlur,...o})}export{V as Checkbox,Y as CheckboxGroup,Z as TfCheckbox};
1
+ "use client";import{jsx as e,Fragment as N,jsxs as d}from"react/jsx-runtime";import{useId as I}from"react";import{Checkbox as w,composeRenderProps as p,CheckboxGroup as B}from"react-aria-components";import{useFieldContext as S}from"../utilities/form-context.js";import{classNames as t}from"../utilities/theme.js";import{labelVariants as z,FormField as D,FormFieldLabel as j,FormFieldDescription as G}from"./form.js";import{IcMinus as R,IcCheck as q}from"./icons.js";import"@tanstack/react-form";import"clsx";import"class-variance-authority";import"./card.js";import"@icons-pack/react-simple-icons";const n="group-data-[disabled]/checkbox:cursor-not-allowed group-data-[disabled]/checkbox:opacity-50",l="group-data-[invalid]/checkbox:border-destructive",x="focus:outline-none focus-visible:outline-none",f="group-data-[selected]/checkbox:bg-primary",$="relative shrink-0 h-6 w-11 rounded-full border border-input bg-surface-primary transition-colors duration-200",K="absolute top-1/2 -translate-y-1/2 left-0.5 h-5 w-5 rounded-full bg-surface-secondary border border-input transition-transform duration-200",L="flex shrink-0 items-center bg-surface-primary rounded-sm justify-center border border-input text-current ring-offset-surface-secondary",T={sm:"size-icon",lg:"size-input"},g={sm:"size-3",lg:"size-icon"},Y=B;function V({className:s,label:r,description:o,errorMessage:u,requiredIndicator:k,variant:v="checkbox",size:i="sm",...m}){const C=I(),c=m.id||C,y=v==="switch",F=!!(r||o||u||k),b=e(w,{className:p(s,h=>t("group/checkbox cursor-pointer relative focus-ring flex items-center gap-x-2 disabled-muted",z,h)),id:c,...m,children:p(e(N,{}),(h,a)=>y?e("div",{className:t($,f,n,l,"group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive",x),children:e("div",{className:t(K,"group-data-[selected]/checkbox:translate-x-4.5",n,l)})}):d("div",{className:t(L,"group-data-[indeterminate]/checkbox:bg-primary",f,"group-data-[indeterminate]/checkbox:text-primary-foreground group-data-[selected]/checkbox:text-primary-foreground",n,l,"group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive group-data-[invalid]/checkbox:group-data-[selected]/checkbox:text-destructive-foreground",x,T[i]),children:[a.isIndeterminate&&e(R,{className:g[i]}),!a.isIndeterminate&&a.isSelected&&e(q,{className:g[i]})]}))});return F?e("div",{className:"group form-field",children:e(D,{errorMessage:u,htmlFor:c,children:d("div",{className:"flex items-start gap-1",children:[b,d("div",{className:"flex flex-col gap-1",children:[r&&e(j,{htmlFor:c,children:r}),o&&e(G,{children:o})]})]})})}):e("div",{className:"group flex",children:b})}function Z({...s}){const r=S({disabled:s.isDisabled});return e(V,{requiredIndicator:r.isRequired,isSelected:r.state.value,isDisabled:r.isSubmitting||s.isDisabled,onChange:()=>r.handleChange(!r.state.value),onBlur:r.handleBlur,...s})}export{V as Checkbox,Y as CheckboxGroup,Z as TfCheckbox};
2
2
  //# sourceMappingURL=checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","sources":["../../lib/components/checkbox.tsx"],"sourcesContent":["'use client';\nimport { useId } from 'react';\nimport {\n Checkbox as AriaCheckbox,\n CheckboxGroup as AriaCheckboxGroup,\n composeRenderProps,\n type CheckboxProps as AriaCheckboxProps,\n} from 'react-aria-components';\n\nimport { useFieldContext } from '../utilities/form-context';\nimport { classNames } from '../utilities/theme';\nimport { FormField, FormFieldLabel, FormFieldDescription, labelVariants, type FormFieldProps } from './form';\nimport { IcCheck, IcMinus } from './icons';\n\nconst disabledClasses = 'group-data-[disabled]/checkbox:cursor-not-allowed group-data-[disabled]/checkbox:opacity-50';\nconst invalidBorderClasses = 'group-data-[invalid]/checkbox:border-destructive';\nconst focusResetClasses = 'focus:outline-none focus-visible:outline-none';\nconst selectedPrimaryClasses = 'group-data-[selected]/checkbox:bg-primary';\n\nconst switchBaseClasses =\n 'relative shrink-0 h-6 w-11 rounded-full border border-input bg-elevation-1 transition-colors duration-200';\nconst switchKnobClasses =\n 'absolute top-1/2 -translate-y-1/2 left-0.5 h-5 w-5 rounded-full bg-background border border-input transition-transform duration-200';\n\nconst checkboxBaseClasses =\n 'flex shrink-0 items-center bg-elevation-1 rounded-sm justify-center border border-input text-current ring-offset-background';\n\nconst sizeClasses = {\n sm: 'size-icon',\n lg: 'size-input',\n};\n\nconst iconSizeClasses = {\n sm: 'size-3',\n lg: 'size-icon',\n};\nexport const CheckboxGroup = AriaCheckboxGroup;\ntype CheckboxProps = AriaCheckboxProps &\n FormFieldProps & {\n variant?: 'checkbox' | 'switch';\n size?: 'sm' | 'lg';\n };\nexport function Checkbox({\n className,\n label,\n description,\n errorMessage,\n requiredIndicator,\n variant = 'checkbox',\n size = 'sm',\n ...props\n}: Omit<CheckboxProps, 'children'>) {\n const generatedId = useId();\n const fieldId = props.id || generatedId;\n const isSwitch = variant === 'switch';\n const hasFormField = !!(label || description || errorMessage || requiredIndicator);\n const checkbox = (\n <AriaCheckbox\n className={composeRenderProps(className, className =>\n classNames(\n 'group/checkbox cursor-pointer relative focus-ring flex items-center gap-x-2 disabled-muted',\n labelVariants,\n className\n )\n )}\n id={fieldId}\n {...props}\n >\n {composeRenderProps(<></>, (_, renderProps) => {\n if (isSwitch) {\n return (\n <div\n className={classNames(\n switchBaseClasses,\n selectedPrimaryClasses,\n disabledClasses,\n invalidBorderClasses,\n 'group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive',\n focusResetClasses\n )}\n >\n <div\n className={classNames(\n switchKnobClasses,\n 'group-data-[selected]/checkbox:translate-x-4.5',\n disabledClasses,\n invalidBorderClasses\n )}\n />\n </div>\n );\n }\n\n return (\n <div\n className={classNames(\n checkboxBaseClasses,\n 'group-data-[indeterminate]/checkbox:bg-primary',\n selectedPrimaryClasses,\n 'group-data-[indeterminate]/checkbox:text-primary-foreground group-data-[selected]/checkbox:text-primary-foreground',\n disabledClasses,\n invalidBorderClasses,\n 'group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive group-data-[invalid]/checkbox:group-data-[selected]/checkbox:text-destructive-foreground',\n focusResetClasses,\n sizeClasses[size]\n )}\n >\n {renderProps.isIndeterminate && <IcMinus className={iconSizeClasses[size]} />}\n {!renderProps.isIndeterminate && renderProps.isSelected && (\n <IcCheck className={iconSizeClasses[size]} />\n )}\n </div>\n );\n })}\n </AriaCheckbox>\n );\n if (!hasFormField) return <div className=\"group flex\">{checkbox}</div>;\n return (\n <div className=\"group form-field\">\n <FormField {...{ errorMessage, htmlFor: fieldId }}>\n <div className=\"flex items-start gap-1\">\n {checkbox}\n <div className=\"flex flex-col gap-1\">\n {label && <FormFieldLabel htmlFor={fieldId}>{label}</FormFieldLabel>}\n {description && <FormFieldDescription>{description}</FormFieldDescription>}\n </div>\n </div>\n </FormField>\n </div>\n );\n}\n\nexport type TfCheckboxProps = Omit<React.ComponentProps<typeof Checkbox>, 'onChange' | 'onBlur' | 'isChecked'>;\nexport function TfCheckbox({ ...props }: TfCheckboxProps) {\n const field = useFieldContext<boolean>({ disabled: props.isDisabled });\n return (\n <Checkbox\n requiredIndicator={field.isRequired}\n isSelected={field.state.value}\n isDisabled={field.isSubmitting || props.isDisabled}\n onChange={() => field.handleChange(!field.state.value)}\n onBlur={field.handleBlur}\n {...props}\n />\n );\n}\n"],"names":["disabledClasses","invalidBorderClasses","focusResetClasses","selectedPrimaryClasses","switchBaseClasses","switchKnobClasses","checkboxBaseClasses","sizeClasses","iconSizeClasses","CheckboxGroup","AriaCheckboxGroup","Checkbox","className","label","description","errorMessage","requiredIndicator","variant","size","props","generatedId","useId","fieldId","isSwitch","hasFormField","checkbox","jsx","AriaCheckbox","composeRenderProps","classNames","labelVariants","Fragment","_","renderProps","jsxs","IcMinus","IcCheck","FormField","FormFieldLabel","FormFieldDescription","TfCheckbox","field","useFieldContext"],"mappings":"slBAcA,MAAMA,EAAkB,8FAClBC,EAAuB,mDACvBC,EAAoB,gDACpBC,EAAyB,4CAEzBC,EACF,4GACEC,EACF,sIAEEC,EACF,8HAEEC,EAAc,CAChB,GAAI,YACJ,GAAI,YACR,EAEMC,EAAkB,CACpB,GAAI,SACJ,GAAI,WACR,EACaC,EAAgBC,EAMtB,SAASC,EAAS,CACrB,UAAAC,EACA,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,QAAAC,EAAU,WACV,KAAAC,EAAO,KACP,GAAGC,CACP,EAAoC,CAChC,MAAMC,EAAcC,EAAA,EACdC,EAAUH,EAAM,IAAMC,EACtBG,EAAWN,IAAY,SACvBO,EAAe,CAAC,EAAEX,GAASC,GAAeC,GAAgBC,GAC1DS,EACFC,EAACC,EAAA,CACG,UAAWC,EAAmBhB,EAAWA,GACrCiB,EACI,6FACAC,EACAlB,CAAA,CACJ,EAEJ,GAAIU,EACH,GAAGH,EAEH,SAAAS,EAAmBF,EAAAK,EAAA,CAAA,CAAE,EAAK,CAACC,EAAGC,IACvBV,EAEIG,EAAC,MAAA,CACG,UAAWG,EACPzB,EACAD,EACAH,EACAC,EACA,8EACAC,CAAA,EAGJ,SAAAwB,EAAC,MAAA,CACG,UAAWG,EACPxB,EACA,iDACAL,EACAC,CAAA,CACJ,CAAA,CACJ,CAAA,EAMRiC,EAAC,MAAA,CACG,UAAWL,EACPvB,EACA,iDACAH,EACA,qHACAH,EACAC,EACA,uKACAC,EACAK,EAAYW,CAAI,CAAA,EAGnB,SAAA,CAAAe,EAAY,iBAAmBP,EAACS,EAAA,CAAQ,UAAW3B,EAAgBU,CAAI,EAAG,EAC1E,CAACe,EAAY,iBAAmBA,EAAY,cACxCG,EAAA,CAAQ,UAAW5B,EAAgBU,CAAI,CAAA,CAAG,CAAA,CAAA,CAAA,CAI1D,CAAA,CAAA,EAGT,OAAKM,EAEDE,EAAC,MAAA,CAAI,UAAU,mBACX,WAACW,EAAA,CAAgB,aAAAtB,EAAc,QAASO,EACpC,SAAAY,EAAC,MAAA,CAAI,UAAU,yBACV,SAAA,CAAAT,EACDS,EAAC,MAAA,CAAI,UAAU,sBACV,SAAA,CAAArB,GAASa,EAACY,EAAA,CAAe,QAAShB,EAAU,SAAAT,EAAM,EAClDC,GAAeY,EAACa,EAAA,CAAsB,SAAAzB,CAAA,CAAY,CAAA,CAAA,CACvD,CAAA,CAAA,CACJ,EACJ,EACJ,IAZuB,MAAA,CAAI,UAAU,aAAc,SAAAW,EAAS,CAcpE,CAGO,SAASe,EAAW,CAAE,GAAGrB,GAA0B,CACtD,MAAMsB,EAAQC,EAAyB,CAAE,SAAUvB,EAAM,WAAY,EACrE,OACIO,EAACf,EAAA,CACG,kBAAmB8B,EAAM,WACzB,WAAYA,EAAM,MAAM,MACxB,WAAYA,EAAM,cAAgBtB,EAAM,WACxC,SAAU,IAAMsB,EAAM,aAAa,CAACA,EAAM,MAAM,KAAK,EACrD,OAAQA,EAAM,WACb,GAAGtB,CAAA,CAAA,CAGhB"}
1
+ {"version":3,"file":"checkbox.js","sources":["../../lib/components/checkbox.tsx"],"sourcesContent":["'use client';\nimport { useId } from 'react';\nimport {\n Checkbox as AriaCheckbox,\n CheckboxGroup as AriaCheckboxGroup,\n composeRenderProps,\n type CheckboxProps as AriaCheckboxProps,\n} from 'react-aria-components';\n\nimport { useFieldContext } from '../utilities/form-context';\nimport { classNames } from '../utilities/theme';\nimport { FormField, FormFieldLabel, FormFieldDescription, labelVariants, type FormFieldProps } from './form';\nimport { IcCheck, IcMinus } from './icons';\n\nconst disabledClasses = 'group-data-[disabled]/checkbox:cursor-not-allowed group-data-[disabled]/checkbox:opacity-50';\nconst invalidBorderClasses = 'group-data-[invalid]/checkbox:border-destructive';\nconst focusResetClasses = 'focus:outline-none focus-visible:outline-none';\nconst selectedPrimaryClasses = 'group-data-[selected]/checkbox:bg-primary';\n\nconst switchBaseClasses =\n 'relative shrink-0 h-6 w-11 rounded-full border border-input bg-surface-primary transition-colors duration-200';\nconst switchKnobClasses =\n 'absolute top-1/2 -translate-y-1/2 left-0.5 h-5 w-5 rounded-full bg-surface-secondary border border-input transition-transform duration-200';\n\nconst checkboxBaseClasses =\n 'flex shrink-0 items-center bg-surface-primary rounded-sm justify-center border border-input text-current ring-offset-surface-secondary';\n\nconst sizeClasses = {\n sm: 'size-icon',\n lg: 'size-input',\n};\n\nconst iconSizeClasses = {\n sm: 'size-3',\n lg: 'size-icon',\n};\nexport const CheckboxGroup = AriaCheckboxGroup;\ntype CheckboxProps = AriaCheckboxProps &\n FormFieldProps & {\n variant?: 'checkbox' | 'switch';\n size?: 'sm' | 'lg';\n };\nexport function Checkbox({\n className,\n label,\n description,\n errorMessage,\n requiredIndicator,\n variant = 'checkbox',\n size = 'sm',\n ...props\n}: Omit<CheckboxProps, 'children'>) {\n const generatedId = useId();\n const fieldId = props.id || generatedId;\n const isSwitch = variant === 'switch';\n const hasFormField = !!(label || description || errorMessage || requiredIndicator);\n const checkbox = (\n <AriaCheckbox\n className={composeRenderProps(className, className =>\n classNames(\n 'group/checkbox cursor-pointer relative focus-ring flex items-center gap-x-2 disabled-muted',\n labelVariants,\n className\n )\n )}\n id={fieldId}\n {...props}\n >\n {composeRenderProps(<></>, (_, renderProps) => {\n if (isSwitch) {\n return (\n <div\n className={classNames(\n switchBaseClasses,\n selectedPrimaryClasses,\n disabledClasses,\n invalidBorderClasses,\n 'group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive',\n focusResetClasses\n )}\n >\n <div\n className={classNames(\n switchKnobClasses,\n 'group-data-[selected]/checkbox:translate-x-4.5',\n disabledClasses,\n invalidBorderClasses\n )}\n />\n </div>\n );\n }\n\n return (\n <div\n className={classNames(\n checkboxBaseClasses,\n 'group-data-[indeterminate]/checkbox:bg-primary',\n selectedPrimaryClasses,\n 'group-data-[indeterminate]/checkbox:text-primary-foreground group-data-[selected]/checkbox:text-primary-foreground',\n disabledClasses,\n invalidBorderClasses,\n 'group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive group-data-[invalid]/checkbox:group-data-[selected]/checkbox:text-destructive-foreground',\n focusResetClasses,\n sizeClasses[size]\n )}\n >\n {renderProps.isIndeterminate && <IcMinus className={iconSizeClasses[size]} />}\n {!renderProps.isIndeterminate && renderProps.isSelected && (\n <IcCheck className={iconSizeClasses[size]} />\n )}\n </div>\n );\n })}\n </AriaCheckbox>\n );\n if (!hasFormField) return <div className=\"group flex\">{checkbox}</div>;\n return (\n <div className=\"group form-field\">\n <FormField {...{ errorMessage, htmlFor: fieldId }}>\n <div className=\"flex items-start gap-1\">\n {checkbox}\n <div className=\"flex flex-col gap-1\">\n {label && <FormFieldLabel htmlFor={fieldId}>{label}</FormFieldLabel>}\n {description && <FormFieldDescription>{description}</FormFieldDescription>}\n </div>\n </div>\n </FormField>\n </div>\n );\n}\n\nexport type TfCheckboxProps = Omit<React.ComponentProps<typeof Checkbox>, 'onChange' | 'onBlur' | 'isChecked'>;\nexport function TfCheckbox({ ...props }: TfCheckboxProps) {\n const field = useFieldContext<boolean>({ disabled: props.isDisabled });\n return (\n <Checkbox\n requiredIndicator={field.isRequired}\n isSelected={field.state.value}\n isDisabled={field.isSubmitting || props.isDisabled}\n onChange={() => field.handleChange(!field.state.value)}\n onBlur={field.handleBlur}\n {...props}\n />\n );\n}\n"],"names":["disabledClasses","invalidBorderClasses","focusResetClasses","selectedPrimaryClasses","switchBaseClasses","switchKnobClasses","checkboxBaseClasses","sizeClasses","iconSizeClasses","CheckboxGroup","AriaCheckboxGroup","Checkbox","className","label","description","errorMessage","requiredIndicator","variant","size","props","generatedId","useId","fieldId","isSwitch","hasFormField","checkbox","jsx","AriaCheckbox","composeRenderProps","classNames","labelVariants","Fragment","_","renderProps","jsxs","IcMinus","IcCheck","FormField","FormFieldLabel","FormFieldDescription","TfCheckbox","field","useFieldContext"],"mappings":"slBAcA,MAAMA,EAAkB,8FAClBC,EAAuB,mDACvBC,EAAoB,gDACpBC,EAAyB,4CAEzBC,EACF,gHACEC,EACF,6IAEEC,EACF,yIAEEC,EAAc,CAChB,GAAI,YACJ,GAAI,YACR,EAEMC,EAAkB,CACpB,GAAI,SACJ,GAAI,WACR,EACaC,EAAgBC,EAMtB,SAASC,EAAS,CACrB,UAAAC,EACA,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,QAAAC,EAAU,WACV,KAAAC,EAAO,KACP,GAAGC,CACP,EAAoC,CAChC,MAAMC,EAAcC,EAAA,EACdC,EAAUH,EAAM,IAAMC,EACtBG,EAAWN,IAAY,SACvBO,EAAe,CAAC,EAAEX,GAASC,GAAeC,GAAgBC,GAC1DS,EACFC,EAACC,EAAA,CACG,UAAWC,EAAmBhB,EAAWA,GACrCiB,EACI,6FACAC,EACAlB,CAAA,CACJ,EAEJ,GAAIU,EACH,GAAGH,EAEH,SAAAS,EAAmBF,EAAAK,EAAA,CAAA,CAAE,EAAK,CAACC,EAAGC,IACvBV,EAEIG,EAAC,MAAA,CACG,UAAWG,EACPzB,EACAD,EACAH,EACAC,EACA,8EACAC,CAAA,EAGJ,SAAAwB,EAAC,MAAA,CACG,UAAWG,EACPxB,EACA,iDACAL,EACAC,CAAA,CACJ,CAAA,CACJ,CAAA,EAMRiC,EAAC,MAAA,CACG,UAAWL,EACPvB,EACA,iDACAH,EACA,qHACAH,EACAC,EACA,uKACAC,EACAK,EAAYW,CAAI,CAAA,EAGnB,SAAA,CAAAe,EAAY,iBAAmBP,EAACS,EAAA,CAAQ,UAAW3B,EAAgBU,CAAI,EAAG,EAC1E,CAACe,EAAY,iBAAmBA,EAAY,cACxCG,EAAA,CAAQ,UAAW5B,EAAgBU,CAAI,CAAA,CAAG,CAAA,CAAA,CAAA,CAI1D,CAAA,CAAA,EAGT,OAAKM,EAEDE,EAAC,MAAA,CAAI,UAAU,mBACX,WAACW,EAAA,CAAgB,aAAAtB,EAAc,QAASO,EACpC,SAAAY,EAAC,MAAA,CAAI,UAAU,yBACV,SAAA,CAAAT,EACDS,EAAC,MAAA,CAAI,UAAU,sBACV,SAAA,CAAArB,GAASa,EAACY,EAAA,CAAe,QAAShB,EAAU,SAAAT,EAAM,EAClDC,GAAeY,EAACa,EAAA,CAAsB,SAAAzB,CAAA,CAAY,CAAA,CAAA,CACvD,CAAA,CAAA,CACJ,EACJ,EACJ,IAZuB,MAAA,CAAI,UAAU,aAAc,SAAAW,EAAS,CAcpE,CAGO,SAASe,EAAW,CAAE,GAAGrB,GAA0B,CACtD,MAAMsB,EAAQC,EAAyB,CAAE,SAAUvB,EAAM,WAAY,EACrE,OACIO,EAACf,EAAA,CACG,kBAAmB8B,EAAM,WACzB,WAAYA,EAAM,MAAM,MACxB,WAAYA,EAAM,cAAgBtB,EAAM,WACxC,SAAU,IAAMsB,EAAM,aAAa,CAACA,EAAM,MAAM,KAAK,EACrD,OAAQA,EAAM,WACb,GAAGtB,CAAA,CAAA,CAGhB"}
@@ -1,2 +1,2 @@
1
- import{jsxs as i,jsx as e}from"react/jsx-runtime";import{classNames as l}from"../utilities/theme.js";import{CopyButton as m}from"./copy-button.js";import"clsx";import"react";import"./button.js";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"./icons.js";import"@icons-pack/react-simple-icons";import"./toast.js";import"react-dom";import"./alert.js";function j({code:n,fileName:t,copyText:o,variant:r="block",className:s,...a}){const d=!!t||r==="block"&&!!o;return i("div",{className:l("rounded-md border border-border bg-elevation-1 text-sm max-h-[90vh]",s),...a,children:[d&&i("div",{className:l("flex justify-between text-muted body-sm p-icon border-b border-border"),children:[e("div",{className:"min-w-0 h-full flex items-center",children:t}),r==="block"&&o&&e("div",{className:"flex items-start",children:e(m,{label:null,textToCopy:o,variant:"ghost",size:"icon-sm","aria-label":"Copy code"})})]}),i("div",{className:"relative flex items-center",children:[r==="inline"&&o&&e("div",{className:"absolute top-0 right-0 rounded-md flex items-start pt-icon pl-14 pr-icon bg-gradient-to-r from-transparent via-elevation-1 to-elevation-1",children:e(m,{label:null,textToCopy:o,variant:"ghost",size:"icon-sm","aria-label":"Copy code"})}),e("pre",{className:l("flex p-icon overflow-auto w-full max-h-96",r==="inline"&&o&&"pr-20"),children:e("code",{dangerouslySetInnerHTML:{__html:n}})})]})]})}export{j as CodeBlock};
1
+ import{jsxs as i,jsx as e}from"react/jsx-runtime";import{classNames as l}from"../utilities/theme.js";import{CopyButton as m}from"./copy-button.js";import"clsx";import"react";import"./button.js";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"./icons.js";import"@icons-pack/react-simple-icons";import"./toast.js";import"react-dom";import"./alert.js";function B({code:s,fileName:t,copyText:r,variant:o="block",className:a,...n}){const d=!!t||o==="block"&&!!r;return i("div",{className:l("rounded-md border border-border bg-surface-primary text-sm max-h-[90vh]",a),...n,children:[d&&i("div",{className:l("flex justify-between text-muted body-sm p-icon border-b border-border"),children:[e("div",{className:"min-w-0 h-full flex items-center",children:t}),o==="block"&&r&&e("div",{className:"flex items-start",children:e(m,{label:null,textToCopy:r,variant:"ghost",size:"icon-sm","aria-label":"Copy code"})})]}),i("div",{className:"relative flex items-center",children:[o==="inline"&&r&&e("div",{className:"absolute top-0 right-0 rounded-md flex items-start pt-icon pl-14 pr-icon bg-gradient-to-r from-transparent via-surface-primary to-surface-primary",children:e(m,{label:null,textToCopy:r,variant:"ghost",size:"icon-sm","aria-label":"Copy code"})}),e("pre",{className:l("flex p-icon overflow-auto w-full max-h-96",o==="inline"&&r&&"pr-20"),children:e("code",{dangerouslySetInnerHTML:{__html:s}})})]})]})}export{B as CodeBlock};
2
2
  //# sourceMappingURL=code-block.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-block.js","sources":["../../lib/components/code-block.tsx"],"sourcesContent":["import React from 'react';\nimport { classNames } from '../utilities/theme';\nimport { CopyButton } from './copy-button';\n\nexport interface CodeBlockProps extends React.ComponentProps<'div'> {\n code: string;\n fileName?: string | React.ReactNode;\n copyText?: string;\n variant?: 'inline' | 'block';\n}\n\nexport function CodeBlock({ code, fileName, copyText, variant = 'block', className, ...props }: CodeBlockProps) {\n const showHeader = Boolean(fileName) || (variant === 'block' && Boolean(copyText));\n\n return (\n <div\n className={classNames('rounded-md border border-border bg-elevation-1 text-sm max-h-[90vh]', className)}\n {...props}\n >\n {showHeader && (\n <div className={classNames('flex justify-between text-muted body-sm p-icon border-b border-border')}>\n <div className=\"min-w-0 h-full flex items-center\">{fileName}</div>\n {variant === 'block' && copyText && (\n <div className=\"flex items-start\">\n <CopyButton\n label={null}\n textToCopy={copyText}\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Copy code\"\n />\n </div>\n )}\n </div>\n )}\n\n <div className=\"relative flex items-center\">\n {variant === 'inline' && copyText && (\n <div className=\"absolute top-0 right-0 rounded-md flex items-start pt-icon pl-14 pr-icon bg-gradient-to-r from-transparent via-elevation-1 to-elevation-1\">\n <CopyButton\n label={null}\n textToCopy={copyText}\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Copy code\"\n />\n </div>\n )}\n <pre\n className={classNames(\n 'flex p-icon overflow-auto w-full max-h-96',\n variant === 'inline' && copyText && 'pr-20'\n )}\n >\n <code dangerouslySetInnerHTML={{ __html: code }} />\n </pre>\n </div>\n </div>\n );\n}\n"],"names":["CodeBlock","code","fileName","copyText","variant","className","props","showHeader","jsxs","classNames","jsx","CopyButton"],"mappings":"uYAWO,SAASA,EAAU,CAAE,KAAAC,EAAM,SAAAC,EAAU,SAAAC,EAAU,QAAAC,EAAU,QAAS,UAAAC,EAAW,GAAGC,GAAyB,CAC5G,MAAMC,EAAa,EAAQL,GAAcE,IAAY,SAAW,EAAQD,EAExE,OACIK,EAAC,MAAA,CACG,UAAWC,EAAW,sEAAuEJ,CAAS,EACrG,GAAGC,EAEH,SAAA,CAAAC,GACGC,EAAC,MAAA,CAAI,UAAWC,EAAW,uEAAuE,EAC9F,SAAA,CAAAC,EAAC,MAAA,CAAI,UAAU,mCAAoC,SAAAR,EAAS,EAC3DE,IAAY,SAAWD,GACpBO,EAAC,MAAA,CAAI,UAAU,mBACX,SAAAA,EAACC,EAAA,CACG,MAAO,KACP,WAAYR,EACZ,QAAQ,QACR,KAAK,UACL,aAAW,WAAA,CAAA,CACf,CACJ,CAAA,EAER,EAGJK,EAAC,MAAA,CAAI,UAAU,6BACV,SAAA,CAAAJ,IAAY,UAAYD,GACrBO,EAAC,MAAA,CAAI,UAAU,4IACX,SAAAA,EAACC,EAAA,CACG,MAAO,KACP,WAAYR,EACZ,QAAQ,QACR,KAAK,UACL,aAAW,WAAA,CAAA,EAEnB,EAEJO,EAAC,MAAA,CACG,UAAWD,EACP,4CACAL,IAAY,UAAYD,GAAY,OAAA,EAGxC,WAAC,OAAA,CAAK,wBAAyB,CAAE,OAAQF,EAAK,CAAG,CAAA,CAAA,CACrD,CAAA,CACJ,CAAA,CAAA,CAAA,CAGZ"}
1
+ {"version":3,"file":"code-block.js","sources":["../../lib/components/code-block.tsx"],"sourcesContent":["import React from 'react';\nimport { classNames } from '../utilities/theme';\nimport { CopyButton } from './copy-button';\n\nexport interface CodeBlockProps extends React.ComponentProps<'div'> {\n code: string;\n fileName?: string | React.ReactNode;\n copyText?: string;\n variant?: 'inline' | 'block';\n}\n\nexport function CodeBlock({ code, fileName, copyText, variant = 'block', className, ...props }: CodeBlockProps) {\n const showHeader = Boolean(fileName) || (variant === 'block' && Boolean(copyText));\n\n return (\n <div\n className={classNames('rounded-md border border-border bg-surface-primary text-sm max-h-[90vh]', className)}\n {...props}\n >\n {showHeader && (\n <div className={classNames('flex justify-between text-muted body-sm p-icon border-b border-border')}>\n <div className=\"min-w-0 h-full flex items-center\">{fileName}</div>\n {variant === 'block' && copyText && (\n <div className=\"flex items-start\">\n <CopyButton\n label={null}\n textToCopy={copyText}\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Copy code\"\n />\n </div>\n )}\n </div>\n )}\n\n <div className=\"relative flex items-center\">\n {variant === 'inline' && copyText && (\n <div className=\"absolute top-0 right-0 rounded-md flex items-start pt-icon pl-14 pr-icon bg-gradient-to-r from-transparent via-surface-primary to-surface-primary\">\n <CopyButton\n label={null}\n textToCopy={copyText}\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Copy code\"\n />\n </div>\n )}\n <pre\n className={classNames(\n 'flex p-icon overflow-auto w-full max-h-96',\n variant === 'inline' && copyText && 'pr-20'\n )}\n >\n <code dangerouslySetInnerHTML={{ __html: code }} />\n </pre>\n </div>\n </div>\n );\n}\n"],"names":["CodeBlock","code","fileName","copyText","variant","className","props","showHeader","jsxs","classNames","jsx","CopyButton"],"mappings":"uYAWO,SAASA,EAAU,CAAE,KAAAC,EAAM,SAAAC,EAAU,SAAAC,EAAU,QAAAC,EAAU,QAAS,UAAAC,EAAW,GAAGC,GAAyB,CAC5G,MAAMC,EAAa,EAAQL,GAAcE,IAAY,SAAW,EAAQD,EAExE,OACIK,EAAC,MAAA,CACG,UAAWC,EAAW,0EAA2EJ,CAAS,EACzG,GAAGC,EAEH,SAAA,CAAAC,GACGC,EAAC,MAAA,CAAI,UAAWC,EAAW,uEAAuE,EAC9F,SAAA,CAAAC,EAAC,MAAA,CAAI,UAAU,mCAAoC,SAAAR,EAAS,EAC3DE,IAAY,SAAWD,GACpBO,EAAC,MAAA,CAAI,UAAU,mBACX,SAAAA,EAACC,EAAA,CACG,MAAO,KACP,WAAYR,EACZ,QAAQ,QACR,KAAK,UACL,aAAW,WAAA,CAAA,CACf,CACJ,CAAA,EAER,EAGJK,EAAC,MAAA,CAAI,UAAU,6BACV,SAAA,CAAAJ,IAAY,UAAYD,GACrBO,EAAC,MAAA,CAAI,UAAU,oJACX,SAAAA,EAACC,EAAA,CACG,MAAO,KACP,WAAYR,EACZ,QAAQ,QACR,KAAK,UACL,aAAW,WAAA,CAAA,EAEnB,EAEJO,EAAC,MAAA,CACG,UAAWD,EACP,4CACAL,IAAY,UAAYD,GAAY,OAAA,EAGxC,WAAC,OAAA,CAAK,wBAAyB,CAAE,OAAQF,EAAK,CAAG,CAAA,CAAA,CACrD,CAAA,CACJ,CAAA,CAAA,CAAA,CAGZ"}
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as t,Fragment as D,jsxs as g}from"react/jsx-runtime";import{parseAbsolute as Y,getLocalTimeZone as J}from"@internationalized/date";import{createContext as We,useContext as et,useState as O,useMemo as W,useEffect as ie,useRef as Te,Fragment as tt}from"react";import{Pressable as De}from"react-aria-components";import{Button as S}from"./button.js";import{useSensors as nt,useSensor as Se,PointerSensor as rt,KeyboardSensor as at,DndContext as it,closestCenter as ot,DragOverlay as st}from"@dnd-kit/core";import{sortableKeyboardCoordinates as lt,SortableContext as ct,verticalListSortingStrategy as ut,arrayMove as dt,useSortable as mt}from"@dnd-kit/sortable";import{CSS as gt}from"@dnd-kit/utilities";import{useQuery as pt,useInfiniteQuery as ft}from"@tanstack/react-query";import{createColumnHelper as Oe,useReactTable as bt,getCoreRowModel as ht,flexRender as re}from"@tanstack/react-table";import{useLocalStorage as ee}from"@uidotdev/usehooks";import{merge as vt}from"lodash-es";import{Badge as xe}from"./badge.js";import{DatePicker as te}from"./date-picker.js";import{EasyMenu as L,MenuItem as M,MenuTrigger as yt,MenuPopover as St,MenuHeader as xt,Menu as wt}from"./menu.js";import{MultiSelect as Nt}from"./multi-select.js";import{NumberField as Ct}from"./numberfield.js";import{PopoverTrigger as Pt,Popover as It}from"./popover.js";import{SelectTrigger as Ft}from"./select.js";import{TextField as At}from"./textfield.js";import{formatDate as k}from"../utilities/date.js";import{useProjectName as oe,useResourceFormatter as H,ALL_OS as Tt}from"../utilities/resources.js";import{classNames as x}from"../utilities/theme.js";import{ControlledDialogProvider as Dt,useControlledDialog as se,DialogHeader as Ot,DialogTitle as Mt,DialogBody as zt,DialogFooter as Rt}from"./dialog.js";import{IcRefresh as jt,IcMenu as _t,IcLayoutGrid as Lt,IcColumns as $t,IcGrip as Et,IcFirst as qt,IcLeft as Vt,IcRight as kt,IcLast as Ht,IcMoreVertical as Bt,IcInfo as Kt,IcSortAsc as Qt,IcSortDesc as Gt,IcSortNone as Ut,IcCheck as ne,IcMinus as Zt,IcAccount as Xt,IcLicense as Yt,IcDate as Jt,IcFile as Wt,IcFilter as le,IcClose as Me}from"./icons.js";import{MultipleIdSearchInput as en}from"./id-search.js";import{useIsMobile as B}from"../utilities/use-mobile.js";import{Loader as ze}from"./loader.js";import{SearchField as tn}from"./searchfield.js";import{Table as nn,TableHeader as rn,TableRow as we,TableHead as an,TableBody as on,TableCell as sn}from"./table.js";import{CountryName as ln}from"../utilities/countries.js";import{Duration as cn}from"../utilities/duration.js";import{formatDays as un,formatFilesize as dn,formatNumber as mn}from"../utilities/numbers.js";import{Checkbox as Ne}from"./checkbox.js";import{TooltipTrigger as gn,Tooltip as pn}from"./tooltip.js";import{getSubscriptionStartTriggerLabel as fn,ALL_LICENSE_TYPES as bn}from"./select-options.js";import{useCtxClient as hn}from"../utilities/ctx-client.js";import{ProgressBar as vn}from"./progress-bar.js";import{TagGroup as yn,Tag as Sn}from"./tag-group.js";import"class-variance-authority";import"clsx";import"@icons-pack/react-simple-icons";import"./calendar.js";import"./form.js";import"./card.js";import"./datefield.js";import"../utilities/form.js";import"../utilities/form-context.js";import"@tanstack/react-form";import"./list-box.js";import"./kbd.js";import"../utilities/string.js";import"../utilities/empty-option.js";function xn(e){return e?e.desc?`-${e.id}`:`+${e.id}`:"-createdAt"}const Re=Oe(),wn=[Re.accessor("checkbox",{header:({table:e})=>t(Ne,{isIndeterminate:e.getIsSomeRowsSelected()&&!e.getIsAllPageRowsSelected(),isSelected:e.getIsAllPageRowsSelected()||e.getIsSomePageRowsSelected(),onChange:()=>e.toggleAllPageRowsSelected(),"aria-label":"Select all",size:"sm"}),cell:({row:e})=>t(Ne,{isSelected:e.getIsSelected(),onChange:()=>e.toggleSelected(),"aria-label":"Select row",size:"sm"}),enableSorting:!1,enableHiding:!1})],F="TableActions";function Nn(e){return e.length===0?[]:[Re.accessor(F,{header:"Actions",id:F,enableHiding:!1,cell:({row:a})=>t(zn,{label:t(Bt,{className:"text-icon-primary"}),data:a.original,items:e}),enableSorting:!1})]}function Vr(){return Oe()}function kr({path:e,pathParameters:a,queryParameters:n,columns:s,filterConfig:c,columnsToHideByDefault:i={},allowSelection:r=!1,allowToolbar:d=!0,initialFilters:l=[],previewFilters:o,tableActions:m,Card:b,onRowNavigate:y,disableTableView:h,hideViewToggle:N,include:C}){const[A,$]=O({pagination:{pageIndex:0,pageSize:20},sorting:[]}),{sorting:z,pagination:p}=A,[v,K]=O(""),[ue,de]=O({}),[Q,qe]=O(l),G=W(()=>Q.filter(u=>u.active!==!1).map(u=>{if(u.type==="derived-select"){const I=c[u.property];return I?.type==="derived-select"?I.toApiQuery(String(u.value??"")):{}}const f=u.value instanceof Set?Array.from(u.value):u.value;return u.needOperator===!1?{[u.property]:Array.isArray(f)?f.join(","):f}:u.operator==="between"&&Array.isArray(f)&&f.length===2?{[u.property]:{gte:f[0],lte:f[1]}}:Array.isArray(f)?{[u.property]:{[u.operator]:f.join(",")}}:{[u.property]:{[u.operator]:f}}}).reduce((u,f)=>vt(u,f),{}),[Q,c]),E=C?.length?C.join(","):void 0,q={...n,...G,limit:p.pageSize,sort:xn(z[0]),search:v,...E?{include:E}:{}},Ve=hn(),ke=["get",e,{...q,page:p.pageIndex+1},"table"],He=["get",e,q,"card"],U=`${e}_ctx`,[me,ge]=ee(`${U}_column_order_preference`,[]),[pe,Be]=ee(`${U}_column_visibility_preference`,{id:!1,...i}),[Ke,Qe]=ee(`${U}_view_mode_preference`,h?"card":"table"),Ge=B(),T=h||Ge&&b?"card":Ke,Z=u=>{$(f=>({...f,...u}))};async function fe(u){const f=await Ve.GET(e,{params:{query:{...n,page:u,limit:p.pageSize,sort:q.sort,search:q.search,...E?{include:E}:{},...G},path:a}});return{data:f.data??[],total:Number.parseInt(f.response.headers.get("Pagination-Count")||"0"),nextPage:u+1}}const j=pt({queryKey:ke,enabled:T==="table",queryFn:()=>fe(p.pageIndex+1),placeholderData:u=>u}),P=ft({queryKey:He,enabled:T==="card",initialPageParam:1,queryFn:({pageParam:u})=>fe(u),getNextPageParam:(u,f)=>f.flatMap(V=>V.data).length<u.total?u.nextPage:void 0}),be=W(()=>T==="table"?j.data?.data??[]:P.data?.pages.flatMap(u=>u.data)??[],[T,j.data,P.data]),he=W(()=>T==="table"?j.data?.total??0:P.data?.pages[0]?.total??0,[T,j.data,P.data]),ve=T==="table"?j:{...P,data:{data:be,total:he},isLoading:P.isLoading,isFetching:P.isFetching,isError:P.isError,error:P.error,refetch:P.refetch},Ue=m.filter(ce),Ze=[...r?wn:[],...s,...Nn(Ue??[])];function Xe(u){return typeof u=="function"}function _(u,f){return Xe(u)?u(f):u}const ye=bt({data:be,columns:Ze,getCoreRowModel:ht(),rowCount:he,manualPagination:!0,onPaginationChange:u=>{Z({pagination:_(u,p)})},manualSorting:!0,onSortingChange:u=>{de({}),Z({sorting:[..._(u,z)]})},manualFiltering:!0,onColumnVisibilityChange:u=>{Be(_(u,pe))},onRowSelectionChange:u=>{de(_(u,ue))},onColumnOrderChange:u=>{ge(_(u,me))},state:{sorting:z,columnVisibility:pe,pagination:p,rowSelection:ue,columnOrder:me},meta:{refetch:ve.refetch}});return ie(()=>{const u=ye.getAllFlatColumns().map(I=>I.id),f=u.filter(I=>I!=="checkbox"&&I!==F);ge(I=>{const V=I.filter(X=>f.includes(X)),Ye=f.filter(X=>!I.includes(X)),Je=V.length>0?[...V,...Ye]:f;return[...u.includes("checkbox")?["checkbox"]:[],...Je,...u.includes(F)?[F]:[]]})},[]),{tableState:A,updateTableState:Z,query:ve,setSearchQuery:K,searchQuery:v,tanTable:ye,mergedFilters:G,filters:Q,setFilters:qe,filterConfig:c,tableActions:m,pathParameters:a,queryParameters:n,viewMode:T,setViewMode:Qe,Card:b,allowSelection:r,allowToolbar:d,previewFilters:o,infiniteQuery:P,disableTableView:h,hideViewToggle:N,onRowNavigate:y}}const je=We(null);function w(){const e=et(je);if(!e)throw Error("DataTable should be used within DataTableProvider.");return e}function Hr({children:e,...a}){return t(je.Provider,{value:a,children:e})}function Cn(){const{query:e}=w();return e.isFetching?null:e.isError?g("span",{className:"flex gap-3 items-center",children:[t(Kt,{className:"text-icon-primary"}),t("span",{children:e.error?.message})]}):e.data?.data?.length===0?t(D,{children:"No results found."}):t(D,{children:"Unknown error. Please contact customer support."})}function Pn({cardGridClassName:e}){const{query:a,tanTable:n,viewMode:s,tableActions:c,Card:i}=w(),r=c.filter(ce),d=s==="card"&&!!i;return a.isLoading?t("div",{className:"body-sm flex items-center justify-center min-h-32",children:t(ze,{})}):n.getRowModel().rows.length===0?t("div",{className:"body-sm flex items-center justify-center min-h-32 text-muted",children:t(Cn,{})}):d?t(In,{Card:i,actions:r,className:e}):t(Mn,{className:"w-full"})}function Br({className:e,cardGridClassName:a,...n}){const{viewMode:s,Card:c,allowToolbar:i}=w(),r=s==="card"&&!!c;return t(D,{children:g(Dt,{children:[i&&t(Dn,{}),g("section",{...n,className:x("z-20 flex flex-col",r?"":"border rounded-lg",e),children:[t("div",{className:"w-full overflow-auto relative rounded-lg [scrollbar-width:none]",tabIndex:0,children:t(Pn,{cardGridClassName:a})}),!r&&g("div",{className:"flex w-full justify-between border-t gap-icon py-2 px-icon bg-elevation-mid rounded-b-lg overflow-x-auto",children:[g("div",{className:"flex gap-icon",children:[t(Fn,{}),t(Tn,{})]}),t(An,{})]})]})]})})}function In({Card:e,actions:a,className:n,...s}){const{tanTable:c,allowSelection:i}=w(),{infiniteQuery:r}=w(),d=Te(null);return ie(()=>{const l=d.current;if(!l)return;const o=new IntersectionObserver(m=>{m[0].isIntersecting&&r.hasNextPage&&!r.isFetchingNextPage&&r.fetchNextPage()},{threshold:.1});return o.observe(l),()=>o.disconnect()},[r.hasNextPage,r.isFetchingNextPage]),g("div",{...s,className:x(n,"grid grid-cols-1 lg:grid-cols-2 gap-icon pb-input"),children:[c.getRowModel().rows.map((l,o)=>{const m={isSelected:l.getIsSelected(),onToggle:()=>l.toggleSelected(),allowSelection:i};return t(tt,{children:e(l.original,a,m,o)},l.id)}),t("div",{ref:d,className:"col-span-full h-4 flex items-center justify-center",children:r.isFetchingNextPage&&t(ze,{})})]})}function Fn(){if(oe()==="customer-portal")return null;const{tanTable:a}=w(),[n,s]=O(null),c=H(),i=nt(Se(rt),Se(at,{coordinateGetter:lt}));return t(it,{sensors:i,collisionDetection:ot,onDragStart:d=>{const{active:l}=d;s(l.id.toString())},onDragEnd:d=>{const{active:l,over:o}=d;if(o&&l.id!==o.id){const m=a.getState().columnOrder,b=m.indexOf(l.id.toString()),y=m.indexOf(o.id.toString());a.setColumnOrder([...dt(m,b,y)])}s(null)},children:g(ct,{items:a.getState().columnOrder,strategy:ut,children:[g(L,{label:g(D,{children:[t($t,{className:"inline align-bottom me-1 text-icon-primary"}),"Columns"]}),selectionMode:"multiple",size:"sm",items:a.getAllFlatColumns(),selectedKeys:a.getVisibleFlatColumns().map(d=>d.id),children:[t(M,{onAction:()=>a.toggleAllColumnsVisible(),className:"italic",children:"(select all)"}),a.getState().columnOrder.map(d=>{const l=a.getAllFlatColumns().find(o=>o.id===d);return!l||l.id==="checkbox"||l.id===F?null:t(r,{column:l},l.id)})]}),t(st,{children:n?t("div",{className:"opacity-70 border-2 border-primary",children:c(n)}):null})]})});function r({column:d}){const{attributes:l,listeners:o,setNodeRef:m,transform:b,transition:y}=mt({id:d.id}),h={transform:gt.Transform.toString(b),transition:y,zIndex:"999"};return g(M,{ref:m,style:h,...l,id:d.id,onAction:()=>d.toggleVisibility(),isDisabled:!d.getCanHide(),className:"flex items-center",children:[t(Et,{...o,className:"size-icon cursor-grab text-icon-primary"}),ae(d),d.getIsSorted()&&t(_e,{className:"size-icon",direction:d.getIsSorted()})]})}}function An(){const{tanTable:e}=w(),a=e.getRowCount();return g("div",{className:"flex items-center gap-2",children:[t("span",{className:"whitespace-nowrap body-sm text-muted",children:`${e.getState().pagination.pageIndex*e.getState().pagination.pageSize+1} - ${Math.min((e.getState().pagination.pageIndex+1)*e.getState().pagination.pageSize,a)} of ${a?.toLocaleString()}`}),(e.getCanNextPage()||e.getCanPreviousPage())&&g(D,{children:[t(S,{"aria-label":"First page",onPress:()=>e.firstPage(),isDisabled:!e.getCanPreviousPage(),variant:"neutral",size:"icon-sm",children:t(qt,{})}),t(S,{"aria-label":"Previous page",onPress:()=>e.previousPage(),isDisabled:!e.getCanPreviousPage(),variant:"neutral",size:"icon-sm",children:t(Vt,{})}),t(S,{"aria-label":"Next page",onPress:()=>e.nextPage(),isDisabled:!e.getCanNextPage(),variant:"neutral",size:"icon-sm",children:t(kt,{})}),t(S,{"aria-label":"Last page",onClick:()=>e.lastPage(),isDisabled:!e.getCanNextPage(),variant:"neutral",size:"icon-sm",children:t(Ht,{})})]})]})}function Tn(){if(oe()==="customer-portal")return null;const{tanTable:a}=w(),n=[10,20,30,40,50];return t(L,{label:a.getState().pagination.pageSize.toString(),selectionMode:"single",size:"sm",selectedKeys:[a.getState().pagination.pageSize.toString()],items:n.map(s=>({id:s.toString(),value:s})),children:s=>t(M,{onAction:()=>a.setPageSize(s.value),children:s.value})})}function Dn(){const{query:e,tanTable:a,searchQuery:n,setSearchQuery:s,tableActions:c,viewMode:i,setViewMode:r,Card:d,previewFilters:l,disableTableView:o,hideViewToggle:m}=w(),b=a.getSelectedRowModel().rows.length>0,y=B(),h=c.filter(N=>N.resourceType!=="single").filter(N=>N.resourceType==="multiple"===b);return g("section",{className:"flex justify-between my-0 mb-icon gap-icon overflow-x-auto py-1",children:[g("div",{className:x("flex gap-icon max-md:min-w-0 max-md:flex-1"),children:[t(S,{"aria-label":"Refresh",isPending:e.isFetching,onClick:()=>e.refetch(),variant:"neutral",size:"icon",className:x("max-md:shrink-0"),children:t(jt,{})}),t(tn,{value:n,onChange:s,className:x("max-md:min-w-0 max-md:flex-1")}),t(qn,{previewFilters:l,className:x("max-md:shrink-0")})]}),!y&&g("div",{className:"flex gap-icon",children:[t(Fe,{items:h,isFetching:e.isFetching}),d&&!o&&!m&&g("div",{className:"flex gap-1 bg-elevation-1 rounded-md overflow-hidden",children:[t(S,{variant:i==="table"?"primary":"neutral",size:"icon",onPress:()=>r("table"),"aria-label":"Table view",className:"border-none",children:t(_t,{})}),t(S,{variant:i==="card"?"primary":"neutral",size:"icon",onPress:()=>r("card"),"aria-label":"Card view",className:"border-none",children:t(Lt,{})})]})]}),y&&h.length>0&&t("div",{className:"fixed inset-x-0 bottom-0 z-30 flex gap-icon border-t bg-elevation-1 p-icon",children:t(Fe,{items:h,isFetching:e.isFetching,buttonClassName:"flex-1 justify-center"})})]})}function _e({direction:e,...a}){return e==="asc"?t(Qt,{className:"size-3.5",...a}):e==="desc"?t(Gt,{className:"size-3.5",...a}):t(Ut,{className:"size-3.5",...a})}function ae(e){const a=H(),n=e.columnDef.header;return typeof n=="string"?n:a(e.id)}function On(e){const a=e.column.columnDef.meta?.displayType,n=e.getValue();if(n==null)return null;switch(a){case"date":return t("span",{className:"tabular-nums",children:k(n)});case"number":return t("span",{className:"block text-right tabular-nums",children:mn(n)});case"boolean":return t(xe,{variant:n?"success":"destructive",className:"capitalize",children:String(n)});case"badge":return t(xe,{children:String(n)});case"tags":let s=Array.isArray(n)?n:[String(n)];return t(yn,{items:s.map(r=>({id:r,name:r})),className:"!flex-nowrap",children:r=>t(Sn,{children:r.name})});case"progressBar":const[c,i]=n;return t(vn,{meterClassName:"w-16",label:`${c}/${i}`,minValue:0,maxValue:i,value:c});case"country":return t(ln,{value:n});case"enum":return t("span",{className:"uppercase w-full",children:String(n)});case"fileSize":return dn(n);case"days":return un(n);case"os":return Tt[n]??n;case"licenseType":return bn[n]??n;case"subscriptionInterval":return cn.formatISODuration(n);case"subscriptionStartTrigger":return fn(n);default:return String(n)}}function Ce({header:e}){const a=e.column.columnDef.header;return typeof a=="string"||!a?ae(e.column):typeof a=="function"?typeof a(e.getContext())=="string"?ae(e.column):re(a,e.getContext()):re(a,e.getContext())}function Mn({className:e}){const{tanTable:a,onRowNavigate:n}=w(),s=(c,i,r="z-50")=>x("text-left body-sm font-medium whitespace-nowrap",c&&`sticky right-0 ${r} text-center justify-center`,i);return g(nn,{className:x("table-auto border-0 rounded-lg",e),children:[t(rn,{className:"sticky top-0 z-10 rounded-lg border-stroke-secondary!",children:a.getHeaderGroups().map(c=>t(we,{className:"border-stroke-secondary!",children:c.headers.map(i=>g(an,{scope:"col",colSpan:i.colSpan,className:s(i.id===F,"bg-surface-secondary"),children:[!i.column.getCanSort()&&!i.isPlaceholder&&t("div",{className:x("w-full flex items-center gap-1 text-xs uppercase font-semibold text-text-secondary",i.id===F?"justify-center":"justify-start"),children:t(Ce,{header:i})}),i.column.getCanSort()&&g(S,{variant:"ghost",size:"none",className:x("w-full p-1 rounded-md uppercase text-text-secondary text-xs font-semibold",i.id===F?"justify-center":"justify-start",i.column.getIsSorted()?"text-primary":""),onPress:i.column.getToggleSortingHandler(),children:[t("span",{children:t(Ce,{header:i})}),i.column.getIsSorted()&&t(_e,{direction:i.column.getIsSorted()})]})]},i.id))},c.id))}),t(on,{children:a.getRowModel().rows.map(c=>t(we,{className:x("group border-stroke-secondary! bg-elevation-1 data-[selected=true]:bg-primary-100 hover:bg-elevation-mid",n&&"cursor-pointer focus-visible:outline focus-visible:outline-ring"),"data-selected":c.getIsSelected(),...n&&{role:"link",tabIndex:0,onClick:i=>{i.target.closest('a, button, input, select, textarea, [role="button"]')||n(c.original)},onKeyDown:i=>{i.key==="Enter"&&n(c.original)}},children:c.getVisibleCells().map(i=>{const r=i.column.id===F,d=i.column.columnDef.meta?.displayType?On(i):re(i.column.columnDef.cell,i.getContext());return t(sn,{className:x(s(r,r?"bg-elevation-1 group-data-[selected=true]:bg-primary-100 group-hover:bg-elevation-mid":"","z-1"),r&&"flex justify-center items-center"),children:d},i.id)})},c.id))})]})}function Pe(e){return e.resourceType==="none"}function ce(e){return e.resourceType==="single"}function Ie(e){return e.resourceType==="multiple"}function Fe({items:e,isFetching:a,buttonClassName:n}){const{openDialog:s,closeDialog:c}=se(),{tanTable:i,mergedFilters:r}=w();function d(o,m){return o.isDisabled?Pe(o)?o.isDisabled():Ie(o)?o.isDisabled(m):!1:!1}const l=i.getSelectedRowModel().rows.map(o=>o.original);return t(D,{children:e.map((o,m)=>{const b=o.icon,y=d(o,l)||a;return g(S,{"aria-label":o.label,type:"button",isDisabled:y,className:x("animate-in fade-in slide-in-from-right-15 duration-300 transition-transform",n),onPress:h=>{const N={event:h,openDialog:s,closeDialog:c,activeFilters:r};Pe(o)?o.onPress(N):Ie(o)&&o.onPress({...N,data:l})},variant:o.variant??"neutral",children:[b&&t(b,{"aria-hidden":!0}),t("span",{children:o.label})]},`${o.label}-${m}`)})})}function zn({label:e,items:a,data:n}){const{openDialog:s,closeDialog:c}=se(),{mergedFilters:i}=w();return a.length<5?t("div",{className:"flex items-center gap-2",children:a.map((r,d)=>{const l=r.icon,o=typeof r.label=="function"?r.label(n):r.label;return g(gn,{children:[t(S,{"aria-label":typeof o=="string"?o:void 0,isDisabled:r.isDisabled?.(n)??!1,variant:"ghost",size:"icon",onPress:()=>{const m={openDialog:s,closeDialog:c};r.onPress({...m,data:n,activeFilters:i})},children:t(l,{className:"size-icon"})}),t(pn,{children:o})]},`${d}-${typeof o=="string"?o:""}`)})}):t(L,{withChevron:!1,"aria-label":"Actions",label:e,size:"icon",children:a.map((r,d)=>{const l=r.icon,o=typeof r.label=="function"?r.label(n):r.label;return g(M,{id:typeof o=="string"?o:void 0,isDisabled:r.isDisabled?.(n)??!1,onAction:()=>{const m={openDialog:s,closeDialog:c};ce(r)&&r.onPress({...m,data:n,activeFilters:i})},children:[t(l,{className:"size-icon"}),o]},`${d}-${typeof o=="string"?o:""}`)})})}const Kr=["eq","ne","cn","nc","sw","ew","in","nin","gt","gte","lt","lte","between"],Ae={eq:"equal to",ne:"not equal to",cn:"contains",nc:"does not contain",sw:"starts with",ew:"ends with",in:"includes",nin:"does not include",gt:"greater than",gte:"greater than or equal to",lt:"less than",lte:"less than or equal to",between:"between"},Rn={eq:"=",ne:"≠",cn:"contains",nc:"!contains",sw:"starts with",ew:"ends with",in:"in",nin:"not in",gt:">",gte:"≥",lt:"<",lte:"≤",between:"↔"};function R(e,a){const n=a.type,s=`${e}-${Date.now()}`,c=n==="bool"||n==="derived-select"?!1:a.needOperator??!0,i=c?Le[n][0]:"eq",r={id:s,property:e,operator:i,needOperator:c};switch(n){case"bool":return{...r,type:n,value:!0};case"derived-select":return{...r,type:n,value:a.options[0]?.id??""};case"string":return{...r,type:n,value:""};case"date":return{...r,type:n,value:i==="between"?[new Date().toISOString(),new Date().toISOString()]:new Date().toISOString()};case"id":return{...r,type:n,value:""};case"id-search":return{...r,type:n,value:[]};case"enum":return{...r,type:n,value:new Set};case"number":return{...r,type:n,value:0}}}const Le={bool:["eq"],"derived-select":["eq"],enum:["in","nin"],id:["in","nin"],"id-search":["in","nin"],string:["eq","ne","cn","nc","sw","ew","in","nin"],date:["between","lt","gt"],number:["eq","ne","gt","gte","lt","lte"]};function jn(e,a){let n=a.value!==void 0?a.value:e.value;const s=a.operator??e.operator;if(e.type==="date"&&a.operator!==void 0)if(s==="between"&&!Array.isArray(n)){const c=typeof n=="string"?n:new Date().toISOString();n=[c,c]}else s!=="between"&&Array.isArray(n)&&(n=n[0]??new Date().toISOString());return n}function $e(){const{setFilters:e,filterConfig:a}=w();return{updateFilter:(i,r)=>{e(d=>{const l=d.find(m=>m.property===i)??R(i,a[i]),o={...l,...r,value:jn(l,r),active:!0};return d.some(m=>m.id===l.id)?d.map(m=>m.id===l.id?o:m):[...d,o]})},removeFilter:i=>{e(r=>{const d=r.find(l=>l.id===i);return d?d.isPreview?r.map(l=>l.id===i?{...R(l.property,a[l.property]),active:!1,isPreview:!0}:l):r.filter(l=>l.id!==i):r})},clearAllFilters:()=>{e(i=>i.filter(r=>r.isPreview).map(r=>({...R(r.property,a[r.property]),active:!1,isPreview:!0})))}}}function _n(e,a){switch(e.type){case"string":case"id":return e.value??"";case"number":return e.value?.toString()??"";case"bool":return e.value?"true":"false";case"derived-select":{const n=a[e.property];if(!n||n.type!=="derived-select")return e.value??"";const s=n.options.find(c=>c.id===e.value);return typeof s?.label=="string"?s.label:e.value??""}case"date":if(Array.isArray(e.value)){const[n,s]=e.value;return`${k(n,{dateStyle:"short"})??""} – ${k(s,{dateStyle:"short"})??""}`}return e.value?k(e.value,{dateStyle:"short"})??"":"";case"enum":return e.value&&e.value.size>0?`${e.value.size} selected`:"";case"id-search":return e.value&&e.value.length>0?e.value.length===1?"1 item":`${e.value.length} items`:""}}function Ln({filter:e,filterConfig:a,onChange:n}){if(e.type==="string"||e.type==="id")return t(At,{autoFocus:!0,value:e.value??"",onChange:n,"aria-label":"Filter value"});if(e.type==="number")return t(Ct,{autoFocus:!0,value:e.value,onChange:n,"aria-label":"Filter value"});if(e.type==="date"){if(e.operator==="between"){const[c,i]=Array.isArray(e.value)?e.value:[new Date().toISOString(),new Date().toISOString()],r=Y(c,J()),d=Y(i,J());return g("div",{className:"flex flex-col gap-icon",children:[t(te,{autoFocus:!0,hideTimeZone:!0,label:"From",value:r,onChange:l=>n([l?l.toAbsoluteString():c,i])}),t(te,{hideTimeZone:!0,label:"To",value:d,onChange:l=>n([c,l?l.toAbsoluteString():i])})]})}const s=e.value&&!Array.isArray(e.value)?Y(e.value,J()):null;return t(te,{autoFocus:!0,hideTimeZone:!0,value:s,onChange:c=>n(c?c.toAbsoluteString():new Date().toISOString()),"aria-label":"Filter date"})}if(e.type==="enum"){const s=a[e.property];return s.type!=="enum"?null:t(Nt,{autoFocus:!0,items:s.options,value:e.value??new Set,onChange:n,"aria-label":"Filter value"})}if(e.type==="id-search"){const s=a[e.property];if(s.type!=="id-search")return null;const c=s.defaultParams;return t(en,{autoFocus:!0,path:s.path,accessor:s.accessor,defaultParams:c,value:e.value??[],onChange:n,"aria-label":"Filter value"})}return null}function Ee({filter:e,filterConfig:a,resourceFormatter:n,onRemove:s,onUpdate:c,isOpen:i,onOpenChange:r}){const d=e.needOperator===!1?["eq"]:Le[e.type],l=_n(e,a),o=oe(),m=B(),b=e.type==="bool"||e.type==="derived-select",y=m?g("div",{className:"flex flex-col gap-1",children:[t("span",{className:"body-sm text-muted",children:n(e.property)}),t(Ft,{type:"button",className:"w-full","aria-label":n(e.property),children:l})]}):g(S,{type:"button",variant:e.active===!1?"neutral":"primary_neutral",className:"animate-in slide-in-from-left-10 fade-in flex justify-between gap-2",children:[t(le,{}),b?t("span",{className:"font-medium",children:l}):g(D,{children:[t("span",{className:"font-medium",children:n(e.property)}),o!=="customer-portal"&&t("span",{children:Rn[e.operator]}),o!=="customer-portal"&&l&&t("span",{children:l})]}),e.active!==!1&&t(De,{onPress:()=>s(),children:t("span",{className:"bg-primary hover:bg-destructive rounded-full size-icon flex justify-center items-center",children:t(Me,{className:"size-2.5 text-elevation-1"})})})]});if(b){let h,N;if(e.type==="bool")h=[{id:"true",label:"True"},{id:"false",label:"False"}],N=e.value?"true":"false";else{const C=a[e.property];h=C?.type==="derived-select"?C.options:[],N=e.value??""}return g(yt,{isOpen:i,onOpenChange:r,children:[t("div",{className:"relative",children:y}),g(St,{className:"min-w-48",children:[t(xt,{inset:!0,separator:!1,children:n(e.property)}),t(wt,{selectionMode:"single",disallowEmptySelection:!0,selectedKeys:new Set([N]),onSelectionChange:C=>{if(C==="all")return;const A=C.values().next().value;A!=null&&c({value:e.type==="bool"?String(A)==="true":String(A)})},"aria-label":"Filter value",children:h.map(C=>t(M,{id:C.id,children:C.label},C.id))})]})]})}return g(Pt,{isOpen:i,onOpenChange:r,children:[t("div",{className:"relative",children:y}),t(It,{className:"p-icon min-w-48",children:g("div",{className:"flex flex-col gap-icon",children:[d.length>1&&t(L,{label:Ae[e.operator],variant:"neutral","aria-label":"Change operator",children:d.map(h=>t(M,{onAction:()=>c({operator:h}),children:Ae[h]},h))}),t(Ln,{filter:e,filterConfig:a,onChange:h=>c({value:h})}),t(S,{type:"button",variant:"neutral",className:"self-end",onPress:s,"aria-label":`Remove ${n(e.property)} filter`,children:"Clear"})]})})]})}function $n({onApply:e}){const{filters:a,filterConfig:n}=w(),s=H(),{updateFilter:c,removeFilter:i,clearAllFilters:r}=$e(),[d,l]=O(null);return g(D,{children:[t(Ot,{children:t(Mt,{children:"Filter"})}),t(zt,{className:"flex flex-col gap-input",children:Object.keys(n).map(o=>{const m=a.find(b=>b.property===o)??R(o,n[o]);return t(Ee,{filter:m,filterConfig:n,resourceFormatter:s,onRemove:()=>i(m.id),onUpdate:b=>c(o,b),isOpen:d===o,onOpenChange:b=>l(b?o:null)},o)})}),g(Rt,{children:[t(S,{variant:"neutral",onPress:()=>{r(),l(null)},children:"Clear All"}),t(S,{variant:"primary",onPress:e,children:"Apply"})]})]})}function En({className:e,hasClearableFilters:a,isDisabled:n,onClearAll:s,...c}){const{openDialog:i,closeDialog:r}=se();return t("section",{...c,className:x("flex items-center",e),children:g(S,{variant:a?"primary_neutral":"neutral",isDisabled:n,"aria-label":"Filter",onPress:()=>i(t($n,{onApply:r})),className:"min-w-0 flex-1",children:[t(le,{}),"Filters",a&&t(De,{onPress:s,children:t("span",{className:"animate-slide-in bg-primary hover:bg-destructive rounded-full size-icon flex justify-center items-center",children:t(Me,{className:"size-2.5 text-elevation-1"})})})]})})}function qn({className:e,previewFilters:a,...n}){const{filters:s,query:c,setFilters:i,filterConfig:r}=w(),d=B(),l=H(),o=Object.keys(r).filter(p=>!s.some(v=>v.property===p)).sort(),[m,b]=O(null),y=Te(!1);ie(()=>{if(!y.current&&s.length===0){const p=[];a&&a.length>0&&p.push(...a.filter(v=>r[v]).map(v=>({...R(v,r[v]),active:!1,isPreview:!0}))),p.length>0&&i(p)}y.current=!0},[]);const{updateFilter:h,removeFilter:N,clearAllFilters:C}=$e(),A=p=>{const v=R(p,r[p]);i([...s,v]),b(v.id)},$=s.some(p=>!p.isPreview||p.active!==!1),z=()=>{C(),b(null)};return d?t(En,{...n,className:e,hasClearableFilters:$,isDisabled:c.isPending,onClearAll:z}):g("section",{...n,className:x("flex flex-wrap gap-icon items-center",e),children:[s.filter(p=>p.property in r).map(p=>t(Ee,{filter:p,filterConfig:r,resourceFormatter:l,onRemove:()=>N(p.id),onUpdate:v=>h(p.property,v),isOpen:m===p.id,onOpenChange:v=>b(v?p.id:null)},p.id)),o.length>0&&t(L,{label:t(le,{}),isDisabled:c.isPending,variant:"neutral","aria-label":"Add filter",children:o.map(p=>{const v=r[p].type,K=Vn[v];return g(M,{className:"!justify-between",onAction:()=>A(p),children:[l(p),t(K,{})]},p)})}),$&&t(S,{variant:"ghost",onPress:z,"aria-label":"Clear all filters",className:"animate-in fade-in",children:"Clear All"})]})}const Vn={"id-search":Wt,bool:ne,"derived-select":ne,date:Jt,enum:Yt,id:Xt,number:Zt,string:ne};export{Ae as C,qn as D,Br as DataTable,je as DataTableContext,Hr as DataTableProvider,Kr as F,Vr as getColumnHelper,w as useDataTable,kr as useDataTableState};
1
+ "use client";import{jsx as t,Fragment as D,jsxs as g}from"react/jsx-runtime";import{parseAbsolute as Y,getLocalTimeZone as J}from"@internationalized/date";import{createContext as We,useContext as et,useState as O,useMemo as W,useEffect as ie,useRef as Te,Fragment as tt}from"react";import{Pressable as De}from"react-aria-components";import{Button as S}from"./button.js";import{useSensors as rt,useSensor as Se,PointerSensor as nt,KeyboardSensor as at,DndContext as it,closestCenter as ot,DragOverlay as st}from"@dnd-kit/core";import{sortableKeyboardCoordinates as lt,SortableContext as ct,verticalListSortingStrategy as ut,arrayMove as dt,useSortable as mt}from"@dnd-kit/sortable";import{CSS as gt}from"@dnd-kit/utilities";import{useQuery as pt,useInfiniteQuery as ft}from"@tanstack/react-query";import{createColumnHelper as Oe,useReactTable as bt,getCoreRowModel as ht,flexRender as ne}from"@tanstack/react-table";import{useLocalStorage as ee}from"@uidotdev/usehooks";import{merge as yt}from"lodash-es";import{Badge as xe}from"./badge.js";import{DatePicker as te}from"./date-picker.js";import{EasyMenu as L,MenuItem as M,MenuTrigger as vt,MenuPopover as St,MenuHeader as xt,Menu as wt}from"./menu.js";import{MultiSelect as Nt}from"./multi-select.js";import{NumberField as Ct}from"./numberfield.js";import{PopoverTrigger as Pt,Popover as It}from"./popover.js";import{SelectTrigger as Ft}from"./select.js";import{TextField as At}from"./textfield.js";import{formatDate as k}from"../utilities/date.js";import{useProjectName as oe,useResourceFormatter as H,ALL_OS as Tt}from"../utilities/resources.js";import{classNames as x}from"../utilities/theme.js";import{ControlledDialogProvider as Dt,useControlledDialog as se,DialogHeader as Ot,DialogTitle as Mt,DialogBody as zt,DialogFooter as Rt}from"./dialog.js";import{IcRefresh as jt,IcMenu as _t,IcLayoutGrid as Lt,IcColumns as $t,IcGrip as Et,IcFirst as qt,IcLeft as Vt,IcRight as kt,IcLast as Ht,IcMoreVertical as Bt,IcInfo as Kt,IcSortAsc as Qt,IcSortDesc as Gt,IcSortNone as Ut,IcCheck as re,IcMinus as Zt,IcAccount as Xt,IcLicense as Yt,IcDate as Jt,IcFile as Wt,IcFilter as le,IcClose as Me}from"./icons.js";import{MultipleIdSearchInput as er}from"./id-search.js";import{useIsMobile as B}from"../utilities/use-mobile.js";import{Loader as ze}from"./loader.js";import{SearchField as tr}from"./searchfield.js";import{Table as rr,TableHeader as nr,TableRow as we,TableHead as ar,TableBody as ir,TableCell as or}from"./table.js";import{CountryName as sr}from"../utilities/countries.js";import{Duration as lr}from"../utilities/duration.js";import{formatDays as cr,formatFilesize as ur,formatNumber as dr}from"../utilities/numbers.js";import{Checkbox as Ne}from"./checkbox.js";import{TooltipTrigger as mr,Tooltip as gr}from"./tooltip.js";import{getSubscriptionStartTriggerLabel as pr,ALL_LICENSE_TYPES as fr}from"./select-options.js";import{useCtxClient as br}from"../utilities/ctx-client.js";import{ProgressBar as hr}from"./progress-bar.js";import{TagGroup as yr,Tag as vr}from"./tag-group.js";import"class-variance-authority";import"clsx";import"@icons-pack/react-simple-icons";import"./calendar.js";import"./form.js";import"./card.js";import"./datefield.js";import"../utilities/form.js";import"../utilities/form-context.js";import"@tanstack/react-form";import"./list-box.js";import"./kbd.js";import"../utilities/string.js";import"../utilities/empty-option.js";function Sr(e){return e?e.desc?`-${e.id}`:`+${e.id}`:"-createdAt"}const Re=Oe(),xr=[Re.accessor("checkbox",{header:({table:e})=>t(Ne,{isIndeterminate:e.getIsSomeRowsSelected()&&!e.getIsAllPageRowsSelected(),isSelected:e.getIsAllPageRowsSelected()||e.getIsSomePageRowsSelected(),onChange:()=>e.toggleAllPageRowsSelected(),"aria-label":"Select all",size:"sm"}),cell:({row:e})=>t(Ne,{isSelected:e.getIsSelected(),onChange:()=>e.toggleSelected(),"aria-label":"Select row",size:"sm"}),enableSorting:!1,enableHiding:!1})],F="TableActions";function wr(e){return e.length===0?[]:[Re.accessor(F,{header:"Actions",id:F,enableHiding:!1,cell:({row:a})=>t(Mr,{label:t(Bt,{className:"text-icon-primary"}),data:a.original,items:e}),enableSorting:!1})]}function Vn(){return Oe()}function kn({path:e,pathParameters:a,queryParameters:r,columns:s,filterConfig:c,columnsToHideByDefault:i={},allowSelection:n=!1,allowToolbar:d=!0,initialFilters:l=[],previewFilters:o,tableActions:m,Card:b,onRowNavigate:v,disableTableView:h,hideViewToggle:N,include:C}){const[A,$]=O({pagination:{pageIndex:0,pageSize:20},sorting:[]}),{sorting:z,pagination:p}=A,[y,K]=O(""),[ue,de]=O({}),[Q,qe]=O(l),G=W(()=>Q.filter(u=>u.active!==!1).map(u=>{if(u.type==="derived-select"){const I=c[u.property];return I?.type==="derived-select"?I.toApiQuery(String(u.value??"")):{}}const f=u.value instanceof Set?Array.from(u.value):u.value;return u.needOperator===!1?{[u.property]:Array.isArray(f)?f.join(","):f}:u.operator==="between"&&Array.isArray(f)&&f.length===2?{[u.property]:{gte:f[0],lte:f[1]}}:Array.isArray(f)?{[u.property]:{[u.operator]:f.join(",")}}:{[u.property]:{[u.operator]:f}}}).reduce((u,f)=>yt(u,f),{}),[Q,c]),E=C?.length?C.join(","):void 0,q={...r,...G,limit:p.pageSize,sort:Sr(z[0]),search:y,...E?{include:E}:{}},Ve=br(),ke=["get",e,{...q,page:p.pageIndex+1},"table"],He=["get",e,q,"card"],U=`${e}_ctx`,[me,ge]=ee(`${U}_column_order_preference`,[]),[pe,Be]=ee(`${U}_column_visibility_preference`,{id:!1,...i}),[Ke,Qe]=ee(`${U}_view_mode_preference`,h?"card":"table"),Ge=B(),T=h||Ge&&b?"card":Ke,Z=u=>{$(f=>({...f,...u}))};async function fe(u){const f=await Ve.GET(e,{params:{query:{...r,page:u,limit:p.pageSize,sort:q.sort,search:q.search,...E?{include:E}:{},...G},path:a}});return{data:f.data??[],total:Number.parseInt(f.response.headers.get("Pagination-Count")||"0"),nextPage:u+1}}const j=pt({queryKey:ke,enabled:T==="table",queryFn:()=>fe(p.pageIndex+1),placeholderData:u=>u}),P=ft({queryKey:He,enabled:T==="card",initialPageParam:1,queryFn:({pageParam:u})=>fe(u),getNextPageParam:(u,f)=>f.flatMap(V=>V.data).length<u.total?u.nextPage:void 0}),be=W(()=>T==="table"?j.data?.data??[]:P.data?.pages.flatMap(u=>u.data)??[],[T,j.data,P.data]),he=W(()=>T==="table"?j.data?.total??0:P.data?.pages[0]?.total??0,[T,j.data,P.data]),ye=T==="table"?j:{...P,data:{data:be,total:he},isLoading:P.isLoading,isFetching:P.isFetching,isError:P.isError,error:P.error,refetch:P.refetch},Ue=m.filter(ce),Ze=[...n?xr:[],...s,...wr(Ue??[])];function Xe(u){return typeof u=="function"}function _(u,f){return Xe(u)?u(f):u}const ve=bt({data:be,columns:Ze,getCoreRowModel:ht(),rowCount:he,manualPagination:!0,onPaginationChange:u=>{Z({pagination:_(u,p)})},manualSorting:!0,onSortingChange:u=>{de({}),Z({sorting:[..._(u,z)]})},manualFiltering:!0,onColumnVisibilityChange:u=>{Be(_(u,pe))},onRowSelectionChange:u=>{de(_(u,ue))},onColumnOrderChange:u=>{ge(_(u,me))},state:{sorting:z,columnVisibility:pe,pagination:p,rowSelection:ue,columnOrder:me},meta:{refetch:ye.refetch}});return ie(()=>{const u=ve.getAllFlatColumns().map(I=>I.id),f=u.filter(I=>I!=="checkbox"&&I!==F);ge(I=>{const V=I.filter(X=>f.includes(X)),Ye=f.filter(X=>!I.includes(X)),Je=V.length>0?[...V,...Ye]:f;return[...u.includes("checkbox")?["checkbox"]:[],...Je,...u.includes(F)?[F]:[]]})},[]),{tableState:A,updateTableState:Z,query:ye,setSearchQuery:K,searchQuery:y,tanTable:ve,mergedFilters:G,filters:Q,setFilters:qe,filterConfig:c,tableActions:m,pathParameters:a,queryParameters:r,viewMode:T,setViewMode:Qe,Card:b,allowSelection:n,allowToolbar:d,previewFilters:o,infiniteQuery:P,disableTableView:h,hideViewToggle:N,onRowNavigate:v}}const je=We(null);function w(){const e=et(je);if(!e)throw Error("DataTable should be used within DataTableProvider.");return e}function Hn({children:e,...a}){return t(je.Provider,{value:a,children:e})}function Nr(){const{query:e}=w();return e.isFetching?null:e.isError?g("span",{className:"flex gap-3 items-center",children:[t(Kt,{className:"text-icon-primary"}),t("span",{children:e.error?.message})]}):e.data?.data?.length===0?t(D,{children:"No results found."}):t(D,{children:"Unknown error. Please contact customer support."})}function Cr({cardGridClassName:e}){const{query:a,tanTable:r,viewMode:s,tableActions:c,Card:i}=w(),n=c.filter(ce),d=s==="card"&&!!i;return a.isLoading?t("div",{className:"body-sm flex items-center justify-center min-h-32",children:t(ze,{})}):r.getRowModel().rows.length===0?t("div",{className:"body-sm flex items-center justify-center min-h-32 text-muted",children:t(Nr,{})}):d?t(Pr,{Card:i,actions:n,className:e}):t(Or,{className:"w-full"})}function Bn({className:e,cardGridClassName:a,...r}){const{viewMode:s,Card:c,allowToolbar:i}=w(),n=s==="card"&&!!c;return t(D,{children:g(Dt,{children:[i&&t(Tr,{}),g("section",{...r,className:x("z-20 flex flex-col",n?"":"border rounded-lg",e),children:[t("div",{className:"w-full overflow-auto relative rounded-t-lg [scrollbar-width:none]",tabIndex:0,children:t(Cr,{cardGridClassName:a})}),!n&&g("div",{className:"flex w-full justify-between border-t gap-icon py-2 px-icon bg-surface-secondary rounded-b-lg overflow-x-auto",children:[g("div",{className:"flex gap-icon",children:[t(Ir,{}),t(Ar,{})]}),t(Fr,{})]})]})]})})}function Pr({Card:e,actions:a,className:r,...s}){const{tanTable:c,allowSelection:i}=w(),{infiniteQuery:n}=w(),d=Te(null);return ie(()=>{const l=d.current;if(!l)return;const o=new IntersectionObserver(m=>{m[0].isIntersecting&&n.hasNextPage&&!n.isFetchingNextPage&&n.fetchNextPage()},{threshold:.1});return o.observe(l),()=>o.disconnect()},[n.hasNextPage,n.isFetchingNextPage]),g("div",{...s,className:x(r,"grid grid-cols-1 lg:grid-cols-2 gap-icon pb-input"),children:[c.getRowModel().rows.map((l,o)=>{const m={isSelected:l.getIsSelected(),onToggle:()=>l.toggleSelected(),allowSelection:i};return t(tt,{children:e(l.original,a,m,o)},l.id)}),t("div",{ref:d,className:"col-span-full h-4 flex items-center justify-center",children:n.isFetchingNextPage&&t(ze,{})})]})}function Ir(){if(oe()==="customer-portal")return null;const{tanTable:a}=w(),[r,s]=O(null),c=H(),i=rt(Se(nt),Se(at,{coordinateGetter:lt}));return t(it,{sensors:i,collisionDetection:ot,onDragStart:d=>{const{active:l}=d;s(l.id.toString())},onDragEnd:d=>{const{active:l,over:o}=d;if(o&&l.id!==o.id){const m=a.getState().columnOrder,b=m.indexOf(l.id.toString()),v=m.indexOf(o.id.toString());a.setColumnOrder([...dt(m,b,v)])}s(null)},children:g(ct,{items:a.getState().columnOrder,strategy:ut,children:[g(L,{label:g(D,{children:[t($t,{className:"inline align-bottom me-1 text-icon-primary"}),"Columns"]}),selectionMode:"multiple",size:"sm",items:a.getAllFlatColumns(),selectedKeys:a.getVisibleFlatColumns().map(d=>d.id),children:[t(M,{onAction:()=>a.toggleAllColumnsVisible(),className:"italic",children:"(select all)"}),a.getState().columnOrder.map(d=>{const l=a.getAllFlatColumns().find(o=>o.id===d);return!l||l.id==="checkbox"||l.id===F?null:t(n,{column:l},l.id)})]}),t(st,{children:r?t("div",{className:"opacity-70 border-2 border-primary",children:c(r)}):null})]})});function n({column:d}){const{attributes:l,listeners:o,setNodeRef:m,transform:b,transition:v}=mt({id:d.id}),h={transform:gt.Transform.toString(b),transition:v,zIndex:"999"};return g(M,{ref:m,style:h,...l,id:d.id,onAction:()=>d.toggleVisibility(),isDisabled:!d.getCanHide(),className:"flex items-center",children:[t(Et,{...o,className:"size-icon cursor-grab text-icon-primary"}),ae(d),d.getIsSorted()&&t(_e,{className:"size-icon",direction:d.getIsSorted()})]})}}function Fr(){const{tanTable:e}=w(),a=e.getRowCount();return g("div",{className:"flex items-center gap-2",children:[t("span",{className:"whitespace-nowrap body-sm text-muted",children:`${e.getState().pagination.pageIndex*e.getState().pagination.pageSize+1} - ${Math.min((e.getState().pagination.pageIndex+1)*e.getState().pagination.pageSize,a)} of ${a?.toLocaleString()}`}),(e.getCanNextPage()||e.getCanPreviousPage())&&g(D,{children:[t(S,{"aria-label":"First page",onPress:()=>e.firstPage(),isDisabled:!e.getCanPreviousPage(),variant:"neutral",size:"icon-sm",children:t(qt,{})}),t(S,{"aria-label":"Previous page",onPress:()=>e.previousPage(),isDisabled:!e.getCanPreviousPage(),variant:"neutral",size:"icon-sm",children:t(Vt,{})}),t(S,{"aria-label":"Next page",onPress:()=>e.nextPage(),isDisabled:!e.getCanNextPage(),variant:"neutral",size:"icon-sm",children:t(kt,{})}),t(S,{"aria-label":"Last page",onClick:()=>e.lastPage(),isDisabled:!e.getCanNextPage(),variant:"neutral",size:"icon-sm",children:t(Ht,{})})]})]})}function Ar(){if(oe()==="customer-portal")return null;const{tanTable:a}=w(),r=[10,20,30,40,50];return t(L,{label:a.getState().pagination.pageSize.toString(),selectionMode:"single",size:"sm",selectedKeys:[a.getState().pagination.pageSize.toString()],items:r.map(s=>({id:s.toString(),value:s})),children:s=>t(M,{onAction:()=>a.setPageSize(s.value),children:s.value})})}function Tr(){const{query:e,tanTable:a,searchQuery:r,setSearchQuery:s,tableActions:c,viewMode:i,setViewMode:n,Card:d,previewFilters:l,disableTableView:o,hideViewToggle:m}=w(),b=a.getSelectedRowModel().rows.length>0,v=B(),h=c.filter(N=>N.resourceType!=="single").filter(N=>N.resourceType==="multiple"===b);return g("section",{className:"flex justify-between my-0 mb-icon gap-icon overflow-x-auto py-1",children:[g("div",{className:x("flex gap-icon max-md:min-w-0 max-md:flex-1"),children:[t(S,{"aria-label":"Refresh",isPending:e.isFetching,onClick:()=>e.refetch(),variant:"neutral",size:"icon",className:x("max-md:shrink-0"),children:t(jt,{})}),t(tr,{value:r,onChange:s,className:x("max-md:min-w-0 max-md:flex-1")}),t(Er,{previewFilters:l,className:x("max-md:shrink-0")})]}),!v&&g("div",{className:"flex gap-icon",children:[t(Fe,{items:h,isFetching:e.isFetching}),d&&!o&&!m&&g("div",{className:"flex gap-1 bg-surface-primary rounded-md overflow-hidden",children:[t(S,{variant:i==="table"?"primary":"neutral",size:"icon",onPress:()=>n("table"),"aria-label":"Table view",className:"border-none",children:t(_t,{})}),t(S,{variant:i==="card"?"primary":"neutral",size:"icon",onPress:()=>n("card"),"aria-label":"Card view",className:"border-none",children:t(Lt,{})})]})]}),v&&h.length>0&&t("div",{className:"fixed inset-x-0 bottom-0 z-30 flex gap-icon border-t bg-surface-primary p-icon",children:t(Fe,{items:h,isFetching:e.isFetching,buttonClassName:"flex-1 justify-center"})})]})}function _e({direction:e,...a}){return e==="asc"?t(Qt,{className:"size-3.5",...a}):e==="desc"?t(Gt,{className:"size-3.5",...a}):t(Ut,{className:"size-3.5",...a})}function ae(e){const a=H(),r=e.columnDef.header;return typeof r=="string"?r:a(e.id)}function Dr(e){const a=e.column.columnDef.meta?.displayType,r=e.getValue();if(r==null)return null;switch(a){case"date":return t("span",{className:"tabular-nums",children:k(r)});case"number":return t("span",{className:"block text-right tabular-nums",children:dr(r)});case"boolean":return t(xe,{variant:r?"success":"destructive",className:"capitalize",children:String(r)});case"badge":return t(xe,{children:String(r)});case"tags":let s=Array.isArray(r)?r:[String(r)];return t(yr,{items:s.map(n=>({id:n,name:n})),className:"!flex-nowrap",children:n=>t(vr,{children:n.name})});case"progressBar":const[c,i]=r;return t(hr,{meterClassName:"w-16",label:`${c}/${i}`,minValue:0,maxValue:i,value:c});case"country":return t(sr,{value:r});case"enum":return t("span",{className:"uppercase w-full",children:String(r)});case"fileSize":return ur(r);case"days":return cr(r);case"os":return Tt[r]??r;case"licenseType":return fr[r]??r;case"subscriptionInterval":return lr.formatISODuration(r);case"subscriptionStartTrigger":return pr(r);default:return String(r)}}function Ce({header:e}){const a=e.column.columnDef.header;return typeof a=="string"||!a?ae(e.column):typeof a=="function"?typeof a(e.getContext())=="string"?ae(e.column):ne(a,e.getContext()):ne(a,e.getContext())}function Or({className:e}){const{tanTable:a,onRowNavigate:r}=w(),s=(c,i,n="z-50")=>x("text-left body-sm font-medium whitespace-nowrap",c&&`sticky right-0 ${n} text-center justify-center`,i);return g(rr,{className:x("table-auto border-0",e),children:[t(nr,{className:"sticky top-0 z-10 rounded-lg border-stroke-secondary!",children:a.getHeaderGroups().map(c=>t(we,{className:"border-stroke-secondary!",children:c.headers.map(i=>g(ar,{scope:"col",colSpan:i.colSpan,className:s(i.id===F,"bg-surface-secondary"),children:[!i.column.getCanSort()&&!i.isPlaceholder&&t("div",{className:x("w-full flex items-center gap-1 text-xs uppercase font-semibold text-text-secondary",i.id===F?"justify-center":"justify-start"),children:t(Ce,{header:i})}),i.column.getCanSort()&&g(S,{variant:"ghost",size:"none",className:x("w-full p-1 rounded-md uppercase text-text-secondary text-xs font-semibold",i.id===F?"justify-center":"justify-start",i.column.getIsSorted()?"text-primary":""),onPress:i.column.getToggleSortingHandler(),children:[t("span",{children:t(Ce,{header:i})}),i.column.getIsSorted()&&t(_e,{direction:i.column.getIsSorted()})]})]},i.id))},c.id))}),t(ir,{children:a.getRowModel().rows.map(c=>t(we,{className:x("group border-stroke-secondary! bg-surface-primary hover:not-data-[selected=true]:bg-surface-secondary data-[selected=true]:bg-surface-tertiary",r&&"cursor-pointer focus-visible:outline focus-visible:outline-ring"),"data-selected":c.getIsSelected(),...r&&{role:"link",tabIndex:0,onClick:i=>{i.target.closest('a, button, input, select, textarea, [role="button"]')||r(c.original)},onKeyDown:i=>{i.key==="Enter"&&r(c.original)}},children:c.getVisibleCells().map(i=>{const n=i.column.id===F,d=i.column.columnDef.meta?.displayType?Dr(i):ne(i.column.columnDef.cell,i.getContext());return t(or,{className:x(s(n,n?"bg-surface-primary group-hover:not-group-data-[selected=true]:bg-surface-secondary group-data-[selected=true]:bg-surface-tertiary":"","z-1"),n&&"flex justify-center items-center"),children:d},i.id)})},c.id))})]})}function Pe(e){return e.resourceType==="none"}function ce(e){return e.resourceType==="single"}function Ie(e){return e.resourceType==="multiple"}function Fe({items:e,isFetching:a,buttonClassName:r}){const{openDialog:s,closeDialog:c}=se(),{tanTable:i,mergedFilters:n}=w();function d(o,m){return o.isDisabled?Pe(o)?o.isDisabled():Ie(o)?o.isDisabled(m):!1:!1}const l=i.getSelectedRowModel().rows.map(o=>o.original);return t(D,{children:e.map((o,m)=>{const b=o.icon,v=d(o,l)||a;return g(S,{"aria-label":o.label,type:"button",isDisabled:v,className:x("animate-in fade-in slide-in-from-right-15 duration-300 transition-transform",r),onPress:h=>{const N={event:h,openDialog:s,closeDialog:c,activeFilters:n};Pe(o)?o.onPress(N):Ie(o)&&o.onPress({...N,data:l})},variant:o.variant??"neutral",children:[b&&t(b,{"aria-hidden":!0}),t("span",{children:o.label})]},`${o.label}-${m}`)})})}function Mr({label:e,items:a,data:r}){const{openDialog:s,closeDialog:c}=se(),{mergedFilters:i}=w();return a.length<5?t("div",{className:"flex items-center gap-2",children:a.map((n,d)=>{const l=n.icon,o=typeof n.label=="function"?n.label(r):n.label;return g(mr,{children:[t(S,{"aria-label":typeof o=="string"?o:void 0,isDisabled:n.isDisabled?.(r)??!1,variant:"ghost",size:"icon",onPress:()=>{const m={openDialog:s,closeDialog:c};n.onPress({...m,data:r,activeFilters:i})},children:t(l,{className:"size-icon"})}),t(gr,{children:o})]},`${d}-${typeof o=="string"?o:""}`)})}):t(L,{withChevron:!1,"aria-label":"Actions",label:e,size:"icon",children:a.map((n,d)=>{const l=n.icon,o=typeof n.label=="function"?n.label(r):n.label;return g(M,{id:typeof o=="string"?o:void 0,isDisabled:n.isDisabled?.(r)??!1,onAction:()=>{const m={openDialog:s,closeDialog:c};ce(n)&&n.onPress({...m,data:r,activeFilters:i})},children:[t(l,{className:"size-icon"}),o]},`${d}-${typeof o=="string"?o:""}`)})})}const Kn=["eq","ne","cn","nc","sw","ew","in","nin","gt","gte","lt","lte","between"],Ae={eq:"equal to",ne:"not equal to",cn:"contains",nc:"does not contain",sw:"starts with",ew:"ends with",in:"includes",nin:"does not include",gt:"greater than",gte:"greater than or equal to",lt:"less than",lte:"less than or equal to",between:"between"},zr={eq:"=",ne:"≠",cn:"contains",nc:"!contains",sw:"starts with",ew:"ends with",in:"in",nin:"not in",gt:">",gte:"≥",lt:"<",lte:"≤",between:"↔"};function R(e,a){const r=a.type,s=`${e}-${Date.now()}`,c=r==="bool"||r==="derived-select"?!1:a.needOperator??!0,i=c?Le[r][0]:"eq",n={id:s,property:e,operator:i,needOperator:c};switch(r){case"bool":return{...n,type:r,value:!0};case"derived-select":return{...n,type:r,value:a.options[0]?.id??""};case"string":return{...n,type:r,value:""};case"date":return{...n,type:r,value:i==="between"?[new Date().toISOString(),new Date().toISOString()]:new Date().toISOString()};case"id":return{...n,type:r,value:""};case"id-search":return{...n,type:r,value:[]};case"enum":return{...n,type:r,value:new Set};case"number":return{...n,type:r,value:0}}}const Le={bool:["eq"],"derived-select":["eq"],enum:["in","nin"],id:["in","nin"],"id-search":["in","nin"],string:["eq","ne","cn","nc","sw","ew","in","nin"],date:["between","lt","gt"],number:["eq","ne","gt","gte","lt","lte"]};function Rr(e,a){let r=a.value!==void 0?a.value:e.value;const s=a.operator??e.operator;if(e.type==="date"&&a.operator!==void 0)if(s==="between"&&!Array.isArray(r)){const c=typeof r=="string"?r:new Date().toISOString();r=[c,c]}else s!=="between"&&Array.isArray(r)&&(r=r[0]??new Date().toISOString());return r}function $e(){const{setFilters:e,filterConfig:a}=w();return{updateFilter:(i,n)=>{e(d=>{const l=d.find(m=>m.property===i)??R(i,a[i]),o={...l,...n,value:Rr(l,n),active:!0};return d.some(m=>m.id===l.id)?d.map(m=>m.id===l.id?o:m):[...d,o]})},removeFilter:i=>{e(n=>{const d=n.find(l=>l.id===i);return d?d.isPreview?n.map(l=>l.id===i?{...R(l.property,a[l.property]),active:!1,isPreview:!0}:l):n.filter(l=>l.id!==i):n})},clearAllFilters:()=>{e(i=>i.filter(n=>n.isPreview).map(n=>({...R(n.property,a[n.property]),active:!1,isPreview:!0})))}}}function jr(e,a){switch(e.type){case"string":case"id":return e.value??"";case"number":return e.value?.toString()??"";case"bool":return e.value?"true":"false";case"derived-select":{const r=a[e.property];if(!r||r.type!=="derived-select")return e.value??"";const s=r.options.find(c=>c.id===e.value);return typeof s?.label=="string"?s.label:e.value??""}case"date":if(Array.isArray(e.value)){const[r,s]=e.value;return`${k(r,{dateStyle:"short"})??""} – ${k(s,{dateStyle:"short"})??""}`}return e.value?k(e.value,{dateStyle:"short"})??"":"";case"enum":return e.value&&e.value.size>0?`${e.value.size} selected`:"";case"id-search":return e.value&&e.value.length>0?e.value.length===1?"1 item":`${e.value.length} items`:""}}function _r({filter:e,filterConfig:a,onChange:r}){if(e.type==="string"||e.type==="id")return t(At,{autoFocus:!0,value:e.value??"",onChange:r,"aria-label":"Filter value"});if(e.type==="number")return t(Ct,{autoFocus:!0,value:e.value,onChange:r,"aria-label":"Filter value"});if(e.type==="date"){if(e.operator==="between"){const[c,i]=Array.isArray(e.value)?e.value:[new Date().toISOString(),new Date().toISOString()],n=Y(c,J()),d=Y(i,J());return g("div",{className:"flex flex-col gap-icon",children:[t(te,{autoFocus:!0,hideTimeZone:!0,label:"From",value:n,onChange:l=>r([l?l.toAbsoluteString():c,i])}),t(te,{hideTimeZone:!0,label:"To",value:d,onChange:l=>r([c,l?l.toAbsoluteString():i])})]})}const s=e.value&&!Array.isArray(e.value)?Y(e.value,J()):null;return t(te,{autoFocus:!0,hideTimeZone:!0,value:s,onChange:c=>r(c?c.toAbsoluteString():new Date().toISOString()),"aria-label":"Filter date"})}if(e.type==="enum"){const s=a[e.property];return s.type!=="enum"?null:t(Nt,{autoFocus:!0,items:s.options,value:e.value??new Set,onChange:r,"aria-label":"Filter value"})}if(e.type==="id-search"){const s=a[e.property];if(s.type!=="id-search")return null;const c=s.defaultParams;return t(er,{autoFocus:!0,path:s.path,accessor:s.accessor,defaultParams:c,value:e.value??[],onChange:r,"aria-label":"Filter value"})}return null}function Ee({filter:e,filterConfig:a,resourceFormatter:r,onRemove:s,onUpdate:c,isOpen:i,onOpenChange:n}){const d=e.needOperator===!1?["eq"]:Le[e.type],l=jr(e,a),o=oe(),m=B(),b=e.type==="bool"||e.type==="derived-select",v=m?g("div",{className:"flex flex-col gap-1",children:[t("span",{className:"body-sm text-muted",children:r(e.property)}),t(Ft,{type:"button",className:"w-full","aria-label":r(e.property),children:l})]}):g(S,{type:"button",variant:e.active===!1?"neutral":"primary_neutral",className:"animate-in slide-in-from-left-10 fade-in flex justify-between gap-2",children:[t(le,{}),b?t("span",{className:"font-medium",children:l}):g(D,{children:[t("span",{className:"font-medium",children:r(e.property)}),o!=="customer-portal"&&t("span",{children:zr[e.operator]}),o!=="customer-portal"&&l&&t("span",{children:l})]}),e.active!==!1&&t(De,{onPress:()=>s(),children:t("span",{className:"bg-primary hover:bg-destructive rounded-full size-icon flex justify-center items-center",children:t(Me,{className:"size-2.5 text-surface-primary"})})})]});if(b){let h,N;if(e.type==="bool")h=[{id:"true",label:"True"},{id:"false",label:"False"}],N=e.value?"true":"false";else{const C=a[e.property];h=C?.type==="derived-select"?C.options:[],N=e.value??""}return g(vt,{isOpen:i,onOpenChange:n,children:[t("div",{className:"relative",children:v}),g(St,{className:"min-w-48",children:[t(xt,{inset:!0,separator:!1,children:r(e.property)}),t(wt,{selectionMode:"single",disallowEmptySelection:!0,selectedKeys:new Set([N]),onSelectionChange:C=>{if(C==="all")return;const A=C.values().next().value;A!=null&&c({value:e.type==="bool"?String(A)==="true":String(A)})},"aria-label":"Filter value",children:h.map(C=>t(M,{id:C.id,children:C.label},C.id))})]})]})}return g(Pt,{isOpen:i,onOpenChange:n,children:[t("div",{className:"relative",children:v}),t(It,{className:"p-icon min-w-48",children:g("div",{className:"flex flex-col gap-icon",children:[d.length>1&&t(L,{label:Ae[e.operator],variant:"neutral","aria-label":"Change operator",children:d.map(h=>t(M,{onAction:()=>c({operator:h}),children:Ae[h]},h))}),t(_r,{filter:e,filterConfig:a,onChange:h=>c({value:h})}),t(S,{type:"button",variant:"neutral",className:"self-end",onPress:s,"aria-label":`Remove ${r(e.property)} filter`,children:"Clear"})]})})]})}function Lr({onApply:e}){const{filters:a,filterConfig:r}=w(),s=H(),{updateFilter:c,removeFilter:i,clearAllFilters:n}=$e(),[d,l]=O(null);return g(D,{children:[t(Ot,{children:t(Mt,{children:"Filter"})}),t(zt,{className:"flex flex-col gap-input",children:Object.keys(r).map(o=>{const m=a.find(b=>b.property===o)??R(o,r[o]);return t(Ee,{filter:m,filterConfig:r,resourceFormatter:s,onRemove:()=>i(m.id),onUpdate:b=>c(o,b),isOpen:d===o,onOpenChange:b=>l(b?o:null)},o)})}),g(Rt,{children:[t(S,{variant:"neutral",onPress:()=>{n(),l(null)},children:"Clear All"}),t(S,{variant:"primary",onPress:e,children:"Apply"})]})]})}function $r({className:e,hasClearableFilters:a,isDisabled:r,onClearAll:s,...c}){const{openDialog:i,closeDialog:n}=se();return t("section",{...c,className:x("flex items-center",e),children:g(S,{variant:a?"primary_neutral":"neutral",isDisabled:r,"aria-label":"Filter",onPress:()=>i(t(Lr,{onApply:n})),className:"min-w-0 flex-1",children:[t(le,{}),"Filters",a&&t(De,{onPress:s,children:t("span",{className:"animate-slide-in bg-primary hover:bg-destructive rounded-full size-icon flex justify-center items-center",children:t(Me,{className:"size-2.5 text-surface-primary"})})})]})})}function Er({className:e,previewFilters:a,...r}){const{filters:s,query:c,setFilters:i,filterConfig:n}=w(),d=B(),l=H(),o=Object.keys(n).filter(p=>!s.some(y=>y.property===p)).sort(),[m,b]=O(null),v=Te(!1);ie(()=>{if(!v.current&&s.length===0){const p=[];a&&a.length>0&&p.push(...a.filter(y=>n[y]).map(y=>({...R(y,n[y]),active:!1,isPreview:!0}))),p.length>0&&i(p)}v.current=!0},[]);const{updateFilter:h,removeFilter:N,clearAllFilters:C}=$e(),A=p=>{const y=R(p,n[p]);i([...s,y]),b(y.id)},$=s.some(p=>!p.isPreview||p.active!==!1),z=()=>{C(),b(null)};return d?t($r,{...r,className:e,hasClearableFilters:$,isDisabled:c.isPending,onClearAll:z}):g("section",{...r,className:x("flex flex-wrap gap-icon items-center",e),children:[s.filter(p=>p.property in n).map(p=>t(Ee,{filter:p,filterConfig:n,resourceFormatter:l,onRemove:()=>N(p.id),onUpdate:y=>h(p.property,y),isOpen:m===p.id,onOpenChange:y=>b(y?p.id:null)},p.id)),o.length>0&&t(L,{label:t(le,{}),isDisabled:c.isPending,variant:"neutral","aria-label":"Add filter",children:o.map(p=>{const y=n[p].type,K=qr[y];return g(M,{className:"!justify-between",onAction:()=>A(p),children:[l(p),t(K,{})]},p)})}),$&&t(S,{variant:"ghost",onPress:z,"aria-label":"Clear all filters",className:"animate-in fade-in",children:"Clear All"})]})}const qr={"id-search":Wt,bool:re,"derived-select":re,date:Jt,enum:Yt,id:Xt,number:Zt,string:re};export{Ae as C,Er as D,Bn as DataTable,je as DataTableContext,Hn as DataTableProvider,Kn as F,Vn as getColumnHelper,w as useDataTable,kn as useDataTableState};
2
2
  //# sourceMappingURL=data-table.js.map