pixelize-design-library 2.4.2-beta.4 → 2.4.2-beta.41

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 (527) hide show
  1. package/COMPONENT-GOTCHAS.md +1102 -0
  2. package/README.md +26 -0
  3. package/dist/Components/Accordion/Accordion.d.ts +1 -0
  4. package/dist/Components/Accordion/Accordion.js +4 -1
  5. package/dist/Components/Accordion/AccordionProps.d.ts +2 -0
  6. package/dist/Components/AlertDialog/AlertDialog.d.ts +1 -0
  7. package/dist/Components/AlertDialog/AlertDialog.js +1 -0
  8. package/dist/Components/AlertDialog/AlertDialogProps.d.ts +2 -0
  9. package/dist/Components/Apexcharts/ApexAreaChart/ApexAreaChart.d.ts +1 -0
  10. package/dist/Components/Apexcharts/ApexAreaChart/ApexAreaChart.js +1 -0
  11. package/dist/Components/Apexcharts/ApexAreaChart/ApexAreaChartProps.d.ts +4 -0
  12. package/dist/Components/Apexcharts/ApexBarChart/ApexBarChart.d.ts +1 -0
  13. package/dist/Components/Apexcharts/ApexBarChart/ApexBarChart.js +1 -0
  14. package/dist/Components/Apexcharts/ApexBarChart/ApexBarChartProps.d.ts +6 -0
  15. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.d.ts +1 -0
  16. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -0
  17. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChartProps.d.ts +8 -0
  18. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.d.ts +1 -0
  19. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.js +1 -0
  20. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChartProps.d.ts +6 -0
  21. package/dist/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.d.ts +1 -0
  22. package/dist/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.js +1 -0
  23. package/dist/Components/Apexcharts/ApexPolarCharts/ApexPolarChartsProps.d.ts +3 -0
  24. package/dist/Components/Apexcharts/ApexRadialChart/ApexRadialChart.d.ts +1 -0
  25. package/dist/Components/Apexcharts/ApexRadialChart/ApexRadialChart.js +1 -0
  26. package/dist/Components/Apexcharts/ApexRadialChart/ApexRadialChartProps.d.ts +3 -0
  27. package/dist/Components/AppSwitcher/AppMark.d.ts +19 -0
  28. package/dist/Components/AppSwitcher/AppMark.js +62 -0
  29. package/dist/Components/AppSwitcher/AppSwitcher.d.ts +4 -0
  30. package/dist/Components/AppSwitcher/AppSwitcher.js +278 -0
  31. package/dist/Components/AppSwitcher/AppSwitcherProps.d.ts +70 -0
  32. package/dist/Components/AppSwitcher/AppSwitcherProps.js +86 -0
  33. package/dist/Components/AppSwitcher/useAppSwitcherShortcut.d.ts +3 -0
  34. package/dist/Components/AppSwitcher/useAppSwitcherShortcut.js +31 -0
  35. package/dist/Components/AppearanceSettings/AppearanceSettings.js +2 -1
  36. package/dist/Components/AppearanceSettings/AppearanceSettingsProps.d.ts +2 -0
  37. package/dist/Components/Breadcrumbs/BreadcrumbsProps.d.ts +3 -0
  38. package/dist/Components/Button/Button.d.ts +2 -2
  39. package/dist/Components/Button/Button.js +4 -3
  40. package/dist/Components/Button/Button.styles.js +37 -23
  41. package/dist/Components/Button/ButtonProps.d.ts +9 -1
  42. package/dist/Components/ButtonGroupIcon/ButtonGoupIconProps.d.ts +7 -0
  43. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +2 -4
  44. package/dist/Components/Buttons/ButtonsProps.d.ts +2 -0
  45. package/dist/Components/Card/Card.d.ts +1 -1
  46. package/dist/Components/Card/Card.js +2 -2
  47. package/dist/Components/Card/CardProps.d.ts +3 -1
  48. package/dist/Components/Card/PaymentCard/PaymentCard.js +21 -12
  49. package/dist/Components/Card/PaymentCard/PaymentCardProps.d.ts +6 -0
  50. package/dist/Components/Checkbox/Checkbox.d.ts +1 -0
  51. package/dist/Components/Checkbox/Checkbox.js +2 -1
  52. package/dist/Components/Checkbox/Checkbox.styles.js +12 -7
  53. package/dist/Components/Checkbox/CheckboxProps.d.ts +4 -0
  54. package/dist/Components/Common/ErrorComponent.d.ts +2 -0
  55. package/dist/Components/Common/ErrorComponent.js +7 -5
  56. package/dist/Components/Common/ErrorMessage.js +2 -2
  57. package/dist/Components/Common/FormLabel.d.ts +4 -0
  58. package/dist/Components/Common/FormLabel.js +1 -0
  59. package/dist/Components/Common/FormattedDescription.d.ts +2 -0
  60. package/dist/Components/Common/FormattedDescription.js +1 -0
  61. package/dist/Components/Common/HelperText.d.ts +2 -0
  62. package/dist/Components/Common/HelperText.js +2 -0
  63. package/dist/Components/Common/Label.d.ts +1 -0
  64. package/dist/Components/Common/Label.js +1 -0
  65. package/dist/Components/Common/fieldStyles.js +1 -1
  66. package/dist/Components/ContactForm/ContactForm.d.ts +1 -0
  67. package/dist/Components/ContactForm/ContactForm.js +1 -0
  68. package/dist/Components/ContactForm/ContactFormProps.d.ts +4 -0
  69. package/dist/Components/CopyButton/CopyButton.d.ts +3 -1
  70. package/dist/Components/CopyButton/CopyButton.js +9 -3
  71. package/dist/Components/CustomModulesTable/CustomModulesTableProps.d.ts +8 -0
  72. package/dist/Components/DatePicker/CalendarPanel.d.ts +6 -0
  73. package/dist/Components/DatePicker/CalendarPanel.js +37 -15
  74. package/dist/Components/DatePicker/DatePicker.d.ts +1 -0
  75. package/dist/Components/DatePicker/DatePicker.js +1 -0
  76. package/dist/Components/DatePicker/DatePickerProps.d.ts +30 -0
  77. package/dist/Components/DatePicker/RangeDatePicker.d.ts +1 -0
  78. package/dist/Components/DatePicker/RangeDatePicker.js +30 -5
  79. package/dist/Components/DatePicker/SingleDatePicker.d.ts +1 -0
  80. package/dist/Components/DatePicker/SingleDatePicker.js +49 -14
  81. package/dist/Components/DatePicker/ThemeDatePicker.d.ts +1 -0
  82. package/dist/Components/DatePicker/ThemeDatePicker.js +1 -0
  83. package/dist/Components/DatePicker/TimeOnlyPicker.d.ts +1 -0
  84. package/dist/Components/DatePicker/TimeOnlyPicker.js +11 -2
  85. package/dist/Components/DatePicker/TimePicker.d.ts +1 -0
  86. package/dist/Components/DatePicker/TimePicker.js +4 -3
  87. package/dist/Components/DatePicker/TimePickerInput.d.ts +1 -0
  88. package/dist/Components/DatePicker/TimePickerInput.js +2 -1
  89. package/dist/Components/DatePicker/dayStates.d.ts +56 -0
  90. package/dist/Components/DatePicker/dayStates.js +87 -0
  91. package/dist/Components/Divider/Divider.d.ts +1 -0
  92. package/dist/Components/Divider/Divider.js +1 -0
  93. package/dist/Components/Drawer/DrawerProps.d.ts +2 -0
  94. package/dist/Components/Dropdown/DropDown.d.ts +1 -0
  95. package/dist/Components/Dropdown/DropDown.js +22 -6
  96. package/dist/Components/Dropdown/DropdownProps.d.ts +3 -0
  97. package/dist/Components/Editor/Editor.d.ts +1 -0
  98. package/dist/Components/Editor/Editor.js +1 -0
  99. package/dist/Components/Editor/EditorProps.d.ts +2 -0
  100. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.d.ts +1 -0
  101. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +2 -5
  102. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtpProps.d.ts +4 -0
  103. package/dist/Components/EmptyState/EmptyState.d.ts +1 -0
  104. package/dist/Components/EmptyState/EmptyState.js +4 -2
  105. package/dist/Components/EmptyState/EmptyStateProps.d.ts +3 -0
  106. package/dist/Components/FeedbackForm/FeedbackForm.d.ts +3 -0
  107. package/dist/Components/FeedbackForm/FeedbackForm.js +1 -0
  108. package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +3 -2
  109. package/dist/Components/FieldSelectModal/FieldSelectModal.js +1 -0
  110. package/dist/Components/FilePreview/FilePreview.d.ts +1 -0
  111. package/dist/Components/FilePreview/FilePreview.js +3 -1
  112. package/dist/Components/FilePreview/FilePreviewProps.d.ts +5 -2
  113. package/dist/Components/FileUpload/FileUpload.d.ts +1 -0
  114. package/dist/Components/FileUpload/FileUpload.js +7 -5
  115. package/dist/Components/FileUpload/FileUploadProps.d.ts +7 -1
  116. package/dist/Components/FileUpload/constants.js +1 -0
  117. package/dist/Components/FileUploader/FileUploader.d.ts +1 -0
  118. package/dist/Components/FileUploader/FileUploader.js +1 -0
  119. package/dist/Components/FileUploader/FileUploaderProps.d.ts +2 -0
  120. package/dist/Components/FilterSidebar/FilterSidebar.d.ts +3 -0
  121. package/dist/Components/FilterSidebar/FilterSidebar.js +5 -5
  122. package/dist/Components/FilterSidebar/filterHoverStyle.d.ts +2 -10
  123. package/dist/Components/FilterSidebar/filterHoverStyle.js +3 -10
  124. package/dist/Components/Form/FormWrapper.d.ts +3 -0
  125. package/dist/Components/Form/FormWrapper.js +2 -1
  126. package/dist/Components/Header/HeaderProps.d.ts +5 -0
  127. package/dist/Components/Header/components/mobileMenu.js +12 -3
  128. package/dist/Components/Input/Input/InputProps.d.ts +2 -0
  129. package/dist/Components/Input/PhoneNumberInput.d.ts +1 -0
  130. package/dist/Components/Input/PhoneNumberInput.js +1 -0
  131. package/dist/Components/Input/PhoneNumberInputProps.d.ts +3 -0
  132. package/dist/Components/Input/Switch/InputSwitch.d.ts +2 -0
  133. package/dist/Components/Input/Switch/InputSwitch.js +1 -0
  134. package/dist/Components/Input/TextInput.js +1 -0
  135. package/dist/Components/Input/TextInput.styles.js +8 -10
  136. package/dist/Components/Input/TextInputProps.d.ts +2 -0
  137. package/dist/Components/InputTextArea/InputTextArea.d.ts +1 -0
  138. package/dist/Components/InputTextArea/InputTextArea.js +1 -0
  139. package/dist/Components/InputTextArea/InputTextArea.style.js +7 -6
  140. package/dist/Components/InputTextArea/InputTextAreaProps.d.ts +1 -0
  141. package/dist/Components/KanbanBoard/AccountCard.d.ts +3 -0
  142. package/dist/Components/KanbanBoard/AccountCard.js +1 -0
  143. package/dist/Components/KanbanBoard/AccountRow.d.ts +1 -0
  144. package/dist/Components/KanbanBoard/AccountRow.js +1 -0
  145. package/dist/Components/KanbanBoard/KanbanActions/KanbanActions.d.ts +2 -0
  146. package/dist/Components/KanbanBoard/KanbanActions/KanbanActions.js +2 -2
  147. package/dist/Components/KanbanBoard/KanbanBoard.d.ts +1 -0
  148. package/dist/Components/KanbanBoard/KanbanBoard.js +1 -0
  149. package/dist/Components/KanbanBoard/KanbanBoardProps.d.ts +39 -14
  150. package/dist/Components/KanbanBoard/MeasuredItem.d.ts +1 -0
  151. package/dist/Components/KanbanBoard/MeasuredItem.js +1 -0
  152. package/dist/Components/LazyWrapper/LazyWrapper.d.ts +3 -2
  153. package/dist/Components/LazyWrapper/LazyWrapper.js +1 -0
  154. package/dist/Components/LimitReachedModal/LimitReachedModalProps.d.ts +4 -1
  155. package/dist/Components/LimitReachedModal/limitReachedCopy.d.ts +2 -0
  156. package/dist/Components/LimitReachedModal/limitReachedCopy.js +2 -0
  157. package/dist/Components/Loading/Loading.d.ts +1 -0
  158. package/dist/Components/Loading/Loading.js +16 -14
  159. package/dist/Components/Loading/LoadingProps.d.ts +2 -0
  160. package/dist/Components/Modal/ModalProps.d.ts +2 -0
  161. package/dist/Components/MoreItems/MoreItems.d.ts +1 -0
  162. package/dist/Components/MoreItems/MoreItems.js +4 -1
  163. package/dist/Components/MoreItems/MoreItemsProps.d.ts +4 -2
  164. package/dist/Components/MultiSelect/MultiSelect.js +2 -2
  165. package/dist/Components/MultiSelect/MultiSelectProps.d.ts +2 -0
  166. package/dist/Components/NavigationBar/NavigationBar.js +9 -10
  167. package/dist/Components/NavigationBar/NavigationBarProps.d.ts +3 -0
  168. package/dist/Components/NoteTextArea/NoteTextArea.d.ts +1 -0
  169. package/dist/Components/NoteTextArea/NoteTextArea.js +10 -4
  170. package/dist/Components/NoteTextArea/NoteTextAreaProps.d.ts +2 -0
  171. package/dist/Components/Notification/Notification.d.ts +1 -0
  172. package/dist/Components/Notification/Notification.js +1 -0
  173. package/dist/Components/Notification/NotificationProps.d.ts +6 -0
  174. package/dist/Components/NumberInput/NumberInput.d.ts +1 -0
  175. package/dist/Components/NumberInput/NumberInput.js +4 -1
  176. package/dist/Components/NumberInput/NumberInput.styles.js +7 -6
  177. package/dist/Components/NumberInput/NumberInputProps.d.ts +3 -0
  178. package/dist/Components/OrgSwitcher/OrgSwitcher.js +14 -10
  179. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +6 -1
  180. package/dist/Components/OrgSwitcher/OrgSwitcherProps.js +1 -0
  181. package/dist/Components/OrganizationDetails/OrganizationDetails.d.ts +1 -0
  182. package/dist/Components/OrganizationDetails/OrganizationDetails.js +4 -2
  183. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +17 -4
  184. package/dist/Components/PdfViewer/PdfViewer.d.ts +2 -1
  185. package/dist/Components/PdfViewer/PdfViewer.js +7 -1
  186. package/dist/Components/PinInput/PinInput.d.ts +1 -0
  187. package/dist/Components/PinInput/PinInput.js +1 -0
  188. package/dist/Components/PinInput/PinInputProps.d.ts +2 -0
  189. package/dist/Components/PinInputs/PinInputs.d.ts +1 -0
  190. package/dist/Components/PinInputs/PinInputs.js +1 -0
  191. package/dist/Components/PinInputs/PinInputsProps.d.ts +1 -0
  192. package/dist/Components/PlanBadge/PlanBadgeProps.d.ts +2 -0
  193. package/dist/Components/PlanPill/PlanPillProps.d.ts +2 -0
  194. package/dist/Components/Primitives/Primitives.d.ts +6 -0
  195. package/dist/Components/Primitives/Primitives.js +113 -0
  196. package/dist/Components/ProductCard/ProductCardProps.d.ts +10 -0
  197. package/dist/Components/ProductCard/ProductReview.d.ts +1 -0
  198. package/dist/Components/ProductCard/ProductReview.js +6 -1
  199. package/dist/Components/ProductCard/ProductTags.js +1 -1
  200. package/dist/Components/ProductDetails/ProductDetailsProps.d.ts +7 -0
  201. package/dist/Components/ProfileCard/ProfileCard.js +1 -1
  202. package/dist/Components/ProfileCard/ProfileCardProps.d.ts +3 -0
  203. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.d.ts +1 -0
  204. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +5 -3
  205. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewerProps.d.ts +9 -1
  206. package/dist/Components/ProgressBar/ProgressBar.d.ts +1 -0
  207. package/dist/Components/ProgressBar/ProgressBar.js +1 -0
  208. package/dist/Components/ProgressBar/ProgressBarProps.d.ts +2 -0
  209. package/dist/Components/RadioButton/RadioButton.js +3 -2
  210. package/dist/Components/RadioButton/RadioButtonProps.d.ts +2 -0
  211. package/dist/Components/Reorder/Reorder.d.ts +2 -0
  212. package/dist/Components/Reorder/Reorder.js +1 -0
  213. package/dist/Components/Reorder/ReorderProps.d.ts +3 -0
  214. package/dist/Components/RolesPermission/RolesPermission.d.ts +1 -0
  215. package/dist/Components/RolesPermission/RolesPermission.js +5 -3
  216. package/dist/Components/RolesPermission/RolesPermissionProps.d.ts +16 -1
  217. package/dist/Components/ScrollToTop/ScrollToTop.d.ts +3 -2
  218. package/dist/Components/ScrollToTop/ScrollToTop.js +4 -1
  219. package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +7 -0
  220. package/dist/Components/ScrollbarBox/ScrollbarBox.js +1 -0
  221. package/dist/Components/Search/Search.d.ts +1 -0
  222. package/dist/Components/Search/Search.js +3 -2
  223. package/dist/Components/Search/SearchProps.d.ts +2 -0
  224. package/dist/Components/SearchSelect/SearchSelect.d.ts +1 -0
  225. package/dist/Components/SearchSelect/SearchSelect.js +48 -37
  226. package/dist/Components/SearchSelect/SearchSelectProps.d.ts +23 -0
  227. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +3 -0
  228. package/dist/Components/SegmentedControl/SegmentedControl.js +89 -0
  229. package/dist/Components/SegmentedControl/SegmentedControlProps.d.ts +23 -0
  230. package/dist/Components/SegmentedControl/SegmentedControlProps.js +2 -0
  231. package/dist/Components/Select/Select.d.ts +1 -1
  232. package/dist/Components/Select/Select.js +4 -2
  233. package/dist/Components/Select/Select.styles.js +3 -2
  234. package/dist/Components/Select/SelectProps.d.ts +6 -0
  235. package/dist/Components/SelectSearch/SelectSearch.d.ts +1 -0
  236. package/dist/Components/SelectSearch/SelectSearch.js +37 -15
  237. package/dist/Components/SelectSearch/SelectSearchProps.d.ts +5 -0
  238. package/dist/Components/SelectV2/SelectV2.d.ts +1 -0
  239. package/dist/Components/SelectV2/SelectV2.js +20 -5
  240. package/dist/Components/SelectV2/SelectV2Props.d.ts +6 -1
  241. package/dist/Components/SideBar/SecondaryBar.js +1 -1
  242. package/dist/Components/SideBar/SideBar.js +5 -3
  243. package/dist/Components/SideBar/SideBarProps.d.ts +38 -24
  244. package/dist/Components/SideBar/components/MenuItemBox.js +15 -11
  245. package/dist/Components/SideBar/components/MenuPopoverContent.js +13 -10
  246. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +3 -0
  247. package/dist/Components/Skeletons/SkeletonProps.d.ts +2 -0
  248. package/dist/Components/Skeletons/Skeletons.d.ts +1 -0
  249. package/dist/Components/Skeletons/Skeletons.js +1 -0
  250. package/dist/Components/Slider/Slider.d.ts +3 -0
  251. package/dist/Components/Slider/Slider.js +9 -1
  252. package/dist/Components/StageProgress/StageItem.d.ts +1 -0
  253. package/dist/Components/StageProgress/StageItem.js +1 -0
  254. package/dist/Components/StageProgress/StageProgress.d.ts +1 -0
  255. package/dist/Components/StageProgress/StageProgress.js +1 -0
  256. package/dist/Components/StageProgress/StageProgressProps.d.ts +45 -4
  257. package/dist/Components/StageProgress/StageProgressProps.js +6 -4
  258. package/dist/Components/StageProgress/StepperStage.js +2 -2
  259. package/dist/Components/Switch/Switch.d.ts +1 -0
  260. package/dist/Components/Switch/Switch.js +1 -0
  261. package/dist/Components/Switch/SwitchProps.d.ts +1 -0
  262. package/dist/Components/Table/Table.d.ts +2 -1
  263. package/dist/Components/Table/Table.js +15 -5
  264. package/dist/Components/Table/TableProps.d.ts +47 -0
  265. package/dist/Components/Table/components/Pagination.js +1 -1
  266. package/dist/Components/Table/components/TableActions.js +2 -2
  267. package/dist/Components/Table/components/TableBody.js +44 -18
  268. package/dist/Components/Table/components/TableGroupRow.js +1 -1
  269. package/dist/Components/Table/components/TableHeader.js +21 -8
  270. package/dist/Components/Table/components/TableSearch.js +1 -1
  271. package/dist/Components/Table/filters/CompactSelect.d.ts +1 -0
  272. package/dist/Components/Table/filters/CompactSelect.js +29 -8
  273. package/dist/Components/Table/filters/LeftFilterPane.d.ts +9 -1
  274. package/dist/Components/Table/filters/LeftFilterPane.js +1 -1
  275. package/dist/Components/Table/settings/ManageColumns.js +8 -5
  276. package/dist/Components/Table/settings/TableSettings.js +6 -4
  277. package/dist/Components/Table/variants/TableVariantContext.d.ts +4 -0
  278. package/dist/Components/Table/variants/TableVariantContext.js +17 -0
  279. package/dist/Components/Table/variants/classic.d.ts +6 -0
  280. package/dist/Components/Table/variants/classic.js +47 -0
  281. package/dist/Components/Table/variants/index.d.ts +7 -0
  282. package/dist/Components/Table/variants/index.js +27 -0
  283. package/dist/Components/Table/variants/pillInk.d.ts +6 -0
  284. package/dist/Components/Table/variants/pillInk.js +21 -0
  285. package/dist/Components/Table/variants/studio.d.ts +6 -0
  286. package/dist/Components/Table/variants/studio.js +50 -0
  287. package/dist/Components/Table/variants/tokens.d.ts +49 -0
  288. package/dist/Components/Table/variants/tokens.js +2 -0
  289. package/dist/Components/Tag/Tag.d.ts +1 -0
  290. package/dist/Components/Tag/Tag.js +1 -0
  291. package/dist/Components/Tag/Tag.styles.js +16 -11
  292. package/dist/Components/Tag/TagProps.d.ts +7 -0
  293. package/dist/Components/Timeline/Timeline.d.ts +1 -0
  294. package/dist/Components/Timeline/Timeline.js +1 -0
  295. package/dist/Components/Timeline/TimelineProps.d.ts +8 -0
  296. package/dist/Components/Toaster/Toaster.d.ts +1 -0
  297. package/dist/Components/Toaster/Toaster.js +1 -0
  298. package/dist/Components/Toaster/ToasterProps.d.ts +3 -0
  299. package/dist/Components/Toggle/TableToggle.d.ts +1 -0
  300. package/dist/Components/Toggle/TableToggle.js +73 -18
  301. package/dist/Components/Toggle/TableToggleProps.d.ts +6 -0
  302. package/dist/Components/ToggleSwitch/ToggleSwitch.d.ts +3 -0
  303. package/dist/Components/ToggleSwitch/ToggleSwitch.js +19 -0
  304. package/dist/Components/ToggleSwitch/ToggleSwitchProps.d.ts +13 -0
  305. package/dist/Components/ToggleSwitch/ToggleSwitchProps.js +2 -0
  306. package/dist/Components/ToolTip/ToolTip.d.ts +1 -0
  307. package/dist/Components/ToolTip/ToolTip.js +7 -6
  308. package/dist/Components/ToolTip/ToolTipProps.d.ts +5 -1
  309. package/dist/Components/Trail/EditableCell.d.ts +2 -0
  310. package/dist/Components/Trail/EditableCell.js +2 -1
  311. package/dist/Components/Trail/SelectAllCheckbox.d.ts +1 -0
  312. package/dist/Components/Trail/SelectAllCheckbox.js +1 -0
  313. package/dist/Components/Trail/TrailWorks.d.ts +1 -0
  314. package/dist/Components/Trail/TrailWorks.js +2 -1
  315. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +6 -2
  316. package/dist/Components/UserDetails/DeactivateConfirmModal.js +1 -1
  317. package/dist/Components/UserDetails/UserDetails.d.ts +1 -0
  318. package/dist/Components/UserDetails/UserDetails.js +6 -3
  319. package/dist/Components/UserDetails/UserDetailsProps.d.ts +30 -1
  320. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +6 -1
  321. package/dist/Hooks/exclusiveOverlay.d.ts +4 -0
  322. package/dist/Hooks/exclusiveOverlay.js +22 -0
  323. package/dist/Hooks/useExclusiveOverlay.d.ts +5 -0
  324. package/dist/Hooks/useExclusiveOverlay.js +24 -0
  325. package/dist/Theme/assertPalette.d.ts +1 -1
  326. package/dist/Theme/assertPalette.js +3 -2
  327. package/dist/Theme/chakra/Menu.styles.d.ts +2 -0
  328. package/dist/Theme/chakra/Menu.styles.js +9 -5
  329. package/dist/Theme/chakra/Popover.styles.d.ts +3 -0
  330. package/dist/Theme/chakra/Popover.styles.js +5 -1
  331. package/dist/Theme/chakra/componentStyles.d.ts +5 -0
  332. package/dist/Theme/chakra/componentStyles.js +16 -9
  333. package/dist/Theme/chakra/createBrandTheme.js +22 -9
  334. package/dist/Theme/chakra/focusRing.styles.d.ts +52 -0
  335. package/dist/Theme/chakra/focusRing.styles.js +46 -0
  336. package/dist/Theme/provider/ThemeSwitcher.js +5 -2
  337. package/dist/Theme/tokens/brands/index.js +6 -1
  338. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +1 -0
  339. package/dist/Theme/tokens/builders/buildDarkPalette.js +6 -1
  340. package/dist/Theme/tokens/builders/chartColorsFromTheme.js +1 -1
  341. package/dist/Theme/tokens/builders/filledSurface.d.ts +29 -0
  342. package/dist/Theme/tokens/builders/filledSurface.js +74 -0
  343. package/dist/Theme/tokens/builders/focusRing.d.ts +52 -0
  344. package/dist/Theme/tokens/builders/focusRing.js +92 -0
  345. package/dist/Theme/tokens/builders/index.d.ts +2 -0
  346. package/dist/Theme/tokens/builders/index.js +2 -0
  347. package/dist/Theme/tokens/builders/outlineRung.d.ts +41 -3
  348. package/dist/Theme/tokens/builders/outlineRung.js +82 -5
  349. package/dist/Theme/tokens/builders/placeholderInk.d.ts +19 -0
  350. package/dist/Theme/tokens/builders/placeholderInk.js +35 -0
  351. package/dist/Theme/tokens/builders/resolvedRungs.d.ts +5 -1
  352. package/dist/Theme/tokens/builders/resolvedRungs.js +7 -2
  353. package/dist/Theme/tokens/builders/rowStates.d.ts +13 -0
  354. package/dist/Theme/tokens/builders/rowStates.js +19 -0
  355. package/dist/Theme/tokens/builders/scrollShadow.d.ts +2 -0
  356. package/dist/Theme/tokens/builders/scrollShadow.js +16 -0
  357. package/dist/Theme/tokens/builders/surfaceRungs.d.ts +5 -2
  358. package/dist/Theme/tokens/builders/surfaceRungs.js +19 -9
  359. package/dist/Theme/tokens/types.d.ts +21 -1
  360. package/dist/Utils/table.d.ts +3 -0
  361. package/dist/Utils/table.js +49 -3
  362. package/dist/esm/Components/Accordion/Accordion.js +4 -1
  363. package/dist/esm/Components/AlertDialog/AlertDialog.js +1 -0
  364. package/dist/esm/Components/Apexcharts/ApexAreaChart/ApexAreaChart.js +1 -0
  365. package/dist/esm/Components/Apexcharts/ApexBarChart/ApexBarChart.js +1 -0
  366. package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -0
  367. package/dist/esm/Components/Apexcharts/ApexPieChart/ApexPieChart.js +1 -0
  368. package/dist/esm/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.js +1 -0
  369. package/dist/esm/Components/Apexcharts/ApexRadialChart/ApexRadialChart.js +1 -0
  370. package/dist/esm/Components/AppSwitcher/AppMark.js +56 -0
  371. package/dist/esm/Components/AppSwitcher/AppSwitcher.js +243 -0
  372. package/dist/esm/Components/AppSwitcher/AppSwitcherProps.js +78 -0
  373. package/dist/esm/Components/AppSwitcher/useAppSwitcherShortcut.js +27 -0
  374. package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +2 -1
  375. package/dist/esm/Components/Button/Button.js +5 -4
  376. package/dist/esm/Components/Button/Button.styles.js +38 -24
  377. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +2 -4
  378. package/dist/esm/Components/Card/Card.js +2 -2
  379. package/dist/esm/Components/Card/PaymentCard/PaymentCard.js +21 -12
  380. package/dist/esm/Components/Checkbox/Checkbox.js +2 -1
  381. package/dist/esm/Components/Checkbox/Checkbox.styles.js +13 -8
  382. package/dist/esm/Components/Common/ErrorComponent.js +7 -5
  383. package/dist/esm/Components/Common/ErrorMessage.js +2 -2
  384. package/dist/esm/Components/Common/FormLabel.js +1 -0
  385. package/dist/esm/Components/Common/FormattedDescription.js +1 -0
  386. package/dist/esm/Components/Common/HelperText.js +2 -0
  387. package/dist/esm/Components/Common/Label.js +1 -0
  388. package/dist/esm/Components/Common/fieldStyles.js +1 -1
  389. package/dist/esm/Components/ContactForm/ContactForm.js +1 -0
  390. package/dist/esm/Components/CopyButton/CopyButton.js +10 -4
  391. package/dist/esm/Components/DatePicker/CalendarPanel.js +38 -16
  392. package/dist/esm/Components/DatePicker/DatePicker.js +1 -0
  393. package/dist/esm/Components/DatePicker/RangeDatePicker.js +31 -6
  394. package/dist/esm/Components/DatePicker/SingleDatePicker.js +50 -15
  395. package/dist/esm/Components/DatePicker/ThemeDatePicker.js +1 -0
  396. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +11 -2
  397. package/dist/esm/Components/DatePicker/TimePicker.js +4 -3
  398. package/dist/esm/Components/DatePicker/TimePickerInput.js +2 -1
  399. package/dist/esm/Components/DatePicker/dayStates.js +79 -0
  400. package/dist/esm/Components/Divider/Divider.js +1 -0
  401. package/dist/esm/Components/Dropdown/DropDown.js +23 -7
  402. package/dist/esm/Components/Editor/Editor.js +1 -0
  403. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +2 -5
  404. package/dist/esm/Components/EmptyState/EmptyState.js +4 -2
  405. package/dist/esm/Components/FeedbackForm/FeedbackForm.js +1 -0
  406. package/dist/esm/Components/FieldSelectModal/FieldSelectModal.js +1 -0
  407. package/dist/esm/Components/FilePreview/FilePreview.js +3 -1
  408. package/dist/esm/Components/FileUpload/FileUpload.js +8 -6
  409. package/dist/esm/Components/FileUpload/constants.js +1 -0
  410. package/dist/esm/Components/FileUploader/FileUploader.js +1 -0
  411. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +5 -5
  412. package/dist/esm/Components/FilterSidebar/filterHoverStyle.js +3 -10
  413. package/dist/esm/Components/Form/FormWrapper.js +2 -1
  414. package/dist/esm/Components/Header/components/mobileMenu.js +12 -3
  415. package/dist/esm/Components/Input/PhoneNumberInput.js +1 -0
  416. package/dist/esm/Components/Input/Switch/InputSwitch.js +1 -0
  417. package/dist/esm/Components/Input/TextInput.js +1 -0
  418. package/dist/esm/Components/Input/TextInput.styles.js +8 -10
  419. package/dist/esm/Components/InputTextArea/InputTextArea.js +1 -0
  420. package/dist/esm/Components/InputTextArea/InputTextArea.style.js +7 -6
  421. package/dist/esm/Components/KanbanBoard/AccountCard.js +1 -0
  422. package/dist/esm/Components/KanbanBoard/AccountRow.js +1 -0
  423. package/dist/esm/Components/KanbanBoard/KanbanActions/KanbanActions.js +2 -2
  424. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +1 -0
  425. package/dist/esm/Components/KanbanBoard/MeasuredItem.js +1 -0
  426. package/dist/esm/Components/LazyWrapper/LazyWrapper.js +1 -0
  427. package/dist/esm/Components/LimitReachedModal/limitReachedCopy.js +2 -0
  428. package/dist/esm/Components/Loading/Loading.js +13 -11
  429. package/dist/esm/Components/MoreItems/MoreItems.js +4 -1
  430. package/dist/esm/Components/MultiSelect/MultiSelect.js +2 -2
  431. package/dist/esm/Components/NavigationBar/NavigationBar.js +9 -10
  432. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +10 -4
  433. package/dist/esm/Components/Notification/Notification.js +1 -0
  434. package/dist/esm/Components/NumberInput/NumberInput.js +5 -2
  435. package/dist/esm/Components/NumberInput/NumberInput.styles.js +7 -6
  436. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +14 -10
  437. package/dist/esm/Components/OrgSwitcher/OrgSwitcherProps.js +1 -0
  438. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +5 -3
  439. package/dist/esm/Components/PdfViewer/PdfViewer.js +7 -1
  440. package/dist/esm/Components/PinInput/PinInput.js +1 -0
  441. package/dist/esm/Components/PinInputs/PinInputs.js +1 -0
  442. package/dist/esm/Components/Primitives/Primitives.js +6 -0
  443. package/dist/esm/Components/ProductCard/ProductReview.js +6 -1
  444. package/dist/esm/Components/ProductCard/ProductTags.js +1 -1
  445. package/dist/esm/Components/ProfileCard/ProfileCard.js +1 -1
  446. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +6 -4
  447. package/dist/esm/Components/ProgressBar/ProgressBar.js +1 -0
  448. package/dist/esm/Components/RadioButton/RadioButton.js +3 -2
  449. package/dist/esm/Components/Reorder/Reorder.js +1 -0
  450. package/dist/esm/Components/RolesPermission/RolesPermission.js +5 -3
  451. package/dist/esm/Components/ScrollToTop/ScrollToTop.js +4 -1
  452. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +1 -0
  453. package/dist/esm/Components/Search/Search.js +3 -2
  454. package/dist/esm/Components/SearchSelect/SearchSelect.js +48 -37
  455. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +86 -0
  456. package/dist/esm/Components/SegmentedControl/SegmentedControlProps.js +1 -0
  457. package/dist/esm/Components/Select/Select.js +5 -3
  458. package/dist/esm/Components/Select/Select.styles.js +3 -2
  459. package/dist/esm/Components/SelectSearch/SelectSearch.js +37 -15
  460. package/dist/esm/Components/SelectV2/SelectV2.js +20 -5
  461. package/dist/esm/Components/SideBar/SecondaryBar.js +1 -1
  462. package/dist/esm/Components/SideBar/SideBar.js +5 -3
  463. package/dist/esm/Components/SideBar/components/MenuItemBox.js +15 -11
  464. package/dist/esm/Components/SideBar/components/MenuPopoverContent.js +13 -10
  465. package/dist/esm/Components/Skeletons/Skeletons.js +1 -0
  466. package/dist/esm/Components/Slider/Slider.js +9 -1
  467. package/dist/esm/Components/StageProgress/StageItem.js +1 -0
  468. package/dist/esm/Components/StageProgress/StageProgress.js +1 -0
  469. package/dist/esm/Components/StageProgress/StageProgressProps.js +7 -5
  470. package/dist/esm/Components/StageProgress/StepperStage.js +2 -2
  471. package/dist/esm/Components/Switch/Switch.js +1 -0
  472. package/dist/esm/Components/Table/Table.js +15 -5
  473. package/dist/esm/Components/Table/components/Pagination.js +1 -1
  474. package/dist/esm/Components/Table/components/TableActions.js +2 -2
  475. package/dist/esm/Components/Table/components/TableBody.js +44 -18
  476. package/dist/esm/Components/Table/components/TableGroupRow.js +1 -1
  477. package/dist/esm/Components/Table/components/TableHeader.js +21 -8
  478. package/dist/esm/Components/Table/components/TableSearch.js +1 -1
  479. package/dist/esm/Components/Table/filters/CompactSelect.js +29 -8
  480. package/dist/esm/Components/Table/filters/LeftFilterPane.js +1 -1
  481. package/dist/esm/Components/Table/settings/ManageColumns.js +8 -5
  482. package/dist/esm/Components/Table/settings/TableSettings.js +7 -5
  483. package/dist/esm/Components/Table/variants/TableVariantContext.js +13 -0
  484. package/dist/esm/Components/Table/variants/classic.js +43 -0
  485. package/dist/esm/Components/Table/variants/index.js +9 -0
  486. package/dist/esm/Components/Table/variants/pillInk.js +18 -0
  487. package/dist/esm/Components/Table/variants/studio.js +46 -0
  488. package/dist/esm/Components/Table/variants/tokens.js +1 -0
  489. package/dist/esm/Components/Tag/Tag.js +1 -0
  490. package/dist/esm/Components/Tag/Tag.styles.js +17 -12
  491. package/dist/esm/Components/Timeline/Timeline.js +1 -0
  492. package/dist/esm/Components/Toaster/Toaster.js +1 -0
  493. package/dist/esm/Components/Toggle/TableToggle.js +72 -17
  494. package/dist/esm/Components/ToggleSwitch/ToggleSwitch.js +16 -0
  495. package/dist/esm/Components/ToggleSwitch/ToggleSwitchProps.js +1 -0
  496. package/dist/esm/Components/ToolTip/ToolTip.js +7 -6
  497. package/dist/esm/Components/Trail/EditableCell.js +2 -1
  498. package/dist/esm/Components/Trail/SelectAllCheckbox.js +1 -0
  499. package/dist/esm/Components/Trail/TrailWorks.js +2 -1
  500. package/dist/esm/Components/UserDetails/DeactivateConfirmModal.js +1 -1
  501. package/dist/esm/Components/UserDetails/UserDetails.js +6 -3
  502. package/dist/esm/Hooks/exclusiveOverlay.js +16 -0
  503. package/dist/esm/Hooks/useExclusiveOverlay.js +20 -0
  504. package/dist/esm/Theme/assertPalette.js +3 -2
  505. package/dist/esm/Theme/chakra/Menu.styles.js +9 -5
  506. package/dist/esm/Theme/chakra/Popover.styles.js +5 -1
  507. package/dist/esm/Theme/chakra/componentStyles.js +16 -9
  508. package/dist/esm/Theme/chakra/createBrandTheme.js +22 -9
  509. package/dist/esm/Theme/chakra/focusRing.styles.js +40 -0
  510. package/dist/esm/Theme/provider/ThemeSwitcher.js +5 -2
  511. package/dist/esm/Theme/tokens/brands/index.js +6 -1
  512. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +6 -1
  513. package/dist/esm/Theme/tokens/builders/chartColorsFromTheme.js +1 -1
  514. package/dist/esm/Theme/tokens/builders/filledSurface.js +67 -0
  515. package/dist/esm/Theme/tokens/builders/focusRing.js +85 -0
  516. package/dist/esm/Theme/tokens/builders/index.js +2 -0
  517. package/dist/esm/Theme/tokens/builders/outlineRung.js +78 -4
  518. package/dist/esm/Theme/tokens/builders/placeholderInk.js +29 -0
  519. package/dist/esm/Theme/tokens/builders/resolvedRungs.js +7 -2
  520. package/dist/esm/Theme/tokens/builders/rowStates.js +15 -0
  521. package/dist/esm/Theme/tokens/builders/scrollShadow.js +13 -0
  522. package/dist/esm/Theme/tokens/builders/surfaceRungs.js +20 -10
  523. package/dist/esm/Utils/table.js +50 -5
  524. package/dist/esm/index.js +26 -1
  525. package/dist/index.d.ts +26 -3
  526. package/dist/index.js +67 -4
  527. package/package.json +11 -4
