pixelize-design-library 2.4.2-beta.61 → 2.4.2-beta.62

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 (503) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/COMPONENT-GOTCHAS.md +119 -1
  3. package/dist/Components/Accordion/Accordion.js +2 -2
  4. package/dist/Components/AddressCard/AddressCard.js +2 -1
  5. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -1
  6. package/dist/Components/AppSwitcher/AppSwitcher.js +1 -1
  7. package/dist/Components/AppearanceSettings/AppearanceSettings.js +1 -1
  8. package/dist/Components/AudioRecorder/AudioRecorder.js +2 -1
  9. package/dist/Components/Avatar/Avatar.d.ts +2 -1
  10. package/dist/Components/Avatar/Avatar.js +5 -3
  11. package/dist/Components/Backdrop/Backdrop.js +1 -1
  12. package/dist/Components/BagBar/BagBar.js +2 -1
  13. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +1 -1
  14. package/dist/Components/CalendarGrid/CalendarGrid.js +5 -5
  15. package/dist/Components/CalendarGrid/calendarMath.js +18 -6
  16. package/dist/Components/Card/PaymentCard/PaymentCard.js +6 -5
  17. package/dist/Components/CartItem/CartItem.js +2 -1
  18. package/dist/Components/Checkbox/Checkbox.d.ts +18 -3
  19. package/dist/Components/Checkbox/Checkbox.js +9 -7
  20. package/dist/Components/CheckoutKit/selectable.js +1 -1
  21. package/dist/Components/ChoiceCard/ChoiceCard.d.ts +3 -0
  22. package/dist/Components/ChoiceCard/ChoiceCard.js +16 -0
  23. package/dist/Components/ChoiceCard/ChoiceCardGroup.d.ts +3 -0
  24. package/dist/Components/ChoiceCard/ChoiceCardGroup.js +6 -0
  25. package/dist/Components/ChoiceCard/ChoiceCardProps.d.ts +28 -0
  26. package/dist/Components/ChoiceCard/ChoiceCardProps.js +2 -0
  27. package/dist/Components/CircularProgress/CircularProgress.js +4 -8
  28. package/dist/Components/CircularProgress/CircularProgressProps.d.ts +5 -3
  29. package/dist/Components/CircularProgress/arc.d.ts +9 -1
  30. package/dist/Components/CircularProgress/arc.js +15 -1
  31. package/dist/Components/Common/FormLabel.js +1 -1
  32. package/dist/Components/Common/FormattedDescription.js +1 -1
  33. package/dist/Components/Common/HelperText.d.ts +5 -4
  34. package/dist/Components/Common/HelperText.js +10 -7
  35. package/dist/Components/Common/fieldStyles.d.ts +4 -4
  36. package/dist/Components/Common/fieldStyles.js +2 -1
  37. package/dist/Components/ContactForm/ContactForm.js +1 -1
  38. package/dist/Components/CopyButton/CopyButton.js +12 -5
  39. package/dist/Components/CouponField/CouponField.js +4 -3
  40. package/dist/Components/CustomModulesTable/CustomModulesTableProps.d.ts +18 -0
  41. package/dist/Components/CustomModulesTable/EditModuleModal.js +1 -1
  42. package/dist/Components/DatePicker/CalendarPanel.js +2 -2
  43. package/dist/Components/DatePicker/DatePicker.js +8 -2
  44. package/dist/Components/DatePicker/RangeDatePicker.d.ts +9 -3
  45. package/dist/Components/DatePicker/RangeDatePicker.js +6 -5
  46. package/dist/Components/DatePicker/SingleDatePicker.d.ts +9 -5
  47. package/dist/Components/DatePicker/SingleDatePicker.js +7 -4
  48. package/dist/Components/DatePicker/ThemeDatePicker.d.ts +8 -4
  49. package/dist/Components/DatePicker/ThemeDatePicker.js +9 -6
  50. package/dist/Components/DatePicker/TimeOnlyPicker.d.ts +9 -5
  51. package/dist/Components/DatePicker/TimeOnlyPicker.js +6 -4
  52. package/dist/Components/DatePicker/TimePickerInput.d.ts +2 -2
  53. package/dist/Components/DatePicker/TimePickerInput.js +6 -5
  54. package/dist/Components/DescriptionList/DescriptionList.d.ts +1 -1
  55. package/dist/Components/DescriptionList/DescriptionList.js +3 -3
  56. package/dist/Components/DescriptionList/DescriptionListProps.d.ts +3 -3
  57. package/dist/Components/Dropdown/DropDown.js +12 -4
  58. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +2 -1
  59. package/dist/Components/EmptyState/EmptyState.js +2 -2
  60. package/dist/Components/EmptyState/EmptyStateProps.d.ts +3 -3
  61. package/dist/Components/FileUpload/FileUpload.js +21 -15
  62. package/dist/Components/FileUpload/useObjectUrl.d.ts +1 -0
  63. package/dist/Components/FileUpload/useObjectUrl.js +14 -0
  64. package/dist/Components/FileUploader/FileUploader.js +9 -3
  65. package/dist/Components/FileUploader/FileUploaderProps.d.ts +8 -0
  66. package/dist/Components/FilterBar/FilterBar.d.ts +1 -1
  67. package/dist/Components/FilterBar/FilterBar.js +2 -2
  68. package/dist/Components/FilterBar/FilterBarProps.d.ts +3 -3
  69. package/dist/Components/FilterSidebar/FilterSidebar.js +10 -6
  70. package/dist/Components/Form/FormWrapper.js +1 -1
  71. package/dist/Components/FormField/FormField.d.ts +3 -0
  72. package/dist/Components/FormField/FormField.js +57 -0
  73. package/dist/Components/FormField/FormFieldProps.d.ts +33 -0
  74. package/dist/Components/FormField/FormFieldProps.js +2 -0
  75. package/dist/Components/Header/HeaderActions.js +2 -2
  76. package/dist/Components/Header/components/mobileMenu.js +1 -1
  77. package/dist/Components/IconButton/IconButton.d.ts +5 -0
  78. package/dist/Components/IconButton/IconButton.js +24 -0
  79. package/dist/Components/IconButton/IconButtonProps.d.ts +10 -0
  80. package/dist/Components/IconButton/IconButtonProps.js +2 -0
  81. package/dist/Components/Input/PhoneNumberInput.js +14 -0
  82. package/dist/Components/Input/PhoneNumberInputProps.d.ts +1 -0
  83. package/dist/Components/KanbanBoard/AccountCard.js +3 -2
  84. package/dist/Components/KanbanBoard/AccountRow.js +1 -1
  85. package/dist/Components/KanbanBoard/KanbanBoard.js +56 -39
  86. package/dist/Components/KanbanBoard/MeasuredItem.js +6 -14
  87. package/dist/Components/KanbanBoard/boardStore.d.ts +8 -0
  88. package/dist/Components/KanbanBoard/boardStore.js +27 -0
  89. package/dist/Components/Kbd/Kbd.js +1 -1
  90. package/dist/Components/LimitReachedModal/LimitReachedModal.js +1 -1
  91. package/dist/Components/Loading/Loading.js +1 -1
  92. package/dist/Components/MediaGallery/MediaGallery.js +1 -1
  93. package/dist/Components/MediaGallery/MediaLightbox.js +2 -1
  94. package/dist/Components/MediaGallery/glass.js +2 -1
  95. package/dist/Components/MediaViewer/MediaViewer.js +1 -1
  96. package/dist/Components/MediaViewer/components/MediaAudioPlayer.js +7 -7
  97. package/dist/Components/MediaViewer/components/MediaImageViewer.js +1 -1
  98. package/dist/Components/MediaViewer/components/MediaScrubber.js +5 -1
  99. package/dist/Components/MediaViewer/components/MediaVideoPlayer.js +7 -7
  100. package/dist/Components/MediaViewer/components/PlaybackTimeline.d.ts +20 -0
  101. package/dist/Components/MediaViewer/components/PlaybackTimeline.js +47 -0
  102. package/dist/Components/MediaViewer/components/TileChip.js +1 -1
  103. package/dist/Components/Modal/Modal.js +1 -1
  104. package/dist/Components/MoreItems/MoreItems.js +2 -2
  105. package/dist/Components/NavigationBar/NavigationBar.js +2 -2
  106. package/dist/Components/NoteTextArea/NoteTextArea.js +18 -4
  107. package/dist/Components/NoteTextArea/NoteTextAreaProps.d.ts +12 -0
  108. package/dist/Components/Notification/Notification.js +17 -3
  109. package/dist/Components/Notification/NotificationProps.d.ts +17 -1
  110. package/dist/Components/NotificationBell/NotificationBell.js +5 -1
  111. package/dist/Components/NotificationBell/NotificationItem.js +1 -1
  112. package/dist/Components/NotificationBell/NotificationList.js +1 -1
  113. package/dist/Components/OffersList/OffersList.js +2 -1
  114. package/dist/Components/OptionChip/OptionChip.js +3 -2
  115. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
  116. package/dist/Components/OrderSummary/OrderSummary.js +5 -5
  117. package/dist/Components/OrganizationDetails/OrganizationDetails.js +7 -1
  118. package/dist/Components/PageHeader/PageHeader.d.ts +1 -1
  119. package/dist/Components/PageHeader/PageHeader.js +2 -2
  120. package/dist/Components/PageHeader/PageHeaderProps.d.ts +3 -3
  121. package/dist/Components/Pagination/Pagination.d.ts +5 -0
  122. package/dist/Components/Pagination/Pagination.js +48 -0
  123. package/dist/Components/Pagination/PaginationProps.d.ts +46 -0
  124. package/dist/Components/Pagination/PaginationProps.js +9 -0
  125. package/dist/Components/Pagination/pageWindow.d.ts +4 -0
  126. package/dist/Components/Pagination/pageWindow.js +22 -0
  127. package/dist/Components/PaymentOption/PaymentOption.js +1 -1
  128. package/dist/Components/PersonChip/PersonChip.js +2 -2
  129. package/dist/Components/PinInput/PinInput.d.ts +1 -1
  130. package/dist/Components/PinInput/PinInput.js +17 -2
  131. package/dist/Components/PinInput/PinInputProps.d.ts +9 -1
  132. package/dist/Components/PincodeChecker/PincodeChecker.js +4 -4
  133. package/dist/Components/PlanPill/PlanPill.js +2 -1
  134. package/dist/Components/PriceBlock/PriceBlock.js +3 -3
  135. package/dist/Components/Primitives/Primitives.d.ts +2 -2
  136. package/dist/Components/Primitives/Primitives.js +2 -3
  137. package/dist/Components/ProductBadges/ProductBadges.js +2 -1
  138. package/dist/Components/ProductCard/ProductCard.js +1 -1
  139. package/dist/Components/ProductCard/ProductCardAction.js +2 -2
  140. package/dist/Components/ProductCard/ProductCardSwatches.js +2 -1
  141. package/dist/Components/ProductCard/cardMetrics.d.ts +1 -1
  142. package/dist/Components/ProductCard/cardMetrics.js +5 -1
  143. package/dist/Components/ProfileCard/ProfileCardProps.d.ts +11 -0
  144. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +3 -2
  145. package/dist/Components/QuantityStepper/QuantityStepper.js +2 -1
  146. package/dist/Components/RadioButton/RadioButton.d.ts +11 -2
  147. package/dist/Components/RadioButton/RadioButton.js +9 -6
  148. package/dist/Components/RangeSlider/RangeSlider.js +3 -3
  149. package/dist/Components/Rating/Rating.js +2 -1
  150. package/dist/Components/Reorder/Reorder.js +3 -2
  151. package/dist/Components/ReviewList/ReviewList.js +3 -3
  152. package/dist/Components/ReviewSummary/ReviewSummary.js +3 -3
  153. package/dist/Components/SaveBar/SaveBar.d.ts +1 -1
  154. package/dist/Components/SaveBar/SaveBar.js +2 -2
  155. package/dist/Components/SaveBar/SaveBarProps.d.ts +3 -3
  156. package/dist/Components/Search/Search.js +2 -9
  157. package/dist/Components/Search/ctrlShortcut.d.ts +1 -0
  158. package/dist/Components/Search/ctrlShortcut.js +29 -0
  159. package/dist/Components/SearchSelect/SearchSelect.js +117 -30
  160. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +8 -2
  161. package/dist/Components/SegmentedControl/SegmentedControl.js +9 -5
  162. package/dist/Components/Select/SelectPopup.js +6 -4
  163. package/dist/Components/SelectSearch/SelectSearch.js +5 -4
  164. package/dist/Components/SettingRow/SettingRow.js +1 -1
  165. package/dist/Components/SideBar/SecondaryBar.js +2 -1
  166. package/dist/Components/SideBar/SideBar.js +82 -21
  167. package/dist/Components/SideBar/components/MenuItemBox.d.ts +2 -2
  168. package/dist/Components/SideBar/components/MenuItemBox.js +4 -3
  169. package/dist/Components/SideBar/components/MenuItems.d.ts +2 -2
  170. package/dist/Components/SideBar/components/MenuItems.js +3 -3
  171. package/dist/Components/SideBar/components/OtherApps.js +5 -1
  172. package/dist/Components/SideBar/components/OverflowTooltipText.js +4 -5
  173. package/dist/Components/SideBar/components/PinnedSection.js +2 -2
  174. package/dist/Components/SideBar/components/TextTruncation.js +11 -6
  175. package/dist/Components/SideBar/sidebarScale.d.ts +1 -1
  176. package/dist/Components/SideBar/sidebarScale.js +2 -1
  177. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +8 -0
  178. package/dist/Components/Skeletons/SkeletonProps.d.ts +5 -2
  179. package/dist/Components/Skeletons/Skeletons.d.ts +1 -1
  180. package/dist/Components/Skeletons/Skeletons.js +4 -2
  181. package/dist/Components/SkipLink/SkipLink.d.ts +4 -0
  182. package/dist/Components/SkipLink/SkipLink.js +54 -0
  183. package/dist/Components/SkipLink/SkipLinkProps.d.ts +8 -0
  184. package/dist/Components/SkipLink/SkipLinkProps.js +2 -0
  185. package/dist/Components/Slider/Slider.d.ts +2 -2
  186. package/dist/Components/Slider/Slider.js +11 -4
  187. package/dist/Components/SpecTable/SpecTable.js +2 -1
  188. package/dist/Components/StageProgress/StageItem.js +2 -5
  189. package/dist/Components/StageProgress/StageProgress.js +2 -1
  190. package/dist/Components/StageProgress/StageProgressProps.d.ts +1 -1
  191. package/dist/Components/StageProgress/StepperStage.js +2 -6
  192. package/dist/Components/StageProgress/centerInStrip.d.ts +2 -0
  193. package/dist/Components/StageProgress/centerInStrip.js +15 -0
  194. package/dist/Components/StatCard/StatCard.d.ts +1 -1
  195. package/dist/Components/StatCard/StatCard.js +5 -4
  196. package/dist/Components/StatCard/StatCardProps.d.ts +3 -3
  197. package/dist/Components/StickyBuyBar/StickyBuyBar.js +1 -1
  198. package/dist/Components/Table/components/TableActions.js +40 -24
  199. package/dist/Components/Table/components/TableBody.js +25 -40
  200. package/dist/Components/Table/components/rowMeasurer.d.ts +8 -0
  201. package/dist/Components/Table/components/rowMeasurer.js +71 -0
  202. package/dist/Components/Table/filters/TableFilters.js +2 -13
  203. package/dist/Components/Table/hooks/useTable.js +12 -9
  204. package/dist/Components/Tabs/components/CountBadge.js +3 -3
  205. package/dist/Components/Tabs/components/Tab.d.ts +2 -1
  206. package/dist/Components/Tabs/components/Tab.js +4 -3
  207. package/dist/Components/Tabs/components/TabList.js +16 -1
  208. package/dist/Components/Tag/Tag.d.ts +2 -2
  209. package/dist/Components/Tag/Tag.js +15 -12
  210. package/dist/Components/Tag/Tag.styles.js +6 -4
  211. package/dist/Components/TagInput/TagInput.d.ts +3 -0
  212. package/dist/Components/TagInput/TagInput.js +99 -0
  213. package/dist/Components/TagInput/TagInputProps.d.ts +46 -0
  214. package/dist/Components/TagInput/TagInputProps.js +2 -0
  215. package/dist/Components/TagInput/tagEntries.d.ts +15 -0
  216. package/dist/Components/TagInput/tagEntries.js +45 -0
  217. package/dist/Components/TimePicker/TimePicker.d.ts +3 -0
  218. package/dist/Components/TimePicker/TimePicker.js +50 -0
  219. package/dist/Components/TimePicker/TimePickerProps.d.ts +44 -0
  220. package/dist/Components/TimePicker/TimePickerProps.js +2 -0
  221. package/dist/Components/TimePicker/timeParts.d.ts +10 -0
  222. package/dist/Components/TimePicker/timeParts.js +36 -0
  223. package/dist/Components/Timeline/Timeline.js +11 -9
  224. package/dist/Components/Toaster/Toaster.js +2 -1
  225. package/dist/Components/Toggle/TableToggle.js +4 -3
  226. package/dist/Components/ToggleSwitch/ToggleSwitch.d.ts +3 -2
  227. package/dist/Components/ToggleSwitch/ToggleSwitch.js +6 -5
  228. package/dist/Components/ToolTip/ToolTip.js +86 -8
  229. package/dist/Components/UpgradeButton/UpgradeButton.js +4 -2
  230. package/dist/Components/UserDetails/UserDetails.js +7 -1
  231. package/dist/Components/VisuallyHidden/VisuallyHidden.d.ts +15 -0
  232. package/dist/Components/VisuallyHidden/VisuallyHidden.js +21 -0
  233. package/dist/Components/VisuallyHidden/VisuallyHiddenProps.d.ts +3 -0
  234. package/dist/Components/VisuallyHidden/VisuallyHiddenProps.js +2 -0
  235. package/dist/Components/WizardDialog/WizardDialog.js +10 -5
  236. package/dist/Components/WizardDialog/WizardDialogProps.d.ts +4 -0
  237. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +5 -1
  238. package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +15 -2
  239. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +2 -1
  240. package/dist/Hooks/sharedResizeObserver.d.ts +6 -0
  241. package/dist/Hooks/sharedResizeObserver.js +77 -0
  242. package/dist/Hooks/useIsTruncated.js +3 -4
  243. package/dist/Theme/chakra/Menu.styles.d.ts +1 -1
  244. package/dist/Theme/chakra/common.web.d.ts +1 -0
  245. package/dist/Theme/chakra/componentStyles.d.ts +1 -1
  246. package/dist/Theme/chakra/createBrandTheme.d.ts +3 -0
  247. package/dist/Theme/chakra/createBrandTheme.js +34 -4
  248. package/dist/Theme/chakra/focusRing.styles.d.ts +2 -0
  249. package/dist/Theme/chakra/focusRing.styles.js +5 -1
  250. package/dist/Theme/chakra/fonts.web.d.ts +2 -0
  251. package/dist/Theme/chakra/motion.d.ts +14 -0
  252. package/dist/Theme/chakra/motion.js +26 -1
  253. package/dist/Theme/index.d.ts +2 -1
  254. package/dist/Theme/index.js +12 -9
  255. package/dist/Theme/provider/PixelizeThemeProvider.d.ts +4 -1
  256. package/dist/Theme/provider/PixelizeThemeProvider.js +21 -12
  257. package/dist/Theme/provider/ThemeSwitcher.js +3 -2
  258. package/dist/Theme/themeProps.d.ts +3 -0
  259. package/dist/Theme/tokens/brands/emerald/palette.dark.js +2 -1
  260. package/dist/Theme/tokens/brands/index.d.ts +1 -1
  261. package/dist/Theme/tokens/brands/index.js +14 -13
  262. package/dist/Theme/tokens/brands/lavender/palette.dark.js +2 -1
  263. package/dist/Theme/tokens/brands/meadow/palette.dark.js +2 -1
  264. package/dist/Theme/tokens/brands/radiant/palette.dark.js +2 -1
  265. package/dist/Theme/tokens/brands/rosewood/palette.dark.js +2 -1
  266. package/dist/Theme/tokens/brands/skyline/palette.dark.js +2 -1
  267. package/dist/Theme/tokens/brands/slate/palette.dark.js +2 -1
  268. package/dist/Theme/tokens/brands/storefront/palette.dark.js +2 -1
  269. package/dist/Theme/tokens/brands/zinc/palette.dark.js +28 -24
  270. package/dist/Theme/tokens/builders/color.js +11 -7
  271. package/dist/Theme/tokens/builders/filledSurface.d.ts +3 -1
  272. package/dist/Theme/tokens/builders/filledSurface.js +7 -7
  273. package/dist/Theme/tokens/builders/lazy.d.ts +5 -0
  274. package/dist/Theme/tokens/builders/lazy.js +55 -0
  275. package/dist/Theme/tokens/builders/memo.d.ts +9 -0
  276. package/dist/Theme/tokens/builders/memo.js +28 -0
  277. package/dist/Theme/tokens/builders/memoByReads.d.ts +2 -0
  278. package/dist/Theme/tokens/builders/memoByReads.js +50 -0
  279. package/dist/Theme/tokens/builders/outlineRung.js +10 -2
  280. package/dist/Theme/tokens/builders/tone.js +5 -4
  281. package/dist/Theme/tokens/primitives/borderWidths.d.ts +6 -0
  282. package/dist/Theme/tokens/primitives/borderWidths.js +5 -0
  283. package/dist/Theme/tokens/primitives/index.d.ts +8 -3
  284. package/dist/Theme/tokens/primitives/index.js +8 -1
  285. package/dist/Theme/tokens/primitives/motion.d.ts +25 -2
  286. package/dist/Theme/tokens/primitives/motion.js +23 -5
  287. package/dist/Theme/tokens/primitives/optionRowSizes.d.ts +1 -1
  288. package/dist/Theme/tokens/primitives/optionRowSizes.js +2 -1
  289. package/dist/Theme/tokens/primitives/radii.d.ts +15 -0
  290. package/dist/Theme/tokens/primitives/radii.js +14 -0
  291. package/dist/Theme/tokens/primitives/shadows.d.ts +5 -1
  292. package/dist/Theme/tokens/primitives/shadows.js +5 -1
  293. package/dist/Theme/tokens/primitives/states.d.ts +1 -0
  294. package/dist/Theme/tokens/primitives/states.js +4 -0
  295. package/dist/Theme/tokens/primitives/typography.d.ts +17 -0
  296. package/dist/Theme/tokens/primitives/typography.js +21 -1
  297. package/dist/Theme/tokens/primitives/zIndices.d.ts +1 -0
  298. package/dist/Theme/tokens/primitives/zIndices.js +1 -0
  299. package/dist/Utils/formatDate.d.ts +25 -0
  300. package/dist/Utils/formatDate.js +144 -0
  301. package/dist/esm/Components/Accordion/Accordion.js +2 -2
  302. package/dist/esm/Components/AddressCard/AddressCard.js +2 -1
  303. package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -1
  304. package/dist/esm/Components/AppSwitcher/AppSwitcher.js +1 -1
  305. package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +1 -1
  306. package/dist/esm/Components/AudioRecorder/AudioRecorder.js +2 -1
  307. package/dist/esm/Components/Avatar/Avatar.js +6 -4
  308. package/dist/esm/Components/Backdrop/Backdrop.js +1 -1
  309. package/dist/esm/Components/BagBar/BagBar.js +2 -1
  310. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +1 -1
  311. package/dist/esm/Components/CalendarGrid/CalendarGrid.js +6 -6
  312. package/dist/esm/Components/CalendarGrid/calendarMath.js +18 -6
  313. package/dist/esm/Components/Card/PaymentCard/PaymentCard.js +6 -5
  314. package/dist/esm/Components/CartItem/CartItem.js +2 -1
  315. package/dist/esm/Components/Checkbox/Checkbox.js +8 -5
  316. package/dist/esm/Components/CheckoutKit/selectable.js +1 -1
  317. package/dist/esm/Components/ChoiceCard/ChoiceCard.js +14 -0
  318. package/dist/esm/Components/ChoiceCard/ChoiceCardGroup.js +4 -0
  319. package/dist/esm/Components/ChoiceCard/ChoiceCardProps.js +1 -0
  320. package/dist/esm/Components/CircularProgress/CircularProgress.js +5 -9
  321. package/dist/esm/Components/CircularProgress/arc.js +13 -0
  322. package/dist/esm/Components/Common/FormLabel.js +1 -1
  323. package/dist/esm/Components/Common/FormattedDescription.js +1 -1
  324. package/dist/esm/Components/Common/HelperText.js +11 -8
  325. package/dist/esm/Components/Common/fieldStyles.js +2 -1
  326. package/dist/esm/Components/ContactForm/ContactForm.js +1 -1
  327. package/dist/esm/Components/CopyButton/CopyButton.js +14 -7
  328. package/dist/esm/Components/CouponField/CouponField.js +4 -3
  329. package/dist/esm/Components/CustomModulesTable/EditModuleModal.js +1 -1
  330. package/dist/esm/Components/DatePicker/CalendarPanel.js +2 -2
  331. package/dist/esm/Components/DatePicker/DatePicker.js +8 -2
  332. package/dist/esm/Components/DatePicker/RangeDatePicker.js +8 -6
  333. package/dist/esm/Components/DatePicker/SingleDatePicker.js +7 -4
  334. package/dist/esm/Components/DatePicker/ThemeDatePicker.js +7 -4
  335. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +5 -3
  336. package/dist/esm/Components/DatePicker/TimePickerInput.js +8 -6
  337. package/dist/esm/Components/DescriptionList/DescriptionList.js +3 -3
  338. package/dist/esm/Components/Dropdown/DropDown.js +12 -4
  339. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +2 -1
  340. package/dist/esm/Components/EmptyState/EmptyState.js +2 -2
  341. package/dist/esm/Components/FileUpload/FileUpload.js +21 -15
  342. package/dist/esm/Components/FileUpload/useObjectUrl.js +10 -0
  343. package/dist/esm/Components/FileUploader/FileUploader.js +9 -3
  344. package/dist/esm/Components/FilterBar/FilterBar.js +2 -2
  345. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +10 -6
  346. package/dist/esm/Components/Form/FormWrapper.js +1 -1
  347. package/dist/esm/Components/FormField/FormField.js +52 -0
  348. package/dist/esm/Components/FormField/FormFieldProps.js +1 -0
  349. package/dist/esm/Components/Header/HeaderActions.js +2 -2
  350. package/dist/esm/Components/Header/components/mobileMenu.js +1 -1
  351. package/dist/esm/Components/IconButton/IconButton.js +21 -0
  352. package/dist/esm/Components/IconButton/IconButtonProps.js +1 -0
  353. package/dist/esm/Components/Input/PhoneNumberInput.js +15 -1
  354. package/dist/esm/Components/KanbanBoard/AccountCard.js +3 -2
  355. package/dist/esm/Components/KanbanBoard/AccountRow.js +1 -1
  356. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +56 -39
  357. package/dist/esm/Components/KanbanBoard/MeasuredItem.js +6 -14
  358. package/dist/esm/Components/KanbanBoard/boardStore.js +22 -0
  359. package/dist/esm/Components/Kbd/Kbd.js +1 -1
  360. package/dist/esm/Components/LimitReachedModal/LimitReachedModal.js +1 -1
  361. package/dist/esm/Components/Loading/Loading.js +1 -1
  362. package/dist/esm/Components/MediaGallery/MediaGallery.js +2 -2
  363. package/dist/esm/Components/MediaGallery/MediaLightbox.js +2 -1
  364. package/dist/esm/Components/MediaGallery/glass.js +2 -1
  365. package/dist/esm/Components/MediaViewer/MediaViewer.js +1 -1
  366. package/dist/esm/Components/MediaViewer/components/MediaAudioPlayer.js +7 -7
  367. package/dist/esm/Components/MediaViewer/components/MediaImageViewer.js +1 -1
  368. package/dist/esm/Components/MediaViewer/components/MediaScrubber.js +5 -1
  369. package/dist/esm/Components/MediaViewer/components/MediaVideoPlayer.js +7 -7
  370. package/dist/esm/Components/MediaViewer/components/PlaybackTimeline.js +38 -0
  371. package/dist/esm/Components/MediaViewer/components/TileChip.js +1 -1
  372. package/dist/esm/Components/Modal/Modal.js +1 -1
  373. package/dist/esm/Components/MoreItems/MoreItems.js +2 -2
  374. package/dist/esm/Components/NavigationBar/NavigationBar.js +2 -2
  375. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +18 -4
  376. package/dist/esm/Components/Notification/Notification.js +17 -3
  377. package/dist/esm/Components/NotificationBell/NotificationBell.js +2 -1
  378. package/dist/esm/Components/NotificationBell/NotificationItem.js +1 -1
  379. package/dist/esm/Components/NotificationBell/NotificationList.js +1 -1
  380. package/dist/esm/Components/OffersList/OffersList.js +2 -1
  381. package/dist/esm/Components/OptionChip/OptionChip.js +3 -2
  382. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
  383. package/dist/esm/Components/OrderSummary/OrderSummary.js +5 -5
  384. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +7 -1
  385. package/dist/esm/Components/PageHeader/PageHeader.js +2 -2
  386. package/dist/esm/Components/Pagination/Pagination.js +42 -0
  387. package/dist/esm/Components/Pagination/PaginationProps.js +6 -0
  388. package/dist/esm/Components/Pagination/pageWindow.js +16 -0
  389. package/dist/esm/Components/PaymentOption/PaymentOption.js +1 -1
  390. package/dist/esm/Components/PersonChip/PersonChip.js +2 -2
  391. package/dist/esm/Components/PinInput/PinInput.js +14 -2
  392. package/dist/esm/Components/PincodeChecker/PincodeChecker.js +4 -4
  393. package/dist/esm/Components/PlanPill/PlanPill.js +2 -1
  394. package/dist/esm/Components/PriceBlock/PriceBlock.js +3 -3
  395. package/dist/esm/Components/Primitives/Primitives.js +1 -1
  396. package/dist/esm/Components/ProductBadges/ProductBadges.js +2 -1
  397. package/dist/esm/Components/ProductCard/ProductCard.js +1 -1
  398. package/dist/esm/Components/ProductCard/ProductCardAction.js +3 -3
  399. package/dist/esm/Components/ProductCard/ProductCardSwatches.js +2 -1
  400. package/dist/esm/Components/ProductCard/cardMetrics.js +2 -1
  401. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +3 -2
  402. package/dist/esm/Components/QuantityStepper/QuantityStepper.js +2 -1
  403. package/dist/esm/Components/RadioButton/RadioButton.js +7 -4
  404. package/dist/esm/Components/RangeSlider/RangeSlider.js +3 -3
  405. package/dist/esm/Components/Rating/Rating.js +2 -1
  406. package/dist/esm/Components/Reorder/Reorder.js +3 -2
  407. package/dist/esm/Components/ReviewList/ReviewList.js +3 -3
  408. package/dist/esm/Components/ReviewSummary/ReviewSummary.js +3 -3
  409. package/dist/esm/Components/SaveBar/SaveBar.js +2 -2
  410. package/dist/esm/Components/Search/Search.js +2 -9
  411. package/dist/esm/Components/Search/ctrlShortcut.js +25 -0
  412. package/dist/esm/Components/SearchSelect/SearchSelect.js +120 -33
  413. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +11 -6
  414. package/dist/esm/Components/Select/SelectPopup.js +6 -4
  415. package/dist/esm/Components/SelectSearch/SelectSearch.js +5 -4
  416. package/dist/esm/Components/SettingRow/SettingRow.js +1 -1
  417. package/dist/esm/Components/SideBar/SecondaryBar.js +2 -1
  418. package/dist/esm/Components/SideBar/SideBar.js +83 -22
  419. package/dist/esm/Components/SideBar/components/MenuItemBox.js +4 -3
  420. package/dist/esm/Components/SideBar/components/MenuItems.js +4 -4
  421. package/dist/esm/Components/SideBar/components/OtherApps.js +2 -1
  422. package/dist/esm/Components/SideBar/components/OverflowTooltipText.js +4 -5
  423. package/dist/esm/Components/SideBar/components/PinnedSection.js +2 -2
  424. package/dist/esm/Components/SideBar/components/TextTruncation.js +9 -7
  425. package/dist/esm/Components/SideBar/sidebarScale.js +2 -1
  426. package/dist/esm/Components/Skeletons/Skeletons.js +4 -2
  427. package/dist/esm/Components/SkipLink/SkipLink.js +50 -0
  428. package/dist/esm/Components/SkipLink/SkipLinkProps.js +1 -0
  429. package/dist/esm/Components/Slider/Slider.js +11 -4
  430. package/dist/esm/Components/SpecTable/SpecTable.js +2 -1
  431. package/dist/esm/Components/StageProgress/StageItem.js +2 -5
  432. package/dist/esm/Components/StageProgress/StageProgress.js +2 -1
  433. package/dist/esm/Components/StageProgress/StepperStage.js +2 -6
  434. package/dist/esm/Components/StageProgress/centerInStrip.js +11 -0
  435. package/dist/esm/Components/StatCard/StatCard.js +5 -4
  436. package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +2 -2
  437. package/dist/esm/Components/Table/components/TableActions.js +42 -26
  438. package/dist/esm/Components/Table/components/TableBody.js +25 -40
  439. package/dist/esm/Components/Table/components/rowMeasurer.js +66 -0
  440. package/dist/esm/Components/Table/filters/TableFilters.js +3 -14
  441. package/dist/esm/Components/Table/hooks/useTable.js +12 -9
  442. package/dist/esm/Components/Tabs/components/CountBadge.js +3 -3
  443. package/dist/esm/Components/Tabs/components/Tab.js +5 -4
  444. package/dist/esm/Components/Tabs/components/TabList.js +16 -1
  445. package/dist/esm/Components/Tag/Tag.js +11 -8
  446. package/dist/esm/Components/Tag/Tag.styles.js +6 -4
  447. package/dist/esm/Components/TagInput/TagInput.js +94 -0
  448. package/dist/esm/Components/TagInput/TagInputProps.js +1 -0
  449. package/dist/esm/Components/TagInput/tagEntries.js +39 -0
  450. package/dist/esm/Components/TimePicker/TimePicker.js +45 -0
  451. package/dist/esm/Components/TimePicker/TimePickerProps.js +1 -0
  452. package/dist/esm/Components/TimePicker/timeParts.js +26 -0
  453. package/dist/esm/Components/Timeline/Timeline.js +11 -9
  454. package/dist/esm/Components/Toaster/Toaster.js +2 -1
  455. package/dist/esm/Components/Toggle/TableToggle.js +4 -3
  456. package/dist/esm/Components/ToggleSwitch/ToggleSwitch.js +7 -5
  457. package/dist/esm/Components/ToolTip/ToolTip.js +89 -11
  458. package/dist/esm/Components/UpgradeButton/UpgradeButton.js +4 -2
  459. package/dist/esm/Components/UserDetails/UserDetails.js +7 -1
  460. package/dist/esm/Components/VisuallyHidden/VisuallyHidden.js +18 -0
  461. package/dist/esm/Components/VisuallyHidden/VisuallyHiddenProps.js +1 -0
  462. package/dist/esm/Components/WizardDialog/WizardDialog.js +11 -6
  463. package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +2 -1
  464. package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +13 -3
  465. package/dist/esm/Hooks/sharedResizeObserver.js +73 -0
  466. package/dist/esm/Hooks/useIsTruncated.js +3 -4
  467. package/dist/esm/Theme/chakra/createBrandTheme.js +34 -4
  468. package/dist/esm/Theme/chakra/focusRing.styles.js +3 -0
  469. package/dist/esm/Theme/chakra/motion.js +25 -0
  470. package/dist/esm/Theme/index.js +12 -9
  471. package/dist/esm/Theme/provider/PixelizeThemeProvider.js +22 -13
  472. package/dist/esm/Theme/provider/ThemeSwitcher.js +3 -2
  473. package/dist/esm/Theme/tokens/brands/emerald/palette.dark.js +2 -1
  474. package/dist/esm/Theme/tokens/brands/index.js +14 -13
  475. package/dist/esm/Theme/tokens/brands/lavender/palette.dark.js +2 -1
  476. package/dist/esm/Theme/tokens/brands/meadow/palette.dark.js +2 -1
  477. package/dist/esm/Theme/tokens/brands/radiant/palette.dark.js +2 -1
  478. package/dist/esm/Theme/tokens/brands/rosewood/palette.dark.js +2 -1
  479. package/dist/esm/Theme/tokens/brands/skyline/palette.dark.js +2 -1
  480. package/dist/esm/Theme/tokens/brands/slate/palette.dark.js +2 -1
  481. package/dist/esm/Theme/tokens/brands/storefront/palette.dark.js +2 -1
  482. package/dist/esm/Theme/tokens/brands/zinc/palette.dark.js +28 -24
  483. package/dist/esm/Theme/tokens/builders/color.js +10 -6
  484. package/dist/esm/Theme/tokens/builders/filledSurface.js +7 -7
  485. package/dist/esm/Theme/tokens/builders/lazy.js +49 -0
  486. package/dist/esm/Theme/tokens/builders/memo.js +21 -0
  487. package/dist/esm/Theme/tokens/builders/memoByReads.js +46 -0
  488. package/dist/esm/Theme/tokens/builders/outlineRung.js +10 -2
  489. package/dist/esm/Theme/tokens/builders/tone.js +5 -4
  490. package/dist/esm/Theme/tokens/primitives/borderWidths.js +2 -0
  491. package/dist/esm/Theme/tokens/primitives/index.js +5 -3
  492. package/dist/esm/Theme/tokens/primitives/motion.js +20 -4
  493. package/dist/esm/Theme/tokens/primitives/optionRowSizes.js +2 -1
  494. package/dist/esm/Theme/tokens/primitives/radii.js +13 -0
  495. package/dist/esm/Theme/tokens/primitives/shadows.js +3 -1
  496. package/dist/esm/Theme/tokens/primitives/states.js +1 -0
  497. package/dist/esm/Theme/tokens/primitives/typography.js +20 -0
  498. package/dist/esm/Theme/tokens/primitives/zIndices.js +1 -0
  499. package/dist/esm/Utils/formatDate.js +138 -0
  500. package/dist/esm/index.js +18 -2
  501. package/dist/index.d.ts +33 -5
  502. package/dist/index.js +47 -4
  503. package/package.json +1 -1
