@cryptlex/web-components 6.6.16 → 6.6.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/alert.js +1 -1
- package/dist/components/alert.js.map +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/card.js +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/charts.js +1 -1
- package/dist/components/charts.js.map +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/code-block.js +1 -1
- package/dist/components/code-block.js.map +1 -1
- package/dist/components/data-table-filter.js +1 -1
- package/dist/components/data-table.js +1 -1
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/datefield.js +1 -1
- package/dist/components/datefield.js.map +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/duration-field.js +1 -1
- package/dist/components/duration-field.js.map +1 -1
- package/dist/components/form.d.ts +1 -1
- package/dist/components/form.js +1 -1
- package/dist/components/form.js.map +1 -1
- package/dist/components/id-search.js +1 -1
- package/dist/components/id-search.js.map +1 -1
- package/dist/components/list-box.js +1 -1
- package/dist/components/list-box.js.map +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/menu.js.map +1 -1
- package/dist/components/multi-select.js +1 -1
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/numberfield.js +1 -1
- package/dist/components/numberfield.js.map +1 -1
- package/dist/components/otpfield.js +1 -1
- package/dist/components/otpfield.js.map +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/searchfield.js +1 -1
- package/dist/components/searchfield.js.map +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/select.js.map +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/textfield.js +1 -1
- package/dist/components/textfield.js.map +1 -1
- package/dist/components/tooltip.d.ts +3 -3
- package/dist/components/tooltip.js +1 -1
- package/dist/components/tooltip.js.map +1 -1
- package/dist/utilities/form-hook.js +1 -1
- package/dist/utilities/form-hook.js.map +1 -1
- package/dist/utilities/shiki.js +1 -1
- package/dist/utilities/shiki.js.map +1 -1
- package/lib/index.css +13 -14
- package/lib/tokens.css +4 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{jsx as i,jsxs as a,Fragment as p}from"react/jsx-runtime";import{useId as g}from"react";import{Select as h,composeRenderProps as l,SelectValue as S,ListBox as x}from"react-aria-components";import{Button as N}from"./button.js";import{getFieldErrorMessage as b}from"../utilities/form.js";import{useFieldContext as B}from"../utilities/form-context.js";import{classNames as o}from"../utilities/theme.js";import{FormField as w}from"./form.js";import{IcDown as I}from"./icons.js";import{ListBoxItem as F,ListBoxHeader as v,ListBoxCollection as C}from"./list-box.js";import{Popover as L}from"./popover.js";import"class-variance-authority";import"./loader.js";import"clsx";import"@tanstack/react-form";const D=h,j=F,
|
|
1
|
+
"use client";import{jsx as i,jsxs as a,Fragment as p}from"react/jsx-runtime";import{useId as g}from"react";import{Select as h,composeRenderProps as l,SelectValue as S,ListBox as x}from"react-aria-components";import{Button as N}from"./button.js";import{getFieldErrorMessage as b}from"../utilities/form.js";import{useFieldContext as B}from"../utilities/form-context.js";import{classNames as o}from"../utilities/theme.js";import{FormField as w}from"./form.js";import{IcDown as I}from"./icons.js";import{ListBoxItem as F,ListBoxHeader as v,ListBoxCollection as C}from"./list-box.js";import{Popover as L}from"./popover.js";import"class-variance-authority";import"./loader.js";import"clsx";import"@tanstack/react-form";import"./card.js";const D=h,j=F,Y=v,Z=C,y=({className:r,...e})=>i(S,{className:l(r,t=>o("line-clamp-1 data-[placeholder]:text-muted-foreground","[&>[slot=description]]:hidden",t)),...e});function P({className:r,children:e,...t}){return i(N,{type:"button",...t,className:o("justify-between px-2",r),children:l(e,n=>a(p,{children:[i("span",{className:"inline-flex gap-1",children:n}),i(I,{"aria-hidden":"true"})]}))})}function V({className:r,...e}){return i(L,{className:l(r,t=>o("w-auto min-w-[--trigger-width]",t)),...e})}function q({className:r,...e}){return i(x,{className:l(r,t=>o("overflow-auto p-1 outline-none",t)),...e})}function H({label:r,description:e,errorMessage:t,children:n,className:d,requiredIndicator:m,items:u,...s}){const f=g(),c=s.id||f;return i("div",{className:o("group form-field",d),children:i(w,{label:r,description:e,errorMessage:t,requiredIndicator:m,htmlFor:c,children:a(D,{...s,children:[i(P,{className:"w-full",id:c,children:i(y,{className:"inline-flex gap-1 items-center"})}),i(V,{children:i(q,{items:u,children:n})})]})})})}function _({...r}){const e=B({disabled:r.isDisabled});return i(H,{requiredIndicator:e.isRequired,selectedKey:e.state.value,onSelectionChange:t=>e.handleChange(t.toString()),onBlur:e.handleBlur,errorMessage:b(e),...r,isDisabled:r.isDisabled||e.isSubmitting,children:t=>i(j,{id:t.id,children:t.label},t.id)})}export{Z as SelectCollection,Y as SelectHeader,j as SelectItem,V as SelectPopover,P as SelectTrigger,y as SelectValue,H as SingleSelect,_ as TfSingleSelect};
|
|
2
2
|
//# sourceMappingURL=select.js.map
|
|
@@ -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({ className, children, ...props }: React.ComponentProps<typeof Button>) {\n return (\n <Button type=\"button\" {...props} className={classNames('justify-between px-2', className)}>\n {composeRenderProps(children, children => (\n <>\n <span className=\"inline-flex gap-1\">{children}</span>\n <IcDown aria-hidden=\"true\" />\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}>\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","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":"
|
|
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({ className, children, ...props }: React.ComponentProps<typeof Button>) {\n return (\n <Button type=\"button\" {...props} className={classNames('justify-between px-2', className)}>\n {composeRenderProps(children, children => (\n <>\n <span className=\"inline-flex gap-1\">{children}</span>\n <IcDown aria-hidden=\"true\" />\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}>\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","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":"2tBAuBA,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,CAAE,UAAAN,EAAW,SAAAO,EAAU,GAAGN,GAA8C,CAClG,OACIC,EAACM,EAAA,CAAO,KAAK,SAAU,GAAGP,EAAO,UAAWI,EAAW,uBAAwBL,CAAS,EACnF,SAAAI,EAAmBG,EAAUA,GAC1BE,EAAAC,EAAA,CACI,SAAA,CAAAR,EAAC,OAAA,CAAK,UAAU,oBAAqB,SAAAK,EAAS,EAC9CL,EAACS,EAAA,CAAO,cAAY,MAAA,CAAO,CAAA,CAAA,CAC/B,CACH,CAAA,CACL,CAER,CAEO,SAASC,EAAc,CAAE,UAAAZ,EAAW,GAAGC,GAA2B,CACrE,OACIC,EAACW,EAAA,CACG,UAAWT,EAAmBJ,EAAWA,GACrCK,EAAW,iCAAkCL,CAAS,CAAA,EAEzD,GAAGC,CAAA,CAAA,CAGhB,CAEA,SAASa,EAAgC,CAAE,UAAAd,EAAW,GAAGC,GAA8B,CACnF,OACIC,EAACa,EAAA,CACG,UAAWX,EAAmBJ,EAAWA,GACrCK,EAAW,iCAAkCL,CAAS,CAAA,EAEzD,GAAGC,CAAA,CAAA,CAGhB,CASO,SAASe,EAAqC,CACjD,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,SAAAZ,EACA,UAAAP,EACA,kBAAAoB,EACA,MAAAC,EACA,GAAGpB,CACP,EAAyB,CACrB,MAAMqB,EAAcC,EAAA,EACdC,EAAUvB,EAAM,IAAMqB,EAE5B,OACIpB,EAAC,OAAI,UAAWG,EAAW,mBAAoBL,CAAS,EACpD,WAACyB,EAAA,CAAgB,MAAAR,EAAO,YAAAC,EAAa,aAAAC,EAAc,kBAAAC,EAAmB,QAASI,EAC3E,SAAAf,EAAClB,EAAA,CAAS,GAAGU,EACT,SAAA,CAAAC,EAACI,EAAA,CAAc,UAAW,SAAU,GAAIkB,EACpC,SAAAtB,EAACH,EAAA,CAAY,UAAW,gCAAA,CAAkC,CAAA,CAC9D,IACCa,EAAA,CACG,SAAAV,EAACY,EAAA,CAAc,MAAAO,EAAe,SAAAd,EAAS,CAAA,CAC3C,CAAA,CAAA,CACJ,EACJ,EACJ,CAER,CAIO,SAASmB,EAAuC,CAAE,GAAGzB,GAAiC,CACzF,MAAM0B,EAAQC,EAAwB,CAAE,SAAU3B,EAAM,WAAY,EAEpE,OACIC,EAACc,EAAA,CACG,kBAAmBW,EAAM,WACzB,YAAaA,EAAM,MAAM,MACzB,kBAAmBE,GAAKF,EAAM,aAAaE,EAAG,UAAU,EACxD,OAAQF,EAAM,WACd,aAAcG,EAAqBH,CAAK,EACvC,GAAG1B,EACJ,WAAYA,EAAM,YAAc0B,EAAM,aAErC,SAAAI,KACItC,EAAA,CAAW,GAAIsC,EAAK,GAChB,SAAAA,EAAK,KAAA,EADoBA,EAAK,EAEnC,CAAA,CAAA,CAIhB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{jsx as a,Fragment as O,jsxs as S}from"react/jsx-runtime";import{createContext as k,use as _,useState as v,useCallback as x,useEffect as I,useMemo as D}from"react";import{Button as T}from"./button.js";import{DialogTrigger as z,DialogOverlay as B,DialogContent as E}from"./dialog.js";import{TooltipTrigger as G,Tooltip as K}from"./tooltip.js";import{classNames as i}from"../utilities/theme.js";import{useIsMobile as L}from"../utilities/use-mobile.js";import{IcMoreHorizontal as R,IcLeft as j,IcRight as A}from"./icons.js";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"clsx";
|
|
1
|
+
"use client";import{jsx as a,Fragment as O,jsxs as S}from"react/jsx-runtime";import{createContext as k,use as _,useState as v,useCallback as x,useEffect as I,useMemo as D}from"react";import{Button as T}from"./button.js";import{DialogTrigger as z,DialogOverlay as B,DialogContent as E}from"./dialog.js";import{TooltipTrigger as G,Tooltip as K}from"./tooltip.js";import{classNames as i}from"../utilities/theme.js";import{useIsMobile as L}from"../utilities/use-mobile.js";import{IcMoreHorizontal as R,IcLeft as j,IcRight as A}from"./icons.js";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"clsx";const H="/",N=k(null);function h(){const e=_(N);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}function ee({defaultOpen:e=!0,open:t,onOpenChange:n,className:l,style:d,children:r,...s}){const u=L(),[p,b]=v(!1),[M,y]=v(e),f=t??M,m=x(o=>{const c=typeof o=="function"?o(f):o;n?n(c):y(c)},[n,f]),g=x(()=>u?b(o=>!o):m(o=>!o),[u,m,b]);I(()=>{const o=c=>{c.key===H&&(c.metaKey||c.ctrlKey)&&(c.preventDefault(),g())};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[g]);const w=f?"expanded":"collapsed",C=D(()=>({state:w,open:f,setOpen:m,isMobile:u,openMobile:p,setOpenMobile:b,toggleSidebar:g}),[w,f,m,u,p,b,g]);return a(N.Provider,{value:C,children:a("div",{className:i("group/sidebar-wrapper flex w-full has-[[data-variant=inset]]:bg-elevation-1",l),...s,children:r})})}function te({side:e="left",variant:t="sidebar",collapsible:n="offcanvas",className:l,children:d,...r}){const{isMobile:s,state:u,openMobile:p,setOpenMobile:b}=h();return n==="none"?a("div",{className:i("flex h-full w-[--sidebar-width] flex-col bg-elevation-1 text-foreground",l),...r,children:d}):s?a(z,{isOpen:p,onOpenChange:b,...r,children:a(B,{children:a(E,{"data-sidebar":"sidebar","data-mobile":"true",className:"w-[--sidebar-width] max-h-svh overflow-auto p-0 [&>button]:hidden",side:"left",children:()=>a(O,{children:d})})})}):S("div",{className:"group peer hidden text-foreground md:block","data-state":u,"data-collapsible":u==="collapsed"?n:"","data-variant":t,"data-side":e,children:[a("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",t==="floating"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]":"group-data-[collapsible=icon]:w-[--sidebar-width-icon]")}),a("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)]",t==="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",l),...r,children:a("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:d})})]})}function ae({className:e,onClick:t,...n}){const{toggleSidebar:l,open:d,isMobile:r}=h();return a(T,{"data-sidebar":"trigger",variant:"neutral",size:"icon",className:"rounded-full",onClick:s=>{t?.(s),l()},...n,children:r?a(R,{}):d?a(j,{}):a(A,{})})}function ie({className:e,...t}){return a("div",{"data-sidebar":"content",className:i("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",e),...t})}function ne({className:e,...t}){return a("div",{"data-sidebar":"group",className:i("relative flex w-full min-w-0 flex-col",e),...t})}function oe({className:e,...t}){return a("div",{"data-sidebar":"group-label",className:i("flex h-input shrink-0 items-center px-2 body-sm font-medium text-sidebar-foreground/70 outline-none ring-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-input group-data-[collapsible=icon]:opacity-0",e),...t})}function re({className:e,...t}){return a("div",{"data-sidebar":"group-content",className:i("w-full body-sm",e),...t})}function le({className:e,...t}){return a("ul",{"data-sidebar":"menu",className:i("flex w-full min-w-0 flex-col",e),...t})}function de({className:e,...t}){return a("li",{"data-sidebar":"menu-item",className:i("group/menu-item relative list-none",e),...t})}function se({className:e,...t}){return a("button",{"data-sidebar":"menu-action",className:i("absolute top-0 right-0 btn btn-ghost h-input","group-data-[collapsible=icon]:hidden",e),...t})}function ue({className:e,number:t,...n}){return a("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),...n,children:new Intl.NumberFormat(navigator.language,{useGrouping:!0}).format(t)})}function ce({className:e,...t}){return a("ul",{"data-sidebar":"menu-sub",className:i("ms-2 flex min-w-0 flex-col border-l border-border","group-data-[collapsible=icon]:hidden",e),...t})}function be({className:e,...t}){return a("li",{className:i("list-none ms-0",e),...t})}function fe({isActive:e=!1,tooltip:t,className:n,...l}){const{isMobile:d,state:r}=h(),s=a("button",{"data-sidebar":"menu-button",...e&&{"data-selected":!0},className:i("peer/menu-button group-has-[[data-sidebar=menu-action]]/menu-item:pr-input group-data-[collapsible=icon]:!size-icon group-data-[collapsible=icon]:!p-2 ","btn-tab rounded-none w-full",n),...l});return t?S(G,{children:[s,a(K,{hidden:r!=="collapsed"||d,...t})]}):s}function pe({isActive:e,className:t,...n}){return a("button",{"data-sidebar":"menu-sub-button","data-active":e,className:i("group-data-[collapsible=icon]:hidden","btn-tab rounded-none w-full",t),...n})}function me({className:e,...t}){return a("div",{className:i(e,"w-full overflow-auto"),...t})}function ge({className:e,...t}){return a("nav",{className:i("flex items-center h-header bg-elevation-1 sticky top-0 z-50 p-2 border-b",e),...t})}export{te as Sidebar,ie as SidebarContent,N as SidebarContext,ne as SidebarGroup,re as SidebarGroupContent,oe as SidebarGroupLabel,le as SidebarMenu,se as SidebarMenuAction,ue as SidebarMenuBadge,fe as SidebarMenuButton,de as SidebarMenuItem,ce as SidebarMenuSub,pe as SidebarMenuSubButton,be as SidebarMenuSubItem,me as SidebarOutlet,ge as SidebarOutletHeader,ee as SidebarProvider,ae as SidebarTrigger,h 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, IcMoreHorizontal, IcRight } 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-2',\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 = 'offcanvas',\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-2 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\"\n side=\"left\"\n >\n {() => <>{children}</>}\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-2 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-2 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\"\n className={'rounded-full'}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n {/* Use transition to rotate a single icon */}\n {isMobile ? <IcMoreHorizontal /> : 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(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n className\n )}\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('relative flex w-full min-w-0 flex-col', className)}\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 px-2 body-sm font-medium text-sidebar-foreground/70 outline-none ring-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-input 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 <ul data-sidebar=\"menu\" className={classNames('flex w-full min-w-0 flex-col', className)} {...props} />;\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('group/menu-item relative list-none', className)}\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(\n 'ms-2 flex min-w-0 flex-col border-l border-border',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\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\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 tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n /** Mark as currently active page */\n isActive?: boolean;\n /** Tooltip when sidebar is collapsed */\n tooltip?: React.ComponentProps<typeof Tooltip>;\n}) {\n const { isMobile, state } = useSidebar();\n\n const button = (\n <button\n data-sidebar=\"menu-button\"\n {...(isActive && { 'data-selected': true })}\n className={classNames(\n 'peer/menu-button group-has-[[data-sidebar=menu-action]]/menu-item:pr-input group-data-[collapsible=icon]:!size-icon group-data-[collapsible=icon]:!p-2 ',\n 'btn-tab rounded-none w-full',\n className\n )}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n return (\n <TooltipTrigger>\n {button}\n <Tooltip hidden={state !== 'collapsed' || isMobile} {...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('group-data-[collapsible=icon]:hidden', 'btn-tab rounded-none w-full', className)}\n {...props}\n />\n );\n}\n\n/**\n * The main content area next to the sidebar\n */\nexport function SidebarOutlet({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames(className, 'w-full overflow-auto')} {...props} />;\n}\n\n/**\n *\n * @example Basic usage\n * ```tsx\n * <SidebarOutlet>\n * <SidebarOutletHeader><SidebarTrigger/></SidebarOutletHeader>\n * </SidebarOutlet>\n * ```\n */\nexport function SidebarOutletHeader({ className, ...props }: React.ComponentProps<'nav'>) {\n return (\n <nav\n className={classNames(\n 'flex items-center h-header bg-elevation-2 sticky top-0 z-50 p-2 border-b',\n className\n )}\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","IcMoreHorizontal","IcLeft","IcRight","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupContent","SidebarMenu","SidebarMenuItem","SidebarMenuAction","SidebarMenuBadge","number","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuButton","isActive","tooltip","button","TooltipTrigger","Tooltip","SidebarMenuSubButton","SidebarOutlet","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, IcMoreHorizontal, IcRight } 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 = 'offcanvas',\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\"\n side=\"left\"\n >\n {() => <>{children}</>}\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\"\n className={'rounded-full'}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n {/* Use transition to rotate a single icon */}\n {isMobile ? <IcMoreHorizontal /> : 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(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n className\n )}\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('relative flex w-full min-w-0 flex-col', className)}\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 px-2 body-sm font-medium text-sidebar-foreground/70 outline-none ring-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-icon [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-input 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 <ul data-sidebar=\"menu\" className={classNames('flex w-full min-w-0 flex-col', className)} {...props} />;\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('group/menu-item relative list-none', className)}\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(\n 'ms-2 flex min-w-0 flex-col border-l border-border',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\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\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 tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n /** Mark as currently active page */\n isActive?: boolean;\n /** Tooltip when sidebar is collapsed */\n tooltip?: React.ComponentProps<typeof Tooltip>;\n}) {\n const { isMobile, state } = useSidebar();\n\n const button = (\n <button\n data-sidebar=\"menu-button\"\n {...(isActive && { 'data-selected': true })}\n className={classNames(\n 'peer/menu-button group-has-[[data-sidebar=menu-action]]/menu-item:pr-input group-data-[collapsible=icon]:!size-icon group-data-[collapsible=icon]:!p-2 ',\n 'btn-tab rounded-none w-full',\n className\n )}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n return (\n <TooltipTrigger>\n {button}\n <Tooltip hidden={state !== 'collapsed' || isMobile} {...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('group-data-[collapsible=icon]:hidden', 'btn-tab rounded-none w-full', className)}\n {...props}\n />\n );\n}\n\n/**\n * The main content area next to the sidebar\n */\nexport function SidebarOutlet({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={classNames(className, 'w-full overflow-auto')} {...props} />;\n}\n\n/**\n *\n * @example Basic usage\n * ```tsx\n * <SidebarOutlet>\n * <SidebarOutletHeader><SidebarTrigger/></SidebarOutletHeader>\n * </SidebarOutlet>\n * ```\n */\nexport function SidebarOutletHeader({ className, ...props }: React.ComponentProps<'nav'>) {\n return (\n <nav\n className={classNames(\n 'flex items-center h-header bg-elevation-1 sticky top-0 z-50 p-2 border-b',\n className\n )}\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","IcMoreHorizontal","IcLeft","IcRight","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupContent","SidebarMenu","SidebarMenuItem","SidebarMenuAction","SidebarMenuBadge","number","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuButton","isActive","tooltip","button","TooltipTrigger","Tooltip","SidebarMenuSubButton","SidebarOutlet","SidebarOutletHeader"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{jsx as r,jsxs as x}from"react/jsx-runtime";import{TextField as b,composeRenderProps as o,TextArea as g,Input as F}from"react-aria-components";import{getFieldErrorMessage as
|
|
1
|
+
"use client";import{jsx as r,jsxs as x}from"react/jsx-runtime";import{TextField as b,composeRenderProps as o,TextArea as g,Input as F}from"react-aria-components";import{getFieldErrorMessage as m}from"../utilities/form.js";import{useFieldContext as T}from"../utilities/form-context.js";import{classNames as l}from"../utilities/theme.js";import{FormField as v,fieldGroupVariants as d}from"./form.js";import{Kbd as N}from"./kbd.js";import"@tanstack/react-form";import"react";import"clsx";import"class-variance-authority";import"./card.js";import"./icons.js";const I=b;function A({className:i,kbd:t,...e}){const a=!!t,s=e.disabled;return x("div",{className:"relative",children:[r(F,{className:o(i,n=>l(d(),"file:border-0 file:bg-transparent file:body-sm file:font-medium","disabled-muted","focus-ring",a&&"pr-10",n)),...e}),a&&r("div",{className:"absolute right-2 top-1/2 -translate-y-1/2 pointer-events-none flex items-center","aria-hidden":!0,children:r(N,{value:t,isDisabled:s})})]})}function $({className:i,...t}){return r(g,{className:o(i,e=>l(d(),"h-full min-h-32",e)),...t})}function j({label:i,description:t,errorMessage:e,textArea:a,className:s,inputClassName:n,requiredIndicator:u,kbd:c,isDisabled:f,...p}){return r(I,{className:o(s,h=>l("group form-field",h)),isDisabled:f,...p,children:r(v,{label:i,description:t,errorMessage:e,requiredIndicator:u,children:a?r($,{className:n}):r(A,{className:n,kbd:c})})})}function w({isDisabled:i,...t}){const e=T({disabled:i});return r(j,{isDisabled:i||e.isSubmitting,value:e.state.value,id:e.name,name:e.name,onBlur:e.handleBlur,onChange:e.handleChange,isInvalid:!!m(e),errorMessage:m(e),requiredIndicator:e.isRequired,...t})}export{j as TextField,w as TfTextField};
|
|
2
2
|
//# sourceMappingURL=textfield.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textfield.js","sources":["../../lib/components/textfield.tsx"],"sourcesContent":["'use client';\nimport {\n Input as AriaInput,\n InputProps as AriaInputProps,\n TextArea as AriaTextArea,\n TextAreaProps as AriaTextAreaProps,\n TextField as AriaTextField,\n TextFieldProps as AriaTextFieldProps,\n composeRenderProps,\n} from 'react-aria-components';\nimport { getFieldErrorMessage } from '../utilities/form';\nimport { useFieldContext } from '../utilities/form-context';\nimport { classNames } from '../utilities/theme';\nimport { fieldGroupVariants, FormField, type FormFieldProps } from './form';\nimport { Kbd } from './kbd';\n\nconst ATextField = AriaTextField;\n\ninterface InputProps extends AriaInputProps {\n kbd?: string | string[];\n}\n\nfunction Input({ className, kbd, ...props }: InputProps) {\n const hasKbd = !!kbd;\n const isDisabled = props.disabled;\n return (\n <div className=\"relative\">\n <AriaInput\n className={composeRenderProps(className, className =>\n classNames(\n fieldGroupVariants(),\n 'file:border-0 file:bg-transparent file:body-sm file:font-medium',\n /* Disabled */\n 'disabled-muted',\n /* Focused */\n 'focus-ring',\n hasKbd && 'pr-10',\n className\n )\n )}\n {...props}\n />\n\n {hasKbd && (\n <div\n className=\"absolute right-2 top-1/2 -translate-y-1/2 pointer-events-none flex items-center\"\n aria-hidden={true}\n >\n <Kbd value={kbd} isDisabled={isDisabled} />\n </div>\n )}\n </div>\n );\n}\n\nfunction TextArea({ className, ...props }: AriaTextAreaProps) {\n return (\n <AriaTextArea\n className={composeRenderProps(className, className =>\n classNames(fieldGroupVariants(), 'h-full min-h-32', className)\n )}\n {...props}\n />\n );\n}\n\nexport interface TextFieldProps extends AriaTextFieldProps, FormFieldProps {\n textArea?: boolean;\n inputClassName?: string;\n kbd?: string | string[];\n}\n\nexport function TextField({\n label,\n description,\n errorMessage,\n textArea,\n className,\n inputClassName,\n requiredIndicator,\n kbd,\n isDisabled,\n ...props\n}: TextFieldProps) {\n return (\n <ATextField\n className={composeRenderProps(className, className => classNames('group form-field', className))}\n isDisabled={isDisabled}\n {...props}\n >\n <FormField {...{ label, description, errorMessage, requiredIndicator }}>\n {textArea ? <TextArea className={inputClassName} /> : <Input className={inputClassName} kbd={kbd} />}\n </FormField>\n </ATextField>\n );\n}\n\nexport function TfTextField({\n isDisabled,\n ...props\n}: Omit<React.ComponentProps<typeof TextField>, 'onBlur' | 'onChange'>) {\n const field = useFieldContext<string>({ disabled: isDisabled });\n\n return (\n <TextField\n isDisabled={isDisabled || field.isSubmitting}\n value={field.state.value}\n id={field.name}\n name={field.name}\n onBlur={field.handleBlur}\n onChange={field.handleChange}\n isInvalid={!!getFieldErrorMessage(field)}\n errorMessage={getFieldErrorMessage(field)}\n requiredIndicator={field.isRequired}\n {...props}\n />\n );\n}\n"],"names":["ATextField","AriaTextField","Input","className","kbd","props","hasKbd","isDisabled","jsxs","jsx","AriaInput","composeRenderProps","classNames","fieldGroupVariants","Kbd","TextArea","AriaTextArea","TextField","label","description","errorMessage","textArea","inputClassName","requiredIndicator","FormField","TfTextField","field","useFieldContext","getFieldErrorMessage"],"mappings":"
|
|
1
|
+
{"version":3,"file":"textfield.js","sources":["../../lib/components/textfield.tsx"],"sourcesContent":["'use client';\nimport {\n Input as AriaInput,\n InputProps as AriaInputProps,\n TextArea as AriaTextArea,\n TextAreaProps as AriaTextAreaProps,\n TextField as AriaTextField,\n TextFieldProps as AriaTextFieldProps,\n composeRenderProps,\n} from 'react-aria-components';\nimport { getFieldErrorMessage } from '../utilities/form';\nimport { useFieldContext } from '../utilities/form-context';\nimport { classNames } from '../utilities/theme';\nimport { fieldGroupVariants, FormField, type FormFieldProps } from './form';\nimport { Kbd } from './kbd';\n\nconst ATextField = AriaTextField;\n\ninterface InputProps extends AriaInputProps {\n kbd?: string | string[];\n}\n\nfunction Input({ className, kbd, ...props }: InputProps) {\n const hasKbd = !!kbd;\n const isDisabled = props.disabled;\n return (\n <div className=\"relative\">\n <AriaInput\n className={composeRenderProps(className, className =>\n classNames(\n fieldGroupVariants(),\n 'file:border-0 file:bg-transparent file:body-sm file:font-medium',\n /* Disabled */\n 'disabled-muted',\n /* Focused */\n 'focus-ring',\n hasKbd && 'pr-10',\n className\n )\n )}\n {...props}\n />\n\n {hasKbd && (\n <div\n className=\"absolute right-2 top-1/2 -translate-y-1/2 pointer-events-none flex items-center\"\n aria-hidden={true}\n >\n <Kbd value={kbd} isDisabled={isDisabled} />\n </div>\n )}\n </div>\n );\n}\n\nfunction TextArea({ className, ...props }: AriaTextAreaProps) {\n return (\n <AriaTextArea\n className={composeRenderProps(className, className =>\n classNames(fieldGroupVariants(), 'h-full min-h-32', className)\n )}\n {...props}\n />\n );\n}\n\nexport interface TextFieldProps extends AriaTextFieldProps, FormFieldProps {\n textArea?: boolean;\n inputClassName?: string;\n kbd?: string | string[];\n}\n\nexport function TextField({\n label,\n description,\n errorMessage,\n textArea,\n className,\n inputClassName,\n requiredIndicator,\n kbd,\n isDisabled,\n ...props\n}: TextFieldProps) {\n return (\n <ATextField\n className={composeRenderProps(className, className => classNames('group form-field', className))}\n isDisabled={isDisabled}\n {...props}\n >\n <FormField {...{ label, description, errorMessage, requiredIndicator }}>\n {textArea ? <TextArea className={inputClassName} /> : <Input className={inputClassName} kbd={kbd} />}\n </FormField>\n </ATextField>\n );\n}\n\nexport function TfTextField({\n isDisabled,\n ...props\n}: Omit<React.ComponentProps<typeof TextField>, 'onBlur' | 'onChange'>) {\n const field = useFieldContext<string>({ disabled: isDisabled });\n\n return (\n <TextField\n isDisabled={isDisabled || field.isSubmitting}\n value={field.state.value}\n id={field.name}\n name={field.name}\n onBlur={field.handleBlur}\n onChange={field.handleChange}\n isInvalid={!!getFieldErrorMessage(field)}\n errorMessage={getFieldErrorMessage(field)}\n requiredIndicator={field.isRequired}\n {...props}\n />\n );\n}\n"],"names":["ATextField","AriaTextField","Input","className","kbd","props","hasKbd","isDisabled","jsxs","jsx","AriaInput","composeRenderProps","classNames","fieldGroupVariants","Kbd","TextArea","AriaTextArea","TextField","label","description","errorMessage","textArea","inputClassName","requiredIndicator","FormField","TfTextField","field","useFieldContext","getFieldErrorMessage"],"mappings":"2iBAgBA,MAAMA,EAAaC,EAMnB,SAASC,EAAM,CAAE,UAAAC,EAAW,IAAAC,EAAK,GAAGC,GAAqB,CACrD,MAAMC,EAAS,CAAC,CAACF,EACXG,EAAaF,EAAM,SACzB,OACIG,EAAC,MAAA,CAAI,UAAU,WACX,SAAA,CAAAC,EAACC,EAAA,CACG,UAAWC,EAAmBR,EAAWA,GACrCS,EACIC,EAAA,EACA,kEAEA,iBAEA,aACAP,GAAU,QACVH,CAAA,CACJ,EAEH,GAAGE,CAAA,CAAA,EAGPC,GACGG,EAAC,MAAA,CACG,UAAU,kFACV,cAAa,GAEb,SAAAA,EAACK,EAAA,CAAI,MAAOV,EAAK,WAAAG,CAAA,CAAwB,CAAA,CAAA,CAC7C,EAER,CAER,CAEA,SAASQ,EAAS,CAAE,UAAAZ,EAAW,GAAGE,GAA4B,CAC1D,OACII,EAACO,EAAA,CACG,UAAWL,EAAmBR,EAAWA,GACrCS,EAAWC,EAAA,EAAsB,kBAAmBV,CAAS,CAAA,EAEhE,GAAGE,CAAA,CAAA,CAGhB,CAQO,SAASY,EAAU,CACtB,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,SAAAC,EACA,UAAAlB,EACA,eAAAmB,EACA,kBAAAC,EACA,IAAAnB,EACA,WAAAG,EACA,GAAGF,CACP,EAAmB,CACf,OACII,EAACT,EAAA,CACG,UAAWW,EAAmBR,EAAWA,GAAaS,EAAW,mBAAoBT,CAAS,CAAC,EAC/F,WAAAI,EACC,GAAGF,EAEJ,SAAAI,EAACe,GAAgB,MAAAN,EAAO,YAAAC,EAAa,aAAAC,EAAc,kBAAAG,EAC9C,SAAAF,IAAYN,EAAA,CAAS,UAAWO,EAAgB,EAAKb,EAACP,GAAM,UAAWoB,EAAgB,IAAAlB,EAAU,CAAA,CACtG,CAAA,CAAA,CAGZ,CAEO,SAASqB,EAAY,CACxB,WAAAlB,EACA,GAAGF,CACP,EAAwE,CACpE,MAAMqB,EAAQC,EAAwB,CAAE,SAAUpB,EAAY,EAE9D,OACIE,EAACQ,EAAA,CACG,WAAYV,GAAcmB,EAAM,aAChC,MAAOA,EAAM,MAAM,MACnB,GAAIA,EAAM,KACV,KAAMA,EAAM,KACZ,OAAQA,EAAM,WACd,SAAUA,EAAM,aAChB,UAAW,CAAC,CAACE,EAAqBF,CAAK,EACvC,aAAcE,EAAqBF,CAAK,EACxC,kBAAmBA,EAAM,WACxB,GAAGrB,CAAA,CAAA,CAGhB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
declare
|
|
3
|
-
declare function Tooltip({ className, offset, ...props }: React.ComponentProps<typeof
|
|
1
|
+
import { Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from 'react-aria-components';
|
|
2
|
+
declare function TooltipTrigger({ delay, closeDelay, ...props }: React.ComponentProps<typeof AriaTooltipTrigger>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare function Tooltip({ className, offset, ...props }: React.ComponentProps<typeof AriaTooltip>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
export { Tooltip, TooltipTrigger };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
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};
|
|
2
2
|
//# sourceMappingURL=tooltip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sources":["../../lib/components/tooltip.tsx"],"sourcesContent":["import { composeRenderProps
|
|
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,2 +1,2 @@
|
|
|
1
|
-
import{createFormHook as o}from"@tanstack/react-form";import{formOptions as
|
|
1
|
+
import{createFormHook as o}from"@tanstack/react-form";import{formOptions as z,revalidateLogic as D}from"@tanstack/react-form";import{Button as r}from"../components/button.js";import{TfCheckbox as t}from"../components/checkbox.js";import{TfMultiSelect as m}from"../components/multi-select.js";import{TfNumberField as i}from"../components/numberfield.js";import{TfSingleSelect as p}from"../components/select.js";import{TfTextField as e}from"../components/textfield.js";import{formContext as f,fieldContext as l}from"./form-context.js";import"react/jsx-runtime";import"class-variance-authority";import"react-aria-components";import"./theme.js";import"clsx";import"../components/loader.js";import"../components/icons.js";import"react";import"../components/form.js";import"../components/card.js";import"../components/menu.js";import"../components/list-box.js";import"./form.js";import"../components/popover.js";import"../components/kbd.js";const{useAppForm:N,withForm:O,withFieldGroup:j}=o({fieldComponents:{TfTextField:e,TfNumberField:i,TfMultiSelect:m,TfSingleSelect:p,TfCheckbox:t},formComponents:{Button:r},fieldContext:l,formContext:f});export{z as formOptions,D as revalidateLogic,N as useAppForm,j as withFieldGroup,O as withForm};
|
|
2
2
|
//# sourceMappingURL=form-hook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-hook.js","sources":["../../lib/utilities/form-hook.tsx"],"sourcesContent":["import { createFormHook, formOptions, revalidateLogic } from '@tanstack/react-form';\nimport { Button } from '../components/button';\nimport { TfCheckbox } from '../components/checkbox';\nimport { TfMultiSelect } from '../components/multi-select';\nimport { TfNumberField } from '../components/numberfield';\nimport { TfSingleSelect } from '../components/select';\nimport { TfTextField } from '../components/textfield';\nimport { fieldContext, formContext } from '../utilities/form-context';\n\n/** Don't put this in the same file as form-context.tsx, this causes circular dependencies. */\n/** TODO, lazy loading when fieldComponents are large */\n/**\n * Builder for form logic and user interfaces\n */\n/**\n * A small builder that wires the form library to the concrete UI components used across the app.\n * `createFormHook` returns a `useAppForm` hook which contains standard wiring and default components for\n * fields and form-level controls.\n *\n * It exports only the `useAppForm` hook. Consumers (forms in codebase) call `useAppForm` to access the form API and default components.\n */\nexport const { useAppForm, withForm, withFieldGroup } = createFormHook({\n fieldComponents: {\n TfTextField,\n TfNumberField,\n TfMultiSelect,\n TfSingleSelect,\n TfCheckbox,\n },\n formComponents: {\n Button,\n },\n fieldContext,\n formContext,\n});\n\nexport { formOptions, revalidateLogic };\n"],"names":["useAppForm","withForm","withFieldGroup","createFormHook","TfTextField","TfNumberField","TfMultiSelect","TfSingleSelect","TfCheckbox","Button","fieldContext","formContext"],"mappings":"
|
|
1
|
+
{"version":3,"file":"form-hook.js","sources":["../../lib/utilities/form-hook.tsx"],"sourcesContent":["import { createFormHook, formOptions, revalidateLogic } from '@tanstack/react-form';\nimport { Button } from '../components/button';\nimport { TfCheckbox } from '../components/checkbox';\nimport { TfMultiSelect } from '../components/multi-select';\nimport { TfNumberField } from '../components/numberfield';\nimport { TfSingleSelect } from '../components/select';\nimport { TfTextField } from '../components/textfield';\nimport { fieldContext, formContext } from '../utilities/form-context';\n\n/** Don't put this in the same file as form-context.tsx, this causes circular dependencies. */\n/** TODO, lazy loading when fieldComponents are large */\n/**\n * Builder for form logic and user interfaces\n */\n/**\n * A small builder that wires the form library to the concrete UI components used across the app.\n * `createFormHook` returns a `useAppForm` hook which contains standard wiring and default components for\n * fields and form-level controls.\n *\n * It exports only the `useAppForm` hook. Consumers (forms in codebase) call `useAppForm` to access the form API and default components.\n */\nexport const { useAppForm, withForm, withFieldGroup } = createFormHook({\n fieldComponents: {\n TfTextField,\n TfNumberField,\n TfMultiSelect,\n TfSingleSelect,\n TfCheckbox,\n },\n formComponents: {\n Button,\n },\n fieldContext,\n formContext,\n});\n\nexport { formOptions, revalidateLogic };\n"],"names":["useAppForm","withForm","withFieldGroup","createFormHook","TfTextField","TfNumberField","TfMultiSelect","TfSingleSelect","TfCheckbox","Button","fieldContext","formContext"],"mappings":"u6BAqBO,KAAM,CAAE,WAAAA,EAAY,SAAAC,EAAU,eAAAC,CAAA,EAAmBC,EAAe,CACnE,gBAAiB,CACb,YAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,WAAAC,CAAA,EAEJ,eAAgB,CACZ,OAAAC,CAAA,EAEJ,aAAAC,EACA,YAAAC,CACJ,CAAC"}
|
package/dist/utilities/shiki.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=o=>`var(--color-${o})`,t={bg:e("elevation-
|
|
1
|
+
const e=o=>`var(--color-${o})`,t={bg:e("elevation-1"),fg:e("neutral-9"),comment:e("neutral-5"),keyword:e("primary-9"),function:e("primary-8"),importExport:e("primary-8"),punctuationLight:e("primary-8"),thisSuper:e("primary-7"),functionCall:e("primary-7"),builtinFunction:e("primary-6"),typeClass:e("secondary-9"),number:e("secondary-8"),constant:e("secondary-8"),enumMember:e("secondary-8"),colon:e("secondary-8"),typeAnnotation:e("secondary-7"),namespace:e("secondary-7"),property:e("secondary-6"),typeParam:e("secondary-6"),stringQuote:e("success-10"),string:e("success-9"),stringTemplate:e("success-8"),templateExprDelim:e("success-7"),regex:e("destructive-9"),invalid:e("destructive-9"),regexCharClass:e("destructive-8"),decorator:e("destructive-7"),hash:e("destructive-7"),computedKey:e("destructive-7"),regexQuantifier:e("destructive-7"),regexFlag:e("destructive-6"),deprecated:e("destructive-6"),variable:e("neutral-9"),operator:e("neutral-9"),parameter:e("neutral-8"),arrow:e("neutral-8"),spreadRest:e("neutral-8")},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,fontStyle:"italic"}},{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.operator,fontStyle:"bold"}},{scope:["keyword.operator.arrow","keyword.operator.scope-resolution","punctuation.separator.arrow","punctuation.definition.arrow"],settings:{foreground:t.arrow,fontStyle:"bold"}},{scope:["keyword.operator.spread","keyword.operator.rest","keyword.operator.optional-chaining","punctuation.accessor.optional"],settings:{foreground:t.spreadRest,fontStyle:"bold"}},{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 italic"}},{scope:["variable.language.this","variable.language.super","variable.language.self","variable.language.cls","variable.language.special"],settings:{foreground:t.thisSuper,fontStyle:"bold italic"}},{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,fontStyle:"bold"}},{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,fontStyle:"italic"}},{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,fontStyle:"bold"}},{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,fontStyle:"bold italic"}},{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,fontStyle:"bold"}},{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,fontStyle:"bold"}},{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 italic"}},{scope:["entity.name.type.type-parameter","variable.type.type-parameter","meta.type.parameters entity.name.type"],settings:{foreground:t.typeParam,fontStyle:"italic"}},{scope:["variable.other.enummember","constant.other.enum","meta.enum variable"],settings:{foreground:t.enumMember,fontStyle:"bold"}},{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 italic"}},{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:["meta.computed.key","meta.objectliteral meta.template.expression"],settings:{foreground:t.computedKey,fontStyle:"bold"}},{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,fontStyle:"bold"}},{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,fontStyle:"bold"}},{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,fontStyle:"bold"}},{scope:["invalid","invalid.illegal"],settings:{foreground:t.invalid,fontStyle:"bold underline"}},{scope:["invalid.deprecated"],settings:{foreground:t.deprecated,fontStyle:"strikethrough"}}],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-2'),\n fg: v('neutral-9'),\n comment: v('neutral-5'),\n keyword: v('primary-9'),\n function: v('primary-8'),\n tag: v('primary-8'),\n importExport: v('primary-8'),\n punctuationLight: v('primary-8'),\n tagBracket: v('primary-7'),\n thisSuper: v('primary-7'),\n cssProperty: v('primary-7'),\n cssAtRule: v('primary-7'),\n shellBuiltin: v('primary-7'),\n functionCall: v('primary-7'),\n jsonKey: v('primary-7'),\n yamlKey: v('primary-7'),\n mdHeading: v('primary-9'),\n mdLink: v('primary-7'),\n builtinFunction: v('primary-6'),\n goBuiltin: v('primary-6'),\n typeClass: v('secondary-9'),\n cssIdSelector: v('secondary-9'),\n mdBold: v('secondary-9'),\n number: v('secondary-8'),\n constant: v('secondary-8'),\n enumMember: v('secondary-8'),\n cssSelector: v('secondary-8'),\n colon: v('secondary-8'),\n typeAnnotation: v('secondary-7'),\n namespace: v('secondary-7'),\n cssPseudo: v('secondary-7'),\n yamlTag: v('secondary-7'),\n rustLifetime: v('secondary-7'),\n shellVar: v('secondary-7'),\n pythonMagic: v('secondary-7'),\n rustMacro: v('secondary-8'),\n scssMixin: v('secondary-8'),\n property: v('secondary-6'),\n typeParam: v('secondary-6'),\n attribute: v('secondary-6'),\n cssVariable: v('secondary-6'),\n mdBullet: v('secondary-6'),\n stringQuote: v('success-10'),\n string: v('success-9'),\n stringTemplate: v('success-8'),\n cssValue: v('success-8'),\n pythonFStr: v('success-8'),\n templateExprDelim: v('success-7'),\n cssUnit: v('success-7'),\n mdItalic: v('success-7'),\n regex: v('destructive-9'),\n invalid: v('destructive-9'),\n regexCharClass: v('destructive-8'),\n cssImportant: v('destructive-8'),\n decorator: v('destructive-7'),\n hash: v('destructive-7'),\n jsxExprDelim: v('destructive-7'),\n computedKey: v('destructive-7'),\n yamlAnchor: v('destructive-7'),\n shellFlag: v('destructive-7'),\n mdCode: v('destructive-7'),\n regexQuantifier: v('destructive-7'),\n regexFlag: v('destructive-6'),\n deprecated: v('destructive-6'),\n rustAttr: v('destructive-6'),\n yamlAlias: v('destructive-6'),\n variable: v('neutral-9'),\n operator: v('neutral-9'),\n parameter: v('neutral-8'),\n arrow: v('neutral-8'),\n spreadRest: v('neutral-8'),\n mdBlockquote: v('neutral-5'),\n mdHr: v('neutral-4'),\n} as const;\n\nconst settings: ThemeRegistration['settings'] = [\n { settings: { background: palette.bg, foreground: palette.fg } },\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, fontStyle: 'italic' },\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.operator, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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 italic' },\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 italic' },\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, fontStyle: 'bold' },\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, fontStyle: 'italic' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold italic' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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 italic' },\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, fontStyle: 'italic' },\n },\n\n // Enum members\n {\n scope: ['variable.other.enummember', 'constant.other.enum', 'meta.enum variable'],\n settings: { foreground: palette.enumMember, fontStyle: 'bold' },\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 italic' },\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 // Computed keys [key]\n {\n scope: ['meta.computed.key', 'meta.objectliteral meta.template.expression'],\n settings: { foreground: palette.computedKey, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold' },\n },\n\n // Errors\n\n {\n scope: ['invalid', 'invalid.illegal'],\n settings: { foreground: palette.invalid, fontStyle: 'bold underline' },\n },\n\n {\n scope: ['invalid.deprecated'],\n settings: { foreground: palette.deprecated, fontStyle: 'strikethrough' },\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('elevation-1'),\n fg: v('neutral-9'),\n comment: v('neutral-5'),\n keyword: v('primary-9'),\n function: v('primary-8'),\n tag: v('primary-8'),\n importExport: v('primary-8'),\n punctuationLight: v('primary-8'),\n tagBracket: v('primary-7'),\n thisSuper: v('primary-7'),\n cssProperty: v('primary-7'),\n cssAtRule: v('primary-7'),\n shellBuiltin: v('primary-7'),\n functionCall: v('primary-7'),\n jsonKey: v('primary-7'),\n yamlKey: v('primary-7'),\n mdHeading: v('primary-9'),\n mdLink: v('primary-7'),\n builtinFunction: v('primary-6'),\n goBuiltin: v('primary-6'),\n typeClass: v('secondary-9'),\n cssIdSelector: v('secondary-9'),\n mdBold: v('secondary-9'),\n number: v('secondary-8'),\n constant: v('secondary-8'),\n enumMember: v('secondary-8'),\n cssSelector: v('secondary-8'),\n colon: v('secondary-8'),\n typeAnnotation: v('secondary-7'),\n namespace: v('secondary-7'),\n cssPseudo: v('secondary-7'),\n yamlTag: v('secondary-7'),\n rustLifetime: v('secondary-7'),\n shellVar: v('secondary-7'),\n pythonMagic: v('secondary-7'),\n rustMacro: v('secondary-8'),\n scssMixin: v('secondary-8'),\n property: v('secondary-6'),\n typeParam: v('secondary-6'),\n attribute: v('secondary-6'),\n cssVariable: v('secondary-6'),\n mdBullet: v('secondary-6'),\n stringQuote: v('success-10'),\n string: v('success-9'),\n stringTemplate: v('success-8'),\n cssValue: v('success-8'),\n pythonFStr: v('success-8'),\n templateExprDelim: v('success-7'),\n cssUnit: v('success-7'),\n mdItalic: v('success-7'),\n regex: v('destructive-9'),\n invalid: v('destructive-9'),\n regexCharClass: v('destructive-8'),\n cssImportant: v('destructive-8'),\n decorator: v('destructive-7'),\n hash: v('destructive-7'),\n jsxExprDelim: v('destructive-7'),\n computedKey: v('destructive-7'),\n yamlAnchor: v('destructive-7'),\n shellFlag: v('destructive-7'),\n mdCode: v('destructive-7'),\n regexQuantifier: v('destructive-7'),\n regexFlag: v('destructive-6'),\n deprecated: v('destructive-6'),\n rustAttr: v('destructive-6'),\n yamlAlias: v('destructive-6'),\n variable: v('neutral-9'),\n operator: v('neutral-9'),\n parameter: v('neutral-8'),\n arrow: v('neutral-8'),\n spreadRest: v('neutral-8'),\n mdBlockquote: v('neutral-5'),\n mdHr: v('neutral-4'),\n} as const;\n\nconst settings: ThemeRegistration['settings'] = [\n { settings: { background: palette.bg, foreground: palette.fg } },\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, fontStyle: 'italic' },\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.operator, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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 italic' },\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 italic' },\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, fontStyle: 'bold' },\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, fontStyle: 'italic' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold italic' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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 italic' },\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, fontStyle: 'italic' },\n },\n\n // Enum members\n {\n scope: ['variable.other.enummember', 'constant.other.enum', 'meta.enum variable'],\n settings: { foreground: palette.enumMember, fontStyle: 'bold' },\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 italic' },\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 // Computed keys [key]\n {\n scope: ['meta.computed.key', 'meta.objectliteral meta.template.expression'],\n settings: { foreground: palette.computedKey, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold' },\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, fontStyle: 'bold' },\n },\n\n // Errors\n\n {\n scope: ['invalid', 'invalid.illegal'],\n settings: { foreground: palette.invalid, fontStyle: 'bold underline' },\n },\n\n {\n scope: ['invalid.deprecated'],\n settings: { foreground: palette.deprecated, fontStyle: 'strikethrough' },\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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"}
|
package/lib/index.css
CHANGED
|
@@ -63,10 +63,9 @@
|
|
|
63
63
|
--color-success-9: var(--success-9);
|
|
64
64
|
--color-success-10: var(--success-10);
|
|
65
65
|
|
|
66
|
-
--color-background: var(--color-neutral-3);
|
|
67
66
|
--color-foreground: var(--color-neutral-9);
|
|
68
|
-
--color-
|
|
69
|
-
--color-elevation-
|
|
67
|
+
--color-background: var(--color-neutral-2);
|
|
68
|
+
--color-elevation-1: var(--color-neutral-1);
|
|
70
69
|
|
|
71
70
|
--color-primary: var(--color-primary-7);
|
|
72
71
|
--color-primary-foreground: var(--color-primary-2);
|
|
@@ -85,11 +84,11 @@
|
|
|
85
84
|
--color-input: var(--color-border);
|
|
86
85
|
--color-ring: var(--color-neutral-5);
|
|
87
86
|
|
|
88
|
-
--color-chart-1: var(--color-primary-
|
|
89
|
-
--color-chart-2: var(--color-secondary-
|
|
90
|
-
--color-chart-3: var(--color-destructive-
|
|
91
|
-
--color-chart-4: var(--color-
|
|
92
|
-
--color-chart-5: var(--color-destructive-
|
|
87
|
+
--color-chart-1: var(--color-primary-6);
|
|
88
|
+
--color-chart-2: var(--color-secondary-6);
|
|
89
|
+
--color-chart-3: var(--color-destructive-6);
|
|
90
|
+
--color-chart-4: var(--color-secondary-6);
|
|
91
|
+
--color-chart-5: var(--color-destructive-6);
|
|
93
92
|
|
|
94
93
|
--spacing-input: --spacing(8);
|
|
95
94
|
--spacing-icon: --spacing(4);
|
|
@@ -284,7 +283,7 @@
|
|
|
284
283
|
@apply disabled:cursor-not-allowed disabled:opacity-70 aria-disabled:cursor-not-allowed aria-disabled:opacity-70 disabled:pointer-events-none;
|
|
285
284
|
}
|
|
286
285
|
@utility input {
|
|
287
|
-
@apply border border-input bg-elevation-
|
|
286
|
+
@apply border border-input bg-elevation-1 px-icon py-2 body-sm placeholder:text-muted-foreground disabled-muted focus-ring;
|
|
288
287
|
}
|
|
289
288
|
|
|
290
289
|
/* A base set of classes for elements that can be clicked */
|
|
@@ -302,19 +301,19 @@
|
|
|
302
301
|
@apply border border-destructive text-destructive-foreground bg-destructive;
|
|
303
302
|
}
|
|
304
303
|
@utility btn-destructive-neutral {
|
|
305
|
-
@apply text-destructive bg-elevation-
|
|
304
|
+
@apply text-destructive bg-elevation-1 border border-destructive;
|
|
306
305
|
}
|
|
307
306
|
@utility btn-secondary {
|
|
308
307
|
@apply border border-secondary text-secondary-foreground bg-secondary;
|
|
309
308
|
}
|
|
310
309
|
@utility btn-secondary-neutral {
|
|
311
|
-
@apply text-secondary bg-elevation-
|
|
310
|
+
@apply text-secondary bg-elevation-1 border border-secondary;
|
|
312
311
|
}
|
|
313
312
|
@utility btn-neutral {
|
|
314
|
-
@apply border border-input text-accent bg-elevation-
|
|
313
|
+
@apply border border-input text-accent bg-elevation-1;
|
|
315
314
|
}
|
|
316
315
|
@utility btn-primary-neutral {
|
|
317
|
-
@apply text-primary
|
|
316
|
+
@apply text-primary border border-primary bg-elevation-1;
|
|
318
317
|
}
|
|
319
318
|
@utility btn-ghost {
|
|
320
319
|
@apply bg-transparent focus:bg-accent/20 hover:bg-accent/20;
|
|
@@ -396,7 +395,7 @@
|
|
|
396
395
|
}
|
|
397
396
|
|
|
398
397
|
body {
|
|
399
|
-
@apply bg-
|
|
398
|
+
@apply bg-background text-foreground;
|
|
400
399
|
}
|
|
401
400
|
|
|
402
401
|
.tw-prose a {
|
package/lib/tokens.css
CHANGED
|
@@ -274,6 +274,10 @@
|
|
|
274
274
|
--neutral-10: var(--xneutral-10);
|
|
275
275
|
--neutral-c-start: 0;
|
|
276
276
|
--neutral-c-end: 0.0005;
|
|
277
|
+
--neutral-2: oklch(
|
|
278
|
+
calc(var(--lc-range-start) + (var(--lc-range-end) - var(--lc-range-start)) * (9.8 / 10))
|
|
279
|
+
calc(var(--neutral-c-end) * (9 / 10)) var(--neutral-hue)
|
|
280
|
+
);
|
|
277
281
|
}
|
|
278
282
|
@media (prefers-color-scheme: dark) {
|
|
279
283
|
:root {
|