@cube-dev/ui-kit 0.0.0-canary-3f98351 → 0.0.0-canary-00718fb

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 (613) hide show
  1. package/es/_internal/hooks/index.js +1 -1
  2. package/es/_internal/hooks/use-chained-callback.js +1 -1
  3. package/es/_internal/hooks/use-debounced-value.js +1 -1
  4. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/es/_internal/hooks/use-effect-once.js +1 -1
  6. package/es/_internal/hooks/use-event.js +1 -1
  7. package/es/_internal/hooks/use-is-first-render.js +1 -1
  8. package/es/_internal/hooks/use-sync-ref.js +1 -1
  9. package/es/_internal/hooks/use-timer/index.js +1 -1
  10. package/es/_internal/hooks/use-timer/timer.js +1 -1
  11. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  12. package/es/_internal/hooks/use-update-effect.js +1 -1
  13. package/es/_internal/hooks/use-warn.js +1 -1
  14. package/es/_internal/index.js +1 -1
  15. package/es/components/Block.js +1 -1
  16. package/es/components/CollectionItem.js +1 -1
  17. package/es/components/GlobalStyles.js +1 -1
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +1 -1
  20. package/es/components/OpenTrasition.js +1 -1
  21. package/es/components/Root.js +1 -1
  22. package/es/components/actions/Action/Action.js +1 -1
  23. package/es/components/actions/Button/Button.js +1 -1
  24. package/es/components/actions/Button/index.js +1 -1
  25. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  26. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  27. package/es/components/actions/CommandMenu/index.js +1 -1
  28. package/es/components/actions/CommandMenu/styled.js +1 -1
  29. package/es/components/actions/ItemAction/ItemAction.js +1 -1
  30. package/es/components/actions/ItemAction/index.js +1 -1
  31. package/es/components/actions/ItemActionContext.js +1 -1
  32. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  33. package/es/components/actions/ItemButton/index.js +1 -1
  34. package/es/components/actions/Link/Link.js +1 -1
  35. package/es/components/actions/Menu/Menu.js +1 -1
  36. package/es/components/actions/Menu/MenuItem.js +1 -1
  37. package/es/components/actions/Menu/MenuSection.js +1 -1
  38. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  39. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  40. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  41. package/es/components/actions/Menu/context.js +1 -1
  42. package/es/components/actions/Menu/index.js +1 -1
  43. package/es/components/actions/Menu/styled.js +1 -1
  44. package/es/components/actions/index.js +1 -1
  45. package/es/components/actions/use-action.js +1 -1
  46. package/es/components/actions/use-anchored-menu.js +1 -1
  47. package/es/components/actions/use-context-menu.js +1 -1
  48. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  49. package/es/components/content/Alert/Alert.js +1 -1
  50. package/es/components/content/Alert/index.js +1 -1
  51. package/es/components/content/Alert/types.js +1 -1
  52. package/es/components/content/Alert/use-alert.js +1 -1
  53. package/es/components/content/Avatar/Avatar.js +1 -1
  54. package/es/components/content/Badge/Badge.js +1 -1
  55. package/es/components/content/Card/Card.js +1 -1
  56. package/es/components/content/Content.js +1 -1
  57. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  58. package/es/components/content/CopyPasteBlock/index.js +1 -1
  59. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  60. package/es/components/content/CopySnippet/index.js +1 -1
  61. package/es/components/content/Disclosure/Disclosure.js +1 -1
  62. package/es/components/content/Disclosure/index.js +1 -1
  63. package/es/components/content/Divider.js +1 -1
  64. package/es/components/content/Footer.js +1 -1
  65. package/es/components/content/Header.js +1 -1
  66. package/es/components/content/HotKeys/HotKeys.js +1 -1
  67. package/es/components/content/HotKeys/index.js +1 -1
  68. package/es/components/content/Item/Item.js +7 -11
  69. package/es/components/content/Item/index.js +1 -1
  70. package/es/components/content/ItemBadge/ItemBadge.js +1 -1
  71. package/es/components/content/ItemBadge/index.js +1 -1
  72. package/es/components/content/Layout/GridLayout.js +1 -1
  73. package/es/components/content/Layout/Layout.js +1 -1
  74. package/es/components/content/Layout/LayoutBlock.js +1 -1
  75. package/es/components/content/Layout/LayoutCenter.js +1 -1
  76. package/es/components/content/Layout/LayoutContainer.js +1 -1
  77. package/es/components/content/Layout/LayoutContent.js +1 -1
  78. package/es/components/content/Layout/LayoutContext.js +1 -1
  79. package/es/components/content/Layout/LayoutFlex.js +1 -1
  80. package/es/components/content/Layout/LayoutFooter.js +1 -1
  81. package/es/components/content/Layout/LayoutGrid.js +1 -1
  82. package/es/components/content/Layout/LayoutHeader.js +1 -1
  83. package/es/components/content/Layout/LayoutPane.js +1 -1
  84. package/es/components/content/Layout/LayoutPanel.js +1 -1
  85. package/es/components/content/Layout/LayoutPanelHeader.js +1 -1
  86. package/es/components/content/Layout/LayoutToolbar.js +1 -1
  87. package/es/components/content/Layout/hooks/useTinyScrollbar.js +1 -13
  88. package/es/components/content/Layout/index.js +1 -1
  89. package/es/components/content/Layout/utils.js +1 -1
  90. package/es/components/content/List/SectionHeading.js +1 -1
  91. package/es/components/content/List/index.js +1 -1
  92. package/es/components/content/Paragraph.js +1 -1
  93. package/es/components/content/Placeholder/Placeholder.js +1 -1
  94. package/es/components/content/PrismCode/PrismCode.js +1 -1
  95. package/es/components/content/PrismCode/prismSetup.js +1 -1
  96. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  97. package/es/components/content/Result/Result.js +1 -1
  98. package/es/components/content/Skeleton/Skeleton.js +1 -1
  99. package/es/components/content/Tag/Tag.js +1 -1
  100. package/es/components/content/Text.js +1 -1
  101. package/es/components/content/TextItem/TextItem.js +1 -1
  102. package/es/components/content/TextItem/index.js +1 -1
  103. package/es/components/content/Title.js +1 -1
  104. package/es/components/content/highlightText.js +1 -1
  105. package/es/components/content/use-auto-tooltip.js +1 -1
  106. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  107. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  108. package/es/components/fields/Checkbox/context.js +1 -1
  109. package/es/components/fields/Checkbox/index.js +1 -1
  110. package/es/components/fields/ComboBox/ComboBox.js +1 -1
  111. package/es/components/fields/ComboBox/index.js +1 -1
  112. package/es/components/fields/DatePicker/DateInput.js +1 -1
  113. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  114. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  115. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  116. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  117. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  118. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  119. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  120. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  121. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  122. package/es/components/fields/DatePicker/index.js +1 -1
  123. package/es/components/fields/DatePicker/intl.js +1 -1
  124. package/es/components/fields/DatePicker/parseDate.js +1 -1
  125. package/es/components/fields/DatePicker/props.js +1 -1
  126. package/es/components/fields/DatePicker/types.js +1 -1
  127. package/es/components/fields/DatePicker/utils.js +1 -1
  128. package/es/components/fields/FileInput/FileInput.js +1 -1
  129. package/es/components/fields/FilterListBox/FilterListBox.js +1 -1
  130. package/es/components/fields/FilterListBox/index.js +1 -1
  131. package/es/components/fields/FilterPicker/FilterPicker.js +1 -1
  132. package/es/components/fields/FilterPicker/index.js +1 -1
  133. package/es/components/fields/Input/Input.js +1 -1
  134. package/es/components/fields/Input/index.js +1 -1
  135. package/es/components/fields/ListBox/ListBox.js +1 -1
  136. package/es/components/fields/ListBox/index.js +1 -1
  137. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  138. package/es/components/fields/NumberInput/StepButton.js +1 -1
  139. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  140. package/es/components/fields/Picker/Picker.js +1 -1
  141. package/es/components/fields/Picker/index.js +1 -1
  142. package/es/components/fields/RadioGroup/Radio.js +1 -1
  143. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  144. package/es/components/fields/RadioGroup/context.js +1 -1
  145. package/es/components/fields/RadioGroup/index.js +1 -1
  146. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  147. package/es/components/fields/SearchInput/index.js +1 -1
  148. package/es/components/fields/Select/Select.js +1 -1
  149. package/es/components/fields/Select/index.js +1 -1
  150. package/es/components/fields/Slider/Gradation.js +1 -1
  151. package/es/components/fields/Slider/Header.js +1 -1
  152. package/es/components/fields/Slider/RangeSlider.js +1 -1
  153. package/es/components/fields/Slider/Slider.js +1 -1
  154. package/es/components/fields/Slider/SliderBase.js +1 -1
  155. package/es/components/fields/Slider/SliderInput.js +1 -1
  156. package/es/components/fields/Slider/SliderThumb.js +1 -1
  157. package/es/components/fields/Slider/SliderTrack.js +1 -1
  158. package/es/components/fields/Slider/elements.js +1 -1
  159. package/es/components/fields/Slider/index.js +1 -1
  160. package/es/components/fields/Slider/types.js +1 -1
  161. package/es/components/fields/Switch/Switch.js +1 -1
  162. package/es/components/fields/Switch/index.js +1 -1
  163. package/es/components/fields/TextArea/TextArea.js +1 -1
  164. package/es/components/fields/TextArea/index.js +1 -1
  165. package/es/components/fields/TextInput/TextInput.js +1 -1
  166. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  167. package/es/components/fields/TextInput/index.js +1 -1
  168. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  169. package/es/components/fields/TextInputMapper/index.js +1 -1
  170. package/es/components/fields/index.js +1 -1
  171. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  172. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  173. package/es/components/form/FieldWrapper/index.js +1 -1
  174. package/es/components/form/FieldWrapper/types.js +1 -1
  175. package/es/components/form/Form/Field.js +1 -1
  176. package/es/components/form/Form/Form.js +1 -1
  177. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  178. package/es/components/form/Form/ResetButton/index.js +1 -1
  179. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  180. package/es/components/form/Form/SubmitButton/index.js +1 -1
  181. package/es/components/form/Form/SubmitError.js +1 -1
  182. package/es/components/form/Form/index.js +1 -1
  183. package/es/components/form/Form/types.js +1 -1
  184. package/es/components/form/Form/use-field/index.js +1 -1
  185. package/es/components/form/Form/use-field/types.js +1 -1
  186. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  187. package/es/components/form/Form/use-field/use-field.js +1 -1
  188. package/es/components/form/Form/use-form.js +1 -1
  189. package/es/components/form/Form/validation.js +1 -1
  190. package/es/components/form/Label.js +1 -1
  191. package/es/components/form/index.js +1 -1
  192. package/es/components/form/wrapper.js +1 -1
  193. package/es/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  194. package/es/components/helpers/DisplayTransition/index.js +1 -1
  195. package/es/components/helpers/IconSwitch/IconSwitch.js +1 -1
  196. package/es/components/helpers/index.js +1 -1
  197. package/es/components/layout/Flex.js +1 -1
  198. package/es/components/layout/Flow.js +1 -1
  199. package/es/components/layout/Grid.js +1 -1
  200. package/es/components/layout/Panel.js +1 -1
  201. package/es/components/layout/Prefix.js +1 -1
  202. package/es/components/layout/ResizablePanel.js +1 -1
  203. package/es/components/layout/Space.js +1 -1
  204. package/es/components/layout/Suffix.js +1 -1
  205. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  206. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  207. package/es/components/other/Calendar/Calendar.js +1 -1
  208. package/es/components/other/Calendar/CalendarCell.js +1 -1
  209. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  210. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  211. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  212. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  213. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  214. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  215. package/es/components/overlays/AlertDialog/index.js +1 -1
  216. package/es/components/overlays/AlertDialog/types.js +1 -1
  217. package/es/components/overlays/Dialog/Dialog.js +1 -1
  218. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  219. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  220. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  221. package/es/components/overlays/Dialog/context.js +1 -1
  222. package/es/components/overlays/Dialog/index.js +1 -1
  223. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  224. package/es/components/overlays/Modal/Modal.js +1 -1
  225. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  226. package/es/components/overlays/Modal/Overlay.js +1 -1
  227. package/es/components/overlays/Modal/Popover.js +1 -1
  228. package/es/components/overlays/Modal/Tray.js +1 -1
  229. package/es/components/overlays/Modal/Underlay.js +1 -1
  230. package/es/components/overlays/Modal/index.js +1 -1
  231. package/es/components/overlays/Modal/types.js +1 -1
  232. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  233. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  234. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  235. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  236. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  237. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  238. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  239. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  240. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  241. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  242. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  243. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  244. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  245. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  246. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  247. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  248. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  249. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  250. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  251. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  252. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  253. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  254. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  255. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  256. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  257. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  258. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  259. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  260. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  261. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  262. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  263. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  264. package/es/components/overlays/NewNotifications/index.js +1 -1
  265. package/es/components/overlays/NewNotifications/types.js +1 -1
  266. package/es/components/overlays/Notification/Notification.js +1 -1
  267. package/es/components/overlays/OverlayWrapper.js +1 -1
  268. package/es/components/overlays/Toasts/Toast.js +1 -1
  269. package/es/components/overlays/Toasts/index.js +1 -1
  270. package/es/components/overlays/Toasts/types.js +1 -1
  271. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  272. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  273. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  274. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  275. package/es/components/overlays/Tooltip/context.js +1 -1
  276. package/es/components/overlays/Tooltip/index.js +1 -1
  277. package/es/components/portal/Portal.js +1 -1
  278. package/es/components/portal/PortalProvider.js +1 -1
  279. package/es/components/portal/index.js +1 -1
  280. package/es/components/portal/types.js +1 -1
  281. package/es/components/portal/usePortal.js +1 -1
  282. package/es/components/shared/InvalidIcon.js +1 -1
  283. package/es/components/shared/ValidIcon.js +1 -1
  284. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  285. package/es/components/status/LoadingAnimation/index.js +1 -1
  286. package/es/components/status/Spin/Cube.js +1 -1
  287. package/es/components/status/Spin/InternalSpinner.js +1 -1
  288. package/es/components/status/Spin/Spin.js +1 -1
  289. package/es/components/status/Spin/SpinsContainer.js +1 -1
  290. package/es/components/status/Spin/index.js +1 -1
  291. package/es/components/status/Spin/types.js +1 -1
  292. package/es/components/status/index.js +1 -1
  293. package/es/data/item-themes.js +1 -1
  294. package/es/data/themes.js +1 -1
  295. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  296. package/es/icons/AdjustmentsIcon.js +1 -1
  297. package/es/icons/AiIcon.js +1 -1
  298. package/es/icons/AreaChartIcon.js +1 -1
  299. package/es/icons/BackwardIcon.js +1 -1
  300. package/es/icons/BarChartIcon.js +1 -1
  301. package/es/icons/BellFilledIcon.js +1 -1
  302. package/es/icons/BellIcon.js +1 -1
  303. package/es/icons/BooleanIcon.js +1 -1
  304. package/es/icons/CalendarEditIcon.js +1 -1
  305. package/es/icons/CalendarIcon.js +1 -1
  306. package/es/icons/CaretDownIcon.js +1 -1
  307. package/es/icons/CaretUpIcon.js +1 -1
  308. package/es/icons/ChartAreaStackedIcon.js +1 -1
  309. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  310. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  311. package/es/icons/ChartBarGroupedIcon.js +1 -1
  312. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  313. package/es/icons/ChartBarLineIcon.js +1 -1
  314. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  315. package/es/icons/ChartBarStackedIcon.js +1 -1
  316. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  317. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  318. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  319. package/es/icons/ChartBoxPlotIcon.js +1 -1
  320. package/es/icons/ChartBubbleIcon.js +1 -1
  321. package/es/icons/ChartDonut2Icon.js +1 -1
  322. package/es/icons/ChartFunnelIcon.js +1 -1
  323. package/es/icons/ChartHeatmapIcon.js +1 -1
  324. package/es/icons/ChartKPIIcon.js +1 -1
  325. package/es/icons/ChartPie2Icon.js +1 -1
  326. package/es/icons/ChartScatterIcon.js +1 -1
  327. package/es/icons/CheckCircleFilledIcon.js +1 -1
  328. package/es/icons/CheckCircleIcon.js +1 -1
  329. package/es/icons/CheckIcon.js +1 -1
  330. package/es/icons/CircleFilledIcon.js +1 -1
  331. package/es/icons/ClearIcon.js +1 -1
  332. package/es/icons/CloseCircleFilledIcon.js +1 -1
  333. package/es/icons/CloseCircleIcon.js +1 -1
  334. package/es/icons/CloseIcon.js +1 -1
  335. package/es/icons/CodeIcon.js +1 -1
  336. package/es/icons/ColumnTotalIcon.js +1 -1
  337. package/es/icons/CopyIcon.js +1 -1
  338. package/es/icons/CountIcon.js +1 -1
  339. package/es/icons/CubeIcon.js +1 -1
  340. package/es/icons/CubePauseIcon.js +1 -1
  341. package/es/icons/CubePlayIcon.js +1 -1
  342. package/es/icons/CurrencyDollarIcon.js +1 -1
  343. package/es/icons/DangerIcon.js +1 -1
  344. package/es/icons/DashboardIcon.js +1 -1
  345. package/es/icons/DatabaseIcon.js +1 -1
  346. package/es/icons/DecimalDecreaseIcon.js +1 -1
  347. package/es/icons/DecimalIncreaseIcon.js +1 -1
  348. package/es/icons/DirectionIcon.js +1 -1
  349. package/es/icons/DonutIcon.js +1 -1
  350. package/es/icons/DownIcon.js +1 -1
  351. package/es/icons/EditIcon.js +1 -1
  352. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  353. package/es/icons/ExclamationCircleIcon.js +1 -1
  354. package/es/icons/ExclamationIcon.js +1 -1
  355. package/es/icons/EyeIcon.js +1 -1
  356. package/es/icons/EyeInvisibleIcon.js +1 -1
  357. package/es/icons/FilterIcon.js +1 -1
  358. package/es/icons/FolderFilledIcon.js +1 -1
  359. package/es/icons/FolderIcon.js +1 -1
  360. package/es/icons/FolderOpenFilledIcon.js +1 -1
  361. package/es/icons/FolderOpenIcon.js +1 -1
  362. package/es/icons/ForwardIcon.js +1 -1
  363. package/es/icons/HierarchyIcon.js +1 -1
  364. package/es/icons/HierarchyOpenIcon.js +1 -1
  365. package/es/icons/Icon.js +1 -1
  366. package/es/icons/InfoCircleIcon.js +1 -1
  367. package/es/icons/InfoIcon.js +1 -1
  368. package/es/icons/KeyIcon.js +1 -1
  369. package/es/icons/LeftIcon.js +1 -1
  370. package/es/icons/LineChartIcon.js +1 -1
  371. package/es/icons/LoadingIcon.js +1 -1
  372. package/es/icons/LockFilledIcon.js +1 -1
  373. package/es/icons/LockIcon.js +1 -1
  374. package/es/icons/MoreIcon.js +1 -1
  375. package/es/icons/NotAllowedIcon.js +1 -1
  376. package/es/icons/Number123Icon.js +1 -1
  377. package/es/icons/NumberIcon.js +1 -1
  378. package/es/icons/PauseCircleFilledIcon.js +1 -1
  379. package/es/icons/PauseCircleIcon.js +1 -1
  380. package/es/icons/PauseIcon.js +1 -1
  381. package/es/icons/PercentageIcon.js +1 -1
  382. package/es/icons/PieChartIcon.js +1 -1
  383. package/es/icons/PlayCircleIcon.js +1 -1
  384. package/es/icons/PlayIcon.js +1 -1
  385. package/es/icons/PlusIcon.js +1 -1
  386. package/es/icons/ProgressBarIcon.js +1 -1
  387. package/es/icons/ReloadIcon.js +1 -1
  388. package/es/icons/ReportIcon.js +1 -1
  389. package/es/icons/ReturnIcon.js +1 -1
  390. package/es/icons/RightIcon.js +1 -1
  391. package/es/icons/RowTotalsIcon.js +1 -1
  392. package/es/icons/SchemeIcon.js +1 -1
  393. package/es/icons/SearchIcon.js +1 -1
  394. package/es/icons/SemanticQueryIcon.js +1 -1
  395. package/es/icons/SettingsIcon.js +1 -1
  396. package/es/icons/ShieldFilledIcon.js +1 -1
  397. package/es/icons/ShieldIcon.js +1 -1
  398. package/es/icons/SlashIcon.js +1 -1
  399. package/es/icons/SparklesIcon.js +1 -1
  400. package/es/icons/SqlIcon.js +1 -1
  401. package/es/icons/StatsIcon.js +1 -1
  402. package/es/icons/StopIcon.js +1 -1
  403. package/es/icons/StringIcon.js +1 -1
  404. package/es/icons/SubtotalsIcon.js +1 -1
  405. package/es/icons/SwitchIcon.js +1 -1
  406. package/es/icons/TableIcon.js +1 -1
  407. package/es/icons/ThumbsDownIcon.js +1 -1
  408. package/es/icons/ThumbsUpIcon.js +1 -1
  409. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  410. package/es/icons/ThunderboltFilledIcon.js +1 -1
  411. package/es/icons/ThunderboltIcon.js +1 -1
  412. package/es/icons/TimeIcon.js +1 -1
  413. package/es/icons/TrashIcon.js +1 -1
  414. package/es/icons/UnlockIcon.js +1 -1
  415. package/es/icons/UpIcon.js +1 -1
  416. package/es/icons/UserGroupIcon.js +1 -1
  417. package/es/icons/UserIcon.js +1 -1
  418. package/es/icons/UserLockIcon.js +1 -1
  419. package/es/icons/ViewIcon.js +1 -1
  420. package/es/icons/WarningFilledIcon.js +1 -1
  421. package/es/icons/WarningIcon.js +1 -1
  422. package/es/icons/index.js +1 -1
  423. package/es/icons/wrap-icon.js +1 -1
  424. package/es/index.js +1 -3
  425. package/es/provider.js +1 -1
  426. package/es/providers/TrackingProvider.js +1 -1
  427. package/es/providers/navigation.types.js +1 -1
  428. package/es/providers/navigationAdapter.default.js +1 -1
  429. package/es/services/notification.js +1 -1
  430. package/es/shared/form.js +1 -1
  431. package/es/shared/index.js +1 -1
  432. package/es/stories/Form.legacy-stories.js +1 -1
  433. package/es/stories/FormFieldArgs.js +1 -1
  434. package/es/stories/SimpleLayout.stories.js +1 -1
  435. package/es/stories/Tasty.stories.js +1 -1
  436. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  437. package/es/stories/components/DialogFormApp.js +1 -1
  438. package/es/stories/components/StyledButton.js +1 -1
  439. package/es/stories/lists/baseProps.js +1 -1
  440. package/es/stories/playground/PlaygroundEditor.js +1 -1
  441. package/es/stories/playground/PlaygroundLayout.js +1 -1
  442. package/es/stories/playground/PlaygroundOutput.js +1 -1
  443. package/es/stories/playground/PlaygroundPreview.js +1 -1
  444. package/es/stories/playground/components/Button.js +1 -1
  445. package/es/stories/playground/components/Card.js +1 -1
  446. package/es/stories/playground/components/ScrollProgress.js +1 -1
  447. package/es/stories/playground/examples.js +1 -1
  448. package/es/tasty/chunks/cacheKey.js +1 -1
  449. package/es/tasty/chunks/definitions.js +3 -3
  450. package/es/tasty/chunks/index.js +1 -1
  451. package/es/tasty/chunks/renderChunk.js +1 -1
  452. package/es/tasty/config.js +1 -1
  453. package/es/tasty/debug.js +1 -1
  454. package/es/tasty/hooks/index.js +1 -3
  455. package/es/tasty/hooks/useGlobalStyles.js +1 -1
  456. package/es/tasty/hooks/useRawCSS.js +1 -1
  457. package/es/tasty/hooks/useStyles.js +2 -15
  458. package/es/tasty/index.js +2 -2
  459. package/es/tasty/injector/index.js +1 -39
  460. package/es/tasty/injector/injector.js +16 -67
  461. package/es/tasty/injector/sheet-manager.js +2 -2
  462. package/es/tasty/injector/types.js +1 -1
  463. package/es/tasty/keyframes/index.js +1 -1
  464. package/es/tasty/parser/classify.js +1 -15
  465. package/es/tasty/parser/const.js +1 -1
  466. package/es/tasty/parser/lru.js +1 -1
  467. package/es/tasty/parser/parser.js +1 -1
  468. package/es/tasty/parser/tokenizer.js +1 -1
  469. package/es/tasty/parser/types.js +1 -1
  470. package/es/tasty/pipeline/conditions.js +1 -1
  471. package/es/tasty/pipeline/exclusive.js +1 -1
  472. package/es/tasty/pipeline/index.js +1 -1
  473. package/es/tasty/pipeline/materialize.js +1 -1
  474. package/es/tasty/pipeline/parseStateKey.js +1 -1
  475. package/es/tasty/pipeline/simplify.js +1 -1
  476. package/es/tasty/plugins/index.js +1 -1
  477. package/es/tasty/plugins/okhsl-plugin.js +1 -1
  478. package/es/tasty/plugins/types.js +1 -1
  479. package/es/tasty/states/index.js +2 -8
  480. package/es/tasty/static/index.js +1 -1
  481. package/es/tasty/static/tastyStatic.js +1 -1
  482. package/es/tasty/static/types.js +1 -1
  483. package/es/tasty/styles/align.js +1 -1
  484. package/es/tasty/styles/border.js +20 -114
  485. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  486. package/es/tasty/styles/color.js +1 -1
  487. package/es/tasty/styles/createStyle.js +1 -1
  488. package/es/tasty/styles/dimension.js +1 -1
  489. package/es/tasty/styles/display.js +1 -1
  490. package/es/tasty/styles/fade.js +13 -46
  491. package/es/tasty/styles/fill.js +56 -7
  492. package/es/tasty/styles/flow.js +1 -1
  493. package/es/tasty/styles/font.js +1 -1
  494. package/es/tasty/styles/fontStyle.js +1 -1
  495. package/es/tasty/styles/gap.js +1 -1
  496. package/es/tasty/styles/groupRadius.js +1 -1
  497. package/es/tasty/styles/height.js +1 -1
  498. package/es/tasty/styles/index.js +1 -1
  499. package/es/tasty/styles/inset.js +1 -1
  500. package/es/tasty/styles/justify.js +1 -1
  501. package/es/tasty/styles/list.js +2 -2
  502. package/es/tasty/styles/margin.js +1 -1
  503. package/es/tasty/styles/outline.js +1 -1
  504. package/es/tasty/styles/padding.js +1 -1
  505. package/es/tasty/styles/place.js +1 -1
  506. package/es/tasty/styles/predefined.js +1 -1
  507. package/es/tasty/styles/preset.js +1 -1
  508. package/es/tasty/styles/radius.js +1 -1
  509. package/es/tasty/styles/reset.js +1 -1
  510. package/es/tasty/styles/scrollbar.js +1 -1
  511. package/es/tasty/styles/shadow.js +1 -1
  512. package/es/tasty/styles/styledScrollbar.js +1 -1
  513. package/es/tasty/styles/transition.js +20 -2
  514. package/es/tasty/styles/types.js +1 -1
  515. package/es/tasty/styles/width.js +1 -1
  516. package/es/tasty/tasty.js +113 -94
  517. package/es/tasty/types.js +1 -1
  518. package/es/tasty/utils/cache-wrapper.js +1 -1
  519. package/es/tasty/utils/case-converter.js +1 -1
  520. package/es/tasty/utils/colors.js +1 -1
  521. package/es/tasty/utils/dotize.js +1 -1
  522. package/es/tasty/utils/filterBaseProps.js +1 -1
  523. package/es/tasty/utils/getDisplayName.js +1 -1
  524. package/es/tasty/utils/isDevEnv.js +1 -1
  525. package/es/tasty/utils/mergeStyles.js +1 -1
  526. package/es/tasty/utils/modAttrs.js +1 -1
  527. package/es/tasty/utils/processTokens.js +1 -1
  528. package/es/tasty/utils/string.js +1 -1
  529. package/es/tasty/utils/styles.js +1 -1
  530. package/es/tasty/utils/typography.js +1 -1
  531. package/es/tasty/utils/warnings.js +1 -1
  532. package/es/tasty/zero/babel.js +1 -1
  533. package/es/tasty/zero/css-writer.js +1 -1
  534. package/es/tasty/zero/extractor.js +1 -1
  535. package/es/tasty/zero/index.js +1 -1
  536. package/es/tasty/zero/next.js +1 -1
  537. package/es/tokens/base.js +1 -5
  538. package/es/tokens/colors.js +1 -1
  539. package/es/tokens/index.js +1 -1
  540. package/es/tokens/layout.js +1 -1
  541. package/es/tokens/shadows.js +1 -1
  542. package/es/tokens/sizes.js +1 -1
  543. package/es/tokens/spacing.js +1 -1
  544. package/es/tokens/typography.js +1 -1
  545. package/es/utils/ResizeSensor.js +1 -1
  546. package/es/utils/index.js +1 -1
  547. package/es/utils/modules.js +1 -1
  548. package/es/utils/promise.js +1 -1
  549. package/es/utils/raf.js +1 -1
  550. package/es/utils/random.js +1 -1
  551. package/es/utils/range.js +1 -1
  552. package/es/utils/react/RenderCache.js +1 -1
  553. package/es/utils/react/Slots.js +1 -1
  554. package/es/utils/react/chain.js +1 -1
  555. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  556. package/es/utils/react/index.js +1 -1
  557. package/es/utils/react/interactions.js +1 -1
  558. package/es/utils/react/isTextOnly.js +1 -1
  559. package/es/utils/react/mapProps.js +1 -1
  560. package/es/utils/react/mergeProps.js +1 -1
  561. package/es/utils/react/nullableValue.js +1 -1
  562. package/es/utils/react/resolveIcon.js +1 -1
  563. package/es/utils/react/sharedStore.js +1 -1
  564. package/es/utils/react/useCombinedRefs.js +1 -1
  565. package/es/utils/react/useControlledFocusVisible.js +1 -1
  566. package/es/utils/react/useEventBus.js +1 -1
  567. package/es/utils/react/useId.js +1 -1
  568. package/es/utils/react/useIsDarwin.js +1 -1
  569. package/es/utils/react/useKeySymbols.js +1 -1
  570. package/es/utils/react/useLayoutEffect.js +1 -1
  571. package/es/utils/react/useLocalStorage.js +1 -1
  572. package/es/utils/react/useQaProps.js +1 -1
  573. package/es/utils/react/useViewportSize.js +1 -1
  574. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  575. package/es/utils/tree.js +1 -1
  576. package/es/utils/warnings.js +1 -1
  577. package/es/version.js +2 -2
  578. package/package.json +1 -1
  579. package/types/components/HiddenInput.d.ts +4 -4
  580. package/types/components/actions/Button/Button.d.ts +14 -14
  581. package/types/components/actions/CommandMenu/styled.d.ts +20 -20
  582. package/types/components/actions/Menu/styled.d.ts +533 -530
  583. package/types/components/content/Item/Item.d.ts +0 -7
  584. package/types/components/content/Layout/hooks/useTinyScrollbar.d.ts +0 -6
  585. package/types/components/content/List/SectionHeading.d.ts +171 -170
  586. package/types/components/content/Text.d.ts +1183 -1176
  587. package/types/components/fields/DatePicker/DatePickerElement.d.ts +171 -170
  588. package/types/components/fields/Select/Select.d.ts +4 -4
  589. package/types/components/fields/Slider/elements.d.ts +24 -24
  590. package/types/index.d.ts +0 -1
  591. package/types/tasty/hooks/index.d.ts +0 -3
  592. package/types/tasty/index.d.ts +2 -2
  593. package/types/tasty/injector/index.d.ts +1 -57
  594. package/types/tasty/injector/injector.d.ts +7 -19
  595. package/types/tasty/injector/types.d.ts +2 -14
  596. package/types/tasty/styles/border.d.ts +3 -11
  597. package/types/tasty/styles/fade.d.ts +1 -1
  598. package/types/tasty/styles/fill.d.ts +13 -3
  599. package/types/tasty/styles/list.d.ts +3 -3
  600. package/types/tasty/styles/types.d.ts +27 -42
  601. package/types/tasty/tasty.d.ts +4 -4
  602. package/es/components/navigation/Tabs/Tabs.js +0 -918
  603. package/es/components/navigation/Tabs/index.js +0 -10
  604. package/es/components/navigation/index.js +0 -10
  605. package/es/tasty/hooks/useKeyframes.js +0 -82
  606. package/es/tasty/hooks/useProperty.js +0 -100
  607. package/es/tasty/properties/index.js +0 -211
  608. package/types/components/navigation/Tabs/Tabs.d.ts +0 -235
  609. package/types/components/navigation/Tabs/index.d.ts +0 -2
  610. package/types/components/navigation/index.d.ts +0 -2
  611. package/types/tasty/hooks/useKeyframes.d.ts +0 -52
  612. package/types/tasty/hooks/useProperty.d.ts +0 -75
  613. package/types/tasty/properties/index.d.ts +0 -90
