@cryptlex/web-components 5.2.0 → 5.3.0-alpha

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 (166) hide show
  1. package/dist/components/data-table/data-table-filter.d.ts +27 -0
  2. package/dist/components/data-table/data-table-filter.js +2 -0
  3. package/dist/components/data-table/data-table-filter.js.map +1 -0
  4. package/dist/components/data-table/data-table.d.ts +72 -0
  5. package/dist/components/data-table/data-table.js +2 -0
  6. package/dist/components/data-table/data-table.js.map +1 -0
  7. package/dist/components/data-table/table-commons.d.ts +56 -0
  8. package/dist/components/data-table/table-commons.js +2 -0
  9. package/dist/components/data-table/table-commons.js.map +1 -0
  10. package/dist/components/inputs/checkbox.d.ts +8 -0
  11. package/dist/components/inputs/checkbox.js +2 -0
  12. package/dist/components/inputs/checkbox.js.map +1 -0
  13. package/dist/components/inputs/date-picker.d.ts +11 -0
  14. package/dist/components/inputs/date-picker.js +2 -0
  15. package/dist/components/inputs/date-picker.js.map +1 -0
  16. package/dist/components/inputs/datefield.d.ts +14 -0
  17. package/dist/components/inputs/datefield.js +2 -0
  18. package/dist/components/inputs/datefield.js.map +1 -0
  19. package/dist/components/inputs/field.d.ts +20 -0
  20. package/dist/components/inputs/field.js +2 -0
  21. package/dist/components/inputs/field.js.map +1 -0
  22. package/dist/components/inputs/id-search.d.ts +20 -0
  23. package/dist/components/inputs/id-search.js +2 -0
  24. package/dist/components/inputs/id-search.js.map +1 -0
  25. package/dist/components/inputs/input-otp.d.ts +7 -0
  26. package/dist/components/inputs/input-otp.js +2 -0
  27. package/dist/components/inputs/input-otp.js.map +1 -0
  28. package/dist/components/inputs/multi-select.d.ts +16 -0
  29. package/dist/components/inputs/multi-select.js +2 -0
  30. package/dist/components/inputs/multi-select.js.map +1 -0
  31. package/dist/components/inputs/numberfield.d.ts +6 -0
  32. package/dist/components/inputs/numberfield.js +2 -0
  33. package/dist/components/inputs/numberfield.js.map +1 -0
  34. package/dist/components/inputs/searchfield.d.ts +5 -0
  35. package/dist/components/inputs/searchfield.js +2 -0
  36. package/dist/components/inputs/searchfield.js.map +1 -0
  37. package/dist/components/inputs/select-options.d.ts +8 -0
  38. package/dist/components/inputs/select-options.js +2 -0
  39. package/dist/components/inputs/select-options.js.map +1 -0
  40. package/dist/components/inputs/select.d.ts +17 -0
  41. package/dist/components/inputs/select.js +2 -0
  42. package/dist/components/inputs/select.js.map +1 -0
  43. package/dist/components/inputs/textfield.d.ts +7 -0
  44. package/dist/components/inputs/textfield.js +2 -0
  45. package/dist/components/inputs/textfield.js.map +1 -0
  46. package/dist/components/key-value-card/key-value-card.d.ts +17 -0
  47. package/dist/components/key-value-card/key-value-card.js +2 -0
  48. package/dist/components/key-value-card/key-value-card.js.map +1 -0
  49. package/dist/components/ui/alert.d.ts +8 -0
  50. package/dist/components/ui/alert.js +2 -0
  51. package/dist/components/ui/alert.js.map +1 -0
  52. package/dist/components/ui/avatar.d.ts +7 -0
  53. package/dist/components/ui/avatar.js +2 -0
  54. package/dist/components/ui/avatar.js.map +1 -0
  55. package/dist/components/ui/badge.d.ts +1 -0
  56. package/dist/components/ui/badge.js +2 -0
  57. package/dist/components/ui/badge.js.map +1 -0
  58. package/dist/components/ui/breadcrumbs.d.ts +10 -0
  59. package/dist/components/ui/breadcrumbs.js +2 -0
  60. package/dist/components/ui/breadcrumbs.js.map +1 -0
  61. package/dist/components/ui/button.d.ts +11 -0
  62. package/dist/components/ui/button.js +2 -0
  63. package/dist/components/ui/button.js.map +1 -0
  64. package/dist/components/ui/calendar.d.ts +16 -0
  65. package/dist/components/ui/calendar.js +2 -0
  66. package/dist/components/ui/calendar.js.map +1 -0
  67. package/dist/components/ui/card.d.ts +7 -0
  68. package/dist/components/ui/card.js +2 -0
  69. package/dist/components/ui/card.js.map +1 -0
  70. package/dist/components/ui/dialog.d.ts +18 -0
  71. package/dist/components/ui/dialog.js +2 -0
  72. package/dist/components/ui/dialog.js.map +1 -0
  73. package/dist/components/ui/disclosure.d.ts +18 -0
  74. package/dist/components/ui/disclosure.js +2 -0
  75. package/dist/components/ui/disclosure.js.map +1 -0
  76. package/dist/components/ui/list-box.d.ts +5 -0
  77. package/dist/components/ui/list-box.js +2 -0
  78. package/dist/components/ui/list-box.js.map +1 -0
  79. package/dist/components/ui/loader.d.ts +5 -0
  80. package/dist/components/ui/loader.js +2 -0
  81. package/dist/components/ui/loader.js.map +1 -0
  82. package/dist/components/ui/menu.d.ts +24 -0
  83. package/dist/components/ui/menu.js +2 -0
  84. package/dist/components/ui/menu.js.map +1 -0
  85. package/dist/components/ui/popover.d.ts +4 -0
  86. package/dist/components/ui/popover.js +2 -0
  87. package/dist/components/ui/popover.js.map +1 -0
  88. package/dist/components/ui/sidebar.d.ts +52 -0
  89. package/dist/components/ui/sidebar.js +2 -0
  90. package/dist/components/ui/sidebar.js.map +1 -0
  91. package/dist/components/ui/skeleton.d.ts +1 -0
  92. package/dist/components/ui/skeleton.js +2 -0
  93. package/dist/components/ui/skeleton.js.map +1 -0
  94. package/dist/components/ui/sonner.d.ts +4 -0
  95. package/dist/components/ui/sonner.js +2 -0
  96. package/dist/components/ui/sonner.js.map +1 -0
  97. package/dist/components/ui/table.d.ts +8 -0
  98. package/dist/components/ui/table.js +2 -0
  99. package/dist/components/ui/table.js.map +1 -0
  100. package/dist/components/ui/tabs.d.ts +5 -0
  101. package/dist/components/ui/tabs.js +2 -0
  102. package/dist/components/ui/tabs.js.map +1 -0
  103. package/dist/components/ui/timeline.d.ts +15 -0
  104. package/dist/components/ui/timeline.js +2 -0
  105. package/dist/components/ui/timeline.js.map +1 -0
  106. package/dist/components/ui/tooltip.d.ts +4 -0
  107. package/dist/components/ui/tooltip.js +2 -0
  108. package/dist/components/ui/tooltip.js.map +1 -0
  109. package/dist/utils/form-context.d.ts +4 -0
  110. package/dist/utils/form-context.js +2 -0
  111. package/dist/utils/form-context.js.map +1 -0
  112. package/dist/utils/form-hook.d.ts +23 -0
  113. package/dist/utils/form-hook.js +2 -0
  114. package/dist/utils/form-hook.js.map +1 -0
  115. package/dist/utils/primitives.d.ts +44 -0
  116. package/dist/utils/primitives.js +2 -0
  117. package/dist/utils/primitives.js.map +1 -0
  118. package/dist/utils/resource-names.d.ts +11 -0
  119. package/dist/utils/resource-names.js +2 -0
  120. package/dist/utils/resource-names.js.map +1 -0
  121. package/dist/utils/use-mobile.d.ts +1 -0
  122. package/dist/utils/use-mobile.js +2 -0
  123. package/dist/utils/use-mobile.js.map +1 -0
  124. package/package.json +16 -8
  125. package/lib/components/data-table/data-table-filter.tsx +0 -220
  126. package/lib/components/data-table/data-table.tsx +0 -593
  127. package/lib/components/data-table/table-commons.tsx +0 -233
  128. package/lib/components/inputs/checkbox.tsx +0 -72
  129. package/lib/components/inputs/date-picker.tsx +0 -130
  130. package/lib/components/inputs/datefield.tsx +0 -109
  131. package/lib/components/inputs/field.tsx +0 -106
  132. package/lib/components/inputs/id-search.tsx +0 -83
  133. package/lib/components/inputs/input-otp.tsx +0 -63
  134. package/lib/components/inputs/multi-select.tsx +0 -62
  135. package/lib/components/inputs/numberfield.tsx +0 -110
  136. package/lib/components/inputs/searchfield.tsx +0 -87
  137. package/lib/components/inputs/select-options.tsx +0 -303
  138. package/lib/components/inputs/select.tsx +0 -140
  139. package/lib/components/inputs/textfield.tsx +0 -96
  140. package/lib/components/key-value-card/key-value-card.tsx +0 -115
  141. package/lib/components/ui/alert.tsx +0 -32
  142. package/lib/components/ui/avatar.tsx +0 -22
  143. package/lib/components/ui/badge.tsx +0 -19
  144. package/lib/components/ui/breadcrumbs.tsx +0 -104
  145. package/lib/components/ui/button.tsx +0 -66
  146. package/lib/components/ui/calendar.tsx +0 -220
  147. package/lib/components/ui/card.tsx +0 -58
  148. package/lib/components/ui/dialog.tsx +0 -172
  149. package/lib/components/ui/disclosure.tsx +0 -113
  150. package/lib/components/ui/list-box.tsx +0 -86
  151. package/lib/components/ui/loader.tsx +0 -10
  152. package/lib/components/ui/menu.tsx +0 -168
  153. package/lib/components/ui/popover.tsx +0 -37
  154. package/lib/components/ui/sidebar.tsx +0 -552
  155. package/lib/components/ui/skeleton.tsx +0 -7
  156. package/lib/components/ui/sonner.tsx +0 -26
  157. package/lib/components/ui/table.tsx +0 -79
  158. package/lib/components/ui/tabs.tsx +0 -82
  159. package/lib/components/ui/timeline.tsx +0 -52
  160. package/lib/components/ui/tooltip.tsx +0 -30
  161. package/lib/tokens.scss +0 -89
  162. package/lib/utils/form-context.tsx +0 -7
  163. package/lib/utils/form-hook.tsx +0 -33
  164. package/lib/utils/primitives.ts +0 -68
  165. package/lib/utils/resource-names.tsx +0 -245
  166. package/lib/utils/use-mobile.tsx +0 -21
