@rsc-kit/press 0.0.0-stage → 0.30.42

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 (180) hide show
  1. package/README.md +117 -2
  2. package/dist/admin/actions.d.ts +30 -0
  3. package/dist/admin/actions.js +171 -0
  4. package/dist/admin/actions.js.map +1 -0
  5. package/dist/admin/index.d.ts +5 -0
  6. package/dist/admin/index.js +2 -0
  7. package/dist/admin/index.js.map +1 -0
  8. package/dist/admin/panel.d.ts +96 -0
  9. package/dist/admin/panel.js +354 -0
  10. package/dist/admin/panel.js.map +1 -0
  11. package/dist/admin/registry.d.ts +58 -0
  12. package/dist/admin/registry.js +90 -0
  13. package/dist/admin/registry.js.map +1 -0
  14. package/dist/admin/theme.d.ts +251 -0
  15. package/dist/admin/theme.js +2 -0
  16. package/dist/admin/theme.js.map +1 -0
  17. package/dist/admin/url.d.ts +24 -0
  18. package/dist/admin/url.js +45 -0
  19. package/dist/admin/url.js.map +1 -0
  20. package/dist/blocks.d.ts +46 -0
  21. package/dist/blocks.js +33 -0
  22. package/dist/blocks.js.map +1 -0
  23. package/dist/forms/actions.d.ts +7 -0
  24. package/dist/forms/actions.js +26 -0
  25. package/dist/forms/actions.js.map +1 -0
  26. package/dist/forms/form.d.ts +42 -0
  27. package/dist/forms/form.js +44 -0
  28. package/dist/forms/form.js.map +1 -0
  29. package/dist/forms/honeypot.d.ts +2 -0
  30. package/dist/forms/honeypot.js +3 -0
  31. package/dist/forms/honeypot.js.map +1 -0
  32. package/dist/forms/index.d.ts +3 -0
  33. package/dist/forms/index.js +2 -0
  34. package/dist/forms/index.js.map +1 -0
  35. package/dist/forms/registry.d.ts +10 -0
  36. package/dist/forms/registry.js +17 -0
  37. package/dist/forms/registry.js.map +1 -0
  38. package/dist/forms/theme.d.ts +29 -0
  39. package/dist/forms/theme.js +2 -0
  40. package/dist/forms/theme.js.map +1 -0
  41. package/dist/index.d.ts +12 -0
  42. package/dist/index.js +8 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/installable.d.ts +173 -0
  45. package/dist/installable.js +490 -0
  46. package/dist/installable.js.map +1 -0
  47. package/dist/memory.d.ts +7 -0
  48. package/dist/memory.js +50 -0
  49. package/dist/memory.js.map +1 -0
  50. package/dist/pages/index.d.ts +2 -0
  51. package/dist/pages/index.js +2 -0
  52. package/dist/pages/index.js.map +1 -0
  53. package/dist/pages/pages.d.ts +78 -0
  54. package/dist/pages/pages.js +183 -0
  55. package/dist/pages/pages.js.map +1 -0
  56. package/dist/plugin.d.ts +51 -0
  57. package/dist/plugin.js +20 -0
  58. package/dist/plugin.js.map +1 -0
  59. package/dist/resource.d.ts +320 -0
  60. package/dist/resource.js +415 -0
  61. package/dist/resource.js.map +1 -0
  62. package/dist/shadcn/breadcrumbs.d.ts +6 -0
  63. package/dist/shadcn/breadcrumbs.js +21 -0
  64. package/dist/shadcn/breadcrumbs.js.map +1 -0
  65. package/dist/shadcn/components/ui/alert-dialog.d.ts +18 -0
  66. package/dist/shadcn/components/ui/alert-dialog.js +44 -0
  67. package/dist/shadcn/components/ui/alert-dialog.js.map +1 -0
  68. package/dist/shadcn/components/ui/avatar.d.ts +11 -0
  69. package/dist/shadcn/components/ui/avatar.js +25 -0
  70. package/dist/shadcn/components/ui/avatar.js.map +1 -0
  71. package/dist/shadcn/components/ui/badge.d.ts +7 -0
  72. package/dist/shadcn/components/ui/badge.js +34 -0
  73. package/dist/shadcn/components/ui/badge.js.map +1 -0
  74. package/dist/shadcn/components/ui/breadcrumb.d.ts +10 -0
  75. package/dist/shadcn/components/ui/breadcrumb.js +38 -0
  76. package/dist/shadcn/components/ui/breadcrumb.js.map +1 -0
  77. package/dist/shadcn/components/ui/button.d.ts +8 -0
  78. package/dist/shadcn/components/ui/button.js +35 -0
  79. package/dist/shadcn/components/ui/button.js.map +1 -0
  80. package/dist/shadcn/components/ui/card.d.ts +11 -0
  81. package/dist/shadcn/components/ui/card.js +26 -0
  82. package/dist/shadcn/components/ui/card.js.map +1 -0
  83. package/dist/shadcn/components/ui/checkbox.d.ts +3 -0
  84. package/dist/shadcn/components/ui/checkbox.js +10 -0
  85. package/dist/shadcn/components/ui/checkbox.js.map +1 -0
  86. package/dist/shadcn/components/ui/dropdown-menu.d.ts +29 -0
  87. package/dist/shadcn/components/ui/dropdown-menu.js +53 -0
  88. package/dist/shadcn/components/ui/dropdown-menu.js.map +1 -0
  89. package/dist/shadcn/components/ui/field.d.ts +24 -0
  90. package/dist/shadcn/components/ui/field.js +69 -0
  91. package/dist/shadcn/components/ui/field.js.map +1 -0
  92. package/dist/shadcn/components/ui/input.d.ts +3 -0
  93. package/dist/shadcn/components/ui/input.js +9 -0
  94. package/dist/shadcn/components/ui/input.js.map +1 -0
  95. package/dist/shadcn/components/ui/label.d.ts +3 -0
  96. package/dist/shadcn/components/ui/label.js +9 -0
  97. package/dist/shadcn/components/ui/label.js.map +1 -0
  98. package/dist/shadcn/components/ui/select.d.ts +15 -0
  99. package/dist/shadcn/components/ui/select.js +36 -0
  100. package/dist/shadcn/components/ui/select.js.map +1 -0
  101. package/dist/shadcn/components/ui/separator.d.ts +3 -0
  102. package/dist/shadcn/components/ui/separator.js +9 -0
  103. package/dist/shadcn/components/ui/separator.js.map +1 -0
  104. package/dist/shadcn/components/ui/sheet.d.ts +14 -0
  105. package/dist/shadcn/components/ui/sheet.js +39 -0
  106. package/dist/shadcn/components/ui/sheet.js.map +1 -0
  107. package/dist/shadcn/components/ui/sidebar.d.ts +63 -0
  108. package/dist/shadcn/components/ui/sidebar.js +257 -0
  109. package/dist/shadcn/components/ui/sidebar.js.map +1 -0
  110. package/dist/shadcn/components/ui/skeleton.d.ts +2 -0
  111. package/dist/shadcn/components/ui/skeleton.js +7 -0
  112. package/dist/shadcn/components/ui/skeleton.js.map +1 -0
  113. package/dist/shadcn/components/ui/sonner.d.ts +3 -0
  114. package/dist/shadcn/components/ui/sonner.js +38 -0
  115. package/dist/shadcn/components/ui/sonner.js.map +1 -0
  116. package/dist/shadcn/components/ui/switch.d.ts +5 -0
  117. package/dist/shadcn/components/ui/switch.js +9 -0
  118. package/dist/shadcn/components/ui/switch.js.map +1 -0
  119. package/dist/shadcn/components/ui/table.d.ts +10 -0
  120. package/dist/shadcn/components/ui/table.js +30 -0
  121. package/dist/shadcn/components/ui/table.js.map +1 -0
  122. package/dist/shadcn/components/ui/textarea.d.ts +3 -0
  123. package/dist/shadcn/components/ui/textarea.js +8 -0
  124. package/dist/shadcn/components/ui/textarea.js.map +1 -0
  125. package/dist/shadcn/components/ui/tooltip.d.ts +6 -0
  126. package/dist/shadcn/components/ui/tooltip.js +18 -0
  127. package/dist/shadcn/components/ui/tooltip.js.map +1 -0
  128. package/dist/shadcn/data-table.d.ts +12 -0
  129. package/dist/shadcn/data-table.js +195 -0
  130. package/dist/shadcn/data-table.js.map +1 -0
  131. package/dist/shadcn/fields.d.ts +20 -0
  132. package/dist/shadcn/fields.js +179 -0
  133. package/dist/shadcn/fields.js.map +1 -0
  134. package/dist/shadcn/flash-toasts.d.ts +2 -0
  135. package/dist/shadcn/flash-toasts.js +11 -0
  136. package/dist/shadcn/flash-toasts.js.map +1 -0
  137. package/dist/shadcn/hooks/use-mobile.d.ts +1 -0
  138. package/dist/shadcn/hooks/use-mobile.js +16 -0
  139. package/dist/shadcn/hooks/use-mobile.js.map +1 -0
  140. package/dist/shadcn/index.d.ts +10 -0
  141. package/dist/shadcn/index.js +31 -0
  142. package/dist/shadcn/index.js.map +1 -0
  143. package/dist/shadcn/mode-toggle.d.ts +7 -0
  144. package/dist/shadcn/mode-toggle.js +52 -0
  145. package/dist/shadcn/mode-toggle.js.map +1 -0
  146. package/dist/shadcn/nav.d.ts +5 -0
  147. package/dist/shadcn/nav.js +19 -0
  148. package/dist/shadcn/nav.js.map +1 -0
  149. package/dist/shadcn/pages.d.ts +15 -0
  150. package/dist/shadcn/pages.js +59 -0
  151. package/dist/shadcn/pages.js.map +1 -0
  152. package/dist/shadcn/plugin-forms.d.ts +16 -0
  153. package/dist/shadcn/plugin-forms.js +25 -0
  154. package/dist/shadcn/plugin-forms.js.map +1 -0
  155. package/dist/shadcn/public-form.d.ts +8 -0
  156. package/dist/shadcn/public-form.js +26 -0
  157. package/dist/shadcn/public-form.js.map +1 -0
  158. package/dist/shadcn/resource-form.d.ts +19 -0
  159. package/dist/shadcn/resource-form.js +30 -0
  160. package/dist/shadcn/resource-form.js.map +1 -0
  161. package/dist/shadcn/styles.css +12 -0
  162. package/dist/shadcn/tenant-switcher.d.ts +3 -0
  163. package/dist/shadcn/tenant-switcher.js +17 -0
  164. package/dist/shadcn/tenant-switcher.js.map +1 -0
  165. package/dist/shadcn/theme-script.d.ts +7 -0
  166. package/dist/shadcn/theme-script.js +10 -0
  167. package/dist/shadcn/theme-script.js.map +1 -0
  168. package/dist/shadcn/user-menu.d.ts +3 -0
  169. package/dist/shadcn/user-menu.js +23 -0
  170. package/dist/shadcn/user-menu.js.map +1 -0
  171. package/dist/signing.d.ts +43 -0
  172. package/dist/signing.js +82 -0
  173. package/dist/signing.js.map +1 -0
  174. package/dist/tenant.d.ts +12 -0
  175. package/dist/tenant.js +29 -0
  176. package/dist/tenant.js.map +1 -0
  177. package/dist/uploads.d.ts +32 -0
  178. package/dist/uploads.js +28 -0
  179. package/dist/uploads.js.map +1 -0
  180. package/package.json +74 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../../src/shadcn/components/ui/sidebar.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\n\nimport { useIsMobile } from \"../../hooks/use-mobile.js\"\nimport { Button } from \"./button.js\"\nimport { Input } from \"./input.js\"\nimport { Separator } from \"./separator.js\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet.js\"\nimport { Skeleton } from \"./skeleton.js\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"./tooltip.js\"\nimport { PanelLeftIcon } from \"lucide-react\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n dir,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n dir={dir}\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer hidden text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n data-side={side}\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon-sm\"\n className={cn(className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & React.ComponentProps<\"div\">) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-label\",\n sidebar: \"group-label\",\n },\n })\n}\n\nfunction SidebarGroupAction({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"button\"> & React.ComponentProps<\"button\">) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-action\",\n sidebar: \"group-action\",\n },\n })\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-0\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n render,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n } & VariantProps<typeof sidebarMenuButtonVariants>) {\n const { isMobile, state } = useSidebar()\n const comp = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(sidebarMenuButtonVariants({ variant, size }), className),\n },\n props\n ),\n render: !tooltip ? render : <TooltipTrigger render={render} />,\n state: {\n slot: \"sidebar-menu-button\",\n sidebar: \"menu-button\",\n size,\n active: isActive,\n },\n })\n\n if (!tooltip) {\n return comp\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n {comp}\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n render,\n showOnHover = false,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n showOnHover?: boolean\n }) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-action\",\n sidebar: \"menu-action\",\n },\n })\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const [width] = React.useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n })\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n render,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: useRender.ComponentProps<\"a\"> &\n React.ComponentProps<\"a\"> & {\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-sub-button\",\n sidebar: \"menu-sub-button\",\n size,\n active: isActive,\n },\n })\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n"]}
