@cube-dev/ui-kit 0.0.0-canary-1cb94e6 → 0.0.0-canary-82d6956

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 (434) hide show
  1. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  27. package/dist/components/actions/Link/Link.js +1 -1
  28. package/dist/components/actions/Menu/Menu.js +1 -1
  29. package/dist/components/actions/Menu/MenuItem.js +1 -1
  30. package/dist/components/actions/Menu/MenuSection.js +1 -1
  31. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  32. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  34. package/dist/components/actions/Menu/context.js +1 -1
  35. package/dist/components/actions/Menu/styled.js +1 -1
  36. package/dist/components/actions/index.js +1 -1
  37. package/dist/components/actions/use-action.js +1 -1
  38. package/dist/components/actions/use-anchored-menu.js +1 -1
  39. package/dist/components/actions/use-context-menu.js +1 -1
  40. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  41. package/dist/components/content/Alert/Alert.js +1 -1
  42. package/dist/components/content/Alert/use-alert.js +1 -1
  43. package/dist/components/content/Avatar/Avatar.js +1 -1
  44. package/dist/components/content/Badge/Badge.js +1 -1
  45. package/dist/components/content/Card/Card.js +1 -1
  46. package/dist/components/content/Content.js +1 -1
  47. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  48. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  49. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  50. package/dist/components/content/Divider.js +1 -1
  51. package/dist/components/content/Footer.js +1 -1
  52. package/dist/components/content/Header.js +1 -1
  53. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  54. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  55. package/dist/components/content/Item/Item.js +1 -1
  56. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  57. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  58. package/dist/components/content/Layout/GridLayout.js +1 -1
  59. package/dist/components/content/Layout/Layout.js +1 -1
  60. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  61. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  62. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  63. package/dist/components/content/Layout/LayoutContent.js +1 -1
  64. package/dist/components/content/Layout/LayoutContext.js +1 -1
  65. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  66. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  67. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  68. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  69. package/dist/components/content/Layout/LayoutPane.js +1 -1
  70. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  71. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  73. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  74. package/dist/components/content/Layout/index.js +1 -1
  75. package/dist/components/content/Layout/utils.js +1 -1
  76. package/dist/components/content/Paragraph.js +1 -1
  77. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  78. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  79. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  80. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  81. package/dist/components/content/Result/Result.js +1 -1
  82. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  83. package/dist/components/content/Tag/Tag.js +1 -1
  84. package/dist/components/content/Text.js +1 -1
  85. package/dist/components/content/TextItem/TextItem.js +1 -1
  86. package/dist/components/content/Title.js +1 -1
  87. package/dist/components/content/Tree/Tree.js +1 -1
  88. package/dist/components/content/Tree/TreeNode.js +1 -1
  89. package/dist/components/content/Tree/styled.js +1 -1
  90. package/dist/components/content/Tree/tree-index.js +1 -1
  91. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  92. package/dist/components/content/Tree/use-load-data.js +1 -1
  93. package/dist/components/content/highlightText.js +1 -1
  94. package/dist/components/content/use-auto-tooltip.js +1 -1
  95. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  96. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  97. package/dist/components/fields/Checkbox/context.js +1 -1
  98. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  99. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  100. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  101. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  102. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  103. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  104. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  105. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  106. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  107. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  108. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  109. package/dist/components/fields/DatePicker/intl.js +1 -1
  110. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  111. package/dist/components/fields/DatePicker/props.js +1 -1
  112. package/dist/components/fields/DatePicker/utils.js +1 -1
  113. package/dist/components/fields/FileInput/FileInput.js +1 -1
  114. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  115. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +0 -8
  116. package/dist/components/fields/FilterPicker/FilterPicker.js +14 -10
  117. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  118. package/dist/components/fields/Input/Input.js +1 -1
  119. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  120. package/dist/components/fields/ListBox/ListBox.js +1 -1
  121. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  122. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  123. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  124. package/dist/components/fields/Picker/Picker.js +12 -8
  125. package/dist/components/fields/Picker/Picker.js.map +1 -1
  126. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  127. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  128. package/dist/components/fields/RadioGroup/context.js +1 -1
  129. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  130. package/dist/components/fields/Select/Select.js +11 -7
  131. package/dist/components/fields/Select/Select.js.map +1 -1
  132. package/dist/components/fields/Slider/Gradation.js +1 -1
  133. package/dist/components/fields/Slider/HueSlider.js +1 -1
  134. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  135. package/dist/components/fields/Slider/Slider.js +1 -1
  136. package/dist/components/fields/Slider/SliderBase.js +1 -1
  137. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  138. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  139. package/dist/components/fields/Slider/elements.js +1 -1
  140. package/dist/components/fields/Slider/index.js +1 -1
  141. package/dist/components/fields/Switch/Switch.js +1 -1
  142. package/dist/components/fields/TextArea/TextArea.js +1 -1
  143. package/dist/components/fields/TextInput/TextInput.js +1 -1
  144. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  145. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  146. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  147. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  148. package/dist/components/form/Form/Field.js +1 -1
  149. package/dist/components/form/Form/Form.js +1 -1
  150. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  151. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  152. package/dist/components/form/Form/SubmitError.js +1 -1
  153. package/dist/components/form/Form/index.js +1 -1
  154. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  155. package/dist/components/form/Form/use-field/use-field.js +1 -1
  156. package/dist/components/form/Form/use-form.js +1 -1
  157. package/dist/components/form/Form/validation.js +1 -1
  158. package/dist/components/form/Label.js +1 -1
  159. package/dist/components/form/wrapper.js +1 -1
  160. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  161. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  162. package/dist/components/layout/Flex.js +1 -1
  163. package/dist/components/layout/Flow.js +1 -1
  164. package/dist/components/layout/Grid.js +1 -1
  165. package/dist/components/layout/Panel.js +1 -1
  166. package/dist/components/layout/Prefix.js +1 -1
  167. package/dist/components/layout/ResizablePanel.js +1 -1
  168. package/dist/components/layout/Space.js +1 -1
  169. package/dist/components/layout/Suffix.js +1 -1
  170. package/dist/components/navigation/Tabs/DraggableTabList.js +4 -6
  171. package/dist/components/navigation/Tabs/DraggableTabList.js.map +1 -1
  172. package/dist/components/navigation/Tabs/TabButton.js +5 -7
  173. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  174. package/dist/components/navigation/Tabs/TabDropIndicator.js +4 -9
  175. package/dist/components/navigation/Tabs/TabDropIndicator.js.map +1 -1
  176. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  177. package/dist/components/navigation/Tabs/TabPicker.js +5 -15
  178. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  179. package/dist/components/navigation/Tabs/Tabs.js +104 -137
  180. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  181. package/dist/components/navigation/Tabs/TabsAction.js +3 -11
  182. package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
  183. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  184. package/dist/components/navigation/Tabs/TabsContext.js.map +1 -1
  185. package/dist/components/navigation/Tabs/styled.js +70 -201
  186. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  187. package/dist/components/navigation/Tabs/types.d.ts +2 -16
  188. package/dist/components/navigation/Tabs/types.js +1 -1
  189. package/dist/components/navigation/Tabs/types.js.map +1 -1
  190. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  191. package/dist/components/navigation/Tabs/use-tab-indicator.js +14 -26
  192. package/dist/components/navigation/Tabs/use-tab-indicator.js.map +1 -1
  193. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  194. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  195. package/dist/components/other/Calendar/Calendar.js +1 -1
  196. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  197. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  198. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  199. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  200. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  201. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  202. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  203. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  204. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  205. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  206. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  207. package/dist/components/overlays/Dialog/context.js +1 -1
  208. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  209. package/dist/components/overlays/Modal/Modal.js +1 -1
  210. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  211. package/dist/components/overlays/Modal/Overlay.js +1 -1
  212. package/dist/components/overlays/Modal/Popover.js +1 -1
  213. package/dist/components/overlays/Modal/Tray.js +1 -1
  214. package/dist/components/overlays/Modal/Underlay.js +1 -1
  215. package/dist/components/overlays/Notifications/Notification.js +1 -1
  216. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  217. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  218. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  219. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  220. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  221. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  222. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  223. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  224. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  225. package/dist/components/overlays/Notifications/index.js +1 -1
  226. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  227. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  228. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  229. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  230. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  231. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  232. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  233. package/dist/components/overlays/Toast/index.js +1 -1
  234. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  235. package/dist/components/overlays/Toast/useToast.js +1 -1
  236. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  237. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  238. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  239. package/dist/components/overlays/Tooltip/context.js +1 -1
  240. package/dist/components/portal/Portal.js +1 -1
  241. package/dist/components/portal/PortalProvider.js +1 -1
  242. package/dist/components/portal/usePortal.js +1 -1
  243. package/dist/components/shared/DraggableCollection.js +1 -1
  244. package/dist/components/shared/InvalidIcon.js +1 -1
  245. package/dist/components/shared/ValidIcon.js +1 -1
  246. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  247. package/dist/components/status/Spin/Cube.js +1 -1
  248. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  249. package/dist/components/status/Spin/Spin.js +1 -1
  250. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  251. package/dist/data/item-themes.js +1 -1
  252. package/dist/data/themes.js +1 -1
  253. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  254. package/dist/icons/AdjustmentsIcon.js +1 -1
  255. package/dist/icons/AiIcon.js +1 -1
  256. package/dist/icons/AreaChartIcon.js +1 -1
  257. package/dist/icons/BackwardIcon.js +1 -1
  258. package/dist/icons/BarChartIcon.js +1 -1
  259. package/dist/icons/BellFilledIcon.js +1 -1
  260. package/dist/icons/BellIcon.js +1 -1
  261. package/dist/icons/BooleanIcon.js +1 -1
  262. package/dist/icons/CalendarEditIcon.js +1 -1
  263. package/dist/icons/CalendarIcon.js +1 -1
  264. package/dist/icons/CaretDownIcon.js +1 -1
  265. package/dist/icons/CaretUpIcon.js +1 -1
  266. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  267. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  268. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  269. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  270. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  271. package/dist/icons/ChartBarLineIcon.js +1 -1
  272. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  273. package/dist/icons/ChartBarStackedIcon.js +1 -1
  274. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  275. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  276. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  277. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  278. package/dist/icons/ChartBubbleIcon.js +1 -1
  279. package/dist/icons/ChartDonut2Icon.js +1 -1
  280. package/dist/icons/ChartFunnelIcon.js +1 -1
  281. package/dist/icons/ChartHeatmapIcon.js +1 -1
  282. package/dist/icons/ChartKPIIcon.js +1 -1
  283. package/dist/icons/ChartPie2Icon.js +1 -1
  284. package/dist/icons/ChartScatterIcon.js +1 -1
  285. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  286. package/dist/icons/CheckCircleIcon.js +1 -1
  287. package/dist/icons/CheckIcon.js +1 -1
  288. package/dist/icons/CircleFilledIcon.js +1 -1
  289. package/dist/icons/ClearIcon.js +1 -1
  290. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  291. package/dist/icons/CloseCircleIcon.js +1 -1
  292. package/dist/icons/CloseIcon.js +1 -1
  293. package/dist/icons/CodeIcon.js +1 -1
  294. package/dist/icons/ColumnTotalIcon.js +1 -1
  295. package/dist/icons/CopyIcon.js +1 -1
  296. package/dist/icons/CountIcon.js +1 -1
  297. package/dist/icons/CubeIcon.js +1 -1
  298. package/dist/icons/CubePauseIcon.js +1 -1
  299. package/dist/icons/CubePlayIcon.js +1 -1
  300. package/dist/icons/CurrencyDollarIcon.js +1 -1
  301. package/dist/icons/DangerIcon.js +1 -1
  302. package/dist/icons/DashboardIcon.js +1 -1
  303. package/dist/icons/DatabaseIcon.js +1 -1
  304. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  305. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  306. package/dist/icons/DirectionIcon.js +1 -1
  307. package/dist/icons/DonutIcon.js +1 -1
  308. package/dist/icons/DownIcon.js +1 -1
  309. package/dist/icons/EditIcon.js +1 -1
  310. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  311. package/dist/icons/ExclamationCircleIcon.js +1 -1
  312. package/dist/icons/ExclamationIcon.js +1 -1
  313. package/dist/icons/EyeIcon.js +1 -1
  314. package/dist/icons/EyeInvisibleIcon.js +1 -1
  315. package/dist/icons/FilterIcon.js +1 -1
  316. package/dist/icons/FolderFilledIcon.js +1 -1
  317. package/dist/icons/FolderIcon.js +1 -1
  318. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  319. package/dist/icons/FolderOpenIcon.js +1 -1
  320. package/dist/icons/ForwardIcon.js +1 -1
  321. package/dist/icons/GripVerticalIcon.js +1 -1
  322. package/dist/icons/HierarchyIcon.js +1 -1
  323. package/dist/icons/HierarchyOpenIcon.js +1 -1
  324. package/dist/icons/Icon.js +1 -1
  325. package/dist/icons/InfoCircleIcon.js +1 -1
  326. package/dist/icons/InfoIcon.js +1 -1
  327. package/dist/icons/KeyIcon.js +1 -1
  328. package/dist/icons/LeftIcon.js +1 -1
  329. package/dist/icons/LineChartIcon.js +1 -1
  330. package/dist/icons/LoadingIcon.js +1 -1
  331. package/dist/icons/LockFilledIcon.js +1 -1
  332. package/dist/icons/LockIcon.js +1 -1
  333. package/dist/icons/MoreIcon.js +1 -1
  334. package/dist/icons/NotAllowedIcon.js +1 -1
  335. package/dist/icons/Number123Icon.js +1 -1
  336. package/dist/icons/NumberIcon.js +1 -1
  337. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  338. package/dist/icons/PauseCircleIcon.js +1 -1
  339. package/dist/icons/PauseIcon.js +1 -1
  340. package/dist/icons/PercentageIcon.js +1 -1
  341. package/dist/icons/PieChartIcon.js +1 -1
  342. package/dist/icons/PlayCircleIcon.js +1 -1
  343. package/dist/icons/PlayIcon.js +1 -1
  344. package/dist/icons/PlusIcon.js +1 -1
  345. package/dist/icons/ProgressBarIcon.js +1 -1
  346. package/dist/icons/ReloadIcon.js +1 -1
  347. package/dist/icons/ReportIcon.js +1 -1
  348. package/dist/icons/ReturnIcon.js +1 -1
  349. package/dist/icons/RightIcon.js +1 -1
  350. package/dist/icons/RowTotalsIcon.js +1 -1
  351. package/dist/icons/SchemeIcon.js +1 -1
  352. package/dist/icons/SearchIcon.js +1 -1
  353. package/dist/icons/SemanticQueryIcon.js +1 -1
  354. package/dist/icons/SettingsIcon.js +1 -1
  355. package/dist/icons/ShieldFilledIcon.js +1 -1
  356. package/dist/icons/ShieldIcon.js +1 -1
  357. package/dist/icons/SlashIcon.js +1 -1
  358. package/dist/icons/SparklesIcon.js +1 -1
  359. package/dist/icons/SqlIcon.js +1 -1
  360. package/dist/icons/StatsIcon.js +1 -1
  361. package/dist/icons/StopIcon.js +1 -1
  362. package/dist/icons/StringIcon.js +1 -1
  363. package/dist/icons/SubtotalsIcon.js +1 -1
  364. package/dist/icons/SwitchIcon.js +1 -1
  365. package/dist/icons/TableIcon.js +1 -1
  366. package/dist/icons/ThumbsDownIcon.js +1 -1
  367. package/dist/icons/ThumbsUpIcon.js +1 -1
  368. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  369. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  370. package/dist/icons/ThunderboltIcon.js +1 -1
  371. package/dist/icons/TimeIcon.js +1 -1
  372. package/dist/icons/TrashIcon.js +1 -1
  373. package/dist/icons/UnlockIcon.js +1 -1
  374. package/dist/icons/UpIcon.js +1 -1
  375. package/dist/icons/UserGroupIcon.js +1 -1
  376. package/dist/icons/UserIcon.js +1 -1
  377. package/dist/icons/UserLockIcon.js +1 -1
  378. package/dist/icons/ViewIcon.js +1 -1
  379. package/dist/icons/WarningFilledIcon.js +1 -1
  380. package/dist/icons/WarningIcon.js +1 -1
  381. package/dist/icons/wrap-icon.js +1 -1
  382. package/dist/index.js +1 -1
  383. package/dist/provider.js +1 -1
  384. package/dist/providers/TrackingProvider.js +1 -1
  385. package/dist/providers/navigationAdapter.default.js +1 -1
  386. package/dist/tokens/base.js +1 -1
  387. package/dist/tokens/colors.js +1 -1
  388. package/dist/tokens/index.js +1 -1
  389. package/dist/tokens/layout.js +1 -1
  390. package/dist/tokens/palette.js +1 -1
  391. package/dist/tokens/shadows.js +1 -1
  392. package/dist/tokens/sizes.js +1 -1
  393. package/dist/tokens/spacing.js +1 -1
  394. package/dist/tokens/typography.js +1 -1
  395. package/dist/utils/ResizeSensor.js +1 -1
  396. package/dist/utils/is-dev-env.js +1 -1
  397. package/dist/utils/modules.js +1 -1
  398. package/dist/utils/promise.js +1 -1
  399. package/dist/utils/raf.js +1 -1
  400. package/dist/utils/random.js +1 -1
  401. package/dist/utils/range.js +1 -1
  402. package/dist/utils/react/RenderCache.js +1 -1
  403. package/dist/utils/react/Slots.js +1 -1
  404. package/dist/utils/react/chain.js +1 -1
  405. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  406. package/dist/utils/react/index.js +1 -1
  407. package/dist/utils/react/interactions.js +1 -1
  408. package/dist/utils/react/isTextOnly.js +1 -1
  409. package/dist/utils/react/mapProps.js +1 -1
  410. package/dist/utils/react/mergeProps.js +1 -1
  411. package/dist/utils/react/nullableValue.js +1 -1
  412. package/dist/utils/react/resolveIcon.js +1 -1
  413. package/dist/utils/react/sharedStore.js +1 -1
  414. package/dist/utils/react/useCombinedRefs.js +1 -1
  415. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  416. package/dist/utils/react/useEventBus.js +1 -1
  417. package/dist/utils/react/useId.js +1 -1
  418. package/dist/utils/react/useIsDarwin.js +1 -1
  419. package/dist/utils/react/useKeySymbols.js +1 -1
  420. package/dist/utils/react/useLayoutEffect.js +1 -1
  421. package/dist/utils/react/useLocalStorage.js +1 -1
  422. package/dist/utils/react/useMergeStyles.js +1 -1
  423. package/dist/utils/react/usePopoverSync.js +1 -1
  424. package/dist/utils/react/useQaProps.js +1 -1
  425. package/dist/utils/react/useViewportSize.js +1 -1
  426. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  427. package/dist/utils/selection.js +1 -1
  428. package/dist/utils/styles.js +1 -1
  429. package/dist/utils/tree.js +1 -1
  430. package/dist/utils/warnings.js +1 -1
  431. package/dist/version.js +2 -2
  432. package/docs/components/navigation/Tabs.md +7 -31
  433. package/docs/components/organisms/FileTabs.md +2 -2
  434. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-1cb94e6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-82d6956 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -56,13 +56,10 @@ function TabList(_props) {
56
56
  }
