@cube-dev/ui-kit 0.137.1 → 0.138.1

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 (470) hide show
  1. package/dist/CHANGELOG.md +25 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +54 -43
  14. package/dist/components/GlobalStyles.js.map +1 -1
  15. package/dist/components/GridProvider.js +1 -1
  16. package/dist/components/HiddenInput.js +1 -1
  17. package/dist/components/Root.js +9 -4
  18. package/dist/components/Root.js.map +1 -1
  19. package/dist/components/actions/Action/Action.js +1 -1
  20. package/dist/components/actions/Banner/Banner.js +1 -1
  21. package/dist/components/actions/Button/Button.js +1 -1
  22. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  23. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  24. package/dist/components/actions/ButtonSplit/context.js +1 -1
  25. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  26. package/dist/components/actions/CommandMenu/styled.js +3 -3
  27. package/dist/components/actions/CommandMenu/styled.js.map +1 -1
  28. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  29. package/dist/components/actions/ItemActionContext.js +1 -1
  30. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  31. package/dist/components/actions/Link/Link.js +1 -1
  32. package/dist/components/actions/Menu/Menu.js +1 -1
  33. package/dist/components/actions/Menu/MenuItem.js +1 -1
  34. package/dist/components/actions/Menu/MenuSection.js +1 -1
  35. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  37. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  38. package/dist/components/actions/Menu/context.js +1 -1
  39. package/dist/components/actions/Menu/styled.js +5 -5
  40. package/dist/components/actions/Menu/styled.js.map +1 -1
  41. package/dist/components/actions/index.js +1 -1
  42. package/dist/components/actions/use-action.js +1 -1
  43. package/dist/components/actions/use-anchored-menu.js +1 -1
  44. package/dist/components/actions/use-context-menu.js +1 -1
  45. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  46. package/dist/components/content/Alert/Alert.js +1 -1
  47. package/dist/components/content/Alert/use-alert.js +1 -1
  48. package/dist/components/content/Avatar/Avatar.js +1 -1
  49. package/dist/components/content/Badge/Badge.js +1 -1
  50. package/dist/components/content/Card/Card.js +2 -2
  51. package/dist/components/content/Card/Card.js.map +1 -1
  52. package/dist/components/content/Content.js +1 -1
  53. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  54. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  55. package/dist/components/content/Disclosure/Disclosure.js +2 -2
  56. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  57. package/dist/components/content/Divider.js +1 -1
  58. package/dist/components/content/Footer.js +1 -1
  59. package/dist/components/content/Header.js +1 -1
  60. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  61. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  62. package/dist/components/content/Item/Item.js +2 -2
  63. package/dist/components/content/Item/Item.js.map +1 -1
  64. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  65. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  66. package/dist/components/content/Layout/GridLayout.js +1 -1
  67. package/dist/components/content/Layout/Layout.js +1 -1
  68. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  69. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  70. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  71. package/dist/components/content/Layout/LayoutContent.js +1 -1
  72. package/dist/components/content/Layout/LayoutContext.js +1 -1
  73. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  74. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  75. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  76. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutPane.js +2 -2
  78. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  79. package/dist/components/content/Layout/LayoutPanel.js +3 -3
  80. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  81. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  82. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  83. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  84. package/dist/components/content/Layout/index.js +1 -1
  85. package/dist/components/content/Layout/utils.js +1 -1
  86. package/dist/components/content/Paragraph.js +1 -1
  87. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  88. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  89. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  90. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  91. package/dist/components/content/Result/Result.js +1 -1
  92. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  93. package/dist/components/content/Tag/Tag.js +1 -1
  94. package/dist/components/content/Text.js +1 -1
  95. package/dist/components/content/TextItem/TextItem.js +1 -1
  96. package/dist/components/content/Title.js +1 -1
  97. package/dist/components/content/Tree/Tree.js +1 -1
  98. package/dist/components/content/Tree/TreeNode.js +1 -1
  99. package/dist/components/content/Tree/styled.js +1 -1
  100. package/dist/components/content/Tree/tree-index.js +1 -1
  101. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  102. package/dist/components/content/Tree/use-load-data.js +1 -1
  103. package/dist/components/content/highlightText.js +1 -1
  104. package/dist/components/content/use-auto-tooltip.js +1 -1
  105. package/dist/components/fields/Checkbox/Checkbox.js +5 -5
  106. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  107. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  108. package/dist/components/fields/Checkbox/context.js +1 -1
  109. package/dist/components/fields/ComboBox/ComboBox.js +2 -2
  110. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  111. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  112. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  113. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  114. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  115. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  116. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  117. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  118. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  119. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  120. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  121. package/dist/components/fields/DatePicker/intl.js +1 -1
  122. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  123. package/dist/components/fields/DatePicker/props.js +1 -1
  124. package/dist/components/fields/DatePicker/utils.js +1 -1
  125. package/dist/components/fields/FileInput/FileInput.js +3 -3
  126. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  127. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  128. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  129. package/dist/components/fields/Input/Input.js +1 -1
  130. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  131. package/dist/components/fields/ListBox/ListBox.js +6 -6
  132. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  133. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  134. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  135. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  136. package/dist/components/fields/Picker/Picker.js +1 -1
  137. package/dist/components/fields/RadioGroup/Radio.js +4 -4
  138. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  139. package/dist/components/fields/RadioGroup/RadioGroup.js +2 -2
  140. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  141. package/dist/components/fields/RadioGroup/context.js +1 -1
  142. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  143. package/dist/components/fields/Select/Select.js +5 -5
  144. package/dist/components/fields/Select/Select.js.map +1 -1
  145. package/dist/components/fields/Slider/Gradation.js +1 -1
  146. package/dist/components/fields/Slider/HueSlider.js +1 -1
  147. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  148. package/dist/components/fields/Slider/Slider.js +1 -1
  149. package/dist/components/fields/Slider/SliderBase.js +1 -1
  150. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  151. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  152. package/dist/components/fields/Slider/elements.js +3 -3
  153. package/dist/components/fields/Slider/elements.js.map +1 -1
  154. package/dist/components/fields/Slider/index.js +1 -1
  155. package/dist/components/fields/Switch/Switch.js +2 -2
  156. package/dist/components/fields/Switch/Switch.js.map +1 -1
  157. package/dist/components/fields/TextArea/TextArea.js +1 -1
  158. package/dist/components/fields/TextInput/TextInput.js +1 -1
  159. package/dist/components/fields/TextInput/TextInputBase.js +3 -3
  160. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  161. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  162. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  163. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  164. package/dist/components/form/Form/Field.js +1 -1
  165. package/dist/components/form/Form/Form.js +1 -1
  166. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  167. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  168. package/dist/components/form/Form/SubmitError.js +1 -1
  169. package/dist/components/form/Form/index.js +1 -1
  170. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  171. package/dist/components/form/Form/use-field/use-field.js +1 -1
  172. package/dist/components/form/Form/use-form.js +1 -1
  173. package/dist/components/form/Form/validation.js +1 -1
  174. package/dist/components/form/Label.js +1 -1
  175. package/dist/components/form/wrapper.js +1 -1
  176. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  177. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  178. package/dist/components/layout/Flex.js +1 -1
  179. package/dist/components/layout/Flow.js +1 -1
  180. package/dist/components/layout/Grid.js +1 -1
  181. package/dist/components/layout/Panel.js +1 -1
  182. package/dist/components/layout/Prefix.js +1 -1
  183. package/dist/components/layout/ResizablePanel.js +2 -2
  184. package/dist/components/layout/ResizablePanel.js.map +1 -1
  185. package/dist/components/layout/Space.js +1 -1
  186. package/dist/components/layout/Suffix.js +1 -1
  187. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  188. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  189. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  190. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  191. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  192. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  193. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  194. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  195. package/dist/components/navigation/Tabs/styled.js +3 -3
  196. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  197. package/dist/components/navigation/Tabs/types.js +1 -1
  198. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  199. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  200. package/dist/components/organisms/FileTabs/FileTabs.js +2 -2
  201. package/dist/components/organisms/FileTabs/FileTabs.js.map +1 -1
  202. package/dist/components/organisms/StatsCard/StatsCard.js +2 -2
  203. package/dist/components/organisms/StatsCard/StatsCard.js.map +1 -1
  204. package/dist/components/other/Calendar/Calendar.js +1 -1
  205. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  206. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  207. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  208. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  209. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  210. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  211. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  212. package/dist/components/overlays/Dialog/Dialog.js +2 -2
  213. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  214. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  215. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  216. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  217. package/dist/components/overlays/Dialog/context.js +1 -1
  218. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  219. package/dist/components/overlays/Modal/Modal.js +1 -1
  220. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  221. package/dist/components/overlays/Modal/Overlay.js +1 -1
  222. package/dist/components/overlays/Modal/Popover.js +1 -1
  223. package/dist/components/overlays/Modal/Tray.js +1 -1
  224. package/dist/components/overlays/Modal/Underlay.js +1 -1
  225. package/dist/components/overlays/Notifications/Notification.js +1 -1
  226. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  227. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  228. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  229. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  230. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  231. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  232. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  233. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  234. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  235. package/dist/components/overlays/Notifications/index.js +1 -1
  236. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  237. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  238. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  239. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  240. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  241. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  242. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  243. package/dist/components/overlays/Toast/index.js +1 -1
  244. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  245. package/dist/components/overlays/Toast/useToast.js +1 -1
  246. package/dist/components/overlays/Tooltip/Tooltip.js +7 -7
  247. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  248. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  249. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  250. package/dist/components/overlays/Tooltip/context.js +1 -1
  251. package/dist/components/portal/Portal.js +1 -1
  252. package/dist/components/portal/PortalProvider.js +1 -1
  253. package/dist/components/portal/usePortal.js +1 -1
  254. package/dist/components/shared/DraggableCollection.js +1 -1
  255. package/dist/components/shared/InvalidIcon.js +1 -1
  256. package/dist/components/shared/ValidIcon.js +1 -1
  257. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +23 -7
  258. package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
  259. package/dist/components/status/Spin/Cube.js +1 -1
  260. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  261. package/dist/components/status/Spin/Spin.js +1 -1
  262. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  263. package/dist/data/item-themes.js +114 -115
  264. package/dist/data/item-themes.js.map +1 -1
  265. package/dist/data/themes.d.ts +17 -17
  266. package/dist/data/themes.js +18 -18
  267. package/dist/data/themes.js.map +1 -1
  268. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  269. package/dist/icons/AdjustmentsIcon.js +1 -1
  270. package/dist/icons/AiIcon.js +1 -1
  271. package/dist/icons/AreaChartIcon.js +1 -1
  272. package/dist/icons/BackwardIcon.js +1 -1
  273. package/dist/icons/BarChartIcon.js +1 -1
  274. package/dist/icons/BellFilledIcon.js +1 -1
  275. package/dist/icons/BellIcon.js +1 -1
  276. package/dist/icons/BooleanIcon.js +1 -1
  277. package/dist/icons/CalendarEditIcon.js +1 -1
  278. package/dist/icons/CalendarIcon.js +1 -1
  279. package/dist/icons/CaretDownIcon.js +1 -1
  280. package/dist/icons/CaretUpIcon.js +1 -1
  281. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  282. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  283. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  284. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  285. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  286. package/dist/icons/ChartBarLineIcon.js +1 -1
  287. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  288. package/dist/icons/ChartBarStackedIcon.js +1 -1
  289. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  290. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  291. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  292. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  293. package/dist/icons/ChartBubbleIcon.js +1 -1
  294. package/dist/icons/ChartDonut2Icon.js +1 -1
  295. package/dist/icons/ChartFunnelIcon.js +1 -1
  296. package/dist/icons/ChartHeatmapIcon.js +1 -1
  297. package/dist/icons/ChartKPIIcon.js +1 -1
  298. package/dist/icons/ChartPie2Icon.js +1 -1
  299. package/dist/icons/ChartScatterIcon.js +1 -1
  300. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  301. package/dist/icons/CheckCircleIcon.js +1 -1
  302. package/dist/icons/CheckIcon.js +1 -1
  303. package/dist/icons/CircleFilledIcon.js +1 -1
  304. package/dist/icons/ClearIcon.js +1 -1
  305. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  306. package/dist/icons/CloseCircleIcon.js +1 -1
  307. package/dist/icons/CloseIcon.js +1 -1
  308. package/dist/icons/CodeIcon.js +1 -1
  309. package/dist/icons/ColumnTotalIcon.js +1 -1
  310. package/dist/icons/CopyIcon.js +1 -1
  311. package/dist/icons/CountIcon.js +1 -1
  312. package/dist/icons/CubeIcon.js +1 -1
  313. package/dist/icons/CubePauseIcon.js +1 -1
  314. package/dist/icons/CubePlayIcon.js +1 -1
  315. package/dist/icons/CurrencyDollarIcon.js +1 -1
  316. package/dist/icons/DangerIcon.js +1 -1
  317. package/dist/icons/DashboardIcon.js +1 -1
  318. package/dist/icons/DatabaseIcon.js +1 -1
  319. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  320. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  321. package/dist/icons/DirectionIcon.js +1 -1
  322. package/dist/icons/DonutIcon.js +1 -1
  323. package/dist/icons/DownIcon.js +1 -1
  324. package/dist/icons/EditIcon.js +1 -1
  325. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  326. package/dist/icons/ExclamationCircleIcon.js +1 -1
  327. package/dist/icons/ExclamationIcon.js +1 -1
  328. package/dist/icons/EyeIcon.js +1 -1
  329. package/dist/icons/EyeInvisibleIcon.js +1 -1
  330. package/dist/icons/FilterIcon.js +1 -1
  331. package/dist/icons/FolderFilledIcon.js +1 -1
  332. package/dist/icons/FolderIcon.js +1 -1
  333. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  334. package/dist/icons/FolderOpenIcon.js +1 -1
  335. package/dist/icons/ForwardIcon.js +1 -1
  336. package/dist/icons/GripVerticalIcon.js +1 -1
  337. package/dist/icons/HierarchyIcon.js +1 -1
  338. package/dist/icons/HierarchyOpenIcon.js +1 -1
  339. package/dist/icons/Icon.js +1 -1
  340. package/dist/icons/InfoCircleIcon.js +1 -1
  341. package/dist/icons/InfoIcon.js +1 -1
  342. package/dist/icons/KeyIcon.js +1 -1
  343. package/dist/icons/LeftIcon.js +1 -1
  344. package/dist/icons/LineChartIcon.js +1 -1
  345. package/dist/icons/LoadingIcon.js +1 -1
  346. package/dist/icons/LockFilledIcon.js +1 -1
  347. package/dist/icons/LockIcon.js +1 -1
  348. package/dist/icons/MoreIcon.js +1 -1
  349. package/dist/icons/NotAllowedIcon.js +1 -1
  350. package/dist/icons/Number123Icon.js +1 -1
  351. package/dist/icons/NumberIcon.js +1 -1
  352. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  353. package/dist/icons/PauseCircleIcon.js +1 -1
  354. package/dist/icons/PauseIcon.js +1 -1
  355. package/dist/icons/PercentageIcon.js +1 -1
  356. package/dist/icons/PieChartIcon.js +1 -1
  357. package/dist/icons/PlayCircleIcon.js +1 -1
  358. package/dist/icons/PlayIcon.js +1 -1
  359. package/dist/icons/PlusIcon.js +1 -1
  360. package/dist/icons/ProgressBarIcon.js +1 -1
  361. package/dist/icons/ReloadIcon.js +1 -1
  362. package/dist/icons/ReportIcon.js +1 -1
  363. package/dist/icons/ReturnIcon.js +1 -1
  364. package/dist/icons/RightIcon.js +1 -1
  365. package/dist/icons/RowTotalsIcon.js +1 -1
  366. package/dist/icons/SchemeIcon.js +1 -1
  367. package/dist/icons/SearchIcon.js +1 -1
  368. package/dist/icons/SemanticQueryIcon.js +1 -1
  369. package/dist/icons/SettingsIcon.js +1 -1
  370. package/dist/icons/ShieldFilledIcon.js +1 -1
  371. package/dist/icons/ShieldIcon.js +1 -1
  372. package/dist/icons/SlashIcon.js +1 -1
  373. package/dist/icons/SparklesIcon.js +1 -1
  374. package/dist/icons/SqlIcon.js +1 -1
  375. package/dist/icons/StatsIcon.js +1 -1
  376. package/dist/icons/StopIcon.js +1 -1
  377. package/dist/icons/StringIcon.js +1 -1
  378. package/dist/icons/SubtotalsIcon.js +1 -1
  379. package/dist/icons/SwitchIcon.js +1 -1
  380. package/dist/icons/TableIcon.js +1 -1
  381. package/dist/icons/ThumbsDownIcon.js +1 -1
  382. package/dist/icons/ThumbsUpIcon.js +1 -1
  383. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  384. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  385. package/dist/icons/ThunderboltIcon.js +1 -1
  386. package/dist/icons/TimeIcon.js +1 -1
  387. package/dist/icons/TrashIcon.js +1 -1
  388. package/dist/icons/UnlockIcon.js +1 -1
  389. package/dist/icons/UpIcon.js +1 -1
  390. package/dist/icons/UserGroupIcon.js +1 -1
  391. package/dist/icons/UserIcon.js +1 -1
  392. package/dist/icons/UserLockIcon.js +1 -1
  393. package/dist/icons/ViewIcon.js +1 -1
  394. package/dist/icons/WarningFilledIcon.js +1 -1
  395. package/dist/icons/WarningIcon.js +1 -1
  396. package/dist/icons/wrap-icon.js +1 -1
  397. package/dist/index.d.ts +1 -0
  398. package/dist/index.js +3 -1
  399. package/dist/index.js.map +1 -1
  400. package/dist/provider.js +1 -1
  401. package/dist/providers/TrackingProvider.js +1 -1
  402. package/dist/providers/navigationAdapter.default.js +1 -1
  403. package/dist/tokens/base.js +1 -1
  404. package/dist/tokens/colors.d.ts +4 -3
  405. package/dist/tokens/colors.js +93 -83
  406. package/dist/tokens/colors.js.map +1 -1
  407. package/dist/tokens/index.js +1 -1
  408. package/dist/tokens/layout.js +1 -1
  409. package/dist/tokens/palette.js +364 -0
  410. package/dist/tokens/palette.js.map +1 -0
  411. package/dist/tokens/shadows.d.ts +4 -1
  412. package/dist/tokens/shadows.js +9 -6
  413. package/dist/tokens/shadows.js.map +1 -1
  414. package/dist/tokens/sizes.js +1 -1
  415. package/dist/tokens/spacing.js +1 -1
  416. package/dist/tokens/typography.js +1 -1
  417. package/dist/utils/ResizeSensor.js +1 -1
  418. package/dist/utils/is-dev-env.js +1 -1
  419. package/dist/utils/modules.js +1 -1
  420. package/dist/utils/promise.js +1 -1
  421. package/dist/utils/raf.js +1 -1
  422. package/dist/utils/random.js +1 -1
  423. package/dist/utils/range.js +1 -1
  424. package/dist/utils/react/RenderCache.js +1 -1
  425. package/dist/utils/react/Slots.js +1 -1
  426. package/dist/utils/react/chain.js +1 -1
  427. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  428. package/dist/utils/react/index.js +1 -1
  429. package/dist/utils/react/interactions.js +1 -1
  430. package/dist/utils/react/isTextOnly.js +1 -1
  431. package/dist/utils/react/mapProps.js +1 -1
  432. package/dist/utils/react/mergeProps.js +1 -1
  433. package/dist/utils/react/nullableValue.js +1 -1
  434. package/dist/utils/react/resolveIcon.js +1 -1
  435. package/dist/utils/react/sharedStore.js +1 -1
  436. package/dist/utils/react/useCombinedRefs.js +1 -1
  437. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  438. package/dist/utils/react/useEventBus.js +1 -1
  439. package/dist/utils/react/useId.js +1 -1
  440. package/dist/utils/react/useIsDarwin.js +1 -1
  441. package/dist/utils/react/useKeySymbols.js +1 -1
  442. package/dist/utils/react/useLayoutEffect.js +1 -1
  443. package/dist/utils/react/useLocalStorage.js +1 -1
  444. package/dist/utils/react/useMergeStyles.js +1 -1
  445. package/dist/utils/react/usePopoverSync.js +1 -1
  446. package/dist/utils/react/useQaProps.js +1 -1
  447. package/dist/utils/react/useViewportSize.js +1 -1
  448. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  449. package/dist/utils/selection.js +1 -1
  450. package/dist/utils/styles.js +1 -1
  451. package/dist/utils/tree.js +1 -1
  452. package/dist/utils/warnings.js +1 -1
  453. package/dist/version.d.ts +3 -0
  454. package/dist/version.js +13 -5
  455. package/dist/version.js.map +1 -1
  456. package/docs/Usage.md +98 -30
  457. package/docs/components/content/Card.md +1 -1
  458. package/docs/components/content/PrismCode.md +21 -0
  459. package/docs/components/form/Field.md +1 -1
  460. package/docs/components/layout/ResizablePanel.md +1 -1
  461. package/docs/components/organisms/FileTabs.md +1 -1
  462. package/docs/components/organisms/StatsCard.md +1 -1
  463. package/docs/tasty/configuration.md +44 -0
  464. package/docs/tasty/dsl.md +14 -13
  465. package/docs/tasty/methodology.md +26 -0
  466. package/docs/tasty/react-api.md +24 -0
  467. package/docs/tasty/ssr.md +5 -3
  468. package/docs/tasty/styles.md +9 -7
  469. package/docs/tasty/tasty-static.md +15 -0
  470. package/package.json +8 -6
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { BASE_STYLES, BLOCK_STYLES, COLOR_STYLES, DIMENSION_STYLES, OUTER_STYLES, tasty } from "@tenphi/tasty";
3
3
  import { forwardRef, useMemo } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useLayoutEffect as useLayoutEffect$1 } from "../../utils/react/useLayoutEffect.js";
