@mindlogic-ai/logician-ui 3.0.0 → 3.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/dist/components/Avatar/Avatar.js +1 -1
  2. package/dist/components/Avatar/Avatar.js.map +1 -1
  3. package/dist/components/Avatar/Avatar.mjs +1 -1
  4. package/dist/components/Avatar/Avatar.mjs.map +1 -1
  5. package/dist/components/Badge/Badge.styles.d.ts.map +1 -1
  6. package/dist/components/Badge/Badge.styles.js +5 -3
  7. package/dist/components/Badge/Badge.styles.js.map +1 -1
  8. package/dist/components/Badge/Badge.styles.mjs +5 -3
  9. package/dist/components/Badge/Badge.styles.mjs.map +1 -1
  10. package/dist/components/Button/Button.styles.d.ts.map +1 -1
  11. package/dist/components/Button/Button.styles.js +39 -33
  12. package/dist/components/Button/Button.styles.js.map +1 -1
  13. package/dist/components/Button/Button.styles.mjs +39 -33
  14. package/dist/components/Button/Button.styles.mjs.map +1 -1
  15. package/dist/components/Card/Card.js +1 -1
  16. package/dist/components/Card/Card.js.map +1 -1
  17. package/dist/components/Card/Card.mjs +1 -1
  18. package/dist/components/Card/Card.mjs.map +1 -1
  19. package/dist/components/Checkbox/CheckboxControl.d.ts.map +1 -1
  20. package/dist/components/Checkbox/CheckboxControl.js +9 -3
  21. package/dist/components/Checkbox/CheckboxControl.js.map +1 -1
  22. package/dist/components/Checkbox/CheckboxControl.mjs +9 -3
  23. package/dist/components/Checkbox/CheckboxControl.mjs.map +1 -1
  24. package/dist/components/Chip/Chip.styles.d.ts.map +1 -1
  25. package/dist/components/Chip/Chip.styles.js +14 -11
  26. package/dist/components/Chip/Chip.styles.js.map +1 -1
  27. package/dist/components/Chip/Chip.styles.mjs +14 -11
  28. package/dist/components/Chip/Chip.styles.mjs.map +1 -1
  29. package/dist/components/Code/Code.js +4 -4
  30. package/dist/components/Code/Code.js.map +1 -1
  31. package/dist/components/Code/Code.mjs +4 -4
  32. package/dist/components/Code/Code.mjs.map +1 -1
  33. package/dist/components/CodeTabs/CopyButton.js +1 -1
  34. package/dist/components/CodeTabs/CopyButton.mjs +1 -1
  35. package/dist/components/Collapsible/CollapsibleRoot.js +1 -1
  36. package/dist/components/Collapsible/CollapsibleRoot.js.map +1 -1
  37. package/dist/components/Collapsible/CollapsibleRoot.mjs +1 -1
  38. package/dist/components/Collapsible/CollapsibleRoot.mjs.map +1 -1
  39. package/dist/components/Collapsible/CollapsibleTrigger.js +1 -1
  40. package/dist/components/Collapsible/CollapsibleTrigger.js.map +1 -1
  41. package/dist/components/Collapsible/CollapsibleTrigger.mjs +1 -1
  42. package/dist/components/Collapsible/CollapsibleTrigger.mjs.map +1 -1
  43. package/dist/components/ColorMode/ColorModeProvider.d.ts +39 -0
  44. package/dist/components/ColorMode/ColorModeProvider.d.ts.map +1 -0
  45. package/dist/components/ColorMode/ColorModeProvider.js +39 -0
  46. package/dist/components/ColorMode/ColorModeProvider.js.map +1 -0
  47. package/dist/components/ColorMode/ColorModeProvider.mjs +37 -0
  48. package/dist/components/ColorMode/ColorModeProvider.mjs.map +1 -0
  49. package/dist/components/ColorMode/ColorModeToggle.d.ts +18 -0
  50. package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -0
  51. package/dist/components/ColorMode/ColorModeToggle.js +34 -0
  52. package/dist/components/ColorMode/ColorModeToggle.js.map +1 -0
  53. package/dist/components/ColorMode/ColorModeToggle.mjs +32 -0
  54. package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -0
  55. package/dist/components/ColorMode/index.d.ts +7 -0
  56. package/dist/components/ColorMode/index.d.ts.map +1 -0
  57. package/dist/components/ColorMode/useColorMode.d.ts +41 -0
  58. package/dist/components/ColorMode/useColorMode.d.ts.map +1 -0
  59. package/dist/components/ColorMode/useColorMode.js +55 -0
  60. package/dist/components/ColorMode/useColorMode.js.map +1 -0
  61. package/dist/components/ColorMode/useColorMode.mjs +52 -0
  62. package/dist/components/ColorMode/useColorMode.mjs.map +1 -0
  63. package/dist/components/DatePicker/RangeDatePicker.d.ts.map +1 -1
  64. package/dist/components/DatePicker/RangeDatePicker.js +8 -5
  65. package/dist/components/DatePicker/RangeDatePicker.js.map +1 -1
  66. package/dist/components/DatePicker/RangeDatePicker.mjs +8 -5
  67. package/dist/components/DatePicker/RangeDatePicker.mjs.map +1 -1
  68. package/dist/components/DatePicker/SingleDatePicker.js +3 -3
  69. package/dist/components/DatePicker/SingleDatePicker.js.map +1 -1
  70. package/dist/components/DatePicker/SingleDatePicker.mjs +3 -3
  71. package/dist/components/DatePicker/SingleDatePicker.mjs.map +1 -1
  72. package/dist/components/ErrorFallback/ErrorFallback.js +1 -1
  73. package/dist/components/ErrorFallback/ErrorFallback.js.map +1 -1
  74. package/dist/components/ErrorFallback/ErrorFallback.mjs +1 -1
  75. package/dist/components/ErrorFallback/ErrorFallback.mjs.map +1 -1
  76. package/dist/components/FileInput/FileInput.js +1 -1
  77. package/dist/components/FileInput/FileInput.js.map +1 -1
  78. package/dist/components/FileInput/FileInput.mjs +1 -1
  79. package/dist/components/FileInput/FileInput.mjs.map +1 -1
  80. package/dist/components/FileItem/FileItem.js +2 -2
  81. package/dist/components/FileItem/FileItem.js.map +1 -1
  82. package/dist/components/FileItem/FileItem.mjs +2 -2
  83. package/dist/components/FileItem/FileItem.mjs.map +1 -1
  84. package/dist/components/FileList/FileList.js +3 -3
  85. package/dist/components/FileList/FileList.js.map +1 -1
  86. package/dist/components/FileList/FileList.mjs +3 -3
  87. package/dist/components/FileList/FileList.mjs.map +1 -1
  88. package/dist/components/FormLabel/FormLabel.js +1 -1
  89. package/dist/components/FormLabel/FormLabel.js.map +1 -1
  90. package/dist/components/FormLabel/FormLabel.mjs +1 -1
  91. package/dist/components/FormLabel/FormLabel.mjs.map +1 -1
  92. package/dist/components/IconButton/IconButton.styles.js +1 -1
  93. package/dist/components/IconButton/IconButton.styles.js.map +1 -1
  94. package/dist/components/IconButton/IconButton.styles.mjs +1 -1
  95. package/dist/components/IconButton/IconButton.styles.mjs.map +1 -1
  96. package/dist/components/Input/Input.d.ts.map +1 -1
  97. package/dist/components/Input/Input.js +6 -6
  98. package/dist/components/Input/Input.js.map +1 -1
  99. package/dist/components/Input/Input.mjs +6 -6
  100. package/dist/components/Input/Input.mjs.map +1 -1
  101. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
  102. package/dist/components/LineGraph/LineGraph.js +9 -5
  103. package/dist/components/LineGraph/LineGraph.js.map +1 -1
  104. package/dist/components/LineGraph/LineGraph.mjs +9 -5
  105. package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
  106. package/dist/components/Loaders/PageLoader.js +1 -1
  107. package/dist/components/Loaders/PageLoader.js.map +1 -1
  108. package/dist/components/Loaders/PageLoader.mjs +1 -1
  109. package/dist/components/Loaders/PageLoader.mjs.map +1 -1
  110. package/dist/components/Loaders/SectionLoader.js +1 -1
  111. package/dist/components/Loaders/SectionLoader.js.map +1 -1
  112. package/dist/components/Loaders/SectionLoader.mjs +1 -1
  113. package/dist/components/Loaders/SectionLoader.mjs.map +1 -1
  114. package/dist/components/LogicianProvider/LogicianProvider.d.ts +20 -0
  115. package/dist/components/LogicianProvider/LogicianProvider.d.ts.map +1 -1
  116. package/dist/components/LogicianProvider/LogicianProvider.js +9 -2
  117. package/dist/components/LogicianProvider/LogicianProvider.js.map +1 -1
  118. package/dist/components/LogicianProvider/LogicianProvider.mjs +9 -2
  119. package/dist/components/LogicianProvider/LogicianProvider.mjs.map +1 -1
  120. package/dist/components/MDXEditor/MDXEditor.d.ts.map +1 -1
  121. package/dist/components/MDXEditor/MDXEditor.js +8 -16
  122. package/dist/components/MDXEditor/MDXEditor.js.map +1 -1
  123. package/dist/components/MDXEditor/MDXEditor.mjs +8 -16
  124. package/dist/components/MDXEditor/MDXEditor.mjs.map +1 -1
  125. package/dist/components/Markdown/Markdown.module.css.js +1 -1
  126. package/dist/components/Markdown/Markdown.module.css.mjs +1 -1
  127. package/dist/components/MaxLengthIndicator/MaxLengthIndicator.js +1 -1
  128. package/dist/components/MaxLengthIndicator/MaxLengthIndicator.js.map +1 -1
  129. package/dist/components/MaxLengthIndicator/MaxLengthIndicator.mjs +1 -1
  130. package/dist/components/MaxLengthIndicator/MaxLengthIndicator.mjs.map +1 -1
  131. package/dist/components/Menu/MenuItem.d.ts.map +1 -1
  132. package/dist/components/Menu/MenuItem.js +7 -3
  133. package/dist/components/Menu/MenuItem.js.map +1 -1
  134. package/dist/components/Menu/MenuItem.mjs +7 -3
  135. package/dist/components/Menu/MenuItem.mjs.map +1 -1
  136. package/dist/components/Menu/MenuList.d.ts.map +1 -1
  137. package/dist/components/Menu/MenuList.js +7 -1
  138. package/dist/components/Menu/MenuList.js.map +1 -1
  139. package/dist/components/Menu/MenuList.mjs +7 -1
  140. package/dist/components/Menu/MenuList.mjs.map +1 -1
  141. package/dist/components/Modal/ModalFooter/ModalFooter.js +1 -1
  142. package/dist/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
  143. package/dist/components/Modal/ModalFooter/ModalFooter.mjs +1 -1
  144. package/dist/components/Modal/ModalFooter/ModalFooter.mjs.map +1 -1
  145. package/dist/components/MonthPicker/MonthPicker.js +1 -1
  146. package/dist/components/MonthPicker/MonthPicker.mjs +1 -1
  147. package/dist/components/Popover/PopoverArrowTip.js +1 -1
  148. package/dist/components/Popover/PopoverArrowTip.js.map +1 -1
  149. package/dist/components/Popover/PopoverArrowTip.mjs +1 -1
  150. package/dist/components/Popover/PopoverArrowTip.mjs.map +1 -1
  151. package/dist/components/Popover/PopoverContent.js +1 -1
  152. package/dist/components/Popover/PopoverContent.js.map +1 -1
  153. package/dist/components/Popover/PopoverContent.mjs +1 -1
  154. package/dist/components/Popover/PopoverContent.mjs.map +1 -1
  155. package/dist/components/RadialProgress/RadialProgress.js +1 -1
  156. package/dist/components/RadialProgress/RadialProgress.js.map +1 -1
  157. package/dist/components/RadialProgress/RadialProgress.mjs +1 -1
  158. package/dist/components/RadialProgress/RadialProgress.mjs.map +1 -1
  159. package/dist/components/SeeMoreButton/SeeMoreButton.styles.js +2 -2
  160. package/dist/components/SeeMoreButton/SeeMoreButton.styles.js.map +1 -1
  161. package/dist/components/SeeMoreButton/SeeMoreButton.styles.mjs +2 -2
  162. package/dist/components/SeeMoreButton/SeeMoreButton.styles.mjs.map +1 -1
  163. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  164. package/dist/components/SegmentedControl/SegmentedControl.js +7 -3
  165. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  166. package/dist/components/SegmentedControl/SegmentedControl.mjs +7 -3
  167. package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  168. package/dist/components/Select/Select.styles.d.ts +18 -4
  169. package/dist/components/Select/Select.styles.d.ts.map +1 -1
  170. package/dist/components/Select/Select.styles.js +11 -10
  171. package/dist/components/Select/Select.styles.js.map +1 -1
  172. package/dist/components/Select/Select.styles.mjs +11 -10
  173. package/dist/components/Select/Select.styles.mjs.map +1 -1
  174. package/dist/components/Slider/SliderThumb/SliderThumb.js +1 -1
  175. package/dist/components/Slider/SliderThumb/SliderThumb.js.map +1 -1
  176. package/dist/components/Slider/SliderThumb/SliderThumb.mjs +1 -1
  177. package/dist/components/Slider/SliderThumb/SliderThumb.mjs.map +1 -1
  178. package/dist/components/Table/Table.styles.js +1 -1
  179. package/dist/components/Table/Table.styles.js.map +1 -1
  180. package/dist/components/Table/Table.styles.mjs +1 -1
  181. package/dist/components/Table/Table.styles.mjs.map +1 -1
  182. package/dist/components/Table/TableContainer.js +1 -1
  183. package/dist/components/Table/TableContainer.js.map +1 -1
  184. package/dist/components/Table/TableContainer.mjs +1 -1
  185. package/dist/components/Table/TableContainer.mjs.map +1 -1
  186. package/dist/components/Table/Tbody.js +1 -1
  187. package/dist/components/Table/Tbody.js.map +1 -1
  188. package/dist/components/Table/Tbody.mjs +1 -1
  189. package/dist/components/Table/Tbody.mjs.map +1 -1
  190. package/dist/components/Table/Thead.js +1 -1
  191. package/dist/components/Table/Thead.mjs +1 -1
  192. package/dist/components/Tabs/Tab/Tab.js +1 -1
  193. package/dist/components/Tabs/Tab/Tab.mjs +1 -1
  194. package/dist/components/Tabs/TabList/TabList.js +1 -1
  195. package/dist/components/Tabs/TabList/TabList.js.map +1 -1
  196. package/dist/components/Tabs/TabList/TabList.mjs +1 -1
  197. package/dist/components/Tabs/TabList/TabList.mjs.map +1 -1
  198. package/dist/components/Tag/Tag.styles.d.ts.map +1 -1
  199. package/dist/components/Tag/Tag.styles.js +19 -16
  200. package/dist/components/Tag/Tag.styles.js.map +1 -1
  201. package/dist/components/Tag/Tag.styles.mjs +19 -16
  202. package/dist/components/Tag/Tag.styles.mjs.map +1 -1
  203. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  204. package/dist/components/Textarea/Textarea.js +7 -7
  205. package/dist/components/Textarea/Textarea.js.map +1 -1
  206. package/dist/components/Textarea/Textarea.mjs +7 -7
  207. package/dist/components/Textarea/Textarea.mjs.map +1 -1
  208. package/dist/components/Typography/H3.js +1 -1
  209. package/dist/components/Typography/H3.js.map +1 -1
  210. package/dist/components/Typography/H3.mjs +1 -1
  211. package/dist/components/Typography/H3.mjs.map +1 -1
  212. package/dist/components/Typography/Subtext.js +1 -1
  213. package/dist/components/Typography/Subtext.js.map +1 -1
  214. package/dist/components/Typography/Subtext.mjs +1 -1
  215. package/dist/components/Typography/Subtext.mjs.map +1 -1
  216. package/dist/components/Typography/Subtitle.js +1 -1
  217. package/dist/components/Typography/Subtitle.js.map +1 -1
  218. package/dist/components/Typography/Subtitle.mjs +1 -1
  219. package/dist/components/Typography/Subtitle.mjs.map +1 -1
  220. package/dist/components/Typography/Text.js +1 -1
  221. package/dist/components/Typography/Text.js.map +1 -1
  222. package/dist/components/Typography/Text.mjs +1 -1
  223. package/dist/components/Typography/Text.mjs.map +1 -1
  224. package/dist/index.d.ts +2 -0
  225. package/dist/index.d.ts.map +1 -1
  226. package/dist/index.js +7 -0
  227. package/dist/index.js.map +1 -1
  228. package/dist/index.mjs +3 -0
  229. package/dist/index.mjs.map +1 -1
  230. package/dist/theme/colors.d.ts +276 -40
  231. package/dist/theme/colors.d.ts.map +1 -1
  232. package/dist/theme/colors.js +197 -40
  233. package/dist/theme/colors.js.map +1 -1
  234. package/dist/theme/colors.mjs +197 -40
  235. package/dist/theme/colors.mjs.map +1 -1
  236. package/dist/theme/global.d.ts.map +1 -1
  237. package/dist/theme/global.js +11 -1
  238. package/dist/theme/global.js.map +1 -1
  239. package/dist/theme/global.mjs +11 -1
  240. package/dist/theme/global.mjs.map +1 -1
  241. package/package.json +2 -1
  242. package/src/components/Avatar/Avatar.tsx +1 -1
  243. package/src/components/Badge/Badge.styles.ts +5 -3
  244. package/src/components/Button/Button.styles.ts +39 -33
  245. package/src/components/Card/Card.tsx +3 -3
  246. package/src/components/Checkbox/CheckboxControl.tsx +8 -3
  247. package/src/components/Chip/Chip.styles.ts +14 -11
  248. package/src/components/Code/Code.tsx +5 -5
  249. package/src/components/CodeTabs/CopyButton.tsx +1 -1
  250. package/src/components/Collapsible/CollapsibleRoot.tsx +1 -1
  251. package/src/components/Collapsible/CollapsibleTrigger.tsx +1 -1
  252. package/src/components/ColorMode/ColorModeProvider.tsx +63 -0
  253. package/src/components/ColorMode/ColorModeToggle.tsx +45 -0
  254. package/src/components/ColorMode/index.ts +6 -0
  255. package/src/components/ColorMode/useColorMode.ts +74 -0
  256. package/src/components/DatePicker/RangeDatePicker.tsx +8 -5
  257. package/src/components/DatePicker/SingleDatePicker.tsx +3 -3
  258. package/src/components/ErrorFallback/ErrorFallback.tsx +3 -3
  259. package/src/components/FileInput/FileInput.tsx +1 -1
  260. package/src/components/FileItem/FileItem.tsx +5 -5
  261. package/src/components/FileList/FileList.tsx +4 -4
  262. package/src/components/FormLabel/FormLabel.tsx +1 -1
  263. package/src/components/IconButton/IconButton.styles.ts +1 -1
  264. package/src/components/Input/Input.tsx +10 -7
  265. package/src/components/LineGraph/LineGraph.tsx +8 -5
  266. package/src/components/Loaders/PageLoader.tsx +1 -1
  267. package/src/components/Loaders/SectionLoader.tsx +1 -1
  268. package/src/components/LogicianProvider/LogicianProvider.tsx +41 -1
  269. package/src/components/MDXEditor/MDXEditor.tsx +8 -18
  270. package/src/components/Markdown/Markdown.module.css +1 -1
  271. package/src/components/MaxLengthIndicator/MaxLengthIndicator.tsx +1 -1
  272. package/src/components/Menu/MenuItem.tsx +6 -3
  273. package/src/components/Menu/MenuList.tsx +7 -2
  274. package/src/components/Modal/ModalFooter/ModalFooter.tsx +1 -1
  275. package/src/components/MonthPicker/MonthPicker.tsx +1 -1
  276. package/src/components/Popover/PopoverArrowTip.tsx +1 -1
  277. package/src/components/Popover/PopoverContent.tsx +1 -1
  278. package/src/components/RadialProgress/RadialProgress.stories.tsx +1 -1
  279. package/src/components/RadialProgress/RadialProgress.tsx +2 -2
  280. package/src/components/SeeMoreButton/SeeMoreButton.styles.ts +2 -2
  281. package/src/components/SegmentedControl/SegmentedControl.tsx +6 -3
  282. package/src/components/Select/Select.styles.ts +11 -10
  283. package/src/components/Slider/SliderThumb/SliderThumb.tsx +1 -1
  284. package/src/components/Table/Table.styles.ts +1 -1
  285. package/src/components/Table/TableContainer.tsx +1 -1
  286. package/src/components/Table/Tbody.tsx +1 -1
  287. package/src/components/Table/Thead.tsx +1 -1
  288. package/src/components/Tabs/Tab/Tab.tsx +1 -1
  289. package/src/components/Tabs/TabList/TabList.tsx +1 -1
  290. package/src/components/Tag/Tag.styles.ts +19 -16
  291. package/src/components/Textarea/Textarea.tsx +10 -7
  292. package/src/components/Typography/H3.tsx +1 -1
  293. package/src/components/Typography/Subtext.tsx +1 -1
  294. package/src/components/Typography/Subtitle.tsx +1 -1
  295. package/src/components/Typography/Text.tsx +1 -1
  296. package/src/index.ts +2 -0
  297. package/src/theme/Palette.stories.tsx +114 -88
  298. package/src/theme/colors.ts +225 -40
  299. package/src/theme/global.ts +12 -1