@@ -11,7 +11,7 @@ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
11
11
  const motion_1 = require("../../Theme/tokens/primitives/motion");
12
12
  const motion_2 = require("../../Theme/chakra/motion");
13
13
  /** Floating dirty-state bar: surfaceRaised card, slides/fades in on mount, unmounts when closed. */
14
- const SaveBar = ({ isOpen, message = "You have unsaved changes", onSave, onDiscard, isSaving = false, isSaveDisabled = false, saveLabel = "Save changes", discardLabel = "Discard", position = "sticky", }) => {
14
+ const SaveBar = ({ isOpen, message = "You have unsaved changes", onSave, onDiscard, isSaving = false, isSaveDisabled = false, saveLabel = "Save changes", discardLabel = "Discard", position = "sticky", ...rest }) => {
15
15
  const { colors } = (0, useCustomTheme_1.useCustomTheme)();
16
16
  const [isVisible, setIsVisible] = (0, react_1.useState)(false);
17
17
  (0, react_1.useEffect)(() => {
@@ -19,6 +19,6 @@ const SaveBar = ({ isOpen, message = "You have unsaved changes", onSave, onDisca
19
19
  }, [isOpen]);
20
20
  if (!isOpen)
21
21
  return null;
22
- return ((0, jsx_runtime_1.jsx)(react_2.Box, { position: position, bottom: 0, left: 0, right: 0, zIndex: 1, px: { base: 4, md: 6 }, pb: { base: 4, md: 5 }, pointerEvents: "none", children: (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", justify: "space-between", gap: 3, wrap: "wrap", mx: "auto", maxW: "64rem", px: 5, py: 3, bg: colors.surfaceRaised, borderWidth: "1px", borderColor: colors.boxborder[200], borderRadius: "xl", boxShadow: "lg", pointerEvents: "auto", opacity: isVisible ? 1 : 0, transform: isVisible ? "translateY(0)" : "translateY(0.5rem)", transition: (0, motion_1.transitionFor)(["opacity", "transform"]), sx: (0, motion_2.reducedMotionSx)(), children: [(0, jsx_runtime_1.jsx)(react_2.Text, { role: "status", fontSize: "sm", color: colors.textMuted, children: message }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { gap: 2, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { variant: "ghost", colorScheme: "gray", label: discardLabel, isDisabled: isSaving, onClick: onDiscard }), (0, jsx_runtime_1.jsx)(Button_1.default, { variant: "solid", colorScheme: "primary", label: saveLabel, isLoading: isSaving, isDisabled: isSaveDisabled, onClick: onSave })] })] }) }));
22
+ return ((0, jsx_runtime_1.jsx)(react_2.Box, { ...rest, position: position, bottom: 0, left: 0, right: 0, zIndex: 1, px: { base: 4, md: 6 }, pb: { base: 4, md: 5 }, pointerEvents: "none", children: (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", justify: "space-between", gap: 3, wrap: "wrap", mx: "auto", maxW: "64rem", px: 5, py: 3, bg: colors.surfaceRaised, borderWidth: "1px", borderColor: colors.boxborder[200], borderRadius: "xl", boxShadow: "lg", pointerEvents: "auto", opacity: isVisible ? 1 : 0, transform: isVisible ? "translateY(0)" : "translateY(0.5rem)", transition: (0, motion_1.transitionFor)(["opacity", "transform"]), sx: (0, motion_2.reducedMotionSx)(), children: [(0, jsx_runtime_1.jsx)(react_2.Text, { role: "status", fontSize: "sm", color: colors.textMuted, children: message }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { gap: 2, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { variant: "ghost", colorScheme: "gray", label: discardLabel, isDisabled: isSaving, onClick: onDiscard }), (0, jsx_runtime_1.jsx)(Button_1.default, { variant: "solid", colorScheme: "primary", label: saveLabel, isLoading: isSaving, isDisabled: isSaveDisabled, onClick: onSave })] })] }) }));
23
23
  };
24
24
  exports.default = SaveBar;
@@ -1,6 +1,6 @@
1
- import type { ReactNode } from "react";
2
- /** Props for the floating unsaved-changes bar; mount it once and drive it with `isOpen`. */
3
- export interface SaveBarProps {
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ /** Floating unsaved-changes bar driven by `isOpen`; other `<div>` attributes land on the positioned root. */
3
+ export interface SaveBarProps extends Omit<HTMLAttributes<HTMLDivElement>, "color" | "children" | "dangerouslySetInnerHTML"> {
4
4
  /** Shows the bar and animates it in; unmounts (not just hides) it when false. */
5
5
  isOpen: boolean;
6
6
  /** Status text, announced via role="status"; defaults to "You have unsaved changes". */
@@ -16,6 +16,7 @@ const controlSizes_1 = require("../../Theme/tokens/primitives/controlSizes");
16
16
  const motion_1 = require("../../Theme/chakra/motion");
17
17
  const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
18
18
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
19
+ const ctrlShortcut_1 = require("./ctrlShortcut");
19
20
  const HINT_WIDTH = "2.75rem";
20
21
  /** Filter input with a clear button and an optional page-global Ctrl+K hotkey; no options list. */
21
22
  const Search = (0, react_1.forwardRef)(function Search({ placeholder = "Search...", onSearch, onClear, onclose, shortcut = "Ctrl+K", showShortcutHint = true, query, size = controlSizes_1.DEFAULT_CONTROL_SIZE, name, isDisabled = false, error = false, errorMessage, helperText, label, id, isInformation, informationMessage, isRequired, "aria-label": ariaLabelProp, }, ref) {
@@ -32,15 +33,7 @@ const Search = (0, react_1.forwardRef)(function Search({ placeholder = "Search..
32
33
  (0, react_1.useEffect)(() => {
33
34
  if (!shortcutKey)
34
35
  return;
35
- const handleKeyDown = (event) => {
36
- var _a;
37
- if (event.ctrlKey && event.key.toLowerCase() === shortcutKey) {
38
- event.preventDefault();
39
- (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
40
- }
41
- };
42
- window.addEventListener("keydown", handleKeyDown);
43
- return () => window.removeEventListener("keydown", handleKeyDown);
36
+ return (0, ctrlShortcut_1.registerCtrlShortcut)(shortcutKey, () => { var _a; return (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus(); });
44
37
  }, [shortcutKey]);
45
38
  const clearSize = `calc(${spec.height} - 0.5rem)`;
46
39
  const rightPadding = `calc(${spec.paddingX} + ${showClear ? clearSize : "0rem"} + ${showHint ? HINT_WIDTH : "0rem"})`;
@@ -0,0 +1 @@
1
+ export declare const registerCtrlShortcut: (key: string, focus: () => void) => () => void;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerCtrlShortcut = void 0;
4
+ const focusers = new Map();
5
+ const onKeyDown = (event) => {
6
+ if (!event.ctrlKey)
7
+ return;
8
+ const set = focusers.get(event.key.toLowerCase());
9
+ if (!set)
10
+ return;
11
+ event.preventDefault();
12
+ set.forEach((focus) => focus());
13
+ };
14
+ const registerCtrlShortcut = (key, focus) => {
15
+ var _a;
16
+ if (focusers.size === 0)
17
+ window.addEventListener("keydown", onKeyDown);
18
+ const set = (_a = focusers.get(key)) !== null && _a !== void 0 ? _a : new Set();
19
+ set.add(focus);
20
+ focusers.set(key, set);
21
+ return () => {
22
+ set.delete(focus);
23
+ if (set.size === 0)
24
+ focusers.delete(key);
25
+ if (focusers.size === 0)
26
+ window.removeEventListener("keydown", onKeyDown);
27
+ };
28
+ };
29
+ exports.registerCtrlShortcut = registerCtrlShortcut;
@@ -51,6 +51,8 @@ const FieldMessage_1 = __importDefault(require("../Common/FieldMessage"));
51
51
  const useFieldIds_1 = require("../Common/useFieldIds");
52
52
  const fieldStyles_1 = require("../Common/fieldStyles");
53
53
  const motion_1 = require("../../Theme/tokens/primitives/motion");
54
+ const borderWidths_1 = require("../../Theme/tokens/primitives/borderWidths");
55
+ const zIndices_1 = __importDefault(require("../../Theme/tokens/primitives/zIndices"));
54
56
  const motion_2 = require("../../Theme/chakra/motion");
55
57
  const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
56
58
  const ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
@@ -72,10 +74,25 @@ const normalizeMultiValue = (val) => {
72
74
  }
73
75
  return [];
74
76
  };
77
+ const DECORATIVE_CHECKBOX_SX = { pointerEvents: "none", "& input": { visibility: "hidden" } };
78
+ const OptionRow = react_1.default.memo(function OptionRow({ option, index, optionId, isSelected, isActive, isMultiple, spec, colors, rowBackgrounds, checkboxSize, onSelect, onActivate, }) {
79
+ const singleSelected = isSelected && !isMultiple;
80
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { id: optionId, "data-index": index, role: "option", "aria-selected": isSelected, py: spec.py, px: spec.px, minH: spec.minH, cursor: "pointer", bg: isSelected
81
+ ? isActive
82
+ ? rowBackgrounds.selectedActive
83
+ : rowBackgrounds.selected
84
+ : isActive
85
+ ? rowBackgrounds.active
86
+ : "transparent", _hover: {
87
+ bg: isSelected ? rowBackgrounds.selectedActive : rowBackgrounds.active,
88
+ }, onClick: () => onSelect(option), onMouseEnter: () => onActivate(index), display: "flex", alignItems: "center", gap: spec.gap, color: (0, optionRowInk_1.optionRowInk)(colors, singleSelected),
89
+ // `view` is consumer JSX with no size of its own; it inherited the 16px body font.
90
+ fontSize: spec.fontSize, fontWeight: (0, optionRowInk_1.optionRowWeight)(singleSelected), borderBottom: `${borderWidths_1.BORDER_WIDTHS.hairline} solid ${colors.boxborder[200]}`, children: [isMultiple && ((0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: isSelected, sx: DECORATIVE_CHECKBOX_SX, size: checkboxSize })), option.view ? ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: option.view })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { isTruncated: true, children: option.label })), singleSelected && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.Check, size: spec.iconSize, color: colors.accentText, flexShrink: 0 }))] }));
91
+ });
75
92
  /** Full-featured combobox: search, chips, select-all, paginated infinite scroll — not DOM-virtualized despite the `virtualization` prop. */
76
93
  /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see select-absorption-spec.md. */
77
94
  const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOptionLoading = false, isLoading = false, loadingText = "Loading...", placeholder = "Select", value, searchQuery = "", isMultiple = false, isRequired = false, error = false, errorMessage, helperText, width = "100%", height, size = "sm", isDisabled = false, chip, information, isInformation, informationMessage, rightIcon, addNew, isSelectAll = false, pagination, insideSelect, isRemoveAllIcon, "aria-label": ariaLabel, }) => {
78
- var _a, _b, _c, _d, _e;
95
+ var _a, _b, _c, _d, _e, _f;
79
96
  const s = (0, searchSelectSize_1.getSearchSelectSizeStyles)(size);
80
97
  const spec = (0, optionRowSizes_1.optionRowSpec)(size);
81
98
  const emitChange = onChange !== null && onChange !== void 0 ? onChange : onSelect;
@@ -105,6 +122,11 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
105
122
  });
106
123
  const theme = (0, useCustomTheme_1.useCustomTheme)();
107
124
  const rowBackgrounds = (0, react_1.useMemo)(() => (0, rowStates_1.listRowBackgrounds)(theme.colors), [theme.colors]);
125
+ // NOTE: inset — the trigger sits flush in the field and the menu clips overflow.
126
+ const insideFocusRing = {
127
+ outline: "2px solid transparent",
128
+ boxShadow: (0, focusRing_styles_1.insetFocusRingShadow)(theme.colors),
129
+ };
108
130
  const ids = (0, useFieldIds_1.useFieldIds)(id, { error, errorMessage, helperText });
109
131
  const baseId = ids.inputId;
110
132
  const listboxId = `${baseId}-listbox`;
@@ -183,6 +205,9 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
183
205
  setInputValue("");
184
206
  }
185
207
  };
208
+ const handleSelectRef = (0, react_1.useRef)(handleSelect);
209
+ handleSelectRef.current = handleSelect;
210
+ const selectOption = (0, react_1.useCallback)((option) => handleSelectRef.current(option), []);
186
211
  const handleRemove = (id) => {
187
212
  const updated = selectedValues.filter((v) => v.id !== id);
188
213
  emitChange === null || emitChange === void 0 ? void 0 : emitChange(updated);
@@ -418,6 +443,82 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
418
443
  }
419
444
  setCustomSelectOpen(false);
420
445
  };
446
+ const focusInsideOnOpenRef = (0, react_1.useRef)(false);
447
+ const toggleCustomSelect = () => {
448
+ if (isDisabled)
449
+ return;
450
+ setIsOpen(false);
451
+ if (customSelectOpen) {
452
+ setCustomSelectOpen(false);
453
+ }
454
+ else {
455
+ requestExclusiveOpen();
456
+ setCustomSelectOpen(true);
457
+ }
458
+ };
459
+ const closeCustomSelectToTrigger = () => {
460
+ var _a;
461
+ setCustomSelectOpen(false);
462
+ (_a = customSelectRef.current) === null || _a === void 0 ? void 0 : _a.focus();
463
+ };
464
+ const handleInsideTriggerKeyDown = (e) => {
465
+ if (e.target !== e.currentTarget || e.key === "Tab")
466
+ return;
467
+ e.stopPropagation();
468
+ if (e.key === "Escape" && customSelectOpen) {
469
+ e.preventDefault();
470
+ setCustomSelectOpen(false);
471
+ return;
472
+ }
473
+ if (e.key !== "Enter" && e.key !== " ")
474
+ return;
475
+ e.preventDefault();
476
+ focusInsideOnOpenRef.current = !customSelectOpen;
477
+ toggleCustomSelect();
478
+ };
479
+ const handleInsideMenuKeyDown = (e) => {
480
+ var _a, _b;
481
+ e.stopPropagation();
482
+ const rows = Array.from(e.currentTarget.querySelectorAll('[role="option"]'));
483
+ const index = rows.indexOf(document.activeElement);
484
+ const moveTo = (to) => {
485
+ var _a;
486
+ e.preventDefault();
487
+ (_a = rows[Math.max(0, Math.min(rows.length - 1, to))]) === null || _a === void 0 ? void 0 : _a.focus();
488
+ };
489
+ switch (e.key) {
490
+ case "ArrowDown":
491
+ moveTo(index + 1);
492
+ break;
493
+ case "ArrowUp":
494
+ moveTo(index - 1);
495
+ break;
496
+ case "Home":
497
+ moveTo(0);
498
+ break;
499
+ case "End":
500
+ moveTo(rows.length - 1);
501
+ break;
502
+ case "Enter":
503
+ case " ":
504
+ e.preventDefault();
505
+ if (index < 0)
506
+ return;
507
+ handleCustomSelect((_a = insideSelect === null || insideSelect === void 0 ? void 0 : insideSelect.option) === null || _a === void 0 ? void 0 : _a[index]);
508
+ (_b = customSelectRef.current) === null || _b === void 0 ? void 0 : _b.focus();
509
+ break;
510
+ case "Escape":
511
+ e.preventDefault();
512
+ closeCustomSelectToTrigger();
513
+ break;
514
+ case "Tab":
515
+ closeCustomSelectToTrigger();
516
+ break;
517
+ default:
518
+ break;
519
+ }
520
+ };
521
+ const stopFocusBubbling = (e) => e.stopPropagation();
421
522
  // Anchor the insideSelect menu to its trigger (viewport-fixed). Prefer below;
422
523
  // flip above when near the bottom; clamp horizontally within the viewport.
423
524
  const updateInsideSelectPos = (0, react_1.useCallback)(() => {
@@ -448,9 +549,14 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
448
549
  });
449
550
  }, []);
450
551
  const setInsideSelectMenuRef = (0, react_1.useCallback)((node) => {
552
+ var _a, _b;
451
553
  insideSelectMenuRef.current = node;
452
554
  if (node)
453
555
  updateInsideSelectPos();
556
+ if (node && focusInsideOnOpenRef.current) {
557
+ focusInsideOnOpenRef.current = false;
558
+ (_b = ((_a = node.querySelector('[aria-selected="true"]')) !== null && _a !== void 0 ? _a : node.querySelector('[role="option"]'))) === null || _b === void 0 ? void 0 : _b.focus();
559
+ }
454
560
  }, [updateInsideSelectPos]);
455
561
  (0, react_1.useEffect)(() => {
456
562
  if (!customSelectOpen)
@@ -519,30 +625,21 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
519
625
  var _a, _b, _c;
520
626
  const insideLabel = (_a = insideSelect.value) === null || _a === void 0 ? void 0 : _a.label;
521
627
  const insidePlaceholder = (_b = insideSelect.placeholder) !== null && _b !== void 0 ? _b : "Select";
522
- return ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", ref: customSelectRef, flexShrink: 0, ml: s.insideSelectMarginLeft, h: "-webkit-fill-available", borderRight: "0.063rem solid", borderColor: theme.colors.boxborder[200], bg: customSelectOpen
628
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", ref: customSelectRef, role: "button", tabIndex: isDisabled ? undefined : 0, "aria-haspopup": "listbox", "aria-expanded": customSelectOpen, "aria-controls": customSelectOpen ? insideSelectPortalId : undefined, "aria-disabled": isDisabled || undefined, onKeyDown: handleInsideTriggerKeyDown, onFocus: stopFocusBubbling, onBlur: stopFocusBubbling, _focusVisible: insideFocusRing, flexShrink: 0, ml: s.insideSelectMarginLeft, h: "-webkit-fill-available", borderRight: `${borderWidths_1.BORDER_WIDTHS.hairline} solid`, borderColor: theme.colors.boxborder[200], bg: customSelectOpen
523
629
  ? rowBackgrounds.active
524
630
  : theme.colors.background[400], borderLeftRadius: "md", borderRightRadius: 0, transition: SEGMENT_TRANSITION, boxShadow: customSelectOpen
525
631
  ? `inset 0 0 0 0.063rem ${theme.colors.primary[500]}`
526
632
  : "none", onClick: (e) => {
527
633
  e.stopPropagation();
528
- if (isDisabled)
529
- return;
530
- setIsOpen(false);
531
- if (customSelectOpen) {
532
- setCustomSelectOpen(false);
533
- }
534
- else {
535
- requestExclusiveOpen();
536
- setCustomSelectOpen(true);
537
- }
538
- }, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { minW: "4.5rem", cursor: "pointer", display: "flex", justifyContent: "space-between", alignItems: "center", gap: 1, width: insideSelect.width, height: insideSelectBoxHeight, pl: "0.5rem", pr: "0.375rem", children: [insideLabel ? ((0, jsx_runtime_1.jsx)(SelectTruncatedLabel_1.default, { label: insideLabel, maxWidth: insideSelect.width || "6rem", fontSize: s.fieldFontSize })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.fieldFontSize, fontWeight: 500, color: theme.colors.textMuted, isTruncated: true, maxW: insideSelect.width || "6rem", children: insidePlaceholder })), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, color: customSelectOpen ? theme.colors.accentText : theme.colors.textMuted, transition: CHEVRON_TRANSITION, transform: customSelectOpen ? "rotate(180deg)" : "rotate(0deg)", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: s.chevronSize }) })] }), customSelectOpen && ((0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.Box, { ref: setInsideSelectMenuRef, id: insideSelectPortalId, position: "fixed", top: `${customSelectPos.top}px`, left: `${customSelectPos.left}px`, zIndex: 1510, bg: theme.colors.surfaceRaised, border: "0.063rem solid", borderColor: theme.colors.boxborder[200], borderRadius: "xl", boxShadow: theme.shadows.lg, minW: `${customSelectPos.width}px`, maxW: "20rem", py: 1, overflow: "hidden", children: (_c = insideSelect.option) === null || _c === void 0 ? void 0 : _c.map((item) => {
634
+ toggleCustomSelect();
635
+ }, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { minW: "4.5rem", cursor: "pointer", display: "flex", justifyContent: "space-between", alignItems: "center", gap: 1, width: insideSelect.width, height: insideSelectBoxHeight, pl: "0.5rem", pr: "0.375rem", children: [insideLabel ? ((0, jsx_runtime_1.jsx)(SelectTruncatedLabel_1.default, { label: insideLabel, maxWidth: insideSelect.width || "6rem", fontSize: s.fieldFontSize })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.fieldFontSize, fontWeight: 500, color: theme.colors.textMuted, isTruncated: true, maxW: insideSelect.width || "6rem", children: insidePlaceholder })), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, color: customSelectOpen ? theme.colors.accentText : theme.colors.textMuted, transition: CHEVRON_TRANSITION, transform: customSelectOpen ? "rotate(180deg)" : "rotate(0deg)", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: s.chevronSize }) })] }), customSelectOpen && ((0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.Box, { ref: setInsideSelectMenuRef, id: insideSelectPortalId, role: "listbox", "aria-label": insidePlaceholder, onKeyDown: handleInsideMenuKeyDown, onFocus: stopFocusBubbling, onBlur: stopFocusBubbling, position: "fixed", style: { top: `${customSelectPos.top}px`, left: `${customSelectPos.left}px` }, zIndex: zIndices_1.default.popoverNested, bg: theme.colors.surfaceRaised, border: `${borderWidths_1.BORDER_WIDTHS.hairline} solid`, borderColor: theme.colors.boxborder[200], borderRadius: "xl", boxShadow: theme.shadows.lg, minW: `${customSelectPos.width}px`, maxW: "20rem", py: 1, overflow: "hidden", children: (_c = insideSelect.option) === null || _c === void 0 ? void 0 : _c.map((item) => {
539
636
  var _a;
540
637
  const selected = ((_a = insideSelect.value) === null || _a === void 0 ? void 0 : _a.id) === item.id;
541
638
  return ((0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", alignItems: "center", justifyContent: "space-between", gap: spec.gap, minH: spec.minH, py: spec.py, px: spec.px, fontSize: spec.fontSize, fontWeight: (0, optionRowInk_1.optionRowWeight)(selected), color: (0, optionRowInk_1.optionRowInk)(theme.colors, selected), bg: selected ? rowBackgrounds.selected : "transparent", _hover: {
542
639
  bg: selected
543
640
  ? rowBackgrounds.selectedActive
544
641
  : rowBackgrounds.active,
545
- }, cursor: "pointer", onClick: (e) => {
642
+ }, cursor: "pointer", role: "option", "aria-selected": selected, tabIndex: -1, _focusVisible: insideFocusRing, onClick: (e) => {
546
643
  e.stopPropagation();
547
644
  handleCustomSelect(item);
548
645
  }, children: [(0, jsx_runtime_1.jsx)(react_2.Text, { isTruncated: true, children: item.label }), selected && ((0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: spec.iconSize, color: theme.colors.accentText }))] }, item.id));
@@ -563,7 +660,7 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
563
660
  }, onBlur: () => {
564
661
  setFocused(false);
565
662
  setFocusedTrigger((prev) => (prev === "input" ? null : prev));
566
- }, placeholder: selectedValues.length ? "" : placeholder })), (0, jsx_runtime_1.jsxs)(react_2.Box, { position: "absolute", right: s.rightOffset, top: "50%", transform: "translateY(-50%)", display: "flex", alignItems: "center", gap: 1, children: [isRemoveAllIcon && selectedValues.length > 0 && !isDisabled && ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { placement: "top", label: "Remove All", hasArrow: true, fontSize: "0.75rem", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: s.clearIconSize, color: theme.colors.text[900] }), "aria-label": "Clear all", variant: "ghost", size: s.iconButtonSize, onClick: handleClearAll, sx: {
663
+ }, placeholder: selectedValues.length ? "" : placeholder })), (0, jsx_runtime_1.jsxs)(react_2.Box, { position: "absolute", right: s.rightOffset, top: "50%", transform: "translateY(-50%)", display: "flex", alignItems: "center", gap: 1, children: [isRemoveAllIcon && selectedValues.length > 0 && !isDisabled && ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { placement: "top", label: "Remove All", hasArrow: true, fontSize: "xs", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: s.clearIconSize, color: theme.colors.text[900] }), "aria-label": "Clear all", variant: "ghost", size: s.iconButtonSize, onClick: handleClearAll, sx: {
567
664
  bg: "transparent",
568
665
  _hover: { bg: "transparent" },
569
666
  _active: { bg: "transparent" },
@@ -577,20 +674,10 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
577
674
  else {
578
675
  openMenu();
579
676
  }
580
- }, "aria-label": "toggle-dropdown", display: "flex", alignItems: "center", borderRadius: "sm", color: theme.colors.textMuted, cursor: isDisabled ? "not-allowed" : "pointer", sx: (0, focusRing_styles_1.focusVisibleStyles)(theme.colors), children: isOpen ? ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronUp, { size: s.chevronSize })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: s.chevronSize })) }))] })] }) }), isOpen && ((0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsxs)(react_2.Box, { ref: setDropdownMenuRef, id: listboxId, role: "listbox", "aria-multiselectable": isMultiple || undefined, position: "fixed", top: `${dropdownPos.top}px`, left: `${dropdownPos.left}px`, width: `${dropdownPos.width}px`, zIndex: 1500, maxH: "20rem", borderWidth: 1, borderColor: theme.colors.boxborder[200], borderRadius: "xl", overflow: "hidden", bg: theme.colors.surfaceRaised, boxShadow: theme.shadows.lg, display: "flex", flexDirection: "column", children: [isMultiple && isSelectAll && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: spec.py, px: spec.px, minH: spec.minH, cursor: "pointer", onClick: handleSelectAll, display: "flex", alignItems: "center", gap: spec.gap, color: theme.colors.text[700], borderBottom: `0.063rem solid ${theme.colors.boxborder[200]}`, children: [(0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: allFilteredSelected, sx: { pointerEvents: "none" }, size: s.checkboxSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: spec.fontSize, children: allFilteredSelected ? "Unselect All" : "Select All" })] })), (0, jsx_runtime_1.jsx)(react_2.Box, { ref: optionsListRef, flex: "1", overflowY: "auto", onScroll: handleScroll, maxH: "15rem", borderBottom: "0.063rem solid", borderColor: theme.colors.boxborder[200], children: isOptionLoading && filteredOptions.length === 0 ? ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: spec.py, px: spec.px, display: "flex", alignItems: "center", gap: spec.gap, minH: spec.minH, color: theme.colors.textMuted, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: s.spinnerSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: spec.fontSize, children: loadingText })] })) : !isOptionLoading && filteredOptions.length === 0 ? ((0, jsx_runtime_1.jsx)(react_2.Text, { p: 3, fontSize: spec.fontSize, color: theme.colors.textMuted, children: "No results found" })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [filteredOptions.map((option, index) => {
581
- const selected = isSelected(option.id);
582
- const singleSelected = selected && !isMultiple;
583
- return ((0, jsx_runtime_1.jsxs)(react_2.Box, { id: getOptionId(index), "data-index": index, role: "option", "aria-selected": selected, py: spec.py, px: spec.px, minH: spec.minH, cursor: "pointer", bg: selected
584
- ? index === activeIndex
585
- ? rowBackgrounds.selectedActive
586
- : rowBackgrounds.selected
587
- : index === activeIndex
588
- ? rowBackgrounds.active
589
- : "transparent", _hover: {
590
- bg: selected ? rowBackgrounds.selectedActive : rowBackgrounds.active,
591
- }, onClick: () => handleSelect(option), onMouseEnter: () => setActiveIndex(index), display: "flex", alignItems: "center", gap: spec.gap, color: (0, optionRowInk_1.optionRowInk)(theme.colors, singleSelected),
592
- // `view` is consumer JSX with no size of its own; it inherited the 16px body font.
593
- fontSize: spec.fontSize, fontWeight: (0, optionRowInk_1.optionRowWeight)(singleSelected), borderBottom: `0.063rem solid ${theme.colors.boxborder[200]}`, children: [isMultiple && ((0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: selected, sx: { pointerEvents: "none" }, size: s.checkboxSize })), option.view ? ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: option.view })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { isTruncated: true, children: option.label })), singleSelected && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.Check, size: spec.iconSize, color: theme.colors.accentText, flexShrink: 0 }))] }, option.id));
594
- }), ((pagination === null || pagination === void 0 ? void 0 : pagination.scrollLoading) || (isOptionLoading && filteredOptions.length > 0)) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: spec.py, px: spec.px, display: "flex", alignItems: "center", justifyContent: "center", gap: spec.gap, minH: spec.minH, color: theme.colors.textMuted, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: s.spinnerSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: spec.fontSize, children: loadingText })] }))] })) }), (addNew === null || addNew === void 0 ? void 0 : addNew.enabled) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: spec.py, px: spec.px, borderTop: "0.063rem solid", borderColor: theme.colors.boxborder[200], bg: theme.colors.surfaceRaised, display: "flex", alignItems: "center", gap: spec.gap, color: theme.colors.accentText, fontWeight: 500, minH: spec.minH, cursor: "pointer", onClick: addNew.onClick, _hover: { bg: rowBackgrounds.active }, children: [addNew.icon || (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: s.addNewIconSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: spec.fontSize, children: addNew.text || "Add New" })] }))] }) })), (0, jsx_runtime_1.jsx)(FieldMessage_1.default, { error: error, errorMessage: errorMessage, helperText: helperText, helperId: ids.helperId, errorId: ids.errorId })] }));
677
+ }, "aria-label": "toggle-dropdown", display: "flex", alignItems: "center", borderRadius: "sm", color: theme.colors.textMuted, cursor: isDisabled ? "not-allowed" : "pointer", sx: (0, focusRing_styles_1.focusVisibleStyles)(theme.colors), children: isOpen ? ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronUp, { size: s.chevronSize })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: s.chevronSize })) }))] })] }) }), isOpen && ((0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsxs)(react_2.Box, { ref: setDropdownMenuRef, id: listboxId, role: "listbox", "aria-label": (_f = label !== null && label !== void 0 ? label : ariaLabel) !== null && _f !== void 0 ? _f : placeholder, "aria-multiselectable": isMultiple || undefined, position: "fixed", style: {
678
+ top: `${dropdownPos.top}px`,
679
+ left: `${dropdownPos.left}px`,
680
+ width: `${dropdownPos.width}px`,
681
+ }, zIndex: zIndices_1.default.popover, maxH: "20rem", borderWidth: 1, borderColor: theme.colors.boxborder[200], borderRadius: "xl", overflow: "hidden", bg: theme.colors.surfaceRaised, boxShadow: theme.shadows.lg, display: "flex", flexDirection: "column", children: [isMultiple && isSelectAll && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: spec.py, px: spec.px, minH: spec.minH, cursor: "pointer", onClick: handleSelectAll, display: "flex", alignItems: "center", gap: spec.gap, color: theme.colors.text[700], borderBottom: `${borderWidths_1.BORDER_WIDTHS.hairline} solid ${theme.colors.boxborder[200]}`, children: [(0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: allFilteredSelected, sx: DECORATIVE_CHECKBOX_SX, size: s.checkboxSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: spec.fontSize, children: allFilteredSelected ? "Unselect All" : "Select All" })] })), (0, jsx_runtime_1.jsx)(react_2.Box, { ref: optionsListRef, flex: "1", overflowY: "auto", onScroll: handleScroll, maxH: "15rem", borderBottom: `${borderWidths_1.BORDER_WIDTHS.hairline} solid`, borderColor: theme.colors.boxborder[200], children: isOptionLoading && filteredOptions.length === 0 ? ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: spec.py, px: spec.px, display: "flex", alignItems: "center", gap: spec.gap, minH: spec.minH, color: theme.colors.textMuted, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: s.spinnerSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: spec.fontSize, children: loadingText })] })) : !isOptionLoading && filteredOptions.length === 0 ? ((0, jsx_runtime_1.jsx)(react_2.Text, { p: 3, fontSize: spec.fontSize, color: theme.colors.textMuted, children: "No results found" })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [filteredOptions.map((option, index) => ((0, jsx_runtime_1.jsx)(OptionRow, { option: option, index: index, optionId: getOptionId(index), isSelected: isSelected(option.id), isActive: index === activeIndex, isMultiple: isMultiple, spec: spec, colors: theme.colors, rowBackgrounds: rowBackgrounds, checkboxSize: s.checkboxSize, onSelect: selectOption, onActivate: setActiveIndex }, option.id))), ((pagination === null || pagination === void 0 ? void 0 : pagination.scrollLoading) || (isOptionLoading && filteredOptions.length > 0)) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: spec.py, px: spec.px, display: "flex", alignItems: "center", justifyContent: "center", gap: spec.gap, minH: spec.minH, color: theme.colors.textMuted, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: s.spinnerSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: spec.fontSize, children: loadingText })] }))] })) }), (addNew === null || addNew === void 0 ? void 0 : addNew.enabled) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: spec.py, px: spec.px, borderTop: `${borderWidths_1.BORDER_WIDTHS.hairline} solid`, borderColor: theme.colors.boxborder[200], bg: theme.colors.surfaceRaised, display: "flex", alignItems: "center", gap: spec.gap, color: theme.colors.accentText, fontWeight: 500, minH: spec.minH, cursor: "pointer", onClick: addNew.onClick, _hover: { bg: rowBackgrounds.active }, children: [addNew.icon || (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: s.addNewIconSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: spec.fontSize, children: addNew.text || "Add New" })] }))] }) })), (0, jsx_runtime_1.jsx)(FieldMessage_1.default, { error: error, errorMessage: errorMessage, helperText: helperText, helperId: ids.helperId, errorId: ids.errorId })] }));
595
682
  };
