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

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 (525) hide show
  1. package/COMPONENT-GOTCHAS.md +1087 -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 +16 -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/MenuPopoverContent.js +2 -2
  245. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +3 -0
  246. package/dist/Components/Skeletons/SkeletonProps.d.ts +2 -0
  247. package/dist/Components/Skeletons/Skeletons.d.ts +1 -0
  248. package/dist/Components/Skeletons/Skeletons.js +1 -0
  249. package/dist/Components/Slider/Slider.d.ts +3 -0
  250. package/dist/Components/Slider/Slider.js +9 -1
  251. package/dist/Components/StageProgress/StageItem.d.ts +1 -0
  252. package/dist/Components/StageProgress/StageItem.js +1 -0
  253. package/dist/Components/StageProgress/StageProgress.d.ts +1 -0
  254. package/dist/Components/StageProgress/StageProgress.js +1 -0
  255. package/dist/Components/StageProgress/StageProgressProps.d.ts +45 -4
  256. package/dist/Components/StageProgress/StageProgressProps.js +6 -4
  257. package/dist/Components/StageProgress/StepperStage.js +2 -2
  258. package/dist/Components/Switch/Switch.d.ts +1 -0
  259. package/dist/Components/Switch/Switch.js +1 -0
  260. package/dist/Components/Switch/SwitchProps.d.ts +1 -0
  261. package/dist/Components/Table/Table.d.ts +2 -1
  262. package/dist/Components/Table/Table.js +15 -5
  263. package/dist/Components/Table/TableProps.d.ts +47 -0
  264. package/dist/Components/Table/components/Pagination.js +1 -1
  265. package/dist/Components/Table/components/TableActions.js +2 -2
  266. package/dist/Components/Table/components/TableBody.js +44 -18
  267. package/dist/Components/Table/components/TableGroupRow.js +1 -1
  268. package/dist/Components/Table/components/TableHeader.js +21 -8
  269. package/dist/Components/Table/components/TableSearch.js +1 -1
  270. package/dist/Components/Table/filters/CompactSelect.d.ts +1 -0
  271. package/dist/Components/Table/filters/CompactSelect.js +29 -8
  272. package/dist/Components/Table/filters/LeftFilterPane.d.ts +9 -1
  273. package/dist/Components/Table/filters/LeftFilterPane.js +1 -1
  274. package/dist/Components/Table/settings/ManageColumns.js +8 -5
  275. package/dist/Components/Table/settings/TableSettings.js +6 -4
  276. package/dist/Components/Table/variants/TableVariantContext.d.ts +4 -0
  277. package/dist/Components/Table/variants/TableVariantContext.js +17 -0
  278. package/dist/Components/Table/variants/classic.d.ts +6 -0
  279. package/dist/Components/Table/variants/classic.js +47 -0
  280. package/dist/Components/Table/variants/index.d.ts +7 -0
  281. package/dist/Components/Table/variants/index.js +27 -0
  282. package/dist/Components/Table/variants/pillInk.d.ts +6 -0
  283. package/dist/Components/Table/variants/pillInk.js +21 -0
  284. package/dist/Components/Table/variants/studio.d.ts +6 -0
  285. package/dist/Components/Table/variants/studio.js +50 -0
  286. package/dist/Components/Table/variants/tokens.d.ts +49 -0
  287. package/dist/Components/Table/variants/tokens.js +2 -0
  288. package/dist/Components/Tag/Tag.d.ts +1 -0
  289. package/dist/Components/Tag/Tag.js +1 -0
  290. package/dist/Components/Tag/Tag.styles.js +16 -11
  291. package/dist/Components/Tag/TagProps.d.ts +7 -0
  292. package/dist/Components/Timeline/Timeline.d.ts +1 -0
  293. package/dist/Components/Timeline/Timeline.js +1 -0
  294. package/dist/Components/Timeline/TimelineProps.d.ts +8 -0
  295. package/dist/Components/Toaster/Toaster.d.ts +1 -0
  296. package/dist/Components/Toaster/Toaster.js +1 -0
  297. package/dist/Components/Toaster/ToasterProps.d.ts +3 -0
  298. package/dist/Components/Toggle/TableToggle.d.ts +1 -0
  299. package/dist/Components/Toggle/TableToggle.js +73 -18
  300. package/dist/Components/Toggle/TableToggleProps.d.ts +6 -0
  301. package/dist/Components/ToggleSwitch/ToggleSwitch.d.ts +3 -0
  302. package/dist/Components/ToggleSwitch/ToggleSwitch.js +19 -0
  303. package/dist/Components/ToggleSwitch/ToggleSwitchProps.d.ts +13 -0
  304. package/dist/Components/ToggleSwitch/ToggleSwitchProps.js +2 -0
  305. package/dist/Components/ToolTip/ToolTip.d.ts +1 -0
  306. package/dist/Components/ToolTip/ToolTip.js +7 -6
  307. package/dist/Components/ToolTip/ToolTipProps.d.ts +5 -1
  308. package/dist/Components/Trail/EditableCell.d.ts +2 -0
  309. package/dist/Components/Trail/EditableCell.js +2 -1
  310. package/dist/Components/Trail/SelectAllCheckbox.d.ts +1 -0
  311. package/dist/Components/Trail/SelectAllCheckbox.js +1 -0
  312. package/dist/Components/Trail/TrailWorks.d.ts +1 -0
  313. package/dist/Components/Trail/TrailWorks.js +2 -1
  314. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +6 -2
  315. package/dist/Components/UserDetails/DeactivateConfirmModal.js +1 -1
  316. package/dist/Components/UserDetails/UserDetails.d.ts +1 -0
  317. package/dist/Components/UserDetails/UserDetails.js +6 -3
  318. package/dist/Components/UserDetails/UserDetailsProps.d.ts +30 -1
  319. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +6 -1
  320. package/dist/Hooks/exclusiveOverlay.d.ts +4 -0
  321. package/dist/Hooks/exclusiveOverlay.js +22 -0
  322. package/dist/Hooks/useExclusiveOverlay.d.ts +5 -0
  323. package/dist/Hooks/useExclusiveOverlay.js +24 -0
  324. package/dist/Theme/assertPalette.d.ts +1 -1
  325. package/dist/Theme/assertPalette.js +3 -2
  326. package/dist/Theme/chakra/Menu.styles.d.ts +2 -0
  327. package/dist/Theme/chakra/Menu.styles.js +9 -5
  328. package/dist/Theme/chakra/Popover.styles.d.ts +3 -0
  329. package/dist/Theme/chakra/Popover.styles.js +5 -1
  330. package/dist/Theme/chakra/componentStyles.d.ts +5 -0
  331. package/dist/Theme/chakra/componentStyles.js +16 -9
  332. package/dist/Theme/chakra/createBrandTheme.js +22 -9
  333. package/dist/Theme/chakra/focusRing.styles.d.ts +52 -0
  334. package/dist/Theme/chakra/focusRing.styles.js +46 -0
  335. package/dist/Theme/provider/ThemeSwitcher.js +5 -2
  336. package/dist/Theme/tokens/brands/index.js +6 -1
  337. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +1 -0
  338. package/dist/Theme/tokens/builders/buildDarkPalette.js +6 -1
  339. package/dist/Theme/tokens/builders/chartColorsFromTheme.js +1 -1
  340. package/dist/Theme/tokens/builders/filledSurface.d.ts +29 -0
  341. package/dist/Theme/tokens/builders/filledSurface.js +74 -0
  342. package/dist/Theme/tokens/builders/focusRing.d.ts +52 -0
  343. package/dist/Theme/tokens/builders/focusRing.js +92 -0
  344. package/dist/Theme/tokens/builders/index.d.ts +2 -0
  345. package/dist/Theme/tokens/builders/index.js +2 -0
  346. package/dist/Theme/tokens/builders/outlineRung.d.ts +41 -3
  347. package/dist/Theme/tokens/builders/outlineRung.js +82 -5
  348. package/dist/Theme/tokens/builders/placeholderInk.d.ts +19 -0
  349. package/dist/Theme/tokens/builders/placeholderInk.js +35 -0
  350. package/dist/Theme/tokens/builders/resolvedRungs.d.ts +5 -1
  351. package/dist/Theme/tokens/builders/resolvedRungs.js +7 -2
  352. package/dist/Theme/tokens/builders/rowStates.d.ts +13 -0
  353. package/dist/Theme/tokens/builders/rowStates.js +19 -0
  354. package/dist/Theme/tokens/builders/scrollShadow.d.ts +2 -0
  355. package/dist/Theme/tokens/builders/scrollShadow.js +16 -0
  356. package/dist/Theme/tokens/builders/surfaceRungs.d.ts +5 -2
  357. package/dist/Theme/tokens/builders/surfaceRungs.js +19 -9
  358. package/dist/Theme/tokens/types.d.ts +21 -1
  359. package/dist/Utils/table.d.ts +3 -0
  360. package/dist/Utils/table.js +49 -3
  361. package/dist/esm/Components/Accordion/Accordion.js +4 -1
  362. package/dist/esm/Components/AlertDialog/AlertDialog.js +1 -0
  363. package/dist/esm/Components/Apexcharts/ApexAreaChart/ApexAreaChart.js +1 -0
  364. package/dist/esm/Components/Apexcharts/ApexBarChart/ApexBarChart.js +1 -0
  365. package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -0
  366. package/dist/esm/Components/Apexcharts/ApexPieChart/ApexPieChart.js +1 -0
  367. package/dist/esm/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.js +1 -0
  368. package/dist/esm/Components/Apexcharts/ApexRadialChart/ApexRadialChart.js +1 -0
  369. package/dist/esm/Components/AppSwitcher/AppMark.js +56 -0
  370. package/dist/esm/Components/AppSwitcher/AppSwitcher.js +243 -0
  371. package/dist/esm/Components/AppSwitcher/AppSwitcherProps.js +78 -0
  372. package/dist/esm/Components/AppSwitcher/useAppSwitcherShortcut.js +27 -0
  373. package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +2 -1
  374. package/dist/esm/Components/Button/Button.js +5 -4
  375. package/dist/esm/Components/Button/Button.styles.js +38 -24
  376. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +2 -4
  377. package/dist/esm/Components/Card/Card.js +2 -2
  378. package/dist/esm/Components/Card/PaymentCard/PaymentCard.js +21 -12
  379. package/dist/esm/Components/Checkbox/Checkbox.js +2 -1
  380. package/dist/esm/Components/Checkbox/Checkbox.styles.js +13 -8
  381. package/dist/esm/Components/Common/ErrorComponent.js +7 -5
  382. package/dist/esm/Components/Common/ErrorMessage.js +2 -2
  383. package/dist/esm/Components/Common/FormLabel.js +1 -0
  384. package/dist/esm/Components/Common/FormattedDescription.js +1 -0
  385. package/dist/esm/Components/Common/HelperText.js +2 -0
  386. package/dist/esm/Components/Common/Label.js +1 -0
  387. package/dist/esm/Components/Common/fieldStyles.js +1 -1
  388. package/dist/esm/Components/ContactForm/ContactForm.js +1 -0
  389. package/dist/esm/Components/CopyButton/CopyButton.js +10 -4
  390. package/dist/esm/Components/DatePicker/CalendarPanel.js +38 -16
  391. package/dist/esm/Components/DatePicker/DatePicker.js +1 -0
  392. package/dist/esm/Components/DatePicker/RangeDatePicker.js +31 -6
  393. package/dist/esm/Components/DatePicker/SingleDatePicker.js +50 -15
  394. package/dist/esm/Components/DatePicker/ThemeDatePicker.js +1 -0
  395. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +11 -2
  396. package/dist/esm/Components/DatePicker/TimePicker.js +4 -3
  397. package/dist/esm/Components/DatePicker/TimePickerInput.js +2 -1
  398. package/dist/esm/Components/DatePicker/dayStates.js +79 -0
  399. package/dist/esm/Components/Divider/Divider.js +1 -0
  400. package/dist/esm/Components/Dropdown/DropDown.js +23 -7
  401. package/dist/esm/Components/Editor/Editor.js +1 -0
  402. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +2 -5
  403. package/dist/esm/Components/EmptyState/EmptyState.js +4 -2
  404. package/dist/esm/Components/FeedbackForm/FeedbackForm.js +1 -0
  405. package/dist/esm/Components/FieldSelectModal/FieldSelectModal.js +1 -0
  406. package/dist/esm/Components/FilePreview/FilePreview.js +3 -1
  407. package/dist/esm/Components/FileUpload/FileUpload.js +8 -6
  408. package/dist/esm/Components/FileUpload/constants.js +1 -0
  409. package/dist/esm/Components/FileUploader/FileUploader.js +1 -0
  410. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +5 -5
  411. package/dist/esm/Components/FilterSidebar/filterHoverStyle.js +3 -10
  412. package/dist/esm/Components/Form/FormWrapper.js +2 -1
  413. package/dist/esm/Components/Header/components/mobileMenu.js +12 -3
  414. package/dist/esm/Components/Input/PhoneNumberInput.js +1 -0
  415. package/dist/esm/Components/Input/Switch/InputSwitch.js +1 -0
  416. package/dist/esm/Components/Input/TextInput.js +1 -0
  417. package/dist/esm/Components/Input/TextInput.styles.js +8 -10
  418. package/dist/esm/Components/InputTextArea/InputTextArea.js +1 -0
  419. package/dist/esm/Components/InputTextArea/InputTextArea.style.js +7 -6
  420. package/dist/esm/Components/KanbanBoard/AccountCard.js +1 -0
  421. package/dist/esm/Components/KanbanBoard/AccountRow.js +1 -0
  422. package/dist/esm/Components/KanbanBoard/KanbanActions/KanbanActions.js +2 -2
  423. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +1 -0
  424. package/dist/esm/Components/KanbanBoard/MeasuredItem.js +1 -0
  425. package/dist/esm/Components/LazyWrapper/LazyWrapper.js +1 -0
  426. package/dist/esm/Components/LimitReachedModal/limitReachedCopy.js +2 -0
  427. package/dist/esm/Components/Loading/Loading.js +13 -11
  428. package/dist/esm/Components/MoreItems/MoreItems.js +4 -1
  429. package/dist/esm/Components/MultiSelect/MultiSelect.js +2 -2
  430. package/dist/esm/Components/NavigationBar/NavigationBar.js +9 -10
  431. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +10 -4
  432. package/dist/esm/Components/Notification/Notification.js +1 -0
  433. package/dist/esm/Components/NumberInput/NumberInput.js +5 -2
  434. package/dist/esm/Components/NumberInput/NumberInput.styles.js +7 -6
  435. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +14 -10
  436. package/dist/esm/Components/OrgSwitcher/OrgSwitcherProps.js +1 -0
  437. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +5 -3
  438. package/dist/esm/Components/PdfViewer/PdfViewer.js +7 -1
  439. package/dist/esm/Components/PinInput/PinInput.js +1 -0
  440. package/dist/esm/Components/PinInputs/PinInputs.js +1 -0
  441. package/dist/esm/Components/Primitives/Primitives.js +6 -0
  442. package/dist/esm/Components/ProductCard/ProductReview.js +6 -1
  443. package/dist/esm/Components/ProductCard/ProductTags.js +1 -1
  444. package/dist/esm/Components/ProfileCard/ProfileCard.js +1 -1
  445. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +6 -4
  446. package/dist/esm/Components/ProgressBar/ProgressBar.js +1 -0
  447. package/dist/esm/Components/RadioButton/RadioButton.js +3 -2
  448. package/dist/esm/Components/Reorder/Reorder.js +1 -0
  449. package/dist/esm/Components/RolesPermission/RolesPermission.js +5 -3
  450. package/dist/esm/Components/ScrollToTop/ScrollToTop.js +4 -1
  451. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +1 -0
  452. package/dist/esm/Components/Search/Search.js +3 -2
  453. package/dist/esm/Components/SearchSelect/SearchSelect.js +48 -37
  454. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +86 -0
  455. package/dist/esm/Components/SegmentedControl/SegmentedControlProps.js +1 -0
  456. package/dist/esm/Components/Select/Select.js +5 -3
  457. package/dist/esm/Components/Select/Select.styles.js +3 -2
  458. package/dist/esm/Components/SelectSearch/SelectSearch.js +37 -15
  459. package/dist/esm/Components/SelectV2/SelectV2.js +20 -5
  460. package/dist/esm/Components/SideBar/SecondaryBar.js +1 -1
  461. package/dist/esm/Components/SideBar/SideBar.js +5 -3
  462. package/dist/esm/Components/SideBar/components/MenuPopoverContent.js +2 -2
  463. package/dist/esm/Components/Skeletons/Skeletons.js +1 -0
  464. package/dist/esm/Components/Slider/Slider.js +9 -1
  465. package/dist/esm/Components/StageProgress/StageItem.js +1 -0
  466. package/dist/esm/Components/StageProgress/StageProgress.js +1 -0
  467. package/dist/esm/Components/StageProgress/StageProgressProps.js +7 -5
  468. package/dist/esm/Components/StageProgress/StepperStage.js +2 -2
  469. package/dist/esm/Components/Switch/Switch.js +1 -0
  470. package/dist/esm/Components/Table/Table.js +15 -5
  471. package/dist/esm/Components/Table/components/Pagination.js +1 -1
  472. package/dist/esm/Components/Table/components/TableActions.js +2 -2
  473. package/dist/esm/Components/Table/components/TableBody.js +44 -18
  474. package/dist/esm/Components/Table/components/TableGroupRow.js +1 -1
  475. package/dist/esm/Components/Table/components/TableHeader.js +21 -8
  476. package/dist/esm/Components/Table/components/TableSearch.js +1 -1
  477. package/dist/esm/Components/Table/filters/CompactSelect.js +29 -8
  478. package/dist/esm/Components/Table/filters/LeftFilterPane.js +1 -1
  479. package/dist/esm/Components/Table/settings/ManageColumns.js +8 -5
  480. package/dist/esm/Components/Table/settings/TableSettings.js +7 -5
  481. package/dist/esm/Components/Table/variants/TableVariantContext.js +13 -0
  482. package/dist/esm/Components/Table/variants/classic.js +43 -0
  483. package/dist/esm/Components/Table/variants/index.js +9 -0
  484. package/dist/esm/Components/Table/variants/pillInk.js +18 -0
  485. package/dist/esm/Components/Table/variants/studio.js +46 -0
  486. package/dist/esm/Components/Table/variants/tokens.js +1 -0
  487. package/dist/esm/Components/Tag/Tag.js +1 -0
  488. package/dist/esm/Components/Tag/Tag.styles.js +17 -12
  489. package/dist/esm/Components/Timeline/Timeline.js +1 -0
  490. package/dist/esm/Components/Toaster/Toaster.js +1 -0
  491. package/dist/esm/Components/Toggle/TableToggle.js +72 -17
  492. package/dist/esm/Components/ToggleSwitch/ToggleSwitch.js +16 -0
  493. package/dist/esm/Components/ToggleSwitch/ToggleSwitchProps.js +1 -0
  494. package/dist/esm/Components/ToolTip/ToolTip.js +7 -6
  495. package/dist/esm/Components/Trail/EditableCell.js +2 -1
  496. package/dist/esm/Components/Trail/SelectAllCheckbox.js +1 -0
  497. package/dist/esm/Components/Trail/TrailWorks.js +2 -1
  498. package/dist/esm/Components/UserDetails/DeactivateConfirmModal.js +1 -1
  499. package/dist/esm/Components/UserDetails/UserDetails.js +6 -3
  500. package/dist/esm/Hooks/exclusiveOverlay.js +16 -0
  501. package/dist/esm/Hooks/useExclusiveOverlay.js +20 -0
  502. package/dist/esm/Theme/assertPalette.js +3 -2
  503. package/dist/esm/Theme/chakra/Menu.styles.js +9 -5
  504. package/dist/esm/Theme/chakra/Popover.styles.js +5 -1
  505. package/dist/esm/Theme/chakra/componentStyles.js +16 -9
  506. package/dist/esm/Theme/chakra/createBrandTheme.js +22 -9
  507. package/dist/esm/Theme/chakra/focusRing.styles.js +40 -0
  508. package/dist/esm/Theme/provider/ThemeSwitcher.js +5 -2
  509. package/dist/esm/Theme/tokens/brands/index.js +6 -1
  510. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +6 -1
  511. package/dist/esm/Theme/tokens/builders/chartColorsFromTheme.js +1 -1
  512. package/dist/esm/Theme/tokens/builders/filledSurface.js +67 -0
  513. package/dist/esm/Theme/tokens/builders/focusRing.js +85 -0
  514. package/dist/esm/Theme/tokens/builders/index.js +2 -0
  515. package/dist/esm/Theme/tokens/builders/outlineRung.js +78 -4
  516. package/dist/esm/Theme/tokens/builders/placeholderInk.js +29 -0
  517. package/dist/esm/Theme/tokens/builders/resolvedRungs.js +7 -2
  518. package/dist/esm/Theme/tokens/builders/rowStates.js +15 -0
  519. package/dist/esm/Theme/tokens/builders/scrollShadow.js +13 -0
  520. package/dist/esm/Theme/tokens/builders/surfaceRungs.js +20 -10
  521. package/dist/esm/Utils/table.js +50 -5
  522. package/dist/esm/index.js +26 -1
  523. package/dist/index.d.ts +26 -3
  524. package/dist/index.js +67 -4
  525. package/package.json +11 -4
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TableCellCalculation = exports.pageSizeCalculation = exports.searchAndSortData = exports.calculateLeftOffset = void 0;
37
37
  exports.compareValues = compareValues;
