@fayz-ai/ui 0.19.0 → 0.21.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 (39) hide show
  1. package/dist/{chunk-SB6DWHXI.js → chunk-AIUHVTVK.js} +9 -3
  2. package/dist/chunk-AIUHVTVK.js.map +1 -0
  3. package/dist/{chunk-6YFPPK7X.js → chunk-EGHEU3U5.js} +131 -37
  4. package/dist/chunk-EGHEU3U5.js.map +1 -0
  5. package/dist/{chunk-ERSX3C7T.js → chunk-MBGTFL4I.js} +3 -3
  6. package/dist/{chunk-ERSX3C7T.js.map → chunk-MBGTFL4I.js.map} +1 -1
  7. package/dist/{chunk-5WSKZU7M.js → chunk-OYH7CEMB.js} +76 -113
  8. package/dist/chunk-OYH7CEMB.js.map +1 -0
  9. package/dist/{chunk-5NEADAIP.js → chunk-P3YTL3MF.js} +140 -16
  10. package/dist/chunk-P3YTL3MF.js.map +1 -0
  11. package/dist/dashboard/index.js +2 -2
  12. package/dist/icons.js +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +7 -7
  16. package/dist/layout/AppShell.d.ts +3 -1
  17. package/dist/layout/AppShell.d.ts.map +1 -1
  18. package/dist/layout/ModulePage.d.ts +13 -0
  19. package/dist/layout/ModulePage.d.ts.map +1 -1
  20. package/dist/layout/Sidebar.d.ts +7 -1
  21. package/dist/layout/Sidebar.d.ts.map +1 -1
  22. package/dist/layout/Takeover.d.ts +31 -0
  23. package/dist/layout/Takeover.d.ts.map +1 -0
  24. package/dist/layout/index.d.ts +1 -0
  25. package/dist/layout/index.d.ts.map +1 -1
  26. package/dist/layout/index.js +3 -3
  27. package/dist/primitives/header-tabs.d.ts +16 -0
  28. package/dist/primitives/header-tabs.d.ts.map +1 -1
  29. package/dist/primitives/index.js +3 -3
  30. package/dist/primitives/list-view.d.ts.map +1 -1
  31. package/dist/primitives/page-actions.d.ts.map +1 -1
  32. package/dist/primitives/refresh-button.d.ts.map +1 -1
  33. package/dist/primitives/row-actions.d.ts.map +1 -1
  34. package/dist/styles.css +24 -0
  35. package/package.json +2 -2
  36. package/dist/chunk-5NEADAIP.js.map +0 -1
  37. package/dist/chunk-5WSKZU7M.js.map +0 -1
  38. package/dist/chunk-6YFPPK7X.js.map +0 -1
  39. package/dist/chunk-SB6DWHXI.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { Zap, XCircle, X, Wrench, Workflow, Wheat, Warehouse, Wallet, UtensilsCrossed, Upload, WandSparkles, Utensils, UsersRound, Users, UserX, UserPlus, UserCog, UserCheck, User, Truck, Trophy, TrendingUp, TrendingDown, TreePalm, ToggleLeft, Timer, Target, Tags, TableProperties, Tag, Star, Sparkles, Soup, SlidersHorizontal, Sigma, ShoppingCart, ShoppingBag, ShieldCheck, Shield, Settings, Send, Search, Scale, Ruler, RotateCw, RotateCcw, Repeat, Receipt, Radio, Puzzle, PlusCircle, Plus, Plug, PieChart, Phone, Percent, Pencil, PawPrint, PartyPopper, Palette, PackageCheck, Package, Newspaper, Music, MousePointerClick, MoreHorizontal, Mic, MessageSquare, MessageCircle, Megaphone, MapPin, Map, Mail, LogIn, Lock, ListPlus, ListMusic, ListChecks, List, Link, LineChart, LeafyGreen, Leaf, LayoutTemplate, LayoutDashboard, Layers, Landmark, Instagram, Inbox, Images, Image, Home, FolderTree, Hourglass, Heart, Handshake, HandCoins, GraduationCap, Globe, Gift, Gauge, FolderOpen, Flame, Filter, FileText, FileDown, FileCheck2, Eye, ExternalLink, Egg, DoorOpen, DollarSign, Dog, Disc3, Database, CreditCard, CookingPot, Contact, Compass, Command, Clock3, Clock, ClipboardList, ClipboardCheck, Clapperboard, CircleDollarSign, CircleCheck, Circle, ChevronsUpDown, ChevronDown, ChefHat, CheckSquare, CheckCircle, Check, Cat, Camera, CalendarX, CalendarRange, CalendarPlus, CalendarDays, CalendarClock, CalendarCheck2, CalendarCheck, Calendar, Building2, Briefcase, Boxes, Box, BookOpenCheck, BookOpen, Bike, Bell, BarChart3, Banknote, Ban, BadgeDollarSign, Award, ArrowUpRight, ArrowUpCircle, ArrowLeftRight, ArrowDownRight, ArrowDownCircle, Apple, AlertTriangle, Activity } from 'lucide-react';