596
683
  exports.default = SearchSelect;
@@ -1,3 +1,9 @@
1
+ import { type ReactElement, type RefAttributes } from "react";
1
2
  import { SegmentedControlProps } from "./SegmentedControlProps";
2
- /** Renders role="radiogroup" of role="radio" buttons with roving tabindex, not a native form radio group; shares variant with Toggle/TableToggle (see MODULE.md). */
3
- export default function SegmentedControl<T extends string = string>({ options, value, onChange, size, isFullWidth, variant, orientation, surface, "aria-label": ariaLabel, }: SegmentedControlProps<T>): import("react/jsx-runtime").JSX.Element;
3
+ type SegmentedControlComponent = {
4
+ <T extends string = string>(props: SegmentedControlProps<T> & RefAttributes<HTMLDivElement>): ReactElement | null;
5
+ displayName?: string;
6
+ };
7
+ /** role="radiogroup" of role="radio" buttons with roving tabindex; shares variant with Toggle/TableToggle (see MODULE.md); `ref` is the radiogroup. */
8
+ declare const SegmentedControl: SegmentedControlComponent;
9
+ export default SegmentedControl;
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.default = SegmentedControl;
7
6
  const jsx_runtime_1 = require("react/jsx-runtime");
8
7
  const react_1 = require("react");
