@waveinno/ui 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +31 -13
  3. package/dist/components/brand/waveinno-logo.js +1 -1
  4. package/dist/components/charts/bar-list.js +1 -1
  5. package/dist/components/charts/heatmap.js +1 -1
  6. package/dist/components/patterns/activity-feed.js +1 -1
  7. package/dist/components/patterns/app-launcher.js +1 -1
  8. package/dist/components/patterns/data-table-edit.js +1 -1
  9. package/dist/components/patterns/data-table-filters.js +1 -1
  10. package/dist/components/patterns/data-table.js +1 -1
  11. package/dist/components/patterns/index.d.ts +1 -0
  12. package/dist/components/patterns/index.js +1 -1
  13. package/dist/components/patterns/org-chart.d.ts +48 -0
  14. package/dist/components/patterns/org-chart.js +1 -0
  15. package/dist/components/patterns/page-header.js +1 -1
  16. package/dist/components/patterns/page-hero.js +1 -1
  17. package/dist/components/patterns/stat-card.js +1 -1
  18. package/dist/components/patterns/timeline.js +1 -1
  19. package/dist/components/ui/accordion.d.ts +30 -0
  20. package/dist/components/ui/accordion.js +1 -0
  21. package/dist/components/ui/alert.js +1 -1
  22. package/dist/components/ui/avatar.js +1 -1
  23. package/dist/components/ui/badge.js +1 -1
  24. package/dist/components/ui/button.js +1 -1
  25. package/dist/components/ui/calendar.js +1 -1
  26. package/dist/components/ui/carousel.d.ts +27 -0
  27. package/dist/components/ui/carousel.js +1 -0
  28. package/dist/components/ui/checkbox.js +1 -1
  29. package/dist/components/ui/color-picker.d.ts +14 -0
  30. package/dist/components/ui/color-picker.js +1 -0
  31. package/dist/components/ui/combobox.js +1 -1
  32. package/dist/components/ui/confirm-dialog.d.ts +24 -11
  33. package/dist/components/ui/confirm-dialog.js +1 -1
  34. package/dist/components/ui/date-picker.d.ts +18 -1
  35. package/dist/components/ui/date-picker.js +1 -1
  36. package/dist/components/ui/dialog.js +1 -1
  37. package/dist/components/ui/dropdown-menu.js +1 -1
  38. package/dist/components/ui/file-upload.d.ts +12 -4
  39. package/dist/components/ui/file-upload.js +1 -1
  40. package/dist/components/ui/hover-card.d.ts +17 -0
  41. package/dist/components/ui/hover-card.js +1 -0
  42. package/dist/components/ui/index.d.ts +10 -0
  43. package/dist/components/ui/index.js +1 -1
  44. package/dist/components/ui/kbd.js +1 -1
  45. package/dist/components/ui/menu.d.ts +24 -0
  46. package/dist/components/ui/menu.js +1 -1
  47. package/dist/components/ui/pagination.d.ts +51 -0
  48. package/dist/components/ui/pagination.js +1 -0
  49. package/dist/components/ui/password-input.js +1 -1
  50. package/dist/components/ui/pin-input.js +1 -1
  51. package/dist/components/ui/popover.js +1 -1
  52. package/dist/components/ui/progress.js +1 -1
  53. package/dist/components/ui/radio-group.js +1 -1
  54. package/dist/components/ui/rating.d.ts +27 -0
  55. package/dist/components/ui/rating.js +1 -0
  56. package/dist/components/ui/scroll-area.d.ts +17 -0
  57. package/dist/components/ui/scroll-area.js +1 -0
  58. package/dist/components/ui/segmented.d.ts +1 -1
  59. package/dist/components/ui/segmented.js +1 -1
  60. package/dist/components/ui/sheet.js +1 -1
  61. package/dist/components/ui/slider.d.ts +18 -6
  62. package/dist/components/ui/slider.js +1 -1
  63. package/dist/components/ui/spinner.js +1 -1
  64. package/dist/components/ui/steps.d.ts +36 -0
  65. package/dist/components/ui/steps.js +1 -0
  66. package/dist/components/ui/tabs.js +1 -1
  67. package/dist/components/ui/tag-input.d.ts +33 -0
  68. package/dist/components/ui/tag-input.js +1 -0
  69. package/dist/components/ui/toast.js +1 -1
  70. package/dist/components/ui/tree-view.d.ts +38 -0
  71. package/dist/components/ui/tree-view.js +1 -0
  72. package/dist/hooks/index.d.ts +1 -0
  73. package/dist/hooks/index.js +1 -1
  74. package/dist/hooks/use-router.d.ts +41 -0
  75. package/dist/hooks/use-router.js +1 -0
  76. package/dist/lib/index.d.ts +1 -0
  77. package/dist/lib/index.js +1 -1
  78. package/dist/lib/theme.d.ts +48 -0
  79. package/dist/lib/theme.js +7 -0
  80. package/dist/next/index.d.ts +6 -0
  81. package/dist/next/index.js +1 -0
  82. package/dist/shell/app-shell.js +1 -1
  83. package/dist/shell/app-switcher.js +1 -1
  84. package/dist/shell/command-palette.js +1 -1
  85. package/dist/shell/icon-rail.js +1 -1
  86. package/dist/shell/mobile-nav.js +1 -1
  87. package/dist/shell/module-sidebar.js +1 -1
  88. package/dist/shell/notifications.js +1 -1
  89. package/dist/shell/placeholder-screen.js +1 -1
  90. package/dist/shell/topbar.js +1 -1
  91. package/dist/shell/use-active.js +1 -1
  92. package/dist/shell/user-menu.js +1 -1
  93. package/dist/styles.css +91 -5
  94. package/package.json +14 -1
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as s}from"react/jsx-runtime";import l from"next/link";import*as k from"react";import{WaveWordmark as N}from"../components/brand/logo.js";import{CountBadge as y}from"../components/ui/badge.js";import{Sheet as w,SheetContent as A,SheetTitle as S}from"../components/ui/sheet.js";import{cn as p}from"../lib/utils.js";import{useApp as C}from"../store/app-store.js";import{useUi as f}from"../store/ui-store.js";import{useActive as L}from"./use-active.js";function R(){const u=f(e=>e.mobileNavOpen),n=f(e=>e.setMobileNav),h=C(e=>e.setApp),{cfg:o,pathname:d,mod:b,app:c,rail:x,isEntitled:v}=L(),g=x.order;return k.useEffect(()=>{n(!1)},[d,n]),t(w,{open:u,onOpenChange:n,children:s(A,{side:"left",width:"w-[300px]",className:"lg:hidden",children:[s("div",{className:"shrink-0 border-b border-border px-4 py-3",children:[t(S,{asChild:!0,children:t(N,{size:"sm",suffix:c.name})}),o.scopeLabelled??o.scope?t("div",{className:"mt-2",children:o.scopeLabelled??o.scope}):null]}),o.apps.length>1&&o.showAppSwitcher!==!1?t("div",{className:"flex shrink-0 gap-1.5 overflow-x-auto border-b border-border px-3 py-2.5",children:o.apps.map(e=>{const a=e.icon,i=e.id===c.id,r=o.modules.find(m=>m.app===e.id&&v(m));return t(l,{href:r?.href??e.href,onClick:()=>h(e.id),"aria-label":e.name,"aria-current":i?"true":void 0,className:p("grid size-9 shrink-0 place-items-center rounded-ctl text-white transition-[box-shadow,transform] duration-150",i?"ring-2 ring-text ring-offset-2 ring-offset-raised":"opacity-90 hover:opacity-100"),style:{background:e.tint},children:t(a,{className:"size-4"})},e.id)})}):null,t("div",{className:"flex-1 overflow-y-auto p-2",children:g.map(e=>{const a=e.icon,i=e.key===b.key;return s("div",{children:[s(l,{href:e.href,className:p("flex h-item items-center gap-2.5 rounded-ctl px-2.5 text-[13px] transition-colors",i?"bg-primary-subtle font-medium text-primary":"text-body hover:bg-hover"),children:[t(a,{className:"size-4 shrink-0"}),t("span",{className:"flex-1 truncate",children:e.title}),e.badge?t(y,{value:e.badge,tone:e.badgeTone==="danger"?"danger":"neutral"}):null]}),i?t("ul",{className:"mb-2 ml-[26px] mt-0.5 border-l border-border pl-2",children:e.nav.filter(r=>r.kind==="item").map(r=>t("li",{children:s(l,{href:r.href,className:p("flex h-8 items-center gap-2 rounded-ctl px-2 text-[13px] transition-colors",d===r.href?"font-medium text-primary":"text-muted hover:bg-hover hover:text-text"),children:[t("span",{className:"flex-1 truncate",children:r.label}),r.count?t("span",{className:"num text-[11px]",children:r.count}):null]})},r.href))}):null]},e.key)})})]})})}export{R as MobileNav};
1
+ "use client";import{jsx as t,jsxs as s}from"react/jsx-runtime";import*as k from"react";import{WaveWordmark as N}from"../components/brand/logo.js";import{CountBadge as y}from"../components/ui/badge.js";import{Sheet as w,SheetContent as A,SheetTitle as L}from"../components/ui/sheet.js";import{RouterLink as l}from"../hooks/use-router.js";import{cn as p}from"../lib/utils.js";import{useApp as S}from"../store/app-store.js";import{useUi as f}from"../store/ui-store.js";import{useActive as C}from"./use-active.js";function B(){const u=f(e=>e.mobileNavOpen),n=f(e=>e.setMobileNav),h=S(e=>e.setApp),{cfg:o,pathname:d,mod:b,app:c,rail:x,isEntitled:v}=C(),g=x.order;return k.useEffect(()=>{n(!1)},[d,n]),t(w,{open:u,onOpenChange:n,children:s(A,{side:"left",width:"w-[300px]",className:"lg:hidden",children:[s("div",{className:"shrink-0 border-b border-border px-4 py-3",children:[t(L,{asChild:!0,children:t(N,{size:"sm",suffix:c.name})}),o.scopeLabelled??o.scope?t("div",{className:"mt-2",children:o.scopeLabelled??o.scope}):null]}),o.apps.length>1&&o.showAppSwitcher!==!1?t("div",{className:"flex shrink-0 gap-1.5 overflow-x-auto border-b border-border px-3 py-2.5",children:o.apps.map(e=>{const a=e.icon,i=e.id===c.id,r=o.modules.find(m=>m.app===e.id&&v(m));return t(l,{href:r?.href??e.href,onClick:()=>h(e.id),"aria-label":e.name,"aria-current":i?"true":void 0,className:p("grid size-9 shrink-0 place-items-center rounded-ctl text-white transition-[box-shadow,transform] duration-150",i?"ring-2 ring-text ring-offset-2 ring-offset-raised":"opacity-90 hover:opacity-100"),style:{background:e.tint},children:t(a,{className:"size-4"})},e.id)})}):null,t("div",{className:"flex-1 overflow-y-auto p-2",children:g.map(e=>{const a=e.icon,i=e.key===b.key;return s("div",{children:[s(l,{href:e.href,className:p("flex h-item items-center gap-2.5 rounded-ctl px-2.5 text-[13px] transition-colors",i?"bg-primary-subtle font-medium text-primary":"text-body hover:bg-hover"),children:[t(a,{className:"size-4 shrink-0"}),t("span",{className:"flex-1 truncate",children:e.title}),e.badge?t(y,{value:e.badge,tone:e.badgeTone==="danger"?"danger":"neutral"}):null]}),i?t("ul",{className:"mb-2 ml-[26px] mt-0.5 border-l border-border pl-2",children:e.nav.filter(r=>r.kind==="item").map(r=>t("li",{children:s(l,{href:r.href,className:p("flex h-8 items-center gap-2 rounded-ctl px-2 text-[13px] transition-colors",d===r.href?"font-medium text-primary":"text-muted hover:bg-hover hover:text-text"),children:[t("span",{className:"flex-1 truncate",children:r.label}),r.count?t("span",{className:"num text-[11px]",children:r.count}):null]})},r.href))}):null]},e.key)})})]})})}export{B as MobileNav};
@@ -1 +1 @@
1
- "use client";import{jsx as a,jsxs as o}from"react/jsx-runtime";import d from"next/link";import*as r from"react";import{cn as i}from"../lib/utils.js";import{useActive as b}from"./use-active.js";function k(){const{pathname:c,mod:t,item:p}=b(),u=r.useRef(null),[s,f]=r.useState(null),m=r.useRef(t.key),[x,h]=r.useState(!1);return r.useLayoutEffect(()=>{const e=u.current?.querySelector('li[data-active="true"]'),n=m.current===t.key;m.current=t.key,h(n),f(e?{y:e.offsetTop,h:e.offsetHeight}:null)},[c,t.key]),o("nav",{"data-shell-panel":"","aria-label":`${t.title} sections`,className:"col-start-2 row-start-1 row-span-2 overflow-y-auto overflow-x-hidden border-r border-border bg-surface px-2.5 py-3",children:[a("h2",{className:"px-2.5 pb-2.5 pt-1.5 text-[13px] font-semibold leading-[18px] text-text",children:t.title}),o("ul",{ref:u,className:"relative",children:[s?a("li",{"aria-hidden":!0,className:i("pointer-events-none absolute inset-x-0 top-0 rounded-ctl bg-primary-subtle",x&&"transition-[transform,height] duration-[220ms] ease-wave"),style:{transform:`translateY(${s.y}px)`,height:s.h}}):null,t.nav.map((e,n)=>{if(e.kind==="group")return a("li",{className:"ov px-2.5 pb-1.5 pt-3.5",children:e.label},`g-${n}`);const l=p?.href===e.href;return a("li",{"data-active":l||void 0,children:o(d,{href:e.href,"aria-current":l?"page":void 0,className:i("relative mb-px flex h-item items-center gap-2.5 rounded-ctl px-2.5 text-[13px] transition-colors duration-150",l?"font-medium text-primary":"text-body hover:bg-hover hover:text-text"),children:[a("span",{className:"truncate",children:e.label}),e.count?a("span",{className:i("num ml-auto shrink-0 text-xs",l?"text-primary":e.hot?"font-semibold text-text":"text-muted"),children:e.count}):null]})},e.href)})]})]})}export{k as ModuleSidebar};
1
+ "use client";import{jsx as a,jsxs as o}from"react/jsx-runtime";import*as r from"react";import{RouterLink as d}from"../hooks/use-router.js";import{cn as i}from"../lib/utils.js";import{useActive as b}from"./use-active.js";function k(){const{pathname:c,mod:t,item:p}=b(),u=r.useRef(null),[s,f]=r.useState(null),m=r.useRef(t.key),[x,h]=r.useState(!1);return r.useLayoutEffect(()=>{const e=u.current?.querySelector('li[data-active="true"]'),n=m.current===t.key;m.current=t.key,h(n),f(e?{y:e.offsetTop,h:e.offsetHeight}:null)},[c,t.key]),o("nav",{"data-shell-panel":"","aria-label":`${t.title} sections`,className:"col-start-2 row-start-1 row-span-2 overflow-y-auto overflow-x-hidden border-r border-border bg-surface px-2.5 py-3",children:[a("h2",{className:"px-2.5 pb-2.5 pt-1.5 text-[13px] font-semibold leading-[18px] text-text",children:t.title}),o("ul",{ref:u,className:"relative",children:[s?a("li",{"aria-hidden":!0,className:i("pointer-events-none absolute inset-x-0 top-0 rounded-ctl bg-primary-subtle",x&&"transition-[transform,height] duration-[220ms] ease-wave"),style:{transform:`translateY(${s.y}px)`,height:s.h}}):null,t.nav.map((e,n)=>{if(e.kind==="group")return a("li",{className:"ov px-2.5 pb-1.5 pt-3.5",children:e.label},`g-${n}`);const l=p?.href===e.href;return a("li",{"data-active":l||void 0,children:o(d,{href:e.href,"aria-current":l?"page":void 0,className:i("relative mb-px flex h-item items-center gap-2.5 rounded-ctl px-2.5 text-[13px] transition-colors duration-150",l?"font-medium text-primary":"text-body hover:bg-hover hover:text-text"),children:[a("span",{className:"truncate",children:e.label}),e.count?a("span",{className:i("num ml-auto shrink-0 text-xs",l?"text-primary":e.hot?"font-semibold text-text":"text-muted"),children:e.count}):null]})},e.href)})]})]})}export{k as ModuleSidebar};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Bell as p}from"lucide-react";import n from"next/link";import{Badge as m}from"../components/ui/badge.js";import{Button as s}from"../components/ui/button.js";import{Popover as c,PopoverContent as d,PopoverTrigger as x}from"../components/ui/popover.js";import{Tooltip as f}from"../components/ui/tooltip.js";import{fmtRelative as u}from"../lib/format.js";import{useShell as N}from"./config.js";function C(){const o=N(),r=o.notifications??[],i=r.filter(t=>!t.read).length,l=o.now??new Date;return a(c,{onOpenChange:t=>t&&o.onNotificationsOpen?.(),children:[e(f,{label:"Notifications",children:e(x,{asChild:!0,children:a(s,{variant:"ghost",size:"icon",className:"relative","aria-label":`Notifications, ${i} unread`,children:[e(p,{}),i>0?e("span",{className:"num absolute right-[3px] top-[3px] grid h-4 min-w-4 place-items-center rounded-full bg-danger px-1 text-[10px] font-semibold leading-none text-white ring-2 ring-canvas","aria-hidden":!0,children:i>9?"9+":i}):null]})})}),a(d,{align:"end",className:"w-[380px] max-w-[calc(100vw-32px)] p-0",children:[a("div",{className:"flex items-center justify-between border-b border-border px-3.5 py-2.5",children:[e("span",{className:"text-[13px] font-semibold text-text",children:"Notifications"}),i>0&&o.onNotificationsRead?e(s,{variant:"link",size:"sm",className:"h-auto",onClick:()=>o.onNotificationsRead?.("all"),children:"Mark all read"}):null]}),r.length===0?e("p",{className:"px-3.5 py-8 text-center text-[13px] text-muted",children:"You are all caught up."}):e("ul",{className:"max-h-[420px] overflow-y-auto",children:r.map(t=>e("li",{children:a(n,{href:t.href,onClick:()=>!t.read&&o.onNotificationsRead?.([t.id]),className:"flex gap-2.5 border-b border-border px-3.5 py-3 transition-colors last:border-0 hover:bg-hover",children:[e(m,{tone:t.tone,className:"mt-0.5 h-[18px] px-1.5",children:e("span",{className:"sr-only",children:t.tone})}),a("div",{className:"min-w-0 flex-1",children:[e("p",{className:"text-[13px] font-medium leading-[18px] text-text",children:t.title}),e("p",{className:"mt-0.5 truncate text-xs text-muted",children:t.detail}),a("p",{className:"mt-1 text-[11px] text-muted",children:[u(t.at,l)," \xB7 ",t.source]})]}),t.read?null:e("span",{className:"mt-2 size-1.5 shrink-0 rounded-full bg-primary","aria-label":"unread"})]})},t.id))}),o.notificationsHref?e("div",{className:"border-t border-border px-3.5 py-2",children:e(n,{href:o.notificationsHref,className:"text-xs font-medium text-primary hover:underline",children:o.notificationsHrefLabel??"Open activity"})}):null]})]})}export{C as Notifications};
1
+ "use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Bell as p}from"lucide-react";import{Badge as m}from"../components/ui/badge.js";import{Button as n}from"../components/ui/button.js";import{Popover as c,PopoverContent as d,PopoverTrigger as x}from"../components/ui/popover.js";import{Tooltip as f}from"../components/ui/tooltip.js";import{RouterLink as s}from"../hooks/use-router.js";import{fmtRelative as u}from"../lib/format.js";import{useShell as N}from"./config.js";function C(){const o=N(),r=o.notifications??[],i=r.filter(t=>!t.read).length,l=o.now??new Date;return a(c,{onOpenChange:t=>t&&o.onNotificationsOpen?.(),children:[e(f,{label:"Notifications",children:e(x,{asChild:!0,children:a(n,{variant:"ghost",size:"icon",className:"relative","aria-label":`Notifications, ${i} unread`,children:[e(p,{}),i>0?e("span",{className:"num absolute right-[3px] top-[3px] grid h-4 min-w-4 place-items-center rounded-full bg-danger px-1 text-[10px] font-semibold leading-none text-white ring-2 ring-canvas","aria-hidden":!0,children:i>9?"9+":i}):null]})})}),a(d,{align:"end",className:"w-[380px] max-w-[calc(100vw-32px)] p-0",children:[a("div",{className:"flex items-center justify-between border-b border-border px-3.5 py-2.5",children:[e("span",{className:"text-[13px] font-semibold text-text",children:"Notifications"}),i>0&&o.onNotificationsRead?e(n,{variant:"link",size:"sm",className:"h-auto",onClick:()=>o.onNotificationsRead?.("all"),children:"Mark all read"}):null]}),r.length===0?e("p",{className:"px-3.5 py-8 text-center text-[13px] text-muted",children:"You are all caught up."}):e("ul",{className:"max-h-[420px] overflow-y-auto",children:r.map(t=>e("li",{children:a(s,{href:t.href,onClick:()=>!t.read&&o.onNotificationsRead?.([t.id]),className:"flex gap-2.5 border-b border-border px-3.5 py-3 transition-colors last:border-0 hover:bg-hover",children:[e(m,{tone:t.tone,className:"mt-0.5 h-[18px] px-1.5",children:e("span",{className:"sr-only",children:t.tone})}),a("div",{className:"min-w-0 flex-1",children:[e("p",{className:"text-[13px] font-medium leading-[18px] text-text",children:t.title}),e("p",{className:"mt-0.5 truncate text-xs text-muted",children:t.detail}),a("p",{className:"mt-1 text-[11px] text-muted",children:[u(t.at,l)," \xB7 ",t.source]})]}),t.read?null:e("span",{className:"mt-2 size-1.5 shrink-0 rounded-full bg-primary","aria-label":"unread"})]})},t.id))}),o.notificationsHref?e("div",{className:"border-t border-border px-3.5 py-2",children:e(s,{href:o.notificationsHref,className:"text-xs font-medium text-primary hover:underline",children:o.notificationsHrefLabel??"Open activity"})}):null]})]})}export{C as Notifications};
@@ -1 +1 @@
1
- "use client";import{Fragment as y,jsx as a,jsxs as t}from"react/jsx-runtime";import{ArrowRight as h,Check as x,Database as f}from"lucide-react";import g from"next/link";import{PageHeader as u}from"../components/patterns/page-header.js";import{Card as m}from"../components/ui/card.js";import{useShell as b}from"./config.js";import{moduleFromPath as N,navItemFromPath as v}from"./registry.js";function I({pathname:n,plannedIn:o}){const i=b(),s=N(i.modules,n),d=v(n,s),l=d?.label??s.title,r=i.apps.find(e=>e.id===s.app),c=s.nav.filter(e=>e.kind==="item").filter(e=>e.href!==d?.href).slice(0,6),p=["Navigation, breadcrumb and page header","Plan / role gating from the registry","Data table \u2014 sort, pin, resize, export","Record drawer and command palette","Empty, loading and error states"];return t(y,{children:[a(u,{crumbs:[...i.homeCrumb?[i.homeCrumb]:[],...r&&r.href!==i.homeCrumb?.href?[{label:r.name,href:r.href}]:[],{label:s.title,href:s.href},{label:l}],title:l,description:s.description}),t("div",{className:"grid grid-cols-1 items-start gap-3 lg:grid-cols-[minmax(0,1fr)_320px]",children:[a(m,{className:"px-6 py-8",children:t("div",{className:"flex items-start gap-3.5",children:[a("span",{className:"grid size-9 shrink-0 place-items-center rounded-ctl bg-hover text-muted","aria-hidden":!0,children:a(f,{className:"size-4"})}),t("div",{className:"min-w-0",children:[t("h2",{className:"text-[15px] font-semibold text-text",children:[l," is designed but not built yet"]}),t("p",{className:"mt-1.5 max-w-[60ch] text-[13px] leading-5 text-muted",children:["The screen is in the navigation registry and inherits the page template. Its data contract is in the API specification; the page ships with its milestone",o?` (${o})`:"","."]})]})]})}),t("div",{className:"space-y-3",children:[t(m,{children:[a("h3",{className:"text-[13px] font-semibold text-text",children:"Already wired"}),a("ul",{className:"mt-2.5 space-y-2",children:p.map(e=>t("li",{className:"flex items-start gap-2 text-[13px] text-body",children:[a(x,{className:"mt-0.5 size-3.5 shrink-0 text-success"}),e]},e))})]}),c.length?t(m,{children:[t("h3",{className:"text-[13px] font-semibold text-text",children:["Elsewhere in ",s.title]}),a("ul",{className:"-mx-1.5 mt-2",children:c.map(e=>e.kind==="item"?a("li",{children:t(g,{href:e.href,className:"flex items-center gap-2 rounded-ctl px-1.5 py-1.5 text-[13px] text-body transition-colors hover:bg-hover hover:text-text",children:[a("span",{className:"min-w-0 flex-1 truncate",children:e.label}),a(h,{className:"size-3 shrink-0 text-muted"})]})},e.href):null)})]}):null]})]})]})}export{I as PlaceholderScreen};
1
+ "use client";import{Fragment as y,jsx as a,jsxs as t}from"react/jsx-runtime";import{ArrowRight as h,Check as x,Database as f}from"lucide-react";import{PageHeader as g}from"../components/patterns/page-header.js";import{Card as m}from"../components/ui/card.js";import{RouterLink as u}from"../hooks/use-router.js";import{useShell as b}from"./config.js";import{moduleFromPath as N,navItemFromPath as v}from"./registry.js";function I({pathname:n,plannedIn:o}){const i=b(),s=N(i.modules,n),d=v(n,s),l=d?.label??s.title,r=i.apps.find(e=>e.id===s.app),c=s.nav.filter(e=>e.kind==="item").filter(e=>e.href!==d?.href).slice(0,6),p=["Navigation, breadcrumb and page header","Plan / role gating from the registry","Data table \u2014 sort, pin, resize, export","Record drawer and command palette","Empty, loading and error states"];return t(y,{children:[a(g,{crumbs:[...i.homeCrumb?[i.homeCrumb]:[],...r&&r.href!==i.homeCrumb?.href?[{label:r.name,href:r.href}]:[],{label:s.title,href:s.href},{label:l}],title:l,description:s.description}),t("div",{className:"grid grid-cols-1 items-start gap-3 lg:grid-cols-[minmax(0,1fr)_320px]",children:[a(m,{className:"px-6 py-8",children:t("div",{className:"flex items-start gap-3.5",children:[a("span",{className:"grid size-9 shrink-0 place-items-center rounded-ctl bg-hover text-muted","aria-hidden":!0,children:a(f,{className:"size-4"})}),t("div",{className:"min-w-0",children:[t("h2",{className:"text-[15px] font-semibold text-text",children:[l," is designed but not built yet"]}),t("p",{className:"mt-1.5 max-w-[60ch] text-[13px] leading-5 text-muted",children:["The screen is in the navigation registry and inherits the page template. Its data contract is in the API specification; the page ships with its milestone",o?` (${o})`:"","."]})]})]})}),t("div",{className:"space-y-3",children:[t(m,{children:[a("h3",{className:"text-[13px] font-semibold text-text",children:"Already wired"}),a("ul",{className:"mt-2.5 space-y-2",children:p.map(e=>t("li",{className:"flex items-start gap-2 text-[13px] text-body",children:[a(x,{className:"mt-0.5 size-3.5 shrink-0 text-success"}),e]},e))})]}),c.length?t(m,{children:[t("h3",{className:"text-[13px] font-semibold text-text",children:["Elsewhere in ",s.title]}),a("ul",{className:"-mx-1.5 mt-2",children:c.map(e=>e.kind==="item"?a("li",{children:t(u,{href:e.href,className:"flex items-center gap-2 rounded-ctl px-1.5 py-1.5 text-[13px] text-body transition-colors hover:bg-hover hover:text-text",children:[a("span",{className:"min-w-0 flex-1 truncate",children:e.label}),a(h,{className:"size-3 shrink-0 text-muted"})]})},e.href):null)})]}):null]})]})]})}export{I as PlaceholderScreen};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as o}from"react/jsx-runtime";import{Menu as x,PanelLeft as h,Search as p}from"lucide-react";import{WaveMark as f}from"../components/brand/logo.js";import{Button as l}from"../components/ui/button.js";import{Tooltip as g}from"../components/ui/tooltip.js";import{cn as v}from"../lib/utils.js";import{useUi as s}from"../store/ui-store.js";import{AppSwitcher as N}from"./app-switcher.js";import{Notifications as k}from"./notifications.js";import{UserMenu as w}from"./user-menu.js";import{useActive as z}from"./use-active.js";function I(){const m=s(a=>a.togglePanel),i=s(a=>a.setPalette),c=s(a=>a.setMobileNav),u=s(a=>a.setLauncher),{cfg:t,app:r}=z(),b=r.icon,n=t.showAppSwitcher!==!1&&t.apps.length>1,d=t.searchClearance==="wide";return e("header",{className:"col-start-3 col-end-4 row-start-1 flex border-b border-border bg-canvas px-4 sm:px-6",children:o("div",{className:"@container relative mx-auto flex w-full max-w-[1600px] items-center gap-2 sm:gap-2.5",children:[o("div",{className:"flex min-w-0 items-center gap-2",children:[e(g,{label:"Toggle panel",shortcut:"\u2318B",children:e(l,{variant:"ghost",size:"icon",onClick:m,className:"-ml-2.5 hidden lg:inline-flex","aria-label":"Toggle module panel",children:e(h,{})})}),e(l,{variant:"ghost",size:"icon",onClick:()=>c(!0),className:"-ml-2.5 lg:hidden","aria-label":"Open navigation",children:e(x,{})}),o("button",{type:"button",onClick:()=>n?u(!0):c(!0),"aria-label":`WAVEINNO, ${r.name}`,className:"flex min-w-0 shrink items-center gap-2 rounded-full py-1 pl-0.5 pr-2 transition-colors hover:bg-hover lg:hidden",children:[o("span",{className:"relative shrink-0",children:[e(f,{size:"sm"}),e("span",{className:"absolute -bottom-0.5 -right-0.5 grid size-[13px] place-items-center rounded-full text-white ring-2 ring-canvas",style:{background:r.tint},children:e(b,{className:"size-2"})})]}),e("span",{className:`disp truncate text-[13px] font-semibold text-text ${n?"md:hidden":""}`,children:r.name})]})]}),o("button",{type:"button",onClick:()=>i(!0),className:v("absolute left-1/2 top-1/2 hidden h-[38px] -translate-x-1/2 -translate-y-1/2 cursor-text items-center gap-2.5 rounded-full border border-border bg-surface px-[15px] text-left transition-[background-color,border-color,box-shadow] hover:border-border2 focus-visible:border-primary focus-visible:bg-raised focus-visible:shadow-elev2",d?"w-[clamp(260px,calc(100%-960px),560px)] @min-[1220px]:flex":"w-[clamp(260px,calc(100%-720px),560px)] @min-[980px]:flex"),children:[e(p,{className:"size-4 shrink-0 text-muted"}),e("span",{className:"flex-1 truncate text-sm text-placeholder",children:t.searchPlaceholder??"Search screens and records\u2026"}),e("kbd",{className:"hidden rounded-[5px] border border-border2 px-1.5 text-[11px] font-medium text-muted md:inline",children:"\u2318K"})]}),o("div",{className:"ml-auto flex items-center gap-2 sm:gap-2.5",children:[e(l,{variant:"ghost",size:"icon",onClick:()=>i(!0),className:d?"@min-[1220px]:hidden":"@min-[980px]:hidden","aria-label":"Search",children:e(p,{})}),t.topbarExtra?e("div",{className:"hidden sm:block",children:t.topbarExtra}):null,t.scope?e("div",{className:"hidden sm:block",children:t.scope}):null,n?e("div",{className:"hidden md:block",children:e(N,{})}):null,e(k,{}),e(w,{})]})]})})}export{I as Topbar};
1
+ "use client";import{jsx as e,jsxs as o}from"react/jsx-runtime";import{Menu as x,PanelLeft as h,Search as p}from"lucide-react";import{WaveMark as f}from"../components/brand/logo.js";import{Button as n}from"../components/ui/button.js";import{Tooltip as g}from"../components/ui/tooltip.js";import{cn as v}from"../lib/utils.js";import{useUi as s}from"../store/ui-store.js";import{AppSwitcher as N}from"./app-switcher.js";import{Notifications as k}from"./notifications.js";import{UserMenu as w}from"./user-menu.js";import{useActive as z}from"./use-active.js";function I(){const m=s(a=>a.togglePanel),i=s(a=>a.setPalette),c=s(a=>a.setMobileNav),u=s(a=>a.setLauncher),{cfg:t,app:r}=z(),b=r.icon,l=t.showAppSwitcher!==!1&&t.apps.length>1,d=t.searchClearance==="wide";return e("header",{className:"col-start-3 col-end-4 row-start-1 flex border-b border-border bg-canvas px-4 sm:px-6",children:o("div",{className:"@container relative mx-auto flex w-full max-w-[1600px] items-center gap-2 sm:gap-2.5",children:[o("div",{className:"flex min-w-0 items-center gap-2",children:[e(g,{label:"Toggle panel",shortcut:"\u2318B",children:e(n,{variant:"ghost",size:"icon",onClick:m,className:"-ml-2.5 hidden lg:inline-flex","aria-label":"Toggle module panel",children:e(h,{})})}),e(n,{variant:"ghost",size:"icon",onClick:()=>c(!0),className:"-ml-2.5 lg:hidden","aria-label":"Open navigation",children:e(x,{})}),o("button",{type:"button",onClick:()=>l?u(!0):c(!0),"aria-label":`WAVEINNO, ${r.name}`,className:"flex min-w-0 shrink items-center gap-2 rounded-full py-1 pl-0.5 pr-2 transition-colors hover:bg-hover lg:hidden",children:[o("span",{className:"relative shrink-0",children:[e(f,{size:"sm"}),e("span",{className:"absolute -bottom-0.5 -right-0.5 grid size-[13px] place-items-center rounded-full text-white ring-2 ring-canvas",style:{background:r.tint},children:e(b,{className:"size-2"})})]}),e("span",{className:`disp truncate text-[13px] font-semibold text-text ${l?"md:hidden":""}`,children:r.name})]})]}),o("button",{type:"button",onClick:()=>i(!0),className:v("absolute left-1/2 top-1/2 hidden h-[38px] -translate-x-1/2 -translate-y-1/2 cursor-text items-center gap-2.5 rounded-full border border-border bg-surface px-[15px] text-left transition-[background-color,border-color,box-shadow] hover:border-border2 focus-visible:border-primary focus-visible:bg-raised focus-visible:shadow-elev2",d?"w-[clamp(260px,calc(100%-960px),560px)] @min-[1220px]:flex":"w-[clamp(260px,calc(100%-720px),560px)] @min-[980px]:flex"),children:[e(p,{className:"size-4 shrink-0 text-muted"}),e("span",{className:"flex-1 truncate text-sm text-placeholder",children:t.searchPlaceholder??"Search screens and records\u2026"}),e("kbd",{className:"hidden rounded-[calc(5px*var(--radius-scale))] border border-border2 px-1.5 text-[11px] font-medium text-muted md:inline",children:"\u2318K"})]}),o("div",{className:"ml-auto flex items-center gap-2 sm:gap-2.5",children:[e(n,{variant:"ghost",size:"icon",onClick:()=>i(!0),className:d?"@min-[1220px]:hidden":"@min-[980px]:hidden","aria-label":"Search",children:e(p,{})}),t.topbarExtra?e("div",{className:"hidden sm:block",children:t.topbarExtra}):null,t.scope?e("div",{className:"hidden sm:block",children:t.scope}):null,l?e("div",{className:"hidden md:block",children:e(N,{})}):null,e(k,{}),e(w,{})]})]})})}export{I as Topbar};
@@ -1 +1 @@
1
- "use client";import{usePathname as l}from"next/navigation";import{useApp as u}from"../store/app-store.js";import{useShell as f}from"./config.js";import{moduleFromPath as h,navItemFromPath as v,railModules as I}from"./registry.js";function F(){const t=f(),e=l(),p=u(o=>o.appId),s=h(t.modules,e),m=v(e,s),a=o=>!!o&&t.apps.some(c=>c.id===o),r=s.app??(a(p)?p:t.apps[0].id),n=t.apps.find(o=>o.id===r)??t.apps[0],i=t.isEntitled??(()=>!0),d=I(t.modules,n.id,s.key,i);return{cfg:t,pathname:e,mod:s,item:m,app:n,rail:d,isEntitled:i}}export{F as useActive};
1
+ "use client";import{useRouterAdapter as l}from"../hooks/use-router.js";import{useApp as u}from"../store/app-store.js";import{useShell as f}from"./config.js";import{moduleFromPath as h,navItemFromPath as v,railModules as A}from"./registry.js";function P(){const t=f(),{pathname:e}=l(),p=u(o=>o.appId),s=h(t.modules,e),r=v(e,s),m=o=>!!o&&t.apps.some(c=>c.id===o),a=s.app??(m(p)?p:t.apps[0].id),n=t.apps.find(o=>o.id===a)??t.apps[0],i=t.isEntitled??(()=>!0),d=A(t.modules,n.id,s.key,i);return{cfg:t,pathname:e,mod:s,item:r,app:n,rail:d,isEntitled:i}}export{P as useActive};
@@ -1 +1 @@
1
- "use client";import{Fragment as D,jsx as e,jsxs as t}from"react/jsx-runtime";import{LogOut as l}from"lucide-react";import c from"next/link";import{Avatar as s}from"../components/ui/avatar.js";import{DropdownMenu as u,DropdownMenuContent as d,DropdownMenuItem as m,DropdownMenuLabel as x,DropdownMenuSeparator as a,DropdownMenuTrigger as g}from"../components/ui/dropdown-menu.js";import{DensityPicker as f,ThemeToggle as w}from"./appearance-controls.js";import{useShell as v}from"./config.js";function L(){const{user:n,userLinks:r=[],onSignOut:p}=v();return t(u,{children:[e(g,{className:"shrink-0 cursor-pointer rounded-full","aria-label":"Account menu",children:e(s,{name:n.name,src:n.avatar})}),t(d,{align:"end",className:"w-72",children:[t("div",{className:"flex items-center gap-2.5 px-2.5 py-2.5",children:[e(s,{name:n.name,size:"lg"}),t("div",{className:"min-w-0",children:[e("p",{className:"truncate text-[13px] font-semibold text-text",children:n.name}),e("p",{className:"truncate text-[11px] text-muted",children:n.email})]})]}),t("div",{className:"mx-2.5 mb-1 rounded-ctl bg-hover px-2.5 py-2",children:[e("p",{className:"ov",children:"Signed in as"}),e("p",{className:"mt-0.5 text-xs text-text",children:n.role}),n.context?e("p",{className:"mt-0.5 text-[11px] text-muted",children:n.context}):null]}),e(a,{}),e(x,{children:"Appearance"}),t("div",{className:"flex items-center justify-between gap-2 px-2.5 py-1.5",onClick:o=>o.stopPropagation(),children:[e("span",{className:"text-[13px] text-body",children:"Theme"}),e(w,{})]}),t("div",{className:"flex items-center justify-between gap-2 px-2.5 pb-2 pt-1",onClick:o=>o.stopPropagation(),children:[e("span",{className:"text-[13px] text-body",children:"Density"}),e(f,{compact:!0})]}),r.length?e(a,{}):null,r.map(o=>{const i=o.icon;return e(m,{asChild:!0,children:t(c,{href:o.href,children:[e(i,{}),o.label]})},o.href)}),p?t(D,{children:[e(a,{}),t(m,{danger:!0,onSelect:p,children:[e(l,{}),"Sign out"]})]}):null]})]})}export{L as UserMenu};
1
+ "use client";import{Fragment as D,jsx as e,jsxs as t}from"react/jsx-runtime";import{LogOut as l}from"lucide-react";import{Avatar as s}from"../components/ui/avatar.js";import{DropdownMenu as c,DropdownMenuContent as u,DropdownMenuItem as m,DropdownMenuLabel as d,DropdownMenuSeparator as a,DropdownMenuTrigger as x}from"../components/ui/dropdown-menu.js";import{RouterLink as g}from"../hooks/use-router.js";import{DensityPicker as f,ThemeToggle as w}from"./appearance-controls.js";import{useShell as v}from"./config.js";function L(){const{user:n,userLinks:r=[],onSignOut:p}=v();return t(c,{children:[e(x,{className:"shrink-0 cursor-pointer rounded-full","aria-label":"Account menu",children:e(s,{name:n.name,src:n.avatar})}),t(u,{align:"end",className:"w-72",children:[t("div",{className:"flex items-center gap-2.5 px-2.5 py-2.5",children:[e(s,{name:n.name,size:"lg"}),t("div",{className:"min-w-0",children:[e("p",{className:"truncate text-[13px] font-semibold text-text",children:n.name}),e("p",{className:"truncate text-[11px] text-muted",children:n.email})]})]}),t("div",{className:"mx-2.5 mb-1 rounded-ctl bg-hover px-2.5 py-2",children:[e("p",{className:"ov",children:"Signed in as"}),e("p",{className:"mt-0.5 text-xs text-text",children:n.role}),n.context?e("p",{className:"mt-0.5 text-[11px] text-muted",children:n.context}):null]}),e(a,{}),e(d,{children:"Appearance"}),t("div",{className:"flex items-center justify-between gap-2 px-2.5 py-1.5",onClick:o=>o.stopPropagation(),children:[e("span",{className:"text-[13px] text-body",children:"Theme"}),e(w,{})]}),t("div",{className:"flex items-center justify-between gap-2 px-2.5 pb-2 pt-1",onClick:o=>o.stopPropagation(),children:[e("span",{className:"text-[13px] text-body",children:"Density"}),e(f,{compact:!0})]}),r.length?e(a,{}):null,r.map(o=>{const i=o.icon;return e(m,{asChild:!0,children:t(g,{href:o.href,children:[e(i,{}),o.label]})},o.href)}),p?t(D,{children:[e(a,{}),t(m,{danger:!0,onSelect:p,children:[e(l,{}),"Sign out"]})]}):null]})]})}export{L as UserMenu};
package/dist/styles.css CHANGED
@@ -2,7 +2,7 @@
2
2
  /* @waveinno/ui — import after tailwindcss:
3
3
  @import "tailwindcss";
4
4
  @import "@waveinno/ui/styles.css";
5
- @source "<path to node_modules>/@waveinno/ui/src";
5
+ @source "<path to node_modules>/@waveinno/ui/dist";
6
6
  The consumer owns the Tailwind entry so it controls @source and plugins. */