38
38
  exports.SortMultiColumnData = SortMultiColumnData;
39
+ exports.buildSemanticStatusPalette = buildSemanticStatusPalette;
39
40
  exports.buildTablePalette = buildTablePalette;
40
41
  exports.pickTableColor = pickTableColor;
41
42
  exports.groupRows = groupRows;
@@ -45,6 +46,9 @@ exports.useDebounce = useDebounce;
45
46
  exports.globalSearchFilter = globalSearchFilter;
46
47
  const react_1 = __importStar(require("react"));
47
48
  const accentText_1 = require("../Theme/tokens/builders/accentText");
49
+ const color_1 = require("../Theme/tokens/builders/color");
50
+ const outlineRung_1 = require("../Theme/tokens/builders/outlineRung");
51
+ const filledSurface_1 = require("../Theme/tokens/builders/filledSurface");
48
52
  const statusTone_1 = require("../Theme/tokens/builders/statusTone");
49
53
  // Built once, not per comparison: sorting 10k rows runs this ~130k times, and constructing a
50
54
  // collator is orders of magnitude dearer than using one.
@@ -98,7 +102,45 @@ function SortMultiColumnData(data, sortConfig) {
98
102
  return 0;
99
103
  });
100
104
  }
105
+ /** Theme-aware status palette per value — soft fill + semantic ink from `resolveStatusTone`. */
106
+ function buildSemanticStatusPalette(toneByValue, theme) {
107
+ const c = theme.colors;
108
+ const mode = (0, accentText_1.isDarkCanvas)(c.backgroundColor.main) ? "dark" : "light";
109
+ const scales = {
110
+ info: c.semantic.info,
111
+ warning: c.semantic.warning,
112
+ success: c.semantic.success,
113
+ error: c.semantic.error,
114
+ neutral: c.gray,
115
+ };
116
+ return Object.fromEntries(Object.entries(toneByValue).map(([value, key]) => {
117
+ const scale = scales[key];
118
+ const tone = (0, statusTone_1.resolveStatusTone)(scale, mode);
119
+ const solidRung = (0, filledSurface_1.solidFillRung)(scale, c.white);
120
+ const solid = scale[solidRung];
121
+ return [
122
+ value,
123
+ {
124
+ solid,
125
+ soft: tone.bg,
126
+ text: tone.fg,
127
+ onSolid: (0, filledSurface_1.labelOnFill)(solid, c.white, c.black),
128
+ },
129
+ ];
130
+ }));
131
+ }
101
132
  const withAlpha = (hex, aa) => /^#([0-9a-fA-F]{6})$/.test(hex) ? `${hex}${aa}` : hex;