9
8
  const react_2 = require("@chakra-ui/react");
@@ -11,6 +10,7 @@ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
11
10
  const filledSurface_1 = require("../../Theme/tokens/builders/filledSurface");
12
11
  const controlSizes_1 = require("../../Theme/tokens/primitives/controlSizes");
13
12
  const motion_1 = require("../../Theme/tokens/primitives/motion");
13
+ const borderWidths_1 = require("../../Theme/tokens/primitives/borderWidths");
14
14
  const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
15
15
  const motion_2 = require("../../Theme/chakra/motion");
16
16
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
@@ -19,13 +19,12 @@ const Tag_1 = __importDefault(require("../Tag/Tag"));
19
19
  const useSlidingPill_1 = require("./useSlidingPill");
20
20
  const segmentedInk_1 = require("./segmentedInk");
21
21
  const TRACK_PADDING = "0.125rem";
22
- const UNDERLINE_WIDTH = "0.0625rem";
22
+ const UNDERLINE_WIDTH = borderWidths_1.BORDER_WIDTHS.hairline;
23
23
  const SLIDE = (0, motion_1.transitionFor)(["transform", "width"], "base");
24
24
  const MAX_COUNT = 99;
25
25
  const COUNT_TAG_SIZE = { sm: "xs", md: "sm", lg: "md" };