7
7
 
8
8
  /* ══════════════════════════════════════════════════════════════════════════
@@ -37,6 +37,12 @@
37
37
  --primary-subtle: #eef2ff;
38
38
  --primary-muted: #c7d2fe;
39
39
  --accent: #7c3aed;
40
+ /* The brand gradient, royal to violet (the logo's own), and the ink that
41
+ dark panels, value bubbles and command menus are drawn in. A theme that
42
+ changes these changes every gradient, glow and ink surface with them. */
43
+ --brand-1: #1f45ea;
44
+ --brand-2: #7560fd;
45
+ --ink: #140d33;
40
46
 
41
47
  /* ── intent ── */
42
48
  --success: #009767;
@@ -53,10 +59,14 @@
53
59
  --elev3: 0 16px 48px rgba(5, 8, 22, 0.16);
54
60
  --lit: 0 0 #0000;
55
61
 
56
- /* ── radius ── */
57
- --r-ctl: 8px;
58
- --r-card: 10px;
59
- --r-dlg: 14px;
62
+ /* ── radius ──
63
+ One scale for every corner: the three named radii and each component's
64
+ own (written as calc(Npx * var(--radius-scale))). 0 is square, 1 the
65
+ WAVEINNO default, 1.8 very round. Pills stay pills. */
66
+ --radius-scale: 1;
67
+ --r-ctl: calc(8px * var(--radius-scale));
68
+ --r-card: calc(10px * var(--radius-scale));
69
+ --r-dlg: calc(14px * var(--radius-scale));
60
70
 