133
+ /** Consumer `statusColors` values are fill seeds — derive bleed + pill ink from them. */
134
+ const resolveStatusOverride = (fill, white, black, surface) => {
135
+ const soft = withAlpha(fill, "22");
136
+ const solid = (0, statusTone_1.resolveAvatarFill)(fill);
137
+ return {
138
+ solid,
139
+ soft,
140
+ text: (0, outlineRung_1.liftToContrast)(fill, (0, color_1.compositeOver)(soft, surface), accentText_1.AA_NORMAL_TEXT),
141
+ onSolid: (0, accentText_1.onFilled)(solid, white, black),
142
+ };
143
+ };
102
144
  /** Deterministic, theme-aware color palette for groups + status pills. */
103
145
  function buildTablePalette(theme) {
104
146
  const c = theme.colors;
@@ -117,11 +159,13 @@ function buildTablePalette(theme) {
117
159
  ];
118
160
  return scales.map((scale) => {
119
161
  const tone = (0, statusTone_1.resolveStatusTone)(scale, mode);
162
+ const solidRung = (0, filledSurface_1.solidFillRung)(scale, c.white);
163
+ const solid = scale[solidRung];
120
164
  return {
121
- solid: scale[500],
165
+ solid,
122
166
  soft: tone.bg,
123
167
  text: tone.fg,
124
- onSolid: (0, accentText_1.onFilled)(scale[500], c.white, c.black),
168
+ onSolid: (0, filledSurface_1.labelOnFill)(solid, c.white, c.black),
125
169
  };
126
170
  });
127
171
  }