@@ -1,918 +0,0 @@
1
- /**
2
- * @license MIT
3
- * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.0.0-canary-3f98351
5
- * Released under the MIT license.
6
- */
7
-
8
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
9
- import { Children, forwardRef, isValidElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, } from 'react';
10
- import { useTab, useTabList, useTabPanel, useTextField, } from 'react-aria';
11
- import { Item as CollectionItem, useTabListState, } from 'react-stately';
12
- import { useEvent } from '../../../_internal/hooks/index.js';
13
- import { CloseIcon } from '../../../icons/index.js';
14
- import { tasty } from '../../../tasty/index.js';
15
- import { chainRaf } from '../../../utils/raf.js';
16
- import { ItemAction } from '../../actions/ItemAction/index.js';
17
- import { Item } from '../../content/Item/index.js';
18
- import { useTinyScrollbar } from '../../content/Layout/hooks/useTinyScrollbar.js';
19
- // =============================================================================
20
- // Styled Components
21
- // =============================================================================
22
- const TabsElement = tasty({
23
- styles: {
24
- display: 'flex',
25
- flow: 'row',
26
- placeItems: {
27
- '': 'end stretch',
28
- 'type=radio | type=panel': 'stretch',
29
- },
30
- overflow: 'visible',
31
- border: {
32
- '': 0,
33
- 'type=default': 'bottom',
34
- },
35
- width: {
36
- '': '100%',
37
- 'type=radio': 'max-content',
38
- },
39
- padding: {
40
- '': 0,
41
- 'type=radio': '.5x',
42
- },
43
- radius: {
44
- '': 0,
45
- 'type=radio': '1cr',
46
- },
47
- fill: {
48
- '': '#clear',
49
- 'type=radio': '#dark.06',
50
- },
51
- flexShrink: 0,
52
- flexGrow: 0,
53
- $transition: '$tab-transition',
54
- Prefix: {
55
- display: 'flex',
56
- placeItems: 'center',
57
- placeContent: 'center',
58
- flexShrink: 0,
59
- placeSelf: 'center',
60
- },
61
- Suffix: {
62
- display: 'flex',
63
- placeItems: 'center',
64
- placeContent: 'center',
65
- flexShrink: 0,
66
- placeSelf: 'center',
67
- },
68
- // Wrapper for scroll area and scrollbar (scrollbar is positioned relative to this)
69
- ScrollWrapper: {
70
- position: 'relative',
71
- display: 'flex',
72
- flexGrow: 1,
73
- flexShrink: 1,
74
- width: 'min 0',
75
- },
76
- Scroll: {
77
- position: 'relative',
78
- display: 'block',
79
- overflow: {
80
- '': 'auto hidden',
81
- 'type=radio': 'visible',
82
- },
83
- scrollbar: 'none',
84
- flexGrow: 1,
85
- width: '100%',
86
- // Use multi-group fade with color tokens for smooth transitions
87
- fade: '2x left #tabs-fade-left #black, 2x right #tabs-fade-right #black',
88
- // ##name outputs --name-color (literal CSS property name)
89
- transition: '##tabs-fade-left $tab-transition ease-in, ##tabs-fade-right $tab-transition ease-in',
90
- // Transition transparent color: opaque (no fade) -> transparent (fade visible)
91
- '#tabs-fade-left': {
92
- '': 'rgb(0 0 0 / 1)',
93
- 'fade-left': 'rgb(0 0 0 / 0)',
94
- },
95
- '#tabs-fade-right': {
96
- '': 'rgb(0 0 0 / 1)',
97
- 'fade-right': 'rgb(0 0 0 / 0)',
98
- },
99
- },
100
- Container: {
101
- position: 'relative',
102
- display: 'grid',
103
- gridAutoFlow: 'column',
104
- gap: {
105
- '': 0,
106
- 'type=radio': '.5x',
107
- },
108
- placeContent: 'start',
109
- overflow: 'visible',
110
- width: 'max-content',
111
- },
112
- // Custom horizontal scrollbar (tiny) - positioned relative to ScrollWrapper
113
- ScrollbarH: {
114
- position: 'absolute',
115
- bottom: '1px',
116
- left: '$scrollbar-h-left',
117
- height: '1ow',
118
- width: '$scrollbar-h-width',
119
- radius: 'round',
120
- fill: '#dark.35',
121
- opacity: {
122
- '': 0,
123
- 'focused | scrolling': 1,
124
- },
125
- transition: 'opacity 0.15s',
126
- pointerEvents: 'none',
127
- },
128
- },
129
- });
130
- const FileTabElement = tasty(Item, {
131
- as: 'button',
132
- type: 'clear',
133
- styles: {
134
- preset: {
135
- '': 't3m',
136
- 'size=small | size=xsmall': 't4',
137
- 'size=large | size=xlarge': 't2m',
138
- },
139
- shadow: {
140
- '': 'none',
141
- editing: 'inset 0 0 0 1bw #purple-text',
142
- },
143
- },
144
- });
145
- const DefaultTabElement = tasty(Item, {
146
- as: 'button',
147
- type: 'clear',
148
- styles: {
149
- radius: 'top',
150
- color: {
151
- '': '#dark-03',
152
- selected: '#purple-text',
153
- },
154
- fill: '#clear',
155
- preset: 'h6',
156
- shadow: {
157
- '': 'none',
158
- editing: 'inset 0 0 0 1bw #purple-text',
159
- },
160
- },
161
- });
162
- const RadioTabElement = tasty(Item, {
163
- as: 'button',
164
- type: 'neutral',
165
- styles: {
166
- fill: {
167
- '': '#clear',
168
- selected: '#white',
169
- },
170
- shadow: {
171
- '': 'none',
172
- selected: '$item-shadow',
173
- },
174
- Label: {
175
- placeSelf: {
176
- '': 'center start',
177
- '!has-prefix & !has-suffix & !has-icon & !has-right-icon': 'center',
178
- },
179
- },
180
- },
181
- });
182
- const TabContainer = tasty({
183
- styles: {
184
- position: 'relative',
185
- display: 'grid',
186
- },
187
- });
188
- // =============================================================================
189
- // EditableTitle Component (inline title editing)
190
- // =============================================================================
191
- const EditableTitleInputElement = tasty({
192
- as: 'input',
193
- styles: {
194
- border: 0,
195
- padding: 0,
196
- margin: 0,
197
- fill: 'transparent',
198
- outline: 0,
199
- preset: 'inherit',
200
- color: 'inherit',
201
- width: 'initial $input-width 100%',
202
- },
203
- });
204
- const HiddenMeasure = tasty({
205
- styles: {
206
- position: 'absolute',
207
- visibility: 'hidden',
208
- whiteSpace: 'pre',
209
- font: 'inherit',
210
- pointerEvents: 'none',
211
- height: 0,
212
- overflow: 'hidden',
213
- },
214
- });
215
- function EditableTitle({ title, isEditing, editValue, onEditValueChange, onStartEditing, onSubmit, onCancel, }) {
216
- const inputRef = useRef(null);
217
- const measureRef = useRef(null);
218
- const [inputWidth, setInputWidth] = useState(null);
219
- const justEnteredEditModeRef = useRef(false);
220
- // React Aria text field hook
221
- const { inputProps } = useTextField({
222
- 'aria-label': 'Edit tab title',
223
- value: editValue,
224
- onChange: onEditValueChange,
225
- }, inputRef);
226
- // Focus and select input when entering edit mode
227
- useLayoutEffect(() => {
228
- if (isEditing && inputRef.current) {
229
- const input = inputRef.current;
230
- // Set flag to ignore immediate blur events
231
- justEnteredEditModeRef.current = true;
232
- input.focus();
233
- // Use requestAnimationFrame to ensure selection happens after focus
234
- requestAnimationFrame(() => {
235
- input.select();
236
- // Clear the flag after focus is established (allow 2 frames for menu to fully close)
237
- requestAnimationFrame(() => {
238
- requestAnimationFrame(() => {
239
- justEnteredEditModeRef.current = false;
240
- });
241
- });
242
- });
243
- }
244
- else {
245
- justEnteredEditModeRef.current = false;
246
- }
247
- }, [isEditing]);
248
- // Measure text width and update input width
249
- useLayoutEffect(() => {
250
- if (isEditing && measureRef.current) {
251
- const width = measureRef.current.scrollWidth;
252
- setInputWidth(width);
253
- }
254
- }, [isEditing, editValue]);
255
- const handleKeyDown = useEvent((e) => {
256
- if (e.key === 'Enter') {
257
- e.preventDefault();
258
- onSubmit();
259
- }
260
- else if (e.key === 'Escape') {
261
- e.preventDefault();
262
- onCancel();
263
- }
264
- else if (e.key === 'ArrowLeft' ||
265
- e.key === 'ArrowRight' ||
266
- e.key === ' ') {
267
- // Stop propagation to prevent tab navigation while editing
268
- e.stopPropagation();
269
- }
270
- });
271
- const handleBlur = useEvent(() => {
272
- // Ignore blur events immediately after entering edit mode (menu closing causes focus loss)
273
- if (justEnteredEditModeRef.current) {
274
- // Re-focus the input since something else stole focus
275
- requestAnimationFrame(() => {
276
- inputRef.current?.focus();
277
- inputRef.current?.select();
278
- });
279
- return;
280
- }
281
- // Submit on blur (per user preference)
282
- onSubmit();
283
- });
284
- const handleDoubleClick = useEvent((e) => {
285
- e.preventDefault();
286
- e.stopPropagation();
287
- onStartEditing();
288
- });
289
- if (isEditing) {
290
- // Merge our handlers with React Aria's inputProps
291
- const mergedProps = {
292
- ...inputProps,
293
- onKeyDown: (e) => {
294
- handleKeyDown(e);
295
- inputProps.onKeyDown?.(e);
296
- },
297
- onBlur: (e) => {
298
- handleBlur();
299
- inputProps.onBlur?.(e);
300
- },
301
- };
302
- return (_jsxs(_Fragment, { children: [_jsx(HiddenMeasure, { ref: measureRef, "aria-hidden": "true", children: editValue || ' ' }), _jsx(EditableTitleInputElement, { ...mergedProps, ref: inputRef, tokens: { '$input-width': inputWidth ? `${inputWidth}px` : 'auto' } })] }));
303
- }
304
- return _jsx("span", { onDoubleClick: handleDoubleClick, children: title });
305
- }
306
- const TabPanelElement = tasty({
307
- as: 'section',
308
- styles: {
309
- display: 'contents',
310
- },
311
- });
312
- const TabIndicatorElement = tasty({
313
- styles: {
314
- position: 'absolute',
315
- bottom: '0',
316
- left: 0,
317
- height: '1ow',
318
- fill: '#purple',
319
- transition: 'left, width',
320
- transitionDuration: '.2s',
321
- transitionTimingFunction: 'ease-out',
322
- pointerEvents: 'none',
323
- },
324
- });
325
- /**
326
- * Hook to track and animate tab indicator position.
327
- * Returns null if disabled (e.g., for non-default types).
328
- */
329
- function useTabIndicator(containerRef, selectedKey, enabled) {
330
- const [style, setStyle] = useState(null);
331
- const cancelRef = useRef(null);
332
- const updateIndicator = useCallback(() => {
333
- if (!enabled || !containerRef.current || selectedKey == null) {
334
- setStyle(null);
335
- return;
336
- }
337
- // Find the selected tab button within the container
338
- const selectedTab = containerRef.current.querySelector('[aria-selected="true"]');
339
- if (!selectedTab) {
340
- setStyle(null);
341
- return;
342
- }
343
- const containerRect = containerRef.current.getBoundingClientRect();
344
- const tabRect = selectedTab.getBoundingClientRect();
345
- // Only update if dimensions are valid (element has been painted)
346
- if (tabRect.width > 0) {
347
- setStyle({
348
- left: tabRect.left - containerRect.left + containerRef.current.scrollLeft,
349
- width: tabRect.width,
350
- });
351
- }
352
- }, [containerRef, selectedKey, enabled]);
353
- // Update on selectedKey change - use chainRaf to ensure DOM is fully painted
354
- useLayoutEffect(() => {
355
- // Cancel any pending RAF chain
356
- if (cancelRef.current) {
357
- cancelRef.current();
358
- }
359
- // Schedule update after 2 frames to ensure layout is complete
360
- cancelRef.current = chainRaf(() => {
361
- updateIndicator();
362
- }, 2);
363
- return () => {
364
- if (cancelRef.current) {
365
- cancelRef.current();
366
- }
367
- };
368
- }, [updateIndicator]);
369
- // Update on window resize
370
- useEffect(() => {
371
- if (!enabled)
372
- return;
373
- const handleResize = () => updateIndicator();
374
- window.addEventListener('resize', handleResize);
375
- return () => window.removeEventListener('resize', handleResize);
376
- }, [enabled, updateIndicator]);
377
- return enabled ? style : null;
378
- }
379
- // =============================================================================
380
- // Helper Functions
381
- // =============================================================================
382
- /**
383
- * Checks if a child is a Tab component.
384
- */
385
- function isTabElement(child) {
386
- return (isValidElement(child) &&
387
- typeof child.type === 'function' &&
388
- child.type.displayName === 'CubeTab');
389
- }
390
- /**
391
- * Checks if a child is a TabPanel component.
392
- */
393
- function isTabPanelElement(child) {
394
- return (isValidElement(child) &&
395
- typeof child.type === 'function' &&
396
- child.type.displayName === 'CubeTabPanel');
397
- }
398
- /**
399
- * Checks if a child is a TabList component.
400
- */
401
- function isTabListElement(child) {
402
- return (isValidElement(child) &&
403
- typeof child.type === 'function' &&
404
- child.type.displayName === 'CubeTabList');
405
- }
406
- /**
407
- * Extracts the raw key from a React child (strips the ".$" prefix added by Children.map).
408
- *
409
- * Note: All keys are converted to strings for React Aria compatibility.
410
- * This means numeric keys like `key={1}` become `"1"`.
411
- *
412
- * @returns The key as a string, or null if no key is present
413
- */
414
- function getRawKey(child) {
415
- if (child.key == null)
416
- return null;
417
- const keyStr = String(child.key);
418
- // React prefixes keys with ".$" in Children.map
419
- if (keyStr.startsWith('.$')) {
420
- return keyStr.slice(2);
421
- }
422
- return keyStr;
423
- }
424
- // =============================================================================
425
- // Tab Component (for building items)
426
- // =============================================================================
427
- function Tab(_props) {
428
- // This component is never rendered directly - it's used for configuration
429
- // The actual rendering happens in TabButton
430
- return null;
431
- }
432
- Tab.displayName = 'CubeTab';
433
- function TabButton({ item, state, tabData, type, size, onDelete, showActionsOnHover: parentShowActionsOnHover, isEditing = false, editValue = '', onEditValueChange, onStartEditing, onSubmitEditing, onCancelEditing, }) {
434
- const ref = useRef(null);
435
- const { tabProps } = useTab({ key: item.key }, state, ref);
436
- const isActive = state.selectedKey === item.key;
437
- const isDisabled = state.disabledKeys.has(item.key);
438
- const isDeletable = !!onDelete;
439
- const isEditable = tabData.isEditable ?? false;
440
- const effectiveType = tabData.type ?? type ?? 'default';
441
- const handleDelete = useEvent(() => {
442
- onDelete?.(item.key);
443
- });
444
- const handleStartEditing = useEvent(() => {
445
- if (!isEditable || isDisabled)
446
- return;
447
- const titleText = typeof tabData.title === 'string' ? tabData.title : String(item.key);
448
- onStartEditing?.(item.key, titleText);
449
- });
450
- const handleSubmitEditing = useEvent(() => {
451
- onSubmitEditing?.(item.key, editValue, tabData.onTitleChange);
452
- });
453
- const handleCancelEditing = useEvent(() => {
454
- onCancelEditing?.();
455
- });
456
- const handleEditValueChange = useEvent((value) => {
457
- onEditValueChange?.(value);
458
- });
459
- const mods = useMemo(() => ({
460
- default: effectiveType === 'default',
461
- panel: effectiveType === 'panel',
462
- radio: effectiveType === 'radio',
463
- active: isActive,
464
- deletable: isDeletable,
465
- disabled: isDisabled,
466
- editing: isEditing,
467
- }), [effectiveType, isActive, isDeletable, isDisabled, isEditing]);
468
- // Scroll active tab into view
469
- useEffect(() => {
470
- if (ref.current && isActive) {
471
- ref.current.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });
472
- }
473
- }, [isActive]);
474
- // Build actions for the tab (custom actions + delete button)
475
- const deleteAction = isDeletable ? (_jsx(ItemAction, { icon: _jsx(CloseIcon, {}), tooltip: "Delete tab", onPress: handleDelete })) : null;
476
- // Combine tab's custom actions with delete action
477
- const actions = tabData.actions || deleteAction ? (_jsxs(_Fragment, { children: [tabData.actions, deleteAction] })) : undefined;
478
- // Determine effective size - map 'medium'/'large' to Item size values
479
- const isRadioType = effectiveType === 'radio';
480
- const isPanelType = effectiveType === 'panel';
481
- const isDefaultType = effectiveType === 'default';
482
- const effectiveSize = tabData.size ?? size ?? 'medium';
483
- // For radio type, use smaller sizes like RadioGroup tabs mode
484
- let itemSize;
485
- if (isRadioType) {
486
- // Map sizes similar to RadioGroup tabs mode
487
- if (effectiveSize === 'medium') {
488
- itemSize = 'xsmall';
489
- }
490
- else {
491
- // large -> medium
492
- itemSize = 'medium';
493
- }
494
- }
495
- else {
496
- itemSize = effectiveSize === 'large' ? 'large' : 'medium';
497
- }
498
- // Determine which element to use based on type
499
- let Element;
500
- if (isRadioType) {
501
- Element = RadioTabElement;
502
- }
503
- else if (isDefaultType) {
504
- Element = DefaultTabElement;
505
- }
506
- else {
507
- Element = FileTabElement;
508
- }
509
- // Determine Item type prop
510
- let itemType = !isRadioType
511
- ? isActive
512
- ? 'clear'
513
- : 'neutral'
514
- : 'neutral';
515
- // Determine shape - panel type uses sharp edges
516
- const itemShape = isPanelType ? 'sharp' : undefined;
517
- // Determine showActionsOnHover - tab-level overrides parent-level
518
- const effectiveShowActionsOnHover = tabData.showActionsOnHover ?? parentShowActionsOnHover;
519
- // Render title with editing support if editable
520
- const titleContent = isEditable ? (_jsx(EditableTitle, { title: tabData.title, isEditing: isEditing, editValue: editValue, onEditValueChange: handleEditValueChange, onStartEditing: handleStartEditing, onSubmit: handleSubmitEditing, onCancel: handleCancelEditing })) : (tabData.title);
521
- // Extract tab-specific props and pass through the rest (style props) to the Item
522
- const { title: _title, content: _content, key: _key, isDisabled: _isDisabled, prerender: _prerender, keepMounted: _keepMounted, size: _size, type: _type, actions: _actions, showActionsOnHover: _showActionsOnHover, isEditable: _isEditable, onTitleChange: _onTitleChange, qa, qaVal, styles, ...itemStyleProps } = tabData;
523
- return (_jsx(TabContainer, { mods: mods, children: _jsx(Element, { preserveActionsSpace: true, showActionsOnHover: effectiveShowActionsOnHover, as: "button", ...tabProps, ...itemStyleProps, ref: ref, qa: qa ?? `Tab-${String(item.key)}`, qaVal: qaVal, styles: styles, mods: mods, isSelected: isActive, isDisabled: isDisabled, size: itemSize, type: itemType, shape: itemShape, actions: actions, children: titleContent }) }));
524
- }
525
- function TabPanelRenderer({ tabKey, state, content, prerender, keepMounted, tabPrerender, tabKeepMounted, visitedKeys, panelStyles, qa, qaVal, }) {
526
- const ref = useRef(null);
527
- const { tabPanelProps } = useTabPanel({ key: tabKey }, state, ref);
528
- const isActive = state.selectedKey === tabKey;
529
- // Determine effective prerender/keepMounted (tab-level overrides global)
530
- const effectivePrerender = tabPrerender ?? prerender;
531
- const effectiveKeepMounted = tabKeepMounted ?? keepMounted;
532
- // Determine if panel should render using shared utility
533
- if (!shouldRenderPanel(isActive, visitedKeys.has(tabKey), effectivePrerender, effectiveKeepMounted)) {
534
- return null;
535
- }
536
- return (_jsx(TabPanelElement, { ...tabPanelProps, ref: ref, qa: qa ?? 'TabPanel', qaVal: qaVal ?? String(tabKey), styles: panelStyles, style: {
537
- display: isActive ? 'contents' : 'none',
538
- }, children: content }));
539
- }
540
- /**
541
- * Determines if a panel should be rendered based on prerender/keepMounted settings.
542
- */
543
- function shouldRenderPanel(isActive, wasVisited, effectivePrerender, effectiveKeepMounted) {
544
- return (!!effectivePrerender || isActive || (!!effectiveKeepMounted && wasVisited));
545
- }
546
- /**
547
- * Renders panels with optional content caching.
548
- * Only the content from renderPanel is cached - the TabPanelRenderer wrapper
549
- * is always rendered fresh so it can correctly determine the active state.
550
- *
551
- * Caching behavior:
552
- * - By default, panels re-render on every Tabs render (no caching)
553
- * - When a panel has a non-undefined cache key in `panelCacheKeys`, caching is enabled
554
- * - Cached content is reused until the cache key changes
555
- * - Setting a cache key to `undefined` is the same as not having it (no caching)
556
- */
557
- function CachedPanelRenderer({ parsedTabs, explicitPanels, state, renderPanel, panelCacheKeys, prerender, keepMounted, visitedKeys, }) {
558
- // Cache for rendered content - stores { content, cacheKey } per panel
559
- const contentCacheRef = useRef(new Map());
560
- /**
561
- * Get the cache key for a panel.
562
- * Returns undefined if no cache key is defined or if set to undefined (no caching).
563
- */
564
- const getCacheKey = (key) => {
565
- if (!panelCacheKeys)
566
- return undefined;
567
- if (Object.prototype.hasOwnProperty.call(panelCacheKeys, key)) {
568
- const value = panelCacheKeys[key];
569
- // undefined means no caching
570
- return value;
571
- }
572
- return undefined;
573
- };
574
- /**
575
- * Check if a panel has caching enabled.
576
- * Only enabled when a non-undefined cache key is defined.
577
- */
578
- const hasCacheKey = (key) => {
579
- if (!panelCacheKeys)
580
- return false;
581
- if (!Object.prototype.hasOwnProperty.call(panelCacheKeys, key))
582
- return false;
583
- // undefined value means no caching
584
- return panelCacheKeys[key] !== undefined;
585
- };
586
- // Clean up cache entries for removed tabs
587
- const currentTabKeys = useMemo(() => new Set(parsedTabs.map((t) => t.key)), [parsedTabs]);
588
- // Use effect to clean up stale cache entries when tabs change
589
- useEffect(() => {
590
- for (const key of contentCacheRef.current.keys()) {
591
- if (!currentTabKeys.has(key)) {
592
- contentCacheRef.current.delete(key);
593
- }
594
- }
595
- }, [currentTabKeys]);
596
- return (_jsx(_Fragment, { children: parsedTabs.map((tab) => {
597
- const explicitPanel = explicitPanels.get(tab.key);
598
- const tabPrerender = explicitPanel?.prerender ?? tab.prerender;
599
- const tabKeepMounted = explicitPanel?.keepMounted ?? tab.keepMounted;
600
- const effectivePrerender = tabPrerender ?? prerender;
601
- const effectiveKeepMounted = tabKeepMounted ?? keepMounted;
602
- const isActive = state.selectedKey === tab.key;
603
- const wasVisited = visitedKeys.has(tab.key);
604
- if (!shouldRenderPanel(isActive, wasVisited, effectivePrerender, effectiveKeepMounted)) {
605
- return null;
606
- }
607
- // Check if this panel has caching enabled
608
- const isCachingEnabled = hasCacheKey(tab.key);
609
- let content;
610
- if (isCachingEnabled) {
611
- // Caching is enabled for this panel - check cache
612
- const currentCacheKey = getCacheKey(tab.key);
613
- const cached = contentCacheRef.current.get(tab.key);
614
- // Cache hit if keys match (currentCacheKey is guaranteed non-undefined here)
615
- if (cached !== undefined && cached.cacheKey === currentCacheKey) {
616
- // Cache hit - use cached content
617
- content = cached.content;
618
- }
619
- else {
620
- // Cache miss or key changed - compute fresh and cache
621
- content = renderPanel(tab.key);
622
- contentCacheRef.current.set(tab.key, {
623
- content,
624
- cacheKey: currentCacheKey,
625
- });
626
- }
627
- }
628
- else {
629
- // No caching - always compute fresh
630
- content = renderPanel(tab.key);
631
- // Clear any stale cache entry
632
- contentCacheRef.current.delete(tab.key);
633
- }
634
- return (_jsx(TabPanelRenderer, { tabKey: tab.key, state: state, content: content, prerender: prerender, keepMounted: keepMounted, tabPrerender: tabPrerender, tabKeepMounted: tabKeepMounted, visitedKeys: visitedKeys, panelStyles: explicitPanel?.styles, qa: explicitPanel?.qa, qaVal: explicitPanel?.qaVal }, tab.key));
635
- }) }));
636
- }
637
- // =============================================================================
638
- // TabPanel Component (for explicit panel API)
639
- // =============================================================================
640
- function TabPanel(_props) {
641
- // This component is never rendered directly - it's used for configuration
642
- return null;
643
- }
644
- TabPanel.displayName = 'CubeTabPanel';
645
- // =============================================================================
646
- // TabList Component (for explicit list API)
647
- // =============================================================================
648
- function TabList(_props) {
649
- // This component is never rendered directly - it's used for configuration
650
- return null;
651
- }
652
- TabList.displayName = 'CubeTabList';
653
- // =============================================================================
654
- // Main Tabs Component
655
- // =============================================================================
656
- function TabsComponent(props, ref) {
657
- const { label = 'Tabs', defaultActiveKey, activeKey, size, type = 'default', onChange, onDelete, onTitleChange, showActionsOnHover, children, styles, prefix, suffix, prerender = false, keepMounted = false, qa = 'Tabs', renderPanel, panelCacheKeys, } = props;
658
- // DOM element ref (separate from imperative handle ref)
659
- const elementRef = useRef(null);
660
- const listRef = useRef(null);
661
- const scrollRef = useRef(null);
662
- // Track visited tabs for keepMounted functionality
663
- const visitedKeysRef = useRef(new Set());
664
- // =========================================================================
665
- // Tab Title Editing State
666
- // =========================================================================
667
- const [editingKey, setEditingKey] = useState(null);
668
- const [editValue, setEditValue] = useState('');
669
- const startEditing = useCallback((key, currentTitle) => {
670
- // Also select the tab being edited
671
- onChange?.(key);
672
- chainRaf(() => {
673
- setEditingKey(key);
674
- setEditValue(currentTitle);
675
- }, 2);
676
- }, [onChange]);
677
- const cancelEditing = useCallback(() => {
678
- setEditingKey(null);
679
- setEditValue('');
680
- }, []);
681
- const submitEditing = useCallback((key, newTitle, tabOnTitleChange) => {
682
- const trimmed = newTitle.trim();
683
- if (trimmed) {
684
- // Tab-level callback takes precedence
685
- if (tabOnTitleChange) {
686
- tabOnTitleChange(trimmed);
687
- }
688
- else if (onTitleChange) {
689
- onTitleChange(key, trimmed);
690
- }
691
- }
692
- setEditingKey(null);
693
- setEditValue('');
694
- }, [onTitleChange]);
695
- // Parse children to extract tabs and explicit panels
696
- const { parsedTabs, explicitPanels, hasAnyContent } = useMemo(() => {
697
- const childArray = Children.toArray(children);
698
- const tabs = [];
699
- const panels = new Map();
700
- let hasExplicitList = false;
701
- let tabChildren = [];
702
- // Check for explicit Tabs.List / Tabs.Panel structure
703
- for (const child of childArray) {
704
- if (isTabListElement(child)) {
705
- hasExplicitList = true;
706
- tabChildren = Children.toArray(child.props.children);
707
- }
708
- else if (isTabPanelElement(child)) {
709
- const key = getRawKey(child);
710
- if (key != null) {
711
- panels.set(key, {
712
- key,
713
- content: child.props.children,
714
- prerender: child.props.prerender,
715
- keepMounted: child.props.keepMounted,
716
- styles: child.props.styles,
717
- qa: child.props.qa,
718
- qaVal: child.props.qaVal,
719
- });
720
- }
721
- }
722
- }
723
- // If no explicit list, use direct Tab children
724
- if (!hasExplicitList) {
725
- tabChildren = childArray;
726
- }
727
- // Parse Tab elements
728
- let hasContent = panels.size > 0;
729
- for (const child of tabChildren) {
730
- if (isTabElement(child)) {
731
- // Get key from the element's key prop or id prop (convert to string)
732
- const key = getRawKey(child) ?? child.props.id;
733
- if (key != null) {
734
- const { id: _id, children: tabChildren, ...tabProps } = child.props;
735
- tabs.push({
736
- ...tabProps,
737
- key,
738
- content: tabChildren,
739
- });
740
- if (tabChildren != null) {
741
- hasContent = true;
742
- }
743
- }
744
- }
745
- }
746
- return {
747
- parsedTabs: tabs,
748
- explicitPanels: panels,
749
- hasAnyContent: hasContent,
750
- };
751
- }, [children]);
752
- // Clean up visitedKeys when tabs are removed
753
- const currentTabKeysSet = useMemo(() => new Set(parsedTabs.map((t) => t.key)), [parsedTabs]);
754
- useEffect(() => {
755
- for (const key of visitedKeysRef.current) {
756
- if (!currentTabKeysSet.has(key)) {
757
- visitedKeysRef.current.delete(key);
758
- }
759
- }
760
- }, [currentTabKeysSet]);
761
- // Create collection items for React Stately
762
- const collectionItems = useMemo(() => {
763
- return parsedTabs.map((tab) => (_jsx(CollectionItem, { textValue: typeof tab.title === 'string' ? tab.title : String(tab.key), children: tab.title }, tab.key)));
764
- }, [parsedTabs]);
765
- // Create a lookup map for tab data
766
- const tabDataMap = useMemo(() => {
767
- const map = new Map();
768
- for (const tab of parsedTabs) {
769
- map.set(tab.key, tab);
770
- }
771
- return map;
772
- }, [parsedTabs]);
773
- // Expose ref API for programmatic control (separate from DOM ref)
774
- useImperativeHandle(ref, () => ({
775
- element: elementRef.current,
776
- startEditing: (key) => {
777
- // Convert key to string for internal lookup
778
- const keyStr = String(key);
779
- const tabData = tabDataMap.get(keyStr);
780
- if (tabData?.isEditable && !tabData?.isDisabled) {
781
- const titleText = typeof tabData.title === 'string'
782
- ? tabData.title
783
- : String(tabData.key);
784
- startEditing(keyStr, titleText);
785
- }
786
- },
787
- cancelEditing,
788
- }), [tabDataMap, startEditing, cancelEditing]);
789
- // Determine disabled keys
790
- const disabledKeys = useMemo(() => {
791
- return new Set(parsedTabs.filter((tab) => tab.isDisabled).map((tab) => tab.key));
792
- }, [parsedTabs]);
793
- // Handle selection change
794
- const handleSelectionChange = useEvent((key) => {
795
- // Convert to string for internal tracking
796
- visitedKeysRef.current.add(String(key));
797
- onChange?.(key);
798
- });
799
- // Create aria props for useTabListState
800
- const ariaProps = useMemo(() => ({
801
- selectedKey: activeKey,
802
- defaultSelectedKey: defaultActiveKey,
803
- onSelectionChange: handleSelectionChange,
804
- disabledKeys,
805
- children: collectionItems,
806
- 'aria-label': label,
807
- }), [
808
- activeKey,
809
- defaultActiveKey,
810
- handleSelectionChange,
811
- disabledKeys,
812
- collectionItems,
813
- label,
814
- ]);
815
- // Create state using useTabListState
816
- const state = useTabListState(ariaProps);
817
- // Track initial selected key for visited tabs
818
- useEffect(() => {
819
- if (state.selectedKey != null) {
820
- visitedKeysRef.current.add(String(state.selectedKey));
821
- }
822
- }, [state.selectedKey]);
823
- // Get tablist props from react-aria
824
- const { tabListProps } = useTabList(ariaProps, state, listRef);
825
- // Tab indicator for default type
826
- const indicatorStyle = useTabIndicator(listRef, state.selectedKey, type === 'default');
827
- // Tiny scrollbar for horizontal scrolling (not for radio type)
828
- const isTinyScrollbar = type !== 'radio';
829
- const { handleHStyle, hasOverflowX, isScrolling, isAtStartX, isAtEndX } = useTinyScrollbar(scrollRef, isTinyScrollbar);
830
- const mods = useMemo(() => ({
831
- type,
832
- deletable: !!onDelete,
833
- scrolling: isScrolling,
834
- 'fade-left': !isAtStartX,
835
- 'fade-right': !isAtEndX,
836
- }), [type, onDelete, isScrolling, isAtStartX, isAtEndX]);
837
- return (_jsxs(_Fragment, { children: [_jsxs(TabsElement, { ref: elementRef, qa: qa, mods: mods, styles: styles, style: handleHStyle, "data-size": size, children: [prefix ? _jsx("div", { "data-element": "Prefix", children: prefix }) : null, _jsxs("div", { "data-element": "ScrollWrapper", children: [_jsx("div", { ref: scrollRef, "data-element": "Scroll", children: _jsxs("div", { ...tabListProps, ref: listRef, "data-element": "Container", children: [[...state.collection].map((item) => {
838
- // Convert item.key to string for internal lookup
839
- const tabData = tabDataMap.get(String(item.key));
840
- if (!tabData)
841
- return null;
842
- const isItemEditing = editingKey === item.key;
843
- return (_jsx(TabButton, { item: item, state: state, tabData: tabData, type: type, size: size, showActionsOnHover: showActionsOnHover, isEditing: isItemEditing, editValue: isItemEditing ? editValue : '', onDelete: onDelete, onEditValueChange: setEditValue, onStartEditing: startEditing, onSubmitEditing: submitEditing, onCancelEditing: cancelEditing }, item.key));
844
- }), indicatorStyle && (_jsx(TabIndicatorElement, { style: {
845
- left: indicatorStyle.left,
846
- width: indicatorStyle.width,
847
- } }))] }) }), isTinyScrollbar && hasOverflowX && _jsx("div", { "data-element": "ScrollbarH" })] }), suffix ? _jsx("div", { "data-element": "Suffix", children: suffix }) : null] }), renderPanel && (_jsx(CachedPanelRenderer, { parsedTabs: parsedTabs, explicitPanels: explicitPanels, state: state, renderPanel: renderPanel, panelCacheKeys: panelCacheKeys, prerender: prerender, keepMounted: keepMounted, visitedKeys: visitedKeysRef.current })), !renderPanel &&
848
- hasAnyContent &&
849
- parsedTabs.map((tab) => {
850
- // Use explicit panel if provided, otherwise use tab's content
851
- const explicitPanel = explicitPanels.get(tab.key);
852
- const content = explicitPanel?.content ?? tab.content;
853
- if (content == null)
854
- return null;
855
- return (_jsx(TabPanelRenderer, { tabKey: tab.key, state: state, content: content, prerender: prerender, keepMounted: keepMounted, tabPrerender: explicitPanel?.prerender ?? tab.prerender, tabKeepMounted: explicitPanel?.keepMounted ?? tab.keepMounted, visitedKeys: visitedKeysRef.current, panelStyles: explicitPanel?.styles, qa: explicitPanel?.qa, qaVal: explicitPanel?.qaVal }, tab.key));
856
- })] }));
857
- }
858
- // =============================================================================
859
- // Exports
860
- // =============================================================================
861
- const _Tabs = forwardRef(TabsComponent);
862
- /**
863
- * Tabs component for organizing content into multiple panels.
864
- * Built with React Aria for full accessibility support.
865
- *
866
- * **Note:** Tab keys are internally converted to strings for React Aria compatibility.
867
- * When using `activeKey`, `onChange`, etc., be aware that numeric keys will be
868
- * converted to their string equivalents.
869
- *
870
- * @example
871
- * // Simple usage
872
- * <Tabs defaultActiveKey="tab1">
873
- * <Tab key="tab1" title="Tab 1">Content 1</Tab>
874
- * <Tab key="tab2" title="Tab 2">Content 2</Tab>
875
- * </Tabs>
876
- *
877
- * @example
878
- * // Tabs-only (no panels)
879
- * <Tabs activeKey={activeTab} onChange={setActiveTab}>
880
- * <Tab key="overview" title="Overview" />
881
- * <Tab key="settings" title="Settings" />
882
- * </Tabs>
883
- *
884
- * @example
885
- * // Explicit panels
886
- * <Tabs defaultActiveKey="tab1">
887
- * <Tabs.List>
888
- * <Tab key="tab1" title="Tab 1" />
889
- * <Tab key="tab2" title="Tab 2" />
890
- * </Tabs.List>
891
- * <Tabs.Panel key="tab1">Content 1</Tabs.Panel>
892
- * <Tabs.Panel key="tab2">Content 2</Tabs.Panel>
893
- * </Tabs>
894
- *
895
- * @example
896
- * // Optimized lazy rendering with renderPanel
897
- * <Tabs
898
- * defaultActiveKey="tab1"
899
- * renderPanel={(key) => {
900
- * switch (key) {
901
- * case 'tab1': return <ExpensiveComponent />;
902
- * case 'tab2': return <AnotherExpensive />;
903
- * default: return null;
904
- * }
905
- * }}
906
- * >
907
- * <Tab key="tab1" title="Tab 1" />
908
- * <Tab key="tab2" title="Tab 2" />
909
- * </Tabs>
910
- */
911
- export const Tabs = Object.assign(_Tabs, {
912
- Tab,
913
- List: TabList,
914
- Panel: TabPanel,
915
- });
916
- export { Tab, TabList, TabPanel };
917
-
918
-