@@ -26,7 +26,10 @@ const toBrandLabel = (brand) => brand.charAt(0).toUpperCase() + brand.slice(1);
26
26
  * regardless of which brand/mode is currently active.
27
27
  */
28
28
  const brandSwatchColor = (brand) => index_1.brandThemes[brand].light.colors.primary[500];
29
- const BrandSwatch = ({ brand }) => ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-block", w: "0.625rem", h: "0.625rem", borderRadius: "full", bg: brandSwatchColor(brand), border: "1px solid", borderColor: "whiteAlpha.300", flexShrink: 0 }));
29
+ const BrandSwatch = ({ brand }) => {
30
+ const { colors } = (0, useCustomTheme_1.useCustomTheme)();
31
+ return ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-block", w: "0.625rem", h: "0.625rem", borderRadius: "full", bg: brandSwatchColor(brand), border: "1px solid", borderColor: colors.boxborder[200], flexShrink: 0 }));
32
+ };
30
33
  /**
31
34
  * Palette values already differ per color mode (`brandThemes[brand].light|dark`), so tokens
32
35
  * are read straight from the active theme — no `useColorModeValue` pairing needed here.
@@ -39,7 +42,7 @@ const useSwitcherColors = () => {
39
42
  activeColor: colors.primary[500],
40
43
  mutedColor: colors.text[600],
41
44
  hoverBg: colors.gray[100],
42
- borderColor: colors.border[200],
45
+ borderColor: colors.boxborder[200],
43
46
  // NOTE: menuBg lives in Menu.styles.ts — re-pushing it via `sx` flickers on every render.
44
47
  menuColor: colors.text[900],
45
48
  };
@@ -46,6 +46,7 @@ const sidebarAccent_1 = require("../builders/sidebarAccent");
46
46
  const mutedText_1 = require("../builders/mutedText");
47
47
  const semanticText_1 = require("../builders/semanticText");
48
48
  const resolvedRungs_1 = require("../builders/resolvedRungs");
49
+ const focusRing_1 = require("../builders/focusRing");
49
50
  const surfaceRungs_1 = require("../builders/surfaceRungs");
50
51
  /** Derived, never hand-written: a copied hex goes stale the moment a canvas moves. */
