@cryptlex/web-components 6.6.120 → 6.7.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.
Files changed (51) hide show
  1. package/dist/components/alert.d.ts +1 -1
  2. package/dist/components/alert.js +1 -1
  3. package/dist/components/alert.js.map +1 -1
  4. package/dist/components/badge.d.ts +1 -1
  5. package/dist/components/button.d.ts +1 -1
  6. package/dist/components/card.js +1 -1
  7. package/dist/components/card.js.map +1 -1
  8. package/dist/components/charts.js +1 -1
  9. package/dist/components/charts.js.map +1 -1
  10. package/dist/components/checkbox.js +1 -1
  11. package/dist/components/checkbox.js.map +1 -1
  12. package/dist/components/code-block.js +1 -1
  13. package/dist/components/code-block.js.map +1 -1
  14. package/dist/components/data-table.js +1 -1
  15. package/dist/components/data-table.js.map +1 -1
  16. package/dist/components/date-picker.js +1 -1
  17. package/dist/components/date-picker.js.map +1 -1
  18. package/dist/components/dialog.js +1 -1
  19. package/dist/components/dialog.js.map +1 -1
  20. package/dist/components/duration-field.js +1 -1
  21. package/dist/components/duration-field.js.map +1 -1
  22. package/dist/components/form.js +1 -1
  23. package/dist/components/form.js.map +1 -1
  24. package/dist/components/list-box.js +1 -1
  25. package/dist/components/list-box.js.map +1 -1
  26. package/dist/components/loader.js +1 -1
  27. package/dist/components/loader.js.map +1 -1
  28. package/dist/components/offline-request-file-input.js +1 -1
  29. package/dist/components/offline-request-file-input.js.map +1 -1
  30. package/dist/components/popover.js +1 -1
  31. package/dist/components/popover.js.map +1 -1
  32. package/dist/components/progress-bar.js +1 -1
  33. package/dist/components/progress-bar.js.map +1 -1
  34. package/dist/components/searchfield.js +1 -1
  35. package/dist/components/searchfield.js.map +1 -1
  36. package/dist/components/select.js +1 -1
  37. package/dist/components/select.js.map +1 -1
  38. package/dist/components/sidebar.js +1 -1
  39. package/dist/components/sidebar.js.map +1 -1
  40. package/dist/components/table-of-contents.js +1 -1
  41. package/dist/components/table-of-contents.js.map +1 -1
  42. package/dist/components/tabs.js +1 -1
  43. package/dist/components/tabs.js.map +1 -1
  44. package/dist/components/tooltip.js +1 -1
  45. package/dist/components/tooltip.js.map +1 -1
  46. package/dist/utilities/shiki.js +1 -1
  47. package/dist/utilities/shiki.js.map +1 -1
  48. package/dist/utilities/theme.js.map +1 -1
  49. package/lib/index.css +22 -92
  50. package/lib/tokens.css +30 -205
  51. package/package.json +2 -4
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sources":["../../lib/components/select.tsx"],"sourcesContent":["'use client';\nimport { useId } from 'react';\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 '../components/button';\nimport type { SelectOption } from '../components/select-options';\nimport { getFieldErrorMessage } from '../utilities/form';\nimport { useFieldContext } from '../utilities/form-context';\nimport { classNames } from '../utilities/theme';\nimport { FormField, type FormFieldProps } from './form';\nimport { IcDown } from './icons';\nimport { ListBoxCollection, ListBoxHeader, ListBoxItem } 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>({ className, ...props }: 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);\nexport function SelectTrigger({\n className,\n children,\n withChevron = true,\n ...props\n}: React.ComponentProps<typeof Button> & { withChevron?: boolean }) {\n return (\n <Button\n type=\"button\"\n {...props}\n className={classNames('px-2 bg-elevation-1', withChevron && 'justify-between', className)}\n >\n {composeRenderProps(children, children => (\n <>\n <span className=\"inline-flex gap-1\">{children}</span>\n {withChevron && <IcDown aria-hidden=\"true\" className=\"shrink-0\" />}\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>({ className, ...props }: AriaListBoxProps<T>) {\n return (\n <AriaListBox\n className={composeRenderProps(className, className =>\n classNames('overflow-auto p-1 outline-none', className)\n )}\n {...props}\n />\n );\n}\n\nexport interface SingleSelectProps<T extends SelectOption>\n extends Omit<AriaSelectProps<T>, 'children'>,\n 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 requiredIndicator,\n items,\n ...props\n}: SingleSelectProps<T>) {\n const generatedId = useId();\n const fieldId = props.id || generatedId;\n\n return (\n <div className={classNames('group form-field', className)}>\n <FormField {...{ label, description, errorMessage, requiredIndicator, htmlFor: fieldId }}>\n <ASelect {...props} placeholder={props.placeholder ?? ''}>\n <SelectTrigger className={'w-full'} id={fieldId}>\n <SelectValue className={'inline-flex gap-1 items-center'} />\n </SelectTrigger>\n <SelectPopover>\n <SelectListBox items={items}>{children}</SelectListBox>\n </SelectPopover>\n </ASelect>\n </FormField>\n </div>\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>({ disabled: props.isDisabled });\n\n return (\n <SingleSelect\n requiredIndicator={field.isRequired}\n selectedKey={field.state.value}\n onSelectionChange={e => field.handleChange(e!.toString())}\n onBlur={field.handleBlur}\n errorMessage={getFieldErrorMessage(field)}\n {...props}\n isDisabled={props.isDisabled || field.isSubmitting}\n >\n {item => (\n <SelectItem id={item.id} key={item.id}>\n {item.label}\n </SelectItem>\n )}\n </SingleSelect>\n );\n}\n"],"names":["ASelect","AriaSelect","SelectItem","ListBoxItem","SelectHeader","ListBoxHeader","SelectCollection","ListBoxCollection","SelectValue","className","props","jsx","AriaSelectValue","composeRenderProps","classNames","SelectTrigger","children","withChevron","Button","jsxs","Fragment","IcDown","SelectPopover","Popover","SelectListBox","AriaListBox","SingleSelect","label","description","errorMessage","requiredIndicator","items","generatedId","useId","fieldId","FormField","TfSingleSelect","field","useFieldContext","e","getFieldErrorMessage","item"],"mappings":"kwBAuBA,MAAMA,EAAUC,EACHC,EAAaC,EACbC,EAAeC,EACfC,EAAmBC,EAEnBC,EAAc,CAAmB,CAAE,UAAAC,EAAW,GAAGC,KAC1DC,EAACC,EAAA,CACG,UAAWC,EAAmBJ,EAAWA,GACrCK,EACI,wDAEA,gCACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CACR,EAEG,SAASK,EAAc,CAC1B,UAAAN,EACA,SAAAO,EACA,YAAAC,EAAc,GACd,GAAGP,CACP,EAAoE,CAChE,OACIC,EAACO,EAAA,CACG,KAAK,SACJ,GAAGR,EACJ,UAAWI,EAAW,sBAAuBG,GAAe,kBAAmBR,CAAS,EAEvF,SAAAI,EAAmBG,EAAUA,GAC1BG,EAAAC,EAAA,CACI,SAAA,CAAAT,EAAC,OAAA,CAAK,UAAU,oBAAqB,SAAAK,EAAS,EAC7CC,GAAeN,EAACU,EAAA,CAAO,cAAY,OAAO,UAAU,UAAA,CAAW,CAAA,EACpE,CACH,CAAA,CAAA,CAGb,CAEO,SAASC,EAAc,CAAE,UAAAb,EAAW,GAAGC,GAA2B,CACrE,OACIC,EAACY,EAAA,CACG,UAAWV,EAAmBJ,EAAWA,GACrCK,EAAW,iCAAkCL,CAAS,CAAA,EAEzD,GAAGC,CAAA,CAAA,CAGhB,CAEA,SAASc,EAAgC,CAAE,UAAAf,EAAW,GAAGC,GAA8B,CACnF,OACIC,EAACc,EAAA,CACG,UAAWZ,EAAmBJ,EAAWA,GACrCK,EAAW,iCAAkCL,CAAS,CAAA,EAEzD,GAAGC,CAAA,CAAA,CAGhB,CASO,SAASgB,EAAqC,CACjD,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,SAAAb,EACA,UAAAP,EACA,kBAAAqB,EACA,MAAAC,EACA,GAAGrB,CACP,EAAyB,CACrB,MAAMsB,EAAcC,EAAA,EACdC,EAAUxB,EAAM,IAAMsB,EAE5B,OACIrB,EAAC,MAAA,CAAI,UAAWG,EAAW,mBAAoBL,CAAS,EACpD,SAAAE,EAACwB,EAAA,CAAgB,MAAAR,EAAO,YAAAC,EAAa,aAAAC,EAAc,kBAAAC,EAAmB,QAASI,EAC3E,SAAAf,EAACnB,EAAA,CAAS,GAAGU,EAAO,YAAaA,EAAM,aAAe,GAClD,SAAA,CAAAC,EAACI,EAAA,CAAc,UAAW,SAAU,GAAImB,EACpC,SAAAvB,EAACH,EAAA,CAAY,UAAW,gCAAA,CAAkC,CAAA,CAC9D,IACCc,EAAA,CACG,SAAAX,EAACa,EAAA,CAAc,MAAAO,EAAe,SAAAf,EAAS,CAAA,CAC3C,CAAA,CAAA,CACJ,EACJ,EACJ,CAER,CAIO,SAASoB,GAAuC,CAAE,GAAG1B,GAAiC,CACzF,MAAM2B,EAAQC,EAAwB,CAAE,SAAU5B,EAAM,WAAY,EAEpE,OACIC,EAACe,EAAA,CACG,kBAAmBW,EAAM,WACzB,YAAaA,EAAM,MAAM,MACzB,kBAAmBE,GAAKF,EAAM,aAAaE,EAAG,UAAU,EACxD,OAAQF,EAAM,WACd,aAAcG,EAAqBH,CAAK,EACvC,GAAG3B,EACJ,WAAYA,EAAM,YAAc2B,EAAM,aAErC,SAAAI,KACIvC,EAAA,CAAW,GAAIuC,EAAK,GAChB,SAAAA,EAAK,KAAA,EADoBA,EAAK,EAEnC,CAAA,CAAA,CAIhB"}
1
+ {"version":3,"file":"select.js","sources":["../../lib/components/select.tsx"],"sourcesContent":["'use client';\nimport { useId } from 'react';\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 '../components/button';\nimport type { SelectOption } from '../components/select-options';\nimport { getFieldErrorMessage } from '../utilities/form';\nimport { useFieldContext } from '../utilities/form-context';\nimport { classNames } from '../utilities/theme';\nimport { FormField, type FormFieldProps } from './form';\nimport { IcDown } from './icons';\nimport { ListBoxCollection, ListBoxHeader, ListBoxItem } 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>({ className, ...props }: 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);\nexport function SelectTrigger({\n className,\n children,\n withChevron = true,\n ...props\n}: React.ComponentProps<typeof Button> & { withChevron?: boolean }) {\n return (\n <Button\n type=\"button\"\n {...props}\n className={classNames('px-2 bg-surface-primary', withChevron && 'justify-between', className)}\n >\n {composeRenderProps(children, children => (\n <>\n <span className=\"inline-flex gap-1\">{children}</span>\n {withChevron && <IcDown aria-hidden=\"true\" className=\"shrink-0\" />}\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>({ className, ...props }: AriaListBoxProps<T>) {\n return (\n <AriaListBox\n className={composeRenderProps(className, className =>\n classNames('overflow-auto p-1 outline-none', className)\n )}\n {...props}\n />\n );\n}\n\nexport interface SingleSelectProps<T extends SelectOption>\n extends Omit<AriaSelectProps<T>, 'children'>,\n 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 requiredIndicator,\n items,\n ...props\n}: SingleSelectProps<T>) {\n const generatedId = useId();\n const fieldId = props.id || generatedId;\n\n return (\n <div className={classNames('group form-field', className)}>\n <FormField {...{ label, description, errorMessage, requiredIndicator, htmlFor: fieldId }}>\n <ASelect {...props} placeholder={props.placeholder ?? ''}>\n <SelectTrigger className={'w-full'} id={fieldId}>\n <SelectValue className={'inline-flex gap-1 items-center'} />\n </SelectTrigger>\n <SelectPopover>\n <SelectListBox items={items}>{children}</SelectListBox>\n </SelectPopover>\n </ASelect>\n </FormField>\n </div>\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>({ disabled: props.isDisabled });\n\n return (\n <SingleSelect\n requiredIndicator={field.isRequired}\n selectedKey={field.state.value}\n onSelectionChange={e => field.handleChange(e!.toString())}\n onBlur={field.handleBlur}\n errorMessage={getFieldErrorMessage(field)}\n {...props}\n isDisabled={props.isDisabled || field.isSubmitting}\n >\n {item => (\n <SelectItem id={item.id} key={item.id}>\n {item.label}\n </SelectItem>\n )}\n </SingleSelect>\n );\n}\n"],"names":["ASelect","AriaSelect","SelectItem","ListBoxItem","SelectHeader","ListBoxHeader","SelectCollection","ListBoxCollection","SelectValue","className","props","jsx","AriaSelectValue","composeRenderProps","classNames","SelectTrigger","children","withChevron","Button","jsxs","Fragment","IcDown","SelectPopover","Popover","SelectListBox","AriaListBox","SingleSelect","label","description","errorMessage","requiredIndicator","items","generatedId","useId","fieldId","FormField","TfSingleSelect","field","useFieldContext","e","getFieldErrorMessage","item"],"mappings":"kwBAuBA,MAAMA,EAAUC,EACHC,EAAaC,EACbC,EAAeC,EACfC,EAAmBC,EAEnBC,EAAc,CAAmB,CAAE,UAAAC,EAAW,GAAGC,KAC1DC,EAACC,EAAA,CACG,UAAWC,EAAmBJ,EAAWA,GACrCK,EACI,wDAEA,gCACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CACR,EAEG,SAASK,EAAc,CAC1B,UAAAN,EACA,SAAAO,EACA,YAAAC,EAAc,GACd,GAAGP,CACP,EAAoE,CAChE,OACIC,EAACO,EAAA,CACG,KAAK,SACJ,GAAGR,EACJ,UAAWI,EAAW,0BAA2BG,GAAe,kBAAmBR,CAAS,EAE3F,SAAAI,EAAmBG,EAAUA,GAC1BG,EAAAC,EAAA,CACI,SAAA,CAAAT,EAAC,OAAA,CAAK,UAAU,oBAAqB,SAAAK,EAAS,EAC7CC,GAAeN,EAACU,EAAA,CAAO,cAAY,OAAO,UAAU,UAAA,CAAW,CAAA,EACpE,CACH,CAAA,CAAA,CAGb,CAEO,SAASC,EAAc,CAAE,UAAAb,EAAW,GAAGC,GAA2B,CACrE,OACIC,EAACY,EAAA,CACG,UAAWV,EAAmBJ,EAAWA,GACrCK,EAAW,iCAAkCL,CAAS,CAAA,EAEzD,GAAGC,CAAA,CAAA,CAGhB,CAEA,SAASc,EAAgC,CAAE,UAAAf,EAAW,GAAGC,GAA8B,CACnF,OACIC,EAACc,EAAA,CACG,UAAWZ,EAAmBJ,EAAWA,GACrCK,EAAW,iCAAkCL,CAAS,CAAA,EAEzD,GAAGC,CAAA,CAAA,CAGhB,CASO,SAASgB,EAAqC,CACjD,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,SAAAb,EACA,UAAAP,EACA,kBAAAqB,EACA,MAAAC,EACA,GAAGrB,CACP,EAAyB,CACrB,MAAMsB,EAAcC,EAAA,EACdC,EAAUxB,EAAM,IAAMsB,EAE5B,OACIrB,EAAC,MAAA,CAAI,UAAWG,EAAW,mBAAoBL,CAAS,EACpD,SAAAE,EAACwB,EAAA,CAAgB,MAAAR,EAAO,YAAAC,EAAa,aAAAC,EAAc,kBAAAC,EAAmB,QAASI,EAC3E,SAAAf,EAACnB,EAAA,CAAS,GAAGU,EAAO,YAAaA,EAAM,aAAe,GAClD,SAAA,CAAAC,EAACI,EAAA,CAAc,UAAW,SAAU,GAAImB,EACpC,SAAAvB,EAACH,EAAA,CAAY,UAAW,gCAAA,CAAkC,CAAA,CAC9D,IACCc,EAAA,CACG,SAAAX,EAACa,EAAA,CAAc,MAAAO,EAAe,SAAAf,EAAS,CAAA,CAC3C,CAAA,CAAA,CACJ,EACJ,EACJ,CAER,CAIO,SAASoB,GAAuC,CAAE,GAAG1B,GAAiC,CACzF,MAAM2B,EAAQC,EAAwB,CAAE,SAAU5B,EAAM,WAAY,EAEpE,OACIC,EAACe,EAAA,CACG,kBAAmBW,EAAM,WACzB,YAAaA,EAAM,MAAM,MACzB,kBAAmBE,GAAKF,EAAM,aAAaE,EAAG,UAAU,EACxD,OAAQF,EAAM,WACd,aAAcG,EAAqBH,CAAK,EACvC,GAAG3B,EACJ,WAAYA,EAAM,YAAc2B,EAAM,aAErC,SAAAI,KACIvC,EAAA,CAAW,GAAIuC,EAAK,GAChB,SAAAA,EAAK,KAAA,EADoBA,EAAK,EAEnC,CAAA,CAAA,CAIhB"}
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as t,jsxs as h}from"react/jsx-runtime";import{createContext as _,useState as w,useCallback as S,useEffect as j,useMemo as D,use as B}from"react";import{Button as N}from"./button.js";import{DialogTrigger as I,DialogOverlay as T,DialogContent as z}from"./dialog.js";import{TooltipTrigger as E,Tooltip as G}from"./tooltip.js";import{classNames as i}from"../utilities/theme.js";import{useIsMobile as K}from"../utilities/use-mobile.js";import{IcMenu as L,IcLeft as R,IcRight as A}from"./icons.js";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"clsx";import"@icons-pack/react-simple-icons";const H="/",y=_(null);function v(){const e=B(y);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}function te({defaultOpen:e=!0,open:a,onOpenChange:r,className:n,style:o,children:s,...c}){const d=K(),[u,p]=w(!1),[C,k]=w(e),f=a??C,m=S(l=>{const b=typeof l=="function"?l(f):l;r?r(b):k(b)},[r,f]),g=S(()=>d?p(l=>!l):m(l=>!l),[d,m,p]);j(()=>{const l=b=>{b.key===H&&(b.metaKey||b.ctrlKey)&&(b.preventDefault(),g())};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[g]);const x=f?"expanded":"collapsed",O=D(()=>({state:x,open:f,setOpen:m,isMobile:d,openMobile:u,setOpenMobile:p,toggleSidebar:g}),[x,f,m,d,u,p,g]);return t(y.Provider,{value:O,children:t("div",{className:i("group/sidebar-wrapper flex w-full has-[[data-variant=inset]]:bg-elevation-1",n),...c,children:s})})}function ie({side:e="left",variant:a="sidebar",collapsible:r="icon",className:n,children:o,...s}){const{isMobile:c,state:d,openMobile:u,setOpenMobile:p}=v();return r==="none"?t("div",{className:i("flex h-full w-(--sidebar-width) flex-col bg-elevation-1 text-foreground",n),...s,children:o}):c?t(I,{isOpen:u,onOpenChange:p,...s,children:t(T,{children:t(z,{"data-sidebar":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) max-h-svh overflow-auto p-0 [&>button]:hidden border-r! border-stroke-primary! bg-surface-primary!",side:"left",children:()=>t("div",{className:"flex h-full w-full flex-col",children:o})})})}):h("div",{className:"group peer hidden text-foreground md:block","data-state":d,"data-collapsible":d==="collapsed"?r:"","data-variant":a,"data-side":e,children:[t("div",{className:i("relative w-(--sidebar-width) bg-elevation-1 transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",a==="floating"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),t("div",{className:i("absolute z-10 hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",e==="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)]",a==="floating"?"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),...s,children:t("div",{"data-sidebar":"sidebar",className:"flex h-full w-full flex-col bg-elevation-1 group-data-[variant=floating]:border group-data-[variant=floating]:border-border",children:o})})]})}function F({className:e,onClick:a,...r}){const{toggleSidebar:n,open:o,isMobile:s}=v();return t(N,{"data-sidebar":"trigger",variant:"neutral",size:"icon-sm",className:i(e,"!rounded-full p-icon"),onClick:c=>{a?.(c),n()},"aria-label":"trigger",...r,children:s?t(L,{}):o?t(R,{}):t(A,{})})}function re({className:e,...a}){return t("div",{"data-sidebar":"content",className:i("flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden",e),...a})}function ne({className:e,...a}){return t("div",{"data-sidebar":"group",className:i("group/section relative flex w-full min-w-0 flex-col px-3 group-data-[collapsible=icon]:items-center",e),...a})}function oe({className:e,...a}){return t("div",{"data-sidebar":"group-label",className:i("flex h-input shrink-0 items-center overflow-hidden px-2 text-xs select-none font-medium uppercase text-muted-foreground outline-none ring-ring transition-[height,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0","group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:!h-0 group-data-[collapsible=icon]:min-h-0 group-data-[collapsible=icon]:opacity-0",e),...a})}function le({className:e,...a}){return t("div",{"data-sidebar":"group-content",className:i("w-full body-sm",e),...a})}function se({className:e,...a}){return t("ul",{"data-sidebar":"menu",className:i("flex w-full min-w-0 flex-col gap-px",e),...a})}function de({className:e,...a}){return t("li",{"data-sidebar":"menu-item",className:i("group/menu-item relative list-none group-data-[collapsible=icon]:[&>*:not([data-sidebar=menu-button])]:hidden",e),...a})}function ue({className:e,...a}){return t("button",{"data-sidebar":"menu-action",className:i("absolute top-0 right-0 btn btn-ghost h-input","group-data-[collapsible=icon]:hidden",e),...a})}function ce({className:e,number:a,...r}){return t("div",{"data-sidebar":"menu-badge",className:i("absolute pointer-events-none top-0 right-0 font-light h-input select-none flex items-center justify-center body-sm tabular-nums","group-data-[collapsible=icon]:hidden",e),...r,children:new Intl.NumberFormat(navigator.language,{useGrouping:!0}).format(a)})}function be({className:e,...a}){return t("ul",{"data-sidebar":"menu-sub",className:i("ms-2 flex min-w-0 flex-col","group-data-[collapsible=icon]:hidden",e),...a})}function pe({className:e,...a}){return t("li",{className:i("list-none ms-0",e),...a})}const M="btn-tab relative rounded-md border-0 justify-start w-full group-data-[collapsible=icon]:justify-center";function fe({isActive:e=!1,className:a,children:r,icon:n,leading:o,...s}){const{isMobile:c,state:d}=v(),u=!c&&d==="collapsed";return h(E,{isDisabled:!u,children:[h(N,{size:u?"icon":void 0,"data-sidebar":"menu-button",...e&&{"data-selected":!0},className:i("peer/menu-button group/active group-has-[[data-sidebar=menu-action]]/menu-item:pr-input",M,a),...s,children:[t("span",{"aria-hidden":!0,className:"absolute inset-y-2 -left-1 w-[7px] rounded-full bg-primary opacity-0 group-data-[selected=true]/active:opacity-100"}),o!==void 0?o:n?t(n,{}):null,!u&&r]}),t(G,{placement:"right",children:t("span",{className:"flex items-center gap-2",children:r})})]})}function me({isActive:e,className:a,...r}){return t("button",{"data-sidebar":"menu-sub-button","data-active":e,className:i(M,a),...r})}function ge({className:e,logo:a,children:r,showTrigger:n=!0,...o}){return h("div",{"data-sidebar":"header",className:i("flex items-center h-header select-none shrink-0 border-b px-2 gap-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0",e),...o,children:[a&&t("div",{className:"flex items-center justify-center size-input shrink-0",children:a}),r&&t("div",{className:"flex-1 min-w-0 group-data-[collapsible=icon]:hidden",children:r}),n&&t(F,{className:"hidden bg-elevation-1 lg:flex lg:absolute lg:-right-4 lg:z-50"})]})}function he({className:e,...a}){return t("div",{"data-sidebar":"footer",className:i("mt-auto flex shrink-0 select-none items-center gap-2 border-t py-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0",e),...a})}function ve({className:e,...a}){return t("div",{className:i(e,"flex flex-col flex-1 overflow-auto"),...a})}function xe({className:e,...a}){return t("div",{className:i(e,"flex-1 overflow-auto"),...a})}function we({className:e,...a}){return t("nav",{className:i("flex items-center h-header bg-elevation-1 p-2 border-b",e),...a})}export{ie as Sidebar,re as SidebarContent,y as SidebarContext,he as SidebarFooter,ne as SidebarGroup,le as SidebarGroupContent,oe as SidebarGroupLabel,ge as SidebarHeader,se as SidebarMenu,ue as SidebarMenuAction,ce as SidebarMenuBadge,fe as SidebarMenuButton,de as SidebarMenuItem,be as SidebarMenuSub,me as SidebarMenuSubButton,pe as SidebarMenuSubItem,ve as SidebarOutlet,xe as SidebarOutletContent,we as SidebarOutletHeader,te as SidebarProvider,F as SidebarTrigger,M as sidebarMenuButtonClasses,v as useSidebar};
1
+ "use client";import{jsx as t,jsxs as h}from"react/jsx-runtime";import{createContext as _,useState as w,useCallback as y,useEffect as j,useMemo as D,use as B}from"react";import{Button as S}from"./button.js";import{DialogTrigger as I,DialogOverlay as T,DialogContent as z}from"./dialog.js";import{TooltipTrigger as E,Tooltip as G}from"./tooltip.js";import{classNames as i}from"../utilities/theme.js";import{useIsMobile as K}from"../utilities/use-mobile.js";import{IcMenu as L,IcLeft as R,IcRight as A}from"./icons.js";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"clsx";import"@icons-pack/react-simple-icons";const H="/",N=_(null);function v(){const e=B(N);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}function te({defaultOpen:e=!0,open:a,onOpenChange:r,className:n,style:o,children:s,...c}){const d=K(),[u,p]=w(!1),[C,k]=w(e),f=a??C,m=y(l=>{const b=typeof l=="function"?l(f):l;r?r(b):k(b)},[r,f]),g=y(()=>d?p(l=>!l):m(l=>!l),[d,m,p]);j(()=>{const l=b=>{b.key===H&&(b.metaKey||b.ctrlKey)&&(b.preventDefault(),g())};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[g]);const x=f?"expanded":"collapsed",O=D(()=>({state:x,open:f,setOpen:m,isMobile:d,openMobile:u,setOpenMobile:p,toggleSidebar:g}),[x,f,m,d,u,p,g]);return t(N.Provider,{value:O,children:t("div",{className:i("group/sidebar-wrapper flex w-full has-[[data-variant=inset]]:bg-surface-primary",n),...c,children:s})})}function ie({side:e="left",variant:a="sidebar",collapsible:r="icon",className:n,children:o,...s}){const{isMobile:c,state:d,openMobile:u,setOpenMobile:p}=v();return r==="none"?t("div",{className:i("flex h-full w-(--sidebar-width) flex-col bg-surface-primary text-text-primary",n),...s,children:o}):c?t(I,{isOpen:u,onOpenChange:p,...s,children:t(T,{children:t(z,{"data-sidebar":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) max-h-svh overflow-auto p-0 [&>button]:hidden border-r! border-stroke-primary! bg-surface-primary!",side:"left",children:()=>t("div",{className:"flex h-full w-full flex-col",children:o})})})}):h("div",{className:"group peer hidden text-text-primary md:block","data-state":d,"data-collapsible":d==="collapsed"?r:"","data-variant":a,"data-side":e,children:[t("div",{className:i("relative w-(--sidebar-width) bg-surface-primary transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",a==="floating"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),t("div",{className:i("absolute z-10 hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",e==="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)]",a==="floating"?"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),...s,children:t("div",{"data-sidebar":"sidebar",className:"flex h-full w-full flex-col bg-surface-primary group-data-[variant=floating]:border group-data-[variant=floating]:border-border",children:o})})]})}function F({className:e,onClick:a,...r}){const{toggleSidebar:n,open:o,isMobile:s}=v();return t(S,{"data-sidebar":"trigger",variant:"neutral",size:"icon-sm",className:i(e,"!rounded-full p-icon"),onClick:c=>{a?.(c),n()},"aria-label":"trigger",...r,children:s?t(L,{}):o?t(R,{}):t(A,{})})}function re({className:e,...a}){return t("div",{"data-sidebar":"content",className:i("flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden",e),...a})}function ne({className:e,...a}){return t("div",{"data-sidebar":"group",className:i("group/section relative flex w-full min-w-0 flex-col px-3 group-data-[collapsible=icon]:items-center",e),...a})}function oe({className:e,...a}){return t("div",{"data-sidebar":"group-label",className:i("flex h-input shrink-0 items-center overflow-hidden px-2 text-xs select-none font-medium uppercase text-muted-foreground outline-none ring-ring transition-[height,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0","group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:!h-0 group-data-[collapsible=icon]:min-h-0 group-data-[collapsible=icon]:opacity-0",e),...a})}function le({className:e,...a}){return t("div",{"data-sidebar":"group-content",className:i("w-full body-sm",e),...a})}function se({className:e,...a}){return t("ul",{"data-sidebar":"menu",className:i("flex w-full min-w-0 flex-col gap-px",e),...a})}function de({className:e,...a}){return t("li",{"data-sidebar":"menu-item",className:i("group/menu-item relative list-none group-data-[collapsible=icon]:[&>*:not([data-sidebar=menu-button])]:hidden",e),...a})}function ue({className:e,...a}){return t("button",{"data-sidebar":"menu-action",className:i("absolute top-0 right-0 btn btn-ghost h-input","group-data-[collapsible=icon]:hidden",e),...a})}function ce({className:e,number:a,...r}){return t("div",{"data-sidebar":"menu-badge",className:i("absolute pointer-events-none top-0 right-0 font-light h-input select-none flex items-center justify-center body-sm tabular-nums","group-data-[collapsible=icon]:hidden",e),...r,children:new Intl.NumberFormat(navigator.language,{useGrouping:!0}).format(a)})}function be({className:e,...a}){return t("ul",{"data-sidebar":"menu-sub",className:i("ms-2 flex min-w-0 flex-col","group-data-[collapsible=icon]:hidden",e),...a})}function pe({className:e,...a}){return t("li",{className:i("list-none ms-0",e),...a})}const M="btn-tab relative rounded-md border-0 justify-start w-full group-data-[collapsible=icon]:justify-center";function fe({isActive:e=!1,className:a,children:r,icon:n,leading:o,...s}){const{isMobile:c,state:d}=v(),u=!c&&d==="collapsed";return h(E,{isDisabled:!u,children:[h(S,{size:u?"icon":void 0,"data-sidebar":"menu-button",...e&&{"data-selected":!0},className:i("peer/menu-button group/active group-has-[[data-sidebar=menu-action]]/menu-item:pr-input",M,a),...s,children:[t("span",{"aria-hidden":!0,className:"absolute inset-y-2 -left-1 w-[7px] rounded-full bg-primary opacity-0 group-data-[selected=true]/active:opacity-100"}),o!==void 0?o:n?t(n,{}):null,!u&&r]}),t(G,{placement:"right",children:t("span",{className:"flex items-center gap-2",children:r})})]})}function me({isActive:e,className:a,...r}){return t("button",{"data-sidebar":"menu-sub-button","data-active":e,className:i(M,a),...r})}function ge({className:e,logo:a,children:r,showTrigger:n=!0,...o}){return h("div",{"data-sidebar":"header",className:i("flex items-center h-header select-none shrink-0 border-b px-2 gap-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0",e),...o,children:[a&&t("div",{className:"flex items-center justify-center size-input shrink-0",children:a}),r&&t("div",{className:"flex-1 min-w-0 group-data-[collapsible=icon]:hidden",children:r}),n&&t(F,{className:"hidden bg-surface-primary lg:flex lg:absolute lg:-right-4 lg:z-50"})]})}function he({className:e,...a}){return t("div",{"data-sidebar":"footer",className:i("mt-auto flex shrink-0 select-none items-center gap-2 border-t py-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0",e),...a})}function ve({className:e,...a}){return t("div",{className:i(e,"flex flex-col flex-1 overflow-auto"),...a})}function xe({className:e,...a}){return t("div",{className:i(e,"flex-1 overflow-auto"),...a})}function we({className:e,...a}){return t("nav",{className:i("flex items-center h-header bg-surface-primary p-2 border-b",e),...a})}export{ie as Sidebar,re as SidebarContent,N as SidebarContext,he as SidebarFooter,ne as SidebarGroup,le as SidebarGroupContent,oe as SidebarGroupLabel,ge as SidebarHeader,se as SidebarMenu,ue as SidebarMenuAction,ce as SidebarMenuBadge,fe as SidebarMenuButton,de as SidebarMenuItem,be as SidebarMenuSub,me as SidebarMenuSubButton,pe as SidebarMenuSubItem,ve as SidebarOutlet,xe as SidebarOutletContent,we as SidebarOutletHeader,te as SidebarProvider,F as SidebarTrigger,M as sidebarMenuButtonClasses,v as useSidebar};
2
2
  //# sourceMappingURL=sidebar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.js","sources":["../../lib/components/sidebar.tsx"],"sourcesContent":["'use client';\nimport { createContext, use, useCallback, useEffect, useMemo, useState } from 'react';\nimport { Button } from '../components/button';\nimport { DialogContent, DialogOverlay, DialogTrigger } from '../components/dialog';\nimport { Tooltip, TooltipTrigger } from '../components/tooltip';\nimport { classNames } from '../utilities/theme';\nimport { useIsMobile } from '../utilities/use-mobile';\nimport { IcLeft, IcMenu, IcRight, type CtxIcon } from './icons';\n\nconst SIDEBAR_KEYBOARD_SHORTCUT = '/';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nexport const SidebarContext = createContext<SidebarContextProps | null>(null);\n\n/**\n * Get the current sidebar state and controls. Must be inside SidebarProvider.\n * @throws When used outside of SidebarProvider\n */\nexport function useSidebar() {\n const context = use(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\n/**\n * Wraps your app layout and manages sidebar state. Handles keyboard shortcuts (Cmd/Ctrl + /)\n * and mobile vs desktop behavior.\n *\n * @example\n * <SidebarProvider>\n * <Sidebar>...</Sidebar>\n * <SidebarOutlet>\n * <main>Your app content</main>\n * </SidebarOutlet>\n * </SidebarProvider>\n */\nexport function SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Initial open state. Defaults to true */\n defaultOpen?: boolean;\n /** Control the open state yourself */\n open?: boolean;\n /** Callback when sidebar opens/closes */\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n className={classNames(\n 'group/sidebar-wrapper flex w-full has-[[data-variant=inset]]:bg-elevation-1',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n}\n\n/**\n * The actual sidebar panel. On mobile it becomes a modal dialog.\n */\nexport function Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'icon',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Where to dock the sidebar. Default: left */\n side?: 'left' | 'right';\n /** Style variant. Default: sidebar */\n variant?: 'sidebar' | 'floating';\n /** How it collapses. Default: offcanvas */\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n className={classNames(\n 'flex h-full w-(--sidebar-width) flex-col bg-elevation-1 text-foreground',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <DialogTrigger isOpen={openMobile} onOpenChange={setOpenMobile} {...props}>\n <DialogOverlay>\n <DialogContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) max-h-svh overflow-auto p-0 [&>button]:hidden border-r! border-stroke-primary! bg-surface-primary!\"\n side=\"left\"\n >\n {() => <div className=\"flex h-full w-full flex-col\">{children}</div>}\n </DialogContent>\n </DialogOverlay>\n </DialogTrigger>\n );\n }\n\n return (\n <div\n className=\"group peer hidden text-foreground md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={classNames(\n 'relative w-(--sidebar-width) bg-elevation-1 transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n className={classNames(\n 'absolute z-10 hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the padding for floating variant.\n variant === 'floating'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"flex h-full w-full flex-col bg-elevation-1 group-data-[variant=floating]:border group-data-[variant=floating]:border-border\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Button that toggles the sidebar. Shows arrow icons.\n */\nexport function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar, open, isMobile } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n variant=\"neutral\"\n size=\"icon-sm\"\n className={classNames(className, '!rounded-full p-icon')}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n aria-label=\"trigger\"\n {...props}\n >\n {/* Use transition to rotate a single icon */}\n {isMobile ? <IcMenu /> : open ? <IcLeft /> : <IcRight />}\n </Button>\n );\n}\n\n/**\n * Scrollable container for sidebar content\n */\nexport function SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-sidebar=\"content\"\n className={classNames('flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden', className)}\n {...props}\n />\n );\n}\n\n/**\n * Groups related menu items together\n */\nexport function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-sidebar=\"group\"\n className={classNames(\n 'group/section relative flex w-full min-w-0 flex-col px-3 group-data-[collapsible=icon]:items-center',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Label for a group.\n */\nexport function SidebarGroupLabel({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-sidebar=\"group-label\"\n className={classNames(\n 'flex h-input shrink-0 items-center overflow-hidden px-2 text-xs select-none font-medium uppercase text-muted-foreground outline-none ring-ring transition-[height,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:!h-0 group-data-[collapsible=icon]:min-h-0 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Content wrapper for a group\n */\nexport function SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-sidebar=\"group-content\" className={classNames('w-full body-sm', className)} {...props} />;\n}\n\n/**\n * Container for menu items\n */\nexport function SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul data-sidebar=\"menu\" className={classNames('flex w-full min-w-0 flex-col gap-px', className)} {...props} />\n );\n}\n\n/**\n * Single menu item wrapper\n */\nexport function SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-sidebar=\"menu-item\"\n className={classNames(\n 'group/menu-item relative list-none group-data-[collapsible=icon]:[&>*:not([data-sidebar=menu-button])]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Extra action button that appears on the right side of menu items\n */\nexport function SidebarMenuAction({\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n /** Only show on hover */\n showOnHover?: boolean;\n}) {\n return (\n <button\n data-sidebar=\"menu-action\"\n className={classNames(\n 'absolute top-0 right-0 btn btn-ghost h-input',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Shows a number badge on menu items. Auto-formats large numbers.\n */\nexport function SidebarMenuBadge({\n className,\n number,\n ...props\n}: Omit<React.ComponentProps<'div'>, 'children'> & {\n /** The count to display */\n number: number | bigint;\n}) {\n return (\n <div\n data-sidebar=\"menu-badge\"\n className={classNames(\n 'absolute pointer-events-none top-0 right-0 font-light h-input select-none flex items-center justify-center body-sm tabular-nums',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n >\n {/* Format the number */}\n {new Intl.NumberFormat(navigator.language, { useGrouping: true }).format(number)}\n </div>\n );\n}\n\n/**\n * Nested submenu container\n */\nexport function SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-sidebar=\"menu-sub\"\n className={classNames('ms-2 flex min-w-0 flex-col', 'group-data-[collapsible=icon]:hidden', className)}\n {...props}\n />\n );\n}\n\n/**\n * Submenu item wrapper\n */\nexport function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li className={classNames('list-none ms-0', className)} {...props} />;\n}\n\nexport const sidebarMenuButtonClasses =\n 'btn-tab relative rounded-md border-0 justify-start w-full group-data-[collapsible=icon]:justify-center';\n\n// Common interaction logic for SidebarMenuButton and SidebarMenuSubButton\n/**\n * Main menu button. Pass isActive for current page.\n */\nexport function SidebarMenuButton({\n isActive = false,\n className,\n children,\n icon: Icon,\n leading,\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'children'> & {\n /** Mark as currently active page */\n icon?: CtxIcon;\n leading?: React.ReactNode;\n isActive?: boolean;\n children?: React.ReactNode;\n}) {\n const { isMobile, state } = useSidebar();\n const isCollapsed = !isMobile && state === 'collapsed';\n\n return (\n <TooltipTrigger isDisabled={!isCollapsed}>\n <Button\n size={isCollapsed ? 'icon' : undefined}\n data-sidebar=\"menu-button\"\n {...(isActive && { 'data-selected': true })}\n className={classNames(\n 'peer/menu-button group/active group-has-[[data-sidebar=menu-action]]/menu-item:pr-input',\n sidebarMenuButtonClasses,\n className\n )}\n {...props}\n >\n <span\n aria-hidden\n className=\"absolute inset-y-2 -left-1 w-[7px] rounded-full bg-primary opacity-0 group-data-[selected=true]/active:opacity-100\"\n />\n {leading !== undefined ? leading : Icon ? <Icon /> : null}\n {!isCollapsed && children}\n </Button>\n <Tooltip placement=\"right\">\n <span className=\"flex items-center gap-2\">{children}</span>\n </Tooltip>\n </TooltipTrigger>\n );\n}\n\n/**\n * Button for submenu items\n */\nexport function SidebarMenuSubButton({\n isActive,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n isActive?: boolean;\n}) {\n return (\n <button\n data-sidebar=\"menu-sub-button\"\n data-active={isActive}\n className={classNames(sidebarMenuButtonClasses, className)}\n {...props}\n />\n );\n}\n\n/**\n * Sticky header at the top of the sidebar. Displays a square logo slot aligned with the outlet header.\n */\nexport function SidebarHeader({\n className,\n logo,\n children,\n showTrigger = true,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Square logo/icon to display */\n logo?: React.ReactNode;\n showTrigger?: boolean;\n}) {\n return (\n <div\n data-sidebar=\"header\"\n className={classNames(\n 'flex items-center h-header select-none shrink-0 border-b px-2 gap-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0',\n className\n )}\n {...props}\n >\n {logo && <div className=\"flex items-center justify-center size-input shrink-0\">{logo}</div>}\n {children && <div className=\"flex-1 min-w-0 group-data-[collapsible=icon]:hidden\">{children}</div>}\n {showTrigger && (\n <SidebarTrigger className={'hidden bg-elevation-1 lg:flex lg:absolute lg:-right-4 lg:z-50'} />\n )}\n </div>\n );\n}\n\nexport function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-sidebar=\"footer\"\n className={classNames(\n 'mt-auto flex shrink-0 select-none items-center gap-2 border-t py-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n *\n * @example Basic usage\n * ```tsx\n * <SidebarOutlet>\n * <SidebarOutletHeader><SidebarTrigger/></SidebarOutletHeader>\n * <SidebarOutletContent><Outlet/></SidebarOutletContent>\n * </SidebarOutlet>\n * ```\n */\nexport function SidebarOutlet({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames(className, 'flex flex-col flex-1 overflow-auto')} {...props} />;\n}\n\nexport function SidebarOutletContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames(className, 'flex-1 overflow-auto')} {...props} />;\n}\n\nexport function SidebarOutletHeader({ className, ...props }: React.ComponentProps<'nav'>) {\n return (\n <nav className={classNames('flex items-center h-header bg-elevation-1 p-2 border-b', className)} {...props} />\n );\n}\n"],"names":["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","IcMenu","IcLeft","IcRight","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupContent","SidebarMenu","SidebarMenuItem","SidebarMenuAction","SidebarMenuBadge","number","SidebarMenuSub","SidebarMenuSubItem","sidebarMenuButtonClasses","SidebarMenuButton","isActive","Icon","leading","isCollapsed","TooltipTrigger","Tooltip","SidebarMenuSubButton","SidebarHeader","logo","showTrigger","SidebarFooter","SidebarOutlet","SidebarOutletContent","SidebarOutletHeader"],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.js","sources":["../../lib/components/sidebar.tsx"],"sourcesContent":["'use client';\nimport { createContext, use, useCallback, useEffect, useMemo, useState } from 'react';\nimport { Button } from '../components/button';\nimport { DialogContent, DialogOverlay, DialogTrigger } from '../components/dialog';\nimport { Tooltip, TooltipTrigger } from '../components/tooltip';\nimport { classNames } from '../utilities/theme';\nimport { useIsMobile } from '../utilities/use-mobile';\nimport { IcLeft, IcMenu, IcRight, type CtxIcon } from './icons';\n\nconst SIDEBAR_KEYBOARD_SHORTCUT = '/';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nexport const SidebarContext = createContext<SidebarContextProps | null>(null);\n\n/**\n * Get the current sidebar state and controls. Must be inside SidebarProvider.\n * @throws When used outside of SidebarProvider\n */\nexport function useSidebar() {\n const context = use(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\n/**\n * Wraps your app layout and manages sidebar state. Handles keyboard shortcuts (Cmd/Ctrl + /)\n * and mobile vs desktop behavior.\n *\n * @example\n * <SidebarProvider>\n * <Sidebar>...</Sidebar>\n * <SidebarOutlet>\n * <main>Your app content</main>\n * </SidebarOutlet>\n * </SidebarProvider>\n */\nexport function SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Initial open state. Defaults to true */\n defaultOpen?: boolean;\n /** Control the open state yourself */\n open?: boolean;\n /** Callback when sidebar opens/closes */\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n className={classNames(\n 'group/sidebar-wrapper flex w-full has-[[data-variant=inset]]:bg-surface-primary',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n}\n\n/**\n * The actual sidebar panel. On mobile it becomes a modal dialog.\n */\nexport function Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'icon',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Where to dock the sidebar. Default: left */\n side?: 'left' | 'right';\n /** Style variant. Default: sidebar */\n variant?: 'sidebar' | 'floating';\n /** How it collapses. Default: offcanvas */\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n className={classNames(\n 'flex h-full w-(--sidebar-width) flex-col bg-surface-primary text-text-primary',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <DialogTrigger isOpen={openMobile} onOpenChange={setOpenMobile} {...props}>\n <DialogOverlay>\n <DialogContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) max-h-svh overflow-auto p-0 [&>button]:hidden border-r! border-stroke-primary! bg-surface-primary!\"\n side=\"left\"\n >\n {() => <div className=\"flex h-full w-full flex-col\">{children}</div>}\n </DialogContent>\n </DialogOverlay>\n </DialogTrigger>\n );\n }\n\n return (\n <div\n className=\"group peer hidden text-text-primary md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={classNames(\n 'relative w-(--sidebar-width) bg-surface-primary transition-[width] duration-200 ease-linear',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n className={classNames(\n 'absolute z-10 hidden w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the padding for floating variant.\n variant === 'floating'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n className=\"flex h-full w-full flex-col bg-surface-primary group-data-[variant=floating]:border group-data-[variant=floating]:border-border\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Button that toggles the sidebar. Shows arrow icons.\n */\nexport function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar, open, isMobile } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n variant=\"neutral\"\n size=\"icon-sm\"\n className={classNames(className, '!rounded-full p-icon')}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n aria-label=\"trigger\"\n {...props}\n >\n {/* Use transition to rotate a single icon */}\n {isMobile ? <IcMenu /> : open ? <IcLeft /> : <IcRight />}\n </Button>\n );\n}\n\n/**\n * Scrollable container for sidebar content\n */\nexport function SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-sidebar=\"content\"\n className={classNames('flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden', className)}\n {...props}\n />\n );\n}\n\n/**\n * Groups related menu items together\n */\nexport function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-sidebar=\"group\"\n className={classNames(\n 'group/section relative flex w-full min-w-0 flex-col px-3 group-data-[collapsible=icon]:items-center',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Label for a group.\n */\nexport function SidebarGroupLabel({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-sidebar=\"group-label\"\n className={classNames(\n 'flex h-input shrink-0 items-center overflow-hidden px-2 text-xs select-none font-medium uppercase text-muted-foreground outline-none ring-ring transition-[height,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:!h-0 group-data-[collapsible=icon]:min-h-0 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Content wrapper for a group\n */\nexport function SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-sidebar=\"group-content\" className={classNames('w-full body-sm', className)} {...props} />;\n}\n\n/**\n * Container for menu items\n */\nexport function SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul data-sidebar=\"menu\" className={classNames('flex w-full min-w-0 flex-col gap-px', className)} {...props} />\n );\n}\n\n/**\n * Single menu item wrapper\n */\nexport function SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-sidebar=\"menu-item\"\n className={classNames(\n 'group/menu-item relative list-none group-data-[collapsible=icon]:[&>*:not([data-sidebar=menu-button])]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Extra action button that appears on the right side of menu items\n */\nexport function SidebarMenuAction({\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n /** Only show on hover */\n showOnHover?: boolean;\n}) {\n return (\n <button\n data-sidebar=\"menu-action\"\n className={classNames(\n 'absolute top-0 right-0 btn btn-ghost h-input',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n * Shows a number badge on menu items. Auto-formats large numbers.\n */\nexport function SidebarMenuBadge({\n className,\n number,\n ...props\n}: Omit<React.ComponentProps<'div'>, 'children'> & {\n /** The count to display */\n number: number | bigint;\n}) {\n return (\n <div\n data-sidebar=\"menu-badge\"\n className={classNames(\n 'absolute pointer-events-none top-0 right-0 font-light h-input select-none flex items-center justify-center body-sm tabular-nums',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n >\n {/* Format the number */}\n {new Intl.NumberFormat(navigator.language, { useGrouping: true }).format(number)}\n </div>\n );\n}\n\n/**\n * Nested submenu container\n */\nexport function SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-sidebar=\"menu-sub\"\n className={classNames('ms-2 flex min-w-0 flex-col', 'group-data-[collapsible=icon]:hidden', className)}\n {...props}\n />\n );\n}\n\n/**\n * Submenu item wrapper\n */\nexport function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li className={classNames('list-none ms-0', className)} {...props} />;\n}\n\nexport const sidebarMenuButtonClasses =\n 'btn-tab relative rounded-md border-0 justify-start w-full group-data-[collapsible=icon]:justify-center';\n\n// Common interaction logic for SidebarMenuButton and SidebarMenuSubButton\n/**\n * Main menu button. Pass isActive for current page.\n */\nexport function SidebarMenuButton({\n isActive = false,\n className,\n children,\n icon: Icon,\n leading,\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'children'> & {\n /** Mark as currently active page */\n icon?: CtxIcon;\n leading?: React.ReactNode;\n isActive?: boolean;\n children?: React.ReactNode;\n}) {\n const { isMobile, state } = useSidebar();\n const isCollapsed = !isMobile && state === 'collapsed';\n\n return (\n <TooltipTrigger isDisabled={!isCollapsed}>\n <Button\n size={isCollapsed ? 'icon' : undefined}\n data-sidebar=\"menu-button\"\n {...(isActive && { 'data-selected': true })}\n className={classNames(\n 'peer/menu-button group/active group-has-[[data-sidebar=menu-action]]/menu-item:pr-input',\n sidebarMenuButtonClasses,\n className\n )}\n {...props}\n >\n <span\n aria-hidden\n className=\"absolute inset-y-2 -left-1 w-[7px] rounded-full bg-primary opacity-0 group-data-[selected=true]/active:opacity-100\"\n />\n {leading !== undefined ? leading : Icon ? <Icon /> : null}\n {!isCollapsed && children}\n </Button>\n <Tooltip placement=\"right\">\n <span className=\"flex items-center gap-2\">{children}</span>\n </Tooltip>\n </TooltipTrigger>\n );\n}\n\n/**\n * Button for submenu items\n */\nexport function SidebarMenuSubButton({\n isActive,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n isActive?: boolean;\n}) {\n return (\n <button\n data-sidebar=\"menu-sub-button\"\n data-active={isActive}\n className={classNames(sidebarMenuButtonClasses, className)}\n {...props}\n />\n );\n}\n\n/**\n * Sticky header at the top of the sidebar. Displays a square logo slot aligned with the outlet header.\n */\nexport function SidebarHeader({\n className,\n logo,\n children,\n showTrigger = true,\n ...props\n}: React.ComponentProps<'div'> & {\n /** Square logo/icon to display */\n logo?: React.ReactNode;\n showTrigger?: boolean;\n}) {\n return (\n <div\n data-sidebar=\"header\"\n className={classNames(\n 'flex items-center h-header select-none shrink-0 border-b px-2 gap-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0',\n className\n )}\n {...props}\n >\n {logo && <div className=\"flex items-center justify-center size-input shrink-0\">{logo}</div>}\n {children && <div className=\"flex-1 min-w-0 group-data-[collapsible=icon]:hidden\">{children}</div>}\n {showTrigger && (\n <SidebarTrigger className={'hidden bg-surface-primary lg:flex lg:absolute lg:-right-4 lg:z-50'} />\n )}\n </div>\n );\n}\n\nexport function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-sidebar=\"footer\"\n className={classNames(\n 'mt-auto flex shrink-0 select-none items-center gap-2 border-t py-2 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0',\n className\n )}\n {...props}\n />\n );\n}\n\n/**\n *\n * @example Basic usage\n * ```tsx\n * <SidebarOutlet>\n * <SidebarOutletHeader><SidebarTrigger/></SidebarOutletHeader>\n * <SidebarOutletContent><Outlet/></SidebarOutletContent>\n * </SidebarOutlet>\n * ```\n */\nexport function SidebarOutlet({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames(className, 'flex flex-col flex-1 overflow-auto')} {...props} />;\n}\n\nexport function SidebarOutletContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames(className, 'flex-1 overflow-auto')} {...props} />;\n}\n\nexport function SidebarOutletHeader({ className, ...props }: React.ComponentProps<'nav'>) {\n return (\n <nav\n className={classNames('flex items-center h-header bg-surface-primary p-2 border-b', className)}\n {...props}\n />\n );\n}\n"],"names":["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","IcMenu","IcLeft","IcRight","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupContent","SidebarMenu","SidebarMenuItem","SidebarMenuAction","SidebarMenuBadge","number","SidebarMenuSub","SidebarMenuSubItem","sidebarMenuButtonClasses","SidebarMenuButton","isActive","Icon","leading","isCollapsed","TooltipTrigger","Tooltip","SidebarMenuSubButton","SidebarHeader","logo","showTrigger","SidebarFooter","SidebarOutlet","SidebarOutletContent","SidebarOutletHeader"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";import{jsxs as m,jsx as a}from"react/jsx-runtime";import{useMemo as p,useRef as u,useEffect as d,useState as h}from"react";import{classNames as v}from"../utilities/theme.js";import"clsx";function g(r){const[c,i]=h("");return d(()=>{const s=new IntersectionObserver(o=>{const t=o.filter(n=>n.isIntersecting);if(t.length===0)return;const e=t.map(n=>n.target.id)[0];i(e)});for(const o of r??[]){const t=document.getElementById(o);t&&s.observe(t)}return()=>{for(const o of r??[]){const t=document.getElementById(o);t&&s.unobserve(t)}}},[r]),c}function E({toc:r,className:c}){const i=p(()=>r.map(e=>e.url.replace("#","")),[r]),s=g(i),o=u({}),t=u(null);return d(()=>{if(s){const e=o.current[`#${s}`],n=t.current;if(e&&n){const l=e.offsetTop,f=n.clientHeight;n.scrollTo({top:l-f/2,behavior:"smooth"})}}},[s]),r.length?m("nav",{ref:t,className:v(c),children:[a("p",{className:"text-muted opacity-70 mb-1 body-sm select-none",children:"On This Page"}),a("div",{className:"flex flex-col gap-1",children:r.map(e=>{const n=e.url.replace(/^#/,"");return a("a",{href:e.url,ref:l=>{o.current[e.url]=l},className:"text-muted-foreground hover:text-foreground data-[active=true]:text-primary body-sm no-underline transition-colors data-[depth=3]:pl-4 data-[depth=4]:pl-6","data-active":s===n,"data-depth":e.depth,children:e.title},e.url)})})]}):null}export{E as TableOfContents};