57
57
  TabList.displayName = "CubeTabList";
58
58
  function TabsComponent(props, ref) {
59
- const { label = "Tabs", defaultActiveKey, activeKey, size, type = "default", placement = "top", onChange, onDelete, onTitleChange, autoHideActions, isEditable: parentIsEditable, menu: parentMenu, menuTriggerProps: parentMenuTriggerProps, menuProps: parentMenuProps, contextMenu: parentContextMenu, onAction: parentOnAction, children, prefix, suffix, prerender = false, keepMounted = false, qa = "Tabs", renderPanel, panelCacheKeys, isReorderable = false, keyOrder, onReorder, showTabPicker = false, showScrollArrows = false, tabPickerPosition = "suffix", scrollArrowsPosition = "suffix", hideTabListScroll = false, tabListPadding, barStyles, tabListStyles, prefixStyles, suffixStyles, ...otherProps } = props;
60
- const orientation = placement === "left" || placement === "right" ? "vertical" : "horizontal";
61
- const effectiveType = orientation === "vertical" && type === "narrow" ? "default" : type;
59
+ const { label = "Tabs", defaultActiveKey, activeKey, size, type = "default", onChange, onDelete, onTitleChange, autoHideActions, isEditable: parentIsEditable, menu: parentMenu, menuTriggerProps: parentMenuTriggerProps, menuProps: parentMenuProps, contextMenu: parentContextMenu, onAction: parentOnAction, children, prefix, suffix, prerender = false, keepMounted = false, qa = "Tabs", renderPanel, panelCacheKeys, isReorderable = false, keyOrder, onReorder, showTabPicker = false, showScrollArrows = false, tabPickerPosition = "suffix", scrollArrowsPosition = "suffix", hideTabListScroll = false, tabListPadding, tabListStyles, prefixStyles, suffixStyles, ...otherProps } = props;
62
60
  const baseStyles = extractStyles(otherProps, OUTER_STYLES);
63
61
  const tabListPaddingStyles = useMemo(() => tabListPadding ? { "$tablist-padding": `${tabListPadding}` } : void 0, [tabListPadding]);
64
62
  const combinedStyles = useMergeStyles(baseStyles, {
65
- Bar: barStyles,
66
63
  TabList: useMemo(() => mergeStyles(tabListPaddingStyles, tabListStyles), [tabListPaddingStyles, tabListStyles]),
67
64
  Prefix: prefixStyles,
68
65
  Suffix: suffixStyles
@@ -161,16 +158,14 @@ function TabsComponent(props, ref) {
161
158
  onSelectionChange: handleSelectionChange,
162
159
  disabledKeys,
163
160
  children: collectionItems,
164
- "aria-label": label,
165
- orientation
161
+ "aria-label": label
166
162
  }), [
167
163
  selectedKey,
168
164
  defaultSelectedKey,
169
165
  handleSelectionChange,
170
166
  disabledKeys,
171
167
  collectionItems,
172
- label,
173
- orientation
168
+ label
174
169
  ]);
175
170
  const state = useTabListState(ariaProps);
176
171
  useEffect(() => {
@@ -182,53 +177,39 @@ function TabsComponent(props, ref) {
182
177
  handleSelectionChange(key);
183
178
  });
184
179
  const orderToken = useMemo(() => orderedParsedTabs.map((t) => t.key).join(","), [orderedParsedTabs]);
185
- const indicatorStyle = useTabIndicator(listRef, state.selectedKey, effectiveType === "default" || effectiveType === "narrow", orientation, orderToken);
186
- const isTinyScrollbar = effectiveType !== "radio";
187
- const { handleHStyle, handleVStyle, hasOverflowX, hasOverflowY, isScrolling, isAtStartX, isAtEndX, isAtStartY, isAtEndY } = useTinyScrollbar(scrollRef, isTinyScrollbar);
180
+ const indicatorStyle = useTabIndicator(listRef, state.selectedKey, type === "default" || type === "narrow", orderToken);
181
+ const isTinyScrollbar = type !== "radio";
182
+ const { handleHStyle, hasOverflowX, isScrolling, isAtStartX, isAtEndX } = useTinyScrollbar(scrollRef, isTinyScrollbar);
188
183
  const showTinyScrollbar = isTinyScrollbar && !hideTabListScroll;
189
- const hasOverflow = orientation === "vertical" ? hasOverflowY : hasOverflowX;
190
- const isAtStart = orientation === "vertical" ? isAtStartY : isAtStartX;
191
- const isAtEnd = orientation === "vertical" ? isAtEndY : isAtEndX;
192
184
  const hasPanels = hasAnyContent || !!renderPanel;
193
- useWarn(showTabPicker && effectiveType === "radio", {
185
+ useWarn(showTabPicker && type === "radio", {
194
186
  key: ["tabs-tabpicker-radio-unsupported"],
195
187
  args: ["Tabs:", "`showTabPicker` is not supported when `type=\"radio\"`. The TabPicker will not be rendered."]
196
188
  });
197
- const shouldShowTabPicker = effectiveType !== "radio" && (showTabPicker === true || showTabPicker === "auto" && hasOverflow);
198
- useWarn(showScrollArrows && effectiveType === "radio", {
189
+ const shouldShowTabPicker = type !== "radio" && (showTabPicker === true || showTabPicker === "auto" && hasOverflowX);
190
+ useWarn(showScrollArrows && type === "radio", {
199
191
  key: ["tabs-scrollarrows-radio-unsupported"],
200
192
  args: ["Tabs:", "`showScrollArrows` is not supported when `type=\"radio\"`. The scroll arrows will not be rendered."]
201
193
  });
202
- const shouldShowScrollArrows = effectiveType !== "radio" && (showScrollArrows === true || showScrollArrows === "auto" && hasOverflow);
203
- const handleScrollStart = useEvent(() => {
194
+ const shouldShowScrollArrows = type !== "radio" && (showScrollArrows === true || showScrollArrows === "auto" && hasOverflowX);
195
+ const handleScrollLeft = useEvent(() => {
204
196
  const el = scrollRef.current;
205
- if (!el) return;
206
- if (orientation === "vertical") el.scrollTo({
207
- top: el.scrollTop - el.clientHeight,
208
- behavior: "smooth"
209
- });
210
- else el.scrollTo({
197
+ if (el) el.scrollTo({
211
198
  left: el.scrollLeft - el.clientWidth,
212
199
  behavior: "smooth"
213
200
  });
214
201
  });
215
- const handleScrollEnd = useEvent(() => {
202
+ const handleScrollRight = useEvent(() => {
216
203
  const el = scrollRef.current;
217
- if (!el) return;
218
- if (orientation === "vertical") el.scrollTo({
219
- top: el.scrollTop + el.clientHeight,
220
- behavior: "smooth"
221
- });
222
- else el.scrollTo({
204
+ if (el) el.scrollTo({
223
205
  left: el.scrollLeft + el.clientWidth,
224
206
  behavior: "smooth"
225
207
  });
226
208
  });
227
209
  const baseContextValue = useMemo(() => ({
228
210
  state,
229
- type: effectiveType,
211
+ type,
230
212
  size,
231
- placement,
232
213
  autoHideActions,
233
214
  isEditable: parentIsEditable,
234
215
  menu: parentMenu,
@@ -243,9 +224,8 @@ function TabsComponent(props, ref) {
243
224
  cancelEditing
244
225
  }), [
245
226
  state,
246
- effectiveType,
227
+ type,
247
228
  size,
248
- placement,
249
229
  autoHideActions,
250
230
  parentIsEditable,
251
231
  parentMenu,
@@ -279,54 +259,45 @@ function TabsComponent(props, ref) {
279
259
  isLastTab: index === orderedParsedTabs.length - 1
280
260
  }, item.key);
281
261
  })
282
- }), indicatorStyle && /* @__PURE__ */ jsx(TabIndicatorElement, {
283
- mods: { placement },
284
- style: orientation === "vertical" ? {
285
- top: indicatorStyle.start,
286
- height: indicatorStyle.size
287
- } : {
288
- left: indicatorStyle.start,
289
- width: indicatorStyle.size
290
- }
291
- })]
262
+ }), indicatorStyle && /* @__PURE__ */ jsx(TabIndicatorElement, { style: {
263
+ left: indicatorStyle.left,
264
+ width: indicatorStyle.width
265
+ } })]
292
266
  });
293
267
  const mods = useMemo(() => ({
294
- type: effectiveType,
268
+ type,
295
269
  size,
296
- placement,
297
270
  deletable: !!onDelete,
298
271
  scrolling: showTinyScrollbar && isScrolling,
299
- "fade-start": !isAtStart,
300
- "fade-end": !isAtEnd,
272
+ "fade-left": !isAtStartX,
273
+ "fade-right": !isAtEndX,
301
274
  "has-panels": hasPanels
302
275
  }), [
303
- effectiveType,
276
+ type,
304
277
  size,
305
- placement,
306
278
  onDelete,
307
279
  showTinyScrollbar,
308
280
  isScrolling,
309
- isAtStart,
310
- isAtEnd,
281
+ isAtStartX,
282
+ isAtEndX,
311
283
  hasPanels
312
284
  ]);
313
285
  const scrollArrowsElement = shouldShowScrollArrows ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(TabsAction, {
314
- icon: /* @__PURE__ */ jsx(DirectionIcon, { to: orientation === "vertical" ? "top" : "left" }),
315
- "aria-label": orientation === "vertical" ? "Scroll tabs up" : "Scroll tabs left",
316
- isDisabled: isAtStart,
317
- onPress: handleScrollStart
286
+ icon: /* @__PURE__ */ jsx(DirectionIcon, { to: "left" }),
287
+ "aria-label": "Scroll tabs left",
288
+ isDisabled: isAtStartX,
289
+ onPress: handleScrollLeft
318
290
  }), /* @__PURE__ */ jsx(TabsAction, {
319
- icon: /* @__PURE__ */ jsx(DirectionIcon, { to: orientation === "vertical" ? "bottom" : "right" }),
320
- "aria-label": orientation === "vertical" ? "Scroll tabs down" : "Scroll tabs right",
321
- isDisabled: isAtEnd,
322
- onPress: handleScrollEnd
291
+ icon: /* @__PURE__ */ jsx(DirectionIcon, { to: "right" }),
292
+ "aria-label": "Scroll tabs right",
293
+ isDisabled: isAtEndX,
294
+ onPress: handleScrollRight
323
295
  })] }) : null;
324
296
  const tabPickerElement = shouldShowTabPicker ? /* @__PURE__ */ jsx(TabPicker, {
325
297
  tabs: orderedParsedTabs,
326
298
  selectedKey: state.selectedKey,
327
299
  size,
328
- type: effectiveType,
329
- placement,
300
+ type,
330
301
  isReorderable,
331
302
  onSelect: handleTabPickerSelect,
332
303
  onDelete,
@@ -334,82 +305,78 @@ function TabsComponent(props, ref) {
334
305
  }) : null;
335
306
  const prefixHasActions = shouldShowTabPicker && tabPickerPosition === "prefix" || shouldShowScrollArrows && scrollArrowsPosition === "prefix";
336
307
  const suffixHasActions = shouldShowTabPicker && tabPickerPosition === "suffix" || shouldShowScrollArrows && scrollArrowsPosition === "suffix";
337
- return /* @__PURE__ */ jsx(TabsProvider, {
308
+ return /* @__PURE__ */ jsxs(TabsProvider, {
338
309
  value: baseContextValue,
339
- children: /* @__PURE__ */ jsxs(TabsElement, {
340
- ref,
341
- qa,
342
- mods,
343
- styles: combinedStyles,
344
- style: showTinyScrollbar ? orientation === "vertical" ? handleVStyle : handleHStyle : void 0,
345
- "data-size": size,
346
- children: [
347
- /* @__PURE__ */ jsxs("div", {
348
- "data-element": "Bar",
349
- children: [
350
- prefix || prefixHasActions ? /* @__PURE__ */ jsxs("div", {
351
- "data-element": "Prefix",
352
- children: [
353
- tabPickerPosition === "prefix" && tabPickerElement,
354
- scrollArrowsPosition === "prefix" && scrollArrowsElement,
355
- prefix
356
- ]
357
- }) : null,
358
- /* @__PURE__ */ jsxs("div", {
359
- "data-element": "ScrollWrapper",
360
- children: [/* @__PURE__ */ jsx("div", {
361
- ref: scrollRef,
362
- "data-element": "Scroll",
363
- children: isReorderable ? /* @__PURE__ */ jsx(DraggableTabList, {
364
- state,
365
- listRef,
366
- orderedKeys: orderedParsedTabs.map((t) => t.key),
367
- orientation,
368
- onReorder,
369
- children: (dragState, dropState, collectionProps) => renderTabListContent(createContextValue(dragState, dropState), collectionProps)
370
- }) : renderTabListContent(createContextValue())
371
- }), showTinyScrollbar && hasOverflow && /* @__PURE__ */ jsx("div", { "data-element": "Scrollbar" })]
372
- }),
373
- suffix || suffixHasActions ? /* @__PURE__ */ jsxs("div", {
374
- "data-element": "Suffix",
375
- children: [
376
- scrollArrowsPosition === "suffix" && scrollArrowsElement,
377
- tabPickerPosition === "suffix" && tabPickerElement,
378
- suffix
379
- ]
380
- }) : null
381
- ]
382
- }),
383
- renderPanel && /* @__PURE__ */ jsx(CachedPanelRenderer, {
384
- parsedTabs,
385
- explicitPanels,
310
+ children: [
311
+ /* @__PURE__ */ jsxs(TabsElement, {
312
+ ref,
313
+ qa,
314
+ mods,
315
+ styles: combinedStyles,
316
+ style: showTinyScrollbar ? handleHStyle : void 0,
317
+ "data-size": size,
318
+ children: [
319
+ prefix || prefixHasActions ? /* @__PURE__ */ jsxs("div", {
320
+ "data-element": "Prefix",
321
+ children: [
322
+ tabPickerPosition === "prefix" && tabPickerElement,
323
+ scrollArrowsPosition === "prefix" && scrollArrowsElement,
324
+ prefix
325
+ ]
326
+ }) : null,
327
+ /* @__PURE__ */ jsxs("div", {
328
+ "data-element": "ScrollWrapper",
329
+ children: [/* @__PURE__ */ jsx("div", {
330
+ ref: scrollRef,
331
+ "data-element": "Scroll",
332
+ children: isReorderable ? /* @__PURE__ */ jsx(DraggableTabList, {
333
+ state,
334
+ listRef,
335
+ orderedKeys: orderedParsedTabs.map((t) => t.key),
336
+ onReorder,
337
+ children: (dragState, dropState, collectionProps) => renderTabListContent(createContextValue(dragState, dropState), collectionProps)
338
+ }) : renderTabListContent(createContextValue())
339
+ }), showTinyScrollbar && hasOverflowX && /* @__PURE__ */ jsx("div", { "data-element": "ScrollbarH" })]
340
+ }),
341
+ suffix || suffixHasActions ? /* @__PURE__ */ jsxs("div", {
342
+ "data-element": "Suffix",
343
+ children: [
344
+ scrollArrowsPosition === "suffix" && scrollArrowsElement,
345
+ tabPickerPosition === "suffix" && tabPickerElement,
346
+ suffix
347
+ ]
348
+ }) : null
349
+ ]
350
+ }),
351
+ renderPanel && /* @__PURE__ */ jsx(CachedPanelRenderer, {
352
+ parsedTabs,
353
+ explicitPanels,
354
+ state,
355
+ renderPanel,
356
+ panelCacheKeys,
357
+ prerender,
358
+ keepMounted,
359
+ visitedKeys: visitedKeysRef.current
360
+ }),
361
+ !renderPanel && hasAnyContent && parsedTabs.map((tab) => {
362
+ const explicitPanel = explicitPanels.get(tab.key);
363
+ const content = explicitPanel?.content ?? tab.content;
364
+ if (content == null) return null;
365
+ return /* @__PURE__ */ jsx(TabPanelRenderer, {
366
+ tabKey: tab.key,
386
367
  state,
387
- renderPanel,
388
- panelCacheKeys,
368
+ content,
389
369
  prerender,
390
370
  keepMounted,
391
- visitedKeys: visitedKeysRef.current
392
- }),
393
- !renderPanel && hasAnyContent && parsedTabs.map((tab) => {
394
- const explicitPanel = explicitPanels.get(tab.key);
395
- const content = explicitPanel?.content ?? tab.content;
396
- if (content == null) return null;
397
- return /* @__PURE__ */ jsx(TabPanelRenderer, {
398
- tabKey: tab.key,
399
- state,
400
- content,
401
- prerender,
402
- keepMounted,
403
- tabPrerender: explicitPanel?.prerender ?? tab.prerender,
404
- tabKeepMounted: explicitPanel?.keepMounted ?? tab.keepMounted,
405
- visitedKeys: visitedKeysRef.current,
406
- panelStyles: explicitPanel?.styles,
407
- qa: explicitPanel?.qa,
408
- qaVal: explicitPanel?.qaVal
409
- }, tab.key);
410
- })
411
- ]
412
- })
371
+ tabPrerender: explicitPanel?.prerender ?? tab.prerender,
372
+ tabKeepMounted: explicitPanel?.keepMounted ?? tab.keepMounted,
373
+ visitedKeys: visitedKeysRef.current,
374
+ panelStyles: explicitPanel?.styles,
375
+ qa: explicitPanel?.qa,
376
+ qaVal: explicitPanel?.qaVal
377
+ }, tab.key);
378
+ })
379
+ ]
413
380
  });
414
381
  }
415
382
  const _Tabs = forwardRef(TabsComponent);
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","names":["CollectionItem","mergeProps"],"sources":["../../../../src/components/navigation/Tabs/Tabs.tsx"],"sourcesContent":["import { mergeStyles, OUTER_STYLES } from '@tenphi/tasty';\nimport {\n Children,\n ForwardedRef,\n forwardRef,\n isValidElement,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport { AriaTabListProps, useTabList } from 'react-aria';\nimport {\n Item as CollectionItem,\n DraggableCollectionState,\n DroppableCollectionState,\n useTabListState,\n} from 'react-stately';\n\nimport { useEvent, useWarn } from '../../../_internal/hooks';\nimport { DirectionIcon } from '../../../icons';\nimport { mergeProps, useMergeStyles } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { useTinyScrollbar } from '../../content/Layout/hooks/useTinyScrollbar';\n\nimport { DraggableTabList } from './DraggableTabList';\nimport { TabIndicatorElement, TabsElement } from './styled';\nimport { TabButton } from './TabButton';\nimport { CachedPanelRenderer, TabPanelRenderer } from './TabPanel';\nimport { TabPicker } from './TabPicker';\nimport { TabsAction } from './TabsAction';\nimport { TabsContextValue, TabsProvider } from './TabsContext';\nimport { useTabEditing } from './use-tab-editing';\nimport { useTabIndicator } from './use-tab-indicator';\n\nimport type { Key } from '@react-types/shared';\nimport type {\n CubeTabListProps,\n CubeTabPanelProps,\n CubeTabProps,\n CubeTabsProps,\n ParsedPanel,\n ParsedTab,\n} from './types';\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Generic helper to check if a child is a specific component by displayName.\n */\nfunction isComponentElement<T>(\n child: ReactNode,\n displayName: string,\n): child is ReactElement<T> {\n return (\n isValidElement(child) &&\n typeof child.type === 'function' &&\n (child.type as any).displayName === displayName\n );\n}\n\n/** Checks if a child is a Tab component. */\nconst isTabElement = (child: ReactNode): child is ReactElement<CubeTabProps> =>\n isComponentElement<CubeTabProps>(child, 'CubeTab');\n\n/** Checks if a child is a TabPanel component. */\nconst isTabPanelElement = (\n child: ReactNode,\n): child is ReactElement<CubeTabPanelProps> =>\n isComponentElement<CubeTabPanelProps>(child, 'CubeTabPanel');\n\n/** Checks if a child is a TabList component. */\nconst isTabListElement = (\n child: ReactNode,\n): child is ReactElement<CubeTabListProps> =>\n isComponentElement<CubeTabListProps>(child, 'CubeTabList');\n\n/**\n * Extracts the raw key from a React element, stripping the \".$\" prefix\n * that React adds via Children.map/toArray.\n */\nfunction getRawKey(element: ReactElement): string | null {\n if (element.key == null) return null;\n const keyStr = String(element.key);\n return keyStr.startsWith('.$') ? keyStr.slice(2) : keyStr;\n}\n\n// =============================================================================\n// Tab Component (configuration only - not rendered directly)\n// =============================================================================\n\nfunction Tab(_props: CubeTabProps): ReactElement | null {\n return null;\n}\n\nTab.displayName = 'CubeTab';\n\n// =============================================================================\n// TabPanel Component (configuration only - not rendered directly)\n// =============================================================================\n\nfunction TabPanel(_props: CubeTabPanelProps): ReactElement | null {\n return null;\n}\n\nTabPanel.displayName = 'CubeTabPanel';\n\n// =============================================================================\n// TabList Component (configuration only - not rendered directly)\n// =============================================================================\n\nfunction TabList(_props: CubeTabListProps): ReactElement | null {\n return null;\n}\n\nTabList.displayName = 'CubeTabList';\n\n// =============================================================================\n// Main Tabs Component\n// =============================================================================\n\nfunction TabsComponent(\n props: CubeTabsProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const {\n label = 'Tabs',\n defaultActiveKey,\n activeKey,\n size,\n type = 'default',\n placement = 'top',\n onChange,\n onDelete,\n onTitleChange,\n autoHideActions,\n isEditable: parentIsEditable,\n menu: parentMenu,\n menuTriggerProps: parentMenuTriggerProps,\n menuProps: parentMenuProps,\n contextMenu: parentContextMenu,\n onAction: parentOnAction,\n children,\n prefix,\n suffix,\n prerender = false,\n keepMounted = false,\n qa = 'Tabs',\n renderPanel,\n panelCacheKeys,\n isReorderable = false,\n keyOrder,\n onReorder,\n showTabPicker = false,\n showScrollArrows = false,\n tabPickerPosition = 'suffix',\n scrollArrowsPosition = 'suffix',\n hideTabListScroll = false,\n tabListPadding,\n barStyles,\n tabListStyles,\n prefixStyles,\n suffixStyles,\n ...otherProps\n } = props;\n\n // Derive orientation from placement\n const orientation: 'horizontal' | 'vertical' =\n placement === 'left' || placement === 'right' ? 'vertical' : 'horizontal';\n\n // `narrow` only makes sense for a horizontal strip — its whole point is\n // collapsed horizontal padding for a denser row of tabs. Force `default`\n // when the strip is vertical.\n const effectiveType =\n orientation === 'vertical' && type === 'narrow' ? 'default' : type;\n\n // Extract outer styles (these go on the new outer wrapper)\n const baseStyles = extractStyles(otherProps, OUTER_STYLES);\n\n // Build TabList padding style (memoized)\n const tabListPaddingStyles = useMemo(\n () =>\n tabListPadding ? { '$tablist-padding': `${tabListPadding}` } : undefined,\n [tabListPadding],\n );\n\n // Merge tabListPaddingStyles with tabListStyles (memoized)\n const mergedTabListStyles = useMemo(\n () => mergeStyles(tabListPaddingStyles, tabListStyles),\n [tabListPaddingStyles, tabListStyles],\n );\n\n // Merge all sub-element styles into baseStyles. The outer `TabsElement`\n // exposes `Bar`, `Prefix`, `Suffix`, `TabList`, `ScrollWrapper`, `Scroll`,\n // and `Scrollbar` sub-elements (defined in styled.ts).\n const combinedStyles = useMergeStyles(baseStyles, {\n Bar: barStyles,\n TabList: mergedTabListStyles,\n Prefix: prefixStyles,\n Suffix: suffixStyles,\n });\n\n // DOM element refs\n const listRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Track visited tabs for keepMounted functionality\n const visitedKeysRef = useRef<Set<string>>(new Set());\n\n // =========================================================================\n // Tab Title Editing Hook\n // =========================================================================\n const onTitleChangeRaf = useEvent((key: string, newTitle: string) => {\n requestAnimationFrame(() => {\n onTitleChange?.(key, newTitle);\n });\n });\n\n const { editingKey, startEditing, cancelEditing, submitEditing } =\n useTabEditing({\n onChange,\n onTitleChange: onTitleChange ? onTitleChangeRaf : undefined,\n });\n\n // =========================================================================\n // Parse children to extract tabs and explicit panels\n // =========================================================================\n const { parsedTabs, explicitPanels, hasAnyContent } = useMemo(() => {\n const childArray = Children.toArray(children);\n const tabs: ParsedTab[] = [];\n const panels = new Map<string, ParsedPanel>();\n let hasExplicitList = false;\n let tabChildren: ReactNode[] = [];\n\n // Check for explicit Tabs.List / Tabs.Panel structure\n for (const child of childArray) {\n if (isTabListElement(child)) {\n hasExplicitList = true;\n tabChildren = Children.toArray(child.props.children);\n } else if (isTabPanelElement(child)) {\n const key = getRawKey(child as ReactElement);\n\n if (key != null) {\n panels.set(key, {\n key,\n content: child.props.children,\n prerender: child.props.prerender,\n keepMounted: child.props.keepMounted,\n styles: child.props.styles,\n qa: child.props.qa,\n qaVal: child.props.qaVal,\n });\n }\n }\n }\n\n // If no explicit list, use direct Tab children\n if (!hasExplicitList) {\n tabChildren = childArray;\n }\n\n // Parse Tab elements\n let hasContent = panels.size > 0;\n\n for (const child of tabChildren) {\n if (isTabElement(child)) {\n const key = getRawKey(child) ?? child.props.id;\n\n if (key != null) {\n const { id: _id, children: tabContent, ...tabProps } = child.props;\n\n tabs.push({\n ...tabProps,\n key,\n content: tabContent,\n });\n\n if (tabContent != null) {\n hasContent = true;\n }\n }\n }\n }\n\n return {\n parsedTabs: tabs,\n explicitPanels: panels,\n hasAnyContent: hasContent,\n };\n }, [children]);\n\n // Clean up visitedKeys when tabs are removed\n const currentTabKeysSet = useMemo(\n () => new Set(parsedTabs.map((t) => t.key)),\n [parsedTabs],\n );\n\n useEffect(() => {\n for (const key of visitedKeysRef.current) {\n if (!currentTabKeysSet.has(key)) {\n visitedKeysRef.current.delete(key);\n }\n }\n }, [currentTabKeysSet]);\n\n // =========================================================================\n // Order tabs according to keyOrder\n // =========================================================================\n const orderedParsedTabs = useMemo(() => {\n if (!keyOrder || keyOrder.length === 0) {\n return parsedTabs;\n }\n\n const tabMap = new Map<string, ParsedTab>();\n for (const tab of parsedTabs) {\n tabMap.set(tab.key, tab);\n }\n\n const ordered: ParsedTab[] = [];\n for (const key of keyOrder) {\n const tab = tabMap.get(String(key));\n if (tab) {\n ordered.push(tab);\n tabMap.delete(String(key));\n }\n }\n\n // Append any tabs not in keyOrder\n for (const tab of parsedTabs) {\n if (tabMap.has(tab.key)) {\n ordered.push(tab);\n }\n }\n\n return ordered;\n }, [parsedTabs, keyOrder]);\n\n // Create collection items for React Stately\n const collectionItems = useMemo(() => {\n return orderedParsedTabs.map((tab) => (\n <CollectionItem\n key={tab.key}\n textValue={typeof tab.title === 'string' ? tab.title : String(tab.key)}\n >\n {tab.title}\n </CollectionItem>\n ));\n }, [orderedParsedTabs]);\n\n // Determine disabled keys\n const disabledKeys = useMemo(() => {\n return new Set(\n parsedTabs.filter((tab) => tab.isDisabled).map((tab) => tab.key),\n );\n }, [parsedTabs]);\n\n // Handle selection change (converts React Aria's Key to string for our API)\n const handleSelectionChange = useEvent((key: Key) => {\n const keyStr = String(key);\n visitedKeysRef.current.add(keyStr);\n onChange?.(keyStr);\n });\n\n // Convert keys to strings for React Aria compatibility\n const selectedKey = activeKey != null ? String(activeKey) : undefined;\n const defaultSelectedKey =\n defaultActiveKey != null ? String(defaultActiveKey) : undefined;\n\n // Create aria props for useTabListState\n const ariaProps: AriaTabListProps<object> = useMemo(\n () => ({\n selectedKey,\n defaultSelectedKey,\n onSelectionChange: handleSelectionChange,\n disabledKeys,\n children: collectionItems,\n 'aria-label': label,\n orientation,\n }),\n [\n selectedKey,\n defaultSelectedKey,\n handleSelectionChange,\n disabledKeys,\n collectionItems,\n label,\n orientation,\n ],\n );\n\n // Create state using useTabListState\n const state = useTabListState(ariaProps);\n\n // Track initial selected key for visited tabs\n useEffect(() => {\n if (state.selectedKey != null) {\n visitedKeysRef.current.add(String(state.selectedKey));\n }\n }, [state.selectedKey]);\n\n // Get tablist props from react-aria\n const { tabListProps } = useTabList(ariaProps, state, listRef);\n\n // Handle selection from TabPicker (needs to update internal state in uncontrolled mode)\n const handleTabPickerSelect = useEvent((key: string) => {\n // Update internal state (for uncontrolled mode)\n state.setSelectedKey(key);\n // Also call the external onChange handler\n handleSelectionChange(key);\n });\n\n // =========================================================================\n // Tab Indicator (for default type)\n // =========================================================================\n // Create order token that changes when tab order changes (for indicator recalculation)\n const orderToken = useMemo(\n () => orderedParsedTabs.map((t) => t.key).join(','),\n [orderedParsedTabs],\n );\n\n const indicatorStyle = useTabIndicator(\n listRef,\n state.selectedKey,\n effectiveType === 'default' || effectiveType === 'narrow',\n orientation,\n orderToken,\n );\n\n // =========================================================================\n // Tiny Scrollbar (not for radio type)\n // =========================================================================\n const isTinyScrollbar = effectiveType !== 'radio';\n const {\n handleHStyle,\n handleVStyle,\n hasOverflowX,\n hasOverflowY,\n isScrolling,\n isAtStartX,\n isAtEndX,\n isAtStartY,\n isAtEndY,\n } = useTinyScrollbar(scrollRef, isTinyScrollbar);\n const showTinyScrollbar = isTinyScrollbar && !hideTabListScroll;\n\n // Active-axis aggregates (used everywhere downstream so we don't sprinkle\n // orientation checks around).\n const hasOverflow = orientation === 'vertical' ? hasOverflowY : hasOverflowX;\n const isAtStart = orientation === 'vertical' ? isAtStartY : isAtStartX;\n const isAtEnd = orientation === 'vertical' ? isAtEndY : isAtEndX;\n\n const hasPanels = hasAnyContent || !!renderPanel;\n\n // =========================================================================\n // Tab Picker visibility\n // =========================================================================\n useWarn(showTabPicker && effectiveType === 'radio', {\n key: ['tabs-tabpicker-radio-unsupported'],\n args: [\n 'Tabs:',\n '`showTabPicker` is not supported when `type=\"radio\"`. The TabPicker will not be rendered.',\n ],\n });\n\n const shouldShowTabPicker =\n effectiveType !== 'radio' &&\n (showTabPicker === true || (showTabPicker === 'auto' && hasOverflow));\n\n // =========================================================================\n // Scroll Arrows visibility and handlers\n // =========================================================================\n useWarn(showScrollArrows && effectiveType === 'radio', {\n key: ['tabs-scrollarrows-radio-unsupported'],\n args: [\n 'Tabs:',\n '`showScrollArrows` is not supported when `type=\"radio\"`. The scroll arrows will not be rendered.',\n ],\n });\n\n const shouldShowScrollArrows =\n effectiveType !== 'radio' &&\n (showScrollArrows === true || (showScrollArrows === 'auto' && hasOverflow));\n\n const handleScrollStart = useEvent(() => {\n const el = scrollRef.current;\n if (!el) return;\n if (orientation === 'vertical') {\n el.scrollTo({\n top: el.scrollTop - el.clientHeight,\n behavior: 'smooth',\n });\n } else {\n el.scrollTo({\n left: el.scrollLeft - el.clientWidth,\n behavior: 'smooth',\n });\n }\n });\n\n const handleScrollEnd = useEvent(() => {\n const el = scrollRef.current;\n if (!el) return;\n if (orientation === 'vertical') {\n el.scrollTo({\n top: el.scrollTop + el.clientHeight,\n behavior: 'smooth',\n });\n } else {\n el.scrollTo({\n left: el.scrollLeft + el.clientWidth,\n behavior: 'smooth',\n });\n }\n });\n\n // =========================================================================\n // Base Context Value (without drag/drop states)\n // =========================================================================\n const baseContextValue = useMemo(\n () => ({\n state,\n type: effectiveType,\n size,\n placement,\n autoHideActions,\n isEditable: parentIsEditable,\n menu: parentMenu,\n menuTriggerProps: parentMenuTriggerProps,\n menuProps: parentMenuProps,\n contextMenu: parentContextMenu,\n onDelete,\n onAction: parentOnAction,\n editingKey,\n startEditing,\n submitEditing,\n cancelEditing,\n }),\n [\n state,\n effectiveType,\n size,\n placement,\n autoHideActions,\n parentIsEditable,\n parentMenu,\n parentMenuTriggerProps,\n parentMenuProps,\n parentContextMenu,\n onDelete,\n parentOnAction,\n editingKey,\n startEditing,\n submitEditing,\n cancelEditing,\n ],\n );\n\n // Helper to create full context value with optional drag/drop states\n const createContextValue = (\n dragState?: DraggableCollectionState,\n dropState?: DroppableCollectionState,\n ): TabsContextValue => ({\n ...baseContextValue,\n dragState,\n dropState,\n });\n\n // =========================================================================\n // Tab List Content Renderer\n // =========================================================================\n const renderTabListContent = (\n contextValue: TabsContextValue,\n collectionProps: Record<string, unknown> = {},\n ) => (\n <div\n {...mergeProps(tabListProps, collectionProps)}\n ref={listRef}\n data-element=\"TabList\"\n >\n <TabsProvider value={contextValue}>\n {orderedParsedTabs.map((tab, index) => {\n const item = state.collection.getItem(tab.key);\n if (!item) return null;\n\n return (\n <TabButton\n key={item.key}\n item={item}\n tabData={tab}\n isLastTab={index === orderedParsedTabs.length - 1}\n />\n );\n })}\n </TabsProvider>\n {indicatorStyle && (\n <TabIndicatorElement\n mods={{ placement }}\n style={\n orientation === 'vertical'\n ? {\n top: indicatorStyle.start,\n height: indicatorStyle.size,\n }\n : {\n left: indicatorStyle.start,\n width: indicatorStyle.size,\n }\n }\n />\n )}\n </div>\n );\n\n // =========================================================================\n // Mods for styling\n // =========================================================================\n const mods = useMemo(\n () => ({\n type: effectiveType,\n size,\n placement,\n deletable: !!onDelete,\n scrolling: showTinyScrollbar && isScrolling,\n 'fade-start': !isAtStart,\n 'fade-end': !isAtEnd,\n 'has-panels': hasPanels,\n }),\n [\n effectiveType,\n size,\n placement,\n onDelete,\n showTinyScrollbar,\n isScrolling,\n isAtStart,\n isAtEnd,\n hasPanels,\n ],\n );\n\n // =========================================================================\n // Action Elements (TabPicker and Scroll Arrows)\n // =========================================================================\n const scrollArrowsElement = shouldShowScrollArrows ? (\n <>\n <TabsAction\n icon={\n <DirectionIcon to={orientation === 'vertical' ? 'top' : 'left'} />\n }\n aria-label={\n orientation === 'vertical' ? 'Scroll tabs up' : 'Scroll tabs left'\n }\n isDisabled={isAtStart}\n onPress={handleScrollStart}\n />\n <TabsAction\n icon={\n <DirectionIcon to={orientation === 'vertical' ? 'bottom' : 'right'} />\n }\n aria-label={\n orientation === 'vertical' ? 'Scroll tabs down' : 'Scroll tabs right'\n }\n isDisabled={isAtEnd}\n onPress={handleScrollEnd}\n />\n </>\n ) : null;\n\n const tabPickerElement = shouldShowTabPicker ? (\n <TabPicker\n tabs={orderedParsedTabs}\n selectedKey={state.selectedKey}\n size={size}\n type={effectiveType}\n placement={placement}\n isReorderable={isReorderable}\n onSelect={handleTabPickerSelect}\n onDelete={onDelete}\n onReorder={onReorder}\n />\n ) : null;\n\n // Determine which actions go in prefix/suffix\n // In prefix: TabPicker first (left), then scroll arrows (right)\n // In suffix: scroll arrows first (left), then TabPicker (right)\n const prefixHasActions =\n (shouldShowTabPicker && tabPickerPosition === 'prefix') ||\n (shouldShowScrollArrows && scrollArrowsPosition === 'prefix');\n\n const suffixHasActions =\n (shouldShowTabPicker && tabPickerPosition === 'suffix') ||\n (shouldShowScrollArrows && scrollArrowsPosition === 'suffix');\n\n // Apply the active-axis scrollbar handle vars to the outer wrapper so the\n // `Scrollbar` sub-element can read them via CSS variables.\n const handleStyle = showTinyScrollbar\n ? orientation === 'vertical'\n ? handleVStyle\n : handleHStyle\n : undefined;\n\n // Wrap with TabsProvider so prefix/suffix can access context (size, type, placement).\n // The inner TabsProvider in renderTabListContent will override for tab buttons.\n return (\n <TabsProvider value={baseContextValue}>\n <TabsElement\n ref={ref}\n qa={qa}\n mods={mods}\n styles={combinedStyles}\n style={handleStyle}\n data-size={size}\n >\n <div data-element=\"Bar\">\n {prefix || prefixHasActions ? (\n <div data-element=\"Prefix\">\n {tabPickerPosition === 'prefix' && tabPickerElement}\n {scrollArrowsPosition === 'prefix' && scrollArrowsElement}\n {prefix}\n </div>\n ) : null}\n <div data-element=\"ScrollWrapper\">\n <div ref={scrollRef} data-element=\"Scroll\">\n {isReorderable ? (\n <DraggableTabList\n state={state}\n listRef={listRef}\n orderedKeys={orderedParsedTabs.map((t) => t.key)}\n orientation={orientation}\n onReorder={onReorder}\n >\n {(dragState, dropState, collectionProps) =>\n renderTabListContent(\n createContextValue(dragState, dropState),\n collectionProps,\n )\n }\n </DraggableTabList>\n ) : (\n renderTabListContent(createContextValue())\n )}\n </div>\n {showTinyScrollbar && hasOverflow && (\n <div data-element=\"Scrollbar\" />\n )}\n </div>\n {suffix || suffixHasActions ? (\n <div data-element=\"Suffix\">\n {scrollArrowsPosition === 'suffix' && scrollArrowsElement}\n {tabPickerPosition === 'suffix' && tabPickerElement}\n {suffix}\n </div>\n ) : null}\n </div>\n\n {/* Functional panel rendering with content caching */}\n {renderPanel && (\n <CachedPanelRenderer\n parsedTabs={parsedTabs}\n explicitPanels={explicitPanels}\n state={state}\n renderPanel={renderPanel}\n panelCacheKeys={panelCacheKeys}\n prerender={prerender}\n keepMounted={keepMounted}\n visitedKeys={visitedKeysRef.current}\n />\n )}\n\n {/* Static panel rendering (traditional children-based approach) */}\n {!renderPanel &&\n hasAnyContent &&\n parsedTabs.map((tab) => {\n const explicitPanel = explicitPanels.get(tab.key);\n const content = explicitPanel?.content ?? tab.content;\n\n if (content == null) return null;\n\n return (\n <TabPanelRenderer\n key={tab.key}\n tabKey={tab.key}\n state={state}\n content={content}\n prerender={prerender}\n keepMounted={keepMounted}\n tabPrerender={explicitPanel?.prerender ?? tab.prerender}\n tabKeepMounted={explicitPanel?.keepMounted ?? tab.keepMounted}\n visitedKeys={visitedKeysRef.current}\n panelStyles={explicitPanel?.styles}\n qa={explicitPanel?.qa}\n qaVal={explicitPanel?.qaVal}\n />\n );\n })}\n </TabsElement>\n </TabsProvider>\n );\n}\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nconst _Tabs = forwardRef(TabsComponent);\n\n/**\n * Tabs component for organizing content into multiple panels.\n * Built with React Aria for full accessibility support.\n *\n * **Note:** Tab keys are internally converted to strings for React Aria compatibility.\n *\n * @example\n * // Simple usage\n * <Tabs defaultActiveKey=\"tab1\">\n * <Tab key=\"tab1\" title=\"Tab 1\">Content 1</Tab>\n * <Tab key=\"tab2\" title=\"Tab 2\">Content 2</Tab>\n * </Tabs>\n *\n * @example\n * // Tabs-only (no panels)\n * <Tabs activeKey={activeTab} onChange={setActiveTab}>\n * <Tab key=\"overview\" title=\"Overview\" />\n * <Tab key=\"settings\" title=\"Settings\" />\n * </Tabs>\n *\n * @example\n * // Explicit panels\n * <Tabs defaultActiveKey=\"tab1\">\n * <Tabs.List>\n * <Tab key=\"tab1\" title=\"Tab 1\" />\n * <Tab key=\"tab2\" title=\"Tab 2\" />\n * </Tabs.List>\n * <Tabs.Panel key=\"tab1\">Content 1</Tabs.Panel>\n * <Tabs.Panel key=\"tab2\">Content 2</Tabs.Panel>\n * </Tabs>\n */\nexport const Tabs = Object.assign(_Tabs, {\n Tab,\n List: TabList,\n Panel: TabPanel,\n Action: TabsAction,\n});\n\nexport { Tab, TabList, TabPanel, TabsAction };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.js","names":["CollectionItem","mergeProps"],"sources":["../../../../src/components/navigation/Tabs/Tabs.tsx"],"sourcesContent":["import { mergeStyles, OUTER_STYLES } from '@tenphi/tasty';\nimport {\n Children,\n ForwardedRef,\n forwardRef,\n isValidElement,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport { AriaTabListProps, useTabList } from 'react-aria';\nimport {\n Item as CollectionItem,\n DraggableCollectionState,\n DroppableCollectionState,\n useTabListState,\n} from 'react-stately';\n\nimport { useEvent, useWarn } from '../../../_internal/hooks';\nimport { DirectionIcon } from '../../../icons';\nimport { mergeProps, useMergeStyles } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { useTinyScrollbar } from '../../content/Layout/hooks/useTinyScrollbar';\n\nimport { DraggableTabList } from './DraggableTabList';\nimport { TabIndicatorElement, TabsElement } from './styled';\nimport { TabButton } from './TabButton';\nimport { CachedPanelRenderer, TabPanelRenderer } from './TabPanel';\nimport { TabPicker } from './TabPicker';\nimport { TabsAction } from './TabsAction';\nimport { TabsContextValue, TabsProvider } from './TabsContext';\nimport { useTabEditing } from './use-tab-editing';\nimport { useTabIndicator } from './use-tab-indicator';\n\nimport type { Key } from '@react-types/shared';\nimport type {\n CubeTabListProps,\n CubeTabPanelProps,\n CubeTabProps,\n CubeTabsProps,\n ParsedPanel,\n ParsedTab,\n} from './types';\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Generic helper to check if a child is a specific component by displayName.\n */\nfunction isComponentElement<T>(\n child: ReactNode,\n displayName: string,\n): child is ReactElement<T> {\n return (\n isValidElement(child) &&\n typeof child.type === 'function' &&\n (child.type as any).displayName === displayName\n );\n}\n\n/** Checks if a child is a Tab component. */\nconst isTabElement = (child: ReactNode): child is ReactElement<CubeTabProps> =>\n isComponentElement<CubeTabProps>(child, 'CubeTab');\n\n/** Checks if a child is a TabPanel component. */\nconst isTabPanelElement = (\n child: ReactNode,\n): child is ReactElement<CubeTabPanelProps> =>\n isComponentElement<CubeTabPanelProps>(child, 'CubeTabPanel');\n\n/** Checks if a child is a TabList component. */\nconst isTabListElement = (\n child: ReactNode,\n): child is ReactElement<CubeTabListProps> =>\n isComponentElement<CubeTabListProps>(child, 'CubeTabList');\n\n/**\n * Extracts the raw key from a React element, stripping the \".$\" prefix\n * that React adds via Children.map/toArray.\n */\nfunction getRawKey(element: ReactElement): string | null {\n if (element.key == null) return null;\n const keyStr = String(element.key);\n return keyStr.startsWith('.$') ? keyStr.slice(2) : keyStr;\n}\n\n// =============================================================================\n// Tab Component (configuration only - not rendered directly)\n// =============================================================================\n\nfunction Tab(_props: CubeTabProps): ReactElement | null {\n return null;\n}\n\nTab.displayName = 'CubeTab';\n\n// =============================================================================\n// TabPanel Component (configuration only - not rendered directly)\n// =============================================================================\n\nfunction TabPanel(_props: CubeTabPanelProps): ReactElement | null {\n return null;\n}\n\nTabPanel.displayName = 'CubeTabPanel';\n\n// =============================================================================\n// TabList Component (configuration only - not rendered directly)\n// =============================================================================\n\nfunction TabList(_props: CubeTabListProps): ReactElement | null {\n return null;\n}\n\nTabList.displayName = 'CubeTabList';\n\n// =============================================================================\n// Main Tabs Component\n// =============================================================================\n\nfunction TabsComponent(\n props: CubeTabsProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const {\n label = 'Tabs',\n defaultActiveKey,\n activeKey,\n size,\n type = 'default',\n onChange,\n onDelete,\n onTitleChange,\n autoHideActions,\n isEditable: parentIsEditable,\n menu: parentMenu,\n menuTriggerProps: parentMenuTriggerProps,\n menuProps: parentMenuProps,\n contextMenu: parentContextMenu,\n onAction: parentOnAction,\n children,\n prefix,\n suffix,\n prerender = false,\n keepMounted = false,\n qa = 'Tabs',\n renderPanel,\n panelCacheKeys,\n isReorderable = false,\n keyOrder,\n onReorder,\n showTabPicker = false,\n showScrollArrows = false,\n tabPickerPosition = 'suffix',\n scrollArrowsPosition = 'suffix',\n hideTabListScroll = false,\n tabListPadding,\n tabListStyles,\n prefixStyles,\n suffixStyles,\n ...otherProps\n } = props;\n\n // Extract outer styles\n const baseStyles = extractStyles(otherProps, OUTER_STYLES);\n\n // Build TabList padding style (memoized)\n const tabListPaddingStyles = useMemo(\n () =>\n tabListPadding ? { '$tablist-padding': `${tabListPadding}` } : undefined,\n [tabListPadding],\n );\n\n // Merge tabListPaddingStyles with tabListStyles (memoized)\n const mergedTabListStyles = useMemo(\n () => mergeStyles(tabListPaddingStyles, tabListStyles),\n [tabListPaddingStyles, tabListStyles],\n );\n\n // Merge all sub-element styles into baseStyles\n const combinedStyles = useMergeStyles(baseStyles, {\n TabList: mergedTabListStyles,\n Prefix: prefixStyles,\n Suffix: suffixStyles,\n });\n\n // DOM element refs\n const listRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Track visited tabs for keepMounted functionality\n const visitedKeysRef = useRef<Set<string>>(new Set());\n\n // =========================================================================\n // Tab Title Editing Hook\n // =========================================================================\n const onTitleChangeRaf = useEvent((key: string, newTitle: string) => {\n requestAnimationFrame(() => {\n onTitleChange?.(key, newTitle);\n });\n });\n\n const { editingKey, startEditing, cancelEditing, submitEditing } =\n useTabEditing({\n onChange,\n onTitleChange: onTitleChange ? onTitleChangeRaf : undefined,\n });\n\n // =========================================================================\n // Parse children to extract tabs and explicit panels\n // =========================================================================\n const { parsedTabs, explicitPanels, hasAnyContent } = useMemo(() => {\n const childArray = Children.toArray(children);\n const tabs: ParsedTab[] = [];\n const panels = new Map<string, ParsedPanel>();\n let hasExplicitList = false;\n let tabChildren: ReactNode[] = [];\n\n // Check for explicit Tabs.List / Tabs.Panel structure\n for (const child of childArray) {\n if (isTabListElement(child)) {\n hasExplicitList = true;\n tabChildren = Children.toArray(child.props.children);\n } else if (isTabPanelElement(child)) {\n const key = getRawKey(child as ReactElement);\n\n if (key != null) {\n panels.set(key, {\n key,\n content: child.props.children,\n prerender: child.props.prerender,\n keepMounted: child.props.keepMounted,\n styles: child.props.styles,\n qa: child.props.qa,\n qaVal: child.props.qaVal,\n });\n }\n }\n }\n\n // If no explicit list, use direct Tab children\n if (!hasExplicitList) {\n tabChildren = childArray;\n }\n\n // Parse Tab elements\n let hasContent = panels.size > 0;\n\n for (const child of tabChildren) {\n if (isTabElement(child)) {\n const key = getRawKey(child) ?? child.props.id;\n\n if (key != null) {\n const { id: _id, children: tabContent, ...tabProps } = child.props;\n\n tabs.push({\n ...tabProps,\n key,\n content: tabContent,\n });\n\n if (tabContent != null) {\n hasContent = true;\n }\n }\n }\n }\n\n return {\n parsedTabs: tabs,\n explicitPanels: panels,\n hasAnyContent: hasContent,\n };\n }, [children]);\n\n // Clean up visitedKeys when tabs are removed\n const currentTabKeysSet = useMemo(\n () => new Set(parsedTabs.map((t) => t.key)),\n [parsedTabs],\n );\n\n useEffect(() => {\n for (const key of visitedKeysRef.current) {\n if (!currentTabKeysSet.has(key)) {\n visitedKeysRef.current.delete(key);\n }\n }\n }, [currentTabKeysSet]);\n\n // =========================================================================\n // Order tabs according to keyOrder\n // =========================================================================\n const orderedParsedTabs = useMemo(() => {\n if (!keyOrder || keyOrder.length === 0) {\n return parsedTabs;\n }\n\n const tabMap = new Map<string, ParsedTab>();\n for (const tab of parsedTabs) {\n tabMap.set(tab.key, tab);\n }\n\n const ordered: ParsedTab[] = [];\n for (const key of keyOrder) {\n const tab = tabMap.get(String(key));\n if (tab) {\n ordered.push(tab);\n tabMap.delete(String(key));\n }\n }\n\n // Append any tabs not in keyOrder\n for (const tab of parsedTabs) {\n if (tabMap.has(tab.key)) {\n ordered.push(tab);\n }\n }\n\n return ordered;\n }, [parsedTabs, keyOrder]);\n\n // Create collection items for React Stately\n const collectionItems = useMemo(() => {\n return orderedParsedTabs.map((tab) => (\n <CollectionItem\n key={tab.key}\n textValue={typeof tab.title === 'string' ? tab.title : String(tab.key)}\n >\n {tab.title}\n </CollectionItem>\n ));\n }, [orderedParsedTabs]);\n\n // Determine disabled keys\n const disabledKeys = useMemo(() => {\n return new Set(\n parsedTabs.filter((tab) => tab.isDisabled).map((tab) => tab.key),\n );\n }, [parsedTabs]);\n\n // Handle selection change (converts React Aria's Key to string for our API)\n const handleSelectionChange = useEvent((key: Key) => {\n const keyStr = String(key);\n visitedKeysRef.current.add(keyStr);\n onChange?.(keyStr);\n });\n\n // Convert keys to strings for React Aria compatibility\n const selectedKey = activeKey != null ? String(activeKey) : undefined;\n const defaultSelectedKey =\n defaultActiveKey != null ? String(defaultActiveKey) : undefined;\n\n // Create aria props for useTabListState\n const ariaProps: AriaTabListProps<object> = useMemo(\n () => ({\n selectedKey,\n defaultSelectedKey,\n onSelectionChange: handleSelectionChange,\n disabledKeys,\n children: collectionItems,\n 'aria-label': label,\n }),\n [\n selectedKey,\n defaultSelectedKey,\n handleSelectionChange,\n disabledKeys,\n collectionItems,\n label,\n ],\n );\n\n // Create state using useTabListState\n const state = useTabListState(ariaProps);\n\n // Track initial selected key for visited tabs\n useEffect(() => {\n if (state.selectedKey != null) {\n visitedKeysRef.current.add(String(state.selectedKey));\n }\n }, [state.selectedKey]);\n\n // Get tablist props from react-aria\n const { tabListProps } = useTabList(ariaProps, state, listRef);\n\n // Handle selection from TabPicker (needs to update internal state in uncontrolled mode)\n const handleTabPickerSelect = useEvent((key: string) => {\n // Update internal state (for uncontrolled mode)\n state.setSelectedKey(key);\n // Also call the external onChange handler\n handleSelectionChange(key);\n });\n\n // =========================================================================\n // Tab Indicator (for default type)\n // =========================================================================\n // Create order token that changes when tab order changes (for indicator recalculation)\n const orderToken = useMemo(\n () => orderedParsedTabs.map((t) => t.key).join(','),\n [orderedParsedTabs],\n );\n\n const indicatorStyle = useTabIndicator(\n listRef,\n state.selectedKey,\n type === 'default' || type === 'narrow',\n orderToken,\n );\n\n // =========================================================================\n // Tiny Scrollbar (not for radio type)\n // =========================================================================\n const isTinyScrollbar = type !== 'radio';\n const { handleHStyle, hasOverflowX, isScrolling, isAtStartX, isAtEndX } =\n useTinyScrollbar(scrollRef, isTinyScrollbar);\n const showTinyScrollbar = isTinyScrollbar && !hideTabListScroll;\n\n const hasPanels = hasAnyContent || !!renderPanel;\n\n // =========================================================================\n // Tab Picker visibility\n // =========================================================================\n useWarn(showTabPicker && type === 'radio', {\n key: ['tabs-tabpicker-radio-unsupported'],\n args: [\n 'Tabs:',\n '`showTabPicker` is not supported when `type=\"radio\"`. The TabPicker will not be rendered.',\n ],\n });\n\n const shouldShowTabPicker =\n type !== 'radio' &&\n (showTabPicker === true || (showTabPicker === 'auto' && hasOverflowX));\n\n // =========================================================================\n // Scroll Arrows visibility and handlers\n // =========================================================================\n useWarn(showScrollArrows && type === 'radio', {\n key: ['tabs-scrollarrows-radio-unsupported'],\n args: [\n 'Tabs:',\n '`showScrollArrows` is not supported when `type=\"radio\"`. The scroll arrows will not be rendered.',\n ],\n });\n\n const shouldShowScrollArrows =\n type !== 'radio' &&\n (showScrollArrows === true ||\n (showScrollArrows === 'auto' && hasOverflowX));\n\n const handleScrollLeft = useEvent(() => {\n const el = scrollRef.current;\n if (el) {\n el.scrollTo({\n left: el.scrollLeft - el.clientWidth,\n behavior: 'smooth',\n });\n }\n });\n\n const handleScrollRight = useEvent(() => {\n const el = scrollRef.current;\n if (el) {\n el.scrollTo({\n left: el.scrollLeft + el.clientWidth,\n behavior: 'smooth',\n });\n }\n });\n\n // =========================================================================\n // Base Context Value (without drag/drop states)\n // =========================================================================\n const baseContextValue = useMemo(\n () => ({\n state,\n type,\n size,\n autoHideActions,\n isEditable: parentIsEditable,\n menu: parentMenu,\n menuTriggerProps: parentMenuTriggerProps,\n menuProps: parentMenuProps,\n contextMenu: parentContextMenu,\n onDelete,\n onAction: parentOnAction,\n editingKey,\n startEditing,\n submitEditing,\n cancelEditing,\n }),\n [\n state,\n type,\n size,\n autoHideActions,\n parentIsEditable,\n parentMenu,\n parentMenuTriggerProps,\n parentMenuProps,\n parentContextMenu,\n onDelete,\n parentOnAction,\n editingKey,\n startEditing,\n submitEditing,\n cancelEditing,\n ],\n );\n\n // Helper to create full context value with optional drag/drop states\n const createContextValue = (\n dragState?: DraggableCollectionState,\n dropState?: DroppableCollectionState,\n ): TabsContextValue => ({\n ...baseContextValue,\n dragState,\n dropState,\n });\n\n // =========================================================================\n // Tab List Content Renderer\n // =========================================================================\n const renderTabListContent = (\n contextValue: TabsContextValue,\n collectionProps: Record<string, unknown> = {},\n ) => (\n <div\n {...mergeProps(tabListProps, collectionProps)}\n ref={listRef}\n data-element=\"TabList\"\n >\n <TabsProvider value={contextValue}>\n {orderedParsedTabs.map((tab, index) => {\n const item = state.collection.getItem(tab.key);\n if (!item) return null;\n\n return (\n <TabButton\n key={item.key}\n item={item}\n tabData={tab}\n isLastTab={index === orderedParsedTabs.length - 1}\n />\n );\n })}\n </TabsProvider>\n {indicatorStyle && (\n <TabIndicatorElement\n style={{\n left: indicatorStyle.left,\n width: indicatorStyle.width,\n }}\n />\n )}\n </div>\n );\n\n // =========================================================================\n // Mods for styling\n // =========================================================================\n const mods = useMemo(\n () => ({\n type,\n size,\n deletable: !!onDelete,\n scrolling: showTinyScrollbar && isScrolling,\n 'fade-left': !isAtStartX,\n 'fade-right': !isAtEndX,\n 'has-panels': hasPanels,\n }),\n [\n type,\n size,\n onDelete,\n showTinyScrollbar,\n isScrolling,\n isAtStartX,\n isAtEndX,\n hasPanels,\n ],\n );\n\n // =========================================================================\n // Action Elements (TabPicker and Scroll Arrows)\n // =========================================================================\n const scrollArrowsElement = shouldShowScrollArrows ? (\n <>\n <TabsAction\n icon={<DirectionIcon to=\"left\" />}\n aria-label=\"Scroll tabs left\"\n isDisabled={isAtStartX}\n onPress={handleScrollLeft}\n />\n <TabsAction\n icon={<DirectionIcon to=\"right\" />}\n aria-label=\"Scroll tabs right\"\n isDisabled={isAtEndX}\n onPress={handleScrollRight}\n />\n </>\n ) : null;\n\n const tabPickerElement = shouldShowTabPicker ? (\n <TabPicker\n tabs={orderedParsedTabs}\n selectedKey={state.selectedKey}\n size={size}\n type={type}\n isReorderable={isReorderable}\n onSelect={handleTabPickerSelect}\n onDelete={onDelete}\n onReorder={onReorder}\n />\n ) : null;\n\n // Determine which actions go in prefix/suffix\n // In prefix: TabPicker first (left), then scroll arrows (right)\n // In suffix: scroll arrows first (left), then TabPicker (right)\n const prefixHasActions =\n (shouldShowTabPicker && tabPickerPosition === 'prefix') ||\n (shouldShowScrollArrows && scrollArrowsPosition === 'prefix');\n\n const suffixHasActions =\n (shouldShowTabPicker && tabPickerPosition === 'suffix') ||\n (shouldShowScrollArrows && scrollArrowsPosition === 'suffix');\n\n // Wrap with TabsProvider so prefix/suffix can access context (size, type)\n // The inner TabsProvider in renderTabListContent will override for tab buttons\n return (\n <TabsProvider value={baseContextValue}>\n <TabsElement\n ref={ref}\n qa={qa}\n mods={mods}\n styles={combinedStyles}\n style={showTinyScrollbar ? handleHStyle : undefined}\n data-size={size}\n >\n {prefix || prefixHasActions ? (\n <div data-element=\"Prefix\">\n {tabPickerPosition === 'prefix' && tabPickerElement}\n {scrollArrowsPosition === 'prefix' && scrollArrowsElement}\n {prefix}\n </div>\n ) : null}\n <div data-element=\"ScrollWrapper\">\n <div ref={scrollRef} data-element=\"Scroll\">\n {isReorderable ? (\n <DraggableTabList\n state={state}\n listRef={listRef}\n orderedKeys={orderedParsedTabs.map((t) => t.key)}\n onReorder={onReorder}\n >\n {(dragState, dropState, collectionProps) =>\n renderTabListContent(\n createContextValue(dragState, dropState),\n collectionProps,\n )\n }\n </DraggableTabList>\n ) : (\n renderTabListContent(createContextValue())\n )}\n </div>\n {showTinyScrollbar && hasOverflowX && (\n <div data-element=\"ScrollbarH\" />\n )}\n </div>\n {suffix || suffixHasActions ? (\n <div data-element=\"Suffix\">\n {scrollArrowsPosition === 'suffix' && scrollArrowsElement}\n {tabPickerPosition === 'suffix' && tabPickerElement}\n {suffix}\n </div>\n ) : null}\n </TabsElement>\n\n {/* Functional panel rendering with content caching */}\n {renderPanel && (\n <CachedPanelRenderer\n parsedTabs={parsedTabs}\n explicitPanels={explicitPanels}\n state={state}\n renderPanel={renderPanel}\n panelCacheKeys={panelCacheKeys}\n prerender={prerender}\n keepMounted={keepMounted}\n visitedKeys={visitedKeysRef.current}\n />\n )}\n\n {/* Static panel rendering (traditional children-based approach) */}\n {!renderPanel &&\n hasAnyContent &&\n parsedTabs.map((tab) => {\n const explicitPanel = explicitPanels.get(tab.key);\n const content = explicitPanel?.content ?? tab.content;\n\n if (content == null) return null;\n\n return (\n <TabPanelRenderer\n key={tab.key}\n tabKey={tab.key}\n state={state}\n content={content}\n prerender={prerender}\n keepMounted={keepMounted}\n tabPrerender={explicitPanel?.prerender ?? tab.prerender}\n tabKeepMounted={explicitPanel?.keepMounted ?? tab.keepMounted}\n visitedKeys={visitedKeysRef.current}\n panelStyles={explicitPanel?.styles}\n qa={explicitPanel?.qa}\n qaVal={explicitPanel?.qaVal}\n />\n );\n })}\n </TabsProvider>\n );\n}\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nconst _Tabs = forwardRef(TabsComponent);\n\n/**\n * Tabs component for organizing content into multiple panels.\n * Built with React Aria for full accessibility support.\n *\n * **Note:** Tab keys are internally converted to strings for React Aria compatibility.\n *\n * @example\n * // Simple usage\n * <Tabs defaultActiveKey=\"tab1\">\n * <Tab key=\"tab1\" title=\"Tab 1\">Content 1</Tab>\n * <Tab key=\"tab2\" title=\"Tab 2\">Content 2</Tab>\n * </Tabs>\n *\n * @example\n * // Tabs-only (no panels)\n * <Tabs activeKey={activeTab} onChange={setActiveTab}>\n * <Tab key=\"overview\" title=\"Overview\" />\n * <Tab key=\"settings\" title=\"Settings\" />\n * </Tabs>\n *\n * @example\n * // Explicit panels\n * <Tabs defaultActiveKey=\"tab1\">\n * <Tabs.List>\n * <Tab key=\"tab1\" title=\"Tab 1\" />\n * <Tab key=\"tab2\" title=\"Tab 2\" />\n * </Tabs.List>\n * <Tabs.Panel key=\"tab1\">Content 1</Tabs.Panel>\n * <Tabs.Panel key=\"tab2\">Content 2</Tabs.Panel>\n * </Tabs>\n */\nexport const Tabs = Object.assign(_Tabs, {\n Tab,\n List: TabList,\n Panel: TabPanel,\n Action: TabsAction,\n});\n\nexport { Tab, TabList, TabPanel, TabsAction };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-1cb94e6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-82d6956 | Cube Dev Team */
2
2
  import { _ItemButton } from "../../actions/ItemButton/ItemButton.js";
3
3
  import { useOptionalTabsContext } from "./TabsContext.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -9,8 +9,7 @@ import { jsx } from "react/jsx-runtime";
9
9
  const TabsActionElement = tasty(_ItemButton, { styles: {
10
10
  border: {
11
11
  "type=clear": 0,
12
- "type=clear & tabs-type-file & !:first-child & !tabs-vertical": "left",
13
- "type=clear & tabs-type-file & !:first-child & tabs-vertical": "top"
12
+ "type=clear & tabs-type-file & !:first-child": "left"
14
13
  },
15
14
  radius: { "type=clear": 0 }
16
15
  } });
@@ -47,17 +46,10 @@ const TabsAction = forwardRef(function TabsAction(props, ref) {
47
46
  const tabsContext = useOptionalTabsContext();
48
47
  const effectiveSize = size ?? tabsContext?.size ?? "medium";
49
48
  const tabsType = tabsContext?.type ?? "default";
50
- const tabsPlacement = tabsContext?.placement ?? "top";
51
- const tabsVertical = tabsPlacement === "left" || tabsPlacement === "right";
52
49
  const combinedMods = useMemo(() => ({
53
50
  "tabs-type-file": tabsType === "file",
54
- "tabs-vertical": tabsVertical,
55
51
  ...mods
56
- }), [
57
- tabsType,
58
- tabsVertical,
59
- mods
60
- ]);
52
+ }), [tabsType, mods]);
61
53
  return /* @__PURE__ */ jsx(TabsActionElement, {
62
54
  ref,
63
55
  type: type ?? (tabsType === "default" ? "outline" : "clear"),
@@ -1 +1 @@
1
- {"version":3,"file":"TabsAction.js","names":["ItemButton"],"sources":["../../../../src/components/navigation/Tabs/TabsAction.tsx"],"sourcesContent":["import { FocusableRef } from '@react-types/shared';\nimport { tasty } from '@tenphi/tasty';\nimport { forwardRef, useMemo } from 'react';\n\nimport {\n CubeItemButtonProps,\n ItemButton,\n} from '../../actions/ItemButton/ItemButton';\n\nimport { useOptionalTabsContext } from './TabsContext';\n\nimport type { TabSize } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface CubeTabsActionProps\n extends Omit<CubeItemButtonProps, 'size' | 'shape'> {\n /**\n * Size of the action button.\n * When used inside Tabs prefix/suffix, inherits from Tabs size by default.\n */\n size?: TabSize;\n}\n\n// =============================================================================\n// Styled Component\n// =============================================================================\n\nconst TabsActionElement = tasty(ItemButton, {\n styles: {\n border: {\n 'type=clear': 0,\n 'type=clear & tabs-type-file & !:first-child & !tabs-vertical': 'left',\n 'type=clear & tabs-type-file & !:first-child & tabs-vertical': 'top',\n },\n radius: {\n 'type=clear': 0,\n },\n },\n});\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Action button designed for the Tabs prefix/suffix slots.\n *\n * Styled with sharp edges and no border to match the TabPicker trigger.\n * When multiple TabsAction components are placed together, they automatically\n * display dividers between them using CSS :not(:first-child) border styling\n * (only for file tab type).\n *\n * Inherits size from the parent Tabs component when used inside prefix/suffix slots.\n *\n * @example\n * <Tabs suffix={<Tabs.Action icon={<PlusIcon />} onPress={handleAdd} />}>\n * <Tab key=\"tab1\" title=\"Tab 1\">Content</Tab>\n * </Tabs>\n *\n * @example\n * // Multiple actions with automatic dividers\n * <Tabs\n * suffix={\n * <>\n * <Tabs.Action icon={<PlusIcon />} onPress={handleAdd} />\n * <Tabs.Action icon={<SettingsIcon />} onPress={handleSettings} />\n * </>\n * }\n * >\n * <Tab key=\"tab1\" title=\"Tab 1\">Content</Tab>\n * </Tabs>\n */\nexport const TabsAction = forwardRef(function TabsAction(\n props: CubeTabsActionProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const { size, mods, type, ...rest } = props;\n\n // Get size, type, and placement from context if available (when used inside Tabs)\n const tabsContext = useOptionalTabsContext();\n const effectiveSize = size ?? tabsContext?.size ?? 'medium';\n const tabsType = tabsContext?.type ?? 'default';\n const tabsPlacement = tabsContext?.placement ?? 'top';\n const tabsVertical = tabsPlacement === 'left' || tabsPlacement === 'right';\n\n const combinedMods = useMemo(\n () => ({\n 'tabs-type-file': tabsType === 'file',\n 'tabs-vertical': tabsVertical,\n ...mods,\n }),\n [tabsType, tabsVertical, mods],\n );\n\n return (\n <TabsActionElement\n ref={ref}\n type={type ?? (tabsType === 'default' ? 'outline' : 'clear')}\n size={effectiveSize}\n mods={combinedMods}\n {...rest}\n />\n );\n});\n"],"mappings":";;;;;;;;AA8BA,MAAM,oBAAoB,MAAMA,aAAY,EAC1C,QAAQ;CACN,QAAQ;EACN,cAAc;EACd,gEAAgE;EAChE,+DAA+D;EAChE;CACD,QAAQ,EACN,cAAc,GACf;CACF,EACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCF,MAAa,aAAa,WAAW,SAAS,WAC5C,OACA,KACA;CACA,MAAM,EAAE,MAAM,MAAM,MAAM,GAAG,SAAS;CAGtC,MAAM,cAAc,wBAAwB;CAC5C,MAAM,gBAAgB,QAAQ,aAAa,QAAQ;CACnD,MAAM,WAAW,aAAa,QAAQ;CACtC,MAAM,gBAAgB,aAAa,aAAa;CAChD,MAAM,eAAe,kBAAkB,UAAU,kBAAkB;CAEnE,MAAM,eAAe,eACZ;EACL,kBAAkB,aAAa;EAC/B,iBAAiB;EACjB,GAAG;EACJ,GACD;EAAC;EAAU;EAAc;EAAK,CAC/B;AAED,QACE,oBAAC;EACM;EACL,MAAM,SAAS,aAAa,YAAY,YAAY;EACpD,MAAM;EACN,MAAM;EACN,GAAI;GACJ;EAEJ"}
1
+ {"version":3,"file":"TabsAction.js","names":["ItemButton"],"sources":["../../../../src/components/navigation/Tabs/TabsAction.tsx"],"sourcesContent":["import { FocusableRef } from '@react-types/shared';\nimport { tasty } from '@tenphi/tasty';\nimport { forwardRef, useMemo } from 'react';\n\nimport {\n CubeItemButtonProps,\n ItemButton,\n} from '../../actions/ItemButton/ItemButton';\n\nimport { useOptionalTabsContext } from './TabsContext';\n\nimport type { TabSize } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface CubeTabsActionProps\n extends Omit<CubeItemButtonProps, 'size' | 'shape'> {\n /**\n * Size of the action button.\n * When used inside Tabs prefix/suffix, inherits from Tabs size by default.\n */\n size?: TabSize;\n}\n\n// =============================================================================\n// Styled Component\n// =============================================================================\n\nconst TabsActionElement = tasty(ItemButton, {\n styles: {\n border: {\n 'type=clear': 0,\n 'type=clear & tabs-type-file & !:first-child': 'left',\n },\n radius: {\n 'type=clear': 0,\n },\n },\n});\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Action button designed for the Tabs prefix/suffix slots.\n *\n * Styled with sharp edges and no border to match the TabPicker trigger.\n * When multiple TabsAction components are placed together, they automatically\n * display dividers between them using CSS :not(:first-child) border styling\n * (only for file tab type).\n *\n * Inherits size from the parent Tabs component when used inside prefix/suffix slots.\n *\n * @example\n * <Tabs suffix={<Tabs.Action icon={<PlusIcon />} onPress={handleAdd} />}>\n * <Tab key=\"tab1\" title=\"Tab 1\">Content</Tab>\n * </Tabs>\n *\n * @example\n * // Multiple actions with automatic dividers\n * <Tabs\n * suffix={\n * <>\n * <Tabs.Action icon={<PlusIcon />} onPress={handleAdd} />\n * <Tabs.Action icon={<SettingsIcon />} onPress={handleSettings} />\n * </>\n * }\n * >\n * <Tab key=\"tab1\" title=\"Tab 1\">Content</Tab>\n * </Tabs>\n */\nexport const TabsAction = forwardRef(function TabsAction(\n props: CubeTabsActionProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const { size, mods, type, ...rest } = props;\n\n // Get size and type from context if available (when used inside Tabs)\n const tabsContext = useOptionalTabsContext();\n const effectiveSize = size ?? tabsContext?.size ?? 'medium';\n const tabsType = tabsContext?.type ?? 'default';\n\n const combinedMods = useMemo(\n () => ({\n 'tabs-type-file': tabsType === 'file',\n ...mods,\n }),\n [tabsType, mods],\n );\n\n return (\n <TabsActionElement\n ref={ref}\n type={type ?? (tabsType === 'default' ? 'outline' : 'clear')}\n size={effectiveSize}\n mods={combinedMods}\n {...rest}\n />\n );\n});\n"],"mappings":";;;;;;;;AA8BA,MAAM,oBAAoB,MAAMA,aAAY,EAC1C,QAAQ;CACN,QAAQ;EACN,cAAc;EACd,+CAA+C;EAChD;CACD,QAAQ,EACN,cAAc,GACf;CACF,EACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCF,MAAa,aAAa,WAAW,SAAS,WAC5C,OACA,KACA;CACA,MAAM,EAAE,MAAM,MAAM,MAAM,GAAG,SAAS;CAGtC,MAAM,cAAc,wBAAwB;CAC5C,MAAM,gBAAgB,QAAQ,aAAa,QAAQ;CACnD,MAAM,WAAW,aAAa,QAAQ;CAEtC,MAAM,eAAe,eACZ;EACL,kBAAkB,aAAa;EAC/B,GAAG;EACJ,GACD,CAAC,UAAU,KAAK,CACjB;AAED,QACE,oBAAC;EACM;EACL,MAAM,SAAS,aAAa,YAAY,YAAY;EACpD,MAAM;EACN,MAAM;EACN,GAAI;GACJ;EAEJ"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-1cb94e6 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-82d6956 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"TabsContext.js","names":[],"sources":["../../../../src/components/navigation/Tabs/TabsContext.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext } from 'react';\n\nimport type {\n DraggableCollectionState,\n DroppableCollectionState,\n TabListState,\n} from 'react-stately';\nimport type { CubeItemActionProps } from '../../actions/ItemAction';\nimport type { CubeMenuProps } from '../../actions/Menu';\nimport type { TabContextMenu, TabPlacement, TabSize, TabType } from './types';\n\n// =============================================================================\n// Context Value Interface\n// =============================================================================\n\nexport interface TabsContextValue {\n /** Tab list state from React Stately */\n state: TabListState<object>;\n /** Parent-level type default */\n type: TabType;\n /** Parent-level size default */\n size?: TabSize;\n /** Where the tab bar sits relative to its panels */\n placement: TabPlacement;\n /** Parent-level autoHideActions default */\n autoHideActions?: boolean;\n /** Parent-level isEditable default */\n isEditable?: boolean;\n /** Parent-level menu default */\n menu?: ReactNode;\n /** Parent-level menuTriggerProps default */\n menuTriggerProps?: Partial<CubeItemActionProps>;\n /** Parent-level menuProps default */\n menuProps?: Partial<CubeMenuProps<object>>;\n /** Parent-level contextMenu default */\n contextMenu?: TabContextMenu;\n /** Callback when tab is deleted */\n onDelete?: (key: string) => void;\n /** Parent-level onAction callback */\n onAction?: (action: string, tabKey: string) => void;\n /** Drag state for reorderable tabs (undefined if not reorderable) */\n dragState?: DraggableCollectionState;\n /** Drop state for reorderable tabs (undefined if not reorderable) */\n dropState?: DroppableCollectionState;\n\n // Editing callbacks\n /** Current tab being edited (null if none) */\n editingKey: string | null;\n /** Start editing a tab */\n startEditing: (key: string, currentTitle: string) => void;\n /** Submit the current edit */\n submitEditing: (\n key: string,\n newTitle: string,\n tabOnTitleChange?: (title: string) => void,\n ) => void;\n /** Cancel the current edit */\n cancelEditing: () => void;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nTabsContext.displayName = 'TabsContext';\n\n// =============================================================================\n// Provider\n// =============================================================================\n\nexport interface TabsProviderProps {\n value: TabsContextValue;\n children: ReactNode;\n}\n\nexport function TabsProvider({ value, children }: TabsProviderProps) {\n return <TabsContext.Provider value={value}>{children}</TabsContext.Provider>;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext);\n\n if (!context) {\n throw new Error('useTabsContext must be used within a TabsProvider');\n }\n\n return context;\n}\n\n/**\n * Optional hook to get TabsContext value.\n * Returns null when used outside a TabsProvider (e.g., for TabsAction in standalone usage).\n */\nexport function useOptionalTabsContext(): TabsContextValue | null {\n return useContext(TabsContext);\n}\n"],"mappings":";;;;;AAgEA,MAAM,cAAc,cAAuC,KAAK;AAEhE,YAAY,cAAc;AAW1B,SAAgB,aAAa,EAAE,OAAO,YAA+B;AACnE,QAAO,oBAAC,YAAY;EAAgB;EAAQ;GAAgC;;AAO9E,SAAgB,iBAAmC;CACjD,MAAM,UAAU,WAAW,YAAY;AAEvC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,oDAAoD;AAGtE,QAAO;;;;;;AAOT,SAAgB,yBAAkD;AAChE,QAAO,WAAW,YAAY"}
1
+ {"version":3,"file":"TabsContext.js","names":[],"sources":["../../../../src/components/navigation/Tabs/TabsContext.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext } from 'react';\n\nimport type {\n DraggableCollectionState,\n DroppableCollectionState,\n TabListState,\n} from 'react-stately';\nimport type { CubeItemActionProps } from '../../actions/ItemAction';\nimport type { CubeMenuProps } from '../../actions/Menu';\nimport type { TabContextMenu, TabSize, TabType } from './types';\n\n// =============================================================================\n// Context Value Interface\n// =============================================================================\n\nexport interface TabsContextValue {\n /** Tab list state from React Stately */\n state: TabListState<object>;\n /** Parent-level type default */\n type: TabType;\n /** Parent-level size default */\n size?: TabSize;\n /** Parent-level autoHideActions default */\n autoHideActions?: boolean;\n /** Parent-level isEditable default */\n isEditable?: boolean;\n /** Parent-level menu default */\n menu?: ReactNode;\n /** Parent-level menuTriggerProps default */\n menuTriggerProps?: Partial<CubeItemActionProps>;\n /** Parent-level menuProps default */\n menuProps?: Partial<CubeMenuProps<object>>;\n /** Parent-level contextMenu default */\n contextMenu?: TabContextMenu;\n /** Callback when tab is deleted */\n onDelete?: (key: string) => void;\n /** Parent-level onAction callback */\n onAction?: (action: string, tabKey: string) => void;\n /** Drag state for reorderable tabs (undefined if not reorderable) */\n dragState?: DraggableCollectionState;\n /** Drop state for reorderable tabs (undefined if not reorderable) */\n dropState?: DroppableCollectionState;\n\n // Editing callbacks\n /** Current tab being edited (null if none) */\n editingKey: string | null;\n /** Start editing a tab */\n startEditing: (key: string, currentTitle: string) => void;\n /** Submit the current edit */\n submitEditing: (\n key: string,\n newTitle: string,\n tabOnTitleChange?: (title: string) => void,\n ) => void;\n /** Cancel the current edit */\n cancelEditing: () => void;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nTabsContext.displayName = 'TabsContext';\n\n// =============================================================================\n// Provider\n// =============================================================================\n\nexport interface TabsProviderProps {\n value: TabsContextValue;\n children: ReactNode;\n}\n\nexport function TabsProvider({ value, children }: TabsProviderProps) {\n return <TabsContext.Provider value={value}>{children}</TabsContext.Provider>;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext);\n\n if (!context) {\n throw new Error('useTabsContext must be used within a TabsProvider');\n }\n\n return context;\n}\n\n/**\n * Optional hook to get TabsContext value.\n * Returns null when used outside a TabsProvider (e.g., for TabsAction in standalone usage).\n */\nexport function useOptionalTabsContext(): TabsContextValue | null {\n return useContext(TabsContext);\n}\n"],"mappings":";;;;;AA8DA,MAAM,cAAc,cAAuC,KAAK;AAEhE,YAAY,cAAc;AAW1B,SAAgB,aAAa,EAAE,OAAO,YAA+B;AACnE,QAAO,oBAAC,YAAY;EAAgB;EAAQ;GAAgC;;AAO9E,SAAgB,iBAAmC;CACjD,MAAM,UAAU,WAAW,YAAY;AAEvC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,oDAAoD;AAGtE,QAAO;;;;;;AAOT,SAAgB,yBAAkD;AAChE,QAAO,WAAW,YAAY"}