@fabio.caffarello/react-design-system 3.13.0 → 4.0.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 (150) hide show
  1. package/dist/granular/ui/components/Autocomplete/Autocomplete.js +103 -86
  2. package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -1
  3. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +57 -47
  4. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -1
  5. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +21 -20
  6. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -1
  7. package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -1
  8. package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -1
  9. package/dist/granular/ui/components/CommandPalette/CommandPalette.js +187 -149
  10. package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -1
  11. package/dist/granular/ui/components/DataGrid/DataGrid.js +92 -92
  12. package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -1
  13. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +154 -139
  14. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -1
  15. package/dist/granular/ui/components/Dialog/AlertDialog.js +73 -40
  16. package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -1
  17. package/dist/granular/ui/components/Dialog/DialogContent.js +54 -48
  18. package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -1
  19. package/dist/granular/ui/components/Dialog/DialogDescription.js +31 -31
  20. package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -1
  21. package/dist/granular/ui/components/Dialog/DialogTitle.js +30 -30
  22. package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -1
  23. package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -1
  24. package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -1
  25. package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -1
  26. package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -1
  27. package/dist/granular/ui/components/Form/Form.js +38 -37
  28. package/dist/granular/ui/components/Form/Form.js.map +1 -1
  29. package/dist/granular/ui/components/Form/FormField.js +28 -26
  30. package/dist/granular/ui/components/Form/FormField.js.map +1 -1
  31. package/dist/granular/ui/components/Header/Header.js.map +1 -1
  32. package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -1
  33. package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -1
  34. package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -1
  35. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -1
  36. package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -1
  37. package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -1
  38. package/dist/granular/ui/components/Menu/Menu.js.map +1 -1
  39. package/dist/granular/ui/components/Modal/Modal.js +98 -86
  40. package/dist/granular/ui/components/Modal/Modal.js.map +1 -1
  41. package/dist/granular/ui/components/MultiSelect/MultiSelect.js +122 -106
  42. package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -1
  43. package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -1
  44. package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -1
  45. package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -1
  46. package/dist/granular/ui/components/Popover/Popover.js.map +1 -1
  47. package/dist/granular/ui/components/Rating/Rating.js.map +1 -1
  48. package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -1
  49. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +82 -64
  50. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -1
  51. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +30 -29
  52. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -1
  53. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +37 -35
  54. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -1
  55. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +57 -57
  56. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -1
  57. package/dist/granular/ui/components/Stepper/Stepper.js +102 -94
  58. package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -1
  59. package/dist/granular/ui/components/Table/Table.js +41 -35
  60. package/dist/granular/ui/components/Table/Table.js.map +1 -1
  61. package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -1
  62. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +49 -46
  63. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -1
  64. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -1
  65. package/dist/granular/ui/components/Table/TableProvider.js +82 -80
  66. package/dist/granular/ui/components/Table/TableProvider.js.map +1 -1
  67. package/dist/granular/ui/components/Table/TableRow.js +57 -53
  68. package/dist/granular/ui/components/Table/TableRow.js.map +1 -1
  69. package/dist/granular/ui/components/Table/useColumnResizing.js +53 -53
  70. package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -1
  71. package/dist/granular/ui/components/TimePicker/TimePicker.js +149 -103
  72. package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -1
  73. package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -1
  74. package/dist/granular/ui/hooks/useFocusRestore.js +14 -15
  75. package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -1
  76. package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -1
  77. package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -1
  78. package/dist/granular/ui/primitives/Chip/Chip.js +91 -71
  79. package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -1
  80. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -1
  81. package/dist/granular/ui/primitives/Input/Input.js.map +1 -1
  82. package/dist/granular/ui/primitives/Label/Label.js.map +1 -1
  83. package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -1
  84. package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -1
  85. package/dist/granular/ui/primitives/Select/Select.js.map +1 -1
  86. package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -1
  87. package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -1
  88. package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -1
  89. package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -1
  90. package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -1
  91. package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -1
  92. package/dist/granular/ui/providers/DialogContext.js.map +1 -1
  93. package/dist/granular/ui/providers/DialogProvider.js +24 -20
  94. package/dist/granular/ui/providers/DialogProvider.js.map +1 -1
  95. package/dist/index.cjs +144 -144
  96. package/dist/index.cjs.map +1 -1
  97. package/dist/index.js +5780 -5486
  98. package/dist/index.js.map +1 -1
  99. package/dist/react-design-system.css +1 -1
  100. package/dist/server/index.cjs +7 -7
  101. package/dist/server/index.cjs.map +1 -1
  102. package/dist/server/index.js +404 -384
  103. package/dist/server/index.js.map +1 -1
  104. package/dist/ui/components/Autocomplete/AutocompleteList.d.ts +4 -0
  105. package/dist/ui/components/Autocomplete/AutocompleteOption.d.ts +8 -0
  106. package/dist/ui/components/Breadcrumb/Breadcrumb.d.ts +0 -1
  107. package/dist/ui/components/ColorPicker/ColorPicker.d.ts +0 -1
  108. package/dist/ui/components/CommandPalette/CommandPalette.d.ts +0 -1
  109. package/dist/ui/components/DataGrid/DataGrid.d.ts +0 -1
  110. package/dist/ui/components/Dialog/DialogContent.d.ts +20 -1
  111. package/dist/ui/components/Drawer/Drawer.d.ts +0 -1
  112. package/dist/ui/components/Dropdown/Dropdown.d.ts +0 -1
  113. package/dist/ui/components/EmptyState/EmptyState.d.ts +0 -1
  114. package/dist/ui/components/FileUpload/FileUpload.d.ts +0 -1
  115. package/dist/ui/components/Form/FormField.d.ts +7 -0
  116. package/dist/ui/components/Header/Header.d.ts +1 -1
  117. package/dist/ui/components/Header/components/HeaderActions.d.ts +1 -1
  118. package/dist/ui/components/Header/components/HeaderHamburger.d.ts +1 -1
  119. package/dist/ui/components/Header/components/HeaderLogo.d.ts +1 -1
  120. package/dist/ui/components/Header/components/HeaderMobileMenu.d.ts +1 -1
  121. package/dist/ui/components/Header/components/HeaderNavigation.d.ts +1 -1
  122. package/dist/ui/components/Header/contexts/HeaderContext.d.ts +1 -1
  123. package/dist/ui/components/Menu/Menu.d.ts +0 -1
  124. package/dist/ui/components/Modal/Modal.d.ts +1 -2
  125. package/dist/ui/components/Navigation/Navigation.d.ts +1 -1
  126. package/dist/ui/components/PageHeader/PageHeader.d.ts +1 -1
  127. package/dist/ui/components/Pagination/Pagination.d.ts +0 -1
  128. package/dist/ui/components/Popover/Popover.d.ts +0 -1
  129. package/dist/ui/components/Rating/Rating.d.ts +0 -1
  130. package/dist/ui/components/SearchInput/SearchInput.d.ts +0 -1
  131. package/dist/ui/components/Stepper/Stepper.d.ts +0 -1
  132. package/dist/ui/components/Table/TableActions/TableActions.d.ts +0 -1
  133. package/dist/ui/components/Table/TableFilters/TableFilters.d.ts +0 -1
  134. package/dist/ui/components/Table/TablePagination/TablePagination.d.ts +0 -1
  135. package/dist/ui/components/TimePicker/TimePicker.d.ts +0 -1
  136. package/dist/ui/components/Timeline/Timeline.d.ts +0 -1
  137. package/dist/ui/primitives/Checkbox/Checkbox.d.ts +0 -1
  138. package/dist/ui/primitives/Chip/Chip.d.ts +21 -0
  139. package/dist/ui/primitives/ErrorMessage/ErrorMessage.d.ts +0 -1
  140. package/dist/ui/primitives/Input/Input.d.ts +0 -1
  141. package/dist/ui/primitives/Label/Label.d.ts +0 -1
  142. package/dist/ui/primitives/NavLink/NavLink.d.ts +1 -1
  143. package/dist/ui/primitives/Radio/Radio.d.ts +0 -1
  144. package/dist/ui/primitives/Select/Select.d.ts +0 -1
  145. package/dist/ui/primitives/Skeleton/Skeleton.d.ts +0 -1
  146. package/dist/ui/primitives/Slider/Slider.d.ts +0 -1
  147. package/dist/ui/primitives/Switch/Switch.d.ts +0 -1
  148. package/dist/ui/primitives/Tooltip/Tooltip.d.ts +0 -1
  149. package/dist/ui/providers/DialogContext.d.ts +8 -0
  150. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/ui/tokens/radius.ts","../../src/ui/tokens/spacing.ts","../../src/ui/tokens/typography.ts","../../src/ui/utils/cn.ts","../../src/ui/utils/cva.ts","../../src/ui/primitives/Badge/Badge.tsx","../../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../node_modules/@radix-ui/react-slot/dist/index.mjs","../../src/ui/primitives/Chip/Chip.tsx","../../src/ui/primitives/ErrorMessage/ErrorMessage.tsx","../../src/ui/primitives/Info/Info.tsx","../../src/ui/primitives/Label/Label.tsx","../../src/ui/tokens/shadows.ts","../../src/ui/primitives/Progress/Progress.tsx","../../src/ui/primitives/Separator/Separator.tsx","../../src/ui/primitives/Skeleton/Skeleton.tsx","../../src/ui/primitives/Spinner/Spinner.tsx","../../src/ui/primitives/Text/Text.tsx","../../src/ui/layouts/Container/Container.tsx","../../src/ui/layouts/Stack/Stack.tsx","../../src/ui/components/Breadcrumb/Breadcrumb.tsx","../../src/ui/components/Card/CardHeader.tsx","../../src/ui/components/Card/CardTitle.tsx","../../src/ui/components/Card/CardSubtitle.tsx","../../src/ui/components/Card/CardActions.tsx","../../src/ui/components/Card/CardBody.tsx","../../src/ui/components/Card/Card.tsx","../../src/ui/components/Dialog/DialogHeader.tsx","../../src/ui/components/Dialog/DialogFooter.tsx","../../src/ui/components/Drawer/DrawerHeader.tsx","../../src/ui/components/Drawer/DrawerFooter.tsx","../../src/ui/components/FilterChips/FilterChips.tsx","../../src/ui/components/Header/components/HeaderActions.tsx","../../src/ui/components/Header/components/HeaderNavigation.tsx","../../src/ui/components/HeroSection/HeroSection.tsx","../../src/ui/components/Menu/MenuSeparator.tsx","../../src/ui/components/SideNavbar/components/Navbar/NavbarSeparator.tsx","../../src/ui/components/PageHeader/PageHeader.tsx","../../src/ui/components/Stat/Stat.tsx","../../src/ui/components/Stat/StatGroup.tsx","../../src/ui/components/Table/TableCell.tsx","../../src/ui/components/TabsAsLinks/TabsAsLinks.tsx","../../src/ui/components/Timeline/Timeline.tsx"],"sourcesContent":["/**\n * Border Radius Tokens\n *\n * Centralized border radius system for consistent rounded corners.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type RadiusSize =\n | \"none\"\n | \"sm\"\n | \"md\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"full\";\n\nexport interface RadiusToken {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n description: string;\n}\n\n/**\n * Radius Token Factory\n * Creates radius tokens with consistent values\n */\nexport class RadiusTokenFactory {\n /**\n * Create a radius token\n */\n static create(size: RadiusSize): RadiusToken {\n const radiusMap: Record<\n RadiusSize,\n { px: number; tailwind: string; description: string }\n > = {\n none: {\n px: 0,\n tailwind: \"rounded-none\",\n description: \"No border radius\",\n },\n sm: {\n px: 2,\n tailwind: \"rounded-sm\",\n description: \"Small radius (2px) for subtle rounding\",\n },\n md: {\n px: 6,\n tailwind: \"rounded-md\",\n description: \"Medium radius (6px) for buttons and inputs\",\n },\n lg: {\n px: 8,\n tailwind: \"rounded-lg\",\n description: \"Large radius (8px) for cards and containers\",\n },\n xl: {\n px: 12,\n tailwind: \"rounded-xl\",\n description: \"Extra large radius (12px) for prominent elements\",\n },\n \"2xl\": {\n px: 16,\n tailwind: \"rounded-2xl\",\n description: \"2X large radius (16px) for large containers\",\n },\n \"3xl\": {\n px: 24,\n tailwind: \"rounded-3xl\",\n description: \"3X large radius (24px) for very large containers\",\n },\n full: {\n px: 9999,\n tailwind: \"rounded-full\",\n description: \"Full radius for circular elements\",\n },\n };\n\n const config = radiusMap[size];\n return {\n value: config.px,\n rem: `${config.px / 16}rem`,\n px: `${config.px}px`,\n tailwind: config.tailwind,\n description: config.description,\n };\n }\n}\n\n/**\n * Pre-defined radius tokens\n */\nexport const RADIUS_TOKENS = {\n none: RadiusTokenFactory.create(\"none\"),\n sm: RadiusTokenFactory.create(\"sm\"),\n md: RadiusTokenFactory.create(\"md\"),\n lg: RadiusTokenFactory.create(\"lg\"),\n xl: RadiusTokenFactory.create(\"xl\"),\n \"2xl\": RadiusTokenFactory.create(\"2xl\"),\n \"3xl\": RadiusTokenFactory.create(\"3xl\"),\n full: RadiusTokenFactory.create(\"full\"),\n} as const;\n\n/**\n * Helper function to get radius token\n */\nexport function getRadius(size: keyof typeof RADIUS_TOKENS): RadiusToken {\n return RADIUS_TOKENS[size];\n}\n\n/**\n * Helper function to get radius as Tailwind class\n */\nexport function getRadiusClass(size: keyof typeof RADIUS_TOKENS): string {\n return RADIUS_TOKENS[size].tailwind;\n}\n","/**\n * Spacing Tokens\n *\n * Centralized spacing scale based on 4px base unit.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type SpacingScale =\n | 0\n | 0.5\n | 1\n | 1.5\n | 2\n | 2.5\n | 3\n | 3.5\n | 4\n | 5\n | 6\n | 8\n | 10\n | 12\n | 16\n | 20\n | 24\n | 32\n | 40\n | 48\n | 64\n | 80\n | 96;\n\nexport interface SpacingToken {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n}\n\n/**\n * Spacing Token Factory\n * Creates spacing tokens with consistent naming and values\n */\nexport class SpacingTokenFactory {\n private static readonly BASE_UNIT = 4; // 4px base\n\n /**\n * Create a spacing token from scale value\n */\n static create(scale: SpacingScale): SpacingToken {\n const px = scale * this.BASE_UNIT;\n const rem = px / 16; // 16px = 1rem\n\n return {\n value: px,\n rem: `${rem}rem`,\n px: `${px}px`,\n tailwind: this.getTailwindClass(scale),\n };\n }\n\n /**\n * Get Tailwind class for spacing value\n */\n private static getTailwindClass(scale: SpacingScale): string {\n const tailwindMap: Record<SpacingScale, string> = {\n 0: \"0\",\n 0.5: \"0.5\", // 2px — half-step, used by fine UI (badges, switches, separators)\n 1: \"1\", // 4px\n 1.5: \"1.5\", // 6px — half-step\n 2: \"2\", // 8px\n 2.5: \"2.5\", // 10px — half-step\n 3: \"3\", // 12px\n 3.5: \"3.5\", // 14px — half-step\n 4: \"4\", // 16px\n 5: \"5\", // 20px\n 6: \"6\", // 24px\n 8: \"8\", // 32px\n 10: \"10\", // 40px\n 12: \"12\", // 48px\n 16: \"16\", // 64px\n 20: \"20\", // 80px\n 24: \"24\", // 96px\n 32: \"32\", // 128px\n 40: \"40\", // 160px\n 48: \"48\", // 192px\n 64: \"64\", // 256px\n 80: \"80\", // 320px\n 96: \"96\", // 384px\n };\n\n return tailwindMap[scale] || String(scale);\n }\n}\n\n/**\n * Pre-defined spacing tokens\n */\nexport const SPACING_TOKENS = {\n // Micro spacing (0-14px)\n none: SpacingTokenFactory.create(0),\n \"0.5\": SpacingTokenFactory.create(0.5), // 2px (half-step)\n xs: SpacingTokenFactory.create(1), // 4px\n \"1.5\": SpacingTokenFactory.create(1.5), // 6px (half-step)\n sm: SpacingTokenFactory.create(2), // 8px\n \"2.5\": SpacingTokenFactory.create(2.5), // 10px (half-step)\n md: SpacingTokenFactory.create(3), // 12px\n \"3.5\": SpacingTokenFactory.create(3.5), // 14px (half-step)\n\n // Standard spacing (16-32px)\n base: SpacingTokenFactory.create(4), // 16px\n lg: SpacingTokenFactory.create(6), // 24px\n xl: SpacingTokenFactory.create(8), // 32px\n\n // Large spacing (40-64px)\n \"2xl\": SpacingTokenFactory.create(10), // 40px\n \"3xl\": SpacingTokenFactory.create(12), // 48px\n \"4xl\": SpacingTokenFactory.create(16), // 64px\n\n // Extra large spacing (80px+)\n \"5xl\": SpacingTokenFactory.create(20), // 80px\n \"6xl\": SpacingTokenFactory.create(24), // 96px\n} as const;\n\n/**\n * Helper function to get spacing value\n */\nexport function getSpacing(scale: keyof typeof SPACING_TOKENS): SpacingToken {\n return SPACING_TOKENS[scale];\n}\n\n/**\n * Helper function to get spacing as Tailwind class\n */\nexport function getSpacingClass(\n scale: keyof typeof SPACING_TOKENS,\n direction:\n | \"p\"\n | \"m\"\n | \"px\"\n | \"mx\"\n | \"py\"\n | \"my\"\n | \"pt\"\n | \"mt\"\n | \"pr\"\n | \"mr\"\n | \"pb\"\n | \"mb\"\n | \"pl\"\n | \"ml\"\n | \"gap\"\n | \"gap-x\"\n | \"gap-y\"\n | \"space-x\"\n | \"space-y\" = \"p\",\n): string {\n const token = SPACING_TOKENS[scale];\n const value = token.tailwind;\n\n const prefixMap: Record<string, string> = {\n p: \"p\",\n m: \"m\",\n px: \"px\",\n mx: \"mx\",\n py: \"py\",\n my: \"my\",\n pt: \"pt\",\n mt: \"mt\",\n pr: \"pr\",\n mr: \"mr\",\n pb: \"pb\",\n mb: \"mb\",\n pl: \"pl\",\n ml: \"ml\",\n gap: \"gap\",\n \"gap-x\": \"gap-x\",\n \"gap-y\": \"gap-y\",\n \"space-x\": \"space-x\",\n \"space-y\": \"space-y\",\n };\n\n return `${prefixMap[direction]}-${value}`;\n}\n","/**\n * Typography Tokens\n *\n * Centralized typography system with font families, sizes, weights, and line heights.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type FontFamily = \"sans\" | \"serif\" | \"mono\";\nexport type FontWeight = \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\";\nexport type FontSize =\n | \"2xs\"\n | \"xs\"\n | \"sm\"\n | \"base\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"5xl\"\n | \"6xl\";\nexport type LineHeight =\n | \"none\"\n | \"tight\"\n | \"snug\"\n | \"normal\"\n | \"relaxed\"\n | \"loose\";\n\nexport interface TypographyToken {\n fontSize: {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n };\n lineHeight: {\n value: number;\n tailwind: string;\n };\n fontWeight: {\n value: number;\n tailwind: string;\n };\n}\n\nexport interface FontFamilyToken {\n name: string;\n stack: string;\n tailwind: string;\n}\n\nexport interface FontWeightToken {\n value: number;\n tailwind: string;\n}\n\n/**\n * Typography Token Factory\n * Creates typography tokens with consistent values\n */\nexport class TypographyTokenFactory {\n /**\n * Create font size token\n */\n static createFontSize(size: FontSize): TypographyToken[\"fontSize\"] {\n const sizeMap: Record<FontSize, { px: number; tailwind: string }> = {\n \"2xs\": { px: 10, tailwind: \"text-2xs\" }, // micro-text (badge counters, mini chips)\n xs: { px: 12, tailwind: \"text-xs\" },\n sm: { px: 14, tailwind: \"text-sm\" },\n base: { px: 16, tailwind: \"text-base\" },\n lg: { px: 18, tailwind: \"text-lg\" },\n xl: { px: 20, tailwind: \"text-xl\" },\n \"2xl\": { px: 24, tailwind: \"text-2xl\" },\n \"3xl\": { px: 30, tailwind: \"text-3xl\" },\n \"4xl\": { px: 36, tailwind: \"text-4xl\" },\n \"5xl\": { px: 48, tailwind: \"text-5xl\" },\n \"6xl\": { px: 60, tailwind: \"text-6xl\" },\n };\n\n const config = sizeMap[size];\n return {\n value: config.px,\n rem: `${config.px / 16}rem`,\n px: `${config.px}px`,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create line height token\n */\n static createLineHeight(height: LineHeight): TypographyToken[\"lineHeight\"] {\n const heightMap: Record<LineHeight, { value: number; tailwind: string }> = {\n none: { value: 1, tailwind: \"leading-none\" },\n tight: { value: 1.25, tailwind: \"leading-tight\" },\n snug: { value: 1.375, tailwind: \"leading-snug\" },\n normal: { value: 1.5, tailwind: \"leading-normal\" },\n relaxed: { value: 1.625, tailwind: \"leading-relaxed\" },\n loose: { value: 2, tailwind: \"leading-loose\" },\n };\n\n const config = heightMap[height];\n return {\n value: config.value,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create font weight token\n */\n static createFontWeight(weight: FontWeight): FontWeightToken {\n const weightMap: Record<FontWeight, { value: number; tailwind: string }> = {\n light: { value: 300, tailwind: \"font-light\" },\n normal: { value: 400, tailwind: \"font-normal\" },\n medium: { value: 500, tailwind: \"font-medium\" },\n semibold: { value: 600, tailwind: \"font-semibold\" },\n bold: { value: 700, tailwind: \"font-bold\" },\n };\n\n const config = weightMap[weight];\n return {\n value: config.value,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create complete typography token\n */\n static create(\n size: FontSize,\n lineHeight: LineHeight = \"normal\",\n weight: FontWeight = \"normal\",\n ): TypographyToken {\n return {\n fontSize: this.createFontSize(size),\n lineHeight: this.createLineHeight(lineHeight),\n fontWeight: this.createFontWeight(weight),\n };\n }\n}\n\n/**\n * Font family tokens\n */\nexport const FONT_FAMILY_TOKENS: Record<FontFamily, FontFamilyToken> = {\n sans: {\n name: \"sans\",\n stack:\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif',\n tailwind: \"font-sans\",\n },\n serif: {\n name: \"serif\",\n stack: 'ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif',\n tailwind: \"font-serif\",\n },\n mono: {\n name: \"mono\",\n stack:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n tailwind: \"font-mono\",\n },\n} as const;\n\n/**\n * Font weight tokens\n */\nexport const FONT_WEIGHT_TOKENS: Record<FontWeight, FontWeightToken> = {\n light: TypographyTokenFactory.createFontWeight(\"light\"),\n normal: TypographyTokenFactory.createFontWeight(\"normal\"),\n medium: TypographyTokenFactory.createFontWeight(\"medium\"),\n semibold: TypographyTokenFactory.createFontWeight(\"semibold\"),\n bold: TypographyTokenFactory.createFontWeight(\"bold\"),\n} as const;\n\n/**\n * Pre-defined typography tokens for common use cases\n */\nexport const TYPOGRAPHY_TOKENS = {\n // Headings\n h1: TypographyTokenFactory.create(\"4xl\", \"tight\", \"bold\"),\n h2: TypographyTokenFactory.create(\"3xl\", \"tight\", \"bold\"),\n h3: TypographyTokenFactory.create(\"2xl\", \"snug\", \"semibold\"),\n h4: TypographyTokenFactory.create(\"xl\", \"snug\", \"semibold\"),\n h5: TypographyTokenFactory.create(\"lg\", \"normal\", \"medium\"),\n h6: TypographyTokenFactory.create(\"base\", \"normal\", \"medium\"),\n\n // Body text\n body: TypographyTokenFactory.create(\"base\", \"relaxed\", \"normal\"),\n bodySmall: TypographyTokenFactory.create(\"sm\", \"relaxed\", \"normal\"),\n bodyLarge: TypographyTokenFactory.create(\"lg\", \"relaxed\", \"normal\"),\n\n // UI elements\n label: TypographyTokenFactory.create(\"sm\", \"normal\", \"medium\"),\n caption: TypographyTokenFactory.create(\"xs\", \"normal\", \"normal\"),\n button: TypographyTokenFactory.create(\"base\", \"normal\", \"medium\"),\n} as const;\n\n/**\n * Helper function to get typography token\n */\nexport function getTypography(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): TypographyToken {\n return TYPOGRAPHY_TOKENS[variant];\n}\n\n/**\n * Helper function to get typography classes as string\n */\nexport function getTypographyClasses(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n const token = TYPOGRAPHY_TOKENS[variant];\n return `${token.fontSize.tailwind} ${token.lineHeight.tailwind} ${token.fontWeight.tailwind}`;\n}\n\n/**\n * Helper function to get only font size class\n */\nexport function getTypographySize(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].fontSize.tailwind;\n}\n\n/**\n * Helper function to get font size class directly from FontSize\n * This is a convenience function for when you just need a size, not a full typography variant\n */\nexport function getTypographySizeFromFontSize(size: FontSize): string {\n return TypographyTokenFactory.createFontSize(size).tailwind;\n}\n\n/**\n * Helper function to get only font weight class\n */\nexport function getTypographyWeight(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].fontWeight.tailwind;\n}\n\n/**\n * Helper function to get font weight class directly from FontWeight\n * This is a convenience function for when you just need a weight, not a full typography variant\n */\nexport function getTypographyWeightFromFontWeight(weight: FontWeight): string {\n return TypographyTokenFactory.createFontWeight(weight).tailwind;\n}\n\n/**\n * Helper function to get only line height class\n */\nexport function getTypographyLineHeight(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].lineHeight.tailwind;\n}\n","/**\n * CN Utility - ClassName Merge\n *\n * Utility function for merging classNames with Tailwind conflict resolution.\n * Combines clsx for conditional classes and tailwind-merge for conflict resolution.\n *\n * @example\n * ```tsx\n * cn('base-class', condition && 'conditional-class', className)\n * cn(['class1', 'class2'], { 'class3': true })\n * ```\n */\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges classNames and resolves Tailwind class conflicts.\n *\n * Uses clsx for conditional class handling and tailwind-merge\n * to intelligently merge Tailwind classes, resolving conflicts\n * (e.g., 'p-2' and 'p-4' -> 'p-4').\n *\n * @param inputs - Class values to merge (strings, arrays, objects)\n * @returns Merged className string with conflicts resolved\n *\n * @example\n * ```tsx\n * // Basic usage\n * cn('base-class', 'another-class') // 'base-class another-class'\n *\n * // Conditional classes\n * cn('base', isActive && 'active', className)\n *\n * // Arrays and objects\n * cn(['class1', 'class2'], { 'class3': true, 'class4': false })\n *\n * // Tailwind conflict resolution\n * cn('p-2', 'p-4') // 'p-4' (p-2 is overridden)\n * cn('text-red-500', 'text-blue-500') // 'text-blue-500'\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * CVA Utility - Class Variance Authority\n *\n * Type-safe utility for creating component variants with compound variants support.\n * Based on class-variance-authority but integrated with our design system.\n *\n * @example\n * ```tsx\n * const buttonVariants = cva('base-class', {\n * variants: {\n * variant: { primary: 'bg-blue-500', secondary: 'bg-gray-500' },\n * size: { sm: 'text-sm', md: 'text-base' }\n * },\n * defaultVariants: { variant: 'primary', size: 'md' }\n * })\n * ```\n */\n\nimport { type VariantProps, cva as cvaLib } from \"class-variance-authority\";\nimport type { ClassValue } from \"clsx\";\nimport { cn } from \"./cn\";\n\n/**\n * Re-export VariantProps for type inference\n */\nexport type { VariantProps };\n\n/**\n * Creates a type-safe variant function with compound variants support.\n *\n * Integrates with our cn() utility for proper Tailwind conflict resolution.\n * This is a thin wrapper around class-variance-authority's cva function\n * that ensures cn() is used for final class merging.\n *\n * @param base - Base classes that always apply\n * @param config - Variant configuration with variants, compoundVariants, and defaultVariants\n * @returns Function that returns className based on variant props\n *\n * @example\n * ```tsx\n * // Simple variants\n * const buttonVariants = cva('base-class', {\n * variants: {\n * variant: {\n * primary: 'bg-blue-500 text-white',\n * secondary: 'bg-gray-500 text-white'\n * },\n * size: {\n * sm: 'px-2 py-1 text-sm',\n * md: 'px-4 py-2 text-base'\n * }\n * },\n * defaultVariants: {\n * variant: 'primary',\n * size: 'md'\n * }\n * });\n *\n * // Usage\n * buttonVariants({ variant: 'primary', size: 'sm' })\n *\n * // Compound variants\n * const badgeVariants = cva('base', {\n * variants: {\n * variant: { success: '', error: '' },\n * style: { solid: '', outline: '' }\n * },\n * compoundVariants: [\n * { variant: 'success', style: 'solid', class: 'bg-green-500' },\n * { variant: 'error', style: 'outline', class: 'border-red-500' }\n * ]\n * });\n * ```\n */\nexport const cva = <T extends Record<string, Record<string, ClassValue>>>(\n base?: ClassValue,\n config?: Parameters<typeof cvaLib<T>>[1],\n) => {\n const variantFn = cvaLib(base, config);\n\n // Wrap to ensure cn() is used for final merge\n return ((props?: Parameters<typeof variantFn>[0]) => {\n const variantClasses = variantFn(props);\n return cn(variantClasses);\n }) as typeof variantFn;\n};\n","import { memo, forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type BadgeVariant =\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\"\n | \"primary\"\n | \"secondary\";\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\nexport type BadgeStyle = \"solid\" | \"outline\";\n\nexport interface BadgeProps extends Omit<\n HTMLAttributes<HTMLSpanElement>,\n \"style\"\n> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n style?: BadgeStyle;\n children: ReactNode;\n \"aria-label\"?: string;\n}\n\n/**\n * Badge Component\n *\n * A versatile badge component for displaying status, priority, and other labels.\n * Follows Atomic Design principles as an Atom component.\n * Uses tokens for consistent theming.\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\" size=\"lg\">Critical</Badge>\n * <Badge variant=\"info\" style=\"outline\">New</Badge>\n * ```\n */\n// Badge variants using CVA\nconst badgeVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getTypographyWeight(\"label\"),\n getRadiusClass(\"md\"),\n \"border\",\n ),\n {\n variants: {\n variant: {\n success: \"\",\n warning: \"\",\n error: \"\",\n info: \"\",\n neutral: \"\",\n primary: \"\",\n secondary: \"\",\n },\n size: {\n sm: cn(\n getSpacingClass(\"1.5\", \"px\"),\n getSpacingClass(\"0.5\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n lg: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n },\n style: {\n solid: \"\",\n outline: \"\",\n },\n },\n compoundVariants: [\n // Solid style variants\n {\n variant: \"success\",\n style: \"solid\",\n class: cn(\"bg-success-bg\", \"text-success-dark\", \"border-success\"),\n },\n {\n variant: \"warning\",\n style: \"solid\",\n class: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n },\n {\n variant: \"error\",\n style: \"solid\",\n class: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n },\n {\n variant: \"info\",\n style: \"solid\",\n class: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n },\n {\n variant: \"neutral\",\n style: \"solid\",\n class: cn(\"bg-surface-muted\", \"text-fg-primary\", \"border-line-default\"),\n },\n {\n variant: \"primary\",\n style: \"solid\",\n class: cn(\n \"bg-surface-brand-subtle\",\n \"text-fg-brand-emphasis\",\n \"border-line-brand\",\n ),\n },\n {\n variant: \"secondary\",\n style: \"solid\",\n // bg-pink-300: secondary solid badge — no semantic equivalent\n // (would shift 2 shades to bg-surface-secondary). Kept literal until\n // secondary brand surface palette expands beyond DEFAULT.\n class: cn(\n \"bg-pink-300\",\n \"text-fg-brand-secondary-emphasis\",\n \"border-line-secondary\",\n ),\n },\n // Outline style variants\n {\n variant: \"success\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-success\", \"text-fg-success\"),\n },\n {\n variant: \"warning\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-warning\", \"text-fg-warning\"),\n },\n {\n variant: \"error\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-error\", \"text-fg-error\"),\n },\n {\n variant: \"info\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-info\", \"text-fg-info\"),\n },\n {\n variant: \"neutral\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-line-default\", \"text-fg-secondary\"),\n },\n {\n variant: \"primary\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-line-brand\", \"text-fg-brand\"),\n },\n {\n variant: \"secondary\",\n style: \"outline\",\n class: cn(\n \"bg-transparent\",\n \"border-line-secondary\",\n \"text-fg-brand-secondary\",\n ),\n },\n ],\n defaultVariants: {\n variant: \"neutral\",\n size: \"md\",\n style: \"solid\",\n },\n },\n);\n\nconst Badge = memo(\n forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n variant = \"neutral\",\n size = \"md\",\n style = \"solid\",\n className = \"\",\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) {\n const classes = cn(badgeVariants({ variant, size, style }), className);\n\n // Best-effort accessible name resolution: explicit aria-label wins;\n // string children become the label; single-wrapped string children\n // (e.g. <Badge><span>Active</span></Badge>) are unwrapped one level.\n // Otherwise undefined and the consumer is responsible for naming\n // the badge externally.\n let accessibleLabel: string | undefined;\n if (ariaLabel) {\n accessibleLabel = ariaLabel;\n } else if (typeof children === \"string\") {\n accessibleLabel = children;\n } else if (\n typeof children === \"object\" &&\n children !== null &&\n \"props\" in children\n ) {\n const childProps = (children as { props?: { children?: unknown } }).props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n accessibleLabel = childProps.children;\n }\n }\n\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={accessibleLabel}\n className={classes}\n {...props}\n >\n {children}\n </span>\n );\n }),\n);\n\nBadge.displayName = \"Badge\";\n\nexport default Badge;\n","// src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n let slottableElement = null;\n let hasSlottable = false;\n const newChildren = [];\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n React.Children.forEach(children, (maybeSlottable) => {\n if (isSlottable(maybeSlottable)) {\n hasSlottable = true;\n const slottable = maybeSlottable;\n let child = \"child\" in slottable.props ? slottable.props.child : slottable.props.children;\n if (isLazyComponent(child) && typeof use === \"function\") {\n child = use(child._payload);\n }\n slottableElement = getSlottableElementFromSlottable(slottable, child);\n newChildren.push(slottableElement?.props?.children);\n } else {\n newChildren.push(maybeSlottable);\n }\n });\n if (slottableElement) {\n slottableElement = React.cloneElement(slottableElement, void 0, newChildren);\n } else if (\n // A `Slottable` was found but it didn't resolve to a single element (e.g.\n // it wrapped multiple elements, text, or a render-prop `child` that\n // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n // itself as the slot target — throw a descriptive error below instead.\n !hasSlottable && React.Children.count(children) === 1 && React.isValidElement(children)\n ) {\n slottableElement = children;\n }\n const slottableElementRef = slottableElement ? getElementRef(slottableElement) : void 0;\n const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n if (!slottableElement) {\n if (children || children === 0) {\n throw new Error(\n hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName)\n );\n }\n return children;\n }\n const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n if (slottableElement.type !== React.Fragment) {\n mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n }\n return React.cloneElement(slottableElement, mergedProps);\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\nvar SLOTTABLE_IDENTIFIER = Symbol.for(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = (props) => \"child\" in props ? props.children(props.child) : props.children;\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nvar getSlottableElementFromSlottable = (slottable, child) => {\n if (\"child\" in slottable.props) {\n const child2 = slottable.props.child;\n if (!React.isValidElement(child2)) return null;\n return React.cloneElement(child2, void 0, slottable.props.children(child2.props.children));\n }\n return React.isValidElement(child) ? child : null;\n};\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nvar createSlotError = (ownerName) => {\n return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n};\nvar createSlottableError = (ownerName) => {\n return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n};\nvar use = React[\" use \".trim().toString()];\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { X } from \"lucide-react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type ChipVariant = \"default\" | \"outlined\" | \"filled\";\nexport type ChipSize = \"sm\" | \"md\" | \"lg\";\n\ninterface ChipBaseProps {\n children: ReactNode;\n variant?: ChipVariant;\n size?: ChipSize;\n selected?: boolean;\n disabled?: boolean;\n className?: string;\n \"aria-label\"?: string;\n tabIndex?: number;\n}\n\ninterface ChipStandardProps extends ChipBaseProps {\n asChild?: false;\n onRemove?: () => void;\n onClick?: () => void;\n}\n\n/**\n * `asChild` collapses the chip into a single node provided by the\n * consumer (typically `<Link>`). The non-interactive frame + inner\n * label-button + X structure is intentionally NOT rendered — the child\n * IS the chip. As a consequence:\n *\n * - `onClick` and `onRemove` are forbidden at the type level. The\n * child's own click handler (and `href`) is what fires; consumers\n * who need a removable selected filter use the standard\n * (non-asChild) form.\n * - `selected` still applies the visual classes via `chipVariants`,\n * but NO `aria-pressed` is emitted. Toggle-button semantics on\n * `<a>` would lie — a link isn't a two-state control. Consumers\n * that need the selected route surfaced to AT users should pass\n * `aria-current=\"page\"` (or similar) directly on the child Link.\n *\n * @see `.claude/rules/components.md` and the inline a11y notes below.\n */\ninterface ChipAsChildProps extends ChipBaseProps {\n asChild: true;\n /**\n * `onClick` is forbidden when `asChild` is true — the child element\n * owns interaction. Pass the handler (or `href`) on the child.\n */\n onClick?: never;\n /**\n * `onRemove` is forbidden when `asChild` is true — the collapsed\n * node has no slot for an X button. Use the standard (non-asChild)\n * form when removal is required.\n */\n onRemove?: never;\n}\n\nexport type ChipProps = ChipStandardProps | ChipAsChildProps;\n\n/**\n * Chip Component\n *\n * A chip/tag for labels, filters, or selected items.\n *\n * Standard form: an outer `<div>` frame (never interactive) with an\n * inner `<button>` label (when `onClick`) and a sibling X `<button>`\n * (when `onRemove`). This shape closes two axe violations the older\n * implementation hit — `aria-required-parent` (role=option without a\n * listbox) and `nested-interactive` (clickable outer + clickable X).\n *\n * `asChild` form: a single node provided by the consumer (e.g.\n * `<Link>`), with the chip's classes projected via Radix `Slot`. See\n * the `ChipAsChildProps` JSDoc for the a11y responsibility transfer\n * — the consumer's child carries `href`, focus behavior, and any\n * route-state ARIA (`aria-current`). Forbidden in this form:\n * `onClick`, `onRemove` (TS-level).\n *\n * @example\n * ```tsx\n * <Chip>Tag</Chip>\n * <Chip onRemove={() => console.log('removed')}>Removable</Chip>\n *\n * // Navigation chip — server-rendered, zero-JS-friendly.\n * <Chip asChild variant=\"filled\">\n * <Link href=\"/filtros/ativo\" prefetch aria-current=\"page\">Active</Link>\n * </Chip>\n * ```\n */\n// Chip variants using CVA\nconst chipVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"font-medium\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"gap\"),\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"bg-surface-muted\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n outlined: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n filled: cn(\n \"bg-surface-brand-strong\",\n \"text-fg-inverse\",\n \"border\",\n \"border-transparent\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n lg: cn(\n getSpacingClass(\"md\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n },\n selected: {\n true: cn(\n \"bg-surface-brand-strong\",\n \"text-fg-inverse\",\n \"border\",\n \"border-line-brand\",\n ),\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n selected: true,\n variant: \"default\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"outlined\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"filled\",\n class: \"\", // Override variant when selected\n },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n selected: false,\n disabled: false,\n },\n },\n);\n\nconst Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(props, ref) {\n const {\n children,\n variant = \"default\",\n size = \"md\",\n selected = false,\n disabled = false,\n className = \"\",\n \"aria-label\": ariaLabel,\n tabIndex,\n asChild = false,\n } = props;\n\n // Generate accessible label\n const getAccessibleLabel = (): string | undefined => {\n if (ariaLabel) return ariaLabel;\n if (typeof children === \"string\") return children;\n // For non-string children, try to extract text content\n if (\n typeof children === \"object\" &&\n children !== null &&\n \"props\" in children\n ) {\n const childProps = (children as { props?: { children?: unknown } }).props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n return childProps.children;\n }\n }\n return undefined;\n };\n\n const accessibleLabel = getAccessibleLabel();\n\n // asChild path: collapse the entire chip structure (frame + label\n // button + X) into the single consumer-provided node. The frame's\n // visual classes are projected onto the child via Slot.\n //\n // A11Y RESPONSIBILITY TRANSFER. The child element owns:\n // - focus (its native focus ring, or its own focus utilities)\n // - activation (its own click handler / href for navigation)\n // - route-state semantics: `aria-current=\"page\"` on a selected\n // Link is the right tool. `aria-pressed` is intentionally NOT\n // emitted here — a link is not a toggle button.\n // - disabled semantics: `aria-disabled` is set when `disabled` is\n // true, but it does NOT block navigation. Consumers that must\n // truly disable navigation should also gate `href` upstream.\n //\n // TS forbids `onClick` / `onRemove` in this form (see ChipAsChildProps).\n if (asChild) {\n return (\n <Slot\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n className,\n )}\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n tabIndex={tabIndex}\n >\n {children}\n </Slot>\n );\n }\n\n // Standard form below. Narrow `props` so the union picks up\n // onClick/onRemove handlers (forbidden when asChild=true at TS level).\n const { onRemove, onClick } = props as ChipStandardProps;\n\n // Architecture:\n // The label is a real `<button>` whenever the chip is meant to be\n // activated (`onClick` provided). The X is a sibling `<button>` when\n // `onRemove` is provided. The outer `<div>` is NEVER interactive —\n // no `role`, no `tabIndex`, no event handlers. This unifies what\n // used to be three structural variants:\n // - `onClick` only → outer `role=\"button\"` [old]\n // - `onClick` + `onRemove` (no selected) → label-button [PR68]\n // - `selected` → outer `role=\"option\"` [old, axe-flagged]\n // into one consistent shape: label is the actor, outer is the chip\n // chrome (visual frame).\n //\n // Why this matters for a11y:\n // - `role=\"option\"` outside `role=\"listbox\"` violates `aria-required-\n // parent`. The old `selected` path failed axe in every standalone\n // chip. Moving the action to a native `<button>` with\n // `aria-pressed={selected}` (toggle button pattern) communicates\n // state correctly without requiring a listbox parent.\n // - The interactive outer + inner X button produced nested-interactive\n // whenever the consumer combined `selected` (or `onClick`) with\n // `onRemove`. Outer non-interactive + sibling buttons fixes both\n // cases at once.\n //\n // `selected` with no `onClick` is decorative only — the chip CANNOT\n // toggle, so it gets no `aria-pressed` (which would lie) and no role.\n // The visual `selected` styling (chipVariants.selected) applies, but\n // AT users read it as static text. Consumers who want the state\n // communicated must also pass `onClick` to make it a real toggle.\n const useLabelButton = onClick !== undefined;\n const interactive = useLabelButton && !disabled;\n\n // Keyboard handler for the label-button. Native `<button>` activates on\n // Enter/Space in real browsers, but JSDOM does NOT simulate Enter → click,\n // so this preserves the previous test-friendly behavior AND adds explicit\n // `preventDefault` (the original outer-as-button needed it; on a native\n // button this is mostly belt-and-suspenders but harmless).\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n onRemove && getSpacingClass(\"xs\", \"pr\"),\n className,\n )}\n aria-disabled={disabled}\n >\n {useLabelButton ? (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-pressed={selected ? true : undefined}\n aria-label={ariaLabel || accessibleLabel}\n tabIndex={\n tabIndex !== undefined ? tabIndex : interactive ? 0 : undefined\n }\n className={cn(\n \"flex-1\",\n \"bg-transparent\",\n \"border-0\",\n getSpacingClass(\"none\", \"p\"),\n \"text-inherit\",\n \"text-left\",\n \"cursor-pointer\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"full\"),\n )}\n >\n {children}\n </button>\n ) : (\n <span>{children}</span>\n )}\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className={cn(\n getSpacingClass(\"xs\", \"ml\"),\n \"hover:bg-tint-hover\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"p\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-1\",\n )}\n aria-label={`Remove ${accessibleLabel || \"chip\"}`}\n >\n <X className=\"h-3 w-3\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n});\n\nChip.displayName = \"Chip\";\n\nexport default Chip;\n","import type { HTMLAttributes } from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface ErrorMessageProps extends HTMLAttributes<HTMLDivElement> {\n message: string;\n id?: string;\n}\n\n/**\n * ErrorMessage Component\n *\n * A component for displaying validation error messages.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <ErrorMessage message=\"This field is required\" id=\"email-error\" />\n * ```\n */\nexport default function ErrorMessage({\n message,\n id,\n className = \"\",\n ...props\n}: ErrorMessageProps) {\n const baseClasses = [\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-error\",\n \"flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"gap\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <div role=\"alert\" id={id} className={classes} aria-live=\"polite\" {...props}>\n <AlertCircle className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n <span>{message}</span>\n </div>\n );\n}\n","import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface InfoProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"info\" | \"warning\" | \"error\";\n}\n\nexport default function Info({\n variant = \"info\",\n className,\n ...props\n}: InfoProps) {\n const variantClasses = {\n warning: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n error: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n info: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n };\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"border\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getRadiusClass(\"lg\"),\n variantClasses[variant],\n className,\n )}\n {...props}\n />\n );\n}\n","import type { LabelHTMLAttributes } from \"react\";\nimport { forwardRef, memo } from \"react\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends LabelHTMLAttributes<HTMLLabelElement> {\n variant?: \"default\" | \"required\" | \"optional\";\n children: React.ReactNode;\n}\n\nconst labelBaseClasses = cn(\n \"block\",\n getTypographySize(\"label\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n);\n\nconst labelVariantClasses: Record<NonNullable<Props[\"variant\"]>, string> = {\n default: \"\",\n required: cn(\n \"after:content-['*']\",\n `after:${getSpacingClass(\"0.5\", \"ml\")}`,\n \"after:text-fg-error\",\n ),\n optional: cn(\n \"after:content-['(optional)']\",\n `after:${getSpacingClass(\"xs\", \"ml\")}`,\n \"after:text-fg-tertiary\",\n \"after:font-normal\",\n ),\n};\n\n/**\n * Label Component\n *\n * A styled label component for form inputs.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Label htmlFor=\"email\" variant=\"required\">\n * Email Address\n * </Label>\n * ```\n */\nconst Label = memo(\n forwardRef<HTMLLabelElement, Props>(function Label(\n { variant = \"default\", className = \"\", children, ...props },\n ref,\n ) {\n const classes = cn(\n labelBaseClasses,\n labelVariantClasses[variant],\n className,\n );\n\n return (\n <label ref={ref} className={classes} {...props}>\n {children}\n </label>\n );\n }),\n);\n\nLabel.displayName = \"Label\";\n\nexport default Label;\n","/**\n * Shadow Tokens\n *\n * Centralized shadow system for consistent elevation and depth.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type ShadowSize = \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"inner\";\n\nexport interface ShadowToken {\n value: string;\n tailwind: string;\n description: string;\n}\n\n/**\n * Shadow Token Factory\n * Creates shadow tokens with consistent values\n */\nexport class ShadowTokenFactory {\n /**\n * Create a shadow token\n */\n static create(size: ShadowSize): ShadowToken {\n const shadowMap: Record<\n ShadowSize,\n { value: string; tailwind: string; description: string }\n > = {\n none: {\n value: \"none\",\n tailwind: \"shadow-none\",\n description: \"No shadow\",\n },\n sm: {\n value: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n tailwind: \"shadow-sm\",\n description: \"Small shadow for subtle elevation\",\n },\n md: {\n value: \"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-md\",\n description: \"Medium shadow for cards and elevated elements\",\n },\n lg: {\n value:\n \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-lg\",\n description: \"Large shadow for modals and dropdowns\",\n },\n xl: {\n value:\n \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-xl\",\n description: \"Extra large shadow for prominent modals\",\n },\n \"2xl\": {\n value:\n \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-2xl\",\n description: \"2X large shadow for maximum elevation\",\n },\n inner: {\n value: \"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)\",\n tailwind: \"shadow-inner\",\n description: \"Inner shadow for inset elements\",\n },\n };\n\n return shadowMap[size];\n }\n}\n\n/**\n * Pre-defined shadow tokens\n */\nexport const SHADOW_TOKENS = {\n none: ShadowTokenFactory.create(\"none\"),\n sm: ShadowTokenFactory.create(\"sm\"),\n md: ShadowTokenFactory.create(\"md\"),\n lg: ShadowTokenFactory.create(\"lg\"),\n xl: ShadowTokenFactory.create(\"xl\"),\n \"2xl\": ShadowTokenFactory.create(\"2xl\"),\n inner: ShadowTokenFactory.create(\"inner\"),\n} as const;\n\n/**\n * Helper function to get shadow token\n */\nexport function getShadow(size: keyof typeof SHADOW_TOKENS): ShadowToken {\n return SHADOW_TOKENS[size];\n}\n\n/**\n * Helper function to get shadow as Tailwind class\n */\nexport function getShadowClass(size: keyof typeof SHADOW_TOKENS): string {\n return SHADOW_TOKENS[size].tailwind;\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef } from \"react\";\nimport { getRadiusClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\nimport \"./Progress.css\";\n\nexport type ProgressVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n value?: number; // 0-100, undefined for indeterminate\n max?: number; // Default 100\n variant?: ProgressVariant;\n size?: ProgressSize;\n showLabel?: boolean;\n label?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Progress Component\n *\n * A progress bar component for displaying progress or loading states.\n * Supports both determinate (with value) and indeterminate (without value) modes.\n * Fully accessible with ARIA attributes.\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <Progress value={75} variant=\"primary\" />\n *\n * // Indeterminate progress\n * <Progress variant=\"primary\" />\n *\n * // With label\n * <Progress value={50} showLabel label=\"Uploading...\" />\n * ```\n */\n// Progress variants using CVA\nconst progressTrackVariants = cva(\"w-full\", {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n variant: {\n primary: \"bg-surface-muted\",\n secondary: \"bg-surface-muted\",\n success: \"bg-success-bg-emphasis\",\n error: \"bg-error-bg-emphasis\",\n warning: \"bg-warning-bg-emphasis\",\n info: \"bg-info-bg-emphasis\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst progressBarVariants = cva(\"transition-all\", {\n variants: {\n variant: {\n primary: \"bg-surface-brand\",\n secondary: \"bg-surface-secondary\",\n success: \"bg-success\",\n error: \"bg-error\",\n warning: \"bg-warning\",\n info: \"bg-info\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n});\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n className = \"\",\n ...props\n },\n ref,\n) {\n const isIndeterminate = value === undefined;\n const percentage = isIndeterminate\n ? undefined\n : Math.min(Math.max((value / max) * 100, 0), 100);\n\n const defaultAriaLabel =\n ariaLabel ||\n (isIndeterminate\n ? \"Loading in progress\"\n : `Progress: ${percentage?.toFixed(0)}%`);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {showLabel && (label || !isIndeterminate) && (\n <div\n className={cn(\n \"flex\",\n \"items-center\",\n \"justify-between\",\n getSpacingClass(\"xs\", \"mb\"),\n )}\n >\n {label && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n )}\n >\n {label}\n </span>\n )}\n {!isIndeterminate && percentage !== undefined && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n )}\n >\n {percentage.toFixed(0)}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : max}\n aria-valuenow={isIndeterminate ? undefined : value}\n aria-label={defaultAriaLabel}\n aria-busy={isIndeterminate}\n className={cn(\n \"relative\",\n \"w-full\",\n \"overflow-hidden\",\n progressTrackVariants({ size, variant }),\n getRadiusClass(\"full\"),\n )}\n >\n {isIndeterminate ? (\n <div\n className={cn(\n \"absolute\",\n \"top-0\",\n \"left-0\",\n \"bottom-0\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"motion-reduce:animate-none\",\n )}\n style={{\n width: \"30%\",\n animation: \"progress-indeterminate 1.5s ease-in-out infinite\",\n }}\n />\n ) : (\n <div\n className={cn(\n \"h-full\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"transition-all\",\n \"duration-300\",\n \"ease-out\",\n )}\n style={{\n width: `${percentage}%`,\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n\nexport default Progress;\n","import { memo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type SeparatorOrientation = \"horizontal\" | \"vertical\";\nexport type SeparatorVariant = \"solid\" | \"dashed\" | \"dotted\";\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLHRElement> {\n orientation?: SeparatorOrientation;\n variant?: SeparatorVariant;\n}\n\n/**\n * Separator Component\n *\n * A visual separator component for dividing content.\n * Follows Atomic Design principles as an Atom component.\n * Optimized with React.memo to prevent unnecessary re-renders.\n *\n * @example\n * ```tsx\n * <Separator />\n *\n * <Separator orientation=\"vertical\" variant=\"dashed\" />\n * ```\n */\nconst separatorOrientationClasses = {\n horizontal: \"w-full border-t\",\n vertical: \"h-full border-l self-stretch\",\n} as const;\n\nconst separatorVariantClasses = {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n} as const;\n\nconst Separator = memo(function Separator({\n orientation = \"horizontal\",\n variant = \"solid\",\n className = \"\",\n ...props\n}: SeparatorProps) {\n const classes = cn(\n \"border-0\",\n \"border-line-default\",\n separatorOrientationClasses[orientation],\n separatorVariantClasses[variant],\n className,\n );\n\n if (orientation === \"vertical\") {\n return (\n <div\n className={classes}\n role=\"separator\"\n aria-orientation=\"vertical\"\n {...(props as HTMLAttributes<HTMLDivElement>)}\n />\n );\n }\n\n return (\n <hr\n className={classes}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...props}\n />\n );\n});\n\nSeparator.displayName = \"Separator\";\n\nexport default Separator;\n","import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"card\" | \"list\" | \"circle\";\n width?: string;\n height?: string;\n lines?: number;\n}\n\n/**\n * Skeleton Component\n *\n * A skeleton loader component for displaying loading states.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Skeleton variant=\"card\" />\n * <Skeleton variant=\"text\" lines={3} />\n * ```\n */\nexport default function Skeleton({\n variant = \"text\",\n width,\n height,\n lines = 1,\n className = \"\",\n \"aria-label\": ariaLabel,\n ...props\n}: SkeletonProps) {\n const baseClasses = [\n \"motion-safe:animate-pulse\",\n \"bg-surface-muted\",\n getRadiusClass(\"sm\"),\n ];\n\n const variantClasses: Record<\n NonNullable<SkeletonProps[\"variant\"]>,\n string\n > = {\n text: \"h-4\",\n card: \"h-32\",\n list: \"h-12\",\n circle: getRadiusClass(\"full\"),\n };\n\n const classes = cn(...baseClasses, variantClasses[variant], className);\n\n const style: React.CSSProperties = {};\n if (width) style.width = width;\n if (height) style.height = height;\n\n const defaultAriaLabel = ariaLabel || `Loading ${variant} content`;\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n className={getSpacingClass(\"sm\", \"space-y\")}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={classes}\n style={index === lines - 1 ? { width: \"75%\" } : style}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={classes}\n style={style}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { memo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\nexport type SpinnerVariant = \"primary\" | \"secondary\" | \"neutral\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n size?: SpinnerSize;\n variant?: SpinnerVariant;\n label?: string;\n}\n\n/**\n * Spinner Component\n *\n * A loading spinner component for indicating loading states.\n * Follows Atomic Design principles as an Atom component.\n * Uses Strategy Pattern for different size/variant combinations.\n *\n * @example\n * ```tsx\n * <Spinner size=\"md\" variant=\"primary\" label=\"Loading...\" />\n * ```\n */\n// Spinner variants using CVA\nconst spinnerVariants = cva(\"motion-safe:animate-spin\", {\n variants: {\n size: {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-8 w-8\",\n },\n variant: {\n primary: \"text-fg-brand\",\n secondary: \"text-fg-brand-secondary\",\n neutral: \"text-fg-secondary\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst Spinner = memo(function Spinner({\n size = \"md\",\n variant = \"primary\",\n label,\n className = \"\",\n ...props\n}: SpinnerProps) {\n return (\n <div\n className={cn(\"inline-flex\", \"items-center\", className)}\n role=\"status\"\n aria-label={label || \"Loading\"}\n aria-live=\"polite\"\n {...props}\n >\n <Loader2\n className={cn(spinnerVariants({ size, variant }))}\n aria-hidden=\"true\"\n />\n {label && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"ml\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n \"sr-only\",\n )}\n >\n {label}\n </span>\n )}\n </div>\n );\n});\n\nSpinner.displayName = \"Spinner\";\n\nexport default Spinner;\n","import type {\n ComponentPropsWithoutRef,\n ElementType,\n HTMLAttributes,\n JSX,\n} from \"react\";\nimport { forwardRef } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ntype TextColorRole =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\";\ntype TextColorShade = \"light\" | \"DEFAULT\" | \"dark\" | \"contrast\";\n\n// Lookup table: literal Tailwind classes so v4 can detect them at build.\n// Brand/feedback DEFAULT cells use semantic tokens; light/dark cells stay\n// primitive (no semantic equivalent for shade variants). Neutral cells\n// use the Phase 7 semantic suggestions (text-fg-{primary,secondary,...}).\nconst TEXT_COLOR_CLASSES: Record<\n TextColorRole,\n Record<TextColorShade, string>\n> = {\n primary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-indigo-400\",\n DEFAULT: \"text-fg-brand\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-indigo-600\",\n contrast: \"text-fg-inverse\",\n },\n secondary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-pink-300\",\n DEFAULT: \"text-fg-brand-secondary\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-pink-600\",\n contrast: \"text-fg-inverse\",\n },\n success: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-green-300\",\n DEFAULT: \"text-fg-success\",\n dark: \"text-success-dark\",\n contrast: \"text-fg-inverse\",\n },\n warning: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-yellow-300\",\n DEFAULT: \"text-fg-warning\",\n dark: \"text-warning-dark\",\n contrast: \"text-fg-inverse\",\n },\n error: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-red-300\",\n DEFAULT: \"text-fg-error\",\n dark: \"text-error-dark\",\n contrast: \"text-fg-inverse\",\n },\n info: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-blue-300\",\n DEFAULT: \"text-fg-info\",\n dark: \"text-info-dark\",\n contrast: \"text-fg-inverse\",\n },\n neutral: {\n light: \"text-fg-tertiary\",\n DEFAULT: \"text-fg-secondary\",\n dark: \"text-fg-primary\",\n contrast: \"text-fg-inverse\",\n },\n};\n\nexport interface TextProps<\n T extends ElementType,\n> extends HTMLAttributes<JSX.IntrinsicElements> {\n variant?:\n | \"heading\"\n | \"list\"\n | \"paragraph\"\n | \"body\"\n | \"bodySmall\"\n | \"bodyLarge\"\n | \"caption\"\n | \"label\";\n as?: T;\n bold?: boolean;\n italic?: boolean;\n colorRole?: TextColorRole;\n colorShade?: TextColorShade;\n}\n\ntype ReturnProps<P extends ElementType> = TextProps<P> &\n Omit<ComponentPropsWithoutRef<P>, keyof TextProps<P>>;\n\nfunction TextComponent<T extends ElementType = \"p\">(\n {\n variant = \"paragraph\",\n bold,\n italic,\n className,\n as,\n colorRole = \"neutral\",\n colorShade = \"dark\",\n ...rest\n }: ReturnProps<T>,\n ref: React.Ref<unknown>,\n) {\n const classNames: string[] = [];\n let Tag: ElementType;\n\n if (as) {\n Tag = as;\n } else {\n switch (variant) {\n case \"heading\":\n Tag = \"h2\";\n break;\n case \"list\":\n Tag = \"li\";\n break;\n case \"paragraph\":\n default:\n Tag = \"p\";\n break;\n }\n }\n\n // Apply typography tokens based on variant\n if (variant === \"heading\") {\n classNames.push(getTypographyClasses(\"h2\"));\n } else if (variant === \"body\" || variant === \"paragraph\") {\n classNames.push(getTypographyClasses(\"body\"));\n } else if (variant === \"bodySmall\") {\n classNames.push(getTypographyClasses(\"bodySmall\"));\n } else if (variant === \"bodyLarge\") {\n classNames.push(getTypographyClasses(\"bodyLarge\"));\n } else if (variant === \"caption\") {\n classNames.push(getTypographyClasses(\"caption\"));\n } else if (variant === \"label\") {\n classNames.push(getTypographyClasses(\"label\"));\n } else {\n // Default to body for list and other variants\n classNames.push(getTypographyClasses(\"body\"));\n }\n\n // Override font weight if bold is specified\n if (bold) {\n classNames.push(\"font-bold\");\n }\n\n if (italic) {\n classNames.push(\"italic\");\n }\n\n // Apply color via lookup table. Tailwind v4 needs literal class names\n // at build time, so role/shade resolve to a fixed entry in\n // TEXT_COLOR_CLASSES rather than constructing `text-${...}` dynamically.\n classNames.push(TEXT_COLOR_CLASSES[colorRole][colorShade]);\n\n return <Tag ref={ref} className={cn(...classNames, className)} {...rest} />;\n}\n\n// Use forwardRef with proper typing for polymorphic component\nconst Text = forwardRef(TextComponent) as <T extends ElementType = \"p\">(\n props: ReturnProps<T> & { ref?: React.Ref<HTMLElement> },\n) => JSX.Element;\n\nexport default Text;\n","import React from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Maximum width of the container\n * @default 'lg'\n */\n maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n /**\n * Horizontal padding\n * @default 'base'\n */\n paddingX?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\";\n /**\n * Vertical padding\n * @default 'base'\n */\n paddingY?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\";\n /**\n * Center the container content\n * @default true\n */\n center?: boolean;\n}\n\nconst maxWidthClasses = {\n sm: \"max-w-screen-sm\",\n md: \"max-w-screen-md\",\n lg: \"max-w-screen-lg\",\n xl: \"max-w-screen-xl\",\n \"2xl\": \"max-w-screen-2xl\",\n full: \"max-w-full\",\n};\n\n/**\n * Container component for constraining content width and providing consistent padding\n *\n * @example\n * ```tsx\n * <Container maxWidth=\"lg\" paddingX=\"base\">\n * <h1>Content</h1>\n * </Container>\n * ```\n */\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n (\n {\n className,\n maxWidth = \"lg\",\n paddingX = \"base\",\n paddingY = \"base\",\n center = true,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full\",\n maxWidthClasses[maxWidth],\n getSpacingClass(paddingX, \"px\"),\n getSpacingClass(paddingY, \"py\"),\n center && \"mx-auto\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nContainer.displayName = \"Container\";\n","import React from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Spacing between children\n * @default 'base'\n */\n spacing?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\" | \"2xl\";\n /**\n * Alignment of children\n * @default 'stretch'\n */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n /**\n * Justification of children\n * @default 'start'\n */\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n /**\n * Direction of stack\n * @default 'column'\n */\n direction?: \"row\" | \"column\";\n}\n\n/**\n * Stack component for vertical or horizontal layout with consistent spacing\n *\n * @example\n * ```tsx\n * <Stack spacing=\"md\" align=\"center\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * </Stack>\n * ```\n */\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\n (\n {\n className,\n spacing = \"base\",\n align = \"stretch\",\n justify = \"start\",\n direction = \"column\",\n children,\n ...props\n },\n ref,\n ) => {\n const spacingClass =\n direction === \"column\"\n ? getSpacingClass(spacing, \"gap-y\")\n : getSpacingClass(spacing, \"gap-x\");\n\n const alignClasses = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex\",\n direction === \"column\" ? \"flex-col\" : \"flex-row\",\n spacingClass,\n alignClasses[align],\n justifyClasses[justify],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nStack.displayName = \"Stack\";\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface Props extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * A breadcrumb navigation component for hierarchical navigation.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: \"Home\", href: \"/\" },\n * { label: \"Epics\", href: \"/epics\" },\n * { label: \"Epic Details\" }\n * ]}\n * />\n * ```\n */\nexport default function Breadcrumb({\n items,\n separator = \"/\",\n className = \"\",\n ...props\n}: Props) {\n const baseClasses = [\n \"flex\",\n \"items-center\",\n getSpacingClass(\"sm\", \"space-x\"),\n getTypographySize(\"bodySmall\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <nav aria-label=\"Breadcrumb\" className={classes} {...props}>\n <ol\n className={cn(\"flex\", \"items-center\", getSpacingClass(\"sm\", \"space-x\"))}\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"flex items-center\">\n {index > 0 && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"mx\"),\n \"text-fg-tertiary\",\n )}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n {isLast ? (\n <span\n className={cn(\n \"text-fg-primary\",\n getTypographyWeight(\"label\"),\n )}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n ) : item.href ? (\n <a\n href={item.href}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"pt\"),\n \"border-b-2\",\n \"border-transparent\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n \"text-fg-secondary\",\n \"hover:border-line-emphasis\",\n \"hover:text-fg-primary\",\n )}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-fg-secondary\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function CardHeader({ children, className, ...props }: CardHeaderProps) {\n return (\n <div\n className={cn(\n \"grid items-start\",\n getSpacingClass(\"1.5\", \"gap\"),\n getSpacingClass(\"base\", \"mb\"),\n \"[&:has([data-card-actions])]:grid-cols-[1fr_auto]\",\n \"[&:has([data-card-actions])>[data-card-actions]]:row-span-full\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport default CardHeader;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type CardTitleAs = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n\nexport interface CardTitleProps extends HTMLAttributes<HTMLHeadingElement> {\n children: ReactNode;\n /**\n * Optional icon rendered before the title text.\n */\n icon?: ReactNode;\n /**\n * Optional badge rendered after the title text.\n */\n badge?: ReactNode;\n /**\n * Heading level. Default `h2` — the typical depth for a card title\n * inside a page that already has an `h1`. Use `h3` (or deeper) when\n * the card sits inside a nested section.\n * @default 'h2'\n */\n as?: CardTitleAs;\n}\n\nexport function CardTitle({\n children,\n icon,\n badge,\n as: As = \"h2\",\n className,\n ...props\n}: CardTitleProps) {\n return (\n <As\n className={cn(\n \"text-base font-semibold text-fg-primary\",\n \"flex items-center\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n {...props}\n >\n {icon ? <span className=\"shrink-0 inline-flex\">{icon}</span> : null}\n <span>{children}</span>\n {badge ? <span className=\"inline-flex\">{badge}</span> : null}\n </As>\n );\n}\n\nexport default CardTitle;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport interface CardSubtitleProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n}\n\nexport function CardSubtitle({\n children,\n className,\n ...props\n}: CardSubtitleProps) {\n return (\n <p className={cn(\"text-sm text-fg-secondary\", className)} {...props}>\n {children}\n </p>\n );\n}\n\nexport default CardSubtitle;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface CardActionsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * CardActions — wrapper that hosts consumer-supplied action buttons\n * within a `Card.Header`.\n *\n * The `data-card-actions` attribute is the structural marker `CardHeader`\n * uses (via Tailwind v4 `:has()` selectors) to switch its grid layout\n * from a single column to `[1fr auto]` when actions are present, so\n * Title/Subtitle stack in column 1 and the action row spans both rows\n * in column 2. Consumers should not override this attribute.\n *\n * This component is presentational: it emits no handlers on the DOM\n * itself. The action elements (typically `<Button>`) are consumer-supplied\n * and React's RSC boundary keeps them as client references — the\n * wrapper stays server-safe.\n */\nexport function CardActions({\n children,\n className,\n ...props\n}: CardActionsProps) {\n return (\n <div\n data-card-actions=\"\"\n className={cn(\n \"flex items-center self-start\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport default CardActions;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport interface CardBodyProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function CardBody({ children, className, ...props }: CardBodyProps) {\n return (\n <div className={cn(className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport default CardBody;\n","import { memo, type FC, type HTMLAttributes } from \"react\";\nimport { cn, cva } from \"../../utils\";\nimport { getRadiusClass, getShadowClass, getSpacingClass } from \"../../tokens\";\nimport { CardHeader } from \"./CardHeader\";\nimport { CardTitle } from \"./CardTitle\";\nimport { CardSubtitle } from \"./CardSubtitle\";\nimport { CardActions } from \"./CardActions\";\nimport { CardBody } from \"./CardBody\";\n\n// Ambient declaration so the dev-only warn typechecks without pulling\n// @types/node into the app tsconfig. At runtime the consumer's bundler\n// replaces `process.env.NODE_ENV` with a literal; the `typeof process`\n// guard keeps the branch safe in browser/edge runtimes where `process`\n// doesn't exist. Mirrors the precedent in Button.tsx.\ndeclare const process: { env: { NODE_ENV?: string } };\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"hover\" | \"selected\";\n padding?: \"none\" | \"small\" | \"medium\" | \"large\";\n onClick?: () => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n /**\n * Render the root as a semantic `<section>` instead of `<div>`.\n * When `true`, the Card becomes a landmark — a screen-reader-visible\n * region in the document outline — so it MUST carry an accessible\n * name (either `aria-labelledby` pointing to a `Card.Title` `id` or\n * `aria-label`). A dev-only warning is emitted when this contract\n * isn't met; an anonymous landmark hurts navigation by announcing\n * \"region\" without a name.\n * @default false\n */\n asSection?: boolean;\n}\n\n/**\n * Card — versatile container.\n *\n * Supports the compound pattern via dot-notation:\n *\n * ```tsx\n * <Card asSection aria-labelledby=\"parlamentares-title\">\n * <Card.Header>\n * <Card.Title id=\"parlamentares-title\" icon={<Users />} badge={<Badge>Beta</Badge>}>\n * Parlamentares\n * </Card.Title>\n * <Card.Subtitle>Câmara e Senado</Card.Subtitle>\n * <Card.Actions>\n * <Button variant=\"ghost\">Editar</Button>\n * </Card.Actions>\n * </Card.Header>\n * <Card.Body>{children}</Card.Body>\n * </Card>\n * ```\n *\n * Backward compat: the flat form (`<Card>{children}</Card>`) and the\n * interactive form (`<Card onClick={...}>`) are unchanged.\n *\n * Server/client boundary: every subcomponent (Card, Card.Header,\n * Card.Title, Card.Subtitle, Card.Actions, Card.Body) is presentational\n * and ships in `./server`. Interactive children (Button with onClick,\n * Link, etc.) supplied via `<Card.Actions>` cross the RSC boundary\n * naturally — the wrapper stays server-safe.\n */\nfunction CardComponent({\n variant = \"default\",\n padding = \"medium\",\n className = \"\",\n onClick,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n asSection = false,\n children,\n ...props\n}: CardProps) {\n if (\n typeof process !== \"undefined\" &&\n process.env.NODE_ENV !== \"production\" &&\n asSection &&\n !ariaLabel &&\n !ariaLabelledBy\n ) {\n console.warn(\n \"[Card] `asSection={true}` requires an accessible name. Pass `aria-labelledby` pointing to your Card.Title `id`, or `aria-label`. A <section> without a name is an anonymous landmark that hurts screen-reader navigation.\",\n );\n }\n\n const cardVariants = cva(\n cn(\n \"bg-surface-base\",\n getRadiusClass(\"lg\"),\n \"border\",\n \"border-line-default\",\n getShadowClass(\"sm\"),\n ),\n {\n variants: {\n variant: {\n default: \"\",\n hover: cn(\n `hover:${getShadowClass(\"md\")}`,\n \"transition-shadow\",\n \"cursor-pointer\",\n ),\n selected: cn(\"border-line-brand\", getShadowClass(\"md\")),\n },\n padding: {\n none: \"\",\n small: getSpacingClass(\"xs\", \"p\"),\n medium: getSpacingClass(\"base\", \"p\"),\n large: getSpacingClass(\"lg\", \"p\"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n padding: \"medium\",\n },\n },\n );\n\n // ARIA interactivity is driven by `onClick` ONLY. `variant=\"hover\"` is\n // a visual style (hover shadow + cursor hint via cardVariants) — not a\n // declaration that the card is clickable. The previous coupling made\n // any `variant=\"hover\"` Card a `role=\"button\" tabindex=0` outer, which\n // triggered axe `nested-interactive` whenever the consumer composed\n // Buttons inside. Decoupling fixes that without changing the visual\n // behavior. Stories that want a clickable card already pass `onClick`.\n const isInteractive = onClick !== undefined;\n const role = isInteractive ? \"button\" : undefined;\n const tabIndex = isInteractive ? 0 : undefined;\n\n const classes = cn(cardVariants({ variant, padding }), className);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isInteractive && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onClick?.();\n }\n };\n\n // Polymorphic root: <section> when asSection, <div> otherwise. Both\n // accept the same HTMLAttributes via `...props` (HTMLDivElement and\n // HTMLElement attribute sets overlap on the props we use).\n const commonProps = {\n className: classes,\n role,\n tabIndex,\n onClick,\n onKeyDown: isInteractive ? handleKeyDown : undefined,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props,\n } as const;\n\n if (asSection) {\n return <section {...commonProps}>{children}</section>;\n }\n return <div {...commonProps}>{children}</div>;\n}\n\nconst MemoCard = memo(CardComponent);\nMemoCard.displayName = \"Card\";\n\n// Compound components (dot-notation). Pattern follows Tabs.tsx — define\n// the function, attach subcomponents, cast to a type that exposes them.\ntype CardCompound = FC<CardProps> & {\n Header: typeof CardHeader;\n Title: typeof CardTitle;\n Subtitle: typeof CardSubtitle;\n Actions: typeof CardActions;\n Body: typeof CardBody;\n};\n\nconst Card = MemoCard as unknown as CardCompound;\nCard.Header = CardHeader;\nCard.Title = CardTitle;\nCard.Subtitle = CardSubtitle;\nCard.Actions = CardActions;\nCard.Body = CardBody;\n\nexport default Card;\n","\"use client\";\n\nimport { type HTMLAttributes, type ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DialogHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function DialogHeader({\n children,\n className = \"\",\n ...props\n}: DialogHeaderProps) {\n return (\n <div\n className={`flex flex-col ${getSpacingClass(\"1.5\", \"space-y\")} ${getSpacingClass(\"lg\", \"p\")} ${getSpacingClass(\"base\", \"pb\")} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type HTMLAttributes, type ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DialogFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function DialogFooter({\n children,\n className = \"\",\n ...props\n}: DialogFooterProps) {\n return (\n <div\n className={`flex flex-col-reverse sm:flex-row sm:justify-end sm:${getSpacingClass(\"sm\", \"space-x\")} ${getSpacingClass(\"lg\", \"p\")} ${getSpacingClass(\"base\", \"pt\")} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DrawerHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerHeader Component\n *\n * Header section for drawer content.\n *\n * @example\n * ```tsx\n * <DrawerHeader>\n * <h2>Drawer Title</h2>\n * </DrawerHeader>\n * ```\n */\nexport default function DrawerHeader({\n children,\n className = \"\",\n ...props\n}: DrawerHeaderProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-b\n border-line-default\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DrawerFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerFooter Component\n *\n * Footer section for drawer content, typically contains action buttons.\n *\n * @example\n * ```tsx\n * <DrawerFooter>\n * <Button>Save</Button>\n * <Button variant=\"outline\">Cancel</Button>\n * </DrawerFooter>\n * ```\n */\nexport default function DrawerFooter({\n children,\n className = \"\",\n ...props\n}: DrawerFooterProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-t\n border-line-default\n flex\n justify-end\n ${getSpacingClass(\"sm\", \"gap\")}\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface FilterChipsProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Optional group label rendered as neutral text at the left of the\n * chips (e.g. \"Filtros\"). Deliberately NOT a `<legend>`/`<fieldset>`\n * pair — FilterChips groups navigation/selection chips, not form\n * controls, and fieldset semantics would imply a form that isn't\n * there. When `label` is a plain string it doubles as the group's\n * accessible name (see the aria-label contract in the component\n * JSDoc).\n */\n label?: ReactNode;\n /**\n * The chips. Typically `<Chip>` elements — including the\n * `<Chip asChild><Link/></Chip>` navigation form — but any inline\n * content composes.\n */\n children: ReactNode;\n /**\n * Whether chips wrap to new lines when they overflow the container\n * width. `true` (default) applies `flex-wrap` — the responsive\n * filter-bar behavior; `false` applies `flex-nowrap` and keeps\n * everything on one line (consumer owns overflow handling).\n * @default true\n */\n wrap?: boolean;\n}\n\n/**\n * `FilterChips` — groups `Chip`s into a labeled filter bar.\n *\n * The shell of every chip-based filter row: a `role=\"group\"` container\n * with an optional neutral text label at the left and a flex run of\n * chips that wraps responsively by default. Purely presentational — the\n * interactive identity (select, navigate, remove) lives in each `Chip`\n * (`onClick`/`onRemove`, or `asChild` with a consumer `<Link>`), never\n * in this wrapper.\n *\n * ### Accessible name contract\n *\n * The container carries `role=\"group\"` so assistive technology can\n * announce the chips as one named unit. The accessible name resolves in\n * this order:\n *\n * 1. An explicit `aria-label` OR `aria-labelledby` passed by the\n * consumer always wins — when either is present, no name is derived\n * from `label`, so the consumer's attribute is the only naming on the\n * element (no redundant `aria-label` is left alongside an\n * `aria-labelledby`).\n * 2. Otherwise, when `label` is a non-empty plain string, it is reused\n * as the group's `aria-label` automatically.\n * 3. When `label` is a non-string `ReactNode` (or absent), no\n * `aria-label` is derived — supply `aria-label`/`aria-labelledby`\n * yourself if the group needs a name AT users can identify it by.\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in\n * the `./server` entry. Consumer-supplied chips may themselves be\n * client components (`<Chip onRemove>`); React's RSC boundary handles\n * that normally, and the zero-JS path (`<Chip asChild><Link/></Chip>`)\n * stays fully server-rendered.\n *\n * @example\n * ```tsx\n * // Navigation filter bar — server-rendered, zero-JS-friendly.\n * <FilterChips label=\"Filtros\">\n * <Chip asChild selected>\n * <Link href=\"?uf=SP\" aria-current=\"page\">UF: SP</Link>\n * </Chip>\n * <Chip asChild>\n * <Link href=\"?partido=PT\">Partido: PT</Link>\n * </Chip>\n * </FilterChips>\n *\n * // Single-line variant (consumer owns horizontal overflow).\n * <FilterChips label=\"Período\" wrap={false}>\n * <Chip>2024</Chip>\n * <Chip>2025</Chip>\n * </FilterChips>\n * ```\n */\nexport function FilterChips({\n label,\n children,\n wrap = true,\n className,\n ...props\n}: FilterChipsProps) {\n // The string label doubles as the group's accessible name — but only\n // when the consumer supplies no naming of their own. An explicit\n // `aria-label` OR `aria-labelledby` (both spread onto the root below)\n // takes precedence; deriving a name alongside `aria-labelledby` would\n // leave a redundant `aria-label` on the element, so suppress it here\n // rather than relying on ARIA name-computation precedence to hide it.\n const hasConsumerName =\n props[\"aria-label\"] != null || props[\"aria-labelledby\"] != null;\n const derivedAriaLabel =\n !hasConsumerName && typeof label === \"string\" && label !== \"\"\n ? label\n : undefined;\n\n return (\n <div\n role=\"group\"\n aria-label={derivedAriaLabel}\n className={cn(\n \"flex items-center\",\n wrap ? \"flex-wrap\" : \"flex-nowrap\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n {...props}\n >\n {label ? (\n // shrink-0 keeps the label a stable leading unit: in the wrapping\n // flex run it must not be squeezed or mid-word-wrapped when the\n // chips overflow — it stays on one line and the chips wrap around it.\n <span className=\"shrink-0 text-fg-secondary text-sm\">{label}</span>\n ) : null}\n {children}\n </div>\n );\n}\n\nexport default FilterChips;\n","/**\n * HeaderActions Component\n *\n * Actions slot component for Header (typically buttons, user menu, etc.).\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\n\nexport interface HeaderActionsProps {\n /**\n * Actions content (typically Button components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderActions Component\n *\n * Actions slot for Header. Typically contains Button components or user menu.\n *\n * @example\n * ```tsx\n * <Header.Actions>\n * <Button variant=\"outline\">Sign In</Button>\n * <Button variant=\"primary\">Sign Up</Button>\n * </Header.Actions>\n * ```\n */\nexport function HeaderActions({ children, className }: HeaderActionsProps) {\n return (\n <div\n className={cn(\n \"flex-shrink-0 flex items-center\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","/**\n * HeaderNavigation Component\n *\n * Navigation slot component for Header.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\n\nexport interface HeaderNavigationProps {\n /**\n * Navigation content (typically NavLink components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderNavigation Component\n *\n * Navigation slot for Header. Typically contains NavLink components.\n *\n * @example\n * ```tsx\n * <Header.Navigation>\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\">About</NavLink>\n * </Header.Navigation>\n * ```\n */\nexport function HeaderNavigation({\n children,\n className,\n}: HeaderNavigationProps) {\n return (\n <nav\n className={cn(\n \"flex-1 flex items-center justify-center\",\n getSpacingClass(\"base\", \"gap\"),\n \"hidden md:flex\", // Hidden on mobile, visible on desktop\n className,\n )}\n aria-label=\"Main navigation\"\n >\n {children}\n </nav>\n );\n}\n","import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\n// Concrete-source-file import (NOT the `../../primitives` barrel): the barrel\n// re-exports client primitives like Input (useMemo), which would taint the\n// static server-safe analysis of this module and bar it from `./server`.\n// See issue #178 in `.claude/rules/server-entry.md` for the worked example.\nimport Text from \"../../primitives/Text/Text\";\nimport { cn, cva } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\n// Ambient declaration so the dev-only warn typechecks without pulling\n// @types/node into the app tsconfig; the `typeof process` guard keeps the\n// branch safe in browser/edge runtimes where `process` doesn't exist. At\n// runtime the consumer's bundler replaces `process.env.NODE_ENV` with a\n// literal. Mirrors the precedent in Card.tsx / Button.tsx.\ndeclare const process: { env: { NODE_ENV?: string } };\n\n/**\n * Visual treatment of the hero surface.\n *\n * - `plain` — no decorative background; the hero is text + padding on\n * whatever surface it sits on.\n * - `gradient` — a soft brand→secondary wash (theme-aware, see\n * `utilities/gradients.css`).\n * - `gradient-glow` — the same wash plus a brand-colored outer glow for\n * top-of-funnel emphasis (landing / home).\n */\nexport type HeroSectionVariant = \"plain\" | \"gradient\" | \"gradient-glow\";\n\n/** Block alignment of the hero content. */\nexport type HeroSectionAlign = \"start\" | \"center\";\n\nexport interface HeroSectionProps\n // `title` is omitted from the inherited DOM attributes because the native\n // `title` attribute is typed `string`, which is incompatible with our\n // `ReactNode` title slot. Everything else (id, aria-*, data-*, className)\n // still flows through to the root <section>.\n extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n /** Eyebrow / kicker above the title (rendered uppercase, brand-colored). */\n kicker?: ReactNode;\n /**\n * The hero title. Rendered as the section's `<h1>`. **Required.**\n *\n * When `title` is a plain string it also becomes the accessible name of\n * the hero `<section>` landmark (the FilterChips `label` pattern). When it\n * is a non-string `ReactNode`, supply `aria-label` or `aria-labelledby`\n * yourself — otherwise the landmark renders without an accessible name and\n * the component emits a dev-only warning.\n */\n title: ReactNode;\n /** Supporting copy below the title (constrained to a readable measure). */\n description?: ReactNode;\n /** Call-to-action slot — typically one or more `<Button>`s. */\n actions?: ReactNode;\n /** Metrics slot — typically a `<StatGroup>` of `<Stat>`s. Spans full width. */\n kpis?: ReactNode;\n /** A line of metadata below everything else (low emphasis). */\n meta?: ReactNode;\n /**\n * Visual treatment of the hero surface.\n * @default 'plain'\n */\n variant?: HeroSectionVariant;\n /**\n * Block alignment of the content.\n * @default 'start'\n */\n align?: HeroSectionAlign;\n /** Additional CSS classes merged onto the root `<section>`. */\n className?: string;\n}\n\n/**\n * HeroSection variants (CVA).\n *\n * The decorative `variant` axis only swaps background / shadow; the `align`\n * axis only swaps text-alignment. Per-block flex alignment (centering the\n * text column, the actions row) is handled by the lookup records below,\n * because those classes land on child elements, not the root.\n */\nconst heroSectionVariants = cva(\n cn(\n \"w-full flex flex-col\",\n getSpacingClass(\"2xl\", \"py\"), // 40px vertical breathing room\n getSpacingClass(\"lg\", \"px\"), // 24px horizontal\n getSpacingClass(\"xl\", \"gap-y\"), // 32px between major blocks\n ),\n {\n variants: {\n variant: {\n plain: \"\",\n gradient: \"hero-gradient\",\n \"gradient-glow\": cn(\"hero-gradient\", \"hero-glow\"),\n },\n align: {\n start: \"text-left\",\n center: \"text-center\",\n },\n },\n defaultVariants: {\n variant: \"plain\",\n align: \"start\",\n },\n },\n);\n\n/** Cross-axis alignment for the inner text column (kicker/title/description). */\nconst blockItems: Record<HeroSectionAlign, string> = {\n start: \"items-start\",\n center: \"items-center\",\n};\n\n/** Main-axis alignment for the actions row. */\nconst actionsJustify: Record<HeroSectionAlign, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n};\n\n/**\n * `HeroSection` — top-of-page hero: kicker + title + description + actions +\n * kpis + meta, in three visual treatments (`plain` / `gradient` /\n * `gradient-glow`) and two alignments (`start` / `center`).\n *\n * Distinct from `PageHeader` (contextual navigation: breadcrumb + title +\n * actions). The hero is a page/landing **introduction** with a visual\n * identity and slots for KPIs and metadata.\n *\n * ### Slots\n *\n * Every slot except `title` is optional and collapses cleanly when absent —\n * no empty wrapper leaks into the DOM. `kpis` is an opaque slot: pass a\n * `<StatGroup>` (or any node); the consumer chooses the metric layout.\n *\n * ### Landmark & accessible name\n *\n * Renders as a `<section>`. A `<section>` is only exposed as a navigable\n * region when it has an accessible name, so the component derives one:\n * - a string `title` becomes the `aria-label` automatically;\n * - an explicit `aria-label` / `aria-labelledby` from the consumer always\n * wins (and `aria-labelledby` suppresses the derived label to avoid a\n * redundant name);\n * - a non-string `title` with no consumer-supplied name triggers a dev-only\n * `console.warn` (dead-code-eliminated in production builds).\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in the\n * `./server` entry. Interactive children supplied via `actions` (e.g.\n * `<Button onClick>`) cross the RSC boundary as client references normally.\n *\n * @example\n * ```tsx\n * <HeroSection\n * variant=\"gradient-glow\"\n * align=\"center\"\n * kicker=\"Transparência\"\n * title=\"Acompanhe o Congresso em tempo real\"\n * description=\"Proposições, votações e parlamentares — tudo em um só lugar.\"\n * actions={<Button variant=\"primary\">Começar</Button>}\n * kpis={\n * <StatGroup layout=\"strip\">\n * <Stat value=\"9,4 mil\" label=\"Parlamentares\" align=\"center\" />\n * <Stat value=\"3,2 mil\" label=\"Proposições\" align=\"center\" />\n * </StatGroup>\n * }\n * meta=\"Atualizado diariamente\"\n * />\n * ```\n */\nconst HeroSection = forwardRef<HTMLElement, HeroSectionProps>(\n function HeroSection(\n {\n kicker,\n title,\n description,\n actions,\n kpis,\n meta,\n variant = \"plain\",\n align = \"start\",\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...rest\n },\n ref,\n ) {\n const hasExplicitName = ariaLabel != null || ariaLabelledBy != null;\n const resolvedAriaLabel =\n ariaLabel ?? (typeof title === \"string\" ? title : undefined);\n\n if (\n typeof process !== \"undefined\" &&\n process.env.NODE_ENV !== \"production\" &&\n !hasExplicitName &&\n typeof title !== \"string\"\n ) {\n console.warn(\n \"[HeroSection] A non-string `title` was provided without `aria-label` \" +\n \"or `aria-labelledby`. The hero <section> landmark will have no \" +\n \"accessible name. Pass `aria-label`, or set `aria-labelledby` to \" +\n \"your title's id.\",\n );\n }\n\n return (\n <section\n ref={ref}\n className={cn(heroSectionVariants({ variant, align }), className)}\n aria-label={resolvedAriaLabel}\n aria-labelledby={ariaLabelledBy}\n {...rest}\n >\n {/* Text column — tighter internal rhythm than the major-block gap. */}\n <div\n className={cn(\n \"flex flex-col\",\n getSpacingClass(\"md\", \"gap-y\"),\n blockItems[align],\n )}\n >\n {kicker ? (\n <Text\n as=\"span\"\n variant=\"caption\"\n colorRole=\"primary\"\n colorShade=\"DEFAULT\"\n className=\"text-sm font-semibold tracking-wide uppercase\"\n >\n {kicker}\n </Text>\n ) : null}\n\n <Text\n as=\"h1\"\n variant=\"heading\"\n className=\"text-3xl font-bold tracking-tight sm:text-4xl\"\n >\n {title}\n </Text>\n\n {description ? (\n <Text\n as=\"p\"\n variant=\"body\"\n colorRole=\"neutral\"\n colorShade=\"DEFAULT\"\n className=\"max-w-2xl text-base leading-relaxed sm:text-lg\"\n >\n {description}\n </Text>\n ) : null}\n </div>\n\n {actions ? (\n <div\n className={cn(\n \"flex flex-wrap\",\n getSpacingClass(\"sm\", \"gap\"),\n actionsJustify[align],\n )}\n >\n {actions}\n </div>\n ) : null}\n\n {kpis ? <div className=\"w-full\">{kpis}</div> : null}\n\n {meta ? (\n <Text\n as=\"p\"\n variant=\"caption\"\n colorRole=\"neutral\"\n colorShade=\"light\"\n className=\"text-sm\"\n >\n {meta}\n </Text>\n ) : null}\n </section>\n );\n },\n);\n\nHeroSection.displayName = \"HeroSection\";\n\nexport default HeroSection;\n","\"use client\";\n\nimport { type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type MenuSeparatorProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * MenuSeparator Component\n *\n * A visual separator for menu items.\n *\n * @example\n * ```tsx\n * <MenuSeparator />\n * ```\n */\nexport default function MenuSeparator({\n className = \"\",\n ...props\n}: MenuSeparatorProps) {\n return (\n <div\n role=\"separator\"\n className={`\n h-px\n bg-line-default\n ${getSpacingClass(\"sm\", \"my\")}\n ${className}\n `}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../../../utils\";\nimport { getSpacingClass } from \"../../../../tokens/spacing\";\nimport type { NavbarSeparatorProps } from \"../../types\";\n\n/**\n * Separator for the Navbar subcomponent\n *\n * Creates visual separation between groups of navigation items.\n *\n * @example\n * ```tsx\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * <SideNavbar.Navbar.Separator />\n * <SideNavbar.Navbar.Item icon={<Settings />} label=\"Settings\" />\n * </SideNavbar.Navbar>\n * ```\n */\nexport default function NavbarSeparator({\n orientation = \"horizontal\",\n className = \"\",\n ...props\n}: NavbarSeparatorProps) {\n if (orientation === \"vertical\") {\n return (\n <div\n className={cn(\"w-px\", \"h-6\", \"bg-line-default\", \"mx-auto\", className)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n {...props}\n />\n );\n }\n\n return (\n <div\n className={cn(\n \"w-full\",\n \"h-px\",\n \"bg-line-default\",\n getSpacingClass(\"sm\", \"my\"), // my-2 (8px) para consistência com gap-2 usado em outros lugares\n \"flex-shrink-0\", // Prevenir que separator encolha\n className,\n )}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n style={{\n // Garantir que separator não seja afetado por transformações\n willChange: \"auto\",\n transform: \"none\",\n }}\n {...props}\n />\n );\n}\n","/**\n * PageHeader Component\n *\n * Page header component with title, description, breadcrumb, and actions.\n *\n * @see EPIC-004: PageHeader Component (Molecule)\n */\n\nimport Breadcrumb from \"../Breadcrumb/Breadcrumb\";\nimport Text from \"../../primitives/Text/Text\";\nimport type { PageHeaderProps } from \"./types\";\nimport { cn, cva } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\n/**\n * PageHeader Variants using CVA\n * Type-safe variant system for PageHeader component\n */\nconst pageHeaderVariants = cva(\n // Base classes\n cn(\"w-full\", \"flex\", \"flex-col\", getSpacingClass(\"sm\", \"gap\")),\n {\n variants: {\n variant: {\n default: cn(getSpacingClass(\"base\", \"mb\")),\n compact: cn(getSpacingClass(\"sm\", \"mb\")),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n/**\n * PageHeader Component\n *\n * Page header with title, description, breadcrumb, and actions.\n *\n * @example\n * ```tsx\n * <PageHeader\n * title=\"Page Title\"\n * description=\"Page description\"\n * breadcrumb={[\n * { label: 'Home', href: '/' },\n * { label: 'Page', href: '/page' },\n * ]}\n * actions={<Button>Action</Button>}\n * />\n * ```\n */\nexport function PageHeader({\n title,\n description,\n breadcrumb,\n actions,\n variant = \"default\",\n className,\n ...props\n}: PageHeaderProps) {\n return (\n <div className={cn(pageHeaderVariants({ variant }), className)} {...props}>\n {/* Breadcrumb */}\n {breadcrumb && breadcrumb.length > 0 && <Breadcrumb items={breadcrumb} />}\n\n {/* Title and Actions Row */}\n <div\n className={`flex items-start justify-between ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Title and Description */}\n <div className=\"flex-1 min-w-0\">\n <Text\n variant=\"heading\"\n as=\"h1\"\n className={`${getSpacingClass(\"sm\", \"mb\")} text-2xl font-bold`}\n >\n {title}\n </Text>\n {description && (\n <Text variant=\"body\" className=\"text-fg-secondary\">\n {description}\n </Text>\n )}\n </div>\n\n {/* Actions */}\n {actions && (\n <div\n className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")} flex-shrink-0`}\n >\n {actions}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default PageHeader;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type StatTone = \"neutral\" | \"success\" | \"warning\" | \"error\";\nexport type StatAlign = \"start\" | \"center\";\n\nexport interface StatProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The metric value to display. Strings are rendered verbatim — formatting\n * (number locale, currency, units, relative time, etc.) is the consumer's\n * responsibility, not the design system's. Pass `null` or `undefined` to\n * render the empty-state placeholder (see \"Empty state\" below).\n */\n value: ReactNode;\n /**\n * Short metric label (e.g. \"Votos\", \"Alinhamento\"). Required for screen\n * reader context — the label describes what the value means.\n */\n label: string;\n /**\n * Optional third line of context below the value (e.g. \"no banco\",\n * \"últimos 12 m\", \"+3% no mês\"). The `tone` prop styles THIS line — see\n * `tone` for the contract.\n */\n hint?: ReactNode;\n /**\n * Optional icon rendered above the value (home-style stats use icons;\n * detail-page stats typically don't).\n */\n icon?: ReactNode;\n /**\n * Block alignment. `start` left-aligns label/value/hint (detail-page\n * style); `center` centers them (home-hero style).\n * @default 'start'\n */\n align?: StatAlign;\n /**\n * Semantic tone for the metric — `neutral` for plain stats, the others\n * for classified states (good/warning/bad).\n *\n * **Scope (contract).** Tone affects ONLY the `hint`, not the `value`,\n * `label`, or `icon`. The `value` always renders in `text-fg-primary`\n * regardless of tone; the `label` in `text-fg-secondary`; the `icon` in\n * `text-icon-default`. This is deliberate — a colored value would\n * compete with the label for attention and bias the reader's\n * interpretation of the metric. If a future requirement needs the\n * `value` (or icon) to inherit tone, that becomes a new prop or a\n * semver-bound default change, not a surprise expansion of `tone`.\n *\n * Tone maps directly to the semantic foreground tokens (no new\n * vocabulary): `neutral` → `text-fg-tertiary`, `success` →\n * `text-fg-success`, `warning` → `text-fg-warning`, `error` →\n * `text-fg-error`. See `.claude/rules/colors.md`.\n *\n * @default 'neutral'\n */\n tone?: StatTone;\n}\n\nconst alignClasses: Record<StatAlign, string> = {\n start: \"items-start text-left\",\n center: \"items-center text-center\",\n};\n\nconst toneHintClasses: Record<StatTone, string> = {\n neutral: \"text-fg-tertiary\",\n success: \"text-fg-success\",\n warning: \"text-fg-warning\",\n error: \"text-fg-error\",\n};\n\n/**\n * `Stat` — a single statistic block (icon? + value + label + hint?).\n *\n * Composes with `StatGroup` (1-px-divider strip or grid) but is also\n * valid standalone — a single `Stat` outside a group is a legitimate use\n * case for a hero metric.\n *\n * ### Empty state contract\n *\n * When `value` is `null` OR `undefined`, the component renders the\n * em-dash placeholder `—` (U+2014) with `aria-label=\"No data\"` on its\n * wrapper. The label is intentionally hard-coded in English in this\n * version; a screen reader announcing \"No data\" in an otherwise\n * Portuguese app is a known inconsistency accepted for now — if i18n\n * becomes a requirement, an `emptyLabel?: string` prop will be added in\n * a follow-up PR (semver-safe addition).\n *\n * Other falsy values — `0`, `\"\"`, `false`, an empty fragment — are\n * **legitimate values** and render as-is. The empty trigger is only\n * `null`/`undefined`, because `0` (count = zero) is meaningful data that\n * the consumer would not want masked.\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in\n * the `./server` entry alongside `StatGroup`. Consumer-supplied `icon`\n * may itself be a client component; React's RSC boundary handles that\n * normally.\n *\n * @example\n * ```tsx\n * // Home-style (centered, with icon)\n * <Stat\n * icon={<Users size={20} aria-hidden=\"true\" />}\n * value=\"9,4 mil\"\n * label=\"Parlamentares\"\n * align=\"center\"\n * />\n *\n * // Detail-page-style (start-aligned, with hint)\n * <Stat\n * value=\"87%\"\n * label=\"Alinhamento\"\n * hint=\"últimos 12 meses\"\n * tone=\"success\"\n * />\n * ```\n */\nexport function Stat({\n value,\n label,\n hint,\n icon,\n align = \"start\",\n tone = \"neutral\",\n className,\n ...props\n}: StatProps) {\n const isEmpty = value === null || value === undefined;\n\n return (\n <div\n className={cn(\n \"bg-surface-base flex-1 flex flex-col\",\n getSpacingClass(\"base\", \"p\"),\n getSpacingClass(\"xs\", \"gap-y\"),\n alignClasses[align],\n className,\n )}\n {...props}\n >\n {icon ? (\n <span className=\"text-icon-default inline-flex\">{icon}</span>\n ) : null}\n {isEmpty ? (\n <span\n aria-label=\"No data\"\n className=\"text-fg-tertiary text-2xl font-semibold leading-tight\"\n >\n —\n </span>\n ) : (\n <span className=\"text-fg-primary text-2xl font-semibold leading-tight\">\n {value}\n </span>\n )}\n <span className=\"text-fg-secondary text-sm\">{label}</span>\n {hint ? (\n <span className={cn(\"text-xs\", toneHintClasses[tone])}>{hint}</span>\n ) : null}\n </div>\n );\n}\n\nexport default Stat;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type StatGroupLayout = \"strip\" | \"grid\";\nexport type StatGroupCols = 2 | 3 | 4;\n\nexport interface StatGroupProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * `strip` — single horizontal row, no wrap. Each `Stat` shares the row\n * width via `flex-1`. Use when you guarantee the horizontal space\n * (hero areas, wide dashboards). On narrow viewports the row does NOT\n * reflow — choose `grid` if you need responsive collapse.\n *\n * `grid` — multi-column grid that reflows. Always 2-up on mobile,\n * expands to `cols` columns at the `md` breakpoint (768 px) and up.\n * Five or more children spill to a second row with the divider lines\n * preserved.\n *\n * @default 'grid'\n */\n layout?: StatGroupLayout;\n /**\n * Desktop column count (≥ 768 px). Only effective in `layout=\"grid\"`;\n * ignored in `layout=\"strip\"`. Mobile is always 2 columns regardless.\n *\n * @default 4\n */\n cols?: StatGroupCols;\n children: ReactNode;\n}\n\n// Tailwind v4 generates `md:grid-cols-N` for N ∈ {2,3,4} statically from\n// the literal class string. The map below ensures the strings exist\n// verbatim in the source so JIT picks them up.\nconst gridColsMd: Record<StatGroupCols, string> = {\n 2: \"md:grid-cols-2\",\n 3: \"md:grid-cols-3\",\n 4: \"md:grid-cols-4\",\n};\n\n/**\n * `StatGroup` — container for one or more `Stat` blocks with 1-px\n * dividers between them.\n *\n * ### Divider technique\n *\n * The container has `bg-line-default` and `gap-px` (1 px); each child\n * `Stat` carries its own `bg-surface-base`. The 1 px of gap exposes the\n * container's background as the divider line, while each cell masks its\n * own area with `bg-surface-base`. Works identically for the strip\n * layout (vertical dividers) and the grid layout (vertical AND\n * horizontal dividers, automatically, as the grid reflows). No separate\n * `Divider` component, no per-cell border logic.\n *\n * The outer ring is `border border-line-default` matching the gap color,\n * with `rounded-lg` and `overflow-hidden` clipping the inner cells to\n * the radius.\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in\n * `./server` alongside `Stat`.\n *\n * @example\n * ```tsx\n * <StatGroup layout=\"strip\">\n * <Stat icon={<Users />} value=\"9,4 mil\" label=\"Parlamentares\" align=\"center\" />\n * <Stat icon={<FileText />} value=\"3,2 mil\" label=\"Proposições\" align=\"center\" />\n * <Stat icon={<Vote />} value=\"1,1 mil\" label=\"Votações\" align=\"center\" />\n * <Stat icon={<Clock />} value=\"há 18 dias\" label=\"Última atualização\" align=\"center\" />\n * </StatGroup>\n *\n * <StatGroup layout=\"grid\" cols={4}>\n * <Stat value=\"87%\" label=\"Alinhamento\" hint=\"últimos 12 m\" tone=\"success\" />\n * <Stat value={null} label=\"Sem orientação\" hint=\"no período\" />\n * <Stat value=\"R$ 187.472,95\" label=\"Gastos\" hint=\"no mandato\" />\n * <Stat value=\"42\" label=\"Votações\" hint=\"no banco\" />\n * </StatGroup>\n * ```\n */\nexport function StatGroup({\n layout = \"grid\",\n cols = 4,\n className,\n children,\n ...props\n}: StatGroupProps) {\n const isGrid = layout === \"grid\";\n\n return (\n <div\n className={cn(\n \"bg-line-default border border-line-default overflow-hidden gap-px\",\n getRadiusClass(\"lg\"),\n isGrid ? `grid grid-cols-2 ${gridColsMd[cols]}` : \"flex\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport default StatGroup;\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport type { TableColumn } from \"./TableTypes\";\n\nexport interface TableCellProps<\n T = unknown,\n> extends HTMLAttributes<HTMLTableCellElement> {\n column: TableColumn<T>;\n row: T;\n}\n\n/**\n * TableCell Component\n *\n * Renders a table cell (td) for a column.\n * Uses column.render if available, otherwise renders the raw value.\n * Must be used within a Table component.\n */\nexport default function TableCell<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({ column, row, className = \"\", ...props }: TableCellProps<T>) {\n const value = column.key in row ? row[column.key as keyof T] : undefined;\n\n return (\n <td\n className={`${getSpacingClass(\"lg\", \"px\")} ${getSpacingClass(\"base\", \"py\")} whitespace-nowrap text-sm text-fg-primary ${\n column.hiddenOnMobile ? \"hidden md:table-cell\" : \"\"\n } ${className}`}\n {...props}\n >\n {column.render ? column.render(value, row) : String(value ?? \"\")}\n </td>\n );\n}\n","import { forwardRef } from \"react\";\nimport type { ElementType, HTMLAttributes, ReactNode } from \"react\";\nimport { cn, cva } from \"../../utils\";\nimport {\n getRadiusClass,\n getSpacingClass,\n getTypographySize,\n} from \"../../tokens\";\n\n// Ambient declaration so the dev-only warn typechecks without pulling\n// @types/node in; the `typeof process` guard keeps it safe in browser/edge\n// runtimes. Mirrors Card.tsx / HeroSection.tsx.\ndeclare const process: { env: { NODE_ENV?: string } };\n\n/** Visual hierarchy: `default` = primary tab bar, `sub` = nested sub-tabs. */\nexport type TabsAsLinksVariant = \"default\" | \"sub\";\n\n/** A single navigation tab. The active state is decided by the caller. */\nexport interface TabAsLink {\n /** Visible tab label. */\n label: ReactNode;\n /** Destination URL — pre-computed by the caller. */\n href: string;\n /**\n * Whether this tab is the current one. The caller derives it (from\n * `pathname` / `searchParams`); the component does no detection of its own.\n * @default false\n */\n active?: boolean;\n /** Optional leading icon (decorative — rendered `aria-hidden`). */\n icon?: ReactNode;\n /** Optional trailing count (e.g. number of items behind the tab). */\n count?: number;\n}\n\nexport interface TabsAsLinksProps extends HTMLAttributes<HTMLElement> {\n /** The tabs to render, in order. */\n items: TabAsLink[];\n /**\n * Visual hierarchy.\n * @default 'default'\n */\n variant?: TabsAsLinksVariant;\n /**\n * Element/component each tab renders as. Defaults to a plain `<a>` (zero\n * JS, works without hydration). Pass a router link — e.g. Next's `Link` —\n * to keep client-side navigation/prefetch: `linkComponent={Link}`. It\n * receives `href`, `className`, `aria-current`, and `children`.\n * @default 'a'\n */\n linkComponent?: ElementType;\n /** Additional CSS classes merged onto the root `<nav>`. */\n className?: string;\n}\n\n/**\n * Tab-bar container (the `<nav>` track). Only the gap and the track-line\n * weight differ between tiers; the active underline lives on each link.\n */\nconst navVariants = cva(cn(\"flex items-center\", \"border-b\"), {\n variants: {\n variant: {\n default: cn(\"border-line-default\", getSpacingClass(\"base\", \"gap-x\")),\n sub: cn(\"border-line-muted\", getSpacingClass(\"sm\", \"gap-x\")),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n/**\n * A single tab link. The 2px bottom border with `-mb-px` overlaps the 1px\n * `<nav>` track so the active underline visually replaces the track segment\n * (the classic tab-bar look). `active` and `variant` are independent axes.\n */\nconst tabLinkVariants = cva(\n cn(\n \"relative -mb-px inline-flex items-center\",\n getSpacingClass(\"xs\", \"gap-x\"),\n \"border-b-2 border-transparent\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus-visible:ring-2\",\n \"focus-visible:ring-line-focus\",\n \"focus-visible:ring-offset-2\",\n getRadiusClass(\"sm\"),\n ),\n {\n variants: {\n variant: {\n default: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n sub: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n },\n active: {\n true: cn(\"border-line-brand\", \"text-fg-brand-emphasis\", \"font-medium\"),\n false: cn(\n \"text-fg-secondary\",\n \"hover:text-fg-primary\",\n \"hover:border-line-muted\",\n ),\n },\n },\n compoundVariants: [\n // Sub-tabs sit lower in the hierarchy: lighter resting foreground.\n {\n variant: \"sub\",\n active: false,\n class: cn(\"text-fg-tertiary\", \"hover:text-fg-secondary\"),\n },\n ],\n defaultVariants: {\n variant: \"default\",\n active: false,\n },\n },\n);\n\nconst countClasses = cn(\n \"inline-flex items-center justify-center\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"px\"),\n \"bg-surface-muted text-fg-secondary text-xs\",\n);\n\n/**\n * `TabsAsLinks` — tabs rendered as **navigation links**, with the active tab\n * decided by the caller (from the URL), not by interactive state.\n *\n * This is the server-safe counterpart to the interactive `Tabs` widget. Use\n * it for tab bars whose selection lives in the URL (`?tab=`, `/section`) so\n * they work without JavaScript and survive a shared link. Because each tab is\n * a real link to a distinct destination, the component uses the **navigation**\n * pattern — a named `<nav>` landmark with `aria-current=\"page\"` on the active\n * link — NOT the `role=\"tab\"` widget pattern (which would promise arrow-key\n * semantics that links don't have).\n *\n * ### Accessible name\n *\n * Renders a `<nav>` landmark, which must be named so screen-reader users can\n * tell multiple tab bars apart. Pass `aria-label` (e.g. `\"Painel\"`) or\n * `aria-labelledby`. With neither, a dev-only warning fires (the landmark\n * still renders, just anonymously).\n *\n * ### Server-safe\n *\n * No hooks, no event handlers on the DOM — pure presentation. Ships in the\n * `./server` entry. Defaults to a plain `<a>`; pass `linkComponent={Link}` to\n * keep a router's client-side navigation, which crosses the RSC boundary as a\n * client reference.\n *\n * @example\n * ```tsx\n * // Next App Router — active derived from searchParams in a Server Component\n * <TabsAsLinks\n * aria-label=\"Painel\"\n * linkComponent={Link}\n * items={[\n * { label: \"Visão geral\", href: \"/painel?tab=overview\", active: tab === \"overview\" },\n * { label: \"Alertas\", href: \"/painel?tab=alerts\", active: tab === \"alerts\", count: 3 },\n * ]}\n * />\n * ```\n */\nconst TabsAsLinks = forwardRef<HTMLElement, TabsAsLinksProps>(\n function TabsAsLinks(\n {\n items,\n variant = \"default\",\n linkComponent,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...rest\n },\n ref,\n ) {\n if (\n typeof process !== \"undefined\" &&\n process.env.NODE_ENV !== \"production\" &&\n !ariaLabel &&\n !ariaLabelledBy\n ) {\n console.warn(\n \"[TabsAsLinks] renders a <nav> landmark and should have an \" +\n 'accessible name. Pass `aria-label` (e.g. \"Painel\") or ' +\n \"`aria-labelledby` — multiple unnamed navs on a page are ambiguous \" +\n \"to screen readers.\",\n );\n }\n\n const LinkComponent: ElementType = linkComponent ?? \"a\";\n\n return (\n <nav\n ref={ref}\n className={cn(navVariants({ variant }), className)}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n {...rest}\n >\n {items.map((item, index) => (\n <LinkComponent\n key={item.href || index}\n href={item.href}\n aria-current={item.active ? \"page\" : undefined}\n data-active={item.active ? \"true\" : undefined}\n className={tabLinkVariants({ variant, active: !!item.active })}\n >\n {item.icon ? (\n <span aria-hidden=\"true\" className=\"inline-flex shrink-0\">\n {item.icon}\n </span>\n ) : null}\n <span>{item.label}</span>\n {item.count !== undefined ? (\n <span className={countClasses}>{item.count}</span>\n ) : null}\n </LinkComponent>\n ))}\n </nav>\n );\n },\n);\n\nTabsAsLinks.displayName = \"TabsAsLinks\";\n\nexport default TabsAsLinks;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type TimelineOrientation = \"horizontal\" | \"vertical\";\n\nexport interface TimelineItem {\n id: string;\n title: string;\n description?: string;\n content?: ReactNode;\n timestamp?: string;\n icon?: ReactNode;\n status?: \"default\" | \"active\" | \"completed\" | \"error\";\n}\n\nexport interface TimelineProps {\n items: TimelineItem[];\n orientation?: TimelineOrientation;\n className?: string;\n}\n\n/**\n * Timeline Component\n *\n * A timeline component for displaying events in chronological order.\n * Supports horizontal and vertical orientations.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <Timeline\n * items={[\n * { id: '1', title: 'Event 1', description: 'Description 1', timestamp: '2024-01-01' },\n * { id: '2', title: 'Event 2', description: 'Description 2', timestamp: '2024-01-02' },\n * ]}\n * />\n * ```\n */\nexport default function Timeline({\n items,\n orientation = \"vertical\",\n className = \"\",\n}: TimelineProps) {\n if (orientation === \"horizontal\") {\n return (\n <div className={`flex items-start ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div key={item.id} className=\"flex items-start flex-1\">\n <div className=\"flex flex-col items-center flex-1\">\n {/* Icon/Indicator */}\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\"\n ? { \"data-marker\": \"pending\" }\n : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n\n {/* Connector Line */}\n {!isLast && (\n <div\n className={`\n w-full\n h-0.5\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n\n {/* Content */}\n <div\n className={`${getSpacingClass(\"base\", \"mt\")} text-center ${getSpacingClass(\"base\", \"px\")}`}\n >\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3 className=\"text-sm font-semibold text-fg-primary\">\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-xs text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"sm\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div className={`${getSpacingClass(\"none\", \"space-y\")} ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div\n key={item.id}\n className={`flex items-start ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Timeline Line & Icon */}\n <div className=\"flex flex-col items-center\">\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\" ? { \"data-marker\": \"pending\" } : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n {!isLast && (\n <div\n className={`\n w-0.5\n flex-1\n min-h-16\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n </div>\n\n {/* Content */}\n <div className={`flex-1 ${getSpacingClass(\"xl\", \"pb\")}`}>\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3\n className={`\n text-base\n font-semibold\n ${status === \"active\" ? \"text-fg-brand-emphasis\" : \"text-fg-primary\"}\n `}\n >\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-sm text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"md\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["RadiusTokenFactory","size","config","RADIUS_TOKENS","getRadiusClass","SpacingTokenFactory","scale","px","rem","__publicField","SPACING_TOKENS","getSpacingClass","direction","value","TypographyTokenFactory","height","weight","lineHeight","TYPOGRAPHY_TOKENS","getTypographyClasses","variant","token","getTypographySize","getTypographyWeight","cn","inputs","twMerge","clsx","cva","base","variantFn","cvaLib","props","variantClasses","badgeVariants","Badge","memo","forwardRef","_a","ref","_b","style","className","children","ariaLabel","__objRest","classes","accessibleLabel","childProps","jsx","__spreadProps","__spreadValues","setRef","composeRefs","refs","node","hasCleanup","cleanups","cleanup","i","useComposedRefs","React","createSlot","ownerName","Slot2","forwardedRef","slotProps","slottableElement","hasSlottable","newChildren","isLazyComponent","use","maybeSlottable","isSlottable","slottable","child","getSlottableElementFromSlottable","slottableElementRef","getElementRef","composedRef","createSlottableError","createSlotError","mergedProps","mergeProps","Slot","SLOTTABLE_IDENTIFIER","child2","overrideProps","propName","slotPropValue","childPropValue","args","result","element","getter","mayWarn","REACT_LAZY_TYPE","isPromiseLike","chipVariants","Chip","selected","disabled","tabIndex","asChild","onRemove","onClick","useLabelButton","interactive","handleKeyDown","e","jsxs","X","ErrorMessage","message","id","baseClasses","AlertCircle","Info","labelBaseClasses","labelVariantClasses","Label","ShadowTokenFactory","SHADOW_TOKENS","getShadowClass","progressTrackVariants","progressBarVariants","Progress","max","showLabel","label","isIndeterminate","percentage","defaultAriaLabel","separatorOrientationClasses","separatorVariantClasses","Separator","orientation","Skeleton","width","lines","_","index","spinnerVariants","Spinner","Loader2","TEXT_COLOR_CLASSES","TextComponent","bold","italic","as","colorRole","colorShade","rest","classNames","Tag","Text","maxWidthClasses","Container","maxWidth","paddingX","paddingY","center","Stack","spacing","align","justify","spacingClass","alignClasses","justifyClasses","Breadcrumb","items","separator","item","isLast","CardHeader","CardTitle","icon","badge","As","CardSubtitle","CardActions","CardBody","CardComponent","padding","ariaLabelledBy","asSection","cardVariants","isInteractive","role","commonProps","MemoCard","Card","DialogHeader","DialogFooter","DrawerHeader","DrawerFooter","FilterChips","wrap","derivedAriaLabel","HeaderActions","HeaderNavigation","heroSectionVariants","blockItems","actionsJustify","HeroSection","kicker","title","description","actions","kpis","meta","hasExplicitName","resolvedAriaLabel","MenuSeparator","NavbarSeparator","pageHeaderVariants","PageHeader","breadcrumb","toneHintClasses","Stat","hint","tone","isEmpty","gridColsMd","StatGroup","layout","cols","isGrid","TableCell","column","row","navVariants","tabLinkVariants","countClasses","TabsAsLinks","linkComponent","LinkComponent","Timeline","status","CheckCircle2"],"mappings":"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","x_google_ignoreList":[6,7]}
1
+ {"version":3,"file":"index.js","sources":["../../src/ui/tokens/radius.ts","../../src/ui/tokens/spacing.ts","../../src/ui/tokens/typography.ts","../../src/ui/utils/cn.ts","../../src/ui/utils/cva.ts","../../src/ui/primitives/Badge/Badge.tsx","../../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../node_modules/@radix-ui/react-slot/dist/index.mjs","../../src/ui/primitives/Chip/Chip.tsx","../../src/ui/primitives/ErrorMessage/ErrorMessage.tsx","../../src/ui/primitives/Info/Info.tsx","../../src/ui/primitives/Label/Label.tsx","../../src/ui/tokens/shadows.ts","../../src/ui/primitives/Progress/Progress.tsx","../../src/ui/primitives/Separator/Separator.tsx","../../src/ui/primitives/Skeleton/Skeleton.tsx","../../src/ui/primitives/Spinner/Spinner.tsx","../../src/ui/primitives/Text/Text.tsx","../../src/ui/layouts/Container/Container.tsx","../../src/ui/layouts/Stack/Stack.tsx","../../src/ui/components/Breadcrumb/Breadcrumb.tsx","../../src/ui/components/Card/CardHeader.tsx","../../src/ui/components/Card/CardTitle.tsx","../../src/ui/components/Card/CardSubtitle.tsx","../../src/ui/components/Card/CardActions.tsx","../../src/ui/components/Card/CardBody.tsx","../../src/ui/components/Card/Card.tsx","../../src/ui/components/Dialog/DialogHeader.tsx","../../src/ui/components/Dialog/DialogFooter.tsx","../../src/ui/components/Drawer/DrawerHeader.tsx","../../src/ui/components/Drawer/DrawerFooter.tsx","../../src/ui/components/FilterChips/FilterChips.tsx","../../src/ui/components/Header/components/HeaderActions.tsx","../../src/ui/components/Header/components/HeaderNavigation.tsx","../../src/ui/components/HeroSection/HeroSection.tsx","../../src/ui/components/Menu/MenuSeparator.tsx","../../src/ui/components/SideNavbar/components/Navbar/NavbarSeparator.tsx","../../src/ui/components/PageHeader/PageHeader.tsx","../../src/ui/components/Stat/Stat.tsx","../../src/ui/components/Stat/StatGroup.tsx","../../src/ui/components/Table/TableCell.tsx","../../src/ui/components/TabsAsLinks/TabsAsLinks.tsx","../../src/ui/components/Timeline/Timeline.tsx"],"sourcesContent":["/**\n * Border Radius Tokens\n *\n * Centralized border radius system for consistent rounded corners.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type RadiusSize =\n | \"none\"\n | \"sm\"\n | \"md\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"full\";\n\nexport interface RadiusToken {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n description: string;\n}\n\n/**\n * Radius Token Factory\n * Creates radius tokens with consistent values\n */\nexport class RadiusTokenFactory {\n /**\n * Create a radius token\n */\n static create(size: RadiusSize): RadiusToken {\n const radiusMap: Record<\n RadiusSize,\n { px: number; tailwind: string; description: string }\n > = {\n none: {\n px: 0,\n tailwind: \"rounded-none\",\n description: \"No border radius\",\n },\n sm: {\n px: 2,\n tailwind: \"rounded-sm\",\n description: \"Small radius (2px) for subtle rounding\",\n },\n md: {\n px: 6,\n tailwind: \"rounded-md\",\n description: \"Medium radius (6px) for buttons and inputs\",\n },\n lg: {\n px: 8,\n tailwind: \"rounded-lg\",\n description: \"Large radius (8px) for cards and containers\",\n },\n xl: {\n px: 12,\n tailwind: \"rounded-xl\",\n description: \"Extra large radius (12px) for prominent elements\",\n },\n \"2xl\": {\n px: 16,\n tailwind: \"rounded-2xl\",\n description: \"2X large radius (16px) for large containers\",\n },\n \"3xl\": {\n px: 24,\n tailwind: \"rounded-3xl\",\n description: \"3X large radius (24px) for very large containers\",\n },\n full: {\n px: 9999,\n tailwind: \"rounded-full\",\n description: \"Full radius for circular elements\",\n },\n };\n\n const config = radiusMap[size];\n return {\n value: config.px,\n rem: `${config.px / 16}rem`,\n px: `${config.px}px`,\n tailwind: config.tailwind,\n description: config.description,\n };\n }\n}\n\n/**\n * Pre-defined radius tokens\n */\nexport const RADIUS_TOKENS = {\n none: RadiusTokenFactory.create(\"none\"),\n sm: RadiusTokenFactory.create(\"sm\"),\n md: RadiusTokenFactory.create(\"md\"),\n lg: RadiusTokenFactory.create(\"lg\"),\n xl: RadiusTokenFactory.create(\"xl\"),\n \"2xl\": RadiusTokenFactory.create(\"2xl\"),\n \"3xl\": RadiusTokenFactory.create(\"3xl\"),\n full: RadiusTokenFactory.create(\"full\"),\n} as const;\n\n/**\n * Helper function to get radius token\n */\nexport function getRadius(size: keyof typeof RADIUS_TOKENS): RadiusToken {\n return RADIUS_TOKENS[size];\n}\n\n/**\n * Helper function to get radius as Tailwind class\n */\nexport function getRadiusClass(size: keyof typeof RADIUS_TOKENS): string {\n return RADIUS_TOKENS[size].tailwind;\n}\n","/**\n * Spacing Tokens\n *\n * Centralized spacing scale based on 4px base unit.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type SpacingScale =\n | 0\n | 0.5\n | 1\n | 1.5\n | 2\n | 2.5\n | 3\n | 3.5\n | 4\n | 5\n | 6\n | 8\n | 10\n | 12\n | 16\n | 20\n | 24\n | 32\n | 40\n | 48\n | 64\n | 80\n | 96;\n\nexport interface SpacingToken {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n}\n\n/**\n * Spacing Token Factory\n * Creates spacing tokens with consistent naming and values\n */\nexport class SpacingTokenFactory {\n private static readonly BASE_UNIT = 4; // 4px base\n\n /**\n * Create a spacing token from scale value\n */\n static create(scale: SpacingScale): SpacingToken {\n const px = scale * this.BASE_UNIT;\n const rem = px / 16; // 16px = 1rem\n\n return {\n value: px,\n rem: `${rem}rem`,\n px: `${px}px`,\n tailwind: this.getTailwindClass(scale),\n };\n }\n\n /**\n * Get Tailwind class for spacing value\n */\n private static getTailwindClass(scale: SpacingScale): string {\n const tailwindMap: Record<SpacingScale, string> = {\n 0: \"0\",\n 0.5: \"0.5\", // 2px — half-step, used by fine UI (badges, switches, separators)\n 1: \"1\", // 4px\n 1.5: \"1.5\", // 6px — half-step\n 2: \"2\", // 8px\n 2.5: \"2.5\", // 10px — half-step\n 3: \"3\", // 12px\n 3.5: \"3.5\", // 14px — half-step\n 4: \"4\", // 16px\n 5: \"5\", // 20px\n 6: \"6\", // 24px\n 8: \"8\", // 32px\n 10: \"10\", // 40px\n 12: \"12\", // 48px\n 16: \"16\", // 64px\n 20: \"20\", // 80px\n 24: \"24\", // 96px\n 32: \"32\", // 128px\n 40: \"40\", // 160px\n 48: \"48\", // 192px\n 64: \"64\", // 256px\n 80: \"80\", // 320px\n 96: \"96\", // 384px\n };\n\n return tailwindMap[scale] || String(scale);\n }\n}\n\n/**\n * Pre-defined spacing tokens\n */\nexport const SPACING_TOKENS = {\n // Micro spacing (0-14px)\n none: SpacingTokenFactory.create(0),\n \"0.5\": SpacingTokenFactory.create(0.5), // 2px (half-step)\n xs: SpacingTokenFactory.create(1), // 4px\n \"1.5\": SpacingTokenFactory.create(1.5), // 6px (half-step)\n sm: SpacingTokenFactory.create(2), // 8px\n \"2.5\": SpacingTokenFactory.create(2.5), // 10px (half-step)\n md: SpacingTokenFactory.create(3), // 12px\n \"3.5\": SpacingTokenFactory.create(3.5), // 14px (half-step)\n\n // Standard spacing (16-32px)\n base: SpacingTokenFactory.create(4), // 16px\n lg: SpacingTokenFactory.create(6), // 24px\n xl: SpacingTokenFactory.create(8), // 32px\n\n // Large spacing (40-64px)\n \"2xl\": SpacingTokenFactory.create(10), // 40px\n \"3xl\": SpacingTokenFactory.create(12), // 48px\n \"4xl\": SpacingTokenFactory.create(16), // 64px\n\n // Extra large spacing (80px+)\n \"5xl\": SpacingTokenFactory.create(20), // 80px\n \"6xl\": SpacingTokenFactory.create(24), // 96px\n} as const;\n\n/**\n * Helper function to get spacing value\n */\nexport function getSpacing(scale: keyof typeof SPACING_TOKENS): SpacingToken {\n return SPACING_TOKENS[scale];\n}\n\n/**\n * Helper function to get spacing as Tailwind class\n */\nexport function getSpacingClass(\n scale: keyof typeof SPACING_TOKENS,\n direction:\n | \"p\"\n | \"m\"\n | \"px\"\n | \"mx\"\n | \"py\"\n | \"my\"\n | \"pt\"\n | \"mt\"\n | \"pr\"\n | \"mr\"\n | \"pb\"\n | \"mb\"\n | \"pl\"\n | \"ml\"\n | \"gap\"\n | \"gap-x\"\n | \"gap-y\"\n | \"space-x\"\n | \"space-y\" = \"p\",\n): string {\n const token = SPACING_TOKENS[scale];\n const value = token.tailwind;\n\n const prefixMap: Record<string, string> = {\n p: \"p\",\n m: \"m\",\n px: \"px\",\n mx: \"mx\",\n py: \"py\",\n my: \"my\",\n pt: \"pt\",\n mt: \"mt\",\n pr: \"pr\",\n mr: \"mr\",\n pb: \"pb\",\n mb: \"mb\",\n pl: \"pl\",\n ml: \"ml\",\n gap: \"gap\",\n \"gap-x\": \"gap-x\",\n \"gap-y\": \"gap-y\",\n \"space-x\": \"space-x\",\n \"space-y\": \"space-y\",\n };\n\n return `${prefixMap[direction]}-${value}`;\n}\n","/**\n * Typography Tokens\n *\n * Centralized typography system with font families, sizes, weights, and line heights.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type FontFamily = \"sans\" | \"serif\" | \"mono\";\nexport type FontWeight = \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\";\nexport type FontSize =\n | \"2xs\"\n | \"xs\"\n | \"sm\"\n | \"base\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"5xl\"\n | \"6xl\";\nexport type LineHeight =\n | \"none\"\n | \"tight\"\n | \"snug\"\n | \"normal\"\n | \"relaxed\"\n | \"loose\";\n\nexport interface TypographyToken {\n fontSize: {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n };\n lineHeight: {\n value: number;\n tailwind: string;\n };\n fontWeight: {\n value: number;\n tailwind: string;\n };\n}\n\nexport interface FontFamilyToken {\n name: string;\n stack: string;\n tailwind: string;\n}\n\nexport interface FontWeightToken {\n value: number;\n tailwind: string;\n}\n\n/**\n * Typography Token Factory\n * Creates typography tokens with consistent values\n */\nexport class TypographyTokenFactory {\n /**\n * Create font size token\n */\n static createFontSize(size: FontSize): TypographyToken[\"fontSize\"] {\n const sizeMap: Record<FontSize, { px: number; tailwind: string }> = {\n \"2xs\": { px: 10, tailwind: \"text-2xs\" }, // micro-text (badge counters, mini chips)\n xs: { px: 12, tailwind: \"text-xs\" },\n sm: { px: 14, tailwind: \"text-sm\" },\n base: { px: 16, tailwind: \"text-base\" },\n lg: { px: 18, tailwind: \"text-lg\" },\n xl: { px: 20, tailwind: \"text-xl\" },\n \"2xl\": { px: 24, tailwind: \"text-2xl\" },\n \"3xl\": { px: 30, tailwind: \"text-3xl\" },\n \"4xl\": { px: 36, tailwind: \"text-4xl\" },\n \"5xl\": { px: 48, tailwind: \"text-5xl\" },\n \"6xl\": { px: 60, tailwind: \"text-6xl\" },\n };\n\n const config = sizeMap[size];\n return {\n value: config.px,\n rem: `${config.px / 16}rem`,\n px: `${config.px}px`,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create line height token\n */\n static createLineHeight(height: LineHeight): TypographyToken[\"lineHeight\"] {\n const heightMap: Record<LineHeight, { value: number; tailwind: string }> = {\n none: { value: 1, tailwind: \"leading-none\" },\n tight: { value: 1.25, tailwind: \"leading-tight\" },\n snug: { value: 1.375, tailwind: \"leading-snug\" },\n normal: { value: 1.5, tailwind: \"leading-normal\" },\n relaxed: { value: 1.625, tailwind: \"leading-relaxed\" },\n loose: { value: 2, tailwind: \"leading-loose\" },\n };\n\n const config = heightMap[height];\n return {\n value: config.value,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create font weight token\n */\n static createFontWeight(weight: FontWeight): FontWeightToken {\n const weightMap: Record<FontWeight, { value: number; tailwind: string }> = {\n light: { value: 300, tailwind: \"font-light\" },\n normal: { value: 400, tailwind: \"font-normal\" },\n medium: { value: 500, tailwind: \"font-medium\" },\n semibold: { value: 600, tailwind: \"font-semibold\" },\n bold: { value: 700, tailwind: \"font-bold\" },\n };\n\n const config = weightMap[weight];\n return {\n value: config.value,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create complete typography token\n */\n static create(\n size: FontSize,\n lineHeight: LineHeight = \"normal\",\n weight: FontWeight = \"normal\",\n ): TypographyToken {\n return {\n fontSize: this.createFontSize(size),\n lineHeight: this.createLineHeight(lineHeight),\n fontWeight: this.createFontWeight(weight),\n };\n }\n}\n\n/**\n * Font family tokens\n */\nexport const FONT_FAMILY_TOKENS: Record<FontFamily, FontFamilyToken> = {\n sans: {\n name: \"sans\",\n stack:\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif',\n tailwind: \"font-sans\",\n },\n serif: {\n name: \"serif\",\n stack: 'ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif',\n tailwind: \"font-serif\",\n },\n mono: {\n name: \"mono\",\n stack:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n tailwind: \"font-mono\",\n },\n} as const;\n\n/**\n * Font weight tokens\n */\nexport const FONT_WEIGHT_TOKENS: Record<FontWeight, FontWeightToken> = {\n light: TypographyTokenFactory.createFontWeight(\"light\"),\n normal: TypographyTokenFactory.createFontWeight(\"normal\"),\n medium: TypographyTokenFactory.createFontWeight(\"medium\"),\n semibold: TypographyTokenFactory.createFontWeight(\"semibold\"),\n bold: TypographyTokenFactory.createFontWeight(\"bold\"),\n} as const;\n\n/**\n * Pre-defined typography tokens for common use cases\n */\nexport const TYPOGRAPHY_TOKENS = {\n // Headings\n h1: TypographyTokenFactory.create(\"4xl\", \"tight\", \"bold\"),\n h2: TypographyTokenFactory.create(\"3xl\", \"tight\", \"bold\"),\n h3: TypographyTokenFactory.create(\"2xl\", \"snug\", \"semibold\"),\n h4: TypographyTokenFactory.create(\"xl\", \"snug\", \"semibold\"),\n h5: TypographyTokenFactory.create(\"lg\", \"normal\", \"medium\"),\n h6: TypographyTokenFactory.create(\"base\", \"normal\", \"medium\"),\n\n // Body text\n body: TypographyTokenFactory.create(\"base\", \"relaxed\", \"normal\"),\n bodySmall: TypographyTokenFactory.create(\"sm\", \"relaxed\", \"normal\"),\n bodyLarge: TypographyTokenFactory.create(\"lg\", \"relaxed\", \"normal\"),\n\n // UI elements\n label: TypographyTokenFactory.create(\"sm\", \"normal\", \"medium\"),\n caption: TypographyTokenFactory.create(\"xs\", \"normal\", \"normal\"),\n button: TypographyTokenFactory.create(\"base\", \"normal\", \"medium\"),\n} as const;\n\n/**\n * Helper function to get typography token\n */\nexport function getTypography(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): TypographyToken {\n return TYPOGRAPHY_TOKENS[variant];\n}\n\n/**\n * Helper function to get typography classes as string\n */\nexport function getTypographyClasses(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n const token = TYPOGRAPHY_TOKENS[variant];\n return `${token.fontSize.tailwind} ${token.lineHeight.tailwind} ${token.fontWeight.tailwind}`;\n}\n\n/**\n * Helper function to get only font size class\n */\nexport function getTypographySize(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].fontSize.tailwind;\n}\n\n/**\n * Helper function to get font size class directly from FontSize\n * This is a convenience function for when you just need a size, not a full typography variant\n */\nexport function getTypographySizeFromFontSize(size: FontSize): string {\n return TypographyTokenFactory.createFontSize(size).tailwind;\n}\n\n/**\n * Helper function to get only font weight class\n */\nexport function getTypographyWeight(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].fontWeight.tailwind;\n}\n\n/**\n * Helper function to get font weight class directly from FontWeight\n * This is a convenience function for when you just need a weight, not a full typography variant\n */\nexport function getTypographyWeightFromFontWeight(weight: FontWeight): string {\n return TypographyTokenFactory.createFontWeight(weight).tailwind;\n}\n\n/**\n * Helper function to get only line height class\n */\nexport function getTypographyLineHeight(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].lineHeight.tailwind;\n}\n","/**\n * CN Utility - ClassName Merge\n *\n * Utility function for merging classNames with Tailwind conflict resolution.\n * Combines clsx for conditional classes and tailwind-merge for conflict resolution.\n *\n * @example\n * ```tsx\n * cn('base-class', condition && 'conditional-class', className)\n * cn(['class1', 'class2'], { 'class3': true })\n * ```\n */\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges classNames and resolves Tailwind class conflicts.\n *\n * Uses clsx for conditional class handling and tailwind-merge\n * to intelligently merge Tailwind classes, resolving conflicts\n * (e.g., 'p-2' and 'p-4' -> 'p-4').\n *\n * @param inputs - Class values to merge (strings, arrays, objects)\n * @returns Merged className string with conflicts resolved\n *\n * @example\n * ```tsx\n * // Basic usage\n * cn('base-class', 'another-class') // 'base-class another-class'\n *\n * // Conditional classes\n * cn('base', isActive && 'active', className)\n *\n * // Arrays and objects\n * cn(['class1', 'class2'], { 'class3': true, 'class4': false })\n *\n * // Tailwind conflict resolution\n * cn('p-2', 'p-4') // 'p-4' (p-2 is overridden)\n * cn('text-red-500', 'text-blue-500') // 'text-blue-500'\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * CVA Utility - Class Variance Authority\n *\n * Type-safe utility for creating component variants with compound variants support.\n * Based on class-variance-authority but integrated with our design system.\n *\n * @example\n * ```tsx\n * const buttonVariants = cva('base-class', {\n * variants: {\n * variant: { primary: 'bg-blue-500', secondary: 'bg-gray-500' },\n * size: { sm: 'text-sm', md: 'text-base' }\n * },\n * defaultVariants: { variant: 'primary', size: 'md' }\n * })\n * ```\n */\n\nimport { type VariantProps, cva as cvaLib } from \"class-variance-authority\";\nimport type { ClassValue } from \"clsx\";\nimport { cn } from \"./cn\";\n\n/**\n * Re-export VariantProps for type inference\n */\nexport type { VariantProps };\n\n/**\n * Creates a type-safe variant function with compound variants support.\n *\n * Integrates with our cn() utility for proper Tailwind conflict resolution.\n * This is a thin wrapper around class-variance-authority's cva function\n * that ensures cn() is used for final class merging.\n *\n * @param base - Base classes that always apply\n * @param config - Variant configuration with variants, compoundVariants, and defaultVariants\n * @returns Function that returns className based on variant props\n *\n * @example\n * ```tsx\n * // Simple variants\n * const buttonVariants = cva('base-class', {\n * variants: {\n * variant: {\n * primary: 'bg-blue-500 text-white',\n * secondary: 'bg-gray-500 text-white'\n * },\n * size: {\n * sm: 'px-2 py-1 text-sm',\n * md: 'px-4 py-2 text-base'\n * }\n * },\n * defaultVariants: {\n * variant: 'primary',\n * size: 'md'\n * }\n * });\n *\n * // Usage\n * buttonVariants({ variant: 'primary', size: 'sm' })\n *\n * // Compound variants\n * const badgeVariants = cva('base', {\n * variants: {\n * variant: { success: '', error: '' },\n * style: { solid: '', outline: '' }\n * },\n * compoundVariants: [\n * { variant: 'success', style: 'solid', class: 'bg-green-500' },\n * { variant: 'error', style: 'outline', class: 'border-red-500' }\n * ]\n * });\n * ```\n */\nexport const cva = <T extends Record<string, Record<string, ClassValue>>>(\n base?: ClassValue,\n config?: Parameters<typeof cvaLib<T>>[1],\n) => {\n const variantFn = cvaLib(base, config);\n\n // Wrap to ensure cn() is used for final merge\n return ((props?: Parameters<typeof variantFn>[0]) => {\n const variantClasses = variantFn(props);\n return cn(variantClasses);\n }) as typeof variantFn;\n};\n","import { memo, forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type BadgeVariant =\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\"\n | \"primary\"\n | \"secondary\";\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\nexport type BadgeStyle = \"solid\" | \"outline\";\n\nexport interface BadgeProps extends Omit<\n HTMLAttributes<HTMLSpanElement>,\n \"style\"\n> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n style?: BadgeStyle;\n children: ReactNode;\n \"aria-label\"?: string;\n}\n\n/**\n * Badge Component\n *\n * A versatile badge component for displaying status, priority, and other labels.\n * Uses tokens for consistent theming.\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\" size=\"lg\">Critical</Badge>\n * <Badge variant=\"info\" style=\"outline\">New</Badge>\n * ```\n */\n// Badge variants using CVA\nconst badgeVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getTypographyWeight(\"label\"),\n getRadiusClass(\"md\"),\n \"border\",\n ),\n {\n variants: {\n variant: {\n success: \"\",\n warning: \"\",\n error: \"\",\n info: \"\",\n neutral: \"\",\n primary: \"\",\n secondary: \"\",\n },\n size: {\n sm: cn(\n getSpacingClass(\"1.5\", \"px\"),\n getSpacingClass(\"0.5\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n lg: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n },\n style: {\n solid: \"\",\n outline: \"\",\n },\n },\n compoundVariants: [\n // Solid style variants\n {\n variant: \"success\",\n style: \"solid\",\n class: cn(\"bg-success-bg\", \"text-success-dark\", \"border-success\"),\n },\n {\n variant: \"warning\",\n style: \"solid\",\n class: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n },\n {\n variant: \"error\",\n style: \"solid\",\n class: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n },\n {\n variant: \"info\",\n style: \"solid\",\n class: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n },\n {\n variant: \"neutral\",\n style: \"solid\",\n class: cn(\"bg-surface-muted\", \"text-fg-primary\", \"border-line-default\"),\n },\n {\n variant: \"primary\",\n style: \"solid\",\n class: cn(\n \"bg-surface-brand-subtle\",\n \"text-fg-brand-emphasis\",\n \"border-line-brand\",\n ),\n },\n {\n variant: \"secondary\",\n style: \"solid\",\n // bg-pink-300: secondary solid badge — no semantic equivalent\n // (would shift 2 shades to bg-surface-secondary). Kept literal until\n // secondary brand surface palette expands beyond DEFAULT.\n class: cn(\n \"bg-pink-300\",\n \"text-fg-brand-secondary-emphasis\",\n \"border-line-secondary\",\n ),\n },\n // Outline style variants\n {\n variant: \"success\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-success\", \"text-fg-success\"),\n },\n {\n variant: \"warning\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-warning\", \"text-fg-warning\"),\n },\n {\n variant: \"error\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-error\", \"text-fg-error\"),\n },\n {\n variant: \"info\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-info\", \"text-fg-info\"),\n },\n {\n variant: \"neutral\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-line-default\", \"text-fg-secondary\"),\n },\n {\n variant: \"primary\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-line-brand\", \"text-fg-brand\"),\n },\n {\n variant: \"secondary\",\n style: \"outline\",\n class: cn(\n \"bg-transparent\",\n \"border-line-secondary\",\n \"text-fg-brand-secondary\",\n ),\n },\n ],\n defaultVariants: {\n variant: \"neutral\",\n size: \"md\",\n style: \"solid\",\n },\n },\n);\n\nconst Badge = memo(\n forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n variant = \"neutral\",\n size = \"md\",\n style = \"solid\",\n className = \"\",\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) {\n const classes = cn(badgeVariants({ variant, size, style }), className);\n\n // Best-effort accessible name resolution: explicit aria-label wins;\n // string children become the label; single-wrapped string children\n // (e.g. <Badge><span>Active</span></Badge>) are unwrapped one level.\n // Otherwise undefined and the consumer is responsible for naming\n // the badge externally.\n let accessibleLabel: string | undefined;\n if (ariaLabel) {\n accessibleLabel = ariaLabel;\n } else if (typeof children === \"string\") {\n accessibleLabel = children;\n } else if (\n typeof children === \"object\" &&\n children !== null &&\n \"props\" in children\n ) {\n const childProps = (children as { props?: { children?: unknown } }).props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n accessibleLabel = childProps.children;\n }\n }\n\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={accessibleLabel}\n className={classes}\n {...props}\n >\n {children}\n </span>\n );\n }),\n);\n\nBadge.displayName = \"Badge\";\n\nexport default Badge;\n","// src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n let slottableElement = null;\n let hasSlottable = false;\n const newChildren = [];\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n React.Children.forEach(children, (maybeSlottable) => {\n if (isSlottable(maybeSlottable)) {\n hasSlottable = true;\n const slottable = maybeSlottable;\n let child = \"child\" in slottable.props ? slottable.props.child : slottable.props.children;\n if (isLazyComponent(child) && typeof use === \"function\") {\n child = use(child._payload);\n }\n slottableElement = getSlottableElementFromSlottable(slottable, child);\n newChildren.push(slottableElement?.props?.children);\n } else {\n newChildren.push(maybeSlottable);\n }\n });\n if (slottableElement) {\n slottableElement = React.cloneElement(slottableElement, void 0, newChildren);\n } else if (\n // A `Slottable` was found but it didn't resolve to a single element (e.g.\n // it wrapped multiple elements, text, or a render-prop `child` that\n // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n // itself as the slot target — throw a descriptive error below instead.\n !hasSlottable && React.Children.count(children) === 1 && React.isValidElement(children)\n ) {\n slottableElement = children;\n }\n const slottableElementRef = slottableElement ? getElementRef(slottableElement) : void 0;\n const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n if (!slottableElement) {\n if (children || children === 0) {\n throw new Error(\n hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName)\n );\n }\n return children;\n }\n const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n if (slottableElement.type !== React.Fragment) {\n mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n }\n return React.cloneElement(slottableElement, mergedProps);\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\nvar SLOTTABLE_IDENTIFIER = Symbol.for(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = (props) => \"child\" in props ? props.children(props.child) : props.children;\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nvar getSlottableElementFromSlottable = (slottable, child) => {\n if (\"child\" in slottable.props) {\n const child2 = slottable.props.child;\n if (!React.isValidElement(child2)) return null;\n return React.cloneElement(child2, void 0, slottable.props.children(child2.props.children));\n }\n return React.isValidElement(child) ? child : null;\n};\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nvar createSlotError = (ownerName) => {\n return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n};\nvar createSlottableError = (ownerName) => {\n return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n};\nvar use = React[\" use \".trim().toString()];\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { X } from \"lucide-react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type ChipVariant = \"default\" | \"outlined\" | \"filled\";\nexport type ChipSize = \"sm\" | \"md\" | \"lg\";\n\ninterface ChipBaseProps {\n children: ReactNode;\n variant?: ChipVariant;\n size?: ChipSize;\n selected?: boolean;\n disabled?: boolean;\n className?: string;\n \"aria-label\"?: string;\n tabIndex?: number;\n}\n\ninterface ChipStandardProps extends ChipBaseProps {\n asChild?: false;\n onRemove?: () => void;\n onClick?: () => void;\n /**\n * Optional count sub-badge rendered at the end of the chip (before the\n * remove ✕, if any) — e.g. `Casa 12`, `Tramitando 340` in a filter bar.\n *\n * The sub-badge inverts with the chip surface so it always contrasts:\n * a brand pill on neutral chips, a light pill on brand chips\n * (`selected` / `variant=\"filled\"`). The number is folded into the\n * interactive chip's accessible name (`\"Casa, 12\"`) so AT users hear\n * it; pass an explicit `aria-label` to override that phrasing.\n *\n * Forbidden in the `asChild` form (the consumer composes the node).\n * `0` is a legitimate value and renders `0`; omit the prop for \"no\n * count\".\n */\n count?: number;\n}\n\n/**\n * `asChild` collapses the chip into a single node provided by the\n * consumer (typically `<Link>`). The non-interactive frame + inner\n * label-button + X structure is intentionally NOT rendered — the child\n * IS the chip. As a consequence:\n *\n * - `onClick` and `onRemove` are forbidden at the type level. The\n * child's own click handler (and `href`) is what fires; consumers\n * who need a removable selected filter use the standard\n * (non-asChild) form.\n * - `selected` still applies the visual classes via `chipVariants`,\n * but NO `aria-pressed` is emitted. Toggle-button semantics on\n * `<a>` would lie — a link isn't a two-state control. Consumers\n * that need the selected route surfaced to AT users should pass\n * `aria-current=\"page\"` (or similar) directly on the child Link.\n *\n * @see `.claude/rules/components.md` and the inline a11y notes below.\n */\ninterface ChipAsChildProps extends ChipBaseProps {\n asChild: true;\n /**\n * `onClick` is forbidden when `asChild` is true — the child element\n * owns interaction. Pass the handler (or `href`) on the child.\n */\n onClick?: never;\n /**\n * `onRemove` is forbidden when `asChild` is true — the collapsed\n * node has no slot for an X button. Use the standard (non-asChild)\n * form when removal is required.\n */\n onRemove?: never;\n /**\n * `count` is forbidden when `asChild` is true — the collapsed node is\n * a single consumer element with no slot for the sub-badge. Render the\n * count inside the child yourself, or use the standard form.\n */\n count?: never;\n}\n\nexport type ChipProps = ChipStandardProps | ChipAsChildProps;\n\n/**\n * Chip Component\n *\n * A chip/tag for labels, filters, or selected items.\n *\n * Standard form: an outer `<div>` frame (never interactive) with an\n * inner `<button>` label (when `onClick`) and a sibling X `<button>`\n * (when `onRemove`). This shape closes two axe violations the older\n * implementation hit — `aria-required-parent` (role=option without a\n * listbox) and `nested-interactive` (clickable outer + clickable X).\n *\n * `asChild` form: a single node provided by the consumer (e.g.\n * `<Link>`), with the chip's classes projected via Radix `Slot`. See\n * the `ChipAsChildProps` JSDoc for the a11y responsibility transfer\n * — the consumer's child carries `href`, focus behavior, and any\n * route-state ARIA (`aria-current`). Forbidden in this form:\n * `onClick`, `onRemove` (TS-level).\n *\n * @example\n * ```tsx\n * <Chip>Tag</Chip>\n * <Chip onRemove={() => console.log('removed')}>Removable</Chip>\n *\n * // Navigation chip — server-rendered, zero-JS-friendly.\n * <Chip asChild variant=\"filled\">\n * <Link href=\"/filtros/ativo\" prefetch aria-current=\"page\">Active</Link>\n * </Chip>\n * ```\n */\n// Chip variants using CVA\nconst chipVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"font-medium\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"gap\"),\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"bg-surface-muted\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n outlined: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n filled: cn(\n \"bg-surface-brand-strong\",\n \"text-fg-inverse\",\n \"border\",\n \"border-transparent\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n lg: cn(\n getSpacingClass(\"md\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n },\n selected: {\n true: cn(\n \"bg-surface-brand-strong\",\n \"text-fg-inverse\",\n \"border\",\n \"border-line-brand\",\n ),\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n selected: true,\n variant: \"default\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"outlined\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"filled\",\n class: \"\", // Override variant when selected\n },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n selected: false,\n disabled: false,\n },\n },\n);\n\nconst Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(props, ref) {\n const {\n children,\n variant = \"default\",\n size = \"md\",\n selected = false,\n disabled = false,\n className = \"\",\n \"aria-label\": ariaLabel,\n tabIndex,\n asChild = false,\n } = props;\n\n // Generate accessible label\n const getAccessibleLabel = (): string | undefined => {\n if (ariaLabel) return ariaLabel;\n if (typeof children === \"string\") return children;\n // For non-string children, try to extract text content\n if (\n typeof children === \"object\" &&\n children !== null &&\n \"props\" in children\n ) {\n const childProps = (children as { props?: { children?: unknown } }).props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n return childProps.children;\n }\n }\n return undefined;\n };\n\n const accessibleLabel = getAccessibleLabel();\n\n // asChild path: collapse the entire chip structure (frame + label\n // button + X) into the single consumer-provided node. The frame's\n // visual classes are projected onto the child via Slot.\n //\n // A11Y RESPONSIBILITY TRANSFER. The child element owns:\n // - focus (its native focus ring, or its own focus utilities)\n // - activation (its own click handler / href for navigation)\n // - route-state semantics: `aria-current=\"page\"` on a selected\n // Link is the right tool. `aria-pressed` is intentionally NOT\n // emitted here — a link is not a toggle button.\n // - disabled semantics: `aria-disabled` is set when `disabled` is\n // true, but it does NOT block navigation. Consumers that must\n // truly disable navigation should also gate `href` upstream.\n //\n // TS forbids `onClick` / `onRemove` in this form (see ChipAsChildProps).\n if (asChild) {\n return (\n <Slot\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n className,\n )}\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n tabIndex={tabIndex}\n >\n {children}\n </Slot>\n );\n }\n\n // Standard form below. Narrow `props` so the union picks up\n // onClick/onRemove/count (forbidden when asChild=true at TS level).\n const { onRemove, onClick, count } = props as ChipStandardProps;\n\n // Architecture:\n // The label is a real `<button>` whenever the chip is meant to be\n // activated (`onClick` provided). The X is a sibling `<button>` when\n // `onRemove` is provided. The outer `<div>` is NEVER interactive —\n // no `role`, no `tabIndex`, no event handlers. This unifies what\n // used to be three structural variants:\n // - `onClick` only → outer `role=\"button\"` [old]\n // - `onClick` + `onRemove` (no selected) → label-button [PR68]\n // - `selected` → outer `role=\"option\"` [old, axe-flagged]\n // into one consistent shape: label is the actor, outer is the chip\n // chrome (visual frame).\n //\n // Why this matters for a11y:\n // - `role=\"option\"` outside `role=\"listbox\"` violates `aria-required-\n // parent`. The old `selected` path failed axe in every standalone\n // chip. Moving the action to a native `<button>` with\n // `aria-pressed={selected}` (toggle button pattern) communicates\n // state correctly without requiring a listbox parent.\n // - The interactive outer + inner X button produced nested-interactive\n // whenever the consumer combined `selected` (or `onClick`) with\n // `onRemove`. Outer non-interactive + sibling buttons fixes both\n // cases at once.\n //\n // `selected` with no `onClick` is decorative only — the chip CANNOT\n // toggle, so it gets no `aria-pressed` (which would lie) and no role.\n // The visual `selected` styling (chipVariants.selected) applies, but\n // AT users read it as static text. Consumers who want the state\n // communicated must also pass `onClick` to make it a real toggle.\n const useLabelButton = onClick !== undefined;\n const interactive = useLabelButton && !disabled;\n\n // Keyboard handler for the label-button. Native `<button>` activates on\n // Enter/Space in real browsers, but JSDOM does NOT simulate Enter → click,\n // so this preserves the previous test-friendly behavior AND adds explicit\n // `preventDefault` (the original outer-as-button needed it; on a native\n // button this is mostly belt-and-suspenders but harmless).\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n };\n\n // Count sub-badge (issue #222). Rendered as a sibling of the label so\n // the outer flex's `items-center` + `gap` handle alignment/spacing.\n // The pill inverts with the chip surface so it always contrasts:\n // - brand-backed chip (selected || filled) → light pill\n // (bg-surface-base + text-fg-brand-emphasis)\n // - neutral chip (default/outlined) → brand pill\n // (bg-surface-brand-strong + text-fg-inverse, the filled-chip combo)\n // Both pairs are AA-proven elsewhere in the system.\n const hasCount = count !== undefined;\n const chipIsBrandFilled = selected || variant === \"filled\";\n const countBadge = hasCount ? (\n <span\n // Interactive chips fold the count into the label-button's\n // aria-label below, so the visible badge is hidden from AT to\n // avoid a double announce. Non-interactive chips have no\n // overriding name — the badge stays readable as inline content.\n aria-hidden={useLabelButton || undefined}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n \"tabular-nums\",\n \"leading-none\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"0.5\", \"py\"),\n getTypographySize(\"caption\"),\n getTypographyWeight(\"label\"),\n chipIsBrandFilled\n ? cn(\"bg-surface-base\", \"text-fg-brand-emphasis\")\n : cn(\"bg-surface-brand-strong\", \"text-fg-inverse\"),\n )}\n >\n {count}\n </span>\n ) : null;\n\n // When a count is present, fold it into the interactive chip's\n // accessible name (\"Casa, 12\") so AT users hear it. An explicit\n // consumer aria-label always wins (they own the phrasing).\n const labelWithCount =\n hasCount && accessibleLabel !== undefined\n ? `${accessibleLabel}, ${count}`\n : accessibleLabel;\n\n return (\n <div\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n onRemove && getSpacingClass(\"xs\", \"pr\"),\n className,\n )}\n aria-disabled={disabled}\n >\n {useLabelButton ? (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-pressed={selected ? true : undefined}\n aria-label={ariaLabel || labelWithCount}\n tabIndex={\n tabIndex !== undefined ? tabIndex : interactive ? 0 : undefined\n }\n className={cn(\n \"flex-1\",\n \"bg-transparent\",\n \"border-0\",\n getSpacingClass(\"none\", \"p\"),\n \"text-inherit\",\n \"text-left\",\n \"cursor-pointer\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"full\"),\n )}\n >\n {children}\n </button>\n ) : (\n <span>{children}</span>\n )}\n {countBadge}\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className={cn(\n getSpacingClass(\"xs\", \"ml\"),\n \"hover:bg-tint-hover\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"p\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-1\",\n )}\n aria-label={`Remove ${accessibleLabel || \"chip\"}`}\n >\n <X className=\"h-3 w-3\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n});\n\nChip.displayName = \"Chip\";\n\nexport default Chip;\n","import type { HTMLAttributes } from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface ErrorMessageProps extends HTMLAttributes<HTMLDivElement> {\n message: string;\n id?: string;\n}\n\n/**\n * ErrorMessage Component\n *\n * A component for displaying validation error messages.\n *\n * @example\n * ```tsx\n * <ErrorMessage message=\"This field is required\" id=\"email-error\" />\n * ```\n */\nexport default function ErrorMessage({\n message,\n id,\n className = \"\",\n ...props\n}: ErrorMessageProps) {\n const baseClasses = [\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-error\",\n \"flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"gap\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <div role=\"alert\" id={id} className={classes} aria-live=\"polite\" {...props}>\n <AlertCircle className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n <span>{message}</span>\n </div>\n );\n}\n","import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface InfoProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"info\" | \"warning\" | \"error\";\n}\n\nexport default function Info({\n variant = \"info\",\n className,\n ...props\n}: InfoProps) {\n const variantClasses = {\n warning: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n error: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n info: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n };\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"border\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getRadiusClass(\"lg\"),\n variantClasses[variant],\n className,\n )}\n {...props}\n />\n );\n}\n","import type { LabelHTMLAttributes } from \"react\";\nimport { forwardRef, memo } from \"react\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends LabelHTMLAttributes<HTMLLabelElement> {\n variant?: \"default\" | \"required\" | \"optional\";\n children: React.ReactNode;\n}\n\nconst labelBaseClasses = cn(\n \"block\",\n getTypographySize(\"label\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n);\n\nconst labelVariantClasses: Record<NonNullable<Props[\"variant\"]>, string> = {\n default: \"\",\n required: cn(\n \"after:content-['*']\",\n `after:${getSpacingClass(\"0.5\", \"ml\")}`,\n \"after:text-fg-error\",\n ),\n optional: cn(\n \"after:content-['(optional)']\",\n `after:${getSpacingClass(\"xs\", \"ml\")}`,\n \"after:text-fg-tertiary\",\n \"after:font-normal\",\n ),\n};\n\n/**\n * Label Component\n *\n * A styled label component for form inputs.\n *\n * @example\n * ```tsx\n * <Label htmlFor=\"email\" variant=\"required\">\n * Email Address\n * </Label>\n * ```\n */\nconst Label = memo(\n forwardRef<HTMLLabelElement, Props>(function Label(\n { variant = \"default\", className = \"\", children, ...props },\n ref,\n ) {\n const classes = cn(\n labelBaseClasses,\n labelVariantClasses[variant],\n className,\n );\n\n return (\n <label ref={ref} className={classes} {...props}>\n {children}\n </label>\n );\n }),\n);\n\nLabel.displayName = \"Label\";\n\nexport default Label;\n","/**\n * Shadow Tokens\n *\n * Centralized shadow system for consistent elevation and depth.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type ShadowSize = \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"inner\";\n\nexport interface ShadowToken {\n value: string;\n tailwind: string;\n description: string;\n}\n\n/**\n * Shadow Token Factory\n * Creates shadow tokens with consistent values\n */\nexport class ShadowTokenFactory {\n /**\n * Create a shadow token\n */\n static create(size: ShadowSize): ShadowToken {\n const shadowMap: Record<\n ShadowSize,\n { value: string; tailwind: string; description: string }\n > = {\n none: {\n value: \"none\",\n tailwind: \"shadow-none\",\n description: \"No shadow\",\n },\n sm: {\n value: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n tailwind: \"shadow-sm\",\n description: \"Small shadow for subtle elevation\",\n },\n md: {\n value: \"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-md\",\n description: \"Medium shadow for cards and elevated elements\",\n },\n lg: {\n value:\n \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-lg\",\n description: \"Large shadow for modals and dropdowns\",\n },\n xl: {\n value:\n \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-xl\",\n description: \"Extra large shadow for prominent modals\",\n },\n \"2xl\": {\n value:\n \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-2xl\",\n description: \"2X large shadow for maximum elevation\",\n },\n inner: {\n value: \"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)\",\n tailwind: \"shadow-inner\",\n description: \"Inner shadow for inset elements\",\n },\n };\n\n return shadowMap[size];\n }\n}\n\n/**\n * Pre-defined shadow tokens\n */\nexport const SHADOW_TOKENS = {\n none: ShadowTokenFactory.create(\"none\"),\n sm: ShadowTokenFactory.create(\"sm\"),\n md: ShadowTokenFactory.create(\"md\"),\n lg: ShadowTokenFactory.create(\"lg\"),\n xl: ShadowTokenFactory.create(\"xl\"),\n \"2xl\": ShadowTokenFactory.create(\"2xl\"),\n inner: ShadowTokenFactory.create(\"inner\"),\n} as const;\n\n/**\n * Helper function to get shadow token\n */\nexport function getShadow(size: keyof typeof SHADOW_TOKENS): ShadowToken {\n return SHADOW_TOKENS[size];\n}\n\n/**\n * Helper function to get shadow as Tailwind class\n */\nexport function getShadowClass(size: keyof typeof SHADOW_TOKENS): string {\n return SHADOW_TOKENS[size].tailwind;\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef } from \"react\";\nimport { getRadiusClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\nimport \"./Progress.css\";\n\nexport type ProgressVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n value?: number; // 0-100, undefined for indeterminate\n max?: number; // Default 100\n variant?: ProgressVariant;\n size?: ProgressSize;\n showLabel?: boolean;\n label?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Progress Component\n *\n * A progress bar component for displaying progress or loading states.\n * Supports both determinate (with value) and indeterminate (without value) modes.\n * Fully accessible with ARIA attributes.\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <Progress value={75} variant=\"primary\" />\n *\n * // Indeterminate progress\n * <Progress variant=\"primary\" />\n *\n * // With label\n * <Progress value={50} showLabel label=\"Uploading...\" />\n * ```\n */\n// Progress variants using CVA\nconst progressTrackVariants = cva(\"w-full\", {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n variant: {\n primary: \"bg-surface-muted\",\n secondary: \"bg-surface-muted\",\n success: \"bg-success-bg-emphasis\",\n error: \"bg-error-bg-emphasis\",\n warning: \"bg-warning-bg-emphasis\",\n info: \"bg-info-bg-emphasis\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst progressBarVariants = cva(\"transition-all\", {\n variants: {\n variant: {\n primary: \"bg-surface-brand\",\n secondary: \"bg-surface-secondary\",\n success: \"bg-success\",\n error: \"bg-error\",\n warning: \"bg-warning\",\n info: \"bg-info\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n});\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n className = \"\",\n ...props\n },\n ref,\n) {\n const isIndeterminate = value === undefined;\n const percentage = isIndeterminate\n ? undefined\n : Math.min(Math.max((value / max) * 100, 0), 100);\n\n const defaultAriaLabel =\n ariaLabel ||\n (isIndeterminate\n ? \"Loading in progress\"\n : `Progress: ${percentage?.toFixed(0)}%`);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {showLabel && (label || !isIndeterminate) && (\n <div\n className={cn(\n \"flex\",\n \"items-center\",\n \"justify-between\",\n getSpacingClass(\"xs\", \"mb\"),\n )}\n >\n {label && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n )}\n >\n {label}\n </span>\n )}\n {!isIndeterminate && percentage !== undefined && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n )}\n >\n {percentage.toFixed(0)}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : max}\n aria-valuenow={isIndeterminate ? undefined : value}\n aria-label={defaultAriaLabel}\n aria-busy={isIndeterminate}\n className={cn(\n \"relative\",\n \"w-full\",\n \"overflow-hidden\",\n progressTrackVariants({ size, variant }),\n getRadiusClass(\"full\"),\n )}\n >\n {isIndeterminate ? (\n <div\n className={cn(\n \"absolute\",\n \"top-0\",\n \"left-0\",\n \"bottom-0\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"motion-reduce:animate-none\",\n )}\n style={{\n width: \"30%\",\n animation: \"progress-indeterminate 1.5s ease-in-out infinite\",\n }}\n />\n ) : (\n <div\n className={cn(\n \"h-full\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"transition-all\",\n \"duration-300\",\n \"ease-out\",\n )}\n style={{\n width: `${percentage}%`,\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n\nexport default Progress;\n","import { memo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type SeparatorOrientation = \"horizontal\" | \"vertical\";\nexport type SeparatorVariant = \"solid\" | \"dashed\" | \"dotted\";\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLHRElement> {\n orientation?: SeparatorOrientation;\n variant?: SeparatorVariant;\n}\n\n/**\n * Separator Component\n *\n * A visual separator component for dividing content.\n * Optimized with React.memo to prevent unnecessary re-renders.\n *\n * @example\n * ```tsx\n * <Separator />\n *\n * <Separator orientation=\"vertical\" variant=\"dashed\" />\n * ```\n */\nconst separatorOrientationClasses = {\n horizontal: \"w-full border-t\",\n vertical: \"h-full border-l self-stretch\",\n} as const;\n\nconst separatorVariantClasses = {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n} as const;\n\nconst Separator = memo(function Separator({\n orientation = \"horizontal\",\n variant = \"solid\",\n className = \"\",\n ...props\n}: SeparatorProps) {\n const classes = cn(\n \"border-0\",\n \"border-line-default\",\n separatorOrientationClasses[orientation],\n separatorVariantClasses[variant],\n className,\n );\n\n if (orientation === \"vertical\") {\n return (\n <div\n className={classes}\n role=\"separator\"\n aria-orientation=\"vertical\"\n {...(props as HTMLAttributes<HTMLDivElement>)}\n />\n );\n }\n\n return (\n <hr\n className={classes}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...props}\n />\n );\n});\n\nSeparator.displayName = \"Separator\";\n\nexport default Separator;\n","import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"card\" | \"list\" | \"circle\";\n width?: string;\n height?: string;\n lines?: number;\n}\n\n/**\n * Skeleton Component\n *\n * A skeleton loader component for displaying loading states.\n *\n * @example\n * ```tsx\n * <Skeleton variant=\"card\" />\n * <Skeleton variant=\"text\" lines={3} />\n * ```\n */\nexport default function Skeleton({\n variant = \"text\",\n width,\n height,\n lines = 1,\n className = \"\",\n \"aria-label\": ariaLabel,\n ...props\n}: SkeletonProps) {\n const baseClasses = [\n \"motion-safe:animate-pulse\",\n \"bg-surface-muted\",\n getRadiusClass(\"sm\"),\n ];\n\n const variantClasses: Record<\n NonNullable<SkeletonProps[\"variant\"]>,\n string\n > = {\n text: \"h-4\",\n card: \"h-32\",\n list: \"h-12\",\n circle: getRadiusClass(\"full\"),\n };\n\n const classes = cn(...baseClasses, variantClasses[variant], className);\n\n const style: React.CSSProperties = {};\n if (width) style.width = width;\n if (height) style.height = height;\n\n const defaultAriaLabel = ariaLabel || `Loading ${variant} content`;\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n className={getSpacingClass(\"sm\", \"space-y\")}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={classes}\n style={index === lines - 1 ? { width: \"75%\" } : style}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={classes}\n style={style}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { memo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\nexport type SpinnerVariant = \"primary\" | \"secondary\" | \"neutral\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n size?: SpinnerSize;\n variant?: SpinnerVariant;\n label?: string;\n}\n\n/**\n * Spinner Component\n *\n * A loading spinner component for indicating loading states.\n * Uses Strategy Pattern for different size/variant combinations.\n *\n * @example\n * ```tsx\n * <Spinner size=\"md\" variant=\"primary\" label=\"Loading...\" />\n * ```\n */\n// Spinner variants using CVA\nconst spinnerVariants = cva(\"motion-safe:animate-spin\", {\n variants: {\n size: {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-8 w-8\",\n },\n variant: {\n primary: \"text-fg-brand\",\n secondary: \"text-fg-brand-secondary\",\n neutral: \"text-fg-secondary\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst Spinner = memo(function Spinner({\n size = \"md\",\n variant = \"primary\",\n label,\n className = \"\",\n ...props\n}: SpinnerProps) {\n return (\n <div\n className={cn(\"inline-flex\", \"items-center\", className)}\n role=\"status\"\n aria-label={label || \"Loading\"}\n aria-live=\"polite\"\n {...props}\n >\n <Loader2\n className={cn(spinnerVariants({ size, variant }))}\n aria-hidden=\"true\"\n />\n {label && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"ml\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n \"sr-only\",\n )}\n >\n {label}\n </span>\n )}\n </div>\n );\n});\n\nSpinner.displayName = \"Spinner\";\n\nexport default Spinner;\n","import type {\n ComponentPropsWithoutRef,\n ElementType,\n HTMLAttributes,\n JSX,\n} from \"react\";\nimport { forwardRef } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ntype TextColorRole =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\";\ntype TextColorShade = \"light\" | \"DEFAULT\" | \"dark\" | \"contrast\";\n\n// Lookup table: literal Tailwind classes so v4 can detect them at build.\n// Brand/feedback DEFAULT cells use semantic tokens; light/dark cells stay\n// primitive (no semantic equivalent for shade variants). Neutral cells\n// use the Phase 7 semantic suggestions (text-fg-{primary,secondary,...}).\nconst TEXT_COLOR_CLASSES: Record<\n TextColorRole,\n Record<TextColorShade, string>\n> = {\n primary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-indigo-400\",\n DEFAULT: \"text-fg-brand\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-indigo-600\",\n contrast: \"text-fg-inverse\",\n },\n secondary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-pink-300\",\n DEFAULT: \"text-fg-brand-secondary\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-pink-600\",\n contrast: \"text-fg-inverse\",\n },\n success: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-green-300\",\n DEFAULT: \"text-fg-success\",\n dark: \"text-success-dark\",\n contrast: \"text-fg-inverse\",\n },\n warning: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-yellow-300\",\n DEFAULT: \"text-fg-warning\",\n dark: \"text-warning-dark\",\n contrast: \"text-fg-inverse\",\n },\n error: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-red-300\",\n DEFAULT: \"text-fg-error\",\n dark: \"text-error-dark\",\n contrast: \"text-fg-inverse\",\n },\n info: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-blue-300\",\n DEFAULT: \"text-fg-info\",\n dark: \"text-info-dark\",\n contrast: \"text-fg-inverse\",\n },\n neutral: {\n light: \"text-fg-tertiary\",\n DEFAULT: \"text-fg-secondary\",\n dark: \"text-fg-primary\",\n contrast: \"text-fg-inverse\",\n },\n};\n\nexport interface TextProps<\n T extends ElementType,\n> extends HTMLAttributes<JSX.IntrinsicElements> {\n variant?:\n | \"heading\"\n | \"list\"\n | \"paragraph\"\n | \"body\"\n | \"bodySmall\"\n | \"bodyLarge\"\n | \"caption\"\n | \"label\";\n as?: T;\n bold?: boolean;\n italic?: boolean;\n colorRole?: TextColorRole;\n colorShade?: TextColorShade;\n}\n\ntype ReturnProps<P extends ElementType> = TextProps<P> &\n Omit<ComponentPropsWithoutRef<P>, keyof TextProps<P>>;\n\nfunction TextComponent<T extends ElementType = \"p\">(\n {\n variant = \"paragraph\",\n bold,\n italic,\n className,\n as,\n colorRole = \"neutral\",\n colorShade = \"dark\",\n ...rest\n }: ReturnProps<T>,\n ref: React.Ref<unknown>,\n) {\n const classNames: string[] = [];\n let Tag: ElementType;\n\n if (as) {\n Tag = as;\n } else {\n switch (variant) {\n case \"heading\":\n Tag = \"h2\";\n break;\n case \"list\":\n Tag = \"li\";\n break;\n case \"paragraph\":\n default:\n Tag = \"p\";\n break;\n }\n }\n\n // Apply typography tokens based on variant\n if (variant === \"heading\") {\n classNames.push(getTypographyClasses(\"h2\"));\n } else if (variant === \"body\" || variant === \"paragraph\") {\n classNames.push(getTypographyClasses(\"body\"));\n } else if (variant === \"bodySmall\") {\n classNames.push(getTypographyClasses(\"bodySmall\"));\n } else if (variant === \"bodyLarge\") {\n classNames.push(getTypographyClasses(\"bodyLarge\"));\n } else if (variant === \"caption\") {\n classNames.push(getTypographyClasses(\"caption\"));\n } else if (variant === \"label\") {\n classNames.push(getTypographyClasses(\"label\"));\n } else {\n // Default to body for list and other variants\n classNames.push(getTypographyClasses(\"body\"));\n }\n\n // Override font weight if bold is specified\n if (bold) {\n classNames.push(\"font-bold\");\n }\n\n if (italic) {\n classNames.push(\"italic\");\n }\n\n // Apply color via lookup table. Tailwind v4 needs literal class names\n // at build time, so role/shade resolve to a fixed entry in\n // TEXT_COLOR_CLASSES rather than constructing `text-${...}` dynamically.\n classNames.push(TEXT_COLOR_CLASSES[colorRole][colorShade]);\n\n return <Tag ref={ref} className={cn(...classNames, className)} {...rest} />;\n}\n\n// Use forwardRef with proper typing for polymorphic component\nconst Text = forwardRef(TextComponent) as <T extends ElementType = \"p\">(\n props: ReturnProps<T> & { ref?: React.Ref<HTMLElement> },\n) => JSX.Element;\n\nexport default Text;\n","import React from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Maximum width of the container\n * @default 'lg'\n */\n maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n /**\n * Horizontal padding\n * @default 'base'\n */\n paddingX?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\";\n /**\n * Vertical padding\n * @default 'base'\n */\n paddingY?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\";\n /**\n * Center the container content\n * @default true\n */\n center?: boolean;\n}\n\nconst maxWidthClasses = {\n sm: \"max-w-screen-sm\",\n md: \"max-w-screen-md\",\n lg: \"max-w-screen-lg\",\n xl: \"max-w-screen-xl\",\n \"2xl\": \"max-w-screen-2xl\",\n full: \"max-w-full\",\n};\n\n/**\n * Container component for constraining content width and providing consistent padding\n *\n * @example\n * ```tsx\n * <Container maxWidth=\"lg\" paddingX=\"base\">\n * <h1>Content</h1>\n * </Container>\n * ```\n */\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n (\n {\n className,\n maxWidth = \"lg\",\n paddingX = \"base\",\n paddingY = \"base\",\n center = true,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full\",\n maxWidthClasses[maxWidth],\n getSpacingClass(paddingX, \"px\"),\n getSpacingClass(paddingY, \"py\"),\n center && \"mx-auto\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nContainer.displayName = \"Container\";\n","import React from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Spacing between children\n * @default 'base'\n */\n spacing?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\" | \"2xl\";\n /**\n * Alignment of children\n * @default 'stretch'\n */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n /**\n * Justification of children\n * @default 'start'\n */\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n /**\n * Direction of stack\n * @default 'column'\n */\n direction?: \"row\" | \"column\";\n}\n\n/**\n * Stack component for vertical or horizontal layout with consistent spacing\n *\n * @example\n * ```tsx\n * <Stack spacing=\"md\" align=\"center\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * </Stack>\n * ```\n */\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\n (\n {\n className,\n spacing = \"base\",\n align = \"stretch\",\n justify = \"start\",\n direction = \"column\",\n children,\n ...props\n },\n ref,\n ) => {\n const spacingClass =\n direction === \"column\"\n ? getSpacingClass(spacing, \"gap-y\")\n : getSpacingClass(spacing, \"gap-x\");\n\n const alignClasses = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex\",\n direction === \"column\" ? \"flex-col\" : \"flex-row\",\n spacingClass,\n alignClasses[align],\n justifyClasses[justify],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nStack.displayName = \"Stack\";\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface Props extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * A breadcrumb navigation component for hierarchical navigation.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: \"Home\", href: \"/\" },\n * { label: \"Epics\", href: \"/epics\" },\n * { label: \"Epic Details\" }\n * ]}\n * />\n * ```\n */\nexport default function Breadcrumb({\n items,\n separator = \"/\",\n className = \"\",\n ...props\n}: Props) {\n const baseClasses = [\n \"flex\",\n \"items-center\",\n getSpacingClass(\"sm\", \"space-x\"),\n getTypographySize(\"bodySmall\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <nav aria-label=\"Breadcrumb\" className={classes} {...props}>\n <ol\n className={cn(\"flex\", \"items-center\", getSpacingClass(\"sm\", \"space-x\"))}\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"flex items-center\">\n {index > 0 && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"mx\"),\n \"text-fg-tertiary\",\n )}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n {isLast ? (\n <span\n className={cn(\n \"text-fg-primary\",\n getTypographyWeight(\"label\"),\n )}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n ) : item.href ? (\n <a\n href={item.href}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"pt\"),\n \"border-b-2\",\n \"border-transparent\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n \"text-fg-secondary\",\n \"hover:border-line-emphasis\",\n \"hover:text-fg-primary\",\n )}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-fg-secondary\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function CardHeader({ children, className, ...props }: CardHeaderProps) {\n return (\n <div\n className={cn(\n \"grid items-start\",\n getSpacingClass(\"1.5\", \"gap\"),\n getSpacingClass(\"base\", \"mb\"),\n \"[&:has([data-card-actions])]:grid-cols-[1fr_auto]\",\n \"[&:has([data-card-actions])>[data-card-actions]]:row-span-full\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport default CardHeader;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type CardTitleAs = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n\nexport interface CardTitleProps extends HTMLAttributes<HTMLHeadingElement> {\n children: ReactNode;\n /**\n * Optional icon rendered before the title text.\n */\n icon?: ReactNode;\n /**\n * Optional badge rendered after the title text.\n */\n badge?: ReactNode;\n /**\n * Heading level. Default `h2` — the typical depth for a card title\n * inside a page that already has an `h1`. Use `h3` (or deeper) when\n * the card sits inside a nested section.\n * @default 'h2'\n */\n as?: CardTitleAs;\n}\n\nexport function CardTitle({\n children,\n icon,\n badge,\n as: As = \"h2\",\n className,\n ...props\n}: CardTitleProps) {\n return (\n <As\n className={cn(\n \"text-base font-semibold text-fg-primary\",\n \"flex items-center\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n {...props}\n >\n {icon ? <span className=\"shrink-0 inline-flex\">{icon}</span> : null}\n <span>{children}</span>\n {badge ? <span className=\"inline-flex\">{badge}</span> : null}\n </As>\n );\n}\n\nexport default CardTitle;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport interface CardSubtitleProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n}\n\nexport function CardSubtitle({\n children,\n className,\n ...props\n}: CardSubtitleProps) {\n return (\n <p className={cn(\"text-sm text-fg-secondary\", className)} {...props}>\n {children}\n </p>\n );\n}\n\nexport default CardSubtitle;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface CardActionsProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * CardActions — wrapper that hosts consumer-supplied action buttons\n * within a `Card.Header`.\n *\n * The `data-card-actions` attribute is the structural marker `CardHeader`\n * uses (via Tailwind v4 `:has()` selectors) to switch its grid layout\n * from a single column to `[1fr auto]` when actions are present, so\n * Title/Subtitle stack in column 1 and the action row spans both rows\n * in column 2. Consumers should not override this attribute.\n *\n * This component is presentational: it emits no handlers on the DOM\n * itself. The action elements (typically `<Button>`) are consumer-supplied\n * and React's RSC boundary keeps them as client references — the\n * wrapper stays server-safe.\n */\nexport function CardActions({\n children,\n className,\n ...props\n}: CardActionsProps) {\n return (\n <div\n data-card-actions=\"\"\n className={cn(\n \"flex items-center self-start\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport default CardActions;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport interface CardBodyProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function CardBody({ children, className, ...props }: CardBodyProps) {\n return (\n <div className={cn(className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport default CardBody;\n","import { memo, type FC, type HTMLAttributes } from \"react\";\nimport { cn, cva } from \"../../utils\";\nimport { getRadiusClass, getShadowClass, getSpacingClass } from \"../../tokens\";\nimport { CardHeader } from \"./CardHeader\";\nimport { CardTitle } from \"./CardTitle\";\nimport { CardSubtitle } from \"./CardSubtitle\";\nimport { CardActions } from \"./CardActions\";\nimport { CardBody } from \"./CardBody\";\n\n// Ambient declaration so the dev-only warn typechecks without pulling\n// @types/node into the app tsconfig. At runtime the consumer's bundler\n// replaces `process.env.NODE_ENV` with a literal; the `typeof process`\n// guard keeps the branch safe in browser/edge runtimes where `process`\n// doesn't exist. Mirrors the precedent in Button.tsx.\ndeclare const process: { env: { NODE_ENV?: string } };\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"hover\" | \"selected\";\n padding?: \"none\" | \"small\" | \"medium\" | \"large\";\n onClick?: () => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n /**\n * Render the root as a semantic `<section>` instead of `<div>`.\n * When `true`, the Card becomes a landmark — a screen-reader-visible\n * region in the document outline — so it MUST carry an accessible\n * name (either `aria-labelledby` pointing to a `Card.Title` `id` or\n * `aria-label`). A dev-only warning is emitted when this contract\n * isn't met; an anonymous landmark hurts navigation by announcing\n * \"region\" without a name.\n * @default false\n */\n asSection?: boolean;\n}\n\n/**\n * Card — versatile container.\n *\n * Supports the compound pattern via dot-notation:\n *\n * ```tsx\n * <Card asSection aria-labelledby=\"parlamentares-title\">\n * <Card.Header>\n * <Card.Title id=\"parlamentares-title\" icon={<Users />} badge={<Badge>Beta</Badge>}>\n * Parlamentares\n * </Card.Title>\n * <Card.Subtitle>Câmara e Senado</Card.Subtitle>\n * <Card.Actions>\n * <Button variant=\"ghost\">Editar</Button>\n * </Card.Actions>\n * </Card.Header>\n * <Card.Body>{children}</Card.Body>\n * </Card>\n * ```\n *\n * Backward compat: the flat form (`<Card>{children}</Card>`) and the\n * interactive form (`<Card onClick={...}>`) are unchanged.\n *\n * Server/client boundary: every subcomponent (Card, Card.Header,\n * Card.Title, Card.Subtitle, Card.Actions, Card.Body) is presentational\n * and ships in `./server`. Interactive children (Button with onClick,\n * Link, etc.) supplied via `<Card.Actions>` cross the RSC boundary\n * naturally — the wrapper stays server-safe.\n */\nfunction CardComponent({\n variant = \"default\",\n padding = \"medium\",\n className = \"\",\n onClick,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n asSection = false,\n children,\n ...props\n}: CardProps) {\n if (\n typeof process !== \"undefined\" &&\n process.env.NODE_ENV !== \"production\" &&\n asSection &&\n !ariaLabel &&\n !ariaLabelledBy\n ) {\n console.warn(\n \"[Card] `asSection={true}` requires an accessible name. Pass `aria-labelledby` pointing to your Card.Title `id`, or `aria-label`. A <section> without a name is an anonymous landmark that hurts screen-reader navigation.\",\n );\n }\n\n const cardVariants = cva(\n cn(\n \"bg-surface-base\",\n getRadiusClass(\"lg\"),\n \"border\",\n \"border-line-default\",\n getShadowClass(\"sm\"),\n ),\n {\n variants: {\n variant: {\n default: \"\",\n hover: cn(\n `hover:${getShadowClass(\"md\")}`,\n \"transition-shadow\",\n \"cursor-pointer\",\n ),\n selected: cn(\"border-line-brand\", getShadowClass(\"md\")),\n },\n padding: {\n none: \"\",\n small: getSpacingClass(\"xs\", \"p\"),\n medium: getSpacingClass(\"base\", \"p\"),\n large: getSpacingClass(\"lg\", \"p\"),\n },\n },\n defaultVariants: {\n variant: \"default\",\n padding: \"medium\",\n },\n },\n );\n\n // ARIA interactivity is driven by `onClick` ONLY. `variant=\"hover\"` is\n // a visual style (hover shadow + cursor hint via cardVariants) — not a\n // declaration that the card is clickable. The previous coupling made\n // any `variant=\"hover\"` Card a `role=\"button\" tabindex=0` outer, which\n // triggered axe `nested-interactive` whenever the consumer composed\n // Buttons inside. Decoupling fixes that without changing the visual\n // behavior. Stories that want a clickable card already pass `onClick`.\n const isInteractive = onClick !== undefined;\n const role = isInteractive ? \"button\" : undefined;\n const tabIndex = isInteractive ? 0 : undefined;\n\n const classes = cn(cardVariants({ variant, padding }), className);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isInteractive && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onClick?.();\n }\n };\n\n // Polymorphic root: <section> when asSection, <div> otherwise. Both\n // accept the same HTMLAttributes via `...props` (HTMLDivElement and\n // HTMLElement attribute sets overlap on the props we use).\n const commonProps = {\n className: classes,\n role,\n tabIndex,\n onClick,\n onKeyDown: isInteractive ? handleKeyDown : undefined,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...props,\n } as const;\n\n if (asSection) {\n return <section {...commonProps}>{children}</section>;\n }\n return <div {...commonProps}>{children}</div>;\n}\n\nconst MemoCard = memo(CardComponent);\nMemoCard.displayName = \"Card\";\n\n// Compound components (dot-notation). Pattern follows Tabs.tsx — define\n// the function, attach subcomponents, cast to a type that exposes them.\ntype CardCompound = FC<CardProps> & {\n Header: typeof CardHeader;\n Title: typeof CardTitle;\n Subtitle: typeof CardSubtitle;\n Actions: typeof CardActions;\n Body: typeof CardBody;\n};\n\nconst Card = MemoCard as unknown as CardCompound;\nCard.Header = CardHeader;\nCard.Title = CardTitle;\nCard.Subtitle = CardSubtitle;\nCard.Actions = CardActions;\nCard.Body = CardBody;\n\nexport default Card;\n","\"use client\";\n\nimport { type HTMLAttributes, type ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DialogHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function DialogHeader({\n children,\n className = \"\",\n ...props\n}: DialogHeaderProps) {\n return (\n <div\n className={`flex flex-col ${getSpacingClass(\"1.5\", \"space-y\")} ${getSpacingClass(\"lg\", \"p\")} ${getSpacingClass(\"base\", \"pb\")} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type HTMLAttributes, type ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DialogFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function DialogFooter({\n children,\n className = \"\",\n ...props\n}: DialogFooterProps) {\n return (\n <div\n className={`flex flex-col-reverse sm:flex-row sm:justify-end sm:${getSpacingClass(\"sm\", \"space-x\")} ${getSpacingClass(\"lg\", \"p\")} ${getSpacingClass(\"base\", \"pt\")} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DrawerHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerHeader Component\n *\n * Header section for drawer content.\n *\n * @example\n * ```tsx\n * <DrawerHeader>\n * <h2>Drawer Title</h2>\n * </DrawerHeader>\n * ```\n */\nexport default function DrawerHeader({\n children,\n className = \"\",\n ...props\n}: DrawerHeaderProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-b\n border-line-default\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DrawerFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerFooter Component\n *\n * Footer section for drawer content, typically contains action buttons.\n *\n * @example\n * ```tsx\n * <DrawerFooter>\n * <Button>Save</Button>\n * <Button variant=\"outline\">Cancel</Button>\n * </DrawerFooter>\n * ```\n */\nexport default function DrawerFooter({\n children,\n className = \"\",\n ...props\n}: DrawerFooterProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-t\n border-line-default\n flex\n justify-end\n ${getSpacingClass(\"sm\", \"gap\")}\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface FilterChipsProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Optional group label rendered as neutral text at the left of the\n * chips (e.g. \"Filtros\"). Deliberately NOT a `<legend>`/`<fieldset>`\n * pair — FilterChips groups navigation/selection chips, not form\n * controls, and fieldset semantics would imply a form that isn't\n * there. When `label` is a plain string it doubles as the group's\n * accessible name (see the aria-label contract in the component\n * JSDoc).\n */\n label?: ReactNode;\n /**\n * The chips. Typically `<Chip>` elements — including the\n * `<Chip asChild><Link/></Chip>` navigation form — but any inline\n * content composes.\n */\n children: ReactNode;\n /**\n * Whether chips wrap to new lines when they overflow the container\n * width. `true` (default) applies `flex-wrap` — the responsive\n * filter-bar behavior; `false` applies `flex-nowrap` and keeps\n * everything on one line (consumer owns overflow handling).\n * @default true\n */\n wrap?: boolean;\n}\n\n/**\n * `FilterChips` — groups `Chip`s into a labeled filter bar.\n *\n * The shell of every chip-based filter row: a `role=\"group\"` container\n * with an optional neutral text label at the left and a flex run of\n * chips that wraps responsively by default. Purely presentational — the\n * interactive identity (select, navigate, remove) lives in each `Chip`\n * (`onClick`/`onRemove`, or `asChild` with a consumer `<Link>`), never\n * in this wrapper.\n *\n * ### Accessible name contract\n *\n * The container carries `role=\"group\"` so assistive technology can\n * announce the chips as one named unit. The accessible name resolves in\n * this order:\n *\n * 1. An explicit `aria-label` OR `aria-labelledby` passed by the\n * consumer always wins — when either is present, no name is derived\n * from `label`, so the consumer's attribute is the only naming on the\n * element (no redundant `aria-label` is left alongside an\n * `aria-labelledby`).\n * 2. Otherwise, when `label` is a non-empty plain string, it is reused\n * as the group's `aria-label` automatically.\n * 3. When `label` is a non-string `ReactNode` (or absent), no\n * `aria-label` is derived — supply `aria-label`/`aria-labelledby`\n * yourself if the group needs a name AT users can identify it by.\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in\n * the `./server` entry. Consumer-supplied chips may themselves be\n * client components (`<Chip onRemove>`); React's RSC boundary handles\n * that normally, and the zero-JS path (`<Chip asChild><Link/></Chip>`)\n * stays fully server-rendered.\n *\n * @example\n * ```tsx\n * // Navigation filter bar — server-rendered, zero-JS-friendly.\n * <FilterChips label=\"Filtros\">\n * <Chip asChild selected>\n * <Link href=\"?uf=SP\" aria-current=\"page\">UF: SP</Link>\n * </Chip>\n * <Chip asChild>\n * <Link href=\"?partido=PT\">Partido: PT</Link>\n * </Chip>\n * </FilterChips>\n *\n * // Single-line variant (consumer owns horizontal overflow).\n * <FilterChips label=\"Período\" wrap={false}>\n * <Chip>2024</Chip>\n * <Chip>2025</Chip>\n * </FilterChips>\n * ```\n */\nexport function FilterChips({\n label,\n children,\n wrap = true,\n className,\n ...props\n}: FilterChipsProps) {\n // The string label doubles as the group's accessible name — but only\n // when the consumer supplies no naming of their own. An explicit\n // `aria-label` OR `aria-labelledby` (both spread onto the root below)\n // takes precedence; deriving a name alongside `aria-labelledby` would\n // leave a redundant `aria-label` on the element, so suppress it here\n // rather than relying on ARIA name-computation precedence to hide it.\n const hasConsumerName =\n props[\"aria-label\"] != null || props[\"aria-labelledby\"] != null;\n const derivedAriaLabel =\n !hasConsumerName && typeof label === \"string\" && label !== \"\"\n ? label\n : undefined;\n\n return (\n <div\n role=\"group\"\n aria-label={derivedAriaLabel}\n className={cn(\n \"flex items-center\",\n wrap ? \"flex-wrap\" : \"flex-nowrap\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n {...props}\n >\n {label ? (\n // shrink-0 keeps the label a stable leading unit: in the wrapping\n // flex run it must not be squeezed or mid-word-wrapped when the\n // chips overflow — it stays on one line and the chips wrap around it.\n <span className=\"shrink-0 text-fg-secondary text-sm\">{label}</span>\n ) : null}\n {children}\n </div>\n );\n}\n\nexport default FilterChips;\n","/**\n * HeaderActions Component\n *\n * Actions slot component for Header (typically buttons, user menu, etc.).\n *\n * @see EPIC-002: Header Component\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\n\nexport interface HeaderActionsProps {\n /**\n * Actions content (typically Button components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderActions Component\n *\n * Actions slot for Header. Typically contains Button components or user menu.\n *\n * @example\n * ```tsx\n * <Header.Actions>\n * <Button variant=\"outline\">Sign In</Button>\n * <Button variant=\"primary\">Sign Up</Button>\n * </Header.Actions>\n * ```\n */\nexport function HeaderActions({ children, className }: HeaderActionsProps) {\n return (\n <div\n className={cn(\n \"flex-shrink-0 flex items-center\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","/**\n * HeaderNavigation Component\n *\n * Navigation slot component for Header.\n *\n * @see EPIC-002: Header Component\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\n\nexport interface HeaderNavigationProps {\n /**\n * Navigation content (typically NavLink components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderNavigation Component\n *\n * Navigation slot for Header. Typically contains NavLink components.\n *\n * @example\n * ```tsx\n * <Header.Navigation>\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\">About</NavLink>\n * </Header.Navigation>\n * ```\n */\nexport function HeaderNavigation({\n children,\n className,\n}: HeaderNavigationProps) {\n return (\n <nav\n className={cn(\n \"flex-1 flex items-center justify-center\",\n getSpacingClass(\"base\", \"gap\"),\n \"hidden md:flex\", // Hidden on mobile, visible on desktop\n className,\n )}\n aria-label=\"Main navigation\"\n >\n {children}\n </nav>\n );\n}\n","import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\n// Concrete-source-file import (NOT the `../../primitives` barrel): the barrel\n// re-exports client primitives like Input (useMemo), which would taint the\n// static server-safe analysis of this module and bar it from `./server`.\n// See issue #178 in `.claude/rules/server-entry.md` for the worked example.\nimport Text from \"../../primitives/Text/Text\";\nimport { cn, cva } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\n// Ambient declaration so the dev-only warn typechecks without pulling\n// @types/node into the app tsconfig; the `typeof process` guard keeps the\n// branch safe in browser/edge runtimes where `process` doesn't exist. At\n// runtime the consumer's bundler replaces `process.env.NODE_ENV` with a\n// literal. Mirrors the precedent in Card.tsx / Button.tsx.\ndeclare const process: { env: { NODE_ENV?: string } };\n\n/**\n * Visual treatment of the hero surface.\n *\n * - `plain` — no decorative background; the hero is text + padding on\n * whatever surface it sits on.\n * - `gradient` — a soft brand→secondary wash (theme-aware, see\n * `utilities/gradients.css`).\n * - `gradient-glow` — the same wash plus a brand-colored outer glow for\n * top-of-funnel emphasis (landing / home).\n */\nexport type HeroSectionVariant = \"plain\" | \"gradient\" | \"gradient-glow\";\n\n/** Block alignment of the hero content. */\nexport type HeroSectionAlign = \"start\" | \"center\";\n\nexport interface HeroSectionProps\n // `title` is omitted from the inherited DOM attributes because the native\n // `title` attribute is typed `string`, which is incompatible with our\n // `ReactNode` title slot. Everything else (id, aria-*, data-*, className)\n // still flows through to the root <section>.\n extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n /** Eyebrow / kicker above the title (rendered uppercase, brand-colored). */\n kicker?: ReactNode;\n /**\n * The hero title. Rendered as the section's `<h1>`. **Required.**\n *\n * When `title` is a plain string it also becomes the accessible name of\n * the hero `<section>` landmark (the FilterChips `label` pattern). When it\n * is a non-string `ReactNode`, supply `aria-label` or `aria-labelledby`\n * yourself — otherwise the landmark renders without an accessible name and\n * the component emits a dev-only warning.\n */\n title: ReactNode;\n /** Supporting copy below the title (constrained to a readable measure). */\n description?: ReactNode;\n /** Call-to-action slot — typically one or more `<Button>`s. */\n actions?: ReactNode;\n /** Metrics slot — typically a `<StatGroup>` of `<Stat>`s. Spans full width. */\n kpis?: ReactNode;\n /** A line of metadata below everything else (low emphasis). */\n meta?: ReactNode;\n /**\n * Visual treatment of the hero surface.\n * @default 'plain'\n */\n variant?: HeroSectionVariant;\n /**\n * Block alignment of the content.\n * @default 'start'\n */\n align?: HeroSectionAlign;\n /** Additional CSS classes merged onto the root `<section>`. */\n className?: string;\n}\n\n/**\n * HeroSection variants (CVA).\n *\n * The decorative `variant` axis only swaps background / shadow; the `align`\n * axis only swaps text-alignment. Per-block flex alignment (centering the\n * text column, the actions row) is handled by the lookup records below,\n * because those classes land on child elements, not the root.\n */\nconst heroSectionVariants = cva(\n cn(\n \"w-full flex flex-col\",\n getSpacingClass(\"2xl\", \"py\"), // 40px vertical breathing room\n getSpacingClass(\"lg\", \"px\"), // 24px horizontal\n getSpacingClass(\"xl\", \"gap-y\"), // 32px between major blocks\n ),\n {\n variants: {\n variant: {\n plain: \"\",\n gradient: \"hero-gradient\",\n \"gradient-glow\": cn(\"hero-gradient\", \"hero-glow\"),\n },\n align: {\n start: \"text-left\",\n center: \"text-center\",\n },\n },\n defaultVariants: {\n variant: \"plain\",\n align: \"start\",\n },\n },\n);\n\n/** Cross-axis alignment for the inner text column (kicker/title/description). */\nconst blockItems: Record<HeroSectionAlign, string> = {\n start: \"items-start\",\n center: \"items-center\",\n};\n\n/** Main-axis alignment for the actions row. */\nconst actionsJustify: Record<HeroSectionAlign, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n};\n\n/**\n * `HeroSection` — top-of-page hero: kicker + title + description + actions +\n * kpis + meta, in three visual treatments (`plain` / `gradient` /\n * `gradient-glow`) and two alignments (`start` / `center`).\n *\n * Distinct from `PageHeader` (contextual navigation: breadcrumb + title +\n * actions). The hero is a page/landing **introduction** with a visual\n * identity and slots for KPIs and metadata.\n *\n * ### Slots\n *\n * Every slot except `title` is optional and collapses cleanly when absent —\n * no empty wrapper leaks into the DOM. `kpis` is an opaque slot: pass a\n * `<StatGroup>` (or any node); the consumer chooses the metric layout.\n *\n * ### Landmark & accessible name\n *\n * Renders as a `<section>`. A `<section>` is only exposed as a navigable\n * region when it has an accessible name, so the component derives one:\n * - a string `title` becomes the `aria-label` automatically;\n * - an explicit `aria-label` / `aria-labelledby` from the consumer always\n * wins (and `aria-labelledby` suppresses the derived label to avoid a\n * redundant name);\n * - a non-string `title` with no consumer-supplied name triggers a dev-only\n * `console.warn` (dead-code-eliminated in production builds).\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in the\n * `./server` entry. Interactive children supplied via `actions` (e.g.\n * `<Button onClick>`) cross the RSC boundary as client references normally.\n *\n * @example\n * ```tsx\n * <HeroSection\n * variant=\"gradient-glow\"\n * align=\"center\"\n * kicker=\"Transparência\"\n * title=\"Acompanhe o Congresso em tempo real\"\n * description=\"Proposições, votações e parlamentares — tudo em um só lugar.\"\n * actions={<Button variant=\"primary\">Começar</Button>}\n * kpis={\n * <StatGroup layout=\"strip\">\n * <Stat value=\"9,4 mil\" label=\"Parlamentares\" align=\"center\" />\n * <Stat value=\"3,2 mil\" label=\"Proposições\" align=\"center\" />\n * </StatGroup>\n * }\n * meta=\"Atualizado diariamente\"\n * />\n * ```\n */\nconst HeroSection = forwardRef<HTMLElement, HeroSectionProps>(\n function HeroSection(\n {\n kicker,\n title,\n description,\n actions,\n kpis,\n meta,\n variant = \"plain\",\n align = \"start\",\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...rest\n },\n ref,\n ) {\n const hasExplicitName = ariaLabel != null || ariaLabelledBy != null;\n const resolvedAriaLabel =\n ariaLabel ?? (typeof title === \"string\" ? title : undefined);\n\n if (\n typeof process !== \"undefined\" &&\n process.env.NODE_ENV !== \"production\" &&\n !hasExplicitName &&\n typeof title !== \"string\"\n ) {\n console.warn(\n \"[HeroSection] A non-string `title` was provided without `aria-label` \" +\n \"or `aria-labelledby`. The hero <section> landmark will have no \" +\n \"accessible name. Pass `aria-label`, or set `aria-labelledby` to \" +\n \"your title's id.\",\n );\n }\n\n return (\n <section\n ref={ref}\n className={cn(heroSectionVariants({ variant, align }), className)}\n aria-label={resolvedAriaLabel}\n aria-labelledby={ariaLabelledBy}\n {...rest}\n >\n {/* Text column — tighter internal rhythm than the major-block gap. */}\n <div\n className={cn(\n \"flex flex-col\",\n getSpacingClass(\"md\", \"gap-y\"),\n blockItems[align],\n )}\n >\n {kicker ? (\n <Text\n as=\"span\"\n variant=\"caption\"\n colorRole=\"primary\"\n colorShade=\"DEFAULT\"\n className=\"text-sm font-semibold tracking-wide uppercase\"\n >\n {kicker}\n </Text>\n ) : null}\n\n <Text\n as=\"h1\"\n variant=\"heading\"\n className=\"text-3xl font-bold tracking-tight sm:text-4xl\"\n >\n {title}\n </Text>\n\n {description ? (\n <Text\n as=\"p\"\n variant=\"body\"\n colorRole=\"neutral\"\n colorShade=\"DEFAULT\"\n className=\"max-w-2xl text-base leading-relaxed sm:text-lg\"\n >\n {description}\n </Text>\n ) : null}\n </div>\n\n {actions ? (\n <div\n className={cn(\n \"flex flex-wrap\",\n getSpacingClass(\"sm\", \"gap\"),\n actionsJustify[align],\n )}\n >\n {actions}\n </div>\n ) : null}\n\n {kpis ? <div className=\"w-full\">{kpis}</div> : null}\n\n {meta ? (\n <Text\n as=\"p\"\n variant=\"caption\"\n colorRole=\"neutral\"\n colorShade=\"light\"\n className=\"text-sm\"\n >\n {meta}\n </Text>\n ) : null}\n </section>\n );\n },\n);\n\nHeroSection.displayName = \"HeroSection\";\n\nexport default HeroSection;\n","\"use client\";\n\nimport { type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type MenuSeparatorProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * MenuSeparator Component\n *\n * A visual separator for menu items.\n *\n * @example\n * ```tsx\n * <MenuSeparator />\n * ```\n */\nexport default function MenuSeparator({\n className = \"\",\n ...props\n}: MenuSeparatorProps) {\n return (\n <div\n role=\"separator\"\n className={`\n h-px\n bg-line-default\n ${getSpacingClass(\"sm\", \"my\")}\n ${className}\n `}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../../../utils\";\nimport { getSpacingClass } from \"../../../../tokens/spacing\";\nimport type { NavbarSeparatorProps } from \"../../types\";\n\n/**\n * Separator for the Navbar subcomponent\n *\n * Creates visual separation between groups of navigation items.\n *\n * @example\n * ```tsx\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * <SideNavbar.Navbar.Separator />\n * <SideNavbar.Navbar.Item icon={<Settings />} label=\"Settings\" />\n * </SideNavbar.Navbar>\n * ```\n */\nexport default function NavbarSeparator({\n orientation = \"horizontal\",\n className = \"\",\n ...props\n}: NavbarSeparatorProps) {\n if (orientation === \"vertical\") {\n return (\n <div\n className={cn(\"w-px\", \"h-6\", \"bg-line-default\", \"mx-auto\", className)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n {...props}\n />\n );\n }\n\n return (\n <div\n className={cn(\n \"w-full\",\n \"h-px\",\n \"bg-line-default\",\n getSpacingClass(\"sm\", \"my\"), // my-2 (8px) para consistência com gap-2 usado em outros lugares\n \"flex-shrink-0\", // Prevenir que separator encolha\n className,\n )}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n style={{\n // Garantir que separator não seja afetado por transformações\n willChange: \"auto\",\n transform: \"none\",\n }}\n {...props}\n />\n );\n}\n","/**\n * PageHeader Component\n *\n * Page header component with title, description, breadcrumb, and actions.\n *\n * @see EPIC-004: PageHeader Component\n */\n\nimport Breadcrumb from \"../Breadcrumb/Breadcrumb\";\nimport Text from \"../../primitives/Text/Text\";\nimport type { PageHeaderProps } from \"./types\";\nimport { cn, cva } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\n/**\n * PageHeader Variants using CVA\n * Type-safe variant system for PageHeader component\n */\nconst pageHeaderVariants = cva(\n // Base classes\n cn(\"w-full\", \"flex\", \"flex-col\", getSpacingClass(\"sm\", \"gap\")),\n {\n variants: {\n variant: {\n default: cn(getSpacingClass(\"base\", \"mb\")),\n compact: cn(getSpacingClass(\"sm\", \"mb\")),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n/**\n * PageHeader Component\n *\n * Page header with title, description, breadcrumb, and actions.\n *\n * @example\n * ```tsx\n * <PageHeader\n * title=\"Page Title\"\n * description=\"Page description\"\n * breadcrumb={[\n * { label: 'Home', href: '/' },\n * { label: 'Page', href: '/page' },\n * ]}\n * actions={<Button>Action</Button>}\n * />\n * ```\n */\nexport function PageHeader({\n title,\n description,\n breadcrumb,\n actions,\n variant = \"default\",\n className,\n ...props\n}: PageHeaderProps) {\n return (\n <div className={cn(pageHeaderVariants({ variant }), className)} {...props}>\n {/* Breadcrumb */}\n {breadcrumb && breadcrumb.length > 0 && <Breadcrumb items={breadcrumb} />}\n\n {/* Title and Actions Row */}\n <div\n className={`flex items-start justify-between ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Title and Description */}\n <div className=\"flex-1 min-w-0\">\n <Text\n variant=\"heading\"\n as=\"h1\"\n className={`${getSpacingClass(\"sm\", \"mb\")} text-2xl font-bold`}\n >\n {title}\n </Text>\n {description && (\n <Text variant=\"body\" className=\"text-fg-secondary\">\n {description}\n </Text>\n )}\n </div>\n\n {/* Actions */}\n {actions && (\n <div\n className={`flex items-center ${getSpacingClass(\"sm\", \"gap\")} flex-shrink-0`}\n >\n {actions}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default PageHeader;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type StatTone = \"neutral\" | \"success\" | \"warning\" | \"error\";\nexport type StatAlign = \"start\" | \"center\";\n\nexport interface StatProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The metric value to display. Strings are rendered verbatim — formatting\n * (number locale, currency, units, relative time, etc.) is the consumer's\n * responsibility, not the design system's. Pass `null` or `undefined` to\n * render the empty-state placeholder (see \"Empty state\" below).\n */\n value: ReactNode;\n /**\n * Short metric label (e.g. \"Votos\", \"Alinhamento\"). Required for screen\n * reader context — the label describes what the value means.\n */\n label: string;\n /**\n * Optional third line of context below the value (e.g. \"no banco\",\n * \"últimos 12 m\", \"+3% no mês\"). The `tone` prop styles THIS line — see\n * `tone` for the contract.\n */\n hint?: ReactNode;\n /**\n * Optional icon rendered above the value (home-style stats use icons;\n * detail-page stats typically don't).\n */\n icon?: ReactNode;\n /**\n * Block alignment. `start` left-aligns label/value/hint (detail-page\n * style); `center` centers them (home-hero style).\n * @default 'start'\n */\n align?: StatAlign;\n /**\n * Semantic tone for the metric — `neutral` for plain stats, the others\n * for classified states (good/warning/bad).\n *\n * **Scope (contract).** Tone affects ONLY the `hint`, not the `value`,\n * `label`, or `icon`. The `value` always renders in `text-fg-primary`\n * regardless of tone; the `label` in `text-fg-secondary`; the `icon` in\n * `text-icon-default`. This is deliberate — a colored value would\n * compete with the label for attention and bias the reader's\n * interpretation of the metric. If a future requirement needs the\n * `value` (or icon) to inherit tone, that becomes a new prop or a\n * semver-bound default change, not a surprise expansion of `tone`.\n *\n * Tone maps directly to the semantic foreground tokens (no new\n * vocabulary): `neutral` → `text-fg-tertiary`, `success` →\n * `text-fg-success`, `warning` → `text-fg-warning`, `error` →\n * `text-fg-error`. See `.claude/rules/colors.md`.\n *\n * @default 'neutral'\n */\n tone?: StatTone;\n}\n\nconst alignClasses: Record<StatAlign, string> = {\n start: \"items-start text-left\",\n center: \"items-center text-center\",\n};\n\nconst toneHintClasses: Record<StatTone, string> = {\n neutral: \"text-fg-tertiary\",\n success: \"text-fg-success\",\n warning: \"text-fg-warning\",\n error: \"text-fg-error\",\n};\n\n/**\n * `Stat` — a single statistic block (icon? + value + label + hint?).\n *\n * Composes with `StatGroup` (1-px-divider strip or grid) but is also\n * valid standalone — a single `Stat` outside a group is a legitimate use\n * case for a hero metric.\n *\n * ### Empty state contract\n *\n * When `value` is `null` OR `undefined`, the component renders the\n * em-dash placeholder `—` (U+2014) with `aria-label=\"No data\"` on its\n * wrapper. The label is intentionally hard-coded in English in this\n * version; a screen reader announcing \"No data\" in an otherwise\n * Portuguese app is a known inconsistency accepted for now — if i18n\n * becomes a requirement, an `emptyLabel?: string` prop will be added in\n * a follow-up PR (semver-safe addition).\n *\n * Other falsy values — `0`, `\"\"`, `false`, an empty fragment — are\n * **legitimate values** and render as-is. The empty trigger is only\n * `null`/`undefined`, because `0` (count = zero) is meaningful data that\n * the consumer would not want masked.\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in\n * the `./server` entry alongside `StatGroup`. Consumer-supplied `icon`\n * may itself be a client component; React's RSC boundary handles that\n * normally.\n *\n * @example\n * ```tsx\n * // Home-style (centered, with icon)\n * <Stat\n * icon={<Users size={20} aria-hidden=\"true\" />}\n * value=\"9,4 mil\"\n * label=\"Parlamentares\"\n * align=\"center\"\n * />\n *\n * // Detail-page-style (start-aligned, with hint)\n * <Stat\n * value=\"87%\"\n * label=\"Alinhamento\"\n * hint=\"últimos 12 meses\"\n * tone=\"success\"\n * />\n * ```\n */\nexport function Stat({\n value,\n label,\n hint,\n icon,\n align = \"start\",\n tone = \"neutral\",\n className,\n ...props\n}: StatProps) {\n const isEmpty = value === null || value === undefined;\n\n return (\n <div\n className={cn(\n \"bg-surface-base flex-1 flex flex-col\",\n getSpacingClass(\"base\", \"p\"),\n getSpacingClass(\"xs\", \"gap-y\"),\n alignClasses[align],\n className,\n )}\n {...props}\n >\n {icon ? (\n <span className=\"text-icon-default inline-flex\">{icon}</span>\n ) : null}\n {isEmpty ? (\n <span\n aria-label=\"No data\"\n className=\"text-fg-tertiary text-2xl font-semibold leading-tight\"\n >\n —\n </span>\n ) : (\n <span className=\"text-fg-primary text-2xl font-semibold leading-tight\">\n {value}\n </span>\n )}\n <span className=\"text-fg-secondary text-sm\">{label}</span>\n {hint ? (\n <span className={cn(\"text-xs\", toneHintClasses[tone])}>{hint}</span>\n ) : null}\n </div>\n );\n}\n\nexport default Stat;\n","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type StatGroupLayout = \"strip\" | \"grid\";\nexport type StatGroupCols = 2 | 3 | 4;\n\nexport interface StatGroupProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * `strip` — single horizontal row, no wrap. Each `Stat` shares the row\n * width via `flex-1`. Use when you guarantee the horizontal space\n * (hero areas, wide dashboards). On narrow viewports the row does NOT\n * reflow — choose `grid` if you need responsive collapse.\n *\n * `grid` — multi-column grid that reflows. Always 2-up on mobile,\n * expands to `cols` columns at the `md` breakpoint (768 px) and up.\n * Five or more children spill to a second row with the divider lines\n * preserved.\n *\n * @default 'grid'\n */\n layout?: StatGroupLayout;\n /**\n * Desktop column count (≥ 768 px). Only effective in `layout=\"grid\"`;\n * ignored in `layout=\"strip\"`. Mobile is always 2 columns regardless.\n *\n * @default 4\n */\n cols?: StatGroupCols;\n children: ReactNode;\n}\n\n// Tailwind v4 generates `md:grid-cols-N` for N ∈ {2,3,4} statically from\n// the literal class string. The map below ensures the strings exist\n// verbatim in the source so JIT picks them up.\nconst gridColsMd: Record<StatGroupCols, string> = {\n 2: \"md:grid-cols-2\",\n 3: \"md:grid-cols-3\",\n 4: \"md:grid-cols-4\",\n};\n\n/**\n * `StatGroup` — container for one or more `Stat` blocks with 1-px\n * dividers between them.\n *\n * ### Divider technique\n *\n * The container has `bg-line-default` and `gap-px` (1 px); each child\n * `Stat` carries its own `bg-surface-base`. The 1 px of gap exposes the\n * container's background as the divider line, while each cell masks its\n * own area with `bg-surface-base`. Works identically for the strip\n * layout (vertical dividers) and the grid layout (vertical AND\n * horizontal dividers, automatically, as the grid reflows). No separate\n * `Divider` component, no per-cell border logic.\n *\n * The outer ring is `border border-line-default` matching the gap color,\n * with `rounded-lg` and `overflow-hidden` clipping the inner cells to\n * the radius.\n *\n * ### Server-safe\n *\n * Pure presentation — no hooks, no event handlers on the DOM. Ships in\n * `./server` alongside `Stat`.\n *\n * @example\n * ```tsx\n * <StatGroup layout=\"strip\">\n * <Stat icon={<Users />} value=\"9,4 mil\" label=\"Parlamentares\" align=\"center\" />\n * <Stat icon={<FileText />} value=\"3,2 mil\" label=\"Proposições\" align=\"center\" />\n * <Stat icon={<Vote />} value=\"1,1 mil\" label=\"Votações\" align=\"center\" />\n * <Stat icon={<Clock />} value=\"há 18 dias\" label=\"Última atualização\" align=\"center\" />\n * </StatGroup>\n *\n * <StatGroup layout=\"grid\" cols={4}>\n * <Stat value=\"87%\" label=\"Alinhamento\" hint=\"últimos 12 m\" tone=\"success\" />\n * <Stat value={null} label=\"Sem orientação\" hint=\"no período\" />\n * <Stat value=\"R$ 187.472,95\" label=\"Gastos\" hint=\"no mandato\" />\n * <Stat value=\"42\" label=\"Votações\" hint=\"no banco\" />\n * </StatGroup>\n * ```\n */\nexport function StatGroup({\n layout = \"grid\",\n cols = 4,\n className,\n children,\n ...props\n}: StatGroupProps) {\n const isGrid = layout === \"grid\";\n\n return (\n <div\n className={cn(\n \"bg-line-default border border-line-default overflow-hidden gap-px\",\n getRadiusClass(\"lg\"),\n isGrid ? `grid grid-cols-2 ${gridColsMd[cols]}` : \"flex\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport default StatGroup;\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport type { TableColumn } from \"./TableTypes\";\n\nexport interface TableCellProps<\n T = unknown,\n> extends HTMLAttributes<HTMLTableCellElement> {\n column: TableColumn<T>;\n row: T;\n}\n\n/**\n * TableCell Component\n *\n * Renders a table cell (td) for a column.\n * Uses column.render if available, otherwise renders the raw value.\n * Must be used within a Table component.\n */\nexport default function TableCell<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({ column, row, className = \"\", ...props }: TableCellProps<T>) {\n const value = column.key in row ? row[column.key as keyof T] : undefined;\n\n return (\n <td\n className={`${getSpacingClass(\"lg\", \"px\")} ${getSpacingClass(\"base\", \"py\")} whitespace-nowrap text-sm text-fg-primary ${\n column.hiddenOnMobile ? \"hidden md:table-cell\" : \"\"\n } ${className}`}\n {...props}\n >\n {column.render ? column.render(value, row) : String(value ?? \"\")}\n </td>\n );\n}\n","import { forwardRef } from \"react\";\nimport type { ElementType, HTMLAttributes, ReactNode } from \"react\";\nimport { cn, cva } from \"../../utils\";\nimport {\n getRadiusClass,\n getSpacingClass,\n getTypographySize,\n} from \"../../tokens\";\n\n// Ambient declaration so the dev-only warn typechecks without pulling\n// @types/node in; the `typeof process` guard keeps it safe in browser/edge\n// runtimes. Mirrors Card.tsx / HeroSection.tsx.\ndeclare const process: { env: { NODE_ENV?: string } };\n\n/** Visual hierarchy: `default` = primary tab bar, `sub` = nested sub-tabs. */\nexport type TabsAsLinksVariant = \"default\" | \"sub\";\n\n/** A single navigation tab. The active state is decided by the caller. */\nexport interface TabAsLink {\n /** Visible tab label. */\n label: ReactNode;\n /** Destination URL — pre-computed by the caller. */\n href: string;\n /**\n * Whether this tab is the current one. The caller derives it (from\n * `pathname` / `searchParams`); the component does no detection of its own.\n * @default false\n */\n active?: boolean;\n /** Optional leading icon (decorative — rendered `aria-hidden`). */\n icon?: ReactNode;\n /** Optional trailing count (e.g. number of items behind the tab). */\n count?: number;\n}\n\nexport interface TabsAsLinksProps extends HTMLAttributes<HTMLElement> {\n /** The tabs to render, in order. */\n items: TabAsLink[];\n /**\n * Visual hierarchy.\n * @default 'default'\n */\n variant?: TabsAsLinksVariant;\n /**\n * Element/component each tab renders as. Defaults to a plain `<a>` (zero\n * JS, works without hydration). Pass a router link — e.g. Next's `Link` —\n * to keep client-side navigation/prefetch: `linkComponent={Link}`. It\n * receives `href`, `className`, `aria-current`, and `children`.\n * @default 'a'\n */\n linkComponent?: ElementType;\n /** Additional CSS classes merged onto the root `<nav>`. */\n className?: string;\n}\n\n/**\n * Tab-bar container (the `<nav>` track). Only the gap and the track-line\n * weight differ between tiers; the active underline lives on each link.\n */\nconst navVariants = cva(cn(\"flex items-center\", \"border-b\"), {\n variants: {\n variant: {\n default: cn(\"border-line-default\", getSpacingClass(\"base\", \"gap-x\")),\n sub: cn(\"border-line-muted\", getSpacingClass(\"sm\", \"gap-x\")),\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n/**\n * A single tab link. The 2px bottom border with `-mb-px` overlaps the 1px\n * `<nav>` track so the active underline visually replaces the track segment\n * (the classic tab-bar look). `active` and `variant` are independent axes.\n */\nconst tabLinkVariants = cva(\n cn(\n \"relative -mb-px inline-flex items-center\",\n getSpacingClass(\"xs\", \"gap-x\"),\n \"border-b-2 border-transparent\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus-visible:ring-2\",\n \"focus-visible:ring-line-focus\",\n \"focus-visible:ring-offset-2\",\n getRadiusClass(\"sm\"),\n ),\n {\n variants: {\n variant: {\n default: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n sub: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n },\n active: {\n true: cn(\"border-line-brand\", \"text-fg-brand-emphasis\", \"font-medium\"),\n false: cn(\n \"text-fg-secondary\",\n \"hover:text-fg-primary\",\n \"hover:border-line-muted\",\n ),\n },\n },\n compoundVariants: [\n // Sub-tabs sit lower in the hierarchy: lighter resting foreground.\n {\n variant: \"sub\",\n active: false,\n class: cn(\"text-fg-tertiary\", \"hover:text-fg-secondary\"),\n },\n ],\n defaultVariants: {\n variant: \"default\",\n active: false,\n },\n },\n);\n\nconst countClasses = cn(\n \"inline-flex items-center justify-center\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"px\"),\n \"bg-surface-muted text-fg-secondary text-xs\",\n);\n\n/**\n * `TabsAsLinks` — tabs rendered as **navigation links**, with the active tab\n * decided by the caller (from the URL), not by interactive state.\n *\n * This is the server-safe counterpart to the interactive `Tabs` widget. Use\n * it for tab bars whose selection lives in the URL (`?tab=`, `/section`) so\n * they work without JavaScript and survive a shared link. Because each tab is\n * a real link to a distinct destination, the component uses the **navigation**\n * pattern — a named `<nav>` landmark with `aria-current=\"page\"` on the active\n * link — NOT the `role=\"tab\"` widget pattern (which would promise arrow-key\n * semantics that links don't have).\n *\n * ### Accessible name\n *\n * Renders a `<nav>` landmark, which must be named so screen-reader users can\n * tell multiple tab bars apart. Pass `aria-label` (e.g. `\"Painel\"`) or\n * `aria-labelledby`. With neither, a dev-only warning fires (the landmark\n * still renders, just anonymously).\n *\n * ### Server-safe\n *\n * No hooks, no event handlers on the DOM — pure presentation. Ships in the\n * `./server` entry. Defaults to a plain `<a>`; pass `linkComponent={Link}` to\n * keep a router's client-side navigation, which crosses the RSC boundary as a\n * client reference.\n *\n * @example\n * ```tsx\n * // Next App Router — active derived from searchParams in a Server Component\n * <TabsAsLinks\n * aria-label=\"Painel\"\n * linkComponent={Link}\n * items={[\n * { label: \"Visão geral\", href: \"/painel?tab=overview\", active: tab === \"overview\" },\n * { label: \"Alertas\", href: \"/painel?tab=alerts\", active: tab === \"alerts\", count: 3 },\n * ]}\n * />\n * ```\n */\nconst TabsAsLinks = forwardRef<HTMLElement, TabsAsLinksProps>(\n function TabsAsLinks(\n {\n items,\n variant = \"default\",\n linkComponent,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...rest\n },\n ref,\n ) {\n if (\n typeof process !== \"undefined\" &&\n process.env.NODE_ENV !== \"production\" &&\n !ariaLabel &&\n !ariaLabelledBy\n ) {\n console.warn(\n \"[TabsAsLinks] renders a <nav> landmark and should have an \" +\n 'accessible name. Pass `aria-label` (e.g. \"Painel\") or ' +\n \"`aria-labelledby` — multiple unnamed navs on a page are ambiguous \" +\n \"to screen readers.\",\n );\n }\n\n const LinkComponent: ElementType = linkComponent ?? \"a\";\n\n return (\n <nav\n ref={ref}\n className={cn(navVariants({ variant }), className)}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n {...rest}\n >\n {items.map((item, index) => (\n <LinkComponent\n key={item.href || index}\n href={item.href}\n aria-current={item.active ? \"page\" : undefined}\n data-active={item.active ? \"true\" : undefined}\n className={tabLinkVariants({ variant, active: !!item.active })}\n >\n {item.icon ? (\n <span aria-hidden=\"true\" className=\"inline-flex shrink-0\">\n {item.icon}\n </span>\n ) : null}\n <span>{item.label}</span>\n {item.count !== undefined ? (\n <span className={countClasses}>{item.count}</span>\n ) : null}\n </LinkComponent>\n ))}\n </nav>\n );\n },\n);\n\nTabsAsLinks.displayName = \"TabsAsLinks\";\n\nexport default TabsAsLinks;\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type TimelineOrientation = \"horizontal\" | \"vertical\";\n\nexport interface TimelineItem {\n id: string;\n title: string;\n description?: string;\n content?: ReactNode;\n timestamp?: string;\n icon?: ReactNode;\n status?: \"default\" | \"active\" | \"completed\" | \"error\";\n}\n\nexport interface TimelineProps {\n items: TimelineItem[];\n orientation?: TimelineOrientation;\n className?: string;\n}\n\n/**\n * Timeline Component\n *\n * A timeline component for displaying events in chronological order.\n * Supports horizontal and vertical orientations.\n *\n * @example\n * ```tsx\n * <Timeline\n * items={[\n * { id: '1', title: 'Event 1', description: 'Description 1', timestamp: '2024-01-01' },\n * { id: '2', title: 'Event 2', description: 'Description 2', timestamp: '2024-01-02' },\n * ]}\n * />\n * ```\n */\nexport default function Timeline({\n items,\n orientation = \"vertical\",\n className = \"\",\n}: TimelineProps) {\n if (orientation === \"horizontal\") {\n return (\n <div className={`flex items-start ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div key={item.id} className=\"flex items-start flex-1\">\n <div className=\"flex flex-col items-center flex-1\">\n {/* Icon/Indicator */}\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\"\n ? { \"data-marker\": \"pending\" }\n : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n\n {/* Connector Line */}\n {!isLast && (\n <div\n className={`\n w-full\n h-0.5\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n\n {/* Content */}\n <div\n className={`${getSpacingClass(\"base\", \"mt\")} text-center ${getSpacingClass(\"base\", \"px\")}`}\n >\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3 className=\"text-sm font-semibold text-fg-primary\">\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-xs text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"sm\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div className={`${getSpacingClass(\"none\", \"space-y\")} ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div\n key={item.id}\n className={`flex items-start ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Timeline Line & Icon */}\n <div className=\"flex flex-col items-center\">\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\" ? { \"data-marker\": \"pending\" } : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n {!isLast && (\n <div\n className={`\n w-0.5\n flex-1\n min-h-16\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n </div>\n\n {/* Content */}\n <div className={`flex-1 ${getSpacingClass(\"xl\", \"pb\")}`}>\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3\n className={`\n text-base\n font-semibold\n ${status === \"active\" ? \"text-fg-brand-emphasis\" : \"text-fg-primary\"}\n `}\n >\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-sm text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"md\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["RadiusTokenFactory","size","config","RADIUS_TOKENS","getRadiusClass","SpacingTokenFactory","scale","px","rem","__publicField","SPACING_TOKENS","getSpacingClass","direction","value","TypographyTokenFactory","height","weight","lineHeight","TYPOGRAPHY_TOKENS","getTypographyClasses","variant","token","getTypographySize","getTypographyWeight","cn","inputs","twMerge","clsx","cva","base","variantFn","cvaLib","props","variantClasses","badgeVariants","Badge","memo","forwardRef","_a","ref","_b","style","className","children","ariaLabel","__objRest","classes","accessibleLabel","childProps","jsx","__spreadProps","__spreadValues","setRef","composeRefs","refs","node","hasCleanup","cleanups","cleanup","i","useComposedRefs","React","createSlot","ownerName","Slot2","forwardedRef","slotProps","slottableElement","hasSlottable","newChildren","isLazyComponent","use","maybeSlottable","isSlottable","slottable","child","getSlottableElementFromSlottable","slottableElementRef","getElementRef","composedRef","createSlottableError","createSlotError","mergedProps","mergeProps","Slot","SLOTTABLE_IDENTIFIER","child2","overrideProps","propName","slotPropValue","childPropValue","args","result","element","getter","mayWarn","REACT_LAZY_TYPE","isPromiseLike","chipVariants","Chip","selected","disabled","tabIndex","asChild","onRemove","onClick","count","useLabelButton","interactive","handleKeyDown","e","hasCount","chipIsBrandFilled","countBadge","labelWithCount","jsxs","X","ErrorMessage","message","id","baseClasses","AlertCircle","Info","labelBaseClasses","labelVariantClasses","Label","ShadowTokenFactory","SHADOW_TOKENS","getShadowClass","progressTrackVariants","progressBarVariants","Progress","max","showLabel","label","isIndeterminate","percentage","defaultAriaLabel","separatorOrientationClasses","separatorVariantClasses","Separator","orientation","Skeleton","width","lines","_","index","spinnerVariants","Spinner","Loader2","TEXT_COLOR_CLASSES","TextComponent","bold","italic","as","colorRole","colorShade","rest","classNames","Tag","Text","maxWidthClasses","Container","maxWidth","paddingX","paddingY","center","Stack","spacing","align","justify","spacingClass","alignClasses","justifyClasses","Breadcrumb","items","separator","item","isLast","CardHeader","CardTitle","icon","badge","As","CardSubtitle","CardActions","CardBody","CardComponent","padding","ariaLabelledBy","asSection","cardVariants","isInteractive","role","commonProps","MemoCard","Card","DialogHeader","DialogFooter","DrawerHeader","DrawerFooter","FilterChips","wrap","derivedAriaLabel","HeaderActions","HeaderNavigation","heroSectionVariants","blockItems","actionsJustify","HeroSection","kicker","title","description","actions","kpis","meta","hasExplicitName","resolvedAriaLabel","MenuSeparator","NavbarSeparator","pageHeaderVariants","PageHeader","breadcrumb","toneHintClasses","Stat","hint","tone","isEmpty","gridColsMd","StatGroup","layout","cols","isGrid","TableCell","column","row","navVariants","tabLinkVariants","countClasses","TabsAsLinks","linkComponent","LinkComponent","Timeline","status","CheckCircle2"],"mappings":"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","x_google_ignoreList":[6,7]}