@@ -134,10 +178,12 @@ const hashKey = (value) => {
134
178
  };
135
179
  /** Pick a deterministic palette color for a value, with optional consumer override hex. */
136
180
  function pickTableColor(value, palette, override, theme) {
181
+ var _a;
137
182
  const white = theme ? theme.colors.white : accentText_1.DEFAULT_WHITE;
138
183
  const black = theme ? theme.colors.black : accentText_1.DEFAULT_BLACK;
139
184
  if (override) {
140
- return { solid: override, soft: withAlpha(override, "22"), text: override, onSolid: (0, accentText_1.onFilled)(override, white, black) };
185
+ const surface = (_a = theme === null || theme === void 0 ? void 0 : theme.colors.background[50]) !== null && _a !== void 0 ? _a : accentText_1.DEFAULT_WHITE;
186
+ return resolveStatusOverride(override, white, black, surface);
141
187
  }
142
188
  if (!palette.length) {
143
189
  throw new Error("pickTableColor: empty palette — build it with buildTablePalette(theme).");
@@ -4,7 +4,9 @@ import { Accordion as ChakraAccordian, AccordionItem, AccordionButton, Accordion
4
4
  import { ChevronDown } from "lucide-react";
5
5
  import { useCustomTheme } from "../../Theme/useCustomTheme.js";
6
6
  import { isDarkCanvas } from "../../Theme/tokens/builders/accentText.js";
7
+ import { liftToContrast, AA_NON_TEXT } from "../../Theme/tokens/builders/outlineRung.js";
7
8
  import { getAccordionHoverColors } from "./accordionColors.js";
9
+ /** Chakra Accordion wrapper for header/content pairs; FilterSidebar composes this directly for its collapsible filter sections. */
8
10
  const Accordion = ({ allowMultiple, allowToggle, index, onChange, reduceMotion, items, ...rest }) => {
9
11
  const { colors } = useCustomTheme();
10
12
  const isDark = isDarkCanvas(colors.backgroundColor.main);
@@ -12,13 +14,14 @@ const Accordion = ({ allowMultiple, allowToggle, index, onChange, reduceMotion,
12
14
  const headingColor = colors.text[800];
13
15
  const bodyColor = colors.text[600];
14
16
  const { expandedBg, softHover } = useMemo(() => getAccordionHoverColors(colors, isDark), [colors, isDark]);
17
+ const focusRing = useMemo(() => liftToContrast(colors.primary[300], colors.background[50], AA_NON_TEXT), [colors]);
15
18
  return (_jsx(ChakraAccordian, { allowMultiple: allowMultiple, allowToggle: allowToggle, index: index, onChange: onChange, reduceMotion: reduceMotion, ...rest, children: items.map((item, idx) => {
16
19
  var _a;
17
20
  return (_jsx(AccordionItem, { border: `0.063rem solid ${border}`, borderRadius: "xl", bg: colors.background[50], mb: 3, overflow: "hidden", transition: "border-color 0.15s ease, box-shadow 0.15s ease", _last: { mb: 0 }, _hover: { borderColor: colors.boxborder[200] }, ...item.itemProps, sx: (_a = item.customStyles) === null || _a === void 0 ? void 0 : _a.itemStyle, children: ({ isExpanded }) => {
18
21
  var _a, _b, _c;
19
22
  return (_jsxs(_Fragment, { children: [_jsx("h2", { children: _jsxs(AccordionButton, { px: 4, py: 3, gap: 3, fontSize: "0.875rem", fontWeight: 600, color: headingColor, bg: isExpanded ? expandedBg : "transparent", transition: "background 0.15s ease", _hover: { bg: isExpanded ? expandedBg : softHover }, _focusVisible: {
20
23
  boxShadow: "none",
21
- outline: `0.125rem solid ${colors.primary[300]}`,
24
+ outline: `0.125rem solid ${focusRing}`,
22
25
  outlineOffset: "-0.125rem",
23
26
  }, ...item.buttonProps, sx: {
24
27
  ...(_a = item.customStyles) === null || _a === void 0 ? void 0 : _a.buttonStyle,
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { AlertDialog as ChakraAlertDialog, AlertDialogBody, AlertDialogCloseButton, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, Button, } from "@chakra-ui/react";
3
3
  import { useCustomTheme } from "../../Theme/useCustomTheme.js";
4
+ /** Renders a fixed Cancel/Confirm AlertDialog from title+content props — not a substitute for Modal when you need custom footer buttons or slots. */
4
5
  const AlertDialog = ({ isOpen, onClose, leastDestructiveRef, content, title, confirmButtonText = "Yes", cancelButtonText = "No", isConfirmLoading, onConfirm, ContentStyle, headerStyle, bodyStyle, footerStyle, closeButtonStyle, button1Style, button2Style, isCentered, key, }) => {
5
6
  const { colors } = useCustomTheme();
6
7
  return (_jsxs(ChakraAlertDialog, { motionPreset: "slideInBottom", leastDestructiveRef: leastDestructiveRef, onClose: onClose, isOpen: isOpen, isCentered: isCentered, children: [_jsx(AlertDialogOverlay, {}), _jsxs(AlertDialogContent, { bg: colors.background[50], sx: ContentStyle, children: [_jsx(AlertDialogHeader, { sx: headerStyle, children: title }), _jsx(AlertDialogCloseButton, { sx: closeButtonStyle }), _jsx(AlertDialogBody, { sx: bodyStyle, children: content }), _jsxs(AlertDialogFooter, { sx: footerStyle, children: [_jsx(Button, { ref: leastDestructiveRef, onClick: onClose, variant: "outline", colorScheme: "red", size: "sm", sx: button1Style, children: cancelButtonText }), _jsx(Button, { colorScheme: "primary", onClick: onConfirm, isLoading: isConfirmLoading, ml: 3, size: "sm", sx: button2Style, children: confirmButtonText })] })] })] }, key));
@@ -4,6 +4,7 @@ import ReactApexChart from "react-apexcharts";
4
4
  import { useCustomTheme } from "../../../Theme/useCustomTheme.js";
5
5
  import { getDefaultSeriesColors, mergeChartTitleStyle, } from "../../../Theme/tokens/builders/chartColorsFromTheme.js";
6
6
  import { baseAxisLabels, baseChart, baseGrid, baseLegend, baseTooltip } from "../chartBase.js";
7
+ /** Filled line chart (basic/stacked/gradient/sparkline); unlike `ApexLineChart`, `data`/`series` are read fresh via `useMemo` every render, not frozen at mount. */
7
8
  const ApexAreaChart = ({ variant = "basic", data, series, labels, title, titlePosition = "left", height = 320, width = "100%", colors, showLegend = true, legendPosition = "bottom", yAxisFormatter, }) => {
8
9
  const { colors: palette } = useCustomTheme();
9
10
  const seriesColors = useMemo(() => colors !== null && colors !== void 0 ? colors : getDefaultSeriesColors(palette), [colors, palette]);
@@ -4,6 +4,7 @@ import ReactApexChart from "react-apexcharts";
4
4
  import { useTheme } from "@chakra-ui/react";
5
5
  import { chartAxisLabelColor, getDefaultSeriesColors, mergeChartTitleStyle, } from "../../../Theme/tokens/builders/chartColorsFromTheme.js";
6
6
  import { baseAxisLabels, baseChart, baseGrid, baseLegend, baseTooltip } from "../chartBase.js";
7
+ /** Bar chart wrapper around react-apexcharts (horizontal/stacked/distributed via props), themed via chartColorsFromTheme + chartBase. */
7
8
  export default function ApexBarChart({ data, labels, title, titlePosition, height = 400, width = 500, barColor, xAxisStyle, yAxisStyle, titleStyle, horizontal = false, distributed = false, seriesName = "Data", series, stacked = false, showLegend, legendPosition = "bottom", }) {
8
9
  const theme = useTheme();
9
10
  const palette = theme.colors;
@@ -5,6 +5,7 @@ import { useTheme } from "@chakra-ui/react";
5
5
  import ToolTip from "../../ToolTip/ToolTip.js";
6
6
  import { getDefaultSeriesColors, mergeChartTitleStyle, } from "../../../Theme/tokens/builders/chartColorsFromTheme.js";
7
7
  import { baseAxisLabels, baseChart, baseGrid, baseTooltip } from "../chartBase.js";
8
+ /** Line chart wrapper around react-apexcharts, themed via chartColorsFromTheme + chartBase. */
8
9
  const ApexLineChart = ({ data, labels, title, height, width, lineColors, titlePosition = "center", titleStyle, compact = false, toolbarBreakpointPct = 0.6, titleClampLines, showTitleEllipsis = true, showSeries = true, series: seriesNames, variant = "basic", }) => {
9
10
  const theme = useTheme();
10
11
  const palette = theme.colors;
@@ -12,6 +12,7 @@ const getValidLegendPosition = (position) => {
12
12
  console.warn(`Invalid legend position: ${position}. Defaulting to 'bottom'.`);
13
13
  return "bottom";
14
14
  };
15
+ /** Pie/donut chart wrapper around react-apexcharts, themed via chartColorsFromTheme + chartBase. */
15
16
  const ApexPieChart = ({ data, labels, title, height = 400, width = 500, donutColors, chartColor, titlePosition = "center", titleStyle, legendPosition = "bottom", legendStyle, variant = "pie", showDataLabels = true, minLabelPercent = 8, surfaceColor, donutSize = "68%", totalLabel = "Total", labelPlacement = "auto", }) => {
16
17
  var _a;
17
18
  const { colors: palette } = useCustomTheme();
@@ -4,6 +4,7 @@ import ReactApexChart from "react-apexcharts";
4
4
  import { useTheme } from "@chakra-ui/react";
5
5
  import { chartInk, chartMode, getDefaultSeriesColors, mergeChartTitleStyle, } from "../../../Theme/tokens/builders/chartColorsFromTheme.js";
6
6
  import { baseChart, baseLegend, baseTooltip } from "../chartBase.js";
7
+ /** Polar-area chart wrapper around react-apexcharts, themed via chartColorsFromTheme + chartBase. */
7
8
  const ApexPolarChart = ({ data, labels, title, height = 400, width = 500, chartColors, titlePosition = "center", titleStyle, legendStyle, variant = "basic", }) => {
8
9
  const theme = useTheme();
9
10
  const palette = theme.colors;
@@ -4,6 +4,7 @@ import ReactApexChart from "react-apexcharts";
4
4
  import { useCustomTheme } from "../../../Theme/useCustomTheme.js";
5
5
  import { chartInk, getDefaultSeriesColors, mergeChartTitleStyle, } from "../../../Theme/tokens/builders/chartColorsFromTheme.js";
6
6
  import { baseChart, baseLegend } from "../chartBase.js";
7
+ /** Radial/gauge chart (gauge/multi/semi); `hollowSize` is silently overridden to a fixed `"52%"` whenever `variant="multi"`. */
7
8
  const ApexRadialChart = ({ variant = "gauge", data, labels, title, titlePosition = "left", height = 320, width = "100%", colors, totalLabel = "Total", trackColor, hollowSize = "62%", }) => {
8
9
  const { colors: palette } = useCustomTheme();
9
10
  const ink = chartInk(palette);
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { isValidElement } from "react";
3
+ import { Box, Flex, Image } from "@chakra-ui/react";
4
+ import { useCustomTheme } from "../../Theme/useCustomTheme.js";
5
+ import { mix } from "../../Theme/tokens/builders/color.js";
6
+ import { onFilled } from "../../Theme/tokens/builders/accentText.js";
7
+ import { liftToContrast } from "../../Theme/tokens/builders/outlineRung.js";
8
+ import { AA_NORMAL_TEXT } from "../../Theme/tokens/builders/accentText.js";
9
+ import { CATEGORICAL_SERIES } from "../../Theme/tokens/builders/chartColorsFromTheme.js";
10
+ import { resolveAvatarFill } from "../../Theme/tokens/builders/statusTone.js";
11
+ import { avatarColor } from "../OrgSwitcher/OrgSwitcherProps.js";
12
+ import { appInitials } from "./AppSwitcherProps.js";
13
+ // The app's own hue at 85% strength — the solid mark, softened just off full saturation.
14
+ const FILL_STRENGTH = 0.85;
15
+ /**
16
+ * One hue per app. `avatarColor` hashes into an 8-hue series, so six apps collide more often than
17
+ * not — Billing and Account shipped identical marks. Assigned over the WHOLE list, never the
18
+ * filtered one, so searching cannot repaint a mark.
19
+ */
20
+ export const assignAppHues = (apps, mode) => {
21
+ const ramp = CATEGORICAL_SERIES[mode].map(resolveAvatarFill);
22
+ const taken = new Set(apps.flatMap((a) => (a.color ? [a.color] : [])));
23
+ return apps.map((app) => {
24
+ if (app.color)
25
+ return app.color;
26
+ const seed = avatarColor(app.id || app.name, mode);
27
+ const start = Math.max(0, ramp.indexOf(seed));
28
+ for (let i = 0; i < ramp.length; i += 1) {
29
+ const next = ramp[(start + i) % ramp.length];
30
+ if (!taken.has(next)) {
31
+ taken.add(next);
32
+ return next;
33
+ }
34
+ }
35
+ // More apps than the series has hues; past this point a repeat is unavoidable.
36
+ return seed;
37
+ });
38
+ };
39
+ // Softening costs the fill contrast, so it is walked back until a WHITE glyph clears AA — every
40
+ // mark keeps the same white icon instead of some flipping to black.
41
+ export const appTint = (hue, surface, white) => liftToContrast(mix(hue, surface, 1 - FILL_STRENGTH), white, AA_NORMAL_TEXT);
42
+ export const appTintInk = (fill, white, black) => onFilled(fill, white, black);
43
+ const AppMark = ({ app, hue, boxSize, iconSize, muted = false, }) => {
44
+ const { colors } = useCustomTheme();
45
+ if (app.iconUrl) {
46
+ return (_jsx(Image, { src: app.iconUrl, alt: "", boxSize: boxSize, borderRadius: "lg", objectFit: "cover", flexShrink: 0, opacity: muted ? 0.55 : 1 }));
47
+ }
48
+ const surface = colors.backgroundColor.light;
49
+ const fill = muted ? colors.backgroundColor.quaternary : appTint(hue, surface, colors.white);
50
+ const ink = muted ? colors.textMuted : appTintInk(fill, colors.white, colors.black);
51
+ // lucide icons are forwardRef objects, not functions — a typeof check silently drops them.
52
+ const isElement = isValidElement(app.icon);
53
+ const Icon = !isElement && app.icon ? app.icon : null;
54
+ return (_jsx(Flex, { align: "center", justify: "center", boxSize: boxSize, borderRadius: "lg", flexShrink: 0, bg: fill, color: ink, fontSize: `${Math.round(iconSize * 0.72)}px`, fontWeight: 700, "aria-hidden": true, children: Icon ? (_jsx(Icon, { size: iconSize, color: ink })) : isValidElement(app.icon) ? (_jsx(Box, { display: "flex", color: ink, children: app.icon })) : (appInitials(app.name)) }));
55
+ };
56
+ export default AppMark;
@@ -0,0 +1,243 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { Box, Flex, Input, InputGroup, InputLeftElement, Popover, PopoverBody, PopoverContent, PopoverTrigger, Skeleton, Text, useDisclosure, } from "@chakra-ui/react";
4
+ import { Grip, Lock, Search } from "lucide-react";
5
+ import { useCustomTheme } from "../../Theme/useCustomTheme.js";
6
+ import { chartMode } from "../../Theme/tokens/builders/chartColorsFromTheme.js";
7
+ import { AA_NORMAL_TEXT } from "../../Theme/tokens/builders/accentText.js";
8
+ import { liftToContrast, neutralStep, ruleInk, AA_NON_TEXT, CHROME_RULE, MIN_PERCEPTIBLE_STEP, } from "../../Theme/tokens/builders/outlineRung.js";
9
+ import { listRowBackgrounds } from "../../Theme/tokens/builders/rowStates.js";
10
+ import { useExclusiveOverlay } from "../../Hooks/useExclusiveOverlay.js";
11
+ import AppMark, { assignAppHues } from "./AppMark.js";
12
+ import { filterApps, formatShortcut, } from "./AppSwitcherProps.js";
13
+ import { useAppSwitcherShortcut } from "./useAppSwitcherShortcut.js";
14
+ const COLUMNS = 2;
15
+ const HEADING = "Your apps";
16
+ const s = { trigger: "36px", mark: "32px", icon: 17, name: "0.875rem", sub: "0.75rem", row: "52px" };
17
+ const warned = new Set();
18
+ const warnOnce = (key, message) => {
19
+ if (process.env.NODE_ENV === "production" || warned.has(key))
20
+ return;
21
+ warned.add(key);
22
+ console.error(`[AppSwitcher] ${message}`);
23
+ };
24
+ const validate = (apps) => {
25
+ const seen = new Set();
26
+ apps.forEach((app, i) => {
27
+ var _a;
28
+ if (!app.id)
29
+ warnOnce(`id-${i}`, `apps[${i}] ("${(_a = app.name) !== null && _a !== void 0 ? _a : "unnamed"}") has no id.`);
30
+ else if (seen.has(app.id))
31
+ warnOnce(`dup-${app.id}`, `duplicate app id "${app.id}".`);
32
+ else
33
+ seen.add(app.id);
34
+ if (!app.url && !app.locked)
35
+ warnOnce(`url-${app.id || i}`, `app "${app.name}" has no url; it cannot be opened.`);
36
+ });
37
+ };
38
+ // Flip back to true to restore `searchThreshold` opening the field on its own.
39
+ const SEARCH_OPENS_BY_COUNT = false;
40
+ const AppSwitcher = ({ apps, currentAppId, onSelect, onOpenChange, isSearchable, searchThreshold = 8, shortcut = null, showShortcutHint = true, hideWhenAlone = true, emptyMessage = "No app matches that name.", footer, ariaLabel = "Switch app", panelWidth, maxHeight = "24rem", isLoading = false, }) => {
41
+ const theme = useCustomTheme();
42
+ const { isOpen, onOpen, onClose } = useDisclosure();
43
+ const requestExclusiveOpen = useExclusiveOverlay(isOpen, onClose);
44
+ const [query, setQuery] = useState("");
45
+ const [activeIndex, setActiveIndex] = useState(0);
46
+ const searchRef = useRef(null);
47
+ const triggerRef = useRef(null);
48
+ const itemRefs = useRef([]);
49
+ const typeahead = useRef({ buffer: "", at: 0 });
50
+ useEffect(() => validate(apps), [apps]);
51
+ // Search is off while the panel's design settles: the app count alone no longer opens it. An
52
+ // explicit `isSearchable` still wins, so nothing about the prop changed.
53
+ const showSearch = isSearchable !== null && isSearchable !== void 0 ? isSearchable : (SEARCH_OPENS_BY_COUNT && apps.length >= searchThreshold);
54
+ const hues = useMemo(() => assignAppHues(apps, chartMode(theme.colors)), [apps, theme.colors]);
55
+ const visible = useMemo(() => filterApps(apps, query), [apps, query]);
56
+ const setOpen = useCallback((next) => {
57
+ if (next) {
58
+ requestExclusiveOpen();
59
+ onOpen();
60
+ }
61
+ else {
62
+ onClose();
63
+ }
64
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(next);
65
+ }, [onOpen, onClose, onOpenChange, requestExclusiveOpen]);
66
+ const closeAndRefocus = useCallback(() => {
67
+ var _a;
68
+ setOpen(false);
69
+ setQuery("");
70
+ (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
71
+ }, [setOpen]);
72
+ useAppSwitcherShortcut(shortcut, () => setOpen(true), !isOpen);
73
+ useEffect(() => {
74
+ if (!isOpen)
75
+ setQuery("");
76
+ setActiveIndex(0);
77
+ }, [isOpen]);
78
+ useEffect(() => setActiveIndex(0), [query]);
79
+ const focusItem = useCallback((next) => {
80
+ var _a;
81
+ setActiveIndex(next);
82
+ (_a = itemRefs.current[next]) === null || _a === void 0 ? void 0 : _a.focus();
83
+ }, []);
84
+ // Read the focused row, not state: two keydowns in one React batch would both compute from a
85
+ // stale activeIndex, so holding an arrow key silently dropped moves.
86
+ const currentIndex = useCallback(() => {
87
+ const focused = itemRefs.current.findIndex((el) => el === document.activeElement);
88
+ return focused === -1 ? activeIndex : focused;
89
+ }, [activeIndex]);
90
+ const step = useCallback((delta) => {
91
+ const count = visible.length;
92
+ if (count === 0)
93
+ return;
94
+ focusItem(((currentIndex() + delta) % count + count) % count);
95
+ }, [currentIndex, visible.length, focusItem]);
96
+ const jumpToLetter = useCallback((char) => {
97
+ const now = Date.now();
98
+ const buffer = now - typeahead.current.at < 600 ? typeahead.current.buffer + char : char;
99
+ typeahead.current = { buffer, at: now };
100
+ const at = currentIndex();
101
+ const from = buffer.length > 1 ? at : at + 1;
102
+ const order = visible.map((_, i) => (from + i) % visible.length);
103
+ const hit = order.find((i) => visible[i].name.toLowerCase().startsWith(buffer));
104
+ if (hit !== undefined)
105
+ focusItem(hit);
106
+ }, [visible, currentIndex, focusItem]);
107
+ // Chakra parks focus on the panel itself, where no arrow handler lives; route the first press in.
108
+ const handlePanelKeyDown = useCallback((e) => {
109
+ if (itemRefs.current.includes(document.activeElement))
110
+ return;
111
+ if (visible.length === 0)
112
+ return;
113
+ if (["ArrowDown", "ArrowRight", "Home"].includes(e.key)) {
114
+ e.preventDefault();
115
+ focusItem(0);
116
+ }
117
+ else if (["ArrowUp", "ArrowLeft", "End"].includes(e.key)) {
118
+ e.preventDefault();
119
+ focusItem(visible.length - 1);
120
+ }
121
+ else if (e.key === "Escape") {
122
+ e.preventDefault();
123
+ closeAndRefocus();
124
+ }
125
+ }, [visible.length, focusItem, closeAndRefocus]);
126
+ const handleItemKeyDown = useCallback((e, app) => {
127
+ if (e.key === "ArrowDown") {
128
+ e.preventDefault();
129
+ step(COLUMNS);
130
+ }
131
+ else if (e.key === "ArrowUp") {
132
+ e.preventDefault();
133
+ step(-COLUMNS);
134
+ }
135
+ else if (e.key === "ArrowRight") {
136
+ e.preventDefault();
137
+ step(1);
138
+ }
139
+ else if (e.key === "ArrowLeft") {
140
+ e.preventDefault();
141
+ step(-1);
142
+ }
143
+ else if (e.key === "Home") {
144
+ e.preventDefault();
145
+ focusItem(0);
146
+ }
147
+ else if (e.key === "End") {
148
+ e.preventDefault();
149
+ focusItem(visible.length - 1);
150
+ }
151
+ else if (e.key === "Escape") {
152
+ e.preventDefault();
153
+ closeAndRefocus();
154
+ }
155
+ else if (e.key === " " && !app.locked) {
156
+ e.preventDefault();
157
+ e.currentTarget.click();
158
+ }
159
+ else if (e.key.length === 1 && !e.metaKey && !e.ctrlKey && !e.altKey)
160
+ jumpToLetter(e.key.toLowerCase());
161
+ }, [step, focusItem, visible.length, closeAndRefocus, jumpToLetter]);
162
+ const handleSelect = (app, e) => {
163
+ if (app.locked) {
164
+ e.preventDefault();
165
+ return;
166
+ }
167
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(app, e);
168
+ if (!e.defaultPrevented)
169
+ setOpen(false);
170
+ };
171
+ const nothingToSwitchTo = apps.length === 0 || (hideWhenAlone && apps.every((a) => a.id === currentAppId));
172
+ if (nothingToSwitchTo)
173
+ return null;
174
+ const rowHoverBg = listRowBackgrounds(theme.colors).active;
175
+ const footerRule = ruleInk(theme.colors.boxborder[200], [theme.colors.backgroundColor.subtle], CHROME_RULE);
176
+ // Neutral, not `backgroundColor.tertiary`: that rung is brand-tinted in the hand-authored light
177
+ // palettes, so lifting it painted the row a saturated block. The rail identifies the row, so the
178
+ // fill only has to be perceptible — pushed further it is a mid-grey slab that reads disabled.
179
+ const currentBg = neutralStep(theme.colors.backgroundColor.light, MIN_PERCEPTIBLE_STEP);
180
+ // The brand rail is the whole marker — no ring, no badge. `accentText` already clears AA as ink
181
+ // on the canvas; lifting it to AA_NON_TEXT here guarantees it on the row's own fill too, for a
182
+ // brand whose accent is pale.
183
+ const currentBar = liftToContrast(theme.colors.accentText, currentBg, AA_NON_TEXT);
184
+ // A derived surface is outside what `withSurfaceRungs` settled, so its ink is resolved here.
185
+ const currentName = liftToContrast(theme.colors.text[900], currentBg, AA_NORMAL_TEXT);
186
+ const currentSub = liftToContrast(theme.colors.textMuted, currentBg, AA_NORMAL_TEXT);
187
+ const width = panelWidth !== null && panelWidth !== void 0 ? panelWidth : "28rem";
188
+ const hint = shortcut && showShortcutHint ? formatShortcut(shortcut) : null;
189
+ return (_jsxs(Popover, { isOpen: isOpen, onOpen: () => setOpen(true), onClose: () => { setOpen(false); setQuery(""); }, placement: "bottom-end", initialFocusRef: showSearch ? searchRef : undefined, isLazy: true, children: [_jsx(PopoverTrigger, { children: _jsx(Flex, { ref: triggerRef, as: "button", type: "button", "aria-label": ariaLabel, align: "center", justify: "center", boxSize: s.trigger, borderRadius: "lg", border: "1px solid", borderColor: isOpen ? theme.colors.boxborder[500] : theme.colors.boxborder[200], bg: isOpen ? theme.colors.backgroundColor.tertiary : "transparent", color: isOpen ? theme.colors.text[900] : theme.colors.textMuted, cursor: "pointer", transition: "background 0.15s ease, border-color 0.15s ease", _hover: { bg: rowHoverBg, color: theme.colors.text[900] }, onKeyDown: (e) => {
190
+ if (!isOpen) {
191
+ if (e.key === "ArrowDown") {
192
+ e.preventDefault();
193
+ setOpen(true);
194
+ }
195
+ return;
196
+ }
197
+ handlePanelKeyDown(e);
198
+ }, children: _jsx(Grip, { size: s.icon + 1 }) }) }), _jsx(PopoverContent, { w: width, maxW: "calc(100vw - 1.5rem)", textAlign: "start", onKeyDown: handlePanelKeyDown, bg: theme.colors.backgroundColor.light, borderRadius: "xl", overflow: "hidden", boxShadow: `0 10px 30px ${theme.colors.boxShadow.default}`, _focus: { outline: "none", boxShadow: `0 10px 30px ${theme.colors.boxShadow.default}` }, children: _jsxs(PopoverBody, { p: 0, children: [_jsxs(Flex, { align: "center", gap: 2, px: 3, pt: 3, pb: showSearch ? 2 : 1, children: [_jsx(Text, { fontSize: "0.6875rem", fontWeight: 600, letterSpacing: "0.08em", textTransform: "uppercase", color: theme.colors.textMuted, children: HEADING }), _jsx(Box, { flex: "1" }), hint && (_jsx(Text, { as: "kbd", fontSize: "0.6875rem", fontFamily: "inherit", color: theme.colors.textMuted, border: "1px solid", borderRadius: "base", px: 1.5, py: 0.5, children: hint }))] }), showSearch && (_jsx(Box, { px: 3, pb: 2, children: _jsxs(InputGroup, { size: "sm", children: [_jsx(InputLeftElement, { pointerEvents: "none", children: _jsx(Search, { size: 15, color: theme.colors.textMuted }) }), _jsx(Input, { ref: searchRef, value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Search apps", borderRadius: "lg", "aria-label": "Search apps", onKeyDown: (e) => {
199
+ if (e.key === "ArrowDown" && visible.length > 0) {
200
+ e.preventDefault();
201
+ focusItem(0);
202
+ }
203
+ else if (e.key === "Escape") {
204
+ e.preventDefault();
205
+ if (query)
206
+ setQuery("");
207
+ else
208
+ closeAndRefocus();
209
+ }
210
+ } })] }) })), _jsxs(Box, { role: "menu", "aria-label": HEADING, maxH: maxHeight, overflowY: "auto", px: 2, pb: 2, display: "grid", gridTemplateColumns: `repeat(${COLUMNS}, minmax(0, 1fr))`, gap: "2px", children: [isLoading
211
+ ? [0, 1, 2, 3].map((i) => (_jsxs(Flex, { align: "center", gap: 3, px: 2, py: 2, minH: s.row, children: [_jsx(Skeleton, { boxSize: s.mark, borderRadius: "lg" }), _jsx(Skeleton, { h: "0.75rem", flex: "1", borderRadius: "base" })] }, i)))
212
+ : visible.map((app, idx) => {
213
+ var _a;
214
+ const isCurrent = app.id === currentAppId;
215
+ const interactive = !isCurrent && !app.locked;
216
+ return (_jsxs(Flex, { as: interactive ? "a" : "div", role: "menuitem", ref: (el) => { itemRefs.current[idx] = el; }, tabIndex: idx === activeIndex ? 0 : -1, "aria-current": isCurrent ? "true" : undefined, "aria-disabled": app.locked ? true : undefined, title: app.locked ? ((_a = app.lockedReason) !== null && _a !== void 0 ? _a : `${app.name} is not available on your plan`) : undefined, ...(interactive
217
+ ? {
218
+ href: app.url,
219
+ target: "_blank",
220
+ rel: "noopener noreferrer",
221
+ }
222
+ : {}), align: "center", gap: 3, minH: s.row, px: 2, py: 2, borderRadius: "lg", textDecoration: "none", cursor: interactive ? "pointer" : "default", bg: isCurrent ? currentBg : "transparent", position: "relative",
223
+ // Full height, taking the row's own `lg` radius on its outer corners so the
224
+ // rail follows the row's curve instead of cutting across it.
225
+ _before: isCurrent
226
+ ? {
227
+ content: '""',
228
+ position: "absolute",
229
+ insetInlineStart: 0,
230
+ insetBlock: 0,
231
+ width: "3px",
232
+ borderStartStartRadius: "lg",
233
+ borderEndStartRadius: "lg",
234
+ bg: currentBar,
235
+ }
236
+ : undefined, transition: "background 0.12s ease", _hover: interactive ? { bg: rowHoverBg } : undefined, onClick: (e) => handleSelect(app, e), onKeyDown: (e) => handleItemKeyDown(e, app), children: [_jsx(AppMark, { app: app, hue: hues[apps.indexOf(app)], boxSize: s.mark, iconSize: s.icon, muted: app.locked }), _jsxs(Box, { flex: "1", minW: 0, children: [_jsxs(Flex, { align: "center", gap: 1.5, children: [_jsx(Text, { fontSize: s.name, fontWeight: 600, color: app.locked
237
+ ? theme.colors.textMuted
238
+ : isCurrent
239
+ ? currentName
240
+ : theme.colors.text[900], overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", children: app.name }), app.badge !== undefined && !isCurrent && (_jsx(Text, { fontSize: "0.625rem", fontWeight: 600, color: theme.colors.semanticText.info, flexShrink: 0, children: app.badge }))] }), app.description && (_jsx(Text, { fontSize: s.sub, color: isCurrent ? currentSub : theme.colors.textMuted, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", children: app.description }))] }), app.locked && (_jsx(Box, { as: Lock, size: 14, color: theme.colors.textMuted, flexShrink: 0 }))] }, app.id || app.name));
241
+ }), !isLoading && visible.length === 0 && (_jsx(Box, { gridColumn: `span ${COLUMNS}`, px: 2, py: 6, textAlign: "center", children: _jsx(Text, { fontSize: s.name, color: theme.colors.textMuted, children: emptyMessage }) }))] }), footer && (_jsx(Flex, { align: "center", gap: 1.5, px: 3, py: 2.5, borderTop: "1px solid", borderTopColor: footerRule, bg: theme.colors.backgroundColor.subtle, children: footer }))] }) })] }));
242
+ };
243
+ export default AppSwitcher;
@@ -0,0 +1,78 @@
1
+ const NON_WORD = /[^\p{L}\p{N}]+/u;
2
+ /** Up to two initials, so a mark stays legible without an icon. */
3
+ export const appInitials = (name) => {
4
+ const words = name.trim().split(NON_WORD).filter(Boolean);
5
+ if (words.length === 0)
6
+ return "?";
7
+ if (words.length === 1)
8
+ return words[0].slice(0, 2).toUpperCase();
9
+ return (words[0][0] + words[1][0]).toUpperCase();
10
+ };
11
+ export const filterApps = (apps, query) => {
12
+ const q = query.trim().toLowerCase();
13
+ if (!q)
14
+ return apps;
15
+ return apps.filter((app) => {
16
+ var _a, _b;
17
+ return [app.name, (_a = app.description) !== null && _a !== void 0 ? _a : "", ...((_b = app.keywords) !== null && _b !== void 0 ? _b : [])]
18
+ .join(" ")
19
+ .toLowerCase()
20
+ .includes(q);
21
+ });
22
+ };
23
+ /** "mod" is Cmd on Apple platforms and Ctrl everywhere else. */
24
+ export const matchesShortcut = (event, shortcut, isApple = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.platform)) => {
25
+ const parts = shortcut.toLowerCase().split("+").map((p) => p.trim()).filter(Boolean);
26
+ if (parts.length === 0)
27
+ return false;
28
+ const key = parts[parts.length - 1];
29
+ const mods = new Set(parts.slice(0, -1));
30
+ const wantsMod = mods.has("mod");
31
+ const wantsCtrl = mods.has("ctrl") || (wantsMod && !isApple);
32
+ const wantsMeta = mods.has("cmd") || mods.has("meta") || (wantsMod && isApple);
33
+ if (event.ctrlKey !== wantsCtrl)
34
+ return false;
35
+ if (event.metaKey !== wantsMeta)
36
+ return false;
37
+ if (event.shiftKey !== mods.has("shift"))
38
+ return false;
39
+ if (event.altKey !== mods.has("alt"))
40
+ return false;
41
+ return event.key.toLowerCase() === key;
42
+ };
43
+ const APPLE_SYMBOLS = { mod: "⌘", cmd: "⌘", meta: "⌘", ctrl: "⌃", shift: "⇧", alt: "⌥" };
44
+ const OTHER_LABELS = { mod: "Ctrl", cmd: "Win", meta: "Win", ctrl: "Ctrl", shift: "Shift", alt: "Alt" };
45
+ export const formatShortcut = (shortcut, isApple = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.platform)) => {
46
+ const parts = shortcut.toLowerCase().split("+").map((p) => p.trim()).filter(Boolean);
47
+ const table = isApple ? APPLE_SYMBOLS : OTHER_LABELS;
48
+ const rendered = parts.map((p, i) => { var _a; return i === parts.length - 1 ? p.toUpperCase() : ((_a = table[p]) !== null && _a !== void 0 ? _a : p.toUpperCase()); });
49
+ return isApple ? rendered.join("") : rendered.join("+");
50
+ };
51
+ /**
52
+ * Derives every app's origin from the host the consumer is already served on, so one deployment
53
+ * variable keeps dev, test and prod in step. An app may still carry its own `url`, which wins.
54
+ */
55
+ export const buildSuiteApps = (apps, { baseUrl, baseSubdomain }) => {
56
+ let base;
57
+ try {
58
+ base = new URL(baseUrl.trim());
59
+ }
60
+ catch {
61
+ throw new Error(`[AppSwitcher] buildSuiteApps: baseUrl ${JSON.stringify(baseUrl)} is not an absolute URL.`);
62
+ }
63
+ const labels = base.hostname.split(".");
64
+ const at = labels.indexOf(baseSubdomain);
65
+ return apps.map(({ subdomain, url, ...app }) => {
66
+ if (url)
67
+ return { ...app, url: url.trim() };
68
+ // Without the label there is nothing to swap, and every app would silently share one origin.
69
+ if (at === -1) {
70
+ throw new Error(`[AppSwitcher] buildSuiteApps: ${JSON.stringify(baseSubdomain)} is not a label in ` +
71
+ `"${base.hostname}", so ${JSON.stringify(app.name)} has no derivable url. ` +
72
+ `Give that app an explicit url, or pass a baseUrl that contains the label.`);
73
+ }
74
+ const next = new URL(base.toString());
75
+ next.hostname = labels.map((l, i) => (i === at ? subdomain : l)).join(".");
76
+ return { ...app, url: next.origin };
77
+ });
78
+ };
@@ -0,0 +1,27 @@
1
+ import { useEffect } from "react";
2
+ import { matchesShortcut } from "./AppSwitcherProps.js";
3
+ const isTypingTarget = (target) => {
4
+ if (!(target instanceof HTMLElement))
5
+ return false;
6
+ if (target.isContentEditable)
7
+ return true;
8
+ return ["INPUT", "TEXTAREA", "SELECT"].includes(target.tagName);
9
+ };
10
+ /** Fires `onTrigger` on the shortcut. Inert when `shortcut` is null, and never in SSR. */
11
+ export const useAppSwitcherShortcut = (shortcut, onTrigger, enabled = true) => {
12
+ useEffect(() => {
13
+ if (!shortcut || !enabled || typeof window === "undefined")
14
+ return undefined;
15
+ const handler = (event) => {
16
+ if (event.defaultPrevented || isTypingTarget(event.target))
17
+ return;
18
+ if (!matchesShortcut(event, shortcut))
19
+ return;
20
+ event.preventDefault();
21
+ onTrigger();
22
+ };
23
+ window.addEventListener("keydown", handler);
24
+ return () => window.removeEventListener("keydown", handler);
25
+ }, [shortcut, enabled, onTrigger]);
26
+ };
27
+ export default useAppSwitcherShortcut;
@@ -5,13 +5,14 @@ import { ThemesList } from "../../Theme/index.js";
5
5
  import { ThemeSwitcher } from "../../Theme/provider/index.js";
6
6
  import { FONT_SIZE_OPTIONS } from "../../Theme/provider/fontSize.js";
7
7
  import { lightPalettes } from "../../Theme/tokens/brands/index.js";
8
+ import { CHROME_RULE, ruleInk } from "../../Theme/tokens/builders/outlineRung.js";
8
9
  import { useCustomTheme } from "../../Theme/useCustomTheme.js";
9
10
  import SelectV2 from "../SelectV2/SelectV2.js";
10
11
  const FieldLabel = ({ children }) => {
11
12
  const { colors } = useCustomTheme();
12
13
  return (_jsx(Text, { fontSize: "sm", fontWeight: "medium", color: colors.textMuted, mb: 2, children: children }));
13
14
  };
14
- const brandSwatch = (name, colors) => (_jsx(Box, { w: "14px", h: "14px", borderRadius: "full", bg: lightPalettes[name].primary[500], border: "1px solid", borderColor: colors.boxborder[500] }));
15
+ const brandSwatch = (name, colors) => (_jsx(Box, { w: "14px", h: "14px", borderRadius: "full", bg: lightPalettes[name].primary[500], border: "1px solid", borderColor: ruleInk(colors.boxborder[200], [colors.backgroundColor.light, colors.backgroundColor.tertiary], CHROME_RULE) }));
15
16
  export const AppearanceSettings = ({ brand, fontSize, onBrandChange, onFontSizeChange, showBrand = true, showColorMode = true, showFontSize = true, size = "sm", labels, }) => {
16
17
  var _a, _b, _c;
17
18
  const { colors } = useCustomTheme();
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { memo } from "react";
2
+ import { forwardRef, memo } from "react";
3
3
  import { Button as ChakraButton } from "@chakra-ui/react";
4
- function Button({ label, children, onClick, opacity, variant = "solid", leftIcon, rightIcon, size, isDisabled = false, isLoading = false, loadingText = "Loading", type, width, sx, colorScheme, ref, border, borderRadius, onMouseEnter, onMouseLeave, ...aria }) {
5
- return (_jsx(ChakraButton, { ...aria, type: type, onClick: onClick, width: width || "fit-content", variant: variant, size: size, isLoading: isLoading, isDisabled: isDisabled, loadingText: loadingText, leftIcon: leftIcon, rightIcon: rightIcon, ref: ref, colorScheme: colorScheme, sx: sx, opacity: opacity, border: border, borderRadius: borderRadius, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: children !== null && children !== void 0 ? children : label }));
6
- }
4
+ const Button = forwardRef(function Button({ label, children, onClick, opacity, variant = "solid", leftIcon, rightIcon, size, isDisabled = false, isLoading = false, loadingText = "Loading", type, width, w, sx, colorScheme, border, borderRadius, onMouseEnter, onMouseLeave, ...aria }, ref) {
5
+ const isIconOnly = !children && !label && !!(leftIcon || rightIcon);
6
+ return (_jsx(ChakraButton, { ...aria, type: type, onClick: onClick, width: width || w || "fit-content", variant: variant, size: size, isLoading: isLoading, isDisabled: isDisabled, loadingText: loadingText, leftIcon: leftIcon, rightIcon: rightIcon, iconSpacing: isIconOnly ? 0 : undefined, ref: ref, colorScheme: colorScheme, sx: sx, opacity: opacity, border: border, borderRadius: borderRadius, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: children !== null && children !== void 0 ? children : label }));
7
+ });
7
8
  export default memo(Button);