@@ -66,7 +66,10 @@ export const SegmentedControl = forwardRef<
66
66
  }
67
67
  }}
68
68
  size={size}
69
- bg="gray.50"
69
+ // Track + selected-indicator flip with the mode (light values preserved:
70
+ // bg.subtle → gray.50, bg.surface → white/gray.0). The indicator's md
71
+ // shadow carries the raised affordance in both modes.
72
+ bg="bg.subtle"
70
73
  p="1"
71
74
  borderRadius={borderRadius}
72
75
  boxShadow="none"
@@ -74,7 +77,7 @@ export const SegmentedControl = forwardRef<
74
77
  {...rest}
75
78
  css={mergeCss(
76
79
  {
77
- '--segment-indicator-bg': `var(--chakra-colors-gray-0)`,
80
+ '--segment-indicator-bg': `var(--chakra-colors-bg-surface)`,
78
81
  '--segment-indicator-shadow': `var(--chakra-shadows-md)`,
79
82
  },
80
83
  css
@@ -93,7 +96,7 @@ export const SegmentedControl = forwardRef<
93
96
  >
94
97
  <SegmentGroup.ItemText
95
98
  data-text={typeof item.label === 'string' ? item.label : undefined}
96
- color="gray.800"
99
+ color="fg.muted"
97
100
  fontWeight="500"
98
101
  fontSize={fontSize}
99
102
  whiteSpace="nowrap"
@@ -15,8 +15,9 @@ const focusVars = {
15
15
 
16
16
  const fieldBase = {
17
17
  ...focusVars,
18
- bg: 'white',
19
- borderColor: 'gray.400',
18
+ bg: 'bg.surface',
19
+ color: 'fg.default',
20
+ borderColor: { base: 'gray.400', _dark: 'gray.1100' },
20
21
  _hover: { borderColor: 'primary.lighter' },
21
22
  _focus: { borderColor: 'primary.main' },
22
23
  _invalid: {
@@ -27,8 +28,8 @@ const fieldBase = {
27
28
  _disabled: {
28
29
  opacity: 1,
29
30
  cursor: 'not-allowed',
30
- bg: 'gray.50',
31
- color: 'gray.1000',
31
+ bg: 'bg.subtle',
32
+ color: { base: 'gray.1000', _dark: 'gray.400' },
32
33
  fontWeight: 'semibold',
33
34
  },
34
35
  };
@@ -47,8 +48,8 @@ export const inputStyles = {
47
48
 
48
49
  /** Dropdown panel for both Select and Combobox. */
49
50
  export const contentStyles = {
50
- bg: 'white',
51
- borderColor: 'gray.300',
51
+ bg: 'bg.surface',
52
+ borderColor: 'border.default',
52
53
  borderWidth: '1px',
53
54
  borderRadius: '8px',
54
55
  boxShadow: '0px 5px 20px 0px rgba(0, 0, 0, 0.10)',
@@ -59,17 +60,17 @@ export const contentStyles = {
59
60
  export const itemStyles = {
60
61
  borderRadius: '4px',
61
62
  cursor: 'pointer',
62
- color: 'gray.1200',
63
- _highlighted: { bg: 'gray.50' },
63
+ color: 'fg.default',
64
+ _highlighted: { bg: 'bg.subtle' },
64
65
  _checked: {
65
66
  bg: 'primary.extralight',
66
67
  color: 'primary.dark',
67
68
  fontWeight: 'bold',
68
69
  },
69
- _disabled: { color: 'gray.500', cursor: 'not-allowed' },
70
+ _disabled: { color: 'fg.subtle', cursor: 'not-allowed' },
70
71
  };
71
72
 
72
73
  /** Dropdown chevron — softened so it doesn't outweigh adjacent icons. */
73
74
  export const indicatorStyles = {
74
- color: 'gray.600',
75
+ color: 'fg.muted',
75
76
  };
@@ -20,7 +20,7 @@ export const SliderThumb = forwardRef(
20
20
  borderStyle="solid"
21
21
  _disabled={{
22
22
  bg: 'gray.100',
23
- borderColor: 'gray.400',
23
+ borderColor: 'border.default',
24
24
  cursor: 'not-allowed',
25
25
  }}
26
26
  {...focusRing}
@@ -28,7 +28,7 @@ export const getStickyStyles = (
28
28
  overflow: 'visible',
29
29
  [stickyDirection]: `${stickyOffset}px`,
30
30
  zIndex: 2,
31
- backgroundColor: 'white',
31
+ backgroundColor: 'bg.surface',
32
32
  ...(shouldShowShadow && {
33
33
  _after: {
34
34
  content: '""',
@@ -29,7 +29,7 @@ const TableContainerInner = forwardRef<HTMLDivElement, TableContainerProps>(
29
29
  <Table.ScrollArea
30
30
  border="1px solid"
31
31
  borderRadius="md"
32
- borderColor="gray.200"
32
+ borderColor="border.subtle"
33
33
  ref={handleRef}
34
34
  {...rest}
35
35
  >
@@ -8,7 +8,7 @@ export const Tbody = forwardRef<HTMLTableSectionElement, Table.BodyProps>(
8
8
  return (
9
9
  <Table.Body
10
10
  ref={ref}
11
- color="gray.1500"
11
+ color="fg.default"
12
12
  fontWeight="medium"
13
13
  {...props}
14
14
  css={mergeCss(
@@ -1,5 +1,5 @@
1
1
  import { Table } from '@chakra-ui/react';
2
2
 
3
3
  export const Thead = ({ ...rest }: Table.HeaderProps) => {
4
- return <Table.Header color="gray.800" fontWeight="medium" {...rest} />;
4
+ return <Table.Header color="fg.muted" fontWeight="medium" {...rest} />;
5
5
  };
@@ -23,7 +23,7 @@ export const Tab = forwardRef<HTMLButtonElement, TabProps>(
23
23
  ref={ref}
24
24
  variant="ghost"
25
25
  colorPalette="neutral"
26
- color="gray.800"
26
+ color="fg.muted"
27
27
  py={3}
28
28
  border="none"
29
29
  _selected={horizontalSelectedStyles}
@@ -13,7 +13,7 @@ export const TabList = ({ children, css, ...props }: TabListProps) => {
13
13
  <Box
14
14
  width="100%"
15
15
  borderBottom="1px solid"
16
- borderColor="gray.100"
16
+ borderColor="border.subtle"
17
17
  {...tabListStyles}
18
18
  {...props}
19
19
  css={mergeCss(
@@ -20,8 +20,8 @@ export const tagColorPaletteStyles: Record<
20
20
  color: 'primary.dark',
21
21
  },
22
22
  solid: {
23
- bgColor: 'primary.main',
24
- borderColor: 'primary.main',
23
+ bgColor: 'blue.500',
24
+ borderColor: 'blue.500',
25
25
  color: 'white',
26
26
  },
27
27
  outline: {
@@ -37,8 +37,8 @@ export const tagColorPaletteStyles: Record<
37
37
  color: 'secondary.dark',
38
38
  },
39
39
  solid: {
40
- bgColor: 'secondary.main',
41
- borderColor: 'secondary.main',
40
+ bgColor: 'violet.500',
41
+ borderColor: 'violet.500',
42
42
  color: 'white',
43
43
  },
44
44
  outline: {
@@ -54,8 +54,8 @@ export const tagColorPaletteStyles: Record<
54
54
  color: 'danger.dark',
55
55
  },
56
56
  solid: {
57
- bgColor: 'danger.main',
58
- borderColor: 'danger.main',
57
+ bgColor: 'rose.500',
58
+ borderColor: 'rose.500',
59
59
  color: 'white',
60
60
  },
61
61
  outline: {
@@ -71,8 +71,8 @@ export const tagColorPaletteStyles: Record<
71
71
  color: 'success.dark',
72
72
  },
73
73
  solid: {
74
- bgColor: 'success.main',
75
- borderColor: 'success.main',
74
+ bgColor: 'green.600',
75
+ borderColor: 'green.600',
76
76
  color: 'white',
77
77
  },
78
78
  outline: {
@@ -88,9 +88,9 @@ export const tagColorPaletteStyles: Record<
88
88
  color: 'warning.dark',
89
89
  },
90
90
  solid: {
91
- bgColor: 'warning.main',
92
- borderColor: 'warning.main',
93
- color: 'white',
91
+ bgColor: 'gold.500',
92
+ borderColor: 'gold.500',
93
+ color: 'gold.900', // dark text: white/gold.500 was 2.39:1; gold.900 = 6.73:1
94
94
  },
95
95
  outline: {
96
96
  bgColor: 'transparent',
@@ -100,9 +100,12 @@ export const tagColorPaletteStyles: Record<
100
100
  },
101
101
  neutral: {
102
102
  soft: {
103
- bgColor: 'gray.100',
104
- borderColor: 'gray.300',
105
- color: 'gray.800',
103
+ // Flip surface + border with the mode so the fg.muted text stays legible
104
+ // in dark. Light values preserved (bg.muted → gray.100, border.default →
105
+ // gray.300).
106
+ bgColor: 'bg.muted',
107
+ borderColor: 'border.default',
108
+ color: 'fg.muted',
106
109
  },
107
110
  solid: {
108
111
  bgColor: 'gray.800',
@@ -111,8 +114,8 @@ export const tagColorPaletteStyles: Record<
111
114
  },
112
115
  outline: {
113
116
  bgColor: 'transparent',
114
- borderColor: 'gray.500',
115
- color: 'gray.700',
117
+ borderColor: 'border.strong', // gray.500 / gray.900 (_dark)
118
+ color: 'fg.subtle',
116
119
  },
117
120
  },
118
121
  };
@@ -48,14 +48,17 @@ export const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(
48
48
  readOnly={readOnly}
49
49
  data-invalid={invalid || undefined}
50
50
  resize="none"
51
- bg="white"
51
+ bg="bg.surface"
52
+ color="fg.default"
52
53
  // Chakra v3 `Input` outline variant declares
53
54
  // `focusRingColor: var(--focus-color)`, but the matching
54
55
  // `Textarea` recipe does not — so the focus ring defaults to
55
56
  // `colorPalette.focusRing` (gray.400) and ends up visibly
56
57
  // different from Input/Select. Mirror Input's chain explicitly.
57
58
  focusRingColor={invalid ? 'danger.main' : 'primary.main'}
58
- borderColor={invalid ? 'danger.main' : 'gray.400'}
59
+ borderColor={
60
+ invalid ? 'danger.main' : { base: 'gray.400', _dark: 'gray.1100' }
61
+ }
59
62
  _hover={{
60
63
  borderColor: invalid ? 'danger.main' : 'primary.lighter',
61
64
  ..._hover,
@@ -76,15 +79,15 @@ export const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(
76
79
  _readOnly={{
77
80
  opacity: 1,
78
81
  cursor: 'not-allowed',
79
- bg: 'gray.50',
80
- color: 'gray.600',
81
- borderColor: 'gray.200',
82
+ bg: 'bg.subtle',
83
+ color: 'fg.muted',
84
+ borderColor: 'border.subtle',
82
85
  }}
83
86
  _disabled={{
84
87
  opacity: 1,
85
88
  cursor: 'not-allowed',
86
- bg: 'gray.50',
87
- color: 'gray.1000',
89
+ bg: 'bg.subtle',
90
+ color: { base: 'gray.1000', _dark: 'gray.400' },
88
91
  fontWeight: 'semibold',
89
92
  }}
90
93
  {...props}
@@ -8,7 +8,7 @@ export const H3 = forwardRef<HTMLHeadingElement, HeadingProps>((props, ref) => {
8
8
  <Heading
9
9
  ref={ref}
10
10
  as="h3"
11
- color="gray.1500"
11
+ color="fg.default"
12
12
  textStyle={fontSize ? undefined : 'h3'}
13
13
  fontSize={fontSize}
14
14
  wordBreak="keep-all"
@@ -10,7 +10,7 @@ export const Subtext = forwardRef<HTMLParagraphElement, TextProps>(
10
10
  ref={ref}
11
11
  textStyle={fontSize ? undefined : 'subtext'}
12
12
  fontSize={fontSize}
13
- color="gray.1500"
13
+ color="fg.default"
14
14
  wordBreak="keep-all"
15
15
  {...rest}
16
16
  />
@@ -11,7 +11,7 @@ export const Subtitle = forwardRef<HTMLParagraphElement, TextProps>(
11
11
  as="h6"
12
12
  textStyle={fontSize ? undefined : 'subtitle'}
13
13
  fontSize={fontSize}
14
- color="gray.1000"
14
+ color="fg.muted"
15
15
  wordBreak="keep-all"
16
16
  {...rest}
17
17
  />
@@ -13,7 +13,7 @@ export const Text = forwardRef<HTMLParagraphElement, TextProps>(
13
13
  // If fontSize is provided, disable textStyle to allow fontSize override
14
14
  textStyle={fontSize ? undefined : 'p'}
15
15
  fontSize={fontSize}
16
- color="gray.1200"
16
+ color="fg.default"
17
17
  wordBreak="keep-all"
18
18
  {...rest}
19
19
  />
package/src/index.ts CHANGED
@@ -11,6 +11,7 @@ export * from './components/Chip';
11
11
  export * from './components/Code';
12
12
  export * from './components/CodeTabs';
13
13
  export * from './components/Collapsible';
14
+ export * from './components/ColorMode';
14
15
  export * from './components/Container';
15
16
  export * from './components/CopyableCode';
16
17
  export * from './components/DatePicker';
@@ -106,3 +107,4 @@ export { LanguageContext, useLanguage } from './hooks/useLanguage';
106
107
 
107
108
  // Theme exports
108
109
  export { logicianConfig, system, theme } from './theme';
110
+ export type { SemanticColorToken } from './theme/colors';
@@ -6,7 +6,7 @@ import {
6
6
  VStack,
7
7
  } from '@chakra-ui/react';
8
8
  import { Meta, StoryObj } from '@storybook/react';
9
- import { lighten, readableColor } from 'polished';
9
+ import { readableColor } from 'polished';
10
10
  import { MouseEventHandler, useState } from 'react';
11
11
 
12
12
  import { Tooltip } from '../components/Tooltip';
@@ -27,20 +27,48 @@ import { colors, semanticTokens } from './colors';
27
27
  * E.g., '{colors.blue.500}' -> '#1751D0'
28
28
  */
29
29
  const resolveTokenReference = (reference: string): string => {
30
- // Check if it's a reference string like '{colors.blue.500}'
31
- const match = reference.match(/^\{colors\.(\w+)\.(\d+)\}$/);
32
- if (!match) {
33
- // Already a hex value or unknown format
30
+ // Scale reference, e.g. '{colors.blue.500}' or '{colors.gray.1500}'.
31
+ const scaleMatch = reference.match(/^\{colors\.(\w+)\.(\w+)\}$/);
32
+ if (scaleMatch) {
33
+ const [, colorName, shade] = scaleMatch;
34
+ const colorScale = (colors as any)[colorName];
35
+ if (colorScale && colorScale[shade]) {
36
+ return colorScale[shade].value;
37
+ }
34
38
  return reference;
35
39
  }
36
- const [, colorName, shade] = match;
37
- const colorScale = (colors as any)[colorName];
38
- if (colorScale && colorScale[shade]) {
39
- return colorScale[shade].value;
40
+ // Flat reference with no shade, e.g. '{colors.white}' / '{colors.black}'.
41
+ const flatMatch = reference.match(/^\{colors\.(\w+)\}$/);
42
+ if (flatMatch) {
43
+ const entry = (colors as any)[flatMatch[1]];
44
+ if (entry && typeof entry.value === 'string') {
45
+ return entry.value;
46
+ }
40
47
  }
48
+ // Already a hex value or unknown format.
41
49
  return reference;
42
50
  };
43
51
 
52
+ /**
53
+ * A semantic token `value` is either a plain reference string (legacy) or a
54
+ * mode-conditional object `{ base, _dark }`. Resolve it to concrete light/dark
55
+ * hex codes so the palette can show both modes side by side.
56
+ */
57
+ type TokenValue = string | { base: string; _dark?: string };
58
+
59
+ const resolveTokenValue = (
60
+ value: TokenValue
61
+ ): { light: string; dark: string } => {
62
+ if (typeof value === 'string') {
63
+ const hex = resolveTokenReference(value);
64
+ return { light: hex, dark: hex };
65
+ }
66
+ return {
67
+ light: resolveTokenReference(value.base),
68
+ dark: resolveTokenReference(value._dark ?? value.base),
69
+ };
70
+ };
71
+
44
72
  const meta = {
45
73
  title: 'Setup/Theme',
46
74
  parameters: {
@@ -84,6 +112,59 @@ export default meta;
84
112
 
85
113
  type Story = StoryObj<typeof meta>;
86
114
 
115
+ // Safe readableColor that falls back to black
116
+ const safeReadableColor = (color: string) => {
117
+ try {
118
+ return readableColor(color);
119
+ } catch {
120
+ return '#000000';
121
+ }
122
+ };
123
+
124
+ const SwatchHalf = ({
125
+ label,
126
+ hex,
127
+ }: {
128
+ label: string;
129
+ hex: string;
130
+ }) => {
131
+ const [wasCopied, setWasCopied] = useState<boolean>();
132
+ const handleClick: MouseEventHandler<HTMLButtonElement> = () => {
133
+ navigator.clipboard.writeText(hex);
134
+ setWasCopied(true);
135
+ setTimeout(() => setWasCopied(false), 2000);
136
+ };
137
+ return (
138
+ <Tooltip content="Copy hex code" placement="top">
139
+ <Flex
140
+ flex="1"
141
+ h="72px"
142
+ direction="column"
143
+ justify="space-between"
144
+ bg={hex}
145
+ p={2}
146
+ as="button"
147
+ transition="transform 0.1s ease-in-out"
148
+ // @ts-expect-error as prop
149
+ onClick={handleClick}
150
+ _hover={{ transform: 'scale(1.03)' }}
151
+ >
152
+ <Text color={safeReadableColor(hex)} fontSize="10px" textAlign="left">
153
+ {label}
154
+ </Text>
155
+ <Text
156
+ color={safeReadableColor(hex)}
157
+ fontSize="10px"
158
+ fontFamily="mono"
159
+ textAlign="left"
160
+ >
161
+ {wasCopied ? 'Copied!' : hex}
162
+ </Text>
163
+ </Flex>
164
+ </Tooltip>
165
+ );
166
+ };
167
+
87
168
  const ColorCard = ({
88
169
  color,
89
170
  shade,
@@ -91,88 +172,33 @@ const ColorCard = ({
91
172
  }: {
92
173
  color: string;
93
174
  shade: string;
94
- shadeValue: string;
175
+ shadeValue: TokenValue;
95
176
  }) => {
96
- const [wasCopied, setWasCopied] = useState<boolean>();
97
- // Resolve the token reference to actual hex value
98
- const hexCode = resolveTokenReference(shadeValue);
99
-
100
- const handleClick: MouseEventHandler<HTMLButtonElement> = () => {
101
- navigator.clipboard.writeText(hexCode);
102
- setWasCopied(true);
103
- setTimeout(() => {
104
- setWasCopied(false);
105
- }, 2000);
106
- };
107
-
108
- // Safe lighten that falls back to the original color
109
- const safeLighten = (amount: number, color: string) => {
110
- try {
111
- return lighten(amount, color);
112
- } catch {
113
- return color;
114
- }
115
- };
116
-
117
- // Safe readableColor that falls back to black
118
- const safeReadableColor = (color: string) => {
119
- try {
120
- return readableColor(color);
121
- } catch {
122
- return '#000000';
123
- }
124
- };
177
+ // Resolve to concrete light/dark hex so both modes are visible at once.
178
+ const { light, dark } = resolveTokenValue(shadeValue);
179
+ const hasDark = dark !== light;
125
180
 
126
181
  return (
127
- <Flex flexDir="column" align="center" key={shade} p={3}>
128
- <Tooltip content="Copy hex code" placement="top">
129
- <Flex
130
- w="100px"
131
- h="100px"
132
- align="flex-end"
133
- bg={hexCode}
134
- borderRadius="md"
135
- boxShadow="md"
136
- as="button"
137
- transition="transform 0.1s ease-in-out"
138
- // @ts-expect-error as prop
139
- onClick={handleClick}
140
- _hover={{
141
- transform: 'scale(1.05)',
142
- }}
143
- >
144
- {wasCopied ? (
145
- <Flex
146
- color={safeReadableColor(hexCode)}
147
- w="100%"
148
- h="100%"
149
- justify="center"
150
- align="center"
151
- >
152
- Copied!
153
- </Flex>
154
- ) : (
155
- <Box
156
- textAlign="center"
157
- mt={4}
158
- color={safeReadableColor(safeLighten(0.2, hexCode))}
159
- bgColor={safeLighten(0.2, hexCode)}
160
- m={2}
161
- p={1}
162
- w="100%"
163
- borderRadius="md"
164
- >
165
- <Text color="inherit" textStyle="subtext">
166
- {hexCode}
167
- </Text>
168
- </Box>
169
- )}
170
- </Flex>
171
- </Tooltip>
172
- <Text color="gray.1200" mt={2} textStyle="subtext" textAlign="center" wordBreak="break-word">
182
+ <Flex flexDir="column" align="stretch" key={shade} p={2}>
183
+ <Flex
184
+ borderRadius="md"
185
+ overflow="hidden"
186
+ boxShadow="md"
187
+ border="1px solid"
188
+ borderColor="border.subtle"
189
+ >
190
+ <SwatchHalf label={hasDark ? 'Light' : ''} hex={light} />
191
+ {hasDark && <SwatchHalf label="Dark" hex={dark} />}
192
+ </Flex>
193
+ <Text
194
+ color="fg.muted"
195
+ mt={2}
196
+ textStyle="subtext"
197
+ textAlign="center"
198
+ wordBreak="break-word"
199
+ >
173
200
  {color}.{shade}
174
201
  </Text>
175
- <Subtext color="gray.700" textAlign="center" wordBreak="break-word">{shadeValue !== hexCode && shadeValue}</Subtext>
176
202
  </Flex>
177
203
  );
178
204
  };
@@ -275,7 +301,7 @@ export const SemanticTokens: Story = {
275
301
  key={shade}
276
302
  color={color}
277
303
  shade={shade}
278
- shadeValue={(shadeValue as any).value as string}
304
+ shadeValue={(shadeValue as any).value as TokenValue}
279
305
  />
280
306
  ))}
281
307
  </Grid>
@@ -733,7 +759,7 @@ export const Default: Story = {
733
759
  key={shade}
734
760
  color={color}
735
761
  shade={shade}
736
- shadeValue={(shadeValue as any).value as string}
762
+ shadeValue={(shadeValue as any).value as TokenValue}
737
763
  />
738
764
  ))}
739
765
  </Grid>