@@ -0,0 +1,2 @@
1
+ declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
2
+ export { Skeleton };
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "cn";
3
+ function Skeleton({ className, ...props }) {
4
+ return (_jsx("div", { "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props }));
5
+ }
6
+ export { Skeleton };
7
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../../src/shadcn/components/ui/skeleton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAA;AAEvB,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACpE,OAAO,CACL,2BACY,UAAU,EACpB,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,KACzD,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA","sourcesContent":["import { cn } from \"cn\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"]}
@@ -0,0 +1,3 @@
1
+ import { type ToasterProps } from 'sonner';
2
+ declare const Toaster: ({ ...props }: ToasterProps) => import("react").JSX.Element;
3
+ export { Toaster };
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useEffect, useState } from 'react';
4
+ import { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon } from 'lucide-react';
5
+ import { Toaster as Sonner } from 'sonner';
6
+ /**
7
+ * shadcn's Toaster, with the theme read from the .dark class the panel's own
8
+ * mode toggle sets rather than from next-themes, which the panel does not use.
9
+ */
10
+ function useDark() {
11
+ const [dark, setDark] = useState(false);
12
+ useEffect(() => {
13
+ const root = document.documentElement;
14
+ const read = () => setDark(root.classList.contains('dark'));
15
+ const observer = new MutationObserver(read);
16
+ read();
17
+ observer.observe(root, { attributes: true, attributeFilter: ['class'] });
18
+ return () => observer.disconnect();
19
+ }, []);
20
+ return dark;
21
+ }
22
+ const Toaster = ({ ...props }) => {
23
+ const dark = useDark();
24
+ return (_jsx(Sonner, { theme: dark ? 'dark' : 'light', className: "toaster group", icons: {
25
+ success: _jsx(CircleCheckIcon, { className: "size-4" }),
26
+ info: _jsx(InfoIcon, { className: "size-4" }),
27
+ warning: _jsx(TriangleAlertIcon, { className: "size-4" }),
28
+ error: _jsx(OctagonXIcon, { className: "size-4" }),
29
+ loading: _jsx(Loader2Icon, { className: "size-4 animate-spin" }),
30
+ }, style: {
31
+ '--normal-bg': 'var(--popover)',
32
+ '--normal-text': 'var(--popover-foreground)',
33
+ '--normal-border': 'var(--border)',
34
+ '--border-radius': 'var(--radius)',
35
+ }, ...props }));
36
+ };
37
+ export { Toaster };
38
+ //# sourceMappingURL=sonner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sonner.js","sourceRoot":"","sources":["../../../../src/shadcn/components/ui/sonner.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACtG,OAAO,EAAE,OAAO,IAAI,MAAM,EAAqB,MAAM,QAAQ,CAAA;AAE7D;;;GAGG;AACH,SAAS,OAAO;IACd,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAA;QACrC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3D,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAE3C,IAAI,EAAE,CAAA;QACN,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAExE,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;IACpC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,EAAgB,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,OAAO,CACL,KAAC,MAAM,IACL,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAC9B,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE;YACL,OAAO,EAAE,KAAC,eAAe,IAAC,SAAS,EAAC,QAAQ,GAAG;YAC/C,IAAI,EAAE,KAAC,QAAQ,IAAC,SAAS,EAAC,QAAQ,GAAG;YACrC,OAAO,EAAE,KAAC,iBAAiB,IAAC,SAAS,EAAC,QAAQ,GAAG;YACjD,KAAK,EAAE,KAAC,YAAY,IAAC,SAAS,EAAC,QAAQ,GAAG;YAC1C,OAAO,EAAE,KAAC,WAAW,IAAC,SAAS,EAAC,qBAAqB,GAAG;SACzD,EACD,KAAK,EACH;YACE,aAAa,EAAE,gBAAgB;YAC/B,eAAe,EAAE,2BAA2B;YAC5C,iBAAiB,EAAE,eAAe;YAClC,iBAAiB,EAAE,eAAe;SAClB,KAEhB,KAAK,GACT,CACH,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,CAAA","sourcesContent":["'use client'\n\nimport { useEffect, useState, type CSSProperties } from 'react'\nimport { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon } from 'lucide-react'\nimport { Toaster as Sonner, type ToasterProps } from 'sonner'\n\n/**\n * shadcn's Toaster, with the theme read from the .dark class the panel's own\n * mode toggle sets rather than from next-themes, which the panel does not use.\n */\nfunction useDark(): boolean {\n const [dark, setDark] = useState(false)\n\n useEffect(() => {\n const root = document.documentElement\n const read = () => setDark(root.classList.contains('dark'))\n const observer = new MutationObserver(read)\n\n read()\n observer.observe(root, { attributes: true, attributeFilter: ['class'] })\n\n return () => observer.disconnect()\n }, [])\n\n return dark\n}\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const dark = useDark()\n\n return (\n <Sonner\n theme={dark ? 'dark' : 'light'}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n style={\n {\n '--normal-bg': 'var(--popover)',\n '--normal-text': 'var(--popover-foreground)',\n '--normal-border': 'var(--border)',\n '--border-radius': 'var(--radius)',\n } as CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n"]}
@@ -0,0 +1,5 @@
1
+ import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
2
+ declare function Switch({ className, size, ...props }: SwitchPrimitive.Root.Props & {
3
+ size?: "sm" | "default";
4
+ }): import("react").JSX.Element;
5
+ export { Switch };
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
4
+ import { cn } from "cn";
5
+ function Switch({ className, size = "default", ...props }) {
6
+ return (_jsx(SwitchPrimitive.Root, { "data-slot": "switch", "data-size": size, className: cn("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: _jsx(SwitchPrimitive.Thumb, { "data-slot": "switch-thumb", className: "pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground" }) }));
7
+ }
8
+ export { Switch };
9
+ //# sourceMappingURL=switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../../src/shadcn/components/ui/switch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAA;AAEvB,SAAS,MAAM,CAAC,EACd,SAAS,EACT,IAAI,GAAG,SAAS,EAChB,GAAG,KAAK,EAGT;IACC,OAAO,CACL,KAAC,eAAe,CAAC,IAAI,iBACT,QAAQ,eACP,IAAI,EACf,SAAS,EAAE,EAAE,CACX,6vBAA6vB,EAC7vB,SAAS,CACV,KACG,KAAK,YAET,KAAC,eAAe,CAAC,KAAK,iBACV,cAAc,EACxB,SAAS,EAAC,+eAA+e,GACzf,GACmB,CACxB,CAAA;AACH,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAA","sourcesContent":["\"use client\"\n\nimport { Switch as SwitchPrimitive } from \"@base-ui/react/switch\"\nimport { cn } from \"cn\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: SwitchPrimitive.Root.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n"]}
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ declare function Table({ className, ...props }: React.ComponentProps<"table">): React.JSX.Element;
3
+ declare function TableHeader({ className, ...props }: React.ComponentProps<"thead">): React.JSX.Element;
4
+ declare function TableBody({ className, ...props }: React.ComponentProps<"tbody">): React.JSX.Element;
5
+ declare function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">): React.JSX.Element;
6
+ declare function TableRow({ className, ...props }: React.ComponentProps<"tr">): React.JSX.Element;
7
+ declare function TableHead({ className, ...props }: React.ComponentProps<"th">): React.JSX.Element;
8
+ declare function TableCell({ className, ...props }: React.ComponentProps<"td">): React.JSX.Element;
9
+ declare function TableCaption({ className, ...props }: React.ComponentProps<"caption">): React.JSX.Element;
10
+ export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, };
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "cn";
5
+ function Table({ className, ...props }) {
6
+ return (_jsx("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: _jsx("table", { "data-slot": "table", className: cn("w-full caption-bottom text-sm", className), ...props }) }));
7
+ }
8
+ function TableHeader({ className, ...props }) {
9
+ return (_jsx("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props }));
10
+ }
11
+ function TableBody({ className, ...props }) {
12
+ return (_jsx("tbody", { "data-slot": "table-body", className: cn("[&_tr:last-child]:border-0", className), ...props }));
13
+ }
14
+ function TableFooter({ className, ...props }) {
15
+ return (_jsx("tfoot", { "data-slot": "table-footer", className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props }));
16
+ }
17
+ function TableRow({ className, ...props }) {
18
+ return (_jsx("tr", { "data-slot": "table-row", className: cn("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted", className), ...props }));
19
+ }
20
+ function TableHead({ className, ...props }) {
21
+ return (_jsx("th", { "data-slot": "table-head", className: cn("h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className), ...props }));
22
+ }
23
+ function TableCell({ className, ...props }) {
24
+ return (_jsx("td", { "data-slot": "table-cell", className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className), ...props }));
25
+ }
26
+ function TableCaption({ className, ...props }) {
27
+ return (_jsx("caption", { "data-slot": "table-caption", className: cn("mt-4 text-sm text-muted-foreground", className), ...props }));
28
+ }
29
+ export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, };
30
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../src/shadcn/components/ui/table.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAA;AAEvB,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACnE,OAAO,CACL,2BACY,iBAAiB,EAC3B,SAAS,EAAC,iCAAiC,YAE3C,6BACY,OAAO,EACjB,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KACrD,KAAK,GACT,GACE,CACP,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACzE,OAAO,CACL,6BACY,cAAc,EACxB,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,KACvC,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACvE,OAAO,CACL,6BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAClD,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACzE,OAAO,CACL,6BACY,cAAc,EACxB,SAAS,EAAE,EAAE,CACX,yDAAyD,EACzD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IACnE,OAAO,CACL,0BACY,WAAW,EACrB,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IACpE,OAAO,CACL,0BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CACX,8GAA8G,EAC9G,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IACpE,OAAO,CACL,0BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CACX,kEAAkE,EAClE,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACwB;IAChC,OAAO,CACL,+BACY,eAAe,EACzB,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,KAC1D,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,CAAA","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import * as React from "react";
2
+ declare function Textarea({ className, ...props }: React.ComponentProps<"textarea">): React.JSX.Element;
3
+ export { Textarea };
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "cn";
4
+ function Textarea({ className, ...props }) {
5
+ return (_jsx("textarea", { "data-slot": "textarea", className: cn("flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className), ...props }));
6
+ }
7
+ export { Textarea };
8
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../../src/shadcn/components/ui/textarea.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAA;AAEvB,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoC;IACzE,OAAO,CACL,gCACY,UAAU,EACpB,SAAS,EAAE,EAAE,CACX,whBAAwhB,EACxhB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA","sourcesContent":["import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n"]}
@@ -0,0 +1,6 @@
1
+ import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
2
+ declare function TooltipProvider({ delay, ...props }: TooltipPrimitive.Provider.Props): import("react").JSX.Element;
3
+ declare function Tooltip({ ...props }: TooltipPrimitive.Root.Props): import("react").JSX.Element;
4
+ declare function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props): import("react").JSX.Element;
5
+ declare function TooltipContent({ className, side, sideOffset, align, alignOffset, children, ...props }: TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): import("react").JSX.Element;
6
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
4
+ import { cn } from "cn";
5
+ function TooltipProvider({ delay = 0, ...props }) {
6
+ return (_jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delay: delay, ...props }));
7
+ }
8
+ function Tooltip({ ...props }) {
9
+ return _jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
10
+ }
11
+ function TooltipTrigger({ ...props }) {
12
+ return _jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
13
+ }
14
+ function TooltipContent({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) {
15
+ return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Positioner, { align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, className: "isolate z-50", children: _jsxs(TooltipPrimitive.Popup, { "data-slot": "tooltip-content", className: cn("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className), ...props, children: [children, _jsx(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })] }) }) }));
16
+ }
17
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
18
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../../src/shadcn/components/ui/tooltip.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAA;AAEvB,SAAS,eAAe,CAAC,EACvB,KAAK,GAAG,CAAC,EACT,GAAG,KAAK,EACwB;IAChC,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,iBACd,kBAAkB,EAC5B,KAAK,EAAE,KAAK,KACR,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,GAAG,KAAK,EAA+B;IACxD,OAAO,KAAC,gBAAgB,CAAC,IAAI,iBAAW,SAAS,KAAK,KAAK,GAAI,CAAA;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,GAAG,KAAK,EAAkC;IAClE,OAAO,KAAC,gBAAgB,CAAC,OAAO,iBAAW,iBAAiB,KAAK,KAAK,GAAI,CAAA;AAC5E,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,SAAS,EACT,IAAI,GAAG,KAAK,EACZ,UAAU,GAAG,CAAC,EACd,KAAK,GAAG,QAAQ,EAChB,WAAW,GAAG,CAAC,EACf,QAAQ,EACR,GAAG,KAAK,EAKP;IACD,OAAO,CACL,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,gBAAgB,CAAC,UAAU,IAC1B,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,SAAS,EAAC,cAAc,YAExB,MAAC,gBAAgB,CAAC,KAAK,iBACX,iBAAiB,EAC3B,SAAS,EAAE,EAAE,CACX,iwBAAiwB,EACjwB,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,KAAC,gBAAgB,CAAC,KAAK,IAAC,SAAS,EAAC,0hBAA0hB,GAAG,IACxiB,GACG,GACN,CAC3B,CAAA;AACH,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA","sourcesContent":["\"use client\"\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\"\nimport { cn } from \"cn\"\n\nfunction TooltipProvider({\n delay = 0,\n ...props\n}: TooltipPrimitive.Provider.Props) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delay}\n {...props}\n />\n )\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n"]}
@@ -0,0 +1,12 @@
1
+ import type { TableProps } from '../admin/theme.js';
2
+ /**
3
+ * Every resource's table. One component for both modes, so a table looks and
4
+ * behaves the same wherever its rows are searched:
5
+ *
6
+ * server the url is the state. Typing, a filter, a header and the pager
7
+ * each visit a url, the page asks the source for one page, and a
8
+ * link works with no javascript and can be shared.
9
+ * client every row arrived at once; search, filters, sort and the pager
10
+ * happen here, with no request.
11
+ */
12
+ export declare function DataTable({ mode, href, columns, rows, total, perPage, query, filters, noun, bulk, }: TableProps): import("react").JSX.Element;
@@ -0,0 +1,195 @@
1
+ 'use client';
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useRef, useState, useTransition } from 'react';
4
+ import { columnVisibilityFeature, createPaginatedRowModel, createSortedRowModel, rowPaginationFeature, rowSortingFeature, tableFeatures, useTable, } from '@tanstack/react-table';
5
+ import Link from '@rsc-kit/core/Link';
6
+ import { visit } from '@rsc-kit/core/router';
7
+ import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight, Columns3, MoreHorizontal, Pencil, Search, Trash2, X } from 'lucide-react';
8
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from './components/ui/alert-dialog.js';
9
+ import { Button } from './components/ui/button.js';
10
+ import { Checkbox } from './components/ui/checkbox.js';
11
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from './components/ui/dropdown-menu.js';
12
+ import { Input } from './components/ui/input.js';
13
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './components/ui/select.js';
14
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './components/ui/table.js';
15
+ const features = tableFeatures({
16
+ rowSortingFeature,
17
+ rowPaginationFeature,
18
+ columnVisibilityFeature,
19
+ sortedRowModel: createSortedRowModel(),
20
+ paginatedRowModel: createPaginatedRowModel(),
21
+ });
22
+ const ALL = '__all__';
23
+ /**
24
+ * Every resource's table. One component for both modes, so a table looks and
25
+ * behaves the same wherever its rows are searched:
26
+ *
27
+ * server the url is the state. Typing, a filter, a header and the pager
28
+ * each visit a url, the page asks the source for one page, and a
29
+ * link works with no javascript and can be shared.
30
+ * client every row arrived at once; search, filters, sort and the pager
31
+ * happen here, with no request.
32
+ */
33
+ export function DataTable({ mode, href, columns, rows, total, perPage, query, filters, noun, bulk, }) {
34
+ const server = mode === 'server';
35
+ const [q, setQ] = useState(query.q);
36
+ const [chosen, setChosen] = useState(query.filters);
37
+ const [sorting, setSorting] = useState(query.sort ? [{ id: query.sort, desc: query.dir === 'desc' }] : []);
38
+ const [columnVisibility, setColumnVisibility] = useState(() => Object.fromEntries(columns.filter((column) => !column.visible).map((column) => [column.key, false])));
39
+ const [pagination, setPagination] = useState({ pageIndex: server ? query.page - 1 : 0, pageSize: perPage });
40
+ const [confirming, setConfirming] = useState(null);
41
+ const [deleting, startDelete] = useTransition();
42
+ const [selected, setSelected] = useState(() => new Set());
43
+ const [running, startRun] = useTransition();
44
+ // New rows - another page, a search, the table after an action - start
45
+ // with nothing ticked: a selection is of rows the visitor can see.
46
+ useEffect(() => setSelected(new Set()), [rows]);
47
+ const [, startVisit] = useTransition();
48
+ // Server mode: the url this state names. Empty values are left out, so a
49
+ // cleared search is the plain list url and not ?q=.
50
+ const urlFor = (changes) => {
51
+ const next = { ...query, q, filters: chosen, ...changes };
52
+ const search = new URLSearchParams();
53
+ if (next.q)
54
+ search.set('q', next.q);
55
+ if (next.sort)
56
+ search.set('sort', next.sort);
57
+ if (next.sort && next.dir === 'desc')
58
+ search.set('dir', 'desc');
59
+ if (next.page > 1)
60
+ search.set('page', String(next.page));
61
+ for (const [key, value] of Object.entries(next.filters))
62
+ if (value)
63
+ search.set(key, value);
64
+ const qs = search.toString();
65
+ return qs ? `${href}?${qs}` : href;
66
+ };
67
+ const go = (url) => startVisit(() => void visit(url, { replace: true }));
68
+ // Typing searches after a pause, not per keystroke; the page resets to the first.
69
+ const typed = useRef(false);
70
+ useEffect(() => {
71
+ if (!server || !typed.current)
72
+ return;
73
+ const timer = setTimeout(() => go(urlFor({ q, page: 1 })), 300);
74
+ return () => clearTimeout(timer);
75
+ }, [q]);
76
+ // Client mode: search and filters here, before the table sorts and pages.
77
+ const visible = useMemo(() => {
78
+ if (server)
79
+ return rows;
80
+ const needle = q.trim().toLowerCase();
81
+ const searchable = columns.filter((column) => column.searchable).map((column) => column.key);
82
+ return rows.filter((row) => Object.entries(chosen).every(([key, value]) => !value || String(row.values[key]) === value) &&
83
+ (!needle || searchable.some((key) => String(row.values[key] ?? '').toLowerCase().includes(needle))));
84
+ }, [server, rows, q, chosen, columns]);
85
+ const columnDefs = useMemo(() => columns.map((column) => ({
86
+ id: column.key,
87
+ accessorFn: (row) => row.values[column.key],
88
+ header: column.label,
89
+ cell: ({ row }) => row.original.cells[column.key],
90
+ enableSorting: column.sortable,
91
+ enableHiding: true,
92
+ sortFn: (a, b, id) => compare(a.getValue(id), b.getValue(id)),
93
+ })), [columns]);
94
+ const table = useTable({
95
+ features,
96
+ data: visible,
97
+ columns: columnDefs,
98
+ getRowId: (row) => row.id,
99
+ manualSorting: server,
100
+ manualPagination: server,
101
+ ...(server ? { pageCount: Math.max(1, Math.ceil(total / perPage)) } : {}),
102
+ onSortingChange: setSorting,
103
+ onPaginationChange: setPagination,
104
+ onColumnVisibilityChange: setColumnVisibility,
105
+ state: { sorting, pagination, columnVisibility },
106
+ });
107
+ const onPage = table.getRowModel().rows.map((row) => row.id);
108
+ const ticked = onPage.filter((id) => selected.has(id));
109
+ const allTicked = onPage.length > 0 && ticked.length === onPage.length;
110
+ const tick = (ids, on) => setSelected((current) => {
111
+ const next = new Set(current);
112
+ for (const id of ids)
113
+ on ? next.add(id) : next.delete(id);
114
+ return next;
115
+ });
116
+ const runBulk = (action, ids) => startRun(async () => {
117
+ await bulk?.run(action.name, ids);
118
+ setSelected(new Set());
119
+ setConfirming(null);
120
+ });
121
+ const searchable = columns.some((column) => column.searchable);
122
+ const hasActions = rows.some((row) => row.edit || row.remove);
123
+ const pageCount = server ? Math.max(1, Math.ceil(total / perPage)) : Math.max(1, table.getPageCount());
124
+ const page = server ? query.page : pagination.pageIndex + 1;
125
+ const count = server ? total : visible.length;
126
+ return (_jsxs("div", { className: "flex flex-col gap-4", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [searchable && (_jsxs("form", { action: href, method: "get", className: "relative w-full sm:max-w-xs", onSubmit: (event) => {
127
+ event.preventDefault();
128
+ if (server)
129
+ go(urlFor({ q, page: 1 }));
130
+ }, children: [_jsx(Search, { className: "pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { name: "q", type: "search", placeholder: `Search ${noun.many.toLowerCase()}…`, "aria-label": `Search ${noun.many.toLowerCase()}`, className: "pl-8", value: q, onChange: (event) => {
131
+ typed.current = true;
132
+ setQ(event.target.value);
133
+ if (!server)
134
+ table.setPageIndex(0);
135
+ } })] })), filters.map((filter) => (_jsxs(Select, { items: [{ value: ALL, label: `All ${filter.label.toLowerCase()}` }, ...filter.options], value: chosen[filter.key] || ALL, onValueChange: (value) => {
136
+ const next = { ...chosen, [filter.key]: value === ALL || value === null ? '' : String(value) };
137
+ setChosen(next);
138
+ if (server)
139
+ go(urlFor({ filters: next, page: 1 }));
140
+ else
141
+ table.setPageIndex(0);
142
+ }, children: [_jsx(SelectTrigger, { "aria-label": filter.label, className: "w-full sm:w-44", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsxs(SelectItem, { value: ALL, children: ["All ", filter.label.toLowerCase()] }), filter.options.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value)))] })] }, filter.key))), _jsxs(DropdownMenu, { children: [_jsxs(DropdownMenuTrigger, { render: _jsx(Button, { variant: "outline", className: "ml-auto" }), children: [_jsx(Columns3, {}), _jsx("span", { className: "hidden sm:inline", children: "Columns" })] }), _jsx(DropdownMenuContent, { align: "end", className: "w-44", children: _jsxs(DropdownMenuGroup, { children: [_jsx(DropdownMenuLabel, { children: "Show columns" }), table
143
+ .getAllColumns()
144
+ .filter((column) => column.getCanHide())
145
+ .map((column) => (_jsx(DropdownMenuCheckboxItem, { checked: column.getIsVisible(), onCheckedChange: (value) => column.toggleVisibility(!!value), children: columns.find((candidate) => candidate.key === column.id)?.label }, column.id)))] }) })] })] }), _jsx("div", { className: "overflow-hidden rounded-lg border", children: _jsxs(Table, { children: [_jsx(TableHeader, { className: "bg-muted/50", children: table.getHeaderGroups().map((group) => (_jsxs(TableRow, { children: [bulk && (_jsx(TableHead, { className: "w-10", children: _jsx(Checkbox, { "aria-label": `Select every ${noun.one.toLowerCase()} on this page`, checked: allTicked, indeterminate: ticked.length > 0 && !allTicked, disabled: onPage.length === 0, onCheckedChange: () => tick(onPage, !allTicked) }) })), group.headers.map((header) => {
146
+ const column = header.column;
147
+ const label = columns.find((candidate) => candidate.key === column.id)?.label;
148
+ const sorted = server ? (query.sort === column.id ? query.dir : false) : column.getIsSorted();
149
+ const Arrow = sorted === 'asc' ? ArrowUp : sorted === 'desc' ? ArrowDown : ArrowUpDown;
150
+ return (_jsx(TableHead, { "aria-sort": sorted === 'asc' ? 'ascending' : sorted === 'desc' ? 'descending' : undefined, children: !column.getCanSort() ? (label) : server ? (_jsxs(Button, { variant: "ghost", size: "sm", className: "-ml-2.5 h-8", nativeButton: false, render: _jsx(Link, { href: urlFor({ sort: column.id, dir: sorted === 'asc' ? 'desc' : 'asc', page: 1 }), replace: true }), children: [label, _jsx(Arrow, { className: sorted ? undefined : 'text-muted-foreground/60' })] })) : (_jsxs(Button, { variant: "ghost", size: "sm", className: "-ml-2.5 h-8", onClick: () => column.toggleSorting(sorted === 'asc'), children: [label, _jsx(Arrow, { className: sorted ? undefined : 'text-muted-foreground/60' })] })) }, header.id));
151
+ }), hasActions && (_jsx(TableHead, { className: "w-12", children: _jsx("span", { className: "sr-only", children: "Actions" }) }))] }, group.id))) }), _jsx(TableBody, { children: table.getRowModel().rows.length ? (table.getRowModel().rows.map((row) => (_jsxs(TableRow, { "data-state": selected.has(row.id) ? 'selected' : undefined, children: [bulk && (_jsx(TableCell, { children: _jsx(Checkbox, { "aria-label": "Select row", checked: selected.has(row.id), onCheckedChange: (on) => tick([row.id], on) }) })), row.getVisibleCells().map((cell) => (_jsx(TableCell, { children: _jsx(table.FlexRender, { cell: cell }) }, cell.id))), hasActions && (_jsx(TableCell, { className: "text-right", children: _jsx(RowActions, { row: row.original, onDelete: () => setConfirming({ row: row.original }) }) }))] }, row.id)))) : (_jsx(TableRow, { children: _jsxs(TableCell, { colSpan: columns.length + (hasActions ? 1 : 0) + (bulk ? 1 : 0), className: "h-24 text-center text-muted-foreground", children: ["No ", noun.many.toLowerCase(), " found."] }) })) })] }) }), _jsxs("div", { className: "flex items-center justify-between gap-2", children: [bulk && ticked.length > 0 ? (_jsxs("div", { role: "toolbar", "aria-label": "Selected rows", className: "flex flex-wrap items-center gap-2", children: [_jsxs("span", { className: "text-sm font-medium", children: [ticked.length, " selected"] }), bulk.actions.map((action) => (_jsxs(Button, { size: "sm", variant: action.destructive ? 'destructive' : 'outline', disabled: running, onClick: () => (action.destructive ? setConfirming({ action, ids: ticked }) : runBulk(action, ticked)), children: [action.name === 'delete' && _jsx(Trash2, {}), action.label] }, action.name))), _jsx(Button, { size: "icon-sm", variant: "ghost", "aria-label": "Clear selection", disabled: running, onClick: () => setSelected(new Set()), children: _jsx(X, {}) })] })) : (_jsxs("p", { className: "text-sm text-muted-foreground", children: [count, " ", count === 1 ? noun.one.toLowerCase() : noun.many.toLowerCase()] })), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("span", { className: "text-sm text-muted-foreground", children: ["Page ", page, " of ", pageCount] }), server ? (_jsxs(_Fragment, { children: [_jsx(Pager, { to: page > 1 ? urlFor({ page: page - 1 }) : null, label: "Previous page", children: _jsx(ChevronLeft, {}) }), _jsx(Pager, { to: page < pageCount ? urlFor({ page: page + 1 }) : null, label: "Next page", children: _jsx(ChevronRight, {}) })] })) : (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", size: "icon-sm", "aria-label": "Previous page", disabled: !table.getCanPreviousPage(), onClick: () => table.previousPage(), children: _jsx(ChevronLeft, {}) }), _jsx(Button, { variant: "outline", size: "icon-sm", "aria-label": "Next page", disabled: !table.getCanNextPage(), onClick: () => table.nextPage(), children: _jsx(ChevronRight, {}) })] }))] })] }), _jsx(AlertDialog, { open: confirming !== null, onOpenChange: (open) => !open && !deleting && !running && setConfirming(null), children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: confirmTitle(confirming, noun) }), _jsx(AlertDialogDescription, { children: confirmDescription(confirming) })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: deleting || running, children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", disabled: deleting || running, onClick: () => {
152
+ if (confirming && 'ids' in confirming)
153
+ return runBulk(confirming.action, confirming.ids);
154
+ startDelete(async () => {
155
+ await confirming?.row.remove?.();
156
+ setConfirming(null);
157
+ });
158
+ }, children: confirming && 'ids' in confirming ? (running ? 'Working…' : confirming.action.label) : deleting ? 'Deleting…' : 'Delete' })] })] }) })] }));
159
+ }
160
+ function confirmTitle(confirming, noun) {
161
+ if (!confirming || 'row' in confirming)
162
+ return `Delete this ${noun.one.toLowerCase()}?`;
163
+ const { action, ids } = confirming;
164
+ const counted = `${ids.length} ${(ids.length === 1 ? noun.one : noun.many).toLowerCase()}`;
165
+ return action.name === 'delete' ? `Delete ${counted}?` : `${action.label}: ${counted}?`;
166
+ }
167
+ function confirmDescription(confirming) {
168
+ if (confirming && 'ids' in confirming && confirming.action.name !== 'delete')
169
+ return 'This cannot be undone.';
170
+ const many = confirming !== null && 'ids' in confirming && confirming.ids.length > 1;
171
+ return `${many ? 'They are' : 'It is'} removed for good. This cannot be undone.`;
172
+ }
173
+ function Pager({ to, label, children }) {
174
+ if (!to) {
175
+ return (_jsx(Button, { variant: "outline", size: "icon-sm", "aria-label": label, disabled: true, children: children }));
176
+ }
177
+ return _jsx(Button, { variant: "outline", size: "icon-sm", "aria-label": label, nativeButton: false, render: _jsx(Link, { href: to, replace: true }), children: children });
178
+ }
179
+ function RowActions({ row, onDelete }) {
180
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { render: _jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Actions" }), children: _jsx(MoreHorizontal, {}) }), _jsxs(DropdownMenuContent, { align: "end", className: "w-36", children: [row.edit && (_jsxs(DropdownMenuItem, { render: _jsx(Link, { href: row.edit }), children: [_jsx(Pencil, {}), "Edit"] })), row.edit && row.remove && _jsx(DropdownMenuSeparator, {}), row.remove && (_jsxs(DropdownMenuItem, { variant: "destructive", onClick: onDelete, children: [_jsx(Trash2, {}), "Delete"] }))] })] }));
181
+ }
182
+ function compare(a, b) {
183
+ if (a === b)
184
+ return 0;
185
+ if (a === null || a === undefined)
186
+ return 1;
187
+ if (b === null || b === undefined)
188
+ return -1;
189
+ if (typeof a === 'number' && typeof b === 'number')
190
+ return a - b;
191
+ if (typeof a === 'boolean' && typeof b === 'boolean')
192
+ return Number(a) - Number(b);
193
+ return String(a).localeCompare(String(b), undefined, { numeric: true });
194
+ }
195
+ //# sourceMappingURL=data-table.js.map