61
71
  /* ── shell geometry ── */
62
72
  --rail: 72px;
@@ -171,6 +181,9 @@
171
181
  --color-primary-subtle: var(--primary-subtle);
172
182
  --color-primary-muted: var(--primary-muted);
173
183
  --color-accent: var(--accent);
184
+ --color-brand-1: var(--brand-1);
185
+ --color-brand-2: var(--brand-2);
186
+ --color-ink: var(--ink);
174
187
 
175
188
  --color-success: var(--success);
176
189
  --color-success-subtle: var(--success-subtle);
@@ -685,3 +698,76 @@ select {
685
698
  animation-iteration-count: infinite !important;
686
699
  }
687
700
  }
701
+
702
+ /* Accordion content opens to its measured height (Radix sets the variable). */
703
+ @keyframes wm-acc-down {
704
+ from { height: 0; opacity: 0 }
705
+ to { height: var(--radix-accordion-content-height); opacity: 1 }
706
+ }
707
+ @keyframes wm-acc-up {
708
+ from { height: var(--radix-accordion-content-height); opacity: 1 }
709
+ to { height: 0; opacity: 0 }
710
+ }
711
+
712
+ /* ConfirmDialog as a sheet: up from the bottom edge. */
713
+ @keyframes wm-sheet-up {
714
+ from { opacity: 0; transform: translateY(24px) }
715
+ to { opacity: 1; transform: none }
716
+ }
717
+ @keyframes wm-sheet-down {
718
+ from { opacity: 1; transform: none }
719
+ to { opacity: 0; transform: translateY(24px) }
720
+ }
721
+ [data-confirm-sheet][data-state="open"] { animation: wm-sheet-up 300ms var(--ease) }
722
+ [data-confirm-sheet][data-state="closed"] { animation: wm-sheet-down 180ms cubic-bezier(0.4, 0, 1, 1) both }
723
+
724
+ /* ── OrgChart: the connectors between a person and their team ── */
725
+ .wm-org ul {
726
+ position: relative;
727
+ display: flex;
728
+ justify-content: center;
729
+ padding-top: 22px;
730
+ }
731
+ .wm-org > ul { padding-top: 0 }
732
+ .wm-org li {
733
+ position: relative;
734
+ display: flex;
735
+ flex-direction: column;
736
+ align-items: center;
737
+ padding: 22px 10px 0;
738
+ }
739
+ .wm-org > ul > li { padding-top: 0 }
740
+ .wm-org li::before,
741
+ .wm-org li::after {
742
+ content: "";
743
+ position: absolute;
744
+ top: 0;
745
+ right: 50%;
746
+ width: 50%;
747
+ height: 22px;
748
+ border-top: 1.5px solid var(--org-line, var(--border2));
749
+ }
750
+ .wm-org li::after {
751
+ right: auto;
752
+ left: 50%;
753
+ border-left: 1.5px solid var(--org-line, var(--border2));
754
+ }
755
+ .wm-org > ul > li::before,
756
+ .wm-org > ul > li::after,
757
+ .wm-org li:only-child::before { display: none }
758
+ .wm-org li:only-child::after { border-top: 0; border-radius: 0 }
759
+ .wm-org li:first-child::before,
760
+ .wm-org li:last-child::after { border: 0 none }
761
+ .wm-org li:last-child::before {
762
+ border-right: 1.5px solid var(--org-line, var(--border2));
763
+ border-radius: 0 12px 0 0;
764
+ }
765
+ .wm-org li:first-child::after { border-radius: 12px 0 0 0 }
766
+ .wm-org ul ul::before {
767
+ content: "";
768
+ position: absolute;
769
+ top: 0;
770
+ left: 50%;
771
+ height: 22px;
772
+ border-left: 1.5px solid var(--org-line, var(--border2));
773
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waveinno/ui",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "WAVEINNO design system — tokens, shell, primitives and patterns shared by every WAVEINNO product",
5
5
  "keywords": [
6
6
  "waveinno",
@@ -29,6 +29,11 @@
29
29
  "import": "./dist/index.js",
30
30
  "default": "./dist/index.js"
31
31
  },
32
+ "./next": {
33
+ "types": "./dist/next/index.d.ts",
34
+ "import": "./dist/next/index.js",
35
+ "default": "./dist/next/index.js"
36
+ },
32
37
  "./styles.css": "./dist/styles.css",
33
38
  "./package.json": "./package.json",
34
39
  "./brand/*": "./dist/brand/*"
@@ -57,14 +62,17 @@
57
62
  "registry": "https://registry.npmjs.org/"
58
63
  },