51
52
  const finalizeLightPalette = (source) => ({
@@ -56,9 +57,13 @@ const finalizeLightPalette = (source) => ({
56
57
  semanticText: (0, semanticText_1.buildSemanticText)(source.semantic, source.backgroundColor.main),
57
58
  onPrimary: (0, accentText_1.onFilled)(source.primary[500], source.white, source.black),
58
59
  onSemantic: (0, semanticText_1.buildOnSemantic)(source.semantic, source.white, source.black),
60
+ focusRing: (0, focusRing_1.buildFocusRing)(source),
59
61
  });
60
62
  exports.finalizeLightPalette = finalizeLightPalette;
61
- const resolveRungs = (palette) => (0, surfaceRungs_1.withSurfaceRungs)((0, resolvedRungs_1.withTableHoverRung)((0, resolvedRungs_1.withPlaceholderRung)((0, outlineRung_1.withOutlineRung)(palette))));
63
+ // `withFocusRing` is outermost: it is the only step that reads `primary` and the surfaces
64
+ // TOGETHER, so it must see both after every earlier step — and after a brand file's own
65
+ // post-derivation overrides (zinc dark replaces `primary` and `background` wholesale).
66
+ const resolveRungs = (palette) => (0, focusRing_1.withFocusRing)((0, surfaceRungs_1.withSurfaceRungs)((0, resolvedRungs_1.withTableHoverRung)((0, resolvedRungs_1.withPlaceholderRung)((0, outlineRung_1.withOutlineRung)(palette)))));
62
67
  const lightBrand = (source) => resolveRungs((0, exports.finalizeLightPalette)(source));
63
68
  /** Light palette per brand. `lavender` is the base the other six extend. */
64
69
  exports.lightPalettes = {
@@ -197,6 +197,7 @@ declare const palette: {
197
197
  purple: import("../..").ColorScale;
198
198
  pink: import("../..").ColorScale;
199
199
  backgroundColor: import("../..").NamedSurfaces;
200
+ focusRing: import("../..").FocusRingTokens;
200
201
  sidebar: import("../..").SidebarTokens;
201
202
  semanticText: import("../..").SemanticTextTokens;
202
203
  textMuted: string;
@@ -8,6 +8,7 @@ const accentText_1 = require("./accentText");
8
8
  const sidebarAccent_1 = require("./sidebarAccent");
9
9
  const mutedText_1 = require("./mutedText");
10
10
  const semanticText_1 = require("./semanticText");
11
+ const focusRing_1 = require("./focusRing");
11
12
  /**
12
13
  * Derives a brand's dark palette from its light palette.
13
14
  *
@@ -246,6 +247,7 @@ function buildDarkPalette(light) {
246
247
  ]));
247
248
  const white = light.white;
248
249
  const primary = liftBrand(light.primary, white);
250
+ const background = fromTargets(hueSource, SURFACE_TARGETS, SURFACE_SAT);
249
251
  const semantic = {
250
252
  success: liftAccent(light.semantic.success, white),
251
253
  error: liftAccent(light.semantic.error, white),
@@ -276,7 +278,7 @@ function buildDarkPalette(light) {
276
278
  purple: (0, exports.reverseScale)(light.purple),
277
279
  pink: (0, exports.reverseScale)(light.pink),
278
280
  backgroundColor: namedSurfaces,
279
- background: fromTargets(hueSource, SURFACE_TARGETS, SURFACE_SAT),
281
+ background,
280
282
  text: fromTargets(hueSource, TEXT_TARGETS, TEXT_SAT),
281
283
  header: fromTargets(hueSource, TEXT_TARGETS, TEXT_SAT + 2),
282
284
  placeholder: fromTargets(hueSource, PLACEHOLDER_TARGETS, PLACEHOLDER_SAT),
@@ -293,6 +295,9 @@ function buildDarkPalette(light) {
293
295
  semanticText: (0, semanticText_1.buildSemanticText)(semantic, namedSurfaces.main),
294
296
  onPrimary: (0, accentText_1.onFilled)(primary[500], light.white, light.black),
295
297
  onSemantic: (0, semanticText_1.buildOnSemantic)(semantic, light.white, light.black),
298
+ // The dark ring is derived from the LIFTED accent against the dark canvas, not copied from
299
+ // light: the two modes squeeze it from opposite sides, so a shared value fails one of them.
300
+ focusRing: (0, focusRing_1.buildFocusRing)({ primary, background, backgroundColor: namedSurfaces }),
296
301
  // Sidebar is already near-black in light mode, so it needs no inversion.
297
302
  sidebar: (0, sidebarAccent_1.withSidebarTokens)(light),
298
303
  boxShadow: {
@@ -34,7 +34,7 @@ function chartInk(colors) {
34
34
  surface,
35
35
  text: colors.text[900],
36
36
  muted: colors.text[500],
37
- grid: colors.border[500],
37
+ grid: colors.boxborder[200],
38
38
  axis: colors.text[500],
39
39
  tooltipBg: colors.backgroundColor.secondary,
40
40
  };
@@ -0,0 +1,29 @@
1
+ import type { ColorScale, PaletteProps } from "../types";
2
+ /** Resolved fill + ink for a solid surface, including hover/active steps. */
3
+ export type FilledSurface = {
4
+ rung: keyof ColorScale;
5
+ fill: string;
6
+ color: string;
7
+ hoverRung: keyof ColorScale;
8
+ hoverFill: string;
9
+ hoverColor: string;
10
+ activeRung: keyof ColorScale;
11
+ activeFill: string;
12
+ activeColor: string;
13
+ };
14
+ /**
15
+ * Lightest rung on `scale` that still carries `white` at WCAG AA. Prefers [500] when it already
16
+ * passes; otherwise walks toward darker rungs. Used for solid fills on buttons, tags, badges and
17
+ * table status pills so consumers never get black ink on a saturated fill when white is achievable.
18
+ */
19
+ export declare const solidFillRung: (scale: ColorScale, white: string) => keyof ColorScale;
20
+ /** Hover (step 0) or active (step 1) fill rung, one step darker than `solidFillRung`. */
21
+ export declare const darkerFillRung: (scale: ColorScale, canvas: string, white: string, step: 0 | 1) => keyof ColorScale;
22
+ /** Label ink for a specific fill swatch — always `onFilled`, exported for style configs. */
23
+ export declare const labelOnFill: (fill: string, white: string, black: string) => string;
24
+ /**
25
+ * Consumer-facing helper: given any `ColorScale` (primary, red, semantic.error, …), return the
26
+ * fill rung and matching ink for solid / hover / active states. Use this whenever you paint a
27
+ * `bg` from a scale — never pair `scale[500]` with `onFilled` or `colors.white` by hand.
28
+ */
29
+ export declare const resolveFilledSurface: (scale: ColorScale, colors: Pick<PaletteProps, "white" | "black" | "backgroundColor">) => FilledSurface;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveFilledSurface = exports.labelOnFill = exports.darkerFillRung = exports.solidFillRung = void 0;
4
+ const color_1 = require("./color");
5
+ const accentText_1 = require("./accentText");
6
+ const RUNGS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900];
7
+ /**
8
+ * The rung one/two steps DARKER than the accent — what a filled button's hover/active needs so its
9
+ * white label stays legible.
10
+ *
11
+ * Every dark scale runs dark -> light across 50 -> 900 (brand scales are rebuilt that way, utility
12
+ * hues are reversed), the mirror of light mode. So "darker than [500]" is [600]/[700] in light but
13
+ * [400]/[300] in dark.
14
+ */
15
+ const FILL_STEP_RUNGS = { light: [600, 700], dark: [400, 300] };
16
+ /**
17
+ * Lightest rung on `scale` that still carries `white` at WCAG AA. Prefers [500] when it already
18
+ * passes; otherwise walks toward darker rungs. Used for solid fills on buttons, tags, badges and
19
+ * table status pills so consumers never get black ink on a saturated fill when white is achievable.
20
+ */
21
+ const solidFillRung = (scale, white) => {
22
+ if ((0, color_1.contrastRatio)(scale[500], white) >= accentText_1.AA_NORMAL_TEXT)
23
+ return 500;
24
+ const passing = RUNGS.filter((r) => scale[r] && (0, color_1.contrastRatio)(scale[r], white) >= accentText_1.AA_NORMAL_TEXT);
25
+ if (!passing.length)
26
+ return 500;
27
+ return passing.reduce((a, b) => (0, color_1.contrastRatio)(scale[a], white) <= (0, color_1.contrastRatio)(scale[b], white) ? a : b);
28
+ };
29
+ exports.solidFillRung = solidFillRung;
30
+ const steppedRung = (base, canvas, step) => {
31
+ const dir = (0, accentText_1.isDarkCanvas)(canvas) ? -100 : 100;
32
+ return Math.min(900, Math.max(50, base + dir * step));
33
+ };
34
+ /** Hover (step 0) or active (step 1) fill rung, one step darker than `solidFillRung`. */
35
+ const darkerFillRung = (scale, canvas, white, step) => {
36
+ const base = (0, exports.solidFillRung)(scale, white);
37
+ if (base === 500) {
38
+ const mode = (0, accentText_1.isDarkCanvas)(canvas) ? "dark" : "light";
39
+ return FILL_STEP_RUNGS[mode][step];
40
+ }
41
+ const stepped = steppedRung(base, canvas, step === 0 ? 1 : 2);
42
+ return stepped;
43
+ };
44
+ exports.darkerFillRung = darkerFillRung;
45
+ /** Label ink for a specific fill swatch — always `onFilled`, exported for style configs. */
46
+ const labelOnFill = (fill, white, black) => (0, accentText_1.onFilled)(fill, white, black);
47
+ exports.labelOnFill = labelOnFill;
48
+ /**
49
+ * Consumer-facing helper: given any `ColorScale` (primary, red, semantic.error, …), return the
50
+ * fill rung and matching ink for solid / hover / active states. Use this whenever you paint a
51
+ * `bg` from a scale — never pair `scale[500]` with `onFilled` or `colors.white` by hand.
52
+ */
53
+ const resolveFilledSurface = (scale, colors) => {
54
+ const { white, black, backgroundColor } = colors;
55
+ const canvas = backgroundColor.main;
56
+ const rung = (0, exports.solidFillRung)(scale, white);
57
+ const fill = scale[rung];
58
+ const hoverRung = (0, exports.darkerFillRung)(scale, canvas, white, 0);
59
+ const hoverFill = scale[hoverRung];
60
+ const activeRung = (0, exports.darkerFillRung)(scale, canvas, white, 1);
61
+ const activeFill = scale[activeRung];
62
+ return {
63
+ rung,
64
+ fill,
65
+ color: (0, exports.labelOnFill)(fill, white, black),
66
+ hoverRung,
67
+ hoverFill,
68
+ hoverColor: (0, exports.labelOnFill)(hoverFill, white, black),
69
+ activeRung,
70
+ activeFill,
71
+ activeColor: (0, exports.labelOnFill)(activeFill, white, black),
72
+ };
73
+ };
74
+ exports.resolveFilledSurface = resolveFilledSurface;
@@ -0,0 +1,52 @@
1
+ import type { FocusRingTokens, PaletteProps } from "../types";
2
+ /**
3
+ * The nearest re-lighting of `hex` that clears `target` against EVERY backdrop at once.
4
+ *
5
+ * Not `settleAcross`: that folds one `liftToContrast` per surface, and each lift walks AWAY from
6
+ * the surface it was handed. That is correct when every backdrop sits on the same side of the ink
7
+ * (its case — a set of light surfaces, or a set of dark ones), and wrong here, where a focus ring
8
+ * is squeezed BETWEEN a near-white canvas and a mid-dark button fill: the lift against the fill
9
+ * walks straight back across the canvas it had just cleared. Seeding `settleAcross` with
10
+ * `primary[500]` measured 1.08-1.99 on the light canvas for every brand for exactly that reason.
11
+ *
12
+ * Walking outward from the seed and testing every backdrop at each step keeps the result the
13
+ * CLOSEST passing colour to the brand accent, so the ring still reads as brand chrome. Contrast is
14
+ * a function of relative luminance alone, and lightness sweeps luminance monotonically from 0 to 1,
15
+ * so if any colour on this hue clears the set, this finds it.
16
+ */
17
+ export declare function settleBetween(hex: string, backdrops: readonly string[], target?: number): string;
18
+ /** Everything the ring is derived from. A `PaletteProps` satisfies it; so does a brand source. */
19
+ export type FocusRingSource = Pick<PaletteProps, "primary" | "background" | "backgroundColor">;
20
+ /**
21
+ * The three backdrops a focused button's ring is actually drawn against: the page canvas, a card
22
+ * surface, and — because a solid button's ring sits directly against its own fill — `primary[500]`.
23
+ *
24
+ * Deliberately NOT every named surface. `muted`/`accent`/`quaternary` are mid-tone, and a single
25
+ * band asked to clear those AND a dark brand fill has no solution at any hue — contrast is
26
+ * luminance alone, and `skyline`/`storefront` come out with an empty band. That is what the second
27
+ * tone is for: `halo` owns the fill-side adjacency instead.
28
+ */
29
+ export declare const focusRingBackdrops: (source: FocusRingSource) => string[];
30
+ /**
31
+ * The two-tone `:focus-visible` indicator.
32
+ *
33
+ * Chakra's stock ring (`shadows.outline`, a fixed `rgba(66,153,225,.6)`) measured 1.83:1 on the
34
+ * lavender canvas and 1.38:1 on a primary button — a focus indicator you cannot see, on all nine
35
+ * brands. It is one hardcoded blue, so no palette could have saved it.
36
+ *
37
+ * `halo` is the surface tone, drawn as the inner band so the indicator separates from a filled
38
+ * control whatever `colorScheme` painted it. `ring` is the brand accent, walked to the nearest
39
+ * lightness that clears 3:1 on all three backdrops at once — including the halo, so the two tones
40
+ * are always told apart.
41
+ */
42
+ export declare const buildFocusRing: (source: FocusRingSource) => FocusRingTokens;
43
+ /**
44
+ * Re-derives the ring from the FINISHED palette, as the last step of the rung chain.
45
+ *
46
+ * `finalizeLightPalette` and `buildDarkPalette` seed it, but neither is the final word: a brand
47
+ * file may replace `primary` or `background` after the generic derivation runs — `zinc`'s dark
48
+ * palette replaces both, inverting the filled button to near-white — and a ring resolved against
49
+ * the pre-override values is then silently wrong. Same reason `withSurfaceRungs` re-lifts inks the
50
+ * finalizers already derived. `focusRing.test.ts` asserts this is a fixed point.
51
+ */
52
+ export declare const withFocusRing: (palette: PaletteProps) => PaletteProps;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withFocusRing = exports.buildFocusRing = exports.focusRingBackdrops = void 0;
4
+ exports.settleBetween = settleBetween;
5
+ const color_1 = require("./color");
6
+ const outlineRung_1 = require("./outlineRung");
7
+ /** Same lightness granularity `buildDarkPalette` walks its accents at. */
8
+ const LIGHTNESS_STEP = 0.5;
9
+ /**
10
+ * The nearest re-lighting of `hex` that clears `target` against EVERY backdrop at once.
11
+ *
12
+ * Not `settleAcross`: that folds one `liftToContrast` per surface, and each lift walks AWAY from
13
+ * the surface it was handed. That is correct when every backdrop sits on the same side of the ink
14
+ * (its case — a set of light surfaces, or a set of dark ones), and wrong here, where a focus ring
15
+ * is squeezed BETWEEN a near-white canvas and a mid-dark button fill: the lift against the fill
16
+ * walks straight back across the canvas it had just cleared. Seeding `settleAcross` with
17
+ * `primary[500]` measured 1.08-1.99 on the light canvas for every brand for exactly that reason.
18
+ *
19
+ * Walking outward from the seed and testing every backdrop at each step keeps the result the
20
+ * CLOSEST passing colour to the brand accent, so the ring still reads as brand chrome. Contrast is
21
+ * a function of relative luminance alone, and lightness sweeps luminance monotonically from 0 to 1,
22
+ * so if any colour on this hue clears the set, this finds it.
23
+ */
24
+ function settleBetween(hex, backdrops, target = outlineRung_1.AA_NON_TEXT) {
25
+ const clears = (candidate) => backdrops.every((backdrop) => (0, color_1.contrastRatio)(candidate, backdrop) >= target);
26
+ if (clears(hex))
27
+ return hex;
28
+ const { l } = (0, color_1.hexToHsl)(hex);
29
+ for (let step = LIGHTNESS_STEP; step <= 100; step += LIGHTNESS_STEP) {
30
+ const darker = (0, color_1.withLightness)(hex, l - step);
31
+ if (clears(darker))
32
+ return darker;
33
+ const lighter = (0, color_1.withLightness)(hex, l + step);
34
+ if (clears(lighter))
35
+ return lighter;
36
+ }
37
+ // Unreachable for every shipped brand (the gate proves it) — a brand whose fill and canvas are
38
+ // close enough to leave no gap would land here. Take the end that is least bad rather than throw
39
+ // at import time, and let `focusRing.test.ts` be what reports it.
40
+ const ends = [(0, color_1.withLightness)(hex, 0), (0, color_1.withLightness)(hex, 100)];
41
+ const worst = (candidate) => Math.min(...backdrops.map((backdrop) => (0, color_1.contrastRatio)(candidate, backdrop)));
42
+ return worst(ends[0]) >= worst(ends[1]) ? ends[0] : ends[1];
43
+ }
44
+ /**
45
+ * The three backdrops a focused button's ring is actually drawn against: the page canvas, a card
46
+ * surface, and — because a solid button's ring sits directly against its own fill — `primary[500]`.
47
+ *
48
+ * Deliberately NOT every named surface. `muted`/`accent`/`quaternary` are mid-tone, and a single
49
+ * band asked to clear those AND a dark brand fill has no solution at any hue — contrast is
50
+ * luminance alone, and `skyline`/`storefront` come out with an empty band. That is what the second
51
+ * tone is for: `halo` owns the fill-side adjacency instead.
52
+ */
53
+ const focusRingBackdrops = (source) => [
54
+ source.backgroundColor.main,
55
+ source.background[50],
56
+ source.primary[500],
57
+ ];
58
+ exports.focusRingBackdrops = focusRingBackdrops;
59
+ /**
60
+ * The two-tone `:focus-visible` indicator.
61
+ *
62
+ * Chakra's stock ring (`shadows.outline`, a fixed `rgba(66,153,225,.6)`) measured 1.83:1 on the
63
+ * lavender canvas and 1.38:1 on a primary button — a focus indicator you cannot see, on all nine
64
+ * brands. It is one hardcoded blue, so no palette could have saved it.
65
+ *
66
+ * `halo` is the surface tone, drawn as the inner band so the indicator separates from a filled
67
+ * control whatever `colorScheme` painted it. `ring` is the brand accent, walked to the nearest
68
+ * lightness that clears 3:1 on all three backdrops at once — including the halo, so the two tones
69
+ * are always told apart.
70
+ */
71
+ const buildFocusRing = (source) => {
72
+ const halo = settleBetween(source.background[50], [source.primary[500]]);
73
+ return {
74
+ halo,
75
+ ring: settleBetween(source.primary[500], [...(0, exports.focusRingBackdrops)(source), halo]),
76
+ };
77
+ };
78
+ exports.buildFocusRing = buildFocusRing;
79
+ /**
80
+ * Re-derives the ring from the FINISHED palette, as the last step of the rung chain.
81
+ *
82
+ * `finalizeLightPalette` and `buildDarkPalette` seed it, but neither is the final word: a brand
83
+ * file may replace `primary` or `background` after the generic derivation runs — `zinc`'s dark
84
+ * palette replaces both, inverting the filled button to near-white — and a ring resolved against
85
+ * the pre-override values is then silently wrong. Same reason `withSurfaceRungs` re-lifts inks the
86
+ * finalizers already derived. `focusRing.test.ts` asserts this is a fixed point.
87
+ */
88
+ const withFocusRing = (palette) => ({
89
+ ...palette,
90
+ focusRing: (0, exports.buildFocusRing)(palette),
91
+ });
92
+ exports.withFocusRing = withFocusRing;
@@ -3,5 +3,7 @@ export * from "./buildBrandTokens";
3
3
  export * from "./buildDarkPalette";
4
4
  export * from "./chartColorsFromTheme";
5
5
  export * from "./color";
6
+ export * from "./focusRing";
6
7
  export * from "./scrollbar";
7
8
  export * from "./gradientInk";
9
+ export * from "./placeholderInk";
@@ -19,5 +19,7 @@ __exportStar(require("./buildBrandTokens"), exports);
19
19
  __exportStar(require("./buildDarkPalette"), exports);
20
20
  __exportStar(require("./chartColorsFromTheme"), exports);
21
21
  __exportStar(require("./color"), exports);
22
+ __exportStar(require("./focusRing"), exports);
22
23
  __exportStar(require("./scrollbar"), exports);
23
24
  __exportStar(require("./gradientInk"), exports);
25
+ __exportStar(require("./placeholderInk"), exports);
@@ -7,6 +7,28 @@ import type { PaletteProps } from "../types";
7
7
  export declare const MIN_PERCEPTIBLE_STEP = 1.15;
8
8
  /** WCAG 1.4.11 — a control outline is a UI component boundary, held to 3:1. */
9
9
  export declare const AA_NON_TEXT = 3;
10
+ /**
11
+ * Resting chrome — card, popover and field outlines — settles here, not at `AA_NON_TEXT`.
12
+ * At 3:1 a container border is text-weight and the UI reads as a wireframe; every mainstream
13
+ * system draws this line far lighter (Tailwind gray-200 1.24, Chakra gray.200 1.30, Material
14
+ * outline-variant 1.61). 1.4.11 asks that a control be identifiable, not that its resting
15
+ * border carry the whole job: the fill, the label and the focus ring do that.
16
+ *
17
+ * That defence was untrue when it was written. Buttons defined no `_focusVisible` at all, so the
18
+ * focus ring was Chakra's stock `shadows.outline` — a fixed blue measuring 1.38:1 on a primary
19
+ * button — and nothing in the library was held to `AA_NON_TEXT` at the moment of focus. It is
20
+ * true now: `focusRing` (`builders/focusRing.ts`) is derived per brand per mode and gated at 3:1
21
+ * on the canvas, on a card and on the button's own fill by `builders/focusRing.test.ts`. If that
22
+ * gate is ever relaxed, this constant loses its justification with it.
23
+ */
24
+ export declare const CHROME_BORDER = 1.5;
25
+ export declare const CHROME_RULE = 1.31;
26
+ /**
27
+ * A rule is decorative, so it has a ceiling and no floor: soften it until the surface it reads
28
+ * hardest against sits at `target`, and leave a already-fainter rung alone. Never `settleAcross`
29
+ * here — that clears a floor on EVERY surface, so one tinted surface drags the rule darker.
30
+ */
31
+ export declare function ruleInk(hex: string, surfaces: readonly string[], target: number): string;
10
32
  /**
11
33
  * Walks a hex toward `target` contrast against `backdrop`, keeping hue and saturation.
12
34
  * Direction is DERIVED from the backdrop, never passed: a mode argument here was redundant
@@ -21,9 +43,10 @@ export declare function liftToContrast(hex: string, backdrop: string, target?: n
21
43
  export declare function softenToContrast(hex: string, backdrop: string, target: number): string;
22
44
  /**
23
45
  * `boxborder[500]` is the rung every control outline reads (Checkbox, SearchSelect, the date
24
- * pickers, the editor's inputs). It was authored as a decorative value — measured 1.30-2.56:1
25
- * across brands, so those controls rendered effectively borderless in BOTH modes. Resolved here
26
- * rather than hand-pinned per brand: a copied hex goes stale the moment a canvas moves.
46
+ * pickers, the editor's inputs). Settled onto `CHROME_BORDER` — lifted when a brand authored it
47
+ * invisibly pale, softened when it overshoots. It was previously lifted to `AA_NON_TEXT`, which
48
+ * shipped 3.85-4.95:1 outlines: a text-weight box around every card and popover.
49
+ * Resolved here rather than hand-pinned per brand: a copied hex goes stale the moment a canvas moves.
27
50
  *
28
51
  * `border[*]` is deliberately untouched — that ramp draws table gridlines, which are decorative
29
52
  * and outside 1.4.11.
@@ -38,3 +61,18 @@ export declare function withOutlineRung(palette: PaletteProps): PaletteProps;
38
61
  * its OWN list background, not necessarily the page canvas.
39
62
  */
40
63
  export declare function resolveHoverTint(seed: string, restSurface: string): string;
64
+ /**
65
+ * Settles ink into `target` against EVERY surface at once. Softening one step can change which
66
+ * surface is hardest, so resolving against a single pre-computed "hardest" one lands under the
67
+ * floor on another — that is how radiant and rosewood ended up with an invisible outline on
68
+ * their muted surface.
69
+ */
70
+ export declare function settleAcross(hex: string, surfaces: readonly string[], target: number): string;
71
+ /**
72
+ * A pure-grey surface sitting `target` contrast away from `backdrop`. Binary search, not a walk:
73
+ * `liftToContrast` cannot move a seed already at lightness 0 or 100, and a pure-white panel seeded
74
+ * itself straight to black. Neutral on purpose — the light palettes are hand-authored and tinted,
75
+ * so lifting one of their surface rungs turns a selected row into a saturated brand block, while
76
+ * the derived dark palettes land on grey and look right.
77
+ */
78
+ export declare function neutralStep(backdrop: string, target: number): string;
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AA_NON_TEXT = exports.MIN_PERCEPTIBLE_STEP = void 0;
3
+ exports.CHROME_RULE = exports.CHROME_BORDER = exports.AA_NON_TEXT = exports.MIN_PERCEPTIBLE_STEP = void 0;
4
+ exports.ruleInk = ruleInk;
4
5
  exports.liftToContrast = liftToContrast;
5
6
  exports.softenToContrast = softenToContrast;
6
7
  exports.withOutlineRung = withOutlineRung;
7
8
  exports.resolveHoverTint = resolveHoverTint;
9
+ exports.settleAcross = settleAcross;
10
+ exports.neutralStep = neutralStep;
8
11
  const color_1 = require("./color");
9
12
  /**
10
13
  * The floor a hover/active state's step off its own resting surface must clear to be seen at
@@ -14,6 +17,35 @@ const color_1 = require("./color");
14
17
  exports.MIN_PERCEPTIBLE_STEP = 1.15;
15
18
  /** WCAG 1.4.11 — a control outline is a UI component boundary, held to 3:1. */
16
19
  exports.AA_NON_TEXT = 3;
20
+ /**
21
+ * Resting chrome — card, popover and field outlines — settles here, not at `AA_NON_TEXT`.
22
+ * At 3:1 a container border is text-weight and the UI reads as a wireframe; every mainstream
23
+ * system draws this line far lighter (Tailwind gray-200 1.24, Chakra gray.200 1.30, Material
24
+ * outline-variant 1.61). 1.4.11 asks that a control be identifiable, not that its resting
25
+ * border carry the whole job: the fill, the label and the focus ring do that.
26
+ *
27
+ * That defence was untrue when it was written. Buttons defined no `_focusVisible` at all, so the
28
+ * focus ring was Chakra's stock `shadows.outline` — a fixed blue measuring 1.38:1 on a primary
29
+ * button — and nothing in the library was held to `AA_NON_TEXT` at the moment of focus. It is
30
+ * true now: `focusRing` (`builders/focusRing.ts`) is derived per brand per mode and gated at 3:1
31
+ * on the canvas, on a card and on the button's own fill by `builders/focusRing.test.ts`. If that
32
+ * gate is ever relaxed, this constant loses its justification with it.
33
+ */
34
+ exports.CHROME_BORDER = 1.5;
35
+ // The resting rule between two surfaces — a card edge, a divider, a menu outline. Lighter than
36
+ // CHROME_BORDER, which outlines a control the user acts on.
37
+ exports.CHROME_RULE = 1.31;
38
+ /**
39
+ * A rule is decorative, so it has a ceiling and no floor: soften it until the surface it reads
40
+ * hardest against sits at `target`, and leave a already-fainter rung alone. Never `settleAcross`
41
+ * here — that clears a floor on EVERY surface, so one tinted surface drags the rule darker.
42
+ */
43
+ function ruleInk(hex, surfaces, target) {
44
+ const loudest = surfaces.reduce((worst, s) => (0, color_1.contrastRatio)(hex, s) > (0, color_1.contrastRatio)(hex, worst) ? s : worst);
45
+ return (0, color_1.contrastRatio)(hex, loudest) > target
46
+ ? softenToContrast(hex, loudest, target)
47
+ : hex;
48
+ }
17
49
  /**
18
50
  * Walks a hex toward `target` contrast against `backdrop`, keeping hue and saturation.
19
51
  * Direction is DERIVED from the backdrop, never passed: a mode argument here was redundant
@@ -57,9 +89,10 @@ function softenToContrast(hex, backdrop, target) {
57
89
  }
58
90
  /**
59
91
  * `boxborder[500]` is the rung every control outline reads (Checkbox, SearchSelect, the date
60
- * pickers, the editor's inputs). It was authored as a decorative value — measured 1.30-2.56:1
61
- * across brands, so those controls rendered effectively borderless in BOTH modes. Resolved here
62
- * rather than hand-pinned per brand: a copied hex goes stale the moment a canvas moves.
92
+ * pickers, the editor's inputs). Settled onto `CHROME_BORDER` — lifted when a brand authored it
93
+ * invisibly pale, softened when it overshoots. It was previously lifted to `AA_NON_TEXT`, which
94
+ * shipped 3.85-4.95:1 outlines: a text-weight box around every card and popover.
95
+ * Resolved here rather than hand-pinned per brand: a copied hex goes stale the moment a canvas moves.
63
96
  *
64
97
  * `border[*]` is deliberately untouched — that ramp draws table gridlines, which are decorative
65
98
  * and outside 1.4.11.
@@ -72,7 +105,9 @@ function withOutlineRung(palette) {
72
105
  (0, color_1.contrastRatio)(current, palette.background[50])
73
106
  ? palette.backgroundColor.main
74
107
  : palette.background[50];
75
- const resolved = liftToContrast(current, backdrop);
108
+ const resolved = (0, color_1.contrastRatio)(current, backdrop) > exports.CHROME_BORDER
109
+ ? softenToContrast(current, backdrop, exports.CHROME_BORDER)
110
+ : liftToContrast(current, backdrop, exports.CHROME_BORDER);
76
111
  if (resolved === current)
77
112
  return palette;
78
113
  return { ...palette, boxborder: { ...palette.boxborder, 500: resolved } };
@@ -88,3 +123,45 @@ function withOutlineRung(palette) {
88
123
  function resolveHoverTint(seed, restSurface) {
89
124
  return liftToContrast(seed, restSurface, exports.MIN_PERCEPTIBLE_STEP);
90
125
  }
126
+ /**
127
+ * Settles ink into `target` against EVERY surface at once. Softening one step can change which
128
+ * surface is hardest, so resolving against a single pre-computed "hardest" one lands under the
129
+ * floor on another — that is how radiant and rosewood ended up with an invisible outline on
130
+ * their muted surface.
131
+ */
132
+ function settleAcross(hex, surfaces, target) {
133
+ const clearsAll = (c) => surfaces.every((s) => (0, color_1.contrastRatio)(c, s) >= target);
134
+ if (!clearsAll(hex)) {
135
+ return surfaces.reduce((ink, s) => liftToContrast(ink, s, target), hex);
136
+ }
137
+ const { s: sat, l: start } = (0, color_1.hexToHsl)(hex);
138
+ const toward = (0, color_1.relativeLuminance)(surfaces[0]) < 0.5 ? -1 : 1;
139
+ let settled = hex;
140
+ for (let l = start; l > 0 && l < 100; l += toward) {
141
+ const next = (0, color_1.withLightness)(hex, l, sat);
142
+ if (!clearsAll(next))
143
+ break;
144
+ settled = next;
145
+ }
146
+ return settled;
147
+ }
148
+ /**
149
+ * A pure-grey surface sitting `target` contrast away from `backdrop`. Binary search, not a walk:
150
+ * `liftToContrast` cannot move a seed already at lightness 0 or 100, and a pure-white panel seeded
151
+ * itself straight to black. Neutral on purpose — the light palettes are hand-authored and tinted,
152
+ * so lifting one of their surface rungs turns a selected row into a saturated brand block, while
153
+ * the derived dark palettes land on grey and look right.
154
+ */
155
+ function neutralStep(backdrop, target) {
156
+ const grey = (l) => (0, color_1.withLightness)("#808080", l, 0);
157
+ let lo = (0, color_1.hexToHsl)(backdrop).l;
158
+ let hi = (0, color_1.relativeLuminance)(backdrop) < 0.5 ? 100 : 0;
159
+ for (let i = 0; i < 20; i += 1) {
160
+ const mid = (lo + hi) / 2;
161
+ if ((0, color_1.contrastRatio)(grey(mid), backdrop) < target)
162
+ lo = mid;
163
+ else
164
+ hi = mid;
165
+ }
166
+ return grey(hi);
167
+ }
@@ -0,0 +1,19 @@
1
+ import type { PaletteProps } from "../types";
2
+ /** A field always renders on at least one surface — the first is the reference backdrop. */
3
+ export type FieldSurfaces = readonly [string, ...string[]];
4
+ /**
5
+ * The hint ink for a field: the brand's authored rung settled onto `PLACEHOLDER_TEXT` against the
6
+ * hardest surface a field can land on — lifted when it falls short, softened when it overshoots.
7
+ *
8
+ * Settled rather than floored because the authored rungs measured 3.96-7.73:1 across the brands,
9
+ * and anything much past the floor reads as a field already typed into. The floor is the look:
10
+ * one hint weight for every brand in both modes, instead of a per-brand accident.
11
+ */
12
+ export declare const placeholderInkOn: (palette: PaletteProps, surfaces: FieldSurfaces) => string;
13
+ /**
14
+ * Every surface an ENABLED field renders on. Disabled fields are deliberately absent — 1.4.3
15
+ * exempts them, and folding their dimmer fill in here would darken the hint on every other field.
16
+ */
17
+ export declare const fieldSurfaces: (palette: PaletteProps) => FieldSurfaces;
18
+ /** The hint ink every field in this library reads. Takes no backdrop: see `fieldSurfaces`. */
19
+ export declare const placeholderInk: (palette: PaletteProps) => string;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.placeholderInk = exports.fieldSurfaces = exports.placeholderInkOn = void 0;
4
+ const color_1 = require("./color");
5
+ const outlineRung_1 = require("./outlineRung");
6
+ const surfaceRungs_1 = require("./surfaceRungs");
7
+ /**
8
+ * The hint ink for a field: the brand's authored rung settled onto `PLACEHOLDER_TEXT` against the
9
+ * hardest surface a field can land on — lifted when it falls short, softened when it overshoots.
10
+ *
11
+ * Settled rather than floored because the authored rungs measured 3.96-7.73:1 across the brands,
12
+ * and anything much past the floor reads as a field already typed into. The floor is the look:
13
+ * one hint weight for every brand in both modes, instead of a per-brand accident.
14
+ */
15
+ const placeholderInkOn = (palette, surfaces) => {
16
+ const rung = palette.placeholder[500];
17
+ const hardest = surfaces.reduce((worst, s) => (0, color_1.contrastRatio)(rung, s) < (0, color_1.contrastRatio)(rung, worst) ? s : worst);
18
+ return (0, color_1.contrastRatio)(rung, hardest) > surfaceRungs_1.PLACEHOLDER_TEXT
19
+ ? (0, outlineRung_1.softenToContrast)(rung, hardest, surfaceRungs_1.PLACEHOLDER_TEXT)
20
+ : (0, outlineRung_1.liftToContrast)(rung, hardest, surfaceRungs_1.PLACEHOLDER_TEXT);
21
+ };
22
+ exports.placeholderInkOn = placeholderInkOn;
23
+ /**
24
+ * Every surface an ENABLED field renders on. Disabled fields are deliberately absent — 1.4.3
25
+ * exempts them, and folding their dimmer fill in here would darken the hint on every other field.
26
+ */
27
+ const fieldSurfaces = (palette) => [
28
+ palette.gray[50],
29
+ palette.background[50],
30
+ palette.backgroundColor.main,
31
+ ];
32
+ exports.fieldSurfaces = fieldSurfaces;
33
+ /** The hint ink every field in this library reads. Takes no backdrop: see `fieldSurfaces`. */
34
+ const placeholderInk = (palette) => (0, exports.placeholderInkOn)(palette, (0, exports.fieldSurfaces)(palette));
35
+ exports.placeholderInk = placeholderInk;
@@ -1,6 +1,10 @@
1
1
  import { AA_NON_TEXT } from "./outlineRung";
2
2
  import type { PaletteProps } from "../types";
3
- /** Placeholder text measured 4.32:1 on a card for 8 of 9 brands — text, so held to 4.5:1. */
3
+ /**
4
+ * A hint is floored at 3:1, not 4.5:1. Held to body-text contrast it stopped reading as a hint —
5
+ * an empty field looked like one already typed into — and the published library ships this rung
6
+ * as the brand authored it. See CHROME-CONSISTENCY.md.
7
+ */
4
8
  export declare function withPlaceholderRung(palette: PaletteProps): PaletteProps;
5
9
  /** The hover row is a SURFACE, so it steps away from the ink rather than the ink moving. */
6
10
  export declare function withTableHoverRung(palette: PaletteProps): PaletteProps;
@@ -6,9 +6,14 @@ exports.withTableHoverRung = withTableHoverRung;
6
6
  const outlineRung_1 = require("./outlineRung");
7
7
  Object.defineProperty(exports, "AA_NON_TEXT", { enumerable: true, get: function () { return outlineRung_1.AA_NON_TEXT; } });
8
8
  const accentText_1 = require("./accentText");
9
- /** Placeholder text measured 4.32:1 on a card for 8 of 9 brands — text, so held to 4.5:1. */
9
+ const surfaceRungs_1 = require("./surfaceRungs");
10
+ /**
11
+ * A hint is floored at 3:1, not 4.5:1. Held to body-text contrast it stopped reading as a hint —
12
+ * an empty field looked like one already typed into — and the published library ships this rung
13
+ * as the brand authored it. See CHROME-CONSISTENCY.md.
14
+ */
10
15
  function withPlaceholderRung(palette) {
11
- const resolved = (0, outlineRung_1.liftToContrast)(palette.placeholder[500], palette.background[50], accentText_1.AA_NORMAL_TEXT);
16
+ const resolved = (0, outlineRung_1.liftToContrast)(palette.placeholder[500], palette.background[50], surfaceRungs_1.PLACEHOLDER_TEXT);
12
17
  if (resolved === palette.placeholder[500])
13
18
  return palette;
14
19
  return { ...palette, placeholder: { ...palette.placeholder, 500: resolved } };