3
+ import { Zap, XCircle, X, Wrench, Workflow, Wheat, Warehouse, Wallet, UtensilsCrossed, Upload, WandSparkles, Utensils, UsersRound, Users, UserX, UserPlus, UserCog, UserCheck, User, Truck, Trophy, TrendingUp, TrendingDown, TreePalm, ToggleLeft, Timer, Ticket, Target, Tags, TableProperties, Tag, Store, Star, Sparkles, Soup, Smartphone, SlidersHorizontal, Sigma, ShoppingCart, ShoppingBag, ShieldCheck, Shield, Settings, Send, Search, ScanLine, Scale, Ruler, RotateCw, RotateCcw, Repeat, Receipt, Radio, Puzzle, PlusCircle, Plus, Plug, PieChart, Phone, Percent, Pencil, PawPrint, PartyPopper, Palette, PackageCheck, Package, Newspaper, Music, MousePointerClick, MoreHorizontal, Mic, MessageSquare, MessageCircle, Megaphone, MapPin, Map, Mail, LogIn, Lock, ListPlus, ListMusic, ListChecks, List, Link, LineChart, LeafyGreen, Leaf, LayoutTemplate, LayoutDashboard, Layers, Landmark, Instagram, Inbox, Images, Image, Home, FolderTree, Hourglass, Heart, Handshake, HandCoins, GraduationCap, Globe, GlassWater, Gift, Gauge, FolderOpen, Flame, Filter, FileText, FileDown, FileCheck2, Eye, ExternalLink, Egg, DoorOpen, DollarSign, Dog, Disc3, Database, CreditCard, CookingPot, Contact, Compass, Command, Clock3, Clock, ClipboardList, ClipboardCheck, Clapperboard, CircleDollarSign, CircleCheck, Circle, ChevronsUpDown, ChevronDown, ChefHat, CheckSquare, CheckCircle, Check, Cat, Camera, CalendarX, CalendarRange, CalendarPlus, CalendarDays, CalendarClock, CalendarCheck2, CalendarCheck, Calendar, Building2, Briefcase, Boxes, Box, BookOpenCheck, BookOpen, Bike, Bell, Beer, BarChart3, Banknote, Ban, BadgeDollarSign, Award, ArrowUpRight, ArrowUpCircle, ArrowLeftRight, ArrowDownRight, ArrowDownCircle, Apple, AlertTriangle, Activity } from 'lucide-react';
4
4
 
5
5
  // src/primitives/brand-marks.tsx