26
26
  const formatCount = (count) => (count > MAX_COUNT ? `${MAX_COUNT}+` : `${count}`);
27
- /** Renders role="radiogroup" of role="radio" buttons with roving tabindex, not a native form radio group; shares variant with Toggle/TableToggle (see MODULE.md). */
28
- function SegmentedControl({ options, value, onChange, size = "sm", isFullWidth = false, variant = "default", orientation = "horizontal", surface, "aria-label": ariaLabel, }) {
27
+ function SegmentedControlInner({ options, value, onChange, size = "sm", isFullWidth = false, variant = "default", orientation = "horizontal", surface, "aria-label": ariaLabel, }, ref) {
29
28
  var _a;
30
29
  const { colors, radii } = (0, useCustomTheme_1.useCustomTheme)();
31
30
  const control = controlSizes_1.BUTTON_SIZES[size];
@@ -66,6 +65,7 @@ function SegmentedControl({ options, value, onChange, size = "sm", isFullWidth =
66
65
  orientation,
67
66
  isCompact,
68
67
  ]);
68
+ const rootRef = (0, react_2.useMergeRefs)(trackRef, ref);
69
69
  const selectAt = (index) => {
70
70
  var _a;
71
71
  (_a = refs.current[index]) === null || _a === void 0 ? void 0 : _a.focus();
@@ -95,7 +95,7 @@ function SegmentedControl({ options, value, onChange, size = "sm", isFullWidth =
95
95
  selectAt(enabled[enabled.length - 1]);
96
96
  }
97
97
  };
98
- return ((0, jsx_runtime_1.jsxs)(react_2.Flex, { ref: trackRef, role: "radiogroup", "aria-label": ariaLabel, "aria-orientation": isVertical ? "vertical" : undefined, onKeyDown: handleKeyDown, onFocus: (event) => setShowFocus(event.target.matches(":focus-visible")), onBlur: () => setShowFocus(false), boxShadow: showFocus && !isUnderlineSlide ? trackFocusShadow : plateEdge, position: "relative", display: "inline-flex", flexDirection: isVertical ? "column" : "row", align: isVertical ? "stretch" : "center", gap: isUnderlineSlide ? "0" : TRACK_PADDING, p: isUnderlineSlide ? "0" : TRACK_PADDING, h: isVertical ? "fit-content" : control.height, boxSizing: "border-box", borderRadius: isUnderlineSlide ? "none" : "lg", borderBottom: isUnderlineSlide && !isVertical ? `${UNDERLINE_WIDTH} solid ${colors.boxborder[200]}` : undefined, borderLeft: isUnderlineSlide && isVertical ? `${UNDERLINE_WIDTH} solid ${colors.boxborder[200]}` : undefined, bg: isUnderlineSlide ? "transparent" : trackSurface, w: isFullWidth ? "100%" : "fit-content", minW: "max-content", children: [isBrandSlide && pill && ((0, jsx_runtime_1.jsx)(react_2.Box, { "aria-hidden": "true", position: "absolute", top: isVertical ? 0 : TRACK_PADDING, left: isVertical ? TRACK_PADDING : 0, right: isVertical ? TRACK_PADDING : undefined, h: segmentH, w: isVertical ? undefined : `${pill.width}px`, borderRadius: innerRadius, bg: brandFill.fill, boxShadow: `0 0.125rem 0.5rem ${colors.boxShadow.primary}`, transform: isVertical ? `translateY(${pill.top}px)` : `translateX(${pill.left}px)`, transition: SLIDE, sx: (0, motion_2.reducedMotionSx)() })), isUnderlineSlide && pill && ((0, jsx_runtime_1.jsx)(react_2.Box, { "aria-hidden": "true", position: "absolute", bottom: isVertical ? undefined : "-0.0625rem", left: isVertical ? "-0.0625rem" : 0, top: isVertical ? 0 : undefined, h: isVertical ? segmentH : "0.125rem", w: isVertical ? "0.125rem" : `${pill.width}px`, borderRadius: "full", bg: colors.primary[500], transform: isVertical ? `translateY(${pill.top}px)` : `translateX(${pill.left}px)`, transition: SLIDE, sx: (0, motion_2.reducedMotionSx)() })), options.map((option, index) => {
98
+ return ((0, jsx_runtime_1.jsxs)(react_2.Flex, { ref: rootRef, role: "radiogroup", "aria-label": ariaLabel, "aria-orientation": isVertical ? "vertical" : undefined, onKeyDown: handleKeyDown, onFocus: (event) => setShowFocus(event.target.matches(":focus-visible")), onBlur: () => setShowFocus(false), boxShadow: showFocus && !isUnderlineSlide ? trackFocusShadow : plateEdge, position: "relative", display: "inline-flex", flexDirection: isVertical ? "column" : "row", align: isVertical ? "stretch" : "center", gap: isUnderlineSlide ? "0" : TRACK_PADDING, p: isUnderlineSlide ? "0" : TRACK_PADDING, h: isVertical ? "fit-content" : control.height, boxSizing: "border-box", borderRadius: isUnderlineSlide ? "none" : "lg", borderBottom: isUnderlineSlide && !isVertical ? `${UNDERLINE_WIDTH} solid ${colors.boxborder[200]}` : undefined, borderLeft: isUnderlineSlide && isVertical ? `${UNDERLINE_WIDTH} solid ${colors.boxborder[200]}` : undefined, bg: isUnderlineSlide ? "transparent" : trackSurface, w: isFullWidth ? "100%" : "fit-content", minW: "max-content", children: [isBrandSlide && pill && ((0, jsx_runtime_1.jsx)(react_2.Box, { "aria-hidden": "true", position: "absolute", top: isVertical ? 0 : TRACK_PADDING, left: isVertical ? TRACK_PADDING : 0, right: isVertical ? TRACK_PADDING : undefined, h: segmentH, w: isVertical ? undefined : `${pill.width}px`, borderRadius: innerRadius, bg: brandFill.fill, boxShadow: `0 0.125rem 0.5rem ${colors.boxShadow.primary}`, transform: isVertical ? `translateY(${pill.top}px)` : `translateX(${pill.left}px)`, transition: SLIDE, sx: (0, motion_2.reducedMotionSx)() })), isUnderlineSlide && pill && ((0, jsx_runtime_1.jsx)(react_2.Box, { "aria-hidden": "true", position: "absolute", bottom: isVertical ? undefined : `-${UNDERLINE_WIDTH}`, left: isVertical ? `-${UNDERLINE_WIDTH}` : 0, top: isVertical ? 0 : undefined, h: isVertical ? segmentH : "0.125rem", w: isVertical ? "0.125rem" : `${pill.width}px`, borderRadius: "full", bg: colors.primary[500], transform: isVertical ? `translateY(${pill.top}px)` : `translateX(${pill.left}px)`, transition: SLIDE, sx: (0, motion_2.reducedMotionSx)() })), options.map((option, index) => {
99
99
  const isSelected = option.value === value;
100
100
  const showShortLabel = isCompact && !!option.shortLabel;
101
101
  const displayLabel = showShortLabel ? option.shortLabel : option.label;
@@ -118,3 +118,7 @@ function SegmentedControl({ options, value, onChange, size = "sm", isFullWidth =
118
118
  : restInk, fontSize: control.fontSize, fontWeight: isSelected ? 600 : 500, whiteSpace: "nowrap", opacity: option.isDisabled ? 0.5 : 1, cursor: option.isDisabled ? "not-allowed" : "pointer", transition: (0, motion_1.transitionFor)(["color"]), _hover: option.isDisabled || isSelected ? undefined : { color: hoverInk }, sx: { ...segmentFocus, ...(0, motion_2.reducedMotionSx)() }, children: [option.icon, displayLabel, option.count != null && ((0, jsx_runtime_1.jsx)(Tag_1.default, { label: formatCount(option.count), size: COUNT_TAG_SIZE[size], variant: "subtle", colorScheme: "gray" }))] }, option.value));
119
119
  })] }));
120
120
  }
121
+ /** role="radiogroup" of role="radio" buttons with roving tabindex; shares variant with Toggle/TableToggle (see MODULE.md); `ref` is the radiogroup. */
122
+ const SegmentedControl = (0, react_1.forwardRef)(SegmentedControlInner);
123
+ SegmentedControl.displayName = "SegmentedControl";
124
+ exports.default = SegmentedControl;
@@ -48,6 +48,7 @@ const optionRowSizes_1 = require("../../Theme/tokens/primitives/optionRowSizes")
48
48
  const scrollbar_1 = require("../../Theme/tokens/builders/scrollbar");
49
49
  const controlSizes_1 = require("../../Theme/tokens/primitives/controlSizes");
50
50
  const motion_1 = require("../../Theme/tokens/primitives/motion");
51
+ const borderWidths_1 = require("../../Theme/tokens/primitives/borderWidths");
51
52
  const motion_2 = require("../../Theme/chakra/motion");
52
53
  const chipTriggerSize_1 = require("../Common/chipTriggerSize");
53
54
  const fieldStyles_1 = require("../Common/fieldStyles");
@@ -62,6 +63,7 @@ const PAGE_STEP = 8;
62
63
  const LOAD_MORE_THRESHOLD_PX = 8;
63
64
  const DEFAULT_MAX_VISIBLE_CHIPS = 6;
64
65
  const VIRTUAL_OVERSCAN = 4;
66
+ const DECORATIVE_CHECKBOX_SX = { "& input": { visibility: "hidden" } };
65
67
  const asIdSet = (values) => new Set((values !== null && values !== void 0 ? values : []).map((v) => v.toString()));
66
68
  /** Regression-guarded id scheme — tickets e2e (`e2e/tests/helpers/selectV2.ts`) resolves it verbatim. */
67
69
  const optionDomId = (listboxId, id) => `${listboxId}-option-${id.toString().replace(/[^a-zA-Z0-9_-]/g, "-")}`;
@@ -73,7 +75,7 @@ const OptionRow = react_1.default.memo(function OptionRow({ option, index, listb
73
75
  const isSingleSelected = isSelected && !isMulti;
74
76
  const selectedBg = isActive ? backgrounds.selectedActive : backgrounds.selected;
75
77
  const restBg = isActive ? backgrounds.active : "transparent";
76
- return ((0, jsx_runtime_1.jsxs)(react_2.Box, { id: optionDomId(listboxId, option.id), "data-index": index, role: "option", "aria-selected": isSelected, "aria-disabled": option.isDisabled, onMouseEnter: () => onActivate(index), onClick: () => onSelect(option), mx: spec.mx, px: spec.px, py: spec.py, minH: spec.minH, borderRadius: "md", cursor: option.isDisabled ? "not-allowed" : "pointer", opacity: option.isDisabled ? 0.4 : 1, display: "flex", alignItems: "center", gap: spec.gap, fontSize: spec.fontSize, fontWeight: (0, optionRowInk_1.optionRowWeight)(isSingleSelected), color: (0, optionRowInk_1.optionRowInk)(theme.colors, isSingleSelected), bg: isSingleSelected ? selectedBg : restBg, transition: ROW_TRANSITION, sx: (0, motion_2.reducedMotionSx)(), children: [isMulti ? ((0, jsx_runtime_1.jsx)(react_2.Checkbox, { id: `${optionDomId(listboxId, option.id)}-checkbox`, isChecked: isSelected, isDisabled: option.isDisabled, pointerEvents: "none", tabIndex: -1 })) : null, renderOption ? ((0, jsx_runtime_1.jsx)(react_2.Box, { flex: 1, minW: 0, children: renderOption(option, { isSelected, isActive }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [option.icon ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, children: option.icon })) : null, (0, jsx_runtime_1.jsxs)(react_2.Box, { flex: 1, minW: 0, isTruncated: true, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", isTruncated: true, children: option.label }), option.description ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "block", fontSize: spec.descriptionFontSize, color: (0, optionRowInk_1.optionRowDescriptionInk)(theme.colors), isTruncated: true, children: option.description })) : null] })] })), isSingleSelected ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.Check, size: spec.iconSize, color: theme.colors.accentText, flexShrink: 0 })) : null] }));
78
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { id: optionDomId(listboxId, option.id), "data-index": index, role: "option", "aria-selected": isSelected, "aria-disabled": option.isDisabled, onMouseEnter: () => onActivate(index), onClick: () => onSelect(option), mx: spec.mx, px: spec.px, py: spec.py, minH: spec.minH, borderRadius: "md", cursor: option.isDisabled ? "not-allowed" : "pointer", opacity: option.isDisabled ? 0.4 : 1, display: "flex", alignItems: "center", gap: spec.gap, fontSize: spec.fontSize, fontWeight: (0, optionRowInk_1.optionRowWeight)(isSingleSelected), color: (0, optionRowInk_1.optionRowInk)(theme.colors, isSingleSelected), bg: isSingleSelected ? selectedBg : restBg, transition: ROW_TRANSITION, sx: (0, motion_2.reducedMotionSx)(), children: [isMulti ? ((0, jsx_runtime_1.jsx)(react_2.Checkbox, { id: `${optionDomId(listboxId, option.id)}-checkbox`, isChecked: isSelected, isDisabled: option.isDisabled, pointerEvents: "none", tabIndex: -1, sx: DECORATIVE_CHECKBOX_SX })) : null, renderOption ? ((0, jsx_runtime_1.jsx)(react_2.Box, { flex: 1, minW: 0, children: renderOption(option, { isSelected, isActive }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [option.icon ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, children: option.icon })) : null, (0, jsx_runtime_1.jsxs)(react_2.Box, { flex: 1, minW: 0, isTruncated: true, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", isTruncated: true, children: option.label }), option.description ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "block", fontSize: spec.descriptionFontSize, color: (0, optionRowInk_1.optionRowDescriptionInk)(theme.colors), isTruncated: true, children: option.description })) : null] })] })), isSingleSelected ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.Check, size: spec.iconSize, color: theme.colors.accentText, flexShrink: 0 })) : null] }));
77
79
  });
78
80
  const buildGroupedRows = (options) => {
79
81
  const rows = [];
@@ -90,7 +92,7 @@ const buildGroupedRows = (options) => {
90
92
  };
91
93
  /** The unified `Select`'s popup mode (`native={false}`) — absorbs SelectV2's behaviour, plus clear/create/groups/virtualization. */
92
94
  const SelectPopup = (0, react_1.forwardRef)(function SelectPopup(props, ref) {
93
- var _a, _b, _c, _d;
95
+ var _a, _b, _c, _d, _e;
94
96
  const { options = [], id, name, placeholder = "Select Option", label, error = false, errorMessage, helperText, isDisabled = false, isReadOnly = false, isRequired = false, isInformation = false, informationMessage, size = controlSizes_1.DEFAULT_CONTROL_SIZE, isSearchable = true, width, formControlStyle, onBlur, onFocus, renderOption, renderValue, maxMenuHeight = "16rem", defaultOpen = false, isLoading = false, loadingText = "Loading...", onLoadMore, hasMore, onSearchChange, searchValue, defaultSearchValue, searchDebounceMs = 0, filterOptions, isClearable = false, onClear, noOptionsMessage, onCreate, createLabel, virtualizeAfter, "data-testid": dataTestId, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, } = props;
95
97
  const theme = (0, useCustomTheme_1.useCustomTheme)();
96
98
  const { colors } = theme;
@@ -472,10 +474,10 @@ const SelectPopup = (0, react_1.forwardRef)(function SelectPopup(props, ref) {
472
474
  const selectedValueIds = selectedOptions.map((option) => option.id.toString());
473
475
  const hiddenValues = !name ? [] : props.isMulti ? selectedValueIds : [(_c = selectedValueIds[0]) !== null && _c !== void 0 ? _c : ""];
474
476
  const groupedRows = (0, react_1.useMemo)(() => (hasGroups ? buildGroupedRows(filteredOptions) : []), [hasGroups, filteredOptions]);
475
- return ((0, jsx_runtime_1.jsxs)(react_2.FormControl, { isInvalid: error, isDisabled: isDisabled, isReadOnly: isReadOnly, style: formControlStyle, width: width, children: [label && ((0, jsx_runtime_1.jsx)(FormLabel_1.TextLabel, { label: label, id: ids.inputId, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })), (0, jsx_runtime_1.jsxs)(react_2.Popover, { isOpen: isOpen, onClose: () => resetAndClose(), placement: "bottom-start", autoFocus: false, returnFocusOnClose: false, gutter: 4, children: [(0, jsx_runtime_1.jsx)(react_2.PopoverAnchor, { children: (0, jsx_runtime_1.jsxs)(react_2.Box, { as: "div", ref: mergedTriggerRef, ...ids.controlProps, role: "combobox", tabIndex: isDisabled ? -1 : 0, "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-controls": listboxId, "aria-owns": `${listboxId} ${filterInputId}`, "aria-activedescendant": activeDescendantId, "aria-disabled": isDisabled || undefined, "data-readonly": isReadOnly || undefined, "aria-required": isRequired || undefined, "aria-label": triggerAriaLabel(), "aria-labelledby": ariaLabelledBy, onClick: handleOpen, onKeyDown: handleTriggerKeyDown, display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", textAlign: "left", cursor: isDisabled ? "not-allowed" : isReadOnly ? "default" : "pointer", "data-testid": dataTestId, sx: triggerSx, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexWrap: showChips ? "wrap" : "nowrap", alignItems: "center", gap: showChips ? 1 : 1.5, minW: 0, flex: 1, isTruncated: !showChips, children: showChips ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [visibleChipOptions.map((option) => ((0, jsx_runtime_1.jsx)(Tag_1.default, { label: String(option.label), size: chipSize, variant: "subtle", icon: isInteractive ? lucide_react_1.X : undefined, onIconClick: isInteractive ? () => handleSelect(option) : undefined }, option.id))), overflowChipCount > 0 && ((0, jsx_runtime_1.jsx)(Tag_1.default, { label: `+${overflowChipCount}`, size: chipSize, variant: "subtle", colorScheme: "gray" }))] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [triggerIcon ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, children: triggerIcon })) : null, (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", isTruncated: true, children: renderValue ? renderValue(selectedOptions) : defaultTriggerContent() })] })) }), showClear && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", "aria-label": "Clear selection", onClick: handleClear, display: "inline-flex", alignItems: "center", justifyContent: "center", flexShrink: 0, ml: 2, color: colors.textMuted, _hover: { color: colors.text[700] }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: controlSizes_1.CONTROL_SIZES[size].iconSize }) })), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, ml: 2, transition: CHEVRON_TRANSITION, transform: isOpen ? "rotate(180deg)" : "rotate(0deg)", color: colors.textMuted, sx: (0, motion_2.reducedMotionSx)(), children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: controlSizes_1.CONTROL_SIZES[size].iconSize }) })] }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsxs)(react_2.PopoverContent, { width: "max-content", minWidth: triggerWidth ? `${triggerWidth}px` : undefined, maxWidth: "min(24rem, calc(100vw - 2rem))", borderRadius: "xl", boxShadow: theme.shadows.lg, overflow: "hidden", onKeyDown: handleListKeyDown, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { p: spec.mx, borderBottom: `0.063rem solid ${colors.boxborder[200]}`, display: isSearchable ? undefined : "none", children: (0, jsx_runtime_1.jsx)(react_2.Input, { ref: filterInputRef, id: filterInputId, size: size, px: spec.px, placeholder: "Type to filter...", value: currentSearch, onChange: handleFilterChange, "aria-activedescendant": activeDescendantId, "aria-controls": listboxId, "aria-label": "Filter options", tabIndex: isSearchable ? undefined : -1 }) }), (0, jsx_runtime_1.jsxs)(react_2.Box, { id: listboxId, ref: listRef, role: "listbox", "aria-label": (_d = label !== null && label !== void 0 ? label : ariaLabel) !== null && _d !== void 0 ? _d : placeholder, "aria-multiselectable": props.isMulti || undefined, "aria-busy": isLoading || undefined, maxH: maxMenuHeight, overflowY: "auto", py: 1, sx: listScrollStyles, onScroll: handleListScroll, children: [filteredOptions.length === 0 && !isLoading && !showCreateRow && ((0, jsx_runtime_1.jsx)(react_2.Box, { mx: spec.mx, px: spec.px, py: spec.py, fontSize: spec.fontSize, color: colors.textMuted, children: noOptionsMessage !== null && noOptionsMessage !== void 0 ? noOptionsMessage : "No Options" })), showCreateRow && ((0, jsx_runtime_1.jsx)(react_2.Box, { id: createRowId, role: "option", "aria-selected": false, "data-index": -1, onClick: handleCreate, mx: spec.mx, px: spec.px, py: spec.py, minH: spec.minH, borderRadius: "md", cursor: "pointer", fontSize: spec.fontSize, fontWeight: 600, color: colors.primary[600], bg: activeDescendantId === createRowId ? rowBackgrounds.active : "transparent", children: createLabel ? createLabel(currentSearch.trim()) : `Create "${currentSearch.trim()}"` })), hasGroups
477
+ return ((0, jsx_runtime_1.jsxs)(react_2.FormControl, { isInvalid: error, isDisabled: isDisabled, isReadOnly: isReadOnly, style: formControlStyle, width: width, children: [label && ((0, jsx_runtime_1.jsx)(FormLabel_1.TextLabel, { label: label, id: ids.inputId, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })), (0, jsx_runtime_1.jsxs)(react_2.Popover, { isOpen: isOpen, onClose: () => resetAndClose(), placement: "bottom-start", autoFocus: false, returnFocusOnClose: false, gutter: 4, children: [(0, jsx_runtime_1.jsx)(react_2.PopoverAnchor, { children: (0, jsx_runtime_1.jsxs)(react_2.Box, { as: "div", ref: mergedTriggerRef, ...ids.controlProps, role: "combobox", tabIndex: isDisabled ? -1 : 0, "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-controls": listboxId, "aria-owns": `${listboxId} ${filterInputId}`, "aria-activedescendant": activeDescendantId, "aria-disabled": isDisabled || undefined, "data-readonly": isReadOnly || undefined, "aria-required": isRequired || undefined, "aria-label": triggerAriaLabel(), "aria-labelledby": ariaLabelledBy, onClick: handleOpen, onKeyDown: handleTriggerKeyDown, display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", textAlign: "left", cursor: isDisabled ? "not-allowed" : isReadOnly ? "default" : "pointer", "data-testid": dataTestId, sx: triggerSx, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexWrap: showChips ? "wrap" : "nowrap", alignItems: "center", gap: showChips ? 1 : 1.5, minW: 0, flex: 1, isTruncated: !showChips, children: showChips ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [visibleChipOptions.map((option) => ((0, jsx_runtime_1.jsx)(Tag_1.default, { label: String(option.label), size: chipSize, variant: "subtle", icon: isInteractive ? lucide_react_1.X : undefined, onIconClick: isInteractive ? () => handleSelect(option) : undefined }, option.id))), overflowChipCount > 0 && ((0, jsx_runtime_1.jsx)(Tag_1.default, { label: `+${overflowChipCount}`, size: chipSize, variant: "subtle", colorScheme: "gray" }))] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [triggerIcon ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, children: triggerIcon })) : null, (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", isTruncated: true, children: renderValue ? renderValue(selectedOptions) : defaultTriggerContent() })] })) }), showClear && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", "aria-label": "Clear selection", onClick: handleClear, display: "inline-flex", alignItems: "center", justifyContent: "center", flexShrink: 0, ml: 2, color: colors.textMuted, _hover: { color: colors.text[700] }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: controlSizes_1.CONTROL_SIZES[size].iconSize }) })), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, ml: 2, transition: CHEVRON_TRANSITION, transform: isOpen ? "rotate(180deg)" : "rotate(0deg)", color: colors.textMuted, sx: (0, motion_2.reducedMotionSx)(), children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: controlSizes_1.CONTROL_SIZES[size].iconSize }) })] }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsxs)(react_2.PopoverContent, { "aria-label": (_d = label !== null && label !== void 0 ? label : ariaLabel) !== null && _d !== void 0 ? _d : placeholder, width: "max-content", minWidth: triggerWidth ? `${triggerWidth}px` : undefined, maxWidth: "min(24rem, calc(100vw - 2rem))", borderRadius: "xl", boxShadow: theme.shadows.lg, overflow: "hidden", onKeyDown: handleListKeyDown, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { p: spec.mx, borderBottom: `${borderWidths_1.BORDER_WIDTHS.hairline} solid ${colors.boxborder[200]}`, display: isSearchable ? undefined : "none", children: (0, jsx_runtime_1.jsx)(react_2.Input, { ref: filterInputRef, id: filterInputId, size: size, px: spec.px, placeholder: "Type to filter...", value: currentSearch, onChange: handleFilterChange, "aria-activedescendant": activeDescendantId, "aria-controls": listboxId, "aria-label": "Filter options", tabIndex: isSearchable ? undefined : -1 }) }), (0, jsx_runtime_1.jsxs)(react_2.Box, { id: listboxId, ref: listRef, role: "listbox", "aria-label": (_e = label !== null && label !== void 0 ? label : ariaLabel) !== null && _e !== void 0 ? _e : placeholder, "aria-multiselectable": props.isMulti || undefined, "aria-busy": isLoading || undefined, maxH: maxMenuHeight, overflowY: "auto", py: 1, sx: listScrollStyles, onScroll: handleListScroll, children: [filteredOptions.length === 0 && !isLoading && !showCreateRow && ((0, jsx_runtime_1.jsx)(react_2.Box, { mx: spec.mx, px: spec.px, py: spec.py, fontSize: spec.fontSize, color: colors.textMuted, children: noOptionsMessage !== null && noOptionsMessage !== void 0 ? noOptionsMessage : "No Options" })), showCreateRow && ((0, jsx_runtime_1.jsx)(react_2.Box, { id: createRowId, role: "option", "aria-selected": false, "data-index": -1, onClick: handleCreate, mx: spec.mx, px: spec.px, py: spec.py, minH: spec.minH, borderRadius: "md", cursor: "pointer", fontSize: spec.fontSize, fontWeight: 600, color: colors.primary[600], bg: activeDescendantId === createRowId ? rowBackgrounds.active : "transparent", children: createLabel ? createLabel(currentSearch.trim()) : `Create "${currentSearch.trim()}"` })), hasGroups
476
478
  ? groupedRows.map((row) => {
477
479
  var _a;
478
- return row.kind === "header" ? ((0, jsx_runtime_1.jsx)(react_2.Box, { mx: spec.mx, px: spec.px, pt: 2, pb: 1, fontSize: "0.6875rem", fontWeight: 600, textTransform: "uppercase", letterSpacing: "0.03em", color: colors.textMuted, children: row.group }, row.key)) : ((0, jsx_runtime_1.jsx)(OptionRow, { option: row.option, index: row.index, listboxId: listboxId, isSelected: selectedIds.has(row.option.id.toString()), isActive: row.index === activeIndex, isMulti: (_a = props.isMulti) !== null && _a !== void 0 ? _a : false, theme: theme, backgrounds: rowBackgrounds, spec: spec, renderOption: renderOption, onSelect: handleSelect, onActivate: setActiveIndex }, row.key));
480
+ return row.kind === "header" ? ((0, jsx_runtime_1.jsx)(react_2.Box, { mx: spec.mx, px: spec.px, pt: 2, pb: 1, fontSize: "xs-minus", fontWeight: 600, textTransform: "uppercase", letterSpacing: "0.03em", color: colors.textMuted, children: row.group }, row.key)) : ((0, jsx_runtime_1.jsx)(OptionRow, { option: row.option, index: row.index, listboxId: listboxId, isSelected: selectedIds.has(row.option.id.toString()), isActive: row.index === activeIndex, isMulti: (_a = props.isMulti) !== null && _a !== void 0 ? _a : false, theme: theme, backgrounds: rowBackgrounds, spec: spec, renderOption: renderOption, onSelect: handleSelect, onActivate: setActiveIndex }, row.key));
479
481
  })
480
482
  : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [topPadPx > 0 && (0, jsx_runtime_1.jsx)(react_2.Box, { height: `${topPadPx}px` }), renderedOptions.map((option, i) => {
481
483
  var _a;
@@ -13,6 +13,7 @@ const fieldStyles_1 = require("../Common/fieldStyles");
13
13
  const useFieldIds_1 = require("../Common/useFieldIds");
14
14
  const FieldMessage_1 = __importDefault(require("../Common/FieldMessage"));
15
15
  const motion_1 = require("../../Theme/tokens/primitives/motion");
16
+ const borderWidths_1 = require("../../Theme/tokens/primitives/borderWidths");
16
17
  const controlSizes_1 = require("../../Theme/tokens/primitives/controlSizes");
17
18
  const optionRowSizes_1 = require("../../Theme/tokens/primitives/optionRowSizes");
18
19
  const motion_2 = require("../../Theme/chakra/motion");
@@ -212,9 +213,9 @@ function SelectSearch({ options, initialSelectedOption, onOptionSelect, inputOnc
212
213
  }
213
214
  };
214
215
  (0, react_1.useEffect)(() => {
215
- if (isOpen) {
216
- updateDropdownPosition();
217
- }
216
+ if (!isOpen)
217
+ return;
218
+ updateDropdownPosition();
218
219
  const handleClickOutside = (event) => {
219
220
  if (inputRef.current &&
220
221
  dropdownRef.current &&
@@ -234,7 +235,7 @@ function SelectSearch({ options, initialSelectedOption, onOptionSelect, inputOnc
234
235
  return;
235
236
  }
236
237
  openDropdown();
237
- }, onChange: (e) => handleInputChange(e.target.value), placeholder: placeholder, onKeyDown: handleKeyDown, name: name, role: "combobox", "aria-autocomplete": "list", "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-controls": listboxId, "aria-required": isRequired || undefined, cursor: "pointer", sx: { ...(0, fieldStyles_1.fieldControlStyles)(theme.colors), ...(0, fieldStyles_1.controlSizeStyles)(size), ...(0, motion_2.reducedMotionSx)() }, style: inputStyle }), rightIcon && ((0, jsx_runtime_1.jsx)(react_2.InputRightElement, { pointerEvents: "none", height: "100%", display: "flex", alignItems: "center", children: rightIcon, style: { ...rightElementStyle } }))] }), isOpen && ((0, jsx_runtime_1.jsxs)(react_2.Box, { ref: dropdownRef, marginTop: "0.313rem", position: "absolute", top: position === "below" ? "100%" : "auto", bottom: position === "above" ? "100%" : "auto", left: 0, right: 0, border: "0.063rem solid", borderColor: theme.colors.boxborder[200], borderRadius: "xl", boxShadow: theme.shadows.lg, bg: theme.colors.surfaceRaised, maxHeight: "9.375rem", overflowY: "auto", zIndex: 10, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { id: listboxId, role: "listbox", "aria-label": label !== null && label !== void 0 ? label : placeholder, onKeyDown: handleListKeyDown, children: (0, jsx_runtime_1.jsx)(RenderOptions, { isOptionLoading: isOptionLoading, filteredOptions: filteredOptions, loadingText: loadingText, handleOptionClick: handleOptionClick, isProfile: isProfile, isColorOptions: isColorOptions, isOptionSelected: isOptionSelected, activeIndex: activeIndex, optionRefs: optionRefs, size: size, isMultipleSelect: isMultipleSelect }) }), (0, jsx_runtime_1.jsx)("hr", {}), isBottomIcon && ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "sticky", bottom: 0, background: theme.colors.surfaceRaised, display: "flex", alignItems: "center", pl: "1rem", cursor: "pointer", onClick: handleBottomClick, borderColor: theme.colors.boxborder[200], zIndex: 1, borderTop: `1px solid ${theme.colors.boxborder[200]}`, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { children: BottomIcon ? BottomIcon : (0, jsx_runtime_1.jsx)(lucide_react_1.PlusIcon, { size: "1rem" }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "0.875rem", color: BottomTextColor
238
+ }, onChange: (e) => handleInputChange(e.target.value), placeholder: placeholder, onKeyDown: handleKeyDown, name: name, role: "combobox", "aria-autocomplete": "list", "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-controls": listboxId, "aria-required": isRequired || undefined, cursor: "pointer", sx: { ...(0, fieldStyles_1.fieldControlStyles)(theme.colors), ...(0, fieldStyles_1.controlSizeStyles)(size), ...(0, motion_2.reducedMotionSx)() }, style: inputStyle }), rightIcon && ((0, jsx_runtime_1.jsx)(react_2.InputRightElement, { pointerEvents: "none", height: "100%", display: "flex", alignItems: "center", children: rightIcon, style: { ...rightElementStyle } }))] }), isOpen && ((0, jsx_runtime_1.jsxs)(react_2.Box, { ref: dropdownRef, marginTop: "0.313rem", position: "absolute", top: position === "below" ? "100%" : "auto", bottom: position === "above" ? "100%" : "auto", left: 0, right: 0, border: `${borderWidths_1.BORDER_WIDTHS.hairline} solid`, borderColor: theme.colors.boxborder[200], borderRadius: "xl", boxShadow: theme.shadows.lg, bg: theme.colors.surfaceRaised, maxHeight: "9.375rem", overflowY: "auto", zIndex: 10, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { id: listboxId, role: "listbox", "aria-label": label !== null && label !== void 0 ? label : placeholder, onKeyDown: handleListKeyDown, children: (0, jsx_runtime_1.jsx)(RenderOptions, { isOptionLoading: isOptionLoading, filteredOptions: filteredOptions, loadingText: loadingText, handleOptionClick: handleOptionClick, isProfile: isProfile, isColorOptions: isColorOptions, isOptionSelected: isOptionSelected, activeIndex: activeIndex, optionRefs: optionRefs, size: size, isMultipleSelect: isMultipleSelect }) }), (0, jsx_runtime_1.jsx)("hr", {}), isBottomIcon && ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "sticky", bottom: 0, background: theme.colors.surfaceRaised, display: "flex", alignItems: "center", pl: "1rem", cursor: "pointer", onClick: handleBottomClick, borderColor: theme.colors.boxborder[200], zIndex: 1, borderTop: `1px solid ${theme.colors.boxborder[200]}`, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { children: BottomIcon ? BottomIcon : (0, jsx_runtime_1.jsx)(lucide_react_1.PlusIcon, { size: "1rem" }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "sm", color: BottomTextColor
238
239
  ? BottomTextColor
239
240
  : theme.colors.accentText, padding: "8px 8px", children: BottomText || "Add New" })] }))] })), (0, jsx_runtime_1.jsx)(FieldMessage_1.default, { error: error, errorMessage: errorMessage, helperText: helperText, helperId: ids.helperId, errorId: ids.errorId })] }) }) }));
240
241
  }
@@ -19,6 +19,6 @@ const SettingRow = ({ title, description, control, htmlFor, descriptionId, isDis
19
19
  "aria-describedby": (_a = controlProps === null || controlProps === void 0 ? void 0 : controlProps["aria-describedby"]) !== null && _a !== void 0 ? _a : resolvedDescriptionId,
20
20
  })
21
21
  : control;
22
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_1.Divider, { borderColor: colors.boxborder[200] }), (0, jsx_runtime_1.jsxs)(react_1.Grid, { templateColumns: { base: "1fr", md: "15rem 1fr" }, gap: { base: 2, md: 6 }, py: 4, alignItems: "start", opacity: isDisabled ? 0.5 : 1, "aria-disabled": isDisabled || undefined, children: [(0, jsx_runtime_1.jsxs)(react_1.Box, { children: [htmlFor ? ((0, jsx_runtime_1.jsx)(react_1.Text, { as: "label", htmlFor: htmlFor, display: "block", fontSize: "sm", fontWeight: 500, color: colors.text[800], children: title })) : ((0, jsx_runtime_1.jsx)(react_1.Text, { id: titleId, fontSize: "sm", fontWeight: 500, color: colors.text[800], children: title })), (0, jsx_runtime_1.jsx)(react_1.Text, { id: resolvedDescriptionId, mt: 0.5, fontSize: "0.8125rem", color: colors.textMuted, children: description })] }), (0, jsx_runtime_1.jsx)(react_1.Flex, { minW: 0, justify: { base: "flex-start", md: "flex-end" }, children: namedControl })] })] }));
22
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_1.Divider, { borderColor: colors.boxborder[200] }), (0, jsx_runtime_1.jsxs)(react_1.Grid, { templateColumns: { base: "1fr", md: "15rem 1fr" }, gap: { base: 2, md: 6 }, py: 4, alignItems: "start", opacity: isDisabled ? 0.5 : 1, "aria-disabled": isDisabled || undefined, children: [(0, jsx_runtime_1.jsxs)(react_1.Box, { children: [htmlFor ? ((0, jsx_runtime_1.jsx)(react_1.Text, { as: "label", htmlFor: htmlFor, display: "block", fontSize: "sm", fontWeight: 500, color: colors.text[800], children: title })) : ((0, jsx_runtime_1.jsx)(react_1.Text, { id: titleId, fontSize: "sm", fontWeight: 500, color: colors.text[800], children: title })), (0, jsx_runtime_1.jsx)(react_1.Text, { id: resolvedDescriptionId, mt: 0.5, fontSize: "xs-plus", color: colors.textMuted, children: description })] }), (0, jsx_runtime_1.jsx)(react_1.Flex, { minW: 0, justify: { base: "flex-start", md: "flex-end" }, children: namedControl })] })] }));
23
23
  };
24
24
  exports.default = SettingRow;
@@ -9,6 +9,7 @@ const react_2 = require("@chakra-ui/react");
9
9
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
10
10
  const sidebarAccentColors_1 = require("./sidebarAccentColors");
11
11
  const motion_1 = require("../../Theme/tokens/primitives/motion");
12
+ const zIndices_1 = __importDefault(require("../../Theme/tokens/primitives/zIndices"));
12
13
  const sidebarFocus_1 = require("./sidebarFocus");
13
14
  const menuDisabled_1 = require("./menuDisabled");
14
15
  const lucide_react_1 = require("lucide-react");
@@ -52,7 +53,7 @@ const CollapsedItem = ({ item, isActive, itemFontSize, onItemClick }) => {
52
53
  e.preventDefault();
53
54
  if (!blocked)
54
55
  onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item);
55
- }, bg: isActive ? "whiteAlpha.300" : "transparent", transition: "background 0.12s", sx: (0, sidebarFocus_1.sidebarFocusStyles)(theme.colors), children: (0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", display: "flex", alignItems: "center", children: [(0, jsx_runtime_1.jsx)(react_2.Icon, { as: item.icon, fontSize: sidebarScale_1.SIDEBAR_ROW.iconSize, color: isActive ? activeAccent.icon : theme.colors.sidebar.mutedIcon, _groupHover: isActive ? undefined : { color: theme.colors.white }, transition: "color 0.12s" }), badgeVal != null && ((0, jsx_runtime_1.jsx)(react_2.Box, { position: "absolute", top: "0", right: "0", w: "0.375rem", h: "0.375rem", borderRadius: "full", bg: theme.colors.sidebar.semanticText.error }))] }) }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.PopoverContent, { borderRadius: "lg", bg: theme.colors.sidebar.elevated, boxShadow: "lg", minW: "10rem", maxW: "14rem", py: "0.125rem", ml: "-0.5rem", cursor: blocked ? "not-allowed" : "pointer", zIndex: 1500, color: theme.colors.white, border: 'none', children: (0, jsx_runtime_1.jsx)(react_2.PopoverBody, { p: 3, children: (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 2, justify: "space-between", children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 2, flex: "1", minW: 0, children: [(0, jsx_runtime_1.jsx)(react_2.Icon, { as: item.icon, fontSize: "md", flexShrink: 0 }), (0, jsx_runtime_1.jsx)(OverflowTooltipText_1.default, { placement: "right", maxWidth: "100%", fontSize: itemFontSize, fontWeight: "medium", as: "p", children: item.title })] }), item.locked ? (item.lockedReason ? ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: item.lockedReason, placement: "top", children: (0, jsx_runtime_1.jsx)(react_2.Icon, { as: lucide_react_1.LockKeyhole, fontSize: "sm", flexShrink: 0, color: theme.colors.sidebar.mutedIcon }) })) : ((0, jsx_runtime_1.jsx)(react_2.Icon, { as: lucide_react_1.LockKeyhole, fontSize: "sm", flexShrink: 0, color: theme.colors.sidebar.mutedIcon }))) : (badgeVal != null && ((0, jsx_runtime_1.jsx)(react_2.Badge, { ...softBadge(theme.colors, colorScheme, (0, sidebarAccent_1.sidebarRowPeak)(theme.colors.sidebar.elevated)), fontSize: "xs", variant: variant, borderRadius: radius, children: badgeVal })))] }) }) }) })] }));
56
+ }, bg: isActive ? "whiteAlpha.300" : "transparent", transition: "background 0.12s", sx: (0, sidebarFocus_1.sidebarFocusStyles)(theme.colors), children: (0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", display: "flex", alignItems: "center", children: [(0, jsx_runtime_1.jsx)(react_2.Icon, { as: item.icon, fontSize: sidebarScale_1.SIDEBAR_ROW.iconSize, color: isActive ? activeAccent.icon : theme.colors.sidebar.mutedIcon, _groupHover: isActive ? undefined : { color: theme.colors.white }, transition: "color 0.12s" }), badgeVal != null && ((0, jsx_runtime_1.jsx)(react_2.Box, { position: "absolute", top: "0", right: "0", w: "0.375rem", h: "0.375rem", borderRadius: "full", bg: theme.colors.sidebar.semanticText.error }))] }) }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.PopoverContent, { borderRadius: "lg", bg: theme.colors.sidebar.elevated, boxShadow: "lg", minW: "10rem", maxW: "14rem", py: "0.125rem", ml: "-0.5rem", cursor: blocked ? "not-allowed" : "pointer", zIndex: zIndices_1.default.popover, color: theme.colors.white, border: 'none', children: (0, jsx_runtime_1.jsx)(react_2.PopoverBody, { p: 3, children: (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 2, justify: "space-between", children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 2, flex: "1", minW: 0, children: [(0, jsx_runtime_1.jsx)(react_2.Icon, { as: item.icon, fontSize: "md", flexShrink: 0 }), (0, jsx_runtime_1.jsx)(OverflowTooltipText_1.default, { placement: "right", maxWidth: "100%", fontSize: itemFontSize, fontWeight: 500, as: "p", children: item.title })] }), item.locked ? (item.lockedReason ? ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: item.lockedReason, placement: "top", children: (0, jsx_runtime_1.jsx)(react_2.Icon, { as: lucide_react_1.LockKeyhole, fontSize: "sm", flexShrink: 0, color: theme.colors.sidebar.mutedIcon }) })) : ((0, jsx_runtime_1.jsx)(react_2.Icon, { as: lucide_react_1.LockKeyhole, fontSize: "sm", flexShrink: 0, color: theme.colors.sidebar.mutedIcon }))) : (badgeVal != null && ((0, jsx_runtime_1.jsx)(react_2.Badge, { ...softBadge(theme.colors, colorScheme, (0, sidebarAccent_1.sidebarRowPeak)(theme.colors.sidebar.elevated)), fontSize: "xs", variant: variant, borderRadius: radius, children: badgeVal })))] }) }) }) })] }));
56
57
  };
57
58
  const ExpandedItem = ({ item, isActive, itemFontSize, onItemClick }) => {
58
59
  var _a;