neba 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/README.md +13 -7
  2. package/dist/components/accordion/Accordion.js +1 -1
  3. package/dist/components/alert/Alert.js +1 -1
  4. package/dist/components/anchor/Anchor.d.ts +73 -0
  5. package/dist/components/anchor/Anchor.js +1 -0
  6. package/dist/components/anchor/index.d.ts +2 -0
  7. package/dist/components/anchor/index.js +1 -0
  8. package/dist/components/animate-appear/AnimateAppear.js +1 -1
  9. package/dist/components/animate-blink/AnimateBlink.js +1 -1
  10. package/dist/components/animate-fade/AnimateFade.js +1 -1
  11. package/dist/components/animate-grow/AnimateGrow.js +1 -1
  12. package/dist/components/animate-headline/AnimateHeadline.js +1 -1
  13. package/dist/components/animate-lighting/AnimateLighting.js +1 -1
  14. package/dist/components/animate-marquee/AnimateMarquee.js +1 -1
  15. package/dist/components/animate-rotate/AnimateRotate.js +1 -1
  16. package/dist/components/animate-slide/AnimateSlide.js +1 -1
  17. package/dist/components/animate-typing/AnimateTyping.js +1 -1
  18. package/dist/components/animate-zoom/AnimateZoom.js +1 -1
  19. package/dist/components/app-logo/AppLogo.js +1 -1
  20. package/dist/components/area-chart/AreaChart.js +1 -1
  21. package/dist/components/aspect-ratio/AspectRatio.js +1 -1
  22. package/dist/components/avatar/Avatar.js +1 -1
  23. package/dist/components/avatar-group/AvatarGroup.d.ts +47 -0
  24. package/dist/components/avatar-group/AvatarGroup.js +1 -0
  25. package/dist/components/avatar-group/index.d.ts +2 -0
  26. package/dist/components/avatar-group/index.js +1 -0
  27. package/dist/components/badge/Badge.js +1 -1
  28. package/dist/components/bar-chart/BarChart.js +1 -1
  29. package/dist/components/blockquote/Blockquote.js +1 -1
  30. package/dist/components/bottom-navigation/BottomNavigation.js +1 -1
  31. package/dist/components/box/Box.js +1 -1
  32. package/dist/components/breadcrumb/Breadcrumb.js +1 -1
  33. package/dist/components/button/Button.js +1 -1
  34. package/dist/components/button-group/ButtonGroup.js +1 -1
  35. package/dist/components/card/Card.js +1 -1
  36. package/dist/components/carousel/Carousel.js +1 -1
  37. package/dist/components/chat-bubble/ChatBubble.js +1 -1
  38. package/dist/components/checkbox/Checkbox.js +1 -1
  39. package/dist/components/chip/Chip.js +1 -1
  40. package/dist/components/code-block/CodeBlock.js +1 -1
  41. package/dist/components/collapsible/Collapsible.js +1 -1
  42. package/dist/components/color-picker/ColorPicker.js +1 -1
  43. package/dist/components/combobox/Combobox.js +1 -1
  44. package/dist/components/command-palette/CommandPalette.d.ts +88 -0
  45. package/dist/components/command-palette/CommandPalette.js +1 -0
  46. package/dist/components/command-palette/index.d.ts +2 -0
  47. package/dist/components/command-palette/index.js +1 -0
  48. package/dist/components/container/Container.js +1 -1
  49. package/dist/components/data-list/DataList.d.ts +55 -0
  50. package/dist/components/data-list/DataList.js +1 -0
  51. package/dist/components/data-list/index.d.ts +2 -0
  52. package/dist/components/data-list/index.js +1 -0
  53. package/dist/components/data-table/DataTable.js +1 -1
  54. package/dist/components/date-picker/DatePicker.js +1 -1
  55. package/dist/components/date-range-picker/DateRangePicker.js +1 -1
  56. package/dist/components/date-time-picker/DateTimePicker.js +1 -1
  57. package/dist/components/dialog/Dialog.js +1 -1
  58. package/dist/components/divider/Divider.js +1 -1
  59. package/dist/components/drawer/Drawer.js +1 -1
  60. package/dist/components/empty/Empty.js +1 -1
  61. package/dist/components/fieldset/Fieldset.d.ts +33 -0
  62. package/dist/components/fieldset/Fieldset.js +1 -0
  63. package/dist/components/fieldset/index.d.ts +2 -0
  64. package/dist/components/fieldset/index.js +1 -0
  65. package/dist/components/file-picker/FilePicker.js +1 -1
  66. package/dist/components/floating-action-button/FloatingActionButton.js +1 -1
  67. package/dist/components/floating-bottom-navigation/FloatingBottomNavigation.js +1 -1
  68. package/dist/components/footer/Footer.js +1 -1
  69. package/dist/components/form/Form.d.ts +58 -0
  70. package/dist/components/form/Form.js +1 -0
  71. package/dist/components/form/index.d.ts +2 -0
  72. package/dist/components/form/index.js +1 -0
  73. package/dist/components/gauge-chart/GaugeChart.d.ts +62 -0
  74. package/dist/components/gauge-chart/GaugeChart.js +1 -0
  75. package/dist/components/gauge-chart/index.d.ts +2 -0
  76. package/dist/components/gauge-chart/index.js +1 -0
  77. package/dist/components/grid/Grid.js +1 -1
  78. package/dist/components/grid-container/GridContainer.js +1 -1
  79. package/dist/components/header/Header.js +1 -1
  80. package/dist/components/heatmap-chart/HeatmapChart.js +1 -1
  81. package/dist/components/highlight/Highlight.js +1 -1
  82. package/dist/components/hover-card/HoverCard.d.ts +78 -0
  83. package/dist/components/hover-card/HoverCard.js +1 -0
  84. package/dist/components/hover-card/index.d.ts +2 -0
  85. package/dist/components/hover-card/index.js +1 -0
  86. package/dist/components/how-to-steps/HowToSteps.d.ts +11 -25
  87. package/dist/components/how-to-steps/HowToSteps.js +1 -1
  88. package/dist/components/icon/Icon.js +1 -1
  89. package/dist/components/icon-button/IconButton.js +1 -1
  90. package/dist/components/line-chart/LineChart.js +1 -1
  91. package/dist/components/list/List.js +1 -1
  92. package/dist/components/menu/Menu.d.ts +16 -4
  93. package/dist/components/menu/Menu.js +1 -1
  94. package/dist/components/menubar/Menubar.d.ts +56 -0
  95. package/dist/components/menubar/Menubar.js +1 -0
  96. package/dist/components/menubar/index.d.ts +2 -0
  97. package/dist/components/menubar/index.js +1 -0
  98. package/dist/components/meter/Meter.d.ts +52 -0
  99. package/dist/components/meter/Meter.js +1 -0
  100. package/dist/components/meter/index.d.ts +2 -0
  101. package/dist/components/meter/index.js +1 -0
  102. package/dist/components/mockup/Mockup.js +1 -1
  103. package/dist/components/navigation-menu/NavigationMenu.d.ts +100 -0
  104. package/dist/components/navigation-menu/NavigationMenu.js +1 -0
  105. package/dist/components/navigation-menu/index.d.ts +2 -0
  106. package/dist/components/navigation-menu/index.js +1 -0
  107. package/dist/components/number-field/NumberField.js +1 -1
  108. package/dist/components/otp-field/OtpField.js +1 -1
  109. package/dist/components/overlay/Overlay.js +1 -1
  110. package/dist/components/page-layout/PageLayout.js +1 -1
  111. package/dist/components/pagination/Pagination.js +1 -1
  112. package/dist/components/panes/Panes.js +1 -1
  113. package/dist/components/pie-chart/PieChart.js +1 -1
  114. package/dist/components/pill/Pill.js +1 -1
  115. package/dist/components/popover/Popover.js +1 -1
  116. package/dist/components/progress-box/ProgressBox.js +1 -1
  117. package/dist/components/progress-circular/ProgressCircular.js +1 -1
  118. package/dist/components/progress-linear/ProgressLinear.js +1 -1
  119. package/dist/components/radio-group/RadioGroup.js +1 -1
  120. package/dist/components/rating/Rating.js +1 -1
  121. package/dist/components/scatter-chart/ScatterChart.js +1 -1
  122. package/dist/components/scroll-area/ScrollArea.d.ts +50 -0
  123. package/dist/components/scroll-area/ScrollArea.js +1 -0
  124. package/dist/components/scroll-area/index.d.ts +2 -0
  125. package/dist/components/scroll-area/index.js +1 -0
  126. package/dist/components/scroll-zone/ScrollZone.d.ts +35 -17
  127. package/dist/components/scroll-zone/ScrollZone.js +1 -1
  128. package/dist/components/segmented-button/SegmentedButton.js +1 -1
  129. package/dist/components/select/Select.js +1 -1
  130. package/dist/components/shortcut/Shortcut.js +1 -1
  131. package/dist/components/sidebar/Sidebar.js +1 -1
  132. package/dist/components/sidebar/SidebarTrigger.js +1 -1
  133. package/dist/components/skeleton/Skeleton.js +1 -1
  134. package/dist/components/slider/Slider.js +1 -1
  135. package/dist/components/sparkline/Sparkline.js +1 -1
  136. package/dist/components/spoiler/Spoiler.js +1 -1
  137. package/dist/components/statistic/Statistic.js +1 -1
  138. package/dist/components/switch/Switch.js +1 -1
  139. package/dist/components/table/Table.js +1 -1
  140. package/dist/components/tabs/Tabs.js +1 -1
  141. package/dist/components/text-field/TextField.js +1 -1
  142. package/dist/components/text-link/TextLink.js +1 -1
  143. package/dist/components/time-picker/TimePicker.js +1 -1
  144. package/dist/components/timeline/Timeline.js +1 -1
  145. package/dist/components/timeline-chart/TimelineChart.js +1 -1
  146. package/dist/components/toast/Toast.js +1 -1
  147. package/dist/components/toggle/Toggle.d.ts +53 -0
  148. package/dist/components/toggle/Toggle.js +1 -0
  149. package/dist/components/toggle/index.d.ts +2 -0
  150. package/dist/components/toggle/index.js +1 -0
  151. package/dist/components/toggle-group/ToggleGroup.d.ts +51 -0
  152. package/dist/components/toggle-group/ToggleGroup.js +1 -0
  153. package/dist/components/toggle-group/index.d.ts +2 -0
  154. package/dist/components/toggle-group/index.js +1 -0
  155. package/dist/components/toolbar/Toolbar.js +1 -1
  156. package/dist/components/tooltip/Tooltip.js +1 -1
  157. package/dist/components/tour/Tour.d.ts +82 -0
  158. package/dist/components/tour/Tour.js +1 -0
  159. package/dist/components/tour/index.d.ts +2 -0
  160. package/dist/components/tour/index.js +1 -0
  161. package/dist/components/transfer/Transfer.d.ts +52 -0
  162. package/dist/components/transfer/Transfer.js +1 -0
  163. package/dist/components/transfer/index.d.ts +2 -0
  164. package/dist/components/transfer/index.js +1 -0
  165. package/dist/components/tree-view/TreeView.js +1 -1
  166. package/dist/components/typography/Typography.js +1 -1
  167. package/dist/components/window-pane/WindowPane.js +1 -1
  168. package/dist/index.d.ts +16 -0
  169. package/dist/index.js +1 -1
  170. package/dist/internal/animate.d.ts +7 -1
  171. package/dist/internal/animate.js +1 -1
  172. package/dist/internal/avatar-group.d.ts +22 -0
  173. package/dist/internal/avatar-group.js +1 -0
  174. package/dist/internal/bottom-navigation.js +1 -1
  175. package/dist/internal/button-group.d.ts +6 -2
  176. package/dist/internal/button-group.js +1 -1
  177. package/dist/internal/calendar.js +1 -1
  178. package/dist/internal/chart-frame.d.ts +18 -1
  179. package/dist/internal/chart-frame.js +1 -1
  180. package/dist/internal/data-table.d.ts +0 -14
  181. package/dist/internal/data-table.js +1 -1
  182. package/dist/internal/drag.d.ts +62 -0
  183. package/dist/internal/drag.js +1 -0
  184. package/dist/internal/highlight.js +1 -1
  185. package/dist/internal/i18n.d.ts +82 -0
  186. package/dist/internal/i18n.js +1 -1
  187. package/dist/internal/link.d.ts +19 -0
  188. package/dist/internal/link.js +1 -0
  189. package/dist/internal/media.d.ts +29 -0
  190. package/dist/internal/media.js +1 -0
  191. package/dist/internal/menu.js +1 -1
  192. package/dist/internal/observe.d.ts +42 -0
  193. package/dist/internal/observe.js +1 -0
  194. package/dist/internal/page-layout.js +1 -1
  195. package/dist/internal/picker.js +1 -1
  196. package/dist/internal/progress.d.ts +5 -0
  197. package/dist/internal/search.d.ts +33 -0
  198. package/dist/internal/search.js +1 -0
  199. package/dist/internal/styles.d.ts +39 -0
  200. package/dist/internal/styles.js +1 -1
  201. package/dist/locales/ar.js +1 -1
  202. package/dist/locales/de.js +1 -1
  203. package/dist/locales/es.js +1 -1
  204. package/dist/locales/fr.js +1 -1
  205. package/dist/locales/hi.js +1 -1
  206. package/dist/locales/id.js +1 -1
  207. package/dist/locales/it.js +1 -1
  208. package/dist/locales/ja.js +1 -1
  209. package/dist/locales/ko.js +1 -1
  210. package/dist/locales/nl.js +1 -1
  211. package/dist/locales/pl.js +1 -1
  212. package/dist/locales/pt.js +1 -1
  213. package/dist/locales/ru.js +1 -1
  214. package/dist/locales/th.js +1 -1
  215. package/dist/locales/tr.js +1 -1
  216. package/dist/locales/vi.js +1 -1
  217. package/dist/locales/zh-hans.js +1 -1
  218. package/dist/locales/zh-hant.js +1 -1
  219. package/dist/styles.css +1 -1
  220. package/dist/tailwind.css +104 -0
  221. package/dist/types.d.ts +16 -0
  222. package/package.json +2 -2
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as o from"react";import{Toast as i}from"@base-ui/react/toast";import{boxPaddingClasses as n}from"../box/Box.js";import{actionMessages as s,useMessages as a}from"../../internal/i18n.js";import{CloseIcon as r,severityIcon as l}from"../../internal/icons.js";import{controlSlots as c,focusRingClasses as d,hasContent as m,iconClasses as p,metaTextClasses as u,radiusClasses as f,sheetBodyClasses as b,sheetHeaderGapClasses as x,sheetSectionGapClasses as v,sheetTitleClasses as h,surfaceClasses as y}from"../../internal/styles.js";const g={"top-start":"top-0 items-start","top-center":"top-0 items-center","top-end":"top-0 items-end","bottom-start":"bottom-0 items-start flex-col-reverse","bottom-center":"bottom-0 items-center flex-col-reverse","bottom-end":"bottom-0 items-end flex-col-reverse"},w={solid:[y,"text-(--n-on-solid) bg-(--n-fill)","[box-shadow:var(--neba-shadow-3),var(--neba-plate-solid)]"].join(" "),outline:[y,"border text-(--neba-fg) bg-(--n-panel-press)","[border-color:var(--n-line)]","[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]"].join(" "),text:[y,"text-(--neba-fg) bg-(--n-panel-press)","[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]"].join(" ")},j={solid:"",outline:"text-(--n-accent)",text:"text-(--n-accent)"};function N(e){const{color:t,variant:o,icon:i,actionLabel:n,onAction:s,...a}=e;return{...a,data:{color:t,variant:o,icon:i},actionProps:void 0===n?void 0:{children:n,onClick:s}}}export function useToast(){const e=i.useToastManager();return o.useMemo(()=>({add:t=>e.add(N(t)),close:t=>e.close(t),update:(t,o)=>e.update(t,N(o)),promise:(t,o)=>e.promise(t,{loading:N(o.loading),success:e=>N("function"==typeof o.success?o.success(e):o.success),error:e=>N("function"==typeof o.error?o.error(e):o.error)}),toasts:e.toasts}),[e])}function _({toast:o,variant:s,color:a,size:y,density:g,closeLabel:N,swipeDirection:_}){const T=o.data?.variant??s??"outline",z=o.data?.color??a,$=void 0===o.data?.icon?l(z):o.data.icon,k=j[T],D=m(o.title);return t(i.Root,{toast:o,swipeDirection:_,className:["pointer-events-auto flex w-full items-start",n[g??"default"][y],f[y],v[y],b[y],w[T],p,"[transition:opacity_var(--neba-duration)_var(--neba-ease)]","data-[starting-style]:opacity-0 data-[ending-style]:opacity-0","data-[limited]:hidden",d,"[outline:none]"].filter(Boolean).join(" "),style:c(z,3,T),children:[m($)?e("span",{className:`flex h-[1lh] shrink-0 items-center ${k}`,children:$}):null,t("div",{className:`flex min-w-0 flex-1 flex-col ${x[y]}`,children:[e(i.Title,{className:`neba-title font-semibold ${h[y]} ${k}`}),e(i.Description,{className:D?""+("solid"===T?"":"text-(--neba-muted-fg)"):""})]}),e(i.Action,{className:["flex h-[1lh] shrink-0 cursor-pointer items-center rounded-full px-2","font-medium underline-offset-2",k||"text-(--n-on-solid)","hover:underline","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-2",u[y]].join(" ")}),e("span",{className:"flex h-[1lh] shrink-0 items-center",children:e(i.Close,{"aria-label":N,className:["inline-flex size-[1.15em] cursor-pointer items-center justify-center rounded-full","opacity-70 [transition:opacity_var(--neba-duration)_var(--neba-ease)]","hover:opacity-100 focus-visible:opacity-100","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-2"].join(" "),children:e(r,{})})})]})}function T(t){const{toasts:o}=i.useToastManager(),{position:n,width:s,...a}=t,r=[n.startsWith("top")?"up":"down","left","right"];return e(i.Portal,{children:e(i.Viewport,{className:["neba-portal pointer-events-none fixed inset-x-0 z-50 flex flex-col gap-2 p-4",g[n]].join(" "),children:o.map(t=>e("div",{className:"w-full",style:{maxWidth:"number"==typeof s?`${s}px`:s},children:e(_,{toast:t,swipeDirection:r,...a})},t.id))})})}export function ToastProvider({variant:o="outline",size:n="md",color:r="primary",density:l="default",position:c="bottom-end",timeout:d=5e3,limit:m=3,width:p=380,locale:u,closeLabel:f,children:b}){const x=a(s,u);return t(i.Provider,{timeout:d,limit:m,children:[b,e(T,{position:c,variant:o,size:n,color:r,density:l,width:p,closeLabel:f??x.close})]})}
1
+ "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as o from"react";import{Toast as i}from"@base-ui/react/toast";import{boxPaddingClasses as n}from"../box/Box.js";import{actionMessages as s,useMessages as a}from"../../internal/i18n.js";import{CloseIcon as r,severityIcon as l}from"../../internal/icons.js";import{controlSlots as c,focusRingClasses as d,hasContent as m,iconClasses as u,metaTextClasses as p,radiusClasses as f,sheetBodyClasses as b,sheetHeaderGapClasses as x,sheetSectionGapClasses as v,sheetTitleClasses as h,surfaceClasses as y}from"../../internal/styles.js";const g={"top-start":"top-0 items-start","top-center":"top-0 items-center","top-end":"top-0 items-end","bottom-start":"bottom-0 items-start flex-col-reverse","bottom-center":"bottom-0 items-center flex-col-reverse","bottom-end":"bottom-0 items-end flex-col-reverse"},w={solid:[y,"text-(--n-on-solid) bg-(--n-fill)","[box-shadow:var(--neba-shadow-3),var(--neba-plate-solid)]"].join(" "),outline:[y,"border text-(--neba-fg) bg-(--n-panel-press)","[border-color:var(--n-line)]","[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]"].join(" "),text:[y,"text-(--neba-fg) bg-(--n-panel-press)","[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]"].join(" ")},j={solid:"",outline:"text-(--n-accent)",text:"text-(--n-accent)"};function N(e){const{color:t,variant:o,icon:i,actionLabel:n,onAction:s,...a}=e;return{...a,data:{color:t,variant:o,icon:i},actionProps:void 0===n?void 0:{children:n,onClick:s}}}export function useToast(){const e=i.useToastManager();return o.useMemo(()=>({add:t=>e.add(N(t)),close:t=>e.close(t),update:(t,o)=>e.update(t,N(o)),promise:(t,o)=>e.promise(t,{loading:N(o.loading),success:e=>N("function"==typeof o.success?o.success(e):o.success),error:e=>N("function"==typeof o.error?o.error(e):o.error)}),toasts:e.toasts}),[e])}function _({toast:o,variant:s,color:a,size:y,density:g,closeLabel:N,swipeDirection:_}){const T=o.data?.variant??s??"outline",z=o.data?.color??a,$=void 0===o.data?.icon?l(z):o.data.icon,k=j[T],D=m(o.title);return t(i.Root,{toast:o,swipeDirection:_,className:["pointer-events-auto flex w-full items-start",n[g??"default"][y],f[y],v[y],b[y],w[T],u,"[transition:opacity_var(--neba-duration)_var(--neba-ease)]","data-[starting-style]:opacity-0 data-[ending-style]:opacity-0","data-[limited]:hidden",d,"[outline:none]"].filter(Boolean).join(" "),style:c(z,3,T),children:[m($)?e("span",{className:`flex h-[1lh] shrink-0 items-center ${k}`,children:$}):null,t("div",{className:`flex min-w-0 flex-1 flex-col ${x[y]}`,children:[e(i.Title,{className:`neba-title font-semibold ${h[y]} ${k}`}),e(i.Description,{className:D?""+("solid"===T?"":"text-(--neba-muted-fg)"):""})]}),e(i.Action,{className:["flex h-[1lh] shrink-0 cursor-pointer items-center rounded-full px-2","font-medium underline-offset-2",k||"text-(--n-on-solid)","hover:underline","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-2",p[y]].join(" ")}),e("span",{className:"flex h-[1lh] shrink-0 items-center",children:e(i.Close,{"aria-label":N,className:["inline-flex size-[1.15em] cursor-pointer items-center justify-center rounded-full","opacity-70 [transition:opacity_var(--neba-duration)_var(--neba-ease)]","hover:opacity-100 focus-visible:opacity-100","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-2"].join(" "),children:e(r,{})})})]})}function T(t){const{toasts:n}=i.useToastManager(),{position:s,width:a,...r}=t,l=o.useMemo(()=>[s.startsWith("top")?"up":"down","left","right"],[s]);return e(i.Portal,{children:e(i.Viewport,{className:["neba-portal pointer-events-none fixed inset-x-0 z-50 flex flex-col gap-2 p-4",g[s]].join(" "),children:n.map(t=>e("div",{className:"w-full",style:{maxWidth:"number"==typeof a?`${a}px`:a},children:e(_,{toast:t,swipeDirection:l,...r})},t.id))})})}export function ToastProvider({variant:o="outline",size:n="md",color:r="primary",density:l="default",position:c="bottom-end",timeout:d=5e3,limit:m=3,width:u=380,locale:p,closeLabel:f,children:b}){const x=a(s,p);return t(i.Provider,{timeout:d,limit:m,children:[b,e(T,{position:c,variant:o,size:n,color:r,density:l,width:u,closeLabel:f??x.close})]})}
@@ -0,0 +1,53 @@
1
+ import * as React from 'react';
2
+ import type { NebaElevation, NebaStyleProps, NebaVariant } from '../../types.js';
3
+ export interface ToggleProps extends NebaStyleProps, Omit<React.ComponentPropsWithoutRef<'button'>, 'color' | 'value'> {
4
+ /**
5
+ * How the toggle looks while it is **off**. On is always the colour family
6
+ * asserting itself, whichever weight was asked for.
7
+ *
8
+ * - `solid` — a filled neutral plate that fills with the accent when it goes
9
+ * on. The loudest, for a toggle a screen is steered by.
10
+ * - `outline` — a hairline panel. The default.
11
+ * - `text` — nothing at all until it is hovered or on. What a toolbar wants.
12
+ * @default 'outline'
13
+ */
14
+ variant?: NebaVariant;
15
+ /** Whether it is on. Use with `onPressedChange` for a controlled toggle. */
16
+ pressed?: boolean;
17
+ /** Whether it starts on, for an uncontrolled one. @default false */
18
+ defaultPressed?: boolean;
19
+ onPressedChange?: (pressed: boolean) => void;
20
+ /** Identifies the toggle inside a [ToggleGroup](./toggle-group). */
21
+ value?: string;
22
+ /**
23
+ * Drop shadow depth. `0` (the default) is flat — the acrylic edge is what
24
+ * separates the toggle from the page.
25
+ * @default 0
26
+ */
27
+ elevation?: NebaElevation;
28
+ /** Content placed before the label. Sized in `em`, so it tracks the label. */
29
+ startIcon?: React.ReactNode;
30
+ /** Content placed after the label. */
31
+ endIcon?: React.ReactNode;
32
+ /** Stretches to the width of the container. */
33
+ fullWidth?: boolean;
34
+ /**
35
+ * The label. Left out, the toggle goes square around whatever icon it was
36
+ * given — which is what a toolbar toggle is. An icon-only toggle still needs
37
+ * an `aria-label`.
38
+ */
39
+ children?: React.ReactNode;
40
+ }
41
+ /**
42
+ * A button that stays down.
43
+ *
44
+ * The difference from a [Switch](./switch) is what the press *is*: a switch
45
+ * changes a setting and the change is the point, a toggle changes the state of
46
+ * the thing beside it — bold on the selected words, the grid on the canvas, the
47
+ * filter on the list. The difference from a [Checkbox](./checkbox) is that this
48
+ * one is a control rather than an answer, so it never goes in a form.
49
+ *
50
+ * Base UI's Toggle owns `aria-pressed` and the controlled/uncontrolled pair.
51
+ * What is left here is the surface, and the rule that off is neutral.
52
+ */
53
+ export declare const Toggle: React.ForwardRefExoticComponent<ToggleProps & React.RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1 @@
1
+ "use client";import{jsxs as e}from"react/jsx-runtime";import*as n from"react";import{Toggle as t}from"@base-ui/react/toggle";import{ButtonGroupContext as o}from"../../internal/button-group.js";import{controlHeightClasses as r,controlSlots as s,controlSquareClasses as a,controlTextClasses as l,cx as i,disabledClasses as v,focusRingClasses as d,gapClasses as g,iconClasses as b,paddingXClasses as p,pressTransitionClasses as x,radiusClasses as c,surfaceClasses as f,transitionClasses as m}from"../../internal/styles.js";const h={xs:`${r.xs} ${g.xs} ${c.xs} ${l.xs}`,sm:`${r.sm} ${g.sm} ${c.sm} ${l.sm}`,md:`${r.md} ${g.md} ${c.md} ${l.md}`,lg:`${r.lg} ${g.lg} ${c.lg} ${l.lg}`,xl:`${r.xl} ${g.xl} ${c.xl} ${l.xl}`},u={xs:`${a.xs} px-0`,sm:`${a.sm} px-0`,md:`${a.md} px-0`,lg:`${a.lg} px-0`,xl:`${a.xl} px-0`},$=["relative inline-flex shrink-0 cursor-pointer select-none items-center justify-center","whitespace-nowrap align-middle font-medium leading-none","[-webkit-tap-highlight-color:transparent] [touch-action:manipulation]",m,x,d,b].join(" "),j={solid:[f,"text-(--neba-muted-fg) bg-(--n-panel-hover)","[box-shadow:var(--n-elev),var(--neba-plate-solid)]","hover:bg-(--n-panel-press) hover:text-(--neba-fg)","active:bg-(--n-panel-press)"].join(" "),outline:[f,"border text-(--neba-muted-fg) bg-(--n-panel)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]","hover:bg-(--n-panel-hover) hover:text-(--neba-fg) hover:[border-color:var(--n-line-hover)]","active:bg-(--n-panel-press)"].join(" "),text:["text-(--neba-muted-fg) bg-transparent","hover:bg-(--n-soft) hover:text-(--neba-fg)","active:bg-(--n-soft-hover)"].join(" ")},y={solid:[f,"text-(--n-on-solid) bg-(--n-fill)","[box-shadow:var(--n-elev),var(--neba-plate-solid)]","hover:bg-(--n-fill-hover)","active:bg-(--n-fill-active)"].join(" "),outline:[f,"border text-(--n-accent) bg-(--n-soft)","[border-color:var(--n-line-hover)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]","hover:bg-(--n-soft-hover)","active:bg-(--n-soft-press)"].join(" "),text:["text-(--n-accent) bg-(--n-soft)","hover:bg-(--n-soft-hover)","active:bg-(--n-soft-press)"].join(" ")};export const Toggle=/*@__PURE__*/n.forwardRef(function({variant:r,size:a,color:l,density:d,elevation:g,pressed:b,defaultPressed:x,onPressedChange:c,value:f,startIcon:m,endIcon:w,fullWidth:P=!1,disabled:C,className:T,style:k,children:z,onPointerMove:E,...I},M){const N=n.useContext(o),R=r??N?.variant??"outline",W=a??N?.size??"md",X=l??N?.color??"primary",Y=d??N?.density??"default",q=g??N?.elevation??0,A=C??N?.disabled??!1,B=null==z||!1===z;return e(t,{ref:M,value:f,pressed:b,defaultPressed:x,onPressedChange:e=>c?.(e),disabled:A,className:e=>i($,h[W],B?u[W]:p[Y][W],A?v[R]:e.pressed?y[R]:j[R],A?"":"neba-glow",P?"w-full":"",T??""),style:{...s(X,q,R),...k},onPointerMove:e=>{if(!A){const n=e.currentTarget;n.style.setProperty("--n-mx",`${e.nativeEvent.offsetX}px`),n.style.setProperty("--n-my",`${e.nativeEvent.offsetY}px`)}E?.(e)},...I,children:[m,z,w]})});
@@ -0,0 +1,2 @@
1
+ export { Toggle } from './Toggle.js';
2
+ export type { ToggleProps } from './Toggle.js';
@@ -0,0 +1 @@
1
+ export{Toggle}from"./Toggle.js";
@@ -0,0 +1,51 @@
1
+ import * as React from 'react';
2
+ import type { NebaElevation, NebaOrientation, NebaStyleProps, NebaVariant } from '../../types.js';
3
+ export interface ToggleGroupProps extends NebaStyleProps, Omit<React.ComponentPropsWithoutRef<'div'>, 'color' | 'defaultValue' | 'onChange'> {
4
+ /** Passed to every toggle in the set. @default 'outline' */
5
+ variant?: NebaVariant;
6
+ /**
7
+ * Which toggles are on, by their `value`. An array in both the single and the
8
+ * multiple case — Base UI's own shape, and the one that does not change type
9
+ * when `multiple` is turned on.
10
+ */
11
+ value?: readonly string[];
12
+ /** Which start on, for an uncontrolled set. */
13
+ defaultValue?: readonly string[];
14
+ onValueChange?: (value: string[]) => void;
15
+ /**
16
+ * Whether more than one can be on at a time. Off, turning one on turns the
17
+ * last one off — which is a one-of-a-set, and worth a second thought: if the
18
+ * choice is a *value* rather than a state, that is a
19
+ * [SegmentedButton](./segmented-button) or a [RadioGroup](./radio-group).
20
+ * @default false
21
+ */
22
+ multiple?: boolean;
23
+ /**
24
+ * Which way the toggles run.
25
+ * @default 'horizontal'
26
+ */
27
+ orientation?: NebaOrientation;
28
+ /** Drop shadow depth, passed to every toggle in the set. @default 0 */
29
+ elevation?: NebaElevation;
30
+ /** Disables every toggle in the set at once. */
31
+ disabled?: boolean;
32
+ /** Whether the arrow keys wrap around at the ends. @default true */
33
+ loopFocus?: boolean;
34
+ /** Stretches to the container and divides the width evenly between toggles. */
35
+ fullWidth?: boolean;
36
+ children?: React.ReactNode;
37
+ }
38
+ /**
39
+ * A set of toggles that share one state.
40
+ *
41
+ * Two things are happening, and only one of them is visual. The corners facing a
42
+ * neighbour are squared off — that is the look. The other half is that the set
43
+ * owns the value: the toggles report into one array, `multiple` decides whether
44
+ * more than one of them can be on, and `variant`, `size`, `color`, `density`,
45
+ * `elevation` and `disabled` are set once here rather than on every toggle.
46
+ *
47
+ * Base UI owns the roving tab index — one tab stop for the whole set, arrow keys
48
+ * between the members — which is what makes a toolbar of eight toggles two key
49
+ * presses deep instead of eight.
50
+ */
51
+ export declare const ToggleGroup: React.ForwardRefExoticComponent<ToggleGroupProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import*as o from"react";import{ToggleGroup as l}from"@base-ui/react/toggle-group";import{ButtonGroupContext as i}from"../../internal/button-group.js";import{cx as t}from"../../internal/styles.js";const n={horizontal:"[&>*:not(:first-child)]:rounded-s-none [&>*:not(:last-child)]:rounded-e-none",vertical:"[&>*:not(:first-child)]:rounded-t-none [&>*:not(:last-child)]:rounded-b-none"},r={horizontal:"[&>*:not(:first-child)]:-ms-px",vertical:"[&>*:not(:first-child)]:-mt-px"},a=["inline-flex align-middle","[&>*]:relative [&>*:hover]:z-10 [&>*:focus-visible]:z-10","[&>*]:shrink-0"].join(" ");export const ToggleGroup=/*@__PURE__*/o.forwardRef(function({variant:s,size:u,color:d,density:c,elevation:f,value:m,defaultValue:h,onValueChange:p,multiple:v=!1,orientation:g="horizontal",disabled:x,loopFocus:b=!0,fullWidth:z=!1,className:j,children:V,...w},y){const C=o.useMemo(()=>({variant:s,size:u,color:d,density:c,elevation:f,disabled:x}),[s,u,d,c,f,x]);return e(i.Provider,{value:C,children:e(l,{ref:y,value:m,defaultValue:h,onValueChange:e=>p?.(e),multiple:v,orientation:g,disabled:x,loopFocus:b,className:t(a,"vertical"===g?"flex-col":"flex-row",n[g],"outline"===(s??"outline")?r[g]:"",z?"flex w-full [&>*]:flex-1":"",j??""),...w,children:V})})});
@@ -0,0 +1,2 @@
1
+ export { ToggleGroup } from './ToggleGroup.js';
2
+ export type { ToggleGroupProps } from './ToggleGroup.js';
@@ -0,0 +1 @@
1
+ export{ToggleGroup}from"./ToggleGroup.js";
@@ -1 +1 @@
1
- import{jsx as e,Fragment as t,jsxs as r}from"react/jsx-runtime";import*as o from"react";import{useRender as n}from"@base-ui/react/use-render";import{boxPaddingXClasses as i,boxPaddingYClasses as a}from"../box/Box.js";import{hasContent as s,radiusClasses as l,sheetSectionGapClasses as d,surfaceClasses as m,surfaceSlots as c,transitionClasses as b}from"../../internal/styles.js";const p={solid:[m,"text-(--neba-fg) bg-(--n-panel-hover)","[box-shadow:var(--n-elev),var(--neba-plate-solid)]"].join(" "),outline:[m,"border text-(--neba-fg) bg-(--n-panel)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]"].join(" "),text:"text-(--neba-fg) bg-transparent"},f={static:{top:"",bottom:""},sticky:{top:"sticky top-0 z-20",bottom:"sticky bottom-0 z-20"},fixed:{top:"fixed inset-x-0 top-0 z-30",bottom:"fixed inset-x-0 bottom-0 z-30"}},x={top:"border-b [border-color:var(--n-line)]",bottom:"border-t [border-color:var(--n-line)]"};export const Toolbar=/*@__PURE__*/o.forwardRef(function({variant:o="outline",size:m="md",color:v="primary",density:g="default",elevation:h=0,position:u="static",side:j="top",divider:w=!1,start:y,end:k,render:z,className:N,style:B,children:F,...R},T){const q=["flex w-full min-w-0 items-center",i[g][m],a[g][m],d[m],"static"===u?l[m]:"",p[o],w?x[j]:"",f[u][j],b,N??""].filter(Boolean).join(" ");return n({render:z,ref:T,props:{className:q,style:{...c(v,h),...B},children:r(t,{children:[s(y)?e("div",{className:"flex min-w-0 shrink-0 items-center gap-2",children:y}):null,e("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:F}),s(k)?e("div",{className:"flex min-w-0 shrink-0 items-center gap-2",children:k}):null]}),...R}})});
1
+ "use client";import{jsx as e,Fragment as t,jsxs as r}from"react/jsx-runtime";import*as o from"react";import{useRender as n}from"@base-ui/react/use-render";import{boxPaddingXClasses as i,boxPaddingYClasses as s}from"../box/Box.js";import{cx as a,hasContent as l,radiusClasses as c,sheetSectionGapClasses as d,surfaceClasses as m,surfaceSlots as b,transitionClasses as p}from"../../internal/styles.js";const f={solid:[m,"text-(--neba-fg) bg-(--n-panel-hover)","[box-shadow:var(--n-elev),var(--neba-plate-solid)]"].join(" "),outline:[m,"border text-(--neba-fg) bg-(--n-panel)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]"].join(" "),text:"text-(--neba-fg) bg-transparent"},x={static:{top:"",bottom:""},sticky:{top:"sticky top-0 z-20",bottom:"sticky bottom-0 z-20"},fixed:{top:"fixed inset-x-0 top-0 z-30",bottom:"fixed inset-x-0 bottom-0 z-30"}},v={top:"border-b [border-color:var(--n-line)]",bottom:"border-t [border-color:var(--n-line)]"};export const Toolbar=/*@__PURE__*/o.forwardRef(function({variant:o="outline",size:m="md",color:u="primary",density:g="default",elevation:h=0,position:w="static",side:y="top",divider:j=!1,start:k,end:z,render:N,className:B,style:F,children:R,...T},q){const A=a("flex w-full min-w-0 items-center",i[g][m],s[g][m],d[m],"static"===w?c[m]:"",f[o],j?v[y]:"",x[w][y],p,B??"");return n({render:N,ref:q,props:{className:A,style:{...b(u,h),...F},children:r(t,{children:[l(k)?e("div",{className:"flex min-w-0 shrink-0 items-center gap-2",children:k}):null,e("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:R}),l(z)?e("div",{className:"flex min-w-0 shrink-0 items-center gap-2",children:z}):null]}),...T}})});
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as a from"react";import{Tooltip as o}from"@base-ui/react/tooltip";import{controlSlots as i,metaTextClasses as s,paddingXClasses as n,radiusClasses as l,surfaceClasses as r}from"../../internal/styles.js";export const TooltipProvider=o.Provider;const d=[r,"max-w-64 text-(--n-on-solid) bg-(--n-fill)","[box-shadow:var(--neba-shadow-3),var(--neba-plate-solid)]","[outline:none]","[transition:opacity_var(--neba-duration)_var(--neba-ease)]","data-[starting-style]:opacity-0 data-[ending-style]:opacity-0","data-[instant]:[transition-duration:0ms]"].join(" "),p={xs:"py-0.5",sm:"py-0.5",md:"py-1",lg:"py-1.5",xl:"py-2"},c={xs:6,sm:7,md:8,lg:9,xl:10};export function Tooltip({content:r,children:m,size:h="sm",color:y="secondary",density:f="default",side:x="top",align:b="center",sideOffset:g=6,delay:u,closeDelay:v,arrow:j=!0,open:w,defaultOpen:O,onOpenChange:N,disabled:P=!1,className:T,style:z,...B}){const C=c[h],D=a.useId(),[_,k]=a.useState(O??!1),A=w??_;return t(o.Root,{open:w,defaultOpen:O,onOpenChange:e=>{k(e),N?.(e)},children:[e(o.Trigger,{render:m,delay:u,closeDelay:v,disabled:P,"aria-describedby":A?D:void 0}),e(o.Portal,{children:e(o.Positioner,{className:"neba-portal z-50 [outline:none]",side:x,align:b,sideOffset:g,children:t(o.Popup,{id:D,role:"tooltip",className:[d,l[h],n[f][h],p[h],s[h],T??""].filter(Boolean).join(" "),style:{...i(y,3,"solid"),...z},...B,children:[j?e(o.Arrow,{className:["data-[side=top]:bottom-[-1px]","data-[side=bottom]:top-[-1px] data-[side=bottom]:rotate-180","data-[side=left]:right-[-1px] data-[side=left]:-rotate-90","data-[side=right]:left-[-1px] data-[side=right]:rotate-90"].join(" "),children:e("svg",{width:C,height:C/2,viewBox:"0 0 10 5","aria-hidden":"true",className:"block",children:e("path",{d:"M0 0h10L5 5z",fill:"var(--n-fill)"})})}):null,r]})})})]})}
1
+ "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as a from"react";import{Tooltip as o}from"@base-ui/react/tooltip";import{controlSlots as i,cx as s,metaTextClasses as n,paddingXClasses as l,radiusClasses as r,surfaceClasses as d}from"../../internal/styles.js";export const TooltipProvider=o.Provider;const p=[d,"max-w-64 text-(--n-on-solid) bg-(--n-fill)","[box-shadow:var(--neba-shadow-3),var(--neba-plate-solid)]","[outline:none]","[transition:opacity_var(--neba-duration)_var(--neba-ease)]","data-[starting-style]:opacity-0 data-[ending-style]:opacity-0","data-[instant]:[transition-duration:0ms]"].join(" "),c={xs:"py-0.5",sm:"py-0.5",md:"py-1",lg:"py-1.5",xl:"py-2"},m={xs:6,sm:7,md:8,lg:9,xl:10};export function Tooltip({content:d,children:h,size:y="sm",color:f="secondary",density:u="default",side:x="top",align:b="center",sideOffset:g=6,delay:v,closeDelay:w,arrow:j=!0,open:O,defaultOpen:N,onOpenChange:P,disabled:T=!1,className:z,style:C,...D}){const _=m[y],k=a.useId(),[A,B]=a.useState(N??!1),I=O??A;return t(o.Root,{open:O,defaultOpen:N,onOpenChange:e=>{void 0===O&&B(e),P?.(e)},children:[e(o.Trigger,{render:h,delay:v,closeDelay:w,disabled:T,"aria-describedby":I?k:void 0}),e(o.Portal,{children:e(o.Positioner,{className:"neba-portal z-50 [outline:none]",side:x,align:b,sideOffset:g,children:t(o.Popup,{id:k,role:"tooltip",className:s(p,r[y],l[u][y],c[y],n[y],z??""),style:{...i(f,3,"solid"),...C},...D,children:[j?e(o.Arrow,{className:["data-[side=top]:bottom-[-1px]","data-[side=bottom]:top-[-1px] data-[side=bottom]:rotate-180","data-[side=left]:right-[-1px] data-[side=left]:-rotate-90","data-[side=right]:left-[-1px] data-[side=right]:rotate-90"].join(" "),children:e("svg",{width:_,height:_/2,viewBox:"0 0 10 5","aria-hidden":"true",className:"block",children:e("path",{d:"M0 0h10L5 5z",fill:"var(--n-fill)"})})}):null,d]})})})]})}
@@ -0,0 +1,82 @@
1
+ import * as React from 'react';
2
+ import type { NebaAlign, NebaSide, NebaStyleProps } from '../../types.js';
3
+ /** One stop on the tour. */
4
+ export interface TourStep {
5
+ /**
6
+ * A CSS selector for what this step is about. Left out, the step is centred
7
+ * over the page with nothing cut out of the scrim — which is what a welcome
8
+ * step and a closing step are.
9
+ */
10
+ target?: string;
11
+ /** The step's heading. */
12
+ title?: React.ReactNode;
13
+ /** What it says. */
14
+ content?: React.ReactNode;
15
+ /** Which edge of the target the card sits on. @default 'bottom' */
16
+ side?: NebaSide;
17
+ /** Where along that edge. @default 'center' */
18
+ align?: NebaAlign;
19
+ /**
20
+ * How far the cut-out is inflated past the target, in pixels. A control with
21
+ * a focus ring wants a couple; a whole panel wants none.
22
+ * @default 6
23
+ */
24
+ padding?: number;
25
+ }
26
+ export interface TourProps extends Pick<NebaStyleProps, 'size' | 'color' | 'density'> {
27
+ /** The stops, in order. */
28
+ steps: readonly TourStep[];
29
+ /** Whether the tour is running. Use with `onOpenChange` for a controlled one. */
30
+ open?: boolean;
31
+ /** Whether it starts running, for an uncontrolled one. @default false */
32
+ defaultOpen?: boolean;
33
+ onOpenChange?: (open: boolean) => void;
34
+ /** Which stop, from `0`. Use with `onStepChange` for a controlled one. */
35
+ step?: number;
36
+ /** Which one it starts on. @default 0 */
37
+ defaultStep?: number;
38
+ onStepChange?: (step: number) => void;
39
+ /** Called when the last step's button is pressed, before the tour closes. */
40
+ onFinish?: () => void;
41
+ /**
42
+ * Dims the page and cuts the target out of the dimming. Off, the card is the
43
+ * only thing the tour draws.
44
+ * @default true
45
+ */
46
+ mask?: boolean;
47
+ /** Draws the Skip button beside the counter. @default true */
48
+ skippable?: boolean;
49
+ /** Whether Escape ends the tour. @default true */
50
+ dismissible?: boolean;
51
+ /** Scrolls each target into view as the tour reaches it. @default true */
52
+ scrollIntoView?: boolean;
53
+ /**
54
+ * Which language the buttons and the counter are written in — a BCP 47 tag
55
+ * such as `ko`, `pt-BR` or `zh-Hant`. Unsupported tags fall back to English.
56
+ */
57
+ locale?: string;
58
+ /** The Previous button. Defaults to the `locale`'s word. */
59
+ previousLabel?: React.ReactNode;
60
+ /** The Next button. */
61
+ nextLabel?: React.ReactNode;
62
+ /** What Next becomes on the last step. */
63
+ doneLabel?: React.ReactNode;
64
+ /** The Skip button. */
65
+ skipLabel?: React.ReactNode;
66
+ }
67
+ /**
68
+ * A guided walk over a page that already exists — the three things a new reader
69
+ * has to be shown once, pointed at where they actually are.
70
+ *
71
+ * It is [HowToSteps](../surfaces/how-to-steps) turned inside out. That component
72
+ * puts the instructions *in* the page and the reader follows them; this one
73
+ * leaves the page as it is and stands over it. The steps are therefore given by
74
+ * selector rather than as content: what a tour is about is already on screen,
75
+ * and describing it a second time inside the card would be two copies to keep
76
+ * in step.
77
+ *
78
+ * The dimming never takes the pointer. A reader can use the control being
79
+ * pointed at while the card is up, which is the difference between a tour and a
80
+ * sequence of dialogs.
81
+ */
82
+ export declare function Tour({ steps, open, defaultOpen, onOpenChange, step, defaultStep, onStepChange, onFinish, mask, skippable, dismissible, scrollIntoView, locale, previousLabel, nextLabel, doneLabel, skipLabel, size, color, density }: TourProps): React.JSX.Element | null;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as n from"react";import{Popover as i}from"@base-ui/react/popover";import{Button as o}from"../button/Button.js";import{boxPaddingXClasses as s,boxPaddingYClasses as r}from"../box/Box.js";import{actionMessages as a,fill as l,stepsMessages as c,useMessages as d}from"../../internal/i18n.js";import{CloseIcon as m}from"../../internal/icons.js";import{observeResize as u}from"../../internal/observe.js";import{hasContent as p,metaTextClasses as f,radiusClasses as h,sheetBodyClasses as g,sheetHeaderGapClasses as b,sheetSectionGapClasses as v,sheetTitleClasses as x,surfaceClasses as w,surfaceSlots as y}from"../../internal/styles.js";const k=[w,"relative flex flex-col","border text-(--neba-fg) bg-(--n-panel-press)","[border-color:var(--n-line)]","[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]","[outline:none]","[transition:opacity_var(--neba-duration)_var(--neba-ease)]","data-[starting-style]:opacity-0 data-[ending-style]:opacity-0"].join(" "),_={xs:"max-w-56",sm:"max-w-64",md:"max-w-80",lg:"max-w-96",xl:"max-w-lg"},j={xs:"xs",sm:"xs",md:"sm",lg:"sm",xl:"md"};function N({spot:t,radius:n}){return e("div",null===t?{"aria-hidden":"true",className:"pointer-events-none fixed inset-0 z-40 bg-(--neba-scrim)"}:{"aria-hidden":"true",className:"pointer-events-none fixed z-40 [box-shadow:0_0_0_9999px_var(--neba-scrim)]",style:{top:t.top,left:t.left,width:t.width,height:t.height,borderRadius:n}})}export function Tour({steps:w,open:z,defaultOpen:L=!1,onOpenChange:S,step:C,defaultStep:E=0,onStepChange:P,onFinish:O,mask:q=!0,skippable:B=!0,dismissible:F=!0,scrollIntoView:M=!0,locale:R,previousLabel:T,nextLabel:$,doneLabel:A,skipLabel:I,size:V="md",color:D="primary",density:H="default"}){const G=d(c,R),J=d(a,R),[K,Q]=n.useState(L),[U,W]=n.useState(E),X=z??K,Y=Math.min(C??U,Math.max(0,w.length-1)),Z=w[Y],[ee,te]=n.useState(null),ne=e=>{void 0===z&&Q(e),S?.(e)},ie=e=>{void 0===C&&W(e),P?.(e)};if(n.useEffect(()=>{const e=Z?.target;if(!X||!e)return;const t=document.querySelector(e);if(!(t instanceof HTMLElement))return;M&&t.scrollIntoView({block:"center",inline:"nearest",behavior:"smooth"});const n=Z?.padding??6;let i=0;const o=()=>{i=0;const o=t.getBoundingClientRect();te({selector:e,spot:{top:o.top-n,left:o.left-n,width:o.width+2*n,height:o.height+2*n}})},s=()=>{0===i&&(i=requestAnimationFrame(o))};o();const r=u(t,s);return window.addEventListener("scroll",s,{passive:!0,capture:!0}),window.addEventListener("resize",s,{passive:!0}),()=>{0!==i&&cancelAnimationFrame(i),r(),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}},[X,Z?.target,Z?.padding,M]),0===w.length)return null;const oe=X&&Z?.target&&ee?.selector===Z.target?ee.spot:null,se=0===Y,re=Y===w.length-1,ae=s[H][V],le=r[H][V],ce=j[V],de=p(Z?.title)||p(Z?.content);return t(i.Root,{open:X,onOpenChange:(e,t)=>{(e||F||"escape-key"!==t.reason)&&(e||"outside-press"!==t.reason&&"focus-out"!==t.reason)?ne(e):t.cancel()},children:[X&&q?e(N,{spot:oe,radius:oe?8:0}):null,e(i.Portal,{children:e(i.Positioner,{className:"neba-portal z-50 [outline:none]",side:Z?.side??"bottom",align:Z?.align??"center",sideOffset:10,collisionPadding:12,anchor:()=>{if(!Z?.target)return null;const e=document.querySelector(Z.target);return e instanceof Element?e:null},children:t(i.Popup,{className:[k,h[V],g[V],v[V],_[V],ae,le].join(" "),style:y(D,3),children:[de?t("div",{className:"flex items-start gap-3",children:[t("div",{className:`flex min-w-0 flex-1 flex-col ${b[V]}`,children:[p(Z?.title)?e(i.Title,{className:`m-0 font-semibold ${x[V]}`,children:Z?.title}):null,p(Z?.content)?e(i.Description,{className:"m-0 min-w-0",children:Z?.content}):null]}),F?e("button",{type:"button","aria-label":J.close,onClick:()=>ne(!1),className:["flex size-[1.6em] shrink-0 cursor-pointer items-center justify-center","rounded-full text-(--neba-muted-fg)","[&_svg]:size-[1.1em] [&_svg]:shrink-0","[transition:background-color_var(--neba-duration)_var(--neba-ease),color_var(--neba-duration)_var(--neba-ease)]","hover:bg-(--n-soft) hover:text-(--neba-fg)","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-2"].join(" "),children:e(m,{})}):null]}):null,t("div",{className:"flex items-center gap-2",children:[e("span",{className:`shrink-0 tabular-nums text-(--neba-muted-fg) ${f[V]}`,children:l(G.position,{index:String(Y+1),total:String(w.length)})}),t("div",{className:"ms-auto flex items-center gap-2",children:[B&&!re?e(o,{size:ce,variant:"text",color:"secondary",onClick:()=>ne(!1),children:I??G.skip}):null,se?null:e(o,{size:ce,variant:"outline",color:D,onClick:()=>ie(Y-1),children:T??G.previous}),e(o,{size:ce,color:D,onClick:()=>re?(O?.(),void ne(!1)):ie(Y+1),children:re?A??G.done:$??G.next})]})]})]})})})]})}
@@ -0,0 +1,2 @@
1
+ export { Tour } from './Tour.js';
2
+ export type { TourProps, TourStep } from './Tour.js';
@@ -0,0 +1 @@
1
+ export{Tour}from"./Tour.js";
@@ -0,0 +1,52 @@
1
+ import * as React from 'react';
2
+ import type { NebaStyleProps } from '../../types.js';
3
+ /** One thing that can be on either side. */
4
+ export interface TransferItem {
5
+ /** What identifies it, and what `value` is a list of. */
6
+ value: string;
7
+ /** What the row says. */
8
+ label: React.ReactNode;
9
+ /** In the list but not movable. */
10
+ disabled?: boolean;
11
+ }
12
+ export interface TransferProps extends NebaStyleProps, Omit<React.ComponentPropsWithoutRef<'div'>, 'color' | 'defaultValue' | 'onChange'> {
13
+ /** Everything that can be on either side, in the order the lists show it. */
14
+ items: readonly TransferItem[];
15
+ /** What is on the right. Use with `onValueChange` for a controlled pair. */
16
+ value?: readonly string[];
17
+ /** What starts on the right, for an uncontrolled one. */
18
+ defaultValue?: readonly string[];
19
+ onValueChange?: (value: string[]) => void;
20
+ /** The heading over the left-hand list. Defaults to the `locale`'s word. */
21
+ sourceLabel?: React.ReactNode;
22
+ /** And over the right-hand one. */
23
+ targetLabel?: React.ReactNode;
24
+ /** Puts a filter above each list. @default false */
25
+ searchable?: boolean;
26
+ /** How tall each list is. A number of pixels or any CSS length. @default 220 */
27
+ height?: number | string;
28
+ /** Nothing can be ticked or moved. */
29
+ disabled?: boolean;
30
+ /**
31
+ * Which language the headings, the buttons and the filter are written in — a
32
+ * BCP 47 tag such as `ko`, `pt-BR` or `zh-Hant`. Unsupported tags fall back
33
+ * to English.
34
+ */
35
+ locale?: string;
36
+ }
37
+ /**
38
+ * Two lists and the arrows between them: everything that could be chosen on one
39
+ * side, everything that has been on the other.
40
+ *
41
+ * It is the shape for a choice that is *long* — the columns in a report, the
42
+ * permissions on a role, the people on a channel — where a
43
+ * [Combobox](./combobox) with forty chips in its field stops being readable and
44
+ * a list of forty checkboxes gives no answer to "what did I actually pick".
45
+ * Below about a dozen options, one of those two is the smaller component.
46
+ *
47
+ * The order of `items` is the order both lists show, so a row does not move when
48
+ * it is sent across and back. What ticks are for is choosing which rows to move;
49
+ * `value` is which side they are on, and the two are deliberately separate —
50
+ * ticking is not choosing.
51
+ */
52
+ export declare const Transfer: React.ForwardRefExoticComponent<TransferProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as e,jsxs as l}from"react/jsx-runtime";import*as a from"react";import{Checkbox as t}from"../checkbox/Checkbox.js";import{IconButton as s}from"../icon-button/IconButton.js";import{ScrollArea as r}from"../scroll-area/ScrollArea.js";import{TextField as i}from"../text-field/TextField.js";import{transferMessages as n,useMessages as o}from"../../internal/i18n.js";import{ArrowRightIcon as c}from"../../internal/icons.js";import{searchText as d}from"../../internal/search.js";import{cx as h,fieldRestClasses as m,hasContent as u,metaTextClasses as f,paddingXClasses as b,radiusClasses as p,surfaceSlots as g,toLength as v}from"../../internal/styles.js";const x={xs:"py-1",sm:"py-1.5",md:"py-2",lg:"py-2.5",xl:"py-3"},y={xs:"py-0.5",sm:"py-1",md:"py-1",lg:"py-1.5",xl:"py-2"};function k({title:a,rows:s,ticked:n,onTick:o,onTickAll:c,search:d,onSearch:h,searchable:u,disabled:v,height:k,emptyMessage:S,searchLabel:w,selectAllLabel:j,style:N}){const{size:$,variant:z="outline",color:A="primary",density:C="default"}=N,T=s.filter(e=>!e.disabled),L=T.filter(e=>n.has(e.value)),M=T.length>0&&L.length===T.length,V=L.length>0&&!M,_=b[C][$];return l("div",{className:["flex min-w-0 flex-col overflow-hidden",m[z],p[$]].join(" "),style:g(A,0),children:[l("div",{className:`flex items-center gap-2 border-b [border-color:var(--neba-border)] ${_} ${x[$]}`,children:[e(t,{size:$,color:A,checked:M,indeterminate:V,disabled:v||0===T.length,"aria-label":j,onCheckedChange:e=>c(!0===e)}),e("span",{className:`min-w-0 flex-1 truncate font-medium ${f[$]}`,children:a}),l("span",{className:`shrink-0 tabular-nums text-(--neba-muted-fg) ${f[$]}`,children:[L.length,"/",s.length]})]}),u?e("div",{className:`${_} ${x[$]}`,children:e(i,{size:$,color:A,density:C,fullWidth:!0,variant:"text",disabled:v,placeholder:w,"aria-label":w,value:d,onChange:e=>h(e.target.value)})}):null,e(r,{size:$,color:A,height:k,fade:!0,children:e("div",{className:`flex flex-col ${_} ${x[$]}`,children:0===s.length?e("span",{className:`text-(--neba-muted-fg) ${f[$]} ${y[$]}`,children:S}):s.map(l=>e(t,{size:$,color:A,className:y[$],label:l.label,checked:n.has(l.value),disabled:v||l.disabled,onCheckedChange:e=>o(l.value,!0===e)},l.value))})})]})}function S(e,l){const a=d(l);return""===a?e:e.filter(e=>"string"!=typeof e.label||d(e.label).includes(a))}export const Transfer=/*@__PURE__*/a.forwardRef(function({items:t,value:r,defaultValue:i,onValueChange:d,sourceLabel:m,targetLabel:f,searchable:b=!1,height:p=220,disabled:g=!1,locale:x,variant:y="outline",size:w="md",color:j="primary",density:N="default",className:$,...z},A){const C=o(n,x),[T,L]=a.useState(i??[]),M=r??T,[V,_]=a.useState(()=>new Set),[B,F]=a.useState(""),[I,R]=a.useState(""),W=a.useMemo(()=>new Set(M),[M]),q=a.useMemo(()=>t.filter(e=>!W.has(e.value)),[t,W]),D=a.useMemo(()=>t.filter(e=>W.has(e.value)),[t,W]),E=(e,l)=>{_(a=>{const t=new Set(a);return l?t.add(e):t.delete(e),t})},G=(e,l)=>{_(a=>{const t=new Set(a);for(const a of e)a.disabled||(l?t.add(a.value):t.delete(a.value));return t})},H=(e,l)=>{const a=e.filter(e=>!e.disabled&&V.has(e.value));if(0===a.length)return;const s=new Set(a.map(e=>e.value)),i=l?t.filter(e=>W.has(e.value)||s.has(e.value)).map(e=>e.value):M.filter(e=>!s.has(e));_(e=>new Set([...e].filter(e=>!s.has(e)))),(e=>{void 0===r&&L(e),d?.(e)})(i)},J=S(q,B),K=S(D,I),O=J.some(e=>!e.disabled&&V.has(e.value)),P=K.some(e=>!e.disabled&&V.has(e.value)),Q=v(p),U={variant:y,size:w,color:j,density:N};return l("div",{ref:A,className:h("grid w-full items-center gap-3","[grid-template-columns:minmax(0,1fr)_auto_minmax(0,1fr)]",$??""),...z,children:[e(k,{title:u(m)?m:C.source,rows:J,ticked:V,onTick:E,onTickAll:e=>G(J,e),search:B,onSearch:F,searchable:b,disabled:g,height:Q,emptyMessage:C.empty,searchLabel:C.search,selectAllLabel:C.selectAll,style:U}),l("div",{className:"flex flex-col gap-2",children:[e(s,{size:w,color:j,variant:"text"===y?"text":"outline",label:C.toTarget,disabled:g||!O,onClick:()=>H(J,!0),icon:e(c,{})}),e(s,{size:w,color:j,variant:"text"===y?"text":"outline",label:C.toSource,disabled:g||!P,onClick:()=>H(K,!1),icon:e("span",{className:"flex rotate-180",children:e(c,{})})})]}),e(k,{title:u(f)?f:C.target,rows:K,ticked:V,onTick:E,onTickAll:e=>G(K,e),search:I,onSearch:R,searchable:b,disabled:g,height:Q,emptyMessage:C.empty,searchLabel:C.search,selectAllLabel:C.selectAll,style:U})]})});
@@ -0,0 +1,2 @@
1
+ export { Transfer } from './Transfer.js';
2
+ export type { TransferItem, TransferProps } from './Transfer.js';
@@ -0,0 +1 @@
1
+ export{Transfer}from"./Transfer.js";
@@ -1 +1 @@
1
- import{jsx as e,Fragment as t,jsxs as r}from"react/jsx-runtime";import*as n from"react";import{ChevronIcon as a}from"../../internal/icons.js";import{controlTextClasses as l,cx as s,gapClasses as o,hasContent as i,iconClasses as c,radiusClasses as d,surfaceClasses as u,surfaceSlots as m,transitionClasses as f}from"../../internal/styles.js";const p=/*@__PURE__*/n.createContext({size:"md",density:"default",disabled:!1,expandedKeys:new Set,selectedKeys:new Set,activeKey:null,toggle:()=>{},select:()=>{},activate:()=>{},register:()=>()=>{}}),x={solid:[u,"text-(--neba-fg) bg-(--n-panel-hover)","[box-shadow:var(--n-elev),var(--neba-plate-solid)]"].join(" "),outline:[u,"border text-(--neba-fg) bg-(--n-panel)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]"].join(" "),text:"text-(--neba-fg) bg-transparent"},b={xs:"0.875rem",sm:"1rem",md:"1.25rem",lg:"1.5rem",xl:"1.75rem"},g={xs:"1.375rem",sm:"1.625rem",md:"2rem",lg:"2.5rem",xl:"3rem"},h={default:{xs:"px-1.5",sm:"px-2",md:"px-2.5",lg:"px-3",xl:"px-3.5"},compact:{xs:"px-1",sm:"px-1",md:"px-1.5",lg:"px-2",xl:"px-2.5"}},v={xs:"rounded-[0.3125rem]",sm:"rounded-[0.375rem]",md:"rounded-[0.5rem]",lg:"rounded-[0.625rem]",xl:"rounded-[0.75rem]"},w={none:"",simple:"neba-tree-simple",folder:"neba-tree-folder"};function y(e){return Array.from(e.querySelectorAll('[role="treeitem"]'))}const k=e=>String(e);export const TreeView=/*@__PURE__*/n.forwardRef(function({variant:t="outline",size:r="md",color:a="primary",density:l="default",elevation:o=0,lines:i="simple",expanded:c,defaultExpanded:u,onExpandedChange:h,selected:v,defaultSelected:C,onSelectedChange:N,multiple:S=!1,disabled:K=!1,label:j,className:A,style:D,children:R,onKeyDown:E,...I},P){const[V,z]=n.useState(u??[]),[_,L]=n.useState(C??[]),[M,T]=n.useState(null),q=c??V,F=v??_,H=n.useRef(null),O=n.useCallback(e=>{H.current=e,"function"==typeof P?P(e):P&&(P.current=e)},[P]),U=n.useCallback(e=>{const t=k(e),r=c??V,n=r.some(e=>k(e)===t)?r.filter(e=>k(e)!==t):[...r,e];void 0===c&&z(n),h?.(n)},[c,V,h]),B=n.useCallback(e=>{const t=k(e),r=v??_,n=r.some(e=>k(e)===t),a=S?n?r.filter(e=>k(e)!==t):[...r,e]:[e];void 0===v&&L(a),N?.(a)},[S,v,_,N]),G=n.useRef(new Map),J=n.useCallback((e,t)=>(G.current.set(e,t),()=>{G.current.delete(e)}),[]),Q=q.map(k).join("\0"),W=F.map(k).join("\0"),X=n.useMemo(()=>({size:r,density:l,disabled:K,expandedKeys:new Set(q.map(k)),selectedKeys:new Set(F.map(k)),activeKey:M,toggle:U,select:B,activate:T,register:J}),[r,l,K,Q,W,M,U,B,J]);n.useEffect(()=>{const e=H.current;if(!e)return;const t=y(e);0!==t.length&&(null!==M&&t.some(e=>e.dataset.nebaValue===M)||T(t[0].dataset.nebaValue??null))});const Y=s("flex list-none flex-col p-1",d[r],x[t],f,w[i],A);return e(p.Provider,{value:X,children:e("ul",{ref:O,role:"tree","aria-label":j,"aria-multiselectable":S||void 0,className:Y,style:{...m(a,o),"--n-tree-indent":b[r],"--n-tree-row":g[r],...D},onKeyDown:function(e){if(E?.(e),e.defaultPrevented)return;const t=H.current,r=e.target?.closest?.('[role="treeitem"]');if(!t||!r||!t.contains(r))return;const n=y(t),a=n.indexOf(r);if(-1===a)return;const l=t=>{t&&(e.preventDefault(),T(t.dataset.nebaValue??null),t.focus())},s=e=>{const t=e.dataset.nebaValue;t&&G.current.get(t)?.toggle()},o="rtl"===getComputedStyle(t).direction,i=o?"ArrowLeft":"ArrowRight",c=o?"ArrowRight":"ArrowLeft",d=r.getAttribute("aria-expanded");switch(e.key){case"ArrowDown":l(n[a+1]);break;case"ArrowUp":l(n[a-1]);break;case"Home":l(n[0]);break;case"End":l(n[n.length-1]);break;case i:"false"===d?(e.preventDefault(),s(r)):"true"===d&&l(n[a+1]);break;case c:"true"===d?(e.preventDefault(),s(r)):l(r.parentElement?.closest('[role="treeitem"]'));break;case"Enter":case" ":e.preventDefault(),r.click()}},...I,children:R})})});export const TreeItem=/*@__PURE__*/n.forwardRef(function({value:d,label:u,startIcon:m,endIcon:x,action:b,href:g,expandable:w,disabled:y=!1,className:C,children:N,onClick:S,...K},j){const{size:A,density:D,disabled:R,expandedKeys:E,selectedKeys:I,activeKey:P,toggle:V,select:z,activate:_,register:L}=n.useContext(p),M=n.useId(),T=d??M,q=k(T),F=n.useRef(null),H=n.useCallback(e=>{F.current=e,"function"==typeof j?j(e):j&&(j.current=e)},[j]),O=n.Children.toArray(N),U=w??O.length>0,B=U&&E.has(q),G=I.has(q),J=y||R,Q=n.useRef({toggle:()=>{}});Q.current.toggle=()=>{!J&&U&&V(T)},n.useEffect(()=>L(q,Q.current),[q,L]);const W=s("flex min-w-0 flex-1 cursor-pointer items-center text-start","h-(--n-tree-row)",h[D][A],v[A],o[A],l[A],f,c,"group-focus-visible/tree-item:[outline:2px_solid_var(--n-ring)]","group-focus-visible/tree-item:outline-offset-[-2px]",J?"cursor-not-allowed text-(--neba-disabled-fg)":G?"bg-(--n-soft-press) font-medium text-(--n-accent) hover:bg-(--n-soft-press)":"hover:bg-(--n-soft)"),X=r(t,{children:[e("span",{"aria-hidden":"true",onClick:e=>{!J&&U&&(e.stopPropagation(),e.preventDefault(),F.current?.focus(),_(q),V(T))},className:s("flex h-[1lh] w-[1.15em] shrink-0 items-center justify-center","[transition:rotate_var(--neba-duration)_var(--neba-ease)]",U?"text-(--neba-muted-fg)":"",B?"rotate-0":"-rotate-90 rtl:rotate-90"),children:U?e(a,{}):null}),i(m)?e("span",{className:"flex h-[1lh] shrink-0 items-center text-(--neba-muted-fg)",children:m}):null,e("span",{className:"min-w-0 flex-1 truncate",children:u}),i(x)?e("span",{className:"flex h-[1lh] shrink-0 items-center text-(--neba-muted-fg)",children:x}):null]});return r("li",{ref:H,role:"treeitem","aria-expanded":U?B:void 0,"aria-selected":!!G||void 0,"aria-disabled":J||void 0,"data-neba-value":q,tabIndex:P===q?0:-1,className:s("group/tree-item relative block [outline:none]",C),onClick:function(e){e.stopPropagation(),J?e.preventDefault():(F.current?.focus(),_(q),S?.(e),e.defaultPrevented||(U&&V(T),z(T)))},...K,children:[r("div",{className:"flex w-full items-center",children:[g&&!J?e("a",{href:g,tabIndex:-1,className:W,"aria-current":G?"page":void 0,children:X}):e("div",{className:W,children:X}),i(b)?e("span",{className:s("flex shrink-0 items-center",h[D][A]),onClick:e=>e.stopPropagation(),children:b}):null]}),U&&B&&O.length>0?e("ul",{role:"group",className:"list-none ps-(--n-tree-indent)",children:N}):null]})});
1
+ "use client";import{jsx as e,Fragment as t,jsxs as r}from"react/jsx-runtime";import*as n from"react";import{ChevronIcon as a}from"../../internal/icons.js";import{controlTextClasses as l,cx as s,gapClasses as o,hasContent as i,iconClasses as c,radiusClasses as d,surfaceClasses as u,surfaceSlots as m,transitionClasses as f}from"../../internal/styles.js";const p=/*@__PURE__*/n.createContext({size:"md",density:"default",disabled:!1,expandedKeys:new Set,selectedKeys:new Set,activeKey:null,toggle:()=>{},select:()=>{},activate:()=>{},register:()=>()=>{}}),x={solid:[u,"text-(--neba-fg) bg-(--n-panel-hover)","[box-shadow:var(--n-elev),var(--neba-plate-solid)]"].join(" "),outline:[u,"border text-(--neba-fg) bg-(--n-panel)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]"].join(" "),text:"text-(--neba-fg) bg-transparent"},g={xs:"0.875rem",sm:"1rem",md:"1.25rem",lg:"1.5rem",xl:"1.75rem"},b={xs:"1.375rem",sm:"1.625rem",md:"2rem",lg:"2.5rem",xl:"3rem"},h={default:{xs:"px-1.5",sm:"px-2",md:"px-2.5",lg:"px-3",xl:"px-3.5"},compact:{xs:"px-1",sm:"px-1",md:"px-1.5",lg:"px-2",xl:"px-2.5"}},v={xs:"rounded-[0.3125rem]",sm:"rounded-[0.375rem]",md:"rounded-[0.5rem]",lg:"rounded-[0.625rem]",xl:"rounded-[0.75rem]"},w={none:"",simple:"neba-tree-simple",folder:"neba-tree-folder"};function y(e){return Array.from(e.querySelectorAll('[role="treeitem"]'))}const k=e=>String(e);export const TreeView=/*@__PURE__*/n.forwardRef(function({variant:t="outline",size:r="md",color:a="primary",density:l="default",elevation:o=0,lines:i="simple",expanded:c,defaultExpanded:u,onExpandedChange:h,selected:v,defaultSelected:C,onSelectedChange:N,multiple:S=!1,disabled:K=!1,label:j,className:A,style:D,children:R,onKeyDown:E,...I},P){const[z,M]=n.useState(u??[]),[V,_]=n.useState(C??[]),[L,T]=n.useState(null),q=c??z,F=v??V,H=n.useRef(null),O=n.useCallback(e=>{H.current=e,"function"==typeof P?P(e):P&&(P.current=e)},[P]),U=n.useCallback(e=>{const t=k(e),r=c??z,n=r.some(e=>k(e)===t)?r.filter(e=>k(e)!==t):[...r,e];void 0===c&&M(n),h?.(n)},[c,z,h]),B=n.useCallback(e=>{const t=k(e),r=v??V,n=r.some(e=>k(e)===t),a=S?n?r.filter(e=>k(e)!==t):[...r,e]:[e];void 0===v&&_(a),N?.(a)},[S,v,V,N]),G=n.useRef(new Map),J=n.useCallback((e,t)=>(G.current.set(e,t),()=>{G.current.delete(e)}),[]),Q=n.useMemo(()=>q.map(k).join("\0"),[q]),W=n.useMemo(()=>F.map(k).join("\0"),[F]),X=n.useMemo(()=>({size:r,density:l,disabled:K,expandedKeys:new Set(q.map(k)),selectedKeys:new Set(F.map(k)),activeKey:L,toggle:U,select:B,activate:T,register:J}),[r,l,K,Q,W,L,U,B,J]);n.useEffect(()=>{if(null!==L&&G.current.has(L))return;const e=H.current;if(!e)return;const t=y(e);0!==t.length&&T(t[0].dataset.nebaValue??null)});const Y=s("flex list-none flex-col p-1",d[r],x[t],f,w[i],A);return e(p.Provider,{value:X,children:e("ul",{ref:O,role:"tree","aria-label":j,"aria-multiselectable":S||void 0,className:Y,style:{...m(a,o),"--n-tree-indent":g[r],"--n-tree-row":b[r],...D},onKeyDown:function(e){if(E?.(e),e.defaultPrevented)return;const t=H.current,r=e.target?.closest?.('[role="treeitem"]');if(!t||!r||!t.contains(r))return;const n=y(t),a=n.indexOf(r);if(-1===a)return;const l=t=>{t&&(e.preventDefault(),T(t.dataset.nebaValue??null),t.focus())},s=e=>{const t=e.dataset.nebaValue;t&&G.current.get(t)?.toggle()},o="rtl"===getComputedStyle(t).direction,i=o?"ArrowLeft":"ArrowRight",c=o?"ArrowRight":"ArrowLeft",d=r.getAttribute("aria-expanded");switch(e.key){case"ArrowDown":l(n[a+1]);break;case"ArrowUp":l(n[a-1]);break;case"Home":l(n[0]);break;case"End":l(n[n.length-1]);break;case i:"false"===d?(e.preventDefault(),s(r)):"true"===d&&l(n[a+1]);break;case c:"true"===d?(e.preventDefault(),s(r)):l(r.parentElement?.closest('[role="treeitem"]'));break;case"Enter":case" ":e.preventDefault(),r.click()}},...I,children:R})})});export const TreeItem=/*@__PURE__*/n.forwardRef(function({value:d,label:u,startIcon:m,endIcon:x,action:g,href:b,expandable:w,disabled:y=!1,className:C,children:N,onClick:S,...K},j){const{size:A,density:D,disabled:R,expandedKeys:E,selectedKeys:I,activeKey:P,toggle:z,select:M,activate:V,register:_}=n.useContext(p),L=n.useId(),T=d??L,q=k(T),F=n.useRef(null),H=n.useCallback(e=>{F.current=e,"function"==typeof j?j(e):j&&(j.current=e)},[j]),O=n.Children.toArray(N),U=w??O.length>0,B=U&&E.has(q),G=I.has(q),J=y||R,Q=n.useRef({toggle:()=>{}});Q.current.toggle=()=>{!J&&U&&z(T)},n.useEffect(()=>_(q,Q.current),[q,_]);const W=s("flex min-w-0 flex-1 cursor-pointer items-center text-start","h-(--n-tree-row)",h[D][A],v[A],o[A],l[A],f,c,"group-focus-visible/tree-item:[outline:2px_solid_var(--n-ring)]","group-focus-visible/tree-item:outline-offset-[-2px]",J?"cursor-not-allowed text-(--neba-disabled-fg)":G?"bg-(--n-soft-press) font-medium text-(--n-accent) hover:bg-(--n-soft-press)":"hover:bg-(--n-soft)"),X=r(t,{children:[e("span",{"aria-hidden":"true",onClick:e=>{!J&&U&&(e.stopPropagation(),e.preventDefault(),F.current?.focus(),V(q),z(T))},className:s("flex h-[1lh] w-[1.15em] shrink-0 items-center justify-center","[transition:rotate_var(--neba-duration)_var(--neba-ease)]",U?"text-(--neba-muted-fg)":"",B?"rotate-0":"-rotate-90 rtl:rotate-90"),children:U?e(a,{}):null}),i(m)?e("span",{className:"flex h-[1lh] shrink-0 items-center text-(--neba-muted-fg)",children:m}):null,e("span",{className:"min-w-0 flex-1 truncate",children:u}),i(x)?e("span",{className:"flex h-[1lh] shrink-0 items-center text-(--neba-muted-fg)",children:x}):null]});return r("li",{ref:H,role:"treeitem","aria-expanded":U?B:void 0,"aria-selected":!!G||void 0,"aria-disabled":J||void 0,"data-neba-value":q,tabIndex:P===q?0:-1,className:s("group/tree-item relative block [outline:none]",C),onClick:function(e){e.stopPropagation(),J?e.preventDefault():(F.current?.focus(),V(q),S?.(e),e.defaultPrevented||(U&&z(T),M(T)))},...K,children:[r("div",{className:"flex w-full items-center",children:[b&&!J?e("a",{href:b,tabIndex:-1,className:W,"aria-current":G?"page":void 0,children:X}):e("div",{className:W,children:X}),i(g)?e("span",{className:s("flex shrink-0 items-center",h[D][A]),onClick:e=>e.stopPropagation(),children:g}):null]}),U&&B&&O.length>0?e("ul",{role:"group",className:"list-none ps-(--n-tree-indent)",children:N}):null]})});
@@ -1 +1 @@
1
- import*as e from"react";import{useRender as t}from"@base-ui/react/use-render";import{transitionProps as r}from"../../internal/animate.js";const m={h1:"text-[1.875rem]/[2.25rem] tracking-[-0.02em]",h2:"text-[1.5rem]/[1.875rem] tracking-[-0.015em]",h3:"text-[1.25rem]/[1.625rem] tracking-[-0.01em]",h4:"text-[1.0625rem]/[1.5rem]",h5:"text-[0.9375rem]/[1.375rem]",h6:"text-[0.8125rem]/[1.25rem]",lead:"text-[1.0625rem]/[1.75rem]",body:"text-[0.8125rem]/[1.375rem]",caption:"text-[0.75rem]/[1.125rem]",overline:"text-[0.6875rem]/[1rem] tracking-[0.08em] uppercase"},n={h1:"semibold",h2:"semibold",h3:"semibold",h4:"semibold",h5:"semibold",h6:"semibold",lead:"regular",body:"regular",caption:"regular",overline:"medium"},a={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",lead:"p",body:"p",caption:"span",overline:"span"},l=new Set(["caption","overline"]),o={h1:"mb-4",h2:"mb-3.5",h3:"mb-3",h4:"mb-2.5",h5:"mb-2",h6:"mb-2",lead:"mb-4",body:"mb-3",caption:"mb-2",overline:"mb-2"},i={regular:"font-normal",medium:"font-medium",semibold:"font-semibold",bold:"font-bold"},c={start:"text-start",center:"text-center",end:"text-end",justify:"text-justify"},s={1:"truncate",2:"line-clamp-2",3:"line-clamp-3",4:"line-clamp-4",5:"line-clamp-5",6:"line-clamp-6"};export const Typography=/*@__PURE__*/e.forwardRef(function({level:h="body",color:d,weight:b,align:p,lines:x,gutter:u=!1,transition:f,render:g,className:y,style:v,children:j,...k},w){const N=r(f),B=[m[h],i[b??n[h]],p?c[p]:"",x?s[x]??"line-clamp-6":"",u?o[h]:"",d?"text-(--n-accent)":l.has(h)?"text-(--neba-muted-fg)":"text-(--neba-fg)",N.className,y??""].filter(Boolean).join(" ");return t({render:g??e.createElement(a[h]),ref:w,props:{className:B,style:d?{"--n-accent":`var(--neba-${d}-accent)`,...N.style,...v}:{...N.style,...v},children:j,...k}})});
1
+ "use client";import*as e from"react";import{useRender as t}from"@base-ui/react/use-render";import{transitionProps as r}from"../../internal/animate.js";import{cx as m}from"../../internal/styles.js";const n={h1:"text-[1.875rem]/[2.25rem] tracking-[-0.02em]",h2:"text-[1.5rem]/[1.875rem] tracking-[-0.015em]",h3:"text-[1.25rem]/[1.625rem] tracking-[-0.01em]",h4:"text-[1.0625rem]/[1.5rem]",h5:"text-[0.9375rem]/[1.375rem]",h6:"text-[0.8125rem]/[1.25rem]",lead:"text-[1.0625rem]/[1.75rem]",body:"text-[0.8125rem]/[1.375rem]",caption:"text-[0.75rem]/[1.125rem]",overline:"text-[0.6875rem]/[1rem] tracking-[0.08em] uppercase"},a={h1:"semibold",h2:"semibold",h3:"semibold",h4:"semibold",h5:"semibold",h6:"semibold",lead:"regular",body:"regular",caption:"regular",overline:"medium"},l={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",lead:"p",body:"p",caption:"span",overline:"span"},i=new Set(["caption","overline"]),o={h1:"mb-4",h2:"mb-3.5",h3:"mb-3",h4:"mb-2.5",h5:"mb-2",h6:"mb-2",lead:"mb-4",body:"mb-3",caption:"mb-2",overline:"mb-2"},s={regular:"font-normal",medium:"font-medium",semibold:"font-semibold",bold:"font-bold"},c={start:"text-start",center:"text-center",end:"text-end",justify:"text-justify"},h={1:"truncate",2:"line-clamp-2",3:"line-clamp-3",4:"line-clamp-4",5:"line-clamp-5",6:"line-clamp-6"};export const Typography=/*@__PURE__*/e.forwardRef(function({level:d="body",color:b,weight:p,align:u,lines:x,gutter:f=!1,transition:g,render:y,className:v,style:j,children:k,...w},N){const E=r(g),R=m(n[d],s[p??a[d]],u?c[u]:"",x?h[x]??"line-clamp-6":"",f?o[d]:"",b?"text-(--n-accent)":i.has(d)?"text-(--neba-muted-fg)":"text-(--neba-fg)",E.className,v??"");return t({render:y??e.createElement(l[d]),ref:N,props:{className:R,style:b?{"--n-accent":`var(--neba-${b}-accent)`,...E.style,...j}:{...E.style,...j},children:k,...w}})});
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t,Fragment as n}from"react/jsx-runtime";import*as i from"react";import{useRender as r}from"@base-ui/react/use-render";import{actionMessages as o,useMessages as s,windowMessages as a}from"../../internal/i18n.js";import{cx as l,hasContent as d,iconClasses as c,surfaceClasses as u}from"../../internal/styles.js";import{WindowControls as m,orderControls as h,windowChrome as g,windowMetrics as w,windowSlots as f}from"../../internal/window.js";function p(e,t,n){const[r,o]=i.useState(t),s=void 0!==e;return[s?e:r,i.useCallback(e=>{s||o(e),n?.(e)},[s,n])]}const b=[{edge:"n",className:"inset-x-3 top-0 h-1.5 cursor-ns-resize"},{edge:"s",className:"inset-x-3 bottom-0 h-1.5 cursor-ns-resize"},{edge:"w",className:"inset-y-3 left-0 w-1.5 cursor-ew-resize"},{edge:"e",className:"inset-y-3 right-0 w-1.5 cursor-ew-resize"},{edge:"nw",className:"top-0 left-0 size-3 cursor-nwse-resize"},{edge:"ne",className:"top-0 right-0 size-3 cursor-nesw-resize"},{edge:"sw",className:"bottom-0 left-0 size-3 cursor-nesw-resize"},{edge:"se",className:"right-0 bottom-0 size-3 cursor-nwse-resize"}];export const WindowPane=/*@__PURE__*/i.forwardRef(function({os:v="macos",title:x,icon:y,actions:z,controls:E=!0,size:N="md",color:k="primary",accent:C=!1,transparency:L=0,active:M,elevation:S=2,position:P="static",draggable:R=!1,resizable:I=!1,width:j,height:B,minWidth:D=180,minHeight:A,offset:T,defaultOffset:H,onOffsetChange:W,onResize:O,open:X,defaultOpen:$=!0,onOpenChange:F,minimized:Y,defaultMinimized:_=!1,onMinimizedChange:q,maximized:K,defaultMaximized:U=!1,onMaximizedChange:V,scroll:G=!0,locale:J,minimizeLabel:Q,maximizeLabel:Z,restoreLabel:ee,closeLabel:te,resizeLabel:ne,render:ie,className:re,style:oe,children:se,...ae},le){const de=s(a,J),ce=s(o,J),ue=g(v),me=w(v,N),he=i.useId(),[ge,we]=p(X,$,F),[fe,pe]=p(Y,_,q),[be,ve]=p(K,U,V),[xe,ye]=p(T,H??{x:0,y:0},W),[ze,Ee]=i.useState(null),[Ne,ke]=i.useState(!0),Ce=M??Ne,[Le,Me]=i.useState(null),[Se,Pe]=i.useState(null),[Re,Ie]=i.useState(!1),[je,Be]=i.useState(!1),[De,Ae]=i.useState(ge);De!==ge&&(Ae(ge),Be(!ge)),i.useEffect(()=>{if(!je)return;const e=window.setTimeout(()=>Be(!1),260);return()=>window.clearTimeout(e)},[je]);const Te=i.useRef(null),He=i.useCallback(e=>{Te.current=e,"function"==typeof le?le(e):le&&(le.current=e)},[le]);i.useEffect(()=>{if(void 0!==M)return;const e=Te.current;if(!e)return;const t=t=>{const n=t.target;if(!(n instanceof Node))return;if(e.contains(n))return void ke(!0);const i=n instanceof Element?n:n.parentElement;i?.closest(".neba-window")&&ke(!1)};return document.addEventListener("pointerdown",t,!0),document.addEventListener("focusin",t,!0),()=>{document.removeEventListener("pointerdown",t,!0),document.removeEventListener("focusin",t,!0)}},[M]);const We=i.useRef(null);function Oe(e,t){if(0!==e.button)return;We.current?.();const n=e.currentTarget;n.setPointerCapture(e.pointerId),n.dataset.dragging="true",Ie(!0);const i=e.clientX,r=e.clientY,o=document.body.style.getPropertyValue("-webkit-user-select");document.body.style.setProperty("-webkit-user-select","none");const s=e=>{t(e.clientX-i,e.clientY-r)},a=()=>{We.current=null,Ie(!1),n.removeEventListener("pointermove",s),n.removeEventListener("pointerup",a),n.removeEventListener("pointercancel",a),delete n.dataset.dragging,o?document.body.style.setProperty("-webkit-user-select",o):document.body.style.removeProperty("-webkit-user-select")};We.current=a,n.addEventListener("pointermove",s),n.addEventListener("pointerup",a),n.addEventListener("pointercancel",a)}i.useEffect(()=>()=>We.current?.(),[]);const Xe={width:Math.max(0,D),height:Math.max(me.bar,A??me.bar)};function $e(e){Ee(e),O?.(e)}const Fe=h(v,!0===E?["minimize","maximize","close"]:!1===E?[]:E),Ye=Fe.includes("maximize");i.useEffect(()=>{if(fe||null===Se)return;const e=window.setTimeout(()=>Pe(null),400);return()=>window.clearTimeout(e)},[fe,Se]);const _e={minimize:Q??de.minimize,maximize:Z??de.maximize,restore:ee??de.restore,close:te??ce.close},qe=e(m,{os:v,metrics:me,controls:Fe,maximized:be,active:Ce,labels:_e,onCommand:function(e){"close"===e?we(!1):"minimize"===e?function(e){const t=Te.current,n=t?.firstElementChild;if(t&&n instanceof HTMLElement&&Me(n.offsetHeight+(t.offsetHeight-t.clientHeight)),e&&void 0===(ze?.height??B)&&t)return Pe(t.getBoundingClientRect().height),void requestAnimationFrame(()=>pe(!0));pe(e)}(!fe):ve(!be)}}),Ke=d(x)?e("span",{id:he,className:"min-w-0 truncate",children:x}):null,Ue=d(y)?e("span",{className:"flex shrink-0 items-center",children:y}):null,Ve=t("div",{className:l("relative flex shrink-0 items-center select-none",c,R&&!be?"cursor-grab active:cursor-grabbing":""),style:{height:me.bar,textShadow:"var(--n-window-bar-shadow)",fontWeight:me.weight,paddingInlineStart:me.padX,paddingInlineEnd:me.padEnd,gap:Math.round(.7*me.title),fontSize:me.title,backgroundColor:"var(--n-window-bar)",backgroundImage:"var(--n-window-bar-image)",color:"var(--n-window-bar-fg)",borderBlockEnd:ue.rule?"1px solid var(--n-window-line)":void 0},onPointerDown:function(e){if(!R||be)return;const t={...xe};Oe(e,(e,n)=>ye({x:t.x+e,y:t.y+n}))},onDoubleClick:Ye?()=>ve(!be):void 0,children:["start"===ue.controlsSide?qe:null,"center"===ue.titleAlign?e("span",{"aria-hidden":"true",className:"pointer-events-none absolute inset-x-0 flex items-center justify-center",style:{paddingInline:me.controlsWidth(Fe.length)+2*me.padX},children:t("span",{className:"flex min-w-0 items-center",style:{gap:Math.round(.5*me.title)},children:[Ue,Ke]})}):t(n,{children:[Ue,Ke]}),e("span",{className:"flex-1"}),d(z)?e("span",{className:"flex shrink-0 items-center",style:{gap:Math.round(.5*me.title)},onPointerDown:e=>e.stopPropagation(),children:z}):null,"end"===ue.controlsSide?qe:null]}),Ge=be?{left:0,top:0,width:"100%",height:"100%"}:{left:xe.x,top:xe.y,width:ze?.width??j,height:fe?Le??me.bar:ze?.height??B??Se??void 0},Je=r({render:ie,ref:He,props:{role:"group","aria-labelledby":Ke?he:void 0,className:l("neba-window relative flex min-w-0 flex-col overflow-hidden",L>0?u:"",ue.glass&&0===L?"[backdrop-filter:var(--neba-blur)]":"","[transition-property:left,top,width,height,opacity,box-shadow,background-color,border-color,border-radius]","[transition-duration:var(--neba-duration-window)]","[transition-timing-function:var(--neba-ease)]","motion-reduce:[transition-duration:0ms]","data-[gesture]:[transition-property:none]",re),"data-gesture":Re?"":void 0,inert:!ge||void 0,style:{opacity:ge?void 0:0,...f({os:v,color:k,accent:C,transparency:L,active:Ce,elevation:S}),position:"static"===P?"relative":P,...Ge,borderRadius:be?0:`${me.radius}px ${me.radius}px ${me.radiusBottom}px ${me.radiusBottom}px`,borderStyle:"solid",borderWidth:me.frame,borderColor:"var(--n-window-line)",backgroundColor:"var(--n-window-band)",boxShadow:"var(--n-window-shadow), var(--neba-plate-glass)",...oe},children:t(n,{children:[Ve,e("div",{className:l("min-h-0 flex-1",G?"overflow-auto":"overflow-hidden"),style:{backgroundColor:"var(--n-window-body)",marginInline:me.band.side,marginBottom:me.band.bottom,boxShadow:me.band.side>0?"inset 0 0 0 1px rgb(0 0 0 / 0.12)":void 0},inert:fe,children:se}),!I||be||fe?null:b.map(t=>{const n="se"===t.edge;return e("div",{role:n?"button":void 0,tabIndex:n?0:void 0,"aria-label":n?ne??de.resize:void 0,"aria-hidden":n?void 0:"true",className:l("absolute z-10 touch-none",t.className,n?"focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:[outline-offset:-2px]":""),onPointerDown:e=>function(e,t){const n=Te.current;if(!n||be)return;const i=n.getBoundingClientRect(),r={width:i.width,height:i.height,x:xe.x,y:xe.y},o=e.includes("e"),s=e.includes("w"),a=e.includes("n"),l=e.includes("s");Oe(t,(e,t)=>{let{width:n,height:i}=r,{x:d,y:c}=r;o&&(n=Math.max(Xe.width,r.width+e)),l&&(i=Math.max(Xe.height,r.height+t)),s&&(n=Math.max(Xe.width,r.width-e),d=r.x+(r.width-n)),a&&(i=Math.max(Xe.height,r.height-t),c=r.y+(r.height-i)),$e({width:n,height:i}),(s||a)&&ye({x:d,y:c})})}(t.edge,e),onKeyDown:n?e=>{const t={ArrowRight:[16,0],ArrowLeft:[-16,0],ArrowDown:[0,16],ArrowUp:[0,-16]}[e.key];t&&(e.preventDefault(),function(e,t){const n=Te.current;if(!n)return;const i=n.getBoundingClientRect();$e({width:Math.max(Xe.width,i.width+e),height:Math.max(Xe.height,i.height+t)})}(t[0],t[1]))}:void 0},t.edge)})]}),...ae}});return ge||je?Je:null});
1
+ "use client";import{jsx as e,jsxs as t,Fragment as n}from"react/jsx-runtime";import*as i from"react";import{useRender as o}from"@base-ui/react/use-render";import{beginPointerDrag as r}from"../../internal/drag.js";import{actionMessages as a,useMessages as s,windowMessages as l}from"../../internal/i18n.js";import{cx as d,hasContent as c,iconClasses as u,surfaceClasses as m}from"../../internal/styles.js";import{WindowControls as h,orderControls as f,windowChrome as w,windowMetrics as g,windowSlots as p}from"../../internal/window.js";function b(e,t,n){const[o,r]=i.useState(t),a=void 0!==e;return[a?e:o,i.useCallback(e=>{a||r(e),n?.(e)},[a,n])]}const v=[{edge:"n",className:"inset-x-3 top-0 h-1.5 cursor-ns-resize"},{edge:"s",className:"inset-x-3 bottom-0 h-1.5 cursor-ns-resize"},{edge:"w",className:"inset-y-3 left-0 w-1.5 cursor-ew-resize"},{edge:"e",className:"inset-y-3 right-0 w-1.5 cursor-ew-resize"},{edge:"nw",className:"top-0 left-0 size-3 cursor-nwse-resize"},{edge:"ne",className:"top-0 right-0 size-3 cursor-nesw-resize"},{edge:"sw",className:"bottom-0 left-0 size-3 cursor-nesw-resize"},{edge:"se",className:"right-0 bottom-0 size-3 cursor-nwse-resize"}];export const WindowPane=/*@__PURE__*/i.forwardRef(function({os:x="macos",title:z,icon:y,actions:N,controls:M=!0,size:C="md",color:E="primary",accent:S=!1,transparency:k=0,active:L,elevation:I=2,position:R="static",draggable:j=!1,resizable:B=!1,width:D,height:A,minWidth:T=180,minHeight:H,offset:P,defaultOffset:W,onOffsetChange:O,onResize:X,open:$,defaultOpen:F=!0,onOpenChange:Y,minimized:_,defaultMinimized:q=!1,onMinimizedChange:K,maximized:U,defaultMaximized:G=!1,onMaximizedChange:J,scroll:Q=!0,locale:V,minimizeLabel:Z,maximizeLabel:ee,restoreLabel:te,closeLabel:ne,resizeLabel:ie,render:oe,className:re,style:ae,children:se,...le},de){const ce=s(l,V),ue=s(a,V),me=w(x),he=g(x,C),fe=i.useId(),[we,ge]=b($,F,Y),[pe,be]=b(_,q,K),[ve,xe]=b(U,G,J),[ze,ye]=b(P,W??{x:0,y:0},O),[Ne,Me]=i.useState(null),[Ce,Ee]=i.useState(!0),Se=L??Ce,[ke,Le]=i.useState(null),[Ie,Re]=i.useState(null),[je,Be]=i.useState(!1),[De,Ae]=i.useState(!1),[Te,He]=i.useState(we);Te!==we&&(He(we),Ae(!we)),i.useEffect(()=>{if(!De)return;const e=window.setTimeout(()=>Ae(!1),260);return()=>window.clearTimeout(e)},[De]);const Pe=i.useRef(null),We=i.useCallback(e=>{Pe.current=e,"function"==typeof de?de(e):de&&(de.current=e)},[de]);i.useEffect(()=>{if(void 0!==L)return;const e=Pe.current;if(!e)return;const t=t=>{const n=t.target;if(!(n instanceof Node))return;if(e.contains(n))return void Ee(!0);const i=n instanceof Element?n:n.parentElement;i?.closest(".neba-window")&&Ee(!1)};return document.addEventListener("pointerdown",t,!0),document.addEventListener("focusin",t,!0),()=>{document.removeEventListener("pointerdown",t,!0),document.removeEventListener("focusin",t,!0)}},[L]);const Oe=i.useRef(null);function Xe(e,t){if(0!==e.button)return;Oe.current?.();const n=e.currentTarget,i=e.clientX,o=e.clientY;Be(!0);const a=()=>{Oe.current=null,Be(!1)},s=r({target:n,pointerId:e.pointerId,onMove:e=>t(e.clientX-i,e.clientY-o),onEnd:a});Oe.current=()=>{s(),a()}}i.useEffect(()=>()=>Oe.current?.(),[]);const $e={width:Math.max(0,T),height:Math.max(he.bar,H??he.bar)};function Fe(e){Me(e),X?.(e)}const Ye=f(x,!0===M?["minimize","maximize","close"]:!1===M?[]:M),_e=Ye.includes("maximize");i.useEffect(()=>{if(pe||null===Ie)return;const e=window.setTimeout(()=>Re(null),400);return()=>window.clearTimeout(e)},[pe,Ie]);const qe={minimize:Z??ce.minimize,maximize:ee??ce.maximize,restore:te??ce.restore,close:ne??ue.close},Ke=e(h,{os:x,metrics:he,controls:Ye,maximized:ve,active:Se,labels:qe,onCommand:function(e){"close"===e?ge(!1):"minimize"===e?function(e){const t=Pe.current,n=t?.firstElementChild;if(t&&n instanceof HTMLElement&&Le(n.offsetHeight+(t.offsetHeight-t.clientHeight)),e&&void 0===(Ne?.height??A)&&t)return Re(t.getBoundingClientRect().height),void requestAnimationFrame(()=>be(!0));be(e)}(!pe):xe(!ve)}}),Ue=c(z)?e("span",{id:fe,className:"min-w-0 truncate",children:z}):null,Ge=c(y)?e("span",{className:"flex shrink-0 items-center",children:y}):null,Je=t("div",{className:d("relative flex shrink-0 items-center select-none",u,j&&!ve?"cursor-grab active:cursor-grabbing":""),style:{height:he.bar,textShadow:"var(--n-window-bar-shadow)",fontWeight:he.weight,paddingInlineStart:he.padX,paddingInlineEnd:he.padEnd,gap:Math.round(.7*he.title),fontSize:he.title,backgroundColor:"var(--n-window-bar)",backgroundImage:"var(--n-window-bar-image)",color:"var(--n-window-bar-fg)",borderBlockEnd:me.rule?"1px solid var(--n-window-line)":void 0},onPointerDown:function(e){if(!j||ve)return;const t={...ze};Xe(e,(e,n)=>ye({x:t.x+e,y:t.y+n}))},onDoubleClick:_e?()=>xe(!ve):void 0,children:["start"===me.controlsSide?Ke:null,"center"===me.titleAlign?e("span",{"aria-hidden":"true",className:"pointer-events-none absolute inset-x-0 flex items-center justify-center",style:{paddingInline:he.controlsWidth(Ye.length)+2*he.padX},children:t("span",{className:"flex min-w-0 items-center",style:{gap:Math.round(.5*he.title)},children:[Ge,Ue]})}):t(n,{children:[Ge,Ue]}),e("span",{className:"flex-1"}),c(N)?e("span",{className:"flex shrink-0 items-center",style:{gap:Math.round(.5*he.title)},onPointerDown:e=>e.stopPropagation(),children:N}):null,"end"===me.controlsSide?Ke:null]}),Qe=ve?{left:0,top:0,width:"100%",height:"100%"}:{left:ze.x,top:ze.y,width:Ne?.width??D,height:pe?ke??he.bar:Ne?.height??A??Ie??void 0},Ve=o({render:oe,ref:We,props:{role:"group","aria-labelledby":Ue?fe:void 0,className:d("neba-window relative flex min-w-0 flex-col overflow-hidden",k>0?m:"",me.glass&&0===k?"[backdrop-filter:var(--neba-blur)]":"","[transition-property:left,top,width,height,opacity,box-shadow,background-color,border-color,border-radius]","[transition-duration:var(--neba-duration-window)]","[transition-timing-function:var(--neba-ease)]","motion-reduce:[transition-duration:0ms]","data-[gesture]:[transition-property:none]",re),"data-gesture":je?"":void 0,inert:!we||void 0,style:{opacity:we?void 0:0,...p({os:x,color:E,accent:S,transparency:k,active:Se,elevation:I}),position:"static"===R?"relative":R,...Qe,borderRadius:ve?0:`${he.radius}px ${he.radius}px ${he.radiusBottom}px ${he.radiusBottom}px`,borderStyle:"solid",borderWidth:he.frame,borderColor:"var(--n-window-line)",backgroundColor:"var(--n-window-band)",boxShadow:"var(--n-window-shadow), var(--neba-plate-glass)",...ae},children:t(n,{children:[Je,e("div",{className:d("min-h-0 flex-1",Q?"overflow-auto":"overflow-hidden"),style:{backgroundColor:"var(--n-window-body)",marginInline:he.band.side,marginBottom:he.band.bottom,boxShadow:he.band.side>0?"inset 0 0 0 1px rgb(0 0 0 / 0.12)":void 0},inert:pe,children:se}),!B||ve||pe?null:v.map(t=>{const n="se"===t.edge;return e("div",{role:n?"button":void 0,tabIndex:n?0:void 0,"aria-label":n?ie??ce.resize:void 0,"aria-hidden":n?void 0:"true",className:d("absolute z-10 touch-none",t.className,n?"focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:[outline-offset:-2px]":""),onPointerDown:e=>function(e,t){const n=Pe.current;if(!n||ve)return;const i=n.getBoundingClientRect(),o={width:i.width,height:i.height,x:ze.x,y:ze.y},r=e.includes("e"),a=e.includes("w"),s=e.includes("n"),l=e.includes("s");Xe(t,(e,t)=>{let{width:n,height:i}=o,{x:d,y:c}=o;r&&(n=Math.max($e.width,o.width+e)),l&&(i=Math.max($e.height,o.height+t)),a&&(n=Math.max($e.width,o.width-e),d=o.x+(o.width-n)),s&&(i=Math.max($e.height,o.height-t),c=o.y+(o.height-i)),Fe({width:n,height:i}),(a||s)&&ye({x:d,y:c})})}(t.edge,e),onKeyDown:n?e=>{const t={ArrowRight:[16,0],ArrowLeft:[-16,0],ArrowDown:[0,16],ArrowUp:[0,-16]}[e.key];t&&(e.preventDefault(),function(e,t){const n=Pe.current;if(!n)return;const i=n.getBoundingClientRect();Fe({width:Math.max($e.width,i.width+e),height:Math.max($e.height,i.height+t)})}(t[0],t[1]))}:void 0},t.edge)})]}),...le}});return we||De?Ve:null});
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './types.js';
2
2
  export * from './components/accordion/index.js';
3
3
  export * from './components/alert/index.js';
4
+ export * from './components/anchor/index.js';
4
5
  export * from './components/animate-appear/index.js';
5
6
  export * from './components/app-logo/index.js';
6
7
  export * from './components/animate-blink/index.js';
@@ -16,6 +17,7 @@ export * from './components/animate-zoom/index.js';
16
17
  export * from './components/area-chart/index.js';
17
18
  export * from './components/aspect-ratio/index.js';
18
19
  export * from './components/avatar/index.js';
20
+ export * from './components/avatar-group/index.js';
19
21
  export * from './components/badge/index.js';
20
22
  export * from './components/bar-chart/index.js';
21
23
  export * from './components/blockquote/index.js';
@@ -33,7 +35,9 @@ export * from './components/code-block/index.js';
33
35
  export * from './components/collapsible/index.js';
34
36
  export * from './components/color-picker/index.js';
35
37
  export * from './components/combobox/index.js';
38
+ export * from './components/command-palette/index.js';
36
39
  export * from './components/container/index.js';
40
+ export * from './components/data-list/index.js';
37
41
  export * from './components/data-table/index.js';
38
42
  export * from './components/date-picker/index.js';
39
43
  export * from './components/date-range-picker/index.js';
@@ -42,7 +46,10 @@ export * from './components/dialog/index.js';
42
46
  export * from './components/divider/index.js';
43
47
  export * from './components/drawer/index.js';
44
48
  export * from './components/empty/index.js';
49
+ export * from './components/fieldset/index.js';
45
50
  export * from './components/file-picker/index.js';
51
+ export * from './components/form/index.js';
52
+ export * from './components/gauge-chart/index.js';
46
53
  export * from './components/grid/index.js';
47
54
  export * from './components/floating-action-button/index.js';
48
55
  export * from './components/floating-bottom-navigation/index.js';
@@ -51,13 +58,17 @@ export * from './components/grid-container/index.js';
51
58
  export * from './components/header/index.js';
52
59
  export * from './components/heatmap-chart/index.js';
53
60
  export * from './components/highlight/index.js';
61
+ export * from './components/hover-card/index.js';
54
62
  export * from './components/how-to-steps/index.js';
55
63
  export * from './components/icon/index.js';
56
64
  export * from './components/icon-button/index.js';
57
65
  export * from './components/line-chart/index.js';
58
66
  export * from './components/list/index.js';
59
67
  export * from './components/menu/index.js';
68
+ export * from './components/menubar/index.js';
69
+ export * from './components/meter/index.js';
60
70
  export * from './components/mockup/index.js';
71
+ export * from './components/navigation-menu/index.js';
61
72
  export * from './components/number-field/index.js';
62
73
  export * from './components/otp-field/index.js';
63
74
  export * from './components/overlay/index.js';
@@ -73,6 +84,7 @@ export * from './components/progress-linear/index.js';
73
84
  export * from './components/radio-group/index.js';
74
85
  export * from './components/rating/index.js';
75
86
  export * from './components/scatter-chart/index.js';
87
+ export * from './components/scroll-area/index.js';
76
88
  export * from './components/scroll-zone/index.js';
77
89
  export * from './components/segmented-button/index.js';
78
90
  export * from './components/select/index.js';
@@ -92,8 +104,12 @@ export * from './components/time-picker/index.js';
92
104
  export * from './components/timeline/index.js';
93
105
  export * from './components/timeline-chart/index.js';
94
106
  export * from './components/toast/index.js';
107
+ export * from './components/toggle/index.js';
108
+ export * from './components/toggle-group/index.js';
95
109
  export * from './components/toolbar/index.js';
96
110
  export * from './components/tooltip/index.js';
111
+ export * from './components/tour/index.js';
112
+ export * from './components/transfer/index.js';
97
113
  export * from './components/tree-view/index.js';
98
114
  export * from './components/typography/index.js';
99
115
  export * from './components/window-pane/index.js';
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export*from"./types.js";export*from"./components/accordion/index.js";export*from"./components/alert/index.js";export*from"./components/animate-appear/index.js";export*from"./components/app-logo/index.js";export*from"./components/animate-blink/index.js";export*from"./components/animate-fade/index.js";export*from"./components/animate-grow/index.js";export*from"./components/animate-headline/index.js";export*from"./components/animate-lighting/index.js";export*from"./components/animate-marquee/index.js";export*from"./components/animate-rotate/index.js";export*from"./components/animate-slide/index.js";export*from"./components/animate-typing/index.js";export*from"./components/animate-zoom/index.js";export*from"./components/area-chart/index.js";export*from"./components/aspect-ratio/index.js";export*from"./components/avatar/index.js";export*from"./components/badge/index.js";export*from"./components/bar-chart/index.js";export*from"./components/blockquote/index.js";export*from"./components/bottom-navigation/index.js";export*from"./components/box/index.js";export*from"./components/breadcrumb/index.js";export*from"./components/button/index.js";export*from"./components/button-group/index.js";export*from"./components/card/index.js";export*from"./components/carousel/index.js";export*from"./components/chat-bubble/index.js";export*from"./components/checkbox/index.js";export*from"./components/chip/index.js";export*from"./components/code-block/index.js";export*from"./components/collapsible/index.js";export*from"./components/color-picker/index.js";export*from"./components/combobox/index.js";export*from"./components/container/index.js";export*from"./components/data-table/index.js";export*from"./components/date-picker/index.js";export*from"./components/date-range-picker/index.js";export*from"./components/date-time-picker/index.js";export*from"./components/dialog/index.js";export*from"./components/divider/index.js";export*from"./components/drawer/index.js";export*from"./components/empty/index.js";export*from"./components/file-picker/index.js";export*from"./components/grid/index.js";export*from"./components/floating-action-button/index.js";export*from"./components/floating-bottom-navigation/index.js";export*from"./components/footer/index.js";export*from"./components/grid-container/index.js";export*from"./components/header/index.js";export*from"./components/heatmap-chart/index.js";export*from"./components/highlight/index.js";export*from"./components/how-to-steps/index.js";export*from"./components/icon/index.js";export*from"./components/icon-button/index.js";export*from"./components/line-chart/index.js";export*from"./components/list/index.js";export*from"./components/menu/index.js";export*from"./components/mockup/index.js";export*from"./components/number-field/index.js";export*from"./components/otp-field/index.js";export*from"./components/overlay/index.js";export*from"./components/page-layout/index.js";export*from"./components/pagination/index.js";export*from"./components/panes/index.js";export*from"./components/pie-chart/index.js";export*from"./components/pill/index.js";export*from"./components/popover/index.js";export*from"./components/progress-box/index.js";export*from"./components/progress-circular/index.js";export*from"./components/progress-linear/index.js";export*from"./components/radio-group/index.js";export*from"./components/rating/index.js";export*from"./components/scatter-chart/index.js";export*from"./components/scroll-zone/index.js";export*from"./components/segmented-button/index.js";export*from"./components/select/index.js";export*from"./components/shortcut/index.js";export*from"./components/sidebar/index.js";export*from"./components/skeleton/index.js";export*from"./components/slider/index.js";export*from"./components/sparkline/index.js";export*from"./components/spoiler/index.js";export*from"./components/statistic/index.js";export*from"./components/switch/index.js";export*from"./components/table/index.js";export*from"./components/tabs/index.js";export*from"./components/text-field/index.js";export*from"./components/text-link/index.js";export*from"./components/time-picker/index.js";export*from"./components/timeline/index.js";export*from"./components/timeline-chart/index.js";export*from"./components/toast/index.js";export*from"./components/toolbar/index.js";export*from"./components/tooltip/index.js";export*from"./components/tree-view/index.js";export*from"./components/typography/index.js";export*from"./components/window-pane/index.js";
1
+ export*from"./types.js";export*from"./components/accordion/index.js";export*from"./components/alert/index.js";export*from"./components/anchor/index.js";export*from"./components/animate-appear/index.js";export*from"./components/app-logo/index.js";export*from"./components/animate-blink/index.js";export*from"./components/animate-fade/index.js";export*from"./components/animate-grow/index.js";export*from"./components/animate-headline/index.js";export*from"./components/animate-lighting/index.js";export*from"./components/animate-marquee/index.js";export*from"./components/animate-rotate/index.js";export*from"./components/animate-slide/index.js";export*from"./components/animate-typing/index.js";export*from"./components/animate-zoom/index.js";export*from"./components/area-chart/index.js";export*from"./components/aspect-ratio/index.js";export*from"./components/avatar/index.js";export*from"./components/avatar-group/index.js";export*from"./components/badge/index.js";export*from"./components/bar-chart/index.js";export*from"./components/blockquote/index.js";export*from"./components/bottom-navigation/index.js";export*from"./components/box/index.js";export*from"./components/breadcrumb/index.js";export*from"./components/button/index.js";export*from"./components/button-group/index.js";export*from"./components/card/index.js";export*from"./components/carousel/index.js";export*from"./components/chat-bubble/index.js";export*from"./components/checkbox/index.js";export*from"./components/chip/index.js";export*from"./components/code-block/index.js";export*from"./components/collapsible/index.js";export*from"./components/color-picker/index.js";export*from"./components/combobox/index.js";export*from"./components/command-palette/index.js";export*from"./components/container/index.js";export*from"./components/data-list/index.js";export*from"./components/data-table/index.js";export*from"./components/date-picker/index.js";export*from"./components/date-range-picker/index.js";export*from"./components/date-time-picker/index.js";export*from"./components/dialog/index.js";export*from"./components/divider/index.js";export*from"./components/drawer/index.js";export*from"./components/empty/index.js";export*from"./components/fieldset/index.js";export*from"./components/file-picker/index.js";export*from"./components/form/index.js";export*from"./components/gauge-chart/index.js";export*from"./components/grid/index.js";export*from"./components/floating-action-button/index.js";export*from"./components/floating-bottom-navigation/index.js";export*from"./components/footer/index.js";export*from"./components/grid-container/index.js";export*from"./components/header/index.js";export*from"./components/heatmap-chart/index.js";export*from"./components/highlight/index.js";export*from"./components/hover-card/index.js";export*from"./components/how-to-steps/index.js";export*from"./components/icon/index.js";export*from"./components/icon-button/index.js";export*from"./components/line-chart/index.js";export*from"./components/list/index.js";export*from"./components/menu/index.js";export*from"./components/menubar/index.js";export*from"./components/meter/index.js";export*from"./components/mockup/index.js";export*from"./components/navigation-menu/index.js";export*from"./components/number-field/index.js";export*from"./components/otp-field/index.js";export*from"./components/overlay/index.js";export*from"./components/page-layout/index.js";export*from"./components/pagination/index.js";export*from"./components/panes/index.js";export*from"./components/pie-chart/index.js";export*from"./components/pill/index.js";export*from"./components/popover/index.js";export*from"./components/progress-box/index.js";export*from"./components/progress-circular/index.js";export*from"./components/progress-linear/index.js";export*from"./components/radio-group/index.js";export*from"./components/rating/index.js";export*from"./components/scatter-chart/index.js";export*from"./components/scroll-area/index.js";export*from"./components/scroll-zone/index.js";export*from"./components/segmented-button/index.js";export*from"./components/select/index.js";export*from"./components/shortcut/index.js";export*from"./components/sidebar/index.js";export*from"./components/skeleton/index.js";export*from"./components/slider/index.js";export*from"./components/sparkline/index.js";export*from"./components/spoiler/index.js";export*from"./components/statistic/index.js";export*from"./components/switch/index.js";export*from"./components/table/index.js";export*from"./components/tabs/index.js";export*from"./components/text-field/index.js";export*from"./components/text-link/index.js";export*from"./components/time-picker/index.js";export*from"./components/timeline/index.js";export*from"./components/timeline-chart/index.js";export*from"./components/toast/index.js";export*from"./components/toggle/index.js";export*from"./components/toggle-group/index.js";export*from"./components/toolbar/index.js";export*from"./components/tooltip/index.js";export*from"./components/tour/index.js";export*from"./components/transfer/index.js";export*from"./components/tree-view/index.js";export*from"./components/typography/index.js";export*from"./components/window-pane/index.js";