@cryptlex/web-components 5.3.0 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/{ui/alert.d.ts → alert.d.ts} +3 -3
- package/dist/components/alert.js +2 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/{ui/avatar.d.ts → avatar.d.ts} +0 -1
- package/dist/components/avatar.js +2 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/{ui/badge.d.ts → badge.d.ts} +0 -1
- package/dist/components/badge.js +2 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/{ui/breadcrumbs.d.ts → breadcrumbs.d.ts} +1 -1
- package/dist/components/breadcrumbs.js +2 -0
- package/dist/components/breadcrumbs.js.map +1 -0
- package/dist/components/{ui/button.d.ts → button.d.ts} +5 -5
- package/dist/components/button.js +2 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/{ui/calendar.d.ts → calendar.d.ts} +2 -3
- package/dist/components/calendar.js +2 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.js +2 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/{inputs/checkbox.d.ts → checkbox.d.ts} +3 -3
- package/dist/components/checkbox.js +2 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/{data-table/table-commons.d.ts → data-table-commons.d.ts} +8 -8
- package/dist/components/data-table-commons.js +2 -0
- package/dist/components/data-table-commons.js.map +1 -0
- package/dist/components/{data-table/data-table-filter.d.ts → data-table-filter.d.ts} +3 -3
- package/dist/components/data-table-filter.js +2 -0
- package/dist/components/data-table-filter.js.map +1 -0
- package/dist/components/{data-table/data-table.d.ts → data-table.d.ts} +24 -25
- package/dist/components/data-table.js +2 -0
- package/dist/components/data-table.js.map +1 -0
- package/dist/components/{inputs/date-picker.d.ts → date-picker.d.ts} +3 -3
- package/dist/components/date-picker.js +2 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/{inputs/datefield.d.ts → datefield.d.ts} +3 -3
- package/dist/components/datefield.js +2 -0
- package/dist/components/datefield.js.map +1 -0
- package/dist/components/{ui/dialog.d.ts → dialog.d.ts} +3 -4
- package/dist/components/dialog.js +2 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/{ui/disclosure.d.ts → disclosure.d.ts} +3 -7
- package/dist/components/disclosure.js +2 -0
- package/dist/components/disclosure.js.map +1 -0
- package/dist/components/{inputs/field.d.ts → field.d.ts} +5 -6
- package/dist/components/field.js +2 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/id-search.js +2 -0
- package/dist/components/id-search.js.map +1 -0
- package/dist/components/{inputs/input-otp.d.ts → input-otp.d.ts} +1 -2
- package/dist/components/input-otp.js +2 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/key-value-card.js +2 -0
- package/dist/components/key-value-card.js.map +1 -0
- package/dist/components/{ui/list-box.d.ts → list-box.d.ts} +1 -1
- package/dist/components/list-box.js +2 -0
- package/dist/components/list-box.js.map +1 -0
- package/dist/components/loader.js +2 -0
- package/dist/components/loader.js.map +1 -0
- package/dist/components/{ui/menu.d.ts → menu.d.ts} +5 -6
- package/dist/components/menu.js +2 -0
- package/dist/components/menu.js.map +1 -0
- package/dist/components/{inputs/multi-select.d.ts → multi-select.d.ts} +3 -4
- package/dist/components/multi-select.js +2 -0
- package/dist/components/multi-select.js.map +1 -0
- package/dist/components/{inputs/numberfield.d.ts → numberfield.d.ts} +2 -3
- package/dist/components/numberfield.js +2 -0
- package/dist/components/numberfield.js.map +1 -0
- package/dist/components/{ui/popover.d.ts → popover.d.ts} +1 -1
- package/dist/components/popover.js +2 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/{inputs/searchfield.d.ts → searchfield.d.ts} +2 -2
- package/dist/components/searchfield.js +2 -0
- package/dist/components/searchfield.js.map +1 -0
- package/dist/components/select-options.js +2 -0
- package/dist/components/select-options.js.map +1 -0
- package/dist/components/{inputs/select.d.ts → select.d.ts} +5 -5
- package/dist/components/select.js +2 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/{ui/sidebar.d.ts → sidebar.d.ts} +4 -5
- package/dist/components/sidebar.js +2 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.js +2 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/{ui/sonner.d.ts → sonner.d.ts} +1 -1
- package/dist/components/sonner.js +2 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/table-of-contents.d.ts +9 -0
- package/dist/components/table-of-contents.js +2 -0
- package/dist/components/table-of-contents.js.map +1 -0
- package/dist/components/{ui/table.d.ts → table.d.ts} +0 -1
- package/dist/components/table.js +2 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/{ui/tabs.d.ts → tabs.d.ts} +1 -1
- package/dist/components/tabs.js +2 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/{inputs/textfield.d.ts → textfield.d.ts} +2 -2
- package/dist/components/textfield.js +2 -0
- package/dist/components/textfield.js.map +1 -0
- package/dist/components/{ui/timeline.d.ts → timeline.d.ts} +3 -3
- package/dist/components/timeline.js +2 -0
- package/dist/components/timeline.js.map +1 -0
- package/dist/components/{ui/tooltip.d.ts → tooltip.d.ts} +1 -1
- package/dist/components/tooltip.js +2 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/utils/form-context.d.ts +1 -1
- package/dist/utils/form-context.js +2 -5
- package/dist/utils/form-context.js.map +1 -0
- package/dist/utils/form-hook.d.ts +9 -11
- package/dist/utils/form-hook.js +2 -30
- package/dist/utils/form-hook.js.map +1 -0
- package/dist/utils/primitives.d.ts +16 -2
- package/dist/utils/primitives.js +2 -39
- package/dist/utils/primitives.js.map +1 -0
- package/dist/utils/resource-names.d.ts +1 -13
- package/dist/utils/resource-names.js +2 -212
- package/dist/utils/resource-names.js.map +1 -0
- package/dist/utils/use-mobile.js +2 -15
- package/dist/utils/use-mobile.js.map +1 -0
- package/lib/utilities.css +2 -2
- package/package.json +13 -12
- package/dist/components/data-table/data-table-filter.js +0 -112
- package/dist/components/data-table/data-table.js +0 -265
- package/dist/components/data-table/table-commons.js +0 -137
- package/dist/components/inputs/checkbox.js +0 -25
- package/dist/components/inputs/date-picker.js +0 -22
- package/dist/components/inputs/datefield.js +0 -25
- package/dist/components/inputs/field.js +0 -48
- package/dist/components/inputs/id-search.js +0 -40
- package/dist/components/inputs/input-otp.js +0 -19
- package/dist/components/inputs/multi-select.js +0 -18
- package/dist/components/inputs/numberfield.js +0 -25
- package/dist/components/inputs/searchfield.js +0 -24
- package/dist/components/inputs/select-options.js +0 -286
- package/dist/components/inputs/select.js +0 -34
- package/dist/components/inputs/textfield.js +0 -28
- package/dist/components/key-value-card/key-value-card.js +0 -40
- package/dist/components/ui/alert.js +0 -18
- package/dist/components/ui/avatar.js +0 -5
- package/dist/components/ui/badge.js +0 -5
- package/dist/components/ui/breadcrumbs.js +0 -28
- package/dist/components/ui/button.js +0 -34
- package/dist/components/ui/calendar.js +0 -63
- package/dist/components/ui/card.js +0 -20
- package/dist/components/ui/dialog.js +0 -42
- package/dist/components/ui/disclosure.js +0 -20
- package/dist/components/ui/list-box.js +0 -24
- package/dist/components/ui/loader.js +0 -6
- package/dist/components/ui/menu.js +0 -38
- package/dist/components/ui/popover.js +0 -14
- package/dist/components/ui/sidebar.js +0 -177
- package/dist/components/ui/skeleton.js +0 -5
- package/dist/components/ui/sonner.js +0 -14
- package/dist/components/ui/table.js +0 -26
- package/dist/components/ui/tabs.js +0 -25
- package/dist/components/ui/timeline.js +0 -31
- package/dist/components/ui/tooltip.js +0 -12
- /package/dist/components/{ui/card.d.ts → card.d.ts} +0 -0
- /package/dist/components/{inputs/id-search.d.ts → id-search.d.ts} +0 -0
- /package/dist/components/{key-value-card/key-value-card.d.ts → key-value-card.d.ts} +0 -0
- /package/dist/components/{ui/loader.d.ts → loader.d.ts} +0 -0
- /package/dist/components/{inputs/select-options.d.ts → select-options.d.ts} +0 -0
- /package/dist/components/{ui/skeleton.d.ts → skeleton.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sources":["../../lib/components/select.tsx"],"sourcesContent":["\"use client\"\nimport {\n ListBox as AriaListBox,\n ListBoxProps as AriaListBoxProps,\n PopoverProps as AriaPopoverProps,\n Select as AriaSelect,\n SelectProps as AriaSelectProps,\n SelectValue as AriaSelectValue,\n SelectValueProps as AriaSelectValueProps,\n composeRenderProps\n} from \"react-aria-components\"\n\nimport { Button } from \"lib/components/button\"\nimport { FormField, type FormFieldProps } from \"lib/components/field\"\nimport type { SelectOption } from \"lib/components/select-options\"\nimport { useFieldContext } from \"lib/utils/form-context\"\nimport { classNames, getFieldErrorMessage } from \"lib/utils/primitives\"\nimport { ChevronDown } from \"lucide-react\"\nimport {\n ListBoxCollection,\n ListBoxHeader,\n ListBoxItem,\n} from \"./list-box\"\nimport { Popover } from \"./popover\"\n\nconst ASelect = AriaSelect\nexport const SelectItem = ListBoxItem\nexport const SelectHeader = ListBoxHeader\nexport const SelectCollection = ListBoxCollection\n\nexport const SelectValue = <T extends object>({\n className,\n ...props\n}: AriaSelectValueProps<T>) => (\n <AriaSelectValue\n className={composeRenderProps(className, (className) =>\n classNames(\n \"line-clamp-1 data-[placeholder]:text-muted-foreground\",\n /* Description */\n \"[&>[slot=description]]:hidden\",\n className\n )\n )}\n {...props}\n />\n)\n\nfunction SelectTrigger({ className, children, ...props }: React.ComponentProps<typeof Button>) {\n return (\n <Button {...props}>\n {composeRenderProps(children, (children) => (\n <>\n {children}\n <ChevronDown aria-hidden=\"true\" className=\"size-icon opacity-50\" />\n </>\n ))}\n </Button>\n )\n}\n\nexport function SelectPopover({ className, ...props }: AriaPopoverProps) {\n return (\n <Popover\n className={composeRenderProps(className, (className) =>\n classNames(\"w-auto min-w-[--trigger-width]\", className)\n )}\n {...props}\n />\n )\n}\n\nfunction SelectListBox<T extends object>({\n className,\n ...props\n}: AriaListBoxProps<T>) {\n return (\n <AriaListBox\n className={composeRenderProps(className, (className) =>\n classNames(\n \"overflow-auto p-1 outline-none [clip-path:inset(0_0_0_0_round_calc(var(--radius)-2px))]\",\n className\n )\n )}\n {...props}\n />\n )\n}\n\nexport interface SingleSelectProps<T extends SelectOption> extends Omit<AriaSelectProps<T>, \"children\">, FormFieldProps {\n items: Iterable<T>\n children: React.ReactNode | ((item: T) => React.ReactNode)\n}\n\nexport function SingleSelect<T extends SelectOption>({\n label,\n description,\n errorMessage,\n children,\n className,\n items,\n ...props\n}: SingleSelectProps<T>) {\n return (\n <ASelect\n className={composeRenderProps(className, (className) =>\n classNames(\"group form-field\", className)\n )}\n {...props}\n >\n <FormField label={label} description={description} errorMessage={errorMessage}>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectPopover>\n <SelectListBox items={items}>{children}</SelectListBox>\n </SelectPopover>\n </FormField>\n </ASelect>\n )\n}\n\n\ntype TfSingleSelectProps<T extends SelectOption> = Omit<SingleSelectProps<T>, \"value\" | \"setValue\" | 'children'>;\n\nexport function TfSingleSelect<T extends SelectOption>({ ...props }: TfSingleSelectProps<T>) {\n const field = useFieldContext<string>();\n\n return (\n <SingleSelect\n selectedKey={field.state.value}\n onSelectionChange={(e) => field.handleChange(e!.toString())}\n onBlur={field.handleBlur}\n errorMessage={getFieldErrorMessage(field)}\n {...props}\n >\n {(item) => <SelectItem id={item.id} key={item.id}>{item.label}</SelectItem>}\n </SingleSelect>\n );\n}\n"],"names":["ASelect","AriaSelect","SelectItem","ListBoxItem","SelectHeader","ListBoxHeader","SelectCollection","ListBoxCollection","SelectValue","className","props","jsx","AriaSelectValue","composeRenderProps","classNames","SelectTrigger","children","Button","jsxs","Fragment","ChevronDown","SelectPopover","Popover","SelectListBox","AriaListBox","SingleSelect","label","description","errorMessage","items","FormField","TfSingleSelect","field","useFieldContext","getFieldErrorMessage","item"],"mappings":"8oBAyBA,MAAMA,EAAUC,EACHC,EAAaC,EACbC,EAAeC,EACfC,EAAmBC,EAEnBC,EAAc,CAAmB,CAC5C,UAAAC,EACA,GAAGC,CACL,IACEC,EAACC,EAAA,CACC,UAAWC,EAAmBJ,EAAYA,GACxCK,EACE,wDAEA,gCACAL,CAAA,CACF,EAED,GAAGC,CAAA,CACN,EAGF,SAASK,EAAc,CAAE,UAAAN,EAAW,SAAAO,EAAU,GAAGN,GAA8C,CAC7F,OACEC,EAACM,GAAQ,GAAGP,EACT,WAAmBM,EAAWA,GAC7BE,EAAAC,EAAA,CACG,SAAA,CAAAH,EACDL,EAACS,EAAA,CAAY,cAAY,OAAO,UAAU,sBAAA,CAAuB,CAAA,CAAA,CACnE,CACD,CAAA,CACH,CAEJ,CAEO,SAASC,EAAc,CAAE,UAAAZ,EAAW,GAAGC,GAA2B,CACvE,OACEC,EAACW,EAAA,CACC,UAAWT,EAAmBJ,EAAYA,GACxCK,EAAW,iCAAkCL,CAAS,CAAA,EAEvD,GAAGC,CAAA,CAAA,CAGV,CAEA,SAASa,EAAgC,CACvC,UAAAd,EACA,GAAGC,CACL,EAAwB,CACtB,OACEC,EAACa,EAAA,CACC,UAAWX,EAAmBJ,EAAYA,GACxCK,EACE,0FACAL,CAAA,CACF,EAED,GAAGC,CAAA,CAAA,CAGV,CAOO,SAASe,EAAqC,CACnD,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,SAAAZ,EACA,UAAAP,EACA,MAAAoB,EACA,GAAGnB,CACL,EAAyB,CACvB,OACEC,EAACX,EAAA,CACC,UAAWa,EAAmBJ,EAAYA,GACxCK,EAAW,mBAAoBL,CAAS,CAAA,EAEzC,GAAGC,EAEJ,SAAAQ,EAACY,EAAA,CAAU,MAAAJ,EAAc,YAAAC,EAA0B,aAAAC,EACjD,SAAA,CAAAjB,EAACI,EAAA,CACC,SAAAJ,EAACH,EAAA,CAAA,CAAY,EACf,IACCa,EAAA,CACC,SAAAV,EAACY,EAAA,CAAc,MAAAM,EAAe,SAAAb,EAAS,CAAA,CACzC,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,CAKO,SAASe,EAAuC,CAAE,GAAGrB,GAAiC,CAC3F,MAAMsB,EAAQC,EAAA,EAEd,OACEtB,EAACc,EAAA,CACC,YAAaO,EAAM,MAAM,MACzB,kBAAoB,GAAMA,EAAM,aAAa,EAAG,UAAU,EAC1D,OAAQA,EAAM,WACd,aAAcE,EAAqBF,CAAK,EACvC,GAAGtB,EAEH,SAACyB,GAASxB,EAACT,EAAA,CAAW,GAAIiC,EAAK,GAAmB,SAAAA,EAAK,KAAA,EAAfA,EAAK,EAAgB,CAAA,CAAA,CAGpE"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { Tooltip } from "lib/components/ui/tooltip";
|
|
1
|
+
import { Button } from 'lib/components/button';
|
|
2
|
+
import { Tooltip } from 'lib/components/tooltip';
|
|
4
3
|
type SidebarContextProps = {
|
|
5
4
|
state: "expanded" | "collapsed";
|
|
6
5
|
open: boolean;
|
|
@@ -10,7 +9,7 @@ type SidebarContextProps = {
|
|
|
10
9
|
isMobile: boolean;
|
|
11
10
|
toggleSidebar: () => void;
|
|
12
11
|
};
|
|
13
|
-
export declare const SidebarContext:
|
|
12
|
+
export declare const SidebarContext: import('react').Context<SidebarContextProps | null>;
|
|
14
13
|
export declare function useSidebar(): SidebarContextProps;
|
|
15
14
|
export declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }: React.ComponentProps<'div'> & {
|
|
16
15
|
defaultOpen?: boolean;
|
|
@@ -23,7 +22,7 @@ export declare function Sidebar({ side, variant, collapsible, className, childre
|
|
|
23
22
|
collapsible?: "offcanvas" | "icon" | "none";
|
|
24
23
|
}): import("react/jsx-runtime").JSX.Element;
|
|
25
24
|
export declare function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
|
|
26
|
-
export declare const SidebarRail:
|
|
25
|
+
export declare const SidebarRail: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
|
|
27
26
|
export declare function SidebarInset({ className, ...props }: React.ComponentProps<'main'>): import("react/jsx-runtime").JSX.Element;
|
|
28
27
|
export declare function SidebarHeader({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
29
28
|
export declare function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -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 y}from"react";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"clsx";const W="16rem",q="18rem",F="3rem",U="b",k=H(null);function h(){const t=K(k);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=y(()=>({state:v,open:f,setOpen:m,isMobile:l,openMobile:p,setOpenMobile:b,toggleSidebar:g}),[v,f,m,l,p,b,g]);return a(k.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=y(()=>`${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 ye({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 ke({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";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,k 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,ye as SidebarMenuSub,_e as SidebarMenuSubButton,ke 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/sidebar.tsx"],"sourcesContent":["\"use client\"\nimport { PanelLeftClose, PanelLeftOpen } from \"lucide-react\"\n\nimport { Button } from \"lib/components/button\"\nimport { DialogContent, DialogOverlay, DialogTrigger } from \"lib/components/dialog\"\nimport { Skeleton } from \"lib/components/skeleton\"\nimport { Tooltip, TooltipTrigger } from \"lib/components/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\n// TODO, this is similar to the tab pattern, standardize the two.\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\";\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
|
+
{"version":3,"file":"skeleton.js","sources":["../../lib/components/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":"yGAEO,SAASA,EAAS,CAAE,UAAAC,EAAW,GAAGC,GAAsC,CAC9E,OACCC,EAAC,OAAI,UAAWC,EAAW,8BAA+BH,CAAS,EAAI,GAAGC,EAAO,CAEnF"}
|
|
@@ -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/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,2 @@
|
|
|
1
|
+
"use client";import{jsxs as m,jsx as l}from"react/jsx-runtime";import{classNames as p}from"../utils/primitives.js";import{useMemo as h,useRef as i,useEffect as f,useState as v}from"react";import"clsx";function g(o){const[c,a]=v(null);return f(()=>{const r=new IntersectionObserver(n=>{for(const e of n)e.isIntersecting&&a(e.target.id)},{rootMargin:"0% 0% -80% 0%"});for(const n of o??[]){const e=document.getElementById(n);e&&r.observe(e)}return()=>{for(const n of o??[]){const e=document.getElementById(n);e&&r.unobserve(e)}}},[o]),c}function E({toc:o,className:c}){const a=h(()=>o.map(t=>t.url.replace("#","")),[o]),r=g(a),n=i({}),e=i(null);return f(()=>{const t=n.current[`#${r}`],s=e.current;if(t&&s){const u=t.offsetTop,d=s.clientHeight;s.scrollTo({top:u-d/2,behavior:"smooth"})}},[r]),o.length?m("div",{ref:e,className:p("hidden lg:block p-icon overflow-auto sticky top-header mask-b-from-popover mask-b-from-85% mask-b-to-100% mask-b-to-transparent",c),children:[l("p",{className:"text-muted-foreground text-sm mb-1 uppercase font-mono select-none",children:"On This Page"}),l("div",{className:"flex flex-col gap-1",children:o.map(t=>l("a",{href:t.url,ref:s=>{n.current[t.url]=s},className:"text-muted-foreground hover:text-foreground data-[active=true]:text-foreground text-sm no-underline transition-colors data-[depth=3]:pl-4 data-[depth=4]:pl-6","data-active":t.url===`#${r}`,"data-depth":t.depth,children:t.title},t.url))})]}):null}export{E as TableOfContents};
|
|
2
|
+
//# sourceMappingURL=table-of-contents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-of-contents.js","sources":["../../lib/components/table-of-contents.tsx"],"sourcesContent":["\"use client\";\nimport { classNames } from \"lib/utils/primitives\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\n\nfunction useActiveItem(itemIds: string[]) {\n const [activeId, setActiveId] = useState<string | null>(null);\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id);\n }\n }\n },\n { rootMargin: \"0% 0% -80% 0%\" }\n );\n\n for (const id of itemIds ?? []) {\n const element = document.getElementById(id);\n if (element) {\n observer.observe(element);\n }\n }\n\n return () => {\n for (const id of itemIds ?? []) {\n const element = document.getElementById(id);\n if (element) {\n observer.unobserve(element);\n }\n }\n };\n }, [itemIds]);\n\n return activeId;\n}\n\nexport type Heading = {\n title?: React.ReactNode;\n url: string;\n depth: number;\n};\n\nexport function TableOfContents({\n toc,\n className,\n}: {\n toc: Heading[];\n className?: string;\n}) {\n const itemIds = useMemo(() => toc.map((item) => item.url.replace(\"#\", \"\")), [toc]);\n const activeHeading = useActiveItem(itemIds);\n\n const linkRefs = useRef<Record<string, HTMLAnchorElement | null>>({});\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Scroll to active item\n useEffect(() => {\n const activeEl = linkRefs.current[`#${activeHeading}`];\n const containerEl = containerRef.current;\n\n if (activeEl && containerEl) {\n const linkTop = activeEl.offsetTop;\n const containerHeight = containerEl.clientHeight;\n containerEl.scrollTo({\n top: linkTop - containerHeight / 2,\n behavior: \"smooth\",\n });\n }\n }, [activeHeading]);\n\n if (!toc.length) {\n return null;\n }\n\n return (\n <div ref={containerRef} className={classNames(\"hidden lg:block p-icon overflow-auto sticky top-header mask-b-from-popover mask-b-from-85% mask-b-to-100% mask-b-to-transparent\", className)}>\n <p className=\"text-muted-foreground text-sm mb-1 uppercase font-mono select-none\">\n On This Page\n </p>\n <div className=\"flex flex-col gap-1\">\n {toc.map((item) => (\n // It is okay to use plain <a hrefs> here because the links all point to IDs on the same page and does not impact any routers.\n <a\n key={item.url}\n href={item.url}\n ref={(el) => { (linkRefs.current[item.url] = el) }}\n className=\"text-muted-foreground hover:text-foreground data-[active=true]:text-foreground text-sm no-underline transition-colors data-[depth=3]:pl-4 data-[depth=4]:pl-6\"\n data-active={item.url === `#${activeHeading}`}\n data-depth={item.depth}\n >\n {item.title}\n </a>\n ))}\n </div>\n </div>\n );\n}\n"],"names":["useActiveItem","itemIds","activeId","setActiveId","useState","useEffect","observer","entries","entry","id","element","TableOfContents","toc","className","useMemo","item","activeHeading","linkRefs","useRef","containerRef","activeEl","containerEl","linkTop","containerHeight","jsxs","classNames","jsx","el"],"mappings":"yMAIA,SAASA,EAAcC,EAAmB,CACtC,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAwB,IAAI,EAE5D,OAAAC,EAAU,IAAM,CACZ,MAAMC,EAAW,IAAI,qBAChBC,GAAY,CACT,UAAWC,KAASD,EACZC,EAAM,gBACNL,EAAYK,EAAM,OAAO,EAAE,CAGvC,EACA,CAAE,WAAY,eAAA,CAAgB,EAGlC,UAAWC,KAAMR,GAAW,GAAI,CAC5B,MAAMS,EAAU,SAAS,eAAeD,CAAE,EACtCC,GACAJ,EAAS,QAAQI,CAAO,CAEhC,CAEA,MAAO,IAAM,CACT,UAAWD,KAAMR,GAAW,GAAI,CAC5B,MAAMS,EAAU,SAAS,eAAeD,CAAE,EACtCC,GACAJ,EAAS,UAAUI,CAAO,CAElC,CACJ,CACJ,EAAG,CAACT,CAAO,CAAC,EAELC,CACX,CAQO,SAASS,EAAgB,CAC5B,IAAAC,EACA,UAAAC,CACJ,EAGG,CACC,MAAMZ,EAAUa,EAAQ,IAAMF,EAAI,IAAKG,GAASA,EAAK,IAAI,QAAQ,IAAK,EAAE,CAAC,EAAG,CAACH,CAAG,CAAC,EAC3EI,EAAgBhB,EAAcC,CAAO,EAErCgB,EAAWC,EAAiD,EAAE,EAC9DC,EAAeD,EAA8B,IAAI,EAiBvD,OAdAb,EAAU,IAAM,CACZ,MAAMe,EAAWH,EAAS,QAAQ,IAAID,CAAa,EAAE,EAC/CK,EAAcF,EAAa,QAEjC,GAAIC,GAAYC,EAAa,CACzB,MAAMC,EAAUF,EAAS,UACnBG,EAAkBF,EAAY,aACpCA,EAAY,SAAS,CACjB,IAAKC,EAAUC,EAAkB,EACjC,SAAU,QAAA,CACb,CACL,CACJ,EAAG,CAACP,CAAa,CAAC,EAEbJ,EAAI,OAKLY,EAAC,OAAI,IAAKL,EAAc,UAAWM,EAAW,kIAAmIZ,CAAS,EACtL,SAAA,CAAAa,EAAC,IAAA,CAAE,UAAU,qEAAqE,SAAA,eAElF,IACC,MAAA,CAAI,UAAU,sBACV,SAAAd,EAAI,IAAKG,GAENW,EAAC,IAAA,CAEG,KAAMX,EAAK,IACX,IAAMY,GAAO,CAAGV,EAAS,QAAQF,EAAK,GAAG,EAAIY,CAAI,EACjD,UAAU,gKACV,cAAaZ,EAAK,MAAQ,IAAIC,CAAa,GAC3C,aAAYD,EAAK,MAEhB,SAAAA,EAAK,KAAA,EAPDA,EAAK,GAAA,CASjB,CAAA,CACL,CAAA,EACJ,EAvBO,IAyBf"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type * as React from "react";
|
|
2
1
|
export declare function Table({ className, ...props }: React.ComponentProps<"table">): import("react/jsx-runtime").JSX.Element;
|
|
3
2
|
export declare function TableHeader({ className, ...props }: React.ComponentProps<"thead">): import("react/jsx-runtime").JSX.Element;
|
|
4
3
|
export declare function TableBody({ className, ...props }: React.ComponentProps<"tbody">): 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/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":"yGAEO,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TabListProps as AriaTabListProps, TabPanelProps as AriaTabPanelProps, TabProps as AriaTabProps, TabsProps as AriaTabsProps } from
|
|
1
|
+
import { TabListProps as AriaTabListProps, TabPanelProps as AriaTabPanelProps, TabProps as AriaTabProps, TabsProps as AriaTabsProps } from 'react-aria-components';
|
|
2
2
|
export declare function Tabs({ className, ...props }: AriaTabsProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export declare function TabList<T extends object>({ className, ...props }: AriaTabListProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
export declare function Tab({ className, ...props }: AriaTabProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{jsx as n}from"react/jsx-runtime";import{Tabs as i,composeRenderProps as r,TabList as l,Tab as s,TabPanel as c}from"react-aria-components";import{classNames as o}from"../utils/primitives.js";import"clsx";function d({className:t,...a}){return n(i,{className:r(t,e=>o("group flex flex-col gap-2","data-[orientation=vertical]:flex-row",e)),...a})}function p({className:t,...a}){return n(l,{className:r(t,e=>o("inline-flex items-center text-muted-foreground overflow-auto","data-[orientation=horizontal]:border-b data-[orientation=vertical]:h-auto data-[orientation=vertical]:border-e data-[orientation=vertical]:flex-col",e)),...a})}function x({className:t,...a}){return n(s,{className:r(t,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)),...a})}function T({className:t,...a}){return n(c,{className:r(t,e=>o("ring-offset-background","focus-ring",e)),...a})}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/tabs.tsx"],"sourcesContent":["\"use client\"\nimport {\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\n// TODO @mudasirpandith scroll to active tab, scrolling\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 text-muted-foreground overflow-auto\",\n /* Orientation */\n \"data-[orientation=horizontal]:border-b data-[orientation=vertical]:h-auto data-[orientation=vertical]:border-e 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":"+NAeO,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,CAGO,SAASK,EAA0B,CACxC,UAAAN,EACA,GAAGC,CACL,EAAwB,CACtB,OACEC,EAACK,EAAA,CACC,UAAWH,EAAmBJ,EAAYA,GACxCK,EACE,+DAEA,sJACAL,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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TextFieldProps as AriaTextFieldProps } from
|
|
2
|
-
import {
|
|
1
|
+
import { TextFieldProps as AriaTextFieldProps } from 'react-aria-components';
|
|
2
|
+
import { FormFieldProps } from './field';
|
|
3
3
|
export interface TextFieldProps extends AriaTextFieldProps, FormFieldProps {
|
|
4
4
|
textArea?: boolean;
|
|
5
5
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import{TextField as u,composeRenderProps as i,TextArea as f,Input as p}from"react-aria-components";import{useFieldContext as c}from"../utils/form-context.js";import{getFieldErrorMessage as d,classNames as n}from"../utils/primitives.js";import{FormField as g}from"./field.js";import"@tanstack/react-form";import"clsx";import"class-variance-authority";import"lucide-react";const x=u;function b({className:r,...t}){return o(p,{className:i(r,e=>n("flex input-dim w-full border border-input bg-card ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground","disabled-muted","focus-ring",e)),...t})}function h({className:r,...t}){return o(f,{className:i(r,e=>n("flex min-h-32 w-full border border-input bg-card px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground","focus-ring","disabled-muted",e)),...t})}function F({label:r,description:t,errorMessage:e,textArea:l,className:a,...s}){return o(x,{className:i(a,m=>n("group form-field",m)),...s,children:o(g,{label:r,errorMessage:e,description:t,children:l?o(h,{}):o(b,{})})})}function B({isDisabled:r,...t}){const e=c();return o(F,{isDisabled:r||e.form.state.isSubmitting,value:e.state.value,id:e.name,name:e.name,onBlur:e.handleBlur,onChange:e.handleChange,isInvalid:!!d(e),errorMessage:d(e),...t})}export{F as TextField,B as TfTextField};
|
|
2
|
+
//# sourceMappingURL=textfield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textfield.js","sources":["../../lib/components/textfield.tsx"],"sourcesContent":["import {\n Input as AriaInput,\n InputProps as AriaInputProps,\n TextArea as AriaTextArea,\n TextAreaProps as AriaTextAreaProps,\n TextField as AriaTextField,\n TextFieldProps as AriaTextFieldProps,\n composeRenderProps\n} from \"react-aria-components\"\n\n\nimport { useFieldContext } from \"lib/utils/form-context\"\nimport { classNames, getFieldErrorMessage } from \"lib/utils/primitives\"\nimport { FormField, type FormFieldProps } from \"./field\"\n\nconst ATextField = AriaTextField\n\nfunction Input({ className, ...props }: AriaInputProps) {\n return (\n <AriaInput\n className={composeRenderProps(className, (className) =>\n classNames(\n \"flex input-dim w-full border border-input bg-card ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground\",\n /* Disabled */\n \"disabled-muted\",\n /* Focused */\n \"focus-ring\",\n className\n )\n )}\n {...props}\n />\n )\n}\n\nfunction TextArea({ className, ...props }: AriaTextAreaProps) {\n return (\n <AriaTextArea\n className={composeRenderProps(className, (className) =>\n classNames(\n \"flex min-h-32 w-full border border-input bg-card px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground\",\n /* Focused */\n \"focus-ring\",\n /* Disabled */\n \"disabled-muted\",\n className\n )\n )}\n {...props}\n />\n )\n}\n\nexport interface TextFieldProps extends AriaTextFieldProps, FormFieldProps {\n textArea?: boolean\n}\n\nexport function TextField({\n label,\n description,\n errorMessage,\n textArea,\n className,\n ...props\n}: TextFieldProps) {\n return (\n <ATextField\n className={composeRenderProps(className, (className) =>\n classNames(\"group form-field\", className)\n )}\n {...props}\n >\n <FormField label={label} errorMessage={errorMessage} description={description}>\n {textArea ? <TextArea /> : <Input />}\n </FormField>\n </ATextField>\n )\n}\n\nexport function TfTextField({ isDisabled, ...props }: React.ComponentProps<typeof TextField>) {\n const field = useFieldContext<string>();\n\n return (\n <TextField\n isDisabled={isDisabled || field.form.state.isSubmitting}\n value={field.state.value}\n id={field.name}\n name={field.name}\n onBlur={field.handleBlur}\n onChange={field.handleChange}\n isInvalid={!!getFieldErrorMessage(field)}\n errorMessage={getFieldErrorMessage(field)}\n {...props} />)\n}\n\n\n"],"names":["ATextField","AriaTextField","Input","className","props","jsx","AriaInput","composeRenderProps","classNames","TextArea","AriaTextArea","TextField","label","description","errorMessage","textArea","FormField","TfTextField","isDisabled","field","useFieldContext","getFieldErrorMessage"],"mappings":"2ZAeA,MAAMA,EAAaC,EAEnB,SAASC,EAAM,CAAE,UAAAC,EAAW,GAAGC,GAAyB,CACtD,OACEC,EAACC,EAAA,CACC,UAAWC,EAAmBJ,EAAYA,GACxCK,EACE,6KAEA,iBAEA,aACAL,CAAA,CACF,EAED,GAAGC,CAAA,CAAA,CAGV,CAEA,SAASK,EAAS,CAAE,UAAAN,EAAW,GAAGC,GAA4B,CAC5D,OACEC,EAACK,EAAA,CACC,UAAWH,EAAmBJ,EAAYA,GACxCK,EACE,8HAEA,aAEA,iBACAL,CAAA,CACF,EAED,GAAGC,CAAA,CAAA,CAGV,CAMO,SAASO,EAAU,CACxB,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,SAAAC,EACA,UAAAZ,EACA,GAAGC,CACL,EAAmB,CACjB,OACEC,EAACL,EAAA,CACC,UAAWO,EAAmBJ,EAAYA,GACxCK,EAAW,mBAAoBL,CAAS,CAAA,EAEzC,GAAGC,EAEJ,SAAAC,EAACW,EAAA,CAAU,MAAAJ,EAAc,aAAAE,EAA4B,YAAAD,EAClD,SAAAE,EAAWV,EAACI,EAAA,CAAA,CAAS,EAAKJ,EAACH,EAAA,CAAA,CAAM,CAAA,CACpC,CAAA,CAAA,CAGN,CAEO,SAASe,EAAY,CAAE,WAAAC,EAAY,GAAGd,GAAiD,CAC5F,MAAMe,EAAQC,EAAA,EAEd,OACEf,EAACM,EAAA,CACC,WAAYO,GAAcC,EAAM,KAAK,MAAM,aAC3C,MAAOA,EAAM,MAAM,MACnB,GAAIA,EAAM,KACV,KAAMA,EAAM,KACZ,OAAQA,EAAM,WACd,SAAUA,EAAM,aAChB,UAAW,CAAC,CAACE,EAAqBF,CAAK,EACvC,aAAcE,EAAqBF,CAAK,EACvC,GAAGf,CAAA,CAAA,CACV"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
3
3
|
export declare function Timeline({ className, ...props }: React.ComponentProps<'ol'>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
export declare function TimelineItem({ className, ...props }: React.ComponentProps<'li'> & {}): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
export declare const timelineIconVariants: (props?: ({
|
|
6
6
|
variant?: "destructive" | "success" | "muted" | null | undefined;
|
|
7
|
-
} & import(
|
|
7
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
8
8
|
export declare function TimelineIcon({ icon: Icon, className, variant, ...props }: Omit<React.ComponentProps<'div'>, 'children'> & VariantProps<typeof timelineIconVariants> & {
|
|
9
9
|
icon: LucideIcon;
|
|
10
10
|
}): 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/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":"kKAIO,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TooltipTrigger as AriaTooltipTrigger,
|
|
1
|
+
import { TooltipTrigger as AriaTooltipTrigger, TooltipProps as AriaTooltipProps } from 'react-aria-components';
|
|
2
2
|
declare const TooltipTrigger: typeof AriaTooltipTrigger;
|
|
3
3
|
declare const Tooltip: ({ className, offset, ...props }: AriaTooltipProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
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/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":"qMASA,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* useFieldContext is used in custom components
|
|
3
3
|
*/
|
|
4
|
-
export declare const fieldContext: import(
|
|
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>;
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
* useFieldContext is used in custom components
|
|
4
|
-
*/
|
|
5
|
-
export const { fieldContext, formContext, useFieldContext } = createFormHookContexts();
|
|
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"}
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { TfCheckbox } from
|
|
3
|
-
import { TfMultiSelect } from
|
|
4
|
-
import { TfNumberField } from
|
|
5
|
-
import { TfSingleSelect } from
|
|
6
|
-
import { TfTextField } from
|
|
7
|
-
import { Button } from "lib/components/ui/button";
|
|
8
|
-
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;
|
|
1
|
+
import { Button } from 'lib/components/button';
|
|
2
|
+
import { TfCheckbox } from 'lib/components/checkbox';
|
|
3
|
+
import { TfMultiSelect } from 'lib/components/multi-select';
|
|
4
|
+
import { TfNumberField } from 'lib/components/numberfield';
|
|
5
|
+
import { TfSingleSelect } from 'lib/components/select';
|
|
6
|
+
import { TfTextField } from 'lib/components/textfield';
|
|
9
7
|
/** Don't put this in the same file as form-context.tsx, this causes circular dependencies. */
|
|
10
8
|
/** TODO, lazy loading when fieldComponents are large */
|
|
11
9
|
/**
|
|
12
10
|
* Builder for form logic and user interfaces
|
|
13
11
|
*/
|
|
14
|
-
export declare const useAppForm: <TFormData, TOnMount extends import(
|
|
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<{
|
|
15
13
|
readonly Button: typeof Button;
|
|
16
14
|
}> & {
|
|
17
|
-
AppField: import(
|
|
15
|
+
AppField: import('@tanstack/react-form').FieldComponent<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer, TSubmitMeta, NoInfer<{
|
|
18
16
|
readonly TfTextField: typeof TfTextField;
|
|
19
17
|
readonly TfNumberField: typeof TfNumberField;
|
|
20
18
|
readonly TfMultiSelect: typeof TfMultiSelect;
|
|
21
19
|
readonly TfSingleSelect: typeof TfSingleSelect;
|
|
22
20
|
readonly TfCheckbox: typeof TfCheckbox;
|
|
23
21
|
}>>;
|
|
24
|
-
AppForm: import(
|
|
22
|
+
AppForm: import('react').ComponentType<import('react').PropsWithChildren>;
|
|
25
23
|
};
|
package/dist/utils/form-hook.js
CHANGED
|
@@ -1,30 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import { TfMultiSelect } from "lib/components/inputs/multi-select";
|
|
4
|
-
import { TfNumberField } from "lib/components/inputs/numberfield";
|
|
5
|
-
import { TfSingleSelect } from "lib/components/inputs/select";
|
|
6
|
-
import { TfTextField } from "lib/components/inputs/textfield";
|
|
7
|
-
import { Button } from "lib/components/ui/button";
|
|
8
|
-
import { fieldContext, formContext } from "lib/utils/form-context";
|
|
9
|
-
export function getFieldErrorMessage(field) {
|
|
10
|
-
return field?.state.meta.errors.map((e) => e?.message).join(",");
|
|
11
|
-
}
|
|
12
|
-
/** Don't put this in the same file as form-context.tsx, this causes circular dependencies. */
|
|
13
|
-
/** TODO, lazy loading when fieldComponents are large */
|
|
14
|
-
/**
|
|
15
|
-
* Builder for form logic and user interfaces
|
|
16
|
-
*/
|
|
17
|
-
export const { useAppForm } = createFormHook({
|
|
18
|
-
fieldComponents: {
|
|
19
|
-
TfTextField,
|
|
20
|
-
TfNumberField,
|
|
21
|
-
TfMultiSelect,
|
|
22
|
-
TfSingleSelect,
|
|
23
|
-
TfCheckbox,
|
|
24
|
-
},
|
|
25
|
-
formComponents: {
|
|
26
|
-
Button,
|
|
27
|
-
},
|
|
28
|
-
fieldContext,
|
|
29
|
-
formContext,
|
|
30
|
-
});
|
|
1
|
+
import{createFormHook as o}from"@tanstack/react-form";import{Button as m}from"../components/button.js";import{TfCheckbox as r}from"../components/checkbox.js";import{TfMultiSelect as t}from"../components/multi-select.js";import{TfNumberField as i}from"../components/numberfield.js";import{TfSingleSelect as p}from"../components/select.js";import{TfTextField as e}from"../components/textfield.js";import{formContext as f,fieldContext as n}from"./form-context.js";import"react/jsx-runtime";import"class-variance-authority";import"./primitives.js";import"clsx";import"react-aria-components";import"../components/loader.js";import"lucide-react";import"../components/field.js";import"../components/menu.js";import"../components/list-box.js";import"../components/popover.js";const{useAppForm:N}=o({fieldComponents:{TfTextField:e,TfNumberField:i,TfMultiSelect:t,TfSingleSelect:p,TfCheckbox:r},formComponents:{Button:m},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 { Button } from \"lib/components/button\";\nimport { TfCheckbox } from \"lib/components/checkbox\";\nimport { TfMultiSelect } from \"lib/components/multi-select\";\nimport { TfNumberField } from \"lib/components/numberfield\";\nimport { TfSingleSelect } from \"lib/components/select\";\nimport { TfTextField } from \"lib/components/textfield\";\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":"gwBAcO,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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FieldApi } from '@tanstack/react-form';
|
|
2
|
+
import { ClassValue } from 'clsx';
|
|
2
3
|
/** Classnames */
|
|
3
|
-
export declare function
|
|
4
|
+
export declare function classNames(...inputs: ClassValue[]): string;
|
|
4
5
|
/**
|
|
5
6
|
*
|
|
6
7
|
* @returns
|
|
@@ -28,3 +29,16 @@ export type JwtDecode = {
|
|
|
28
29
|
sadmin?: string;
|
|
29
30
|
};
|
|
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;
|
package/dist/utils/primitives.js
CHANGED
|
@@ -1,39 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export function cn(...inputs) {
|
|
4
|
-
return clsx(inputs);
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* This is the variable name representing the primary hue.
|
|
8
|
-
* Referenced in tokens.scss -> token.css
|
|
9
|
-
*/
|
|
10
|
-
const PRIMARY_HUE_PROPERTY = "--primary-hue";
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
* @returns
|
|
14
|
-
*/
|
|
15
|
-
export function getThemeHue() {
|
|
16
|
-
return document.documentElement.style.getPropertyValue(PRIMARY_HUE_PROPERTY);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* @param hue the hue value to set in the document style
|
|
20
|
-
*/
|
|
21
|
-
export function setThemeHue(hue) {
|
|
22
|
-
document.documentElement.style.setProperty(PRIMARY_HUE_PROPERTY,
|
|
23
|
-
// In this case, it must be a number.
|
|
24
|
-
hue);
|
|
25
|
-
}
|
|
26
|
-
const ACCESS_TOKEN = "AT";
|
|
27
|
-
const REFRESH_TOKEN = "RT";
|
|
28
|
-
export function logout() {
|
|
29
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
30
|
-
try {
|
|
31
|
-
localStorage.removeItem(REFRESH_TOKEN);
|
|
32
|
-
localStorage.removeItem(ACCESS_TOKEN);
|
|
33
|
-
window.location.replace("/auth/login");
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error("Logout failed:", error);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
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"}
|
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* @param input camelCase
|
|
5
|
-
* @returns title case for the camelCase string
|
|
6
|
-
*/
|
|
7
|
-
export declare function convertToTitleCase(input: string): string;
|
|
8
|
-
export declare function pluralizeTimes(resourceName: string, count: number): string;
|
|
9
|
-
/**
|
|
10
|
-
* Converts a string from 'camelCase' to 'Title Case'
|
|
11
|
-
* @param input String to convert to `Title Case`
|
|
12
|
-
*/
|
|
13
|
-
export declare function convertCamelCaseToTitleCase(input: string): string;
|
|
1
|
+
import { CtxPortals } from 'lib/utils/primitives';
|
|
14
2
|
/** Resource Name should ALWAYS be in singular form */
|
|
15
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"];
|
|
16
4
|
export type ResourceName = (typeof RESOURCE_NAMES)[number];
|