@teja-app/ui 0.0.9 → 0.0.11

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 (166) hide show
  1. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  2. package/dist/components/Select/Select.d.ts.map +1 -1
  3. package/dist/index.cjs +3452 -13752
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js +3425 -13725
  6. package/dist/index.js.map +1 -1
  7. package/dist/style-D6av97Pw.cjs +10406 -0
  8. package/dist/style-D6av97Pw.cjs.map +1 -0
  9. package/dist/style-DyXPy-7b.js +10392 -0
  10. package/dist/style-DyXPy-7b.js.map +1 -0
  11. package/dist/theme/ThemeProvider.d.ts +23 -0
  12. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  13. package/dist/theme/applyTheme.d.ts +33 -0
  14. package/dist/theme/applyTheme.d.ts.map +1 -0
  15. package/dist/theme/components/AIBadge.d.ts +20 -0
  16. package/dist/theme/components/AIBadge.d.ts.map +1 -0
  17. package/dist/theme/components/AICard.d.ts +16 -0
  18. package/dist/theme/components/AICard.d.ts.map +1 -0
  19. package/dist/theme/components/AIChip.d.ts +7 -0
  20. package/dist/theme/components/AIChip.d.ts.map +1 -0
  21. package/dist/theme/components/AIComposeButton.d.ts +14 -0
  22. package/dist/theme/components/AIComposeButton.d.ts.map +1 -0
  23. package/dist/theme/components/AIGhostText.d.ts +14 -0
  24. package/dist/theme/components/AIGhostText.d.ts.map +1 -0
  25. package/dist/theme/components/AISectionHeader.d.ts +15 -0
  26. package/dist/theme/components/AISectionHeader.d.ts.map +1 -0
  27. package/dist/theme/components/AISparkle.d.ts +12 -0
  28. package/dist/theme/components/AISparkle.d.ts.map +1 -0
  29. package/dist/theme/components/AIWorking.d.ts +12 -0
  30. package/dist/theme/components/AIWorking.d.ts.map +1 -0
  31. package/dist/theme/components/Alert.d.ts +22 -0
  32. package/dist/theme/components/Alert.d.ts.map +1 -0
  33. package/dist/theme/components/AppShell.d.ts +16 -0
  34. package/dist/theme/components/AppShell.d.ts.map +1 -0
  35. package/dist/theme/components/AskTeja.d.ts +17 -0
  36. package/dist/theme/components/AskTeja.d.ts.map +1 -0
  37. package/dist/theme/components/Avatar.d.ts +12 -0
  38. package/dist/theme/components/Avatar.d.ts.map +1 -0
  39. package/dist/theme/components/Badge.d.ts +16 -0
  40. package/dist/theme/components/Badge.d.ts.map +1 -0
  41. package/dist/theme/components/Brand.d.ts +19 -0
  42. package/dist/theme/components/Brand.d.ts.map +1 -0
  43. package/dist/theme/components/Button.d.ts +19 -0
  44. package/dist/theme/components/Button.d.ts.map +1 -0
  45. package/dist/theme/components/Card.d.ts +10 -0
  46. package/dist/theme/components/Card.d.ts.map +1 -0
  47. package/dist/theme/components/Checkbox.d.ts +23 -0
  48. package/dist/theme/components/Checkbox.d.ts.map +1 -0
  49. package/dist/theme/components/Chip.d.ts +19 -0
  50. package/dist/theme/components/Chip.d.ts.map +1 -0
  51. package/dist/theme/components/Combobox.d.ts +29 -0
  52. package/dist/theme/components/Combobox.d.ts.map +1 -0
  53. package/dist/theme/components/Compat.d.ts +34 -0
  54. package/dist/theme/components/Compat.d.ts.map +1 -0
  55. package/dist/theme/components/ConfirmDialog.d.ts +39 -0
  56. package/dist/theme/components/ConfirmDialog.d.ts.map +1 -0
  57. package/dist/theme/components/CountryPicker.d.ts +14 -0
  58. package/dist/theme/components/CountryPicker.d.ts.map +1 -0
  59. package/dist/theme/components/DateInput.d.ts +30 -0
  60. package/dist/theme/components/DateInput.d.ts.map +1 -0
  61. package/dist/theme/components/Divider.d.ts +13 -0
  62. package/dist/theme/components/Divider.d.ts.map +1 -0
  63. package/dist/theme/components/Drawer.d.ts +52 -0
  64. package/dist/theme/components/Drawer.d.ts.map +1 -0
  65. package/dist/theme/components/EmptyState.d.ts +28 -0
  66. package/dist/theme/components/EmptyState.d.ts.map +1 -0
  67. package/dist/theme/components/FactList.d.ts +21 -0
  68. package/dist/theme/components/FactList.d.ts.map +1 -0
  69. package/dist/theme/components/Field.d.ts +35 -0
  70. package/dist/theme/components/Field.d.ts.map +1 -0
  71. package/dist/theme/components/FieldHint.d.ts +17 -0
  72. package/dist/theme/components/FieldHint.d.ts.map +1 -0
  73. package/dist/theme/components/Icon.d.ts +19 -0
  74. package/dist/theme/components/Icon.d.ts.map +1 -0
  75. package/dist/theme/components/IconButton.d.ts +17 -0
  76. package/dist/theme/components/IconButton.d.ts.map +1 -0
  77. package/dist/theme/components/KV.d.ts +26 -0
  78. package/dist/theme/components/KV.d.ts.map +1 -0
  79. package/dist/theme/components/LabelGroup.d.ts +15 -0
  80. package/dist/theme/components/LabelGroup.d.ts.map +1 -0
  81. package/dist/theme/components/LangSwitcher.d.ts +30 -0
  82. package/dist/theme/components/LangSwitcher.d.ts.map +1 -0
  83. package/dist/theme/components/MiniStat.d.ts +20 -0
  84. package/dist/theme/components/MiniStat.d.ts.map +1 -0
  85. package/dist/theme/components/Modal.d.ts +57 -0
  86. package/dist/theme/components/Modal.d.ts.map +1 -0
  87. package/dist/theme/components/MultiSelect.d.ts +38 -0
  88. package/dist/theme/components/MultiSelect.d.ts.map +1 -0
  89. package/dist/theme/components/PageHeader.d.ts +24 -0
  90. package/dist/theme/components/PageHeader.d.ts.map +1 -0
  91. package/dist/theme/components/Pagination.d.ts +10 -0
  92. package/dist/theme/components/Pagination.d.ts.map +1 -0
  93. package/dist/theme/components/PersonRow.d.ts +18 -0
  94. package/dist/theme/components/PersonRow.d.ts.map +1 -0
  95. package/dist/theme/components/RoleTile.d.ts +20 -0
  96. package/dist/theme/components/RoleTile.d.ts.map +1 -0
  97. package/dist/theme/components/SectionLabel.d.ts +20 -0
  98. package/dist/theme/components/SectionLabel.d.ts.map +1 -0
  99. package/dist/theme/components/SegmentedControl.d.ts +15 -0
  100. package/dist/theme/components/SegmentedControl.d.ts.map +1 -0
  101. package/dist/theme/components/Select.d.ts +24 -0
  102. package/dist/theme/components/Select.d.ts.map +1 -0
  103. package/dist/theme/components/SettingRow.d.ts +23 -0
  104. package/dist/theme/components/SettingRow.d.ts.map +1 -0
  105. package/dist/theme/components/Sidebar.d.ts +28 -0
  106. package/dist/theme/components/Sidebar.d.ts.map +1 -0
  107. package/dist/theme/components/SidebarNavItem.d.ts +31 -0
  108. package/dist/theme/components/SidebarNavItem.d.ts.map +1 -0
  109. package/dist/theme/components/Skeleton.d.ts +32 -0
  110. package/dist/theme/components/Skeleton.d.ts.map +1 -0
  111. package/dist/theme/components/Spinner.d.ts +26 -0
  112. package/dist/theme/components/Spinner.d.ts.map +1 -0
  113. package/dist/theme/components/Stat.d.ts +23 -0
  114. package/dist/theme/components/Stat.d.ts.map +1 -0
  115. package/dist/theme/components/StatePicker.d.ts +17 -0
  116. package/dist/theme/components/StatePicker.d.ts.map +1 -0
  117. package/dist/theme/components/Stepper.d.ts +23 -0
  118. package/dist/theme/components/Stepper.d.ts.map +1 -0
  119. package/dist/theme/components/Switch.d.ts +18 -0
  120. package/dist/theme/components/Switch.d.ts.map +1 -0
  121. package/dist/theme/components/TOTP6Cells.d.ts +49 -0
  122. package/dist/theme/components/TOTP6Cells.d.ts.map +1 -0
  123. package/dist/theme/components/Tabs.d.ts +33 -0
  124. package/dist/theme/components/Tabs.d.ts.map +1 -0
  125. package/dist/theme/components/Tag.d.ts +15 -0
  126. package/dist/theme/components/Tag.d.ts.map +1 -0
  127. package/dist/theme/components/TextInput.d.ts +24 -0
  128. package/dist/theme/components/TextInput.d.ts.map +1 -0
  129. package/dist/theme/components/Textarea.d.ts +17 -0
  130. package/dist/theme/components/Textarea.d.ts.map +1 -0
  131. package/dist/theme/components/TimeZonePicker.d.ts +14 -0
  132. package/dist/theme/components/TimeZonePicker.d.ts.map +1 -0
  133. package/dist/theme/components/TimelineRow.d.ts +27 -0
  134. package/dist/theme/components/TimelineRow.d.ts.map +1 -0
  135. package/dist/theme/components/ToolbarSearch.d.ts +8 -0
  136. package/dist/theme/components/ToolbarSearch.d.ts.map +1 -0
  137. package/dist/theme/components/TopBar.d.ts +35 -0
  138. package/dist/theme/components/TopBar.d.ts.map +1 -0
  139. package/dist/theme/components/ViewToggle.d.ts +24 -0
  140. package/dist/theme/components/ViewToggle.d.ts.map +1 -0
  141. package/dist/theme/components/aiStyles.d.ts +2 -0
  142. package/dist/theme/components/aiStyles.d.ts.map +1 -0
  143. package/dist/theme/components/fieldShell.d.ts +68 -0
  144. package/dist/theme/components/fieldShell.d.ts.map +1 -0
  145. package/dist/theme/components/index.d.ts +66 -0
  146. package/dist/theme/components/index.d.ts.map +1 -0
  147. package/dist/theme/data/countries.d.ts +8 -0
  148. package/dist/theme/data/countries.d.ts.map +1 -0
  149. package/dist/theme/data/index.d.ts +4 -0
  150. package/dist/theme/data/index.d.ts.map +1 -0
  151. package/dist/theme/data/regions.d.ts +8 -0
  152. package/dist/theme/data/regions.d.ts.map +1 -0
  153. package/dist/theme/data/timezones.d.ts +8 -0
  154. package/dist/theme/data/timezones.d.ts.map +1 -0
  155. package/dist/theme/fonts.d.ts +9 -0
  156. package/dist/theme/fonts.d.ts.map +1 -0
  157. package/dist/theme/index.cjs +6168 -0
  158. package/dist/theme/index.cjs.map +1 -0
  159. package/dist/theme/index.d.ts +18 -0
  160. package/dist/theme/index.d.ts.map +1 -0
  161. package/dist/theme/index.js +6168 -0
  162. package/dist/theme/index.js.map +1 -0
  163. package/dist/theme/presets.d.ts +370 -0
  164. package/dist/theme/presets.d.ts.map +1 -0
  165. package/dist/ui.css +159 -0
  166. package/package.json +6 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/theme/presets.ts","../../src/theme/applyTheme.ts","../../src/theme/ThemeProvider.tsx","../../src/theme/fonts.ts","../../src/theme/components/Icon.tsx","../../src/theme/components/Button.tsx","../../src/theme/components/Badge.tsx","../../src/theme/components/Card.tsx","../../src/theme/components/Brand.tsx","../../src/theme/components/FieldHint.tsx","../../src/theme/components/fieldShell.tsx","../../src/theme/components/Field.tsx","../../src/theme/components/TextInput.tsx","../../src/theme/components/Textarea.tsx","../../src/theme/components/Select.tsx","../../src/theme/components/Combobox.tsx","../../src/theme/components/MultiSelect.tsx","../../src/theme/components/DateInput.tsx","../../src/theme/data/countries.ts","../../src/theme/components/CountryPicker.tsx","../../src/theme/data/regions.ts","../../src/theme/components/StatePicker.tsx","../../src/theme/data/timezones.ts","../../src/theme/components/TimeZonePicker.tsx","../../src/theme/components/Alert.tsx","../../src/theme/components/Stepper.tsx","../../src/theme/components/AISparkle.tsx","../../src/theme/components/Checkbox.tsx","../../src/theme/components/RoleTile.tsx","../../src/theme/components/TOTP6Cells.tsx","../../src/theme/components/LangSwitcher.tsx","../../src/theme/components/Avatar.tsx","../../src/theme/components/Stat.tsx","../../src/theme/components/SegmentedControl.tsx","../../src/theme/components/Pagination.tsx","../../src/theme/components/ToolbarSearch.tsx","../../src/theme/components/AIChip.tsx","../../src/theme/components/SidebarNavItem.tsx","../../src/theme/components/Sidebar.tsx","../../src/theme/components/TopBar.tsx","../../src/theme/components/AppShell.tsx","../../src/theme/components/Drawer.tsx","../../src/theme/components/Modal.tsx","../../src/theme/components/Compat.tsx","../../src/theme/components/Tabs.tsx","../../src/theme/components/Divider.tsx","../../src/theme/components/PageHeader.tsx","../../src/theme/components/FactList.tsx","../../src/theme/components/Tag.tsx","../../src/theme/components/SectionLabel.tsx","../../src/theme/components/Switch.tsx","../../src/theme/components/IconButton.tsx","../../src/theme/components/KV.tsx","../../src/theme/components/MiniStat.tsx","../../src/theme/components/LabelGroup.tsx","../../src/theme/components/PersonRow.tsx","../../src/theme/components/SettingRow.tsx","../../src/theme/components/Chip.tsx","../../src/theme/components/ViewToggle.tsx","../../src/theme/components/TimelineRow.tsx","../../src/theme/components/aiStyles.ts","../../src/theme/components/AIBadge.tsx","../../src/theme/components/AIComposeButton.tsx","../../src/theme/components/AICard.tsx","../../src/theme/components/AISectionHeader.tsx","../../src/theme/components/AIWorking.tsx","../../src/theme/components/AIGhostText.tsx","../../src/theme/components/AskTeja.tsx","../../src/theme/components/Spinner.tsx","../../src/theme/components/Skeleton.tsx","../../src/theme/components/EmptyState.tsx","../../src/theme/components/ConfirmDialog.tsx"],"sourcesContent":["/**\n * Theme preset catalogues — each entry is a self-contained set of CSS variable\n * overrides applied on top of the base tokens. Ported from design/components/tweaks.jsx.\n *\n * Why explicit derived stops (hover/soft/ring) instead of computing from one\n * input: we want predictable color science across all stops without runtime\n * OKLCH math, and dark-mode variants can diverge from a simple lightness flip.\n */\n\nexport type CSSVarMap = Record<string, string>;\n\nexport interface PresetEntry {\n label: string;\n swatch?: string;\n vars: CSSVarMap;\n darkVars?: CSSVarMap;\n}\n\n/* ── Primary brand palettes ────────────────────────────── */\nexport const PRIMARY_OPTIONS = {\n clinical: {\n label: 'Clinical blue',\n swatch: 'oklch(0.50 0.13 235)',\n vars: {\n '--primary': 'oklch(0.50 0.13 235)',\n '--primary-hover': 'oklch(0.45 0.13 235)',\n '--primary-soft': 'oklch(0.95 0.035 235)',\n '--primary-ring': 'oklch(0.50 0.13 235 / 0.18)',\n },\n darkVars: {\n '--primary-soft': 'oklch(0.30 0.07 235)',\n },\n },\n indigo: {\n label: 'Indigo',\n swatch: 'oklch(0.50 0.16 275)',\n vars: {\n '--primary': 'oklch(0.50 0.16 275)',\n '--primary-hover': 'oklch(0.45 0.16 275)',\n '--primary-soft': 'oklch(0.95 0.04 275)',\n '--primary-ring': 'oklch(0.50 0.16 275 / 0.18)',\n },\n darkVars: {\n '--primary-soft': 'oklch(0.30 0.08 275)',\n },\n },\n teal: {\n label: 'Healthcare teal',\n swatch: 'oklch(0.55 0.11 195)',\n vars: {\n '--primary': 'oklch(0.55 0.11 195)',\n '--primary-hover': 'oklch(0.50 0.11 195)',\n '--primary-soft': 'oklch(0.95 0.035 195)',\n '--primary-ring': 'oklch(0.55 0.11 195 / 0.18)',\n },\n darkVars: {\n '--primary-soft': 'oklch(0.30 0.07 195)',\n },\n },\n slate: {\n label: 'Slate',\n swatch: 'oklch(0.35 0.03 250)',\n vars: {\n '--primary': 'oklch(0.30 0.03 250)',\n '--primary-hover': 'oklch(0.25 0.03 250)',\n '--primary-soft': 'oklch(0.94 0.008 250)',\n '--primary-ring': 'oklch(0.30 0.03 250 / 0.18)',\n },\n darkVars: {\n '--primary': 'oklch(0.78 0.02 250)',\n '--primary-hover': 'oklch(0.85 0.02 250)',\n '--primary-soft': 'oklch(0.28 0.01 250)',\n '--ink-on-primary': 'oklch(0.18 0.005 250)',\n },\n },\n} as const satisfies Record<string, PresetEntry>;\n\n/* ── AI accent palettes ────────────────────────────────── */\nexport const AI_OPTIONS = {\n violet: {\n label: 'Warm violet',\n swatch: 'oklch(0.55 0.18 305)',\n vars: {\n '--ai': 'oklch(0.55 0.18 305)',\n '--ai-2': 'oklch(0.62 0.15 260)',\n '--ai-soft': 'oklch(0.96 0.035 305)',\n '--ai-tint': 'oklch(0.985 0.012 305)',\n '--ai-ring': 'oklch(0.55 0.18 305 / 0.20)',\n '--ai-gradient':\n 'linear-gradient(135deg, oklch(0.55 0.18 305), oklch(0.62 0.15 250))',\n '--ai-border':\n 'linear-gradient(135deg, oklch(0.55 0.18 305 / 0.35), oklch(0.62 0.15 250 / 0.35))',\n },\n darkVars: {\n '--ai-soft': 'oklch(0.30 0.08 305)',\n '--ai-tint': 'oklch(0.22 0.04 305)',\n },\n },\n magenta: {\n label: 'Magenta',\n swatch: 'oklch(0.55 0.20 340)',\n vars: {\n '--ai': 'oklch(0.55 0.20 340)',\n '--ai-2': 'oklch(0.60 0.18 25)',\n '--ai-soft': 'oklch(0.96 0.035 340)',\n '--ai-tint': 'oklch(0.985 0.012 340)',\n '--ai-ring': 'oklch(0.55 0.20 340 / 0.20)',\n '--ai-gradient':\n 'linear-gradient(135deg, oklch(0.55 0.20 340), oklch(0.60 0.18 30))',\n '--ai-border':\n 'linear-gradient(135deg, oklch(0.55 0.20 340 / 0.35), oklch(0.60 0.18 30 / 0.35))',\n },\n darkVars: {\n '--ai-soft': 'oklch(0.30 0.09 340)',\n '--ai-tint': 'oklch(0.22 0.05 340)',\n },\n },\n ocean: {\n label: 'Ocean',\n swatch: 'oklch(0.55 0.16 240)',\n vars: {\n '--ai': 'oklch(0.55 0.16 240)',\n '--ai-2': 'oklch(0.58 0.13 195)',\n '--ai-soft': 'oklch(0.96 0.035 240)',\n '--ai-tint': 'oklch(0.985 0.012 240)',\n '--ai-ring': 'oklch(0.55 0.16 240 / 0.20)',\n '--ai-gradient':\n 'linear-gradient(135deg, oklch(0.55 0.16 240), oklch(0.58 0.13 195))',\n '--ai-border':\n 'linear-gradient(135deg, oklch(0.55 0.16 240 / 0.35), oklch(0.58 0.13 195 / 0.35))',\n },\n darkVars: {\n '--ai-soft': 'oklch(0.30 0.08 240)',\n '--ai-tint': 'oklch(0.22 0.04 240)',\n },\n },\n ember: {\n label: 'Ember',\n swatch: 'oklch(0.58 0.18 45)',\n vars: {\n '--ai': 'oklch(0.58 0.18 45)',\n '--ai-2': 'oklch(0.62 0.16 25)',\n '--ai-soft': 'oklch(0.96 0.04 45)',\n '--ai-tint': 'oklch(0.985 0.012 45)',\n '--ai-ring': 'oklch(0.58 0.18 45 / 0.20)',\n '--ai-gradient':\n 'linear-gradient(135deg, oklch(0.58 0.18 45), oklch(0.62 0.16 15))',\n '--ai-border':\n 'linear-gradient(135deg, oklch(0.58 0.18 45 / 0.35), oklch(0.62 0.16 15 / 0.35))',\n },\n darkVars: {\n '--ai-soft': 'oklch(0.30 0.09 45)',\n '--ai-tint': 'oklch(0.22 0.05 45)',\n },\n },\n} as const satisfies Record<string, PresetEntry>;\n\n/* ── Surface tones ─────────────────────────────────────── */\nexport const SURFACE_OPTIONS = {\n cool: {\n label: 'Cool',\n swatch: 'oklch(0.985 0.005 250)',\n vars: {\n '--bg': 'oklch(0.985 0.003 250)',\n '--surface-0': '#ffffff',\n '--surface-1': 'oklch(0.978 0.004 250)',\n '--surface-2': 'oklch(0.955 0.006 250)',\n '--surface-3': 'oklch(0.925 0.008 250)',\n '--sidebar': 'oklch(0.975 0.004 250)',\n '--border': 'oklch(0.925 0.006 250)',\n '--border-strong': 'oklch(0.86 0.008 250)',\n '--divider': 'oklch(0.94 0.005 250)',\n },\n darkVars: {\n '--bg': 'oklch(0.205 0.008 250)',\n '--surface-0': 'oklch(0.165 0.010 250)',\n '--surface-1': 'oklch(0.185 0.009 250)',\n '--surface-2': 'oklch(0.255 0.011 250)',\n '--surface-3': 'oklch(0.300 0.013 250)',\n '--sidebar': 'oklch(0.175 0.009 250)',\n '--border': 'oklch(0.305 0.012 250)',\n '--border-strong': 'oklch(0.430 0.014 250)',\n '--divider': 'oklch(0.255 0.010 250)',\n },\n },\n neutral: {\n label: 'Neutral',\n swatch: 'oklch(0.985 0 0)',\n vars: {\n '--bg': 'oklch(0.985 0 0)',\n '--surface-0': '#ffffff',\n '--surface-1': 'oklch(0.978 0 0)',\n '--surface-2': 'oklch(0.955 0 0)',\n '--surface-3': 'oklch(0.925 0 0)',\n '--sidebar': 'oklch(0.975 0 0)',\n '--border': 'oklch(0.925 0 0)',\n '--border-strong': 'oklch(0.86 0 0)',\n '--divider': 'oklch(0.94 0 0)',\n },\n darkVars: {\n '--bg': 'oklch(0.205 0 0)',\n '--surface-0': 'oklch(0.165 0 0)',\n '--surface-1': 'oklch(0.185 0 0)',\n '--surface-2': 'oklch(0.255 0 0)',\n '--surface-3': 'oklch(0.300 0 0)',\n '--sidebar': 'oklch(0.175 0 0)',\n '--border': 'oklch(0.305 0 0)',\n '--border-strong': 'oklch(0.430 0 0)',\n '--divider': 'oklch(0.255 0 0)',\n },\n },\n warm: {\n label: 'Warm',\n swatch: 'oklch(0.985 0.005 80)',\n vars: {\n '--bg': 'oklch(0.985 0.004 80)',\n '--surface-0': '#ffffff',\n '--surface-1': 'oklch(0.978 0.005 80)',\n '--surface-2': 'oklch(0.955 0.007 80)',\n '--surface-3': 'oklch(0.925 0.009 80)',\n '--sidebar': 'oklch(0.975 0.005 80)',\n '--border': 'oklch(0.925 0.007 80)',\n '--border-strong': 'oklch(0.86 0.009 80)',\n '--divider': 'oklch(0.94 0.006 80)',\n },\n darkVars: {\n '--bg': 'oklch(0.205 0.009 80)',\n '--surface-0': 'oklch(0.165 0.011 80)',\n '--surface-1': 'oklch(0.185 0.010 80)',\n '--surface-2': 'oklch(0.255 0.012 80)',\n '--surface-3': 'oklch(0.300 0.014 80)',\n '--sidebar': 'oklch(0.175 0.010 80)',\n '--border': 'oklch(0.305 0.013 80)',\n '--border-strong': 'oklch(0.430 0.015 80)',\n '--divider': 'oklch(0.255 0.011 80)',\n },\n },\n} as const satisfies Record<string, PresetEntry>;\n\n/* ── Corner radius scales ──────────────────────────────── */\nexport const RADIUS_OPTIONS = {\n sharp: {\n label: 'Sharp',\n vars: {\n '--r-xs': '2px',\n '--r-sm': '3px',\n '--r-md': '4px',\n '--r-lg': '6px',\n '--r-xl': '8px',\n '--r-2xl': '10px',\n },\n },\n balanced: {\n label: 'Balanced',\n vars: {\n '--r-xs': '4px',\n '--r-sm': '6px',\n '--r-md': '8px',\n '--r-lg': '12px',\n '--r-xl': '16px',\n '--r-2xl': '20px',\n },\n },\n soft: {\n label: 'Soft',\n vars: {\n '--r-xs': '6px',\n '--r-sm': '8px',\n '--r-md': '12px',\n '--r-lg': '16px',\n '--r-xl': '20px',\n '--r-2xl': '28px',\n },\n },\n} as const satisfies Record<string, Omit<PresetEntry, 'swatch'>>;\n\n/* ── Density scales ────────────────────────────────────── */\nexport interface DensityEntry {\n label: string;\n space: number;\n font: number;\n}\n\nexport const DENSITY_OPTIONS = {\n compact: { label: 'Compact', space: 0.8, font: 0.95 },\n balanced: { label: 'Balanced', space: 1.0, font: 1.0 },\n spacious: { label: 'Spacious', space: 1.22, font: 1.06 },\n} as const satisfies Record<string, DensityEntry>;\n\n/* ── Font families ─────────────────────────────────────── */\nexport interface FontEntry {\n label: string;\n stack: string;\n}\n\nexport const FONT_OPTIONS = {\n geist: {\n label: 'Geist',\n stack: \"'Geist', ui-sans-serif, -apple-system, sans-serif\",\n },\n inter: {\n label: 'Inter',\n stack: \"'Inter', ui-sans-serif, -apple-system, sans-serif\",\n },\n jakarta: {\n label: 'Plus Jakarta',\n stack: \"'Plus Jakarta Sans', ui-sans-serif, sans-serif\",\n },\n plex: {\n label: 'IBM Plex Sans',\n stack: \"'IBM Plex Sans', ui-sans-serif, sans-serif\",\n },\n} as const satisfies Record<string, FontEntry>;\n\nexport const DISPLAY_OPTIONS = {\n sameAsBody: { label: 'Same as body', stack: null as string | null },\n fraunces: {\n label: 'Fraunces',\n stack: \"'Fraunces', ui-serif, Georgia, serif\",\n },\n instrument: {\n label: 'Instrument Serif',\n stack: \"'Instrument Serif', ui-serif, Georgia, serif\",\n },\n} as const;\n\n/* ── Heading tracking ──────────────────────────────────── */\nexport interface TrackingEntry {\n label: string;\n value: string;\n}\n\nexport const TRACKING_OPTIONS = {\n airy: { label: 'Airy', value: '-0.005em' },\n default: { label: 'Default', value: '-0.02em' },\n tight: { label: 'Tight', value: '-0.035em' },\n} as const satisfies Record<string, TrackingEntry>;\n\n/* ── Theme mode ────────────────────────────────────────── */\nexport const THEME_OPTIONS = {\n light: { label: 'Light' },\n dark: { label: 'Dark' },\n system: { label: 'System' },\n} as const;\n\n/* ── Typed keys ────────────────────────────────────────── */\nexport type ThemeMode = keyof typeof THEME_OPTIONS;\nexport type PrimaryKey = keyof typeof PRIMARY_OPTIONS;\nexport type AiKey = keyof typeof AI_OPTIONS;\nexport type SurfaceKey = keyof typeof SURFACE_OPTIONS;\nexport type RadiusKey = keyof typeof RADIUS_OPTIONS;\nexport type DensityKey = keyof typeof DENSITY_OPTIONS;\nexport type FontKey = keyof typeof FONT_OPTIONS;\nexport type DisplayKey = keyof typeof DISPLAY_OPTIONS;\nexport type TrackingKey = keyof typeof TRACKING_OPTIONS;\n\nexport interface TejaThemeConfig {\n mode: ThemeMode;\n primary: PrimaryKey;\n ai: AiKey;\n surface: SurfaceKey;\n radius: RadiusKey;\n density: DensityKey;\n font: FontKey;\n display: DisplayKey;\n tracking: TrackingKey;\n}\n\n/**\n * Canonical defaults — matches TWEAK_DEFAULTS in design/pages/01-onboarding.html.\n * Light/clinical/violet/warm/spacious/balanced/geist with airy tracking.\n */\nexport const THEME_DEFAULTS: TejaThemeConfig = {\n mode: 'system',\n primary: 'clinical',\n ai: 'violet',\n surface: 'warm',\n radius: 'balanced',\n density: 'spacious',\n font: 'geist',\n display: 'sameAsBody',\n tracking: 'airy',\n};\n","/**\n * applyTheme — pure-DOM function that writes CSS variable overrides onto\n * documentElement based on a TejaThemeConfig. Called by ThemeProvider on\n * every config change. Safe to call in any order (later calls fully override\n * earlier ones because we always start from the full preset set).\n *\n * Lives outside the React tree so the dev TweaksPanel and tests can call it\n * directly.\n */\n\nimport {\n AI_OPTIONS,\n DENSITY_OPTIONS,\n DISPLAY_OPTIONS,\n FONT_OPTIONS,\n PRIMARY_OPTIONS,\n RADIUS_OPTIONS,\n SURFACE_OPTIONS,\n TRACKING_OPTIONS,\n type TejaThemeConfig,\n type ThemeMode,\n} from './presets';\n\nexport type ResolvedTheme = 'light' | 'dark';\n\n/**\n * Resolves a ThemeMode against the OS preference. Pure — does not subscribe.\n * ThemeProvider owns the matchMedia listener and re-invokes applyTheme.\n */\nexport function resolveThemeMode(mode: ThemeMode): ResolvedTheme {\n if (mode === 'light') return 'light';\n if (mode === 'dark') return 'dark';\n if (\n typeof window !== 'undefined' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ) {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Writes every preset's vars onto :root in deterministic layer order:\n * 1. surface (bg/borders/dividers)\n * 2. primary brand\n * 3. AI accent\n * 4. radius\n * 5. font + display + tracking\n * 6. density-scaled spacing tokens\n *\n * Dark-mode variants from each preset are merged on top of the light variant\n * when resolved === 'dark'.\n *\n * Sets `data-theme=\"light\"|\"dark\"` on <html> so token sheets (`tokens.css`)\n * and downstream selectors can react.\n */\nexport function applyTheme(config: TejaThemeConfig): ResolvedTheme {\n if (typeof document === 'undefined') return 'light';\n const root = document.documentElement;\n const resolved = resolveThemeMode(config.mode);\n\n const primary = PRIMARY_OPTIONS[config.primary] ?? PRIMARY_OPTIONS.clinical;\n const ai = AI_OPTIONS[config.ai] ?? AI_OPTIONS.violet;\n const surface = SURFACE_OPTIONS[config.surface] ?? SURFACE_OPTIONS.warm;\n const radius = RADIUS_OPTIONS[config.radius] ?? RADIUS_OPTIONS.balanced;\n const font = FONT_OPTIONS[config.font] ?? FONT_OPTIONS.geist;\n const display = DISPLAY_OPTIONS[config.display] ?? DISPLAY_OPTIONS.sameAsBody;\n const tracking = TRACKING_OPTIONS[config.tracking] ?? TRACKING_OPTIONS.airy;\n const density = DENSITY_OPTIONS[config.density] ?? DENSITY_OPTIONS.spacious;\n\n const merged: Record<string, string> = {\n ...surface.vars,\n ...(resolved === 'dark' ? (surface.darkVars ?? {}) : {}),\n ...primary.vars,\n ...(resolved === 'dark' ? (primary.darkVars ?? {}) : {}),\n ...ai.vars,\n ...(resolved === 'dark' ? (ai.darkVars ?? {}) : {}),\n ...radius.vars,\n };\n\n for (const [key, value] of Object.entries(merged)) {\n root.style.setProperty(key, value);\n }\n\n // Font stack\n root.style.setProperty('--font-sans', font.stack);\n root.style.setProperty('--font-display', display.stack ?? font.stack);\n root.style.setProperty('--track-heading', tracking.value);\n\n // Density: scale --s-* tokens. Components consuming var(--s-N) get density\n // for free; inline pixel values inside JSX are *not* rescaled (the\n // DOM mutator approach is too brittle for production — see TODO).\n // TODO: when migrating screens, prefer var(--s-N) over hardcoded pixels.\n for (const n of [1, 2, 3, 4, 5, 6, 8, 10, 12]) {\n const base = n * 4;\n root.style.setProperty(`--s-${n}`, `${Math.round(base * density.space)}px`);\n }\n\n root.setAttribute('data-theme', resolved);\n root.style.colorScheme = resolved;\n\n return resolved;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\n\nimport { applyTheme, type ResolvedTheme } from './applyTheme';\nimport {\n THEME_DEFAULTS,\n type TejaThemeConfig,\n type ThemeMode,\n} from './presets';\n\nconst STORAGE_KEY = 'teja:theme';\n\nexport interface ThemeProviderProps {\n children: ReactNode;\n /** Overrides for the canonical defaults. Merged shallowly. */\n defaults?: Partial<TejaThemeConfig>;\n /** localStorage key for persistence. Defaults to `teja:theme`. */\n storageKey?: string;\n /** When true, skip localStorage entirely (useful for SSR / Storybook). */\n noPersist?: boolean;\n}\n\nexport interface ThemeContextValue {\n config: TejaThemeConfig;\n /** Current resolved mode after `system` is collapsed against the OS pref. */\n resolved: ResolvedTheme;\n setConfig: (next: Partial<TejaThemeConfig>) => void;\n setMode: (mode: ThemeMode) => void;\n reset: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nfunction readStored(\n key: string,\n fallback: TejaThemeConfig\n): TejaThemeConfig {\n if (typeof window === 'undefined') return fallback;\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return fallback;\n const parsed = JSON.parse(raw) as Partial<TejaThemeConfig>;\n return { ...fallback, ...parsed };\n } catch {\n return fallback;\n }\n}\n\nexport function ThemeProvider({\n children,\n defaults,\n storageKey = STORAGE_KEY,\n noPersist = false,\n}: ThemeProviderProps) {\n const initial = useMemo<TejaThemeConfig>(\n () => ({ ...THEME_DEFAULTS, ...(defaults ?? {}) }),\n [defaults]\n );\n\n const [config, setConfigState] = useState<TejaThemeConfig>(() =>\n noPersist ? initial : readStored(storageKey, initial)\n );\n\n // Bumped whenever the OS preference flips while mode === 'system', so the\n // derived `resolved` below recomputes even though `config` is unchanged.\n const [osTick, setOsTick] = useState(0);\n\n // `resolved` is derived from `config` (and the OS pref via osTick).\n // applyTheme is pure + idempotent and also writes CSS vars to the DOM;\n // computing it during render is safe (the previous useState initializer\n // already invoked it at render time) and keeps behavior identical.\n const resolved = useMemo<ResolvedTheme>(\n () => applyTheme(config),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [config, osTick]\n );\n\n // Persist config to localStorage — a genuine side effect.\n useEffect(() => {\n if (!noPersist && typeof window !== 'undefined') {\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(config));\n } catch {\n // Quota / private mode — silently drop.\n }\n }\n }, [config, noPersist, storageKey]);\n\n // Subscribe to OS preference changes ONLY when mode === 'system'.\n // The handler bumps osTick so the derived theme re-resolves on every flip.\n const mediaRef = useRef<MediaQueryList | null>(null);\n useEffect(() => {\n if (config.mode !== 'system' || typeof window === 'undefined') return;\n if (!mediaRef.current) {\n mediaRef.current = window.matchMedia('(prefers-color-scheme: dark)');\n }\n const mq = mediaRef.current;\n const handler = () => setOsTick((t) => t + 1);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, [config]);\n\n const setConfig = useCallback((next: Partial<TejaThemeConfig>) => {\n setConfigState((prev) => ({ ...prev, ...next }));\n }, []);\n\n const setMode = useCallback((mode: ThemeMode) => {\n setConfigState((prev) => ({ ...prev, mode }));\n }, []);\n\n const reset = useCallback(() => {\n setConfigState(initial);\n }, [initial]);\n\n const value = useMemo<ThemeContextValue>(\n () => ({ config, resolved, setConfig, setMode, reset }),\n [config, resolved, setConfig, setMode, reset]\n );\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n throw new Error('useTheme must be used inside <ThemeProvider>');\n }\n return ctx;\n}\n","/**\n * Font loading helper — appends Google Fonts <link> tags into <head>.\n *\n * Per project decision: Google Fonts CDN ship-as-is (no self-host yet).\n * Idempotent: safe to call from multiple entry points; only the first call\n * actually injects.\n */\n\nconst FONT_HREF =\n 'https://fonts.googleapis.com/css2' +\n '?family=Geist:wght@400;450;500;600;700' +\n '&family=Geist+Mono:wght@400;450;500;600' +\n '&family=Inter:wght@400;500;600;700' +\n '&family=Plus+Jakarta+Sans:wght@400;500;600;700' +\n '&family=IBM+Plex+Sans:wght@400;500;600;700' +\n '&family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600' +\n '&family=Instrument+Serif:ital@0;1' +\n '&display=swap';\n\nconst PRECONNECT = [\n { href: 'https://fonts.googleapis.com', crossOrigin: false },\n { href: 'https://fonts.gstatic.com', crossOrigin: true },\n];\n\nlet injected = false;\n\nexport function loadTejaFonts(): void {\n if (injected || typeof document === 'undefined') return;\n injected = true;\n\n for (const { href, crossOrigin } of PRECONNECT) {\n if (document.head.querySelector(`link[href=\"${href}\"]`)) continue;\n const link = document.createElement('link');\n link.rel = 'preconnect';\n link.href = href;\n if (crossOrigin) link.crossOrigin = 'anonymous';\n document.head.appendChild(link);\n }\n\n if (!document.head.querySelector(`link[href=\"${FONT_HREF}\"]`)) {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = FONT_HREF;\n document.head.appendChild(link);\n }\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\n/**\n * Inline SVG icon set ported from design/components/icons.jsx.\n * 1.5px stroke, 16px viewBox. All glyphs render in `currentColor` by default\n * so an icon inherits the parent's text color unless overridden.\n */\n\nconst ICON_PATHS: Record<string, ReactNode> = {\n dashboard: (\n <path d=\"M2.5 8L8 2.5 13.5 8M3.5 7v6h3v-4h3v4h3V7\" />\n ),\n calendar: (\n <>\n <rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\" />\n <path d=\"M2.5 6.5h11M5.5 2v2M10.5 2v2\" />\n </>\n ),\n video: (\n <>\n <rect x=\"2\" y=\"4\" width=\"9\" height=\"8\" rx=\"1.5\" />\n <path d=\"M11 7l3-1.5v5L11 9z\" />\n </>\n ),\n users: (\n <>\n <circle cx=\"6\" cy=\"6\" r=\"2.5\" />\n <path d=\"M2 13c0-2.2 1.8-4 4-4s4 1.8 4 4M11 6.5a2 2 0 100-2.5M14 13c0-1.8-1.4-3.3-3.5-3.5\" />\n </>\n ),\n file: (\n <>\n <path d=\"M3.5 2h6L13 5.5V14H3.5z\" />\n <path d=\"M9 2v4h4\" />\n </>\n ),\n receipt: (\n <>\n <path d=\"M3.5 2v12l2-1 1.5 1 1.5-1 1.5 1 1.5-1 1.5 1V2z\" />\n <path d=\"M6 5.5h4M6 8h4M6 10.5h2.5\" />\n </>\n ),\n shield: (\n <>\n <path d=\"M8 2L3 4v4c0 3 2 5.5 5 6 3-.5 5-3 5-6V4z\" />\n <path d=\"M6 8l1.5 1.5L10 7\" />\n </>\n ),\n settings: (\n <>\n <circle cx=\"8\" cy=\"8\" r=\"1.8\" />\n <path d=\"M8 1.5v1.8M8 12.7v1.8M14.5 8h-1.8M3.3 8H1.5M12.6 3.4l-1.3 1.3M4.7 11.3l-1.3 1.3M12.6 12.6l-1.3-1.3M4.7 4.7L3.4 3.4\" />\n </>\n ),\n megaphone: (\n <path d=\"M2 6.5v3l8 3v-9zM10 5l3-1.5v9L10 11M5 9.5v3.5h2v-3\" />\n ),\n template: (\n <>\n <rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"1.5\" />\n <path d=\"M2.5 6h11M6 6v7.5\" />\n </>\n ),\n lock: (\n <>\n <rect x=\"3\" y=\"7\" width=\"10\" height=\"6.5\" rx=\"1.5\" />\n <path d=\"M5 7V5a3 3 0 116 0v2\" />\n </>\n ),\n chevronDown: <path d=\"M4 6l4 4 4-4\" />,\n chevronRight: <path d=\"M6 4l4 4-4 4\" />,\n chevronLeft: <path d=\"M10 4L6 8l4 4\" />,\n plus: <path d=\"M8 3v10M3 8h10\" />,\n search: (\n <>\n <circle cx=\"7\" cy=\"7\" r=\"4\" />\n <path d=\"M10.5 10.5L14 14\" />\n </>\n ),\n bell: <path d=\"M4 11V7a4 4 0 118 0v4l1 1.5H3zM6.5 13.5a1.5 1.5 0 003 0\" />,\n filter: <path d=\"M2 3h12l-4.5 5.5V13l-3 1V8.5z\" />,\n download: <path d=\"M8 2v8M5 7l3 3 3-3M3 13h10\" />,\n upload: <path d=\"M8 10V2M5 5l3-3 3 3M3 13h10\" />,\n more: (\n <>\n <circle cx=\"3.5\" cy=\"8\" r=\".9\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"8\" cy=\"8\" r=\".9\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12.5\" cy=\"8\" r=\".9\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n check: <path d=\"M3 8.5l3 3 7-7\" />,\n x: <path d=\"M3.5 3.5l9 9M12.5 3.5l-9 9\" />,\n arrowUp: <path d=\"M8 13V3M4 7l4-4 4 4\" />,\n arrowDown: <path d=\"M8 3v10M4 9l4 4 4-4\" />,\n arrowRight: <path d=\"M3 8h10M9 4l4 4-4 4\" />,\n 'arrow-left': <path d=\"M13 8H3M7 4L3 8l4 4\" />,\n clock: (\n <>\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" />\n <path d=\"M8 4.5V8l2.5 1.5\" />\n </>\n ),\n mail: (\n <>\n <rect x=\"2\" y=\"3.5\" width=\"12\" height=\"9\" rx=\"1.5\" />\n <path d=\"M2.5 5l5.5 4 5.5-4\" />\n </>\n ),\n phone: (\n <path d=\"M3 3.5C3 8 8 13 12.5 13l1-2-3-1.5L9.5 11a8 8 0 01-4.5-4.5L6 5.5 4.5 2.5z\" />\n ),\n note: (\n <>\n <path d=\"M3 3h7l3 3v7H3z\" />\n <path d=\"M5.5 7.5h5M5.5 10h3\" />\n </>\n ),\n chart: <path d=\"M2.5 13h11M4.5 13V8M7.5 13V5M10.5 13V9M13 13V3\" />,\n home: <path d=\"M2 8l6-5.5L14 8v5.5h-4V10H6v3.5H2z\" />,\n trend: (\n <>\n <path d=\"M2 11l4-4 3 2 5-5\" />\n <path d=\"M10 4h4v4\" />\n </>\n ),\n sparkle: (\n <path d=\"M8 2v3M8 11v3M2 8h3M11 8h3M4 4l2 2M10 10l2 2M4 12l2-2M10 6l2-2\" />\n ),\n book: (\n <path d=\"M2.5 3h4.5c1 0 1 1 1 1v9s0-1-1-1H2.5zM13.5 3H9c-1 0-1 1-1 1v9s0-1 1-1h4.5z\" />\n ),\n pill: (\n <>\n <rect x=\"2\" y=\"6\" width=\"12\" height=\"4\" rx=\"2\" transform=\"rotate(-30 8 8)\" />\n <path d=\"M8 4.5l-3.5 6\" />\n </>\n ),\n flag: <path d=\"M3.5 13V2.5M3.5 3h8l-1.5 2.5L11.5 8h-8\" />,\n expand: <path d=\"M10 2h4v4M14 2L9 7M6 14H2v-4M2 14l5-5\" />,\n globe: (\n <>\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" />\n <path d=\"M2.5 8h11M8 2.5c1.8 2 2.7 4 2.7 5.5s-.9 3.5-2.7 5.5c-1.8-2-2.7-4-2.7-5.5s.9-3.5 2.7-5.5z\" />\n </>\n ),\n browser: (\n <>\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1.5\" />\n <path d=\"M2 6h12M4 4.5h.5M5.8 4.5h.5\" />\n </>\n ),\n compass: (\n <>\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" />\n <path d=\"M10.5 5.5L9 9l-3.5 1.5L7 7z\" />\n </>\n ),\n code: (\n <path d=\"M5.5 4.5L2 8l3.5 3.5M10.5 4.5L14 8l-3.5 3.5M9.5 3l-3 10\" />\n ),\n send: (\n <>\n <path d=\"M14 2L2 7l5 2 2 5z\" />\n <path d=\"M7 9l7-7\" />\n </>\n ),\n edit: <path d=\"M2 14l4-1L13 6l-3-3-7 7zM10 3l3 3\" />,\n info: (\n <>\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" />\n <path d=\"M8 7v4M8 5.2v.1\" />\n </>\n ),\n signature: (\n <>\n <path d=\"M2.5 12c2-3 4-7 6-7s1 4 3 4 2-2 2-2\" />\n <path d=\"M2 14h12\" />\n </>\n ),\n clipboard: (\n <>\n <rect x=\"3.5\" y=\"3\" width=\"9\" height=\"11\" rx=\"1.5\" />\n <path d=\"M6 3v-.5a1.5 1.5 0 013 0V3M6 7h4M6 9.5h4M6 12h2.5\" />\n </>\n ),\n card: (\n <>\n <rect x=\"2\" y=\"4\" width=\"12\" height=\"8.5\" rx=\"1.5\" />\n <path d=\"M2 7h12M4 10h2.5M9 10h3\" />\n </>\n ),\n link: (\n <path d=\"M7 9.5L6 10.5a2.5 2.5 0 11-3.5-3.5L4 5.5M9 6.5L10 5.5a2.5 2.5 0 113.5 3.5L12 10.5M6 10l4-4\" />\n ),\n user: (\n <>\n <circle cx=\"8\" cy=\"5.5\" r=\"2.5\" />\n <path d=\"M3 13.5c0-2.5 2.2-4.5 5-4.5s5 2 5 4.5\" />\n </>\n ),\n external: <path d=\"M6 2H3v11h11V10M8 2h6v6M14 2L7 9\" />,\n bookmark: <path d=\"M4 2.5h8V14l-4-2.5L4 14z\" />,\n cake: (\n <>\n <path d=\"M8 2v2M8 1.5a.6.6 0 000 1\" />\n <path d=\"M3 8.5c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v4.5H3z\" />\n <path d=\"M3 10.5c.8.7 1.5.7 2.3 0s1.5-.7 2.4 0 1.5.7 2.3 0 1.5-.7 2.7 0\" />\n </>\n ),\n 'alert-circle': (\n <>\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" />\n <path d=\"M8 5v3.5M8 10.5v.1\" />\n </>\n ),\n 'alert-triangle': (\n <>\n <path d=\"M8 2.5L14 13H2z\" />\n <path d=\"M8 6.5v3M8 11v.1\" />\n </>\n ),\n 'check-circle': (\n <>\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" />\n <path d=\"M5.5 8l2 2 3-4\" />\n </>\n ),\n};\n\nexport type IconName = keyof typeof ICON_PATHS;\n\nexport interface IconProps {\n name: IconName;\n size?: number;\n color?: string;\n strokeWidth?: number;\n style?: CSSProperties;\n}\n\nexport function Icon({\n name,\n size = 16,\n color = 'currentColor',\n strokeWidth = 1.5,\n style,\n}: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ flexShrink: 0, display: 'block', ...style }}\n >\n {ICON_PATHS[name] ?? null}\n </svg>\n );\n}\n\nexport const ICON_NAMES = Object.keys(ICON_PATHS) as IconName[];\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactNode,\n} from 'react';\n\nimport { Icon, type IconName } from './Icon';\n\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'ghost'\n | 'danger'\n | 'soft';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nconst VARIANT_STYLES: Record<ButtonVariant, CSSProperties> = {\n primary: {\n background: 'var(--primary)',\n color: 'white',\n border: '1px solid var(--primary)',\n },\n secondary: {\n background: 'var(--surface-0)',\n color: 'var(--ink-1)',\n border: '1px solid var(--border-strong)',\n boxShadow: 'var(--shadow-xs)',\n },\n ghost: {\n background: 'transparent',\n color: 'var(--ink-2)',\n border: '1px solid transparent',\n },\n danger: {\n background: 'var(--surface-0)',\n color: 'var(--danger)',\n border: '1px solid var(--border-strong)',\n },\n soft: {\n background: 'var(--primary-soft)',\n color: 'var(--primary)',\n border: '1px solid transparent',\n },\n};\n\nconst SIZE_DIMS: Record<ButtonSize, { h: number; pad: string; fz: number }> = {\n sm: { h: 28, pad: '0 10px', fz: 12 },\n md: { h: 32, pad: '0 12px', fz: 13 },\n lg: { h: 38, pad: '0 16px', fz: 14 },\n};\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Leading icon name from the Teja icon set. */\n icon?: IconName;\n /** Trailing icon name. */\n iconRight?: IconName;\n /** Stretch to fill container width. */\n full?: boolean;\n children?: ReactNode;\n /** Forwarded as `data-testid` on the `<button>` element. */\n testId?: string;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'secondary',\n size = 'md',\n icon,\n iconRight,\n full,\n children,\n style,\n type = 'button',\n disabled,\n testId,\n ...rest\n },\n ref\n) {\n const dims = SIZE_DIMS[size];\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n data-testid={testId}\n style={{\n height: dims.h,\n padding: dims.pad,\n fontSize: dims.fz,\n fontWeight: 500,\n borderRadius: 'var(--r-md)',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n whiteSpace: 'nowrap',\n width: full ? '100%' : 'auto',\n justifyContent: 'center',\n transition: 'background .12s, transform .06s',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n ...VARIANT_STYLES[variant],\n ...style,\n }}\n {...rest}\n >\n {icon ? <Icon name={icon} size={14} /> : null}\n {children}\n {iconRight ? <Icon name={iconRight} size={14} /> : null}\n </button>\n );\n});\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nexport type BadgeTone =\n | 'neutral'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'ai';\nexport type BadgeSize = 'sm' | 'md';\n\nconst TONES: Record<BadgeTone, { bg: string; fg: string; dot: string }> = {\n neutral: { bg: 'var(--surface-2)', fg: 'var(--ink-2)', dot: 'var(--ink-3)' },\n primary: {\n bg: 'var(--primary-soft)',\n fg: 'var(--primary)',\n dot: 'var(--primary)',\n },\n success: {\n bg: 'var(--success-soft)',\n fg: 'var(--success)',\n dot: 'var(--success)',\n },\n warning: {\n bg: 'var(--warning-soft)',\n fg: 'oklch(0.42 0.10 75)',\n dot: 'var(--warning)',\n },\n danger: {\n bg: 'var(--danger-soft)',\n fg: 'var(--danger)',\n dot: 'var(--danger)',\n },\n info: { bg: 'var(--info-soft)', fg: 'var(--info)', dot: 'var(--info)' },\n ai: { bg: 'var(--ai-soft)', fg: 'var(--ai)', dot: 'var(--ai)' },\n};\n\nexport interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n tone?: BadgeTone;\n size?: BadgeSize;\n /** Show a leading colored dot. */\n dot?: boolean;\n children?: ReactNode;\n /** Forwarded as `data-testid` for e2e selectors. */\n 'data-testid'?: string;\n /** Alias of `data-testid` to keep the API uniform across primitives. */\n testId?: string;\n}\n\nexport function Badge({\n tone = 'neutral',\n size = 'md',\n dot,\n children,\n style,\n testId,\n 'data-testid': dataTestId,\n ...rest\n}: BadgeProps) {\n const t = TONES[tone];\n const h = size === 'sm' ? 18 : 22;\n const fz = size === 'sm' ? 10.5 : 11.5;\n const merged: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 5,\n height: h,\n padding: '0 8px',\n borderRadius: 'var(--r-pill)',\n background: t.bg,\n color: t.fg,\n fontSize: fz,\n fontWeight: 500,\n letterSpacing: '0.01em',\n lineHeight: 1,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n ...style,\n };\n return (\n <span data-testid={dataTestId ?? testId} style={merged} {...rest}>\n {dot ? (\n <span\n aria-hidden\n style={{\n width: 6,\n height: 6,\n borderRadius: 999,\n background: t.dot,\n flexShrink: 0,\n }}\n />\n ) : null}\n {children}\n </span>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nexport interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Inner padding in pixels. Defaults to 20. */\n padding?: number;\n children?: ReactNode;\n /** Forwarded as `data-testid` on the root div. */\n testId?: string;\n}\n\nexport function Card({ padding = 20, children, style, testId, ...rest }: CardProps) {\n const merged: CSSProperties = {\n background: 'var(--surface-0)',\n borderRadius: 'var(--r-lg)',\n border: '1px solid var(--border)',\n padding,\n ...style,\n };\n return (\n <div data-testid={testId} style={merged} {...rest}>\n {children}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\n/**\n * Teja brand mark — a 4-facet diamond in pink/purple/red/orange.\n * Source: /assets/teja-logo.svg.\n */\nexport interface TejaMarkProps {\n size?: number;\n style?: CSSProperties;\n testId?: string;\n}\n\nexport function TejaMark({ size = 22, style, testId }: TejaMarkProps) {\n return (\n <svg\n data-testid={testId}\n width={size}\n height={size}\n viewBox=\"55 10 190 195\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ display: 'block', flexShrink: 0, ...style }}\n >\n <path\n d=\"M149 67.7212L238.062 119.106V60.8976L199.494 38.6468L149 67.7212Z\"\n fill=\"#FE73B8\"\n />\n <path\n d=\"M157.366 14.9126C152.204 11.9458 145.855 11.9458 140.693 14.9126L59.9968 61.4909V119.699L199.495 39.2401L157.366 14.9126Z\"\n fill=\"#9887FE\"\n />\n <path\n d=\"M149 147.676L59.9374 96.3505V154.559L98.5055 176.809L149 147.676Z\"\n fill=\"#FF456F\"\n />\n <path\n d=\"M140.634 201.137C145.796 204.104 152.145 204.104 157.307 201.137L238.003 154.559V96.3505L98.5055 176.869L140.634 201.137Z\"\n fill=\"#FF9450\"\n />\n </svg>\n );\n}\n\nexport interface TejaLogoProps {\n size?: number;\n /** When false, only renders the mark (no wordmark). */\n showWord?: boolean;\n testId?: string;\n}\n\nexport function TejaLogo({ size = 24, showWord = true, testId }: TejaLogoProps) {\n return (\n <div\n data-testid={testId}\n style={{ display: 'flex', alignItems: 'center', gap: 8 }}\n >\n <TejaMark size={size} testId={testId ? `${testId}-mark` : undefined} />\n {showWord ? (\n <span\n style={{\n fontFamily: 'var(--font-display)',\n fontWeight: 600,\n fontSize: Math.round(size * 0.78),\n letterSpacing: '-0.035em',\n color: 'var(--ink-1)',\n lineHeight: 1,\n }}\n >\n teja\n </span>\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from './Icon';\n\n/**\n * FieldHint — below-field helper / error text.\n *\n * Ported from design/components/primitives.jsx. Renders a small line of\n * text under a form control; in `error` tone it prepends an `alert-circle`\n * icon in `var(--danger)`.\n */\nexport type FieldHintTone = 'error' | 'hint';\n\nexport interface FieldHintProps {\n tone?: FieldHintTone;\n children?: ReactNode;\n /** data-testid forwarded to the root. */\n testId?: string;\n}\n\nexport function FieldHint({ tone = 'hint', children, testId }: FieldHintProps) {\n const isError = tone === 'error';\n return (\n <div\n data-testid={testId}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 5,\n marginTop: 5,\n fontSize: 11.5,\n color: isError ? 'var(--danger)' : 'var(--ink-3)',\n }}\n >\n {isError ? (\n <Icon name=\"alert-circle\" size={11} color=\"var(--danger)\" />\n ) : null}\n <span>{children}</span>\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nimport { Icon, type IconName } from './Icon';\nimport { FieldHint } from './FieldHint';\n\n/**\n * Shared option shape for all option-based theme controls\n * (Select, Combobox, MultiSelect, and the *Picker wrappers).\n *\n * Ported from `design/components/inputs.jsx`.\n */\nexport interface TejaOption {\n value: string;\n label: string;\n /** Secondary line shown right-aligned in the option row. */\n sub?: string;\n /** Optional leading icon (theme Icon set). */\n icon?: IconName;\n disabled?: boolean;\n}\n\n/**\n * Field-chrome props mixed into every self-wrapping input control. When\n * `label` is present the control renders its own label + hint/error tail via\n * `<FieldShell>`; otherwise it renders the bare control.\n */\nexport interface FieldChromeProps {\n label?: string;\n hint?: ReactNode;\n /**\n * Error treatment:\n * - `true` → red border only (message rendered elsewhere)\n * - `ReactNode` → red border + message below\n * - nullish/false → no error\n */\n error?: ReactNode | true;\n required?: boolean;\n /** Full-width container. Defaults to true. */\n full?: boolean;\n disabled?: boolean;\n /** Root test id; children are suffixed (`-error`, `-hint`, etc.). */\n testId?: string;\n}\n\nexport function hasFieldError(error: FieldChromeProps['error']): boolean {\n return error !== undefined && error !== null && error !== false;\n}\n\n/** The error message node when one should render below the field. */\nexport function fieldErrorNode(error: FieldChromeProps['error']): ReactNode {\n return hasFieldError(error) && error !== true ? error : null;\n}\n\n/**\n * The visual contract for a control box (the input/trigger surface), shared by\n * `Field`, `TextInput`, and the pickers. 36px, surface-0, strong border,\n * r-md, shadow-xs; red border on error, primary ring on focus/open.\n */\nexport function controlBoxStyle(opts: {\n focused?: boolean;\n error?: boolean;\n disabled?: boolean;\n height?: number;\n}): CSSProperties {\n const { focused, error, disabled, height = 36 } = opts;\n return {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n minHeight: height,\n height,\n padding: '0 12px',\n background: disabled ? 'var(--surface-1)' : 'var(--surface-0)',\n border: `1px solid ${error ? 'var(--danger)' : focused ? 'var(--primary)' : 'var(--border-strong)'}`,\n borderRadius: 'var(--r-md)',\n boxShadow: focused && !error ? '0 0 0 3px var(--primary-ring)' : 'var(--shadow-xs)',\n transition: 'border-color .12s, box-shadow .12s',\n opacity: disabled ? 0.6 : 1,\n boxSizing: 'border-box',\n };\n}\n\nexport interface FieldShellProps extends FieldChromeProps {\n /** The control element (input box, trigger, etc.). */\n children: ReactNode;\n /** Associates the label with the control. */\n htmlFor?: string;\n}\n\n/**\n * FieldShell — label + control slot + hint/error tail. The single source of\n * truth for field chrome across the theme so `Field` and every input control\n * stay visually identical.\n */\nexport function FieldShell({\n label,\n hint,\n error,\n required,\n full = true,\n htmlFor,\n testId,\n children,\n}: FieldShellProps) {\n const errorNode = fieldErrorNode(error);\n const errored = hasFieldError(error);\n\n const labelText = label ? (\n <span style={{ fontSize: 11.5, color: 'var(--ink-2)', fontWeight: 500, display: 'inline-flex', alignItems: 'center', gap: 4 }}>\n {label}\n {required ? <span style={{ color: 'var(--danger)' }}>*</span> : null}\n </span>\n ) : null;\n\n // No label → render the control bare (plus an optional error/hint tail) so it\n // can sit inside a caller-provided layout.\n const tail = errorNode ? (\n <FieldHint tone=\"error\" testId={testId ? `${testId}-error` : undefined}>\n {errorNode}\n </FieldHint>\n ) : !errored && hint ? (\n <span\n data-testid={testId ? `${testId}-hint` : undefined}\n style={{ fontSize: 11.5, color: 'var(--ink-3)', lineHeight: 1.4 }}\n >\n {hint}\n </span>\n ) : null;\n\n if (!label) {\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6, width: full ? '100%' : 'auto' }}>\n {children}\n {tail}\n </div>\n );\n }\n\n // The label intentionally is NOT a <label> element here because controls like\n // Select/Combobox manage their own focus target; we use htmlFor only when a\n // real input id is provided (TextInput / Field).\n const LabelTag = htmlFor ? 'label' : 'div';\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6, width: full ? '100%' : 'auto' }}>\n <LabelTag {...(htmlFor ? { htmlFor } : {})} style={{ display: 'inline-flex' }}>\n {labelText}\n </LabelTag>\n {children}\n {tail}\n </div>\n );\n}\n\n/** Re-export so option-based controls import the icon helper from one place. */\nexport { Icon };\n","import {\n forwardRef,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\n\nimport { FieldHint } from './FieldHint';\nimport { controlBoxStyle, hasFieldError, fieldErrorNode } from './fieldShell';\n\n/**\n * Field — labeled text input with optional hint and trailing slot.\n *\n * Composition pattern from design/screens/register.jsx:\n * <Field label=\"Email\" hint=\"…\" trailing={<Badge>…</Badge>} />\n *\n * Renders a <label> wrapping the input so the entire field area is clickable.\n */\nexport interface FieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label: string;\n hint?: ReactNode;\n /** Right-side slot inside the field box (e.g., a strength Badge). */\n trailing?: ReactNode;\n /** Use monospace input font (e.g., for password masking). */\n mono?: boolean;\n /** Full-width container. Defaults to true. */\n full?: boolean;\n /**\n * Error treatment for the field.\n * - `true`: red border only (caller renders the message elsewhere, e.g. a sibling Alert)\n * - `ReactNode`: red border + message rendered below via `<FieldHint tone=\"error\">`\n * - `undefined | null | false`: no error treatment\n */\n error?: ReactNode | true;\n /**\n * Test ID — applied to the wrapping `<label>` as the root testid.\n * The input gets `${testId}-input`, error gets `${testId}-error`,\n * hint gets `${testId}-hint`. Native `data-testid` (e.g., from\n * `react-hook-form` register) is preserved on the input too.\n */\n testId?: string;\n}\n\nexport const Field = forwardRef<HTMLInputElement, FieldProps>(function Field(\n {\n label,\n hint,\n trailing,\n mono,\n full = true,\n error,\n id,\n style: _style,\n testId,\n ...inputProps\n },\n ref\n) {\n const inputId =\n id ?? `field-${label.toLowerCase().replace(/[^a-z0-9]+/g, '-')}`;\n\n // If the consumer already passed `data-testid` via inputProps (e.g., from\n // `register(\"email\")`), let that win for the input. Otherwise derive from\n // the testId root.\n const inputTestId =\n (inputProps as { 'data-testid'?: string })['data-testid'] ??\n (testId ? `${testId}-input` : undefined);\n\n // Treat `true`, non-empty nodes, and 0 as errored; only undefined/null/false\n // are \"no error\". A `ReactNode` is rendered below; `true` only flips the\n // border red without rendering any message. Shared with the option-based\n // controls via fieldShell so error semantics never drift.\n const hasError = hasFieldError(error);\n const errorNode = fieldErrorNode(error);\n\n return (\n <label\n htmlFor={inputId}\n data-testid={testId}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n width: full ? '100%' : 'auto',\n }}\n >\n <span\n style={{\n fontSize: 11.5,\n color: 'var(--ink-2)',\n fontWeight: 500,\n }}\n >\n {label}\n </span>\n <div style={controlBoxStyle({ error: hasError })}>\n <input\n ref={ref}\n id={inputId}\n style={{\n flex: 1,\n minWidth: 0,\n height: '100%',\n border: 'none',\n outline: 'none',\n background: 'transparent',\n fontSize: 13.5,\n color: 'var(--ink-1)',\n fontFamily: mono ? 'var(--font-mono)' : 'inherit',\n letterSpacing: mono ? '0.02em' : 'inherit',\n }}\n {...inputProps}\n data-testid={inputTestId}\n />\n {trailing ? <span style={{ flexShrink: 0 }}>{trailing}</span> : null}\n </div>\n {errorNode ? (\n <FieldHint\n tone=\"error\"\n testId={testId ? `${testId}-error` : undefined}\n >\n {errorNode}\n </FieldHint>\n ) : hasError ? null : hint ? (\n <span\n data-testid={testId ? `${testId}-hint` : undefined}\n style={{\n fontSize: 11.5,\n color: 'var(--ink-3)',\n lineHeight: 1.4,\n }}\n >\n {hint}\n </span>\n ) : null}\n </label>\n );\n});\n","import {\n forwardRef,\n useId,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\n\nimport {\n FieldShell,\n controlBoxStyle,\n hasFieldError,\n type FieldChromeProps,\n} from './fieldShell';\nimport { Icon, type IconName } from './Icon';\n\n/**\n * TextInput — bare styled text input matching the design's input box. When a\n * `label` is supplied it self-wraps in `<FieldShell>`; otherwise it renders the\n * boxed control alone so it can sit inside a caller layout.\n *\n * Ported from `design/components/inputs.jsx` (TextInput) + `Field` chrome.\n *\n * @example\n * <TextInput label=\"Practice name\" hint=\"Shown to clients\" value={v} onChange={…} />\n * <TextInput icon=\"search\" placeholder=\"Search…\" />\n */\nexport interface TextInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'>,\n FieldChromeProps {\n /** Leading icon inside the box. */\n icon?: IconName;\n /** Trailing slot inside the box (e.g., a Badge or clear button). */\n trailing?: ReactNode;\n /** Monospace input font. */\n mono?: boolean;\n}\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n function TextInput(\n {\n label,\n hint,\n error,\n required,\n full = true,\n disabled,\n testId,\n icon,\n trailing,\n mono,\n id,\n ...inputProps\n },\n ref\n ) {\n const autoId = useId();\n const inputId = id ?? `ti-${autoId}`;\n const errored = hasFieldError(error);\n const inputTestId =\n (inputProps as { 'data-testid'?: string })['data-testid'] ??\n (testId ? `${testId}-input` : undefined);\n\n const box = (\n <div style={controlBoxStyle({ error: errored, disabled })}>\n {icon ? <Icon name={icon} size={13} color=\"var(--ink-3)\" /> : null}\n <input\n ref={ref}\n id={inputId}\n disabled={disabled}\n {...inputProps}\n data-testid={inputTestId}\n style={{\n flex: 1,\n minWidth: 0,\n height: '100%',\n border: 'none',\n outline: 'none',\n background: 'transparent',\n fontSize: 13.5,\n color: 'var(--ink-1)',\n fontFamily: mono ? 'var(--font-mono)' : 'inherit',\n letterSpacing: mono ? '0.02em' : 'inherit',\n }}\n />\n {trailing ? <span style={{ flexShrink: 0 }}>{trailing}</span> : null}\n </div>\n );\n\n return (\n <div data-testid={testId} style={{ width: full ? '100%' : 'auto' }}>\n <FieldShell\n label={label}\n hint={hint}\n error={error}\n required={required}\n full={full}\n htmlFor={inputId}\n testId={testId}\n >\n {box}\n </FieldShell>\n </div>\n );\n }\n);\n","import {\n forwardRef,\n useId,\n type TextareaHTMLAttributes,\n} from 'react';\n\nimport {\n FieldShell,\n hasFieldError,\n type FieldChromeProps,\n} from './fieldShell';\n\n/**\n * Textarea — multi-line text input matching the design's input box. Self-wraps\n * in `<FieldShell>` when a `label` is supplied.\n *\n * Ported from `design/components/patterns.jsx` (Textarea).\n *\n * @example\n * <Textarea label=\"Practice description\" hint=\"Up to 400 characters\" rows={3} />\n */\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'rows'>,\n FieldChromeProps {\n rows?: number;\n mono?: boolean;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n label,\n hint,\n error,\n required,\n full = true,\n disabled,\n testId,\n rows = 4,\n mono,\n id,\n style,\n ...textareaProps\n },\n ref\n ) {\n const autoId = useId();\n const taId = id ?? `ta-${autoId}`;\n const errored = hasFieldError(error);\n const inputTestId =\n (textareaProps as { 'data-testid'?: string })['data-testid'] ??\n (testId ? `${testId}-input` : undefined);\n\n const control = (\n <textarea\n ref={ref}\n id={taId}\n rows={rows}\n disabled={disabled}\n {...textareaProps}\n data-testid={inputTestId}\n style={{\n width: '100%',\n padding: 10,\n minHeight: rows * 20 + 20,\n border: `1px solid ${errored ? 'var(--danger)' : 'var(--border-strong)'}`,\n borderRadius: 'var(--r-md)',\n background: disabled ? 'var(--surface-1)' : 'var(--surface-0)',\n boxShadow: 'var(--shadow-xs)',\n color: 'var(--ink-1)',\n fontSize: 13.5,\n lineHeight: 1.55,\n outline: 'none',\n resize: 'vertical',\n fontFamily: mono ? 'var(--font-mono)' : 'inherit',\n boxSizing: 'border-box',\n ...style,\n }}\n />\n );\n\n return (\n <div data-testid={testId} style={{ width: full ? '100%' : 'auto' }}>\n <FieldShell\n label={label}\n hint={hint}\n error={error}\n required={required}\n full={full}\n htmlFor={taId}\n testId={testId}\n >\n {control}\n </FieldShell>\n </div>\n );\n }\n);\n","import { useMemo } from 'react';\nimport type { CSSProperties } from 'react';\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n} from '@headlessui/react';\n\nimport {\n FieldShell,\n controlBoxStyle,\n hasFieldError,\n type TejaOption,\n type FieldChromeProps,\n} from './fieldShell';\nimport { Icon } from './Icon';\n\nexport interface SelectProps extends FieldChromeProps {\n /** Selectable options. */\n items: TejaOption[];\n /** Current value, or `null` when nothing is selected. */\n value: string | null;\n onChange?: (value: string) => void;\n /** Trigger text when no value is selected. Defaults to `Select…`. */\n placeholder?: string;\n /** Panel placement relative to the trigger. Defaults to `bottom`. */\n placement?: 'bottom' | 'top';\n}\n\n/** Resets the Headless button/option chrome so the inner styled box owns the look. */\nconst BUTTON_RESET: CSSProperties = {\n display: 'block',\n width: '100%',\n border: 0,\n padding: 0,\n margin: 0,\n background: 'transparent',\n font: 'inherit',\n};\n\nconst OPTION_RESET: CSSProperties = {\n display: 'block',\n listStyle: 'none',\n outline: 'none',\n};\n\nconst PANEL_STYLE: CSSProperties = {\n zIndex: 60,\n maxHeight: 240,\n overflowY: 'auto',\n width: 'var(--button-width)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--r-md)',\n boxShadow: 'var(--shadow-pop)',\n padding: 4,\n outline: 'none',\n};\n\nfunction optionStyle(active: boolean, selected: boolean, disabled: boolean): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '7px 8px',\n borderRadius: 'var(--r-sm)',\n fontSize: 12.5,\n color: disabled ? 'var(--ink-4)' : 'var(--ink-1)',\n background: active ? 'var(--surface-2)' : 'transparent',\n fontWeight: selected ? 500 : 400,\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n}\n\nconst LABEL_STYLE: CSSProperties = {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\n/**\n * Select — single-value dropdown (listbox) built on Headless UI v2 `Listbox`,\n * restyled to the theme's \"Clinical Calm\" tokens. The trigger is a 36px control\n * box (surface-0, strong border, r-md) that shows the selected label or the\n * placeholder in `--ink-4`; the chevron rotates when open. The panel renders on\n * `--surface-0` with `--shadow-pop`; the selected row shows a `check` Icon in\n * `--primary` and the active row uses `--surface-2`.\n *\n * Ported from `design/components/inputs.jsx` (`Select`).\n */\nexport function Select({\n items,\n value,\n onChange,\n placeholder = 'Select…',\n placement = 'bottom',\n label,\n hint,\n error,\n required,\n full = true,\n disabled,\n testId,\n}: SelectProps) {\n const errored = hasFieldError(error);\n const selected = useMemo(\n () => items.find((o) => o.value === value),\n [items, value],\n );\n\n const control = (\n <Listbox\n value={value}\n onChange={(next: string | null) => {\n if (next != null) onChange?.(next);\n }}\n disabled={disabled}\n >\n <ListboxButton\n data-testid={testId ? `${testId}-trigger` : undefined}\n style={BUTTON_RESET}\n disabled={disabled}\n >\n {({ open }: { open: boolean }) => (\n <span\n style={{\n ...controlBoxStyle({ focused: open, error: errored, disabled }),\n justifyContent: 'space-between',\n fontSize: 12.5,\n textAlign: 'left',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <span\n style={{\n ...LABEL_STYLE,\n color: selected ? 'var(--ink-1)' : 'var(--ink-4)',\n }}\n >\n {selected ? selected.label : placeholder}\n </span>\n <Icon\n name=\"chevronDown\"\n size={11}\n color=\"var(--ink-3)\"\n style={{\n transform: open ? 'rotate(180deg)' : 'none',\n transition: 'transform .12s',\n }}\n />\n </span>\n )}\n </ListboxButton>\n\n <ListboxOptions\n anchor={placement === 'top' ? 'top start' : 'bottom start'}\n data-testid={testId ? `${testId}-options` : undefined}\n style={PANEL_STYLE}\n >\n {items.length === 0 && (\n <div style={{ padding: 8, fontSize: 12, color: 'var(--ink-3)' }}>\n No options\n </div>\n )}\n {items.map((opt, i) => (\n <ListboxOption\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n data-testid={testId ? `${testId}-option-${i}` : undefined}\n style={OPTION_RESET}\n >\n {({ focus, selected }: { focus: boolean; selected: boolean }) => (\n <span style={optionStyle(focus, selected, !!opt.disabled)}>\n {opt.icon && <Icon name={opt.icon} size={13} color=\"var(--ink-3)\" />}\n <span style={LABEL_STYLE}>{opt.label}</span>\n {opt.sub && (\n <span style={{ fontSize: 11, color: 'var(--ink-3)', flexShrink: 0 }}>\n {opt.sub}\n </span>\n )}\n {selected && <Icon name=\"check\" size={13} color=\"var(--primary)\" />}\n </span>\n )}\n </ListboxOption>\n ))}\n </ListboxOptions>\n </Listbox>\n );\n\n return (\n <FieldShell\n label={label}\n hint={hint}\n error={error}\n required={required}\n full={full}\n testId={testId}\n >\n {control}\n </FieldShell>\n );\n}\n","import { Fragment, useMemo, useState } from 'react';\nimport {\n Combobox as HeadlessCombobox,\n ComboboxButton,\n ComboboxInput,\n ComboboxOption,\n ComboboxOptions,\n Transition,\n} from '@headlessui/react';\n\nimport {\n FieldShell,\n controlBoxStyle,\n hasFieldError,\n type FieldChromeProps,\n type TejaOption,\n} from './fieldShell';\nimport { Icon } from './Icon';\n\nexport interface ComboboxProps extends FieldChromeProps {\n items: TejaOption[];\n value: string | null;\n /** Called with `null` when the value is cleared. */\n onChange?: (value: string | null) => void;\n /** Placeholder shown when no value is selected. Defaults to 'Search…'. */\n placeholder?: string;\n /** When false, behaves like a non-filtering listbox. Defaults to true. */\n searchable?: boolean;\n /** Server-side search hook; called on every input change. */\n onSearch?: (query: string) => void;\n /** Shows a loading row instead of options. */\n isLoading?: boolean;\n /** Text for the loading row. Defaults to 'Loading…'. */\n loadingText?: string;\n /** Text for the empty state. Defaults to 'No results'. */\n emptyText?: string;\n}\n\n/** Render one option row's inner content (icon + label + sub). */\nfunction OptionContent({ opt }: { opt: TejaOption }) {\n return (\n <>\n {opt.icon ? <Icon name={opt.icon} size={13} color=\"var(--ink-3)\" /> : null}\n <span\n style={{\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {opt.label}\n </span>\n {opt.sub ? (\n <span style={{ fontSize: 11, color: 'var(--ink-3)', flexShrink: 0 }}>{opt.sub}</span>\n ) : null}\n </>\n );\n}\n\n/**\n * Combobox — searchable single-select built on Headless UI v2 `Combobox`.\n *\n * Ported from `design/components/inputs.jsx`. Trigger is the theme 36px control\n * box with a leading `search` icon, a text input, a clear `x` button when a\n * value is selected, and a chevron. The panel uses `--surface-0` + `--shadow-pop`\n * with the selected row marked by a `check` in `--primary`.\n */\nexport function Combobox({\n items,\n value,\n onChange,\n placeholder = 'Search…',\n searchable = true,\n onSearch,\n isLoading = false,\n loadingText = 'Loading…',\n emptyText = 'No results',\n label,\n hint,\n error,\n required,\n full = true,\n disabled = false,\n testId,\n}: ComboboxProps) {\n const [query, setQuery] = useState('');\n const errored = hasFieldError(error);\n\n const selected = useMemo(() => items.find((o) => o.value === value), [items, value]);\n\n const filtered = useMemo(() => {\n if (!searchable || query === '') return items;\n const q = query.toLowerCase();\n return items.filter(\n (o) => o.label.toLowerCase().includes(q) || (o.sub ?? '').toLowerCase().includes(q),\n );\n }, [items, query, searchable]);\n\n const handleChange = (next: string | null) => {\n onChange?.(next);\n setQuery('');\n };\n\n const handleClear = () => {\n onChange?.(null);\n setQuery('');\n };\n\n const control = (\n <div style={{ position: 'relative' }}>\n <HeadlessCombobox\n value={value ?? null}\n onChange={handleChange}\n disabled={disabled}\n immediate\n >\n <div style={{ ...controlBoxStyle({ error: errored, disabled }), gap: 8 }}>\n <Icon name=\"search\" size={13} color=\"var(--ink-3)\" />\n <ComboboxInput\n aria-label={!label ? placeholder : undefined}\n displayValue={() => selected?.label ?? ''}\n placeholder={placeholder}\n data-testid={testId ? `${testId}-input` : undefined}\n onChange={(e) => {\n setQuery(e.target.value);\n onSearch?.(e.target.value);\n }}\n style={{\n flex: 1,\n minWidth: 0,\n border: 0,\n outline: 0,\n background: 'transparent',\n fontSize: 12.5,\n color: 'var(--ink-1)',\n }}\n />\n {selected ? (\n <button\n type=\"button\"\n title=\"Clear\"\n aria-label=\"Clear\"\n data-testid={testId ? `${testId}-clear` : undefined}\n onClick={(e) => {\n e.stopPropagation();\n handleClear();\n }}\n style={{\n border: 0,\n background: 'transparent',\n padding: 0,\n display: 'flex',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <Icon name=\"x\" size={11} color=\"var(--ink-3)\" />\n </button>\n ) : null}\n <ComboboxButton\n aria-label=\"Toggle options\"\n style={{\n border: 0,\n background: 'transparent',\n padding: 0,\n display: 'flex',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <Icon name=\"chevronDown\" size={11} color=\"var(--ink-3)\" />\n </ComboboxButton>\n </div>\n\n <Transition as={Fragment} afterLeave={() => setQuery('')}>\n <ComboboxOptions\n anchor=\"bottom start\"\n data-testid={testId ? `${testId}-options` : undefined}\n style={{\n zIndex: 60,\n maxHeight: 240,\n overflowY: 'auto',\n width: 'var(--input-width)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--r-md)',\n boxShadow: 'var(--shadow-pop)',\n padding: 4,\n marginTop: 4,\n }}\n >\n {isLoading ? (\n <div style={{ padding: '8px', fontSize: 12, color: 'var(--ink-3)' }}>{loadingText}</div>\n ) : filtered.length === 0 ? (\n <div style={{ padding: '8px', fontSize: 12, color: 'var(--ink-3)' }}>{emptyText}</div>\n ) : (\n filtered.map((opt, i) => (\n <ComboboxOption\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n data-testid={testId ? `${testId}-option-${i}` : undefined}\n >\n {({ focus, selected: isSelected }) => (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '7px 8px',\n borderRadius: 'var(--r-sm)',\n fontSize: 12.5,\n color: opt.disabled ? 'var(--ink-4)' : 'var(--ink-1)',\n background: focus ? 'var(--surface-2)' : 'transparent',\n fontWeight: isSelected ? 500 : 400,\n cursor: opt.disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <OptionContent opt={opt} />\n {isSelected ? <Icon name=\"check\" size={13} color=\"var(--primary)\" /> : null}\n </div>\n )}\n </ComboboxOption>\n ))\n )}\n </ComboboxOptions>\n </Transition>\n </HeadlessCombobox>\n </div>\n );\n\n return (\n <FieldShell\n label={label}\n hint={hint}\n error={error}\n required={required}\n full={full}\n testId={testId}\n >\n <div data-testid={testId}>{control}</div>\n </FieldShell>\n );\n}\n","import { Fragment, useMemo, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport {\n Combobox,\n ComboboxButton,\n ComboboxInput,\n ComboboxOption,\n ComboboxOptions,\n Transition,\n} from '@headlessui/react';\n\nimport {\n FieldShell,\n controlBoxStyle,\n hasFieldError,\n type TejaOption,\n type FieldChromeProps,\n} from './fieldShell';\nimport { Icon } from './Icon';\n\nexport interface MultiSelectProps extends FieldChromeProps {\n /** Selectable options. */\n items: TejaOption[];\n /** Currently selected values (controlled). */\n value: string[];\n onChange?: (values: string[]) => void;\n /** Trigger text when nothing is selected. Defaults to `Select…`. */\n placeholder?: string;\n /** Render the search input row in the panel. Defaults to `true`. */\n searchable?: boolean;\n /** Notified on every search-query change. */\n onSearch?: (query: string) => void;\n /** Show at most N chips in the trigger; the rest collapse into a `+N`. 0/undefined = show all. */\n maxDisplayedItems?: number;\n /** Render a \"select all / clear all\" row at the top of the panel. */\n showSelectAll?: boolean;\n /** Label for the select-all row. Defaults to `Select all`. */\n selectAllLabel?: string;\n /** Text when no options match the search. Defaults to `No results`. */\n emptyText?: string;\n}\n\nconst PANEL_STYLE: CSSProperties = {\n zIndex: 60,\n maxHeight: 260,\n overflowY: 'auto',\n width: 'var(--input-width)',\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--r-md)',\n boxShadow: 'var(--shadow-pop)',\n padding: 4,\n outline: 'none',\n};\n\nconst LABEL_STYLE: CSSProperties = {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nfunction optionStyle(active: boolean, selected: boolean, disabled: boolean): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '7px 8px',\n borderRadius: 'var(--r-sm)',\n fontSize: 12.5,\n color: disabled ? 'var(--ink-4)' : 'var(--ink-1)',\n background: active ? 'var(--surface-2)' : 'transparent',\n fontWeight: selected ? 500 : 400,\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n}\n\n/** The small left checkbox square shown on every option row. */\nfunction CheckSquare({ selected }: { selected: boolean }) {\n return (\n <span\n aria-hidden\n style={{\n width: 14,\n height: 14,\n borderRadius: 4,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: selected ? 'var(--primary)' : 'var(--surface-0)',\n border: `1px solid ${selected ? 'var(--primary)' : 'var(--border-strong)'}`,\n }}\n >\n {selected && <Icon name=\"check\" size={9} color=\"white\" strokeWidth={2.5} />}\n </span>\n );\n}\n\n/**\n * MultiSelect — multi-value, searchable select with removable chips, built on\n * Headless UI v2 `Combobox` (with `multiple`) and restyled to the theme's\n * \"Clinical Calm\" tokens.\n *\n * The trigger is an auto-height control box (surface-0, strong border, r-md)\n * that wraps the selected values as `--primary-soft` pills, each with an `x`\n * remove button, plus a `+N` overflow when `maxDisplayedItems` is exceeded and\n * a chevron. The panel renders on `--surface-0` with `--shadow-pop`; it has an\n * optional search input row, an optional select-all row, and option rows each\n * with a filled-check square + icon? + label + sub?.\n *\n * Ported from `design/components/inputs.jsx` (`MultiSelect`).\n */\nexport function MultiSelect({\n items,\n value,\n onChange,\n placeholder = 'Select…',\n searchable = true,\n onSearch,\n maxDisplayedItems = 0,\n showSelectAll = false,\n selectAllLabel = 'Select all',\n emptyText = 'No results',\n label,\n hint,\n error,\n required,\n full = true,\n disabled,\n testId,\n}: MultiSelectProps) {\n const [query, setQuery] = useState('');\n const errored = hasFieldError(error);\n\n const valueSet = useMemo(() => new Set(value), [value]);\n const selectedOpts = useMemo(\n () => items.filter((o) => valueSet.has(o.value)),\n [items, valueSet],\n );\n const shown = maxDisplayedItems > 0 ? selectedOpts.slice(0, maxDisplayedItems) : selectedOpts;\n const overflow = selectedOpts.length - shown.length;\n\n const filtered = useMemo(() => {\n if (!searchable || query === '') return items;\n const q = query.toLowerCase();\n return items.filter((o) => o.label.toLowerCase().includes(q));\n }, [items, query, searchable]);\n\n const allSelected = items.length > 0 && items.every((o) => valueSet.has(o.value));\n\n const remove = (val: string) => onChange?.(value.filter((v) => v !== val));\n const toggleAll = () => onChange?.(allSelected ? [] : items.map((o) => o.value));\n\n const triggerStyle = (open: boolean): CSSProperties => ({\n ...controlBoxStyle({ focused: open, error: errored, disabled, height: 36 }),\n height: 'auto',\n minHeight: 36,\n flexWrap: 'wrap',\n rowGap: 4,\n padding: selectedOpts.length ? '5px 8px' : '0 12px',\n justifyContent: 'flex-start',\n textAlign: 'left',\n fontSize: 12.5,\n cursor: disabled ? 'not-allowed' : 'pointer',\n });\n\n const control = (\n <Combobox\n multiple\n immediate\n value={value}\n onChange={(next: string[]) => onChange?.(next)}\n disabled={disabled}\n >\n {({ open }: { open: boolean }) => (\n <div style={{ position: 'relative' }}>\n <ComboboxButton\n as=\"div\"\n data-testid={testId ? `${testId}-trigger` : undefined}\n style={triggerStyle(open)}\n >\n {selectedOpts.length === 0 && (\n <span style={{ ...LABEL_STYLE, color: 'var(--ink-4)' }}>{placeholder}</span>\n )}\n {shown.map((opt, i) => (\n <span\n key={opt.value}\n data-testid={testId ? `${testId}-chip-${i}` : undefined}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n height: 20,\n padding: '0 4px 0 8px',\n borderRadius: 'var(--r-pill)',\n background: 'var(--primary-soft)',\n color: 'var(--primary)',\n fontSize: 11.5,\n fontWeight: 500,\n }}\n >\n {opt.label}\n <button\n type=\"button\"\n title=\"Remove\"\n aria-label={`Remove ${opt.label}`}\n data-testid={testId ? `${testId}-chip-${i}-remove` : undefined}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n remove(opt.value);\n }}\n style={{ border: 0, background: 'transparent', padding: 2, display: 'flex', cursor: 'pointer' }}\n >\n <Icon name=\"x\" size={9} color=\"var(--primary)\" />\n </button>\n </span>\n ))}\n {overflow > 0 && (\n <span\n data-testid={testId ? `${testId}-overflow` : undefined}\n style={{ fontSize: 11.5, color: 'var(--ink-3)', alignSelf: 'center' }}\n >\n +{overflow}\n </span>\n )}\n <Icon\n name=\"chevronDown\"\n size={11}\n color=\"var(--ink-3)\"\n style={{ marginLeft: 'auto', alignSelf: 'center' }}\n />\n </ComboboxButton>\n\n <Transition\n as={Fragment}\n leave=\"transition ease-in\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n afterLeave={() => setQuery('')}\n >\n <ComboboxOptions\n anchor=\"bottom start\"\n data-testid={testId ? `${testId}-options` : undefined}\n style={PANEL_STYLE}\n >\n {searchable && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 6px',\n marginBottom: 4,\n borderBottom: '1px solid var(--divider)',\n }}\n >\n <Icon name=\"search\" size={12} color=\"var(--ink-3)\" />\n <ComboboxInput\n autoFocus\n data-testid={testId ? `${testId}-input` : undefined}\n value={query}\n placeholder=\"Search…\"\n displayValue={() => query}\n onChange={(e) => {\n setQuery(e.target.value);\n onSearch?.(e.target.value);\n }}\n style={{\n flex: 1,\n minWidth: 0,\n border: 0,\n outline: 0,\n background: 'transparent',\n fontSize: 12.5,\n color: 'var(--ink-1)',\n }}\n />\n </div>\n )}\n\n {showSelectAll && items.length > 0 && (\n <div\n role=\"button\"\n tabIndex={0}\n data-testid={testId ? `${testId}-select-all` : undefined}\n onClick={toggleAll}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggleAll();\n }\n }}\n style={optionStyle(false, allSelected, false)}\n >\n <CheckSquare selected={allSelected} />\n <span style={{ ...LABEL_STYLE, fontWeight: 500 }}>{selectAllLabel}</span>\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div\n data-testid={testId ? `${testId}-empty` : undefined}\n style={{ padding: 8, fontSize: 12, color: 'var(--ink-3)' }}\n >\n {emptyText}\n </div>\n ) : (\n filtered.map((opt, i) => {\n const sel = valueSet.has(opt.value);\n return (\n <ComboboxOption\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n data-testid={testId ? `${testId}-option-${i}` : undefined}\n style={optionStyle(false, sel, !!opt.disabled)}\n >\n <CheckSquare selected={sel} />\n {opt.icon && <Icon name={opt.icon} size={13} color=\"var(--ink-3)\" />}\n <span style={LABEL_STYLE}>{opt.label}</span>\n {opt.sub && (\n <span style={{ fontSize: 11, color: 'var(--ink-3)', flexShrink: 0 }}>\n {opt.sub}\n </span>\n )}\n </ComboboxOption>\n );\n })\n )}\n </ComboboxOptions>\n </Transition>\n </div>\n )}\n </Combobox>\n );\n\n return (\n <FieldShell\n label={label}\n hint={hint}\n error={error}\n required={required}\n full={full}\n testId={testId}\n >\n <div data-testid={testId}>{control}</div>\n </FieldShell>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport { DayPicker } from 'react-day-picker';\nimport 'react-day-picker/style.css';\n\nimport {\n FieldShell,\n controlBoxStyle,\n hasFieldError,\n type FieldChromeProps,\n} from './fieldShell';\nimport { Icon } from './Icon';\n\nexport interface DateInputProps extends FieldChromeProps {\n /** Current value as an ISO `YYYY-MM-DD` string, or `null` when unset. */\n value: string | null;\n onChange?: (value: string | null) => void;\n /** Trigger text when no value is selected. Defaults to `Select date`. */\n placeholder?: string;\n /** Lower bound (inclusive) as an ISO `YYYY-MM-DD` string. */\n min?: string;\n /** Upper bound (inclusive) as an ISO `YYYY-MM-DD` string. */\n max?: string;\n}\n\nconst MONTHS_SHORT = [\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',\n] as const;\n\nconst pad2 = (n: number): string => String(n).padStart(2, '0');\n\n/** Parse a `YYYY-MM-DD` string to a local Date. Returns undefined if invalid. */\nexport function parseDate(value: string | null): Date | undefined {\n if (!value) return undefined;\n const [y, m, d] = value.split('-').map(Number);\n if (!y || !m || !d) return undefined;\n const date = new Date(y, m - 1, d);\n if (date.getFullYear() !== y || date.getMonth() !== m - 1 || date.getDate() !== d) {\n return undefined;\n }\n return date;\n}\n\n/** Format a Date to a `YYYY-MM-DD` string (local timezone). */\nexport function formatDate(date: Date): string {\n return `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;\n}\n\n/** Whether a string is a valid `YYYY-MM-DD` calendar date. */\nexport function isValidDateString(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(value) && parseDate(value) !== undefined;\n}\n\n/** Human-readable display, e.g. \"Apr 12, 1989\". */\nfunction displayDate(date: Date): string {\n return `${MONTHS_SHORT[date.getMonth()]} ${pad2(date.getDate())}, ${date.getFullYear()}`;\n}\n\n/** Strip the time component so bounds compare on calendar days only. */\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nconst PANEL_STYLE: CSSProperties = {\n position: 'absolute',\n top: 'calc(100% + 4px)',\n left: 0,\n zIndex: 60,\n width: 260,\n background: 'var(--surface-0)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--r-md)',\n boxShadow: 'var(--shadow-pop)',\n padding: 12,\n};\n\n/**\n * react-day-picker CSS variable overrides + sizing, mapped to design tokens so\n * the calendar reads as part of the \"Clinical Calm\" theme. The selected day is\n * filled `--primary` (white text), today is tinted, and out-of-range days are\n * muted.\n */\nconst RDP_STYLE: CSSProperties = {\n margin: 0,\n '--rdp-accent-color': 'var(--primary)',\n '--rdp-accent-background-color': 'var(--surface-2)',\n '--rdp-today-color': 'var(--primary)',\n '--rdp-day-height': '30px',\n '--rdp-day-width': '30px',\n '--rdp-day_button-height': '28px',\n '--rdp-day_button-width': '28px',\n '--rdp-day_button-border-radius': 'var(--r-sm)',\n '--rdp-day_button-border': '0',\n '--rdp-selected-border': '0',\n '--rdp-outside-opacity': '0.4',\n '--rdp-disabled-opacity': '0.35',\n '--rdp-weekday-opacity': '1',\n '--rdp-nav_button-height': '24px',\n '--rdp-nav_button-width': '24px',\n fontSize: 12,\n color: 'var(--ink-1)',\n} as CSSProperties;\n\n/**\n * DateInput — a date field whose trigger mirrors the theme `Select` (a 36px\n * control box with a leading `calendar` Icon, the formatted date or placeholder,\n * and a trailing chevron). Clicking it opens a `react-day-picker` calendar in a\n * `--surface-0` + `--shadow-pop` popover. The value is an ISO `YYYY-MM-DD`\n * string (or null); `min`/`max` disable out-of-range days.\n *\n * Ported from `design/components/inputs.jsx` (`DateInput`).\n */\nexport function DateInput({\n value,\n onChange,\n placeholder = 'Select date',\n min,\n max,\n label,\n hint,\n error,\n required,\n full = true,\n disabled,\n testId,\n}: DateInputProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const errored = hasFieldError(error);\n const selected = parseDate(value);\n const minDate = parseDate(min ?? null);\n const maxDate = parseDate(max ?? null);\n\n // The visible month: seeded from the value when present, otherwise today. Read\n // lazily so module load never calls `new Date()`.\n const [month, setMonth] = useState<Date>(() => parseDate(value) ?? new Date());\n\n // Keep the visible month aligned with an externally-changed value. Done during\n // render (not in an effect) per React's \"adjusting state when a prop changes\"\n // pattern, so the calendar never shows a stale month frame.\n const [lastValue, setLastValue] = useState(value);\n if (value !== lastValue) {\n setLastValue(value);\n const d = parseDate(value);\n if (d) setMonth(d);\n }\n\n // Close on outside click + Escape while open.\n useEffect(() => {\n if (!open) return;\n const onMouseDown = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) setOpen(false);\n };\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('mousedown', onMouseDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('mousedown', onMouseDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [open]);\n\n const disabledMatcher = (date: Date): boolean => {\n const day = startOfDay(date);\n if (minDate && day < startOfDay(minDate)) return true;\n if (maxDate && day > startOfDay(maxDate)) return true;\n return false;\n };\n\n const handleSelect = (date: Date | undefined) => {\n if (date) {\n onChange?.(formatDate(date));\n setMonth(date);\n }\n setOpen(false);\n };\n\n const control = (\n <div ref={containerRef} style={{ position: 'relative' }}>\n <button\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n data-testid={testId ? `${testId}-trigger` : undefined}\n onClick={() => !disabled && setOpen((o) => !o)}\n style={{\n ...controlBoxStyle({ focused: open, error: errored, disabled }),\n justifyContent: 'space-between',\n fontSize: 12.5,\n textAlign: 'left',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <Icon name=\"calendar\" size={13} color=\"var(--ink-3)\" />\n <span\n style={{\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n color: selected ? 'var(--ink-1)' : 'var(--ink-4)',\n }}\n >\n {selected ? displayDate(selected) : placeholder}\n </span>\n <Icon\n name=\"chevronDown\"\n size={11}\n color=\"var(--ink-3)\"\n style={{\n transform: open ? 'rotate(180deg)' : 'none',\n transition: 'transform .12s',\n flexShrink: 0,\n }}\n />\n </button>\n\n {open && (\n <div\n role=\"dialog\"\n aria-label=\"Choose date\"\n data-testid={testId ? `${testId}-calendar` : undefined}\n style={PANEL_STYLE}\n >\n <DayPicker\n mode=\"single\"\n month={month}\n onMonthChange={setMonth}\n selected={selected}\n onSelect={handleSelect}\n disabled={disabledMatcher}\n showOutsideDays\n style={RDP_STYLE}\n components={{\n Chevron: ({ orientation }) => (\n <Icon\n name={orientation === 'left' ? 'chevronLeft' : 'chevronRight'}\n size={13}\n color=\"var(--ink-2)\"\n />\n ),\n }}\n />\n </div>\n )}\n </div>\n );\n\n return (\n <FieldShell\n label={label}\n hint={hint}\n error={error}\n required={required}\n full={full}\n testId={testId}\n >\n {control}\n </FieldShell>\n );\n}\n","import type { TejaOption } from '../components/fieldShell';\n\n/**\n * Curated ISO-3166-1 alpha-2 country list (common markets first). Not\n * exhaustive — pickers accept an `items` override for full/tenant-restricted\n * lists. Ported from `design/components/inputs.jsx`.\n */\nexport const COUNTRY_ITEMS: TejaOption[] = [\n { value: 'US', label: 'United States' },\n { value: 'CA', label: 'Canada' },\n { value: 'GB', label: 'United Kingdom' },\n { value: 'AU', label: 'Australia' },\n { value: 'IE', label: 'Ireland' },\n { value: 'NZ', label: 'New Zealand' },\n { value: 'DE', label: 'Germany' },\n { value: 'FR', label: 'France' },\n { value: 'ES', label: 'Spain' },\n { value: 'MX', label: 'Mexico' },\n { value: 'IN', label: 'India' },\n { value: 'SG', label: 'Singapore' },\n];\n","import { Combobox, type ComboboxProps } from './Combobox';\nimport { COUNTRY_ITEMS } from '../data/countries';\n\n/**\n * CountryPicker — searchable country select over the bundled ISO-3166 list.\n * Pass `items` to override (e.g. a tenant-restricted list).\n *\n * @example\n * <CountryPicker label=\"Country\" value={country} onChange={setCountry} />\n */\nexport interface CountryPickerProps extends Omit<ComboboxProps, 'items'> {\n /** Override the bundled country list. */\n items?: ComboboxProps['items'];\n}\n\nexport function CountryPicker({\n items = COUNTRY_ITEMS,\n placeholder = 'Select country',\n ...rest\n}: CountryPickerProps) {\n return <Combobox items={items} placeholder={placeholder} {...rest} />;\n}\n","import type { TejaOption } from '../components/fieldShell';\n\nconst make = (rows: ReadonlyArray<readonly [string, string]>): TejaOption[] =>\n rows.map(([value, label]) => ({ value, label }));\n\n/** US states + DC. */\nexport const US_STATES: TejaOption[] = make([\n ['AL', 'Alabama'], ['AK', 'Alaska'], ['AZ', 'Arizona'], ['AR', 'Arkansas'], ['CA', 'California'],\n ['CO', 'Colorado'], ['CT', 'Connecticut'], ['DE', 'Delaware'], ['DC', 'District of Columbia'], ['FL', 'Florida'],\n ['GA', 'Georgia'], ['HI', 'Hawaii'], ['ID', 'Idaho'], ['IL', 'Illinois'], ['IN', 'Indiana'],\n ['IA', 'Iowa'], ['KS', 'Kansas'], ['KY', 'Kentucky'], ['LA', 'Louisiana'], ['ME', 'Maine'],\n ['MD', 'Maryland'], ['MA', 'Massachusetts'], ['MI', 'Michigan'], ['MN', 'Minnesota'], ['MS', 'Mississippi'],\n ['MO', 'Missouri'], ['MT', 'Montana'], ['NE', 'Nebraska'], ['NV', 'Nevada'], ['NH', 'New Hampshire'],\n ['NJ', 'New Jersey'], ['NM', 'New Mexico'], ['NY', 'New York'], ['NC', 'North Carolina'], ['ND', 'North Dakota'],\n ['OH', 'Ohio'], ['OK', 'Oklahoma'], ['OR', 'Oregon'], ['PA', 'Pennsylvania'], ['RI', 'Rhode Island'],\n ['SC', 'South Carolina'], ['SD', 'South Dakota'], ['TN', 'Tennessee'], ['TX', 'Texas'], ['UT', 'Utah'],\n ['VT', 'Vermont'], ['VA', 'Virginia'], ['WA', 'Washington'], ['WV', 'West Virginia'], ['WI', 'Wisconsin'], ['WY', 'Wyoming'],\n]);\n\n/** Canadian provinces + territories. */\nexport const CA_PROVINCES: TejaOption[] = make([\n ['AB', 'Alberta'], ['BC', 'British Columbia'], ['MB', 'Manitoba'], ['NB', 'New Brunswick'],\n ['NL', 'Newfoundland and Labrador'], ['NS', 'Nova Scotia'], ['NT', 'Northwest Territories'], ['NU', 'Nunavut'],\n ['ON', 'Ontario'], ['PE', 'Prince Edward Island'], ['QC', 'Quebec'], ['SK', 'Saskatchewan'], ['YT', 'Yukon'],\n]);\n\n/** Regions keyed by ISO country code. Countries without sub-regions are absent. */\nexport const REGIONS_BY_COUNTRY: Record<string, TejaOption[]> = {\n US: US_STATES,\n CA: CA_PROVINCES,\n};\n","import { Combobox, type ComboboxProps } from './Combobox';\nimport { REGIONS_BY_COUNTRY } from '../data/regions';\n\n/**\n * StatePicker — searchable state/province select. Defaults to the regions of\n * `country` (ISO code) from the bundled data; pass `items` to override.\n * Countries without bundled sub-regions yield an empty list.\n *\n * @example\n * <StatePicker label=\"State\" country=\"US\" value={state} onChange={setState} />\n */\nexport interface StatePickerProps extends Omit<ComboboxProps, 'items'> {\n /** ISO-3166 country code selecting which region list to use. Default 'US'. */\n country?: string;\n /** Override the resolved region list. */\n items?: ComboboxProps['items'];\n}\n\nexport function StatePicker({\n country = 'US',\n items,\n placeholder = 'Select state',\n ...rest\n}: StatePickerProps) {\n const list = items ?? REGIONS_BY_COUNTRY[country] ?? [];\n return <Combobox items={list} placeholder={placeholder} {...rest} />;\n}\n","import type { TejaOption } from '../components/fieldShell';\n\n/**\n * Curated IANA time-zone list (US-first, common international). `sub` shows the\n * standard-time UTC offset. Not exhaustive — pickers accept an `items`\n * override. Ported from `design/components/inputs.jsx`.\n */\nexport const TIMEZONE_ITEMS: TejaOption[] = [\n { value: 'America/New_York', label: 'Eastern Time', sub: 'UTC−05' },\n { value: 'America/Chicago', label: 'Central Time', sub: 'UTC−06' },\n { value: 'America/Denver', label: 'Mountain Time', sub: 'UTC−07' },\n { value: 'America/Phoenix', label: 'Arizona', sub: 'UTC−07' },\n { value: 'America/Los_Angeles', label: 'Pacific Time', sub: 'UTC−08' },\n { value: 'America/Anchorage', label: 'Alaska Time', sub: 'UTC−09' },\n { value: 'Pacific/Honolulu', label: 'Hawaii Time', sub: 'UTC−10' },\n { value: 'America/Toronto', label: 'Toronto', sub: 'UTC−05' },\n { value: 'Europe/London', label: 'London', sub: 'UTC+00' },\n { value: 'Europe/Paris', label: 'Central European', sub: 'UTC+01' },\n { value: 'Asia/Kolkata', label: 'India', sub: 'UTC+05:30' },\n { value: 'Australia/Sydney', label: 'Sydney', sub: 'UTC+11' },\n];\n","import { Combobox, type ComboboxProps } from './Combobox';\nimport { TIMEZONE_ITEMS } from '../data/timezones';\n\n/**\n * TimeZonePicker — searchable IANA time-zone select over the bundled list\n * (offset shown as each option's `sub`). Pass `items` to override.\n *\n * @example\n * <TimeZonePicker label=\"Time zone\" value={tz} onChange={setTz} />\n */\nexport interface TimeZonePickerProps extends Omit<ComboboxProps, 'items'> {\n /** Override the bundled time-zone list. */\n items?: ComboboxProps['items'];\n}\n\nexport function TimeZonePicker({\n items = TIMEZONE_ITEMS,\n placeholder = 'Select time zone',\n ...rest\n}: TimeZonePickerProps) {\n return <Combobox items={items} placeholder={placeholder} {...rest} />;\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nimport { Icon, type IconName } from './Icon';\n\n/**\n * Alert — inline contextual banner.\n *\n * Ported from design/components/primitives.jsx. Four tones —\n * `danger`, `warning`, `success`, `info` — each driving the background,\n * border, default icon, and accent color via theme tokens.\n */\nexport type AlertTone = 'danger' | 'warning' | 'success' | 'info';\n\ninterface AlertToneSpec {\n bg: string;\n border: string;\n icon: IconName;\n color: string;\n}\n\nconst ALERT_TONES: Record<AlertTone, AlertToneSpec> = {\n danger: {\n bg: 'var(--danger-soft)',\n border: 'color-mix(in oklab, var(--danger) 35%, transparent)',\n icon: 'alert-circle',\n color: 'var(--danger)',\n },\n warning: {\n bg: 'var(--warning-soft)',\n border: 'color-mix(in oklab, var(--warning) 35%, transparent)',\n icon: 'alert-triangle',\n color: 'var(--warning)',\n },\n success: {\n bg: 'var(--success-soft)',\n border: 'color-mix(in oklab, var(--success) 35%, transparent)',\n icon: 'check-circle',\n color: 'var(--success)',\n },\n info: {\n bg: 'var(--primary-soft)',\n border: 'color-mix(in oklab, var(--primary) 25%, transparent)',\n icon: 'info',\n color: 'var(--primary)',\n },\n};\n\nexport interface AlertProps {\n tone?: AlertTone;\n /** Override the default tone-derived icon name. */\n icon?: IconName;\n title?: ReactNode;\n children?: ReactNode;\n /** data-testid forwarded to the root. */\n testId?: string;\n style?: CSSProperties;\n}\n\nexport function Alert({\n tone = 'info',\n icon,\n title,\n children,\n testId,\n style,\n}: AlertProps) {\n const t = ALERT_TONES[tone];\n const iconName: IconName = icon ?? t.icon;\n const bodyColor = tone === 'success' ? 'var(--ink-1)' : t.color;\n\n return (\n <div\n data-testid={testId}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 10,\n padding: '10px 12px',\n background: t.bg,\n border: `1px solid ${t.border}`,\n borderRadius: 'var(--r-md)',\n fontSize: 12.5,\n lineHeight: 1.5,\n ...style,\n }}\n >\n <Icon\n name={iconName}\n size={14}\n color={t.color}\n style={{ flexShrink: 0, marginTop: 1 }}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n {title ? (\n <div\n style={{\n fontWeight: 600,\n color: t.color,\n marginBottom: children ? 2 : 0,\n }}\n >\n {title}\n </div>\n ) : null}\n {children ? <div style={{ color: bodyColor }}>{children}</div> : null}\n </div>\n </div>\n );\n}\n","import { Fragment } from 'react';\n\n/**\n * Horizontal mini-stepper used in the auth funnel (register → verify → setup).\n * Each step is `{ label, active?, complete? }`. Visual states:\n * - active: solid primary disc, ink-1 label\n * - complete: solid primary disc with check (TODO if needed)\n * - default: bordered disc, ink-3 label\n */\n\nexport interface StepperStep {\n label: string;\n active?: boolean;\n complete?: boolean;\n /** Override the auto-derived test id for this step. */\n testId?: string;\n}\n\nexport interface StepperProps {\n steps: StepperStep[];\n /** Constrain total width. */\n maxWidth?: number;\n /** Test id applied to the root + auto-prefixed onto each step. */\n testId?: string;\n}\n\nfunction slugifyStepLabel(label: string): string {\n return label.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n}\n\nexport function Stepper({ steps, maxWidth = 460, testId }: StepperProps) {\n return (\n <div\n data-testid={testId}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 0,\n maxWidth,\n }}\n >\n {steps.map((step, i) => {\n const isLast = i === steps.length - 1;\n const stepTestId =\n step.testId ??\n (testId ? `${testId}-step-${slugifyStepLabel(step.label)}` : undefined);\n return (\n <Fragment key={step.label}>\n <div\n data-testid={stepTestId}\n data-state={step.active ? 'active' : step.complete ? 'complete' : 'upcoming'}\n style={{ display: 'flex', alignItems: 'center', gap: 10 }}\n >\n <div\n style={{\n width: 26,\n height: 26,\n borderRadius: 999,\n background: step.active ? 'var(--primary)' : 'var(--surface-0)',\n color: step.active ? 'white' : 'var(--ink-3)',\n border: step.active ? 'none' : '1.5px solid var(--border-strong)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 12,\n fontWeight: 600,\n flexShrink: 0,\n }}\n >\n {i + 1}\n </div>\n <span\n style={{\n fontSize: 12.5,\n fontWeight: step.active ? 600 : 500,\n color: step.active ? 'var(--ink-1)' : 'var(--ink-3)',\n }}\n >\n {step.label}\n </span>\n </div>\n {!isLast ? (\n <div\n style={{\n flex: 1,\n height: 1.5,\n background: 'var(--border-strong)',\n margin: '0 12px',\n }}\n />\n ) : null}\n </Fragment>\n );\n })}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\n/**\n * 4-point sparkle glyph used as the AI accent in callouts and pills.\n * Renders inline; inherits color from the parent unless `color` is set.\n */\nexport interface AISparkleProps {\n size?: number;\n color?: string;\n style?: CSSProperties;\n}\n\nexport function AISparkle({\n size = 12,\n color = 'currentColor',\n style,\n}: AISparkleProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke={color}\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ flexShrink: 0, display: 'block', ...style }}\n >\n <path d=\"M8 2v3M8 11v3M2 8h3M11 8h3M4 4l2 2M10 10l2 2M4 12l2-2M10 6l2-2\" />\n </svg>\n );\n}\n","import type { CSSProperties, InputHTMLAttributes, ReactNode } from 'react';\n\nimport { Icon } from './Icon';\n\n/**\n * Checkbox — visually styled to match the BAA/terms block in\n * design/screens/register.jsx. The native input is visually hidden but\n * focusable; clicking the wrapping label toggles state.\n *\n * `tone=\"block\"` renders the full surface-1 card variant with body text.\n * `tone=\"inline\"` is a compact form-row checkbox.\n */\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Inline label or block body. When omitted, renders only the box (for table cells). */\n label?: ReactNode;\n tone?: 'block' | 'inline';\n /** Custom outer style for the wrapping label. */\n containerStyle?: CSSProperties;\n /**\n * Test ID — applied to the wrapping `<label>` as the root. The native\n * input gets `${testId}-input`, the styled square gets `${testId}-square`.\n */\n testId?: string;\n}\n\nexport function Checkbox({\n label,\n tone = 'inline',\n containerStyle,\n checked,\n testId,\n ...inputProps\n}: CheckboxProps) {\n const inputTestId =\n (inputProps as { 'data-testid'?: string })['data-testid'] ??\n (testId ? `${testId}-input` : undefined);\n const blockStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 10,\n padding: '12px 14px',\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--r-md)',\n fontSize: 12.5,\n color: 'var(--ink-2)',\n lineHeight: 1.5,\n cursor: 'pointer',\n };\n\n const inlineStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n fontSize: 13,\n color: 'var(--ink-2)',\n cursor: 'pointer',\n };\n\n return (\n <label\n data-testid={testId}\n style={{ ...(tone === 'block' ? blockStyle : inlineStyle), ...containerStyle }}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n border: 0,\n }}\n {...inputProps}\n data-testid={inputTestId}\n />\n <span\n aria-hidden\n data-testid={testId ? `${testId}-square` : undefined}\n data-state={checked ? 'checked' : 'unchecked'}\n style={{\n width: 16,\n height: 16,\n borderRadius: 4,\n marginTop: tone === 'block' ? 1 : 0,\n flexShrink: 0,\n background: checked ? 'var(--primary)' : 'var(--surface-0)',\n border: `1px solid ${checked ? 'var(--primary)' : 'var(--border-strong)'}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // Decoration only — must not block clicks bound on the label.\n pointerEvents: 'none',\n }}\n >\n {checked ? <Icon name=\"check\" size={10} color=\"white\" strokeWidth={2.5} /> : null}\n </span>\n {label !== undefined ? (\n <span style={{ flex: 1, minWidth: 0 }}>{label}</span>\n ) : null}\n </label>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon, type IconName } from './Icon';\n\n/**\n * RoleTile — large radio-card used in the Register screen to pick \"Practice\n * owner\" vs \"Operations manager\". Renders as a clickable card with an icon,\n * title, description, and a check indicator on the right.\n *\n * Stateless — parent passes `active` and `onSelect`.\n */\nexport interface RoleTileProps {\n icon: IconName;\n title: string;\n desc?: ReactNode;\n active?: boolean;\n onSelect?: () => void;\n /** data-testid forwarded to the button. */\n testId?: string;\n}\n\nexport function RoleTile({\n icon,\n title,\n desc,\n active = false,\n onSelect,\n testId,\n}: RoleTileProps) {\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={active}\n data-testid={testId}\n onClick={onSelect}\n style={{\n padding: 12,\n border: `1.5px solid ${active ? 'var(--primary)' : 'var(--border-strong)'}`,\n background: active ? 'var(--primary-soft)' : 'var(--surface-0)',\n borderRadius: 'var(--r-md)',\n display: 'flex',\n gap: 10,\n alignItems: 'flex-start',\n cursor: 'pointer',\n boxShadow: active ? 'var(--shadow-xs)' : 'none',\n textAlign: 'left',\n width: '100%',\n font: 'inherit',\n }}\n >\n <span\n style={{\n width: 26,\n height: 26,\n borderRadius: 'var(--r-sm)',\n background: active ? 'var(--surface-0)' : 'var(--surface-1)',\n color: 'var(--primary)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <Icon name={icon} size={13} />\n </span>\n <span style={{ flex: 1, minWidth: 0 }}>\n <span\n style={{\n display: 'block',\n fontSize: 12.5,\n fontWeight: 600,\n color: 'var(--ink-1)',\n }}\n >\n {title}\n </span>\n {desc ? (\n <span\n style={{\n display: 'block',\n fontSize: 11,\n color: 'var(--ink-3)',\n marginTop: 2,\n }}\n >\n {desc}\n </span>\n ) : null}\n </span>\n <span\n aria-hidden\n style={{\n width: 16,\n height: 16,\n borderRadius: 999,\n flexShrink: 0,\n marginTop: 1,\n background: active ? 'var(--primary)' : 'var(--surface-0)',\n border: active ? 'none' : '1.5px solid var(--border-strong)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {active ? (\n <Icon name=\"check\" size={9} color=\"white\" strokeWidth={2.5} />\n ) : null}\n </span>\n </button>\n );\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n type ChangeEvent,\n type ClipboardEvent,\n type FC,\n type KeyboardEvent,\n} from 'react';\n\n/**\n * TOTP6Cells — 6 individually-focusable numeric cells for TOTP entry.\n *\n * Industry-standard 6-digit code without visual grouping (in contrast to the\n * verify-email 8-cell OTP which groups 4-4). Per-cell visual states track:\n * - empty neutral border, surface-1 fill\n * - active next-cell-to-fill, primary border + ring + blinking caret\n * - filled neutral border, surface-0 fill, ink-1 digit\n * - verifying locked, ink-2 digit\n * - verified success border/fill/digit\n * - error danger border/fill, danger digit\n *\n * Behaviours:\n * - Auto-focus first empty cell on mount.\n * - Typing a digit auto-advances focus.\n * - Backspace on an empty cell jumps back and clears the previous cell.\n * - Paste anywhere strips non-digits and fills cells in order.\n * - Fires onComplete(value) exactly once when all 6 cells hold a digit.\n *\n * The component is *controlled* via `value` (a 0–6 char numeric string). All\n * onChange notifications report the joined string.\n */\n\nexport type TOTP6CellsState = 'default' | 'verifying' | 'verified' | 'error';\n\nexport interface TOTP6CellsProps {\n /** 0–6 character numeric string. Non-digits / overflow are stripped. */\n value: string;\n /** Fired on every per-cell mutation; receives the joined value. */\n onChange: (value: string) => void;\n /**\n * Fired exactly once when the value reaches 6 digits. Refires only after the\n * value drops below 6 and rises back to 6 (re-entry after error).\n */\n onComplete?: (value: string) => void;\n /** Visual state override (drives per-cell styling). */\n state?: TOTP6CellsState;\n /** Auto-focus the first empty cell on mount. Defaults to true. */\n autoFocus?: boolean;\n /** Disables all inputs. Combined with `state === 'verifying' | 'verified'`. */\n disabled?: boolean;\n /**\n * Root `data-testid` for the cell row. Each cell gets `${testId}-cell-${i}`.\n * Defaults to `totp6`.\n */\n testId?: string;\n}\n\nconst CELL_COUNT = 6;\nconst EMPTY_CELLS: ReadonlyArray<string> = Array.from(\n { length: CELL_COUNT },\n () => ''\n);\n\nfunction sanitize(raw: string, max: number = CELL_COUNT): string {\n return raw.replace(/\\D/g, '').slice(0, max);\n}\n\nfunction toCells(value: string): string[] {\n const sanitized = sanitize(value);\n const next = [...EMPTY_CELLS];\n for (let i = 0; i < sanitized.length; i += 1) {\n next[i] = sanitized[i] ?? '';\n }\n return next;\n}\n\nfunction firstEmpty(cells: ReadonlyArray<string>): number | null {\n const i = cells.findIndex((c) => c === '');\n return i === -1 ? null : i;\n}\n\ninterface Visuals {\n border: string;\n background: string;\n color: string;\n boxShadow: string;\n}\n\nfunction visualsFor(args: {\n digit: string;\n isActive: boolean;\n state: TOTP6CellsState;\n}): Visuals {\n const { digit, isActive, state } = args;\n if (state === 'verified') {\n return {\n border: '1.5px solid var(--success)',\n background: 'var(--success-soft)',\n color: 'var(--success)',\n boxShadow: 'none',\n };\n }\n if (state === 'error') {\n return {\n border: '1.5px solid var(--danger)',\n background: 'color-mix(in oklab, var(--danger) 8%, var(--surface-0))',\n color: 'var(--danger)',\n boxShadow: 'none',\n };\n }\n if (state === 'verifying') {\n return {\n border: '1.5px solid var(--border-strong)',\n background: 'var(--surface-1)',\n color: 'var(--ink-2)',\n boxShadow: 'none',\n };\n }\n // default\n if (isActive) {\n return {\n border: '1.5px solid var(--primary)',\n background: 'var(--surface-0)',\n color: 'var(--ink-1)',\n boxShadow:\n '0 0 0 4px color-mix(in oklab, var(--primary) 18%, transparent)',\n };\n }\n const filled = digit !== '';\n return {\n border: '1.5px solid var(--border-strong)',\n background: filled ? 'var(--surface-0)' : 'var(--surface-1)',\n color: 'var(--ink-1)',\n boxShadow: 'none',\n };\n}\n\nconst Caret: FC = () => (\n <span\n aria-hidden=\"true\"\n style={{\n width: 2,\n height: 22,\n background: 'var(--primary)',\n borderRadius: 2,\n animation: 'tejaTotpCaretBlink 1s steps(2, start) infinite',\n pointerEvents: 'none',\n }}\n >\n <style>{`@keyframes tejaTotpCaretBlink { to { visibility: hidden; } }`}</style>\n </span>\n);\n\nexport const TOTP6Cells: FC<TOTP6CellsProps> = ({\n value,\n onChange,\n onComplete,\n state = 'default',\n autoFocus = true,\n disabled = false,\n testId = 'totp6',\n}) => {\n const cells = toCells(value);\n const inputRefs = useRef<Array<HTMLInputElement | null>>([]);\n const lastCompletedRef = useRef<string | null>(null);\n\n const isLocked = disabled || state === 'verifying' || state === 'verified';\n\n // Track onComplete edge: fires when value moves from <6 to ===6.\n useEffect(() => {\n if (value.length === CELL_COUNT && /^\\d{6}$/.test(value)) {\n if (lastCompletedRef.current !== value) {\n lastCompletedRef.current = value;\n onComplete?.(value);\n }\n } else {\n lastCompletedRef.current = null;\n }\n }, [value, onComplete]);\n\n const focusCell = useCallback((index: number): void => {\n const clamped = Math.max(0, Math.min(CELL_COUNT - 1, index));\n const el = inputRefs.current[clamped];\n if (!el) return;\n el.focus();\n try {\n el.select();\n } catch {\n /* select unsupported in some test envs — non-fatal */\n }\n }, []);\n\n // Auto-focus on mount\n useEffect(() => {\n if (!autoFocus || isLocked) return;\n const target = firstEmpty(cells) ?? CELL_COUNT - 1;\n focusCell(target);\n // mount-only\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const emit = useCallback(\n (nextCells: ReadonlyArray<string>): void => {\n onChange(nextCells.join(''));\n },\n [onChange]\n );\n\n const handleChange =\n (index: number) =>\n (e: ChangeEvent<HTMLInputElement>): void => {\n if (isLocked) return;\n const raw = e.target.value;\n const sanitized = sanitize(raw, CELL_COUNT - index);\n if (sanitized.length === 0) {\n // User cleared via selection-delete; treat as removal.\n const next = [...cells];\n next[index] = '';\n emit(next);\n return;\n }\n if (sanitized.length > 1) {\n // Fast paste path: multiple digits arrive in one keystroke.\n const next = [...cells];\n for (let i = 0; i < sanitized.length; i += 1) {\n next[index + i] = sanitized[i] ?? '';\n }\n emit(next);\n focusCell(Math.min(index + sanitized.length, CELL_COUNT - 1));\n return;\n }\n const next = [...cells];\n next[index] = sanitized;\n emit(next);\n if (index < CELL_COUNT - 1) focusCell(index + 1);\n };\n\n const handleKeyDown =\n (index: number) =>\n (e: KeyboardEvent<HTMLInputElement>): void => {\n if (isLocked) return;\n if (e.key === 'Backspace') {\n if (cells[index] !== '') {\n const next = [...cells];\n next[index] = '';\n emit(next);\n e.preventDefault();\n return;\n }\n if (index > 0) {\n const next = [...cells];\n next[index - 1] = '';\n emit(next);\n focusCell(index - 1);\n e.preventDefault();\n }\n return;\n }\n if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault();\n focusCell(index - 1);\n return;\n }\n if (e.key === 'ArrowRight' && index < CELL_COUNT - 1) {\n e.preventDefault();\n focusCell(index + 1);\n }\n };\n\n const handlePaste =\n (index: number) =>\n (e: ClipboardEvent<HTMLInputElement>): void => {\n if (isLocked) return;\n const pasted = e.clipboardData.getData('text');\n if (!pasted) return;\n e.preventDefault();\n const digits = sanitize(pasted, CELL_COUNT - index);\n if (!digits) return;\n const next = [...cells];\n for (let i = 0; i < digits.length; i += 1) {\n next[index + i] = digits[i] ?? '';\n }\n emit(next);\n focusCell(Math.min(index + digits.length, CELL_COUNT - 1));\n };\n\n const activeIndex = state === 'default' ? firstEmpty(cells) : null;\n\n // Cells render as 3-gap-3 with a visual separator (per the canvas MFA\n // design): [ X ][ X ][ X ] – [ X ][ X ][ X ]. The \"–\" is a sibling node\n // injected between cells 2 and 3 — purely decorative.\n return (\n <div\n data-testid={testId}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n }}\n >\n {cells.map((digit, i) => {\n const isActive = activeIndex === i;\n const vis = visualsFor({ digit, isActive, state });\n const cell = (\n <div\n key={i}\n style={{\n position: 'relative',\n width: 48,\n height: 58,\n borderRadius: 'var(--r-md)',\n border: vis.border,\n background: vis.background,\n boxShadow: vis.boxShadow,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'border-color .12s, box-shadow .12s, background .12s',\n }}\n >\n <input\n ref={(el) => {\n inputRefs.current[i] = el;\n }}\n aria-label={`Digit ${(i + 1).toString()} of ${CELL_COUNT.toString()}`}\n autoComplete={i === 0 ? 'one-time-code' : 'off'}\n data-testid={`${testId}-cell-${i.toString()}`}\n disabled={isLocked}\n inputMode=\"numeric\"\n maxLength={CELL_COUNT}\n pattern=\"\\d*\"\n type=\"text\"\n value={digit}\n onChange={handleChange(i)}\n onKeyDown={handleKeyDown(i)}\n onPaste={handlePaste(i)}\n style={{\n width: '100%',\n height: '100%',\n background: 'transparent',\n border: 'none',\n outline: 'none',\n textAlign: 'center',\n fontSize: 22,\n fontWeight: 600,\n color: vis.color,\n fontFamily: 'var(--font-mono)',\n fontFeatureSettings: '\"tnum\"',\n caretColor: 'transparent',\n padding: 0,\n }}\n />\n {isActive && !digit ? <Caret /> : null}\n </div>\n );\n\n // Inject visual separator between cells 2 and 3 (after rendering cell\n // index 2). The separator is non-interactive and gets its own testid\n // so e2e can assert the grouping is present.\n if (i === 2) {\n return [\n cell,\n <div\n key=\"separator\"\n aria-hidden=\"true\"\n data-testid={`${testId}-separator`}\n style={{\n color: 'var(--ink-4)',\n fontSize: 18,\n fontWeight: 300,\n flexShrink: 0,\n padding: '0 4px',\n userSelect: 'none',\n }}\n >\n –\n </div>,\n ];\n }\n return cell;\n })}\n </div>\n );\n};\n\nexport default TOTP6Cells;\n","import {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype CSSProperties,\n} from 'react';\n\nimport { Icon } from './Icon';\n\n/**\n * LangSwitcher — compact flag + language-name button shown on the front-door\n * auth screens (sign in + register) so non-English users can switch before\n * reading any UI copy.\n *\n * Ported from `design/components/primitives.jsx` LangSwitcher (lines\n * 274–297). Adds: typed options API, a working dropdown menu (the canvas\n * shows only the closed state), keyboard close on Escape, and click-outside.\n *\n * Consumer wires `value` + `onChange` to whatever language store they use\n * (zustand / i18next / etc.) so this primitive stays state-management\n * agnostic.\n */\n\nexport interface LangOption {\n\tvalue: string;\n\tflag: string;\n\tlabel: string;\n}\n\nexport const DEFAULT_LANG_OPTIONS: ReadonlyArray<LangOption> = [\n\t{ value: 'en', flag: '🇺🇸', label: 'English' },\n\t{ value: 'es', flag: '🇪🇸', label: 'Español' },\n\t{ value: 'fr', flag: '🇫🇷', label: 'Français' },\n];\n\nexport interface LangSwitcherProps {\n\tvalue?: string;\n\tonChange?: (value: string) => void;\n\toptions?: ReadonlyArray<LangOption>;\n\t/** Override the root data-testid. Defaults to `lang-switcher`. */\n\ttestId?: string;\n\tstyle?: CSSProperties;\n}\n\nexport function LangSwitcher({\n\tvalue = 'en',\n\tonChange,\n\toptions = DEFAULT_LANG_OPTIONS,\n\ttestId = 'lang-switcher',\n\tstyle,\n}: LangSwitcherProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst rootRef = useRef<HTMLDivElement | null>(null);\n\n\tconst active = useMemo(\n\t\t() => options.find((o) => o.value === value) ?? options[0],\n\t\t[options, value]\n\t);\n\n\tconst handleSelect = useCallback(\n\t\t(next: string) => {\n\t\t\tsetOpen(false);\n\t\t\tif (next !== value) onChange?.(next);\n\t\t},\n\t\t[onChange, value]\n\t);\n\n\t// Close on click-outside.\n\tuseEffect(() => {\n\t\tif (!open) return undefined;\n\t\tconst handle = (e: MouseEvent) => {\n\t\t\tif (!rootRef.current?.contains(e.target as Node)) setOpen(false);\n\t\t};\n\t\tdocument.addEventListener('mousedown', handle);\n\t\treturn () => document.removeEventListener('mousedown', handle);\n\t}, [open]);\n\n\t// Close on Escape.\n\tuseEffect(() => {\n\t\tif (!open) return undefined;\n\t\tconst handle = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') setOpen(false);\n\t\t};\n\t\tdocument.addEventListener('keydown', handle);\n\t\treturn () => document.removeEventListener('keydown', handle);\n\t}, [open]);\n\n\treturn (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tdata-testid={testId}\n\t\t\tstyle={{ position: 'relative', display: 'inline-block', ...style }}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\taria-expanded={open}\n\t\t\t\tdata-testid={`${testId}-toggle`}\n\t\t\t\tonClick={() => setOpen((v) => !v)}\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 6,\n\t\t\t\t\tpadding: '5px 10px',\n\t\t\t\t\tborderRadius: 'var(--r-md)',\n\t\t\t\t\tborder: '1px solid var(--border-strong)',\n\t\t\t\t\tbackground: 'var(--surface-0)',\n\t\t\t\t\tcolor: 'var(--ink-1)',\n\t\t\t\t\tfontSize: 12.5,\n\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tfontFamily: 'inherit',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span style={{ fontSize: 16, lineHeight: 1 }}>{active.flag}</span>\n\t\t\t\t{active.label}\n\t\t\t\t<Icon name=\"chevronDown\" size={10} color=\"var(--ink-3)\" />\n\t\t\t</button>\n\t\t\t{open ? (\n\t\t\t\t<ul\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\tdata-testid={`${testId}-menu`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 'calc(100% + 4px)',\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\tminWidth: '100%',\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 4,\n\t\t\t\t\t\tlistStyle: 'none',\n\t\t\t\t\t\tbackground: 'var(--surface-0)',\n\t\t\t\t\t\tborder: '1px solid var(--border-strong)',\n\t\t\t\t\t\tborderRadius: 'var(--r-md)',\n\t\t\t\t\t\tboxShadow: 'var(--shadow-lg)',\n\t\t\t\t\t\tzIndex: 50,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{options.map((opt) => {\n\t\t\t\t\t\tconst selected = opt.value === value;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<li key={opt.value}>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\taria-selected={selected}\n\t\t\t\t\t\t\t\t\tdata-testid={`${testId}-option-${opt.value}`}\n\t\t\t\t\t\t\t\t\tonClick={() => handleSelect(opt.value)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t\t\t\tpadding: '6px 10px',\n\t\t\t\t\t\t\t\t\t\tborderRadius: 'var(--r-sm)',\n\t\t\t\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\t\t\t\tbackground: selected\n\t\t\t\t\t\t\t\t\t\t\t? 'var(--primary-soft)'\n\t\t\t\t\t\t\t\t\t\t\t: 'transparent',\n\t\t\t\t\t\t\t\t\t\tcolor: selected ? 'var(--primary)' : 'var(--ink-1)',\n\t\t\t\t\t\t\t\t\t\tfontSize: 12.5,\n\t\t\t\t\t\t\t\t\t\tfontWeight: selected ? 600 : 500,\n\t\t\t\t\t\t\t\t\t\tfontFamily: 'inherit',\n\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\ttextAlign: 'left',\n\t\t\t\t\t\t\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 16, lineHeight: 1 }}>\n\t\t\t\t\t\t\t\t\t\t{opt.flag}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ul>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n","import type { CSSProperties } from 'react';\n\n/**\n * Avatar — initials on a soft gradient, ported from\n * design/components/primitives.jsx. The `idx` prop selects one of six\n * fixed palettes so the same name renders the same color across the app.\n */\n\nconst PALETTES: ReadonlyArray<{ from: string; to: string; fg: string }> = [\n { from: 'oklch(0.95 0.04 235)', to: 'oklch(0.90 0.05 235)', fg: 'oklch(0.40 0.10 235)' },\n { from: 'oklch(0.95 0.04 162)', to: 'oklch(0.90 0.05 162)', fg: 'oklch(0.40 0.10 162)' },\n { from: 'oklch(0.95 0.04 285)', to: 'oklch(0.90 0.05 285)', fg: 'oklch(0.40 0.10 285)' },\n { from: 'oklch(0.95 0.04 25)', to: 'oklch(0.90 0.05 25)', fg: 'oklch(0.40 0.12 25)' },\n { from: 'oklch(0.95 0.04 75)', to: 'oklch(0.90 0.05 75)', fg: 'oklch(0.40 0.11 75)' },\n { from: 'oklch(0.95 0.04 305)', to: 'oklch(0.90 0.05 305)', fg: 'oklch(0.40 0.11 305)' },\n];\n\nfunction initialsOf(name: string): string {\n const parts = name.trim().split(/\\s+/);\n const first = parts[0]?.[0] ?? '?';\n const last = parts.length > 1 ? (parts[parts.length - 1]?.[0] ?? '') : '';\n return `${first}${last}`.toUpperCase();\n}\n\nfunction hashIdx(name: string): number {\n let h = 0;\n for (let i = 0; i < name.length; i++) h = (h * 31 + name.charCodeAt(i)) | 0;\n return Math.abs(h) % PALETTES.length;\n}\n\nexport interface AvatarProps {\n name: string;\n /** Pixel size; defaults to 28. */\n size?: number;\n /** Palette index 0-5. When omitted, derived from the name. */\n idx?: number;\n style?: CSSProperties;\n testId?: string;\n}\n\nexport function Avatar({ name, size = 28, idx, style, testId }: AvatarProps) {\n const palette = PALETTES[idx ?? hashIdx(name)] ?? PALETTES[0]!;\n return (\n <div\n data-testid={testId}\n style={{\n width: size,\n height: size,\n borderRadius: 999,\n background: `linear-gradient(135deg, ${palette.from}, ${palette.to})`,\n color: palette.fg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: Math.max(10, Math.round(size * 0.36)),\n fontWeight: 600,\n flexShrink: 0,\n letterSpacing: '0.02em',\n ...style,\n }}\n >\n {initialsOf(name)}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\nimport { Badge, type BadgeTone } from './Badge';\nimport { Card } from './Card';\n\nexport type StatTone = 'neutral' | 'primary' | 'success' | 'warning' | 'info' | 'danger' | 'ai';\n\nconst VALUE_COLOR: Record<StatTone, string> = {\n neutral: 'var(--ink-1)',\n primary: 'var(--primary)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n info: 'var(--info)',\n danger: 'var(--danger)',\n ai: 'var(--ai)',\n};\n\nexport interface StatProps {\n label: ReactNode;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional bullet badge shown beside `sub` (e.g., \"+6\"). */\n delta?: ReactNode;\n tone?: StatTone;\n /** Adds a sparkle accent next to the label. */\n ai?: boolean;\n padding?: number;\n style?: CSSProperties;\n testId?: string;\n}\n\n/**\n * Stat — ported from design/components/patterns.jsx. Renders inside a\n * Card; uses `flex-end` alignment so `value` and `sub` sit on the same\n * line below the label. Tone colors the value; sub is always\n * `var(--ink-3)`.\n */\nexport function Stat({\n label,\n value,\n sub,\n delta,\n tone = 'neutral',\n ai,\n padding = 18,\n style,\n testId,\n}: StatProps) {\n const valueColor = ai ? 'var(--ai)' : VALUE_COLOR[tone];\n const badgeTone: BadgeTone =\n tone === 'neutral' || tone === 'ai' ? 'primary' : (tone as BadgeTone);\n return (\n <Card padding={padding} style={{ position: 'relative', ...style }} testId={testId}>\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n marginBottom: 10,\n }}\n >\n <span\n style={{\n fontSize: 11.5,\n color: 'var(--ink-2)',\n fontWeight: 500,\n letterSpacing: '0.04em',\n textTransform: 'uppercase',\n }}\n >\n {label}\n </span>\n {ai ? <AISparkle size={12} /> : null}\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: 8,\n }}\n >\n <div>\n <div\n style={{\n fontSize: 24,\n fontWeight: 600,\n letterSpacing: '-0.025em',\n fontVariantNumeric: 'tabular-nums',\n color: valueColor,\n }}\n >\n {value}\n </div>\n {sub || delta ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n marginTop: 6,\n }}\n >\n {delta ? (\n <Badge tone={badgeTone} size=\"sm\">\n {delta}\n </Badge>\n ) : null}\n {sub ? (\n <span style={{ fontSize: 11.5, color: 'var(--ink-3)' }}>{sub}</span>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n </Card>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface SegmentedControlItem<T extends string = string> {\n value: T;\n label: ReactNode;\n}\n\nexport interface SegmentedControlProps<T extends string = string> {\n items: ReadonlyArray<SegmentedControlItem<T>>;\n value: T;\n onChange?: (value: T) => void;\n size?: 'sm' | 'md';\n style?: CSSProperties;\n testId?: string;\n}\n\nexport function SegmentedControl<T extends string = string>({\n items,\n value,\n onChange,\n size = 'md',\n style,\n testId,\n}: SegmentedControlProps<T>) {\n const h = size === 'sm' ? 28 : 32;\n const fz = size === 'sm' ? 12 : 12.5;\n return (\n <div\n role=\"tablist\"\n data-testid={testId}\n style={{\n display: 'inline-flex',\n height: h,\n padding: 2,\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--r-md)',\n gap: 2,\n ...style,\n }}\n >\n {items.map((it) => {\n const active = it.value === value;\n return (\n <button\n key={it.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n data-state={active ? 'active' : 'inactive'}\n data-testid={testId ? `${testId}-${it.value}` : undefined}\n onClick={() => onChange?.(it.value)}\n style={{\n border: 0,\n padding: '0 10px',\n height: h - 4,\n borderRadius: 6,\n background: active ? 'var(--surface-0)' : 'transparent',\n color: active ? 'var(--ink-1)' : 'var(--ink-3)',\n fontSize: fz,\n fontWeight: active ? 500 : 450,\n cursor: 'pointer',\n boxShadow: active ? 'var(--shadow-xs)' : 'none',\n transition: 'background .12s, color .12s',\n }}\n >\n {it.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { Icon } from './Icon';\n\nexport interface PaginationProps {\n page: number;\n total: number;\n onChange?: (page: number) => void;\n style?: CSSProperties;\n testId?: string;\n}\n\nfunction PageButton({\n children,\n active,\n disabled,\n onClick,\n testId,\n}: {\n children: React.ReactNode;\n active?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n testId?: string;\n}) {\n return (\n <button\n type=\"button\"\n data-testid={testId}\n onClick={onClick}\n disabled={disabled}\n style={{\n minWidth: 26,\n height: 26,\n padding: '0 6px',\n border: '1px solid',\n borderColor: active ? 'var(--primary)' : 'var(--border)',\n background: active ? 'var(--primary-soft)' : 'var(--surface-0)',\n color: active ? 'var(--primary)' : 'var(--ink-2)',\n borderRadius: 6,\n fontSize: 12,\n fontWeight: active ? 500 : 450,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.4 : 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFeatureSettings: '\"tnum\"',\n }}\n >\n {children}\n </button>\n );\n}\n\nexport function Pagination({ page, total, onChange, style, testId }: PaginationProps) {\n const go = (p: number) => {\n if (p < 1 || p > total || p === page) return;\n onChange?.(p);\n };\n const pages: number[] = [];\n const window = 1;\n const start = Math.max(1, page - window);\n const end = Math.min(total, page + window);\n for (let p = start; p <= end; p++) pages.push(p);\n\n return (\n <div\n data-testid={testId}\n style={{ display: 'inline-flex', alignItems: 'center', gap: 6, ...style }}\n >\n <PageButton\n onClick={() => go(page - 1)}\n disabled={page <= 1}\n testId={testId ? `${testId}-prev` : undefined}\n >\n <Icon name=\"chevronLeft\" size={11} />\n </PageButton>\n {start > 1 ? (\n <>\n <PageButton onClick={() => go(1)} testId={testId ? `${testId}-page-1` : undefined}>\n 1\n </PageButton>\n {start > 2 ? <span style={{ color: 'var(--ink-3)', fontSize: 12 }}>…</span> : null}\n </>\n ) : null}\n {pages.map((p) => (\n <PageButton\n key={p}\n active={p === page}\n onClick={() => go(p)}\n testId={testId ? `${testId}-page-${p}` : undefined}\n >\n {p}\n </PageButton>\n ))}\n {end < total ? (\n <>\n {end < total - 1 ? <span style={{ color: 'var(--ink-3)', fontSize: 12 }}>…</span> : null}\n <PageButton\n onClick={() => go(total)}\n testId={testId ? `${testId}-page-${total}` : undefined}\n >\n {total}\n </PageButton>\n </>\n ) : null}\n <PageButton\n onClick={() => go(page + 1)}\n disabled={page >= total}\n testId={testId ? `${testId}-next` : undefined}\n >\n <Icon name=\"chevronRight\" size={11} />\n </PageButton>\n </div>\n );\n}\n","import type { CSSProperties, InputHTMLAttributes } from 'react';\n\nimport { Icon } from './Icon';\n\nexport interface ToolbarSearchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'style'> {\n width?: number | string;\n containerStyle?: CSSProperties;\n testId?: string;\n}\n\nexport function ToolbarSearch({\n width = 280,\n containerStyle,\n testId,\n placeholder,\n ...inputProps\n}: ToolbarSearchProps) {\n return (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n width,\n height: 32,\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--r-md)',\n padding: '0 10px',\n color: 'var(--ink-3)',\n ...containerStyle,\n }}\n >\n <Icon name=\"search\" size={14} />\n <input\n type=\"search\"\n placeholder={placeholder}\n data-testid={testId}\n {...inputProps}\n style={{\n flex: 1,\n minWidth: 0,\n border: 0,\n outline: 'none',\n background: 'transparent',\n color: 'var(--ink-1)',\n fontSize: 12.5,\n }}\n />\n </div>\n );\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\n\nexport interface AIChipProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children?: ReactNode;\n testId?: string;\n}\n\nexport function AIChip({ children, style, testId, ...rest }: AIChipProps) {\n return (\n <button\n type=\"button\"\n data-testid={testId}\n {...rest}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n height: 26,\n padding: '0 10px',\n borderRadius: 'var(--r-pill)',\n background: 'var(--ai-soft)',\n color: 'var(--ai)',\n border: '1px solid transparent',\n fontSize: 12,\n fontWeight: 500,\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n ...style,\n }}\n >\n <AISparkle size={11} />\n {children}\n </button>\n );\n}\n","import { useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\nimport { Icon, type IconName } from './Icon';\n\nexport type NavBadgeTone = 'neutral' | 'primary' | 'danger' | 'ai';\n\nexport interface NavItem {\n id: string;\n label: string;\n icon: IconName;\n /** Marks the item as AI-themed (sparkle glyph, accent locks). */\n ai?: boolean;\n badge?: ReactNode;\n badgeTone?: NavBadgeTone;\n /** Feature flag key — when `features[feat] === false`, item locks. */\n feat?: string;\n}\n\nexport interface NavGroup {\n group: string;\n items: NavItem[];\n ai?: boolean;\n /** Feature flag key that locks the entire group. */\n feat?: string;\n}\n\nexport interface SidebarNavItemProps {\n item: NavItem;\n active: boolean;\n collapsed: boolean;\n features?: Record<string, boolean>;\n onClick?: (id: string) => void;\n testId?: string;\n}\n\nconst LockGlyph = () => (\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path\n d=\"M17 11H7a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2z\"\n stroke=\"var(--ink-4)\"\n strokeWidth={2}\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 11V7a4 4 0 0 1 8 0v4\"\n stroke=\"var(--ink-4)\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nexport function SidebarNavItem({\n item,\n active,\n collapsed,\n features,\n onClick,\n testId,\n}: SidebarNavItemProps) {\n const [hovered, setHovered] = useState(false);\n const locked = item.feat ? features?.[item.feat] === false : false;\n\n const baseBtn: CSSProperties = {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: collapsed ? 0 : 9,\n justifyContent: collapsed ? 'center' : 'flex-start',\n padding: collapsed ? '8px 0' : '7px 10px',\n border: 0,\n borderRadius: 'var(--r-md)',\n fontSize: 13,\n fontWeight: 450,\n textAlign: 'left',\n marginBottom: 1,\n position: 'relative',\n cursor: locked ? 'default' : 'pointer',\n transition: 'background .12s, color .12s',\n };\n\n if (locked) {\n return (\n <button\n type=\"button\"\n data-testid={testId}\n data-state=\"locked\"\n title={collapsed ? item.label : undefined}\n style={{\n ...baseBtn,\n background: 'transparent',\n color: 'var(--ink-4)',\n opacity: 0.6,\n }}\n >\n <LockGlyph />\n {!collapsed ? <span style={{ flex: 1 }}>{item.label}</span> : null}\n {!collapsed ? (\n <span\n style={{\n fontSize: 10,\n fontWeight: 500,\n color: 'var(--ink-4)',\n background: 'var(--surface-2)',\n borderRadius: 999,\n padding: '1px 5px',\n }}\n >\n Pro\n </span>\n ) : null}\n </button>\n );\n }\n\n const badgeBg =\n item.badgeTone === 'danger'\n ? 'var(--danger-soft)'\n : item.badgeTone === 'ai'\n ? 'var(--ai-soft)'\n : active\n ? 'var(--primary-soft)'\n : 'var(--surface-2)';\n const badgeFg =\n item.badgeTone === 'danger'\n ? 'var(--danger)'\n : item.badgeTone === 'ai'\n ? 'var(--ai)'\n : active\n ? 'var(--primary)'\n : 'var(--ink-2)';\n\n return (\n <button\n type=\"button\"\n data-testid={testId}\n data-state={active ? 'active' : 'inactive'}\n title={collapsed ? item.label : undefined}\n onClick={() => onClick?.(item.id)}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n ...baseBtn,\n background: active\n ? 'var(--primary-soft)'\n : hovered\n ? 'var(--surface-2)'\n : 'transparent',\n color: active ? 'var(--primary)' : hovered ? 'var(--ink-1)' : 'var(--ink-2)',\n fontWeight: active ? 500 : 450,\n boxShadow: active ? 'inset 2px 0 0 var(--primary)' : 'none',\n }}\n >\n {active && !collapsed ? (\n <span\n aria-hidden\n style={{\n position: 'absolute',\n left: 0,\n top: '20%',\n bottom: '20%',\n width: 3,\n borderRadius: 999,\n background: 'var(--primary)',\n }}\n />\n ) : null}\n {item.ai ? (\n <AISparkle size={14} color={active ? 'var(--ai)' : 'var(--ai)'} />\n ) : (\n <Icon\n name={item.icon}\n size={15}\n color={active ? 'var(--primary)' : hovered ? 'var(--ink-2)' : 'var(--ink-3)'}\n />\n )}\n {!collapsed ? <span style={{ flex: 1 }}>{item.label}</span> : null}\n {!collapsed && item.badge ? (\n <span\n style={{\n fontSize: 10.5,\n fontWeight: 500,\n background: badgeBg,\n color: badgeFg,\n padding: '1px 6px',\n borderRadius: 999,\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {item.badge}\n </span>\n ) : null}\n {collapsed && item.badge ? (\n <span\n aria-hidden\n style={{\n position: 'absolute',\n top: 4,\n right: 4,\n width: 6,\n height: 6,\n borderRadius: 999,\n background:\n item.badgeTone === 'danger'\n ? 'var(--danger)'\n : item.badgeTone === 'ai'\n ? 'var(--ai)'\n : 'var(--primary)',\n border: '1.5px solid var(--sidebar)',\n }}\n />\n ) : null}\n </button>\n );\n}\n","import { useState, type ReactNode } from 'react';\n\nimport { Avatar } from './Avatar';\nimport { Icon } from './Icon';\nimport { SidebarNavItem, type NavGroup } from './SidebarNavItem';\nimport { TejaLogo } from './Brand';\n\nexport interface SidebarWorkspace {\n name: string;\n detail?: string;\n initials?: string;\n}\n\nexport interface SidebarUser {\n name: string;\n role?: string;\n paletteIdx?: number;\n}\n\nexport interface SidebarProps {\n nav: ReadonlyArray<NavGroup>;\n activeId?: string | null;\n collapsed?: boolean;\n onToggle?: () => void;\n features?: Record<string, boolean>;\n workspace?: SidebarWorkspace;\n user?: SidebarUser;\n onItemClick?: (id: string) => void;\n onUserClick?: () => void;\n onWorkspaceClick?: () => void;\n testId?: string;\n footerExtras?: ReactNode;\n}\n\nexport function Sidebar({\n nav,\n activeId,\n collapsed: collapsedProp,\n onToggle,\n features,\n workspace,\n user,\n onItemClick,\n onUserClick,\n onWorkspaceClick,\n testId,\n footerExtras,\n}: SidebarProps) {\n const [internal, setInternal] = useState(false);\n const collapsed = collapsedProp ?? internal;\n const toggle = onToggle ?? (() => setInternal((c) => !c));\n const w = collapsed ? 56 : 232;\n const aiLocked = features?.feat_ai === false;\n\n return (\n <aside\n aria-label=\"Main navigation\"\n data-testid={testId}\n data-collapsed={collapsed}\n style={{\n width: w,\n flexShrink: 0,\n background: 'var(--sidebar)',\n borderRight: '1px solid var(--border)',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n transition: 'width .18s cubic-bezier(.4,0,.2,1)',\n overflow: 'hidden',\n }}\n >\n <div\n style={{\n padding: collapsed ? '14px 0 12px' : '14px 16px 12px',\n borderBottom: '1px solid var(--divider)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: collapsed ? 'center' : 'space-between',\n }}\n >\n {!collapsed ? <TejaLogo size={22} testId={testId ? `${testId}-logo` : undefined} /> : null}\n <button\n type=\"button\"\n onClick={toggle}\n title={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n data-testid={testId ? `${testId}-toggle` : undefined}\n style={{\n width: 24,\n height: 24,\n borderRadius: 6,\n border: 0,\n background: 'transparent',\n color: 'var(--ink-3)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n }}\n >\n <Icon name={collapsed ? 'chevronRight' : 'chevronLeft'} size={12} />\n </button>\n </div>\n\n {workspace ? (\n <WorkspaceCard\n workspace={workspace}\n collapsed={collapsed}\n onClick={onWorkspaceClick}\n testId={testId ? `${testId}-workspace` : undefined}\n />\n ) : null}\n\n <nav\n style={{\n flex: 1,\n overflowY: 'auto',\n overflowX: 'hidden',\n padding: collapsed ? '8px 4px 16px' : '8px 8px 16px',\n }}\n >\n {nav.map((g) => (\n <div key={g.group} style={{ marginTop: 12 }}>\n {!collapsed ? (\n g.ai ? (\n <div style={{ margin: '2px 10px 6px', display: 'flex', alignItems: 'center', gap: 6 }}>\n <div\n style={{\n flex: 1,\n height: 1,\n background: aiLocked\n ? 'var(--divider)'\n : 'linear-gradient(90deg, var(--ai-soft), transparent)',\n }}\n />\n {aiLocked ? (\n <span\n style={{\n fontSize: 9.5,\n fontWeight: 500,\n color: 'var(--ink-4)',\n background: 'var(--surface-2)',\n borderRadius: 999,\n padding: '1px 5px',\n whiteSpace: 'nowrap',\n }}\n >\n Pro\n </span>\n ) : null}\n </div>\n ) : (\n <div\n style={{\n fontSize: 10.5,\n fontWeight: 500,\n letterSpacing: '0.06em',\n color: 'var(--ink-4)',\n textTransform: 'uppercase',\n padding: '6px 10px 4px',\n }}\n >\n {g.group}\n </div>\n )\n ) : null}\n {collapsed && g.ai ? (\n <div style={{ margin: '2px 8px 6px', height: 1, background: 'var(--divider)' }} />\n ) : null}\n {g.items.map((it) => (\n <SidebarNavItem\n key={it.id}\n item={it}\n active={it.id === activeId}\n collapsed={collapsed}\n features={features}\n onClick={onItemClick}\n testId={testId ? `${testId}-item-${it.id}` : undefined}\n />\n ))}\n </div>\n ))}\n </nav>\n\n <div\n style={{\n padding: collapsed ? '10px 4px' : '10px',\n borderTop: '1px solid var(--divider)',\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n }}\n >\n {footerExtras}\n {user ? (\n <UserFooter\n user={user}\n collapsed={collapsed}\n onClick={onUserClick}\n testId={testId ? `${testId}-user` : undefined}\n />\n ) : null}\n </div>\n </aside>\n );\n}\n\nfunction WorkspaceCard({\n workspace,\n collapsed,\n onClick,\n testId,\n}: {\n workspace: SidebarWorkspace;\n collapsed: boolean;\n onClick?: () => void;\n testId?: string;\n}) {\n const [hovered, setHovered] = useState(false);\n const initials = workspace.initials ?? defaultInitials(workspace.name);\n if (collapsed) {\n return (\n <div style={{ padding: '8px 0', display: 'flex', justifyContent: 'center' }}>\n <div\n data-testid={testId}\n style={{\n width: 28,\n height: 28,\n borderRadius: 8,\n background: 'linear-gradient(135deg, var(--primary), oklch(0.6 0.14 285))',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'white',\n fontSize: 10,\n fontWeight: 600,\n }}\n >\n {initials}\n </div>\n </div>\n );\n }\n return (\n <button\n type=\"button\"\n data-testid={testId}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n margin: '10px 10px 4px',\n padding: '8px 10px',\n border: '1px solid var(--border)',\n borderRadius: 'var(--r-md)',\n background: hovered ? 'var(--surface-1)' : 'var(--surface-0)',\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n textAlign: 'left',\n transition: 'background .12s',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n width: 22,\n height: 22,\n borderRadius: 6,\n background: 'linear-gradient(135deg, var(--primary), oklch(0.6 0.14 285))',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'white',\n fontSize: 10,\n fontWeight: 600,\n }}\n >\n {initials}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: 12.5,\n fontWeight: 500,\n color: 'var(--ink-1)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {workspace.name}\n </div>\n {workspace.detail ? (\n <div\n style={{\n fontSize: 10.5,\n color: 'var(--ink-3)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {workspace.detail}\n </div>\n ) : null}\n </div>\n <Icon name=\"chevronDown\" size={11} color=\"var(--ink-3)\" />\n </button>\n );\n}\n\nfunction UserFooter({\n user,\n collapsed,\n onClick,\n testId,\n}: {\n user: SidebarUser;\n collapsed: boolean;\n onClick?: () => void;\n testId?: string;\n}) {\n const [hovered, setHovered] = useState(false);\n if (collapsed) {\n return (\n <div style={{ display: 'flex', justifyContent: 'center' }} data-testid={testId}>\n <Avatar name={user.name} size={28} idx={user.paletteIdx} />\n </div>\n );\n }\n return (\n <button\n type=\"button\"\n data-testid={testId}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: 9,\n padding: '6px 8px',\n border: 0,\n borderRadius: 'var(--r-md)',\n background: hovered ? 'var(--surface-2)' : 'transparent',\n textAlign: 'left',\n cursor: 'pointer',\n transition: 'background .12s',\n }}\n >\n <Avatar name={user.name} size={26} idx={user.paletteIdx} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: 12.5,\n fontWeight: 500,\n color: 'var(--ink-1)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {user.name}\n </div>\n {user.role ? (\n <div\n style={{\n fontSize: 10.5,\n color: 'var(--ink-3)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {user.role}\n </div>\n ) : null}\n </div>\n <Icon name=\"more\" size={14} color={hovered ? 'var(--ink-2)' : 'var(--ink-3)'} />\n </button>\n );\n}\n\nfunction defaultInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n const first = parts[0]?.[0] ?? '?';\n const second = parts[1]?.[0] ?? '';\n return `${first}${second}`.toUpperCase();\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from './Icon';\n\n/**\n * A clickable breadcrumb crumb. Pass `onClick` to make a crumb navigate; the\n * library stays router-agnostic — consumers wire navigation in `onClick`. The\n * last crumb in a trail is always rendered as static text even if it has an\n * `onClick`, since it represents the current page.\n */\nexport interface BreadcrumbItem {\n label: ReactNode;\n onClick?: () => void;\n testId?: string;\n}\n\nexport type BreadcrumbEntry = ReactNode | BreadcrumbItem;\n\nfunction isBreadcrumbItem(entry: BreadcrumbEntry): entry is BreadcrumbItem {\n return typeof entry === 'object' && entry !== null && 'label' in entry;\n}\n\nfunction crumbLabel(entry: BreadcrumbEntry): ReactNode {\n return isBreadcrumbItem(entry) ? entry.label : entry;\n}\n\nexport interface TopBarProps {\n title?: ReactNode;\n breadcrumb?: ReadonlyArray<BreadcrumbEntry>;\n /**\n * Custom node rendered in the left header region in place of the\n * breadcrumb/title. Use for a header-band control such as a mode switcher\n * (e.g. Communications). When provided, breadcrumb/title are not shown.\n */\n headerLeft?: ReactNode;\n actions?: ReactNode;\n searchSlot?: ReactNode;\n /** Render the search slot. Defaults to true; pass false to suppress it\n * (e.g. secure-messaging surfaces that must not surface AI search). */\n search?: boolean;\n /** Show notification bell. Defaults to true. */\n bell?: boolean;\n hasNotifications?: boolean;\n onBellClick?: () => void;\n testId?: string;\n}\n\nfunction Breadcrumb({\n items,\n testId,\n}: {\n items: ReadonlyArray<BreadcrumbEntry>;\n testId?: string;\n}) {\n // The generic \"Workspace\" root is stripped centrally so every breadcrumb\n // starts with its module as the single top-level crumb.\n const trail = items.filter((b) => crumbLabel(b) !== 'Workspace');\n return (\n <div\n data-testid={testId}\n style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 12.5, color: 'var(--ink-3)' }}\n >\n {trail.map((b, i) => {\n const isLast = i === trail.length - 1;\n const clickable = isBreadcrumbItem(b) && !!b.onClick && !isLast;\n return (\n <span key={i} style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n {i > 0 ? <Icon name=\"chevronRight\" size={10} color=\"var(--ink-4)\" /> : null}\n {clickable ? (\n <button\n type=\"button\"\n data-testid={b.testId}\n onClick={b.onClick}\n style={{\n border: 0,\n background: 'transparent',\n padding: 0,\n cursor: 'pointer',\n font: 'inherit',\n color: 'var(--ink-3)',\n fontWeight: 400,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.color = 'var(--primary)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = 'var(--ink-3)';\n }}\n >\n {b.label}\n </button>\n ) : (\n <span\n data-testid={isBreadcrumbItem(b) ? b.testId : undefined}\n style={{\n color: isLast ? 'var(--ink-1)' : 'var(--ink-3)',\n fontWeight: isLast ? 500 : 400,\n }}\n >\n {crumbLabel(b)}\n </span>\n )}\n </span>\n );\n })}\n </div>\n );\n}\n\nexport function TopBar({\n title,\n breadcrumb,\n headerLeft,\n actions,\n searchSlot,\n search = true,\n bell = true,\n hasNotifications,\n onBellClick,\n testId,\n}: TopBarProps) {\n return (\n <header\n data-testid={testId}\n style={{\n height: 56,\n padding: '0 24px',\n borderBottom: '1px solid var(--border)',\n background: 'var(--surface-0)',\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n flexShrink: 0,\n }}\n >\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', gap: 10, minWidth: 0 }}>\n {headerLeft ? (\n headerLeft\n ) : breadcrumb ? (\n <Breadcrumb items={breadcrumb} testId={testId ? `${testId}-breadcrumb` : undefined} />\n ) : title ? (\n <h2 style={{ fontSize: 15, fontWeight: 600, margin: 0 }} data-testid={testId ? `${testId}-title` : undefined}>\n {title}\n </h2>\n ) : null}\n </div>\n {search === false ? null : searchSlot}\n {bell ? (\n <button\n type=\"button\"\n data-testid={testId ? `${testId}-bell` : undefined}\n onClick={onBellClick}\n style={{\n width: 32,\n height: 32,\n borderRadius: 'var(--r-md)',\n border: '1px solid var(--border)',\n background: 'var(--surface-0)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n cursor: 'pointer',\n }}\n >\n <Icon name=\"bell\" size={14} color=\"var(--ink-2)\" />\n {hasNotifications ? (\n <span\n aria-hidden\n style={{\n position: 'absolute',\n top: 6,\n right: 6,\n width: 6,\n height: 6,\n borderRadius: 999,\n background: 'var(--danger)',\n border: '1.5px solid var(--surface-0)',\n }}\n />\n ) : null}\n </button>\n ) : null}\n {actions}\n </header>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Sidebar, type SidebarProps } from './Sidebar';\nimport { TopBar, type TopBarProps } from './TopBar';\n\nexport interface AppShellProps\n extends Pick<\n SidebarProps,\n | 'nav'\n | 'activeId'\n | 'collapsed'\n | 'onToggle'\n | 'features'\n | 'workspace'\n | 'user'\n | 'onItemClick'\n | 'onUserClick'\n | 'onWorkspaceClick'\n | 'footerExtras'\n > {\n /** Slot passed straight to TopBar. */\n topBar?: TopBarProps;\n children: ReactNode;\n /** Hide the topbar entirely (use for full-bleed screens). */\n hideTopBar?: boolean;\n /** Render the TopBar search slot. Defaults to true; pass false to suppress\n * it (overrides any `searchSlot` on `topBar`). */\n search?: boolean;\n testId?: string;\n}\n\nexport function AppShell({\n nav,\n activeId,\n collapsed,\n onToggle,\n features,\n workspace,\n user,\n onItemClick,\n onUserClick,\n onWorkspaceClick,\n footerExtras,\n topBar,\n hideTopBar,\n search,\n children,\n testId,\n}: AppShellProps) {\n return (\n <div\n className=\"teja\"\n data-testid={testId}\n style={{\n width: '100%',\n height: '100vh',\n background: 'var(--bg)',\n display: 'flex',\n overflow: 'hidden',\n fontFamily: 'var(--font-sans)',\n color: 'var(--ink-1)',\n }}\n >\n <Sidebar\n nav={nav}\n activeId={activeId}\n collapsed={collapsed}\n onToggle={onToggle}\n features={features}\n workspace={workspace}\n user={user}\n onItemClick={onItemClick}\n onUserClick={onUserClick}\n onWorkspaceClick={onWorkspaceClick}\n footerExtras={footerExtras}\n testId={testId ? `${testId}-sidebar` : undefined}\n />\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n height: '100%',\n }}\n >\n {hideTopBar ? null : (\n <TopBar\n {...topBar}\n search={search ?? topBar?.search}\n testId={testId ? `${testId}-topbar` : undefined}\n />\n )}\n <main\n data-testid={testId ? `${testId}-main` : undefined}\n style={{ flex: 1, overflow: 'auto', background: 'var(--bg)' }}\n >\n {children}\n </main>\n </div>\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\n\nexport type DrawerWidth = 'md' | 'lg' | number;\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], area[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction resolveWidth(w: DrawerWidth | undefined): number {\n if (typeof w === 'number') return w;\n if (w === 'lg') return 640;\n return 520;\n}\n\nfunction getFocusable(root: HTMLElement | null): HTMLElement[] {\n if (!root) return [];\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => !el.hasAttribute('aria-hidden')\n );\n}\n\n// ── DrawerHeader ───────────────────────────────────────────────────\nexport interface DrawerHeaderProps {\n /** Slot rendered on the left of the header (title, breadcrumb, etc.). */\n children?: ReactNode;\n /** Extra inline actions placed before the close button. */\n actions?: ReactNode;\n /** Render the close button and wire its click to this handler. */\n onClose?: () => void;\n style?: CSSProperties;\n /** Forwarded as `data-testid` on the header root. */\n testId?: string;\n /** Forwarded as `data-testid` on the close button. */\n closeTestId?: string;\n}\n\nexport function DrawerHeader({\n children,\n actions,\n onClose,\n style,\n testId,\n closeTestId,\n}: DrawerHeaderProps) {\n return (\n <div\n data-testid={testId}\n style={{\n padding: '12px 16px',\n borderBottom: '1px solid var(--divider)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n flexShrink: 0,\n background: 'var(--surface-0)',\n ...style,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, minWidth: 0, flex: 1 }}>\n {children}\n </div>\n <div style={{ display: 'flex', gap: 4, flexShrink: 0, alignItems: 'center' }}>\n {actions}\n {onClose ? (\n <button\n type=\"button\"\n aria-label=\"Close\"\n data-testid={closeTestId}\n onClick={onClose}\n style={{\n width: 26,\n height: 26,\n borderRadius: 'var(--r-sm)',\n border: '1px solid var(--border)',\n background: 'var(--surface-1)',\n color: 'var(--ink-2)',\n cursor: 'pointer',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 14,\n lineHeight: 1,\n padding: 0,\n }}\n >\n <span aria-hidden style={{ fontSize: 14, lineHeight: 1 }}>×</span>\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\n// ── DrawerFooter ───────────────────────────────────────────────────\nexport interface DrawerFooterProps {\n /** Optional left-aligned context string (\"Confirms with Sarah…\"). */\n info?: ReactNode;\n children?: ReactNode;\n style?: CSSProperties;\n testId?: string;\n}\n\nexport function DrawerFooter({ info, children, style, testId }: DrawerFooterProps) {\n return (\n <div\n data-testid={testId}\n style={{\n padding: 12,\n borderTop: '1px solid var(--border)',\n background: 'var(--surface-0)',\n display: 'flex',\n gap: 6,\n alignItems: 'center',\n flexShrink: 0,\n ...style,\n }}\n >\n {info ? (\n <span style={{ fontSize: 11, color: 'var(--ink-3)', flex: 1 }}>{info}</span>\n ) : null}\n {children}\n </div>\n );\n}\n\n// ── Drawer ─────────────────────────────────────────────────────────\nexport interface DrawerProps {\n /** Whether the drawer is mounted/visible. */\n open: boolean;\n /** Fired on overlay click, Escape key, and close button (via DrawerHeader). */\n onClose: () => void;\n /** Width preset or arbitrary number. md=520, lg=640. Default md. */\n width?: DrawerWidth;\n /** Slot for `<DrawerHeader>`. */\n header?: ReactNode;\n /** Slot for `<DrawerFooter>`. */\n footer?: ReactNode;\n children?: ReactNode;\n /** Forwarded as `data-testid` on the root. Overlay gets `${testId}-overlay`. */\n testId?: string;\n /** ARIA label for the dialog. */\n ariaLabel?: string;\n /** Customize the root container `style`. */\n style?: CSSProperties;\n /** Customize the inner panel `style`. */\n panelStyle?: CSSProperties;\n}\n\n/**\n * Drawer — right-anchored slide-over with overlay scrim, focus trap, and\n * Escape-to-close. Source: design/components/primitives.jsx:168\n * Composes with DrawerHeader/DrawerFooter.\n */\nexport function Drawer({\n open,\n onClose,\n width = 'md',\n header,\n footer,\n children,\n testId,\n ariaLabel,\n style,\n panelStyle,\n}: DrawerProps) {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const previouslyFocusedRef = useRef<HTMLElement | null>(null);\n\n // Escape to close\n useEffect(() => {\n if (!open) return;\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n } else if (e.key === 'Tab') {\n const focusables = getFocusable(panelRef.current);\n if (focusables.length === 0) {\n e.preventDefault();\n panelRef.current?.focus();\n return;\n }\n const first = focusables[0]!;\n const last = focusables[focusables.length - 1]!;\n const active = document.activeElement as HTMLElement | null;\n if (e.shiftKey) {\n if (active === first || !panelRef.current?.contains(active)) {\n e.preventDefault();\n last.focus();\n }\n } else if (active === last) {\n e.preventDefault();\n first.focus();\n }\n }\n };\n document.addEventListener('keydown', onKey, true);\n return () => document.removeEventListener('keydown', onKey, true);\n }, [open, onClose]);\n\n // Initial focus + restore on close\n useEffect(() => {\n if (!open) return;\n previouslyFocusedRef.current = document.activeElement as HTMLElement | null;\n // microtask so the panel is mounted\n const t = window.setTimeout(() => {\n const focusables = getFocusable(panelRef.current);\n if (focusables.length > 0) {\n focusables[0]!.focus();\n } else if (panelRef.current) {\n panelRef.current.focus();\n }\n }, 0);\n return () => {\n window.clearTimeout(t);\n previouslyFocusedRef.current?.focus?.();\n };\n }, [open]);\n\n const handleOverlayClick = useCallback(() => {\n onClose();\n }, [onClose]);\n\n if (!open) return null;\n\n const widthPx = resolveWidth(width);\n const overlayTestId = testId ? `${testId}-overlay` : undefined;\n\n return (\n <div\n data-testid={testId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 1000,\n ...style,\n }}\n >\n <div\n data-testid={overlayTestId}\n onClick={handleOverlayClick}\n style={{\n position: 'absolute',\n inset: 0,\n background: 'oklch(0 0 0 / .35)',\n cursor: 'pointer',\n }}\n />\n <div\n ref={panelRef}\n tabIndex={-1}\n style={{\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: 0,\n width: widthPx,\n maxWidth: '100vw',\n background: 'var(--surface-0)',\n borderLeft: '1px solid var(--border)',\n boxShadow:\n '-24px 0 60px -20px rgba(0,0,0,.28), -8px 0 20px -10px rgba(0,0,0,.18)',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n outline: 'none',\n ...panelStyle,\n }}\n >\n {header}\n <div style={{ flex: 1, overflowY: 'auto', minHeight: 0 }}>{children}</div>\n {footer}\n </div>\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react';\n\nimport { Button } from './Button';\n\nexport type ModalVariant = 'confirm' | 'form';\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], area[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nconst VARIANT_MAX_WIDTH: Record<ModalVariant, number> = {\n confirm: 420,\n form: 640,\n};\n\nfunction getFocusable(root: HTMLElement | null): HTMLElement[] {\n if (!root) return [];\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => !el.hasAttribute('aria-hidden')\n );\n}\n\n// ── ModalHeader ────────────────────────────────────────────────────\nexport interface ModalHeaderProps {\n /** Title text. */\n title?: ReactNode;\n /** Optional supporting description rendered under the title. */\n description?: ReactNode;\n /** Custom left-side slot — overrides `title`/`description` rendering. */\n children?: ReactNode;\n /** Render the close button and wire its click. */\n onClose?: () => void;\n style?: CSSProperties;\n testId?: string;\n closeTestId?: string;\n}\n\nexport function ModalHeader({\n title,\n description,\n children,\n onClose,\n style,\n testId,\n closeTestId,\n}: ModalHeaderProps) {\n return (\n <div\n data-testid={testId}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 12,\n padding: '18px 22px 14px',\n borderBottom: '1px solid var(--divider)',\n ...style,\n }}\n >\n <div style={{ minWidth: 0, flex: 1 }}>\n {children ?? (\n <>\n {title ? (\n <div\n style={{\n fontSize: 15,\n fontWeight: 650,\n letterSpacing: '-0.01em',\n color: 'var(--ink-1)',\n }}\n >\n {title}\n </div>\n ) : null}\n {description ? (\n <div\n style={{\n marginTop: 4,\n fontSize: 12.5,\n color: 'var(--ink-2)',\n lineHeight: 1.45,\n }}\n >\n {description}\n </div>\n ) : null}\n </>\n )}\n </div>\n {onClose ? (\n <button\n type=\"button\"\n aria-label=\"Close\"\n data-testid={closeTestId}\n onClick={onClose}\n style={{\n width: 28,\n height: 28,\n borderRadius: 'var(--r-sm)',\n border: '1px solid var(--border)',\n background: 'var(--surface-1)',\n color: 'var(--ink-3)',\n cursor: 'pointer',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n flexShrink: 0,\n }}\n >\n <span aria-hidden style={{ fontSize: 14, lineHeight: 1 }}>×</span>\n </button>\n ) : null}\n </div>\n );\n}\n\n// ── ModalFooter ────────────────────────────────────────────────────\nexport interface ModalFooterProps {\n children?: ReactNode;\n style?: CSSProperties;\n testId?: string;\n}\n\nexport function ModalFooter({ children, style, testId }: ModalFooterProps) {\n return (\n <div\n data-testid={testId}\n style={{\n padding: '14px 22px 18px',\n borderTop: '1px solid var(--divider)',\n display: 'flex',\n gap: 8,\n justifyContent: 'flex-end',\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\n// ── Modal ──────────────────────────────────────────────────────────\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n /** `confirm` (max-width 420) or `form` (max-width 640). Default confirm. */\n variant?: ModalVariant;\n /** Override the computed max-width with an exact pixel value. */\n maxWidth?: number;\n /** Convenience: title shown via internal ModalHeader if `header` is omitted. */\n title?: ReactNode;\n /** Convenience: description under the title in the internal ModalHeader. */\n description?: ReactNode;\n /** Custom header slot — overrides internal title/description rendering. */\n header?: ReactNode;\n /** Custom footer slot — overrides convenience confirm/cancel buttons. */\n footer?: ReactNode;\n /** Convenience confirm/cancel buttons rendered into ModalFooter. */\n confirmLabel?: ReactNode;\n cancelLabel?: ReactNode;\n onConfirm?: () => void;\n /** Render confirm with the `danger` button variant (for destructive prompts). */\n destructive?: boolean;\n children?: ReactNode;\n /** Forwarded as `data-testid` on root. Overlay/close/confirm/cancel get suffixes. */\n testId?: string;\n ariaLabel?: string;\n style?: CSSProperties;\n panelStyle?: CSSProperties;\n}\n\n/**\n * Modal — centered dialog with focus trap, Escape close, and backdrop blur.\n * Source: design/components/patterns.jsx Modal (and billing-modals.jsx\n * `ModalOverlay`/`ModalHeader`/`ModalFooter` shadows for confirm-style usage).\n */\nexport function Modal({\n open,\n onClose,\n variant = 'confirm',\n maxWidth,\n title,\n description,\n header,\n footer,\n confirmLabel,\n cancelLabel,\n onConfirm,\n destructive,\n children,\n testId,\n ariaLabel,\n style,\n panelStyle,\n}: ModalProps) {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const previouslyFocusedRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n } else if (e.key === 'Tab') {\n const focusables = getFocusable(panelRef.current);\n if (focusables.length === 0) {\n e.preventDefault();\n panelRef.current?.focus();\n return;\n }\n const first = focusables[0]!;\n const last = focusables[focusables.length - 1]!;\n const active = document.activeElement as HTMLElement | null;\n if (e.shiftKey) {\n if (active === first || !panelRef.current?.contains(active)) {\n e.preventDefault();\n last.focus();\n }\n } else if (active === last) {\n e.preventDefault();\n first.focus();\n }\n }\n };\n document.addEventListener('keydown', onKey, true);\n return () => document.removeEventListener('keydown', onKey, true);\n }, [open, onClose]);\n\n useEffect(() => {\n if (!open) return;\n previouslyFocusedRef.current = document.activeElement as HTMLElement | null;\n const t = window.setTimeout(() => {\n const focusables = getFocusable(panelRef.current);\n if (focusables.length > 0) {\n focusables[0]!.focus();\n } else if (panelRef.current) {\n panelRef.current.focus();\n }\n }, 0);\n return () => {\n window.clearTimeout(t);\n previouslyFocusedRef.current?.focus?.();\n };\n }, [open]);\n\n const handleOverlayClick = useCallback(() => {\n onClose();\n }, [onClose]);\n\n if (!open) return null;\n\n const widthPx = maxWidth ?? VARIANT_MAX_WIDTH[variant];\n const overlayTestId = testId ? `${testId}-overlay` : undefined;\n const closeTestId = testId ? `${testId}-close` : undefined;\n const confirmTestId = testId ? `${testId}-confirm` : undefined;\n const cancelTestId = testId ? `${testId}-cancel` : undefined;\n\n const hasConvenienceButtons =\n footer == null && (confirmLabel != null || cancelLabel != null);\n\n return (\n <div\n data-testid={testId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel ?? (typeof title === 'string' ? title : undefined)}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 1000,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...style,\n }}\n >\n <div\n data-testid={overlayTestId}\n onClick={handleOverlayClick}\n style={{\n position: 'absolute',\n inset: 0,\n background: 'rgba(0,0,0,0.48)',\n backdropFilter: 'blur(3px)',\n cursor: 'pointer',\n }}\n />\n <div\n ref={panelRef}\n tabIndex={-1}\n style={{\n position: 'relative',\n width: '100%',\n maxWidth: widthPx,\n maxHeight: '90vh',\n margin: '0 16px',\n display: 'flex',\n flexDirection: 'column',\n background: 'var(--surface-0)',\n borderRadius: 'var(--r-lg)',\n border: '1px solid var(--border)',\n boxShadow: '0 24px 64px rgba(0,0,0,0.22), 0 4px 16px rgba(0,0,0,0.12)',\n overflow: 'hidden',\n outline: 'none',\n ...panelStyle,\n }}\n >\n {header ??\n (title || description ? (\n <ModalHeader\n title={title}\n description={description}\n onClose={onClose}\n closeTestId={closeTestId}\n />\n ) : null)}\n <div\n style={{\n padding: '20px 22px',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n minHeight: 0,\n flex: 1,\n }}\n >\n {children}\n </div>\n {footer ??\n (hasConvenienceButtons ? (\n <ModalFooter>\n {cancelLabel != null ? (\n <Button\n variant=\"secondary\"\n onClick={onClose}\n testId={cancelTestId}\n >\n {cancelLabel}\n </Button>\n ) : null}\n {confirmLabel != null ? (\n <Button\n variant={destructive ? 'danger' : 'primary'}\n onClick={onConfirm}\n testId={confirmTestId}\n >\n {confirmLabel}\n </Button>\n ) : null}\n </ModalFooter>\n ) : null)}\n </div>\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nimport { Modal as ModalPrimitive, type ModalProps } from './Modal';\nimport {\n Drawer as DrawerPrimitive,\n DrawerHeader,\n type DrawerProps,\n} from './Drawer';\n\n/**\n * Back-compat size token used by the legacy @teja-app/ui Modal/Drawer API.\n * Call-sites pass `size=\"sm\"|\"md\"|\"lg\"`; the theme primitives instead take\n * `variant`/`maxWidth` (Modal) or `width` (Drawer).\n */\nexport type CompatSize = 'sm' | 'md' | 'lg';\n\nconst MODAL_SIZE_WIDTH: Record<CompatSize, number> = {\n sm: 420, // confirm\n md: 640, // form\n lg: 760,\n};\n\nconst DRAWER_SIZE_WIDTH: Record<CompatSize, number> = {\n sm: 420,\n md: 520,\n lg: 760,\n};\n\n// ── Modal (back-compat wrapper) ────────────────────────────────────\n// Accepts BOTH the legacy props (isOpen, size, footer, title) and the new\n// theme Modal props (open, variant, maxWidth, …). Legacy `size` maps to a\n// pixel max-width; `isOpen` maps to `open`. Legacy-only flags\n// (`showCloseButton`, `closeOnOverlay`) are accepted for source-compat.\nexport interface CompatModalProps extends Partial<ModalProps> {\n /** Legacy alias for `open`. */\n isOpen?: boolean;\n /** Legacy size token → maps to max-width (sm 420 / md 640 / lg 760). */\n size?: CompatSize;\n /** Accepted for legacy source-compat (no-op; close button always renders when a title is present). */\n showCloseButton?: boolean;\n /** Accepted for legacy source-compat (overlay click always closes). */\n closeOnOverlay?: boolean;\n onClose: () => void;\n children?: ReactNode;\n}\n\nexport function Modal({\n isOpen,\n open,\n size,\n maxWidth,\n variant,\n // legacy-only flags — accepted, intentionally not forwarded\n showCloseButton,\n closeOnOverlay,\n ...rest\n}: CompatModalProps) {\n void showCloseButton;\n void closeOnOverlay;\n const resolvedOpen = open ?? isOpen ?? false;\n const resolvedMaxWidth =\n maxWidth ?? (size ? MODAL_SIZE_WIDTH[size] : undefined);\n // When size maps to the form width, prefer the `form` variant so the\n // primitive's default (confirm/420) doesn't shrink it.\n const resolvedVariant =\n variant ?? (size && size !== 'sm' ? 'form' : undefined);\n\n return (\n <ModalPrimitive\n open={resolvedOpen}\n maxWidth={resolvedMaxWidth}\n variant={resolvedVariant}\n {...rest}\n />\n );\n}\n\n// ── Drawer (back-compat wrapper) ───────────────────────────────────\n// Accepts BOTH the legacy props (isOpen, size, footer, title) and the new\n// theme Drawer props (open, width, header, footer, …). When a legacy `title`\n// is provided (and no custom `header` slot), it auto-renders a DrawerHeader\n// with a close button so legacy call-sites keep their titled chrome.\nexport interface CompatDrawerProps extends Partial<DrawerProps> {\n /** Legacy alias for `open`. */\n isOpen?: boolean;\n /** Legacy size token → maps to width (sm 420 / md 520 / lg 760). */\n size?: CompatSize;\n /** Legacy convenience: title text rendered into an auto DrawerHeader. */\n title?: ReactNode;\n onClose: () => void;\n children?: ReactNode;\n}\n\nconst drawerTitleStyle: CSSProperties = {\n fontSize: 14,\n fontWeight: 650,\n letterSpacing: '-0.01em',\n color: 'var(--ink-1)',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nexport function Drawer({\n isOpen,\n open,\n size,\n width,\n title,\n header,\n footer,\n onClose,\n testId,\n ...rest\n}: CompatDrawerProps) {\n const resolvedOpen = open ?? isOpen ?? false;\n const resolvedWidth = width ?? (size ? DRAWER_SIZE_WIDTH[size] : undefined);\n\n const resolvedHeader =\n header ??\n (title != null ? (\n <DrawerHeader\n onClose={onClose}\n testId={testId ? `${testId}-header` : undefined}\n closeTestId={testId ? `${testId}-close` : undefined}\n >\n <span style={drawerTitleStyle}>{title}</span>\n </DrawerHeader>\n ) : undefined);\n\n return (\n <DrawerPrimitive\n open={resolvedOpen}\n width={resolvedWidth}\n header={resolvedHeader}\n footer={footer}\n onClose={onClose}\n testId={testId}\n {...rest}\n />\n );\n}\n","import {\n useCallback,\n useRef,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\n\nexport type TabsDensity = 'default' | 'comfortable';\n\nexport interface TabsItem {\n value: string;\n label: ReactNode;\n /** Optional count chip shown after the label. */\n count?: number;\n /** Override the per-tab data-testid. Defaults to `tab-{value}`. */\n testId?: string;\n /** Disable interaction on a single tab. */\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n items: ReadonlyArray<TabsItem>;\n /** Currently active tab `value`. */\n value: string;\n /** Fired with the new tab `value`. */\n onChange?: (value: string) => void;\n /** `'comfortable'` adds vertical padding for header-band placement. */\n density?: TabsDensity;\n /** Optional ARIA label for the tablist. */\n ariaLabel?: string;\n style?: CSSProperties;\n /** Forwarded as `data-testid` on the tablist root. */\n testId?: string;\n}\n\n/**\n * Tabs — controlled underline tab strip with optional count chips and\n * left/right arrow keyboard navigation.\n * Source: design/components/patterns.jsx:42\n */\nexport function Tabs({\n items,\n value,\n onChange,\n density = 'default',\n ariaLabel,\n style,\n testId,\n}: TabsProps) {\n const refs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const focusTab = useCallback(\n (index: number) => {\n if (items.length === 0) return;\n const len = items.length;\n let i = ((index % len) + len) % len;\n // skip disabled\n let attempts = 0;\n while (items[i]?.disabled && attempts < len) {\n i = (i + 1) % len;\n attempts += 1;\n }\n const btn = refs.current[i];\n if (btn) {\n btn.focus();\n const next = items[i];\n if (next && next.value !== value) {\n onChange?.(next.value);\n }\n }\n },\n [items, onChange, value]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, currentIndex: number) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n focusTab(currentIndex + 1);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n focusTab(currentIndex - 1);\n } else if (e.key === 'Home') {\n e.preventDefault();\n focusTab(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n focusTab(items.length - 1);\n }\n },\n [focusTab, items.length]\n );\n\n return (\n <div\n role=\"tablist\"\n aria-label={ariaLabel}\n data-testid={testId}\n style={{\n display: 'flex',\n gap: 4,\n borderBottom: '1px solid var(--border)',\n padding: '0 4px',\n ...style,\n }}\n >\n {items.map((it, idx) => {\n const active = it.value === value;\n const tabTestId = it.testId ?? `tab-${it.value}`;\n return (\n <button\n key={it.value}\n ref={(el) => {\n refs.current[idx] = el;\n }}\n role=\"tab\"\n type=\"button\"\n aria-selected={active}\n aria-disabled={it.disabled || undefined}\n tabIndex={active ? 0 : -1}\n disabled={it.disabled}\n data-testid={tabTestId}\n onClick={\n it.disabled\n ? undefined\n : () => {\n if (it.value !== value) onChange?.(it.value);\n }\n }\n onKeyDown={(e) => handleKeyDown(e, idx)}\n style={{\n padding: density === 'comfortable' ? '14px 12px' : '10px 12px',\n border: 0,\n background: 'transparent',\n borderBottom: `2px solid ${active ? 'var(--primary)' : 'transparent'}`,\n color: active ? 'var(--ink-1)' : 'var(--ink-3)',\n fontSize: 13,\n fontWeight: active ? 600 : 500,\n marginBottom: -1,\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n cursor: it.disabled ? 'not-allowed' : 'pointer',\n opacity: it.disabled ? 0.5 : 1,\n transition: 'color .12s',\n }}\n onMouseEnter={(e) => {\n if (!active && !it.disabled) {\n e.currentTarget.style.color = 'var(--ink-1)';\n }\n }}\n onMouseLeave={(e) => {\n if (!active && !it.disabled) {\n e.currentTarget.style.color = 'var(--ink-3)';\n }\n }}\n >\n {it.label}\n {it.count != null ? (\n <span\n style={{\n fontSize: 10.5,\n fontWeight: 500,\n background: active ? 'var(--primary-soft)' : 'var(--surface-2)',\n color: active ? 'var(--primary)' : 'var(--ink-3)',\n padding: '0 5px',\n borderRadius: 999,\n height: 16,\n display: 'inline-flex',\n alignItems: 'center',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {it.count}\n </span>\n ) : null}\n </button>\n );\n })}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\n\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\n /** Render as a vertical 1px line instead of horizontal. */\n vertical?: boolean;\n /** Forwarded as `data-testid`. */\n testId?: string;\n}\n\n/**\n * Divider — 1px hairline using `var(--divider)`.\n * Source: design/screens/client-detail.jsx:315\n */\nexport function Divider({ vertical, style, testId, ...rest }: DividerProps) {\n const merged: CSSProperties = vertical\n ? { width: 1, alignSelf: 'stretch', background: 'var(--divider)', ...style }\n : { height: 1, background: 'var(--divider)', ...style };\n return <div data-testid={testId} style={merged} {...rest} />;\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface PageHeaderProps {\n /** Uppercase eyebrow (date / section). */\n eyebrow?: ReactNode;\n /** H1 title. */\n title: ReactNode;\n /** Supporting paragraph under the title. */\n subtitle?: ReactNode;\n /** Additional inline content appended after subtitle. */\n children?: ReactNode;\n /** Right-side cluster (segmented control, search, buttons). */\n right?: ReactNode;\n /** Pixel margin below the header. Defaults to 18. */\n marginBottom?: number;\n style?: CSSProperties;\n /** Forwarded as `data-testid`. */\n testId?: string;\n}\n\n/**\n * PageHeader — eyebrow + h1 + optional subtitle + optional right cluster.\n * Source: design/components/patterns.jsx:11\n */\nexport function PageHeader({\n eyebrow,\n title,\n subtitle,\n children,\n right,\n marginBottom = 18,\n style,\n testId,\n}: PageHeaderProps) {\n return (\n <div\n data-testid={testId}\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: 16,\n marginBottom,\n ...style,\n }}\n >\n <div style={{ minWidth: 0 }}>\n {eyebrow ? (\n <div\n style={{\n fontSize: 11.5,\n color: 'var(--ink-3)',\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n fontWeight: 500,\n marginBottom: 6,\n }}\n >\n {eyebrow}\n </div>\n ) : null}\n <h1\n style={{\n fontSize: 22,\n fontWeight: 600,\n letterSpacing: '-0.02em',\n margin: 0,\n }}\n >\n {title}\n </h1>\n {subtitle || children ? (\n <p style={{ color: 'var(--ink-2)', fontSize: 13, marginTop: 4 }}>\n {subtitle}\n {children}\n </p>\n ) : null}\n </div>\n {right}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport type FactListItem = [key: ReactNode, value: ReactNode] | {\n key: ReactNode;\n value: ReactNode;\n /** Optional stable id; defaults to stringified key. */\n id?: string;\n};\n\nexport interface FactListProps {\n items: ReadonlyArray<FactListItem>;\n /** Pixel gap between rows. Defaults to 10. */\n gap?: number;\n style?: CSSProperties;\n /** Forwarded as `data-testid` on the wrapper. */\n testId?: string;\n}\n\nfunction normalize(item: FactListItem): { id: string; key: ReactNode; value: ReactNode } {\n if (Array.isArray(item)) {\n const [k, v] = item;\n return { id: String(k), key: k, value: v };\n }\n return { id: item.id ?? String(item.key), key: item.key, value: item.value };\n}\n\n/**\n * FactList — flat key/value rows with uppercase eyebrow keys.\n * Source: design/screens/client-detail.jsx:316\n */\nexport function FactList({ items, gap = 10, style, testId }: FactListProps) {\n return (\n <div\n data-testid={testId}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap,\n ...style,\n }}\n >\n {items.map((raw) => {\n const item = normalize(raw);\n return (\n <div key={item.id}>\n <div\n style={{\n fontSize: 10.5,\n color: 'var(--ink-3)',\n letterSpacing: '0.04em',\n textTransform: 'uppercase',\n fontWeight: 500,\n marginBottom: 2,\n }}\n >\n {item.key}\n </div>\n <div style={{ fontSize: 12.5, color: 'var(--ink-1)' }}>{item.value}</div>\n </div>\n );\n })}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nexport interface TagProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n /** Render the label using `var(--font-mono)`. Defaults to true (matches design). */\n mono?: boolean;\n children?: ReactNode;\n /** Forwarded as `data-testid`. */\n testId?: string;\n}\n\n/**\n * Tag — tonal keyword chip with a faint surface background. Used in\n * client-detail tag clouds, diagnosis lists, etc.\n * Source: design/screens/client-detail.jsx:332\n */\nexport function Tag({ mono = true, children, style, testId, ...rest }: TagProps) {\n const merged: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '3px 8px',\n background: 'var(--surface-2)',\n borderRadius: 'var(--r-sm)',\n fontSize: 11,\n color: 'var(--ink-2)',\n border: '1px solid var(--border)',\n fontFamily: mono ? 'var(--font-mono)' : 'inherit',\n ...style,\n };\n return (\n <span data-testid={testId} style={merged} {...rest}>\n {children}\n </span>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nexport type SectionLabelTone = 'ink' | 'ai';\n\nexport interface SectionLabelProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n tone?: SectionLabelTone;\n /** Optional element rendered before the label text (icon, sparkle, etc.). */\n icon?: ReactNode;\n /** Optional element rendered after the label text, pushed to the far right. */\n right?: ReactNode;\n children?: ReactNode;\n /** Forwarded as `data-testid`. */\n testId?: string;\n}\n\n/**\n * SectionLabel — uppercase 11px section header used across drawers and detail\n * panels. Generalises `CreateClientSectionLabel` (create-client-drawer.jsx:163)\n * and `ClientDetailSectionLabel` (client-detail.jsx:312) into a single primitive\n * with optional `icon`/`right` slots and a `tone=\"ai\"` variant (ai-scribe.jsx:271).\n */\nexport function SectionLabel({\n tone = 'ink',\n icon,\n right,\n children,\n style,\n testId,\n ...rest\n}: SectionLabelProps) {\n const color = tone === 'ai' ? 'var(--ai)' : 'var(--ink-3)';\n const hasRight = right != null;\n const merged: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n fontSize: 10.5,\n color,\n letterSpacing: '0.06em',\n textTransform: 'uppercase',\n fontWeight: 500,\n ...style,\n };\n return (\n <div data-testid={testId} style={merged} {...rest}>\n {icon}\n <span style={{ flex: hasRight ? 1 : undefined }}>{children}</span>\n {right}\n </div>\n );\n}\n","import { forwardRef, type ButtonHTMLAttributes, type CSSProperties } from 'react';\n\n/**\n * Switch — inline on/off toggle.\n * Ported from design/components/primitives.jsx. Two sizes:\n * - `sm` (30×18): for preference rows and dense forms.\n * - `md` (44×24): for hero / master toggles.\n *\n * Controlled component — pass `on` + `onChange`.\n */\nexport type SwitchSize = 'sm' | 'md';\n\nexport interface SwitchProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'value'> {\n on?: boolean;\n onChange?: (next: boolean) => void;\n size?: SwitchSize;\n testId?: string;\n}\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(\n { on = false, onChange, size = 'sm', disabled, style, testId, ...rest },\n ref,\n) {\n const w = size === 'md' ? 44 : 30;\n const h = size === 'md' ? 24 : 18;\n const knob = size === 'md' ? 20 : 14;\n const slide = w - knob - 4;\n\n const merged: CSSProperties = {\n width: w,\n height: h,\n borderRadius: 999,\n padding: 2,\n border: 0,\n background: on ? 'var(--primary)' : 'var(--border-strong)',\n display: 'inline-flex',\n alignItems: 'center',\n transition: 'background .14s',\n flexShrink: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n ...style,\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={on}\n data-state={on ? 'on' : 'off'}\n data-testid={testId}\n disabled={disabled}\n onClick={onChange ? () => onChange(!on) : undefined}\n style={merged}\n {...rest}\n >\n <span\n aria-hidden\n style={{\n width: knob,\n height: knob,\n borderRadius: 999,\n background: 'var(--surface-0)',\n boxShadow: size === 'md' ? 'var(--shadow-sm)' : 'none',\n transform: on ? `translateX(${slide}px)` : 'translateX(0)',\n transition: 'transform .14s',\n }}\n />\n </button>\n );\n});\n","import { forwardRef, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from 'react';\n\n/**\n * IconButton — small square icon-only button.\n * Ported from design/components/primitives.jsx. Used for toolbars, drawer\n * header action clusters, composer rails. `tone=\"primary\"` switches to a\n * soft-primary fill; default is the neutral surface chip.\n */\nexport type IconButtonSize = 'sm' | 'md' | 'lg';\nexport type IconButtonTone = 'default' | 'primary';\n\nexport interface IconButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children?: ReactNode;\n size?: IconButtonSize;\n tone?: IconButtonTone;\n testId?: string;\n}\n\nconst SIZE_PX: Record<IconButtonSize, number> = { sm: 22, md: 26, lg: 32 };\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n function IconButton(\n { children, size = 'md', tone = 'default', style, testId, type = 'button', ...rest },\n ref,\n ) {\n const dim = SIZE_PX[size];\n const merged: CSSProperties = {\n width: dim,\n height: dim,\n borderRadius: 'var(--r-sm)',\n border: '1px solid',\n borderColor: tone === 'primary' ? 'var(--primary)' : 'var(--border)',\n background: tone === 'primary' ? 'var(--primary-soft)' : 'var(--surface-0)',\n color: tone === 'primary' ? 'var(--primary)' : 'var(--ink-2)',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: 'var(--shadow-xs)',\n cursor: 'pointer',\n flexShrink: 0,\n ...style,\n };\n return (\n <button\n ref={ref}\n type={type}\n data-testid={testId}\n data-tone={tone}\n style={merged}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\n/**\n * KV — key/value display.\n * Ported from design/components/patterns.jsx.\n *\n * - `layout=\"inline\"`: key on the left, value right-aligned. Used in meta\n * rails like the appointment flyout summary.\n * - `layout=\"stack\"` : uppercase eyebrow over a value block. Used in info\n * grids like the appointment detail header.\n *\n * `colspan` forces a stacked KV to occupy the full grid row.\n */\nexport type KVLayout = 'inline' | 'stack';\nexport type KVTone = 'default' | 'success' | 'warning' | 'danger' | 'muted';\n\nexport interface KVProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n k: ReactNode;\n v: ReactNode;\n layout?: KVLayout;\n tone?: KVTone;\n mono?: boolean;\n /** Span all columns in a parent CSS grid (only honored for layout=\"stack\"). */\n colspan?: boolean;\n testId?: string;\n}\n\nfunction toneColor(tone: KVTone | undefined): string {\n switch (tone) {\n case 'success':\n return 'var(--success)';\n case 'warning':\n return 'var(--warning)';\n case 'danger':\n return 'var(--danger)';\n case 'muted':\n return 'var(--ink-3)';\n default:\n return 'var(--ink-1)';\n }\n}\n\nexport function KV({\n k,\n v,\n layout = 'inline',\n tone,\n mono,\n colspan,\n style,\n testId,\n ...rest\n}: KVProps) {\n const valueStyle: CSSProperties = {\n fontSize: 12.5,\n fontWeight: 500,\n color: toneColor(tone),\n fontFamily: mono ? 'var(--font-mono)' : 'inherit',\n };\n\n if (layout === 'stack') {\n const wrapper: CSSProperties = {\n gridColumn: colspan ? '1 / -1' : undefined,\n ...style,\n };\n return (\n <div data-testid={testId} data-layout=\"stack\" style={wrapper} {...rest}>\n <div\n style={{\n fontSize: 10.5,\n color: 'var(--ink-3)',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n fontWeight: 500,\n marginBottom: 2,\n }}\n >\n {k}\n </div>\n <div style={valueStyle}>{v}</div>\n </div>\n );\n }\n\n return (\n <div\n data-testid={testId}\n data-layout=\"inline\"\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n gap: 12,\n alignItems: 'baseline',\n ...style,\n }}\n {...rest}\n >\n <span style={{ fontSize: 11.5, color: 'var(--ink-3)' }}>{k}</span>\n <span style={{ ...valueStyle, textAlign: 'right' }}>{v}</span>\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\n/**\n * MiniStat — compact label + value (no card chrome).\n * Ported from design/components/patterns.jsx. Use for hero strips, settings\n * cards, and rating clusters where the surrounding container provides chrome.\n * For full Card-wrapped KPI with sparkline, use `<Stat>`.\n */\nexport type MiniStatTone = 'default' | 'success' | 'warning' | 'danger' | 'ai';\nexport type MiniStatSize = 'sm' | 'md' | 'lg';\n\nexport interface MiniStatProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n label: ReactNode;\n value: ReactNode;\n sub?: ReactNode;\n tone?: MiniStatTone;\n size?: MiniStatSize;\n mono?: boolean;\n testId?: string;\n}\n\nfunction valueColor(tone: MiniStatTone | undefined): string {\n switch (tone) {\n case 'success':\n return 'var(--success)';\n case 'warning':\n return 'var(--warning)';\n case 'danger':\n return 'var(--danger)';\n case 'ai':\n return 'var(--ai)';\n default:\n return 'var(--ink-1)';\n }\n}\n\nconst SIZE_PX: Record<MiniStatSize, number> = { sm: 14, md: 18, lg: 22 };\n\nexport function MiniStat({\n label,\n value,\n sub,\n tone,\n size = 'md',\n mono,\n style,\n testId,\n ...rest\n}: MiniStatProps) {\n const numStyle: CSSProperties = {\n fontSize: SIZE_PX[size],\n fontWeight: 600,\n marginTop: 2,\n color: valueColor(tone),\n letterSpacing: '-0.02em',\n fontVariantNumeric: 'tabular-nums',\n fontFamily: mono ? 'var(--font-mono)' : 'inherit',\n };\n return (\n <div data-testid={testId} style={style} {...rest}>\n <div\n style={{\n fontSize: 10,\n color: 'var(--ink-3)',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n fontWeight: 500,\n }}\n >\n {label}\n </div>\n <div style={numStyle}>{value}</div>\n {sub ? (\n <div style={{ fontSize: 10.5, color: 'var(--ink-3)', marginTop: 1 }}>{sub}</div>\n ) : null}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\n/**\n * LabelGroup — uppercase eyebrow + a stacked content region.\n * Ported from design/components/patterns.jsx. Use for small all-caps section\n * headings: \"PEOPLE\", \"TIME & PLACE\", \"RECURRENCE\", etc.\n */\nexport interface LabelGroupProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n label: ReactNode;\n /** Gap between children inside the content stack. */\n gap?: number;\n children?: ReactNode;\n testId?: string;\n}\n\nexport function LabelGroup({\n label,\n gap = 6,\n children,\n style,\n testId,\n ...rest\n}: LabelGroupProps) {\n const headStyle: CSSProperties = {\n fontSize: 10.5,\n color: 'var(--ink-3)',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n fontWeight: 500,\n marginBottom: 8,\n display: 'flex',\n alignItems: 'center',\n gap: 5,\n };\n return (\n <div data-testid={testId} style={style} {...rest}>\n <div style={headStyle}>{label}</div>\n <div style={{ display: 'flex', flexDirection: 'column', gap }}>{children}</div>\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport { Avatar } from './Avatar';\n\n/**\n * PersonRow — avatar + name + role/sub line, with an optional right slot.\n * Ported from design/components/patterns.jsx. Used in client picker rows,\n * clinician select lists, appointment people meta.\n */\nexport interface PersonRowProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n name: string;\n sub?: ReactNode;\n /** Avatar palette index 0-5. When omitted the Avatar derives from name. */\n idx?: number;\n /** Avatar diameter. Defaults to 28. */\n size?: number;\n right?: ReactNode;\n testId?: string;\n}\n\nexport function PersonRow({\n name,\n sub,\n idx,\n size = 28,\n right,\n style,\n testId,\n ...rest\n}: PersonRowProps) {\n const merged: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n ...style,\n };\n return (\n <div data-testid={testId} style={merged} {...rest}>\n <Avatar name={name} idx={idx} size={size} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: 13,\n fontWeight: 500,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {name}\n </div>\n {sub ? (\n <div style={{ fontSize: 11, color: 'var(--ink-3)' }}>{sub}</div>\n ) : null}\n </div>\n {right}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport { Icon, type IconName } from './Icon';\nimport { Switch } from './Switch';\n\n/**\n * SettingRow — preference row with optional icon, title, hint, and a\n * right-side control. Ported from design/components/patterns.jsx.\n *\n * By default the right side is a `<Switch>` driven by `on` / `onChange`.\n * Pass `control` to swap in any other control (segmented, select, button).\n */\nexport type SettingRowTone = 'default' | 'subtle';\n\nexport interface SettingRowProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title' | 'onChange'> {\n icon?: IconName;\n title: ReactNode;\n hint?: ReactNode;\n on?: boolean;\n onChange?: (next: boolean) => void;\n /** Replace the default Switch entirely. */\n control?: ReactNode;\n tone?: SettingRowTone;\n testId?: string;\n}\n\nexport function SettingRow({\n icon,\n title,\n hint,\n on,\n onChange,\n control,\n tone = 'default',\n style,\n testId,\n ...rest\n}: SettingRowProps) {\n const bg = tone === 'subtle' ? 'var(--surface-1)' : 'var(--surface-0)';\n const merged: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n padding: '10px 12px',\n borderRadius: 'var(--r-md)',\n background: bg,\n border: '1px solid var(--border)',\n ...style,\n };\n return (\n <div data-testid={testId} data-tone={tone} style={merged} {...rest}>\n {icon ? (\n <span\n style={{\n width: 28,\n height: 28,\n borderRadius: 8,\n flexShrink: 0,\n background: 'var(--surface-1)',\n border: '1px solid var(--border)',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Icon name={icon} size={13} color=\"var(--ink-2)\" />\n </span>\n ) : null}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 12.5, fontWeight: 500 }}>{title}</div>\n {hint ? (\n <div style={{ fontSize: 10.5, color: 'var(--ink-3)', lineHeight: 1.4 }}>\n {hint}\n </div>\n ) : null}\n </div>\n {control !== undefined ? (\n control\n ) : (\n <Switch on={on} onChange={onChange} />\n )}\n </div>\n );\n}\n","import { forwardRef, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from 'react';\n\n/**\n * Chip — filter pill that toggles on/off in a toolbar.\n * Ported from design/components/patterns.jsx. Active state pulls a soft\n * tonal fill from one of the design tokens.\n *\n * For an *AI-suggestion* chip with a dashed border, use `<AIChip>` instead.\n */\nexport type ChipTone = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'ai';\n\nexport interface ChipProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n active?: boolean;\n /** Numeric count shown after the label (tabular-nums). */\n count?: number;\n tone?: ChipTone;\n children?: ReactNode;\n testId?: string;\n}\n\nexport const Chip = forwardRef<HTMLButtonElement, ChipProps>(function Chip(\n { active, count, tone = 'primary', children, style, testId, type = 'button', ...rest },\n ref,\n) {\n const merged: CSSProperties = {\n height: 28,\n padding: '0 12px',\n border: '1px solid',\n borderColor: active ? `var(--${tone})` : 'var(--border)',\n background: active ? `var(--${tone}-soft)` : 'var(--surface-0)',\n color: active ? `var(--${tone})` : 'var(--ink-2)',\n borderRadius: 'var(--r-pill)',\n fontSize: 12,\n fontWeight: 500,\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n cursor: 'pointer',\n ...style,\n };\n return (\n <button\n ref={ref}\n type={type}\n data-testid={testId}\n data-active={active ? 'true' : 'false'}\n data-tone={tone}\n style={merged}\n {...rest}\n >\n {children}\n {count != null ? (\n <span\n style={{\n fontSize: 10.5,\n color: active ? `var(--${tone})` : 'var(--ink-3)',\n fontVariantNumeric: 'tabular-nums',\n fontFamily: 'var(--font-mono)',\n }}\n >\n {count}\n </span>\n ) : null}\n </button>\n );\n});\n","import type { CSSProperties } from 'react';\n\nimport { Icon, type IconName } from './Icon';\n\n/**\n * ViewToggle — icon-only segmented control for swapping list/grid/calendar\n * views. Ported from design/components/patterns.jsx.\n *\n * Each item is a tuple of `{ value, icon }`. Active item gets a raised\n * surface-0 pill; others are transparent.\n */\nexport interface ViewToggleItem<T extends string = string> {\n value: T;\n icon: IconName;\n /** Accessible label. Defaults to `value`. */\n title?: string;\n}\n\nexport interface ViewToggleProps<T extends string = string> {\n items: ReadonlyArray<ViewToggleItem<T>>;\n value: T;\n onChange?: (value: T) => void;\n style?: CSSProperties;\n testId?: string;\n}\n\nexport function ViewToggle<T extends string = string>({\n items,\n value,\n onChange,\n style,\n testId,\n}: ViewToggleProps<T>) {\n return (\n <div\n role=\"tablist\"\n data-testid={testId}\n style={{\n display: 'flex',\n padding: 2,\n background: 'var(--surface-2)',\n borderRadius: 'var(--r-md)',\n border: '1px solid var(--border)',\n ...style,\n }}\n >\n {items.map((it) => {\n const active = it.value === value;\n return (\n <button\n key={it.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n data-state={active ? 'active' : 'inactive'}\n data-testid={testId ? `${testId}-${it.value}` : undefined}\n title={it.title ?? it.value}\n onClick={onChange ? () => onChange(it.value) : undefined}\n style={{\n width: 28,\n height: 26,\n border: 0,\n borderRadius: 'var(--r-sm)',\n background: active ? 'var(--surface-0)' : 'transparent',\n boxShadow: active ? 'var(--shadow-xs)' : 'none',\n color: active ? 'var(--ink-1)' : 'var(--ink-3)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n }}\n >\n <Icon name={it.icon} size={13} />\n </button>\n );\n })}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\nimport { Icon, type IconName } from './Icon';\n\n/**\n * TimelineRow — one entry in a vertical activity log.\n * Ported from design/screens/appointment-detail.jsx. Sits inside a parent\n * with `position: relative` and (typically) a left rail border. Renders a\n * 18×18 dot anchored at the parent's left rail (-18px from this row), with\n * the title and meta to the right.\n *\n * `ai` swaps the icon for the brand AI sparkle and tints the `by` byline.\n * `last` removes the bottom padding so the row hugs the timeline footer.\n */\nexport interface TimelineRowProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title'> {\n /** Color for the dot ring and (non-AI) icon stroke. */\n color?: string;\n icon?: IconName;\n title: ReactNode;\n /** Actor or source — rendered before the dot separator. */\n by?: ReactNode;\n when?: ReactNode;\n ai?: boolean;\n /** Suppress bottom padding for the final row in a timeline. */\n last?: boolean;\n testId?: string;\n}\n\nexport function TimelineRow({\n color = 'var(--primary)',\n icon,\n title,\n by,\n when,\n ai,\n last,\n style,\n testId,\n ...rest\n}: TimelineRowProps) {\n const merged: CSSProperties = {\n display: 'flex',\n gap: 12,\n paddingBottom: last ? 0 : 16,\n position: 'relative',\n ...style,\n };\n return (\n <div data-testid={testId} data-ai={ai ? 'true' : 'false'} style={merged} {...rest}>\n <span\n aria-hidden\n style={{\n position: 'absolute',\n left: -18,\n top: 1,\n width: 18,\n height: 18,\n borderRadius: 999,\n background: 'var(--surface-0)',\n border: `1.5px solid ${color}`,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {ai ? (\n <AISparkle size={9} />\n ) : icon ? (\n <Icon name={icon} size={9} color={color} strokeWidth={2} />\n ) : null}\n </span>\n <div style={{ flex: 1, minWidth: 0, paddingLeft: 6 }}>\n <div style={{ fontSize: 13, fontWeight: 500 }}>{title}</div>\n {(by || when) && (\n <div style={{ fontSize: 11.5, color: 'var(--ink-3)' }}>\n {by ? (\n <span style={{ color: ai ? 'var(--ai)' : 'var(--ink-3)' }}>{by}</span>\n ) : null}\n {by && when ? ' · ' : null}\n {when}\n </div>\n )}\n </div>\n </div>\n );\n}\n","/**\n * Injects the keyframes and helper classes used by the AI design language\n * (shimmer gradient text, iridescent border, sparkle spin). Idempotent —\n * safe to call from multiple component modules; runs once per document.\n *\n * Ported from design/components/ai.jsx, minus the `Object.assign(window…)`\n * canvas registration line.\n */\nconst STYLE_ID = 'teja-ai-styles';\n\nexport function ensureAIStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const s = document.createElement('style');\n s.id = STYLE_ID;\n s.textContent = `\n @keyframes teja-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n }\n @keyframes teja-sparkle-spin {\n 0%, 100% { transform: scale(1) rotate(0deg); opacity: 1; }\n 50% { transform: scale(1.15) rotate(45deg); opacity: .85; }\n }\n .teja-ai-shimmer {\n background: linear-gradient(\n 90deg,\n var(--ink-3) 0%,\n var(--ai) 20%,\n var(--ai-2) 40%,\n var(--ink-3) 60%\n );\n background-size: 200% 100%;\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n animation: teja-shimmer 2.4s linear infinite;\n }\n .teja-ai-border {\n position: relative;\n background:\n linear-gradient(var(--surface-0), var(--surface-0)) padding-box,\n var(--ai-border) border-box;\n border: 1px solid transparent;\n }\n .teja-ai-sparkle-anim { animation: teja-sparkle-spin 2.4s ease-in-out infinite; transform-origin: center; }\n `;\n document.head.appendChild(s);\n}\n","import { useEffect, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\nimport { ensureAIStyles } from './aiStyles';\n\n/**\n * AIBadge — pill that marks AI-touched content.\n * Ported from design/components/ai.jsx.\n *\n * Tones:\n * - `default` / `draft`: solid soft pill (AI-drafted content)\n * - `suggestion`: dashed border (unconfirmed AI proposal)\n * - `confirmed`: success-soft (clinician approved)\n * - `working`: animated sparkle (in progress)\n * - `locked`: muted surface with lock glyph (feature gated)\n */\nexport type AIBadgeTone =\n | 'default'\n | 'draft'\n | 'suggestion'\n | 'confirmed'\n | 'working'\n | 'locked';\n\nexport interface AIBadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n tone?: AIBadgeTone;\n children?: ReactNode;\n testId?: string;\n}\n\nconst TONES: Record<AIBadgeTone, { bg: string; fg: string; border?: string }> = {\n default: { bg: 'var(--ai-soft)', fg: 'var(--ai)' },\n draft: { bg: 'var(--ai-soft)', fg: 'var(--ai)' },\n suggestion: {\n bg: 'var(--surface-0)',\n fg: 'var(--ai)',\n border: '1px dashed var(--ai)',\n },\n confirmed: { bg: 'var(--success-soft)', fg: 'var(--success)' },\n working: { bg: 'var(--ai-tint)', fg: 'var(--ai)' },\n locked: { bg: 'var(--surface-2)', fg: 'var(--ink-4)' },\n};\n\nconst LockIcon = () => (\n <svg width=\"9\" height=\"9\" viewBox=\"0 0 24 24\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path\n d=\"M17 11H7a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M8 11V7a4 4 0 0 1 8 0v4\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n);\n\nexport function AIBadge({\n tone = 'default',\n children = 'AI',\n style,\n testId,\n ...rest\n}: AIBadgeProps) {\n useEffect(() => {\n ensureAIStyles();\n }, []);\n const t = TONES[tone];\n const merged: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n height: 20,\n padding: '0 8px',\n borderRadius: 'var(--r-pill)',\n background: t.bg,\n color: t.fg,\n border: t.border ?? 'none',\n fontSize: 11,\n fontWeight: 500,\n letterSpacing: '0.005em',\n lineHeight: 1,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n ...style,\n };\n return (\n <span data-testid={testId} data-tone={tone} style={merged} {...rest}>\n {tone === 'locked' ? (\n <LockIcon />\n ) : (\n <AISparkle size={11} />\n )}\n {children}\n </span>\n );\n}\n","import { forwardRef, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\n\n/**\n * AIComposeButton — primary AI action with gradient fill.\n * Ported from design/components/ai.jsx. Use for the main \"Compose with AI\"\n * affordance on a screen. For inline suggestion chips use `<AIChip>`.\n */\nexport type AIComposeButtonSize = 'sm' | 'md';\n\nexport interface AIComposeButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n size?: AIComposeButtonSize;\n children?: ReactNode;\n testId?: string;\n}\n\nexport const AIComposeButton = forwardRef<HTMLButtonElement, AIComposeButtonProps>(\n function AIComposeButton(\n { size = 'md', children = 'Compose with AI', style, testId, type = 'button', ...rest },\n ref,\n ) {\n const h = size === 'sm' ? 28 : 32;\n const fz = size === 'sm' ? 12 : 13;\n const merged: CSSProperties = {\n height: h,\n padding: '0 12px',\n border: 0,\n background: 'var(--ai-gradient)',\n color: 'white',\n borderRadius: 'var(--r-md)',\n fontSize: fz,\n fontWeight: 500,\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n boxShadow: '0 1px 0 rgba(255,255,255,.18) inset, 0 1px 2px rgba(0,0,0,.06)',\n cursor: 'pointer',\n ...style,\n };\n return (\n <button\n ref={ref}\n type={type}\n data-testid={testId}\n data-size={size}\n style={merged}\n {...rest}\n >\n <AISparkle size={13} color=\"white\" />\n {children}\n </button>\n );\n },\n);\n","import { useEffect, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { ensureAIStyles } from './aiStyles';\n\n/**\n * AICard — card surface with an iridescent AI border.\n * Ported from design/components/ai.jsx. Uses a double-background trick\n * (`padding-box` fill + `border-box` gradient) so the gradient sits on the\n * border only. Background defaults to the AI-tint surface; pass `style` to\n * override or change the inner color.\n */\nexport interface AICardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Inner padding in pixels. Defaults to 18. */\n padding?: number;\n children?: ReactNode;\n testId?: string;\n}\n\nexport function AICard({\n padding = 18,\n children,\n className,\n style,\n testId,\n ...rest\n}: AICardProps) {\n useEffect(() => {\n ensureAIStyles();\n }, []);\n const merged: CSSProperties = {\n borderRadius: 'var(--r-lg)',\n padding,\n background:\n 'linear-gradient(var(--ai-tint), var(--ai-tint)) padding-box, var(--ai-border) border-box',\n border: '1px solid transparent',\n ...style,\n };\n const composedClassName = ['teja-ai-border', className].filter(Boolean).join(' ');\n return (\n <div data-testid={testId} className={composedClassName} style={merged} {...rest}>\n {children}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\n\n/**\n * AISectionHeader — section heading for AI-authored panels.\n * Ported from design/components/ai.jsx. Renders a small gradient tile,\n * an uppercase eyebrow (default \"Teja AI\"), a title, and an optional\n * right-side `action` slot.\n */\nexport interface AISectionHeaderProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {\n title: ReactNode;\n eyebrow?: ReactNode;\n action?: ReactNode;\n testId?: string;\n}\n\nexport function AISectionHeader({\n title,\n eyebrow = 'Teja AI',\n action,\n style,\n testId,\n ...rest\n}: AISectionHeaderProps) {\n const merged: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 12,\n ...style,\n };\n return (\n <div data-testid={testId} style={merged} {...rest}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <div\n aria-hidden\n style={{\n width: 22,\n height: 22,\n borderRadius: 6,\n background: 'var(--ai-gradient)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <AISparkle size={12} color=\"white\" />\n </div>\n <div>\n <div\n style={{\n fontSize: 10.5,\n color: 'var(--ai)',\n letterSpacing: '0.06em',\n textTransform: 'uppercase',\n fontWeight: 500,\n }}\n >\n {eyebrow}\n </div>\n <div style={{ fontSize: 13.5, fontWeight: 600, color: 'var(--ink-1)' }}>\n {title}\n </div>\n </div>\n </div>\n {action}\n </div>\n );\n}\n","import { useEffect, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\nimport { ensureAIStyles } from './aiStyles';\n\n/**\n * AIWorking — animated pill that signals an in-progress AI task.\n * Ported from design/components/ai.jsx. The label uses a shimmering text\n * gradient driven by the `teja-ai-shimmer` keyframes injected on first use.\n */\nexport interface AIWorkingProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n label?: ReactNode;\n testId?: string;\n}\n\nexport function AIWorking({\n label = 'Teja is drafting…',\n style,\n testId,\n ...rest\n}: AIWorkingProps) {\n useEffect(() => {\n ensureAIStyles();\n }, []);\n const merged: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n padding: '6px 12px',\n borderRadius: 'var(--r-pill)',\n background: 'var(--ai-tint)',\n border: '1px solid var(--ai-soft)',\n ...style,\n };\n return (\n <div data-testid={testId} role=\"status\" aria-live=\"polite\" style={merged} {...rest}>\n <AISparkle size={13} />\n <span className=\"teja-ai-shimmer\" style={{ fontSize: 12, fontWeight: 500 }}>\n {label}\n </span>\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\n\n/**\n * AIGhostText — inline ghost suggestion (e.g. inside a textarea/composer).\n * Ported from design/components/ai.jsx. Visually italic, AI-tinted, with a\n * trailing Tab affordance to hint at completion.\n */\nexport interface AIGhostTextProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n text: ReactNode;\n /** Key affordance text inside the trailing chip. Defaults to \"Tab\". */\n hint?: ReactNode;\n testId?: string;\n}\n\nexport function AIGhostText({\n text,\n hint = 'Tab',\n style,\n testId,\n ...rest\n}: AIGhostTextProps) {\n const merged: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '2px 6px',\n borderRadius: 4,\n background: 'var(--ai-soft)',\n color: 'var(--ai)',\n fontStyle: 'italic',\n fontSize: 13,\n lineHeight: 1.4,\n ...style,\n };\n return (\n <span data-testid={testId} style={merged} {...rest}>\n <AISparkle size={10} />\n {text}\n <span\n style={{\n fontSize: 10,\n padding: '0 4px',\n border: '1px solid var(--ai)',\n borderRadius: 3,\n color: 'var(--ai)',\n fontFamily: 'var(--font-mono)',\n fontStyle: 'normal',\n }}\n >\n {hint}\n </span>\n </span>\n );\n}\n","import { useEffect, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { AISparkle } from './AISparkle';\nimport { ensureAIStyles } from './aiStyles';\n\n/**\n * AskTeja — global AI search affordance in the top bar.\n * Ported from design/components/ai.jsx. Renders the iridescent AI border\n * via the shared `teja-ai-border` class. The visible content is a\n * non-functional placeholder + keyboard hint; the actual command palette\n * is wired up by the host app.\n */\nexport interface AskTejaProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n width?: number;\n placeholder?: ReactNode;\n /** Keyboard shortcut hint shown on the right. Defaults to \"⌘J\". */\n shortcut?: ReactNode;\n testId?: string;\n}\n\nexport function AskTeja({\n width = 360,\n placeholder = 'Ask Teja anything — draft a note, find a claim, schedule a follow-up…',\n shortcut = '⌘J',\n className,\n style,\n testId,\n ...rest\n}: AskTejaProps) {\n useEffect(() => {\n ensureAIStyles();\n }, []);\n const merged: CSSProperties = {\n width,\n height: 34,\n borderRadius: 'var(--r-md)',\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '0 10px',\n ...style,\n };\n const composedClassName = ['teja-ai-border', className].filter(Boolean).join(' ');\n return (\n <div data-testid={testId} className={composedClassName} style={merged} {...rest}>\n <AISparkle size={14} />\n <span\n style={{\n flex: 1,\n fontSize: 12.5,\n color: 'var(--ink-3)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {placeholder}\n </span>\n <span\n style={{\n fontSize: 10.5,\n padding: '1px 5px',\n border: '1px solid var(--border)',\n borderRadius: 4,\n background: 'var(--surface-0)',\n color: 'var(--ink-3)',\n whiteSpace: 'nowrap',\n fontFamily: 'var(--font-mono)',\n }}\n >\n {shortcut}\n </span>\n </div>\n );\n}\n","import { forwardRef, type SVGAttributes } from 'react';\n\n/**\n * Spinner — animated SVG loading indicator using theme tokens.\n * Ported from src/components/Spinner to the theme system (inline styles +\n * a `tj-spin` @keyframes injected once via `ensureSpinnerStyles`).\n *\n * @example\n * <Spinner size=\"md\" color=\"primary\" />\n * <Spinner size=\"sm\" color=\"current\" label=\"Saving…\" />\n */\nexport type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type SpinnerColor = 'current' | 'primary' | 'white';\n\nconst SIZE_PX: Record<SpinnerSize, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n};\n\nconst COLOR_VALUE: Record<SpinnerColor, string> = {\n current: 'currentColor',\n primary: 'var(--primary)',\n white: '#ffffff',\n};\n\nconst STYLE_ID = 'teja-spinner-styles';\n\n/** Inject the `tj-spin` keyframes once per document. Idempotent. */\nexport function ensureSpinnerStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const s = document.createElement('style');\n s.id = STYLE_ID;\n s.textContent = `@keyframes tj-spin { to { transform: rotate(360deg); } }`;\n document.head.appendChild(s);\n}\n\nexport interface SpinnerProps\n extends Omit<SVGAttributes<SVGSVGElement>, 'color'> {\n /** Spinner size. Default `md`. */\n size?: SpinnerSize;\n /** Spinner color. Default `current` (inherits text color). */\n color?: SpinnerColor;\n /** Screen-reader label. Default `Loading`. */\n label?: string;\n /** Forwarded as `data-testid` on the root `<svg>`. */\n testId?: string;\n}\n\nexport const Spinner = forwardRef<SVGSVGElement, SpinnerProps>(function Spinner(\n { size = 'md', color = 'current', label = 'Loading', testId, style, ...rest },\n ref\n) {\n ensureSpinnerStyles();\n const px = SIZE_PX[size];\n return (\n <svg\n ref={ref}\n width={px}\n height={px}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"status\"\n aria-label={label}\n data-testid={testId}\n style={{\n color: COLOR_VALUE[color],\n animation: 'tj-spin .7s linear infinite',\n flexShrink: 0,\n ...style,\n }}\n {...rest}\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n style={{ opacity: 0.25 }}\n />\n <path\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n fill=\"currentColor\"\n style={{ opacity: 0.75 }}\n />\n </svg>\n );\n});\n","import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react';\n\n/**\n * Skeleton — loading placeholder using theme surface tokens with a shimmer\n * pulse. Ported from src/components/Skeleton to the theme system.\n *\n * @example\n * <Skeleton variant=\"text\" width=\"80%\" />\n * <Skeleton variant=\"circular\" width={40} height={40} />\n * <Skeleton variant=\"rectangular\" width=\"100%\" height={200} />\n * <Skeleton variant=\"text\" lines={3} />\n */\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular';\n\nconst STYLE_ID = 'teja-skeleton-styles';\n\n/** Inject the `tj-skeleton-pulse` keyframes once per document. Idempotent. */\nexport function ensureSkeletonStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const s = document.createElement('style');\n s.id = STYLE_ID;\n s.textContent = `@keyframes tj-skeleton-pulse {\n 0%, 100% { background-color: var(--surface-2); }\n 50% { background-color: var(--surface-1); }\n }`;\n document.head.appendChild(s);\n}\n\nconst RADIUS: Record<SkeletonVariant, string> = {\n text: 'var(--r-sm)',\n circular: '999px',\n rectangular: 'var(--r-md)',\n};\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n /** Shape variant. Default `text`. */\n variant?: SkeletonVariant;\n /** Width (CSS value, or number → px). */\n width?: string | number;\n /** Height (CSS value, or number → px). */\n height?: string | number;\n /** Enable the shimmer pulse. Default `true`. */\n animate?: boolean;\n /** Number of stacked lines (text variant only). Default 1. */\n lines?: number;\n /** Screen-reader text. Default `Loading...`. */\n label?: string;\n /** Forwarded as `data-testid` on the root. */\n testId?: string;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n function Skeleton(\n {\n variant = 'text',\n width,\n height,\n animate = true,\n lines = 1,\n label = 'Loading...',\n style,\n testId,\n ...rest\n },\n ref\n ) {\n ensureSkeletonStyles();\n\n const widthValue = typeof width === 'number' ? `${width}px` : width;\n const heightValue = typeof height === 'number' ? `${height}px` : height;\n const finalHeight =\n heightValue || (variant === 'text' ? '1em' : undefined);\n\n const baseBar = (extra: CSSProperties): CSSProperties => ({\n borderRadius: RADIUS[variant],\n background: 'var(--surface-2)',\n animation: animate\n ? 'tj-skeleton-pulse 1.5s ease-in-out infinite'\n : undefined,\n ...extra,\n });\n\n const srOnly: CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n border: 0,\n };\n\n if (variant === 'text' && lines > 1) {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n aria-busy=\"true\"\n data-testid={testId}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n ...style,\n }}\n {...rest}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n style={baseBar({\n width: index === lines - 1 ? '60%' : widthValue || '100%',\n height: finalHeight,\n })}\n />\n ))}\n <span style={srOnly}>{label}</span>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n aria-busy=\"true\"\n data-testid={testId}\n style={baseBar({\n width:\n widthValue ||\n (variant === 'circular' ? heightValue : '100%'),\n height: finalHeight,\n ...style,\n })}\n {...rest}\n >\n <span style={srOnly}>{label}</span>\n </div>\n );\n }\n);\n","import {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\n\n/**\n * EmptyState — empty / no-results / error placeholder using theme tokens.\n * Ported from src/components/EmptyState. Preserves the same default SVG icons\n * and child testids: `${testId}-icon`, `${testId}-title`, `${testId}-description`,\n * `${testId}-action`.\n */\nexport type EmptyStateType = 'no-data' | 'no-results' | 'error';\n\nconst defaultIcons: Record<EmptyStateType, ReactNode> = {\n 'no-data': (\n <svg\n style={{ width: '100%', height: '100%' }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n ),\n 'no-results': (\n <svg\n style={{ width: '100%', height: '100%' }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n ),\n error: (\n <svg\n style={{ width: '100%', height: '100%' }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\"\n />\n </svg>\n ),\n};\n\ntype EmptyStateSize = 'sm' | 'md' | 'lg';\n\nconst SIZE_STYLES: Record<\n EmptyStateSize,\n {\n container: CSSProperties;\n icon: number;\n title: CSSProperties;\n description: CSSProperties;\n }\n> = {\n sm: {\n container: { padding: '24px 16px' },\n icon: 40,\n title: { fontSize: 14, fontWeight: 500 },\n description: { fontSize: 12 },\n },\n md: {\n container: { padding: '40px 24px' },\n icon: 48,\n title: { fontSize: 16, fontWeight: 500 },\n description: { fontSize: 14 },\n },\n lg: {\n container: { padding: '64px 32px' },\n icon: 64,\n title: { fontSize: 18, fontWeight: 600 },\n description: { fontSize: 16 },\n },\n};\n\nexport interface EmptyStateProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Type of empty state. Default `no-data`. */\n type?: EmptyStateType;\n /** Title text. */\n title: string;\n /** Description text. */\n description?: string;\n /** Custom icon (overrides default type icon). */\n icon?: ReactNode;\n /** Action button or link. */\n action?: ReactNode;\n /** Size variant. Default `md`. */\n size?: EmptyStateSize;\n /** Forwarded as `data-testid` on the root with child elements suffixed. */\n testId?: string;\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n function EmptyState(\n {\n type = 'no-data',\n title,\n description,\n icon,\n action,\n size = 'md',\n style,\n testId,\n ...rest\n },\n ref\n ) {\n const s = SIZE_STYLES[size];\n const iconColor = type === 'error' ? 'var(--danger)' : 'var(--ink-3)';\n\n return (\n <div\n ref={ref}\n data-testid={testId}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n ...s.container,\n ...style,\n }}\n {...rest}\n >\n <div\n data-testid={testId ? `${testId}-icon` : undefined}\n style={{\n width: s.icon,\n height: s.icon,\n color: iconColor,\n marginBottom: 16,\n }}\n >\n {icon || defaultIcons[type]}\n </div>\n <h3\n data-testid={testId ? `${testId}-title` : undefined}\n style={{\n ...s.title,\n color: 'var(--ink-1)',\n margin: 0,\n marginBottom: 4,\n }}\n >\n {title}\n </h3>\n {description ? (\n <p\n data-testid={testId ? `${testId}-description` : undefined}\n style={{\n ...s.description,\n color: 'var(--ink-3)',\n maxWidth: 384,\n margin: 0,\n marginBottom: 16,\n }}\n >\n {description}\n </p>\n ) : null}\n {action ? (\n <div\n data-testid={testId ? `${testId}-action` : undefined}\n style={{ marginTop: 8 }}\n >\n {action}\n </div>\n ) : null}\n </div>\n );\n }\n);\n","import type { ReactNode } from 'react';\n\nimport { Modal as ModalPrimitive } from './Modal';\nimport { ModalFooter } from './Modal';\nimport { Button, type ButtonVariant } from './Button';\n\n/**\n * ConfirmDialog — confirmation prompt built on the theme Modal.\n *\n * Prop names are IDENTICAL to the app's legacy ConfirmDialog\n * (frontend/src/pages/Clients/components/ConfirmDialog.tsx) so call-sites can\n * swap their import to `@teja-app/ui/theme` without code changes:\n * `isOpen, onClose, onConfirm, title, message, confirmText?, cancelText?,\n * variant: 'danger'|'warning'|'info', isLoading?, confirmTestId?, cancelTestId?`.\n */\nexport type ConfirmDialogVariant = 'danger' | 'warning' | 'info';\n\nconst VARIANT_BUTTON: Record<ConfirmDialogVariant, ButtonVariant> = {\n danger: 'danger',\n warning: 'primary',\n info: 'primary',\n};\n\nexport interface ConfirmDialogProps {\n /** Controls whether the dialog is open. */\n isOpen: boolean;\n /** Fired on cancel, overlay click, Escape, and close button. */\n onClose: () => void;\n /** Fired when the confirm button is pressed. */\n onConfirm: () => void;\n /** Dialog title — a clear question (e.g. \"Delete this note?\"). */\n title: string;\n /** Body message explaining the consequences. */\n message: ReactNode;\n /** Confirm button label. Default \"Confirm\". */\n confirmText?: string;\n /** Cancel button label. Default \"Cancel\". */\n cancelText?: string;\n /** Affects confirm button styling. Default `danger`. */\n variant?: ConfirmDialogVariant;\n /** Disables both buttons and shows a loading confirm. */\n isLoading?: boolean;\n /** data-testid for the confirm button. */\n confirmTestId?: string;\n /** data-testid for the cancel button. */\n cancelTestId?: string;\n /** Forwarded as `data-testid` on the Modal root. */\n testId?: string;\n}\n\nexport function ConfirmDialog({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n variant = 'danger',\n isLoading = false,\n confirmTestId,\n cancelTestId,\n testId,\n}: ConfirmDialogProps) {\n return (\n <ModalPrimitive\n open={isOpen}\n onClose={onClose}\n variant=\"confirm\"\n title={title}\n testId={testId}\n footer={\n <ModalFooter>\n <Button\n variant=\"secondary\"\n onClick={onClose}\n disabled={isLoading}\n testId={cancelTestId}\n >\n {cancelText}\n </Button>\n <Button\n variant={VARIANT_BUTTON[variant]}\n onClick={onConfirm}\n disabled={isLoading}\n testId={confirmTestId}\n >\n {isLoading ? 'Loading…' : confirmText}\n </Button>\n </ModalFooter>\n }\n >\n <p style={{ fontSize: 13.5, color: 'var(--ink-2)', margin: 0, lineHeight: 1.5 }}>\n {message}\n </p>\n </ModalPrimitive>\n );\n}\n"],"names":["createContext","useMemo","useState","useEffect","useRef","useCallback","jsx","useContext","jsxs","Fragment","style","forwardRef","Button","TONES","Field","TextInput","useId","Textarea","PANEL_STYLE","optionStyle","LABEL_STYLE","Listbox","ListboxButton","ListboxOptions","ListboxOption","selected","HeadlessCombobox","ComboboxInput","ComboboxButton","Transition","ComboboxOptions","ComboboxOption","Combobox","DayPicker","next","valueColor","window","FOCUSABLE_SELECTOR","getFocusable","Drawer","Modal","ModalPrimitive","DrawerPrimitive","Switch","SIZE_PX","IconButton","Chip","STYLE_ID","AIComposeButton","Spinner","Skeleton","EmptyState"],"mappings":"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"}