6
6
  var ChefControlMark = React.forwardRef(
@@ -29,6 +29,7 @@ var registry = {
29
29
  Ban,
30
30
  Banknote,
31
31
  BarChart3,
32
+ Beer,
32
33
  Bell,
33
34
  Bike,
34
35
  BookOpen,
@@ -82,6 +83,7 @@ var registry = {
82
83
  FolderOpen,
83
84
  Gauge,
84
85
  Gift,
86
+ GlassWater,
85
87
  Globe,
86
88
  GraduationCap,
87
89
  HandCoins,
@@ -139,6 +141,7 @@ var registry = {
139
141
  RotateCw,
140
142
  Ruler,
141
143
  Scale,
144
+ ScanLine,
142
145
  Search,
143
146
  Send,
144
147
  Settings,
@@ -148,13 +151,16 @@ var registry = {
148
151
  ShoppingCart,
149
152
  Sigma,
150
153
  SlidersHorizontal,
154
+ Smartphone,
151
155
  Soup,
152
156
  Sparkles,
153
157
  Star,
158
+ Store,
154
159
  Tag,
155
160
  TableProperties,
156
161
  Tags,
157
162
  Target,
163
+ Ticket,
158
164
  Timer,
159
165
  ToggleLeft,
160
166
  TreePalm,
@@ -195,5 +201,5 @@ function getLucideIcon(name) {
195
201
  var ICON_MAP = registry;
196
202
 
197
203
  export { BRAND_MARKS, ChefControlMark, ICON_MAP, getLucideIcon, registerIcons };
198
- //# sourceMappingURL=chunk-SB6DWHXI.js.map
199
- //# sourceMappingURL=chunk-SB6DWHXI.js.map
204
+ //# sourceMappingURL=chunk-AIUHVTVK.js.map
205
+ //# sourceMappingURL=chunk-AIUHVTVK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/primitives/brand-marks.tsx","../src/icons.ts"],"names":["ChefControlMark"],"mappings":"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","file":"chunk-AIUHVTVK.js","sourcesContent":["import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\n\n// ---------------------------------------------------------------------------\n// The Control family's own product marks.\n//\n// Every other tile in the app switcher is a lucide glyph named by a row in\n// `app.apps`, which is fine for a product that has no mark of its own. It is\n// not fine for one that does: ChefControl's symbol has weight hierarchy — thin\n// crown, heavy base, the same contrast as the logotype beside it — and lucide's\n// `ChefHat` draws the same object at constant stroke. The launcher is where a\n// product is recognised rather than read, so the row that shows a stand-in is\n// the row that says \"this app has no brand\".\n//\n// They live in the registry rather than in each app because the switcher lists\n// SIBLINGS: StoreControl draws the Chef row too, and a mark that only the app\n// itself owns would leave the same product looking like two different products\n// depending on which window you opened the menu from.\n//\n// `fill=\"currentColor\"` and no stroke: the tile decides the ink (see AppMark),\n// the same way a surface decides the colour of the text beside it — one drawing\n// for the gold tile, the rail and the login card, with no per-surface file and\n// no `filter: invert`, which chews the anti-aliased edge.\n// ---------------------------------------------------------------------------\n\n/**\n * Typed as a lucide icon so it can sit in the same registry: the props a mark\n * actually reads are `className` and `style`, and the stroke props the callers\n * pass mean nothing to a filled path — harmless, and not worth a second\n * resolver to avoid.\n */\nexport const ChefControlMark = React.forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n function ChefControlMark(props, ref) {\n return (\n // The viewBox is the symbol's ink box, not the 1080 square of the source\n // file: cropped, the hat centres in a tile instead of floating in padding.\n <svg ref={ref} viewBox=\"140.2 147.83 799.59 784.35\" fill=\"currentColor\" aria-hidden {...props}>\n <path d=\"M871.42,305.72c-8.6-6.71-17.86-12.68-27.66-17.78-25.93-13.54-55.59-21.23-87.13-21.23-8.66,0-17.18.58-25.51,1.7-33.22-70.59-106.31-120.58-191.12-120.58s-157.93,49.99-191.12,120.61h-.03c-8.33-1.15-16.85-1.73-25.51-1.73-32.62,0-63.27,8.24-89.79,22.68-9.74,5.27-18.94,11.41-27.45,18.27-40.27,32.41-65.9,81.19-65.9,135.73,0,93.23,74.89,169.64,169.82,176.21,3.88,33.85,5.91,68.69,5.91,104.24,0,45.93-3.38,90.64-9.77,133.6-2,13.45-4.3,26.71-6.87,39.79,13.5-3.43,27.27-6.6,41.25-9.42,62.07-12.68,128.53-19.54,197.6-19.54s135.5,6.86,197.57,19.54c13.98,2.82,27.75,5.96,41.25,9.42-2.57-13.08-4.87-26.33-6.87-39.79-6.39-42.96-9.77-87.67-9.77-133.6,0-35.47,2-70.21,5.89-104.01,96.69-4.84,173.58-82,173.58-176.44,0-55.64-26.67-105.28-68.37-137.66ZM771.38,570.43c-4.87.51-9.77.75-14.76.75-8.36,0-16.55-.72-24.52-2.09-1.94,12.64-3.64,25.42-5.11,38.35-4.03,35.73-6.12,72.47-6.12,110.02,0,44.3,2.93,173.01,8.48,214.69-60.25-12.28-124.5-18.91-191.2-18.91s-130.99,6.63-191.24,18.94c5.56-41.67,8.48-170.42,8.48-214.71,0-37.34-2.09-73.9-6.06-109.45-1.43-12.93-3.14-25.72-5.11-38.35-6.81,1.02-13.8,1.52-20.88,1.52-6.27,0-12.46-.39-18.52-1.19-71.03-9.08-125.94-69.78-125.94-143.29,0-42.06,17.95-79.91,46.63-106.31,8.54-7.88,18.04-14.73,28.32-20.37,20.64-11.35,44.33-17.8,69.51-17.8,4.24,0,8.42.18,12.55.54,13.2,1.13,25.87,4.03,37.82,8.48,3.2-12.7,7.83-24.79,13.68-36.17,28.47-55.29,86.12-93.11,152.61-93.11s124.11,37.82,152.58,93.11c5.85,11.38,10.49,23.48,13.68,36.17,11.92-4.45,24.61-7.35,37.82-8.48,4.12-.36,8.3-.54,12.55-.54,24.07,0,46.75,5.88,66.7,16.28,10.34,5.41,19.95,12.01,28.62,19.66,30.14,26.47,49.17,65.3,49.17,108.55,0,74.8-56.87,136.36-129.73,143.74Z\" />\n </svg>\n )\n },\n) as unknown as LucideIcon\n\n/** Registry entries, by the name `app.apps.icon` carries for these products. */\nexport const BRAND_MARKS: Record<string, LucideIcon> = {\n ChefControlMark,\n}\n","import type { LucideIcon } from 'lucide-react'\nimport { BRAND_MARKS } from './primitives/brand-marks'\nimport {\n Activity, AlertTriangle, Apple, ArrowDownCircle, ArrowDownRight, ArrowLeftRight, ArrowUpCircle, ArrowUpRight,\n Award, BadgeDollarSign, Ban, Banknote, BarChart3, Beer, Bell, Bike, BookOpen,\n BookOpenCheck, Box, Boxes, Briefcase, Building2, Calendar, CalendarCheck, CalendarCheck2,\n CalendarClock, CalendarDays, CalendarPlus, CalendarRange, CalendarX, Camera, Cat, Check, CheckCircle,\n CheckSquare, ChefHat, ChevronDown, ChevronsUpDown, Circle, CircleCheck, CircleDollarSign, Clapperboard,\n ClipboardCheck, ClipboardList,\n Clock, Clock3, Command, Compass, Contact, CookingPot, CreditCard, Database, Disc3, Dog,\n DollarSign, DoorOpen, Egg, ExternalLink, Eye, FileCheck2, FileDown,\n FileText, Filter, Flame, FolderOpen, Gauge, Gift, GlassWater, Globe, GraduationCap, HandCoins, Handshake, Heart, Hourglass,\n FolderTree, Home, Image, Images, Inbox, Instagram, Landmark, Layers, LayoutDashboard, LayoutTemplate,\n Leaf, LeafyGreen, LineChart, Link, List, ListChecks, ListMusic, ListPlus, Lock, LogIn,\n Mail, Map, MapPin, Megaphone, MessageCircle, MessageSquare, Mic, MoreHorizontal,\n MousePointerClick, Music, Newspaper, Package, PackageCheck, Palette, PartyPopper, PawPrint,\n Pencil, Percent, Phone, PieChart, Plug, Plus, PlusCircle, Puzzle, Radio,\n Receipt, Repeat, RotateCcw, RotateCw, Ruler, Scale, ScanLine, Search, Send, Settings, Shield,\n ShieldCheck, ShoppingBag, ShoppingCart, Sigma, SlidersHorizontal, Smartphone, Soup, Sparkles, Star, Store, Tag,\n TableProperties, Tags, Target, Ticket, Timer, ToggleLeft, TreePalm, TrendingDown, TrendingUp, Trophy, Truck,\n User, UserCheck, UserCog, UserPlus, UserX, Users, UsersRound, Utensils, WandSparkles,\n Upload, UtensilsCrossed, Wallet, Warehouse, Wheat, Workflow, Wrench, X, XCircle,\n Zap,\n} from 'lucide-react'\n\n// ---------------------------------------------------------------------------\n// Central lucide icon registry. The SDK's manifest-driven surfaces resolve\n// icons by string name; a namespace import (`import * as LucideIcons`) defeats\n// tree-shaking and drags all ~1,500 icons (~500 KB min) into every bundle, so\n// the SDK ships this curated set instead — the union of every icon name the\n// SDK, plugins, and app templates reference. Apps using names outside the set\n// call registerIcons({ Name: Component }) with their own named imports.\n// ---------------------------------------------------------------------------\n\nconst registry: Record<string, LucideIcon> = {\n Activity, AlertTriangle, Apple, ArrowDownCircle, ArrowDownRight, ArrowLeftRight, ArrowUpCircle, ArrowUpRight,\n Award, BadgeDollarSign, Ban, Banknote, BarChart3, Beer, Bell, Bike, BookOpen,\n BookOpenCheck, Box, Boxes, Briefcase, Building2, Calendar, CalendarCheck, CalendarCheck2,\n CalendarClock, CalendarDays, CalendarPlus, CalendarRange, CalendarX, Camera, Cat, Check, CheckCircle,\n CheckSquare, ChefHat, ChevronDown, ChevronsUpDown, Circle, CircleCheck, CircleDollarSign, Clapperboard,\n ClipboardCheck, ClipboardList,\n Clock, Clock3, Command, Compass, Contact, CookingPot, CreditCard, Database, Disc3, Dog,\n DollarSign, DoorOpen, Egg, ExternalLink, Eye, FileCheck2, FileDown,\n FileText, Filter, Flame, FolderOpen, Gauge, Gift, GlassWater, Globe, GraduationCap, HandCoins, Handshake, Heart, Hourglass,\n FolderTree, Home, Image, Images, Inbox, Instagram, Landmark, Layers, LayoutDashboard, LayoutTemplate,\n Leaf, LeafyGreen, LineChart, Link, List, ListChecks, ListMusic, ListPlus, Lock, LogIn,\n Mail, Map, MapPin, Megaphone, MessageCircle, MessageSquare, Mic, MoreHorizontal,\n MousePointerClick, Music, Newspaper, Package, PackageCheck, Palette, PartyPopper, PawPrint,\n Pencil, Percent, Phone, PieChart, Plug, Plus, PlusCircle, Puzzle, Radio,\n Receipt, Repeat, RotateCcw, RotateCw, Ruler, Scale, ScanLine, Search, Send, Settings, Shield,\n ShieldCheck, ShoppingBag, ShoppingCart, Sigma, SlidersHorizontal, Smartphone, Soup, Sparkles, Star, Store, Tag,\n TableProperties, Tags, Target, Ticket, Timer, ToggleLeft, TreePalm, TrendingDown, TrendingUp, Trophy, Truck,\n User, UserCheck, UserCog, UserPlus, UserX, Users, UsersRound, Utensils, WandSparkles,\n Upload, UtensilsCrossed, Wallet, Warehouse, Wheat, Workflow, Wrench, X, XCircle,\n Zap,\n // The family's own product marks, resolvable by the same string names the\n // app registry stores — a product that HAS a mark should never be drawn by a\n // stand-in glyph in the launcher.\n ...BRAND_MARKS,\n}\n\n/** Add or override icons resolvable by string name (e.g. from app manifests). */\nexport function registerIcons(icons: Record<string, LucideIcon>): void {\n Object.assign(registry, icons)\n}\n\n/** Resolve a lucide icon by name; undefined when not registered. */\nexport function getLucideIcon(name: string): LucideIcon | undefined {\n return registry[name]\n}\n\n/** The registered icon map (live reference — do not mutate directly). */\nexport const ICON_MAP = registry\n"]}
@@ -1,6 +1,6 @@
1
1
  import { useHasPageHeaderHost, usePageHeader, PageTitlePortal, useLayoutStore, useHasPageHeaderBack, useRegisterPageActions, usePageHeaderClaimed, usePageTitleSlotHost, useHasPageHeaderOutlet, useHasPageActions, usePageHeaderHost } from './chunk-HKGTF2YA.js';
2
2
  import { cn } from './chunk-OKZ6WQB3.js';
3
- import { ICON_MAP } from './chunk-SB6DWHXI.js';
3
+ import { ICON_MAP } from './chunk-AIUHVTVK.js';
4
4
  import * as React2 from 'react';
5
5
  import * as DialogPrimitive from '@radix-ui/react-dialog';
6
6
  import { X, Loader2, ArrowLeft, Search, Bell, PanelLeft, PanelLeftClose, Menu, Crown, ChevronDown, ChevronRight, ChevronLeft, ExternalLink, CreditCard, Sparkles, Home, Plus, UserCog, Settings, LogOut } from 'lucide-react';
@@ -821,6 +821,7 @@ function Sidebar({
821
821
  topContent,
822
822
  identity,
823
823
  navTop,
824
+ beforeNav,
824
825
  footerContent,
825
826
  borderless,
826
827
  userMenuSlot,
@@ -995,6 +996,7 @@ function Sidebar({
995
996
  }
996
997
  ) })
997
998
  ),
999
+ beforeNav && /* @__PURE__ */ jsx("div", { className: cn("px-2 pb-1 empty:hidden", collapsed && "flex justify-center"), children: withCollapsed(beforeNav, collapsed) }),
998
1000
  /* @__PURE__ */ jsxs(
999
1001
  "nav",
1000
1002
  {
@@ -1390,6 +1392,7 @@ function SidebarLayout({
1390
1392
  sidebarTopContent,
1391
1393
  sidebarIdentity,
1392
1394
  sidebarNavTop,
1395
+ sidebarBeforeNav,
1393
1396
  sidebarFooterContent,
1394
1397
  frame,
1395
1398
  immersive,
@@ -1448,6 +1451,7 @@ function SidebarLayout({
1448
1451
  topContent: sidebarTopContent,
1449
1452
  identity: sidebarIdentity,
1450
1453
  navTop: sidebarNavTop,
1454
+ beforeNav: sidebarBeforeNav,
1451
1455
  footerContent: sidebarFooterContent,
1452
1456
  borderless: frame,
1453
1457
  userMenuSlot,
@@ -1527,6 +1531,7 @@ function SidebarLayout({
1527
1531
  topContent: sidebarTopContent,
1528
1532
  identity: sidebarIdentity,
1529
1533
  navTop: sidebarNavTop,
1534
+ beforeNav: sidebarBeforeNav,
1530
1535
  footerContent: sidebarFooterContent,
1531
1536
  userMenuSlot,
1532
1537
  notificationSlot,
@@ -1855,6 +1860,7 @@ function AppShell({
1855
1860
  sidebarTopContent,
1856
1861
  sidebarIdentity,
1857
1862
  sidebarNavTop,
1863
+ sidebarBeforeNav,
1858
1864
  sidebarFooterContent,
1859
1865
  bottomNav,
1860
1866
  onBottomNavAction,
@@ -1922,6 +1928,7 @@ function AppShell({
1922
1928
  sidebarTopContent,
1923
1929
  sidebarIdentity,
1924
1930
  sidebarNavTop,
1931
+ sidebarBeforeNav,
1925
1932
  sidebarFooterContent,
1926
1933
  frame: contentFrame,
1927
1934
  immersive,
@@ -2146,33 +2153,54 @@ function HeaderTabs({
2146
2153
  children: tabs.map((tab) => {
2147
2154
  const active = tab.value === value;
2148
2155
  const Icon = tab.icon;
2149
- return /* @__PURE__ */ jsxs(
2150
- "button",
2151
- {
2152
- type: "button",
2153
- role: "tab",
2154
- "aria-selected": active,
2155
- onClick: () => onChange(tab.value),
2156
- className: cn(
2157
- "relative flex shrink-0 items-center gap-1.5 whitespace-nowrap text-sm transition-colors",
2158
- // Filled: the row owns the band's height and the underline sits on
2159
- // its bottom edge. Otherwise the underline trails the label by 6px.
2160
- fill ? "h-full" : "pb-1.5",
2161
- active ? "font-medium text-foreground" : "text-muted-foreground hover:text-foreground"
2162
- ),
2163
- children: [
2164
- Icon ? /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4 shrink-0" }) : null,
2165
- /* @__PURE__ */ jsx("span", { children: tab.label }),
2166
- tab.count != null && /* @__PURE__ */ jsx("span", { className: cn(
2167
- "ml-0.5 rounded-full px-1.5 text-[11px] tabular-nums",
2168
- active ? "bg-muted text-foreground" : "bg-muted/70 text-muted-foreground"
2169
- ), children: tab.count }),
2170
- tab.badge,
2171
- active && /* @__PURE__ */ jsx("span", { className: "absolute inset-x-0 bottom-0 h-0.5 rounded-full bg-foreground" })
2172
- ]
2173
- },
2174
- tab.value
2156
+ const box = cn(
2157
+ "relative flex shrink-0 items-center gap-1.5 whitespace-nowrap text-sm transition-colors",
2158
+ fill ? "h-full" : "pb-1.5",
2159
+ active ? "font-medium text-foreground" : "text-muted-foreground hover:text-foreground",
2160
+ tab.dim && "opacity-50 hover:opacity-100"
2175
2161
  );
2162
+ const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
2163
+ Icon ? /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4 shrink-0" }) : null,
2164
+ /* @__PURE__ */ jsx("span", { children: tab.label }),
2165
+ tab.count != null && /* @__PURE__ */ jsx("span", { className: cn(
2166
+ "ml-0.5 rounded-full px-1.5 text-[11px] tabular-nums",
2167
+ active ? "bg-muted text-foreground" : "bg-muted/70 text-muted-foreground"
2168
+ ), children: tab.count }),
2169
+ tab.badge
2170
+ ] });
2171
+ const underline = active ? /* @__PURE__ */ jsx("span", { className: "absolute inset-x-0 bottom-0 h-0.5 rounded-full bg-foreground" }) : null;
2172
+ if (!tab.trailing) {
2173
+ return /* @__PURE__ */ jsxs(
2174
+ "button",
2175
+ {
2176
+ type: "button",
2177
+ role: "tab",
2178
+ "aria-selected": active,
2179
+ onClick: () => onChange(tab.value),
2180
+ className: box,
2181
+ children: [
2182
+ inner,
2183
+ underline
2184
+ ]
2185
+ },
2186
+ tab.value
2187
+ );
2188
+ }
2189
+ return /* @__PURE__ */ jsxs("div", { className: box, children: [
2190
+ /* @__PURE__ */ jsx(
2191
+ "button",
2192
+ {
2193
+ type: "button",
2194
+ role: "tab",
2195
+ "aria-selected": active,
2196
+ onClick: () => onChange(tab.value),
2197
+ className: "flex items-center gap-1.5 whitespace-nowrap",
2198
+ children: inner
2199
+ }
2200
+ ),
2201
+ tab.trailing,
2202
+ underline
2203
+ ] }, tab.value);
2176
2204
  })
2177
2205
  }
2178
2206
  );
@@ -2187,11 +2215,56 @@ function PageTabs({ actions, className, ...props }) {
2187
2215
  ),
2188
2216
  children: [
2189
2217
  /* @__PURE__ */ jsx(HeaderTabs, { ...props, className: "-mb-px" }),
2190
- actions && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2 pb-1.5", children: actions })
2218
+ actions && /* @__PURE__ */ jsx("div", { className: "ml-auto flex shrink-0 items-center gap-2 pb-1.5", children: actions })
2191
2219
  ]
2192
2220
  }
2193
2221
  );
2194
2222
  }
2223
+ var SIZE = {
2224
+ sm: { container: "h-[26px]", segment: "px-2.5 text-xs" },
2225
+ md: { container: "h-[30px]", segment: "px-3 text-sm" }
2226
+ };
2227
+ function SegmentedControl({
2228
+ options,
2229
+ value,
2230
+ onChange,
2231
+ size = "sm",
2232
+ className,
2233
+ ...rest
2234
+ }) {
2235
+ const items = options.map((o) => typeof o === "string" ? { value: o, label: o } : o);
2236
+ return /* @__PURE__ */ jsx(
2237
+ "div",
2238
+ {
2239
+ role: "tablist",
2240
+ "aria-label": rest["aria-label"],
2241
+ className: cn(
2242
+ "inline-flex items-center rounded-button border border-border bg-card p-0.5 shadow-button",
2243
+ SIZE[size].container,
2244
+ className
2245
+ ),
2246
+ children: items.map((item) => {
2247
+ const active = item.value === value;
2248
+ return /* @__PURE__ */ jsx(
2249
+ "button",
2250
+ {
2251
+ type: "button",
2252
+ role: "tab",
2253
+ "aria-selected": active,
2254
+ onClick: () => onChange(item.value),
2255
+ className: cn(
2256
+ "flex h-full items-center rounded-button font-semibold transition-colors",
2257
+ SIZE[size].segment,
2258
+ active ? "bg-foreground text-background" : "text-muted-foreground hover:bg-muted/60"
2259
+ ),
2260
+ children: item.label
2261
+ },
2262
+ item.value
2263
+ );
2264
+ })
2265
+ }
2266
+ );
2267
+ }
2195
2268
  var NavTransitionContext = React2.createContext("slide");
2196
2269
  function NavTransitionProvider({ value, children }) {
2197
2270
  return /* @__PURE__ */ jsx(NavTransitionContext.Provider, { value, children });
@@ -2282,7 +2355,7 @@ function RailNavItem({ item }) {
2282
2355
  ] });
2283
2356
  }
2284
2357
  function defaultChildOf(item) {
2285
- const kids = item.children ?? [];
2358
+ const kids = (item.children ?? []).filter((c) => c.kind !== "action");
2286
2359
  return kids.find((c) => c.defaultChild) ?? kids.find((c) => /(^|-)list$/i.test(c.id)) ?? kids.find((c) => !/(^|-)(new|novo|nova|create)$/i.test(c.id)) ?? kids[0];
2287
2360
  }
2288
2361
  function MobileTabs({ nav }) {
@@ -2337,8 +2410,9 @@ function MobileTabs({ nav }) {
2337
2410
  }) }),
2338
2411
  expandedId && (() => {
2339
2412
  const item = nav.find((n) => n.id === expandedId);
2340
- if (!item?.children) return null;
2341
- return /* @__PURE__ */ jsx("div", { className: "flex gap-1 px-2 pb-2 animate-in fade-in-0 slide-in-from-top-1", children: item.children.map((child) => /* @__PURE__ */ jsxs(
2413
+ const shown = (item?.children ?? []).filter((c) => c.kind !== "action");
2414
+ if (shown.length < 2) return null;
2415
+ return /* @__PURE__ */ jsx("div", { className: "flex gap-1 px-2 pb-2 animate-in fade-in-0 slide-in-from-top-1", children: shown.map((child) => /* @__PURE__ */ jsxs(
2342
2416
  "button",
2343
2417
  {
2344
2418
  type: "button",
@@ -2470,8 +2544,8 @@ function ShellSubpageHeader({
2470
2544
  }
2471
2545
  function ModuleHeader({ nav }) {
2472
2546
  function defaultChild(item) {
2473
- const kids = item.children ?? [];
2474
- return kids.find((c) => /list/i.test(c.id) || /^list$/i.test(c.label)) ?? kids[kids.length - 1];
2547
+ const kids2 = (item.children ?? []).filter((c) => c.kind !== "action");
2548
+ return kids2.find((c) => /list/i.test(c.id) || /^list$/i.test(c.label)) ?? kids2[kids2.length - 1];
2475
2549
  }
2476
2550
  const activeItem = nav.find((item) => item.active || item.children?.some((c) => c.active));
2477
2551
  const tabs = nav.map((item) => ({
@@ -2489,7 +2563,27 @@ function ModuleHeader({ nav }) {
2489
2563
  if (hasChildren) defaultChild(item)?.onClick?.();
2490
2564
  else item.onClick?.();
2491
2565
  };
2492
- return /* @__PURE__ */ jsx(PageTabs, { tabs, value: activeItem?.id ?? nav[0]?.id ?? "", onChange });
2566
+ const kids = (activeItem?.children ?? []).filter((c) => c.kind !== "action");
2567
+ const activeKid = kids.find((c) => c.active)?.id ?? kids[0]?.id;
2568
+ const childControl = kids.length > 1 ? /* @__PURE__ */ jsx(
2569
+ SegmentedControl,
2570
+ {
2571
+ size: "sm",
2572
+ "aria-label": activeItem?.label,
2573
+ options: kids.map((c) => ({ value: c.id, label: c.label })),
2574
+ value: activeKid ?? "",
2575
+ onChange: (id) => kids.find((c) => c.id === id)?.onClick?.()
2576
+ }
2577
+ ) : void 0;
2578
+ return /* @__PURE__ */ jsx(
2579
+ PageTabs,
2580
+ {
2581
+ tabs,
2582
+ value: activeItem?.id ?? nav[0]?.id ?? "",
2583
+ onChange,
2584
+ actions: childControl
2585
+ }
2586
+ );
2493
2587
  }
2494
2588
  function ModulePage({ title: _title, subtitle, nav, children, className, headerAction, showHeader = true, sidebarFooter, navVariant, viewKey, direction }) {
2495
2589
  const ctxVariant = useModuleLayout();
@@ -2522,6 +2616,6 @@ function ModulePage({ title: _title, subtitle, nav, children, className, headerA
2522
2616
  ] });
2523
2617
  }
2524
2618
 
2525
- export { AppShell, BackStyleProvider, HeaderTabs, ModuleLayoutProvider, ModulePage, NavTransitionProvider, PageHeader, PageHeaderActions, PageHeaderCrumb, PageRail, PageTabs, PageTransition, RailNavItem, SaveBar, SaveBarProvider, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SubpageHeader, Topbar, bottomNavReachesAll, useBackHandler, useBackStyle, useCrossModuleBack, useModuleHeaderActionsSlot, useModuleHeaderSlot, useModuleLayout, useNavTransition, useRailRow, useSaveBar, useSaveBarVisible };
2526
- //# sourceMappingURL=chunk-6YFPPK7X.js.map
2527
- //# sourceMappingURL=chunk-6YFPPK7X.js.map
2619
+ export { AppShell, BackStyleProvider, HeaderTabs, ModuleLayoutProvider, ModulePage, NavTransitionProvider, PageHeader, PageHeaderActions, PageHeaderCrumb, PageRail, PageTabs, PageTransition, RailNavItem, SaveBar, SaveBarProvider, SegmentedControl, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SubpageHeader, Topbar, bottomNavReachesAll, useBackHandler, useBackStyle, useCrossModuleBack, useModuleHeaderActionsSlot, useModuleHeaderSlot, useModuleLayout, useNavTransition, useRailRow, useSaveBar, useSaveBarVisible };
2620
+ //# sourceMappingURL=chunk-EGHEU3U5.js.map
2621
+ //# sourceMappingURL=chunk-EGHEU3U5.js.map