1
+ "use client";import{jsxs as m,jsx as l}from"react/jsx-runtime";import{useMemo as p,useRef as u,useEffect as d,useState as h}from"react";import{classNames as v}from"../utilities/theme.js";import"clsx";function g(r){const[c,i]=h("");return d(()=>{const s=new IntersectionObserver(o=>{const t=o.filter(n=>n.isIntersecting);if(t.length===0)return;const e=t.map(n=>n.target.id)[0];i(e)});for(const o of r??[]){const t=document.getElementById(o);t&&s.observe(t)}return()=>{for(const o of r??[]){const t=document.getElementById(o);t&&s.unobserve(t)}}},[r]),c}function E({toc:r,className:c}){const i=p(()=>r.map(e=>e.url.replace("#","")),[r]),s=g(i),o=u({}),t=u(null);return d(()=>{if(s){const e=o.current[`#${s}`],n=t.current;if(e&&n){const a=e.offsetTop,f=n.clientHeight;n.scrollTo({top:a-f/2,behavior:"smooth"})}}},[s]),r.length?m("nav",{ref:t,className:v(c),children:[l("p",{className:"text-muted opacity-70 mb-1 body-sm select-none",children:"On This Page"}),l("div",{className:"flex flex-col gap-1",children:r.map(e=>{const n=e.url.replace(/^#/,"");return l("a",{href:e.url,ref:a=>{o.current[e.url]=a},className:"text-muted-foreground hover:text-text-primary data-[active=true]:text-primary body-sm no-underline transition-colors data-[depth=3]:pl-4 data-[depth=4]:pl-6","data-active":s===n,"data-depth":e.depth,children:e.title},e.url)})})]}):null}export{E as TableOfContents};
2
2
  //# sourceMappingURL=table-of-contents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-of-contents.js","sources":["../../lib/components/table-of-contents.tsx"],"sourcesContent":["'use client';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { classNames } from '../utilities/theme';\n\nfunction useActiveItem(itemIds: string[]) {\n const [activeId, setActiveId] = useState<string>('');\n\n useEffect(() => {\n const observer = new IntersectionObserver(entries => {\n const intersectingEntries = entries.filter(entry => entry.isIntersecting);\n\n // Last-active entry remains highlighted\n if (intersectingEntries.length === 0) {\n return;\n }\n\n const topIntersectingId = intersectingEntries.map(e => e.target.id)[0];\n setActiveId(topIntersectingId);\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 TableOfContentsHeading = {\n title?: React.ReactNode;\n url: string;\n depth: number;\n};\n\nexport function TableOfContents({ toc, className }: { toc: TableOfContentsHeading[]; className?: string }) {\n const itemIds = useMemo(() => toc.map(item => item.url.replace('#', '')), [toc]);\n const activeId = useActiveItem(itemIds);\n const linkRefs = useRef<Record<string, HTMLAnchorElement | null>>({});\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Scroll to first active item\n useEffect(() => {\n if (activeId) {\n const activeEl = linkRefs.current[`#${activeId}`];\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 }\n }, [activeId]);\n\n if (!toc.length) {\n return null;\n }\n\n return (\n <nav ref={containerRef} className={classNames(className)}>\n <p className=\"text-muted opacity-70 mb-1 body-sm select-none\">On This Page</p>\n <div className=\"flex flex-col gap-1\">\n {toc.map(item => {\n const id = item.url.replace(/^#/, '');\n\n return (\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 => {\n linkRefs.current[item.url] = el;\n }}\n className=\"text-muted-foreground hover:text-foreground data-[active=true]:text-primary body-sm no-underline transition-colors data-[depth=3]:pl-4 data-[depth=4]:pl-6\"\n data-active={activeId === id}\n data-depth={item.depth}\n >\n {item.title}\n </a>\n );\n })}\n </div>\n </nav>\n );\n}\n"],"names":["useActiveItem","itemIds","activeId","setActiveId","useState","useEffect","observer","entries","intersectingEntries","entry","topIntersectingId","e","id","element","TableOfContents","toc","className","useMemo","item","linkRefs","useRef","containerRef","activeEl","containerEl","linkTop","containerHeight","classNames","jsx","el"],"mappings":"wMAIA,SAASA,EAAcC,EAAmB,CACtC,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAiB,EAAE,EAEnD,OAAAC,EAAU,IAAM,CACZ,MAAMC,EAAW,IAAI,qBAAqBC,GAAW,CACjD,MAAMC,EAAsBD,EAAQ,OAAOE,GAASA,EAAM,cAAc,EAGxE,GAAID,EAAoB,SAAW,EAC/B,OAGJ,MAAME,EAAoBF,EAAoB,IAAIG,GAAKA,EAAE,OAAO,EAAE,EAAE,CAAC,EACrER,EAAYO,CAAiB,CACjC,CAAC,EAED,UAAWE,KAAMX,GAAW,GAAI,CAC5B,MAAMY,EAAU,SAAS,eAAeD,CAAE,EACtCC,GACAP,EAAS,QAAQO,CAAO,CAEhC,CAEA,MAAO,IAAM,CACT,UAAWD,KAAMX,GAAW,GAAI,CAC5B,MAAMY,EAAU,SAAS,eAAeD,CAAE,EACtCC,GACAP,EAAS,UAAUO,CAAO,CAElC,CACJ,CACJ,EAAG,CAACZ,CAAO,CAAC,EAELC,CACX,CAQO,SAASY,EAAgB,CAAE,IAAAC,EAAK,UAAAC,GAAoE,CACvG,MAAMf,EAAUgB,EAAQ,IAAMF,EAAI,IAAIG,GAAQA,EAAK,IAAI,QAAQ,IAAK,EAAE,CAAC,EAAG,CAACH,CAAG,CAAC,EACzEb,EAAWF,EAAcC,CAAO,EAChCkB,EAAWC,EAAiD,EAAE,EAC9DC,EAAeD,EAA8B,IAAI,EAmBvD,OAhBAf,EAAU,IAAM,CACZ,GAAIH,EAAU,CACV,MAAMoB,EAAWH,EAAS,QAAQ,IAAIjB,CAAQ,EAAE,EAC1CqB,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,CACJ,EAAG,CAACvB,CAAQ,CAAC,EAERa,EAAI,SAKJ,MAAA,CAAI,IAAKM,EAAc,UAAWK,EAAWV,CAAS,EACnD,SAAA,CAAAW,EAAC,IAAA,CAAE,UAAU,iDAAiD,SAAA,eAAY,IACzE,MAAA,CAAI,UAAU,sBACV,SAAAZ,EAAI,IAAIG,GAAQ,CACb,MAAMN,EAAKM,EAAK,IAAI,QAAQ,KAAM,EAAE,EAEpC,OAEIS,EAAC,IAAA,CAEG,KAAMT,EAAK,IACX,IAAKU,GAAM,CACPT,EAAS,QAAQD,EAAK,GAAG,EAAIU,CACjC,EACA,UAAU,6JACV,cAAa1B,IAAaU,EAC1B,aAAYM,EAAK,MAEhB,SAAAA,EAAK,KAAA,EATDA,EAAK,GAAA,CAYtB,CAAC,CAAA,CACL,CAAA,EACJ,EA3BO,IA6Bf"}
1
+ {"version":3,"file":"table-of-contents.js","sources":["../../lib/components/table-of-contents.tsx"],"sourcesContent":["'use client';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { classNames } from '../utilities/theme';\n\nfunction useActiveItem(itemIds: string[]) {\n const [activeId, setActiveId] = useState<string>('');\n\n useEffect(() => {\n const observer = new IntersectionObserver(entries => {\n const intersectingEntries = entries.filter(entry => entry.isIntersecting);\n\n // Last-active entry remains highlighted\n if (intersectingEntries.length === 0) {\n return;\n }\n\n const topIntersectingId = intersectingEntries.map(e => e.target.id)[0];\n setActiveId(topIntersectingId);\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 TableOfContentsHeading = {\n title?: React.ReactNode;\n url: string;\n depth: number;\n};\n\nexport function TableOfContents({ toc, className }: { toc: TableOfContentsHeading[]; className?: string }) {\n const itemIds = useMemo(() => toc.map(item => item.url.replace('#', '')), [toc]);\n const activeId = useActiveItem(itemIds);\n const linkRefs = useRef<Record<string, HTMLAnchorElement | null>>({});\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Scroll to first active item\n useEffect(() => {\n if (activeId) {\n const activeEl = linkRefs.current[`#${activeId}`];\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 }\n }, [activeId]);\n\n if (!toc.length) {\n return null;\n }\n\n return (\n <nav ref={containerRef} className={classNames(className)}>\n <p className=\"text-muted opacity-70 mb-1 body-sm select-none\">On This Page</p>\n <div className=\"flex flex-col gap-1\">\n {toc.map(item => {\n const id = item.url.replace(/^#/, '');\n\n return (\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 => {\n linkRefs.current[item.url] = el;\n }}\n className=\"text-muted-foreground hover:text-text-primary data-[active=true]:text-primary body-sm no-underline transition-colors data-[depth=3]:pl-4 data-[depth=4]:pl-6\"\n data-active={activeId === id}\n data-depth={item.depth}\n >\n {item.title}\n </a>\n );\n })}\n </div>\n </nav>\n );\n}\n"],"names":["useActiveItem","itemIds","activeId","setActiveId","useState","useEffect","observer","entries","intersectingEntries","entry","topIntersectingId","e","id","element","TableOfContents","toc","className","useMemo","item","linkRefs","useRef","containerRef","activeEl","containerEl","linkTop","containerHeight","classNames","jsx","el"],"mappings":"wMAIA,SAASA,EAAcC,EAAmB,CACtC,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAiB,EAAE,EAEnD,OAAAC,EAAU,IAAM,CACZ,MAAMC,EAAW,IAAI,qBAAqBC,GAAW,CACjD,MAAMC,EAAsBD,EAAQ,OAAOE,GAASA,EAAM,cAAc,EAGxE,GAAID,EAAoB,SAAW,EAC/B,OAGJ,MAAME,EAAoBF,EAAoB,IAAIG,GAAKA,EAAE,OAAO,EAAE,EAAE,CAAC,EACrER,EAAYO,CAAiB,CACjC,CAAC,EAED,UAAWE,KAAMX,GAAW,GAAI,CAC5B,MAAMY,EAAU,SAAS,eAAeD,CAAE,EACtCC,GACAP,EAAS,QAAQO,CAAO,CAEhC,CAEA,MAAO,IAAM,CACT,UAAWD,KAAMX,GAAW,GAAI,CAC5B,MAAMY,EAAU,SAAS,eAAeD,CAAE,EACtCC,GACAP,EAAS,UAAUO,CAAO,CAElC,CACJ,CACJ,EAAG,CAACZ,CAAO,CAAC,EAELC,CACX,CAQO,SAASY,EAAgB,CAAE,IAAAC,EAAK,UAAAC,GAAoE,CACvG,MAAMf,EAAUgB,EAAQ,IAAMF,EAAI,IAAIG,GAAQA,EAAK,IAAI,QAAQ,IAAK,EAAE,CAAC,EAAG,CAACH,CAAG,CAAC,EACzEb,EAAWF,EAAcC,CAAO,EAChCkB,EAAWC,EAAiD,EAAE,EAC9DC,EAAeD,EAA8B,IAAI,EAmBvD,OAhBAf,EAAU,IAAM,CACZ,GAAIH,EAAU,CACV,MAAMoB,EAAWH,EAAS,QAAQ,IAAIjB,CAAQ,EAAE,EAC1CqB,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,CACJ,EAAG,CAACvB,CAAQ,CAAC,EAERa,EAAI,SAKJ,MAAA,CAAI,IAAKM,EAAc,UAAWK,EAAWV,CAAS,EACnD,SAAA,CAAAW,EAAC,IAAA,CAAE,UAAU,iDAAiD,SAAA,eAAY,IACzE,MAAA,CAAI,UAAU,sBACV,SAAAZ,EAAI,IAAIG,GAAQ,CACb,MAAMN,EAAKM,EAAK,IAAI,QAAQ,KAAM,EAAE,EAEpC,OAEIS,EAAC,IAAA,CAEG,KAAMT,EAAK,IACX,IAAKU,GAAM,CACPT,EAAS,QAAQD,EAAK,GAAG,EAAIU,CACjC,EACA,UAAU,+JACV,cAAa1B,IAAaU,EAC1B,aAAYM,EAAK,MAEhB,SAAAA,EAAK,KAAA,EATDA,EAAK,GAAA,CAYtB,CAAC,CAAA,CACL,CAAA,EACJ,EA3BO,IA6Bf"}
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as o}from"react/jsx-runtime";import{useRef as c,useEffect as u}from"react";import{Tab as b,composeRenderProps as n,TabList as f,TabPanel as m,Tabs as d}from"react-aria-components";import{classNames as i}from"../utilities/theme.js";import"clsx";function w({className:t,...a}){return o(d,{className:n(t,e=>i("group flex flex-col gap-2","data-[orientation=vertical]:flex-row",e)),...a})}function N({className:t,...a}){const e=c(null);return u(()=>{const r=e.current;if(!r)return;const s=new MutationObserver(()=>{const l=r.querySelector("[data-selected]");l&&requestAnimationFrame(()=>{l.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"})})});return s.observe(r,{attributes:!0,subtree:!0,attributeFilter:["data-selected"]}),()=>s.disconnect()},[]),o(f,{ref:e,className:n(t,r=>i("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",r)),...a})}function h({className:t,...a}){return o(b,{className:n(t,e=>i("btn-tab","group-data-[orientation=vertical]:w-full",e)),...a})}function L({className:t,...a}){return o(m,{className:n(t,e=>i("ring-offset-background","focus-ring",e)),...a})}export{h as Tab,N as TabList,L as TabPanel,w as Tabs};
1
+ "use client";import{jsx as o}from"react/jsx-runtime";import{useRef as l,useEffect as u}from"react";import{Tab as b,composeRenderProps as n,TabList as f,TabPanel as m,Tabs as d}from"react-aria-components";import{classNames as i}from"../utilities/theme.js";import"clsx";function w({className:t,...a}){return o(d,{className:n(t,e=>i("group flex flex-col gap-2","data-[orientation=vertical]:flex-row",e)),...a})}function N({className:t,...a}){const e=l(null);return u(()=>{const r=e.current;if(!r)return;const s=new MutationObserver(()=>{const c=r.querySelector("[data-selected]");c&&requestAnimationFrame(()=>{c.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"})})});return s.observe(r,{attributes:!0,subtree:!0,attributeFilter:["data-selected"]}),()=>s.disconnect()},[]),o(f,{ref:e,className:n(t,r=>i("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",r)),...a})}function h({className:t,...a}){return o(b,{className:n(t,e=>i("btn-tab","group-data-[orientation=vertical]:w-full",e)),...a})}function L({className:t,...a}){return o(m,{className:n(t,e=>i("ring-offset-surface-secondary","focus-ring",e)),...a})}export{h as Tab,N as TabList,L as TabPanel,w as Tabs};
2
2
  //# sourceMappingURL=tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sources":["../../lib/components/tabs.tsx"],"sourcesContent":["'use client';\nimport { useEffect, useRef } from 'react';\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';\nimport { classNames } from '../utilities/theme';\n\nexport function Tabs({ className, ...props }: AriaTabsProps) {\n return (\n <AriaTabs\n className={composeRenderProps(className, className =>\n classNames(\n 'group flex flex-col gap-2',\n /* Orientation */\n 'data-[orientation=vertical]:flex-row',\n className\n )\n )}\n {...props}\n />\n );\n}\n\nexport function TabList<T extends object>({ className, ...props }: AriaTabListProps<T>) {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const tabList = listRef.current;\n if (!tabList) return;\n\n const observer = new MutationObserver(() => {\n const activeTab = tabList.querySelector<HTMLElement>('[data-selected]');\n\n if (activeTab) {\n requestAnimationFrame(() => {\n activeTab.scrollIntoView({\n behavior: 'smooth',\n inline: 'center',\n block: 'nearest',\n });\n });\n }\n });\n\n observer.observe(tabList, {\n attributes: true,\n subtree: true,\n attributeFilter: ['data-selected'],\n });\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <AriaTabList\n ref={listRef}\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-tab',\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}\n"],"names":["Tabs","className","props","jsx","AriaTabs","composeRenderProps","classNames","TabList","listRef","useRef","useEffect","tabList","observer","activeTab","AriaTabList","Tab","AriaTab","TabPanel","AriaTabPanel"],"mappings":"4QAeO,SAASA,EAAK,CAAE,UAAAC,EAAW,GAAGC,GAAwB,CACzD,OACIC,EAACC,EAAA,CACG,UAAWC,EAAmBJ,EAAWA,GACrCK,EACI,4BAEA,uCACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CAAA,CAGhB,CAEO,SAASK,EAA0B,CAAE,UAAAN,EAAW,GAAGC,GAA8B,CACpF,MAAMM,EAAUC,EAAuB,IAAI,EAE3C,OAAAC,EAAU,IAAM,CACZ,MAAMC,EAAUH,EAAQ,QACxB,GAAI,CAACG,EAAS,OAEd,MAAMC,EAAW,IAAI,iBAAiB,IAAM,CACxC,MAAMC,EAAYF,EAAQ,cAA2B,iBAAiB,EAElEE,GACA,sBAAsB,IAAM,CACxBA,EAAU,eAAe,CACrB,SAAU,SACV,OAAQ,SACR,MAAO,SAAA,CACV,CACL,CAAC,CAET,CAAC,EAED,OAAAD,EAAS,QAAQD,EAAS,CACtB,WAAY,GACZ,QAAS,GACT,gBAAiB,CAAC,eAAe,CAAA,CACpC,EAEM,IAAMC,EAAS,WAAA,CAC1B,EAAG,CAAA,CAAE,EAGDT,EAACW,EAAA,CACG,IAAKN,EACL,UAAWH,EAAmBJ,EAAWA,GACrCK,EACI,+DAEA,sJACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CAAA,CAGhB,CAEO,SAASa,EAAI,CAAE,UAAAd,EAAW,GAAGC,GAAuB,CACvD,OACIC,EAACa,EAAA,CACG,UAAWX,EAAmBJ,EAAWA,GACrCK,EACI,UAEA,2CACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CAAA,CAGhB,CAEO,SAASe,EAAS,CAAE,UAAAhB,EAAW,GAAGC,GAA4B,CACjE,OACIC,EAACe,EAAA,CACG,UAAWb,EAAmBJ,EAAWA,GACrCK,EACI,yBAEA,aACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CAAA,CAGhB"}
1
+ {"version":3,"file":"tabs.js","sources":["../../lib/components/tabs.tsx"],"sourcesContent":["'use client';\nimport { useEffect, useRef } from 'react';\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';\nimport { classNames } from '../utilities/theme';\n\nexport function Tabs({ className, ...props }: AriaTabsProps) {\n return (\n <AriaTabs\n className={composeRenderProps(className, className =>\n classNames(\n 'group flex flex-col gap-2',\n /* Orientation */\n 'data-[orientation=vertical]:flex-row',\n className\n )\n )}\n {...props}\n />\n );\n}\n\nexport function TabList<T extends object>({ className, ...props }: AriaTabListProps<T>) {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const tabList = listRef.current;\n if (!tabList) return;\n\n const observer = new MutationObserver(() => {\n const activeTab = tabList.querySelector<HTMLElement>('[data-selected]');\n\n if (activeTab) {\n requestAnimationFrame(() => {\n activeTab.scrollIntoView({\n behavior: 'smooth',\n inline: 'center',\n block: 'nearest',\n });\n });\n }\n });\n\n observer.observe(tabList, {\n attributes: true,\n subtree: true,\n attributeFilter: ['data-selected'],\n });\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <AriaTabList\n ref={listRef}\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-tab',\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-surface-secondary',\n /* Focus Visible */\n 'focus-ring',\n className\n )\n )}\n {...props}\n />\n );\n}\n"],"names":["Tabs","className","props","jsx","AriaTabs","composeRenderProps","classNames","TabList","listRef","useRef","useEffect","tabList","observer","activeTab","AriaTabList","Tab","AriaTab","TabPanel","AriaTabPanel"],"mappings":"4QAeO,SAASA,EAAK,CAAE,UAAAC,EAAW,GAAGC,GAAwB,CACzD,OACIC,EAACC,EAAA,CACG,UAAWC,EAAmBJ,EAAWA,GACrCK,EACI,4BAEA,uCACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CAAA,CAGhB,CAEO,SAASK,EAA0B,CAAE,UAAAN,EAAW,GAAGC,GAA8B,CACpF,MAAMM,EAAUC,EAAuB,IAAI,EAE3C,OAAAC,EAAU,IAAM,CACZ,MAAMC,EAAUH,EAAQ,QACxB,GAAI,CAACG,EAAS,OAEd,MAAMC,EAAW,IAAI,iBAAiB,IAAM,CACxC,MAAMC,EAAYF,EAAQ,cAA2B,iBAAiB,EAElEE,GACA,sBAAsB,IAAM,CACxBA,EAAU,eAAe,CACrB,SAAU,SACV,OAAQ,SACR,MAAO,SAAA,CACV,CACL,CAAC,CAET,CAAC,EAED,OAAAD,EAAS,QAAQD,EAAS,CACtB,WAAY,GACZ,QAAS,GACT,gBAAiB,CAAC,eAAe,CAAA,CACpC,EAEM,IAAMC,EAAS,WAAA,CAC1B,EAAG,CAAA,CAAE,EAGDT,EAACW,EAAA,CACG,IAAKN,EACL,UAAWH,EAAmBJ,EAAWA,GACrCK,EACI,+DAEA,sJACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CAAA,CAGhB,CAEO,SAASa,EAAI,CAAE,UAAAd,EAAW,GAAGC,GAAuB,CACvD,OACIC,EAACa,EAAA,CACG,UAAWX,EAAmBJ,EAAWA,GACrCK,EACI,UAEA,2CACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CAAA,CAGhB,CAEO,SAASe,EAAS,CAAE,UAAAhB,EAAW,GAAGC,GAA4B,CACjE,OACIC,EAACe,EAAA,CACG,UAAWb,EAAmBJ,EAAWA,GACrCK,EACI,gCAEA,aACAL,CAAA,CACJ,EAEH,GAAGC,CAAA,CAAA,CAGhB"}
@@ -1,2 +1,2 @@
1
- import{jsx as i}from"react/jsx-runtime";import{Tooltip as n,composeRenderProps as r,TooltipTrigger as m}from"react-aria-components";import{classNames as d}from"../utilities/theme.js";import"clsx";function f({delay:t=0,closeDelay:o=0,...e}){return i(m,{delay:t,closeDelay:o,...e})}function u({className:t,offset:o=4,...e}){return i(n,{offset:o,className:r(t,a=>d("z-50 border bg-elevation-1 text-foreground outline-none max-w-lg rounded-md","data-[entering]:animate-in data-[entering]:fade-in-0 data-[entering]:zoom-in-95","data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95","data-[placement=bottom]:slide-in-from-top-2 data-[placement=left]:slide-in-from-right-2 data-[placement=right]:slide-in-from-left-2 data-[placement=top]:slide-in-from-bottom-2","px-3 py-1.5 body-sm",a)),...e})}export{u as Tooltip,f as TooltipTrigger};
1
+ import{jsx as i}from"react/jsx-runtime";import{Tooltip as r,composeRenderProps as n,TooltipTrigger as m}from"react-aria-components";import{classNames as p}from"../utilities/theme.js";import"clsx";function f({delay:t=0,closeDelay:o=0,...e}){return i(m,{delay:t,closeDelay:o,...e})}function c({className:t,offset:o=4,...e}){return i(r,{offset:o,className:n(t,a=>p("z-50 border bg-surface-primary text-text-primary outline-none max-w-lg rounded-md","data-[entering]:animate-in data-[entering]:fade-in-0 data-[entering]:zoom-in-95","data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95","data-[placement=bottom]:slide-in-from-top-2 data-[placement=left]:slide-in-from-right-2 data-[placement=right]:slide-in-from-left-2 data-[placement=top]:slide-in-from-bottom-2","px-3 py-1.5 body-sm",a)),...e})}export{c as Tooltip,f as TooltipTrigger};
2
2
  //# sourceMappingURL=tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","sources":["../../lib/components/tooltip.tsx"],"sourcesContent":["import {\n Tooltip as AriaTooltip,\n TooltipTrigger as AriaTooltipTrigger,\n composeRenderProps,\n} from 'react-aria-components';\n\nimport { classNames } from '../utilities/theme';\n\nfunction TooltipTrigger({ delay = 0, closeDelay = 0, ...props }: React.ComponentProps<typeof AriaTooltipTrigger>) {\n return <AriaTooltipTrigger delay={delay} closeDelay={closeDelay} {...props} />;\n}\n\nfunction Tooltip({ className, offset = 4, ...props }: React.ComponentProps<typeof AriaTooltip>) {\n return (\n <AriaTooltip\n offset={offset}\n className={composeRenderProps(className, className =>\n classNames(\n 'z-50 border bg-elevation-1 text-foreground outline-none max-w-lg rounded-md',\n /* Entering */\n 'data-[entering]:animate-in data-[entering]:fade-in-0 data-[entering]:zoom-in-95',\n // /* Exiting */\n 'data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95',\n /* Placement */\n '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 'px-3 py-1.5 body-sm',\n className\n )\n )}\n {...props}\n />\n );\n}\n\nexport { Tooltip, TooltipTrigger };\n"],"names":["TooltipTrigger","delay","closeDelay","props","jsx","AriaTooltipTrigger","Tooltip","className","offset","AriaTooltip","composeRenderProps","classNames"],"mappings":"oMAQA,SAASA,EAAe,CAAE,MAAAC,EAAQ,EAAG,WAAAC,EAAa,EAAG,GAAGC,GAA0D,CAC9G,OAAOC,EAACC,EAAA,CAAmB,MAAAJ,EAAc,WAAAC,EAAyB,GAAGC,EAAO,CAChF,CAEA,SAASG,EAAQ,CAAE,UAAAC,EAAW,OAAAC,EAAS,EAAG,GAAGL,GAAmD,CAC5F,OACIC,EAACK,EAAA,CACG,OAAAD,EACA,UAAWE,EAAmBH,EAAWA,GACrCI,EACI,8EAEA,kFAEA,kFAEA,kLACA,sBACAJ,CAAA,CACJ,EAEH,GAAGJ,CAAA,CAAA,CAGhB"}
1
+ {"version":3,"file":"tooltip.js","sources":["../../lib/components/tooltip.tsx"],"sourcesContent":["import {\n Tooltip as AriaTooltip,\n TooltipTrigger as AriaTooltipTrigger,\n composeRenderProps,\n} from 'react-aria-components';\n\nimport { classNames } from '../utilities/theme';\n\nfunction TooltipTrigger({ delay = 0, closeDelay = 0, ...props }: React.ComponentProps<typeof AriaTooltipTrigger>) {\n return <AriaTooltipTrigger delay={delay} closeDelay={closeDelay} {...props} />;\n}\n\nfunction Tooltip({ className, offset = 4, ...props }: React.ComponentProps<typeof AriaTooltip>) {\n return (\n <AriaTooltip\n offset={offset}\n className={composeRenderProps(className, className =>\n classNames(\n 'z-50 border bg-surface-primary text-text-primary outline-none max-w-lg rounded-md',\n /* Entering */\n 'data-[entering]:animate-in data-[entering]:fade-in-0 data-[entering]:zoom-in-95',\n // /* Exiting */\n 'data-[exiting]:animate-out data-[exiting]:fade-out-0 data-[exiting]:zoom-out-95',\n /* Placement */\n '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 'px-3 py-1.5 body-sm',\n className\n )\n )}\n {...props}\n />\n );\n}\n\nexport { Tooltip, TooltipTrigger };\n"],"names":["TooltipTrigger","delay","closeDelay","props","jsx","AriaTooltipTrigger","Tooltip","className","offset","AriaTooltip","composeRenderProps","classNames"],"mappings":"oMAQA,SAASA,EAAe,CAAE,MAAAC,EAAQ,EAAG,WAAAC,EAAa,EAAG,GAAGC,GAA0D,CAC9G,OAAOC,EAACC,EAAA,CAAmB,MAAAJ,EAAc,WAAAC,EAAyB,GAAGC,EAAO,CAChF,CAEA,SAASG,EAAQ,CAAE,UAAAC,EAAW,OAAAC,EAAS,EAAG,GAAGL,GAAmD,CAC5F,OACIC,EAACK,EAAA,CACG,OAAAD,EACA,UAAWE,EAAmBH,EAAWA,GACrCI,EACI,oFAEA,kFAEA,kFAEA,kLACA,sBACAJ,CAAA,CACJ,EAEH,GAAGJ,CAAA,CAAA,CAGhB"}
@@ -1,2 +1,2 @@
1
- const t=o=>`var(--color-${o})`,e={bg:t("elevation-1"),fg:t("neutral-900"),comment:t("neutral-500"),keyword:t("primary-700"),importExport:t("primary-700"),typeClass:t("primary-700"),typeAnnotation:t("primary-700"),typeParam:t("primary-700"),namespace:t("primary-700"),function:t("primary-700"),functionCall:t("primary-700"),builtinFunction:t("primary-700"),property:t("primary-900"),jsonKey:t("primary-700"),yamlKey:t("primary-700"),thisSuper:t("primary-700"),string:t("warning-700"),stringTemplate:t("warning-700"),stringQuote:t("warning-700"),templateExprDelim:t("warning-700"),number:t("success-700"),constant:t("success-700"),enumMember:t("success-700"),punctuationLight:t("neutral-900"),colon:t("neutral-900"),arrow:t("neutral-800"),spreadRest:t("neutral-800"),hash:t("neutral-900"),variable:t("neutral-900"),parameter:t("neutral-800"),decorator:t("destructive-700"),computedKey:t("destructive-700"),regex:t("destructive-700"),regexCharClass:t("destructive-700"),regexQuantifier:t("destructive-700"),regexFlag:t("destructive-700")},n=[{settings:{background:e.bg,foreground:e.fg}},{scope:["comment","punctuation.definition.comment","string.comment","comment.block","comment.line","comment.block.documentation"],settings:{foreground:e.comment}},{scope:["keyword","keyword.control","keyword.control.flow","keyword.control.conditional","keyword.control.loop","keyword.control.trycatch","keyword.control.switch","keyword.control.return","keyword.control.throw","keyword.control.await","keyword.control.async","keyword.other","storage.type","storage.modifier"],settings:{foreground:e.keyword,fontStyle:"bold"}},{scope:["keyword.control.import","keyword.control.export","keyword.control.from","keyword.control.as","keyword.control.default","keyword.control.module"],settings:{foreground:e.importExport,fontStyle:"bold"}},{scope:["keyword.operator","keyword.operator.assignment","keyword.operator.assignment.compound","keyword.operator.comparison","keyword.operator.logical","keyword.operator.bitwise","keyword.operator.arithmetic","keyword.operator.ternary","keyword.operator.optional","keyword.operator.nullcoalescing","keyword.operator.type","keyword.operator.expression","keyword.operator.pipe"],settings:{foreground:e.punctuationLight}},{scope:["keyword.operator.arrow","keyword.operator.scope-resolution","punctuation.separator.arrow","punctuation.definition.arrow"],settings:{foreground:e.arrow}},{scope:["keyword.operator.spread","keyword.operator.rest","keyword.operator.optional-chaining","punctuation.accessor.optional"],settings:{foreground:e.spreadRest}},{scope:["keyword.operator.new","keyword.operator.delete","keyword.operator.typeof","keyword.operator.instanceof","keyword.operator.void","keyword.operator.in","keyword.operator.of"],settings:{foreground:e.keyword,fontStyle:"bold"}},{scope:["variable.language.this","variable.language.super","variable.language.self","variable.language.cls","variable.language.special"],settings:{foreground:e.thisSuper,fontStyle:"bold"}},{scope:["string","string.quoted.single","string.quoted.double","string.quoted.other","string.interpolated","string.other"],settings:{foreground:e.string}},{scope:["string.quoted.backtick","string.template","string.template.ts","string.template.js"],settings:{foreground:e.stringTemplate}},{scope:["punctuation.definition.string.begin","punctuation.definition.string.end","punctuation.definition.template.begin","punctuation.definition.template.end","storage.type.string","punctuation.definition.string.begin.css","punctuation.definition.string.end.css"],settings:{foreground:e.stringQuote}},{scope:["punctuation.definition.template-expression.begin","punctuation.definition.template-expression.end","meta.template.expression punctuation.definition.block"],settings:{foreground:e.templateExprDelim,fontStyle:"bold"}},{scope:["string.regexp","constant.regexp"],settings:{foreground:e.regex}},{scope:["string.regexp punctuation.definition.character-class","string.regexp meta.character-class","string.regexp constant.character.escape"],settings:{foreground:e.regexCharClass}},{scope:["string.regexp keyword.operator.quantifier","keyword.operator.quantifier.regexp"],settings:{foreground:e.regexQuantifier,fontStyle:"bold"}},{scope:["string.regexp keyword.other.regex.flags","punctuation.definition.regex.flags","keyword.other.regex.flags"],settings:{foreground:e.regexFlag}},{scope:["constant.numeric","constant.numeric.integer","constant.numeric.float","constant.numeric.hex","constant.numeric.binary","constant.numeric.octal","constant.numeric.decimal","constant.numeric.scientific","constant.numeric.css"],settings:{foreground:e.number}},{scope:["constant.language","constant.language.boolean","constant.language.boolean.true","constant.language.boolean.false","constant.language.null","constant.language.undefined","constant.language.infinity","constant.language.nan","constant.language.nil","constant.language.none","constant.other.boolean"],settings:{foreground:e.constant}},{scope:["constant.character","constant.character.escape","constant.character.unicode","constant.other","constant.other.symbol","constant.other.key","constant.other.color"],settings:{foreground:e.constant}},{scope:["entity.name.function","meta.function entity.name.function","meta.method entity.name.function","meta.function.declaration entity.name.function"],settings:{foreground:e.function}},{scope:["meta.function-call entity.name.function","meta.function-call.generic entity.name.function","support.function","support.function.dom","support.function.console"],settings:{foreground:e.functionCall}},{scope:["support.function.builtin","support.function.string","support.function.array","support.function.math","support.function.date","support.function.object","support.function.json","support.function.promise"],settings:{foreground:e.builtinFunction}},{scope:["entity.name.type","entity.name.type.interface","entity.name.type.alias","entity.name.type.enum","entity.name.class","entity.name.class.forward-decl","support.type","support.class","support.type.object","support.class.builtin","entity.other.inherited-class"],settings:{foreground:e.typeClass}},{scope:["meta.type.annotation","meta.return.type","support.type.primitive","support.type.builtin","entity.name.type.primitive","keyword.type"],settings:{foreground:e.typeAnnotation}},{scope:["keyword.operator.expression.typeof","keyword.operator.expression.keyof","keyword.operator.expression.infer","keyword.operator.expression.satisfies","keyword.operator.expression.is","keyword.operator.type.annotation"],settings:{foreground:e.typeClass,fontStyle:"bold"}},{scope:["entity.name.type.type-parameter","variable.type.type-parameter","meta.type.parameters entity.name.type"],settings:{foreground:e.typeParam}},{scope:["variable.other.enummember","constant.other.enum","meta.enum variable"],settings:{foreground:e.enumMember}},{scope:["entity.name.namespace","entity.name.module","entity.name.section","storage.type.namespace","storage.type.module"],settings:{foreground:e.namespace}},{scope:["meta.decorator","meta.decorator punctuation.decorator","entity.name.function.decorator","punctuation.decorator","storage.type.annotation"],settings:{foreground:e.decorator,fontStyle:"bold"}},{scope:["variable","variable.other","variable.other.readwrite","variable.other.constant","variable.other.global","variable.other.local"],settings:{foreground:e.variable}},{scope:["variable.parameter","variable.parameter.function","meta.function.parameters variable.parameter","meta.arrow.parameters variable.parameter"],settings:{foreground:e.parameter}},{scope:["variable.other.property","variable.other.object.property","support.type.property-name","meta.object-literal.key","meta.object.key"],settings:{foreground:e.property}},{scope:["support.type.property-name.json","meta.mapping.key.json string","meta.structure.dictionary.key.json string"],settings:{foreground:e.jsonKey}},{scope:["entity.name.tag.yaml","meta.mapping.key.yaml"],settings:{foreground:e.yamlKey,fontStyle:"bold"}},{scope:["meta.computed.key","meta.objectliteral meta.template.expression"],settings:{foreground:e.computedKey}},{scope:["punctuation.terminator","punctuation.terminator.statement","punctuation.separator","punctuation.separator.comma","punctuation.separator.period","punctuation.separator.dot","punctuation.separator.namespace","punctuation.separator.continuation","punctuation.accessor","punctuation.accessor.dot","meta.delimiter.object.comma","meta.delimiter.array.comma"],settings:{foreground:e.punctuationLight}},{scope:["punctuation.separator.key-value","punctuation.separator.colon","punctuation.separator.type-annotation","punctuation.separator.dictionary.key-value","punctuation.definition.binding-pattern.object","punctuation.separator.case-statements"],settings:{foreground:e.colon}},{scope:["punctuation.definition.id.css","punctuation.definition.entity.css","punctuation.definition.hash","entity.other.attribute-name.id.css punctuation","punctuation.definition.interpolation.begin","punctuation.definition.interpolation.end","punctuation.definition.directive","punctuation.definition.preprocessor","comment.line.number-sign punctuation.definition.comment"],settings:{foreground:e.hash}}],r={name:"shiki",settings:n};export{r as shikiTheme};
1
+ const e=o=>`var(--color-${o})`,t={bg:e("surface-primary"),fg:e("text-primary"),comment:e("text-tertiary"),keyword:e("primary"),importExport:e("primary"),typeClass:e("primary"),typeAnnotation:e("primary"),typeParam:e("primary"),namespace:e("primary"),function:e("primary"),functionCall:e("primary"),builtinFunction:e("primary"),property:e("text-primary"),jsonKey:e("primary"),yamlKey:e("primary"),thisSuper:e("primary"),string:e("warning"),stringTemplate:e("warning"),stringQuote:e("warning"),templateExprDelim:e("warning"),number:e("success"),constant:e("success"),enumMember:e("success"),punctuationLight:e("text-secondary"),colon:e("text-secondary"),arrow:e("text-secondary"),spreadRest:e("text-secondary"),hash:e("text-secondary"),variable:e("text-primary"),parameter:e("text-secondary"),decorator:e("destructive"),computedKey:e("destructive"),regex:e("destructive"),regexCharClass:e("destructive"),regexQuantifier:e("destructive"),regexFlag:e("destructive")},n=[{settings:{background:t.bg,foreground:t.fg}},{scope:["comment","punctuation.definition.comment","string.comment","comment.block","comment.line","comment.block.documentation"],settings:{foreground:t.comment}},{scope:["keyword","keyword.control","keyword.control.flow","keyword.control.conditional","keyword.control.loop","keyword.control.trycatch","keyword.control.switch","keyword.control.return","keyword.control.throw","keyword.control.await","keyword.control.async","keyword.other","storage.type","storage.modifier"],settings:{foreground:t.keyword,fontStyle:"bold"}},{scope:["keyword.control.import","keyword.control.export","keyword.control.from","keyword.control.as","keyword.control.default","keyword.control.module"],settings:{foreground:t.importExport,fontStyle:"bold"}},{scope:["keyword.operator","keyword.operator.assignment","keyword.operator.assignment.compound","keyword.operator.comparison","keyword.operator.logical","keyword.operator.bitwise","keyword.operator.arithmetic","keyword.operator.ternary","keyword.operator.optional","keyword.operator.nullcoalescing","keyword.operator.type","keyword.operator.expression","keyword.operator.pipe"],settings:{foreground:t.punctuationLight}},{scope:["keyword.operator.arrow","keyword.operator.scope-resolution","punctuation.separator.arrow","punctuation.definition.arrow"],settings:{foreground:t.arrow}},{scope:["keyword.operator.spread","keyword.operator.rest","keyword.operator.optional-chaining","punctuation.accessor.optional"],settings:{foreground:t.spreadRest}},{scope:["keyword.operator.new","keyword.operator.delete","keyword.operator.typeof","keyword.operator.instanceof","keyword.operator.void","keyword.operator.in","keyword.operator.of"],settings:{foreground:t.keyword,fontStyle:"bold"}},{scope:["variable.language.this","variable.language.super","variable.language.self","variable.language.cls","variable.language.special"],settings:{foreground:t.thisSuper,fontStyle:"bold"}},{scope:["string","string.quoted.single","string.quoted.double","string.quoted.other","string.interpolated","string.other"],settings:{foreground:t.string}},{scope:["string.quoted.backtick","string.template","string.template.ts","string.template.js"],settings:{foreground:t.stringTemplate}},{scope:["punctuation.definition.string.begin","punctuation.definition.string.end","punctuation.definition.template.begin","punctuation.definition.template.end","storage.type.string","punctuation.definition.string.begin.css","punctuation.definition.string.end.css"],settings:{foreground:t.stringQuote}},{scope:["punctuation.definition.template-expression.begin","punctuation.definition.template-expression.end","meta.template.expression punctuation.definition.block"],settings:{foreground:t.templateExprDelim,fontStyle:"bold"}},{scope:["string.regexp","constant.regexp"],settings:{foreground:t.regex}},{scope:["string.regexp punctuation.definition.character-class","string.regexp meta.character-class","string.regexp constant.character.escape"],settings:{foreground:t.regexCharClass}},{scope:["string.regexp keyword.operator.quantifier","keyword.operator.quantifier.regexp"],settings:{foreground:t.regexQuantifier,fontStyle:"bold"}},{scope:["string.regexp keyword.other.regex.flags","punctuation.definition.regex.flags","keyword.other.regex.flags"],settings:{foreground:t.regexFlag}},{scope:["constant.numeric","constant.numeric.integer","constant.numeric.float","constant.numeric.hex","constant.numeric.binary","constant.numeric.octal","constant.numeric.decimal","constant.numeric.scientific","constant.numeric.css"],settings:{foreground:t.number}},{scope:["constant.language","constant.language.boolean","constant.language.boolean.true","constant.language.boolean.false","constant.language.null","constant.language.undefined","constant.language.infinity","constant.language.nan","constant.language.nil","constant.language.none","constant.other.boolean"],settings:{foreground:t.constant}},{scope:["constant.character","constant.character.escape","constant.character.unicode","constant.other","constant.other.symbol","constant.other.key","constant.other.color"],settings:{foreground:t.constant}},{scope:["entity.name.function","meta.function entity.name.function","meta.method entity.name.function","meta.function.declaration entity.name.function"],settings:{foreground:t.function}},{scope:["meta.function-call entity.name.function","meta.function-call.generic entity.name.function","support.function","support.function.dom","support.function.console"],settings:{foreground:t.functionCall}},{scope:["support.function.builtin","support.function.string","support.function.array","support.function.math","support.function.date","support.function.object","support.function.json","support.function.promise"],settings:{foreground:t.builtinFunction}},{scope:["entity.name.type","entity.name.type.interface","entity.name.type.alias","entity.name.type.enum","entity.name.class","entity.name.class.forward-decl","support.type","support.class","support.type.object","support.class.builtin","entity.other.inherited-class"],settings:{foreground:t.typeClass}},{scope:["meta.type.annotation","meta.return.type","support.type.primitive","support.type.builtin","entity.name.type.primitive","keyword.type"],settings:{foreground:t.typeAnnotation}},{scope:["keyword.operator.expression.typeof","keyword.operator.expression.keyof","keyword.operator.expression.infer","keyword.operator.expression.satisfies","keyword.operator.expression.is","keyword.operator.type.annotation"],settings:{foreground:t.typeClass,fontStyle:"bold"}},{scope:["entity.name.type.type-parameter","variable.type.type-parameter","meta.type.parameters entity.name.type"],settings:{foreground:t.typeParam}},{scope:["variable.other.enummember","constant.other.enum","meta.enum variable"],settings:{foreground:t.enumMember}},{scope:["entity.name.namespace","entity.name.module","entity.name.section","storage.type.namespace","storage.type.module"],settings:{foreground:t.namespace}},{scope:["meta.decorator","meta.decorator punctuation.decorator","entity.name.function.decorator","punctuation.decorator","storage.type.annotation"],settings:{foreground:t.decorator,fontStyle:"bold"}},{scope:["variable","variable.other","variable.other.readwrite","variable.other.constant","variable.other.global","variable.other.local"],settings:{foreground:t.variable}},{scope:["variable.parameter","variable.parameter.function","meta.function.parameters variable.parameter","meta.arrow.parameters variable.parameter"],settings:{foreground:t.parameter}},{scope:["variable.other.property","variable.other.object.property","support.type.property-name","meta.object-literal.key","meta.object.key"],settings:{foreground:t.property}},{scope:["support.type.property-name.json","meta.mapping.key.json string","meta.structure.dictionary.key.json string"],settings:{foreground:t.jsonKey}},{scope:["entity.name.tag.yaml","meta.mapping.key.yaml"],settings:{foreground:t.yamlKey,fontStyle:"bold"}},{scope:["meta.computed.key","meta.objectliteral meta.template.expression"],settings:{foreground:t.computedKey}},{scope:["punctuation.terminator","punctuation.terminator.statement","punctuation.separator","punctuation.separator.comma","punctuation.separator.period","punctuation.separator.dot","punctuation.separator.namespace","punctuation.separator.continuation","punctuation.accessor","punctuation.accessor.dot","meta.delimiter.object.comma","meta.delimiter.array.comma"],settings:{foreground:t.punctuationLight}},{scope:["punctuation.separator.key-value","punctuation.separator.colon","punctuation.separator.type-annotation","punctuation.separator.dictionary.key-value","punctuation.definition.binding-pattern.object","punctuation.separator.case-statements"],settings:{foreground:t.colon}},{scope:["punctuation.definition.id.css","punctuation.definition.entity.css","punctuation.definition.hash","entity.other.attribute-name.id.css punctuation","punctuation.definition.interpolation.begin","punctuation.definition.interpolation.end","punctuation.definition.directive","punctuation.definition.preprocessor","comment.line.number-sign punctuation.definition.comment"],settings:{foreground:t.hash}}],r={name:"shiki",settings:n};export{r as shikiTheme};
2
2
  //# sourceMappingURL=shiki.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shiki.js","sources":["../../lib/utilities/shiki.ts"],"sourcesContent":["import type { ThemeRegistration } from 'shiki';\n\nconst v = (token: string) => `var(--color-${token})`;\n\nconst palette = {\n bg: v('elevation-1'),\n fg: v('neutral-900'),\n comment: v('neutral-500'),\n keyword: v('primary-700'),\n importExport: v('primary-700'),\n typeClass: v('primary-700'),\n typeAnnotation: v('primary-700'),\n typeParam: v('primary-700'),\n namespace: v('primary-700'),\n function: v('primary-700'),\n functionCall: v('primary-700'),\n builtinFunction: v('primary-700'),\n property: v('primary-900'),\n jsonKey: v('primary-700'),\n yamlKey: v('primary-700'),\n tag: v('primary-700'),\n thisSuper: v('primary-700'),\n shellBuiltin: v('primary-700'),\n pythonMagic: v('primary-700'),\n goBuiltin: v('primary-700'),\n scssMixin: v('primary-700'),\n cssProperty: v('primary-700'),\n cssAtRule: v('primary-700'),\n cssSelector: v('primary-700'),\n cssIdSelector: v('primary-700'),\n cssPseudo: v('primary-700'),\n mdHeading: v('primary-700'),\n mdLink: v('primary-700'),\n mdBullet: v('primary-700'),\n attribute: v('primary-700'),\n string: v('warning-700'),\n stringTemplate: v('warning-700'),\n stringQuote: v('warning-700'),\n templateExprDelim: v('warning-700'),\n cssValue: v('warning-700'),\n pythonFStr: v('warning-700'),\n shellVar: v('warning-700'),\n yamlTag: v('warning-700'),\n number: v('success-700'),\n constant: v('success-700'),\n enumMember: v('success-700'),\n cssVariable: v('success-700'),\n cssUnit: v('success-700'),\n punctuationLight: v('neutral-900'),\n tagBracket: v('neutral-700'),\n colon: v('neutral-900'),\n arrow: v('neutral-800'),\n spreadRest: v('neutral-800'),\n hash: v('neutral-900'),\n jsxExprDelim: v('neutral-700'),\n variable: v('neutral-900'),\n parameter: v('neutral-800'),\n mdBold: v('neutral-900'),\n mdCode: v('warning-700'),\n mdBlockquote: v('neutral-600'),\n mdHr: v('neutral-400'),\n decorator: v('destructive-700'),\n computedKey: v('destructive-700'),\n shellFlag: v('destructive-700'),\n rustLifetime: v('destructive-700'),\n rustMacro: v('destructive-700'),\n rustAttr: v('destructive-700'),\n yamlAnchor: v('destructive-700'),\n yamlAlias: v('destructive-700'),\n cssImportant: v('destructive-700'),\n regex: v('destructive-700'),\n regexCharClass: v('destructive-700'),\n regexQuantifier: v('destructive-700'),\n regexFlag: v('destructive-700'),\n deprecated: v('destructive-700'),\n} as const;\n\nconst settings: ThemeRegistration['settings'] = [\n { settings: { background: palette.bg, foreground: palette.fg } },\n\n // Comments\n {\n scope: [\n 'comment',\n 'punctuation.definition.comment',\n 'string.comment',\n 'comment.block',\n 'comment.line',\n 'comment.block.documentation',\n ],\n settings: { foreground: palette.comment },\n },\n\n // Keywords — control / storage\n {\n scope: [\n 'keyword',\n 'keyword.control',\n 'keyword.control.flow',\n 'keyword.control.conditional',\n 'keyword.control.loop',\n 'keyword.control.trycatch',\n 'keyword.control.switch',\n 'keyword.control.return',\n 'keyword.control.throw',\n 'keyword.control.await',\n 'keyword.control.async',\n 'keyword.other',\n 'storage.type',\n 'storage.modifier',\n ],\n settings: { foreground: palette.keyword, fontStyle: 'bold' },\n },\n\n // import / export / from / as / default\n {\n scope: [\n 'keyword.control.import',\n 'keyword.control.export',\n 'keyword.control.from',\n 'keyword.control.as',\n 'keyword.control.default',\n 'keyword.control.module',\n ],\n settings: { foreground: palette.importExport, fontStyle: 'bold' },\n },\n\n // Operators\n {\n scope: [\n 'keyword.operator',\n 'keyword.operator.assignment',\n 'keyword.operator.assignment.compound',\n 'keyword.operator.comparison',\n 'keyword.operator.logical',\n 'keyword.operator.bitwise',\n 'keyword.operator.arithmetic',\n 'keyword.operator.ternary',\n 'keyword.operator.optional',\n 'keyword.operator.nullcoalescing',\n 'keyword.operator.type',\n 'keyword.operator.expression',\n 'keyword.operator.pipe',\n ],\n settings: { foreground: palette.punctuationLight },\n },\n\n // => ::\n {\n scope: [\n 'keyword.operator.arrow',\n 'keyword.operator.scope-resolution',\n 'punctuation.separator.arrow',\n 'punctuation.definition.arrow',\n ],\n settings: { foreground: palette.arrow },\n },\n\n // ... ?.\n {\n scope: [\n 'keyword.operator.spread',\n 'keyword.operator.rest',\n 'keyword.operator.optional-chaining',\n 'punctuation.accessor.optional',\n ],\n settings: { foreground: palette.spreadRest },\n },\n\n // new delete typeof instanceof void in of\n {\n scope: [\n 'keyword.operator.new',\n 'keyword.operator.delete',\n 'keyword.operator.typeof',\n 'keyword.operator.instanceof',\n 'keyword.operator.void',\n 'keyword.operator.in',\n 'keyword.operator.of',\n ],\n settings: { foreground: palette.keyword, fontStyle: 'bold' },\n },\n\n // this / super / self / cls\n {\n scope: [\n 'variable.language.this',\n 'variable.language.super',\n 'variable.language.self',\n 'variable.language.cls',\n 'variable.language.special',\n ],\n settings: { foreground: palette.thisSuper, fontStyle: 'bold' },\n },\n\n // Strings — single / double\n {\n scope: [\n 'string',\n 'string.quoted.single',\n 'string.quoted.double',\n 'string.quoted.other',\n 'string.interpolated',\n 'string.other',\n ],\n settings: { foreground: palette.string },\n },\n\n // Template literals — backtick body\n {\n scope: ['string.quoted.backtick', 'string.template', 'string.template.ts', 'string.template.js'],\n settings: { foreground: palette.stringTemplate },\n },\n\n // Quote delimiters \" ' `\n {\n scope: [\n 'punctuation.definition.string.begin',\n 'punctuation.definition.string.end',\n 'punctuation.definition.template.begin',\n 'punctuation.definition.template.end',\n 'storage.type.string',\n 'punctuation.definition.string.begin.css',\n 'punctuation.definition.string.end.css',\n ],\n settings: { foreground: palette.stringQuote },\n },\n\n // Template ${ } delimiters\n {\n scope: [\n 'punctuation.definition.template-expression.begin',\n 'punctuation.definition.template-expression.end',\n 'meta.template.expression punctuation.definition.block',\n ],\n settings: { foreground: palette.templateExprDelim, fontStyle: 'bold' },\n },\n\n // RegExp\n {\n scope: ['string.regexp', 'constant.regexp'],\n settings: { foreground: palette.regex },\n },\n {\n scope: [\n 'string.regexp punctuation.definition.character-class',\n 'string.regexp meta.character-class',\n 'string.regexp constant.character.escape',\n ],\n settings: { foreground: palette.regexCharClass },\n },\n {\n scope: ['string.regexp keyword.operator.quantifier', 'keyword.operator.quantifier.regexp'],\n settings: { foreground: palette.regexQuantifier, fontStyle: 'bold' },\n },\n {\n scope: [\n 'string.regexp keyword.other.regex.flags',\n 'punctuation.definition.regex.flags',\n 'keyword.other.regex.flags',\n ],\n settings: { foreground: palette.regexFlag },\n },\n\n // Numbers\n {\n scope: [\n 'constant.numeric',\n 'constant.numeric.integer',\n 'constant.numeric.float',\n 'constant.numeric.hex',\n 'constant.numeric.binary',\n 'constant.numeric.octal',\n 'constant.numeric.decimal',\n 'constant.numeric.scientific',\n 'constant.numeric.css',\n ],\n settings: { foreground: palette.number },\n },\n\n // Boolean / null / undefined / Infinity / NaN\n {\n scope: [\n 'constant.language',\n 'constant.language.boolean',\n 'constant.language.boolean.true',\n 'constant.language.boolean.false',\n 'constant.language.null',\n 'constant.language.undefined',\n 'constant.language.infinity',\n 'constant.language.nan',\n 'constant.language.nil',\n 'constant.language.none',\n 'constant.other.boolean',\n ],\n settings: { foreground: palette.constant },\n },\n\n // Other constants — escapes, symbols\n {\n scope: [\n 'constant.character',\n 'constant.character.escape',\n 'constant.character.unicode',\n 'constant.other',\n 'constant.other.symbol',\n 'constant.other.key',\n 'constant.other.color',\n ],\n settings: { foreground: palette.constant },\n },\n\n // Function declarations\n {\n scope: [\n 'entity.name.function',\n 'meta.function entity.name.function',\n 'meta.method entity.name.function',\n 'meta.function.declaration entity.name.function',\n ],\n settings: { foreground: palette.function },\n },\n\n // Function calls\n {\n scope: [\n 'meta.function-call entity.name.function',\n 'meta.function-call.generic entity.name.function',\n 'support.function',\n 'support.function.dom',\n 'support.function.console',\n ],\n settings: { foreground: palette.functionCall },\n },\n\n // Built-in functions\n {\n scope: [\n 'support.function.builtin',\n 'support.function.string',\n 'support.function.array',\n 'support.function.math',\n 'support.function.date',\n 'support.function.object',\n 'support.function.json',\n 'support.function.promise',\n ],\n settings: { foreground: palette.builtinFunction },\n },\n\n // Types / classes / interfaces\n {\n scope: [\n 'entity.name.type',\n 'entity.name.type.interface',\n 'entity.name.type.alias',\n 'entity.name.type.enum',\n 'entity.name.class',\n 'entity.name.class.forward-decl',\n 'support.type',\n 'support.class',\n 'support.type.object',\n 'support.class.builtin',\n 'entity.other.inherited-class',\n ],\n settings: { foreground: palette.typeClass },\n },\n\n // Type annotations / return types\n {\n scope: [\n 'meta.type.annotation',\n 'meta.return.type',\n 'support.type.primitive',\n 'support.type.builtin',\n 'entity.name.type.primitive',\n 'keyword.type',\n ],\n settings: { foreground: palette.typeAnnotation },\n },\n\n // typeof keyof infer satisfies is\n {\n scope: [\n 'keyword.operator.expression.typeof',\n 'keyword.operator.expression.keyof',\n 'keyword.operator.expression.infer',\n 'keyword.operator.expression.satisfies',\n 'keyword.operator.expression.is',\n 'keyword.operator.type.annotation',\n ],\n settings: { foreground: palette.typeClass, fontStyle: 'bold' },\n },\n\n // Generic type params <T>\n {\n scope: [\n 'entity.name.type.type-parameter',\n 'variable.type.type-parameter',\n 'meta.type.parameters entity.name.type',\n ],\n settings: { foreground: palette.typeParam },\n },\n\n // Enum members\n {\n scope: ['variable.other.enummember', 'constant.other.enum', 'meta.enum variable'],\n settings: { foreground: palette.enumMember },\n },\n\n // Namespaces / modules\n {\n scope: [\n 'entity.name.namespace',\n 'entity.name.module',\n 'entity.name.section',\n 'storage.type.namespace',\n 'storage.type.module',\n ],\n settings: { foreground: palette.namespace },\n },\n\n // Decorators (all languages)\n {\n scope: [\n 'meta.decorator',\n 'meta.decorator punctuation.decorator',\n 'entity.name.function.decorator',\n 'punctuation.decorator',\n 'storage.type.annotation',\n ],\n settings: { foreground: palette.decorator, fontStyle: 'bold' },\n },\n\n // Variables\n {\n scope: [\n 'variable',\n 'variable.other',\n 'variable.other.readwrite',\n 'variable.other.constant',\n 'variable.other.global',\n 'variable.other.local',\n ],\n settings: { foreground: palette.variable },\n },\n\n // Parameters\n {\n scope: [\n 'variable.parameter',\n 'variable.parameter.function',\n 'meta.function.parameters variable.parameter',\n 'meta.arrow.parameters variable.parameter',\n ],\n settings: { foreground: palette.parameter },\n },\n\n // Object properties\n {\n scope: [\n 'variable.other.property',\n 'variable.other.object.property',\n 'support.type.property-name',\n 'meta.object-literal.key',\n 'meta.object.key',\n ],\n settings: { foreground: palette.property },\n },\n\n // JSON keys\n {\n scope: [\n 'support.type.property-name.json',\n 'meta.mapping.key.json string',\n 'meta.structure.dictionary.key.json string',\n ],\n settings: { foreground: palette.jsonKey },\n },\n\n // YAML keys\n {\n scope: ['entity.name.tag.yaml', 'meta.mapping.key.yaml'],\n settings: { foreground: palette.yamlKey, fontStyle: 'bold' },\n },\n\n // Computed keys [key]\n {\n scope: ['meta.computed.key', 'meta.objectliteral meta.template.expression'],\n settings: { foreground: palette.computedKey },\n },\n\n // Commas , semicolons ; dots .\n {\n scope: [\n 'punctuation.terminator',\n 'punctuation.terminator.statement',\n 'punctuation.separator',\n 'punctuation.separator.comma',\n 'punctuation.separator.period',\n 'punctuation.separator.dot',\n 'punctuation.separator.namespace',\n 'punctuation.separator.continuation',\n 'punctuation.accessor',\n 'punctuation.accessor.dot',\n 'meta.delimiter.object.comma',\n 'meta.delimiter.array.comma',\n ],\n settings: { foreground: palette.punctuationLight },\n },\n\n // Colons :\n {\n scope: [\n 'punctuation.separator.key-value',\n 'punctuation.separator.colon',\n 'punctuation.separator.type-annotation',\n 'punctuation.separator.dictionary.key-value',\n 'punctuation.definition.binding-pattern.object',\n 'punctuation.separator.case-statements',\n ],\n settings: { foreground: palette.colon },\n },\n\n // Hash #\n {\n scope: [\n 'punctuation.definition.id.css',\n 'punctuation.definition.entity.css',\n 'punctuation.definition.hash',\n 'entity.other.attribute-name.id.css punctuation',\n 'punctuation.definition.interpolation.begin',\n 'punctuation.definition.interpolation.end',\n 'punctuation.definition.directive',\n 'punctuation.definition.preprocessor',\n 'comment.line.number-sign punctuation.definition.comment',\n ],\n settings: { foreground: palette.hash },\n },\n];\n\nexport const shikiTheme: ThemeRegistration = {\n name: 'shiki',\n settings,\n};\n"],"names":["v","token","palette","settings","shikiTheme"],"mappings":"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"}
1
+ {"version":3,"file":"shiki.js","sources":["../../lib/utilities/shiki.ts"],"sourcesContent":["import type { ThemeRegistration } from 'shiki';\n\nconst v = (token: string) => `var(--color-${token})`;\n\nconst palette = {\n bg: v('surface-primary'),\n fg: v('text-primary'),\n comment: v('text-tertiary'),\n keyword: v('primary'),\n importExport: v('primary'),\n typeClass: v('primary'),\n typeAnnotation: v('primary'),\n typeParam: v('primary'),\n namespace: v('primary'),\n function: v('primary'),\n functionCall: v('primary'),\n builtinFunction: v('primary'),\n property: v('text-primary'),\n jsonKey: v('primary'),\n yamlKey: v('primary'),\n tag: v('primary'),\n thisSuper: v('primary'),\n shellBuiltin: v('primary'),\n pythonMagic: v('primary'),\n goBuiltin: v('primary'),\n scssMixin: v('primary'),\n cssProperty: v('primary'),\n cssAtRule: v('primary'),\n cssSelector: v('primary'),\n cssIdSelector: v('primary'),\n cssPseudo: v('primary'),\n mdHeading: v('primary'),\n mdLink: v('primary'),\n mdBullet: v('primary'),\n attribute: v('primary'),\n string: v('warning'),\n stringTemplate: v('warning'),\n stringQuote: v('warning'),\n templateExprDelim: v('warning'),\n cssValue: v('warning'),\n pythonFStr: v('warning'),\n shellVar: v('warning'),\n yamlTag: v('warning'),\n number: v('success'),\n constant: v('success'),\n enumMember: v('success'),\n cssVariable: v('success'),\n cssUnit: v('success'),\n punctuationLight: v('text-secondary'),\n tagBracket: v('text-secondary'),\n colon: v('text-secondary'),\n arrow: v('text-secondary'),\n spreadRest: v('text-secondary'),\n hash: v('text-secondary'),\n jsxExprDelim: v('text-secondary'),\n variable: v('text-primary'),\n parameter: v('text-secondary'),\n mdBold: v('text-primary'),\n mdCode: v('warning'),\n mdBlockquote: v('text-tertiary'),\n mdHr: v('stroke-primary'),\n decorator: v('destructive'),\n computedKey: v('destructive'),\n shellFlag: v('destructive'),\n rustLifetime: v('destructive'),\n rustMacro: v('destructive'),\n rustAttr: v('destructive'),\n yamlAnchor: v('destructive'),\n yamlAlias: v('destructive'),\n cssImportant: v('destructive'),\n regex: v('destructive'),\n regexCharClass: v('destructive'),\n regexQuantifier: v('destructive'),\n regexFlag: v('destructive'),\n deprecated: v('destructive'),\n} as const;\n\nconst settings: ThemeRegistration['settings'] = [\n { settings: { background: palette.bg, foreground: palette.fg } },\n\n // Comments\n {\n scope: [\n 'comment',\n 'punctuation.definition.comment',\n 'string.comment',\n 'comment.block',\n 'comment.line',\n 'comment.block.documentation',\n ],\n settings: { foreground: palette.comment },\n },\n\n // Keywords — control / storage\n {\n scope: [\n 'keyword',\n 'keyword.control',\n 'keyword.control.flow',\n 'keyword.control.conditional',\n 'keyword.control.loop',\n 'keyword.control.trycatch',\n 'keyword.control.switch',\n 'keyword.control.return',\n 'keyword.control.throw',\n 'keyword.control.await',\n 'keyword.control.async',\n 'keyword.other',\n 'storage.type',\n 'storage.modifier',\n ],\n settings: { foreground: palette.keyword, fontStyle: 'bold' },\n },\n\n // import / export / from / as / default\n {\n scope: [\n 'keyword.control.import',\n 'keyword.control.export',\n 'keyword.control.from',\n 'keyword.control.as',\n 'keyword.control.default',\n 'keyword.control.module',\n ],\n settings: { foreground: palette.importExport, fontStyle: 'bold' },\n },\n\n // Operators\n {\n scope: [\n 'keyword.operator',\n 'keyword.operator.assignment',\n 'keyword.operator.assignment.compound',\n 'keyword.operator.comparison',\n 'keyword.operator.logical',\n 'keyword.operator.bitwise',\n 'keyword.operator.arithmetic',\n 'keyword.operator.ternary',\n 'keyword.operator.optional',\n 'keyword.operator.nullcoalescing',\n 'keyword.operator.type',\n 'keyword.operator.expression',\n 'keyword.operator.pipe',\n ],\n settings: { foreground: palette.punctuationLight },\n },\n\n // => ::\n {\n scope: [\n 'keyword.operator.arrow',\n 'keyword.operator.scope-resolution',\n 'punctuation.separator.arrow',\n 'punctuation.definition.arrow',\n ],\n settings: { foreground: palette.arrow },\n },\n\n // ... ?.\n {\n scope: [\n 'keyword.operator.spread',\n 'keyword.operator.rest',\n 'keyword.operator.optional-chaining',\n 'punctuation.accessor.optional',\n ],\n settings: { foreground: palette.spreadRest },\n },\n\n // new delete typeof instanceof void in of\n {\n scope: [\n 'keyword.operator.new',\n 'keyword.operator.delete',\n 'keyword.operator.typeof',\n 'keyword.operator.instanceof',\n 'keyword.operator.void',\n 'keyword.operator.in',\n 'keyword.operator.of',\n ],\n settings: { foreground: palette.keyword, fontStyle: 'bold' },\n },\n\n // this / super / self / cls\n {\n scope: [\n 'variable.language.this',\n 'variable.language.super',\n 'variable.language.self',\n 'variable.language.cls',\n 'variable.language.special',\n ],\n settings: { foreground: palette.thisSuper, fontStyle: 'bold' },\n },\n\n // Strings — single / double\n {\n scope: [\n 'string',\n 'string.quoted.single',\n 'string.quoted.double',\n 'string.quoted.other',\n 'string.interpolated',\n 'string.other',\n ],\n settings: { foreground: palette.string },\n },\n\n // Template literals — backtick body\n {\n scope: ['string.quoted.backtick', 'string.template', 'string.template.ts', 'string.template.js'],\n settings: { foreground: palette.stringTemplate },\n },\n\n // Quote delimiters \" ' `\n {\n scope: [\n 'punctuation.definition.string.begin',\n 'punctuation.definition.string.end',\n 'punctuation.definition.template.begin',\n 'punctuation.definition.template.end',\n 'storage.type.string',\n 'punctuation.definition.string.begin.css',\n 'punctuation.definition.string.end.css',\n ],\n settings: { foreground: palette.stringQuote },\n },\n\n // Template ${ } delimiters\n {\n scope: [\n 'punctuation.definition.template-expression.begin',\n 'punctuation.definition.template-expression.end',\n 'meta.template.expression punctuation.definition.block',\n ],\n settings: { foreground: palette.templateExprDelim, fontStyle: 'bold' },\n },\n\n // RegExp\n {\n scope: ['string.regexp', 'constant.regexp'],\n settings: { foreground: palette.regex },\n },\n {\n scope: [\n 'string.regexp punctuation.definition.character-class',\n 'string.regexp meta.character-class',\n 'string.regexp constant.character.escape',\n ],\n settings: { foreground: palette.regexCharClass },\n },\n {\n scope: ['string.regexp keyword.operator.quantifier', 'keyword.operator.quantifier.regexp'],\n settings: { foreground: palette.regexQuantifier, fontStyle: 'bold' },\n },\n {\n scope: [\n 'string.regexp keyword.other.regex.flags',\n 'punctuation.definition.regex.flags',\n 'keyword.other.regex.flags',\n ],\n settings: { foreground: palette.regexFlag },\n },\n\n // Numbers\n {\n scope: [\n 'constant.numeric',\n 'constant.numeric.integer',\n 'constant.numeric.float',\n 'constant.numeric.hex',\n 'constant.numeric.binary',\n 'constant.numeric.octal',\n 'constant.numeric.decimal',\n 'constant.numeric.scientific',\n 'constant.numeric.css',\n ],\n settings: { foreground: palette.number },\n },\n\n // Boolean / null / undefined / Infinity / NaN\n {\n scope: [\n 'constant.language',\n 'constant.language.boolean',\n 'constant.language.boolean.true',\n 'constant.language.boolean.false',\n 'constant.language.null',\n 'constant.language.undefined',\n 'constant.language.infinity',\n 'constant.language.nan',\n 'constant.language.nil',\n 'constant.language.none',\n 'constant.other.boolean',\n ],\n settings: { foreground: palette.constant },\n },\n\n // Other constants — escapes, symbols\n {\n scope: [\n 'constant.character',\n 'constant.character.escape',\n 'constant.character.unicode',\n 'constant.other',\n 'constant.other.symbol',\n 'constant.other.key',\n 'constant.other.color',\n ],\n settings: { foreground: palette.constant },\n },\n\n // Function declarations\n {\n scope: [\n 'entity.name.function',\n 'meta.function entity.name.function',\n 'meta.method entity.name.function',\n 'meta.function.declaration entity.name.function',\n ],\n settings: { foreground: palette.function },\n },\n\n // Function calls\n {\n scope: [\n 'meta.function-call entity.name.function',\n 'meta.function-call.generic entity.name.function',\n 'support.function',\n 'support.function.dom',\n 'support.function.console',\n ],\n settings: { foreground: palette.functionCall },\n },\n\n // Built-in functions\n {\n scope: [\n 'support.function.builtin',\n 'support.function.string',\n 'support.function.array',\n 'support.function.math',\n 'support.function.date',\n 'support.function.object',\n 'support.function.json',\n 'support.function.promise',\n ],\n settings: { foreground: palette.builtinFunction },\n },\n\n // Types / classes / interfaces\n {\n scope: [\n 'entity.name.type',\n 'entity.name.type.interface',\n 'entity.name.type.alias',\n 'entity.name.type.enum',\n 'entity.name.class',\n 'entity.name.class.forward-decl',\n 'support.type',\n 'support.class',\n 'support.type.object',\n 'support.class.builtin',\n 'entity.other.inherited-class',\n ],\n settings: { foreground: palette.typeClass },\n },\n\n // Type annotations / return types\n {\n scope: [\n 'meta.type.annotation',\n 'meta.return.type',\n 'support.type.primitive',\n 'support.type.builtin',\n 'entity.name.type.primitive',\n 'keyword.type',\n ],\n settings: { foreground: palette.typeAnnotation },\n },\n\n // typeof keyof infer satisfies is\n {\n scope: [\n 'keyword.operator.expression.typeof',\n 'keyword.operator.expression.keyof',\n 'keyword.operator.expression.infer',\n 'keyword.operator.expression.satisfies',\n 'keyword.operator.expression.is',\n 'keyword.operator.type.annotation',\n ],\n settings: { foreground: palette.typeClass, fontStyle: 'bold' },\n },\n\n // Generic type params <T>\n {\n scope: [\n 'entity.name.type.type-parameter',\n 'variable.type.type-parameter',\n 'meta.type.parameters entity.name.type',\n ],\n settings: { foreground: palette.typeParam },\n },\n\n // Enum members\n {\n scope: ['variable.other.enummember', 'constant.other.enum', 'meta.enum variable'],\n settings: { foreground: palette.enumMember },\n },\n\n // Namespaces / modules\n {\n scope: [\n 'entity.name.namespace',\n 'entity.name.module',\n 'entity.name.section',\n 'storage.type.namespace',\n 'storage.type.module',\n ],\n settings: { foreground: palette.namespace },\n },\n\n // Decorators (all languages)\n {\n scope: [\n 'meta.decorator',\n 'meta.decorator punctuation.decorator',\n 'entity.name.function.decorator',\n 'punctuation.decorator',\n 'storage.type.annotation',\n ],\n settings: { foreground: palette.decorator, fontStyle: 'bold' },\n },\n\n // Variables\n {\n scope: [\n 'variable',\n 'variable.other',\n 'variable.other.readwrite',\n 'variable.other.constant',\n 'variable.other.global',\n 'variable.other.local',\n ],\n settings: { foreground: palette.variable },\n },\n\n // Parameters\n {\n scope: [\n 'variable.parameter',\n 'variable.parameter.function',\n 'meta.function.parameters variable.parameter',\n 'meta.arrow.parameters variable.parameter',\n ],\n settings: { foreground: palette.parameter },\n },\n\n // Object properties\n {\n scope: [\n 'variable.other.property',\n 'variable.other.object.property',\n 'support.type.property-name',\n 'meta.object-literal.key',\n 'meta.object.key',\n ],\n settings: { foreground: palette.property },\n },\n\n // JSON keys\n {\n scope: [\n 'support.type.property-name.json',\n 'meta.mapping.key.json string',\n 'meta.structure.dictionary.key.json string',\n ],\n settings: { foreground: palette.jsonKey },\n },\n\n // YAML keys\n {\n scope: ['entity.name.tag.yaml', 'meta.mapping.key.yaml'],\n settings: { foreground: palette.yamlKey, fontStyle: 'bold' },\n },\n\n // Computed keys [key]\n {\n scope: ['meta.computed.key', 'meta.objectliteral meta.template.expression'],\n settings: { foreground: palette.computedKey },\n },\n\n // Commas , semicolons ; dots .\n {\n scope: [\n 'punctuation.terminator',\n 'punctuation.terminator.statement',\n 'punctuation.separator',\n 'punctuation.separator.comma',\n 'punctuation.separator.period',\n 'punctuation.separator.dot',\n 'punctuation.separator.namespace',\n 'punctuation.separator.continuation',\n 'punctuation.accessor',\n 'punctuation.accessor.dot',\n 'meta.delimiter.object.comma',\n 'meta.delimiter.array.comma',\n ],\n settings: { foreground: palette.punctuationLight },\n },\n\n // Colons :\n {\n scope: [\n 'punctuation.separator.key-value',\n 'punctuation.separator.colon',\n 'punctuation.separator.type-annotation',\n 'punctuation.separator.dictionary.key-value',\n 'punctuation.definition.binding-pattern.object',\n 'punctuation.separator.case-statements',\n ],\n settings: { foreground: palette.colon },\n },\n\n // Hash #\n {\n scope: [\n 'punctuation.definition.id.css',\n 'punctuation.definition.entity.css',\n 'punctuation.definition.hash',\n 'entity.other.attribute-name.id.css punctuation',\n 'punctuation.definition.interpolation.begin',\n 'punctuation.definition.interpolation.end',\n 'punctuation.definition.directive',\n 'punctuation.definition.preprocessor',\n 'comment.line.number-sign punctuation.definition.comment',\n ],\n settings: { foreground: palette.hash },\n },\n];\n\nexport const shikiTheme: ThemeRegistration = {\n name: 'shiki',\n settings,\n};\n"],"names":["v","token","palette","settings","shikiTheme"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sources":["../../lib/utilities/theme.ts"],"sourcesContent":["import { 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"],"names":["classNames","inputs","clsx","PRIMARY_HUE_PROPERTY","getThemeHue","setThemeHue","hue"],"mappings":"4BAGO,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"}
1
+ {"version":3,"file":"theme.js","sources":["../../lib/utilities/theme.ts"],"sourcesContent":["import { 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.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"],"names":["classNames","inputs","clsx","PRIMARY_HUE_PROPERTY","getThemeHue","setThemeHue","hue"],"mappings":"4BAGO,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"}