@@ -0,0 +1,2 @@
1
+ import{jsx as s,jsxs as l}from"react/jsx-runtime";import{ChevronDownIcon as u}from"lucide-react";import{useContext as d}from"react";import{DisclosureGroupStateContext as c,Disclosure as m,composeRenderProps as t,Heading as p,Button as f,DisclosurePanel as b,DisclosureGroup as g}from"react-aria-components";import{classNames as i}from"../../utils/primitives.js";import"clsx";function y({children:e,className:r,...o}){let n=d(c)!==null;return s(m,{...o,className:t(r,(a,D)=>i("group min-w-64",n&&"border-0 border-b last:border-b-0",a)),children:e})}function P({children:e,className:r}){return s(p,{className:"flex",children:l(f,{slot:"trigger",className:t(r,o=>i("group flex flex-1 items-center justify-between rounded-md py-4 font-medium ring-offset-background transition-all hover:underline","data-[disabled]:pointer-events-none data-[disabled]:opacity-50","data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-ring data-[focus-visible]:ring-offset-2","outline-none",o)),children:[e,s(u,{"aria-hidden":!0,className:i("size-4 shrink-0 transition-transform duration-200","group-data-[expanded]:rotate-180","group-data-[disabled]:opacity-50")})]})})}function j({children:e,className:r,...o}){return s(b,{...o,className:"overflow-hidden text-sm transition-all",children:s("div",{className:i("pb-4 pt-0",r),children:e})})}function C({children:e,className:r,...o}){return s(g,{...o,className:t(r,(n,a)=>i("",n)),children:e})}export{y as Disclosure,C as DisclosureGroup,P as DisclosureHeader,j as DisclosurePanel};
2
+ //# sourceMappingURL=disclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosure.js","sources":["../../../lib/components/ui/disclosure.tsx"],"sourcesContent":["import { ChevronDownIcon } from \"lucide-react\"\nimport { useContext } from \"react\"\nimport {\n Disclosure as AriaDisclosure,\n DisclosureGroup as AriaDisclosureGroup,\n DisclosureGroupProps as AriaDisclosureGroupProps,\n DisclosurePanel as AriaDisclosurePanel,\n DisclosurePanelProps as AriaDisclosurePanelProps,\n DisclosureProps as AriaDisclosureProps,\n Button,\n ButtonProps,\n composeRenderProps,\n DisclosureGroupStateContext,\n Heading,\n} from \"react-aria-components\"\n\nimport { classNames } from \"lib/utils/primitives\"\n\nexport interface DisclosureProps extends AriaDisclosureProps {\n children: React.ReactNode\n}\n\nexport function Disclosure({ children, className, ...props }: DisclosureProps) {\n let isInGroup = useContext(DisclosureGroupStateContext) !== null\n return (\n <AriaDisclosure\n {...props}\n className={composeRenderProps(className, (className, _) =>\n classNames(\n \"group min-w-64\",\n isInGroup && \"border-0 border-b last:border-b-0\",\n className\n )\n )}\n >\n {children}\n </AriaDisclosure>\n )\n}\n\nexport interface DisclosureHeaderProps {\n children: React.ReactNode\n className?: ButtonProps[\"className\"]\n}\n\nexport function DisclosureHeader({ children, className }: DisclosureHeaderProps) {\n return (\n <Heading className=\"flex\">\n <Button\n slot=\"trigger\"\n className={composeRenderProps(className, (className) => {\n return classNames(\n \"group flex flex-1 items-center justify-between rounded-md py-4 font-medium ring-offset-background transition-all hover:underline\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n \"data-[focus-visible]:outline-none data-[focus-visible]:ring-2 data-[focus-visible]:ring-ring data-[focus-visible]:ring-offset-2\",\n \"outline-none\",\n className\n )\n })}\n >\n {children}\n <ChevronDownIcon\n aria-hidden\n className={classNames(\n \"size-4 shrink-0 transition-transform duration-200\",\n \"group-data-[expanded]:rotate-180\",\n \"group-data-[disabled]:opacity-50\"\n )}\n />\n </Button>\n </Heading>\n )\n}\n\nexport interface DisclosurePanelProps extends AriaDisclosurePanelProps {\n children: React.ReactNode\n}\n\nexport function DisclosurePanel({\n children,\n className,\n ...props\n}: DisclosurePanelProps) {\n return (\n <AriaDisclosurePanel\n {...props}\n className={\"overflow-hidden text-sm transition-all\"}\n >\n <div className={classNames(\"pb-4 pt-0\", className)}>{children}</div>\n </AriaDisclosurePanel>\n )\n}\n\nexport interface DisclosureGroupProps extends AriaDisclosureGroupProps {\n children: React.ReactNode\n}\n\nexport function DisclosureGroup({\n children,\n className,\n ...props\n}: DisclosureGroupProps) {\n return (\n <AriaDisclosureGroup\n {...props}\n className={composeRenderProps(className, (className, _) =>\n classNames(\"\", className)\n )}\n >\n {children}\n </AriaDisclosureGroup>\n )\n}\n"],"names":["Disclosure","children","className","props","isInGroup","useContext","DisclosureGroupStateContext","jsx","AriaDisclosure","composeRenderProps","_","classNames","DisclosureHeader","Heading","jsxs","Button","ChevronDownIcon","DisclosurePanel","AriaDisclosurePanel","DisclosureGroup","AriaDisclosureGroup"],"mappings":"uXAsBO,SAASA,EAAW,CAAE,SAAAC,EAAU,UAAAC,EAAW,GAAGC,GAA0B,CAC7E,IAAIC,EAAYC,EAAWC,CAA2B,IAAM,KAC5D,OACEC,EAACC,EAAA,CACE,GAAGL,EACJ,UAAWM,EAAmBP,EAAW,CAACA,EAAWQ,IACnDC,EACE,iBACAP,GAAa,oCACbF,CAAA,CACF,EAGD,SAAAD,CAAA,CAAA,CAGP,CAOO,SAASW,EAAiB,CAAE,SAAAX,EAAU,UAAAC,GAAoC,CAC/E,OACEK,EAACM,EAAA,CAAQ,UAAU,OACjB,SAAAC,EAACC,EAAA,CACC,KAAK,UACL,UAAWN,EAAmBP,EAAYA,GACjCS,EACL,mIACA,iEACA,kIACA,eACAT,CAAA,CAEH,EAEA,SAAA,CAAAD,EACDM,EAACS,EAAA,CACC,cAAW,GACX,UAAWL,EACT,oDACA,mCACA,kCAAA,CACF,CAAA,CACF,CAAA,CAAA,EAEJ,CAEJ,CAMO,SAASM,EAAgB,CAC9B,SAAAhB,EACA,UAAAC,EACA,GAAGC,CACL,EAAyB,CACvB,OACEI,EAACW,EAAA,CACE,GAAGf,EACJ,UAAW,yCAEX,WAAC,MAAA,CAAI,UAAWQ,EAAW,YAAaT,CAAS,EAAI,SAAAD,CAAA,CAAS,CAAA,CAAA,CAGpE,CAMO,SAASkB,EAAgB,CAC9B,SAAAlB,EACA,UAAAC,EACA,GAAGC,CACL,EAAyB,CACvB,OACEI,EAACa,EAAA,CACE,GAAGjB,EACJ,UAAWM,EAAmBP,EAAW,CAACA,EAAWQ,IACnDC,EAAW,GAAIT,CAAS,CAAA,EAGzB,SAAAD,CAAA,CAAA,CAGP"}
@@ -0,0 +1,5 @@
1
+ import { Collection as AriaCollection, Header as AriaHeader, ListBoxItemProps as AriaListBoxItemProps, ListBoxProps as AriaListBoxProps } from 'react-aria-components';
2
+ export declare const ListBoxCollection: typeof AriaCollection;
3
+ export declare function ListBox<T extends object>({ className, ...props }: AriaListBoxProps<T>): import("react/jsx-runtime").JSX.Element;
4
+ export declare function ListBoxItem<T extends object>({ className, children, ...props }: AriaListBoxItemProps<T>): import("react/jsx-runtime").JSX.Element;
5
+ export declare function ListBoxHeader({ className, ...props }: React.ComponentProps<typeof AriaHeader>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as o,jsxs as c,Fragment as m}from"react/jsx-runtime";import{ListBoxItem as l,composeRenderProps as r,Collection as d,ListBox as p,Header as u}from"react-aria-components";import{classNames as n}from"../../utils/primitives.js";import{Check as x}from"lucide-react";import"clsx";const v=d;function y({className:t,...e}){return o(p,{className:r(t,s=>n(s,"group overflow-auto border bg-popover p-1 text-popover-foreground shadow-md outline-none","data-[empty]:p-6 data-[empty]:text-center data-[empty]:text-sm")),...e})}function N({className:t,children:e,...s}){return o(l,{textValue:s.textValue||(typeof e=="string"?e:void 0),className:r(t,a=>n("relative flex w-full cursor-default select-none items-center px-2 py-1.5 text-sm outline-none","disabled-muted","data-[focused]:bg-accent data-[focused]:text-accent-foreground","data-[hovered]:bg-accent data-[hovered]:text-accent-foreground","data-[selection-mode]:pl-input",a)),...s,children:r(e,(a,i)=>c(m,{children:[i.isSelected&&o("span",{className:"absolute left-2 flex size-icon items-center justify-center",children:o(x,{className:"size-icon"})}),a]}))})}function h({className:t,...e}){return o(u,{className:n("py-1.5 pl-input pr-2 text-sm font-semibold",t),...e})}export{y as ListBox,v as ListBoxCollection,h as ListBoxHeader,N as ListBoxItem};
2
+ //# sourceMappingURL=list-box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-box.js","sources":["../../../lib/components/ui/list-box.tsx"],"sourcesContent":["import {\n Collection as AriaCollection,\n Header as AriaHeader,\n ListBox as AriaListBox,\n ListBoxItem as AriaListBoxItem,\n ListBoxItemProps as AriaListBoxItemProps,\n ListBoxProps as AriaListBoxProps,\n composeRenderProps\n} from \"react-aria-components\"\n\nimport { classNames } from \"lib/utils/primitives\"\nimport { Check } from \"lucide-react\"\n\n\nexport const ListBoxCollection = AriaCollection\n\nexport function ListBox<T extends object>({\n className,\n ...props\n}: AriaListBoxProps<T>) {\n return (\n <AriaListBox\n className={composeRenderProps(className, (className) =>\n classNames(\n className,\n \"group overflow-auto border bg-popover p-1 text-popover-foreground shadow-md outline-none\",\n /* Empty */\n \"data-[empty]:p-6 data-[empty]:text-center data-[empty]:text-sm\"\n )\n )}\n {...props}\n />\n )\n}\n\nexport function ListBoxItem<T extends object>({\n className,\n children,\n ...props\n}: AriaListBoxItemProps<T>) {\n return (\n <AriaListBoxItem\n textValue={\n props.textValue || (typeof children === \"string\" ? children : undefined)\n }\n className={composeRenderProps(className, (className) =>\n classNames(\n \"relative flex w-full cursor-default select-none items-center px-2 py-1.5 text-sm outline-none\",\n /* Disabled */\n \"disabled-muted\",\n /* Focused */\n \"data-[focused]:bg-accent data-[focused]:text-accent-foreground\",\n /* Hovered */\n \"data-[hovered]:bg-accent data-[hovered]:text-accent-foreground\",\n /* Selection */\n \"data-[selection-mode]:pl-input\",\n className\n )\n )}\n {...props}\n >\n {composeRenderProps(children, (children, renderProps) => (\n <>\n {renderProps.isSelected && (\n <span className=\"absolute left-2 flex size-icon items-center justify-center\">\n <Check className=\"size-icon\" />\n </span>\n )}\n {children}\n </>\n ))}\n </AriaListBoxItem>\n )\n}\n\nexport function ListBoxHeader({\n className,\n ...props\n}: React.ComponentProps<typeof AriaHeader>) {\n return (\n <AriaHeader\n className={classNames(\"py-1.5 pl-input pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n )\n}\n"],"names":["ListBoxCollection","AriaCollection","ListBox","className","props","jsx","AriaListBox","composeRenderProps","classNames","ListBoxItem","children","AriaListBoxItem","renderProps","jsxs","Fragment","Check","ListBoxHeader","AriaHeader"],"mappings":"8RAcO,MAAMA,EAAoBC,EAE1B,SAASC,EAA0B,CACxC,UAAAC,EACA,GAAGC,CACL,EAAwB,CACtB,OACEC,EAACC,EAAA,CACC,UAAWC,EAAmBJ,EAAYA,GACxCK,EACEL,EACA,2FAEA,gEAAA,CACF,EAED,GAAGC,CAAA,CAAA,CAGV,CAEO,SAASK,EAA8B,CAC5C,UAAAN,EACA,SAAAO,EACA,GAAGN,CACL,EAA4B,CAC1B,OACEC,EAACM,EAAA,CACC,UACEP,EAAM,YAAc,OAAOM,GAAa,SAAWA,EAAW,QAEhE,UAAWH,EAAmBJ,EAAYA,GACxCK,EACE,gGAEA,iBAEA,iEAEA,iEAEA,iCACAL,CAAA,CACF,EAED,GAAGC,EAEH,SAAAG,EAAmBG,EAAU,CAACA,EAAUE,IACvCC,EAAAC,EAAA,CACG,SAAA,CAAAF,EAAY,cACV,OAAA,CAAK,UAAU,6DACd,SAAAP,EAACU,EAAA,CAAM,UAAU,WAAA,CAAY,CAAA,CAC/B,EAEDL,CAAA,EACH,CACD,CAAA,CAAA,CAGP,CAEO,SAASM,EAAc,CAC5B,UAAAb,EACA,GAAGC,CACL,EAA4C,CAC1C,OACEC,EAACY,EAAA,CACC,UAAWT,EAAW,6CAA8CL,CAAS,EAC5E,GAAGC,CAAA,CAAA,CAGV"}
@@ -0,0 +1,5 @@
1
+ interface LoaderProps {
2
+ className?: string;
3
+ }
4
+ export declare function Loader({ className }: LoaderProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,2 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{classNames as m}from"../../utils/primitives.js";import{Loader2 as i}from"lucide-react";import"clsx";function n({className:o}){return r(i,{className:m("animate-spin size-icon",o)})}export{n as Loader};
2
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sources":["../../../lib/components/ui/loader.tsx"],"sourcesContent":["import { classNames } from \"lib/utils/primitives\";\nimport { Loader2 } from \"lucide-react\";\n\ninterface LoaderProps {\n\tclassName?: string; // Define props interface\n}\n\nexport function Loader({ className }: LoaderProps) {\n\treturn <Loader2 className={classNames(`animate-spin size-icon`, className)} />;\n}\n"],"names":["Loader","className","Loader2","classNames"],"mappings":"mJAOO,SAASA,EAAO,CAAE,UAAAC,GAA0B,CAClD,SAAQC,EAAA,CAAQ,UAAWC,EAAW,yBAA0BF,CAAS,EAAG,CAC7E"}
@@ -0,0 +1,24 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import { Header as AriaHeader, Keyboard as AriaKeyboard, MenuItemProps as AriaMenuItemProps, MenuProps as AriaMenuProps, MenuTrigger as AriaMenuTrigger, MenuTriggerProps as AriaMenuTriggerProps, SeparatorProps as AriaSeparatorProps, PopoverProps } from 'react-aria-components';
3
+ import { buttonVariants } from './button';
4
+ export declare const MenuTrigger: typeof AriaMenuTrigger;
5
+ export declare const MenuSubTrigger: (props: import('react-aria-components').SubmenuTriggerProps & React.RefAttributes<HTMLDivElement>) => import('react').ReactElement | null;
6
+ export declare const MenuCollection: typeof import('react-aria-components').Collection;
7
+ export declare function MenuPopover({ className, ...props }: PopoverProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function Menu<T extends object>({ className, ...props }: AriaMenuProps<T>): import("react/jsx-runtime").JSX.Element;
9
+ export declare function MenuItem({ children, className, ...props }: AriaMenuItemProps & {
10
+ ref?: React.Ref<HTMLDivElement>;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ interface MenuHeaderProps extends React.ComponentProps<typeof AriaHeader> {
13
+ inset?: boolean;
14
+ separator?: boolean;
15
+ }
16
+ export declare function MenuHeader({ className, inset, separator, ...props }: MenuHeaderProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function MenuSeparator({ className, ...props }: AriaSeparatorProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function MenuKeyboard({ className, ...props }: React.ComponentProps<typeof AriaKeyboard>): import("react/jsx-runtime").JSX.Element;
19
+ interface MenuProps<T> extends AriaMenuProps<T>, VariantProps<typeof buttonVariants>, Omit<AriaMenuTriggerProps, "children"> {
20
+ label?: React.ReactNode;
21
+ isDisabled?: boolean;
22
+ }
23
+ export declare function EasyMenu<T extends object>({ label, children, variant, isDisabled, size, ...props }: MenuProps<T>): import("react/jsx-runtime").JSX.Element;
24
+ export {};
@@ -0,0 +1,2 @@
1
+ import{jsxs as s,jsx as o,Fragment as m}from"react/jsx-runtime";import{MenuTrigger as l,MenuItem as p,composeRenderProps as u,Menu as d,SubmenuTrigger as f,Header as g,Separator as x,Keyboard as b}from"react-aria-components";import{classNames as a}from"../../utils/primitives.js";import{Dot as M,Check as h,ChevronRight as N}from"lucide-react";import{SelectPopover as y}from"../inputs/select.js";import{Button as v}from"./button.js";import{ListBoxCollection as S}from"./list-box.js";import"clsx";import"../inputs/field.js";import"class-variance-authority";import"../../utils/form-context.js";import"@tanstack/react-form";import"./popover.js";import"./loader.js";const T=l,L=f,q=S;function _({className:e,...t}){return o(y,{className:u(e,n=>a(n)),...t})}function z({className:e,...t}){return o(d,{className:a("overflow-auto p-1 outline-0 [clip-path:inset(0_0_0_0_round_calc(var(--radius)-2px))]",e),escapeKeyBehavior:"none",...t})}function A({children:e,className:t,...n}){return o(p,{textValue:n.textValue||(typeof e=="string"?e:void 0),className:u(t,r=>a("relative flex cursor-default select-none items-center gap-2 px-2 py-1.5 text-sm outline-none transition-colors","disabled-muted","data-[focused]:bg-accent data-[focused]:text-accent-foreground ","data-[selection-mode]:pl-input",r)),...n,children:u(e,(r,i)=>s(m,{children:[o("span",{className:"absolute left-2 flex size-icon items-center justify-center",children:i.isSelected&&s(m,{children:[i.selectionMode=="single"&&o(M,{className:"size-icon fill-current"}),i.selectionMode=="multiple"&&o(h,{className:"size-icon"})]})}),r,i.hasSubmenu&&o(N,{className:"ml-auto size-icon"})]}))})}function G({className:e,inset:t,separator:n=!0,...r}){return o(g,{className:a("px-3 py-1.5 text-sm font-semibold",t&&"pl-input",n&&"-mx-1 mb-1 border-b border-b-border pb-2.5",e),...r})}function J({className:e,...t}){return o(x,{className:a("-mx-1 my-1 h-px bg-muted",e),...t})}function O({className:e,...t}){return o(b,{className:a("ml-auto text-xs tracking-widest opacity-60",e),...t})}function P({label:e,children:t,variant:n,isDisabled:r,size:i,...c}){return s(T,{...c,children:[o(v,{isDisabled:r,type:"button",variant:n,size:i,children:e}),o(_,{className:"overflow-auto",children:o(z,{...c,children:t})})]})}export{P as EasyMenu,z as Menu,q as MenuCollection,G as MenuHeader,A as MenuItem,O as MenuKeyboard,_ as MenuPopover,J as MenuSeparator,L as MenuSubTrigger,T as MenuTrigger};
2
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sources":["../../../lib/components/ui/menu.tsx"],"sourcesContent":["import { VariantProps } from \"class-variance-authority\"\nimport {\n Header as AriaHeader,\n Keyboard as AriaKeyboard,\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuItemProps as AriaMenuItemProps,\n MenuProps as AriaMenuProps,\n MenuTrigger as AriaMenuTrigger,\n MenuTriggerProps as AriaMenuTriggerProps,\n Separator as AriaSeparator,\n SeparatorProps as AriaSeparatorProps,\n SubmenuTrigger as AriaSubmenuTrigger,\n composeRenderProps,\n PopoverProps,\n} from \"react-aria-components\"\n\nimport { classNames } from \"lib/utils/primitives\"\n\nimport { Check, ChevronRight, Dot } from \"lucide-react\"\nimport { SelectPopover } from \"../inputs/select\"\nimport { Button, buttonVariants } from \"./button\"\nimport { ListBoxCollection } from \"./list-box\"\n\nexport const MenuTrigger = AriaMenuTrigger\nexport const MenuSubTrigger = AriaSubmenuTrigger\nexport const MenuCollection = ListBoxCollection\n\nexport function MenuPopover({ className, ...props }: PopoverProps) {\n return (\n <SelectPopover\n className={composeRenderProps(className, (className) =>\n classNames(className)\n )}\n {...props}\n />\n )\n}\n\nexport function Menu<T extends object>({ className, ...props }: AriaMenuProps<T>) {\n return (\n <AriaMenu\n className={classNames(\n \"overflow-auto p-1 outline-0 [clip-path:inset(0_0_0_0_round_calc(var(--radius)-2px))]\",\n className\n )}\n escapeKeyBehavior=\"none\"\n {...props}\n />\n )\n}\n\nexport function MenuItem({ children, className, ...props }: AriaMenuItemProps & { ref?: React.Ref<HTMLDivElement> }) {\n return (\n <AriaMenuItem\n textValue={\n props.textValue || (typeof children === \"string\" ? children : undefined)\n }\n className={composeRenderProps(className, (className) =>\n classNames(\n \"relative flex cursor-default select-none items-center gap-2 px-2 py-1.5 text-sm outline-none transition-colors\",\n /* Disabled */\n \"disabled-muted\",\n /* Focused */\n \"data-[focused]:bg-accent data-[focused]:text-accent-foreground \",\n /* Selection Mode */\n \"data-[selection-mode]:pl-input\",\n className\n )\n )}\n {...props}\n >\n {composeRenderProps(children, (children, renderProps) => (\n <>\n <span className=\"absolute left-2 flex size-icon items-center justify-center\">\n {renderProps.isSelected && (\n <>\n {renderProps.selectionMode == \"single\" && (\n <Dot className=\"size-icon fill-current\" />\n )}\n {renderProps.selectionMode == \"multiple\" && (\n <Check className=\"size-icon\" />\n )}\n </>\n )}\n </span>\n\n {children}\n\n {renderProps.hasSubmenu && <ChevronRight className=\"ml-auto size-icon\" />}\n </>\n ))}\n </AriaMenuItem>\n )\n}\n\ninterface MenuHeaderProps extends React.ComponentProps<typeof AriaHeader> {\n inset?: boolean\n separator?: boolean\n}\n\nexport function MenuHeader({\n className,\n inset,\n separator = true,\n ...props\n}: MenuHeaderProps) {\n return (\n <AriaHeader\n className={classNames(\n \"px-3 py-1.5 text-sm font-semibold\",\n inset && \"pl-input\",\n separator && \"-mx-1 mb-1 border-b border-b-border pb-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport function MenuSeparator({ className, ...props }: AriaSeparatorProps) {\n return (\n <AriaSeparator\n className={classNames(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport function MenuKeyboard({\n className,\n ...props\n}: React.ComponentProps<typeof AriaKeyboard>) {\n return (\n <AriaKeyboard\n className={classNames(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\ninterface MenuProps<T>\n extends AriaMenuProps<T>,\n VariantProps<typeof buttonVariants>,\n Omit<AriaMenuTriggerProps, \"children\"> {\n label?: React.ReactNode\n isDisabled?: boolean\n}\n// TODO name this better\nexport function EasyMenu<T extends object>({\n label,\n children,\n variant,\n isDisabled,\n size,\n ...props\n}: MenuProps<T>) {\n return (\n <MenuTrigger {...props}>\n <Button isDisabled={isDisabled} type=\"button\" variant={variant} size={size}>\n {label}\n </Button>\n <MenuPopover className=\"overflow-auto\">\n <Menu {...props}>{children}</Menu>\n </MenuPopover>\n </MenuTrigger>\n )\n}\n"],"names":["MenuTrigger","AriaMenuTrigger","MenuSubTrigger","AriaSubmenuTrigger","MenuCollection","ListBoxCollection","MenuPopover","className","props","jsx","SelectPopover","composeRenderProps","classNames","Menu","AriaMenu","MenuItem","children","AriaMenuItem","renderProps","jsxs","Fragment","Dot","Check","ChevronRight","MenuHeader","inset","separator","AriaHeader","MenuSeparator","AriaSeparator","MenuKeyboard","AriaKeyboard","EasyMenu","label","variant","isDisabled","size","Button"],"mappings":"spBAwBO,MAAMA,EAAcC,EACdC,EAAiBC,EACjBC,EAAiBC,EAEvB,SAASC,EAAY,CAAE,UAAAC,EAAW,GAAGC,GAAuB,CACjE,OACEC,EAACC,EAAA,CACC,UAAWC,EAAmBJ,EAAYA,GACxCK,EAAWL,CAAS,CAAA,EAErB,GAAGC,CAAA,CAAA,CAGV,CAEO,SAASK,EAAuB,CAAE,UAAAN,EAAW,GAAGC,GAA2B,CAChF,OACEC,EAACK,EAAA,CACC,UAAWF,EACT,uFACAL,CAAA,EAEF,kBAAkB,OACjB,GAAGC,CAAA,CAAA,CAGV,CAEO,SAASO,EAAS,CAAE,SAAAC,EAAU,UAAAT,EAAW,GAAGC,GAAkE,CACnH,OACEC,EAACQ,EAAA,CACC,UACET,EAAM,YAAc,OAAOQ,GAAa,SAAWA,EAAW,QAEhE,UAAWL,EAAmBJ,EAAYA,GACxCK,EACE,iHAEA,iBAEA,kEAEA,iCACAL,CAAA,CACF,EAED,GAAGC,EAEH,SAAAG,EAAmBK,EAAU,CAACA,EAAUE,IACvCC,EAAAC,EAAA,CACE,SAAA,CAAAX,EAAC,OAAA,CAAK,UAAU,6DACb,SAAAS,EAAY,YACXC,EAAAC,EAAA,CACG,SAAA,CAAAF,EAAY,eAAiB,UAC5BT,EAACY,EAAA,CAAI,UAAU,yBAAyB,EAEzCH,EAAY,eAAiB,YAC5BT,EAACa,EAAA,CAAM,UAAU,WAAA,CAAY,CAAA,CAAA,CAEjC,CAAA,CAEJ,EAECN,EAEAE,EAAY,YAAcT,EAACc,EAAA,CAAa,UAAU,mBAAA,CAAoB,CAAA,EACzE,CACD,CAAA,CAAA,CAGP,CAOO,SAASC,EAAW,CACzB,UAAAjB,EACA,MAAAkB,EACA,UAAAC,EAAY,GACZ,GAAGlB,CACL,EAAoB,CAClB,OACEC,EAACkB,EAAA,CACC,UAAWf,EACT,oCACAa,GAAS,WACTC,GAAa,6CACbnB,CAAA,EAED,GAAGC,CAAA,CAAA,CAGV,CAEO,SAASoB,EAAc,CAAE,UAAArB,EAAW,GAAGC,GAA6B,CACzE,OACEC,EAACoB,EAAA,CACC,UAAWjB,EAAW,2BAA4BL,CAAS,EAC1D,GAAGC,CAAA,CAAA,CAGV,CAEO,SAASsB,EAAa,CAC3B,UAAAvB,EACA,GAAGC,CACL,EAA8C,CAC5C,OACEC,EAACsB,EAAA,CACC,UAAWnB,EAAW,6CAA8CL,CAAS,EAC5E,GAAGC,CAAA,CAAA,CAGV,CASO,SAASwB,EAA2B,CACzC,MAAAC,EACA,SAAAjB,EACA,QAAAkB,EACA,WAAAC,EACA,KAAAC,EACA,GAAG5B,CACL,EAAiB,CACf,OACEW,EAACnB,EAAA,CAAa,GAAGQ,EACf,SAAA,CAAAC,EAAC4B,GAAO,WAAAF,EAAwB,KAAK,SAAS,QAAAD,EAAkB,KAAAE,EAC7D,SAAAH,EACH,EACAxB,EAACH,GAAY,UAAU,gBACrB,WAACO,EAAA,CAAM,GAAGL,EAAQ,SAAAQ,CAAA,CAAS,CAAA,CAC7B,CAAA,EACF,CAEJ"}
@@ -0,0 +1,4 @@
1
+ import { DialogProps as AriaDialogProps, DialogTrigger as AriaDialogTrigger, PopoverProps as AriaPopoverProps } from 'react-aria-components';
2
+ export declare const PopoverTrigger: typeof AriaDialogTrigger;
3
+ export declare const Popover: ({ className, offset, ...props }: AriaPopoverProps) => import("react/jsx-runtime").JSX.Element;
4
+ export declare function PopoverDialog({ className, ...props }: AriaDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{Popover as n,composeRenderProps as m,DialogTrigger as p,Dialog as d}from"react-aria-components";import{classNames as a}from"../../utils/primitives.js";import"clsx";const c=p,u=({className:o,offset:e=4,...i})=>t(n,{offset:e,className:m(o,r=>a("z-50 border bg-popover text-popover-foreground outline-none max-w-lg","data-[entering]:animate-in data-[entering]:fade-in-0 data-[entering]:zoom-in-95","data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95","data-[placement=bottom]:slide-in-from-top-2 data-[placement=left]:slide-in-from-right-2 data-[placement=right]:slide-in-from-left-2 data-[placement=top]:slide-in-from-bottom-2",r)),...i});function v({className:o,...e}){return t(d,{className:a("p-icon outline-0",o),...e})}export{u as Popover,v as PopoverDialog,c as PopoverTrigger};
2
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.js","sources":["../../../lib/components/ui/popover.tsx"],"sourcesContent":["import {\n\tDialog as AriaDialog,\n\tDialogProps as AriaDialogProps,\n\tDialogTrigger as AriaDialogTrigger,\n\tPopover as AriaPopover,\n\tPopoverProps as AriaPopoverProps,\n\tcomposeRenderProps,\n} from \"react-aria-components\"\n\nimport { classNames } from \"lib/utils/primitives\"\n\nexport const PopoverTrigger = AriaDialogTrigger\n\nexport const Popover = ({ className, offset = 4, ...props }: AriaPopoverProps) => (\n\t<AriaPopover\n\t\toffset={offset}\n\t\tclassName={composeRenderProps(className, (className) =>\n\t\t\tclassNames(\n\t\t\t\t\"z-50 border bg-popover text-popover-foreground outline-none max-w-lg\",\n\t\t\t\t/* Entering */\n\t\t\t\t\"data-[entering]:animate-in data-[entering]:fade-in-0 data-[entering]:zoom-in-95\",\n\t\t\t\t/* Exiting */\n\t\t\t\t\"data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95\",\n\t\t\t\t/* Placement */\n\t\t\t\t\"data-[placement=bottom]:slide-in-from-top-2 data-[placement=left]:slide-in-from-right-2 data-[placement=right]:slide-in-from-left-2 data-[placement=top]:slide-in-from-bottom-2\",\n\t\t\t\tclassName\n\t\t\t)\n\t\t)}\n\t\t{...props}\n\t/>\n)\n\nexport function PopoverDialog({ className, ...props }: AriaDialogProps) {\n\treturn (\n\t\t<AriaDialog className={classNames(\"p-icon outline-0\", className)} {...props} />\n\t)\n}\n"],"names":["PopoverTrigger","AriaDialogTrigger","Popover","className","offset","props","jsx","AriaPopover","composeRenderProps","classNames","PopoverDialog","AriaDialog"],"mappings":"mNAWO,MAAMA,EAAiBC,EAEjBC,EAAU,CAAC,CAAE,UAAAC,EAAW,OAAAC,EAAS,EAAG,GAAGC,KACnDC,EAACC,EAAA,CACA,OAAAH,EACA,UAAWI,EAAmBL,EAAYA,GACzCM,EACC,uEAEA,kFAEA,kFAEA,kLACAN,CAAA,CACD,EAEA,GAAGE,CAAA,CACL,EAGM,SAASK,EAAc,CAAE,UAAAP,EAAW,GAAGE,GAA0B,CACvE,OACCC,EAACK,GAAW,UAAWF,EAAW,mBAAoBN,CAAS,EAAI,GAAGE,EAAO,CAE/E"}
@@ -0,0 +1,52 @@
1
+ import { Button } from 'lib/components/ui/button';
2
+ import { Tooltip } from 'lib/components/ui/tooltip';
3
+ type SidebarContextProps = {
4
+ state: "expanded" | "collapsed";
5
+ open: boolean;
6
+ setOpen: (open: boolean) => void;
7
+ openMobile: boolean;
8
+ setOpenMobile: (open: boolean) => void;
9
+ isMobile: boolean;
10
+ toggleSidebar: () => void;
11
+ };
12
+ export declare const SidebarContext: import('react').Context<SidebarContextProps | null>;
13
+ export declare function useSidebar(): SidebarContextProps;
14
+ export declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }: React.ComponentProps<'div'> & {
15
+ defaultOpen?: boolean;
16
+ open?: boolean;
17
+ onOpenChange?: (open: boolean) => void;
18
+ }): import("react/jsx-runtime").JSX.Element;
19
+ export declare function Sidebar({ side, variant, collapsible, className, children, ...props }: React.ComponentProps<"div"> & {
20
+ side?: "left" | "right";
21
+ variant?: "sidebar" | "floating" | "inset";
22
+ collapsible?: "offcanvas" | "icon" | "none";
23
+ }): import("react/jsx-runtime").JSX.Element;
24
+ export declare function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
25
+ export declare const SidebarRail: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
26
+ export declare function SidebarInset({ className, ...props }: React.ComponentProps<'main'>): import("react/jsx-runtime").JSX.Element;
27
+ export declare function SidebarHeader({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
28
+ export declare function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
29
+ export declare function SidebarContent({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
30
+ export declare function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
31
+ export declare function SidebarGroupLabel({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
32
+ export declare function SidebarGroupAction({ className, ...props }: React.ComponentProps<"button">): import("react/jsx-runtime").JSX.Element;
33
+ export declare function SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
34
+ export declare function SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>): import("react/jsx-runtime").JSX.Element;
35
+ export declare function SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>): import("react/jsx-runtime").JSX.Element;
36
+ export declare function SidebarMenuAction({ className, showOnHover, ...props }: React.ComponentProps<"button"> & {
37
+ showOnHover?: boolean;
38
+ }): import("react/jsx-runtime").JSX.Element;
39
+ export declare function SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
40
+ export declare function SidebarMenuSkeleton({ className, showIcon, ...props }: React.ComponentProps<"div"> & {
41
+ showIcon?: boolean;
42
+ }): import("react/jsx-runtime").JSX.Element;
43
+ export declare function SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>): import("react/jsx-runtime").JSX.Element;
44
+ export declare function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>): import("react/jsx-runtime").JSX.Element;
45
+ export declare function SidebarMenuButton({ isActive, tooltip, className, ...props }: React.ComponentProps<"button"> & {
46
+ isActive?: boolean;
47
+ tooltip?: React.ComponentProps<typeof Tooltip>;
48
+ }): import("react/jsx-runtime").JSX.Element;
49
+ export declare function SidebarMenuSubButton({ isActive, className, ...props }: React.ComponentProps<'a'> & {
50
+ isActive?: boolean;
51
+ }): import("react/jsx-runtime").JSX.Element;
52
+ export {};
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as a,Fragment as I,jsxs as x}from"react/jsx-runtime";import{PanelLeftClose as D,PanelLeftOpen as T}from"lucide-react";import{Button as B}from"./button.js";import{DialogTrigger as O,DialogOverlay as E,DialogContent as R}from"./dialog.js";import{Skeleton as w}from"./skeleton.js";import{TooltipTrigger as A,Tooltip as L}from"./tooltip.js";import{classNames as r}from"../../utils/primitives.js";import{useIsMobile as j}from"../../utils/use-mobile.js";import{createContext as H,forwardRef as G,use as K,useState as S,useCallback as N,useEffect as P,useMemo as k}from"react";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"clsx";const W="16rem",q="18rem",F="3rem",U="b",y=H(null);function h(){const t=K(y);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function se({defaultOpen:t=!0,open:e,onOpenChange:i,className:n,style:s,children:d,...c}){const l=j(),[p,b]=S(!1),[_,z]=S(t),f=e??_,m=N(o=>{const u=typeof o=="function"?o(f):o;i?i(u):z(u)},[i,f]),g=N(()=>l?b(o=>!o):m(o=>!o),[l,m,b]);P(()=>{const o=u=>{u.key===U&&(u.metaKey||u.ctrlKey)&&(u.preventDefault(),g())};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[g]);const v=f?"expanded":"collapsed",C=k(()=>({state:v,open:f,setOpen:m,isMobile:l,openMobile:p,setOpenMobile:b,toggleSidebar:g}),[v,f,m,l,p,b,g]);return a(y.Provider,{value:C,children:a("div",{style:{"--sidebar-width":W,"--sidebar-width-icon":F,...s},className:r("group/sidebar-wrapper flex w-full has-[[data-variant=inset]]:bg-sidebar-background",n),...c,children:d})})}function de({side:t="left",variant:e="sidebar",collapsible:i="offcanvas",className:n,children:s,...d}){const{isMobile:c,state:l,openMobile:p,setOpenMobile:b}=h();return i==="none"?a("div",{className:r("flex h-full w-[--sidebar-width] flex-col bg-sidebar-background text-sidebar-foreground",n),...d,children:s}):c?a(O,{style:{"--sidebar-width":q},isOpen:p,onOpenChange:b,...d,children:a(E,{children:a(R,{"data-sidebar":"sidebar","data-mobile":"true",className:"w-[--sidebar-width] p-0 [&>button]:hidden",side:"right",children:()=>a(I,{children:s})})})}):x("div",{className:"group peer hidden text-sidebar-foreground md:block","data-state":l,"data-collapsible":l==="collapsed"?i:"","data-variant":e,"data-side":t,children:[a("div",{className:r("relative w-(--sidebar-width) bg-sidebar-background transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",e==="floating"||e==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]":"group-data-[collapsible=icon]:w-[--sidebar-width-icon]")}),a("div",{className:r("absolute z-10 hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",t==="left"?"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]":"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",e==="floating"||e==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]":"group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l",n),...d,children:a("div",{"data-sidebar":"sidebar",className:"flex h-full w-full flex-col bg-sidebar-background group-data-[variant=floating]:border group-data-[variant=floating]:border-border group-data-[variant=floating]:shadow",children:s})})]})}function le({className:t,onClick:e,...i}){const{toggleSidebar:n,open:s}=h();return a(B,{"data-sidebar":"trigger",variant:"neutral",size:"icon",onClick:d=>{e?.(d),n()},...i,children:s?a(D,{}):a(T,{})})}const V=G(({className:t,...e},i)=>{const{toggleSidebar:n}=h();return a("button",{ref:i,"data-sidebar":"rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:n,title:"Toggle Sidebar",className:r("absolute inset-y-0 z-20 hidden w-icon -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-border group-data-[side=left]:-right-icon group-data-[side=right]:left-0 sm:flex","[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize","group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar-background","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",t),...e})});V.displayName="SidebarRail";function ue({className:t,...e}){return a("main",{className:r("relative flex w-full flex-1 flex-col bg-background","md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow",t),...e})}function ce({className:t,...e}){return a("div",{"data-sidebar":"header",className:r("flex flex-col gap-2 p-2",t),...e})}function be({className:t,...e}){return a("div",{"data-sidebar":"footer",className:r("flex flex-col gap-2 p-2",t),...e})}function fe({className:t,...e}){return a("div",{"data-sidebar":"content",className:r("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",t),...e})}function pe({className:t,...e}){return a("div",{"data-sidebar":"group",className:r("relative flex w-full min-w-0 flex-col p-2",t),...e})}function me({className:t,...e}){return a("div",{"data-sidebar":"group-label",className:r("flex h-input shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-input group-data-[collapsible=icon]:opacity-0",t),...e})}function ge({className:t,...e}){return a("button",{"data-sidebar":"group-action",className:r("absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-ring transition-transform hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0","after:absolute after:-inset-2 after:md:hidden","group-data-[collapsible=icon]:hidden",t),...e})}function he({className:t,...e}){return a("div",{"data-sidebar":"group-content",className:r("w-full text-sm",t),...e})}function xe({className:t,...e}){return a("ul",{"data-sidebar":"menu",className:r("flex w-full min-w-0 flex-col gap-1",t),...e})}function ve({className:t,...e}){return a("li",{"data-sidebar":"menu-item",className:r("group/menu-item relative list-none",t),...e})}function we({className:t,showOnHover:e=!1,...i}){return a("button",{"data-sidebar":"menu-action",className:r("absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-ring transition-transform hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-accent-foreground [&>svg]:size-icon [&>svg]:shrink-0","after:absolute after:-inset-2 after:md:hidden","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",e&&"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-accent-foreground md:opacity-0",t),...i})}function Se({className:t,...e}){return a("div",{"data-sidebar":"menu-badge",className:r("pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground","peer-hover/menu-button:text-accent-foreground peer-data-[active=true]/menu-button:text-accent-foreground","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",t),...e})}function Ne({className:t,showIcon:e=!1,...i}){const n=k(()=>`${Math.floor(Math.random()*40)+50}%`,[]);return x("div",{"data-sidebar":"menu-skeleton",className:r("flex h-input items-center gap-2 px-2",t),...i,children:[e&&a(w,{className:"size-icon","data-sidebar":"menu-skeleton-icon"}),a(w,{className:"h-icon max-w-[--skeleton-width] flex-1","data-sidebar":"menu-skeleton-text",style:{"--skeleton-width":n}})]})}function ke({className:t,...e}){return a("ul",{"data-sidebar":"menu-sub",className:r("mx-2 flex min-w-0 translate-x-px flex-col gap-1 border-l border-border px-2","group-data-[collapsible=icon]:hidden",t),...e})}function ye({className:t,...e}){return a("li",{className:r("list-none ms-0",t),...e})}const M="flex w-full items-center gap-2 truncate p-2 text-sm btn btn-ghost h-input text-accent data-[active=true]:bg-primary/20 data-[active=true]:font-medium data-[active=true]:text-primary [&>span:last-child]:truncate [&>svg]:size-icon [&>svg]:shrink-0";function Me({isActive:t=!1,tooltip:e,className:i,...n}){const{isMobile:s,state:d}=h(),c=a("button",{"data-sidebar":"menu-button","data-active":t,className:r("peer/menu-button group-has-[[data-sidebar=menu-action]]/menu-item:pr-input group-data-[collapsible=icon]:!size-icon group-data-[collapsible=icon]:!p-2 ",M,i),...n});return e?x(A,{children:[c,a(L,{hidden:d!=="collapsed"||s,...e})]}):c}function _e({isActive:t,className:e,...i}){return a("a",{"data-sidebar":"menu-sub-button","data-active":t,className:r("-translate-x-px [&>svg]:text-accent-foreground","group-data-[collapsible=icon]:hidden",M,e),...i})}export{de as Sidebar,fe as SidebarContent,y as SidebarContext,be as SidebarFooter,pe as SidebarGroup,ge as SidebarGroupAction,he as SidebarGroupContent,me as SidebarGroupLabel,ce as SidebarHeader,ue as SidebarInset,xe as SidebarMenu,we as SidebarMenuAction,Se as SidebarMenuBadge,Me as SidebarMenuButton,ve as SidebarMenuItem,Ne as SidebarMenuSkeleton,ke as SidebarMenuSub,_e as SidebarMenuSubButton,ye as SidebarMenuSubItem,se as SidebarProvider,V as SidebarRail,le as SidebarTrigger,h as useSidebar};
2
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","sources":["../../../lib/components/ui/sidebar.tsx"],"sourcesContent":["\"use client\"\nimport { PanelLeftClose, PanelLeftOpen } from \"lucide-react\"\n\nimport { Button } from \"lib/components/ui/button\"\nimport { DialogContent, DialogOverlay, DialogTrigger } from \"lib/components/ui/dialog\"\nimport { Skeleton } from \"lib/components/ui/skeleton\"\nimport { Tooltip, TooltipTrigger } from \"lib/components/ui/tooltip\"\nimport { classNames } from \"lib/utils/primitives\"\nimport { useIsMobile } from \"lib/utils/use-mobile\"\nimport { createContext, forwardRef, use, useCallback, useEffect, useMemo, useState } from \"react\"\n\n// TODO use tailwind variables\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n\tstate: \"expanded\" | \"collapsed\"\n\topen: boolean\n\tsetOpen: (open: boolean) => void\n\topenMobile: boolean\n\tsetOpenMobile: (open: boolean) => void\n\tisMobile: boolean\n\ttoggleSidebar: () => void\n}\n\nexport const SidebarContext = createContext<SidebarContextProps | null>(null)\n\nexport function useSidebar() {\n\tconst context = use(SidebarContext)\n\tif (!context) {\n\t\tthrow new Error(\"useSidebar must be used within a SidebarProvider.\")\n\t}\n\n\treturn context\n}\n\nexport function SidebarProvider(\n\t{\n\t\tdefaultOpen = true,\n\t\topen: openProp,\n\t\tonOpenChange: setOpenProp,\n\t\tclassName,\n\t\tstyle,\n\t\tchildren,\n\t\t...props\n\t}: React.ComponentProps<'div'> & {\n\t\tdefaultOpen?: boolean\n\t\topen?: boolean\n\t\tonOpenChange?: (open: boolean) => void\n\t}) {\n\tconst isMobile = useIsMobile()\n\tconst [openMobile, setOpenMobile] = useState(false)\n\n\t// This is the internal state of the sidebar.\n\t// We use openProp and setOpenProp for control from outside the component.\n\tconst [_open, _setOpen] = useState(defaultOpen)\n\tconst open = openProp ?? _open\n\tconst setOpen = useCallback(\n\t\t(value: boolean | ((value: boolean) => boolean)) => {\n\t\t\tconst openState = typeof value === \"function\" ? value(open) : value\n\t\t\tif (setOpenProp) {\n\t\t\t\tsetOpenProp(openState)\n\t\t\t} else {\n\t\t\t\t_setOpen(openState)\n\t\t\t}\n\n\t\t\t// TODO, use different model for persistence\n\t\t\t// This sets the cookie to keep the sidebar state.\n\t\t\t// document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n\t\t},\n\t\t[setOpenProp, open]\n\t)\n\n\t// Helper to toggle the sidebar.\n\tconst toggleSidebar = useCallback(() => {\n\t\treturn isMobile\n\t\t\t? setOpenMobile((open) => !open)\n\t\t\t: setOpen((open) => !open)\n\t}, [isMobile, setOpen, setOpenMobile])\n\n\t// Adds a keyboard shortcut to toggle the sidebar.\n\tuseEffect(() => {\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (\n\t\t\t\tevent.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n\t\t\t\t(event.metaKey || event.ctrlKey)\n\t\t\t) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\ttoggleSidebar()\n\t\t\t}\n\t\t}\n\n\t\twindow.addEventListener(\"keydown\", handleKeyDown)\n\t\treturn () => window.removeEventListener(\"keydown\", handleKeyDown)\n\t}, [toggleSidebar])\n\n\t// We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n\t// This makes it easier to style the sidebar with Tailwind classes.\n\tconst state = open ? \"expanded\" : \"collapsed\"\n\n\tconst contextValue = useMemo<SidebarContextProps>(\n\t\t() => ({\n\t\t\tstate,\n\t\t\topen,\n\t\t\tsetOpen,\n\t\t\tisMobile,\n\t\t\topenMobile,\n\t\t\tsetOpenMobile,\n\t\t\ttoggleSidebar,\n\t\t}),\n\t\t[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n\t)\n\n\treturn (\n\t\t<SidebarContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tstyle={\n\t\t\t\t\t{\n\t\t\t\t\t\t\"--sidebar-width\": SIDEBAR_WIDTH,\n\t\t\t\t\t\t\"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n\t\t\t\t\t\t...style,\n\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t}\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"group/sidebar-wrapper flex w-full has-[[data-variant=inset]]:bg-sidebar-background\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</SidebarContext.Provider>\n\t)\n}\n\n\nexport function Sidebar(\n\t{\n\t\tside = \"left\",\n\t\tvariant = \"sidebar\",\n\t\tcollapsible = \"offcanvas\",\n\t\tclassName,\n\t\tchildren,\n\t\t...props\n\t}: React.ComponentProps<\"div\"> & {\n\t\tside?: \"left\" | \"right\"\n\t\tvariant?: \"sidebar\" | \"floating\" | \"inset\"\n\t\tcollapsible?: \"offcanvas\" | \"icon\" | \"none\"\n\t}\n) {\n\tconst { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n\tif (collapsible === \"none\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"flex h-full w-[--sidebar-width] flex-col bg-sidebar-background text-sidebar-foreground\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t)\n\t}\n\n\tif (isMobile) {\n\t\treturn (\n\t\t\t<DialogTrigger style={{ \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE, } as React.CSSProperties} isOpen={openMobile} onOpenChange={setOpenMobile} {...props} >\n\t\t\t\t<DialogOverlay>\n\t\t\t\t\t<DialogContent\n\t\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\t\tdata-mobile=\"true\"\n\t\t\t\t\t\tclassName=\"w-[--sidebar-width] p-0 [&>button]:hidden\" side=\"right\">\n\t\t\t\t\t\t{() => (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DialogContent>\n\t\t\t\t</DialogOverlay>\n\t\t\t</DialogTrigger>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"group peer hidden text-sidebar-foreground md:block\"\n\t\t\tdata-state={state}\n\t\t\tdata-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n\t\t\tdata-variant={variant}\n\t\t\tdata-side={side}\n\t\t>\n\t\t\t{/* This is what handles the sidebar gap on desktop */}\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"relative w-(--sidebar-width) bg-sidebar-background transition-[width] duration-200 ease-linear\",\n\t\t\t\t\t\"group-data-[collapsible=offcanvas]:w-0\",\n\t\t\t\t\t\"group-data-[side=right]:rotate-180\",\n\t\t\t\t\tvariant === \"floating\" || variant === \"inset\"\n\t\t\t\t\t\t? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]\"\n\t\t\t\t\t\t: \"group-data-[collapsible=icon]:w-[--sidebar-width-icon]\"\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={classNames(\n\t\t\t\t\t\"absolute z-10 hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n\t\t\t\t\tside === \"left\"\n\t\t\t\t\t\t? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n\t\t\t\t\t\t: \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n\t\t\t\t\t// Adjust the padding for floating and inset variants.\n\t\t\t\t\tvariant === \"floating\" || variant === \"inset\"\n\t\t\t\t\t\t? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]\"\n\t\t\t\t\t\t: \"group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tclassName=\"flex h-full w-full flex-col bg-sidebar-background group-data-[variant=floating]:border group-data-[variant=floating]:border-border group-data-[variant=floating]:shadow\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n\n\nexport function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n\tconst { toggleSidebar, open } = useSidebar()\n\n\treturn (\n\t\t<Button\n\t\t\tdata-sidebar=\"trigger\"\n\t\t\tvariant=\"neutral\"\n\t\t\tsize=\"icon\"\n\t\t\tonClick={(event) => {\n\t\t\t\tonClick?.(event)\n\t\t\t\ttoggleSidebar()\n\t\t\t}}\n\t\t\t{...props}\n\t\t>{open ? <PanelLeftClose /> : <PanelLeftOpen />}</Button>\n\t)\n}\n\n// TODO, evaluate if we need this??\nexport const SidebarRail = forwardRef<\n\tHTMLButtonElement,\n\tReact.ComponentProps<\"button\">\n>(({ className, ...props }, ref) => {\n\tconst { toggleSidebar } = useSidebar()\n\n\treturn (\n\t\t<button\n\t\t\tref={ref}\n\t\t\tdata-sidebar=\"rail\"\n\t\t\taria-label=\"Toggle Sidebar\"\n\t\t\ttabIndex={-1}\n\t\t\tonClick={toggleSidebar}\n\t\t\ttitle=\"Toggle Sidebar\"\n\t\t\tclassName={classNames(\n\t\t\t\t\"absolute inset-y-0 z-20 hidden w-icon -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-border group-data-[side=left]:-right-icon group-data-[side=right]:left-0 sm:flex\",\n\t\t\t\t\"[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize\",\n\t\t\t\t\"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n\t\t\t\t\"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar-background\",\n\t\t\t\t\"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n\t\t\t\t\"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n})\nSidebarRail.displayName = \"SidebarRail\"\n\nexport function SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n\treturn (\n\t\t<main\n\t\t\tclassName={classNames(\n\t\t\t\t\"relative flex w-full flex-1 flex-col bg-background\",\n\t\t\t\t\"md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\n\nexport function SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\n\t\t\tdata-sidebar=\"header\"\n\t\t\tclassName={classNames(\"flex flex-col gap-2 p-2\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-sidebar=\"footer\"\n\t\t\tclassName={classNames(\"flex flex-col gap-2 p-2\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-sidebar=\"content\"\n\t\t\tclassName={classNames(\n\t\t\t\t\"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-sidebar=\"group\"\n\t\t\tclassName={classNames(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\n\nexport function SidebarGroupLabel({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-sidebar=\"group-label\"\n\t\t\tclassName={classNames(\n\t\t\t\t\"flex h-input shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0\",\n\t\t\t\t\"group-data-[collapsible=icon]:-mt-input group-data-[collapsible=icon]:opacity-0\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nexport function SidebarGroupAction({ className, ...props }: React.ComponentProps<\"button\">) {\n\treturn (\n\t\t<button\n\t\t\tdata-sidebar=\"group-action\"\n\t\t\tclassName={classNames(\n\t\t\t\t\"absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-ring transition-transform hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0\",\n\t\t\t\t// Increases the hit area of the button on mobile.\n\t\t\t\t\"after:absolute after:-inset-2 after:md:hidden\",\n\t\t\t\t\"group-data-[collapsible=icon]:hidden\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-sidebar=\"group-content\"\n\t\t\tclassName={classNames(\"w-full text-sm\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n\treturn (\n\t\t<ul\n\t\t\tdata-sidebar=\"menu\"\n\t\t\tclassName={classNames(\"flex w-full min-w-0 flex-col gap-1\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-sidebar=\"menu-item\"\n\t\t\tclassName={classNames(\"group/menu-item relative list-none\", className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\n/// TODO fix positioning\nexport function SidebarMenuAction({ className, showOnHover = false, ...props }: React.ComponentProps<\"button\"> & {\n\tshowOnHover?: boolean\n}) {\n\n\treturn (\n\t\t<button\n\t\t\tdata-sidebar=\"menu-action\"\n\t\t\tclassName={classNames(\n\t\t\t\t\"absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-ring transition-transform hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-accent-foreground [&>svg]:size-icon [&>svg]:shrink-0\",\n\t\t\t\t// Increases the hit area of the button on mobile.\n\t\t\t\t\"after:absolute after:-inset-2 after:md:hidden\",\n\t\t\t\t\"peer-data-[size=sm]/menu-button:top-1\",\n\t\t\t\t\"peer-data-[size=default]/menu-button:top-1.5\",\n\t\t\t\t\"peer-data-[size=lg]/menu-button:top-2.5\",\n\t\t\t\t\"group-data-[collapsible=icon]:hidden\",\n\t\t\t\tshowOnHover &&\n\t\t\t\t\"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-accent-foreground md:opacity-0\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-sidebar=\"menu-badge\"\n\t\t\tclassName={classNames(\n\t\t\t\t\"pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground\",\n\t\t\t\t\"peer-hover/menu-button:text-accent-foreground peer-data-[active=true]/menu-button:text-accent-foreground\",\n\t\t\t\t\"peer-data-[size=sm]/menu-button:top-1\",\n\t\t\t\t\"peer-data-[size=default]/menu-button:top-1.5\",\n\t\t\t\t\"peer-data-[size=lg]/menu-button:top-2.5\",\n\t\t\t\t\"group-data-[collapsible=icon]:hidden\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarMenuSkeleton({ className, showIcon = false, ...props }: React.ComponentProps<\"div\"> & {\n\tshowIcon?: boolean\n}) {\n\t// Random width between 50 to 90%.\n\tconst width = useMemo(() => {\n\t\treturn `${Math.floor(Math.random() * 40) + 50}%`\n\t}, [])\n\n\treturn (\n\t\t<div\n\t\t\tdata-sidebar=\"menu-skeleton\"\n\t\t\tclassName={classNames(\"flex h-input items-center gap-2 px-2\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{showIcon && (\n\t\t\t\t<Skeleton\n\t\t\t\t\tclassName=\"size-icon\"\n\t\t\t\t\tdata-sidebar=\"menu-skeleton-icon\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Skeleton\n\t\t\t\tclassName=\"h-icon max-w-[--skeleton-width] flex-1\"\n\t\t\t\tdata-sidebar=\"menu-skeleton-text\"\n\t\t\t\tstyle={\n\t\t\t\t\t{\n\t\t\t\t\t\t\"--skeleton-width\": width,\n\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n\nexport function SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n\treturn (\n\t\t<ul\n\t\t\tdata-sidebar=\"menu-sub\"\n\t\t\tclassName={classNames(\n\t\t\t\t\"mx-2 flex min-w-0 translate-x-px flex-col gap-1 border-l border-border px-2\",\n\t\t\t\t\"group-data-[collapsible=icon]:hidden\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nexport function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) { return <li className={classNames(\"list-none ms-0\", className)} {...props} /> }\n\n// Common interaction logic for SidebarMenuButton and SidebarMenuSubButton\nconst Cs_SidebarButton = \"flex w-full items-center gap-2 truncate p-2 text-sm btn btn-ghost h-input text-accent data-[active=true]:bg-primary/20 data-[active=true]:font-medium data-[active=true]:text-primary [&>span:last-child]:truncate [&>svg]:size-icon [&>svg]:shrink-0\";\nexport function SidebarMenuButton\n\t(\n\t\t{\n\t\t\tisActive = false,\n\t\t\ttooltip,\n\t\t\tclassName,\n\t\t\t...props\n\t\t}: React.ComponentProps<\"button\"> & {\n\t\t\tisActive?: boolean\n\t\t\ttooltip?: React.ComponentProps<typeof Tooltip>\n\t\t}\n\t) {\n\tconst { isMobile, state } = useSidebar()\n\n\tconst button = (\n\t\t<button\n\t\t\tdata-sidebar=\"menu-button\"\n\t\t\tdata-active={isActive}\n\t\t\tclassName={classNames(\n\t\t\t\t\"peer/menu-button group-has-[[data-sidebar=menu-action]]/menu-item:pr-input group-data-[collapsible=icon]:!size-icon group-data-[collapsible=icon]:!p-2 \",\n\t\t\t\tCs_SidebarButton,\n\t\t\t\tclassName)}\n\t\t\t{...props}\n\t\t/>\n\t)\n\n\tif (!tooltip) {\n\t\treturn button\n\t}\n\n\treturn (\n\t\t<TooltipTrigger>\n\t\t\t{button}\n\t\t\t<Tooltip\n\t\t\t\thidden={state !== \"collapsed\" || isMobile}\n\t\t\t\t{...tooltip}\n\t\t\t/>\n\t\t</TooltipTrigger>\n\t)\n}\n\nexport function SidebarMenuSubButton({ isActive, className, ...props }: React.ComponentProps<'a'> & {\n\tisActive?: boolean\n}) {\n\n\treturn (\n\t\t<a\n\t\t\tdata-sidebar=\"menu-sub-button\"\n\t\t\tdata-active={isActive}\n\t\t\tclassName={classNames(\n\t\t\t\t\"-translate-x-px [&>svg]:text-accent-foreground\",\n\t\t\t\t\"group-data-[collapsible=icon]:hidden\",\n\t\t\t\tCs_SidebarButton,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n// TODO, standardize heights here"],"names":["SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","createContext","useSidebar","context","use","SidebarProvider","defaultOpen","openProp","setOpenProp","className","style","children","props","isMobile","useIsMobile","openMobile","setOpenMobile","useState","_open","_setOpen","open","setOpen","useCallback","value","openState","toggleSidebar","useEffect","handleKeyDown","event","state","contextValue","useMemo","jsx","classNames","Sidebar","side","variant","collapsible","DialogTrigger","DialogOverlay","DialogContent","jsxs","SidebarTrigger","onClick","Button","PanelLeftClose","PanelLeftOpen","SidebarRail","forwardRef","ref","SidebarInset","SidebarHeader","SidebarFooter","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupAction","SidebarGroupContent","SidebarMenu","SidebarMenuItem","SidebarMenuAction","showOnHover","SidebarMenuBadge","SidebarMenuSkeleton","showIcon","width","Skeleton","SidebarMenuSub","SidebarMenuSubItem","Cs_SidebarButton","SidebarMenuButton","isActive","tooltip","button","TooltipTrigger","Tooltip","SidebarMenuSubButton"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{classNames as o}from"../../utils/primitives.js";import"clsx";function s({className:r,...m}){return e("div",{className:o("animate-pulse bg-primary/10",r),...m})}export{s as Skeleton};
2
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.js","sources":["../../../lib/components/ui/skeleton.tsx"],"sourcesContent":["import { classNames } from \"lib/utils/primitives\";\n\nexport function Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div className={classNames(\"animate-pulse bg-primary/10\", className)} {...props} />\n\t);\n}\n"],"names":["Skeleton","className","props","jsx","classNames"],"mappings":"4GAEO,SAASA,EAAS,CAAE,UAAAC,EAAW,GAAGC,GAAsC,CAC9E,OACCC,EAAC,OAAI,UAAWC,EAAW,8BAA+BH,CAAS,EAAI,GAAGC,EAAO,CAEnF"}
@@ -0,0 +1,4 @@
1
+ import { Toaster as Sonner } from 'sonner';
2
+ type ToasterProps = React.ComponentProps<typeof Sonner>;
3
+ export declare function Toaster({ ...props }: ToasterProps): import("react/jsx-runtime").JSX.Element;
4
+ export {};
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as o}from"react/jsx-runtime";import{Toaster as r}from"sonner";function s({...t}){return o(r,{className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...t})}export{s as Toaster};
2
+ //# sourceMappingURL=sonner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sonner.js","sources":["../../../lib/components/ui/sonner.tsx"],"sourcesContent":["\"use client\";\nimport { Toaster as Sonner } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nexport function Toaster({ ...props }: ToasterProps) {\n\treturn (\n\t\t<Sonner\n\t\t\tclassName=\"toaster group\"\n\t\t\ttoastOptions={{\n\t\t\t\tclassNames: {\n\t\t\t\t\ttoast:\n\t\t\t\t\t\t\"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n\t\t\t\t\tdescription: \"group-[.toast]:text-muted-foreground\",\n\t\t\t\t\tactionButton:\n\t\t\t\t\t\t\"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n\t\t\t\t\tcancelButton:\n\t\t\t\t\t\t\"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n\t\t\t\t},\n\t\t\t}}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\n\n"],"names":["Toaster","props","jsx","Sonner"],"mappings":"sFAKO,SAASA,EAAQ,CAAE,GAAGC,GAAuB,CACnD,OACCC,EAACC,EAAA,CACA,UAAU,gBACV,aAAc,CACb,WAAY,CACX,MACC,wIACD,YAAa,uCACb,aACC,mEACD,aACC,8DAAA,CACF,EAEA,GAAGF,CAAA,CAAA,CAGP"}
@@ -0,0 +1,8 @@
1
+ export declare function Table({ className, ...props }: React.ComponentProps<"table">): import("react/jsx-runtime").JSX.Element;
2
+ export declare function TableHeader({ className, ...props }: React.ComponentProps<"thead">): import("react/jsx-runtime").JSX.Element;
3
+ export declare function TableBody({ className, ...props }: React.ComponentProps<"tbody">): import("react/jsx-runtime").JSX.Element;
4
+ export declare function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">): import("react/jsx-runtime").JSX.Element;
5
+ export declare function TableRow({ className, ...props }: React.ComponentProps<"tr">): import("react/jsx-runtime").JSX.Element;
6
+ export declare function TableHead({ className, ...props }: React.ComponentProps<"th">): import("react/jsx-runtime").JSX.Element;
7
+ export declare function TableCell({ className, ...props }: React.ComponentProps<"td">): import("react/jsx-runtime").JSX.Element;
8
+ export declare function TableCaption({ className, ...props }: React.ComponentProps<"caption">): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{classNames as o}from"../../utils/primitives.js";import"clsx";function s({className:t,...e}){return r("table",{className:o("caption-bottom text-sm [&_tr:last-child]:border-0 my-0 whitespace-nowrap",t),...e})}function d({className:t,...e}){return r("thead",{className:o("[&_tr]:border-b border-b",t),...e})}function m({className:t,...e}){return r("tbody",{className:o(t),...e})}function b({className:t,...e}){return r("tfoot",{className:o("border-t font-medium last:[&>tr]:border-b-0",t),...e})}function c({className:t,...e}){return r("tr",{className:o("border-b border-border",t),...e})}function i({className:t,...e}){return r("th",{className:o("text-left align-middle font-medium",t),...e})}function u({className:t,...e}){return r("td",{className:o("[&_tr:last-child]:border-dotted",t),...e})}function f({className:t,...e}){return r("caption",{className:o("mt-icon text-sm text-muted-foreground",t),...e})}export{s as Table,m as TableBody,f as TableCaption,u as TableCell,b as TableFooter,i as TableHead,d as TableHeader,c as TableRow};
2
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sources":["../../../lib/components/ui/table.tsx"],"sourcesContent":["import { classNames } from \"lib/utils/primitives\";\n\nexport function Table({ className, ...props }: React.ComponentProps<\"table\">) {\n\treturn (\n\t\t<table\n\t\t\tclassName={classNames(\n\t\t\t\t\"caption-bottom text-sm [&_tr:last-child]:border-0 my-0 whitespace-nowrap\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function TableHeader({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"thead\">) {\n\treturn (\n\t\t<thead\n\t\t\tclassName={classNames(\"[&_tr]:border-b border-b\", className)} // Added border-b to apply a bottom border\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function TableBody({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"tbody\">) {\n\treturn <tbody className={classNames(className)} {...props} />;\n}\n\nexport function TableFooter({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"tfoot\">) {\n\treturn (\n\t\t<tfoot\n\t\t\tclassName={classNames(\"border-t font-medium last:[&>tr]:border-b-0\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n\treturn <tr className={classNames(\"border-b border-border\", className)} {...props} />;\n}\n\nexport function TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n\treturn (\n\t\t<th\n\t\t\tclassName={classNames(\"text-left align-middle font-medium\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n\treturn (\n\t\t<td\n\t\t\tclassName={classNames(\"[&_tr:last-child]:border-dotted\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function TableCaption({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"caption\">) {\n\treturn (\n\t\t<caption\n\t\t\tclassName={classNames(\"mt-icon text-sm text-muted-foreground\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n"],"names":["Table","className","props","jsx","classNames","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption"],"mappings":"4GAEO,SAASA,EAAM,CAAE,UAAAC,EAAW,GAAGC,GAAwC,CAC7E,OACCC,EAAC,QAAA,CACA,UAAWC,EACV,2EACAH,CAAA,EAEA,GAAGC,CAAA,CAAA,CAGP,CAEO,SAASG,EAAY,CAC3B,UAAAJ,EACA,GAAGC,CACJ,EAAkC,CACjC,OACCC,EAAC,QAAA,CACA,UAAWC,EAAW,2BAA4BH,CAAS,EAC1D,GAAGC,CAAA,CAAA,CAGP,CAEO,SAASI,EAAU,CACzB,UAAAL,EACA,GAAGC,CACJ,EAAkC,CACjC,SAAQ,QAAA,CAAM,UAAWE,EAAWH,CAAS,EAAI,GAAGC,EAAO,CAC5D,CAEO,SAASK,EAAY,CAC3B,UAAAN,EACA,GAAGC,CACJ,EAAkC,CACjC,OACCC,EAAC,QAAA,CACA,UAAWC,EAAW,8CAA+CH,CAAS,EAC7E,GAAGC,CAAA,CAAA,CAGP,CAEO,SAASM,EAAS,CAAE,UAAAP,EAAW,GAAGC,GAAqC,CAC7E,OAAOC,EAAC,MAAG,UAAWC,EAAW,yBAA0BH,CAAS,EAAI,GAAGC,EAAO,CACnF,CAEO,SAASO,EAAU,CAAE,UAAAR,EAAW,GAAGC,GAAqC,CAC9E,OACCC,EAAC,KAAA,CACA,UAAWC,EAAW,qCAAsCH,CAAS,EACpE,GAAGC,CAAA,CAAA,CAGP,CAEO,SAASQ,EAAU,CAAE,UAAAT,EAAW,GAAGC,GAAqC,CAC9E,OACCC,EAAC,KAAA,CACA,UAAWC,EAAW,kCAAmCH,CAAS,EACjE,GAAGC,CAAA,CAAA,CAGP,CAEO,SAASS,EAAa,CAC5B,UAAAV,EACA,GAAGC,CACJ,EAAoC,CACnC,OACCC,EAAC,UAAA,CACA,UAAWC,EAAW,wCAAyCH,CAAS,EACvE,GAAGC,CAAA,CAAA,CAGP"}
@@ -0,0 +1,5 @@
1
+ import { TabListProps as AriaTabListProps, TabPanelProps as AriaTabPanelProps, TabProps as AriaTabProps, TabsProps as AriaTabsProps } from 'react-aria-components';
2
+ export declare function Tabs({ className, ...props }: AriaTabsProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare function TabList<T extends object>({ className, ...props }: AriaTabListProps<T>): import("react/jsx-runtime").JSX.Element;
4
+ export declare function Tab({ className, ...props }: AriaTabProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function TabPanel({ className, ...props }: AriaTabPanelProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as n}from"react/jsx-runtime";import{Tabs as i,composeRenderProps as r,TabList as s,Tab as l,TabPanel as c}from"react-aria-components";import{classNames as o}from"../../utils/primitives.js";import"clsx";function d({className:a,...t}){return n(i,{className:r(a,e=>o("group flex flex-col gap-2","data-[orientation=vertical]:flex-row",e)),...t})}function p({className:a,...t}){return n(s,{className:r(a,e=>o("inline-flex items-center border-b text-muted-foreground","data-[orientation=vertical]:h-auto data-[orientation=vertical]:flex-col",e)),...t})}function x({className:a,...t}){return n(l,{className:r(a,e=>o("btn btn-ghost leading-none text-accent h-input truncate inline-flex items-center px-3 body font-medium transition-all","data-[selected]:bg-primary/20 data-[selected]:text-primary","group-data-[orientation=vertical]:w-full",e)),...t})}function T({className:a,...t}){return n(c,{className:r(a,e=>o("ring-offset-background","focus-ring",e)),...t})}export{x as Tab,p as TabList,T as TabPanel,d as Tabs};
2
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sources":["../../../lib/components/ui/tabs.tsx"],"sourcesContent":["import {\n Tab as AriaTab,\n TabList as AriaTabList,\n TabListProps as AriaTabListProps,\n TabPanel as AriaTabPanel,\n TabPanelProps as AriaTabPanelProps,\n TabProps as AriaTabProps,\n Tabs as AriaTabs,\n TabsProps as AriaTabsProps,\n composeRenderProps,\n} from \"react-aria-components\"\n\nimport { classNames } from \"lib/utils/primitives\"\n\nexport function Tabs({ className, ...props }: AriaTabsProps) {\n return (\n <AriaTabs\n className={composeRenderProps(className, (className) =>\n classNames(\n \"group flex flex-col gap-2\",\n /* Orientation */\n \"data-[orientation=vertical]:flex-row\",\n className\n )\n )}\n {...props}\n />\n )\n}\n\nexport function TabList<T extends object>({\n className,\n ...props\n}: AriaTabListProps<T>) {\n return (\n <AriaTabList\n className={composeRenderProps(className, (className) =>\n classNames(\n \"inline-flex items-center border-b text-muted-foreground\",\n /* Orientation */\n \"data-[orientation=vertical]:h-auto data-[orientation=vertical]:flex-col\",\n className\n )\n )}\n {...props}\n />\n )\n}\n\nexport function Tab({ className, ...props }: AriaTabProps) {\n return (\n <AriaTab\n className={composeRenderProps(className, (className) =>\n classNames(\n \"btn btn-ghost leading-none text-accent h-input truncate inline-flex items-center px-3 body font-medium transition-all\",\n /* Selected */\n \"data-[selected]:bg-primary/20 data-[selected]:text-primary\",\n /* Orientation */\n \"group-data-[orientation=vertical]:w-full\",\n className\n )\n )}\n {...props}\n />\n )\n}\n\nexport function TabPanel({ className, ...props }: AriaTabPanelProps) {\n return (\n <AriaTabPanel\n className={composeRenderProps(className, (className) =>\n classNames(\n \"ring-offset-background\",\n /* Focus Visible */\n \"focus-ring\",\n className\n )\n )}\n {...props}\n />\n )\n}"],"names":["Tabs","className","props","jsx","AriaTabs","composeRenderProps","classNames","TabList","AriaTabList","Tab","AriaTab","TabPanel","AriaTabPanel"],"mappings":"qNAcO,SAASA,EAAK,CAAE,UAAAC,EAAW,GAAGC,GAAwB,CAC3D,OACEC,EAACC,EAAA,CACC,UAAWC,EAAmBJ,EAAYA,GACxCK,EACE,4BAEA,uCACAL,CAAA,CACF,EAED,GAAGC,CAAA,CAAA,CAGV,CAEO,SAASK,EAA0B,CACxC,UAAAN,EACA,GAAGC,CACL,EAAwB,CACtB,OACEC,EAACK,EAAA,CACC,UAAWH,EAAmBJ,EAAYA,GACxCK,EACE,0DAEA,0EACAL,CAAA,CACF,EAED,GAAGC,CAAA,CAAA,CAGV,CAEO,SAASO,EAAI,CAAE,UAAAR,EAAW,GAAGC,GAAuB,CACzD,OACEC,EAACO,EAAA,CACC,UAAWL,EAAmBJ,EAAYA,GACxCK,EACE,wHAEA,6DAEA,2CACAL,CAAA,CACF,EAED,GAAGC,CAAA,CAAA,CAGV,CAEO,SAASS,EAAS,CAAE,UAAAV,EAAW,GAAGC,GAA4B,CACnE,OACEC,EAACS,EAAA,CACC,UAAWP,EAAmBJ,EAAYA,GACxCK,EACE,yBAEA,aACAL,CAAA,CACF,EAED,GAAGC,CAAA,CAAA,CAGV"}
@@ -0,0 +1,15 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import { LucideIcon } from 'lucide-react';
3
+ export declare function Timeline({ className, ...props }: React.ComponentProps<'ol'>): import("react/jsx-runtime").JSX.Element;
4
+ export declare function TimelineItem({ className, ...props }: React.ComponentProps<'li'> & {}): import("react/jsx-runtime").JSX.Element;
5
+ export declare const timelineIconVariants: (props?: ({
6
+ variant?: "destructive" | "success" | "muted" | null | undefined;
7
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
+ export declare function TimelineIcon({ icon: Icon, className, variant, ...props }: Omit<React.ComponentProps<'div'>, 'children'> & VariantProps<typeof timelineIconVariants> & {
9
+ icon: LucideIcon;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ export declare function TimelineDate({ className, date, dateFormatter, ...props }: Omit<React.ComponentProps<'time'>, 'dateTime' | 'children'> & {
12
+ date: Date;
13
+ dateFormatter?: (d: Date) => string;
14
+ }): import("react/jsx-runtime").JSX.Element;
15
+ export declare function TimelineContent({ className, ...props }: React.ComponentProps<'section'>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as i,jsxs as c}from"react/jsx-runtime";import{cva as a}from"class-variance-authority";import{classNames as n}from"../../utils/primitives.js";import"clsx";function f({className:t,...e}){return i("ol",{className:n("grid grid-col-1 gap-icon",t),...e})}function p({className:t,...e}){return i("li",{className:n("grid grid-cols-[4rem_2rem_1fr] grid-rows-subgrid list-none gap-icon",t),...e})}const l=a("p-1 rounded-full",{variants:{variant:{destructive:"text-destructive-foreground bg-destructive",success:"text-success-foreground bg-success",muted:"text-muted-foreground bg-muted"}},defaultVariants:{variant:"muted"}});function v({icon:t,className:e,variant:r,...s}){return c("div",{...s,className:"flex flex-col items-center gap-2",children:[i("div",{className:n(l({variant:r,className:e})),children:i(t,{className:"size-icon "})}),i("div",{className:"h-full w-[1px]"})]})}function x({className:t,date:e,dateFormatter:r,...s}){const o=`${(e.getMonth()+1).toString().padStart(2,"0")}-${e.getFullYear()}`;return i("time",{...s,dateTime:e.toISOString(),className:n("font-mono leading-none text-muted",t),children:r?r(e):o})}function N({className:t,...e}){return i("section",{className:n("",t),...e})}export{f as Timeline,N as TimelineContent,x as TimelineDate,v as TimelineIcon,p as TimelineItem,l as timelineIconVariants};
2
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sources":["../../../lib/components/ui/timeline.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { classNames } from \"lib/utils/primitives\";\nimport type { LucideIcon } from \"lucide-react\";\n\nexport function Timeline({ className, ...props }: React.ComponentProps<'ol'>) {\n return <ol className={classNames(\"grid grid-col-1 gap-icon\", className)} {...props} />\n}\n\nexport function TimelineItem({ className, ...props }: React.ComponentProps<'li'> & {}) {\n return (\n <li className={classNames(\"grid grid-cols-[4rem_2rem_1fr] grid-rows-subgrid list-none gap-icon\", className)} {...props} />\n )\n}\n\nexport const timelineIconVariants = cva(\n `p-1 rounded-full`,\n {\n variants: {\n variant: {\n destructive: \"text-destructive-foreground bg-destructive\",\n success: \"text-success-foreground bg-success\",\n muted: \"text-muted-foreground bg-muted\",\n },\n },\n defaultVariants: {\n variant: \"muted\",\n },\n },\n);\n\nexport function TimelineIcon({ icon: Icon, className, variant, ...props }: Omit<React.ComponentProps<'div'>, 'children'> & VariantProps<typeof timelineIconVariants> & {\n icon: LucideIcon\n}) {\n return <div {...props} className=\"flex flex-col items-center gap-2\">\n <div className={classNames(timelineIconVariants({ variant, className }))}>\n <Icon className=\"size-icon \" />\n </div>\n <div className=\"h-full w-[1px]\" />\n </div>\n}\n\nexport function TimelineDate({ className, date, dateFormatter, ...props }: Omit<React.ComponentProps<'time'>, 'dateTime' | 'children'> & {\n date: Date\n dateFormatter?: (d: Date) => string;\n}) {\n const defaultDateDisplay = `${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getFullYear()}`;\n return <time {...props} dateTime={date.toISOString()} className={classNames(\"font-mono leading-none text-muted\", className)}>{dateFormatter ? dateFormatter(date) : defaultDateDisplay}</time>\n}\n\nexport function TimelineContent({ className, ...props }: React.ComponentProps<'section'>) {\n return <section className={classNames(\"\", className)} {...props} />;\n}"],"names":["Timeline","className","props","jsx","classNames","TimelineItem","timelineIconVariants","cva","TimelineIcon","Icon","variant","jsxs","TimelineDate","date","dateFormatter","defaultDateDisplay","TimelineContent"],"mappings":"qKAIO,SAASA,EAAS,CAAE,UAAAC,EAAW,GAAGC,GAAqC,CAC1E,OAAOC,EAAC,MAAG,UAAWC,EAAW,2BAA4BH,CAAS,EAAI,GAAGC,EAAO,CACxF,CAEO,SAASG,EAAa,CAAE,UAAAJ,EAAW,GAAGC,GAA0C,CACnF,OACIC,EAAC,MAAG,UAAWC,EAAW,sEAAuEH,CAAS,EAAI,GAAGC,EAAO,CAEhI,CAEO,MAAMI,EAAuBC,EAChC,mBACA,CACI,SAAU,CACN,QAAS,CACL,YAAa,6CACb,QAAS,qCACT,MAAO,gCAAA,CACX,EAEJ,gBAAiB,CACb,QAAS,OAAA,CACb,CAER,EAEO,SAASC,EAAa,CAAE,KAAMC,EAAM,UAAAR,EAAW,QAAAS,EAAS,GAAGR,GAE/D,CACC,OAAOS,EAAC,MAAA,CAAK,GAAGT,EAAO,UAAU,mCAC7B,SAAA,CAAAC,EAAC,MAAA,CAAI,UAAWC,EAAWE,EAAqB,CAAE,QAAAI,EAAS,UAAAT,CAAA,CAAW,CAAC,EACnE,SAAAE,EAACM,EAAA,CAAK,UAAU,aAAa,EACjC,EACAN,EAAC,MAAA,CAAI,UAAU,gBAAA,CAAiB,CAAA,EACpC,CACJ,CAEO,SAASS,EAAa,CAAE,UAAAX,EAAW,KAAAY,EAAM,cAAAC,EAAe,GAAGZ,GAG/D,CACC,MAAMa,EAAqB,IAAIF,EAAK,SAAA,EAAa,GAAG,SAAA,EAAW,SAAS,EAAG,GAAG,CAAC,IAAIA,EAAK,aAAa,GACrG,SAAQ,OAAA,CAAM,GAAGX,EAAO,SAAUW,EAAK,YAAA,EAAe,UAAWT,EAAW,oCAAqCH,CAAS,EAAI,WAAgBa,EAAcD,CAAI,EAAIE,EAAmB,CAC3L,CAEO,SAASC,EAAgB,CAAE,UAAAf,EAAW,GAAGC,GAA0C,CACtF,OAAOC,EAAC,WAAQ,UAAWC,EAAW,GAAIH,CAAS,EAAI,GAAGC,EAAO,CACrE"}
@@ -0,0 +1,4 @@
1
+ import { TooltipTrigger as AriaTooltipTrigger, TooltipProps as AriaTooltipProps } from 'react-aria-components';
2
+ declare const TooltipTrigger: typeof AriaTooltipTrigger;
3
+ declare const Tooltip: ({ className, offset, ...props }: AriaTooltipProps) => import("react/jsx-runtime").JSX.Element;
4
+ export { Tooltip, TooltipTrigger };
@@ -0,0 +1,2 @@
1
+ import{jsx as a}from"react/jsx-runtime";import{TooltipTrigger as r,Tooltip as m,composeRenderProps as p}from"react-aria-components";import{classNames as d}from"../../utils/primitives.js";import"clsx";const f=r,c=({className:o,offset:t=4,...e})=>a(m,{offset:t,className:p(o,i=>d("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0","data-[entering]:zoom-in-95","data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95","data-[placement=bottom]:slide-in-from-top-2 data-[placement=left]:slide-in-from-right-2 data-[placement=right]:slide-in-from-left-2 data-[placement=top]:slide-in-from-bottom-2",i)),...e});export{c as Tooltip,f as TooltipTrigger};
2
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sources":["../../../lib/components/ui/tooltip.tsx"],"sourcesContent":["import {\n\tTooltip as AriaTooltip,\n\tTooltipTrigger as AriaTooltipTrigger,\n\tcomposeRenderProps,\n\ttype TooltipProps as AriaTooltipProps,\n} from \"react-aria-components\"\n\nimport { classNames } from \"lib/utils/primitives\"\n\nconst TooltipTrigger = AriaTooltipTrigger\nconst Tooltip = ({ className, offset = 4, ...props }: AriaTooltipProps) => (\n\t<AriaTooltip\n\t\toffset={offset}\n\t\tclassName={composeRenderProps(className, (className) =>\n\t\t\tclassNames(\n\t\t\t\t\"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0\",\n\t\t\t\t/* Entering */\n\t\t\t\t\"data-[entering]:zoom-in-95\",\n\t\t\t\t/* Exiting */\n\t\t\t\t\"data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95\",\n\t\t\t\t/* Placement */\n\t\t\t\t\"data-[placement=bottom]:slide-in-from-top-2 data-[placement=left]:slide-in-from-right-2 data-[placement=right]:slide-in-from-left-2 data-[placement=top]:slide-in-from-bottom-2\",\n\t\t\t\tclassName\n\t\t\t)\n\t\t)}\n\t\t{...props}\n\t/>\n)\n\nexport { Tooltip, TooltipTrigger }\n"],"names":["TooltipTrigger","AriaTooltipTrigger","Tooltip","className","offset","props","jsx","AriaTooltip","composeRenderProps","classNames"],"mappings":"wMASA,MAAMA,EAAiBC,EACjBC,EAAU,CAAC,CAAE,UAAAC,EAAW,OAAAC,EAAS,EAAG,GAAGC,KAC5CC,EAACC,EAAA,CACA,OAAAH,EACA,UAAWI,EAAmBL,EAAYA,GACzCM,EACC,+HAEA,6BAEA,kFAEA,kLACAN,CAAA,CACD,EAEA,GAAGE,CAAA,CACL"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * useFieldContext is used in custom components
3
+ */
4
+ export declare const fieldContext: import('react').Context<import('@tanstack/react-form').AnyFieldApi>, formContext: import('react').Context<import('@tanstack/react-form').AnyFormApi>, useFieldContext: <TData>() => import('@tanstack/react-form').FieldApi<any, string, TData, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
@@ -0,0 +1,2 @@
1
+ import{createFormHookContexts as o}from"@tanstack/react-form";const{fieldContext:e,formContext:r,useFieldContext:n}=o();export{e as fieldContext,r as formContext,n as useFieldContext};
2
+ //# sourceMappingURL=form-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-context.js","sources":["../../lib/utils/form-context.tsx"],"sourcesContent":["import { createFormHookContexts } from \"@tanstack/react-form\";\n\n/**\n * useFieldContext is used in custom components\n */\nexport const { fieldContext, formContext, useFieldContext } =\n\tcreateFormHookContexts();\n"],"names":["fieldContext","formContext","useFieldContext","createFormHookContexts"],"mappings":"8DAKO,KAAM,CAAE,aAAAA,EAAc,YAAAC,EAAa,gBAAAC,CAAA,EACzCC,EAAA"}
@@ -0,0 +1,23 @@
1
+ import { TfCheckbox } from 'lib/components/inputs/checkbox';
2
+ import { TfMultiSelect } from 'lib/components/inputs/multi-select';
3
+ import { TfNumberField } from 'lib/components/inputs/numberfield';
4
+ import { TfSingleSelect } from 'lib/components/inputs/select';
5
+ import { TfTextField } from 'lib/components/inputs/textfield';
6
+ import { Button } from 'lib/components/ui/button';
7
+ /** Don't put this in the same file as form-context.tsx, this causes circular dependencies. */
8
+ /** TODO, lazy loading when fieldComponents are large */
9
+ /**
10
+ * Builder for form logic and user interfaces
11
+ */
12
+ export declare const useAppForm: <TFormData, TOnMount extends import('@tanstack/react-form').FormValidateOrFn<TFormData> | undefined, TOnChange extends import('@tanstack/react-form').FormValidateOrFn<TFormData> | undefined, TOnChangeAsync extends import('@tanstack/react-form').FormAsyncValidateOrFn<TFormData> | undefined, TOnBlur extends import('@tanstack/react-form').FormValidateOrFn<TFormData> | undefined, TOnBlurAsync extends import('@tanstack/react-form').FormAsyncValidateOrFn<TFormData> | undefined, TOnSubmit extends import('@tanstack/react-form').FormValidateOrFn<TFormData> | undefined, TOnSubmitAsync extends import('@tanstack/react-form').FormAsyncValidateOrFn<TFormData> | undefined, TOnServer extends import('@tanstack/react-form').FormAsyncValidateOrFn<TFormData> | undefined, TSubmitMeta>(props: import('@tanstack/react-form').FormOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta>) => import('@tanstack/react-form').FormApi<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta> & import('@tanstack/react-form').ReactFormApi<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta> & NoInfer<{
13
+ readonly Button: typeof Button;
14
+ }> & {
15
+ AppField: import('@tanstack/react-form').FieldComponent<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta, NoInfer<{
16
+ readonly TfTextField: typeof TfTextField;
17
+ readonly TfNumberField: typeof TfNumberField;
18
+ readonly TfMultiSelect: typeof TfMultiSelect;
19
+ readonly TfSingleSelect: typeof TfSingleSelect;
20
+ readonly TfCheckbox: typeof TfCheckbox;
21
+ }>>;
22
+ AppForm: import('react').ComponentType<import('react').PropsWithChildren>;
23
+ };
@@ -0,0 +1,2 @@
1
+ import{createFormHook as o}from"@tanstack/react-form";import{TfCheckbox as m}from"../components/inputs/checkbox.js";import{TfMultiSelect as r}from"../components/inputs/multi-select.js";import{TfNumberField as t}from"../components/inputs/numberfield.js";import{TfSingleSelect as i}from"../components/inputs/select.js";import{TfTextField as p}from"../components/inputs/textfield.js";import{Button as e}from"../components/ui/button.js";import{formContext as f,fieldContext as n}from"./form-context.js";import"react/jsx-runtime";import"react-aria-components";import"../components/inputs/field.js";import"class-variance-authority";import"./primitives.js";import"clsx";import"lucide-react";import"../components/ui/menu.js";import"../components/ui/list-box.js";import"../components/ui/popover.js";import"../components/ui/loader.js";const{useAppForm:N}=o({fieldComponents:{TfTextField:p,TfNumberField:t,TfMultiSelect:r,TfSingleSelect:i,TfCheckbox:m},formComponents:{Button:e},fieldContext:n,formContext:f});export{N as useAppForm};
2
+ //# sourceMappingURL=form-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-hook.js","sources":["../../lib/utils/form-hook.tsx"],"sourcesContent":["import { createFormHook } from \"@tanstack/react-form\";\nimport { TfCheckbox } from \"lib/components/inputs/checkbox\";\nimport { TfMultiSelect } from \"lib/components/inputs/multi-select\";\nimport { TfNumberField } from \"lib/components/inputs/numberfield\";\nimport { TfSingleSelect } from \"lib/components/inputs/select\";\nimport { TfTextField } from \"lib/components/inputs/textfield\";\nimport { Button } from \"lib/components/ui/button\";\nimport { fieldContext, formContext } from \"lib/utils/form-context\";\n\n/** Don't put this in the same file as form-context.tsx, this causes circular dependencies. */\n/** TODO, lazy loading when fieldComponents are large */\n/**\n * Builder for form logic and user interfaces\n */\nexport const { useAppForm } = createFormHook({\n\tfieldComponents: {\n\t\tTfTextField,\n\t\tTfNumberField,\n\t\tTfMultiSelect,\n\t\tTfSingleSelect,\n\t\tTfCheckbox,\n\t},\n\tformComponents: {\n\t\tButton,\n\t},\n\tfieldContext,\n\tformContext,\n});\n"],"names":["useAppForm","createFormHook","TfTextField","TfNumberField","TfMultiSelect","TfSingleSelect","TfCheckbox","Button","fieldContext","formContext"],"mappings":"yzBAcO,KAAM,CAAE,WAAAA,CAAA,EAAeC,EAAe,CAC5C,gBAAiB,CAChB,YAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,WAAAC,CAAA,EAED,eAAgB,CACf,OAAAC,CAAA,EAED,aAAAC,EACA,YAAAC,CACD,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { FieldApi } from '@tanstack/react-form';
2
+ import { ClassValue } from 'clsx';
3
+ /** Classnames */
4
+ export declare function classNames(...inputs: ClassValue[]): string;
5
+ /**
6
+ *
7
+ * @returns
8
+ */
9
+ export declare function getThemeHue(): string;
10
+ /**
11
+ * @param hue the hue value to set in the document style
12
+ */
13
+ export declare function setThemeHue(hue: number): void;
14
+ export declare function logout(): void;
15
+ export type JwtDecode = {
16
+ aud: string;
17
+ email: string;
18
+ exp: number;
19
+ iat: number;
20
+ jti: string;
21
+ region: string;
22
+ role: string;
23
+ role_type: string;
24
+ scope: string[];
25
+ sub: string;
26
+ teat: number;
27
+ tenantid: string;
28
+ token_usage: string;
29
+ sadmin?: string;
30
+ };
31
+ export type CtxPortals = "customer-portal" | "system-portal" | "reseller-portal" | "admin-portal";
32
+ /**
33
+ *
34
+ * @param input camelCase
35
+ * @returns title case for the camelCase string
36
+ */
37
+ export declare function convertToTitleCase(input: string): string;
38
+ export declare function pluralizeTimes(resourceName: string, count: number): string;
39
+ /**
40
+ * Converts a string from 'camelCase' to 'Title Case'
41
+ * @param input String to convert to `Title Case`
42
+ */
43
+ export declare function convertCamelCaseToTitleCase(input: string): string;
44
+ export declare function getFieldErrorMessage(field: FieldApi<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>): string;
@@ -0,0 +1,2 @@
1
+ import{clsx as n}from"clsx";function l(...e){return n(e)}const r="--primary-hue";function s(){return document.documentElement.style.getPropertyValue(r)}function u(e){document.documentElement.style.setProperty(r,e)}const a="AT",c="RT";function p(){if(typeof window<"u"&&window.localStorage)try{localStorage.removeItem(c),localStorage.removeItem(a),window.location.replace("/auth/login")}catch(e){console.error("Logout failed:",e)}}function m(e){return e.replace(/([A-Z])/g," $1").trim().split(" ").map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function f(e,t){return t>1?/y$/.test(e)?e==="Day"?"Days":e.replace(/y$/,"ies"):e.concat("s"):e}function g(e){if(e){const t=e.replace(/([A-Z])/g," $1");return t.charAt(0).toUpperCase().concat(t.slice(1)).replace(/\.[a-z]/,o=>o.replace("."," ").toUpperCase())}return e}function T(e){return e?.state.meta.errors.map(t=>t?.message).join(",")}export{l as classNames,g as convertCamelCaseToTitleCase,m as convertToTitleCase,T as getFieldErrorMessage,s as getThemeHue,p as logout,f as pluralizeTimes,u as setThemeHue};
2
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sources":["../../lib/utils/primitives.ts"],"sourcesContent":["import type { FieldApi } from \"@tanstack/react-form\";\nimport { clsx, type ClassValue } from \"clsx\";\n\n/** Classnames */\nexport function classNames(...inputs: ClassValue[]) {\n return clsx(inputs);\n}\n\n/**\n * This is the variable name representing the primary hue.\n * Referenced in tokens.scss -> token.css\n */\nconst PRIMARY_HUE_PROPERTY = \"--primary-hue\";\n\n/**\n *\n * @returns\n */\nexport function getThemeHue() {\n return document.documentElement.style.getPropertyValue(PRIMARY_HUE_PROPERTY);\n}\n\n/**\n * @param hue the hue value to set in the document style\n */\nexport function setThemeHue(hue: number) {\n document.documentElement.style.setProperty(\n PRIMARY_HUE_PROPERTY,\n // In this case, it must be a number.\n hue as unknown as string,\n );\n}\n\nconst ACCESS_TOKEN = \"AT\";\nconst REFRESH_TOKEN = \"RT\";\nexport function logout() {\n if (typeof window !== \"undefined\" && window.localStorage) {\n try {\n localStorage.removeItem(REFRESH_TOKEN);\n localStorage.removeItem(ACCESS_TOKEN);\n window.location.replace(\"/auth/login\");\n } catch (error) {\n console.error(\"Logout failed:\", error);\n }\n }\n}\n\nexport type JwtDecode = {\n aud: string;\n email: string;\n exp: number;\n iat: number;\n jti: string;\n region: string;\n role: string;\n role_type: string;\n scope: string[];\n sub: string;\n teat: number;\n tenantid: string;\n token_usage: string;\n sadmin?: string;\n};\n\nexport type CtxPortals =\n | \"customer-portal\"\n | \"system-portal\"\n | \"reseller-portal\"\n | \"admin-portal\";\n\n\n/**\n *\n * @param input camelCase\n * @returns title case for the camelCase string\n */\nexport function convertToTitleCase(input: string): string {\n return input\n .replace(/([A-Z])/g, \" $1\") // Insert space before capital letters\n .trim() // Remove any leading/trailing spaces\n .split(\" \") // Split into words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) // Capitalize each word\n .join(\" \"); // Join back into a single string\n}\n\nexport function pluralizeTimes(resourceName: string, count: number) {\n if (count > 1) {\n if (/y$/.test(resourceName)) {\n if (resourceName === \"Day\") return \"Days\";\n return resourceName.replace(/y$/, \"ies\");\n }\n return resourceName.concat(\"s\");\n }\n return resourceName;\n}\n\n/**\n * Converts a string from 'camelCase' to 'Title Case'\n * @param input String to convert to `Title Case`\n */\nexport function convertCamelCaseToTitleCase(input: string) {\n if (input) {\n const spacedString = input.replace(/([A-Z])/g, \" $1\");\n return spacedString\n .charAt(0)\n .toUpperCase()\n .concat(spacedString.slice(1))\n .replace(/\\.[a-z]/, (substr: string) => {\n return substr.replace(\".\", \" \").toUpperCase();\n });\n }\n return input;\n}\n\nexport function getFieldErrorMessage(field: FieldApi<any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any, any>): string {\n return field?.state.meta.errors.map((e) => e?.message).join(\",\")\n}"],"names":["classNames","inputs","clsx","PRIMARY_HUE_PROPERTY","getThemeHue","setThemeHue","hue","ACCESS_TOKEN","REFRESH_TOKEN","logout","error","convertToTitleCase","input","word","pluralizeTimes","resourceName","count","convertCamelCaseToTitleCase","spacedString","substr","getFieldErrorMessage","field","e"],"mappings":"4BAIO,SAASA,KAAcC,EAAsB,CAChD,OAAOC,EAAKD,CAAM,CACtB,CAMA,MAAME,EAAuB,gBAMtB,SAASC,GAAc,CAC1B,OAAO,SAAS,gBAAgB,MAAM,iBAAiBD,CAAoB,CAC/E,CAKO,SAASE,EAAYC,EAAa,CACrC,SAAS,gBAAgB,MAAM,YAC3BH,EAEAG,CAAA,CAER,CAEA,MAAMC,EAAe,KACfC,EAAgB,KACf,SAASC,GAAS,CACrB,GAAI,OAAO,OAAW,KAAe,OAAO,aACxC,GAAI,CACA,aAAa,WAAWD,CAAa,EACrC,aAAa,WAAWD,CAAY,EACpC,OAAO,SAAS,QAAQ,aAAa,CACzC,OAASG,EAAO,CACZ,QAAQ,MAAM,iBAAkBA,CAAK,CACzC,CAER,CA+BO,SAASC,EAAmBC,EAAuB,CACtD,OAAOA,EACF,QAAQ,WAAY,KAAK,EACzB,KAAA,EACA,MAAM,GAAG,EACT,IAAKC,GAASA,EAAK,OAAO,CAAC,EAAE,YAAA,EAAgBA,EAAK,MAAM,CAAC,EAAE,YAAA,CAAa,EACxE,KAAK,GAAG,CACjB,CAEO,SAASC,EAAeC,EAAsBC,EAAe,CAChE,OAAIA,EAAQ,EACJ,KAAK,KAAKD,CAAY,EAClBA,IAAiB,MAAc,OAC5BA,EAAa,QAAQ,KAAM,KAAK,EAEpCA,EAAa,OAAO,GAAG,EAE3BA,CACX,CAMO,SAASE,EAA4BL,EAAe,CACvD,GAAIA,EAAO,CACP,MAAMM,EAAeN,EAAM,QAAQ,WAAY,KAAK,EACpD,OAAOM,EACF,OAAO,CAAC,EACR,cACA,OAAOA,EAAa,MAAM,CAAC,CAAC,EAC5B,QAAQ,UAAYC,GACVA,EAAO,QAAQ,IAAK,GAAG,EAAE,YAAA,CACnC,CACT,CACA,OAAOP,CACX,CAEO,SAASQ,EAAqBC,EAAwH,CACzJ,OAAOA,GAAO,MAAM,KAAK,OAAO,IAAKC,GAAMA,GAAG,OAAO,EAAE,KAAK,GAAG,CACnE"}
@@ -0,0 +1,11 @@
1
+ import { CtxPortals } from 'lib/utils/primitives';
2
+ /** Resource Name should ALWAYS be in singular form */
3
+ export declare const RESOURCE_NAMES: readonly ["access-token", "account", "activation", "activation-log", "admin-role", "audit-log", "automated-email", "automated-email-event-log", "card", "feature-flag", "invoice", "license", "license-template", "maintenance-policy", "organization", "plan", "product", "product-version", "profile", "release", "release-channel", "release-file", "release-platform", "report", "role", "role-claim", "saml-configuration", "segment", "sending-domain", "setting", "tag", "team-member", "trial", "trial-policy", "user", "user-group", "webhook", "webhook-event-log", "webhook-trigger", "reseller", "oidc-configuration", "organization-claim", "reseller-claim"];
4
+ export type ResourceName = (typeof RESOURCE_NAMES)[number];
5
+ export declare const RESOURCE_DEFINITIONS: Record<ResourceName, string>;
6
+ export declare function ProjectProvider({ projectName, children }: {
7
+ projectName: CtxPortals;
8
+ children: React.ReactNode;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ export declare function useProjectName(): CtxPortals;
11
+ export declare function useResourceFormatter(): (resourceName: string) => string;