4
4
  import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
4
4
  import { useEvent } from "../../_internal/hooks/use-event.js";
@@ -128,7 +128,7 @@ const HandlerElement = tasty({
128
128
  fill: {
129
129
  "": "#dark-03",
130
130
  "hovered | drag": "#dark-02",
131
- disabled: "#dark-04"
131
+ disabled: "#disabled-surface-text"
132
132
  }
133
133
  }
134
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ResizablePanel.js","names":["mergeProps","Panel"],"sources":["../../../src/components/layout/ResizablePanel.tsx"],"sourcesContent":["import { useResizeObserver } from '@react-aria/utils';\nimport { BasePropsWithoutChildren, Styles, tasty } from '@tenphi/tasty';\nimport {\n ForwardedRef,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useHover, useMove } from 'react-aria';\n\nimport { useDebouncedValue, useEvent } from '../../_internal/hooks';\nimport { mergeProps, useCombinedRefs } from '../../utils/react';\n\nimport { CubePanelProps, Panel } from './Panel';\n\ntype Direction = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface CubeResizablePanelProps extends CubePanelProps {\n handlerStyles?: Styles;\n direction: Direction;\n size?: number;\n onSizeChange?: (size: number) => void;\n minSize?: string | number;\n maxSize?: string | number;\n isDisabled?: boolean;\n}\n\nconst HandlerElement = tasty({\n qa: 'ResizeHandler',\n styles: {\n // The real size is slightly bigger than the visual one.\n width: {\n '': 'initial',\n horizontal: '9px',\n 'disabled & horizontal': '1bw',\n },\n height: {\n '': '9px',\n horizontal: 'initial',\n 'disabled & !horizontal': '1bw',\n },\n top: {\n '': 0,\n '[data-direction=\"top\"]': 'initial',\n },\n bottom: {\n '': 0,\n '[data-direction=\"bottom\"]': 'initial',\n },\n right: {\n '': 0,\n '[data-direction=\"right\"]': 'initial',\n },\n left: {\n '': 0,\n '[data-direction=\"left\"]': 'initial',\n },\n // Transform requires a separate visual size property to respect size boundaries\n transform: {\n '': 'translate(0, 0)',\n '[data-direction=\"top\"]':\n 'translate(0, ($size-compensation - $visual-size))',\n '[data-direction=\"right\"]':\n 'translate(($visual-size - $size-compensation), 0)',\n '[data-direction=\"bottom\"]':\n 'translate(0, ($visual-size - $size-compensation))',\n '[data-direction=\"left\"]':\n 'translate(($size-compensation - $visual-size), 0)',\n },\n position: 'absolute',\n zIndex: 1,\n cursor: {\n '': 'row-resize',\n horizontal: 'col-resize',\n disabled: 'not-allowed',\n },\n padding: 0,\n boxSizing: 'border-box',\n transition: 'theme',\n '--size-compensation': {\n '': '6px',\n disabled: '1bw',\n },\n\n Track: {\n width: {\n '': 'initial',\n horizontal: '3px',\n 'disabled & horizontal': '1px',\n },\n height: {\n '': '3px',\n horizontal: 'initial',\n 'disabled & !horizontal': '1px',\n },\n position: 'absolute',\n inset: {\n '': '3px 0',\n horizontal: '0 3px',\n disabled: '0 0',\n },\n fill: {\n '': '#border',\n '(hovered | drag) & !disabled': '#purple-03',\n },\n transition: 'theme',\n outline: {\n '': '1bw #primary-text.0',\n drag: '1bw #primary-text',\n },\n outlineOffset: 1,\n },\n\n Drag: {\n display: 'grid',\n gap: '2bw',\n flow: {\n '': 'row',\n horizontal: 'column',\n },\n gridColumns: {\n '': '3px 3px 3px 3px 3px',\n horizontal: 'auto',\n },\n gridRows: {\n '': 'auto',\n horizontal: '3px 3px 3px 3px 3px',\n },\n width: {\n '': 'auto',\n horizontal: '1px',\n },\n height: {\n '': '1px',\n horizontal: 'auto',\n },\n inset: {\n '': '4px 50% auto auto',\n horizontal: '50% 4px auto auto',\n },\n transform: {\n '': 'translate(-50%, 0)',\n horizontal: 'translate(0, -50%)',\n },\n position: 'absolute',\n transition: 'theme',\n },\n\n DragPart: {\n radius: true,\n fill: {\n '': '#dark-03',\n 'hovered | drag': '#dark-02',\n disabled: '#dark-04',\n },\n },\n },\n});\n\ninterface HandlerProps extends BasePropsWithoutChildren {\n direction: Direction;\n}\n\nconst Handler = (props: HandlerProps) => {\n const { direction = 'right', isDisabled, ...otherProps } = props;\n const { hoverProps, isHovered } = useHover({});\n const isHorizontal = direction === 'left' || direction === 'right';\n const localIsHovered = useDebouncedValue(isHovered, 150);\n\n return (\n <HandlerElement\n {...mergeProps(\n hoverProps,\n {\n mods: {\n hovered: localIsHovered,\n horizontal: isHorizontal,\n disabled: isDisabled,\n },\n 'data-direction': direction,\n },\n otherProps,\n )}\n >\n <div data-element=\"Track\" />\n {!isDisabled ? (\n <div data-element=\"Drag\">\n <div data-element=\"DragPart\" />\n <div data-element=\"DragPart\" />\n <div data-element=\"DragPart\" />\n <div data-element=\"DragPart\" />\n <div data-element=\"DragPart\" />\n </div>\n ) : null}\n </HandlerElement>\n );\n};\n\nconst StyledPanel = tasty(Panel, {\n styles: {\n flexGrow: 0,\n width: {\n '': '$min-size $size $max-size',\n '[data-direction=\"top\"] | [data-direction=\"bottom\"]': 'initial',\n },\n height: {\n '': '$min-size $size $max-size',\n '[data-direction=\"left\"] | [data-direction=\"right\"]': 'initial',\n },\n placeSelf: 'stretch',\n touchAction: 'none',\n\n '$indent-compensation': {\n '': '3px',\n disabled: '1bw',\n },\n },\n});\n\nfunction ResizablePanel(\n props: CubeResizablePanelProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null);\n const isControllable = typeof props.size === 'number';\n const {\n isDisabled,\n direction = 'right',\n size: providedSize,\n onSizeChange,\n minSize = 200,\n maxSize = isControllable ? undefined : 'min(50%, 400px)',\n ...restProps\n } = props;\n const [isDragging, setIsDragging] = useState(false);\n const isHorizontal = direction === 'left' || direction === 'right';\n\n ref = useCombinedRefs(ref);\n\n const onResize = useEvent(() => {\n if (ref?.current) {\n const offsetProp = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n const containerSize = ref.current[offsetProp];\n\n if (Math.abs(containerSize - size) < 1 && !isDisabled) {\n setVisualSize(size);\n } else {\n setVisualSize(containerSize);\n }\n }\n });\n\n useResizeObserver({\n ref,\n onResize,\n });\n\n function clamp(size: number) {\n if (typeof maxSize === 'number') {\n size = Math.min(maxSize, size);\n }\n\n if (typeof minSize === 'number' || !minSize) {\n size = Math.max((minSize as number) || 0, size);\n }\n\n return Math.max(size, 0);\n }\n\n let [size, setSize] = useState<number>(\n providedSize != null ? clamp(providedSize) : 200,\n );\n let [visualSize, setVisualSize] = useState<number | null>(null);\n\n let { moveProps } = useMove({\n onMoveStart(e) {\n if (isDisabled) {\n return;\n }\n\n setIsDragging(true);\n\n const offsetProp = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n\n if (ref.current && Math.abs(ref.current[offsetProp] - size) >= 1) {\n setSize(Math.round(ref.current[offsetProp]));\n }\n },\n onMove(e) {\n setSize((size) => {\n if (isDisabled) {\n return size;\n }\n\n if (e.pointerType === 'keyboard') {\n return size;\n }\n\n size += isHorizontal\n ? e.deltaX * (direction === 'right' ? 1 : -1)\n : e.deltaY * (direction === 'bottom' ? 1 : -1);\n\n return size;\n });\n },\n onMoveEnd(e) {\n setIsDragging(false);\n setSize((size) => clamp(Math.round(size)));\n },\n });\n\n // Since we sync provided size and the local one in two ways,\n // we need a way to prevent infinite loop in some cases.\n // We will run this in setTimeout and make sure it will get the most recent state.\n const notifyChange = useEvent(() => {\n setSize((size) => {\n if (providedSize && Math.abs(providedSize - size) > 0.5) {\n return providedSize;\n }\n\n return size;\n });\n });\n\n useEffect(() => {\n onResize();\n }, [size, isDisabled]);\n\n useEffect(() => {\n if (\n !isDragging &&\n visualSize != null &&\n (providedSize == null || Math.abs(providedSize - visualSize) > 0.5)\n ) {\n onSizeChange?.(Math.round(visualSize));\n }\n }, [visualSize, isDragging]);\n\n useEffect(() => {\n timerRef.current = setTimeout(notifyChange, 500);\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, [providedSize]);\n\n const mods = useMemo(() => {\n return {\n drag: isDragging,\n horizontal: isHorizontal,\n disabled: isDisabled,\n };\n }, [isDragging, isHorizontal, isDisabled]);\n\n return (\n <StyledPanel\n ref={ref}\n data-direction={direction}\n mods={mods}\n extra={\n <Handler\n isDisabled={isDisabled || visualSize == null}\n direction={direction}\n {...moveProps}\n mods={mods}\n />\n }\n {...mergeProps(restProps, {\n style: {\n // We set the current size further via width/min-width/max-width styles to respect size boundaries\n '--size': `${size}px`,\n // We use a separate visual size to paint the handler for a smoother experience\n '--visual-size': `${visualSize}px`,\n '--min-size': typeof minSize === 'number' ? `${minSize}px` : minSize,\n '--max-size': typeof maxSize === 'number' ? `${maxSize}px` : maxSize,\n },\n innerStyles: {\n // The panel inner space compensation for the handler\n margin: `$indent-compensation ${direction}`,\n },\n })}\n />\n );\n}\n\nconst _ResizablePanel = forwardRef(ResizablePanel);\n\n_ResizablePanel.displayName = 'ResizablePanel';\n\nexport { _ResizablePanel as ResizablePanel };\n"],"mappings":"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"}
1
+ {"version":3,"file":"ResizablePanel.js","names":["mergeProps","Panel"],"sources":["../../../src/components/layout/ResizablePanel.tsx"],"sourcesContent":["import { useResizeObserver } from '@react-aria/utils';\nimport { BasePropsWithoutChildren, Styles, tasty } from '@tenphi/tasty';\nimport {\n ForwardedRef,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useHover, useMove } from 'react-aria';\n\nimport { useDebouncedValue, useEvent } from '../../_internal/hooks';\nimport { mergeProps, useCombinedRefs } from '../../utils/react';\n\nimport { CubePanelProps, Panel } from './Panel';\n\ntype Direction = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface CubeResizablePanelProps extends CubePanelProps {\n handlerStyles?: Styles;\n direction: Direction;\n size?: number;\n onSizeChange?: (size: number) => void;\n minSize?: string | number;\n maxSize?: string | number;\n isDisabled?: boolean;\n}\n\nconst HandlerElement = tasty({\n qa: 'ResizeHandler',\n styles: {\n // The real size is slightly bigger than the visual one.\n width: {\n '': 'initial',\n horizontal: '9px',\n 'disabled & horizontal': '1bw',\n },\n height: {\n '': '9px',\n horizontal: 'initial',\n 'disabled & !horizontal': '1bw',\n },\n top: {\n '': 0,\n '[data-direction=\"top\"]': 'initial',\n },\n bottom: {\n '': 0,\n '[data-direction=\"bottom\"]': 'initial',\n },\n right: {\n '': 0,\n '[data-direction=\"right\"]': 'initial',\n },\n left: {\n '': 0,\n '[data-direction=\"left\"]': 'initial',\n },\n // Transform requires a separate visual size property to respect size boundaries\n transform: {\n '': 'translate(0, 0)',\n '[data-direction=\"top\"]':\n 'translate(0, ($size-compensation - $visual-size))',\n '[data-direction=\"right\"]':\n 'translate(($visual-size - $size-compensation), 0)',\n '[data-direction=\"bottom\"]':\n 'translate(0, ($visual-size - $size-compensation))',\n '[data-direction=\"left\"]':\n 'translate(($size-compensation - $visual-size), 0)',\n },\n position: 'absolute',\n zIndex: 1,\n cursor: {\n '': 'row-resize',\n horizontal: 'col-resize',\n disabled: 'not-allowed',\n },\n padding: 0,\n boxSizing: 'border-box',\n transition: 'theme',\n '--size-compensation': {\n '': '6px',\n disabled: '1bw',\n },\n\n Track: {\n width: {\n '': 'initial',\n horizontal: '3px',\n 'disabled & horizontal': '1px',\n },\n height: {\n '': '3px',\n horizontal: 'initial',\n 'disabled & !horizontal': '1px',\n },\n position: 'absolute',\n inset: {\n '': '3px 0',\n horizontal: '0 3px',\n disabled: '0 0',\n },\n fill: {\n '': '#border',\n '(hovered | drag) & !disabled': '#purple-03',\n },\n transition: 'theme',\n outline: {\n '': '1bw #primary-text.0',\n drag: '1bw #primary-text',\n },\n outlineOffset: 1,\n },\n\n Drag: {\n display: 'grid',\n gap: '2bw',\n flow: {\n '': 'row',\n horizontal: 'column',\n },\n gridColumns: {\n '': '3px 3px 3px 3px 3px',\n horizontal: 'auto',\n },\n gridRows: {\n '': 'auto',\n horizontal: '3px 3px 3px 3px 3px',\n },\n width: {\n '': 'auto',\n horizontal: '1px',\n },\n height: {\n '': '1px',\n horizontal: 'auto',\n },\n inset: {\n '': '4px 50% auto auto',\n horizontal: '50% 4px auto auto',\n },\n transform: {\n '': 'translate(-50%, 0)',\n horizontal: 'translate(0, -50%)',\n },\n position: 'absolute',\n transition: 'theme',\n },\n\n DragPart: {\n radius: true,\n fill: {\n '': '#dark-03',\n 'hovered | drag': '#dark-02',\n disabled: '#disabled-surface-text',\n },\n },\n },\n});\n\ninterface HandlerProps extends BasePropsWithoutChildren {\n direction: Direction;\n}\n\nconst Handler = (props: HandlerProps) => {\n const { direction = 'right', isDisabled, ...otherProps } = props;\n const { hoverProps, isHovered } = useHover({});\n const isHorizontal = direction === 'left' || direction === 'right';\n const localIsHovered = useDebouncedValue(isHovered, 150);\n\n return (\n <HandlerElement\n {...mergeProps(\n hoverProps,\n {\n mods: {\n hovered: localIsHovered,\n horizontal: isHorizontal,\n disabled: isDisabled,\n },\n 'data-direction': direction,\n },\n otherProps,\n )}\n >\n <div data-element=\"Track\" />\n {!isDisabled ? (\n <div data-element=\"Drag\">\n <div data-element=\"DragPart\" />\n <div data-element=\"DragPart\" />\n <div data-element=\"DragPart\" />\n <div data-element=\"DragPart\" />\n <div data-element=\"DragPart\" />\n </div>\n ) : null}\n </HandlerElement>\n );\n};\n\nconst StyledPanel = tasty(Panel, {\n styles: {\n flexGrow: 0,\n width: {\n '': '$min-size $size $max-size',\n '[data-direction=\"top\"] | [data-direction=\"bottom\"]': 'initial',\n },\n height: {\n '': '$min-size $size $max-size',\n '[data-direction=\"left\"] | [data-direction=\"right\"]': 'initial',\n },\n placeSelf: 'stretch',\n touchAction: 'none',\n\n '$indent-compensation': {\n '': '3px',\n disabled: '1bw',\n },\n },\n});\n\nfunction ResizablePanel(\n props: CubeResizablePanelProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null);\n const isControllable = typeof props.size === 'number';\n const {\n isDisabled,\n direction = 'right',\n size: providedSize,\n onSizeChange,\n minSize = 200,\n maxSize = isControllable ? undefined : 'min(50%, 400px)',\n ...restProps\n } = props;\n const [isDragging, setIsDragging] = useState(false);\n const isHorizontal = direction === 'left' || direction === 'right';\n\n ref = useCombinedRefs(ref);\n\n const onResize = useEvent(() => {\n if (ref?.current) {\n const offsetProp = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n const containerSize = ref.current[offsetProp];\n\n if (Math.abs(containerSize - size) < 1 && !isDisabled) {\n setVisualSize(size);\n } else {\n setVisualSize(containerSize);\n }\n }\n });\n\n useResizeObserver({\n ref,\n onResize,\n });\n\n function clamp(size: number) {\n if (typeof maxSize === 'number') {\n size = Math.min(maxSize, size);\n }\n\n if (typeof minSize === 'number' || !minSize) {\n size = Math.max((minSize as number) || 0, size);\n }\n\n return Math.max(size, 0);\n }\n\n let [size, setSize] = useState<number>(\n providedSize != null ? clamp(providedSize) : 200,\n );\n let [visualSize, setVisualSize] = useState<number | null>(null);\n\n let { moveProps } = useMove({\n onMoveStart(e) {\n if (isDisabled) {\n return;\n }\n\n setIsDragging(true);\n\n const offsetProp = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n\n if (ref.current && Math.abs(ref.current[offsetProp] - size) >= 1) {\n setSize(Math.round(ref.current[offsetProp]));\n }\n },\n onMove(e) {\n setSize((size) => {\n if (isDisabled) {\n return size;\n }\n\n if (e.pointerType === 'keyboard') {\n return size;\n }\n\n size += isHorizontal\n ? e.deltaX * (direction === 'right' ? 1 : -1)\n : e.deltaY * (direction === 'bottom' ? 1 : -1);\n\n return size;\n });\n },\n onMoveEnd(e) {\n setIsDragging(false);\n setSize((size) => clamp(Math.round(size)));\n },\n });\n\n // Since we sync provided size and the local one in two ways,\n // we need a way to prevent infinite loop in some cases.\n // We will run this in setTimeout and make sure it will get the most recent state.\n const notifyChange = useEvent(() => {\n setSize((size) => {\n if (providedSize && Math.abs(providedSize - size) > 0.5) {\n return providedSize;\n }\n\n return size;\n });\n });\n\n useEffect(() => {\n onResize();\n }, [size, isDisabled]);\n\n useEffect(() => {\n if (\n !isDragging &&\n visualSize != null &&\n (providedSize == null || Math.abs(providedSize - visualSize) > 0.5)\n ) {\n onSizeChange?.(Math.round(visualSize));\n }\n }, [visualSize, isDragging]);\n\n useEffect(() => {\n timerRef.current = setTimeout(notifyChange, 500);\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, [providedSize]);\n\n const mods = useMemo(() => {\n return {\n drag: isDragging,\n horizontal: isHorizontal,\n disabled: isDisabled,\n };\n }, [isDragging, isHorizontal, isDisabled]);\n\n return (\n <StyledPanel\n ref={ref}\n data-direction={direction}\n mods={mods}\n extra={\n <Handler\n isDisabled={isDisabled || visualSize == null}\n direction={direction}\n {...moveProps}\n mods={mods}\n />\n }\n {...mergeProps(restProps, {\n style: {\n // We set the current size further via width/min-width/max-width styles to respect size boundaries\n '--size': `${size}px`,\n // We use a separate visual size to paint the handler for a smoother experience\n '--visual-size': `${visualSize}px`,\n '--min-size': typeof minSize === 'number' ? `${minSize}px` : minSize,\n '--max-size': typeof maxSize === 'number' ? `${maxSize}px` : maxSize,\n },\n innerStyles: {\n // The panel inner space compensation for the handler\n margin: `$indent-compensation ${direction}`,\n },\n })}\n />\n );\n}\n\nconst _ResizablePanel = forwardRef(ResizablePanel);\n\n_ResizablePanel.displayName = 'ResizablePanel';\n\nexport { _ResizablePanel as ResizablePanel };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
4
4
  import { CONTAINER_STYLES, filterBaseProps, parseStyle, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { DraggableCollection } from "../../shared/DraggableCollection.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { ItemActionProvider } from "../../actions/ItemActionContext.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { DropIndicatorElement } from "./styled.js";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { TabPanelElement } from "./styled.js";
3
3
  import { useEffect, useMemo, useRef } from "react";
4
4
  import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
3
3
  import { CloseIcon } from "../../../icons/CloseIcon.js";
4
4
  import { MoreIcon } from "../../../icons/MoreIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | 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";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | 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";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { _Item } from "../../content/Item/Item.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
 
@@ -29,7 +29,7 @@ const TabsElement = tasty({ styles: {
29
29
  },
30
30
  fill: {
31
31
  "": "#clear",
32
- "type=radio": "#dark.06"
32
+ "type=radio": "#surface-3"
33
33
  },
34
34
  flexShrink: 0,
35
35
  flexGrow: 0,
@@ -184,7 +184,7 @@ const TabElement = tasty(_Item, {
184
184
  "": "#dark-02",
185
185
  "type=narrow & (hovered & !selected)": "#primary-text",
186
186
  "(type=default | type=narrow) & selected": "#primary-text",
187
- disabled: "#dark-04"
187
+ disabled: "#disabled-surface-text"
188
188
  },
189
189
  fill: {
190
190
  "": "#clear",
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","names":["Item"],"sources":["../../../../src/components/navigation/Tabs/styled.ts"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\n\nimport { Item } from '../../content/Item';\n\n// =============================================================================\n// Main Tabs Container\n// =============================================================================\n\nexport const TabsElement = tasty({\n styles: {\n display: 'flex',\n flow: 'row',\n placeItems: {\n '': 'end stretch',\n 'type=radio | type=file': 'stretch',\n },\n overflow: 'visible',\n border: {\n '': 0,\n '(type=default | type=file | type=narrow) & has-panels': 'bottom',\n },\n width: {\n '': '100%',\n 'type=radio': 'max-content',\n },\n padding: {\n '': 0,\n 'type=radio': '.5x',\n },\n radius: {\n '': 0,\n 'type=radio': '1cr',\n },\n fill: {\n '': '#clear',\n 'type=radio': '#dark.06',\n },\n flexShrink: 0,\n flexGrow: 0,\n\n $transition: '$tab-transition',\n '$tab-indicator-size': {\n '': '2bw',\n 'size=large': '1ow',\n },\n\n Prefix: {\n $: '>',\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n placeSelf: 'stretch',\n padding: {\n '': 0,\n 'type=default': '.5x 0 .5x 1x',\n },\n gap: {\n '': 0,\n 'type=default': '.5x',\n },\n border: {\n '': 0,\n 'type=file': 'right',\n },\n },\n\n Suffix: {\n $: '>',\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n placeSelf: 'stretch',\n padding: {\n '': 0,\n 'type=default': '.5x 1x .5x 0',\n },\n gap: {\n '': 0,\n 'type=default': '.5x',\n },\n border: {\n '': 0,\n 'type=file': 'left',\n },\n },\n\n // Wrapper for scroll area and scrollbar (scrollbar is positioned relative to this)\n ScrollWrapper: {\n $: '>',\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexShrink: 1,\n width: 'min 0',\n overflow: {\n '': 'hidden',\n 'type=radio': 'visible',\n },\n },\n\n Scroll: {\n $: '> ScrollWrapper >',\n position: 'relative',\n display: 'block',\n overflow: {\n '': 'auto hidden',\n 'type=radio': 'visible',\n },\n scrollbar: 'none',\n flexGrow: 1,\n width: '100%',\n // Add padding/margin for radio type to allow shadow to render outside\n padding: {\n '': 0,\n 'type=radio': '.5x',\n },\n margin: {\n '': 0,\n 'type=radio': '-.5x',\n },\n // Use multi-group fade with color tokens for smooth transitions\n fade: '2x left #tabs-fade-left #black, 2x right #tabs-fade-right #black',\n // ##name outputs --name-color (literal CSS property name)\n transition:\n '##tabs-fade-left $tab-transition ease-in, ##tabs-fade-right $tab-transition ease-in',\n\n // Transition transparent color: opaque (no fade) -> transparent (fade visible)\n '#tabs-fade-left': {\n '': 'rgb(0 0 0 / 1)',\n 'fade-left': 'rgb(0 0 0 / 0)',\n },\n '#tabs-fade-right': {\n '': 'rgb(0 0 0 / 1)',\n 'fade-right': 'rgb(0 0 0 / 0)',\n },\n },\n\n TabList: {\n $: '> ScrollWrapper > Scroll >',\n position: 'relative',\n display: 'grid',\n gridAutoFlow: 'column',\n gridAutoColumns: {\n '': 'auto',\n 'type=radio': '1fr',\n },\n gap: {\n '': 0,\n 'type=default': '1x',\n 'type=narrow': '2x',\n 'type=radio': '.5x',\n },\n placeContent: 'start',\n overflow: 'visible',\n width: {\n '': 'max-content',\n 'type=radio': '100%',\n },\n padding: '0 $tablist-padding',\n\n '$tablist-padding': {\n '': '0',\n 'type=default | type=narrow': '1x',\n },\n },\n\n // Size variable for actions (if ItemAction is used instead of TabsAction)\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n },\n\n // Custom horizontal scrollbar (tiny) - positioned relative to ScrollWrapper\n ScrollbarH: {\n $: '> ScrollWrapper >',\n position: 'absolute',\n bottom: '1px',\n left: '$scrollbar-h-left',\n height: '1ow',\n width: '$scrollbar-h-width',\n radius: 'round',\n fill: '#dark.35',\n opacity: {\n '': 0,\n 'focused | scrolling': 1,\n },\n transition: 'opacity 0.15s',\n pointerEvents: 'none',\n },\n },\n});\n\n// =============================================================================\n// Tab Button (extends Item)\n// =============================================================================\n\nexport const TabElement = tasty(Item, {\n as: 'button',\n styles: {\n radius: {\n '': false,\n 'type=radio | type=default': true,\n 'type=narrow': 'top',\n },\n color: {\n '': '#dark-02',\n 'type=narrow & (hovered & !selected)': '#primary-text',\n '(type=default | type=narrow) & selected': '#primary-text',\n disabled: '#dark-04',\n },\n fill: {\n '': '#clear',\n 'hovered & !type=narrow': '#dark.03',\n 'type=file': '#surface-3',\n 'type=file & hovered': '#surface-3.5',\n 'type=radio & hovered': '#surface.5',\n '(type=file | type=radio) & selected': '#surface',\n },\n border: {\n '': '#clear',\n 'type=file': '0 #clear',\n },\n preset: {\n '': 't3m',\n 'size=xsmall': 't4',\n },\n shadow: {\n '': '$selection-shadow',\n 'focused & focus-visible':\n 'inset 0 0 0 1bw #primary-text, $selection-shadow',\n editing: 'inset 0 0 0 1bw #primary-text, $selection-shadow',\n 'type=radio & selected': '$item-shadow',\n 'type=radio & selected & focused & focus-visible':\n '$item-shadow, inset 0 0 0 1bw #primary-text',\n },\n placeContent: {\n // extend\n 'type=radio': 'center',\n },\n gridTemplate: {\n // extend\n 'type=radio':\n '\"icon prefix label suffix rightIcon actions\" auto / max-content max-content max-content max-content max-content max-content',\n },\n '$selection-shadow': {\n '': 'inset 0 0 0 0 #primary',\n 'type=file & selected': 'inset 0 (-1 * $tab-indicator-size) 0 0 #primary',\n '!type=file': 'inset 0 0 0 0 #primary.0',\n },\n // Collapse horizontal padding for narrow type\n '$label-padding-left': {\n '': '$inline-padding',\n 'has-start-content': 0,\n 'type=narrow': 0,\n },\n '$label-padding-right': {\n '': '$inline-padding',\n 'has-end-content': 0,\n 'type=narrow': 0,\n },\n Label: {\n placeSelf: {\n '': 'center start',\n 'type=radio': 'center start',\n 'type=radio & !has-prefix & !has-suffix & !has-icon & !has-right-icon':\n 'center',\n },\n },\n Actions: {\n transition: false,\n },\n },\n});\n\n// =============================================================================\n// Tab Container (wrapper for tab + actions)\n// =============================================================================\n\nexport const TabContainer = tasty({\n styles: {\n position: 'relative',\n display: 'grid',\n margin: {\n '': 0,\n 'type=default': '.5x 0',\n },\n border: {\n '': 0,\n 'type=file': 'right',\n },\n cursor: {\n '': 'default',\n draggable: 'grab',\n dragging: 'grabbing',\n },\n\n // Size variable for actions (same as ItemButton's ActionsWrapper)\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n },\n\n // Actions rendered outside the button for accessibility\n Actions: {\n $: '>',\n position: 'absolute',\n inset: '1bw 1bw auto auto',\n display: 'flex',\n gap: '1bw',\n placeItems: 'center',\n placeContent: 'center end',\n pointerEvents: 'auto',\n height: 'min ($size - 2bw)',\n padding: '0 $side-padding',\n // Simple CSS opacity for show-on-hover\n opacity: {\n '': 1,\n 'auto-hide-actions': 0,\n 'auto-hide-actions & (active | :hover | :focus-within | :has([data-pressed]))': 1,\n },\n transition: 'opacity $transition',\n // Size variables (same as Item)\n '$action-size': 'min(max((2x + 2bw), ($size - 1x - 2bw)), (3x - 2bw))',\n '$side-padding': '(($size - $action-size - 2bw) / 2)',\n },\n },\n});\n\n// =============================================================================\n// Drop Indicator for Drag-and-Drop\n// =============================================================================\n\nexport const DropIndicatorElement = tasty({\n styles: {\n zIndex: 10,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: {\n '': 0,\n 'drop-target': 1,\n },\n fill: '#primary',\n width: '.5x',\n top: 0,\n bottom: 0,\n left: {\n '': 'auto',\n before: '-2px',\n },\n right: {\n '': 'auto',\n after: '-2px',\n },\n },\n});\n\n// =============================================================================\n// Tab Selection Indicator (for default type)\n// =============================================================================\n\nexport const TabIndicatorElement = tasty({\n styles: {\n position: 'absolute',\n bottom: '0',\n left: 0,\n height: '$tab-indicator-size',\n fill: '#primary',\n transition:\n 'left $tab-transition ease-in-out, width $tab-transition ease-in-out',\n pointerEvents: 'none',\n },\n});\n\n// =============================================================================\n// Tab Panel\n// =============================================================================\n\nexport const TabPanelElement = tasty({\n as: 'section',\n styles: {\n display: 'contents',\n hide: {\n '': true,\n active: false,\n },\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"styled.js","names":["Item"],"sources":["../../../../src/components/navigation/Tabs/styled.ts"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\n\nimport { Item } from '../../content/Item';\n\n// =============================================================================\n// Main Tabs Container\n// =============================================================================\n\nexport const TabsElement = tasty({\n styles: {\n display: 'flex',\n flow: 'row',\n placeItems: {\n '': 'end stretch',\n 'type=radio | type=file': 'stretch',\n },\n overflow: 'visible',\n border: {\n '': 0,\n '(type=default | type=file | type=narrow) & has-panels': 'bottom',\n },\n width: {\n '': '100%',\n 'type=radio': 'max-content',\n },\n padding: {\n '': 0,\n 'type=radio': '.5x',\n },\n radius: {\n '': 0,\n 'type=radio': '1cr',\n },\n fill: {\n '': '#clear',\n 'type=radio': '#surface-3',\n },\n flexShrink: 0,\n flexGrow: 0,\n\n $transition: '$tab-transition',\n '$tab-indicator-size': {\n '': '2bw',\n 'size=large': '1ow',\n },\n\n Prefix: {\n $: '>',\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n placeSelf: 'stretch',\n padding: {\n '': 0,\n 'type=default': '.5x 0 .5x 1x',\n },\n gap: {\n '': 0,\n 'type=default': '.5x',\n },\n border: {\n '': 0,\n 'type=file': 'right',\n },\n },\n\n Suffix: {\n $: '>',\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n placeSelf: 'stretch',\n padding: {\n '': 0,\n 'type=default': '.5x 1x .5x 0',\n },\n gap: {\n '': 0,\n 'type=default': '.5x',\n },\n border: {\n '': 0,\n 'type=file': 'left',\n },\n },\n\n // Wrapper for scroll area and scrollbar (scrollbar is positioned relative to this)\n ScrollWrapper: {\n $: '>',\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexShrink: 1,\n width: 'min 0',\n overflow: {\n '': 'hidden',\n 'type=radio': 'visible',\n },\n },\n\n Scroll: {\n $: '> ScrollWrapper >',\n position: 'relative',\n display: 'block',\n overflow: {\n '': 'auto hidden',\n 'type=radio': 'visible',\n },\n scrollbar: 'none',\n flexGrow: 1,\n width: '100%',\n // Add padding/margin for radio type to allow shadow to render outside\n padding: {\n '': 0,\n 'type=radio': '.5x',\n },\n margin: {\n '': 0,\n 'type=radio': '-.5x',\n },\n // Use multi-group fade with color tokens for smooth transitions\n fade: '2x left #tabs-fade-left #black, 2x right #tabs-fade-right #black',\n // ##name outputs --name-color (literal CSS property name)\n transition:\n '##tabs-fade-left $tab-transition ease-in, ##tabs-fade-right $tab-transition ease-in',\n\n // Transition transparent color: opaque (no fade) -> transparent (fade visible)\n '#tabs-fade-left': {\n '': 'rgb(0 0 0 / 1)',\n 'fade-left': 'rgb(0 0 0 / 0)',\n },\n '#tabs-fade-right': {\n '': 'rgb(0 0 0 / 1)',\n 'fade-right': 'rgb(0 0 0 / 0)',\n },\n },\n\n TabList: {\n $: '> ScrollWrapper > Scroll >',\n position: 'relative',\n display: 'grid',\n gridAutoFlow: 'column',\n gridAutoColumns: {\n '': 'auto',\n 'type=radio': '1fr',\n },\n gap: {\n '': 0,\n 'type=default': '1x',\n 'type=narrow': '2x',\n 'type=radio': '.5x',\n },\n placeContent: 'start',\n overflow: 'visible',\n width: {\n '': 'max-content',\n 'type=radio': '100%',\n },\n padding: '0 $tablist-padding',\n\n '$tablist-padding': {\n '': '0',\n 'type=default | type=narrow': '1x',\n },\n },\n\n // Size variable for actions (if ItemAction is used instead of TabsAction)\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n },\n\n // Custom horizontal scrollbar (tiny) - positioned relative to ScrollWrapper\n ScrollbarH: {\n $: '> ScrollWrapper >',\n position: 'absolute',\n bottom: '1px',\n left: '$scrollbar-h-left',\n height: '1ow',\n width: '$scrollbar-h-width',\n radius: 'round',\n fill: '#dark.35',\n opacity: {\n '': 0,\n 'focused | scrolling': 1,\n },\n transition: 'opacity 0.15s',\n pointerEvents: 'none',\n },\n },\n});\n\n// =============================================================================\n// Tab Button (extends Item)\n// =============================================================================\n\nexport const TabElement = tasty(Item, {\n as: 'button',\n styles: {\n radius: {\n '': false,\n 'type=radio | type=default': true,\n 'type=narrow': 'top',\n },\n color: {\n '': '#dark-02',\n 'type=narrow & (hovered & !selected)': '#primary-text',\n '(type=default | type=narrow) & selected': '#primary-text',\n disabled: '#disabled-surface-text',\n },\n fill: {\n '': '#clear',\n 'hovered & !type=narrow': '#dark.03',\n 'type=file': '#surface-3',\n 'type=file & hovered': '#surface-3.5',\n 'type=radio & hovered': '#surface.5',\n '(type=file | type=radio) & selected': '#surface',\n },\n border: {\n '': '#clear',\n 'type=file': '0 #clear',\n },\n preset: {\n '': 't3m',\n 'size=xsmall': 't4',\n },\n shadow: {\n '': '$selection-shadow',\n 'focused & focus-visible':\n 'inset 0 0 0 1bw #primary-text, $selection-shadow',\n editing: 'inset 0 0 0 1bw #primary-text, $selection-shadow',\n 'type=radio & selected': '$item-shadow',\n 'type=radio & selected & focused & focus-visible':\n '$item-shadow, inset 0 0 0 1bw #primary-text',\n },\n placeContent: {\n // extend\n 'type=radio': 'center',\n },\n gridTemplate: {\n // extend\n 'type=radio':\n '\"icon prefix label suffix rightIcon actions\" auto / max-content max-content max-content max-content max-content max-content',\n },\n '$selection-shadow': {\n '': 'inset 0 0 0 0 #primary',\n 'type=file & selected': 'inset 0 (-1 * $tab-indicator-size) 0 0 #primary',\n '!type=file': 'inset 0 0 0 0 #primary.0',\n },\n // Collapse horizontal padding for narrow type\n '$label-padding-left': {\n '': '$inline-padding',\n 'has-start-content': 0,\n 'type=narrow': 0,\n },\n '$label-padding-right': {\n '': '$inline-padding',\n 'has-end-content': 0,\n 'type=narrow': 0,\n },\n Label: {\n placeSelf: {\n '': 'center start',\n 'type=radio': 'center start',\n 'type=radio & !has-prefix & !has-suffix & !has-icon & !has-right-icon':\n 'center',\n },\n },\n Actions: {\n transition: false,\n },\n },\n});\n\n// =============================================================================\n// Tab Container (wrapper for tab + actions)\n// =============================================================================\n\nexport const TabContainer = tasty({\n styles: {\n position: 'relative',\n display: 'grid',\n margin: {\n '': 0,\n 'type=default': '.5x 0',\n },\n border: {\n '': 0,\n 'type=file': 'right',\n },\n cursor: {\n '': 'default',\n draggable: 'grab',\n dragging: 'grabbing',\n },\n\n // Size variable for actions (same as ItemButton's ActionsWrapper)\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n },\n\n // Actions rendered outside the button for accessibility\n Actions: {\n $: '>',\n position: 'absolute',\n inset: '1bw 1bw auto auto',\n display: 'flex',\n gap: '1bw',\n placeItems: 'center',\n placeContent: 'center end',\n pointerEvents: 'auto',\n height: 'min ($size - 2bw)',\n padding: '0 $side-padding',\n // Simple CSS opacity for show-on-hover\n opacity: {\n '': 1,\n 'auto-hide-actions': 0,\n 'auto-hide-actions & (active | :hover | :focus-within | :has([data-pressed]))': 1,\n },\n transition: 'opacity $transition',\n // Size variables (same as Item)\n '$action-size': 'min(max((2x + 2bw), ($size - 1x - 2bw)), (3x - 2bw))',\n '$side-padding': '(($size - $action-size - 2bw) / 2)',\n },\n },\n});\n\n// =============================================================================\n// Drop Indicator for Drag-and-Drop\n// =============================================================================\n\nexport const DropIndicatorElement = tasty({\n styles: {\n zIndex: 10,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: {\n '': 0,\n 'drop-target': 1,\n },\n fill: '#primary',\n width: '.5x',\n top: 0,\n bottom: 0,\n left: {\n '': 'auto',\n before: '-2px',\n },\n right: {\n '': 'auto',\n after: '-2px',\n },\n },\n});\n\n// =============================================================================\n// Tab Selection Indicator (for default type)\n// =============================================================================\n\nexport const TabIndicatorElement = tasty({\n styles: {\n position: 'absolute',\n bottom: '0',\n left: 0,\n height: '$tab-indicator-size',\n fill: '#primary',\n transition:\n 'left $tab-transition ease-in-out, width $tab-transition ease-in-out',\n pointerEvents: 'none',\n },\n});\n\n// =============================================================================\n// Tab Panel\n// =============================================================================\n\nexport const TabPanelElement = tasty({\n as: 'section',\n styles: {\n display: 'contents',\n hide: {\n '': true,\n active: false,\n },\n },\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  //#region src/components/navigation/Tabs/types.ts
3
3
  /**
4
4
  * Size mapping for radio type tabs.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { useCallback, useState } from "react";
3
3
 
4
4
  //#region src/components/navigation/Tabs/use-tab-editing.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { chainRaf } from "../../../utils/raf.js";
3
3
  import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
3
3
  import { Block } from "../../Block.js";
4
4
  import { Space } from "../../layout/Space.js";
@@ -72,7 +72,7 @@ const TabElement = tasty(Action, { styles: {
72
72
  fill: {
73
73
  "": "#dark.04",
74
74
  hovered: "#dark.08",
75
- "disabled, disabled & hover": "#white"
75
+ "disabled, disabled & hover": "#surface"
76
76
  },
77
77
  color: {
78
78
  "": "#dark-02",
@@ -1 +1 @@
1
- {"version":3,"file":"FileTabs.js","names":[],"sources":["../../../../src/components/organisms/FileTabs/FileTabs.tsx"],"sourcesContent":["import { Styles, tasty } from '@tenphi/tasty';\nimport {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { CloseIcon } from '../../../icons';\nimport { useLayoutEffect } from '../../../utils/react';\nimport { Action, Button, CubeActionProps } from '../../actions';\nimport { Block } from '../../Block';\nimport { CubeFlexProps, Flex } from '../../layout/Flex';\nimport { Space } from '../../layout/Space';\n\ninterface TabData {\n id: string | number;\n title?: string;\n isDirty?: boolean;\n}\n\ninterface FileTabContextValue {\n addTab: (tab: TabData) => void;\n setTab: (id: string | number) => void;\n removeTab: (tab: TabData) => void;\n currentTab?: string | number;\n setDirtyTab: (id: string | number, isDirty: boolean) => void;\n}\n\nconst FileTabsContext = createContext<FileTabContextValue>({\n addTab() {},\n removeTab() {},\n setTab() {},\n setDirtyTab() {},\n});\n\nconst TabsPanelElement = tasty(Space, {\n qa: 'TabsPanel',\n styles: {\n position: 'relative',\n overflow: 'auto hidden',\n top: '1bw',\n gap: '.5x',\n flexShrink: 0,\n whiteSpace: 'nowrap',\n scrollbar: 'styled',\n padding: '1ow 1ow 0 1ow',\n fade: {\n '': false,\n 'left-fade': '3x left',\n 'right-fade': '3x right',\n 'right-fade & left-fade': '3x left right',\n },\n transition: 'fade',\n '--scrollbar-radius': '1ow',\n '--scrollbar-width': '.75x',\n '--scrollbar-outline-width': '1px',\n },\n});\n\nconst TabsContainerElement = tasty(Flex, {\n qa: 'TabsContainer',\n styles: {\n flow: 'column',\n height: 'max 100%',\n width: 'max 100%',\n position: 'relative',\n },\n});\n\nconst DirtyBadge = tasty({\n element: 'DirtyBadge',\n styles: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: '1x',\n height: '1x',\n fill: '#dark.30',\n radius: 'round',\n },\n});\n\nconst TabElement = tasty(Action, {\n styles: {\n radius: '1r 1r 0 0',\n padding: '1x 1.5x',\n border: {\n '': 'left top right #clear',\n disabled: 'left top right #border',\n },\n fill: {\n '': '#dark.04',\n hovered: '#dark.08',\n 'disabled, disabled & hover': '#white',\n },\n color: {\n '': '#dark-02',\n 'disabled, hovered, hovered & disabled': '#dark',\n },\n cursor: {\n '': '$pointer',\n disabled: 'default',\n },\n fontWeight: 500,\n opacity: 1,\n preset: 'default',\n transform: {\n '': 'translate(0, 0)',\n disabled: 'translate(0, 1bw)',\n },\n transition: 'theme 0.2s',\n margin: '1bw bottom',\n\n DirtyBadge: {\n opacity: {\n '': 1,\n 'dirty & :hover': 0,\n },\n pointerEvents: {\n '': 'auto',\n 'dirty & :hover': 'none',\n },\n },\n\n CloseButton: {\n opacity: {\n '': 0,\n '!dirty | :hover': 1,\n },\n },\n },\n});\n\nconst CloseButton = tasty(Button, {\n element: 'CloseButton',\n type: 'neutral',\n icon: <CloseIcon />,\n label: 'Close Tab',\n styles: {\n width: '3x',\n height: '3x',\n padding: 0,\n },\n});\n\n/**\n * @deprecated consider using <Tabs /> instead\n */\nexport interface FileTabProps extends Omit<CubeActionProps, 'id'> {\n isDirty?: boolean;\n isDisabled?: boolean;\n children?: ReactNode;\n isClosable?: boolean;\n onClose?: () => void;\n}\n\nfunction Tab({\n isDirty,\n isDisabled,\n children,\n isClosable,\n onClose,\n ...props\n}: FileTabProps) {\n return (\n <TabElement\n mods={{\n dirty: isDirty,\n }}\n isDisabled={isDisabled}\n {...props}\n >\n <Space gap=\".75x\">\n <Block>{children}</Block>\n {(isClosable || isDirty) && (\n <Flex placeItems=\"center\" style={{ position: 'relative' }}>\n {isClosable ? <CloseButton onPress={onClose} /> : <div></div>}\n {isDirty ? <DirtyBadge /> : null}\n </Flex>\n )}\n </Space>\n </TabElement>\n );\n}\n\nexport interface CubeFileTabsProps extends CubeFlexProps {\n /** The initial active key in the tabs (uncontrolled). */\n defaultActiveKey?: string;\n /** The currently active key in the tabs (controlled). */\n activeKey?: string | number;\n /** Handler that is called when the tab is clicked. */\n onTabClick?: (string) => void;\n /** Handler that is called when the tab is closed. */\n onTabClose?: (string) => void;\n /** Styles for each tab pane */\n paneStyles?: Styles;\n /** Whether the tabs are closable */\n isClosable?: boolean;\n children?: ReactNode;\n}\n\nexport function FileTabs({\n defaultActiveKey,\n activeKey: activeKeyProp,\n onTabClick,\n onTabClose,\n paneStyles,\n isClosable = true,\n children,\n ...props\n}: CubeFileTabsProps) {\n const tabsRef = useRef<HTMLButtonElement>(null);\n const [tabs, setTabs] = useState<TabData[]>([]);\n const [activeKey, setActiveKey] = useState<string | number | undefined>(\n activeKeyProp || defaultActiveKey,\n );\n\n const [leftFade, setLeftFade] = useState(false);\n const [rightFade, setRightFade] = useState(false);\n\n function updateScroll() {\n const el = tabsRef && tabsRef.current;\n\n if (!el) return;\n\n setLeftFade(!!el.scrollLeft);\n setRightFade(\n el.scrollWidth !== el.offsetWidth &&\n !!(el.scrollWidth - el.offsetWidth - el.scrollLeft),\n );\n }\n\n useLayoutEffect(updateScroll, [tabs]);\n\n function scrollCurrentIntoView() {\n const el = tabsRef && tabsRef.current;\n\n if (!el) return;\n\n const current = el.querySelector('button[disabled]');\n\n if (!current) return;\n\n current.scrollIntoView({ behavior: 'smooth', inline: 'end', block: 'end' });\n }\n\n useEffect(() => {\n function update() {\n updateScroll();\n }\n\n if (tabsRef && tabsRef.current) {\n tabsRef.current.addEventListener('scroll', update);\n tabsRef.current.addEventListener('mousewheel', update);\n window.addEventListener('resize', update);\n }\n\n return () => {\n if (tabsRef && tabsRef.current) {\n tabsRef.current.removeEventListener('scroll', update);\n tabsRef.current.removeEventListener('mousewheel', update);\n }\n\n window.removeEventListener('resize', update);\n };\n }, [tabsRef]);\n\n useEffect(scrollCurrentIntoView, [activeKey]);\n\n useEffect(() => {\n setActiveKey(activeKeyProp);\n }, [activeKeyProp]);\n\n function getTab(tabs: TabData[], key: string | number): TabData | undefined {\n return tabs.find((tab) => tab.id === key);\n }\n\n function setTab(key: string | number) {\n if (getTab(tabs, key)) {\n setActiveKey(key);\n }\n }\n\n function addTab(tab: TabData) {\n setTabs((tabs) => {\n if (!getTab(tabs, tab.id)) {\n return [...tabs, tab];\n }\n\n return tabs;\n });\n }\n\n function setDirtyTab(id: string | number, isDirty: boolean) {\n setTabs((tabs) => {\n const tab = getTab(tabs, id);\n\n if (tab) {\n tab.isDirty = isDirty;\n\n return [...tabs];\n }\n\n return tabs;\n });\n }\n\n function handleClose(tab) {\n if (getTab(tabs, tab.id)) {\n onTabClose && onTabClose(tab.id);\n }\n }\n\n function removeTab(tab) {\n setTabs((tabs) => {\n const _tabs = tabs.filter((_tab) => _tab.id !== tab.id);\n\n setActiveKey((prevActiveKey) => {\n if (prevActiveKey === tab.id) {\n return _tabs[0] && _tabs[0].id;\n }\n\n return prevActiveKey;\n });\n\n return _tabs;\n });\n }\n\n function onPress(tab) {\n setTab(tab.id);\n onTabClick && onTabClick(tab.id);\n }\n\n return (\n <TabsContainerElement {...props}>\n <FileTabsContext.Provider\n value={{\n addTab,\n setTab,\n removeTab,\n setDirtyTab,\n currentTab: activeKey,\n }}\n >\n <TabsPanelElement\n ref={tabsRef}\n data-left-fade={leftFade || null}\n data-right-fade={rightFade || null}\n >\n {tabs.map((tab) => {\n return (\n <Tab\n key={tab.id}\n isClosable={isClosable}\n isDisabled={tab.id === activeKey || false}\n isDirty={tab.isDirty}\n onPress={() => onPress(tab)}\n onClose={() => isClosable && handleClose(tab)}\n >\n {tab.title}\n </Tab>\n );\n })}\n </TabsPanelElement>\n <Flex flexGrow={1} border=\"top\" {...(paneStyles || {})}>\n {children}\n </Flex>\n </FileTabsContext.Provider>\n </TabsContainerElement>\n );\n}\n\nexport interface CubeFileTabProps extends FileTabProps {\n id: string | number;\n title: string;\n}\n\nFileTabs.TabPane = function FileTabPane(allProps: CubeFileTabProps) {\n let { id, title, isDirty, children, ...props } = allProps;\n const { addTab, removeTab, currentTab, setDirtyTab } =\n useContext(FileTabsContext);\n\n useEffect(() => {\n const tabData = {\n id,\n title,\n isDirty,\n };\n\n addTab(tabData);\n\n return () => {\n removeTab(tabData);\n };\n }, [id, title]);\n\n useEffect(() => {\n setDirtyTab(id, isDirty || false);\n }, [isDirty]);\n\n const isCurrent = id === currentTab;\n\n return (\n <Block\n style={{ display: isCurrent ? 'block' : 'none', maxWidth: '100%' }}\n flexGrow={1}\n {...props}\n >\n {children}\n </Block>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"FileTabs.js","names":[],"sources":["../../../../src/components/organisms/FileTabs/FileTabs.tsx"],"sourcesContent":["import { Styles, tasty } from '@tenphi/tasty';\nimport {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { CloseIcon } from '../../../icons';\nimport { useLayoutEffect } from '../../../utils/react';\nimport { Action, Button, CubeActionProps } from '../../actions';\nimport { Block } from '../../Block';\nimport { CubeFlexProps, Flex } from '../../layout/Flex';\nimport { Space } from '../../layout/Space';\n\ninterface TabData {\n id: string | number;\n title?: string;\n isDirty?: boolean;\n}\n\ninterface FileTabContextValue {\n addTab: (tab: TabData) => void;\n setTab: (id: string | number) => void;\n removeTab: (tab: TabData) => void;\n currentTab?: string | number;\n setDirtyTab: (id: string | number, isDirty: boolean) => void;\n}\n\nconst FileTabsContext = createContext<FileTabContextValue>({\n addTab() {},\n removeTab() {},\n setTab() {},\n setDirtyTab() {},\n});\n\nconst TabsPanelElement = tasty(Space, {\n qa: 'TabsPanel',\n styles: {\n position: 'relative',\n overflow: 'auto hidden',\n top: '1bw',\n gap: '.5x',\n flexShrink: 0,\n whiteSpace: 'nowrap',\n scrollbar: 'styled',\n padding: '1ow 1ow 0 1ow',\n fade: {\n '': false,\n 'left-fade': '3x left',\n 'right-fade': '3x right',\n 'right-fade & left-fade': '3x left right',\n },\n transition: 'fade',\n '--scrollbar-radius': '1ow',\n '--scrollbar-width': '.75x',\n '--scrollbar-outline-width': '1px',\n },\n});\n\nconst TabsContainerElement = tasty(Flex, {\n qa: 'TabsContainer',\n styles: {\n flow: 'column',\n height: 'max 100%',\n width: 'max 100%',\n position: 'relative',\n },\n});\n\nconst DirtyBadge = tasty({\n element: 'DirtyBadge',\n styles: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: '1x',\n height: '1x',\n fill: '#dark.30',\n radius: 'round',\n },\n});\n\nconst TabElement = tasty(Action, {\n styles: {\n radius: '1r 1r 0 0',\n padding: '1x 1.5x',\n border: {\n '': 'left top right #clear',\n disabled: 'left top right #border',\n },\n fill: {\n '': '#dark.04',\n hovered: '#dark.08',\n 'disabled, disabled & hover': '#surface',\n },\n color: {\n '': '#dark-02',\n 'disabled, hovered, hovered & disabled': '#dark',\n },\n cursor: {\n '': '$pointer',\n disabled: 'default',\n },\n fontWeight: 500,\n opacity: 1,\n preset: 'default',\n transform: {\n '': 'translate(0, 0)',\n disabled: 'translate(0, 1bw)',\n },\n transition: 'theme 0.2s',\n margin: '1bw bottom',\n\n DirtyBadge: {\n opacity: {\n '': 1,\n 'dirty & :hover': 0,\n },\n pointerEvents: {\n '': 'auto',\n 'dirty & :hover': 'none',\n },\n },\n\n CloseButton: {\n opacity: {\n '': 0,\n '!dirty | :hover': 1,\n },\n },\n },\n});\n\nconst CloseButton = tasty(Button, {\n element: 'CloseButton',\n type: 'neutral',\n icon: <CloseIcon />,\n label: 'Close Tab',\n styles: {\n width: '3x',\n height: '3x',\n padding: 0,\n },\n});\n\n/**\n * @deprecated consider using <Tabs /> instead\n */\nexport interface FileTabProps extends Omit<CubeActionProps, 'id'> {\n isDirty?: boolean;\n isDisabled?: boolean;\n children?: ReactNode;\n isClosable?: boolean;\n onClose?: () => void;\n}\n\nfunction Tab({\n isDirty,\n isDisabled,\n children,\n isClosable,\n onClose,\n ...props\n}: FileTabProps) {\n return (\n <TabElement\n mods={{\n dirty: isDirty,\n }}\n isDisabled={isDisabled}\n {...props}\n >\n <Space gap=\".75x\">\n <Block>{children}</Block>\n {(isClosable || isDirty) && (\n <Flex placeItems=\"center\" style={{ position: 'relative' }}>\n {isClosable ? <CloseButton onPress={onClose} /> : <div></div>}\n {isDirty ? <DirtyBadge /> : null}\n </Flex>\n )}\n </Space>\n </TabElement>\n );\n}\n\nexport interface CubeFileTabsProps extends CubeFlexProps {\n /** The initial active key in the tabs (uncontrolled). */\n defaultActiveKey?: string;\n /** The currently active key in the tabs (controlled). */\n activeKey?: string | number;\n /** Handler that is called when the tab is clicked. */\n onTabClick?: (string) => void;\n /** Handler that is called when the tab is closed. */\n onTabClose?: (string) => void;\n /** Styles for each tab pane */\n paneStyles?: Styles;\n /** Whether the tabs are closable */\n isClosable?: boolean;\n children?: ReactNode;\n}\n\nexport function FileTabs({\n defaultActiveKey,\n activeKey: activeKeyProp,\n onTabClick,\n onTabClose,\n paneStyles,\n isClosable = true,\n children,\n ...props\n}: CubeFileTabsProps) {\n const tabsRef = useRef<HTMLButtonElement>(null);\n const [tabs, setTabs] = useState<TabData[]>([]);\n const [activeKey, setActiveKey] = useState<string | number | undefined>(\n activeKeyProp || defaultActiveKey,\n );\n\n const [leftFade, setLeftFade] = useState(false);\n const [rightFade, setRightFade] = useState(false);\n\n function updateScroll() {\n const el = tabsRef && tabsRef.current;\n\n if (!el) return;\n\n setLeftFade(!!el.scrollLeft);\n setRightFade(\n el.scrollWidth !== el.offsetWidth &&\n !!(el.scrollWidth - el.offsetWidth - el.scrollLeft),\n );\n }\n\n useLayoutEffect(updateScroll, [tabs]);\n\n function scrollCurrentIntoView() {\n const el = tabsRef && tabsRef.current;\n\n if (!el) return;\n\n const current = el.querySelector('button[disabled]');\n\n if (!current) return;\n\n current.scrollIntoView({ behavior: 'smooth', inline: 'end', block: 'end' });\n }\n\n useEffect(() => {\n function update() {\n updateScroll();\n }\n\n if (tabsRef && tabsRef.current) {\n tabsRef.current.addEventListener('scroll', update);\n tabsRef.current.addEventListener('mousewheel', update);\n window.addEventListener('resize', update);\n }\n\n return () => {\n if (tabsRef && tabsRef.current) {\n tabsRef.current.removeEventListener('scroll', update);\n tabsRef.current.removeEventListener('mousewheel', update);\n }\n\n window.removeEventListener('resize', update);\n };\n }, [tabsRef]);\n\n useEffect(scrollCurrentIntoView, [activeKey]);\n\n useEffect(() => {\n setActiveKey(activeKeyProp);\n }, [activeKeyProp]);\n\n function getTab(tabs: TabData[], key: string | number): TabData | undefined {\n return tabs.find((tab) => tab.id === key);\n }\n\n function setTab(key: string | number) {\n if (getTab(tabs, key)) {\n setActiveKey(key);\n }\n }\n\n function addTab(tab: TabData) {\n setTabs((tabs) => {\n if (!getTab(tabs, tab.id)) {\n return [...tabs, tab];\n }\n\n return tabs;\n });\n }\n\n function setDirtyTab(id: string | number, isDirty: boolean) {\n setTabs((tabs) => {\n const tab = getTab(tabs, id);\n\n if (tab) {\n tab.isDirty = isDirty;\n\n return [...tabs];\n }\n\n return tabs;\n });\n }\n\n function handleClose(tab) {\n if (getTab(tabs, tab.id)) {\n onTabClose && onTabClose(tab.id);\n }\n }\n\n function removeTab(tab) {\n setTabs((tabs) => {\n const _tabs = tabs.filter((_tab) => _tab.id !== tab.id);\n\n setActiveKey((prevActiveKey) => {\n if (prevActiveKey === tab.id) {\n return _tabs[0] && _tabs[0].id;\n }\n\n return prevActiveKey;\n });\n\n return _tabs;\n });\n }\n\n function onPress(tab) {\n setTab(tab.id);\n onTabClick && onTabClick(tab.id);\n }\n\n return (\n <TabsContainerElement {...props}>\n <FileTabsContext.Provider\n value={{\n addTab,\n setTab,\n removeTab,\n setDirtyTab,\n currentTab: activeKey,\n }}\n >\n <TabsPanelElement\n ref={tabsRef}\n data-left-fade={leftFade || null}\n data-right-fade={rightFade || null}\n >\n {tabs.map((tab) => {\n return (\n <Tab\n key={tab.id}\n isClosable={isClosable}\n isDisabled={tab.id === activeKey || false}\n isDirty={tab.isDirty}\n onPress={() => onPress(tab)}\n onClose={() => isClosable && handleClose(tab)}\n >\n {tab.title}\n </Tab>\n );\n })}\n </TabsPanelElement>\n <Flex flexGrow={1} border=\"top\" {...(paneStyles || {})}>\n {children}\n </Flex>\n </FileTabsContext.Provider>\n </TabsContainerElement>\n );\n}\n\nexport interface CubeFileTabProps extends FileTabProps {\n id: string | number;\n title: string;\n}\n\nFileTabs.TabPane = function FileTabPane(allProps: CubeFileTabProps) {\n let { id, title, isDirty, children, ...props } = allProps;\n const { addTab, removeTab, currentTab, setDirtyTab } =\n useContext(FileTabsContext);\n\n useEffect(() => {\n const tabData = {\n id,\n title,\n isDirty,\n };\n\n addTab(tabData);\n\n return () => {\n removeTab(tabData);\n };\n }, [id, title]);\n\n useEffect(() => {\n setDirtyTab(id, isDirty || false);\n }, [isDirty]);\n\n const isCurrent = id === currentTab;\n\n return (\n <Block\n style={{ display: isCurrent ? 'block' : 'none', maxWidth: '100%' }}\n flexGrow={1}\n {...props}\n >\n {children}\n </Block>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AA+BA,MAAM,kBAAkB,cAAmC;CACzD,SAAS;CACT,YAAY;CACZ,SAAS;CACT,cAAc;CACf,CAAC;AAEF,MAAM,mBAAmB,MAAM,OAAO;CACpC,IAAI;CACJ,QAAQ;EACN,UAAU;EACV,UAAU;EACV,KAAK;EACL,KAAK;EACL,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,SAAS;EACT,MAAM;GACJ,IAAI;GACJ,aAAa;GACb,cAAc;GACd,0BAA0B;GAC3B;EACD,YAAY;EACZ,sBAAsB;EACtB,qBAAqB;EACrB,6BAA6B;EAC9B;CACF,CAAC;AAEF,MAAM,uBAAuB,MAAM,MAAM;CACvC,IAAI;CACJ,QAAQ;EACN,MAAM;EACN,QAAQ;EACR,OAAO;EACP,UAAU;EACX;CACF,CAAC;AAEF,MAAM,aAAa,MAAM;CACvB,SAAS;CACT,QAAQ;EACN,UAAU;EACV,KAAK;EACL,MAAM;EACN,WAAW;EACX,OAAO;EACP,QAAQ;EACR,MAAM;EACN,QAAQ;EACT;CACF,CAAC;AAEF,MAAM,aAAa,MAAM,QAAQ,EAC/B,QAAQ;CACN,QAAQ;CACR,SAAS;CACT,QAAQ;EACN,IAAI;EACJ,UAAU;EACX;CACD,MAAM;EACJ,IAAI;EACJ,SAAS;EACT,8BAA8B;EAC/B;CACD,OAAO;EACL,IAAI;EACJ,yCAAyC;EAC1C;CACD,QAAQ;EACN,IAAI;EACJ,UAAU;EACX;CACD,YAAY;CACZ,SAAS;CACT,QAAQ;CACR,WAAW;EACT,IAAI;EACJ,UAAU;EACX;CACD,YAAY;CACZ,QAAQ;CAER,YAAY;EACV,SAAS;GACP,IAAI;GACJ,kBAAkB;GACnB;EACD,eAAe;GACb,IAAI;GACJ,kBAAkB;GACnB;EACF;CAED,aAAa,EACX,SAAS;EACP,IAAI;EACJ,mBAAmB;EACpB,EACF;CACF,EACF,CAAC;AAEF,MAAM,cAAc,MAAM,QAAQ;CAChC,SAAS;CACT,MAAM;CACN,MAAM,oBAAC,cAAY;CACnB,OAAO;CACP,QAAQ;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACV;CACF,CAAC;AAaF,SAAS,IAAI,EACX,SACA,YACA,UACA,YACA,SACA,GAAG,SACY;AACf,QACE,oBAAC;EACC,MAAM,EACJ,OAAO,SACR;EACW;EACZ,GAAI;YAEJ,qBAAC;GAAM,KAAI;cACT,oBAAC,SAAO,WAAiB,GACvB,cAAc,YACd,qBAAC;IAAK,YAAW;IAAS,OAAO,EAAE,UAAU,YAAY;eACtD,aAAa,oBAAC,eAAY,SAAS,UAAW,GAAG,oBAAC,UAAU,EAC5D,UAAU,oBAAC,eAAa,GAAG;KACvB;IAEH;GACG;;AAoBjB,SAAgB,SAAS,EACvB,kBACA,WAAW,eACX,YACA,YACA,YACA,aAAa,MACb,UACA,GAAG,SACiB;CACpB,MAAM,UAAU,OAA0B,KAAK;CAC/C,MAAM,CAAC,MAAM,WAAW,SAAoB,EAAE,CAAC;CAC/C,MAAM,CAAC,WAAW,gBAAgB,SAChC,iBAAiB,iBAClB;CAED,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAC/C,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CAEjD,SAAS,eAAe;EACtB,MAAM,KAAK,WAAW,QAAQ;AAE9B,MAAI,CAAC,GAAI;AAET,cAAY,CAAC,CAAC,GAAG,WAAW;AAC5B,eACE,GAAG,gBAAgB,GAAG,eACpB,CAAC,EAAE,GAAG,cAAc,GAAG,cAAc,GAAG,YAC3C;;AAGH,mBAAgB,cAAc,CAAC,KAAK,CAAC;CAErC,SAAS,wBAAwB;EAC/B,MAAM,KAAK,WAAW,QAAQ;AAE9B,MAAI,CAAC,GAAI;EAET,MAAM,UAAU,GAAG,cAAc,mBAAmB;AAEpD,MAAI,CAAC,QAAS;AAEd,UAAQ,eAAe;GAAE,UAAU;GAAU,QAAQ;GAAO,OAAO;GAAO,CAAC;;AAG7E,iBAAgB;EACd,SAAS,SAAS;AAChB,iBAAc;;AAGhB,MAAI,WAAW,QAAQ,SAAS;AAC9B,WAAQ,QAAQ,iBAAiB,UAAU,OAAO;AAClD,WAAQ,QAAQ,iBAAiB,cAAc,OAAO;AACtD,UAAO,iBAAiB,UAAU,OAAO;;AAG3C,eAAa;AACX,OAAI,WAAW,QAAQ,SAAS;AAC9B,YAAQ,QAAQ,oBAAoB,UAAU,OAAO;AACrD,YAAQ,QAAQ,oBAAoB,cAAc,OAAO;;AAG3D,UAAO,oBAAoB,UAAU,OAAO;;IAE7C,CAAC,QAAQ,CAAC;AAEb,WAAU,uBAAuB,CAAC,UAAU,CAAC;AAE7C,iBAAgB;AACd,eAAa,cAAc;IAC1B,CAAC,cAAc,CAAC;CAEnB,SAAS,OAAO,MAAiB,KAA2C;AAC1E,SAAO,KAAK,MAAM,QAAQ,IAAI,OAAO,IAAI;;CAG3C,SAAS,OAAO,KAAsB;AACpC,MAAI,OAAO,MAAM,IAAI,CACnB,cAAa,IAAI;;CAIrB,SAAS,OAAO,KAAc;AAC5B,WAAS,SAAS;AAChB,OAAI,CAAC,OAAO,MAAM,IAAI,GAAG,CACvB,QAAO,CAAC,GAAG,MAAM,IAAI;AAGvB,UAAO;IACP;;CAGJ,SAAS,YAAY,IAAqB,SAAkB;AAC1D,WAAS,SAAS;GAChB,MAAM,MAAM,OAAO,MAAM,GAAG;AAE5B,OAAI,KAAK;AACP,QAAI,UAAU;AAEd,WAAO,CAAC,GAAG,KAAK;;AAGlB,UAAO;IACP;;CAGJ,SAAS,YAAY,KAAK;AACxB,MAAI,OAAO,MAAM,IAAI,GAAG,CACtB,eAAc,WAAW,IAAI,GAAG;;CAIpC,SAAS,UAAU,KAAK;AACtB,WAAS,SAAS;GAChB,MAAM,QAAQ,KAAK,QAAQ,SAAS,KAAK,OAAO,IAAI,GAAG;AAEvD,iBAAc,kBAAkB;AAC9B,QAAI,kBAAkB,IAAI,GACxB,QAAO,MAAM,MAAM,MAAM,GAAG;AAG9B,WAAO;KACP;AAEF,UAAO;IACP;;CAGJ,SAAS,QAAQ,KAAK;AACpB,SAAO,IAAI,GAAG;AACd,gBAAc,WAAW,IAAI,GAAG;;AAGlC,QACE,oBAAC;EAAqB,GAAI;YACxB,qBAAC,gBAAgB;GACf,OAAO;IACL;IACA;IACA;IACA;IACA,YAAY;IACb;cAED,oBAAC;IACC,KAAK;IACL,kBAAgB,YAAY;IAC5B,mBAAiB,aAAa;cAE7B,KAAK,KAAK,QAAQ;AACjB,YACE,oBAAC;MAEa;MACZ,YAAY,IAAI,OAAO,aAAa;MACpC,SAAS,IAAI;MACb,eAAe,QAAQ,IAAI;MAC3B,eAAe,cAAc,YAAY,IAAI;gBAE5C,IAAI;QAPA,IAAI,GAQL;MAER;KACe,EACnB,oBAAC;IAAK,UAAU;IAAG,QAAO;IAAM,GAAK,cAAc,EAAE;IAClD;KACI;IACkB;GACN;;AAS3B,SAAS,UAAU,SAAS,YAAY,UAA4B;CAClE,IAAI,EAAE,IAAI,OAAO,SAAS,UAAU,GAAG,UAAU;CACjD,MAAM,EAAE,QAAQ,WAAW,YAAY,gBACrC,WAAW,gBAAgB;AAE7B,iBAAgB;EACd,MAAM,UAAU;GACd;GACA;GACA;GACD;AAED,SAAO,QAAQ;AAEf,eAAa;AACX,aAAU,QAAQ;;IAEnB,CAAC,IAAI,MAAM,CAAC;AAEf,iBAAgB;AACd,cAAY,IAAI,WAAW,MAAM;IAChC,CAAC,QAAQ,CAAC;AAIb,QACE,oBAAC;EACC,OAAO;GAAE,SAJK,OAAO,aAIS,UAAU;GAAQ,UAAU;GAAQ;EAClE,UAAU;EACV,GAAI;EAEH;GACK"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { _Text } from "../../content/Text.js";
3
3
  import { _Title } from "../../content/Title.js";
4
4
  import { Card } from "../../content/Card/Card.js";
@@ -11,7 +11,7 @@ function StatsCard({ title, value, suffix, ...props }) {
11
11
  placeContent: "space-between",
12
12
  gap: "1x",
13
13
  border: false,
14
- shadow: "0 2px 6px #dark.10",
14
+ shadow: "$shadow",
15
15
  padding: "2.5x",
16
16
  ...props,
17
17
  children: [/* @__PURE__ */ jsx(_Title, {
@@ -1 +1 @@
1
- {"version":3,"file":"StatsCard.js","names":["Title","Text"],"sources":["../../../../src/components/organisms/StatsCard/StatsCard.tsx"],"sourcesContent":["import { ReactNode } from 'react';\n\nimport { Card, CubeCardProps } from '../../content/Card/Card';\nimport { Text } from '../../content/Text';\nimport { Title } from '../../content/Title';\n\nexport interface CubeStatsCard extends CubeCardProps {\n title?: string | ReactNode;\n value?: string | number | ReactNode;\n suffix?: string | number | ReactNode;\n}\n\nexport function StatsCard({ title, value, suffix, ...props }: CubeStatsCard) {\n return (\n <Card\n display=\"flex\"\n placeContent=\"space-between\"\n gap=\"1x\"\n border={false}\n shadow=\"0 2px 6px #dark.10\"\n padding=\"2.5x\"\n {...props}\n >\n <Title nowrap level={4} color=\"#minor\" preset=\"default\">\n {title}\n </Title>\n <Text.Strong preset=\"h3\">\n {value} {suffix}\n </Text.Strong>\n </Card>\n );\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,UAAU,EAAE,OAAO,OAAO,QAAQ,GAAG,SAAwB;AAC3E,QACE,qBAAC;EACC,SAAQ;EACR,cAAa;EACb,KAAI;EACJ,QAAQ;EACR,QAAO;EACP,SAAQ;EACR,GAAI;aAEJ,oBAACA;GAAM;GAAO,OAAO;GAAG,OAAM;GAAS,QAAO;aAC3C;IACK,EACR,qBAACC,MAAK;GAAO,QAAO;;IACjB;IAAM;IAAE;;IACG;GACT"}
1
+ {"version":3,"file":"StatsCard.js","names":["Title","Text"],"sources":["../../../../src/components/organisms/StatsCard/StatsCard.tsx"],"sourcesContent":["import { ReactNode } from 'react';\n\nimport { Card, CubeCardProps } from '../../content/Card/Card';\nimport { Text } from '../../content/Text';\nimport { Title } from '../../content/Title';\n\nexport interface CubeStatsCard extends CubeCardProps {\n title?: string | ReactNode;\n value?: string | number | ReactNode;\n suffix?: string | number | ReactNode;\n}\n\nexport function StatsCard({ title, value, suffix, ...props }: CubeStatsCard) {\n return (\n <Card\n display=\"flex\"\n placeContent=\"space-between\"\n gap=\"1x\"\n border={false}\n shadow=\"$shadow\"\n padding=\"2.5x\"\n {...props}\n >\n <Title nowrap level={4} color=\"#minor\" preset=\"default\">\n {title}\n </Title>\n <Text.Strong preset=\"h3\">\n {value} {suffix}\n </Text.Strong>\n </Card>\n );\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,UAAU,EAAE,OAAO,OAAO,QAAQ,GAAG,SAAwB;AAC3E,QACE,qBAAC;EACC,SAAQ;EACR,cAAa;EACb,KAAI;EACJ,QAAQ;EACR,QAAO;EACP,SAAQ;EACR,GAAI;aAEJ,oBAACA;GAAM;GAAO,OAAO;GAAG,OAAM;GAAS,QAAO;aAC3C;IACK,EACR,qBAACC,MAAK;GAAO,QAAO;;IACjB;IAAM;IAAE;;IACG;GACT"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { _Title } from "../../content/Title.js";
3
3
  import { useProviderProps } from "../../../provider.js";
4
4
  import { Space } from "../../layout/Space.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { tasty } from "@tenphi/tasty";
3
3
  import { useRef } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { CalendarCell } from "./CalendarCell.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { _Title } from "../../content/Title.js";
3
3
  import { useProviderProps } from "../../../provider.js";
4
4
  import { Space } from "../../layout/Space.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { Button } from "../../actions/index.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { chain } from "../../../utils/react/chain.js";
3
3
  import { Paragraph } from "../../content/Paragraph.js";
4
4
  import { _Title } from "../../content/Title.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { AlertDialogZone } from "./AlertDialogZone.js";
3
3
  import { createContext, useContext, useMemo, useRef, useState } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { Portal } from "../../portal/Portal.js";
3
3
  import { DialogContainer } from "../Dialog/DialogContainer.js";
4
4
  import { _AlertDialog } from "./AlertDialog.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | 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 { SlotProvider } from "../../../utils/react/Slots.js";
@@ -25,7 +25,7 @@ const DialogElement = tasty({
25
25
  styles: {
26
26
  display: "flex",
27
27
  flow: "column",
28
- fill: "#white",
28
+ fill: "#surface",
29
29
  pointerEvents: "auto",
30
30
  outline: 0,
31
31
  position: {
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.js","names":["ItemButton","mergeProps"],"sources":["../../../../src/components/overlays/Dialog/Dialog.tsx"],"sourcesContent":["import { createFocusManager } from '@react-aria/focus';\nimport { useDOMRef } from '@react-spectrum/utils';\nimport { DOMRef } from '@react-types/shared';\nimport {\n BASE_STYLES,\n BaseProps,\n BaseStyleProps,\n BLOCK_STYLES,\n BlockStyleProps,\n DIMENSION_STYLES,\n DimensionStyleProps,\n FLOW_STYLES,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { forwardRef, ReactElement, useEffect, useMemo } from 'react';\nimport {\n AriaDialogProps,\n DismissButton,\n FocusScope,\n useDialog,\n useMessageFormatter,\n} from 'react-aria';\n\nimport { CloseIcon } from '../../../icons';\nimport { mergeProps, SlotProvider } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemButton } from '../../actions';\nimport { useOpenTransitionContext } from '../Modal/OpenTransitionContext';\n\nimport { useDialogContext } from './context';\n\nconst STYLES_LIST = [\n ...BASE_STYLES,\n ...DIMENSION_STYLES,\n ...BLOCK_STYLES,\n ...FLOW_STYLES,\n];\n\nconst DialogElement = tasty({\n as: 'section',\n styles: {\n display: 'flex',\n flow: 'column',\n fill: '#white',\n pointerEvents: 'auto',\n outline: 0,\n position: {\n '': 'relative',\n 'type=panel': 'absolute',\n },\n width: {\n '': '$min-dialog-size $dialog-size (100dvw - 8x)',\n 'type=fullscreen': '(100dvw - 8x) (100dvw - 8x)',\n 'type=fullscreenTakeover': '100dvw 100dvw',\n 'type=panel': 'auto',\n },\n height: {\n '': 'auto (100dvh - 8x)',\n 'type=fullscreen': '(100dvh - 8x) (100dvh - 8x)',\n 'type=fullscreenTakeover | type=panel': '100dvh 100dvh',\n 'type=popover': 'initial initial (50dvh - 5x)',\n },\n gap: 0,\n border: {\n '': false,\n 'type=popover': true,\n },\n radius: {\n '': '1cr',\n 'type=tray': '1cr top',\n 'type=fullscreenTakeover': '0r',\n },\n shadow: {\n '': '$dialog-shadow',\n 'type=popover | type=panel': '$shadow',\n },\n top: {\n '': false,\n 'type=modal': '((50vh - 50%) / -3)',\n 'type=panel': 'auto',\n },\n '$dialog-title-padding-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-content-padding-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-padding-h': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-footer-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-content-gap': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n },\n});\n\nconst CloseButton = tasty(ItemButton, {\n qa: 'ModalCloseButton',\n type: 'neutral',\n styles: {\n position: 'absolute',\n top: '1x',\n right: '1x',\n },\n});\n\nconst sizeMap = {\n S: 'small',\n M: 'medium',\n L: 'large',\n};\nconst sizePxMap = {\n small: 360,\n medium: 479,\n large: 798,\n};\n\nconst intlMessages = {\n 'en-US': {\n dismiss: 'Dismiss',\n alert: 'Alert',\n },\n};\n\nexport interface CubeDialogProps\n extends Omit<BaseProps, 'role'>,\n AriaDialogProps,\n BaseStyleProps,\n BlockStyleProps,\n DimensionStyleProps {\n /** The size of the dialog */\n size?: 'S' | 'M' | 'L' | 'small' | 'medium' | 'large';\n /** Whether the dialog is dismissable */\n isDismissable?: boolean;\n /** Trigger when the dialog is dismissed */\n onDismiss?: (arg?: any) => void;\n /** That you can replace the close icon with */\n closeIcon?: ReactElement;\n closeButtonStyles?: Styles;\n role?: 'dialog' | 'alertdialog';\n}\n\n/**\n * Dialogs are windows containing contextual information, tasks, or workflows that appear over the user interface.\n * Depending on the kind of Dialog, further interactions may be blocked until the Dialog is acknowledged.\n */\nexport const Dialog = forwardRef(function Dialog(\n props: CubeDialogProps,\n ref: DOMRef<HTMLDivElement>,\n) {\n const transitionContext = useOpenTransitionContext();\n\n const isEntered = transitionContext?.transitionState === 'entered';\n\n const context = useDialogContext();\n\n const content = useMemo(() => {\n return <DialogContent key=\"content\" {...props} ref={ref} />;\n }, [props, ref]);\n\n const shouldContainFocus =\n isEntered && !!context.isOpen && context.type !== 'panel';\n\n return (\n // This component traps the focus inside the dialog and restores it on close.\n <FocusScope restoreFocus contain={shouldContainFocus}>\n {content}\n </FocusScope>\n );\n});\n\nconst DialogContent = forwardRef(function DialogContent(\n props: CubeDialogProps,\n ref: DOMRef<HTMLDivElement>,\n) {\n let { type = 'modal', ...contextProps } = useDialogContext();\n\n let {\n qa,\n children,\n size = 'M',\n isDismissable = contextProps.isDismissable,\n onDismiss = contextProps.onClose,\n closeIcon,\n closeButtonStyles,\n style,\n ...otherProps\n } = props;\n\n size = sizeMap[size.toUpperCase()] || size;\n\n const styles: Styles = extractStyles(otherProps, STYLES_LIST);\n\n let formatMessage = useMessageFormatter(intlMessages);\n\n let domRef = useDOMRef(ref);\n let { dialogProps, titleProps } = useDialog(\n mergeProps(contextProps, props),\n domRef,\n );\n\n // If rendered in a popover or tray there won't be a visible dismiss button,\n // so we render a hidden one for screen readers.\n let dismissButton;\n if (type === 'popover' || type === 'tray') {\n dismissButton = <DismissButton onDismiss={onDismiss} />;\n }\n\n // Focus the first focusable element in the dialog when it opens.\n //\n // We also re-run the priority focus logic when the dialog <section>\n // itself is the active element. This recovers from a race that occurs\n // when a popover-based component (FilterPicker, Picker, Select, …) opens\n // inside another contained Dialog: React's native `autoFocus` on the\n // inner control fires during the mutation phase, before the popover's\n // FocusScope registers in react-aria's focus-scope tree, so the outer\n // FocusScope yanks focus back. useDialog then defaults focus to the\n // dialog <section>; without re-promoting it here, the priority element\n // (e.g. the search input) is never focused.\n useEffect(() => {\n if (contextProps.isOpen) {\n setTimeout(() => {\n if (!domRef.current) return;\n\n const activeElement = document.activeElement;\n const isFocusOutsideDialog = !domRef.current.contains(activeElement);\n const isFocusOnDialogShell = activeElement === domRef.current;\n\n // Priority 1: autofocus input or primary button\n const priorityElement = domRef.current.querySelector(\n 'input[data-autofocus], button[type=\"submit\"], button[data-type=\"primary\"]',\n ) as HTMLElement | null;\n\n if (priorityElement && (isFocusOutsideDialog || isFocusOnDialogShell)) {\n priorityElement.focus();\n return;\n }\n\n if (isFocusOutsideDialog) {\n // Fallback: focus first tabbable element, or dialog itself\n const focusManager = createFocusManager(domRef);\n\n if (!focusManager.focusFirst({ tabbable: true })) {\n domRef.current.focus();\n }\n }\n });\n }\n }, [contextProps.isOpen]);\n\n // let hasHeader = useHasChild('[data-id=\"Header\"]', domRef);\n // let hasFooter = useHasChild('[data-id=\"Footer\"]', domRef);\n\n let slots = {\n title: {\n level: 2,\n preset: 'h4',\n ...titleProps,\n },\n content: {\n styles: {\n flexGrow: 1,\n padding: '$dialog-content-padding-v $dialog-padding-h',\n gap: '$dialog-content-gap',\n height: {\n '': 'max (100% - (2 * $dialog-content-padding-v))',\n ':last-child': 'max (100% - $dialog-content-padding-v)',\n },\n },\n },\n header: {\n ellipsis: true,\n styles: {\n display: 'flex',\n flow: 'row',\n gap: '1x',\n placeItems: 'center stretch',\n placeContent: 'space-between',\n padding: `$dialog-title-padding-v ${\n isDismissable ? '($dialog-padding-h + 4x)' : '$dialog-padding-h'\n } $dialog-title-padding-v $dialog-padding-h`,\n border: 'bottom',\n },\n },\n footer: {\n styles: {\n display: 'flex',\n gap: '1x',\n flow: 'row-reverse',\n placeItems: 'baseline stretch',\n placeContent: 'space-between',\n padding: '$dialog-footer-v $dialog-padding-h',\n },\n },\n buttonGroup: {\n styles: {\n flow: 'row-reverse',\n },\n },\n };\n\n return (\n <DialogElement\n ref={domRef}\n data-id=\"Dialog\"\n data-qa={qa || 'Dialog'}\n styles={styles}\n as=\"section\"\n {...dialogProps}\n mods={{ dismissable: isDismissable }}\n style={{\n '--dialog-size': `${sizePxMap[size] || sizePxMap.small}px`,\n ...style,\n }}\n data-type={type}\n data-size={size}\n >\n {dismissButton}\n\n <SlotProvider slots={slots}>\n {isDismissable && (\n <CloseButton\n icon={closeIcon || <CloseIcon size={20} />}\n label={formatMessage('dismiss')}\n onPress={() => onDismiss && onDismiss()}\n />\n )}\n {children}\n </SlotProvider>\n </DialogElement>\n );\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"Dialog.js","names":["ItemButton","mergeProps"],"sources":["../../../../src/components/overlays/Dialog/Dialog.tsx"],"sourcesContent":["import { createFocusManager } from '@react-aria/focus';\nimport { useDOMRef } from '@react-spectrum/utils';\nimport { DOMRef } from '@react-types/shared';\nimport {\n BASE_STYLES,\n BaseProps,\n BaseStyleProps,\n BLOCK_STYLES,\n BlockStyleProps,\n DIMENSION_STYLES,\n DimensionStyleProps,\n FLOW_STYLES,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { forwardRef, ReactElement, useEffect, useMemo } from 'react';\nimport {\n AriaDialogProps,\n DismissButton,\n FocusScope,\n useDialog,\n useMessageFormatter,\n} from 'react-aria';\n\nimport { CloseIcon } from '../../../icons';\nimport { mergeProps, SlotProvider } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemButton } from '../../actions';\nimport { useOpenTransitionContext } from '../Modal/OpenTransitionContext';\n\nimport { useDialogContext } from './context';\n\nconst STYLES_LIST = [\n ...BASE_STYLES,\n ...DIMENSION_STYLES,\n ...BLOCK_STYLES,\n ...FLOW_STYLES,\n];\n\nconst DialogElement = tasty({\n as: 'section',\n styles: {\n display: 'flex',\n flow: 'column',\n fill: '#surface',\n pointerEvents: 'auto',\n outline: 0,\n position: {\n '': 'relative',\n 'type=panel': 'absolute',\n },\n width: {\n '': '$min-dialog-size $dialog-size (100dvw - 8x)',\n 'type=fullscreen': '(100dvw - 8x) (100dvw - 8x)',\n 'type=fullscreenTakeover': '100dvw 100dvw',\n 'type=panel': 'auto',\n },\n height: {\n '': 'auto (100dvh - 8x)',\n 'type=fullscreen': '(100dvh - 8x) (100dvh - 8x)',\n 'type=fullscreenTakeover | type=panel': '100dvh 100dvh',\n 'type=popover': 'initial initial (50dvh - 5x)',\n },\n gap: 0,\n border: {\n '': false,\n 'type=popover': true,\n },\n radius: {\n '': '1cr',\n 'type=tray': '1cr top',\n 'type=fullscreenTakeover': '0r',\n },\n shadow: {\n '': '$dialog-shadow',\n 'type=popover | type=panel': '$shadow',\n },\n top: {\n '': false,\n 'type=modal': '((50vh - 50%) / -3)',\n 'type=panel': 'auto',\n },\n '$dialog-title-padding-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-content-padding-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-padding-h': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-footer-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-content-gap': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n },\n});\n\nconst CloseButton = tasty(ItemButton, {\n qa: 'ModalCloseButton',\n type: 'neutral',\n styles: {\n position: 'absolute',\n top: '1x',\n right: '1x',\n },\n});\n\nconst sizeMap = {\n S: 'small',\n M: 'medium',\n L: 'large',\n};\nconst sizePxMap = {\n small: 360,\n medium: 479,\n large: 798,\n};\n\nconst intlMessages = {\n 'en-US': {\n dismiss: 'Dismiss',\n alert: 'Alert',\n },\n};\n\nexport interface CubeDialogProps\n extends Omit<BaseProps, 'role'>,\n AriaDialogProps,\n BaseStyleProps,\n BlockStyleProps,\n DimensionStyleProps {\n /** The size of the dialog */\n size?: 'S' | 'M' | 'L' | 'small' | 'medium' | 'large';\n /** Whether the dialog is dismissable */\n isDismissable?: boolean;\n /** Trigger when the dialog is dismissed */\n onDismiss?: (arg?: any) => void;\n /** That you can replace the close icon with */\n closeIcon?: ReactElement;\n closeButtonStyles?: Styles;\n role?: 'dialog' | 'alertdialog';\n}\n\n/**\n * Dialogs are windows containing contextual information, tasks, or workflows that appear over the user interface.\n * Depending on the kind of Dialog, further interactions may be blocked until the Dialog is acknowledged.\n */\nexport const Dialog = forwardRef(function Dialog(\n props: CubeDialogProps,\n ref: DOMRef<HTMLDivElement>,\n) {\n const transitionContext = useOpenTransitionContext();\n\n const isEntered = transitionContext?.transitionState === 'entered';\n\n const context = useDialogContext();\n\n const content = useMemo(() => {\n return <DialogContent key=\"content\" {...props} ref={ref} />;\n }, [props, ref]);\n\n const shouldContainFocus =\n isEntered && !!context.isOpen && context.type !== 'panel';\n\n return (\n // This component traps the focus inside the dialog and restores it on close.\n <FocusScope restoreFocus contain={shouldContainFocus}>\n {content}\n </FocusScope>\n );\n});\n\nconst DialogContent = forwardRef(function DialogContent(\n props: CubeDialogProps,\n ref: DOMRef<HTMLDivElement>,\n) {\n let { type = 'modal', ...contextProps } = useDialogContext();\n\n let {\n qa,\n children,\n size = 'M',\n isDismissable = contextProps.isDismissable,\n onDismiss = contextProps.onClose,\n closeIcon,\n closeButtonStyles,\n style,\n ...otherProps\n } = props;\n\n size = sizeMap[size.toUpperCase()] || size;\n\n const styles: Styles = extractStyles(otherProps, STYLES_LIST);\n\n let formatMessage = useMessageFormatter(intlMessages);\n\n let domRef = useDOMRef(ref);\n let { dialogProps, titleProps } = useDialog(\n mergeProps(contextProps, props),\n domRef,\n );\n\n // If rendered in a popover or tray there won't be a visible dismiss button,\n // so we render a hidden one for screen readers.\n let dismissButton;\n if (type === 'popover' || type === 'tray') {\n dismissButton = <DismissButton onDismiss={onDismiss} />;\n }\n\n // Focus the first focusable element in the dialog when it opens.\n //\n // We also re-run the priority focus logic when the dialog <section>\n // itself is the active element. This recovers from a race that occurs\n // when a popover-based component (FilterPicker, Picker, Select, …) opens\n // inside another contained Dialog: React's native `autoFocus` on the\n // inner control fires during the mutation phase, before the popover's\n // FocusScope registers in react-aria's focus-scope tree, so the outer\n // FocusScope yanks focus back. useDialog then defaults focus to the\n // dialog <section>; without re-promoting it here, the priority element\n // (e.g. the search input) is never focused.\n useEffect(() => {\n if (contextProps.isOpen) {\n setTimeout(() => {\n if (!domRef.current) return;\n\n const activeElement = document.activeElement;\n const isFocusOutsideDialog = !domRef.current.contains(activeElement);\n const isFocusOnDialogShell = activeElement === domRef.current;\n\n // Priority 1: autofocus input or primary button\n const priorityElement = domRef.current.querySelector(\n 'input[data-autofocus], button[type=\"submit\"], button[data-type=\"primary\"]',\n ) as HTMLElement | null;\n\n if (priorityElement && (isFocusOutsideDialog || isFocusOnDialogShell)) {\n priorityElement.focus();\n return;\n }\n\n if (isFocusOutsideDialog) {\n // Fallback: focus first tabbable element, or dialog itself\n const focusManager = createFocusManager(domRef);\n\n if (!focusManager.focusFirst({ tabbable: true })) {\n domRef.current.focus();\n }\n }\n });\n }\n }, [contextProps.isOpen]);\n\n // let hasHeader = useHasChild('[data-id=\"Header\"]', domRef);\n // let hasFooter = useHasChild('[data-id=\"Footer\"]', domRef);\n\n let slots = {\n title: {\n level: 2,\n preset: 'h4',\n ...titleProps,\n },\n content: {\n styles: {\n flexGrow: 1,\n padding: '$dialog-content-padding-v $dialog-padding-h',\n gap: '$dialog-content-gap',\n height: {\n '': 'max (100% - (2 * $dialog-content-padding-v))',\n ':last-child': 'max (100% - $dialog-content-padding-v)',\n },\n },\n },\n header: {\n ellipsis: true,\n styles: {\n display: 'flex',\n flow: 'row',\n gap: '1x',\n placeItems: 'center stretch',\n placeContent: 'space-between',\n padding: `$dialog-title-padding-v ${\n isDismissable ? '($dialog-padding-h + 4x)' : '$dialog-padding-h'\n } $dialog-title-padding-v $dialog-padding-h`,\n border: 'bottom',\n },\n },\n footer: {\n styles: {\n display: 'flex',\n gap: '1x',\n flow: 'row-reverse',\n placeItems: 'baseline stretch',\n placeContent: 'space-between',\n padding: '$dialog-footer-v $dialog-padding-h',\n },\n },\n buttonGroup: {\n styles: {\n flow: 'row-reverse',\n },\n },\n };\n\n return (\n <DialogElement\n ref={domRef}\n data-id=\"Dialog\"\n data-qa={qa || 'Dialog'}\n styles={styles}\n as=\"section\"\n {...dialogProps}\n mods={{ dismissable: isDismissable }}\n style={{\n '--dialog-size': `${sizePxMap[size] || sizePxMap.small}px`,\n ...style,\n }}\n data-type={type}\n data-size={size}\n >\n {dismissButton}\n\n <SlotProvider slots={slots}>\n {isDismissable && (\n <CloseButton\n icon={closeIcon || <CloseIcon size={20} />}\n label={formatMessage('dismiss')}\n onPress={() => onDismiss && onDismiss()}\n />\n )}\n {children}\n </SlotProvider>\n </DialogElement>\n );\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { _Modal } from "../Modal/Modal.js";
3
3
  import { DialogContext } from "./context.js";
4
4
  import { Children, isValidElement, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.138.1 | Cube Dev Team */
2
2
  import { _Title } from "../../content/Title.js";
3
3
  import { ButtonGroup } from "../../actions/ButtonGroup/ButtonGroup.js";
4
4
  import { Button } from "../../actions/index.js";