59
64
  "dependencies": {
65
+ "@radix-ui/react-accordion": "^1.2.20",
60
66
  "@radix-ui/react-avatar": "^1.2.6",
61
67
  "@radix-ui/react-checkbox": "^1.3.11",
62
68
  "@radix-ui/react-dialog": "^1.1.23",
63
69
  "@radix-ui/react-dropdown-menu": "^2.1.24",
70
+ "@radix-ui/react-hover-card": "^1.1.23",
64
71
  "@radix-ui/react-label": "^2.1.15",
65
72
  "@radix-ui/react-popover": "^1.1.23",
66
73
  "@radix-ui/react-progress": "^1.1.16",
67
74
  "@radix-ui/react-radio-group": "^1.4.7",
75
+ "@radix-ui/react-scroll-area": "^1.2.18",
68
76
  "@radix-ui/react-select": "^2.3.7",
69
77
  "@radix-ui/react-separator": "^1.1.15",
70
78
  "@radix-ui/react-slider": "^1.4.7",
@@ -87,6 +95,11 @@
87
95
  "react-dom": ">=19",
88
96
  "tailwindcss": ">=4"
89
97
  },
98
+ "peerDependenciesMeta": {
99
+ "next": {
100
+ "optional": true
101
+ }
102
+ },
90
103
  "devDependencies": {
91
104
  "@types/node": "^26.6.2",
92
105
  "@types/react": "^19.3.0",